OSPFv3學習
- 2020 年 1 月 10 日
- 筆記
OSPFv3 VS OSPFv2
OSPF是一種鏈路狀態路由協議。它具有標準開放、收斂迅速、無環路、便於層級化設計等眾多優點。IPv4網路中廣泛使用的OSPFv2協議由於在報文內容、運行機制等方面與IPv4地址聯繫得過於緊密,大大制約了它的可擴展性和適應性。在IPv6環境中,為了使OSPF更好的應用,同時保留原有的眾多優點,因此,在OSPFv2的基礎上作了多方面的修改後產生了OSPFv3協議。
OSPFv3相比OSPFv2作出的改進可以分為幾個方面來描述。
1.OSPFv3獨立於網路協議
1) OSPFv3基於鏈路運行
OSPFv2協議是基於子網運行的,鄰居之間形成鄰接關係的必要條件之一就是兩端的IP地址屬於同一網段而且掩碼相同。而OSPFv3協議基於鏈路運行,與具體的IPv6地址、前綴分離開,即使同一鏈路上的不同節點具有不同網段的IPv6地址時,協議也可以正常運行。IPV6網路中,將介面地址都看成葉子,只有鏈路本身是樹榦。
2)編址性語義的取消
在OSPFv2中,協議分組和LSA中的許多欄位都是來自於網路上的某個IP地址、掩碼或某個IP子網號。報文的數據內容決定了OSPFv2的多種機制必須基於IPv4來進行,包括鄰居路由器標識、鄰居建立等等。
在OSPFv3中取消了這些編址性語義,而只保留協議運行必須的核心內容。比如,Router-LSA和Network-LSA中不再包含網路地址,而只用於傳遞拓撲資訊;LSA的Link State ID依然保留32位長度的IPv4地址格式,但只是一個編號,不再包含地址資訊;鄰居路由器,包括DR和BDR,都是用Router ID來標識。這些保證了OSPFv3協議能夠獨立於網路協議運行。
3)鏈路本地地址的使用
OSPFv2協議要求,每一個運行OSPF的介面都必須有一個IPv4地址,即使是在網路中僅僅用於傳輸轉發的中間節點也必須如此,協議的運行和路由的計算都依賴於這個地址。而在IPv6中,每個介面都會分配本地鏈路地址(link-local address),這個地址只在本地鏈路有效,並不會在整個網路中傳播。OSPFv3使用這個本地鏈路地址作為協議分組發送的源地址(虛連接除外)和路由的下一跳,在網路規劃時就不需要在大量的中間節點規划子網,同樣也不需要專門配置IPv6地址。這樣,一方面可以節省大量的全局地址,另一方面可以說協議的運行獨立於IPv6,可以方便的對協議進行擴展,實現組播選路等其他的功能。
4)使用專門的LSA來發布路由前綴資訊
OSPFv2通過Router-LSA和Network-LSA來發布區域內的路由資訊和計算拓撲,所以OSPFv2的拓撲結構與IPv4網路資訊是密不可分的。為了改變這種狀況,在OSPFv3中,Router-LSA和Network-LSA中僅保留拓撲資訊;同時增加了Intra-Area-Prefix-LSA和Link-LSA,分別用於傳遞區域內路由前綴和傳遞鏈路範圍內的IPv6前綴。拓撲資訊與前綴資訊的分離,使得OSPFv3的運行更加獨立於網路協議。
2. OSPFv3的結構更加清晰
1) OSPFv3取消了協議報文的驗證欄位
在OSPFv2中使用了專門的驗證欄位。而在OSPFv3中使用IPv6標準的驗證方式(IP AH和IP ESP)來保證資訊傳遞的安全性,這樣一來,既減輕了協議開銷,也在一定程度上簡化了協議處理流程。
2) OSPFv3更加明確了LSA泛洪範圍
在OSPFv3中,明確了LSA泛洪的三種範圍:本地鏈路範圍(Link-local scope)、區域範圍(Area scope)、AS範圍(AS scope),並且在LS_Type中增加了專門的欄位進行說明。因此,OSPFv3協議在處理LSA泛洪時不再像OSPFv2中需要根據不同的LSA類型來判斷LSA泛洪的範圍,而是直接根據專門的欄位進行處理就可以了。
3. OSPFv3的可擴展性和適應性更佳
1) OSPFv3支援多實例
OSPFv2協議規定,不同的實例必須運行在不同的鏈路上。OSPFv3協議則提供了對多實例的明確支援,通過在協議報文中增加「instance ID」欄位,同時規定,接收報文時對該欄位進行判斷,只有實例號匹配的報文才會處理,否則丟棄。這樣,即使是在同一鏈路上也可以運行多個OSPF實例了,而且獨立運行不會互相影響。
2)對未知類型LSA的處理
在OSPFv2中,當路由器收到自己不支援的LSA時,僅僅是作簡單的丟棄處理。這樣,當能力不同的路由器混合組網時,整個網路的處理能力就會受限於能力最低的路由器。最為突出的是在廣播(或NBMA)網路中,如果DR不支援可選類型的LSA,則DR不能處理的LSA就不能在非DR路由器之間交互了。
在OSPFv3中,對未知類型的LSA的處理作了新的規定:根據LSA中特定欄位來進行判斷,可以將其泛洪範圍限定在本地鏈路範圍內,也可以將其當作已知類型的LSA,根據其中的「泛洪範圍」欄位發送出去。這樣一來,即使網路中某些路由器的能力有限也不會影響某些特殊LSA的傳播,從而具備了更好的適應性。
4.其他
OSPFv3針對OSPFv2在設計上的缺陷做了兩大改進:
一是在多路訪問型的鏈路上優化了DR的選舉範圍,如果鏈路上有過多的路由器,都同DR形成鄰接,則DR的負擔會很重。OSPFv3採用獨有的實例ID欄位,在群內各介面設置相同的實例ID,群間相異,配置起來簡單。
二是通過設計兩種新的LSA(8和9),減少了不必要的SPF計算。SPF演算法的特點是每一次啟用都會增加路由器資源佔用並造成網路的短時中斷,所有的樹榦都必須重計算一次,算完了才能掛葉子。OSPFv2和OSPFv3在收到LSA1和2時都會啟動SPF演算法,在OSPFv3的LSA1和2中不僅包含了該鏈路的拓撲類型狀態還附帶了鏈路上IPV4地址資訊,拓撲改變或地址改變都會觸動路由器產生新的LSA,但真正需要SPF的是拓撲變化資訊,地址的改變不應該去觸動SPF(地址只是葉子)。OSPFv3的LSA1和2中不攜帶鏈路上的IPV6地址資訊,改變鏈路上埠的地址不會觸動SPF,這也就減少了計算次數。
OSPFV3引入的LSA
OSPFv3常用的LSA有八種類型:路由器LSA(LSA1)、網路LSA(LSA2)、區間前綴LSA(LSA3)、區間路由器LSA(LSA4)、AS外部LSA(LSA5)、NSSA外部LSA(LSA7)、鏈路LSA(LSA8)、區內前綴LSA(LSA9),以上LSA除LSA8和9外,功能和洪泛的範圍都與OSPFv2相同。不同的只是LSA數據結構上做了少量調整和優化(如前所述LSA1和2的數據結構區別最大,也導致了兩種新LSA的產生)。
OSPFv3添加了2類新LSA:Link-LSA(類型8)和Intra-Area-Prefix-LSA(類型9)。其中,Link-LSA有三個作用:
1. 在鏈路上通告本地鏈路地址給其它鄰居
2. 通告本地鏈路上的鄰居關於與自己本地鏈路相關聯的ipv6的前綴列表
3. 通告鏈路狀態的選項集合
其實這個鏈路範圍是以路由器為邊界的,但是可能一個鏈路上有多個路由器,因此可能會存在多個前綴一個鏈路的情況,這個時候就是特點2的體現了,用於區分不同的鏈路,IPV6里一個鏈路就是一個小網段,比站點小,站點比組織小,組織比國家小。
LSA8主要攜帶生成者在該埠上的所有IPV6地址資訊,洪泛範圍是鏈路本地,及收到直連鄰居發出的LSA8將不通告給任何人。
當然,只在本地鏈路上傳遞資訊是不夠的,還需要在area範圍內傳播,於是有了Intra-Area-Prefix-LSA(域內前綴LSA)。Intra-Area-Prefix-LSA是在area範圍內通告路由前綴。
LSA9攜帶的是本路由器(或DR的手下)各直連鏈路上的網路前綴和各前綴所屬鏈路的對應(前綴在哪條鏈路上)資訊,它的洪泛範圍是本AREA內。
OSPFv3也使用組播方式洪泛LSA,非DR用FF02::5,DR用FF02::6。