Linux ss 命令查看网络socket信息

介绍

ss(Socket Statistics)是 Linux 下替代 netstat 的套接字查看工具,速度更快、信息更全,内核直接读取 socket 信息,适合高并发服务器。

对比

  • netstat 遍历 /proc,大量连接时很慢
  • ss 直接调用内核接口。

语法

ss [OPTIONS] [FILTER]

常用参数

参数 说明
-t TCP 套接字
-u UDP 套接字
-x Unix 域套接字
-l 只显示监听端口(Listen)
-a 所有套接字(监听+已建立)
-n 数字形式,不解析域名/端口名(推荐,更快)
-p 显示进程名和 PID(需要 root 或 sudo 权限)
-e 显示详细信息(uid, inode)
-i 显示内部 TCP 信息(拥塞窗口、定时器)
-s 汇总统计,不列出每个连接
-4 IPv4
-6 IPv6

-p 显示进程名

注意: 非 root 用户需要 sudo 提权

sudo ss -p

-l 显示端口号(将端口号解析成协议名)

ss  -l

执行结果如下,将端口号解析成协议名:

-ln 显示端口号

就显示原始端口号,不会将端口号解析成协议

ss  -ln

例子

提示:非root用户需要使用 sudo,否则可能不显示程序名

1. 查看所有监听 TCP 端口(数字,带进程)

ss -tlnp

2. 查看所有 TCP 连接(包括已建立)

ss -tanp

3. 查看 UDP 监听端口

ss -ulnp

4. 连接统计概览

ss -s

输出示例:

Total: 132 (kernel 156)
TCP:   18 (estab 4, closed 5, orphaned 0, synrecv 0, timewait 0/0), ports 0

5. 过滤:只看指定端口

目标端口 80
ss -t 'dport = :80'
源端口 22
sudo ss -tlnp 'sport = :80'
端口范围
ss -t 'dport >= :8000 and dport <= :8080'

6. 过滤指定 IP

ss -t 'src 192.168.1.100'
ss -t 'dst 10.0.0.5'

7. 查找某程序的端口号

查找nginx程序的端口号

sudo ss -lnp | grep nginx

返回结果字段说明

ss -tlnp 命令的返回结果:

State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128          0.0.0.0:22                      0.0.0.0:*                   users:(("sshd",pid=1234,fd=3))
  • State:套接字状态
  • Recv-Q:接收队列,等待应用读取的数据字节数
  • Send-Q:发送队列,等待发往对端的数据字节数
  • Local Address:Port:本机地址端口
  • Peer Address:Port:对端地址端口

Recv-Q / Send-Q 不为0:一般代表连接阻塞,需要排查。


原文出处:/show_1GW478N49reL.html