linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

多路径TCP(MPTCP)

时间:2019-10-06  来源:未知  作者:admin666

前言:tcp连接时,一直以来都是只能绑定一个ip地址,但是随着多网卡主机越来越多,从一个主机到另一个主机往往都会有多条链路可以到达,这种情况下,如何充分利用这多条链路进行并行的传输或者作为链路备份,就变得十分有意义,本篇就简单介绍其中一种多路径传输的方法—多路径TCP。

一. 多路径传输的背景

我们来看另一个常见的场景:用户的手机一般都有4G和WIFI两种网络接入方式,当用户进行下载数据时,如果接入了WIFI了就会优先使用WIFI,但是如果中间WIFI链路断了,那么只能提示下载失败,并不会切换到4G中接着下载。同时,对于已经存在的多条链路,并没有充分使用以提高带宽。

以上就是其中的一个重要的应用场景,解下来我们重点说明一下其中的一种实现方法—MPTCP。

二. 实施多路径传输的关键点

  1. 多路径流量的调度和拥塞控制。

    多路径的流量调度是指对于存在的多个子路径,如何分配流量到各个子路径,以达到尽可能提高带宽的目的。但另一方面,又需要对各个子路径进行统一的拥塞控制,当一条链路上的流量发送拥塞时,把流量导到另一条链路上去。

  2. 路径发送失败后的重传。

    既然依然是可靠通信,那么就会涉及到失败后的重传问题。重传的时候自然就要找到对应的序列号,然而,在多路径传输时,本来序列号连续的包可能被调度到不同的链路中发送,导致出现一个问题:在每个链路中发送的包的序列号不是连续的,在网络传输中可能会被网络安全设备拦截下来。所以需要解决重传时的序列号的问题。

  3. 建立和管理子路径。

    对于传输时的多路径,需要对路径进行管理,以便能够知晓链路情况,在链路被移除的时候,通知对端不再使用这条链路。在链路添加的时候,使能对应的链路。

三. 多路径TCP

在第一节中我们提到了多路径传输,从实现的层次来说,可以分为网络层实现,传输层实现,应用层实现。首先说这个应用层实现,这个实施起来代价最高,因为需要改动现有的应用程序。而在网络层实现在面对流量控制等问题时时又困难重重,只有在传输层可以借助天然的TCP的可靠性机制,进行改造。

3.1 多路径TCP的体系结构

多路径tcp的功能和过程如下:

  1. 初始化一个连接
  2. 使能一个新的子流
  3. 数据序列号的映射
  4. 可靠性和重传
  5. 拥塞控制
  6. 链路管理
  7. 快速关闭
  8. 回落功能

3.1.1 初始化一个连接

初始化时,是通过SYN,SYN/ACK,ACK报文交互后完成的,在这些报文的tcp选项中,带有这一端使能的标志---MP_CAPABLE。同时也会传递一个生成的64位的key值来标示这条连接,在后面有新的子流添加到这条连接时,就会用来进行鉴权(确切说是以这个key生成的token)。

3.1.2 使能一条新的子流

在初始化一个连接以后,在有新的子流需要添加时,是在SYN,ACK报文的tcp选项中的MP_JOIN子段标示的,带有要加入哪个连接。

3.1.3 链路管理

当有新的地址需要添加到连接或者要删除连接中的一条子流时,通过地址通告的方式,传递到对端。

3.1.4 可靠性与重传

在说到重传的时候,就得先说到序列号的问题,为了保持每个子流中的序列号是连续的,给每个子流都分配了独立的序列号,同时,保持一个全局的连接级别的序列号。当某一条流中数据发送失败后,根据其映射后的序列号找到连接级别的序列号,就找到了发送失败的包,进而,可以把这个包重新调度到别的子流中再进行发送。

3.1.5 拥塞控制

拥塞控制不能单纯的着眼于某一条流的拥塞控制,必须全局考虑,因为如果每一条都单独考虑自己的拥塞情况,在瓶颈时,就会导致对于普通的tcp而言,流量分配不公平。对于拥塞算法,具体的可以参考rfc 6356。这个文档提供了一种对于多流的拥塞控制的方法。

3.1.6 快速关闭

因为一条tcp通过发送RST报文,只能关闭一条子流,所以,为了能够快速的关闭所有的连接,使用快速关闭控制报文可以达到这个目的。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

上一篇:没有了
友情链接
  • Mozilla发布Firefox 67.0.4,修复沙箱逃逸漏洞
  • 蚂蚁金服正式成为CNCF云原生计算基金会黄金会员
  • Firefox 68将采用Microsoft BITS安装更新
  • OpenSSH增加对存储在RAM中的私钥的保护
  • 谷歌想实现自己的curl,为什么?
  • Raspberry Pi 4发布:更快的CPU、更大的内存
  • Firefox的UA将移除CPU架构信息
  • Ubuntu放弃支持32位应用程序实属乌龙,Steam会否重回Ubuntu怀抱
  • Qt 5.13稳定版发布:引入glTF 2.0、改进Wayland以及支持Lottie动
  • 红帽企业Linux 7现已内置Redis 5最新版
  • Slack进入微软内部禁用服务清单,GitHub也在其列?
  • 安全的全新编程语言V发布首个可用版本
  • Windows Terminal已上架,快尝鲜
  • 阿里巴巴微服务开源生态报告No.1
  • 面世两年,Google地球将支持所有基于Chromium的浏览器
  • 推进企业容器化持续创新,Rancher ECIC千人盛典完美收官
  • CentOS 8.0最新构建状态公布,或于数周后发布
  • Debian移植RISC
  • 微软拆分操作系统的计划初现雏形
  • Oracle发布基于VS Code的开发者工具,轻松使用Oracle数据库
  • Ubuntu 19.10停止支持32位的x86架构
  • 微软为Windows Terminal推出全新logo
  • 联想ThinkPad P系列笔记本预装Ubuntu系统
  • 微软发布适用于Win7/8的Microsoft Edge预览版
  • 启智平台发布联邦学习开源数据协作项目OpenI纵横
  • 经过六个多月的延迟,微软终于推出Hyper
  • ZFS On Linux 0.8.1 发布,Python可移植性工作
  • DragonFly BSD 5.6.0 发布,HAMMER2状态良好
  • Linux Kernel 5.2
  • CentOS 8.0 看起来还需要几周的时间
  • 百度网盘Linux版正式发布
  • PCIe 6.0宣布:带宽翻倍 狂飙至256GB/s
  • PHP 7.4 Alpha 发布,FFI扩展,预加载Opcache以获得更好的性能
  • Canonical将在未来的Ubuntu版本中放弃对32位架构的支持
  • Scala 2.13 发布,改进的编译器性能
  • 微软的GitHub收购了Pull Panda,并且使所有订阅完全免费
  • Windows Subsystem for Linux 2 (WSL 2)现在适用于Windows 10用
  • Debian 10 “Buster”的RISC
  • MariaDB宣布发布MariaDB Enterprise Server 10.4
  • DXVK 1.2.2 发布,带来微小的CPU开销优化
  • DragonFlyBSD 5.6 RC1 发布,VM优化,默认为HAMMER2
  • PrimeNG 8.0.0 发布,支持Angular 8,FocusTrap等
  • GIMP 2.10.12 发布,一些有用的改进
  • 清华大学Anaconda 镜像服务即将恢复
  • Debian GNU/Linux 10 “Buster” 操作系统将于2019年7月6日发布
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载