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