收藏 分销(赏)

一种嵌入式网络协议栈框架的研究与应用.doc

上传人:仙人****88 文档编号:9343804 上传时间:2025-03-22 格式:DOC 页数:7 大小:274.50KB
下载 相关 举报
一种嵌入式网络协议栈框架的研究与应用.doc_第1页
第1页 / 共7页
一种嵌入式网络协议栈框架的研究与应用.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述
一种嵌入式网络协议栈框架的研究与应用 (1. 西安理工大学机械与精密仪器工程学院,陕西 西安 710048; 2. 西安交通大学电子与信息工程学院,陕西 西安 710049) 摘要:本文提出了一种嵌入式网络协议栈框架。其中,系统抽象层用于提高协议栈的可移植性;连接层用于实现协议栈的多连接管理及其访问控制管理;通信接口层改进了目前嵌入式协议栈与网络应用程序的交互方式;而Socket Lib用于兼容BSD socket API,使网络应用程序可以直接应用于该嵌入式协议栈框架中。 关键字:嵌入式系统;嵌入式网络协议栈框架;通信接口层 Research in a Framework of Embedded Network Protocol Stack and Application Abstract: This paper introduces a network stack’s framework based on embedded systems. In order to improve the portability of the stack, this paper puts forward the system abstraction layer. For the maintainability, the multi-connection management of the stack and the access control, connection layer is introduced. Communication interface layer enhances the transaction way between the stack and the application. In order to compatible with the BSD socket API to make network applications applied directly in the embedded protocol stack framework , this paper designs and implements the Socket Lib. Key words: embedded system ; embedded network stack framework ; communication interface layer 互联网应用进入嵌入式互联网的时代已经来临[1]。而实现嵌入式网络化的前提就是要实现嵌入式网络协议栈[2]。对嵌入式操作系统有不同的分类方法。如可以分为实时操作系统和分时操作系统;而在本文中,便于下文的叙述,对嵌入式操作系统进行了新的分类,其分类的依据是考察嵌入式操作系统是否支持用户态和内核态的运行模式[3],即双态系统和单态系统。 对于双态系统,网络协议栈一般是运行在内核态,而网络应用程序运行在用户态。由于两者之间的通信需要借助于操作系统提供的服务,所以运行在双态系统上的协议栈与网络应用程序之间的通信与操作系统是紧耦合的。对于单态系统,由于系统运行模式无内核态与用户态之分,所以网络应用程序可以直接调用网络协议栈提供的服务。即运行在单态系统上的协议栈与网络应用程序之间的通信与操作系统是松耦合的。 由此可见,网络协议栈与网络应用程序之间的通信方式在双态系统和单态系统之间的差异直接导致了在单态系统上实现的协议栈不容易移植到双态系统上,反之亦然。这也是传统的嵌入式网络协议栈的共同特点。 1. 一种嵌入式网络协议栈框架的提出 为了有效的解决上述问题,本文提出了一种基于嵌入式系统的网络协议栈设计框架EPFramework。 图1 EPFramework框架结构图 从模块上来看,该框架一共包括了7个模块,一个模块对应一个功能。相邻的模块与模块之间存在着相互调用的关系。箭头的方向表示了模块之间的调用关系,箭头所指向的模块表示该模块调用了箭头另一端的模块。 从层次上来看,该框架分为5层。层与层之间都存在调用的关系。从下往上看,下层作为服务的提供者,上层则利用了下层提供的服务。层与层之间通过每一层提供的接口来进行通信。 2. 基于EPFRAMEWORK的嵌入式网络协议栈的设计与实现 2.1 系统抽象层 系统抽象层的具体实现与嵌入式操作系统和硬件平台紧密相关。通过对系统抽象层的分析和设计,该层主要是针对网卡驱动程序、操作系统内存管理、定时管理、信号量操作[6]和任务管理等方面提供的功能进行封装。 为此该层在实现上主要是考虑两个问题:一是提供统一的调用接口供上层协议栈调用;二是根据具体的嵌入式硬件软件平台来实现这些接口。 2.2 内存管理 汲取伙伴系统算法的优点,设计使用若干个链表来记录空闲块的情况,同时用一个链表来记录使用情况。 1) 使用链表 使用链表对应着系统分配给协议栈的所有的内存区域。也就是说使用链表里面所链接的元素不仅有正在被使用的内存块,同时也有空闲块,这些内存块被统一链接在使用链表里面。 2) 空闲链表 空闲链表对应着若干个链表。其中每一个链表链接着属于同一范围的内存空闲块。不同的空闲链表链接着不同范围的空闲块,并且它们表示的范围没有重叠的区间。同时每个空闲链表表头中存放了它所链接的所有的空闲块中的最大的那个空闲块的大小MAX,这样做的好处是可以提高查找的效率。 3) 内存的分配和回收 有内存分配的请求时,可以根据其请求的大小不需遍历就可以直接定位到对应的链表的表头。同时根据其表头中存放的MAX判断是否可以申请到。找到合适的空闲块以后,分配给用户以后,还需要对这一个被分配的空闲块剩余的空闲块进行处理。如果剩余的空闲块的大小太小,那么分配的时候就把这个空闲块全部分配给用户;反之,就把剩下的空闲块链接到相应的空闲链表中;这样可以有效的提高内存的利用率。图2展示了协议栈内存初始化与分配情景。 在内存回收的时候,在使用链表中查看该释放块的上、下内存块是否有空闲块,如果有,则可以合并更大的空闲块,同时修改对应的空闲链表和使用链表。 图2 协议栈内存初始化与分配情景 2.3 定时器 定时器是为特定的应用服务的,特定的应用决定了定时器应该采用何种精度。定时器是通过定时器控制块(Timer Controlling Block,简称TCB)来标识和管理的。程序也是通过TCB来感知定时器的存在。 定时器设计思想是:设计一个用于管理定时器的hash表。建立hash表的时候必须要实现某种策略来解决hash冲突,项目中采用链地址法。假设hash函数的值域为[0,N-1],考虑到嵌入式协议栈可能用到的定时器的数量有限,该hash表可以用数组形式来存放。那么可以建立一个指针型向量timerManager[N];不同的TCB中的timeOut通过hash函数处理以后有可能会产生相同的hash地址i,那么就可以把这些TCB按照特定的排序方式链接在以timerManager[i]为头节点的同一个链表里面。至于如何把这些发生冲突的TCB进行排序则采用时差排序[4]方法;同时采用一个变量currentTime来标示当前时刻指向哪个链表。 2.4 连接层 构建该连接层的目的是为了实现对协议栈多连接、访问控制的管理和屏蔽传输层中实现的各种协议的具体的差异,为上层提供统一的接口。这样使得提供给上层使用的API更加简洁,同时也有利于对协议栈的维护。所谓为上层提供统一的接口就是:连接层维护了一组数据结构来管理TCP、UDP传输活动的情况,而上层的对TCP、UDP协议的使用实际就转化为对这些数据结构的操作。 2.5 通信接口层 设计通信接口层是用来屏蔽不同类型的嵌入式操作系统在应用层和协议栈之间通信方 面的差异。从而提高了协议栈在不同嵌入式操作系统上的可移植性,弥补当前嵌入式协议栈在设计上的不足。 通信接口层由上层通信接口和下层通信接口组成。通信接口层的主要功能就是规定好一系列的接口。而用户在不同的嵌入式操作系统之上可以选择不同的通信方式来实现这些接口。具体来讲,在单态系统中,上层通信接口和下层通信接口采用直接调用的方式即可实现;在双态系统中,上层通信接口在用户空间实现,下层通信接口在内核空间实现。以uClinux操作系统(双态系统)为例,下层通信接口通过编写一个提供ioctl功能的字符设备驱动程序,而上层通信接口的实现中只需要调用该字符设备提供给用户空间使用的ioctl功能即可。 2.6 Socket Lib 设计完通信接口层后,就可以通过通信接口层提供的API完成网络通信了。但是还存在一个问题,就是目前已经在某操作系统下工作正常的网络通信程序并不能在新实现的网络协议栈之上运行,原因就是这两者提供了不同的socket API。为此Socket Lib的作用就是为了兼容某一标准的Socket,如BSD Socket。 Socket Lib的设计思想就是对协议栈提供的上层通信接口进行进一步封装,从而实现BSD Socket提供的API[5],达到兼容的目的。封装的具体做法就是先定义BSD Socket用到的各种数据结构,如保存套接口的地址信息等数据结构;然后对这些数据结构的操作转化为对用户实现的嵌入式网络协议栈中的数据结构的操作。 图3中总结了连接层、通信接口层与Socket Lib层之间函数调用的关系: 图3 连接层、通信接口层与Socket Lib层之间函数调用的关系 3. 测试与应用 基于本文提出的框架实现的嵌入式网络协议栈测试环境如下:其中,目标机的硬件环境采用基于ARM7架构的S3C44b0开发板,该开发板具有2个串口、1个Rtl8019网络接口、2M Flash、8M SDRAM;运行uClinux操作系统(当加载基于本文提出的框架实现的协议栈时,uClinux自带的协议栈需被裁减)。宿主机的硬件环境是Pentium(R) 4 CPU 2.00GHZ, 512MB,2.02 GHZ的内存。 测试内容:目标机上的服务端程序每次发送1k字节大小的数据包(对于N*1k字节大小的数据包而言需要发送N次),然后等待接受客户端发送过来的数据后,继续发送剩下的数据包;宿主机上有一网络应用程序,负责接收到服务端一个数据包后,再把大小为1k的数据包发送给服务端。在如此情况下,分别先后把本文实现的网络协议栈与uClinux网络协议栈部署到目标机上,研究待发送的数据包的大小(N*1k字节)与消耗时间的关系,实验结果如图4所示: 图4 数据包大小-时间关系 通过以上数据表明,基于本文框架实现的协议栈在性能上高于uCLinux自带的网络协议栈。利用本文提出的框架实现的网络协议栈已经应用到“项目”中,取代了原有的Modem远程通信方式,在项目应用中取得了很好的效果。 4. 总结 本文提出的框架能够有效的适用于嵌入式网络环境。不仅弥补了当前很多的嵌入式网络协议栈在双态系统中可移植性差的缺点,而且基于本文提出的框架实现的网络协议栈在可维护性和可扩展性方面都是比较有优势的。但还需进一步增加嵌入式系统网络安全模块和增加协议栈的应用层功能等,进一步完善框架的实用性。 参考文献 [1] Howard M Sontag.Bringing the Intemet to All Electronic Devices[M].Proceedings of the Embedded Systems.Cambridge, USA, 1999, 3. [2] 赵海, 嵌入式Internet-21世纪的一场信息技术革命[M].北京:清华大学出版社.2001.23-25. [3] Alessandro Rubini, Jonathan Corbet. Linux Device Driver 2nd[M].USA: O'Reilly, 2004.14-120. [4] 何先波,殷峰.面向通信领域的定时器队列管理模型[J].西南民族大学学报(自然科学版).2005, 31(4):601-605. [5] Klaus Wehrle Frank Pahlke, Hartmut Ritter, Daniel Muller Marc Bechler. Linux network architecture design and implementation of network protocols in the Linux kernel[M]. USA: Prentice-Hall.2006.423-424. [6] 陈莉君,康华.Linux操作系统原理与应用[M].北京:清华大学出版社,2006.1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服