TCP释放连接时为什么time_wait状态必须等待2MSL时间

摘要:
为什么上图中的A必须在time-wait状态下等待2MSL时间?B将随着时间的推移重新发送FIN+ACK消息段,A将在2MSL内接收重新发送的FIN+AACK消息段。在TIME_两端的端口不能在WAIT状态下使用。您可以继续使用它们,直到2MSL时间结束。当连接处于2MSL等待阶段时,任何延迟的消息段都将被丢弃。然而,在实际应用中,您可以设置SO_ REUSEADDR选项不必等待2MSL时间结束才能使用此端口。TTL和MSL是相关的,但不是简单地相等。MSL应大于或等于TTL。

TCP释放连接时为什么time_wait状态必须等待2MSL时间第1张

为什么上图中的A在TIME-WAIT状态必须等待2MSL时间呢? 

第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。 
第二,A在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段。 

什么是2MSL

MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,而ip头中有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

    2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

    TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。

免责声明:文章转载自《TCP释放连接时为什么time_wait状态必须等待2MSL时间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Solaris 11中的变化ehcache.xml下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

计算机网络基本知识

今天来讲讲网络,主要将传输层和应用层的一些基础知识 OSI七层模型:应用层(application)、表示层(presentation)、会话层(session)、传输层(transport)、网络层(network)、数据链路层(data)、物理层(physical/base)。用一句英语总结就是 all people seem to need data...

Android中实现TCP和UDP传输实例

TCP和UDP在网络传输中非常重要,在Android开发中同样重要。 首先我们来看一下什么是TCP和UDP。 什么是TCP? TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specifi...

Linux抓包工具tcpdump详解

原文链接 tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具。 tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需...

ffmpeg文档24-协议

24 协议 FFmpeg协议配置元素,用于访问资源时要求特定的协议。 默认编译时会自动支持所有可用协议。你可以在编译脚本中添加 "–list-protocols"选项来了解有哪些协议被支持。 你也可以在编译时通过 "–disable-protocols"禁止所有的协议支持,然后通过 "–enable-protocol=PROTOCOL"来启用个别协议,或...

nmap命令详解

1、https://www.cnblogs.com/machangwei-8/p/10353004.html 扫描操作系统类型,并统计数量: nmap -F -O 10.16.0.200-255  | grep Running > /tmp/os  echo "$(cat /tmp/os | grep Windows | wc -l) Windows...

iptables关键学习总结

iptables技术推荐参考这位仁兄的博客:http://www.zsythink.net/archives/category/%E8%BF%90%E7%BB%B4%E7%9B%B8%E5%85%B3/%E9%98%B2%E7%81%AB%E5%A2%99/page/2/ iptables指南参见:https://www.frozentux.net/ipt...