張 棟,徐任暉,喬廬峰,續(xù) 欣,魯銘洋
(中國人民解放軍陸軍工程大學(xué),江蘇 南京 210007)
無人機集群的發(fā)展越來越迅速,應(yīng)用范圍不斷擴展。當(dāng)無人機集群應(yīng)用于戰(zhàn)場環(huán)境時,其對載荷業(yè)務(wù)數(shù)據(jù)和控制數(shù)據(jù)傳輸有很高的要求。如圖1 所示,無人機集群戰(zhàn)場環(huán)境包括無線通信、衛(wèi)星通信、延遲容忍網(wǎng)絡(luò)等多種通信方式;包括陸地、海上、空中、指揮所等多個作戰(zhàn)單元。多種通信手段需要互聯(lián)互通,多個協(xié)議之間需要彼此協(xié)調(diào)。網(wǎng)絡(luò)拓?fù)涫冀K處于變化之中。由于無人機集群是一種由具有移動性的無線設(shè)備組成的網(wǎng)絡(luò),拓?fù)涫冀K處于頻繁變化的狀態(tài),因此無人機集群需要這樣一個軟件架構(gòu),使集群能夠自主根據(jù)感知情況計算行動資源,動態(tài)完成感知、決策、實施等一系列任務(wù)。無人機集群在向分布式、大規(guī)模、智能自治方向發(fā)展,重點需要集群自治、人機組隊、集群感知、集群組網(wǎng)和集群智能[1]這5 種能力。此外,為了有效應(yīng)對軍事任務(wù)需求,無人機集群還要能夠克服固定架構(gòu)網(wǎng)絡(luò)的不足,適應(yīng)戰(zhàn)場未知多變環(huán)境,因而需要一個開放、可動態(tài)調(diào)整的網(wǎng)絡(luò)架構(gòu)。
圖1 無人機集群戰(zhàn)場要素
軟件定義網(wǎng)絡(luò)(Soft Design Network,SDN)具有網(wǎng)絡(luò)可編程、業(yè)務(wù)調(diào)度靈活、開放性好、成本低的特點,因此基于SDN 架構(gòu)的無人機網(wǎng)絡(luò)研究日益得到重視。軟件定義網(wǎng)絡(luò)的網(wǎng)絡(luò)架構(gòu)由美國斯坦福大學(xué)Clean Slate 研究組提出[2],具體如圖2 所示。SDN 設(shè)計初衷是為了使硬件標(biāo)準(zhǔn)化,用軟件對所有的設(shè)備進(jìn)行統(tǒng)一控制。通過編程實現(xiàn)對硬件數(shù)據(jù)轉(zhuǎn)發(fā)規(guī)則的控制,從而達(dá)到對流量進(jìn)行自由操控的目的。
圖2 SDN 體系結(jié)構(gòu)
現(xiàn)今SDN 主要應(yīng)用于數(shù)據(jù)中心業(yè)務(wù)。SDN 技術(shù)能很好地契合數(shù)據(jù)中心網(wǎng)絡(luò)的集中網(wǎng)絡(luò)管理、虛擬機部署和智能遷移、靈活組網(wǎng)多路徑轉(zhuǎn)發(fā)、虛擬多租戶、云計算基礎(chǔ)設(shè)施服務(wù)(Infrastructure as a Service,IaaS)等方面的需求,非常適合在數(shù)據(jù)中心網(wǎng)絡(luò)中應(yīng)用。SDN 處理大容量數(shù)據(jù)時,其資源管控、隊列調(diào)度能力比較強,對功耗不敏感[3]。SDN應(yīng)用于數(shù)據(jù)中心時,僅用于處理2 層交換或3 層交換,不能滿足多層交換的需求。如圖3 所示為典型無人機集群網(wǎng)絡(luò),圖中共有3 個無人機網(wǎng)絡(luò),每個無人機網(wǎng)絡(luò)都有一個負(fù)責(zé)人master,master 具有組織協(xié)調(diào)功能,負(fù)責(zé)協(xié)調(diào)各項資源。集群中任何一個無人機都可以充當(dāng)master。無人機之間、無人機集群之間可能采用不同的網(wǎng)絡(luò)協(xié)議手段。例如,無人機集群之間采用的是延遲容忍網(wǎng)絡(luò)(Delay Tolerance Network,DTN)協(xié)議,集群內(nèi)無人機之間采用無線傳輸控制協(xié)議(Transmission Control Protocol,TCP)等協(xié)議。
圖3 無人機蜂群
綜上,SDN 應(yīng)用于無人機網(wǎng)絡(luò)需要滿足以下需求:(1)小型化、低功耗、集成度高;(2)滿足大容量數(shù)據(jù)交換需求;(3)要具有服務(wù)質(zhì)量(Quality of Service,QoS)保證能力。
傳統(tǒng)流表功耗較高,硬件資源消耗較大。查找時,傳統(tǒng)流表采用片內(nèi)查找的方法,片內(nèi)資源較少,表項數(shù)量不可能做得太大。因此亟須一種新的算法統(tǒng)一設(shè)計流表和規(guī)則表,功耗較低,并且能夠處理大容量數(shù)據(jù)。
本文設(shè)計一種流表算法,采用多級流表查找方式。每一級流表關(guān)注不同的字段。根據(jù)實際應(yīng)用需求,靈活組合形成不同級的流表。流表級數(shù)越高,查找優(yōu)先級越高。例如,最高級的流表關(guān)注源IP地址、目的IP 地址、源端口號、目的端口號、服務(wù)類型字段,次一級流表關(guān)注源IP 地址、目的IP地址和服務(wù)類型字段,最低一級流表關(guān)注源IP地址、目的IP 地址。將規(guī)則表和流表統(tǒng)一設(shè)計,降低資源消耗,同時兼顧靈活性、功耗、查找速度,使其達(dá)到平衡狀態(tài),更加適用于大容量查詢的場景。
Open Flow 是開放網(wǎng)絡(luò)基金會(Open Network Foundation,ONF)給出的SDN 架構(gòu)中的首個標(biāo)準(zhǔn)協(xié)議,用于定義控制器和轉(zhuǎn)發(fā)設(shè)備之間的接口。Open Flow 協(xié)議將網(wǎng)絡(luò)設(shè)備的控制層面和數(shù)據(jù)層面解耦合實現(xiàn)網(wǎng)絡(luò)流量的控制和管理,現(xiàn)已成為SDN最重要的南向接口標(biāo)準(zhǔn)。自從2009 年12 月發(fā)布第一個版本以來,Open Flow 協(xié)議已經(jīng)有多個版本發(fā)布,2014 年8 月發(fā)布最新的1.5 版本。交換機通過Open Flow 協(xié)議與控制器進(jìn)行通信,控制器使用Open Flow 協(xié)議下發(fā)指令給網(wǎng)絡(luò)設(shè)備,它可以添加、更新和刪除網(wǎng)絡(luò)設(shè)備中流表的表項。交換機通過解析數(shù)據(jù)包匹配流表中的特定字段,執(zhí)行控制器下發(fā)的后續(xù)操作指令。Open Flow 使用流水線來完成包的匹配工作。在Open Flow v1.0 版本中,還未提出多級流表的概念,整個交換機都只使用一個流表,包含非常多的流表項,每一個流表項的字段均為全匹配域。在后續(xù)的版本中才出現(xiàn)了多級流表的概念。
Open Flow v1.1 版本協(xié)議中規(guī)定多級流表。許多硬件廠商受到自己設(shè)備原始設(shè)計的限制,很難提供足夠的支持,目前普遍支持的只有能力受限的兩級流表,靈活性低。此外,傳統(tǒng)的網(wǎng)絡(luò)協(xié)議字段大多是5 元組(源IP 地址、目的IP 地址、源端口號、目的端口號、網(wǎng)絡(luò)協(xié)議),而Open Flow 協(xié)議包含更多的協(xié)議字段,如圖4 所示,在Open Flow v1.1版本中就包含有數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層在內(nèi)的12 個協(xié)議字段。為了在數(shù)據(jù)轉(zhuǎn)發(fā)時提供更豐富、更靈活的規(guī)則,Open Flow v1.5 版本協(xié)議包含的字段數(shù)量已達(dá)40 多個[4]。這些字段數(shù)量多、長度不等、匹配方式不同,導(dǎo)致數(shù)據(jù)包的轉(zhuǎn)發(fā)速度和存儲效率下降。數(shù)據(jù)包的轉(zhuǎn)發(fā)速度決定著Open Flow 交換機的吞吐能力。數(shù)據(jù)包轉(zhuǎn)發(fā)速度和存儲效率的降低已經(jīng)成為Open Flow 交換機提高轉(zhuǎn)發(fā)性能的瓶頸,因此,設(shè)計一個高效的流表匹配算法對SDN 的發(fā)展至關(guān)重要。
圖4 Open Flow 協(xié)議包頭流表項
SDN 交換機和傳統(tǒng)交換機本質(zhì)上都是根據(jù)規(guī)則將接收到的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),區(qū)別在于遵循的規(guī)則標(biāo)準(zhǔn)不同。傳統(tǒng)交換機得到網(wǎng)絡(luò)數(shù)據(jù)后,要對數(shù)據(jù)包進(jìn)行解析,之后進(jìn)行鏈路發(fā)現(xiàn)、地址學(xué)習(xí)、路由建立、協(xié)議控制等一系列步驟,再決定數(shù)據(jù)轉(zhuǎn)發(fā)的端口,這大大降低了傳統(tǒng)交換機的工作效率。SDN 交換機將傳統(tǒng)交換機需要完成的復(fù)雜的邏輯控制和計算交給控制端完成,交換機只需要執(zhí)行控制端下發(fā)的指令就可以完成轉(zhuǎn)發(fā)。
本文設(shè)計的SDN 交換機結(jié)構(gòu)如圖5 所示,是基于Xlinx ZYNQ-7100系列開發(fā)板(Field Programmable Gate Array,F(xiàn)PGA)實現(xiàn)整體架構(gòu)。片內(nèi)包括處理系統(tǒng)(Processing System,PS)側(cè)的處理器平臺、可編程邏輯(Programmable Logic,PL)側(cè)的邏輯部分。處理器平臺和邏輯部分通過高級可擴展接口(Advanced eXtensible Interface,AXI)與總線連接。片外為雙倍速率同步動態(tài)隨機存儲器(Double Data Rate SDRAM,DDR)和Flash 等存儲載體。邏輯部分包括以太網(wǎng)MAC 控制器接收模塊MAC_RX、以太網(wǎng)MAC 控制器發(fā)送模塊MAC_TX、交換單元、轉(zhuǎn)發(fā)表(流表)、分組處理單元、輸出隊列管理器、DTN 消息處理引擎和TCP 引擎等。轉(zhuǎn)發(fā)表通過分組處理單元與交換單元連接。交換單元有一端口,與DTN 消息處理引擎和TCP 引擎連接。DTN 消息處理引擎通過DDR 接口電路與片外DDR3 存儲連接。片外各有一塊DDR3 存儲和Flash 存儲,作為處理器平臺工作的內(nèi)存和閃存。
圖5 SDN 交換機硬件結(jié)構(gòu)設(shè)計
MAC 接收控制器接收上一節(jié)點傳來的數(shù)據(jù),并將數(shù)據(jù)傳遞給后級分組處理單元。分組處理單元將數(shù)據(jù)幀頭中的關(guān)鍵信息,如源IP、目的IP、源端口、目的端口、服務(wù)類型等抽取出來,并將這些關(guān)鍵信息傳入轉(zhuǎn)發(fā)表(流表)。轉(zhuǎn)發(fā)表(流表)收到這些信息后根據(jù)優(yōu)先級匹配相應(yīng)的流表項。如果匹配成功,則將查找結(jié)果返回給分組處理單元;如果未匹配成功,則將傳入的信息丟棄。分組處理單元接收到查找結(jié)果后,根據(jù)結(jié)果中的輸出端口映射位圖、數(shù)據(jù)幀長度及轉(zhuǎn)發(fā)優(yōu)先級等信息形成該數(shù)據(jù)幀的本地頭,后由交換單元轉(zhuǎn)發(fā)至相應(yīng)的端口。
轉(zhuǎn)發(fā)表(流表)是SDN 交換機的核心單元。轉(zhuǎn)發(fā)表(流表)應(yīng)滿足以下條件:(1)添加表項時,表項信息中帶有優(yōu)先級;(2)優(yōu)先級可以根據(jù)業(yè)務(wù)需求靈活配置;(3)查找表項時,從優(yōu)先級最高的表項到優(yōu)先級最低的表項依次查找;(4)采取多級流表查找的方式;(5)考慮使用靜態(tài)隨機存儲器(Static Random Access Memory,SRAM)實現(xiàn)查表結(jié)構(gòu),降低資源消耗,更加適用于大容量查詢的場景。
為滿足以上條件,設(shè)計以下算法實現(xiàn)功能。首先采用算法1 實現(xiàn)表項的添加。
算法2 描述了流表表項刪除的過程。刪除流表表項時,首先根據(jù)需要刪除的關(guān)鍵字clear_key 搜索四桶哈希電路中關(guān)鍵字的key 值。若能搜索到,則刪除key 所對應(yīng)的表項;若不能搜索到,則返回未搜索到信號clear_nak。
算法3 描述了表項查找的過程。查找表項時,首先提取出關(guān)鍵信息;其次根據(jù)關(guān)鍵信息,按照優(yōu)先級由高到低的順序依次匹配表項。如果匹配成功,則輸出查找結(jié)果;如果并未匹配成功,則繼續(xù)查找下一優(yōu)先級的表項;如果到最低一級優(yōu)先級仍未匹配成功,則輸出查找結(jié)果為全0。
流表項的存儲與查找采用四桶哈希查找電路。哈希查找電路的工作原理是利用哈希函數(shù)建立關(guān)鍵字到哈希表地址空間的映射,將關(guān)鍵字進(jìn)行哈希散列運算得到哈希值(Hash),并將哈希值作為存儲地址來存儲表項。這種映射是一種壓縮映射,不同的關(guān)鍵字可能會產(chǎn)生相同的Hash,從而導(dǎo)致沖突。為了盡可能減少哈希沖突,可以采用哈希多桶技術(shù),這里采用四桶哈希表結(jié)構(gòu)[5]。
四桶哈希技術(shù)通過增大哈希表的位寬,使得一個Hash 對應(yīng)的存儲空間中可以同時存儲4 個關(guān)鍵字及其對應(yīng)的結(jié)果信息,從而減少哈希沖突。本設(shè)計中的哈希查找電路的關(guān)鍵字是目的IP 地址、源IP 地址、源端口、目的端口、服務(wù)類型等從幀頭中提取的關(guān)鍵信息。本設(shè)計中,關(guān)鍵字可以根據(jù)業(yè)務(wù)需要靈活配置,只要關(guān)鍵字位數(shù)小于或等于128 位即可。輸出結(jié)果是流號(flow_id)、輸出端口映射位圖、源MAC、目的MAC 等。同樣的,輸出結(jié)果在寫入時也可以根據(jù)業(yè)務(wù)需要靈活配置,只需要輸出結(jié)果位數(shù)小于或等于144 位即可。
哈希查找電路實現(xiàn)的功能有表項添加操作、表項刪除操作和表項查找操作。表項添加操作是在Hash 對應(yīng)的存儲中寫入流表項。哈希查找電路添加表項時,利用哈希函數(shù)計算關(guān)鍵字key 得到Hash,以Hash 為地址將關(guān)鍵字key 及其對應(yīng)的result 寫入,完成表項添加操作。哈希查找電路查找表項時,根據(jù)關(guān)鍵字key 值計算出Hash 值,通過Hash 值讀取4 個哈希桶中對應(yīng)的表項。表項匹配成功,得到相應(yīng)的查找結(jié)果result。哈希查找電路進(jìn)行刪除操作時,根據(jù)關(guān)鍵字key 得到Hash 讀取4 個哈希桶中對應(yīng)的表項,將該表項全部清零,完成表項刪除操作。
整個轉(zhuǎn)發(fā)電路中,優(yōu)先級劃分的標(biāo)準(zhǔn)是一個關(guān)鍵問題。當(dāng)優(yōu)先級劃分的標(biāo)準(zhǔn)確定后,才能明確各個表項的優(yōu)先級。優(yōu)先級的劃分應(yīng)該滿足以下條件:(1)添加表項時應(yīng)該帶入優(yōu)先級;(2)表項查找時,可能會產(chǎn)生多個結(jié)果,這時需要通過優(yōu)先級確定輸出結(jié)果;(3)查找時先查找優(yōu)先級較高的表項,再查找優(yōu)先級較低的表項;(4)要能夠根據(jù)業(yè)務(wù)需求靈活設(shè)置表項的優(yōu)先級。
綜上,本文設(shè)計采用匹配中關(guān)鍵信息的多少來劃分優(yōu)先級,即能匹配中的關(guān)鍵信息越多優(yōu)先級越高,匹配中的關(guān)鍵信息越少優(yōu)先級越低。當(dāng)添加表項時,關(guān)鍵字key 值的高8 位作為優(yōu)先級的數(shù)值。
如圖6 所示為包含優(yōu)先級的數(shù)據(jù)幀結(jié)構(gòu)。添加流表項時,關(guān)鍵字key 值高8 位為優(yōu)先級數(shù)值,優(yōu)先級越高數(shù)值越大。key 值中除需要匹配的數(shù)據(jù)位外,其余數(shù)據(jù)位均為0。表項查找時,從數(shù)據(jù)幀中提取關(guān)鍵信息后,組建查找關(guān)鍵字se_key。se_key值高8 位為優(yōu)先級數(shù)值,se_key 值中除需要匹配查找的數(shù)據(jù)位外,其余數(shù)據(jù)位均為0。
圖6 包含優(yōu)先級的數(shù)據(jù)幀結(jié)構(gòu)
如圖7 所示為查找流程。當(dāng)數(shù)據(jù)幀進(jìn)入查找電路后,經(jīng)過幀提取,得到不同優(yōu)先級的查找關(guān)鍵字se_key_1,se_key_2,…,se_key_n。首先查找優(yōu)先級最高的關(guān)鍵字se_key_n。如果能夠查找到,則直接輸出結(jié)果;如果不能查找到,則查找優(yōu)先級低一級的關(guān)鍵字se_key_n-1。對于關(guān)鍵字se_key_n-1,如果能查找到,則輸出查找結(jié)果;如果不能查找到,則依次類推,繼續(xù)查找優(yōu)先級低一級的關(guān)鍵字。如果最低優(yōu)先級的查找關(guān)鍵字se_key_1 也不能被查找到,那么輸出查找結(jié)果全0。
圖7 查找流程
本文以Xilinx ZYNQ-7100 開發(fā)板為硬件平臺搭建SDN 交換機電路。其轉(zhuǎn)發(fā)表(流表)算法電路仿真如圖8 至圖12 所示。圖8 和圖9 為表項添加仿真結(jié)果。
圖8 表項添加仿真結(jié)果
圖9 表項查找仿真結(jié)果1
圖8 中共添加4 個流表項,在圖中分別以數(shù)字1 到4 標(biāo)出,標(biāo)1 處至標(biāo)4 處的優(yōu)先級依次增大。由cpu_add_ack 信號值為1’b1 可知,4 個表項添加成功。通過add_key 信號可以看到,這4 個表項匹配分別為:表項1 僅匹配目的IP 地址32’hc0_a8_01_01,表項2 僅匹配源IP 地址32’hc0_a8_01_02,表項3匹配目的IP地址32’hc0_a8_01_01和源IP 地址32’hc0_a8_01_01,表項4 匹配目的IP 地址32’hc0_a8_01_01、源IP 地址32’hc0_a8_01_02、協(xié)議類型8’h11、源端口16’h99_98 和目的端口16’h99_99。
圖9 給出了表項查找仿真結(jié)果。由于數(shù)據(jù)幀提取后匹配表項的優(yōu)先級由高到低,所以圖9 中se_key 有2 個值,即它匹配中了表項3。表項3 對應(yīng)的動作action 為從端口3 和端口2 轉(zhuǎn)發(fā)數(shù)據(jù)。從圖10 可以看到,數(shù)據(jù)已經(jīng)從端口3 和端口2 轉(zhuǎn)發(fā)出去,表項查找成功。
圖11 為表項刪除仿真結(jié)果。clear_key 是表項3對應(yīng)的關(guān)鍵字,刪除的是表項3。由于表項3 刪除,且表項查找時總是由優(yōu)先級高的表項到優(yōu)先級低的表項。因此再次查找時,查找結(jié)果應(yīng)為表項2。表項2 對應(yīng)的動作action 為從端口3、端口2 和端口1 轉(zhuǎn)發(fā)。從圖12 可以看到,數(shù)據(jù)已經(jīng)從端口3、端口2 和端口1 轉(zhuǎn)發(fā)出去,表項3 刪除成功。根據(jù)表1 所示的資源利用率統(tǒng)計表,查找表(Lookup Table,LUT)資 源 利 用 率 為15.01%,觸 發(fā) 器(Flip-Flop,F(xiàn)F)資源利用率為10.33%,塊狀存儲器(Block Ram,BRAM)資源利用率為39.21%。整體資源消耗率較低。每秒最高支持6×107次查找。
表1 資源利用率統(tǒng)計表
圖11 表項刪除仿真結(jié)果1
圖12 表項刪除仿真結(jié)果2
本文給出了一種針對無人機集群的SDN 交換機的系統(tǒng)設(shè)計方案,由數(shù)據(jù)收發(fā)單元、交換單元、轉(zhuǎn)發(fā)表(流表)、分組處理單元、輸出隊列管理器、DTN 消息處理引擎和TCP 引擎組成。為滿足多樣化的業(yè)務(wù)需求,設(shè)計的流表可靈活配置轉(zhuǎn)發(fā)優(yōu)先級,靈活設(shè)置表項關(guān)鍵字及其對應(yīng)的匹配結(jié)果,搜索鍵值最高支持128 bit。針對SDN 交換機關(guān)鍵電路在Xilinx ZYNQ-7100 平臺開發(fā)板上進(jìn)行了設(shè)計與仿真分析,結(jié)果表明,轉(zhuǎn)發(fā)表(流表)電路可以滿足多樣化業(yè)務(wù)需求,并能為不同業(yè)務(wù)流提供所需的QoS 保證。