馮 立, 李 華, 劉德學(xué)
(四川廣播電視大學(xué) 教學(xué)處, 四川 成都 610073)
近年來,無線網(wǎng)絡(luò)通信得到了迅速的發(fā)展,人們可以通過無線接口的便攜計(jì)算機(jī)或個(gè)人數(shù)字助理來實(shí)現(xiàn)移動(dòng)中的通信.一方面,隨著Ad Hoc網(wǎng)絡(luò)技術(shù)研究不斷發(fā)展成熟,人們要求移動(dòng)Ad Hoc網(wǎng)絡(luò)(Mobile Ad Hoc Network,MANET)能夠傳輸語音、圖像等多媒體信息的應(yīng)用期望也越高.另外,Ad Hoc網(wǎng)絡(luò)傳輸技術(shù)理論的不斷完善,使得Ad Hoc網(wǎng)絡(luò)中進(jìn)行多媒體信息的傳輸成為可能.在國(guó)內(nèi),雖然對(duì)無線Ad Hoc網(wǎng)絡(luò)已經(jīng)有了比較廣泛的研究,并取得了大量的研究成果,但是大部分研究主要集中在路由協(xié)議[1-3]、媒體訪問接入控制協(xié)議、網(wǎng)絡(luò)傳輸?shù)腝oS[4]、終端的發(fā)射功率控制等方面.同時(shí),相關(guān)的討論研究?jī)H建立在仿真實(shí)驗(yàn)基礎(chǔ)上,沒有構(gòu)建實(shí)際的網(wǎng)絡(luò)來驗(yàn)證.另一方面,在眾多通過普通網(wǎng)絡(luò)來傳遞語音信號(hào)的技術(shù)中,VoIP(Voice over Internet Protocol)技術(shù)應(yīng)用最為廣泛.目前VoIP技術(shù)已經(jīng)較為成熟,Skype與GTalk是VoIP應(yīng)用的兩個(gè)典型代表.從目前的文獻(xiàn)上看,利用Ad Hoc網(wǎng)絡(luò)實(shí)現(xiàn)節(jié)點(diǎn)之間語音數(shù)據(jù)傳輸?shù)某晒欢?文獻(xiàn)[5]利用仿真實(shí)驗(yàn)對(duì)移動(dòng)性和QoS提供等方面對(duì)Ad Hoc網(wǎng)絡(luò)語音通信容量問題進(jìn)行了研究.文獻(xiàn)[6]研究了不同路由協(xié)議對(duì)語音應(yīng)用系統(tǒng)性能的影響.文獻(xiàn)[7]研究了利用Ad Hoc對(duì)等網(wǎng)絡(luò)支持緊急情況下指揮控制系統(tǒng)的語音通信問題.盡管關(guān)于Ad Hoc網(wǎng)絡(luò)和VoIP技術(shù)單獨(dú)的研究已經(jīng)取得了大量成果,但是結(jié)合Ad Hoc網(wǎng)絡(luò)技術(shù)的語音通信的應(yīng)用性研究還未見報(bào)道.為此,本文構(gòu)建基于移動(dòng)Ad Hoc網(wǎng)絡(luò)路由傳輸技術(shù)的VOIP語音通信的實(shí)際通信系統(tǒng).
系統(tǒng)在Linux平臺(tái)下根據(jù)RTP/RTCP協(xié)議的運(yùn)作機(jī)制及其基本特性,通過移植AODV路由協(xié)議實(shí)現(xiàn)數(shù)據(jù)包多跳自組織傳輸.同時(shí),采用多線程編程技術(shù)實(shí)現(xiàn)基于RTP的實(shí)時(shí)音頻傳輸系統(tǒng),實(shí)現(xiàn)了點(diǎn)對(duì)點(diǎn)的全雙工通信.系統(tǒng)節(jié)點(diǎn)設(shè)計(jì)在參考SIP(Session Initiation Protocol)協(xié)議基礎(chǔ)上,根據(jù)Ad Hoc網(wǎng)絡(luò)自身的特點(diǎn)所構(gòu)建.一般來說,傳統(tǒng)的多跳路由通信系統(tǒng)由路由節(jié)點(diǎn)和終端節(jié)點(diǎn)組成,而與傳統(tǒng)多跳網(wǎng)絡(luò)通信中不同的是本系統(tǒng)中任意節(jié)點(diǎn)同時(shí)具有這兩種節(jié)點(diǎn)的功能.另外,在Ad Hoc網(wǎng)絡(luò)中各節(jié)點(diǎn)都是對(duì)等的,這樣每個(gè)節(jié)點(diǎn)都同時(shí)具有路由轉(zhuǎn)發(fā)功能和終端收發(fā)功能.
如圖1所示,節(jié)點(diǎn)設(shè)計(jì)根據(jù)功能劃分為VoIP應(yīng)用層、UDP傳輸層和AODV多跳網(wǎng)絡(luò)層,各層之間彼此相互協(xié)作.工作過程中,通信的任意一方在處理輸出語音數(shù)據(jù)時(shí)必須同時(shí)處理輸入語音數(shù)據(jù),從而保證語音傳輸?shù)碾p向通信.輸入音頻數(shù)據(jù)處理模塊接收麥克風(fēng)傳來的語音數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理最后以數(shù)據(jù)包的形式傳遞至多跳網(wǎng)絡(luò),并以盡可能低的誤碼率將高質(zhì)量的語音數(shù)據(jù)包傳輸?shù)侥康墓?jié)點(diǎn).系統(tǒng)節(jié)點(diǎn)處理涉及到網(wǎng)絡(luò)協(xié)議層中的應(yīng)用層、傳輸層和網(wǎng)絡(luò)層.其中應(yīng)用層考慮系統(tǒng)的邏輯控制、數(shù)據(jù)的輸入輸出和數(shù)據(jù)的處理,傳輸層考慮從網(wǎng)絡(luò)層或應(yīng)用層獲取數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行封裝或解包,而網(wǎng)絡(luò)層主要考慮系統(tǒng)間的尋址和路由發(fā)現(xiàn)等.

圖1 系統(tǒng)節(jié)點(diǎn)模塊框架示意圖
本系統(tǒng)的實(shí)現(xiàn)重點(diǎn)是具有全雙工的多跳自組織語音通信系統(tǒng).因此,根據(jù)前面所介紹的系統(tǒng)主要模塊,本節(jié)將著重介紹系統(tǒng)節(jié)點(diǎn)實(shí)現(xiàn)過程中關(guān)鍵的用戶發(fā)現(xiàn)模塊、AODV路由多跳傳輸及VoIP語音通信模塊的實(shí)現(xiàn)方法與處理流程.
用戶發(fā)現(xiàn)模塊用于發(fā)現(xiàn)WLAN中所有使用本系統(tǒng)的用戶,實(shí)時(shí)維護(hù)和更新本地的局域網(wǎng)用戶列表.局域網(wǎng)用戶列表是用戶節(jié)點(diǎn)在本地維護(hù)的一張列表,列表中存儲(chǔ)著整個(gè)局域網(wǎng)中所有的用戶信息,包括節(jié)點(diǎn)的用戶名、本地主機(jī)名、本地IP地址和時(shí)間戳.用戶發(fā)現(xiàn)模塊工作流程如圖2所示.在將用戶信息寫入用戶列表后,模塊將生成子線程,用來掃描和廣播用戶列表,其中T1為掃描周期,T2為超時(shí)閾值.

圖2 用戶發(fā)現(xiàn)模塊流程圖
工作過程說明如下:在用戶登錄時(shí),用戶發(fā)現(xiàn)模塊首先獲取用戶的用戶名、主機(jī)名和IP地址,模塊將從節(jié)點(diǎn)的環(huán)境變量中獲取用戶名和主機(jī)名信息.然后,模塊將用戶信息存入用戶列表中,用戶列表中的時(shí)間戳信息將被初始化為當(dāng)前時(shí)刻.最后,模塊將打開一個(gè)TCP監(jiān)聽端口和一個(gè)UDP端口,并將用戶列表信息從UDP端口中廣播至局域網(wǎng)中.當(dāng)模塊接收到來自鄰居節(jié)點(diǎn)的消息后,會(huì)首先檢查消息類型,并根據(jù)用戶列表中的消息格式解析消息內(nèi)容,取出對(duì)應(yīng)的用戶名、主機(jī)名、IP地址和時(shí)間戳.將取出的用戶名、主機(jī)名和IP地址與本地存儲(chǔ)的用戶列表中的數(shù)據(jù)作比對(duì),若本地用戶列表中不存在與消息中用戶名、主機(jī)名和IP地址完全吻合的用戶,則將用戶信息包括用戶列表消息中的時(shí)間戳存入用戶列表中;相反,若用戶列表中存在消息中描述的用戶,則更新用戶列表中用戶的時(shí)間戳信息.
在用戶節(jié)點(diǎn)周期性地廣播其用戶信息同時(shí),用戶也會(huì)周期性地掃描本地存儲(chǔ)的用戶列表.掃描周期與廣播周期數(shù)值上相等.掃描時(shí)系統(tǒng)節(jié)點(diǎn)檢測(cè)每個(gè)用戶的時(shí)間戳和當(dāng)前時(shí)間的差值,一旦檢測(cè)到某個(gè)用戶時(shí)間戳的差值大于某個(gè)閾值即說明該用戶已退出.為避免因丟包和傳輸時(shí)延造成系統(tǒng)誤判,閾值設(shè)定為用戶掃描周期的2.5倍,一旦判斷某用戶已退出后,系統(tǒng)將自動(dòng)將該用戶從用戶列表中刪除.
該模塊主要實(shí)現(xiàn)下面兩種功能:(1)將普通的音頻數(shù)據(jù)流轉(zhuǎn)化為可在網(wǎng)絡(luò)上傳輸?shù)腢DP數(shù)據(jù)包,并保證接收端可將收到亂序的數(shù)據(jù)包恢復(fù)為接收端發(fā)送時(shí)的順序,從而進(jìn)行解碼操作.(2)通過語音處理模塊使得語音數(shù)據(jù)得到壓縮,以盡可能小的傳輸速度傳輸高質(zhì)量的語音信號(hào).通話過程如圖3所示,語音數(shù)據(jù)包封裝模塊負(fù)責(zé)將語音數(shù)據(jù)封裝成數(shù)據(jù)包的同時(shí),還在數(shù)據(jù)包中加入時(shí)間戳和包序列號(hào),處理后交給路由模塊,路由模塊根據(jù)路由信息表將加入U(xiǎn)DP包的源MAC與目標(biāo)MAC,然后將UDP數(shù)據(jù)包傳遞給無線傳輸模塊,中間節(jié)點(diǎn)根據(jù)動(dòng)態(tài)的路由表信息轉(zhuǎn)發(fā)至接收方,接收端將收到數(shù)據(jù)并拆封后交給語音模塊,解碼后播放語音信號(hào).

圖3 通話過程模塊框圖
具體工作流程說明如下:首先語音處理中通過壓縮數(shù)據(jù),并根據(jù)RTP協(xié)議的要求進(jìn)行封裝,封裝后的RTP數(shù)據(jù)包將被放入RTP會(huì)話中.然后,RTP會(huì)話將會(huì)根據(jù)收到RTP包的數(shù)量及相關(guān)參數(shù),按照相應(yīng)的RTCP協(xié)議生成RTCP包.最后,將RTP包和RTCP包一起通過無線傳輸模塊中的UDP端口傳遞出去.
網(wǎng)絡(luò)層的AODV路由傳輸協(xié)議主要實(shí)現(xiàn)語音數(shù)據(jù)包的動(dòng)態(tài)路由轉(zhuǎn)發(fā),它由Linux協(xié)議棧的Hook函數(shù)所構(gòu)成,如圖4中虛線框的5個(gè)Hook節(jié)點(diǎn).這樣用戶就可以方便的在Hook函數(shù)處定義用戶指定的操作函數(shù).具體操作如下:網(wǎng)絡(luò)入口節(jié)點(diǎn)通過①NF_IP_PRE_ROUTING節(jié)點(diǎn)對(duì)IP數(shù)據(jù)包進(jìn)行校驗(yàn),接著轉(zhuǎn)發(fā)給路由核心模塊判斷該數(shù)據(jù)包是否需要轉(zhuǎn)發(fā).如果不需要轉(zhuǎn)發(fā),系統(tǒng)會(huì)直接通過②NF_IP_LOCAL_IN節(jié)點(diǎn)傳遞給本機(jī)網(wǎng)關(guān)處理,否則將其傳遞給③NF_IP_PIFORWARD節(jié)點(diǎn),最后通過④NF_IP_POST_ROUTNIG節(jié)點(diǎn)推送給網(wǎng)絡(luò)出口.另外如果本地產(chǎn)生數(shù)據(jù)包,將直接通過鉤子節(jié)點(diǎn)⑤NF_IP_LOCAL_OUT處理后進(jìn)行路由轉(zhuǎn)發(fā),然后經(jīng)過④NF_IP_POST_ROUTNIG鉤子節(jié)點(diǎn)推送給WLAN出口.值得注意的是在每個(gè) HOOK函數(shù)處理后都將其返回值傳遞給AODV核心,以便用戶能更明確地對(duì)數(shù)據(jù)包采取相應(yīng)處理.

圖4 Netfilter功能示意圖
在實(shí)際的代碼設(shè)計(jì)中,AODV代碼主要分為如下兩個(gè)部分:用戶空間的主進(jìn)程Aodvd和內(nèi)核空間kaodv.ko.工作過程如下:首先,啟動(dòng)AODV路由協(xié)議后,主進(jìn)程Aodvd將按照AODV協(xié)議,在后臺(tái)進(jìn)程完成與WLAN中網(wǎng)絡(luò)節(jié)點(diǎn)的語音信息傳遞.值得注意的是,該模塊建立、更新和維護(hù)系統(tǒng)路由表是通過直接調(diào)用Linux內(nèi)核API函數(shù)實(shí)現(xiàn)的.接著,內(nèi)核模塊kaodv.ko被調(diào)用運(yùn)行,其工作原理是調(diào)用Netfilter的Hook函數(shù),并根據(jù)系統(tǒng)路由表信息,將需要轉(zhuǎn)發(fā)的語音數(shù)據(jù)包發(fā)送到下一跳節(jié)點(diǎn),詳細(xì)的分析說明見文獻(xiàn)[5].
本次測(cè)試選用PC作為多跳網(wǎng)絡(luò)節(jié)點(diǎn).操作系統(tǒng)采用Ubantu10.04,內(nèi)核版本為2.6.34.12.本文通過發(fā)送Ping報(bào)文的方式測(cè)試網(wǎng)絡(luò)傳輸特性,并運(yùn)行編寫的測(cè)試程序,結(jié)合Matlab計(jì)算出語音MOS值.
采用5臺(tái)配備無線網(wǎng)卡的PC作為對(duì)等的節(jié)點(diǎn)搭建Ad Hoc網(wǎng)絡(luò),其中任意兩個(gè)節(jié)點(diǎn)之間可以建立全雙工語音通話.由于測(cè)試環(huán)境的空間限制,使得系統(tǒng)因超出其通信距離而無法通信較難實(shí)現(xiàn),因此使用Ubantu系統(tǒng)下的Iptable內(nèi)部命令斷開若干臺(tái)PC之間的鏈路層通信,測(cè)試網(wǎng)絡(luò)拓?fù)淙鐖D5所示.
由于語音通信系統(tǒng)中使用了JrtpLib函數(shù)庫,該庫是將具體的RTP協(xié)議完全封裝,無法直接通過RTP會(huì)話控制RTP數(shù)據(jù)包發(fā)送.因此本文采用發(fā)送指定大小或指定發(fā)送間隔的Ping報(bào)文來近似地檢測(cè)網(wǎng)絡(luò)傳輸RTP包的性能.下面將從不同的網(wǎng)絡(luò)跳數(shù)、網(wǎng)絡(luò)速度帶寬和網(wǎng)絡(luò)路由的切換頻率分別測(cè)試網(wǎng)絡(luò)的延時(shí)和丟包率.

圖5 測(cè)試網(wǎng)絡(luò)拓?fù)?/p>
測(cè)試過程中,語音通信質(zhì)量的測(cè)評(píng)方法采用了常用的MOS法,利用Iptable命令設(shè)置為1-hop、2-hop、3-hop和4-hop四種網(wǎng)絡(luò)拓?fù)涮鴶?shù)并分別進(jìn)行實(shí)驗(yàn).在語音傳輸時(shí),假設(shè)一個(gè)UDP包中存放一個(gè)生成周期是20ms的RTP包.另外,為盡可能真實(shí)地模擬實(shí)際網(wǎng)絡(luò)中語音數(shù)據(jù)傳輸情形,測(cè)試時(shí)通過選取發(fā)送周期為20ms、長(zhǎng)度為200字節(jié)的Ping報(bào)文,來滿足語音傳輸速率10Kbps.具體來說,在測(cè)試一跳網(wǎng)絡(luò)傳輸性能時(shí),節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送10 000個(gè)Ping包.測(cè)試兩跳網(wǎng)絡(luò)傳輸性能時(shí),節(jié)點(diǎn)1向節(jié)點(diǎn)3通過節(jié)點(diǎn)2轉(zhuǎn)發(fā)10 000個(gè)Ping包,詳細(xì)測(cè)試結(jié)果見表1.

表1 不同測(cè)量指標(biāo)下的性能測(cè)試數(shù)據(jù)表
實(shí)驗(yàn)1固定帶寬,測(cè)試不同網(wǎng)絡(luò)跳數(shù)對(duì)網(wǎng)絡(luò)特性的影響,由表1-(Ⅰ)中數(shù)據(jù)分析可知,隨著跳數(shù)的增加,數(shù)據(jù)包的平均延時(shí)開始逐步增加.網(wǎng)絡(luò)的丟包率雖然在兩跳時(shí)突然增加,但是總體的趨勢(shì)也是隨著跳數(shù)的增加逐漸增大.此外,在語音數(shù)據(jù)碼率小于或等于10Kbps的情況下,4跳的Ad Hoc網(wǎng)絡(luò)能滿足語音傳輸?shù)幕疽螅淳W(wǎng)絡(luò)的平均時(shí)延小于200ms,丟包率小于5%.實(shí)驗(yàn)2模擬目前大多數(shù)2G、2.5G和3G無線通信的標(biāo)準(zhǔn),將網(wǎng)絡(luò)傳輸帶寬限制為5Kbps,10Kbps,20Kbps和120Kbps.由表1-(Ⅱ)中數(shù)據(jù)分析可知,當(dāng)丟包率大于5%時(shí),語音質(zhì)量很差.隨著丟包率的下降,語音質(zhì)量逐漸變好.實(shí)驗(yàn)3在不同的時(shí)刻通過網(wǎng)絡(luò)周期性地更改兩個(gè)節(jié)點(diǎn)的Iptables防火墻設(shè)置,使之能夠在兩條路由中相互切換.分別設(shè)置路由切換周期為5s、10s、15s和20s,測(cè)試在不同路由切換周期下語音的傳輸質(zhì)量.由表1-(Ⅲ)中數(shù)據(jù)分析可知,當(dāng)丟包率大于5%時(shí),語音質(zhì)量很差.隨著丟包率的下降,語音質(zhì)量逐漸變好.
本文將VoIP語音通信技術(shù)和Ad Hoc網(wǎng)絡(luò)技術(shù)融合,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)全雙工的多跳自組織語音通信系統(tǒng),搭建了實(shí)際的語音傳輸場(chǎng)景并進(jìn)行了大量實(shí)驗(yàn)分析.實(shí)驗(yàn)結(jié)果表明:在跳數(shù)較少、帶寬較大、路由切換不頻繁的情況下傳輸質(zhì)量較高;在帶寬較小、路由頻繁切換的情況下傳輸質(zhì)量將明顯降低.實(shí)現(xiàn)的多跳語音通信系統(tǒng)具有較好的應(yīng)用價(jià)值和參考意義,同時(shí)為下一步進(jìn)行視頻多跳傳輸研究奠定了實(shí)踐基礎(chǔ).
[1] Rajendiran M, Srivatsa S K. Stable route link in on-demand multicast routing protocol for Ad Hoc networks[J]. Procedia Engineering, 2012, 36(19): 1 432-1 460.
[2] 李昀, 安珊珊. 延長(zhǎng)無線多跳自組織網(wǎng)絡(luò)生存周期的方法[J]. 無線電通信技術(shù), 2013, 39(6): 65-68.
[3] 師小琳. Ad Hoc網(wǎng)絡(luò)穩(wěn)定路由協(xié)議[J].計(jì)算機(jī)工程與應(yīng)用, 2010, 46(32): 88-90.
[4] 殷脂, 葉春明, 溫蜜. 移動(dòng)Ad Hoc網(wǎng)絡(luò)QoS路由的閉環(huán)DNA計(jì)算模型[J]. 上海理工大學(xué)學(xué)報(bào), 2010,32(6):593-601.
[5] Velloso P B, Rubinstein M G, Duarte O C M B. Analyzing voice transmission capacity on Ad Hoc networks[C]// Proceedings of ICCT. Beijing:IEEE Xplore,2003: 1 254-1 257.
[6] Zhang H Y, Bialkowski M,Einicke G,etal. An extended AODV protocol for VoIP application in mobile Ad Hoc network[C]//2007 International Symposium on Communications and Information Technologies.Sydney:IEEE, 2007: 836- 841.
[7] Choudhry H S, Karim H. Using peer to peer poice over wireless Ad Hoc networks as an emergency command and control cystem[D].Halmstad: Halmstad University, 2009.