Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 322|回复: 0

优化Linux短连接time-wait过多

[复制链接]

5

主题

0

回帖

41

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
41
发表于 2025-5-29 11:24:59 | 显示全部楼层 |阅读模式
前因:
对于大量 HTTP、SIP 或 API 请求时候会频繁与服务器握手
当 TCP 连接关闭时,服务器需要保持 FIN_WAIT_2 状态一段时间以确保数据完全传输。默认值通常较高,可能导致大量短连接堆积,消耗系统资源。
并且服务器频繁创建短连接,未释放的 FIN_WAIT 连接可能导致端口资源耗尽,影响新请求。



具体优化方式:
    1.修改timeout超时时长,加快tcp连接释放
     sysctl -w net.ipv4.tcp_fin_timeout=30  
    2.允许快速复用time_wait
    sysctl -w net.ipv4.tcp_tw_reuse=1
    3.立刻回收time_wait(不涉及nat客户端)
    sysctl -w net.ipv4.tcp_tw_recycle=1

为什么不建议在公网或者nat环境下设置tcp_tw_recycle=1
    1.tcp_tw_recycle 机制会快速回收 TIME_WAIT 状态的 TCP 连接,使同一个 IP 在短时间内不能重复建立连接。
       如果 TIME_WAIT 被回收,新的连接可能会被服务器错误地丢弃。这就会导致部分用户无法访问服务器
    2.影响 TCP 时间戳校验
       tcp_tw_recycle=1 依赖 TCP 时间戳(TCP timestamp)来判断连接的有效性。
       但 NAT 网络中的不同设备可能使用不同的 TCP 时间戳,导致服务器拒绝合法连接。这就会导致某些客户突然连接失败,过几秒恢复(因为时间戳不同步)。
    3.公网环境更容易遭受攻击
       在公网环境下,启用 tcp_tw_recycle=1 可能会导致某些 合法连接被拒接,但同时攻击者可以伪造 TCP 时间戳绕过限制,增加 TCP 连接异常。会影响sip,http API 或者websocket应用,导致某些请求随机失败

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-12-23 06:49 , Processed in 0.022039 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表