OSPF(Open Shortest Path First,开放最短链路优先)路由协议是典型的链路状态路由协议。OSPF 作为一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治系统(AS)中的路由器之间交换路由信息。OSPF 的特性如下:
1. 可适应大规模网络;
2. 收敛速度快;
3. 无路由环路;
4. 支持VLSM 和CIDR;
5. 支持等价路由;
6. 支持区域划分, 构成结构化的网络;
7. 提供路由分级管理;
8. 支持简单口令和MD5 认证;
9. 以组播方式传送协议报文;
10. OSPF 路由协议的管理距离是110;
11. OSPF 路由协议采用cost 作为度量标准;
12. OSPF 维护邻居表、拓扑表和路由表。
另外,OSPF 将网络划分为四种类型:广播多路访问型(BMA)、非广播多路访问型(NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。不同的二层链路的类型需要OSPF 不同的网络类型来适应。
下面的几个术语是学习OSPF 要掌握的:
1. 链路:链路就是路由器用来连接网络的接口;
2. 链路状态:用来描述路由器接口及其与邻居路由器的关系。所有链路状态信息构成链路状态数据库;
3. 区域:有相同的区域标志的一组路由器和网络的集合。在同一个区域内的路由器有相同的链路状态数据库;
4. 自治系统:采用同一种路由协议交换路由信息的路由器及其网络构成一个自治系统;
5. 链路状态通告(LSA):LSA 用来描述路由器的本地状态,LSA 包括的信息有关于路由器接口的状态和所形成的邻接状态;
6. 最短路经优先(SPF)算法:是OSPF 路由协议的基础。SPF 算法有时也被称为Dijkstra算法,这是因为最短路径优先算法(SPF)是Dijkstra 发明的。OSPF 路由器利用 SPF,独立地计算出到达任意目的地的最佳路由。
通过下面的实现,来学习配置OSPF的网络类型
配置点到点链路上的OSPF
步骤:
(1)步骤1:配置路由器R1
R1(config)#router ospf 1
R1(config-router)#router-id
R1(config-router)#network
R1(config-router)#network 192.168.1.0
(2)步骤2:配置路由器R2
R2(config)#router ospf 1
R2(config-router)#router-id
R2(config-router)#network
R2(config-router)#network 192.168.1.0
R2(config-router)#network 192.168.2.0
(3)步骤3:配置路由器R3
R3(config)#router ospf 1
R3(config-router)#router-id
R3(config-router)#network
R3(config-router)#network 192.168.2.0
R3(config-router)#network 192.168.3.0
(4)步骤4:配置路由器R4
R4(config)#router ospf 4
R4(config-router)#router-id
R4(config-router)#network
R4(config-router)#network 192.168.3.0
【技术要点】
(1)OSPF 路由进程ID 的范围必须在1-65535 之间,而且只有本地含义,不同路由器的路由进程ID 可以不同。如果要想启动OSPF 路由进程,至少确保有一个接口是up 的;
(2)区域ID 是在0-4294967295 内的十进制数,也可以是IP 地址的格式A.B.C.D。当网络区域ID 为0 或
(3)在高版本的IOS 中通告OSPF 网络的时候,网络号的后面可以跟网络掩码,也可以跟反掩码,都是可以的;
(4)确定Router ID 遵循如下顺序:
① 最优先的是在OSPF 进程中用命令“router-id”指定了路由器ID;
② 如果没有在OSPF 进程中指定路由器ID,那么选择IP 地址最大的环回接口的IP 地址为Router ID;
③ 如果没有环回接口,就选择最大的活动的物理接口的IP 地址为Router ID。
建议用命令“router-id”来指定路由器ID,这样可控性比较好。
调试:
(1) show ip route:查看路由表信息
R1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O -
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
C
O
O
O
C 192.168.1.0/24 is directly connected, Serial0/0
O 192.168.2.0/24 [110/128] via 192.168.1.2, 00:02:57, Serial0/0
O 192.168.3.0/24 [110/192] via 192.168.1.2, 00:02:57, Serial0/0
输出结果表明同一个区域内通过OSPF 路由协议学习的路由条目用代码“O”表示。
【说明】
① 环回接口OSPF 路由条目的掩码长度都是32 位,这是环回接口的特性,尽管通告了24 位,解决的办法是在环回接口下修改网络类型为“Point-to-Point”,操作如下:
R2(config)#interface loopback 0
R2(config-if)#ip ospf network point-to-point
这样收到的路由条目的掩码长度和通告的一致。
(2)show ip ospf neighbor:查看邻居关系的建立
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
以上输出表明路由器R2 有两个邻居,它们的路由器ID 分别为
它参数解释如下:
① Pri:邻居路由器接口的优先级;
② State:当前邻居路由器接口的状态;
③ Dead Time:清除邻居关系前等待的最长时间;
④ Address:邻居接口的地址;
⑤ Interface:自己和邻居路由器相连接口;
⑥ “-”: 表示点到点的链路上OSPF 不进行DR 选举
【技术要点】
OSPF 邻居关系不能建立的常见原因:
① hello 间隔和dead 间隔不同;
同一链路上的hello 包间隔和dead 间隔必须相同才能建立邻接关系。默认情况下,hello 包发送间隔如下表:
网络类型 |
Hello间隔(秒) |
Dead间隔(秒) |
广播多路访问 |
10 |
40 |
非广播多路访问 |
30 |
120 |
点到点 |
10 |
40 |
点到多点 |
30 |
120 |
默认时Dead 间隔是Hello 间隔的四倍。可以在接口下通过“ip ospf hello-interval”和“ip ospf dead-interval”命令调整。
② 区域号码不一致;
③ 特殊区域(如stub,nssa等)区域类型不匹配;
④ 认证类型或密码不一致;
⑤ 路由器ID 相同;
⑥ Hello 包被ACL deny;
⑦ 链路上的MTU 不匹配;
⑧ 接口下OSPF网络类型不匹配
(2) show ip ospf database:查看动态链路数据库的所有LSA数据信息
R2#show ip ospf database
OSPF Router with ID (
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
以上输出是R2 的区域0 的拓扑结构数据库的信息,标题行的解释如下:
① Link ID:是指Link State ID,代表整个路由器,而不是某个链路;
② ADV Router:是指通告链路状态信息的路由器ID;
③ Age:老化时间;
④ Seq#:序列号;
⑤ Checksum:校验和;
⑥ Link count:通告路由器在本区域内的链路数目。