xiaobaoqiu Blog

Think More, Code Less

Netstat与ss命令

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。这是很ss还是会很快。

ss 和 netstat 效率对比:

1
2
3
4
5
6
7
8
9
xiaobaoqiu@xiaobaoqiu:~/octopress$ time ss
real    0m0.330s
user    0m0.004s
sys 0m0.013s

xiaobaoqiu@xiaobaoqiu:~/octopress$ time netstat -at
real    1m37.135s
user    0m0.143s
sys 0m0.020s

1.ss命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help       帮助
   -V, --version    版本信息
   -n, --numeric    不解析服务名称
   -r, --resolve    解析服务名称
   -a, --all        显示所有套接字(sockets)
   -l, --listening  显示listening状态的套接字(sockets)
   -o, --options    显示计时器(timer)信息
   -e, --extended   显示详细的套接字信息
   -m, --memory     显示套接字的内存使用情况
   -p, --processes  显示使用套接字的进程
   -i, --info       显示TCP内部信息
   -s, --summary    显示套接字使用概况
   -b, --bpf        show bpf filter socket information
   -4, --ipv4       仅显示IPv4的套接字
   -6, --ipv6       仅显示IPv6的套接字
   -0, --packet     显示 PACKET 套接字
   -t, --tcp        仅显示TCP的套接字
   -u, --udp        仅显示UDP的套接字
   -d, --dccp       仅显示DCCP的套接字
   -w, --raw        仅显示RAW的套接字
   -x, --unix       仅显示Unix的套接字(domain sockets)
   -f, --family=FAMILY 显示FAMILY类型的套接字(sockets)
                    FAMILY可选,支持unix,inet,inet6,link,netlink

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE     将原始TCP套接字(sockets)信息转储到文件
   -F, --filter=FILE   从文件中读取过滤器信息
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

2.简单使用

2.1 显示TCP连接

1
2
3
4
5
6
7
xiaobaoqiu@xiaobaoqiu:~/octopress$ ss -ta
State      Recv-Q Send-Q                 Local Address:Port                     Peer Address:Port   
LISTEN     0      50                                 *:50955                               *:*       
LISTEN     0      128                        127.0.0.1:11211                               *:*       
LISTEN     0      50                                 *:63342                               *:*       
LISTEN     0      50                                 *:2864                                *:*       
LISTEN     0      5                          127.0.1.1:domain                              *:*    

2.2 显示 Sockets 摘要

1
2
3
4
5
6
7
8
9
10
11
xiaobaoqiu@xiaobaoqiu:~/octopress$ ss -s
Total: 871 (kernel 0)
TCP:   44 (estab 8, closed 13, orphaned 0, synrecv 0, timewait 12/0), ports 0

Transport Total     IP        IPv6
*     0         -         -        
RAW   0         0         0        
UDP   21        16        5        
TCP   31        23        8        
INET      52        39        13       
FRAG      0         0         0

2.3 列出所有打开的网络连接端口

即处于Listening的端口

1
xiaobaoqiu@xiaobaoqiu:~/octopress$ ss -l

2.4 查看进程使用的socket

1
xiaobaoqiu@xiaobaoqiu:~/octopress$ ss -pl

可以根据ss -pl结果进行grep

2.5 匹配远程地址和端口号

1
2
3
xiaobaoqiu@xiaobaoqiu:~/octopress$ ss dst 192.168.138.115

xiaobaoqiu@xiaobaoqiu:~/octopress$ ss dst 192.168.138.115:17582

2.6 匹配本地地址和端口号

1
xiaobaoqiu@xiaobaoqiu:~/hotel/CRM/crm-main$ ss src 192.168.138.115

3.参考