详解ss命令

-- TOC --

ss命令是一个比netstat命令新,同样是用来查看系统socket信息的命令。

$ ss -ta

-t,tcp

-a,all,包括了LISTEN,TIME-WAIT,不用此参数,仅显示ESTAB连接

-u,udp

-w,raw socket

-0,package socket

$ sudo ss -t4nlp

-4,IPv4

-n,不要做DNS查询,直接显示ip地址和port number

-l,listen

-p,process,此时带上sudo,进程信息才能完整显示。

ss命令和netstat的区别

$ netstat -tnl4
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:54321         0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:18962           0.0.0.0:*               LISTEN
$ ss -tnl4
State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process
LISTEN  0        4096             0.0.0.0:5355           0.0.0.0:*
LISTEN  0        128            127.0.0.1:54321          0.0.0.0:*
LISTEN  0        128              0.0.0.0:18962          0.0.0.0:*
LISTEN  0        4096       127.0.0.53%lo:53             0.0.0.0:*

netstat命令显示出来的LISTEN状态的socket的Send-Q全是0,而ss命令显示出来的数字看起来还不错。(难道要开始怀疑netstat命令的可靠性?!)

对于LISTEN状态的socket

  1. Send-Q表示listen接口传入的backlog值,如果此backlog值超过了somaxconn,就是somaxconn值。这个值对应的是SYN和ACCEPT队列的长度。
  2. Recv-Q表示ACCEPT队列中,已经完成三次握手,但是还没有被accept的socket的数量。accept每成功返回一次,Recv-Q就减少1。

listen接口调用时,如果不写参数,默认的backlog是128。也可以用ss命令来发现这个默认值。默认的somaxconn为4096,如果传入的backlog值超过了somaxconn,没有任何错误提示,直接使用somaxconn。

本文链接:https://cs.pynote.net/net/tcp/202205173/

-- EOF --

-- MORE --