TCP和UDP可以同時監聽相同的端口嗎
阿新 • • 發佈:2019-03-13
nec 連接 pro water netstat 就是 prot 協議名稱 使用 協議字段(報頭檢驗和前面那個),其值為6,則為TCP;
其值為17,則為UDP。
同一臺機器的同一個端口只可以被一個進程使用,一般用於tcp,或者udp。那一個進程使用同一個端口同時監聽tcp、udp請求,是否可以呢?
答案:可以。
端口可以形象地比喻成操作系統上的編號唯一的文件,應用程序和網絡協議可以對其進行i/o操作。
但是既然唯一又為何tcp udp可以用相同的端口號呢?這樣的話,程序在連接到端口時,怎麽知道此時從該端口進來的數據是tcp的還是udp的呢?
是不是可以這樣理解?端口的唯一性的標識不是端口號,而是端口號和協議名稱的組合,應用程序和協議尋址時就是靠的這個組合?
使用netstat -an自己看看就知道了,IP數據包首部有個叫做協議的字段,指出了上層協議是TCP還是UDP還是其他P。
其值為17,則為UDP。
[root@web ~]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:46997 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 64 10.0.0.7:22 10.0.0.253:61752 ESTABLISHED tcp 0 0 :::3306 :::* LISTEN tcp 0 0 :::111 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 :::40566 :::* LISTEN udp 0 0 127.0.0.1:967 0.0.0.0:* udp 0 0 0.0.0.0:34398 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* udp 0 0 0.0.0.0:944 0.0.0.0:* udp 0 0 :::111 :::* udp 0 0 :::944 :::* udp 0 0 :::19764 :::*
操作系統有能力根據接受的報文的IP字段裏面的協議部分判斷這個報文是什麽報文,就是說,系統讀數據的時候還沒有讀到上層報文(TCP/UDP)的時候已經知道上層是什麽報文了,直接交給相關的內核進程或協議棧處理就可以了。而在同一個協議內部端口號唯一。
TCP報文結構圖示:
UDP報文結構圖示:
TCP和UDP可以同時監聽相同的端口嗎