1. 程式人生 > >華為設備OSPF理論基礎和實現實驗(迎接IPv6數通時代的重要協議)

華為設備OSPF理論基礎和實現實驗(迎接IPv6數通時代的重要協議)

乾頤堂軍哥hcie

17.3 IPv6路由基礎-OSPFv3

關於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進程才可以建立鄰居。

另外OSPFv3在升級時相比其他的IPv6協議更加麻煩,因為OSPF完全依賴IP層,而其他協議,比如RIPng依賴UDP,BGP for IPv6工作在TCP層面。

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

OSPFv3沿用了OSPF2的區域概念,比如圖17-14中,讀者可以看到骨幹區域0以及其中的區域骨幹路由器(Backbone Router);可以看到普通區域1、2、3、4等以及連接普通區域和骨幹區域的區域邊界路由器ABR;可以看到引入isis協議的AS邊界路由器ASBR設備;讀者不能從圖中看到本書不涉及的特殊區域。

技術分享圖片

圖17-14 OSPFv3區域示意圖
通過包頭的TYPE字段來標識5種報文類型,其作用如表17-4所示,一個OSPFv3的報文由OSPFv3的報頭和具體的報文類型組成,如圖17-15所示
技術分享圖片

圖17-15 OSPFv3的報文頭部
OSPFv3的協議包頭中各個字段按順序描述如下:
? Version,1字節。表示OSPF版本號,設置為3。

? Type,1字節,該部分即表17-4所描述的內容。
? 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數通時代的重要協議)