ss 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
ss(socket statistics,套接字统计)——网络与远程命令族(见网络命令族)。它是老牌netstat的现代替代品。
ss 来自 iproute2 套件(Linux 网络配置的新标准工具集),直接从内核读取 socket 信息,比老旧的 netstat 快且信息更全。它回答:"这台机器上现在有哪些网络连接、谁在监听哪个端口、连接处在什么状态?"
一、最常用的组合
ss -tunlp # 总览:tcp+udp、不解析名、监听、显示进程
ss -lntp # 只看 TCP 监听端口及对应进程
ss -tn # 所有已建立的 TCP 连接
ss -tnp # 连接 + 进程(谁连的)
-tTCP、-uUDP、-n不解析服务名/主机名(快、显示数字端口)、-l只看监听、-p显示进程(需权限)。ss -tunlp几乎是排网络问题的起手式,一屏看清所有监听端口和活跃连接及对应进程。
二、按状态过滤连接
ss -tn state established # 已建立的 TCP
ss -tn state time-wait # 处于 TIME-WAIT 的
ss -tn state listening # 监听中(等同 -l)
ss -tn '( dport = :443 or sport = :443 )' # 过滤目的/源端口TCP 连接有不同的状态(state):
ESTABLISHED已连上、LISTEN监听、TIME-WAIT主动关闭后的等待、SYN-SENT正在握手等。ss state过滤很实用——比如看TIME-WAIT是不是堆积太多(高并发短连接服务的常见现象,可能耗尽端口范围)。
三、ss vs netstat
# netstat(已弃用但仍在用)
netstat -tunlp
# 等价 ss
ss -tunlp| 维度 | ss | netstat |
|---|---|---|
| 来源 | iproute2(现代) | net-tools(老旧) |
| 速度 | 快(直接读内核) | 慢(遍历 /proc) |
| 信息 | 更全(含更多 sock 统计) | 够用 |
| 状态 | 新系统默认有 | 逐步被移除 |
很多老教程还写
netstat -tunlp,但主流发行版已把net-tools标记为弃用,ss是现在的标准。两者参数高度相似,会ss就够了。端口冲突排查也可以用 lsof -i,三者都能看监听端口,按顺手选。
四、统计汇总
ss -s # 按协议汇总 socket 数量
ss -tn | wc -l # 当前 TCP 连接总数
ss -tn state time-wait | wc -l # TIME-WAIT 数量
ss -s给一个全局概览(TCP/UDP/RAW 各多少、多少处于各状态),快速判断是不是连接数异常。配合wc -l数连接数,监控脚本常用。
五、实战:服务起不来 / 连接数异常
# 端口没监听?看是不是没起来或被占
ss -lntp | grep :8080
# 连接数暴涨?看 ESTABLISHED 总量
ss -tn state established | wc -l
# TIME-WAIT 堆积?
ss -tn state time-wait | wc -l"服务起不来"先 ss -lntp | grep :端口 确认到底有没有在监听——没监听说明进程没起或崩了(看 systemctl status);监听了却连不上,查防火墙/网络。TIME-WAIT 过多则考虑内核参数 net.ipv4.tcp_tw_reuse 或连接池优化(见 网络原理)。
一句话总结
ss = 查看 socket 连接(netstat 现代替代,来自 iproute2,更快更全):-tunlp 一屏看 TCP/UDP 监听与进程、state established/time-wait/listening 按状态过滤、-s 汇总统计;端口没监听先 ss -lntp 确认,连接数异常数 state established。端口冲突也可借 lsof -i 查。