多路徑 TCP(Multipath TCP)
/ MULL-tee-path /
你的手機常常同時有兩條路能連上網際網路——Wi-Fi 和行動網路。普通的 TCP 每條連線只能用其中一條:它挑一條路、就被綁死在那條上,所以如果你下載到一半走出 Wi-Fi 範圍,連線就斷了、得重頭來過。多路徑 TCP 問了一個簡單的問題:何不同時用上兩條路、在它們之間平順切換,而樓上的應用程式甚至完全察覺不到?這就像有兩台貨車走兩條路去同一個地址,所以就算一條路塞住,你還是收得到貨。
多路徑 TCP 是普通 TCP 的擴充,它讓單一邏輯連線同時把資料分散到好幾條網路路徑上,這些路徑稱為子流(subflow)。對應用程式來說,它看起來、用起來就和一個普通的 TCP 通訊端一模一樣——一樣是可靠、依序的位元組串流——但在底下,作業系統會為每條可用路徑開一條 TCP 子流(例如一條走 Wi-Fi、一條走行動網路),為位元組貼標籤好讓對端能依序重組,並在它們之間平衡負載。如果某條子流變慢或斷掉,其他子流就接手承載資料;如果出現新路徑,新的子流可以加入。各子流的壅塞控制是耦合在一起的,好讓合起來的這條連線與共用相同連結的普通單路徑 TCP 連線公平相處。
為什麼重要:多路徑 TCP 讓連線更穩健(在 Wi-Fi 與行動網路間交遞時不掉線),也可能更快(把兩條連結的頻寬加總起來)。蘋果把它用在 Siri 之類的服務上,這樣當你手機換網路時請求不會丟失。誠實的提醒:它只有在真正存在分離的路徑時才有幫助,兩條路徑的延遲可能差很多而使重組變複雜,而會竄改不熟悉 TCP 選項的老舊中間設備可能讓它失效——這也是它的部署一直是漸進、而非普及的原因之一。
你在 Wi-Fi 上開始傳一個大檔,然後走出大門。用普通 TCP,連線會斷、下載會失敗。用多路徑 TCP,當 Wi-Fi 子流逐漸消失時,一條行動網路子流會悄悄接手——位元組串流從不中斷,應用程式也看不到這次切換。
一條連線、兩條路徑、一次無縫交遞。
多路徑 TCP 不會神奇地讓你的速度加倍:合起來的傳輸量受限於兩條路徑究竟有多獨立,而它耦合的壅塞控制刻意有所收斂,好讓它在共用瓶頸上絕不搶走超過對單路徑 TCP 應有的公平份額。