ss 输出中的 u_str、Recv-Q 和 Send-Q 是什么?

luv*_*eet 5 command-line networking 16.04

ss命令与 command 非常相似,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                
Run Code Online (Sandbox Code Playgroud)

这是输出的第一行。该命令告诉系统中所有打开的套接字。

我的系统上总共有 96 个,其中 56 个具有u_strasNetid和其余的tcp.

这是什么u_str,还请解释更多关于Recv-QSend-Q

Rav*_*ina 7

u_str是一个流套接字,相当于netstat的 SOCK_STREAM。

SOCK_STREAM:这是一个流(连接)套接字。

来自维基百科

在计算机操作系统中,流套接字是一种进程间通信套接字或网络套接字,它提供面向连接的、有序的、唯一的数据流,没有记录边界,具有用于创建和销毁连接以及检测错误的明确定义的机制。

让我们创建一个流套接字:

netcat -lU /tmp/streamsocket
Run Code Online (Sandbox Code Playgroud)

现在运行:

ss -an | grep streamsocket
Run Code Online (Sandbox Code Playgroud)

它将输出:

u_str  LISTEN     0      5      /tmp/streamsocket 123360      * 0     
Run Code Online (Sandbox Code Playgroud)

简单来说,就是socket的类型,可以是“UDP”,也可以是“TCP”。让我们创建一个 UDP 套接字:

netcat -lu 127.0.0.1 8060
Run Code Online (Sandbox Code Playgroud)

现在,ss -l sport = 8060我会告诉你这是一个“UDP”而不是“u_str”。


对于“Recv-Q”和“Send-Q”列,请参阅man 8 netstat

Recv-Q 连接到此套接字的用户程序未复制的字节数。

Send-Q 远程主机未确认的字节计数。