转自:Chapter5 IP Routing
Routing Basics
路由协议(routing protocol):用于routers动态寻找网络最佳路径,保证所有routers拥有相同的路由表.一般,路由协议决定数据包在网络上的行走的路径.这类协议的例子有OSPF,RIP,IGRP,EIGRP等
可路由协议(routed protocol):当所有的routers知道了整个网络的拓扑结构以后,可路由协议就可以用来发送数据.一般的,可路由协议分配给接口,用来决定数据包的投递方式.这类例子有IP和IPX
路由:把1个数据包从1个设备发送到不同网络里的另1个设备上去.这些工作依靠routers来完成.routers并不关心主机,它们只关心网络的状态和决定网络中的最佳路径
router可以路由数据包,必须至少知道以下状况:
1.目标地址(destination address)
2.可以学习到远端网络状态的邻居router
3.到达远端网络的所有路线
4.到达远端网络的最佳路径
5.如何保持和验证路由信息
The IP Routing Process
路由原理:当IP子网中的一台主机发送IP包给同一IP子网的另一台主机时,它将直接把IP包送到网络上,对方就能收到.而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的router,把IP包送给该router,由它负责把IP包送到目的地.如果没有找到这样的router,主机就把 IP包送给一个称为缺省网关(default gateway)的router上.缺省网关是每台主机上的一个配置参数,它是接在同一个网络上的某个router接口的IP地址,router转发IP 包时,只根据IP包目的IP地址的网络号部分,选择合适的接口,把IP包送出去.同主机一样,router也要判定接口所接的是否是目的子网,如果是,就直接把包通过接口送到网络上,否则,也要选择下一个router来传送包.router也有它的缺省网关,用来传送不知道往哪儿送的IP包.这样,通过 router把知道如何传送的IP包正确转发出去,不知道的IP包送给缺省网关,这样一级级地传送,IP包最终将送到目的地,送不到目的地的IP包则被网络丢弃了
当主机A发送个IP包到主机B,目标MAC地址使用的是默认网关的以太网接口地址.这是因为帧不能放置在远端网络.
show ip route:查看路由表信息,比如:
Router#sh ip route
(略)
Gateway of last resort is not set
C 192.168.10.0/24 is directly connected, FastEthernet0/0
C 192.168.20.0/24 is directly connected, Serial 0/0
Router#
C代表的是:直接相连
Configuring IP Routing in Our Network
当1个router收到1个目标网络号没有在路由表中列出的包的时候,它并不发送广播寻找目标网络,而是直接丢弃它
几种不同类型的路由:
1.静态路由(static routing)
2.默认路由(default routing)
3.动态路由(dynamic routing)
Static Routing
静态路由:手动填加路由线路到路由表中,优点是:
1.没有额外的router的CPU负担
2.节约带宽
3.增加安全性
缺点是:
1.网络管理员必须了解网络的整个拓扑结构
2.如果网络拓扑发生变化,管理员要在所有的routers上手动修改路由表
3.不适合在大型网络中
静态路由的配置命令:ip route [dest-network] [mask] [next-hop address或exit interface][administrative distance] [permanent]
ip route:创建静态路由
dest-network:决定放入路由表的路由表
mask:掩码
next-hop address:下1跳的router地址
exit interface:如果你愿意的话可以拿这个来替换next-hop address,但是这个是用于点对点(point-to-point)连接上,比如广域网(WAN)连接,这个命令不会工作在LAN上
administrative distance:默认情况下,静态路由的管理距离是1,如果你用exit interface代替next-hop address,那么管理距离是0
permanent:如果接口被shutdown了或者router不能和下1跳router通信,这条路由线路将自动从路由表中被删除.使用这个参数保证即使出现上述情况,这条路线仍然保持在路由表中
静态路由的具体配置:
Router Network Address Interface Address
RouterA 192.168.10.0 fa0/0 192.168.10.1
192.168.20.0 s0/0 192.168.20.1
RouterB 192.168.20.0 s0/0 192.168.20.2
192.168.40.0 s0/1 192.168.40.1
192.168.30.0 fa0/1 192.168.30.1
RouterC 192.168.40.0 s0/0 192.168.40.2
192.168.50.0 fa0/0 192.168.50.1
准备工作:先配置RouterA,B和C的基本信息,注意RouterB作为DCE提供时钟频率:
RouterA(config)#int fa0/0
RouterA(config-if)#ip address 192.168.10.1 255.255.255.0
RouterA(config-if)#no shut
RouterA(config-if)#int s 0/0
RouterA(config-if)#ip address 192.168.20.1 255.255.255.0
RouterA(config-if)#no shut
RouterA(config-if)#^Z
RouterA#copy run start
RouterB(config)#int fa0/0
RouterB(config-if)#ip address 192.168.30.1 255.255.255.0
RouterB(config-if)#no shut
RouterB(config-if)#int s 0/0
RouterB(config-if)#ip address 192.168.20.2 255.255.255.0
RouterB(config-if)#clock rate 64000
RouterB(config-if)#no shut
RouterB(config-if)#ip address 192.168.40.1 255.255.255.0
RouterB(config-if)#clock rate 64000
RouterB(config-if)#no shut
RouterB(config-if)#^Z
RouterB#copy run start
RouterC(config)#int fa0/0
RouterC(config-if)#ip address 192.168.50.1 255.255.255.0
RouterC(config-if)#no shut
RouterC(config-if)#int s 0/0
RouterC(config-if)#ip address 192.168.40.2 255.255.255.0
RouterC(config-if)#no shut
RouterC(config-if)#^Z
RouterC#copy run start
配置RouterA静态路由:
RouterA了解自己的网络192.168.10.0和192.168.20.0(直接相连),所以RouterA的路由表必须加入 192.168.30.0和192.168.40.0, 192.168.50.0的信息,注意下1跳接口,如下:
RouterA(config)#ip route 192.168.30.0 255.255.255.0 192.168.20.2
RouterA(config)#ip route 192.168.40.0 255.255.255.0 192.168.20.2
RouterA(config)#ip route 192.168.50.0 255.255.255.0 192.168.20.2
验证路由信息:
RouterA#sh ip route
(略)
S 192.168.50.0 [1/0] via 192.168.20.2
(略)
S代表静态路由,[1/0]分别为管理距离和度
配置RouterB静态路由:
RouterB所必须学习到的网络应该是192.168.10.0和192.168.50.0,注意它们的下1跳接口地址,配置如下:
RouterB(config)#ip route 192.168.10.0 255.255.255.0 192.168.20.1
RouterB(config)#ip route 192.168.50.0 255.255.255.0 192.168.40.2
配置RouterC静态路由:
RouterC所必须学习到的网络应该是192.168.10.0,192.168.20.0和192.168.30.0,注意它们的下1跳接口地址,配置如下:
RouterC(config)#ip route 192.168.10.0 255.255.255.0 192.168.40.1
RouterC(config)#ip route 192.168.20.0 255.255.255.0 192.168.40.1
RouterC(config)#ip route 192.168.30.0 255.255.255.0 192.168.40.1
Verifying Your Configuration
根据上面的拓扑结构,我们来验证下是否能够端到端的ping通:
RouterC#ping 192.168.10.1
(略)
Sending 5, 100-byte ICMP Echos to 192.168.10.1, timeout is 2 seconds:
!!!!!
(略)
RouterA#ping 192.168.50.1
(略)
Sending 5, 100-byte ICMP Echos to 192.168.50.1, timeout is 2 seconds:
!!!!!
(略)
2端都能ping通,说明没问题
Default Routing
默认路由:一般使用在stub网络中,stub网络是只有1条出口路径的网络.使用默认路由来发送那些目标网络没有包含在路由表中的数据包.根据上面的拓扑图,你就不能把默认路由定义在RouterB上,因为RouterB拥有不止1个出口路径接口.其实你可以把默认路由理解成带通配符 (wildcard)的静态路由
配置默认路由:
首先要去掉之前配置的静态路由
RouterC(config)#no ip route 192.168.10.0 255.255.255.255 192.168.40.1
RouterC(config)#no ip route 192.168.20.0 255.255.255.255 192.168.40.1
RouterC(config)#no ip route 192.168.30.0 255.255.255.255 192.168.40.1
接下来配置默认路由:
RouterC(config)#ip route 0.0.0.0 0.0.0.0 192.168.40.1
额外的命令,使各个接口打破分类IP规则,12.x的IOS默认包含这条命令,如下:
RouterC(config)#ip classless
再验证下:
RouterC(config)#^Z
RouterC#sh ip route
(略)
S* 0.0.0.0/0 [1/0] via 192.168.40.1
S*代表默认路由
Dynamic Routing
动态路由协议,有很多优点,灵活等等,但是缺点也有,比如占用了额外的带宽,CPU负荷高
组网利用到的2种路由协议:内部网关协议(Interior Gateway Protocols,IGPs)和外部网关协议(Exterior Gateway Protocols,EGPs)
自治系统(Autonomous System,AS):同1个管理域的网络集合,意味着在这里面的所有routers共享相同的路由表信息
IGPs:在相同的AS内交换路由信息
EGPs:AS间的通信
Routing Protocol Basics
Administrative Distances
管理距离(AD): 0到255之间的1个数,它表示一条路由选择信息源的可信性值.该值越小,可信性级别越高.0为最信任,255为最不信任即没有从这条线路将没有任何流量通过.假如1个router收到远端的2条路由更新,router将检查AD,AD值低的将被选为新路线存放于路由表中.假如它们拥有相同的AD,将比较它们的度(metric).度低的将作为新线路.假如它们的AD和度都一样,那么将在2条线路做均衡负载.
一些常用路由协议默认的AD:
1.直接相连:0
2.静态路由:1
3.EIGRP:90
4.IGRP:100
5.OSPF:110
6.RIP:120
记住,如果你在条线路上配置了静态路由,又配置了RIP,默认情况下,router只会使用静态路由,因为它的AD为1小于RIP的AD
Routing Protocols
3种路由协议:
1.距离向量(distance vector)
2.链路状态(link state)
3.混合型(hybrid)
距离向量:用于根据距离(distance)来判断最佳路径,当1个数据包每经过1个router时,被称之为经过1跳.经过跳数最少的则作为最佳路径.这类协议的例子有RIP和IGRP,它们将整个路由表向与它们直接相连的相邻routers
链路状态:也叫最短路径优先(shortest-path-first)协议.每个router创建3张单独的表,1张用来跟踪与它直接相连的相邻 router;1张用来决定网络的整个拓扑结构;另外1张作为路由表.所以这种协议对网络的了解程度要比距离向量高.这类协议例子有OSPF
混合型:综合了前2者的特征,这类协议的例子有EIGRP
Distance-Vector Routing Protocols
距离向量路由算法将完整的路由表传给相邻router,然后这个router再把收到的表的选项加上自己的表来完成整个路由表,这个叫做routing by rumor,因为这个router是从相邻router接受更新而非自己去发现网络的变化。
RIP就是距离向量协议的例子.RIP使用跳数来决定最佳路径,假如到达1个网络有2条跳数相同的链路,那么将均衡负载在这2条链路上,平均分配,RIP最多支持6条均衡链路
针孔拥塞(pinhole congestion):假如2条到达远端网络的链路1和2的跳数均为1,但是链路1的带宽是56kbps,2的是T1线路1544kbps,显然,走链路2好过走链路1,但是RIP使用跳数作为度,所以RIP会把数据平均分配到链路1和2上,这就造成了pinhole congestion
我们来了解下距离向量协议的启动过程:当router启动的时候,只有那些与它们直接相连的网络号出现在它们自己的路由表里,当距离向量协议在每个 router上启动后,路由表将从相邻router获得更新信息来更新自己的路由表.每个router将完整的路由表,包含网络号,出口接口和跳数,发送给相邻router.接下来,路由表包含了完整的网络信息,达到汇聚(converged)状态.另外,在汇聚期间,没有数据将会被传送,所以说,快速汇聚就成了1个必不可少的话题
Routing Loops
距离向量协议通过向所有接口周期性的广播路由更新来跟踪整个网络的变化,这些广播包括了完整的路由表.这样看上不错,但是它却给CPU增加了负荷和占用了额外的带宽.而且,汇聚过慢的话容易导致路由表的不一致性和容易产生路由循环(routing loops)
路由循环的例子:
假如网络5出问题了,不工作了,E就发送更新给C汇报情况,于是,C开始停止通过E来路由信息到网络5,但是这个时候A,B和D还不知道网络5出问题了.所以它们仍然继续发送更新信息.C发送更新给B说停止路由到网络5.但是此时A和D还没有更新,所以它们觉得网络5仍然可用,而且跳数为3.接下来,A发送更新说:嘿!网络5还可用.B和D接受到A发来的更新后,没办法,也相同的觉得可用经过A到达网络5,并且认为网络5可用.所以就这样,1个目标网络是网络5的数据包将进过A到B,然后又回到A……
Maximum Hop Count
路由循环的问题也可用描述为跳数无限(counting to infinity).其中的1个解决办法就是定义最大跳数(maximum hop count).RIP是这样定义最大跳数的:最大跳数为15,第16跳为不可达.但是这样不能根本性的祛除路由循环的问题
Split Horizon
另外1个解决办法就是水平分裂(split horizon),它规定由1个接口发送出去的路由信息不能再朝这个接口往回发送.这个办法减少了路由信息的不正确性和负载
Route Poisoning
路由破坏(route poisoning)也用于避免不一致的更新信息来阻止网络循环.由刚才的拓扑图,当网络5不可用了,E将把这条线路的度变为16,即不可达,破坏这条线路.这样C就不会发送错误的更新了.当C收到E的route poisoning信息,,C发送个叫做poison reverse的更新给E,这样保证了所有的线路都知道那条破坏线路的信息,来防止循环
Holddowns
抑制计时(holddown): 一条路由信息无效之后,一段时间内这条路由都处于抑制状态,即在一定时间内不再接收关于同一目的地址的路由更新.如果,路由器从一个网段上得知一条路径失效,然后,立即在另一个网段上得知这个路由有效.这个有效的信息往往是不正确的,抑制计时避免了这个问题,而且,当一条链路频繁起停时,抑制计时减少了路由的浮动,增加了网络的稳定性.它使用了触发更新(trigger update)来重新设定holddown计时器
触发更新:和一般的更新不一样,当路由表发生变化时,更新报文立即广播给相邻的所有路由器,而不是等待30秒的更新周期.同样,当一个路由器刚启动 RIP时,它广播请求报文.收到此广播的相邻路由器立即应答一个更新报文,而不必等到下一个更新周期.这样,网络拓扑的变化会最快地在网络上传播开,减少了路由循环产生的可能性
触发更新重新设定计时器的几个情况:
1.计时器超时
2.收到1个拥有更好的度的更新
3.刷新时间(flush time)
Routing Information Protocol(RIP)
RIP是一种距离向量路由协议,使用跳数作为度,最大15跳,它每30秒向外发送整个路由表的信息.RIP适合于小型网络.RIP版本1(RIPv1) 使用分级路由(classful routing),意思是在网络的所有设备必须使用相同的子网掩码;而RIP版本2(RIPv2)使用无分类路由(classless routing).我们这里讨论RIPv1
RIP Timers
RIP使用3种不同的计时来调节它的性能:
1.路由更新计时(route update timer)
2.路由无效计时(route invalid timer)
3.保持计时器(holddown timer)
4.路由刷新时间(route flush timer)
路由更新计时:router发送路由表副本给相邻router的周期性时间,30秒
路由无效计时:如果经过180秒,一个路由的选项都没有得到确认,router就认为它已失效了
保持计时器:当router得知路由无效后,router将进如holddown状态,默认时间是180秒,如果在这180秒里,router接收到路由更新以后或者超过180秒,保持计时器停止计时
路由刷新时间: 如果经过240秒,路由表的选项仍没有得到确认,它就被从路由表中删除
Configuring RIP Routing
配置RIP:
Router Network Address Interface Address
RouterA 192.168.10.0 fa0/0 192.168.10.1
192.168.20.0 s0/0 192.168.20.1
RouterB 192.168.20.0 s0/0 192.168.20.2
192.168.40.0 s0/1 192.168.40.1
192.168.30.0 fa0/1 192.168.30.1
RouterC 192.168.40.0 s0/0 192.168.40.2
192.168.50.0 fa0/0 192.168.50.1
先来配置RouterA,由于AD的问题,所以要先去掉之前的静态路由,如下:
RouterA(config)#no ip route 192.168.30.0 255.255.255.0 192.168.20.2
RouterA(config)#no ip route 192.168.40.0 255.255.255.0 192.168.20.2
RouterA(config)#no ip route 192.168.50.0 255.255.255.0 192.168.20.2
使用RIP配置命令为router rip,起用RIP,接下来使用network命令配置需要进行通告(advertise)的网络号,注意router的提示符,如下:
RouterA(config)#router rip
RouterA(config-router)#network 192.168.10.0
RouterA(config-router)#network 192.168.20.0
RouterA(config-router)#^Z
RouterA#
注意配置的网络号,是直接相连的网络,而通告非直接相连的网络任务,就交给RIP来做.还有就是要注意RIPv1是classful routing,意思是假如你使用B类172.16.0.0/24,子网172.16.10.0,172.16.20.0和172.16.30.0,在配置RIP的时候,你只能把网络号配置成network 172.16.0.0
配置RouterB,由于AD的问题,所以要先去掉之前的静态路由,如下:
RouterB(config)#no ip route 192.168.50.0 255.255.255.0 192.168.40.2
RouterB(config)#no ip route 192.168.10.0 255.255.255.0 192.168.20.1
配置RIP:
RouterB(config)#router rip
RouterB(config-router)#network 192.168.20.0
RouterB(config-router)#network 192.168.30.0
RouterB(config-router)#network 192.168.40.0
RouterB(config-router)#^Z
RouterB#
配置RouterC,由于AD的问题,所以要先去掉之前的默认路由,如下:
RouterC(config)#no ip route 0.0.0.0 0.0.0.0 192.168.40.1
配置RIP:
RouterC(config)#router rip
RouterC(config-router)#network 192.168.50.0
RouterC(config-router)#network 192.168.40.0
RouterC(config-router)#^Z
RouterC#
Verifying the RIP Routing Tables
验证配置好的路由信息,如下:
RouterA#sh ip route
(略)
R 192.168.50.0 [120/2] via 192.168.20.2, 00:00:23, Serial0/0
(略)
注意R代表的是RIP,[120/2]分别代表AD和度,在这里,度即为跳数.假如说你在这个信息里看到的是[120/15],那么下1跳为16,不可达,这条路由线路也将随之无效,将被丢弃
Holding Down RIP Propagation
如果你想阻止RIP更新信息传播到LANs和WANs上,可以使用passive-interface命令,这条命令可以防止RIP更新信息广播从你定义了的接口上发送出去,但是这个接口仍然可以接受到更新信息,如下:
RouterA(config)#router rip
RouterA(config-router)#network 192.168.10.0
RouterA(config-router)#passive-interface s 0/0
Interior Gateway Routing Protocol(IGRP)
IGRP是Cisco私有的距离向量路由协议,意思是说只有Cisco的routers才可以运行IGRP.IGRP的一些特点有:最大跳数255,默认100跳,这样就比较适合中大型网络.而且,IGRP默认使用带宽和延迟(delay)作为度来寻找最佳路径,这样的度就叫复合度(composite metric).当你配置IGRP的时候,你必须以AS号作为配置参数,所有的routers必须使用相同的AS号来共享路由表信息. IGRP支持6条链路的均衡负载
下面是一些你在RIP中找不到的,IGRP专有的特征:
1.IGRP可以在1个大型组网中使用到
2.使用AS号
3.每90秒发送完整的路由更新
4.使用带宽和延迟作为度
IGRP Timers
IGRP计时:
1.路由更新计时:默认90秒
2.路由无效计时:默认270秒
3.保持计时器:默认280秒(3倍更新时间+10秒)
4.路由刷新时间: 默认630秒
Configuring IGRP Routing
Router Network Address Interface Address
RouterA 192.168.10.0 fa0/0 192.168.10.1
192.168.20.0 s0/0 192.168.20.1
RouterB 192.168.20.0 s0/0 192.168.20.2
192.168.40.0 s0/1 192.168.40.1
192.168.30.0 fa0/1 192.168.30.1
RouterC 192.168.40.0 s0/0 192.168.40.2
192.168.50.0 fa0/0 192.168.50.1
配置RouterA,注意AS号的范围为1到65535,如下:
RouterA(config)#router igrp ?
<1-65535> Autonomous system number
RouterA(config)#router igrp 10
RouterA(config-router)#netw 192.168.10.0
RouterA(config-router)#netw 192.168.20.0
RouterA(config-router)#^Z
RouterA#
记住IGRP也是classful routing,而且配置网络号是与它直接相连的网络
配置RouterB,如下:
RouterB(config)#router igrp 10
RouterB(config-router)#netw 192.168.20.0
RouterB(config-router)#netw 192.168.30.0
RouterB(config-router)#netw 192.168.40.0
RouterB(config-router)#^Z
RouterB#
配置RouterC,如下:
RouterC(config)#router igrp 10
RouterC(config-router)#netw 192.168.40.0
RouterC(config-router)#netw 192.168.50.0
RouterC(config-router)#^Z
RouterC#
注意RouterA,RouterB和RouterC使用相同的AS号
Verifying the IGRP Routing Tables
我们来验证下:
RouterA#sh ip route
(略)
I 192.168.50.0 [100/170420] via 192.168.20.2, Serial0/0
(略)
I代表IGRP[100/170420]为AD和复合度,度越低越好
Verifying Your Configurations
一些验证性的命令:
show protocols:显示所有的可路由协议和查看接口及其相关协议,如下:
RouterB#sh protocols
Gloabal 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
RouterB#
show ip protocols:显示router上配置好了的路由协议,如下:
RouterB#sh ip protocols
Routing Protocols is “rip”
(略)
debug ip rip:发送控制台消息显示有关在router接口上收发RIP数据包的信息,关闭debug,使用undebug all或者no debug all命令,如下:
RouterB#debug ip rip
RIP protocol debugging is on
RouterB#
07:12:56: RIP: received v1 update from 192.168.40.2 on Serial0/1
07:12:56: 192.168.50.0 in 1 hops
(略)
RouterB#undebug all
All possible debugging has been turned off
RouterB#
debug ip igrp events:提供在网络中运行的IGRP路由选择信息的概要,关闭使用undebug ip igrp events或undebug all命令,如下:
RouterB#debug ip igrp events
IGRP event debugging is on
07:13:50: IGRP: received request from 192.168.40.2 on Serial0/1
07:13:50: IGRP: sending update to 192.168.40.2 via Serial1(192.168.40.1)
07:13:51: IGRP: Update contains 3 interior, 0 system, and 0 exterior routes
07:13:51: IGRP: Total route in update: 3
(略)
RouterB#un all
All possible debugging has been turned off
debug ip igrp transactions:显示来自相邻router要求更新的请求消息和由router发到相邻router的广播消息,关闭使用undebug all,如下:
RouterB#debug ip igrp transactions
07:14:05: IGRP: received request from 192.168.40.2 on Serial1
07:14:05: IGRP: sending update to 192.168.40.2 via Serial1(192.168.40.1)
07:14:05: subnet 192.168.30.0, metric=1100
07:14:05: subnet 192.168.20.0, metric=158250
(略)
RouterB#un all
All possible debugging has been turned off
RouterB#