HCIA 9-OSPF协议
OSPF(Open Shortest Path First)开放式最短路径优先,是一种链路状态路由协议,用于在IP网络中计算最短路径。OSPF协议是基于Dijkstra算法的,它使用链路状态信息来计算最短路径。
由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。
RIP与OSPF
如何评判一个动态路由协议的好坏:
- 选路佳
- 收敛速度越快越好
- 资源占用
选路
RIP — 根据跳数选路(不够科学),可能出现环路。
OSPF — 开放式最短路径优先协议,传递拓扑信息。
收集LSA(拓扑信息)—> 形成有向图 —> 转换为最短路径树 —> 依靠自身的最短路径优先算法计算得出路由。
收敛速度
RIP的计时器需要300s,而OSPF的计时器周期更短。
资源占用
单个数据包的角度来说OSPF远大于RIP,从整体上说RIP存在周期更新,导致整体OSPF和RIP资源问题都很严重。
OSPF的版本:V1、V2(IPv4)、V3(IPv6)
相同点
- OSPFV2和RIPV2都是无类别的动态路由协议(都支持汇总和子网划分)
- OSPFV2和RIP都是通过组播发送自身的数据包(224.0.0.5 224.0.0.6)
- OSPF和RIPV2都支持等开销负载均衡
不同点
RIPV2只适用中小型网络环境,OSPFV2适用中大型网络环境。
OSPF结构化部署的思路
在部署OSPF之前,需要规划网络拓扑结构,包括网络的分段、子网划分、路由器的位置和连接方式等。
OSPF结构化部署的基本思路 — 区域划分
划分OSPF区域
根据网络拓扑结构,将网络划分为多个OSPF区域。每个区域应该包含一个或多个路由器,并且应该有一个区域边界路由器(ABR)来连接不同的区域。
ABR — 区域边界路由器,同时属于两个区域,一个ABR可以同时属于多个区域。
注意:区域内部传递拓扑信息,区域之间依然传递路的是由信息。
区域划分的原则
- 必须按照星形拓扑结构部署 — 中间区域(骨干区域)Area 0。
- 必须存在ABR,必须有接口属于Area 0,同时可以存在多个ABR。
区域ID — Area ID (32位二进制构成)
OSPF网络如果存在多个区域 — 多区域OSPF网络
OSPF网络如果只有一个区域 — 单区域OSPF网络
OSPF的工作过程
OSPF的数据包
-
Hello包 — 用来周期性的发现建立和保活邻居关系,路由器定期发送Hello数据包,以便发现相邻的路由器,并检查邻居状态是否正常。
Hello时间(10S/30S),dead time — 死亡时间(默认情况下是4倍的Hello时间)。
路由器ID(Router ID)用来区别和标识不同的OSPF路由器,32位二进制构成。
路由器ID具有唯一性,格式统一性。可以手工指定,也可以自动生形成。自动生成RID,首先会检测路由器是否配置环回地址,然后选择环回地址最大的作为自己的RID,如果设备没有配置环回地址,则选择接口IP地址数值最大的作为自己的RID。
-
DBD包 — 链路状态数据库描述包,用来描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。
-
LSR包 — 链路状态请求包,用于向对方请求所需的LSA信息。
-
LSU包 — 链路状态更新报文,用于向对方发送其所需要的LSA。
-
LSACK包 — 用来确认收到了LSA信息。
OSPF的状态机
- Down状态:在这个状态下,OSPF路由器尚未检测到邻居路由器。它会定期发送Hello消息,以发现相邻的路由器。
-
Init状态:在这个状态下,OSPF路由器已经检测到邻居路由器,并发送了Hello消息,但还没有收到相应的Hello消息。这个状态只是一个短暂的状态,一旦收到相应的Hello消息,路由器就会进入到下一个状态。
-
2-Way状态:在这个状态下,OSPF路由器已经收到相应的Hello消息,标志着邻居关系的建立,建立了双向通信。在这个状态下,路由器可以交换LSA消息。
-
Exstart状态:在这个状态下,两个相邻的OSPF路由器开始协商建立邻居关系(主从关系)。路由器会选择一个作为Master(主),另一个作为Slave(从)。
-
Exchange状态:在这个状态下,交换DD(数据库描述)消息,以确定彼此的LSA数据库中哪些LSA需要更新。这个过程称为LSA同步。
-
Loading状态:在这个状态下,Slave从Master请求缺失的LSA,并开始加载这些LSA。在这个状态下,Master会发送LSA消息,而Slave会发送ACK(确认)消息。
-
Full状态:在这个状态下,邻居路由器已经完成了LSA同步,并且它们的LSA数据库是相同的。在这个状态下,标志着邻接关系的建立,并且只有达到邻接状态才能真正共享LSA信息。
OSPF的工作过程
-
建立邻居关系
启动配置完成后,OSPF将本地所有运行了OSPF协议的接口,以组播 224.0.0.5(目标IP)周期性的发送Hello包,Hello包中将携带自己本地的RID,邻居接收到对端的RID将会把这些信息存储在邻居表。
-
条件匹配
如果条件匹配成功则进入下一个状态,如果匹配失败则,停留在邻居关系。需要用Hello包进行周期保活。
条件匹配是一种基于路由器接口的属性和目标网络的属性来选择最佳路径的方法。
指定一台路由器和其他OSPF网络设备建立邻接关系,其他的设备仅保持邻居关系选举规则,OSPF网络首先会选择优先级数值大的作为指定路由器。当优先级数值一致,会选择接口IP地址大的作为指定路由器。
DR — 指定路由器
BDR — 备份指定路由器,和其他设备建立邻接关系,当DR失效时顶替DR的工作。
DRother — 其他路由器
OSPF的条件匹配一定是非抢占的
-
建立邻接关系
进行主从关系的选举,首先采用未携带数据(真正LSA摘要)的DBD包进行选举 — 对比RID,RID大的作为主设备,后续将由主设备优先共享自己的数据库摘要信息,同时也将由主设备先共享自己的LSA信息。之后使用LSR/LSU/LSACK获取本地未知的LSA信息,完成了本地LSDB的建立,形成本地链路数据库表。
-
完成收敛
基于自己本地的链路状态数据库,依靠OSPF算法形成有向图 —> 最终计算得出路由 —> 加载到自己本地的路由表中。
收敛完成后,将使用Hello包周期保活,每30min进行周期更新。
OSPF的基础配置
指定路由器ID,建议手工指定RID
[r1]ospf 1 router-id 1.1.1.1
选择对应的区域
[r1-ospf-1]area 0
范围宣告(相当于宣告一个网段)
[r1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255
精准宣告(仅宣告一个IP地址)
[r1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0
反掩码 — 连续的0和1构成(32位二进制),0代表不可变1代表可变
查看邻居表简表
<r2>display ospf peer brief
删除宣告的指令
[r1-ospf-1-area-0.0.0.0]undo network 192.168.1.1 0.0.0.0
OSPF路由表的开销值 COST=参考带宽/实际带宽,默认是100M,实际情况下这个值设置的比较小的。
改变OSPF参考带宽
[r1-ospf-1]bandwidth-reference 1000
更改OSPFDR选举优先级,数值越大的称为主设备,当优先级数值为0,意味着该路由器将放弃DR和BDR的选举。
[r1-GigabitEthernet0/0/0]ospf dr-priority 2
拓展配置
- 手工认证
[r1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456
[r3-GigabitEthernet0/0/0]ospf authentication-mode simple plain 123456
- 手工汇总
配置位置:ABR区域边界路由器上进行配置
[r2-ospf-1]area 0 —进入区域(OSPF的汇总是区域汇总)
[r2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.252.0
- 沉默接口
[r1-ospf-1]silent-interface GigabitEthernet 0/0/1
- 加快收敛 — OSPF的计时器
[r1-GigabitEthernet0/0/0]ospf timer hello 2
- 缺省路由
[r3-ospf-1]default-route-advertise 下发缺省(前提是自身必须存在缺省)
[r3-ospf-1]default-route-advertise always 强制下发一条缺省