通訊端與網路程式設計

臨時埠(ephemeral port)

/ eh-FEM-er-ul /

當你打給一家商店時,你撥的是它固定、公開的號碼——但你用來打的電話可以是任何一支;它的號碼只是你恰好在用的那條線。網路連接埠的運作方式一樣。伺服器在一個固定、知名的埠上傾聽,用戶端事先就知道(網頁在 TCP port 443、DNS 在 53)。然而用戶端自己不需要一個有名的號碼——它只需要某個沒人用的埠,好讓回應找得到路回來。那個暫時、用過即丟的埠,就是臨時埠。

當你的程式向外開啟一條連線,而沒有先 bind 到特定埠時,作業系統會自動從一段保留範圍中挑一個空閒的埠,當作來源埠。網際網路號碼指派局(IANA)建議這段範圍是 49152 到 65535,不過許多系統用更寬的範圍(Linux 常預設大約 32768 到 60999)。這個埠只在該連線存活期間被占用,之後就歸還到池子裡,準備重新使用。因為四元組(來源 IP、來源埠、目的 IP、目的埠)必須唯一,臨時來源埠正是讓一台用戶端機器能對同一伺服器開許多同時連線的關鍵。

為什麼重要:臨時埠是日常多工背後安靜運轉的機械——對同一網站開十個瀏覽器分頁能成功,是因為每條連線拿到不同的臨時來源埠。它們也解釋了一個現實限制:因為每對「來源 IP 與目的端」大約只有 16000 到 28000 個臨時埠,單一用戶端猛打一台伺服器可能把它們用光,這叫來源埠耗盡(source port exhaustion),常見於繁忙的壓力測試工具與代理伺服器。連線關閉後殘留的 TIME-WAIT 狀態會占住埠,讓情況更糟。

你的筆電載入一個頁面:連線是 192.168.1.20:54231 連到 93.184.216.34:443。你沒有選 54231——作業系統從臨時範圍裡抓來的。分頁關閉後,54231 歸還到池子裡,給下一條向外連線用。

伺服器用固定埠;用戶端借用暫時的埠。

常見混淆:臨時埠通常是用戶端的來源埠,由系統自動挑選。伺服器則相反——它們綁定一個固定、已知的埠,好讓用戶端找得到。任一方都可以做任一件事,但這是常見的模式。

又称
dynamic porthigh port臨時連接埠暫時埠