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

短连接导致端口耗尽

阅读更多

 

场景回放

  • 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

 

  • 大小: 69.3 KB
  • 大小: 172.3 KB
分享到:
评论

相关推荐

    TCP端口耗尽分析报告.docx

    当系统中的可用端口被大量占用时,新的连接请求可能会因找不到可用端口而被拒绝,这种现象称为TCP端口耗尽。 #### 二、案例背景及问题描述 本案例发生在2022年4月1日,一个包含两个节点的故障转移群集环境中,...

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

    这些处于“TIME_WAIT”状态的连接,会导致系统资源无法回收,长时间积累可能导致资源耗尽。 报文的发送和接收方式分为同步和异步两种。同步方式中,发送方在发送数据后必须等待接收方的响应,超时则会触发错误处理...

    往某一端口一直发送连接,使其瘫痪。

    在DoS攻击中,攻击者会向目标服务器的特定端口发送大量请求,导致服务器资源耗尽,无法正常处理合法用户的连接,从而影响服务的可用性。 首先,我们来理解一下**TCP协议**的基础知识。TCP(Transmission Control ...

    delphi 端口复用

    端口复用技术允许一个已关闭的TCP连接在短时间内再次使用相同的端口号,这样可以避免因端口耗尽导致的网络拥堵问题,同时加快新连接的建立速度。在Delphi中,实现端口复用通常需要使用Winsock组件,这是一个强大的...

    reDuh端口复用客户端稳定版

    这样,在高并发场景下,即使大量连接请求同时到来,也能有效避免端口耗尽的情况,确保服务的连续性和可靠性。 在稳定性方面,reDuh客户端的新版本着重解决了连接易断开的问题。这可能是由于网络波动、服务器响应...

    windows2021 server socket连接数量所导致问题.docx

    通过调整`MaxUserPort`和`TCPTimedWaitDelay`,我们可以有效地提高系统处理并发socket连接的能力,同时缩短time_wait状态,从而降低由于端口耗尽导致的服务中断风险。 需要注意的是,虽然这种方法能够解决大部分因...

    利用C#设计制作端口扫描器

    - 设置超时时间(2000毫秒),避免无响应的连接耗尽资源。 - 使用`Connect`方法尝试建立连接,如果连接成功,端口被认为是开放的。 7. 性能优化: - 使用线程池进行并发扫描,提高扫描效率。 - 设置线程为后台...

    windows 2008 R2解决socket连接不释放补丁包

    Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。

    C++ 远程端口扫描

    - 错误处理:对可能出现的异常情况进行捕获和处理,如网络连接错误、资源耗尽等。 - 性能优化:合理设置线程数量,避免过多线程导致的上下文切换开销。 - 避免被识别为攻击:控制扫描速率,防止因快速扫描引发目标...

    多线程端口扫描工具V1.0

    需要注意的是,多线程可能会带来资源竞争和同步问题,开发者需要合理控制线程数量,避免过多线程导致系统资源耗尽。此外,适当的错误处理和异常捕获机制也是必不可少的,以确保工具在遇到网络问题或目标主机响应慢时...

    数据库连接池-连接的关闭内幕

    此外,过多的未关闭连接还可能引起操作系统层面的问题,比如端口耗尽等。 4. **连接关闭与线程同步**:在多线程环境中,确保连接的正确关闭还需要考虑到线程同步的问题。如果不恰当地处理并发访问,可能会导致数据...

    UDP完成端口 Demo

    在多线程编程中,资源管理是非常关键的一环,尤其是线程句柄,如果不正确地关闭,可能会导致内存泄漏或者系统资源耗尽。因此,在使用完线程后,应当调用`CloseHandle`函数关闭线程句柄,以释放系统资源。 在Windows...

    端口扫描程序、学习demo

    3. **性能优化**:避免一次性启动过多线程导致系统资源耗尽,可以通过限制线程池大小或使用异步编程来平衡性能和资源消耗。 4. **IP地址和端口范围**:指定要扫描的IP地址范围和端口范围,确保扫描行为合法且不会对...

    端口扫描器源码

    线程或异步IO用于实现并发,需注意防止过多并发导致目标系统过载或自身资源耗尽。 4. **延迟与随机性**: - 延迟策略:为了避免被目标系统识别为攻击,扫描器可能会在每次请求之间设置一定的延迟。 - 随机性:...

    扫描器(漏洞 端口)

    端口扫描有两种常见的类型:连接扫描(Connect Scan)和半开放式扫描(Stealth Scan)。前者尝试建立完整的TCP连接,后者则不完全建立连接,以此来减少被目标系统检测到的可能性。 二、CGI漏洞扫描 CGI(Common ...

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

    过多的TIME_WAIT连接虽然在正常情况下不会占用大量资源,但如果数量过大,可能会超出系统的默认限制,导致端口耗尽,进而影响新连接的建立。例如,Linux系统默认最多允许35600条TIME_WAIT连接。 解决这个问题的方法...

    Socket长连接demo

    在长连接中,这一步尤其重要,因为长时间未释放的Socket会占用系统资源,可能导致性能下降或资源耗尽。 6. **并发处理**:在服务器端,为了处理多个客户端的连接请求,通常会采用多线程、多进程或者异步非阻塞I/O...

    a63822322的什么是端口的说明

    - **拒绝服务攻击(DoS)**:通过大量无效请求使服务器资源耗尽,导致合法用户无法访问。 - **中间人攻击(Man-in-the-Middle)**:在网络通信过程中拦截并篡改数据。 - **服务滥用**:利用已知端口进行恶意操作,如...

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表改.rar

    Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。windows 2008 R2解决socket连接不释放补丁包_time...

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

    - 客户端:大量time_wait会占用内存,且可能导致端口耗尽,超过`ip_local_port_range`设定范围后无法建立新的连接。 - 服务端:不会面临端口耗尽的问题,但同样会有内存资源浪费。 6. 实际场景验证 在Cobar测试中,...

Global site tag (gtag.js) - Google Analytics