呂 峰,楊海波,賈正鋒
1(中國科學院大學,北京 100049)
2(中國科學院 沈陽計算技術研究所,沈陽 110168)
有線網絡的傳輸速度從10 Mbps、100 Mbps 發展到1 Gbps、10 Gbps.但是無線網絡的發展速度遠遠達不到有線網絡的發展速度水平.目前小型有線局域網絡大都可以實現1 Gbps 的傳輸速度,而無線網絡的理論速度只有100 Mbps、300 Mbps,實際情況下會因為距離和干擾等原因使得傳輸速度遠遠達不到300 Mbps的理論速度.移動網絡的速度雖然在高速發展,但傳輸速度也大都在100 Mbps 以下[1-6].
無線網絡的傳輸速度瓶頸問題,極大限制了需要通過無線網絡傳輸大量數據設備的發展.特別是目前攝像設備,許多移動高清攝像設備所錄制的視頻并不能通過單個移動無線網絡終端將數據傳輸到中心服務器.特別對于汽車、軌道列車等移動場景,需要一套使用并行傳輸技術提高網絡速度的系統來解決該問題[7-10].
本論文針對單個無線網絡傳輸瓶頸的問題,設計并實現了并行傳輸網關系統.在不需要改變網絡層與應用層協議的情況下,通過在無線傳輸兩端添加專用的并行網關,將數據鏈路層以太網數據包進行重新封裝后通過多個無線網絡并行傳輸數據,提高無線網絡的傳輸速度.網關之間的數據傳輸是基于UDT 數據傳輸協議,網關只要與無線設備之間網絡連通即可,數據會通過系統原來的方式進行路由.
以太網幀格式,即在以太網幀頭、幀尾中用于實現以太網功能的域.以太網幀格式多達5 種,但今天大多數TCP/IP 應用都是用Ethernet V2 幀格式(IEEE 802.3-1997 改回了對這一格式的兼容),而交換機之間BPDU(橋協議數據單元)數據包則是IEEE 802.3/LLC 的幀,VLAN Trunk 協議如802.1Q 和Cisco 的CDP(思科發現協議)等則是采用IEEE 802.3SNAP 的幀[11,12].
以太網的幀由:前導碼、幀起始定界符、目的MAC 地址、源MAC 地址、類型/長度、數據、幀校驗序列這些字節組成.具體幀結構和字段意義如表1.

表1 以太網幀格式表
基于UDP 的數據傳輸協議(UDP-based Data Transfer protocol,UDT)是一種互聯網數據傳輸協議,是建于UDP 之上的可靠傳輸協議.UDT 是面向連接的雙向的應用層協議.它支持可靠的數據流傳輸和部分可靠的數據報傳輸,同時傳輸效率要遠遠高于TCP[13-15].
實現并行傳輸需要有三個獨立系統和設備,一是移動端的網關;二是服務器端;三是目標網絡的網關.
其中,移動網絡網關與外部目標網絡網關是同一種配置不同的設備即并行網關,用來并行收發數據.服務器端配對兩端網關設備.結構設計如圖1所示.
并行網關與服務器之間網絡聯通,服務器協調多個并行網關之間的網絡聯通,使之成對進行傳輸.并行網關將收發數據進行并行收發處理,進入網關的數據會被分成多路傳輸到對端,網關會將接收到的多路數據組合成一路數據輸出.其中多路的傳輸速度由各路網絡速度決定,多路組合的速度不能也不會超過各路傳輸速度的總和[16-19].

圖1 并行網絡傳輸結構圖
系統的設計思想是將以太網層的數據通過傳輸層進行傳輸,由傳輸層完成并行傳輸控制.每路UDT 通過物理上的一路傳輸網絡進行連接,保證從每路UDT 收發的數據是從不同的無線網絡進行傳輸的.可以將UDT 的客戶端與服務器設置成不同網段的地址,物理連接時不同網段地址連接會被不同的物理網絡分開.最后數據匯聚到并行網關.
從網卡接收數據后由上層處理數據時前導碼與幀開始符是使用不到的,實際幀從目的MAC 地址開始.如果將以太網的數據幀并行傳輸到指定目標,需要以下兩個功能:
1)對以太網的幀進行編號,確保在傳輸到指定目標前進行排序,防止以太網幀亂序.
2)更改目的MAC 地址為實際的目標MAC 地址.
并行傳輸處理的過程:
1)將網關從內部網絡接收的以太網數據,去除目標MAC 地址,添加加消息頭部(消息編號,時間戳),組成新的幀數據.消息頭部(編號、時間戳)定義:

數據的幀格式會進轉換,原以太網幀格式如表2所示,新幀格式如表3所示.

表2 原以太網幀格式表

表3 新幀格式表
2)由不同的物理連接網絡將新的幀數據作為數據通過UDT(n路)可靠傳輸到對端并行網關.
對于接收到的UDT 數據進行解頭,將消息頭部提取,將頭部后面的信息重新添加目標MAC 地址后組成新的的以太網幀數據.通過頭部信息進行排序后,由單路有線網絡發送到指定目標.具體的邏輯結構設計如圖2所示.
解決并行控制與并行數據處理的問題方法:
1)每路UDT 的傳輸速度不一致,要保證數據包會按照每路UDT 傳輸的速度分配相應的數據量,就要實現每路UDT 進行搶占式的發送方式.每路UDT 強占到資源后會立即進行發送,發送完畢后再次進入就緒狀態.
2)數據包的順序問題,丟包處理.對傳輸過來的數據包根據包頭中的msgindex 進行排序(序號可以設置為0-n的循環數字,n可以設置為80 000 以上的大數),確認數據包的順序.設置超時機制,保證不會因為個別數據包的超時,影響后續數據包.
3)不同并行網關之間的聯通問題.解決這個問題需要在網絡可達的地方放置并行數據處理服務器.每臺并行網關首先連接服務器,由服務器進行并行網關之間的匹配與建立連接.

圖2 并行網絡傳輸邏輯結構圖
使用Linux 系統的x86 多網口工控機來實現并行傳輸網關設備.實際應用場景中網絡連接的簡圖如圖3所示.

圖3 網絡拓撲簡圖
并行傳輸網關設備的一路網口A 連接內部網絡,其它多路網口Bi 連接無線或其它外部傳輸網絡.內部網絡發往外部網絡和外部網絡發往內部網絡的數據,經過并行網關進行轉發.
數據經過以下步驟進行并行轉發:
1)內部網絡數據發往外部網絡數據.內部網絡發往外部網絡的以太網數據幀,會發送到并行傳輸網關的A 網口.
在并行傳輸網關中,通過Linux內核中的Netfilter 架構[20,21].首先在內核中添加特殊的網絡橋接模塊read_kernel.ko.即在數據進入到L2(數據鏈路)層時,截獲數據,通過目標MAC 判斷是否是內部網絡數據,如果是則不處理,數據走正常流程.如果不是,去除數據中的源MAC 地址,將剩下的數據寫入到虛擬設備write 中[22,23].內核程序通過虛擬設備與用戶程序進行數據交換.內核程序流程圖如圖4(a)所示.
然后UDT 處理轉發程序通過讀取write 虛擬設備獲得L2 層的以太網數據幀(已經去除源MAC 地址).在以太網數據幀上添加消息頭部(編號、時間戳),然后將數據寫入到阻塞隊列,由多路的UDT 連接線程搶占式的讀取阻塞隊列,最后將數據發送到UDT 對端程序.數據即被發送到連接目標設備的并行傳輸網關中.
2)外部網絡數據發往內部網絡數據.外部網絡發往內部網絡的數據,會由添加頭部的UTD 數據攜帶,發送到并行傳輸網關的UDT 接收程序.
UDT 處理轉發程序接收到對端UDT 發送的數據,首先解析頭部,得到數據包的編號與時間戳.通數據包的編號判斷是否是順序的數據包,如果是則將數據包去除消息頭部后寫入到read 虛擬設備中,如果不是,進行小范圍排序后寫入到read 虛擬設備中.用戶程序通過read 虛擬設備將數據發送到linux 內核程序中,完成數據交換.
在內核中添加write_kernel.ko 模塊,模塊程序首先讀取read 虛擬設備中的數據.獲取以太網數據幀,添加源mac 地址后,開辟skb_buff 空間,將數據賦值給skb_buff,最后通過dev_queue_xmit 發送數據.程序流程圖如圖4(b)所示.
UDT 在程序中起到了上層轉發的過程,將數據包的路由交給了默認的系統路由.上層并行處理的程序流程如圖4(c)所示.

圖4 程序流程圖
新的數據幀會添加上UDT 的包頭,所以數據在傳輸時會有速度的損耗.速度的損耗與數據載荷大小n有關,原以太網的數據包大小為n+20,使用UDT 進行數據傳輸的數據包大小為62+n,損耗率計算公式為:

數據載荷大小n的取值范圍[0,1438],所以速度的損耗率sr的取值范圍[0.028,0.687].
n越大速度的損耗越小,當數據高速傳輸時,n值較大,所以損耗率相當小.在實際使用并行網關的場景中速度的損耗幾乎可以忽略.
不同網絡實驗的情況下,網絡傳輸的速度情況如表4所示.

表4 并行傳輸實驗對照表
并行傳輸網關是否能發揮最大效果,與實際的網絡情況有一定關系,在大延時,丟包比較嚴重的情況下不適合使用并行傳輸網關系統進行并行傳輸來提高網絡速度,可以使用并行傳輸網關系統進行冗余傳輸以改善網絡丟包嚴重的情況.而在網絡相對良好的情況下,并行傳輸網關系統可以有效提高網絡的傳輸速度.多路并行傳輸的利用效率在80%-90%之間.
并行網關傳輸系統,適用于無線多路傳輸的場景,與有線多路傳輸的應用場景中.在移動端的網關添加不同運營商的網絡模塊,可以提供多運營商的并行傳輸網絡,通過各運營商之間的信號覆蓋互補,可以提高更加有效的網絡.進行配置可以提供速度疊加高速網絡或冗余可靠網絡.但是該系統在某種程度上增加網絡的延時,所以不太適合需要超低延時的場景.