linux tcp 断开挥手,51CTO博客-专业IT技术博客创作平台-技术成就梦想

d6520e18a24cdd6b48cc7b33a285718a.png

说明:当通信完成后,A和B都可以主动断开连接,例如,客户端A不主动断开连接,也不发送数据,B还等着接受,会占用服务器B的资源,B也可以主动断开连接。

(1)A,B都处于ESTAB-LISHED建立连接状态。当A发送完数据后,想要断开连接,向B发送FIN=1(1代表请求断开连接),seq=u(这次发送的包,在我这所排的序号),发送后,A进入FIN-WAIT-1 终止等待1状态。

(2)当B收到A的请求后,回复ACK=1(确认收到),seq=v(这个包在我这,即在服务器B这排序为v,因为之前传输数据传输了很多包,这个排序不确定),ack=u+1(请求下一个发送的包为u+1,代表上一个包u已收到),当B发送后,进入CLOSE-WAIT关闭等待状态

(3)A收到B的回复后,进入FIN-WAIT-2终止等待2状态,因为B仅仅是回复了,我收到你的断开请求了,但是B没说是否同意断开,所以A继续等待。

(4)服务器B再次发送FIN=1(发送中断请求,即同意中断),ACK=1(确认收到),seq=w(这个包在我这,即在服务器B这排序为w,在请求关闭的同时,可能之前传送的包因网络问题,还在传输过程中,这中间服务器还会收到包,所以包排序不确定,有可能不是v+1,所以命名为w),ack=u+1(请求下一个发送的包为u+1,因为A已经进入终止等待状态,不会主动再发送包了,所以上次请求的包u+1,A没有发送,B这次继续发请求还是这个包),当B发送后进入LIST-ACK最后确认状态。

(5)当A收到B的中断请求后,发送回复,ACK=1(确认收到),seq=u+1(发送包u+1,这个包在我这排序为u+1,即上次B的回复中,请求下次发的包),ack=w+1(A会算出这个包在B那边的排序。上一个包为w,所以这个包为w+1),发送完后A进入TIME-WAIT时间等待状态,因为网络中可能还有数据在传输,所以A要等待一段时间,确认这些数据发送成功。

(6)当B收到A的确认后,进入CLOSED关闭状态,断开与A连接,然后会迅速进入LISTEN收听状态,继续接受下一个客户端的请求连接。当A等待2MSL(TCP报文段在网络中的最大生存时间,RFC 1122标准的建议值是2min),进入CLOSED关闭状态,断开与服务器B连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值