配置 OSPF的接口网络类型:
[RouterB-Serial0] ospf network-type {broadcast | nbma | p2mp|p2p}
OSPF根据接口封装链路层协议的不同类型,将网络分为下列几种类型:
当链路层协议是 Ethernet时,OSPF缺省认为网络类型是 broadcast。
当链路层协议是帧中继、 HDLC、 X.25时, OSPF缺省认为网络类型是 NBMA。
没有一种链路层协议会被缺省的认为是 p2mp 类型,通常在 NBMA 类型的网
络不是全连通的情况下,将其手工修改为 p2mp。
当链路层协议是 PPP、LAPB时,OSPF缺省认为网络类型是 p2p。
在没有多址访问能力的广播网上,可将接口配置成 nbma类型。
若在NBMA网络中并非所有路由器之间都直接可达时, 可将接口配置成 p2mp类型。
若该路由器在 NBMA网络中只有一个对端,则也可将接口类型改为 p2p类型。
NBMA网络与点到多点网络类型之间的区别:
在 NBMA网络中要选举 DR与 BDR;而在点到多点网络中,无需选举 DR与
BDR。
OSPF排错步骤
(1) 配置故障处理:检查是否已经启动并正确配置了 OSPF协议。
(2) 局部故障处理:检查两台直接相连的路由器之间协议运行是否正常。
(3) 全局故障处理:检查系统设计(主要是指区域的划分)是否正确。
(4) 其它疑难问题:路由时通时断、路由表中存在路由却无法 ping 通该地址。需要针对不同的情况具体分析。
1. 协议基本配置是否正确
(1) 是否已经配置了 Router ID
使用命令 router id Router-id进行配置;使用 dis ospf查询配置的 RouterID 。Router-id 可以配置为与本路由器一个接口的 IP 地址相同,需要注意的是:不能有任何两台路由器的 Router ID是完全相同的。
(2) 检查 OSPF协议是否已成功地被激活
使用命令 ospf enable启动协议的运行。该命令是协议正常运行的前提。
(3) 检查需要运行 OSPF的接口是否已配置属于特定的区域
使用命令 ospf enable area 将接口配置属于特定区域。可通过命令 display ospf interface interfacename来查看该接口是否已经配置成功。
(4) 检查是否已正确地引入了所需要的外部路由。
实际运行中可能经常需要引入自治系统外部路由(其他协议如 BGP或静态路由)。如果需要,是否已经通过命令 import-route 配置了引入。
2. 邻居路由器之间的故障
在两台路由器上分别执行 display ospf peer 命令,查看在相应的接口上是否已发现对端路由器为自己的邻居,并且邻居状态机达到 Full 状态。 需要注意的是:在Broadcast和 NBMA类型的网络中, 两台接口状态是 DROther的路由器之间邻居状态机停留在“2-Way”状态,这是正常的,但都应该与 DR 之间达到 Full 状态。两台路由器之间达到 Full需要一定的时间,一般在几秒钟至 3分钟之间为正常。如果超过这段时间仍旧没有发现邻居或没有达到 Full 状态,则可以判断为出现故障。若出现故障可按下列几点来检查:
(1) 检查物理连接及下层协议是否正常运行。
OSPF正常运行需要下层协议来发送和接收报文, 所以必须确保下层协议运行无误。可通过 ping命令测试,若从本地路由器 ping对端路由器不通,则表明物理连接和下层协议有问题。但需要注意的是:ping命令发送的是单播报文,而OSPF除了在NBMA类型的接口之外, 都发送多播报文。 所以除了能够ping通对端之外,还必须具有能够收发多播报文的能力。
(2) 检查双方在接口上的配置是否一致
如果物理连接和下层协议正常,则检查在接口上配置的 OSPF 参数,必须保证配置的参数和与该接口相邻的路由器的参数一致。这些参数包括 hello-interval, dead-interval 和 authentication。区域(area)号必须相同。网段与掩码也必须一致(点到点与虚连接的网段与掩码可以不同)。这些错误可以通过命令 display ospf error来查看。
(3) hello-interval与 dead-interval之间的关系
按照协议规定,接口上的 dead-interval 的值必须大于 hello-interval,并且至少在 4倍以上。否则的话会引起邻居状态之间的震荡。
(4) 若网络的类型为广播或 NBMA,至少有一台路由器的 priority应大于零。 协议规定,接口的 priorty = 0 的路由器没有被选举权,即不能被选为 DR或BDR。而在广播或 NBMA类型网络中所有的路由器只与 DR之间交换路由信息,所以至少应有一台路由器的 priority大于零。
(5) 区域的 STUB属性必须一致
如果一个 AREA 配置成 STUB AREA,则在与这个区域相连的所有路由器中都应将该区域配置成 STUB AREA。
(6) 接口的网络类型必须一致
两台直接相连的路由器,它们之间的接口的网络类型必须一致。否则可能无法正确计算出路由。 查看接口的网络类型可以使用命令display ospf interface,如果发现双方类型不一致,可使用接口配置模式下的命令 ospf network-type 来修改。需要特别注意的是:当两台路由器的接口类型不一致时,双方的邻居状态机仍旧有可能达到 Full状态,但无法正确计算路由。
(7) 在 NBMA类型的网络中是否手工配置了邻居
协议规定在 NBMA 类型的网络中发送单播报文,这样就不能通过发送多播报文来动态发现邻居,所以必须手工指定邻接点的 IP地址。
3. 系统规划的故障
如果自治系统被划分成一个以上的区域,则必须有一个区域是骨干区域,并且保证其它区域与骨干区域直接相连或逻辑上相连,且骨干区域自身也必须是连通的。
4. 其它疑难杂症
如果经过以上分析之后,仍无法定位错误产生的原因,可继续按以下步骤查找。
(1) 路由表中丢失部分路由:
可以查询一下是否本路由器配置了路由过滤。 可查看是否配置了命令 filter-policy(在OSPF 协议配置模式下)。如果配置,再查询 acl 中的访问规则,是否丢失的路由恰好是访问列表中所过滤的。
(2) 路由表不稳定,时通时断:
表现形式为:路由表中的部分或者全部路由表现不稳定,一会儿加上了,一会儿又丢失,且变化很快。这种错误不太好分析,可能由以下几种原因产生:
网络中线路质量不好, 导致线路时通时断, 造成 OSPF的路由随之不停的更改。可以通过检查相应的链路层协议是否正常来定位问题的原因。
在拨号的情况下,如果是多台路由器同时拨一台路由器时,应将所有的这些拨号的接口类型改为 point-to-multipoint。因为缺省的网络类型是 point-to-point,如果不加更改的话,当有多台路由器同时拨入时,接入方会在这些拨入的路由器之间不停的选择其中的一个并建立邻接关系。导致路由不稳定。
有可能是自治系统中有两台路由器的 Router ID相同了。协议中规定,一台路由器的 Router ID应该在整个自治系统中唯一。 如果有两台路由器的 Router ID相同,协议运行就会出现故障。这两台路由器如果是邻居,在相互接收对方的hello 报文时会检测到这一错误,导致无法建立邻接关系。如果这两台路由器不是直接相连,而是分别位于自治系统中的两个不同的地方,则表现出的现象是部分路由时断时通。 可以通过查看这部分不正常的路由所属的路由器来定位此问题。
(3) 无法引入自治系统外部路由:
某台路由器引入了自治系统外部路由后,却无法在其它路由器上发现这些路由。则很可能是由于本路由器处于一个 STUB区域之内,因为按照协议规定,STUB区域内不传播 Type5类型的 LSA。所以这种类型的 LSA既不能由区域外传播进来,也同样不能由区域内传播出去。实际上即使是同一个区域内的其它路由器也无法获得这些路由信息。
(4) 区域间路由聚合的问题:
通过在 ABR 上配置路由聚合可以大大减少自治系统中的路由信息,但如果配置不当,也会出现问题(略)
与OSPF故障相关的display、debugging命令
display ospf 、 display ospf peer、display ospf interface
display ospf error
display ospf error显示错误解释
错误现象 错误原因
OSPF: bad area id 两个接口不在同一个网段;
OSPF: area mismatch 两个接口所属的区域不相同;
OSPF: bad virtual link 错误的虚连接报文:本端未配置虚连接;报文的发送方不是本端所指定的邻居;transit-area不相同;
OSPF: bad authentication type 两个接口的验证类型不相同;
OSPF: bad authentication key 两个接口的验证字不相同;
HELLO: netmask mismatch 对端路由器与本路由器相连接口的IP地址的掩码不同;
HELLO: hello timer mismatch 两个接口的hello-interval不相同;
HELLO: dead timer mismatch 两个接口的dead-interval不相同;
HELLO: extern option mismatch 两台路由器其中一台将该接口所属的区域配置成 stub 区域,而另一台没有;
HELLO: router id confusion 两台路由器的Router ID相同;