崔元成
研究了一種應(yīng)用于無線自組網(wǎng)的網(wǎng)絡(luò)層交換軟件,通過系統(tǒng)模型的抽象和建立,將網(wǎng)絡(luò)層需要實(shí)現(xiàn)的功能獨(dú)立出來,進(jìn)而制定了本地及全局路由的建立與維護(hù)、網(wǎng)絡(luò)層數(shù)據(jù)交換等關(guān)鍵策略,綜合運(yùn)用了多線程設(shè)計(jì)、網(wǎng)絡(luò)編程、驅(qū)動設(shè)計(jì)等多種編程技術(shù),在高速ARM平臺上,基于嵌入式Linux操作系統(tǒng)實(shí)現(xiàn)了網(wǎng)絡(luò)層交換系統(tǒng)軟件,使標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備無需任何改變即可接入自組網(wǎng)節(jié)點(diǎn)設(shè)備,并能夠通過無線自組網(wǎng)進(jìn)行通信,解決了接入設(shè)備的數(shù)據(jù)尋路與數(shù)據(jù)交換問題。
In this paper, a switching software on network layer is studied for the wireless ad-hoc network. Through the abstract and establishment of the system model, the function of the network layer is separated out. The key strategies are established for the establishment and maintenance of local and global routing and data exchange on network layer. By using a variety of programming technologies such as the multithread design, network programming and driver design, the switching software on network layer is achieved based on embedded Linux operating system on the high-speed ARM platform. Therefore the network equipment can access to the node equipment in ad-hoc network without any changes and communicate with each other by wireless ad-hoc network. This research also solves the data routing and data exchange of access equipment.
ad-hoc network the network layer switching software data routing data exchange
1 引言
無線自組網(wǎng)系統(tǒng)是由一組移動節(jié)點(diǎn)組成的多跳臨時(shí)性自治系統(tǒng),可以隨時(shí)隨地快速構(gòu)建移動通信網(wǎng)絡(luò),工作過程中網(wǎng)絡(luò)各個(gè)終端節(jié)點(diǎn)設(shè)備可以自由移動、地位相同,因此在現(xiàn)場使用中可以不依賴基礎(chǔ)設(shè)施,快速、靈活地建立無中心分布式通信網(wǎng)絡(luò)。該系統(tǒng)分為物理層、MAC層和網(wǎng)絡(luò)層3個(gè)主要部分。其中,物理層實(shí)現(xiàn)底層無線通信功能;MAC層實(shí)現(xiàn)接入、退出管理以及資源調(diào)配和鏈路維護(hù)功能;網(wǎng)絡(luò)層實(shí)現(xiàn)通用IP網(wǎng)絡(luò)設(shè)備(如計(jì)算機(jī)、智能手機(jī)等)的接入、網(wǎng)絡(luò)路由管理、IP層數(shù)據(jù)透明轉(zhuǎn)發(fā)功能。
本文基于無線自組網(wǎng)系統(tǒng),在已有MAC層、物理層的研究基礎(chǔ)上,通過對網(wǎng)絡(luò)層交換關(guān)鍵技術(shù)進(jìn)行研究,設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)層系統(tǒng)軟件,使接入自組網(wǎng)系統(tǒng)的各種標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備進(jìn)行基于IP的網(wǎng)絡(luò)層數(shù)據(jù)交換,實(shí)現(xiàn)如圖1所示的應(yīng)用方式,各種無線終端、有線終端等設(shè)備通過Wi-Fi或以太網(wǎng)等標(biāo)準(zhǔn)網(wǎng)絡(luò)接口接入自組網(wǎng)節(jié)點(diǎn)設(shè)備即可互相通信,解決自組網(wǎng)接入設(shè)備的數(shù)據(jù)路由交換問題。
2 網(wǎng)絡(luò)層系統(tǒng)模型
如圖2所示,網(wǎng)絡(luò)層位于通用網(wǎng)絡(luò)接口和MAC層之間,可以把通用接入接口抽象為接入網(wǎng)絡(luò),將MAC層及以下抽象為自組網(wǎng)絡(luò),網(wǎng)絡(luò)層交換軟件即可抽象為虛擬網(wǎng)關(guān)模型,其核心功能完全由軟件虛擬實(shí)現(xiàn),除了具備一般網(wǎng)關(guān)的通用網(wǎng)絡(luò)底層數(shù)據(jù)捕獲和轉(zhuǎn)發(fā)功能之外,還具有針對自組網(wǎng)絡(luò)設(shè)計(jì)的專用路由功能。
根據(jù)系統(tǒng)模型,網(wǎng)絡(luò)層交換軟件在接入端應(yīng)能捕獲全部局域網(wǎng)IP層網(wǎng)絡(luò)數(shù)據(jù)(不僅僅是應(yīng)用層數(shù)據(jù)),進(jìn)行IP層數(shù)據(jù)發(fā)送,在自組網(wǎng)絡(luò)端能夠使用自組網(wǎng)協(xié)議棧,將得到的IP數(shù)據(jù)進(jìn)行封裝后完成無線數(shù)據(jù)收發(fā),實(shí)現(xiàn)網(wǎng)絡(luò)層數(shù)據(jù)的透明傳輸;同時(shí),動態(tài)實(shí)時(shí)維護(hù)本地路由和全局路由,設(shè)計(jì)適合自組網(wǎng)節(jié)點(diǎn)拓?fù)漕l繁變化的情況,保證數(shù)據(jù)的正確尋路[1]。
3 關(guān)鍵方法的設(shè)計(jì)
3.1 本地路由發(fā)現(xiàn)
由于無線自組網(wǎng)傳輸?shù)膸挼荣Y源受限,因此必須動態(tài)了解每個(gè)自組網(wǎng)節(jié)點(diǎn)設(shè)備下掛載網(wǎng)絡(luò)設(shè)備的組成,一旦有設(shè)備退出,就把發(fā)送到該設(shè)備的鏈路回收,以減少系統(tǒng)開銷;當(dāng)有新的設(shè)備接入后,又需要實(shí)時(shí)更新路由信息,增加鏈路以保證實(shí)時(shí)通信,使用本地局域網(wǎng)路由發(fā)現(xiàn)方法,確定每個(gè)節(jié)點(diǎn)下網(wǎng)絡(luò)設(shè)備的組成,如圖3所示。
采取ARP(Address Resolution Protocol,地址解析協(xié)議)技術(shù)實(shí)現(xiàn)本地局域網(wǎng)終端,可以發(fā)現(xiàn)該協(xié)議為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,不需要接入設(shè)備做任何應(yīng)用程序設(shè)計(jì)和修改。向接入設(shè)備發(fā)送自封裝的ARP request包,接入的節(jié)點(diǎn)收到后反饋回復(fù)ARP answer,設(shè)置ARP最優(yōu)的發(fā)送間隔、超時(shí)限制以及發(fā)送偵測包實(shí)體個(gè)數(shù)和響應(yīng)判斷時(shí)間,通過節(jié)點(diǎn)的響應(yīng)狀況得到本地局域網(wǎng)拓?fù)錉顩r[2]。
3.2 全局路由建立
每個(gè)自組網(wǎng)節(jié)點(diǎn)接收的數(shù)據(jù)必須要轉(zhuǎn)發(fā)到掛載著目的IP終端設(shè)備的另一個(gè)信道節(jié)點(diǎn),這就要求每個(gè)自組網(wǎng)節(jié)點(diǎn)都要清楚自己和其它節(jié)點(diǎn)接入的終端設(shè)備情況,即全局路由。
如圖4所示,在得到本地網(wǎng)絡(luò)拓?fù)淝闆r后,每個(gè)自組網(wǎng)節(jié)點(diǎn)先生成1份本地路由表,在網(wǎng)絡(luò)建立時(shí)向建網(wǎng)節(jié)點(diǎn)發(fā)送,建網(wǎng)節(jié)點(diǎn)匯總后形成全局路由表,再向網(wǎng)內(nèi)所有節(jié)點(diǎn)廣播,同步全局路由信息;同時(shí),每個(gè)節(jié)點(diǎn)實(shí)時(shí)監(jiān)測本地局域網(wǎng)拓?fù)湫畔?,在?jié)點(diǎn)掛載的終端拓?fù)浣Y(jié)構(gòu)發(fā)生變化時(shí),節(jié)點(diǎn)先更新本地路由表,然后通過專用信令向建網(wǎng)節(jié)點(diǎn)發(fā)送,建網(wǎng)節(jié)點(diǎn)更新全局路由表后再向全網(wǎng)廣播進(jìn)行全局路由信息同步,這樣就使每個(gè)信道節(jié)點(diǎn)都能動態(tài)了解全局的路由信息,實(shí)現(xiàn)正確的路由轉(zhuǎn)發(fā)功能。endprint
3.3 IP數(shù)據(jù)透明交換
將自組網(wǎng)節(jié)點(diǎn)設(shè)計(jì)為1個(gè)二級網(wǎng)絡(luò)設(shè)備,第一級為用戶網(wǎng)絡(luò),第二級為自組網(wǎng)網(wǎng)絡(luò)。用戶網(wǎng)絡(luò)對應(yīng)接入端,是用戶可見的網(wǎng)絡(luò)接口,支持完整的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,設(shè)備與用戶的數(shù)據(jù)交互在IP層及以下進(jìn)行,使IP層及以上各層的數(shù)據(jù)凈荷不會受到任何改變,保證了應(yīng)用無關(guān)性;無線自組網(wǎng)絡(luò)對應(yīng)傳輸端,為用戶不可見網(wǎng)絡(luò)接口,只支持傳輸必須的網(wǎng)絡(luò)協(xié)議層(如網(wǎng)絡(luò)層、MAC層和物理層),用戶的網(wǎng)絡(luò)層數(shù)據(jù)作為凈荷直接橋接到自組網(wǎng)網(wǎng)絡(luò)層,通過自主設(shè)計(jì)的自組網(wǎng)網(wǎng)絡(luò)協(xié)議棧進(jìn)行重封裝,并根據(jù)路由信息進(jìn)行自組網(wǎng)傳輸,實(shí)現(xiàn)應(yīng)用無關(guān)的IP數(shù)據(jù)透明交換設(shè)計(jì)[3]。如圖5所示。
4 系統(tǒng)軟件實(shí)現(xiàn)方法
系統(tǒng)軟件設(shè)計(jì)基于嵌入式Linux操作系統(tǒng),以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構(gòu)
系統(tǒng)軟件由Linux內(nèi)核模塊和多線程應(yīng)用程序構(gòu)成,每個(gè)模塊和線程實(shí)體由多個(gè)子模塊組成,用戶空間程序和內(nèi)核空間程序協(xié)同工作,實(shí)現(xiàn)了整個(gè)系統(tǒng)網(wǎng)絡(luò)層交換軟件功能。
如圖6所示,內(nèi)核空間模塊主要由驅(qū)動程序組成,實(shí)現(xiàn)底層硬件資源的調(diào)用和接口通信功能;用戶空間主要由協(xié)議棧、數(shù)據(jù)結(jié)構(gòu)和多線程組成,通過對應(yīng)用的詳細(xì)分析,按照整個(gè)軟件功能可以把系統(tǒng)任務(wù)劃分為多個(gè)子任務(wù),這些子任務(wù)以線程的方式工作,實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。
4.2 多線程編程設(shè)計(jì)
應(yīng)用層運(yùn)行著多個(gè)并行工作的線程,協(xié)議棧進(jìn)行數(shù)據(jù)的封裝和解析,上層和底層數(shù)據(jù)區(qū)分類型后放入指定的fifo中,上層的各處理線程只與各個(gè)fifo組進(jìn)行數(shù)據(jù)交互,保證了應(yīng)用的高適配性。其中,自組網(wǎng)偵測線程實(shí)現(xiàn)全網(wǎng)路由信息的接收、發(fā)送和處理;局域網(wǎng)偵測線程實(shí)現(xiàn)本節(jié)點(diǎn)路由信息的接收、發(fā)送和處理;路由維護(hù)線程動態(tài)維護(hù)路由表;自組網(wǎng)數(shù)據(jù)收發(fā)線程和局域網(wǎng)數(shù)據(jù)收發(fā)線程實(shí)現(xiàn)對應(yīng)網(wǎng)絡(luò)數(shù)據(jù)的收發(fā);數(shù)據(jù)交換線程根據(jù)路由信息實(shí)時(shí)進(jìn)行兩級網(wǎng)絡(luò)之間的數(shù)據(jù)交互。
為了協(xié)調(diào)線程的行為,實(shí)現(xiàn)臨界區(qū)的保護(hù)等功能,必須采取一定的策略進(jìn)行線程調(diào)度,通過線程間通信機(jī)制,達(dá)到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構(gòu)想發(fā)生。通過信號量等多種Linux下的同步互斥方法,實(shí)現(xiàn)了多個(gè)線程之間的復(fù)雜調(diào)度與管理[4]。
4.3 網(wǎng)絡(luò)編程設(shè)計(jì)
系統(tǒng)軟件除了使用常規(guī)的應(yīng)用層TCP、UDP網(wǎng)絡(luò)編程方法之外,還使用了多種特殊的網(wǎng)絡(luò)編程方法實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取、IP偽裝、ARP報(bào)文通信等多種功能。原始套接字(SOCK_RAW)是對原始網(wǎng)絡(luò)報(bào)文進(jìn)行處理的套接字,其可以繞過網(wǎng)絡(luò)協(xié)議棧將數(shù)據(jù)直接發(fā)送到網(wǎng)絡(luò)核心,直接通過鏈路層發(fā)送,或者從網(wǎng)絡(luò)核心直接接收沒有經(jīng)過TCP/IP協(xié)議解析的原始數(shù)據(jù)包[5]。
將通用網(wǎng)卡設(shè)置為混雜模式,這樣使用特殊套接字編程時(shí)就可以獲得接入網(wǎng)絡(luò)端的全部活動數(shù)據(jù)[6]。在實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取過程中,直接得到含有IP頭的網(wǎng)絡(luò)層數(shù)據(jù),完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實(shí)現(xiàn);在設(shè)計(jì)IP偽裝功能時(shí),將已經(jīng)按照協(xié)議封裝好源IP的數(shù)據(jù)包直接調(diào)用原始套接字發(fā)送,這樣協(xié)議棧就不會將本機(jī)IP封裝到數(shù)據(jù)流中,導(dǎo)致系統(tǒng)通信混亂;在ARP報(bào)文通信過程中,自主封裝報(bào)文信息,通過原始套接字直接發(fā)送出去,實(shí)現(xiàn)了局域網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)功能,并且由于程序可以完全控制報(bào)文流量等參數(shù),有效地降低了系統(tǒng)開銷。
4.4 驅(qū)動程序設(shè)計(jì)
在編程過程中嚴(yán)格依照Linux驅(qū)動框架設(shè)計(jì)了HPI字符型驅(qū)動程序,其調(diào)用接口標(biāo)準(zhǔn)通用,本驅(qū)動程序?qū)崿F(xiàn)系統(tǒng)操作接口open、close、write、read以及ioctl,open和close實(shí)現(xiàn)接口的打開和關(guān)閉以及資源的申請和釋放,為了保證應(yīng)用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機(jī)制,使應(yīng)用程序在無法得到驅(qū)動資源的情況下進(jìn)入休眠狀態(tài),提高了系統(tǒng)整體運(yùn)行效率。
通過軟件架構(gòu)可以清晰地看到,除了HPI驅(qū)動程序以外,軟件模塊完全獨(dú)立于硬件結(jié)構(gòu),即在其它類似的專網(wǎng)信道設(shè)備中,只要使用其它驅(qū)動程序替代HPI驅(qū)動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結(jié)果
基于自組網(wǎng)平臺對本文設(shè)計(jì)的網(wǎng)絡(luò)層交換系統(tǒng)軟件進(jìn)行測試,多個(gè)標(biāo)準(zhǔn)網(wǎng)絡(luò)通信終端通過Wi-Fi或者以太網(wǎng)接入多個(gè)自組網(wǎng)節(jié)點(diǎn),通信終端可通過自組網(wǎng)信道進(jìn)行TCP、UDP等傳輸層及以上協(xié)議通信,軟件運(yùn)行穩(wěn)定,交換速率可達(dá)到自組網(wǎng)無線傳輸極限速率,功能滿足設(shè)計(jì)要求,交換性能也達(dá)到底層傳輸速率要求。
6 結(jié)語
本文針對自組網(wǎng)系統(tǒng)中數(shù)據(jù)路由交換的需求,闡述了網(wǎng)絡(luò)層交換軟件的設(shè)計(jì)與實(shí)現(xiàn),綜合運(yùn)用多種編程技術(shù),實(shí)現(xiàn)了復(fù)雜的系統(tǒng)模型功能要求,通過多種關(guān)鍵解決方法的設(shè)計(jì),解決了數(shù)據(jù)路由、轉(zhuǎn)發(fā)、IP層數(shù)據(jù)透明交換等技術(shù)難題,并基于自組網(wǎng)平臺對其進(jìn)行了驗(yàn)證,結(jié)果表明該軟件能夠很好地支持標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備通過自組網(wǎng)系統(tǒng)進(jìn)行高效的數(shù)據(jù)交換,解決了自組網(wǎng)系統(tǒng)中接入設(shè)備的數(shù)據(jù)尋路與數(shù)據(jù)交換問題。
參考文獻(xiàn):
[1] 吳功宜,董大凡. 計(jì)算機(jī)網(wǎng)絡(luò)高級軟件編程技術(shù)[M]. 北京: 清華大學(xué)出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術(shù)[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網(wǎng)絡(luò)編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環(huán)境高級編程[M]. 尤晉元,等譯. 北京: 機(jī)械工業(yè)出版社, 2006.
[5] Peterson L L, Davie B S. 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)方法[M]. 薛靜鋒,等譯. 北京: 機(jī)械工業(yè)出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網(wǎng)絡(luò)編程[M]. 北京: 清華大學(xué)出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint
3.3 IP數(shù)據(jù)透明交換
將自組網(wǎng)節(jié)點(diǎn)設(shè)計(jì)為1個(gè)二級網(wǎng)絡(luò)設(shè)備,第一級為用戶網(wǎng)絡(luò),第二級為自組網(wǎng)網(wǎng)絡(luò)。用戶網(wǎng)絡(luò)對應(yīng)接入端,是用戶可見的網(wǎng)絡(luò)接口,支持完整的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,設(shè)備與用戶的數(shù)據(jù)交互在IP層及以下進(jìn)行,使IP層及以上各層的數(shù)據(jù)凈荷不會受到任何改變,保證了應(yīng)用無關(guān)性;無線自組網(wǎng)絡(luò)對應(yīng)傳輸端,為用戶不可見網(wǎng)絡(luò)接口,只支持傳輸必須的網(wǎng)絡(luò)協(xié)議層(如網(wǎng)絡(luò)層、MAC層和物理層),用戶的網(wǎng)絡(luò)層數(shù)據(jù)作為凈荷直接橋接到自組網(wǎng)網(wǎng)絡(luò)層,通過自主設(shè)計(jì)的自組網(wǎng)網(wǎng)絡(luò)協(xié)議棧進(jìn)行重封裝,并根據(jù)路由信息進(jìn)行自組網(wǎng)傳輸,實(shí)現(xiàn)應(yīng)用無關(guān)的IP數(shù)據(jù)透明交換設(shè)計(jì)[3]。如圖5所示。
4 系統(tǒng)軟件實(shí)現(xiàn)方法
系統(tǒng)軟件設(shè)計(jì)基于嵌入式Linux操作系統(tǒng),以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構(gòu)
系統(tǒng)軟件由Linux內(nèi)核模塊和多線程應(yīng)用程序構(gòu)成,每個(gè)模塊和線程實(shí)體由多個(gè)子模塊組成,用戶空間程序和內(nèi)核空間程序協(xié)同工作,實(shí)現(xiàn)了整個(gè)系統(tǒng)網(wǎng)絡(luò)層交換軟件功能。
如圖6所示,內(nèi)核空間模塊主要由驅(qū)動程序組成,實(shí)現(xiàn)底層硬件資源的調(diào)用和接口通信功能;用戶空間主要由協(xié)議棧、數(shù)據(jù)結(jié)構(gòu)和多線程組成,通過對應(yīng)用的詳細(xì)分析,按照整個(gè)軟件功能可以把系統(tǒng)任務(wù)劃分為多個(gè)子任務(wù),這些子任務(wù)以線程的方式工作,實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。
4.2 多線程編程設(shè)計(jì)
應(yīng)用層運(yùn)行著多個(gè)并行工作的線程,協(xié)議棧進(jìn)行數(shù)據(jù)的封裝和解析,上層和底層數(shù)據(jù)區(qū)分類型后放入指定的fifo中,上層的各處理線程只與各個(gè)fifo組進(jìn)行數(shù)據(jù)交互,保證了應(yīng)用的高適配性。其中,自組網(wǎng)偵測線程實(shí)現(xiàn)全網(wǎng)路由信息的接收、發(fā)送和處理;局域網(wǎng)偵測線程實(shí)現(xiàn)本節(jié)點(diǎn)路由信息的接收、發(fā)送和處理;路由維護(hù)線程動態(tài)維護(hù)路由表;自組網(wǎng)數(shù)據(jù)收發(fā)線程和局域網(wǎng)數(shù)據(jù)收發(fā)線程實(shí)現(xiàn)對應(yīng)網(wǎng)絡(luò)數(shù)據(jù)的收發(fā);數(shù)據(jù)交換線程根據(jù)路由信息實(shí)時(shí)進(jìn)行兩級網(wǎng)絡(luò)之間的數(shù)據(jù)交互。
為了協(xié)調(diào)線程的行為,實(shí)現(xiàn)臨界區(qū)的保護(hù)等功能,必須采取一定的策略進(jìn)行線程調(diào)度,通過線程間通信機(jī)制,達(dá)到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構(gòu)想發(fā)生。通過信號量等多種Linux下的同步互斥方法,實(shí)現(xiàn)了多個(gè)線程之間的復(fù)雜調(diào)度與管理[4]。
4.3 網(wǎng)絡(luò)編程設(shè)計(jì)
系統(tǒng)軟件除了使用常規(guī)的應(yīng)用層TCP、UDP網(wǎng)絡(luò)編程方法之外,還使用了多種特殊的網(wǎng)絡(luò)編程方法實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取、IP偽裝、ARP報(bào)文通信等多種功能。原始套接字(SOCK_RAW)是對原始網(wǎng)絡(luò)報(bào)文進(jìn)行處理的套接字,其可以繞過網(wǎng)絡(luò)協(xié)議棧將數(shù)據(jù)直接發(fā)送到網(wǎng)絡(luò)核心,直接通過鏈路層發(fā)送,或者從網(wǎng)絡(luò)核心直接接收沒有經(jīng)過TCP/IP協(xié)議解析的原始數(shù)據(jù)包[5]。
將通用網(wǎng)卡設(shè)置為混雜模式,這樣使用特殊套接字編程時(shí)就可以獲得接入網(wǎng)絡(luò)端的全部活動數(shù)據(jù)[6]。在實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取過程中,直接得到含有IP頭的網(wǎng)絡(luò)層數(shù)據(jù),完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實(shí)現(xiàn);在設(shè)計(jì)IP偽裝功能時(shí),將已經(jīng)按照協(xié)議封裝好源IP的數(shù)據(jù)包直接調(diào)用原始套接字發(fā)送,這樣協(xié)議棧就不會將本機(jī)IP封裝到數(shù)據(jù)流中,導(dǎo)致系統(tǒng)通信混亂;在ARP報(bào)文通信過程中,自主封裝報(bào)文信息,通過原始套接字直接發(fā)送出去,實(shí)現(xiàn)了局域網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)功能,并且由于程序可以完全控制報(bào)文流量等參數(shù),有效地降低了系統(tǒng)開銷。
4.4 驅(qū)動程序設(shè)計(jì)
在編程過程中嚴(yán)格依照Linux驅(qū)動框架設(shè)計(jì)了HPI字符型驅(qū)動程序,其調(diào)用接口標(biāo)準(zhǔn)通用,本驅(qū)動程序?qū)崿F(xiàn)系統(tǒng)操作接口open、close、write、read以及ioctl,open和close實(shí)現(xiàn)接口的打開和關(guān)閉以及資源的申請和釋放,為了保證應(yīng)用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機(jī)制,使應(yīng)用程序在無法得到驅(qū)動資源的情況下進(jìn)入休眠狀態(tài),提高了系統(tǒng)整體運(yùn)行效率。
通過軟件架構(gòu)可以清晰地看到,除了HPI驅(qū)動程序以外,軟件模塊完全獨(dú)立于硬件結(jié)構(gòu),即在其它類似的專網(wǎng)信道設(shè)備中,只要使用其它驅(qū)動程序替代HPI驅(qū)動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結(jié)果
基于自組網(wǎng)平臺對本文設(shè)計(jì)的網(wǎng)絡(luò)層交換系統(tǒng)軟件進(jìn)行測試,多個(gè)標(biāo)準(zhǔn)網(wǎng)絡(luò)通信終端通過Wi-Fi或者以太網(wǎng)接入多個(gè)自組網(wǎng)節(jié)點(diǎn),通信終端可通過自組網(wǎng)信道進(jìn)行TCP、UDP等傳輸層及以上協(xié)議通信,軟件運(yùn)行穩(wěn)定,交換速率可達(dá)到自組網(wǎng)無線傳輸極限速率,功能滿足設(shè)計(jì)要求,交換性能也達(dá)到底層傳輸速率要求。
6 結(jié)語
本文針對自組網(wǎng)系統(tǒng)中數(shù)據(jù)路由交換的需求,闡述了網(wǎng)絡(luò)層交換軟件的設(shè)計(jì)與實(shí)現(xiàn),綜合運(yùn)用多種編程技術(shù),實(shí)現(xiàn)了復(fù)雜的系統(tǒng)模型功能要求,通過多種關(guān)鍵解決方法的設(shè)計(jì),解決了數(shù)據(jù)路由、轉(zhuǎn)發(fā)、IP層數(shù)據(jù)透明交換等技術(shù)難題,并基于自組網(wǎng)平臺對其進(jìn)行了驗(yàn)證,結(jié)果表明該軟件能夠很好地支持標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備通過自組網(wǎng)系統(tǒng)進(jìn)行高效的數(shù)據(jù)交換,解決了自組網(wǎng)系統(tǒng)中接入設(shè)備的數(shù)據(jù)尋路與數(shù)據(jù)交換問題。
參考文獻(xiàn):
[1] 吳功宜,董大凡. 計(jì)算機(jī)網(wǎng)絡(luò)高級軟件編程技術(shù)[M]. 北京: 清華大學(xué)出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術(shù)[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網(wǎng)絡(luò)編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環(huán)境高級編程[M]. 尤晉元,等譯. 北京: 機(jī)械工業(yè)出版社, 2006.
[5] Peterson L L, Davie B S. 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)方法[M]. 薛靜鋒,等譯. 北京: 機(jī)械工業(yè)出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網(wǎng)絡(luò)編程[M]. 北京: 清華大學(xué)出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint
3.3 IP數(shù)據(jù)透明交換
將自組網(wǎng)節(jié)點(diǎn)設(shè)計(jì)為1個(gè)二級網(wǎng)絡(luò)設(shè)備,第一級為用戶網(wǎng)絡(luò),第二級為自組網(wǎng)網(wǎng)絡(luò)。用戶網(wǎng)絡(luò)對應(yīng)接入端,是用戶可見的網(wǎng)絡(luò)接口,支持完整的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,設(shè)備與用戶的數(shù)據(jù)交互在IP層及以下進(jìn)行,使IP層及以上各層的數(shù)據(jù)凈荷不會受到任何改變,保證了應(yīng)用無關(guān)性;無線自組網(wǎng)絡(luò)對應(yīng)傳輸端,為用戶不可見網(wǎng)絡(luò)接口,只支持傳輸必須的網(wǎng)絡(luò)協(xié)議層(如網(wǎng)絡(luò)層、MAC層和物理層),用戶的網(wǎng)絡(luò)層數(shù)據(jù)作為凈荷直接橋接到自組網(wǎng)網(wǎng)絡(luò)層,通過自主設(shè)計(jì)的自組網(wǎng)網(wǎng)絡(luò)協(xié)議棧進(jìn)行重封裝,并根據(jù)路由信息進(jìn)行自組網(wǎng)傳輸,實(shí)現(xiàn)應(yīng)用無關(guān)的IP數(shù)據(jù)透明交換設(shè)計(jì)[3]。如圖5所示。
4 系統(tǒng)軟件實(shí)現(xiàn)方法
系統(tǒng)軟件設(shè)計(jì)基于嵌入式Linux操作系統(tǒng),以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構(gòu)
系統(tǒng)軟件由Linux內(nèi)核模塊和多線程應(yīng)用程序構(gòu)成,每個(gè)模塊和線程實(shí)體由多個(gè)子模塊組成,用戶空間程序和內(nèi)核空間程序協(xié)同工作,實(shí)現(xiàn)了整個(gè)系統(tǒng)網(wǎng)絡(luò)層交換軟件功能。
如圖6所示,內(nèi)核空間模塊主要由驅(qū)動程序組成,實(shí)現(xiàn)底層硬件資源的調(diào)用和接口通信功能;用戶空間主要由協(xié)議棧、數(shù)據(jù)結(jié)構(gòu)和多線程組成,通過對應(yīng)用的詳細(xì)分析,按照整個(gè)軟件功能可以把系統(tǒng)任務(wù)劃分為多個(gè)子任務(wù),這些子任務(wù)以線程的方式工作,實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。
4.2 多線程編程設(shè)計(jì)
應(yīng)用層運(yùn)行著多個(gè)并行工作的線程,協(xié)議棧進(jìn)行數(shù)據(jù)的封裝和解析,上層和底層數(shù)據(jù)區(qū)分類型后放入指定的fifo中,上層的各處理線程只與各個(gè)fifo組進(jìn)行數(shù)據(jù)交互,保證了應(yīng)用的高適配性。其中,自組網(wǎng)偵測線程實(shí)現(xiàn)全網(wǎng)路由信息的接收、發(fā)送和處理;局域網(wǎng)偵測線程實(shí)現(xiàn)本節(jié)點(diǎn)路由信息的接收、發(fā)送和處理;路由維護(hù)線程動態(tài)維護(hù)路由表;自組網(wǎng)數(shù)據(jù)收發(fā)線程和局域網(wǎng)數(shù)據(jù)收發(fā)線程實(shí)現(xiàn)對應(yīng)網(wǎng)絡(luò)數(shù)據(jù)的收發(fā);數(shù)據(jù)交換線程根據(jù)路由信息實(shí)時(shí)進(jìn)行兩級網(wǎng)絡(luò)之間的數(shù)據(jù)交互。
為了協(xié)調(diào)線程的行為,實(shí)現(xiàn)臨界區(qū)的保護(hù)等功能,必須采取一定的策略進(jìn)行線程調(diào)度,通過線程間通信機(jī)制,達(dá)到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構(gòu)想發(fā)生。通過信號量等多種Linux下的同步互斥方法,實(shí)現(xiàn)了多個(gè)線程之間的復(fù)雜調(diào)度與管理[4]。
4.3 網(wǎng)絡(luò)編程設(shè)計(jì)
系統(tǒng)軟件除了使用常規(guī)的應(yīng)用層TCP、UDP網(wǎng)絡(luò)編程方法之外,還使用了多種特殊的網(wǎng)絡(luò)編程方法實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取、IP偽裝、ARP報(bào)文通信等多種功能。原始套接字(SOCK_RAW)是對原始網(wǎng)絡(luò)報(bào)文進(jìn)行處理的套接字,其可以繞過網(wǎng)絡(luò)協(xié)議棧將數(shù)據(jù)直接發(fā)送到網(wǎng)絡(luò)核心,直接通過鏈路層發(fā)送,或者從網(wǎng)絡(luò)核心直接接收沒有經(jīng)過TCP/IP協(xié)議解析的原始數(shù)據(jù)包[5]。
將通用網(wǎng)卡設(shè)置為混雜模式,這樣使用特殊套接字編程時(shí)就可以獲得接入網(wǎng)絡(luò)端的全部活動數(shù)據(jù)[6]。在實(shí)現(xiàn)底層網(wǎng)絡(luò)數(shù)據(jù)截取過程中,直接得到含有IP頭的網(wǎng)絡(luò)層數(shù)據(jù),完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實(shí)現(xiàn);在設(shè)計(jì)IP偽裝功能時(shí),將已經(jīng)按照協(xié)議封裝好源IP的數(shù)據(jù)包直接調(diào)用原始套接字發(fā)送,這樣協(xié)議棧就不會將本機(jī)IP封裝到數(shù)據(jù)流中,導(dǎo)致系統(tǒng)通信混亂;在ARP報(bào)文通信過程中,自主封裝報(bào)文信息,通過原始套接字直接發(fā)送出去,實(shí)現(xiàn)了局域網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)功能,并且由于程序可以完全控制報(bào)文流量等參數(shù),有效地降低了系統(tǒng)開銷。
4.4 驅(qū)動程序設(shè)計(jì)
在編程過程中嚴(yán)格依照Linux驅(qū)動框架設(shè)計(jì)了HPI字符型驅(qū)動程序,其調(diào)用接口標(biāo)準(zhǔn)通用,本驅(qū)動程序?qū)崿F(xiàn)系統(tǒng)操作接口open、close、write、read以及ioctl,open和close實(shí)現(xiàn)接口的打開和關(guān)閉以及資源的申請和釋放,為了保證應(yīng)用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機(jī)制,使應(yīng)用程序在無法得到驅(qū)動資源的情況下進(jìn)入休眠狀態(tài),提高了系統(tǒng)整體運(yùn)行效率。
通過軟件架構(gòu)可以清晰地看到,除了HPI驅(qū)動程序以外,軟件模塊完全獨(dú)立于硬件結(jié)構(gòu),即在其它類似的專網(wǎng)信道設(shè)備中,只要使用其它驅(qū)動程序替代HPI驅(qū)動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結(jié)果
基于自組網(wǎng)平臺對本文設(shè)計(jì)的網(wǎng)絡(luò)層交換系統(tǒng)軟件進(jìn)行測試,多個(gè)標(biāo)準(zhǔn)網(wǎng)絡(luò)通信終端通過Wi-Fi或者以太網(wǎng)接入多個(gè)自組網(wǎng)節(jié)點(diǎn),通信終端可通過自組網(wǎng)信道進(jìn)行TCP、UDP等傳輸層及以上協(xié)議通信,軟件運(yùn)行穩(wěn)定,交換速率可達(dá)到自組網(wǎng)無線傳輸極限速率,功能滿足設(shè)計(jì)要求,交換性能也達(dá)到底層傳輸速率要求。
6 結(jié)語
本文針對自組網(wǎng)系統(tǒng)中數(shù)據(jù)路由交換的需求,闡述了網(wǎng)絡(luò)層交換軟件的設(shè)計(jì)與實(shí)現(xiàn),綜合運(yùn)用多種編程技術(shù),實(shí)現(xiàn)了復(fù)雜的系統(tǒng)模型功能要求,通過多種關(guān)鍵解決方法的設(shè)計(jì),解決了數(shù)據(jù)路由、轉(zhuǎn)發(fā)、IP層數(shù)據(jù)透明交換等技術(shù)難題,并基于自組網(wǎng)平臺對其進(jìn)行了驗(yàn)證,結(jié)果表明該軟件能夠很好地支持標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備通過自組網(wǎng)系統(tǒng)進(jìn)行高效的數(shù)據(jù)交換,解決了自組網(wǎng)系統(tǒng)中接入設(shè)備的數(shù)據(jù)尋路與數(shù)據(jù)交換問題。
參考文獻(xiàn):
[1] 吳功宜,董大凡. 計(jì)算機(jī)網(wǎng)絡(luò)高級軟件編程技術(shù)[M]. 北京: 清華大學(xué)出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術(shù)[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網(wǎng)絡(luò)編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環(huán)境高級編程[M]. 尤晉元,等譯. 北京: 機(jī)械工業(yè)出版社, 2006.
[5] Peterson L L, Davie B S. 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)方法[M]. 薛靜鋒,等譯. 北京: 機(jī)械工業(yè)出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網(wǎng)絡(luò)編程[M]. 北京: 清華大學(xué)出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint