移动自组织网络(Mobile AdHoc Network,MANET)作为一种多跳、无中心、无需任何固定基础设施、自组织的无线网络,可实现网络节点的快速展开。由于移动自组织网络的节点多是嵌入式设备,其硬件资源有限,因此设计一种可靠、有效的缓冲区管理机制,在移动自组织网络协议的设计实现中就显得尤为重要。
1 数据链路层设计
数据链路层的主要问题包括媒介接入控制,以及数据的传送、同步、纠错和流量控制等。文中所涉及的数据链路层的设计中,MAC层采用无竞争的TDMA协议,网络中各节点将被分配固定时隙;LLC层则采用选择性自动重传技术、滑动窗口技术分别实现差错控制和流量控制。根据选择性重传技术的实现算法,结合移动自组织网络协议的实现需求,同时考虑采用捎带应答的方式实现对于数据帧的确认,数据链路层的数据帧由数据信息和控制信息两部分构成。其中数据信息为有效的应用层的数据信息,控制信息为选择重传所需的正确接收或需要重传的帧编号,以及反映网络中各链路状态(链路是否中断,链路负荷是否已满)的信息等。
LLC层设计主要包括数据收发设计和缓冲区管理机制设计,其中数据收发设计实现数据在LLC层上的处理过程,包括数据的接收、数据的分类(分离数据帧的数据信息和控制信息并分别进行相应的处理)、组帧及发送;缓冲区管理机制负责数据的基本存取,根据缓冲区状态实现数据的存取控制,同时生成控制信息。
2 LLC层缓冲区管理
2.1 缓冲区的分配策略
缓冲区的分配一般有静态分配和动态分配两种策略。静态分配为系统提供了最好的可靠性与实时性,但使系统失去了灵活性,必须在设计阶段预先知道所需要的内存并对之作出分配,必须对内存按最坏情况进行最大的配置。而动态分配实现机制灵活,却是以牺牲一定的可靠性与实时性为代价。两种分配策略各有利弊,各有适应的场合,文中根据数据链路层的设计方案,采用一种将静态分配与动态分配相结合的策略,来实现LLC层的缓冲区管理。
2.2 LLC层的缓冲区设置
由于网络中的节点可能是源或中继,且需要利用自动重传技术,因此LLC层的缓冲区类型设置为以下几种:
① 待发送本地业务缓冲区,用于存放应用层下传的待发送的各个数据包,该缓冲区块数根据嵌入式设备的物理内存情况和物理层发送数据帧的字节数确定为一固定值。
② 中继缓冲区,本节点为中继节点时,用于存放待发送的转发业务数据包,其大小由数据信息的长度、滑动窗口的大小和每个节点的最大中继能力共同确定。
③ 控制信息缓冲区,用于存放LLC层数据帧的控制信息,由于网络状态多变,该缓冲区的大小无法确定。
同时,为了及时准确地将待发送数据和相关的链路状态组帧发送出去,满足自组织网络的可靠性需求和自组织特性,需要对上述三个缓冲区的数据进行有效的管理,因此设计了缓冲区记录模块和缓冲区管理模块。前者记录缓冲区的当前状态、本节点涉及的链路及其状态等,后者则主要负责缓冲区的存取操作,它们和三个缓冲区一起构成了文中所设计的LLC层缓冲区管理方案的关键部分。
2.3 总体设计
根据两种缓冲区分配策略的优缺点,并结合所设置的三个缓冲区的特点,文中将采用静态分配的方式为待发送本地业务缓冲区和中继缓冲区分配内存空间,而采用动态分配的方式为控制信息缓冲区分配内存空间,同时为了最大程度地减少动态分配时内存碎片发生的概率,采用参考文献[1]提出的自适应缓冲区管理分配方法,将动态分配缓冲区的定义与内存的实体分配两个过程分离来考虑。
根据缓冲区的设置方案,文中采用数据与缓冲区状态分离机制,整个LLC层缓冲区管理总体架构如图1所示。

图1 缓冲区管理总体架构
当收到外部的命令时,缓冲区管理模块对命令进行分析处理,查询缓冲区记录,根据缓冲区的状态决定执行什么操作,然后访问缓冲区,存入或返回数据。对于此架构,总体实现流程如图2、图3所示,图3中N的取值和数据帧的字节数设计有关。

图2 缓冲区总体流程图(接收)

图3 缓冲区总体流程图(发送)
2.4 详细设计
2.4.1 数据的零拷贝策略
由于中继缓冲区内存放的数据将按需转发,同时选择重传算法需要在发送方建立重发表(即发送缓冲)用于超时或出错时的重传,这样会涉及把中继缓冲区中的数据拷贝到对应的各张重传表中,造成数据对内存的重复占用。为了节约有限的内存空间,文中采用数据零拷贝策略,减少对数据的拷贝,使用指针结构作为参数传递给各重发表。这样不必另行开辟独立的发送缓冲,可以提高有限资源的利用率,当需要重传时,通过指针即可方便快捷地找到所需数据。
2.4.2 缓冲区数据存储模块设计
(1) 存储结构示意图
如图4所示,结构中以位示图(0或1)标识某缓冲区数据数组的某位上是否有数据。

图4 缓冲区数据存储结构
(2) 流程图
该模块的操作主要包括往某缓冲区放入数据、从某缓冲区取数据以及读数据,并进行缓冲区状态的判定,主要算法流程如图5所示。

图5 缓冲区数据存储模块流程
2.4.3 缓冲区管理模块设计

图6 存储数据
该模块的操作主要是对存取数据以及存取控制信息的管理,涉及三个缓冲区的存取操作。其中存储、取出数据的管理流程如图6、图7所示。而对存取控制信息的管理则相对简单,只需将已发送数据的确认信息,以及数据缓冲区的状态变化、相关链路状态等信息依次放入控制信息缓冲区,或从控制信息缓冲区中取出相关控制信息,与数据信息一起封装成数据帧。

图7 取出数据
2.4.4 缓冲区记录模块设计
该模块用于记录缓冲区的当前状态、链路及其状态等重要信息,缓冲区管理模块必须借助该模块对缓冲区实施管理。该模块的操作较为简单,只需如图8所示的结构存储相关记录,并适时存入有关记录信息,或从该结构中读取有关记录信息,同时清空已取出记录即可。
3 半实物仿真测试分析
3.1 仿真环境
设置32节点仿真场景,其中3个为实物节点,采用以Samsung公司S3C2440为核心的基于VxWorks的ARM系统开发平台实现,其余29个节点为虚拟节点。仿真场景参数设置如表1所列,半实物仿真软件基于Windows 7环境编写。
3.2 仿真结果
32个节点初始分布如图9所示,且在运动场景中,移动节点分布在5跳范围内。
表1 仿真场景参数设置


图8 缓冲区记录模块存储结构

图9 节点初始位置分布
在该场景中,测试节点在低速移动(36 km/h)至高速移动(108 km/h)时,在相同的拓扑环境下,相同路径的投递率情况(投递率:移动自组织网络中目的节点接收到的数据包总个数与源节点发出的数据包总个数之比,用于测试网络数据的传输性能,投递率越高说明网络数据的传输性能越好),测试结果如图10所示。

图10 投递率随速度变化
可以看出,随着移动速度的增加,投递率下降,这是因为网络拓扑变化越快,链路状态变化越快,但是整个网络的投递率属于正常范围,网络性能优良。同时经过反复、长时间的连续测试,实物节点未出现内存崩溃、死机等现象。
半实物仿真的测试结果表明,这种内存静态分配与动态分配相结合的缓冲区管理机制,能够保证系统可靠、稳定地运行,并能够保证较高的网络数据投递率,是一种高效的协议栈管理机制,完全符合移动自组织网络的实际需求。
结语
移动自组织网络协议栈根据应用背景而可有多种设计方案,文中仅根据某种数据链路层的设计方案,提出了LLC层的缓冲区管理机制。网络协议栈的其他缓冲区管理机制亦可参考文中的设计思路,以协议栈的性能更高、缓冲区的管理更灵活、内存资源利用率更高、系统更可靠稳定等需求为依归,设计出有效合理的管理策略。