端口號是16位的非負整數(範圍是0~65535).這些數字是抽象的,在物理上沒有指任何東西。相反每個IP地址有65536個可用的端口號,每個傳輸協議可使用這些端口號(在大多數情況下),它們被用於確定正確的接收數據的具體服務。對於客戶機/服務器應用,一臺服務器首先“綁定”到一個端口號,然後一個或多個客戶機可使用某種特定的傳輸協議與一臺服務器上的端口號建立連接。從這個意義上來說端口號的功能更像電話號碼的折展,差別是它們通常是由某個標準來分配。
標準的端口號由Internet號碼分配機構(IANA)分配。這組數字被劃分為特定範圍,包括熟知端口號(0-1023)、註冊端口號(1024-49151)和動態/私有端口號(49152~65535)在傳統上,服務器需要綁定到(即在上面提供服務)一個熟知端口,它需要管理員或“根”訪問這樣的特殊權限。
熟知端口號用於識別眾多眾所周知的服務,例如安全外殼協議(SSH,端口號22)、FTP(端口號20和21)、Telnet遠程終端協議(端口23)、電子郵件/簡單郵件傳輸協議(SMTP,端口號25)、域名系統(DNS,端口號53)、超文本傳輸協議或Web(HTTP和HTTPS,端口號:80和443)、交互式郵件訪問協議(IMAP和IMAPS,端口號143和993)、簡單網絡管理協議(SNMP,端口161和162)輕量級目錄訪問協議(LDAP,端口號389)以及其他幾種服務。擁有多個端口的協議(例如HTTP和HTTPS)通常使用不同的端口號,這取決於是否將傳輸層安全(TLS)與基礎的應用層協議共同使用。
注意,如果我們測試這些標準服務和其他TCP/IP服務(Telnet、FTP/SMTP)等使用的端口號,會發現它們大多數是奇數。這是有歷史原因的,這些端口號從NCP端口號派生而來(NCP是網絡控制協議,在TCP之前作為ARPANET的傳輸層協議)NCP雖然簡單,但不是全雙工的,因此每個應用需要兩個連接,併為每個應用保留奇偶成對的端口號。當TCP和UDP成為標準的傳輸層協議時,每個應用只需要一個端口號,因此來自NCP的奇數端口號被使用。
註冊端口號提供給有特殊權限的客戶機或服務器,但IANA會維護一個為特定用途而保留的註冊表,開發新應用時通常應避免使用這些端口號,除非你已購買某些IANA分配的端口號。動態/私有端口號基本不受監管。在某些情況下(例如在客戶端),端口號的值無關緊要,這是因為它們只是短期被使用。這些端口號又稱為臨時端口號,它們被認為是臨時的,因為客戶機只需支持一個應用的客戶程序,並不需要被服務器發現以建立一個連接。相反,服務器通常需要不變的名稱和端口號,以便被客戶機所發現。
閱讀更多 思源Edward 的文章