定义
OSPF(Open Shortest Path First,开放最短路径优先)是IETF(Internet Engineering Task Force,互联网工程任务组)组织开发的一个基于链路状态的自治系统内部网关协议。目前针对IPv4协议使用的是OSPF Version 2。ospf直接工作在ip层之上,ip协议号89,ospf以组播方式发送协议包
链路状态路由协议使用SPF最短路经优先算法(shortest path first spf)计算和选择路由,这类路由协议只关心网络中链路或接口的状态(up down ip地址,掩码带宽,利用率和时延等),每个路由器将已知的链路状态信息向该区域的其他路由器通告,通过这种方式,网络上的每台路由器对网络结构都会有相同的认识,随后路由器以其为依据,使用spf算法计算和选择路由
注意:区域内部传递拓扑信息,区域间传递路由信息 --链路状态型协议的距离矢量特征
区域划分规则
-
非骨干区域必须与区域0直接相连
-
骨干区域不能被分割
ABR --区域边界路由器
1、至少连接两个区域
2、连接的区域中至少有一个接口连接区域0
3、在区域0中至少有一个活跃的邻居
注意:只有真正的ABR才可以转发路由信息
OSPF相关数据包
hello包
1、用来发现、建立并周期保活OSPF邻居关系,通过组播224.0.0.5发送。
2、10S发送一次用以确认邻居存在。
3、死亡时间:4倍hello时间
DBD --链路状态数据库描述包
该报文中携带的是路径信息的摘要。---避免重复更新,减少更新量的一种做法
LSR --链路状态请求包
请求未知的LSA信息
LSU --链路状态更新包
携带真实的LSA信息
LSAck --链路状态确认包
OSPF状态机
Down:初始状态,没有收到来自邻居的hello包
Attempt:只存在于NBMA网络中,当一台设备试图联系自己邻居时,没有收到回应报文时,就会将邻居状态设置为Attempt
Init:收到的hello报文中存在本地RID值,标识着自身邻居表创立完成
2-way:收到的hello包含自己的RID,建立邻居关系
条件匹配:匹配成功则进入下一个状态,匹配失败则停留在邻居状态。 --选举DR,BDR,决定了谁给谁传递拓扑信息。
Exstart:使用未携带信息的DBD报文进行主从关系选举,RID大的为主
Exchange:使用携带目录信息的DBD报文进行目录共享
Loading:邻居间使用LSR/LSU/LSACK报文来获取完整的LSA信息
Full:拓扑交换完成后,根据算法计算出路由进入该状态,标志着邻接关系的建立
条件匹配
选举DR和BDR
为什么选举DR和BDR
在一个共享的广播网络多台路由器建立OSPF,有可能会产生大量的OSPF邻居
在这些大量的OSPF邻居发送大量的OSPF报文,造成其他路器接收到大量的OSPF重复报文浪费带宽资源和设备CPU计算资源
注意:DR和BDR都是接口角色
条件匹配选举规则
-
优先级,0-255;选择优先级大的为DR设备,默认为1。若优先级为0则代表放弃选举
-
若优先级相同,则比较RID值,越大越优先。
注意:
选取范围---一个广播域
非抢占模式----重选则需要重启OSPF进程。
在一个MA网络中,可以没有BDR,但是必须存在DR
条件匹配的选举过程
-
DR、BDR的选举是通过Hello报文实现的,时间发生在2-way状态之后。
-
路由器将自己的接口的DR优先级填写在hello报文的“DR优先级字段”。
-
华为数通产品的接口DR优先级默认1,该参数值可以通过
-
当接口激活OSPF后,设备首先会检查网络上是否已经存在DR,如果存在则接收已经存在的DR设备。否则优先级最大的设备成为DR,若优先级相同,则拥有最大RID的路由器成为DR设备。
-
BDR选举过程与DR相同,但是是在DR选举之后进行
[Huawei-GigabitEthernet0/0/0]ospf dr-priority ? --修改优先级
INTEGER<0-255> Router priority value
DR优先级为0则代表该接口放弃选举DR和BDR。
OSPF工作过程
-
启动OSPF配置后,OSPF向本地所有运行了OSPF协议的接口以组播224.0.0.5发出hello报文;hello报文中携带了本地的RID参数以及本地已知的邻居RID值。
-
邻居的RID获取方式:通过接收其他邻居的hello报文来获取本地邻居
-
建立邻居关系,并生成邻居表。
-
-
邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系,即2-way状态,仅使用hello报文保活。该状态为稳定态。
-
匹配成功的邻居开始建立邻接关系。
-
首先使用未携带数据的DBD报文进行主从关系选举,之后使用携带信息的DBD报文来共享数据库目录;
-
然后本地通过对方共享的目录信息与本地数据库进行对比,通过使用LSR报文请求未知的LSA信息。
-
对端使用LSU报文回复完整LSA信息
-
本端使用LSAck报文确认回复。
-
-
当本地接收到所有的未知LSA信息后,将信息存放在LSDB中。
-
之后基于本地数据库生成有向图和最短路径树。
-
根据最短路径树计算本地到达拓扑中所有未知网段的最短路径,并将其加入到OSPF路由表中。
-
从OSPF路由表中选择最优路由加载入本地全局路由表。
-
-
收敛完成后,hello报文周期保活。每30min进行一次周期链路刷新。
结构突变
-
新增网段-----直接使用LSU报文告知邻居,邻居使用ACK进行确认。
-
断开网段-----直接使用LSU报文告知邻居,邻居使用ACK进行确认。
-
无法沟通-----dead time----4*hello time,状态为down,删除信息。
基础配置
[r1]ospf 1 router-id 1.1.1.1 --启动ospf,定制进程号和RID
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0 --精准宣告,宣告接口,为了激活接口
[r1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 --范围宣告,
[r1]dispaly ospf peer (brief) --查看邻居表
[r1]dispaly ospf int g 0/0/0 --查看接口信息
[r1-ospf-1]bandwidth-reference 1000 --修改默认带宽为1000M,修改时需要整个网络的默认带宽一致。cost=默认带宽(1000)/实际带宽;
OSPF报文格式
OSPF报文头部
固定24字节
-
版本---恒为2
-
类型----描述OSPF数据包类型
-
hello---1
-
dbd-----2
-
lsr------3
-
lsu----4
-
lsack----5
-
-
报文长度
-
路由器ID----RID
-
区域ID---发出该报文的接口所属区域的ID值。
-
校验和----完整数据包
-
验证类型
-
指示该数据报文使用的认证类型
-
不认证--0;简单认证---1;MD5认证---2。
-
-
验证数据
-
用于报文认证的内容
-
若认证类型为不认证,则该字段全为0;
-
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值。
-
限制邻居关系建立的参数:
1、子网掩码 2、hello时间 3、dead时间 4、认证类型 5、可选项
DBD报文
-
使用未携带数据的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</span>
-
如果设备两端开启了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包
LSAck包
用于完成显示确认机制
OSPF的接口网络类型
OSPF的接口网络类型,实际上是说OSPF的接口在某种网络类型下的一种工作方式或特征。
广播型多路访问类型---BMA
OSPF在BMA类型的接口上通常以组播的方式发送hello报文、LSU及LSACK报文;以单播的形式发送DD报文和LSR报文。
点到点类型---P2P
OSPF在网络类型为P2P的接口上以组播的方式发送所有数据报文。----不以单播形式发送的原因在于点到点网络可以不需要IP地址。
OSPF在点到点网络中不会选举DR和BDR。
开销值----在华为设备中,P2P网络的参考实际带宽默认为2.048(E1标准)
环回接口
开销值恒定为0,这样的结果就是修改参考带宽不会影响到环回接口的开销值。
type----华为使用P2P来填充,而cisco使用loopback填充。
所有通过OSPF学习到的环回接口的路由掩码都是32位,因为该接口是一个模拟的接口,实际没有连接用户,所以并没有其他IP地址存在与该接口之下,只有一个可用IP。----如果使用其他掩码,可能会导致环路或者路由黑洞。
witing----该字段代表正在进行条件匹配,当该计时器超时后,接口会认为自己为DR设备,且将接口的状态切换为exstart状态。
点到多点类型---P2MP
只能手工修改。
[r7-Tunnel0/0/0]ospf network-type p2mp
在P2MP环境下,设备会学习所有邻居的接口IP地址,形成主机路由。
在P2MP环境下,只有hello报文是以组播形式发送,其他所有报文以单播形式发送数据。
Vlink---虚链路
vlink是专门为了解决OSPF不规则区域所诞生的技术,是一种虚拟的、逻辑的链路。
vlink必须找到一个真实的ABR设备建立虚拟链路。
[r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3
[r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
注意:配置位置在需要vlink穿越的区域中,且配置的是RID,而非邻居IP地址。
虚链路的配置条件---->只能穿越一个区域。
总结
网络类型 | OSPF接口工作方式--接口类型 |
---|---|
BMA | Type:Broadcast --可以建立多个邻居关系,需要进行DR和BDR的选举,hello 10S,dead 40S。 |
P2P | Type:P2P --只能建立一个邻居关系,不需要进行DR和BDR选举,Hello 10S;dead 40S |
环回接口(虚拟接口) | Type:华为定义为P2P,但是实际上无数据转发 --环回接口默认学习32位主机路由。不需要进行DR和BDR选举。hello 10S;dead 40S。 |
Type:P2MP --可以建立多个邻居,不需要DR选举,hello 30S;dead 120S。会学习邻居的接口主机路由。 | |
NBMA | Type:NBMA --可以建立多个邻居,需要DR选举,hello 30S;dead 120S。无法自动建立邻居关系。 |
Vlink | Type:Vlink --只能建立一个邻居,不需要DR选举,Hello 10S;dead 40S。以单播形式发送hello报文 |