OSPFv3技术白皮书
关键词:OSPF,OSPFv3,IPv4,IPv6
摘 要:OSPFv3是在OSPFv2基础上开发的用于IPv6网络的路由协议。本文简要介绍了OSPFv2的实现机制,并详细描述了OSPFv3与OSPFv2的异同点及组网应用。
缩略语:
缩略语 | 英文全名 | 中文解释 |
OSPF | Open Shortest Path First | 开放最短路径优先 |
OSPFv3 | Open Shortest Path First version 3 | 开放最短路径优先版本3 |
IGP | Interior Gateway Protocol | 内部网关协议 |
AS | Autonomous System | 自治系统 |
ABR | Area Border Router | 区域边界路由器 |
ASBR | Autonomous System Border Router | 自治系统边界路由器 |
LSA | Link Statement Advertisement | 链路状态通告 |
LSDB | Link State Data Base | 链路状态数据库 |
DR | Designated Router | 指定路由器 |
BDR | Backup Designated Router | 备份指定路由器 |
DD | Database Description | 数据库描述 |
LSR | Link State Request | 链路状态请求 |
LSU | Link State Update | 链路状态更新 |
LSAck | Link State Acknowledgment | 链路状态确认 |
NBMA | Non-Broadcast Multi-Access | 非广播多点可达网络 |
P2MP | Point-to-MultiPoint | 点到多点 |
P2P | Point-to-Point | 点到点 |
目 录
OSPFv2是IETF组织开发的一个基于链路状态的内部网关协议,具有适应范围广、收敛迅速、无自环、便于层级化网络设计等特点,因此在IPv4网络中获得了广泛应用。
随着IPv6网络的建设,同样需要动态路由协议为IPv6报文的转发提供准确有效的路由信息。基于此,IETF在保留了OSPFv2优点的基础上针对IPv6网络修改形成了OSPFv3。OSPFv3主要用于在IPv6网络中提供路由功能,是IPv6网络中路由技术的主流协议。
与OSPFv2相比,OSPFv3在工作机制上与OSPFv2基本相同;但为了支持IPv6地址格式,OSPFv3对OSPFv2做了一些改动。下面先对OSPFv2进行简要介绍,之后再详细介绍OSPFv3与OSPFv2的异同点。
在广播网或NBMA网络中,OSPF协议定义了DR和BDR,BDR是对DR的一个备份,在选举DR的同时也选举出BDR。
DR和BDR会和本网段内的所有DROther(既不是DR也不是BDR的路由器)建立邻接关系并交换路由信息,DROther之间不建立邻接关系、不交换路由信息,从而减少了广播网络和NBMA网络上各路由器之间邻接关系的数量,同时减少网络流量,节约了带宽资源。
随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,会存在以下问题:
l 路由器数量会增多,每台路由器都生成LSA,整个LSDB即所有LSA的集合会非常大,占用大量存储空间;
l 计算最短路径树耗时增加,导致CPU负担很重;
l 在网络规模增大之后,拓扑结构发生变化的概率也会增大,网络会经常处于“振荡”之中,造成网络中大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
OSPF协议通过将自治系统划分成不同的区域来解决上述问题。
区域是从逻辑上将路由器划分为不同的组,每个组用区域号ID来标识。
为了适应特定的网络需求,OSPF定义了两种特殊的区域:
(1) (Totally) Stub区域
Stub区域是一些特定的区域,Stub区域的ABR不允许注入Type5 LSA,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
为了进一步减少Stub区域中路由器的路由表规模以及路由信息传递的数量,可以将该区域配置为Totally Stub(完全Stub)区域,该区域的ABR不会将区域间的路由信息和外部路由信息传递到本区域。
(Totally) Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,(Totally) Stub区域位于自治系统的边界。
(2) NSSA区域
NSSA(Not-So-Stubby Area)区域是Stub区域的变形,与Stub区域有许多相似的地方。NSSA区域也不允许Type5 LSA注入,但可以允许Type7 LSA注入。Type7 LSA由NSSA区域的ASBR产生,在NSSA区域内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,传播到其他区域。
OSPF根据链路层协议类型将网络分为下列四种类型:
l 广播类型:当链路层协议是Ethernet、FDDI时,OSPF缺省认为网络类型是广播。在该类型的网络中,通常以组播形式(224.0.0.5和224.0.0.6)发送协议报文。
l NBMA类型:当链路层协议是帧中继、ATM或X.25时,OSPF缺省认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。
l P2MP类型:没有一种链路层协议会被缺省的认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将NBMA改为点到多点的网络。在该类型的网络中,缺省情况下,以组播形式(224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。
l P2P类型:当链路层协议是PPP、HDLC时,OSPF缺省认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。
OSPF有五种类型的协议报文:
l Hello报文:周期性发送,用来发现和维持OSPF邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)以及自己已知的邻居。
l DD报文:描述了本地LSDB中每一条LSA的摘要信息,用于两台路由器进行数据库同步。
l LSR报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。
l LSU报文:向对方发送其所需要的LSA。
l LSAck报文:用来对收到的LSA进行确认。内容是需要确认的LSA的Header(一个报文可对多个LSA进行确认)。
OSPF协议的路由计算过程可简单描述如下:
l 每台OSPF路由器根据自己周围的网络拓扑结构生成LSA,并通过更新报文将LSA发送给网络中的其它OSPF路由器。
l 每台OSPF路由器都会收集其它路由器通告的LSA,所有的LSA放在一起便组成了LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。
l OSPF路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映,各个路由器得到的有向图是完全相同的。
l 每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
OSPFv3在协议设计思路和工作机制与OSPFv2基本一致:
l 报文类型相同:包含Hello、DD、LSR、LSU、LSAck五种类型的报文。
l 区域划分相同。
l LSA泛洪和同步机制相同:为了保证LSDB内容的正确性,需要保证LSA的可靠泛洪和同步。
l 路由计算方法相同:采用最短路径优先算法计算路由。
l 网络类型相同:支持广播、NBMA、P2MP和P2P四种网络类型。
l 邻居发现和邻接关系形成机制相同:OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定,只有当双方成功交换DD报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系。
l DR选举机制相同:在NBMA和广播网络中需要选举DR和BDR。
为了支持在IPv6环境中运行,指导IPv6报文的转发,OSPFv3对OSPFv2做出了一些必要的改进,使得OSPFv3可以独立于网络层协议,而且只要稍加扩展,就可以适应各种协议,为未来可能的扩展预留了充分的可能。
OSPFv3与OSPFv2不同主要表现在:
l 基于链路的运行
l 使用链路本地地址
l 链路支持多实例复用
l 通过Router ID唯一标识邻居
l 认证的变化
l Stub区域的支持
l 报文的不同
l Option字段的不同
l LSA的异同
OSPFv2是基于网络运行的,两个路由器要形成邻居关系必须在同一个网段。
OSPFv3的实现是基于链路,一个链路可以划分为多个子网,节点即使不在同一个子网内,只要在同一链路上就可以直接通话。
OSPFv3的路由器使用链路本地地址作为发送报文的源地址。一个路由器可以学习到这个链路上相连的所有其它路由器的链路本地地址,并使用这些链路本地地址作为下一跳来转发报文。但是在虚连接上,必须使用全球范围地址或者站点本地地址作为OSPFv3协议报文的源地址。
由于链路本地地址只在本链路上有意义且只能在本链路上泛洪,因此链路本地地址只能出现在Link LSA中。
OSPFv3支持在同一链路上运行多个实例,实现链路复用并节约成本,如图1所示。
Router A、Router B、Router C和Router D连接到同一个广播网上,它们共享同一条链路且都能建立邻居关系,通过在Router A的Eth1/1、Router B的Eth1/1、Router C的Eth1/2上指定实例1、在Router A的Eth1/1、Router B的Eth1/1、Router D的Eth1/3上指定实例2,实现了Router A、Router B和Router C可以建立邻居关系,Router A、Router B和Router D可以建立邻居关系。
这是通过在OSPFv3报文头中添加Instance ID字段来实现的。如果接口配置的Instance ID与接收的OSPF v3报文的Instance ID不匹配,则丢弃该报文,从而无法建立起邻居关系。
在OSPFv2中,当网络类型为点到点或者通过虚连接与邻居相连时,通过Router ID来标识邻居路由器,当网络类型为广播或NBMA时,通过邻居接口的IP地址来标识邻居路由器。
OSPFv3取消了这种复杂性,无论对于何种网络类型,都是通过Router ID来唯一标识邻居。
OSPFv3协议自身不再提供认证功能,而是通过使用IPv6提供的安全机制来保证自身报文的合法性。所以,OSPFv2报文中的认证字段,在OSPFv3报文头中被取消。
由于OSPFv3支持对未知类型LSA的泛洪,为防止大量未知类型LSA泛洪进入Stub区域,对于向Stub区泛洪的未知类型LSA进行了明确规定,只有当未知类型LSA的泛洪范围是区域或链路而且U比特没有置位时,未知类型LSA才可以向Stub区域泛洪。
OSPFv3报文封装在IPv6报文中,每一种类型的报文都是以一个16字节的报文头部开始。
与OSPFv2一样,OSPFv3的五种报文都有同样的报文头,只是报文中的字段有些不同。
OSPFv3的LSU和LSAck报文与OSPFv2相比没有什么变化,但OSPFv3的报文头、Hello、DD以及LSR报文中的字段与OSPFv2略有不同,报文的改变包括以下几点:
l 版本号从2升级到3。
l 报文头的不同:与OSPFv2报文头相比,OSPFv3报文头长度只有16字节,去掉了认证字段但加了Instance ID字段。Instance ID字段用来支持在同一条链路上运行多个实例,且只在链路本地范围内有效,如果路由器接收到的Hello报文的Instance ID与当前接口配置的Instance ID不同,将无法建立邻居关系。
l Hello报文的不同:与OSPFv2 Hello报文相比,OSPFv3 Hello报文去掉了网络掩码字段,增加了Interface ID字,用来标识发送该Hello报文的接口ID。
在OSPFv2中,Option字段出现在每一个Hello报文、DD报文以及每一个LSA中。
在OSPFv3中,Option字段只在Hello报文、DD报文、Router LSA、Network LSA、Inter Area Router LSA以及Link LSA中出现。
OSPFv2的Option字段如下所示:
图2 OSPFv2 Option字段格式
OSPFv3的Option字段如下所示:
图3 OSPFv3 Option字段格式
从上图可以看出,与OSPFv2相比,OSPFv3的Option字段增加了R比特、V比特。其中:
l R比特:用来标识设备是否是具备转发能力的路由器。如果R比特置0,宣告该节点的路由信息将不会参加路由计算,如果当前设备是一个不想转发非本地地址的报文,可以将R比特置0。
l V比特:如果V比特置0,该路由器或链路也不会参加路由计算。
OSPFv3有以下七种类型的LSA,下面针对与OSPFv2 LSA异同点进行说明。
表1 OSPFv3 与OSPFv2 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 LSA和Intra Area Prefix LSA。
l Router LSA不再包含地址信息,使能OSPFv3的路由器为它所连接的每条链路产生单独的Link LSA,将当前接口的链路本地地址以及路由器在这条链路上的一系列IPv6地址信息向该链路上的所有其它路由器通告。
l Router LSA和Network LSA中不再包含路由信息,这两类LSA中所携带的路由信息由Intra Area Prefix LSA来描述,该类LSA用来公告一个或多个IPv6地址前缀。
LSA的泛洪范围已经被明确地定义在LSA的LS Type字段,目前,有三种LSA泛洪范围。
l 链路本地范围:LSA只在本地链路上泛洪,不会超出这个范围,该范围适用于新定义的Link LSA。
l 区域范围:LSA的泛洪范围仅仅覆盖一个单独的OSPFv3区域。Router LSA、Network LSA、Inter Area Prefix LSA、Inter Area Router LSA和Intra Area Prefix LSA都是区域范围泛洪的LSA。
l 自治系统范围:LSA将被泛洪到整个路由域,AS External LSA就是自治系统范围泛洪的LSA。
在OSPFv2中,收到类型未知的LSA将直接丢弃。
OSPFv3在LSA的LS Type字段中增加了一个U比特位来位标识对未知类型LSA的处理方式:
l 如果U比特置1,则对于未知类型的LSA按照LSA中的LS Type字段描述的泛洪范围进行泛洪;
l 如果U比特置0,对于未知类型的LSA仅在链路范围内泛洪。
OSPFv3 LSA封装在LSA头的后面,下面将重点介绍OSPFv3与OSPFv2在LSA头以及LSA内容上的不同点:
图4 OSPFv2 LSA头和OSPFv3 LSA头格式对比
从图4可以看出,与OSPFv2相比,OSPFv3的LSA头部取消了Options字段,且Link State ID不再有具体的含义,而是由当前路由器随机生成的,用来同Advertising Router、LS Sequence Number字段一同标识一个LSA。
OSPFv2中的LS Type长度为8比特,指定LSA的类型;OSPFv3的LSA Type字段由OSPFv2的8比特扩充为16比特,具体如图5所示:
l U位:描述了路由器收到一个类型未知的LSA时如何处理,取值为0表示把类型未知LSA当成具有链路本地范围的LSA一样处理,取值为1表示按照S2/S1位标识的泛洪范围来处理。
l S2/S1位:共同标识LSA的泛洪范围,取值00表示LSA只在产生该LSA的本地链路上泛洪;取值01表示LSA的泛洪范围为产生该LSA的路由器所在区域;取值10表示LSA将在整个自治系统内进行泛洪;取值11保留。
l LSA Function Code:LSA类型编码,描述LSA的类型,类型编码取值与LSA类型的对应关系如下表所示。
表2 类型编码取值与LSA类型对应关系
类型编码取值 | LSA类型 |
1 | Router LSA |
2 | Network LSA |
3 | Inter Area Prefix LSA |
4 | Inter Area Router LSA |
5 | AS External LSA |
6 | Group Membership LSA |
8 | Link LSA |
9 | Intra Area Prefix LSA |
OSPFv2的Router LSA格式如下所示:
图6 OSPFv2 Router LSA格式
OSPFv3的Router LSA格式如下所示:
如图7所示,与OSPFv2相比,OSPFv3的Router LSA格式变化比较大:
l 新增了Options字段,用来标识该路由器支持的功能。
l 取消了用来描述路由器连接数量的连接数字段#Links。
l 对链路的描述方式发生改变,通过Interface ID、Neighbor Interface ID和Neighbor Router ID进行综合描述。
与OSPFv2不同的字段解释如下:
l W:(Wild-card):用于MOSPF,目前我司不支持。
l Interface ID:所描述链路的本地接口ID。
l Neighbor Interface ID:所描述链路的邻居路由器的接口ID。
l Neighbor Router:所描述链路的邻居路由器ID。
图8 OSPFv2 Network LSA和OSPFv3 Network LSA格式对比
如图8所示,OSPFv3的Network LSA中新增了Option字段,减少了Network mask字段。
当网络类型为广播网和NBMA时,OSPFv3的Network LSA仅仅描述了连接到链路上的所有路由器,包括DR本身,由于不包含Network mask字段,OSPFv3的Network LSA仅描述了拓扑信息,不再描述路由信息。
Inter Area Prefix LSA的LSA类型编码为3,相当于OSPFv2的Network Summary LSA,通过PrefixLength、PrefixOptions以及Address Prefix来描述到达区域外的IPv6地址前缀的路径信息,每一个Pv6地址前缀都会产生一个单独的Inter Area Prefix LSA。
对于Stub区域,Inter Area Prefix LSA还可以用来描述缺省路由,描述缺省路由时前缀长度取值为0。
OSPFv2的Network Summary LSA格式如下所示:
图9 OSPFv2 Network Summary LSA格式
OSPFv3的Inter Area Prefix LSA格式如下所示:
图10 OSPFv3 Inter Area Prefix LSA格式
OSPFv3的Inter Area Prefix LSA与OSPFv2 Network Summary LSA不同字段解释如下:
l PrefixLength:IPv6地址前缀长度。
l PrefixOptions:IPv6地址前缀选项,用来标识前缀的功能,根据前缀选项的设置,在路由计算过程中允许某些前缀被忽略,或者标识为不用重新公告。
l Address Prefix:IPv6地址前缀。
其中,前缀选项一个字节长度,格式如图11所示:
l P(Propagate):传播功能位,在NSSA前缀上设置,置1表示该前缀应该在NSSA区域边界重新公告。
l MC(Multicast):多播功能位,置位表示该前缀应该包含在IPv6多播路由计算中。
l LA(Local Address):本地地址功能位,置位表示该前缀就是发出该LSA的路由器接口的IPv6地址。
l NU(No Unicast):非单播功能位,置位表示该前缀不会包括在IPv6单播路由计算中。
Inter Area Prefix LSA的LSA类型编码为4,相当于OSPFv2中的ASBR Summary LSA。OSPFv2的ASBR Summary LSA格式与Network Summary LSA相同,如图9所示。
OSPFv3的Inter Area Router LSA格式如图12所示:
图12 OSPFv3的Inter Area Router LSA格式
主要字段描述如下:
l Metric:到达区域外的目的路由器的路径开销。
l Destination Router ID:区域外的目的路由器的Router ID。
AS External LSA的LSA类型编码为5,与OSPFv2中的AS External LSA作用相同。
OSPFv2的AS External LSA格式如图13所示:
图13 OSPFv2的AS External LSA格式
OSPFv3的AS External LSA格式如图14所示:
图14 OSPFv3的AS External LSA格式
如图14所示,OSPFv3的AS External LSA与OSPFv2 AS External LSA不同字段解释如下:
l Address Prefix、PrefixLength、PrefixOptions共同标记了一个自治系统外部的一个IPv6地址前缀。
l Referenced LS Type:引用的LSA的类型。如果该字段非0,则会有一个LSA与该LSA相关,Referenced LS Type 为与该LSA相关的LSA类型。
l Referenced Link State ID:引用的LSA的Link State ID,目前我司不支持。
Link LSA的LSA类型编码为8,每个路由器都为它所连接的每条链路产生单独的Link LSA。
通过使用Link LSA:
l 路由器可以把当前接口的链路本地地址向该链路上的所有其它路由器通告。
l 把自己在这条链路上的一系列IPv6地址信息向该链路上的所有其它路由器通告。
l 为Network LSA收集Option位。
报文格式如图15所示:
主要字段解释如下:
l Router Priority:路由器优先级。
l Options:代表当前路由器支持的可选性能。一个链路上的所有Link LSA的能力并集是Network LSA的能力。
l Link Local Interface Address:链路本地接口地址。
l # prefixes:该LSA中所包含的IPv6地址前缀个数。
Link LSA的LSA类型编码为9,OSPFv3的设计思想之一就是拓扑信息和路由信息分离:计算拓扑的基本LSA(Router LSA和Network LSA)中不再含有路由信息,所以原来OSPFv2中这两类LSA中所携带的路由信息由新的LSA来描述,于是引入了Intra Area Prefix LSA。
路由器使用Intra Area Prefix LSA来公告一个或多个IPv6地址前缀,这些地址前缀信息描述如下路由信息:
l 描述路由器自身的路由信息;
l 描述路由器连接到的一个Stub网络的路由信息;
l 描述路由器连接到的一个传输网络的路由信息。
报文格式如图16所示:
图16 OSPFv3 Intra Area Prefix LSA
Intra Area Prefix LSA描述了Router LSA和Network LSA所携带的路由信息,因此在Intra Area Prefix LSA中需要标明该LSA引用的Router LSA或Network LSA,这是通过Referenced LS Type、Referenced Link State ID和Referenced Advertising Router字段来联合标识的。
主要字段的解释如下:
l # Prefixes:包含的IPv6地址前缀的个数。
l Referenced LS Type:引用LSA的类型,取值为1表明该LSA与Router LSA相关,取值为2表明该LSA与Network LSA相关。
l Referenced Link State ID:引用LSA的Link State ID。如果引用的是Router LSA,此字段值为0;如果引用的是Network LSA,此字段值为DR在该条链路上的Interface ID。
l Referenced Advertising Router:引用LSA的发布路由器。如果引用的是Router LSA,此字段值为产生该LSA路由器的Router ID;如果引用的是Network LSA,此字段值为DR的Router ID。
图17 OSPFv3典型组网案例组网图
l 使用OSPFv3路由协议实现网络的互通。
l 所有的路由器都运行OSPFv3,整个自治系统划分为3个区域。其中Router B和Router C作为ABR来转发区域之间的路由。
l 要求将Area2配置为Stub区域,减少通告到此区域内的LSA数量,但不影响路由的可达性。
l RFC 2328:OSPF Version 2
l RFC 2740:OSPF for IPv6
Copyright ©2012 杭州华三通信技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
本文档中的信息可能变动,恕不另行通知。