router ospf命令
 
OSPF 通过 router ospf process-id 全局配置命令启用。process-id 是一个介于 1 和 65535 之间的数字,由网络管理员选定。process-id仅在本地有效,这意味着路由器之间建立相邻关系时无需匹配该值。这一点与 EIGRP 不同。EIGRP 进程 ID(即自治系统编号)必须 匹配,两个 EIGRP 邻居才能建立相邻关系。
在我们的拓扑中,将使用相同的进程 ID 1 在全部三台路由器上启用 OSPF。之所以使用相同的进程 ID,只是为了取得一致。
R1(config)#router ospf 1
R1(config-router)#
network 命令
 
OSPF 中的 network 命令与其它 IGP 路由协议中的 network 命令具有相同的功能:
.路由器上任何符合 network 命令中的网络地址的接口都将启用,可发送和接收 OSPF 数据包。
.此网络(或子网)将被包括在 OSPF 路由更新中。

network 命令在路由器配置模式中使用。
Router(config-router)#network network-address wildcard-mask areaarea-id
 
OSPF network 命令所用的network-address 和wildcard-mask参数与 EIGRP 所用的参数相似,不同的是,OSPF 需要通配符掩码。网络地址和通配符掩码一起,用于指定此 network 命令启用的接口或接口范围。
就像在 EIGRP 中一样,通配符掩码可配置为子网掩码的反码。例如,R1 的 FastEthernet 0/0 接口位于 172.16.1.16/28 网络中。此接口的子网掩码为 /28,即 255.255.255.240。该子网掩码的反码即为通配符掩码。
注:某些 IOS 版本的 OSPF 与 EIGRP 一样,只需输入子网掩码,而不用通配符掩码。随后,IOS 会将子网掩码转转换为通配符掩码格式。
255.255.255.255
- 255.255.255.240 减去子网掩码
---------------
0. 0. 0. 15 通配符掩码
area area-id 指 OSPF 区域。OSPF 区域是共享链路状态信息的一组路由器。相同区域内的所有 OSPF 路由器的链路状态数据库中必须具有相同的链路状态信息,这通过路由器将各自的链路状态泛洪给该区域内的其它所有路由器来实现。配置一个区域内的所有 OSPF 路由器,这称为单区域 OSPF。
 
OSPF 网络也可配置为多区域。将大型 OSPF 网络配置为多区域有很多好处,例如,可减小链路状态数据库,还可以将不稳定的网络问题隔离在一个区域之内。
 
如果所有路由器都处于同一个 OSPF 区域,则必须在所有路由器上使用相同的 area-id 来配置 network 命令。尽管可使用任何 area-id,但比较好的做法是在单区域 OSPF 中使用area-id 0。此惯例便于以后将该网络配置为多个 OSPF 区域,从而使区域 0 变成主干区域。
 
图示为在所有三台路由器的所有接口上启用 OSPF 时所用的 network 命令。此时,所有路由器应该能够成功地 ping 所有网络。
 
ospf router id
 
确定路由器 ID
OSPF 路由器 ID 用于唯一标识 OSPF 路由域内的每台路由器。一个路由器 ID 其实就是一个 IP 地址。Cisco 路由器按下列顺序根据下列三个条件确定路由器 ID:
1. 使用通过 OSPF router-id 命令配置的 IP 地址。
2. 如果未配置 router-id,则路由器会选择其所有环回接口的最高 IP 地址。
3. 如果未配置环回接口,则路由器会选择其所有物理接口的最高活动 IP 地址。
最高活动 IP 地址
如果 OSPF 路由器未使用 OSPF router-id 命令进行配置,也未配置环回接口,则其 OSPF 路由器 ID 将为其所有接口上的最高活动 IP 地址。该接口并不需要启用 OSPF,就是说不需要将其包括在 OSPF network 命令中。然而,该接口必须活动 — 它必须处于工作状态。
 
检验路由器 ID
因为我们未在这三台路由器上配置路由器 ID 和环回接口,所以每台路由器的路由器 ID 通过列表中的第三个条件确定:路由器的所有物理接口的最高活动 IP 地址。
基本ospf的配置_职场
如图所示,每台路由器的路由器 ID 为:
R1:192.168.10.5,该地址比 172.16.1.17 和 192.168.10.1 高
R2:192.168.10.9,该地址比 10.10.10.1 和 192.168.10.2 高
R3:192.168.10.10,该地址比 172.16.1.33 和 192.168.10.6 高
您可用于验证路由器 ID 的一个命令为 show ip protocols。某些 IOS 版本并不象图中所示那样显示路由器 ID。在那些情况下,请使用 show ip ospf 或 show ip ospf interface 命令检验路由器 ID。
 
环回口 router id
基本ospf的配置_休闲_02
 
环回地址
如果未使用 OSPF router-id 命令,但配置了环回接口,则 OSPF 将选择其所有环回接口的最高 IP 地址。环回地址是一种虚拟接口,配置后即自动处于工作状态。您已经学过用于配置环回接口的命令:
Router(config)#interface loopback number
Router(config-if)#ip address ip-address subnet-mask
 
OSPF router-id 命令
OSPF router-id 命令在 IOS 12.0(T) 中引入,且在用于确定路由器 ID 时优先于环回接口和物理接口 IP 地址。命令语法为:
Router(config)#router ospf process-id
Router(config-router)#router-id ip-address
修改路由器 ID
路由器 ID 在您使用第一个 OSPF network 命令配置 OSPF 时选定。如果配置了 OSPF router-id 命名或环回地址(在 OSPF network 命令之后),路由器 ID 将来自具有最高活动 IP 地址的接口。
路由器 ID 可使用来自后续 OSPF router-id 命令的 IP 地址来修改,但必须通过重新加载路由器或使用下列命令来实现:
Router#clear ip ospf process
 
注:使用新的环回接口或物理接口 IP 地址修改路由器 ID 可能需要重新加载路由器。
重复的路由器 ID
当同一个 OSPF 路由域内的两台路由器具有相同的路由器 ID 时,将无法正常路由。如果两台相邻路由器的路由器 ID 相同,则无法建立相邻关系。当出现重复的 OSPF 路由器 ID 时,IOS 将显示一条类似下列的消息:
%OSPF-4-DUP_RTRID1:Detected router with duplicate router ID
要纠正此问题,请配置所有路由器,使得每台路由器都具有唯一的 OSPF 路由器 ID。
 
验证ospf
 
show ip ospf neighbor 命令可用于验证 OSPF 相邻关系并排除相应的故障。此命令为每个邻居显示下列输出:
.Neighbor ID — 该相邻路由器的路由器 ID。
.Pri — 该接口的 OSPF 优先级。
.State — 该接口的 OSPF 状态。FULL 状态表明该路由器和其邻居具有相同的  OSPF 链路状态数据库。
.Dead Time — 路由器在宣告邻居进入 down(不可用)状态之前等待该设备发送 Hello 数据包所剩余的时间。此值在该接口收到 Hello 数据包时重置。
.Address — 该邻居用于与本路由器直连的接口的 IP 地址。
.Interface — 本路由器用于与该邻居建立相邻关系的接口。
当排除 OSPF 网络故障时,show ip ospf neighbor 命令可用于验证该路由器是否已与其相邻路由器建立相邻关系。如果未显示相邻路由器的路由器 ID,或未显示 FULL 状态,则表明两台路由器未建立 OSPF 相邻关系。如果两台路由器未建立相邻关系,则不会交换链路状态信息。链路状态数据库不完整会导致 SPF 树和路由表不准确。通向目的网络的路由可能不存在或不是最佳路径。
注:在诸如以太网等多路访问网络中,相邻的两台路由器可能将它们的状态显示为 2WAY。
在下列情况下,两台路由器不会建立 OSPF 相邻关系:
 
.子网掩码不匹配,导致该两台路由器分处于不同的网络中。
.OSPF Hello 计时器或 Dead 计时器不匹配。
.OSPF 网络类型不匹配。
.存在信息缺失或不正确的 OSPF network 命令。
 
 
其它功能强大的 OSPF 故障排除命令包括:
show ip protocols
show ip ospf
show ip ospf interface
基本ospf的配置_休闲_03
如图所示,show ip protocols 命令可用于快速验证关键 OSPF 配置信息,其中包括 OSPF 进程 ID、路由器 ID、路由器正在通告的网络、正在向该路由器发送更新的邻居以及默认管理距离(对于 OSPF 为 110)。
基本ospf的配置_职场_04
show ip ospf 命令也可用于检查 OSPF 进程 ID 和路由器 ID,此外,还可显示 OSPF 区域信息以及上次计算 SPF 算法的时间。您在示例输出中可看到,OSPF 是一种非常稳定的路由协议。在过去的十一个半小时中,R1 所参与的唯一一个与 OSPF 相关的事件是向其邻居发送了一些小型 Hello 数据包。
 
命令输出包含重要的 SPF 算法信息,其中包括 SPF 计划延时:
Initial SPF schedule delay 5000 msecs
Minimum hold time between two consecutive SPFs 10000 msecs
Maximum wait time between two consecutive SPFs 10000 msecs
路由器每次收到有关拓扑的新信息(链路添加、删除或修改)时,必须重新运行 SPF 算法,创建新的 SPF 树,并更新路由表。SPF 算法会占用很多 CPU 资源,且其耗费的计算时间取决于区域大小。区域大小通过路由器数量和链路状态数据库来衡量。
状态在 up 和 down 之间来回变化的网络称为链路不稳。链路不稳会导致区域内的 OSPF 路由器持续重新计算 SPF 算法,从而无法正确收敛。为尽量减轻此问题,路由器在收到一个 LSU 后,会等待 5 秒(5000 毫秒)才运行 SPF 算法。这称为 SPF 计划延时。为防止路由器持续运行 SPF 算法,还存在一个 10 秒(10000 毫秒)的保留时间。路由器运行完一次 SPF 算法后,会等待 10 秒才再次运行该算法。

基本ospf的配置_休闲_05
用于检验 Hello 间隔和 Dead 间隔的最快方法为使用 show ip ospf interface 命令。如图所示,将接口名称和编号添加到该命令中即可显示特定接口的输出。这些间隔包括在邻居之间相互发送的 OSPF Hello 数据包中。OSPF 在不同接口上可能具有不同的 Hello 间隔和 Dead 间隔,但要使 OSPF 路由器建立相邻关系,它们的 OSPF Hello 间隔和断路间隔必须相同。例如,在图中,R1 在其 Serial 0/0/0 接口上所用的 Hello 间隔为 10,Dead 间隔为 40。R2 也必须在其 Serial 0/0/0 接口上使用相同的间隔,才能和 R1 建立相邻关系。
 
 
检查路由表
 
show ip route 命令可用于检验路由器是否正在通过 OSPF 发送和接收路由。每条路由开头的 O 表示路由来源为 OSPF。与 RIPv2 和 EIGRP 不同的是,OSPF 不会自动在主网络边界总结。无类是 OSPF 的固有属性。
 
ospf 度量
 
OSPF 度量称为开销。RFC 2328 中有下列描述:“开销与每个路由器接口的输出端关联。系统管理员可配置此开销。开销越低,该接口越可能被用于转发数据流量。”
请注意,RFC 2328 并未指定使用哪些值来确定开销。
Cisco IOS 使用从路由器到目的网络沿途的传出接口的累积带宽作为开销值。在每台路由器上,接口的开销通过 10 的 8 次幂除以以 bps 为单位的带宽值算得。该被除数称为参考带宽。通过使用 10 的 8 次幂除以接口带宽,可使带宽较高的接口算得的开销值较低。请记住,在路由度量中,开销最低的路由是首选路由(例如,在 RIP 中,3 跳比 10 跳好)。
基本ospf的配置_休闲_06
图示为各种接口的默认 OSPF 开销。
 
参考带宽
参考带宽默认为 10 的 8 次幂,即 100,000,000 bps,亦即 100 Mbps。这使带宽等于或大于 100 Mbps 的接口具有相同的 OSPF 开销 1。可使用 OSPF 命令 auto-cost reference-bandwidth 修改参考带宽值以适应链路速度高于 100,000,000 bps (100 Mbps) 的网络。如果需要使用此命令,则建议同时用在所有路由器上,以使 OSPF 路由度量保持一致。
 
OSPF 累计开销
基本ospf的配置_休闲_07
OSPF 路由的开销为从路由器到目的网络的累计开销值。例如,在图中,R1 的路由表显示到 R2 上的网络 10.10.10.0/24 的开销为 65。因为 10.10.10.0/24 连接到以太网接口,R2 将 10.10.10.0/24 的开销指定为 1。R1 随后加上在 R1 和 R2 之间通过默认 T1 链路发送数据所需的开销值 64。
 
串行接口的默认带宽
 
串行接口的默认带宽
之前我们学过,可使用 show interface 命令查看接口所用的带宽值。在 Cisco 路由器上,许多串行接口的带宽值默认为 T1 (1.544 Mbps)。然而,某些串行接口可能默认为 128 kbps。因此,切勿假定 OSPF使用的带宽为某一特定值,而应使用 show interface 命令检查默认值。
请记住,此带宽值实际上并不影响链路速度,而是由某些路由协议用来计算路由度量。在串行接口上,链路的实际速度很可能不同于默认带宽。带宽值必须反映链路的实际速度,路由表才具有准确的最佳路径信息。例如,Internet 服务提供商为您提供的可能是一个部分 T1 连接,其带宽为全 T1 连接带宽的四分之一 (384 kbps)。然而,出于路由协议的目的,即使接口实际上是以全 T1 连接带宽的四分之一 (384 kbps) 发送和接收数据,IOS 也会假定为 T1 带宽值。
基本ospf的配置_休闲_08
图示为 R1 的 Serial 0/0/0 接口的输出。现在拓扑也显示了这两台路由器间的链路的实际带宽。请注意,R1 的命令输出中的默认带宽值为 1544 kbps。然而,此链路的实际带宽值却为 64 kbps。这意味者路由器上的路由信息并未反映网络拓扑的实际情况。
基本ospf的配置_ospf_09
图示为 R1 的路由表。R1 认为其两个串行接口都连接到了 T1 链路,实际上一条是 64 kbps 的链路,另一条是 256 kbps 的链路。这导致 R1 的路由表中具有通向网络 192.168.8.0/30 的两条开销相等的路径,而实际上 Serial 0/0/1 路径更好一些。
O 192.168.10.8 [110/128] via 192.168.10.6, 00:03:41, Serial0/0/1
[110/128] via 192.168.10.2, 00:03:41, Serial0/0/0
基本ospf的配置_职场_10
可使用 show ip ospf interface 命令验证算得的接口 OSPF 开销。在图中,我们可验证,R1 实际上为 Serial 0/0/0 接口指定了开销值 64。尽管您可能认为这是正确的开销值,原因在于此接口连接到 64 kbps 的链路,但请记住,开销值是由开销公式算得的。64 kbps 链路的开销值为 1562 (100,000,000/64,000)。所显示的值 64 是 T1 链路的开销值。
 
修改链路的开销
如果串行接口的实际工作速率不是默认 T1 速率,则需要手动修改该接口的速率。链路的两端应该配置为相同值。bandwidth 接口命令或 ip ospf cost 接口命令都可用于达到此目的 — 使 OSPF 在确定最佳路由时使用准确的值。
bandwidth 命令
bandwidth 命令用于修改 IOS 在计算 OSPF 开销度量时所用的带宽值。
Router(config-if)#bandwidth bandwidth-kbps
基本ospf的配置_休闲_11
图示为用于修改拓扑中所有串行接口开销值的 bandwidth 命令。对于 R1,show ip ospf interface 命令现在显示 Serial 0/0/0 链路的开销值为 1562,此值由 Cisco OSPF 开销计算而得 (100,000,000/64,000)。
 
 
ip ospf cost 命令
除 bandwidth 命令外,另一种方法是使用 ip ospf cost 命令,该命令可用于直接指定接口开销。例如,我们可以在 R1 上使用下列命令配置 Serial 0/0/0 接口:
R1(config)#interface serial 0/0/0
R1(config-if)#ip ospf cost 1562
显然,这不会改变 show ip ospf interface 命令的输出,该输出仍会显示开销为 1562。这与您将带宽配置为 64 时由 IOS 算得的开销相同。
bandwidth 命令与 ip ospf cost 命令比较
ip ospf cost 命令适用于使用了多个厂商的设备的环境,在该环境中,非 Cisco 路由器所用的度量并非用于计算 OSPF 开销的带宽值。这两个命令之间的主要差异在于 bandwidth 命令使用开销计算的结果确定链路开销。ip ospf cost 命令则直接将链路开销设置为特定值并免除了计算过程。
基本ospf的配置_休闲_12
图示为可用于修改拓扑中串行链路开销的两种可选方案。图中右侧显示 ip ospf cost 命令方案,左侧显示 bandwidth 命令方案。