通訊埠

計算機主機操作系統中的通信端點

電腦網絡中,通訊埠(英語:port),又稱為連接埠協定埠(protocol port),是一種經由軟件建立的服務,在電腦作業系統中扮演通訊的端點(endpoint)。每個通訊埠都會與主機的IP地址及通訊協定關聯。通訊埠以16位元數字來表示,這被稱為通訊埠編號(port number),簡稱通訊埠號

「port」的各地常用譯名
中國大陸端口
臺灣通訊埠、連接埠、協定埠

位於傳輸層的通訊協定通常需要指定埠號,例如在TCP/IP協定族之下的TCPUDP協定。在應用層中,使用主從式架構的通訊協定,在每個通訊埠上提供多路複用服務(multiplexing service)。經由公認通訊埠號(well-known port numbers),通常可以辨認出這個連線使用的通訊協定,其中具代表性的是最基礎的1024個公認通訊埠號(well-known port numbers),例如Telnet協定預設使用23埠來連線,SSH協定預設使用22埠,HTTP協定預設使用80埠,HTTPS協定預設使用443埠。

技術細節

編輯

傳輸層協定,如傳輸控制協定(TCP)與用戶資料包協定(UDP),在封包表頭中,定義了來源埠號與目的埠號。一個通訊埠號使用16位元無符號整數(unsigned integer)來表示,其範圍介於0與65535之間。在TCP協定中,埠號0是被保留的,不可使用。1--1023 系統保留,只能由root用戶使用。1024--4999 由用戶端程式自由分配。5000--65535 由伺服器端程式自由分配。在UDP協定中,來源埠號可選擇是否填上,如果設為0,則代表無來源埠號。

作業系統中,一個行程可以透過網絡插座將它的輸入與輸出與一個特定的傳輸協定、一個通訊埠、一個IP地址關聯起來。這個關聯動作,稱為綁紮(binding),在這之後,就可以通過網絡送出與接收資料。

在作業系統上運行的網絡軟件,可以透過作業系統,利用各個不同的通訊埠,將資料傳送到網絡上;作業系統也可以根據資料封包的IP地址以及埠號,將這些資料封包轉送到符合的行程去。

雖然使用同樣傳輸協定,但是特定的IP地址以及通訊埠的組合,只會被綁紮到單一的特定行程上。當使用同樣協定的多個程式,嘗試着綁紮在同一個IP地址下的相同通訊埠,就會產生一個常見的應用程式錯誤,這個錯誤有時候被稱為通訊埠衝突(port conflicts)。

儲存檔案

編輯

在Linux的 /etc/services檔案,Windows的 C:\Windows\system32\drivers\etc\services檔案,記錄了網絡服務名、通訊埠號、協定、別名。

C語言

編輯

應用程式可以不直接使用通訊埠號,透過函數getservbyname("server","tcp")取得通訊埠號。如果服務想更改通訊埠號,只要更改/etc/services中的通訊埠號,但應用程式不需任何更改。函數getservbyport(htons(50),“tcp”)作用是取得對應埠和規約上的服務名。

用途

編輯

通訊埠號有兩種用途:

  • 標識伺服器上提供特定網絡服務的行程。客戶機可以按照伺服器IP與通訊埠號與相應的伺服器行程建立網絡連接,獲得相應的網絡服務。例如,通常使用80通訊埠號提供http服務,使用23通訊埠號telnet服務。伺服器的這種功能叫做listening。客戶機通常使用動態指定的通訊埠號與伺服器建立連接。
  • 由本機地址、本機通訊埠號、目標機地址、目標機通訊埠號、通訊協定組成的五元組,用於唯一確定正在使用的網絡連結。因此,對於不同的協定、不同的目標機地址,本機的不同地址(如果本機使用多個網卡)等多種情形,同一個通訊埠號可以復用。因此對於1對1通訊,且本機與目標機之間只能建立一個通訊連接,則不需要使用通訊埠號。

網絡防火牆或者閘道器還可提供通訊埠轉發(port forwarding),即NAT

參見

編輯