开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。
RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。
OSPF概述
- 大中型网络使用最广泛的IGP协议
- 链路状态路由协议
- 无类别路由
- 使用组播(224.0.0.5和224.0.0.6)
- 收敛快
- 已开销(cost)作为度量值
- 采用SPF算法可以有效的避免环路
- 触发式更新(以较低频率(每30分钟)定期发送更新,被称为链路状态泛洪)
- 设置区域更新概率使得OSPF能够支持更大规模的网络(划分骨干区域、非骨干区域和特殊区域)
- 通过LSA(链路状态信息)的形式发布路由
- 支持手动汇总(在ABR和ASBR上配置)
OSPF区域
区域概述
术语 | 备注 |
---|---|
区域(Area) | 为了适应大型网络,OSPF在AS内划分多个区域。区域是以接口划分。每个OSP路由器只维护所在区域的完整链路状态信息 |
区域ID(Area-ID) | 可以表示成一个十进制的数字,如:1,也可以表示为一个IP,如:1.1.1.1 |
区域优点 | 尽量减少LSDB大小,拓扑变化仅影响本区域内部 |
区域类型
划分多区域的作用,是为了减轻运行OSPF路由器的压力。
防环机制:划分了骨干区域和非骨干区域,所有非骨干区域通讯必须经过骨干区域中转,骨干区域传来的LSA不会再传回骨干区域。非骨干区域之间通信需要骨干区域转发。
类型 | 备注 |
---|---|
骨干区域 | area-0,骨干区域,也称为传输区域 |
非骨干区域 | 非area-0,非骨干区域,称为末端区域 |
OSPF路由器角色
角色 | 备注 |
---|---|
IR | internal router (内部路由器):所有接口都属于同一个区域 |
BR | backbone router(骨干路由器):至少有一个接口属于骨干区域 |
ABR | Area border router(区域边界路由):连接多个不同的区域,至少有一个接口属于骨干区域 |
ASBR | Autonomous System Border(自制系统边界路由器):将其他路由协议学习到的路由以引入的方式到OSPF进程中 |
OSPF核心工作流程
- 发现并建立邻居
- 传播LSA(区别基于DV算法的路由更新)【LSA内容:链路状态宣告,路由器接口,描述接口信息】
- 将LSA泛洪到区域中的所有OSPF路由器
- 收集LSA创建LSDB(链路状态数据库)
- 使用SPF算法计算到达每个目标网络的最短路径,存放于路由表
OSPF三张表
类型 | 含义 |
---|---|
邻居表 | 记录所有邻居关系 |
链路状态数据库 | 记录所有链路状态信息 |
路由表 | 记录最佳路由 |
Router ID
- 运行OSPF协议前,必须选取的一个RID
- 用来唯一标识一台OSPF路由器
- RID可以手动配置,也可以自动生成
- RID选取规则顺序:1. 优先手动配置(推荐);2. 活动回环接口中IP地址最高的;3. 活动物理接口中IP地址最高的
- 任何选举值都未配置是运行不了OSPF的(router id为0.0.0.0)
- RID选举具有非抢占性,修改除非重启OSPF进程(R1> reset ospf process)
OSPF数据包类型
OSPF数据包封装在IP协议之上,IP协议号89(ICMP 1, TCP 6, UDP 17)
OSPF数据包 | 作用 |
---|---|
Hello | 建立并维护邻居关系 |
Database Description(DD) | LSDB的摘要信息(仅包含LSA头部信息) |
Links State Request(LSR) | 请求LSA |
Links State Update(LSU) | 发送LSA(完整的LSA信息) |
Link State Acknowledge (LSA) | 对LSU的确认 |
OSPF状态机制
只有2-Way和Full是稳定状态
状态 | 备注 |
---|---|
失效状态(Down) | 没有收到Hello 包 |
初始状态(Init) | 收到了Hello 包,但是邻居列表不存在自己 |
双向通信状态 (2-Way) | 收到了Hello包,且在邻居列表里看到了自己,形成邻居关系 |
交换初始状态 (Exstart) | 决定交换信息时的路由器主从关系 |
交互状态 (Exchange) | 向邻居发送DD数据包 |
加载状态(Loading) | LSR和LSU交换 |
完全邻接状态 (Full) | LSDB同步完成,形成邻接关系 |
OSPF工作流程(数据包和状态切换过程)
OSPF第一阶段是使用Hello包建立双向通信的过程,称为邻居关系
Exstart:序列号x,I=1表示是第一个发送的DD包,M=1表示后面还有DD包,MS=1表示我是主(初始都是主),通过比较Router ID值大的一方为主,向主发送的DD报文中序列号会变成主的序列号,同时这才是真正的DD报文
OSPF第二阶段是通过交换LSA达到LSDB同步,建立邻接关系
OSPF邻居建立条件(必须三层直连)
Hello报文用来发现和维持OSPF邻居关系
- RID唯一
- Hello/Dead时间间隔一致(默认Dead时间是Hello时间的4倍) 【 [R1-GigabitEthernet0/0/0] ospf timer hello 5】
- 区域ID一致
- 认证(如果启用了认证)一致
- 链路MTU大小一致(华为默认不开启检查,思科默认开启)
- 子网掩码一致(以太网环境)
- 网络地址一致
- 末梢区域设置一致(Option)
OSPF网路类型:基于接口
缺省情况下,OSPF认为以太网的网络类型是广播类型,PPP、HDLC的网络类型是点对点类型。
DR和BDR
只要是多路访问BMA和NBMA网络中,为了减少邻接关系的数量,从而减少数据包交换次数,最终节省带宽,降低对路由器处理能力的压力,选举DR和BDR
术语 | 备注 |
---|---|
DR | Designed Router,指定路由器,类似班长、总经理 |
BDR | Backup DR,备用DR,类似副班长、副总经理 |
DRothers | 类似普通学生、普通员工 |
关系 | DR、BDR、DRothers之间都保持邻接关系(Full),DRothers之间保持邻居关系(2-Way) |
地址 | 224.0.0.6向DR和BDR发送链路状态更新 224.0.0.5向所有OSPF路由器发送 |
选举规则 | 首先比较Hello报文中鞋带的优先级 1. 优先级范围0-255,默认=1 2. 优先级最高的被选举为DR,优先级次高的被选举为BDR 3. 优先级为0的不参与选举 优先级一致的情况下,比较RID,越大越优先。选举具有非抢占性,除非当DR和BDR都失效或重启OSPF进程 |
OSPF度量值:Cost,开销
在每一个运行OSPF的接口上,都维护这一个接口Cost
Cost=10^8/BW(bps)=100Mbps/BW=接口带宽参考值/接口带宽
到一个目标网络的度量值=
从源到目标所有出站接口的Cost值累加(数据方向)
从源到本路由器沿途所有入站接口的Cost值累加(路由方向)
OSPF 配置
命令 | 备注 |
---|---|
ospf 1 router-id 1.1.1.1 | 开启OSPF,进程号缺省值为1,手动配置Router ID |
area 0/0.0.0.0 | 配置区域 |
network 192.168.0.0 0.0.0.255 | 宣告网络,即指定运行OSPF的接口;使用反掩码来匹配(255.255.255.255-掩码) |
display ospf peer brief | 显示OSPF邻居信息 |
ospf timer hello 10 | 修改Hello包发送间隔 |
ospf timer dead 40 | 修改Hello包超时时间 |
display ospf interface g0/0/0 | 显示OSPF接口信息 |
ospf dr-priority 100 | 修改OSPF接口优先级 |
ospf cost 10 | 修改开销,范围1-65535,缺省为1 |
bandwidth-reference 100 | 调整带宽参考值,默认为100Mbps,需要在整个OSPF网络中统一进行调整 |
reset ospf process | 重启OSPF进程 |
default-route-advertise always | OSPF发布缺省路由(没有缺省路由,必须要有always参数) |
display ospf lsdb | 查看ospf链路状态数据库信息 |
OSPF认证命令
如果同时配置认证,接口认证优先生效。
命令 | 备注 |
---|---|
int g0/0/0 ospf authentication-mode md5 1 cipher 111.com | 配置接口认证 |
ospf 1 area 0 authentication-mode md5 1 cipher 111.com | 配置区域认证 |
1 | # AR1 |