F虛擬路由表的構(gòu)建方法和多應(yīng)用業(yè)務(wù)流數(shù)據(jù)轉(zhuǎn)發(fā)方法;所述的OSPF虛擬路由表的構(gòu)建方法包括建立鄰居關(guān)系、建立鏈路狀態(tài)數(shù)據(jù)庫和建立路由表三個相互聯(lián)系的方法,具體步驟如下:
一、建立鄰居關(guān)系:
OSPF虛擬化路由協(xié)議在建立鄰居的過程中初始化鏈路狀態(tài)數(shù)據(jù)庫,鄰居建立的過程參照圖5,具體步驟為:
Al:激活設(shè)備SW1,向設(shè)備SW2發(fā)送hello數(shù)據(jù)包,hello數(shù)據(jù)包中的鄰居字段為空,DR和BDR字段設(shè)置為0.0.0.0,代表自己;
A2:設(shè)備SW2收到SWl發(fā)送的hello數(shù)據(jù)包后,創(chuàng)建SWl的數(shù)據(jù)結(jié)構(gòu),將此信息放入鄰居(鄰居是指所有開啟了 OSPF程序的接口連接的交換機)表中,并設(shè)置SWl的狀態(tài)為Init狀態(tài);SW2繼續(xù)向鄰居發(fā)送hello數(shù)據(jù)包,此時發(fā)送的hello數(shù)據(jù)包中攜帶SWl的信息,并設(shè)置DR字段為自己的接口地址(DR選舉方法與傳統(tǒng)OSPF方法相同);
A3:設(shè)備SWl收到鄰居發(fā)送的hello數(shù)據(jù)包時,創(chuàng)建SW2的數(shù)據(jù)結(jié)構(gòu),將此信息放入鄰居表中,并設(shè)置SW2的狀態(tài)為ExStart狀態(tài),接著發(fā)送DBD協(xié)議包,由于此時的DBD包的作用主要用來協(xié)商主/從關(guān)系,所以DBD協(xié)議包只包括頭部,不包括LSA的描述信息,DBD的序列號采用隨機值X,其中I字段如果設(shè)置為I表示初始化協(xié)商,M字段如果設(shè)置為I表示這不是最后一個DBD協(xié)議包,MS字段如果設(shè)置為I,表明認為自身是主;
A4:設(shè)備SW2收到鄰居發(fā)送的DBD協(xié)議包后,設(shè)置SWl為ExStart狀態(tài),并發(fā)送相應(yīng)的DBD協(xié)議包;DBD的序列號采用隨機值y,若從鄰居發(fā)送的DBD包中發(fā)現(xiàn)自身是主,則設(shè)置MS字段為1,I字段與M字段也設(shè)置為I ;
A5:設(shè)備SWl收到鄰居發(fā)送的DBD協(xié)議包后,判斷出SW2為主,設(shè)置SW2為Exchange狀態(tài),繼續(xù)回復(fù)DBD協(xié)議包,設(shè)置DBD序列號為y,MS為O ;若管理員設(shè)置此設(shè)備與SW2相連的接口屬于某個邏輯拓撲,則發(fā)送標記邏輯拓撲DSCP值的DBD協(xié)議包,其包含的LSA信息為對應(yīng)邏輯鏈路狀態(tài)數(shù)據(jù)庫中的摘要信息;
A6:設(shè)備SW2收到SWl的DBD協(xié)議包后,將SWl設(shè)置為Exchange狀態(tài),接著SW2將自己的鏈路狀態(tài)數(shù)據(jù)庫和邏輯鏈路狀態(tài)數(shù)據(jù)庫中LSA的摘要信息包含在相應(yīng)DBD協(xié)議包中并設(shè)置DBD協(xié)議包序列號為y+Ι發(fā)送給鄰居;
A7:設(shè)備SWl收到SW2的DBD協(xié)議包后,以相同的DBD序列號回復(fù),此DBD協(xié)議包同時做確認包使用;DBD協(xié)議包中包含的LSA摘要信息如果自身拓撲數(shù)據(jù)庫中沒有,則將其加入到鏈路狀態(tài)請求列表中;
A8:如果設(shè)備SW2在收到DBD協(xié)議包后,發(fā)現(xiàn)鏈路狀態(tài)數(shù)據(jù)庫的摘要信息沒有同步完成,即M字段不為O,則重復(fù)步驟A6,否則執(zhí)行步驟A9,其中鏈路狀態(tài)數(shù)據(jù)庫的同步與虛擬鏈路狀態(tài)數(shù)據(jù)庫的同步過程同時進行;
A9:如果設(shè)備SW2收到DBD協(xié)議包中的M字段為O,則設(shè)置對方狀態(tài)為Loading ;如果收到的DBD協(xié)議包DSCP值不為000000,且M字段為0,則重新創(chuàng)建對方的數(shù)據(jù)結(jié)構(gòu),并將狀態(tài)設(shè)置為 Virtual Loading ;
AlO:在Loading狀態(tài)后,設(shè)備會根據(jù)鏈路狀態(tài)請求列表中的信息,發(fā)送LSR協(xié)議包,向?qū)Ψ秸埱笞陨砣鄙俚腖SA信息;
All:不斷重復(fù)步驟A10,直到鏈路狀態(tài)請求列表為空,然后設(shè)置對方為full狀態(tài);如果虛擬鏈路狀態(tài)請求列表為空,則設(shè)置對方為virtual full狀態(tài);
二、建立鏈路狀態(tài)數(shù)據(jù)庫
鏈路狀態(tài)數(shù)據(jù)庫是以DSCP值為標記的多張表,其中設(shè)DSCP值為000000的鏈路狀態(tài)數(shù)據(jù)庫為根鏈路狀態(tài)數(shù)據(jù)庫,其他虛擬鏈路狀態(tài)數(shù)據(jù)庫中的數(shù)據(jù)與根鏈路狀態(tài)數(shù)據(jù)庫之間相互隔離,互不影響。
[0045]在建立鄰居關(guān)系的過程中,會構(gòu)建鏈路狀態(tài)數(shù)據(jù)庫,并與鄰居同步數(shù)據(jù)庫,后期鏈路狀態(tài)數(shù)據(jù)庫的維護主要通過OSPF協(xié)議采用增量更新和定期更新的機制,鏈路狀態(tài)數(shù)據(jù)庫由LSA構(gòu)成,LSA在通信過程中由LSU協(xié)議包攜帶,運行新型OSPF協(xié)議設(shè)備的LSU接受機制如圖6所示,鏈路狀態(tài)數(shù)據(jù)庫的建立包括以下步驟:
B1:當(dāng)運行OSPF虛擬化協(xié)議的設(shè)備收到LSU時,首先判斷接收到的LSU協(xié)議包是否設(shè)置DSCP值(默認值為000000),如果沒有設(shè)置,則進入步驟B2,否則進入步驟B3 ;
B2:解析LSU中的LSA,判斷接收到的LSA是否已經(jīng)在根鏈路狀態(tài)數(shù)據(jù)庫中存在,如果存在進入步驟B21,不存在進入步驟B22 ;
B21:判斷接收的LSA和根鏈路狀態(tài)數(shù)據(jù)庫中的LSA的序列號是否相同,如果相同則忽略此LSA ;如果接收的LSA的序列號比當(dāng)前根鏈路狀態(tài)數(shù)據(jù)庫中LSA的序列號大,說明收到的LSA比當(dāng)前LSA要新,此時進入步驟B22 ;如果接收的LSA的序列號比當(dāng)前根鏈路狀態(tài)數(shù)據(jù)庫中的LSA的序列號小,說明收到的LSA比當(dāng)前LSA版本低,此時丟棄此LSA,并把當(dāng)前根鏈路狀態(tài)數(shù)據(jù)庫中的LSA封裝在LSU中,不設(shè)置DSCP值發(fā)送給鄰居;當(dāng)鄰居收到此LSU后,執(zhí)行步驟BI,從而更新鄰居的根鏈路狀態(tài)數(shù)據(jù)庫;
B22:將接收到的LSA添加到根鏈路狀態(tài)數(shù)據(jù)庫中,并向發(fā)送此LSU的鄰居發(fā)送DSCP為OOOOOO的LSAck協(xié)議包,表明已經(jīng)收到此LSA,同時向其他鄰居泛洪此LSA,并進入步驟B23 ;
B23:在根鏈路狀態(tài)數(shù)據(jù)庫中運行SPF算法重新計算根路由表;
B3:判斷此DSCP標記的虛擬鏈路狀態(tài)數(shù)據(jù)庫是否存在,若不存在,說明接收到LSU為違規(guī)LSU,原因是虛擬鏈路狀態(tài)數(shù)據(jù)庫會在鄰居建立過程中創(chuàng)建,若沒有對應(yīng)的虛擬鏈路狀態(tài)數(shù)據(jù)庫,說明并沒有與發(fā)送此LSU的鄰居建立虛擬完全鄰接(virtual full)的鄰居關(guān)系;若存在,則進入步驟B4 ;
B4:解析LSU中的LSA信息,判斷接收到的LSA是否已經(jīng)在相應(yīng)虛擬鏈路狀態(tài)數(shù)據(jù)庫中存在,如果存在進入步驟B41,不存在進入步驟A42 ;
B41:判斷接收的LSA和當(dāng)前虛擬鏈路狀態(tài)數(shù)據(jù)庫中的LSA的序列號是否相同,如果相同則忽略此LSA ;如果接收的LSA的序列號比當(dāng)前虛擬鏈路狀態(tài)數(shù)據(jù)庫中LSA的序列號大,說明收到的LSA比當(dāng)前LSA更新,此時進入步驟B42 ;如果接收的LSA的序列號比當(dāng)前虛擬鏈路狀態(tài)數(shù)據(jù)庫中的LSA的序列號小,說明收到的LSA比當(dāng)前LSA版本低,此時丟棄此LSA,并把當(dāng)前虛擬鏈路狀態(tài)數(shù)據(jù)庫中的LSA封裝在LSU中,設(shè)置DSCP值為收到的LSU協(xié)議包IP包頭中的DSCP值發(fā)送給鄰居;當(dāng)鄰居收到此LSU后,執(zhí)行步驟BI,從而更新鄰居的虛擬鏈路狀態(tài)數(shù)據(jù)庫;
B42:將此LSA添加到虛擬鏈路狀態(tài)數(shù)據(jù)庫中,并向發(fā)送此LSU的鄰居發(fā)送DSCP設(shè)置為相應(yīng)值的LSAck協(xié)議包,表明已經(jīng)收到此LSA,同時向其他鄰居泛洪此LSA,并進入步驟B43 ;
B43:在當(dāng)前虛擬鏈路狀態(tài)數(shù)據(jù)庫中運行SPF算法,重新計算虛擬路由表。
[0046]三、建立路由表
路由表是在鏈路狀態(tài)數(shù)據(jù)庫的基礎(chǔ)上運行SPF算法計算得到,分別在虛擬鏈路狀態(tài)數(shù)據(jù)庫中運行SPF算法,計算出的各數(shù)據(jù)庫的路由放入對應(yīng)虛擬路由表中,即建立了互不影響的路由表;虛擬路由表的形成使現(xiàn)有網(wǎng)絡(luò)形成多個層面,每個虛擬路由表之間互不影響,不同應(yīng)用業(yè)務(wù)流在不同路由層面中運行,保證了網(wǎng)絡(luò)之間的隔離性。
[0047]圖7為某具體網(wǎng)絡(luò)拓撲的應(yīng)用實例,其中不同應(yīng)用業(yè)務(wù)流對應(yīng)到不同層面,如可以設(shè)置辦公系統(tǒng)使用虛擬拓撲4,設(shè)計核心層、匯聚層與接入層三層架構(gòu)組建網(wǎng)絡(luò);人員定位系統(tǒng)使用虛擬拓撲3,環(huán)形網(wǎng)絡(luò)構(gòu)建保證網(wǎng)絡(luò)冗余性;視頻監(jiān)控系統(tǒng)使用虛擬拓撲2,虛擬拓撲為星型拓撲,中間設(shè)備作為應(yīng)用層組播的轉(zhuǎn)發(fā)點,減少流量傳輸路徑;其余流量使用虛擬拓撲1,對應(yīng)根路由表,保證沒有分類的流量可以正常使用網(wǎng)絡(luò)傳輸。
[0048]所述的多應(yīng)用業(yè)務(wù)流數(shù)據(jù)轉(zhuǎn)發(fā)方法,具體步驟如下:
1、數(shù)據(jù)包分類與打標簽,數(shù)據(jù)包的分類與打標簽決定應(yīng)用數(shù)據(jù)處于哪個路由平面進行傳輸,如圖8所示,具體步驟如下: Cl:將數(shù)據(jù)包基于以下幾種方式進行分類:(I)基于入接口(2)基于IP優(yōu)先級(3)基于DSCP值(4 )基于源地址、目標地址、源端口號或目標端口號(5 )應(yīng)用程序;
C2:網(wǎng)絡(luò)邊緣入口處收到數(shù)據(jù)包時判斷是否滿足分類的條件,如果不滿足則進行步驟C3,滿足則進行步驟C4;
C3:將數(shù)據(jù)包通過根路由表轉(zhuǎn)發(fā)傳輸;
C4:對感興趣流打預(yù)先設(shè)計好的DSCP標簽,進入步驟C5 ;
C5:判斷是否可以找到相應(yīng)虛擬路由表,如果不能找到,執(zhí)行步驟C3,如果能找到,進行步驟C6 ;
C6:通過相應(yīng)虛擬路由表轉(zhuǎn)發(fā)數(shù)據(jù)包;
2、三層設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)包,三層設(shè)備指工作在OSI七層模型中第三層(網(wǎng)絡(luò)層)的設(shè)備,網(wǎng)絡(luò)內(nèi)部設(shè)備收到數(shù)據(jù)包時的處理步驟如圖9所示:
Dl:當(dāng)設(shè)備收到數(shù)據(jù)包時判斷是否為OSPF協(xié)議包,如果是則轉(zhuǎn)交給路由引擎處理,如果不是則進入步驟D2;
D2:判斷DSCP是否為000000,如果是則進入步驟D3,如果不是,則進入步驟D4 ;
D3:將數(shù)據(jù)包通過根路由表轉(zhuǎn)發(fā)傳輸;
D4:判斷是否可以找到相應(yīng)虛擬路由表,如果能夠找到則通過相應(yīng)虛擬路由表