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

的控制模块依据DSN对所有子通道的报文段进行重组。

拥塞控制 

MPTCP中拥塞控制的设计需遵守以下两个原则:

第一:MPTCP和传统TCP应该拥有相同的吞吐量,而不是MPTCP中每一条子通道和传统TCP具有相同的吞吐量。

第二:MPTCP在选择子通道的时候应该选择拥塞情况更好的子通道。

MPTCP的实现

MPTCP的实现主要分为三部分:

  1. master subsocket
  2. Multi-path control bock(mpcb)
  3. slave subsocket

master subsock是一个标准的sock结构体用于TCP通信。mpcb提供开启或关闭子通道、

选择发送数据的子通道以及重组报文段的功能。slave subsocket对应用程序并不可见,他们

都是被mpcb管理并用于发送数据。

应用:

MPTCP的作用除了体现在移动设备领域,还可以用于数据中心。

比如EC2就会让两个终端间冗余有多条路径,论文《An overview of Multipath TCP》中对此进行了

实验,作者租借40台机器安装MPTCP的内核然后实验,其效果如下:

参考文献:

http://queue.acm.org/detail.cfm?id=2591369

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

时间: 2024-10-01 07:03:50

MPTCP 理解的相关文章

MPTCP协议学习

对MPTCP协议理论部分的学习进行了整理,文中数据包结构的图来自于RFC6824.详见http://www.rfcreader.com/#rfc6824 MPTCP协议学习 MPTCP目的:随着技术的发展许多设备具有了多个网络接口,而TCP依然是一个单线路的协议,在TCP的通信过程中发端和收端都不能随意变换地址.我们可以利用多个网络接口的这一特性来改善性能和有效冗余. 例如:手中的 iPhone 同时开启了 4G 和 WiFi 连接(大多数情况也是这样),这个时候我通过 App Store 更新

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

2.2 logistic回归损失函数(非常重要,深入理解)

上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的,希望通过训练集找到参数w和b,来得到自己得输出 对训练集当中的值进行预测,将他写成y^(I)我们希望他会接近于训练集当中的y^(i)的数值 现在来看一下损失函数或者叫做误差函数 他们可以用来衡量算法的运行情况 可以定义损失函数为y^和y的差,或者他们差的平方的一半,结果表明你可能这样做,但是实际当中

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

深度理解div+css布局嵌套盒子

1. 网页布局概述 网页布局的概念是把即将出现在网页中的所有元素进行定位,而CSS网页排版技术有别于传统的网页排版方法,它将页面首先在整体上使用<div>标记进行分块,然后对每个快进行CSS定位以及设置显示效果,最后在每个块中添加相应的内容.利用CSS排版方法更容易地控制页面每个元素的效果,更新也更容易,甚至页面的拓扑结构也可以通过修改相应的CSS属性来重新定位.  2. 盒子模型 盒子模型是CSS控制页面元素的一个重要概念,只有掌握了盒子模型,才能让CSS很好地控制页面上每一个元素,达到我们

深入理解Java:类加载机制及反射

一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能. 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 2.工作机制 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示

八幅漫画理解使用 JSON Web Token 设计单点登录系统

原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统,然后再延伸到单点登录系统. 如果还没有阅读<JSON Web Token – 在Web应用间安全地传递信息>,我强烈建议你花十分钟阅读它,理解JWT的生成过程和原理. 用户认证八步走 所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时

谈谈你对Hibernate的理解

答: 1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象.建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就表现在内存中的对象状态发生了变化. 2.为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大量对象信息.从Java程序的运行功能上来讲,保存对