首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么tcp的TIME_WAIT状态要维持2MSL

阅读本文需要的预备知识: 了解TCP协议的状态变迁; 了解TCP拆链的四次挥手过程; 了解为什么需要TIME_WAIT状态。...这段文字说明了TIME_WAIT状态持续2MSL的时间可以让一个TCP连接的两端发出的报文都从网络中消失,从而保证下一个使用了相同四元组的tcp连接不会被上一个连接的报文所干扰。...如何理解TIME_WAIT状态持续2MSL的时间就可以让一个TCP连接的两端发出的报文都从网络中消失呢?...不处理这些报文可能导致前后两个使用相同四元组的连接中的后一个连接出现异常(详见UNIX网络编程卷1的2.7节 第三版); 处于TIME_WAIT状态的一端在收到重传的FIN时会重新计时(rfc793 以及 linux...kernel源代码tcp_timewait_state_process函数)。

6.4K42

详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因

阅读本文需要的预备知识: 了解 TCP 协议的状态变迁; 了解 TCP 拆链的四次挥手过程; 了解为什么需要 TIME_WAIT 状态。...这段文字说明了 TIME_WAIT 状态持续 2MSL 的时间可以让一个 TCP 连接的两端发出的报文都从网络中消失,从而保证下一个使用了相同四元组的 TCP 连接不会被上一个连接的报文所干扰。...如何理解 TIME_WAIT 状态持续 2MSL 的时间就可以让一个 TCP连 接的两端发出的报文都从网络中消失呢?...不处理这些报文可能导致前后两个使用相同四元组的连接中的后一个连接出现异常(详见《UNIX网络编程》卷 1 的 2.7 节 第三版); 处于 TIME_WAIT 状态的一端在收到重传的 FIN 时会重新计时(rfc793以及 Linux...Kernel 源代码tcp_timewait_state_process函数)。

66710
您找到你想要的搜索结果了吗?
是的
没有找到

【漫画】TCP第四次挥手时,为啥要等待2MSL才进行关闭?

而2MSL的意思就是2倍的MSL的意思。 ? ? ? ? ? ?...服务器无法判断客户端是否收到,这种情况本身就是一种不可靠的情况,堂堂号称可靠的TCP的连接出现这种情况岂不是要被笑掉大牙? ? 乔戈里:小萌你说得很好,也因此出现了客户端要等待2MSL的情况。...但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,于是,TCP...所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。 ? ?...这个时候小明以为他的消息会在这2MSL中的时间中消失(小明以为这个TCP是正常的四次挥手),悄悄说了一句女神的坏话,但是悲剧的是这个小明所在的网络环境不是可靠的没有等待2MSL的网络环境,并没有消失,因此如果没有

1.8K30

Linux网络编程TCP

TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。...OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...使用TCP协议的流程图 根据流程图逐一讲解API接口.

5.4K30

Linux TCP RST情况

其中复位标志RST的作用就是“复位相应的TCP连接”。 TCP连接和释放时还有许多细节,比如半连接状态、半关闭状态等。详情请参考这方面的巨著《TCP/IP详解》和《UNIX网络编程》。...原因在于Socket.close()方法的语义和TCP的“FIN”标志语义不一样:发送TCP的“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。...; 客户端和服务器统一使用TCP短连接。...然后是客户端和服务器统一使用TCP长连接:客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcat的maxKeepAliveRequests...,固定5分钟tcp连接回收,而且发现连接出错时,重发之前10s内消息。

5.8K10

time_wait 详解和解决方案

为避免上面情况, TCP 会等待 2 MSL 时间,让 S 发的 FIN K 和 C 回复的 ACK K+1 在网络上消失,才真正清除掉连接。 为什么等待 2 MSL 时间?...MSL是 Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,是 TCP 协议规定报文段在网络中最长生存时间,超出后报文段就会被丢弃。...RFC793 定义 MSL 为 2 分钟,一般 Linux 会默认设置个更小的值 30 秒。...这块代码是 Linux tcp_timewait_state_process 函数处理的。 而 2 MSL 是为了确保 C 和 S 两端发送的数据都在网络中消失,不会影响后续的新连接,该如何理解?...复用 TIME_WAIT 连接 tcp_tw_reuse = 1: 1 表示开启复用 TIME_WAIT 状态的连接,这个参数在 Linux tcp_twsk_unique 函数中读取的。

2.4K30

什么是TIME_WAIT

因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭; 后发FIN包的一方执行的是被动关闭。...主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。 什么是MSLMSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。...关于MSL的大小,RFC 793协议中给出的建议是两分钟,不过实际上不同的操作系统可能有不同的设置, 以Linux为例,通常是半分钟,两倍的MSL就是一分钟,也就是60秒,并且这个数值是硬编码在内核中的..., 也就是说除非你重新编译内核,否则没法修改它: #define TCP_TIMEWAIT_LEN (60*HZ) linux系统下怎样修改TIME_WAIT时间?...允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets

45030

一文带你搞定TCP面试(二)

MSL是报文在网络中存在的最长时间,超过该时间就会被丢弃。 为什么TIME_WAIT需要经历2MSL后才可以变为CLOSED?...2MSL的时间是从客户端接收到FIN报文并且发送ACK报文时开始的。如果此时ACK报文没有被服务端接收到触发了服务端的超时重传,客户端又再次收到了FIN报文,那么2MSL将重新开始计时。...LINUX中默认一个MSL是30s,也就是说TIME_WAIT的时间是60s。...=75 # 如果9次探测无响应,则认为对端不可答,中断本次连接 net.ipv4.tcp_keepalive_probes=9 上述三个都是Linux中的默认值,也就是说Linux操作系统中至少经过...以前代表SYN队列大小,但是在Linux 2.2以后就是全连接队列的大小(accept队列的大小)。

56210

tcp_tw_reuse、tcp_tw_recycle注意事项

linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。...2MSL 的值,linux 需要修改内核宏定义重新编译,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态超时时间. - tcp_tw_reuse 和 SO_REUSEADDR...MSL 由来   发起连接关闭方回复最后一个fin 的ack,为避免对方ack 收不到、重发的或还在中间路由上的fin 把新连接给丢掉了,等个2MSLlinux 默认2min)。   ...2. reuse、recycle 通过timestamp的递增性来区分是否新连接,新连接的timestamp更大,那么保证小的timestamp的 fin 不会fin掉新连接,不用等2MSL。...参考: Coping with the TCP TIME-WAITstate on busy Linux servers tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle

3.2K30

tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。...-2的连接也极少) 注意: - 不像Windows 可以修改注册表修改2MSL 的值,linux 是没有办法修改MSL的,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态. -...服务器TIME_WAIT 高怎么办 不像客户端有端口限制,处理大量TIME_WAIT Linux已经优化很好了,每个处于TIME_WAIT 状态下连接内存消耗很少, 而且也能通过tcp_max_tw_buckets...MSL 由来   发起连接关闭方回复最后一个fin 的ack,为避免对方ack 收不到、重发的或还在中间路由上的fin 把新连接给干掉了,等个2MSL,4min。   ...细节之处还得好好阅读tcp 协议栈源码了 建议阅读以下参考: Coping with the TCP TIME-WAITstate on busy Linux servers tcp短连接TIME_WAIT

5.8K110

为什么TCP 建连接要3次,断连接却要4次呢?

Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻售,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要...于是,Linux下给了一个叫tcp_syncookies的参数来应对这个事——当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie...因为,我们假设我们的TCP Segment在网络上的存活时间不会超过Maximum Segment Lifetime(缩写为MSL – Wikipedia语条),所以,只要MSL的值小于4.55小时,那么...关于 MSL 和 TIME_WAIT。通过上面的ISN的描述,相信你也知道MSL是怎么来的了。...我们注意到,在TCP的状态图中,从TIME_WAIT状态到CLOSED状态,有一个超时设置,这个超时设置是 2*MSL(RFC793定义了MSL为2分钟,Linux设置成了30s)为什么要这有TIME_WAIT

63530

TIME_WAIT或者CLOSE_WAIT的原因以及如何解决

TCP的四次挥手图片MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”.2MSL在RFC 793协议中给出的建议是两分钟, 但是在Linux下一般时30...秒, 也就是说2MSL就是60秒.CLOSE_WAIT 产生的原因CLOSE_WAIT是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,连接进入CLOSE_WAIT...TIME_WAIT 产生的原因TIME_WAIT的作用简单说timewait之所以等待2MSL的时长,是为了避免因为网络丢包或者网络延迟而造成的tcp传输不可靠,而这个TIME_WAIT状态则可以最大限度的提升网络传输的可靠性...或者将MSL值缩减, linuxMSL的值默认为60s,我们可以通过缩减MSL值来使得主动关闭连接一端由TIME_WAIT状态到关闭状态的时间减少。...查看默认的MSL值$ cat /proc/sys/net/ipv4/tcp_fin_timeout修改$echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout或者$ vim

7.4K50

被微信面麻了,问的太细节了。。。

上周有个读者在面试微信的时候,被问到既然打开 net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接,那为什么 Linux 默认是关闭状态呢?...MSL 指的是 TCP 协议中任何报文在网络上最大的生存时间,任何超过这个时间的数据都将被丢弃。...虽然 RFC 793 规定 MSL 为 2 分钟,但是在实际实现的时候会有所不同,比如 Linux 默认为 30 秒,那么 2MSL 就是 60 秒。...TTL 的值一般是 64,LinuxMSL 设置为 30 秒,意味着 Linux 认为数据报文经过 64 个路由器的时间不会超过 30 秒,如果超过了,就认为报文已经消失在网络中了。...不过,Linux 操作系统提供了两个可以系统参数来快速回收处于 TIME_WAIT 状态的连接,这两个参数都是默认关闭的: net.ipv4.tcp_tw_reuse,如果开启该选项的话,客户端(连接发起方

70020

TCP TIME_WAIT

状态, 状态停留时长为两个MSL(最大分段寿命),这个状态只有在主动关闭连接方会出现, 另一端可以在连接断开后立刻投入后续使用。...MSL是一个TCP分段可以存在于互联网系统中的最大时长,RFC 793指出MSL为2分钟, 但在LINUX系统中一般为30s,通过下面这个命令可以确定一些LINUX系统上的MSL数值: sysctl net.ipv4...有规定, TCP在重启动后的MSL秒内不能建立任何连接。...通过启用tcp_tw_reuse,如果新时间戳严格大于先前连接记录的时间戳, linux可以重复使用在TIME_WAIT状态的已有连接作为传出连接,发送数据, 这个传出连接在连接变为TIME_WAIT状态的...目前这个选项已经在Linux4.12以后的版本里被移除了。 参考文章: https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux

2.1K00

Linux下的TCP测试工具

如何在 Linux 上安装 tcpping 测量到远程主机的网络延迟的一种常用方法是使用ping应用程序。该ping工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机的往返延迟。...如果远程主机正在侦听该端口,它将以 TCP ACK 数据包响应。否则,它将以 TCP RST 数据包响应。...在 Linux 上安装tcpping tcpping作为 shell 脚本实现,该脚本响应外部工具来执行和报告 RTT 测量。因此,为了安装tcpping,你首先需要先安装这些先决条件。...但是,如果你tcpping在最小 Linux 运行时环境(例如Docker容器、AWS 最小映像 AMI)中运行,则bc可能不会预先安装。在这种情况下,你需要bc自己安装。...在Debian 的 Linux 上安装: $ sudo apt-get install bc 在 Red Hat 的 Linux 上安装: $ sudo yum install bc 安装 tcpping

5.4K20
领券