ss 使用手册速览
一、工具基础介绍
1.1 核心功能定位
ss
(Socket Statistics)是 Linux 系统核心网络统计工具,用于:
- 实时监控 TCP/UDP 连接状态
- 分析套接字使用情况
- 诊断网络连接问题
- 替代传统
netstat
工具(速度提升 10-100 倍)
1.2 工作原理
二、核心参数详解
2.1 基础命令格式
ss [选项] [过滤表达式]
2.2 常用参数速查表
参数 | 功能说明 | 示例 |
---|---|---|
-t | 仅显示 TCP 连接 | ss -t |
-u | 仅显示 UDP 连接 | ss -u |
-a | 显示所有套接字 | ss -a |
-l | 仅显示监听套接字 | ss -l |
-p | 显示进程信息 | ss -p |
-s | 显示统计汇总 | ss -s |
-m | 显示内存使用 | ss -m |
-o | 显示计时器信息 | ss -o |
2.3 高级过滤语法
协议过滤:
ss sport = :https
ss dport = :domain
状态过滤:
ss state established
ss '( dport = :ssh or sport = :ssh )'
地址过滤:
ss src 192.168.1.100
ss dst 10.0.0.0/8
三、典型应用场景
3.1 连接状态监控
查看所有 TCP 连接:
ss -t state established
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:ssh 10.0.0.2:54321
监控 UDP 套接字:
ss -u sport = :53
3.2 端口监听分析
查看所有监听端口:
ss -lntu
输出解析:
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 [::]:22 [::]:*
查找异常监听:
ss -lp 'sport = :8080'
3.3 进程关联分析
查看连接关联进程:
ss -pt 'dst 192.168.1.100'
输出示例:
PID Program Name
1234 /usr/lib/firefox/firefox
3.4 连接数统计
统计 TCP 连接数:
ss -s | awk '/TCP:/ {print $3}'
按状态统计:
ss -t state | awk '{print $1}' | sort | uniq -c
四、高级诊断技巧
4.1 内存使用分析
查看套接字内存占用:
ss -m 'sport = :80'
输出示例:
skmem (r=65536,rb=8232,t=65536,tb=16384,f=0,w=0,o=0,bl=0,d=0)
4.2 定时器分析
查看连接超时设置:
ss -o 'state time-wait'
输出示例:
timer:(keepalive,60sec,0)
4.3 原始套接字监控
查看 ICMP 流量:
ss -i -a
输出示例:
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
icmp 0 0 *:* *:*
五、性能对比与选型
5.1 ss vs netstat 性能对比
测试命令:
time for i in {1..1000}; do ss -a >/dev/null; done
time for i in {1..1000}; do netstat -a >/dev/null; done
典型结果:
ss: real 0m1.234s
netstat: real 0m5.678s
5.2 功能对比矩阵
特性 | ss | netstat |
---|---|---|
实时性 | √ | × |
过滤语法 | √ | × |
内存统计 | √ | × |
原始套接字支持 | √ | × |
进程关联 | √ | √ |
六、常见问题解决
6.1 权限不足问题
现象:ss: cannot display security-related information
解决方案:
sudo ss -p
6.2 过滤表达式失效
现象:ss: invalid option -- 'x'
解决方案:
- 检查过滤语法:
ss '( dport = :https or sport = :https )'
- 使用单引号包裹表达式
6.3 输出格式定制
现象:需要机器可读格式
解决方案:
ss -t json | jq '.[] | select(.state=="established")'
七、最佳实践指南
7.1 日常监控脚本
#!/bin/bash
# 网络连接健康检查
echo "=== TCP Connections ==="
ss -t state established | wc -l
echo "=== Listening Ports ==="
ss -lnt | wc -l
echo "=== SYN-RECV Count ==="
ss -t state syn-recv | wc -l
7.2 安全审计流程
- 检查异常监听:
ss -lptu 'sport = :1024-'
- 分析境外连接:
ss -t 'dst 1.2.3.0/24'
- 检测隐蔽通道:
ss -t 'sport = :31337'
7.3 性能优化建议
- 调整内核参数:
sysctl -w net.core.somaxconn=65535
- 优化 TIME-WAIT 重用:
sysctl -w net.ipv4.tcp_tw_reuse=1
- 监控连接跟踪表:
ss -s | grep 'skmem'