用 ss、netstat、/proc/net 和 lsof 四种方式查看 Linux 网络连接数,附状态统计与排查步骤。
TL;DR
- 推荐
ss(iproute2 自带,无需安装):ss -s看总览,ss -tan列表,ss -tan state established筛状态[1]。 netstat来自 net-tools,Ubuntu 24.04 默认不装,且官方 manpage 已标记 obsolete,仅作兼容参考[2]。- 不装任何包也能看:读
/proc/net/sockstat和/proc/net/tcp[3]。 - 按进程定位用
lsof -i -nP;查 conntrack 表用conntrack -C(需安装 conntrack)[4][5]。
ss:现代首选
ss 是 iproute2 套件的套接字统计工具,直接读内核 netlink,比 netstat 更快[1]。
ss -s
ss -tan state established
ss -tan state listening
ss -tanH | awk '{print $1}' | sort | uniq -c
ss -s 给出 TCP/UDP/RAW/FRAG 的汇总与 TCP 状态计数;-t TCP、-a 全部(含监听)、-n 不解析服务名;-H 去掉表头便于脚本化;state 过滤器按连接状态筛选[1]。
netstat:兼容旧脚本
netstat 来自 net-tools,Ubuntu 24.04 默认未安装;manpage 明确提示 “This program is mostly obsolete. Replacement for netstat is ss”[2]。
sudo apt-get install -y net-tools
netstat -tan
netstat -s | grep -i tcp
-t TCP、-a 全部、-n 数字形式[2]。仅在维护老脚本或老系统时使用;新环境优先 ss。
不装包:直接读 /proc
内核把连接统计暴露在 /proc,任何有 shell 的环境都能读[3]。
cat /proc/net/sockstat
wc -l /proc/net/tcp /proc/net/tcp6
/proc/net/sockstat 输出包含 TCP: inuse 3 orphan 0 tw 6 alloc 3 mem 0,其中 inuse 是已分配的 TCP 套接字数,tw 是 TIME-WAIT 数量[3]。/proc/net/tcp 每行一条 IPv4 TCP 连接(含表头),数量减 1 即连接数;IPv6 走 tcp6[3]。
注意:WSL2 等容器化环境里 /proc/net 是 network namespace 视图,只反映当前命名空间[3]。
lsof:按进程定位
lsof -i -nP | head
-i 选网络文件,-n 不解析主机名,-P 不解析端口名[4]。适合找”是谁占了这个连接”。
conntrack:NAT/防火墙连接跟踪表
启用 conntrack 的防火墙/NAT 网关上,连接跟踪表大小反映真实并发[5]。
sudo apt-get install -y conntrack
conntrack -C
-C 输出当前跟踪表中的连接数[5]。空闲主机上可能为 0。
回滚
- 安装的 net-tools/conntrack 用完卸载:
apt-get purge -y net-tools conntrack && apt-get autoremove --purge -y - 无持久系统改动;/proc 只读。
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
ss: command not found |
iproute2 未装(极少见) | apt-get install iproute2 |
netstat: command not found |
net-tools 未装(Ubuntu 24.04 默认) | 改用 ss,或装 net-tools |
| 连接数看起来偏少 | 只看了 IPv4 | 加看 /proc/net/tcp6 或 ss -6 |
conntrack -C 报错 |
conntrack 模块未加载/无权限 | 用 root 执行,或检查内核模块 |
| 数字与监控平台不一致 | 采样时刻/命名空间不同 | 统一用 ss -s 并固定采样间隔 |
实测与局限性
- 实测环境:WSL2 Ubuntu 24.04.4 LTS,iproute2 6.1.0。
- 已验证:
ss -s/ss -tan/ss -tan state listening输出;/proc/net/sockstat、/proc/net/tcp行数;lsof -i;安装并运行 netstat 与 conntrack 后卸载还原。 - 局限性:WSL2 为单命名空间,无真实高并发流量;conntrack 表在空闲 VM 上为 0,未验证高负载场景;未测 network namespace 切换(
ip netns exec)。
参考资料
- [1] ss(8) – Linux manual page (man7.org)(man7-ss)
- [2] netstat(8) – Ubuntu manpages (noble)(ubuntu-netstat)
- [3] /proc/pid/net/, /proc/net/ – Ubuntu manpages (noble)(proc-net)
- [4] lsof(8) – Ubuntu manpages (noble)(ubuntu-lsof)
- [5] conntrack(8) – Debian bookworm(debian-conntrack)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。