🐧 Linux ss 命令详解 🎯 学习目标
掌握 ss(Socket Statistics)命令的基本结构与常用参数。
熟悉使用 ss 查看 TCP、UDP 连接状态,排查网络问题。
能够结合 grep、awk 等工具进行高效分析。
了解 ss 与旧版 netstat 的差异及优势。
⚡ 核心重点(知识点提炼) 功能 命令 说明
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📌 建议:
新项目请统一使用 ss 命令。
netstat 已被标记为过时,在某些发行版中甚至不再预装(如 Ubuntu 20.04+)。
🧩 不同发行版差异小结 发行版 默认是否安装 包名 特殊说明查看当前系统中所有处于 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)》的学习,敬请期待!🚀