`

TCP的TIME_WAIT状态

阅读更多

    主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。
    TIME_WAIT状态存在的理由:
1)可靠地实现TCP全双工连接的终止
    在进行关闭连接四路握手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN,因此客户端必须维护状态信息允 许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭 的客户端必须维持状态信息进入TIME_WAIT状态。

2)允许老的重复分节在网络中消逝 
    TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个 原来的迷途分节就称为lost duplicate。在关闭一个TCP连接后,马上又重新建立起一个相同的IP地址和端口之间的TCP连接,后一个连接被称为前一个连接的化身 (incarnation),那么有可能出现这种情况,前一个连接的迷途重复分组在前一个连接终止后出现,从而被无解成从属于新的化身。为了避免这个情 况,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时 候,来自连接先前化身的重复分组已经在网络中消逝。

  新的SCTP协议通过在消息头部添加验证标志避免了TIME_WAIT状态。

分享到:
评论
2 楼 ahuaxuan 2010-05-07  
引用
MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。

之前测了一下,windows上好像是2分钟,ubuntu上是半分钟,看来windows应该是遵守了RFC的建议. linux应该就是berkeley的TCP实现了
1 楼 rain2005 2009-08-24  
有这个状态好像对程序也没有什么影响把,完全是TCP协议处理了。

相关推荐

    大量TIME_WAIT状态的连接解决方法

    TCP协议在连接关闭后会进入TIME_WAIT状态,这是为了确保数据包在网络中的正确传输和避免旧的数据包与新的数据包混淆。TIME_WAIT状态的时间长度默认为2MSL(Max Segment Lifetime),即最大报文段生存时间的两倍。在...

    linux内核协议栈TCP time_wait原理、优化、副作用1

    - `tcp_tw_recycle`:当设置为1时,开启time_wait状态的快速回收,但需双方都开启`tcp_timestamps`。 - `tcp_timestamps`:时间戳选项,用于协助快速回收和序列号校验,若此选项设为1,`tcp_tw_recycle`才能生效。 -...

    CentOS解决服务器存在大量time_wait的问题

    当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP连接,导致TIME_WAIT状态的连接积累。 TIME_WAIT状态是TCP连接生命周期的一部分,它确保数据完全传输并且防止旧的数据包被误...

    TCP TIME_WAIT常见解决方法-hanwei_1049-ChinaUnix博客1

    TCP TIME_WAIT状态是TCP连接生命周期中的一个重要阶段,它发生在主动关闭连接的一方(通常称为客户端)在连接关闭后等待一段时间,以确保所有在网络中可能残留的数据片段都被接收并确认。这个阶段的存在是为了避免旧...

    解决mysql出现大量TIME_WAIT

    TIME_WAIT是TCP协议中的一个状态,当一个TCP连接正常关闭后,会进入TIME_WAIT状态,等待一段时间(通常是2MSL,即最大段生命周期的两倍)来确保网络中没有残留的数据包。在这个状态下,端口被占用,不能立即复用,这...

    服务器大量TIME_WAIT解决方法

    在 TCP/IP 协议中,TIME_WAIT 状态是一种正常的连接状态。当一个 TCP 连接关闭时,服务器端会在 TIME_WAIT 状态下等待一段时间,以确保所有的数据包都已经被客户端收到。在这个状态下,服务器端会等待两个最大段生命...

    关于释放time_wait连接多的方案

    在深入探讨如何有效释放TIME_WAIT状态的连接之前,我们首先需要理解TIME_WAIT状态的基本概念及其在TCP协议中的作用。TIME_WAIT是一种TCP连接的状态,当一个TCP连接被主动关闭时,客户端会进入TIME_WAIT状态,目的是...

    TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决

    在 TCP 连接中,客户端和服务器端都可以处于不同的状态,例如 ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT 等 trạng thái。 CLOSE_WAIT 状态是 TCP 连接中的一种状态,它表示服务器端已经收到了...

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇 - slv

    在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保数据的可靠传输。当一个TCP连接被关闭后,连接的两端不会立即释放资源,而是进入TIME_WAIT状态,等待一段时间以确保所有发送的数据都被确认接收。...

    解决TIME_WAIT过多造成的问题1

    这是因为TCP不允许处于TIME_WAIT状态的连接启动新的化身,因为TIME_WAIT状态持续2MSL,这样可以保证当成功建立TCP连接时,来自前一个连接的重复分组已经在网络中消逝。 然而,TIME_WAIT状态也会带来一些问题,例如...

    TIME_WAIT.rar_C-means_linux 网络状态_linux c wait_tcp_unix 网络编程

    在Linux系统中,进行网络编程时,TCP连接的TIME_WAIT状态是至关重要的一个环节。TIME_WAIT状态是TCP连接生命周期中的最后一个阶段,对于理解和优化网络应用性能有着直接的影响。本资源"TIME_WAIT.rar"包含了关于这个...

    nginx+php产生大量TIME_WAIT连接解决办法1

    TIME_WAIT状态是TCP连接生命周期的一部分,用于确保数据传输的可靠性,但过多的TIME_WAIT连接会消耗系统资源,特别是端口资源。 TIME_WAIT状态的产生主要有两个原因: 1. Nginx作为负载均衡器,与PHP-FPM通信时通常...

    CLOSE_WAIT网络连接无法释放问题解决

    通过对TCP连接状态的分析,可以发现CLOSE_WAIT状态的产生是由于TCP连接的结束流程未走完所致。客户端主动断开连接时,服务器端没有正确关闭连接,导致了连接保持CLOSE_WAIT状态。这也表明了编程的重要性,在编写程序...

    减少Linux服务器过多的TIME_WAIT

    在Linux服务器环境中,当TCP/IP连接关闭后,服务器端的端口可能会进入TIME_WAIT状态,这是TCP协议设计的一部分。TIME_WAIT状态的目的是确保网络中不存在旧的、可能重复的数据包,从而避免对新连接造成干扰,并确保...

    netstat显示 TIME-WAIT 的原因及解决办法

    当我们看到netstat输出中存在大量的TCP连接处于TIME_WAIT状态时,这通常意味着系统可能存在一些性能问题或者配置上的挑战。本篇文章将深入探讨TIME_WAIT状态的原因以及如何解决。 TCP(传输控制协议)是一种面向...

    tcp连接出现close_wait状态?_tcp_close_

    - 第四次挥手:客户端收到服务器的FIN报文后,回送ACK确认,然后进入TIME_WAIT状态,等待足够时间确保服务器收到ACK后,连接完全关闭。 4. **问题排查** 当TCP连接长时间停留在Close_Wait状态,可能的原因有: -...

    系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT1

    TIME_WAIT状态存在的主要原因是确保TCP的可靠性和防止旧数据包的干扰。当TCP连接的一方发送FIN包表示关闭连接后,它进入TIME_WAIT状态。在这个状态下,该方等待足够长的时间(2MSL,即两个最大段生存期)以确保任何...

    [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    本文讨论了在线上环境中,服务端长连接和客户端短连接配置不当导致Nginx服务器产生大量“TIME_WAIT”状态线程的问题,同时提供了问题的分析和解决方法。本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别...

Global site tag (gtag.js) - Google Analytics