TCP关闭连接

       与建立连接需要三次握手一样,关闭连接也要遵循一定的操作序列。由于TCP连接时全双工的,数据可以在两个方向上同时传递,每台设备都可以单独关闭该方向上的连接。关闭连接意味着我的数据已经发送完了,但它还可以继续接收从对方到来的数据,直到对方也关闭了连接。应用程序可以连续调用几次send操作,紧接着关闭连接,然后接收数据,知道因对方关闭连接而导致接收失败。

      用户关闭连接后,如果TCP缓冲区中还有数据没发送,TCP会保证把数据成功地发送给对方,关闭连接后,应用程序必须继续读取从对方到达的数据,直到对方关闭连接为止,(关闭连接之后,自己不能再调用send发送数据,但是TCP会将缓冲区中没发送完毕的数据发送给对方),这使得参与通信的两台设备能够在连接结束之前有机会将缓冲区中没来得及发送的数据全部成功地发送给对方,不至于造成数据的丢失或不完整。

1,主动关闭方发送FIN报文,seq=m,自己进入FIN_WAIT_1状态,等待接收回复报文;

2,被动关闭方,接收到FIN报文后,发送ACK ack=m+1,报文,进入CLOSE_WAIT状态,此时不再能接收数据;如果还没有数据没发送完毕,则将数据发送完毕;然后准备关闭连接。

3,主动关闭方接收到FIN报文的回应,连接状态置为FIN_WAIT_2,此时写通道已经关闭。

4,被动关闭方发送完毕数据后,发送关闭报文,FIN seq=n,并进入LASK_ACK状态,即等待此次关闭报文的响应报文。

5,主动关闭方接收到对方的FIN报文,回复确认,即ack=n+1,并进入TIME_WAIT状态,然后过2MSL自动关闭连接。

6,被动关闭方接收到ACK报文后,进入CLOSED状态,连接双方都关闭。

终止连接时,双方都发送FIN报文,并接收对应的ACK报文,连接才真正地结束。简要的说:收到对方的FIN报文,读通道关闭;发送FIN报文并接收到ACK报文,写通道才关闭。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值