网络初探
HTTP
超文本传输协议
- 请求,响应报文
- 链接建立流程
- HTTP的特点
请求/响应报文
请求报文:
- 请求行:方法(get,post),URL,协议版本(HTTP版本)
- 头部字段名:值 (Key、Value形式)多个首部字段名构成首部字段区
- 实体主体:get请求是没有的。post请求会带有实体
响应报文:
- 响应行:版本,状态码,短语
- 头部字段名:值 (Key、Value形式)
多个首部字段名构成首部字段区 - 实体主体:get请求是没有的。post请求会带有实体
HTTP的请求方式有哪些?
- GET,POST,HEAD,PUT,DELETE,OPTIONS
GET和POST的区别?
GET:获取资源(安全的,幂等的,可缓存的)
POST:处理资源(非安全的,非幂等的,非可缓存的)
安全性:不应该引起Server端的任何状态变化,常见的请求方式(GET,HEAD,OPTIONS)
幂等性:同一个请求方法执行多次和执行一次的效果完全相同,请求方式:(GET,PUT,DELETE)
可缓存性:请求是否可以被缓存。请求方式:(GET,HEAD)
状态码
2xx:形影成功
3xx:网络重镜像
4xx:客户端请求本身问题
5xx:server端问题
连接建立流程(3次握手,4次挥手)
-
TCP的三次握手:(客户端和Server端的三次交互)
1.客户端发一个SYN报文给Server
2.Server端接收到会返回SYN,ACK的的报文。
3.客户端确认回应确认报文 -
进行HTTP请求与响应
1.客户端发送http请求报文到服务端
2.服务端响应报文回给客户端 -
完成请求后,TCP进行四次挥手
1.客户端发起连接断开,发起FIN
2.服务端会返回给客户端一个确认的报文
3.服务端再发送一个断开的报文
4.客户端接收后发送给服务端确认的报文
完整流程
image.png
HTTP的特点
无连接:进行一个HTTP的持久连接的一个补偿
无状态:Cookie、Session
持久连接
非持久连接:客户端打开一个TCP连接,服务端返回后会关闭,当返送第二个请求后会再次开启,重新创建TCP连接(3次握手4次挥手)
持久连接:客户端打开一条有一定失效TCP连接通道,多个http请求会在tcp链路上,时间过后会关闭,也是提升网络效率。
持久连接涉及的请求头部字段
头部字段:
Connection: keep-alive
time:20(持续时间:同一域名访问复用tcp连接)
max:10 (最多可以发生多少http请求)
怎样判断一个请求是否结束?
- Content-length:1024
(server响应携带数据的大小,客户端判断接受的字节数进行判断) - chunked:post请求下,服务端需要多次响应,如果是控chunked结束。
Charles的抓包原理是怎样的?
- http中的中间人攻击,通过代理服务器进行对Server的访问。
HTTPS与网络安全
HTTPS和HTTP有什么区别?
- HTTPS = Http + SSL/TLS 共同组成,多了一个安全模块,
IP是网络层,TCP是传输层,HTTP属于应用层,SSL介于应用层和传输层之间的中间层,安全机制。
HTTPS链接建立流程?
1.客户端:服务端返送报文:(TLS协议版本号,支持的加密算法,随机数)
2.server端:返回server证书,商定的加密算法,随机数
3.客户端:对证书的验证,是否为合法server,对server端的公钥进行验证。
4.客户端:组装会话密钥:双端产生的随机数以及客户端产生的预主密钥进行组装
5.客户端:通过server的公钥对预主密钥进行加密传输。
6.server端通过私钥解密得到的预主密钥
7.server端通过双端产生的随机数和预主密钥进行会话密钥的组装。
8.客户端再发送加密的握手消息。
9.server端返回加密的握手消息。
会话密钥:客户端随机数 + 服务端随机数 + 预主密钥(对称加密的结果)
HTTPS链接使用哪些加密方式?为什么
- 链接建立过程采用非对称加密,非对称加密耗时
- 后续数据传输通信 采用对称加密。
TCP、UDP
都是传输层协议:TCP传输层控制协议,UDP用户数据报协议
UDP(用户数据报协议)
特点:
无连接,尽最大努力交付,面向报文(既不合并,也不拆分)
image.png
功能: 复用,分用,差错检测
复用:
1.建立传输过程中,需要有ip地址和端口号组成-套接字。
2.同一个应用会采用不同的传输层协议,端口号也不同。
3.即使不同的端口号都可以复用udp协议进行传输。
4.最终进行ip层交互
分用:
1.ip层接受了一个ip数据报数据。
2.拆分成UDP数据报
3.每一个数据报都会有源端口和目的端口标识,通过目的端口进行分发。
差错检测:
1.一部分:UDP进行差错检测额外拼装:12字节伪首部
2.二部分:8字节的UDP首部
3.三部分:传输的数据
4.以16位字为一个单元,按二进制饭吗计算出这些16位字的和,将和的二进制饭吗写入检测和位(8字节UDP首部的末尾)
5.接收方也会进行校验。
TCP(传输控制协议)
特点:
面向连接,可靠传输,面向字节流,流量控制,拥塞控制。
面向连接:
建立连接:3次握手,数据传输后释放连接:4次挥手。
为什么要进行3次握手?
避免重复建立连接,如果客户端超时。
四次挥手流程
可靠传输:
无差错,不丢失,不重复,按顺序到达。
-
通过停止等待协议:
无差错情况,超时重传,确认丢失,确认迟到。 -
无差错情况:通过双端握手交互进行
-
超时重传:
image.png -
确认丢失:
image.png -
确认迟到:
image.png
面向字节流
TCP会对传输数据进行划分,10字节可以拆分成3字节7字节。
流量控制
滑动窗口协议:
1.发送窗口:数据发送到TCP层:发送缓存字节编号序号的是增大的。
2.接收方可以告知发送方调整发送缓存的大小,通过tcp报文告知。
3.接收方如果接收到未按序到达的字节会先存放等待中间的没有达到的字节进行补全。
image.png
拥塞控制
慢开始,拥塞避免
快回复,快重传。
image.png
DNS(通过域名解析IP地址)
了解DNS解析么?
域名到IP地址的映射,DNS解析请求采用UDP协议报文,并且是明文传输。
DNS解析查询方式?
-
递归查询和迭代查询。
递归查询:逐级访问,最后返回给客户端。
image.png
迭代查询:通过上级DNS高速可能知道的DNS服务器进行查询。
image.png
DNS解析存在哪些问题?
DNS劫持问题和DNS解析转发的问题。
-
DNS劫持
image.png
DNS劫持和HTTP的关系是怎样?
没有关系,发生在HTTP建立之前,DNS解析请求使用的是UDP数据报,端口号53
怎样解决DNS劫持?
httpDNS,长链接。
-
httpDNS:采用DNS向DNS服务器53端口进行请求,变为使用http协议向DNS服务器80端口进行请求。
image.png
1.向DNS中介服务商发起请求。
2.传入需要解析的域名,和自身ip地址。
3.最后中介服务器进行返回。 -
长链接:通过客户端和服务端之间,建立一个长连的server,客户端和长连Server通过tcp建立长连通道,长连Server通过内网专线,访问Server端进行请求和响应,规避了公网的DNS解析。
-
DNS解析转发
image.png
Session、Cookie
HTTP协议无状态的特点的补偿。
Cookie
1.cookie用来记录用户状态,区分用户,保存在客户端。
2.服务端发起请求,Server返回数据携带Cookie,客户端进行存储。
3.通过“set-cookie”字段
4.客户端请求也可以携带保存的cookie,服务端进行识别。
如何修改cookie
新cookie覆盖旧cookie,覆盖规则:name,path,domain与原cookie一致。
如何删除cookie
和修改规则一致,设置cookie的expires的时间节点,或者maxAge = 0
如何保证cookie安全
- 对cookie进行加密处理
- 只在https上携带Cookie。
Session
Session也是用来记录用户状态的,区分用户,状态存放在服务端。
Session需要依赖于Cookie。
Session工作流程:
在server返回Cookie的会添加sessionId
客户端发送sessionId即可,server去识别用户。