ss(Socket Statistics)是 Linux 系统中用于显示网络套接字(socket)信息的现代命令行工具,是 netstat 的继任者,性能更高、输出更简洁。它提供详细的网络连接、监听端口和协议统计信息,广泛用于网络监控、故障排查和性能分析。相比传统的 netstat,ss 直接从内核获取数据显示更快,功能更强大,适合现代 Linux 系统。
ss 是 Linux 系统中的一个网络诊断工具,属于 iproute2 软件包,用于显示网络套接字的状态信息,包括 TCP、UDP、UNIX 套接字等。它从内核空间直接读取数据,提供实时、准确的网络统计,取代了老旧的 netstat(来自 net-tools 包)。ss 支持丰富的过滤和输出选项,是系统管理员和开发人员分析网络连接、监控端口和排查问题的首选工具。
ss [选项] [过滤表达式]
常用选项包括:
过滤表达式:
权限要求:某些选项(如 -p)需要 root 权限(使用 sudo)。
软件包:ss 通常随 iproute2 预装,若缺失可安装:
sudo apt install iproute2 # Debian/Ubuntu
sudo yum install iproute # CentOS/RHEL
性能优势:比 netstat 更快,适合高负载环境。
输出解析:输出信息较多,建议结合 grep 或 awk 过滤。
ss 的应用场景广泛,以下是几个典型用途:
以下通过具体示例介绍 ss 的基础用法,帮助读者快速上手。以下示例假设运行在 Linux 系统(如 Ubuntu 22.04 或 CentOS 8)。
查看所有网络套接字(包括监听和非监听):
ss -a
解释:
-a:显示所有套接字,包括监听和已建立的连接。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
字段说明:
查看所有监听的 TCP 和 UDP 端口:
ss -tuln
解释:
-t:显示 TCP 套接字。
-u:显示 UDP 套接字。
-l:仅显示监听状态。
-n:以数字格式显示地址和端口。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
查看与套接字相关的进程:
sudo ss -tunap
解释:
-p:显示进程 ID 和程序名。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345 users:(("sshd",pid=5678,fd=4))
注意:需要 root 权限。
查看网络协议统计信息:
ss -s
解释:
-s:显示 TCP、UDP 等协议的统计摘要。
输出示例:
Total: 204 (kernel 205)
TCP: 10 (estab 2, closed 5, orphaned 0, synrecv 0, timewait 3/0), ports 5
Transport Total IP IPv6
RAW 0 0 0
UDP 3 2 1
TCP 5 4 1
INET 8 6 2
FRAG 0 0 0
用途:快速了解连接数量和协议分布。
查看使用端口 22 的连接:
ss -t sport = :22
解释:
sport = :22:过滤源端口为 22 的套接字。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345
查看与特定 IP 的连接:
ss -tn dst 192.168.1.101
解释:
dst 192.168.1.101:过滤目标地址为 192.168.1.101 的 TCP 连接。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345
ss 提供多种高级功能,适合复杂网络诊断和监控场景。以下介绍一些高级用法及其实现方法。
查看 TCP 连接中状态为 ESTABLISHED 的连接:
ss -t state established
解释:
state established:过滤状态为 ESTABLISHED 的 TCP 连接。
其他状态:listening、syn-sent、syn-recv、time-wait 等。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345
查看 TCP 连接的计时器详情:
ss -tno
解释:
-o:显示计时器信息,如超时和重传。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345 timer:(keepalive,119min,0)
用途:分析连接超时或网络延迟。
仅显示 IPv4 连接:
ss -t4
或仅显示 IPv6 连接:
ss -t6
结合多个条件过滤连接:
ss -t 'dst 192.168.1.101 and sport = :22'
解释:
dst 192.168.1.101:目标地址为 192.168.1.101。
sport = :22:源端口为 22。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:12345
查看套接字的详细选项:
sudo ss -tune
解释:
-e:显示扩展信息,如套接字缓冲区大小。
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* uid:0 ino:12345 sk:1
字段说明:
ss 提供详细的网络信息,操作不当可能导致误判或性能影响。以下是一些关键注意事项:
以下是一些高级技巧和实战案例,展示 ss 的强大功能。
检查 Web 服务器(端口 80)是否正常监听:
ss -tuln | grep ":80"
解释:
验证 Apache/Nginx 是否监听 80 端口。
若无输出,检查服务状态:
sudo systemctl status apache2
查找所有 SSH(端口 22)连接:
sudo ss -tunap | grep ":22"
解释:
检查 SSH 连接状态和来源 IP。
结合 state established 过滤活跃连接:
sudo ss -t state established 'sport = :22'
查找可疑外部连接:
sudo ss -tunap | grep -v "127.0.0.1"
监控 TCP 连接状态分布:
ss -s
watch -n 5 'ss -t state established | wc -l'
编写脚本定期记录连接状态:
#!/bin/bash
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "Network Status at $TIMESTAMP" >> /var/log/ss_status.log
ss -tunap >> /var/log/ss_status.log
echo "Established Connections: $(ss -t state established | wc -l)" >> /var/log/ss_status.log
添加到 cron:
sudo crontab -e
添加:
*/5 * * * * /path/to/script.sh
ss 常与其他工具结合,增强功能。
过滤特定 IP 或端口:
ss -tunap | grep "192.168.1.100"
提取特定字段:
ss -tunap | awk '{print $4, $5, $6}'
实时监控连接:
watch -n 2 'ss -tunap'
对比输出:
ss -tuln
netstat -tuln
ss 是 Linux 系统中现代化的网络诊断工具,取代了传统的 netstat,提供更快、更简洁的套接字统计信息。该文从基础用法到高级技巧,结合具体示例和注意事项,全面介绍了 ss 的功能。无论是网络连接监控、端口管理、安全审计还是性能分析,ss 都能提供强大支持。