路由信息协议(更新).doc_第1页
路由信息协议(更新).doc_第2页
路由信息协议(更新).doc_第3页
路由信息协议(更新).doc_第4页
路由信息协议(更新).doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

路由信息协议(Routing Information Protocol)本备忘录的状态本备忘录描述了一个已经存在的协议,它用以在网关(gateways)和其他主机(hosts)间交换路由信息。它被作为在Internet开发网关软件的基础。引用本备忘录没有限制。目录1. 简介1.1. 协议的局限性1.2. 本文档的组成2. 距离向量算法2.1. 拓扑结构改变时的处理2.2. 避免不稳定性2.2.1. 水平分割2.2.2. 触发更新3. 协议详述3.1. 信息格式3.2. 考虑地址3.3. 记时器3.4. 输入进程3.4.1. 请求3.4.2. 回应3.5. 输出进程3.6. 兼容性4. 控制功能综述本备忘录包含以下内容:- 说明一种已经被广泛使用而没有被正式成文的路由协议和算法,- 改进算法以提高其在大型网络中的稳定性。这些改进不会引起已有网络的不兼容,这些改进可以和原有的实现方式容为一体。- 建议一些功能以提供更好的配置和控制,这些功能用以解决在NSFnet通讯中显示出的问题。当然,它们应当提供更通用的功能。这里提到的路由信息协议(RIP),是由伯克莱(Berkeley)4.3的“routed”项目发布的。当然还有很多其他的实现方式。很不幸,多种实现在细节上有很多不同。这里描述的是各个实现功能上的组合。我们相信根据本文设计的程序可以和其他RIP的实现协同工作。本文对度量(metrics)增加采取了与大多数实现不同的视角。通过对本地网段的度量做相应的调整,保持了和其他实现方式的兼容性。详见3.6节1. 简介本备忘录描述了一种使用Bellman-Ford(或称为距离向量)算法的协议。这种算法早先在ARPANET上被用于计算网络路由信息。具体的协议描述、包格式是基于伯克莱(Berkeley) UNIX的“routed”项目。这已经成为了网关和主机间交换路由信息的事实标准,用以不同厂商的网关产品间通讯。虽然,同一厂商的产品往往使用其自己的协议。这个协议是作为“内部网关协议(interior gateway protocol)”而使用的。如当前Internet般的大型网络,是不可能在整个网络上使用一种单一的路由协议的。网络将被分成为一系列的“自治系统(autonomous systems)”。每个自治系统都被赋予为一个实体,提供技术上和管理上的控制。每个自治系统可以有不同的路由方式。在自治系统中使用的路由协议被称为内部网关协议(IGR)。另一种路由协议面向自治系统,最早的这类协议是“EGP(外部网关协议/exterior gateway protocol)”,目前还在Internet上使用。这些协议现在被叫做自治系统间(inter-AS)路由协议。RIP在同类协议中被设计为适合于中等规模网络使用。适合于那些网络间连接线路的速度差别不大的网络作为IGP。关于RIP适用条件的详细说明见:3 Braden and Postel。RIP使用一类叫做“距离向量”的算法。这类算法最早是由Ford and Fulkerson 6提出的。所以这也被称为Ford-Fulkerson算法。有时也被称为Bellman-Ford算法,这是因为这一描述是基于Bellman公式。(这一领域的介绍见1)其描述文档见2,该文讲述了路由算法的数学模型,并描述且证明了算法中的变量,及其他相关内容。该算法的最初实现在1969年被用于ARPANET。这一协议家族还包括Xerox网络协议(XNS),PUP协议(见4)。一个较新的版本使用了XNS的结构,并更名为路由信息协议(见7)。Berkeley的算法与其大致相同,不过将XNS的地址转换为一种更通用的格式用以包括IP等地址,并将路由更新时间限定在30秒。因为其相似性,RIP这一名称被用于XNS协议和其他协议中。RIP被设计为在基于IP的Internet中使用。Internet可以被理解成通过网关相连的一系列网络。在这里网络可以是点对点的连接,或复杂些的网络如以太网或ARPANET。主机和网关使用IP地址在网络中出现。路由是指主机和网关决定向何处发送包的方法。当目标在主机或网关直接相连的网络时,包将被直接发送到目标。令人感兴趣的是,当目标不直接可达时,主机或网关将试图将包发往更靠近目标的网关。路由协议的目标很简单:支持需要被路由的信息。1.1. 协议的局限性本协议不解决所有的路由问题。如上所述,是被设计为适合中等规模网络做为IGP使用。另外,还要注意一下限制:- 协议限定网络最大路径为15跳。设计者认为这一协议不适合于大型网络。注意,这一限定声明是在假设经过每个网络的费用(cost)为1,正如RIP一般配置的情况。如果管理员选择了较大的费用,15的上限可能成为问题。- 协议使用“记数到无穷大”表示一些特殊情况(将在下一节中说明)。如果系统中有几百个网络,路由回路(routing loop)将会充斥其间。解决路由回路或需要很多时间(如果路由更新的频率受到限制),或需要很多带宽(如果每次改变都发送更新)。这样在回路被纠正前会消耗很多带宽。我们相信,在现实情况下,这不会产生问题(除非是低速线路)。即使这样,这个问题还需要被认真对待,而且使用多种预防措施来避免在大多数情况下出现这样的问题。- 协议使用固定的“度量(metrics)”来描述不同的路径。当路径选择需要基于实时参数,如:延迟、可靠性、负载时是不适合的。使用这类实时参数会明显产生不稳定性。1.2. 本文档的组成本文档的主体内容分为两部分,占据下面两章:2 从概念上了解距离向量算法的发展和原理。3 实际协议的描述这两章大致按这样的范围叙述。第2章给出了算法大致的数学模型,一开始先描述简单算法,然后再逐渐细致,呈“螺旋上升”的方法。第3章描述实际的协议,将第2章的内容具体化。通过第3章的描述,就可以实现整个RIP。2. 距离向量算法路由选择的任务就是找到一条从源到期望的目标的路径。在IP“Catenet model”中,这被简化为寻找网络间的网关。当通讯处于一个网络或子网时,由该网络特定的技术来解决路由选择问题。如以太网和ARPANET都定义了方法,使在一个网络中,任何源能够和指定的目标通讯。当源和目标不在同一网段时,IP路由选择才变得必要。这时,通讯必须通过连接网络的网关。当网络不邻接时,通讯将通过一系列用网关相连的网络。当通讯到达与目标处于同一网络的网关后,将使用该网络自身的方法到达目标。在本节中,术语“网络(network)”包含单一广播网络(如以太网)、点对点线路或ARPANET。其关键点是网络被IP看作为单一实体。即便在不需要路由(如点对点线路),或路由被设置为对IP透明的情况,都允许IP将整个网络作为是一个完全连接的系统(如以太网或ARPANET)。这里的术语“网络”和在讨论IP地址时使用的“网络”有所不同。一个单一的IP网络号可以分配给一组网络,用子网寻址描述个别的网络。而在这里,我们对子网同样使用“网络”这个术语。在网络间找到路由有多种方法。最常用的分类方法是按照网关间交换信息的不同类型。距离向量算法仅交换少量信息,每个参与路由协议的实体(网关或主机)都保留所有目标的信息。通常,同一个网络中所有实体的信息被汇总成一个路由项,用以表示到达该网络上所有目标的路径。这是因为对IP而言,一个网络内的路由是不存在的。路由数据中的每一个项都包含了到达目标的下一跳网关,以及衡量到达目标距离的“度量(metric)”。距离没有明确的概念,可以是到达目标的延迟、或发送信息的货币费用等等。距离向量算法的得名来源于比较不同的距离来得到最佳路径。此外,信息只在邻接,即共享同一网络的实体间交换。虽然路由通常是基于网络信息,有时也需要保持到达独立主机的路径信息。RIP协议对待网络与主机没有差别。不管是网络还是主机,RIP都交换其信息(但是,有一些实现不支持主机路由,见3.2节)。事实上,在数学模型中将其做转换是很方便的。当在抽象描述算法的时候,最好将到达一个网络的路由项看作为所有连接该网络的实体项的缩写。这是因为在IP层,一个网络内部没有层次结构。我们也将一个给定网络中的所有项赋予同样的距离。上面曾说到每个实体都要为每个路由项保留所有的信息。在实际中一般需要保留以下信息:- 地址:该算法的IP实现中,必须有主机或网络的IP地址。- 网关:到达目标的路由上的第一个网关。- 接口:到达第一个网关的物理网段。- 度量:表示到达目标距离的数值。- 时间:表示自从该项上次更新以来的时间。此外还包括多种标志和内部信息。这些信息在初始时包含了直接相连的实体。当从邻居网关接收到信息后,信息将会被更新。主机和网关之间的信息主要通过更新来传递。每个参与路由协议的实体都将自己当前的路由信息作为更新信息发送。这样仅通过与邻居实体交换信息,就可以得到整个系统的最佳路径。算法将在下一节中描述。如上所述,路由的任务是寻找到达最终目标的路径。距离向量算法是基于一张给出系统内各目标最佳路径的表。为了定义什么样的路径是最好的,需要对路径进行衡量。这就是“度量(metric)”。在简单系统中,常常使用的度量是计算信息需要经过多少个网关。复杂些的系统中,将信息传输所需的延迟、所需的费用等作为度量。还需要将各个跳数的“费用”相加。如果实体i、j直接相连而不通过其他网关,公式d(i,j)和i、j间的费用相关。在正常情况下,给定网络上的所有实体被平等看待,其d(i,j)表示使用该网络的费用,且其值相同。衡量一条完整的路径,要将各跳的费用相加。在本备忘录中,设定费用为正整数。用D(i,j)表示实体i、j间最佳路由的度量。这在每一对实体间都需定义。d(i,j)表示每一步的费用的和。当实体i、j直接相连时,d(i,j)表示其连接费用;对实体i、j不直接相连的情况d(i,j)为无穷大。(注意d(i,i)为无穷大,因为不认为一个节点直接连接到自己。)因为费用是可以累加的,下面列出的是最佳度量的计算公式。D(i,i) = 0, 所有的iD(i,j) = min d(i,k) + D(k,j), 不同的k最佳的路径是使d(i,k) + D(k,j)达到最小的邻居k。(这样的计算在路由器上会作多次)第二个等式中的k可以被限定为i的直接邻居,不然d(i,k)将是无穷大,总的等式不可能最小。计算就是基于这样简单的算法。实体i从其邻居k发送的信息中得到目标j的距离。当收到后,i加上i、k之间的费用d(i,k)。并比较所有的邻居取得最小值。在2中证明了,当拓扑结构不变时,算法可以在有限的时间内使D(i,j)正确汇聚。作者没有假设各个实体发送信息的次序,也没有指出何时重新计算最小值。基本上,实体将不断的发送信息并重计算度量,而且网络不能延迟这些信息(实体的崩溃将导致拓扑改变)。他们同样证明,除了可以肯定是非负数,不要对D(i,j)的初始值作出假设。事实上,不需要假设是很好也很重要的。不对实体发送信息的次序作出假设,可以使各实体按照其各自的时钟异步的运行算法;更新信息也可以被网络丢弃,只要不被全部丢弃。不对初始值作出假设,可以使算法处理拓扑改变。当系统改变后,路由算法可以从旧的状态向新的状态稳定。不然,可能会有导致不汇聚的情况。上面的算法(以及说明)都假设每一个实体都保持了从其邻居获得信息的所有备份,并在其中得出一个最小值。实际的实现不需这样,仅仅记住一个最佳度量,及发送这个度量的邻居。当发现一个更好(更小)的度量后再替换。这样可以不用存储所有邻居的信息而计算出最小值。上面的描述和实际的RIP协议还有一个不同:在描述中,每个实体有其自身的一项,其距离为0。而事实上一般不这样。回忆上面所说,同一个网络中所有实体的信息被汇总成一个路由项。考虑以下情况:主机或网关G连接到网络A上。C为使用网络A的费用(通常是1)。(再回忆:对IP而言,一个网络内的路由是不存在的,一个网络中的两个实体有同样的费用)在理论上,G可以得到网络A上所有实体H的信息,并认为到自身的费用为0。G将计算出到H的费用为C+0,G将仅维持一条到网络A、费用是C的项,而不是为每个H建立一项。这一项可以被认为是到达网络A上所有实体的汇总;唯一不能被汇总的项是到G自身,其费用是0而不是C。但我们从不使用0实体,可以将其和网络A的项合并。考虑这一策略的另一含义:因为我们不使用0实体,不作为网关的主机就不需要发送更新信息。不作为网关的主机(也就是只连接到一个网络的主机),只会发送自身的一项D(i,i)=0。因为这些主机只有一个接口,要到达其他网络的路径如果到达该端口也会被从同一端口返回。这样其费用就会比C大。所以非网关根本不需要参与路由协议。让我们来汇总一下主机或网关G的工作:对于系统中的每一个目标,G都保持当前的度量,和发送这一度量的邻居网关。如果目标在与G直接相连的网络上,G将使用表示网络费用的一项,而不使用任何网关。显然,当计算汇聚到正确的度量后,按这种技术记录下的邻居将是到达目标的路径上的第一个网关(如果有多条等价路径,第一个网关将是其中之一)。也就是说将通过网关可以用多少费用到达目标。仅当有更小的度量到达的时候,当前保留的度量才能被降低。度量也可能被增加,因为一开始的估计较小。可以做这样的规定:设当前到目标的路径是使用网关G,度量D;对于从其他网关得到的信息,只有当其度量比D好时才使用;而对于从G来的信息,不管好坏都将被使用。可以看到,通过这样的规定得到的路由表与保持所有从邻居得到的信息得到的路由表是一致的。(注意在这里的讨论中,网络被认为是静态的,系统中没有网络会失效。)以上是距离向量算法的简单概述。(这还不是RIP协议的描述,仍需要更精确的描述)。每一个参与路由协议的实体都需要按照下面的步骤。每个网关都必须包括,非网关主机也可以参与。- 保持到达系统中每个目标的表项。每一项都包括到达目标的距离和路径上的第一个网关。理论上讲,需要有指向自身,度量为0的一项。但事实上可以不包括。- 向每一个邻居周期性的发送路由更新。更新中的信息包括路由表中的所有信息。包含到达每个目标的项,及到达目标的距离。- 邻居G发送路由更新,将其度量加上G相关联的网络费用(是更新信息到达的网络)得到新的距离D。将结果与当前路由表中的项比较。如果D比现有的D小时,采用新的路径;即将新的路径改为使用G,距离D。当G=G时,使用新的度量,即使度量变大。2.1. 拓扑结构改变时的处理以上的讨论都假设网络拓扑是固定的。实际上,网关和线路经常会出错和恢复。我们需要对算法作出一些细小的变动来处理这些情况。在理论化的算法中包括了所有的直接邻居,如果拓扑改变,在下一次计算中就会有反映。而在实际算法中,简化了算法,仅保持给定目标的最佳路径。当包含在路径中的网关或网络崩溃后,计算将不会反映这一变化。算法依赖于其邻居发现度量改变,如果网关崩溃,就不会向其邻居报告变化。为了解决这类问题,距离向量协议必须使用路径时效来进行预防。不同的协议,其细节不同。例如,RIP网关每30秒周期性的向其所有的邻居发送更新信息。如使用网关G到达网络N,如果有180秒没有收到G的更新,就假设网关G或连接G的网络崩溃了。这样我们就可以标志路径无效。如果从另一邻居得到到达网络N的有效路径,就将其替代无效的项。注意因为信息在传输中可能被丢失,所以将等待180秒即使每30秒就将会有更新信息。仅因为一次信息的遗失而使路径失效是不适合的。正如我们下面将说的,将无效的路径通知其邻居是非常有用的。RIP和许多其他同类协议一样,通过在普通更新信息中标识网络为不可到达来实现。一个比最大的有效度量更大的数值用来表示不可到达,在当前的RIP中使用16。16虽然是一个非常小的数字,但在这里通常被称为“无穷大”,很多实现都是这样规定的。其原因下面很快就要讲到。2.2. 避免不稳定性上面描述的算法使主机、网关通过计算得到正确的路由表。但在实际使用中还是不十分实用。上面仅证明了路由表会在有限时间内汇聚,但没有保证其汇聚速度可以用于实用;对网段变为不可到达的情况也没有涉及。对算法进行扩展使其能够处理路径无效很简单。如上所述,选择一个表示“无穷大”的数值。这个数值必须比所有可能得到的实际数值要大。在本例中使用16来表示不可到达。假设一个网络变的不可到达,该网络的所有直接邻居将到达此网络的度量标为16。我们可以这样来分析:假设每个邻居网关有连接到一个虚网段的连接,其费用为16。因为这是连接虚网段的唯一路径,系统中的其他网关通过这些网关到达虚网段的费用将至少为16。离原始邻居网关相距一跳的网关的费用为17,相距两条的费用为18等等。对于超过最大值的费用都会被设为16。明显,到达虚网段的路径将都是16。很不幸,这样简单的方法不能解决在多长时间内汇聚的问题。在更深入之前,需要看一下一个例子(是从2中借鉴)。注意,下面的情况不会在现实中出现,从中可以明白新功能实现的必要。下面的字母是网关,连线是网络。A-B / / |C / C、D间线路的费用是10| / 其他线路的费用是1|/D|D: 直连, 1 直连, 1 直连, 1 直连, 1 . 直连, 1 直连, 1B: 不可到 C, 4 C, 5 C, 6 C, 11 C, 12C: B, 3 A, 4 A, 5 A, 6 A, 11 D, 11A: B, 3 C, 4 C, 5 C, 6 C, 11 C, 12问题在于:虽然B可以使用超时来去处失效的路径,但将使用太长的时间。一开始,A、C还是相信可以通过B可以到达目标,并使用度量3。下面B错误的认为可以从A或C到达目标,而且没有办法来解决。A、C当发现B的路径失效后,它们之间还会认为可以通过对方到达目标。虽然最后系统可以汇聚,但这将花去太多的时间。在最坏的情况下,当一个网络与系统的其他部分彻底失去连接时,将花费相当长的时间来使其他网络知道这一情况。这个问题叫作“记数到无穷大(counting to infinity)”。所以,所谓的“无穷大”需要选择的尽可能小。当网络彻底失去连接时,将尽可能快的记数结束。无穷大必须比实际可能的路径度量要大,但不应更大。其数值的选择是在网络大小和汇聚时间两者之间的折中。RIP协议的设计者认为这个协议不适用于直径大于15的网络。可以通过一些方法来解决这些问题。在RIP中使用了“带逆向毒化的水平分割(split horizon with poisoned reverse)”与“触发更新(triggered updates)”。2.2.1. 水平分割上面的问题之所以产生,原因之一是因为A、C相互错误的宣告可以到达D。可以通过下面的办法来避免这一情况。具体来说就是:不向发送该路径的邻居宣告该目标可达。“水平分割”就是不向发送该条路径的邻居网关发送包括该路径的更新。“带逆向毒化的水平分割”就是发送此类更新,但将其度量标为无穷大。如果A认为可以从C到达D,那么A就向C发送信息表示D不可达。如果C宣告的路径是存在的,那么C可能和D直接相连,或可以通过其他网关到达D。C的路径不能回到A,这样会产生回路。A通过向C宣告D不可达,就可以认为C的路径不通过A。前面讨论的是A、C在点对点链路的情况,当A、C在广播网,如以太网中时,在网络中就可能会有其他的网关。如果A有通过C的路径,A也会向网络中的其他网关宣告D不可达。网络中的其他网关会从C直接得到路径,而不需要通过A到达C。所以,如果A有通过C的路径,其他网关也就有了通过C的路径。这很幸运,C就可以通过广播向网络中的所有网关发送更新信息了。通常情况下,带逆向毒化的水平分割比不同的水平分割更安全。两个相连的网关相互发送度量为16的逆向路径,就可以直接避免回路。如果不发送逆向路径,错误的路径需要一段时间过后才能被消除。但是,毒化的逆向路径也有缺点:它增加了路由信息数量。考虑一个骨干网络连接了几幢建筑。每幢建筑中有一个网关连接着本地网络。网关的路由更新将广播到骨干网络上。每个网关都需要了解其他网关连接着怎样的网络。在使用普通水平分割时,只有被发送到骨干上的路由更新出现在路由信息中;而使用带逆向毒化的水平分割时,网关还要保存从骨干收到的很多度量为16的路径。随着系统的增大,这可能产生很多更新信息来表示不可达网络。在静态情况下,宣告度量为16的逆向路径不提供更多可用信息。在一个广播网络中如果有很多网关的话,这会需要额外的带宽。使用逆向宣告的原因使提高动态性能。当拓扑改变的时候,宣告不可使用的路径可以加快汇聚。但在一些情况下,网络管理员宁可汇聚减慢也要使路由负载减少。所以在实现中使用了普通水平分割,而不是带逆向毒化的水平分割;或者提供一个选项给管理员来选择。同样允许将两种情况混合使用,如在路由改变后的一段时间里使用逆向毒化,而后忽略。2.2.2. 触发更新带逆向毒化的水平分割可以避免两个网关之间的路由回路。但在三个网关的情况时,还会出现相互欺骗。例如A认为可以从B得到路径,B认为从C,而C认为从A。水平分割不能解决这样的回路。这样的回路只有当度量达到无穷大以后而认为不可达。触发更新试图加速这样情况下的汇聚。实现触发更新,需要加入如下规则:当网关发现路径的度量改变后,需要尽快地发送更新信息,而不管周期性信息发送的时间是否到达。(具体的时间根据协议不同,一些距离向量协议,如RIP,指定了一个很小的延迟,以避免触发更新占据过多的网络流量)。将这和计算新度量的规则结合。假设有通过网关G到达目标N的路径,如果从G得到新的更新,接收的网关必须相信这个新的信息,而不管这个度量比原来的好还是坏。当度量改变时,接收的网关也必须向它的每一个直接邻居发送触发更新。这将引起一系列的触发更新,很容易知道哪些网关和主机将参与这一系列触发更新。当网关G发现目标N的路径无效时,就向它的邻居发出触发更新。只有哪些认为要通过G到达N的邻居才相信这一信息,其他网关将忽略该信息,因为新的更新使用一个更差的度量。使用G到达N的邻居更新度量,并向他们的邻居发送触发更新。同样,只有使用这些路径的邻居才会注意这一信息。这样,触发更新将传遍所有使用网关G的路径。传播在使用其他路径到达目标N的地方停止。如果系统能够保证这一系列的触发更新发送,就可以保证记数到无穷大不会发送。错误的路径会马上被去除,也不会有回路。很不幸,事情没有这么巧。触发更新也许会和周期性更新同时发送;没有收到触发更新的网关还会发送不存在的路径。网关也许会先收到触发更新,在收到错误的周期更新。这将会产生局部的错误路径。触发更新不会发送的那么及时,而记数到无穷大总还会存在。3 . 协议详述RIP的目的是为在IP网络环境中的主机和网关交换信息而计算路径。RIP是一个距离向量协议,其主要功能在第2章中已经描述。主机和网关都可以实现RIP,在很多IP文档中,使用术语“主机(host)”来范指。RIP是传输“目标(destinations)”的路径信息,目标可以包括独立的主机、网络或一个特殊的默认路径。每个使用RIP的主机都有接口连接一个或多个网络。这些被成为“直接连接网络(directly-connected networks)”。协议就是使用这些网络的相关信息。信息中最重要的是度量(metric)或叫作费用(cost),网络的度量在整数1-15之间。大多数实现都使用1作为度量,新的版本中允许管理员为每个网络设定费用。除了费用,每个网络有一个IP网络地址和相对应的掩码,这是由系统管理员手工设置的,且与本协议无关。注意在3.2节中的规则:每个IP网络只有一个子网掩码,以及只有直接连接网络的子网掩码是已知的。但是,也有可能需要在一个网络中存在多种子网掩码;或需要知道远端网络的掩码。这需要修改协议使其传送子网信息,这样的修改提高了可用性。每个实现RIP协议的主机都有一张路由表,表中为每个通过RIP得到的目标建立一项。每一项中都至少有下列信息:- 目标的IP地址。- 度量,表示主机到目标的总费用。是从主机到目标路径上的各网络费用之和。- 到达目标的下一网关的地址。如果目标是直接连接网络,此项不需要。- 表示路径最近有改变的标志。被叫做“路径改变标志(route change flag)”。- 路径的有效时间。详见3.3节。主机使用与协议无关的信息建立直接连接网络的各项。在RIP中,直接连接网络的度量永远是1。复杂的度量可以用来表示一些特殊的网络,如不同的带宽和可靠性。也可以允许系统管理员输入额外的路径,这常是因为主机或网络在路由系统范围之外。除了在初始状态下的各项外,其他到达目标的项是由下面描述的算法增加和更新的。为了建立完整的路由信息,系统中的每个网关都要参与。不是网关的主机不一定需要,但很多实现都允许这些主机接收路由信息来维持路由表。3.1. 信息格式RIP是基于UDP的协议,使用RIP的主机都有一个路由进程在UDP端口520上发送和接收信息。所有直接发送到其他主机RIP进程的信息都使用目标端口520;所有的路由更新信息使用源端口520。主动路由更新信息的源、目标端口都是520;回应信息的目的端口使用发送者的源端口。特别的查询和调试信息可以不使用源端口520,但目标端口需使用520。协议中允许有“沉默”RIP进程。沉默进程是指平常不发送任何信息,但从其他主机接收信息。沉默RIP常被用于不作为网关的主机,它们需要接收路由信息来监视本地网关以维持正确的路由表。(见5描述了主机了解网络拓扑的多种方法)当网关只剩下一个网络连接而失去了其他连接的时候,就变的沉默了,因为这时它们已不再是网关。当然,在邻居网关需要依赖这些信息来判断失效的网络是否恢复的时候,不应当使用沉默。(伯克莱4使用路由包来监视点对点连接的操作。)包格式见图1。包格式中包含了网络信息,各域的大小被按字节写成。除非特别指出,域为二进制整数,按重要字节在前的Internet次序。0 1 2 3 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| command (1) | version (1) | must be zero (2) |+-+-+-+| address family identifier (2) | must be zero (2) |+-+-+| IP address (4) |+-+| must be zero (4) |+-+| must be zero (4) |+-+| metric (4) |+-+.从地址簇标识到度量的部分可以被重复25次。IP地址就是4字节的Internet地址。图1. 包格式每个包包含一个命令(command)、版本号(version)和可能的参数。本文档描述的是协议的版本1。细节的版本描述见3.4节。命令域表示包的用途,这里汇总了版本1中的命令:1 - 请求(request) 请求被响应者发送其全部或部分路由表。2 - 回应(response) 包含发送者的全部或部分路由表;可以是响应请求;或是更新信息。3 - 跟踪开(traceon)废止,忽略。4 - 跟踪关(traceoff)废止,忽略。5 - 保留(reserved) 被Sun系统使用,可以被忽略。后继版本的新命令会从6开始。在请求和回应中,包中的其他内容是目标的信息。列表中的每一项都包括了目标网络或主机,以及它们的度量。这一包格式可以使RIP能够处理多种协议的路由信息。不同的协议使用不同的协议簇号(address family identifier),本文档只描述IP协议,其协议簇号为2。(还没有关于其他类型的地址。)但为了将来,需要忽略不同协议簇号的信息(这些项的大小和IP协议一样)。在过滤掉不支持信息后开始信息处理。IP地址是4字节的,度量用来说明目标,其值在1到15之间;对不可达的目标,度量是16。由一个网关发来的路径总将取代同一网关发来的到达同一目标的路径。包最大可以有512字节,这只包含前面描述的部分,不包括IP和UDP头。网络信息可以被分为多个包传送,不必须连续,包可以被独立处理而最终得到正确结果。3.2. 考虑地址就象在第2章所说,距离向量路由可以用来描述独立的主机或网络,RIP协议对此都允许。在请求、回应信息中出现的目标可以是网络、主机或表示默认路径的特殊值。通常何种目标被允许取决于路由策略,很多网络不允许路由独立主机信息。如果给定网络上的每一个主机都可以通过同一个网关到达,也就没有必要使用主机路由。但在点对点连接中,可能需要网关到达特定的主机。是否需要这一功能取决于系统的地址和路由。如果不支持主机路由,将丢弃这一类回应(见3.4.2节)。RIP在包格式中不区分各类地址。下面几种都被标为“地址(address)”:主机地址子网地址网络地址0,作为默认路径每个RIP的实体都使用更精确匹配的信息来转发数据。也就是,当向一个目标转发数据时,先检查是否有相匹配的主机地址;再检查是否匹配已知的子网或网络地址;最后,如果没有匹配,才使用默认路径。当RIP接收到主机评估信息时,它将根据是否知道该网络的子网掩码来作出决定。如果知道的话,就可以就此知道地址的含义。如128.6.有着子网掩码255.255.255.0,那么128.6.0.0是网络地址;128.6.4.0是子网地址;128.6.4.1是主机地址。但当不知道子网掩码时,就会产生含糊。如果主机部分为非0的话,将分不清到底是主机还是子网地址。没有子网掩码,子网地址就无法识别,地址会被理解为主机地址。为了避免这样,不能向不知道正确子网掩码的主机发送子网信息。主机一般只知道直接连接网络的子网掩码,所以,除非做了修正,不应当向网络外发送该网络的子网信息。这种过滤发生在划分子网网络的边界,这些网关连接两个网络。在被子网化的网络里,每个子网被对待为独立的网络,每个子网的路由项由RIP传送。但边界网关向其他网络仅发送表示该整个网络的一项。也就是说,边界网关向不同的邻居发送不同的信息;对连接在子网化网络中的邻居,发送所有直接相连的子网信息;对其他网络的邻居,仅发送表示整个网络的一项,其度量一般是该网关连接的子网中最小的度量。同样,边界网关不应向其他网络发送其直接连接网络中的主机路径。这些路径应当被汇总在一条网络路径中发送到其他网络。我们不需要知道“远方”主机的路径(是指不在直接连接网络上的主机)。这些路径指出网络上的一部分主机可达,而另一部分不可达。特殊的地址0.0.0.0被用来描述为默认路径。当RIP更新不能包括所有网络的路径,或着一个或多个直接相连的网关被用来处理所有没有列出的网络时可以使用默认路径。网关可以产生地址为0.0.0.0的项,好象有这么一个网络连接一样。如何产生0.0.0.0的项是由实现者决定。通常,系统管理员将为0.0.0.0项指定一个网关,但也有其他方法。如可以认为宣告EGP的网关为默认网关,这允许网络管理员为各项选择度量。当有多个网关的时候,可以选择一个最好的。 0.0.0.0的项在RIP中被和其他项一样对待,只不过用来转发不匹配路由表中各项的目标。这一实现不是必须的,但被极力推荐。不支持0.0.0.0的实现必须忽略这一项,这些网关不能将这一项加入到自己的RIP更新中。管理员需要注意0.0.0.0的路由没有被传播到不应该的地方。通常,每个自治系统都有自己首选的默认路由,0.0.0.0项不应被传输过自治系统边界。但这不是本文档论述的范围。3.3. 记时器本节讨论被记时器触发的所有事件。每30秒,输出进程向每个邻居网关发送完整的响应。当一个网络上有多个网关时,它们往往会在趋向于在同时发送路由更新,这在进程启动后每30秒发生。但同步发送更新信息有缺点,这会在网络中产生不必要的碰撞和广播。通常有两种预防方法。- 用独立的时钟时钟产生30秒的更新,而与系统负载、更新花费的时间无关。- 将30秒添加小范围的偏移。每个路径都有两个时间相联系,“超时(timeout)”与“垃圾收集时间(garbage-collection time)”。在超时后,路径将无效,但还会在路由表中存在一小段时间,使邻居能够发现路径无效。当垃圾收集时间过后,路径从表中删除。当路径建立时,超时记时器开始记时,如有收到该路径的更新信息则重置记时器。如果记时到180秒,说明路径终止,删除进程开始。有两个原因可导致删除:(1) 到达超时 (2) 从当前网关收到度量为16的更新(见3.4.2节处理更新)。这两种情况都有下列时间发生:- 设立120秒的垃圾收集记时器。- 将路径的度量设为16(无穷大),这将使路径被删除。- 做标志此项以改变,输出进程将产生一个触发更新。在垃圾收集时间期满前,此项路径被包含在由主机发送的更新中,其度量为16(无穷大)。当该时间期满,路径从表中删除。在垃圾收集时间中,如果有到达该网络的新路径,可以替代原有路径,同时清除垃圾收集记时器。3.5节描述了触发更新前需要的延迟,虽然这也需要记时器,但还是放到3.5节中叙述。3.4. 输入进程本节描述处理从UDP端口520接到的信息。在做进一步的工作前,需要检查格式,这取决于包中的版本号。0 要忽略版本0的包,这是以前按不同机器指定的版本。1 需要处理的是版本1的包,要检查所有必须为0的域,如有非0值要忽略整条信息。1 版本大于1的包在后面会说明。对版本1而言,将忽略所有必须为0的域,因为新版本可能在其中放入数据。在做了版本号等的初步检查后,进程将根据不同的命令域做出处理。3.4.1. 请求请求是用来要求得到包含全部或部分路由表的回应。(注意:术语主机被用于所有主机和网关,一般非网关主机不发送RIP信息)。一般请求使用广播,通过UDP端口520发送。沉默进程不回应请求,沉默进程是指不需要了解其路由信息的进程。但考虑这样的情况,有监视程序想得到沉默进程的路由表,所以沉默进程不回应源端口是520的请求,但对其他端口的请求需要回应。请求是按项处理的,如果没有项就没有回应。有一特殊项,在请求中只有一项地址为0(意为不指定),度量为无穷大(指16),表示请求全部的路由表。这时调用输出进程向请求端口发送所有的路由表。除了这一特殊情况,处理过程都很简单。将请求项一个个处理。对每一项查找路由数据,如果找到对应项就将路由度量填入包的度量域中;如果没有就在其中填入无穷大(16)。处理完所有的域后,将命令改为回应发回到发来数据的端口去。处理指定目标和全部路由表的方法有所不同。如果处理全部路由表,是按照正常输出进程完成的,这包括水平分割(见2.2.1节)和子网隐藏(见3.2节),从当前项得到的路由不会显示。如果请求是特定项,就返回表中的项而不使用水平分割,并可能返回子网掩码。我们认为不同的请求是为了不同的目的。当主机启动后,它向每个相连的网络广播其请求以获得完整的路由表。我们假设完整的路由请求被用来更新主机的路由表,所以需要使用水平分割和其他过滤。而指定目标请求仅被诊断软件使用,而不被用于路由,所以需要返回竟可能多的信息而不隐藏。3.4.2. 回应收到回应可能是由于以下不同原因:回应特定的查询周期性更新度量改变后的触发更新但处理过程不因此而不同因为处理回应将引起主机的路由表更新,所以必须仔细检查其有效性。必须忽略源端口不是520的信息;其IP源地址必须是一个有效的邻居;且处于直接连接网络。还需要检查回应是否来自主机自己的地址,在广播网上的接口往往会收到自己发送的广播,如果将其作为输入可能产生混淆。对于收到的这些包必须忽略(除了在下面描述的情况)。在真正处理回应前,需要将其用来保持接口状态。如上所述,对于一段时间没有消息发送的路径将被超时而去除。这将保证从其他网关得到路径的正确性;也可以使我们知道直接连接网络是否失效。本文档不涉及和具体网络硬件相关的方法。但是从接口接收到包是一种常用的方法,这表明接口正常。但要小心,接口可能能够收到包而不能正确发送。当包的正确性验证后,将按次序一项项处理各项。重申包先要验证。如项中的度量大于无穷大,则忽略。(在其他主机正常工作时,这种情况不会发生。错误的度量和其他格式错误应当被记录或报警。)然后查看目标地址,检查地址簇标识,如果不是所期望的值(对IP而言是2),忽略该项。检查地址项是合法地址,对于D、E类地址,网络0(除了用以标识默认路径的0.0.0.0)、网络127(回环网络)都将被忽略。同样忽略广播地址(即主机位全1的地址)。对于不支持主机路由的实现(见3.2节),检查主机位是否非0,如果是,也被忽略。在地址域种有一些未用的字节,对于版本1的包而言,它们必须为0,不然将被忽略。(这多表示发送信息的主机工作不正常,这些错误需要被记录或报警。)将收到的度量和信息到达的网络度量相加来进行更新。如果结果大于16,取16。即metric = MIN (metric + cost, 16)检查地址是否已经存在于路径中。如果没有,一般将其加入。当然有例外,如度量为无穷大就不加入。(对于已有的项将更新,但不新加度量为无穷大的项。)当一条主机路径不比相对应的网络路径更好的时候,我们将不加入这条主机路径。如果所有这些例外都不满足,新的项被加入到路由数据中,这包括:- 设定从包中得到的目标和度量。- 将包的来源作为网关。- 初始化路径的超时记时器,停止该路径可能的的垃圾收集时间。(见3.3节的描述)- 设定路径改变标志,并引发触发更新(见3.5节)。如果路径已经存在,首先比较网关。如果是从同一网关得到的相同路径,重置超时记时。下面比较度量,当同一网关发送了新的度量,或新的度量比原有的小,执行以下步骤:- 采用新的路径。即采用新的网关和度量来代替原有的。- 重置超时记时。- 设定路径改变标志,并引发触发更新(见3.5节)。如果新的度量是16(无穷大),开始删除进程。路径不在用于转发包,删除记时器开始(见3.3节)。注意,删除仅在度量第一次变为16的时候开始,如果原先的度量也是16,不会开始新的删除。(删除进程包括开始或删除记时器,我们不希望在30秒后再次收到无穷大度量的时候重置记时器。)当新的度量和原有一样的时候,不再做什么(除了上面说的重置记时器)。在伯克莱4中多提到了一点。通常更换一个同等度量的不同路径是无意义的,但如果当前路径看起来要超时的时候,可以立即将其换到另一条路径,而不必等到完全超时。(见3.3节超时的描述)。这样的话,当新的度量和原有一样的时候,检

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论