IP : 开放最短路径优先 (OSPF)

Cisco - 了解 OSPF 邻居问题

2015 年 8 月 28 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 4 月 22 日) | 反馈


目录


简介

本文件介绍了使开放最短路径优先(OSPF)邻居完全相邻过程中的较为常见的问题。如果成功形成 OSPF 邻接关系,OSPF 邻居将获得 FULL 邻居状态。

要检查邻接的形成情况,请发出 debug ip ospf adj 命令。在发出 debug 命令之前,请参阅有关 debug 命令的重要信息

先决条件

要求

本文件要求您对 IP 路由协议和 OSPF 路由协议有基本的了解。要了解有关 IP 路由协议的详细信息,请参阅路由基础知识。参考开放最短路径优先(OSPF)支持页面关于OSPF的更多信息。

使用的组件

本文档中的信息基于以下软件和硬件版本:

  • OSPF能够在任何路由器上配置,如 Cisco 2500系列、Cisco 2600系列和第三层交换机。

  • Cisco IOS�软件版本10.0和以上支持OSPF。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。

规则

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

邻接

路由器已经是邻居的事实并不足以保证链路状态更新的交换;它们必须形成邻接关系才能交换链路状态更新。邻接是路由器间形成的一种高级形式的邻居关系,在这个交换参数谈判结束后,邻接路由器之间愿意互相交换路由信息。同步链路状态数据库上的视图后,路由器之间将达成 FULL 状态的邻接关系。

接口类型是确定如何建立相邻关系的主要因素。例如,点对点链路上的邻居始终会尝试形成邻接,而连接在广播介质(如以太网)上的路由器可以选择只与接口上的一部分邻居路由器形成邻接。

一旦路由器决定与一个邻居形成相邻关系,首先应该交换链路状态数据库的完全复制。邻居也是一样,会轮流交换整个链路状态数据库。在经过多种邻居状态交换后,路由器间将建立相邻关系。

邻居状态

可以使用 show ip ospf neighbor 命令确定一个或多个 OSPF 邻居的状态。此命令的输出很可能会显示以下信息之一:

  • 什么也没有

  • state = down

  • 状态= init

  • state = exstart

  • state = exchange

  • state = 2-way

  • 状态=加载

也有其他的 OSPF 状态,但这里显示的状态是 show ip ospf neighbor 命令输出中最常见的几种。参考OSPF邻居状态欲知更多信息和所有OSPF邻居状态的说明。

没有状态显示

如果 show ip ospf neighbor 命令未显示任何内容,或未显示所分析的特定邻居的任何内容,则表明路由器尚未发现任何来自该邻居的“有效”OSPF HELLO。这意味着 OSPF 未接收到任何来自邻居的 HELLO 数据包,或者收到的 HELLO 数据包未通过最基本的健全性检查。

检查以下内容:

  • 本地路由器和邻居路由器上的接口是否为 up 并且线路协议也为 up?发出 show interface 命令进行检查。

  • 检查邻居路由器之间的 IP 连接,方法如下所示:

    • 邻居是否响应 ping 命令?在邻居路由器上对分配到相关接口的 IP 地址进行 ping 操作。向同一 IP 地址发出 traceroute 命令,检查它到达目标地址所需的跃点是否不超过一个。

    • 如果发出 ping 224.0.0.5 命令,邻居是否响应?(224.0.0.5 是 OSPF HELLO 发送的目标地址。)

    • 检查是否存在有可能阻止一个邻居向另一个邻居发送 IP 数据包的入站访问列表或其他设备(如交换机)。

  • 该接口(您的接口和相邻路由器的接口)上是否启动了 OSPF?发出 show ip ospf interface 命令进行检查。

  • 本地路由器或相邻路由器接口上的 OSPF 是否被配置为被动?发出 show ip ospf interface 命令验证是否已到时候将 HELLO 数据包从接口发送出去。主动 OSPF 接口会显示一行类似于以下内容的信息:

    Hello due in 00:00:07
  • 验证邻居路由器是否有不同的路由器 ID。路由器 ID 用于标识 OSPF 网络中的每个路由器。路由器 ID 相同的路由器将忽略相互间发送的 HELLO,这就会阻止它们形成邻接。show ip ospf 命令输出的第一行将显示每个路由器的当前路由器 ID。

  • 验证以下 HELLO 参数是否与邻居接口上的内容匹配:

    • OSPF 区域编号 - 发出 show ip ospf interface interface-name 命令进行检查。

    • OSPF 区域类型(如 stub 或 NSSA)- 发出 show ip ospf 命令进行检查。

    • 子网和子网掩码 - 发出 show interface 命令进行检查。

    • OSPF HELLO 和 Dead 计时器值 - 发出 show ip ospf interface interface-name 命令进行检查。

  • 如果问题出在点对点链路(如 PPP 或高级数据链路控制 [HDLC])上,并且这一对路由器之间有不止一条并行链路,则验证线路是否已正确连接。假设您计划将一个路由器上的 Serial0/0 接口与其邻居上的 Serial0/0 接口进行连接、Serial1/0 与邻居的 Serial1/0 连接,但您不小心将连接关系彼此交叉了,误将每个路由器的 Serial0/0 与另一个路由器的 Serial1/0 进行了连接。ping 命令可能会无法发现此类问题,但 OSPF 将无法建立邻接关系。请使用思科设备发现协议(CDP)提供的信息验证适当的设备互连。发出 show cdp neighbor interface-name 命令验证远程设备的名称和端口 ID 是否与网络设计相符。

注意: OSPF 邻接的形成仅发生在主网络上,而非辅助网络上。

如果已通过上述所有检查进行验证,但 show ip ospf neighbor 命令仍未显示任何内容,则表明此问题并不常见,您可能需要联系 Cisco 以获取帮助。

处于 down 状态的邻居

如果因为 OSPF 在 Dead 计时器间隔时间内未从邻居接收到 HELLO 数据包等原因导致邻居被删除,则通过接收 HELLO 数据包动态发现的邻居可能会退回到 down 状态。因此 down 状态对于此类邻居而言是临时性的;它们将会提升到更高的状态,或彻底从已知邻居表中删除。这称为被“忘记”。

通常,出现在 down 状态下的邻居是通过 neighbor 命令手动配置的。手动配置的邻居始终会出现在 OSPF 邻居表中。如果 OSPF 从未收到来自该手动配置邻居的 HELLO 数据包,或者如果在上述 Dead 计时器间隔时间内未发现来自该邻居的 HELLO 数据包,则会将该手动配置邻居列为 down。

注意: neighbor 命令仅可针对直接连接到以下类型网络上的邻居进行配置:

  • 非广播多路访问 (NBMA) 网络 - 通过 ip ospf network non-broadcast 命令配置的接口。

  • 非广播单点对多点网络 - 通过 ip ospf network point-to-multipoint non-broadcast 命令配置的接口。

如果看到邻居处于 down 状态,请验证该邻居路由器是否为 up 且正在运行,同时是否针对该接口上的 OSPF 正确地进行了配置。使用 ping 和 traceroute 命令测试路由器之间的连接。使用 show ip ospf neighbor 命令检查邻居路由器上的 OSPF 邻居表,并执行没有状态显示部分介绍的配置验证操作。

处于 init 状态邻居

init 状态表示路由器发现了来自邻居的 HELLO 数据包,但二者之间尚未建立双向通信。Cisco 路由器会在其 HELLO 数据包的 Neighbor 字段中显示所有处于 init 状态(或更高状态)邻居的路由器 ID。要与邻居建立双向通信,路由器还必须在邻居 HELLO 包的邻居字段中看到自己的路由器 ID。有关详细示例和说明,请参阅为什么 show ip ospf neighbor 命令显示邻居停滞在 Init 状态?

处于双向状态的邻居

2-way 状态表示路由器在邻居发送的 HELLO 数据包的 Neighbor 字段中看到了自己的路由器 ID。从处于 init 状态的邻居设备上收到数据库描述符 (DBD) 数据包也会使路由器转入 2-way 状态。OSPF 邻居 2-way 状态不是引起关注的原因。有关 2-way 状态的说明,请参阅为什么 show ip ospf neighbor 命令显示邻居停滞在 2-Way 状态?

处于 Exstart/Exchange 状态的邻居

处于 exstart 或 exchange 状态的 OSPF 邻居会尝试交换 DBD 数据包。路由器和邻居构成主从关系。此状态过后,它们将继续保持邻居关系。如果没有,则表示DBD交换发生问题,如最大传输单元(MTU)不匹配或接收到意外的DBD序列号。有关详细信息,请参阅为什么 OSPF 邻居停滞在 Exstart/Exchange 状态?

处于 loading 状态的邻居

在 loading 状态下,路由器将发送链路状态请求数据包。在保持邻接关系状态下,如果路由器接收到过期或丢失的链路状态通告(LSA),它将发送一个链路状态请求数据包来请求该LSA。没有经过这一状态的邻居很可能在交换失效的 LSA。此问题通常伴有 %OSPF-4-BADLSA 控制台消息。因为此问题并不常见,请联系 Cisco 以获取帮助。

OSPF 邻居问题的典型原因

下表列出了 OSPF 邻居在形成邻接时出现问题的原因,以及一些能够用来检查问题根源的命令。TAC案例收集(仅限注册用户)可也帮助诊断问题。

导致邻居邻接问题的原因 诊断问题的命令
一台路由器上没有配置 OSPF。 show ip ospf
需要 OSPF 的接口上没有激活 OSPF。 show ip ospf interface
OSPF HELLO or Dead 时间间隔参数不匹配。 show ip ospf interface
相邻接口上的 ip ospf network-type 不匹配。 show ip ospf interface
相邻的接口之间的MTU不匹配。 show interface <int-type><int-num>
一个邻居上的 OSPF 区域类型为 stub,但同一区域中相邻的邻居未配置 stub。 show running-config show ip ospf interface
使用相同的路由器 ID 对 OSPF 邻居进行了错误配置。 show ip ospf show ip ospf interface
OSPF 配置在邻居的辅助网络上,而非主网络上。这是一种非法配置,会阻止 OSPF 在接口上的启用。 show ip ospf interface show running-config
OSPF HELLO 因为缺少资源而未得到处理,比如 CPU 使用率高或内存不足。 show memory summary show memory processor
底层问题使 OSPF Hello 无法通过。 show interface

注意: 为了MTU检查的aviod,当您设立OSPF邻接时,您可能需要配置ip ospf mtu-ignore命令在接口配置模式。

相关的思科支持社区讨论

思科支持社区是您提问、解答问题、分享建议以及与工作伙伴协作的论坛。


相关信息


Document ID: 13699