zoukankan      html  css  js  c++  java
  • ss命令Linux网络状态工具

    ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。ss命令是CentOS 7,Ubuntu16.04以后的版本中iproute2软件包的一部分,默认已经安装。
    当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
    天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)

    一.命令格式:

    ss [参数]
    ss [参数] [过滤]

    命令功能:
    ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。

    命令参数:
    ----------------------------------------------------------------------
    -h, --help 帮助信息
    -V, --version 程序版本信息
    -n, --numeric 不解析服务名称
    -r, --resolve 解析主机名
    -a, --all 显示所有套接字(sockets)
    -l, --listening 显示监听状态的套接字(sockets)
    -o, --options 显示计时器信息
    -e, --extended 显示详细的套接字(sockets)信息
    -m, --memory 显示套接字(socket)的内存使用情况
    -p, --processes 显示使用套接字(socket)的进程
    -i, --info 显示 TCP内部信息
    -s, --summary 显示套接字(socket)使用概况
    -4, --ipv4 仅显示IPv4的套接字(sockets)
    -6, --ipv6 仅显示IPv6的套接字(sockets)
    -0, --packet 显示 PACKET 套接字(socket)
    -t, --tcp 仅显示 TCP套接字(sockets)
    -u, --udp 仅显示 UCP套接字(sockets)
    -d, --dccp 仅显示 DCCP套接字(sockets)
    -w, --raw 仅显示 RAW套接字(sockets)
    -x, --unix 仅显示 Unix套接字(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 从文件中都去过滤器信息

    二、下面我讲解如何使用ss命令查看各种信息。具体使用语法如下:

    1.列出已建立的连接

    默认情况下,如果我们运行ss命令而没有指定其他选项,它将显示所有已建立连接的打开的非侦听套接字的列表,例如TCP,UDP或UNIX套接字。

    [root@renwolecom ~]# ss | head -n 5
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    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.显示监听套接字

    我们可以使用-l选项专门列出当前正在侦听连接的套接字,而不是列出所有的套接字。

    [root@renwolecom ~]# ss -lt
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:http *:*
    LISTEN 0 100 127.0.0.1:smtp *:*
    LISTEN 0 128 *:entexthigh *:*
    LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
    LISTEN 0 128 127.0.0.1:cslistener *:*
    LISTEN 0 80 :::mysql :::*
    LISTEN 0 100 ::1:smtp :::*
    LISTEN 0 128 :::entexthigh :::*
    在这个示例中,我们还使用-t选项只列出TCP,稍后将对此进行详细说明。在后面的例子中,你会看到我将结合多种选择,以快速过滤掉,从而达到我们的目的。

    3.显示进程

    我们可以用-p选项打印出拥有套接字的进程或PID号。

    [root@renwolecom ~]# ss -pl

    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    tcp LISTEN 0 128 :::http :::* users:(("httpd",pid=10522,fd=4),("httpd",pid=10521,fd=4),("httpd",pid=10520,fd=4),("httpd",pid=10519,fd=4),("httpd",pid=10518,fd=4),("httpd",pid=10516,fd=4))
    在上面的例子中我只列出了一个结果,没有进行进一步选项,因为ss的完整输出打印出超过500行到标准输出。所以我只列出一条结果,由此我们可以看到服务器上运行的各种Apache进程ID。

    4.不解析服务名称

    默认情况下,ss只会解析端口号,例如在下面的行中,我们可以看到172.28.204.62:mysql,其中mysql被列为本地端口。

    [root@renwolecom ~]# ss
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:38920
    tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51598
    tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51434
    tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:36360
    但是,如果我们指定-n选项,看到的是端口号而不是服务名称。

    [root@renwolecom ~]# ss -n
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:38920
    tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:51598
    tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:51434
    tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:36360
    现在显示3306,而非mysql,因为禁用了主机名和端口的所有名称解析。另外你还可以查看/etc/services得到所有服务对应的端口列表。

    5.解析数字地址/端口

    用-r选项可以解析IP地址和端口号。用此方法可以列出172.28.204.62服务器的主机名。

    [root@renwolecom ~]# ss -rNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    tcp ESTAB 0 0 renwolecom:mysql renwolecom:48134
    6.IPv4套接字

    我们可以通过-4选项只显示与IPv4套接字对应的信息。在下面的例子中,我们还使用-l选项列出了在IPv4地址上监听的所有内容。

    [root@renwolecom ~]# ss -l4
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    tcp LISTEN 0 128 *:http *:*
    tcp LISTEN 0 100 127.0.0.1:smtp *:*
    tcp LISTEN 0 128 *:entexthigh *:*
    tcp LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
    tcp LISTEN 0 128 127.0.0.1:cslistener *:*
    7.IPv6套接字

    同样,我们可以使用-6选项只显示与IPv6套接字相关信息。在下面的例子中,我们还使用-l选项列出了在IPv6地址上监听的所有内容。

    [root@renwolecom ~]# ss -l6
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    udp UNCONN 0 0 :::ipv6-icmp :::*
    udp UNCONN 0 0 :::ipv6-icmp :::*
    udp UNCONN 0 0 :::21581 :::*
    tcp LISTEN 0 80 :::mysql :::*
    tcp LISTEN 0 100 ::1:smtp :::*
    tcp LISTEN 0 128 :::entexthigh :::*
    8.只显示TCP

    -t选项只显示TCP套接字。当与-l结合只打印出监听套接字时,我们可以看到所有在TCP上侦听的内容。

    [root@renwolecom ~]# ss -lt
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:http *:*
    LISTEN 0 100 127.0.0.1:smtp *:*
    LISTEN 0 128 *:entexthigh *:*
    LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
    LISTEN 0 128 127.0.0.1:cslistener *:*
    LISTEN 0 80 :::mysql :::*
    LISTEN 0 100 ::1:smtp :::*
    LISTEN 0 128 :::entexthigh :::*
    9.显示UDP

    -u选项可用于仅显示UDP套接字。由于UDP是一种无连接的协议,因此只运行-u选项将不显示输出,我们可以将它与-a或-l选项结合使用,来查看所有侦听UDP套接字,如下所示:

    [root@renwolecom ~]# ss -ul
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    UNCONN 0 0 *:sunwebadmins *:*
    UNCONN 0 0 *:etlservicemgr *:*
    UNCONN 0 0 *:dynamid *:*
    UNCONN 0 0 *:9003 *:*
    UNCONN 0 0 *:9004 *:*
    UNCONN 0 0 127.0.0.1:terabase *:*
    UNCONN 0 0 *:56803 *:*
    10. Unix套接字

    -x选项只能用来显示unix域套接字。

    [root@renwolecom ~]# ss -x
    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
    u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 23555 * 21093
    u_str ESTAB 0 0 /tmp/zabbix_server_ipmi.sock 20155 * 19009
    u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 19354 * 22573
    u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 21844 * 19375
    ...
    11.显示所有信息

    -a选项显示所有的监听和非监听套接字,在TCP的情况下,这意味着已建立的连接。这个选项与其他的组合很有用,例如可以添加-a选项显示所有的UDP套接字,默认情况下只有-u选项我们看不到多少信息。

    [root@renwolecom ~]# ss -u
    Recv-Q Send-Q Local Address:Port Peer Address:Port
    0 0 172.28.204.66:36371 8.8.8.8:domain
    [root@renwolecom ~]# ss -ua
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    UNCONN 0 0 *:sunwebadmins *:*
    UNCONN 0 0 *:etlservicemgr *:*
    UNCONN 0 0 *:dynamid *:*
    UNCONN 0 0 *:9003 *:*
    UNCONN 0 0 *:9004 *:*
    UNCONN 0 0 127.0.0.1:terabase *:*
    UNCONN 0 0 *:56803 *:*
    ESTAB 0 0 172.28.204.66:36371 8.8.8.8:domain
    12.显示套接字内存使用情况

    -m选项可用于显示每个套接字使用的内存量。

    [root@renwolecom ~]# 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)
    LISTEN 0 128 *:entexthigh *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    LISTEN 0 128 172.28.204.62:zabbix-trapper *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    LISTEN 0 128 127.0.0.1:cslistener *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    LISTEN 0 80 :::mysql :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    LISTEN 0 100 ::1:smtp :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    LISTEN 0 128 :::entexthigh :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
    13.显示TCP内部信息

    我们可以使用-i选项请求额外的内部TCP信息。

    [root@renwolecom ~]# ss -lti
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:chimera-hwm *:* bbr cwnd:10
    LISTEN 0 128 *:etlservicemgr *:* bbr cwnd:10
    LISTEN 0 128 172.28.204.66:27017 *:* bbr cwnd:10
    LISTEN 0 128 127.0.0.1:27017 *:* bbr cwnd:10
    LISTEN 0 128 *:dynamid *:* bbr cwnd:10
    LISTEN 0 128 *:9003 *:* bbr cwnd:10
    LISTEN 0 128 *:9004 *:* bbr cwnd:10
    LISTEN 0 128 *:http *:* bbr cwnd:10
    LISTEN 0 128 *:ssh *:* bbr cwnd:10
    LISTEN 0 100 127.0.0.1:smtp *:* bbr cwnd:10
    LISTEN 0 128 *:sunwebadmins *:* bbr cwnd:10
    LISTEN 0 128 :::ssh :::* bbr cwnd:10
    在每个侦听套接字下面,我们可以看到更多信息。注意:-i选项不适用于UDP,如果您指定-u,而非-t,则不会显示这些额外的信息。

    14.显示统计信息

    我们可以使用-s选项快速查看统计数据。

    [root@renwolecom ~]# ss -s
    Total: 798 (kernel 1122)
    TCP: 192 (estab 99, closed 81, orphaned 0, synrecv 0, timewait 1/0), ports 0

    Transport Total IP IPv6
    * 1122 - -
    RAW 1 0 1
    UDP 0 0 0
    TCP 111 59 52
    INET 112 59 53
    FRAG 0 0 0
    这使我们能够快速看到已建立连接的总数,及各种类型的套接字的计数和IPv4或IPv6的使用情况。

    15.基于状态的过滤器

    我们可以指定一个套接字的状态,只打印这个状态下的套接字。例如,我们可以指定包括已建立, established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack监听和关闭等状态。以下示例显示了所有建立的TCP连接。为了生成这个,我通过SSH连接到了服务器,并从Apache加载了一个网页。然后我们可以看到与Apache的连接迅速转变为等待时间。

    [root@renwolecom ~]# ss -t state established
    Recv-Q Send-Q Local Address:Port Peer Address:Port
    0 52 172.28.204.67:ssh 123.125.71.38:49518
    0 0 ::ffff:172.28.204.67:http ::ffff:123.125.71.38:49237
    [root@renwolecom ~]# ss -t state established
    Recv-Q Send-Q Local Address:Port Peer Address:Port
    0 0 172.28.204.67:ssh 103.240.143.126:55682
    0 52 172.28.204.67:ssh 123.125.71.38:49518
    0 0 ::ffff:172.28.204.67:http ::ffff:123.125.71.38:49262
    16.根据端口号进行过滤

    可以通过过滤还可以列出小于(lt),大于(gt),等于(eq),不等于(ne),小于或等于(le),或大于或等于(ge)的所有端口。

    例如,以下命令显示端口号为500或以下的所有侦听端口:

    [root@renwolecom ~]# ss -ltn sport le 500
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:80 *:*
    LISTEN 0 100 127.0.0.1:25 *:*
    LISTEN 0 100 ::1:25 :::*
    为了进行比较,我们可以执行相反的操作,并查看大于500的所有端口:

    [root@renwolecom ~]# ss -ltn sport gt 500
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:12002 *:*
    LISTEN 0 128 172.28.204.62:10051 *:*
    LISTEN 0 128 127.0.0.1:9000 *:*
    LISTEN 0 80 :::3306 :::*
    LISTEN 0 128 :::12002 :::*
    我们还可以根据源或目标端口等项进行筛选,例如,我们搜索具有SSH源端口运行的TCP套接字:

    [root@renwolecom ~]# ss -t '( sport = :ssh )'
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    ESTAB 0 0 172.28.204.66:ssh 123.125.71.38:50140
    17.显示SELinux上下文

    -Z与-z选项可用于显示套接字的SELinux安全上下文。 在下面的例子中,我们使用-t和-l选项来列出侦听的TCP套接字,使用-Z选项我们也可以看到SELinux的上下文。

    [root@renwolecom ~]# ss -tlZ
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:sunrpc *:*
    users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
    LISTEN 0 5 172.28.204.62:domain *:*
    users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
    LISTEN 0 128 *:ssh *:*
    users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
    LISTEN 0 128 127.0.0.1:ipp *:*
    users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
    LISTEN 0 100 127.0.0.1:smtp *:*
    users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))
    18.显示版本号

    -v选项可用于显示ss命令的特定版本信息,在这种情况下,我们可以看到提供ss的iproute包的版本。

    [root@renwolecom ~]# ss -v
    ss utility, iproute2-ss130716
    19.显示帮助文档信息

    -h选项可用于显示有关ss命令的进一步的帮助,如果需要对最常用的一些选项进行简短说明,则可以将其用作快速参考。 请注意:这里并未输入完整列表。

    [root@renwolecom ~]# ss -h
    Usage: ss [ OPTIONS ]
    20.显示扩展信息

    我们可以使用-e选项来显示扩展的详细信息,如下所示,我们可以看到附加到每条行尾的扩展信息。

    [root@renwolecom ~]# ss -lte
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:sunrpc *:* ino:16090 sk:ffff880000100000 <->
    LISTEN 0 5 172.28.204.62:domain *:* ino:23750 sk:ffff880073e70f80 <->
    LISTEN 0 128 *:ssh *:* ino:22789 sk:ffff880073e70000 <->
    LISTEN 0 128 127.0.0.1:ipp *:* ino:23091 sk:ffff880073e707c0 <->
    LISTEN 0 100 127.0.0.1:smtp *:* ino:24659 sk:ffff880000100f80 <->
    21.显示计时器信息

    -o选项可用于显示计时器信息。该信息向我们展示了诸如重新传输计时器值、已经发生的重新传输的数量以及已发送的keepalive探测的数量。

    [root@renwolecom ~]# ss -to
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    ESTAB 0 52 172.28.204.67:ssh 123.125.71.38:49518timer:(on,406ms,0)
    LAST-ACK 0 1 172.28.204.67:ssh 103.240.143.126:49603timer:(on,246ms,0)
    总结:

    现在你应该对ss有了初步的认识。如果你想使用ss命令快速检查有关套接字的各种信息,建议你查阅ss的相关手册。

     

    参考:

    https://blog.51cto.com/net881004/2166100

    https://blog.51cto.com/shunsheng/1770421

    https://www.cnblogs.com/peida/archive/2013/03/11/2953420.html

  • 相关阅读:
    Do You See Me? Ethical Considerations of the Homeless
    ELDER HOMELESSNESS WHY IS THIS AN ISSUE?
    Endoflife support is lacking for homeless people
    html内联框架
    html字体
    html块 div span
    html列表
    html表格
    SQL Server管理员专用连接的使用   作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情况
    如何配置最大工作线程数 (SQL Server Management Studio)
  • 原文地址:https://www.cnblogs.com/pipci/p/12579733.html
Copyright © 2011-2022 走看看