链路状态路由协议 - OSPF - HCIA
前言
OSPF概述
- 大中型网络上使用最为广泛的IGP协议
- 链路状态路由协议
- 为无类别协议
- 使用组播(224.0.0.5和224.0.0.6)
- 收敛较快
- 以开销(Cost)作为度量值
- 每一个激活OSPF的接口都有一个cost值。OSPF接口cost=100M/接口带宽,其中100M为OSPF的参考带宽(reference-bandwidth)。
- 一条OSPF路由的cost由该路由从路由的起源一路到达本地的所有入接口cost值的总和。
- 采用SPF算法可以有效的避免环路
- 触发式更新(以较低的频率(每30分钟)发送定期更新,被称为链路状态泛洪)
- 区域的设置使得OSPF能够支持更大规模的网络
- 通过LSA的形式发布路由
- 不支持自动汇总,支持手动汇总
- 无环路
- 扩展性好
- 支持认证
OSPF区域
概述
AS 是自治区域系统
区域类型
在不同区域的接口上,使用 network [网络地址] 命令来告诉路由器这个接口属于那个区域
OSPF路由类型
ASBR 是连接不同的路由协议的路由器,接口两边给不是同一种协议,使用引入的方式导入路由信息
OSPF核心工作流程
-
发现并建立邻居 -
传播LSA (区别于距离矢量的路由表更新) a. Link Statr Advertisement,链路状态宣告(路况信息) b. 链路:路由器接口 c. 状态:描述接口信息(地址、掩码、开销、网络类型、邻居关系等) -
将LSA泛洪到区域中的所有的OSPF路由器,而不仅是直连的路由器 -
收集LSA创建LSDB(链路状态数据库、地图) -
使用SPF算法 计算到每个目标网络的最短距离,并将其置于路由表中
发现邻居
泛洪建立数据库
根据信息计算最短路径
生成路由表信息
具体流程图
建立的三张表
Router ID
- 运行OSPF协议前,必须选取一个RID
- 用来
唯一标识 一台OSPF路由器 - RID可以手动配置,也可以自动生成
如果 Router ID 没有选取,则默认为 0.0.0.0,没有启动成功
重新配置ospf Routre ID 之后需要重新启动ospf进程
Router ID 配置规则
-
如果要运行OSPF协议,必须存在Router ID。Router ID是一个32比特无符号整数,是一台路由器在自治系统中的唯一标识。 Router ID的设定有两种方式:
在路由器运行了OSPF并确定了Router ID后,如果该Router ID对应的接口Down或者接口消失(例如执行了undo interface loopback loopback-number)或者出现更大的IP地址,OSPF将仍然保持原Router ID。只有重新配置系统的Router ID或者OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。
OSPF数据包结构和类型
- ospf协议封装在IP协议之上,IP的协议号为89
Hello 数据包包头
-
Version 版本 -
Message Type 数据包类型 -
Packet Length 长度 -
Source OSPF Router 源IP -
Area ID 地区号 -
Auth Type Auth Data 身份验证
-
Network Mask:发送Hello报文的接口的网络掩码。 -
Hello Interval:发送Hello报文的时间间隔,单位为秒。 -
Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能已超出这里的讨论范围。 -
Router Priority:发送Hello报文的接口的Router Priority,用于选举DR和BDR。即优先级 -
Router Dead Interval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍HelloInterval。 -
Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。 -
Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。 -
Neighbor:邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文。
OSPF 数据包类型
-
Hello 报文 Hello报文用来发现和维持OSPF邻居关系 邻居关系具有超时时间 -
DD(Database Description)报文 使用DD报文来对比双方的数据库中的信息,DD报文包含LSA的头部信息,用来描述LSDB的摘要信息。 -
LSR(LSA Request)报文 LSR用于向对方请求所需的LSA,从上面的对比当中发现自身没有的路由信息,可以使用LSR向对方请求详细信息。 -
LSU(LSA Update)报文 LSU用于向对方发送其所需要的LSA。 -
LSACK(Link State Acknowledgment)报文 LSACK用于向对方发送收到LSA的确认。
Hello 数据包
Database Description(DD) 数据包及包含信息
Link State Update(LSU) 数据包
Link State Ackonwledge(LSAck) 数据包
OSPF 状态机制
前四个状态都是在发送Hello报文, 5-8四个状态建立邻接关系
- Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
- Attempt:此状态只在NBMA(帧中继)网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
- Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系。
- 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
- ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的,初始DD序列号也是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
- Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
- Loading:相互发送LSR报文请求LSA,发送LSU报文通告LSA。
- Full:路由器的LSDB已经同步。
-
邻居(Neighbor): OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系。 -
邻接(Adjacency): 形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。 -
路由器在发送LSA之前必须先发现邻居并建立邻居关系。
运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。
OSPF启动流程 - 模拟器显示过程
OSPF工作流程
数据包和状态的切换过程
- OSPF
第一阶段 是使用Hello包建立双向通信的过程,成为邻居 关系,当经历了OSPF前三个状态,则表示正式建立邻居关系
建立邻居关系之后进入到Exstart 状态,此时会确定路由的主从关系
- 前两个DD报文格式如下:
- Init: Set 表示是否是第一个报文
- More: Set 表示后面是否还有报文
- Master: Yes 表示是主人还是仆人(Yes为主,No为从)
- 发出包之后路由器之间根据Route ID 的大小来确认主路由器和从路由器,大的为主路由器,小的为从路由器
- OSPF的
第二阶段 是通过交换LSA达到LSDB同步,建立邻接 关系
OSPF 邻居建立的条件
建立邻居关系必须是三层直连
建立条件
- Router ID 唯一
- Hell0/Dead 时间间隔一致 (Hello包的发送间隔和Dead死亡间隔一般是四倍关系,ospf建立邻居关系时,路由器之间的Hello和Dead间隔必须一致,否则无法建立邻居关系)
- 区域ID一致
- 认证(如果启用了认证)一致
- 链路MTU大小一致(默认不开启检查,思科默认开启检查),如果不一致ospf会卡在 Exstart - Exchange 两个状态之间
- 子网掩码一致(以太网环境),子网掩码不一致时,ospf会自动down掉,如下图
- 网络地址一致
- 末梢区域设置一致(Option)
OSPF网络类型 - 基于接口
网络类型通过下面两层决定
下面是广播类型网络 BMA
下面为非广播类型 - 非广播多路访问(NBMA)即帧中继网
DR和BDR
DR和BDR的选举,代表着被选举路由器的在某一个对应的网络区域的网络接口,在这个网络区域中是DR或者是BDR,是基于接口的。
选举规则
- 模拟器演示图1,DR路由器路由信息发生变化,发送数据包
- 模拟器演示图2,DRother路由器路由信息发生变化,发送数据包
OSPF 度量值(Cost) - 开销
注:华为的回环口的默认开销为0,思科的回环口的默认开销为1
注: serial接口的默认cost 开销值为 48
- 每一个运行OSPF的接口上,都维护着一个接口Cost
Cost = 10^8/BW(bps) = 100Mbps/BW = 接口带宽参考值/接口带宽 (如果结果小于1,那么默认值为1) - 到一个目标网络的度量值 =
- 从源到目标所有
出站接口 的Cost累加(数据方向) 即数据发送方向 - 从源到本路由器沿途所有
入站接口 的Cost值累加(路由方向)即路由学习方向
OSPF配置
基本配置
system-view 进入系统视图
ospf [进程号] router-id [id号] 开启ospf进程,并配置router-id
area [地区号] 配置区域
network [网络地址]注:这里可以写网络地址也可以写网络号,主要是根据后面的反掩码的区分 网络地址的反掩码就是 0.0.0.0 网络号的反掩码就是对应的掩码取反 [反掩码] 连接相应的网络地址,并设置反掩码(反掩码就是掩码的取反)
?
ospf timer hello 10 修改Hello 包发送间隔
ospf timer dead 40 修改hello 包超时时间
ospf dr-priority 100 修改优先级,修改之间得先进入相应的接口
bandwidth-reference 100 调整带宽参考是,默认为100Mbps,需要在整个网络当中统一进行调整
重启
进入用户试图
reset ospf process 重置ospf,即重启ospf 进程
查看命令
display ospf lsdb 查看ospf数据库
display ospf peer 查看邻居
display ospf peer brief 查看ospf 邻居接口信息
display ospf interface [接口号] 查看某个接口的ospf信息
修改cost值
先进入到相关的接口
ospf cost [度量值]
或进入到ospf进程
bandwidth-reference [度量值] Mbit/s
路由认证
技术背景
OSPF认证命令
注:配置认证时,当前网络中所有的路由器对需要配置一样的认证
OSPF认证
ospf认证解决安全隐患,只要通过认证的ospf路由器才能正常建立邻居关系、交互信息
认证模式:不认证null(默认);明文simple认证;MD5认证
OSPF的认证方式
**接口认证**
[R1-GigabitEthernet0/0/2]ospf authentication-mode simple cipher 123
//进入配置进程的接口配置认证方式为明文 密码123
cipher加密仅表示在查看命令时加密显示,而报文在传输过程中密码是明文显示。
[R1-GigabitEthernet0/0/2] ospf authentication-mode md5 1 cipher 123 // MD5认证,1为key id,密码为123,cipher表示报文在传输过程中通过MD5算法加密
**区域认证**
Ospf
area 0
authentication-mode simple cipher 123
明文认证,密码为123, cipher加密仅表示在查看命令时加密显示,而报文在传输过程中密码是明文显示。
authentication-mode md5 1 cipher 123
MD5认证,1为key id,密码为123,cipher表示报文在传输过程中通过MD5算法加密
注意:当simple和MD5都存在时,优先使用接口认证方式
两台设备之间 要么两端都不配置认证 要么两端都都配置simple认证 要么两端都都配置md5认证
|