許 剛 王 展 臧大偉 安學(xué)軍
1(中國(guó)科學(xué)院計(jì)算技術(shù)研究所高性能計(jì)算機(jī)研究中心 北京 100190) 2 (中國(guó)科學(xué)院大學(xué) 北京 100049) (xugang10@ict.ac.cn)
Fig. 1 Traditional data-center topology圖1 傳統(tǒng)數(shù)據(jù)中心拓?fù)浣Y(jié)構(gòu)
隨著云計(jì)算和大數(shù)據(jù)的發(fā)展,數(shù)據(jù)中心(Internet data center, IDC)建設(shè)迎來(lái)高潮.當(dāng)前數(shù)據(jù)中心應(yīng)用如在線零售、搜索、社交網(wǎng)絡(luò)、云盤、廣告推薦系統(tǒng)等通常需要高帶寬的穩(wěn)定網(wǎng)絡(luò),然而在網(wǎng)絡(luò)故障或路由抖動(dòng)時(shí),這些應(yīng)用系統(tǒng)經(jīng)常會(huì)在用戶訪問(wèn)和業(yè)務(wù)服務(wù)器之間產(chǎn)生路由頻繁抖動(dòng)的情況,路由抖動(dòng)會(huì)導(dǎo)致用戶訪問(wèn)和企業(yè)收入明顯減少.
數(shù)據(jù)中心網(wǎng)絡(luò)會(huì)頻繁發(fā)生網(wǎng)絡(luò)抖動(dòng),導(dǎo)致丟包增多、時(shí)延增大和吞吐量下降,已成為數(shù)據(jù)中心的性能瓶頸,嚴(yán)重影響業(yè)務(wù)的性能和服務(wù)質(zhì)量.當(dāng)網(wǎng)絡(luò)發(fā)生故障時(shí),故障定位對(duì)網(wǎng)工來(lái)說(shuō)是一個(gè)非常棘手的問(wèn)題,現(xiàn)有的解決方案主要包括2種:1)通過(guò)搜集網(wǎng)絡(luò)設(shè)備上系統(tǒng)日志使用3-sigma、分段3-sigma、Holt-winters和 ARIMA等機(jī)器學(xué)習(xí)方法進(jìn)行異常檢測(cè)[1];2)經(jīng)驗(yàn)豐富的網(wǎng)工根據(jù)自身經(jīng)驗(yàn)結(jié)合故障特征手動(dòng)解決.然而無(wú)論是通過(guò)算法還是經(jīng)驗(yàn)進(jìn)行故障發(fā)現(xiàn)和設(shè)備定位普遍都是預(yù)測(cè)性的,仍然會(huì)出現(xiàn)誤判和誤報(bào)的問(wèn)題,且實(shí)時(shí)性不高.
針對(duì)這一問(wèn)題,我們提出基于鏈路狀態(tài)數(shù)據(jù)庫(kù)(link state database, LSDB)的數(shù)據(jù)中心網(wǎng)絡(luò)異常檢測(cè)方法LSAP,通過(guò)搜集LSDB,利用改進(jìn)Dijkstra算法重計(jì)算全網(wǎng)路由形成路由擇域信息庫(kù)(routing information base, RIB),根據(jù)LSDB快照和RIB快照比對(duì)關(guān)聯(lián)鏈路變化和路由變化進(jìn)行異常定位,發(fā)現(xiàn)網(wǎng)絡(luò)問(wèn)題.
傳統(tǒng)數(shù)據(jù)中心網(wǎng)絡(luò)是由核心層、匯聚層和接入層3層網(wǎng)絡(luò)設(shè)備組成[2].如圖1所示,網(wǎng)絡(luò)呈現(xiàn)出由底層網(wǎng)絡(luò)的物理服務(wù)器到上層網(wǎng)絡(luò)的核心路由器所組成的3層網(wǎng)絡(luò)層次結(jié)構(gòu),其中核心層設(shè)備接入上層網(wǎng)絡(luò),核心層設(shè)備與匯聚層設(shè)備相連,匯聚層設(shè)備與接入層設(shè)備相連,接入層設(shè)備與底層物理服務(wù)器相連.核心層位于全局網(wǎng)絡(luò)的頂端,核心層的路由連接在整個(gè)數(shù)據(jù)中心網(wǎng)絡(luò)中起到關(guān)鍵的作用,通常會(huì)在設(shè)備之間建立冗余連接提高網(wǎng)絡(luò)穩(wěn)定性.
伴隨著業(yè)務(wù)訪問(wèn)量的增長(zhǎng),數(shù)據(jù)中心所需的服務(wù)器數(shù)量也在持續(xù)增長(zhǎng),為滿足用戶訪問(wèn)BAT(Baidu Alibaba Tencent)數(shù)據(jù)中心平均每月就有2 000臺(tái)以上的服務(wù)器上線.為降低數(shù)據(jù)中心計(jì)算節(jié)點(diǎn)間的通信延時(shí),減少網(wǎng)絡(luò)中間層次、網(wǎng)絡(luò)扁平化勢(shì)在必行.如圖2所示,網(wǎng)絡(luò)扁平化后對(duì)核心設(shè)備交換能力要求降低,網(wǎng)絡(luò)既能快速收斂,又能滿足服務(wù)器快速上線的需求.
Fig. 2 Flat topology圖2 扁平拓?fù)浣Y(jié)構(gòu)
網(wǎng)絡(luò)數(shù)據(jù)是進(jìn)行故障檢測(cè)、故障定位和流量分析的原始數(shù)據(jù),它能夠體現(xiàn)出當(dāng)前網(wǎng)絡(luò)狀態(tài)和流量特征,通過(guò)對(duì)多維度網(wǎng)絡(luò)數(shù)據(jù)的分析、統(tǒng)計(jì)和計(jì)算,建立網(wǎng)絡(luò)模型,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò),具體數(shù)據(jù)分類如表1所示:
Table 1 Network Data Classification表1 網(wǎng)絡(luò)數(shù)據(jù)分類
1) 網(wǎng)絡(luò)探針數(shù)據(jù)[3]
2) 流數(shù)據(jù)
流數(shù)據(jù)是指通過(guò)對(duì)流經(jīng)網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)包的頭部進(jìn)行分析,采集經(jīng)過(guò)設(shè)備的流信息.流數(shù)據(jù)并不檢測(cè)流經(jīng)設(shè)備的所有數(shù)據(jù)包,而是根據(jù)采樣比進(jìn)行采樣、分析和統(tǒng)計(jì).流數(shù)據(jù)主要包括數(shù)據(jù)流的源地址、目的地址、源端口、目的端口和數(shù)據(jù)大小,通過(guò)流數(shù)據(jù)能夠用來(lái)檢測(cè)異常的數(shù)據(jù)流[4-5].目前成熟的流數(shù)據(jù)采集技術(shù)包括Cisco的NetFlow技術(shù)、Huawei的NetStream技術(shù)和Juniper的sFlow技術(shù)等,NetFlow技術(shù)應(yīng)用范圍最廣,一共包括V1,V5,V7,V8,V9這5個(gè)主要的實(shí)用版本.
3) 路由協(xié)議數(shù)據(jù)
路由協(xié)議是指通過(guò)在路由器之間共享路由信息來(lái)支持可路由協(xié)議.路由信息通過(guò)在相鄰路由器之間泛洪,確保所有路由器同步路由信息并進(jìn)行路由收斂,從而知道到達(dá)目的路由器的路徑.通過(guò)與數(shù)據(jù)中心內(nèi)網(wǎng)絡(luò)設(shè)備建立連接關(guān)系,就可以采集到域內(nèi)路由信息并構(gòu)建網(wǎng)絡(luò)拓?fù)浜瞳@取設(shè)備間鏈接狀態(tài).路由協(xié)議數(shù)據(jù)能夠進(jìn)行異常檢測(cè)和故障定位,但是難點(diǎn)在于如何獲取全網(wǎng)路由信息,利用采集的路由信息檢測(cè)異常和定位.本文進(jìn)行異常檢測(cè)和故障定位的源數(shù)據(jù)就是數(shù)據(jù)中心網(wǎng)絡(luò)中鏈路狀態(tài)數(shù)據(jù)庫(kù)(LSDB)數(shù)據(jù),通過(guò)LSDB復(fù)原路由表,比對(duì)LSDB快照和路由表快照進(jìn)行檢測(cè)和監(jiān)控.
4) 網(wǎng)絡(luò)管理協(xié)議數(shù)據(jù)
網(wǎng)絡(luò)管理協(xié)議是一種提供給網(wǎng)絡(luò)管理員用于網(wǎng)絡(luò)監(jiān)控的工具,具體包括鏈路狀態(tài)信息、網(wǎng)絡(luò)流量統(tǒng)計(jì)、設(shè)備信息、網(wǎng)絡(luò)參數(shù)等多維度全方面信息,是進(jìn)行異常檢測(cè)中普遍使用的監(jiān)測(cè)數(shù)據(jù).由于該類型數(shù)據(jù)能夠提供詳細(xì)的網(wǎng)絡(luò)信息,因而通過(guò)將不同設(shè)備間的網(wǎng)絡(luò)管理協(xié)議數(shù)據(jù)進(jìn)行關(guān)聯(lián)分析就能夠進(jìn)行異常檢測(cè)[6-9].簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)是基于TCPIP的網(wǎng)絡(luò)上使用最為廣泛網(wǎng)絡(luò)管理模型,既可以管理最簡(jiǎn)單的網(wǎng)絡(luò)實(shí)現(xiàn)基本的管理功能,又滿足大型復(fù)雜網(wǎng)絡(luò)的管理需求.SNMP是由一系列協(xié)議組和規(guī)范組成的,提供了一種從網(wǎng)絡(luò)設(shè)備中收集網(wǎng)絡(luò)管理信息的方法.
近年來(lái),國(guó)內(nèi)外在路由異常檢測(cè)及分析方面的研究工作有很多,相關(guān)方向的研究、文章有很多.現(xiàn)在數(shù)據(jù)中心中還沒有成熟的路由異常檢測(cè)和分析工具,在路由異常定位方面相關(guān)研究也非常有限.國(guó)外的公司和大學(xué)如Google,Facebook,AT&T、哥倫比亞大學(xué)大學(xué)等高校已經(jīng)對(duì)路由檢測(cè)開展了一些研究,國(guó)內(nèi)清華大學(xué)、國(guó)防科技大學(xué)等大學(xué)在協(xié)議主動(dòng)測(cè)試和被動(dòng)測(cè)試方面進(jìn)行了大量的研究和開發(fā),阿里巴巴數(shù)據(jù)中心和百度數(shù)據(jù)中心也在進(jìn)行路由異常檢測(cè)方面相關(guān)研究.從這些研究成果中總結(jié)出以下3種路由檢測(cè)方法:
1) 基于SNMP協(xié)議的網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)利用SNMP MIB庫(kù)提供的網(wǎng)絡(luò)信息構(gòu)建網(wǎng)絡(luò)拓?fù)浜捅O(jiān)控端口等,使用trap功能實(shí)現(xiàn)異常發(fā)現(xiàn)和告警.現(xiàn)在比較成熟產(chǎn)品包括Tivoli NetView和MasterScope等,該類產(chǎn)品優(yōu)勢(shì)在于能夠?qū)崿F(xiàn)拓?fù)錁?gòu)建、網(wǎng)絡(luò)性能分析和異常告警,但是路由異常功能在異常檢測(cè)中實(shí)現(xiàn)的功能較少,未實(shí)現(xiàn)路由異常定位且需要使用日志信息和其他監(jiān)測(cè)工具輔助,增加了網(wǎng)絡(luò)負(fù)擔(dān)和部署負(fù)擔(dān).
2) Shaikh等人[10-11]和Zhang等人[12]在IGP(內(nèi)部路由協(xié)議)路由異常檢測(cè)方面貢獻(xiàn)突出,分別闡述了IGP內(nèi)路由檢測(cè)方法并進(jìn)行了實(shí)驗(yàn)驗(yàn)證.Shaikh在OSPF協(xié)議方面進(jìn)行大量研究,他首先從運(yùn)行OSPF協(xié)議的大型網(wǎng)絡(luò)中學(xué)習(xí)OSPF協(xié)議運(yùn)行行為,主要是對(duì)鏈路狀態(tài)通告行為的分析.在進(jìn)行大量實(shí)驗(yàn)后,Shaikh開始研究利用OSPF協(xié)議構(gòu)建網(wǎng)絡(luò)拓?fù)洌ㄟ^(guò)被動(dòng)監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)流構(gòu)建拓?fù)浣Y(jié)構(gòu),最后比較了利用OSPF協(xié)議構(gòu)建拓?fù)浜屠肧NMP協(xié)議構(gòu)建拓?fù)湓诳煽啃院蛯?shí)時(shí)性上的差異[10],總結(jié)出由拓?fù)浣Y(jié)構(gòu)改變或其他原因產(chǎn)生的網(wǎng)絡(luò)異常信息,并提出一種OSPF路由監(jiān)測(cè)系統(tǒng)的實(shí)現(xiàn)方法.Shaikh等人[10-11]指出該系統(tǒng)能夠有效地發(fā)現(xiàn)網(wǎng)絡(luò)中的拓?fù)洚惓?但是Shaikh等人[10-11]只是通過(guò)協(xié)議獲得了網(wǎng)絡(luò)拓?fù)湫畔?,并只能發(fā)現(xiàn)拓?fù)涓淖儯诠δ苌虾托阅苌喜荒芡耆脕?lái)檢測(cè)路由異常.
3) 在域間路由協(xié)議(border gateway protocol, BGP)路由異常監(jiān)測(cè)工作中,以O(shè)regon大學(xué)的Route Views項(xiàng)目[13]、RIPE NCC的RIS項(xiàng)目[14]、UCLA的Zhang[15]以及哥倫比亞大學(xué)的Al-Musawi等人[16]為代表主要進(jìn)行域間路由異常檢測(cè)工作,這些工作主要面向公共的BGP 路由數(shù)據(jù)服務(wù)、BGP路由動(dòng)態(tài)行為的可視化、基本的安全監(jiān)測(cè)服務(wù)3個(gè)方面.
本文研究與上述研究不同之處主要存在于4個(gè)方面:
1) 提出一種新型方法導(dǎo)出數(shù)據(jù)中心OSPF和ISIS網(wǎng)絡(luò)內(nèi)的全網(wǎng)路由信息,為復(fù)原路由表提供原始鏈路狀態(tài)信息.
2) 利用改進(jìn)Dijkstra算法復(fù)原路由表,提出改進(jìn)算法并給予理論驗(yàn)證.
3) 相比于Shaikh等人[10-11]、Zhang等人[12]、Al- Musawi等人[16]研究的內(nèi)容都是路由異常問(wèn)題,本文研究?jī)?nèi)容基于數(shù)據(jù)中心內(nèi)部路由異常,而不是域間路由異常;與Shaikh等人[10-11]和Zhang等人[12]不同的是不僅僅能夠發(fā)現(xiàn)路由異常,還能夠迅速進(jìn)行異常源頭定位.
4) 除路由異常檢測(cè)外,利用鏈路狀態(tài)數(shù)據(jù)庫(kù)實(shí)現(xiàn)路由攻擊和異常定位.
本節(jié)主要介紹如何通過(guò)LSAP進(jìn)行路由異常檢測(cè).如圖3所示系統(tǒng)的主要組成部分.首先通過(guò)軟件路由器或者開啟BGP-LS協(xié)議采集網(wǎng)絡(luò)路由信息,導(dǎo)出IGP協(xié)議中的LSDB,由于在每個(gè)區(qū)域內(nèi)路由器定期同步鏈路狀態(tài)數(shù)據(jù)庫(kù),因而我們只需要采集所有區(qū)域而不是所有路由設(shè)備的LSDB,采集方案我們優(yōu)先選擇BGP-LS,軟件路由器作為備選采集方案,然后根據(jù)改進(jìn)的Dijkstra算法計(jì)算路由表(RIB),最后比對(duì)LSDB 快照和RIB快照進(jìn)行快速發(fā)現(xiàn)鏈路狀態(tài)變化和路由變化等.
Fig. 3 Anomaly detection process of LSAP圖3 LSAP異常檢測(cè)流程
在本文中我們優(yōu)先選擇BGP-LS,軟件路由器作為備選采集方案導(dǎo)出LSDB,數(shù)據(jù)中心網(wǎng)絡(luò)按區(qū)域劃分收集.數(shù)據(jù)中心通常會(huì)維護(hù)一張網(wǎng)絡(luò)設(shè)備信息表,包括設(shè)備名、路由協(xié)議類型、區(qū)域號(hào)、設(shè)備型號(hào)、設(shè)備廠商、部署時(shí)間等.在本系統(tǒng)部署之前我們會(huì)要求設(shè)備廠商提供部署B(yǎng)GP-LS協(xié)議的設(shè)備型號(hào)集合B.設(shè):
Ii={ISIS第i個(gè)區(qū)域內(nèi)路由器集合}=
{Dk|Dk∈R且Dk擁有相同區(qū)域號(hào)};
I={ISIS區(qū)域所有路由器集合}=∪Ii;
Oi={OSPF第i個(gè)區(qū)域內(nèi)路由器集合}=
{Dk|Dk∈R且Dk擁有相同區(qū)域號(hào)};
O={OSPF區(qū)域所有路由器集合}=∪Oi.
算法1. LSDB采集算法.
① 遍歷所有ISIS區(qū)域;
② 遍歷判斷ISIS區(qū)域內(nèi)設(shè)備類型是否屬于B;
③ 記錄設(shè)備的采集類型,1表示采集方案為BGP-LS,0表示采集方案為Zebra的采集方案;
④ 遍歷所有OSPF區(qū)域;
⑤ 遍歷判斷OSPF區(qū)域內(nèi)設(shè)備類型是否屬于B;
⑥ 記錄設(shè)備的采集類型,1表示采集方案為BGP-LS,0表示采集方案為Zebra的采集方案.
現(xiàn)存的路由表獲取方法大致分為3種:登錄路由器CLI收集、廠商提供和網(wǎng)絡(luò)收集.登錄路由器查看往往需要手工輔助,受限于數(shù)據(jù)中心內(nèi)路由器數(shù)量龐大和不同廠商路由器的路由表格式不同,該方式獲取路由表可行性較低;廠商提供往往需要配置專用路由器提供對(duì)外輸出路由表接口,該方式獲取的路由表精確快速,但是價(jià)格較為昂貴,非專用路由器無(wú)法直接導(dǎo)出路由表數(shù)據(jù);網(wǎng)絡(luò)收集主要是利用網(wǎng)絡(luò)內(nèi)泛洪鏈路狀態(tài)信息,利用路由計(jì)算算法復(fù)原路由,該方式性價(jià)比較高,提供較為準(zhǔn)確的路由表,速度上僅低于專用路由器.
在導(dǎo)出的LSDB可以獲取各區(qū)域中的拓?fù)滏溄雨P(guān)系以及連接權(quán)值Metric,即可形成賦權(quán)圖G=(V,E,W),設(shè)節(jié)點(diǎn)v0,v1,…,vm∈V,邊e1,e2,…,en∈E,W為邊(i,j)∈V對(duì)應(yīng)的wi j的集合.加權(quán)圖用鄰接矩陣A表示,規(guī)定:若vi和vj之間沒有鏈接,則ai j=∞;若vi和vj之間存在鏈接,則ai j=wi j,即為相連路由器之間Metric值;若i=j,則ai j=0.在用鏈路鄰接矩陣是指行到列之間路徑條數(shù).在用鏈路鄰接矩陣U表示,規(guī)定:若vi和vj之間沒有鏈接,則Ui j=0;若vi和vj之間存在鏈接,則Ui j表示相連路由器之間Metric為ai j的條數(shù).
2.2.1 Dijkstra算法的基本思想
Dijkstra算法是指在一個(gè)賦權(quán)圖查詢2個(gè)指定頂點(diǎn)vi和vj之間的最短路徑.該算法是一個(gè)求解最短路問(wèn)題的算法,不僅能夠找到最短的(vi,vj)路徑,而且可以給出vi到G中所有頂點(diǎn)最短路徑.
最短路徑的計(jì)算步驟如下:
設(shè)S表示已求得的從vi出發(fā)的最短路徑的終點(diǎn)集合;
m階標(biāo)識(shí)矩陣R,存儲(chǔ)已求得的從vi到其他頂點(diǎn)vj的所有最短路徑上的此頂點(diǎn)的前驅(qū)頂點(diǎn).
① 初始化S和R,S={vi},R=(ri j).
② 選擇vm,使得:
aim=min {aik|vk∈V-S},令S=S∪{vm}.
③ 修改從vi出發(fā)到集合V-S中所有節(jié)點(diǎn)vk的最短路徑長(zhǎng)度.
如果:amk> 0且aim+amk 則修改為aik=aim+amk. ④ 重復(fù)操作②③共n-1次,即可求得從vi到其余各定點(diǎn)vj的最短路徑長(zhǎng)度. 但是,Dijkstra算法只能求得節(jié)點(diǎn)間一條最短路徑,不能保存所有最短路徑且②③操作需重復(fù)n-1次,本文首先優(yōu)化Dijkstra算法,解決大規(guī)模網(wǎng)絡(luò)節(jié)點(diǎn)和鏈路過(guò)多路由計(jì)算時(shí)間過(guò)長(zhǎng)的問(wèn)題. 2.2.2 Dijkstra算法的優(yōu)化 在網(wǎng)絡(luò)中心的網(wǎng)絡(luò)模型有2個(gè)特點(diǎn): 1) 由于數(shù)據(jù)中心網(wǎng)絡(luò)配置現(xiàn)狀,同一層次路由器間接口鏈路的Metric值通常是相等的(存在不相等情況); 2) 鑒于特點(diǎn)1和數(shù)據(jù)中心冗余鏈路的存在,節(jié)點(diǎn)之間總度量相等鏈路具有多條;從單節(jié)點(diǎn)到其余節(jié)點(diǎn)總度量相等的個(gè)數(shù)有多個(gè). 優(yōu)化采取的方案是: 優(yōu)化的目標(biāo)是提高集合S的效率,最大程度地加快增加S中與最短距離路徑相關(guān)的頂點(diǎn)的計(jì)算和減少S中與最短距離路徑無(wú)關(guān)的頂點(diǎn)的計(jì)算. 選擇新節(jié)點(diǎn)加入S時(shí),不僅只選擇一條最短路徑的節(jié)點(diǎn)加入S,而是將最短路徑相等的所有節(jié)點(diǎn)加入S; 選擇新節(jié)點(diǎn)加入S時(shí),不僅只選擇離vi最近的頂點(diǎn)加入集合S,而是向著從vi到vj最短路徑不斷逼近的目標(biāo)而選擇頂點(diǎn)加入集合S. 標(biāo)識(shí)矩陣R用來(lái)存儲(chǔ)從vi到其余各頂點(diǎn)的所有最短路徑的此頂點(diǎn)的前驅(qū)頂點(diǎn),即若從vi到vj的一條最短路徑為vi,v2,v4,…,vj,在此路徑中,v2是v4的前驅(qū)頂點(diǎn),則R[2][4]=1,否則R[2][4]=0. 優(yōu)化最短路徑的計(jì)算步驟如下: ① 初始化S和R,S={vi},R=(ri j). ② 選擇aim相等的所有節(jié)點(diǎn)vm,S′={vm}且S′?V-S使得aim+hopsm×metricmin=min {aik+hopsk×metricmin|vk∈V-S},令S=S∪S′. hopsm:vm至vj節(jié)點(diǎn)之間的跳數(shù),目前數(shù)據(jù)中心內(nèi)多種業(yè)務(wù)并存,通過(guò)即時(shí)通信客戶端運(yùn)行主動(dòng)探測(cè)工具ping和traceroute命令獲取數(shù)據(jù)中心內(nèi)部節(jié)點(diǎn)間時(shí)延數(shù)據(jù)和跳數(shù); metricmin:區(qū)域內(nèi)最小Metric值,相同區(qū)域內(nèi)Metric值相差不大. ③ 修改從vi出發(fā)到集合V-S中所有節(jié)點(diǎn)vk的最短路徑長(zhǎng)度. 如果:amk>0且aim+amk 則修改為aik=aim+amk. ④ 重復(fù)操作②③直至求出最小ai j,即可求得從vi到其余各定點(diǎn)vj最短路徑長(zhǎng)度. ⑤ 將最短路徑按照前驅(qū)節(jié)點(diǎn)規(guī)則添加到R中. 從優(yōu)化最短路徑的計(jì)算步驟中可以發(fā)現(xiàn),優(yōu)化算法是相似于Dijkstra算法的,但對(duì)頂點(diǎn)的選擇是不同的.在Dijkstra算法中,不斷選擇離vi最近的一個(gè)頂點(diǎn)加入到集合S,而沒有考慮最短路徑的頂點(diǎn)個(gè)數(shù)和把vi,vj同時(shí)聯(lián)系起來(lái)考慮.在優(yōu)化算法中,向著vi和vj最短路徑的不斷逼近的目標(biāo)而選擇頂點(diǎn)加入集合S中,因此,在集合S包含的是在vi和vj最短路徑局部范圍內(nèi)的部分節(jié)點(diǎn),而并不計(jì)算全部節(jié)點(diǎn).在這種情況下,優(yōu)化算法的集合S和②③迭代次數(shù)相較Dijkstra算法的集合S和②③迭代次數(shù)小得多、少得多. 2.2.3 Dijkstra改進(jìn)算法正確性證明 Fig. 4 Shortest path graph from vi to vj圖4 vi到vj最短路徑 在改進(jìn)算法中vj加入S時(shí): 1) 若mqS時(shí) 已求得最短距離A(vi,mq)+(hops(mq,vj)×metricmin)≥A(vi,vj)+0=A(vi,vj),由于hops(mq,vj)×metricmin≤A(mq,vj)=a(mq,vj),因此可以推出A(vi,vq)+a(mq,vj)≥A(vi,vj). 2) 若mq∈S時(shí) 當(dāng)mq加入S時(shí)A(vi,vj)=min {A(vi,vj),A(vi,mq)+A(mq,vj)}=min {A(vi,vj),A(vi,mq)+a(mq,vj)},記為A1(vi,vj). 由Dijkstra改進(jìn)算法可知vp加入S時(shí)修改了A(vi,vj)值,因而當(dāng)vp加入S時(shí)A(vi,vj)=min {A(vi,vj),A(vi,vp)+A(vp,vj)}=A(vi,vp)+a(vp,vj),A(vi,vj)即為改進(jìn)算法求取的最終vi到vj的最短距離. ① 當(dāng)mq先于vp加入S時(shí),vp加入S時(shí)修改了A(vi,vj),A(vi,vj)=A(vi,vp)+A(vp,vj) ② 當(dāng)mq后于vp加入S時(shí),vp為最短路徑的最后節(jié)點(diǎn),mq加入S時(shí)并未修改A(vi,vj),A1(vi,vj)=A(vi,vj)≤A(vi,mq)+a(mq,vj). 綜上所述,不論mq何時(shí)加入S中,可得 A(vi,vj)≤A(vi,mq)+a(mq,vj). (1) 根據(jù)假設(shè)在vi到vj存在的最短路徑為vim1m2m3…mqvj,最短路徑為A′(vi,vj). A′(vi,vj)=A′(vi,mq)+A′(mq,vj)= (2) 因?yàn)楦倪M(jìn)算法求出最短路徑為A(vi,vj),根據(jù)假設(shè)已知最短路徑為A′(vi,vj),因而 A′(vi,vj) (3) 將式(1)(2)帶入式(3),可以推出: A′(vi,mq)+a(mq,vj)=A′(vi,vj)A(vi,mq)+a(mq,vj), 可得:
A′(vi,mq)+a(mq,vj).