batman-adv是一种新型的无线路由协议,工作在2层,已经在linux中实现。
https://www.open-mesh.org/projects/batman-adv/wiki/Wiki
主要是对上面网站的学习、翻译、部署实现与记录
1.介绍
大多数无线路由协议的实现都工作在3层,它们通过发送UDP包来交换路由信息,并通过操纵(manipulating)内核路由表来实现路由选择。
Batman-adv则是在2层工作的——路由信息通过原始以太帧(raw ethernet frames)传输,数据流量也是经过Batman-adv。它封装(encapsulates)并转发所有数据直到到达目的地址,所以可以仿真一个所有节点参与的虚拟网络交换。所有节点都具有本地链接,并不知道网络拓扑,不会受到任何网络变化的影响。
它的设计具有以下特征:
l 与网络层无关,在上层可以运行任何协议:IPv4,IPv6,DHCP…
l 节点可以加入mesh网络而不需要IP地址
l 很容易加入非mesh的客户端(比如移动节点),而不需要手动配置
l 非mesh客户端漫游(roaming)
l 可以最优化经过mesh网络的数据流(比如:接口选择,广播,转发修正)
l 依靠mesh节点和非mesh节点的广播和多播来运行协议
2.内核模块
如果节点无法按照路由发送或者转发以太网数据包,2层路由协议也需要处理数据流量(data traffic)。在用户层面处理数据包需要占用大量CPU周期,每个包都需要进行读和写到内核的操作并返回,会限制(影响)网络的可用带宽,尤其是对低速设备。因此把batman-adv部署到了内核,这样即使在高负载情况下也只是引入了很小的包处理开销。
Batctl工具
用来安装和调试batman-adv内核模块。
可以设置和查看模块的状态信息。
包含了2层版本的网络工具,例如ping,traceroute,tcpdump,虚拟网络交换对所有2层之上的协议都是透明的。
用于配置:
l 添加和删除mesh网络中的接口
l 设置或者更改batman-adv 模块的属性
l 使能 batman-adv 模块的功能参数
用于debug:
l Ping 和 traceroute 节点,基于mac地址
l 解析日志用于发现路由环路
l 检索 batman-adv模块的活动信息
l 列出网络中其它mesh或non-mesh节点
l 列出gateways