评价一个路由协议的好坏:
- 占用资源多少
- 收敛速度快慢
- 选路是否合理
RIP以跳数作为开销值来选路,就可能存在不合理性
RIP – 距离矢量性协议
- 以跳数作为开销值进行选路,本身存在不合理性
- 由于RIP本身计时器时间较长,收敛速度较慢
- RIP单个数据包占用资源并不算大,但是因为RIP存在30s一次的周期更新,所以整体看来,RIP的资源占用很大
由于RIP三个维度的表现都不算太好,所以只能适用于中小型网络环境
OSPF 动态路由协议 – 开放式最短路径优先协议
传递的是LSA:链路状态信息
- OSPF因为是链路状态型协议,所以,计算出的路径不会出现环路,并且,OSPF以带宽作为开销值进行选路,相对于条数更加合理,所以从选路的角度来看,OSPF优于RIP
- 由于OSPF的计时器时间短于RIP的计时器,所以从收敛速度来看,OSPF优于RIP
- 从单个数据包携带的数据量来看,因为OSPF携带的是拓扑信息(LSA),所以数据量较RIP大很多,但是由于RIP存在30s一次的周期更新,并且OSPF本身存在很多减少更新量的措施,所以从整体的角度看,OSPF小优于RIP
OSPF版本:
- OSPFV1(在实现试阶段就夭折了),OSPFV2 — IPV4
- OSPFV3 — IPV6
RIPV2 与 OSPFV2:
- 相同点
-
OSPFV2 和 RIPV2都是无类别的路由协议,都支持VLSM, CIDR
-
OSPFV2和RIPV2都以组播的形式发送消息,地址:224.0.0.5和224.0.0.6
-
OSPFV2和RIPV2都支持等开销负载均衡
-
不同点
- RIP只能适用于中小型网络
- OSPF可以适用于大型网络
- OSPF为了适应中大型网络,需要进行结构化部署:区域划分
如果只有一个区域的OSPF网络,我们将这样的网络称为单区域OSPF网络
如果只有一个区域的OSPF网络,我们将这样的网络称为多区域OSPF网络
区域划分的主要目的: 区域内部传递拓扑信息,区域之间传递路由信息
-
区域边界路由器 – ABR: 同时属于多个区域,并且一个接口对应一个区域,至少有一个接口属于骨干区域,区域之间可以存在多个ABR,一个ABR可以属于多个区域
-
区域划分的要求:
- 区域之间必须存在ABR
- 区域划分必须按照星型拓扑结构划分,星型拓扑中间区域叫做骨干区域
OSPF区域存在区域编号: 区域ID(area ID):由32位二进制构成,用点分十进制进行表达,骨干区域的area ID为0
一、 OSPF的数据包
-
hello包: 可以用来周期发现,建立和保活邻居关系
周期: 默认为10s为周期进行周期发送,在某些特殊环境会以30s为周期
死亡时间(dead time): 4倍的hello时间
RID: 用来标定和区分OSPF网络中不同的路由器
RID要求:
-
整个OSPF网络唯一
-
格式统一,RID要求必须符合IP地址格式(有32位二进制构成,并且点分十进制表达)
RID的获取方式:
-
手工配置:仅满足以上两点要求即可
-
自动获取:路由器先从环回地址中选取数值最大的IP地址作为RIP,若不存在环回地址,则将从本地的物理接口对应的IP地址中选择数值最大的最为RID
-
-
DBD包: 数据库描述报文,LSDB(数据链路状态数据库,存放LSA信息的数据库),像是“数据库的目录”
-
LSR包: 链路状态请求报文,基于DBD包请求未知的LSA信息
-
LSU包: 链路状态更新报文, 真正携带LSA信息的数据包
-
LSAck包: 链路状态确认报文,确认包
二、 OSPF的状态机
two-way:双向通信:标志着邻居关系的建立
↓
条件匹配
↓
主从关系选举:使用未携带数据的DBD包(主要目的是为了和之前的邻居关系进行区分)通过对比RID,RID大的为主,主可以优先进入下一个状态
↓
full state:标志着邻接关系的建立
总结:
down状态: 启动OSPF,发送hello后进入下一个状态
init状态: 当你收到一个hello包中包含本地的RID信息时,进入下一个状态
two-way状态: 标志着邻居关系的建立
↓ 条件匹配:
↓ 条件匹配失败 — 停留在邻居关系,仅10s一次,使用hello包进行保活
↓ 条件匹配成功 — 进入下一个状态
exstart状态: 使用未携带数据的DBD包进行主从关系选举,RID大的为主,主进入下一个状态
exchange状态: 使用携带目录信息的DBD包进行目录信息的共享,需要ACK确认
loading状态: 查看对端的DBD包与本段的LSA信息进行对比,基于未知的LSA信息发送LSR包进行请求,对端使用LSU进行回复,需要ACK确认
full状态: 标志着邻接关系的建立
三、 OSPF的工作过程
- 启动配置完成后,OSPF向本地所有运行OSPF协议的接口以组播224.0.05的形式发送hello包。hello包中需携带自身本地的RID寄自身一直邻居的RID,之后,将收集到的邻接关系记录在一张表中 – 邻居表
- 邻居表建立完成后需要进行条件匹配,失败则停留在邻居关系,仅适用hello进行周期保活
- 匹配成功,则开始建立邻接关系,首先需要使用 未携带数据的DBD包进行主从关系选举 ,之后使用携带数据的DBD包共享数据库目录,之后使用LSR/LSU/LSACK数据包来获取未知网段的LSA信息,完成本地数据库表的建立 – LSDB 链路状态数据库
- 最后,基于本地的链路状态数据库,生成 有向图及最短路径树,之后,计算本地到达未知网段的路由信息,生产的路由信息加载到 路由表中
- 收敛完成后,OSPF需要10s一次使用hello包进行周期保活,OSPF 30min进行一次周期更新,把序列号重新刷新一次
条件匹配: 在一个广播域中,所所有设备均为邻接关系,将出现大量的重复更新,所以需要进行DR/BDR选举,所有非DR/BDR的设备之间仅维持邻居关系
指定路由器:DR
备份指定路由器:BDR
一个广播域中,在DR和BDR都存在的情况下,至少需要四台路由器才能看到邻居关系
DR 和 BDR实际上是接口的概念
DR/BDR选举机制:
-
先比较优先级,优先级最大的为DR,第二大的为BDR,优先级的初始默认值为1
修改优先级:
优先级的取值范围:0 - 255,若优先值设为0,则表示不参加DR/BDR的选举 -
如果优先级相同,则比较RID,若RID大的路由器就位DR,第二大的为BDR
DR/BDR的选举模式为非抢占模式,选举时间的上限为40s
重启可以进行新的选举
结构突变:
- 突然增加一个网段:触发更新,立即发送携带LSA信息的LSU包,需要ACK确认
- 突然断开一个网段:触发更新,立即发送携带LSA信息的LSU包,需要ACK确认
- 无法联系 – 40s死亡时间
四、 OSPF的基本配置
-
启动OSPF进程
router-id:配置RID
-
创建区域
-
宣告
0.0.0.0 – 反掩码 – 由连续的0和1组成,其中0代表不可变位,1代表可变位
查看OSPF邻居关系表
查看lsdb:
查看lsdb详细的某一条:
查看路由表:
OSPF在华为体系中默认优先级为0
OSPF是以带宽作为开销值的度量标准
COST = 参考带宽 / 真实带宽 华为默认的参考带宽:100Mbps
修改参考带宽:参考宽带一旦修改,必须OSPF网络内所有设备均修改成相同的
五、 OSPF的拓展配置
-
手工认证
邻居关系断了
去AR2配置,就可以连接上
-
手工汇总(其实是区域汇总)
汇总在ABR上的接口配置:
-
沉默接口
-
加快收敛(减少计时器时间)
也是在接口上配置,修改hello时间时,死亡时间会按照4倍自动计算,邻居之间的hello时间(死亡时间)必须相同,否则无法建立邻居关系
-
缺省路由
首先自己要有缺省,不然不能给其他路由器发配缺省
强制下发缺省路由