您的位置:首页 > 其它

CCNA系列课程(5)IP路由基础 推荐

2009-07-02 14:58 267 查看
第五节课 IP路由
杜飞
2009年7月2日
[align=left] 从今天开始,我们就进入了另一个课题:路由协议,在整个网络中路由和交换是重要的两个部分,我们第四节课中介绍了交换的相关知识,今天开始来讨论一下路由协议的一些相关知识点。[/align]
[align=left]什么是路由?路由是指导IP数据报文发送的路径信息。如图所示: [/align]



[align=left] 选择一个将数据包发往某个目标网络段或主机的路径就是路由的过程。用户产生的数据流比较文件,视频,Email等应用被从一个源地址转发到另一个目标地址,用来表示源和目的地的是IP地址,因此我们认为路由的过程就是将不同的IP地址网段的IP包进行转发。就相当于我们一个地方出发去另一个地方一样,会有很多路,那么你就需要从中选择一条你认为比较合适的路。那么实现这一功能的设备我们就称之为路由器。所以我们称路由器是数据包的运输工具。 [/align]
[align=left] 路由器中有个路由表,作用是表明你从源地址到目标地址应该怎么走,相当是一个导航仪,路由器只要根据这个路由表就知道这个数据包应该转发到哪个地方?路由器如果要想管理这些路由表必须使用路由协议,所以路由协议的作用是:进行路由选择以及管理路由表。也就是说如果一个数据包交给了路由器,路由器会利用路由协议来检查自己的路由表:从源到目标有没有相应的路径,一旦选择了一条合适的路径后,路由器就会路由被路由协议。 [/align]
[align=left] 其中这里出现了两个比较容易混淆的概念:路由协议和被路由协议:许多人刚开始接触的时候分不清楚,其实并不难,听我慢慢道来: [/align]
[align=left] 路由协议:是路由器中用来进行路径选择以及管理路由表所使用的协议,如:RIP,OSFP,EIGRP,IS-IS等。 [/align]
[align=left] 被路由协议:以最终选择的路径为基础,将数据从一个设备发送到另一个设备提供服务的第3层协议 [/align]
[align=left] “杜氏”总结:路由器可以使用RIP,OSFP,EIGRP,IS-IS等路由协议来学习最佳路径,并进行路由选择,而被路由协议负责将来自上层的数据及最佳路径封装到IP数据包中进行传输。 [/align]
[align=left] 也就是说像IP,IPX是支持路由的协议,所以称为可路由协议或被路由协议,那么有不可以被路由的数据包吗?有啊,如:NETBIOS就不能被路由, [/align]
[align=left] 那么路由器进行选路也就是路由器转发数据包的关键,起指导性的一个东西就是路由表。可以说路由表是一切的基础,如图所示: [/align]



[align=left] 我们的操作系统中也有路由表,如在windows中显示路由表的命令是:route print,显示结果如下图志示: [/align]



[align=left]我们路由器中显示路由表的命令是:show ip route 显示如图所示: [/align]



[align=left] 虽然windows中的路由表和路由器中的路由表长的不一样,但有两项必须要有就是目标地址和下一个接口,也称为下一跳。所以路由表的主要作用就是决定了到什么地方的数据包,怎么走!当然我们讨论的是路由器的路由表,包含以下重要内容: [/align]
[align=left]协议类型:创建路由条目的协议! [/align]
[align=left]目的地址:数据包的目的地!单播,广播路由都关心的是目的地址,只有组播才关心源地址。 [/align]
[align=left]下一跳:怎么走!数据包应该交给谁!下一跳可以是本地接口也可以是下一跳路由器接口地址。 [/align]
[align=left] 总结:路由表的作用:路由表中的每一个路由条目都指明了数据包到某个子网或者是网个主机应该通过路由器的哪个物理端口发出去,然后再到达下一个路由器或者是不再经过其他的路由器而是发送到与本路由器直接相连的目的主机。 [/align]
[align=left]我们结合图例来说明: [/align]



[align=left] 在上图中,如果10.120.2.0中的一台主机想发一个数据包到172.16.2.0中的一个主机上,首先这个数据包出来之来将给第一个路由器A,这个路由器会检查一下自己的路由表发现,发现这个数据包的目标网络是172.16.2.0这个网段,这个网段的数据包是通过自己的S0端口送出去的,于是通过自己的S0口送到了路由器B,此时路由器B再检查自己的路由表来决定下一跳的地址,当送到路由器C的时候也一样,一直转发到D上,D再检查自己的路由表会发现172.16.2.0是和自己直连的网络,于是就直接通过自己的相应端口把数据包送给目标主机。 [/align]
[align=left] 这里所谓直连的意思是说:某个网段直接和路由器的某个端口连在一起。不再经过其他的路由器,可以直接发给目标主机。如我们在一个房间里。我可以直接看到你,直接和你交流,不需要说我现在不知道你在哪儿,我把我所说的话再交给另一个,由另一个人再传给你! [/align]
[align=left] 但是一个路由器如果能能力发送数据包,将数据包从一个网段发给另一个网段,从一个地方发给另一个地方,路由器必须要知道以下几个东西: [/align]
[align=left]目标地址:这毫无疑问是最重要的,我们前面已经介绍了。 [/align]
[align=left]源地址: 这个数据包是从哪儿发过来的。 [/align]
[align=left]所有可能的路径: 从源到目标所有可以使用的路由信息,一般情况下都不止一条路。这和我们目常生活差不多,可以是火车,汽车,飞机,轮船等。 [/align]
[align=left]最佳路径:从所有可能的路由信息中找出一个最佳的路由项。 [/align]
[align=left]管理路由信息:涉及到如何选路的问题,这中间肯定会有一个标准:日常生活中肯定考虑到时间,费用,那么路由器中需要考虑的是:管理距离这个东西,我们来介绍一下管理距离 [/align]
[align=left] 想了解管理距离就要先了解一下路由条目的三种学习方式,也就是说路由器知道路由信息的三种方式: [/align]
[align=left]1 静态路由 在简单拓扑结构的网络里,网络管理员手动输入路由信息,由管理员手动设置,告诉路由器,去往某个主机或者某个网段的数据包应该怎么办!这种方法好处是无开销,配置简单,但只适合于简单拓扑的网络。 [/align]
[align=left]2 动态路由 在大型网络环境下,依靠路由协议,比如RIP,OSPF,BGP等路由协议来学习路由条目。特点就是开销大,配置复杂,但适合复杂网络拓扑结构的网络。 [/align]
[align=left]3 直接路由 路由器会自动学习周边网络的情况 无需人工维护,但只能发现本接口所属网络的路由。 [/align]
[align=left] 那如果在一个路由器中发现到达对方有多个路由条目同时存在,那可怎么办呢?不可能说同时使用多个,就像我每天从回龙观的住处到中关村的培训机构ITET,不可能说我同时又坐公交,又坐地铁。那这个数据包的转发也同样,必须选择一个最优的路由条目,在选择最优路由条目的过程中有两个关键条件需要考虑: [/align]
[align=left]1 比较不同路由条目产生的方式是否最可靠 [/align]
[align=left] 比如是由直连路由自动发现的,还是静态路由产生的,还是由路由协议产生的,再比如是由什么路由协议产生的,这都制约着这个路由条件能否被选中做为最佳路由来使用。比较路由条目产生方式的值在华为的路由器上我们称为路由优先级,在思科路由器上我们称为Distance。当然我们在此只讨论思科路由器。 [/align]
[align=left] Distance 在这里称为管理距离,Cisco路由器比较的就是这个Distance管理距离,什么意思,其实很简单,当一个路由表中有多个到达对方的路由条目时,思科路由器是从管理距离最低的协议获取的路由条目最先被选中,作为最佳路由使用,如默认OSPF的管理距离是110,EIGRP是90,IGRP是100,RIP是120,IS-IS是115,静态路由是0或者是1,直连路由是0,那么路由器就会查看路由条目的产生方式,如果有直连就走直连,否则就会采用静态路由配置的路径,依次类推。就相当于我从北京到安徽坐火车比坐船的路程要短,所花的时间也少,那么我肯定是坐火车!所以管理距离用于不同路由协议间之间的路由选择! [/align]
[align=left]2 在相同产生方式的情况下比较不同的链路的代价 [/align]
[align=left] 比较同一产生方式的不同链路的值,思科称为度量值(metric),华为称为路由权(cost)表示到达这条路由所指向的目的地址的代价,通过以下因素会影响到路由的权值:延迟、带宽、线路占有率、线路可信度、路数、最大传输单元。 [/align]
[align=left]直连路由很简单,在此不作解释,我们来看一下静态路由与动态路由,我们把静态与动态放在一起讨论,是为了容易对比 [/align]
[align=left]静态路由:管理在路由器上手动添加的路由信息以实现路由的目的。 [/align]
[align=left]动态路由:根据网络结构或数据流量的变化,路由协议会自动调整路由信息以实现路由。 [/align]
[align=left] 但是要注意一点的是,我们说静态路由需要管理员手动添加,但并不意味着动态路由就不需要管理员配置,同样也需要进行配置,只是当网络规模较大的时候,使用静态路由会使管理员的工作量很大,而使用动态路由可以让路由器之间自动学习路由信息!如现在规定我从北京到安徽只有一条路可以走,我们可以把它当成静态路由,但是如果有一天这条路不通了,由就无法通讯了,但是如果使用的是动态路由,如果这条路不通了,它可以根据网络变化来自动调整路由信息。 [/align]
[align=left] 静态路由相对来说还是比较简单的,我们先摆平它再讨论动态的,静态路由只适合于小型网络,而且没有过大的扩充准备,这是比较适合使用静态路由的。 [/align]



[align=left] 大家看这个图就比较适合使用静态路由,因为总共数据器的数量就两个,当然只要按照我这个图进行操作,当你把IP地址都配好之后,默认情况下,每个路由器上都会有两个直接路由,我们来查看一下: [/align]
[align=left]我们在路由器1上查看它的路由表情况:输入: show ip route [/align]



[align=left]我们可以看到此路由器上有两个直连路由,那么我们来测试一下网络的连通性: [/align]



[align=left] 我们可以看到路由器1到其他网络都是通的,是因为它知道查路由表发现有到达对方的直接路由,但是ping 10.10.20.1不通,是因为它不知道该如何到达这里! [/align]
[align=left] 既然没有直连路由,这里就只能使用静态,默认或者是动态路由,我们这里讨论的是静态路由,所以我们就给它们配置上一个静态路由 [/align]
[align=left]配置语句很简单: [/align]
[align=left](Config)# ip route 目标网络 子网掩码 下一跳 [distance] [permanent] [/align]
[align=left]注意: [/align]
[align=left] 目标网络可以是一个网段也可以是一个IP,但一般都不用IP,因为这样的话,就是到一个具体的主机,而不是到一个网段了,也就是说只能和某一个主机通讯,其他主机不能通讯。 [/align]
[align=left] 下一跳可以是本路由器的接口也可以是下一个路由器的接口地址(接口上所配置的IP地址。) [/align]
[align=left]Distance:可以指定管理距离 [/align]
[align=left]Permanent 永久生效,不论下一跳接口是否UP,都会路由表中显示这个路由条目。 [/align]
[align=left] 那么如果我们上图中的路由器1如果希望转发10.10.20.0网段的数据包就需要配置一个静态路由,我们看一下如何配置: [/align]
[align=left]Router(config)#ip route 10.10.20.0 255.255.255.0 10.10.1.2 [/align]
[align=left]将去往10.10.20.0的数据包送给10.10.1.2也就是与本路由器所直连的那个路由器的接口IP。 [/align]
[align=left]现在还不能使用,对方还必须设置一个回来的路由如在路由器2上: [/align]
[align=left]Router(config)#ip route 10.10.10.0 255.255.255.0 10.10.1.1 [/align]
[align=left]这时双方就可以进行通讯了:当然PC机上还需要将网关指向相应路由器的接口地址。 [/align]
[align=left]此时在pc2上再ping pc1就一切都OK了! [/align]



[align=left] 反之也一样!不再测试!那么如果想删除静态路由,则只需要在配置语句的前面加上no即可!如: [/align]
[align=left]Router(config)#no ip route 10.10.10.0 255.255.255.0 10.10.1.1 [/align]
[align=left]也可以不用下一跳! [/align]
[align=left] 在有的时候我们还会用到一个比较特殊的路由条目,我们可以认为是静态路由的一个特例,叫缺省静态路由,又称为默认路由! [/align]
[align=left] 默认路由:是没有找到任何匹配的路由条目的情况下使用的路由,即没有任何合适的路由时,才会使用默认路由,也就是默认路由的优先级是最低的,就是规定最低,老天爷规定的,还不够你臭屁的! [/align]
[align=left] 默认路由一般在家庭或是最终用户用的是比较多的,因为现在互联网上的路由信息太多,有几百万,甚至上千万,如果我们希望访问这些地方,那我们最终用户是不可能把存放这么多的路由项的。所以一般就设置一个默认路由,我不管外网有多少个地址,我统统交给它,至于说怎么到其他地方,就是它的事情了。所以咱们的PC机一般也有一个默认路由就是modem的地址! [/align]
[align=left]默认路由的设置更简单: [/align]
[align=left](config)#ip route 0.0.0.0 0.0.0.0 本路由器接口或是下一跳地址 [/align]
[align=left] 所以刚才那个例子,我们也可以使用默认路由来实现,但是注意在两端路由器上相互配置默认路由,否会出现路由环路的现象。 [/align]
[align=left]路由器1的配置我们还是使用静态路由,路由器2我们改为默认路由,使用命令如下: [/align]
[align=left]Router(config)#ip route 0.0.0.0 0.0.0.0 fa 0/0 [/align]
[align=left]此时再来测试即可: [/align]



[align=left] 刚才咱们花了一点时间介绍了一下静态路由和默认路由,下面咱们开始看看咱们路由中的重头戏: [/align]
[align=left]动态路由 [/align]
[align=left] 而路由选择算法是动态路由选择的基础,所以我们先来看看路由选择算法,基本上来说路由选择算法可以分为以下3类: [/align]
[align=left]距离矢量算法、链路状态算法、平衡混合算法,到底这3类分别是什么意思?有什么区别,我们一一来看: [/align]
[align=left]距离矢量算法(Distance Vector): [/align]
[align=left] 简称DV,什么叫距离矢量,很明显如果我们要想搞清楚距离矢量算法,就必须要知道什么是距离和矢量,其中这个距离指的是我这个路由器到目标网络有多远?至于矢量,我们以前学代数的时候知道矢量是有大小和方向的量,那么用在路由算法中指的是什么呢?指的是目标网络在我的哪个方向,而且这个大小会发生变化。我们来总结一下:DV在计算路由的过程中重点在于定期将路由表复制给相邻的路由器并且进行矢量累加。即运行DV距离适量路由协议的路由器会定期的发送路由信息给邻居,同时也会定期的从邻居路由器学习新的路由更新信息,通过对路由更新信息的学习和距离的累加来计算支往目的地址的代价。如图所示: [/align]



[align=left]现在三个路由器的路由表分别为下图: [/align]









[align=left][/align]



[align=left] 现在当我们把IP地址都设置好之后,各个路由器的路由表就如上表所示,但一旦选择使用距离适量的路由协议之后,每个路由器就定期将路由表自己的路由表复制给相邻的路由器并且进行矢量累加!我们继续来分析,每个路由器如何学得其他的路由条目,上表中的路由条目大家已经发现了,都是每个路由器的直连路由,但很明显这些路由信息还不完整,如route1就不知道如何到达10.10.30.0和10.10.40.0网段同理Router2也不知道如何到达10.10.10.0以及10.10.40.0,Router3也不知道如何到达10.10.10.10以及10.10.20.0,那么它们之间就需要利用DV算法来把路由表补充完整。比如说它们之间使用的就是RIP协议, [/align]



[align=left] 如果此时配置好了RIP协议,那么它们之间开始以广播的方式开始发布路由更新,我们以中间的Router2开始分析,它会把自己的两个直连路由分别发给Router1和Router3,Router1收到Router2发过来的20.0以及30.0的路由信息,然后再和自己的比较,发现原来自己已经有一个到达20.0的路由了,并且距离为0,因为是直连的,所以你发过来的我就不用了,但是30.0我没有,我就加到我的路由表中,并且距离应该是1,因为不是直连的,中间要经过一个路由器,对于Router3来说也是一样的分析,30.0我有了,我就不要了,但是20.0我没有,我就加到自己的路由表中,并且距离为1。同样Router2也会收到Router1和Router3的更新路由表,只不过,它只会留下它以前没有的10.10.10.0和10.10.40.0的信息。这样经过一轮之后,每个路由器的路由表就变成了下面: [/align]



[align=left] 然后战争没有结束,爱情仍在继续,Router2仍然会将自己收到的更新内容分别发给Router1以及Router3,那么Router1收到后10.10.10.0网段我已经有了,并且是直连的,就不要了,但是10.10.40.0我没有,我就加到我的路由表中并且原来的距离已经是1了,那么我还要在原来的基础上再加1,我也要再赚一个!嘻。。。。。那这个时间距离就变成了2,也就意味着如果到达10.10.40.0网段从我这儿出去还要再经过两个路由器。同理Router3也是一样,会把10.10.10.0加到自己的路由表中,并且距离也是2。那么这个时候路由表又变了: [/align]



[align=left] 那么到了此时,它们之间的路由条目就已经都一样了,分别都是10.0;20.0;30.0;40.0术语就叫做收敛!在一个网络中,如果网络发生了变化,那么运行同一个路由协议的路由表必须全部收敛完成,网络才可用,否则数据包是不能被路由的,所以收敛的速度也是路由协议中比较重要的一个元素!如果一个网络结构发生了变化,收敛的速度快,那么网络恢复可用性的速度就快,收敛的慢,那么网络恢复可用性的速度就慢! [/align]
[align=left] 也就是说从网络结构发生变化到网络中所有的路由器都知道这个路由表变化的时间就是我们所说的收敛时间!所以这个收敛时间肯定是越小越好!注意一定要是所有的路由器的路由表都同步! [/align]
[align=left] 那么每个路由器经过一系列的学习之后路由条目就一样的了,但是不一样的是什么呢,是距离,有的是0,有的是1,有的是2,这分别代表什么意思呢,其实大家已经知道了,这就是咱们前面所介绍的metric值,度量值,也就是在同一个路由协议里评价一个路由条目好坏的一个标准!成本越小,数字就越小!我们日常生活中也是不论做什么事都是成本越低越好,这里也是一样,明白人不用细说!嘻。。。。。 [/align]
[align=left] 大家通过刚才的分析过程也看到了路由表的更新过程是通过其他路由器一步一步实现。而且一旦网络结构发生改变就要将改路由表的再次更新,这是肯定的,因为网络结构发生变化了就意味着可能是网络路径发生改变了,可能有的路不通了,必须要更新大家的路由器,那么其中一个路由器收到更新后,要在下一个周期后再把这个更新传给其他的路由器,直至每个路由器都更新完毕。因为是定期发送更新数据包,所以动态路由会占用一定的网络带宽。那么其他路由器收到这个更新后开始用它来更新自己的路由表。这里大家也可以看到,路由器不会自己去发现网络发生变化,必须要由其他路由器来告诉它,它再来进行更新!这样有什么问题吗?有!就是容易产生路由环路的问题,这又是什么东西?大家一听肯定就知道这不是一个好东西,就像我们以前所说的死循环呀,网络环路呀差不多,都是一个意思,路由环路大体意思是说一个数据包想发给目标主机,但因为产生了环路,就在几个路由器之间游荡,就是到不了目标主机!那么在这里又是怎么回事?听我慢慢道来: [/align]
[align=left]我们还是从上面的那个图开始分析: [/align]



[align=left][/align]



[align=left] 现在路由已经收敛成功,也就是说每个路由器的路由表都已经同步了,开始正常工作了,但是这个时候Router3所连接的10.10.40.0断开了,发生故障,不能通讯了!那么这个时候Router3的路由表应该就如下所示了 [/align]
[align=left][/align]



[align=left] 也就是说10.10.40.0不可用了,也就意思着10.10.40.0不能通讯了,但是咱们讲了动态路由有路由学习功能。当了一个周期后,Router2会将自己的路由信息发给Router1以及Roter3,至于Router1的死活咱们就不管了,我们来分析一下Router3;Router3收到之后发现我到达10.10.40.0是不可用了,你可以到,那么我就把你的路由信息加到我的路由表中,这样路由表就发现改变了,如表所示: [/align]
[align=left][/align]



[align=left] 学习过来后还将距离改为2,为什么呀?因为Router2原来的距离是1,复制过来以后肯定要再加1!然后如果要真正发数据包给10.10.40.0时,就通过自己的S0口发出去了,发给谁了,发给Router2了,那Router2收到这个数据包后也查一下自己的路由表发现通过自己的S1口可以出去,大家通过看图可以发现,S1连接的是谁?是Router3,所以又交给了Router3,那么Router3再交给Router2。。。。。。 [/align]



[align=left] 那么这样的话,就进行了死循环,无限的循环下去,所以必须要有一个机制来解决这个问题, [/align]
[align=left]路由环路的解决方法 [/align]
[align=left]解决的方法主要有以下几种: [/align]
[align=left]Split Horizon:水平分割 [/align]



[align=left] 水平分割,它规定由1个接口发送出去的路由信息不能再发回这个接口,这个办法减少了路由信息的不正确性和负载。我们来分析一下,10.10.40.0这个网络的路由信息都是通过Router3的S0口发出去的,就规定不能再发给Router3的S0口,这样就可以避免环路。 [/align]
[align=left]Route Poisoning路由中毒: [/align]
[align=left] 通过将断开的网络地址的路由距离设置为无穷大来阻止网络循环。那有的朋友要问了,这怎么可能避免环路了,这里还用到了一个小技术叫毒性逆转,如一个路由器发现一个网络地址的距离设置为无穷大了,就认为这条网络地址不可达了,也会将自己的相关路由信息设置为down 不可用,由刚才的拓扑图可知10.10.40.0不可用了。那么Router3就将10.10.40.0的路由设置为无穷大,然后Router2仍然会将自己的信息发给Router3,但是此时Router3就会将无穷大的信息发给Router2,那么Router2只要看到这个信息就认为这个网络地址不可达了,这样就保证了所的有都知道那条不可达的路由信息,来阻止循环。 [/align]
[align=left]Holddowns:抑制计时 [/align]



[align=left] 分析:当一条路由信息无效之后,一段时间内这条路由都处于抑制状态,即在一定时候内不再接收关于同一目的地址的路由更新,因为此时再接收到的更新也可能是不正确的。如果在抑制时间内网络恢复正常了,此时Router3会将自己的路由更新正常,然后再去更新其他路由器的路由信息。 [/align]
[align=left]Triggered update:触发更新 [/align]



[align=left] 分析:触发更新和一般的更新是不一样的,当路由表发生变化时,更新报文会立即广播给相邻的路由器,而不是等30秒。同样,当一个路由器刚启动RIP时,它广播请求报文。收到此广播的相邻路由器会立即应答一个更新报文,而不是等到下一个更新周期。这样,网络拓扑的变化会最快的在网络上传播开,减少了路由回环产生的可能性。 [/align]
[align=left]Maximum Hop Count:最大跳数 [/align]
[align=left] 这个原理很简单就是指定一个最大跳数来阻止循环,我们前面讲产生循环只要是这个距离不断的往上加,没有限制,那现在我们来给它加上一个限制,如RIP定义的最大跳数为15,第16跳就为不可达,这样也可以在一定程度上去除路由循环的问题! [/align]
[align=left]那么以上我们讨论的是距离矢量协议以及几种路由回环的解决方法!再往下咱们来看一下另一种动态路由算法: [/align]
[align=left]链路状态路由算法 [/align]
[align=left] 链路状态路由协议是目前使用最广的一种域内路由协议。但就其理论来说应该属于CCNP的内容,咱们在这里就简单的看一下: [/align]
[align=left] 链路状态协议和刚才介绍的距离矢量协议是不同的。在DV算法中,每个路由器是将自己的更新路由表发给其他路由器,而链路状态协议不是,它将将它到周围邻居的链路状态向全网的其他路由器传递,也就是说DV传递的是具体的路由条目,而链路状态传递的是一个链路的状态,说的形象一点,传的是一个“地图”。当然在链路状态中术语叫LSA,链路状态宣告,告诉我的邻居,我还有哪些邻居?我连接的有哪些网段?也就是说我所知道的网络的拓扑结构的详细情况发给对方,然后我的邻居再将这些信息再告诉它的邻居,这样网络中的路由器就会得到网络中比较精确的一个网络拓扑状态。举个例子来说,在实际生活中,我们每个人对我们所生活的这一块区域是比较熟悉的,但对离你比较远的区域是不熟悉的,那如果你有一天要去某个地方办事,但你不知道该怎么走?但你的一个朋友对那个地方比较熟悉,他有可能会给你画一张那个地方的地图,那么你通过他的描述就可以计算我应该怎么去那儿,路径应该怎么走,等等信息!所以你得到的是一个地图,而不是一个具体的路径,这和链路状态是一致的,每个路由器得到的也是一个网络的“地图”,也不是一个具体的路由条目。然后根据这个地图来计算去对方应该怎么走,这个计算还是比较精确的。主要是使用Dijkstra算法来查找到达目标网络中的最佳路由。所有的路由器拥有相同的拓扑后,把自己放进树中的根里,然后根据每条链路的耗费,选出耗费最低的做为最佳路径。然后把这个最佳路径放进自己的路由表。这个计算用的是这个链路上的带宽,如用一个常数去除带宽,得到的数越小,就说明代价越小。就会优先选择此条链路。在这里我们结合OSPF协议来说,每个运行OSPF协议的路由器中都存放着三张表: [/align]



[align=left] 第一张表是邻居表,记录着它的邻居信息;第二张表是链路状态数据库又称为拓扑表,记录着网络的完整的拓扑结构,并且在同一个区域内的每一个路由器的这个拓扑表应该是一样的;第三张表是路由表,是根据拓扑表所描述的信息然后根据带宽来计算去到达对方的最佳路由然后存放到路由表中。所以对于运行OSPF协议的路由器来说这三张表非常重要,并且它们不会像DV一样每隔一个周期就发送一个路由表的信息,在OSPF的网络里只要网络是稳定的,就不会发LSA宣告,只有当网络拓扑发生改变时才会发送相应的LSA宣告。关键是每个路由器自己计算如何到达对方,这做是比较科学精确,不会像DV算法存放回环的问题!但是要求运行链路状态协议的网络必须有一定的层次结构,要求分为两个层一次,一个是骨干区域,其他的为非骨干区域也称为普通区域,一般来说骨干区域都定义为Area0,普通区域为Area1,Area2……即可,并且严格规定普通区域必须要和骨干区域Area0相连。为什么采用区域的概念,主要是因为在链路状态路由协议中,所有的路由器都保持有LSDB,也就是网络拓扑结构,路由器越多,LSDB就越大,这可能对了解完整的网络信息有所帮助,但是随着网络的增长,LSDB数据库就会显的庸肿,而且不利用网络扩展,所以就引入了区域这个概念。 如图所示: [/align]



[align=left] 在某一个区域里的路由器只保持有该区域中所有路由器和链路的详细信息和其他区域的一般信息。当某个路由器或某条链路出故障以后,信息只会在那个区域内传递,该区域之外的路由器不会收到该信息。所以OSPF必须要求层次化的网络设计,而且普通区域之间是不能连接的,它们都必须通过backbone area0进行连接。这中间用到两个术语 [/align]
[align=left]BR:骨干路由器,同骨干区域中的路由器 如上图中的A和B [/align]
[align=left]ABR:区域边界路由器,用来连接骨干区域和普通区域的路由器,上图中的 C D E [/align]
[align=left]链路状态路由协议的优势是: [/align]
[align=left]1 对网络发生的变化能够快速响应,当网络发生变化的时候发送触发式更新。 [/align]
[align=left]2 路由没有环路 因为每个路由器都知道整个网络(整个区域的网络)的拓扑,LSA是有序可靠的传递。 [/align]
[align=left]3 层次化的设计更加有利于网络的扩展。 [/align]
[align=left]以上是关于链路状态的一些浅显的分析,还有些内容我们会结合OSPF再做讨论。 [/align]
[align=left]平衡混合算法(Balanced Hybrid [/align]
[align=left] 思科公司提供了平衡混合路由算法,它具有距离矢量和链路状态两种路由选择协议的特点。平衡混合路由选择协议使用具有更精确度量标准的距离适量来确定目的网络的最佳路径。但是,它们与大多数距离矢量协议不一样的地方是它们使用拓扑改变来触发路由表的更新,而不是周期性的更新,并且收敛速度快,它与距离矢量以及链路状态协议不同的是使用更少的带宽、内存和处理器开销。平衡混合协议的例子有中间系统到中间系统(IS-IS)和增强内部网关路由选择协议(EIGRP)[/align]
[align=left]至于常见路由协议RIP,OSFP,EIGRP协议的具体配置方法,咱们且听下次分解![/align]
杜 飞
2009-07-02
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息