TCP三次握手和四次挥手

TCP三次握手和四次挥手_第1张图片

除了上图中连接的状态外还可能出现如下状态:

CLOSING:TCP连接断开过程中,主动关闭端发送FIN包后,没有收到对应的ACK包,缺收到了对方的FIN包,此时进入CLOSING状态。

★ 为什么建立TCP连接时三次数据包,而断开连接时四次?

client发送FIN包给server,server只要收到,就会响应一个ACK包表示自己已经收到了FIN,但是此时server给client的数据可能还没有传完,client就会保持在FIN_WAIT_2状态,继续接收response。

等到server数据全部传完,才会发FIN给client。client收到server发来的FIN,知道server的数据发完了,回复ACK,此时client会设置一个计时器,保持TIME_WAIT状态等到2MSL,如果没有收到server传来的任何消息,就会关闭连接。(为什么要等到2MSL?因为client最会发的ACK也可能会丢失,server如果没收到ACK,将会不断重复发送FIN片段。所以连接不能立刻关闭,以保证server端也能正常关闭)

★MSL是指一个片段(数据包)在网络中的最大存活时间。

你可能感兴趣的:(网络协议)