?
無線傳感器網絡是由大量按需隨機分布的集成有傳感器、數據處理單元和通信模塊的微型節點以自組織方式構成的無線網絡。傳感器網絡具有成本低、能耗代、靈活性高等優點,可以應用于國防軍事、環境監測、交通管理、醫療衛生、反恐抗災等領域,具有重要的研究價值和應用前景。無線傳感器網絡節點的資源非常有限,因此需要一個輕量級的無線通信規范。IEEE 802.15.4標準定義了一個短距離、低復雜度、低功耗、低數據速率的介質訪問控制層(MAC)和物理層(PHY)規范,該標準的技術特點決定了它特別適合傳感器網絡、智能家庭網絡、工業控制網絡等節點眾多、數據率較低的應用環境。IPv6作為下一代網絡協議,具有地址資源豐富、地址自動配置、安全性高、移動性好等優點,可以滿足無線傳感器網絡在地址、安全、移動及與現有網絡融合等方面的需求。因此,IPv6與IEEE 802.15.4在傳感器網絡上的結合有著無可比擬的應用前景。
本文以北京交通大學下一代互聯網互聯設備國家工程實驗室自主開發和研制的微型傳感路由器所構建的IPv6無線傳感器網絡為基礎,設計并實現了一種更為高效的IPv6報頭壓縮方法,并對壓縮性能進行了分析。
1 平臺簡介
本文基于IPv6無線傳感器網絡平臺的拓撲結構及協議層次如圖1所示。IPv6無線傳感器網絡節點設備可以自組織形成多跳Mesh網絡,將采集到的溫度、濕度、光強等環境信息發送給網關設備。網關設備通過以太網直連的方式與服務器進行通信,并把收到的來自傳感器節點的數據提交給服務器,服務器端完成對整個IPv6傳感器網絡的控制和環境信息的人性化顯示。
?
傳感器節點采用ATmega128作為處理器、使用CC2420作為射頻芯片,能量供應模塊可以使用9 V直流穩壓電源或使用9 V干電池直接供電,同時配備溫濕度傳感器和光強傳感器對環境信息進行采集。節點通信協議分為5層,物理層采用IEEE 802.15.4通信規范,使用OQPSK方式進行調制,發送頻段使用2.4 GHz,傳輸速率可達250 Kb/s。適配層實現數據包的分片和重組、報頭壓縮以及Mesh路由等功能。網絡層運行精簡的微型IPv6協議棧,該協議棧代碼量小、簡易輕型并且可以與使用完整的IPv6協議棧的對等節點進行通信。應用層主要運行傳感器網絡應用級程序,比如數據采集、環境監控等。節點的層次協議設計完全遵守RFC4919和RFC4944中定義的規范。
2 IPv6報頭壓縮
2.1 現有方案分析
到目前為止,6LoWPAN報頭壓縮方案主要有兩種。其中一種是RFC4944中定義的方案。該方案在最理想的情況下可以將IPv6完整的40 B壓縮到2 B(HC1字節和跳數限制字節),同時支持UDP,TCP,ICMP下一個報頭的壓縮,HC1字節編碼IPv6報頭中各字段的壓縮方式,IPv6報頭中未經壓縮的內容按順序存放在未壓縮字段中。
?
如圖2所示,版本、傳輸類型和流標簽(全部為零)、凈荷長度(可以從IEEE 802.15.4 MAC頭中凈荷長度字段推斷出來)均可以壓縮掉,下一個報頭字段攜帶在HC1字節中,跳數限制字段不壓縮,存放在未壓縮字段中。標準中規定IPv6地址采用無狀態的配置式,地址由64位前綴和64位接口標識符(Interface ID,IID)生成。IEEE 802.15.4定義了兩種尋址模式:IEEE 64位擴展地址和16位短地址。每一個IEEE802. 15.4設備都有一個分配的EUI-64標識符,該標識符用作64位擴展地址進行尋址,具有全球惟一性,并且通過該EUI-64標識符可以生成一個IPv6接口標識符,實現IPv6地址的自動配置。16位短地址是在節點成功加入網絡后,由節點所在PAN內的協調者動態分配,只能保證在該PAN內的惟一性,不能用作實現IPv6地址的自動配置。因此如果IPv6地址為本地鏈路地址(前綴為fe80::/64),并且IEEE 802.15.4尋址模式為64位擴展地址,就可以將IPv6地址壓縮掉,否則就要將其在未壓縮字段中攜帶。
圖3為HC1字節具體編碼格式。
?
另一種是現有報頭壓縮草案中定義的方案。該方案提出了對本地鏈路地址、全球單播地址、多播地址等IPv6地址的壓縮方法,同時解決了源壓縮方案不具有協議層次性的弊端。而且該壓縮方案支持IPv6擴展報頭的壓縮和流標簽、服務類型的區分。但是這種壓縮方案過于復雜,對于處理能力有限、能量受限、硬件資源匱乏并且以環境監測為主要應用的傳感器節點來說并不實用。因此本文提出一種基于RFC4944的IPv6報頭壓縮改進方案。
2.2 改進方案
雖然RFC4944中提到的壓縮方案已經很精簡,但是這種方法仍然存有冗余。方案中對于IPv6報頭的跳數限制字段并沒有壓縮,而是始終占用1 B存放在未壓縮字段中。但是在實際中,1,64,255這三種跳數限制已經可以滿足大部分的應用需求,因此本文提出一種支持對跳數限制壓縮的IPv6報頭壓縮方法,最理想情況下可以將IPv6報頭壓縮到1B。
如果將跳數限制壓縮,就要從HC1字節中節省出兩個比特,用來標識跳數限制的4種狀態(未壓縮、1、64、255),HC1字節中前4個比特都用來描述IPv6源地址和目的地址的壓縮狀態,存在一定的冗余性。因為根據上文的分析,不需要1個比特來專門標識IPv6接口標識符的壓縮狀態,如果IEEE 802.15.4尋址模式為64位擴展地址,接口標識符可以直接壓縮掉,如果尋址模式為16位短地址,接口標識符不可以壓縮,需要攜帶在未壓縮字段中。因此HC1字節中只需要2個比特標識IPv6地址前綴的壓縮狀態,可以節省下2個比特用來標識跳數限制的壓縮狀態。具體壓縮方案如圖4所示。
?
2.3 實現流程
為了實現IPv6報頭壓縮與解壓縮的功能,在適配層和網絡層之間加入壓縮控制層,網絡層的數據經過壓縮控制層的處理之后交給適配層處理,同樣適配層的數據經過壓縮控制層之后交給網絡層處理,處理流程如圖5所示。系統頭文件中定義一個預編譯開關來控制IPv6報頭是否要進行壓縮,當開關打開時,數據包將會進入壓縮器進行處理。壓縮器首先要完成節點本地環境的檢測,主要包括對IEEE 802.15.4地址模式、IPv6地址前綴類型、服務類型和流標簽狀態、下一個首部類型、跳數限制需求和下一個首部壓縮狀態的檢測,之后根據節點本地環境進行HC1字節和未壓縮字段的填充。
數據包的解壓縮過程正好是數據包壓縮的逆程,解壓縮器首先要根據IEEE 802.15.4地址類型還原接口標識符,然后通過解碼HC1字節可以將IPv6報頭中壓縮掉的字段恢復出來,最后在配合未壓縮字段的內容就可以還原完整的IPv6報頭。
?
3 功能測試及性能分析
3.1 功能測試
該系統中節點使用64位擴展地址作為底層的尋址模式,6LoWPAN網絡的內部使用IPv6本地鏈路地址進行通信,在單跳情況下使用Sniffer無線嗅探儀捕捉到的壓縮前后數據包內容如圖6所示。根據具體的IPv6報頭格式并按照上文提到的IPv6報頭壓縮方案將原40 B的IPv6報頭壓縮到1 B,壓縮前總數據包長度為85 B,壓縮后總數據包長度為46 B,壓縮效率為(85-46)/85=45.9%,對于多跳情況下,適配層會增加一個Mesh頭部,該頭部長度為17 B,因此對應于多跳情況下壓縮效率為[(85+17)-(46+17)]/(85+17)=38.2%。基于以上事實,下文通過存儲開銷、網絡生存時間、丟包率、平均時延4個方面對報頭壓縮進行性能分析。
3.2 存儲開銷
節點的程序代碼存放在ATmega128的ROM中,大小為128 KB,數據空間為ATmega128的RAM,大小為4 KB。在把報頭壓縮開關打開和關閉的情況下,使用AVR Studio4工具分別對同一序進行編譯,軟件輸出結果如表1所示。
?
由表1可知報頭壓縮使程序的代碼空間增加了1 742 B,只占節點ROM的1.32%,但是卻沒有增加額外的數據空間。AVR Studio 4工具給出的程序所使用的RAM大小只是程序中所使用的全局變量的大小,結果說明打開報頭壓縮選項并未增加全局變量的使用,經計算報頭壓縮所需的局部變量不會超過20B。
3.3 網絡生存時間
網絡生存時間對于傳感器網絡是一個非常重要的性能參數。然而傳感器網絡大部分的能量均消耗在數據包的發送和處理器的指令處理上。一方面,報頭壓縮可以減少數據包的長度,節省單位數據包的發送能耗。另一方面,報頭壓縮會增加處理器額外的指令處理,增加單位數據包的發送能耗。為了驗證報頭壓縮是否能夠增加網絡的生存時間,做如下實驗:采用同一節點,使用9 V干點池供電,分別在報頭壓縮和不壓縮的情況下單跳與網關通信(鏈路質量很好,無其他無線設備干擾,發送功率均為1 mW),在服務器端記錄當電池能量耗盡時壓縮和不壓縮兩種情況下節點發送數據包的總個數,實驗結果如表2所示。
?
由表2可見節點啟用報頭壓縮發送的數據包總數要大于關閉報頭壓縮的情況,顯然報頭壓縮可以有效的提高網絡生存時間。
3.4 丟包率
由于使用報頭壓縮會使節點發送的數據包長度變短,因此在相同的節點發包速率下會減小MAC層的碰撞概率,理論上會減少丟包的發生。為了驗證上述結論,就要盡可能地減少無線信道對丟包率的影響,實驗方案如下:選取10個傳感器節點與網關組成星型網路,通信距離均在1 m以內,發送功率均為1 mW。在不同的發包頻率下使節點發送100個數據包,在服務器統計總共收到的數據包個數,計算網絡的整體丟包率。實驗分為2組,分別采用壓縮和不壓縮的方式進行數據包發送,結果如圖7所示。
?
由圖可見網絡的丟包率與節點發送數據包的頻率和長度有關,發送頻率越高、數據包越長,則網絡產生的信道沖突的可能性越大,丟包率也就越高。
3.5 平均時延
節點發送數據包的速率為250 Kb/s,采用壓縮方案單個數據包可以節省39 B,因此單個數據包的發送時間可以減少39×8/250=1.24 ms。當然報頭壓縮和解壓縮需要額外的處理時間,本節點ATmega128工作頻率為8 MHz,處理性能為8 MIPS,處理1 000條指令的時間也僅需125μs,因此綜合來講報頭壓縮可以有效的減少網絡時延,尤其是在大規模網絡部署的情況下。本文中采用Ping6命令對網絡時延進行測試,實驗分為2組分別對應壓縮和不壓縮的情況,每組實驗使用5個節點組成5跳網絡,在服務器端對每跳節點進行100次ICMP響應請求,記錄平均返回時間,實驗結果如圖8所示。
?
由圖可見網絡的平均延時基本與跳數為線性增加的關系,單跳情況下壓縮與不壓縮的網絡時延之差大概在2.5 ms左右。因為Ping命令測試的是往返時間,所以這與理論分析相吻合,隨著跳數的增加時延之差基本線性增長。
4 結語
本文設計并實現了一種IPv6報頭壓縮機制,理想情況下可以將IPv6報頭壓縮到1 B,在節點單跳和多跳通信的情況下壓縮效率分別為45.9%和38.2%。實驗結果表明,本文所設計的報頭壓縮方案可以在占用較小額外存儲空間的情況下,減小丟包率、延長網絡生存時間、降低網絡時延。由于對下一個報頭(UDP,TCP,ICMP)的壓縮并不會給壓縮效率帶來很高的收益,因此本文中并未討論下一個報頭的壓縮方案,后續工作中可以考慮增加對下一個報頭的壓縮支持。
評論
查看更多