孫濤,蔡江濤
(內蒙古科技大學 信息工程學院,內蒙古 包頭 014010)
傳統(tǒng)的網絡基礎設施由不同的網絡設備組成,如交換機、路由器和中間設備,其中安裝了專用集成電路來執(zhí)行專用任務.由于設備的資源受限性質,它們不能用多個規(guī)則來提供最佳網絡服務.因此,傳統(tǒng)的網絡技術不能實時地采用適當的策略來滿足物聯(lián)網的特定應用需求[1-3].
為了解決傳統(tǒng)網絡中的這些局限性,提出了一種新的概念,稱為軟件定義網絡(SDN)[4].SDN的出現(xiàn)為物聯(lián)網帶來新思路[5,6].
目前基于SD-IoT的系統(tǒng)開發(fā)主要分為2種,一種是基于特殊硬件的開發(fā)系統(tǒng),該系統(tǒng)優(yōu)點是簡單便捷,對于初學者無需過問搭建流程,可直接上手操作,但過于依賴硬件,可移植性低,一旦硬件環(huán)境改變,該系統(tǒng)的開發(fā)環(huán)境也隨之改變.另一種是基于開源工具搭建的仿真實驗教學平臺,該平臺可移植性高,對硬件要求低,但是搭建流程繁瑣,新手上手難度較大.在本項目研究中,采用第二種基于開源工具搭建SD-IoT仿真實驗平臺,可以為以后在軟件定義物聯(lián)網的環(huán)境下開發(fā)應用系統(tǒng)打下基礎.
在無線傳感器網絡中可以有1個或幾個匯聚節(jié)點和固定數量的傳感器節(jié)點,所有的傳感器節(jié)點都與基站有聯(lián)系.無線傳感器網絡被設計成執(zhí)行高級信息處理任務,如檢測、分類和跟蹤.
如圖1所示,無數個傳感器節(jié)點匯聚在感知區(qū)域中,傳感器節(jié)點是采集數據和傳輸數據的綜合體,先是通過傳感器節(jié)點收集到數據通過幾次轉發(fā)、多跳的自組織傳感器網絡傳輸到網關,然后網關通過網絡將數據反饋給用戶[7].用戶也可以通過任務管理節(jié)點,將數據傳輸給網關,以此控制傳感器節(jié)點,向傳感器節(jié)點下發(fā)控制指令.
圖1 無線傳感器網絡模型
6LoWPAN協(xié)議是IETF推出的物聯(lián)網標準協(xié)議,是為了讓在功耗相對低且無線的域網上使用IPv6技術以此實現(xiàn)萬物互聯(lián)的狀態(tài),因此6LoWPAN協(xié)議又被稱為無線傳感器網絡標準協(xié)議[8].如圖2所示,無線傳感器網絡標準協(xié)議棧和普通網絡TCP/IP協(xié)議棧相似,都分為應用層、傳輸層、網絡層、MAC層、物理層.不同的是MAC層和物理層的協(xié)議使用了專為低功耗有損網絡推出的協(xié)議.
圖2 無線傳感器網絡標準協(xié)議棧
SD-IoT架構內核的也就是軟件定義無線傳感器SDN-WISE(Software Defined Networking solution for Wireless Sensor Networks, SDN-WISE)是基于IEEE 802.15.4物理和MAC層.SDN-WISE的目的是為了簡化網絡管理,為開發(fā)新穎的應用程序以及試驗新的網絡提供解決方法.網絡元素可以分為接收器和節(jié)點.接收器和節(jié)點之間的區(qū)別在于,前者配備了連接到基礎結構網絡的網絡接口.因此,所有控制數據包都應設法到達接收器以離開WSN并到達控制器[9].在MAC層之上,轉發(fā)(FWD)層按照WISE流表中的指定處理傳入數據包.FWD層根據控制平面發(fā)送的配置更新此表,SDN-WISE協(xié)議體系架構如圖3所示.
所述在網絡分組處理(INPP)上轉發(fā)層的頂部層運行和它負責數據聚合或其它網絡內的處理操作.如果WISE流表中沒有條目與當前數據包匹配,則將請求發(fā)送到控制平面.為了聯(lián)系控制平面,每個節(jié)點必須知道朝向接收器的最佳下一跳.通過信標使用拓撲發(fā)現(xiàn)(TD)層以分布式方式計算此值.
在控制平面中,網絡邏輯由1個或多個控制器和WISE-Visor決定.WISE-Visor可以抽象化網絡資源,以便具有不同控制器設置的不同管理策略的不同邏輯網絡可以在同一組物理設備上運行.
在接收器WISE-Visor之間有1個Adaptation層,該層負責格式化從接收器接收到的消息,以便WISE-Visor可以處理它們,反之亦然.
圖3 SDN-WISE協(xié)議體系架構
在Contiki系統(tǒng)中自帶一款開源、功能強大的網絡分析工具Wireshark,可以直觀地看到網絡數據傳輸情況.Wireshark有權限對數據包進行跟蹤、抓取、數據分析,并且Wireshark自帶的過濾器對初學者很友好,可以清除大量冗余信息.該工具的使用可以讓使用者更全面更透徹地理解到軟件定義物聯(lián)網網絡原理,更熟悉各傳感節(jié)點傳輸的數據,為在SD-IoT上設計系統(tǒng)、改進協(xié)議和網絡實驗打下良好的基礎.從圖4可以看到Wireshark捕獲到的TCP包中的每個字段.
物聯(lián)網是由射頻識別、智能傳感器、通信技術和互聯(lián)網協(xié)議的最新發(fā)展推動的.Cooja模擬器是1個專門為無線傳感器網絡設計的網絡模擬器.Cooja中模擬的Contiki Mote是1個實際編譯和執(zhí)行的Contiki系統(tǒng).該系統(tǒng)由Cooja控制和分析.這是通過將本機平臺的Contiki編譯為共享庫,并使用Java本機接口(JNI)將庫加載到Java中來實現(xiàn)的.在同1個Cooja仿真中可以編譯加載幾個不同的Contiki庫,代表不同種類的傳感器節(jié)點(異構網絡).Cooja通過幾個功能控制和分析Contiki系統(tǒng).例如,模擬器通知Contiki系統(tǒng)處理1個事件,或者獲取整個Contiki系統(tǒng)內存進行分析.這種方法使模擬器能夠完全控制模擬系統(tǒng).不幸的是,使用JNI也有一些惱人的副作用.最重要的是對外部工具的依賴,比如編譯器和鏈接器以及它們的運行時參數.Cooja最初是為Cygwin/Windows和Linux平臺開發(fā)的,后來移植到了Mac OS.運行Cooja需要Java版或更高版本.此外,構建Cooja也需要構建工具ant.Contiki是1個面向物聯(lián)網的開源操作系統(tǒng).Contiki將微型低成本、低功耗微控制器連接到互聯(lián)網,是構建復雜無線系統(tǒng)的強大工具箱.
安裝Contiki操作系統(tǒng)只需要在ubuntu操作系統(tǒng)的虛擬機上部署,如圖5所示,通過官網下載的Instant Contiki操作系統(tǒng)擁有完整的Contiki開發(fā)環(huán)境,對硬件要求極低,可移植性高,開發(fā)方式便捷,還自帶一些仿真工具,十分適合SD-IoT的環(huán)境開發(fā).
圖4 Wireshark分析數據所對應的TCP數據包
圖5 Contiki操作系統(tǒng)下的文件列表
本實驗說明了如何在虛擬機(VM)中使用SDN-WISE,Cooja,Mininet和ONOS部署虛擬網絡搭建構建成1個軟件定義物聯(lián)網環(huán)境.本實驗設計的目標是創(chuàng)建1個由ONOS控制的集成網絡,其中OpenFlow交換機的虛擬網絡可以與仿真的SDN-WISE無線傳感器網絡的節(jié)點進行通信.
先下載Instant Contiki,安裝VMWare Player,然后啟動Instant Contiki.運行啟動Instant Contiki Instant_Contiki_Ubuntu_12.04_32-bit.vmx.等待虛擬Ubuntu Linux啟動.登錄到Instant Contiki,密碼是user.
打開Contiki系統(tǒng)后,在環(huán)境中安裝一些需要的軟件及編譯軟件.通過以下指令安裝下載SDN-WISE, Contiki, Mininet和SDN控制器ONOS的源代碼.如圖6所示.
當下載安裝完畢后,需要對ONOS進行編譯,配置環(huán)境.輸入下列指令,完成對控制器的編譯.
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
編譯完成后,基礎環(huán)境已經搭建完畢,下一步開始要搭建軟件定義物聯(lián)網環(huán)境.
步驟一:傳感節(jié)點的創(chuàng)建.
啟動Cooja模擬器,在終端輸入以下命令
cd~/sdn-wise-contiki/contiki/tools/cooja/ && ant run
打開Cooja模擬器,在Setting-extensions中找到SDN-WISE-emulated,部署SDN-WISE,如圖7所示.
創(chuàng)建新的模擬后,輸入仿真名稱為SD-IoT,點擊Create.如圖8所示,Cooja帶來了新的模擬的Network Window,左邊的屏幕頂部,顯示了模擬網絡中的所有Motes,它現(xiàn)在是空的,因為我們還沒有在網絡中增加節(jié)點.Timeline Window,在屏幕的底部,顯示隨著時間的推移模擬中的所有通信事件,這很方便地了解在網絡傳播中所發(fā)生的狀態(tài).該Mote Output窗口中,在屏幕的右側,顯示了所有的微塵所有串口打印輸出.在Notes window右上角可以記錄實驗過程中的數據、問題以及一些小想法.Simulation Control Window是開始,暫停和重新加載仿真的地方.
圖7 在cooja中部署sdn-wise-emulated
圖8 SDN-WISE-Cooja模擬器
下一步就是在虛擬網絡上添加JAVA仿真的SDN-WISE節(jié)點.首先要添加1個Sink節(jié)點,點擊Motes -> Add motes -> Create new mote type -> SDN-WISE Emulated Sink.匯聚節(jié)點添加完,可以類似添加一些傳感節(jié)點.
單擊Tools -> Radio messages.將會出現(xiàn)1個新窗口.此窗口將顯示有關通過無線電發(fā)送的消息的所有詳細信息.檢查接收器是否可以直接或通過多個躍點訪問所有節(jié)點.單擊1個節(jié)點來查看它.將會出現(xiàn)1個綠色圓圈.選中區(qū)域可以到達綠色區(qū)域內的所有節(jié)點.有1個灰色圓圈,該圓圈表示節(jié)點的干擾區(qū)域.因為需要與外部控制器進行交互,所以在“模擬控制”窗口中單擊Speed Limit并選擇100%.添加成功后的View Zoom如圖9所示.
圖9 傳感節(jié)點和匯聚節(jié)點
步驟二:連接ONOS控制器及測試連通性.
通過在ONOS中編寫簡易的Dijkstra路由算法,以此來檢測網絡連通性.接收器節(jié)點是網絡中接收用戶發(fā)送的消息的第一個節(jié)點.它檢查其WISE流表,若找不到匹配的規(guī)則,便詢問控制器.控制器提供到達目的地的路徑并發(fā)送相應的規(guī)則.該路徑中的節(jié)點學習規(guī)則,可保證正確轉發(fā)消息.
當節(jié)點收到自身的消息時,它將在Mote輸出窗口中打印有效負載.如圖10所示.
圖10 Dijkstra路由算法的實現(xiàn)
如果要整體看到網絡拓撲結構,可以檢查瀏覽器,將看到ONOS已經識別出整個網絡,此時,即可以在Mininet主機和SDN-WISE節(jié)點之間路由數據包了.如圖11所示.
圖11 ONOS控制器下的整體網絡拓撲結構
文章介紹了SD-IoT仿真實驗平臺的具體搭建流程,相比于利用開源工具搭建實驗環(huán)境的方法,該方法更便于初學者的快速掌握。實驗證明,該仿真平臺具有一定的可靠性,可移植性強。