OSPF(Open Shortest Path First)
OSPF(Open Shortest Path First)是一個內部網關協議(Interior Gateway Protocol,簡稱IGP)。與RIP相對,OSPF是鏈路狀態路有協議,而RIP是距離向量路由協議。 鏈路是路由器接口的另一種說法,因此OSPF也稱爲接口狀態路由協議。OSPF通過路由器之間通告網絡接口的狀態來建立鏈路狀態數據庫,生成最短路徑樹,每個OSPF路由器使用這些最短路徑構造路由表。
基本概念和術語
鏈路狀態
OSPF路由器收集其所在網絡區域上各路由器的連接狀態信息,即鏈路狀態信息(Link-State),生成鏈路狀態數據庫(Link-State Database)。路由器掌握了該區域上所有路由器的鏈路狀態信息,也就等於瞭解了整個網絡的拓撲狀況。OSPF路由器利用“最短路徑優先算法(Shortest Path First, SPF)”,獨立地計算出到達任意目的地的路由。
區域
OSPF協議引入“分層路由”的概念,將網絡分割成一個“主幹”連接的一組相互獨立的部分,這些相互獨立的部分被稱爲“區域”(Area),“主幹”的部分稱爲“主幹區域”。每個區域就如同一個獨立的網絡,該區域的OSPF路由器只保存該區域的鏈路狀態。每個路由器的鏈路狀態數據庫都可以保持合理的大小,路由計算的時間、報文數量都不會過大。
共有五種區域的主要區別在於它們和外部路由器間的關係:
標準區域: 一個標準區域可以接收鏈路更新信息和路由總結。
主幹區域(傳遞區域):主幹區域是連接各個區域的中心實體。主幹區域始終是“區域0”,所有其他的區域都要連接到這個區域上交換路由信息。主幹區域擁有標準區域的所有性質。
存根區域(stub Area):存根區域是不接受自治系統以外的路由信息的區域。如果需要自治系統以外的路由,它使用默認路由0.0.0.0。
完全存根區域:它不接受外部自治系統的路由以及自治系統內其他區域的路由總結。需要發送到區域外的報文則使用默認路由:0.0.0.0。完全存根區域是Cisco自己定義的。
不完全存根區域(NSAA): 它類似於存根區域,但是允許接收以LSA Type 7發送的外部路由信息,並且要把LSA Type 7轉換成LSA Type 5。
OSPF中的四種路由器
在OSPF多區域網絡中,路由器可以按不同的需要同時成爲以下四種路由器中的幾種:
1. 內部路由器:所有端口在同一區域的路由器,維護一個鏈路狀態數據庫。
2. 主幹路由器:具有連接主幹區域端口的路由器。
3. 區域邊界路由器(ABR):具有連接多區域端口的路由器,一般作爲一個區域的出口。ABR爲每一個所連接的區域建立鏈路狀態數據庫,負責將所連接區域的路由摘要信息發送到主幹區域,而主幹區域上的ABR則負責將這些信息發送到各個區域。
4. 自治域系統邊界路由器(ASBR):至少擁有一個連接外部自治域網絡(如非OSPF的網絡)端口的路由器,負責將非OSPF網絡信息傳入OSPF網絡。
OSPF鏈路狀態公告類型
OSPF路由器之間交換鏈路狀態公告(LSA)信息。OSPF的LSA中包含連接的接口、使用的Metric及其他變量信息。OSPF路由器收集鏈接狀態信息並使用SPF算法來計算到各節點的最短路徑。LSA也有幾種不同功能的報文,在這裏簡單地介紹一下:
LSA TYPE 1:router LSA由每臺路由器爲所屬的區域產生的LSA,描述本區域路由器鏈路到該區域的狀態和代價。一個邊界路由器可能產生多個LSA TYPE1。
LSA TYPE 2:network LSA由DR產生,含有連接某個區域路由器的所有鏈路狀態和代價信息。只有DR可以監測該信息。
LSA TYPE 3:summary LSA由ABR產生,含有ABR與本地內部路由器連接信息,可以描述本區域到主幹區域的鏈路信息。它通常彙總缺省路由而不是傳送彙總的OSPF信息給其他網絡。
LSA TYPE 4:Summary LSA由ABR產生,由主幹區域發送到其他ABR, 含有ASBR的鏈路信息,與LSA TYPE 3的區別在於TYPE 4描述到OSPF網絡的外部路由,而TYPE 3則描述區域內路由。
LSA TYPE 5:AS External LSA由ASBR產生,含有關於自治域外的鏈路信息。除了存根區域和完全存根區域,LSA TYPE 5在整個網絡中發送。
LSA TYPE 6:multicast OSPF LSA,MOSF可以讓路由器利用鏈路狀態數據庫的信息構造用於多播報文的多播發布樹。
LSA TYPE 7:Not-So-Stubby LSA由ASBR產生的關於NSSA的信息。LSA TYPE 7可以轉換爲LSA TYPE 5。
協議類型
Hello報文,通過週期性地發送來發現和維護鄰接關係;
DD(鏈路狀態數據庫描述)報文,描述本地路由器保存的LSDB(鏈路狀態數據庫);
LSR(LS Request)報文,向鄰居請求本地沒有的LSA;
LSU(LS Update)報文,向鄰居發送其請求或更新的LSA;
LSAck(LS ACK)報文,收到鄰居發送的LSA後發送的確認報文。
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。
指派路由器(DR)和備份指派路由器(BDR)
在多路訪問網絡上可能存在多個路由器,爲了避免路由器之間建立完全相鄰關係而引起的大量開銷,OSPF要求在區域中選舉一個DR。每個路由器都與之建立完全相鄰關係。DR負責收集所有的鏈路狀態信息,併發布給其他路由器。選舉DR的同時也選舉出一個BDR,在DR失效的時候,BDR擔負起DR的職責。
點對點型網絡不需要DR,因爲只存在兩個節點,彼此間完全相鄰。 協議組成OSPF協議由Hello協議、交換協議、擴散協議組成。本文僅介紹Hello協議,其他兩個協議可參考RFC2328中的具體描述。
當路由器開啓一個端口的OSPF路由時,將會從這個端口發出一個Hello報文,以後它也將以一定的間隔週期性地發送Hello報文。OSPF路由器用Hello報文來初始化新的相鄰關係以及確認相鄰的路由器鄰居之間的通信狀態。
對廣播型網絡和非廣播型多路訪問網絡,路由器使用Hello協議選舉出一個DR。在廣播型網絡裏,Hello報文使用多播地址224.0.0.5週期性廣播,並通過這個過程自動發現路由器鄰居。在NBMA網絡中,DR負責向其他路由器逐一發送Hello報文。
OSPF的配置
OSPF Config/Process
Process ID:即 OSPF路由進程ProcessID必須指定範圍在1-65535,多個OSPF進程可以在同一個路由器上配置,但最好不這樣做。多個OSPF進程需要多個OSPF數據庫的副本,必須運行多個最短路徑算法的副本。ProcessID只在路由器內部起作用,不同路由器的ProcessID可以不同。
OSPF Config/General
Router ID:即該router的IP地址
ASBR::Autonomous System Border Router 至少擁有一個連接外部自治域網絡(如非OSPF的網絡)端口的路由器,負責將非OSPF網絡信息傳入OSPF網絡。
ExtLsaCount:在連接狀態數據庫(LSDB)中,外部連接狀態通告(LSA)的數量。
ExtLsaCksumSum:外部連接狀態通告的校驗和,決定在路由器的連接狀態數據庫中是否有個連接變化。
TOSRouteSupport:路由器是否支持TOS
OrgnNewLsa:新產生的LSA的數量,Router每產生一個該數量增加。
RxNewLsa:接受到的LSA
ExtLsaDbLimit:在連接狀態數據庫中存儲的自治系統外部LSA的最大數量。
MulticastExt:該router是否轉發多播報文,基於OSPF多播擴張中定義的算法。Bit 0表示轉發多播報給router直接連接的區域;bit 1表示在OSPF區域間轉發;bit 2表示在自治系統之間轉發。
ExitOverflowIntrvl:在路由器進入Overflow狀態時,試圖離開Overflow狀態的時間間隔。
DemandExt:
OSPF Config/Area
將該router加入到某個區域
Area:網絡區域ID area-id在0-4294967295內的十進制數,也可以是帶有IP地址格式的x.x.x.x。當網絡區域ID爲0或0.0.0.0時爲主幹區域。還有標準區域、存根區域(StubArea)、不完全存根區域(NSSA)之分。不同網絡區域的路由器通過主幹域學習路由信息。
AuthType:可以在相同OSPF區域的路由器上啓用身份驗證的功能,只有經過身份驗證的同一區域的路由器才能互相通告路由信息。在默認情況下OSPF不使用區域驗證。通過兩種方法可啓用身份驗證功能,純文本身份驗證和消息摘要(md5)身份驗證。純文本身份驗證傳送的身份驗證口令爲純文本,它會被網絡探測器確定,所以不安全,不建議使用。而消息摘要(md5)身份驗證在傳輸身份驗證口令前,要對口令進行加密,所以一般使用此種方法進行身份驗證。 使用身份驗證時,區域內所有的路由器接口必須使用相同的身份驗證方法。爲起用身份驗證,必須在路由器接口配置模式下,爲區域的每個路由器接口配置口令。
ImportAsExt:區域對自治系統外部LSA的輸入。
SPFRuns:內部區域路由表已經通過區域的LSDB計算的次數
AbrCount:該區域內區域邊界路由器的數量
AsbrCount:該區域內自治系統邊界路由器的數量
AreaLsaCount:在鏈路狀態數據庫中鏈路狀態通告的數量
AreaLsaChsumSum:在鏈路狀態數據庫中鏈路狀態通告的校驗和的和,不包括外部鏈路狀態通告。
AreaSummary:該變量控制進入存根區域的summary LSA的輸入;noAreaSummary表示路由器既不產生也不傳播summary LSA進入存根區域;sendAreaSummary表示路由器既要彙總也要傳播LSA
OSPF Config/StubArea
存根區域:存根區域是不接受自治系統以外的路由信息的區域。如果需要自治系統以外的路由,它使用默認路由0.0.0.0。
Metric:Metric值。
MetricType:用默認路由進行通告時使用的Metric類型。
OSPF Config/LinkStateDb
OSPF路由器收集其所在網絡區域上各路由器的連接狀態信息,即鏈路狀態信息(Link-State),生成鏈路狀態數據庫(Link-State Database)。路由器掌握了該區域上所有路由器的鏈路狀態信息,也就等於瞭解了整個網絡的拓撲狀況。OSPF路由器利用“最短路徑優先算法(Shortest Path First, SPF)”,獨立地計算出到達任意目的地的路由。OSPF的LSA中包含連接的接口、使用的Metric、序列號(seq)、報文號(I)、結尾標識(M)及主從標誌(MS)。OSPF路由器收集鏈接狀態信息並使用SPF算法來計算到各節點的最短路徑。
LSAType:連接狀態通告的類型,有各自的通告格式
LSID:是LSA的特定域包含一個router ID或IP Address,指定這個通告描述的一片路由域
RtrID:標示源路由器
Seq:用於檢測舊的或重複的LSA,該值線性增加
Age:該LSA的生存了時間
Chsum:通告內容中出了age域的所有內容的校驗和
LsdbAdv:整個鏈路狀態通告,包括它的頭部。
OSPF Config/AreaRange
IP Address和IP Mask確定的一段IP地址
Address:子網地址
Mask:是子網掩碼
Effect:觸發指示的summary的通告或使子網不被通告到外部區域
OSPF Config/Host
區域內該router可達到的主機路由表。
OSPF Config/Interface
配置OSPF接口參數
Type:該連接的網絡類型。
Priority:接口優先級,用於多播網絡的指定路由器的選擇計算。
TransitDelay:傳輸時延,指在OSPF鏈路接口之間傳輸一個鏈路狀態更新包需要的時間。
ReTransitIntvl:重傳間隔是指鏈路狀態的重傳間隔時間。如果一個路由器向相鄰路由器發送一個新的鏈路狀態包,在沒有收到對端的確認包時,將發生重傳。
HelloIntvl::Hollo間隔,OSPF路由器定期向鄰接路由器發送HELLO數據包,以探尋相鄰路由器的狀態。其探尋間隔可以進行設置。
DeadIntvl:在該路由器的鄰居在該時間內看到其hello報文,就認爲該路由器處於非活動狀態。
PollingIntvl:Hello報文發送給處於非活動狀態的鄰居。
DR:Designated Router指定路由器
BDR:備份指定路由器
Authkey:認證密碼
MulticastFwding:多播轉發類型
AuthType:認證類型
OSPF Config/Metric
設置被Interface Index指示的非虛擬接口的具體TOS Metric
OSPF Config/VirtualInterface
關於路由器的虛擬接口表
OSPF Config/Neighbor
關於某個接口連接的鄰居的信心
OSPF Config/VirtualNeighbor
由process ID、area ID、router ID確定的虛擬鄰接點信息
OSPF Config/ExLinkStateDb
某個外部連接狀態通告
OSPF Config/RouteGroup
OSPF的路由組
OSPF Config/AreaAggregate
由IP Address和IP Mask及LSDB類型確定的一組地址範圍。