TCP四次挥手

TCP的连接的断开

上次我们介绍了TCP的连接的建立需要经历“三次握手”。今天需要介绍的主题是TCP连接的断开,这个是比较复杂的一个事情,它需要经历我们常说的“四次挥手”。客户端进程和服务端进程都可以主动提出释放连接,在socket编程中,就是一方简单的调用close方法。

TCP四次握手图示

image

TCp四次握手详细介绍(假设客户端首先提出释放连接)

  • 客户端A发送一个“FIN”报文段给服务器B,其中该报文中的FIN标志位被置为1。
  • 服务器B收到了FIN报文段后,它会向客户端发送“ACK”报文段,表示允许断开该TCP连接了。同时它还会通知高层应用程序,客户端已经请求释放连接。此时客户端已经不再会给服务器发送数据了,但是服务器到客户端的TCP连接还没有断开,所以服务器还是可以向客户端发送数据,此时状态称为“半关闭状态”。
  • 当服务端的高层程序已经没有数据要发送了,它会通知TCP可以断开连接了,这时候,服务器就会向客户端发送FIN报文段。
  • 客户端收到FIN报文段后,客户端会发送“ACK”报文段给服务器,同时客户端会进入一个叫“TIME-WAIT”的状态,需要再等待两个报文寿命(MSL)时间后,才进入最后的“CLOSE”状态。

分析:为什么要等待2个MSL后才关闭整个连接

确保服务器在最后阶段发送给客户端的数据,已经客户端发送给服务器的最后一个“ACK”报文能够正确地被接收,防止因个别传输错误导致连接释放失败。

总结

四次挥手比起三次握手是比较复杂的一个问题,但是对于我们理解了它的原理也就差不多了.现在我自己有一个疑问就是:第一次挥手后,说客户端已经不再会向服务器发送消息了,这个描述是否恰当,后续不是还要给服务器发送“ACK”报文吗?后来,自己悟出了其中语义,其实“ACK”报文段本来就是不含数据的,所以该说法也是恰当的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值