首页 > 编程知识 正文

mpp分析型数据库,mpcp协议

时间:2023-05-04 13:28:51 阅读:276235 作者:3187

rfc6824

背景

随着技术的发展许多设备具有了多个网络接口,而TCP依然是一个单线路的协议,在TCP的通信过程中发端和收端都不能随意变换地址。我们可以利用多个网络接口的这一特性来改善性能和有效冗余。例如:手机同时连接WIFI信号和3G信号的时候,如果WIFI关掉,使用WIFI进行的TCP连接就会断开,而不能有效利用3G网络继续收发数据。而Multipath TCP可以在一条TCP链接中包含多条路径,避免上述问题出现。

 

MPTCP简介

MPTCP允许在一条TCP链路中建立多个子通道。当一条通道按照三次握手的方式建立起来后,可以按照三次握手的方式建立其他的子通道,这些通道以三次握手建立连接和四次握手解除连接。这些通道都会绑定于MPTCP session,发送端的数据可以选择其中一条通道进行传输。

MPTCP的设计遵守以下两个原则:

1.应用程序的兼容性,应用程序只要可以运行在TCP环境下,就可以在没有任何修改的情况下,运行于MPTCP环境。

2.网络的兼容性,MPTCP兼容其他协议。

 

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的实现主要分为三部分:

master subsocketMulti-path control bock(mpcb)slave subsocket

 

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

图3是内核代码框架示意图。从图3可以看到,应用层调用的是传统TCP套接字(socket),而在建立了MPTCP连接后调用多径控制模块(multipath control block),该模块也就是所说的MPTCP层。初始的TCP套接字为 主套接字,之后新建立的TCP套接字为 从TCP套接字。

 

无论 主TCP套接字 上的子流关闭与否,主TCP套接字一直存在,用于向上层应用隐藏MPTCP的存在,从而实现透明化。在具体实现上,如图4所示,首先每个子流的处理都通过一个tcp_sock来加以实现,除此之外,该tcp_sock还包含一个指向mptcptcp sock的指针,用以维护TCP之外与MPTCP有关的信息以及处理MPTCP层的相关功能.MPTCP连接所产生的第1个子流的tcp_sock记为meta_sock,供应用层调用的为标准的TCP socket api.作为meta_sock的tcp_sock 除了包含指向mptcp_tcp_sock的指针之外,还将通过指针连接到一个新添加的mptcp_cb,该结构体作为MPTCP的控制缓存,其中维护了到各个TCP子流的tcp_sock的指针以及地址列表信息等。各个子流的mptcp_tcp_sock也需要将相关标识信息等存储在mptcpcb。

 

源码位置

MPTCP在内核中的参数地址如下:

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。