文/黃騰 鄭凱 姜孝偉
在TCP/IP世界中,以太網(wǎng)IP數(shù)據(jù)報的封裝是在RFC 894[Hornig 1984]中定義的。前面12個字節(jié)是硬件地址(即MAC地址)。
對MAC地址的提取是IP隧道的關(guān)鍵技術(shù)。在Windows操作系統(tǒng)中,可以通過綁定底層適配器來提取服務(wù)端和客戶端的MAC地址。但是,在VxWorks嵌入式實(shí)時操作系統(tǒng)中,沒有相應(yīng)的底層適配器應(yīng)用函數(shù)。通過鉤子函數(shù)可以鉤取MAC地址,但鉤子函數(shù)本身屬于黑客機(jī)制,具有一定的風(fēng)險。
本文通過開發(fā)SENS中的MUX層,對網(wǎng)卡底層原始數(shù)據(jù)進(jìn)行提取,從而獲取服務(wù)端與客戶端的MAC地址,實(shí)現(xiàn)IP隧道技術(shù)。
SENS獨(dú)立于硬件設(shè)備接口,由協(xié)議驅(qū)動程序、多元接口MUX層和END網(wǎng)絡(luò)驅(qū)動程序組成。
協(xié)議驅(qū)動程序負(fù)責(zé)與上層網(wǎng)絡(luò)傳輸協(xié)議交互。增強(qiáng)型網(wǎng)絡(luò)驅(qū)動END(Enhanced Network Driver)是一個數(shù)據(jù)鏈路層驅(qū)動程序,它通過MUX層與網(wǎng)絡(luò)協(xié)議層通信。MUX層作為數(shù)據(jù)鏈路層和網(wǎng)絡(luò)協(xié)議層之間的接口,用于管理網(wǎng)絡(luò)協(xié)議接口和底層硬件之間的交互,將硬件從網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)中隔離出來。它是為減弱數(shù)據(jù)鏈路層與網(wǎng)絡(luò)協(xié)議層之間的耦合性、提升網(wǎng)絡(luò)驅(qū)動程序與協(xié)議的通信效率而專門增加的一層協(xié)議。
VxWorks網(wǎng)絡(luò)協(xié)議棧傳輸數(shù)據(jù)使用的內(nèi)存,是在VxWorks操作系統(tǒng)啟動進(jìn)行網(wǎng)絡(luò)協(xié)議初始化時申請的。VxWorks操作系統(tǒng)提供NetBufLib建立內(nèi)存節(jié)點(diǎn)池,網(wǎng)絡(luò)協(xié)議棧傳輸數(shù)據(jù)所需的內(nèi)存都在這些內(nèi)存節(jié)點(diǎn)池中申請,使用完畢后釋放。
表1:IP隧道業(yè)務(wù)報文結(jié)構(gòu)
表2:IP隧道應(yīng)用軟件抓取的MAC地址
NetBufLib使用三種數(shù)據(jù)結(jié)構(gòu)處理網(wǎng)絡(luò)協(xié)議棧傳輸?shù)臄?shù)據(jù):mBlk、clBlk和cluster。其中,cluster保存的是實(shí)際的數(shù)據(jù),mBlk和clBlk保存的是指向數(shù)據(jù)的指針,用于管理cluster中保存的數(shù)據(jù)。
在基于END驅(qū)動的VxWorks中,網(wǎng)絡(luò)協(xié)議通過MUX接口與數(shù)據(jù)鏈路層進(jìn)行通信,所有與網(wǎng)絡(luò)接口相關(guān)的業(yè)務(wù)都在數(shù)據(jù)鏈路層驅(qū)動中處理,如數(shù)據(jù)的發(fā)送和接收。
在網(wǎng)卡之間搭建IP隧道,對每一個發(fā)送的IP報文封裝IP隧道報頭,對每一個接收的IP報文拆解IP隧道報頭。業(yè)務(wù)報文結(jié)構(gòu)如表1。
本文試驗(yàn)使用計算機(jī)和開發(fā)板搭建IP隧道。
試驗(yàn)準(zhǔn)備階段,在計算機(jī)上安裝“業(yè)務(wù)模擬與分析系統(tǒng)”終端軟件和UDP數(shù)據(jù)終端軟件,用于和開發(fā)板之間進(jìn)行數(shù)據(jù)包的收發(fā)。在開發(fā)板PPC上加載并運(yùn)行IP隧道應(yīng)用軟件。
開機(jī)后,計算機(jī)和開發(fā)板網(wǎng)卡間會進(jìn)行數(shù)據(jù)交互,IP隧道應(yīng)用軟件接收端會抓取開發(fā)板網(wǎng)卡收到的最原始數(shù)據(jù)。提取數(shù)據(jù)的前12個字節(jié),開發(fā)板MAC地址在前(目的MAC地址),計算機(jī)MAC地址在后(源MAC地址)。試驗(yàn)數(shù)據(jù)如表2。
獲取MAC地址后,在發(fā)送端封裝IP隧道報頭,處理時要把上述目的MAC和源MAC對調(diào)。
IP隧道應(yīng)用軟件接收來自“業(yè)務(wù)模擬與分析系統(tǒng)”終端軟件的數(shù)據(jù)并通過UDP轉(zhuǎn)發(fā)給UDP數(shù)據(jù)終端軟件;同時,它通過UDP接收來自UDP數(shù)據(jù)終端軟件的數(shù)據(jù)并轉(zhuǎn)發(fā)給“業(yè)務(wù)模擬與分析系統(tǒng)”終端軟件,從而形成測試回路。
我們進(jìn)行了10000次開機(jī)試驗(yàn),試驗(yàn)數(shù)據(jù)證明,本文通過開發(fā)MUX層抓取網(wǎng)卡底層最原始數(shù)據(jù),對服務(wù)端與客戶端MAC地址的提取成功率高達(dá)100%。同時,在“業(yè)務(wù)模擬與分析系統(tǒng)”終端軟件中設(shè)置數(shù)據(jù)發(fā)送間隔為5ms情況下,回環(huán)測試的數(shù)據(jù)收、發(fā)丟包率為0%。試驗(yàn)數(shù)據(jù)表明,本文提出的通過開發(fā)MUX層實(shí)現(xiàn)網(wǎng)卡底層數(shù)據(jù)抓取的方法可以有效解決VxWorks嵌入式實(shí)時操作系統(tǒng)下IP隧道報文的收、發(fā)問題,從而保障無線通信。