当前位置:   article > 正文

Linux 基础之基础网络ss命令_ss -atl

ss -atl

一、ss命令简述

ss(Socket Statistics)Socket统计;ss命令可以获取socket统计信息。它的功能和netstat类似。

1. ss命令特性

  • ss比netstat更快速源于在于它能够显示更为详细的TCP和Socket连接状态的信息。
  • 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
  • ss利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中最新的数据,进而就确保了ss的快速高效。(ss在没有 tcp_diag,ss也可以正常运行)

2. ss 和 netstat 效率对比

[root@localhost ~]# time netstat -at
real    0m0.038s
user    0m0.008s
sys     0m0.013s

[root@localhost ~]# time ss -at
real    0m0.006s
user    0m0.003s
sys     0m0.003s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

从上面的执行效率可以清晰地看到,ss命令的执行速度是netstat的6倍(不同环境可能执行效率不一样),可以看到ss 命令的执行之快的优势,体现的尤为突出。也为我们的工作解决执行节省时间(即使当服务器效率较低时)。

3.ss 命令的使用格式

ss 命令默认统计所有建立的连接(不包含监听的端口),包括 tcp, udp, and unix socket 三种类型的连接;

[root@example opt]# ss --help
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message #帮助信息
   -V, --version       output version information # 版本信息
   -n, --numeric       don't resolve service names  #不解析服务名称
   -r, --resolve       resolve host names   # 解析主机名,把 IP 解释为域名,把端口号解释为协议名称
   -a, --all           display all sockets   #显示所有Socket
   -l, --listening     display listening sockets #显示监听的Socket
   -o, --options       show timer information 
   -e, --extended      show detailed socket information #显示详细的Socket信息
   -m, --memory        show socket memory usage #显示Socket内存使用
   -p, --processes     show process using socket #显示Socket 使用进程
   -i, --info          show internal TCP information #显示内部TCP信息
   -s, --summary       show socket usage summary  #显示socket使用总数
   -b, --bpf           show bpf filter socket information
   -E, --events        continually display sockets as they are destroyed
   -Z, --context       display process SELinux security contexts #显示进程SELinux 安全山下文
   -z, --contexts      display process and socket SELinux security contexts #显示进程和Socket 的SELinux 安全山下文
   -N, --net           switch to the specified network namespace name

   -4, --ipv4          display only IP version 4 sockets  #显示ipv4 的Sockets
   -6, --ipv6          display only IP version 6 sockets  #显示ipv6 的Sockets
   -0, --packet        display PACKET sockets   #显示packet 的Sockets
   -t, --tcp           display only TCP sockets  #显示TCP 协议 的Sockets
   -S, --sctp          display only SCTP sockets  #显示STCP 的Sockets
   -u, --udp           display only UDP sockets   #显示UDP 的Sockets
   -d, --dccp          display only DCCP sockets
   -w, --raw           display only RAW sockets
   -x, --unix          display only Unix domain sockets
       --vsock         display only vsock sockets
   -f, --family=FAMILY display sockets of type FAMILY
       FAMILY := {inet|inet6|link|unix|netlink|vsock|help}

   -K, --kill          forcibly close sockets, display what was closed
   -H, --no-header     Suppress header line

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

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}
  • 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
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

二、ss命令实用案例

示例1:显示TCP连接: ss -atn

[root@localhost ~]# ss -atn  # -a:所有连接 -t:TCP 连接 -n: 不解析名称
State       Recv-Q Send-Q           Local Address:Port                          Peer Address:Port
LISTEN      0      128                          *:111                                      *:*
LISTEN      0      5                192.168.122.1:53                                       *:*
LISTEN      0      128                          *:22                                       *:*
LISTEN      0      128                  127.0.0.1:631                                      *:*
LISTEN      0      100                  127.0.0.1:25                                       *:*
LISTEN      0      128                  127.0.0.1:6010                                     *:* 
LISTEN      0      128                  127.0.0.1:6011                                     *:*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例2:显示当前 Sockets 概要信息: ss -s

[root@localhost ~]# ss -s
Total: 653 (kernel 1354)
TCP:   16 (estab 2, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         1354      -         -
RAW       0         0         0
UDP       8         6         2
TCP       15        9         6
INET      23        15        8
FRAG      0         0         0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

示例3:显示所有TCP的Listen状态的socket:ss -atl

[root@localhost ~]# ss -alt
State       Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
LISTEN      0      128                        *:sunrpc                                   *:*
LISTEN      0      5              192.168.122.1:domain                                   *:*
LISTEN      0      128                        *:ssh                                      *:*
LISTEN      0      128                127.0.0.1:ipp                                      *:*
LISTEN      0      100                127.0.0.1:smtp                                     *:*
LISTEN      0      128                127.0.0.1:x11-ssh-offset                           *:*
LISTEN      0      128                       :::sunrpc                                  :::*
LISTEN      0      128                       :::ssh                                     :::*
LISTEN      0      128                      ::1:ipp                                     :::*
LISTEN      0      100                      ::1:smtp                                    :::*
LISTEN      0      128                      ::1:x11-ssh-offset                          :::*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

示例4:显示正在监听的TCP程序的process:ss -altp

[root@localhost ~]# ss -altp
State       Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
LISTEN      0      128                        *:sunrpc                                   *:*                     users:(("rpcbind",pid=6174,fd=4),("systemd",pid=1,fd=47))
LISTEN      0      5              192.168.122.1:domain                                   *:*                     users:(("dnsmasq",pid=7202,fd=6))
LISTEN      0      128                        *:ssh                                      *:*                     users:(("sshd",pid=6798,fd=3))
LISTEN      0      128                127.0.0.1:ipp                                      *:*                     users:(("cupsd",pid=6796,fd=12))
LISTEN      0      100                127.0.0.1:smtp                                     *:*                     users:(("master",pid=7145,fd=13))
LISTEN      0      128                127.0.0.1:x11-ssh-offset                           *:*                     users:(("sshd",pid=13154,fd=9))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

示例5:显示所有established的HTTP连接:ss -o state established ‘( dport = :http or sport = :http )’

[root@localhost ~]# ss -o state established '( dport = :http or sport = :http )'
Netid Recv-Q Send-Q            Local Address:Port                             Peer Address:Port
  • 1
  • 2

注意:命令格式,字符之间需要有空格;可以是服务名称,或端口号,(如:http;80)

示例6:查看ipv4指定过滤规则的socket:ss -4 state FILTER-NAME

FILTER-NAME:Description
established活跃状态
syn-sent发送
syn-recv接收
fin-wait-1FIN-WAIT-1状态
fin-wait-2FIN-WAIT-2状态
time-wait等待关闭
closed已关闭
close-wait关闭
last-ack
listen正在监听
closing正在关闭
all所有以上状态
connected除了listen and closed的所有状态
synchronized所有已连接的状态除了syn-sent
bucket显示状态为maintained as minisockets,如:time-wait和syn-recv.
big和bucket相反.

查询处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 192.168.2/24所有 tcp套接字

[root@localhost ~]# ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 192.168.2/24
Netid Recv-Q Send-Q            Local Address:Port                             Peer Address:Port
  • 1
  • 2

示例 7:查看源端口为22的socket信息:ss -iom state established ‘( sport = :ssh )’

# -o, --options 显示时间信息
# -m, --memory 显示 socket 使用的内存
# -i, --info 显示更多 TCP 内部的信息
[root@localhost ~]# ss -iom state established '( sport = :ssh )'
Netid Recv-Q Send-Q            Local Address:Port                             Peer Address:Port
tcp   0      48                192.168.2.128:ssh                               192.168.2.1:56434                 timer:(on,238ms,0) # -o
        skmem:(r0,rb369280,t0,tb87040,f1792,w2304,o0,bl0,d0) sack cubic wscale:8,7 rto:240 rtt:39.96/3.157 ato:52 mss:1460 rcvmss:1168 advmss:1460 cwnd:10 bytes_acked:76797 bytes_received:50548 segs_out:1111 segs_in:1874 send 2.9Mbps lastsnd:2 lastrcv:4 lastack:4 pacing_rate 5.8Mbps unacked:1 rcv_rtt:122063 rcv_space:29364  # -m 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例8 :通过 dst/src/dport/sprot 语法来过滤连接的来源和目标,来源端口和目标端口。

8.1 匹配远程地址(dst)和端口号(dport):

[root@localhost ~]# ss dst 192.168.5/24 # 查询源地址为192.168.5/24网段的socket 数据
Netid State      Recv-Q Send-Q       Local Address:Port                        Peer Address:Port
tcp   ESTAB      0      48           192.168.5.128:ssh                          192.168.5.1:56434
                         192.168.5.1:56434
$ ss dst 192.168.5.120:http # 查询远程地址为192.168.5.120,端口为80的Socket
$ ss dst 192.168.5.120:443
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

8.2 匹配本地地址(src)和端口号(sport)

[root@localhost ~]# ss src 192.168.5/24 # 查询源地址为192.168.5/24网段的socket 数据
Netid State      Recv-Q Send-Q       Local Address:Port                        Peer Address:Port
tcp   ESTAB      0      48           192.168.5.128:ssh 
  • 1
  • 2
  • 3

8.3 匹配指定端口范围的socket数据:

格式: ss [dport|sport] Option port

Option说明
le(<=)小于等于
ge(>=)大于等于
lt(<)小于
gt(>)大于
eq(==)等于
ne(!=)不等于
# 查询远端端口号大于50的TCP的Socket
[root@localhost ~]# ss -t dport ge 50 
State       Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
ESTAB       0      48             192.168.5.128:ssh                            192.168.5.1:56434
  • 1
  • 2
  • 3
  • 4

总结:

由于ss命令的性能出色且功能丰富,可以使用ss 命令替代 netsate命令成为我们日常查看 socket 相关信息的利器。常见的ss命令使用方式,基本如上,更多的需我们结合自己的能力不断地在工作中总结。欢迎在留言区与我讨论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/816070
推荐阅读
相关标签
  

闽ICP备14008679号