湖南文理学院课程设计报告课程名称:计算机软件技术课程设计系部:电气与信息工程学院专业班级:通信工程学号:200916020121学生姓名:蒋开心指导教师:邵老师完成时间:20011年12月28日报告成绩:评阅意见:评阅教师日期2目录一、设计要求........................................................4二、设计目的........................................................4三、所用仪器设备....................................................4四、具体设计过程....................................................41UDP可靠传输机制............................................42帧结构设计..................................................52.1管理应用层帧结构.........................................62.2适配层报文格式...........................................62.3控制帧的帧结构...........................................63可靠传输的软件实现...........................................73.1数据缓存设计.............................................73.2定时器设计...............................................73.3接收任务设计.............................................83.4发送任务设计.............................................93.5监控任务设计............................................10五、实验程序.......................................................11六、设计心得体会...................................................14七、参考文献.......................................................143UDP协议的研究及实现摘要:在高速数据传输网络中,用户数据报协议(UDP)有着其他数据传输协议无法比拟的优势,但同时也存在着传输可靠性。目前实现IP网络消息交换和数据传输的方法主要有TCP传输控制协议和SCTP简单流传输协议,以及UDP用户数据报协议。这些协议各有特点,但都不能完全满足通信网络中高效数据传输的要求。TCP和SCTP协议都是面向连接的,保证了数据的可靠传输,但是处理复杂,效率不高,占用资源较多,无法支持海量并发连接。UDP协议采用面向非连接的传输策略,速度快,效率高,可支持海量并发连接,但存在可靠性差,传输功能少的缺点。但对绝大多数基于消息包传递的应用程序来说,基于帧的通信比基于流的通信更为直接和有效。随着通信技术和光器件的不断发展,光网络设备的功能越来越强,对光网络设备的管理和维护也越来越复杂。网管与设备间通信的数据量越来越大,设备内部各单元间的数据交换越来越频繁,数据量也越来越大。这些新的变化对设备内部数据通信的实时性和可靠性都提出了较高的要求。目前开放系统互连(OSI)模型中传输层采用的主要有传输控制协议(TCP)和用户数据报协议(UDP)[1],其中,TCP是面向连接的协议,通信前需先建立连接,传输时延较大;TCP的确认和重发机制、流量控制机制虽能保证数据的可靠传输,但处理过程复杂,效率不高;并且TCP不支持广播和组播,不能适应光网络设备内部数据交换的要求。UDP采用了无连接的传输策略,通信时直接向对端发送数据;在传输过程中不关注网络状态,节省了大量的网络资源,能有效地提高网络的传输效率;并且UDP支持广播和组播。但UDP不能保证数据的可靠传输。如果能在充分利用UDP优势的前提下,保证UDP通信的可靠性,将使通信设备的性能得到很大的提高,因此对UDP可靠性的研究和改进已经成为当前的热点问题。4一、设计要求:1、了解UDP是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。了解UDP协议基本上是IP协议与上层协议的接口。了解UDP协议适用端口分别运行在同一台设备上的多个应用程序。2、清楚所研究协议的重要性,在整个协议族中的地位,作用,应用场所。3、掌握所研究协议的工作流程,画出流程图。4、在流程图基础上用C语言编写程序实现UDP协议,能读懂,写出注释。5、报告按格式书写,字迹工整,作图规范。二、设计目的了解传输层的工作方式,研究udp协议的工作流程,并画出流程图,能读懂C语言编写的实现udp协议的程序,并写上注释。三、所用仪器设备互联网,Word文档,以及相关计算机书。四、具体设计过程1UDP可靠传输机制为了解决UDP传输过程中存在的丢包、乱序等问题,在嵌入式系统网络分层体系的应用层中增加两个子层,其网络分层体系结构如图1所示。5图1UDP可靠传输网络体系结构管理应用层处理的是协议数据单元(PDU),协议适配层处理的是单个的消息数据单元(MDU)。发送数据时管理应用层接收用户数据,经过处理形成PDU帧,下发给协议适配层,协议适配层将PDU帧分解成MDU分片,下发给UDP层;接收数据时协议适配层从UDP层接收MDU分片,并组合成PDU帧,上交给管理应用层,经管理应用层处理后形成用户数据,提交给用户。在接收端,对接收完整的PDU帧进行确认,并主动对丢失的MDU分片进行批量请求重传;在发送端,响应接收端的重传请求,重传指定的MDU分片,并在确认超时后重传没有被确认的PDU帧[2~3]。不对接收的所有MDU分片进行确认,重传时也只重传指定的MDU分片,这样可以在保证数据传输可靠性的前提下,有效地提高传输效率。为实现PDU帧的确认和MDU分片的重传,对发送端所有的PDU帧统一编号,依次循环累加。接收端通过PDU帧的序号判断MDU分片从属于哪个PDU帧,并通过这个序号判断是否收到重复的PDU帧。同时,对发送端PDU帧的每个MDU分片也进行编号,从1开始到65535顺序累加,接收端通过MDU分片号,判断是否收到完整的PDU帧,并通过分片号请求重传缺失的MDU分片。2帧结构设计为实现上述的传输机制,需要在应用层重新设计发送数据的帧结构。包括面向用户数据的管理应用层PDU的帧结构,面向UDP的协议适配层MDU的报文结构,以及用于确认和请求重传的控制帧结构。62.1管理应用层帧结构管理应用层的PDU帧由PDU帧头和PDU信息组成,如图2所示。PDU帧头为帧的分片和重组提供必要的信息,PDU信息即用户提交的数据。图2管理应用层的PDU帧结构2.2适配层报文格式协议适配层的MDU分片由报文头和报文数据组成。报文头为请求重传提供必要的信息,报文数据封装PDU帧。由于以太网的最大传输单元(MaximumTransmissionUnit,MTU)最长为1500字节,而IP包头为20字节,UDP包头为8字节,为了避免在IP层对UDP报文再次拆分,限定MDU分片的数据长度不超过1450字节(保留的字节备用)。当被封装的PDU帧长超过1450个字节时,则对PDU帧进行分片。传输的数据最大可达65535×1450个字节,突破了UDP传输时报文长度不超过65535个字节的限制。报文格式如图3所示。图3适配层MDU报文格式2.3控制帧的帧结构如果接收端判断有MDU分片丢失,需要发送端重传丢失的MDU分片,则接收端通过控制帧将需要重传的MDU分片号发送到发送端,由发送端重传指定的MDU分片。控制帧还有另外一个作用,就是对接收的PDU帧进行确认。如果重传的分片个数为0,则表示接收端已正确收到PDU帧。控制帧的帧格式如图4所示。7图4控制帧的帧格式3可靠传输的软件实现在通信设备的应用软件中,通过一个独立的通信处理模块来实现UDP的可靠传输。这个模块涉及以下几项关键技术:数据缓存设计、定时器设计、接收任务设计、发送任务设计和监控任务设计。本文将详细描述在实时操作系统VxWorks下实现这些设计的方法。3.1数据缓存设计在数据传输过程中,发送方提交给UDP的是MDU分片;接收端对收到的MDU分片进行缓存,收全后组成PDU帧;当有分片丢失时,重传的也是MDU分片。因此直接存储MDU分片比存储PDU帧更能提高数据传输的效率。根据通信时不同的IP地址、PDU帧的序列号和MDU分片的分片号,设计一个三维的链表结构,用于存储发送和接收的每个MDU分片。3.2定时器设计在数据传输中,对发送方的MDU分片,需要启动定时器重发没有被确认的已发MDU分片;对接收方收到的MDU分片,需要启动定时器请求重传丢失的MDU分片。为避免接收端请求重传时发送端MDU分片被删除的情况,发送端的超时时间应大于接收端的超时时间。根据不同的网络环境和应用场合,可以通过实际测试确定最佳8的定时时间。同时,为避免请求重发无休止地循环下去,应对发送端和接收端的MDU分片都设置老化时间,当分片老化后,分片应被删除。3.3接收任务设计接收数据时通过系统接收函数从网络协议栈读UDP报文,激活接收任务。根据接收的数据内容判断是信息报文还是控制帧。如果是信息报文,则进入组合PDU帧的处理过程;如果是控制帧,则需要进一步判断是请求重传控制帧还是PDU确认帧,分别进入重传处理和帧确认处理过程。只有接收完整的PDU帧才还原为用户数据,提交给用户进行处理。数据传输的接收任务流程如图5所示。图5接收任务流程图93.4发送任务设计用户程序发送数据时,调用发送接口函数将数据发送到先进先出的队列中,通过这个队列激活通信处理模块中的发送任务。发送任务将用户数据组成PDU帧,然后对PDU帧进行分片处理,形成MDU分片,并设置MDU分片的属性(老化时间、重发超时时间和重发次数等),启动定时器;最后调用系统发送函数将MDU分片提交给UDP,由网络协议栈将所有的数据发送到目的端。数据传输的发送任务流程如图6所示。图6发送任务流程图103.5监控任务设计监控任务主要是完成发送链表和接收链表中MDU分片定时器计数,发送后没有收到确认的MDU分片的重发和老化处理,接收不完整PDU帧丢失的MDU分片的重复请求重传和老化处理。这个任务由时钟中断周期性地释放信号量激活,根据定时器的设置,可以选择50、100和200ms激活一次。监控任务的流程如图7所示。图7监控任务流程图11五、实验程序Filename:Udp.cBy:hugang,hgx2000@mail.china.com#includestring.h#includectype.h#includeArmnet.h#include../inc/44blib.hexternNODElocnode;ReturnUDPdatalength(-1ifnodata),0ifnotUDP*shortIsUdp(IPKT*ip,shortlen){UDPKT*udp;unsignedshortsum;shortdlen=0;//检查协议和最小长度if(ip-i.pcol==PUDP&&len=sizeof(UDPHDR)){udp=(UDPKT*)ip;//不要校验sum=CheckUdp(udp,swapl(READ_PACKED(ip-i.sip)),swapl(READ_PACKED(ip-i.dip)),len);if(!udp-u.check||sum==0xffff)