1.1 路由概念
路由是把数据从一个网络转发到另一个网络的过程,完成这个过程的设备就是路由器。数据在网络上以数据包为单元传送。每个数据包都携带两个逻辑地址(在互联网中这个逻辑地址就是IP地址),一个是数据的来源地地址,另一个是数据的目的地地址,所以每个数据包可以被独立地转发。以图1-1为例解释一下路由过程。
图1-1 路由过程示意图
在图1-1中,2台路由器R1和R2使用两条链路把2个网络连接起来,它们是192.168.1.0/24和192.168.2.0/24。2台路由器互连又占用2个网段号,它们是10.0.0.0/8和11.0.0.0/8。
假如Host1向Host2发送数据。拓扑显示,Host1和Host2不在同一个网络,数据要到达Host2有两条路可选,一条路是由R1的s0/0接口和R2的s0/0接口互连所形成的链路;另一条路是由R1的f0/1接口和R2的F0/0接口互连所形成的链路。
Host1是看不到这个拓扑图的,它的首要任务是判断Host2是否与自己在同一个网段内。它的做法是:用自己的IP地址和子网掩码做“与”运算,计算出自己的网络号是192.168.1.0;再用Host2的IP地址(这个地址Host1知道)和自己的掩码做“与”运算,计算出Host2的网络号是192.168.2.0。然后比较这两个计算结果,结果相同表示在同一网段内,结果不同则表示两者不在同一个网络中。
不同网络之间的主机通信需要借助路由器完成。路由器就像是邮局,用户把数据送到路由器后,具体怎么“邮递”就是路由器的工作,用户不必操心。因此Host1只需将数据包送到距它最近的路由器(R1)即可,如同生活中人们只需把信件投递到最近的邮局一样。因此,Host1需要知道R1的位置。在Host1上除了配置了IP地址和掩码外,还配置了另外一个参数——默认网关地址,其实就是路由器R1与Host1处于同一个网络的接口——f0/0的地址。在Host1上设置默认网关的目的就是把那些去往外网(不同于自己所在的网络)的数据发送给默认网关。为了找到R1的f0/0接口的MAC地址,Host1使用了地址解析协议(ARP)。
获得了必要信息之后,Host1开始封装数据:
●把f0/0接口的MAC地址封装在数据链路层的目的地址域。
●把自己的MAC地址封装在数据链路层的源地址域。
●把自己的IP地址封装在网络层的源地址域。
●把Host2的IP地址封装在网络层的目的地址域。
之后,把数据发送出去。
路由器R1收到Host1送来的数据后,把数据解开到第三层,读取数据包中的目的IP地址,然后查阅路由表决定如何转发数据。路由表是路由器转发数据的依据。如果路由表中没有任何可用的路径,路由器就会把该数据丢弃。路由表中记录有以下内容:
●已知的目标网络号(目的地网络)。
●到达目标网络的距离。
●到达目标网络应该经由自己哪一个接口。
●到达目标网络的下一台路由器的地址是什么。
路由器使用最近的路径转发数据,而且只把数据交给路径中的下一台路由器,并不负责把数据送到最终目的地。
对于本例来说,R1有两种选择,一种选择是经由自己的s0/0接口把数据交给R2;一种选择是经由自己的f0/1接口把数据交给R2。选择路径的依据是:经由哪一条链路到达目标网络的距离近,路由器使用哪一条链路。这里假设经由f0/1接口的路径近。R1经由f0/1接口把数据转发给R2。
R2收到R1的数据后所做的工作跟前面R1所做的工作一样,即查阅路由表。不同的是在自己的路由表里有一条记录,该纪录表明它的f0/1接口正好和数据声称到达的网络相连,也就是说Host2和它的f0/1接口在同一个网络中。R2使用ARP获得Host2的MAC地址之后开始封装数据:
●把Host2的MAC地址封装在数据链路层的目的地址域。
●把自己f0/1接口的MAC地址封装在数据链路层的源地址域。
●网络层的两个IP地址不变。
然后把数据传送给Host2。
至此,数据传递的一个单程完成了。
Host2回应给Host1的数据经过同样的处理过程到达目的地——Host1,只不过是数据包中的目的地IP地址是Host1的地址,先经过R2再经由R1,最后到达Host1。
从数据转发的过程看出,为了能够转发数据,路由器必须对整个网络拓扑有个清晰的了解,并把这些信息反映在路由表里。当网络拓扑结构发生变化时,路由器也需要及时地在路由表里反映出这些变化,这个工作被看做路由器的路由计算功能。路由器还有一项独立于路由计算功能的工作就是交换/转发数据,即把数据从进入接口转移到外出接口的过程。路由器必须具备这两种功能。
1.1.1 静态路由
每一台路由器工作时都会有一个路由表,为路由器选路提供依据。路由表里的每一条记录(表项)代表一条路径信息。路由表里的表项可以是人为设置的,称为静态路由。静态路由不随网络拓扑的变化而变化,不论它所指示的路径是否存在,只要不人为地删除,它总是存在于路由表中。静态路由在某些情况下是很有用的,比如,它可以将一部分网络隐藏起来;另外,当网络只存在唯一的一条路径与其他网络互连时,使用静态路由是非常有效的。只有一个出口的网络被称为端网络(Stub Network),如图1-2所示。为Stub网络设置静态路由可以简化网络配置,避免动态路由产生的不必要的资源浪费,也可以将端网内的具体情况隐藏起来。静态路由最大的缺点是不灵活,不能随网络拓扑的变化而变化;优点是减少了很多不必要的路由器的系统资源开销。
图1-2 端网络
1.1.2 动态路由
所谓动态路由是指路由器依靠其运行的路由协议从邻居路由器那里动态学习到的路由。运行路由协议的路由器将自动接收网络中新的路由信息,实现路由信息的自动更新。当网络发生变化的时候,无须管理人员的干预,路由器会自动地更新路由表,保证正确转发数据。动态路由最大的优点是灵活,对网络拓扑结构变化的适应性好;不足之处是由于需要计算路由,增加了网络的开销和路由器系统资源。
下面以图1-3所示的拓扑为例,对比一下静态路由和动态路由。图中源主机为数据发送端,目标主机为数据接收端。图中的数字代表路径的距离。
如果使用静态路由,路由器A参考它的路由表,按照静态路由信息将数据包发送给路由器B。路由器B使用相同的工作过程,将数据包传递给路由器C。路由器C最终将数据包发送给目标主机。
图1-3 动态路由和静态路由的比较
如果位于路由器A和B之间的路径发生故障,使用静态路由的路由器A将无法把数据包传递给路由器B。在路由器A通过手工重新配置经由路由器D发送数据之前,将无法实现与目的主机的通信。
如果使用动态路由,情况则完全不同。动态路由比静态路由具有更大的自动性和灵活性。正常情况下,路由器A采纳经由路由器B的最佳路径(距离=20)转发数据,不采纳经由路由器D的路径(距离=32)转发数据。当路由器A发现通向路由器B的路径失败后,它可以自动发现经由路由器D到达到目标的路径。当路由器A与B之间的链路恢复后,路由器A将再次选择经由路由器B的路径转发数据。
1.1.3 自治系统
互联网从无到有,从小到大发展到今天已经是一个庞大而又复杂的计算机网络了。在这个遍布全球的网络中,有数以万计的路由器在为转发数据而忙碌着,因此也为网络的管理提出了挑战。如果网络过大、路由器过多,再加上链路的速度较慢,那么路由信息的传播将花费很长时间。
如图1-4所示,网络边缘上的某台路由器所连接的网络发生了故障,变得不可用了,这个变化的路由信息需要很长时间才能传播到网络对岸。当最远端的路由器知道该信息时也许故障早已排除,网络又恢复了正常。在这个过程中,当网络不可用时,远端的路由器认为依然可用;当网络可用时,远端的路由器认为不可用。实际上并没有反映出网络的真实情况,路由器也不能正确地路由数据。
图1-4 互联网模型
为解决管理上的问题,网络被分割成一个个便于管理的区域,如图1-5所示。该区域由一些路由器和它们互连的网络构成,有着统一的管理策略,对外表现出的是一个单一实体的属性,称为自治系统(Autonomous System)。每个自治系统有一个全局唯一的自治系统号,其范围是1~65535。
图1-5 自治系统概念图
1.1.4 路由协议
从路由过程来看,路由器并非把数据直接送达目的地,而是把数据送给距目的地更近的一台路由器,称为下一跳(Next Hop)路由器。但是路由器必须知道那些并非和它直连的网络,即目的地,并把它反映在路由表中。这要依靠路由协议(Routing Protocol)。
路由协议是路由器之间用来交换路由信息的协议,也是路由器计算路由和建立路由表的协议。路由器通过路由协议把和自己直接相连的网络信息通告给它的邻居,并通过邻居通告给邻居的邻居,如图1-6所示。
图1-6 路由协议传播路由信息示意图
通过交换路由信息,网络中的每一台路由器都学习到了非直连(远程)的网络,并把学习到的网络号写在路由表里,表示到达该网络的路径/路由。当网络拓扑发生变化时,与发生变化的网络直接相连的路由器就会把这个变化信息通告给它的邻居,进而使整个网络中的路由器都知道这个变化,及时地调整自己的路由表,使其反映出当时的网络状况。另外,路由协议为路由器定义了一套规则来实现与邻居路由器的通信。例如,一个路由协议规定了:
●如何发送路由更新信息;
●路由更新信息包含的内容;
●何时发送路由更新信息;
●如何确定路由更新信息的接收对象。
通过运行路由协议,路由器最终得到的路由信息可以从路由表中反映出来。
提示
除了路由协议(Routing Protocols)外,另一种协议是能够为用户数据提供足够的被路由信息,比如逻辑地址,这种协议称为可路由协议(Routed Protocols)。用户数据要想被路由,即能够穿越网络,它必须被可路由协议封装。例如,IP数据包能被路由,因为IP协议是一个可被路由协议。
1.1.5 路由协议分类
根据路由协议工作原理的不同,路由协议分为距离矢量(Distance Vector)型路由协议、链路状态(Link State)型路由协议和综合(Hybrid)型路由协议。在IP协议集中,典型的距离矢量路由协议有RIP、RIPv2和IGRP;典型的链路状态协议有OSPF。Cisco专有协议EIGRP协议属于综合型路由协议。
根据路由协议运行在自治系统内还是运行在自治系统之间,路由协议又分为内部网关路由协议(Interior Gateway routing Protocol,IGP)和外部网关路由协议(Exterior Gateway routing Protocol,EGP)。IGP和EGP之间的关系如图1-7所示。
图1-7 IGP和EGP之间的关系
在IP协议集中,属于IGP的有RIP、RIPv2、IGRP、EIGRP和OSPF;属于EGP的是BGP(Border Gateway Protocol)。
1.1.6 路由度量
路由器在选择路径时,会比较路径的优劣,通俗来讲就是路径的距离。不同的路由协议由于它们的工作原理不同,其判断路径优劣的标准也不同。RIP协议的判断标准是计算到达目的地经由的路由器的数量,跨越的路由器越多,它认为路径越差。而其他路由协议可能不这么判定。
当路由器接收到来自邻居的路由信息后,依据其正在运行的路由协议的判断路由优劣的方法(实际就是不同的判断标准),从中选择出到达目标网络的最佳路径信息,并以此信息来更新路由表。每一种路由算法(距离矢量法或链路状态法)都使用自己的方法确定最佳路由。算法会为每条路径计算出一个数值,叫做度量(Metric)值。度量值越小,代表路径越好。
可以根据路径的单一特性计算度量值;也可以将路径的几个特性结合起来计算出更复杂的度量值。路由器用于计算路径度量值的参数有:
●带宽(Bandwidth)——接口的数据传输能力,单位是bps。
●延迟(Delay)——数据包从发源地传递到目的地的传输时间(准确地说,应该是数据包经过路由器的累计时间)。
●负载(Load)——路由器或链路的实际流量。
●可靠性(Reliability)——网络链路的可信度(通常指单位时间内链路的失效次数)。
●跳数(Hop Counts)——在到达目的地前数据包经过的路由器数量。
●滴答(Ticks)——使用IBM PC时钟的滴答(约55毫秒)计算的数据链路延迟。
●成本(Cost)——根据带宽计算的一个值,可以由网络管理员指定。
对于特定的一种路由协议,计算路由的度量并不一定全部使用这些参数,有些使用一个,有些使用多个。比如,RIP只使用跳数作为路由的度量值;而IGRP会用到接口的带宽和延迟。这些参数中的有些值可以使用show interface命令得到。
图5-8描述了路由器是如何通过比较度量值选择最佳路由的,图中的路由器运行的是RIP协议。路由器R1接收到R2和R3向它通告的路由信息后,通过比较Metric值选择了到达20.0.0.0/8网络的最佳路由是经由R3。
图1-8 比较度量值选择最佳路径
下面是R3通告的路由信息:
r3#debug ip rip
RIP protocol debugging is on
1. 00:08:04: RIP: sending v1 update to 255.255.255.255 via Serial0/0 (192.168.3.2) 2.00:08:04: RIP: build update entries
3. 00:08:04: network 20.0.0.0 metric 1
4. 00:08:04: network 172.16.0.0 metric 2
5. 00:08:04: network 192.168.2.0 metric 1
6. 00:08:04: RIP: sending v1 update to 255.255.255.255 via Serial0/1 (192.168.2.2) 7.00:08:04: RIP: build update entries
8. 00:08:04: network 20.0.0.0 metric 1
9. 00:08:04: network 30.0.0.0 metric 2
10. 00:08:04: network 192.168.3.0 metric 1
r3#undebug all
第1~5行是通过它的s0/0接口向R2通告的路由信息。
第6~10行是通过它的s0/1接口向R1通告的路由信息,包含3条路由,分别是:
●到达网络20.0.0.0,metric=1;
●到达网络30.0.0.0 ,metric=2;
●到达网络192.168.3.0,metric=1。
这样R1就知道了如果经由R3到达上述3个网络它们的距离分别是多少。
再看R2通告的路由信息:
r2#debug ip rip
RIP protocol debugging is on
1. 00:35:01: RIP: sending v1 update to 255.255.255.255 via Serial0/0 (192.168.3.1)
2. 00:35:01: RIP: build update entries
3. 00:35:01: network 30.0.0.0 metric 1
4. 00:35:01: network 172.16.0.0 metric 2
5. 00:35:01: network 192.168.1.0 metric 1
6. 00:35:01: RIP: sending v1 update to 255.255.255.255 via FastEthernet0/1 (192.168.1.2)
7. 00:35:01: RIP: build update entries
8.00:35:01: network 20.0.0.0 metric 2
9. 00:35:01: network 30.0.0.0 metric 1
10. 00:35:01: network 192.168.3.0 metric 1
第6~10行是R2向R1通告的路由情况。可以看到,R2告诉R1如果经由它(R2)到达网络20.0.0.0,metric=2。
比较可知,R1应该选择经由R3到达目标网络的路径,因为经由R3的路由度量值比经由R2的路由度量值小。
再看R1的路由表(有关路由表的详细解释参考第2章,这里只做说明问题用),表明R1正是选择了这条路由:目标是20.0.0.0/8的数据需要经由192.168.2.2(R3)转发。Serial0/1代表数据的出口。
r1#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
C 172.16.0.0/16 is directly connected, FastEthernet0/0
R 20.0.0.0/8 [120/1] via 192.168.2.2, 00:00:02, Serial0/1
R 30.0.0.0/8 [120/1] via 192.168.1.2, 00:00:07, FastEthernet0/1
C 192.168.1.0/24 is directly connected, FastEthernet0/1
C 192.168.2.0/24 is directly connected, Serial0/1
R 192.168.3.0/24 [120/1] via 192.168.1.2, 00:00:07, FastEthernet0/1
[120/1] via 192.168.2.2, 00:00:02, Serial0/1
路由算法是动态路由的基础,不同的路由协议有不同的路由算法。当使用不同的路由协议时,会表现出对同一个网络的不同认识。当网络因为增长,重新配置或故障等原因造成拓扑结构变化时,网络拓扑信息必定发生变化。路由信息必须准确、稳定地反映新的拓扑结构,所以路由协议会再次计算新的路由。
1.1.7 管理距离
路由协议有多种,并且路由器上可能存在多种路由协议同时工作的情况。哪种路由协议通告的路由信息是最可靠的呢?管理距离(Administrative Distance)是路由器用来评价路由信息可信度的一个指标。每种路由协议都有一个默认的信任等级,等级值越小,协议的信任度越高。静态路由优于动态路由;算法复杂的路由协议优于算法简单的路由协议。表1-1列出了默认的管理距离。
表1-1 默认管理距离
表1-1显示,路由协议RIP和IGRP的管理距离分别是120和100。如果在路由器上同时运行这两个协议,路由表中只会出现IGRP协议的路由条目。因为IGRP的管理距离比RIP的小,路由器认为IGRP协议发现的路由更可靠。虽然路由表中没有出现RIP协议的路由,但这不意味着RIP协议没有运行,它仍然在运行,只是在和IGRP协议比较时落选了,它的路由条目没有出现在路由表里罢了。
路由器只把最可靠协议的最佳路由安放在路由表中。路由器判定最佳路由时先比较管理距离,再比较度量值。