王心源,程 鵬,吳 斌,李雪妍
(1.中國科學(xué)院微電子研究所,北京 100029;2.中國科學(xué)院大學(xué),北京 100049)
WiFi是IEEE定義的一個(gè)無線網(wǎng)絡(luò)通信的工業(yè)標(biāo)準(zhǔn)(IEEE 802.11)[1],WiFi 是一種短程無線傳輸技術(shù)[2]。無線局域網(wǎng)(Wireless Local Area Networks,WLAN)技術(shù)或WiFi技術(shù)由于技術(shù)成熟、易于部署以及成本較低被廣泛地應(yīng)用于短距離場景如家庭場景。但在某些遠(yuǎn)距離特殊場景下不便于有線通信設(shè)備的安裝和部署,技術(shù)人員也渴望使用WiFi技術(shù)。增大WiFi的發(fā)射功率可以顯著增加傳輸距離,在傳輸功率方面滿足了遠(yuǎn)距離傳輸?shù)囊髸r(shí)仍存在一些問題,如隱藏節(jié)點(diǎn)等。這些問題的根源在于WiFi 所采用的媒體訪問控制(Media Access Control,MAC) 技術(shù)為載波監(jiān)聽多路訪問/沖突避免(Carrier Sense Multiple,CSMA/CA),CSMA 基于競爭的設(shè)計(jì)原理導(dǎo)致了特定場景性能低下,且無法避免[3]?;跁r(shí)分多址(Time Division Multiple Access,TDMA)的MAC 協(xié)議對共享的媒介在時(shí)間上進(jìn)行精細(xì)的劃分,各個(gè)節(jié)點(diǎn)只在自己歸屬的時(shí)隙內(nèi)發(fā)送數(shù)據(jù),實(shí)現(xiàn)了無競爭機(jī)制,避免數(shù)據(jù)競爭信道時(shí)產(chǎn)生碰撞,很好地解決了遠(yuǎn)距離傳輸下的隱藏節(jié)點(diǎn)問題[4]。在當(dāng)前WiFi商用硬件設(shè)備上對TDMA模式支持較少。文中在開源網(wǎng)絡(luò)仿真器NS-3中基于WiFi組件實(shí)現(xiàn)了TDMA 的MAC協(xié)議仿真。
時(shí)分多址是一種無爭用的介質(zhì)訪問協(xié)議。網(wǎng)絡(luò)中所有節(jié)點(diǎn)共享的信道帶寬被劃分為時(shí)間槽,每一個(gè)節(jié)點(diǎn)循環(huán)使用時(shí)間槽。各節(jié)點(diǎn)只在其分配的時(shí)間段內(nèi)傳輸數(shù)據(jù),傳輸槽通常是固定的時(shí)間間隔[5-6]。
每個(gè)傳輸槽之間插入保護(hù)間隔,以便傳輸不重疊。保護(hù)間隔的值通常是一個(gè)數(shù)據(jù)包傳輸?shù)街付ǖ膫鬏敺秶枰臅r(shí)間。在這個(gè)簡單的時(shí)分多址模型中,假設(shè)節(jié)點(diǎn)的時(shí)鐘是同步的。
在多節(jié)點(diǎn)網(wǎng)絡(luò)中,許多沖突都是由隱藏節(jié)點(diǎn)問題引起的。如圖1 所示,AP 為接入點(diǎn),STA1 和STA2為兩個(gè)站點(diǎn)。在家庭場景中,STA1 和STA2 的距離較近,它們可以通過載波偵聽感受到彼此的存在,即STA1 或STA2 要發(fā)送數(shù)據(jù)包時(shí)會先檢測載波是否正在被使用,如果被使用會進(jìn)行隨機(jī)退避,此時(shí)不會發(fā)生沖突。一旦STA1和STA2均距離AP較遠(yuǎn)甚至為傳輸極限距離時(shí),STA1 和STA2 將無法感受到彼此的存在,對于站點(diǎn)STA1 和STA2 來說載波是空閑的。若此時(shí)兩個(gè)站點(diǎn)同時(shí)向AP 發(fā)送數(shù)據(jù),那么將會產(chǎn)生沖突導(dǎo)致數(shù)據(jù)的傳輸錯(cuò)誤或失敗[7]。
圖1 隱藏節(jié)點(diǎn)問題
當(dāng)兩個(gè)不在彼此傳輸范圍內(nèi)的節(jié)點(diǎn)向同一接收器發(fā)送數(shù)據(jù)時(shí),來自兩個(gè)發(fā)射器的數(shù)據(jù)包在接收器上發(fā)生碰撞。這就是所謂的隱藏節(jié)點(diǎn)問題。
IEEE 802.11 是一種基于爭用的MAC 協(xié)議,通過引入無競爭的TDMA協(xié)議可以有效地解決此類問題。
NS-3 將連續(xù)變化的網(wǎng)絡(luò)過程按照時(shí)間順序分割成一系列的離散事件[8]。完整的NS-3 網(wǎng)絡(luò)模擬過程就是按時(shí)間先后執(zhí)行這些離散事件,如圖2 所示。
圖2 發(fā)送過程從連續(xù)到離散的過程
一個(gè)分組從節(jié)點(diǎn)0到節(jié)點(diǎn)1,其步驟可總結(jié)如下:
1)T1時(shí)刻,節(jié)點(diǎn)0 開始向信道中發(fā)送分組的第一個(gè)字節(jié),這時(shí)節(jié)點(diǎn)0 的網(wǎng)絡(luò)設(shè)備被占用,無法發(fā)送其他分組;
2)T2時(shí)刻,分組的最后一個(gè)字節(jié)發(fā)送完畢。網(wǎng)絡(luò)設(shè)備被釋放。T1到T2時(shí)刻這段時(shí)間就是分組的傳輸延時(shí);
3)T3時(shí)刻,分組被節(jié)點(diǎn)1 接收,NS-3 假設(shè)節(jié)點(diǎn)沒有傳輸延遲,所有到達(dá)其網(wǎng)絡(luò)設(shè)備的分組被立即接收。T2到T3這段時(shí)間即使分組的傳播延遲。
物理網(wǎng)絡(luò)中所有分組發(fā)送過程都是連續(xù)的,NS-3 將這個(gè)連續(xù)過程抽象為3 個(gè)離散事件,也就是3 個(gè)函數(shù)[9]。
T1時(shí)刻的分組發(fā)送事件,節(jié)點(diǎn)0 在T1開始發(fā)送分組,與物理網(wǎng)絡(luò)不同的是,節(jié)點(diǎn)0 一次性將整個(gè)分組發(fā)送給信道的C++對象,通過鎖定網(wǎng)絡(luò)設(shè)備,使其無法發(fā)送其他分組(后續(xù)分組將進(jìn)入到網(wǎng)絡(luò)設(shè)備對象的緩存中),直到T2時(shí)刻新的事件發(fā)生,即網(wǎng)絡(luò)設(shè)備解鎖。
通過在T1時(shí)刻鎖定網(wǎng)絡(luò)設(shè)備和T2時(shí)刻解鎖網(wǎng)絡(luò)設(shè)備兩件離散時(shí)間模擬出一個(gè)連續(xù)的分組發(fā)送過程。同樣模擬分組在信道中的傳輸過程,信道在T1時(shí)刻計(jì)劃一個(gè)新的事件,在T3時(shí)刻將分組一次性的轉(zhuǎn)發(fā)給目標(biāo)節(jié)點(diǎn)1 網(wǎng)絡(luò)設(shè)備的C++對象[10]。
通過在腳本中設(shè)置分組大小、傳輸速率和傳播延遲的屬性,可以模擬不同的網(wǎng)絡(luò)仿真。
在NS-3 中將節(jié)點(diǎn)(node)、設(shè)備(device)、協(xié)議層(MAC)、物理層(PHY)以及信道(Channel)均抽象成一個(gè)個(gè)C++的類[11]。該文通過在NS-3 仿真平臺中加入TDMA 相關(guān)的類TdmaMac 類、TdmaQueue 類以及TdmaController 類,實(shí)現(xiàn)了簡單的TDMA 協(xié)議。
2.2.1 TdmaMac
上層的數(shù)據(jù)包(packe)由IP 層傳送到TdmaMac中,TdmaMac 在收到數(shù)據(jù)包后,調(diào)用Enqueue 函數(shù)將數(shù)據(jù)包放入隊(duì)列并等待。等待到屬于該節(jié)點(diǎn)的傳輸時(shí)隙到來,TdmaMac 通過Get QueueState 函數(shù)查詢TdmaQueue 中的入隊(duì)數(shù)據(jù)包packet,然后將數(shù)據(jù)包packet 循環(huán)地從隊(duì)列中取出,并附加上MAC 頭和尾,執(zhí)行函數(shù)Start Transmission 將數(shù)據(jù)包發(fā)送給SimpleWireless Channel 類。同時(shí)在傳輸開始之前TdmaMac 中還需要根據(jù)packet 的大小(size)計(jì)算出傳輸所需的時(shí)間,把所有需要傳輸?shù)膒acket 的時(shí)間總和和TdmaController 分配給該節(jié)點(diǎn)的傳輸時(shí)間進(jìn)行比較,如果在該節(jié)點(diǎn)回合下不能再傳輸一個(gè)packet,則終止傳輸循環(huán),即使還剩余一定的時(shí)間。
2.2.2 TdmaQueue
TdmaQueue 隊(duì)列主要實(shí)現(xiàn)丟包策略。查詢隊(duì)列的state 為full 時(shí),將此時(shí)上層發(fā)送的packet 丟掉。TdmaQueue 中主要的兩個(gè)屬性變量為QueueLength和QueueTime。QueueLength 變量為隊(duì)列最大長度,QueueTime 為隊(duì)列最大延時(shí)。當(dāng)隊(duì)列中數(shù)據(jù)包數(shù)達(dá)到QueueLength 數(shù)量時(shí),后邊得到的數(shù)據(jù)包均丟掉。QueueTime 設(shè)定的時(shí)間為數(shù)據(jù)packet 在隊(duì)列中能夠存儲的最長時(shí)間,當(dāng)數(shù)據(jù)包在隊(duì)列中存儲的時(shí)間大于QueueTime 時(shí),數(shù)據(jù)包packet 同樣被丟掉。TdmaQueue 實(shí)現(xiàn)了以上兩種根據(jù)隊(duì)列長度以及數(shù)據(jù)包存儲時(shí)間的丟包策略。
2.2.3 TdmaController
TdmaController 負(fù)責(zé)管理和計(jì)劃實(shí)現(xiàn)TDMA 協(xié)議的控制,TdmaController 類初始化TDMA 傳輸參數(shù),授權(quán)節(jié)點(diǎn)進(jìn)行傳輸。在仿真開始前將分配給傳輸?shù)牟宀蹟?shù)量和插槽持續(xù)時(shí)間分配給每一個(gè)節(jié)點(diǎn)[12-14]。仿真開始后,仿真程序通過MAC 指針列表中調(diào)用TdmaMac,并指示節(jié)點(diǎn)它可以傳輸一個(gè)特定的SlotTime。當(dāng)傳輸完成后,等待一個(gè)GuardTime,然后開始下一個(gè)節(jié)點(diǎn),從列表中調(diào)用下一個(gè)節(jié)點(diǎn)。一旦所有節(jié)點(diǎn)全部遍歷完成,等待一個(gè)InterFrame Time 時(shí)間再開始下一個(gè)周期。
TdmaController 函數(shù)為Tdmacontroller 起始執(zhí)行函數(shù),Start 函數(shù)中首先啟動controller。Start 函數(shù)調(diào)用仿真器simulator 執(zhí)行StartTdmaSessions 函數(shù)。Start TdmaSessions 函數(shù)在第0 秒執(zhí)行ScheduleTdma Session 函數(shù)。ScheduleTdmaSession 函數(shù)中創(chuàng)建了一個(gè)mac 的map。在每一個(gè)slot 中不斷地循環(huán)執(zhí)行ScheduleTdmaSession 函數(shù),Start 函數(shù)調(diào)用關(guān)系如圖3 所示。
圖3 Start函數(shù)調(diào)用關(guān)系
ScheduleTdmaSession 函數(shù)通過調(diào)用 Tdma CentralMac::StartTransmission 函數(shù),不斷地調(diào)用SendPacketDown 函數(shù)將packet 傳遞下去。Send PacketDown 函數(shù)調(diào)用lowmac 層的StartTransmission函數(shù)最終將packet傳輸出去進(jìn)入到信道中[15-17]。
函數(shù) TdmaController::CalculateTxTime 調(diào)用CalculateBytesTxTime 計(jì)算packet 的TX 時(shí)間,以供TdmaMac::StartTransmission 使用,判斷剩余packet 是否能在slot時(shí)間內(nèi)傳輸完成。
圖4 傳輸函數(shù)執(zhí)行過程
TdmaMac::StartTransmission 執(zhí)行后,TdmaCon troller 先對packet 的傳輸時(shí)間進(jìn)行計(jì)算得到packetTransmissionTime,然后將其與totalTransmi ssionSlot 進(jìn)行比較。
該系統(tǒng)測試TDMA 性能采用一個(gè)接入點(diǎn),4 個(gè)客戶端的應(yīng)用場景,仿真參數(shù)設(shè)置如表1 所示。4 個(gè)客戶端STA1、STA2、STA3、STA4 按時(shí)隙順序分配,且時(shí)隙大小相同,每個(gè)客戶端均占用一個(gè)slottime 進(jìn)行輪詢。
表1 仿真參數(shù)設(shè)置
圖5 TDMA仿真拓?fù)?/p>
通過配置上層的應(yīng)用產(chǎn)生packet 的速率以及分別設(shè)置物理層的傳輸速率進(jìn)行吞吐率測試,吞吐率仿真結(jié)果如表2 所示。
表2 吞吐率仿真結(jié)果
文中對WiFi 設(shè)備在特定場景下應(yīng)用的缺點(diǎn)進(jìn)行了簡要分析,簡單介紹了隱藏節(jié)點(diǎn)問題的定義,其根本原因來自協(xié)議的競爭機(jī)制,因此提出使用公平接入的TDMA 協(xié)議。同時(shí)在NS-3 開源仿真器中增加了相關(guān)模塊,Tdmamac 類,TdmaQueue 類 和Tdmacontroller 類,這3 類實(shí)現(xiàn)了基本TDMA 協(xié)議,并對其正確性進(jìn)行了驗(yàn)證。如有需要,可以在此基礎(chǔ)上添加TDMA 調(diào)度算法。