🐧 Linux ss 命令详解

 佚名文
发布时间:2025-08-30 20:01

🐧 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)》的学习,敬请期待!🚀

首页
评论
分享
Top