🐧 Linux ss 命令详解
🐧 Linux ss 命令详解
🎯 学习目标
- 掌握
ss(Socket Statistics)命令的基本结构与常用参数。 - 熟悉使用
ss查看 TCP、UDP 连接状态,排查网络问题。 - 能够结合
grep、awk等工具进行高效分析。 - 了解
ss与旧版netstat的差异及优势。
⚡ 核心重点(知识点提炼)
| 功能 | 命令 | 说明 |
|---|---|---|
| 查看所有连接 | ss -a |
显示所有 TCP/UDP 连接 |
| 查看TCP连接 | ss -t |
只显示 TCP 连接 |
| 查看UDP连接 | ss -u |
只显示 UDP 连接 |
| 显示进程信息 | ss -p |
显示关联的进程名和 PID(需 root 权限) |
| 显示统计信息 | ss -s |
显示 socket 统计摘要 |
| 过滤特定端口 | ss dport = :80 |
使用表达式过滤指定端口 |
| 查看监听状态 | ss -l |
查看处于 LISTEN 状态的连接 |
| 查看连接状态 | ss -o |
显示超时、重传等 TCP 状态信息 |
📚 详细讲解
🧩 一、基本语法格式
ss [OPTIONS] [FILTER]
-
OPTIONS:
-t:TCP 协议-u:UDP 协议-l:LISTEN 状态(监听中的服务)-a:ALL(包括监听和非监听)-n:不解析服务名称(如显示 80 而不是 http)-p:显示进程信息(需要 root 权限)-r:解析服务名称(默认行为)-e:显示详细的 socket 信息(UID、INODE 等)-m:显示内存使用情况-o:显示 TCP 定时器(如 retransmit、keepalive)-s:显示 socket 摘要统计信息-i:显示 TCP 内部信息(RTT、拥塞控制算法等)
-
FILTER:
dport/sport:源或目的端口src/dst:源或目的 IP 地址state:连接状态(如 established, time-wait 等)
🔍 二、查看所有连接(TCP + UDP)
ss -a
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:55432 192.168.1.1:22
tcp LISTEN 0 128 *:22 *:*
udp UNCONN 0 0 *:68 *:*
📌 字段解释:
Netid:协议类型(tcp/udp/sctp)State:连接状态(ESTAB=已建立,LISTEN=监听中,UNCONN=未连接)Recv-Q:接收队列中有多少字节尚未被应用读取Send-Q:发送队列中有多少字节尚未被对方确认Local Address:Port:本地地址和端口Peer Address:Port:对端地址和端口
🛠 三、查看 TCP/UDP 连接
1. 查看所有 TCP 连接
ss -t -a
输出示例:
tcp LISTEN 0 128 *:ssh *:*
tcp ESTAB 0 0 192.168.1.100:ssh 192.168.1.1:54321
2. 查看所有 UDP 连接
ss -u -a
输出示例:
udp UNCONN 0 0 *:bootpc *:*
udp UNCONN 0 0 *:domain *:*
📌 注意:
- UDP 是无连接协议,因此大多数状态为
UNCONN bootpc是 DHCP 客户端使用的端口(68),domain是 DNS(53)
🕵️♂️ 四、查看监听状态的服务(常用)
ss -l -t
输出示例:
tcp LISTEN 0 128 *:ssh *:*
tcp LISTEN 0 128 *:http *:*
📌 用途:
- 快速查看哪些服务正在监听端口(如 SSH、HTTP、HTTPS 等)
- 替代
netstat -tulnp
🧠 五、查看进程信息(需 root)
sudo ss -t -p
输出示例:
tcp ESTAB 0 0 192.168.1.100:ssh 192.168.1.1:54321 users:(("sshd",pid=1234,fd=3))
📌 说明:
users:后面显示了进程名、PID 和文件描述符- 可用于定位哪个进程占用了某个端口
🧱 六、按条件过滤连接
1. 查看特定端口的连接(如 80)
ss dport = :80
或查看源端口:
ss sport = :80
2. 查看特定 IP 的连接(如 192.168.1.1)
ss src 192.168.1.1
3. 查看处于 TIME-WAIT 状态的连接
ss -t state time-wait
输出示例:
tcp TIME-WAIT 0 0 192.168.1.100:80 192.168.1.1:54321
📌 用途:
- 高并发场景下可能出现大量 TIME-WAIT 连接
- 可用于优化服务器性能(调整
net.ipv4.tcp_tw_reuse参数)
🧪 七、查看 TCP 状态和定时器(进阶)
ss -to
输出示例:
tcp ESTAB 0 0 192.168.1.100:80 192.168.1.1:54321 timer:(keepalive,60sec,0)
📌 说明:
timer字段显示当前 TCP 状态下的定时器(如 keepalive、retransmit)- 可用于调试连接异常或慢响应问题
📊 八、查看 socket 统计信息
ss -s
输出示例:
Total: 23 (kernel 34)
TCP: 15 (established 2, closed 5, orphaned 0, synrecv 0)
UDP: 6
RAW: 0
📌 说明:
- 显示当前系统中各类 socket 的总数和状态
- 可用于快速判断是否有大量连接堆积或异常关闭
🧬 九、实战案例:排查高连接数问题
🧩 场景描述:
你的 Web 服务器突然变慢,怀疑是连接数过高导致资源耗尽。你应该如何排查?
✅ 步骤如下:
-
查看当前 TCP 连接总数
ss -s | grep TCP -
查看当前活跃的连接数量
ss -t | wc -l -
查看每个 IP 的连接数
ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr输出示例:
150 192.168.1.100 30 192.168.1.200 -
查看特定端口(如 80)的连接数
ss -t dport = :80 | wc -l -
查看 TIME-WAIT 数量
ss -ant | grep TIME-WAIT | wc -l -
查看哪个进程占用了最多连接
sudo ss -t -p | awk '{print $7}' | grep -v "-" | sort | uniq -c | sort -nr
🧠 小贴士:ss vs netstat
| 功能 | ss 命令 |
netstat |
|---|---|---|
| 查看连接 | ✅ | ✅ |
| 查看监听 | ✅ | ✅ |
| 显示进程信息 | ✅(更清晰) | ✅(但较慢) |
| 性能表现 | ✅ 更快(直接读取内核接口) | ❌ 较慢(依赖 /proc/net) |
| 支持过滤 | ✅ 支持强大表达式 | ❌ 表达能力弱 |
| 默认安装 | ✅ 多数现代发行版自带 | ❌ 已弃用,部分系统不再预装 |
📌 建议:
- 新项目请统一使用
ss命令。 netstat已被标记为过时,在某些发行版中甚至不再预装(如 Ubuntu 20.04+)。
🧩 不同发行版差异小结
| 发行版 | 默认是否安装 | 包名 | 特殊说明 |
|---|---|---|---|
| Ubuntu 20.04+/Debian 11+ | ✅ 默认安装 | iproute2 |
支持完整功能 |
| CentOS 7+/RHEL 8+ | ✅ 默认安装 | iproute |
支持良好 |
| EulerOS 2.0+ | ✅ | iproute |
华为云推荐使用 |
| Alpine Linux | ❌ | 需手动安装 iproute2 |
精简系统需额外安装 |
🧪 实验练习题(动手练一练)
- 查看当前系统中所有处于 ESTABLISHED 状态的 TCP 连接。
- 找出占用 80 端口的所有连接,并统计数量。
- 查看本机监听的所有端口及其对应进程(需要 root)。
- 使用
ss -s查看 socket 摘要统计信息,观察变化。 - 使用
ss -t -o查看当前连接的 TCP 定时器信息。
🧩 拓展阅读
man ss:查看完整帮助文档ss --help:快速查看可用选项- 《Linux Networking Cookbook》——深入理解 Linux 网络诊断
- 结合
lsof、tcpdump等工具进行综合分析
🎉 恭喜!你已经掌握了 Linux 中最强大的网络状态查看工具之一 ss,下一章节我们将进入《Linux 网络抓包与流量分析(tcpdump)》的学习,敬请期待!🚀

浙公网安备 33010602011771号