查看发送队列与接收队列

查看发送队列与接收队列

Content #

查询套接字信息:

# -l 表示只显示监听套接字
# -t 表示只显示 TCP 套接字
# -n 表示显示数字地址和端口(而不是名字)
# -p 表示显示进程信息
$ ss -ltnp | head -n 3
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
LISTEN   0         128           127.0.0.53:53               0.0.0.0:*        users:(("systemd-resolve",pid=840,fd=13))
LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1459,fd=3))

其中,接收队列(Recv-Q)和发送队列(Send-Q)它们通常应该是 0。当你发现它们不是 0 时,说明有网络包的堆积发生。当然还要注意,在不同套接字状态下,它们的含义不同。

当套接字处于连接状态(Established)时,

  1. Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)。
  2. 而 Send-Q 表示还没有被远端主机确认的字节数(即发送队列长度)。

当套接字处于监听状态(Listening)时,

  1. Recv-Q 表示全连接队列的长度。
  2. 而 Send-Q 表示全连接队列的最大长度。

From #

34 | 关于 Linux 网络,你必须知道这些(下)

全连接队列与半连接队列