linux ss命令

ss命令 用于查看系统套接字(socket)统计信息,是netstat命令的现代替代品。ss能够显示比netstat更详细的信息,并且速度更快,特别是在有大量连接的情况下。

命令格式

ss [选项] [过滤条件]

常用选项

选项 说明
-t, --tcp 显示TCP套接字
-u, --udp 显示UDP套接字
-l, --listening 显示监听中的套接字
-a, --all 显示所有套接字(包括监听和非监听)
-n, --numeric 不解析服务名称(显示端口号)
-p, --processes 显示使用套接字的进程
-s, --summary 显示套接字使用摘要
-4, --ipv4 仅显示IPv4套接字
-6, --ipv6 仅显示IPv6套接字
-0, --packet 显示PACKET套接字
-x, --unix 显示UNIX域套接字
-w, --raw 显示RAW套接字
-e, --extended 显示详细的套接字信息
-m, --memory 显示套接字内存使用情况
-i, --info 显示TCP内部信息
-o, --options 显示TCP计时器信息
-r, --resolve 解析主机名(默认行为)
-H, --no-header 不显示标题行
-A, --query=查询 套接字表选择(tcp, udp, raw等)
-D, --diag=文件 将原始TCP套接字信息转储到文件
-F, --filter=文件 从文件读取过滤信息
-Z, --context 显示SELinux安全上下文

输出字段说明

字段 说明
State 套接字状态(ESTAB, LISTEN, TIME-WAIT等)
Recv-Q 接收队列中的数据大小(字节)
Send-Q 发送队列中的数据大小(字节)
Local Address:Port 本地地址和端口
Peer Address:Port 远程地址和端口
Process 使用套接字的进程信息
Timer TCP计时器信息
uid 用户ID
Inode 套接字索引节点号

TCP连接状态说明

活动状态
  • LISTEN - 监听传入连接
  • ESTABLISHED - 已建立的连接
  • SYN-SENT - 主动发起连接
  • SYN-RECV - 收到连接请求
关闭状态
  • FIN-WAIT-1 - 等待远程TCP连接终止请求
  • FIN-WAIT-2 - 等待远程TCP连接终止请求
  • TIME-WAIT - 等待足够时间以确保远程TCP接收到连接终止请求的确认
  • CLOSE-WAIT - 等待本地用户连接终止请求
  • CLOSED - 连接已关闭

使用实例

1. 查看所有TCP连接
ss -t
2. 查看所有UDP连接
ss -u
3. 查看所有监听中的端口
ss -l
4. 查看所有TCP监听端口(显示端口号)
ss -ltn
5. 查看所有TCP连接(包括监听和非监听)
ss -ta
6. 查看所有TCP连接并显示进程信息
ss -t -p
7. 查看套接字使用摘要
ss -s
8. 查看指定端口的连接
# 查看80端口
ss -t sport = :80

# 查看22端口
ss -t sport = :22

# 查看源端口是80的连接
ss -t sport = :80

# 查看目标端口是80的连接
ss -t dport = :80
9. 查看指定IP的连接
# 查看与192.168.1.100的连接
ss -t dst 192.168.1.100

# 查看从192.168.1.100发起的连接
ss -t src 192.168.1.100
10. 查看UNIX域套接字
ss -x
11. 显示详细信息和内存使用
ss -etm
12. 查看TCP内部信息
ss -ti
13. 显示TCP计时器信息
ss -to
14. 组合过滤条件
# 查看ESTABLISHED状态的TCP连接
ss -t state established

# 查看所有非监听状态的TCP连接
ss -t state connected

# 查看TIME-WAIT状态的TCP连接
ss -t state time-wait

# 查看指定状态的连接
ss -t state listening
ss -t state fin-wait-1
ss -t state fin-wait-2
ss -t state close-wait
ss -t state closing
ss -t state last-ack
ss -t state closed
15. 查看SELinux安全上下文
ss -tZ
16. 查看IPv4和IPv6分别的统计
ss -4 -s
ss -6 -s
17. 使用表达式过滤
# 查看端口范围在80-100的连接
ss -t sport gt :80 sport lt :100

# 查看接收队列大于0的连接
ss -t 'recv-q > 0'

# 查看发送队列大于0的连接
ss -t 'send-q > 0'
18. 持续监控连接变化
# 每秒刷新一次
watch -n 1 ss -t

# 监控特定端口
watch -n 1 'ss -t sport = :80'

实际输出示例

示例1:查看TCP监听端口
$ ss -ltn
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN     0      128           *:22                       *:*
LISTEN     0      100    127.0.0.1:25                       *:*
LISTEN     0      128          :::80                      :::*
LISTEN     0      128          :::22                      :::*
示例2:查看TCP连接及进程
$ ss -tp
State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
ESTAB      0      0      192.168.1.100:ssh     192.168.1.200:54321  users:(("sshd",pid=1234,fd=3))
ESTAB      0      0      192.168.1.100:http    203.0.113.45:48231   users:(("nginx",pid=5678,fd=12))
LISTEN     0      128          *:ssh                 *:*          users:(("sshd",pid=9012,fd=3))
示例3:套接字使用摘要
$ ss -s
Total: 456
TCP:   45 (estab 30, closed 5, orphaned 0, timewait 5)
Transport Total     IP        IPv6
RAW       1         0         1
UDP       15        10        5
TCP       40        25        15
INET      56        35        21
FRAG      0         0         0
示例4:查看TCP内部信息
$ ss -ti
State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
ESTAB      0      0      192.168.1.100:ssh     192.168.1.200:54321
     cubic wscale:7,7 rto:204 rtt:0.4/0.8 ato:40 mss:1448 cwnd:10 send 4.3Mbps rcv_rtt:4 rcv_space:14600
ESTAB      0      0      192.168.1.100:http    203.0.113.45:48231
     cubic wscale:6,7 rto:240 rtt:12.5/25 ato:40 mss:1448 cwnd:10 send 1.2Mbps rcv_rtt:12 rcv_space:29200

实用场景

网络问题排查
  • 端口占用检查
  • 网络连接泄漏分析
  • 连接状态异常检查
  • 防火墙规则验证
性能监控
  • 网络连接数监控
  • TCP参数调优
  • 缓冲区使用分析
  • 网络吞吐量估算
安全审计
  • 可疑连接检测
  • 未授权端口扫描
  • SELinux策略检查
  • 入侵检测分析
服务管理
  • 服务端口验证
  • 进程网络行为分析
  • 负载均衡监控
  • 容器网络检查

实用命令组合

# 查看占用80端口的进程
ss -ltnp | grep :80

# 统计各种TCP状态的数量
ss -t -a | grep -v State | awk '{print $1}' | sort | uniq -c | sort -rn

# 查看所有ESTABLISHED连接并按本地端口排序
ss -t state established -n | sort -n -k 4

# 查看所有非本地IP的连接
ss -t | grep -v '127.0.0.1' | grep -v '::1'

# 监控新连接建立
watch -d -n 1 'ss -t state established'

# 查看TCP重传情况
ss -ti | grep -E "retrans|lost"

# 查看每个进程的TCP连接数
ss -tp | awk '/users:/{print $NF}' | cut -d= -f2 | cut -d, -f1 | sort | uniq -c | sort -rn

# 查找连接数最多的IP
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

与netstat对比

对比项 ss命令 netstat命令
速度 快速,直接从内核获取信息 较慢,需要遍历/proc文件系统
信息量 更详细,支持更多TCP内部信息 基本信息
资源占用 高(尤其在连接数多时)
过滤功能 强大,支持表达式过滤 有限
兼容性 较新的Linux发行版 几乎所有系统
推荐度 推荐使用 传统命令,逐渐被ss取代
注意事项:
  • ss命令是iproute2软件包的一部分,大多数现代Linux发行版已预装
  • ss显示的信息比netstat更准确,特别是TCP状态信息
  • 使用-n选项可以避免DNS查询,提高显示速度
  • ss支持丰富的过滤表达式,可以精确筛选需要的连接
  • 对于大量连接的系统,ss的性能优势非常明显
  • ss的某些选项需要root权限才能查看完整信息

安装ss

ss命令通常包含在iproute2软件包中,大多数Linux发行版默认已安装。

# 检查是否已安装
which ss
ss --version

# Ubuntu/Debian安装(如果需要)
sudo apt-get install iproute2

# CentOS/RHEL/Fedora安装
sudo yum install iproute

# Arch Linux
sudo pacman -S iproute2

# 验证安装
ss --help

高级用法

1. 使用BPF过滤器
# 使用BPF(Berkeley Packet Filter)语法
ss -tn '( dst 192.168.1.0/24 and port 80 )'

# 查看所有到192.168.1.100的HTTP连接
ss -t '( dst 192.168.1.100 and dport = :80 )'
2. 查看连接的内存使用
# 显示每个连接的缓冲区使用情况
ss -mt

# 显示TCP内存使用统计
cat /proc/net/sockstat
3. 监控网络连接变化脚本
#!/bin/bash
# 网络连接监控脚本

LOG_FILE="/var/log/connection_monitor.log"
INTERVAL=10  # 监控间隔(秒)

echo "=== 网络连接监控开始于 $(date) ===" >> $LOG_FILE

while true; do
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

    # 统计各种状态的TCP连接数
    TCP_STATS=$(ss -t -a | tail -n +2 | awk '{print $1}' | sort | uniq -c)

    # 获取连接总数
    TOTAL_CONN=$(ss -t -a | tail -n +2 | wc -l)

    # 获取ESTABLISHED连接数
    ESTAB_CONN=$(ss -t state established | tail -n +2 | wc -l)

    echo "[$TIMESTAMP] 总连接数: $TOTAL_CONN, ESTABLISHED: $ESTAB_CONN" >> $LOG_FILE
    echo "$TCP_STATS" | while read count state; do
        echo "  $state: $count" >> $LOG_FILE
    done

    # 如果ESTABLISHED连接数异常,发出警告
    if [ $ESTAB_CONN -gt 1000 ]; then
        echo "[$TIMESTAMP] [警告] ESTABLISHED连接数异常: $ESTAB_CONN" >> $LOG_FILE
        # 可以添加邮件通知等
    fi

    sleep $INTERVAL
done

相关命令

netstat

传统的网络统计工具

查看详情
lsof

查看打开文件和网络连接

查看详情
ip

网络接口和路由管理

查看详情