码迷,mamicode.com
首页 > 其他好文 > 详细

华为设备OSPF理论基础和实现实验(迎接IPv6数通时代的重要协议)

时间:2018-03-29 10:58:12      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:乾颐堂军哥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数通时代的重要协议)

标签:乾颐堂军哥hcie

原文地址:http://blog.51cto.com/enderjoe/2092293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!