首页/网络/协议速查/netstat 与 ss 对照
TCP 与 UDP54 条

netstat 与 ss 对照

老系统还在用 netstat,新系统推荐 ss:两者常用写法可互换,但 netstat 已从多数发行版默认包移除。

协议速查网络更新于 2026-10-13

netstat 与 ss 的关系

netstat 和 ss 都是查看本机套接字状态的工具,常用写法基本可以互换。差别在实现:netstat 通过遍历 /proc 拼接信息,在高并发下更慢且可能丢样本;ss 直接走 netlink 接口,速度更快,能多给出拥塞窗口、重传次数、定时器一类细节。netstat 所属的 net-tools 套件已从多数发行版的默认安装里移除,新系统上默认只有 ss。

基本信息

工具来源netstat 属 net-tools,ss 属 iproute2
数据来源netstat 遍历 /proc,ss 走 netlink
默认安装新发行版默认有 ss,netstat 需额外安装
信息丰富度ss 可输出 cwnd、rtt、重传等连接细节
权限查看进程归属需 root 或相应能力

常用写法对照

需求netstat 写法ss 写法
监听 TCPnetstat -lntpss -lntp
全部 TCP 连接netstat -antss -ant
按端口过滤netstat -ant | grep :443ss -ant dport = :443
按状态过滤netstat -ant | grep TIME_WAITss -ant state time-wait
进程归属netstat -antpss -antp
连接细节无对应能力ss -ti 看 cwnd、rtt、重传
UDP 套接字netstat -anuss -anu
统计摘要netstat -sss -s 配合 nstat

迁移到 ss 的等价写法

迁移到 ss 的等价写法
ss -lntp                       # 看监听与进程
ss -ant state established      # 只看已建立连接
ss -ti dst 10.0.0.5            # 单条连接细节:cwnd、rtt、重传
ss -s                          # 按状态汇总数量
nstat -az | grep -iE 'TcpRetransSegs|TcpExtListenOverflows'   # 累计计数

典型使用场景

  • 确认服务是否真的在监听、监听在哪个地址与端口
  • 排查连接数异常:按状态汇总,快速看出 TIME_WAIT 或 SYN_RECV 堆积
  • 定位端口占用与进程归属,配合发布与重启流程
  • 看单条连接的窗口、时延与重传,判断是应用慢还是网络慢
  • 把巡检脚本从 netstat 迁移到 ss,兼容精简容器镜像
容器镜像精简后常没有 netstat,脚本里写它会直接报 command not found。更稳妥的做法是改用 ss,或直接读 /proc/net/tcp 与 /proc/net/tcp6——那才是两个工具共同的数据来源,也是无工具环境下的兜底手段。
ss 输出里的 Recv-Q 与 Send-Q 在监听行表示等待 accept 的连接数与监听队列上限,在已建立行则表示缓冲区中尚未被应用读写的字节数。监听行的队列长期接近上限,说明应用 accept 太慢或队列过小,客户端表现就是连接超时或拒绝。

易错点

  • 在精简镜像里依赖 netstat:容器能跑但脚本报命令不存在,误判为镜像被改坏
  • 高并发下用 netstat 做周期性统计:采样慢且会漏掉短连接,数字不可信
  • 用 grep 过滤 ss 输出而不用内置过滤器,连接多时容易误匹配端口号片段
  • 忘了看进程归属需要更高权限,非 root 执行后得到空列就以为没有进程占用

数据来源与参考

  • man 8 ss
  • iproute2 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌