華為設備OSPF理論基礎和實現實驗(迎接IPv6數通時代的重要協議)
關於OSPFv3的詳盡描述出現在RFC2740中,OSPFv3是OSPF Version 3的簡稱,OSPFv3是運行於IPv6的OSPF路由協議,OSPFv3在OSPFv2基礎上進行了修改,是一個獨立的路由協議。當然我們可以這樣認為OSPFv3的關系和OSPFv2的關系類似於RIPng和RIPv2的關系,OSPFv3依舊使用SPF算法、LSA泛洪、DR機制、區域和特殊區域等,同時OSPFv3也不向後兼容OSPFv2.
除了相同點OSPFv3和OSPFv2也有很多不同點,比如OSPFv3不再支持認證(RIPng也是如此),OSPFv3增加和改變了某些LSA的功能,比如大部分OSPFv3的LSA不在攜帶前綴信息,LSA的結構也做了較大改變,在OSPFv3中也增加了鏈路本地地址的使用,這一點和RIPng相同,這些地址總是以FE80::/10開頭的)作為源地址和下一跳地址出現;OSPFv3增加了每個鏈路上實例的概念,在同一個鏈路上實例相同的OSPF進程才可以建立鄰居。
17.3.1 OSPFv3基礎
OSPFv3的一些基礎知識:
? OSPFv3協議號仍然為89,在IPv6 Next Header裏標識。
? OSPFv3以組播地址發送協議報文,而IPv6 Hop Limit限定為1;OSPFv3中Virtual-Link則通過單播發送更新
? OSPFv3依舊采用組播方式(也可以通過單播方式)發送Hello報文:AllSPfRouters:FF02::5和AllDRouters:FF02::6
圖17-14 OSPFv3區域示意圖
通過包頭的TYPE字段來標識5種報文類型,其作用如表17-4所示,一個OSPFv3的報文由OSPFv3的報頭和具體的報文類型組成,如圖17-15所示
圖17-15 OSPFv3的報文頭部
OSPFv3的協議包頭中各個字段按順序描述如下:
? Version,1字節。表示OSPF版本號,設置為3。
? Packet length,2字節長。OSPF協議包的長度,單位為字節。包括OSPF標準包頭長度。
? Router ID,4字節長。發送此報文的路由器的Router ID。
? Area ID,32位區域號。標識這個包屬於哪個區域。每個OSPF包只能屬於一個區域。通過virtual link傳輸的OSPF包標記骨幹區域號。
? Checksum,使用IPv6標準16位校驗和。校驗內容包括前導的IPv6偽頭和OSPF協議包頭。偽頭中的Upper-Layer Packet Length字段值等於OSPF包頭中的Packet length字段值。如果包長度不是16位的整數倍,則用0填充後進行計算。計算校驗和時校驗和字段本身設置為0。
? Instance ID,1字節。缺省值為0。允許在一個鏈路上運行多個OSPFv3的實例。每個實例應該具有唯一的Instance ID。Instance ID只在本地鏈路上有意義。如果接收到的OSPF包的Instance ID和本接口的Instance ID不同,則丟棄這個包。
? 保留位,8位的保留位。必須為0。
表17-4 OSPFv3的報文類型和作用
報文類型 報文功能
Hello報文 周期性發送,用來發現和維持OSPFv3鄰居關系。
DD報文(Database Description packet) 描述了本地LSDB的摘要信息,用於兩臺設備進行數據庫同步。
LSR報文(Link State Request packet) 用於向對方請求所需的LSA。
設備只有在OSPFv3鄰居雙方成功交換DD報文後才會向對方發出LSR報文。
LSU報文(Link State Update packet) 向對方發送其所需要的LSA。包含了具體的更新內容
LSAck報文(Link State Acknowledgment packet) 用來對收到的LSA進行確認。OSPF中顯式確認方式
OSPFv3的魅力所在更集中於LSA,OSPFv3的重要的LSA類型包括1類,2類,3類,4類,5類,7類,額外的增加了新的8類和9類LSA,關於這部分的討論並不在本書闡述(請讀者關註乾頤堂系列華為叢書的HCNP和HCIE部分),我們僅在此處列出各種LSA的基本功能,如表17-5所示。
表17-5 OSPFv3的LSA類型
LSA類型 LSA作用
Router-LSA(Type1) 設備會為每個運行OSPFv3接口所在的區域產生一個LSA,描述了設備的鏈路狀態和開銷,在所屬的區域內傳播。
Network-LSA(Type2) 由DR產生,描述本鏈路的鏈路狀態,在所屬的區域內傳播。
Inter-Area-Prefix-LSA(Type3) 由ABR產生,描述區域內某個網段的路由,並通告給其他相關區域。
Inter-Area-Router-LSA(Type4) 由ABR產生,描述到ASBR的路由,通告給除ASBR所在區域的其他相關區域。
AS-external-LSA(Type5) 由ASBR產生,描述到AS外部的路由,通告到所有的區域(除了Stub區域和NSSA區域)。
NSSA LSA(Type7) 由ASBR產生,描述到AS外部的路由,僅在NSSA區域內傳播。
Link-LSA(Type8) 每個設備都會為每個鏈路產生一個Link-LSA,描述到此Link上的link-local地址、IPv6前綴地址,並提供將會在Network-LSA中設置的鏈路選項,它僅在此鏈路內傳播。
Intra-Area-Prefix-LSA(Type9) 每個設備及DR都會產生一個或多個此類LSA,在所屬的區域內傳播。
? 設備產生的此類LSA,描述與Route-LSA相關聯的IPv6前綴地址。
? DR產生的此類LSA,描述與Network-LSA相關聯的IPv6前綴地址。
17.3.2 OSPFv3報文格式
在上一小節,我們討論了OSPFv3報文的頭部,接下來我們來查看OSPFv3具體的報文。
1.Hello報文
Hello報文作用參照表17-4,報文結構參見圖17-16
圖17-16 OSPFv3的Hello報文
該報文各字段含義:
? Interface ID: 接口標識, 在路由器上唯一標識接口
? Rtr Priority: 路由器優先級
? HelloInterval: 發送Hello 報文的間隔
? RouterDeadInterval: 此計時器超時後, 鄰居Down掉
? Neighbor ID: 鄰居的Router ID
? Options: V6:為0時, 不參加路由計算
? E-在Hello報文中, 此位為0時, 表示此區域不傳播AS-External-LSA,E為0是,表示接收AS外部LSA。
? MC-是否支持組播
? N-Type-7 LSA 處理相關(NSSA特殊區域,不在本書討論範圍)
? R-代表起源設備是否是活動的,如果該位被清除了,那麽該節點不能被OSPF計算
? DC-該為代表路由器處理按需鏈路的能力
2.DBD數據庫描述報文
DBD報文作用參照表17-4,DBD報文的結構參見圖17-17
圖17-17 OSPFv3的DBD報文結構
該報文各字段含義:
? Options:與Hello報文中的Options相同
? Interface MTU:本地接口的MTU值
? I: Initial,初始化位,為1時表明是第一個DD報文
? M: More,表明是否還有更多的DBD報文
? MS:主/從位(Master/Slave),為1時,表明為主(Master)
? DD sequence number:DD報文的序列號,用於隱式確認
? List of LSA Header:LSA頭部的集合, 用於接受方檢查LS數據庫
3.LSR報文
LSR報文的作用參見表17-4,LSR報文的結構參見圖17-18
圖17-18 OSPFv3的LSR報文結構
該報文各字段含義:
? LS Type,鏈路狀態類型(包括1類、2類、3類、4類、5類、7類、8類、9類LSA等)
? Link State ID, LSA的標識
? Advertising Router,通告路由器,產生LSA的設備
4.LSU
鏈路狀態更新的作用參見表17-4,LSU的報文結構參見圖17-19
圖17-19 OSPFv3的LSU報文結構
內容為具體的LSA條目
5.LSAck
鏈路狀態確認報文作用參見表17-4,LSAck的報文結構參見圖17-20
圖17-20 OSPFv3的LSAck報文
17.3.3 OSPFv3基本配置實例
我們在圖17-21上實施OSPFv3的配置,使得全網所有路由器學習到相互的IPv6路由,在本實例中我們僅僅創建area 0。
圖17-21 OSPFv3實施拓撲圖
[R1]OSPFv3 //啟動OSPFv3進程,默認的進程ID為1
[R1-OSPFv3-1]router-id 11.1.1.1 //OSPFv3的路由器ID為一個IPv4格式的標識,默認情況下如果該設備僅僅配置了IPv6協議棧,而沒有配置IPv4地址,那麽OSPFv3不會得到OSPFv3的路由器ID,那麽此時OSPFv3進程無法啟動,強烈推薦讀者在現實網絡手工創建路由器ID
[R1-OSPFv3-1]area 0 //創建OSPFv3的骨幹區域
[R1-OSPFv3-1-area-0.0.0.0]q
[R1-OSPFv3-1]
[R1-OSPFv3-1]int s2/0/0
[R1-Serial2/0/0]OSPFv3 1 area 0 ?
instance Interface instance
<cr> Please press ENTER to execute command
[R1-Serial2/0/0]OSPFv3 1 area 0 //使能物理接口的OSPFv3放到骨幹區域中,同時該接口的網絡也會被通告出去
[R1-Serial2/0/0]int lo0
[R1-LoopBack0]OSPFv3 1 area 0
[R1-LoopBack0]int g0/0/0
[R1-GigabitEthernet0/0/0]OSPFv3 1 area 0
#
[R2]OSPFv3
[R2-OSPFv3-1]router-id 22.1.1.1
[R2-OSPFv3-1]area 0
[R2-OSPFv3-1-area-0.0.0.0]int g0/0/0
[R2-GigabitEthernet0/0/0]OSPFv3 1 area 0
[R2-GigabitEthernet0/0/0]int lo0
[R2-LoopBack0]OSPFv3 1 area 0
#
[R3]OSPFv3
[R3-OSPFv3-1]router-id 33.1.1.1
[R3-OSPFv3-1]area 0
[R3-OSPFv3-1-area-0.0.0.0]int lo0
[R3-LoopBack0]OSPFv3 1 area 0
[R3-LoopBack0]int g0/0/0
[R3-GigabitEthernet0/0/0]OSPFv3 1 area 0
#
[R4]OSPFv3
[R4-OSPFv3-1]router-id 44.1.1.1
[R4-OSPFv3-1]area 0
[R4-OSPFv3-1-area-0.0.0.0]int lo0
[R4-LoopBack0]OSPFv3 1 area 0
[R4-LoopBack0]int s2/0/0
[R4-Serial2/0/0]OSPFv3 1 area 0
驗證OSPFv3的鄰居
<R1>display OSPFv3 peer //R1上正常的建立了三個鄰居
OSPFv3 Process (1)
OSPFv3 Area (0.0.0.0)
Neighbor ID Pri State Dead Time Interface Instance ID
22.1.1.1 1 Full/Backup 00:00:31 GE0/0/0 0
33.1.1.1 1 Full/DROther 00:00:35 GE0/0/0 0
44.1.1.1 1 Full/- 00:00:36 S2/0/0 0
<R1>display OSPFv3 lsdb //驗證OSPFv3數據庫的狀態,關於細節我們在後續華為書籍描述和討論
* indicates STALE LSA
OSPFv3 Router with ID (11.1.1.1) (Process 1)
Link-LSA (Interface GigabitEthernet0/0/0)
Link State ID Origin Router Age Seq# CkSum Prefix
0.0.0.3 11.1.1.1 1082 0x80000001 0xa563 1
0.0.0.3 22.1.1.1 0891 0x80000001 0x7c2b 1
0.0.0.3 33.1.1.1 0866 0x80000001 0xf12d 0
Link-LSA (Interface Serial2/0/0)
Link State ID Origin Router Age Seq# CkSum Prefix
0.0.0.14 11.1.1.1 1094 0x80000001 0xe825 1
0.0.0.13 44.1.1.1 0956 0x80000001 0x2d2f 1
Router-LSA (Area 0.0.0.0)
Link State ID Origin Router Age Seq# CkSum Link
0.0.0.0 11.1.1.1 0860 0x80000009 0xff69 2
0.0.0.0 22.1.1.1 0860 0x80000006 0xf1fa 1
0.0.0.0 33.1.1.1 0860 0x80000005 0x9052 1
0.0.0.0 44.1.1.1 0946 0x80000004 0x5342 1
Network-LSA (Area 0.0.0.0)
Link State ID Origin Router Age Seq# CkSum
0.0.0.3 11.1.1.1 0860 0x80000002 0x4681
Intra-Area-Prefix-LSA (Area 0.0.0.0)
Link State ID Origin Router Age Seq# CkSum Prefix Reference
0.0.0.1 11.1.1.1 0855 0x8000000c 0x6709 2 Router-LSA
0.0.0.2 11.1.1.1 0859 0x80000002 0x4c13 1 Network-LSA
0.0.0.1 22.1.1.1 0860 0x80000004 0x55ac 1 Router-LSA
0.0.0.1 33.1.1.1 0858 0x80000003 0xe4f5 1 Router-LSA
0.0.0.1 44.1.1.1 0940 0x80000004 0x847b 2 Router-LSA
<R1>display IPv6 routing-table protocol OSPFv3 //驗證OSPFv3得到的路由表
Public Routing Table : OSPFv3
Summary Count : 6
OSPFv3 Routing Table‘s Status : < Active >
Summary Count : 3
Destination : 2022::2 PrefixLength : 128
NextHop : FE80::2E0:FCFF:FEE9:98F Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
Destination : 2033::3 PrefixLength : 128
NextHop : FE80::2E0:FCFF:FEE7:1F8A Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
Destination : 2044::4 PrefixLength : 128
NextHop : FE80::E0:FCB3:3FCA:1 Preference : 10
Cost : 48 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : Serial2/0/0 Flags : D
OSPFv3 Routing Table‘s Status : < Inactive > //如下幾條OSPFv3學習的路由是inactive的,即沒有放入OSPFv3的路由表,這是因為如下的路由被通告到了OSPFv3,但是由於OSPFv3的內部路由優先級為10,並不如直連路由的優先級0優先,故而為inactive
Summary Count : 3
Destination : 2011::1 PrefixLength : 128
NextHop : :: Preference : 10
Cost : 0 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : LoopBack0 Flags :
Destination : 2014:: PrefixLength : 64
NextHop : :: Preference : 10
Cost : 48 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : Serial2/0/0 Flags :
Destination : 2123:: PrefixLength : 64
NextHop : :: Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags :
<R2>tracert IPv6 2044::4 //驗證數據包的通斷情況,此時R2的數據報文可以正確的轉發到R4的環回口
traceroute to 2044::4 30 hops max,60 bytes packet
1 2123::1 20 ms 10 ms 10 ms
2 2044::4 40 ms 10 ms 10 ms
17.3.4 OSPFv3實例ID實例
OSPFv3的報文頭部增加了實例ID字段,該字段必須相同才可以建立鄰居和更新路由,該字段可以用於在一個多點接入網絡控制鄰居關系的多樣性
[R3-GigabitEthernet0/0/0]undo OSPFv3 1 area 0 //去掉R3物理接口的OSPFv3配置,其中實例部分並沒顯示,它為整數形式,取值範圍是0~255,缺省值是0
[R3-GigabitEthernet0/0/0]OSPFv3 1 area 0 instance 1 //修改該接口的實例從默認的0變為實例1,那麽此時該設備發送的OSPFv3報文的實例ID不同於R1和R2,所以鄰居會消失
[R3-GigabitEthernet0/0/0]dis OSPFv3 peer //OSPFv3的鄰居已經消失
[R3-GigabitEthernet0/0/0]
[R3]display OSPFv3 interface GigabitEthernet 0/0/0 //通過該命令讀者可以看到實例ID
GigabitEthernet0/0/0 is up, line protocol is up
Interface ID 0x3
Interface MTU 1500
IPv6 Prefixes
FE80::2E0:FCFF:FEE7:1F8A (Link-Local Address)
OSPFv3 Process (1), Area 0.0.0.0, Instance ID 1 //此位置的OSPFv3實例為1
Router ID 33.1.1.1, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 33.1.1.1
Interface Address FE80::2E0:FCFF:FEE7:1F8A
No backup designated router on this link
Timer interval configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:03
Neighbor Count is 0, Adjacent neighbor count is 0
Interface Event 2, Lsa Count 1, Lsa Checksum 0xf12d
Interface Physical BandwidthHigh 0, BandwidthLow 1000000000
查看R1,我們預期R1將不會和R3建立鄰居
<R1>display OSPFv3 peer
OSPFv3 Process (1)
OSPFv3 Area (0.0.0.0)
Neighbor ID Pri State Dead Time Interface Instance ID
22.1.1.1 1 Full/Backup 00:00:40 GE0/0/0 0
44.1.1.1 1 Full/- 00:00:37 S2/0/0 0
讀者也可以觀察到最後一列中的實例ID為0。觀察完畢之後請讀者修改R1和R2的接口實例ID為1
[R1-GigabitEthernet0/0/0]undo OSPFv3 1 area 0.0.0.0
[R1-GigabitEthernet0/0/0]OSPFv3 1 area 0 instance 1
#
[R2-GigabitEthernet0/0/0]undo OSPFv3 1 area 0.0.0.0
[R2-GigabitEthernet0/0/0]OSPFv3 1 area 0 instance 1
驗證OSPFv3的鄰居和路由情況如下:
[R2]display OSPFv3 peer
OSPFv3 Process (1)
OSPFv3 Area (0.0.0.0)
Neighbor ID Pri State Dead Time Interface Instance ID
11.1.1.1 1 Full/Backup 00:00:32 GE0/0/0 1
33.1.1.1 1 Full/DR 00:00:36 GE0/0/0 1
[R2]display IPv6 routing-table protocol ospf
Public Routing Table : OSPFv3
Summary Count : 6
OSPFv3 Routing Table‘s Status : < Active >
Summary Count : 4
Destination : 2011::1 PrefixLength : 128
NextHop : FE80::2E0:FCFF:FE51:9D1 Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
Destination : 2014:: PrefixLength : 64
NextHop : FE80::2E0:FCFF:FE51:9D1 Preference : 10
Cost : 49 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
Destination : 2033::3 PrefixLength : 128
NextHop : FE80::2E0:FCFF:FEE7:1F8A Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
Destination : 2044::4 PrefixLength : 128
NextHop : FE80::2E0:FCFF:FE51:9D1 Preference : 10
Cost : 49 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags : D
OSPFv3 Routing Table‘s Status : < Inactive >
Summary Count : 2
Destination : 2022::2 PrefixLength : 128
NextHop : :: Preference : 10
Cost : 0 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : LoopBack0 Flags :
Destination : 2123:: PrefixLength : 64
NextHop : :: Preference : 10
Cost : 1 Protocol : OSPFv3
RelayNextHop : :: TunnelID : 0x0
Interface : GigabitEthernet0/0/0 Flags
17.3.5 OSPFv3認證
OSPFv3本身沒有認證(Authentication)功能。因此,OSPFv3報文頭中去掉了AuType和Authentication字段。相應的,所有的OSPF區域和接口數據結構都去掉了認證相關域(field)。
OSPFv3的認證依賴於IPv6報文的認證頭和IP封裝安全有效載荷報頭。OSPFv3通過這些IP報文頭來確保路由交換的完整性和認證/保密。
OSPFv3報文利用IPv6標準的16位完整校驗和防止報文數據的隨機錯誤。該校驗和覆蓋了整個OSPF報文和偽IPv6頭。
很不愉快的告訴讀者,在本書成稿時,eNSP還不支持OSPFv3的認證配置,其配置命令格式為:
操作步驟
配置區域的認證方式
執行命令system-view,進入系統視圖。
執行命令OSPFv3 [ process-id ],進入OSPFv3進程視圖。
執行命令area area-id,進入OSPFv3區域視圖。
執行命令authentication-mode { hmac-sha256 key-id key-id { plain plain-text | [ cipher ] cipher-text } | keychain keychain-name },配置OSPFv3區域的認證模式。
使用區域認證時,一個區域中所有的路由器在該區域下的認證模式和口令必須一致。
配置進程的認證方式
執行命令system-view,進入系統視圖。
執行命令OSPFv3 [ process-id ],進入OSPFv3進程視圖。
執行命令authentication-mode { hmac-sha256 key-id key-id { plain plain-text | [ cipher ] cipher-text } | keychain keychain-name },配置OSPFv3進程的認證模式。
配置接口驗證方式
執行命令system-view,進入系統視圖。
執行命令interface interface-type interface-number,進入接口視圖。
執行命令OSPFv3 authentication-mode { hmac-sha256 key-id key-id { plain plain-text | [ cipher ] cipher-text } | keychain keychain-name } [ instance instance-id ],配置OSPFv3接口的認證模式。
接口驗證方式的優先級高於區域驗證方式的優先級。
除Keychain認證模式外,同一網段的接口的認證模式和口令必須相同,不同網段可以不同
17.4 小結
我們用一章來講解了基本的IPv6知識以及兩種基本的IPv6協議棧下的動態路由協議RIPng和OSPFv3。作為下一代網絡技術的IPv6在現代網絡中依舊處於方興未艾的地位,但是很多大型公司(比如谷歌、亞馬遜)等已經開始部署IPv6,國內的很多運營商在逐步的把IPv6商業化。IPv6在HCNA以及HCIE認證考試中是必考項。
華為設備OSPF理論基礎和實現實驗(迎接IPv6數通時代的重要協議)