SS使用介绍
为什么用SS替换netstat?
一个字,快,天下武功唯快不破
benchmark数据,在有30000个socket的时候,通过ss和netstat统计连接数
- netstat -at – 15.6 seconds
- ss -atr, but without tcp_diag – 5.4 seconds
- ss -atr with tcp_diag – 0.47 seconds
那为什么ss比netstat快了这么多呢?原来netstat在统计连接时,是通过/proc/net/tcp来dump的,当文件数过万时,系统不堪重负;
而ss采取了TCP协议栈中的tcp_diag,tcp_diag是tcp模块的一个分析统计模块,可以获得系统运行的一手资料,如果tcp_diag没有安装,ss也可以运行,但是速度会稍微慢一些,但是还是比netstat高效不少。
安装
默认linux都安装了netstat,netstat是net-tools中的工具。
[root@localhost ~]# rpm -ql net-tools /bin/dnsdomainname /bin/domainname /bin/hostname /bin/netstat ……
而ss不一定自带,ss是iproute中的一员,没有的话需要安装iproute即可。
[root@localhost ~]# rpm -ql iproute /sbin/ifcfg /sbin/ip /sbin/rtmon /sbin/tc /usr/sbin/rtacct /usr/sbin/ss ……
net-tools从2001年开始基本不再维护,而iproute已经出到第二个版本,大有取代之势。
SS的基本用法
1.查看系统连接汇总信息
[root@cache163 logs]# ss -s Total: 29664 (kernel 30383) TCP: 87180 (estab 29522, closed 54685, orphaned 2939, synrecv 0, timewait 54679/0), ports 3145 Transport Total IP IPv6 * 30383 - - RAW 0 0 0 UDP 10 10 0 TCP 32495 32494 1 INET 32505 32504 1 FRAG 0 0 0
2.查看系统当前监听的端口
[root@cache163 logs]# ss -ln Recv-Q Send-Q Local Address:Port Peer Address:Port 0 5 *:8462 *:* 0 511 *:80 *:* 0 1024 *:81 *:* 0 5 *:8082 *:*
每一列的含义是:Rcev-Q和Send-Q是指在这个连接上收到和发送的数据长度,第三四项是指仍在连接的本地和远端的ip和端口。
3.查看系统所有的连接
ss -a ss -at //只查看tcp ss -au //只查看udp ss -xa //只查看raw socket ss -ua //只查看unix domian socket
这些就是ss的全部吗?当然不是,除了类似netstat的一些功能之外,ss还能提供强大的过滤功能:
ss的过滤器分为两种,state和addr+port
- 按照socket状态过滤
比如查找tcp的time-wait,可以这样使用(其它十三种状态类似):
[root@localhost ~]# ss state time-wait Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 10.0.0.13:37208 10.0.0.13:81 0 0 10.0.0.13:37222 10.0.0.13:81 0 0 10.0.0.13:37077 10.0.0.13:81
其它状态:established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen,closing
除了这13种状态之外,还有几个聚类的状态:
all – for all the states
bucket – for TCP minisockets (TIME-WAIT|SYN-RECV
)
big – all except for minisockets
connected – not closed and not listening
synchronized – connected and not SYN-SENT
- 按照socket的源和目的地址,端口过滤
地址和端口可以使用表达式,类似于tcpdump中的用法
比如,查看本地81端口的连接
[root@cache163 logs]# ss src :81 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 122.228.242.163:81 122.228.242.165:35874 ESTAB 0 0 122.228.242.163:81 122.228.242.167:57956 ESTAB 0 0 122.228.242.163:81 122.228.242.163:36666
查找状态是fin-wait-1,本地端口是80,来源是125.123.97/24的连接
[root@cache163 logs]# ss -o state time-wait sport = :http dst 125.123.97/24 Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 122.228.242.240:http 125.123.97.243:7088 timer:(timewait,,0) 0 0 122.228.242.240:http 125.123.97.231:38980 timer:(timewait,,0) 0 0 122.228.242.240:http 125.123.97.243:7086 timer:(timewait,,0)
其它关键字
dst ADDRESS_PATTERN – matches remote address and port
src ADDRESS_PATTERN – matches local address and port
dport RELOP PORT – compares remote port to a number
sport RELOP PORT – compares local port to a number
autobound – checks that socket is bound to an ephemeral port
参考:
man ss
http://www.cyberciti.biz/files/ss.html