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

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)可以無窮變化,這樣就可以建立很多個客戶端的請求了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章