在基于VxWorks的实时网络中统计UDP丢包率的方法_第1页
在基于VxWorks的实时网络中统计UDP丢包率的方法_第2页
在基于VxWorks的实时网络中统计UDP丢包率的方法_第3页
在基于VxWorks的实时网络中统计UDP丢包率的方法_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在基于VxWorks的实时网络中统计UDP丢包率的方法朱建民作者介绍:朱建民,男,硕士研究生,1980-,研究方向:操作系统,实时系统;张晔,男,博士研究生,1983-,研究方向:操作系统,实时系统;陈香兰,女,博士研究生,1977-,研究方向:操作系统,实时系统; 龚育昌,女,博士生导师,1943-,研究方向:数据库,算法,操作系统,超媒体 张晔 陈香兰 龚育昌中国科学技术大学电脑科学技术系,合肥,230027摘要 在基于VxWorks实时局域网中,如何统计及定位UDP(user data packet)的丢包率对许多应用是十分重要的,目前还没有理想的解决方法。本文在用标准SNMP协议实现网

2、络监测功能的基础上,通过扩展MIB与在TCP/IP协议栈中插入协议封装层的方法有效的解决了UDP丢包的统计与分析问题。关键词 SNMP MIB SNMP扩展 TCP/IP协议栈封装层 UDP丢包A Method to Take Count of Lost UDP Packet in VxWorks based Real-Time LANZhu Jian-min, Zhang Ye, Chen Xiang-lan Gong Yu-Chang(Department Of Computer Science And Technology Of USTC, He Fei , 230027)Abstrac

3、tIn VxWorks real-time network, How to take count of lost UDP packets and to locate the source is very important for some applications. There is not a perfect method to solve the problem at the moment. In this paper, a method to solve this problem effectively is presented. The method is realized by e

4、xtending SNMP MIB and TCP/IP stack.KeywordSNMP MIB Extending SNMP Extending TCP/IP stack UDP lost packet学习文档 仅供参考学习文档 仅供参考学习文档 仅供参考1 引言TCP/IP网络传输层协议有TCP 与UDP两种,UDP协议比TCP简单,使用时发送方与接受方不用建立连接,无流量控制、报文序列等控制措施,能够到达较高的通信速率,且占用网络节点资源少,因此UDP协议广泛于实时系统的数据业务之中。但UDP的优点也正是它的缺点:它不能保证传输的可靠性。当网络节点任务较繁忙或网络流量较大的时候,会出

5、现不可忽略的UDP丢包现象。而且如何统计丢包的准确数据、定位丢包位置、分析丢包原因是一个疑难问题,更不必说如何根据分析结果修改各模块参数以降低丢包率了。对于使用VxWorks的实时网络应用系统来说,VxWorks只有支持网络管理代理功能的组件WindNet SNMP,没有自己的网络管理程序。目前流行的网络管理程序如OpenView虽然可以管理支持所有SNMP协议的网络节点,但它只是网络管理部分,不能扩展被管理的网络节点的代理功能,即不支持相应的丢包统计功能,而且它价格不菲,消耗资源太多,不符合嵌入式系统网络管理的需求。基于UDP的可靠数据传递技术RUDP是通过在UDP传输层与应用层之间插入一个

6、实现流量控制,确认重发的适配层来实现的,它虽然可解决UDP丢包问题,但相当于在UDP层之上增加了个TCP层,增加了在实时系统中不可忽略的网络节点与网络信道的负载。本文介绍了一种基于SNMP扩展及TCP/IP协议扩展来统计及分析UDP详细丢包的方法,不但能够精确统计任意两个节点之间的UDP丢包数,还能够定位丢包的位置,用户可据此分析丢包原因,然后根据原因得到相应的解决方案,将丢包率减少到可以忽略的水平。 2相关技术分析SNMP是目前最广泛使用的网络管理协议。使用SNMP协议的网络管理系统主要工作内容:管理进程通过定时向各个设备的设备代理进程发送查询请求消息(以轮询方式),来跟踪各个设备的状态;这

7、些轮询消息的发送和接受规程及其格式定义都是由SNMP协议定义的;而被管理设备将其各种管理对象的信息都存放在一个称为管理信息库MIB,Management Information Base中。VxWorks通过组件WindNet SNMP实现SNMP代理的功能。WindNet SNMP代理是个运行于被监测网络节点上的任务,它从网络管理工作站接收数据包,然后解析协议包,处理并调用对应的MIB变量处理例程来处理,然后创建响应包并将它发送给网络管理工作站。MIB工具将简明的MIB格式或SNMP格式的MIB文档转化成代理使用的更高效的文件格式。 WindNet SNMP支持查询MIB所有内容,如TCP,

8、UDP,IP,INTERFACE等。代理和传输层无关。WindNet SNMP MIB容易扩展,MIB编译器可自动产生MIB访问大部分代码,可动态增加或删除MIB变量,这给系统带来了很大的灵活性,本文的UDP丢包统计功能正是通过扩展MIB来实现的。鉴于SNMP协议是RFC标准协议,绝大部分操作系统平台都支持,平台兼容性好,而且WindNet SNMP可扩展性好,用户可以方便的添加自己的变量信息。因此本文采用在SNMP协议基础上实现VxWorks实时局域网网络监测功能,并通过扩展MIB库与TCP/IP协议栈实现数据包丢包统计与定位功能。3网络监测系统实现方法3.1网络监测系统体系结构网络监测系统

9、包括两大部分:多个被监测的VxWorks网络节点各种嵌入式设备、 一个监测网络的网络管理工作站也是基于VxWorks平台的)。图1显示了整个系统模块结构图。 图1 VxWorks网络监测系统结构图SNMP管理模块图形界面模块数据存储模块标准MIB处理模块扩展的MIB处理模块SNMP代理模块被监测的网络节点网络管理工作站网络管理工作站侧主要有:SNMP管理模块、数据存储模块、用户图形界面模块三部分。被监测节点上主要有:SNMP代理模块、标准MIB库处理模块、实现丢包统计需扩展的MIB处理模块。SNMP管理模块是必需的,它完成接受用户输入将其转换为标准SNMP数据包发送到相应的网络节点之上。数据存

10、储模块可以用文件实现,也可以用数据库实现,甚至可以在另一台主机上实现,数据通过网络发送到此主机上处理。用户图形界面模块也可以根据需要进行取舍。被监测的网络节点包括:SNMP代理模块,标准的MIB处理模块,扩展的MIB处理模块。SNMP代理模块完成接受网络管理工作站发过来的SNMP数据包,然后解析协议包,处理并调用对应的MIB变量处理例程来处理,然后创建响应包将它发送给网络管理工作站。标准的MIB处理模块用来处理对标准的MIB变量的读写。扩展的MIB处理模块用来处理统计UDP丢包功能。 其中图1阴影部分为完全需要自己设计编码实现的功能,其他部分是VxWorks本身提供,但需配置的功能。3.2基本

11、处理流程1. 用户在网络管理工作站通过图形界面发送查询命令查询各网络节点的状态变量。2. SNMP管理进程将用户命令封装成SNMP包,将其发送给指定的网络节点。3 .网络节点上SNMP代理进程接受SNMP包,解析出对特定MIB变量的查询命令,假设要查询标准MIB变量,直接查询标准MIB即可;假设要查询自定义的变量,如UDP丢包信息,则需调用扩展MIB处理例程,查询扩展的MIB。4. 调用相应MIB库的处理例程,将查询得到信息转换成标准格式回送给SNMP管理进程。5. SNMP管理进程将数据交给数据存储模块保存,并通过图形界面显示给用户。4扩展TCP/IP协议栈实现统计及定位UDP丢包4.1UD

12、P/IP协议机制及丢包的可能位置分析根据分析VxWorks网络协议的实现机制,UDP包从发送网络节点侧一进程发送到接受网络节点侧一进程接受,数据详细流程如图2,图中序号1到6标示了可能的丢包位置。分析图2 所示的6种UDP的丢包位置,得到的详细丢包原因及解决方法如表1所示。由于VxWorks开放的源代码与提供的回调函数有限,不能提供细粒度的监测功能。故本系统将丢包位置划分为三个部分:发送网络节点侧, 网络上包括交换机,接受网络节点侧。 统计出这三部分的丢包数,从而可以进一步判断丢包的具体原因。4.2UDP丢包统计的变量定义client 进程将数据放入用户缓存IP层对大的UDP包进行分片,并将待

13、发送的数据放入接口队列之中交换机存储转发数据包传输层对UDP分组进行校验,将数据拷贝到用户缓存IP层对曾分片的数据包重新组装,再将其放入插口队列网卡中断处理函数将数据从网卡缓存拷贝到内核缓存,放入IP输入队列图2 UDP的丢包位置分析布传输层数据链路层网络层以太网以太网网卡驱动将数据拷贝到网卡缓存传输层将数据拷贝到内核缓存应用层Server进程取数据*3*6*5*4*2*1因为SNMP协议标准MIB库不足以解决监测UDP丢包的问题,必须要扩展MIB库,增加实现UDP丢包监测所需的变量。表2列出了所需增加的变量及其语义说明。其中1-4是监测的原始变量,5-15是统计变量。UDP丢包统计系统从时刻

14、0开始启动,到时间t, 时间单位根据需要定义,如每隔10s查询一次丢包情况,则单位为10秒。先将局域网中存在的N个节点编号为1, 2, N。表2中i, j满足 0<i, j< N +1。统计UDP丢包需定义的变量及计算方法如表2所示。由表2可得 UTLi,j,t = USLi,j,t+UNLi,j,t+URLi,j,t假设USLi,j,t占UTLi,j,t比重比较大时,说明发送方是丢包的主要原因。假设UNLi,j,t占UTLi,j,t比重比较大时,说明网络是丢包的主要原因。假设URLi,j,t占UTLi,j,t比重比较大时,说明接受方是丢包的主要原因。通过此参数可看到整个局域网的丢

15、包变化情况。如想进一步IP,目标IP类型来统计不同的变量值。区分UDP包是单播、多播还是广播,再增加变量,如表3所例如,在协议封装层中根据数据包的源根据要增加的变量,可以进一步写出单播、广播、组播的丢包计算公式。由变量语义可得 USLi,j,t = UUSLi,j,t + UBSCi,j,t + UMSCi,j,t对于发送网络节点侧应用层、数据链路层、接受网络节点侧丢包位置序号详细原因解决方法发送网络节点侧丢包1发送进程发送UDP包的频率太快,网卡驱动来不及处理,导致接口队列溢出降低发送速率,如两次发包之间加延时网络上丢包2网络信道质量不好,导致部分包网卡接受不到或不能正常接受改善网络信号质量

16、,如更换网线3交换机带宽不够,导致缓存溢出或以太网包发送冲突频繁而丢包更换大容量的交换机,或设置信道优先级,保证重要的业务不被阻塞接受网络节点 侧丢包4接受网络节点侧IP输入队列不够大,而网卡某段时间内频繁接受的数据来不及处理就被覆盖掉增大接受侧IP输入队列5发送进程发送的UDP包太大,UDP包比网络接口层限定的MTU大的多,导致分片太多,从而增加丢包的可能性,因为只要丧失其中的一个数据片就会导致接受网络节点IP层包重组出错,导致整个UDP包丧失减少发送网络节点侧的UDP包大小,对大的数据块应用层发送前先分割成小的数据块6UDP接受进程的优先级太低,长时间得不到执行,不能及时接受并处理UDP包

17、导致特定套接口队列溢出提升UDP接受任务的优先级,对于重要的业务,其任务的优先级相应的要高。表1 UDP丢包原因及解决方法序号变量含义简写计算公式1编号为i的节点应用层向编号为j 的节点应用层发送的UDP包总数USCi,j原始变量2编号为i的节点应用层从编号为j的节点应用层接受的UDP包总数URCi,j原始变量3编号为i的节点数据链路层向编号为j的节点数据链路层发送的UDP包总数EUSCi,j原始变量4编号为i的节点数据链路层从编号为j的节点数据链路层接受的UDP包总数EURCi,j原始变量5t时刻编号为i的节点应用层向编号为j的节点应用层发送的UDP包总数USCi,j,tt时刻查询到的USC

18、i,j6t时刻编号为i的节点应用层从编号为j的节点应用层接受的UDP包总数URCi,j,tt时刻查询到的URCi,j7t时刻编号为i的节点数据链路层向编号为j的节点数据链路层发送的UDP包总数EUSCi,j,tt时刻查询到的EUSCi,j8t时刻编号为i的节点数据链路层从编号为j的节点数据链路层接受的UDP包总数EURCi,j,tt时刻查询到的EURCi,j9i节点发送到j节点的UDP丢包个数UTLi,j,tUSCi,j,t - URCi,j,t10其中在i节点侧丧失的UDP包的个数USLi,j,tUSCi,j,t - EUSCi,j,t11在网络中丧失的UDP包的个数UNLi,j,tEUSC

19、i,j,t - EURCj,i,t12在j节点侧丧失的UDP包的个数URLi,j,tURCj,i,t - EURCj,i,t13整个局域网的UDP丢包个数UTLt - 14整个局域网的UDP丢包率UTLRtUTLt/ 15单位时间整个局域网的UDP丢包个数AUTLtUTLt UTLt -1表2 统计UDP丢包需定义的变量及计算方法编号为i的节点应用层向编号为j的节点应用层发送的单播UDP包数编号为i的节点应用层向编号为j的节点应用层发送的广播UDP包数编号为i的节点应用层向编号为j的节点应用层发送的组播UDP包数UUSLi,j,tUBSCi,j,tUMSCi,j,t表3 统计单播、广播、组播丢

20、包增加变量例如数据链路层,可以根据目标IP地址,区分UDP包是单播包、组播包、还是广播包;但对于接受网络节点侧应用层,已经得不到接受IP地址,无法区分包类型。4.3统计应用层与数据链路层的数据的实现方法统计计算方法均以表2中1-4的原始变量值为基础展开的。主要是统计表2种1到4这4个原始变量的值,即应用层的发送接受UDP包数,数据链路层发送接受的UDP包数。在VxWorks系统中,通过在socket接口之上及以太网驱动与IP层之间插入封装层实现这4个变量的统计的。对于应用层,在socket接口之上增加一个封装层,封装socket API,封装层的socket API为SendToWrap ,R

21、ecvFromWrap。SendToWrap 主要流程:调用sendto 发送UDP包,再获得要发送UDP包的原IP与目标IP地址,查询相应的网络节点编号i,j,USCi,j 变量加1。 RecvFromWrap流程与SendToWrap类似。对于数据链路层,VxWorks网络体系结构是设备相关层与设备无关层分开,不同的网卡驱动初始化时向设备无关层注册其接口函数,其中注册的部分源代码是开放的。显然我们可以利用这一点,直接修改其注册函数,在其驱动接口上面加一个封装层,在封装层中实现统计数据链路层发送接受的各种数据包的个数。封装层的发送,接受数据帧的回调函数EthSendToWrap, EthRe

22、cvFromWrap, 截获其发送与接受的数据包,分析其类型,刷新相应的变量,对于要分片的UDP包,应用层的一个UDP包对应数据链路层的几个数据片,根据IP头部的分片信息可以知道哪些数据片是属于同一个数据包的,对于发送或接收到同一个数据包的多个数据片,EURCi,j,t, EUSCi,j,t都只会计算一次。EthRecvFromWrap主要流程:获得接受的数据包缓冲头指针,根据UDP,IP数据包报头结构及以太网帧结构,查询数据包类型,如果发现是UDP类型,而且这个UDP帧与上一个接受到的UDP帧不属于同一个UDP数据包中不同分片,查询数据包源、目标IP对应的网络节点编号i,j,EURCi,j,

23、t 变量加1,再将数据包传给IP层处理。EthSendToWrap流程与EthRecvFromWrap类似。5测试及结果分析5.1 丢包统计实验实验目的:验证本文的方法实现的丢包统计系统有效性。实验环境:在模拟测试的局域网之中:两台主机,一台 CPU为AMD Athlon XP2000+,主频1.67G, 一台为AMD Athlon XP1800+,主频 1.53G。它们通过网线连到CISCO 2960SX交换机上。它们的VxWorks bootrom都是以pc386为BSP。实验结果:连续发10000个包,发送与接受任务优先级均为0VxWorks 任务优先级最高为0,最低为255,测试结果如

24、表4,表5所示。发送包的大小(byte)641282565121024204840968192总的丢包个数4456691216发送节点侧的丢包个数33344444接受节点侧的丢包个数112225812网络上的丢包个数00000000表4 发送任务两次发包之间不延时丢包测试结果发送包的大小(byte)641282565121024204840968192总的丢包个数123334811发送节点侧的丢包个数00000000接受节点侧的丢包个数123334811网络上的丢包个数00000000表5 发送任务两次发包之间延时5ms丢包测试结果结果分析:由表5可见,随着包的增大,丢包的趋势增加,当UDP包大小大于MTU(1700个字节)时,丢包可能性增大,因为IP层对数据包分片,接受方重组时,任何一片丧失,即被认为是丧失了。由表4可见,当发送任务两次发包之间不延时时,丢包主要原因除接受方之外,还有发送方发包速率太高的原因。因此本环境下解决丢包的方法是:1降低发送任务的发包速率。2 减低UDP包的大小5.2 对实时性的影响测试实验目的:主要关心增加了扩展机制即在TCP/IP协议栈中增加了socket客户端API封装层及以太网驱动封

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论