tcp 相关
tcp 三次握手与四次挥手
三次握手
三次握手目标是建立可靠的通信信道,通过三次握手能够确认客户端与服务端收发能力是正常的。
- 第一次握手。客户端发送 SYN 标志的数据包到服务端,客户端进入 SYN_SEND 状态。此时,服务端能确认客户端发送正常,自己接收正常
- 第二次握手。服务端发送 SYN+ACK 标志的数据包到客户端,服务端进入 SYN_RECV 状态。此时,客户端能确认自己收发都正常,服务端收发正常。
- 第三次握手。客户端发送带有 ACK 标志的数据包到服务端,然后客户端与服务端都进入 ESTABLISHED 状态,完成 TCP 三次握手。服务端能确认自己收发正常,客户端收发正常
SYN
SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。
ACK
ACK(Acknowledgement)消息响应
四次挥手
- 第一次挥手。客户端发送 FIN 标志的数据包到服务端,关闭客户端到服务端的数据传送,客户端进入 FIN-WAIT-1 状态
- 第二次挥手。服务端收到带有 FIN 标志数据包后,向客户端发送带有 ACK 标志的数据包,服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态
- 第三次挥手。服务端数据传输完成后,向客户端发送 FIN 标志的数据包,请求关闭连接,服务端进入 LAST-ACK 状态
- 第四次挥手。客户端向服务端发送 ACK 数据包,客户端进入 TIME-WAIT 状态,服务端接收到 ACK 的数据包后进入 CLOSE 状态,客户端等待 2MSL 后,没收到服务端的回复,则知道服务端已关闭,客户端关闭连接。
为什么要四次挥手? TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
举例说明
- 第一次挥手:A 说“我没啥要说的了”
- 第二次挥手:B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
- 第三次挥手:于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
- 第四次挥手:A 回答“知道了”,这样通话才算结束。
MSL
MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 已经被成功接收,则结束 TCP 连接。
http/2 关键特性
- 二进制分帧:在 HTTP 的报文传输格式方面,HTTP/1.1 协议以换行符作为纯文本的分隔符,而 HTTP/2 将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们编码
- 头部压缩:HTTP 每次请求或响应都会携带首部信息用于描述资源属性。HTTP/1.1 使用文本的形式传输消息头,消息头中携带 cookie 每次都需要重复传输几百到几千的字节,这十分占用资源。HTTP/2 使用了 HPACK 算法来压缩头字段,这种压缩格式对传输的头字段进行编码,减少了头字段的大小。同时,在两端维护了索引表,用于记录出现过的头字段,后面在传输过程中就可以传输已经记录过的头字段的索引号,对端收到数据后就可以通过索引号找到对应的值。
- 多路复用:HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,实现多流并行而并不依赖多个 TCP 连接,并行地在同一个 TCP 连接上双向交换消息,HTTP/2 基于二进制分帧层,在另一端根据流标识符和首部将他们重新组装起来
- 服务端推送:在 HTTP/2 中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo 以及样式表,因为服务端知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。
网络协议
TCP/IP 即传输控制协议/网络互联协议,是针对 Internet 开发的一种体系结构和协议标准,相对于 OSI 体系结构更简洁。分层体系,由下至上分别是网络接口层、网际层、传输层和应用层(四层分法)。
TCP/IP 则是四层的结构,相当于是对 OSI(Open System Interconnect 的缩写,意为开放式系统互联)模型的简化
应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。

数据链路层,也有称作网络访问层、网络接口层。他包含了 OSI 模型的物理层和数据链路层,把电脑连接起来。
网络层,也叫做 IP 层,处理 IP 数据包的传输、路由,建立主机间的通信。
传输层,传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信。
应用层,包含 OSI 的会话层、表示层和应用层,提供了一些常用的协议规范,比如 FTP、SMPT、HTTP 等。