OSPF是一種典型的鏈路狀態(tài)路由協(xié)議。采用OSPF的路由器彼此交換并保存整個網(wǎng)絡(luò)的鏈路信息,從而掌握全網(wǎng)的拓?fù)浣Y(jié)構(gòu),獨立計算路由。因為RIP路由協(xié)議不能服務(wù)于大型網(wǎng)絡(luò),所以,IETF的IGP工作組特別開發(fā)出鏈路狀態(tài)協(xié)議——OSPF。目前廣為使用的是OSPF第二版,最新標(biāo)準(zhǔn)為RFC2328。
OSPF作為一種內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol,IGP),用于在同一個自治域(AS)中的路由器之間發(fā)布路由信息。區(qū)別于距離矢量協(xié)議(RIP),OSPF具有支持大型網(wǎng)絡(luò)、路由收斂快、占用網(wǎng)絡(luò)資源少等優(yōu)點,在目前應(yīng)用的路由協(xié)議中占有相當(dāng)重要的地位。 基本概念和術(shù)語 1. 鏈路狀態(tài) OSPF路由器收集其所在網(wǎng)絡(luò)區(qū)域上各路由器的連接狀態(tài)信息,即鏈路狀態(tài)信息(Link-State),生成鏈路狀態(tài)數(shù)據(jù)庫(Link-State Database)。路由器掌握了該區(qū)域上所有路由器的鏈路狀態(tài)信息,也就等于了解了整個網(wǎng)絡(luò)的拓?fù)錉顩r。OSPF路由器利用“最短路徑優(yōu)先算法(Shortest Path First, SPF)”,獨立地計算出到達(dá)任意目的地的路由。 2. 區(qū)域 OSPF協(xié)議引入“分層路由”的概念,將網(wǎng)絡(luò)分割成一個“主干”連接的一組相互獨立的部分,這些相互獨立的部分被稱為“區(qū)域” (Area),“主干”的部分稱為“主干區(qū)域”。每個區(qū)域就如同一個獨立的網(wǎng)絡(luò),該區(qū)域的OSPF路由器只保存該區(qū)域的鏈路狀態(tài)。每個路由器的鏈路狀態(tài)數(shù)據(jù)庫都可以保持合理的大小,路由計算的時間、報文數(shù)量都不會過大。 3. OSPF網(wǎng)絡(luò)類型 根據(jù)路由器所連接的物理網(wǎng)絡(luò)不同,OSPF將網(wǎng)絡(luò)劃分為四種類型:廣播多路訪問型(Broadcast MultiAccess)、非廣播多路訪問型(None Broadcast MultiAccess,NBMA)、點到點型(Point-to-Point)、點到多點型(Point-to-MultiPoint)。 廣播多路訪問型網(wǎng)絡(luò)如:Ethernet、Token Ring、FDDI。NBMA型網(wǎng)絡(luò)如:Frame Relay、X.25、SMDS。Point-to-Point型網(wǎng)絡(luò)如:PPP、HDLC。具體結(jié)構(gòu)如后圖所示。 4. 指派路由器(DR)和備份指派路由器(BDR) 在多路訪問網(wǎng)絡(luò)上可能存在多個路由器,為了避免路由器之間建立完全相鄰關(guān)系而引起的大量開銷,OSPF要求在區(qū)域中選舉一個DR。每個路由器都與之建立完全相鄰關(guān)系。DR負(fù)責(zé)收集所有的鏈路狀態(tài)信息,并發(fā)布給其他路由器。選舉DR的同時也選舉出一個BDR,在DR失效的時候,BDR擔(dān)負(fù)起DR的職責(zé)。 點對點型網(wǎng)絡(luò)不需要DR,因為只存在兩個節(jié)點,彼此間完全相鄰。 協(xié)議組成 OSPF協(xié)議由Hello協(xié)議、交換協(xié)議、擴散協(xié)議組成。本文僅介紹Hello協(xié)議,其他兩個協(xié)議可參考RFC2328中的具體描述。 當(dāng)路由器開啟一個端口的OSPF路由時,將會從這個端口發(fā)出一個Hello報文,以后它也將以一定的間隔周期性地發(fā)送Hello報文。OSPF路由器用Hello報文來初始化新的相鄰關(guān)系以及確認(rèn)相鄰的路由器鄰居之間的通信狀態(tài)。 對廣播型網(wǎng)絡(luò)和非廣播型多路訪問網(wǎng)絡(luò),路由器使用Hello協(xié)議選舉出一個DR。在廣播型網(wǎng)絡(luò)里,Hello報文使用多播地址224.0.0.5周期性廣播,并通過這個過程自動發(fā)現(xiàn)路由器鄰居。在NBMA網(wǎng)絡(luò)中,DR負(fù)責(zé)向其他路由器逐一發(fā)送Hello報文。 協(xié)議操作 第一步:建立路由器的鄰接關(guān)系 所謂“鄰接關(guān)系”(Adjacency)是指OSPF路由器以交換路由信息為目的,在所選擇的相鄰路由器之間建立的一種關(guān)系。 路由器首先發(fā)送擁有自身ID信息(Loopback端口或最大的 IP地址)的Hello報文。與之相鄰的路由器如果收到這個Hello報文,就將這個報文內(nèi)的ID信息加入到自己的Hello報文內(nèi)。 如果路由器的某端口收到從其他路由器發(fā)送的含有自身ID信息的Hello報文,則它根據(jù)該端口所在網(wǎng)絡(luò)類型確定是否可以建立鄰接關(guān)系。 在點對點網(wǎng)絡(luò)中,路由器將直接和對端路由器建立起鄰接關(guān)系,并且該路由器將直接進(jìn)入到第三步操作:發(fā)現(xiàn)其他路由器。若為MultiAccess 網(wǎng)絡(luò), 該路由器將進(jìn)入選舉步驟。 第二步:選舉DR/BDR 不同類型的網(wǎng)絡(luò)選舉DR和BDR的方式不同。 MultiAccess網(wǎng)絡(luò)支持多個路由器,在這種狀況下, OSPF需要建立起作為鏈路狀態(tài)和LSA更新的中心節(jié)點。選舉利用Hello報文內(nèi)的ID和優(yōu)先權(quán)(Priority)字段值來確定。優(yōu)先權(quán)字段值大小從0到255,優(yōu)先權(quán)值最高的路由器成為DR。如果優(yōu)先權(quán)值大小一樣,則ID值最高的路由器選舉為DR, 優(yōu)先權(quán)值次高的路由器選舉為BDR。優(yōu)先權(quán)值和ID值都可以直接設(shè)置。 第三步:發(fā)現(xiàn)路由器 在這個步驟中,路由器與路由器之間首先利用Hello報文的ID信息確認(rèn)主從關(guān)系,然后主從路由器相互交換部分鏈路狀態(tài)信息。每個路由器對信息進(jìn)行分析比較,如果收到的信息有新的內(nèi)容,路由器將要求對方發(fā)送完整的鏈路狀態(tài)信息。這個狀態(tài)完成后,路由器之間建立完全相鄰(Full Adjacency)關(guān)系,同時鄰接路由器擁有自己獨立的、完整的鏈路狀態(tài)數(shù)據(jù)庫。 在MultiAccess網(wǎng)絡(luò)內(nèi),DR與BDR互換信息,并同時與本子網(wǎng)內(nèi)其他路由器交換鏈路狀態(tài)信息。 在Point-to-Point 或 Point-to-MultiPoint網(wǎng)絡(luò)中,相鄰路由器之間互換鏈路狀態(tài)信息。 第四步: 選擇適當(dāng)?shù)穆酚善? 當(dāng)一個路由器擁有完整獨立的鏈路狀態(tài)數(shù)據(jù)庫后,它將采用SPF算法計算并創(chuàng)建路由表。OSPF路由器依據(jù)鏈路狀態(tài)數(shù)據(jù)庫的內(nèi)容,獨立地用SPF算法計算出到每一個目的網(wǎng)絡(luò)的路徑,并將路徑存入路由表中。 OSPF 利用量度(Cost)計算目的路徑,Cost最小者即為最短路徑。在配置OSPF路由器時可根據(jù)實際情況,如鏈路帶寬、時延或經(jīng)濟(jì)上的費用設(shè)置鏈路Cost大小。Cost越小,則該鏈路被選為路由的可能性越大。 第五步:維護(hù)路由信息 當(dāng)鏈路狀態(tài)發(fā)生變化時,OSPF通過Flooding 過程通告網(wǎng)絡(luò)上其他路由器。OSPF路由器接收到包含有新信息的鏈路狀態(tài)更新報文,將更新自己的鏈路狀態(tài)數(shù)據(jù)庫,然后用SPF算法重新計算路由表。在重新計算過程中,路由器繼續(xù)使用舊路由表,直到SPF完成新的路由表計算。新的鏈路狀態(tài)信息將發(fā)送給其他路由器。值得注意的是,即使鏈路狀態(tài)沒有發(fā)生改變,OSPF路由信息也會自動更新,默認(rèn)時間為30分鐘。 |
|