liunx查看tcp连接数(非实时)

半兽人 发表于: 2025-09-02   最后更新时间: 2025-09-02 16:20:46  
{{totalSubscript}} 订阅, 90 游览

netstat显示实时信息,没有历史信息。

Conntrack会在最近的连接过期前记住X秒。这是因为iptable还有其他几个模块可以利用这些信息:例如,如果想禁止某个IP地址,如果它在某个时间框架内建立了X个新连接的话。

# conntrack -L -p tcp 2>/dev/null | awk '{++S[$4]; ++total} END {for (a in S) print a, S[a]; print "TOTAL", total}'
SYN_RECV 1
CLOSE_WAIT 27
CLOSE 28
ESTABLISHED 1515
SYN_SENT 33
TIME_WAIT 4689
TOTAL 6293

状态介绍

状态 数量 解释 风险 / 建议
SYN_RECV 1 服务器收到了 SYN,并回复了 SYN+ACK,等待客户端 ACK。正在握手中。 数量少正常;如果突然大量堆积,可能是网络丢包或 SYN Flood 攻击。
CLOSE_WAIT 27 收到对方 FIN,但本机应用还没关闭 socket。 长期存在说明应用未及时 close() 连接,需排查代码或服务逻辑。
CLOSE 28 连接已关闭,但 conntrack 表中还暂存,用于 NAT/回收。 少量正常,无需特别处理。
ESTABLISHED 1515 正常通信中的活跃连接。 正常业务连接数。关注是否符合预期并监控变化趋势。
SYN_SENT 33 本机发出 SYN,但还没收到回应。 少量正常;如果数量长期上升,需检查网络连通性或目标端口。
TIME_WAIT 4689 主动关闭方完成四次挥手后,等待 2MSL 超时。 数量大很常见(如 Web 短连接);过多会占用 conntrack 表,必要时优化内核参数(如 tcp_tw_reusetcp_tw_recycle)。
TOTAL 6293 conntrack 表中的 TCP 连接总数。 对比 nf_conntrack_max,避免过满(满了会丢连接)。

调整 nf_conntrack_max

查看 nf_conntrack_max 的值,也就是 Linux Netfilter 连接跟踪系统允许的最大连接数,可以使用以下方法:

  • 方法 1:通过 /proc 文件系统查看
    nf_conntrack_max 的值通常存储在 /proc 文件系统中,可以用以下命令查看:

    cat /proc/sys/net/netfilter/nf_conntrack_max
    
  • 方法 2:使用 sysctl 命令

    也可以用 sysctl 命令查询:

    sysctl net.netfilter.nf_conntrack_max
    

修改:

sudo sysctl -w net.netfilter.nf_conntrack_max=131072

要永久修改,可以在 /etc/sysctl.conf/etc/sysctl.d/ 的文件中添加:

net.netfilter.nf_conntrack_max=131072

然后应用更改:

sudo sysctl -p

检查当前连接数:要查看当前跟踪的连接数(以便与 nf_conntrack_max 比较),可以使用:

cat /proc/sys/net/netfilter/nf_conntrack_count

或者直接统计连接数:

conntrack -L | wc -l
更新于 2025-09-02

查看Linux更多相关的文章或提一个关于Linux的问题,也可以与我们一起分享文章