zoukankan      html  css  js  c++  java
  • 多路径TCP(MPTCP)

    前言: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报文,只能关闭一条子流,所以,为了能够快速的关闭所有的连接,使用快速关闭控制报文可以达到这个目的。

  • 相关阅读:
    使用Python的Mock库进行PySpark单元测试
    库龄报表的相关知识
    使用PlanViz进行ABAP CDS性能分析
    Spark SQL中列转行(UNPIVOT)的两种方法
    Spark中的一些概念
    使用Visual Studio Code进行ABAP开发
    2019年的几个目标
    Dom--样式操作
    Dom选择器--内容文本操作
    Javascript面向
  • 原文地址:https://www.cnblogs.com/yhp-smarthome/p/7440855.html
Copyright © 2011-2022 走看看