OSPF路由協議是鏈路狀態型路由協議,這裏的鏈路即設備上的接口。鏈路狀態型路由協議基於連接源和目標設備的鏈路狀態作出路由的決定。鏈路狀態是接口及其與鄰接網絡設備的的關係的描述,接口的信息即鏈路的信息,也就是鏈路的狀態(信息)。這些信息包括接口的IPv6前綴(prefix)、網絡掩碼、接口連接的網絡(鏈路)類型、與該接口在同一網絡(鏈路)上的路由器等信息。這些鏈路狀態信息由不同類型的LSA攜帶,在網絡上傳播。
路由器把收集到的LSA存儲在鏈路狀態數據庫中,然後運行SPF算法計算出路由表。鏈路狀態數據庫和路由表的本質不同在於:數據庫中包含的是完整的鏈路狀態原始數據,而路由表中列出的是到達所有已知目標網絡的最短路徑的列表。
OSPF協議是爲IP協議提供路由功能的路由協議。OSPFv2(OSPF版本2)是支持IPv4的路由協議,爲了讓OSPF協議支持IPv6,技術人員開發了OSPFv3(OSPF版本3),OSPFv3由RFC2740定義。
OSPFv3與OSPFv2
數據包結構
IPv6 使用的LSA類型
配置OSPFv3
NBMA配置示例
配置OSPFv3認證
OSPFv3與OSPFv2
無論是OSPFv2還是OSPFv3,OSPF協議的基本運行原理是沒有區別的,然而,由於IPv4和IPv6協議意義的不同,地址空間大小的不同,它們之間的不同之處也是必然存在的。
相似之處
(1)路由器類型相同。包括內部路由器(internal router)、骨幹路由器(backbone router)、區域邊界路由器(area border router)和自治系統邊界路由器(autonomous system boundary router)。
(2)支持的區域類型相同。包括骨幹區域、標準區域、末節區域、NSSA和完全末節區域。
(3)都使用SPF算法。
(4)DR和BDR的選舉過程相同。
(5)接口類型相同。包括點到點鏈路、點到多點鏈路、BMA鏈路、NBMA鏈路和虛擬鏈路。
(6)LSA的傳播和老化機制相同。
(7)雖然OSPFv3的數據包攜帶地址空間更大的IPv6地址,但大多數數據包都兼容OSPFv2。
(8)基本數據包類型相同,都使用Hello、DBD、LSR、LSU和LSA。
(9)鄰居的發現和鄰居關係的建立機制相同。
(10)度量值的計算方法相同,都使用鏈路開銷。
不同之處
(1)術語。大多數用在OSPFv2中的術語都可以用來描述OSPFv3中相同的概念。但其中有一個術語在OSPFv2中和在OSPFv3中具有不同的含義。在OSPFv3中,用"鏈路(link)"取代了OSPFv2中的"網絡(network)"或"子網(subnet)"的概念。"接口"與"鏈路"相連。一條"鏈路"可以有多個IP地址,如果兩個接點與同一個鏈路相連,即使它們不在同一個IP子網(IPv6前綴)上,也能夠通過該"鏈路"直接通話。
(2)OSPFv3進程運行在鏈路上,而不象OSPFv2進程那樣運行在子網上。
(3)一條鏈路上可以運行多個OSPF實例(instance)。例如,可以使用兩個實例讓一條鏈路運行在兩個區域內。
(4)IPv6地址信息僅在LSU的載荷(payload)中攜帶。
(5) 路由器ID、區域ID和LSA鏈路狀態ID值仍然使用32比特表達,因此不能使用IPv6地址表示。
(6) OSPFv3總是使用路由器ID來確認鄰接路由器的身份。而OSPFv2在NBMA和BMA網絡中,使用路由器IP地址確認鄰接路由器的身份;在點到點網絡和虛鏈路上使用路由器ID確認鄰接路由器身份。
(7)LSA的傳播範圍(flooding scope)定義爲如下3種:
本鏈路範圍(link-local scope)-- LSA僅在本鏈路範圍內傳播。
區域範圍(area scope)-- LSA僅在一個區域內傳播。
AS範圍(AS scope)-- LSA在整個AS內傳播。
(8)使用本鏈路地址(link-local address)發現鄰居和完成自動配置等工作。IPv6路由器並不轉發源地址是本鏈路地址的數據包。OSPFv3認爲每臺路由器已經爲它相接的每個物理網段(物理鏈路)分配了本鏈路地址。
(9)認證方式不同。運行OSPFv3的路由器使用IPsec認證。因此在OSPFv3的報文頭中不包含認證信息(參見4.2小節)。
(10)數據包結構不同(參見4.2小節)。
(11)LSA類型不同(參見4.4小節)。
(12)LSA結構不同(參見RFC2740)。
(13)一個接口可以配置多個IPv6地址前綴,缺省地,這些前綴都被注入到OSPFv3中,不能人爲地選擇哪些前綴被注入,哪些前綴不被注入。
(14)如果路由器的接口上設置了IPv4地址,或者設置了環回接口,OSPFv3則自動選擇IPv4地址作爲路由器ID,否則需要爲路由器設置ID號。
數據包結構
OSPFv3協議直接運行在IPv6上,因此,OSPFv3的數據由IPv6報文攜帶。在IPv6報文頭的’下一個報文頭’字段中,用協議號89代表該數據包中攜帶的是OSPFv3的數據。
IPv6的報頭結構如圖4-1所示,各字段的含義如下:
Version(版本號):參數值爲6,代表IPv6報頭,4比特長。
Priority(優先級):4比特長。發送方可以使用該值爲其發出的數據賦予優先級。
Flow label(流標籤):發送放可以用它標誌屬於同一個流的數據。
Payload length(載荷長度):表示報頭後面攜帶的有效數據長度。
Next header(下一個報頭):表示IPv6報頭後面的報頭類型。89代表OSPF協議。
Hops(跳數限制):表示報文所能經由的最大路由器數。
Source address(源地址):發送數據方地址。
Destination address(目的地地址):接收數據方地址。
圖 4-1 IPv6報頭格式
緊跟着IPv6報文頭的後面是OSPFv3的報文頭,其格式如圖4-2所示。
圖 4-2 OSPFv3報文頭
來源:考試大 - 思科認證考試
其中:
Version# -- 代表OSPF的版本號,其值爲3。
Type -- 代表OSPF數據報類型。OSPF數據報的類型包括:
Hello包,類型代碼爲1。
DDP,類型代碼爲2。
LSR,類型代碼爲3。
LSU,類型代碼爲4。
LSAck,類型代碼爲5。
Packet length -- 以字節爲單位的OSPF數據報的長度,包含報頭部分。
Router ID -- 發送該數據包的路由器ID號。
Area ID -- 該數據報所屬的區域。
Checksum -- 整個OSPF數據報的校驗和。
Instance ID -- 實例標誌號。
OSPFv3報頭的最後8比特保留,值總爲0。
Hello 數據包
OSPFv3使用兩個組播地址發送各種數據包。一個是FF02::5,代表所有運行OSPF協議的路由器都應該處理的數據包;另一個是FF02::6,代表DR和BDR路由器應該處理的數據包。
Hello數據包使用的地址是FF02::5。Hello數據包定期在所有運行了OSPF的接口上發送,用來建立和維護鄰居關係。連接在同一條鏈路上的路由器必須對某些參數協商一致才能形成鄰居關係。這些參數包含在Hello數據包中。Hello數據包中也包含用來選舉DR/BDR的參數。Hello數據包的結構如圖4-3所示。
圖 4-3 Hello 數據包結構
Hello數據包中個字段的含義如下:
Interface ID -- 接口標誌符。路由器的每一個接口都有一個唯一的標誌符。
Router priority -- 路由器優先級。路由器根據該值選舉DR/BDR。
Options -- 該24比特字段出現在Hello包、DDP和某些LSA中,OSPF路由器使用該字段實現某些與其他路由器通信的能力(詳見RFC2740)。
Hello interval -- 發送Hello包的週期時間。
Router dead interval -- 鄰居路由器認爲該路由器的失效時間。
Designated router ID -- DR路由器的ID。
Backup designated router ID -- BDR路由器的ID。
Neighbors ID -- 鄰居列表。每個鄰居ID佔4字節。