OSPF 开放式最短路径优先协议
形容:
-
无类别链路状态协议:
无类别 ---- 存在掩码
-
IGP 内部网关协议
-
动态路由协议
一、链路状态协议(LS)
OSPF 协议 隶属于 链路状态协议。
区别:
-
距离矢量协议(DV):运行距离矢量协议的路由器会 周期性的泛洪 自己的路由表。通过路由的交互,每台路由器从相邻的路由器学习到路由,并且加载进自己的路由表中;
对于网络中的所有路由器而言,路由器 并不清楚 网络的拓扑结构,只是简单的知道要去往某个目的地的方向在哪儿,距离多远。这既是距离矢量协议的本质。
-
链路状态协议(LS):与距离矢量协议不同,链路状态协议通告的是链路状态信息(拓扑信息),而不是路由表。
运行链路状态协议的 路由器之间 会先建立一个协议的 邻居关系,然后彼此之间开始交互 LSA(链路状态通告)。每台路由器都会产生 LSA,路由器将接收到的 LSA 放入自己的 LSDB(链路状态数据库)中。路由器通过 LSDB,掌握了全网所有的拓扑信息。最后,由路由器通过 SPF 算法 计算出 最优路径,随后加载于自己的路由表中。
LS 图解:
1.建立邻居关系
2.互相传递链路状态信息
3.计算最优路径(SPF算法)
4.生成路由表项
OSPF 特征
-
支持 等开销负载均衡
-
基于 组播地址 进行更新 ---- 224.0.0.5 / 224.0.0.6
-
支持 触发更新:每 30min 进行一次 周期更新
-
需要 结构化 的部署 ---- 区域划分 地址规划
相同区域传递拓扑,不同区域传递路由。
区域划分的规则:
-
星型结构:0区为 骨干区域,大于0 则为非骨干区域;所有非骨干区域必须接入到骨干区域上。
-
必须要有 ABR 域间路由器:两个区域相连时,必须存在 ABR,ABR 同时工作 在两个区域上。
-
Router-ID 路由器标识符
作用:
用于一个 OSPF域 中 唯一的标识 一台路由器(取名)。
定义:
缩写为 RID。
-
Router-ID 的设定可以通过手工配置的方式,或使用系统自动生成的方式。
-
定义 RID 值,建议使用 IP地址,全网唯一,要是 不进行手工配置 则会 自动生成;优先配置为 环回的最大数值,如果 没有环回,则 自动配置 为 最大物理接口数值。
路径计算:
-
使用 COST 值 作为 度量值/开销:
COST(开销值) = 参考带宽 / 接口带宽;
-
默认参考带宽 为 100M,整段路径 COST值之和最小 为 最佳。
-
弊端:若接口带宽 大于 参考带宽,即 cost 值为小数,则默认 度量值为 1,可能会导致 选路不佳(负载均衡);
故而在接口带宽大于参考带宽的网络中,可以人为的 修改参考带宽。
二、数据包类型
分类:
-
HELLO 包:用于 邻居间的发现,关系建立 及 保活,每 10s 发送一次。
-
DBD/DD 包:数据库描述包,用于携带 本地数据库目录。
-
LSR 包:链路状态请求包,在查看完 对端邻居的 DD 包 后,基于 本地的位置 查询 LSA,随后去 索要未知的 LSA 信息,就通过这个 LSR 包。
-
LSU 包:链路状态更新包,用于携带 各种 LSA 信息。
-
LSACK 包:链路状态确认包,用于确认 接收到 对端的信息。
三、状态机
图解:
-
Down 状态:表示未激活的状态,一旦 本地发出 hello包,则进入下一个状态,接收到 hello包后,也会 被动进入 Init状态。
-
Init 状态:表示初始化状态,发出 或者 接收 到 hello 包 都会进入到 Init 状态。
-
Two-way/2-way 状态:双向通信,表示建立了邻居关系;经过 条件匹配,成功则进入下一个状态机,失败则停留在 2-way 状态。
-
Ex-start 状态:预启动状态,发出 空的 DD 包,比较 RID 的大小,进行 主从选举,以 RID 大的为主。
-
Exchange 状态:准交换状态,发送 有目录的 DD 包,双方交换 DD 报文,描述自己拥有的 LSA 信息。
-
Loading 状态:加载状态,在查看完 对端邻居 的 DD 包 后,使用 LSR 包来 询问自己位置的 LSA 信息,对端 使用 LSU 包 进行回复,本地还需要 使用 LSACK 包 进行确认回复。
-
Full 状态:邻接关系建立的标识,两者从 邻居关系 变为 邻接关系。
四、工作过程
-
启动配置完成后,本地组播 224.0.0.5 发送 hello 包;
-
hello 包将携带 本地的 RID 值 及 已知邻居的 RID 值。
-
若接收到 对端的 hello 包中 有 自己的RID,则视为 认识 ;双方都认识则代表 邻居关系的建立,生成邻居表,开始进行 条件匹配;
-
匹配成功,则进入下一个阶段 ;不成功,则永远是邻居,使用 空的DBD包 进行 主从选举。
-
对比 RID,大为优,且 优先进入 下一个状态,优先共享数据库目录,之后使用 LSR/LSU/LSACK 包 来 获取未知的LSA信息 并 加载于本地的LSDB中 。
-
启用 SPF算法 ,基于 本地 LSDB 生成 有向图,再计算出 最短路径树,再基于 树形结构 算出以本地为起始点 到达 全网各个节点的最优路径,最后加载于 本地路由表 中,收敛完成 后,发送 hello 包保活 即可。
-
每 30min 进行一次 周期更新,周期更新即为 对比数据库目录,如果相同,则继续 hello 包 保活,如果不相同,则重新收敛。
结构突变
-
新增一个网段:直连新增网络设备,直接使用更新包告知邻接关系,需要 ack确认。
-
断开一个网段:直连断开网络设备,直接使用更新包告知邻接关系,需要ack确认。
-
无法沟通: hello time 10s ,dead time 40s,时间到了就会删除邻居信息。
五、基础配置
进程区域:
ospf [进程号] router-id [IP地址]
创建 ospf 进程号为1,仅具有本地意义,同时 定义 RID值,建议使用 IP地址,全网需要唯一。
如果不定义 RID 值,则会自动生成,建议手动配置。
area [区域号]
进入对应区域,只能有一个 骨干区域。
宣告:
反掩码:将掩码反过来
network [宣告IP/网段] [反掩码]
-
0 将 对应的网络位 锁死,主机位 表示 除本来的地址之外 还有的变化。
-
IP地址 的反掩码 全部锁死,即为 0.0.0.0
-
网段 的反掩码 用 255.255.255.255 减去 对应网段掩码 即可。
例:
IP地址 1.1.1.1 反掩码为 0.0.0.0,除 1.1.1.1 外还有 0种 变化。
网段 12.1.1.0 反掩码为 0.0.0.255,除 12.1.1.0 外还有 255种 变化。
参考带宽修改:
首先 进入 ospf 域
bandwidth-reference [网速]
例:修改参考带宽 为1000Mbits/s
[R1-ospf-1]bandwidth-reference 1000
注意:一旦修改参考带宽,需全网所有设备都修改一致。
查询配置表:
display ospf peer
查询 详细邻居关系
display ospf brief
查询 邻居表
display ospf lsdb [router-id] [RID 值]
查询 链路状态数据库
后面跟上 RID 值 可以查询 单独对应的 router 详细信息。
练习一:
### 首先进行基础配置 ####创建 ospf 进程,进程号为 1,同时定义 RID 值[R1]ospf 1 router-id 1.1.1.1#进入 区域 0[R1-ospf-1]area 0#宣告 IP地址[R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0#宣告 网段[R1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255#R2 配置,R2 为 域间路由器[R2]ospf 1 router-id 2.2.2.2[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0#R2 为 域间路由器,还要配置 骨干区域 1[R2-ospf-1]area 1 [R2-ospf-1-area-0.0.0.1]network 23.1.1.1 0.0.0.0#R3 配置[R3]ospf 1 router-id 3.3.3.3[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 23.1.1.2 0.0.0.0[R3-ospf-1-area-0.0.0.1]network 3.3.3.3 0.0.0.0#查看 宣告配置[R3-ospf-1-area-0.0.0.1]display this#查看 ospf 配置[R3]display ip routing-table protocol ospf
#连接测试,成功 ping通[R1]ping -a 1.1.1.1 3.3.3.3#查询 邻居详细关系[R1]display ospf peer
#查询 链路状态数据库[R1]display ospf lsdb
#查询 数据库中 不同地址的详细信息[R1]display ospf lsdb router 12.1.1.1[R1]display ospf lsdb router 1.1.1.1
练习二:
这里我们选择 R2 作为 域间路由器 ,先进行基础配置。
#R1 配置[R1]ospf 1 router-id 1.1.1.1#R1 为 1区[R1-ospf-1]area 1#宣告[R1-ospf-1-area-0.0.0.1]network 1.1.1.1 0.0.0.0[R1-ospf-1-area-0.0.0.1]network 12.1.1.1 0.0.0.0#R3 配置[R3]ospf 1 router-id 4.4.4.4#R3 为 2区[R3-ospf-1]area 2[R3-ospf-1-area-0.0.0.2]network 4.4.4.4 0.0.0.0[R3-ospf-1-area-0.0.0.2]network 24.1.1.2 0.0.0.0#R4 配置[R4]ospf 1 router-id 3.3.3.3#R4 为 0区[R4-ospf-1]area 0[R4-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0[R4-ospf-1-area-0.0.0.0]network 23.1.1.2 0.0.0.0### R2 配置 ###[R2]ospf 1 router-id 2.2.2.2#R2 为 3区[R2-ospf-1]area 3[R2-ospf-1-area-0.0.0.3]network 2.2.2.2 0.0.0.0#连通 0区[R2-ospf-1-area-0.0.0.3]area 0[R2-ospf-1-area-0.0.0.0]network 23.1.1.1 0.0.0.0#连通 1区[R2-ospf-1-area-0.0.0.0]area 1[R2-ospf-1-area-0.0.0.1]network 12.1.1.2 0.0.0.0#连通 2区[R2-ospf-1-area-0.0.0.1]area 2[R2-ospf-1-area-0.0.0.2]network 24.1.1.1 0.0.0.0#检查 ospf 表[R2-ospf-1]display this
#连接测试,依次 ping R1 R3 R4 的 环回进行检验[R2]ping -a 2.2.2.2 1.1.1.1六、扩展配置
六、扩展配置
1.从邻居关系建立成为邻接关系的条件
分类:
-
DR(指定路由器):
一个网段上的 其他路由器 都和 指定路由器(DR) 构成 邻接关系,而 不是它们 互相之间 构成邻接关系。
-
BDR(备份指定路由器):
当 DR 出现问题,由 BDR 接手 DR 的工作,同时会 再选举 出一个BDR。
-
DR Other:其他路由器。
-
ABR :域间路由器
网络类型:
-
点到点的网络:在一个网段中,仅支持 存在两个节点 的网络。(在点到点的网络类型中,可以 直接 成为 邻接关系)
-
MA:多路访问 ---- 在一个网段内,存在的节点数量不限 。
在MA网络中,若所有设备 均是邻接关系,则会造成大量的 重复更新,故进行 DR/BDR 的选举,所有 非 DR/BDR 的设备 被称之为DRother,DRother 之间 维持 邻居关系。
2.修改接口优先级:
选举规则:
-
先比较参选接口的 优先级,默认为 1,范围 0~255,大为优。
-
若参选接口的优先级相同,比较参选设备的 RID,大为优。
-
当优先级设置为 0 时,默认 不参加选举,就不会成为 DR/BDR。
首先要进入 对应的接口。
ospf dr-priority [优先级]
注意:
- OSPF 的 DR选举 是 非抢占性 的,故需要 重启 ospf 进程 达到 重新选举的目的。
-
可以在配置 OSPF 进程 之前 进行 优先级的设置,这样可以省去后续 重启进程 的步骤。
重启 OSPF 进程:
reset ospf process
注意:首先要退至 用户视图 (尖括号)。
3.手工认证
首先进入对应邻居接口
ospf authentication-mode md5 [编号] cipher [密码]
在 邻居间接口 上 定义安全密钥 ,编号任意。
4.手工汇总 ---- 汇总区域
在 域间路由器 ABR 上将 A区域 共享到 B区域 时,方可进行 手工汇总。
首先进入到需要汇总的 ospf 区域
abr-summary [汇总网段] [展开式掩码]
在需要汇总的区域 进行 手工汇总 。
5.被动/沉默接口
仅接受 不发送路由信息 的接口,仅能配置在 路由器 与 PC 之间。
首先进入需要设置被动接口的路由器的 ospf 进程。
silent-interface g [接口号]
设置该接口为 沉默接口
6.加快收敛-改计时器
-
修改一台路由器的 hello time,该接口的 dead time 将 自动关闭匹配;
-
邻居间直连接口 的 hello/dead time 时间不一样,则无法建立邻居关系;
-
修改时,不易修改的过小。
7.缺省路由
在 边界路由器 上配置一条 缺省信息 之后,该设备将向 内部所有设备 发送缺省路由,方向 指向边界路由器。
首先要进入 边界路由器 的 ospf 进程。
default-route-advertise always
下发 缺省路由。
练习三:
### 先进行基础配置 ####R1 配置[R1]ospf 1 router-id 192.168.0.1[R1-ospf-1]area 0#宣告 网段[R1-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255#宣告 IP地址[R1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0#R2 配置,R2 为 域间路由器 ABR,同时在 0区 和 1区 工作[R2]ospf 1 router-id 192.168.3.1[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 192.168.1.2 0.0.0.0[R2-ospf-1-area-0.0.0.0]network 192.168.2.1 0.0.0.0[R2-ospf-1-area-0.0.0.0]network 192.168.3.1 0.0.0.0[R2-ospf-1]area 1[R2-ospf-1-area-0.0.0.1]network 192.168.4.1 0.0.0.0#R3 配置[R3]ospf 1 router-id 192.168.5.1[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 192.168.4.2 0.0.0.0[R3-ospf-1-area-0.0.0.1]network 192.168.5.1 0.0.0.0
手工汇总:
#进行 手工汇总,汇总网段为 192.168.0.0 / 22[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.252.0
沉默接口/缺省路由:
给 R1 连接一台 PC;给 R3 新增加一个 外网IP 3.3.3.3/24。
#配置 沉默/被动接口[R1-ospf-1]silent-interface g 0/0/1#下发 缺省路由[R3]ospf 1[R3-ospf-1]default-route-advertise always#查表检验[R1]display ip routing-table protocol ospf
七、作业
要求:
-
R1~R3 为 0 区,R3~R4 为 1 区,其中 R3 环回也在 0 区
-
R1~R3中,R3 为 DR 设备,没有 BDR
-
R4 环回地址已固定,其他所有网段基于 192.168.1.0/24 进行合理划分
-
R4 环回不能宣告,全网可达,保障更新安全,避免环路,减少路由条目数量
子网划分:
128 64 32 16 8 4 2 1
先 借1位 将网段分成两部分:环回链路 0/25 和 骨干链路 128/25;
再将 环回链路 借1位 分成两部分:0/26 和 64/26,后者用于 环回接口。
这里为了简便就不再将骨干链路细分成 /30 的网段了。
网段 | 子网 |
---|---|
192.168.1.0/25 | 192.168.1.0/26 |
255.255.255.128 | 192.168.1.64/26 |
192.168.1.128/25 | 无 |
先进行基础配置。
分区宣告:
R1~R3 为 0 区,R3~R4 为 1 区,R3 是 域间路由器 ABR。
#R1 配置[R1]ospf 1 router-id 192.168.1.1[R1-ospf-1]area 0[R1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0#R2 配置[R2]ospf 1 router-id 192.168.1.2[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 192.168.1.2 0.0.0.0#R3 配置,R3 为 域间路由器 ABR[R3]ospf 1 router-id 192.168.1.3[R3-ospf-1]area 0[R3-ospf-1-area-0.0.0.0]network 192.168.1.3 0.0.0.0[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 192.168.1.129 0.0.0.0#这里选择 宣告网段 1.64/26,掩码为 255.255.255.192[R3-ospf-1-area-0.0.0.1]network 192.168.1.64 0.0.0.63#R4 配置[R4]ospf 1 router-id 4.4.4.4[R4-ospf-1]area 1[R4-ospf-1-area-0.0.0.1]network 192.168.1.130 0.0.0.0
优先级:
这里建议在配置 ospf 进程前先将R1 R2 优先级 配置为 0,这样就可以省去 重启进程 的步骤。
### 将 R3 设置为 DR,优先级为 0 即 不参加选举#R1 配置 优先级[R1-GigabitEthernet0/0/0]ospf dr-priority 0#R2 配置 优先级[R2-GigabitEthernet0/0/0]ospf dr-priority 0#重启进程,在 用户视图 进行####注意:等所有 ospf 进程都配置完毕后再进行重启###<R1>reset ospf process<R2>reset ospf process
手工认证:
#将 相连的 R1 ~ R3 都进行 手工认证,设定编号为 1[R1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456[R2-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456[R3-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456
缺省路由:
#在 边界路由器 R4 上配置 缺省路由[R4-ospf-1]default-route-advertise always#配置完后记得在 其他路由器 进行查表检验#此时已经 全网通<R1>ping 4.4.4.4
手工汇总:
# 将 R1 ~ R3(0区) 进行 手工汇总,在 ABR 上进行配置[R3]ospf 1[R3-ospf-1]area 0#汇总网段为 192.168.1.0 / 25[R3-ospf-1-area-0.0.0.0]abr-summary 192.168.1.0 255.255.255.128#在 R4 上进行 查表检验<R4>display ip routing-table protocol ospf