国家 / 地区

OSPFv3技术白皮书-6W100

手册下载

OSPFv3技术白皮书

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright © 2019 新华三技术有限公司 版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。

本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。



概述

OSPFv2IETF组织开发的一个基于链路状态的内部网关协议,具有适应范围广、收敛迅速、无自环、便于层级化网络设计等特点,因此在IPv4网络中获得了广泛应用。

随着IPv6网络的建设,同样需要动态路由协议为IPv6报文的转发提供准确有效的路由信息。基于此,IETF在保留了OSPFv2优点的基础上,针对IPv6网络修改形成了OSPFv3OSPFv3主要用于在IPv6网络中提供路由功能,是IPv6路由技术中的主流协议。

OSPFv3技术实现

OSPFv3在工作机制上与OSPFv2基本相同,但为了支持IPv6地址格式,OSPFv3OSPFv2做了一些改动。下面先对OSPFv2进行简要介绍,之后再详细介绍OSPFv3OSPFv2的异同点。

2.1  OSPFv2简介

2.1.1  OSPF基本概念

1. OSPF网络类型

OSPF根据链路层协议类型将网络分为下列四种类型:

·     广播类型:当链路层协议是EthernetFDDI时,OSPF认为网络类型是广播。在该类型的网络中,通常以组播形式(224.0.0.5224.0.0.6)发送协议报文。

·     NBMA类型:当链路层协议是帧中继、ATMX.25时,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。

·     P2MP类型:没有一种链路层协议会被OSPF认为是P2MP类型,只能将其他的网络类型强制更改为点到多点类型。常用做法是将NBMA改为点到多点的网络。在该类型的网络中,缺省情况下,以组播形式(224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。

·     P2P类型:当链路层协议是PPPHDLC时,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。

2. DRBDR

在广播网或NBMA网络中,任意两台路由器之间都要交换路由信息。如果网络中有n台路由器,则需要建立nn-1/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF提出了DRDesignated Router,指定路由器)的概念,所有路由器只将信息发送给DR,由DR将网络链路状态发送出去。

另外,OSPF提出了BDRBackup Designated Router,备份指定路由器)的概念。BDR是对DR的一个备份,在选举DR的同时也选举出BDRBDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为新的DR

OSPF网络中,既不是DR也不是BDR的路由器为DR OtherDR Other仅与DRBDR建立邻接关系,DR Other之间不交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量,同时减少网络流量,节约了带宽资源。

3. 区域

随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,会存在以下问题:

·     路由器数量会增多,每台路由器都生成LSA,整个LSDB即所有LSA的集合会非常大,占用大量存储空间。

·     计算最短路径树耗时增加,导致CPU负担很重。

·     在网络规模增大之后,拓扑结构发生变化的概率也会增大,网络会经常处于“震荡”之中,造成网络中大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。

OSPF协议通过将自治系统划分成不同的区域来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号ID来标识。

为了适应特定的网络需求,OSPF定义了两种特殊的区域:

(1)     Stub/Totally Stub区域

Stub区域是一些特定的区域,Stub区域的ABR不允许注入Type5 LSA,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。

为了进一步减少Stub区域中路由器的路由表规模以及路由信息传递的数量,可以将该区域配置为Totally Stub(完全Stub)区域,该区域的ABR不会将区域间的路由信息和外部路由信息传递到本区域。

Stub/Totally Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,Stub/Totally Stub区域位于自治系统的边界。

(2)     NSSA/Totally NSSA区域

NSSANot-So-Stubby Area)区域是Stub区域的变形,与Stub区域有许多相似的地方。NSSA区域也不允许Type5 LSA注入,但可以允许Type7 LSA注入。Type7 LSANSSA区域的ASBR产生,在NSSA区域内传播。当Type7 LSA到达NSSAABR时,由ABRType7 LSA转换成Type5 LSA,传播到其他区域。

为了进一步阻挡NSSA区域外的其他区域的Type3 LSA注入,可以将该区域配置为Totally NSSA(完全NSSA)区域,该区域的ABR不会将区域间的路由信息传递到本区域。为保证到本自治系统的其他区域的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。

4. OSPF协议报文

OSPF有五种类型的协议报文:

·     Hello报文:周期性发送,用来发现和维持OSPF邻居关系。内容包括一些定时器的数值、DRBDR以及自己已知的邻居。

·     DD报文:描述了本地LSDB中每一条LSA的摘要信息,用于两台路由器进行数据库同步。

·     LSR报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA内容包括所需要的LSA的摘要。

·     LSU报文:向对方发送其所需要的LSA

·     LSAck报文:用来对收到的LSA进行确认。内容是需要确认的LSAHeader(一个报文可对多个LSA进行确认)。

2.1.2  OSPF路由计算过程

OSPF协议的路由计算过程可简单描述如下:

·     每台OSPF路由器根据自己周围的网络拓扑结构生成LSA,并通过更新报文将LSA发送给网络中的其它OSPF路由器。

·     每台OSPF路由器都会收集其它路由器通告的LSA,所有的LSA放在一起便组成了LSDBLSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。

·     OSPF路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映,各个路由器得到的有向图是完全相同的。

·     每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。

2.2  OSPFv3OSPFv2的相同点

OSPFv3在协议设计思路和工作机制与OSPFv2基本一致:

·     报文类型相同:包含HelloDDLSRLSULSAck五种类型的报文。

·     区域划分相同。

·     LSA泛洪和同步机制相同:为了保证LSDB内容的正确性,需要保证LSA的可靠泛洪和同步。

·     路由计算方法相同:采用最短路径优先算法计算路由。

·     网络类型相同:支持广播、NBMAP2MPP2P四种网络类型。

·     邻居发现和邻接关系形成机制相同:OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定,只有当双方成功交换DD报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系。

·     DR选举机制相同:在NBMA和广播网络中需要选举DRBDR

2.3  OSPFv3OSPFv2的不同点

为了支持在IPv6环境中运行,指导IPv6报文的转发,OSPFv3OSPFv2做出了一些必要的改进,使得OSPFv3可以独立于网络层协议,而且只要稍加扩展,就可以适应各种协议,为未来可能的扩展预留了充分的可能。

OSPFv3OSPFv2不同主要表现在:

·     基于链路的运行

·     使用链路本地地址

·     链路支持多实例复用

·     通过Router ID唯一标识邻居

·     认证的变化

·     Stub区域的支持

·     报文的不同

·     Option字段不同

·     LSA类型、处理方式和格式不同

2.3.1  基于链路的运行

OSPFv2是基于网络运行的,两个路由器要形成邻居关系必须在同一个网段。

OSPFv3的实现是基于链路,一条链路可以包含多个子网,节点即使不在同一个子网内,只要在同一链路上就可以直接通信。

2.3.2  使用链路本地地址

OSPFv3的路由器使用链路本地地址作为发送报文的源地址。一台路由器可以学习到这条链路上相连的所有其它路由器的链路本地地址,并使用这些链路本地地址作为下一跳来转发报文。但是在虚连接上,必须使用全球范围地址作为OSPFv3协议报文的源地址。

由于链路本地地址只在本链路上有意义且只能在本链路上泛洪,因此链路本地地址只能出现在Link LSA中。

2.3.3  链路支持多实例复用

1所示,OSPFv3支持在同一链路上运行多个实例,实现链路复用并节约成本。

图1 链路支持多实例复用示意图

 

Device ADevice BDevice CDevice D连接到同一个广播网上,它们共享同一条链路。在Device AInterface ADevice BInterface BDevice CInterface C上指定实例1;在Device AInterface ADevice BInterface BDevice DInterface D上指定实例2,实现了Device ADevice BDevice C可以建立邻居关系,Device ADevice BDevice D可以建立邻居关系。

这是通过在OSPFv3报文头中添加Instance ID字段来实现的。如果接口配置的Instance ID与接收的OSPFv3报文的Instance ID不匹配,则丢弃该报文,从而无法建立邻居关系。

2.3.4  通过Router ID唯一标识邻居

OSPFv2中,当网络类型为点到点或者通过虚连接与邻居相连时,通过Router ID来标识邻居路由器,当网络类型为广播或NBMA时,通过邻居接口的IP地址来标识邻居路由器。

OSPFv3取消了这种复杂性,无论对于何种网络类型,都是通过Router ID来唯一标识邻居。

2.3.5  认证的变化

OSPFv3协议除了自身可以提供认证功能外,还可以通过使用IPv6提供的安全机制来保证自身报文的合法性。

2.3.6  Stub区域的支持

由于OSPFv3支持对未知类型LSA的泛洪,为防止大量未知类型LSA泛洪进入Stub区域,对于向Stub区域泛洪的未知类型LSA进行了明确规定:只有当未知类型LSA的泛洪范围是区域或链路而且U比特没有置位时,未知类型LSA才可以向Stub区域泛洪。

2.3.7  报文的不同

OSPFv3报文封装在IPv6报文中,每一种类型的报文均以一个16字节的报文头部开始。

OSPFv2一样,OSPFv3的五种报文都有同样的报文头,只是报文中的字段有些不同。

OSPFv3LSULSAck报文与OSPFv2相比没有什么变化,但OSPFv3的报文头、HelloOSPFv2略有不同,报文的改变包括以下几点:

·     版本号从2升级到3

·     报文头的不同:与OSPFv2报文头相比,OSPFv3报文头长度只有16字节,去掉了认证字段加了Instance ID字段。Instance ID字段用来支持在同一条链路上运行多个实例,且只在链路本地范围内有效。

·     Hello报文的不同:与OSPFv2 Hello报文相比,OSPFv3 Hello报文去掉了网络掩码字段,增加了Interface ID,用来标识发送该Hello报文的接口ID

2.3.8  Option字段不同

OSPFv2中,Option字段出现在每一个Hello报文、DD报文以及每一个LSA中。

OSPFv3中,Option字段只在Hello报文、DD报文、Router LSANetwork LSAInter Area Router LSA以及Link LSA中出现。

OSPFv2Option字段如2所示。

图2 OSPFv2 Option字段格式

 

OSPFv3Option字段如3所示。

图3 OSPFv3 Option字段格式

 

从上图可以看出,与OSPFv2相比,OSPFv3Option字段增加了R比特、V比特。其中:

·     R比特:用来标识设备是否是具备转发能力的路由器。如果R比特置0,则表示该节点的路由信息将不会参加路由计算。如果当前设备不想转发目的地址不是本地地址的报文,可以将R比特置0

·     V比特:如果V比特置0,该路由器或链路不会参加路由计算。

2.3.9  LSA类型不同

OSPFv3支持七种类型的LSAOSPFv3 LSAOSPFv2 LSA的异同如1所示。

表1 OSPFv3OSPFv2 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

新增LSA

Intra Area Prefix LSA

新增LSA

 

OSPFv3新增了Link LSAIntra Area Prefix LSA

·     Router LSA不再包含地址信息,使能OSPFv3的路由器为它所连接的每条链路产生单独的Link LSA,将当前接口的链路本地地址以及路由器在这条链路上的一系列IPv6地址信息向该链路上的所有其它路由器通告。

·     Router LSANetwork LSA中不再包含路由信息,这两类LSA中所携带的路由信息由Intra Area Prefix LSA来描述,该类LSA用来公告一个或多个IPv6地址前缀。

2.3.10  扩大了LSA的泛洪范围

LSA的泛洪范围已经被明确地定义在LSALS Type字段。目前,有三种LSA泛洪范围:

·     链路本地范围:LSA只在本地链路上泛洪,不会超出这个范围,该范围适用于新定义的Link LSA

·     区域范围:LSA的泛洪范围仅仅覆盖一个单独的OSPFv3区域。Router LSANetwork LSAInter Area Prefix LSAInter Area Router LSAIntra Area Prefix LSA都是区域范围泛洪的LSA

·     自治系统范围:LSA将被泛洪到整个路由域,AS External LSA就是自治系统范围泛洪的LSA

2.3.11  支持对未知类型LSA的处理

OSPFv2中,收到类型未知的LSA将直接丢弃。

OSPFv3LSALS Type字段中增加了一个U比特位来位标识对未知类型LSA的处理方式:

·     如果U比特置1,则对于未知类型的LSA按照LSA中的LS Type字段描述的泛洪范围进行泛洪。

·     如果U比特置0,对于未知类型的LSA仅在链路范围内泛洪。

2.3.12  LSA报文格式不同

OSPFv3 LSA封装在LSA头的后面,下面将重点介绍OSPFv3OSPFv2LSA头以及LSA内容上的不同点。

1. LSA

4所示,与OSPFv2相比,OSPFv3LSA头部取消了Options字段,且Link State ID不再有具体的含义,而是由当前路由器随机生成,用来同Advertising RouterLS Sequence Number字段一同标识一个LSA

图4 OSPFv2 LSA头和OSPFv3 LSA头格式对比

 

OSPFv2中的LS Type长度为8比特,标识LSA的类型;OSPFv3LS Type字段由OSPFv28比特扩充为16比特,具体如5所示。

图5 OSPFv3 LS Type字段

 

OSPFv3LS Type字段中U位、S2位、S1位和LSA Function Code的含义如下:

·     U位:描述了路由器收到一个类型未知的LSA时如何处理。

¡     取值为0:表示把未知类型的LSA当成具有链路本地范围的LSA处理。

¡     取值为1:表示按照S2/S1位标识的泛洪范围来处理。

·     S2/S1位:共同标识LSA的泛洪范围。

¡     取值00:表示LSA只在产生该LSA的本地链路上泛洪。

¡     取值01:表示LSA的泛洪范围为产生该LSA的路由器所在区域。

¡     取值10:表示LSA将在整个自治系统内进行泛洪。

¡     取值11保留。

·     LSA Function CodeLSA类型编码,描述LSA的类型,类型编码取值与LSA类型的对应关系如2所示。

表2 类型编码取值与LSA类型对应关系

类型编码取值

LSA类型

1

Router LSA

2

Network LSA

3

Inter Area Prefix LSA

4

Inter Area Router LSA

5

AS External LSA

7

NSSA LSA

8

Link LSA

9

Intra Area Prefix LSA

 

2. Router LSA

OSPFv2Router LSA格式如6所示。

图6 OSPFv2 Router LSA格式

 

OSPFv3Router LSA格式如7所示。与OSPFv2相比,OSPFv3Router LSA格式变化比较大:

·     新增了Options字段,用来标识该路由器支持的功能。

·     取消了用来描述路由器连接数量的连接数字段#Links

·     对链路的描述方式发生改变,通过Interface IDNeighbor Interface IDNeighbor Router ID进行综合描述。

OSPFv2不同的字段解释如下:

·     WWild-card用于MOSPF,目前我司不支持。

·     Interface ID:所描述链路的本地接口ID

·     Neighbor Interface ID:所描述链路的邻居路由器的接口ID

·     Neighbor Router:所描述链路的邻居路由器ID

图7 OSPFv3 Router LSA格式

 

3. Network LSA

8所示,OSPFv3Network LSA中新增了Option字段,减少了Network Mask字段。

当网络类型为广播网和NBMA时,OSPFv3Network LSA仅仅描述了连接到链路上的所有路由器,包括DR本身,由于不包含Network Mask字段,OSPFv3Network LSA仅描述了拓扑信息,不再描述路由信息。

图8 OSPFv2 Network LSAOSPFv3 Network LSA格式对比

 

4. Inter Area Prefix LSA

Inter Area Prefix LSALSA类型编码为3,相当于OSPFv2Network Summary LSA。该LSA通过PrefixLengthPrefixOptions以及Address Prefix来描述到达区域外的IPv6地址前缀的路径信息。每一个IPv6地址前缀都会产生一个单独的Inter Area Prefix LSA

对于Stub区域,Inter Area Prefix LSA还可以用来描述缺省路由,描述缺省路由时前缀长度取值为0

OSPFv2Network Summary LSA格式如9所示。

图9 OSPFv2 Network Summary LSA格式

 

OSPFv3Inter Area Prefix LSA格式如10所示。

图10 OSPFv3 Inter Area Prefix LSA格式

 

OSPFv3Inter Area Prefix LSAOSPFv2 Network Summary LSA不同字段解释如下:

·     PrefixLengthIPv6地址前缀长度。

·     PrefixOptionsIPv6地址前缀选项,用来标识前缀的功能。根据前缀选项的设置,在路由计算过程中允许某些前缀被忽略,或者标识为不用重新公告。

·     Address PrefixIPv6地址前缀。

11所示,前缀选项的长度为一个字节,各字段含义为:

·     PPropagate):传播功能位,在NSSA前缀上设置,置1表示该前缀应该在NSSA区域边界重新公告。

·     MCMulticast):多播功能位,置位表示该前缀应该包含在IPv6多播路由计算中。

·     LALocal Address):本地地址功能位,置位表示该前缀就是发出该LSA的路由器接口的IPv6地址。

·     NUNo Unicast):非单播功能位,置位表示该前缀不会包括在IPv6单播路由计算中。

图11 OSPFv3 PrefixOption

 

5. Inter Area Router LSA

Inter Area Prefix LSALSA类型编码为4,相当于OSPFv2中的ASBR Summary LSAOSPFv2ASBR Summary LSA格式与Network Summary LSA相同,如9所示。

OSPFv3Inter Area Router LSA格式如12所示。主要字段描述如下:

·     Metric:到达区域外的目的路由器的路径开销。

·     Destination Router ID:区域外的目的路由器的Router ID

图12 OSPFv3Inter Area Router LSA格式

 

6. AS External LSA

AS External LSALSA类型编码为5,与OSPFv2中的AS External LSA作用相同。

OSPFv2AS External LSA格式如13所示。

图13 OSPFv2AS External LSA格式

 

OSPFv3AS External LSA格式如14所示。OSPFv3AS External LSAOSPFv2 AS External LSA不同字段解释如下:

·     Address PrefixPrefixLengthPrefixOptions共同标记了一个自治系统外部的一个IPv6地址前缀。

·     Referenced LS Type:引用的LSA的类型。如果该字段非0,则会有一个LSA与该LSA相关,Referenced LS Type为与该LSA相关的LSA类型。

·     Referenced Link State ID:引用的LSALink State ID,目前我司不支持。

图14 OSPFv3AS External LSA格式

 

7. Link LSA

Link LSALSA类型编码为8,每个路由器都为它所连接的每条链路产生单独的Link LSA

通过使用Link LSA

·     路由器可以把当前接口的链路本地地址向该链路上的所有其它路由器通告。

·     把自己在这条链路上的一系列IPv6地址信息向该链路上的所有其它路由器通告。

·     Network LSA收集Option位。

Link LSA的报文格式如15所示。

图15 OSPFv3 Link LSA

 

主要字段解释如下:

·     Router Priority:路由器优先级。

·     Options:代表当前路由器支持的可选性能。一个链路上的所有Link LSA的能力并集是Network LSA的能力。

·     Link Local Interface Address:链路本地接口地址。

·     #Prefixes:该LSA中所包含的IPv6地址前缀个数。

8. Intra Area Prefix LSA

Intra Area Prefix LSALSA类型编码为9OSPFv3的设计思想之一就是拓扑信息和路由信息分离,即计算拓扑的基本LSARouter LSANetwork LSA)中不再含有路由信息。所以原来OSPFv2中这两类LSA中所携带的路由信息由新的LSA来描述,于是引入了Intra Area Prefix LSA

路由器使用Intra Area Prefix LSA来公告一个或多个IPv6地址前缀,这些地址前缀信息描述如下路由信息:

·     描述路由器自身的路由信息

·     描述路由器连接到的一个Stub网络的路由信息。

·     描述路由器连接到的一个传输网络的路由信息。

Intra Area Prefix LSA的报文格式如16所示。

图16 OSPFv3 Intra Area Prefix LSA

 

Intra Area Prefix LSA描述了Router LSANetwork LSA所携带的路由信息,因此在Intra Area Prefix LSA中需要标明该LSA引用的Router LSANetwork LSA,这是通过Referenced LS TypeReferenced Link State IDReferenced Advertising Router字段来联合标识的。

主要字段的解释如下:

·     # Prefixes:包含的IPv6地址前缀的个数。

·     Referenced LS Type:引用LSA的类型,取值为1表明该LSARouter LSA相关,取值为2表明该LSANetwork LSA相关。

·     Referenced Link State ID:引用LSALink State ID。如果引用的是Router LSA,此字段值为0;如果引用的是Network LSA,此字段值为DR在该条链路上的Interface ID

·     Referenced Advertising Router:引用LSA的发布路由器。如果引用的是Router LSA,此字段值为产生该LSA路由器的Router ID;如果引用的是Network LSA,此字段值为DRRouter ID

典型组网应用

17所示,Device ADevice D均运行OSPFv3协议。整个自治系统划分为3个区域。其中Device BDevice C作为ABR来转发区域之间的路由。将Area2配置为Stub区域,减少通告到此区域内的LSA数量,但不影响路由的可达性。

图17 OSPFv3典型应用组网图

 

参考文献

·     RFC 3101The OSPF Not-So-Stubby Area (NSSA) Option

·     RFC 5340OSPF for IPv6

联系我们 联系我们
联系我们
回到顶部 回到顶部