背景
參考文獻:
隨著技術的發展許多裝置具有了多個網路介面,而TCP依然是一個單線路的協議,在TCP的通訊過程中發端和收端都
不能隨意變換地址。我們可以利用多個網路介面的這一特性來改善效能和有效冗餘。例如:你的手機同時連線
WIFI訊號和3G訊號的時候,如果WIFI關掉,使用WIFI進行的TCP連線就會斷開,而不能有效利用3G網路繼續收發資料。
而Multipath TCP可以在一條TCP連結中包含多條路徑,避免上述問題出現。
MPTCP簡介
MPTCP允許在一條TCP鏈路中建立多個子通道。當一條通道按照三次握手的方式建立起來後,可以按照三次握手的
方式建立其他的子通道,這些通道以三次握手建立連線和四次握手解除連線。這些通道都會繫結於MPTCP session,
傳送端的資料可以選擇其中一條通道進行傳輸。
MPTCP的設計遵守以下兩個原則:
1.應用程式的相容性,應用程式只要可以執行在TCP環境下,就可以在沒有任何修改的情況下,執行於MPTCP環境。
2.網路的相容性,MPTCP相容其他協議。
MPTCP在協議棧中的位置如下所示:
建立連線過程
如上圖所示:MPTCP的第一個子通道的建立遵守TCP的三次握手,唯一的區別是每次傳送的
報文段需要新增MP_CAPABLE的的TCP選項和一個安全用途的key。而下圖是建立其他的子通道:
如上圖所示:第二條子通道的建立依然遵守TCP的三次握手,而TCP選項換成了MP_JOIN。
而token是基於key的一個hash值,rand為一個隨機數,而HMAC是基於rand的一個hash值。
資料的傳送和接收
MPTCP可以選擇多條子通道中任意一條來傳送資料。MPTCP如果使用傳統的TCP的方式
來傳送資料,將會出現一部分包在一條子通道,而另一部分包在另外一條子通道。這樣的話,防火牆等
中間裝置將會收到TCP的序號跳躍的包,因此將會發生丟包等異常情況。為了解決這個問題,MPTCP通過
增加DSN(data sequence number)來管理包的傳送,DSN統計總的報文段序號,而每個子通道中的
序號始終是連續。
MPTCP的接收包過程分為兩個階段:第一、每個子通道依據自身序號來重組報文段;第二、MPTCP
的控制模組依據DSN對所有子通道的報文段進行重組。
擁塞控制
MPTCP中擁塞控制的設計需遵守以下兩個原則:
第一:MPTCP和傳統TCP應該擁有相同的吞吐量,而不是MPTCP中每一條子通道和傳統TCP具有相同的吞吐量。
第二:MPTCP在選擇子通道的時候應該選擇擁塞情況更好的子通道。
MPTCP的實現
MPTCP的實現主要分為三部分:
- master subsocket
- Multi-path control bock(mpcb)
- slave subsocket
master subsock是一個標準的sock結構體用於TCP通訊。mpcb提供開啟或關閉子通道、
選擇傳送資料的子通道以及重組報文段的功能。slave subsocket對應用程式並不可見,他們
都是被mpcb管理並用於傳送資料。
應用:
MPTCP的作用除了體現在移動裝置領域,還可以用於資料中心。
比如EC2就會讓兩個終端間冗餘有多條路徑,論文《An overview of Multipath TCP》中對此進行了
實驗,作者租借40臺機器安裝MPTCP的核心然後實驗,其效果如下:
參考文獻:
An overview of Multipath TCP - O. Bonaventure, M. Handley and C. Raiciu. USENIX login; , October 2012.
MultiPath TCP: From Theory to Practice - S. Barré, C. Paasch and O. Bonaventure. IFIP Networking, 2011