udt数据传输协议包结构.docx

上传人:b****2 文档编号:982731 上传时间:2022-10-14 格式:DOCX 页数:8 大小:22.71KB
下载 相关 举报
udt数据传输协议包结构.docx_第1页
第1页 / 共8页
udt数据传输协议包结构.docx_第2页
第2页 / 共8页
udt数据传输协议包结构.docx_第3页
第3页 / 共8页
udt数据传输协议包结构.docx_第4页
第4页 / 共8页
udt数据传输协议包结构.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

udt数据传输协议包结构.docx

《udt数据传输协议包结构.docx》由会员分享,可在线阅读,更多相关《udt数据传输协议包结构.docx(8页珍藏版)》请在冰豆网上搜索。

udt数据传输协议包结构.docx

udt数据传输协议包结构

竭诚为您提供优质文档/双击可除

udt数据传输协议包结构

  篇一:

udt协议-基于udp的可靠数据传输协议

  1.介绍

  随着网络带宽时延产品(bdp)的增加,通常的tcp协议开始变的低效。

这是因为它的aimd(additiveincreasemultiplicativedecrease)算法彻底减少了tcp拥塞窗口,但不能快速的恢复可用带宽。

理论上的流量分析表明tcp在bdp增加到很高的时候比较容易受包损失攻击。

  另外,继承自tcp拥塞控制的不公平的Rtt也成为在分布式数据密集程序中的严重问题。

拥有不同Rtt的并发tcp流将不公平地分享带宽。

尽管在小的bdp网络中使用通常的tcp实现来相对平等的共享带宽,但在拥有大量bdp的网络中,通常的基于tcp的程序就必须承受严重的不公平的问题。

这个Rtt基于的算法严重的限制了其在广域网分布式计算的效率,例如:

internet上的网格计算。

  一直到今天,对标准的tcp的提高一直都不能在高bdp环境中效率和公平性方面达到满意的程度(特别是基于Rtt的问题)。

例如:

tcp的修改,RFc1423(高性能扩展),RFc20xx(sack)、RFc2582(newReno)、RFc2883(d-sack)、和RFc2988(Rto计算)都或多或少的提高了点效率,但最根本的aimd算法没有解决。

hstcp(RFc3649)通过根本上改变tcp拥塞控制算法来在高bdp网络中获得高带宽利用率,但公平性问题仍然存在。

  考虑到上面的背景,需要一种在高bdp网络支持高性能数据传输的传输协议。

我们推荐一个应用程序级别的传输协议,叫udt或基于udp的数据传输协议并拥有用塞控制算法。

  本文描述两个正交的部分,udp协议和udt拥塞控制算法。

一个应用层级别的协议,位于udp之上,使用其他的拥塞算法,然而这些本文中描述的算法也可以在其他协议中实现,例如:

tcp。

  一个协议的参考实现叫[udt];详细的拥塞控制算法的性能分析在[ghg04]中可以找到。

  2.设计目标

  udt主要用在小数量的bulk源共享富裕带宽的情况下,最典型的例子就是建立在光纤广域网上的网格计算,一些研究所在这样的网络上运行他们的分布式的数据密集程序,例如,远程访问仪器、分布式数据挖掘和高分辨率的多媒体流。

udt的主要目标是效率、公平、稳定。

单个的或少量的udt流应该利用所有高速连接提供的可用带宽,即使带宽变化的很剧烈。

同时,所有并发的流必须公平地共享带宽,不依赖于不同的带宽瓶劲、起始时间、Rtt。

稳定性要求包发送速率应该一直会聚可用带宽非常快,并且必须避免拥塞碰撞。

  udt并不是在瓶劲带宽相对较小的和大量多元短文件流的情况下用来取代tcp的。

  udt主要作为tcp的朋友,和tcp并存,udt分配的带宽不应该超过根据max-min规则的最大最小公平共享原则。

(备注,最大最小规则允许udt在高bdp连接下分配tcp不能使用的可用带宽)。

我们

  3.协议说明

  3.1.概述

  udt是双工的,每个udt实体有两个部分:

发送和接收。

发送者根据流量控制和速率控制来发送(和重传)应用程序数据。

接收者接收数据包和控制包,并根据接收到的包发送控制包。

发送和接收程序共享同一个udp端口来发送和接收。

  接收者也负责触发和处理所有的控制事件,包括拥塞控制和可靠性控制和他们的相对机制,例如Rtt估计、带宽估计、应答和重传。

  udt总是试着将应用层数据打包成固定的大小,除非数据不够这么大。

和tcp相似的是,这个固定的包大小叫做mss(最大包大小)。

由于期望udt用来传输大块数据流,我们假定只有很小的一部分不规则的大小的包在udtsession中。

mss可以通过应用程序来安装,mtu是其最优值(包括所有包头)。

  udt拥塞控制算法将速率控制和窗口(流量控制)合并起来,前者调整包的发送周期,后者限制最大的位被应答的包。

在速率控制中使用的参数通过带宽估计技术来更新,它继承来自基于接收的包方法。

同时,速率控制周期是估计Rtt的常量,流控制参数依赖于对方的数据到达速度,另外接收端释放的缓冲区的大小。

  3.2.包结构

  udt有两种包:

数据包和控制包。

他们通过包头的第一位来区分(标志位)。

如果是0,表示是数据包,1表示是控制包。

  3.2.1.数据包

  数据包结构如下显示:

  013401234567890123456789012345678901

  包序号是udt数据包头中唯一的内容。

它是一个无符号整数,使用标志位后的31位,udt使用包基础的需要,例如,每个非重传的包都增加序号1。

序号在到达最大值2^31-1的时候覆盖。

紧跟在这些数据后面的是应用程序数据。

  3.2.2.控制包

  控制包结构如下:

  013401234567890123456789012345678901

  有6种类型的控制包在udt中,bit1-3表示这些信息。

前32位在包头中必须存在。

控制信息字段包括0(例如,它不存在)或者多个32位无符号整数,这由包类型决定。

  udt使用应答子序号的方法。

每个ack/ack2包有一个无符号的16位序号,它独立于数据包需要。

它使用位16-31。

应答需要从0到(2^16-1)。

位16-31在其他控制包中没有定义。

  注意,对于数据和控制包来说,可以从udp协议头中得到实际的包大小。

包大小信息能被用来得到有效的数据负载和nak包中的控制信息字段大小。

  3.3.定时器

  udt在接收端使用4个定时器来触发不同的周期事件,包括速率控制、应答、丢失报告(negative应答)和重传/连接维护。

  udt中的定时器使用系统时间作为源。

udt接收端主动查询系统时间来检查一个定时器是否过期。

对于某个定时器t来说,其拥有周期tp,将定变量t用来记录最近t被设置或复位的时间。

如果t在系统时间t0(t=t0)被复位,那么任何t1(t1-t>=tp)是t过期的条件。

  四个定时器是:

Rc定时器、ack定时器、nak定时器、exp定时器。

他们的周期分别是:

Rctp、atp、ntp、etp。

  Rc定时器用来触发周期性的速率控制。

ack定时器用来触发周期性的有选择的应答(应答包)。

Rctp和atp是常量值,值为:

Rctp=atp=0.01秒。

  篇二:

图说s7-300(17)高级编程udt

  一、案例说明

  1、控制对象4个控制方式相同的电机。

  2、单个电机控制要求

  

(1)按下启动按钮--电机启动,并开始计时--到达设定时间后发出电机维护提示

  

(2)按下停止按钮--电机停止,并停止计时,但并不将时间清零。

  (3)电机运行时间小于设定值,时间不能复位,电机运行时间达到或。

超过设定值后按下复位按钮时间置0,电机维护提示消失。

  (4)当电机发生故障时,电机停止运行,并发出报警,故障处理完毕后必须手动确认复位报警信号才能再次启动电机。

  (5)任何时间电机停止,计时停止,电机运行,继续计时,时间只能有复位按钮可以清零。

  3、要求将四个电机的所有参数放在1个db块中,方便管理和做上位接口

  二、案例分析

  根据控制要求得出单个电机所需i/o

  输入:

启动、停止、故障复位、计时复位、电机维护周期、电机故障报警

  输出:

运行、故障报警、已运行时间、电机维护提示

  根据案例说明3中的要求我们需要自定义结构udt和db块的配合使用

  三、编程

  1、首先建立udt结构如下图所示

  2、建立存放参数的db块,并建立以上图为结构的四个电机的数据

  篇三:

udt的clR实现

  udt的clR实现

  目前自定义复杂数据类型只能通过clR来实现,对于大多数udt,建议将udt作为struct创建,尽管也可以选择将其作为class创建。

如果在class中而不是在struct中定义udt,那么必须将system.Runtime.interopservices.structlayoutattribute指定为structlayout.layoutkindsequential,此属性控制数据字段的物理布局,并用来按照成员的出现顺序对它们进行布局。

sqlserver使用此属性确定具有多个字段的udt的字段顺序,udt定义必须符合用于创建udt的规范,以使其能够注册到sqlserver实例中。

  第一部分:

必须具备的属性和方法

  为了能在sqlserver中运行,udt必须在定义中实现以下要求:

  1、udt必须指定microsoft.sqlserver.server.sqluserdefinedtypeattribute,该属性指示定义的类型是udt。

system.serializableattribute可选用,但建议使用。

  2、udt必须通过创建公共的staticnull方法,在类或结构中实现system.data.sqltypes.inullable接口。

默认情况下,sqlserver是可识别null的,这是为使在udt中执行的代码能够识别null值所必需的。

  3、udt必须包含支持从其进行分析的公共staticparse方法以及用于转换到对象的字符串表示形式的tostring方法。

  4、具有用户定义序列化格式的udt必须实现system.data.ibinaryserialize接口并提供Read和write方法。

  5、如果要求替代标准序列化,该udt必须实现system.xml.serialization.ixmlserializable,或者所有公共字段和属性必须均属于xml可序列化类型或者使用xmlignore属性进行修饰。

  6、一个udt对象必须只存在一个序列化。

如果序列化或反序列化例程识别了某一特定对象的多个表示形式,则验证将失败。

  7、sqluserdefinedtypeattribute.isbyteordered必须为true,以便按字节顺序比较数据。

如果未实现icomparable接口,并且sqluserdefinedtypeattribute.isbyteordered为false,字节顺序比较将失败。

  8、在类中定义的udt必须具有不采用任何参数的公共构造函数,可以选择创建其他重载类构造函数,但是不能创建普通重载函数,详细信息请见第13条。

  9、该udt必须将数据元素作为公共字段或属性过程公开。

  10、公共名称不能长于128个字符,并且必须符合在数据库标识符中定义的针对标识符的sqlserver命名规则。

  11、sql_variant列不能包含udt的实例。

  12、继承的成员无法从transact-sql访问,因为sqlserver类型系统不知道udt中的继承层次结构。

但是,您可以在创建类的结构时使用继承,并且可以在该类型的托管代码实现方式中调用此类方法。

  13、成员不能被重载,但类构造函数除外。

如果您创建某一重载方法,则在sqlserver中注册程序集或创建类型时将不会引发错误。

在运行时将检测到重载的方法,而不是在创建类型时检测到。

只要永不调用重载的方法,重载的方法就可以存在于类中。

一旦您调用重载的方法,就会引发错误。

  14、任何static成员都必须声明为常量或声明为只读。

静态成员将无法改变。

  15、如果sqluserdefinedtypeattribute.maxbytesize字段设置为-1,则序列化udt在大小上可达到大对象(lob)大小限制(目前为2gb),该udt的大小不能超过在maxbytesized字段中指定的值。

  如何定义指明创建的类是UDT?

sqluserdefinedtypeattribute属性确定如何使用序列化来构造udt的存储表示形式以及如何按值将udt传输到客户端。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1