TCP协议中的三次握手和四次挥手
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 报文,因此不能一起发送。故需要四步握手。
参考
本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ShiGuang
评论