TCP 的基础
三次握手- 第一次握手:建立连接. 客户端发送请求报文,SYN位置为1,Sequence Number为x,客户端进入SYN_SEND状态,等待服务器响应
- 第二次握手: 服务器收到SYN报文,向客户端发送SYN请求,Sequence Number为y,服务器进入SYN_RECV状态
- 第三次握手:客户端收到服务器的SYN+ACK报文,并向服务器发送ACK报文,两端都进入ESTABLISHED状态
四次挥手- 第一次挥手:主机1发送FIN报文,表示要断开连接
- 第二次挥手:主机2回复ACK报文,主机1进入FIN_WAIT_2
- 第三次挥手:主机2发送FIN报文,请求关闭连接,主机二进入LAST_ACK状态
- 第四次挥手:主机1发送ACK报文,进入TIME_WAIT,主机二收到后关闭连接,主机一等待2MSL后关闭连接
- 可能发生的意外
http2 的多路复用
- HTTP2用
二进制格式传输,取代了HTTP1.x的文本格式,二进制格式解析更高效。 - 多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过
同一个TCP连接并发完成。 - 在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源会有6-8个TCP连接都限制。
- HTTP2中
- 同域名下所有通信都在
单个连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。 - 单个连接上可以并行交错的请求和响应,之间
互不干扰。
- 同域名下所有通信都在
常用头部
通用
Connection:允许客户端和服务器指定与请求/响应连接有关的选项,http1.1默认是keep-aliveDate:提供日期和时间标志,说明报文是什么时间创建的Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式Cache-Control:随报文传送缓存指示
请求
Host:给出了接收请求的服务器的主机名和端口号Referer:提供了包含当前请求URI的文档的URLUser-Agent:将发起请求的应用程序名称告知服务器Accept:告诉服务器能够发送哪些媒体类型Accept-Encoding:告诉服务器能够发送哪些编码方式Accept-Language:告诉服务器能够发送哪些语言Range:如果服务器支持范围请求,就请求资源的指定范围If-Range:允许对文档的某个范围进行条件请求Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据Cookie:客户端用它向服务器传送数据
响应
Age:(从最初创建开始)响应持续时间Server:服务器应用程序软件的名称和版本Accept-Ranges:对此资源来说,服务器可接受的范围类型Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
实体
Allow:列出了可以对此实体执行的请求方法Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去Content-Base:解析主体中的相对URL时使用的基础URLContent-Encoding:对主体执行的任意编码方式Content-Language:理解主体时最适宜使用的自然语言Content-Length:主体的长度Content-Type:这个主体的对象类型ETag:与此实体相关的实体标记Last-Modified:这个实体最后一次被修改的日期和时间
本文深入解析TCP/IP协议,包括三次握手建立连接与四次挥手断开连接的过程,对比HTTP1.x与HTTP2的区别,特别是HTTP2的多路复用机制如何提高效率。
1万+

被折叠的 条评论
为什么被折叠?



