说一下什么是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​​。

相关推荐
汤愈韬4 小时前
ACL概述、ACL原理、基本ACL应用及配置
网络·网络协议·网络安全
码刘的极客手记8 小时前
VCAP4-DCA Beta 考试体验分享与 esxcli 自动化实战(第二、三部分)
网络·esxi·vmware·虚拟机
朝风工作室8 小时前
开源一款轻量级跨网段 IPC 设备发现与网络配置工具
网络·开源
Qaz555666919 小时前
透明DNS选路实验
网络
haluhalu.10 小时前
Linux网络编程------网络基础
网络·网络协议
坐怀不乱杯魂10 小时前
Linux网络 - HTTP协议
网络·网络协议·http
ipooipoo118811 小时前
动态住宅IP的定义、核心优势与技术场景应用
网络·网络协议·tcp/ip
祁鱼鱼鱼鱼鱼12 小时前
Keepalived实验环境设定
linux·服务器·网络
滴水之功12 小时前
OpenWrt的WAN和LAN的切换
linux·网络·openwrt
莹莹学编程—成长记13 小时前
预备知识socket
网络