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 写法 |
|---|---|---|
| 监听 TCP | netstat -lntp | ss -lntp |
| 全部 TCP 连接 | netstat -ant | ss -ant |
| 按端口过滤 | netstat -ant | grep :443 | ss -ant dport = :443 |
| 按状态过滤 | netstat -ant | grep TIME_WAIT | ss -ant state time-wait |
| 进程归属 | netstat -antp | ss -antp |
| 连接细节 | 无对应能力 | ss -ti 看 cwnd、rtt、重传 |
| UDP 套接字 | netstat -anu | ss -anu |
| 统计摘要 | netstat -s | ss -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 太慢或队列过小,客户端表现就是连接超时或拒绝。