课程报告:MPTCP参数测量_第1页
课程报告:MPTCP参数测量_第2页
课程报告:MPTCP参数测量_第3页
课程报告:MPTCP参数测量_第4页
课程报告:MPTCP参数测量_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

17MPTCP参数测量 李琦摘 要:IPv6到来的时候,主机的多地址(Multihome)将会变得越来越普及。即使是广泛使用的IPv4,Multihome host也越来越多了。从数据中心Fat-tree网络架构下的服务器到具有4G/Wifi/3G/Bluetooth多连接的智能手机,都是多宿主机。但传统的TCP并不能同时利用这些连接资源,因此要么使用2层的bond/trunk功能,要么只能建多条4层TCP连接,而MPTCP则可以为用户提供透明的多路径利用能力。MPTCP不再使用传统TCP协议所要求的单个信道,而是支持冗余信道资源的反向多路复用,将整个数据传输速率提高到所有可用信道的总和。与此同时,MPTCP还与传统TCP协议向后兼容。关键词:MPTCP TCP1 背景随着技术的发展许多设备具有了多个网络接口,而TCP依然是一个单线路的协议,在TCP的通信过程中发端和收端都不能随意变换地址。我们可以利用多个网络接口的这一特性来改善性能和有效冗余。例如:你的手机同时连接WIFI信号和3G信号的时候,如果WIFI关掉,使用WIFI进行的TCP连接就会断开,而不能有效利用3G网络继续收发数据。而Multipath TCP可以在一条TCP链接中包含多条路径,避免上述问题出现。2 简介MPTCP简介 MPTCP允许在一条TCP链路中建立多个子通道。当一条通道按照三次握手的方式建立起来后,可以按照三次握手的方式建立其他的子通道,这些通道以三次握手建立连接和四次握手解除连接。这些通道都会绑定于MPTCP session,发送端的数据可以选择其中一条通道进行传输。 2.1 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值。2.2MPTCP的接收包过程分为两个阶段:第一、每个子通道依据自身序号来重组报文段;第二、MPTCP的控制模块依据DSN对所有子通道的报文段进行重组。2.3拥塞控制 MPTCP中拥塞控制的设计需遵守以下两个原则:第一:MPTCP和传统TCP应该拥有相同的吞吐量,而不是MPTCP中每一条子通道和传统TCP具有相同的吞吐量。第二:MPTCP在选择子通道的时候应该选择拥塞情况更好的子通道。MPTCP可以选择多条子通道中任意一条来发送数据。MPTCP如果使用传统的TCP的方式来发送数据,将会出现一部分包在一条子通道,而另一部分包在另外一条子通道。这样的话,防火墙等中间设备将会收到TCP的序号跳跃的包,因此将会发生丢包等异常情况。为了解决这个问题,MPTCP通过增加DSN(data sequence number)来管理包的发送,DSN统计总的报文段序号,而每个子通道中的序号始终是连续。 MPTCP的接收包过程分为两个阶段:第一、每个子通道依据自身序号来重组报文段;第二、MPTCP的控制模块依据DSN对所有子通道的报文段进行重组。2.4 MPTCP的实现MPTCP的实现主要分为三部分:master subsocketMulti-path control bock(mpcb)slave subsocket图四 MPTCP的实现master subsock是一个标准的sock结构体用于TCP通信。mpcb提供开启或关闭子通道、选择发送数据的子通道以及重组报文段的功能。slave subsocket对应用程序并不可见,他们都是被mpcb管理并用于发送数据。3 环境搭建过程3.1 MPTCP的安装本部分主要参考以下三个链接//xiaodoubao124/article/details/50150677/s/blog_758723000101ealy.html3.1.1 获得MPTCP源码并自行编译内核首先提前安装好依赖环境sudo apt-get update sudo apt-get install libncurses5-devapt-get install build-essential 获取MPTCP源码cd /usr/srcgit clone -depth=1 git://multipath-tcp/mptcp.gitcd mptcp配置编译内核sudo make menuconfig配置内核时需要注意一下几点: 选择编译时:按y直接编译到内核中,条目前会显示为或*;按n不编译到内核中,条目前显示为或 ;按m以模块的方式编译,之后使用需要加载该模块才可以,条目前显示为或M. 由于我们是64位系统,选中第一个64-bit kernel,32位的话就不要选中。 进入networking support-networking options,检查一下IPv6模块,选择编译进内核或者不编译,不要选择以模块方式编译,否则看不到后面的MPTCP选项 找到networking support-networking options-TCP/IP networking-MPTCP protocol(MPTCP),按y选择编译。 找到Networking support-Networking options-IP: advanced router-IP: policy routing,选择编译。 找到Networking support-Networking options-MPTCP protocol,编译。这样一些拥塞控制算法才会出现在TCP:advanced congestion control里。 找到MPTCP: advanced path-manager control,编译。进到里面,编译MPTCP Full-Mesh Path-Manager和MPTCP ndiff-ports。下面的Default MPTCP Path-Manager 选择Full mesh。 找到Networking support-Networking options-TCP: advanced congestion control,进入。这里是拥塞控制算法,需要哪些就选择哪些,*编译到内核,M是编译成模块。这里选择CUBIC ,Vegas,Veno,LIA(MPTCP Link Increase),Olia (MPTCP Opportunistic Linked Increase),wVegas,Balia。选择默认的算法。 保存配置,退出。编译MPTCP内核cd /usr/src/mptcpsudo make编译并安装模块sudo make modules_install安装sudo make install重启系统,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。3.2 路由配置路由配置可以手动配置也可以自动配置,这里使用自动配置方法。编辑mptcp_upcd /etc/network/if-up.dsudo gedit mptcp_up粘贴以下内容,保存退出(下载地址)#!/bin/sh# A script for setting up routing tables for MPTCP in the N950.# Copy this script into /etc/network/if-up.d/set -eenv /etc/network/if_up_envif $IFACE = lo -o $MODE != start ; then exit 0fiif -z $DEVICE_IFACE ; then exit 0fi# FIRST, make a table-aliasif grep $DEVICE_IFACE /etc/iproute2/rt_tables | wc -l -eq 0 ; then NUM=cat /etc/iproute2/rt_tables | wc -l echo $NUM $DEVICE_IFACE /etc/iproute2/rt_tablesfiif $DHCP4_IP_ADDRESS ; then SUBNET=echo $IP4_ADDRESS_0 | cut -d -f 1 | cut -d / -f 2 ip route add table $DEVICE_IFACE to $DHCP4_NETWORK_NUMBER/$SUBNET dev $DEVICE_IFACE scope link ip route add table $DEVICE_IFACE default via $DHCP4_ROUTERS dev $DEVICE_IFACE ip rule add from $DHCP4_IP_ADDRESS table $DEVICE_IFACEelse # PPP-interface IPADDR=echo $IP4_ADDRESS_0 | cut -d -f 1 | cut -d / -f 1 ip route add table $DEVICE_IFACE default dev $DEVICE_IP_IFACE scope link ip rule add from $IPADDR table $DEVICE_IFACEfi设置文件可执行sudo chmod a+x mptcp_up编辑mptcp_downcd /etc/network/if-post-down.dsudo gedit mptcp_down粘贴以下内容,保存退出(下载地址)#!/bin/sh# A script for setting up routing tables for MPTCP in the N950.# Copy this script into /etc/network/if-post-down.d/set -eenv /etc/network/if_down_envif $IFACE = lo -o $MODE != stop ; then exit 0fiip rule del table $DEVICE_IFACEip route flush table $DEVICE_IFACE设置文件可执行sudo chmod a+x mptcp_down。4 Mptcp的工具mptcp中的使用工具iperf:测量带宽等的网络工具iproute2:工具包,有很多的工具,包括ip、tc等都在里面。tcpdump、wireshark:网络分析器安装iperf:sudo apt-get install iperf安装wireshark:sudo apt-get install wireshark安装iproute2:可以使用apt来升级:sudo apt-get update sudo apt-get dist-upgradetcpdumptcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。5 Mptcp使用检查mptcp是否在工作网站有两个端口,支持mptcp,可以与它建立http连接,通过工具来看是否在使用mptcp,打开网站后a) 使用命令:#netstat m,这条命令是查看mptcp的连接状态,可以看到有mptcp的连接出现图五 mptcp的连接状态b) 使用wireshark分析传输的包,可以看到mptcp的选项图六 wireshark包使用这种方法只是简单的看一下mptcp是否工作,下面构造简单的使用场景搭建一个局域网,在两个电脑之间使用mptcp连接这里有两条独立的链路,互不交叉,两台电脑都支持mptcp。使用iperf来测试链路的带宽在服务端开启:#iperf s在客户端建立连接:#iperf c 37相同主机不同终端图七 服务端图八 客户端可以测得带宽接近5Gbps。iperf是从客户端想服务端发送大量的数据,以此来测量带宽,iperf中的常用选项:不同虚拟机之间图九 虚拟机1客户端连接图十 虚拟机2客户端连接可以测得带宽接近100Mbps。iperf是从客户端想服务端发送大量的数据,以此来测量带宽,iperf中的常用选项:#iperf c 37 t 100 i 2图十一 服务端图十二 #iperf c 37 t 100 i 2表示发送持续100s的数据,并且每隔2s显示一份报告不同虚拟机图十三 客户端发送数据 图十四 服务端接受数据表示发送持续100s的数据,并且每隔10s显示一份报告控制链路参数实现对网络带宽、延时、丢包率等控制,通过控制链路参数,可以灵活的设置一些需要的场景。linux内核中可以直接实现对网络流量的控制,iproute2工具包中的工具tc(traffic control流量控制)可以对带宽设置,netem(network emulator网络仿真工具)可以实现对延时和丢包率的设置。下面介绍一些简单的设置,实现更复杂的控制,参考tc的文档,netem的介绍netem的使用方法介绍、Linux_限速工具TC_手册简明版、linux的高级路由和流量控制HOWTOtc的简要使用方式:linux下流量控制工具TC详细说明及应用实例a) 设置延时:#tc qdisc add dev enp0s3 root netem delay 10ms说明:qdisc:queue discipline队列管理,是tc中的基本概念这句描述在接口eth0上设置包的延时为10ms图十五 设置时延删除此次 设置:#tc qdisc del dev eth0 root图十六 删除设置删除后,队列管理恢复到默认的状态设置时延之前图十七 设置时延之前的服务端图十七 设置时延之前的服务端图十八 设置时延之后的服务端图十九 设置时延之后的客户端b) 设置丢包率:#tc qdisc add dev eth0 root netem loss 0.1%同时设置丢包率和延时:#tc qdisc change dev eth0 root netem delay 10ms loss 0.1%c) nemem并不带有限速功能,但可以使用其他的队列类型来实现,如使用简单的tbf(token bucket filter令牌桶过滤器)#tc qdisc add dev eth0 root tbf rate 50kbit burst 1000 latency 50ms删除此项设定:#tc qdisc del dev eth0 root查看状态:tc s qdisc ls dev eth0图二十 设置速率和时延图二十一 实验结果图二十二 两个客户端同时传送数据d) 同时设置丢包率、延时和带宽#tc qdisc add dev eth0 root handle 1:0 netem delay 100ms loss 0.1%#tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256 kbit buffer 1600 limit 3000说明:速率:256kbit/s,在tc中,kbps表示千字节每秒,kbit表示千比特每秒;令牌桶大小:1600,limit表示限制最大等待的包,也可以用latency表示图二十三 同时设置丢包率、延时和带宽命令1图二十四 同时设置丢包率、延时和带宽命令2图二十四 同时设置丢包率、延时和带宽服务端结果图二十五 同时设置丢包率、延时和带宽客户端结果1图二十六 同时设置丢包率、延时和带宽客户端结果2通过tcpdump查看两个端口,两个端口均可发送接收数据:enp0s3:图二十七enp0s3端口enp0s8:图二十八 enp0s8端口6 结论展望通过这次试验,对MPTCP有了一个基础的了解,对其原理有了一个基本认识。实施多路径传输的关键点多路径流量的调度和拥塞控制。多路径的流量调度是指对于存在的多个子路径,如何分配流量到各个子路径,以达到尽可能提高带宽的目的。但另一方面,又需要对各个子路径进行统一的拥塞控制,当一条链路上的流量发送拥塞时,把流量导到另一条链路上去。路径发送失败后的重传。既然依然是可靠通信,那么就会涉及到失败后的重传问题。重传的时候自然就要找到对应的序列号,然而,在多路径传输时,本来序列号连续的包可能被调度到不同的链路中发送,导致出现一个问题:在每个链路中发送的包的序列号不是连续的,在网络传输中可能会被网络安全设备拦截下来。所以需要解决重传时的序列号的问题。建立和管理子路径。对于传输时的多路径,需要对路径进行管理,以便能够知晓链路情况,在链路被移除的时候,通知对端不再使用这条链路。在链路添加的时候,使能对应的链路。多路径TCP从实现的层次来说,可以分为网络层实现,传输层实现,应用层实现。首先说这个应用层实现,这个实施起来代价最高,因为需要改动现有的应用程序。而在网络层实现在面对流量控制等问题时时又困难重重,只有在传输层可以借助天然的TCP的可靠性机制,进行改造。多路径TCP的体系结构多路径tcp的功能和过程如下:1. 初始化一个连接2. 使能一个新的子流3. 数据序列号的映射4. 可靠性和重传5. 拥塞控制6. 链路管理7. 快速关闭8. 回落功能但是在过程中也出现一些问题:MPTCP启动失败,经过重新编译安装之后,上述问题成功解决。另外,还有一些问题仍未解决,比如说

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论