OSPFv3技術白皮書
關鍵詞:OSPF,OSPFv3,IPv4,IPv6
摘 要:OSPFv3是在OSPFv2基礎上開發的用於IPv6網絡的路由協議。本文簡要介紹了OSPFv2的實現機製,並詳細描述了OSPFv3與OSPFv2的異同點及組網應用。
縮略語:
縮略語 | 英文全名 | 中文解釋 |
OSPF | Open Shortest Path First | 開放最短路徑優先 |
OSPFv3 | Open Shortest Path First version 3 | 開放最短路徑優先版本3 |
IGP | Interior Gateway Protocol | 內部網關協議 |
AS | Autonomous System | 自治係統 |
ABR | Area Border Router | 區域邊界路由器 |
ASBR | Autonomous System Border Router | 自治係統邊界路由器 |
LSA | Link Statement Advertisement | 鏈路狀態通告 |
LSDB | Link State Data Base | 鏈路狀態數據庫 |
DR | Designated Router | 指定路由器 |
BDR | Backup Designated Router | 備份指定路由器 |
DD | Database Description | 數據庫描述 |
LSR | Link State Request | 鏈路狀態請求 |
LSU | Link State Update | 鏈路狀態更新 |
LSAck | Link State Acknowledgment | 鏈路狀態確認 |
NBMA | Non-Broadcast Multi-Access | 非廣播多點可達網絡 |
P2MP | Point-to-MultiPoint | 點到多點 |
P2P | Point-to-Point | 點到點 |
目 錄
OSPFv2是IETF組織開發的一個基於鏈路狀態的內部網關協議,具有適應範圍廣、收斂迅速、無自環、便於層級化網絡設計等特點,因此在IPv4網絡中獲得了廣泛應用。
隨著IPv6網絡的建設,同樣需要動態路由協議為IPv6報文的轉發提供準確有效的路由信息。基於此,IETF在保留了OSPFv2優點的基礎上針對IPv6網絡修改形成了OSPFv3。OSPFv3主要用於在IPv6網絡中提供路由功能,是IPv6網絡中路由技術的主流協議。
與OSPFv2相比,OSPFv3在工作機製上與OSPFv2基本相同;但為了支持IPv6地址格式,OSPFv3對OSPFv2做了一些改動。下麵先對OSPFv2進行簡要介紹,之後再詳細介紹OSPFv3與OSPFv2的異同點。
在廣播網或NBMA網絡中,OSPF協議定義了DR和BDR,BDR是對DR的一個備份,在選舉DR的同時也選舉出BDR。
DR和BDR會和本網段內的所有DROther(既不是DR也不是BDR的路由器)建立鄰接關係並交換路由信息,DROther之間不建立鄰接關係、不交換路由信息,從而減少了廣播網絡和NBMA網絡上各路由器之間鄰接關係的數量,同時減少網絡流量,節約了帶寬資源。
隨著網絡規模日益擴大,當一個大型網絡中的路由器都運行OSPF路由協議時,會存在以下問題:
l 路由器數量會增多,每台路由器都生成LSA,整個LSDB即所有LSA的集合會非常大,占用大量存儲空間;
l 計算最短路徑樹耗時增加,導致CPU負擔很重;
l 在網絡規模增大之後,拓撲結構發生變化的概率也會增大,網絡會經常處於“振蕩”之中,造成網絡中大量的OSPF協議報文在傳遞,降低了網絡的帶寬利用率。更為嚴重的是,每一次變化都會導致網絡中所有的路由器重新進行路由計算。
OSPF協議通過將自治係統劃分成不同的區域來解決上述問題。
區域是從邏輯上將路由器劃分為不同的組,每個組用區域號ID來標識。
為了適應特定的網絡需求,OSPF定義了兩種特殊的區域:
(1) (Totally) Stub區域
Stub區域是一些特定的區域,Stub區域的ABR不允許注入Type5 LSA,在這些區域中路由器的路由表規模以及路由信息傳遞的數量都會大大減少。
為了進一步減少Stub區域中路由器的路由表規模以及路由信息傳遞的數量,可以將該區域配置為Totally Stub(完全Stub)區域,該區域的ABR不會將區域間的路由信息和外部路由信息傳遞到本區域。
(Totally) Stub區域是一種可選的配置屬性,但並不是每個區域都符合配置的條件。通常來說,(Totally) Stub區域位於自治係統的邊界。
(2) NSSA區域
NSSA(Not-So-Stubby Area)區域是Stub區域的變形,與Stub區域有許多相似的地方。NSSA區域也不允許Type5 LSA注入,但可以允許Type7 LSA注入。Type7 LSA由NSSA區域的ASBR產生,在NSSA區域內傳播。當Type7 LSA到達NSSA的ABR時,由ABR將Type7 LSA轉換成Type5 LSA,傳播到其他區域。
OSPF根據鏈路層協議類型將網絡分為下列四種類型:
l 廣播類型:當鏈路層協議是Ethernet、FDDI時,OSPF缺省認為網絡類型是廣播。在該類型的網絡中,通常以組播形式(224.0.0.5和224.0.0.6)發送協議報文。
l NBMA類型:當鏈路層協議是幀中繼、ATM或X.25時,OSPF缺省認為網絡類型是NBMA。在該類型的網絡中,以單播形式發送協議報文。
l P2MP類型:沒有一種鏈路層協議會被缺省的認為是P2MP類型。點到多點必須是由其他的網絡類型強製更改的。常用做法是將NBMA改為點到多點的網絡。在該類型的網絡中,缺省情況下,以組播形式(224.0.0.5)發送協議報文。可以根據用戶需要,以單播形式發送協議報文。
l P2P類型:當鏈路層協議是PPP、HDLC時,OSPF缺省認為網絡類型是P2P。在該類型的網絡中,以組播形式(224.0.0.5)發送協議報文。
OSPF有五種類型的協議報文:
l Hello報文:周期性發送,用來發現和維持OSPF鄰居關係。內容包括一些定時器的數值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,備份指定路由器)以及自己已知的鄰居。
l DD報文:描述了本地LSDB中每一條LSA的摘要信息,用於兩台路由器進行數據庫同步。
l LSR報文:向對方請求所需的LSA。兩台路由器互相交換DD報文之後,得知對端的路由器有哪些LSA是本地的LSDB所缺少的,這時需要發送LSR報文向對方請求所需的LSA。內容包括所需要的LSA的摘要。
l LSU報文:向對方發送其所需要的LSA。
l LSAck報文:用來對收到的LSA進行確認。內容是需要確認的LSA的Header(一個報文可對多個LSA進行確認)。
OSPF協議的路由計算過程可簡單描述如下:
l 每台OSPF路由器根據自己周圍的網絡拓撲結構生成LSA,並通過更新報文將LSA發送給網絡中的其它OSPF路由器。
l 每台OSPF路由器都會收集其它路由器通告的LSA,所有的LSA放在一起便組成了LSDB。LSA是對路由器周圍網絡拓撲結構的描述,LSDB則是對整個自治係統的網絡拓撲結構的描述。
l OSPF路由器將LSDB轉換成一張帶權的有向圖,這張圖便是對整個網絡拓撲結構的真實反映,各個路由器得到的有向圖是完全相同的。
l 每台路由器根據有向圖,使用SPF算法計算出一棵以自己為根的最短路徑樹,這棵樹給出了到自治係統中各節點的路由。
OSPFv3在協議設計思路和工作機製與OSPFv2基本一致:
l 報文類型相同:包含Hello、DD、LSR、LSU、LSAck五種類型的報文。
l 區域劃分相同。
l LSA泛洪和同步機製相同:為了保證LSDB內容的正確性,需要保證LSA的可靠泛洪和同步。
l 路由計算方法相同:采用最短路徑優先算法計算路由。
l 網絡類型相同:支持廣播、NBMA、P2MP和P2P四種網絡類型。
l 鄰居發現和鄰接關係形成機製相同:OSPF路由器啟動後,便會通過OSPF接口向外發送Hello報文,收到Hello報文的OSPF路由器會檢查報文中所定義的參數,如果雙方一致就會形成鄰居關係。形成鄰居關係的雙方不一定都能形成鄰接關係,這要根據網絡類型而定,隻有當雙方成功交換DD報文,交換LSA並達到LSDB的同步之後,才形成真正意義上的鄰接關係。
l DR選舉機製相同:在NBMA和廣播網絡中需要選舉DR和BDR。
為了支持在IPv6環境中運行,指導IPv6報文的轉發,OSPFv3對OSPFv2做出了一些必要的改進,使得OSPFv3可以獨立於網絡層協議,而且隻要稍加擴展,就可以適應各種協議,為未來可能的擴展預留了充分的可能。
OSPFv3與OSPFv2不同主要表現在:
l 基於鏈路的運行
l 使用鏈路本地地址
l 鏈路支持多實例複用
l 通過Router ID唯一標識鄰居
l 認證的變化
l Stub區域的支持
l 報文的不同
l Option字段的不同
l LSA的異同
OSPFv2是基於網絡運行的,兩個路由器要形成鄰居關係必須在同一個網段。
OSPFv3的實現是基於鏈路,一個鏈路可以劃分為多個子網,節點即使不在同一個子網內,隻要在同一鏈路上就可以直接通話。
OSPFv3的路由器使用鏈路本地地址作為發送報文的源地址。一個路由器可以學習到這個鏈路上相連的所有其它路由器的鏈路本地地址,並使用這些鏈路本地地址作為下一跳來轉發報文。但是在虛連接上,必須使用全球範圍地址或者站點本地地址作為OSPFv3協議報文的源地址。
由於鏈路本地地址隻在本鏈路上有意義且隻能在本鏈路上泛洪,因此鏈路本地地址隻能出現在Link LSA中。
OSPFv3支持在同一鏈路上運行多個實例,實現鏈路複用並節約成本,如圖1所示。
Router A、Router B、Router C和Router D連接到同一個廣播網上,它們共享同一條鏈路且都能建立鄰居關係,通過在Router A的Eth1/1、Router B的Eth1/1、Router C的Eth1/2上指定實例1、在Router A的Eth1/1、Router B的Eth1/1、Router D的Eth1/3上指定實例2,實現了Router A、Router B和Router C可以建立鄰居關係,Router A、Router B和Router D可以建立鄰居關係。
這是通過在OSPFv3報文頭中添加Instance ID字段來實現的。如果接口配置的Instance ID與接收的OSPF v3報文的Instance ID不匹配,則丟棄該報文,從而無法建立起鄰居關係。
在OSPFv2中,當網絡類型為點到點或者通過虛連接與鄰居相連時,通過Router ID來標識鄰居路由器,當網絡類型為廣播或NBMA時,通過鄰居接口的IP地址來標識鄰居路由器。
OSPFv3取消了這種複雜性,無論對於何種網絡類型,都是通過Router ID來唯一標識鄰居。
OSPFv3協議自身不再提供認證功能,而是通過使用IPv6提供的安全機製來保證自身報文的合法性。所以,OSPFv2報文中的認證字段,在OSPFv3報文頭中被取消。
由於OSPFv3支持對未知類型LSA的泛洪,為防止大量未知類型LSA泛洪進入Stub區域,對於向Stub區泛洪的未知類型LSA進行了明確規定,隻有當未知類型LSA的泛洪範圍是區域或鏈路而且U比特沒有置位時,未知類型LSA才可以向Stub區域泛洪。
OSPFv3報文封裝在IPv6報文中,每一種類型的報文都是以一個16字節的報文頭部開始。
與OSPFv2一樣,OSPFv3的五種報文都有同樣的報文頭,隻是報文中的字段有些不同。
OSPFv3的LSU和LSAck報文與OSPFv2相比沒有什麼變化,但OSPFv3的報文頭、Hello、DD以及LSR報文中的字段與OSPFv2略有不同,報文的改變包括以下幾點:
l 版本號從2升級到3。
l 報文頭的不同:與OSPFv2報文頭相比,OSPFv3報文頭長度隻有16字節,去掉了認證字段但加了Instance ID字段。Instance ID字段用來支持在同一條鏈路上運行多個實例,且隻在鏈路本地範圍內有效,如果路由器接收到的Hello報文的Instance ID與當前接口配置的Instance ID不同,將無法建立鄰居關係。
l Hello報文的不同:與OSPFv2 Hello報文相比,OSPFv3 Hello報文去掉了網絡掩碼字段,增加了Interface ID字,用來標識發送該Hello報文的接口ID。
在OSPFv2中,Option字段出現在每一個Hello報文、DD報文以及每一個LSA中。
在OSPFv3中,Option字段隻在Hello報文、DD報文、Router LSA、Network LSA、Inter Area Router LSA以及Link LSA中出現。
OSPFv2的Option字段如下所示:
圖2 OSPFv2 Option字段格式
OSPFv3的Option字段如下所示:
圖3 OSPFv3 Option字段格式
從上圖可以看出,與OSPFv2相比,OSPFv3的Option字段增加了R比特、V比特。其中:
l R比特:用來標識設備是否是具備轉發能力的路由器。如果R比特置0,宣告該節點的路由信息將不會參加路由計算,如果當前設備是一個不想轉發非本地地址的報文,可以將R比特置0。
l V比特:如果V比特置0,該路由器或鏈路也不會參加路由計算。
OSPFv3有以下七種類型的LSA,下麵針對與OSPFv2 LSA異同點進行說明。
表1 OSPFv3 與OSPFv2 LSA的異同點
OSPFv2 LSA | OSPFv3 LSA | 與OSPFv2 LSA異同點說明 |
Router LSA | Router LSA | 名稱相同,作用也類似,但是不再描述地址信息,僅僅用來描述路由域的拓撲結構 |
Network LSA | Network LSA | |
Network Summary LSA | Inter Area Prefix LSA | 作用類似,名稱不同 |
ASBR Summary LSA | Inter Area Router LSA | |
AS External LSA | AS External LSA | 作用與名稱完全相同 |
無 | Link LSA | 新增LSA |
Intra Area Prefix LSA | 新增LSA |
OSPFv3新增了Link LSA和Intra Area Prefix LSA。
l Router LSA不再包含地址信息,使能OSPFv3的路由器為它所連接的每條鏈路產生單獨的Link LSA,將當前接口的鏈路本地地址以及路由器在這條鏈路上的一係列IPv6地址信息向該鏈路上的所有其它路由器通告。
l Router LSA和Network LSA中不再包含路由信息,這兩類LSA中所攜帶的路由信息由Intra Area Prefix LSA來描述,該類LSA用來公告一個或多個IPv6地址前綴。
LSA的泛洪範圍已經被明確地定義在LSA的LS Type字段,目前,有三種LSA泛洪範圍。
l 鏈路本地範圍:LSA隻在本地鏈路上泛洪,不會超出這個範圍,該範圍適用於新定義的Link LSA。
l 區域範圍:LSA的泛洪範圍僅僅覆蓋一個單獨的OSPFv3區域。Router LSA、Network LSA、Inter Area Prefix LSA、Inter Area Router LSA和Intra Area Prefix LSA都是區域範圍泛洪的LSA。
l 自治係統範圍:LSA將被泛洪到整個路由域,AS External LSA就是自治係統範圍泛洪的LSA。
在OSPFv2中,收到類型未知的LSA將直接丟棄。
OSPFv3在LSA的LS Type字段中增加了一個U比特位來位標識對未知類型LSA的處理方式:
l 如果U比特置1,則對於未知類型的LSA按照LSA中的LS Type字段描述的泛洪範圍進行泛洪;
l 如果U比特置0,對於未知類型的LSA僅在鏈路範圍內泛洪。
OSPFv3 LSA封裝在LSA頭的後麵,下麵將重點介紹OSPFv3與OSPFv2在LSA頭以及LSA內容上的不同點:
圖4 OSPFv2 LSA頭和OSPFv3 LSA頭格式對比
從圖4可以看出,與OSPFv2相比,OSPFv3的LSA頭部取消了Options字段,且Link State ID不再有具體的含義,而是由當前路由器隨機生成的,用來同Advertising Router、LS Sequence Number字段一同標識一個LSA。
OSPFv2中的LS Type長度為8比特,指定LSA的類型;OSPFv3的LSA Type字段由OSPFv2的8比特擴充為16比特,具體如圖5所示:
l U位:描述了路由器收到一個類型未知的LSA時如何處理,取值為0表示把類型未知LSA當成具有鏈路本地範圍的LSA一樣處理,取值為1表示按照S2/S1位標識的泛洪範圍來處理。
l S2/S1位:共同標識LSA的泛洪範圍,取值00表示LSA隻在產生該LSA的本地鏈路上泛洪;取值01表示LSA的泛洪範圍為產生該LSA的路由器所在區域;取值10表示LSA將在整個自治係統內進行泛洪;取值11保留。
l LSA Function Code:LSA類型編碼,描述LSA的類型,類型編碼取值與LSA類型的對應關係如下表所示。
表2 類型編碼取值與LSA類型對應關係
類型編碼取值 | LSA類型 |
1 | Router LSA |
2 | Network LSA |
3 | Inter Area Prefix LSA |
4 | Inter Area Router LSA |
5 | AS External LSA |
6 | Group Membership LSA |
8 | Link LSA |
9 | Intra Area Prefix LSA |
OSPFv2的Router LSA格式如下所示:
圖6 OSPFv2 Router LSA格式
OSPFv3的Router LSA格式如下所示:
如圖7所示,與OSPFv2相比,OSPFv3的Router LSA格式變化比較大:
l 新增了Options字段,用來標識該路由器支持的功能。
l 取消了用來描述路由器連接數量的連接數字段#Links。
l 對鏈路的描述方式發生改變,通過Interface ID、Neighbor Interface ID和Neighbor Router ID進行綜合描述。
與OSPFv2不同的字段解釋如下:
l W:(Wild-card):用於MOSPF,目前我司不支持。
l Interface ID:所描述鏈路的本地接口ID。
l Neighbor Interface ID:所描述鏈路的鄰居路由器的接口ID。
l Neighbor Router:所描述鏈路的鄰居路由器ID。
圖8 OSPFv2 Network LSA和OSPFv3 Network LSA格式對比
如圖8所示,OSPFv3的Network LSA中新增了Option字段,減少了Network mask字段。
當網絡類型為廣播網和NBMA時,OSPFv3的Network LSA僅僅描述了連接到鏈路上的所有路由器,包括DR本身,由於不包含Network mask字段,OSPFv3的Network LSA僅描述了拓撲信息,不再描述路由信息。
Inter Area Prefix LSA的LSA類型編碼為3,相當於OSPFv2的Network Summary LSA,通過PrefixLength、PrefixOptions以及Address Prefix來描述到達區域外的IPv6地址前綴的路徑信息,每一個Pv6地址前綴都會產生一個單獨的Inter Area Prefix LSA。
對於Stub區域,Inter Area Prefix LSA還可以用來描述缺省路由,描述缺省路由時前綴長度取值為0。
OSPFv2的Network Summary LSA格式如下所示:
圖9 OSPFv2 Network Summary LSA格式
OSPFv3的Inter Area Prefix LSA格式如下所示:
圖10 OSPFv3 Inter Area Prefix LSA格式
OSPFv3的Inter Area Prefix LSA與OSPFv2 Network Summary LSA不同字段解釋如下:
l PrefixLength:IPv6地址前綴長度。
l PrefixOptions:IPv6地址前綴選項,用來標識前綴的功能,根據前綴選項的設置,在路由計算過程中允許某些前綴被忽略,或者標識為不用重新公告。
l Address Prefix:IPv6地址前綴。
其中,前綴選項一個字節長度,格式如圖11所示:
l P(Propagate):傳播功能位,在NSSA前綴上設置,置1表示該前綴應該在NSSA區域邊界重新公告。
l MC(Multicast):多播功能位,置位表示該前綴應該包含在IPv6多播路由計算中。
l LA(Local Address):本地地址功能位,置位表示該前綴就是發出該LSA的路由器接口的IPv6地址。
l NU(No Unicast):非單播功能位,置位表示該前綴不會包括在IPv6單播路由計算中。
Inter Area Prefix LSA的LSA類型編碼為4,相當於OSPFv2中的ASBR Summary LSA。OSPFv2的ASBR Summary LSA格式與Network Summary LSA相同,如圖9所示。
OSPFv3的Inter Area Router LSA格式如圖12所示:
圖12 OSPFv3的Inter Area Router LSA格式
主要字段描述如下:
l Metric:到達區域外的目的路由器的路徑開銷。
l Destination Router ID:區域外的目的路由器的Router ID。
AS External LSA的LSA類型編碼為5,與OSPFv2中的AS External LSA作用相同。
OSPFv2的AS External LSA格式如圖13所示:
圖13 OSPFv2的AS External LSA格式
OSPFv3的AS External LSA格式如圖14所示:
圖14 OSPFv3的AS External LSA格式
如圖14所示,OSPFv3的AS External LSA與OSPFv2 AS External LSA不同字段解釋如下:
l Address Prefix、PrefixLength、PrefixOptions共同標記了一個自治係統外部的一個IPv6地址前綴。
l Referenced LS Type:引用的LSA的類型。如果該字段非0,則會有一個LSA與該LSA相關,Referenced LS Type 為與該LSA相關的LSA類型。
l Referenced Link State ID:引用的LSA的Link State ID,目前我司不支持。
Link LSA的LSA類型編碼為8,每個路由器都為它所連接的每條鏈路產生單獨的Link LSA。
通過使用Link LSA:
l 路由器可以把當前接口的鏈路本地地址向該鏈路上的所有其它路由器通告。
l 把自己在這條鏈路上的一係列IPv6地址信息向該鏈路上的所有其它路由器通告。
l 為Network LSA收集Option位。
報文格式如圖15所示:
主要字段解釋如下:
l Router Priority:路由器優先級。
l Options:代表當前路由器支持的可選性能。一個鏈路上的所有Link LSA的能力並集是Network LSA的能力。
l Link Local Interface Address:鏈路本地接口地址。
l # prefixes:該LSA中所包含的IPv6地址前綴個數。
Link LSA的LSA類型編碼為9,OSPFv3的設計思想之一就是拓撲信息和路由信息分離:計算拓撲的基本LSA(Router LSA和Network LSA)中不再含有路由信息,所以原來OSPFv2中這兩類LSA中所攜帶的路由信息由新的LSA來描述,於是引入了Intra Area Prefix LSA。
路由器使用Intra Area Prefix LSA來公告一個或多個IPv6地址前綴,這些地址前綴信息描述如下路由信息:
l 描述路由器自身的路由信息;
l 描述路由器連接到的一個Stub網絡的路由信息;
l 描述路由器連接到的一個傳輸網絡的路由信息。
報文格式如圖16所示:
圖16 OSPFv3 Intra Area Prefix LSA
Intra Area Prefix LSA描述了Router LSA和Network LSA所攜帶的路由信息,因此在Intra Area Prefix LSA中需要標明該LSA引用的Router LSA或Network LSA,這是通過Referenced LS Type、Referenced Link State ID和Referenced Advertising Router字段來聯合標識的。
主要字段的解釋如下:
l # Prefixes:包含的IPv6地址前綴的個數。
l Referenced LS Type:引用LSA的類型,取值為1表明該LSA與Router LSA相關,取值為2表明該LSA與Network LSA相關。
l Referenced Link State ID:引用LSA的Link State ID。如果引用的是Router LSA,此字段值為0;如果引用的是Network LSA,此字段值為DR在該條鏈路上的Interface ID。
l Referenced Advertising Router:引用LSA的發布路由器。如果引用的是Router LSA,此字段值為產生該LSA路由器的Router ID;如果引用的是Network LSA,此字段值為DR的Router ID。
圖17 OSPFv3典型組網案例組網圖
l 使用OSPFv3路由協議實現網絡的互通。
l 所有的路由器都運行OSPFv3,整個自治係統劃分為3個區域。其中Router B和Router C作為ABR來轉發區域之間的路由。
l 要求將Area2配置為Stub區域,減少通告到此區域內的LSA數量,但不影響路由的可達性。
l RFC 2328:OSPF Version 2
l RFC 2740:OSPF for IPv6
Copyright ©2012 杭州華三通信技術有限公司 版權所有,保留一切權利。
非經本公司書麵許可,任何單位和個人不得擅自摘抄、複製本文檔內容的部分或全部,並不得以任何形式傳播。
本文檔中的信息可能變動,恕不另行通知。