OSPF中文名称:开放式最短路径优先协议
一,特性
组播地址:224.0.0.5/224.0.06
算法:SPF算法(最短路径优先算法)把收集的信息组成一个完整的图形结构转化为树形结构,主要目的是因为树形结构不会出现环路。
优先级:10/150
链路状态型协议
二,OSPFv2与RIPv2的区别
相同: 1.RIPV2(224.0.0.9)和OSPFV2(224.0.0.5 224.0.0.6)都是以组播的形式发送信息的。 --- 224.0.0.X的组播地址 --- 本地链路组播 --- TTL设置为1
2.都被称为无类别的路由协议
3.都支持手工认证
4.都支持等开销负载均衡
不同: RIP只能应用在小型网络当中,OSPF可以适用于中大型网络当中 --- OSPF支持结构化部署 --- 区域划分 --- 目的 --- 区域内部传输拓扑信息,区域之间传递路由信息
三,OSPF结构化部署
区域边界路由器 --- ABR --- 同事属于两个区域,一个接口对应一个区域,并且有一个接口在区域0中
区域划分要求 --- 1.区域之间必须存在ARB设备
2.区域划分必须按照星型拓扑划分 --- 星型拓扑中间区域我们称为骨干区域
区域ID(Area-ID)---- 区分和标定OSPF网络中不同的区域 --- 由32位二进制构成 --- 1.点分十进制表示;2.直接使用十进制表示 --- 骨干区域的区域ID定义为区域0
四,计时器
Hello包 --- 周期发现,建立和保活另据关系
Hello时间 --- 10S(30s)
Dead time ---- 4倍的hello时间
五,多区域划分要求
1.OSPF要求域中的所有非骨干区域(区域ID不为0的区域)都必须与骨干区域直接相连
2.骨干区域不能被分割
假定没有“所有非骨干区域都必须连接骨干区域”这条规则
OSPF定义了ABR(区域边界路由器)来确保遵循这条规则。----只有真正的ARP设备才可以转发区域间路由信息。
- 至少连接两个区域
- 连接的区域中至少有一个接口连接区域0
- 在区域0中至少有一个活跃的邻居</span></span>
非骨干区域之间不允许直接相互发布区域间路由信息。----因为非骨干区域之间的边界设备不是ARP
假定没有“骨干区域不能被分割”
OSPF规定:从非骨干区域收到的路由信息,ABR能接收到不会使用这条路由信息(这条规则,被称为OSPF的区域水平分割机制)。----从一个区域学习到的路由信息,不能再传递回该区域。
总结:
1、伪ABR设备不允许转发区域间路由信息
2、对于真实ABR设备
能够将自己直连的非骨干区域的路由信息传递给骨干区域
能够将自己直连的骨干区域路由信息传递给非骨干区域
能够将自己从骨干区域学习到的非骨干区域路由信息传递给直连的非骨干区域。
六,OSPF路由器角色
内部路由器---IR
所有接口都接入同一个 OSPF 区域的路由器
区域边界路由器---ABR
R2、R3
骨干路由器----BR
接入 Area0 的路由器
自治系统边界路由器---ASBR
1.工作在 OSPF 自治系统边界的路由器,负责将 OSPF 域外的路由引入本域。
2.并不是所有运行了多种路由协议的 OSPF 路由器就一定是 ASBR ;必须执行了重发布操作 的路由器才会被称为ASBR
七,数据包
Hello包 --- 周期发现,建立和保活另据关系
Hello时间 ---- 10S(30s)
Dead time ---- 4倍的hello时间
配置方式----手工、自动
默认优选最大环回IP地址,没有就选最大物理IP地址
DBD包 --- 数据库描述报文 --- LSDB(链路状态数据库) --- LSA --- 链路状态通告
LSR包 --- 链路状态请求报文 --- 根据DBD包的对比,基于本地位置的LSA信息发
LSU包 ---链路状态更新报文 --- 真正携带LSA信息的数据包
LSACK包 --- 链路状态确认报文
八,OSPF 七种状态机
- down--- 关闭 ----- 一旦启动了 OSPF 协议,则发出 hello 报文进入下一个状态
- init---- 初始化 ---- 收到的 hello 报文中存在本地 RID 值,进入下一个状态
- 2-way---- 双向通讯 ---- 邻居关系建立的标志 。 --- 稳定态。
条件匹配:匹配成功则进入下一个状态,匹配失败则停留在邻居状态。
- exstart---- 预启动 ---- 使用未携带信息的 DBD 报文进行主从关系选举, RID 大的为主。
- exchange---- 准交换 ----- 使用携带目录信息的 DBD 报文进行目录共享
- loading---- 加载 ---- 邻居间使用 LSR/LSU/LSACK 报文来获取完整的 LSA 信息
- full--- 转发 ---- 拓扑交换完成后,根据算法计算出路由进入该状态,标志着 邻接关系的建立 。 --- 稳定态。
九,RID--路由的ID
DR、BDR、DRother--接口角色
满足条件:1.全网唯一 2.格式统一
获取方式:1.手工配置 2.自动生成
手工配置 --- 仅需要满足以上两个条件即可
自动生成 ---1.先看设备是否配置环回接口,如果存在选择换回接口的IP地址作为RID;如果存在多个换回接口,则选择其中数值最大的作为RID
2.如果不存在环回接口,则将与设备的物理接口作为IP地址作为RID,如果存在多个物理接口,则将选择其中数值最大的作为RID。
十,OSPF的状态机
down状态—-启动ospf之后,发出hello包之后进入到下一个状态
init(初始化)状态--收到Hello包中包含本地的RID,则进入到下一个状态
Two-way(双向通信)状态 --标志着邻居关系的建立(条件匹配)匹配失败,则将停留在邻居关系,仅使用Hello包进行周期保活;匹配成功则进入下一个状态
exstart(预启动)状态 --使用未携带数据的DBD包进行主从关系选
举,RID大的为主,为主可以优先进入下一个状态
exchange(准交换) 状态 --- 使用携带目录信息的DBD包进行目录共享
loading(加载)状态--基于对端发送的DBD包,使用LSR/LSU/LSACK三种数据包获取未知LSA信息。
FULL状态 --标志着邻接关系的建立。
稳定状态只有2-way和full两个状态。
十一,OSPF的工作过程
- 启动配置完成后,OSPF将向本地所有运行协议的接口以组播224.0.0.5的形式发送hello包;hello包中会携带自己本地的RID和本地已知的RID;之后,将实际到的邻居关系记录在本地的一张表中 --- 邻居表
- 邻居关系建立完成之后,将进行条件陪陪。失败,则停留在另据关系,仅使用hello包进行周期保活
- 匹配成功则开始建立邻接关系,首先使用未携带的DBD包进行主从关系选举,之后,使用携带信息的DBD包共享数据库目录信息。之后,完成本地使用LSR/LSU/LSACK三种数据包获取未知的LSA信息。之后,完成本地数据库的建立,生成数据库表 --- LSDB
- 最后,基于本地链路状态数据库LSA信息,生成有向图及最短路径树,之后,计算出本地到达未知网段的路由信息。将这些路由信息添加到 --- 路由表
- 收敛完成后,OSPF依然会每隔10s(30s)发送hello包进行周期保洁;每隔30min进行一次周期更新
十二,结构突变的情况
1.新增一个网段 --- 触发更新,第一时间将变更信息通过LSU包传递出去,需要ACK确认
2.断开一个网段 --- 触发更新,第一时间将变更信息通过LSU包传递出去,需要ACK确认
3.无法通信 --- dead time---4*hello time
十三,条件匹配
设备接口角色
指定路由器------DR
备份指定路由器-----BDR
其他路由器----DRother
角色之间的关系
DR与BDR----邻接
DR与DRother---邻接
BDR与DRother---邻接
DRother与DRother----邻居
OSPF条件匹配的情况
在以太网网络中-----必须进行条件匹配
在点到点网络中-----不需要进行条件匹配
选举规则
1.优先级,默认为1,0-255,越大越优
2.RID,越大越优
选举范围
一个广播域,进行一次条件匹配。
DR/BDR选举规则
- 先比较优先级,优先级最大的为DR,次大的为BDR优先级默认为1。
[r1-GigabitEthernet0/0/0]ospf dr-priority ? --- 修改接口优先级,为了方便人为干涉DR/BDR的选举
INTEGER<0-255> Router priority value
- 如果将一个接口的优先级修改为0,则代表该接口放弃DR/BDR的选举。
- 当优先级相同时,则比较RID。RID大的路由器对应接口为DR,次大的为BDR。
十四,OSPF的基本配置
1.启动OSPF协议
[r1]ospf 1 router-id 1.1.1.1 ---- 手工配置RID需要在进程启动时配置。
OSPF ProcessID只是本地有效,用来在本地区分不同的OSPF进程
虽然OSPF ProcessID本地有效,但是我们仍然建议,除非有特殊需求,否则全网使用一致的OSPF进程ID,这将方便网络管理和维护
2.创建区域
[r1-ospf-1]area 0
3.宣告
[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.0.0.0 0.0.0.255 ---- 范围宣告
4.查看OSPF的表
[r1]display ospf peer ---- 查看邻居表,显示的是详细的信息
[r1]display ospf peer brief ---- 查看邻居关系简表
[r1]display ospf lsdb ---- 查看数据库表
[r1]display ospf routing ---- 查看
[r1]display ospf lsdb router 2.2.2.2 ---- 展开一条LSA的方法
[r1]display ip routing-table protocol ospf ---- 查看ospf路由表
[r1]display this ---- 查看当前页面所有配置信息
注意:
一条OSPF路径的cost等于从目的地到本地路由器沿途的所有入接口cost的总和
十五,OSPF的报文格式
OSPF协议号---89
OSPF头部文件: 24字节
头部文件为24字节
版本---恒为2
类型----描述OSPF数据包类型
hello---1
dbd-----2
lsr------3
lsu----4
lsack----5
报文长度
路由器ID----RID
区域ID---发出该报文的接口所属区域的ID值。
校验和----完整数据包
验证类型
指示该数据报文使用的认证类型
不认证--0;简单认证---1;MD5认证---2。
验证数据
用于报文认证的内容
若认证类型为不认证,则该字段全为0;
注意:
当两个路由器去验证的时候,会先比较验证类型。当验证类型相同是才会比较验证数据。如果验证类型不同就不会去比较验证数据,更不会去建立邻居关系。
并且由于验证类型是在OSPF头部报文中,所以OSPF的五种报文都要去验证
十六,Hello报文
网络掩码
两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码。
如果一方在接口上收到的hello报文中,网络掩码字段与本地接口配置的掩码不同,则该路由器忽略该hello报文,此时邻居关系无法建立。
注意:只有在华为设备中会检查网络掩码信息。
Hello间隔
如果两台路由器的hello时间间隔不同,则不会建立邻居关系。
在Broadcast类型和P2P网络类型中hello时间间隔为10S;而在NBMA或P2MP网络类型中,Hello时间为30S。
可选项
有8个标记位,每一个标记位为1,则代表其符合OSPF的某种特性。
特殊区域标记。
路由器优先级
用于选举DR和BDR。
路由器失效时间
两台设备建立OSPF邻居需要确保死亡时间相同。
默认情况下是hello间隔的4倍。
若修改hello时间,则死亡时间随之改变;若修改死亡时间,则hello时间不变。
指定路由器---DR
该参数为网络中DR的接口IP地址。
若没有选举出DR,则使用0.0.0.0来占位
备份指定路由器---BDR
该参数为网络中DR的接口IP地址。
若没有选举出BDR,则使用0.0.0.0来占位
邻居
在直连链路上发现的有效邻居,此处填充的是邻居的RID值。
所有224.0.0.X格式的组播地址称为本地链路组播地址,目标IP是本地链路组播的数据包的TTL值被设定为1。所有本地链路组播都存在对应的组播MAC地址,01-00-5e-0后23位,后23位为组播IP地址的后23位。
224.0.0.5-->11100000.00000000.00000000.00000101
01-00-5e-00000000.00000000.00000101--->01-00-5e-00-00-05
OUI--->01-00-5e
注意
点到点网络中,不需要选举DR和BDR,因为就两台设备。两台设备不会有重复更新,所以不需要选举DR和BDR,也就节省了没有选举时间,加快收敛。
限制邻居关系建立的参数
子网掩码
R1修改掩码后,会立即将状态置为down,而R2会在40S死亡时间后进行状态切换。
原因在于:R1在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以会直接重置状态机。而R2则认为此时属于结构突变中的无法沟通。
hello时间
[r1-GigabitEthernet0/0/0]ospf timer hello 20
dead时间
[r1-GigabitEthernet0/0/0]ospf timer dead 80
认证
[r2-GigabitEthernet0/0/0]ospf authentication-mode simple plain 123456 ----接口认证
[r2-ospf-1-area-0.0.0.0]authentication-mode simple plain 123456 ----区域认证
可选项
与修改掩码信息结果相同。
十七,BDB包
作用
使用未携带数据的DBD报文进行主从关系选举
使用携带数据的DBD报文进行拓扑目录共享
使用未携带数据的DBD报文进行确认
接口最大传输单元----MTU
在华为AR系列路由器上,该参数值默认为0
该字段是用于进行OSPF的MTU检测,而华为默认不开启MTU检测机制
[r1-GigabitEthernet0/0/0]ospf mtu-enable ----开启OSPF的MTU检测机制
[r2-GigabitEthernet0/0/0]mtu ? ----修改MTU参数
<46-1600> MTU value
如果设备两端开启了OSPF的MTU检测机制,则进行MTU检测,若双方的MTU参数相同,则正常进行邻接关系建立。若不同,则双方卡在exstart状态
可选项---与Hello报文内容中的可选项字段一致。
I------主从关系选举
如果该为为1,则代表该数据报文是用于进行主从关系选举。且此时的数据包中不会携带真实的数据库目录信息。
M
若为1,则代表后续还存在DD报文
若为0,则代表后续没有DD报文
MS----代表是否为主设备
若为1,则代表本设备为Master设备
若为0,则代表本设备为Slave设备
DD序列号
用于确保DD报文传输的有序性和可靠性。
在DD报文交互的过程中,DD序列号被逐次加1。且DD序列号必须由Master路由器来决定,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。
隐形确认机制----通过对方发送的数据包中的DD序列号,起到确认的效果。
而主从关系选举就是为了完成隐形确认。
十八,LSR包
链路状态类型、链路状态ID、通告路由器三者被称为LSA的三元组信息。通过这三个参数可以唯一标识出一条LSA信息。
十九,LSU包
当收到LSR请求报文后,路由器会通过LSU报文将LSA的详细条目进行发送。
二十,LSAck包
二十一,OSPF的接口网络类型
网络类型
-
P2P
-
P2MP
-
-
MA
-
BMA
-
NBMA
-
OSPF的接口网络类型,实际上是说OSPF的接口在某种网络类型下的一种工作方式或特征。
网络类型 | OSPF接口工作方式--接口类型 |
BMA | Broadcast,可以建立多个邻居关系,需要进行DR和BDR的选举,hello 10S,dead 40S。 |
P2P | P2P,只能建立一个邻居关系,不需要进行DR和BDR选举,Hello 10S;dead 40S |
环回接口(虚拟接口) | 华为定义为P2P,但是实际上无数据转发。环回接口默认学习32位主机路由。不需要进行DR和BDR选举。hello 10S;dead 40S。 |
P2MP,可以建立多个邻居,不需要DR选举,hello 30S;dead 120S。会学习邻居的接口主机路由。 | |
NBMA | NBMA,可以建立多个邻居,需要DR选举,hello 30S;dead 120S。无法自动建立邻居关系。 |
Vlink | Vlink,只能建立一个邻居,不需要DR选举,Hello 10S;dead 40S。以单播形式发送hello报文 |
二十二,BMA(广播型多点接入网络)
广播型多路访问类型---BMA
[r3]display ospf interface GigabitEthernet 0/0/0 ---查看OSPF网络接口类型
OSPF在BMA类型的接口上通常以组播的方式发送hello报文、LSU及LSACK报文;以单播的形式发送DD报文和LSR报文
点到点类型---P2P
OSPF在网络类型为P2P的接口上以组播的方式发送所有数据报文。----不以单播形式发送的原因在于点到点网络可以不需要IP地址。
OSPF在点到点网络中不会选举DR和BDR。
开销值----在华为设备中,P2P网络的参考实际带宽默认为2.048(E1标准)
环回接口
[r1-LoopBack0]ospf network-type broadcast ---修改接口网络类型为broadcast
开销值恒定为0,这样的结果就是修改参考带宽不会影响到环回接口的开销值。
type----华为使用P2P来填充,而cisco使用loopback填充。
所有通过OSPF学习到的环回接口的路由掩码都是32位,因为该接口是一个模拟的接口,实际没有连接用户,所以并没有其他IP地址存在与该接口之下,只有一个可用IP。----如果使用其他掩码,可能会导致环路或者路由黑洞。
witing----该字段代表正在进行条件匹配,当该计时器超时后,接口会认为自己为DR设备,且将接口的状态切换为exstart状态。
二十三,MGRE环境下的OSPF
华为将tunnel接口的传输速率定为了64Kbps。
Hub节点此时属于P2P类型,只能建立一个邻居,无法建立多个邻居,故修改Tunnel接口的网络类型为Broadcast类型。
不同的网络类型,可以建立邻居关系,但是可能会造成不同的问题。故修改接口网络类型时,全网保持一致。
如果链路两端,一端需要选举DR,另一端不需要,可能会成功建立full状态,也可能有一个卡在exstart或2-way状态。
让分支节点放弃DR选举,在MGRE环境下,hub节点必须成为DR设备。否则网络路由信息无法学习全面。必须修改分支节点的接口优先级为0。
P2MP(点到多点类型)
进入接口配置,只能手工修改
[r7-Tunnel0/0/0]ospf network-type p2mp
Hello time 30s ,Dead time 120s;全网修改,因为Hello时间和死亡时间不同,不会建立邻居关系。
同样不需要选举DR和BDR
在P2MP环境下,设备会学习所有邻居的接口IP地址,形成主机路由(子网掩码为32)。
在P2MP环境下,只有hello报文是以组播形式发送,其他所有报文以单播形式发送数据。
二十四,非广播型多路访问类型----NBMA
开销值 48
需要选举DR和BDR
Hello time 30s Dead time 120s
在NBMA网络中,所有的OSPF路由器都需要使用peer命令单播指定邻居,该命令是双向的,两方都需要配置。
[r4-ospf-1]peer 10.1.1.1 ---- 配置邻居IP地址
在NBMA网络中,所有数据包以单播数据通讯。
二十五,Vlink---虚链路
vlink是专门为了解决OSPF不规则区域所诞生的技术,是一种虚拟的、逻辑的链路。
vlink必须找到一个真实的ABR设备建立虚拟链路。
注意:
- 配置位置在需要vlink穿越的区域中,且配置的是RID,而非邻居IP地址。
- 虚链路的配置条件:只能穿越一个区域。
- 它需要通过RID递归查找IP地址,即R2通过LSA找到R3,只有在相同区域内才能拿到拓扑信息;如果是多个区域,传递的是路由信息,拿不到拓扑信息,计算不到目标地址。所以只能穿越一个区域。找到之后如果有多个接口,就找开销值最小的一条。
- Vlink被视为骨干区域的一段延伸,即Vlink永远属于Area 0,但是要在被穿越的区域配置,并且这条隧道不穿数据。
二十六,Vlink的配置
进入区域1进行配置
[r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 ---- 写邻居的RID
[r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
[r3]display ospf vlink ---- 查看虚拟邻居
二十七,使用Vlink解决不规则区域的问题
-
资源消耗
-
虚链路只能穿越1个区域