学习啦 > 学习电脑 > 操作系统 > Linux教程 > linux的ss命令详解

linux的ss命令详解

时间: 佳洲1085 分享

linux的ss命令详解

  linux下的ss是可以用来获取socket的统计信息的,下面由学习啦小编为大家搜集整理了linux的ss命令详解的相关知识,希望对大家有帮助!

  linux的ss命令详解

  ss 是 socket statistics 的缩写。顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

  当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是 cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用 netstat 等于浪费生命,而用 ss才是 节省时间。

  天下武功唯快不破。ss快的秘诀在于,他利用了TCP协议栈中 tcp_diag. tcp_diag 是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有 tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat 要快。)

  1.命令格式:

  ss [参数]

  ss [参数] [过滤]

  2.命令功能:

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

  3.命令参数:

  -n  --numeric不解析服务名称

  -r  --resolve 解析主机名

  -l  --listening 显示监听状态的套接字(sockets)

  -a  --all显示所有套接字

  -o  --options  显示计时器信息

  -e  --extended  显示详细的套接字(socket)的内存使用情况

  -p  --processed  显示使用套接字的进程

  -i  --info   显示 tcp 内部信息

  -s  --summary  显示套接字(socket)使用概况

  -4  --IPv4  仅显示 IPv4的套接字

  -6

  -0(零)  --packet  显示 PACKET 套接字

  -t  --tcp  仅显示 TCP 套接字

  -u  --udp  仅显示 UDP套接字

  -d  --dccp  仅显示 DCCP 套接字

  -w  --raw  仅显示 RAW 套接字

  -x  --Unix 仅显示 Unix 套接字

  -f  --family=FAMILY  显示 FAMILY 类型的套接字,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 套接字信息转储到文件

  -F  --filter=FILE  从文件中都去过滤信息

  FLITER    := [ state TCP-STATE ] [ EXPRESSION ]

  linux的ss命令使用实例

  实例1:显示TCP连接

  命令:ss  -t -a

  实例2:显示 sockets 摘要

  命令:  ss -s

  列出当前的established、 closed、 orphaned and waiting TCP sockets

  实例3:

  ss -l

  实例4:查看进程使用的socket

  命令:

  ss -pl

  实例5:找出打开套接字/端口应用程序

  命令:

  ss -lp | grep 3306

  实例6:显示所有UDP sockets

  命令:

  ss -u -a

  实例7:显示所有状态为 established 的 SMTP 连接

  命令:

  ss -o  state established `( dport =: smtp or sport = : smtp )`

  实例8:显示所有状态为 Established 的 HTTP 连接

  命令:

  ss -o state established `(dport = :http or sport = :http)`

  实例9:列举出处于 FIN-WAIT-1 状态的源端口为 80 或者 443, 目标网络为 192.168.1 /24 的所有 tcp 套接字

  命令:

  ss -o state fin-wait-1 `( sport = :http or sport = :https)` dst 192.168.1/24

  实例10:用TCP 状态过滤 sockets:

  命令:

  ss -4 state FILTER-NAME-HERE

  ss -6 state FILTER-NAME-HERE

  FILTER-NAME-HERE 可以代表以下任何一个

  established

  syn-sent

  syn-recv

  fin-wait-1

  fin-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 相反

  实例11:匹配远程地址和端口号

  命令:

  ss dst ADDERSS_PATTERN

  ss dst 192.168.1.1

  ss dst 192.168.1.1:8080

  实例12:匹配本地地址和端口号

  命令:

  ss  src ADDRESS_PATTERN

  ss  src 192.168.1.1

  ss  src 192.168.1.1:80

  实例13:将本地或者远程端口和一个数比较

  命令:

  ss  dport  OP  PORT  远程端口和一个数比较; destination port

  ss  sport  OP  PORT  本地端口和一个数比较; source port

  OP--OPTION:

  <= or le,  >= or ge,  == or eq,

  != or ne  < or gt   > or lt

  实例14: ss 和 netstat 效率对比

  命令:

  time netstat -at

  time ss

  用 time 命令分别获取通过netstat 和 ss 命令获取程序占用资源所使用的时间。在服务器连接数比较多的时候,netstat 的效率完全没法和 ss 比。

3632262