谷代平,朱人杰,黃 炎,胡瑩熏
(南京理工大學(xué)計算機科學(xué)與工程學(xué)院,南京 210094)
網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)上所有設(shè)備之間通信規(guī)則的集合,它規(guī)定了通信時信息必須采用的格式和這些格式的意義。眾所周知,我們通常使用的傳統(tǒng)Internet是基于TCP/IP協(xié)議的,它是很多網(wǎng)絡(luò)互聯(lián)的基礎(chǔ)模型。事實上,TCP/IP協(xié)議的平穩(wěn)運行對物理鏈路特性有一些關(guān)鍵要求[1]:
(1)在源節(jié)點和目標(biāo)節(jié)點之間存在一條端到端路徑。
(2)發(fā)送端和接收端之間的最大往返時延不大。
(3)端到端的丟包概率很小。
(4)誤碼率低。
然而,并不是所有的網(wǎng)絡(luò)環(huán)境都可以滿足上述要求,隨著網(wǎng)絡(luò)被使用于越來越多的場景,許多復(fù)雜、變化的場景都使得曾經(jīng)被奉為標(biāo)準(zhǔn)的TCP/IP協(xié)議不再適用,例如深空通信網(wǎng)絡(luò)、軍用自組織網(wǎng)絡(luò)、陸地移動網(wǎng)絡(luò)、遠洋船只、偏遠山區(qū)等等,它們或多或少都不再完全滿足于TCP/IP網(wǎng)絡(luò)協(xié)議的要求。我們把這種網(wǎng)絡(luò)統(tǒng)稱為:受限網(wǎng)絡(luò)(Challenged Network)。
相對于正常的網(wǎng)絡(luò)環(huán)境,受限網(wǎng)絡(luò)通常延遲較高、數(shù)據(jù)傳輸速率較低、連接不穩(wěn)定、數(shù)據(jù)包可能需要排隊較長時間。因此,傳統(tǒng)的TCP/IP協(xié)議在受限網(wǎng)絡(luò)環(huán)境中需要被改進或取代。
2002年,Intel公司伯克利研究實驗室提出了一種“延遲容忍網(wǎng)絡(luò)(Delay Tolerant Network,DTN)”的新概念[2]。由于DTN的特殊需求,顯然DTN需要一套不同于TCP/IP的改進型協(xié)議棧。同時,盡管DTN與傳統(tǒng)Internet工作于不同場景,二者之間的通信也必不可少。例如:處于深空環(huán)境的飛行器與地面指揮中心的信息交換;戰(zhàn)地網(wǎng)絡(luò)與遠程指揮中心的信息交換等等。因此,聯(lián)通TCP/IP協(xié)議棧與DTN協(xié)議棧的網(wǎng)關(guān)設(shè)備方法或?qū)O具價值。
為了滿足受限網(wǎng)絡(luò)的需求,2007年,IRTF的DTNRG研究組發(fā)布的,與DTN網(wǎng)絡(luò)體系結(jié)構(gòu)相關(guān)的規(guī)范文檔RF4838分析了TCP/IP協(xié)議棧在受限網(wǎng)絡(luò)環(huán)境下失效的原因,并在此基礎(chǔ)上提出了區(qū)別于TCP/IP協(xié)議棧的DTN協(xié)議棧,如圖1所示。
事實上,DTN的協(xié)議棧仍然與Internet的協(xié)議棧有較大的相似度。不過最顯著的區(qū)別是,DTN協(xié)議棧將會比我們熟悉的Internet協(xié)議棧多一層 ——Bundle Protocol(BP)層。Bundle協(xié)議是在文檔RFC5050提出的[3],存在于傳統(tǒng)的TCP/IP協(xié)議棧的傳輸層之上,它將數(shù)據(jù)塊分組成束,并使用存儲轉(zhuǎn)發(fā)技術(shù)傳輸它們。BP協(xié)議將多個子網(wǎng)連接到一個網(wǎng)絡(luò)中,提供基于監(jiān)管的轉(zhuǎn)發(fā)服務(wù)并且可以長期存儲數(shù)據(jù)。信號重傳器保證分組傳送。因此,他們可以輕松應(yīng)對互網(wǎng)絡(luò)連接問題,如帶寬延遲和連接斷開。
圖1 DTN協(xié)議棧
Bundle協(xié)議的主要特點包括:擁有一個基于點到點重傳的托管傳輸機制;基于URI的地址后綁定(Late Binding)機制;連接不同的傳輸層協(xié)議的匯聚層適配器;利用確定的、機會式的和可預(yù)測的連接適應(yīng)不同的網(wǎng)絡(luò)環(huán)境[4]。
位于Bundle層與傳輸層中間的匯聚層,充當(dāng)?shù)氖莃p協(xié)議與傳輸層協(xié)議之間的接口。由于Bundle協(xié)議是一種應(yīng)用于不同的傳輸層協(xié)議上的覆蓋協(xié)議,所以要實現(xiàn)束的發(fā)送和接收需要使用響應(yīng)的匯聚層適配器協(xié)同底層的網(wǎng)絡(luò)協(xié)議。匯聚層主要是對下面的傳輸層進行輔助。目前我們常見的支持Bundle協(xié)議的匯聚層協(xié)議有:TCPCL、UDPCL、LTP協(xié)議等等。但是本文主要研究的是相對來說,更加適合DTN的LTP[5]協(xié)議。
LTP協(xié)議可以處理點到點通信中的延遲和中斷,尤其是長延遲鏈路問題。
圖2展示了源文件經(jīng)過Bundle協(xié)議與LTP協(xié)議封裝的過程[6]。
圖2 文件封裝
DTN網(wǎng)關(guān)扮演著DTN網(wǎng)絡(luò)與Internet之間的翻譯者的角色,讓處于這兩種不同的網(wǎng)絡(luò)環(huán)境內(nèi)的終端得以無障礙地通信。
網(wǎng)關(guān)共分為三層,由上到下分別為業(yè)務(wù)服務(wù)層、協(xié)議適配層以及鏈路接入層。如圖3所示。
(1)業(yè)務(wù)服務(wù)層
消息的接收以及發(fā)送模塊構(gòu)成了業(yè)務(wù)服務(wù)層。消息接收模塊負(fù)責(zé)接收來自上層應(yīng)用的標(biāo)準(zhǔn)消息,將消息傳遞給協(xié)議適配層。消息發(fā)送模塊負(fù)責(zé)把下層接收的數(shù)據(jù)信息向上層傳送。
(2)協(xié)議適配層
消息解析模塊與消息轉(zhuǎn)換模塊組成協(xié)議適配層。消息解析模塊從上下層接收消息,從下層接收到的消息將被解析出具體內(nèi)容,若本機為數(shù)據(jù)包的目的地,將解析出的交與上層,否則根據(jù)目的地所處的網(wǎng)絡(luò)環(huán)境,通過消息轉(zhuǎn)換模塊打包成正確的協(xié)議數(shù)據(jù)包,重新發(fā)往鏈路。從上層接收到的消息將通過消息轉(zhuǎn)化模塊,根據(jù)消息目的地所處網(wǎng)絡(luò)環(huán)境打包,發(fā)往鏈路。協(xié)議適配層是DTN網(wǎng)關(guān)的核心,完成對來自上層應(yīng)用的消息以及底層鏈路的消息的解析、以及二者之間的相互轉(zhuǎn)換。
(3)鏈路接入層
此層同樣包括消息發(fā)送與接收模塊。消息發(fā)送模塊將經(jīng)過協(xié)議適配層包裝后的完整消息發(fā)送入鏈路,消息接收模塊則從鏈路中將來自其他設(shè)備的消息進行攬收,發(fā)送至協(xié)議適配層進行解析。
圖3 網(wǎng)關(guān)層次
我們的系統(tǒng)建立在TB-7Z-020單片機的基礎(chǔ)上,DTN網(wǎng)關(guān)的硬件模塊如圖4所示。
數(shù)據(jù)匯聚模塊:實現(xiàn)從連接網(wǎng)關(guān)的應(yīng)用收集相關(guān)數(shù)據(jù)的功能。
處理存儲模塊:網(wǎng)關(guān)中的核心模塊,實現(xiàn)了數(shù)據(jù)包的管理、解析與打包。我們使用的處理器是ARM Cortex-A9處理器,外擴SD卡作為存儲器。
接入模塊:將網(wǎng)關(guān)接入物理鏈路,目前我們使用的是有線以太網(wǎng)。
供電管理模塊:負(fù)責(zé)整套系統(tǒng)的電源供給,電源模塊的穩(wěn)定性能直接關(guān)系到系統(tǒng)的穩(wěn)定運行,我們使用的是MPS公司的DCDC。
圖4 硬件模塊
我們的網(wǎng)關(guān)基于Linux操作系統(tǒng)。進入網(wǎng)關(guān)的數(shù)據(jù)分為兩種類型,一種是由正常的Internet發(fā)往受限網(wǎng)絡(luò),即TCP/IP協(xié)議棧轉(zhuǎn)DTN協(xié)議棧;另一種是由受限網(wǎng)絡(luò)發(fā)往正常的Internet,即DTN協(xié)議棧轉(zhuǎn)TCP/IP協(xié)議棧。
2.4.1 實驗方法
網(wǎng)關(guān)的性能測試基于3個節(jié)點,節(jié)點A為受限網(wǎng)絡(luò)中的Linux機器,節(jié)點B為網(wǎng)關(guān)節(jié)點,節(jié)點C為正常Internet中的Linux機器。A與B之間的網(wǎng)絡(luò)為DTN,B與C之間的網(wǎng)絡(luò)為以太網(wǎng)。在通信的三個節(jié)點的基礎(chǔ)上,添加一臺搭載了loadrunner的windows設(shè)備作為網(wǎng)關(guān)設(shè)備性能負(fù)載測試的工具。并于網(wǎng)關(guān)節(jié)點搭建load generator作為與windows設(shè)備的連接器。
Loadrunner集群:
(1)執(zhí)行節(jié)點:A節(jié)點192.168.1.1
(2)控制節(jié)點:B節(jié)點192.168.1.2
(3)執(zhí)行節(jié)點:C節(jié)點192.168.1.3
在DTN協(xié)議棧中,匯聚層數(shù)據(jù)單元的大小選擇,即網(wǎng)關(guān)中的LTP 段的大小的選擇,會實在地影響到DTN數(shù)據(jù)包的打包與轉(zhuǎn)發(fā)速度,因為DTN協(xié)議棧依然存在傳輸層與網(wǎng)絡(luò)層,匯聚層數(shù)據(jù)段的大小會影響到網(wǎng)絡(luò)層的發(fā)送與接收效率。
為了確定LTP段最佳大小,我們采用控制變量法,逐步調(diào)整LTP段的大小,由A向C進行流傳輸,通過wireshark記錄LTP段選擇不同大小時的傳輸速率峰值。多次實驗,取平均值。
在確定了最佳的LTP段的大小之后,我們對網(wǎng)關(guān)的性能進行測試,測試分為3個部分,分別為由A向C發(fā)送數(shù)據(jù)包,由C向A發(fā)送數(shù)據(jù)包以及A與C同時向?qū)Ψ桨l(fā)送數(shù)據(jù)包。開始測試后,即于發(fā)送機迅速增加模擬用戶量。當(dāng)檢測到網(wǎng)關(guān)設(shè)備CPU達到滿載,停止增加模擬用戶量,測試時間為5分鐘。
2.4.2 實驗結(jié)果
從100字節(jié)逐步加大LTP段大小,記錄的傳輸速率峰值:
圖6 傳輸峰值
在最大LTP段大小設(shè)定為1440字節(jié)時,傳輸速率峰值達到最高。因為LTP包頭的大小為32字節(jié),當(dāng)LTP數(shù)據(jù)部的大小達到1440字節(jié)時,傳到網(wǎng)絡(luò)的數(shù)據(jù)大小恰好達到1500字節(jié)。
將LTP段大小設(shè)置為1440字節(jié),對網(wǎng)關(guān)性能進行測試。
由A向C發(fā)送數(shù)據(jù)包,網(wǎng)關(guān)每秒處理事務(wù)數(shù):
圖7 A->C事務(wù)數(shù)
由C向A發(fā)送數(shù)據(jù)包,網(wǎng)關(guān)每秒處理事務(wù)數(shù):
圖8 C->A事務(wù)數(shù)
A與C同時向?qū)Ψ桨l(fā)送數(shù)據(jù)包,網(wǎng)關(guān)處理事務(wù)數(shù):
圖9 雙向數(shù)據(jù)流事務(wù)數(shù)
可以看到當(dāng)處理單方向的數(shù)據(jù)轉(zhuǎn)發(fā)時,數(shù)據(jù)流向無論是A到C或是C到A,網(wǎng)關(guān)CPU滿載時的每秒處理事務(wù)數(shù)均為1800左右,并且在測試時間內(nèi),基本維持在峰值。而當(dāng)處理雙向的數(shù)據(jù)轉(zhuǎn)發(fā)時,網(wǎng)關(guān)CPU滿載時的每秒處理事務(wù)數(shù)為1500左右,因為網(wǎng)關(guān)需要同時運行DTN解包與打包兩個較耗資源的進程。針對于我們的應(yīng)用場景,這樣的并發(fā)處理能力是完全符合需求的。
本文對將在受限網(wǎng)絡(luò)中發(fā)揮重要作用的DTN進行了研究,尤其對DTN協(xié)議棧中具有獨特性和針對性的Bundle協(xié)議以及LTP協(xié)議的特點、工作方式進行了深入研究。設(shè)計并實現(xiàn)了向上屏蔽底層通信協(xié)議差異的網(wǎng)關(guān)設(shè)備,從而連通DTN與Internet,使得處于受限網(wǎng)絡(luò)的設(shè)備與處于正常網(wǎng)絡(luò)的設(shè)備能夠?qū)崿F(xiàn)無障礙通信。