Linux 之 ss 命令
ss 是 Socket Statistics 的缩写。顾名思义,ss 命令可以用来获取 socket 统计信息,它可以显示和 netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。
当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接
cat /proc/net/tcp
,执行速度都会很慢。
ss 快的秘诀在于,它利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,这就确保了 ss 的快捷高效。当然,如果你的系统中没有 tcp_diag,ss 也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat 要快。)
ss 命令用于显示 socket 状态. 他可以显示 PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets 等等统计. 它比其他工具展示等多 tcp 和 state 信息. 它是一个非常实用、快速、有效的跟踪 IP 连接和 sockets 的新工具.SS 命令可以提供如下信息
命令格式
命令功能
比 netstat 好用的 socket 统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息
命令参数
-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 从文件中读取过滤器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ]
显示 TCP 连接
显示 UDP 链接
显示 Sokets 摘要
列出当前的 established, closed, orphaned and waiting TCP sockets
显示本地打开的所有端口
查看进程使用的 socket
找出打开套接字/端口应用程序
显示所有状态为 established 的 SMTP 连接
显示所有状态为 Established 的 HTTP 连接
用 TCP 状态过滤 Sockets
FILTER-NAME-HERE 可以是下面的任何一个
listen:侦听来自远方的 TCP 端口的连接请求
syn-sent:再发送连接请求后等待匹配的连接请求(客户端)
syn-recv:再收到和发送一个连接请求后等待对方对连接请求的确认(服务器)
established:代表一个打开的连接
fin-wait-1:等待远程 TCP 连接中断请求,或先前的连接中断请求的确认
fin-wait-2:从远程 TCP 等待连接中断请求
close-wait:等待从本地用户发来的连接中断请求
closing:等待远程 TCP 对连接中断的确认
last-ack:等待原来的发向远程 TCP 的连接中断请求的确认
time-wait:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认
closed:没有任何连接状态
all : 所有以上状态
connected : 除了 listen and closed 的所有状态
synchronized :所有已连接的状态除了 syn-sent
bucket : 显示状态为 maintained as minisockets,如:time-wait 和 syn-recv.
big : 和 bucket 相反.
匹配远程地址和端口号
将本地或者远程端口和一个数比较
ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。
OP
可以代表以下任意一个:<=
or le : 小于或等于端口号>=
or ge : 大于或等于端口号==
or eq : 等于端口号!=
or ne : 不等于端口号<
or gt : 小于端口号>
or lt : 大于端口号
ss 和 netstat 效率对比
time netstat -at
time ss
用 time 命令分别获取通过 netstat 和 ss 命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat 的效率完全没法和 ss 比。
原文链接:https://rumenz.com/rumenbiji/linux-ss.html
微信公众号:入门小站
版权声明: 本文为 InfoQ 作者【入门小站】的原创文章。
原文链接:【http://xie.infoq.cn/article/53198865f8aad939dbfad9ca8】。文章转载请联系作者。
评论