天天看點

TCP和UDP是否可以綁定同一端口進行通信

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