众所周知,TCP是面向连接的、可靠的传输层的通信协议,它在建立连接以及断开连接时分别会发生三次握手和四次挥手的行为,以保证它的这种可靠性特征。
建立连接:三次握手
三次握手的过程如下:
- 客户端发送一个
SYN (SEQ=x)
报文给服务器; - 服务器收到后,回应一个
SYN (SEQ=y) + ACK (ACK=x+1)
的报文; - 客户端收到服务器的报文后,再回应一个
ACK(ACK=y+1)
的报文,即完成三次握手过程。
TCP三次握手
三次握手完成后,客户端和服务器就能正常进行数据传输了。
断开连接:四次挥手
四次挥手的过程如下:
- 某一端想要关闭连接时,需要发送一个
FIN
分节给另一端,表示该端的数据发送已经完毕,可以关闭连接了。 - 另一端接收到关闭信号后,发送
ACK
报文确认已接收到关闭信息。 - 一段时间后,另一端也完成了数据发送后,将发送
FIN
给对端。 - 接收到FIN的原发送端会发送确认报文
ACK
,至此两端将关闭连接。
TCP四次挥手
四次挥手过程中,任何一端都可以执行主动关闭,但一般是客户端一方主动执行。
-
Q:为什么断开连接需要四次而不是三次?
A: 因为断开连接时,被动方需要先发送确认报文,确认它已经收到了主动方发送的断开信息。这时,它可能还需要等待一段时间,等数据发送完毕,再发送FIN
报文告知主动方它也已经发送完成,可以断开连接。因此ACK
与FIN
不是同时发送的,需要多一次。
参考文献:
https://baike.baidu.com/item/TCP/33012?fr=aladdin#6_2
https://www.cnblogs.com/lms0755/p/9053119.html
网友评论