Open Shortest Path First (OSPF) Basics
开放式最短路径优先(OSPF)是一个开放性标准的路由选择协议,它能够支持许多不同厂商的路由器,包括思科的。如果你有许多路由器并且不全全部是思科的,那么你就不能使用EIGRP!这样你就只剩下了RIPv1,RIPv2或者OSPF三个选择了。如果是一个大的网络,那么,你就只剩下唯一一个OSPF能够选择了,或者你使用路由重新分配(redistribution)-------一个在路由协议间提供转换的服务。
OSPF使用Dijkstra算法,首先形成一个最短路径树,然后选择最好的路由放进路由表。OSPF聚合非常快(虽然可能没有EIGRP那么快),并且支持多条等价的到达目标的路由,但是不象EIGRP,OSPF只支持IP路由。
OSPF提供了以下特性:
·由区域和自治系统组成
·极小的路由更新流量
·提供可扩缩性
·支持VLSM/CIDR
·有无限的跳数
·能够支持不同厂商的设备(因为是开放性的标准)
OSPF是一个纯链路状态的路由协议。所以把它跟传统的距离向量协议如RIP进行一个比较是非常有用的:
OSPF有许多新特性,我已经在表6.3中列出来了。这些特性构成了一个快速的,可缩放的和健壮的协议,这个协议在许多实际工作网络中被使用。
OSPF被假定设计为一个层次性的方式。这通常意味着你可以把一个大的网络分割成许多小的互连网络(叫做区域)。这是OSPF最好的特点。
把OSPF设计为层次性的原因如下:
·减少路由开销
·加快聚合速度
·把网络的不稳定性限制在单一的区域里
这些使得配置OSPF不是那么容易而是更加精确和困难。
图6.4显示了一个典型的OSPF的简单设计:
注意到每一个区域的路由器都连接到主干---叫做area 0或者主干区域。
OSPF必须有一个区域0(area 0),然后其他的路由器必须尽可能连接上这个区域0。连接其他区域到主干区域的路由器叫做区域边界路由器(ABRs,Area Border Routers),ABR必须至少有一个接口在区域0内。OSPF在一个自治系统内运行,但也能够连接多个自治系统,连接其他自治系统到一起的路由器叫做自治系统边界路由器(Autonomous system Boundary router,ASBR)。
事实上,你要创建其他的网络区域来最小化路由更新的数量并且把问题故障限制在一个区域里而不能影响到整个网络。但是这超出了本书的内容,我们这里只学习单一区域。
OSPF Terminology
象学习EIGRP一样,学习之前我要先介绍几个关键的术语概念:
Link:一个链接是把一个网络或者路由器接口分配到特定的网络。在OSPF进行处理时一个路由器接口被认为是一个链接。这个链接或者说接口将有关联的状态信息(up or down),和一个甚至多个ip地址。
Router ID:路由器ID(RID)是一个用来鉴别路由器的ip地址。思科选择所有已配置的环回(loopback)接口中ip地址最高(或者说最大,跟我们10进制说的大小一样)的那个ip作为RID;如果没有配置任何环回接口,那么OSPF选择所有活动的物理接口中最高的ip地址的作为RID。
Neighbors:邻居,两个或者多个路由器有接口在同一网络上,那么这些路由器就成了邻居。例如两个路由器通过一条point-to-point串行线路连接在一起。
Adjacency:邻接是两个OSPF路由器之间的关系,邻接的路由器允许直接交换路由更新信息。OSPF在分享路由信息的时候非常挑剔,不象EIGRP那样把路由信息和所有的邻居分享,而是仅仅在建立了邻接关系的邻居路由器之间分享路由信息。不是所有的邻居都能建立邻接关系的,这依靠网络的类型和路由器的配置来决定。
Hello protocol:OSPF Hello协议提供了动态发现邻居和维护邻居关系的能力。Hello数据包和链路状态通告(Link State Advertisements ,LSAs)建立和维护拓扑数据库。OSPF的Hello数据包通过ip地址224.0.0.5发送。
Neighborship database:邻居数据库,是一列Hello数据包发现的OSPF路由器,里面包含了许多详细的资料如RID,邻居状态等。
Topology database:拓扑数据库包含了在一个区域内接收到的所有LSA数据包中的信息。路由器从拓扑数据库中取出信息放到Dijkstra算法进行计算以得出达到每个网络的最好路径。
注意:LSA数据包被用来更新和维护拓扑数据库。
Link State Advertisement:链路状态通告,是一个OSPF的数据包,里面包含了在路由器间共享的链路状态和路由选择信息。LSA数据包分几种类型,等下我再进行说明。一个OSPF路由器只在和它建立了邻接关系的路由器之间交换LSA数据包。
Designated router:被指定路由器(DR),只要OSPF路由器连接在一个多路访问网络(思科经常叫做广播网络)上,那么就要选出一个DR。
一个主要的例子是以太局域网(Ethernet LAN),为了最小化邻接关系的数量,DR被选举出来发送/接收路由信息,以保证全部路由器的拓扑数据库的同步。这样,在广播网络中的其它路由器必须和DR以及BDR建立邻接关系。DR的选择跟路由器的最高优先级和RID有关,如果优先级相同那么由RID来决定。
Backup designated router:被指定路由器的备份路由器,BDR从相邻的OSPF路由器那里接收所有的路由信息,但不发送LSA更新。
OSPF areas:OSPF区域是一个连续网络和路由器的分组。在同样区域里的所有路由器使用相同的Area ID。因为一个路由器可能同时处在不同的区域内,所以Area ID被关联到特定的接口,这样路由器就可能有一些接口属于area1而另外的接口属于area0。在同一区域内的所有路由器都有一个同样的拓扑数据库。当你配置OSPF的时候记得必须要有一个area0,这是因为通常都要把路由器配置为连接到主干网络。区域在建立一个层次性网络的时候扮演了一个主要角色。层次性的网络实际上增强了OSPF的可伸缩性。
Broadcast (multi-access):广播(或者多路访问)网络例如以太网允许许多设备连接到相同的网络,也提供了一个“广播”的能力:一个数据包被发送到网络上的所有节点。在OSPF中,每一个广播多路访问网络都要选出一个DR和BDR。
Non-broadcast multi-access:非广播多路访问(NBMA)网络的类型有Frame Relay,X.25,和异步传输模式(Asynchronous Transfer Mode ,ATM)等。这些网络允许多路访问,但是没有象以太网那样的广播能力。所以NBMA网络需要特殊的OSPF配置来提供适当的功能并且邻居关系也要定义。
Point-to-point:点到点是一种网络拓扑结构,它由两个直接相连的路由器组成,提供了单一的通信路径。点到点的连接可以是物理性的,如通过一条串行缆线来直接连接两个路由器;或者也可以是逻辑性的,如两个路由器相隔数千米然后通过Frame Relay网络种的一条线路来连接起来。另外,这种类型的网络避免了使用DR或者BDR,它是自动发现邻居的。
Point-to-multipoint:点到多点这种网络拓扑结构是在一个路由器上的一个接口和多个目的路由器之间的一系列连接组成的。和点到点一样,不需要DR和BDR!
上面这些概念对于你理解OSPF的运行很重要,所以你一定要确定你已经熟悉这些术语概念了。
SPF Tree Calculation
在一个区域内每个路由器计算到达在同一区域里其他的网络的最短/好的路径。这个计算基于从拓扑数据库里选择的信息和一个叫做SPF(shortest path first)的算法。把区域里的每个路由器画成一棵树,你会发现这很象一个族谱,有一个路由器作为根(root),其它的路由器则分布散开出去。这是为什么路由器用最短路径树来添加路由进路由表的原因。
要知道这棵树只包含了一个网络,这个网络要在相同的区域。如果一个路由器有接口在多个区域里,那么每个区域都要有单独的树。
SPF算法在选择路由的处理过程中有一个关键的标准要考虑,那就是每条可能到达目标网络路径的度或者开销。但这个SPF的计算跟其他区域的路由无关,也就是说不计算其它区域的路由。
OSPF使用一个度叫做开销(cost),开销跟每一个包含在SPF树上的输出接口有关。路径的全部开销是路径上每一个输出接口的开销之和。因为cost在RFC2338中定义为一个任意的数值,所以思科使用自己的方法来计算每一个OSPF接口的开销:一个简单的等式10的8次方除以接口带宽。接口带宽是在接口上配置的带宽而不是实际线路输送数据的带宽。根据这个规则,一个100Mbps的快速以太网接口的默认OSPF cost是1,而一个10Mbps以太网接口的cost是10。
注意:如果一个接口设置了带宽为64000bps,那么它的cost开销就是1563。
可以通过ip ospf cost命令来改变cost的数值,这个数值的范围在1--65535间。因为cost被分配到每条链接,所以必须在你想改变cost的接口上来改变cost数值。
Configuring OSPF
配置OSPF不象RIP,IGRP,EIGRP那么简单,并且当OSPF使用了许多条件参数后可能配置会变得相当复杂。幸好,我们的学习只需要把注意力放在单一区域的OSPF的配置上。下面的部分描述了怎样配置一个单一区域的OSPF。
配置OSPF,有两个基本的要点:
·启动OSPF
·配置OSPF的区域
Enabling OSPF
启动OSPF的命令很简单:
Lab_A(config)#router ospf ?
<1-65535>
在1-65535间的数值范围标明了OSPF的Process ID。它是标明在这个路由器上一系列OSPF配置中的一个特定运行过程的唯一的号码。不同的OSPF路由器不一定要使用相同的Process ID来维持通信。Process ID完全是一个本地的标记,只有一小点的意思。但是Process ID不能从0开始,它必须最小从1开始。
你可以在一个路由器上同时运行多个OSPF进程,但这个不等于运行多区域OSPF。第二个进程将建立一个单独的拓扑数据库并独立地管理通信。由于CCNA考试只要求一个单区域的OSPF和每个路由器上只运行单一的OSPF进程,所以我们只注意这个就可以了。
Configuring OSPF Areas
在指定了OSPF的进程之后,你需要指定你想要进行OSPF通信的接口,和这个接口对应的区域号码。这将把你配置的网络通告给其他的网络。OSPF在配置中使用反掩码(也叫通配符),在访问控制列表(access-list)中同样使用使用反掩码,访问列表我们将在第十章学习。
Lab_A#config t
Lab_A(config)#router ospf 1
Lab_A(config-router)#network 10.0.0.0 0.255.255.255 area ?
<0-4294967295> OSPF area ID as a decimal value
A.B.C.D OSPF area ID in IP address format
Lab_A(config-router)#network 10.0.0.0 0.255.255.255 area 0
注意:区域号码可以是0到42亿之间的任意号码。不要把这个区域号码跟进程ID搞混了,Process ID的范围是1到65535。
记住,OSPF的进程ID是不相关的,你可以在同一网络的所有路由器上配置相同的进程ID也可以不同,都没有关系的。它只是一个本地的标记并只是在路由器上启动OSPF路由选择而已。
重点在network命令配置的网络号码10.0.0.0和反掩码0.255.255.255。这两个结合起来告诉了OSPF该怎样处理这个接口,而且这个地址也指定了OSPF的LSA通告范围。OSPF会使用这个命令来找出在路由器上的任何配置在10.0.0.0网络的接口,并且把这些找到的接口放进区域0里。注意,你可以创建42亿个区域(我很怀疑一个路由器是否能让你配置如此多的区域,但起码你要知道可以用42亿以内的数字来命名区域)。
还有最后一个重点就是区域号码,区域号码表明了在同一个区域里的路由器或接口在指定的网络范围里分享路由信息。区域号码的格式可以使用十进制,范围是0-4294967295。或者也可以象ip地址那样使用点分十进制来表示,例如area 0.0.0.0是一个合法的区域,它表示的是区域0。
OSPF的AD是110,如果你前面配置了IGRP或者EIGRP,那么你必须先取消,因为IGRP的AD是100,而EIGRP的AD是90,都比OSPF低,如果不取消的话那么OSPF将不能正常工作。 下面我们开始配置OSPF,使用区域0,并且我们示范了几种不同的表示network的方式:
Lab_A
So here’s the Lab_A router’s configuration:
Lab_A#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_A(config)#no router eigrp 10
Lab_A(config)#no router igrp 10
Lab_A(config)#no router rip
Lab_A(config)#router ospf 132
Lab_A(config-router)#network 192.168.10.1 0.0.0.0 area 0
Lab_A(config-router)#network 192.168.20.1 0.0.0.0 area 0
Lab_A(config-router)#^Z
Lab_A#
Lab_B
The Lab_B router is directly connected to networks 20, 30, and 40. Instead of typing in each interface, I can use one network command and still make it work:
Lab_B#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_B(config)#no router eigrp 10
Lab_B(config)#no router igrp 10
Lab_B(config)#no router rip
Lab_B(config)#router ospf 1
Lab_B(config-router)#network 192.168.0.0 0.0.255.255 area0
^
% Invalid input detected at '^' marker.
Lab_B(config-router)#network 192.168.0.0 0.0.255.255 area 0
Lab_B(config-router)#^Z
Lab_B#
Lab_C
Let’s give the Lab_C router that’s directly connected to networks 40 and 50 some attention:
Lab_C#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_C(config)#no router eigrp 10
Lab_C(config)#no router igrp 10
Lab_C(config)#no router rip
Lab_C(config)#router ospf 64999
Lab_C(config-router)#network 192.168.40.0 0.0.0.255 area 0
Lab_C(config-router)#network 192.168.50.0 0.0.0.255 area 0
Lab_C(config-router)#^Z
Lab_C#
好,现在我们已经配置完了OSPF,接下来该做什么呢?喝茶时间吗?不,不是的,你还需要检查你的OSPF配置,我们要确定你的网络现在是否正常工作。
Verifying OSPF Configuration
我们在路由器上使用show ip route命令来看看:
Lab_A#sh ip route
Gateway of last resort is not set
O 192.168.30.0/24 [110/65] via 192.168.20.2, 00:01:07, Serial0/0
C 192.168.10.0/24 is directly connected, FastEthernet0/0
O 192.168.40.0/24 [110/128] via 192.168.20.2, 00:01:07, Serial0/0
C 192.168.20.0/24 is directly connected, Serial0/0
O 192.168.50.0/24 [110/138] via 192.168.20.2, 00:01:07, Serial0/0
Lab_A#
[略]
是否你的配置都出现在路由表中了?如果是的话我们可以用ping或者telnet来再次确定一下。
The show ip ospf Command
show ip ospf命令是用来显示在路由器上运行OSPF的进程信息的。进程信息包括了RID,区域信息,SPF统计和LSA时间信息。现在我们再看一下Lab_A的输出:
Lab_A#sho ip ospf
Routing Process "ospf 132" with ID 192.168.20.1
Supports only single TOS(TOS0) routes
Supports opaque LSA
SPF schedule delay 5 secs, Hold time between two SPFs 10 secs
Minimum LSA interval 5 secs. Minimum LSA arrival 1 secs
Number of external LSA 0. Checksum Sum 0x000000
Number of opaque AS LSA 0. Checksum Sum 0x000000
Number of DCbitless external and opaque AS LSA 0
Number of DoNotAge external and opaque AS LSA 0
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
External flood list length 0
Area BACKBONE(0)
Number of interfaces in this area is 2
Area has no authentication
SPF algorithm executed 5 times
Area ranges are
Number of LSA 3. Checksum Sum 0x020E9A
Number of opaque link LSA 0. Checksum Sum 0x000000
Number of DCbitless LSA 0
Number of indication LSA 0
Number of DoNotAge LSA 0
Flood list length 0
注意,Router ID(RID)是192.168.20.1,这是路由器Lab_A上最高的ip地址。
The show ip ospf database Command
show ip ospf database命令显示的信息是链接的号码和邻居路由器的ID,还有前面我说过的拓扑数据库。只能显示同区域的内容:
Lab_A#sh ip ospf database
OSPF Router with ID (192.168.20.1) (Process ID 132)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
192.168.20.1 192.168.20.1 648 0x80000003 0x005E2B 3
192.168.40.1 192.168.40.1 351 0x80000003 0x00E32F 5
192.168.40.2 192.168.40.2 192 0x80000003 0x00CD40 3
Lab_A#
路由器显示了链路ID(记住,一个接口同样可以是一条链路)和在ADV router下显示的链路上的路由器的RID。
The show ip ospf interface Command
show ip ospf interface命令显示所有OSPF的接口相关信息。可以显示指定接口或者所有接口,显示的内容包括了:
·接口的ip地址
·分配的区域
·进程ID
·路由器ID
·网络类型
·COST
·优先级
·DR/BDR的选择信息(如果有的话)
·Hello和Dead时间间隔
·邻居的邻接信息
Lab_A#show ip ospf interface
Serial0/0 is up, line protocol is up
Internet Address 192.168.20.1/24, Area 0
Process ID 132, Router ID 192.168.20.1, Network Type POINT_TO_POINT, Cost: 64
Transmit Delay is 1 sec, State POINT_TO_POINT,
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:06
Index 2/2, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 192.168.40.1
Suppress hello for 0 neighbor(s)
FastEthernet0/0 is up, line protocol is up
Internet Address 192.168.10.1/24, Area 0
Process ID 132, Router ID 192.168.20.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 192.168.20.1, Interface address 192.168.10.1
No backup designated router on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:04
Index 1/1, flood queue length 0
Next 0x0(0)/0x0(0)
--More--
The show ip ospf neighbor Command
show ip ospf neighbor命令超级有用,因为它概括了OSPF的相关信息,包括邻居和邻接状态。如果DR或BDR存在的话也会显示它们的信息:
Lab_A#sh ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
192.168.40.1 1 FULL/ - 00:00:30 192.168.20.2 Serial0/0
Lab_A#
The show ip protocols Command
这个show ip protocols命令当你运行OSPF,EIGRP,IGRP,RIP,BGP,IS-IS或者其它能够在你路由器上配置的协议的时候同样非常非常有用。该命令提供了一个很好的现在运行的协议的概述:
Lab_A#sh ip protocols
Routing Protocol is "ospf 132"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 192.168.20.1
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
192.168.10.1 0.0.0.0 area 0
192.168.20.1 0.0.0.0 area 0
Routing Information Sources:
Gateway Distance Last Update
192.168.40.1 110 00:05:56
192.168.40.2 110 00:05:56
192.168.20.1 110 00:05:56
Distance: (default is 110)
Lab_A#
根据上面的的输出,你能够确定OSPF的进程ID,RID,区域类型,配置的网络和区域还有邻居的RID,这些都很有用。
OSPF and Loopback Interfaces
当使用OSPF路由协议的时候配置一个环回(loopback)接口是很重要的,思科也建议当你在路由器上配置OSPF时使用环回接口。
环回接口是一个逻辑接口,是虚拟的接口;它们不是真正的路由器接口。在你使用OSPF时配置环回接口可以保证在OSPF进程中总有一个接口是活动的。
环回接口通常用于诊断OSPF配置故障。你需要在路由器上配置一个环回接口的原因是如果没有环回接口那么路由器上的最高ip地址就会变成RID,而RID通常是用来选择DR和BDR通告路由的。
现在假设如果我们没有使用环回接口那么路由器的串行接口作为路由器的RID并且它的ip地址是最高的。如果这个接口故障(down)了,那么网络需要重新选择DR和BDR,虽然这个重新选择的过程处理量不大,但是你想想如果这个接口不断的摇摆(going up/down)呢?这样路由器根本不能完成聚合,因为选择DR不会完成。对于OSPF来说这是一个极其严重的问题。环回接口能够解决这个问题,因为一个虚拟的接口绝不会故障所以路由器的RID也绝不会改变。
注意:默认情况下,OSPF在启动的时候会选择任何活动接口中ip地址最高的作为RID。然而,如果配置有逻辑接口,那么任何逻辑接口中最高的ip地址将做为RID。
Configuring Loopback Interfaces
首先,让我们看看路由器Lab_A的RID,用show ip ospf命令:
Lab_A#sh ip ospf
Routing Process "ospf 132" with ID 192.168.20.1
[output cut]
我们看到RID是192.168.20.1。现在让我们配置一个环回接口使用和当前网络完全不同的ip寻址方案(一般环回接口的地址强烈建议设置为私有地址)
Lab_A#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_A(config)#int loopback 0
Lab_A(config-if)#ip address 172.16.10.1 255.255.255.255
Lab_A(config-if)#no shut
Lab_A(config-if)#^Z
Lab_A#
呵呵,我可以肯定你一定会奇怪觉得为什么ip地址掩码要使用255.255.255.255(/32)而不是255.255.255.0呢。是的,两个掩码都能使用,但是一个/32的掩码(叫做主机掩码)能够在环回接口中更好的工作。
这里使用的ip地址并没有什么关系,但每个路由器的ip必须在不同的子网。
Lab_B#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_B(config)#int lo0
Lab_B(config-if)#ip address 172.16.20.1 255.255.255.255
Lab_B(config-if)#no shut
Lab_B(config-if)#^Z
Lab_B#
Lab_C#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_C(config)#int lo0
Lab_C(config-if)#ip address 172.16.30.1 255.255.255.255
Lab_C(config-if)#no shut
Lab_C(config-if)#^Z
Lab_C#
Verifying Loopbacks and RIDs
确认环回地址,使用show runnning-config命令:
Lab_C#show running-config
hostname Lab_C
interface Loopback0
ip address 172.16.30.1 255.255.255.255
[略]
如果想确定RID,可以使用show ip ospf interface命令,show ip ospf database命令,或者只使用show ip ospf也可以。
Lab_C#sho ip ospf database
OSPF Router with ID (172.16.30.1) (Process ID 64999)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
172.16.10.1 172.16.10.1 689 0x80000002 0xB404 3
172.16.20.1 172.16.20.1 139 0x8000000A 0x4AB1 5
172.16.30.1 172.16.30.1 138 0x80000002 0x2B14 3
Lab_C#show ip ospf interface
FastEthernet0/0 is up, line protocol is up
Internet Address 172.16.50.1/24, Area 0
Process ID 64999, Router ID 172.16.30.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.30.1, Interface address 172.16.50.1
No backup designated router on this network
Lab_C#show ip ospf
Routing Process "ospf 64999" with ID 172.16.30.1 and Domain ID 0.0.253.231
[output cut]
有一点很重要的地方需要记住的就是在设置了环回接口后,新的RID不会即刻生效,直到路由器重启后新的RID才能生效。
Troubleshooting OSPF
这个部分是关于确认OSPF配置和通过配置信息来检测故障,维护和修复OSPF关联。
当你看到这样的配置:
Router(config)#router ospf 1
Router(config-router)#network 10.0.0.0 255.0.0.0 area 0
你必须知道没有任何一个路由器会接受这样的输入,因为反掩码配置错误了。正确配置应该是:
Router(config)#router ospf 1
Router(config-router)#network 10.0.0.0 0.255.255.255 area 0
接着,让我们看一下图6.5,看你能决定哪个路由器是DR么?假设所有的路由器都使用默认的优先级。
注意每个路由器的RID,这些路由器中RID最高的是路由器A和路由器B,因为路由器B的ip地址最高,所以路由器B将成为DR,而路由器A将成为BDR。真的吗??
好,现在让我们注意一件事情:因为在point-to-point的链路上默认不会选择DR和BDR,所以LAN会排除那两个点到点连接的路由器。在CCNA的考试里,最好的答案就是路由器B将会成为DR。
让我们使用另一个命令来检查OSPF的配置:show ip ospf interface。看看下面路由器A,B的输出看你能否检测为什么这两个直接相连的路由器不能建立邻接关系:
RouterA#sh ip ospf interface e0/0
Ethernet0/0 is up, line protocol is up
Internet Address 172.16.1.2/16, Area 0
Process ID 2, Router ID 172.126.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.1.2, interface address 172.16.1.1
No backup designated router on this network
Timer intervals configured, Hello 5, Dead 20, Wait 20, Retransmit 5
RouterB#sh ip ospf interface e0/0
Ethernet0/0 is up, line protocol is up
Internet Address 172.16.1.1/16, Area 0
Process ID 2, Router ID 172.126.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.1.1, interface address 172.16.1.2
No backup designated router on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
两个路由器的输出看起来都很正常,除了Hello和Dead的时间不一样外。路由器A的Hello和Dead的时间分别是5,20而路由器B的Hello和Dead分别是10和40,路由器B的时间是OSPF默认使用的。如果两个直接相连的路由器的时间数值不一样,那么它们将不能形成邻接关系。注意show ip ospf interface命令同样能够显示区域里的DR和BDR路由器。
再看看图6.6,有四个路由器和两种不同的路由协议:
如果所有的参数都是默认的设置并且也没有使用重新分配的话,你认为路由器A会使用什么路径到达路由器D呢?
因为IGRP的AD是100,而OSPF的AD是110,路由器A将会通过路由器C来发送数据包到路由器D。
仔细看图6.7,
你在图上所示的路由器上运行OSPF,通过一个ISDN线路来提供Corporate路由器到remote sales office路由器的连接。
你会在连接remote sales office的Corporate路由器上配置什么类型的路由使得在ISDN线路上的网络开销最小呢?
解决这个问题的最好办法是:撤掉ISDN线路改用宽带线路连接remote office到因特网上,然后通过因特网创建一个从Corporate office到Remote office的VPN。这不是很好嘛?不过,问题问的是我们在ISDN上怎么样才能最小化网络开销。我们能够做的唯一选择就是创建一条从Corporate router到remote office路由器的静态路由,其他的方法都会造成带宽浪费。
Configuring EIGRP and OSPF Summary Routes
这部分内容是关于配置EIGRP和OSPF路由汇总的命令的。虽然OSPF可以通过一些不同的办法来路由汇总,但这里我们只学习最常见的OSPF的路由汇总命令,把多区域的OSPF网络汇总到区域0。
我们在第三章已经学习了怎么检测一个网络的路由汇总,这里我们学习的是怎么在路由器上配置路由汇总。
图6.8显示了一个连续的网络设计,是的,现在还不是连续的网络,我们的目标就是把它变成连续的。
图6.8里有六个网络,使用/30掩码的WAN线路有4个,使用/29掩码的LAN连接有两个。我们的设计使用网络地址192.168.10.64,掩码是255.255.255.224。
在核心路由器上,如果是EIGRP我们将把路由汇总放到E0接口上,使能够通告我们的路由汇总到主干网络上(10.10.10.0网络)。这将阻止我们的六个网络分别发送通告,替换成通告一个路由到互连网络上另外的路由器。然而,这需要强制我们连续网络外的其它路由器不能使用和这个连续网络所使用的掩码255.255.255.224。使得它们通告不一致的路由。下面是一个在核心路由器上配置EIGRP路由汇总的例子:
Core#config t
Core(config)#router eigrp 10
Core(config-router)#network 192.168.10.0
Core(config-router)#network 10.0.0.0
Core(config-router)#no auto-summary
Core(config-router)#interface ethernet 0
Core(config-if)#ip summary-address eigrp 10 192.168.10.64 255.255.255.224
上面配置科自治系统10通告了两个直连的网络192.168.10.0和10.0.0.0。因为EIGRP在基本类型的网络边界上使用自动路由汇总,所以你需要先用no auto-summary来关掉自动汇总。我们把要通告的汇总路由放在连接主干网络的接口上。这个汇总路由告诉EIGRP寻找192.168.10.64/27网络上的所有网络并象通告一个路由那样从E0口输出。这意味着,如果目标ip是192.168.64.1到192.168.95.254的所有数据包都通过这个汇总路由来发送。
下面我们看看在同样的使用OSPF的连续网络上我们是怎么配置的:
要把area1汇总到area0,我们使用下面的命令:
Core#config t
Core(config)#router ospf 1
Core(config-router)#network 192.168.10.64 0.0.0.3 area 1
Core(config-router)#network 192.168.10.68 0.0.0.3 area 1
Core(config-router)#network 10.10.10.0 0.0.0.255 area 0
Core(config-router)#area 1 range 192.168.10.64 255.255.255.224
这里我们不需要用no auto-summary命令,因为OSPF默认不支持自动路由汇总。
Summary
我知道,你会说本章的内容涉及太广泛了。但这章非常重要,EIGRP是本章的一个重点,它是一个混合了链路状态协议和距离向量协议的路由协议。它允许不等价的负载均衡。受控的路由更新和正式的邻居邻接关系。
EIGRP使用可靠传输协议(RTP)来在邻居之间进行通信,利用扩散更新算法(DUAL)来计算最好的路由。
通过一些如支持VLSM,支持不连续网络和路由汇总等特性EIGRP同样支持大型网络。
我也同样介绍了EIGRP的配置,和检测修复故障的命令。
本章告诉你关于OSPF的许多处理过程的信息。虽然在本章或者本书不能介绍完OSPF的全部内容,但是我们已经学习了一些最基本的。这对你以后的学习很有帮助,请牢牢地记住这些内容。
我讲了OSPF的很多内容,包括了术语概念,操作和配置,检查确认等。
虽然这些内容是OSPF的很基本的部分,但是你要好好的掌握住你学习的东西:如配置单区域的OSPF,执行VLSM和连续边界路由汇总等。
最后,我告诉了你许多检测的命令,这些命令对观察OSPF的运行很有用。
开放式最短路径优先(OSPF)是一个开放性标准的路由选择协议,它能够支持许多不同厂商的路由器,包括思科的。如果你有许多路由器并且不全全部是思科的,那么你就不能使用EIGRP!这样你就只剩下了RIPv1,RIPv2或者OSPF三个选择了。如果是一个大的网络,那么,你就只剩下唯一一个OSPF能够选择了,或者你使用路由重新分配(redistribution)-------一个在路由协议间提供转换的服务。
OSPF使用Dijkstra算法,首先形成一个最短路径树,然后选择最好的路由放进路由表。OSPF聚合非常快(虽然可能没有EIGRP那么快),并且支持多条等价的到达目标的路由,但是不象EIGRP,OSPF只支持IP路由。
OSPF提供了以下特性:
·由区域和自治系统组成
·极小的路由更新流量
·提供可扩缩性
·支持VLSM/CIDR
·有无限的跳数
·能够支持不同厂商的设备(因为是开放性的标准)
OSPF是一个纯链路状态的路由协议。所以把它跟传统的距离向量协议如RIP进行一个比较是非常有用的:
![](http://skysnow.9410.com/bbs/upfiles/mypictures/table63.jpg)
![](http://skysnow.9410.com/bbs/upfiles/mypictures/table631.jpg)
OSPF有许多新特性,我已经在表6.3中列出来了。这些特性构成了一个快速的,可缩放的和健壮的协议,这个协议在许多实际工作网络中被使用。
OSPF被假定设计为一个层次性的方式。这通常意味着你可以把一个大的网络分割成许多小的互连网络(叫做区域)。这是OSPF最好的特点。
把OSPF设计为层次性的原因如下:
·减少路由开销
·加快聚合速度
·把网络的不稳定性限制在单一的区域里
这些使得配置OSPF不是那么容易而是更加精确和困难。
图6.4显示了一个典型的OSPF的简单设计:
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure64.jpg)
注意到每一个区域的路由器都连接到主干---叫做area 0或者主干区域。
OSPF必须有一个区域0(area 0),然后其他的路由器必须尽可能连接上这个区域0。连接其他区域到主干区域的路由器叫做区域边界路由器(ABRs,Area Border Routers),ABR必须至少有一个接口在区域0内。OSPF在一个自治系统内运行,但也能够连接多个自治系统,连接其他自治系统到一起的路由器叫做自治系统边界路由器(Autonomous system Boundary router,ASBR)。
事实上,你要创建其他的网络区域来最小化路由更新的数量并且把问题故障限制在一个区域里而不能影响到整个网络。但是这超出了本书的内容,我们这里只学习单一区域。
OSPF Terminology
象学习EIGRP一样,学习之前我要先介绍几个关键的术语概念:
Link:一个链接是把一个网络或者路由器接口分配到特定的网络。在OSPF进行处理时一个路由器接口被认为是一个链接。这个链接或者说接口将有关联的状态信息(up or down),和一个甚至多个ip地址。
Router ID:路由器ID(RID)是一个用来鉴别路由器的ip地址。思科选择所有已配置的环回(loopback)接口中ip地址最高(或者说最大,跟我们10进制说的大小一样)的那个ip作为RID;如果没有配置任何环回接口,那么OSPF选择所有活动的物理接口中最高的ip地址的作为RID。
Neighbors:邻居,两个或者多个路由器有接口在同一网络上,那么这些路由器就成了邻居。例如两个路由器通过一条point-to-point串行线路连接在一起。
Adjacency:邻接是两个OSPF路由器之间的关系,邻接的路由器允许直接交换路由更新信息。OSPF在分享路由信息的时候非常挑剔,不象EIGRP那样把路由信息和所有的邻居分享,而是仅仅在建立了邻接关系的邻居路由器之间分享路由信息。不是所有的邻居都能建立邻接关系的,这依靠网络的类型和路由器的配置来决定。
Hello protocol:OSPF Hello协议提供了动态发现邻居和维护邻居关系的能力。Hello数据包和链路状态通告(Link State Advertisements ,LSAs)建立和维护拓扑数据库。OSPF的Hello数据包通过ip地址224.0.0.5发送。
Neighborship database:邻居数据库,是一列Hello数据包发现的OSPF路由器,里面包含了许多详细的资料如RID,邻居状态等。
Topology database:拓扑数据库包含了在一个区域内接收到的所有LSA数据包中的信息。路由器从拓扑数据库中取出信息放到Dijkstra算法进行计算以得出达到每个网络的最好路径。
注意:LSA数据包被用来更新和维护拓扑数据库。
Link State Advertisement:链路状态通告,是一个OSPF的数据包,里面包含了在路由器间共享的链路状态和路由选择信息。LSA数据包分几种类型,等下我再进行说明。一个OSPF路由器只在和它建立了邻接关系的路由器之间交换LSA数据包。
Designated router:被指定路由器(DR),只要OSPF路由器连接在一个多路访问网络(思科经常叫做广播网络)上,那么就要选出一个DR。
一个主要的例子是以太局域网(Ethernet LAN),为了最小化邻接关系的数量,DR被选举出来发送/接收路由信息,以保证全部路由器的拓扑数据库的同步。这样,在广播网络中的其它路由器必须和DR以及BDR建立邻接关系。DR的选择跟路由器的最高优先级和RID有关,如果优先级相同那么由RID来决定。
Backup designated router:被指定路由器的备份路由器,BDR从相邻的OSPF路由器那里接收所有的路由信息,但不发送LSA更新。
OSPF areas:OSPF区域是一个连续网络和路由器的分组。在同样区域里的所有路由器使用相同的Area ID。因为一个路由器可能同时处在不同的区域内,所以Area ID被关联到特定的接口,这样路由器就可能有一些接口属于area1而另外的接口属于area0。在同一区域内的所有路由器都有一个同样的拓扑数据库。当你配置OSPF的时候记得必须要有一个area0,这是因为通常都要把路由器配置为连接到主干网络。区域在建立一个层次性网络的时候扮演了一个主要角色。层次性的网络实际上增强了OSPF的可伸缩性。
Broadcast (multi-access):广播(或者多路访问)网络例如以太网允许许多设备连接到相同的网络,也提供了一个“广播”的能力:一个数据包被发送到网络上的所有节点。在OSPF中,每一个广播多路访问网络都要选出一个DR和BDR。
Non-broadcast multi-access:非广播多路访问(NBMA)网络的类型有Frame Relay,X.25,和异步传输模式(Asynchronous Transfer Mode ,ATM)等。这些网络允许多路访问,但是没有象以太网那样的广播能力。所以NBMA网络需要特殊的OSPF配置来提供适当的功能并且邻居关系也要定义。
|
Point-to-point:点到点是一种网络拓扑结构,它由两个直接相连的路由器组成,提供了单一的通信路径。点到点的连接可以是物理性的,如通过一条串行缆线来直接连接两个路由器;或者也可以是逻辑性的,如两个路由器相隔数千米然后通过Frame Relay网络种的一条线路来连接起来。另外,这种类型的网络避免了使用DR或者BDR,它是自动发现邻居的。
Point-to-multipoint:点到多点这种网络拓扑结构是在一个路由器上的一个接口和多个目的路由器之间的一系列连接组成的。和点到点一样,不需要DR和BDR!
上面这些概念对于你理解OSPF的运行很重要,所以你一定要确定你已经熟悉这些术语概念了。
SPF Tree Calculation
在一个区域内每个路由器计算到达在同一区域里其他的网络的最短/好的路径。这个计算基于从拓扑数据库里选择的信息和一个叫做SPF(shortest path first)的算法。把区域里的每个路由器画成一棵树,你会发现这很象一个族谱,有一个路由器作为根(root),其它的路由器则分布散开出去。这是为什么路由器用最短路径树来添加路由进路由表的原因。
要知道这棵树只包含了一个网络,这个网络要在相同的区域。如果一个路由器有接口在多个区域里,那么每个区域都要有单独的树。
SPF算法在选择路由的处理过程中有一个关键的标准要考虑,那就是每条可能到达目标网络路径的度或者开销。但这个SPF的计算跟其他区域的路由无关,也就是说不计算其它区域的路由。
OSPF使用一个度叫做开销(cost),开销跟每一个包含在SPF树上的输出接口有关。路径的全部开销是路径上每一个输出接口的开销之和。因为cost在RFC2338中定义为一个任意的数值,所以思科使用自己的方法来计算每一个OSPF接口的开销:一个简单的等式10的8次方除以接口带宽。接口带宽是在接口上配置的带宽而不是实际线路输送数据的带宽。根据这个规则,一个100Mbps的快速以太网接口的默认OSPF cost是1,而一个10Mbps以太网接口的cost是10。
注意:如果一个接口设置了带宽为64000bps,那么它的cost开销就是1563。
可以通过ip ospf cost命令来改变cost的数值,这个数值的范围在1--65535间。因为cost被分配到每条链接,所以必须在你想改变cost的接口上来改变cost数值。
|
Configuring OSPF
配置OSPF不象RIP,IGRP,EIGRP那么简单,并且当OSPF使用了许多条件参数后可能配置会变得相当复杂。幸好,我们的学习只需要把注意力放在单一区域的OSPF的配置上。下面的部分描述了怎样配置一个单一区域的OSPF。
配置OSPF,有两个基本的要点:
·启动OSPF
·配置OSPF的区域
Enabling OSPF
启动OSPF的命令很简单:
Lab_A(config)#router ospf ?
<1-65535>
在1-65535间的数值范围标明了OSPF的Process ID。它是标明在这个路由器上一系列OSPF配置中的一个特定运行过程的唯一的号码。不同的OSPF路由器不一定要使用相同的Process ID来维持通信。Process ID完全是一个本地的标记,只有一小点的意思。但是Process ID不能从0开始,它必须最小从1开始。
你可以在一个路由器上同时运行多个OSPF进程,但这个不等于运行多区域OSPF。第二个进程将建立一个单独的拓扑数据库并独立地管理通信。由于CCNA考试只要求一个单区域的OSPF和每个路由器上只运行单一的OSPF进程,所以我们只注意这个就可以了。
Configuring OSPF Areas
在指定了OSPF的进程之后,你需要指定你想要进行OSPF通信的接口,和这个接口对应的区域号码。这将把你配置的网络通告给其他的网络。OSPF在配置中使用反掩码(也叫通配符),在访问控制列表(access-list)中同样使用使用反掩码,访问列表我们将在第十章学习。
Lab_A#config t
Lab_A(config)#router ospf 1
Lab_A(config-router)#network 10.0.0.0 0.255.255.255 area ?
<0-4294967295> OSPF area ID as a decimal value
A.B.C.D OSPF area ID in IP address format
Lab_A(config-router)#network 10.0.0.0 0.255.255.255 area 0
注意:区域号码可以是0到42亿之间的任意号码。不要把这个区域号码跟进程ID搞混了,Process ID的范围是1到65535。
记住,OSPF的进程ID是不相关的,你可以在同一网络的所有路由器上配置相同的进程ID也可以不同,都没有关系的。它只是一个本地的标记并只是在路由器上启动OSPF路由选择而已。
重点在network命令配置的网络号码10.0.0.0和反掩码0.255.255.255。这两个结合起来告诉了OSPF该怎样处理这个接口,而且这个地址也指定了OSPF的LSA通告范围。OSPF会使用这个命令来找出在路由器上的任何配置在10.0.0.0网络的接口,并且把这些找到的接口放进区域0里。注意,你可以创建42亿个区域(我很怀疑一个路由器是否能让你配置如此多的区域,但起码你要知道可以用42亿以内的数字来命名区域)。
|
还有最后一个重点就是区域号码,区域号码表明了在同一个区域里的路由器或接口在指定的网络范围里分享路由信息。区域号码的格式可以使用十进制,范围是0-4294967295。或者也可以象ip地址那样使用点分十进制来表示,例如area 0.0.0.0是一个合法的区域,它表示的是区域0。
OSPF的AD是110,如果你前面配置了IGRP或者EIGRP,那么你必须先取消,因为IGRP的AD是100,而EIGRP的AD是90,都比OSPF低,如果不取消的话那么OSPF将不能正常工作。 下面我们开始配置OSPF,使用区域0,并且我们示范了几种不同的表示network的方式:
Lab_A
So here’s the Lab_A router’s configuration:
Lab_A#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_A(config)#no router eigrp 10
Lab_A(config)#no router igrp 10
Lab_A(config)#no router rip
Lab_A(config)#router ospf 132
Lab_A(config-router)#network 192.168.10.1 0.0.0.0 area 0
Lab_A(config-router)#network 192.168.20.1 0.0.0.0 area 0
Lab_A(config-router)#^Z
Lab_A#
Lab_B
The Lab_B router is directly connected to networks 20, 30, and 40. Instead of typing in each interface, I can use one network command and still make it work:
Lab_B#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_B(config)#no router eigrp 10
Lab_B(config)#no router igrp 10
Lab_B(config)#no router rip
Lab_B(config)#router ospf 1
Lab_B(config-router)#network 192.168.0.0 0.0.255.255 area0
^
% Invalid input detected at '^' marker.
Lab_B(config-router)#network 192.168.0.0 0.0.255.255 area 0
Lab_B(config-router)#^Z
Lab_B#
Lab_C
Let’s give the Lab_C router that’s directly connected to networks 40 and 50 some attention:
Lab_C#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_C(config)#no router eigrp 10
Lab_C(config)#no router igrp 10
Lab_C(config)#no router rip
Lab_C(config)#router ospf 64999
Lab_C(config-router)#network 192.168.40.0 0.0.0.255 area 0
Lab_C(config-router)#network 192.168.50.0 0.0.0.255 area 0
Lab_C(config-router)#^Z
Lab_C#
好,现在我们已经配置完了OSPF,接下来该做什么呢?喝茶时间吗?不,不是的,你还需要检查你的OSPF配置,我们要确定你的网络现在是否正常工作。
Verifying OSPF Configuration
我们在路由器上使用show ip route命令来看看:
Lab_A#sh ip route
Gateway of last resort is not set
O 192.168.30.0/24 [110/65] via 192.168.20.2, 00:01:07, Serial0/0
C 192.168.10.0/24 is directly connected, FastEthernet0/0
O 192.168.40.0/24 [110/128] via 192.168.20.2, 00:01:07, Serial0/0
C 192.168.20.0/24 is directly connected, Serial0/0
O 192.168.50.0/24 [110/138] via 192.168.20.2, 00:01:07, Serial0/0
Lab_A#
[略]
是否你的配置都出现在路由表中了?如果是的话我们可以用ping或者telnet来再次确定一下。
The show ip ospf Command
show ip ospf命令是用来显示在路由器上运行OSPF的进程信息的。进程信息包括了RID,区域信息,SPF统计和LSA时间信息。现在我们再看一下Lab_A的输出:
Lab_A#sho ip ospf
Routing Process "ospf 132" with ID 192.168.20.1
Supports only single TOS(TOS0) routes
Supports opaque LSA
SPF schedule delay 5 secs, Hold time between two SPFs 10 secs
Minimum LSA interval 5 secs. Minimum LSA arrival 1 secs
Number of external LSA 0. Checksum Sum 0x000000
Number of opaque AS LSA 0. Checksum Sum 0x000000
Number of DCbitless external and opaque AS LSA 0
Number of DoNotAge external and opaque AS LSA 0
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
External flood list length 0
Area BACKBONE(0)
Number of interfaces in this area is 2
Area has no authentication
SPF algorithm executed 5 times
Area ranges are
Number of LSA 3. Checksum Sum 0x020E9A
Number of opaque link LSA 0. Checksum Sum 0x000000
Number of DCbitless LSA 0
Number of indication LSA 0
Number of DoNotAge LSA 0
Flood list length 0
注意,Router ID(RID)是192.168.20.1,这是路由器Lab_A上最高的ip地址。
The show ip ospf database Command
show ip ospf database命令显示的信息是链接的号码和邻居路由器的ID,还有前面我说过的拓扑数据库。只能显示同区域的内容:
Lab_A#sh ip ospf database
OSPF Router with ID (192.168.20.1) (Process ID 132)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
192.168.20.1 192.168.20.1 648 0x80000003 0x005E2B 3
192.168.40.1 192.168.40.1 351 0x80000003 0x00E32F 5
192.168.40.2 192.168.40.2 192 0x80000003 0x00CD40 3
Lab_A#
路由器显示了链路ID(记住,一个接口同样可以是一条链路)和在ADV router下显示的链路上的路由器的RID。
The show ip ospf interface Command
show ip ospf interface命令显示所有OSPF的接口相关信息。可以显示指定接口或者所有接口,显示的内容包括了:
·接口的ip地址
·分配的区域
·进程ID
·路由器ID
·网络类型
·COST
·优先级
·DR/BDR的选择信息(如果有的话)
·Hello和Dead时间间隔
·邻居的邻接信息
Lab_A#show ip ospf interface
Serial0/0 is up, line protocol is up
Internet Address 192.168.20.1/24, Area 0
Process ID 132, Router ID 192.168.20.1, Network Type POINT_TO_POINT, Cost: 64
Transmit Delay is 1 sec, State POINT_TO_POINT,
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:06
Index 2/2, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 192.168.40.1
Suppress hello for 0 neighbor(s)
FastEthernet0/0 is up, line protocol is up
Internet Address 192.168.10.1/24, Area 0
Process ID 132, Router ID 192.168.20.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 192.168.20.1, Interface address 192.168.10.1
No backup designated router on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:04
Index 1/1, flood queue length 0
Next 0x0(0)/0x0(0)
--More--
The show ip ospf neighbor Command
show ip ospf neighbor命令超级有用,因为它概括了OSPF的相关信息,包括邻居和邻接状态。如果DR或BDR存在的话也会显示它们的信息:
Lab_A#sh ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
192.168.40.1 1 FULL/ - 00:00:30 192.168.20.2 Serial0/0
Lab_A#
The show ip protocols Command
这个show ip protocols命令当你运行OSPF,EIGRP,IGRP,RIP,BGP,IS-IS或者其它能够在你路由器上配置的协议的时候同样非常非常有用。该命令提供了一个很好的现在运行的协议的概述:
Lab_A#sh ip protocols
Routing Protocol is "ospf 132"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 192.168.20.1
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
192.168.10.1 0.0.0.0 area 0
192.168.20.1 0.0.0.0 area 0
Routing Information Sources:
Gateway Distance Last Update
192.168.40.1 110 00:05:56
192.168.40.2 110 00:05:56
192.168.20.1 110 00:05:56
Distance: (default is 110)
Lab_A#
根据上面的的输出,你能够确定OSPF的进程ID,RID,区域类型,配置的网络和区域还有邻居的RID,这些都很有用。
OSPF and Loopback Interfaces
当使用OSPF路由协议的时候配置一个环回(loopback)接口是很重要的,思科也建议当你在路由器上配置OSPF时使用环回接口。
环回接口是一个逻辑接口,是虚拟的接口;它们不是真正的路由器接口。在你使用OSPF时配置环回接口可以保证在OSPF进程中总有一个接口是活动的。
环回接口通常用于诊断OSPF配置故障。你需要在路由器上配置一个环回接口的原因是如果没有环回接口那么路由器上的最高ip地址就会变成RID,而RID通常是用来选择DR和BDR通告路由的。
现在假设如果我们没有使用环回接口那么路由器的串行接口作为路由器的RID并且它的ip地址是最高的。如果这个接口故障(down)了,那么网络需要重新选择DR和BDR,虽然这个重新选择的过程处理量不大,但是你想想如果这个接口不断的摇摆(going up/down)呢?这样路由器根本不能完成聚合,因为选择DR不会完成。对于OSPF来说这是一个极其严重的问题。环回接口能够解决这个问题,因为一个虚拟的接口绝不会故障所以路由器的RID也绝不会改变。
注意:默认情况下,OSPF在启动的时候会选择任何活动接口中ip地址最高的作为RID。然而,如果配置有逻辑接口,那么任何逻辑接口中最高的ip地址将做为RID。
Configuring Loopback Interfaces
首先,让我们看看路由器Lab_A的RID,用show ip ospf命令:
Lab_A#sh ip ospf
Routing Process "ospf 132" with ID 192.168.20.1
[output cut]
我们看到RID是192.168.20.1。现在让我们配置一个环回接口使用和当前网络完全不同的ip寻址方案(一般环回接口的地址强烈建议设置为私有地址)
Lab_A#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_A(config)#int loopback 0
Lab_A(config-if)#ip address 172.16.10.1 255.255.255.255
Lab_A(config-if)#no shut
Lab_A(config-if)#^Z
Lab_A#
呵呵,我可以肯定你一定会奇怪觉得为什么ip地址掩码要使用255.255.255.255(/32)而不是255.255.255.0呢。是的,两个掩码都能使用,但是一个/32的掩码(叫做主机掩码)能够在环回接口中更好的工作。
这里使用的ip地址并没有什么关系,但每个路由器的ip必须在不同的子网。
Lab_B#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_B(config)#int lo0
Lab_B(config-if)#ip address 172.16.20.1 255.255.255.255
Lab_B(config-if)#no shut
Lab_B(config-if)#^Z
Lab_B#
Lab_C#config t
Enter configuration commands, one per line. End with CNTL/Z.
Lab_C(config)#int lo0
Lab_C(config-if)#ip address 172.16.30.1 255.255.255.255
Lab_C(config-if)#no shut
Lab_C(config-if)#^Z
Lab_C#
Verifying Loopbacks and RIDs
确认环回地址,使用show runnning-config命令:
Lab_C#show running-config
hostname Lab_C
interface Loopback0
ip address 172.16.30.1 255.255.255.255
[略]
如果想确定RID,可以使用show ip ospf interface命令,show ip ospf database命令,或者只使用show ip ospf也可以。
Lab_C#sho ip ospf database
OSPF Router with ID (172.16.30.1) (Process ID 64999)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
172.16.10.1 172.16.10.1 689 0x80000002 0xB404 3
172.16.20.1 172.16.20.1 139 0x8000000A 0x4AB1 5
172.16.30.1 172.16.30.1 138 0x80000002 0x2B14 3
Lab_C#show ip ospf interface
FastEthernet0/0 is up, line protocol is up
Internet Address 172.16.50.1/24, Area 0
Process ID 64999, Router ID 172.16.30.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.30.1, Interface address 172.16.50.1
No backup designated router on this network
Lab_C#show ip ospf
Routing Process "ospf 64999" with ID 172.16.30.1 and Domain ID 0.0.253.231
[output cut]
有一点很重要的地方需要记住的就是在设置了环回接口后,新的RID不会即刻生效,直到路由器重启后新的RID才能生效。
Troubleshooting OSPF
这个部分是关于确认OSPF配置和通过配置信息来检测故障,维护和修复OSPF关联。
当你看到这样的配置:
Router(config)#router ospf 1
Router(config-router)#network 10.0.0.0 255.0.0.0 area 0
你必须知道没有任何一个路由器会接受这样的输入,因为反掩码配置错误了。正确配置应该是:
Router(config)#router ospf 1
Router(config-router)#network 10.0.0.0 0.255.255.255 area 0
接着,让我们看一下图6.5,看你能决定哪个路由器是DR么?假设所有的路由器都使用默认的优先级。
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure65.jpg)
注意每个路由器的RID,这些路由器中RID最高的是路由器A和路由器B,因为路由器B的ip地址最高,所以路由器B将成为DR,而路由器A将成为BDR。真的吗??
好,现在让我们注意一件事情:因为在point-to-point的链路上默认不会选择DR和BDR,所以LAN会排除那两个点到点连接的路由器。在CCNA的考试里,最好的答案就是路由器B将会成为DR。
让我们使用另一个命令来检查OSPF的配置:show ip ospf interface。看看下面路由器A,B的输出看你能否检测为什么这两个直接相连的路由器不能建立邻接关系:
RouterA#sh ip ospf interface e0/0
Ethernet0/0 is up, line protocol is up
Internet Address 172.16.1.2/16, Area 0
Process ID 2, Router ID 172.126.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.1.2, interface address 172.16.1.1
No backup designated router on this network
Timer intervals configured, Hello 5, Dead 20, Wait 20, Retransmit 5
RouterB#sh ip ospf interface e0/0
Ethernet0/0 is up, line protocol is up
Internet Address 172.16.1.1/16, Area 0
Process ID 2, Router ID 172.126.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 172.16.1.1, interface address 172.16.1.2
No backup designated router on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
两个路由器的输出看起来都很正常,除了Hello和Dead的时间不一样外。路由器A的Hello和Dead的时间分别是5,20而路由器B的Hello和Dead分别是10和40,路由器B的时间是OSPF默认使用的。如果两个直接相连的路由器的时间数值不一样,那么它们将不能形成邻接关系。注意show ip ospf interface命令同样能够显示区域里的DR和BDR路由器。
再看看图6.6,有四个路由器和两种不同的路由协议:
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure66.jpg)
如果所有的参数都是默认的设置并且也没有使用重新分配的话,你认为路由器A会使用什么路径到达路由器D呢?
因为IGRP的AD是100,而OSPF的AD是110,路由器A将会通过路由器C来发送数据包到路由器D。
仔细看图6.7,
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure67.jpg)
你在图上所示的路由器上运行OSPF,通过一个ISDN线路来提供Corporate路由器到remote sales office路由器的连接。
你会在连接remote sales office的Corporate路由器上配置什么类型的路由使得在ISDN线路上的网络开销最小呢?
解决这个问题的最好办法是:撤掉ISDN线路改用宽带线路连接remote office到因特网上,然后通过因特网创建一个从Corporate office到Remote office的VPN。这不是很好嘛?不过,问题问的是我们在ISDN上怎么样才能最小化网络开销。我们能够做的唯一选择就是创建一条从Corporate router到remote office路由器的静态路由,其他的方法都会造成带宽浪费。
Configuring EIGRP and OSPF Summary Routes
这部分内容是关于配置EIGRP和OSPF路由汇总的命令的。虽然OSPF可以通过一些不同的办法来路由汇总,但这里我们只学习最常见的OSPF的路由汇总命令,把多区域的OSPF网络汇总到区域0。
我们在第三章已经学习了怎么检测一个网络的路由汇总,这里我们学习的是怎么在路由器上配置路由汇总。
图6.8显示了一个连续的网络设计,是的,现在还不是连续的网络,我们的目标就是把它变成连续的。
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure68.jpg)
图6.8里有六个网络,使用/30掩码的WAN线路有4个,使用/29掩码的LAN连接有两个。我们的设计使用网络地址192.168.10.64,掩码是255.255.255.224。
在核心路由器上,如果是EIGRP我们将把路由汇总放到E0接口上,使能够通告我们的路由汇总到主干网络上(10.10.10.0网络)。这将阻止我们的六个网络分别发送通告,替换成通告一个路由到互连网络上另外的路由器。然而,这需要强制我们连续网络外的其它路由器不能使用和这个连续网络所使用的掩码255.255.255.224。使得它们通告不一致的路由。下面是一个在核心路由器上配置EIGRP路由汇总的例子:
Core#config t
Core(config)#router eigrp 10
Core(config-router)#network 192.168.10.0
Core(config-router)#network 10.0.0.0
Core(config-router)#no auto-summary
Core(config-router)#interface ethernet 0
Core(config-if)#ip summary-address eigrp 10 192.168.10.64 255.255.255.224
上面配置科自治系统10通告了两个直连的网络192.168.10.0和10.0.0.0。因为EIGRP在基本类型的网络边界上使用自动路由汇总,所以你需要先用no auto-summary来关掉自动汇总。我们把要通告的汇总路由放在连接主干网络的接口上。这个汇总路由告诉EIGRP寻找192.168.10.64/27网络上的所有网络并象通告一个路由那样从E0口输出。这意味着,如果目标ip是192.168.64.1到192.168.95.254的所有数据包都通过这个汇总路由来发送。
下面我们看看在同样的使用OSPF的连续网络上我们是怎么配置的:
![](http://skysnow.9410.com/bbs/upfiles/mypictures/figure69.jpg)
要把area1汇总到area0,我们使用下面的命令:
Core#config t
Core(config)#router ospf 1
Core(config-router)#network 192.168.10.64 0.0.0.3 area 1
Core(config-router)#network 192.168.10.68 0.0.0.3 area 1
Core(config-router)#network 10.10.10.0 0.0.0.255 area 0
Core(config-router)#area 1 range 192.168.10.64 255.255.255.224
这里我们不需要用no auto-summary命令,因为OSPF默认不支持自动路由汇总。
Summary
我知道,你会说本章的内容涉及太广泛了。但这章非常重要,EIGRP是本章的一个重点,它是一个混合了链路状态协议和距离向量协议的路由协议。它允许不等价的负载均衡。受控的路由更新和正式的邻居邻接关系。
EIGRP使用可靠传输协议(RTP)来在邻居之间进行通信,利用扩散更新算法(DUAL)来计算最好的路由。
通过一些如支持VLSM,支持不连续网络和路由汇总等特性EIGRP同样支持大型网络。
我也同样介绍了EIGRP的配置,和检测修复故障的命令。
本章告诉你关于OSPF的许多处理过程的信息。虽然在本章或者本书不能介绍完OSPF的全部内容,但是我们已经学习了一些最基本的。这对你以后的学习很有帮助,请牢牢地记住这些内容。
我讲了OSPF的很多内容,包括了术语概念,操作和配置,检查确认等。
虽然这些内容是OSPF的很基本的部分,但是你要好好的掌握住你学习的东西:如配置单区域的OSPF,执行VLSM和连续边界路由汇总等。
最后,我告诉了你许多检测的命令,这些命令对观察OSPF的运行很有用。
相关热门文章
给主人留下些什么吧!~~
评论热议