简介:
Open Shortest Path First: 开放式最短路径优先协议
版本:
OSPFV1(实验室阶段夭折);OSPFV2:IPV4
OSPFV3:IPV6
较RIP的优势:
1、选路佳:
选路依据:带宽
用SPF算法
将图形结构转换为树形结构 —— 不会出现环路
2、收敛快:
10秒HELLO时间 ; 40秒DEAD时间
3、占用资源少:
同一区域间传输拓扑信息(单个数据包大于RIP)但使用多种措施减小总资源占用
RIPV2和OSPFV2的比较:
相同点:
- 都是无类别的路由协议(传递路由信息时携带子网掩码),都支持VLSM和CIDR——OSPF在不同区域中传递路由信息
- OSPFV2(224.0.0.5和224.0.0.6)和RIPV2(224.0.0.9)都以组播传递信息
- 都支持等开销负载均衡
不同点:
RIP仅适用于中小型网络,OSPF可用于中大型网络 —— OSPF为了适应中大型网络环境,需要进行结构化部署(区域划分)
区域划分:
目的:
-
分而治之:通过限制LSA传播范围和LSDB规模,提升网络性能和稳定性。
-
灵活扩展:支持大规模网络的分层管理,适应不同场景需求(如Stub/NSSA区域)。
-
简化运维:通过路由汇总和区域隔离,降低网络复杂度,便于维护和故障定位。
ABR:
**Area Border Router :**区域边界路由器
同时处于两个区域,并且一个接口对应一个区域,至少有一个接口属于骨干区域(area 0)
区域之间可以存在多个ABR,一个ABR也可以对应多个区域
区域划分的要求:
-
区域之间必须存在ABR
-
区域划分必须按照星型拓扑划分 —— 所有区域需要连接到中心区域上,这个中心区域称为骨干区域
area ID
为了方便对各个区域进行区分和管理,我们给每个区域设计的一个编号
由32位二进制组成,可通过点分十进制(十进制)来进行表示(类似IP地址)
RID
Router ID,路由器标识符
条件:
- 唯一性(AS内唯一)
- 格式统一(32位二进制,采用IP地址的格式)
获取方式:
- **手工配置:**满足RID的条件即可(as域内唯一;IPv4格式)
- **自动获取:**优先环回,其次接口ip地址(如果有多个,地址选大的)
作用:
- 在AS域内的唯一标识一台路由器
- 确保邻居关系的合法性和路由计算的准确性。
- 作为链路状态通告(LSA)的签名,维护全网拓扑数据库(LSDB)的一致性。
- 在DR/BDR选举中作为决定性因素。
OSPF的数据包
数据包类型 | 作用 |
---|---|
Hello | 发现邻居,维持邻接关系。 |
DBD | 交换LSDB摘要,确定主从关系。 |
LSR | 请求缺失的LSA,精准定位需同步的数据。 |
LSU | 传输完整的LSA内容,响应LSR请求或通告网络变化。 |
LSAck | 对LSU进行确认,确保传输可靠性(通过LSA头部显式确认) |
hello包
用来周期发现,建立和保活邻居关系
**周期发送时间:**10s(30s)
**死亡时间(dead time):**40s(120s)—— 四倍hello时间
因为OSPF传递的是拓扑信息,需要确定所有路由器的位置关系,所以需要使用RID来对所有的路由器进行区分和标定
Hello 包会携带RID
DBD包
**Database Description **: 数据库描述包
携带数据库(LSDB——存放LSA信息的数据库)的目录信息
LSR包
Link State Request:链路状态请求包
基于DBD包请求未知的LSA信息
LSU包
Link State Update:链路状态更新包
真正携带LSA信息的数据包
LSACK包
Link State Acknowledgment :链路状态确认包
确认收到LSU包(链路状态更新包)
OSPF存在每30分钟一次的周期更新
OSPF的状态机
建立邻居关系(two-way):
Down state :
启动OSPF后,但在发出Hello包之前
Init state
在发出hello包后,且没有收到对方发的数据包(该数据包带有自己的RID)之前
Two-way state
双向通讯状态(标记着邻居状态的建立)
条件匹配
后文有写
匹配成功进入下一阶段,匹配失败,停留在2way状态,只使用hello包保活
建立邻接关系:
Exstart(预启动) 状态:
主从关系选举:使用未携带数据的DBD包(为了和邻居关系区分) 比较RID,大的为主,可优先进入下一阶段
Exchange (准交换)状态:
使用携带数据的DBD包进行数据库目录摘要的共享
loading(加载)状态:
查看对端的DBD包中信息和本地LSDB数据目录信息进行对比,基于未知的LSA信息发送LSR包,对端回复LSU包,需要LSACK进行确认
Full 状态 :
标志着邻接关系的建立(只有邻接关系才能交换LSA信息进行保活)
OSPF工作过程:
邻居关系的建立过程:
- OSPF协议启动配置完成,OSPF协议向本地所有运行协议的接口以组播的形式(224.0.0.5)发送 携带自己 RID的 hello 包,以及本地已知的邻居的RID。之后,将收集到的邻居关系记录在一张表中 —— 邻居表;
- 当收到邻居的hello包中携带了自己的RID时,进入邻居关系
- 邻居关系建立完成后,进行条件匹配。失败则停留在邻居关系(仅hello包进行保活)匹配成功,则开始建立邻接关系。
邻接关系建立过程:
-
使用未携带数据的DBD包进行主从关系选举(主可优先进入下一阶段)
-
使用携带数据的DBD包共享目录信息
-
基于DBD包,通过LSR/LSU/LSACK 获取未知的LSA信息。将所有的LSA信息保存本地的LSDB数据库—— 数据库表
-
LSA交换完成后,进入邻接关系
邻接关系建立完成后:
-
基于LSDB,使用SPF算法将有向图转换为最短路径树,计算本地到达未知网段的路由信息,将其加载到路由表。
-
收敛完成后,周期性的发送hello包进行保活,每30min一次周期更新
网络结构突变:
- 突然新增(断开)一个网段:触发更新,第一时间将变更信息通过LSU包传递出去,需要ACK 确认
- 无法联系 :dead time (40s)
OSPF的基本配置
1,启动OSPF进程
[r1]ospf 1 router-id 1.1.1.1 # 手工配置RID需要在进程启动时配置
2,创建区域
[r1-ospf-1]area 0
3,宣告
[r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 # 反掩码:由连续的0和1; 0 对应位不可变,1对应位可变。
宣告的作用:
- 激活接口 :只有宣告的网段包含的接口会被激活,只有激活的接口可以收发OSPF 的数据。
- 发布路由 : 只有激活的接口所对应的直连网段的路由才能被发布
其他操作:
[r1]display ospf peer # 查看邻居表
[r1]display ospf lsdb # 查看数据库表
[r1]display ospf lsdb router 2.2.2.2 # 展开一条LSA的方法
OSPF的优先级
华为设备中:OSPF协议的默认优先级为 10
COST = 参考带宽 / 真实带宽(华为设备默认的参考带宽为100Mbps)
如果计算出来是一个小于1的小数,则直接按照1来算。
如果是一个大于1的小数,只取整数部分。
[r1-ospf-1]bandwidth-reference 1000 #修改参考带宽值
注意:如果要修改参考带宽,则所有设备都需要修改为相同的参考带宽
条件匹配:
DR(大哥):
Designated Router :指定路由器
和广播域内其他设备建立邻接关系
BDR(二弟):
Backup Designated Router:备份指定路由器
和广播域内其他设备建立邻接关系,称为DR设备的备份。
注意:
一个MA网络内部,至少需要4台设备才能看到邻居关系。
DR和BDR是接口的概念
在一个广播域中,若所有设备均为邻接关系,将出现大量的重复更新,故需要进行DR/BDR的选举,所有DRother之间,仅维持邻居关系即可。
DR/BDR的选举规则
比较优先级
优先级最大的为DR,次大的为BDR;
优先级默认为1 :主要目的让人为修改
[r1-GigabitEthernet0/0/0]ospf dr-priority ?
INTEGER<0-255> Router priority value
注意:如果将一个接口的优先级设置为0,则代表这个接口将放弃DR/BDR的选举
比较RID
若优先级相同,则比较RID
RID大的路由器所对应的接口为DR,次大的为BDR。
非抢占式选举
DR/BDR的选举是非抢占模式的
一旦角色选举出来,则将无法抢占
选举时间:40s(等同于死亡时间)——只是时间相同不是同一个计时器计时(这个时间只是选举的上限时间,选举可以在短时间内完成,只要完成则不能抢占)
虽然选举是非抢占式的,选举完成后无法修改,但可以通过重启OSPF进程实现重新选举
reset ospf 1 process # 重启OSPF进程
OSPF的拓展配置
OSPF的手工认证
[r1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456
手工汇总
即区域汇总,需要在ABR设备上配置
[r2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.254.0 # 子网掩码不可简写
沉默接口
配置了沉默接口的接口,将只接受不发送路由信息
[r2-ospf-1]silent-interface GigabitEthernet 0/0/2
加快收敛
即减少计时器的时间
[r1-GigabitEthernet0/0/0]ospf timer hello 120 # 修改hello时间
注意:邻居双方的hello时间和死亡时间必须相同,否则将断开邻居关系
缺省路由
[r3-ospf-1]default-route-advertise
# 注意:这个命令要求边界设备自身得具有缺省路由才行
[r3-ospf-1]default-route-advertise always #在没有缺省的情况下,强制下发缺省