简介:OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定义的。与RIP相比,OSPF是链路状态协议,而RIP是距离矢量协议。
实验拓扑
1. 实验步骤
1. 配置 R1,R2,R3 的相应接口 IP 地址,保证连通性。并且在每个路由器上配置一个环回口 0,其地址格式为 X.X.X.X/24。
2. 然后配置 R1 和 R2 之间的区域 0。
R1(config)#router ospf ? //选择一个进程号,进程号只是本地有意义。
<1-65535> Process ID
R1(config)#router ospf 1
R1(config-router)#network 1.1.1.0 0.0.0.255 area 0 //将满足该范围的 IP 接口加入
OSPF 进程中,并且属于区域 0
R1(config-router)#network 10.10.1.0 0.0.0.255 area 0
R1(config-router)#exit
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2 //手工指定 OSPF 路由器 ID 为 2.2.2.2
R2(config-router)#network 10.10.1.0 0.0.0.255 area 0
R2(config-router)#exit
R2(config)#
*Mar 1 00:03:52.351: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on Ethernet0/1 from
LOADING to FULL, Loading Done //邻居已经同步
对于 OSPF 的路由器 ID(32bit)的选择,采用如下规则:
a) 如果存在命令 router-id X.X.X.X,那么优先采用
b) 如果没有手工指定,那么选取 IP 地址最高的环回口地址作为 RID。即使该环回口并没有参与 OSPF 进程
c) 如果没有环回口,那么选取 IP 地址最高的物理接口地址作为 RID。即使该物理接口没有参与 OSPF 进程,但一定要 UP。
RID 对于 OSPF 非常重要,如果没有 RID,OSPF 便无法正常运行。因此建议养成手工指定 RID 的习惯。
3. 配置 R2 和 R3,使得实验拓扑得以完成。
R2(config-router)#network 2.2.2.0 0.0.0.255 area 1 //将 R2 的环回口放在区域 1 中
R2(config-router)#network 12.1.1.0 0.0.0.255 area 1
R3(config)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 12.1.1.0 0.0.0.255 a 1
R3(config-router)#network 3.3.3.0 0.0.0.255 area 1
R3(config-router)#
*Mar 1 00:13:01.379: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Ethernet0/1 from
LOADING to FULL, Loading Done //R2 和 R3 之间 OSPF 同步
在 R2 上使用命令 show ip ospf interface brief 可以查看到 R2 上参与 OSPF 进程的接口状态,参与接口依赖于 network 命令,并且被动接口省略输出。
在 R2 上使用命令 show ip protocols 得到的输出,可以显示出 R2 上现存路由进程的相关信息,并且包括 network 命令的明细。
在 R2上使用命令 show ip ospf neighbor得到的输出, 可以显示出 R2目前尚存的 OSPF路由器邻居,并且各自邻居的状态,各个邻居以 RID 区别,以及发现接口和地址。
OSPF 的 DR,BDR 选举的规则为:
a) 首先看接口优先级,优先级大的为优
b) 如果优先级相同,那么比较路由器 RID,RID 大的为优
c) 选举完成以后,不具有抢占性
更改接口优先级的命令为:
R1(config)#int f0/0
R1(config-if)#ip ospf priority ?
<0-255> Priority //其中 0 代表直接退出选举,成为 Drother
在 R2 上使用命令 show ip ospf database 得到的输出,其中给出了区域0和区域1的链路状态。该命令能够输出本地路由器所包含的链路状态数据库的描述信息集合。其中database 的实际内容为邻居之间同步获得的 LSA(链路状态通告)
在 R2 上使用命令 show ip route 输出 R2 的路由表。发现 1.1.1.0/24 的路由显示为1.1.1.1/32,同样的情况发生在 R3 的环回口上。
回顾上述输出,我们发现:
OSPF 路由器将环回口的网络类型认为是一种特殊的类型, LOOPBACK 类型。因此不管环回口前缀长度为多少,都一致认为其长度为 32。
因此,只需要更改环回口的网络类型即可。通常更改为点到点网络类型即可。
R1(config)#int lo0
R1(config-if)#ip ospf network point-to-point
R2(config)#int lo0
R2(config-if)#ip ospf network point-to-point
R3(config)#int lo0
R3(config-if)#ip ospf network point-to-point
然后再次查看 R2 的路由表:
环回口的子网掩码位数已经正常。
最后测试一下连通性!
吴迪
2017.12.18