OSPF(开放最短路径优先)
一、ospf简介
OSPF是基于链路状态的内部网关协议,与距离矢量协议不同,链路状态协议通告的是链路状态而不是路由表。OSPF是用于自治系统(AS)内部的路由决策,特点有,收敛速度快,安全性好,避免环路。
目前ipv4主要用OSPFV2版本,而ipv6则是OSPFv3版本。
二、OSPF工作流程
1、建立邻居
- 路由器通过周期性的发送hello报文,来发现并维护邻居关系。
- 如果两台路由器的参数相匹配,比如区域id,版本,认证方式等,就会建立邻居关系。
- 邻居关系建立后就会进行条件匹配(在BMA或NBMA网络中通过优先级比较和RID对比来选举DR和BDR),如果条件匹配成功则进入后续状态,匹配失败则停留在邻居阶段,仅仅依靠hello报文保活
2、链路状态信息同步
- DR/BDR选举,在以太网中,为了减少链路状态信息的交换次数,设置了选举指定路由器和备份指定路由器。选举依据优先级和router id ,高优先级的路由器当选。优先级一样,则router id 大的当选。
- 链路状态通告,当邻居关系建立成功后,路由器会向邻居发送LSA,其中包含了路由器的链路状态信息,如接口的ip,子网掩码,邻居等,LSA会在ospf区域类传播,确保所有的路由器都能获取到相同的链路状态信息,
- 数据库同步,收到LSA的路由器会和自己的LSDB中的进行对比,若收到的LSA是新的或者是更优的,就将其添加到LSDB中,并传播该LSA给邻居。
3、路由计算
- 利用最短路径优先算法,计算到达各个目的网络的最短路径,路由器将路径信息转换成路由条目,添加到路由表中。路由表中包含网络地址,下一跳地址,出接口信息,路由器将依据路由表转发数据包。
4、路由更新
基于组播进行更新(224.0.0.5 /224.0.0.6)
支持触发更新,每30分钟进行一次周期更新
三、OSPF区域
为了适应大型网络,OSPF在AS内划分了多个区域,每个路由器只用维护自己所在区域的链路状态信息
区域划分的优点为:
尽量减少路由条目,使得拓扑的变化只影响本区域内部
区域划分的规则:
- 星型结构
- 骨干区域为0区;大于0的为非骨干区域
- 所有非骨干区域必须连接在骨干区域上
- 两个区域相连时必须存在ABR(域间路由器)
Router-ID : 路由器标识符,用于在一个ospf域中唯一的标识一台路由
四OSPF数据包类型
1.HELLO包
-
发现和维护邻接关系:用于邻居节点的发现,建立初始连接,并周期性发送以维持邻接状态。
-
协商参数一致性:检查凝聚节点的参数(如区域id,hello时间,认证方式等)是否匹配。
2.DBD包(数据库描述包)
- 同步链路状态数据库:在邻接关系建立初期,主从路由器通过交换DBD包,描述本地LSDB中的链路状态摘要。
- 主从关系协商:确定数据同步的主从角色(router Id大的一方为主路由器)
3.链路状态请求包(LSR)
- 请求特定的LSA信息:当路由器发现本地LSDB中缺少或存在过时的LAS时,向邻居发送LSR 包,请求完整的LSA数据。
4.链路状态更新包(LSU)
- 发送完整的LSA数据,响应LSR请求,或主动泛洪最新的LSA信息,确保全网LSDB一致。
5.链路状态确认包(LSACK)
- 确认LSA可靠传输:接收方收到LSU后,向发送方返回lsack包,确保lsa已正确接收,避免数据丢失。
五、OSPF状态机
Down状态
- 初始状态:路由器未在接口上收到来自任何邻居的hello数据包,或邻居通信中断
- 周期性发送hello数据包,(默认10秒或30秒),尝试发现邻居。
- 当收到合法的hello包时,若hello包中未含自身router id 时,则进入init状态。
Init状态
-
路由器收到邻居的hello包,但尚未被邻居识别。
-
验证hello包中的参数一致性
-
区域id是否匹配(是否在同一个区域)
-
认证方式和密钥是否一致
-
hello时间和dead时间是否匹配
-
当邻居的hello包中发现自身router Id:确认双向通信建立,进入Two-Way状态
Two-Way状态
-
双向通信完成:双方hello包中均含对方router id,邻居关系初步建立。
核心功能: -
DR/BDR选举(仅在广播型网络和NBMA网络中):
接口优先级(默认为1,0-255)和router id决定选举结果.
优先级就高的为DR,次高为BDR;优先级相同时,router Id大的为DR -
广播网络中需要同步LSDB的节点(如DR和BDR,DR和DROther)进入Exstart状态
-
点到点网络或不需要同步的场景(如p2p,loopback接口)直接进入exstart状态,无须选举DR与BDR
Exstart状态
- 主从关系协商阶段:两台路由器准备交换DBD包,需要先确认主路由器和从路由器
- router Id较大的一方成为主路由器,负责控制dbd包的发送顺序。
- 主从关系协商完成:双方达成一致,进入exchange状态。
Exchange状态
- LSDB摘要同步阶段:主路由器通过交换dbd包,传递本地lsdb中的lsa头部信息(如lsa类型,链路状态id,通告路由器等)
- 主路由器发送携带lsa头部列表的dbd包,序号递增;从路由器接收后返回dbd包,并确认序号。
- 接收方对比本地lsdb,标记缺失或过时的lsa
- 双方完成lsdb摘要对比,进入loading状态。
Loading状态
-请求缺失的lsa的完整数据:路由器根据exchange阶段发现的缺失lsa,向邻居发送链路状态请求包(LSR),获取对应的lsa
- 所有的LSA获取并确认,进入FULL状态。
FULL状态
- 邻接关系完全建立:双方LSDB完全一致,可基于LSD运行Dijkstra算法计算最短路径树,生成路由表
- 若超过dead时间未收到hello包,或者lsdb同步失败,可能退回到Down状态,重新建立邻接。
Attempt状态(仅用于NBMA网络)
- 非广播多路访问网络(NBMA)特有:用于描述对静态配置邻居的轮询状态(如帧中继,atm网络)
- 当邻居配置为静态邻居,且未收到其hello包时,路由器定期向该邻居单播发送hello包,尝试建立连接。
- 若持续未响应,维持Attempt状态;若收到响应,则进入Two-Way状态
状态机转变
在ar5上查看状态机:
- 收到了AR7发送的hello包,邻居状态由down转换成init状态
- 再次收到hello包,且包含自己的router id,转变成two-way状态
- 发送DD报文进入Exstart状态
- 交互DD报文并发送LSR请求LSU,并进入Exchange状态
- 交互完毕进入Loading状态
- 最后是full状态
六、基础配置
[R1]ospf 1 router-id 1.1.1.1 确定ospf进程的同时配置RID
[R1-ospf-1]area 0 创建0区/进入0区
[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.1.1.0 0.0.0.255
反掩码:掩码反过来
[R1]display ospf peer 查看详细邻居关系
[R1]display ospf lsdb 查看数据库表的目录
[R1]display ospf lsdb router 2.2.2.2 打开具体的数据库目录内容
[R2]display ip routing-table protocol ospf 查看由OSPF生成的路由表
实验拓扑
配置命令
AR3
[Huawei]ospf 1 router-id 3.3.3.3
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 192.168.1.0 0.0.0.255
AR1
[Huawei]ospf 1 router-id 1.1.1.1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 192.168.1.0 0.0.0.255
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255
[R1]display ospf peer 查看详细邻居关系
[R1]display ospf lsdb 查看数据库表的目录
[R1]display ospf lsdb router 2.2.2.2
display ip routing-table protocol ospf 查看由OSPF生成的路由表
AR2
[Huawei]ospf 1 router-id 2.2.2.2[Huawei-ospf-1]area 0[Huawei-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255[Huawei-ospf-1]area 2[Huawei-ospf-1-area-0.0.0.2]network 192.168.3.0 0.0.0.255
AR4
[Huawei]ospf 1 router-id 4.4.4.4[Huawei-ospf-1-area-0.0.0.2]network 192.168.3.0 0.0.0.255
七、拓展配置
选举DR/BDR时修改接口优先级
[R1-GigabitEthernet0/0/0]ospf dr-priority 3 更改参选接口的优先级为3<R1>reset ospf process 重启ospf进程
在邻居间接口上做认证
[R1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456
手工汇总
在ABR(域间路由器)上将A区域的路由共享到B区域时,方可进行手工汇总的配置。
[R2-ospf-1-area-0.0.0.0]abr-summary 1.0.0.0 255.0.0.0
沉默接口
沉默接口—仅接收不发送路由协议信息,只能用于连接用户PC的接口去使用。
[R1-ospf-1]silent-interface g 0/0/1 设置沉默接口
加快收敛
邻居间直连接口的hello time 和dead time 时间若不一致 将不能建立邻居关系 ;同时修改时也不建议修改的过小 / 不建议修改时间
[R1-GigabitEthernet0/0/0]ospf timer hello 10
修改hello time 时间为10s
[R1-GigabitEthernet0/0/0]ospf timer dead 40
修改 dead time 时间为40s
缺省路由
在连接外网的边界路由器上,配置一条缺省路由信息后,该设备将向内网发送信息,是的内部所有ospf设备,生成缺省路由,下一跳全部指向边界路由起方向,但是边界路由器通往外网的路由条目仍需网络管理员手工边写。
[R3-ospf-1]default-route-advertise always