OSPF 路由协议
前言
开放式最短路径优先OSPF(Open Shortest Path First) 协议是IETF定义的一种基于链路状态的内部网关协议。
RIP是一种基于距离矢量算法的路由协议,存在收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代
产生的技术背景
- 网络规模扩大
- 网络可靠性要求提高
- 网络异构化趋势加剧
- 原先的RIP路由协议的局限性无法满足需求
OSPF概述
Open Shortest Path First 开放式最短路径优先
-
大型网络上使用最为广泛的IGP协议(IGP 路由网关协议)
-
链路状态路由协议
-
使用组播(224.0.0.5 和 224.0.0.6)
-
收敛较快
-
以开销(Cost) 作为度量值
-
采用的SPF算法可以有效避免环路
-
触发式更新(以较低频率(每30分钟)发送定期更新,被称为链路状态泛洪)
-
区域的设计使得OSPF能够支持更大规模的网络
-
不支持自动汇总,支持手动汇总
- 路由表按照最长掩码匹配,路由表的规模影响路由器的效率、消耗资源等等,因此尽量精简路由表
OSPF区域概述
区域 ( Area) :
- 为了适应大型的网络,OSPF在AS内划分多个区域
- 区域是以接口为单位来划分的
- 每个OSPF路由器只维护所在区域的完整链路状态信息
区域 ID ( Area ID):
-
区域ID大小: 0 ~ 2^32 次方
-
可以表示成一个十进制的数字,如:1
-
也可以表示成一个IP,如:1.1.1.1
OSPF的区域类型:
- 骨干区域
- Area 0 ,核心区域
- 所有其它非骨干区域必须和骨干区域直接相连也叫传输区域(负责在不同的非骨干区域之间分发路由信息)
- 非骨干区域
- 非 Area 0 也称为常规区域
OSPF的路由器类型
- IR
- Internal Router, 内部路由器,所有接口都属于同一区域
- BR
- Backbone Router, 骨干路由器至少有一个接口属于骨干区域
- ABR
- Area Border Router, 区域边界路由
- 连接一个或者多个区域到骨干区域,至少有一个接口属于骨干区域
- ASBR
- Autonomous System Border Router, 自治系统边界路由器
- 把其它路由协议学习到的路由以注入的方式到OSPF进程中
- PS
- 一台路由器可以同时属于多种类型
★★★OSPF核心工作流程★★★
- 发现并建立邻居
- 传播LSA(区别于距离矢量路由表更新)
- Link State Adverisement, 链路状态宣告
- 链路:路由器接口
- 状态:描述接口信息(地址、掩码、开销、网络类型、邻居关系等)
- 将LSA泛洪到区域中的所有OSPF路由器中,而不仅是直连的路由器
- 收到LSA创建LSDB(链路状态数据库)
- 使用SPF算法计算到每个目标网络的最短距离,并将其置于路由表中
OSPF三张表
Roter ID
-
运行OSPF协议前,必须选取一个RID
-
用来唯一标识一台OSPF路由器
-
RID可以手动配置,也可以自动生成
-
RID 选取顺序原则:
-
1.★★手动配置(推荐)
2.活动回环接口上选取IP地址最高的
3.活动物理接口上选取IP地址最高的
RID选举具有非抢占性,除非重启OSPF进程
-
OSPF数据包结构和类型:
- OSPF的头部 Version : 2 (ipv4)
- 消息类型
-
Hello 包:建立和维护邻居关系
-
当在区域里宣告网络后,路由器就会找到相同区域的邻居DD包
-
LS Request 请求LSA
-
LS Udate 发送LSA,这个包中才包含LSA(包含邻居间交换发送的网段)
当双方建立好关系并交换现有网络稳定下来后,如果某一方有新的网络被宣告,那一方就会发送LSU 的包 以及收到的那方会回复一个LS ACK 确认包 (触发式更新)
当我宣告了11.0.0.0 24 的网段 并进入接口g0/0/1 设置了ip 11.0.0.1 24(宣告的网络必须真实存在) 就会触发更新
当你宣告后的网络,如果都down掉了,同样会触发更新发送LSU包
网络稳定后,只会有 LSU 和 LS ACK包 ,当你重置OSPF进程时,重新走流程。
OSPF状态机制
OSPF 建立条件
- Hello报文用来发现和维持OSPF邻居关系
- RID唯一
- Hello/Dead时间间隔一致
- 区域ID一致
- 认证(如果启用)一致
- 链路MTU大小一致(默认思科开启)
- 子网掩码一致(以太网环境)
- 网络地址一致
- 末梢区域设置一致
OSPF网络类型:基于接口
DR和BDR
基于接口网络类型BMA(广播多路访问)和NBMA(非广播多路访问),为了减少邻接关系的数量,从而减少数据包交换次数,节省宽带,降低对路由器处理能力的压力,选举DR和BDR。
如果没有DR和BDR,一个区域的设备太多的话,每台设备都向发送数据,那么会极大的消耗网络资源。
DR和BDR注意选举的是路由器的接口,不是整个路由器,因为在有多个域同时存在时,一台路由器的接口有可能都会是DR或BDR,或者是DRothers。
- DR: Designed Router ,指定路由器,类似班长
- BDR:Backup DR, 备用DR,但是会跟DR一起工作且内容相同
- DRothers: 类似普通学生
关系:DR、BDR、DRothers 之间保持邻接关系(Full)
DRothers之间保持邻居关系(Two-Way)
地址: 224.0.0.6 向DR和BDR发送链路状态更新
224.0.0.5 向所有OSPF路由器发送
选举规则:
- 首先比较Hello报文中携带的优先级
- 优先级范围0~255,默认=1
- 优先级最高的被选举为DR,优先级次高的选举为BDR
- 优先级为0的不参与选举
- 优先级一致的情况下(默认都是1),比较RID(router-ID) , 越大越优先
- 选举具有非抢占性。如果优先级默认,router-id小的已经被选举为DR或BDR,后来加入的路由器也不能当“班长或副班长(BR或BDR)“。
Dother只向班长发送LSU, DR、BDR向全班(域)发送
- DR向组播地址224.0.5发送更新以便通知其他路由器
- 所有的OSPF路由器监听224.0.0.5这一组播地址,以便能收到
案例
初始配置如上:
此时 area 0 的DR 是AR1, BDR是AR2, 在AR1上宣告一个新的网络
int l 0
ip add 2.2.2.2 32
ospf 1
area 0
net 2.2.2.2 0.0.0.0
DR 触发更新LSU 向组播地址 224.0.0.5 发送(告诉副班长以及全班)
BDR 想组播地址224.0.0.5 发送(告诉班长和同学他收到了)
Dothers 向组播地址 224.0.0.6 发送ACK(报告班长、副班长收到)
再看我们在BDR AR2 上设置 looback 3 地址,并进行宣告:
int lo 3
ip add 3.3.3.3 32
q
ospf 1
area 0
network 3.3.3.3 0.0.0.0
抓包:BDR通过组播 224.0.0.5发给“全班”, DR用224.0.0.5回复,Dothers用组播224.0.0.6回复
同样的方式在DR上进行地址为4.4.4.4
OSPF度量值:Cost 开销
!!注意 看图的时候要把路由器上的设置的IP当做路由器出去的一个接口,不要认为它在路由器里面。
-
在每一个运行的OSPF的接口上,都维护着一个接口Cost
-
Cost = 10^8 / BW(bps) = 100 Mbps /BW = 接口带宽参考值 / 接口带宽
Cost 最小值为1
-
到一个目标网络的度量值=
- 从源到目标所以出站接口的Cost值累加(数据方向)
- 从源到本路由器沿途所有入站接口的Cost累加(路由方向)
-
华为的回环口的开销默认是0(除了回环口外,其它的根据公式来,最小为1),思科默认是1.
我们看AR1上的回环1口默认开销是0,
查看AR3到1.1.1.1网络的总开销是1.