(一)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。也能相应提高系统应对短连接的速度
分享到:
相关推荐
TIME_WAIT是TCP连接状态中的一种,当一个TCP连接在主动关闭后,等待一段时间(通常为两倍MSL,即报文段最大生存时间)才真正终止。这个状态是为了确保所有在网络中可能漂浮的数据段能被正确处理,防止旧的、重复的...
在TCP/IP协议栈中,TCP(传输控制协议)是一种面向连接的、可靠的传输协议,它通过复杂的机制确保数据能够正确无误地传输。本篇主要围绕“TCP超时”这一主题进行深入探讨,重点关注TCP的三次握手过程以及TCP/IP超时...
- **TCP连接管理**:包括三次握手建立连接、四次挥手断开连接的过程,以及TIME_WAIT和CLOSED状态的处理。 - **滑动窗口机制**:TCP通过滑动窗口控制发送速率,实现流量控制,防止接收方来不及处理过多的数据。 - **...
- SO_REUSEADDR允许在关闭连接后立即重用端口,避免TIME_WAIT状态的困扰。 - SO_LINGER控制在关闭Socket时是否等待未发送数据的发送完成。 5. **异常处理与连接关闭**: - 网络通信中可能遇到各种异常,如网络...
### TCP/IP协议知识点总结与面试 #### 一、TCP/IP整体认知 TCP/IP协议栈是互联网的核心协议之一,由四个主要层次组成:应用层、传输层、网络层和链路层。TCP/IP协议栈不仅定义了如何封装和解封装数据,还定义了...
在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保数据的可靠传输。当一个TCP连接被关闭后,连接的两端不会立即释放资源,而是进入TIME_WAIT状态,等待一段时间以确保所有发送的数据都被确认接收。...
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的应用**...
- `WaitTime 1;`:等待一段时间,确保连接建立成功。 - `SocketSend socket1\Str:="18\0D\0A";`:向服务端发送字符串`"18\0D\0A"`。其中`"\0D\0A"`表示回车和换行符,这通常用于表示消息的结束。 - **接收数据**...
1. **TCP连接状态**:TCP连接有多种状态,如SYN_SENT(同步发送)、ESTABLISHED(已建立)、FIN_WAIT_1(等待关闭)、TIME_WAIT(等待时间结束)等。监控这些状态有助于识别连接的生命周期和潜在问题。 2. **IP地址...
3. **TCP状态机**:TCP连接有多种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、CLOSE_WAIT、LAST_ACK、FIN_WAIT_1、FIN_WAIT_2、CLOSING、TIME_WAIT等。源码分析会揭示这些状态如何转换以及对应的处理...
1. **TCP连接管理**:三次握手与四次挥手过程,理解建立和关闭连接的步骤以及可能遇到的问题,如TIME_WAIT状态和半开连接。 2. **TCP滑动窗口**:理解滑动窗口机制如何实现流量控制和拥塞控制,包括慢启动、拥塞...
本书适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。本书的特点是内容丰富,概念清楚且准确,讲解详细,例子很多。作者在书中举出的所有例子均在作者...
另外,TIME_WAIT状态的存在确保了旧连接的完全关闭,避免新连接与旧连接的混淆。 《TCP/IP详解 卷二:TCP》详细剖析了TCP协议的各种机制和算法,是学习TCP/IP技术的重要参考资料。通过阅读这本书,读者可以深入了解...
TCP/IP协议是一种基于连接的通信协议,它定义了主机之间的通信规则。TCP/IP协议的状态迁移图是理解TCP/IP工作原理的关键,它展示了TCP连接从建立到终止会经过的各种状态,以及触发这些状态变化的事件。 首先,让...
TCP连接有多种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、CLOSING、LAST_ACK和TIME_WAIT。理解这些状态及其转换对分析TCP行为至关重要。 8. **IP路由** ...
1. **TCP连接管理**:介绍TCP三次握手和四次挥手的过程,以及TIME_WAIT和CLOSE_WAIT等状态的理解与处理,帮助开发者理解连接建立与关闭的机制。 2. **TCP滑动窗口机制**:详细解析TCP流量控制和拥塞控制,如何通过...
源码分析可能涉及理解TCP的状态机,如CLOSED、LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAIT等状态及其转换。同时,还会涉及IP头部的解析,以及错误...
3. **TCP状态机**:TCP协议的连接管理基于一个详细的状态机,包括LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAIT等状态。每个状态的转换都需要...
TCP,即传输控制协议,是TCP/IP协议族中的一个重要部分,主要负责在两台计算机之间建立可靠的数据传输连接。本篇文章将深入解析TCP/IP原理,特别是TCP连接的建立与终止过程,帮助读者理解其工作原理。 TCP是一种...
当我们看到netstat输出中存在大量的TCP连接处于TIME_WAIT状态时,这通常意味着系统可能存在一些性能问题或者配置上的挑战。本篇文章将深入探讨TIME_WAIT状态的原因以及如何解决。 TCP(传输控制协议)是一种面向...