TCP、UDP綁定同一端口通信的解釋


昨日突然討論起TCP與UDP是否可以在同一端口進行綁定,通信。

在印象當中我記得是可以的,今日google了相關資料,

確定以及肯定的:

TCP、UDP可以綁定同一端口來進行通信:

 

      網絡中可以被命名和尋址的通信端口,是操作系統可分配的一種資源。 

      按照OSI七層協議的描述,傳輸層與網絡層在功能上的最大區別是傳輸層提供進程通信能力。從這個意義上講,網絡通信的最終地址就不僅僅是主機地址了,還包括可以描述進程的某種標識符。為此,TCP/IP協議提出了協議端口(protocol   port,簡稱端口)的概念,用於標識通信的進程。 

      端口是一種抽象的軟件結構(包括一些數據結構和I/O緩沖區)。應用程序(即進程)通過系統調用與某端口建立連接(binding)后,傳輸層傳給該端口的數據都被相應進程所接收,相應進程發給傳輸層的數據都通過該端口輸出。在TCP/IP協議的實現中,端口操作類似於一般的I/O操作,進程獲取一個端口,相當於獲取本地唯一的I/O文件,可以用一般的讀寫原語訪問之。 

      類似於文件描述符,每個端口都擁有一個叫端口號(port   number)的整數型標識符,用於區別不同端口。由於TCP/IP傳輸層的兩個協議TCP和UDP是完全獨立的兩個軟件模塊,因此各自的端口號也相互獨立,如TCP有一個255號端口,UDP也可以有一個255號端口,二者並不沖突。 

      端口號的分配是一個重要問題。有兩種基本分配方式:第一種叫全局分配,這是一種集中控制方式,由一個公認的中央機構根據用戶需要進行統一分配,並將結果公布於眾。第二種是本地分配,又稱動態連接,即進程需要訪問傳輸層服務時,向本地操作系統提出申請,操作系統返回一個本地唯一的端口號,進程再通過合適的系統調用將自己與該端口號聯系起來(綁扎)。TCP/IP端口號的分配中綜合了上述兩種方式。TCP/IP將端口號分為兩部分,少量的作為保留端口,以全局方式分配給服務進程。因此,每一個標准服務器都擁有一個全局公認的端口(即周知口,well-known   port),即使在不同機器上,其端口號也相同。剩余的為自由端口,以本地方式進行分配。TCP和UDP均規定,小於256的端口號才能作保留端口。

 

 

· 再討論一下,一個服務器監控一個端口,比如80端口,它為什么可以建立上成千上萬的連接?

 

 

   首先, 一個TCP連接需要由四元組來形成,即(src_ip,src_port,dst_ip,dst_port)。當一個連接請求過來的時候,服務端調用accept函數,新生成一個socket,這個socket所占用的本地端口依然是80端口。由四元組就很容易分析到了,同一個(src_ip,src_port),它所對應的(dst_ip,dst_port)可以無窮變化,這樣就可以建立很多個客戶端的請求了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM