崔元成
研究了一種應用于無線自組網的網絡層交換軟件,通過系統模型的抽象和建立,將網絡層需要實現的功能獨立出來,進而制定了本地及全局路由的建立與維護、網絡層數據交換等關鍵策略,綜合運用了多線程設計、網絡編程、驅動設計等多種編程技術,在高速ARM平臺上,基于嵌入式Linux操作系統實現了網絡層交換系統軟件,使標準網絡設備無需任何改變即可接入自組網節點設備,并能夠通過無線自組網進行通信,解決了接入設備的數據尋路與數據交換問題。
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 引言
無線自組網系統是由一組移動節點組成的多跳臨時性自治系統,可以隨時隨地快速構建移動通信網絡,工作過程中網絡各個終端節點設備可以自由移動、地位相同,因此在現場使用中可以不依賴基礎設施,快速、靈活地建立無中心分布式通信網絡。該系統分為物理層、MAC層和網絡層3個主要部分。其中,物理層實現底層無線通信功能;MAC層實現接入、退出管理以及資源調配和鏈路維護功能;網絡層實現通用IP網絡設備(如計算機、智能手機等)的接入、網絡路由管理、IP層數據透明轉發功能。
本文基于無線自組網系統,在已有MAC層、物理層的研究基礎上,通過對網絡層交換關鍵技術進行研究,設計實現網絡層系統軟件,使接入自組網系統的各種標準網絡設備進行基于IP的網絡層數據交換,實現如圖1所示的應用方式,各種無線終端、有線終端等設備通過Wi-Fi或以太網等標準網絡接口接入自組網節點設備即可互相通信,解決自組網接入設備的數據路由交換問題。
2 網絡層系統模型
如圖2所示,網絡層位于通用網絡接口和MAC層之間,可以把通用接入接口抽象為接入網絡,將MAC層及以下抽象為自組網絡,網絡層交換軟件即可抽象為虛擬網關模型,其核心功能完全由軟件虛擬實現,除了具備一般網關的通用網絡底層數據捕獲和轉發功能之外,還具有針對自組網絡設計的專用路由功能。
根據系統模型,網絡層交換軟件在接入端應能捕獲全部局域網IP層網絡數據(不僅僅是應用層數據),進行IP層數據發送,在自組網絡端能夠使用自組網協議棧,將得到的IP數據進行封裝后完成無線數據收發,實現網絡層數據的透明傳輸;同時,動態實時維護本地路由和全局路由,設計適合自組網節點拓撲頻繁變化的情況,保證數據的正確尋路[1]。
3 關鍵方法的設計
3.1 本地路由發現
由于無線自組網傳輸的帶寬等資源受限,因此必須動態了解每個自組網節點設備下掛載網絡設備的組成,一旦有設備退出,就把發送到該設備的鏈路回收,以減少系統開銷;當有新的設備接入后,又需要實時更新路由信息,增加鏈路以保證實時通信,使用本地局域網路由發現方法,確定每個節點下網絡設備的組成,如圖3所示。
采取ARP(Address Resolution Protocol,地址解析協議)技術實現本地局域網終端,可以發現該協議為標準網絡協議,不需要接入設備做任何應用程序設計和修改。向接入設備發送自封裝的ARP request包,接入的節點收到后反饋回復ARP answer,設置ARP最優的發送間隔、超時限制以及發送偵測包實體個數和響應判斷時間,通過節點的響應狀況得到本地局域網拓撲狀況[2]。
3.2 全局路由建立
每個自組網節點接收的數據必須要轉發到掛載著目的IP終端設備的另一個信道節點,這就要求每個自組網節點都要清楚自己和其它節點接入的終端設備情況,即全局路由。
如圖4所示,在得到本地網絡拓撲情況后,每個自組網節點先生成1份本地路由表,在網絡建立時向建網節點發送,建網節點匯總后形成全局路由表,再向網內所有節點廣播,同步全局路由信息;同時,每個節點實時監測本地局域網拓撲信息,在節點掛載的終端拓撲結構發生變化時,節點先更新本地路由表,然后通過專用信令向建網節點發送,建網節點更新全局路由表后再向全網廣播進行全局路由信息同步,這樣就使每個信道節點都能動態了解全局的路由信息,實現正確的路由轉發功能。endprint
3.3 IP數據透明交換
將自組網節點設計為1個二級網絡設備,第一級為用戶網絡,第二級為自組網網絡。用戶網絡對應接入端,是用戶可見的網絡接口,支持完整的標準網絡協議,設備與用戶的數據交互在IP層及以下進行,使IP層及以上各層的數據凈荷不會受到任何改變,保證了應用無關性;無線自組網絡對應傳輸端,為用戶不可見網絡接口,只支持傳輸必須的網絡協議層(如網絡層、MAC層和物理層),用戶的網絡層數據作為凈荷直接橋接到自組網網絡層,通過自主設計的自組網網絡協議棧進行重封裝,并根據路由信息進行自組網傳輸,實現應用無關的IP數據透明交換設計[3]。如圖5所示。
4 系統軟件實現方法
系統軟件設計基于嵌入式Linux操作系統,以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構
系統軟件由Linux內核模塊和多線程應用程序構成,每個模塊和線程實體由多個子模塊組成,用戶空間程序和內核空間程序協同工作,實現了整個系統網絡層交換軟件功能。
如圖6所示,內核空間模塊主要由驅動程序組成,實現底層硬件資源的調用和接口通信功能;用戶空間主要由協議棧、數據結構和多線程組成,通過對應用的詳細分析,按照整個軟件功能可以把系統任務劃分為多個子任務,這些子任務以線程的方式工作,實現整個系統的功能。
4.2 多線程編程設計
應用層運行著多個并行工作的線程,協議棧進行數據的封裝和解析,上層和底層數據區分類型后放入指定的fifo中,上層的各處理線程只與各個fifo組進行數據交互,保證了應用的高適配性。其中,自組網偵測線程實現全網路由信息的接收、發送和處理;局域網偵測線程實現本節點路由信息的接收、發送和處理;路由維護線程動態維護路由表;自組網數據收發線程和局域網數據收發線程實現對應網絡數據的收發;數據交換線程根據路由信息實時進行兩級網絡之間的數據交互。
為了協調線程的行為,實現臨界區的保護等功能,必須采取一定的策略進行線程調度,通過線程間通信機制,達到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構想發生。通過信號量等多種Linux下的同步互斥方法,實現了多個線程之間的復雜調度與管理[4]。
4.3 網絡編程設計
系統軟件除了使用常規的應用層TCP、UDP網絡編程方法之外,還使用了多種特殊的網絡編程方法實現底層網絡數據截取、IP偽裝、ARP報文通信等多種功能。原始套接字(SOCK_RAW)是對原始網絡報文進行處理的套接字,其可以繞過網絡協議棧將數據直接發送到網絡核心,直接通過鏈路層發送,或者從網絡核心直接接收沒有經過TCP/IP協議解析的原始數據包[5]。
將通用網卡設置為混雜模式,這樣使用特殊套接字編程時就可以獲得接入網絡端的全部活動數據[6]。在實現底層網絡數據截取過程中,直接得到含有IP頭的網絡層數據,完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實現;在設計IP偽裝功能時,將已經按照協議封裝好源IP的數據包直接調用原始套接字發送,這樣協議棧就不會將本機IP封裝到數據流中,導致系統通信混亂;在ARP報文通信過程中,自主封裝報文信息,通過原始套接字直接發送出去,實現了局域網絡拓撲的發現功能,并且由于程序可以完全控制報文流量等參數,有效地降低了系統開銷。
4.4 驅動程序設計
在編程過程中嚴格依照Linux驅動框架設計了HPI字符型驅動程序,其調用接口標準通用,本驅動程序實現系統操作接口open、close、write、read以及ioctl,open和close實現接口的打開和關閉以及資源的申請和釋放,為了保證應用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機制,使應用程序在無法得到驅動資源的情況下進入休眠狀態,提高了系統整體運行效率。
通過軟件架構可以清晰地看到,除了HPI驅動程序以外,軟件模塊完全獨立于硬件結構,即在其它類似的專網信道設備中,只要使用其它驅動程序替代HPI驅動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結果
基于自組網平臺對本文設計的網絡層交換系統軟件進行測試,多個標準網絡通信終端通過Wi-Fi或者以太網接入多個自組網節點,通信終端可通過自組網信道進行TCP、UDP等傳輸層及以上協議通信,軟件運行穩定,交換速率可達到自組網無線傳輸極限速率,功能滿足設計要求,交換性能也達到底層傳輸速率要求。
6 結語
本文針對自組網系統中數據路由交換的需求,闡述了網絡層交換軟件的設計與實現,綜合運用多種編程技術,實現了復雜的系統模型功能要求,通過多種關鍵解決方法的設計,解決了數據路由、轉發、IP層數據透明交換等技術難題,并基于自組網平臺對其進行了驗證,結果表明該軟件能夠很好地支持標準網絡設備通過自組網系統進行高效的數據交換,解決了自組網系統中接入設備的數據尋路與數據交換問題。
參考文獻:
[1] 吳功宜,董大凡. 計算機網絡高級軟件編程技術[M]. 北京: 清華大學出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網絡編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環境高級編程[M]. 尤晉元,等譯. 北京: 機械工業出版社, 2006.
[5] Peterson L L, Davie B S. 計算機網絡系統方法[M]. 薛靜鋒,等譯. 北京: 機械工業出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網絡編程[M]. 北京: 清華大學出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint
3.3 IP數據透明交換
將自組網節點設計為1個二級網絡設備,第一級為用戶網絡,第二級為自組網網絡。用戶網絡對應接入端,是用戶可見的網絡接口,支持完整的標準網絡協議,設備與用戶的數據交互在IP層及以下進行,使IP層及以上各層的數據凈荷不會受到任何改變,保證了應用無關性;無線自組網絡對應傳輸端,為用戶不可見網絡接口,只支持傳輸必須的網絡協議層(如網絡層、MAC層和物理層),用戶的網絡層數據作為凈荷直接橋接到自組網網絡層,通過自主設計的自組網網絡協議棧進行重封裝,并根據路由信息進行自組網傳輸,實現應用無關的IP數據透明交換設計[3]。如圖5所示。
4 系統軟件實現方法
系統軟件設計基于嵌入式Linux操作系統,以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構
系統軟件由Linux內核模塊和多線程應用程序構成,每個模塊和線程實體由多個子模塊組成,用戶空間程序和內核空間程序協同工作,實現了整個系統網絡層交換軟件功能。
如圖6所示,內核空間模塊主要由驅動程序組成,實現底層硬件資源的調用和接口通信功能;用戶空間主要由協議棧、數據結構和多線程組成,通過對應用的詳細分析,按照整個軟件功能可以把系統任務劃分為多個子任務,這些子任務以線程的方式工作,實現整個系統的功能。
4.2 多線程編程設計
應用層運行著多個并行工作的線程,協議棧進行數據的封裝和解析,上層和底層數據區分類型后放入指定的fifo中,上層的各處理線程只與各個fifo組進行數據交互,保證了應用的高適配性。其中,自組網偵測線程實現全網路由信息的接收、發送和處理;局域網偵測線程實現本節點路由信息的接收、發送和處理;路由維護線程動態維護路由表;自組網數據收發線程和局域網數據收發線程實現對應網絡數據的收發;數據交換線程根據路由信息實時進行兩級網絡之間的數據交互。
為了協調線程的行為,實現臨界區的保護等功能,必須采取一定的策略進行線程調度,通過線程間通信機制,達到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構想發生。通過信號量等多種Linux下的同步互斥方法,實現了多個線程之間的復雜調度與管理[4]。
4.3 網絡編程設計
系統軟件除了使用常規的應用層TCP、UDP網絡編程方法之外,還使用了多種特殊的網絡編程方法實現底層網絡數據截取、IP偽裝、ARP報文通信等多種功能。原始套接字(SOCK_RAW)是對原始網絡報文進行處理的套接字,其可以繞過網絡協議棧將數據直接發送到網絡核心,直接通過鏈路層發送,或者從網絡核心直接接收沒有經過TCP/IP協議解析的原始數據包[5]。
將通用網卡設置為混雜模式,這樣使用特殊套接字編程時就可以獲得接入網絡端的全部活動數據[6]。在實現底層網絡數據截取過程中,直接得到含有IP頭的網絡層數據,完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實現;在設計IP偽裝功能時,將已經按照協議封裝好源IP的數據包直接調用原始套接字發送,這樣協議棧就不會將本機IP封裝到數據流中,導致系統通信混亂;在ARP報文通信過程中,自主封裝報文信息,通過原始套接字直接發送出去,實現了局域網絡拓撲的發現功能,并且由于程序可以完全控制報文流量等參數,有效地降低了系統開銷。
4.4 驅動程序設計
在編程過程中嚴格依照Linux驅動框架設計了HPI字符型驅動程序,其調用接口標準通用,本驅動程序實現系統操作接口open、close、write、read以及ioctl,open和close實現接口的打開和關閉以及資源的申請和釋放,為了保證應用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機制,使應用程序在無法得到驅動資源的情況下進入休眠狀態,提高了系統整體運行效率。
通過軟件架構可以清晰地看到,除了HPI驅動程序以外,軟件模塊完全獨立于硬件結構,即在其它類似的專網信道設備中,只要使用其它驅動程序替代HPI驅動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結果
基于自組網平臺對本文設計的網絡層交換系統軟件進行測試,多個標準網絡通信終端通過Wi-Fi或者以太網接入多個自組網節點,通信終端可通過自組網信道進行TCP、UDP等傳輸層及以上協議通信,軟件運行穩定,交換速率可達到自組網無線傳輸極限速率,功能滿足設計要求,交換性能也達到底層傳輸速率要求。
6 結語
本文針對自組網系統中數據路由交換的需求,闡述了網絡層交換軟件的設計與實現,綜合運用多種編程技術,實現了復雜的系統模型功能要求,通過多種關鍵解決方法的設計,解決了數據路由、轉發、IP層數據透明交換等技術難題,并基于自組網平臺對其進行了驗證,結果表明該軟件能夠很好地支持標準網絡設備通過自組網系統進行高效的數據交換,解決了自組網系統中接入設備的數據尋路與數據交換問題。
參考文獻:
[1] 吳功宜,董大凡. 計算機網絡高級軟件編程技術[M]. 北京: 清華大學出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網絡編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環境高級編程[M]. 尤晉元,等譯. 北京: 機械工業出版社, 2006.
[5] Peterson L L, Davie B S. 計算機網絡系統方法[M]. 薛靜鋒,等譯. 北京: 機械工業出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網絡編程[M]. 北京: 清華大學出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint
3.3 IP數據透明交換
將自組網節點設計為1個二級網絡設備,第一級為用戶網絡,第二級為自組網網絡。用戶網絡對應接入端,是用戶可見的網絡接口,支持完整的標準網絡協議,設備與用戶的數據交互在IP層及以下進行,使IP層及以上各層的數據凈荷不會受到任何改變,保證了應用無關性;無線自組網絡對應傳輸端,為用戶不可見網絡接口,只支持傳輸必須的網絡協議層(如網絡層、MAC層和物理層),用戶的網絡層數據作為凈荷直接橋接到自組網網絡層,通過自主設計的自組網網絡協議棧進行重封裝,并根據路由信息進行自組網傳輸,實現應用無關的IP數據透明交換設計[3]。如圖5所示。
4 系統軟件實現方法
系統軟件設計基于嵌入式Linux操作系統,以三星公司高性能ARM11處理器S3C6410為硬件平臺。
4.1 軟件架構
系統軟件由Linux內核模塊和多線程應用程序構成,每個模塊和線程實體由多個子模塊組成,用戶空間程序和內核空間程序協同工作,實現了整個系統網絡層交換軟件功能。
如圖6所示,內核空間模塊主要由驅動程序組成,實現底層硬件資源的調用和接口通信功能;用戶空間主要由協議棧、數據結構和多線程組成,通過對應用的詳細分析,按照整個軟件功能可以把系統任務劃分為多個子任務,這些子任務以線程的方式工作,實現整個系統的功能。
4.2 多線程編程設計
應用層運行著多個并行工作的線程,協議棧進行數據的封裝和解析,上層和底層數據區分類型后放入指定的fifo中,上層的各處理線程只與各個fifo組進行數據交互,保證了應用的高適配性。其中,自組網偵測線程實現全網路由信息的接收、發送和處理;局域網偵測線程實現本節點路由信息的接收、發送和處理;路由維護線程動態維護路由表;自組網數據收發線程和局域網數據收發線程實現對應網絡數據的收發;數據交換線程根據路由信息實時進行兩級網絡之間的數據交互。
為了協調線程的行為,實現臨界區的保護等功能,必須采取一定的策略進行線程調度,通過線程間通信機制,達到線程的同步或者互斥,使線程的行為在一定的約束下按照人們的構想發生。通過信號量等多種Linux下的同步互斥方法,實現了多個線程之間的復雜調度與管理[4]。
4.3 網絡編程設計
系統軟件除了使用常規的應用層TCP、UDP網絡編程方法之外,還使用了多種特殊的網絡編程方法實現底層網絡數據截取、IP偽裝、ARP報文通信等多種功能。原始套接字(SOCK_RAW)是對原始網絡報文進行處理的套接字,其可以繞過網絡協議棧將數據直接發送到網絡核心,直接通過鏈路層發送,或者從網絡核心直接接收沒有經過TCP/IP協議解析的原始數據包[5]。
將通用網卡設置為混雜模式,這樣使用特殊套接字編程時就可以獲得接入網絡端的全部活動數據[6]。在實現底層網絡數據截取過程中,直接得到含有IP頭的網絡層數據,完整地保留了目的地址、源地址、端口號等原始信息,保證透明傳輸功能的實現;在設計IP偽裝功能時,將已經按照協議封裝好源IP的數據包直接調用原始套接字發送,這樣協議棧就不會將本機IP封裝到數據流中,導致系統通信混亂;在ARP報文通信過程中,自主封裝報文信息,通過原始套接字直接發送出去,實現了局域網絡拓撲的發現功能,并且由于程序可以完全控制報文流量等參數,有效地降低了系統開銷。
4.4 驅動程序設計
在編程過程中嚴格依照Linux驅動框架設計了HPI字符型驅動程序,其調用接口標準通用,本驅動程序實現系統操作接口open、close、write、read以及ioctl,open和close實現接口的打開和關閉以及資源的申請和釋放,為了保證應用層的效率,write和read采用阻塞的讀寫方式,通過wait_queue機制,使應用程序在無法得到驅動資源的情況下進入休眠狀態,提高了系統整體運行效率。
通過軟件架構可以清晰地看到,除了HPI驅動程序以外,軟件模塊完全獨立于硬件結構,即在其它類似的專網信道設備中,只要使用其它驅動程序替代HPI驅動程序就能完成大部分的軟件移植工作,可以較好地適配到多種硬件平臺[7]。
5 測試結果
基于自組網平臺對本文設計的網絡層交換系統軟件進行測試,多個標準網絡通信終端通過Wi-Fi或者以太網接入多個自組網節點,通信終端可通過自組網信道進行TCP、UDP等傳輸層及以上協議通信,軟件運行穩定,交換速率可達到自組網無線傳輸極限速率,功能滿足設計要求,交換性能也達到底層傳輸速率要求。
6 結語
本文針對自組網系統中數據路由交換的需求,闡述了網絡層交換軟件的設計與實現,綜合運用多種編程技術,實現了復雜的系統模型功能要求,通過多種關鍵解決方法的設計,解決了數據路由、轉發、IP層數據透明交換等技術難題,并基于自組網平臺對其進行了驗證,結果表明該軟件能夠很好地支持標準網絡設備通過自組網系統進行高效的數據交換,解決了自組網系統中接入設備的數據尋路與數據交換問題。
參考文獻:
[1] 吳功宜,董大凡. 計算機網絡高級軟件編程技術[M]. 北京: 清華大學出版社, 2008.
[2] Doyle J, Carroll J D. TCP/IP路由技術[M]. 夏俊杰,譯. 北京: 人民郵電出版社, 2009.
[3] 甘剛. Linux/UNIX網絡編程[M]. 北京: 中國水利水電出版社, 2008.
[4] W Richard Stevens, Stephen A Rago. UNIX環境高級編程[M]. 尤晉元,等譯. 北京: 機械工業出版社, 2006.
[5] Peterson L L, Davie B S. 計算機網絡系統方法[M]. 薛靜鋒,等譯. 北京: 機械工業出版社, 2009.
[6] 宋敬彬,孫海濱. Linux網絡編程[M]. 北京: 清華大學出版社, 2010.
[7] Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman. Linux Device Drivers[M]. USA: O'Reilly Media, Inc, 2005.endprint