OSPF(开放式最短路径优先协议)
OSPF是基于无类别链路状态算法的IGP(内部网关协议)协议;
组播更新:224.0.0.5 、224.0.0.6
基于拓扑进行触发更新和周期更新(30min)
需要结构化的部署—区域划分、地址规划
1、OSPF的数据包类型
- hello包:用于邻居的发现,关系的建立以及10s的周期保活
- DBD数据库描述包
- LSR链路状态请求
- LSU链路状态更新
- LSack链路状态确认包
2、OSPF的状态机
- Down:启动OSPF协议后,接收到其他设备发送过来的hello包进入下一状态
- Init:初始化,接受带的hello包中若存在本地的RID则进入下一状态
- 2way:双向通信,邻居关系建立的标志
- Exstart 预启动,使用不携带数据库信息的DBD包进行主从关系的选举,RID数值大为主,优先进入下一状态
- Exchange 准交换,使用携带数据库信息的DBD包共享各种的数据库目录
- Loading 加载,查看完其他设备的目录信息后,基于本地为止的LSA信息,使用LSR进行查询,对端使用LSU进行更新,需要ACK包进行确认
- Full 转发,获取完所有未知的LSA信息后,双方最终的关系确认为邻接关系
LSA:链路状态通告:具体的一条一条拓扑或路由信息,基于LSU包进行共享
3、OSPF的工作过程
- 启动配置完成后,邻居间收发hello包,获取对端的RID,建立邻居关系,生成邻居表;
- 之后关注条件,若不匹配将保持为邻居关系,仅hello包周期保活即可。
- 若条件匹配可以建立邻接关系:先使用未携带数据库目录信息的DBD包进行主从关系的选举;之后由主引导先后顺序使用携带数据库目录信息的DBD包共享数据库目录 ;之后本地基于其他设备的目录,判断出本地未知的LSA信息,再使用LSR/LSU/LSack来通过邻接获取具体的LSA信息,完成本地的数据库表(LSDB链路状态数据库)
- 本地数据库完整后,本地将基于数据库中的内容启动SFP算法,将数据库整理为有向图—>最短路径树—>将本地到达所有未知网段的最短路径加载于本地的路由表中
- 路由表建立完成,收敛结束,之后的10s使用hello包进行周期保活,每30min邻接间进行一次数据库目录核对
结构突变:
- 无法沟通:每10s发送hello包,40s后删除关系
- 新增网段:触发更新—LSU和LSack
- 断开网段:触发更新—LSU和LSack
4、OSPF的基础配置
配置接口IP和环回地址
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip address 12.1.1.1 24
[R1]int lo0
[R1-LoopBack0]ip address 1.1.1.1 24
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip address 12.1.1.2 24
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip address 23.1.1.2 24
[R2-GigabitEthernet0/0/1]int lo0
[R2-LoopBack0]ip address 2.2.2.2 24
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ip address 23.1.1.3 24
[R3]int lo0
[R3-LoopBack0]ip address 3.3.3.3 24
启动OSPF,划分区域,宣告网段
[R1]ospf router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]network 23.1.1.2 0.0.0.0
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]network 23.1.1.3 0.0.0.0
[R3-ospf-1-area-0.0.0.1]network 3.3.3.3 0.0.0.0
补充
- 启动时定义进程号,仅具有本地意义;RID为每台ospf路由器的名字,格式为ipv4地址,全网唯一,需要手工指定,假设未手工指定,则名称为本地环回接口上配置的最大数值地址,若未配置环回地址,则名称为物理接口上最大数值的地址
- OSPF协议宣告时,需要划分区域,宣告时需要使用反掩码进行地址范围的匹配
- 宣告配置完成后,邻居间手法hello包,建立邻居关系,生成邻居表
[R1]display ospf peer
- 邻居关系建立后,条件匹配者可以建立为邻接关系;邻接关系间使用DBD/LSR/LSU/LSack来同步数据库,获取所有未知的LSA信息,完成数据库的统一;生成数据库表
[R1]display ospf lsdb
- 数据库同步完成后,本地使用sfp算法计算达到所有未知网段的最短路径,并让其加载到本地的路由表中
- ospf协议默认优先级为10,度量值为cost值;
cost=参考宽带/接口宽带
;默认参考宽带为100M,默认cost小于1按1算,ospf选择cost值之和最小的路径加载到路由表,当接口宽带大于参考宽带时,可能会出现选路不佳,建议修改参考宽带
[R1-ospf-1]bandwidth-reference 1000
区域划分规则:
- 必须为星型结构—必须存在骨干区域,编号为0,非骨干区域编号>0,非骨干区域必须连接到骨干区域
- 必须存在ABR—区域边界路由器直连的邻居间必须处于同一区域,否则无法建立邻居关系
5、OSPF的扩展配置
1、 从邻居建立为邻接关系的条件:与网络类型有关
网络类型:
- 点到点—>在一个网段拓扑中只能存在两个节点
- MA—>多路访问—>在一个网段拓扑中,节点的数量不受限制
在点到点网络中,OSPF的邻居关系必然成为邻接关系;在MA网络中,将进行DR/BDR的选举,非DR/BDR之间保持为邻居关系
选举规则:
- 先比较所有参选接口的优先级,0-255,默认为1,越大越优
- 若优先级相同,比较RID,数值越大越优
注:由于DR/BDR选举需要消耗40s,为了保障网络的稳定性,选举是非抢占的,一旦一个网段选举完成后,再修改设备的优先级除非重启设备,否则无法干涉到结果。若要干涉选举,可重启所有设备的OSPF进程
最建议的修改方式是修改非DR/BDR设备的优先级为0,0代表不参与选举,不用重启进程
[R1]interface g 0/0/0
[R1-GigabitEthernet0/0/0]ospf dr-priority 3
2、 认证
邻居间进行身份认证核实,保障更新安全,华为同时要求加密更新数据
在连接邻居的接口上配置,要求邻居间模式、编号、密码完全一致
[R1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123
3、手工汇总
由于ospf在区域内传递的是拓扑信息,所以不能进行手工汇总,只能在区域间的ABR共享路由条目时进行汇总;OSPF不支持接口汇总,支持区域汇总
[r2]ospf 1
[r2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]abr-summary 1.1.0.0 255.255.252.0
4、加速收敛
邻居间hello time 10s,dead time为hello time 的4倍;
ospf要求直连邻居间hello time和dead time一致,否则无法建立邻居关系
修改本地的hello time,本地的dead time自动4倍关系匹配;
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]ospf timer hello 5
5、缺省路由
在连接内网和外网的边界路由器上配置缺省命令后,边界路由器将向内网发布一条缺省路由;使得内部的路由器产生缺省路由指向边界;边界路由器本地指向ISP的缺省需要管理员手工静态编写;
[r4]ospf 1
[r4-ospf-1]default-route-advertise always
6、沉默接口
连接终端设备的接口在宣告完成后,将周期发送信息,通过沉默来关闭这些信息的发送,不能配置于骨干连接其他邻居设备的接口
[r1]ospf 1
[r1-ospf-1]silent-interface GigabitEthernet 0/0/2