Udp

為什麼 ss(8) 對監聽 UDP 埠的理解與 netstat(8) 不同?

  • April 17, 2021

如果我執行ss -lu以查看所有正在偵聽的 UDP 套接字,則不會顯示任何套接字。如果我執行ss -au列出所有(偵聽和非偵聽)UDP 套接字,則“偵聽”套接字顯示為 UNCONN(見下文)。

這背後的邏輯是什麼?例如執行atftpd監聽連接,應該有狀態 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

UDP 是一種無連接協議。SS 可能不會在 LISTEN 狀態下顯示一個,只會在 UCONN 或 ESTAB 中顯示。

如果我這樣做,

$ nc -u -l 2333

然後 ss 將顯示(在第二個外殼中):

$ 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    

引用自:https://unix.stackexchange.com/questions/72748