OSPF : 开放式最短路径优先协议
使用范围:IGP
协议算法特点: 链路状态型路由协议,SPF算法
协议是否传递网络掩码:传递网络掩码
协议封装:基于IP协议封装,协议号为 89
一.OSPF 特点
1.OSPF 是一种典型的链路状态型路由协议
2.传递信息称作LSA,LSA 链路状态通告,包含路由信息和拓扑信息。
路由LSA:描述本路由器上接口的路由信息
拓扑LSA:描述路由器之间的连接状态
3.更新方式: 触发更新+30分钟的链路状态刷新
4.更新地址: 组播和单播更新,组播地址: 224.0.0.5(ALL SPF router) 224.0.0.6 (ALL DR router)
5.支持路由认证
6.支持手工汇总
7.支持区域划分
8.OSPF 比较消耗设备资源
二.OSPF 区域
区域划分的意义: 1.减少LSA的数量 2.减少LSA的传播范围
区域的划分是基于接口的(链路的)
区域的标记:使用了32个二进制 1.十进制 2.类似于IP地址 A.B.C.D
区域的分类:
骨干区域: 区域标记为0或0.0.0.0
非骨干区域:区域标记不等于0或0.0.0.0
区域设计原则: 向日葵型网络结构
1.OSPF网络中必须存在并唯一的骨干区域(单区域除外)
2.若存在非骨干区域,非骨干区域必须与骨干区域直接相连
OSPF中路由器的角色:
骨干路由器:
非骨干路由器:
ABR:区域边界路由器,能够产生3类LSA的路由器
ASBR:自治系统边界路由器,能够产生5类或7类LSA的路由器
三.OSPF 消息数据包
Hello DBD LSR LSU LSACK
hello包 -- 组播收发,用于邻居、邻接关系的发现、建立、周期保活
DBD -- 数据库描述包-- 本地LSDB(链路状态数据库)目录
LSR---链路状态请求 -- 用于询问对端本地未知的LSA信息
LSU-- 链路状态更新 -- 用于共享具体的每一条LSA信息
LSack 链路状态确认 -- 确认包
hello: 周期性发送,周期时间10s或30s(根据不同的网络类型默认10s或30s)
目的:建立并维持OSPF 邻居关系(邻居关系建立之后充当保活包功能)
DBD:数据库描述数据包
1.主从选举DBD: 比较双方的router-id ,router-id大的一方为主
(master ):小的一方为从
(slave):主用于控制LSA的交互
2.携带LSA头部信息的DBD
LSR: 链路状态请求,按照DBD中报文的未知LSA头部进行请求。
四.OSPF 邻居状态机制
Down、 init 、 attempt(过渡) 、 two-way 、 exstart 、exchange 、loading 、full
Down 一旦接收到对端的hello包进入下一个状态。
Init —初始化状态,一旦开始发送hello报文,进入初始化状态。
Two-way—双向通信状态(邻居状态),接收到包含自己router-id 的对方hello报文。
条件:点到点网络直接进入下一个状态机;MA网络进行DR/BDR选举,非DR/BDR之间不能进入下一个状态机。
邻居关系建立条件:
1.router-id 必须不同
2.area ID 相同
3.认证: 认证类型 (不认证=0 明文认证=1 MD5=2) 认证数据
4.hello时间,dead时间必须一致
5.特殊区域标识一致(E(外部路由位)=1 ; N(NSSA外部路由位)=0 P=0)
6.MA网络中,网络掩码必须一致
7.必须同时使用单播或组播更新
8.更新源检测(双方的IP地址必须在同一网段)
邻居状态下(two-way): MA的网络中会选举DR(指定路由器) BDR(备份指定路由器)
DR选举:
1.比较优先级 (范围:0-255,默认优先级为1 ,越大越优)
2.比较各自的router-id,越大越优
注意:
1.DR抢占是关闭的
2.DR是一个接口概念
3.优先级范围0-255,数字为0代表不参与选举
4.先选举BDR ,再升级为DR
主从选举:发生在exstart状态, 通过双方的router-id进行比较,router-id大的一方为主。 发送的主从选举DBD,DBD中包含了MTU值(默认思科直接启用,华为中默认不包含MTU,可以使用命令激活传递MTU值的功能,若双方的MTU值不值则卡在exstart 状态)。
Exstart—预启动状态,一旦开始发送主从DBD,则进入预启动状态。
Exchange —预交换,主从选举完成,则发送携带LSA头部信息的DBD,进入预交换状态,会发送LSR数据包。(但是没有LSU)。
Loading —加载状态,一旦发送LSU数据包,进入了加载状态,进行大量LSA的学习。
Full —邻接状态。双方LSA同步(双方LSA全部学习)
五、OSPF的工作过程
路由器上启动OSPF协议后,直连的邻居间,开始组播收发hello包,hello包中将存储本地已知邻居的RID,在双方RID均已知的情况下,建立邻居关系,生成邻居表;
邻居关系建立后,邻居间将进行条件匹配,匹配失败将停留为邻居关系,仅hello周期保活即可;匹配成功者间将进行邻接关系的建立;
邻接关系间的路由器,将使用DBD/LSR/LSU/LSack来获取本地未知的所有LSA信息;使得同一区域内所有路由器的数据库完全一致;---- 数据库表;
当本地数据库完成同步后,将数据库–>有向图–>树型结构图–>将本地到达所有未知网段的最短路径加载于本地路由表中;
收敛完成,仅hello包周期保活即可;正常每30min,邻接关系间再进行一次DBD的对比,若一致及正常;若不一致将马上进行同步;
结构突变:触发更新
1、断开网段 直连断开网段的设备,直接使用LSU告知邻接,需确认
2、新增网段 直连新增网段的设备,直接使用LSU告知邻接,需确认
3、无法沟通 hello time 对应的 dead time ;dead time 到时时,断开邻居关系,
去除基于该邻接共享的LSA计算所得路由;
六、OSPF的基础配置
[r1]ospf 1 router-id 1.1.1.1
启动时,定义进程号,仅具有本地意义;建议配置RID。
RID格式为ipv4地址,且需要全网唯一。
手工配置–环回接口上取最大数值的ip地址—物理接口上最大ip地址的数值。
宣告:1、区域划分 2、接口激活协议 3、传递接口信息
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[r1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
区域划分规则:
1、星型结构 -- 区域0为骨干 大于0为非骨干 非骨干区域必须直连骨干区域
2、ABR--区域边界路由器 两个区域间必须依靠ABR连接
启动配置完成后,邻居间使用hello包建立邻居关系,生成邻居表:
hello包 – 组播收发 周期发送
hello time 10s 或30s
dead time 为hello time 4倍
邻居间hello包中有一些参数必须完全一致,否则无法建立邻居关系;
Hello 和dead time 、区域ID、认证参数、末梢区域标记;另外在华为的设备中OSPF要求邻居间接口上配置的ip地址,其掩码长度必须一致。
[r2]display ospf peer 查看邻居表
[r2]display ospf peer brief 查看邻居关系简报
当邻居关系建立后,邻居间进行条件匹配,匹配失败,将保持为邻居关系;匹配成功,将建立为邻接关系,邻接关系将使用DBD/LSR/LSU/LSack来获取本地未知的所有LSA信息,同步生成数据库表—LSDB 链路状态数据库
[r2]display ospf lsdb 查看数据库表
数据库表同步完成后,邻接间的互动完成,仅hello包保活;之后本地基于本地的数据库表;
转换为有向图,再转换为树形结构,最终将本地到达所有未知网段的最短路径,加载于本地的路由表中:
<r1>display ip routing-table protocol ospf
默认ospf协议在华为设备中,优先级为10;度量为cost值
cost值=开销值= 参考带宽/接口带宽 默认参考带宽为100M
ospf协议将cost值之和最小定义为最佳路径,加载于本地路由表中
若接口带宽大于参考带宽,cost值为1,将可能导致选路不佳;可以修改默认的参考带宽
[r1]ospf 1
[r1-ospf-1]bandwidth-reference ?
INTEGER<1-2147483648> The reference bandwidth (Mbits/s)
[r1-ospf-1]bandwidth-reference 1000
切记:一旦修改,整个网络所有ospf路由器需要一致;
关于ospf的MTU问题:
在ospf协议的DBD包中将携带本地接口的MTU值,若两端一致可以正常建立邻居关系;若不一致将无法建立邻接关系;
默认华为设备不携带MTU;
[r1-ospf-1] int g0/0/1
[r1-GigabitEthernet0/0/1]ospf mtu-enable 两端设备均需开启
七、关于OSPF协议从邻居建立成为邻接的条件
根据网络类型决定
在点到点网络中,所有的邻居关系必然成为邻接关系
在MA网络中从邻居到邻接前将利用一个周期的dead time;进行DR/BDR选举;
先比较这些参选接口的优先级,默认1,取值范围0-255;越大越好,0标识不参选;
DR优先级最大,BDR次大;选举非抢占,故若希望干涉选举,需要重启ospf进程,或者将非DR/BDR修改为0;
[r2]interface GigabitEthernet 0/0/1
[r2-GigabitEthernet0/0/1]ospf dr-priority 3 修改优先级
重启进程
<r2>reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
非DR/BDR间为邻居关系。
八、OSPF的接口网络类型
OSPF协议在不同的网络类型,其工作的方式不同
[r1]display ospf interface GigabitEthernet 0/0/1
OSPF Process 1 with Router ID 1.1.1.1
Interfaces
Interface: 12.1.1.1 (GigabitEthernet0/0/1)
Cost: 1 State: DR Type: Broadcast MTU: 1500
网络类型 ospf接口网络类型
LoopBack P2P(LoopBack) 无hello 环回使用32位主机路由
点到点 (PPP/HDLC/GRE)P2P 10s hello time 不选DR/BDR
BMA (以太网) Broadcast 10s hello time 选DR/BDR
NBMA (MGRE) P2P
在tunnel接口上,ospf的默认工作方式为P2P,这种工作方式,只能建立一个邻居关系,故在MGRE环境中将无法正常工作;
修改接口的默认工作方式:
[r1]interface Tunnel 0/0/0
[r1-Tunnel0/0/0]ospf network-type ?
broadcast Specify OSPF broadcast network
nbma Specify OSPF NBMA network
p2mp Specify OSPF point-to-multipoint network
p2p Specify OSPF point-to-point network
切记:一个网段中所有接口的ospf工作方式必须一致;否则将无法建立邻居关系,或者因为不同工作方式的hello time一样,错误建邻,无法收敛;
当MGRE环境中,使用OSPF,且所有tunnel接口修改为broadcast工作方式后,必须基于拓扑接口考虑DR位置问题
MGRE可以构建不同的拓扑结构:
1、星型--中心到站点--轴辐状 中心站点为DR,取消BDR
2、全连网状 --- 不需要再关注DR
3、部分网状 --- 基于能够全网段内正常共享LSA来考虑最佳的DR位置