Network-Route-OSPF-1

OSPF 路由协议理论部分 (以华为为主,Cisco 只贴出相关命令)

转载: Astion 路由交换技术笔记,可在 Gitee 上找到相关笔记项目

运行链路状态路由协议的路由器之间会建立邻居关系,之后交互链路状态信息,路由器将这些链路状态信息存储在链路状态数据库中,每台路由器基于 LSDB 计算出一颗以自己为根、无环的最短路径树。

基本概念

Router-ID

Router Identification 路由器标识 32Bit 点分十进制

在一个 OSPF 域中唯一地标识一台OSPF路由器,Router-ID 必须全域唯一

Router-ID 建议使用手工配置方式,将 Router-ID 指定为设备上的一个环回接口

1
2
3
4
5
6
7
#指定Router-ID
int loop 0
ip add 1.1.1.1 32
quit

#创建OSPF进程,指定该设备的 RouterID 为1.1.1.1
ospf 1 router-id 1.1.1.1

Cisco 启用 OSPF

1
2
3
4
5
6
7
8
9
10
// 配置 换回地址
(config)#interface loopback 0
(config-if)#ip address 1.1.1.1 255.255.255.255

// 100 表示,路由器的进程号
(config)# router ospf 100
// 指定 route-id
(config)# router-id 1.1.1.1
// 注意: 0.0.0.0255.255.255.255 的反子网掩码
(config-router)# network 1.1.1.1 0.0.0.0 area 0

一旦 OSPF 确定了 RouterID 之后再变更就需要重启 OSPF 进程。

1
<>rest ospf process

OSPF 三张表

OSPF 使用三张表以保证正常运行

邻居表

当一个接口激活 OSPF 后,接口周期性的发送 OSPF Hello 报文,同时也开始侦听 Hello 报文,当 OSPF 发现邻居后,邻居的信息也被写入到 OSPF 邻居表中;

执行dis ospf peer查看邻居表

Cisco 查看邻居表

1
# show ip ospf neighbor
1
2
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2 1 FULL/DR 00:00:34 12.1.1.2 Ethernet0/0

链路状态数据库

链路状态数据库 LSDB

运行 OSPF 的路由器泛洪链路状态信息,即 LSA 链路状态通告,路由器将 LSA 搜集后装在到自己的 LSDB 中;

执行dis ospf lsdb可以查看 LSDB

Cisco 方式查看

1
# show ip ospf database
1
2
3
4
5
6
7
8
9
10
11
12
            OSPF Router with ID (1.1.1.1) (Process ID 100)

Router Link States (Area 0)

Link ID ADV Router Age Seq# Checksum Link count
1.1.1.1 1.1.1.1 79 0x80000003 0x0043A8 2
2.2.2.2 2.2.2.2 78 0x80000003 0x005787 2

Net Link States (Area 0)

Link ID ADV Router Age Seq# Checksum
12.1.1.2 2.2.2.2 80 0x80000001 0x001204

OSPF路由表

执行dis ospf routing查看 OSPF 路由表

度量值

所谓开销可以理解为成本或者代价,Cost值越小则路径越优,每一个激活 OSPF 的接口都拥有一个接口级别的 Cost 值,这个值等于ospf 参考带宽/接口带宽,==取计算结果的整数部分,当结果小于 1时,值取 1 。==

通过调整接口 Cost 从而影响 OSPF 路由计算,这种方法在实际工程中常被用到。

报文类型及格式

OSPF 基于 IP 运行,协议的数据报文直接采用 IP 封装,在 IP 报文头部中对应的协议号为==89==。

OSPF 采用组播地址作为目的IP地址:

  • 224.0.0.5 : 指所有的 OSPF 路由器
  • 224.0.0.6 :指所有的 OSPF DR 路由器

OSPF定义五种报文:

类型 报文名称 报文描述
1 Hello 发现与维护邻居关系
2 DD(Database Description) 数据库描述 LSA 头部
3 LSR(Link State Request) 请求 LSA
4 LSU(Link State Update) 携带完整 LSA
5 LSAck(Link State Acknowledgment) 对接收 LSA 确认

OSPF 有统一的头部,长度 24byte

版本(Version):OSPFv2,始终为2
类型(Type):对应上表中的类型,为 1 则是 Hello 包
报文长度(Packet Length):整个报文的长度
路由器ID(Router Identification):Router-ID
区域ID(Area Identification):区域 ID,32bit
校验和(Checksum):校验报文有效性
认证类型(Authencation Type):认证类型
认证数据(Authencation Data):认证内容

Hello 报文一些重要字段:

掩码(Network Mask):直连接口掩码必须一致,否则忽略 Hello 包,导致无法建联。
间隔(Hello Interval):默认 10 秒,双方需要一致否则无法建联。
路由器优先级(Router Priority):用于 DR 与 BDR 选举,缺省 OSPF 接口优先级为 1
失效时间(Router Dead Interval):缺省为 Hello Interval * 4,需要与对端相同。
指定路由器(Designated Router):DR 接口 IP 地址
备份指定路由器(Backup Designated Router):BDRIP 地址
邻居(Neighbor):有效邻居

DD 报文

交互 DD 报文时,需要协商 Master/Slave,所以前两个 DD 报文不包含 LSA 头部,只用来协商参数。

OSPF 报文中的 MTU 字段始终为 0

I位(Inital Bit): 该 DD 报文用于协商时为 1,协商完毕置 0

M位(More Bit):该位为 1 时后续还有 DD 报文,为 0 时是最后一个 DD 报文

MS位(Master Bit):Master 置 1,Slave 置 0

DD 序列号(DD Sequence Number):由 Master 随机决定,Slave 只能使用 Master 的序列号发送自己的 DD 报文;

LSA(Lsa Header)头部:一个 DD 报文包含一条或多条 LSA 头部。

LSR报文

交互 DD 报文后,向邻居请求完整的 LSA 数据。

LSR包含==链路状态类型==(LinkStateType)、==链路状态ID==(LinkStateID)、==通告路由器==(Advertising Router)三元组标识了请求的 LSA。

通告路由器:产生该 LSA 的路由器 RouterID

LSU 报文

路由器收到 LSR 请求,回应 LSU,LSU 中包含了完整的 LSA 信息。

当路由器感知到网络发生变化时也会出发 LSU 报文泛洪。

非 DR/BDR 使用 224.0.0.6 发送 LSU。

DR/BDR 使用 224.0.0.5 发送 LSU。

LSAck 报文

对接收到的 LSA 进行确认,LSAck 中包含所确认的所有 LSA 头部。

邻接关系

两个重要概念:邻居和邻接

最简单拓扑邻接过程:在双方互联的接口上激活 OSPF,开始发送和侦听 Hello 报文,通过 Hello 发现彼此并确认双向通信后建立邻居关系;

两台路由器开始交互空DD报文协商Master/Slave,再交互包含LSA头部的DD报文描述LSDB,然后通过LSR和LSU交互双方LSA,LSDB同步完成后计算最优路径,此时完成邻接关系。

Down(失效)

OSPF邻居状态切到至初始状态,OSPF接口尚未收到邻居发送的Hello报文;

Init(初始)

当 OSPF 在直连链路中收到了某个邻居的有效 Hello 报文,但报文的 Neighbor 字段中未显示自己的Router-ID,它将该邻居状态置为 Init;

这个状态表明,链路上有一个活跃 OSPF 路由器但未确认双向通信。

接下来它将邻居的 Router-ID 放入自己 Hello 报文中的 Neighbor 字段中并发送。

Attempt(尝试)

该状态只出现在 NBMA 类型接口中。

NBMA 中邻居是手工指定的,当路由器 NBMA 接口激活 OSPF 后,邻居状态从 Down 过度到 Attempt,该状态下路由器周期性的向邻居发送 Hello 报文,但未收到邻居的有效 Hello 报文;

当收到邻居的 Hello 报文时,邻居状态过度到 Init 状态。

2-Way(双向通信)

路由器收到直连链路邻居发送的 Hello 报文,其中 Neighbor 字段中包含自身 Router-ID,它会将邻居置为 2-Way 状态;

表明与邻居确认了双向通信。

DR/BDR 选举过程在此状态下完成。

ExStart(交换初始)

该状态下发送空的 DD 报文,用于协商 Master/Slave,Router-ID 最大的成为 Master,序列号是由 Master 决定的,这些报文中 I 位置为 1 ,即协商 DD 报文。

ExChange(交换)

该状态下开始交互描述 LSDB 的 DD 报文,DD 报文中包含 LSA 头部,每个报文包含 DD 序列号,DD 序列号在交互过程中递增;确保有序性和可靠性。

Loading(加载)

该状态下,路由器向邻居发送 LSR 请求 LSA 完整数据,对方使用 LSU 回应;

在收到 LSU 后,需要发送 LSAck 对其中的 LSA 进行同步确认。

Full(全毗邻)

当接口上待请求的 LSA 列表为空时,表明已经完成了 LSDB 同步,状态置为 FULL。

修改网络类型

在这种网路中 R1 与 R2 这些接口缺省都是 BroadCast 类型,但在逻辑上都是点对点,但他们仍需要选举 DR/BDR,这种计算是没有意义的;

可以执行命令ospf network {p2p|p2mp|bradcast|nbma} 来修改接口的网络类型使他们不再选举 DR/BDR,提高 OSPF 工作效率。

执行后会重新建立邻接关系,并且需要了 DR/BDR 的选举;

DR/BDR

在接入了交换机的 OSPF 网络中,如果每个路由器都互相形成邻接关系,在这个网络中就会出现 n(n-1)/2 个邻接关系,浪费了路由器资源;

OSPF 在一个 MA 网络中选举出一个 DR 和一个 BDR。

即不是 DR 也不是 BDR 的路由器称为 DROther,MA网络中所有的 DROther 与 DR/BDR 形成邻接关系,BDR 与 DR 形成邻接关系。

而 DROther 之间只保持邻居关系。

==DR/BDR 选举是通过 Hello 报文实现的,选举过程在 2-Way 之后。==

使用ospf dr-priority可以修改接口的 OSPF 优先级。

==DR 优先级为 0 的接口不具备选举 DR 的资格,DR 角色不具备可抢占性。==

DR 使用 224.0.0.5 向网络中发送 LSU 报文,所有 DROther 监听这个地址。

DROther 使用 224.0.0.6 向 DR 发送 LSU 报文,DR 监听这个地址。

区域与多区域

我们把一系列连续的 OSPF 路由器组成的网络称为 OSPF 域;

LSA 的泛洪被限制在单个区域内部,同一个区域内的路由器维护一套相同的 LSDB;

每个区域独立进行 SPF 计算;

==骨干区域 Area0,所有非骨干区域必须与骨干区域相连,如果存在多区域必须有且只有一个 Area0,其负责区域之间发布路由信息,非骨干区域之间不允许直接相互发布区域间的路由。因此所有的ABR都至少有一个接口属于 Area0,Area0 始终包含所有的 ABR。==

路由角色

  • 内部路由器(Internal Router , IR):所有接口都接入同一个 OSPF 区域;
  • 区域边界路由器(Area Border Router, ABR):处在骨干区域与其它区域之间的路由器即ABR;
  • 骨干路由器(Backbone Router,BR):至少有一个接口连接骨干区域的路由器;
  • AS 边界路由器(AS Boundary Router , ASBR):工作在 OSPF 自治系统边界的路由器,并不是同时运行两个路由协议的路由器就一定是 ASBR,但 ASBR 一定是将外部路由重分发到 OSPF。

LSA 及特殊区域

常见 LSA

类别 名称 描述
1 路由器 LSA(Router LSA) 每台路由器都会产生,描述所有直连接口状态和 Cost 值,只在所属区域内泛洪
2 网络 LSA(Network LSA) 由 DR 产生,描述 DR 接入 MA 网络中所有与之形成邻接关系的路由器,只在接口所属区域内泛洪
3 网络汇总 LSA(Network Summary LSA) 由ABR产生,描述到达某区域目标网段的路由,主要用于区域间路由传递。
4 ASBR 汇总 LSA(ASBR Summary LSA) ABR 产生,描述 ASBR,ASBR 汇总 LSA 相当于一条到达ASBR的主机路由
5 AS外部LSA(AS External LSA) ASBR产生,用于描述本AS之外的外部路由
7 非完全末梢区域 LSA(NSSA LSA) 由ASBR产生,用于描述本 AS 之外的路由,仅在产生这个 LSA 的 NSSA 区域泛洪,NSSA ABR 将 7 类 LSA 转换成 5 类 LSA 注入到骨干区域

LSA 头部

OSPF 的 LSU 报文用于发送链路状态更新,在报文中包含着一个或多个 LSA,而且是 LSA 的完整数据。

OSPF 定义了多种类型的 LSA,但他们都有相同的 LSA 头部。

LSA头部共20byte

  • 链路状态老化时间(Link-State-Age):即它存在了多长时间,单位 S,当该 LSA 始发路由器产生时,该值被设置为 0,之后随着 LSA 在网络中泛洪,它老化的时间逐渐增加,当某台路由器将 LSA 存储到自己的 LSDB 后,LSA 老化时间也在递增,当老化时间增加到MaxAge时,该LSA将不再被用于路由计算。

  • 链路状态类型(Link-State Type):指本条 LSA 的类型。

  • 链路状态ID(Link-State ID):LSA 标识,不同 LSA 类型,对应的该字段的含义不同

  • 通告路由器(Advertising Router):产生该 LSA 的路由器的 Router ID

  • 链路状态序列号(Link-State Sequnce Number):判断 LSA 新旧或是否重复

详解 LSA

同一个OSPF域维护相同的 LSDB

执行dis ospf lsdb查看链路状态数据库

一类 LSA

只描述重点内容

每台运行 OSPF 的路由器都会产生一类 LSA。

一类 LSA 描述了直连接口的状态和接口 Cost

  • 同一个区域的接口公用一个 Router LSA 描述
  • 多个接口属于不同区域时,为每个区域单独产生一个 Router LSA,每个 LSA 只描述接入该区域的接口

==Router LSA 链路状态 ID 的值=产生该 LSA 路由器的 Router-ID==

一类 LSA 的 advrouter 与 LsID 相同

链路数量:该 LSA 所描述的链路数量。

链路类型(Link Type): 本条Link的类型值。

度量值(Metric):Cost值

链路类型 描述 链路ID 链路数据
1 点对点链接到另一台电脑 邻居Router-ID 产生者的接口IP
2 链接到一个传输网络 DR的接口IP地址 产生者的接口IP
3 链接到一个末梢网络 网络IP地址 网络掩码
4 虚链路 邻居Router-ID 产生者接口IP

在R3上执行dis ospf lsdb router originate-router 3.3.3.3 只看 3.3.3.3 产生的 Router-LSA

它在两个区域中分别产生了不同的 LSA

Area 0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0
Link State Database
Type : Router #LSA类型
Ls id : 3.3.3.3 #一类的LSA这里表示为产生者Router-ID
Adv rtr : 3.3.3.3 #产生者的Router-id
Ls age : 199
Len : 48
Options : ABR E
seq# : 8000000a
chksum : 0xcb7b
Link count: 2 #链路数量,该LSA描述了两条链路
* Link ID: 192.168.123.1 #DR的接口IP地址(这里是R1的接口)
Data : 192.168.123.3 #产生者的接口IP地址
Link Type: TransNet #这条链路是通往传输网络
Metric : 1 #开销值

* Link ID: 3.3.3.3 #网络地址
Data : 255.255.255.255 #掩码
Link Type: StubNet #表示它是条末节网络
Metric : 0 #开销为0
Priority : Medium

Area 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
         Area: 0.0.0.1
Link State Database


Type : Router
Ls id : 3.3.3.3
Adv rtr : 3.3.3.3
Ls age : 122
Len : 48
Options : ABR E
seq# : 80000002
chksum : 0x19a7
Link count: 2 #描述了两条链路
* Link ID: 4.4.4.4 #因为链路类型为p2p,该值表示邻居的Router-ID
Data : 192.168.34.3 #产生者的接口IP地址
Link Type: P-2-P
Metric : 1562
* Link ID: 192.168.34.0 #末节网络,网络IP地址
Data : 255.255.255.0 #网络掩码
Link Type: StubNet
Metric : 1562
Priority : Low
#P2P链路需要使用两条LSA来描述

二类LSA

用于描述接入该MA网络的所有路由器的 Router-ID

==链路状态 ID= 产生者的 DR 接口 IP 地址==

  • 网络掩码:描述该MA网络的掩码
  • 相连的路由器:相连路由器的RouterID,与自己建立邻接关系的所有路由器

执行dis ospf lsdb network 可以查看泛洪的二类LSA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.0
Link State Database
Type : Network #LSA类型
Ls id : 192.168.123.3 #DR接口的IP地址
Adv rtr : 3.3.3.3 #通告路由器,DR
Ls age : 972
Len : 36
Options : E
seq# : 80000008
chksum : 0x2023
Net mask : 255.255.255.0 #该MA网络的掩码 根据Ls id可以推算出网络为 192.168.123.0/24
Priority : Low
Attached Router 3.3.3.3 #该MA网络的所有接入者 Router-ID 查看一类LSA可以推算出他们所连接的接口IP地址
Attached Router 1.1.1.1
Attached Router 2.2.2.2

三类LSA

一类、二类LSA的泛洪范围仅限于所属区域内部

三类LSA描述区域间的LSA

由ABR产生三类LSA

==链路状态ID=区域间路由的目的网络地址==

  • 网络掩码:区域间路由的网络掩码
  • 度量值(Metric):Cost值

执行dis ospf lsdb summary查看三类LSA

R1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.0
Link State Database

Type : Sum-Net
Ls id : 192.168.34.0 #目的网络地址
Adv rtr : 3.3.3.3 #通告者
Ls age : 1372
Len : 28
Options : E
seq# : 80000001
chksum : 0x2382
Net mask : 255.255.255.0 #掩码
Tos 0 metric: 1562 #开销为1562
Priority : Low

Type : Sum-Net
Ls id : 4.4.4.4 #4.4.4.4的网络路由
Adv rtr : 3.3.3.3
Ls age : 1335
Len : 28
Options : E
seq# : 80000003
chksum : 0x8f8f
Net mask : 255.255.255.255 #它是个主机地址
Tos 0 metric: 1562 #开销
Priority : Medium

四类LSA

Type4-LSA 由 ABR 产生,它实际上是一条到达 ASBR 的主机路由。

==Ls id 的值是 ASBR 的 Router-ID==

一旦我们使用import route将外部路由引入OSPF,它便会产生一类的 LSA 其中E比特位设置为 1,用来声明自己的ASBR身份;

ABR 收到这个 E 比特为 1 的 Type1-LSA 后产生 Type4-LSA 向骨干区域泛洪 ASBR 的主机路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Huawei>dis ospf lsdb asbr 

OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0
Link State Database


Type : Sum-Asbr #四类LSA
Ls id : 4.4.4.4 #ASBR的RouterID
Adv rtr : 3.3.3.3 #宣告路由器ABR
Ls age : 743
Len : 28
Options : E
seq# : 80000001
chksum : 0x859a
Tos 0 metric: 1562 #开销

Type4-LSA 的最主要作用是为了帮助与ASBR不在同一区域的路由器计算出到达 ASBR 的路由。

实际上它并没有加载到全局路由表中,而是存放在一个特殊的数据表中,通过执行dis opsf abr-asbr来查看 OSPF 发现的 ABR 与 ASBR。

1
2
3
4
5
6
7
8
9
<Huawei>dis ospf abr-asbr 

OSPF Process 1 with Router ID 1.1.1.1
Routing Table to ABR and ASBR

RtType Destination Area Cost Nexthop Type
Intra-area 3.3.3.3 0.0.0.0 1 192.168.123.3 ABR
Inter-area 4.4.4.4 0.0.0.0 1563 192.168.123.3 ASBR

五类LSA

当 ASBR 引入外部路由时,产生 Type5-LSA,该 LSA 用于描述外部路由,泛洪整个 OSPF 区域。

LS id 描述的是外部路由的目的地址。

E 比特位为 0 时开销类型使用 Metric-Type-1 ,E 比特为 1 时,开销类型使用 Metric-Type-2。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Huawei>dis ospf lsdb ase 

OSPF Process 1 with Router ID 4.4.4.4
Link State Database

Type : External #外部引入LSA
Ls id : 10.1.45.0 #外部路由网络地址
Adv rtr : 4.4.4.4 #通告路由器
Ls age : 1384
Len : 36
Options : E
seq# : 80000002
chksum : 0x582
Net mask : 255.255.255.0 #网络掩码
TOS 0 Metric: 1
E type : 2 #Mertic-Type-2
Forwarding Address : 0.0.0.0
Tag : 1
Priority : Low

七类LSA

非完全末梢区域外部 LSA

NSSA 区域允许引入少量的外部路由,被引入后使用 Type7-LSA 描述,Type7-LSA 只能在 NSSA 区域内泛洪,不允许将 Type7-LSA 注入 Area0,ABR 会将 NSSA 内泛洪的 Type7-LSA 转换成 Type5-LSA 向其它区域泛洪。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[Huawei]dis ospf lsdb nssa 

OSPF Process 1 with Router ID 8.8.8.8
Area: 0.0.0.2
Link State Database

Type : NSSA #七类LSA
Ls id : 10.1.89.0 #外部路由网络地址
Adv rtr : 8.8.8.8 #宣告路由器
Ls age : 16
Len : 36
Options : NP
seq# : 80000001
chksum : 0xc360
Net mask : 255.255.255.0 #掩码
TOS 0 Metric: 1
E type : 2
Forwarding Address : 8.8.8.8 #转发地址
Tag : 1
Priority : Low

Type : NSSA
Ls id : 0.0.0.0
Adv rtr : 2.2.2.2
Ls age : 314
Len : 36
Options : None
seq# : 80000001
chksum : 0xc404
Net mask : 0.0.0.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 0.0.0.0
Tag : 1
Priority : Low

特殊区域

骨干区域:Area0,是整个 OSPF 中心枢纽,所有区域间路由必须经过 Area0;

常规区域:除了特殊区域和骨干区域的其它区域,所有非0区域都必须与骨干区域相连

Stub 区域

末梢区域

Stub 与 Totally 区域不允许引入外部路由

一个非 0 区域只有单一出口,或者区域内的路由器不需要根据特定路由选择出口可以配置成 Stub 区域来减少路由条目;

这个区域的 ABR 阻挡 Type5-LSA、Type4-LSA 进入,同时 ABR 自动下发一条 Type3-LSA 的默认路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#查看三类LSA的默认路由
[Huawei-ospf-1-area-0.0.0.2]dis ospf lsdb summary

OSPF Process 1 with Router ID 8.8.8.8
Area: 0.0.0.2
Link State Database

Type : Sum-Net
Ls id : 0.0.0.0
Adv rtr : 2.2.2.2
Ls age : 146
Len : 28
Options : None
seq# : 80000001
chksum : 0x57fe
Net mask : 0.0.0.0
Tos 0 metric: 1
Priority : Low

在 Stub 区域上进一步减少 Type3-LSA 的泛洪,==ABR 向该区域下发的默认路由到达本区域之外的其它区域以及域外网络。==Totally Stub 区域

1
2
3
4
5
6
7
8
9
10
11
12
#查看LSDB
[Huawei-ospf-1-area-0.0.0.2]dis ospf lsdb

OSPF Process 1 with Router ID 8.8.8.8
Link State Database

Area: 0.0.0.2
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 95 36 80000005 1
Router 8.8.8.8 8.8.8.8 92 48 80000005 1
Network 192.168.28.8 8.8.8.8 92 32 80000002 0
Sum-Net 0.0.0.0 2.2.2.2 140 28 80000001 1 #只有一条三类LSA默认路由

NSSA区域

非完全末梢区域

ABR阻挡Type4、Type5类LSA进入,它允许将少量外部路由引入,以Type7-LSA描述,只能在当前的NSSA区域内泛洪。

ABR将Type7-LSA转换成Type5-LSA向其它区域泛洪,并且ABR向该区域下发Type7-LSA描述的默认路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Huawei-ospf-1-area-0.0.0.2]dis ospf lsdb 

OSPF Process 1 with Router ID 8.8.8.8
Link State Database

Area: 0.0.0.2
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 103 36 80000005 1
Router 8.8.8.8 8.8.8.8 98 48 80000005 1
Network 192.168.28.8 8.8.8.8 98 32 80000002 0
Sum-Net 192.168.123.0 2.2.2.2 147 28 80000001 1
Sum-Net 3.3.3.3 2.2.2.2 147 28 80000001 1
Sum-Net 192.168.34.0 2.2.2.2 147 28 80000001 1563
Sum-Net 4.4.4.4 2.2.2.2 147 28 80000001 1563
Sum-Net 2.2.2.2 2.2.2.2 147 28 80000001 0
Sum-Net 1.1.1.1 2.2.2.2 147 28 80000001 1
Sum-Net 192.168.1.254 2.2.2.2 147 28 80000001 1
NSSA 10.1.89.0 8.8.8.8 145 36 80000001 1 #引入的外部RIP路由
NSSA 0.0.0.0 2.2.2.2 147 36 80000001 1

NSSA 也可以进一步阻挡 Type3-LSA 进入,即 Totally NSSA 区域,ABR 将下发 Type3-LSA 描述向其它区域的默认路由

1
2
3
4
5
6
7
8
9
10
11
12
13
[Huawei-ospf-1-area-0.0.0.2]dis ospf lsdb

OSPF Process 1 with Router ID 8.8.8.8
Link State Database

Area: 0.0.0.2
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 74 36 80000005 1
Router 8.8.8.8 8.8.8.8 65 48 80000005 1
Network 192.168.28.8 8.8.8.8 65 32 80000002 0
Sum-Net 0.0.0.0 2.2.2.2 124 28 80000001 1
NSSA 10.1.89.0 8.8.8.8 113 36 80000001 1
NSSA 0.0.0.0 2.2.2.2 124 36 80000001 1

判断 LSA 新旧

为避免造成不必要的带宽消耗,OSPF 以 1800s 为周期对 LSA 进行泛洪,亦或者当网络拓扑发生变更时,OSPF也会执行LSA的触发更新,以便快速收敛;

OSPF采用链路状态类型、链路状态ID、通告路由器三元组标识一个LSA。

  • (1) 拥有更高链路状态序列号的LSA被认为更新,每次刷新 LSA,序列号都会加 1。

  • (2) 若序列号相同,拥有更大校验和的LSA更新。

  • (3) 若上述内容都相同,则老化时间被设置为MaxAge的为更新。

协议特性

路由汇总

在下联接口包含多个路由条目时可以在ABR或ASBR上配置路由汇总以减小路由表;

ABR上部署路由汇总:

使用abr-summary命令进行路由汇总部署,这条命令只能在ABR上部署才会生效。

例:

1
2
3
ospf 1
area 1
abr-summary 192.168.0.0 255.255.224.0

注意:使用abr-summary命令部署路由汇总时,可增加 cost 关键字并指定汇总路由的 Cost 值,缺省时,汇总路由的 Cost 值等于被汇总的明细路由 Cost 值最大的那个。

在ASBR上部署路由汇总

采用asbr-summary执行汇总路由只能在ASBR上执行才会生效,只针对外部引入的路由生效。

1
2
ospf 1
asbr-summary 10.1.0.0 255.255.0.0

可以在执行命令时指定 Cost 值,缺省为 Metric-Type-1,等于明细路由 Cost 最大值;

若开销类型 Metric-Type-2,汇总路由开销值为明细路由 Cost 最大值加 1。

所有普通区域都要和骨干区域相连,当普通区域不与骨干区域相连时就无法传递路由;

OSPF Virtual Link是一种虚拟的、逻辑的链路,被部署在两台OSPF路由器之间,它穿越某个非骨干区域,用于实现另一个非骨干区域与Area0的连接。

在OSPF区域配置视图下使用vlink-peer指定Virtual Link对端的设备(Route-ID),Virtual Link两个端点的设备都要进行配置;即上图的R2与R3

1
2
3
4
5
6
7
8
R2:
ospf 1
area 1
vlink-peer 3.3.3.3
R3:
ospf 1
area 1
vlink-peer 2.2.2.2

Type-5-LSA 不会通过 Virtual Link 传播

默认路由

缺省情况下,常规区域的路由器不会发布默认路由,即使它的路由表中存在一条默认路由;

有OSPF路由汇总,特殊区域,为什么还需要下发默认路由?

内网都启用了 OSPF,在出口路由器中配置了一条指向 ISP 的默认路由,这条默认路由对 OSPF 显然是不可见的,当我们的终端设备想要访问外网时,它去往外网的数据就会在网关处被终结,因为网关没有去外网的默认路由,唯一能访问外网的设备只有出口路由器自己。

假设现在我们想通过终端设备访问外网服务器 100.1.1.1,就需要在出口路由器上部署下发 OSPF 默认路由,你可能会想到可以将静态默认路由引入到 OSPF 区域中,这是不符合 OSPF 逻辑的强行引入静态默认路由可能会导致三层环路,OSPF 不会将任何协议生成的默认路由引入到 OSPF 区域中。

这时我们需要在出口路由器上给OSPF统一下发默认路由,实现终端访问外网;

1
2
3
4
5
6
R2:
ospf 1
default-route-advertise cost 10 type 2
# 使用这种方式下发的前提是路由表中必须已经存在一条默认路由,可以是静态也可以是在其它协议中学习到的;
# 或者追加always关键字,是否存在默认路由都会下发
default-route-advertise always
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[Huawei]dis ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 16 Routes : 16

Destination/Mask Proto Pre Cost Flags NextHop Interface

0.0.0.0/0 O_ASE 150 10 D 10.1.23.2 Ethernet0/0/1
2.2.2.2/32 OSPF 10 1 D 10.1.23.2 Ethernet0/0/1
3.3.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack0
4.4.4.4/32 OSPF 10 2 D 10.1.23.2 Ethernet0/0/1
5.5.5.5/32 OSPF 10 1 D 192.168.30.1 Ethernet0/0/0
6.6.6.6/32 OSPF 10 3 D 10.1.23.2 Ethernet0/0/1
10.1.23.0/24 Direct 0 0 D 10.1.23.3 Ethernet0/0/1
10.1.23.3/32 Direct 0 0 D 127.0.0.1 Ethernet0/0/1
10.1.24.0/24 OSPF 10 2 D 10.1.23.2 Ethernet0/0/1
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
192.168.1.0/24 OSPF 10 2 D 192.168.30.1 Ethernet0/0/0
192.168.2.0/24 OSPF 10 4 D 10.1.23.2 Ethernet0/0/1
192.168.30.0/24 Direct 0 0 D 192.168.30.2 Ethernet0/0/0
192.168.30.2/32 Direct 0 0 D 127.0.0.1 Ethernet0/0/0
192.168.40.0/24 OSPF 10 3 D 10.1.23.2 Ethernet0/0/1

Stub 和 Nssa 区域不需要单独引入,它使用自带默认路由让 ABR 负责转发即可。

其中有种特殊需求,即在 NSSA 区域中引入的外部路由下发默认路由至 OSPF 可以使用:

1
2
3
ospf 1
area 1
nssa default-route-advertise

报文认证

为什么需要报文认证?

数据包转发的路径是由转发设备的路由表决定的,通常将路由理解为控制层面的概念,大部分动态路由协议都支持报文认证,以确保报文交互的安全性。

以图片所示,任何接入SW1的路由器都可以与另外两台运行OSPF的设备形成邻接关系,如果有非法路由器接入这个广播网络,形成邻接关系后不断的向OSPF中注入垃圾路由信息,就会导致所有设备的路由计算发生问题。

为避免类似问题OSPF设计了报文认证,支持三种认证方式:空认证,口令认证,密文认证。

分别对应“认证类型”字段值:0、1、2

1.空认证:缺省情况下 OSPF 接口下使用空认证,此时认证类型字段值为 0;

2.简单口令认证:又称“明文认证”,明文口令包含在认证字段用于认证 OSPF 报文收发,这种方式不安全,即报文窥探可分析出口令内容;数据值类型为 1;

开启认证后已经建立邻居的设备将会被断开并且报 OSPF 认证错误

在发送的 HELLO 报文中分析 OSPF 包头,口令以明文显示

3.密文认证:采用密文认证时,报文中不包含认证的明文口令,而是包含一个哈希值,经过 MD5 算法计算得到结果,算法结果不可逆,即便报文被捕获也无法破解密文认证。认证类型值为 2,报文格式也发生了变化。

  • Key-ID:口令标识,两台直连 OSPF 路由器都激活认证报文,双方的 Key-ID 必须一致。
  • 认证数据长度:经过散列算法计算后的数据追加在 OSPF 报文尾部,认证数据长度只显示了认证数据的长度,它不包含在 OSPF 报文长度中;
  • 密码序列号:一个保持递增的序列号,用于 OSPF 报文的防重放攻击,这个字段值是只增不减的,当 OSPF 收到报文的序列号等于或小于目前序列号即认此报文为攻击报文将其丢弃。

转发地址

OSPF 的 Type-5/Type-7 LSA 中包含一个特别字段,Forwading Address,FA 可以使OSPF在某些特殊场景下避免次优路径。

R1、R2、R3连接在一台交换机上,R1、R2都在连接交换机的接口上使能OSPF,以此来建立邻接关系,而R3运行RIP与R1交互路由信息,R3将192.168.13.0的路由通告给R1,R1作为ASBR生成Type5-LSA泛洪OSPF区域,当R4访问192.168.13.0的路由时,数据会经过R4–R2–R1–R3这种次优路径,由于R2与R3处在同一广播域,完全没有必要将192.168.13.0的数据转发给ASBR。

FA字段只存在于五类和七类LSA中,只有当ASBR可达时这条LSA才被认为是有效的。

如果LSA中包含的FA为0.0.0.0,路由器则认为到达该网段的数据包应该发往ASBR。

如果FA不为0.0.0.0,路由器则认为到达目的网段的数据包应该发往这个FA。

所以R4再发送192.168.13.0的数据时转发给R2可以直接发送给R3,不需要再转发给R1。

FA 为非 0 时需要满足几个条件:

  • 引入外部路由的 ASBR 在其连接外部网络的接口上启用了 OSPF
  • 该接口没有配置 Silent-interface
  • 该接口的类型为 Broadcast 或 NBMA
  • 该接口的IP地址落在 Network 范围内

防环机制

简略摘要

1.区域内部路由防环

​ OSPF通过交互LSA来形成所在区域的拓扑信息,通过拓扑信息使用SPF算法计算出最短路径加载至路由表中,或通过三类LSA转发到其它区域中。

2.区域间路由防环

OSPF要求所有非骨干区域必须与Area0直接相连,区域间路由需要通过Area0中转。

ABR从非骨干区域收到三类LSA不能用于区域间路由计算。

ABR只能将自己到达所连接区域的区域内部路由注入骨干区域(区域间路由则不被允许),另外,可以将其到达所连接区域的区域内部路由及到达其它区域间的路由注入非骨干区域。

ABR不会将描述到达某个区域内网段路由的三类LSA再注入回该区域。

三类 LSA 设计了 Down-bit 用于在 MPLS VPN 环境下进行路由防环。

路由类型及优先级

  • 区域内路由:根据域内泛洪的一类、二类LSA计算得到的路由。
  • 区域间路由:根据三类 LSA 计算得到的路由。
  • Type1 外部路由:根据 Type-5 LSA Metric-Type-1 计算出的路由。
  • Type2 外部路由:根据五类 LSA Metric Type1 计算出的路由。

以区域内路由与区域间路由为例,当关于同一个目的网段,某路由器发现两条路由可达,一条区域内、一条区域间,无论度量值如何,始终选择前者,直到路由失效,区域间路由才会被使用。

Contents
  1. 1. OSPF 路由协议理论部分 (以华为为主,Cisco 只贴出相关命令)
    1. 1.1. 基本概念
      1. 1.1.1. Router-ID
      2. 1.1.2. OSPF 三张表
        1. 1.1.2.1. 邻居表
        2. 1.1.2.2. 链路状态数据库
        3. 1.1.2.3. OSPF路由表
      3. 1.1.3. 度量值
      4. 1.1.4. 报文类型及格式
      5. 1.1.5. 邻接关系
        1. 1.1.5.1. Down(失效)
        2. 1.1.5.2. Init(初始)
        3. 1.1.5.3. Attempt(尝试)
        4. 1.1.5.4. 2-Way(双向通信)
        5. 1.1.5.5. ExStart(交换初始)
        6. 1.1.5.6. ExChange(交换)
        7. 1.1.5.7. Loading(加载)
        8. 1.1.5.8. Full(全毗邻)
      6. 1.1.6. 修改网络类型
      7. 1.1.7. DR/BDR
      8. 1.1.8. 区域与多区域
      9. 1.1.9. 路由角色
    2. 1.2. LSA 及特殊区域
      1. 1.2.1. 常见 LSA
      2. 1.2.2. LSA 头部
      3. 1.2.3. 详解 LSA
        1. 1.2.3.1. 一类 LSA
        2. 1.2.3.2. 二类LSA
        3. 1.2.3.3. 三类LSA
        4. 1.2.3.4. 四类LSA
        5. 1.2.3.5. 五类LSA
        6. 1.2.3.6. 七类LSA
      4. 1.2.4. 特殊区域
        1. 1.2.4.1. Stub 区域
        2. 1.2.4.2. NSSA区域
      5. 1.2.5. 判断 LSA 新旧
    3. 1.3. 协议特性
      1. 1.3.1. 路由汇总
      2. 1.3.2. Virtual Link
      3. 1.3.3. 默认路由
      4. 1.3.4. 报文认证
      5. 1.3.5. 转发地址
      6. 1.3.6. 防环机制
      7. 1.3.7. 路由类型及优先级
|