一、概述
为什么需要OSPFv3?因为OSPFv2无法在IPv6网络当中运行,且OSPF不是TLV架构的无法添加新的TLV,所以就开发出了新的协议OSPFv3,OSPFv3与OSPFv2有一定的相似度但他们是两个不同的协议。
与RIPng一样,OSPFv3版本也是专门为IPv6网络开发的,所以也有一个配置前提,那 就是要在路由器上先全局使能IPv6能力,然后还要在各三层接口上使能IPv6能力,配置 IPv6地址,然后才能配置相关的路由功能。
OSPFv3是运行于IPv6网络的OSPF路由协议(RFC2740),在OSPFv2的基础上进行了 增强,是一个独立的网络层路由协议,但IP号与OSPFv2一样,仍为89。OSPFv3在许多方 面均与OSPFv2一致或类似,如在Hello机制、报文类型、路由器类型、路由类型、状态机、LSDB、泛洪机制和路由计算等方面。下面主要介绍一些与OSPFv2区别比较大的方面。
二、OSPFv2与OSPFv3的区别
1、运行机制上的区别
相似点
- 协议框架是相同的
- 状态机
- 报文的种类
- 接口的网络类型
- OSPFv3与OSPFv2一样,根据链路层协议类型,也将网络分为见表12-1的4种类型, 但与OSPFv2版本的4种网络类型的特性相比,在对Hello报文、DD报文、LSR报文、LSU 报文、LSAck报文采用组播发送方式时的组播目的地址有些不一样。
- 区域
- SPF算法
- 泛洪机制
不同点
- OSPF的头部不同
- 认证的变化
- OSPFv3报文头中不再包含Autype和Authentication,可以直接使用IPv6的安全机制(AH或ESP)。OSPFv3内置的认证机制,只有在Hello报文尾部增加认证,其他报文无认证。校验和(Checksum)变化。OSPFv3使用IPv6标准的CheckSum。
- 认证优先级与OSPFv2没有区别。
- 接口>区域>进程
- 配置:
authentication-mode hmac-sha256 key-id 1 plain skills
- ipsec认证配置:
ipsec proposal ospfv3 encapsulation-mode transport transform ah ah authentication-algorithm md5 exit ipsec sa ospfv3 proposal ospfv3 sa spi inbound ah 1000 sa string-key inbound ah cipher skills sa spi outbound ah 1000 sa string-key outbound ah cipher skills exit ospfv3 1 ipsec sa ospfv3
- 配置:
- 接口>区域>进程
- 基于链路的运行:
- 要这样理解这个特性:在IPv6网络中,链路两端的连接可以说是自动完成的,因为在 运行IPv6协议的接口上除了可以配置多个全局地址(包括广域网中使用的全球单播IPv6地 址和局域网中使用的唯一本地地址)用于全网路由外,还会自动生成(也可手工配置)一 个链路本地地址。接口上的每个IPv6全局地址都可以通过LSA发布出去。
- IPv6网络中的链路连接可直接依据这个仅在本地链路有效的链路本地地址进行,如 OSPFv3报文就是以链路本地地址作为源IPv6地址发送的。正因如此,一条链路无论是否 配置了全局地址、链路两端的IPv6地址是否在同一网段,OSPFv3邻居路由器间均可建立 邻居关系。而OSPFv2中链路两端缺省情况下必须配置在同一网段的IPv4地址才能建立邻 居关系。
- 使用链路本地地址
- IPv6使用链路本地(Link-local)地址在同一链路上发现邻居及自动配置等。运行IPv6 的路由器不转发目的地址为链路本地地址的IPv6报文,此类报文只在同一链路有效。链路 本地地址前缀为FE80::/10,只出现在Link-LSA中,不在其他LSA中出现。
- OSPFv3是运行在IPv6上的路由协议,同样使用链路本地地址来维持邻居,同步LSA 数据库。除Vlink外的所有OSPFv3接口都使用链路本地地址作为源地址及下一跳来发送 OSPFv3报文。
- 这样的好处是:①不需要配置IPv6全局地址,就可以得到OSPFv3拓扑,实现拓扑与 地址分离;②通过在链路上泛洪的报文不会传到其他链路上,减少报文不必要的泛洪来节 省带宽。
- 链路支持多实例复用
- 一个OSPFv2物理接口只能和一个实例(即OSPF进程)绑定,但一个OSPFv3物理接口可以和多个实例绑定,并用不同的Instance ID区分。这些运行在同一条物理链路上的 多个OSPFv3实例分别与链路对端设备建立邻居及发送报文,且互不干扰。这样可以充分 共享同一链路资源。
- 配置:
ospfv3 1 area 0 instance 100 ospfv3 2 area 0 instance 200
- 配置:
- 通过Router ID唯一标识邻居:在OSPFv2中,当网络类型为点到点或者通过虚连接与邻居相连时,通过Router ID来标识邻居路由器,当网络类型为广播或NBMA时,通过邻居接口的IP地址来标识邻居路由器。OSPFv3取消了这种复杂性,无论对于何种网络类型,都是通过Router ID来唯一标识邻居。
- OSPFv3是通过Router ID来标识邻居;OSPFv2则是通过IPv4地址来标识邻居。这样做的目的是为了使“拓扑与地址分离”,同样是因为OSPFv3可以不依赖IPv6全局地址,直接依赖各接口上自动生成或配置的链路本地地址来计算出OSPFv3的拓扑结构。IPv6全局地址仅用于Vlink接口及报文的转发。
- Stub区域的支持
- 报文的不同
- Option字段的不同
- LSA的类型和内容的不同
- OSPFv3包括的LSA类型见下表。与OSPFv2版本相比新增了几类LSA。
- 除了LSU报文的LSA外,其他OSPFv3报文均不携带IPv6地址信息。
- OSPFv3的Router-LSA和Network-LSA里不包含IP地址,只反映网络拓扑信息。它们 的IP地址部分分别由新增的Link LSA和Intra Area Prefix LSA宣告。
- OSPFv3的Router ID、Area ID和LSA Link State ID不再表示IP地址,但仍保留IPv4地 址格式。
- 在广播网络、NBMA网络和P2MP网络中,邻居不再由IP地址标识,而是只由Router ID标识。
2、报文的区别
1、报文头部
- Version:版本,对于OSPFv2,该值是2;OSPF该值是3
- Type:1-Hello;2-DD;3-LSR;4-LSU;5-LSAck
- Packet Length:OSPFv3报文长度,2字节
- Router ID:路由器ID
- Area ID:区域ID
- Checksum:校验和
- Instance ID:链路实例ID,通过判断该字段就可以区分同一链路上运行的不同OSPF实例,实例ID只有在本地链路范围内具有意义
- Reserved(保留):保留字段,总是0
2、Hello报文
3、LSA
OSPFv3在LSA报文头的LSA Type里添加了LSA的泛洪范围,这使得OSPFv3的路由器 更加灵活,可按以下方式处理不能识别类型的LSA。
- OSPFv3可存储或泛洪不能识别报文,而OSPFv2只简单地丢弃掉不能识别报文。
- OSPFv3允许泛洪范围为区域或链路本地(Link-local),并且设置了U比特,描述 了当路由器收到一个类型未知的LSA报文时处理方式(可以当成具有链路本地范围的LSA 一样处理,也可在产生该LSA报文路由器所在区域,或整个自治系统内进行泛洪)。
举个例子:
RouterA和RouterB都可识别某类LSA,它们之间通过RouterC连接,但RouterC 不能识别该类LSA。这样,当RouterA泛洪此类LSA时,邻居RouterC在收到后虽然不能识 别,但还是可以继续泛洪给其邻居RouterB,RouterB收到后继续处理。但如果运行的是 OSPFv2协议,则只会丢弃不能识别的报文,RouterB不能收到此类LSA。
LSA类型-功能编码
LSA Function code | LS Type | 描述 |
1 | 0x2001 |
Router-LSA |
2 | 0x2002 | Network-LSA |
3 | 0x2003 | Inter-Area-Prefix-LSA |
4 | 0x2004 | Inter-Area-Router-LSA |
5 | 0x2005 | AS-External-LSA |
6 | 0x2006 | Group-membership-LSA |
7 | 0x2007 | Type-7-LSA |
8 | 0x2008 | Link-LSA |
9 | 0x2009 | Intra-Area-Prefix-LSA |
Link State ID
4字节。不再包含地址信息,对于不同的LSA类型,该字段的含义如下表,同时提供与OSPFv2中含义的对比
LAS | OSPFv2 LS ID | OSPFv3 LS ID |
Router-LSA | Router ID | 本地唯一的32位整数 |
Network-LSA | DR所在IPv4网段 | DR接口ID |
Type 4 LSA | Router ID | 本地唯一的32位整数 |
Type 3,5,7 LSA | IPv4网段 | 本地唯一的32位整数 |
Link-LSA | 所在接口ID | |
Intra-Area-Prefix-LSA | 本地唯一的32位整数 |
LSA类型
OSPFv2 LSA | OSPFv3 LSA | 与OSPFv2 LSA异同点说明 |
Router LSA | Router LSA | 名称相同,作用也类似,但是不再描述地址信息,仅仅用来描述路由域的拓扑结构 |
Network LSA | Network LSA | |
Network Summary LSA | Inter Area Prefix LSA | 作用类似,名称不同 |
ASBR Summary LSA | Inter Area Router LSA | |
AS External LSA | AS External LSA | 作用域名称完全相同 |
Link LSA Intra Area Prefix LSA | 新增LSA |
Prefix Option字段
用来表达某个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理
- NU位:非单播位
- LA位:本地地址位
- MC位:组播位
- P位:传播位
前缀由,前缀三元组组成:网络+长度+option。
4、Router LSA
LS Type:0x2001;泛洪范围:区域
每个Router-LSA包含若干链路描述(link description),每个链路描述都描述了路由器的一个接口信息
可以使用多个Router-LSA描述信息,通过Link-State ID区分多个不同的Router-LSA
与OSPFv2不同的是,一类LSA在OSPFv2中可以描述拓扑信息和网络信息,在OSPFv3中一类LSA只描述拓扑信息。
Router LSA链路(Link)类型
类型 | 描述 | 邻居Router-ID | 邻居Interface-ID |
1 | 点到点连接到另一台路由器 | 邻居Router-id | 邻居的Interface ID |
2 | 连接到穿越(Transit)网 | DR的Router-id | DR的Interface ID |
3 | 保留 | ||
4 | 虚连接 | 邻居Router-ID | 邻居的VLINK Interface ID |
举例:
5、Network LSA
DR产生,区域范围内泛洪
描述该链路上与DR有FULL关系的所有路由器
举例:
6、新增Link-LSA
Link-LSA是OSPFv3新增的一种LSA类型,它具有链路泛洪范围,路由器会为每个启动了OSPFv3的接口产生一个Link-LSA。它的作用在于:
- 向链路上的其他路由器通告本地链路地址,作为它们的下一跳地址
- 向链路上的其他路由器通告本地链路上的所有IPv6前缀(注意这里说的是本链路的所有IPv6前缀,如果不是本链路的接口则不会通告过去)
- 在广播网络和NBMA网络上为DR提供Options取值
Link-LSA结构
- Rtr Pri:该路由器在该链路上的优先级(Router Priority)
- Options:描述该路由的能力
- Link Local Interface Address:该接口的本地链路地址,用于路由的下一跳计算
- Prefix:所包含前缀的个数
- 其他:Prefix三元组
举例:
7、Intra-Area-Prefix-LSA
为什么需要引入Intra-Area-Prefix-LSA呢?
OSPFv2中,依附于路由器和Stub网络的subnet出现在Router LSA中,依附于Transit网络的subnet出现在Network-LSA中;OSPFv3中,Router-LSA和Network-LSA不再包含地址信息,所以引入Intra-Area-Prefix-LSA。
Intra-Area-Prefix-LSA携带区域内IPv6 Prefix信息
依附于路由器的Prefix
依附于Stub网络的Prefix
依附于Transit网络的Prefix
每台路由器或Transit网络可以产生多个Intra-Area-Prefix-LSA
- 在OSPFv2中使用Router-LSA和Network-LSA来发布区域内路由,而在OSPFv3中这两类LSA不再包含地址信息,所以引入了Intra-Area-Prefix LSA,用于发布区域内路由。
- #Prefixes:LSA中包含的Prefix个数。
- Referenced Link State Type:
- =1: 携带的Prefix依附于Router(包括Stub网络);
- =2: 携带的Prefix依附于Transit Network。
- Referenced Link State ID:
- Type1: 0;
- Type2:DR接口ID。
- Referenced Advertising Router:
- Type 1:依附的路由器Router ID;
- Type 2:DR Router ID。
- 其他:Prefix三元组信息。
依附Router举例:
依附Transit网络
8、Inter-Area-Prefix-LSA
在OSPFv2中,该类型的LSA称为Type 3 Summary-LSA。在OSPFv3中,更名为Inter-Area-Prefix-LSA,语义更加明确,它描述了其他区域的前缀信息。
- 边界路由器(ABR)产生的第3类LSA,在Area范围内泛洪
- 描述了到本AS内其他区域的路由信息
- 每个Inter-Area-Prefix-LSA包含一条地址前缀信息
- 该LSA中不包含Link-Local地址信息
- 使用32位整数作为Link State ID来区分LSA
举例:
9、Inter-Area-Router-LSA
在OSPFv2中,该类型的LSA称为Type 4 Summarty-LSA。在OSPFv3中,更名为Inter-Area-Router-LSA,语义更加明确,它描述了到达其他区域的ASBR的信息。
- 边界路由器(ABR)产生的第4类LSA,在Area范围内洪泛
- 描述了到本AS内其他区域的ASBR路由器信息
- 每个Inter-Area-Router-LSA包含一个ASBR路由器信息
- LSA中的能力选项(Options)与所描述的ASBR Router LSA中能力选项(Options)保持一致
- 使用32位整数作为Link State ID来区分相同的LSA。
10、AS_External_LSA
- 由ASBR路由产生,描述了区域外的路由信息
- 具有自治系统(AS)洪泛范围
- Link State ID不包含地址信息,只是来和其他AS-External-LSA区分开
- AS-External-LSA不含有Link-Local地址信息
- 可选项:
- 转发(Forwarding)地址;
- Tag;
- Referenced Link State ID: 保留字段。
举例:
三、基本功能配置与管理
与其他动态路由协议一样,在各项配置任务中,必须先启动OSPFv3,完成OSPFv3的 基本配置之后才能配置其他的功能特性。在配置OSPFv3的基本功能之前,需在设备全局 和对应接口上使能IPv6能力,配置IPv6全局地址,使各相邻节点网络层可达。
1、配置基本功能
(1)启动OSPFv3
OSPFv3支持多进程,在一台路由器可以启动多个OSPFv3进程,不同OSPFv3进程之 间由不同的进程号区分。OSPFv3进程号也只在本地有效,不影响与其他路由器之间的报 文交换,与OSPFv2版本一样。
注意:OSPFv3的Router ID必须手工配置,不能像OSPFv2那样从接口IP地址那里自动选举 得到,因为在OSPFv3中的Router ID仍采用IPv4格式,而接口IP地址已是IPv6格式了。而 且在缺省情况下,没有设置OSPFv3协议的路由器ID号。所以,在OSPFv3路由器上,如果 没有配置ID号,OSPFv3无法正常运行。
(2)在接口上使能OSPFv3
在系统视图使能OSPFv3后,还需要在接口使能OSPFv3。由于接口多实例化 (OSPFv2不支持),所以在接口上使能到OSPFv3进程时,需要指定是在哪个接口实例中 使能该OSPFv3进程。如果不指定实例ID,则缺省是在实例0中使能OSPFv3进程,不同进 程所绑定的实例名不能相同,但建立邻居的接口上使能的实例ID必须相同。
注意:在本项配置任务中,接口加入区域的配置方法与OSPFv2的配置不一样 了(其实这已在第10章介绍RIPng时就体现了),OSPFv3中只能在具体的接口视图下分别 指定所加入的区域,使能的OSPF路由进程,不能在区域视图下通过network命令进行全局 配置。考虑到IPv6地址太长,用network命令一一通告的话,可能很容易出错,直接在接 口上使能对应进程的配置方法更为简单、可靠。
(3)进入OSPFv3区域视图
在配置同一区域内的OSPFv3路由器时,应注意大多数配置数据都应该对区域统一考 虑,否则可能会导致相邻路由器之间无法交换信息,甚至导致路由信息的阻塞或者产生路由环路。
2、命令
四、案例
接下来我用一套拓扑来带大家感受一下OSPFv2和OSPFv3它们之间使用LSA来传递路由时的改变。这里我只以AR1为视角来给大家进行介绍和截图,剩下AR2、AR3、AR4设备上的LSDB大家可自行做实验理解加深印象。
拓扑
一类LSA-Router-LSA
OSPFv2
通过以上信息描绘出的拓扑
以上的拓扑信息都是我们通过1类的LSA来描绘出来的,接下来我们看看OSPFv3使用1类LSA能描绘出什么样的拓扑
OSPFv3
可以清楚的看到,OSPFv2的1类LSA不仅可以描绘出拓扑信息还有网络信息,而OSPFv3只能描绘出拓扑信息并没有描绘出网络信息。那么OSPFv3怎么描绘网络信息呢?这里我们留个疑问。
二类LSA-Network
OSPFv2
OSPFv3
可以清楚的看到这里OSPFv3与OSPFv2有很大的区别,OSPFv3的1类2类LSA结合起来只能描绘出拓扑信息,那么网络信息怎么描述呢?我们就要使用到8类和9类LSA来描述OSPFv3中的网络信息。
8类LSA-新增Link-LSA
该LSA表示,有一台Router-id为1.1.1.1的路由器产生了一条8类LSA,该LSA描述了Router-id为1.1.1.1的路由器的0.0.0.3接口下有一个前缀为2001::/64。
该LSA表示,有一台Router-id为2.2.2.2的路由器产生了一条8类LSA,该LSA描述了Router-id为2.2.2.2的路由器的0.0.0.3接口下有一个前缀为2001::/64。
9类LSA-Intra-Area-Prefix-LSA
依附于Router的Intra-Area-Prefix-LSA
通过Router-LSA和依附于Router-LSA的Intra-Area-Prefix-LSA我们可以描绘出以下拓扑
该LSA表示,有一台Router-id为2.2.2.2的路由器生成了一条Intra-prefix-LSA,描绘了依附于Router(包括Stub网络)的Intra-Area-Prefix-LSA的9类LSA,在Router-id2.2.2.2路由器上有一个网段为2222::2/128。
该LSA表示,有一台Router-id为1.1.1.1的路由器生成了一条Inter-Area-Prefix-LSA,描绘了依附于Transit Network的Intra-Area-Prefix-LSA的9类LSA,DR的接口ID为0.0.0.3,DR的RouterID为1.1.1.1,在DR1.1.1.1的0.0.0.3接口下有一个前缀为2001::/64。
该LSA表示,有一台Router-id为2.2.2.2的路由器生成了一条Inter-Area-Prefix-LSA,该LSA描绘了依附于Transit Network的Intra-Area-Prefix-LSA的9类LSA,DR的接口ID为0.0.0.4,DR的RouterID为2.2.2.2,在DR2.2.2.2的0.0.0.4接口下有一个前缀为2001::/64。
3类LSA-Inter-Area-Prefix-LSA
OSPFv2
此LSA表示,Router-id为2.2.2.2的ABR路由器产生了一条3类LSA,该3类LSA中有一个目的网段为10.0.24.0/24的路由开销为1。
OSPFv3
该LSA表示,一台Router-id为2.2.2.2的ABR路由器产生了一条3类LSA,该LSA内有一条目的网段为2003::/64的路由。
4类LSA-Inter-Area-Router-LSA
4类LSA其实就是如何到达ASBR路由器,当有5类LSA到达ASBR时,ASBR会在本区域内泛洪时,我们设备收到了这个5类LSA,查看生成该LSA路由器Router-id,发现没有到达该路由器的路由,所以ABR或ASBR会在本区域泛洪时,在生成一条4类的LSA,描述想要到达该目的就来找我。
这里我们让AR4引入一条直连路由为4.4.4.4/32的路由。
AR4
interface loopback 1
ip address 4.4.4.4 255.255.255.255
q
ospf 1
import-route direct
AR4
interface loopback 1
ipv6 enable
ipv6 address 4444::4/128
q
ospf 1
import-route direct
OSPFv2
该LSA表示,一台Router-id为2.2.2.2的ABR路由器产生了一条4类LSA,该LSA描述了一条目的网段为10.0.24.4的路由。
该LSA表示,一台Router-id为2.2.2.2的ABR路由器产生了一条4类LSA,该LSA描述了一条目的网段为10.0.24.4的路由。
5类LSA-AS_External_LSA
OSPFv2
该LSA表示,有一台Router-id为10.0.24.4的ASBR路由器产生了一条5类LSA,该LSA描述了一条4.4.4.4的路由,对于AR1来说想要去往4.4.4.4就得先去10.0.24.4,去往10.0.24.4的路由已经有了4类的LSA去往2.2.2.2了,所以我们访问4.4.4.4时只需要将数据报文丢给2.2.2.2即可。
OSPFv3
该LSA表示,有一台Router-id为4.4.4.4的ASBR路由器产生了一条5类LSA,该LSA描述了一条4444::4/128的路由。对于AR1来说到达4.4.4.4已经有一条4类LSA了,我们想要去访问4444::4/128路由时,只需要将数据报文丢给2.2.2.2即可。