SS使用介绍

2012年12月1日 | 分类: 操作系统, 网络性能 | 标签:

为什么用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

本文的评论功能被关闭了.