Title

OSPFv2原理详解(基于RFC2328)+配置介绍+RFC2328翻译

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。
虽然路由器自身可以对协议做一些独特的配置,但是报文仍然是协议的核心。例如,OSPF的完全末节区域不在报文中体现,只需在边界路由器ABR上配置即可。这是因为ABR是区域向外(区域外和AS外)通信的核心节点,只需在ABR上进行限制而无需报文协商即可完成区域外路由信息的泄露。而末节区域则是要求末节区域内部也不得引入外部路由,因此要全区域协商。同理Nssa和Total Nssa也类似。

因此本文将在OSPFv2协议报文的基础上进行介绍,以对OSPF协议及性能分析。
此外,本文档将不断更新以补充协议在处理过程时的细微处理过程。
OSPFv2的历史RFC版本介绍可见
OSPF RFC历史版本集合
OSPFv2的RFC2328翻译介绍可见
OSPFv2 RFC2328文档翻译1

OSPFv2 RFC2328文档翻译2

持续更新~

目录

@

1.OSPFv2报文介绍

接下来将从报文底层一次向上对OSPFv2报文进行介绍。如无特殊说明,将以以太网广播类型为主介绍。

在这里插入图片描述
数据链路层:一般来说OSPFv2运行于以太网,底层协议为Ethernet II(另一种以太帧为IEEEE 802.3 Ethernet,使用802.3的协议有ISIS、生成树等)
SMac使用接口mac;
DMac使用组播mac,该mac由组播IP转化而来。由于OSPFv2有固定的组播IP,因此IPv4网络的DMac固定为01:00:5e:00:00:05

网络层:之后向上承载IPv4(类型0x0800)。
SIP使用接口IP;
DIP使用组播IP。OSPFv2固定使用两种组播IP:AllSPFRouters和AllDRouters。AllSPFRouters使用224.0.0.5,所有运行OSPF的路由器都监听并接收发送到此地址的数据包。AllDRouters分配为224.0.0.6,DR和BDR路由器监听并接收发送到此地址的数据包。
DS字段/TOS字段使用高优先级CS6,在网络拥塞场景下优于普通流量优先传递。相似的处理方式,可见于BGP等协议。关于QOS内容,可查阅相关文档。
TTL字段设定为1,以限制OSPFv2协议包的传递范围为1跳。这里了1跳可以理解为1个局域网,也即只能在单个局域网内传输。
IP协议号固定为89。相关定义可在 RFC 1700中查询到。

1.1.OSPFv2 Header

在这里插入图片描述
OSPFv2协议具有公共头部,并在头部标识携带的协议包类型。现对相应字段进行介绍。
version:1字节。2标识目前版本为OSPFv2版本。
Message Type:1字节。取值1-5,1标识为Hello包,2标识为DBD包,3标识为LSR包,4标识为LSU包,5标识为LSAck包。
Packet Length:2字节。标识携带了OSPFv2 Header的整个OSPF包长度。而IP包中的Total Length(也为2字节)标识的是IP Header+IP承载的数据长度,可在上图看到为64(=20+44,IP Header固定长部分为20)
Source OSPF Router:4字节。标识OSPF包发送者的身份,使用Router ID填充
Area ID:4字节。标识路由器(接口)所处区域。用于层次化网络架构划分。
在这里插入图片描述CheckSum:2字节。用于校验数据包的准确性。校验从OSPF Header开始除Auth Data以外的字段。
Auth Type:2字节。用于路由器之间加密协商。
Auth Data:8字节。与Auth Type协调一致的字段。与Auth Type共同进行加密协商。

1.2.类型1-Hello包

OSPFv2的Hello包用于建立和维护邻居关系。

1.2.1初始情况下的Hello包

在这里插入图片描述
Network Mask:4字节。启用OSPFv2接口的掩码。
Hello Interval:2字节。发送Hello包的间隔。广播网默认10s。
在这里插入图片描述

Options:1字节。选项字段,这里只介绍常用字段。
DN bit=MPLS VPN场景下避免环路。在PE向CE发送Summary-LSA、AS-External-LSA和Nssa-LSA时置1位。PE接收到DN=1的LSA不进行处理。
O bit=Opaque LSA(类型9,10,11)支持能力。置0表示不支持。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
L bit=External-Attributes-LSA支持能力。
N bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
MT bit=多拓扑功能。默认置0表示不支持。
Router Priority:1字节。进行DR选举时的比较依据。取值0-255,默认取1。设置为0时,表示不参与DR选举。
在这里插入图片描述
Router Dead Interval:4字节。未收到邻居Hello包而将邻居/邻接关系dead的最长事件。默认为Hello Interval的4倍。
在这里插入图片描述
Designated Router:4字节。广播网和NBMA网络上的选举出的DR路由器。首次启动置为0.0.0.0。
Backup Designated Router:4字节。广播网和NBMA网络上选举出的的BDR路由器。首次启动置为0.0.0.0。

1.2.2.交互信息完成的Hello包

在这里插入图片描述Active Neighbor:链路上存在的活动邻居路由器(邻居的Router ID表示)。
通过邻居间的Hello包交互,可以确认链路上所存在的DR和BDR路由器,以及存在的活动邻居。
交互过程在邻居状态机章节进行描述。

1.3.类型2-DBD包

Database Description(DBD)包也称为DD包,用于互相传递链路状态数据库摘要信息。这里的链路状态数据库摘要主要指的是LSA的头部信息。DBD包主要有两种作用:一种是主从选举,一种是传递数据库摘要。接下来对其进行介绍。

1.3.1.DBD的主从选举

在这里插入图片描述
Interface MTU:2字节。在不分片情况下,可以发送到相关接口的最大IP数据报的大小(以字节为单位)。
Options:1字节。选项字段,这里只介绍常用字段。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系。置0表示不支持。
N bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
DB Description:2字节。用于指导DBD报文的有序传递。
I bit=置1用于表明这是第一次发送DBD包
M bit=置1用于表明此后还会发送DBD包
M/S bit=用于表明主从位。置1表示为主,置0表示为从
DD Sequence:2字节。表明传递DBD的序列。

主从选举依据是OSPFv2 Header中携带的Source OSPF Router字段也即Router ID。Router ID大的路由器成为主。注意由于OSPF的DR默认不支持抢占,因此Router ID大的不一定是主。
在相邻(同一链路)的路由器正常建立邻居关系(2-way)后,首先发送一个空的DBD包进行主从选举。该DBD携带Options字段用于表明自己设备的所支持OSPFv2功能,携带DB Description字段进行主从选举。初始时都将I、M和M/S bits设置为1,携带DD Sequence值(DD Sequence为随机产生)。
此后,主从选举完成后根据设备自身情况设置I、M和M/S位。

Note:DBD的DD Sequence为随机产生,LSA中的Sequence Number从0x80000001开始计数。两者不同。

1.3.2.数据库摘要的传递

在这里插入图片描述
传递数据库摘要的DBD包,相比于用于主从选举的DBD包添加了LSA Header信息。每种LSA都具有相同的Header信息,涵盖了相应的链路状态。
在主从选举完成后,首先由主设备主动发起一个DBD包将DB Description的M/S位置1,并携带自身LSA摘要信息。如果自身还有未发送的LSA摘要,则将该DBD包中的DB Description的M位置1,无则置0。
随后从设备回应DBD包,将DB Description的M/S位置0,并携带自身LSA摘要信息。如果自身还有未发送的LSA摘要,则将该DBD包中的DB Description的M位置1,无则置0。且此DBD包中的DD Sequence字段与主设备的DBD包一致。
之后主设备将DD Sequence+1发送给从设备,循环上述过程直到主从设备都有完成了LSA摘要的传递。
Note:在主设备传递LSA摘要完成而从设备未传递完成的情况下。主设备能从从设备的DB Description字段中获悉,并发送空的DBD包直到主从都完成DBD传递。

1.4.类型3-LSR包

链路状态请求LSR(Link State Request)包用于向特定邻居请求自己没有的LSA。
在这里插入图片描述
LSR只包含可唯一确定一条LSA的三要素:
LS 类型:4字节。LS类型主要有Type-1 Router-LSA,Type-2 Network-LSA,Type-3 Summary-LSA,Type-4 ASBR-LSA(RFC2338也称为Type-4 Summary-LSA),Type-5 AS-External-LSA和Type-7 Nssa-LSA。
此外还有Type-8 LSA External-Attributes-LSA,Type-9/10/11 Opaque LSA(提供用于OSPF的扩展的通用机制)等。
链路状态ID:4字节。与LS 类型相关的LSA信息。
通告路由器:4字节。产生该LSA路由器的Router ID。

Note:LSA之间存在差别,LSA自身也存在差别(具有时效性,有新旧差别)。LSR包不涉及。

不同的LSA将在链路状态通告LSA章节进行介绍。

1.5.类型4-LSU包

链路状态更新(Link State Update)包传递了完整了LSA信息。不仅包含LSA头部,还包含LSA所携带的拓扑信息和路由信息。
在这里插入图片描述Number of LSAs:4字节。LSU报文所传递的LSA数目。
红框区域即为LSA的Header信息。
此外需要注意的是,DR/BDR发送LSU通告时目的地址为AllSPFRouters =224.0.0.5,而DROthers发送LSU通告时目的地址为AllDRouters =224.0.0.6

1.6.类型5-LSAck包

通过封装LSA的头部信息完成LSA传递的确认。
在这里插入图片描述

点击此处回到目录

1.7.基于协议包所做的理解

1.7.1.OSPFv2认证

基于以上报文介绍,对OSPFv2的认证方式总的来说有2种:接口认证和区域认证。接下来对其进行简单介绍。

接口认证
在这里插入图片描述
OSPFv2是链路状态协议。所有协议包以接口为基础进行划分,每个接口只能具有一种状态。而路由器自身却可以有多种类型接口。在接口上进行认证,会对OSPFv2 Header的Auth Type和Auth Data字段进行相应处理。当接口接收到数据包对其检查时,会直接丢弃报文。因此2台路由器只能建立1-way连接。这一点不同于(integrate) ISIS,ISIS的TLV方式会忽略无法识别的字段。在特定场景下会在1端形成2-way连接。
启用接口认证的邻居路由器必须相应字段协商一致才可建立邻居关系,此处对认证的算法不在进行详细介绍。RFC5709(2009)更新了OSPFv2认证信息。

因此接口认证失败的邻居无法建立邻居/2-way关系。

区域认证
在这里插入图片描述
相比于接口认证,区域认证要求整个区域都进行认证。具体来说,是在运行了区域认证的路由器上要求所有运行了OSPF的接口进行认证。因此,从这个角度严格来说并不一定所有设备都进行认证才能建立起邻居。
例如在这里插入图片描述同一个区域的4台路由器AR1和AR2配置了区域认证,而AR3和AR4未进行配置,则AR1和AR2可以正常建立邻居,AR3和AR4可以正常建立邻居,而AR2和AR3无法建立邻居。

1.7.2影响OSPFv2邻接/邻居建立的因素

从OSPFv2的协议报文中可以得到影响邻接邻居建立的因素如下
头部要求
1、version一致
2、Router ID不冲突
3、Area ID一致
4、CheckSum一致(校验是否存在字节丢失)
5、认证及认证类型一致(用于数据加密)
Hello要求
6、掩码一致(广播网和NBMA进行校验)。广播网和NBMA默认同网络同掩码。
7、Hello Interval一致,默认10s(必须一致)
8、Dead Interval一致,默认Hello Interval*4=40s(必须一致且比Hello Interval大)
9、Options一致(描述了路由器自身OSPFv2功能的支持能力,例如E-bit和N-bit)
10、Dr Priority,默认1(广播网和NBMA进行校验必须都不为0才能进行DR选举)
其他要求
11、接口MTU1500(DBD报文要求,华为不检测默认为0,思科进行检测。影响邻接建立)。实际上只要接受DBD的该字段不比自身大即可。
在这里插入图片描述

点击此处回到目录

2.链路状态通告LSA

RFC2328描述了5种LSA:Router-LSA,Network-LSA,Summary-LSA,ASBR-LSA(RFC2328将其表述为Type-3 Summary-LSA)和AS-External-LSA。而实际上有如下

LSA Type 1: OSPF Router LSA
LSA Type 2: OSPF Network LSA
LSA Type 3: OSPF Summary LSA
LSA Type 4: OSPF ASBR Summary LSA
LSA Type 5: OSPF ASBR External LSA
LSA Type 6: OSPF Group Membership LSA
LSA Type 7: OSPF Not So Stubby Area (NSSA) External LSA
LSA Type 8: OSPF External Attributes LSA (OSPFv2) / Link Local LSA (OSPFv3)。
在IPv4网络中用于为BGP传递属性。
LSA Type 9: OSPF Link Scope Opaque (OSPFv2) / Intra Area Prefix LSA (OSPFv3)。
MPLS TE场景下的Opaque LSAs传递OSPF信息
LSA Type 10: OSPF Area Scope Opaque LSA
扩展功能,MPLS TE场景下通告MPLS和其他协议
LSA Type 11:OSPF AS (Autonomous System) Scope Opaque LSA
扩展功能,与LSA Type 10具有相同功能但是不能在特殊区域泛洪。

,这里仅对Type 1-5和Type-7 LSA进行介绍。

LSA Type Link State ID ADV Router
Type-1 Router-LSA 自己Router ID 自己Router ID
Type-2 Network-LSA 伪节点IP/DR接口IP DR的Router ID
Type-3 Summary-LSA IP网络号 ABR的Router ID
Type-4 ASBR Summary-LSA ASBR的Router ID ABR的Router ID
Type-5 AS External-LSA IP网络号 ASBR的Router ID
Type-7 Nssa-LSA IP网络号 ASBR的Router ID

2.1.Router-LSA和Network-LSA

Type-1 LSA称为Router-LSA路由器LSA,描述了所连接区域的链路信息和路由信息(开销)。
在这里插入图片描述

LS Age:7bit。LSA的老化时间。从0开始增长。最大3600s时老化。
Do not Age:1bit。老化bit位,置1时从不老化。
Options:1字节。
DN bit=MPLS VPN场景下避免环路。在PE向CE发送Summary-LSA、AS-External-LSA和Nssa-LSA时置1位。PE接收到DN=1的LSA不进行处理。
O bit=Opaque LSA(类型9,10,11)支持能力。置0表示不支持。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
L bit=External-Attributes-LSA支持能力。
N bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
MT bit=多拓扑功能。默认置0表示不支持。

LS 类型:4字节。LS类型主要有Type-1 Router-LSA,Type-2 Network-LSA,Type-3 Summary-LSA,Type-4 ASBR-LSA(RFC2338也称为Type-4 Summary-LSA),Type-5 AS-External-LSA和Type-7 Nssa-LSA。
此外还有Type-8 LSA External-Attributes-LSA,Type-9/10/11 Opaque LSA(提供用于OSPF的扩展的通用机制)等。
链路状态ID:4字节。与LS 类型相关的LSA信息。
通告路由器:4字节。产生该LSA路由器的Router ID。
LSA相比于Header增加了如下 字段:
Flags:1字节。
H-bit:
空余2bits。
N-bit:
W-bit:置1表示路由器为组播“通吃者“,用于MOSPF场景下
V-bit:置1表示路由器为虚链路的端节点
E-bit:置1表示路由器为ASBR
B-bit:置1表示路由器为ABR
Number of Links:2字节。本条LSA中所包含的link数量。
不同类型的Router-LSA:12字节。
@Link ID:4字节。
@Link Data:4字节。
@Link Type:1字节。
@Number of Metrics:1字节。
@Metric:2字节。

Router-LSA可分为4种,每种Router-LSA之间的区别如下:

Link Type Link ID Link Data
Type-1 PTP 邻居Router ID 自己接口IP
Type-2 Transit 伪节点IP/DR接口IP 自己接口IP
Type-3 StubNet IP网络号 IP网络掩码
Type-4 Virtual 邻居Router ID 自己接口IP

在这里插入图片描述

注意与LSA类型的区分。这里是Type-1 Route-LSA中携带信息的分类。
@并且从Router-LSA的类型可以发现,只有StubNet用于描述路由其他类型Router-LSA用于拓扑的生成
@并且一条Router-LSA中可以包含多个网络信息(StubNet、Transit等)

Type-2 LSA称为Network-LSA网络LSA,描述了所连接广播型链路上所连接的拓扑信息。
在这里插入图片描述总的来说Network-LSA相比于LSA Header只增加了2部分:
Netmask:4字节。描述了链路上伪节点所连接的OSPFv2路由器网段信息。
Attached Router:4*N字节。N为链路上连接的路由器数目。

2.1.1.最短路径树的产生(域内)

单链路上拓扑形成:邻居表
在不考虑区域的情况下(无Summary-LSA和其他路由LSA),仅有Router-LSA和Network-LSA足以对区域内的路径树进行描述。
拓扑信息:Router-LSA型的Transit网络(/PtP网络和Virtual网络)和Network-LSA描述了区域内拓扑信息。
路由信息:StubNet网络描述了链路的路由信息。

广播网/NBMA使用Transit网络进行描述,PtP和PtMP使用PtP网络进行描述。这里以Transit为主进行描述。

@:Transit的Link Data描述了自己的接口IP(同时OSPFv2的Hello中包含接口掩码)用于向伪节点(DR) (也即,Transit的Link ID) 通告。
@:同时伪节点(DR接口IP)发送Network-LSA,描述了该网络上所连接的路由器。通过这两个LSA确认自己所在链路上的拓扑状态。

多链路上拓扑形成:LSDB表
@:路由器检查其他路由器的Router-LSA(先检查同区域同链路)的Transit网络,观察其是否有其他链路网络信息。通过Transit网络的Link ID,确认伪节点网络地址(Link ID)。
@:查找伪节点(该Transit网络的Link ID)产生的Network-LSA,确认链路上所连接的路由器。
@:不断循环上述过程,可以遍历区域中的所有网络连接。
@
并且Transit类型的Router-LSA中的Link Data包含了接口IP,该IP可作为生成树/路由表的下一跳。
@

多链路上生成树形成(挂载叶子节点):路由表
挂载叶子节点也即生成树形成的过程,主要通过开销来判断。

@:路由器的直连网络(Transit网络)其Metric=1,P2P链路其Metric=48。
@:伪节点到网络中路由器的开销为0,因此具有该Transit网络到其他路由器的开销=0+1。P2P=0+48。
@空格行
@:路由器此时具有全网拓扑和全网开销,通过Dijkstra算法计算到达区域内网络的最短生成树。这里的最短通过到达节点的开销最小来确认。Note:如果有多条路径开销相同,进行负载分担
@空格行
@:挂载StubNet网络。StubNet网络实际上是节点/路由器所直连的路由。StubNet直连路由开销为0,也即到达该网络的开销为到达该节点的开销。

2.1.2.接口开销

OSPF的开销使用的是参考值。接口开销=带宽参考值(100M)/接口带宽,取计算结果的整数部分作为接口开销值(当结果小于1时取1)。
@可以在接口上直接更改开销
在这里插入图片描述@也可在进程中直接修改参考带宽值。
在这里插入图片描述
此外RFC2328还定义了开销最大值不超过LSInfinity=16777215(24-bits全1)。
而则重新定义了一种Metric计算方法以适应带宽逐渐增加的场景。

2.2.Summary-LSA

Type-3 Summary-LSA的概念是和区域的概念紧密相连的。OSPF区域的作用主要在于
1@:支持路由过滤和路由选择,丰富了路由的可操作性。
2@:缩小了OSPFv2的整个自治系统生成树大小。缩小了生成树的改动对全局的影响。注意:总的来说LSDB大小是增大的。
实际上在单个区域内OSPFv2建立了一张SPF最短路径树,而区域边界路由ABR实际上将其他区域的信息改变成了路由信息挂载到ABR上。其他区域的拓扑状态实际上对本区域的设备是不可见的。这样的效果导致了区域内到达区域间的信息,只能通过ABR来操作。有多个ABR时,通过开销Metric来选择。到Summary-LSA的目的网段开销=自己SPF内开销+ABR到目的网段的开销
实际上整个AS是由ABR连接起来的多个SPF树。
3@:特殊区域的存在为减轻设备压力提供了可能。末节区域拒绝AS外路由。
在这里插入图片描述
相比于LSA Header仅增加了三部分:
Netmask:4字节。描述路由掩码。
TOS:1字节。服务类型
Metric:3字节。描述路由开销。
因此每条路由就是一条LSA。

2.2.1.区域边界路由ABR

ABR通常是这样产生的
1@:连接多个区域,但必须连接area0。且在area0中必须有活动接口
2@:在区域内产生Router-LSA的Flags字段的B-bit置位进行标识。
3@:当设备为虚链路的端接口时,可认为自己为ABR。
注意的是实际上ABR承担了整个区域向外通信的功能,并将其他区域的信息转化为区域自己的路由信息。因此对设备性能要求较高。

2.2.2.区域间防环

区域内通过Dijkstra算法产生的SPF可以保证区域间通信无环路,而区域间通信主要通过各自ABR上挂载叶子路由来产生。此时有可能出现环路。为了防止区域间环路进行如下定义。
1@Area0有且只有一个,并且其他区域只能通过Area0进行通信。
由于每个区域都是无环的,只要保证区域可以只通过一个区域到达时此时就可消除环路。(骨干区域Area0不可分割)

然而当一个区域存在多个ABR(多个出口时),情况发生改变在这里插入图片描述AR1和AR2都为ABR,通过路由策略等方式完全有可能AR2通过Area0内的Type-3(描述其他非Area0的路由)和开销差于Area10的Type-3(AR1产生)。此时仅有开销来计算最短路径的方式不在可靠,可能引发次优路径和环路风险。因此进行如下规定
2@ABR为非Area0产生描述其他非Area0区域的Type-3 Summary-LSA不会传回Area0。可以理解为Area0的type-3>非Area0的type-3。 这一行为也称为水平分割。
eg:AR1为Area10产生描述Area0(也包括非Area0且非Area10)的Type-3 Summary-LSA不会传回Area0。
(指不会通过改变Adv Router的方式重新产生泛洪)。
而相反可以允许ABR为Area0产生描述非Area0的Type-3 Summary-LSA传回原来的非Area0
eg:AR1为Area0产生描述Area10的Type-3 Summary-LSA可以传回Area10

但进行如下规定防止次优和环路
3@同一个区域的Type-1 Router-LSA优于Type-3 Summary-LSA。
这样的规定使得OSPF可以允许非Area0的分裂(不推荐),也即可以将其他非Area0的区域设置相同的Area ID

2.2.3.区域间路由汇总

区域的一个重要作用就是可以进行路由汇总。OSPFv2有如下汇总原则。
1@:ABR对区域间路由做汇总,只能对直连区域做汇总。
2@:当明细路由全部失效,汇总路由才会失效
3@:汇总路由的开销=明细路由中最大的一个(cisco继承的是最小的)
4@:多个ABR汇总同一个汇总路由,则不处理其他汇总路由。
Note:对于多个ABR汇聚了相同的聚合路由,此时ABR只处理自己产生的汇总路由而忽略其他ABR产生的汇总路由。需要注意的是如果不同区域汇总了相同的路由,这样有可能导致区域间无法通信。
为了降低复杂性5@:当一个非骨干区域(非Area0)存在多个ABR时且需要对非area0进行路由汇总时,建议对ABR上配置相同的路由汇总。因为此时ABR会将汇总路由回馈到非骨干区域(非Area0)。导致环路。
在这里插入图片描述

点击此处回到目录

2.3.ASBR-LSA和AS-External-LSA

OSPFv2允许通过AS-EXternal-LSA引入外部路由,并同时为了正常通信额外定义了ASBR-LSA。ASBR-LSA在RFC2328中称为Type-4 Summary-LSA。因为该LSA实际上也是ABR产生的用于描述到达ASBR的路由信息。
在这里插入图片描述

相比于LSA Header,Type-5 AS-External-LSA增加了如下字段:
Netmask:4字节。描述路由掩码。
External Type:1比特。服务类型。

OSPFv2的外部路由类型有两种Type1和Type2。默认Type2,此时计算到该外部路由的开销时,忽略AS内开销。Type1则需叠加节点到该ASBR的开销。

TOS:7比特。服务类型
Metric:3字节。描述路由开销。
Forwarding Address:4字节。路径优化地址。
External Route Tag:4字节。为路由打标记。
Type-5 AS-External-LSA传递了到达AS外部的路由信息在全网泛洪。但是泛洪到其他区域时产生如下问题:
路由器知道ASBR(Adv Router)产生了一条外部路由,但是既无到达ASBR的SPF树(Router-LSA)又无到达ASBR的路由,因此无法正常与外部信息通信
Note:这里的无到达ASBR的路由,准确说是指的LSDB。而且指的不是到Adv Router值的路由,而是到ASBR的路由。
Eg:完全有可能ASBR Router ID=2.2.2.2。但是2.2.2.2的地址是其他设备通告的路由信息。这里的2.2.2.2仅仅代表32-bit的无符号路由器标识

为了解决该问题,专门由ABR为ASBR描述了一条路由信息。ASBR-LSA
在这里插入图片描述Netmask:4字节。描述路由掩码。
TOS:7比特。服务类型
Metric:3字节。描述路由开销。
此时可以通过Type-4 ASBR Summary-LSA获取到相关路由信息。
Note:如果只有一个区域,或者在ASBR就在该区域内。此时可以直接通过Router-LSA获取到相关信息,也就不在需要Type-4 LSA。

2.3.1.开销和外部路由选路

OSPFv2的AS-External-LSA在External Route Tag字段定义了两者类型:
Type-1 External路由:OSPFv2认为该类型路由可靠。开销=到ASBR开销+外部路由引入时开销。
Type-2 External路由:OSPFv2认为该类型路由可靠。开销=外部路由引入时开销。

由于多个ASBR可能引入相同的外部路由,因此进行了如下路由优选原则:
1@:Type-1 External路由>Type-2 External路由。
2@:相同类型优选开销小的路由。
3@:相同开销优选到达ASBR开销小的路由。
4@:以上都相同则进行负载分担。

由于AS中很可能出现多台ASBR引入相同外部路由的情况,而多台ASBR/ABR很可能可以有多条路径可达。
因此Huawei针对不同场景定义了如下的选路原则

场景1
在这里插入图片描述AR1既可以通过Area10的Router-LSA,又可通过Area0的Router-LSA可达AR3通告的外部路由时。
Note:或者AR1、AR3和AR4位于其他的非骨干区域(非Area0)时。
AR1(ABR)优选开销小的,开销相同优选Area ID大的Router-LSA

场景2
在这里插入图片描述AR1既可以通过Area10的Type-4 ASBR Summary-LSA,又可通过Area0的Router-LSA可达AR4通告的外部路由时。
AR1(ABR)优选Area0(骨干区域)的Router-LSA

场景3
在这里插入图片描述AR1既可以通过Area10的Router-LSA,又可通过Area0的Type-4 ASBR Summary-LSA可达AR2通告的外部路由时。
AR1(ABR)优选开销小的,开销相同优选Area10的Router-LSA

场景4
在这里插入图片描述AR1既可以通过Area10的Type-4 ASBR Summary-LSA,又可通过Area0的Type-4 ASBR Summary-LSA可达AR5通告的外部路由时。
AR1(ABR)优选优选Area0的Type-4 ASBR Summary-LSA

Note:实际上Type-4 ASBR Summary-LSA就是一种独特的Type-3 Summary-LSA。单独为区域中的某台设备描述路由信息的LSA。区别在于Type-4的LS ID不是网络号,而是ASBR的Router ID。因此Type-4 ASBR Summary-LSA的选路和Type-3 Summary-LSA非常相同

自动换行

2.3.2.具有相同网络位路由LSA的区分

在工程上,很有可能存在多条网络位相同的路由。例如
10.0.0.0/24
10.0.0.0/16
10.0.0.0/8
而LSA的唯一性是通过LSA的三要素来实现的。(LSR报文中就只请求LSA的三要素)。此时就会遇到路由LSA无法区分的问题。
这里路由LSA包括了Summary-LSA,AS-External-LSA和Nssa-LSA。

为了避免这种情况RFC2328的《附录E.一种分配链路状态ID的算法》进行了描述。
10.0.0.0/24使用Link State ID=10.0.0.255
10.0.0.0/16使用Link State ID=10.0.255.255
10.0.0.0/8使用Link State ID=10.0.0.0
也即使用路由的广播位作为Link State ID。

2.3.3.转发地址Forwarding Address

转发地址Forwarding Address主要用于外部路径的优化,而且在有多个ASBR可达FA时比较有意义。
例如:
在这里插入图片描述AR2和AR3连接在了同一个局域网,此时AR2作为ASBR引入通向该局域网的外部路由时,AR4具有机会优化路径指向AR3(指向AR3的开销更小)到达AR1所在局域网。

转发地址Forwarding Address非0条件如下:
1@:引入路由的下一跳被宣告进ospf进程,用于开销计算。
2@:下一跳地址链路为广播网/NBMA。只有广播型链路才有优化的可能。
3@:外部接口不是silent-interface。

点击此处回到目录

2.4.Nssa-LSA

Type-7 Nssa-LSA与Type-5 AS-External-LSA几乎完全相同,只是为了非完全末节区域的引入外部路由的需要。
在这里插入图片描述Netmask:4字节。描述路由掩码。
External Type:1比特。服务类型
TOS:7比特。服务类型
Metric:3字节。描述路由开销。
Forwarding Address:4字节。路径优化地址。
External Route Tag:4字节。为路由打标记。

2.4.1.转发地址在末节区域Forwarding Address in Nssa

转发地址Forwarding Address主要用于外部路径的优化,而且在有多个ASBR可达FA时比较有意义。
NSSA区域对FA地址的定义新增了如下2种情况。
1@如果引入该路由器的环回口被宣告进OSPF时(可用),填充该环回口
2@否则选择该路由器第一个up起来的OSPF进程接口

因此几乎7类Nssa-LSA的FA是必带的。一种不存在FA的情况是缺省路由 Nssa-LSA。(Nssa的ABR产生)

这是由于Nssa区域的ABR进行7转5时,可以认为该ABR也是一个ASBR(生成了AS-External-LSA)。有多个ABR/ASBR时,由多台ABR/ASBR都可以进行7转5的可能性。而且此时对OSPF的其他区域来说外部路由的信息被Nssa区域隐藏了起来,因此FA地址存在的必要性为路径优化提供可能
Nssa的7转5由Router ID的设备进行(也可手动指定进行7转5)在这里插入图片描述!!手动指定多台设备进行7转5时,需要防止环路。因为Type-7和Type-5的LSA目前没有优先级比较。比开销!!

这样就可能存在次优路径,因此额外条件携带的FA可以提供路径优化

也可通过命令对FA地址进行抑制。
在这里插入图片描述

2.4.2.Nssa的其他命令特性

在这里插入图片描述default-route-advertise:ABR上产生Type7 LSA缺省路由;ASBR上只有本地存在缺省路由时,才会产生Type7 LSA缺省路由。
flush-waiting-timer:及时清除其他交换机上已经没用的Type5 LSA。设置Type5 LSA的LS age=3600。
no-import-route:Nssa的ABR上使用,拒绝该ABR引入的外部路由通告到NSSA区域。(但可以正常传给非Nssa区域,此时相当于ASBR)
no-summary:Nssa的ABR上使用,不引入Type-3 LSA。相当于total Nssa。
set-n-bit:与邻居交换机同步时在DD报文中设置N-bit位的标志。用于是否进行7转5标识。
translator-interval:用于转换器切换过程,保障切换平滑进行。
zero-address-forwarding:Nssa的ABR上使用,ABR引入外部路由时(此时相当于ASBR),将生成的NSSA LSA的FA置为0.0.0.0。

虚链路的配置
在这里插入图片描述通过指定对端的Router ID来建立骨干区域的邻居。而v-link的报文是单播发送的,报文的源目的IP是通过对端Router ID的LSDB来确认接口IP的。该接口IP是相互通信的出接口IP(可能有多个可通信接口的情况)。
在这里插入图片描述v-link的邻居状态为full。不可在普通邻居中可见。

虚链路的生成树
在指定建立v-link时,OSPF将自己的Router-LSA的Flags位(V-bit)进行标识。在同一个区域接受到该V-bit置位的Router-LSA随后在LSDB中发现该Router-ID产生的LSA信息。随之建立生成树,加载叶子路由信息。
虚链路的特性
1@:virtual Link属于骨干区域area0
2@:只能跨越一个非骨干区域。
因为Router-LSA只能在一个区域内传递,跨越了多个非骨干区域则无法进行生成树计算
3@:特殊区域无法建立虚链路。
这里的特殊区域指的是末节区域,nssa等。因此处于骨干区域的虚链路是要求传递路由信息的。
虚链路的防环
1@:根据vlink传递type-1类和type-3类的LSA,不会再次传入vlink途径区域
2@:无法在。
3@:vlink传递的type-3 LSA如果在所经过的区域不存在。则不能泛洪给其他区域。

点击此处回到目录

3.LSA处理

区域的划分一个重要的优势是可以对区域的LSA进行相应的处理。

3.1.路由汇总实例

由于ABR是区域对外通信的关键节点。(向区域外的通信节点)。因此可以在ABR上进行路由汇总。
在这里插入图片描述abr-summary < IP/subIP >< mask >用于对区域间通信的路由进行汇总。但值得注意的是该命令实际是对区域的Type-1 Router-LSA和Type-2 Network-LSA进行汇总用于向其他区域通信。例如:在这里插入图片描述在AR2配置如上命令
***ospf 10
area 10
abr-summary 10.0.0.0 255.0.0.0

***

时,实际是对AR1的叶子Router-LSA StubNet网络10.1.1.0/24进行汇总用于向其他区域(Area0和Area20)汇总。

3.1.1.abr-summary

1@ABR对区域间路由做汇总,只能对直连区域做汇总。
这里的直连区域值得是需要作为ABR连接多个区域。因为需要收到区域的Type-1 Router-LSA和Type-2 Network-LSA。
2@当明细路由全部失效,汇总路由才会失效。并且继承明细路由开销时,继承的是最大的(cisco继承的是最小的)
区域内可能有多条明细路由,当所有明细路由失效时汇总路由才失效
3@多个区域的ABR汇总同一个汇总路由,则ABR不处理其他ABR的汇总路由。或者可以解释为ABR不处理自己产生的汇总Type-3 Summary-LSA,也不处理其他ABR产生的相同路由的Type-3 Summary-LSA。
4@一个非Area0区域多个的ABR建议进行相同的汇总配置。由于OSPF的区域间防环机制,非Area0的Type-3可以传回非Area0而Area0的Type-3不可以传回Area0。如果不进行相同的汇总可能会导致环路。
可查看本文章的2.2.2章节第2条对LSA的描述

在abr-summary有一个not-advertise参数:abr-summary 10.0.0.0 255.0.0.0 not-advertise
该命令可用于进行路由过滤,也即将区域内路由信息不向其他区域进行路由通告。

3.1.2.asbr-summary

OSPF也支持对外部路由的汇总。
在这里插入图片描述与ABR上进行路由汇总参数类似。ASBR新增了2个参数。
asbr-summary < IP/subIP > < mask > tag:给外部路由做标记。可用于进行路由策略,用于OSPF和BGP路由传递时的防环等。
asbr-summary < IP/subIP > < mask > distribute-delay:延迟发布聚合路由。用于进行使每次发布的聚合路由信息中包含更多的有效路由,避免网络振荡而出现路由信息不准确的现象。。

3.2.路由过滤

filter过滤-过滤Type-3 Summary-LSA:在ABR上使用根据策略过滤路由。(路由策略)。
在这里插入图片描述其中的export和import分别表示在出区域方向过滤和入区域方向过滤

import过滤-过滤Type-5 AS External-LSA和Type-7 Nssa-LSA:在引入外部路由时根据策略过滤路由。(路由策略)
在这里插入图片描述根据定义的route-policy策略进行路由过滤。该动作为满足route-policy才可进行引入。

filter-policy过滤:根据定义的动作进行过滤。
在这里插入图片描述需要注意的时filter-policy定义了引入时的方向:
import:表示用于ospf内部路由过滤,可收到LSA。
export:表示用于ASBR(只在ASBR上生效)上过滤AS External-LSA和NSSA-LSA。不可收到LSA。

其他过滤:
针对P2MP邻居过滤LSA在这里插入图片描述
针对接口邻居过滤LSA在这里插入图片描述
asbr-summary/abr-summary <> not-advertise:汇总路由而不通告路由。

点击此处回到目录

LSA其他特性

LSA对比

LSA类型 作用 三要素
Router-LSA 描述设备所连接链路和开销,产生区域泛洪 LS Type=1
Link State ID=自己Router ID
Adv router=自己Router ID
Network-LSA DR描述本网段链路状态,产生区域泛洪 LS Type=2
Link State ID=伪节点Router ID
Adv router=DR Router ID
Summary-LSA ABR描述区域内网段路由,产生区域泛洪 LS Type=3
Link State ID=网段号
Adv router=ABR Router ID
ASBR-LSA ABR描述到ASBR的路由,产生区域泛洪 LS Type=4
Link State ID=ASBR Router ID
Adv router=ABR Router ID
AS-External-LSA ABR描述到AS外的路由,AS泛洪 LS Type=5
Link State ID=网段号
Adv router=ASBR Router ID
Nssa-LSA ABR描述到AS外的路由,末节区域泛洪 LS Type=7
Link State ID=网段号
Adv router=ASBR Router ID

LSA的唯一性

通过LSA的三要素确认。
Link Stata Type=LS 类型Link State ID=LS链路状态IDAdv Router=通告路由器
Note:通告路由器与传递LSA的路由器不一定一致。LSA只有产生/始发的路由器有权限进行删改,(仅仅只包含三要素,某些字段还是可以更改),在多个链路多个区域传递时会由其他DR/ABR进行转发。此时,DR/ABR将其LS age字段添加InfTransDelay间隔(考虑链路延时)后进行传递。

LSA新旧

同一条(由三要素确认一条)LSA依次通过以下字段判断LSA的新旧。
RFC2328对其描述可见OSPFv2 RFC2328文档第13.1章节

1@Sequence Number越大越新
2@CheckSum越大越新(LSA中的CheckSum字段而非OSPFv2 Header中的CheckSum)
3@LS Age=3600s时认为最新
4@LS Age差>MaxAgeDiff=15min时,认为LS Age更小的更新
5@LS Age差<MaxAgeDiff=15min时,认为两条LSA新旧一致

LSA的泛洪

1@当运行OSPFv2的路由器链路状态发生改变时,重新产生LSA泛洪。Sequence Number+1,LS age=0s。
2@每隔LSRefreshTime=30min间隔后,产生/始发LSA的路由器重新产生LSA泛洪。每隔MaxAge=60min后,将其老化删除(期间未收到更新的LSA)。
Note:OSPFv2通过将MAxAge设置为60min,将LSA在AS内进行删除。这一行为称为“提前老化(premature aging)”。此时LS sequence number不发生改变。
3@LSA的产生间隔最小为MinLSInterval=5s,在5s内无法重新产生。而接收新LSA实例时必须经过的最短时间为MinLSArrival=1s。

LSA在网络/接口上进行泛洪时,
1@首先检查邻居状态。邻居状态应不低于Exchange状态。且与此邻居相关的链路状态请求列表中LSA比将要泛洪的LSA新。
(Note:相应的LSA也必须满足要求,比如Type-5 AS-External-LSA不在末节区域泛洪)
2@如果接收到新的LSA是从DR或BDR发出的,则不进行泛洪
3@进行泛洪时LS Age字段添加InfTransDelay后发出。且如果自身为DR/BDR时发送给地址224.0.0.5,为DROthers时发送给DR/BDR的224.0.0.6即可。

点击此处回到目录

邻居状态机

OSPF的邻居状态机有:Down,Init,(1-way),2-way,Exstart,Exchange,loading,full。
RFC2328对其描述可见OSPFv2 RFC2328文档翻译1第10章节

邻居建立

两台OSPF路由器R1和R2在交互时首先进行邻居关系建立。
交互过程如下。
@开始建立OSPF进程,过渡到Init状态
由于交互存在先后这里以R1为例进行介绍。

@R1首先发送Hello包,携带Area ID,Auth Type和Auth Data等信息并将DR和BDR字段置0。(暂时未接收到DR和BDR信息)。此时状态为1-way,也即发送了Hello包。
@R2收到Hello包,检查邻居建立需要查看的相关信息。(参数一致)。回应Hello包,并新增字段Active Neighbor填充为R1的Router ID
@R1接受R2发送的Hello包,检查邻居建立需要查看的相关信息。(参数一致)。并发现Active Neighbor有自己(可有多个)的Router ID。过渡到2-way。回应Hello包,并新增字段Active Neighbor填充为R1的Router ID
@R2收到R1接受R2发送的Hello包,检查邻居建立需要查看的相关信息。直接过渡到2-way状态。

由于Hello间隔的限制,有可能发送R1发送了R2未收到的情况。此时R2只要收到Active Neighbor有自己的Router ID就直接过渡到2-way状态。实际情况可能不同,但邻居建立过程基本类似,进行2-3次握手。

邻接建立

当2-way开始向更高级别状态转变时,邻接关系就开始形成了。并且值得注意的是在广播网和NBMA上需要选举DR和BDR,其他称为DROthers。只有DR和BDR与DROthers之间会过渡到更高状态,DROthers仅止步于邻居关系/2-way状态。

@首先进行主从选举,进入Exstart状态

主从选举依据是OSPFv2 Header中携带的Source OSPF Router字段也即Router ID。Router ID大的路由器成为主。注意由于OSPF的DR默认不支持抢占,因此Router ID大的不一定是主。
在相邻(同一链路)的路由器正常建立邻居关系(2-way)后,首先发送一个空的DBD包进行主从选举。该DBD携带Options字段用于表明自己设备的所支持OSPFv2功能,携带DB Description字段进行主从选举。初始时都将IM位设置为1,携带DD Sequence值(DD Sequence为随机产生)。
此后,主从选举完成后根据设备自身情况设置I、M和M/S位。

@主从选举完成后,开始正式进行链路数据库的传递。进行Exchange状态,依照DBD报文DB Description字段的I、M和M/S位进行链路数据的传递。

主发送DD Sequence=X的DBD------->从发送DD Sequence=X的DBD
主发送DD Sequence=X+1的DBD------->从发送DD Sequence=X+1的DBD
主发送DD Sequence=X+2的DBD------->从发送DD Sequence=X+2的DBD
...(X在首次传输DBD是随机产生)

传输时也可能遇到如下情况。
1、主设备的数据库传递完成M-bit=0,但是从设备的数据库未完成M-bit=1。
A:此时主设备会从上一个从设备发送的DBD报文中查看到该信息,因此会发送空的DBD,直到两端都完成DBD的传递。
2、当一段发送的DBD没有进行回应时,在RxmtInterval=5s间隔下进行一次重传保证信息可靠传递。

Note:两台设备不一定是同时进入Exchage状态的,只要一段完成主从选举就可进行下一状态。

@链路数据库传递完成时,向Loading状态过渡。此时进行LSR和LSAck的同步确认。
@两端LSA传递完成时,达到最终状态Full

点击此处回到目录

更新

posted @ 2023-04-19 23:42  m风行者  阅读(465)  评论(0编辑  收藏  举报