让MPTCP来拯救你的破手机

TCP已经比18岁的我还要老了,快要跟不上这个时代网络设备的发展。现在手持设备都已经标配wifi和3g网络接口,数据中心也早就包含多条冗余线路,充分发挥其中潜在的能力是MPTCP的使命。MPTCP作为TCP近5年来最重要的演进,值得我们keep an eye on it。

为什么需要MPTCP

MPTCP的全称是Multipath TCP,是TCP的演进。顾名思义,它是一种可以跑在多条路径上的TCP。

我们知道20年来没啥大变化的TCP是单通道的,两个主机建立TCP连接之后就不会再额外的建立连接。但是移动设备和数据中心等新事物的出现,让情况变的不太一样了。一个手机不仅有wifi的无线接口,还有3g接口;一个数据中心多台设备之间有多条可达路径。MPTCP的出现就是为了解决新形势下多路网络和单路TCP的不匹配问题

用两个例子来说明MPTCP能达到的效果。

tcp -- mobiledevice
tcp -- mobiledevice

假设Alice有个智能手机,如果只用普通TCP的话,她每次跟Bob视频只能使用3g或者只能使用wifi,这样会导致两个问题:

  • 如果Alice在家用wifi上网,但当她走出家门,wifi信号变弱的时候,不能无缝切到3g,一定会导致视频中断,需要重连。

  • 如果Alice买了无限流量套餐,但是却不能让wifi和3g两个通道一起为Alice在视频的时候提供更清晰的图像和声音的体验。

mptcp -- mobiledevice
mptcp -- mobiledevice

用MPTCP就比较爽了,视频数据既可以走3g通道,也可以走wifi通道,两条腿走路,总是比一条腿来得靠谱和高效。

另外一个例子是数据中心。

mptcp -- datacenter
mptcp -- datacenter

因为TCP连接是随机的,图中红色链路和细黑色链路不幸在一个节点撞上了,在相撞的节点大家平分流量,导致每条链路的传输速率都只能为最大值的一半,效率减半。

如果是MPTCP就不一样了,一旦发现在某个节点相撞了,MPTCP会在同一个链接下立马新起一条路径,也就是粗黑色路径,逐渐将细黑色的流量转移到粗黑色上来,从而保证了红色链路和黑色链路的传输速度能达到最大速率。

在论文An overview of Multipath TCP中针对这两种情况都有研究,简单来说,在网络切换时性能保障和提升带宽方面效果显著。

MPTCP vs application handover
MPTCP vs application handover
MPTCP increase throughtput
MPTCP increase throughtput

事实上MPTCP也是经过实战检验的,苹果在iOS7的时候就为Siri实现了MPTCP,据苹果数据统计,使用了MPTCP的Siri,在95%的情况下要快20%以上,而且网络失败导致Siri不可用的概率降低了5倍之多。在亚马逊的AWS中,MPTCP也带来了非常不错的效果。

MPTCP协议

因为TCP在现有网络结构中几乎无处不在,MPTCP想要流行起来,必须要完美兼容TCP。MPTCP的设计者做了很多努力来保证MPTCP和TCP的兼容性。

兼容性

MPTCP的兼容性考虑主要基于两个方面,一个是应用程序的兼容性,另外一个是现有网络结构的兼容性。我们先来看看MPTCP在协议栈中的位置。

mptcp协议栈
mptcp协议栈

仔细分析上图可以看出MPTCP针对兼容性所给出的解决方案。

  • 应用程序是基于socket开发的,应用程序对于socket之下使用普通TCP还是MPTCP是没有感知的。也就是说应用程序啥都不用改,只要升级了网络底层,就能利用MPTCP带来的诸多好处。

  • MPTCP可以有很多subflow,他们都是普通的TCP连接。对于网络传输链路中的诸多中间件,比如路由器、防火墙、NAT等,他们需要处理的依然只是TCP连接,从而保证了对现有网络结构的兼容性。这一点非常重要,因为如果需要升级中间件才能支持MPTCP的话,可以说协议在设计之初就已经失败了。

MPTCP Options

因为MPTCP协议需要兼容TCP协议,因此MPTCP的协议格式是和TCP协议一样的,MPTCP主要在TCP的Options字段作了扩展。

MPTCP现在已经是IETF标准了,其详细细节可见RFC 6824

TCP协议的格式如下:

TCP协议格式
TCP协议格式

MPTCP在Options字段下作了一些扩展,具体扩展了哪些Options字段呢?

mptcp options
mptcp options

通过这些字段,MPTCP协议解决了数据包在多条网络路径上传输的诸多问题,他们包括但不限于:

  • 同一连接下网络路径加入和删除

  • 多网络路径数据传输序列号不连续的问题

  • 多网络路径数据传输的拥塞控制策略

这里协议的具体细节我们不详细论述,里面的点非常非常多,毕竟MPTCP也是花了将近5年的时间才渐渐成型的,有兴趣的可以查看参考文献。

这也从侧面说明了,一个牛逼的协议在设计之初考虑可扩展性是多么的重要!

iOS 11的MPTCP实现

苹果在iOS 11中的MPTCP总共实现了两个subflow,每个网络接口都是一个单独的subflow。如下图所示,非常直观。

mptcp在iOS11中的实现
mptcp在iOS11中的实现

如何使用MPTCP

服务端支持

MPTCP已经在linux内核中实现了,写本文的时候最新的MPTCP的版本为v0.92,有兴趣的请参考MultiPath TCP - Linux Kernel implementation。只要部署了带MPTCP的linux版本,即可在服务端支持MPTCP。

iOS客户端

iOS 11新增了NSURLSessionMultipathServiceType枚举,定义了是否使用multipath tcp,以及创建subflow和在不同subflow之间切换的策略。他们分别是:

  • NSURLSessionMultipathServiceTypeNone
  • 不使用multipath tcp。
  • NSURLSessionMultipathServiceTypeHandover
  • 只有当主链路不能用的时候,才会使用第二条链路,这种模式可靠性高。
  • NSURLSessionMultipathServiceTypeInteractive
  • 当主链路不够用的时候,比如丢包、延时很长等情况,就会启用第二条链路,这种模式延时低。
  • NSURLSessionMultipathServiceTypeAggregate
  • 为了更大的带宽,多条链路可以一起使用,当前仅限开发测试使用

上面已经提到MPTCP为了保证兼容性付出了很大的努力,客户端在使用时要做的事情非常少,只需要配个参数就可以了。

For The Better Future

我们手握着牛逼的设备,却在很多场景下没能发挥出他们真正的实力,为了更好的体验,真心希望MPTCP能早点普及开来。

参考文献

您还可以通过搜索微信公众号 rookie2geek,关注 疯魔程序员 ,阅读更多更有料的技术文章。

微信一键关注
微信一键关注
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容