您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > MPTCP3 - 副本
MPTCP学习报告3——RFC6824和NS3增加MPTCP姓名:刘红岗MPTCP的高度总结(1)如果应用不支持MPTCP,MPTCP会表现的和常规TCP一样。MPTCP的信令和操作是由MPTCP实现处理。(2)MPTCP的开启与TCP类似。如图中主机A地址A1与主机B地址B1(3)如果有额外的路径可以使用,既术语子流,新的TCP会话将会被创建,并组合与现有的连接,而对于应用层来说仍然表现为一个连接。如图主机A的A2和主机B的B1(4)MPTCP通过存在的多地址表示多路径。(5)通过路径管理方法,发现和设置额外子流。(6)MPTCP是通过增加连接级序列数来允许在不同的网络延迟下,到达数据段的重组。(7)子流的终止和常规的TCP类似,经过四次FIN握手.MPTCP连接的终止是通过一个连接级FIN终止的.MPTCP的初始化除了SYN,SYN/ACK,和ACK包携带MP_CAPABLE选项外,MPTCP的初始化与TCP类似。MP_CAPABLE选项是长度可变的,并且有多重服务目的。(1)确认远程主机是否支持MPTCP(2)这个选项允许主机交换一些信息,来确认子流的建立。MP_CAPABLE选项是发送者为这个MPTCP连接产生的一个64位的key.这个key用于确认这个连接的未来子流。所有的子流是通过32位的Token鉴定。这个”Token”是这个key的加密散列值。每一个数据包携带的格式如下:A=初始化者,B=监听者oSYN(A-B):A'sKeyforthisconnection.oSYN/ACK(B-A):B'sKeyforthisconnection.oACK(A-B):A'sKeyfollowedbyB'sKey.MP_CAPABLE选项只有在一个MPTCP连接的第一个子流建立是才会被SYN,SYN/ACK,和ACK包携带MPTCP的初始化MP_CAPABLE选项的数据格式(Kind为TCP选项,Subtype如下图)MPTCP的初始化MPTCP选项的子类型开启一个新子流其他子流的建立,与常规TCP类似,只是SYN,SYN/ACK,ACK携带MP_JOIN选项。MP_JOIN选项意味着在这个连接上加入一个新的子流。MP_JOIN的加密算法是由MP_CAPABLE握手时进行协商的。右图中,token(由key产生)用于标示它加入的是哪一个MPTCP连接,HMAC(基于散列消息的确认码)用于确认.MP_JOIN的SYN消息包含一个token,一个随机数(用于阻止确认方法上的重复攻击),AddressID(源地址,如果MP_JOIN和ADD_ADDR同时发送时,用于阻止重复的子流)和flags(四位,三位保留,并设置为0,最后一位标签”B”,标示这个子流是作为后备(B=1),还是立即生效(B=0))开启一个新子流MPTCP认证的一个例子开启一个新子流1)如果主机B接收到的token是未知的或者局域策略禁止接受一个新的子流,接收端必须为子流响应一个TCPRST2)如果主机B接收到token,但是返回给主机A的HMAC与期待的不匹配,则主机A必须用TCPRST关闭子流3)如果主机B没有收到预期的HMAC,或者MP_JOIN从ACK中丢失了,它也必须使用TCPRST关闭子流4)如果HMAC已经被正确确认,两个主机也确认为开启连接的对等主机,并且他们已经同意了这个子流连接(IftheHMACsareverifiedascorrect,thenbothhostshaveauthenticatedeachotherasbeingthesamepeersasexistedatthestartoftheconnection,andtheyhaveagreedofwhichconnectionthissubflowwillbecomeapart)5)如果主机A收到的SYN/ACK没有MP_JOIN选项,主机A必须使用一个RST关闭子流。MP_JOIN损失的所有情况通知其他主机其他的潜在地址多宿主主机的地址可能在MPTCP连接的生命期中改变,MPTCP支持隐形或显性的增加或者移除地址。如右图,主机A告知主机B它一个可供选择的地址IP#-A2,主机B之后发送一个MP_JOIN给这个新地址。然而由于中间件的存在,可能改变这个地址。ADD_ADDR这个选项用于地址鉴定,来明确的指明一个主机的地址。同样也存在REMOVE_ADDR使用MPTCP传输数据•为了确保任何时间可能出现或不出现的数据通过子流分发的可靠性或数据按序分发,MPTCP使用64位的DSN(数据序列数)来统计所以经MPTCP连接发送的数据.每个子流有一个32位的序列数空间和一个MPTCP选项,这个选项用于映射子流序列空间到数据序列空间。通过这种方法,一旦发生失败事件,数据可以通过不同的子流重传(不同的子流是映射到同一个DSN中的)。•DataSequenceSignal(数据序列信号)携带着DataSequenceMapping(数据序列映射).数据序列映射包含子流序列数、数据序列数、映射有效长度和一个连接级确认信息(DataACK)•MPTCP中,所有子流共享接收缓冲区,使用同一个接收窗口。•在MPTCP中用两级确认:(1)每个子流的确认使用常规TCP确认机制,确认每个独立子流的DSN(2)连接级确认来确认数据序列空间,这个确认跟踪字节流的增加和接收窗口的滑动。MPTCP的拥塞控制•MPTCP采用耦合拥塞策略,每个子流保持自己的拥塞状态信息,旨在达到以下目的:(1)提高吞吐量:多路径的性能至少不应比在最好的路径上的性能差(2)无威胁:多路径不应该不应抢占比使用单流时更多的共享资源,确保不过分威胁其他流(3)均衡拥塞:多路径应该减少拥塞路径上数据的发送MPTCP的拥塞控制要求路径优先级的改变•主机可以指定初始子流的设置,是否这个子流被用作常规的TCP路径或者一个后备路径—一个后备路径只有在没有常规路径可用时才会使用。在一个连接中,主机可以通过MP_PRIO信号改变路径的优先级。关闭一个MPTCP连接•当主机A告知主机B没有数据在发送了,它会在DSS中携带一个”DATAFIN”,来告知B端。一旦所有的数据被成功接收,B端会发送DATA_ACK确认。NS3.6增加MPTCP模块1.从下载ns3.6的mptcp下载实现代码2.下载ns3.6,解压3.将mp-tcp-packet-sink.h,mp-tcp-packet-sink.cc添加到src/application/packet_sink下,修改wscript,4.将mp-internet-stack-helper.h,mp-internet-stack-helper.cc添加到src/helper下,修改wscriptNS3.6增加MPTCP模块helper.source=[….'mp-internet-stack-helper.cc',]headers.source=[….'mp-internet-stack-helper.h',]5.将其他文件增加到src/internet-stack下,修改wscript,6.将测试文件mpTopology.cc放到scratch/下7.chmod777build.by编译./build.by8.运行./waf–runmpTopologyNS3.6存在的问题1.仅能一个客户端连接服务端,既服务端不能fork新的MPTCP连接,这个问题尤其在处理数据中心的流量模型中表现的尤其突出2.这个模型不能同时运行TCP与MPTCP,这个特点在数据中心实验中往往是需要的,还有在评估TCP与MPTCP流的竞争中,也需要这个特点。3.MPTCPtoken没有被包含4.一些声明没有按照标准实现Multipath-TCPinns-3MortezaKheirkhah,IanWakemanandGeorgeParisisDepartmentofInformatics,UniversityofSussex,UK{m.kheirkhah,ianw,g.parisis}@sussex.ac.ukNS3中MPTCP新的模型MpTcpSocketBase:这个类实现了MPTCP控制块和对ns3导出socketAPI.它执行数据分发、包重排、拥塞控制、所有子流的丢包恢复。在服务端,一个MPCTP连接被MPTCPSocketBase监听,它可以fork多个客户端。MpTcpScoketBase是TcpSocketBase的子类。MpTcpSubflow:它代表一个MPCTP子流,是一个Object类的子类。一个MpTcpSocketBase可以有多个MPTCpSubflow对象TcpL4Protocol:在不妨碍任何存在的TCP功能下,改变了TcpL4Protocol,以此来处理MPTCP,。这个类是传输层与网络层的一个接口,负责从网络层的发送与接收。当包被接收后,它会寻找一个Ipv4EndPoint,Ipv4EndPoint是基于TCP头的四元组。在这个模型中,一些Ipv4EndPoint对象,代表着MPTCP子流的终点,可以关联到一个MPTCP连接。MPTCP的token也在这个类中实现的。
本文标题:MPTCP3 - 副本
链接地址:https://www.777doc.com/doc-3547049 .html