该ss
命令与命令非常相似,netstat
但比更快、更准确netstat
。
monitoring-server@monitoring-server:~$ ss
Netid State Recv-Q Send- Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 34006 * 34007
这是输出的第一行。该命令告知系统中所有打开的套接字。
我的系统上总共有 96 个,其中 56 个具有 ,u_str
其余Netid
具有tcp
。
这是什么u_str
,另外请详细解释一下Recv-Q
和Send-Q
?
答案1
u_str
是一个流套接字,相当于netstat
的 SOCK_STREAM。
SOCK_STREAM:这是一个流(连接)套接字。
从维基百科:
在计算机操作系统中,流套接字是一种进程间通信套接字或网络套接字,它提供面向连接的、有序的、唯一的数据流,没有记录边界,具有用于创建和销毁连接以及检测错误的明确机制。
让我们创建一个流套接字:
netcat -lU /tmp/streamsocket
现在运行:
ss -an | grep streamsocket
它将输出:
u_str LISTEN 0 5 /tmp/streamsocket 123360 * 0
简单来说,就是套接字的类型,可以是“UDP”或“TCP”。让我们创建一个 UDP 套接字:
netcat -lu 127.0.0.1 8060
现在,ss -l sport = 8060
会告诉你这个是“UDP”而不是“u_str”。
对于“Recv-Q”和“Send-Q”列,请参阅man 8 netstat
:
Recv-Q 连接到此套接字的用户程序未复制的字节数。
Send-Q 远程主机未确认的字节数。
答案2
ss
转储s
套接字s
统计数据。Netidu_str
是unix_stream
ie 的缩写,AF_UNIX插座系列和SOCK_STREAM插座类型:
AF_UNIX
(也称为)套接字系列AF_LOCAL
用于在同一台机器上的进程之间高效通信。传统上,UNIX 域套接字可以是未命名的,也可以绑定到文件系统路径名(标记为套接字类型)。Linux 还支持独立于文件系统的抽象命名空间。
SOCK_STREAM
提供有序、可靠、双向、基于连接的字节流。可支持带外数据传输机制。
从快速介绍ss
( /usr/share/doc/iproute2-doc/ss.html
):
然后两列(Recv-Q 和 Send-Q)显示排队接收和传输的数据量。
对于 unix 套接字来说,它是unix_diag_rqlen
从unix_diag.h
。