1. 程式人生 > >TCP和UDP可以同時監聽相同的端口嗎

TCP和UDP可以同時監聽相同的端口嗎

nec 連接 pro water netstat 就是 prot 協議名稱 使用

同一臺機器的同一個端口只可以被一個進程使用,一般用於tcp,或者udp。那一個進程使用同一個端口同時監聽tcp、udp請求,是否可以呢?

答案:可以。

端口可以形象地比喻成操作系統上的編號唯一的文件,應用程序和網絡協議可以對其進行i/o操作。
但是既然唯一又為何tcp udp可以用相同的端口號呢?這樣的話,程序在連接到端口時,怎麽知道此時從該端口進來的數據是tcp的還是udp的呢?

是不是可以這樣理解?端口的唯一性的標識不是端口號,而是端口號和協議名稱的組合,應用程序和協議尋址時就是靠的這個組合?

使用netstat -an自己看看就知道了,IP數據包首部有個叫做協議的字段,指出了上層協議是TCP還是UDP還是其他P。

協議字段(報頭檢驗和前面那個),其值為6,則為TCP;
其值為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可以同時監聽相同的端口嗎