谁有做任务的微信群多余的微信

您的访问出错了(404错误)
很抱歉,您要访问的页面不存在。
1、请检查您输入的地址是否正确。
进行查找。
3、感谢您使用本站,1秒后自动跳转当前位置: >
VxWorks下UDP协议栈效率的研究与改进
摘要 电信网与计算机网的融合是一种趋势。在实时嵌入式操作系统VxWorks环境下,使用以太网上的UDP协议,高效传输电信业务的信令与数据。描述在此情况下,根据实际需求对以太网传输中网络设备驱动程序与UDP协议栈进行改进的研究与探索。关键词 VxWorks UDP 协议栈效率 网络设备驱动
1 使用VxWorks标准UDP协议栈存在的问题&&& 在VxWorks标准的IP协议实现的前提下,其UDP协议的实现存在于IP层。在VxWorks中有一个网络任务(亦即进程),用于完成以太网包的收发处理及与各种网络协议的接口,其名为tNetTask,优先级低于一般的系统任务而高于应用程序任务。系统的上层网络协议,如Telnet、FTP等,在服务器端有一个相应的任务,处理网络任务转交过来的数据报。&&& 应用程序想要实现UDP数据报的收发,就要使用操作系统提供的socket编程接口,主要包括创建socket,绑定socket和源IP与端口号,发送UDP数据报和接收socket中收到的内容。在VxWorks中有4个函数与之相对应,分别是:socket()、bind()、sendto()和recvfrom()。在VxWorks操作系统中,socket号是与文件打开描述符(fd)同样管理的,一个socket与源IP和一个源端口相对应。Sendto()函数调甩时指明目的的IP地址和服务端口号。&&& 本文描述的UDP协议栈使用背景可简要描述如下:该系统使用的主要硬件CPU平台是摩托罗拉公司的MPC860的CPU,主频为50 MHz;操作系统使用美国WindRiver公司的VxWorks。系统中各个设备(均有以太网接口)之间要在以太网上进行信令与语音、数据业务的传输,各种数据包采用统一的消息头编码格式。&&& 使用标准UDP协议栈最大的问题是效率。在该系统平台上,网络传输的速率成为最大的瓶颈,并由此影响了系统的容量。根据测试的极限速率,使用10M以太网的实际有效传输速率仅有1.8 Mb/s,使用100M以太网口电没有明显的提高。另外,还有一个问题,网络任务经常会挂起,在开机运行较长时间后此现象尤为明显,这对系统的可用性和无故障工作时间构成威胁。而项目的目标是实现高效稳定的以太网包处理。
2 改进UDP协议栈的思想与理由&&& 根据对VxWorks操作系统的研究,发现它对以太网包的处理与一般的IP协议栈有所不同。MAC层的控制由硬件寄存器来实现,实现了发送方以太网帧的成帧和接收的以太网帧头确认以后,通过DMA方式实现内存与网络介质间的通信,网络任务与硬件之间通过设备中断进行通信。在该操作系统中,有一个MUX层,它提供统一的发送函数,其参数为发送的网络设备管理表指针和发送的数据报指针。我们知道,在一个有多个网络设备同时工作的计算机系统中,标准的IP协议栈要完成选取从哪个网络设备端口(gate way)发送和判断ARP的Cache中是否有对端的MAC地址,从而决定是否启动ARP进行解析。在VxWorks中。是通过查Route表和ARP表来完成以上两项工作的。Route表中储存的是与每一个通信的子网的gart way,ARP表中储存的是已知的IP地址与MAC地址的对应关系。另外,数据报接收的处理过程中是在IP数据报存入内存后申请MUX层的队列缓冲区,然后依次调用各上层协议的处理函数。&&& 根据以上情况,考虑在MUX层修改UDP协议栈,在发送过程中,跳过socket接口,直接使用MUX层的发送函数。这样,可以减少从UDP层网络数据报缓冲区到MUX层缓冲区之间的复制工作,从而提高发送效率。在接收数据包的处理过程中,在MUX层收到数据报后钩挂(hook)一个处理函数,对UDP协议的数据包进行分检,优先于其他协议的处理。这样可减少从MUX层缓冲区到UDP层网络数据报缓冲区之间的复制,而且可以不再要求上层使用轮诲的方法检查socket的缓冲区中的内容,提高了处理的实时性。3 改进UDP协议栈出现的新问题&&& VxWorks的muxLib类库中允许用户自己定义一个协议栈,将协议栈绑定到一个具体的网络端口上,同时要有一个处理函数对该网络设备上收到的包进行处理。加载改进后的协议栈要先创建一组缓冲区,每种缓冲区对应不同的数据报长。预先分配一大块内存,可避免发送数据包时再去分配内存,并可根据各种长度的数据报的使用频度申请不同个数的缓冲区。发送过程中,要填写IP首部的其他内容,如协议版本号、UDP协议编号、idenfication域、IP首部校验和等等。在填写的过程中,可以有意识地按照CPU的作业宽度和整数边界进行内存赋值,提高发送效率。在接收过程中,要先判断是否为UDP协议的数据报(根据第24字节为Oxll),然后做合法检验。对本协议栈处理的数据报,处理后要将其从MUX层的缓冲区队列中删除,未删除的数据报由其他协议的处理函数处理。&&& 经过对协议栈的改进发现,在单向收发的环境下,发送效率提高了3倍左右;但是接收方效率的提高很不尽如人意,而且稳定性仍然存在问题,在运行几十小时后,网络任务的挂起现象出现得仍很频繁。关于接收方的问题,原因是:接收方的网络任务每收到一个包,从设备缓冲区搬移到应用缓冲区,然后切换到应用程序任务进行处理,处理结束以后再切换到网络任务收下一包,如果接收速度高于处理速度就会造成阻塞。下面举一个形象的例子:某个酒吧只有一个服务员,假设这个服务员要做两件事情,有顾客来的时候要到门口去给顾客开门,然后再到柜台为顾客服务,顾客依到达次序排队。假设门口和柜台之间的移动时间不能忽略,并且为顾客开门的优先级比较高,就是说如果有新顾客到来,必须先放下正在服务的顾客去开门。在这种情况下,如果顾客的到来间隔是均匀的,为每一位顾客服务要服务员跑两趟。如果顾客到达的间隔比较小,就出现服务员在门口和柜台之间频繁移动的情况。假如能使顾客分拨到达,每次有多个顾客到达,服务员就可以从柜台到门口开门让多个顾客进入,再回柜台为顾客服务。试验证明,在这种模型下接收效率能大幅提高,但是对均匀到达的顾客服务效率的提高难以得到解决。
4 深入网络设备驱动&&& 经过对操作系统更为深入的研究发现,MUX层的发送数据包最终是通过调用网络设备驱动程序中的发送函数实现的。分析网络设备驱动的代码发现,其发送过程可描述为:&&& ◇检查设备缓冲区(BD表)是否有可用BD;&&& ◇根据设备缓冲区的可用情况与发送数据包的长度,判断是否需要进行分片;&&& ◇根据设备缓冲区的可用情况决定传输发送还是拷贝发送;&&& ◇置位设备控制寄存器,启动DMA传输,并引发设备收发中断;&&& ◇清除使用过的设备缓冲区。&&& 另据分析,在设备驱动的安装过程中完成的工作有:&&& ◇根据配置数据申请内存,构建设备缓冲区表;&&& ◇指定DMA使用的通道与工作方式;&&& ◇配置设备寄存器(工作方式、帧类型、设备缓冲区表指针等);&&& ◇连接设备中断处理例程。&&& 接收过程中,是在网络设备收到数据包后启动DMA传输至内存,并引发中断,在中断处理程序中处理缓冲区指针,然后将一个函数处理指针写入一个环型缓冲区,最后是释放一个信号量,通知网络任务对收到的数据包进行处理。通过对该接收处理函数的反汇编解读,发现它的主要工作是申请MUX层的缓冲区并复制,处理设备缓冲区的指针,然后调用各个协议的处理函数。&&& 根据以上的认识,有了一个更为大胆的设想:跳过MUX层,直接使用driver的发函数进行发送;在接收过程中,对本协议栈的数据包不再申请MUX层的缓冲区,而是直接拷贝到应用层缓冲区,并可将处理接口留给用户。另外一个想法是,直接在中断处理例程中进行处理,从而彻底抛弃网络任务。据此在百兆网络设备上完成了修改,其效率又提高将近l倍,满足了使用的要求;而且更为可喜的是,系统的稳定性大幅提高。5 结论与数据分析&&& 几种情况下的测试结果如下:
&&& 通过对上述数据的分析看出,使用MUX层的协议栈组发环境下,比使用标准协议栈发送的效率提高3倍左右,但是在均匀收发的情况下提高并不明显。直接使用中断方式克服了这一缺陷,比均匀收发的环境下又提高1倍。&&& 但是这个测试结果只是在短包的情况下完成的,包长在100字节以下。通过对长包的测试,发现对512字节以上的长包的影响要稍微小一些。这是因为在同一速率下,使用长包调用的次数要少,改进的效果也就稍差,特别是在CPU主频更高的环境下,这一现象更为明显。
6 对实时操作系统的一点看法&&& 通过对设备驱动的研究发现.在实时操作系统中,中断处理例程的处理时间都比较短,这也是实现实时性的一个重要思想。在改进中,中断处理例程中加入了执行代码,会影响系统的实时性,似乎违背了实时操作系统的初衷。但笔者认为,这个问题要在实际的环境下进行评价,中断中的通知网络任务与网络任务的执行,两者加起来的时间一定要比只在中断中处理需要的时间要长。这与IP包处理机的目标也是没有矛盾的,完全不必拘泥陈规。实时系统只是追求平均的响应时间较短,而在最差情况下则远低于平均水平。
?上一文章:
?下一文章:
& &评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright &
. All Rights Reserved .
页面执行时间:20,484.38000 毫秒ML605网口+UDP协议 - fsFengQingYangheihei的博客 - CSDN博客
ML605网口+UDP协议
网口通信协议
名词解释:
Transmission Control Protocol(TCP,传输控制协议)
User Datagram Protocol(UDP,用户数据报协议)
Internet Protocol& (IP,网际协议)
Internet Control Message Protocol (ICMP,网络控制报文协议)
Internet Group Management Protocol (IGMP,网际主机组管理协议)
Address Resolution Protocol (ARP,地址解析协议)
Reverse Address Resolution Protocol(RARP,逆向地址解析协议)
一、TCP/IP基本工作原理
TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图所示
TCP/IP通信过程如图所示
二、各个协议简介
1、以太网通信协议
网口通信采用以太网通信协议 IEEE802.3
以太网帧格式:
前导码:0x55、0x55、0x55、0x55、0x55、0x55、0x55、0xD5。在UDP协议下的前导码。
目的地址:表示该帧将要到达的目的MAC地址;
源地址:发起该帧的源主机接口的MAC地址;
帧类型:表示该帧将用什么协议来处理,如果值是0x0806,则表示将该帧交给ARP协议处理,也就是说这一帧是一个ARP帧;如果值是0x0800,则表示将该帧交给IP协议处理,也就是说这一帧是一个IP帧。
IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。它的特点如下:
不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是 A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
IP报文头格式:
&(1)版本号 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务 占8位,默认为0,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。只有在使用区分服务时,这个字段才起作用。&
(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。&
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum&Transfer&Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。&
(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。&
(6)标志(flag) 占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More&Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。&
● 标志字段中间的一位记为DF(Don’t&Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间 占8位,默认是0x40,生存时间字段常用的的英文缩写是TTL(Time&To&Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。用于验证数据完整性,计算方法为,首先将校验和位置零,然后将每16位二进制反码求和即为校验和,最后写入校验和位置。
(11)源IP地址 占32位。
(12)目的IP地址 占32位。
3、ARP协议
ARP协议是通过IP地址获得对应的MAC地址,称为地址解析协议。
ARP报文格式:
以太网目的地址:表示该ARP帧将要到达的目的MAC地址,对于ARP请求报文中是广播地址:0xFF-FF-FF-FF-FF-FF;
硬件类型:表示硬件地址的类型,描述二层协议。它的值为1表示以太网地址;
协议类型:表示要映射的协议地址类型,描述三层协议。它的值为0x0800即表示IP地址;
硬件地址长度:指二层硬件地址的长度,对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6;
协议地址长度:指三层协议地址的长度,对于以太网上IP地址的ARP请求或应答来说,它们的值分别为4;
操作类型(OP):描述该数据包所做的ARP动作(1表示ARP请求、2表示ARP应答);
发送端MAC地址:发送方设备的硬件地址,告诉对方自己是谁(二层);
发送端IP地址:发送方设备的IP地址,告诉对方自己是谁(三层);
目标MAC地址:接收方设备的硬件地址,最终接受该ARP包的网络接口的MAC地址;
目标IP地址:接收方设备的IP地址,最终接受该ARP包的网络接口的IP地址。4、ICMP协议
ICMP经常被认为是IP层的一个组成部分。它传递差错以及其他需要注意的信息。ICMP报文通常被IP层或更层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。
&&& ICMP报文是在IP数据报内部被传输的,它封装在IP数据报内。如图所示
ICMP报文格式:
& 所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。
& 类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。
各种类型的ICMP报文如所示,不现类型由报文中的类型字段和代码字段来共同决定,本协议只用到请求回显。
目的不可达
源端被关闭
请求回显,回显应答(ping)
路由器通告,路由器请求
超时(TTL为0,分片组装超时)
时间戳请求应答
地址掩码请求应答
请求回应和回显应答
&& Type(8)是请求回显报文(Echo);Type(0)是回显应答报文(Echo Reply)。
请求回显或回显应答报文属于查询报文。Ping就是用这种报文进行查询和回应。
ping是ICMP的一种,是用来检查网络是否通畅或者网络连接速度的命令。
请求回应和回显应答过程如图所示
5、UDP协议
& UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间高速传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP是非常实用和可行的网络传输层协议。
&& UDP协议不提供端到端的确认和重传功能,它不保证信息包一定能到达目的地,因此称为不可靠协议。
UDP主要特点:
1) UDP是面向事务的协议,它用最少的传输服务为应用向其他程序发送报文提供了一个途径。
&2) UDP是无连接的、不可靠的传输机制。在发送数据报前,UDP在发送和接收两者之间不建立连接。
&3) 数据分组的封装和解包都建立在UDP使用的协议端口上。
&4) UDP让应用能直接访问Internet层的数据报服务,例如分段和重组等Internet层所提供的数据报服务,UDP应用也提供。
&5) UDP使用IP协议作为数据传输机制的底层协议。
&6) UDP报头和数据都以与最初传输时相同的形式被传送到最终目的地。
&7) UDP不提供确认,也不对数据的到达顺序加以控制。因此UDP报文可能会丢失。
&8) 不实现数据分组的传送和重复检测。
&9) 当分组没有被传送时,UDP不能报告错误。
&10) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、发送端和接收端主机性能的限制。
UDP段格式:
& 用户数据报UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由4 个字段组成,每个字段都是两个字节。
& 在UDP协议,IP首部中协议类型是0x11。
相关代码请联系我
我的热门文章
即使是一小步也想与你分享 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Vx Works下UDP协议栈效率的研究与改进
下载积分:1500
内容提示:Vx Works下UDP协议栈效率的研究与改进
文档格式:PDF|
浏览次数:0|
上传日期: 11:32:30|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
Vx Works下UDP协议栈效率的研究与改进
官方公共微信

我要回帖

更多关于 微信怎么删除多余标签 的文章

 

随机推荐