场景回放
- A机器的服务请求B机器的服务
- 短连接请求,动态创建连接端口
- A机器服务会主动关闭连接
- 短时间内高并发请求
- A机器的tcpssports被耗尽了
- 大部分网络连接处time_wait状态
内核配置
net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.ip_local_reserved_ports = 5710-5739,15710-15739
端口耗尽
- 主动调用close()/shutdown()断开连接,收到对方确认后状态变为TIME_WAIT。
- TCP协议TIME_WAIT状态会一直持续2MSL,TIME_WAIT有时间窗口,Linux默认是60秒
- TIME_WAIT状态的连接占用的资源不会被内核释放
- TIME_WAIT状态转换到CLOSE状态后资源才会真正被系统收回。
内核参数优化
客户端内核参数优化
#开启TCP连接中TIME-WAIT套接字的快速回收 net.ipv4.tcp_tw_recycle=1 #开启重用,表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 。 net.ipv4.tcp_tw_reuse=1 #对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。 #对方可能会断开连接或一直不结束连接或不可预料的进程死亡。 net.ipv4.tcp_fin_timeout=5 #TCP时间戳(会在TCP包头增加12个字节),以一种比重发超时更精确的方法(参考RFC 1323) #来启用对RTT 的计算,为实现更好的性能应该启用这个选项。 net.ipv4.tcp_timestamps=1 #收缩TIME_WAIT状态socket的回收时间窗口 net.ipv4.tcp_tw_timeout=3
服务端内核参数优化
#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。 sysctl net.core.somaxconn=1024 #传输缓区长度大小 ifconfig eth0 txqueuelen 5000 echo "/sbin/ifconfig eth0 txqueuelen 5000" >> /etc/rc.local #在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 sysctl net.core.netdev_max_backlog=2000 #对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器出现过载,可以尝试增加这个数字。 sysctl net.ipv4.tcp_max_syn_backlog=2048
参考资料:
https://en.wikipedia.org/wiki/Transmission_Control_Protocol?spm=5176.100239.blogcont52884.5.JrKkjE
http://www.medianet.kent.edu/techreports/TR2005-07-22-tcp-EFSM.pdf
http://stackoverflow.com/questions/410616/increasing-the-maximum-number-of-tcp-ip-connections-in-linux/3923785#3923785
http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html
http://www.cnblogs.com/fczjuever/archive/2013/04/17/3026694.html
相关推荐
当系统中的可用端口被大量占用时,新的连接请求可能会因找不到可用端口而被拒绝,这种现象称为TCP端口耗尽。 #### 二、案例背景及问题描述 本案例发生在2022年4月1日,一个包含两个节点的故障转移群集环境中,...
这些处于“TIME_WAIT”状态的连接,会导致系统资源无法回收,长时间积累可能导致资源耗尽。 报文的发送和接收方式分为同步和异步两种。同步方式中,发送方在发送数据后必须等待接收方的响应,超时则会触发错误处理...
在DoS攻击中,攻击者会向目标服务器的特定端口发送大量请求,导致服务器资源耗尽,无法正常处理合法用户的连接,从而影响服务的可用性。 首先,我们来理解一下**TCP协议**的基础知识。TCP(Transmission Control ...
端口复用技术允许一个已关闭的TCP连接在短时间内再次使用相同的端口号,这样可以避免因端口耗尽导致的网络拥堵问题,同时加快新连接的建立速度。在Delphi中,实现端口复用通常需要使用Winsock组件,这是一个强大的...
这样,在高并发场景下,即使大量连接请求同时到来,也能有效避免端口耗尽的情况,确保服务的连续性和可靠性。 在稳定性方面,reDuh客户端的新版本着重解决了连接易断开的问题。这可能是由于网络波动、服务器响应...
通过调整`MaxUserPort`和`TCPTimedWaitDelay`,我们可以有效地提高系统处理并发socket连接的能力,同时缩短time_wait状态,从而降低由于端口耗尽导致的服务中断风险。 需要注意的是,虽然这种方法能够解决大部分因...
- 设置超时时间(2000毫秒),避免无响应的连接耗尽资源。 - 使用`Connect`方法尝试建立连接,如果连接成功,端口被认为是开放的。 7. 性能优化: - 使用线程池进行并发扫描,提高扫描效率。 - 设置线程为后台...
Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。
- 错误处理:对可能出现的异常情况进行捕获和处理,如网络连接错误、资源耗尽等。 - 性能优化:合理设置线程数量,避免过多线程导致的上下文切换开销。 - 避免被识别为攻击:控制扫描速率,防止因快速扫描引发目标...
需要注意的是,多线程可能会带来资源竞争和同步问题,开发者需要合理控制线程数量,避免过多线程导致系统资源耗尽。此外,适当的错误处理和异常捕获机制也是必不可少的,以确保工具在遇到网络问题或目标主机响应慢时...
此外,过多的未关闭连接还可能引起操作系统层面的问题,比如端口耗尽等。 4. **连接关闭与线程同步**:在多线程环境中,确保连接的正确关闭还需要考虑到线程同步的问题。如果不恰当地处理并发访问,可能会导致数据...
在多线程编程中,资源管理是非常关键的一环,尤其是线程句柄,如果不正确地关闭,可能会导致内存泄漏或者系统资源耗尽。因此,在使用完线程后,应当调用`CloseHandle`函数关闭线程句柄,以释放系统资源。 在Windows...
3. **性能优化**:避免一次性启动过多线程导致系统资源耗尽,可以通过限制线程池大小或使用异步编程来平衡性能和资源消耗。 4. **IP地址和端口范围**:指定要扫描的IP地址范围和端口范围,确保扫描行为合法且不会对...
线程或异步IO用于实现并发,需注意防止过多并发导致目标系统过载或自身资源耗尽。 4. **延迟与随机性**: - 延迟策略:为了避免被目标系统识别为攻击,扫描器可能会在每次请求之间设置一定的延迟。 - 随机性:...
端口扫描有两种常见的类型:连接扫描(Connect Scan)和半开放式扫描(Stealth Scan)。前者尝试建立完整的TCP连接,后者则不完全建立连接,以此来减少被目标系统检测到的可能性。 二、CGI漏洞扫描 CGI(Common ...
过多的TIME_WAIT连接虽然在正常情况下不会占用大量资源,但如果数量过大,可能会超出系统的默认限制,导致端口耗尽,进而影响新连接的建立。例如,Linux系统默认最多允许35600条TIME_WAIT连接。 解决这个问题的方法...
在长连接中,这一步尤其重要,因为长时间未释放的Socket会占用系统资源,可能导致性能下降或资源耗尽。 6. **并发处理**:在服务器端,为了处理多个客户端的连接请求,通常会采用多线程、多进程或者异步非阻塞I/O...
- **拒绝服务攻击(DoS)**:通过大量无效请求使服务器资源耗尽,导致合法用户无法访问。 - **中间人攻击(Man-in-the-Middle)**:在网络通信过程中拦截并篡改数据。 - **服务滥用**:利用已知端口进行恶意操作,如...
Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。windows 2008 R2解决socket连接不释放补丁包_time...
- 客户端:大量time_wait会占用内存,且可能导致端口耗尽,超过`ip_local_port_range`设定范围后无法建立新的连接。 - 服务端:不会面临端口耗尽的问题,但同样会有内存资源浪费。 6. 实际场景验证 在Cobar测试中,...