任 智,周佳琦
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
近年來,無人機(jī)(Unmanned Aerial Vehicle,UAV) 自組網(wǎng)成為無人機(jī)網(wǎng)絡(luò)領(lǐng)域的研究熱點(diǎn)。無人機(jī)自組網(wǎng)通常采用分布式架構(gòu),這種架構(gòu)為網(wǎng)絡(luò)帶來了一定的安全性,提高了網(wǎng)絡(luò)的工作效率。然而,不斷增長的網(wǎng)絡(luò)流量要求采用集中控制架構(gòu),這種集中控制方式可以帶來許多的好處。軟件定義網(wǎng)絡(luò)(Software-defined Netowrk,SDN)作為近年的研究熱點(diǎn),可以很好地管理和部署無人機(jī)節(jié)點(diǎn)以應(yīng)對上述挑戰(zhàn)[1]。然而SDN的集中控制方式、OpenFlow的異步性[2]以及無人機(jī)節(jié)點(diǎn)的快速移動等特性,對SDN的一致性更新提出了更高的要求。
針對SDN一致性更新的問題,Reitblatt等人[3]首次分析了在SDN中進(jìn)行網(wǎng)絡(luò)更新的問題,提出了一種兩階段更新方法,并指出在流更新期間,數(shù)據(jù)包只能按照初始規(guī)則或最終規(guī)則轉(zhuǎn)發(fā),不能同時按照混合規(guī)則轉(zhuǎn)發(fā);文獻(xiàn)[4]通過時間同步,將數(shù)據(jù)包中的時間戳作為標(biāo)簽,相比于兩階段方法減少了OpenFlow交換機(jī)中三態(tài)內(nèi)容尋址存儲器(Ternary Content Addressable Memory,TCAM)存儲空間的占用[5];文獻(xiàn)[6]提出了一種添加和替換規(guī)則的混合規(guī)則方法FLIP以保留任意的策略和一致性,實(shí)驗(yàn)結(jié)果表明FLIP相比于兩階段方法減少了90%的額外規(guī)則。針對軟件定義航空集群機(jī)載網(wǎng)絡(luò)鏈路擁塞問題,文獻(xiàn)[7]基于FLIP提出了擁塞避免算法,提高了更新成功率。對于無人機(jī)節(jié)點(diǎn)移動速度快導(dǎo)致網(wǎng)絡(luò)拓?fù)渥兓?更新輪次問題同樣需要關(guān)注,更少的更新輪次可以提高網(wǎng)絡(luò)控制的靈活性,還可以對故障或更改工作負(fù)載做出更快反應(yīng)[8]。文獻(xiàn)[9]分析了強(qiáng)無環(huán)路(Strong Loop-Freedom,SLF)更新方法存在的問題,并提出了弱無環(huán)路(Relax Loop-Freedom,RLF)更新方法,同時提出了Peacock算法,證明該算法最壞情況下以對數(shù)級輪次完成更新。文獻(xiàn)[10]在Peacock算法的基礎(chǔ)上提出了MRCU算法,改變奇數(shù)輪的更新節(jié)點(diǎn)選取操作,減少了更新輪次。以上研究雖然減少了更新輪次,但是忽略了轉(zhuǎn)發(fā)黑洞的問題。文獻(xiàn)[11]對SDN網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)黑洞進(jìn)行分析,研究發(fā)現(xiàn)Flow-mod消息的異步性可能導(dǎo)致三類轉(zhuǎn)發(fā)黑洞。
通過以上研究發(fā)現(xiàn),兩階段更新方法需要占用TCAM內(nèi)存,因此不適合流數(shù)量較多的無人機(jī)場景。將數(shù)據(jù)包時間戳作為標(biāo)簽的方法,雖然減少了TCAM內(nèi)存占用,但是對時間同步要求較高。FLIP方法雖然顯著減少了TCAM存儲空間的占用,但是更新輪次較多。Peacock算法相比于SLF減少了更新輪次,但是沒有對轉(zhuǎn)發(fā)黑洞問題進(jìn)行分析和處理。MRCU算法的平均更新輪次相比于Peacock算法減少了10%到20%,但是在只存在兩規(guī)則節(jié)點(diǎn)場景下,更新需要至少在3輪完成。因此,目前的SDN網(wǎng)絡(luò)更新方法在速度和一致性上對于無人機(jī)自組網(wǎng)場景的適用性還不足。
軟件定義無人機(jī)自組網(wǎng)(Software-defined Unmanned Aerial Vehicle Ad Hoc Network,SDUANET)流更新如圖1所示,UAV節(jié)點(diǎn)與控制器之間通過OpenFlow協(xié)議通信,在控制器中的全網(wǎng)拓?fù)湫畔⒏虑?源節(jié)點(diǎn)UAV1以舊規(guī)則將數(shù)據(jù)包發(fā)送到目的節(jié)點(diǎn)UAV6。在數(shù)據(jù)平面,UAV節(jié)點(diǎn)周期性發(fā)送鄰居收集消息收集鄰居信息,然后通過OpenFlow消息將每個UAV節(jié)點(diǎn)的鄰居信息上傳到SDN控制器;SDN控制器計(jì)算得到新的全網(wǎng)拓?fù)?并向每個UAV節(jié)點(diǎn)分別下發(fā)添加新規(guī)則和刪除舊規(guī)則的指令。UAV節(jié)點(diǎn)在收到指令后完成操作并向控制器發(fā)送回復(fù)消息,控制器等待接收到所有的回復(fù)消息后完成更新。
圖1 SDUANET流更新示意
1)轉(zhuǎn)發(fā)黑洞:由于UAV節(jié)點(diǎn)接收到Flow-mod消息的順序不確定導(dǎo)致轉(zhuǎn)發(fā)黑洞,以圖1為例,如果在UAV1到UAV7的舊規(guī)則上有數(shù)據(jù)包正在轉(zhuǎn)發(fā),此時UAV2和UAV5接收到Flow-mod(remove)并刪除舊規(guī)則,這種情況可能會導(dǎo)致正在轉(zhuǎn)發(fā)的數(shù)據(jù)包沒有對應(yīng)表項(xiàng)進(jìn)行匹配,雖然流表中存在Table-miss的表項(xiàng)用于處理未匹配數(shù)據(jù)包,但是Table-miss處理方式為向控制器發(fā)送請求消息或直接丟棄數(shù)據(jù)包[12],向控制器發(fā)送請求消息增大了網(wǎng)絡(luò)控制開銷和控制器的負(fù)載,直接丟棄數(shù)據(jù)包降低了更新期間數(shù)據(jù)包的傳輸成功率,因此需要找到一種約束Flow-mod發(fā)送順序的方法才能從根源上減少轉(zhuǎn)發(fā)黑洞所帶來的影響。
2)轉(zhuǎn)發(fā)環(huán)路:以圖1為例,UAV7節(jié)點(diǎn)表項(xiàng)已經(jīng)添加了新規(guī)則并刪除了舊規(guī)則,而UAV4節(jié)點(diǎn)未更新到新規(guī)則,還以舊規(guī)則轉(zhuǎn)發(fā),那么在UAV4和UAV7之間形成了一個暫時的環(huán)路,該環(huán)路導(dǎo)致了數(shù)據(jù)包端到端時延上升,甚至?xí)竭_(dá)生存時間(Time To Live,TTL),從而造成傳輸成功率降低和控制開銷增大。
如圖2所示,虛線表示新規(guī)則,實(shí)線表示舊規(guī)則,源節(jié)點(diǎn)為S,目的節(jié)點(diǎn)為D,括號中的數(shù)字代表的節(jié)點(diǎn)編號,左邊代表舊規(guī)則編號,右邊代表新規(guī)則編號。
圖2 流拓?fù)涫疽?/p>
正向與反向節(jié)點(diǎn):正向節(jié)點(diǎn)的新規(guī)則所指向的下一跳節(jié)點(diǎn)為舊規(guī)則中正向節(jié)點(diǎn)的后序節(jié)點(diǎn)。例如,S、A和G節(jié)點(diǎn)為正向節(jié)點(diǎn);與之相反的為反向節(jié)點(diǎn),如B和F節(jié)點(diǎn)。
節(jié)點(diǎn)編號:S到D轉(zhuǎn)發(fā),按照遍歷節(jié)點(diǎn)的順序?yàn)楣?jié)點(diǎn)編號。例如,節(jié)點(diǎn)A對于舊規(guī)則編號為2,對于新規(guī)則編號為5。
出度:節(jié)點(diǎn)的出邊條數(shù)。例如,節(jié)點(diǎn)A的舊規(guī)則出邊為1條,因此舊規(guī)則出度為1。
針對SDUANET場景對網(wǎng)絡(luò)更新速度要求高,同時需要保證更新一致性的問題,本文提出了一種SDUANET快速一致性更新方法。該方法分為基于節(jié)點(diǎn)分類降低轉(zhuǎn)發(fā)黑洞概率策略和基于混合規(guī)則的兩輪更新策略:基于節(jié)點(diǎn)分類降低轉(zhuǎn)發(fā)黑洞概率策略對節(jié)點(diǎn)進(jìn)行分類操作,對可能會導(dǎo)致轉(zhuǎn)發(fā)黑洞的發(fā)送操作進(jìn)行約束;基于混合規(guī)則的兩輪更新策略用于計(jì)算存在新舊規(guī)則節(jié)點(diǎn)的Flow-mod下發(fā)順序,同時提出的兩輪次下發(fā)方法在保證避免轉(zhuǎn)發(fā)環(huán)路的同時減少了更新輪次。
本文提出了基于節(jié)點(diǎn)分類降低轉(zhuǎn)發(fā)黑洞概率策略,該策略根據(jù)節(jié)點(diǎn)出度對節(jié)點(diǎn)進(jìn)行分類,將不同類型的單規(guī)則節(jié)點(diǎn)發(fā)送操作分別放入不同的操作集合中,并對部分節(jié)點(diǎn)添加發(fā)送約束。由于單規(guī)則節(jié)點(diǎn)的任意更新順序不會導(dǎo)致轉(zhuǎn)發(fā)環(huán)路,因此解決轉(zhuǎn)發(fā)環(huán)路的處理放在3.2節(jié)。
3.1.1 節(jié)點(diǎn)類型
如圖1所示,SDN中存在三種轉(zhuǎn)發(fā)黑洞情況[11]:
1)ADD:只存在新規(guī)則的節(jié)點(diǎn),例如UAV3節(jié)點(diǎn),這類節(jié)點(diǎn)在接收到數(shù)據(jù)包時還未收到Flow-mod(add)消息導(dǎo)致暫時轉(zhuǎn)發(fā)黑洞。
2)REMOVE:只存在舊規(guī)則的節(jié)點(diǎn),例如UAV2和UAV5節(jié)點(diǎn),這類節(jié)點(diǎn)提前接收到Flow-mod(remove)消息并刪除了流表項(xiàng)導(dǎo)致了永久轉(zhuǎn)發(fā)黑洞。
3)ALL:存在新舊兩種規(guī)則的節(jié)點(diǎn),例如UAV1、UAV4和UAV7節(jié)點(diǎn),這類節(jié)點(diǎn)在接收到Flow-mod(add)之前接收到了Flow-mod(remove)導(dǎo)致暫時轉(zhuǎn)發(fā)黑洞。
分類方法:根據(jù)每個節(jié)點(diǎn)的新規(guī)則和舊規(guī)則的出度進(jìn)行判斷,如果新規(guī)則出度為1,舊規(guī)則的出度為0,節(jié)點(diǎn)為ADD節(jié)點(diǎn);如果新規(guī)則出度為0,舊規(guī)則的出度為1,節(jié)點(diǎn)為REMOVE節(jié)點(diǎn);如果新規(guī)則和舊規(guī)則的出度都為1,當(dāng)前節(jié)點(diǎn)為ALL節(jié)點(diǎn)。
3.1.2 分類操作
降低轉(zhuǎn)發(fā)黑洞概率節(jié)點(diǎn)分類操作流程如圖3所示,具體步驟如下:
Step1 若所有參與更新的節(jié)點(diǎn)都已被處理則輸出OP1、OP2和OP4操作集合,若還有剩余節(jié)點(diǎn)未被處理則執(zhí)行Step 2。
Step2 根據(jù)節(jié)點(diǎn)的出度判斷其類型,如果為ADD節(jié)點(diǎn)則執(zhí)行Step 3,如果為REMOVE節(jié)點(diǎn)則執(zhí)行Step 4,如果為ALL節(jié)點(diǎn)則執(zhí)行Step 5。
Step3 比較當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號與新規(guī)則下一跳ALL節(jié)點(diǎn)的舊規(guī)則編號的大小關(guān)系,如果新規(guī)則下一跳ALL節(jié)點(diǎn)的舊規(guī)則編號大于當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號,當(dāng)前節(jié)點(diǎn)為正向的ADD節(jié)點(diǎn),執(zhí)行Step 6,否則執(zhí)行Step 7。
Step4 將REMOVE節(jié)點(diǎn)的更新操作以舊規(guī)則編號從小到大放入OP4中,并為每個節(jié)點(diǎn)加上約束關(guān)系:在收到了該節(jié)點(diǎn)在舊規(guī)則的上一個ALL節(jié)點(diǎn)發(fā)來的回復(fù)消息時,SDN控制器才為該節(jié)點(diǎn)發(fā)送Flow-mod(remove)。
Step5 將節(jié)點(diǎn)放在ALL節(jié)點(diǎn)集合中,然后執(zhí)行Step 1。
Step6 將正向ADD節(jié)點(diǎn)操作放入到OP1,然后執(zhí)行Step 1。
Step7 將反向ADD節(jié)點(diǎn)操作放入到OP2中,然后執(zhí)行Step 1。
圖3 降低轉(zhuǎn)發(fā)黑洞概率節(jié)點(diǎn)分類操作流程
本文提出了基于混合規(guī)則的兩輪更新策略,由于只有ALL節(jié)點(diǎn)在不合理下發(fā)順序情況下才會導(dǎo)致轉(zhuǎn)發(fā)環(huán)路,因此本小節(jié)對ALL節(jié)點(diǎn)導(dǎo)致的轉(zhuǎn)發(fā)環(huán)路問題進(jìn)行處理。該策略包含ALL節(jié)點(diǎn)無環(huán)路發(fā)送順序和兩輪下發(fā)兩部分內(nèi)容:第一輪,更新所有正向節(jié)點(diǎn),同時下發(fā)關(guān)鍵節(jié)點(diǎn)的標(biāo)簽操作和匹配操作規(guī)則,標(biāo)簽和匹配規(guī)則設(shè)置生存時間為更新輪次的最大時間;第二輪,更新所有反向節(jié)點(diǎn),標(biāo)簽和匹配規(guī)則在生存時間到達(dá)后刪除,然后UAV節(jié)點(diǎn)切換到新的轉(zhuǎn)發(fā)規(guī)則。
3.2.1 ALL節(jié)點(diǎn)無環(huán)路發(fā)送順序
環(huán)路隔離節(jié)點(diǎn):使數(shù)據(jù)包不會轉(zhuǎn)發(fā)到暫時形成的環(huán)路區(qū)域,其包括了MATCH節(jié)點(diǎn)和TAG節(jié)點(diǎn),這兩類節(jié)點(diǎn)需要以環(huán)路區(qū)域?yàn)橐唤M成對的發(fā)送:對MATCH節(jié)點(diǎn)下發(fā)匹配操作,其操作為匹配帶有TAG節(jié)點(diǎn)所標(biāo)記的數(shù)據(jù)包,將該數(shù)據(jù)包以舊規(guī)則轉(zhuǎn)發(fā);對TAG節(jié)點(diǎn)下發(fā)標(biāo)簽操作,對所有來自于MATCH節(jié)點(diǎn)的數(shù)據(jù)包打上標(biāo)簽。
ALL節(jié)點(diǎn)Flow-mod發(fā)送順序的計(jì)算過程如圖4所示,具體步驟如下:
Step1 對所有ALL節(jié)點(diǎn)的類型進(jìn)行判斷,并將其加入到更新操作,如果所有節(jié)點(diǎn)已完成處理則執(zhí)行Step 6,否則執(zhí)行Step 2。
Step2 比較當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號與新規(guī)則下一跳節(jié)點(diǎn)的舊規(guī)則編號的大小關(guān)系,如果新規(guī)則下一跳節(jié)點(diǎn)的舊規(guī)則編號大于當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號,當(dāng)前節(jié)點(diǎn)為正向的ALL類節(jié)點(diǎn),執(zhí)行Step 3,否則執(zhí)行Step 4。
Step3 將所有正向ALL類節(jié)點(diǎn)以從小到大的節(jié)點(diǎn)編號加入到OP3中,并為每個節(jié)點(diǎn)加上約束關(guān)系:在收到了該節(jié)點(diǎn)在新規(guī)則情況下到下一個ALL節(jié)點(diǎn)之間的路徑上的所有ADD節(jié)點(diǎn)的回復(fù)消息之后,控制器才向該節(jié)點(diǎn)發(fā)送Flow-mod(add)和Flow-mod(remove),然后執(zhí)行Step 1。
Step4 如果當(dāng)前節(jié)點(diǎn)按照新規(guī)則的上一跳節(jié)點(diǎn)的舊規(guī)則編號小于當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號,同時按照新規(guī)則的下一跳節(jié)點(diǎn)的舊規(guī)則編號小于當(dāng)前節(jié)點(diǎn)的舊規(guī)則編號,則選取該節(jié)點(diǎn)為MATCH節(jié)點(diǎn),MATCH節(jié)點(diǎn)按照舊規(guī)則的上一跳節(jié)點(diǎn)選取為TAG節(jié)點(diǎn),將MATCH和TAG操作加入到OP3中,然后執(zhí)行Step 1,否則執(zhí)行Step 5。
Step5 剩余反向ALL類節(jié)點(diǎn)添加到OP5,然后執(zhí)行Step 6。
Step6 輸出OP3和OP5操作集合。
圖4 ALL節(jié)點(diǎn)無環(huán)路發(fā)送順序計(jì)算流程
3.2.2 兩輪下發(fā)
兩輪下發(fā)過程如圖5所示,具體步驟如下:
Step1 控制節(jié)點(diǎn)按照OP1,OP2,OP3,OP4的順序向UAV節(jié)點(diǎn)發(fā)送Flow-mod消息,然后執(zhí)行Step 2。
Step2 控制節(jié)點(diǎn)等待接收所有更新回復(fù)消息,若全部收到則執(zhí)行Step 3,若沒有繼續(xù)執(zhí)行Step 2。
Step3 按照OP5向UAV節(jié)點(diǎn)發(fā)送Flow-mod消息,此時即使匹配和標(biāo)簽節(jié)點(diǎn)收到了新規(guī)則仍然按照MATCH和TAG規(guī)則處理數(shù)據(jù)包,然后執(zhí)行Step 4。
Step4 MATCH和TAG節(jié)點(diǎn)判斷匹配和標(biāo)簽規(guī)則是否到達(dá)生存時間,若到達(dá)則執(zhí)行Step 5,若沒有則繼續(xù)執(zhí)行Step 4。
Step5 刪除匹配和標(biāo)簽操作,MATCH和TAG節(jié)點(diǎn)以新規(guī)則處理數(shù)據(jù)包。
圖5 兩輪下發(fā)流程圖
文獻(xiàn)[13]對比了SDN戰(zhàn)術(shù)網(wǎng)絡(luò)場景下OPNET和Mininet的仿真性能,對比結(jié)果表明OPNET更適合對真實(shí)環(huán)境進(jìn)行仿真或進(jìn)行穩(wěn)定性和可靠性測試,因此本文采用OPNET14.5仿真軟件對SDUANET-FCU性能進(jìn)行驗(yàn)證。
主要仿真參數(shù)如表1所示。仿真場景由一個SDN控制器和多個UAV節(jié)點(diǎn)組成,在源UAV節(jié)點(diǎn)和目的UAV節(jié)點(diǎn)之間的UAV節(jié)點(diǎn)呈現(xiàn)為鏈狀的拓?fù)浣Y(jié)構(gòu),路徑上的UAV節(jié)點(diǎn)按照規(guī)定的速度在源UAV節(jié)點(diǎn)和目的UAV節(jié)點(diǎn)之間隨機(jī)移動。
表1 主要仿真參數(shù)
4.2.1 平均更新輪次
更新輪次定義為在保證數(shù)據(jù)包無轉(zhuǎn)發(fā)環(huán)路的情況下更新所有節(jié)點(diǎn)所需要的輪次。平均更新輪次的計(jì)算公式為
(1)
式中:n為總的更新流數(shù)量;ri為每個流的更新輪次。
4.2.2 轉(zhuǎn)發(fā)黑洞概率
轉(zhuǎn)發(fā)黑洞概率為數(shù)據(jù)包轉(zhuǎn)發(fā)時缺少流表項(xiàng)的次數(shù)占數(shù)據(jù)包轉(zhuǎn)發(fā)次數(shù)的比例,計(jì)算方法為
(2)
4.2.3 控制消息數(shù)量
由于流表項(xiàng)下發(fā)需要控制器向UAV節(jié)點(diǎn)下發(fā)Flow-mod,匹配Table-miss或TTL到達(dá)需要UAV節(jié)點(diǎn)向控制器節(jié)點(diǎn)Packet-in,以及控制器需要向UAV節(jié)點(diǎn)下發(fā)Packet-out指示如何對存在流表項(xiàng)缺失的數(shù)據(jù)包進(jìn)行處理,因此本文統(tǒng)計(jì)的控制消息數(shù)量為網(wǎng)絡(luò)更新過程所產(chǎn)生的Flow-mod、Packet-in和Packet-out消息的總數(shù)量。
4.3.1 平均更新時間
表2為平均更新時間。更新時間與路徑節(jié)點(diǎn)數(shù)呈現(xiàn)一定的關(guān)系,隨著路徑節(jié)點(diǎn)數(shù)量的增加,平均更新輪次增加,因此平均更新時間上升。Peacock的更新輪次多于MRCU,因此在平均更新時間上Peacock高于MRCU。SDUANET-FCU在兩輪可以完成更新,因此平均更新低于前兩者。
表2 三種算法在不同路徑節(jié)點(diǎn)數(shù)下的平均更新時間
4.3.2 平均更新輪次
圖6為平均更新輪次。隨著路徑節(jié)點(diǎn)數(shù)量的增多,平均更新輪次也越來越大。這是因?yàn)槁窂焦?jié)點(diǎn)數(shù)的增多導(dǎo)致了拓?fù)涓鼮閺?fù)雜,在保證一致性情況下,需要進(jìn)行多輪的更新。其中,MRCU相較于Peacock平均更新輪次更少,是因?yàn)镻eacock在奇數(shù)輪更新時選取最大不相交節(jié)點(diǎn)更新,而MRCU選擇的是不相交最大和的節(jié)點(diǎn)進(jìn)行更新,因此在奇數(shù)輪MRCU可以更新更多的節(jié)點(diǎn);SDUANET-FCU平均更新輪次一直保持在兩輪,是因?yàn)镾DUANET-FCU基于混合規(guī)則,這種混合規(guī)則使得第一輪可以更新所有前向節(jié)點(diǎn),在第二輪更新所有反向節(jié)點(diǎn)和環(huán)路隔離節(jié)點(diǎn),在保證了一致性更新的同時只需要兩輪。
圖6 平均更新輪次
4.3.3 轉(zhuǎn)發(fā)黑洞概率
圖7為轉(zhuǎn)發(fā)黑洞概率。隨著無人機(jī)移動速度的加快,轉(zhuǎn)發(fā)黑洞的概率也增加。這是因?yàn)榫W(wǎng)絡(luò)拓?fù)渥兓?導(dǎo)致部分UAV節(jié)點(diǎn)的轉(zhuǎn)發(fā)規(guī)則與實(shí)際的網(wǎng)絡(luò)拓?fù)洳环?即UAV節(jié)點(diǎn)內(nèi)的轉(zhuǎn)發(fā)規(guī)則已經(jīng)過期。隨著無人機(jī)移動速度加快,MRCU和Peacock之間的轉(zhuǎn)發(fā)黑洞概率差距也越來越大。這是因?yàn)镸RCU的平均更新輪次更快,MRCU具有更好的更新實(shí)時性。SDUANET-FCU轉(zhuǎn)發(fā)黑洞概率低于MRCU和Peacock,這是因?yàn)镾DUANET-FCU在發(fā)送前對不同種類的Flow-mod進(jìn)行了排序和約束等操作,從而降低了轉(zhuǎn)發(fā)黑洞概率。
圖7 轉(zhuǎn)發(fā)黑洞概率
4.3.4 控制消息數(shù)量
圖8為控制消息的數(shù)量。在路徑節(jié)點(diǎn)數(shù)較少時,MRCU和Peacock控制消息數(shù)量上相差不大,隨著節(jié)點(diǎn)數(shù)的增多,MRCU和Peacock在控制消息的數(shù)量上逐漸拉開差距。這是因?yàn)镸RCU更新輪次更少,由于無人機(jī)的移動,輪次更少的更新方法整體上降低了轉(zhuǎn)發(fā)黑洞的次數(shù),因此降低了因匹配Table-miss表項(xiàng)而發(fā)送的Packet-in、Packet-out和Flow-mod的數(shù)量。SDUANET-FCU需要發(fā)送標(biāo)簽和匹配規(guī)則以保證更新一致性,雖然增加了額外的控制消息數(shù)量,但是相較于前兩個方法,整體的控制消息數(shù)量更少,主要有如下的兩個原因:一是無人機(jī)的快速移動和更少的更新輪次,可以減輕拓?fù)渥兓鶎?dǎo)致的更新一致性問題;二是SDUANET-FCU主動對轉(zhuǎn)發(fā)黑洞問題進(jìn)行處理,減少了數(shù)據(jù)包匹配Table-miss表項(xiàng)的次數(shù),從而減少了流表項(xiàng)缺失處理過程所帶來的控制消息的數(shù)量。
圖8 控制消息數(shù)量
本文針對軟件定義無人機(jī)自組網(wǎng)中的轉(zhuǎn)發(fā)黑洞和更新輪次的問題,提出了SDUANET-FCU機(jī)制。新機(jī)制對更新節(jié)點(diǎn)根據(jù)節(jié)點(diǎn)出度進(jìn)行分類操作:對部分單個規(guī)則的更新節(jié)點(diǎn)添加發(fā)送約束,降低轉(zhuǎn)發(fā)黑洞概率;針對兩規(guī)則節(jié)點(diǎn),采用基于混合規(guī)則的兩輪更新策略,在保證無轉(zhuǎn)發(fā)環(huán)路情況下減少平均更新輪次。仿真結(jié)果表明,在軟件定義無人機(jī)自組網(wǎng)場景下,SDUANET-FCU機(jī)制在平均更新輪次、轉(zhuǎn)發(fā)黑洞率和控制消息數(shù)量等方面優(yōu)于MRCU和Peacock。未來的工作將對軟件定義無人機(jī)自組網(wǎng)場景下的一致性更新進(jìn)行更深入的研究。