OSPF
七种状态机
down---
关闭状态
----
一旦启动了
OSPF
协议,则发出
hello
包,并进入下一状态
init----
初始化状态
----
收到的
hello
包中,存在自己的
RID
值,则进入下一状态
2-way----
双向通讯状态
-----
邻居关系建立的标志
。
条件匹配:匹配成功则进入下一阶段,不成功则停留在
2-way
exstart----
预启动状态
----
使用未携带信息的
DBD
包进行主从关系选举,
RID
大的为主
exchange-----
准交换状态
----
使用携带目录信息的
DBD
报文进行目录共享
loading------
加载状态
-----
邻居间使用
LSR/LSU/LSAck
三种报文来获取完整的
TOPO
信息
full----
转发状态
----
修成正果
------
标志邻接关系的建
条件匹配
设备接口名称
DR---
指定路由器
BDR---
备份指定路由器
DRother----
其他路由器
OSPF
称为邻接关系的条件
点到点
----
不用选举
DR
和
BDR----
直接开始建立邻接关系(加快收敛的方法)
MA
网络
----
在一个网络中,不限制节点数(会选举
DR
和
BDR
)
选举规则
接口优先级
----->0-255---->
优先级越大,为
DR
,次一级为
BDR
(华为默认为
1
)
RID----
越大越优先
选举范围----
一个广播进行一次条件匹配
角色之间的关系
在一个广播域中,所有的设备保持邻接关系,将会出现大量的重复更新,所以需要进行DR/BDR的选举,所有非DR/BDR的设备之间仅需保持邻居关系即可
DR
和
DRother---->
邻接关系
DR
和
BDR---->
邻接关系
BDR
和
DRother---->
邻接关系
DRother
和
DRother---->
邻居关系
1.一个广播域中,在 DR和BDR具备情况下,至少需要四台路由器才能看到邻居关系
2.指定路由器是针对一个广播域中选取的,所以其实是一个接口概念
非抢占性选举模式
选举过程
1. DR
、
BDR
的选举是通过
Hello
报文来实现的,选举过程发生在
2-way
状态之后
2.
路由器将自己的接口的
DR
优先级填写
hello
报文中的
“DR
优先级
”
字段
3.
在接口视图下可以修改
DR
优先级(若
DR
优先级修改为
0
,则代表不具备
DR
和
BDR
的选举资格)
4.
当路由器接口激活
OSPF
后,首先检查网络上是否已经存在
DR
设备,如果存在则接收
DR
角色。 若不
存在,则拥有最高
DR
优先级的设备称为
DR
(
RID
)
5. BDR
的选举过程和
DR
选举过程相同,但是是在
DR
选举成功之后。
DR
设备使用组播
224.0.0.5
想该
MA
网络发送消息。
而
DR
和
BDR
使用
224.0.0.6
监听该
MA
网络的消息。
DROther
使用
224.0.06
发送自己的
LSU
报文
NBMA
网络类型中存在。
在
NBMA
网络类型下,如果需要启动
OSPF
协议,需要手工指定邻居,否则不会发送
hello
报文。
若不发送
hello
报文,则邻居状态处于
attempt
状态
1.启动OSFP
配置完成后,
OSPF
将向本地所有运行
OSPF
协议的接口组播
224.0.0.5
发送
hello
报文; hello报文中携带有本地的
RID
以及本地已知的邻居
RID
;之后生成
邻居表。
2.邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系;仅hello报文保活
3.匹配成功的邻居将开始建立邻接关系。
4.首先使用未携带数据的DBD
报文来进行主从关系选举;之后使用携带数据的
DBD
报文来共享数据库 目录;之后本地使用LSR/LSU/LSACK
报文来获取未知的
LSA信息;
5.完成本地数据库的建立---
生成
数据库表。
6.之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路
7.径,并将其添加到路由表中。
收敛完成,hello报文周期保活。每30min进行一次周期更新
结构突变
1.
新增网段
----
直接在邻接关系的接口使用
LSU
进行更新,将内容告诉于邻居。并需要邻居的
ACK
确 认。
2.
断开网段
----
直接在邻接关系的接口使用
LSU
进行更新,将内容告诉于邻居。并需要邻居的
ACK
确 认。
3.
无法沟通
----dead time----
四倍的
hello
时间。
1.
启动
OSPF
进程
[r1]ospf 1 router-id 1.1.1.1 //
进程号仅具备本地意义,手工配置
RID
方法
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 //
宣告网段
宣告使用反掩码形式
OSPF宣告时用反掩码,达到精准宣告的目的,就是宣告具体的接口IP地址
去
激活指定的接口,也可宣告直连的网段,激活接口
32位二进制,使用点分十进制表示。连续的0+
连续的
1
;并且
0
代表不可变;
1
代表可变
华为体系中,优先级为
10
;
OSPF
的
COST====
参考带宽(
100Mbps
)
/
实际带宽
[r1-ospf-1]bandwidth-reference 1000 //
修改参考带宽
-----
所有设备均需修改
一条
OSPF
路径的
Cost
等于从目的地到本地路由器沿途的所有设备的
入接口
Cost
值的总和。
OSPF
报文格式
OSPF
报文头
版本(
Version
)
对于
OSPFv2
而言,该字段值恒为
2
类型(
Type
)
描述
OSPF
数据包的类型
Hello------1
DBD-------2
LSR--------3
LSU--------4
LSACK----5
报文长度(
Packet Length
)
整个
OSPF
报文的长度
-----
单位字节
路由器
ID
发出该报文的路由器的
RID
值
区域
ID
发出该报文的接口所属于的区域的
ID
值
校验和
验证
OSPF
整体数据报文的有效性
验证类型
指示该报文使用的认证类型
不认证
---0
;简单认证
----1
;
MD5
认证
----2
;
认证数据
用于报文认证所对比的内容
若认证类型为不认证,则该字段全部用
0
填充
OSPF
的认证功能在存在于所有的数据交互过程中,对于任何一种数据报文,都需要进行认证。
在认证的过程中,需要对比两个字段,首先对比认证类型字段。
若相同,才会对比认证数据字段。
网络掩码(Network Mask)
该字段填充的是发送该报文的网络掩码
两台
OSPF
路由器如果通过
以太网接口
直连,那么双方的直连接口必须配置相同的网络掩码。
(点到点网络不需要对比该参数)
注意:
OSPF
建立邻居关系需要对比子网掩码信息是华为独有,别的厂商没有这个要求
。
Hello间隔
两台直连路由器需要确保直连接口的
Hello
时间间隔相同,否则邻居关系无法建立
。
缺省情况下,
P2P
和
BMA
类型的下,为
10S
;
P2MP
和
NBMA
为
30S
。
可选项(Options)
该字段一共
8bit
,每个比特位都用于指示该路由器的某个特定的
OSPF
特性。
而
OSPF
邻居关系建立过程中,该字段中的某些比特位将会被检查,可能影响
OSPF
邻居关系 建 立。(特殊区域的标记)
路由器优先级
[r2-GigabitEthernet0/0/0]ospf dr-priority ? //
修改
OSPF
接口的
DR
优先级
INTEGER<0-255> Router priority value
路由器失效时间
两台直连路由器要建立
OSPF
邻居关系,需要保证双方接口的
dead time
时间相同,否则邻居
关系无法正常建立。
缺省时间为
hello
的
4
倍。
指定路由器
网络中
DR
设备的接口
IP
地址。
若没有
DR
或
DR
没有选举出来,则填充
0.0.0.0
备份指定路
网络
BDR
设备的接口
IP
地址
若没有
BDR
或未选举结束,则填充
0.0.0.0
邻居
在直连链路上发现的有效邻居,此处填充的是邻居的
RID
值,如果发现多个邻居,则包含多个
邻居字段。
所有
224.0.0.X
格式的组播地址称为本地链路组播,目的
IP
地址是本地链路组播的数据包中的
TTL
值被
设定为
1
。所有的本地链路组播都会存在对应的组播
MAC
地址,
01-00-5e-
后
24
位(组播
IP
地址的后
24
位)
子网掩码
在
R2
上修改网络掩码后,
R2
会将与
R3
的状态立即修改为
Down
状态。而
R3
会在
40S
死亡时间之后进行状态切换。
原因在于,
R2
在修改
IP
地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以重置状态机。
而
R3
则认为是无法沟通。故会等待死亡时间超时后才切换状态。
并且,该情况,在
R3
等待
40S
周期内,还是可以向
R2
转发数据,
R2
可以接收到该数据包,但无法回复