Part 01
6LoWPAN是什么
为了使低速无线设备接入互联网, 通常需要增加一个中间节点,中间节点通过应用层程序,进行数据翻译和转发。随着万物互联时代的到来,家庭智能硬件越来越多,通过这种方式,数据需要层层拆封,翻译,组装,转发,导致中间节点负荷过高,数据转发效率很低,且在不同异构网络间(比如Wi-Fi、ZigBee、BLE)通信时,中间节点需要支持多种协议,开发难度较大。随着IPv6的普及,基于低速无线局域网构建IPv6协议栈的6LoWPAN技术应用成为一种趋势,此方案中,每一个低速设备分配一个唯一的IP地址,在数据传输阶段,中间节点仅变成一个网络通道,不再依赖应用层程序,不再需要关心应用层数据,只需要在网络层进行报文的路由和转发,从而使得家庭内部异构网络的链路层之上完全统一起来。
图1 异构网络拓扑图之间加入中间节点
6LoWPAN(IPv6 over Low power Wireless Personal Area Network), 是一种基于IPv6的低功耗无线个域网标准,即IPv6 over IEEE 802.15.4。它是IETF互联网领域的一个工作组的名称。6LoWPAN是一个网络层协议,定义了封装和报头压缩机制,允许通过IEEE 802.15.4的低速网络,发送和接收较大IPv6数据报文。
Part 02
6LoWPAN方案有哪些优势
数据可达性及传输效率高:每一个BLE设备都有一个唯一的IP,支持端到端IP寻址,只需要一个路由器即可将数据通过中间节点多跳转发到目标节点;并且不是每一帧数据都到应用层,转发效率更高。
支持跨域互访、更多的地址空间和无状态自动地址配置:因为IPv6的应用,可在全网直接定位,无需NAT转换,不同网段间通信可直接互访;并且有了海量的地址空间,满足了部署大规模、高密度低速个域网设备的条件;另外无需路由分配,即可无状态的自动分配地址。
普及性、适用性:IP网络应用广泛且IP网络协议栈架构受到广泛的认可,对于网络层及以上的开发者,不再需要关心具体链路层的协议,而单纯当做一个IP设备来进行管理,开发简单且开发效率更高。
支持低功耗:在6LowPAN网络中,叶子节点可以睡眠进入低功耗。
灵活度大:其为物理层提供了全面的支持,在不同频带和物理媒介上构建网络提供足够的自由度。
Part 03
基于BLE之上的构建6LoWPAN的原理
BLE网络作为一种低速无线个域网,BLE设备接入互联网以及BLE网络与其他异构网络之间通信,一直是业界广泛关注的问题。下面,小编就以6LowPAN技术在BLE网络的应用为例,来说明6LowPAN的原理。
图2 基于BLE的6LoWPAN端到端数据通信协议模型
如图2,BLE设备与网关建立链路层及L2CAP连接之后的端到端数据通信协议模型,对于一个节点,与网关建立连接之后,发送数据时应用层将构建一个普通的IP数据包,发送到网络层,网络层收到数据后,将其路由到一个虚拟网络设备(B)进行6LoWPAN分片、封装,然后一个个转发到蓝牙协议栈,进行L2CAP封装,最后通过BLE链路层发送出去。
接收数据时,BLE链路收到数据,移除L2TP头,然后路由到虚拟网络设备(B)进行6LoWPAN解封、组装,恢复出IPv6原始报文,然后转发到标准IP网络层。
Part 04
● Linux系统上如何基于BLE构建6LoWPAN ●
由于Linux 内核早期就已经支持蓝牙协议栈,3.2内核主线版本加入了对6LowPAN的支持,然后随着蓝牙4.0发布之后,低功耗蓝牙BLE的诞生,蓝牙4.2发布,BLE开始支持6LoWPAN,所以在linux系统上,基于BLE构建6LoWPAN变得十分容易。
本节,作者将使用两台ubuntu PC 两个BLE蓝牙dongle,手把手带大家学习如何在linux系统上,基于BLE构建6LoWPAN,最后通过BLE链路,完成两个BLE设备之间的IP报文的交换,以此验证6LoWPAN是否成功构建。
注意:本实验中,Ubuntu版本使用14.04,其中内核版本使用3.8.4;BLE蓝牙dongle使用CSR8510 BT5.0版本。
4.1 BLE从机配置
1)、确认系统上蓝牙驱动安装成功
图3 从机上蓝牙设备详细信息
2)、加载支持BLE的6lowpan内核模块
modprobe
注:若系统中不存在此内核模块,请重新配置并编译内核。
3)、开启6lowpan功能,并让蓝牙设备多路复用支持此新协议
echo 62 > /sys/kernel/debug/bluetooth/6lowpan_psm
4)、作为从机,开启广播通告,周期的向周围广告广播数据
hciconfig hci0 leadv 0
4.2 BLE主机配置
1)、确认系统上蓝牙驱动安装成功
图4 主机上蓝牙设备详细信息
2)、加载支持BLE的6lowpan内核
modprobe
3)、开启6lowpan功能,并让蓝牙设备多路复用支持此新协议
echo 62 > /sys/kernel/debug/bluetooth/6lowpan_psm
4.3 BLE主机扫描并连接从设备
1)、扫描设备,获取从设备的mac地址
hcitool
2)、连接从设备
echo "connect 8C:88:2B:42:3F:17 1" >/sys/kernel/debug/bluetooth/6lowpan_control
其中1,是蓝牙地址类型,1表示公共地址;2表示随机地址。
8C:88:2B:42:3F:17是第一步中获取的从设备MAC地址。
3)、如何判断设备连接成功
一旦6lowpan建立成功,则在主从机上敲ifconfig命令,将会发现系统多出一个名为bt0的虚拟网络设备。
如下所示:
从机网口
图5 从机上bt0虚拟网络设备信息
主机网口
图6 主机上bt0虚拟网络设备信息
4.4 从机使用ping命令,验证两个BLE之间的IPv6连通性
ping6 -I bt0 fe80::8e88:2bff:fe21:b552
图7 主从机之间ping6通信
可见,主从机之间已经可以通过BLE链路交换IPv6的报文;由此可知,在linux系统上,基于BLE构建6LoWPAN是成功的。
4.5 连接成功/失败的内核日志
在执行连接操作时候,通过tail -f /var/log/syslog 进行内核日志查看。
4.6 BLE主机主动断开连接
echo "disconnect 8C:88:2B:42:3F:17" > /sys/kernel/debug/bluetooth/6lowpan_control
Part 05
总结
综上,在linux系统上,基于BLE构建6LoWPAN十分容易,基于其他低速无线局域网构建6LoWPAN原理相同。所以在多个异构网络之间,通过构建6LoWPAN,让家庭内部异构网络之间的链路层之上完全统一起来,具有很强的可操作性。相信随着万物互联的到来,随着IPv6的普及,6LoWPAN在家庭网络中的重要性将会更加显现,应用性会更加广泛。