OSPF
IGP 协议的一种,属于链路状态协议
——————————————————————————
五种报文类型
1、hello:用于发现邻居,建立邻居关系和维护邻居关系(周期性发送,默认 10s 一次 or 30s 一次)
2、dd:用于选举主从路由器,用于携带 LSDB 摘要信息
3、lsr:请求缺失的 LSA
4、lsu:响应 LSR 请求,用于回复 LSA 信息
5、lsack:确认收到的 LSU
——————————————————————————————————————————————————————————————————
八种状态机
1、down:代表 ospf 协议进入初始化,还没有建立邻居
(特殊状态机,在 NBMA 网络中,发送了 hello 给对方,但是没有任何的会议,就会进入到 attempt )
2、init:代表收到了对方的 hello 报文,正在进行邻居协商(对方的 hello 报文中,没有自身的 router id)
3、2way:代表邻居建立完成,收到了对方的 hello 报文,并且对方的报文中,包含自身的 router id
————————————————————— 邻居 —————————————————————————
4、exstart:代表邻接关系开始建立,选举主从设备(主从设备是保证 LSA 能够有序和可靠的交互)
5、exchange:开始同步 LSA 摘要信息,通过 DD 报文进行交互
6、loading:同步 LSDB,缺少的设备进行请求,直到双方 LSDB 完全一致
7、full:标志着同步完成,双方 LSDB 完全一致
————————————————————— —————————————————————————
——————————————————————————————————————————————————————————————————
邻接
工作过程:
一、邻居建立:
(router id 1.1.1.1) (router id 2.2.2.2)
R1 ——————————————— R2
①邻居发现:双方设备都在初始的 down状态,互相发送 hello 报文建立邻居关系(hello 报文中会携带自己的 router id)
例如:R1 先发送(hello 自己的 router id (1.1.1.1)、邻居的 router id(null))
②邻居协商:R2 收到 hello 报文后,会从 down 状态转换成 init 状态(进入邻居协商阶段) R2 会把 R1 发送过来的 hello 报文进行记录,把 1.1.1.1 放入自己的邻居列表中R2 同时回复一个 hello 报文(hello 自己的 router id (2.2.2.2)、邻居的 router id(1.1.1.1)) R1 收到 R2 的 hello 报文后,看里面包含自己的 router id ,R1 设备转至 2way 状态 并且把 R2 的 hello 报文内容进行记录,把 2.2.2.2 放入自己的邻居列表中
R1 同时回复 hello 报文
(hello 自己的 router id (1.1.1.1)、邻居的 router id(2.2.2.2))
R2 收到后,看到包含自己的 router id ,也会转至 2way 状态
双方设备进入 2way 后,代表邻居状态建立完成
③邻居维护:邻居建立完成后,双方依然会每隔 10s 发送一次 hello 报文,用于维护邻居关系
(如果在 4倍的时间内,没有收到对方的 hello 报文,会中断邻居关系)
————————————————————————————————————————————————————————
二、选举主从:
邻接建立完成后,设备会进入到 exstart 阶段,进行主从选举
(router id 1.1.1.1) (router id 2.2.2.2)
R1 ——————————————— R2
①最开始的时候,双方设备都认为自己是 master 设备,互相发送 DD 报文进行选择
R1 的 DD报文内容:(seq=X flags”I=1、MS=1、M=1“)代表序列号为:X、第一份初始 DD 报文、主路由器、存在更多协商内容
R2 的 DD报文内容:(seq=Y flags”I=1、MS=1、M=1“)代表序列号为:Y、第一份初始 DD 报文、主路由器、存在更多协商内容
—————————————————————————————————————————————————————————
②进行比较,Router id 大的会成为 master (R2 id 更大,所以为 master、R1 为 slave)
③进入到下一阶段,进行 LSDB 同步(从设备先转换成 exchange 阶段,并且对主设备进行确认)
—————————————————————————————————————————————————————————
R1 的 DD报文内容:(seq=Y flags”I=0、MS=0、M=1“)代表序列号为:Y、非初始 DD 报文、从路由器、存在更多协商内容
(R1 设备需要先对主设备发送确认信息,确认的标识为序列号与 R2 的一致)如果 R1 没有确认,5s 后 R2 会重新发送一次 DD,直到 R1 回复
R2 收到确认之后,也会进入到 exchange 状态(并且下一次发送报文,序列号会加1)
R2 的 DD报文内容:(seq=Y+1 flags”I=0、MS=1、M=1“)代表序列号为:Y+1、非初始 DD 报文、主路由器、存在更多协商内容
——————————————————————————— 主从选举完成,并且都进入到 exchange 阶段 ——————————————————
三、同步 LSDB
进入到 exchange 阶段后(主从设备会进行 DD 摘要信息的交互)
R1 设备(从)(拥有 LSA 1、2、3、4) (seq=X) | R2 设备(主)(拥有 LSA 1、3、4)(seq=Y)
——————————————————————————————————————————
① 从设备会先对主设备进行上一次报文的确认
R1 先发送 DD 报文,(seq=Y)(flags I=0、MS=0、M=0)
LSA摘要(1、2、3、4)
——————————————————————————
R2 设备收到后,得知自己缺少一份 LSA 2,同时得知 R1 是从设备,已经进行了确认
② 主设备收到从的确认后,开始发送下一次 DD 摘要信息
R2 发送 DD 报文,(seq=Y+1)(flags I=0、MS=1、M=0)
LSA摘要(1、3、4)
——————————————————————————
R1 设备收到后,得知自己,已经拥有所有的 LSA 信息,无需请求
但是 R1 是从设备,所以交互完成摘要信息还需要进行一次确认
③ R1 设备最后进行一次确认,并且双方进入到 loading 状态,开始同步 LSA
R1 先发送 DD 报文,(seq=Y+1)(flags I=0、MS=0、M=0)
——————————————————————————
R1 发送完最后一份 DD ,进入到 loading 状态
R2 收到这份 DD 后也进入 loading (M=0 标志所以的摘要已经确认完成)
——————————————————————————————————————————————————————————————————
loading 阶段
R1 和 R2 设备 (已知 R2 设备缺少一份 LSA 2)
① R2 设备会主动发送 LSR 请求(缺少的 LSA 2 信息)
② R1 设备收到 LSR 请求后,会查看里面请求的 LSA 是哪一份,并且根据请求进行回复
R1 设备通过 LSU 携带具体的 LSA 2 进行回复
③ R2 收到具体的 LSA 2 后,会把这份 LSA 放入 LSDB 中,至此双方 LSDB 完成同步
④ R2 最后再次进行确认,告知 R1 已经收到 LSA 2 ,同步完成
R2 发送 LSAck 报文告知 R1
双方设备进入到 FULL 阶段,标识着同步完成,邻接状态建立完成
———————————————————————————————————————————————————————————————————
OSPF同步过程
四、通过 SPF 算法计算路由
1、(full-mush SPF):完成 LSDB 同步后,所有的 OSPF 节点都会进行一次 (完全的 SPF 计算)
所有同步完成后的 OSPF 节点,会认为自己是主节点,计算到达其他节点的拓扑和路由信息
(生成候选表 和 最短路径树)
候选表:是本节点能够到达所有节点的路径,但是并非最优路径
最短路径树(SPT):是本节点到达所有节点的最优路径,后续的路由计算都依赖于 SPT
2、I-SPF(增强型的 SPF):当拓扑发生改变的时候,只对变化后的节点计算,不需要对所有的节点都进行计算
3、PRC(部分路由计算):当时有路由发生改变时,针对路由进行计算,不会针对节点进行计算
——————————————————————————————————————————————————————
五、 四种网络类型
1、BMA:当链路层协议为(以太网协议)ETH II、802.3 那么默认的网络类型为:BMA
2、P2P:当链路层协议为(PPP、HDLC 等)那么默认的网络类型为:P2P
3、NBMA:当链路层协议为(帧中继)FR、ATM,那么网络类型为:NBMA
4、P2MP:没有一种链路层协议默认是 P2MP,可以人为修改为这种网络类型
(NBMA 只能与 NBMA 建立邻居关系,因为是单播发送数据包的)
其他网络类型可以组合,但是会有路由计算的影响
(P2P 可以和 BMA 建立邻居,但是 P2P 不选举 DR ,所以无法计算路由)
(P2P 可以和 P2MP 建立邻居,也不会影响路由计算,但是 P2MP 的 hello 时间需要修改为和 P2P 的一致)
六、 DR 和 BDR 的作用
在 MA 网络类型中,为了避免重复同步 LSA 和 大量的邻接关系,需要选举 DR 和 BDR 设备
在一个网段中,只有一个 DR 和 一个 BDR,其他设备为 DR other
(other 只能和 DR 以及 BDR 建立 FULL 的邻接关系)other 之间建立 2way 的邻居关系
————————————————————————————————————
作用:减少 LSA 的泛洪,和大量的邻接关系
————————————————————————————————————
选举方式
先比较 hello 报文中的 DR 优先级(越大越优先) // 优先级默认为:1 (可以修改:0—255)0 不参与选举
优先级一致,则比较 Router id(越大越优先)
选举步骤:
①如果在 DR 集合中,没有已经声明的 DR 则从 BDR 选举出最优的成为 DR
②如果在 BDR 集合中,没有已经声明的 BDR 则从 other 集合中,选举出最优的成为 BDR
——————————————————————————
例如:一开始 4 台设备都是 other (1、2、3、4)
则重 4 台设备中,选举出最好的一台成为 BDR,如果没有 DR, BDR 则直接成为 DR
再从剩余的 3 台设备中选举出 BDR
————————————————————————————————————————
除非出现 多台 DR 或者是 BDR,否则一旦 DR 和 BDR 选举出来后,就不会再被抢占(即:不重新选举)
七、OSPF 设备概念
1、区域:为了减少设备的负担,所以把一个大型的网络划分成,多个 OSPF 区域去管理
骨干区域:OSPF 网络的中心区域,其他区域的信息交互都需要经过该区域转发(类似于城市中的交通枢纽)
(area 0.0.0.0)
普通区域:除了区域 0 和特殊区域以外的区域,1—2的32次方
特殊区域:通过修改普通区域的特性,得出的特殊区域(stub、nssa)和普通区域共用 ID 号(1—2的32次方)
—————————————————————————————————————————————
2、ABR:在一个区域内 LSDB 是同步的,但是不同区域之间 LSDB 是不同步的,也就是路由信息不完全同步
(区域边界路由器) 那么不同区域之间需要进行业务互访,就得通过 ABR 去完成
(ABR 拥有多个区域的 LSDB,属于区域 0 和 其他区域的交界设备)
3、ASBR:OSPF 协议,除了和协议本身交互路由信息,还能和其他协议(如:Static、IS-IS、BGP等协议交互信息)
(自治区域边界路由器) 不同协议之间,通过的网络信息是不一样的,ASBR 是运行了除 OSPF 外还有其他协议的设备
可以进行 OSPF 路由和其他协议路由翻译的设备
——————————————————————————————————————————————————————
OSPF 基础配置命令
(系统配置视图)
ospf 1 router-id 1.1.1.1 // 创建 OSPF 协议,进程号 1 ,router id (1.1.1.1)
——————————————————————————————————————————————————————
补充:(router id 是唯一的,两台路由器之间,router id 不能一致)
如果重新配置了新了 router id ,需要重置 ospf 进程才可能生效
补充:<Huawei>reset ospf process // 重置 ospf 进程(用户视图下生效)
——————————————————————————————————————————————————————
(ospf 进程下配置)
area 0.0.0.0 // 创建 OSPF 区域,区域 0(也可以通过该命令进入某一个区域)
补充:邻居之间,区域 ID 必须一致,否则不能建立邻居关系
——————————————————————————————————————————————————————
(在 OSPF 区域下配置)
network 1.1.1.1 0.0.0.0 // 通告路由,用于建立邻居关系,以及把本地路由通告给邻居使用
network 12.1.1.0 0.0.0.255
命令格式: network + 目的路由 + 通配符
例如: 要把 100.1.1.1 /24 的路由发布给邻居 (network 100.1.1.0 0.0.0.255 )
——————————————————————————————————————————————————
完成 OSPF 邻居建立后
查看邻居是否完成建立:display ospf peer brief // 查看 OSPF 邻居摘要信息
可选配置(进入接口修改 ospf 开销值)
interface G0/0/0 // 例如:进入 G0/0/0
ospf cost 100 // 把该接口的 cost 改成 100
(补充:修改 cost 只能针对路由传递的入接口生效,出接口无效)
cost 是累计的,传递路径上的所有入接口都计算 cost
——————————————————————————————————————————————————————
还有一种补充修改的方法,修改参考带宽
cost = 参考带宽/接口的实际带宽 例如:参考带宽 100,接口带宽是 100 的时候,cost = 1
(但是 FE (100M)接口 和 GE(1000M)接口,计算出来的 cost 是一致的,容易导致错误的负载均衡)
所以修改参考带宽可以解决这个问题
bandwidth-reference 修改参考值例如:修改成 1000 (OSPF 进程下 )
FE 接口的 cost 会变成 10 GE 接口则依然是 1