首页 > 学技术 > 技术网文 > 网络技术 > 正文

[精彩] [新原创]Cisco网络专家教程Phase2-路由技术教程


来源 chinaunix.net 酷勤网整理

下载地址:http://www.show-tym.com/bbs/zboard.php?id=works
省略了BGP和NAT的内容,原因是我认为BSCI里讲的比较少,推荐看Routing TCP/IP Vol.2


Building Scalable Cisco Internetworks

Preface


Noco#sh start
!
Written by 大写的J(红头发,绯瞳) a.k.a Ca.J
Description请保留作者信息
Homepage http://www.show-tym.com/
Apr.12th.2004
!


Module1 Advanced IP Addressing


Scalable Network Design

一般说来在规划网络的时候要考虑到一点,即可扩展性网络设计一般是把它设计为层次化的,一般分为以下三层:
Access Layer(访问层):用户接入到网络中的接入点
Distribution Layer(分发层):该层是访问层用户访问网络资源的一个汇聚点
Core Layer(核心层):负责在各个分割的网络之间进行高速有效的数据传输

网络层次化的设计可以基于以下两种方法来划分:
1.按功能,企业的不同部门来划分
2.按地理位置来划分
但是记得不管你按何种方式来设计你的网络,三层元素要考虑进去:
1.核心层:需要大带宽,冗余连接
2.访问层:用户接入到网络的接入点.地址的分发(比如DNCP),VLAN的设计,防火墙,ACL等都在这层考虑进去
3.分发层:访问层设备的汇聚点

看看核心层的两种设计,如下:
1.全互连(fully meshed)的方式,优点是提供冗余连接,但是随着网络的扩展,成本会越来越高
2.星形设计方式(hub-and-spoke),让其他设备都连接到相对独立的中心设备上去.这样做节省了一些开销,但是冗余度上比全互连的方式要差

Benefits of Good Network Design

先来看看RFC1918定义的私有IP地址范围:
A类:10.0.0.0到10.255.255.255
B类:172.16.0.0到172.31.255.255
C类:192.168.0.0到192.168.255.255

在注意设计一个好的网络的IP地址规划的时候要注意以下几点:
1.可扩展性(scalability)
2.可预测性(predictability)
3.灵活性(flexibility)

Benefits of an Optimized IP-Addressing Plan

层次化地址规划的好处:
1.减少了路由表(routing table)的条目(entry)
2.可以有效的对地址进行分配

可以使用路由汇总(route summarization)来减少路由表的条目,路由汇总使得多个IP地址是集合看上去就像是一个IP地址从而减少在路由器中的条目.这样就可以减轻路由器的CPU和内存的负载,提供更为有效的路由服务,加快了网络收敛(convergence)的速度,简化了排错(troubleshooting)的过程

Hierarchical Addressing Using Variable-Length Subnet Masks

变长子网掩码(Variable-Length Subnet Masks,VLSM)的出现是打破传统的以类(class)为标准的地址划分方法,是为了缓解IP地址紧缺而产生的

先来看看前缀(prefix)的概念:假设给你个地址范围192.168.1.64到192.168.1.79.前3个8位位组(octet)是一样的,我们来看看组后个8位位组,写成2进制,如下:
64:0100 0000
65:0100 0001
66:0100 0010
……………..
77:0100 1101
78:0100 1110
79:0100 1111
注意它们的共通点:前4位是一样的,加上前3个8位位组的24位就等于28位,所以我们就可以认定这个网段的前缀是/28(即255.255.255.240).所以在这个例子里,主机位就只有4位

来看下VLSM的应用:
假如一个公司使用的是172.16.0.0/16的地址空间.给公司的分部A分配172.16.12.0/22到172.16.14.255/22的地址块.D需要2个VLAN,然后每个VLAN容纳200个用户.A,B和C连接3个以太网,分别用1个24口的交换机相连(不考虑级联等因素)
先从需要最大用户的入手:要让1个子网容纳200个用户,即主机位应该保留为8位(254台主机,假如主机位是9位的话可以容纳510台主机,但是造成了地址空间的浪费).所以前缀为/24,从172.16.12.0/24开始分配起走.如下图:

然后分配A,B和C的地址:A连接一个24口的交换机,即需要24个主机地址,那么主机位应该保留为5位(可以容纳30台主机),即前缀为/27(255.255.255.224),因为172.16.12.0/24和172.16.13.0/24已经被D全部占用,所以从172.16.14.0/27开始分配.如下图:

最后来给A和D,B和D,C和D之间分配IP地址.由于它们之间是点对点连接,所以主机位只保留2位,即前缀是/30就可以了.除掉掉2个VLAN和3个LAN占用了的地址,还剩下下面几个地址块:
172.16.14.96/27
172.16.14.128/27
172.16.14.160/27
172.16.14.192/27
172.16.14.224/27
我们从172.16.14.224/27来进行划分(一般选择最后1个地址块进行划分).如下图:


Route Summarization and Classless Interdomain Rouring

我们先来看下什么是路由汇总和无类域间路由(Classless Interdomain Rouring,CIDR),它是为了缓解IP地址短缺,减小路由表的体积,打破传统的以类划分网络的一种技术,如下图:

4个C类地址的子网经过D的路由汇总成一条192.16.12.0/22,注意这个192.16.12.0/22既不是A类也不是B类更不是C类,可以理解成超网(supernetting),即无类的概念

Understanding IP Version 6

IPv6是IPv4的增强版本,和IPv4相比,有很多优点包括:
1.支持更大的地址空间
2. IPv6的头部格式比IPv4的头部更为简化,IPv6的头部可以根据需要进行扩展(简单并不代表短,注意不要混淆)
3.更高的安全性和能很好的和移动IP相互兼容
4.能够平滑过渡IPv4到IPv6

移动IP是IETF标准,使得移动设备在不中断现有连接的情况下进行迁移.这一特征是内建在IPv6中的,但是IPv4就不是.IP Sec是IETF开发的标准,用于增强IP网络安全性,这一特性对IPv6是必须的

IPv6 Addressing

IPv4是32位长,4字节;IPv6是128位长,16字节;IPv4支持的地址最多达到42亿,IPv6支持的地址多达3.4乘以10的38次方.增加IP地址的位长即增加了IP包头部信息的大小

IPv6的表示方法:
1.X:X:X:X:X:X:X:X(每个X代表16位的16进制数字).不区分大小写
2.排头的0可省略,比如09C0就可以写成9C0,0000可以写成0
3.连续为0的字段可以以::来代替,但是整个地址中::只能出现一次.比如FF01:0:0:0:0:0:0:1就可以简写成FF01::1
来看几个简写的例子:
0:0:0:0:0:0:0:0可以写成::
0:0:0:0:0:0:0:0可以写成::1

Multicast Use

IPv4中的广播(broadcast)可以导致网络性能的下降甚至广播风暴(broadcast storm).在IPv6中,就不存在广播这一概念了,取而代之的是组播(multicast)和任意播(anycast)组播的接受对象是一组成员,是个群体.任意播是多个设备共享一个地址.分配IPv6单播(unicast)地址给拥有相同功用的一些设备.发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备.单播地址用来分配任意播地址.对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址

Autoconfiguration

来看下IPv6的自动配置:当本地链路的路由器发送网络类型信息给所有节点的时候.支持IPv6的主机就把它自己64位的链路层地址附着在64位的前缀自动配置成128位长的地址,保证地址的唯一性.自动配置启用即插即用(Plug and Play)

IPv6 Renumbering

IPv6的重编号:路由器发送组播数据包,其中数据包中包含2个前缀,一个是拥有比较短的生存期的前缀,还有一个是新的拥有正常时间的前缀.通知网络上的节点用完旧的前缀后换成新的前缀,这样就能进行平滑的前缀过渡

IPv4 to IPv6 Transitioning

两种转换的方式:
1.双栈(dual stack)
2.IPv6到IPv4(6to4)的隧道(tunnel)
还有一种是利用NAT来翻译46地址

来看看双栈配置的例子,如下:
Router#sh run
(略)
!
interface Ethernet0
 ip address 192.168.99.1 255.255.255.0
 ipv6 address 3ffe:b00:c18:1::3/127
!
(略)

隧道技术是在双栈路由器上,将IPv6包封装在IPv4包中,然后经过IPv4网络传递到另外一端的双栈路由器上去,然后再由它解封装
要注意的是对采用了隧道技术的网络进行排错的话比较复杂,要记住的是这只是一个过渡方案,不是最终的体系结构对隧道进行配置,需要满足以下2个条件:
1.在连接网络的两端采用双栈路由器
2.在双栈路由器的接口同时配置IPv4和IPv6的地址


Module2 Routing Principles


Principles of Static Routing

我们来复习下配置静态路由的语法,在全局配置模式下使用:
ip route prefix mask {next-hop address|interface} [distance] [permanent]
看下各个参数的含义:
prefix mask:要加进路由表中去的远程网络及其子网掩码
next-hop address:下一跳地址
interface:到达目标网络的本地路由器的出口
distance:管理距离(AD),可选
permanent:路由条目永久保存在路由表中,即使路由器的接口down掉了
注意,一般只在点对点的连接中使用interface选项,否则应该使用next-hop address选项

使用静态路由的好很多,比如可以对网络进行完全的掌控,不会占用额外的路由器CPU和内存资源以及网络带宽.适用于小型网络中

如下就是一个静态路由的例子:

如图,对于A,只需要在它上面配置ip route 10.2.0.0 255.255.0.0 s0就可以了,这里采用的就不是next-hop address而是采用本地的出口接口(因为是点到点是连接);当然也可以这样配置成ip route 10.2.0.0 255.255.0.0 10.1.1.1,这里采用的就是next-hop address
同样对于B的配置就可以使用ip route 172.16.1.0 255.255.255.0 s0或者ip route 172.16.1.0 255.255.255.0 10.1.1.2

默认路由(default route):一般使用在stub网络中,stub网络是只有1条出口路径的网络.使用默认路由来发送那些目标网络没有包含在路由表中的数据包或者所有的数据包.语法是把静态路由中的prefix mask写成0.0.0.0和0.0.0.0

Principles of Dynamic Routing

动态路由允许路由器自动交换路由信息从而了解整个网络的信息.动态路由的好处是:使用中型和大型网络,能够根据网络拓扑的变化自动更改路由表的信息,避免了人工手动更改;但是带来的缺点就是占用路由器额外的CPU和内存资源以及网络带宽

Principles of On-Demand Routing

ODR是Cisco私有的,主要用在如下的一种星型环境中:

有的时候你会觉得假如你使用静态路由,当网络拓扑发生变化以后,就得手动修改路由表;但是你又不想使用动态路由,因为那样占用了你额外的一些硬件资源和网络带宽.在如上图的环境中就可以使用ODR.ODR使用Cisco发现协议(CDP)携带网络信息.ODR的好处是最大可能的减少了网络硬件和资源的负载,同时又减少了手动修改的工作量.但是ODR只使用于hub-and-spoke这样的拓扑结构中.如上图,AC,D和E就是spoke router,或者叫做stub router,B作为中心,叫做hub router.当配置了ODR以后,spoke router使用CDP发送IP前缀信息到hub router,spoke router发送IP前缀信息给所有和它直接相连的网络.ODR报告子网掩那子信息,所以ODR支持VLSM.然后hub router依次发送指向到它自己的默认路由给周边的spoke router

严格说来ODR不算是真正的路由协议,因为它交换的信息仅仅局限在IP前缀信息和默认路由上,ODR没有包含度(metric)的信息.ODR使用跳数(hop count)作为度

配置ODR只需要在hub router上的全局配置模式下起用router odr命令,不需要在stub router上配置IP路由信息,但是必须在接口上开启CDP功能

对ODR的验证,如下:
B#show ip route
(略)
o 172.16.1.0/24 [160/1] via 10.1.1.2, 00:00:23, Serial0 
o 172.16.2.0/24 [160/1] via 10.2.2.2, 00:00:03, Serial1
o 172.16.3.0/24 [160/1] via 10.3.3.2, 00:00:16, Serial2
o 172.16.4.0/24 [160/1] via 10.4.4.2, 00:00:45, Serial3
(略)
注意o代表ODR,管理距离为160

Classful Routing Protocol Concept

基于类的路由协议最大的特点是在路由更新(routing update)中不包含子网掩码的信息.由于不知道子网掩码的信息,当一个基于类的路由器接受或发送,路由器会假设认为网络所使用的子网掩码是包含进路由更新中的,而且这些假设是基于IP的类.在接收到路由更新以后,运行了基于类的路由协议的路由器就会根据以下其中一条来决定网络路径:
1.如果路由更新信息包含相同的主网络号和接收更新的接口配置相同的话,路由器就应用接收更新的接口的那个子网掩码
2.如果路由更新信息包含相同的主网络号和接收更新的接口配置不相同的话,路由器将应用默认的子网掩码:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0

当使用基于类的路由协议的时候,所有的网络主网络号必须相同,而且子网必须连续.否则路由器将对子网信息做出错误的判断.运行了基于类的路由协议会在网络的边界(boundary)做自动的路由汇总

常见的基于类的路由协议有:IGRP和RIPv1

Network Summarization in Classful Routing

来看看网络汇总在边界的发生,如下图:

B作为网络的分界,从C到A,B将两条条目(172.16.1.0和172.16.2.0)的信息汇总成一条(172.16.0.0);从A到C,B将两条条目(10.1.0.0和10.2.0.0)的信息汇总成一条(10.0.0.0).在基于类的路由协议里,这样的汇总是自动进行的,不需要手动配置.前提是子网掩码等长,子网连续

假如说子网不连续,如下图:

如图中的表所示,D给C传送一条汇总路由10.3.0.0;B传送条汇总路由10.2.0.0给C.对于C而言它就会做出错误的判断,它区分不了10.2.0.0和10.3.0.0分别在哪边.所以说做基于类的路由协议的路由汇总,子网必须连续.但是这样一来,会造成地址空间的浪费(和VLSM相比)

Examining a Classful Routing Table

假设我们使用show ip route命令,产生如下输出:
J# show ip route
(略)
Gateway of last resort is 0.0.0.0 to network 0.0.0.0     
10.0.0.0/24 is subnetted, 3 subnets, 
R    10.1.1.0/24 [120/1] via 10.1.2.2, 00:00:05, Ethernet0
C    10.1.2.0/24 is directly connected, Ethernet0
R    10.1.3.0/24 [120/2] via 10.1.2.2, 00:00:05, Ethernet0
R    192.168.24.0/24 [120/2] via 10.1.2.2, 00:00:16, Ethernet0
R    172.16.0.0/16 [120/3] via 10.1.2.2, 00:00:16, Ethernet0
R*   0.0.0.0/0 [120/3] via 10.1.2.2, 00:00:05, Ethernet0
(略)
如上,可以看出10.1.2.0/24是直接相连,其他的都是通过RIP学习到的.现在我们假设有以下几个目的地的包,它们对于上面的输出会如何进行匹配:
192.168.24.3
172.16.5.1
10.1.2.7
200.100.50.0
10.2.2.2
根据show ip route的输出可以看出,到达192.168.24.3的包会跟第四条(92.168.24.0/24)相匹配,(虽然最后一条也可以,但是匹配原则是匹配掩码最长的那条);接下来,172.16.5.1和第五条(172.16.0.0/16)匹配;10.1.2.7和第二条(10.1.2.0)相互匹配;200.100.50.0和前五条都不匹配,和第六条默认路由(0.0.0.0/0)相互匹配;10.2.2.2虽然和前三条的第一个8位位组匹配,但是后面3个8位位组不匹配,所以它将被丢弃而不会采用默认路由

如果你在全局模式下使用了ip classless命令的话,目的地是10.2.2.2的包就不会被丢弃,就会采用默认路由.ip classless命令在Cisco IOS版本12.0和12.0以后默认打开的,无须手动打开

Classless Routing Protocol Concepts

基于无类概念的路由协议可以说是第二代路由协议,相比基于类的路由协议,它可以解决地址空间过于浪费的问题.这类协议的例子有RIPv2,OSPF,EIGRP,IS-IS,BGPv4.使用无类的路由协议,拥有相同主网络号的不同子网就可以使用不同的子网掩码(VLSM).假如在路由表中到达目的网络的匹配条目不止一条,将会选择子网掩码长的那条进行匹配.比如假如有两条条目172.16.0.0/16和172.16.5.0/24,如果目的地是172.16.5.99的包将会和172.16.5.0/24进行匹配而不是和172.16.0.0/16进行匹配

还有一点是无类的路由协议的自动汇总可以手动关闭,这样的自动汇总会影响不连续的子网的使用而造成错误的汇总路由信息(这点和基于类的路由协议在不连续子网的情况下的自动汇总所带来的问题是一样的)

Automatic Network-Boundary Summarization Using RIPv2 and EIGRP

基于无类的路由协议一般不会对所有的子网进行宣告(advertise).默认的,比如像EIGRP和RIPv2会像基于类的路由协议那样,在网络的边界进行自动汇总,这样就使得它们能和它们的之前的RIPv1和IGRP很好的兼容但是和之前的RIPv1和IGRP不同的是,你可以手动关闭自动汇总.在配置相关路由的时候只需要输入no auto-summary就可以了.这个命令在配置OSPF和IS-IS的时候是不必输入的,因为默认OSPF和IS-IS不会进行自动汇总

在RIPv2中关闭自动汇总,如下:
Router(config)#router rip
Router(config-router)#version 2
Router(config-router)#no auto-summary
version 2命令是启用RIPv2版本

Characteristics of RIP Version 1

RIPv1的特点包括:
1.使用跳数(hop count)作为度来决定最佳路径
2.允许最大跳数是15跳
3.默认是每30秒广播路由更新(实际环境中并不是设定的固定为30秒,而是25秒到30秒之间的随机时间,防止两个

路由器发送同时更新产生冲突)
4.最多支持6条等价链路的负载均衡,默认是4条
5.是基于类的路由协议,不支持VLSM
6.不支持验证(authentication)

Characteristics and Configuration of RIPv2

RIPv2比RIPv1增强的特点包括:
1.基于无类概念的路由协议
2.支持VLSM
3.可以人工设定是否进行路由汇总
4.使用多播来代替RIPv1中的广播
5.支持明文或MD5加密验证
RIPv2使用多播地址224.0.0.9来更新路由信息

RIPv2的配置命令步骤如下:
1.启动RIP路由协议 :
Router(config)#router rip
2.启动版本2 :
Router(config-router)#version 2 
3.设置进行宣告的网络号
Router(config-router)#network network-number
一默认Cisco IOS会接收版本1和2的更新包, ;但是只发送版本1的包.要设置成只发送和接收一种版本的包,使用version {1|2}命令即可

一些其他的命令,如下 :
Router(config-if)#ip rip send | receive version {1|2} or 1 2
在接口模式下设置摸个接口接受和发送不同版本的包或同时接收发送版本1和2的包
Router(config-if)#ip summary-address rip network mask
如果之前在全局配置模式下使用no auto-summary关闭了自动汇总的话,要在某个接口做人工汇总的话就用上面这个命令

来看一个例子,如下图:

如图所显示的是一个RIPv1和RIPv2协同工作的网络.A运行RIPv2,C运行RIPv1,B同时运行RIPv1和RIPv2
对C的配置,如下:
C(config)#router rip
C(config-router)#version 2
C(config-router)#network 10.0.0.0
C(config-router)# network 192.168.1.0.
对B配置,如下:
B(config)#router rip
B(config-router)#version 2
B(config-router)#network 10.0.0.0
光配置这些是不够的,还要对B做进一步配置,如下:
B(config)#int s3
B(config-if)#ip rip send version 1
B(config-if)#ip rip receive version 1
如上,我们在s3口配置了接收和发送RIPv1的更新,因为RIPv2是作为主要运做的协议,C运行的是RIPv1,所以要让B和C进行正确的信息交换的话,就要在B的s3口配置上述命令
对A进行配置,如下:
A(config)#router rip
A(config-router)#version 2
A(config-router)#network 10.0.0.0
A(config-router)#network 172.16.0.0
A(config-router)#no auto-summary
如上我们关闭了自动汇总,当然这样是不够的,还应该做如下配置进行手动汇总:
A(config)#int s2
A(config-if)#ip summary-address rip 172.16.1.0 255.255.255.0
这样做的目的是允许把172.16.1.0/24的信息发送给B,因为默认发送给B的信息是172.16.0.0/16

Administrative Distance

看看Cisco制定的各个路由协议的管理距离(AD),如下:
1.直接相连:0
2.静态路由:1
3.EIGRP汇总路由(summary route):5
4.外部BGP:20
5.内部EIGRP:90
6:IGRP:100
7.OSPF:110
8.IS-IS:115
9.RIP(v1,v2):120
10.外部EIGRP:170
11.内部BGP:200

Floating Status Route

因为静态路由的AD比一些动态路由协议的AD高,假如你又想优先采用动态路由,而让静态路由作为备份路由的话,就可以在配置静态路由的时候指定一个AD值,这个AD值要比你采用的动态路由协议要高才行.所以一般当动态路由正常的时候,你在路由表里是看不到这条静态路由的;当动态路由出问题的时候,静态路由开始生效,于是出现在路由表里,这样的静态路由就叫做浮动静态路由(floating static route)

来看一个例子,如下图:

对A的配置如下:
A(config)#ip route 10.0.0.0 255.0.0.0 172.16.1.2 100
A(config)#router eigrp 100
A(config-router)#network 192.168.1.0
A(config-router)#network 172.17.0.0
如上,我们对静态路由的AD指定为100,EIGRP的AD为90,所以优先采用EIGRP
对B的配置和A类似,如下:
B(config)#ip route 172.17.0.0 255.255.0.0 172.16.1.1 100
B(config)#router eigrp 100
B(config-router)#network 10.0.0.0
B(config-router)#network 192.168.1.0
注意,不能在ISDN上配置EIGRP,因为ISDN一般作为备份连接,如果在ISDN上配置了EIGRP的话,那ISDN连接将永久保持,就失去了作为备份连接的意义了

Criteria for Inserting Routes in the IP Routing Table

路由器决定最佳路径要参考以下几个标准,如下:
1.有效的下一跳IP地址
2.最佳的度
3.管理距离
4.选择前缀匹配最长的路由

Protocols, Ports, and Reliability

各个路由协议的协议号,端口号和可靠性的比较,如下图:

IGRP,EIGRP和OSPF是OSI参考模型中传输层的协议,都通过IP包进行数据交换,IGRP使用无连接特性,尽最大努力进行传送;EIGRP和OSPF使用一一确认的窗口技术(即发送出一个包要等待该包的确认后再发送下一个包).IGRP的协议号是9,EIGRP的协议号是88;OSPF的协议号是89RIP和BGP都是OSI参考模型应用层的协议.RIP使用UDP作为它的传输协议,不可靠,只是尽力传送,使用UDP端口520.RIPv1使用广播传输;RIPv2使用多播传输
BGP使用TCP作为它的传输协议,最大特点是可靠,使用了窗口技术.IS-IS是OSI参考模型中网络层的协议,它不使用IP作为它的传输协议.IS-IS包是直接封装在OSI参考模型中的数据链路层中的

Routing Protocol Comparison

各种路由协议的比较如下图:

BGP严格的来说是路径矢量(path-vector)路由协议

Module3 Configuring EIGRP


EIGRP Features

EIGRP是Cisco的私有路由协议,它综合了距离矢量和链路状态2者的优点,它的特点包括:
1.快速收敛:EIGRP使用Diffusing Update算法(DUAL)来实现快速收敛.路由器使用EIGRP来存储所有到达目的地的备份路由,以便进行快速切换.如果没有合适的或备份路由在本地路由表中的话.路由器向它的邻居进行查询来选择一条备份路由
2.减少带宽占用:EIGRP不作周期性的更新,它只在路由的路径和度发生变化以后做部分更新.当路径信息改变以后,DUAL只发送那条路由信息改变了的更新,而不是发送整个路由表.和更新传输到一个区域内的所有路由器上的链路状态路由协议相比,DUAL只发送更新给需要该更新信息的路由器
3.支持多种网络层协议:EIGRP通过使用protocol-dependent modules(PDMs),可以支持ApplleTalk,IP和Novell Netware等协议
4.无缝连接数据链路层协议和拓扑结构:EIGRP不要求对OSI参考模型的层2协议做特别是配置.不像OSPF,OSPF对不同的层2协议要做不同配置,比如以太网和帧中继总之,EIGRP能够有效的工作在LAN和WAN中,而且EIGRP保证网络不会产生环路(loop-free);而且配置起来很简单;支持VLSM;它使用多播和单播,不使用广播,这样做节约了带宽;它使用和IGRP一样的度的算法,但是是32位长的;它可以做非等价的路径的负载平衡

EIGRP Databases

运行了EIGRP的路由器维持3张表:neighbor table,topology table和routing table.其中neighbor table保存了和路由器建立了邻居关系的,直接相连的路由器;topology table包含路由器学习到的到达目的地的所有路由条目,其过程如下:
1.neighbor table中的每个邻居都转发1份IP路由表的拷贝给它们的邻居
2.然后每个邻居把从它们自己的邻居处得来的路由表存储在自己的EIGRP拓扑数据库中
3.EIGRP检查拓扑数据库,然后选择出一条到达目的地的最佳路由
4.EIGRP从拓扑数据库中选择到达目的地的最佳的successor routes,然后把它们放到路由表里.路由器为每种协议(比如IP,IPX)各自保持1张单独是路由表

Feasible Distance vs. Advertised Distance

为了决定到达目的地的最佳路由(successor)和备份路由(feasible successor),EIGRP使用下面2个参数:
1.advertised distance:EIGRP邻居到达目标网络的度
2.feasible distance:到达邻居路由器的度加上advertised distance(即邻居到达目标网络的度)
路由器比较所有的FD,然后选择FD值最低的放进IP路由表

来看一个例子,如下图:

如图显示的是C的EIGRP拓扑数据库,里面包含了邻居A和B的信息.A和B都知道如何到达网络10.1.1.0/24.从图中我们看见A到达目标网络的advertised distance是1000;B是1500.FD分别是2000和2500.C经过比较,将FD值低的,这里就是A的条目,作为到达网络10.1.1.0/24的最佳路径

EIGRP Metric Calculation

EIGRP选择一条主路由(最佳路由)和一条备份路由放在topology table(EIGRP到目的地支持最多6条链路).它支持几种路由类型:内部,外部(非EIGRP)和汇总路由.EIGRP使用混合度
EIGRP度的5个标准如下:
1.带宽:10的7次方除以源和目标之间最低的带宽乘以256
2.延迟(delay):接口的累积延迟乘以256,单位是微秒
以上是默认的2个,下面是可选的3个标准:
3.可靠性(reliability):根据keepalive而定的源和目的之间最不可靠的可靠度的值
4.负载(loading):根据包速率和接口配置带宽而定的源和目的之间最不差的负载的值
5.最大传输单元(MTU):路径中最小的MTU.MTU包含在EIGRP的路由更新里,但是一般不参与EIGRP度的运算

EIGRP使用DUAL来决定到达目的地的最佳路由(successor).当最佳路由出问题的时候,EIGRP不使用holddown timer而立即使用备份路由(feasible successor),这样就使得EIGRP可以进行快速收敛

看看EIGRP计算度的公式,K是常量,公式如下:
metric=[K1*bandwidth+(K2*bandwidth)/(256–load)+K3*delay]*[K5/(reliability+K4)]
默认:K1=1,K2=0,K3=1,K4=0,K5=0
这样就得到默认的度的简化计算公式,如下:
metric=bandwidth+delay
注意,不推荐修改K值.K值通过EIGRP的hello包运载.如果两个路由器的K值不匹配的话它们是不会形成邻居关系的

EIGRP Metrics Backward Compatible to IGRP

EIGRP的度和IGRP的度能够很好的进行兼容.IGRP的度是以24位的格式,而EIGRP是32位的格式.它们之间的关系是EIGRP的度是256倍于IGRP的度.也就是说假如IGRP的度为1000的话,换算成EIGRP的度为256000

来看一个EIGRP度的计算的例子,如下图:

注意图上各个路由器之间的链路带宽,先看看A经过B,C到达D之间的度的计算,AB之间,BC之间为T1线路,CD之间带宽为64kbps,计算如下:
带宽=10,000,000/64*256=40,000,000
累积延迟=(2000+2000+2000)*256=1,536,000
所以度=带宽+累积延迟=41,536,000

EIGRP Packets

EIGRP的5种包的类型,如下:
1.hello包:路由器使用hello包来发现邻居,采用多播的方式
2.update包:采用单播或多播的方式发送.更新发生在路由器启动,拓扑或度发生变化,和路由状态的迁移(主动到被动)
3.query包:当路由器开始进行路由计算和没有FD的时候,它就发送给邻居一个可靠的查询包来询问是否有到达目的地的FD.查询包通常以多播的方式发送
4.reply包:以单播的方式发回给发出查询包的路由起,作为应答
5.acknowledge(ACK)包:ACK包是采用单播的hello包,包含非0的确认数字.update包,query包和reply包均是可靠发送,所以它们都需要确认;而hello包和ACK包就不需要确认

EIGRP Hello Packets

当你在路由器的接口配置了EIGRP以后,路由器会周期性的以组多播的方式向外发送hello包.多播地址是224.0.0.10.当和它在1个AS里的其他运行了EIGRP的路由器接收到hello包以后,就会和它形成邻居关系.不在1个AS里,而且度的计算方式不一样(即K值不同),是不会形成邻居关系的 

EIGRP Timers

hello包在不同的介质上发送间隔是不一样的,如下:
1.在以下介质中是以每5秒进行发送:广播型介质,比如以太网,令牌环(Token Ring)和分布式光纤接口(FDDI);在点到点类型的串行链路中比如PPP和HDLC,还有帧中继和ATM;带宽大于T1线路的多点线路,比如交换式多兆位数据服务(SMDS),帧中继,ATM和ISDN PRI
2.在以下类型中间隔时间是60秒:带宽小于T1线路的多点线路,比如ISDN BRI,帧中继,SMDS,ATM和X.25当配置EIGRP的时候,EIGRP进程动态发现和它直接相连的运行了EIGRP的路由器.每个路由器在它自己的neighbor table中都保持的有邻居的信息,包括到达邻居路由器的地址和接口.还保持的有hold time.hold time是3倍于hello time

EIGRP在低速链路上发送hello包的频率较低,因为hello包会占用额外的带宽.不过可以在接口配置模式对默认时间进行修改,使用ip hello-interval eigrp {AS-number} {seconds}命令;修改hold time的时间的命令也是在接口配置模式,使用ip hold-time eigrp {AS-number} {seconds}命令.当你修改了hello包的时间间隔以后,hold time是不会自动修改的(之前hold time=hello time*3)所以要人工进行修改

EIGRP Adjacency Establishment Conditions

即使两个路由器的hello time和hold time相互之间不匹配,它们仍然有可能成为邻居.hello包包含了hold time的信息和保持跟踪每个EIGRP邻居路由器的hold time如果EIGRP路由器在hold time超出之前没有收到EIGRP包,路由器就会察觉拓扑的变化.路由器删除邻居路由器的相关信息,包括从邻居那里认可的topology table条目.假如FD可用的话,EIGRP进程将进行重新收敛

EIGRP不会基于次要地址(secondary address)建立邻居关系,因为EIGRP使用接口的主地址

show ip eigrp neighbors Command

使用show ip eigrp neighbors命令查看EIGRP邻居关系,如下图:

看下各个输出的含义,如下:
1.neighbor address:邻居路由器的地址,如上图可以看出p2r2有2个邻居
2.queue(Q Cnt):等待发送的排队排列的包.如果这个值持续高于0的话,说明发生了拥塞问题
3.Smooth Round Trip Timer(SRTT):从邻居处发送和接收包的平均回程时间.单位是毫秒.这个通常用来决定

RTO(Retransmit Time Out)
4.RTO:单位是毫秒.路由器在重新传输包之前等待ACK的时间
5.hold time:定义了等待没有从邻居那里接收到任何包的最大时间.当接受到新的包以后,hold timer复位
6.Interface:本地到邻居的接口

EIGRP Reliability

Reliable Transport Protocol(RTP)用来保证EIGRP包发送给邻居的可靠的传输.RTP支持单播和多播的混合方式.出于效率问题的考虑,只有一些特定的EIGRP包需要可靠的传输.比如在拥有多播能力的多路访问网络中,比如以太网,就不需要单独的发送可靠的hello包给所有邻居.EIGRP发送1个单独的hello包的多播,其中包含接收者不需要对这些包进行确认其他类型包,比如update包就需要确认.所有运载路由信息的包(update,reply和query)就需要可靠传输因为它们不是周期性的发送.每个包分配的有序列号然后要求确认.这些序列号和确认就使得这些包可以可靠的传输ACK包和hello包,是不需要可靠性的

EIGRP Retransmission Policy and Transport Mechanism

RTP的重传机制:路由器发送给邻居可靠的包在RTO超出以后,还没得到确认的话,将进行包的重传.最大重传次数16次,直到hold time超出

EIGRP的传输使用了窗口技术,并且窗口大小是1,stop-and-wait机制,即要对传输的包进行一一确认.假如一个路由器A有两个邻居B和C,当分别给B和C发送1个包以后,B做出了及时的应该而C还没有做出应答,A就必须等待,直到C做出应答以后才能发送下一个包,这样带来的影响是降低了效率.解决的办法是对没有得到确认的多播包采用单播包来传送

Initial Route Discovery in EIGRP

来看看EIGRP中邻居的发现和建立过程,如下图:

具体过程如下:
1.路由器A启动,然后在链路上发送hello包
2.路由器B接收到A发来的hello包,然后做出应答,发回update包给A,告诉A它自己的路由表的信息.但是这个时候

邻居关系还没有建立直到B发回hello包给A.在B给A的update包里设置了初始位(init bit)的,说明这是初始过程
3.当双方交换过hello包以后,邻居关系建立.A发回ACK包给B确认它已经收到了从B而来的update包
4.A吸收update包到它自己的topology table中去.topology table包括了从邻居那里得来的所有目的地信息
5.A发送update包给B
6.B收到A发来的update包后做出应答;发回ACK包给A
整个过程完成

Verifying EIGRP Connectivity Using debug Commands

debug eigrp packets:显示执行这条命令的路由器的接收和发送的包的类型,如下:
RouterA#debug eigrp packets
(略)
01:38:29: EIGRP: Sending HELLO on Serial0/0
01:38:29: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
01:38:31: EIGRP: Received HELLO on Serial0/0 nbr 10.1.2.2
01:38:31: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
Received EIGRP Update
01:38:33: EIGRP: Received UPDATE on Serial0/0 nbr 10.1.2.2
01:38:33: AS 100, Flags 0x0, Seq 23/37 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
01:38:33: EIGRP: Enqueueing ACK on Serial0/0 nbr 10.1.2.2
01:38:33: Ack seq 23 iidbQ un/rely 0/0 peerQ un/rely 1/0
01:38:33: EIGRP: Sending ACK on Serial0/0 nbr 10.1.2.2
(略)
如果K值不匹配的话,当然就建立不了邻居关系,如下 :
RouterA#debug eigrp packets
(略)
01:39:13: EIGRP: Received HELLO on Serial0/0 nbr 10.1.2.2
01:39:13:AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
01:39:13:        K-value mismatch
(略)

debug ip eigrp:显示路由器发送和接收的EIGRP包的相关信息,如下 :
RouterA#debug ip eigrp
IP-EIGRP Route Events debugging is on
01:57:23: IP-EIGRP: Processing incoming UPDATE packet
01:57:23: IP-EIGRP: Int 172.16.1.0/24 M 10639872 - 9999872 640000 
SM 384000 - 256000 128000
(略)
如上输出,内部路由标的有Int字样,FD为9999872(带宽值)+640000(延迟)=10639872,其中FD是路由器A到达目标网络172.16.1.0/24;SM代表source metric,advertised distance是256000+128000=384000.因为带宽值是由10的7次方除以真正的带宽得来的,而且计算EIGRP度的时候是选择链路带宽值低的那条.所以EIGRP的度为9999872(bandwidth)+640000(delay)=10639872

Selection of a Successor by DUAL

如果有相同的FD的话,路由表可以存在多个successor,默认可以存在4个.FS(feasible successor)是备份路由.要限定一个FS,下一跳的路由器的advertised distance必须比当前successor路由的FD要小如果successor因故无效,而有效的FS存在的话,FS将代替successor并无需进行重新计算.EIGRP的topology table一次可以存在多个有效的FS;如果successor因故无效,同时又没有有效的FS的话,EIGRP将进行重新计算.计算过程将计算出新的一个successor

successor是下一跳的路由器到达目标网络中的最佳路由器.FD最低的成为successor.所有的路由器只选择下一跳的路由器,然后每个路由器依靠下一跳路由器做出到达目标网络的最可靠的决定.所有的路由器依赖于successor(最佳的下一跳路由器)到达目标网络

来看一个例子,如下图:

假设路由器B把网络10.1.1.0/24宣告给它的邻居路由器C,B到网络10.1.1.0/24的耗费为1000,C把这个值作为从B那里得到的advertised distance.C再加上它自己到达B的耗费(1000)得到通过B到达目标网络的FD(即1000+1000=2000)
D宣告网络10.1.1.0/24给C.如图,D到达网络10.1.1.0/24的耗费是1500,C从D那里得到这个作为advertised distance,然后加上它自己到达D的耗费(1000)得到FD为2500.路由器C比较所有的FD,选择值低的那个作为最佳路由,即选择通过B到达目标网络.所以路由器B作为C到达目标网络的successor

EIGRP Feasible Successor

FS,是作为successor的备份,FS路由存储在topology table中,一张topology table可以保持多个FS.FS的选举是经过比较非successor的AD,而且AD要比FD小,才能被认可为FS.这个比较的过程,可以写成下面的数学方程式:
AD of second best route < FD of best route(successor) = FS
注意这里的AD不是管理距离而是advertised distance
如下是没有FS的一个公式:
AD of second best route ≥ FD of best route(successor) ≠ FS

Configuring EIGRP

配置EIGRP的具体步骤,如下:
1.在全局配置模式下使用router eigrp [[AS number]命令启用EIGRP,在一个AS内,所有要配置EIGRP的路由器必须拥有相同的AS号
2.定义EIGRP网络号使用network [network-number] [wildcard-mask]命令,可以使用wildcard mask来定义特殊的IP地址,子网或网络
3.如果你使用了串行连接,还得定义链路带宽.如果你不定义带宽,EIGRP默认认为带宽为T1线路的带宽大小,即1.544Mbps.如果实际的链路带宽比这个低的话,路由器将不能收敛,或者路由update包会丢失.使用bandwidth [Kb]命令定义带宽.这个带宽对于点对点的帧中继网络中,定义的带宽是CIR;而对于其他的普通串行线路,定义的就是实际带宽

来看一个EIGRP配置的实例,如下图:

如图,所有的路由器都在AS 109里,路由器A没有使用wildcard mask.如果A使用了以下的配置:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.1.0.0
RouterA(config-router)#netw 10.4.0.0
RouterA(config-router)#netw 172.16.1.0
RouterA(config-router)#netw 172.16.2.0
路由器A将对网络进行自动汇总,使得配置看上去像是这样的,如下:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.0.0.0
RouterA(config-router)#netw 172.16.0.0
如果路由器A的配置命令是如下这样的:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.1.0.0 0.0.255.255
RouterA(config-router)#netw 10.4.0.0 0.0.255.255
RouterA(config-router)#netw 172.16.1.0 0.0.0.255
RouterA(config-router)#netw 172.16.2.0 0.0.0.255
使用wildcard mask来定义参与AS 109的EIGRP进程的直接相连的路由器接口.在上面这个例子里,定义的就是处于10.1.0.0/16,10.4.0.0/16,172.16.1.0/24和172.16.2.0/24里的所有接口都会参与AS 109里的EIGRP进程看看在EIGRP中使用wildcard mask的例子,如下图:

如图,路由器C并没有使用network 172.16.0.0 0.0.0.255,而使用的是network 172.16.3.0 0.0.0.255和network 172.16.4.0 0.0.0.255,因为C的S0口连接的是外部网络,即S0口没有运行EIGRP.如果在S0口运行了EIGRP的话,将会给外部发送不必要的信息造成带宽的浪费和CPU的负担

Configuring Default Route Using the default-network Command

当配置EIGRP的时候,可以使用ip default-network [network-number]命令创建默认路由,如下图:

路由器A连接外部网络172.31.0.0/16,A使用了ip default-network 172.31.0.0命令配置了一条默认路由;然后A把它宣告给B,B把也它标记成默认路由.注意[network-number]参数是基于类的网络号

Verifying EIGRP Using show Commands

使用show ip route命令查看路由表的内容,如下:
RouterA#show ip route
 Codes: C - connected, S - static, I - IGRP, R - RIP, D - EIGRP, EX - EIGRP external, O - OSPF, 
(略)
Gateway of last resort is not set
     172.16.0.0/24 is subnetted, 1 subnets
D       172.16.1.0 [90/10639872] via 10.1.2.2, 06:04:01, Serial0/0 10.0.0.0/24 is subnetted, 4 subnets
D       10.1.3.0 [90/10514432] via 10.1.2.2, 05:54:47, Serial0/0
D       10.3.1.0 [90/10639872] via 10.1.2.2, 06:19:41, Serial0/0
C       10.1.2.0 is directly connected, Serial0/0
C       10.1.1.0 is directly connected, Ethernet0/0
注意D代表是从EIGRP学来的,*代表默认路由

使用show ip protocols命令可以检查默认的EIGRP设置,如下:
RouterA# show ip protocols
Routing Protocol is "eigrp 100"
  Outgoing update filter list for all interfaces is not set
  Incoming update filter list for all interfaces is not set
  Default networks flagged in outgoing updates
  Default networks accepted from incoming updates
  EIGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
  EIGRP maximum hopcount 100
  EIGRP maximum metric variance 1
  Redistributing: eigrp 100
  Automatic network summarization is not in effect
  Maximum path: 4
  Routing for Networks:
    10.1.0.0/16
    10.0.0.0
  Routing Information Sources:
    Gateway         Distance      Last Update
    10.1.2.2              90      05:50:13
  Distance: internal 90 external 170
(略)

使用show up eigrp topology命令来验证EIGRP操作,如下:
RouterA# show ip eigrp topology
IP-EIGRP Topology Table for AS(100)/ID(10.1.2.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply, r - reply Status, s - sia Status
P 10.1.3.0/24, 1 successors, FD is 10514432
         via 10.1.2.2 (10514432/28160), Serial0/0
P 10.3.1.0/24, 1 successors, FD is 10639872
         via 10.1.2.2 (10639872/384000), Serial0/0
P 10.1.2.0/24, 1 successors, FD is 10511872
         via Connected, Serial0/0
P 10.1.1.0/24, 1 successors, FD is 2190
         via Connected, Ethernet0/0
P 172.16.1.0/24, 1 successors, FD is 10639872
         via 10.1.2.2 (10639872/384000), Serial0/0
(略)
注意前面的字母P,可能出现的字母代号有如下几种:
1.P:代表passive,这个表示稳定网络中的稳定状态
2.A:代表active,当前网络不可用,正处于发送查询状态
3.U:代表update,网络处于等待update包的确认状态
4.Q:代表query,网络处于等待query包的确认的状态
5.stuck-in-active(SIA):持续处于active状态,说明EIGRP网络的收敛发生了问题

EIGRP Route Summarization: Manual

路由汇总的目的是为了减少路由表的条目,减少或update包,边界查询

使用人工汇总的特点如下:
1.可以基于接口的配置汇总
2.当在接口做了人工汇总以后,路由器将创建一条指向null0口的路由,这样做是为了防止路由循环
3.当汇总之前的路由down掉以后,汇总路由将自动从路由表里被删除
4.汇总路由的度取决于特定路由中度最小的来做为自己的度

Configuration Route Summarization

no auto-summary:关闭自动汇总的命令,在全局配置莫模式下使用ip summary-address eigrp [as-number] [address] [mask]:关闭了自动汇总以后,人工在接口模式下创建汇总地址

来看一个人工汇总的例子,如下图:

如图,路由器A和B关闭了自动汇总,因为如果不关闭自动汇总的话,汇总路由172.16.0.0/16将传给网络10.0.0.0,这样网络10.0.0.0就不能知道路由器A和B的具体位置.路由器C创建人工汇总,在S0口将172.16.1.0和172.16.2.0宣告成单独的一条条目172.16.0.0.

创建人工汇总的过程,如下:
1.选择传播汇总路由的接口
2.定义汇总地址,EIGRP路由协议以及AS号

Understanding EIGRP Load Balancing

负载均衡是指在网络的多个出口上分发数据流量到目的地,负载均衡增加了网段的使用,也增加了网络的带宽.对于IP,Cisco IOS默认支持4条等价链路的负载均衡,最大支持6条

EIGRP支持不等价链路的负载均衡,使用variance命令,跟上一个乘数,默认是1(即代表等价的链路的均衡负载),值的范围是1到128.这个乘数代表了可以接受的不等代价链路的度的倍数,在这个范围内的链路都将被接受,作为负载均衡.来看一个例子,如下图:

如图所示意,使用了variance 2,即乘数是2,路由器E选择经过C来到达网络Z,因为FD是20.FD从上到下分别是30,20和45.因为乘数是2,E还将选择经过B到达网络Z,因为B的FD是30,小于2倍C的FD即40;而D的FD是45,大于2倍C的FD,所以E将不会经过D到达网络Z(关系是必须小于,不能等于或大于)

EIGRP Bandwidth Utilization

EIGRP支持不同的WAN链路,比如point-to-point链路,NBMA网络中的point-to-point链路和point-to-multipoint链路.因为在WAN链路中带宽比较低,所以为了防止EIGRP占用太多的网络带宽,.默认情况下,最多允许EIGRP占用WAN链路带宽的50%.这个默认的百分比可以通过在接口配置模式下使用ip bandwidth-percent eigrp [AS-number] [pencentage].百分比可以超过100(注意没有%符号)

一般的,Cisco IOS软件认为点到点的帧中继子接口带宽为T1线路带宽(1.544Mbps),但是假如在一个帧中继环境中CIR只有56K,按默认占用50%的带宽来算,这样就会占用768Kbps.所以要在接口配置模式下使用bandwidth [BW](单位是Kbps)来给接口分配实际带宽
对多点链路比如帧中继网络,ISDN PRI和SMDS的配置比较麻烦.当你配置多点链路的接口的时候,把带宽配置成最小的CIR和VC之积

先来看看点到点链路中带宽的配置,如下图:

注意这个星形环境,有10条VC(图中只显示4条),每条VC的带宽都是56Kbps,使用的是点到点环境,所以在C上,划分10个子接口,分别指定接口带宽为56Kbps
如果是在下面这种混合环境,如图:

配置的办法是把CIR最低的作为点到点链路,定义带宽BW=CIR;把带宽较高的作为多点环境,BW=CIR之和.上述例子就是把3条带宽较高的划分为一条多点链路的接口,指定带宽为768Kbps(256Kbps*3);带宽最低的那条(56Kbps)作为点到点环境,单独划分一个点到点的接口,并且指定带宽为它实际的CIR即56Kbps

How EIGRP Responds to a Query

作为一种高级距离向量协议,EIGRP来依靠邻居提供路由信息,如果路由出了问题,即进入active状态,而且又没有可用的FS的时候,EIGRP就要求快速的收敛.然后EIGRP路由器向邻居发送查询(query),寻找一条可以替代那条出了问题的路由.查询被发送给所有的邻居路由器,除了到达successor的那个接口.如果被查询的路由器知道一条替代路由的话,它就把这条替代路由放进应答(reply)包中发送给发出查询的源路由器;如果接收到查询的路由器没有替代路由的信息,它将继续发送给它自己的其他邻居,直到找到可以替代的路由为止

EIGRP Query Process SIA

EIGRP使用可靠的多播来寻找替代路由.路由器必须得到收到查询的所有路由器的应答才能重新进行计算successor的信息,如果有一个路由器的应该还没有收到的话,发出查询的源路由器就必须等待.默认如果在3分钟内某些路由器没有对应答做出响应的话,这条路由就进入stuck in active(SIA)状态(即始终处于active状态).然后路由器将重新设定和这个没有做出应答的路由器的邻居关系.为了避免SIA情形的发生,解决方案是限制查询的范围

Scalability Issues and Solutions

影响EIGRP网络可扩展性的因素,如下:
1.邻居之间信息交换量
2.路由器的数量
3.拓扑结构的深度
4.替代路径的数量
所以EIGRP在大型网络中不能够即插即用(Plug-and-Play),而且查询的代价可能会比较高

Limiting the EIGRP Query Range with Summarization

为了使得EIGRP能够具有更好的可扩展性,可以使用下面两种选项:
1.通过在路由器的outbound接口使用ip summary-address eigrp命令配置路由汇总
2.把远程路由器做为stub EIGRP路由器
路由汇总可以减小查询的范围;把远程路由器作做为stub EIGRP路由器使得这些远程路由器被查询.还有其他的一些限制查询范围的方法诸如路由过滤(route filtering)或接口包过滤(interface packet filtering)

来看看限制EIGRP查询范围的其中一个办法:路由汇总.如下图:

如图,路由器B发送汇总路由172.30.0.0/16给路由器A.假如网络172.30.1.0/24突然down掉以后,C向B查询网络172.30.1.0/24,B又向A查询.由于A收到的是汇总路由,于是A直接对查询做出网络172.30.1.0/24不可达的应答,然后不再将查询继续传递下去

查询范围不是产生SIA现象的唯一原因,还有诸如以下原因可能会产生SIA的发生:
1.路由器对查询的应答过于繁忙比如路由器CPU资源占用过高;还有内存不足,不足以分配处理查询包或者建立应答包
2.路由器之间的链路状态不稳定,因此可能产生丢包现象.路由器足够多的包来维持邻居关系,但是却没有收到全部的查询包或应答包
3.单向链路(unidirectional link),即网络流量只朝一个方向传输的故障通过使用路由汇总,可以使得路由表最小化,这样就使得路由器的CPU资源和带宽尽可能的减少,而且减少了SIA情况的发生

使用路由汇总是减少收敛时间的一个比较好的办法,远程路由器以网络不可达的信息做为应答并且如果路由表内没有精确匹配的条目的话将不再把查询延伸传播下去

有人通过使用划分不同的AS来控制查询的范围,如下图:

通过在B的两边划分不同的AS,当网络X消失以后,C发送查询给B,B做出网络不可达的应答.在AS 1中查询不会继续

传播下去,查询终止.但是在AS 2,B将产生一个新的查询,发送给A.注意这和在同一个AS内做出查询不一样.所以说通过划分不同的AS来限制查询的范围并不是一个有效的解决方案

Limiting the EIGRP Query Range Using the stub Option

还有种限制EIGRP查询比较有效的方法就是配置stub选项.在做这项配置的时候,只有远程路由器要配置成stub路由器.使用EIGRP stub路由特性增加了网络的稳定性,减少了网络资源的占用,简化了stub router的配置EIGRP stub功能最早是出现在Cisco IOS Release 12.0(7)T上.星形拓扑(hub-and-spoke)结构的网络常使用stub路由,在这样的拓扑结构里,远程路由器不会转发所有的数据给中心(hub)路由器,远程路由器也不会保持完整网络的路由表.一般的,中心路由器只需要发送一条默认路由给远程路由器.当到达某个网络的路由丢失以后,路由器不会向stub路由器做出路由查询

EIGRP stub配置命令的具体格式是在路由配置模式下,输入如下命令:
Router(config-router)#eigrp stub [receive-only | connected | static | summary]
一些参数的含义如下:
receive-only:不能和其他3个参数(connected,static和summary)一起使用.只接收从邻居路由器发送来的信息
connected:指定该路由器可以把和它直接相连的网络信息传递给它的邻居.这个选项默认是开启的
static:把静态路由信息传递给它的邻居
summary:把汇总路由信息传递给它的邻居.这个选项默认也是开启的

由于connected和summary选项默认是开启的,配置stub路由器并发送直连网络和汇总路由信息就可以这样写,如下:
Router(config)#router eigrp 1
Router(config-router)#netw 10.0.0.0
Router(config-router)#eigrp stub
但是假如你使用了receive-only选项的话,其他3个选项的信息就不会被发送,如下:
Router(config)#router eigrp 1
Router(config-router)#netw 10.0.0.0
Router(config-router)#eigrp stub recive-only

Scalability Rules for Implementing EIGRP

以前曾经提到过,不太合理的IP地址规划限制了路由汇总.这样会增加网络的收敛时间;相反,合理的地址规划能使得路由汇总工作的更好,加快了网络收敛时间



 红头发 回复于:2004-05-12 12:35:49

Module4 Configuring the Open Shortest Path First Protocol


Link-State Routing Protocols

链路状态路由协议(link-state routing protocol)的一些特征:
1.对网络发生的变化能够快速响应
2.当网络发生变化的时候发送触发式更新(triggered update)
3.发送周期性更新(链路状态刷新),间隔时间为30分钟

链路状态路由协议只在网络拓扑发生变化以后产生路由更新.当链路状态发生变化以后,检测到变化的设备创建LSA(link state advertisement),通过使用组播地址传送给所有的邻居设备,然后每个设备拷贝一份LSA,更新它自己的链路状态数据库(link state database,LSDB),接着再转发LSA给其他的邻居设备.这种LSA的洪泛(flooding)保证了所有的路由设备在更新自己的路由表之前更新它自己的LSDB

LSDB通过使用Dijkstra算法(shortest path first,SPF)来计算到达目标网络的最佳路径,建立一条SPF树(tree),然后最佳路径从SPF树里选出来,被放进路由表里OSPF和IS-IS协议被归类到链路状态路由协议中.链路状态路由协议在一个特定的区域(area)里从邻居处收集网络信息,一旦路由信息都被收集齐以后,每个路由器开始通过使用Dijkstra算法(SPF)独立计算到达目标网络的最佳路径

运行了链路状态路由协议的路由器跟踪以下信息:
1.它们各自的邻居
2.在同一个区域中的所有路由器
3.到达目标网络的最佳路径

Link-State Data Structures

为了能够做出更好的路由决策,OSPF路由器必须维持的有以下内容:
1.neighbor table:也叫adjacency database.存储了邻居路由器的信息.如果一个OSPF路由器和它的邻居路由器失去联系,在几秒中的时间内,它会标记所有到达那条路由均为无效并且重新计算到达目标网络的路径
2.topology table:一般叫做LSDB.OSPF路由器通过LSA学习到其他的路由器和网络状况,LSA存储在LSDB中
3.routing table:也就是我们所说的路由表了,也叫forwarding database,包含了到达目标网络的最佳路径的信息

链路状态路由协议和距离向量路由协议的一个区别就是:距离向量路由协议是routing by rumors,也就是说,距离向量路由协议依靠邻居发给它的信息来做路由决策,而且路由器不需要保持完整的网络信息;而运行了链路状态路由协议的路由器保持的有完整的网络信息的快照,而且每个路由器自己做出路由决策

Defining an OSPF Area

OSPF的网络设计要求是双层层次化(2-layer hierarchy),包括如下2层:
1.transit area(backbone或area 0)
2.regular areas(nonbackbone areas)
transit area负责的主要功能是IP包快速和有效的传输.transit area互联OSPF其他区域类型.一般的,这个区域里不会出现端用户(end user)
regular areas负责的主要功能就是连接用户和资源.这种区域一般是根据功能和地理位置来划分.一般的,一个regular area不允许其他区域的流量通过它到达另外一个区域,必须穿越transit area比如area 0.regular areas还可以有很多子类型,比如stub area,locally area和not-so-stubby area

在链路状态路由协议中,所有的路由器都保持的有LSDB,OSPF路由器越多,LSDB就越大.这可能对了解完整的网络信息有帮助,但是随着网络的增长,可扩展性的问题就会越来越大.采用的折中方案就是引入区域的概念.在某一个区域里的路由器只保持的有该区域中所有路由器或链路的详细信息和其他区域的一般信息.当某个路由器或某条链路出故障以后,信息只会在那个区域以内在邻居之间传递.那个区域以外的路由器不会收到该信息.OSPF要求层次化的网络设计,意味着所有的区域要和area 0直接相连.如下图:

注意area 1和area 2或3之间的连接是不允许的,它们都必须通过backbone area 0进行连接.Cisco建议每个区域中路由器的数量为50到100个构建area 0的路由器称为骨干路由器(backbone router,BR),如上图,A和B就是BR;区域边界路由器(area border router,ABR)连接area 0和nonbackbone areas.如图,C,D和E就是ABR.ABR通常具有以下特征:
1.分隔LSA洪泛的区域
2.是区域地址汇总的主要因素
3.一般做为默认路由的源头
4.为每个区域保持LSDB
理想的设计是使每个ABR只连接2个区域,backbone和其他区域,3个区域为上限

Defining OSPF Adjacencies

运行OSPF的路由器通过交换hello包和别的路由器建立邻接(adjacency)关系,过程如下:
1.路由器和别的路由器交换hello包,目标地址采用多播地址
2.hello包交换完毕,邻接关系形成
3.接下来通过交换LSA和对接收方的确认进行同步LSDB.对于OSPF路由器而言,进入完全邻接状态
4.如果需要的话,路由器转发新的LSA给其他的邻居,来保证整个区域内LSDB的完全同步

对于点到点的WAN串行连接,两个OSPF路由器通常使用HDLC或PPP来形成完全邻接状态
对于LAN连接,选举一个路由器做为designated router(DR)再选举一个做为backup designated router(BDR),所有其他的和DR以及BDR相连的路由器形成完全邻接状态而且只传输LSA给DR和BDR.DR从邻居处转发更新到另外一个邻居那里.DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把完整的数据库信息发送给新加入的路由器.路由器之间还会和LAN内的其他路由器(非DR/BDR,即DROTHERs)维持一种部分邻居关系(two-way adjacency)

OSPF的邻接一旦形成以后,会交换LSA来同步LSDB,LSA将进行可靠的洪泛

OSPF Calculation

链路状态陆游协议使用Dijkstra算法来查找到达目标网络中的最佳路径.所有的路由器拥有相同的LSDB后,把自己放进SPF tree中的root里,然后根据每条链路的耗费(cost),选出耗费最低的做为最佳路径,最后把最佳路径放进forwarding database(路由表)里

下图就是一个SPF计算的例子:

1.LSA遵循split horizon原则,H对E宣告它的存在,E把H的宣告和它自己的宣告再传给C和G;C和G再和之前类似,继续传播开来……
2.X有4个邻居:A,B,C和D,假设这里都是以太网,每条网链路的耗费为10,经过计算,路由器可以算出最佳路径.上图的右半部分实线所标即为最佳路径

LS Data Structures: LSA Options

关于LSA的操作流程图如下:

如图可以看出当路由器收到一个LSA以后,先会查看它自己的LSDB看有没有相应的条目,如果没有就加进自己的LSDB中去,并反馈LSA确认包(LSAck),接着再继续洪泛LSA,最后运行SPF算法算出新的路由表
如果当它收到LSA的时候,自己的LSDB有该条目而且版本号一样,就忽略这个LSA;如果有相应条目,但是收到的LSA的版本号更新,就加进自己的LSDB中,发回LSAck,洪泛LSA,最后用SPF计算最佳路径;如果版本号没有自己LSDB中那条新,就反馈LSU信息给发送源

Types of OSPF Packets

OSPF包的5种类型如下:
1.hello:用来建立邻居关系的包
2.database description(DBD):用来检验路由器之间数据库的同步
3.link state request(LSR):链路状态请求包
4.link state update(LSU):特定链路之间的请求记录
5.link state acknowledgement(LSAck):确认包

OSPF Packet Header Format

5种OSPF包都是直接被封装在IP包里的而不使用TCP或UDP.由于没有使用可靠的TCP协议,但是OSPF包又要求可靠的传输,所以就有了LSAck包.如下图所示就是OSPF包在IP包里的形式:

协议号为89(EIGRP协议号为88),一些字段如下:
1.Version Number:当前为OSPF版本2
2.Type:定义OSPF包的类型
3.Packet Length:包的长度,单位字节
4.Router ID(RID):产生OSPF包的源路由器
5.Area ID:定义OSPF包是从哪个area产生出来的
6.Checksum(校验和):错误校验
7.Authentication Type:验证方法,可以是明文(cleartext)密码或者是Message Digest 5(MD5)加密格式
8.Data:对于hello包来说,该字段是已知邻居的列表;对于DBD包来说,该字段包含的是LSDB的汇总信息,包括RID等等;对于LSR包来说,该字段包含的是需要的LSU类型和需要的LSU类型的RID;对于LSU包来说,包含的是完全的LSA条目,多个LSA条目可以装在一个包里;对于LSAck来说,字段为空

OSPF Neighbor Adjacency Establishment

Hello协议用来建立和保持OSPF邻居关系,采用多播地址224.0.0.5,hello包包含的信息如下:
1.Router ID(RID):路由器的32位长的一个唯一标识符,选举规则是,如果loopback接口不存在的话,就选物理接口中IP地址等级最高的那个;否则就选取loopback接口
2.hello/dead intervals:定义了发送hello包频率(默认在一个多路访问网络中间隔为10秒);dead间隔是4倍于hello包间隔.邻居路由器之间的这些计时器必须设置成一样
3.neighbors:邻居列表
4.area ID:为了能够通信,OSPF路由器的接口必须属于同一网段中的同一区域(area),即共享子网以及子网掩码信息
5.router priority:优先级,选举DR和BDR的时候使用.8位长的一串数字
6.DR/BDR IP address:DR/BDR的IP地址信息
7.authentication password:如果启用了验证,邻居路由器之间必须交换相同的密码信息.此项可选
8.stub area flag:stub area是通过使用默认路由代替路由更新的一种技术(有点像EIGRP中的stub功能)

Establishing Bidirectional Communication

看看双向通信的建立过程,如下图:

1.刚开始A还没和别的路由器交换信息,还处于down的状态,接下来通过使用多播地址224.0.0.5开始发送hello包
2.B接收到hello包,把A加进自己的neighbor table中,并进入init状态,然后以单播的形式发送hello包对A做出应答
3.A收到以后把所有从hello包里找到的RID加进自己的neighbor table中,进入two-way状态
4.如果链路是广播型网络比如以太网,接下来选举DR和BDR,这一过程发生在交换信息之前
5.周期发送hello包保证信息交换

Discovering the Network Routes & Adding the Link-State Entries

当选举了DR和BDR,进入exstart状态,接下来就可以对链路状态信息进行发现并创建自己的LSDB,如下图:

1.在exstart状态里,邻接关系形成,路由器和DR/BDR形成主仆关系(RID等级最高的为主,其他的为辅)
2.主仆交换DBD包(DDP),路由器进入exchange状态
DBD包含了出现在LSDB中的LSA条目头部信息,条目信息可以为一条链路(link)或者一个网络.每个LSA条目头部信息包括链路状态类型,宣告路由器的地址,链路耗费和序列号(版本号)
3.路由器收到DBD以后,将使用LSAck做出确认;还将和自己本身就有的DBD进行比较,过程如下图:

如果DBD信息中有更新更全的链路状态条目,路由器就发送LSR给其他路由器,该状态为loading状态;收到LSR以后,路由器做出响应,以LSU作为应答,其中包含了LSR所需要的完整信息;收到LSU以后,再次做出确认,发送LSAck
4.路由器添加新的条目到LSDB中,进入full状态,接下来就可以对数据进行路由了

Maintaining Routing Information

当链路状态发生变化以后,路由器将洪泛LSA来对其他路由器做出通知,如下图:

1.路由器意识到链路产生变化以后,对多播地址224.0.0.6和所有的DR/BDR发送LSU,其中LSU包含了更新了的LSA条目
2.DR对LSU做出确认,接着对多播地址224.0.0.5继续洪泛,每个收到LSU的路由器对DR做出确认(反馈LSAck),
3.如果路由器连接了其他网络,将通过转发LSU给DR(在点到点网络是转发给邻居路由器)来对其他网络进行洪泛
4.其他路由器通过LSU来更新自己的LSDB,然后使用SPF算法重新计算最佳路径
链路状态条目的最大生存周期是60分钟,60分钟只有,它将从LSDB中被移除

OSPF Link-State Sequence Numbers

LSDB中的每个LSA记录都有个序列号,序列号是32位长,以0x80000001开头,0x7FFFFFFF结尾.OSPF路由器默认每30分钟洪泛一次LSA来保证LSDB的同步,每洪泛1次,序列号就加1.如果序列号达到最大并回到初始值的时候,已经存在的LSA的生存周期将设置为最大(1小时)并刷新LSDB(造成网络波动)
如果收到2条LSA,将比较序列号,序列号越高表示LSA版本越新

可以使用show ip ospf database命令查看生存周期和序列号,如下:
RTC# show ip ospf database
OSPF Router with ID (203.250.15.67) (Process ID 10)
    Router Link States (Area 1)
Link ID          ADV Router   Age  Seq#       Checksum  Link count
203.250.15.67  203.250.15.67   48   0x80000008  0xB112      2
203.250.16.130 203.250.16.130  212  0x80000006  0x3F44      2
(略)

Debug IP OSPF Packet

使用debug ip ospf packet命令对OSPF包进行排错和验证,如下:
Router# debug ip ospf packet
 OSPF: rcv. v:2 t:1 l:48 rid:200.0.0.117 aid:0.0.0.0 chk:6AB2 aut:0 auk:
(略)
一些输出的含义如下:
v:OSPF版本
t:OSPF包类型,如上是1,几种数字所代表的意义是:1为hello,2为DBD,3为LSR,4为LSU,5为LSAck
l:定义包长度,单位字节
rid/aid:RID/area ID
chk:校验和
aut:验证类型,0代表不进行验证,1代表明文密码,2代表MD5加密
auk:OSPF验证key
keyed:MD5 key ID
seq:序列号

Configuring Basic Single-Area OSPF

OSPF的单域的配置命令:在全局配置模式下输入router ospf  [process-id]启动OSPF进程,接下来在路由配置模

式下输入network [address] [inverse-mask] area [area-id]
process-id只是在本路由器有效,所以可以设置成和其他路由器的process-id一样的号码
address和inverse-mask为网络(或接口)地址和wildcard mask

来看一个配置实例,如下图:

如图A是采用的网络地址,而B是采用的接口地址

Verifying OSPF Operation

一些验证性的命令如下:
1.show ip protocols:显示基于IP的路由协议信息
2.show ip route ospf:显示OSPF已知路由条目信息
3.show ip interface:显示RID,area ID和邻居信息
4.show ip ospf:显示RID,计时器和LSA等信息
5.show ip ospf neighbor (detail):显示邻居信息包括RID,优先级,邻接状态(比如exstart,full等)和dead timer.detail为详细参数.如下
RouterB#show ip ospf neighbor
Neighbor ID   Pri   State       Dead Time     Address       Interface
10.64.1.1     1     FULL/BDR    00:00:31      10.64.1.1     Ethernet0
10.2.1.1      1     FULL/-      00:00:38      10.2.1.1      Serial0
(略)
6.show ip ospf neighbor [type number] [neighbor-id] (detail):显示接口的邻居信息的命令.type为接口类型,number为接口号,neighbor-id为邻居ID

Manipulating OSPF Router ID

关于RID的分配,如下:
1.可以选择物理接口地址等级最高的做为RID(假如没有设置回环接口的话),接口不是必须参与OSPF进程,但是它的状态必须是up.否则将接收到如下错误提示:
Router(config)#router ospf 1
2wid: %OSPF-4-NORTRID: OSPF process 1 cannot start.
2.假如回环接口存在的话,可以选举等级最高的设置为RID(因为回环接口永远不会down掉)
3.可以使用router-id命令进行设置
一旦RID设置了,将不会改变,即使设置为RID的接口down掉了,RID也不会改变,除非路由器重新启动,或者OSPF进程重启

如果你想设置回环接口为RID,如下:
1.Router(config)#interface loopback [number]
创建回环接口
2.Router(config-if)#ip address [address] [mask]
分配IP地址(分配的地址等级高于物理接口的IP地址).mask参数一般为255.255.255.255

设置下次OSPF启动以后所采用的RID,如下:
1.Router(config)#router ospf [process-id]
2.Router(config-router)#router-id [ip-address]
创建新的RID.注意如果本次设置的新RID只会在下次OSPF进程中启用.可以重启路由器或者使用clear ip ospf process命令重启OSPF进程(这将暂时性的造成网络不稳定)

要查看RID的信息可以使用show ip ospf命令

Adjacency Behavior for a Point-to-Point Link & Broadcast Network

在点到点链路中一般采用PPP或者HDLC的封装格式,OSPF自动检测接口类型,并且不需要进行DR/BDR的选举.邻居通过对多播地址224.0.0.5进行多播hello包来动态发现邻居.默认hello包的发送间隔是10秒,dead间隔是40秒在多路访问(multiaccess)广播型网络中(比如以太网和Token Ring),需要进行DR/BDR的选举,所有的非DR/BDR(即DROTHER)路由器和DR/BDR形成完全邻接关系,即DROTHER通过DR/BDR交换信息,如下图:

到达DR的包使用多播地址224.0.0.6;经DR转发给DROTHRT的包使用多播地址224.0.0.5

Electing the DR/BDR

当选举DR/BDR的时候要比较hello包中的优先级(priority),优先级最高的为DR,次高的为BDR.默认优先级都为1.在优先级相同的情况下就比较RID,RID等级最高的为DR,次高的为BDR.当你把优先级设置为0以后,OSPF路由器就不能成为DR/BDR,只能成为DROTHER

当网络中新加入一个优先级更高的的路由器,不会影响现有的 DR/BDR,除非DR出故障,BDR随即升级为DR,并重新选举BDR;如果是BDR出故障了就重新选举BDR

BDR对DR是否出故障的判定是根据使用wait timer,如果BDR在wait timer超时前确认DR仍然在转发LSA的话,它就认为DR出故障

设置优先级的命令如下:
Router(config-if)#ip ospf priority [number]
number的范围是0到255.注意仅当现有DR状态down掉以后,新设置的接口优先级才会生效

Adjacency Behavior for an NBMA Network

NBMA网络比如帧中继,ATM和X.25,没有广播的能力.但是经验通过在每条PVC上复制hell包为广播和多播来实现广播和多播的能力(将占用额外的带宽) 

默认在NBMA网络中,hello包的发送时间间隔和dead时间间隔分别是30秒和120秒

OSPF认为NBMA网络的运做类似其他的BMA比如以太网
 
NBMA网络中邻居不是自动发现,DR/BDR需要一张邻居列表

OSPF Commands for NBMA Frame Relay

帧中继网络的几种拓扑结构如下:

1.星型(star/hub-and-spoke):最常见的帧中继网络拓扑,代价最小
2.全互连(full-mesh):冗余,但是代价大,在这样的环境中计算VC的数量,使用n(n-1)/2的公式,n为网络中的节点数
3.部分互连(partial-mesh):前两种的折中方案

OSPF运行的两种RFC中定义的模式如下:
1.NBMA:一般和部分互连的网络结合使用,需要选举DR/BDR和人工指定邻居.优点是相对point-to-multipoint模式它的负载较低
2.point-to-multipoint:把非广播的网络当作点到点连接的集合,自动发现邻居,不指定DR/BDR,一般和部分互连的网络结合使用.优点是配置较为简便
一些其他的可运行模式如下:
1.point-to-multipoint nonbroadcast
2.broadcast
3.point-to-point

定义OSPF网络类型的命令如下:
Router(config-if)#ip ospf network [{broadcast | nonbroadcast | point-to-multipoint | point-to-multipoint nonbroadcast}]
几种选项的含义如下:
1.broadcast:使得WAN接口看上去像LAN接口;一个IP子网;多播hello包自动发现邻居;选举DR/BDR;要求网络全互连
2.nonbroadcast(NBMA):一个IP子网;邻居手工指定;选举DR/BDR;DR/BDR要求和DROTHER完全互连;一般用在部分互连的网络中
3.point-to-multipoint:一个IP子网;多播hello包自动发现邻居;不要求DR/BDR的选举;一般用在部分互连的网络中
4.point-to-multipoint nonbroadcast:如果VC中多播和广播能力没有启用的话就不能使用point-to-multipoint模式,也路由器没办法多播hello包;邻居必须人工指定;不需选举DR/BDR
5.point-to-point:一个子网;不选举DR/BDR;当只有2个路由器的接口要形成邻接关系的时候才使用;接口可以为LAN或WAN接口

Common OSPF Configuration for Frame Relay

先看看NBMA模式,如下图:

1.OSPF会把NBMA当作broadcast网络进行处理(比如LAN)
2.如图,所有的serial口处于同一子网
3.ATM,X.25和帧中继默认为NBMA操作
4.邻居手动指定
5.洪泛LSU的时候,要对每条PVC进行洪泛
6.RFC 2328兼容

对NBMA类型人工指定邻居使用如下命令:
Router(config-router)#neighbor [x.x.x.x] priority [number] poll-interval [number]
x.x.x.x为邻居的IP地址
priority [number]为优先级,如果设置为0的话将不能成为DR/BDR
poll-interval [number]是轮询的间隔时间,单位为秒.NBMA接口发送hello包给邻居之前等待的时间

下图是一个配置实例:

RouterA(config)#router ospf 100
RouterA(config-router)#network 140.140.0.0 0.0.255.255 area 0
RouterA(config-router)#neighbor 140.140.1.2 priority 0
RouterA(config-router)#neighbor 140.140.1.3 priority 0
如上,把邻居的优先级设置为0,保证A为DR.在部分互连的NBMA网络中,只需在DR/BDR上使用neighbor命令;如果拓扑结构是星形的话,neighbor命令应该使用在中心路由器上;在全互连的NBMA网络中,应该在所有的路由器上使用neighbor命令,除非是人工指定DR/BDR

查看OSPF邻居信息:show ip ospf neighbor [type number] [neighbor-id] [detail]
type number:接口类型和接口号,可选
neighbor-id:邻居路由器ID,可选

再看看point-to-multipoint模式,如下图:

1.适用于部分互连或星形拓扑结构里
2.不需DR,只使用单独的一个子网
3.自动发现邻居
4.LSU包被发送到每个邻居路由器的接口

如下图,point-to-multipoint的配置如下:

路由器A:
RouterA(config)#interface serial 0
RouterA(config-if)#encapsulation hdlc
RouterA(config-if)#ip address 120.120.1.1 255.255.255.0
RouterA(config)#interface serial 1
RouterA(config-if)#encapsulation frame-relay
RouterA(config-if)#ip address 140.140.1.1 255.255.255.0
RouterA(config-if)#ip ospf network point-to-multipoint
路由器B:
RouterB(config)#interface serial 0
RouterB(config-if)#ip address 140.140.1.2 255.255.255.0
RouterB(config-if)#encapsulation frame-relay
RouterB(config-if)#ip ospf network point-to-multipoint

验证如下:
RouterA#show ip ospf interface s1

Serial1 is up, line protocol is up
    Internet Address 140.140.1.1/24, Area 1
    Process ID 100, Router ID 120.120.1.1, Network Type Point-To-Multipoint, Cost: 64 
    Transmit Delay is 1 sec, State: Point_To_Multipoint 
    Timer intervals configured,Hello 30, Dead 120, Wait 120, Retransmit 5
    Hello due in 00:00:11
    Neighbor count is 2, Adjacent neighbor count is 2
    Adjacent with neighbor 140.140.1.2
    Adjacent with neighbor 140.140.1.3
(略)

接下来再看看point-to-multipoint nonbroadcast模式,这个模式是RFC兼容的point-to-multipoint的扩展;邻居必须人工指定;不选举DR/BDR;使用在某些邻居不能自动发现的场合下

然后是broadcast模式,要选举DR/BDR

最后是point-to-point模式,使用在当NBMA网络中只存在2个节点的时候;不选举DR/BDR;每条点到点的连接处在同一个子网中;一般只和point-to-point subinterface结合使用


定义subinterface的命令如下:
Router(config)#interface serial [number.subinterface-number] {point-to-point | multipoint}
默认在point-to-point的帧中继subinterface的OSPF模式是point-to-point模式;在multipoint的帧中继subinterface的OSPF模式是NBMA(nonbroadcast)模式;在帧中继物理接口的OSPF模式也是NBMA模式

下图就是一个point-to-point subinterface的例子:

如图每条VC要求一个单独的子网

下图是一个multipoint subinterface的例子:

如图,第一个subinterface S1.1为point-to-point模式;OSPF把第二个multipoint subinterface S1.2当作NBMA模式

下图是几种模式的一个比较:


debug ip ospf adj:用来跟踪OSPF邻居信息

Types of OSPF Routers

当OSPF area过大的话,带来的负面影响有:
1.太过频繁的SPF计算,造成路由器CPU负载过重
2.路由表过大
3.LSDB过大
解决方案是划分层次化的area路由(hierarchical area routing),减少了SPF运算的频率,减小了路由表的体积,减少了LSU的负载

OSPF路由器的类型如下图:

internal routers:所有的接口在一个area里,拥有相同的LSDB
backbone router:至少一个有接口连接到area 0里,和internal routers保持相同的OSPF进程和算法
ABR:接口连接了多个area,每个接口保持它所连的area的单独的LSDB
ASBR:至少有一个接口连接到外部网络比如其他的AS,非OSPF网络
当然,一个路由器同时可以扮演上述多个角色

OSPF LSA Types

一些LSA的类型如下:
类型1:router LSA
类型2:network LSA
类型3/4:summary LSA
类型5:AS external LSA
类型6:multicast OSPF LSA,使用在OSPF多播应用程序里
类型7:使用在Not-So-Stubby area(NSSA)里
类型8:特殊的LSA用来连接OSPF和BGP
类型9/10/11:opaque LSA,用于今后OSPF的升级等

LSA类型1(router LSA),如下图:

类型1的LSA只在一个area里传播,不会穿越ABR.描述了和路由器直接相连的链路集体状态信息.RID鉴别类型1的LSA,LSA描述了链路的网络号和掩码(即link ID).另外类型1的LSA还描述了路由器是否是ABR或ASBR

类型1的LSA不同的链路类型的link ID如下:
1.point-to-point的link ID是邻居的RID
2.transit network的link ID是DR的接口地址
3.stub network的link ID是IP网络号
4.virtual link的link ID是邻居的RID

LSA类型2(network LSA),如下图:

类型2的LSA只在一个区域里传播,不会穿越ABR.描述了组成transit network的直连的路由器.transit network直连至少2台OSPF路由器.DR负责宣告类型2的LSA,然后在transit network的一个area里进行洪泛.类型2的LSA ID是DR进行宣告的那个接口的IP地址

LSA类型3(summary LSA),如下图:

类型3的LSA由ABR发出.默认OSPF不会对连续子网进行汇总.可在ABR上进行人工设定启用汇总.类型3的LSA可以在整个AS内进行洪泛

LSA类型4(summary LSA),如下图:

类型4的LSA只使用在area里存在ASBR的时候,类型4的LSA鉴别ASBR和提供到达ASBR的路由.类型4的LSA只包含了ASBR的RID信息.类型4的LSA由ABR生成,并在整个AS里进行洪泛

LSA类型5(external LSA),如下图:

类型5的LSA描述了到达外部AS的路由,由ASBR生成并在整个AS内洪泛
 
Interpreting the OSPF LSDB and Routing Table

使用show ip ospf database来查看OSPF的LSDB信息

一些route designator如下:
1.O:代表OSPF area内(intra-area)路由,为router LSA
2.O IA:在一个AS里的area之间(inter-area)的路由,为summary LSA
3.O E1/O E2:AS外路由,为external LSA

SPF算法根据LSDB运算出SPF树来决定最佳路径,步骤如下:
1.所有在各自的area里的路由器计算出最佳路径并放进路由表里,为LSA类型1和类型2.用O来标记
2.area之间的路由器计算出最佳路径,这些最佳路径是area间路由条目,或LSA类型3和LSA类型4.用O IA来标记
3.所有的除了stub area的路由器计算出到达外部AS的最佳路径(LSA类型5),标记为O E1或O E2

O E1和O E2的区别为是到达外部网络,前者要加内部cost,后者不加,如下图:

一般只有一个ASBR宣告到达外部AS的外部路由的时候,就使用O E2(O E2为默认类型);如果有多个ASBR宣告一条到达同一个外部AS的外部路由的时候,就应该使用O E2

Changing the Cost Metric

默认情况下,Cisco根据100Mbps/bandwidth来计算metric,比如64Kbps链路的metric约为1562,T1的为64,100Mbps的链路为1.当链路速率大于100Mbps的时候,应该在OSPF进程下使用如下命令:
RouterA(config-router)#auto-cost reference-bandwidth

在接口自定义cost的命令如下:
RouterA(config-if)#ip ospf cost [value]
这条命令将使得超越默认的cost计算,具有更高的优先权.value范围为1到65535.值越低,就越优先采用该接口

OSPF Route Summarization Concepts

OSPF路由汇总可以减少路由表条目,减少类型3和类型5的LSA的洪泛,节约带宽资源和减轻路由器CPU负载,还能够对拓扑的变化本地化

OSPF路由汇总的两种类型如下:
1.inter-area(IA) route summarization:发生在ABR上
2.external route summarization:发生在ASBR上

Configuring Route Summarization

因为OSPF是基于无类的路由协议,它不会进行自动汇总.手动在ABR上做IA route summarization的命令如下:
Router(config-router)#area [area-id] range [address] [mask]
在ASBR上做external route summarization的命令如下:
Router(config-router)#summary-address [address] [mask] [not-advertise] [tag tag]

如下图就是一个ASBR上的external route summarization的例子:

R1(config-router)#network 172.16.64.1 0.0.0.0 area 1
R1(config-router)#summary-address 172.16.32.0 255.255.224.0

Default Routes in OSPF

OSPF路由器默认不会产生默认路由到一般性的area里,但是可以通过相关命令启用默认路由.默认路由作为LSA类型5出现在LSDB中

创建OSPF默认路由的命令如下:
Router(config-router)#default-information originate [always] [metric value] [metric-type type-value] [route-map map-name]
参数always是不管路由表里是否存在默认路由,都会宣告一条默认路由0.0.0.0
metric value是指定默认路由的metric,默认为10
type-value可以为1或者2.1为O E1,2为O E2,默认是2
route-map map-name是如果满足route map的话就产生默认路由

实例如下图:

R1(config)#router ospf 100
R1(config-router)#netw 10.1.1.1 0.0.0.0 area 0
R1(config-router)#default-information originate metric 10
R2(config)#router ospf 100
R2(config-router)#netw 10.2.1.1 0.0.0.0 area 0
R2(config-router)#default-information originate metric 100

Types of OSPF Areas

一些OSPF area的类型如下:
1.standard area:接收链路更新,路由汇总和外部路由
2.backbone area(transit area):标记为area 0,拥有standard area的一切属性
3.stub area:不可以包含ASBR.不接收外部路由信息(LSA类型5),如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是可以减少路由表的条目.stub area没有虚链路(virtual link)穿越它们
4.totally stubby area:Cisco私有,不接收外部路由信息和路由汇总信息(LSA类型3,4和5).不可以包含ASBR.如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是最小化路由表条目
5.not-so-stubby area(NSSA):NSSA是OSPF RFC的补遗.定义了特殊的LSA类型7.提供类似stub area和totally stubby area的优点,可以包含的有ASBR

Stub Area Configuration

stub area的配置命令如下:
RouterA(config-router)#area [area-id] stub
所有在stub area里的路由器必须都使用stub命令,例子如下图:

R3(config)#router ospf 100
R3(config-router)#netw 192.168.14.0 0.0.0.255 area 0
R3(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R3(config-router)#area 2 stub
R4(config)#router ospf 10
R4(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R4(config-router)#area 2 stub
如上是把area 2配置为stub area,R3做为ABR自动向area 2(stub area)宣告一条metric为1的默认路由0.0.0.0

Totally Stubby Area Configuration

totally stubby area的配置命令如下:
RouterA(config-router)#area [area-id] stub no-summary
ABR默认宣告一条metric为1的默认路由到totally stubby area,修改这个metric的命令如下:
RouterA(config-router)# area [area-id] default-cost [cost]

配置实例如下图:

R3(config)#router ospf 100
R3(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R3(config-router)#area 1 stub
R4(config)#router ospf 50
R4(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R4(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R4(config-router)#area 1 stub no-summary
R4(config-router)#area 1 default-cost 10
R4(config)#router ospf 50
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R2(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R2(config-router)#area 1 stub no-summary
R2(config-router)#area 1 default-cost 5
如上,默认路由将选用R2上的,因为R2的metric更低

Not-So-Stubby Areas

之前说过stub area和totally stub area不可以包含的有ASBR,但是假如你想使用ASBR,又想使其具有stub area和totally stub area的优点(减少路由表条目)的话,就可以采用NSSA,如下图:

RIP经过再发布(redistribution)到NSSA以后,NSSA的ASBR将产生只存在于NSSA中的LSA类型7,然后ABR将LSA类型7转换成LSA类型5

NSSA的配置命令为在OSPF进程下使用area [area-id] nssa,所有位于NSSA里的路由器都要使用这条命令.如下图是配置实例:

R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa default-information-originate
使用default-information-originate参数创建一条area 0到NSSA的默认路由.并且类型5的LSA将不会进入NSSA(类似stub area)
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa

还可以将NSSA配置成具有totally-stub的特性,如下:
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa
R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa no-summary
这样类型3,4和5的LSA将不会进入NSSA,no-summary参数只应用在ABR上就可以了,NSSA里的其他路由器只需使用area 1 nssa

The show Commands for Stub and NSSA

一些验证性命令如下:
show ip ospf:显示area类型
show ip ospf database:显示LSA类型7
show ip ospf database nssa-external:显示LSDB中每条类型7的LSA的信息
show ip route:显示标记为O N1/N2的NSSA路由条目(默认为O N2)

Defining an OSPF Virtual Link

在OSPF里所有的area都要和area 0相连,但是假如某个区域没有和area 0相连的话,就可以采用虚链路来连接它们,如下图:

虚链路一般是做为备份连接或者是临时连接

虚链路的配置命令如下:
Router(config-router)#area [area-id] virtual-link [RID]
一些其他可选参数如下:
authentication [message-digest|null]:指定验证方式为MD5加密还是明文口令
hello-intervals [second]:定义hello包发送时间间隔,默认为10秒

配置实例如下图:

R2(config)#router ospf 100
R2(config-router)#netw 10.3.0.0 0.0.0.255 area 1
R2(config-router)#netw 10.7.0.0 0.0.0.255 area 3
R2(config-router)#area 1 virtual-link 10.3.10.5
注意上面的RID,是指定虚链路中对方的RID,R1的配置如下:
R1(config)#router ospf 200
R1(config-router)#netw 10.2.3.0 0.0.0.255 area 0
R1(config-router)#netw 10.3.2.0 0.0.0.255 area 1
R1(config-router)#area 1 virtual-link 10.7.20.123
注意area-id都为area 1,因为area 1做为虚链路的transit area

使用show ip ospf virtual-links命令验证虚链路的配置


 红头发 回复于:2004-05-12 12:36:02

Module5 Configuring the IS-IS Protocol


IS-IS Routing

Intermediate System-to-Intermediate System(IS-IS)一般用于大型的ISP网络中,实现起来要比OSPF容易些

商业网络一般选择OSPF因为它更广泛的支持IP协议;而一些大型ISP网络仍在使用IS-IS

IS-IS拥有它特有的包(packet),IS-IS信息不会运载在其他的可路由协议(routed protocol)里.IS-IS支持IPv4,IPv6和OSI的CLNS(Connectionless Network Service)协议

Integrated IS-IS

ISO把路由器定义为中间系统(intermediate system).IS-IS做为一种IGP,收敛快速,稳定,有效的节约带宽,路由器内存和减少CPU负载.IS-IS和综合IS-IS(Integrated IS-IS)的区别在于前者支持OSI协议,后者支持OSI和IP协议

IS-IS路由器使用IS-IS Hellos(IIH)来建立和维持邻居关系,一旦邻居关系建立起来以后,IS-IS路由器就通过LSP(Link State Packet)交换链路状态信息.IS-IS路由器也使用Dijkstra算法

IS-IS支持2个路由级别(routing level):
1.L1:学习本地area(intra-area)的路由
2.L2:学习area之间(inter-area)的路由
额外的还有一种L1/L2,类似OSPF里的ABR,如下图:

有一点和OSPF不一样的是:OSPF的area是以路由器为边界;而IS-IS是由链路为边界

良好的综合IS-IS的设计原则要考虑的因素有:IP地址和CLNS地址的规划问题;类似OSPF里的双层结构;路由汇总

IS-IS里接口的度(metric)最大为6位,即63;路径的度最大为10位,即1023.在IS-IS里有4种类型的度:默认;延迟(delay);花费(expense)和错误(error).而Cisco IOS只支持默认的度.并且Cisco默认把所有IS-IS路由器的接口度设置为10.如下图:


ES-IS Discovery Protocol Operations

主机(host)在OSI术语里也叫做端系统(end system,ES).ES和IS它们之间的发现过程可以由下图表示:

IS之间相互发送IIH来建立邻居关系,IS会给ES发送ISH,ES会给IS发送ESH保证IS和ES知道对方的存在.IP系统不会使用ES-IS,它有他自身的过程和应用程序来实现相同的功能,比如ICMP,ARP和DHCP.虽然综合IS-IS支持IP,但是IS-IS仍然使用ES-IS来形成邻居关系和使用CLNS来传输信息

OSI Routing Levels

OSI的几个路由级别,如下图:

1.L0:通过监听ISH包,ES发现最近的IS.ES-IS实施以下任务:
鉴别到达ES的area前缀
在IS和ES之间建立邻居关系
创建数据链路和网络地址的映射
当ES要发送包给其他ES的时候,就发送包给和它最近的那个IS,这就是L0的路由
2.L1:在相同area里之间的路由
3.L2:area之间的路由
4.L3:不同的域(domain)之间的路由

Comparing IS-IS and OSPF

综合IS-IS是做为IS-IS的扩展,融合了ISO CLNS和IP环境.IS-IS和OSPF都是开放式(open standard)链路状态路由协议,都支持VLSM,并且收敛都很快

IS-IS最早是由DEC提出的,并提交给ANSI成为OSI IGP,那时候的IS-IS仅仅支持CLNS,后来产生了支持IP的综合IS-IS

IS-IS和OSPF的一些类似的地方如下:
1.它们都是链路状态路由协议
2.使用相同的机制来维持LSDB的正常
3.适合大型网络
4.网络拓扑发生变化以后能比较快速的收敛

另外IS-IS的可扩展性比OSPF要好点,比如你想扩展骨干area,只需要添加L1/L2路由器就可以了.IS-IS检测错误的速度要稍快于OSPF,因此收敛也相对较快.而且IS-IS对路由器CPU资源占用要比OSPF的少.但是现今IS-IS的文档资料相对OSPF较为难找

NSAP Address

NSAP(network service access point)地址最大为20字节长,高位(high-order bit)定义了area间的结构;低位(low-order bit)用来鉴别area里的唯一的系统.OSI的网络层(network-layer)地址是由NSAP地址来实现的,NSAP地址用来鉴别OSI网络中的系统.不同的协议的NSAP地址长度可能有变

每个IS-IS路由器就需要1个OSI地址.这些IS-IS的PDU直接封装在OSI数据链路层帧,里面不包括CLNP头和IP头.IS-IS通过使用LSP里的OSI地址来鉴别IS-IS路由器并建立拓扑表和基本的IS-IS路由树(SPF算法,和OSPF的路由树类似)

OSI地址也叫NSAP地址,包含以下信息:
1.设备的OSI地址
2.到高层链接的过程
实际上NSAP地址就等于IP地址和IP头部信息中的上层协议的结合产物

IS-IS NSAP Address Structure

Cisco对综合IS-IS里的NSAP是这样实现的,分为3个字段如下:
1.area address:变长,1到13字节长
2.system ID:定长,6字节长,标明area内的系统为是否为IS或ES
3.NSAP selector(NSEL):1字节长,服务标识符(类似IP协议里的协议号)
所以NSAP地址总长的范围为8到20字节
ISO 10589标准中定义的NSAP如下图:

可以看出Cisco定义的和ISO 10589中定义的可以很好的兼容

通常把IS-IS作为IGP来运行的时候,把AFI设置为49,这样做以后就使得NSAP地址类似IP中的私有地址一样,属于可本地化管理的地址;area ID至少要为1个字节长;system ID为6字节;对于路由器而言把NSEL设置为0

比如1个NSAP地址49.0001.0000.0c12.3456.00.其中49就为AFI,area ID为0001,system ID为0000.0c12.3456(LAN接口的MAC地址),00为NSEL.当NSEL设置为0以后NSAP就被叫做NET(net entity title)

Identifying Systems in IS-IS


如上图,area1的area ID为49.0001,area4的area ID为49.0004,所有在1个area里的IS-IS路由器必须使用相同的area ID;当ES和L1路由器处于1个子网的时候ES才能认识该area的IS和其他的ES;L1路由基于system ID,因此ES和IS的标识必须是唯一的;所有的L2的IS也必须是拥有唯一的system ID.system ID是针对1个系统而非单独的一个接口,system ID可以根据MAC地址进行设置,或者在综合IS-IS里,可以根据IP地址来设置,比如(0000.0c99.9999或1921.6800.0001)

NET是NSAP中NSEL设置为0的名称.如果需要CLNS路由的话,AFI就不能设置为49因为AFI为49是用在本地话的类似IP私有地址空间里的

Identifying Systems: Subnetwork and Circuit

一些额外的IS-IS术语如下图:

1.SNPA(subnetwork point of attachment):在LAN接口里就从接口的MAC地址得来;对于X.25或ATM即为VC的ID;对于帧中继即为DLCI;对于HDLC即为封装类型
2.circuit(电路):电路是IS-IS中接口的术语,NSAP和NET代表整个设备,而电路代表接口.对于点到点的接口电路ID为1个字节长,比如HDLC为电路ID为0x00;对于广播型网络比如LAN中,通常是结合system ID构成7字节长的电路ID,比如1921.6800.0001.01.而在Cisco的路由器中主机名可以用来代替system ID,所以你看到的LAN接口中电路ID可能为P6R4.01

Intra-Area and Inter-Area Addressing and Routing 

当ES和IS在同1个area里的时候才可以互相通信.NSAP里area ID部分用来进行area之间路由的判定,system ID不予以考虑;system ID是用在鉴别area内路由的,此时不考虑area ID.L1路由器掌握着本地的拓扑信息,当有数据要传输到其他area的时候,就要经过和它距离最近的L1/L2路由器

L1路由器比较它收到的包的目标地址的area ID和它自己所在的area ID,如果不等,就把包交给最近的L1/L2路由器;如果相等,通过查找自己L1的数据库来比较system ID进行包的路由

L1/L2路由器比较它收到的包的目标地址的area ID和它自己所在的area ID,如果不等,就通过查找L2的数据路来比较area ID把包交给L2路由器;如果相等,通过查找自己L1的数据库来比较system ID进行包的路由

L1 area是L1和L1/L2路由器的集合,L1路由器类似OSPF里的nonbackbone路由器,负责area内路由使ES之间能够相互通信,保存L1 area的LSDB;L1/L2路由器类似OSPF里的ABR,负责area间和area内路由,并保存的有单独的L1和L2的LSDB,L1/L2路由器宣告一条默认路由到L1路由器;L2路由器类似OSPF里的BR,负责area间路由,L2 area是连续的L1/L2路由器和L2路由器的集合,保存L2 area的LSDB

当ES需要传送包给其他的ES的时候,包先发送给和该ES直接相连的L1 IS,IS查找目标地址并选择最佳路径,如果IS通过监听ESH意识到目标ES的位置是和源ES位于同一个area里,就把包转发给目标ES

如果目标ES和源ES不在同一个area里,L1 IS发送包给最近的L1/L2 IS,通过L2 IS对包的转发,直到转发到和目标ES位于同一个area的L2 IS为止,L2 IS再把包L1 IS,L1 IS把包交给目标ES

因为每个IS都有自己计算出的最佳的路由决策,因此,按上述例子,当目标ES要把包返回给源ES的时候,就不一定走和来的时候一样的路径.如下图:

包由X到Y的时候,X把包交给最近的L1/L2路由器A,A发现到C和到B的耗费均为10,但是经过C的话要穿越2个area,而经过B的话只需要穿越1个area,于是A把包交给L1/L2路由器B,B计算出到达Y的最佳路径(如上图绿线所示)
当包要从Y回到X的时候,Y发现2个L1/L2路由器F和E的耗费为15和10,于是B把包交给E,E再经过D和C回到A,最后交给X

IS-IS Protocol Data Units

IS-IS PDU是直接封装在数据链路(data link)帧里的.并且PDU里没有包含CLNP或IP头.IS-IS PDU有如下几种类型:
1.hello(包括IIH,ISH,ESH):用来建立和维持邻接关系
2.LSP(link-state PDU):用来分发链路状态信息
3.PSNP(partial sequence number PDU):用于确认和请求丢失的链路状态信息
4.CSNP(complete sequence number PDU):用来描述路由器的LSDB中LSP的完全列表

如下图分别是ES-IS,IS-IS和CLNP用到的PDU:

可以看出它们都是直接封装在数据链路帧里的,而真正的CLNP是包含了CLNP头的

在IS-IS里,路由器的特征是由LSP描述的,如下图:

LSP头部包括PDU类型,长度,LSP ID,顺序号(sequence number),剩余生存期(remaining lifetime);TLV字段是变长字段,包含的信息有IS neighbors,ES neighbors,验证类型等等
LSP头部里的顺序号起始为1,顺序号越高表明LSP越新,顺序号避免了LSP在LSDB中的重复出现.当路由器重启后,顺序号归为1.remaining lifetime是用来倒数,当倒数为0以后LSP标记为无效,起始值为1200

IS-IS支持广播型网络(比如LAN和多点WAN连接)和点到点型的网络,IS-IS中没有NBMA的概念,所以对于一些比如帧中继,ATM和X.25等NBMA网络,可以通过划分子接口的方式使用点到点型的网络

要在NBMA网络中实现IS-IS,要把CLNS和DLCI做个映射,并加上broadcast参数,比如frame-relay map clns <dlci-number>; broadcast.建议把NBMA网络当成点到点的环境来配置

Broadcast Networks

广播型的网络有LAN接口和多点WAN连接(推荐IS-IS中广播型只使用在LAN接口里).在LAN里,路由器通过IIH和其他所有的路由器都建立邻接关系(OSPF里是和DR邻接).IIH里包含了area ID,邻接关系的形成是基于area地址和路由器类型(L1,L2)的,L1和L2的路由器分别接收L1和L2的IIH,建立各自等级的邻接关系(L1和L1,L2和L2)

Dijkstra算法要求要有1个虚拟路由器(virtual router),叫做DIS(designated intermediate system),DIS用来建立整个广播环境的快照.DIS选举的原则是优先级最高(可以人工配置),MAC地址等级最高.Cisco默认L1和L2的优先级都是64,可以通过isis priority命令进行修改,范围是0到127.L1的DIS和L2的DIS可能不是同1个路由器,因为接口L1和L2的优先级可以不同

DIS选举以后,并不是永久性的,当某个路由器的优先级高于现有的,它就自动取代现有DIS的位置.IS-IS里没有备份DIS(和OSPF不同).如下图:

和OSPF中路由器和DR邻接不同的是,IS-IS中,IS之间相互邻接同时也和DIS邻接,所以如果DIS出问题down掉了,对网络基本没什么影响

Point-to-Point Networks

由于IS-IS也使用的是双层结构,所以每个级别的LSP是单独分发的,就有了L1 LSP和L2 LSP,并且每个IS产生单独的LSP(1种是L1 LSP,另1种是L2 LSP).LSP在广播型网络中以多播方式发送,在点到点环境是以单播方式发送

广播型和点到点的一些比较如下图:


Link-State Database Synchronization

L1 LSP只在local area洪泛,L2 LSP将在整个backbone洪泛.每个IS生成的单独的L1 LSP和L2 LSP,LSP通过system ID和LSP number鉴别,LSP number起始为0,如果LSP超过了MTU,就把LSP分片为1,2,3等等.当IS接收到LSP的时候校验checksum(检验和)并丢弃无效的LSP(超出lifetime);如果接收到的LSP版本更新,就把它放进自己的LSDB中,把lifetime设置为1200秒考试倒数.当倒数到0以后,还会保持额外的60秒,60秒之后,计为无效,丢弃

SNP(sequence number PDU)对接收方进行确认并保持LSDB的同步.有2种类型的SNP,PSNP和CSNP.PSNP和CSNP享有共同的格式,不同点在于前者是部分,后者是完全.PSNP用于点到点链路中LSP的确认和请求丢失的某一部分的LSP;CSNP用于LAN内由DIS周期性发送的,确保LAN的可靠性,在点到点链路状态由down变为up以后将只发送1次CSNP,之后传输的是PSNP

下图是LAN(广播型网络)中CSNP和PSNP的示意图:

DIS每10秒发送1次CSNP,而R1只丢失了LSP 77,它就只需要发送PSNP请求LSP 77

LAN and WAN Adjacencies

看看LAN中IS-IS的邻接关系,如下图:

WAN中的邻接关系如下图:

可以看出,比较area ID是能否邻接的其中一个因素,并且同等级的相互对应比如L1对L1和L1/L2

Integrated IS-IS NET Addressing

NET地址是用来鉴别设备(比如IS或ES)而非设备接口的.即使在IP环境,CLNS参数(NET地址)和area的规划也要考虑进去,即使你使用综合IS-IS只用于IP路由,但是路由器仍然建立CLNS邻接关系,并且仍然使用CLNS包

Criteria and Path Selection for IS-IS Area Routing

为建立转发数据库,CLNS路由表,路由器会经历以下过程:
1.当LSDB同步以后,Dijkstra算法进行计算出SPF树,IS-IS使用OSI转发数据库(forwording database,路由表)来选择到达目的地的最佳路径
2.由于L1和L2在LSDB中是独立开来的,因此路由器会运算2次SPF算法,每个级别创建单独的1条SPF树
3.根据L1和L2的SPF树通过PRC(partial route calculation)计算出ES的可达性(reachability).在综合IS-IS单独的IP环境中,是没有OSI ES的
4.把最佳路径放进CLNS路由表里(OSI转发数据库)

PRC参与IP可达性的计算,但是IP和ES不会参与SPF的运算.最佳路径放进IP转发数据库(IP路由表)里,将以L1,L2的形式标记

Using the show Commands

show clns:显示CLNS网络的信息
show clns protocol [tag]:显示协议特性信息
show clns interface [type umber]:显示接口的CLNS特定信息
show clns neighbors [type number] [detail]:显示ES和IS的邻居信息

show isis route:显示IS-IS L1的路由表(查看的是CLNS路由,必须启用CLNS路由)
show clns route:显示CLNS的路由表(L2)
show isis database:显示IS-IS的LSDB信息
show isis topology:显示IS-IS到达目的地耗费最低的路径

来看下show命令实例,如下图:

R1#show isis topology
IS-IS paths to level-1 routers
System Id       Metric  Next-Hop    Interface       SNPA
R1              --
R2              10      R2          Se0        *HDLC*
R4              10      R4          Se1        *HDLC*

R2#show isis topology
IS-IS paths to level-1 routers
System Id       Metric  Next-Hop    Interface       SNPA
R1              10      R1          Se0        *HDLC*
R2              --
R4              10      R4          Se1        *HDLC*
IS-IS paths to level-2 routers
System Id       Metric  Next-Hop    Interface       SNPA
R2              --
R5              10      R5          Et0        0010.7bb5.9e20
注意serial接口和Ethernet接口SNPA分别为封装类型和MAC地址.再注意R1为L1,R2为L1/L2,它们在show isis topology输出中不同的内容

R1#show clns route
CLNS Prefix Routing Table
49.0001.0000.0000.0001.00, Local NET Entry

R1#show isis route
IS-IS Level-1 Routing Table - version 312
System Id  Next-Hop  Interface     SNPA   Metric   State
R2        R2        Se0       *HDLC*   10     Up    L2-IS
R4        R4        Se1       *HDLC*   10     Up
R1         --
Default route out of area - (via 1 L2-attached IS)
System Id  Next-Hop  Interface     SNPA   Metric    State
       R2        Se0       *HDLC*   10     Up
注意在R1上show isis route输出里显示的R2最后有个L2-IS.同时也要注意show clns route的输出

R2#show clns route
CLNS Prefix Routing Table
49.0001.0000.0000.0002.00, Local NET Entry
49.0002 [110/10] via R5, IS-IS, Up, Ethernet0
49.0001 [110/0] via R2, IS-IS, Up

R2# show isis route
IS-IS Level-1 Routing Table - version 47
System Id   Next-Hop   Interface       SNPA   Metric   State
R4           R4        Se1        *HDLC*   10      Up
R1           R1        Se0        *HDLC*   10      Up
注意在R2(L2)上使用show clns route命令的输出和之前在R1(L1)上内容的不同.以及show isis route的输出只显示了和L1相关联的,而没显示和L2相关联的.注意管理距离AD是110(CLNS),对于IP管理距离是115

Integrated IS-IS Configuration Steps

综合IS-IS的配置步骤如下:
1.定义area和地址规划,要考虑的问题有:对于IP而言要考虑汇总问题;对于CLNS要考虑system ID唯一性的问题
2.启用IS-IS,命令如下:
router(config)#router isis [tag]
tag为IS-IS进程标记,类似OSPF里的进程ID,可选,如果省略的话,IOS默认IS-IS进程号为0.而CLNS路由默认是没有被启用的,默认启用的是IP路由,所以要启用CLNS路由的话,还需要输入如下命令:
router(config)#clns routing
额外的,你还需要在接口启用CLNS路由
3.配置NET,命令如下:
Router(config-router)#net [network-entity-title]
注意是在全局配置模式下,记得默认的NSEL值写为00
4.启用综合IS-IS,命令如下:
router(config-if)#clns router isis [tag]
router(config-if)#ip router isis [tag]
选择参与IS-IS进程的接口,同样,如果有多个IS-IS进程,那接口也要配置IS-IS进程ID(tag),省略的话IOS默认为0
一般来说,IOS默认把IS-IS路由器当成是L1/L2路由器

更改路由器路由级别,默认为L1/L2,如下:
Router(config-router)#is-type {level-1 | level-1-2 | level-2-only}
更改路由器接口的路由级别,默认为L1/L2,如下:
Router(config-if)#isis circuit-type {level-1 | level-1-2 | level-2-only}
更改IS-IS路由器接口的metric值,如下:
Router(config-if)#isis metric [metric] {level-1 | level-2}
L1和L2的metric值可以不一样
综合IS-IS做IP路由汇总的命令如下:
Router(config-router)#summary-address {prefix} {mask} [level-1 | level-2 | level-1-2]
比如:P3R1(config-router)# summary-address 10.3.2.0 255.255.254.0 level-2
默认为L2

一些验证性的命令,如下:
Router#show ip protocols
Routing Protocol is "isis"
  Sending updates every 0 seconds
  Invalid after 0 seconds, hold down 0, flushed after 0
  Outgoing update filter list for all interfaces is
  Incoming update filter list for all interfaces is
  Redistributing: isis
  Address Summarization:
    None
  Routing for Networks:
    Serial0
    Ethernet0
Routing Information Sources:
    Gateway         Distance      Last Update
    11.0.0.1             115      00:11:44
    13.0.0.1             115      00:11:44
    14.0.0.1             115      00:11:44
Distance: (default is 115)
(略)

查看路由表,如下:
router#show ip route <address [mask]>; | <protocol [process-id]>;
实例如下:
R2#show ip route isis
i L1 11.0.0.0/8 [115/10] via 192.168.20.1, Serial0
i L1 13.0.0.0/8 [115/10] via 192.168.220.3, Ethernet0
i L1 14.0.0.0/8 [115/20] via 192.168.220.3, Ethernet0


 红头发 回复于:2004-05-12 12:36:10

Module6 Manipulating Routing Updates


Migrating to a New IP Routing Protocol

redistribution(再发布)是用来连接不同的路由域(routing domain,或AS),使得运行了不同的路由协议的路由器能够共享路由信息.再发布的两种方法如下:
1.two-way redistribution:双向
2.one-way redistribution:单向

如下情况可能就会使用多种路由协议:
1.迁移旧的IGP到新的IGP
2.可能一些旧的部门不想让它们的路由器运行新的
3.混合厂商设备之间,比如Cisco设备和非Cisco设备

下图是一个再发布的例子:

左边是OSPF网络,右边是EIGRP网络,A作为边界路由器,在A上做再发布,B把EIGRP网络汇总路由192.168.5.0宣告给A;C把OSPF网络的汇总路由172.16.0.0宣告给B.同时C的路由表里出现1条条目O E2 192.168.5.0,E2表外部路由;而B的路由表也出现一条条目D EX2 172.16.0.0,表示这条路由是从外部学来的
如果上图那个例子,A没有做路由再发布的话,就叫SIN(ships-in-the-night) routing.A将在参与了OSPF进程的接口上传输OSPF路由更新包给OSPF邻居;而在参与了EIGRP进程的接口上传输EIGRP路由更新包给EIGRP邻居.参与不同路由协议进程2边的接口之间不会交换路由信息的

Seed Metrics

在做路由再发布的时候,如果2边使用不同的路由协议,就要进行metric的翻译,使得它们兼容.seed metric(default metric)是定义在路由再发布里的.在路由配置模式使用default-metric命令在建立seed metric.如下图是一些IP路由协议的default seed metric:


Redistribution Implementation Considerations

做路由再发布应该考虑到的一些问题,如下:
1.routing feedback(loops)
2.路由信息的兼容问题
3.不一致的收敛时间

比较安全的办法是在边界路由器上采用one-way redistribution.还要决定核心(core)路由协议和边缘(edge)路由协议.在对路由协议进行翻译的时候,核心路由协议做为新的路由协议,边缘路由协议作为旧的路由协议.如果你想做two-way redistribution,要把路由循环的问题考虑进去

Configuring Redistribution

只有支持相同协议栈的路由协议才能做再发布,比如IP的RIP和OSPF;反之IPX的RIP就不能和OSPF做再发布.还有一些路由协议比如IGRP和EIGRP,在1个AS里的话会自动再发布;但是其他的路由协议要进行人工配置,还有一些其他的路由协议在配置再发布的时候要进行metric的配置

路由再发布的步骤如下:
1.定位要做再发布的边界路由器,尽量选举一个路由器做为边界路由器来减少路由循环的可能性
2.决定哪个路由协议做为核心路由协议
3.定义哪个路由协议做为边缘路由协议(做为过渡)
4.选择注入边缘路由协议到核心路由协议里的方法,可以通过在网络边界使用汇总来减少核心路由表的条目

the redistribute Command for RIP

再发布到RIP的命令如下:
Router(config-router)#redistribute <protocol>; [process-id] <match [route-type]>; <metric [value]>; <route-map [map-tag]>;
参数含义如下:
protocol:需要做再发布的一些,比如OSPF,IS-IS,IGRP等等
process-id:对于EIGRP,IGRP,BGP和EGP就是AS号;对于OSPF就是进程ID
match [route-type]:可选,用来再发布OSPF的时候用的,可选参数为internal,external 1(O E1)和external 2(O E2)
metric [value]:可选,为经过再发布以后的路由定义RIP的seed metric,默认是0,即无限(infinity)
route-map [map-tag]:可选,定义route map

如下图:

把OSPF进程1再发布到RIP中去,并定义metric为3

the redistribute Command for OSPF

再发布到OSPF的命令如下:
Router(config-router)#redistribute <protocol>; [process-id] <metric [value]>; <metric-type [value]>; <route-map [map-tag]>; [subnets] <tag [value]>;
参数含义如下:
metric [value]:可选,当其他路由再发布到OSPF里的时候,默认的seed metric为20(BGP例外,BGP为1)
metric-type [value]:可选,定义外部路由类型,默认为external 2(O E2)
subnets:可选,如果不加这个参数,将不会将子网路由信息再发布到OSPF里去

如下图:

如上是把EIGRP再发布到OSPF里,并指定子网信息(172.16.1.0,如果没有加上subnets参数,这里可能就是172.16.0.0),并指定外路路由类型为O E1.seed metric采用默认的值20

the redistribute Command for EIGRP

再发布到EIGRP的命令如下:
Router(config-router)#redistribute <protocol>; [process-id] <match [internal|external 1|external 2]>; <metric [value]>; <route-map [map-tag]>;
参数含义如下:
metric [value]:可选,定义seed metric,参数顺序为bandwidth,delay,reliability,load和MTU
match [internal|external 1|external 2]:可选,用来再发布OSPF到EIGRP里定义外部路由类型

如下图:

如上是把OSPF进程1再发布到EIGRP里,并指定带宽为10000Kb,延迟为100,可靠性最大255,负载最小1以及MTU为1500

the redistribute Command for IS-IS

再发布到IS-IS的命令如下:
Router(config-router)#redistribute <protocol>; [process-id] <metric [value]>; <level [value]>; <metric-type [value]>; <route-map [map-tag]>; <tag [value]>;
参数含义如下:
level [value]:可选,外部路由再发布的级别,默认为L2,value可选参数为level-1,level-1-2和level-2

如下图:

如上是把EIGRP再发布到IS-IS里,默认为L2

如下图是一个没有做再发布的配置实例:

B(config)#router rip
B(config-router)#netw 10.0.0.0
B(config-router)#version 2
B(config-router)#passive-interface s2
最后1行命令的作用是不需要在serial 2上启用RIPv2
B(config)#router ospf 1
B(config-router)#netw 10.0.0.8 0.0.0.3 area 0
而此时A,B和C的路由表的条目如下图:

现在在B上做路由再发布,如下:
B(config)#router ospf 1
B(config-router)#netw 10.0.0.8 0.0.0.3 area 0
B(config-router)#redistribute rip subnets metric 300
如上是把RIP再发布到OSPF中同时定义子网信息的发布和metric的值为300
B(config)#router rip
B(config-router)#netw 10.0.0.0
B(config-router)#version 2
B(config-router)#passive-interface s2
B(config-router)#redistribute static metric 5
如上的再发布一条静态路由到RIP中去,注意metric为5(高于RIP网络默认的metric)

下图是经过再发布以后,A,B和C路由表的条目:


还可以通过路由汇总来减少路由表的条目,如下图:

对于A,创建汇总,如下:
A(config)#int s0
A(config-if)#ip summary-address rip 10.0.0.0 255.252.0.0
对于C,创建汇总,如下:
C(config)#router ospf 1
C(config-router)#area 1 range 10.8.0.0 255.252.0.0
之后路由表条目如下图:

可以看出路由汇总有效的减少了路由表的条目

Passive Interface

如果你在路由器上配置某种路由协议,但是你又想让某个接口不参与到其中去,就可以用passive-interface命令.这个命令的作用是防止路由协议的路由更新通过这个接口发送出去.如果要把全部的接口全部设置为这样的1个状态就可以使用passive-interface default命令,再使用no passive-interface命令开启个别需要发送路由更新的接口

如下图就是1个实例:

在B上的配置如下:
B(config)#router rip
B(config-router)#netw 10.0.0.0
B(config-router)#passive-interface s1
在A上的配置如下:
A(config)#router rip
A(config-router)#netw 10.0.0.0
A(config-router)#passive-interface default
A(config-router)#no passive-interface s1

Route Filtering

控制路由更新包的一些办法如下:
1.passive-interface
2.默认路由
3.静态路由

还可以使用distribute-list来对路由更新包进行控制,流程图如下:


Configuring distribute-list

配置distribute-list的步骤如下:
1.根据网络需要创建ACL
2.决定是在过滤方向
3.创建distribute-list

out方向的命令如下:
Router(config-router)#distribute-list {access–list-number | name} out <interface–name | routing–process | [autonomous–system number]>;
in方向的命令如下:
Router(config-router)#distribute list {access–list-number | name} in [interface-type number]

配置实例如下图:

如上图,将只允许来自172.16.0.0的路由更新包经过s0口传输到192.168.5.0中去,因为结尾默认隐含deny any,所以来自10.0.0.0的包被过滤掉了

下图是一个用distribute-list控制再发布的例子:

B(config)#access-list 2 deny 10.3.0.0 0.0.255.255
B(config)#permit any
B(config)#access-list 3 permit 10.9.0.0
B(config)#router ospf 1
B(config-router)#netw 10.0.0.8 0.0.0.3 area 0
B(config-router)#redistribute rip subnets
B(config-router)#distribute-list 2 out rip
B(config-router)#^Z
B(config)#router rip
B(config-router)#netw 10.0.0.0
B(config-router)#version 2
B(config-router)#passive-interface s3
B(config-router)#redistribute ospf 1 metric 5
B(config-router)#distribute-list 3 out ospf 1
如上配置,将只有路由10.9.0.0再发布到RIP里去;而再发布到OSPF里的只有10.1.0.0和10.2.0.0

Route Map Operation


route map的作用如下:
1.再发布路由的过滤
2.基于策略的路由(policy-based routing,PBR)
3.NAT
4.BGP路由策略

Route Map Commands

通过route map控制路由的再发布命令,如下:
Router(config-router)#redistribute [protocol] [process id] route-map [map-tag]

创建route map的步骤如下:
1.定义route map的条件,如下:
Router(config)#route-map [map-tag] [permit | deny] [sequence-number]
2.定义需要满足的条件,如下:
Router(config-route-map)#match {conditions}
3.满足条件以后所采取的措施,如下:
Router(config-route-map)#set {actions}
其中{conditions}参数和{actions}参数可以通过?来提示查看

一个通过route map控制路由再发布的例子如下:
Router(config)#access-list 23 permit 10.1.0.0 0.0.255.255
Router(config)#access-list 29 permit 172.16.1.0 0.0.0.255
Router(config)#access-list 37 permit 10.0.0.0 0.255.255.255
如上设置ACL
Router(config)#route-map redis-rip permit 10
Router(config-route-map)#match ip address 23  29
Router(config-route-map)#set metric 500
Router(config-route-map)#set metric-type type-1
Router(config-route-map)#^Z
Router(config)#route-map redis-rip deny 20
Router(config-route-map)#match ip address 37
Router(config-route-map)#^Z
Router(config)#route-map redis-rip permit 30
Router(config-route-map)#set metric 5000
Router(config-route-map)#set metric-type type-2
Router(config-route-map)#^Z
如上,route map 10是把匹配ACL 23和29的地址,设置cost为500并且为类型1;route map 20是符合ACL 37的IP地址将不会被再发布;route map 30是把其他的路由的cost设置为5000,类型2
Router(config)#router ospf 10
Router(config-router)#redistribute rip route-map redis-rip

Commands for Changing Administrative Distance

手动修改管理距离的命令如下:
Router(config-router)#distance [value] <address wildcard-mask [access-list-number | name]>;
以上命令用在配置OSPF,IS-IS和RIP等路由配置模式下使用(BGP和EIGRP例外)
对于EIGRP的管理距离修改的命令如下:
Router(config-router)#distance eigrp [internal-distance] [external-distance]

Policy-Based Routing

PBR的一些优点如下:
1.一般的IP路由的策略是基于目标地址的,PBR允许你可以基于源地址对包进行路由
2.Qos
3.节省开支,负载共享

PBR是应用于incoming packet上的(即包进入路由器的那个接口),并通过route map来做路由决策.规则如下:
1.如果在route map里,陈述标记为deny的话,符合这个匹配原则的包就按照正常方式进行路由
2.如果在route map里,陈述标记为permit的话,符合这个匹配原则的包就按照set命令进行处理;如果没有找到可以匹配的包,就按照正常方式进行路由
3.如果你想把不符合匹配原则的包丢弃而非按正常情况处理的话,就要在route map的最后1行加上1行set语句:把那些包路由到null0接口

一些常用的PBR的match命令如下:
Router(config-route-map)#match ip address {access-list-number | name} [access-list-number | name]
如上是根据IP地址进行匹配
Router(config-route-map)#match length [min] [max]
如上是根据layer 3的包的长度来进行匹配

一些常用的PBR的set命令如下:
Router(config-route-map)#set ip [default] next-hop [ip-address] [...ip-address]
定义下1跳的出口地址
Router(config-route-map)#set [default] interface [type number] [...type number]
定义出口的接口,推荐使用在点到点链路上
以上的default参数都用在路由表里没有到达目标地址的明确条目的情况下

对PBR的应用命令如下:
Router(config-if)#ip policy route-map [map-tag]
注意是在incoming接口(入口)应用,而表示应用在outgoing接口(出口)上
Router(config-if)#ip route-cache policy
启用快速交换路由策略,快速交换路由策略支持所有的match命令和大部分set命令,但是set ip default next hop命令不被支持

PBR的实例如下图:

如图,现需要将1.1.0.0的网络的数据包送到ISP A去;将1.2.0.0的数据包送到ISP B去,配置如下:
RouterA(config)#access-list 1 permit ip 1.1.0.0 0.0.255.255
RouterA(config)#access-list 2 permit ip 1.2.0.0 0.0.255.255
根据需要先创建ACL
RouterA(config)#route-map equal-access permit 10
RouterA(config-route-map)#match ip address 1
RouterA(config-route-map)#set ip default next-hop 6.6.6.6
RouterA(config-route-map)#route-map equal-access permit 20 
RouterA(config-route-map)#match ip address 2
RouterA(config-route-map)#set ip default next-hop 7.7.7.7
RouterA(config-route-map)#route-map equal-access permit 30
RouterA(config-route-map)#set default interface null0
创建route map
RouterA(config)#interface ethernet 0
RouterA(config-if)#ip address 1.1.1.1 255.255.255.0
RouterA(config-if)#ip policy route-map equal-access
在incoming接口上应用r