为什么 ss(8) 对侦听 UDP 端口的理解与 netstat(8) 不同?

为什么 ss(8) 对侦听 UDP 端口的理解与 netstat(8) 不同?

如果我执行命令ss -lu以查看所有正在侦听的 UDP 套接字,则不会显示任何套接字。如果我执行ss -au,其中列出了所有(侦听和非侦听)UDP 套接字,则“侦听”套接字将显示为 UNCONN(见下文)。

这背后的逻辑是什么?例如运行ftpd监听连接,应该有状态 LISTEN 而不是 UNCONN,不是吗?

T60:~ # lsof -n | sed -n '1p;/UDP/p'
  COMMAND    PID TID  USER    FD  TYPE  DEVICE SIZE/OFF  NODE NAME
avahi-dae    963     avahi   11u  IPv4    9088      0t0   UDP *:mdns
avahi-dae    963     avahi   12u  IPv4    9089      0t0   UDP *:44639
    cupsd   1238      root   10u  IPv4    8160      0t0   UDP *:ipp
   dhcpcd   2072      root    7u  IPv4  532052      0t0   UDP *:bootpc
dhclient6  13131      root    5u  IPv6   38031      0t0   UDP *:dhcpv6-client
dhclient6  13131      root   20u  IPv4   37954      0t0   UDP *:20152
dhclient6  13131      root   21u  IPv6   37955      0t0   UDP *:36745
   atftpd  20639      tftp    0u  IPv4  344977      0t0   UDP *:tftp

网络统计

T60:~ # netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 *:bootpc                *:*                                 
udp        0      0 *:tftp                  *:*                                 
udp        0      0 *:44639                 *:*                                 
udp        0      0 *:ipp                   *:*                                 
udp        0      0 *:20152                 *:*                                 
udp        0      0 *:mdns                  *:*                                 
udp        0      0 *:36745                 *:*                                 
udp        0      0 *:dhcpv6-client         *:*                                 

SS

T60:~ # ss -lu
Recv-Q Send-Q   Local Address:Port  Peer Address:Port

T60:~ # ss -ua
State       Recv-Q Send-Q   Local Address:Port            Peer Address:Port
UNCONN      0      0                    *:bootpc                     *:*
UNCONN      0      0                    *:tftp                       *:*
UNCONN      0      0                    *:44639                      *:*
UNCONN      0      0                    *:ipp                        *:*
UNCONN      0      0                    *:20152                      *:*
UNCONN      0      0                    *:mdns                       *:*
UNCONN      0      0                   :::36745                     :::*
UNCONN      0      0                   :::dhcpv6-client             :::*


T60:~ # ss -v
ss utility, iproute2-ss110629

答案1

UDP 是一种无连接协议。 SS 可能不会在 LISTEN 状态下显示,仅在 UCONN 或 ESTAB 下显示。

如果我这样做,

$ nc -u -l 2333

然后 ss 将显示(在第二个 shell 中):

$ ss -au|grep 2333
UNCONN     0      0                       *:2333                     *:*       

如果我然后连接到它(第三个外壳)

$ nc -u localhost 2333

然后SS显示:

$ ss -au|grep 2333
ESTAB      0      0               127.0.0.1:2333             127.0.0.1:58434   
ESTAB      0      0               127.0.0.1:58434            127.0.0.1:2333    

相关内容