J基础篇第5章路由选择协议hxhWord文件下载.docx
《J基础篇第5章路由选择协议hxhWord文件下载.docx》由会员分享,可在线阅读,更多相关《J基础篇第5章路由选择协议hxhWord文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
●负责一个路由域(在一个管理域内运行同一种路由协议的域称为一个路由域)内路由的路由协议,称为域内路由协议(InteriorGatewayProtocol,IGP)。
域内路由协议的作用是确保在一个域内每个路由器均遵循相同的方式表示路由信息,并且遵循相同的发布和处理信息的规则。
域内路由协议对单播协议而言有:
RIP、OSPF、IGRP等,对组播协议而言有:
DVMRP,PIM-SM,PIM-DM等。
●负责在自治系统之间或域间完成路由和可到达信息的交互,称为域间路由协议(ExteriorGatewayProtocol,EGP)。
域间路由协议对单播协议而言有:
BGP等;
对组播协议而言有:
MBGP(多协议BGP)、BGMP(边界网关组播协议)、MSDP(组播源发现协议)等。
EGP协议主要是早期的EGP协议(此处的EGP是外部网关协议的一种,两者不能混淆),其效率太低,目前仅被作为一种标准的外部网关协议,没有被广泛使用。
而BGP协议特别是BGP-4,由于能处理聚合(采用CIDR无类域间路由技术)和超网(supernet)的功能,为互联网提供可控制的无循环拓扑,在互联网上被大量使用。
BGP-4已经成为当前互联网选路的实际标准。
通常,一个自治系统内部的BGP对等体之间通过内部BGP协议(IBGP)交互路由信息,不同自治系统的BGP对等体之间通过外部BGP协议(EBGP)交互路由信息。
图5-1EGP和IGP
距离-矢量路由协议和链路状态路由协议
前面提到,路由器之间的路由信息交换是基于路由协议实现的。
交换路由信息的最终目的在于形成路由转发表,进而通过此表找到一条数据交换的“最佳”路径。
每一种路由算法都有其衡量“最佳”的一套原则。
大多数算法使用一个量化的参数来衡量路径的优劣,一般说来,参数值越小,路径越好。
该参数可以通过路径的某一特性进行计算,也可以在综合多个特性的基础上进行计算,几个比较常用的特征是:
●路径所包含的路由器结点数(hopcount)
●网络传输费用(cost)
●带宽(bandwidth)
●延迟(delay)
●负载(load)
●可靠性(reliability)
●最大传输单元MTU(maximumtransmissionunit)
依据路由器间交换路由信息的内容及路由算法,将路由协议分为:
距离-矢量路由协议和链路状态路由协议。
1.距离-矢量路由协议
距离-矢量路由协议有:
RIP,IGRP等。
距离向量协议如RIP,是通过跳数来计算开销,由于选路性能低效,同时跳数受到限制,最大为15,使之只适合应用于小型网络。
距离-矢量路由协议的缺陷:
一是中继计数的可信度因为距离仅仅表示的是中继计数,对路由器之间的链路的带宽,延迟等无考虑。
这会导致数据包传送会走在一个看起来跳数是小,但实际带宽窄和延时大的链路上。
二是交换路由信息的方式,即路由器交换它们可以通过定期广播整个路由表所能到达的适用网络号码。
在稍大一点的网络中,路由器之间交换的路由表会很大,而且很难维护,导致收敛很缓慢。
三是不支持可变长度子网掩码或CIDR以及距离矢量网络可看成是平面的,它们缺少层次,亦即缺少聚合。
但RIPV2已经克服了此缺陷。
距离-矢量路由协议总结如下:
●周期性的路由信息更新
●受限的路由域大小
●通告信息直接来源於转发表
●采用多点或广播的方式向使用这种协议的局域网上通告
●只需要少量的计算就可以将接受到的路由更新同本地转发表融合在一起
●“水平分割”可以限制路由更新的大小和某些情况的路由黑洞的形成
●“毒性逆转”可以提高收敛时间,代价是更大的路由更新
●“触发更新”可以使得路由拓扑变化在检测到之后立即传播开来,而无效等待下一次的周期通告的时间间隔(一般至少30S)
2.链路状态路由协议
链路状态路由协议有OSPF、IS-IS等。
链路状态路由协议工作的基础是路由器交换称为链路状态的信息元素,它带有关于链路和节点的信息。
链路状态型路由协议只当网络拓扑结构发生变化时,通过交换链路状态和节点信息实现路由动态更新,这使得它能够适应更大更复杂的网络拓扑。
由于链路状态协议本身不能提供国际互联网域间选路所需的全球连通解决办法,在超大型网络中,以及在链路波动较大时,链路状态的重新传输和计算工作会非常繁重,导致路由器内存和CPU不堪重负,因此它仍然被限制于内部选路。
3.链路状态路由协议与距离矢量路由协议的比较
链路状态路由协议与距离矢量路由协议相比,具有下面的优点:
●没有中继计数:
采用的衡量标准是链路的综合度量,如OSPF路径选择是基于开销而不是跳数。
标准可信度优于中继计数,它综合考虑了链路的带宽和时延。
●更快的收敛速度:
通过链路状态更新,链路和节点的改变扩散到域中,域内所有的路由器马上更新它们的路由表。
●支持VLSM和CIDR:
链路状态协议交换掩码信息作为扩散到域中的信息元素的一部分。
所以,带有可变长度掩码的网络可以很容易地被识别。
●更好的分层:
鉴于距离矢量网络是平面的网络,链路状态协议将域分成不同的层次和区域。
这种分层的方法可以更好地控制网络的不稳定因数,并提供了一种更好的方法在区域间综合选路更新。
RIP协议
RIP是第一个实现动态选路的路由协议,该协议是基于本地网络的矢量距离算法而实现的。
RIP使用用户数据报文协议UDP包(端口号520)来交换RIP路由信息的。
RIP报文中的路由信息包含了路由所经过的路由器数即跳数,路由器根据该跳数决定各目的网络的路由。
RFC规定最大跳数不得大于16,因此,RIP是适用于较小规模的自治系统的内部网关协议。
路由信息协议(RIP1)是距离向量型协议,也是有类别(classful)路由协议,在路由更新时没有子网掩码的同步发送。
RIP报文的格式
RIPV1协议规定RIP报文的格式如下:
Command
Version
Unused(settoallzeros)
AddressFamilyidentifier
RouteTag
IPAddress
Metric
……
(Multiplefields,uptoamaxinumof25)
每个RIP报文都以由4个字节组成的一个公用头开始,紧跟在后面的是一系列路由条目,反映了其路由信息。
具体内容如下:
●Command:
区分RIP报文类型。
Command=1,是一个路由请求报文;
Command=2,是一个路由响应报文。
●Version:
RIP的版本号。
在一个RIP报文中,最多可通告25条路由条目,若路由条目数多于25条,则需要用多个RIP报文来交换路由信息。
每条路由条目所包含的信息用以下字段来描述:
●AddressFamilyidentifier:
地址族标识,对一般的路由条目,取值为2;
若是跟在RIP报文头后面的第一条路由条目,则取值为0XFFFF,表示是一个安全认证;
若是对所有路由的请求报文,取值为0;
●RouteTag:
路由标识,用于描述由其它路由协议所导入的外部路由信息。
该字段域在扩散过程中保持不变,使所携带的外部路由信息在经过RIP路由域时得以保存,并导入到另一自治系统中。
RouteTag一般要保存产生该路由的AS值,RIP协议本身不需要该属性值;
●IPAddress:
可达的目的地址,。
一般是指网络地址;
●Metric:
到可达路由所需经过的路由器数,其取值范围在1~16。
度量值在1~15内为可达路由,大于或等于16表示路由已不可达。
RIP一个比较大的缺陷是Metric只是简单的用跳数来表示,并不能准确的反映路径的真实状况。
如图5-2所示,有三条路径的跳数是一样的,所以RIP就认为这三条路径是一样的路径,但实际上各有好坏。
图5-2RIP的Metric
RIP的路由过程
RIP不支持可变长度子网掩码(VLSM)的网络路由,子网划分时遵守“连续子网”的规则。
其路由动作为:
发送更新
先判断待发送路由的主网络与发送端口的主网络是否一样,不一样的话只发送主网络地址,这也称为路由汇总(summary),不但可以减少通信量,而且可以有效地减少路由表的大小,因为对端无须知道该网络的每个子网信息,只根据该路由可将到各子网的数据包转发到本路由器,本路由器了解各子网的拓扑,可以实现正确的转发;
如果主网络一样的话再判断子网部分,两者子网掩码一样的话,广播该子网,不一样的话就丢弃该路由,因为如果广播出去,对端检查后安装了该路由的话既没有该子网的详细信息,也可能导致路由循环,所以不能发送。
接收更新
先判断收到的路由的主网络与接受端口的主网络是否一样,一样时用接收端口的掩码作为该路由的掩码,但如果该路由的主机地址部分非全零,将把该路由作为主机路由,掩码长度为32位;
不一样时(一般而言该路由的网络地址就是主网络地址,唯一的例外是应用了“ipunnumbered”命令的ppp线路上,发送过来的路由可能含有子网部分),检查路由表是否有来自其他端口的为该主网络的子网的路由条目,已有就忽略该更新,没有就用标准分类掩码安装该路由。
(但若是由ipunnumbered接口来的子网路由,由于无法确定掩码长度,则将该路由作为主机路由,掩码长度为32位)。
下面以一个具体例子看一下路由的更新检查:
图5-3RIP的路由更新
路由器1发送更新到路由器2时要执行检查:
131.108.5.0/24与S0口131.108.2.0/24的主网络部分一样吗?
一样,都是131.108,掩码长度一样吗?
一样,广播该网络131.108.5.0。
对于137.99.88.0/24网络,主网络部分为137.99与出口的131.108不一样,所以只广播网络137.99.0.0,这也称为路由汇总(summary)。
再看路由器2收到路由器1的更新时也要执行检查:
137.99.0.0的主网络与131.108.2.0一样吗?
不一样,路由表中有来自除S0以外其他端口的主网络为137.99的子网路由条目吗?
没有,那么将255.255.0.0作为该路由的掩码,安装该路由条目。
131.108.5.0与131.108.2.0两者的主网络部分相同吗?
相同,用S0口的掩码255.255.255.0作为该路由的掩码,安装该路由条目。
可变长度子网掩码(VLSM)
所谓变长子网掩码(VLSM)是指统一主网络地址下的子网划分应用了不同长度的子网掩码,一般在大规模的网络中使用,以充分利用IP网络地址。
RIP1路由协议不支持VLSM,因为通告路由的掩码长度与发送接口的掩码长度不一样,导致该路由不被通告。
下图就是应用VLSM的网络拓扑:
图5-4RIP1路由协议不支持VLSM
网络131.108.0.0划分为四个子网,网络掩码长度不同,三个子网的网络掩码长度为30位,一个子网的网络掩码的长度为24位。
当路由器1在发送路由更新到路由器2时执行如下的检查过程:
首先检查131.108.5.0/24与发送端口网络131.108.6.0/30两者的主网络地址是否一致?
是一致,检查掩码长度是否一致:
不一致,路由器1不通告该路由。
再检查131.108.7.0/30与发送端口网络131.108.6.0/30两者的主网络地址是否一致?
是一致,检查掩码长度是否一致;
一致,路由器1通告该路由。
以上检查过程决定了路由器1的通告只包括131.108.7.0一条路由。
在路由器1上执行debugiprip调试命令可以看到实际的路由通告情况:
RIP:
sendingv1updateto255.255.255.255viaSerial0(131.108.6.2)
subnet131.108.7.0,metric1
观察路由器2的路由表可以看到实际的路由安装情况,以下为执行showiproute命令的输出结果:
131.108.0.0/30issubnetted,3subnets
R131.108.7.0[120/1]via131.108.2.2,00:
00:
08,Serial0
C131.108.6.0isdirectlyconnected,Serial0
C131.108.2.0isdirectlyconnected,Ethernet0
这种情况下为达到网络的互通,可以使用静态路由的方法,但最好的解决办法还是使用统一长度的子网掩码,或者使用支持VLSM的路由协议,如RIP2,EIGRP。
OSPF等。
不连续子网
路由更新时的检查过程决定了RIP1不支持VLSM,也不支持对于不连续的子网划分,所谓不连续的网络是指任意的两个主网络相同的网络之间有其它的主网络的存在,在如下图所示的网络拓扑中,网络131.108.0.0被网络137.99.0.0隔开,所以131.108.0.0就是不连续的网络。
图5-5RIP1不支持不连续子网
路由器1通告网络131.108.5.0时,由于其主网络部分131.108与发送口的主网络部分137.99不一样,因此路由器1只通告网络131.108.0.0,用debugiprip可看到路由器1实际的通告内容:
receivedv1updatefrom137.99.88.1onSerial0
131.108.0.0in1hops
当路由器2收到该通告路由时,检查其主网络地址是否与接收端口的主网络一致,发现不一致再检查路由表是否存在该主网络的子网路由条目,由于存在131.108.2.0/24路由条目,所以该通告路由被忽略。
同样路由器2也不能将其局域网路由通告到路由器1的路由表中,因此两边的网络不能够互通。
解决办法为使用静态路由。
RIP路由表的建立
RIP路由表的建立过程如下:
●当路由器最初引导时,它所知道的唯一的网络是直接与之相连的网络。
RIP路由表包含目标网络、到目标网络的跳跃计数或度量,以及包被发送到目标网络应经过的接口。
●每30秒,RIP将使用图5-4中的格式广播每个接口的整个路由表。
一个RIP消息可包含至多25个网络。
如果路由表包含多于25个条目,那不得不传输多个RIP消息。
●当路由器接收一个RIP消息时,使用简单的一个算法来确定是否应该把路由器增加到路由表中:
l)如果要更新的路由不在路由表中,那么,把路由添加到表中,并把度量值增加1。
2)如果要更新的路由在路由表中,那么只把它添加到本地路由表中。
如果度量值小于当前路由的度量值,且更新是在不同的接口接收到的,那么,把路由添加到路由表中,如果更新是在与路由表中某个接口相同的接口接收到的,那么,接受该路由。
路由回路
图5-6路由回路
1)如图5-6所示,当RouterC的E0端口down掉了,便失去与10.4.0.0网络的连接。
2)如果RouterB这时发送路由更新(该更新信息包里包含了到网络10.4.0.0的路由信息,跳数为1),RouterC就会接受该信息(因为接受到的路由信息更新包里的有关网络10.4.0.0的路由比自己的要好),并将到网络10.4.0.0的路由安装到自己的路由表里。
(这时,在B和C之间便出现了路由环路。
)
3)此时,RouterC将发送新的路由更新信息,可以到达网络10.4.0.0,且跳数为2。
4)RouterB在收到这个更新信息之后,因为和路由表里原有的路由信息属于同一个端口,所以就会接受,并放入自己的路由表(此时,跳数为3)。
5)如此反复,B和C中有关网络10.4.0.0的路由信息的跳数,将不断增大,直到无限大。
针对以上出现的问题,可以采用以下几种办法加以解决:
●设置跳数的极限值:
将跳数的极限值设为16,当跳数达到16时,就说明网络已经不可达,将不再进行发送。
●水平分割(HorizonSplit):
水平分割是用于解决上述问题的技术,利用这种方法,路由器将不再通过它得知路由的接口去宣告路由。
这将防止路由器B宣告到网络10.4.0.0的路由回到路由器C。
然后,在30秒内,A将宣告到网络10.4.0.0的跳跃计数是16,即其他Router宣告网络10.4.0.0是不可到达的。
●毒性逆转(PoisonedReverse):
RIP协议亦使用毒性逆转(PoisonedReverse)来解决这些问题。
毒性逆转(PoisonedReverse)是设置那些不可达的网络跳数设置为16,收到此种的路由信息后,路由器会立刻抛弃该路由,而不是等待其老化时间到(AgeOut)。
●触发更新:
RIP协议可以使用来加快路由信息在RIP路由域中的扩散,当每个RIP路由器检测到某个接口正在或已经停止工作,或者是某个相邻节点瘫痪了,或者是一个新的子网或邻居节点加入进来,这时它将立刻发送一个“触发更新”,这将大大的加速了网络的收敛速度。
定时器
RIP使用一些定时器来创建和管理路由选择表。
下面的输出信息显示了所用的定时器:
ZXR10#showiprip
ripversion:
2
updatetimer:
30seconds
invalidtimer:
180seconds
holddowntimer:
180seconds
flushtimer:
240seconds
刷新定时器(updatetimer)
RFC协议规定每隔一定的时间间隔发送一次路由信息的更新报文,这个过程称为路由信息通告。
更新报文使用UDP端口520,所有RIP信息被封装在UDP段中。
RIP定义了2个信息类型:
Requestmessage和Responsemessage。
Request被用来要求邻居路由器送Update包。
Response用来传送Update包。
这个时间间隔由刷新定时器(updatetimer)控制,缺省为30秒。
严格地讲,刷新定时器随机产生一个介于约25到30秒之间的时间值,借用这种差异来扰乱路由表的同步。
当共享同一个广播域的多个路由器开始同时发送它们的广播刷新报文时,将会导致传输阻塞。
失效定时器(invalidtimer)
失效定时器被用作迟滞机制。
这个定时器会使路由信息在路由表内保持一段时间,而不被路由表刷新报文来更新。
如果一条已建立的路由在6个刷新间隔内仍没有被刷新,这条路由将被标示为不可达,但它仍存在于路由表中。
抑制定时器(holddowntimer)
当路由表中某条路由被标示为不可达时,触发抑制定时器。
抑制定时器和清除定时器用来计量该条路由彻底从路由表中删除前的时间。
当网络路由处于抑制状态时,关于该路由的刷新就会被忽略。
抑制定时器计时终止后,该路由仍将作为一条可能已经断掉的路由保持在路由表中,但是,任何一条接受到的网络刷新都将是可用的。
清除定时器(flushtimer)
当路由表中某条路由被标示为不可达时,触发清除定时器。
在抑制定时器计时终止后的60秒中,路由器如果没有收到那条被标示为不可达路由的刷新报文,则彻底清除这条路由。
RIP版本2
RFC1723(1994)包含RIP版本1的扩展(即RIPv2)。
最显著的是RIP消息格式(图5-7)。
其中带阴影的条目是在版本2中所做的补充。
路由标志可用于指出从其他RIP路由器,或从另一个IGP,如OSPF,或者从EGP如BGP得知的路由。
子网掩码大概是最重要的补充,允许设计者在RIP版本2中使用VLSM。
不幸的是,RIP版本2仍然受到RIP版本1的其他限制。
RIP可安全地用于小网络,但若有其他选择的话,则应当使用别的。
RIPV2协议规定RIP报文的格式如下:
SubnetMask
NextHop
SubnetMask:
可达目的地址的掩码,IPAddress和SubnetMask是一个地址/掩码对,共同标识一个可达的网络地址前缀。
当取值为0.0.0.0时,该路由条目没有子网掩码;
NextHop:
到达该可达路由的更好的下一跳的IP地址。
对一般的可达路由,NextHop=0.0.0.0,表示下一跳的IP地址就是发布该路由信息的路由器地址;
对于公共访问介质(如以太网、FDDI等)上的路由器扩散路由信息时,若某路由信息是由该公共访问介质上的某路由器传送来的,则在该公共访问介质上往其它路由器进一步扩散该路由信息时,下一跳IP地址NextHop应为先前的路由器地址,而不是目前发布该路由信息的路由器地址,以使该路由上的IP报文在途经公共访问介质时,直接送往前一个路由器,不需经由这个多余的中转路由器,此时,NextHop不再为0.0.0.0,而是前一个路由器的IP地址;
在RIP2中,增加了口令和MD5的安全认证机制,其格式是将RIP报文头后面的第一条路由信息更换为安全鉴权,这样一个RIP报