基于BATMAN adv协议的自组网系统研究与实现
2019-08-27王真真尹晓伟宋树丽陈书旺
王真真 黄 涛 尹晓伟 宋树丽 左 珺 陈书旺
(河北科技大学 石家庄 050018)
0 引言
无线自组织网络相比于其它网络具有系统灵活,自适应,抗故障,不需要基础设施的优点,所以在上世纪70年代一些国家对无线自组网就进行了研究。路由协议是无线Mesh网络的核心内容之一,高效、可靠的路由协议是系统正常运行的保证。本文使用BATMAN adv 路由协议实现了多跳的自组网系统。该协议路由算法在路径选择上遵循最优下一跳的原则,不需要掌握全网的拓扑结构,因其开源、轻量化、2.5层实现等特点,使其具备了提高网络传输效率和降低能耗的优势,从而受到科研开发的青睐而应用广泛[1-2]。
1 无线自组织网络的介绍
无线自组织网中的节点具有终端和转发器的功能,是一种多跳,无中心,临时的自治系统。多跳:节点发射功率是有限制的,当远距离通信时,源节点和目的节点不能直接发送信息,需要通过中间节点作为中继进行转发。无中心:每个节点都是对等的,不需要控制中心。临时性:适用于一些紧急场合,临时构成网络进行发送信息。常被用在商业,灾害和军事现场。它具有便捷和可移动的特性,是当今社会不可缺失的一种网络形式[3]。
由于网络系统经常用在突发场合,节点依靠电池进行供电,所以能量有限,如何利用有限的能量来进行数据最大的传输是当今最大的挑战之一,通过对各种自组网路由协议的比较,使用这新型的路由协议—BATMAN adv,并且对该协议进行更优的配置,提高网络的吞吐量,传输速率,降低了丢包率[4],使无线自组网的性能有了极大的提高,延长了系统的使用时间。
2 BATMAN adv路由协议的研究
2.1 路由协议原理
2.1.1 BATMAN adv介绍
BATMAN adv(Better Approach To Mobile Ad-Hoc Networking)是一种新型的无线路由协议。它是在BATMAN协议(工作在网络层)上进行改进的一种协议,所以它仍然保存着第三层的功能[5]。BATMAN adv路由协议帧采用原始以太网帧进行传输,并且它还对数据流进行处理,封装转发数据报文,直接到达目的节点。如同一个虚拟的二层交换网络,在无线自组网中使用这个协议,节点不需要保存整个网络的拓扑结构,只保存最优下一跳节点的信息,使得该协议更加轻量化,收敛速度相比于其它协议更快,运行效率相比其它也更高。
BATMAN adv协议是基于减小功耗和提高链路连接的稳定性而产生的路由协议,以LINUX内核的方式在数据链路层上运行,所以当接收到数据包时,可以在内核空间直接进行处理,实现数据快速转发,在很大程度上减少了CPU的内存。它工作在链路层,对网络层是比较透明的,所以网络层可以运行各种协议,系统灵活性更高[6]。
2.1.2 BATMAN adv数据包格式
BATMAN adv数据包有8种不同的格式,最主要的是BATADV_IV_OGM,它通常被称为OGM包,用于节点发现和路由建立,同时根据接收到的OGM包来进行链路检测。通常把OGM包代指BATMAN adv数据包,OGM报文帧格式如图1所示。
类型版本生存时间标志位序列号源节点MAC地址(前4字节)源节点MAC地址后2字节上一跳MAC地址后2字节上一跳MAC地址(后4字节)保留字段TQTVLV长度
图1OGM帧格式
有关内容说明如下:
1)类型是区分数据包的类型;
2)版本是协议的版本号;
3)序列号是为了辨别同一个OGMs是否被多处接收,区分OGM包的新旧,在路由选择中至关重要;
4)存活时间(TTL)是生存周期,也就是最大转发跳数;
5)TQ是链路传输质量,对于路径的选择起着至关重要的作用。
2.1.3 源节点数据结构
协议运行的主要目标是要维护网络中所有可达的节点列表,用作之后的路由的依据。每个节点有多个网络接口,为了减少网络开销,会选择一个主接口,作为该节点的标识,当向外广播数据包时,主接口发出的OGM的TTL为64,而其他接口为2。这样只有主接口会向二个节点以外的进行广播,减少了OGM洪泛的资源消耗。每个节点都有维护着一个结构batadv_orig_node,这个结构体中存储路由信息,并且会随着接收的OGM进行更新,下面介绍该结构体中的关键部分。
1)orig[ETH_ALEN]:本协议是第二层协议,所以代表源节点的MAC地址。
2) ifinfo_list:源节点网络接口列表。每当从一个接口接收到OGM包,如果这个接口没有在ifinfo_list列表中,会重新创建一个结构batadv_orig_ifinfo,每一个接口都有对应的结构体存储所有到该源节点的信息。
该结构包含的主要内容有:if_outgoing(发送接口);router(源节点的下一跳的信息,代表的是最下一跳,并且代表一个batadv_neigh_node结构体);last_real_seqno(收到最近 OGM 的序列号); last_ttl (最近收到的OGM的TTL值,TTL代表生存时间,经过一跳它会减一)。
3)last_seen:最近一次收到来自本源节点的 OGM数据包的时间。
4)neigh_list:所有可以到达该节点的邻居信息列表,就是中间所有能到达的邻居节点,router是它中的最优的邻居节点。每从一个新的邻居接收该源节点的 OGM ,就会创建一个batadv_neigh_node 结构体,并把它加入链表中:从中找出最优的邻居作为到达目的节点的下一跳。
5)bat_iv:里面的数据结构batadv_neigh_ifinfo_bat_iv,tq_avg是缓冲区里TQ的平均值。real_bits和real_packet_count用来计算该邻居节点的TQ值。
2.1.4 滑动窗口
通过统计节点接收到的OGM帧的数量来判断链路的质量,记录的序列号的个数是检测链路质量的准则。在网络的传输过程中,可能有的OGM帧会丢失或者信息失效,那么这种OGM需要丢弃,所以滑动窗口会不断进行更新,维护一组有效的序列号[7]。滑动窗口的原理如图2所示。
图2 滑动窗口机制
滑动窗口的大小是不变的,而窗口是随着接收到OGM的序列号的更新进行变化。当接收到的OGM的序列号在滑动窗口的范围内,仅记录OGM的信息,同时将统计计数器加1,窗口不会发生移动;当序列号比窗口中任何序列号都小时,该包将被丢弃;当序列号比窗口中的任何值都大时,滑动窗口会将它设为最新的序列号之一,窗口会向右边移动。
2.2 BATMAN adv协议算法
2.2.1 OGM的接收转发
1)节点会周期性的向外广播OGM包,它的主要功能有:告知源节点的存在,找出可能的下一跳路由;计算出可能下一跳路由的链路质量。
2)节点在收到来自其他节点的 OGM 数据包之后,按照一定的规则向外广播,使得一个节点发出的 OGM 消息可以洪泛到全网所有节点。为了减少消息洪泛的开销,对于同一个 OGM 数据包,每个节点只会接收一次。所以,一个 OGM 数据包的洪泛过程会在出现如下几种情况中的一种后停止:全网的所有节点都至少接收了该OGM数据包一次;该 OGM 数据包在链路中全部丢失;该OGM数据包 TTL 值降到 0。
3)节点把自己的MAC地址放入到OGM的消息中,然后周期性地进行广播。其它节点当收到OGM后,会根据里面的信息对该数据包进行处理。判断丢弃数据包或者更新自己的节点列表,然后再把接收到的OGM包进行转发。
2.2.2 BATMAN adv传输质量的计算
OGM消息是周期性地向外发送,那么可以通过OGM数据包进行路由度量,生成一条最优路径。在BATMAN adv路由协议中,链路度量值称为 TQ(Transmission Quality)[8]。路由度量包含本地链路质量和全局链路质量。一个节点会存储到达目的节点的多条路径的 TQ 值,当需要与其他节点进行通信时,选取拥有最大 TQ 值的传输路径作为最佳路由向外发送。
1)本地链路质量如图3所示:将发射链路质量除以接收链路质量来计算传输链路质量(TQ),向邻居节点成功传输的概率。计算公式:
TQ=EQ/RQ
(1)
图3(a)是RQ(接收链路质量):A节点参照滑动窗口记录的从邻居节点收到的OGM数据包的数量。
图3(b)是EQ(发射链路质量):观察自己的滑动窗口记录的接收到经由相邻节点转发回来的自己的OGM的数量。
图3 本地链路质量
2)全局链路质量如图4:源节点广播0GM包TQ值最大为255,接收到的OGM包的节点将自己本地的TQ(global)与接收到OGM中的TQ(received)相乘,作为转发的TQ值,所以说节点收到的TQ就是该节点到其它节点整个链路的质量,可以根据TQ值的大小判断最优下一跳,一次类推则可以求出整条链路的质量。
图4 全局链路质量
B收到A传来的TQ=100%,接收到的值与B处的TQ进行相成,得到的TQ(global)=100%*90%,用这个结果的TQ值进行数据的转发,以此类推得到C点要转发的TQ(global)=90%*80%,然后进行广播。通过全局链路质量找出最优的链路进行数据的传输提高了整个系统的传输性能[9]。
2.2.3 BATMANadv路由切换的设计
在无线自组网络系统中,当一个节点设备发生失灵或其中一个链路中断的情况时,BATMAN adv协议会根据TQ值重新计算最优下一跳,切换路径进行数据的传输,提高数据的传输速率。在不断改变的路由场景中,由节点A、节点N、节点B和节点M组合成的一个自组织网络,如图5所示。在该网格中,节点A与节点N作为两个相邻节点,当A在网格中移动时,节点A从相邻节点N的广播范围内移动到M的广播范围内,并且节点A作为节点M相邻节点,在这种情况下,A和B之间的路线将尽可能快地恢复,提高数据链路的传输效率。
图5 路由场景
3 系统配置
3.1 硬件和linux系统
选用树莓派作为节点组成自组网系统.树莓派就是小型计算机,所以它可以烧录系统,并且可以运行Linux系统。该系统选用4.9Linux内核的Debian系统,无线网卡:支持2.4GHz和5GHz IEEE 802.11.b/g/n/ac无线局域网,在2.6.38以后的Linux内核版本中已集成BATMAN adv内核模块并且Linux 内核可以实现 Ad Hoc 功能。
3.2 硬件配置
系统采用ARM处理器内核的Raspberrypi 3b作为自组织网络的通信节点,以支持2.4GHz和5GHz信道的板载无线网卡配置成网络模块,选用Debian系统作为嵌入式系统,4.9Linux-kernel内核作为开发板搭配固件内核交叉编译,可以直接载入系统运行,所以只要构建BATMAN adv协议应用程序编译成内核树模块并运行在网卡芯片中,就可以实现自组网功能。运行自组织网络程序开始时,先检测是否有节点加入该自组织网络,若是,则增加节点并且分配路由表,直接构建好自组织网络。当每个节点都分配好路由表后,自组织网络构建成功并提供给所有节点通信。
3.3 节点配置
Batctl为配置和调试batman-adv内核模块进行设计的工具,通过此工具可以显示出调试信息,如源节点列表,翻译表以及调试日志等,于是该系统利用它来对网络进行参数设置。与其他工具不同的是此工具包能够在数据链路层提供与IP标准功能相似的命令。BATMAN adv工作在数据链路层,所以寻址使用的是数据链路层的地址。通过网络工具包Batctl的使用在加上ifconfig,iwconfig等linux操作指令就可以对节点进行配置。配置之前把batctl工具在linux上进行交叉编译。
然后搭建adhoc模式,运行BATMAN adv模块,在/home/pi中创建一个batsetup-rpi3.sh的文件对系统进行配置,里面包含对个各功能的配置:
1)配置BATMAN adv路由协议的指令为sudo modprobe batman-adv,开机自动启动BATMAN adv内核模块;
2)网络模式进行配置sudo iwconfig wlan0 mode ad-hoc,使网卡在Ad hoc模式下工作;
3)将mtu设置为1532指令为 sudo ifconfig wlan0 mtu 1532:
4)wlan0是无线网卡设备名,在不同的设备上,网卡名可能不同。my-mesh-network为无线网络的服务集标识,用来区分不同的网络,无线设备要实现互相连接,需要具有相同的 essid。指令为 sudo iwconfig wlan0 essid my-mesh-network。
配置好linux系统和BATMAN adv协议以后重新启动树莓派,基于BATMAN adv协议的自组网系统就搭建完成了。
4 系统测试
无线自组网系统的节点具有移动的特性,所以路径切换,传输中选择合适的路径是系统必须研究的问题。路径切换地快慢,受传输距离、环境和ogm包的发送间隔的影响,在配置中适当地改变OGM包周期进行测试。
实验使用batctl工具,对路由协议进行配置,以及信息调试。可以实现数据链路层的ping,tr,tg等命令,对系统的传输质量、丢包情况、传输延迟、吞吐量进行了测试。通过batctl中的traceroute命令来检测节点的传输路径。由于自组网是用于自然灾害等临时场合,所以我们选择在具有障碍物的教学楼内进行测试。表1为节点地址,图6为四个树莓派的分布图。
图6 四台树莓派测试结构图
表1 节点地址
节点MAC地址设置的静态IPAb8:27:eb:ba:f1:2e10.0.0.1Bb8:27:eb:74:7b:9910.0.0.2Cb8:27:eb:4f:97:f910.0.0.3Db8:27:eb:76:d1:c910.0.0.4
4.1 发现节点
给B,C,D三台树莓派上电,在树莓派C中通过batctl工具包输入sudo batctl tg命令,可以发现周围的节B和D,并且以打印的形式把周围其它两个节点MAC地址打印出来。测试结果如图7所示。
图7 节点发现
4.2 相邻节点单跳网络
关闭A和B两台树莓派,只开启C和D并放在相邻位置,C节点作为发送节点,使用ping命令与D进行连接,实验结果如图8所示,可以发现丢包率为0,平均时延为12s,平均时延与周围的环境和两台距离相关。该节点是在有障碍物的大概12m的距离进行测试的。
图8 单跳网络
4.3 不相邻节点的多跳网络
在多跳网络中,发起节点到目标节点的数据吞吐量测试,可达到2.15Mbps的传输效率,测试结果如图9所示。
图9 吞吐量测试
当A和D不在传输范围内的时候,需要通过中间第二个节点作为中继进行转发,这里把B当作中继,对A和D进行测试的结果如图10所示。
图10 测试结果
根据图10照片可以发现,丢包率为0,最小时延为9ms,平均时延为15ms,可以发现比相邻两节点的传输时延变大,但是丢包率仍然都为0。
4.4 路径切换的多跳网络
1)如图9所示,当节点A与D通信时,由B作为中间节点,当B突然间关闭,路径的变化情况如图11所示。
图11 变化情况图
由图11可以发现刚开始把B当作中间节点进行转发,当B发生损坏时,她会重新计算TQ值,寻找新的路径,最后把C作为中间节点进行转发。由图可以发现A向D发送了57个包,但是只接收到30个,丢包率达到47%,平均时延为37ms,可见路径的切换对路径的传输效率有很大的影响。
2)添加滑动窗口保护机制的路径切换
通过增加一种保护机制来提高路由的收敛速度。由于节点刚开始时,节点的本地链表信息由于没有完成初始化,因此当接收到序列号信息并对其序列号值和本地存储的最新序列号值做差值运算得到的值可能超出正常的窗口范围,引起不必要的滑动窗口重置。进一步导致节点信息列表更新延时,降低路由的收敛速度。因此通过添加开关防止出现此情况。开关检查节点的本地节点信息列表,如果为空则关闭滑动窗口保护机制,一旦成功接受到一个信息,并且本地节点信息表中有邻居节点加入则开启滑动窗口保护机制,这样不仅防止节点的错误选路而且能在一定程度上提高路由的收敛速度。
图12 切换变化图
由图12可知当路径发生切换时,A向D发送了59个包,接收到了41个,相比于优化之前的丢包率有明显的降低,达到了30%以内,平均时延也降低达到29ms,传输效率有了明显的提高。
在已有研究基础上对该协议进行了更加深入的研究,并通过搭建系统对其性能进行了验证,由此发现丢包率和传输质量有很大的改善。由于BATMAN adv协议比较适合无线自组网拓扑结构的改变,所以在路径切换上很明显的优势。并通过滑动窗口的保护机制,在系统丢包率,传输时延和吞吐量有了很大的改善。
5 结束语
本文为BATMAN adv协议的研究以及搭建基于BATMAN adv协议的自组网系统起到一定的借鉴作用。在系统中,降低了网络的开销,不需要掌握整个网络的拓扑,就可以找出最优路径,寻找出好的下一跳,不仅适用小型的无线自组网,而且适用于多节点的大型系统,所以选择BATMAN adv协议作为自组网系统研究的路由协议,该系统是通过4个树莓派构成的网络进行的测试,下一步我们会增加系统的节点以模拟自然灾害场景下的无线自组网络系统,来对该路由协议进行进一步的测试研究。