基于Cooja的SD-IoT仿真实验平台的设计与实现*
2022-01-19孙涛蔡江涛
孙涛,蔡江涛
(内蒙古科技大学 信息工程学院,内蒙古 包头 014010)
传统的网络基础设施由不同的网络设备组成,如交换机、路由器和中间设备,其中安装了专用集成电路来执行专用任务.由于设备的资源受限性质,它们不能用多个规则来提供最佳网络服务.因此,传统的网络技术不能实时地采用适当的策略来满足物联网的特定应用需求[1-3].
为了解决传统网络中的这些局限性,提出了一种新的概念,称为软件定义网络(SDN)[4].SDN的出现为物联网带来新思路[5,6].
目前基于SD-IoT的系统开发主要分为2种,一种是基于特殊硬件的开发系统,该系统优点是简单便捷,对于初学者无需过问搭建流程,可直接上手操作,但过于依赖硬件,可移植性低,一旦硬件环境改变,该系统的开发环境也随之改变.另一种是基于开源工具搭建的仿真实验教学平台,该平台可移植性高,对硬件要求低,但是搭建流程繁琐,新手上手难度较大.在本项目研究中,采用第二种基于开源工具搭建SD-IoT仿真实验平台,可以为以后在软件定义物联网的环境下开发应用系统打下基础.
1 相关技术介绍
1.1 无线传感器网络模型
在无线传感器网络中可以有1个或几个汇聚节点和固定数量的传感器节点,所有的传感器节点都与基站有联系.无线传感器网络被设计成执行高级信息处理任务,如检测、分类和跟踪.
如图1所示,无数个传感器节点汇聚在感知区域中,传感器节点是采集数据和传输数据的综合体,先是通过传感器节点收集到数据通过几次转发、多跳的自组织传感器网络传输到网关,然后网关通过网络将数据反馈给用户[7].用户也可以通过任务管理节点,将数据传输给网关,以此控制传感器节点,向传感器节点下发控制指令.
图1 无线传感器网络模型
1.2 无线传感器网络协议栈
6LoWPAN协议是IETF推出的物联网标准协议,是为了让在功耗相对低且无线的域网上使用IPv6技术以此实现万物互联的状态,因此6LoWPAN协议又被称为无线传感器网络标准协议[8].如图2所示,无线传感器网络标准协议栈和普通网络TCP/IP协议栈相似,都分为应用层、传输层、网络层、MAC层、物理层.不同的是MAC层和物理层的协议使用了专为低功耗有损网络推出的协议.
图2 无线传感器网络标准协议栈
1.3 SD-IoT协议架构
SD-IoT架构内核的也就是软件定义无线传感器SDN-WISE(Software Defined Networking solution for Wireless Sensor Networks, SDN-WISE)是基于IEEE 802.15.4物理和MAC层.SDN-WISE的目的是为了简化网络管理,为开发新颖的应用程序以及试验新的网络提供解决方法.网络元素可以分为接收器和节点.接收器和节点之间的区别在于,前者配备了连接到基础结构网络的网络接口.因此,所有控制数据包都应设法到达接收器以离开WSN并到达控制器[9].在MAC层之上,转发(FWD)层按照WISE流表中的指定处理传入数据包.FWD层根据控制平面发送的配置更新此表,SDN-WISE协议体系架构如图3所示.
所述在网络分组处理(INPP)上转发层的顶部层运行和它负责数据聚合或其它网络内的处理操作.如果WISE流表中没有条目与当前数据包匹配,则将请求发送到控制平面.为了联系控制平面,每个节点必须知道朝向接收器的最佳下一跳.通过信标使用拓扑发现(TD)层以分布式方式计算此值.
在控制平面中,网络逻辑由1个或多个控制器和WISE-Visor决定.WISE-Visor可以抽象化网络资源,以便具有不同控制器设置的不同管理策略的不同逻辑网络可以在同一组物理设备上运行.
在接收器WISE-Visor之间有1个Adaptation层,该层负责格式化从接收器接收到的消息,以便WISE-Visor可以处理它们,反之亦然.
图3 SDN-WISE协议体系架构
1.4 网络协议分析工具
在Contiki系统中自带一款开源、功能强大的网络分析工具Wireshark,可以直观地看到网络数据传输情况.Wireshark有权限对数据包进行跟踪、抓取、数据分析,并且Wireshark自带的过滤器对初学者很友好,可以清除大量冗余信息.该工具的使用可以让使用者更全面更透彻地理解到软件定义物联网网络原理,更熟悉各传感节点传输的数据,为在SD-IoT上设计系统、改进协议和网络实验打下良好的基础.从图4可以看到Wireshark捕获到的TCP包中的每个字段.
1.5 SD-IoT网络操作系统
物联网是由射频识别、智能传感器、通信技术和互联网协议的最新发展推动的.Cooja模拟器是1个专门为无线传感器网络设计的网络模拟器.Cooja中模拟的Contiki Mote是1个实际编译和执行的Contiki系统.该系统由Cooja控制和分析.这是通过将本机平台的Contiki编译为共享库,并使用Java本机接口(JNI)将库加载到Java中来实现的.在同1个Cooja仿真中可以编译加载几个不同的Contiki库,代表不同种类的传感器节点(异构网络).Cooja通过几个功能控制和分析Contiki系统.例如,模拟器通知Contiki系统处理1个事件,或者获取整个Contiki系统内存进行分析.这种方法使模拟器能够完全控制模拟系统.不幸的是,使用JNI也有一些恼人的副作用.最重要的是对外部工具的依赖,比如编译器和链接器以及它们的运行时参数.Cooja最初是为Cygwin/Windows和Linux平台开发的,后来移植到了Mac OS.运行Cooja需要Java版或更高版本.此外,构建Cooja也需要构建工具ant.Contiki是1个面向物联网的开源操作系统.Contiki将微型低成本、低功耗微控制器连接到互联网,是构建复杂无线系统的强大工具箱.
安装Contiki操作系统只需要在ubuntu操作系统的虚拟机上部署,如图5所示,通过官网下载的Instant Contiki操作系统拥有完整的Contiki开发环境,对硬件要求极低,可移植性高,开发方式便捷,还自带一些仿真工具,十分适合SD-IoT的环境开发.
图4 Wireshark分析数据所对应的TCP数据包
图5 Contiki操作系统下的文件列表
2 SD-IoT仿真实验平台设计
2.1 SD-IoT仿真实验平台的总体设计
本实验说明了如何在虚拟机(VM)中使用SDN-WISE,Cooja,Mininet和ONOS部署虚拟网络搭建构建成1个软件定义物联网环境.本实验设计的目标是创建1个由ONOS控制的集成网络,其中OpenFlow交换机的虚拟网络可以与仿真的SDN-WISE无线传感器网络的节点进行通信.
2.2 SD-IoT仿真实验平台的搭建
先下载Instant Contiki,安装VMWare Player,然后启动Instant Contiki.运行启动Instant Contiki Instant_Contiki_Ubuntu_12.04_32-bit.vmx.等待虚拟Ubuntu Linux启动.登录到Instant Contiki,密码是user.
打开Contiki系统后,在环境中安装一些需要的软件及编译软件.通过以下指令安装下载SDN-WISE, Contiki, Mininet和SDN控制器ONOS的源代码.如图6所示.
当下载安装完毕后,需要对ONOS进行编译,配置环境.输入下列指令,完成对控制器的编译.
echo "export ONOS_ROOT=~/onos" >> ~/.bashrc && source ~/.bashrc
source $ONOS_ROOT/tools/dev/bash_profile
cd ~/onos
tools/build/onos-buck build onos --show-output
tools/build/onos-buck run onos-local--clean debug
编译完成后,基础环境已经搭建完毕,下一步开始要搭建软件定义物联网环境.
步骤一:传感节点的创建.
启动Cooja模拟器,在终端输入以下命令
cd~/sdn-wise-contiki/contiki/tools/cooja/ && ant run
打开Cooja模拟器,在Setting-extensions中找到SDN-WISE-emulated,部署SDN-WISE,如图7所示.
创建新的模拟后,输入仿真名称为SD-IoT,点击Create.如图8所示,Cooja带来了新的模拟的Network Window,左边的屏幕顶部,显示了模拟网络中的所有Motes,它现在是空的,因为我们还没有在网络中增加节点.Timeline Window,在屏幕的底部,显示随着时间的推移模拟中的所有通信事件,这很方便地了解在网络传播中所发生的状态.该Mote Output窗口中,在屏幕的右侧,显示了所有的微尘所有串口打印输出.在Notes window右上角可以记录实验过程中的数据、问题以及一些小想法.Simulation Control Window是开始,暂停和重新加载仿真的地方.
图7 在cooja中部署sdn-wise-emulated
图8 SDN-WISE-Cooja模拟器
下一步就是在虚拟网络上添加JAVA仿真的SDN-WISE节点.首先要添加1个Sink节点,点击Motes -> Add motes -> Create new mote type -> SDN-WISE Emulated Sink.汇聚节点添加完,可以类似添加一些传感节点.
单击Tools -> Radio messages.将会出现1个新窗口.此窗口将显示有关通过无线电发送的消息的所有详细信息.检查接收器是否可以直接或通过多个跃点访问所有节点.单击1个节点来查看它.将会出现1个绿色圆圈.选中区域可以到达绿色区域内的所有节点.有1个灰色圆圈,该圆圈表示节点的干扰区域.因为需要与外部控制器进行交互,所以在“模拟控制”窗口中单击Speed Limit并选择100%.添加成功后的View Zoom如图9所示.
图9 传感节点和汇聚节点
步骤二:连接ONOS控制器及测试连通性.
通过在ONOS中编写简易的Dijkstra路由算法,以此来检测网络连通性.接收器节点是网络中接收用户发送的消息的第一个节点.它检查其WISE流表,若找不到匹配的规则,便询问控制器.控制器提供到达目的地的路径并发送相应的规则.该路径中的节点学习规则,可保证正确转发消息.
当节点收到自身的消息时,它将在Mote输出窗口中打印有效负载.如图10所示.
图10 Dijkstra路由算法的实现
如果要整体看到网络拓扑结构,可以检查浏览器,将看到ONOS已经识别出整个网络,此时,即可以在Mininet主机和SDN-WISE节点之间路由数据包了.如图11所示.
图11 ONOS控制器下的整体网络拓扑结构
3 结语
文章介绍了SD-IoT仿真实验平台的具体搭建流程,相比于利用开源工具搭建实验环境的方法,该方法更便于初学者的快速掌握。实验证明,该仿真平台具有一定的可靠性,可移植性强。