TCP 协议

http协议属于 OSI 七层模型中的应用层协议。其主要是用于规范数据传输所遵循的格式标准。

最终的连接建立与数据传输还是基于 TCP/IP 协议来完成。

过程

建立 TCP 连接时会发生:三次握手(three-way handshake)

Client > Server [SYN] 在么

Server > Client [SYN, ACK] 在

Client > Server [ACK] 知道了

关闭 TCP 连接时会发生:四次挥手(four-way handshake)

Client > Server [FIN] 我要关闭连接了

Server > Client [ACK] 知道了,等我发完报文

Server > Client [FIN] 我要关闭连接了

Client > Server [ACK] 好的,知道了

几个报文的标识的解释:

SYN: synchronization(同步)

ACK: acknowledgement(确认:告知已收到)

FIN: finish(结束)

原因

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当 Server 端收到 Client 端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。

但是关闭连接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个 ACK 报文,告诉 Client 端,”你发的 FIN 报文我收到了”。只有等到我 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。故需要四步握手。

参考

链接:知乎作者 eechen
链接:HTTP 协议中 TCP 的三次握手,四次挥手总结