本文将详细介绍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数据报文。
➤ 数据可达性及传输效率高:每一个ble设备都有一个唯一的ip,支持端到端ip寻址,只需要一个路由器即可将数据通过中间节点多跳转发到目标节点;并且不是每一帧数据都到应用层,转发效率更高。
➤ 支持跨域互访、更多的地址空间和无状态自动地址配置:因为ipv6的应用,可在全网直接定位,无需nat转换,不同网段间通信可直接互访;并且有了海量的地址空间,满足了部署大规模、高密度低速个域网设备的条件;另外无需路由分配,即可无状态的自动分配地址。
➤ 普及性、适用性:ip网络应用广泛且ip网络协议栈架构受到广泛的认可,对于网络层及以上的开发者,不再需要关心具体链路层的协议,而单纯当做一个ip设备来进行管理,开发简单且开发效率更高。
➤ 支持低功耗:在6lowpan网络中,叶子节点可以睡眠进入低功耗。
➤ 灵活度大:其为物理层提供了全面的支持,在不同频带和物理媒介上构建网络提供足够的自由度。
ble网络作为一种低速无线个域网,ble设备接入互联网以及ble网络与其他异构网络之间通信,一直是业界广泛关注的问题。下面,小编就以6lowpan技术在ble网络的应用为例,来说明6lowpan的原理。
图2 基于ble的6lowpan端到端数据通信协议模型
如图2,ble设备与网关建立链路层及l2cap连接之后的端到端数据通信协议模型,对于一个节点,与网关建立连接之后,发送数据时应用层将构建一个普通的ip数据包,发送到网络层,网络层收到数据后,将其路由到一个虚拟网络设备(b)进行6lowpan分片、封装,然后一个个转发到蓝牙协议栈,进行l2cap封装,最后通过ble链路层发送出去。
接收数据时,ble链路收到数据,移除l2tp头,然后路由到虚拟网络设备(b)进行6lowpan解封、组装,恢复出ipv6原始报文,然后转发到标准ip网络层。
● 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版本。
1)、确认系统上蓝牙驱动安装成功
图3 从机上蓝牙设备详细信息
2)、加载支持ble的6lowpan内核模块
modprobe
注:若系统中不存在此内核模块,请重新配置并编译内核。
3)、开启6lowpan功能,并让蓝牙设备多路复用支持此新协议
echo 62 > /sys/kernel/debug/bluetooth/6lowpan_psm
4)、作为从机,开启广播通告,周期的向周围广告广播数据
hciconfig hci0 leadv 0
1)、确认系统上蓝牙驱动安装成功
图4 主机上蓝牙设备详细信息
2)、加载支持ble的6lowpan内核
modprobe
3)、开启6lowpan功能,并让蓝牙设备多路复用支持此新协议
echo 62 > /sys/kernel/debug/bluetooth/6lowpan_psm
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虚拟网络设备信息
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
综上,在linux系统上,基于ble构建6lowpan十分容易,基于其他低速无线局域网构建6lowpan原理相同。所以在多个异构网络之间,通过构建6lowpan,让家庭内部异构网络之间的链路层之上完全统一起来,具有很强的可操作性。相信随着万物互联的到来,随着ipv6的普及,6lowpan在家庭网络中的重要性将会更加显现,应用性会更加广泛。
友情链接