OSPF
基础
IETE---
国际互联网工程任务组
----RFC2328
OSPFv2
和
RIPv2
对比
相同点
1
、两者都是无类别路由协议
---
传播时携带真实掩码
2
、两者的更新方式相同
----
组播
RIPv2----224.0.0.9
OSPFv2----224.0.0.5\224.0.0.6
3
、两者均支持等开销负载均衡
不同点
RIPv2
只能应用在小型网络中,
OSPFv2
可以应用在中大型网络环境的
OSPF
区域划分
----
结构化部署
OSPF
域(
Domain
)
---
将一系列的
OSPF
路由器组成的网络称为
OSPF
域。

区域
ID
:
32bit
OSPF
多区域划分要求
:
1
、
OSPF
要求域中所有的非骨干区域(区域
ID
不为
0
的区域)都必须与
Area0
相连。
2
、骨干区域不能被分割
OSPF
区域结构部署规则的必要性
假定没有
“
所有非骨干区域都必须与骨干区域相连
”
这条规则
----“
远离骨干的非骨干

定义了
ABR
(区域边界路由器)设备
----
确保所有人遵循上述规则
1
、至少连接两个区域
2
、连接的区域中至少有一个是区域
0
3
、在区域
0
中至少有一个活跃的邻居
作用:用于传递区域间路由
为了避免区域间的路由形成环路,
非骨干区域之间不允许直接相互发布区域间路由
。
假定没有
“
骨干区域不能被分割
”
这条规则
----
不连续骨干区域
OSPF
规定:
从非骨干区域收到的路由信息,
ABR
能接收,但不会使用这条路由信息(
OSPF
水平分割
原则)
。
OSPF
有如下规则:
1
、对于伪
ABR
设备不允许转发区域间路由信息。
2
、对于真实
ABR
而言
能够将自己直连的非骨干区域的区域内路由信息传递给骨干区域。
能够将自己直连的骨干区域的区域内路由信息传递给非骨干区域。
能够将自己从骨干区域学习到的区域间路由信息传递给费骨干区域。
OSPF
路由器角色
内部路由器(
IR
)
所有接口都接入同一个区域的路由器
区域边界路由器(
ABR
)
骨干路由器(
BR
)
接入
Area0
的路由器,包括
ABR
,但不包括
ASBR
ASBR
(
AS
边界路由器)
工作在
OSPF
自治系统边界的路由器
OSPF
有如下规则:
1
、对于伪
ABR
设备不允许转发区域间路由信息。
2
、对于真实
ABR
而言
能够将自己直连的非骨干区域的区域内路由信息传递给骨干区域。
能够将自己直连的骨干区域的区域内路由信息传递给非骨干区域。
能够将自己从骨干区域学习到的区域间路由信息传递给费骨干区域。
并不是同时运行多种路由协议的
OSPF
路由器就一定是
ASBR
,
ASBR
一定是将外部路由引入到
OSPF
域的设备
。
OSPF
数据包
Hello
用来周期发现、建立、保活
OSPF
邻居关系
,通过组播
224.0.0.5
发送。
10S
发送一次来确认邻居的存在
hold-time----
四倍的
hello
时间
Router-ID
(
RID
)
全域唯一,标识路由器身份
用
IP
地址形式表示(
32bit
,点分十进制)
配置方法
手工配置
自动配置
默认最大环回
IP
地址,若没有最大环回则选择最大物理
IP
地址(路由器的
RID
选
择)。
[r1]display router id //
查看路由器全局
ID
值
注意:
启动
OSPF
进程前,必须要有接口
IP
地址,若存在
IP
地址,则在第一次启动
OSPF
进程
时,会选取第一个配置的
IP
地址为
RID
。
但是,若删除第一个配置的
IP
地址后,则恢复为上述规则。
在华为设备中,若没有接口
IP
地址,则
OSPF
启动后,
RID
为
0.0.0.0
在思科设备中,若没有接口
IP
地址,则
OSPF
启动失败
无论采用手工配置还是自动选择,一旦
OSPF
进程启动,
RID
被确定,则无法变化,必须重启
进程才能生效。
reset ospf process
重启所有
OSPF
进程
DBD
数据库描述报文
该报文携带的是
路径信息的摘要
(为了减少更新量,并不会直接给邻居发送
TOPO
信息,而是将
TOPO
信息的目录发送给邻居)
LSR
链路状态请求报文
基于未知的
LSA
(链路状态通告)信息进行查询。
LSU
链路状态更新报文
携带真正的
LSA
信息的数据包
LSAck
链路状态确认报文
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
和
DRother---->
邻接关系
DR
和
BDR---->
邻接关系
BDR
和
DRother---->
邻接关系
DRother
和
DRother---->
邻居关系
非抢占性选举模式
选举过程
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
状态。
OSPF
工作状态

启动
OSFP
配置完成后,
OSPF
将向本地所有运行
OSPF
协议的接口组播
224.0.0.5
发送
hello
报文;
hello
报文中携带有本地的
RID
以及本地已知的邻居
RID
;之后生成
邻居表
。
邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系;仅
hello
报文保活
匹配成功的邻居将
开始建立邻接关系
。
首先使用未携带数据的
DBD
报文来进行主从关系选举;之后使用携带数据的
DBD
报文来共享数据库
目录;之后本地使用
LSR/LSU/LSACK
报文来获取未知的
LSA
信息;
完成本地数据库的建立
---
生成
数据库表
。
之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路
径,并将其添加到
路由表
中。
收敛完成,
hello
报文周期保活。每
30min
进行一次周期更新。
结构突变
1.
新增网段
----
直接在邻接关系的接口使用
LSU
进行更新,将内容告诉于邻居。并需要邻居的
ACK
确
认。
2.
断开网段
----
直接在邻接关系的接口使用
LSU
进行更新,将内容告诉于邻居。并需要邻居的
ACK
确
认。
3.
无法沟通
----dead time----
四倍的
hello
时间。
OSPF
基础配置
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 //
宣告网段
宣告使用反掩码形式
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
备份指定路由器
[r2-GigabitEthernet0/0/0]ospf dr-priority ? //
修改
OSPF
接口的
DR
优先级
INTEGER<0-255> Router priority value
网络
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
可以接收到该数据包,但无法回复。