TCP四次挥手

TCP四次挥手

TCP作为可靠的连接协议,不仅体现在连接的建立上,也体现在其释放连接上,但是世界上是不存在百分之百可靠的通信机制的,我们来看下TCP释放连接,也就是四次挥手是如何尽可能保证TCP的可靠性的。

使用Wireshark抓包,如图:

1.四次挥手的过程

  1. 当客户端已经发送完数据后,调用close方法向服务端发送FIN包,请求关闭连接,此时客户端进入 FIN_WAIT1状态,代表客户端已经不再发送数据,但是还能接收服务端数据,这个状态也叫 半关闭状态。

因为TCP是全双工协议,客户端和服务端能互相发送数据,都有可能先传输完数据请求关闭连接,所以先请求关闭的一方称为主动关闭方,而另一方称为被动关闭方

  1. 服务端收到客户端的FIN包后进入CLOSE_WAIT状态,并返回一个ACK给客户端,客户端端收到后,进入FIN_WAIT2状态。

  2. 当服务端没有数据向客户端发送时,向客户端发送FIN包,然后服务端进入LAST_ACK状态,客户端收到FIN包,会进入TIME_WAIT状态,这是一个比较特殊的状态,后面会单独讲解。

  3. 服务端收到ACK后进入CLOSE状态,客户端在TIME_WAIT等待2MSL后会进入CLOSE状态。

MSL是Maximum Segment Lifetime英文的缩写,即报文的最大生存时间,超过这个时间的报文将会被丢弃。

在TCP中还存在一种特殊的情况,就是同时关闭。就是客户端和服务端同时发送FIN包,但是这种情况并不常见,知道这么个概念就行了,这里就不过多阐述了。

2.TCP四次挥手改为三次可以吗

因为TCP连接是全双工的,数据在两个方向上能够同时传递,因此每个方向的数据传输都必须单独关闭。当一端收到FIN并响应给对端的时候,这一方向的数据流便停止了,也就是半关闭状态。但是由于TCP有延迟确认的功能或者服务端收到FIN包后没有数据发送了,就能同时发送FIN+ACK包,所以其实三次挥手是可以的。

但是延迟确认可能会带来一个问题,就是如果被动关闭方没有及时ACK,主动关闭方的FIN包,主动关闭方可能认为FIN包丢失了,导致不必要的重传发生。所以四次挥手是相对最合理的关闭连接的方式。

关注作者微信公众号:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值