MPTCP详解-多路传输TCP

  • A+
所属分类:资讯

当今的网络是多路径的:移动设备具有多个无线接口,数据中心在服务器之间具有许多冗余路径,多宿主已成为大型服务器场的标准。

但是,当前的广泛使用的可靠传输协议TCP在本质上是一种单路径协议:建立TCP连接时,该连接将绑定到两个通信主机的IP地址。 如果这些地址任何一个发生改变,无论出于何种原因,该连接都会失败。 实际上,TCP连接甚至无法在网络中的多个路径上实现负载平衡,因为这会导致数据包重新排序,并且TCP在拥塞时会误解此重新排序,并减慢速度。

当今的多路径网络与TCP的单路径设计之间的这种不匹配带来了明显的问题。 例如

  • 如果智能手机的WiFi信号丢失,则与之关联的TCP连接就会停止; 无法将它们迁移到其他工作接口,例如3G、4G、5G,每次切换都需要重新建立TCP连接。
  • 现代数据中心是另一个示例:两个端点之间有许多路径可用,多路径路由为特定的TCP连接随机选择一个。 这可能会导致在将多个流置于同一链路上的情况下发生冲突,从而使吞吐量受到损害,以致在某些情况下平均吞吐量减半。

多路径TCP(MPTCP)是对TCP的主要修改,它允许单个传输连接同时使用多个路径。 多路径TCP规避了上述问题以及影响TCP的其他一些问题。 将TCP更改为使用多个路径并不是一个新主意。 它最初是由克里斯蒂安·惠特玛(Christian Huitema)于15年前在互联网工程任务组(IETF)中提出的,此后又出现了六到六次类似的提议。 多路径TCP借鉴了先前工作中积累的经验,并进一步解决了与常规TCP竞争引起的公平性问题以及当今Internet中间盒带来的部署问题。 IETF最近已经对多路径TCP协议进行了标准化,并且Linux内核中的一种实现现已可用。

多路径TCP允许为单个MPTCP会话设置多个子流。 MPTCP会话从初始子流开始,该子流类似于如上所述的常规TCP连接。 设置第一个MPTCP子流后,可以建立其他子流。 每个其他子流也看起来类似于常规的TCP连接,具有SYN握手和FIN拆除功能,但不是单独的连接,而是将子流绑定到现有的MPTCP会话中。 然后,可以通过任何具有接受能力的活动子流来发送用于连接的数据。

目的

IPv6 到来的时候,主机的多地址(Multihome)将会变得越来越普及。即使是广泛使用的 IPv4,Multihome host 也越来越多了。从数据中心 Fat-tree 网络架构下的服务器到具有 4G/Wifi/3G/Bluetooth 多连接的智能手机,都是多宿主机。但传统的 TCP 并不能同时利用这些连接资源,因此要么使用 2 层的 bond/trunk 功能,要么只能建多条 4 层 TCP 连接,而 MPTCP 则可以为用户提供透明的多路径利用能力。MPTCP 不再使用传统 TCP 协议所要求的单个信道,而是支持冗余信道资源的反向多路复用,将整个数据传输速率提高到所有可用信道的总和。与此同时,MPTCP 还与传统 TCP 协议向后兼容。

协议介绍

实现结构

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

master subsocket

Multi-path control bock(mpcb)

slave subsocket

master subsock 是一个标准的 sock 结构体用于 TCP 通信。mpcb 提供开启或关闭子通道、选择发送数据的子通道以及重组报文段的功能。slave subsocket 对应用程序并不可见,他们都是被 mpcb 管理并用于发送数据。

协议操作

MPTCP 本身的工作方式与传统 TCP 非常相似。在三路握手时,双方交换 MP_CAPABLE(见下文参数设置)选项标明双方都支持 MPTCP,之后双方便都可以主动创建子连接(subflow),并且互换密钥以防止攻击者通过子连接注入攻击。新的 subflow 可以通过带有 MP_JOIN 标志的 SYN 报文建立,也可以在任意时刻关闭。在双方有多个 subflow 时,发送者自行决定使用哪个 subflow 发送数据,也可以将包裹拆分为多块交由多个 subflow 同时发送。

由于 MPTCP 提供与 TCP 相同的套接字接口,任何使用标准的 TCP 应用程序可以应用于 MPTCP 协议,以实现同时利用多个子连接传播数据。

虽然与标准 TCP 工作方式很像,但是,MPTCP 的核心思想是定义一种在两个主机之间建立连接的方式,而不是在两个接口之间(例如标准 TCP)。在标准 TCP 中,连接应在两个 IP 地址之间建立。每个 TCP 连接由标志着源和目的地的地址和端口的四元组来标识。鉴于此限制,应用程序只能通过单个连接创建一个 TCP 连接,因此会出现两个主机之间虽然可能同时建立了多个连接,但同一时刻只有单个连接被某个应用利用,而 Multipath TCP 则允许连接同时使用多个路径。为此,MultipathTCP 在每个需要使用的路径上创建一个称为 subflow 的 TCP 连接。

详细的协议规范在 RFC 6824 中提供。

优势

MPTCP 在无线网络环境中作用尤为突出。除了信道的反向多路复用机制带来的的数据传输率的增益,当用户进入或退出覆盖范围时,链路可以被添加或丢弃,不会中断端对端 TCP 连接。这样,链路切换的问题便通过传输层中的抽象,在端点处得到解决,而没有用到网络或链路级的任何特殊处理机制。

MPTCP 也在数据中心这样的应用场景中体现出了性能优势。与使用 802.3ad 链路聚合的以太网信道绑定相反,Multipath TCP 可以跨多个接口平衡单个 TCP 连接,从而达到非常高的传输效率。

应用

实现

2013 年 7 月,MPTCP 工作组报告了五个独立的 MPTCP 实现,其中包括 Linux 内核中的参考实现。

当前可用的实现是:

Linux 内核参考实现,来自鲁汶大学;

FreeBSD(仅 IPv4),来自斯威本科技大学;

F5 Networks BIG-IP LTM;

Netscaler,来自 Citrix 公司;

Apple iOS 7,苹果公司于 2013 年 9 月 18 日发布,是 Multipath TCP 的第一个大规模商业部署;

Apple Mac OSX 10.10,苹果公司于 2014 年 10 月 16 日发布;

MPTCP 代理版本 0.9 源代码,由阿尔卡特朗讯公司于 2012 年 10 月 26 日发布。

在 2014 年 7 月,Oracle 报告称正在开发 Solaris 上的实现。

在 IETF MPTCP 小组的会议上,SungHoon Seo 宣布,KT 自 6 月中旬以来一直在部署相关商业服务,允许智能手机用户使用 MPTCP 代理服务达到 1Gbit/s。

和其他协议的比较

SCTP

SCTP(Stream Control Transmission Protocol)是一种较新的传输协议,与 2000 年在 IETF 得到标准化,它最初是为了满足不断增长的 IP 电话市场设计的。SCTP 是一种可靠的面向消息的协议,它在端点之间提供多个流,并为多宿提供传输级支持。然而它有 2 个主要缺点:1) 开发者需要修改应用层接口; 2) 当今因特网架构中的 middlebox,比如 NAT 或防火墙,会阻止 SCTP 包。而这些 middlebox 对 TCP 包是开放通行的。基于这点,IETF 于 2011 年推出 Multipath TCP,基于传统 TCP 协议提供多路径通信。

IMS SIP

在 IP 多媒体子系统(IMS : IP Multimedia Subsystem)架构中,会话发起协议(SIP : Session Initiation Protocol)可以支持并发使用多个联系人 IP 地址来注册一个或多个 IMS 用户代理。这允许创建多个 IMS 信令路径。在这些信令路径上,信令消息携带会话描述协议(SDP)消息传送以协商媒体流。 SDP 允许通过多个路径(重新)协商一个媒体会话的流,使得应用层多路径传输。从这个角度来看,IMS 可以提供具有流粒度和并发访问的应用层多径支持。 IETF 目前正在讨论实时传输协议(RTP)的多径扩展。多路 RTP 可以通过并发访问和移动性(通过 IMS,SDP 信令或 RTP 控制协议)提供流粒度。

其他协议和实验

在会话层,移动接入路由器项目于 2003 年通过异构技术的多个无线接入进行了实验,透明地平衡了它们之间的流量,以响应每个接入路由器的感知性能。

用于通过利用 HTTP 范围请求来启动与复制内容的多个服务器的连接的并行访问方案不等同于多路径 TCP,因为它们涉及应用层,并且限于已知大小的内容。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: