netstat功能不随内核升级而更新,仅格式化/proc/net接口数据;内核4.15+起tcpretranssegs统计更准确,按段计数且区分fast/timeout重传;4.12+移除tcp_tw_recycle;ipv6需加-a inet6才显示;ss已成现代替代标准。

netstat 本身不随内核版本升级而更新功能,它只是读取 /proc/net/ 下的内核接口(如 /proc/net/snmp、/proc/net/tcp)并格式化输出。因此,不同内核版本下 netstat 的行为差异,本质是底层 procfs 接口的变化,而非 netstat 命令本身的演进。
内核 4.15+:TCP 重传统计更准确
从 Linux 内核 4.15 开始,/proc/net/snmp 中的 TcpRetransSegs 字段明确区分 fast retransmit 和 timeout retransmit,并统一按“段(segment)”计数,不再重复计算 SACK 块。这意味着 netstat -s 输出的重传数据更贴近真实网络行为,也与 Wireshark 的 segment 级重传标记更一致。
- 旧内核(如 3.10)中 TcpRetransSegs 可能漏计部分快速重传,或受补丁影响统计口径不一
- 新内核下建议用
TcpRetransSegs / TcpOutSegs比值判断异常,而非绝对数值
内核 4.12 起:移除 tcp_tw_recycle,影响 TIME_WAIT 观察
netstat 显示大量 TIME_WAIT 状态是常见现象,但其背后是否构成问题,取决于内核参数。自 4.12 版本起,net.ipv4.tcp_tw_recycle 被彻底移除——该参数曾用于加速 TIME_WAIT 回收,但在 NAT 环境下易导致连接失败。
- 在 4.12+ 系统上执行
sysctl net.ipv4.tcp_tw_recycle会报错“no such file” - 此时若看到大量 TIME_WAIT,应优先检查
net.ipv4.tcp_fin_timeout和端口复用(net.ipv4.ip_local_port_range),而非尝试启用已废弃参数
IPv6 统计支持随内核逐步完善
早期内核(如 2.6.x)中,netstat -s 默认只输出 IPv4 协议栈统计;IPv6 相关字段(如 Tcp6、Udp6)可能缺失或不完整。3.10+ 内核普遍支持双栈统计,但需注意:
-
netstat -s默认仍只显示 IPv4;加-A inet6才能查看 IPv6 分项(如Tcp6InSegs) - 部分发行版(如 RHEL 7.9)内核虽支持,但
net-tools包未启用 IPv6 解析,需确认netstat --version是否含 “ipv6” 支持标识
netstat 工具本身已冻结,ss 成为事实标准
netstat 自 2010 年代后期起停止功能更新,其输出逻辑依赖内核暴露的 proc 接口。而 ss(来自 iproute2)直接调用 netlink socket,响应更快、信息更实时,且对新内核特性(如 BPF 过滤、cgroup 关联)支持更好。
- CentOS 8/RHEL 8、Ubuntu 20.04+ 默认不预装 net-tools,首次使用需手动安装
- 对比命令:
netstat -tuln≈ss -tuln,但后者在高并发连接下延迟更低、CPU 占用更小 - 若需长期监控(如重传率趋势),推荐用
ss -i或直接读/proc/net/snmp,避免 netstat 格式化开销











