劉杰,姜勝明,楊愷健
(上海海事大學信息工程學院,上海 201306)
Semi-TCP協(xié)議在ARM開發(fā)板RP4412下的實現(xiàn)方法
劉杰,姜勝明,楊愷健
(上海海事大學信息工程學院,上海 201306)
Semi-TCP協(xié)議將傳統(tǒng)TCP的擁塞控制下放到MAC層,構成逐跳的擁塞控制來判斷節(jié)點間的擁塞狀態(tài),它比傳統(tǒng)TCP以及在這基礎上改進的無線TCP更適應于動態(tài)拓撲的網(wǎng)絡。但是目前對Semi-TCP協(xié)議的研究還僅局限于計算機仿真階段。因此嘗試基于實際平臺RP4412開發(fā)板,不修改已有MAC層的控制幀和已有的硬件配置信息,利用軟件定義發(fā)送數(shù)據(jù)幀的形式,在幀體域攜帶節(jié)點緩存狀態(tài)量化信息,完成節(jié)點擁塞狀態(tài)信息的傳遞,以此實現(xiàn)并測試Semi-TCP在實際平臺下?lián)砣刂频男阅堋?/p>
Semi-TCP;逐跳擁塞控制;多跳無線網(wǎng)絡;動態(tài)拓撲網(wǎng)
在動態(tài)拓撲網(wǎng)絡中,由于信道損耗以及動態(tài)路由等相關問題,造成許多非擁塞因素引起的丟包,根據(jù)TCP層丟包即擁塞的原則,TCP盲目地擁塞控制,縮小擁塞窗口值,減小發(fā)送速率,導致網(wǎng)絡的吞吐量降低。Semi-TCP協(xié)議采用跨層設計的思想,將傳統(tǒng)傳輸層的端到端的擁塞控制功能下放到數(shù)據(jù)鏈路層的MAC層,保留TCP的可靠性控制[1]。它是一種逐跳的擁塞控制方法,是為解決在無線動態(tài)拓撲網(wǎng)絡場景下,由于許多非網(wǎng)絡擁塞因素造成對網(wǎng)絡擁塞誤判以及處理不及時的不足,提高了網(wǎng)絡擁塞控制的效率,提升了網(wǎng)絡吞吐量。
針對Semi-TCP的研究,大量仿真實驗已經(jīng)證明其在動態(tài)拓撲網(wǎng)絡場景下,逐跳的擁塞控制比傳統(tǒng)TCP端到端的控制更有效。但是現(xiàn)在還僅局限于計算機仿真階段,主要的仿真實現(xiàn)方法是利用增加或修改控制幀并讓其攜帶緩存狀態(tài)信息,遞歸逐跳地傳遞擁塞信息,來實現(xiàn)擁塞控制。目前的實現(xiàn)方法有通過增加控制幀fCTS的方式,發(fā)送節(jié)點向接收節(jié)點發(fā)送RTS時,如果接收節(jié)點緩存空間不足以接收數(shù)據(jù),回復fCTS給 RTS的發(fā)送方,告知擁塞[2];也可以通過修改RTS/CTS幀,即通過帶擁塞狀態(tài)的控制幀RTSC/CTSC來傳遞擁塞信息[3];在文獻[4]中,利用ACK捎帶其擁塞信息,以此告知發(fā)送方能否發(fā)送數(shù)據(jù)[4];還有方法是在MAC層和TCP層之間通過增加一個虛擬層VTCP,上層收到VACK后調節(jié)發(fā)送窗口大小,改變發(fā)送速率,并且修改RTS幀控制域的subtype字段,實現(xiàn)擁塞狀態(tài)的判定[5]。文獻6提出了一種基于被動偵聽和數(shù)據(jù)幀調度的無線多跳網(wǎng)絡擁塞方法[6]。綜上幾種Semi-TCP的實現(xiàn)方法,它們的共同點是都需要改變現(xiàn)有TCP/IP協(xié)議棧的體系結構,需要改變無線網(wǎng)絡接口卡的既有的硬件配置信息,同時網(wǎng)絡結構和終端系統(tǒng)都需要配置該協(xié)議。
本文嘗試基于現(xiàn)有實際平臺RP4412開發(fā)板,通過C語言修改相關函數(shù),軟件定義發(fā)送數(shù)據(jù)幀的方式,不修改已有MAC層的控制幀和現(xiàn)有的硬件配置信息,在數(shù)據(jù)幀的幀體域攜帶節(jié)點緩存狀態(tài)量化信息,完成節(jié)點擁塞狀態(tài)信息的傳遞。本方法使用開發(fā)板4412搭建實際平臺,在Linux(Ubuntu)操作系統(tǒng)下交叉編譯已修改的相關代碼信息并移植到開發(fā)板上,利用軟件定義判斷開發(fā)板無線網(wǎng)卡緩存狀態(tài)再發(fā)送數(shù)據(jù)幀的方式實現(xiàn)擁塞狀態(tài)的判斷。
1.1 Semi-TCP協(xié)議算法
Semi-TCP協(xié)議發(fā)送節(jié)點(或轉發(fā)節(jié)點)根據(jù)收到來自接收節(jié)點(或下一跳)的接收緩存狀態(tài)信息和接收節(jié)點緩存數(shù)據(jù)的處理速率及時地對自身節(jié)點發(fā)送速率和高層向下層發(fā)送速率的調節(jié)。收到下一跳發(fā)送的特殊數(shù)據(jù)幀,根據(jù)幀體域攜帶的信息進行擁塞判斷及處理。Semi-TCP系統(tǒng)的整體架構如圖1所示。
圖1 Semi-TCP協(xié)議體系結構
從整體上講,Semi-TCP算法可分成節(jié)點自身的擁塞判定和節(jié)點間的擁塞傳遞;節(jié)點自身的擁塞判定是指作為發(fā)送節(jié)點(包括轉發(fā)節(jié)點)時,對傳輸層向下層發(fā)送數(shù)據(jù)速率的調節(jié)。能否向下層發(fā)送數(shù)據(jù)取決于MAC層的發(fā)送緩存是否達到了擁塞門限值。節(jié)點自身緩存分層劃分如圖2所示,設節(jié)點內發(fā)送緩存的空間容量為L(已設定),擁塞門限值為CTh(Congestion Threshold),緩存中當前數(shù)據(jù)包占用空間為N,0〈CTH≤L。當N〈CTh時,沒有擁塞,否則有擁塞。當沒有擁塞時,發(fā)送節(jié)點(包括轉發(fā)節(jié)點)的傳輸層可以向下層發(fā)送數(shù)據(jù),否則就不能發(fā)送數(shù)據(jù)[7]。
圖2 節(jié)點自身緩存劃分
節(jié)點間的擁塞傳遞是指相鄰節(jié)點間發(fā)送速率的調節(jié)。節(jié)點在收到下一跳發(fā)來的擁塞狀態(tài)信息,暫停向該節(jié)點發(fā)送數(shù)據(jù)。
1.2 Semi-TCP協(xié)議實現(xiàn)場景
Semi-TCP協(xié)議適用在無線網(wǎng)絡場景下,而Linux作為一個開放源代碼的操作系統(tǒng),它支持大量的網(wǎng)絡協(xié)議,是測試新協(xié)議及其增強的良好平臺,RP4412開發(fā)板所用的正是Linux內核3.0,相關代碼修改后交叉編譯后移植到開發(fā)板上。Linux無線網(wǎng)絡架構如圖3所示。
圖3 Linux無線網(wǎng)絡結構概覽
圖3左側顯示了Linux內核網(wǎng)絡協(xié)議棧的基本機構,虛線下是以太網(wǎng)設備;右側顯示了Linux無線網(wǎng)絡結構,虛線以下是Wi-Fi設備,主要涉及物理層和數(shù)據(jù)鏈路層。虛線上展示的是內核空間的情況。用戶空間的程序運行在最上層,而硬件相關的設備則在最下面。Linux內核無線子系統(tǒng)分成兩大塊,cfg80211和mac80211,它們連通內核其他模塊和用戶空間的應用程序。其中cfg80211在內核空間提供配置管理服務,內核與應用層通過nl80211時間配置管理接口。Linux內核無線子系統(tǒng)處理OSI模型最底層的MAC和PHY層,MAC層可以分為MAC上層和MAC下層,前者管理無線網(wǎng)絡的身份認證、探測、關聯(lián)等;后者實現(xiàn)MAC層如ACK等操作。硬件(無線適配器)處理了大部分的PHY層和MAC下層操作。
Linux無線子系統(tǒng)實現(xiàn)大部分的MAC上層的回調函數(shù)。內核具有高內聚低耦合的特性,各個模塊之間分界線很清晰,內核通過一系列的函數(shù)指針使得各層之間相互透明不可見。所以在rtl8188EUS(4412開發(fā)板集成的USB無線網(wǎng)卡)驅動做修改時,不需要改動mac80211的代碼,添加Semi-TCP協(xié)議相關操作不用修改套接字層和設備無關層代碼。數(shù)據(jù)和管理路徑在mac80211中是分開實現(xiàn)的。數(shù)據(jù)路徑對應著IEEE802.11數(shù)據(jù)幀(Data Frame),而管理路徑對應著IEEE802.11控制幀(Control Frame)。
2.1 交叉開發(fā)環(huán)境的搭建
開發(fā)環(huán)境的搭建采用主機與目標板相結合的交叉開發(fā)模式,在PC端主機上配置Windows XP操作系統(tǒng),在虛擬機軟件VMware workstations上安裝Ubuntu 12.04操作系統(tǒng)并配置交叉編譯環(huán)境arm-2009q3.tar,用于編輯開發(fā)調試。開發(fā)板上配置內核Linux kernel 3.0文件系統(tǒng)android 4.0.4,PC端將開發(fā)好的協(xié)議代碼燒寫到開發(fā)板,開發(fā)板作為目標板運行和測試所編寫好的協(xié)議代碼。
開發(fā)板開發(fā)環(huán)境搭建外觀實景圖:
圖4 開發(fā)環(huán)境外觀實景
2.2 Semi-TCP協(xié)議數(shù)據(jù)包的傳送和接收過程
在Linux無線網(wǎng)絡系統(tǒng)中,mac80211已經(jīng)注冊了網(wǎng)絡設備驅動,可看作net_device。在代碼路徑kernel/ net/mac80211/iface.c中可見。在mac80211內部,ieee80211_subif_start_xmit實現(xiàn)這樣一個調用子序列:ieee80211_xmit=>ieee80211_tx=>ieee80211_tx_frags =>drv_tx信息從mac80211傳下來,驅動程序將數(shù)據(jù)轉換成底層硬件可識別的形式,再做相關幀數(shù)據(jù)的調整,將數(shù)據(jù)幀放入發(fā)送隊列,將幀的描述符發(fā)送給硬件。在開發(fā)板RP4412中數(shù)據(jù)幀到最后都是通過USB接口發(fā)送給無線設備rtl8188EUS。
當數(shù)據(jù)包在空中被無線設備捕捉到,RP4412內核通過輪詢機制判斷是否有數(shù)據(jù)到來,促使接收函數(shù)將被調用,驅動層的回調函數(shù)為mac80211填充接收描述符,然后把數(shù)據(jù)包推送給mac80211,由mac80211將數(shù)據(jù)包放入接收隊列。如果收到的幀是數(shù)據(jù)幀,它將被轉換成802.3數(shù)據(jù)幀,然后改數(shù)據(jù)幀將通過netif_receive_skb交付給網(wǎng)絡協(xié)議棧,在協(xié)議棧中各層網(wǎng)絡協(xié)議將會對數(shù)據(jù)進行解析,根據(jù)收到的數(shù)據(jù)幀的幀體域捎帶的MAC緩存狀態(tài)的量化信息,增加一個觸發(fā)器,如果預先設置緩存狀態(tài)信息大于90%(或者設置50%,70%,并作比較),則代表該發(fā)送節(jié)點擁塞,否則不擁塞;如果收到的幀是控制幀,則將會由ieee80211 _sta_rx_queued_mgmt處理,部分控制幀(如ack幀)在mac80211層終止,部分(如認證幀)則會通過cfg80211發(fā)送給用戶空間下的管理程序。
2.3 Semi-TCP協(xié)議實現(xiàn)的主要流程
發(fā)送節(jié)點內核通過輪詢得知有數(shù)據(jù)要發(fā)送,接收節(jié)點收到發(fā)送節(jié)點的大量數(shù)據(jù),觸動觸發(fā)器,此時,接收節(jié)點向發(fā)送節(jié)點發(fā)送特殊的數(shù)據(jù)幀,幀體域攜帶接收緩存的占用率和接收節(jié)點的數(shù)據(jù)處理速率(向高層發(fā)送或者轉發(fā)至其他節(jié)點),作一個簡單判斷,然后根據(jù)這些信息調整自身的發(fā)送速率,通知高層降低發(fā)送速率,如果是中間節(jié)點(轉發(fā)節(jié)點),則向網(wǎng)絡中上一個節(jié)點反向遞歸傳遞擁塞信息,實現(xiàn)逐跳的擁塞控制。
特殊的數(shù)據(jù)幀的幀類型,設置幀控制域中的Type字段為10及Subtype字段為null,即特殊的數(shù)據(jù)幀。發(fā)送節(jié)點收到該特殊的數(shù)據(jù)幀,讀取subtype字段得知是事先定制攜帶有節(jié)點緩存信息的特殊數(shù)據(jù)幀,然后從幀體內讀取的緩存狀態(tài)信息。
幀體設置了一個標志位flag,當緩存占用率達到門限值時flag=1;否則flag=0;根據(jù)幀體攜帶擁塞狀態(tài)flag和接收節(jié)點的數(shù)據(jù)處理速率Rv兩個信息,發(fā)送節(jié)點根據(jù)接收到的信息,調低發(fā)送節(jié)點的發(fā)送速率Tv到小于接收節(jié)點的接收數(shù)據(jù)處理速率Rv,即Tv〈Rv;將原有TCP協(xié)議機制上將擁塞控制功能刪除,即內核協(xié)議棧中的擁塞窗口處理函數(shù)不做任何處理。實現(xiàn)流程如圖5。
圖5 實現(xiàn)主要流程
搭建測試平臺是為了在添加擁塞狀態(tài)判斷后網(wǎng)絡是否有異常,測試環(huán)境需要兩臺開發(fā)板測試機,一臺作為測試機,另一臺作為對端機;2一塊帶有兩塊網(wǎng)卡的服務機,一塊網(wǎng)卡接測試機網(wǎng)絡,另一塊網(wǎng)卡接AP網(wǎng)絡;3.一個帶有命令行界面的AP。測試工具采用OpenGroup開發(fā)維護的測試工具集TETware。
操作步驟如下:
(1)安裝Server和AP網(wǎng)絡:將無線測試腳本拷貝到目錄〈server machine>:/usr/local/bin/配置環(huán)境變量在/usr/local/bin/apset/apset.cisco/config.pm配置ap網(wǎng)絡地址IP,設置SSID_Semi-TCP以及AP_Login、AP_Password等相關配置;
(2)安裝測試機和對端機:將測試腳本寫入測試機;安裝和配置測試環(huán)境執(zhí)行命令./config.sh-flrt以及./etc/TVSEnvironment,然后運行tvs run;
(3)開始測試:/usr/tet/TVS/etc/TVSListing定義好測試場景,運行測試腳本./etc/TVSEnvironment;獲取測試報告/usr/tet/TVS/Reports/latest。
根據(jù)三項測試得到的結果進行分析:
(1)通過端到端的連通測試工具ping命令分析和判斷網(wǎng)絡是否故障,根據(jù)測試結果分析,測試機與對端機之間網(wǎng)絡連接暢通,時延略有延長,丟包率為0。
(2)根據(jù)所搭建的測試環(huán)境平臺,在TETware下運行定義好的測試場景分析得出,在不同場景腳本下,設置不同的工作模式與信道,原有的802.11協(xié)議運行不會受到影響,網(wǎng)絡狀態(tài)正常。
(3)利用802.11網(wǎng)絡分析工具Wireshark,它是完全開放源源碼的封包分析軟件,將無線接口切換為監(jiān)控模式(monitoring mode),然后輸入命令Wireshark啟動軟件,開始抓包。在封包列表窗口選中IEEE802 data,樹狀視圖窗格IEEE802.11 data域中,可見數(shù)據(jù)包的具體封裝,在下面的數(shù)據(jù)視圖窗格,獲取到幀體域(Frame Body)攜帶的擁塞狀態(tài)信息。根據(jù)在測試機和對端機之間大量的發(fā)送數(shù)據(jù),呈現(xiàn)出兩種幀體攜帶擁塞信息的特殊的數(shù)據(jù)幀。實時的抓包可以看出擁塞狀態(tài),狀態(tài)值n〈9(或者n〈5,n〈7)時,未發(fā)生擁塞,當值變成n=9(或者n=5,n=7時啟動觸發(fā)器,告知接收機器發(fā)生擁塞,可以看出我們通過軟件定義發(fā)送數(shù)據(jù)幀的形式,在幀體域攜帶節(jié)點緩存狀態(tài)量化信息,初步實現(xiàn)了兩個節(jié)點之間擁塞狀態(tài)信息的傳遞。
隨著對Semi-TCP協(xié)議不斷研究,繼續(xù)對擁塞控制方法等的優(yōu)化,對實現(xiàn)擁塞控制算法的優(yōu)化還能繼續(xù)深入。在實際平臺RP4412開發(fā)板,通過軟件定義發(fā)送數(shù)據(jù)幀的形式,實現(xiàn)在幀體域攜帶節(jié)點緩存狀態(tài)量化信息,完成節(jié)點擁塞狀態(tài)信息的傳遞,在此基礎上利用開源測試工具TETware建立多種場景和Wareshark對Semi-TCP在實際平臺下?lián)砣刂频男阅苓M行了分析。由此得知,Semi-TCP在實際平臺下內核協(xié)議棧和網(wǎng)卡驅動代碼的改進優(yōu)化,對節(jié)點內和節(jié)點間的擁塞控制方法需要繼續(xù)不斷調試。
[1]Jiang S,Zuo Q,Wei G.Decoupling Congestion Control from TCP for Multi-Hop Wireless Networks:Semi-TCP[M],2009.
[2]姜勝明,韋崗,佐琴,胡海燕,劉桂開.基于RTS/CTS機制的多跳無線網(wǎng)絡擁塞控制方法[P].廣東:CN101345749,2009-01-14.
[3]姜勝明,蔡業(yè)桂,王麗,韋崗.一種改進的基于RTS/CTS的多跳無線網(wǎng)絡擁塞控制方法[P].廣東:CN101902776A,2010-12-01.
[4]姜勝明,吳泉明.一種附帶式跨層設計的無線網(wǎng)絡擁塞控制方法[P].廣東:CN102244568A,2011-11-16.
[5]劉梅,姜勝明,陸以勤.無線多跳網(wǎng)絡中Semi-TCP協(xié)議的實現(xiàn)[J].計算機工程,2012,(09):79-82.
[6]楊愷健,姜勝明,錢彥臻,吳世東.一種基于被動偵聽和數(shù)據(jù)幀調度的無線多跳網(wǎng)絡擁塞控制方法[P].上海:CN105873126A,2016-08-17.
[7]熊晨霖.Semi-TCP在海洋互聯(lián)網(wǎng)中的應用仿真研究[D].華南理工大學,2016.
[8]Behrouz A.Forouzan.TCP/IP協(xié)議族[M].北京:清華大學出版社,2011.
[9]Christian,Benvenuti.深入理解Linux網(wǎng)絡技術內幕[M].北京:中國電力出版社,2009.
[10]Mattbew S.Gast.802.11無線網(wǎng)絡權威指南[M].南京:東南大學出版社,2007.
[11]陳莉君.深入分析Linux內核源代碼[M].北京:人民郵電出版社,2002.
Implementation Method of Semi-TCP Protocol in ARM Development Board RP4412
LIU Jie,JIANG Sheng-ming,YANG Kai-jian
(College of Information Engineering,Shanghai Maritime University,Shanghai201306)
Semi-TCP protocol decouples congestion control from traditional TCP to MAC layer,so that it can realize hop-by-hop congestion control and then correctly judge congestion state between nodes.It is more suitable for dynamic topology networks than the traditional TCP and the improved wireless TCP.However,at present,the research on Semi-TCP protocol is only limited to the computer simulation.Therefore, doesn’t modify existing MAC layer control frames and existing hardware configuration information based on real platform,uses software to define the form of data frames and carries the node cache state quantization information in the frame area,so that it completes the transmission of node congestion state information.It implements and tests the performance of Semi-TCP congestion control in real platform.
Semi-TCP;Hop-by-Hop Congestion Control;Multi-Hop Wireless Networks;Dynamic Topology Networks
1007-1423(2017)11-0065-05
10.3969/j.issn.1007-1423.2017.11.013
劉杰(1989-),男,山西太原人,碩士研究生,研究方向為無線網(wǎng)絡協(xié)議
2017-03-16
2017-04-10
姜勝明(1964-),男,江蘇人,博士,教授,研究方向為通信網(wǎng)絡結構、協(xié)議和算法等
楊愷?。?991-),男,江蘇南京人,碩士研究生,研究方向為無線網(wǎng)絡協(xié)議