Udp
為什麼 ss(8) 對監聽 UDP 埠的理解與 netstat(8) 不同?
如果我執行
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