`
litaoyan
  • 浏览: 9823 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

优化TCP/IP连接,减少TIME-WAIT

 
阅读更多
(一)TCP/IP连接的状态和对应的个数:
# netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a, s[a]}'

(二)提升服务器的负载能力:
# vim /etc/sysctl.conf

然后,在这个文件中,加入下面的几行内容:
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 5

最后输入下面的命令,让内核参数生效:
# /sbin/sysctl -p

参数说明:{
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;

net.ipv4.tcp_fin_timeout 修改系统默认的 TIMEOUT 时间。
}

(三)优化TCP/IP的可使用端口范围,进一步提升服务器的并发能力(针对tcp流量比较大的服务器)
  # vim /etc/sysctl.conf,添加如下参数: 

    net.ipv4.tcp_keepalive_time = 1200
    net.ipv4.ip_local_port_range = 10000 65000
    net.ipv4.tcp_max_syn_backlog = 8192
    net.ipv4.tcp_max_tw_buckets = 5000

参数说明:{
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 10000 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。
}
(四)修改 linux kernel 的 tcp time wait的时间(适用于大量短连接的情况)
在 $KERNEL/include/net/tcp.h里面,有下面的行:
      #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
      * state, about 60 seconds */
      而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为:
      #define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT
      * state, about 60 seconds */

  然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少:
  netstat -ant | grep -i time_wait |wc -l
  一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度
分享到:
评论
2 楼 windshome 2013-05-02  
还有个问题,就是TIME_WAIT本身不是TCP协议设计的缺陷,而是一种对操作系统的保护,你只管减少,对系统本身的稳定性是否有影响?减少了TCP的TIME_WAIT次数的意义很大吗?
1 楼 windshome 2013-04-16  
不错不错,呵呵

相关推荐

    net TCP/IP / TIME_WAIT / tcpip / iperf / cain

    TIME_WAIT是TCP连接状态中的一种,当一个TCP连接在主动关闭后,等待一段时间(通常为两倍MSL,即报文段最大生存时间)才真正终止。这个状态是为了确保所有在网络中可能漂浮的数据段能被正确处理,防止旧的、重复的...

    TCP-TIMEOUT.rar_ tcp timeo_CFG TCP/IP TIMEOUT_TCP 超时_超时三次

    在TCP/IP协议栈中,TCP(传输控制协议)是一种面向连接的、可靠的传输协议,它通过复杂的机制确保数据能够正确无误地传输。本篇主要围绕“TCP超时”这一主题进行深入探讨,重点关注TCP的三次握手过程以及TCP/IP超时...

    TCP/IP协议源码

    - **TCP连接管理**:包括三次握手建立连接、四次挥手断开连接的过程,以及TIME_WAIT和CLOSED状态的处理。 - **滑动窗口机制**:TCP通过滑动窗口控制发送速率,实现流量控制,防止接收方来不及处理过多的数据。 - **...

    Socket Tcp/IP

    - SO_REUSEADDR允许在关闭连接后立即重用端口,避免TIME_WAIT状态的困扰。 - SO_LINGER控制在关闭Socket时是否等待未发送数据的发送完成。 5. **异常处理与连接关闭**: - 网络通信中可能遇到各种异常,如网络...

    TCP/IP协议知识点总结与面试

    ### TCP/IP协议知识点总结与面试 #### 一、TCP/IP整体认知 TCP/IP协议栈是互联网的核心协议之一,由四个主要层次组成:应用层、传输层、网络层和链路层。TCP/IP协议栈不仅定义了如何封装和解封装数据,还定义了...

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

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

    TCP/IP详解(卷一)

    7. **TCP状态机**:详细展示了TCP连接在不同阶段的状态转换,包括CLOSED、LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT等状态。 8. **UDP的应用**...

    ABB机器人的TCP_IP通信

    - `WaitTime 1;`:等待一段时间,确保连接建立成功。 - `SocketSend socket1\Str:="18\0D\0A";`:向服务端发送字符串`"18\0D\0A"`。其中`"\0D\0A"`表示回车和换行符,这通常用于表示消息的结束。 - **接收数据**...

    TCP/IP 监控

    1. **TCP连接状态**:TCP连接有多种状态,如SYN_SENT(同步发送)、ESTABLISHED(已建立)、FIN_WAIT_1(等待关闭)、TIME_WAIT(等待时间结束)等。监控这些状态有助于识别连接的生命周期和潜在问题。 2. **IP地址...

    Linux下TCP/IP服务器实现源码解析(含源码)

    3. **TCP状态机**:TCP连接有多种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、CLOSE_WAIT、LAST_ACK、FIN_WAIT_1、FIN_WAIT_2、CLOSING、TIME_WAIT等。源码分析会揭示这些状态如何转换以及对应的处理...

    高级TCP/IP编程(附有源代码)

    1. **TCP连接管理**:三次握手与四次挥手过程,理解建立和关闭连接的步骤以及可能遇到的问题,如TIME_WAIT状态和半开连接。 2. **TCP滑动窗口**:理解滑动窗口机制如何实现流量控制和拥塞控制,包括慢启动、拥塞...

    TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP和UNIX域协议

    本书适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。本书的特点是内容丰富,概念清楚且准确,讲解详细,例子很多。作者在书中举出的所有例子均在作者...

    TCP/IP三卷【第二卷】

    另外,TIME_WAIT状态的存在确保了旧连接的完全关闭,避免新连接与旧连接的混淆。 《TCP/IP详解 卷二:TCP》详细剖析了TCP协议的各种机制和算法,是学习TCP/IP技术的重要参考资料。通过阅读这本书,读者可以深入了解...

    TCP/IP状态迁移图

    TCP/IP协议是一种基于连接的通信协议,它定义了主机之间的通信规则。TCP/IP协议的状态迁移图是理解TCP/IP工作原理的关键,它展示了TCP连接从建立到终止会经过的各种状态,以及触发这些状态变化的事件。 首先,让...

    linux TCP/IP协议源码

    TCP连接有多种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、CLOSING、LAST_ACK和TIME_WAIT。理解这些状态及其转换对分析TCP行为至关重要。 8. **IP路由** ...

    高级TCP/IP编程

    1. **TCP连接管理**:介绍TCP三次握手和四次挥手的过程,以及TIME_WAIT和CLOSE_WAIT等状态的理解与处理,帮助开发者理解连接建立与关闭的机制。 2. **TCP滑动窗口机制**:详细解析TCP流量控制和拥塞控制,如何通过...

    TCP_IP算法.rar_C++算法_TCP/IP协议_TCP_IP_网络 协议 源码_网络协议

    源码分析可能涉及理解TCP的状态机,如CLOSED、LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAIT等状态及其转换。同时,还会涉及IP头部的解析,以及错误...

    DM642 TCP/IP源码

    3. **TCP状态机**:TCP协议的连接管理基于一个详细的状态机,包括LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAIT等状态。每个状态的转换都需要...

    TCP/IP原理,用于精解网络协议

    TCP,即传输控制协议,是TCP/IP协议族中的一个重要部分,主要负责在两台计算机之间建立可靠的数据传输连接。本篇文章将深入解析TCP/IP原理,特别是TCP连接的建立与终止过程,帮助读者理解其工作原理。 TCP是一种...

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

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

Global site tag (gtag.js) - Google Analytics