说一下什么是tcp的2MSL,为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?

1.TCP之2MSL

1.1 MSL

MSL:Maximum Segment Lifetime报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间

1.2为什么存在MSL

TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段,并且TTL的限制是基于跳数

1.3MSL大小定义

RFC文档中规定为2分钟,但是实际实现过程中,MSL一般为:30秒、1分钟、2分钟

2.1 何为2MSL状态

在TCP调用connect建立socket的连接后,主动关闭socket连接的过程中有一个状态为Time_Wait(也就是2MSL等待机制,需要停留2MSL的时间),具体见下面的图:

在这里插入图片描述

2.2什么时候有2MSL状态

只有主动关闭socket连接的时候才有此状态,并且在2MSL等待期间,定义这个连接的Socket
Pair(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用

3.1 2MSL机制作用

保证了最后一个ACK发送给被动关闭端,确保连接双方关闭完成,如果没有该机制,最后一个ACK丢失后会出现半连接的状态

3.2 为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?

就好像分手一样,客户端主动关闭的,你得为这件事负责吧?客户端为了确保服务器收到最后一次挥手的报文。如果最后一次丢包了,服务器没有收到第四次挥手的报文,还以为客户端不想分手,就会再重发一次第三次挥手的报文,看看客户端是不是后悔了,不想分手了。这个等待时间就是为了接收超时重传的报文。

假如客户端发完就断开了链接,然后服务器一直等不到回应,重传了报文还是没有得到回应,服务器不死心啊,服务器就关闭不了链接。客户端这时就是典型的渣男角色,分手你别让别人还抱有幻想是不是?

说多了,回归正题, tcp最大的特点就是数据不会丢失啊,客户端渣渣的建立了新连接,然后发现有一个旧的数据包,然后让客户端的新连接也不好了,这就叫自食其果。所以有了这个等待时间,既保证了双方都正常关闭,又保证了所有报文段消失,不会在新连接中出现旧的请求报文段。

总结

主动发送 fin 关闭的一方,在 4 次挥手最后一次要等待一段时间我们称这段时间为 ​​2MSL​​。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
四次挥手是TCP连接的关闭过程,其中最后一个步骤是等待一段时间,这段时间被称为2MSL,其中MSL是Maximum Segment Lifetime的缩写,表示一个TCP报文段在网络中最长的存活时间。四次挥手等待时间为什么是2MSL呢?原因主要有以下两点: 1. 确保网络中所有报文段都被正确处理 在TCP连接的关闭过程中,客户端和服务器端都会发送FIN报文段,表示数据传输结束。而这些FIN报文段在网络中会经过多个路由器和交换机,可能会出现网络拥塞、延迟等问题。如果关闭连接的一方没有收到对方发送的ACK报文段,就会重复发送FIN报文段,从而影响网络的稳定性。等待2MSL时间可以确保网络中所有的报文段都被正确处理,避免重复发送FIN报文段。 2. 避免重复连接的建立 TCP协议中,每个连接都有一个唯一的连接标识,由本地IP地址、本地端口号、远程IP地址和远程端口号组成。如果两个连接的四元组相同,就认为是同一个连接。在TCP连接关闭的过程中,可能会出现延迟的ACK报文段,导致连接关闭的一方在等待2MSL时间内收到了对方发送的FIN报文段。如果等待时间太短,就有可能将这个新的连接误认为是之前关闭的连接,从而出现数据传输错误的情况。等待2MSL时间可以避免这种情况的发生,确保新连接的正确性。 综上所述,四次挥手等待时间2MSL,主要是为了确保网络中所有报文段都被正确处理,避免重复连接的建立,保证TCP连接的可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值