云计算百科
云计算领域专业知识百科平台

Linux命令-ss(查看 Socket 统计)

Linux命令-ss(查看 Socket 统计)

    • 快速参考
    • 核心选项
    • 基本用法
    • 按状态过滤
    • 按端口/地址过滤
    • 按进程过滤
    • 高级用法
    • ss vs netstat 对比

ss(Socket Statistics)是 netstat 的现代替代品,用于显示套接字(socket)统计信息。它直接从内核获取信息,比 netstat 速度更快,信息更丰富,尤其是在系统有大量连接时优势明显。ss 是 iproute2 工具包的一部分,已成为现代 Linux 系统网络诊断的首选工具。

快速参考

ss [选项] [过滤器]

内核直达:ss 通过 Netlink 接口直接与内核通信获取套接字信息,避免了 netstat 读取 /proc 文件系统的开销。

核心选项

选项说明
-t 显示 TCP 套接字
-u 显示 UDP 套接字
-l 仅显示监听状态的套接字
-a 显示所有(监听+非监听)套接字
-n 以数字形式显示地址和端口(不解析域名)
-p 显示使用该套接字的进程信息
-s 显示统计摘要
-o 显示计时器信息(keepalive、重传等)
-e 显示详细的套接字内存使用信息
-m 显示套接字内存使用
-r 解析主机名
-i 显示内部 TCP 信息
-4/-6 只显示 IPv4/IPv6 套接字

基本用法

# 显示所有已建立的 TCP 连接
ss -t

# 显示所有 TCP 套接字(含监听)
ss -ta

# 显示所有监听状态的 TCP/UDP 套接字
ss -tul

# 最常用组合:显示所有监听端口及对应进程
ss -tulnp

# 显示所有已建立的连接(含进程名和端口号)
ss -tnp

# 显示统计摘要
ss -s
# Total: 245
# TCP: 32 (estab 12, closed 15, …)
# …

# 显示计时器信息
ss -to

按状态过滤

# 查看所有 ESTABLISHED 状态的 TCP 连接
ss -t state established

# 查看所有 LISTEN 状态的套接字
ss -t state listening

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

# 查看 CLOSE-WAIT 状态的连接(可能表示连接泄漏)
ss -t state close-wait

# 查看 SYN-SENT 和 SYN-RECV 状态(用于诊断连接问题)
ss -t state syn-sent syn-recv

# 查看所有非监听 TCP 连接
ss -t state all exclude listening

# 查看 FIN-WAIT 状态的连接
ss -t state fin-wait-1 fin-wait-2

# 查看连接状态分布统计
ss -ta | awk '{print $1}' | sort | uniq -c | sort -rn

按端口/地址过滤

# 查看目标端口为 80 的连接
ss -tn dst :80

# 查看源端口为 80 的连接
ss -tn src :80

# 查看源端口或目标端口为 80 的连接
ss -tn '( dport = :80 or sport = :80 )'

# 查看来自特定 IP 的连接
ss -tn dst 192.168.1.100

# 查看连接到特定子网的连接
ss -tn dst 10.0.0.0/8

# 查看特定端口范围的连接
ss -tn dst :1024-65535

# 查看连接到 192.168.1.1:443 的连接
ss -tn dst 192.168.1.1:443

# 查看小于 1024 端口的监听服务
ss -tlnp sport lt :1024

# 查看大于等于 8080 端口的连接
ss -tn sport ge :8080

按进程过滤

# 查看 Nginx 的所有连接(需要 -p 选项)
ss -tnp | grep nginx

# 方式二:使用 -p 选项并配合状态过滤
ss -tp state established | grep nginx

# 查看某个 PID 的所有连接
ss -tnp | grep "pid=1234"

# 统计每个进程的连接数
ss -tnp | awk -F'"' '{print $2}' | sort | uniq -c | sort -rn | head -10

# 查看 SSH 服务的监听状态
ss -tlnp | grep sshd

高级用法

# 显示套接字内存使用详情
ss -tem

# 显示 TCP 内部信息(MSS、拥塞窗口等)
ss -ti

# 结合计时器和进程信息
ss -topn

# 实时监控连接变化(使用 watch)
watch -n 1 'ss -tn state established | wc -l'

# 监控 ESTABLISHED 连接数的变化趋势
while true; do
echo "$(date '+%H:%M:%S') $(ss -tn state established | tail -n +2 | wc -l)"
sleep 1
done

# 诊断 TIME-WAIT 过多的服务器
echo "TIME-WAIT 连接数: $(ss -tn state time-wait | wc -l)"

# 检查 CLOSE-WAIT 连接泄漏
ss -tnp state close-wait
# 大量 CLOSE-WAIT 可能表示应用程序未正确关闭连接

# 显示内核维护的套接字内存统计
ss -m

# 按状态分组统计
ss -t state established '( sport = :443 )' | wc -l
echo "HTTPS 活跃连接: $?"

# 查看 Docker 容器端口映射
ss -tlnp | grep docker-proxy

ss vs netstat 对比

特性ssnetstat
速度 极快(Netlink 接口) 较慢(读取 /proc)
大型服务器 无性能问题 可能卡顿
过滤语法 丰富的状态/端口过滤 仅 grep 过滤
内核信息 显示 TCP 内部状态 有限
默认安装 iproute2 包 net-tools 包

# 同一功能的命令对比
netstat -tulnp # → ss -tulnp
netstat -an # → ss -an
netstat -s # → ss -s
netstat -i # → ip -s link

# 性能对比测试
time netstat -tan > /dev/null
time ss -tan > /dev/null
# ss 通常快 10 倍以上(在连接数上万时优势明显)

最佳实践:在日常网络诊断中,优先使用 ss 替代 netstat。在高并发服务器上,ss 的速度优势尤为突出。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Linux命令-ss(查看 Socket 统计)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!