路由器的工作不外乎两个,一是路径选择,二是数据转发。进行数据转发相对容易一些,难的是如何判断到达目的网络的最佳路径。所以,路径选择就成了路由器最重要的工作。
许多路由协议可以完成路径选择的工作,常见的有RIP,OSPF,IGRP和 EIGRP协议等等。这些算法中,我们不能简单的说谁好谁坏,因为算法的优劣要依据使用的环境来判断。比如RIP协议,它有时不能准确地选择最优路径,收敛的时间也略显长了一些,但对于小规模的,没有专业人员维护的网络来说,它是首选的路由协议,我们看中的是它的简单性。
如果你手头正有一个小的网络项目,那么,就让我们来安排一个计划,30分钟读完本文(一读),20分钟再细看一遍本文提及的命令和操作方法(二读),用30分钟配置网络上的所有路由器(小网络,没有几台路由器可以配的),最后20分钟,检查一下网络工作是否正常。好了,一百分钟,你的RIP网络运转起来了。就这么简单,不信,请继续往下看。
一、RIP是什么
RIP(RoutingInformationProtocols,路由信息协议)是使用最广泛的距离向量协议,它是由施乐(Xerox)在70年代开发的。当时,RIP是XNS(XeroxNetworkService,施乐网络服务)协议簇的一部分。TCP/IP版本的RIP是施乐协议的改进版。RIP最大的特点是,无论实现原理还是配置方法,都非常简单。
度量方法
RIP的度量是基于跳数(hopscount)的,每经过一台路由器,路径的跳数加一。如此一来,跳数越多,路径就越长,RIP算法会优先选择跳数少的路径。RIP支持的最大跳数是15,跳数为16的网络被认为不可达。
路由更新
RIP中路由的更新是通过定时广播实现的。缺省情况下,路由器每隔30秒向与它相连的网络广播自己的路由表,接到广播的路由器将收到的信息添加至自身的路由表中。每个路由器都如此广播,最终网络上所有的路由器都会得知全部的路由信息。正常情况下,每30秒路由器就可以收到一次路由信息确认,如果经过180秒,即6个更新周期,一个路由项都没有得到确认,路由器就认为它已失效了。如果经过240秒,即8个更新周期,路由项仍没有得到确认,它就被从路由表中删除。上面的30秒,180秒和240秒的延时都是由计时器控制的,它们分别是更新计时器(UpdateTimer)、无效计时器(InvalidTimer)和刷新计时器(FlushTimer)。
路由循环
距离向量类的算法容易产生路由循环,RIP是距离向量算法的一种,所以它也不例外。如果网络上有路由循环,信息就会循环传递,永远不能到达目的地。为了避免这个问题,RIP等距离向量算法实现了下面4个机制。
水平分割(splithorizon)。水平分割保证路由器记住每一条路由信息的来源,并且不在收到这条信息的端口上再次发送它。这是保证不产生路由循环的最基本措施。
毒性逆转(poisonreverse)。当一条路径信息变为无效之后,路由器并不立即将它从路由表中删除,而是用16,即不可达的度量值将它广播出去。这样虽然增加了路由表的大小,但对消除路由循环很有帮助,它可以立即清除相邻路由器之间的任何环路。
触发更新(triggerupdate)。当路由表发生变化时,更新报文立即广播给相邻的所有路由器,而不是等待30秒的更新周期。同样,当一个路由器刚启动RIP时,它广播请求报文。收到此广播的相邻路由器立即应答一个更新报文,而不必等到下一个更新周期。这样,网络拓扑的变化会最快地在网络上传播开,减少了路由循环产生的可能性。
抑制计时(holddowntimer)。一条路由信息无效之后,一段时间内这条路由都处于抑制状态,即在一定时间内不再接收关于同一目的地址的路由更新。如果,路由器从一个网段上得知一条路径失效,然后,立即在另一个网段上得知这个路由有效。这个有效的信息往往是不正确的,抑制计时避免了这个问题,而且,当一条链路频繁起停时,抑制计时减少了路由的浮动,增加了网络的稳定性。
即便采用了上面的4种方法,路由循环的问题也不能完全解决,只是得到了最大程度的减少。一旦路由循环真的出现,路由项的度量值就会出现计数到无穷大(CounttoInfinity)的情况。这是因为路由信息被循环传递,每传过一个路由器,度量值就加1,一直加到16,路径就成为不可达的了。RIP选择16作为不可达的度量值是很巧妙的,它既足够的大,保证了多数网络能够正常运行,又足够小,使得计数到无穷大所花费的时间最短。
邻居
有些网络是NBMA(Non-BroadcastMultiAccess,非广播多路访问)的,即网络上不允许广播传送数据。对于这种网络,RIP就不能依赖广播传递路由表了。解决方法有很多,最简单的是指定邻居(neighbor),即指定将路由表发送给某一台特定的路由器。
RIP的缺陷
RIP虽然简单易行,并且久经考验,但是也存在着一些很重要的缺陷,主要有以下几点:
过于简单,以跳数为依据计算度量值,经常得出非最优路由;
度量值以16为限,不适合大的网络;
安全性差,接受来自任何设备的路由更新;
不支持无类IP地址和VLSM(VariableLengthSubnetMask,变长子网掩码);
收敛缓慢,时间经常大于5分钟;
消耗带宽很大。
二、路由器怎么配
路由器本身就是一台有多个网络接口的计算机,同普通计算机一样,它也有中央处理器(CPU)、系统主存(RAM)和只读存储器(ROM)等部件。
除此之外,一个很重要的部分是它的网络接口(Interface),为了连结不同类型的网络,路由器的网络接口种类繁多,比如应用在局域网中的以太、快速以太、令牌环接口,应用于广域网的V.35、RS232、ISDNBRIPRI接口等等。
路由器的外存储器主要有两种:NVRAM(Non-VolatileRAM,非易失性RAM)和Flash(闪存)。NVRAM存储路由器的配置文件,Flash用于存放操作系统IOS(InternetOperatingSystem)。
配置模式
CISCO路由器最基本的配置模式有两种:用户(user)和特权(privileged)。在用户模式下,只能显示路由器的状态,特权模式还可以更改路由器的配置。
特权模式下可以进入安装(setup)模式、全局配置(globalconfig)模式,局部配置(subconfig)模式。
安装模式提供菜单提示,引导用户进行路由器的基本配置。新路由器第一次启动后,自动进入安装模式。
全局配置模式中可以改变路由器的全局参数,如主机名、密码等等。
局部配置改变路由器的局部参数,例如某一个网络接口的配置、某一种路由协议的配置等等。
配置方法
路由器的配置可以使用多种方法,下面这五种是最常见的:
使用超级终端类的工具通过串行口登录控制台(consoleport)。
将调制解调器连结至路由器的辅助口(auxiliaryport),远程拨号登录控制台。
远程登录(telnet)至路由器的某一IP地址,通过VTY(virtueterminalline,虚拟终端)方式访问路由器。
编辑配置文件,并通过TFTP上传至路由器。
通过网络管理软件(networkmanagementsystem)远程设置路由器参数。
安装路由器
假设我们的项目网络中只有三台路由器。它们放在北京、上海和天津,名字分别叫testBJ、testSH和testTJ。我们采用B类保留IP地址172.16.0.0,共划分了四个子网172.16.1.0、172.16.2.0、172.16.3.0和172.16.4.0,子网掩码均为255.255.255.0。
基本配置
将包装中附带的串行电缆一端连接到Beijing路由器的console口上,另外一端连接到计算机的com口上。启动超级终端程序(Win95/NT中),作适当配置,连接路由器。给路由器加电,连续键入数个回车,出现如下提示符,显示路由器处于用户模式。
testBJ>
由用户模式转入特权模式,使用enable命令。
testBJ>enable
testBJ#
和UNIX主机一样,“#”代表特权(root)用户的系统提示符,它表示你进入了特权模式。与enable作用相反,即从特权模式返回用户模式的命令是disable。
特权模式下,可以使用configterminal命令进入全局配置模式。全局配置模式下,可以使用一些配置子项的名称进入局部配置模式。返回的方法都是exit命令。其中,从局部配置模式直接返回特权模式的命令是end。如下所示。
testBJ#configterminal
Enterconfigurationcommands,oneperline.EndwithCNTL/Z.
testBJ(config)#routerrip
testBJ(config-router)#exit
testBJ(config)#exit
testBJ#
CISCOIOS的一个非常引人的特色是它的命令行帮助,一个?解决了所有的问题。?可以显示当前模式下的命令列表,可以显示命令全称,还可以显示命令的参数和帮助信息。在任何对命令不确定的地方键入?,系统会给出提示信息。
CISCO路由器还支持命令简写功能,只要不引起歧义,可以用命令的前几个字符替代整个命令,这样,配置时的打字工作量就小多了。
路由器的全部配置信息都保存在配置文件中,当前正在使用的配置文件是running-config,它存放在系统内存里,我们在特权模式下对配置的修改会立即反映到running-config中。startup-config是存储在NVRAM中的配置文件,只有它是掉电不丢失的,所以如果想使所做的修改到下一次启动时仍然有效,就必须保存当前配置。存盘命令如下:
testBJ#copyrunning-configstartup-config
Buildingconfiguration...
[OK]
testBJ#
更改路由器名、密码
路由器的名字可以用hostname命令修改。
Router(config)#hostnametestBJ
testBJ(config)#
enablepassword和enablesecret命令可以修改特权模式的密码。
testBJ(config)#enablepasswordcisco
testBJ(config)#enablesecretcisco
进入lineconsole局部配置模式下,修改console登录密码;进入linevty局部配置模式,修改telnet登录的密码。login命令指出需要登录,修改密码的命令都是password。
testBJ(config)#lineconsole0
testBJ(config-line)#login
testBJ(config-line)#passwordcisco
testBJ(config-line)#exit
testBJ(config)#linevty04
testBJ(config-line)#login
testBJ(config-line)#passwordcisco
测试连通性
打开其余两台路由器,按上述方法进行配置,然后就可以检查它们之间是否连通了。
测试线路连通性的方法有三种,ping、traceroute和telnet。ping可以检测目的地是否可达;trace不仅检测连通性,还给出到达目的地所经过的路径;telnet测试应用层软件的连通性,如下所示。
testBJ#ping172.16.4.2
Typeescapesequencetoabort.
Sending5,100-byteICMPEchosto172.16.4.2,timeoutis2seconds:
!!!!!
Successrateis100percent(5/5),round-tripmin/avg/max=24/25/28ms
testBJ#traceroute172.16.4.2
Typeescapesequencetoabort.
Tracingtherouteto172.16.4.2
1172.16.2.216msec16msec*
testBJ#telnet172.16.4.2
Trying172.16.4.2...Open
UserAccessVerification
Password:
testTJ>
172.16.4.2是路由器testTJ上的一个端口,我们在testBJ上运行上述三个命令,得知它运行正常。
显示当前状态
为了使网络管理员能够方便地了解路由器的状态,CISCO路由器提供了丰富的show命令。我们在这里介绍最简单的几个,如下所示。
showversion命令显示路由器的硬软件版本号及配置信息。
showflash:命令相当于DOS的dir命令,显示flash中包含的文件信息。
showinterface命令显示网络接口的状态。
配置路由器的过程中,最重要的一个show命令莫过于查看配置文件的内容,可以用show命令查看running-config或startup-config,如下所示。
showrunning-config
showstartup-config
配置文件是一个文本文件,其中包含着你键入的每一条配置命令。可以将配置文件下载到计算机上,用文本编辑器修改之后,再传回路由器。
三、RIP要配什么
IP地址配置
我们可以使用interface命令进入局部配置模式,然后利用ipaddress设置接口的IP地址。如下所示。
testBJ#conft
Enterconfigurationcommands,oneperline.EndwithCNTL/Z.
testBJ(config)#interfacee0/1
testBJ(config-if)#ipaddress172.16.1.2255.255.255.0
testBJ(config-if)#
为了便于配置和记忆,你还可以给每个端口添加一些描述信息。如下所示,在端口局部配置模式下使用description命令。
testBJ(config-if)#descriptionconnecttotestSH
testBJ(config-if)#end
testBJ#
有些网络是NBMA(Non-BroadcastMultiAccess,非广播多路访问)的,即网络上不允许广播传送数据。对于这种网络,RIP就不能依赖广播传递路由表了。解决方法有很多,最简单的是指定邻居(neighbor),即指定将路由表发送给某一台特定的路由器。
有些网络是NBMA(Non-BroadcastMultiAccess,非广播多路访问)的,即网络上不允许广播传送数据。对于这种网络,RIP就不能依赖广播传递路由表了。解决方法有很多,最简单的是指定邻居(neighbor),即指定将路由表发送给某一台特定的路由器。
RIP配置
RIP是最容易配置的路由协议。配置它只需要两步操作,首先,指定使用RIP协议,然后,声明所连接的网络号,如下所示。
testBJ(config)#routerrip
testBJ(config-router)#network172.16.0.0
testBJ(config-router)#end
testBJ#
routerrip命令用于指定使用RIP协议,network命令声明网络号,由于RIP是一个有类路由协议,所以不必声明各个子网号。
对每一台路由器重复上述操作,一个使用RIP路由的网络就建成了。
测试配置正确性
配置RIP之后,要检查数据是否可以被正确路由。除了可以使用上面提到的连通性测试工具之外,还有以下几个命令:
shiproute用于检测路由表;
shipprotocols用于检查路由协议状况;
debugiprip用于调试RIP协议信息。
使用shiproute命令显示各台路由器的路由表。
testBJ#shiproute
Codes:C-connected,S-static,I-IGRP,R-RIP,M-mobile,B-BGP
D-EIGRP,EX-EIGRPexternal,O-OSPF,IA-OSPFinterarea
N1-OSPFNSSAexternaltype1,N2-OSPFNSSAexternaltype2
E1-OSPFexternaltype1,E2-OSPFexternaltype2,E-EGP
i-IS-IS,L1-IS-ISlevel-1,L2-IS-ISlevel-2,
*-candidatedefault,U-per-userstaticroute,o-ODR
Gatewayoflastresortisnotset
172.16.0.0/24issubnetted,4subnets
R172.16.4.0[120/1]via172.16.2.2,00:00:12,Serial1/0
C172.16.1.0isdirectlyconnected,Ethernet0/1
C172.16.2.0isdirectlyconnected,Serial1/0
R172.16.3.0[120/1]via172.16.1.3,00:00:09,Ethernet0/1
[120/1]via172.16.2.2,00:00:22,Serial1/0
上面显示的是北京路由器的路由信息。字母C开头的是直接相连的网络,有172.16.1.0和172.16.2.0,分别连接在e0/1和s1/0端口上。字母R开头的是RIP协议学习到的路由,有172.16.3.0和172.16.4.0,其中,到172.16.3.0有两条路径供选择,分别经由testSH和testTJ路由器。对比网络拓扑图,可以看出实际情况与设计的完全一致。
中括号里的内容是路由项的管理距离和度量值,RIP的缺省管理距离是120,到达3、4子网的度量值是1,即经过1个路由器可达。
同样的命令在另外两台路由器上运行,结果如下。
testSH#shiproute
Gatewayoflastresortisnotset
172.16.0.0/24issubnetted,4subnets
R172.16.4.0[120/1]via172.16.3.2,00:00:13,Ethernet0/0
C172.16.1.0isdirectlyconnected,Ethernet0/1
R172.16.2.0[120/1]via172.16.1.2,00:00:11,Ethernet0/1
[120/1]via172.16.3.2,00:00:13,Ethernet0/0
C172.16.3.0isdirectlyconnected,Ethernet0/0
testTJ#shiproute
Gatewayoflastresortisnotset
172.16.0.0/24issubnetted,4subnets
C172.16.4.0isdirectlyconnected,Ethernet0/0
R172.16.1.0[120/1]via172.16.3.3,00:00:07,Ethernet0/1
[120/1]via172.16.2.3,00:00:19,Serial1/0
C172.16.2.0isdirectlyconnected,Serial1/0
C172.16.3.0isdirectlyconnected,Ethernet0/1
分析上述命令输出时,一定要随时参照拓扑图,离开网络拓扑,上面的信息就没有任何意义。动态路由的灵活性体现在一条链路出现故障,路由算法会自动切换到迂回链路上。例如我们将testBJ和testTJ之间的串行线缆断开,一段时间后,再检查路由表,如下所示。
testBJ#shiproute
Gatewayoflastresortisnotset
172.16.0.0/24issubnetted,3subnets
R172.16.4.0[120/2]via172.16.1.3,00:00:22,Ethernet0/1
C172.16.1.0isdirectlyconnected,Ethernet0/1
R172.16.3.0[120/1]via172.16.1.3,00:00:22,Ethernet0/1
我们发现串行链路所在的子网2断开了,到网络172.16.4.0网络的数据包都将绕经testSH路由器。
shipprotocols命令可以显示当前路由协议的状况,如下所示。
testBJ#shipprotocols
RoutingProtocolis"rip"
Sendingupdatesevery30seconds,nextduein19seconds
Invalidafter180seconds,holddown180,flushedafter240
Outgoingupdatefilterlistforallinterfacesisnotset
Incomingupdatefilterlistforallinterfacesisnotset
Redistributing:connected,rip
Defaultversioncontrol:sendversion1,receiveanyversion
InterfaceSendRecvKey-chain
Ethernet0/1112
Serial1/0112
RoutingforNetworks:
172.16.0.0
RoutingInformationSources:
GatewayDistanceLastUpdate
172.16.2.212000:00:05
172.16.1.312000:00:27
Distance:(defaultis120)
从命令输出中,可以看出RIP协议的基本配置,还可以得知与当前路由器交换信息的路由器有testTJ(172.16.2.2)和testSH(172.16.1.3)两台路由器,上次接收路由信息分别在5秒和27秒之前。
要了解路由器之间交换路由信息的详情,可以使用debugiprip命令。如下所示,输入命令后,隔一段时间,控制台上出现接收或者发送RIP广播的信息。
testBJ#debugiprip
RIPprotocoldebuggingison
testBJ#
RIP:receivedv1updatefrom172.16.2.2onSerial1/0
172.16.4.0in1hops
172.16.3.0in1hops
RIP:receivedv1updatefrom172.16.1.3onEthernet0/1
172.16.4.0in2hops
172.16.3.0in1hops
RIP:sendingv1updateto255.255.255.255viaEthernet0/1(172.16.1.2)
subnet172.16.4.0,metric2
subnet172.16.2.0,metric
1
RIP:sendingv1updateto255.255.255.255viaSerial1/0(172.16.2.3)
subnet172.16.1.0,metric1
RIP:receivedv1updatefrom172.16.1.3onEthernet0/1
172.16.4.0in2hops
172.16.3.0in1hops
RIP:receivedv1updatefrom172.16.2.2onSerial1/0
172.16.4.0in1hops
172.16.3.0in1hops
testBJ#nodebugall
Allpossibledebugginghasbeenturnedoff
testBJ#
从上述信息中可以得到RIP广播的详情。路由器先是从testTJ收到子网3、4的信息,然后又从testSH收到子网3、4的信息。其中,到子网4走testTJ一跳,走testSH两跳,所以,路由表中反映出来的是经由testTJ到子网4;到子网3的距离都是一跳,所以,路由表中有两条并列的路由。
一段时间后,当前路由器的更新计时达到30秒,于是,它在两条链路上广播自身的路由表信息。注意,广播路由更新时,RIP采用了水平分割机制,从一个端口上学得的信息就不在这个端口上进行广播,所以当前路由器testBJ只发送子网172.16.1.0的路由信息。
使用nodebugall命令结束调试信息的显示。需要注意的是debug命令非常消耗路由器资源,所以不要在通讯繁忙的路由器上使用,否则,路由器就会象死机一样停止反应。
怎么样,你看一遍这篇文章用了多少时间。下面可以找几台路由器,试着配置一下,不是很困难吧。