协议介绍
ospf 协议是非常常见的内部网关协议, 属于链路状态路由协议. 就是路由器之间相互学习路由信息, 并共享所有的拓扑关系, 然后自动计算出自己跟不同节点之间的最佳路径.
ospf 的节点经过沟通, 最终会形成三个表
- OSPF 邻居表, 存储相邻的节点
- LSDB 表, 存储整个网络的拓扑结构
- OSPF 路由表, 存储经过计算的最佳路由
ospf 机制的分为5个阶段
- 发现并建立邻居关系
- 协商主从. 为了减少相互的同步, 会从路由器节点中选取一个主节点, 其他节点只要和这个主节点同步数据即可.
- 相互发送各自的LSDB摘要信息. LSDB 存储的是网络的拓扑结构, 两两节点会进行交互, 并根据对方的拓扑结构更新自己的 LSDB. 为了减少数据交换量, 会先发送摘要信息, 相互匹配不同的值, 然后再由第四步更新 LSA (链路状态通告, 也就是拓扑结构).
- 根据 3 的差异值相互发送 LSA 请求, 并根据请求信息返回 LSA 完整信息, 并更新 LSDB.
- 节点自己计算路由规则.
拓扑结构
基于 eNSP 模拟器进行模拟, 拓扑结构如下
目标是配置 AR1 和 AR2 使用 ospf 协议进行动态路由的配置, 使得 PC1 能 ping 通 PC2.
配置很简单:
AR1 :
- ospf 1 router-id 1.1.1.1 (1是进程号的意思, 1.1.1.1 是路由id, 仅作为名称, 和路由没什么关系)
- area 0 (进入 area 0 进行设置)
- network 192.168.1.0 0.0.0.255 (把 192.168.1.0 网络加入 area0)
- network 192.168.2.0 0.0.0.255
AR2 :
- ospf 1 router-id 2.2.2.2
- area 0
- network 192.168.2.0 0.0.0.255
- network 192.168.3.0 0.0.0.255
这时候 AR1 和 AR2 已经在交换拓扑结构了
AR1:dis ospf peer (OSPF邻居表)
AR1 已经识别到 AR2 了
AR1:dis ospf lsdb (LSDB 表)
AR1:dis ip routing-table protocol ospf (OSPF 路由表)
已经生成了 192.168.3.0/24 -> 192.168.2.2 的路由, 使得和 AR1 直连的 PC1 能 ping 得通 PC3.
PC1: ping 192.168.3.1 (PC3)
ospf 通讯协议
从 AR1 抓包可以看到 AR1 和 AR2 通讯的情况
前面提到 ospf 的机制, 其实就是对应这些具体的协议
- (23-25) 因为我先配置的 AR1 , 所以 19-23 号帧 AR1 会10s 广播一次自己. 224.0.0.0 是四类地址, 叫做组播地址. 24 的时候, AR2 配置好了, 会回复 Hello Packet, 并在路由表添加R1, 并把状态设置为 Init. 25 的时候, AR1 会继续广播已知了 AR2. 后面流程结束后, AR1, AR2 会继续广播自己的信息.
- (26-27) 协商主从, 两个节点相互发消息, 都说自己是主节点, 但最后收到了对方的 DD Sequence 就知道谁才是主节点了 (谁大谁是 Master)
主节点叫 DR, 一个广播域有一个 DR, 为了防止在一个广播域里面同步过多次 LSA , 因此需要选 DR, 让其他的节点和 DR 同步就可以了.
- 28 28: .1->.2 发送 LSA 摘要信息 29: .1 广播了自己的 LSA (不清楚为什么要广播) 30: .2 知道了 .1 的 LSA 的摘要信息, 知道自己缺了什么路由, 于是发送 LS Request 请求给 .1 请求详细的信息 31: .2 接收到 .1 的 LSA 详细信息, 并更新自己的路由信息.
32-35: 和上面同理.
38-40 发送确认信息
总结
ospf 协议还是很复杂的, 还支持区域级别的通讯, 但范围一大要同步的 LSA 就会非常多, 所以需要划分区域, 区域之间只需要和边界路由器同步一次 LSA 即可. ospf 还有非常多的设置, 这里就不展开了, 后面如果遇到相关问题再细看.