ss是Socket Statistics的缩写,负责统计主机上网络连接信息,在ss之前使用最多的是netstat。从本质上来说ss在性能上可以完爆netstat,之所以快,主要原因是因为:netstat是直接cat /proc/net/tcp,然后对网络连接信息进行统计,ss使用TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以直接获得Linux 内核信息,从而保证了ss的高性能
1、ss使用格式
代码语言:javascript复制ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
在linux中也可以通过man ss的形式查看具体的参数,如下图所示:
2、ss常用命令
2.1 查看已创建连接
代码语言:javascript复制ss | head -n 5
执行结果如下:
代码语言:javascript复制[root@localhost ~]# ss | head -n 5
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
u_str ESTAB 0 0 * 19098 * 18222
u_str ESTAB 0 0 * 19441 * 19440
u_str ESTAB 0 0 * 19440 * 19441
u_str ESTAB 0 0 * 19396 * 19397
2.2 查看已监听套接字
代码语言:javascript复制ss -lt
执行结果如下:
代码语言:javascript复制[root@localhost ~]# ss -lt
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 *:http *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 *:entexthigh *:*
2.3 查看拥有套接字的进程
使用-p选项打印出拥有套接字的进程或PID号。使用命令如下:
代码语言:javascript复制ss -pl
结果如下:
代码语言:javascript复制Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
nl UNCONN 0 0 rtnl:41 *
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:-231054382 *
nl UNCONN 0 0 tcpdiag:kernel
2.4 解析数字地址/端口
ss后加上-r参数可以将ip地址和端口解析成可读字符串,命令如下:
代码语言:javascript复制ss -r
结果如下:
代码语言:javascript复制[root@localhost ~]# ss -r
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 renwolecom:mysql renwolecom:48134
2.4 查看IPV4/IPV6套接字
通过l4可以查看IPV4类型套接字,同理l6可以查看IPV6类型套接字。命令如下:
代码语言:javascript复制ss -l4
ss -l6
结果如下:
代码语言:javascript复制root@localhost ~]# ss -l6
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
[root@localhost ~]# ss -l4
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:bootpc
2.5 查看TCP/UDP/UNIX 套接字
-t参数可以只显示tcp套接字,-u可以只查看UDP套接字,-x可以查看unix套接字。使用命令如下:
代码语言:javascript复制ss -t
ss -u
ss -x
结果如下:
代码语言:javascript复制[root@localhost ~]# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:http *:*
[root@localhost ~]# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:sunwebadmins *:*
[root@localhost ~]# ss -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 32255 * 21809
2.6 查看套接字内存使用
使用-m参数可以查看套接字内存使用情况。命令如下:
代码语言:javascript复制ss -ltm
结果如下:
代码语言:javascript复制[root@localhost ~]# ss -ltm
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:http *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 100 127.0.0.1:smtp *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
2.7 查看套接字统计信息
使用-s可以对套接字使用情况进行汇总。命令如下:
代码语言:javascript复制ss -s
结果如下:
代码语言:javascript复制[root@localhost ~]# ss -s
Total: 14
TCP: 0 (estab 0, closed 0, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 0 0 0
UDP 1 1 0
TCP 0 0 0
INET 1 1 0
FRAG 0 0 0
2.8 对套接字状态进行过滤
使用ss -t state * 对套接字状态进行过滤,从而只展示需要的套接字状态的套接字信息。*可以用以下状态值进行替换,如:established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack,使用命令如下:
代码语言:javascript复制ss -t state
已展示established状态为例。执行结果如下:
代码语言:javascript复制[root@localhost ~]# ss -t state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 ::ffff:172.28.204.67:http ::ffff:123.125.71.38:49237
2.9 对端口号进行过滤
使用指定的符号可以根据端口号范围对ss结果进行过滤。支持的标识符为:小于(lt),大于(gt),等于(eq),不等于(ne),小于或等于(le),或大于或等于(ge),以大于为例,命令格式为:
代码语言:javascript复制ss -ltn sport ne 100
结果如下:
代码语言:javascript复制[root@localhost ~]# ss -ltn sport ne 100
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
2.10 显示版本号
通过 -v参数可以查看版本号。命令格式如下:
代码语言:javascript复制ss -v
运行结果如下:
代码语言:javascript复制[root@localhost ~]# ss -v
ss utility, iproute2-v5.7.0-77-gb687d1067169
3、总结
本文只对常用ss命令进行了介绍。ss的详细还请自行查阅,如:man ss