傳輸層

多工與解多工(multiplexing / demultiplexing)

想像整棟辦公大樓只有一扇大門。每個部門寄出的信都從這一扇門出去,所有寄進來的信也都到這裡。要讓這行得通,寄出的信會附上含部門編號的回信地址,寄進來的信則依上面寫的部門編號分類。多工(multiplexing)是收集端——把許多應用程式行程的資料匯集起來,透過一條網路連線送出去。解多工(demultiplexing)是分類端——把每個到達的區段交給正確的行程。

傳輸層靠每個區段中的四元組,加上其下的 IP 位址來做這件事。對 UDP 來說,解多工只用目的 IP 位址與目的連接埠:所有具相同(目的 IP、目的埠)的區段都送往同一個通訊端,不管是誰寄的。對 TCP 來說,通訊端是用完整四元組來辨識的——來源 IP、來源埠、目的 IP、目的埠——所以一台跑在 TCP port 443 的繁忙網頁伺服器能把上千條同時的用戶端連線分開,因為每個用戶端的(IP、埠)配對都不同。送出端的多工,只不過是在把區段往下交之前,在標頭裡寫上正確的來源埠與目的埠。

為什麼重要:這是傳輸層最基本的服務,也是讓單一主機能同時跑許多網路程式的關鍵。沒有它,你的機器一次只能進行一段對話。它也解釋了許多日常現象:為什麼你的筆電能在同一條 Wi-Fi 連線上同時下載檔案、視訊通話、載入網頁;以及為什麼一台 NAT 盒(會改寫連接埠)能讓整個家庭共用一個公開 IP 位址。

一台位於 203.0.113.5:443 的伺服器收到兩個到達的 TCP 區段,目的埠都是 443。一個來源是(198.51.100.7, 51000),另一個是(198.51.100.8, 49152)。完整四元組不同,所以 TCP 把它們解多工到兩個分開的通訊端——兩個用戶端,乾淨地分開。

TCP 依完整四元組分類;UDP 只依目的 IP 加埠分類。

常見混淆:UDP 與 TCP 的解多工方式不同。兩個 UDP 寄件者寫到相同的(目的 IP、目的埠)會落在同一個通訊端;兩個來源埠不同的 TCP 用戶端則落在不同的通訊端。

又称
transport multiplexingmux/demux多工解多工