OSPF協(xié)議 目 錄 4.2 OSPF包承載的內(nèi)容............................................................................... 9 1.概述OSPF協(xié)議是由Internet網(wǎng)絡(luò)工程部(IETF)開(kāi)發(fā)的一種內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),即網(wǎng)關(guān)和路由器都在一個(gè)自治系統(tǒng)內(nèi)部。OSPF是一個(gè)鏈路狀態(tài)協(xié)議或最短路徑優(yōu)先(SPF)協(xié)議。雖然該協(xié)議依賴(lài)于IP環(huán)境以外的一些技術(shù),但該協(xié)議專(zhuān)用于IP,而且還包括子網(wǎng)編址的功能。該協(xié)議根據(jù)IP數(shù)據(jù)報(bào)中的目的IP地址來(lái)進(jìn)行路由選擇,一旦決定了如何為一個(gè)IP數(shù)據(jù)報(bào)選擇路徑,就將數(shù)據(jù)報(bào)發(fā)往所選擇的路徑中,不需要額外的包頭,即不存在額外的封裝。該方法與許多網(wǎng)絡(luò)不同,因?yàn)樗麄兪褂媚撤N類(lèi)型的內(nèi)部網(wǎng)絡(luò)報(bào)頭對(duì)UDP進(jìn)行封裝以控制子網(wǎng)中的路由選擇協(xié)議。另外OSPF可以在很短的時(shí)間里使路由選擇表收斂。OSPF還能夠防止出現(xiàn)回路,這種能力對(duì)于網(wǎng)狀網(wǎng)絡(luò)或使用多個(gè)網(wǎng)橋連接的不同局域網(wǎng)是非常重要的。在運(yùn)行OSPF的每一個(gè)路由器中都維護(hù)一個(gè)描述自治系統(tǒng)拓?fù)浣Y(jié)構(gòu)的統(tǒng)一的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)由每一個(gè)路由器的局部狀態(tài)信息(該路由器可用的接口信息、鄰居信息)、路由器相連的網(wǎng)絡(luò)狀態(tài)信息(該網(wǎng)絡(luò)所連接的路由器)、外部狀態(tài)信息(該自治系統(tǒng)的外部路由信息)等組成。每一個(gè)路由器在自治系統(tǒng)范圍內(nèi)擴(kuò)散相應(yīng)的狀態(tài)信息。 所有的路由器并行運(yùn)行同樣的算法,根據(jù)該路由器的拓?fù)鋽?shù)據(jù)庫(kù)構(gòu)造出以它自己為根節(jié)點(diǎn)的最短路徑樹(shù),該最短路徑樹(shù)的葉子節(jié)點(diǎn)是自治系統(tǒng)內(nèi)部的其它路由器。當(dāng)?shù)竭_(dá)同一目的路由器存在多條相同代價(jià)的路由時(shí),OSPF能夠?qū)崿F(xiàn)在多條路徑上分配流量。 RFC2178中刪除了OSPF的TOS功能,但是為了保證和以前版本的兼容性,在各個(gè)鏈路狀態(tài)宣告中還保留了TOS項(xiàng)目。 2.SPF算法
與V-D算法相比較的一組算法叫作“鏈接-狀態(tài)”(link-state)算法,又叫最短路徑優(yōu)先或SPF(Shortest Path First)算法。 按照SPF算法的要求,網(wǎng)關(guān)尋徑表依賴(lài)于一張表示整個(gè)Internet網(wǎng)中網(wǎng)關(guān)與網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的圖。在這張圖中,節(jié)點(diǎn)表示網(wǎng)關(guān),邊表示連接網(wǎng)關(guān)的網(wǎng)絡(luò)(link),我們稱(chēng)之為L-S圖。在信息一致的情況下,所有網(wǎng)關(guān)的L-S圖應(yīng)該是完全相同的。各網(wǎng)關(guān)的尋徑表是根據(jù)相同的L-S圖計(jì)算出來(lái)的。L-S算法包括三個(gè)步驟: (1)各個(gè)網(wǎng)關(guān)主動(dòng)測(cè)試與所有相鄰網(wǎng)關(guān)之間的狀態(tài)。為此,網(wǎng)關(guān)周期性地向相鄰網(wǎng)關(guān)發(fā)出Hello報(bào)文,詢(xún)問(wèn)相鄰網(wǎng)關(guān)是否能夠訪問(wèn)。假如相鄰網(wǎng)關(guān)做出反應(yīng),說(shuō)明鏈接為“開(kāi)”(UP),否則為“關(guān)”(DOWN),鏈接-狀態(tài)的取名即出于此。 (2)各網(wǎng)關(guān)周期性地廣播其L-S信息。這里的“廣播”是真正意義的廣播,不象V-D算法那樣只向相鄰網(wǎng)關(guān)發(fā)送V-D報(bào)文,而是向所有參加SPF算法的網(wǎng)關(guān)發(fā)送L-S報(bào)文。 (3)網(wǎng)關(guān)收到L-S報(bào)文后,利用它刷新網(wǎng)絡(luò)拓?fù)鋱D,將相應(yīng)鏈接改為“開(kāi)”或“關(guān)”狀態(tài)。假如L-S發(fā)生變化,網(wǎng)關(guān)立即利用最短路徑算法,根據(jù)L-S圖重新計(jì)算本地路徑。 在實(shí)際應(yīng)用中有好幾種最短路徑選擇算法,大多數(shù)是以A算法(algorithm A)為基礎(chǔ)。該算法已作為互連網(wǎng)絡(luò)SPF協(xié)議的模型,并且多年來(lái)被用于優(yōu)化網(wǎng)絡(luò)設(shè)計(jì)和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)。各節(jié)點(diǎn)用自己擁有的統(tǒng)一的描述自治系統(tǒng)拓?fù)浣Y(jié)構(gòu)的數(shù)據(jù)庫(kù),以自己為根,建立一個(gè)路徑選擇的尋徑表。在圖1中,節(jié)點(diǎn)A是源節(jié)點(diǎn),節(jié)點(diǎn)J是目的節(jié)點(diǎn)。其具體的步驟如下: (1)在圖1中,網(wǎng)絡(luò)中的每條路徑有一個(gè)權(quán)值,該權(quán)值是根據(jù)某一標(biāo)準(zhǔn)(如考慮距離、時(shí)延、隊(duì)列長(zhǎng)度等)得出的; (2)為每個(gè)節(jié)點(diǎn)標(biāo)上一條已知路徑從源端到該節(jié)點(diǎn)需要的最小代價(jià)。最初不知道任何路徑,所以每個(gè)節(jié)點(diǎn)的標(biāo)號(hào)為無(wú)窮大; (3)為每個(gè)節(jié)點(diǎn)檢測(cè)它周?chē)心男┫噜彽墓?jié)點(diǎn),源節(jié)點(diǎn)是第一個(gè)被考慮的節(jié)點(diǎn),并且變?yōu)楣ぷ鞴?jié)點(diǎn); (4)為工作節(jié)點(diǎn)的每個(gè)相鄰的節(jié)點(diǎn)分配一個(gè)最小代價(jià)標(biāo)號(hào)。如果發(fā)現(xiàn)一條從該節(jié)點(diǎn)到源節(jié)點(diǎn)的更短的路徑,則修改標(biāo)號(hào)。在OSPF中,當(dāng)鏈路狀態(tài)報(bào)文廣播到所有其他節(jié)點(diǎn)時(shí),會(huì)發(fā)生這種情況(即因發(fā)現(xiàn)更短的路徑而修改標(biāo)號(hào)); (5)在給相鄰節(jié)點(diǎn)分配了標(biāo)號(hào)以后,檢測(cè)網(wǎng)絡(luò)中的其他節(jié)點(diǎn),如果某個(gè)已分配了標(biāo)號(hào)的節(jié)點(diǎn)擁有較小的標(biāo)號(hào)值,則它的標(biāo)號(hào)變?yōu)橛谰脴?biāo)號(hào),該節(jié)點(diǎn)變?yōu)楣ぷ鞴?jié)點(diǎn); (6)如果某節(jié)點(diǎn)的標(biāo)號(hào)與到它的某個(gè)相鄰節(jié)點(diǎn)路徑上的權(quán)值之和小于該相鄰節(jié)點(diǎn)的標(biāo)號(hào),在改變?cè)撓噜徆?jié)點(diǎn)的標(biāo)號(hào),因?yàn)榘l(fā)現(xiàn)了一條更短的路徑; (7)選擇另一個(gè)工作節(jié)點(diǎn),重復(fù)上述過(guò)程直到窮盡所有的可能。最后的每個(gè)節(jié)點(diǎn)的標(biāo)號(hào)就給出了源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的一條端到端的代價(jià)最低的路徑。 圖1 A算法的應(yīng)用 經(jīng)過(guò)了上面的計(jì)算可以形成圖2所示的路由選擇拓?fù)鋱D(即最短距離樹(shù),又稱(chēng)最優(yōu)樹(shù)): 圖2 路由器A的路由選擇拓?fù)鋱D 3.OSPF協(xié)議原理3.1 自治系統(tǒng)的分區(qū)
OSPF允許在一個(gè)自治系統(tǒng)里劃分區(qū)域的做法,相鄰的網(wǎng)絡(luò)和它們相連的路由器組成一個(gè)區(qū)域(Area)。每一個(gè)區(qū)域有該區(qū)域自己拓?fù)鋽?shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)對(duì)于外部的區(qū)域是不可見(jiàn)的,每個(gè)區(qū)域內(nèi)部路由器的鏈路狀態(tài)信息數(shù)據(jù)庫(kù)實(shí)際上只包含著該區(qū)域內(nèi)的鏈路狀態(tài)信息,他們也不能詳細(xì)地知道外部的鏈接情況,在同一個(gè)區(qū)域內(nèi)的路由器擁有同樣的拓?fù)鋽?shù)據(jù)庫(kù)。和多個(gè)區(qū)域相連的路由器擁有多個(gè)區(qū)域的鏈路狀態(tài)信息庫(kù)。劃分區(qū)域的方法減少了鏈路狀態(tài)信息數(shù)據(jù)庫(kù)的大小、并極大地減少了路由器間交換狀態(tài)信息的數(shù)量。如圖3所示。 Area0 Area2 Area1 Area3 Area4 R R R R R R R 圖3 把自治系統(tǒng)分成多個(gè)OSPF區(qū)域 在多于一個(gè)區(qū)域的自治系統(tǒng)中,OSPF規(guī)定必須有一個(gè)骨干區(qū)(backbone)-area 0,骨干區(qū)是OSPF的中樞區(qū)域,它與其他區(qū)域通過(guò)區(qū)域邊界路由器(ABR)相連。區(qū)域邊界路由器通過(guò)骨干區(qū)進(jìn)行區(qū)域路由信息的交換。為了達(dá)到一個(gè)區(qū)域的各個(gè)路由器保持相同的鏈路狀態(tài)信息庫(kù),這就要求骨干區(qū)是相連的,但是并不要求它們是物理連接的。在實(shí)際的環(huán)境中,如果它們?cè)谖锢砩鲜菙嚅_(kāi)的,這時(shí)可以通過(guò)建立虛鏈路(Virtual Link)的方法保證骨干區(qū)域的連續(xù)性。虛鏈將屬于骨干區(qū)并且到一個(gè)非骨干區(qū)都有接口的兩個(gè)ABR連接起來(lái),虛鏈本身屬于骨干區(qū),OSPF將通過(guò)虛鏈連接的兩個(gè)路由器看作是通過(guò)未編號(hào)的點(diǎn)對(duì)點(diǎn)鏈路(unnumbered point-to-point)連接。 3.2 區(qū)域間路由
當(dāng)兩個(gè)非骨干區(qū)域間路由IP包的時(shí),必須通過(guò)骨干區(qū)。IP包經(jīng)過(guò)的路徑分為三個(gè)部分:源區(qū)域內(nèi)路徑(從源端到ABR)、骨干路徑(源和目的區(qū)域間的骨干區(qū)路徑)、目的端區(qū)域內(nèi)路徑(目的區(qū)域的ABR到目的路由器的路徑)。從另一個(gè)觀點(diǎn)來(lái)看,一個(gè)自治系統(tǒng)就象一個(gè)以骨干區(qū)作為Hub,各個(gè)非骨干區(qū)域連到Hub上的星型結(jié)構(gòu)圖。各個(gè)區(qū)域邊界路由器在骨干區(qū)上進(jìn)行路由信息的交換,發(fā)布本區(qū)域的路由信息,同時(shí)收到其他ABR發(fā)布的信息,傳到本區(qū)域進(jìn)行鏈路狀態(tài)的更新以形成最新的路由表。 3.3 Stub區(qū)和自治系統(tǒng)外路由
在一個(gè)OSPF自治系統(tǒng)中有這樣一種特殊的區(qū)域――存根區(qū)域(Stub區(qū)域),在這個(gè)區(qū)域中只有一個(gè)外部出口,該區(qū)域不允許外部的非OSPF的路由信息進(jìn)入。到自治系統(tǒng)外的包只能依靠缺省路由。存根區(qū)域的邊界路由器必須在路由概要里向區(qū)域宣告這個(gè)缺省路由,但是不能超過(guò)這個(gè)存根區(qū)域。缺省路由的使用可以減少鏈路狀態(tài)信息庫(kù)的大小。對(duì)于該自治系統(tǒng)外部路由信息,如BGP產(chǎn)生的路由信息,可以通過(guò)該自治系統(tǒng)的區(qū)域邊界路由器(ASBR)透明地?cái)U(kuò)散到整個(gè)自治系統(tǒng)的各個(gè)區(qū)域中,使得該自治系統(tǒng)內(nèi)部的每一臺(tái)路由器都能夠獲得外部的路由信息。但是該信息不能擴(kuò)散到存根區(qū)域。這樣自治系統(tǒng)內(nèi)的路由器可以通過(guò)ASBR路由包到自治系統(tǒng)外的目標(biāo)。 3.4 DR和BDR
在自治系統(tǒng)內(nèi)的每個(gè)廣播和非廣播多點(diǎn)訪問(wèn)(NBMA)網(wǎng)絡(luò)里,都有一個(gè)指定路由器(DR-Designated Router)和一個(gè)備份指定路由器(BDR-Backup Designated Router),它們是通過(guò)Hello協(xié)議選舉產(chǎn)生的。DR的主要功能是: (1)產(chǎn)生代表本網(wǎng)絡(luò)的網(wǎng)絡(luò)路由宣告,這個(gè)宣告列出了連到該網(wǎng)絡(luò)有哪些路由器,其中包括DR自己; (2)DR同本網(wǎng)絡(luò)的所有其他的路由器建立一種星型的鄰接關(guān)系,這種鄰接關(guān)系是用來(lái)交換各個(gè)路由器的鏈路狀態(tài)信息,從而同步鏈路狀態(tài)信息庫(kù)。DR在路由器的鏈路狀態(tài)信息庫(kù)的同步上起到核心的作用。 另一個(gè)比較重要的路由器是BDR,BDR也和該網(wǎng)絡(luò)中的其它路由器建立鄰接關(guān)系。因此,BDR的設(shè)立是為了保證當(dāng)DR發(fā)生故障時(shí)盡快接替DR的工作,而不至于出現(xiàn)由于需重新選舉DR和重新構(gòu)筑拓?fù)鋽?shù)據(jù)庫(kù)而產(chǎn)生大范圍的數(shù)據(jù)庫(kù)震蕩。當(dāng)DR存在的情況下,BDR不生成網(wǎng)絡(luò)鏈路廣播消息。 在DR、BDR的選舉后,該網(wǎng)絡(luò)內(nèi)其它路由器向DR、BDR發(fā)送鏈路狀態(tài)信息,并經(jīng)DR轉(zhuǎn)發(fā)到和DR建立鄰接關(guān)系的其它路由器。當(dāng)鏈路狀態(tài)信息交換完畢時(shí),DR和其它路由器的鄰接關(guān)系進(jìn)入了穩(wěn)定態(tài),區(qū)域范圍內(nèi)統(tǒng)一的拓?fù)洌ㄦ溌窢顟B(tài))數(shù)據(jù)庫(kù)也就建立了,每個(gè)路由器以該數(shù)據(jù)庫(kù)為基礎(chǔ),采用SPF算法計(jì)算出各個(gè)路由器的路由表,這樣就可以進(jìn)行路由轉(zhuǎn)發(fā)了。 4.OSPF報(bào)文
4.1 OSPF協(xié)議報(bào)文
OSPF使用五種類(lèi)型的路由協(xié)議包,在各個(gè)路由器間進(jìn)行交換信息,如表1所示。每種協(xié)議包都包含24字節(jié)的OSPF協(xié)議包的首部,如圖4所示。 Hello協(xié)議用于尋找和維護(hù)路由器所連網(wǎng)絡(luò)上的鄰居關(guān)系。通過(guò)周期性地發(fā)出Hello包,來(lái)確定和維護(hù)鄰居路由器接口是否仍在起作用。Hello包被發(fā)送到網(wǎng)絡(luò)上的每個(gè)活動(dòng)的路由器接口。在廣播和非廣播的多點(diǎn)訪問(wèn)的網(wǎng)絡(luò)上,DR和BDR的選舉也是通過(guò)Hello包來(lái)完成的。在不同的物理網(wǎng)絡(luò)上,Hello包的目的地址是不同的;在點(diǎn)到點(diǎn)和廣播網(wǎng)絡(luò)上,其目的地址是AllSPFRouter(224.0.0.5);在虛鏈路上是單播,也就是從虛鏈路的源端直接發(fā)送到鏈路的另一端;而在點(diǎn)到多點(diǎn)的網(wǎng)絡(luò)上,分離的Hello包分別發(fā)送到相連的每一個(gè)鄰居;在非廣播的多點(diǎn)訪問(wèn)網(wǎng)絡(luò)上,Hello包的發(fā)送要看各個(gè)路由器的配置信息。 表1 OSPF路由協(xié)議包類(lèi)型
圖4 OSPF協(xié)議包的首部 數(shù)據(jù)庫(kù)描述包是類(lèi)型往為2的OSPF包,在形成鄰接過(guò)程中的路由器之間交換數(shù)據(jù)庫(kù)描述包,且它們描述鏈路狀態(tài)數(shù)據(jù)庫(kù)。根據(jù)接口數(shù)和網(wǎng)絡(luò)數(shù),可能不只一個(gè)數(shù)據(jù)庫(kù)描述包來(lái)傳輸整個(gè)鏈路狀態(tài)數(shù)據(jù)庫(kù)。在交換的過(guò)程中所涉及的路由器建立主從關(guān)系。主路由器發(fā)送包,而從路由器通過(guò)使用數(shù)據(jù)庫(kù)描述(Database Description-DD)序列號(hào)認(rèn)可接收到的包。接口MTU域指示通過(guò)該接口可發(fā)送的最大IP包長(zhǎng)度。當(dāng)通過(guò)虛鏈路發(fā)送包時(shí),這個(gè)域設(shè)置為0。選項(xiàng)域包含3位,用于顯示路由器的能力。I位是Init位,對(duì)數(shù)據(jù)庫(kù)序列中的第一個(gè)包,設(shè)置為1。M位設(shè)置為1,表示在序列中還有更多的數(shù)據(jù)庫(kù)描述包。MS位是主從位,在數(shù)據(jù)庫(kù)描述包交換期間,1表示路由器是主路由器,而0表示路由器是從路由器。包的其余部分是一個(gè)或多個(gè)LSA,如圖5所示。 鏈路狀態(tài)請(qǐng)求包是類(lèi)型為3的OSPF包,它們的格式如圖6所示。當(dāng)兩個(gè)路由器完成交換數(shù)據(jù)庫(kù)描述包時(shí),路由器可檢測(cè)鏈路狀態(tài)數(shù)據(jù)庫(kù)是否過(guò)時(shí)。當(dāng)這種情況發(fā)生時(shí),路由器可請(qǐng)求新一些的數(shù)據(jù)庫(kù)描述包。 圖6 路由狀態(tài)請(qǐng)求包格式 圖7 鏈路狀態(tài)更新包的格式 鏈路狀態(tài)確認(rèn)包是類(lèi)型位5的OSPF包,其格式中除了OSPF包首部外,包括LAS的首部。這些包發(fā)送到三個(gè)地址之一:多點(diǎn)傳送地址AllDRouters,多點(diǎn)傳送地址AllSPFRouters,或單點(diǎn)傳送地址。 4.2 OSPF包承載的內(nèi)容
l 路由器鏈路狀態(tài)宣告 路由器為每個(gè)有活動(dòng)OSPF接口的區(qū)域生成一個(gè)路由器LSA。包含在路由器LAS中的信息是路由器接口在該區(qū)域中的狀態(tài),而LSA在整個(gè)區(qū)域傳播。進(jìn)入一個(gè)區(qū)域的所有路由器接口必須在一個(gè)路由器LSA中說(shuō)明。鏈路狀態(tài)ID域是路由器的OSPF ID。VEB位用于確定路由器可能有的鏈路類(lèi)型。V位顯示路由器虛擬鏈路的端點(diǎn)。 鏈路ID標(biāo)識(shí)路由器的接口所連接的對(duì)象。鏈路ID一般等于鄰居路由器的鏈路狀態(tài)ID。鏈路數(shù)據(jù)域的內(nèi)容取決于鏈路類(lèi)型。如果路由器與存根區(qū)域連接,那么,這個(gè)域?qū)@個(gè)網(wǎng)絡(luò)的IP地址掩碼。對(duì)其他類(lèi)型的鏈路,這個(gè)域包含分配給該接口的IP地址。服務(wù)類(lèi)型域通常設(shè)置為0,最后的值是度量值,或鏈路的費(fèi)用。 l 網(wǎng)絡(luò)鏈路狀態(tài)宣告 網(wǎng)絡(luò)LSA是類(lèi)型為2的LAS,而這樣的LSA是由支持兩個(gè)或多個(gè)路由器的每個(gè)廣播和NBMA網(wǎng)絡(luò)所生成的。網(wǎng)絡(luò)LSA是由網(wǎng)絡(luò)的DR所創(chuàng)建的。這個(gè)LSA描述了連接到網(wǎng)絡(luò)的所有的路由器,包括DR自己。鏈路狀態(tài)ID是DR到這個(gè)區(qū)域的接口的IP地址。 l 匯總鏈路狀態(tài)宣告 類(lèi)型3和類(lèi)型4的LSA是匯總鏈路狀態(tài)宣告。匯總LSA是有區(qū)域邊界路由器生成的,而且它們說(shuō)明區(qū)域的目標(biāo)。3型匯總有IP地址目標(biāo),鏈路狀態(tài)ID是IP的網(wǎng)絡(luò)號(hào)。4型匯總LSA以一個(gè)自治系統(tǒng)邊界路由器為其目標(biāo),鏈路狀態(tài)ID是OSPF路由器ID。鏈路狀態(tài)ID是兩種類(lèi)型LSA包之間的唯一區(qū)別。 l 外部自治系統(tǒng)鏈路狀態(tài)宣告 類(lèi)型5是AS-External LSA,它被用于說(shuō)明自治系統(tǒng)外的網(wǎng)絡(luò)。AS-External LSA用于說(shuō)明到外部網(wǎng)絡(luò)的路由。鏈路狀態(tài)ID域包含IP網(wǎng)絡(luò)號(hào)或0.0.0.0,如果它描述一個(gè)默認(rèn)路由,此時(shí)的作為掩碼也是0.0.0.0。 5.OSPF協(xié)議的運(yùn)行
5.1 Hello協(xié)議的運(yùn)行
Hello協(xié)議的作用是發(fā)現(xiàn)和維護(hù)鄰居關(guān)系、選舉DR和BDR。在廣播型網(wǎng)絡(luò)上每一個(gè)路由器周期性地廣播Hello包(目的地址是AllSPFRouter),使得它能夠被鄰居發(fā)現(xiàn)。每一個(gè)路由器的每個(gè)接口都有一個(gè)相關(guān)的接口數(shù)據(jù)結(jié)構(gòu),當(dāng)Hello包里的特定參數(shù)(如Area ID, Authentication, Network Mask, HelloInterval, RouterDeadInterval 和Options values)相匹配時(shí),Hello包才能被接收。Hello包中包含著本路由器所希望選舉的DR和該DR的優(yōu)先級(jí)、BDR和BDR的優(yōu)先級(jí)、還有本路由器通過(guò)交換Hello協(xié)議包所“看”到的其它路由器。從Hello包里得到的鄰居被放在路由器的鄰居列表里。當(dāng)從接收到的Hello包里看到自己時(shí),就建立了雙向通信。建立了雙向通信的路由器才有可能建立連接(adjacency)關(guān)系,能否建立連接關(guān)系,要看連接兩個(gè)鄰居的網(wǎng)絡(luò)的類(lèi)型。通過(guò)Hello協(xié)議包的交換,得知了希望成為DR和BDR的路由器以及他們的優(yōu)先級(jí),下一步的工作是選舉DR和BDR。 5.2 DR和BDR的產(chǎn)生
在初始狀態(tài)下,一個(gè)路由器的活動(dòng)接口設(shè)置DR和BDR為0.0.0.0,這意味著沒(méi)有DR和BDR被選舉出來(lái)。同時(shí)設(shè)置Wait Timer,其值為RouterDeadInterval,其作用是如果在這段數(shù)時(shí)間里還沒(méi)有收到有關(guān)DR和BDR的宣告,那么它就宣告自己為DR或BDR。經(jīng)過(guò)Hello協(xié)議交換過(guò)程后,每一個(gè)路由器獲得了希望成為DR和BDR的那些路由器的信息,按照下列步驟選舉DR和BDR: (1)在路由器同一個(gè)或多個(gè)路由器建立雙向的通信以后,就檢查每個(gè)鄰居Hello包里的優(yōu)先級(jí)、DR和BDR域。列出所有符合DR和BDR選舉的路由器(他們的優(yōu)先級(jí)要大于0,接口狀態(tài)要大于雙向通信),列出所有的DR,列出所有的BDR; (2)從這些合格的路由器中建立一個(gè)沒(méi)有宣稱(chēng)自己為DR的子集(因?yàn)樾Q(chēng)為DR的路由器不能選舉成為BDR); (3)如果在這個(gè)子集里有一個(gè)或多個(gè)鄰居(包括它自己的接口)在BDR域宣稱(chēng)自己為BDR,則選舉具有最高優(yōu)先級(jí)的路由器,如果優(yōu)先級(jí)相同,則選擇具有最高Router ID的那個(gè)路由器為BDR; (4)如果在這個(gè)子集里沒(méi)有路由器宣稱(chēng)自己為BDR,則在它的鄰居里選擇具有最高優(yōu)先級(jí)的路由器為BDR,如果優(yōu)先級(jí)相同,則選擇具有最大Router ID的路由器為BDR; (5)在宣稱(chēng)自己為DR的路由器列表中,如果有一個(gè)或多個(gè)路由器宣稱(chēng)自己為DR,則選擇具有最高優(yōu)先級(jí)的路由器為DR,如果優(yōu)先級(jí)相同,則選擇具有最大Router ID的路由器為DR; (6)如果沒(méi)有路由器宣稱(chēng)為DR,則將最新選舉的BDR作為DR; (7)如果是第一選舉某個(gè)路由器為DR/BDR或沒(méi)有DR/BDR被選舉,則要重復(fù)2到6步,然后是第8步。 (8)將選舉出來(lái)的路由器的端口狀態(tài)作相應(yīng)的改變,DR的端口狀態(tài)為DR,BDR的端口狀態(tài)為BDR,否則的話(huà)為DR other。 在多路訪問(wèn)網(wǎng)絡(luò)中,DR和BDR與該網(wǎng)絡(luò)內(nèi)所有其它的路由器建立鄰接關(guān)系,這些鄰接關(guān)系也是該網(wǎng)絡(luò)內(nèi)全部的鄰接關(guān)系。 由于DR和BDR的引入,簡(jiǎn)化了網(wǎng)絡(luò)的邏輯拓?fù)浣Y(jié)構(gòu),將一個(gè)網(wǎng)狀網(wǎng)絡(luò)轉(zhuǎn)變成一個(gè)星型網(wǎng)絡(luò),使協(xié)議包的擴(kuò)散,計(jì)算變的簡(jiǎn)單,并有效防止了鄰接關(guān)系震蕩的發(fā)生。 5.3鏈路狀態(tài)數(shù)據(jù)庫(kù)的同步
在OSPF中,保持區(qū)域范圍內(nèi)的所有路由器的鏈路狀態(tài)數(shù)據(jù)庫(kù)同步極為重要。通過(guò)建立并保持鄰接關(guān)系,OSPF使具有鄰接關(guān)系的路由器的數(shù)據(jù)庫(kù)同步,進(jìn)而保證了區(qū)域范圍內(nèi)所有路由器數(shù)據(jù)庫(kù)同步。數(shù)據(jù)庫(kù)同步過(guò)程從建立鄰接關(guān)系開(kāi)始,在完全鄰接關(guān)系已建立時(shí)完成。當(dāng)路由器的端口狀態(tài)為ExStart時(shí),路由器通過(guò)發(fā)一個(gè)空的數(shù)據(jù)庫(kù)描述包來(lái)協(xié)商“主從”關(guān)系以及數(shù)據(jù)庫(kù)描述包的序號(hào),Router ID大的為主,反之為從。序號(hào)也以主路由器產(chǎn)生的初始序號(hào)為基準(zhǔn),以后的每一次數(shù)據(jù)庫(kù)描述包的發(fā)送,序號(hào)都要加1。主路由器發(fā)送鏈路狀態(tài)描述包(數(shù)據(jù)庫(kù)描述包),從路由器接收鏈路狀態(tài)描述包后來(lái)檢查自己的鏈路狀態(tài)數(shù)據(jù)庫(kù),如果發(fā)現(xiàn)鏈路狀態(tài)數(shù)據(jù)庫(kù)里沒(méi)有改項(xiàng),則進(jìn)行添加該項(xiàng),并將該項(xiàng)加入鏈路狀態(tài)請(qǐng)求列表,準(zhǔn)備向主路由器請(qǐng)求新的鏈路狀態(tài),并向主路由器發(fā)送確認(rèn)包。主路由器收到鏈路狀態(tài)請(qǐng)求包時(shí),發(fā)出鏈路狀態(tài)的更新包,進(jìn)行鏈路狀態(tài)的更新。從路由器收到鏈路狀態(tài)更新包后發(fā)出確認(rèn)包,進(jìn)行確認(rèn),表示收到該更新包,否則主路由器就在重發(fā)定時(shí)器的啟動(dòng)下進(jìn)行重復(fù)發(fā)送。每一個(gè)路由器向它的鄰居發(fā)送數(shù)據(jù)庫(kù)描述包來(lái)描述自己的數(shù)據(jù)庫(kù),每一個(gè)數(shù)據(jù)庫(kù)描述包由一組鏈路狀態(tài)廣播組成,鄰居路由器接收該數(shù)據(jù)庫(kù)描述包,并返回確認(rèn)消息。這兩個(gè)路由器形成了一種“主從”關(guān)系,只有主路由器能夠向從路由器發(fā)送數(shù)據(jù)庫(kù)描述包,反之則不行。當(dāng)所有的數(shù)據(jù)庫(kù)請(qǐng)求包都已被主路由器處理后,主從路由器也就進(jìn)入了鄰接完成狀態(tài)。當(dāng)DR與整個(gè)區(qū)域內(nèi)所有的路由器都完成鄰接關(guān)系時(shí),整個(gè)區(qū)域中所有路由器的數(shù)據(jù)庫(kù)也就同步了。 5.4路由表的產(chǎn)生和查找
當(dāng)鏈路狀態(tài)數(shù)據(jù)庫(kù)達(dá)到同步以后,各個(gè)路由器就利用同步的數(shù)據(jù)庫(kù)以自己為根節(jié)點(diǎn)來(lái)并行地計(jì)算最優(yōu)樹(shù),從而形成本地的路由表。 當(dāng)收到IP包需要查詢(xún)路由表時(shí),按照以下規(guī)則完成路由查找: (1)在路由表中選擇相匹配的路由記錄。相匹配的記錄是指需轉(zhuǎn)發(fā)IP包的目的地址“落在”該匹配路由記錄的目的地址范圍內(nèi)(該匹配記錄可能有多個(gè))。如:如果有路由表項(xiàng)為172.16.64.0/18,172.16.64.0/24和172.16.64.0/27供目的地址172.16.64.205選擇,則選擇最后一項(xiàng)。因?yàn)樗亲钇ヅ涞囊粋€(gè)。也就是說(shuō)要選擇一個(gè)掩碼最長(zhǎng)的一個(gè)。缺省路由是最后要選擇的,因?yàn)樗难诖a最短。如果沒(méi)有匹配的路由表項(xiàng)供選擇,則有ICMP發(fā)送一個(gè)目標(biāo)不可到達(dá)的控制報(bào)文,而且該IP包將被丟棄。 (2)如果有多個(gè)路徑匹配,根據(jù)路由的類(lèi)型來(lái)進(jìn)行進(jìn)一步的選擇,它們的優(yōu)先級(jí)依次為區(qū)域內(nèi)的路徑,區(qū)域間得額路徑,E1型的外部路徑,E2型的外部路徑。 (3)如果有類(lèi)型和費(fèi)用都相等的多條路徑,則OSPF將同時(shí)利用它們。 (4)最后利用所尋找的路徑來(lái)進(jìn)行IP包的轉(zhuǎn)發(fā)。 |
|
來(lái)自: krrish > 《我的圖書(shū)館》