劉旭東,何涇沙
(北京工業(yè)大學(xué) 軟件學(xué)院,北京 100124)
隨著移動互聯(lián)時代的來臨,越來越多的服務(wù)已經(jīng)向終端轉(zhuǎn)移。Android系統(tǒng)作為目前主流的移動設(shè)備操作系統(tǒng),以其免費的特征,以及強大的功能,已經(jīng)受到越來越多的終端廠家的廣泛使用。如何利用Android系統(tǒng)實現(xiàn)更多的互聯(lián)功能成為一個重要的研究領(lǐng)域。移動ad hoc網(wǎng)絡(luò)是目前比較熱門的研究領(lǐng)域,如何將移動ad hoc網(wǎng)絡(luò)引入Android這種移動操作系統(tǒng)成為一個非常有意義的研究問題[1-2]。利用ad hoc網(wǎng)絡(luò)將裝載Android系統(tǒng)的移動設(shè)備連接起來,實現(xiàn)在沒有基礎(chǔ)設(shè)施的情況下的互聯(lián)互通,這將會在發(fā)生重大災(zāi)害的時候?qū)崿F(xiàn)網(wǎng)絡(luò)的組建,實現(xiàn)快速救援。在日常生活領(lǐng)域,越來越多的家電使用Android系統(tǒng),如果能將家電自動組網(wǎng)連接,將會極大的提高生活的便利性。
在Android系統(tǒng)中構(gòu)建一套可以廣泛應(yīng)用的移動ad hoc網(wǎng)絡(luò)連接框架,可以為應(yīng)用程序提供一種高效的連接方式,也可以節(jié)省目前移動網(wǎng)絡(luò)連接帶來的相關(guān)費用。在目前傳統(tǒng)使用ad hoc網(wǎng)絡(luò)路由協(xié)議中,并沒有哪一種協(xié)議特別適合用于Android設(shè)備建立ad hoc網(wǎng)絡(luò)。BATMAN (The Better Approach To Mobile Adhoc Networking)協(xié)議作為最新為移動網(wǎng)絡(luò)設(shè)計的路由協(xié)議,在多方面都適合Android使用。通過修改BATMAN協(xié)議的內(nèi)容,使得整個協(xié)議更好的適用于Android組成的ad hoc網(wǎng)絡(luò),也將極大提高網(wǎng)絡(luò)的傳輸效率。
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于便攜設(shè)備,如智能手機和平板電腦。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。2005年由Google收購注資,并組建開發(fā)手機聯(lián)盟開發(fā)改良隨后,逐漸擴展到平板電腦及其他領(lǐng)域上。2008年10月第一部Android智能手機發(fā)布。目前Android的手機已經(jīng)占領(lǐng)了接近一半的手機市場。在Android的系統(tǒng)中,由于是開源系統(tǒng),因此可以修改Android的內(nèi)核,已達到一些附加功能。
對于Android系統(tǒng),系統(tǒng)本身并沒有提供ad hoc網(wǎng)絡(luò)連接的功能與相關(guān)機制,但是整個ad hoc的網(wǎng)絡(luò)實現(xiàn)對于現(xiàn)實應(yīng)用場景的使用是非常有意義的。由于Android具有開源的特性,一種方式是通過修改系統(tǒng)的內(nèi)核,并進行重新編譯達到ad hoc的網(wǎng)絡(luò)功能,但是這樣的做法需要系統(tǒng)重新安裝,對于目前使用的客戶極為不方便。因此,本文通過在Android系統(tǒng)的基礎(chǔ)上通過構(gòu)建一種應(yīng)用的框架實現(xiàn)ad hoc網(wǎng)絡(luò)連接的做法,更加符合當(dāng)前的要求。因此,本論文旨在通過了解Android的基本結(jié)構(gòu),實現(xiàn)一個網(wǎng)絡(luò)通信框架,通過這個框架,可以使得使用框架的應(yīng)用之間實現(xiàn)ad hoc網(wǎng)絡(luò)的通信功能。
由于Android系統(tǒng)具有無線的網(wǎng)絡(luò)連接,通過WiFi連接,具備了構(gòu)建ad hoc網(wǎng)絡(luò)的基礎(chǔ),為了能夠建立移動ad hoc網(wǎng)絡(luò)連接,Android設(shè)備通過Wifi與其他設(shè)備進行連接,雖然這樣可以建立兩個設(shè)備的連接,并不能夠?qū)崿F(xiàn)多跳的網(wǎng)絡(luò)。因此,為了實現(xiàn)多跳的網(wǎng)絡(luò),必須采用一種路由協(xié)議。傳統(tǒng)的移動ad hoc網(wǎng)絡(luò)多采用OLSR協(xié)議。OLSR是Optimized Link State Routing的簡稱,主要用于MANET網(wǎng)絡(luò)(Mobile Ad hoc network)路由協(xié)議。OLSR是根據(jù)MANET的要求,在傳統(tǒng)的LS(Link state)協(xié)議的基礎(chǔ)上優(yōu)化的。OLSR中的關(guān)鍵概念是多點轉(zhuǎn)播(MPRs),同傳統(tǒng)LS協(xié)議相比,在網(wǎng)絡(luò)中分布著部分鏈路狀態(tài)信息,尤其適合大而密集型的網(wǎng)絡(luò)。
但是,對于Android這種移動ad hoc網(wǎng)絡(luò),當(dāng)節(jié)點不斷增加時,整個的網(wǎng)絡(luò)就變得異常的緩慢。BATMAN協(xié)議是一種非常好的替代方式,通過采用BATMAN協(xié)議,可以很好地進行移動ad hoc網(wǎng)絡(luò)的連接[3]。本論文通過在Android上實現(xiàn)BATMAN協(xié)議,實現(xiàn)一種網(wǎng)絡(luò)框架。BATMAN框架是建立在TCP協(xié)議之上,通過無線網(wǎng)絡(luò)連接,實現(xiàn)移動ad hoc網(wǎng)絡(luò)的多跳連接,并且在連接的基礎(chǔ)上進行相應(yīng)的數(shù)據(jù)交換[4-5]。
BATMAN的原始實現(xiàn)是在Linux上完成的,雖然Android系統(tǒng)是在Linux的基礎(chǔ)之上實現(xiàn)的,但是BATMAN的代碼并不能夠在Android上順利運行。Android系統(tǒng)使用Java作為應(yīng)用開發(fā)的語言,BATMAN的C語言代碼如果想要在Android上運行,需要使用 JNI(Java Native Interface)技術(shù)將 BATMAN的路由協(xié)議生成鏈接庫。因此,為了能夠使BATMAN順利運行,需要重新修改BATMAN代碼,并進行重新的編譯。
BATMAN協(xié)議是一種用于移動ad hoc網(wǎng)絡(luò)的路由協(xié)議。它主要通過一種OMG包進行路由信息的傳播。每個網(wǎng)絡(luò)中的結(jié)點定期向其鄰居結(jié)點廣播發(fā)送OMG包,每個收到OMG包的鄰居結(jié)點通過OMG信息更新自己的路由信息,并且根據(jù)不同的情況選擇丟棄OMG包,或者繼續(xù)將信息廣播給相應(yīng)的鄰居結(jié)點。
每個收到OMG的結(jié)點,首先將會將OMG包存入相應(yīng)的緩存中,以便跟蹤相應(yīng)的路由信息。每個節(jié)點也會更新信息源上次的活躍時間,并且確保目前的路由信息是最新的路由信息。由于移動ad hoc網(wǎng)絡(luò)具有移動的特點,因此,很多情況下原本可以連接的結(jié)點,很可能在某一段時間不能夠進行連接,為了能夠適應(yīng)網(wǎng)絡(luò)移動性的問題,每個節(jié)點都會有一個計時器,當(dāng)某個鄰居結(jié)點在一段時間沒無法連接時,將會對其路由條目。圖1展示了運行BATMAN協(xié)議的結(jié)點的運行方法。
圖1 結(jié)點i運行BATMAN協(xié)議流程圖Fig.1 Flow chart of running BATMAN protocol on node i
在這個流程圖中,描述了多跳的工作機制,當(dāng)一個來自雙向連接的結(jié)點OMG到達結(jié)點時,或者當(dāng)一個結(jié)點已經(jīng)成為孤立結(jié)點,無法繼續(xù)連接時,將會進行更新路由表的操作。當(dāng)某個應(yīng)用想要發(fā)送信息時,首先需要調(diào)用GETNextHop(packet)從路由表中獲取相應(yīng)的鄰居結(jié)點,如果存在達到終點的鄰居結(jié)點,將會使用Send(packet)進行發(fā)送。當(dāng)從其他結(jié)點獲取到待發(fā)送的信息時,首先判斷目標(biāo)結(jié)點是不是當(dāng)前結(jié)點,如果當(dāng)前節(jié)點是目標(biāo)結(jié)點,則收取信息,如果當(dāng)前結(jié)點不是目的結(jié)點,判斷終點的地址,選擇轉(zhuǎn)發(fā)或者丟棄。
目前廣泛使用的Android系統(tǒng)中,主要使用兩種比較常見的無線連接方式,一種是藍牙連接,另一種是WiFi(IEEE 802.11g)。當(dāng)前Android系統(tǒng)中都有支持這兩種連接的API[6]。3G網(wǎng)絡(luò)目前也非常常見,但是由于3G連接依賴于基礎(chǔ)網(wǎng)絡(luò)設(shè)施,因此不適用于移動的ad hoc網(wǎng)絡(luò)。藍牙雖然是為ad hoc網(wǎng)絡(luò)設(shè)計,但是其傳輸距離有限,為了實現(xiàn)大范圍的ad hoc網(wǎng)絡(luò),這種方式并不適合[7]。WiFi提供了一種更遠距離的連接,并且具有更大的帶寬。因此,在WiFi的基礎(chǔ)上建立ad hoc網(wǎng)絡(luò)是可能的,而且能夠給很多應(yīng)用提供便利。
默認(rèn)情況下,Android設(shè)備并不能夠進行ad hoc網(wǎng)絡(luò)連接,只能連接到固定的網(wǎng)絡(luò)訪問點。為了能夠開啟網(wǎng)絡(luò)連接的ad hoc模式,必須了解整個網(wǎng)絡(luò)的運行過程。Android設(shè)備中,使用wpa_supplicant工具操作網(wǎng)絡(luò),并且使用wpa_supplicant.conf作為其配置文件。為了能夠?qū)崿F(xiàn)連接,必需修改上述的兩個文件,由于每個Android設(shè)備通過芯片的驅(qū)動程序完成對其設(shè)備的控制,能夠進行ad hoc網(wǎng)絡(luò)連接的芯片必須能夠支持無線擴展API(Wireless Extension API),這樣才能控制芯片完成ad hoc網(wǎng)絡(luò)連接。因此,目前只有在能夠應(yīng)用無線擴展API的芯片上才能完成ad hoc網(wǎng)絡(luò)連接。
為了能夠使設(shè)備支持無線擴展API,可以通過交叉編譯,為設(shè)備編譯出可以應(yīng)用到設(shè)備上的相關(guān)文件[10-11]。通過重新編譯Android系統(tǒng)的相關(guān)部分的源代碼,可以實現(xiàn)BCM4329和BCM4330無線芯片的ad hoc網(wǎng)絡(luò)控制。三星公司在其官方網(wǎng)站上公布了以上兩種芯片相關(guān)的源代碼,因此使用這兩種芯片的Android設(shè)備都可以實現(xiàn)ad hoc網(wǎng)絡(luò)連接,表1中列出了使用這些芯片的設(shè)備。理論上通過這種方法,可以控制芯片的ad hoc模式連接方式,包括使用這種芯片的iPhone4s和NOKIA Lumia系列。
表1 部分Android設(shè)備的無線芯片列表Tab.1 Android device's wireless chip list
標(biāo)準(zhǔn)的BATMAN協(xié)議雖然應(yīng)用于ad hoc網(wǎng)絡(luò),但是當(dāng)數(shù)據(jù)終點無法到達時,標(biāo)準(zhǔn)協(xié)議的做法是丟棄這些無法到達的數(shù)據(jù)包。由于移動ad hoc網(wǎng)絡(luò)與傳統(tǒng)的ad hoc網(wǎng)絡(luò)的最大不同點就在于其移動性。而且由Android構(gòu)建的ad hoc網(wǎng)絡(luò)中節(jié)點的移動性更加強烈,同時每個節(jié)點相遇的幾率也更大,因此為了能夠以最大效率的提高傳輸率,在每個Android設(shè)備中加入一個緩存,能夠最大的效率實現(xiàn)網(wǎng)絡(luò)通信。
經(jīng)過改進后,原有的BATMAN協(xié)議結(jié)點將會按照如下步驟實現(xiàn)網(wǎng)絡(luò)傳輸。
1)判斷下一跳節(jié)點聯(lián)通性,可以聯(lián)通則立刻發(fā)送。無法連接,進入步驟2)。
2)將數(shù)據(jù)包存入臨時緩存,進入步驟3)。
3)每個結(jié)點定時檢查緩存,如果連接重新建立立刻傳輸,否則進入步驟4)。
4)檢查每個節(jié)點包的存入時間,如果超時,立刻丟棄數(shù)據(jù)包。超時定義如下:
其中,WINDOWS_SIZE是整個節(jié)點的數(shù)據(jù)窗口大小,ORIGINATOR_INTERVAL是節(jié)點檢查緩存的時間間隔。
在Android設(shè)備中加入緩存,并且定期檢查每個暫存數(shù)據(jù)包的連通性會增加整個節(jié)點的負(fù)擔(dān),但是目前的Android設(shè)備具有較大的內(nèi)存和較強的處理能力,對于增加的處理內(nèi)容和存儲要求并不會影響整個節(jié)點的正常工作,因此是一個比較理想的方案。
對于ad hoc的框架,使用TCP進行數(shù)據(jù)的傳輸是非常實用的,并且能夠保證數(shù)據(jù)包能夠到達鄰居結(jié)點。在TCP協(xié)議的基礎(chǔ)上,構(gòu)建BATMAN協(xié)議層,在這個層次上實現(xiàn)BATMAN協(xié)議的相關(guān)機制。最后提供相應(yīng)的網(wǎng)絡(luò)接口,應(yīng)用程序可以通過調(diào)用這些接口建立ad hoc網(wǎng)絡(luò),并且實現(xiàn)相應(yīng)的功能。圖2展示了整個應(yīng)用框架的基本結(jié)構(gòu)。通過系統(tǒng)的分層實現(xiàn),可以提升整個架構(gòu)的可維護性,以及提升系統(tǒng)的復(fù)用性。
圖2 BATMAN框架的基本結(jié)構(gòu)Fig.2 Architecture of BATMAN framework
在Android系統(tǒng)中,可以使用JNI進行C或者C++程序的開發(fā),通過JNI編譯成為Android系統(tǒng)可識別的靜態(tài)類庫,因此整個系統(tǒng)采用C++作為開發(fā)語言,開發(fā)整個應(yīng)用框架,并且最終編譯成為Android的類庫供應(yīng)用開發(fā)者使用。整個框架的設(shè)計基于面向?qū)ο蟮拈_發(fā)方法,進行封裝,力圖開發(fā)出簡單實用的Android下的應(yīng)用框架。圖3為整個框架的UML類圖。通過這個圖能夠很清晰的看出整個框架的設(shè)計方式??蚣軐崿F(xiàn)后,將會為應(yīng)用程序提供多個實用的網(wǎng)絡(luò)連接接口。通過調(diào)用接口,可以實現(xiàn)采用同樣應(yīng)用框架的應(yīng)用間實現(xiàn)ad hoc網(wǎng)絡(luò)連接。
圖3 Android中BATMAN框架類圖Fig.3 BATMAN framework class diagram
Android中的應(yīng)用和程序都是使用Java作為編程語言,并且將會編譯成為“.dex”文件用于執(zhí)行。Android應(yīng)用中,僅有Activity是用戶可見的部分。BATMAN的C語言代碼使用NDK(Native Development Kit)將 C代碼轉(zhuǎn)化為 Android可執(zhí)行代碼。并通過JNI將應(yīng)用框架載入到應(yīng)用程序中,實現(xiàn)程序的開發(fā)。
基于BATMAN協(xié)議的ad hoc網(wǎng)絡(luò)框架在日常的應(yīng)用中具有應(yīng)用價值,其執(zhí)行效率也是一個框架性能的重要指標(biāo)。通過在Android上建立應(yīng)用框架能夠有效的提高實用性。通過在不同的應(yīng)用場景中進行測試,可以得到此應(yīng)用框架的最終執(zhí)行效率。框架執(zhí)行效率的測試場景為北京工業(yè)大學(xué)的教學(xué)樓內(nèi),使用10部已經(jīng)加載了BATMAN的Android手機進行相應(yīng)的測試工作,測試人員使用Android手機在同一樓層中隨機移動,最后從系統(tǒng)中獲取相應(yīng)的日志對相關(guān)的數(shù)據(jù)進行統(tǒng)計,得到執(zhí)行效率的相關(guān)數(shù)據(jù)。
測試的第一個指標(biāo)是數(shù)據(jù)包送達率,由于測試過程中是節(jié)點是隨機移動的,使用本文的應(yīng)用框架進行數(shù)據(jù)傳輸,在可以連接的范圍內(nèi)主要的數(shù)據(jù)送達率可以達到80%以上,基本能夠滿足日常的簡單數(shù)據(jù)傳輸功能。圖4給出了在900 s內(nèi)的數(shù)據(jù)送達率的情況。
圖4 BATMAN應(yīng)用框架數(shù)據(jù)包送達率Fig.4 Packets delivery ratio
另一個比較重要的數(shù)據(jù)是數(shù)據(jù)包的延遲,通過一系列的測試,本框架的數(shù)據(jù)包延遲可以控制在50 ms內(nèi),這樣的數(shù)據(jù)包延遲在日常的應(yīng)用中是可以接受的。圖5給出了發(fā)送0到6萬個包的平均包延遲。
圖5 BATMAN應(yīng)用框架包延遲Fig.5 Packets delay
通過以上的測試,能夠全面的了解基于Android的BATMAN協(xié)議應(yīng)用框架的相應(yīng)執(zhí)行效率,為應(yīng)用層的使用提供了全面的參考。
經(jīng)過測試,整個應(yīng)用框架效率較高。在實際的應(yīng)用場景中,通過采用此框架構(gòu)建一個用于網(wǎng)絡(luò)傳輸?shù)腁ndroid應(yīng)用程序。使用3臺Android手機作為測試手機構(gòu)建一個簡單的ad hoc網(wǎng)絡(luò),在網(wǎng)絡(luò)中進行數(shù)據(jù)傳輸。具體的應(yīng)用截屏如圖6所示。在這個應(yīng)用程序中,程序自動發(fā)現(xiàn)采用同樣使用此框架開發(fā)的應(yīng)用程序,并且列出其在網(wǎng)絡(luò)中的IP地址。
圖6 使用ad hoc應(yīng)用框架程序截圖Fig.6 Ad hoc application framework program screenshot
Android系統(tǒng)作為目前主流智能設(shè)備的操作系統(tǒng),雖然提供了強大的網(wǎng)絡(luò)功能,但是并沒有完全支持ad hoc網(wǎng)絡(luò),通過對BATMAN協(xié)議的理解,以及Android開發(fā)的整體認(rèn)識,在Android系統(tǒng)上開發(fā)出一個支持BATMAN協(xié)議的網(wǎng)絡(luò)框架,不但可以方便的使得使用Android系統(tǒng)的設(shè)備完成自組網(wǎng)連接,而且可以應(yīng)用到智能家電、災(zāi)難救援等領(lǐng)域,具有極強的研究和使用價值。
[1]JHE-YI H,CHIEN-CHENG S,WEI-HSIANG L,et al.Android-based Mobile payment service protected by 3-factor authentication and virtual private ad hoc networking[C].Hong Kong, China,2012:111-116.
[2]HANNO W,TOBIAS H,BACKHAUS R,et al.Establishing Mobile ad-hoc networks in 802.11 infrastructure mode[C]//Las Vegas, NV, United states,2011:49-51.
[3]LAURENTD,NADJM-TEHRANIS.Batmanstore-andforward:The best of the two worlds[C].Department of Computer and Information Science, Linkoping University,SE-581 83 Linkoping, Sweden,2012:721-727.
[4]ELIS K,HIYAMA M,MAKOTO I,et al.Performance comparison of OLSR and Batman routing protocols by a MANET testbed in stairs environment[C]//Graduate School of Engineering, Fukuoka Institute of Technology (FIT), 3-30-1 Wajiro-Higashi, Higash, 2012:339-349.
[5]JOSH T,JEFF R,NICK M.Off grid communications with android meshing the Mobile world [C]//Accuvant LABS Research Consulting Group, Bedford, MA, United States,2012:401-405.
[6]WOOK S,KIYOMOTO S,KAZUHIDE F,et al.A formal model to analyze the permission authorization and enforcement in the Android framework[C]//KDDI R and D Laboratories,Inc., Saitama 356-8502, Japan,2010:944-951.
[7]WANG Jie,YU Xue,ZENG Yu,et al.The design and realization of campus information release platform based on android framework [C]//SchoolofManagement, Capital Normal University, Beijing 100089, China,2013:121-128.