Chapter6 Enhanced IGRP(EIGRP) and Open Shortest Path First(OSPF)
 
 
EIGRP Features and Operation
 
EIGRP 是 1 种无分类(classless),增强的距离向量路由协议,和 IGRP 类似,EIGRP 也使用 AS,
但是和IGRP不同的是,EIGRP在它的路由更新信息中要包含子网掩码的信息.这样,在我们设
计的网络的时候,就允许我们使用 VLSM 和 summarization.EIGRP 有时候也算是混合型路由
协议,因为它同时具有了距离向量路和链路状态的一些特征:比如它不像 OSPF 那样发送链路
状态包而发送传统的距离向量更新;EIGRP 也有链路状态协议的特征比如它在相邻 router 启
动的时候同步路由表,然后只在拓扑结构发生变化的时候发送1些更新.这样就使得EIGRP能
够很好的在 1 个大型网络中工作.EIGRP的主要特点如下:
1.通过 PDMs(Protocol-Dependent Module)来支持 IP,IPX 和 AppleTalk
2.有效的邻 router的发现
3.通过可靠传输协议(Reliable Transport Protocol,RTP)进行通讯
4.通过扩散更新算法(Diffusing Update Algorithm,DUAL)来选择最佳路径
 
Protocol-Dependent Module
 
EIGRP的1大特点是它可以支持几种网络层协议:IP,IPX和AppleTalk等.能像EIGRP那样支
持数种网络层协议的还有 Intermediate System-to-Intermediate System(IS-IS)协议,但是这个协
议只支持 IP和 Connectionless Network Service(CLNS).EIGRP通过 PDMs来支持不同的网络
层协议.每个 EIGRP 的 PDM 保持 1 个单独的路由信息表来装载某种协议(比如 IP)的路由信
息.也就是有 IP/EIGRP表,IPX/EIGRP的表和 AppleTalk/EIGRP表
 
Neighbor Discovery
 
在运行了EIGRP的router彼此进行交换信息之前,它们首先必须成为邻居(neighbor).建立邻居
关系必须满足以下 3 个条件:
1.Hello 信息或接受收 ACK
2.AS号匹配
3.K值
 
链路状态协议趋向于使用 Hello 信息来建立邻居关系,它不会像距离向量那样周期性的发送
路由更新.为了保持邻居关系,运行了EIGRP的 router必须持续从邻居那里收到 Hellos
 
如果不在 1 个 AS 内,router 之间是不会共享路由信息的,也不会建立邻居关系.这样做的优点
是在大型网络中可以减少特定某个 AS内路由信息的传播
 
当 EIGRP 发现新邻居的时候,就开始通告整个路由表给别的 router,当所有的 router 都知道新
成员的加入,学习到新的路径以后,从那开始,路由表中有变动的部分才会传播给别的router.当
router接收到邻居的更新以后,把它们保存在本地数据库表里
 看下几个术语:
1.可行距离(feasible distance):到达一个目的地的最短路由的度
2.后继(successor):后继是一个直接连接的邻居router,通过它具有到达目的地的最短路由.通过
后继 router将包转发到目的地
3.通告距离(reported distance):相邻 router所通告的相邻 router自己到达某个目的地的最短路
由的度
4.可行后继(feasible successor):可行后继是一个邻居 router,通过它可以到达目的地,不使用这
个router是因为通过它到达目的地的路由的度比其他router高,但它的通告距离小于可行距离,
因而被保存在拓扑表中,用做备择路由
 
Reliable Transport Protocol(RTP)
 
EIGRP 使用一种叫做 RTP 的私有协议,来管理使用了 EIGRP 的 router 之间的通信,如 RTP 的
名字,可靠(reliable)即为这个协议的关键.RTP负责EIGRP数据包到所有邻居的有保证和按顺
序的传输.它支持多目组播或单点传送数据包的混合传输/出于对效率的考虑.只有某些 E
IGRP 数据包被保证可靠传输.RTP 确保在相邻 router 间正在进行的通信能够被维持.因此,它
为邻居维护了一张重传表.该表指示还没有被邻居确认的数据包.未确认的可靠数据包最多可
以被重传 1 6 次或直到保持时间超时,以它们当中时间更长的那个为限.EIGRP所使用的多目
组播地址是 224.0.0.10
 
Diffusing Update Algorithm(DUAL)
 
EIGRP使用 DUAL 来选择和保持到远端的最佳路径.它能使 router判决某邻居通告的一个路
径是否处于循环状态,并允许 router 找到替代路径而无须等待来自其他 router 的更新.这样做
有助于加快网络的汇聚.这个算法顾及以下几点:
1.备份的路由线路
2.支持 VLSM
3.动态路由恢复
4.没有发现线路的话发送查询寻找新路线
 
Using EIGRP to Support Large Networks
 
EIGRP在大型网络中能够工作的很好,包含了很多优点比如:
1.在1 个单独的 router上可以支持多个 AS
2.支持 VLSM 和 summarization
3.路由发现和保持
 
Multiple AS
 
只有 AS 号相同的 router 才能共享路由信息.把大型网络分成不同的 AS,可以有效的加快汇
聚.EIGRP的 AD为 90,而外部 EIGRP(external EIGRP)的 AD为 170
 
VLSM Support and Summarization
 之前说过 EIGRP支持 VLSM,也支持不连续子网.什么是不连续子网?,如下图:
 
如图可以看到,2个子网172.16.10.0/24和172.16.20.0/24由10.3.1.0/24来连接,但是routerA和
B 认为它们只有网络 172.16.0.0
 
EIGRP 支持在任何运行 EIGRP 的 router 上 summary 的手动创建,这样可以减少路由表的体
积.EIGRP自动把网络 summarize 到等级边界,如下图:
 
 
Route Discovery and Maintenance 
类似一些链路状态的协议,EIGRP通过Hello信息来发现邻居;而它又和距离向量类似,使用传
闻路由的机制,即不主动去发现,而是听从别人的信息.EIGRP使用一系列的表来存储信息:
1.邻居表,记录了邻居的一些信息
2.拓扑表,记录了网络中的拓扑状态
3.路由表,根据这个来做路由决定
 
EIGRP Metrics
 
EIGRP使用混合度,包含到 4 个方面:
1.带宽
2.延迟(delay)
3.负载(load)
4.可靠性(reliability)
5.最大传输单元(maximum transmission unix,MTU)
 
默认情况下 EIGRP使用带宽和延迟来决定最佳路径
 
Configuration EIGRP
 
配置EIGRP,首先在全局配置模式下使用router eigrp [AS号]命令.接下来再使用network命令
定义直接相连的网络.仍然可以像配置 IGRP 那样使用 passive-interface 命令来禁止某个接口
接收或发送 Hello 信息.并且记住 EIGRP的 AD是 90
 
来看 1 个配置实例,如图:
 
Router      Network Address                 Interface     Address
RouterA     192.168.10.0                      fa0/0         192.168.10.1
               192.168.20.0                      s0/0           192.168.20.1
RouterB    192.168.20.0                       s0/0          192.168.20.2                192.168.40.0                      s0/1           192.168.40.1
               192.168.30.0                      fa0/0         192.168.30.1
RouterC    192.168.40.0                       s0/0          192.168.40.2
               192.168.50.0                      fa0/0         192.168.50.1
配置 RouterA:
RouterA(config)#router eigrp 10
RouterA(config-router)#network 192.168.10.0
RouterA(config-router)#network 192.168.20.0
RouterA(config-router)#^Z
RouterA#
记住配置EIGRP和配置IGRP十分类似,唯一不同的是EIGRP是无分类路由(classless routing)
配置 RouterB:
RouterB(config)#router eigrp 10
RouterB(config-router)#network 192.168.20.0
RouterB(config-router)#network 192.168.30.0
RouterB(config-router)#network 192.168.40.0
RouterB(config-router)#^Z
RouterB#
配置 RouterC:
RouterC(config)#router eigrp 10
RouterC(config-router)#network 192.168.40.0
RouterC(config-router)#network 192.168.50.0
RouterC(config-router)#^Z
RouterC#
这样配置看上去好象没什么问题,EIGRP 的 AD 比之前配置的 RIPv1 和 IGRP 的低,但是有个
问题就是:增加了 CPU的负担,而且占用了额外的带宽
 
还有 1 点要注意的是自动 summarization,router 默认会向分级边界进行 summarize.如下图:
 A的配置如下:
A(config)#router eigrp 100
A(config-router)#netw 172.16.0.0
A(config-router)#netw 10.0.0.0
A(config-router)#no auto-summary
B 的配置如下:
B(config)#router eigrp 100
B(config-router)#netw 172.16.0.0
B(config-router)#netw 10.0.0.0
B(config-router)#no auto-summary
使用 no auto-summary 命令后,运行了EIGRP的 router就不会相互进行通告
 
Verifying EIGRP
 
在刚才配置好的情况下使用 show ip route 命令查看路由信息,如下:
RouterA#sh ip route
(略)
D      192.168.30.0/24 [90/2172416] via 192.168.20.2, 00:04:36, Serial0/0
(略)
注意字母 D代表 DUAL,即代表 EIGRP,AD 为 90
 
show ip route eigrp 命令只显示路由表中的 EIGRP选项
 
show ip eigrp neighbors:显示所有的 EIGRP邻居
 
show ip eigrp topology:显示 EIGRP拓扑表条目,如下:
RouterC#sh ip eigrp topology
(略)
P 192.168.40.0/24, 1 successors, FD is 21469856
     Via Connected, Serial0
(略)
注意前面的 P 代表 passive 状态,这样的状态是正常的如果看见的是 A 即 active 状态而不是
P,说明 router失去了到这个网络的路径并且在寻找替代路径
 
Open Shortest Path First(OSPF) Basics
 
在 1 个大型网络中,假如不是所有的设备都是 Cisco 的,EIGRP 明显就不行,因为它是私有的.
所以就可以使用 OSPF 协议或者路由 redistribution(路由协议之间的翻译服务).OSPF 使用
Dijkstra 算法,是 1 种链路状态协议.OSPF 汇聚快速,支持多个耗费相同的路径.和 EIGRP 不同
的是,OSPF 只支持 IP 路由.OSPF 也能够设计网络为层次化的,这样就把 1 个大的网络分割成
几个小的网络,叫做区域(area).这是 OSPF 最好的设计方法.把 OSPF 设计成层次化的好处是:
1.减少路由成本(overhead)
2.加速汇聚
3.把大网络分割成小的区域 
下面是 1 个典型的 OSPF 设计图,如下:
 
注意这个图,BR 为骨干 router(backbone router,BR),连接到这个骨干的为区域 0 或者骨干区域
(backbone area),OSPF必须要有个区域 0 所有的 router应该尽可能的连接到这个区域.连接其
他区域到骨干区域的为区域边界 router(area border  router,ABR),ABR必须至少有 1 个接口位
于区域 0 中.OSPF 运行在 1 个 AS 中,而且能够连接多个 AS,连接多个 AS 的 router 为自治系
统边界 router(autonomous system boundary router,ASBR)
 
OSPF Terminology
 
来看一些 OSPF 的术语:
1.link:网络或分配给网络的 router 的接口.当接口被加到 OSPF 的进程中以后,OSPF 把它认为
成是 1 条连接(link)
2.Router ID(RID):用来鉴别 router 的 IP 地址,Cisco 通过使用回环(loopback)接口的最高的 IP
地址来鉴别 router.如果回环接口没有配置 IP 地址,OSPF 将选择所有物理接口中最高的 IP 地

3.neighbors:2个或多个拥有连接到某个网络的接口的 router
4.adjacency:允许直接进行路由更新的运行了 OSPF 的 2 个 router 的关系.不像 EIGRP,OSPF
直接和建立了 adjacency 关系的邻居共享路由信息.并不是所有的邻居都是 adjacency 关系,这
个取决于网络类型和 router的配置
5.neighborship database:所有运行OSPF的能够接收Hello信息的router的名单列表.各种信息,
包括 RID和状态等,都保持在每个 router的 neighborship database 中
6.topology database:包含了从链路状态通告(link state advertisement,LSA)包得来的信息.router
把它输入到 Dijkstra 算法中算出最短路径
7.link state advertisement:共享在运行了 OSPF 的 router之间的链路状态和路由信息.router和
与它建立了 adjacency关系的交换 LSA包
8.designated router(DR):多路访问网络中为避免 router 间建立完全相邻关系而引起大量开销,OSPF 在区域中选举一个 DR,每个 router 都与之建立完全相邻关系.router 用 Hello 信息选
举一个 DR.在广播型网络里 Hello 信息使用多播地址 224.0.0.5 周期性广播,并发现邻居.在非
广播型多路访问网络中,DR 负责向其他 router逐一发送 Hello信息
9.backup designated router(BDR):多路访问网络中 DR 的备用 router,BDR 从拥有 adjacency关
系的 router接收路由更新,但是不会刷新 LSA更新
10.OSPF areas:连续的网络和router的分组.在相同区域的router共享相同的area ID.因为1个
router1 次可以成为 1 个以上的区域的成员, area ID和接口产生关联,这就允许了某些接口可
以属于区域1,而其他的属于区域0.在相同的区域的router拥有相同的拓扑表.当你配置OSPF
的时候,记住必须要有个区域 0,而且这个一般配置在连接到骨干的那个 router 上.区域扮演着
层次话网络的角色
11.boradcast(multi-access):广播型(多路访问)网络.比如以太网,允许多个设备连接,访问相同的
网络;而且提供广播的能力.在这样的网络中必须要有 1 个 DR 和 BDR
12.nonbroadcast multi-access(NBMA):这类网络类型有帧中继(Frame Relay),X.25 和异步传输
模式(Asynchronous Transfer Mode,ATM),这类网络允许多路访问,但是不提供广播能力
13.point-to-point:点对点网络.一个物理上的串行电路连接或者是逻辑上的,不需要DR和 BDR,
邻居是自动发现的
14.point-to-multipoint:点对多点网络.不需要 DR 和 BDR
 
SPF Tree Calculation
 
在 1 个区域内,每个 router 计算最佳最短的路径,这个计算是基于拓扑数据库里的信息和最短
路径优先(shortest path first,SPF)算法的
 
SPF算法是OSPF的基础.当router启动后,它就初始化路由协议数据结构,然后等待下层协议关
于接口已可用的通知信息.当router确认接口已准备好,就用OSPF Hello信息来获取邻居信息,
即具有在共同的网络上接口的router.router向邻居发送Hello包并接收它们的Hello包.除了帮
助学习邻居外,Hello包也有keep-alive的功能
 
在多路访问网络中,Hello 选出一个 DR 和一个 BDR.DR 负责为整个网络生成 LSA,它可以减
少网络通信量和拓扑数据库的大小
 
当两个相邻 router 的链接状态数据库同步后,就称为邻接.在多路访问网络中,DR 决定哪些
router 应该相邻接,拓扑数据库在邻接 router 间进行同步.邻接控制路由协议包的分发,只在邻
接点间交换
 
每个 router 周期性地发送 LSA,提供其邻接点的信息或当其状态改变时通知其它 router.通过
对已建立的邻接关系和链接状态进行比较,失效的 router 可以很快被检测出来,网络拓扑相应
地更动.从 LSA 生成的拓扑数据库中,每个 router 计算最短路径树,以自己为根.这个最短路径
树就生成了路由表
 
Cisco 使用基于带宽的度,而其他厂商是用不同的标准来痕量度的.Cisco 痕量度的公式为
100,000,000/带宽(bps).比如 100Mbps 的快速以太网接口的耗费就为 1,10Mbps 的就为
10,64Kbps 的耗费为 1563.可以使用 ip ospf cost 命令来修改耗费,值的范围是 1 到65535
 Configuring OSPF
 
在 CCNA的认证课程里,我们只讨论单域(single area)的 OSPF 配置.配置 OSPF 的 2 个要素:
1.启用 OSPF
2.配置 OSPF 的区域
 
Enabling OSPF
 
启用 OSPF 在全局配置模式下使用 router ospf [进程 ID]命令,进程 ID范围是 1 到65535.可以
在同1个router上使用不止1个的OSPF进程,但是这并不等于多域(multi-area)的OSPF.第二
个进程保持完整的拓扑数据库的拷贝,而且独立于第一个进程进行管理通信
 
Configuring OSPF Areas
 
OSPF 使用 wildmask 来进行配置,如下:
RouterA(config)#router ospf 1
RouterA(config-router)#network 10.0.0.0 0.255.255.255 area 0
如上,0.255.255.255 为 wildmask,0 的部分表示必须精确匹配,255 表示为任意匹配.network
10.0.0.0 0.255.255.255 area 0 这个命令的作用是:鉴定 OSPF 操作的接口,而且也会加进 OSPF
LSA通告的范围呢.OSPF使用这个命令查找所有处在10.0.0.0的网络里的接口,然后把它们放
进区域 0
 
来看 1 个配置实例,如图:
 
Router      Network Address                 Interface     Address
RouterA     192.168.10.0                      fa0/0         192.168.10.1
               192.168.20.0                      s0/0           192.168.20.1
RouterB    192.168.20.0                       s0/0          192.168.20.2
               192.168.40.0                      s0/1           192.168.40.1
               192.168.30.0                      fa0/0         192.168.30.1 RouterC   192.168.40.0               s0/0       192.168.40.2
          192.168.50.0               fa0/0      192.168.50.1
 
由于 OSPF 的 AD 为 110,IGRP 的为 100,EIGRP 的为 90.所以要先去掉之前所配置的协
议,RouterA配置如下:
RouterA(config)#no router eigrp 10
RouterA(config)#no router igrp 10
RouterA(config)#no router rip
RouterA(config)#router ospf 132
RouterA(config-router)#network 192.168.10.1 0.0.0.0 area 0
RouterA(config-router)#network 192.168.20.1 0.0.0.0 area 0
RouterA(config-router)#^Z
RouterA#
 
RouterB 的配置如下:
RouterB(config)#no router eigrp 10
RouterB(config)#no router igrp 10
RouterB(config)#no router rip
RouterB(config)#router ospf 1
RouterB(config-router)#network 192.168.0.0 0.0.255.255 area 0
RouterB(config-router)#^Z
RouterB#
注意这里的参数192.168.0.0 0.0.255.255;代表查找192.168.0.0里的任何接口,并把它们放到区
域 0 里
 
RouterC 的配置如下:
RouterC(config)#no router eigrp 10
RouterC(config)#no router igrp 10
RouterC(config)#no router rip
RouterC(config)#router ospf 64999
RouterC(config-router)#network 192.168.40.0 0.0.0.255 area 0
RouterC(config-router)#network 192.168.50.0 0.0.0.255 area 0
RouterC(config-router)#^Z
RouterC#
 
Verifying OSPF Configuration
 
使用 show ip route 命令来验证下,如下:
RouterA#sh ip route
(略)
O    192.168.30.0/24 [110/65] via 192.168.20.2, 00:01:07, Serial0/0
(略)
注意上面的 O代表 OSPF,AD 为 110,度为 65
 其他的一些验证命令:
 
show ip ospf:显示每条或所有 ODPF 进程的相关信息,包括 RID,区域信息,SPF 信息和 LAS计
时器信息等,如下:
RouterA#sh ip ospf
Routing Process “ospf 132” with ID 192.168.20.1
(略)
如上可知道 RID为 192.168.20.1.即 router的最高的那个 IP地址
 
show ip ospf database:显示拓扑数据库信息,如下:
RouterA#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
(略)
 
show ip ospf interface:显示接口相关的 OSPF 信息,包含:
1.接口 IP地址信息
2.区域的分配信息
3.进程 ID
4.RID
5.网络类型
6.耗费(cost)
7.优先级(priority)
8.DR/BDR
9.计时器间隔(timer intervals)
10.邻接的邻居信息
 
show ip ospf neighbor:显示邻居的信息,如果 DR 和 BDR 存在的话,它们的信息也会被显示出

 
show ip protocols:显示配置了的所有路由协议的相关信息
 
OSPF and Loopback Interfaces
 
在配置 OSPF 路由协议的时候配置回环(loopback)接口是很重要的 1 件事.Cisco 建议你配置
OSPF 的时候顺便配置回环接口.所谓回环接口,是逻辑接口而非物理接口,即不是你触摸的到
的 router 上的真正的接口.作用是作为诊断 OSPF 而用.如果 router 的某一个接口由于故障
down 掉而不可用了,此时你怎么通过 telnet 来连接并进行管理用呢?所以就引入了回环接口
是概念,回环接口永远不会 down 掉,你就可以通过连上回环接口来进行管理
 
Configuring Loopback Interfaces
 配置回环接口前先使用 show ip ospf命令查看 RID,接下来对接口进行配置,如下:
RouterA的配置:
RouterA(config)#int loopback0
RouterA(config-if)#ip address 172.16.10.1 255.255.255.0
RouterA(config-if)#no shut
RouterA(config-if)#^Z
RouterA#
RouterB 的配置:
RouterB(config)#int lo0
RouterB(config-if)#ip address 172.16.20.1 255.255.255.0
RouterB(config-if)#no shut
RouterB(config-if)#^Z
RouterB#
RouterC 的配置:
RouterC(config)#int lo0
RouterC(config-if)#ip address 172.16.30.1 255.255.255.0
RouterC(config-if)#no shut
RouterC(config-if)#^Z
RouterC#
注意 2 个回环接口的 IP地址配置机制为任意配置,但是 IP地址必须处于不同的子网内
 
Verifying Loopbacks and RIDs
 
验证回环接口的地址,可以使用 show running-config 的命令查看,如下:
RouterC#sh run
(略)
!
interface Loopback0
  ip address 172.16.30.1 255.255.255.0
!
(略)
 
可以使用 show ip ospf database 命令,show ip ospf interface命令和show ip ospf命令查看 RID
信息.记住在你重新启动 router前,新的RID是不会显示出来的,如下,启动后的 RID信息:
RouterC#sh ip ospf
Routing Process “ospf 64999” with ID 172.16.30.1 and Domain ID 0.0.253.231
(略)
如上可以看出假如回环接口 IP 地址高于物理接口 IP 地址,将以回环接口的 IP 地址作为新的
RID