TCP连接释放的四次挥手过程?

来源:互联网 发布:excel不显示重复数据 编辑:程序博客网 时间:2024/06/03 11:19

四次挥手过程:
这里写图片描述
①开始时客户端A和服务器端B都处于“ESTAB-LISHED已建立连接”状态。

②假设Client端A发起中断连接请求,也就是发送FIN报文(FIN=1,seq=u,u是A最后一次发送的字节的序号+1)。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。A发完后A进入“FIN-WAIT-1释放等待1”状态。

③B收到FIN报文,先发送ACK,”告诉Client端,请求收到,但是我还没准备好,请继续你等我的消息”。B收到后向A发送ack(ACK=1,seq = v,ack = u+1),B发完后B进入“COLSE-WAIT释放等待”状态。

④A收到B的确认后进入“释放等待2FIN-WAIT-2”状态。

⑤当B确定数据已发送完成,则向A发送FIN报文,”告诉Client端,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后, “就知道可以关闭连接了。B发完后B进入“LAST-ACK” 状态(FIN=1,ACK=1,seq=w,ack = u+1)。

⑥client还是不相信网络,怕Server端不知道要关闭,所以发送ACK(ACK=1,seq = u+1,ack = w+1)后进入“TIME_WAIT”状态,如果Server端没有收到ACK则可以重传。Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。

为什么设置2MSL时间?

①为了保证A发送的最后一个ACK能到达B。因为这个ACK可能丢失,因为使B收不到确认,无法关闭,有个这段时间,B就可以超时重传FIN+ACK,然后A就重传一次ACK,然后重置定时器。最后A,B都能顺利关闭,如果没有这段时间,A发送完ACK就关闭,B不一定能顺利关闭。

②防止“已失效连接请求报文段”出现在本连接中,A在发送完最后一个ACK后,再经过2MSL,就可以使本链接持续的时间内所产生的所有报文段都在网络中消失,这样就可以使下一个连接中不再出现这种旧的请求报文段。

阅读全文
0 0
原创粉丝点击