如上图所示:第二条子通道的建立依然遵守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