發表文章

目前顯示的是 十一月 25, 2015的文章

MPTCP

圖片
From: http://www.cnblogs.com/lxgeek/category/671444.html

MPTCP 背景     隨著技術的發展許多設備具有了多個網絡接口,而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 的控制模塊依據…