ss是查看linux内核tcp协议栈状态最直接高效的工具,通过tcp_diag模块实时读取socket子系统一手数据,支持state established等精确状态过滤、-i查看重传与rtt、dst/dport/sport原生筛选及-s获取全局统计。

ss 是查看 Linux 内核 TCP 协议栈状态最直接、最高效的工具。它不走 /proc/net 接口,而是通过 tcp_diag 模块从内核 socket 子系统实时读取一手数据,因此能准确反映协议栈当前行为,尤其适合高并发或排查连接异常场景。
查 TCP 连接状态分布
连接状态是判断协议栈健康度的第一层指标。ss 支持按标准 TCP 状态精确过滤:
-
活跃通信连接:用
ss -tn state established—— 只抓真正正在收发数据的 ESTABLISHED 连接,不含 FIN-WAIT 或 TIME-WAIT -
异常堆积连接:如
ss -tn state close-wait或ss -tn state time-wait,分别定位对端未关闭或本地未及时回收的连接 -
监听端口是否就位:
ss -tln查 TCP 监听,注意必须带-t和-l才能显示 LISTEN;若服务没出现,先确认是否 bind 到 127.0.0.1(需 grep:80而非80)
查 TCP 内部统计与性能细节
加 -i 参数可暴露每个连接的内核级 TCP 控制块信息,包括重传次数、拥塞窗口、RTT 估算值等:
-
ss -tini显示所有 TCP 连接的内部状态(含 RTT、cwnd、ssthresh、retrans、rto 等) -
ss -tini state established | head -10重点看活跃连接的重传率和窗口大小,快速识别丢包或拥塞 - 字段中
retrans非零且持续增长,说明链路存在丢包;cwnd长期卡在较小值(如 ≤ 10),可能受慢启动或丢包抑制影响
按地址/端口精准定位问题连接
生产环境常需聚焦某 IP 或端口,ss 原生支持高效过滤,无需管道:
-
ss -tn dst 192.168.1.100:筛选目标 IP 的所有 TCP 连接 -
ss -tn dport = :443:查所有连向 443 端口的连接(注意= :语法) -
ss -tn sport = :8080:查本机以 8080 为源端口发起的连接(如反向代理出向流量) - 多个条件可组合:
ss -tn dst 10.0.0.5 dport = :3306快速锁定某数据库访问链路
获取整机级 TCP 协议栈汇总
用 -s 选项看全局统计,比 netstat -s 更轻量、更实时:
-
ss -s输出类似:TCP: 1234 (estab 892, closed 12, orphaned 5, synrecv 0, timewait 320) - 重点关注
orphaned(孤儿连接数)—— 表示已关闭但尚未被内核回收的连接,过高说明内存压力或应用未正确 close -
synrecv长期 > 0,可能遭遇 SYN Flood;tw(TIME-WAIT)过多需结合net.ipv4.tcp_tw_reuse调优











