1 / 14
文档名称:

UDT协议UDP可靠数据传输协议.pdf

格式:pdf   大小:481KB   页数:14页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

UDT协议UDP可靠数据传输协议.pdf

上传人:南 2022/12/15 文件大小:481 KB

下载得到文件列表

UDT协议UDP可靠数据传输协议.pdf

相关文档

文档介绍

文档介绍:该【UDT协议UDP可靠数据传输协议 】是由【南】上传分享,文档一共【14】页,该文档可以免费在线阅读,需要了解更多关于【UDT协议UDP可靠数据传输协议 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.

随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效。这是因为它
的AIMD(additiveincreasemultiplicativedecrease算法彻底减少了TCP拥塞窗口,
但不能快速的恢复可用带宽。理论上的流量分析表明TCP在BDP增加到很高的时候
比较容易受包损失攻击。
另外,继承自TCP拥塞控制的不公平的RTT也成为在分布式数据密集程序中的严重
问题。拥有不同RTT的并发TCP流将不公平地分享带宽。尽管在小的BDP网络中使
用通常的TCP实现来相对平等的共享带宽,但在拥有大量BDP的网络中,通常的基
于TCP的程序就必须承受严重的不公平的问题。这个RTT基于的算法严重的限制了
其在广域网分布式计算的效率,例如:internet上的网格
计算。
一直到今天,对标准的TCP的提高一直都不能在高BDP环境中效率和公平性
方面达到满意的程度(特别是基于RTT的问题)。例如:TCP的修改,RFC1423
(高性能扩展),RFC2018(SACK)、RFC2582(NewReno)、RFC2883(D-SACK)、
和RFC2988(RTO计算)都或多或少的提高了点效率,但最根本的AIMD算法没有解
决。HSTCP(RFC3649)通过根本上改变TCP拥塞控制算法来在高BDP网络中获
得高带宽利用率,但公平性问题仍然存在。
考虑到上面的背景,需要一种在高BDP网络支持高性能数据传输的传输协议。我
们推荐一个应用程序级别的传输协议,叫UDT或基于UDP的数据传输协议并拥有
用塞控制算法。
本文描述两个正交的部分,UDP协议和UDT拥塞控制算法。一个应用层级别的协议,
位于UDP之上,使用其他的拥塞算法,然而这些本文中描述的算法也可以在其他协议
中实现,例如:TCP。
一个协议的参考实现叫[UDT];详细的拥塞控制算法的性能分析在[GHG04]中可
以找到。:.

UDT主要用在小数量的bulk源共享富裕带宽的情况下,最典型的例子就是建立在光
纤广域网上的网格计算,一些研究所在这样的网络上运行他们的分布式的数据密集程
序,例如,远程访问仪器、分布式数据挖掘和高分辨率的多媒体流。
UDT的主要目标是效率、公平、稳定。单个的或少量的UDT流应该利用所有高速
连接提供的可用带宽,即使带宽变化的很剧烈。同时,所有并发的流必须公平地共
享带宽,不依赖于不同的带宽瓶劲、起始时间、RTT。稳定性要求包发送速率应该一
直会聚可用带宽非常快,并且必须避免拥塞碰撞。
UDT并不是在瓶劲带宽相对较小的和大量多元短文件流的情况下用来取代
TCP的。
UDT主要作为TCP的朋友,和TCP并存,UDT分配的带宽不应该超过根据MAX-MIN
规则的最大最小公平共享原则。(备注,最大最小规则允许UDT在高BDP连接下分
配TCP不能使用的可用带宽)。我们


UDT是双工的,每个UDT实体有两个部分:发送和接收。发送者根据流量控制和
速率控制来发送(和重传)应用程序数据。接收者接收数据包和控制包,并根据接收
到的包发送控制包。发送和接收程序共享同一个UDP端口来发送和接收。
接收者也负责触发和处理所有的控制事件,包括拥塞控制和可靠性控制和他们的相
对机制,例如RTT估计、带宽估计、应答和重传。
UDT总是试着将应用层数据打包成固定的大小,除非数据不够这么大。和TCP相
似的是,这个固定的包大小叫做MSS(最大包大小)。由于期望UDT用来传输大块
数据流,我们假定只有很小的一部分不规则的大小的包在UDTsession中。MSS可以
通过应用程序来安装,MTU是其最优值(包括所有包头)
UDT拥塞控制算法将速率控制和窗口(流量控制)合并起来,前者调整包的发送周:.
期,后者限制最大的位被应答的包。在速率控制中使用的参数通过带宽估计技术来更
新,它继承来自基于接收的包方法。同时,速率控制周期是估计RTT的常量,流控制
参数依赖于对方的数据到达速度,另外接收端释放的缓冲区的大小。
32包结构
UDT有两种包:数据包和控制包。他们通过包头的第一位来区分(标志位)如果是
0,表示是数据包,1表示是控制包。
数据包
数据包结构如下显示:
0134
0123456789012345678901234567
8901
包序号
0
应用数据
包序号是UDT数据包头中唯一的内容。它是一个无符号整数,使用标志位后的31
位,UDT使用包基础的需要,例如,每个非重传的包都增加序号1。序号
在到达最大值2八31-1的时候覆盖。紧跟在这些数据后面的是应用程序数据。
控制包
控制包结构如下:
0134
0123456789012345678901234567
8901
1类型保留ACK序号
:.
控制信息字段
有6种类型的控制包在UDT中,bit1-3表示这些信息。前32位在包头中必须存在。
控制信息字段包括0(例如,它不存在)或者多个32位无符号整数,这由包类型决定。
UDT使用应答子序号的方法。每个ACK/ACK2包有一个无符号的16位序号,它独
立于数据包需要。它使用位16-31。应答需要从0到(2X6-1)。位16-31在其他控制
包中没有定义。
类型说明控制信息

000协议连接握手

(字节)
(字节)
保活没有
001
,先前接收到的包序号
010应答,位16-31是应答
,RTT(微秒)
序号
,RTT变量或者RTTVar(微秒)
,流量窗口大小(包的数量)
,连接容量估计(每秒包的数量)
011Negative应答(NAK)丢失信息的32位整数数组,
100保留这种类型的控制信息保留作为拥塞警告使用,
从接收到发送端。一个拥塞警告能被ECN或
包延迟增加趋势的度量方法触发。
关闭
101
应答一个应答16-31位,应答序号。
110
(ACK2)
4-15的解释保留将来使用
111
注意,对于数据和控制包来说,可以从UDP协议头中得到实际的包大小。包
大小信息能被用来得到有效的数据负载和NAK包中的控制信息字段大小:.

UDT在接收端使用4个定时器来触发不同的周期事件,包括速率控制、应答、丢
失报告(negative应答)和重传/连接维护。
UDT中的定时器使用系统时间作为源。UDT接收端主动查询系统时间来检查一个
定时器是否过期。对于某个定时器T来说,其拥有周期TP,将定变量t用来记录最近T
被设置或复位的时间。如果T在系统时间tO(t=tO)被复位,那么任何t1(t1-t>=TP)
是T过期的条件。
四个定时器是:RC定时器、ACK定时器、NAK定时器、EXP定时器。他们的周期
分别是:RCTP、ATP、NTP、ETP。
RC定时器用来触发周期性的速率控制。ACK定时器用来触发周期性的有选择的应
答(应答包)。RCTP和ATP是常量值,值为:RCTP=ATP=。
NAK被用来触发negative应答(NAK包)。重传定时器被用来触发一个数据包的
重传和维护连接状态。他们周期依赖于对于RTT的估计。ETP值也依赖于连续EXP
时间溢出的次数。,而NTP和ETP的初始值是:NTP=3*RTT,
ETP=3*RTT+ATP。
在每次boundedUDP接收操作(如果收到一个UDP包,一些额外的必须的数据处
理时间)时查询系统时间来检查四个定时器是否已经过期。推荐的周期粒度是微秒。
UDP接收时间溢出值是实现的一个选择,这依赖于循环查询的负担和事件周期精确度
之间的权衡。
速率控制事件更新包发送周期,UDT发送端使用STP来安排数据包的发送。
假定一个在时间tO被发送,那么下一次包发送时间是(t0+STP)。换句话说,如果
前面的包发送花费了t时间,发送端将等待(STP-t'来发送下一个数据包
(如果STP-t'<0就不需要等待了)。这个等待间隔需要一个高精确度的实现,推荐
使用CPU时钟周期粒度。:.

数据结构和变量
:一个循环数组记录每个数据包的开始时间
:发送段丢失列表是一个连接链表,用来存储被接收方NAK
包中返回的丢失包序号。这些数字以增加的顺序存储。
数据发送算法
,重传第一个在list中的包,并删除该成员,到5。

,转到1。如果不是包装一个新的包
并发送它。
,n是一个整数,转第2步。

,等外SYN时间。
G•等外(STP-t)时间,t是第1到第4步之间的总时间,然后转到1。

数据结构和变量
:是一个duple连接链表,元素的值包括:丢失数据包的序号、最
近丢失包的反馈时间和包已经被反馈的次数。值以包序号增序的方式存储。
:每个发送ACK的和时间一个循环数组;由于其循环的特性,意
味着如果数组中没有更多空间的时候新的值将覆盖老的值。
:一个用来记录每个包到达时间的循环数组。
D•对包窗口:一个用来记录每个探测包对之间的时间间隔。
:一个用来记录最大接收数据包需要的变量。LRSN被初始化为初始
序号减1:.
数据接收算法
、ACK、NAK、或EXP定时器是否过期。如果任
一定时器过期,处理事件(本节下面介绍)并复位过期的定时器。
。如果每个包到,转1。
-count为1,并更新ETP为:ETP=RTT+4*RTTVar+ATP。
,复位EXP时间变量。
。如果是一个控制包,根据类型处理它,然后转1。
+1,n是一个整数,记录当前包和上个在对包窗口中
数据包的时间间隔。

+1,将所有在(但不包括)这两个值之间的序号
放入接收丢失链表,并在一个NAK包中将这些序号发送给发送端。如果序号小于
LRSN,从接收丢失链表中删除它。
,转1。
RC定时器到
通过速率控制算法来更新STP()。
过程如下:
:如果接收者丢失链表
是空的,ACK号码是LRSN+1,否则是在接收丢失队列中的最小序号。
,或等于上次应答的应答号并
且两次应答之间的时间间隔小于RTT+4*RTTVar,停止(不发送应答)。
,推荐采用ACK序列号按步骤1增加,
并且重叠在达到最大值之后。
:使用PKT历史窗口中的值计算最近16个
包抵达间隔(AI)中值。在这16个值中,删除那些大于AI*8或小于AI*8的包,
如果最后剩余8个值,计算他们的平均值(AI',)包抵达速度是1/AI'(每秒包
的数量),否则是0。
(W)计算流量窗口。然后计算有效的流量窗口大小为::.
最大(W,可用接收方缓冲大小),2)。
。如果流量控制快启动阶段()一直
继续,返回0,否则计算最近16个对包间隔(PI),这些值在对包窗口中,那么连
接容量就是1/PI(每秒包的数量)。
G•打包应答序列号,应答号,RTT,RTT变量,有效的流量窗口大小并估计连接,将
他们放入ACK包中,然后发送出去。
,应答号和这个应答的开始时间,并放入历史窗口中。
处理NAK定时器到时
查找接受方的丢失链表,找到所有上次反馈时间是(k*(RTT+4*RTTVar))前
的包,k当前这个包的反馈次数加1,如果没有反馈丢失,停止。
压缩第一步中得到的序号(),然后在一个NAK包中发送他们到发送方。
如果不是停止流量控制快启动阶段。
处理EXP定时器
,停止

(exp-count>16)并且自上次从对方接收到一个包以来的总时间超过3秒,
或者这个时间已经超过3分钟了,这被认为是连接已经断开,关闭UDT连接。
,也就没有应答,发送一个保活包给对端,否则将所有未应答包的序
号放入发送丢失列表中。
-count为:exp-count=exp-count+1
:ETP=exp-count*(RTT+4*RTTVar)+ATP。
收到应答包

:RTT=rtt,RTTVar=rv;rtt和rv是ACK包中的RTT
和RTTVar值。
:NTP=RTT+4*RTTVar;ETP=exp-count*(RTT+4*RTTVar):.
+ATP。
:B=(B*7+b)/8,b是ACK包带的值。

,并设置与ACK序号相同的应答号到对端

当收到NAK包的时候

()

当收到ACK2包
在ACK历史窗口中根据接收到的ACK2序列号查找行营的ACK包。更新曾经被
应答的最大应答号
根据ACK2的到达时间和ACK离开时间计算新的rtt值,并且更新RTT和
RTTVar值为:
RTTVar=(RTTVar*3+abs(rtt-RTT)/4
RTT=(RTT*7+rtt)/8

更新NTP和ETP为:
NTP=RTT;
ETP=(exp-count+1)*RTT+ATP
当收到保活包的时候
什么也不做
当收到连接握手和关闭包的时候
:.

速率控制快启动
STP被初始为最小的时间精度(1个CPU周期或1毫秒)。这是在快启动阶段,一般
收到一个ACK包其携带的估计带宽大于0这个阶段就停止了。包的发送周期被设置
为1/W,W是ACK携带的流量窗口的大小。
快启动阶段仅仅在开始一个UDT连接的时候发生,且不会在UDT连接的以后再
出现。在快启动阶段之后,下面的算法就要工作了。
当RC定时器时间到
,没有收到一个ACK,停止
,计算方法是根据总共发送的包与NAK反馈中
总共丢失包的数量。%,停止。
:(inc)
If(B<=C)inc=1/MSS
Elseinc=max(10A(ceil(log10((B-C)*MSS*8)))*Beta/MSS,1/MSS)
B是连接容量估计,C是当前的发送速度。两个都计算为每秒多少个包。MSS是
以字节计算的;。
:STP=(STP*RCTP)/(STP*inc+RCTP)
5•计算真正的数据发送周期(rsp),从SNDPKT历史窗口中得到,如果(STP<
*rsp)设置STP为(*rsp)。
(),。:.
当收到NAK包时数
据结构和变量
:自上次速率降低后发送的最大序号
:自上次LSD更新以后的NAK数量
:当最大序号大于LSD时两次事件之间的NAK移动的平均数。
:在1到AvgNAK之间的随机平均数。
算法
:
增力卩STP为:STP=STP*(1+1/8)
更新AvgNAK为:AvgNAK=(AvgNAK*7+NumNAK)/8
更新DR
复位NumNAK=0
记录LSD
,增加NumNAK按照1个步骤增加;如果NumNAK%DR=0;增加
STP为:STP=STP*(1+1/8);记录LSD。

流量控制窗口大小(W)初始值是16。
当ACK定时器到的时候
:如果没有NAK产生或者W没有到达或超过15个包,并且AS>0,
流量窗口大小更新为应答包的总数量。
,如果(AS>0),W更新为:(AS是包的到达速度)
W=ceil(W*+AS*(RTT+ATP)*):.


一个UDT实体首先作为一个SERVER启动,当一个客户端需要连接的时候其发送
握手包。客户端在从服务端接收到一个握手响应包或时间溢出之前,应该每隔一段
时间发送一个握手包(时间间隔由响应时间和系统overhead来权衡)。
握手包有如下信息:
:这个值是兼容的目的。当前的版本是2
:这是发送这个UDT实体将来用于发送数据包的起始序号。
它必须是一个在1到(2A31-1)之间的随机值。另外,建议这个值在合理的时
间历史窗口中不应该重复。
:数据包的大小(通过IP有效负载来度量)
:这是接收到握手信息的UDT实体允许的最大流量窗口
大小,窗口大小通常限制为接收端的数据结构大小。
服务器接收到一个握手包之后,比较MSS值和他自己的值并设置它自己的值为较小
的值。结果值也在握手响应中被发送到客户端,另外还有服务器的版本信息,初始
序列号,最大流量窗口大小。
版本字段用来检查两端的兼容性。初始序列号和最大流量窗口大小用于初始化接收
到这个握手包的UDT实体参数。
服务器在第一步完成以后就准备发送或接收数据。然而,只要从同一个客户端接收
任何握手包,其应该发送响应包。
客户端一旦得到服务器的一个握手响应其就进入发送和接收数据状态。设置它自己
的MSS为握手响应包中的值并初始化相应的参数为包中的值(序列号、最大流量窗口)。
如果收到任何其他的握手信息,丢掉它。
如果其中的UDT实体要关闭,它将发送一个关闭信息到对端;对方收到这个信息以
后将自己关闭。这个关闭信息通过UDP传输,仅仅发送一次,并不保证一定收到。如
果消息没有收到,对方将根据时间溢出机制来关闭连接。:.

NAK包中携带的丢失信息是一个32-bit整数的数组。如果数组的中数字是一个正常
的序号(第1位是0),这意味着这个序号的包丢失了,如果第1位是1,意味着从
这个号码开始(包括该号码)到下一个数组中的元素(包括这个元素值)之间的包
(它的第1位必须是0)都丢失。
例如,下面的NAK中携带的信息:
0x00000002,0x,0x0000000B,0x0000000E
上面的信息表明序号为:2,6,7,8,9,10,11,14的包都丢了。

UDT能够充分利用当前有线网络的独立于连接容量的可用带宽、RTT、后台
共存流、给定的连接比特错误率。UDT在没有数据包丢失的情况下从0bits/s到90%
带宽需要一个常量时间,。UDT并不适合无线网络。
UDT的确满足单瓶劲网络拓扑的最大-最小公平性。在多个瓶劲情况下,根据最大
最小原则它能保证较小瓶劲连接或者至少一半的平等共享(itguaranteesthatflows
oversmallerbottlenecklinksobtainatleasthalfoftheirfairshareaccordingtomax-min
rule)。RTT对公平性都一点影响。
当和大块的TCP流共存的时候,TCP能占用比UDT更多的带宽,除了三种情况:
,TCP不能利用他们的公平共享带宽。这种情况下,
UDT将占用TCP不能利用的带宽。
,从而导致UDT的带宽估计技术不能最有的工作;
模拟显示这个极限连接容量大约是100kb/s。
,如果队列大小大于BDP,
TCP的共享带宽随着队列大小的增加而降低。然而,抵达UDT的共享
带宽是,队列大小通常超过实际路由器/交换机提供的数量。
当短(timewise)类似web的TCP流和小的并发UDT流共存的时候,UDT在TCP:.
流上的效果非常小。
更多的分析在[GHG03]。

UDT并没有使用特定的安全机制,相反,它依赖于应用程序提供的授权和底层提供
的安全机制。
然而,由于UDP是无连接的,UDT实现应该检查所有达到的包是否是预期的来源。这是从socket的API
连接概念中继承而来,其连接只是接收指定来源的数据。