·执行与操作
根据用户需求配置路由协议。
在路由器和主机上配置IP地址,子网掩码和网关地址。
在路由器上进行初始配置。
在交换机上进行初始配置。
·故障检测
进行LAN和VLAN的故障检测。
检测路由协议的故障。
检测IP寻址和主机配置的故障。
检测运行中网络的一个设备故障。
·技术
评价路由协议特性。
评价TCP/IP通信过程及相关协议。
在这一章里,我准备讨论IP路由选择的过程。自从在所有路由器配置上使用IP以来,IP路由选择是一个需要弄懂的重要课题。IP路由选择是用路由器把数据包从一个网络移动到另一个网络的处理过程,当然我这里指的是思科的路由器。
当你开始阅读这章之前,你必须知道路由选择协议和可路由协议之间的区别。一个路由选择协议(routing protocol)被路由器用来动态地寻找在互连网络中的所有网络,并保证所有的路由器保持同样的路由表。基本上,一个路由选择协议决定一个数据包通过网络的路径,例如一些路由选择协议如RIP,IGRP,EIGRP和OSPF等。
自从所有的路由器知道所有网络的情况后,一个可路由协议(routed protocol)被用来把用户数据包发送到既定的环境。已路由协议被分配在一个接口上并决定数据包分发的方法。例如IP和IPX。
不用再次强调,如果你想弄懂后面章节的话,这章介绍的一些基础你必须得弄明白它!接下来你将学习怎么在思科路由器上配置和确认IP路由选择,内容将包括如下:
·静态路由选择
·默认路由选择
·动态路由选择
在下一章我将更详细的介绍Enhanced IGRP(EIGRP)和Open Shortest Path First(OSPF),在这里我们先学习一些基础的路由选择协议。
Routing Basics 自从你创建了一个互连网络通过路由器来连接你的WANS和LANS,你需要在网络中所有主机上配置一个逻辑网络地址如IP地址,使它们能够通过互连网络通信。
术语routing被用来把一个网络中数据包从一个设备发送到另一个网络中的设备。路由器并不真正关心主机的情况,它只关注网络和到达网络的最好路径。目标主机ip地址被用来接收通过一个已路由网络的数据包,然后主机硬件地址被路由器用来确定数据包去往的目标主机。
如果你的网络中没有路由器,很显然你将不能够进行路由选择。路由器在你的互连网络中路由通信流量到各个网络,要能够路由数据包,一个路由器最起码必须知道下面的内容:
·目标地址。
·能够从远程网络中发现的邻居路由器。
·到远程网络的所有可能路由路径。
·怎么样保存和确认路由选择信息。
路由器通过邻居路由器学习远程网络或者从一个管理员那里学习,然后路由器建立一个描述怎么找到远程网络的路由表。如果两个网络直接连接,那么路由器已经知道怎么去到达它们,如果两个网络没有直接连接,那么路由器必须学习怎么到达远程网络,有两种方法:使用静态路由选择,这意味着某人必须手动输入所有的网络位置进路由表或者通过一些叫动态路由选择的方法。
在动态路由选择中,在路由器上的一个协议和运行同样协议的邻居路由器通信,然后这些路由器更新彼此知道的所有网络并且把这些信息放进路由选择表中。如果网络发生变动,动态路由选择协议自动通知所有路由器这个事件。如果使用静态路由选择,那么管理员必须在所有路由器上手动更新这个变化。一般在一个大的网络中混合使用动态和静态路由选择。我们使用show ip route命令来显示路由条目。
Lab_A#sh ip route [output cut] Gateway of last resort is not set C 10.10.10.0/24 is directly connected, FastEthernet0/0 C 10.10.20.0/24 is directly connected, FastEthernet0/1 C 10.10.30.0/24 is directly connected, FastEthernet0/2 C 10.10.40.0/24 is directly connected, Serial 0/0 | |
这里的C代表直接连接的网络,在没有其他路由选择协议加入路由表之前我们只能看到直接相连的网络。
The IP Routing ProcessIP路由选择的过程相当简单,跟你的网络大小无关,下面我们用一个例子来一步步描述当HOST-A想和另一个网络的HOST-B通信时发生的情况。
在这个例子里,一个用户在HOST-A上ping HOST-B的ip地址,让我们看看步骤:
1.Internet Control Message Protocol (ICMP)创建一个echo请求载荷(在数据字段中只有字母表的字母)
2.ICMP把这个载荷放到IP协议,产生一个数据包。这个数据包包括源ip地址,目标ip地址和一个协议字段值为01h(记住,思科喜欢用0x开头表示十六进制字符,所以这个字段看起来就是0x01)以上这些告诉了接收主机谁发送了这个数据包,用什么协议。
3.自从数据包被创建,IP检测目标的ip地址是在本地网络还是远程网络。
4.如果IP检测出这是一个往远程的请求,数据包将被送到默认网关以便把它路由到远程网络。
5.主机172.16.10.2(HOST-A)的默认网关是172.16.10.1,为了能够发送这个数据包到默认网关,路由器的Ethernet 0接口(ip地址是172.16.10.1)的硬件地址必须知道。为什么呢?因为数据包要被放下到数据链路层封装成帧然后发送到连接172.16.10.0网络的路由器接口。在LAN上的主机们只通过硬件地址来通信,弄清楚HOST-A为了和HOST-B通信必须发送数据包到默认网关的硬件地址上是很重要的。
6.接下来,如果默认网关的ip地址已经被解析为硬件地址那么ARP缓存将被检查:
·如果有,那么数据包下送到数据链路层组帧(目标的硬件地址也会随着数据包 下送)
·如果在主机的ARP缓存中没有默认网关的硬件地址,那么发送一个ARP广播在本地网络上搜索172.16.10.1的硬件地址。路由器响应这个请求并提供Ethernet 0的硬件地址,同时主机把这个地址放入ARP缓存中。同样路由器也把HOST-A的硬件地址放入它的ARP缓存。
7.自从数据包和目的硬件地址被送到数据链路层,LAN驱动程序被用来提供LAN使用的介质访问类型(在这个例子里是以太网)。然后产生一个帧,把控制信息和数据包一起封装进去。在帧里有源和目标的硬件地址加上一个Ether-Type字段来描述什么网络层协议把这个数据包下送到链路层,在这里是IP。在帧的最后是被称做Frame Check Sequence (FCS)帧校验序列的字段,这个FCS字段里有cyclic redundancy check (CRC)循环冗余检验的结果。
8.自从帧被封装完成后它被下送到物理层并通过物理介质(这个例子里是双绞线)发送,一次发送一个bit。
9.在冲突域里的所有设备接收这些bit并重建成帧。它们运行一个CRC并检查帧FCS字段里的内容,如果结果不匹配,那么这个帧将被丢弃。
·如果CRC检查匹配,那么目标硬件地址也被检查以确定是否匹配(这里指的是路由器的Ethernet 0接口的硬件地址)
·如果上面的都匹配了,接下来Ether-Type字段会被检查用来发现网络层使用的协议。
10.数据包被帧里剥离出来,剩下的帧零碎被丢弃。然后数据包被送到Ether-Type字段里(这里是IP)指定的协议上。
11.IP接收这个数据包然后检查目标ip地址,如果数据包的目标ip地址不符合接收数据包的路由器上配置的ip地址,那么路由器将在路由表里寻找目标ip网络地址
。
12.路由表里必须有一条网络172.16.20.0的条目,否则这个数据包将被马上丢弃,并且一个“destination network unreachable”的信息将被通过ICMP发送回源设备(这里是指HOST-A)。
13.如果路由器在路由表里发现一个目标网络的条目,数据包被送到离开的接口,在这个例子里,是Ethernet 1接口。
14.路由器把这个数据包交换到Ethernet 1 的缓冲器里。
15.Ethernet 1的缓冲器需要知道目标主机的硬件地址,首先它检查ARP缓存。
·如果HOST-B的硬件地址已经被解析,那么数据包和目标硬件地址被送到数据链路层组帧。
·如果HOST-B的硬件地址没有解析,路由器会发送一个ARP请求通过E1口出去来寻找172.16.20.2的硬件地址。HOST-B响应这个请求发送它的硬件地址给路由器,然后数据包和目标硬件地址一起送到链路层组帧。
16.数据链路层创建一个帧,里面包括目标和源硬件地址,Ether-Type字段,最后面是FCS字段。然后把帧送到物理层通过物理介质发送出去(one bit at a time)。
17.HOST-B接收到这个帧并执行CRC检查,如果结果符合数据帧FCS字段里面的结果那么接着检查目标硬件地址。如果都匹配了那么检查Ether-Type字段来确定数据包将被送到的网络层协议----在这里是IP。
18.在网络层,IP接收数据包并检查目标ip地址。最终所有的结果都匹配,那么检查协议字段来找出是谁产生这个载荷的。
19.当知道这个载荷是一个echo请求后载荷被送到ICMP,ICMP响应并丢弃这个数据包同时产生一个新的ehco reply载荷。
20.这时产生一个数据包,包括源和目标地址,协议字段,和载荷。现在目标设备变成HOST-A了。
21.然后IP检查数据包目标地址是在本地的设备或者是远程网络的。如果目标设备在远程网络上,数据包被发送到默认网关。
22.ARP缓存检查默认网关的地址看它是否已经被解析成硬件地址。
23.如果找到了默认网关的硬件地址,数据包和目标硬件地址被送下数据链路层组帧。
24.数据链路层组装数据包和一些信息成为数据帧,信息包括如下:
·目标和源硬件地址
·Ether-Type字段值0x0800(这个值表示IP)
·FCS字段(里面包括CRC的结果)
25.帧被送到物理层并通过物理介质(这里的介质是双绞线)发送。一次发送一个bit。
26.路由器的Ethernet 1接口接收到这些bit并重组成为数据帧,运行CRC看是否匹配数据帧里FCS字段的结果。
27.如果CRC检查没事,那么接着检查目标硬件地址。如果确定是路由器接口的硬件地址,那么从帧里剥离出数据包然后检查Ether-Type字段来决定将把数据包送到什么网络层协议。
28.网络层协议被检测出来是IP,IP接收这个数据包,运行CRC检查数据包的IP头部,
注意:IP不会象数据链路层那样完全检查CRC,它只检查头部是否有错误。 | |
然后检查目标ip地址。如果目的ip地址不符合路由器的任何接口的ip地址,那么路由器检查路由表来看是否有一条到172.16.10.0的路由条目,如果没有那么数据包就被马上丢弃。(这里有一点很多网络管理员会混淆,当一个ping失败,大多数人都会认为数据包没有到达目的主机,但是在这里我们看到,这不是绝对的,
任何一个远程路由器如果缺少返回源主机的路由条目那么这个数据包会在回程被丢弃,这里我们说一下要注意的地方,如果一个数据包在回程时丢失了,通常你会看到一个“request timed out”信息,因为这是一个未知的错误。如果象没有路径到达目的设备这样可以知道的错误,你看到的就是一个“destination unreachable”信息,这将帮助你确定问题是发生在到达目标的路上还是回来的路上。)
29.但是,路由器知道怎么到达172.16.10.0网络----通过Ethernet 0接口,所以数据包被送到Ethernet 0接口。
30.路由器检查ARP缓存来确定172.16.10.2的硬件地址是否已经解析。
31. 因为172.16.10.2的硬件地址已经在去往HOST-B的时候被缓存起来了,数据包和硬件地址被下送到数据链路层。
32.数据链路层创建一个帧,里面包含目标和源硬件地址,把IP放进Ether-Type字段,运行CRC检查这个帧,并把结果放到FCS字段里。
33.帧被下送到物理层并发送到本地网络。
34.目标主机接收到这个数据帧,运行CRC检查,检查目标硬件地址,检查Ether-Type字段。
35.IP是被指定的接收者,数据包被送到网络层的IP,IP检查协议字段发现是ICMP的载荷,然后ICMP检测到这个数据包是一个ICMP echo reply信息。
36.ICMP响应收到一个echo reply并在用户接口上显示一个exclamation point (!),然后ICMP继续尝试发送4个或者更多的echo requests到目标主机。(注意这里说的是路由器上ping的情况,这不同我们平时用电脑ping的回应。)
注意:要记住一个非常重要的知识点,当HOST-A发送一个数据包到HOST-B时,目标硬件地址使用默认网关的以太网接口硬件地址如一个路由器上的接口硬件地址。这是因为帧不能被送到远程网络上,只能送到本地网络。并且数据包去往远程网络必须通过默认网关。 | |
Testing Your IP Routing Understanding在这里我需要确定一下你是否已经明白了IP路由选择的过程,因为这是非常非常重要的, 下面我举一些简单的关于IP路由选择过程的例子来说明。
例子一:路由器A的F0/0口连接着一个LAN(局域网),LAN里面有一些主机,这里我们拿一台HOSTA来示范。路由器A和路由器B之间有一条WAN线路连接彼此的S0口,然后路由器B的F0/0口上面接有一个WEB服务器。 基于这些给出的信息请说明一下IP路由选择是怎么发生的?
1.从HOSTA发出的帧的目的地址将是路由器A的F0/0口的MAC地址。
2.数据包的目标地址将是WEB服务器网卡的ip地址。
3.在数据段的目标端口号码是80。
这个例子非常简单吧,那么让我们修改一下加入其他设备看你还能不能够找出答案。
例子二:路由器A的F0/0口接一个交换机,交换机A下接一些主机,我们拿一台HOSTA来做示范。路由器的F0/1口也接一个交换机B,这个交换机下接一台只提供HTTPS的WEB服务器。
1.HOSTA发出的帧目标地址是路由器A的F0/0口的MAC地址。
2.数据包的目标地址是WEB服务器的网卡ip地址。
3.数据段头部的目标端口号码是443。
注意到了吧,交换机并没有被当作默认网关或者目标而使用。这是因为交换机在路由选择中什么作用都没有。我估计你多少都有把交换机作为HOSTA的默认网关的想法吧,呵呵。如果有也不必在意,你只需要记住!如果你的数据包需要离开本地网络那么目标MAC地址一定是路由器的接口硬件地址。
Configuring IP Routing in Our Network当我们配置好了一个网络后(ip寻址等),现在路由器只有直接相连接的网络信息在路由表中,如果想和不直接相连的远程网络通信那么我们还需要进行IP路由选择配置。你在这章将学习下面几种不同类型的的路由选择:
·Static Routing
·Default routing
·Dynamic routing
Static Routing
当你手动地增加路由进路由表时需要使用静态路由选择。静态路由选择有优点也有缺点,但不单单是静态路由选择,其它的也是。
静态路由选择有以下优点:
·因为没有路由器CPU的开销,这意味着你可以买一个比使用动态路由选择时更便宜的路由器。
·因为没有在路由器之间占用带宽,这意味着你能够在WAN线路上节省金钱(想一想如果你的费用是按流量计算的,就象我们那该死的学校鬼店一样,你就会明白为什么可以节省金钱了)
·静态的路由选择增加了安全性,因为管理员能够自由的选择是否允许数据包路由到某个网络。
静态路由选择有以下缺点:
·网络管理员必须完整的了解整个互连网络的情况和每个路由器的连接情况以便能够正确地配置路由。
·如果互连网络中增加了新的网络,管理员必须在所有的路由器上增加路由条目------当然,是手动地。
·在大型的网络中使用静态路由选择并不可行,因为光是维护它已经足以占用你的全部工作时间。
好了,说完了,下面介绍一下你用来添加静态路由的命令和语法:
ip route [destination_network] [mask] [next-hop_address or exitinterface] [administrative_distance] [permanent]
ip route 用来创建一条静态路由的命令
destination_network 放进路由表的目标网络
mask 目标网络的子网掩码
next-hop_address 下一跳路由器的地址,这个路由器将接收数据包并转发到远程网络。通常指的是直接连接的路由器上一个接口的地址。你必须确定这个接口能够被访问,如使用ping来确定。如果你输入了错误的下一跳地址,或者那个路由器的接口不能访问,那么这条静态路由只能在路由器的配置文件中看到,但是它并不出现在路由表中。
exitinterface 如果你需要,你可以用出口接口来代替下一跳地址,但这个参数通常使用在point-to-point线路上,例如WAN。在Ethernet上使用这个参数并不能起作用,确记!!
administrative_distance 管理距离,默认情况下,静态路由的管理距离为1(甚至是0,如果你使用出口接口来代替下一跳地址的话)你能够通过使用administrative_distance参数改变默认的管理距离数值,等下我会在动态路由选择中更加详细地说明管理距离的内容的。
permanent如果出口接口被挂起,或者下一跳的地址访问不了,路由器会自动地把这条路由从路由表中删除,如果你觉得这是一种暂时的情况(指暂时不能访问)的话,你可以使用permanent这个参数来保持路由继续在路由表中存在。
下面我们来看一个简单的例子:
Router(config)#ip route 172.16.3.0 255.255.255.0 192.168.2.4
· The ip route command tells us simply that it is a static route.
· 172.16.3.0 is the remote network we want to send packets to.
· 255.255.255.0 is the mask of the remote network.
· 192.168.2.4 is the next hop, or router, we will send packets to.
然而,如果静态路由配置看起来象这样的话:
Router(config)#ip route 172.16.3.0 255.255.255.0 192.168.2.4 150
在最后的150改变了默认的管理距离administrative distance (AD),从1变成了150,在这里你只需要记住的是AD跟路由的可信赖性有关,0是最好的,255则是最差的。如果有两条同样的路由,那么AD值小的那条将被使用。
Verifying Your Configuration当你配置完了你的路由选择条目时,它们需要被确定一下。最好的办法当然是使用 show ip route 命令啦。除此之外你还可以使用Ping程序。如果能够ping通,不用说,网络当然是没问题,这证明我们配置的静态路由成功了。(另一种更好的办法是使用telnet程序从一台主机登陆到另一台,但这个我们将在第九章详细讨论,目前,还是使用ping吧)
Default Routing当在路由表中没有到达远程目标网络的路由条目时我们使用默认路由选择来发送
数据包到下一跳的路由器。你只能够在树桩网络stub network上使用默认路由选择,树桩网络指的是只有一个出口的网络。
配置默认路由,你要使用通配符(wildcard)来代替原来静态路由的网络地址和子网掩码,事实上,你可以把默认路由当作是一个使用通配符的静态路由。
Lab_C(config)#ip route 192.168.30.0 255.255.255.0 192.168.40.1 //静态路由
Lab_C(config)#ip route 0.0.0.0 0.0.0.0 192.168.40.1 //默认路由,仔细看看区别。
当你使用show ip route来显示路由表时,你会发现有一个S*加在路由条目的前面来指示这是一个默认路由。
Lab_C#sh ip route
Gateway of last resort is 192.168.40.1 to network 0.0.0.0
C 192.168.50.0 is directly connected, FastEthernet0/0
C 192.168.40.0 is directly connected, Serial0/0
S* 0.0.0.0/0 [1/0] via 192.168.40.1
我们也能够使用另外一种格式来添加默认路由,
Lab_C(config)#ip route 0.0.0.0 0.0.0.0 s0/0
这条命令告诉路由器当路由表中没有任何合适的路由条目时,直接把数据包从本路由器的serial 0 接口发送出去。你能够选择使用本路由器的出口接口或者下一跳的路由器的接口ip地址来完成相同的工作。
上面我们也提到过当你在配置路由时使用出口接口来代替下一跳地址的话,你在路由表中只能看到使用出口接口的默认路由条目的管理距离是0,这是因为使用下一跳地址的默认路由条目的管理距离是1。由于AD越小越好的原理,使用出口接口的路由将被使用,而使用下一跳地址的路由将被代替而不出现在路由表中。
还有要注意的是上面显示的路由表中出现了gateway of last resort is now set的提示。当使用默认路由选择时这是一个必须知道的命令:ip classless。
所有的思科路由器都是使用基本地址的,这意味着它们认为每个接口都使用默认的子网掩码。当一个路由器接收到一个目标是远程子网的数据包而在路由表中没有到达目标的路由条目那么默认情况下这个数据包将会被丢弃。如果你使用了默认路由,你必须使用ip classless命令,因为在路由表中有可能没有到达远程子网的条目。如果你的路由器的IOS版本是12.x,那么ip classless命令默认情况下已经启用。如果你的IOS版本低于12.x,那么你必须在使用默认路由的情况下启用
ip classless命令。注意,ip classless命令是在全局模式下输入的。
还有另一个命令你能够用来配置“gateway of last resort”的,ip
default-network,现在有三种方法来提供同样的功能-----增加一个最后可用的网关(a gateway of last resort):
Gateway(config)#ip route 0.0.0.0 0.0.0.0 217.124.6.1
Gateway(config)#ip route 0.0.0.0 0.0.0.0 s0/0
Gateway(config)#ip default-network 217.124.6.0
虽然它们完成的任务是一样的,但是有一点小小的差别,前面已经说过了,因为使用出口接口的路由条目的管理距离(AD)是0,而另外两个的AD是1,所以它将被优先使用。
Dynamic Routing动态路由选择使用一些路由选择协议来自动发现网络并更新路由表。明显,这比使用静态路由或者默认路由要容易得多,但是它会增加路由器CPU的使用和占用你网络连接的带宽。一个路由选择协议定义了一些规则的集合,它被一个路由器用来和邻居路由器交换路由信息。
下面我们将要学习的两种路由选择协议是Routing Information Protocol (RIP) 和Interior Gateway Routing Protocol (IGRP).
注意:Enhanced Interior Gateway Routing Protocol (EIGRP)是一个增强型的IGRP,它是距离向量协议,并且它是思科的私有协议,Open Shortest Path First (OSPF)是一个链路状态协议,并且它是公有协议,我们将在下一章,也就是第六章更深入地学习它们。 | |
在互连网络中有两种类型的路由选择协议:内部网关协议(IGP)和外部网关协议(EGP)。
IGP被用来在同一个自治系统autonomous system(AS)中的路由器间交换路由信息。
AS:在同一个管理域下的网络集合。通常,在一个AS里的所有路由器共享相同的路由信息。
EGP被用来在不同的AS间交换信息。
Routing Protocol Basics有一些关于路由选择协议的重要的知识在你深入学习RIP之前你必须弄清楚。
特别是你要知道管理距离,三种不同种类的路由选择协议,以及路由选择循环。
Administrative Distances
administrative distance(AD)被用来评价路由信息的可信赖性。它的值从0到255,0是最好的,而255意味着将没有流量通过这条路由路径。
如果一个路由器接收到两个去往同样网络的路由更新,首先路由器检查AD,AD值低的那条路由将被放进路由表。
如果两个路由更新都有相同的AD值呢?那么路由器接着检查度metric(例如hop count跳跃记数或者线路带宽bandwidth等)。度值低的那条路由将被放入路由表中。
还有,如果两个路由更新都有相同的AD值和度值呢?那么路由器将进行load-balance(负载平衡),意思就是都把数据包发送到这两条线路上,大家见者有份。
表5.2显示了一些路由协议的默认管理距离。
如果你有一条静态路由,一条RIP路由,和一条IGRP路由同时指向同一个网络,默认情况下使用静态路由,因为静态路由的AD值为1,比RIP和IGRP的AD都要低。
Routing Protocols有三种不同种类的路由选择协议:
Distance vector 距离向量协议通过距离来判断到达远程网络的最好路径(路由),当一个数据包从本路由器出发,每经过一个路由器就叫做一跳(a hop),到达目标网络的路由的跳数最终决定哪条路由最好,当然啦,跳数越少越好。RIP和IGRP都是距离向量协议。它们发送整个路由表到直接相连的邻居路由器上!!
Link state 链路状态协议,通常也叫做最短路径优先(shortest-path-first)协议,每个路由器建立三个单独的表,一个用来留意邻居路由器的,叫做邻居表;一个用来检测整个网络拓扑结构,当然就叫做拓扑表了,还有最后一个就是路由表了。链路状态路由协议比任何距离向量路由协议更加清楚整个网络的结构。OSPF是一个IP路由选择协议,完全基于链路状态。链路状态协议发送包含自己本身连接的路由更新包到网络上的所有路由器!!而距离向量协议只发送更新包到直接相连的路由器。
Hybrid 混合型协议同时使用距离向量和链路状态。如EIGRP。
没有一个固定的规则让你在每个地方怎么配置路由选择协议,你只能根据实际情况来选择,如果你明白了路由选择协议间的不同,相信你能够在坚实的基础上很好的完成工作的。
Distance-Vector Routing Protocols
距离向量路由选择的算法是把整个路由表的内容都发送到邻居路由器上,路由器结合接收到的路由表和原来自己的路由表来组成新的路由表。通常这被叫做“routing by rumor”,因为一个路由器接收和更新从邻居路由器发送来的关于远程网络的信息而不是自己亲自去发现,跟我们日常生活里说的谣言类似吧,呵呵。
可能有这种情况,有多条到达一个网络的连接,这样的话首先检查AD,AD相同那么路由协议就使用另外的度来决定到达该网络的最好的路由。
RIP只使用HOP COUNT来决定到达一个网络的最好路径,如果RIP发现有多于一条的到相同远程网络的连接而且跳数相同,那么它将自动执行一个自动循环的负载均衡。RIP最大能够执行六条等价的负载均衡连接,默认情况下是四条。
然而,这种类型的路由选择度会发生一个问题,当到一个远程网络的两条连接线路有相同的跳数但是带宽不同,一条连接的带宽是56k另一条是T1线路(带宽1.544M),你当然想选择T1线路作为路由路径啦,谁都想网速快些不是吗?但是,因为RIP只使用跳数来作为衡量度,所以这两条线路被认为是等价的!这个小小的障碍一般叫做针孔堵塞(pinhole congestion)
当路由表完成时,它里面包含了互连网络里所有网络的信息,这个过程叫做聚合完成(converged),当路由器正在聚合(converging)的时候,没有其它数据可以传递,所以,快速聚合是一个需要认真考虑的问题。事实上,RIP就有这样一个问题------它的聚合时间很慢。
Routing Loops
距离向量路由选择协议通过周期性地广播路由更新到所有活动接口以明了互连网络的变化。这个广播包括一个完整的路由表。除开要占用额外的CPU处理时间和带宽外,这是一个不错的做法。但是当碰到如停电这类故障,真正的问题发生了,由于距离向量协议的聚合时间慢,这将导致路由表的不一致和路由循环的产生。
产生路由循环是因为路由器不是同时发送它们的路由更新的,虽然看起来时间差距很小很小,但还是会产生问题。这里我们用一个例子来说明:
我们假设Network5的接口故障了,其他所有的路由器是通过RouterE来了解Network5的情况的。在图里的Router A有一条通过Router B到达Network5的路由。当Network5故障了,RouterE会告诉RouterC,这导致RouterC停止通过RouterE路由到Network5。但是这个时候RouterA,B,D还不知道Network5故障了,所以它们继续发送更新信息,然后RouterC将发送它的路由更新信息给RouterB,告诉RouterB:Network5出故障了,你不要再往我这里通过了。这个时候~RouterA和RouterD仍然没有接收到最新的信息,这导致了在RouterA,D的路由表里Network5仍然是有效的。问题就发生在当RouterA每三十秒发送一次的“Hello, I’m still here—these are the links I know about”信息(RIP每三十秒发送一次更新),这个更新里包括了能够到达Network5的信息。现在RouterB和RouterD接收到了RouterA的更新并认为Network5又能够访问了,这些关于Network5能够访问的更新信息在RouterA,B,D之间不断发送,这就产生了一个路由循环-----你怎么样才能解决这个问题呢?
Maximum Hop Count
路由循环通常被描述为“counting to infinity”无限记数,这是由于错误的信息被广播传播到互连网络上引起的。如果没有一些干涉,那么当一个数据包通过一个路由器的时候hop count将增加到无穷大。
解决这个问题的一种方法是定义一个maximum hop count最大跳数。RIP的最大跳数是15,任何需要16跳(经过16个路由器)的网络都被认为是不可到达的。换句话说,当一个路由循环了15次以后,那么Network5就被认为是不可到达。在这里,最大跳数控制了一个路由条目在路由表中的有效性。虽然这个办法能够解决问题,但是路由循环依然存在,数据包还是要循环一段时间,在经过16次后才能作出决定,明显,这降低了工作效率。
Split Horizon
另一个解决路由循环的办法叫split horizon水平分割。水平分割能够在一个距离向量的网络中减少错误的路由信息和路由所带来的开销,它通过制定强行的规则来使得路由信息不能从接收到的方向返回去。换句话说,路由协议区分路由更新是从哪个接口学习到的,然后路由器通告更新的时候就不发送到这个接口了。这能够阻止RouterA发送从RouterB学习到的路由到RouterB去。
Route Poisoning
另一种避免发生无限记数问题的方法是route poisoning,这个名词可以翻译成路由破坏,在上面的图中,当Network5故障了,RouterE启动路由破坏来通告Network5的跳数为16或者不可到达。这个到Network5的被破坏的路由使得RouterC不会发送错误的路由更新了。当RouterC从RouterE那里接收到路由破坏,它发送一个更新叫poison reverse毒性逆转的回到RouterE,这样保证了这个网段里的所有路由器都能够接收到这条被破坏的路由信息以避免产生路由循环。
使用route poisoning和split horizon能够构建一个更加可靠更加有弹性的网络,它们使得我们能够更好地避免路由循环。但是我们需要知道更多的关于在距离向量网络中防止路由循环的内容,所以继续往下读吧。
Holddowns
抑制时间(holddown)能够阻止因为一条路由暂时无效而引起的路由更新信息,比如起用一条路由条目然后又禁止它,一般这叫做摇摆(flapping)。通常这发生在当一条线路丢失连接然后又重新连接的情况下(想象一下,当你拔掉一条网线过一会又重新插上),如果没有一个能稳定摇摆的办法,那么网络将永远不会聚合,这样,一个摇摆的接口往往能够使你的整个网络瘫痪。
抑制时间通过指定时间来防止路由变化太快导致的摇摆,这使得网络在发现下一条更好的路由前稳定下来。它告诉路由器一个指定的时间周期,在这个时间周期内的失效路由继续保存在路由表内,防止了别的路由器过早地接收到一些已经失效的路由条目。
当一个路由器从邻居路由器那里接收到一个更新指出原来路由表中可以访问网络的一条路由现在失效了,那么抑制时间开始启动,这时如果从邻居路由器发送来一个新的更新里面包含比原来路由更好的路由,那么抑制时间就会取消。但是如果一个新的更新里面包含的是和原来路由等效或者更差的路由,那么在抑制时间过期前这个更新将被忽视,抑制时间继续记时。这样可以使得聚合前有更多的时间使网络稳定下来。
Holddowns使用触发更新机制来重设抑制时间以发现一个邻居路由器发生了变化。不象从邻居路由器发送的更新信息,触发更新机制要创建一个全新的路由更新,比如你加入了一个新的路由器啊加入了一个新的网络啊,这时触发更新机制就会重设抑制时间以检测互连网络的变化。
在三种情况下触发更新机制会重设抑制时间:
·抑制时间过期了
·另外一个包含更好路由的更新
·刷新时间(flush time)到了,刷新时间是当一个路由条目在路由表中删除前所保持的时间,当刷新时间到期了,那么这条路由就从路由表中被删除掉。
Routing Information Protocol (RIP)路由信息协议(RIP)是一个完全的距离向量路由选择协议,它每30秒从所有活动的接口发送整个路由表出去。RIP只使用跳数(hop count)来检测到达远程网络的最好的路由,默认情况下跳数最大可以达到15,当16的时候就意味着不可到达。RIP在小型网络中能够很好的工作,但是在大型的网络中就不怎么行了,比如有速度较慢的WAN连接在网络中或者网络中有许多的路由器。
RIP版本1只能进行基本类型的路由选择(classful routing),这意味着网络中的设备只能使用默认的子网掩码。这是因为RIP版本1不能在路由更新中包含子网掩码信息。
RIP版本2提供了一些叫做前缀路由选择(prefix routing)的新东西,这使得RIPV2能够在路由更新中发送子网掩码的信息,通常这种叫做无类路由选择(classless routing)。
下面我们介绍RIP的时间类型和RIP的配置。
RIP Timers
RIP使用四种不同类型的时间来调节性能。
·Route update timer:设置一个周期性的路由更新时间,通常都是30秒,每30秒发送一次完整的路由表副本到所有邻居路由器上。
·Route invalid timer:在一个时间长度内路由器没有收到关于一条路由的任何更新,那么路由器判断这条路由失效。这个时间通常是180秒。路由器将在180秒后发送一条信息通知所有的邻居路由器该路由失效。
·Holddown timer:这设置了路由信息被抑制的时间,当路由器接收到一个更新指出一条路由失效了那么路由器将进入抑制状态,这个状态一直延续直到接收一个有更好度的路由更新包或者直到抑制时间过期。默认抑制时间也是180秒。
·Route flush timer:设置一个时间,当一条路由经过多长时间后从路由表中删除,通常是240秒。在路由被删除之前,路由器通知它的邻居路由器们这条路由即将死亡。这个flush timer必须要比invalid timer时间要长,因为要给路由器足够的时间来告诉邻居:我这里有一条的路由要删除了我的路由表要更新了。
Configuring RIP Routing
RIP有一个默认的管理距离120,静态路由有一个默认的管理距离1。当你之前设置有静态路由时,RIP的路由信息将不被传播,所以当你需要配置RIP时,要确定是否有同样目的的静态路由被使用,如果有,请先移去静态路由配置。
移去静态路由使用no ip route命令。如:
Lab_A(config)#no ip route 192.168.30.0 255.255.255.0 192.168.20.2
这里有一点要注意:如果你没有移去静态路由,那么RIP的信息就绝不会在路由表中出现,但是!!!RIP依然在运行着,这将耗费你许多的CPU处理时间和宝贵的带宽。
配置RIP路由协议很简单,只需要用到两个命令。
在全局模式下用router rip启用RIP,然后在进入RIP模式后使用network命令来告诉路由协议什么网络将被通告。举一个例子:
Lab_A(config)#router rip
Lab_A(config-router)#network 192.168.10.0
Lab_A(config-router)#network 192.168.20.0
Lab_A(config-router)#^Z
Lab_A#
这里要注意的地方是:你只需要把路由器直接相连的网络进行通告就可以了,记住!只是直接相连的就可以了。至于那些没有直接相连接的网络怎么到达呢?呵呵,这就是RIP的工作了,它会自动发现那些远程网络并写入到路由表中。
就这么简单,只需要两到三条命令就能使你的工作变得更容易更轻松,不是吗?然而,不要忘记了轻松的代价是额外的CPU处理时间和带宽消耗。
配置RIP和IGRP都是使用基本类型的网络地址,因为它们哥们俩是classful routing protocol嘛,所以在网络上所有的设备的子网掩码都必须相同,举个例子说明一下你就会明白了,当你有三个子网172.16.10.0,172.16.20.0,172.16.30.0要使用RIP协议,那么在配置的时候你只需要输入network 172.16.0.0就可以了。如果是C类的地址呢?如192.168.1.0,192.168.2.0,192.168.3.0因为C类地址使用前三个八位元组来表示网络地址,所以你要使用RIP通告这三个网络的时候就得network 192.168.1.0,network 192.168.2.0,network 192.168.3.0才行。一个小问题:如果是A类地址呢?自己想想该用什么格式来通告。
Verifying the RIP Routing Tables当你在每个路由器上配置好了RIP后,现在路由表里有关于直接相连的路由器的路由信息了。我们用show ip route命令来看一下。
Lab_A#sh ip route
[output cut]
R 192.168.50.0 [120/2] via 192.168.20.2, 00:00:23, Serial0/0
R 192.168.40.0 [120/1] via 192.168.20.2, 00:00:23, Serial0/0
R 192.168.30.0 [120/1] via 192.168.20.2, 00:00:23, Serial0/0
C 192.168.20.0 is directly connected, Serial0/0
C 192.168.10.0 is directly connected, FastEthernet0/0
Lab_A#
这里路由条目前面的R代表着RIP的路由,C是直接连接的线路。[120/1]则代表着管理距离120和到达远程网络的跳数1。当一条路由显示为[120/15]时,那么这条路由所指向的网络将不可到达,因为当路由器发送更新到一个邻居路由器时,跳数需要增加1,而RIP的最大跳数仅为15。
虽然RIP可以在我们的小网络中工作得很好,但是这不意味着RIP在所有的环境中都能使用,因为这个技术有一个最大跳数仅仅是15(16意味着不可到达),和每隔30秒发送一次包含整个路由表的更新。因为这两个原因所以如果在大型网络中使用RIP那将造成巨大的破坏。
Holding Down RIP Propagations有时候可能你并不希望你的RIP到处通告你的LAN或者WAN的网络信息。没必要把你的网络情况通告到因特网上,你说是吗?
这里有一些办法可以帮助你阻止RIP的更新在你的LAN和WAN中传播。最容易的一个就是通过使用passive-interface命令。这个命令使得RIP的更新广播不会从指定的接口发送出去,但是要注意!!这个不能发送更新的接口还是能够照样接收更新的!看看实际操作:
Lab_A#config t
Lab_A(config)#router rip
Lab_A(config-router)#network 192.168.10.0
Lab_A(config-router)#passive-interface serial 0/0
上面的命令使得RIP的更新信息不能从s0/0口传播出去,但是s0/0口依然能够接收RIP更新信息。
REAL WORLD SCENARIO
Should we really use RIP in an internetwork?
你作为一个公司顾问被雇佣来在公司快速增长的网络上安装一系列的cisco路由器,该公司有一些旧的Unix路由器想保留在网络中,这些老路由器除了RIP外什么路由协议都不支持,我估计你必须在整个网络中使用RIP。
好,真的非要这样做吗?答案是你能够在那些旧的路由器上使用RIP,但是你真的不需要在整个互连网络中使用RIP。
因为你能够使用redistribution重新分配技术来把一种类型的路由协议转换到另一种不同的路由协议。这意味着你可以在旧的路由器上使用RIP而在其他的路由器上使用EIGRP。这种办法能够防止RIP的路由信息发送到整个网络而吞吃你那宝贵的带宽。 | |
RIP Version 2 (RIPv2)在你准备学习距离向量的思科私有的路由选择协议IGRP之前,让我们花一小点时间来介绍一下RIPv2。
RIP version 2跟RIP version 1非常非常相象,废话,本来就是同一个协议不同版本而已嘛。它们周期性发送整个路由表到所有活动接口,时间类型和路由循环解决方案也一样如holddown timer和split horizon等。也有相同的管理距离120。
但是,两者之间有一些非常重大的不同之处使得RIPv2比RIPv1更加具有灵活性。这里要加插一个建议,虽然前面没有很明确地说明,但是RIP是一个开放性的标准,所以你能够在不同的厂商的路由器上运行RIP,当然OSPF也行,不过这是到后面才介绍的,这里只说RIP。表5.3介绍了RIP两个版本间的异同:
RIPv2不象RIPv1,它是一个无类路由选择协议(虽然也能够象RIPv1那样配置基本类型),无类路由选择协议意味着在路由更新中包含了子网掩码的信息在内,这样RIPv2就可以支持Variable Length Subnet Masks (VLSMs)可变长度子网掩码,类似于网络边界的汇总。另外,RIPv2还能够支持不连续的网络结构,关于不连续的网络结构将在第六章详细说明。
配置RIPv2非常直接,这里是一个例子:
Lab_C(config)#router rip
Lab_C(config-router)#network 192.168.40.0
Lab_C(config-router)#network 192.168.50.0
Lab_C(config-router)#version 2
看到了吗?跟RIPv1版本相比较只多了一个version 2的说明。
Interior Gateway Routing Protocol (IGRP)内部网关协议(IGRP)是一个思科私有的距离向量协议,“私有”意味着什么呢?这表示如果你在你的网络中使用IGRP,那么你的所有路由器都必须是思科生产的。思科创建了这个协议以克服RIP的某些缺点。
IGRP有一个默认的最大跳数(maximum hop count)是100,而最高能够达到255。这对于更大一点的网络非常有帮助,并且也解决了由于RIP的最大跳数只到15而产生的问题(最大跳数15意味着你在网络中只能最多使用15台路由器,而在大型网络中这个路由器的数字远远超过了15)。
IGRP同样使用一个不同于RIP的度。IGRP使用线路带宽(bandwidth)和延时(delay)作为默认的度来决定到达一个网络最好的路由。这种度叫做混合度(composite metric),虽然可靠性(Reliability),负载(load)和最大传输单元(MTU)也能作为度,但是默认情况下并没有使用。
配置IGRP和RIP的主要不同之处在于IGRP使用autonomous system(AS)自治系统号码,所有的路由器必须在相同的自治系统中才能共享路由信息。
表5.4显示了一些你不能在RIP中找到的IGRP的特点:
IGRP Timers
IGRP使用下列时间类型来控制性能:
·Update timers:指定了发送路由更新信息的时间频率,默认是90秒。
·Invalid timers:说明了多长时间内没有接收到一条路由的更新就认为该路由无效,默认是update timer的三倍,也就是90*3=270秒。
·Holddown timers:无效路由的保持时间,默认是update timer的三倍再加10,也就是90*3+10=280秒。
·Flush timers:说明了多长时间后一条路由将被从路由表中删除。默认是update timer的七倍,也就是说,如果update timer是默认的90秒,那么90*7=630秒后将把路由从路由表中删除。
Configuring IGRP Routing
配置IGRP的命令跟配置RIP的很象,除了一点重要的不同之外:你要使用一个自治系统(AS)号码。下面是一个例子:
Lab_A#config t
Lab_A(config)#router igrp 10
Lab_A(config-router)#network 192.168.10.0
看到了吗?除了多加了一个AS号码外,跟RIP的配置基本一样。在同一自治系统中的路由器必须使用相同的AS号码来交换路由信息,如果使用了不同AS号码,那么其中的路由器将不能相互通信。AS的号码能够从1到65535。
Lab_A(config)#router igrp ?
<1-65535> Autonomous system number
还有你一定要记住的是IGRP也是一个classful routing protocol。配置通告网络时你只需要输入基本的网络地址就可以了。(注意,网络地址是指不同类型如A,B,C类ip地址的网络地址部分)
IGRP能够在6条不等价的线路上做负载均衡,RIP只能在等价的线路(相同跳数)上做负载均衡。IGRP使用带宽来决定是否进行负载均衡,在不等价的线路上进行负载均衡,使用variance命令来控制在最好的度和最差的度的线路间调节。因为这是CCNP中学习的内容,所以这里我们就不多作介绍了。
Verifying the IGRP Routing Tables当路由协议配置好了之后,你需要用show ip route命令来检查一下。
因为IGRP使用的管理距离(AD)是100,而RIP的是120,所以即使同时在路由器上运行IGRP和RIP,你在路由表中也只能看到IGRP的路由条目,但是RIP依然在运行,在占用你的资源,所以建议不使用RIP时最好把它关掉。使用no router rip命令即可。
Lab_A#sh ip route
[output cut]
I 192.168.50.0 [100/170420] via 192.168.20.2, Serial0/0
I 192.168.40.0 [100/160260] via 192.168.20.2, Serial0/0
I 192.168.30.0 [100/158360] via 192.168.20.2, Serial0/0
C 192.168.20.0 is directly connected Serial0/0
C 192.168.10.0 is directly connected, FastEthernet0/0
I代表着IGRP路由,在[100/160360]中的100是管理距离,160360则是混合度,记住!度越低的路由就越好。
还有就是混合度默认情况下是通过计算线路带宽和延时得出的。线路延时也能够跟接口累积延时(cumulative interface delay)有关。
If RIP isn’t good for my network, then I should use IGRP, right?
这个问题的答案是:“Well, no, not really.” 我知道我已经说过了RIP不适合大型网络上使用,但是这不意味着在小型的网络中你就一定能够用IGRP来取代RIP。
你需要在CCNA的考试中弄明白RIPv1, RIPv2, 和IGRP是怎样工作的。同样在你的实际生产工作环境中也是如此。当你明白了这几种路由协议的具体内容,你就能够作出一个基于事实的决定而不是凭猜测来选择哪一个是当你面对具体环境时使用的协议。
呵呵,如果我告诉你将不能使用RIP或者IGRP呢?当你在一个全部是思科路由器的环境中,答案是你可以使用EIGRP来代替IGRP。这是一个IGRP的增强型协议并能比IGRP更好的完成工作。
如果你在一个由不同厂商生产的不同路由器混合组成的环境下,或许你会选择OSPF,GOOD!我会在下一章第六章里详细介绍EIGRP和OSPF。
都说完了,但是,我并没有规定你具体要使用什么协议,因为每一个网络都不相同,但是我建议如果在你能够使用EIGRP或者IGRP或者RIP的时候,请选择EIGRP。故事完~~ | |
Troubleshooting IGRP
检测IGRP的故障很简单,首先你要注意不能通信的路由器上配置的AS号码是否相同,如果不同请修改。然后再检查一下网络地址有否写错就可以了。
Verifying Your Configurations当你完成配置或者你认为你已经完成配置的时候,检查是非常重要的。
你能够用下面一些命令来检查你的思科路由器上配置的routed或者routing协议。
·show ip route
·show protocols
·show ip protocols
·debug ip rip
·debug ip igrp events
·debug ip igrp transactions
show ip route:这条命令在整章书里都有使用,我想就不用多说了吧,作用是显示路由表的路由条目。
show protocols:这条命令非常有用因为它显示了所有的routed协议和在哪个接口上启用。
Lab_B#sh protocol
Global values:
Internet Protocol routing is enabled
FastEthernet0 is up, line protocol is up
Internet address is 192.168.30.1/24
Serial0/0 is up, line protocol is up
Internet address is 192.168.20.2/24
Serial0/1 is up, line protocol is up
Internet address is 192.168.40.1/24
Lab_B#
如果在路由器上配置有IPX或者AppleTalk协议,那么网络地址也会相应的变化。
show ip protocols:这条命令显示了你已经在路由器上配置的routing协议。从下面的例子中你可以看到RIP和IGRP都在路由器上运行,但只有IGRP的路由出现在路由表中,因为IGRP有更低的AD。
Lab_B#sh ip protocols
Routing Protocol is "rip"
Sending updates every 30 seconds, next due in 6 seconds
Invalid after 180 seconds, hold down 180, flushed after 240
Outgoing update filter list for all interfaces is
Incoming update filter list for all interfaces is
Redistributing: rip
Default version control: send version 1, receive any version
Interface Send Recv Key-chain
FastEthernet0 1 1 2
Serial0/0 1 1 2
Serial0/1 1 1 2
Routing for Networks:
192.168.10.0
192.168.20.0
192.168.30.0
Routing Information Sources:
Gateway Distance Last Update
192.168.40.2 120 00:00:21
192.168.20.1 120 00:00:23
Distance: (default is 120)
这里你可以看到路由协议使用的时间值。RIP的默认发送更新时间是30秒,还有路由器直接相连的所有网络,最后是默认的管理距离120。
接下来的输出是IGRP的信息,默认更新时间是90秒,默认管理距离是100。
Routing Protocol is "igrp 10"
Sending updates every 90 seconds, next due in 42 seconds
Invalid after 270 seconds, hold down 280, flushed after 630
Outgoing update filter list for all interfaces is
Incoming update filter list for all interfaces is
Default networks flagged in outgoing updates
Default networks accepted from incoming updates
IGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
IGRP maximum hopcount 100
IGRP maximum metric variance 1
Redistributing: eigrp 10, igrp 10
Routing for Networks:
192.168.10.0
192.168.20.0
192.168.30.0
Routing Information Sources:
Gateway Distance Last Update
192.168.40.2 100 00:00:47
192.168.20.1 100 00:01:18
Distance: (default is 100)
上面的输出信息包括了AS号码,时间类型值,已经通告的网络和AD。
DEBUG命令这里我们不作介绍,说明一下如果你想关闭调试输出,你可以使用undebug all或者no debug all命令。
Summary本章详细讨论了IP路由选择,这是非常重要的内容,请你确定你已经能够弄懂本章我们所介绍的一些基础知识。因为在思科的路由器上无论你想做任何事情通常都需要配置和运行某种IP路由选择协议。
你已经学习了在路由器和主机之间怎么一个数据包组帧发送,基于这里我们学习配置静态路由并讨论了IP使用管理距离(administrative distance)来决定怎么通过一条路由达到目标网络,如果你的网络是树桩网络stub network,你能够配置默认路由,也就是在路由器上设置一个最后的出口网关(the gateway of last resort)。
当我们完成了静态路由的配置之后,我们继续学习动态路由选择,在那里我们讨论了关于RIP,IGRP的时间类型和防止路由循环的解决方法。然后我们学习了怎样在我们的网络上配置RIP和IGRP。
自从我们完成了RIP和IGRP的配置后,我们也学到了通过使用show ip route, show ip protocols命令来检查我们的配置是否正确,当然还有一些debug的命令。