TCP释放连接(四次挥手),为什么要四次,最后一次挥手后为什么要等待2MSL

TCP连接释放过程通过四次挥手确保双方可靠关闭。首次挥手由发送方发起FIN请求,进入等待状态;接收方确认收到后进入关闭等待,处理剩余发送请求。第二次挥手接收方发送ACK并请求释放,等待最后确认。若发送方未收到ACK,会在超时后重传,这就是四次挥手的原因。TIME_WAIT状态等待2MSL是为了确保丢失的ACK能被重传,保证网络可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP释放连接的四次挥手

  • 第一次:发送方向接收方发送FIN释放连接请求报文,进入第一个等待时间FIN-WAIT-1
  • 第二次:接收方收到发送方的释放连接的请求,向发送方发送ack表示收到发送方的释放连接请求,但是还无法立即关闭,因为还要未完成处理的发送请求,因此进行关闭等待阶段,在这个期间接收方可以处理还未完成的发送请求;发送方收到接收方的第一次确认后进行第二次等待,等待它处理完发送请求(在这期间还可以进行数据的传输。)
  • 接收方处理完成之后,向发送方发送释放连接请求表示自己已经可以执行释放连接操作,并且携带ack再次确认。然后进入最后确认等待,等待发送方的确认,如果没有收到接收方ack,那么会进行重传。
  • 第四次:发送方收到接收方的再次确认,最后向接收方发送释放连接的确认。然后进行开启等待计时器(默认2MSL),在等待计时器期间是不会释放连接的(还会继续占用端口),最后等待计时器结束后,释放资源
MSL(Maximum Segment Lifetime),最长报文段寿命,它是任何报文在网络上存在的最长的最长时间,超过这个时间报文将被丢弃。一般建议设置为2分钟

在这里插入图片描述

为什么需要四次挥手?

因为不像建立连接的过程,接收方收到连接请求后可以立即发送SYN进行连接,释放资源时,接受方在收到发送方的释放连接请求后,还需要一段时间来处理未完成的发送请求,这里需要两次确认发送方的请求:第一次是未处理完,我还不能释放,但是收到了你的请求,告诉发送方一声,等等我;第二次确认表示已经处理完请求了,我也可以进行释放了。因此需要四次

为什么需要接收方最后需要等待2MSL

本质原因是网络是不可靠的,所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果发送方的最后一次ack没有被接收方收到的话,那么接收方会进行重传第三次的释放连接请求,TIME_WAIT就是为了在这种情况下重发丢失了的ack报文。
也就是:

接收方等待最后一次ack+重发的第三次释放连接请求到达发送方的时间<=2MSL,因此需要等待2MSL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值