IP : 增强型内部网关路由协议 (EIGRP)

IGRP 简介

2016 年 10 月 24 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 8 月 22 日) | 反馈


Charles L. Hedrick Rutgers、State University of New Jersey、中心计算机的和信息服务,计算机科学研究实验室, 22奥古斯特1991


目录


简介

本技术文档简要介绍了内部网关路由选择协议(IGRP)。本文档有两个目的。第一个目的是向那些对使用、评估、实施IGRP技术的读者提供该技术概要。第二个目的是更广泛地探讨IGRP中所蕴含的一些有趣的想法。请参考“配置 IGRP”、“Cisco IGRP 实施”和“IGRP 命令”以了解有关如何配置 IGRP 的信息。

IGRP 的目标

IGRP是一种协议,可以让多个网关协调它们的路由。其目标是:

  • 即使是在非常大而复杂的网络里也能生成稳定的路由。不会出现路由环路,哪怕是瞬时的路由环路也不会出现。

  • 快速对网络拓扑的更改做出响应。

  • 低开销。也就是说,IGRP本身不会使用比实际需要更多的带宽。

  • 当几条路由的状况大概相同时,在这几条平行的路由之间平分流量。

  • 考虑不同路径上的出错率和流量水平。

当前IGRP的实施方案可以处理TCP/IP的路由选择。然而,基本设计是希望能够处理不同类型的协议。

没有一种工具能够解决所有的路由选择问题。从传统来说,路由选择问题可以分为几类。IGRP等协议称为“内部网关协议”(IGP)。它们可以用在一组单一的网络中,用一种管理系统或者一些能够密切配合的管理系统来管理。这样的网络组通过“外部网关协议”(EGP)连接。IGP专门用来追踪有关网络拓扑的大量细节。IGP设计优先考虑的是生成最优路由以及对变化做出快速响应。EGP可以防止一个网络系统出错或者有意被其它系统误传。EGP设计的优先考虑是稳定性和管理性控制。对EGP来说,生成一个合理的路由就已足够,而不是最优路由。

IGRP同Xerox公司的路由信息协议、Berkeley的RIP以及Dave Mill的Hello协议等较早的协议有一些相似之处。它同这些协议的主要区别在于它适用于更大、更复杂的网络。第4节将进一步同RIP进行对比,因为RIP是较早的协议中使用最为广泛的一种类型。

同这些较早协议相类似,IGRP是一种距离向量协议。在这种协议内,网关只同毗邻的网关交换路由信息。这些路由信息包括有关网络其余部分的信息总结。用数学方式表示就是,将所有的网关聚集在一起来解一个最优化问题,为分布式算法分配最优流量。每个网关只需要解决部分问题,而且只会接收整体数据的一部分。

另一种主要协议是称为SPF(最短路径优先)的算法。OSPF使用此概念。要得知更多OSPF参考OSPF设计指南。OSPF这些是根据泛滥技术,每个网关保持最新状态关于每个接口状况在其他网关的。每个网关从自己的角度出发,通过用于整个网络的数据独立地解决优化问题。每种方法都有其自己的优点。在一些情况下,SPF可以非常快地对变动做出响应。为了防止出现路由环路,IGRP必须在进行某种更改之后几分种内忽略新数据。因为SPF可以直接从每个网关获得信息,因而能够避免这种路由环路。这样,它就可以马上传输新的信息。然而, SPF比IGRP必须处理充分地更多数据,在内部数据结构和在网关之间的消息。

路由问题

IGRP一般用于连接不同网络的网关。我们假设网络使用基于数据包的技术。实际上,网关担当分组交换机的角色。当连接到一个网络的系统想要将数据包发送到另外网络中的系统时,它就将数据包发送到网关上。如果目的地址是同该网关相连接的网络中的一个,则网关就会将数据包转发到目的地。如果目的地更远一些,则网关将把数据包转发到同目的地较近的其它网关上。这些网关使用路由表来决定如何处理数据包。这是简单的示例路由表。下面是一个简单的路由表的例子(在例子中所使用的地址都是Rutgers大学的地址。注意,基本的路由选择问题同其它协议也相似,但是这里的描述假定IGRP正被用于路由IP)。

图 1

network      gateway     interface
  -------      -------     ---------
  128.6.4      none        ethernet 0
  128.6.5      none        ethernet 1
  128.6.21     128.6.4.1   ethernet 0
  128.121      128.6.5.4   ethernet 1
  10           128.6.5.4   ethernet 1

/image/gif/paws/26825/figure.gif

(正如我们所看到的,实际的IGRP路由中有关于每个网关的附加信息)。此网关连接对两个以太网,呼叫0和1。他们给IP网络号(实际上子网编号) 128.6.4和128.6.5。通过使用适当的以太网接口,因而为这些特定网络寻址的数据包可以被发送直接地到目的地,完全。有两个相邻的网关128.6.4.1和128.6.5.4。传向128.6.4和128.6.5之外的网络的数据包将被转发到这两个网关中的一个。路由表中说明哪个网络应该使用哪个网关。例如,目的地址为网络10的数据包应该转发到网关128.6.5.4。系统认为这个网关更靠近于网络10,也就是说,到网络10的最佳路径就是穿过这个网关。IGRP的主要目的是使得网关可以建立并维护象这样的路由表。

IGRP 小结

正如前面所提到的,IGRP是一种协议,使得网关可以通过同其它网关交换信息而构建自己的路由表。网关最开始查找直接同它相连的所有网络的相关条目。通过与毗邻的网关交换路由选择更新,它可以获得有关其它网络的信息。在最简单的情况下,网关将找到一条能够到达每个网络的最佳路径。下一个网关将标记出数据包应该发送的一条路径、应该使用的网络接口以及度量信息等。度量信息是一组数据,说明当前路径情况是否良好。这就使得该网关可以比较来自不同网关的路径,并决定最终使用哪一条路径。常常有这样的情况:需要在两条或多条路径之间分离流量。IGRP在两条或多条路径一样好的情况下会这样做。用户还可以在路径几乎一样好的情况下配置使用分离路径。在这种情况下,该路径将能够传输更多的流量,而且其度量信息比单一路径要好。其意图是流量可以在一条9600 bps的线路和一条19200 bps的线路间分担,而且19200线路可以获得约为9600 bps线路两倍的流量。

IGRP所使用的度量值包括:

  • 拓扑延迟时间

  • 路径带宽最窄部分的带宽值

  • 路径的信道占用情况

  • 路径的可靠性

拓扑延迟时间是指沿着该路径到达目的地所需要花费的时间量,假设是在一个无负载的网络上。当然,当网络有负载的时候会产生额外的延迟。然而,载荷可以考虑在信道占用数中,而不是通过测量实际延迟来计算。路径带宽就是路径中以速率最慢的链路的每秒比特率计算的带宽值。信道占有情况说明当前有多少带宽在使用。它将用负载来计算,并且将随着负载而改变。可靠性说明的是当前的出错率,指无损地到达目的地的那部分数据包。它是到达在未损坏的目的地数据包的部分。这个数值是测量出来的。

尽管没有被用作度量值的一部分,但是度量信息中还含有两项信息:跳次及MTU。跳数和MTU。跳次就是数据包到达目的地时所需要经过的网关数。MTU是可以不经过分拆就可以沿着整条路径发送的最大数据包尺寸(也就是说,它是路径所涉及到的所有网络中的最小MTU值)。(即它是所有网络MTU的最低在路径涉及的。)

根据度量信息,可以为路径单独计算一个“合成度量值”。合成度量可以将不同度量成分的效果合成到代表该路径“好坏程度”的一个数值中。实际决定最佳路径时所采用的正是合成度量值。

每个网关定期将其完整的路由表(根据分割水平规则,需要做一定的审查和修改)广播到所有邻近网关。当某个网关从其它网关获得这种广播时,它就同已有的列表进行对比。所有新的目的地和路径都被添加到网关的路由表上。广播中的路径可以同现有的路径进行对比。如果新路径更好,它就会替换已有路径。广播中的信息还可以用来更新同现有路径相关的信道占有情况和其它信息。这个通用流程类似于所有距离向量协议所使用的流程。在数学文献中这被称为“Bellman-Ford”算法。leavingcisco.com 基本程序的一详细的开发的参考的RFC 1058,描述RIP,一个更旧的距离矢量协议。

IGRP对标准的Bellman-Ford算法在三个重要方面做了修改。首先,不采用简单的度量值,而是使用度量向量来度量路径。其次,不是用最小的度量值来挑选某条路径,而是将流量在不同路径之间进行分配,这些路径的度量值都落在某个特定范围内。第三,在拓扑被改动的情况下,可以采用一些特性来提供稳定性。

根据合成的度量值来选择最优路径:

[(K1 / Be) + (K2 * Dc)] r

K1, K2 = 常数 Be = 未加载路径带宽×(1-信道占用率) Dc = 拓扑延迟 r = 可靠性

具有最小合成度量的路径将是最佳路径。有多条路径可以到达同一个目的地,网关可以在多条路径上路由数据包。这可以根据每条数据路径的合成度量来完成。例如,如果一条路径的合成度量值为1,而另外一条的合成度量值为3,则合成度量值为1的数据路径上将能够发送三倍以上的数据包。

采用度量信息向量有两方面的优势。首先,他能够支持基于同样数据组的多种类型服务。第二个方面的优势是能够提高精确度。在使用一个度量向量时,通常可以将其视为延迟来处理。路径中每个链路都加到总度量中。如某一个链路的带宽较低,这通常意味着大延迟。然而,带宽限制确实不累积延迟的方式。通过带宽把单独的组件看作,它可以正确地被处理。类似地,负载可以用一个单独的信道占用数值来加以处理。

IGRP可以为相互连接的计算机网络提供一个系统,稳定地处理包括环路在内的通用图形拓扑。系统包括完全的路径度量信息,也就是说,它知道同每一个网关相连的所有其它网络的路径参数。流量可以在并行路径上进行分配,多个路径参数可以同时在整个网络上计算。

与 RIP 的比较

这一部分将把IGRP同RIP对比。这种对比是有用的,因为RIP广泛地被用于和IGRP类似的目的。然而,这样做并不完全公平,因为RIP同IGRP的目的并不完全相同。RIP未打算达到所有目标和IGRP一样。RIP主要用于技术比较单一的小型网络。对于这样的应用,通常用RIP就足够了。

IGRP和RIP之间最根本的差别在于它们的度量结构不同。不幸的是,这种度量结构并不能只经过简单的变化就用于RIP。它需要IGRP中所用到的一些新算法和数据结构。

RIP采用简单的“跳次”度量来描述网络。不同于IGRP,每个路径由延迟、带宽等等描述,在RIP它由从1的一个编号描述到15。通常此编号用于代表多少个网关路径在达到经历目的地前。这意味着在速率很慢的串行线路和以太网之间并无区别。在RIP的一些实际实施过程中,系统管理员可以具体指定某个给定的跳数应该被计算一次以上。较慢的网络可以用一个较大的跳数来表示。但是,因为最大数量是15,这不可能执行。即,如果以太网由1和由3的一条56Kb线路代表,可以有至多5条56Kb线路在路径,或者最多15被超出。为了代表各种可用的网络速率,并能在大型网络中应用,Cisco的研究结果建议需要24位的度量值。如果最大度量值太小,系统管理员就会面临很不舒服的选择:他不是无法区别快速和慢速路由,就是无法将整个网络放入限制数值范围内。或者他不能区分在快速和缓慢的路由之间,或者他不能适合他的整个网络到限制。实际上,国家范围内的网络现在常常大到RIP根本无法处理的程度,即使每个跳数只计算一次也仍然如此。RIP显然不能用于这样的网络。

最容易想到的做法就是修改RIP,使其允许更大的度量值。可惜的是,这并非有效。同所有的距离向量协议一样,RIP也存在“无穷大计数”的问题。这在RFC 1058较详细地描述leavingcisco.com一旦拓扑结构改变,就会产生假路由。同这些假路由相关的度量值就会慢慢增加直至达到15,达到这个点时该路由就会被删除。15是一个非常小的最大值,假定使用触发更新,这个流程也会快速收敛。如果修改RIP允许24位量度,环路将仍然存在太久为了量度能将计数至2**24。这不是能忍受的。IGRP具有一些特性,可以专门防止产生假路由。在第5.2节中我们将进行详细描述。在不推出这种特性或改变到SPF等协议的情况下,在实际中将无法采用RIP来处理复杂网络。

IGRP不是简单地增加容许度量的范围。它重新改造了度量的结构,用其来描述延迟、带宽、可靠性和载荷状态。可以将这些考虑反映在RIP等单个度量中。例如,采用单个度量标准,几条连续的快速链路将看起来如同一条较慢的链路。交互式流量可能就是这种情况,延迟是主要的考虑因素。然而,对于大批量数据传输,主要的考虑因素是带宽,在这种情况下将度量简单地加在一起并不是一种好方法。IGRP可以分别处理延迟和带宽,将延迟累计,但是仍然考虑最小的带宽值。我们很难看出如何将可靠性和负载的影响效果融入一个单一成分的度量标准。

我认为,IGRP的一个最大优势就是容易配置。它可以直接表示具有实际意义的数值。这意味着可以根据接口类型自动地设置,线路速度等等。使用单组件量度,量度是可能必须“被烹调”合并几件不同的事的作用。

其它方面的创新更多地在于算法和数据结构方面,而不是路由选择协议。例如,IGRP规定了支持不同路由之间分离流量的算法和数据结构。当然也可以设计一种让RIP也这样做的实施方案。然而,既然在重新实施路由选择,就没有理由再坚持采用RIP。

迄今为止,我已经说明了“通用IGRP”这种能够支持任何网络协议路由选择的技术。然而,在这部分,特定TCP / IP的实施方案也值得再提一提。也就是将与RIP进行比较的实施方案。

RIP更新消息只包括路由表的情况。也就是说,只含有一些目的地和度量标准,而其它信息则很少。IGRP的IP实施方案有一些额外的结构。首先,更新消息由一个“自治系统号码”来识别。这个术语来自Arpanet的传统,在这里有特定的含义。然而,对于大多数网络来说,这意味着您可以在同一网络上运行几种不同的路由系统。这对于多个组织的网络需要合并的情况尤为有用。每个组织都维护自身的路由。因为每个更新都加上了标签,因此可以将网关配置为只注意最适合的更新。某些网关配置接收从几自治系统的更新。他们以受控方式通过信息在系统之间。注意这不是完整的解决方案对路由安全性问题。所有网关可以配置听从任何自治系统的更新。然而,它仍然是在实现一合理的度在网络管理员之间的信任的路由策略的一非常有用工具。

关于IGRP更新消息的第二个结构上的功能影响默认路由由IGRP处理的方式。多数路由协议有默认路由的概念。它经常不是实用的为了路由更新能列出每网络在世界上。典型地一套网关需要网络的详细的路由信息在他们的组织内。目的地的所有流量他们的组织的外部可以发送到一些边界网关之一。那些边界网关可能有完整信息。对最好的边界网关的路由是“默认路由”。它是默认,也就是说用于达到在内部路由更新不特别地列出的所有目的地。RIP和一些其他路由协议,流通关于默认路由的信息,好象它实际网络。IGRP采取一不同的方法。而不是默认路由的单个假条目, IGRP允许作为是的候选将被标记的实际网络默认。这通过安置关于那些网络的信息实现在更新消息的一个特殊外部部分。然而,不妨被重视如启用有点关联与那些网络。周期地IGRP扫描所有候选默认路由并且选择那个与最低权值作为实际默认路由。

潜在地对默认的此方法比多数RIP实施采取的方法稍微灵活。RIP网关可以最典型设置生成有某一指定的量度的一个默认路由。目的是这将执行在边界网关。

详细说明

此部分提供IGRP详细说明。

整体说明

当某个网关第一次打开时,其路由表被初始化。这可能由一个操作人员从控制台终端完成,也可以通过读取配置文件中的信息来实现。此时系统可以提供同网关相连的各个网络的描述,包括链路之间的拓扑延迟(也就是说,某个数位穿越该链路所需要的时间)和链路的带宽。

图 2

/image/gif/paws/26825/figure1.gif

图1. 一个简单的网络范例 例如,在图1中,网关S可能被告知可以通过相应接口连接到网络2和网络3。因此,最初,网关2仅文本知道能到达在网络2和3.的所有目的地计算机。所有网关被编程周期地传达给他们的相邻网关从其他网关收集的信息他们初始化了与,以及信息。因此,网关S将接收从网关R和T的更新并且学习能通过网关T.到达在网络1通过网关R的在网络4的计算机和计算机。因为网关S发送其整个路由表,在下个周期网关T学习能达到网络1通过网关S。发现是容易的关于每网络的信息在系统最终将到达在系统的每个网关,提供只网络完全连接。

图 3

________ Network 1
      |
      gw A --nw2-- gw C
      |           / |
      |         /   |
      nw3   nw4    nw5
      |     /       |
      |   /         |
      gw B         gw D
     _|_____________|____ Network 6

图2. 替代路径范例 每个网关计算合成度量值以确定到达目的计算机的理想数据传输路径。例如,在以上图表,在网络6的一个目的地的,网关A (千兆瓦A)通过网关B和C将计算两个路径的度量功能。注意路径由下一跳定义。从A到网络6实际上有3条可用的路由。

  • 直接到B

  • 先到C接着再到B

  • 先到C然后再到D

然而,网关A不需要选择在介入C的两个路由之间。在A的路由表有代表路径的单个条目对C。其量度代表最佳方法有从C最终目的地。如果A发送一个数据包到C,则由C来决定是否使用B或者D。

式1

用来计算每条路径的度量函数如下:

[(K1 / Be) + (K2 * Dc)] r

在这里Be = 有效带宽:无负载带宽× (1-信道占用率)

式2

从原理上来说,总体延迟Dc应该可以用下公式来确定:

Dc = Ds + Dcir + Dt

在这里:

然而,在实践中,每种类型的网络技术都使用标准的延迟数据。例如,以太网就有标准的延迟数据,对于每种特定位速率的串行线路也有标准延迟数据。

下面例子说明在图2情况下网关A中的路由表。(注意,出于简单的目的,度量值向量的每个部分都没有显示)。

路由表示例:

网络 接口 下个网关 量度
1 NW 1 直接连接
2 NW 2 直接连接
3 NW 3 直接连接
4 NW 2 C 1270
NW 3 B 1180
5 NW 2 C 1270
NW 3 B 2130
6 NW 2 C 2040
NW 3 B 1180

图3. 路由表范例 Bellman-Ford算法描述了通过相邻网关之间的信息交换来构建路由表的基本流程。该算法被用于RIP(RFC 1058)等较早协议中。为了处理更复杂的网络,IGRP在基本的Bellman-Ford算法上添加了三种特性。

  1. 不是简单地采用度量值,而是用度量向量来区分不同的路径。可以根据公式1计算出一个单一的合成度量值。使用矢量允许网关适应不同的服务类型,通过使用在式1.的几个不同的系数。它比单个度量也允许网络的特性的更多准确表示。

  2. 不是用最小度量值来挑选出一条路径,而是将流量分流到几条路径中,这些路径的度量值都在某一特定范围内。这就可以同时使用多条路由,提供比单一路由更大的有效带宽。网络管理人员可以指定一个差异值V。所有具有最小合成度量值的路径都留下。此外,度量值小于V×M的所有路径也留下。流量在多条路径之间以合成度量值相反的比例进行分配。

  3. 差异值概念可能会带来一些问题。很难提出一种策略可以在使用大于1的差异值的同时还能够不导致数据包环路传输。在Cisco 8.2版中并没有采用差异值特性。(我并不确认到底在哪个版本中删除了这种特性)。其后果是只能将差异值设置为1。

  4. 推出了一些特性,在拓扑被更换的情况下可以提供稳定性。这些特性可以防止出现路由环路和“无穷计数”的情况。主要的稳定特性有“抑制(holddowns)”、“触发式更新(triggered updates)”、“分离线(split horizon)”以及“中毒(poisoning)”等。这将在下面进一步讨论。

流量分离(点2)可能会带来一些比较微小的危险性。差异值V可用来让网关同时使用不同速率的路径。例如,出于冗余性考虑,可能有一条9600 BPS的线路同一条19200 BPS的线路平行运行(然而,如果好几条路径都相同,则负载将在它们之间分担)。如果差异v是1,只有将使用最佳路径。不会因此9600 BPS线路,如果19200 BPS线路有一种合理的可靠性,将使用。(然而,如果几个路径是相同的,负载在他们中将共享。)通过增加差异值,我们允许流量在最佳路由和其它接近最佳水平的路由之间分配。采用一个足够大的差异值,流量可以在两条线路之间分配。危险性在于,如果采用足够大的差异值,则允许的流量不仅可能速度较慢,而且实际上可能“在错误方向上”传输。这样,就需要有其它规则来防止流量向“上游”传输:不能在远程合成度量值(在下一个网段计算的合成度量值)大于该网关上所计算出的合成度量值的路径上传输流量。流量没有沿远程合成度量值的路径发送(综合度量值计算在下一跳)比综合度量值极大计算在网关。一般情况下,不鼓励系统管理员将差异值设置为大于1的数,除非是在需要使用平行路径的情况下。在这种情况下,应该认真设置差异值以提供“正确”结果。

IGRP适用于处理多个“服务类型”和多种协议。服务类型在数据包中有说明,根据服务类型需要修改评估路径的方法。例如,TCP / IP协议允许数据包指定高带宽、低延迟或者高可靠性的相对重要性。通常交互式的应用将强调低延迟,而大批量数据传输应用则强调高带宽。这些需求决定了适合公式1使用的K1和K2的相对值。1.数据包中需要支持的各种规范的某种组合就被定义为“服务类型”。对于每种类型的服务,必须选择一组参数K1和K2。每种类型的服务都对应一个路由表。这样做的原因是路径需要根据公式1所定义的合成度量值来进行选择和排序。1.这对于不同类型服务是不同的。从所有的信息这些路由表被结合生成网关交换的路由更新消息,正如Figure7所描述。

稳定性功能

这一部分说明抑制、触发式更新、分离线和中毒等特性。这些特性的目的是防止网关不会挑选错误的路由。正如RFC 1058所描述leavingcisco.com ,当路由变得不可用,由于网关或网络的失败时,这能发生。从原理上来说,毗邻的网关可以探测出故障。接下来它们将发送路由更新信息,说明老的路由已经不可用。然而,有可能更新根本没有到达网络的一些部分,或者在达到某些特定网关时被延迟。而某个网关仍然认为旧路由没有问题,并继续扩散这样的信息,从而重新将出现故障的路由纳入系统内。最后,这个信息将通过网络传播,并且返回重新将其纳入的网关。其结果是出现环路路由。

事实上,采取相应措施时考虑了冗余性。从理论上来说,抑制和触发式更新就足以首先防止错误路由发生。然而,在实践中,由于会产生不同类型的通信故障,这样仅这两种措施还远不够。分离线和路由中毒就可以在任何情况下防范路由环路。

通常,新的路由表被定期发送到邻近的网关(默认是每90秒种一次,不过,系统管理员可以调整这个周期)。触发更新是一种新路由表,此类路由表会在某些变化发生后立即发送出去。最重要的变动是删除某条路由。等候超时(可能是邻近网关或者线路出了故障)或者接收到路径中下一个网关发出的关于路径不能再使用的信息等情况都可能导致路由被取消。当网关G探测到某条路由不再可用,它就可以立即出发一个更新信息。这条更新信息将显示该路由不可用。下面我们考虑当这条更新信息到达邻近网关时将发生什么状况。如果相邻路由往回指向G,则邻居必须删除路由。这造成邻居触发更新等等。因而失败将触发一系列的更新消息。这些消息将在网络的某一部分传播,且在这部分网络中,路由经过出现故障的网关或网络。

如果我们能够保证这些更新消息波可以立即到达每个相应的网关,则触发式更新就已经足够。但这里存在两个问题。首先,包括更新消息的数据包可能被网络中某些链路丢弃或者损坏。其次,触发式更新并不会同步发生。有可能某个网关尚未获得触发式更新就发送一条正常更新消息,从而导致失效的路由被重新插入已经获得触发式更新的相邻网关中。抑制专门用来解决这样的问题。抑制的规则是,当某条路由被删除,则在一定时期间内不会接收同一目的地址的任何新路由。这就让触发式更新有一段时间可以到达其它所有网关,从而可以确保我们所获得的所有新路由都不是某些网关中被插入的旧路由。抑制时间段必须足够长才能让触发的更新能够穿过网络。此外,它还应该包括一些定期广播周期来处理丢弃的数据包。下面我们考虑在触发式更新中有一条被丢弃或者损坏的情况下会导致什么状况。发送该更新信息的网关将在下一个定期更新时间发送另外一条更新信息。这将在丢失了最初更新波的相邻网关上触发新的更新消息波。

触发式更新和抑制等特性相结合,应该足以消除过期路由,并防止它们被重新插入。然而,还需要采取一些其它的预防措施。这些措施主要是针对那些性能损坏严重或者已经被分成不同区域的网络。IGRP所采用的其它预防措施称为分离线和路由中毒。分离线主要基于这样一个观察,即将一条路由沿着源方向发回原处是没有意义的。考虑下述情况:

network 1        network 2
  -------------X-----------------X
           gateway A          gateway B

网关A将告诉B有一个路由对网络1。当B发送更新对A时,从未有它的所有原因能提及网络1。因为A是离1较近,没有理由它考虑去通过B。水平分割规则说应该为每个邻居(实际上每相邻的网络)生成一个分开的更新消息。用于某个给定邻居的更新应该省略指向该邻居的路由。此规则防止在邻接网关之间的环路。即请假设对网络1的A的接口发生故障。没有水平分割规则, B是告诉A能达到1。因为它不再有一个实时路由, A也许拾起该路由。在这种情况下, A和B两个将有路由到1。当然,但是A将指向B和B将指向A.触发更新,并且抑制应该防止其发生。但是由于没有理由将信息发还给产生这条信息的地方,因而分离线仍然有价值。除了能够防止出现环路,分离线还能够减少更新消息的大小。

分离线应该能够防止相邻网关之间的环路。路由中毒则可能打破较大的环路。规则是,当某条更新消息显示某个已有路由的度量值已经增加妻足够多的时候,就有环路产生。该路由应该被删除并进入抑制状态。当前的规则是,如果合成度量增加到1.1倍以上就将该路由删除。只要合成度量出现增加就触发路由删除的行为并不安全,因为信道占用率或者可靠性的变动也可能会导致度量值出现微小变化。因此1.1的系数仅仅是试探性的。实际值并不重要。我们希望这条规则只在打破很大环路的时候才会用到,因为较小的环路通过触发式更新和抑制就已经能够预防。

禁用抑制功能

在8.2版之后,Cisco的代码就能提供是否禁用抑制功能的选项。抑制的缺点在于当一条老路由出现故障时将会延迟采用新路由的时间。在默认参数下,在某个变动产生之后路由器需要花费数分钟才能够获得新路由。然而,出于上面所解释的原因,简单地消除抑制功能并不安全。结果是计数至无穷大,正如RFC 1058所描述。我们臆想,但是不能证明,与路由破坏一个更加强的版本,抑制不再必要终止计数至无穷大。这样禁用抑制就应该启用这种功能更强的路由中毒。注意,分离线和触发式更新将仍然有效。

路由中毒的更强大模式则是基于跳次。如果某条路径的跳次增加,就将该路由删除。这显然有可能删除仍然有效的路由。如果网络的某个部分发生了某种改变,以至于当前路径需要增加一个网关的路径,则跳次将增加。在这种情况下,路由仍然有效。然而,并没有一种完全安全的方法可以将这种情况同路由环路(无穷计数)区分开。这样,最安全的方法是只要跳次增加就将该路由删除。如果该路由仍然合法,则在下一次更新的时候重新安装,从而将导致一次触发式更新,在系统的其它部分重新安装该路由。

总之,距离向量算法可以轻松地获取新路由。问题是它将彻底将旧路由从系统中清除。这样,在删除可疑路由方面更激进一些的规则应该比较安全。

更新过程详细信息

图4-8所描述的流程主要针对某种网络协议的处理,如TCP/IP,DECnet或者ISO/OSI协议等。不过,只给出针对TCP/IP的协议细节。某个网关可以处理服从多个协议的数据。因为每个协议都有不同的寻址结构和数据包格式,对于不同的协议来说,用来实现图4-8过程的计算机代码一般也不相同。在表描述的进程4将变化多数,正如图的4.详细的笔记所描述。在表描述的进程5到8将有同一个一般结构。协议之间的差别在于路由更新数据包的格式,这个数据包必须能够符合特定协议的规范。

注意,目的地在不同协议中可能有不同的定义。这里所描述的方法可以用于到某个主机、网络或者更复杂的分层地址机制的路由。采用哪一类型的路由将取决于协议的地址编排结构。当前的TCP/IP实施仅支持到IP网络的路由。这样“目的地”确实是指IP网络或者子网号。子网的信息只保存给相连的网络。

图4-7显示了网关所使用路由流程不同部分的伪代码。在程序开始的时候,需要输入说明每个端口可用的协议和参数。

网关将仅处理列表中的特定协议。任何来自采用列表之外协议的系统的通信都将被忽略。数据输入信息包括:

  • 同网关相连的网络

  • 每个网络的无负载带宽

  • 每个网络的拓扑延迟

  • 每个网络的可靠性

  • 每个网络的信道占用率

  • 每个网络的MTU

每数据路径的度量功能根据式1.然后被计算。注意前三个项目是相当持久的。它是一个基本的网络技术函数,同载荷无关。它们可以通过配置文件设置,也可以通过操作人员直接输入来配置。注意,IGRP并不使用测量到的延迟值。理论和实践都表明,协议要采用测量的延迟值来维持稳定路由非常困难。有两个可度量的参数:可靠性和信道占用率。可靠性和信道占用。可靠性是基于网络接口硬件或者固件所报告的出错率来确定的。

除了这些输入,路由算法还需要一些路由参数的值。这包括计时器值、差异值以及抑制功能是否启用等。这通常由一个配置文件或者操作 人员的输入来规定。(在Cisco 8.2版中,差异值被固定设置为1)。

一旦初始信息输入,在网关的操作由计时器的事件—数据包的到达一致网络接口或者有效期触发。图4-7中 所描述的流程可以用如下方式触发:

  • 当数据包到达时,根据图4.处理。这导致为进一步处理被派出另一个接口,已丢弃或者接受的数据包。

  • 当网关接收了数据包以求进一步处理时,它可以用一种取决于所用协议的方法进行分析,这在本规范中没有进行说明。如果数据包是一个路由更新,则可以根据图5进行处理。

  • 图6说明了计时器所触发的事件。计时器可以设置为每秒钟产生一个中断。当中断发生时,就执行图6中所显示的流程。

  • 图7显示了一个路由更新的子路由。图5和图6显示了到这条子路由的呼叫。

  • 此外,图8显示了度量值计算的详细过程,请参见图5和图7。

有4个关键时间常数控制路由的传播和到期。这些时间常数可以由系统管理员进行设置。不过,它们都有默认的数值。这些时间常数是:

  • 广播定期的更新由在所有连接的接口的所有网关经常广播这。默认值是每90秒钟广播一次。

  • 无效定期,如果更新未为在此时间内的一个给的路径接收,考虑计时了。它应该是广播时间的几倍,目的是考虑到包含有更新消息的数据包有可能被网络丢弃。默认值是广播时间的3倍。

  • 对负定期,当目的地变为不可得到时(或量度足够增加导致毒化),目的地进入“抑制”。在这种状态下,在保持时间所规定的时间段内,不再接收传往同一目的地的新路径。保持时间说明这种状态将持续多久。这可能是广播时间的几倍。默认值是广播时间的3倍再加上10秒(如5.2.1中所描述,可能会禁用抑制功能)。(正如Disable Holddowns部分所描述,禁用抑制。)是可能的

  • 充足定期,如果更新未为在此时间内的一指定目的地接收,它的条目从路由表删除。注意有效时间和清除时间之间的区别:在有效时间过后,某条路径超时并且会被删除。在无效时间之后路径被计时并且删除。如果没有保留到某个目的地的路径,则目的地现在就无法到达。然而该目的地的数据库字段仍然保留着。这个数据段必须保留以强制实现抑制。在清除时间之后,该数据库条目将从列表中删除。这个时间可以比有效时间与抑制时间之和长一些。默认值是广播时间的7倍。

这些数字预示着下面这些主要的数据结构。网关所支持的每种协议都单独保留一套数据结构。在每种协议中,为其所支持的每种类型服务也分别保留一套数据结构。

对于系统所知道的每个目的地,都有(可能为空)一个能到达该目的地的路径清单,一个抑制到期时间以及一个最后更新时刻。最后更新时刻说明到这个目的地的每条路径都已经包括在来自其它网关的更新信息中。注意,每条路径也都保留了更新时间。当到达某个目的地的最后路径被删除之后,目的地就进入抑制状态,除非抑制被禁用(见5.2.1节)。抑制到期时间说明抑制到期的时间。这个时间不是零将意味着目的地正处在抑制状态下。为了节约计算时间,为每个目的地保留一个“最佳度量值”也是一个很好的思路。这个值就可以简单地取为到目的地的所有路径中最小的那个合成度量值。

到达目的地的每条路径中都有路径中下一个跳数的地址、将使用的接口、描述路径特征的一个度量向量(包括拓扑延迟、带宽、可靠性以及信道占用率等)。其他信息用每个路径也关联,包括跳数、MTU、信息源,远程合成度量值和从这些编号计算的综合度量值根据式1。也有最近一次更新时候。信息来源是指该路径的最新更新消息的来源。在实践中,这同下一个网段的地址相同。最后更新时刻就是这条路径的最近更新到达的时间。它可以用于确定路径是否超时。

注意,一条IGRP更新消息包括三个部分:内部、系统(意思是“这个自治系统”而非内部)以及外部。内部、系统(含义“此自治系统”,但是不内部)和外部。内部部分用于到子网的路由。并不包括所有的子网信息,而只包括一个网络的子网。一网络仅子网包括。这个子网就是同更新正在发送的目的地址相关的网络。通常,这些更新在每个接口上广播,因而 这就是正在发送广播的那个网络(其它情况下用于对一条IGRP请求和点到点IGRP的响应)。(其他案件为对IGRP请求和点对点IGRP的答复来了。)主网络(不是子网)被置于更新消息的系统部分 ,除非它们被特别标记为外部。

如果某个网络是从其它网关获取,并且该信息到达的时候位于更新消息的外部部分,则该网络被标记为外部网络。Cisco的实施还允许系统管理员将某些网络标记为外部网络。外部路由也被称为“候选默认”。它们是流往或者流经那些被考虑为合适的默认网关的路由,当没有清晰的路由到某个目的地时就可以采用这些路由。例如,在Rutgers,我们配置网关连接Rutgers和我们的地区网络,因而它连接到NSFnet骨干网的路由就标记为外部。Cisco的方案将具有最小度量值的外部路由选为默认路由。

下面各节将清晰地说明图4-8的一些特定部分。

数据包路由

图4说明了输入数据包的总体处理过程。这可以简单地用来说明术语。很显然,这并不是对IP网关功能的完整的描述。

这个流程使用支持协议清单和网关初始化时所进入的接口的相关信息。详细的数据包处理过程取决于数据包所使用的协议。这可以在步骤A中决 定。一旦已知协议类型,则就会根据该协议采取图4中的相应措施。数据包的详细内容将在协议规 范中描述。协议规范包括确定数据包目的地的流程、将目的地与网关自身地址进行比较以确认网关本身是否就是目的地的流程、确定数据包是 否为广播的流程,以及确定目的地是否为某个特定网络一部分的流程等。这些步骤用于步骤B和C图4。在步骤D的测验要求在路由表里列出的目的地的搜索。如果路由表中有关于该目的地的项目,并且该目的地至少同一条可用路由相关,则该测试就算完成。注意,在这里和 下一步骤中所使用的目的地和路径数据都根据支持的服务类型分别进行保存。这样,这个步骤一开始就是确定数据包所规定的服务类型,并且 选择用于这一步和下一步的相应数据结构组。

如果某条路径的远程合成度量值低于其合成度量,这条路径就可以用于步骤D和步骤E。如果某条路径的合成度量值大于其合成度量值,如果用度量值来衡量的话,该路径的下一个跳数就会离目的地“更远”。在这里将其称为“上游路径”。通常情况下,人们希望使用度量值可以防止上游路径被选中。很容易看到,上游路径绝不可能是最好的路径。然而,如果允许较大的差异值,则非最佳路径也可能被使用。其中一些这样的路径就有可能是上游路径。

步骤E计算将要使用的路径。那些远程合成度量值不超过其合成度量值的路径将不在考虑之内。如果有一条以上的路径可接受,则这些路径将按照循环交替加权方式使用。一起使用路径的频率与是反比例的对其综合度量值。

接收路由更新

图5说明从相邻网关接收路由更新的过程。这些更新包括一个列表,其中每一个条目都给出某个目的地的信息。在单个路由更新上同某个目的地相关的条目可能有多条,以针对不同的服务类型。这些条目中的每一个单个处理,正如图5.所描述。如果条目在更新的外部部分,外部标志为目的地将设置由于此进程,如果被添加。

对于网关所支持的每种服务类型,图5所描述的整个流程都会重复一次,方法是采用同那种类型相关的目的地/路径信息组。这在最外层的环路在表5.显示。必须为每种服务类型一次处理整个路由更新。对于每种类型的服务都必须将整个路由更新完全处理一次(注意,当前的IGRP版本中并不支持多种服务类型。

在步骤A,在路径上完成了基本可接收性测试。这应该包括目的地的合理性检测。不可能的(“Martian”)网络号应该被拒绝。(参考的RFC 1009leavingcisco.comRFC 1122leavingcisco.com 欲知更多信息。)如果所指向的目的地正处于抑制状态,也就是说抑制到期时间非零而且晚于当前时间,则这样的更新也会被拒绝。

在步骤B中将搜索路由表,以查找是否有描述某条已知路径的条目。一个路径在路由表里由关联的目的地,下一跳列出作为路径一部分,将用于路径输出接口和信息源(的地址更新来—通常实践上定义同下一跳一样)。来自更新数据包中的条目将对某条路径进行描述,该路径的目的地列在该条目中、输出接口正是更新进入的接口,且下一个跳数和信息源正是发送更新的网关的地址(“源”S)。

图7中所描述更新流程中的步骤H和T按照时间表计划运行。这个流程将在图5中所描述的整个流程运行结束之后再运行。即在Figure7描述的更新过程一次只将发生,即使被触发几次在表描述期间的处理5。此外,如果网络迅速地,更改必须采取注意事项保持从太经常发出的更新。

如果更新数据包中所描述的当前条目所描述的目的地已经存在于路由表,则进入步骤K。这个步骤将根据更新数据包数据计算出来的新合成度量值同该目的地的最佳合成度量值进行对比。注意,最佳合成度量值在这个步骤并不重新计算。

步骤L用于那些比已有最佳合成度量值差的路径。这既包括那些比已有路径差的新路径,也包括那些合成度量值增加的已有路径。步骤L测试新路径是否可接受。注意,这项测试不仅查看新路径是否足够好而值得保留,还查看该路由是否中毒。延迟值必须不能是指示着一个无法到达的目的地的特定值(对于当前的IP部署来说,所有的延迟值都写入一个24位的字段),而且合成度量值(按照图8中指定的方法计算)也必须可接受,该路由才能够被接受。要确定合成度量值是否可接受,可以将其与通往目的地的所有其它路径的合成度量值进行对比。假定M是这些度量值中的最小值。则如果它小于V×M就可以接受,其中,V是网关初始化时所设置的差异值。如果V=1(在Cisco 8.2版中,总是这个值),则比已 有度量值差的所有度量值都不会被接受。在这里有一个唯一的例外情况:如果路径已经存在,而且是到目的地的唯一路径,则如果度量值增加不超过10%(或者在禁用抑制的情况下,如果跳次没有增加)该路径将保留。PATH已经存在并且是唯一的PATH对目的地的IF, PATH将是保留的IF量度HAS没增加由超过10% (或抑制禁用的地方, IF没增加的跳数HAS)。

当针对某条路径的新信息表明合成度量值降低的情况下将会执行步骤V。到目的地D的所有合成度量值都被进行了比较。在这个比较过程中,使用了针对P的新合成度量值,而不是出现在路由表中的那个度量值。然后计算最低合成度量值M。接下来对通往D的所有路径再次进行检验。如果任何一条路径的合成度量值>M×V,则该路径就被删除。V是差异值,在网关初始化的时候输入。(在Cisco 8.2版中,差异值被固定设置为1)。

定期处理

图6中所描述的流程每秒钟触发一次。它可以校验路由表中的不同计时器是否已经超时。这些计时器已经在前面描述过。

在步骤U,图7中所描述的流程被激活。

步骤R和S都是必需的,因为存储在路由表中的合成度量值取决于测量出的信道占用率,这个度量随着时间会不停地变动。采用通过接口的流量测量值的移动平均值,定期计算信道占用率。如果新计算的值不同于已有的值,则涉及该接口的所有合成度量值都必需进行调整。路由表中所 显示的每条路径都需要校验。下一个跳数使用接口“I”的每条路径都会重新计算其合成度量值。在作为路径度量值的一部分而存储在路由表中 的原有信道占用率以及该接口最新计算出的信道占用率中,选取较大的一个作为信道占用率,根据公式1计算来计算新的合成度量值。

生成更新消息

图7说明了网关如何生成发送到其它网关的更新消息。网关为同该网关相连的每个网络接口都分别生成一条消息。该消息接下来就发送到可以通过接口(步骤J)到达的所有其它网关上。通常,将该消息作为广播业务进行发送就可以完成发送。不过,如果网络技术或者协议不允许广播, 则可能需要将消息单独发送到每个网关上。

一般来说,消息通过添加每个目的地的一个条目加强在路由表里,在步骤G。注意必须使用目的地/路径数据关联与每种服务类型。在最坏的情况下,针对每种服务类型、每个目的地的更新都需要添加一个新的条目。然而,在步骤G中将新条目添加到更新消息中时,需要扫 描已经添加的条目。如果新条目在更新消息中已经存在,则就不再添加。当目的地和下一跳数的网关相同的时候,新条目就会复制已有的条目。

简单说来,伪代码省略一件事— IGRP更新消息有三部分:这样,在目的地上实际有三个环。第一个只包括该网络中正在发送更新的子网。第二个包括没有被标记为外部的所有主网络(也就是,非子网的网络)。第三个包括被标记为外部的所有主网络 。

步骤E实施分离线检测。在一般情况下,这种检测对于一些路由无效,这些路由所通过的接口正是目前发送更新消息的接口。然而,如果更新被发送对一个特定目的地(例如,以回应从另一个网关的一个IGRP请求,或者作为“点对点IGRP一部分”),分开的展望期发生故障,只有当最佳路径最初来自该目的地(其“信息源”是相同的象目的地),并且其输出接口是作为那个请求进来自的相同的。

计算度量值信息

图8说明了如何从网关接收到的更新消息处理度量值信息,以及被网关发送的更新消息如何生成。注意,条目是基于到目的地的某条特殊路径的 。如果到该目的地的路径超过一条以上,则就会选择合成度量值最小的路径。如果有一条以上的路径有最小合成度量值,则可以使用任意解绑 (tie-breaking)规则。((对于大多数协议来说,这将根据下一个跳数网关的地址来确定)。

图4 —处理流入数据包

Data packet arrives using interface I

A   Determine protocol used by packet

    If protocol is not supported
      then discard packet

B   If destination address matches any of gateway's addresses
    or the broadcast address
      then process packet in protocol-specific way

C   If destination is on a directly-connected network
      then send packet direct to the destination, using
      the encapsulation appropriate to the protocol and link type

D   If there are no paths to the destination in the routing
    table, or all paths are upstream
      then send protocol-specific error message and discard the packet

E   Choose the next path to use. If there are more than
    one, alternate round-robin with frequency proportional
    to inverse of composite metric.

    Get next hop from path chosen in previous step.

    Send packet to next hop, using encapsulation appropriate
    to protocol and data link type.

图5 —处理流入路由更新

Routing update arrives from source S

    For each type of service supported by gateway
      Use routing data associated with this type of service

      For each destination D shown in update

A       If D is unacceptable or in holddown
          then ignore this entry and continue loop with next destination D

B       Compute metrics for path P to D via S (see Fig 8)

        If destination D is not already in the routing table
        then Begin

          Add path P to the routing table, setting last
          update times for P and D to current time.

H         Trigger an update

          Set composite metric for D and P to new composite
          metric computed in step B.

          End

        Else begin (dest. D is already in routing table)

K         Compare the new composite metric for P with best
          existing metric for D.

           New > old:

L            If D is shown as unreachable in the update,
             or holddowns are enabled and
              the new composite metric >
                (the existing metric for D) * V
                [use 1.1 instead of V if V = 1,
                as it is as of Cisco release 8.2]
O            or holddowns are disabled and
             P has a new hop count > old hop count
             then Begin

              Remove P from routing table if present

              If P was the last route to D
                then Unless holddowns are disabled
                    Set holddown time for D to
                     current time + holddown time
T                  and Trigger an update

              End

             else Begin

              Compute new best composite metric for D

              Put the new metric information into the
              entry for P in the routing table

              Add path P to the routing table if it
              was not present.

              Set last update times for P and D to
              current time.

              End

           New <= OLD:

V            Set composite metric for D and P to new
             composite metric computed in step B.

             If any other paths to D are now outside the
             variance, remove them.

             Put the new metric information into the
             entry for P in the routing table

             Set last update times for P and D to
             current time.

          End

        End of for

      End of for

图6 —定期处理

Process is activated by regular clock, e.g. once per second

    For each path P in the routing table (except directly
    connected interfaces)

      If current time < P'S LAST UPDATE TIME + INVALID TIME
        THEN CONTINUE WITH THE NEXT PATH P

      Remove P from routing table

      If P was the last route to D
        then Set metric for D to inaccessible
          Unless holddowns are disabled,
            Start holddown timer for D and
          Trigger an update

        else Recompute the best metric for D

      End of for

    For each destination D in the routing table

      If D's metric is inaccessible
        then Begin

        Clear all paths to D

        If current time >= D's last update time + flush time
          then Remove entry for D

        End

      End of for

    For each network interface I attached to the gateway

R     Recompute channel occupancy and error rate

S     If channel occupancy or error rate has changed,
        then recompute metrics

      End of for

    At intervals of broadcast time

U     Trigger update

Figure7 —生成更新

Process is caused by "trigger update"

    For each network interface I attached to the gateway

      Create empty update message

      For each type of service S supported

        Use path/destination data for S

        For each destination D

E         If any paths to D have a next hop reached through I
            then continue with the next destination

          If any paths to D with minimal composite metric are
          already in the update message
            then continue with the next destination

G         Create an entry for D in the update message, using
          metric information from a path with minimal
          composite metric (see Fig. 8)

          End of for

        End of for

J     If there are any entries in the update message
       then send it out interface I

      End of for

图8 —度量计算详细信息

这一节描述了通过一个到达的路由更新消息来计算出度量值和跳次的流程。这个函数的输入值是路由更新数据包中的某个特定目的地。输出值是一个度量值向量,可以用来计算合成度量以及跳次。如果这条路径添加到路由表上,则整个度量值向量就被输入到列表中。下述定义中所使用的接口参数都是在网关初始化设置时为那些路由更新到达的接口所设置的参数,不过信道占用率和可靠性都是基于该接口上所测流量的移动平均值。

  • 延迟=数据包延迟+接口拓扑延迟

  • 带宽=最大值(数据包带宽,接口带宽)

  • 可靠性=最小值(数据包可靠性,接口可靠性)

  • 信道占用率=最大值(数据包信道占用率,接口信道占用率)

    (最大值被用于带宽,因为带宽度量值以反向形式存储。从概念上来说,我们需要的是最小带宽。)注意,必须保存数据包的初始信道占用率 ,因为在接口信道占用率发生变化的时候,需要重新计算有效的信道占用率。

下面并非度量值向量的一部分,但是也出现在路由表中,作为该路径的特征值:

  • 跳次=数据包中的跳次

  • MTU=最小值(数据包中的MTU,接口MTU)

  • 远程合成度量――采用数据包中的度量值根据公式1计算。也就是说,度量值的成分是数据包中所包括的那些,而非上面所显示的更新后的值。很显然,这必须在上面所显示的调整完成之前就计算完。

  • 合成度量值――采用这一节所计算出的度量值根据公式1计算而出。

这一部分说明计算将要发送的路由更新的度量值和跳次的流程:

这个函数用来确定需要置入外发更新数据包的度量值信息和跳次。它基于到目的地的某条特定路径,如果有可用路径的话。如果没有路径或者路径都是上游路径,则目的地就称为“不可访问”。

If destination is inaccessible, this is indicated by using a specific
        value in the delay field. This value is chosen to be larger
        than the largest valid delay. For the IP implementation this is
        all ones in a 24-bit field.

   If destination is directly reachable through one of the interfaces, use
        the delay, bandwidth, reliability, and channel occupancy of the
        interface. Set hop count to 0.

   Otherwise, use the vector of metrics associated with the path in the
        routing table. Add one to the hop count from the path in the
        routing table.

IP实施方案细节

这一节将简要说明Cisco IGRP所使用的数据包格式。IGRP可以采用代IP协议9(IGP)的IP数据表来发送。数据包最前端是一个报头。它紧跟着IP报头。

unsigned version: 4;  /* protocol version number */
    unsigned opcode: 4;   /* opcode */
    uchar edition;        /* edition number */
    ushort asystem;       /* autonomous system number */
    ushort ninterior;     /* number of subnets in local net */
    ushort nsystem;       /* number of networks in AS */
    ushort nexterior;     /* number of networks outside AS */
    ushort checksum;      /* checksum of IGRP header and data */

对于更新消息来说,路由信息紧跟着报头。

当前的版本号为1。

1. 更新

这能够表示信息类型。两种信息类型的格式将在下面给出。

版本是一个串行号码,当路由表出现变动时就会增加(在上面的伪代码要求触发一次路由更新的情况下会完成这种操作)。(这在以上的伪代码说触发路由更新。)的那些情况执行版本号使得网 关可以避免处理包含已有信息的更新(当前还没有采用这种方式。(这当前没有实现。也就是说,版本号仍然正确生成,但是在输入中被忽略。因为对于那些要被 丢弃的数据包无法采用版本号。有必要搞清楚与该版本相关的所有数据包都已经得到处理) 。

A系统就是自治系统号码。在思科的方案中,网关可以加入一个以上的自治系统。每个这样的系统都运行其自己的IGRP协议。从概念上来说,对于每个自治系统都有完全独立的路由表。通过IGRP来自于一个自治系统的路由只能在针对那个AS的更新发送。这个字段使得网关在处理这些消息时,可以选择采用哪一组路由表。如果网关接收到一条针对没有配置的AS的IGRP消息,就会将其忽略。事实上,思科的方案允许信息从一个AS“泄露”到另外一个。不过,我将它视为一种管理性工具,而不是协议的一部分。

Ninterrior、nsystem以及nexterior都表示更新消息中三个部分中每个条目的号码。这些部分在上面已经描述过。在这些部分之间没有其它划分。第一个ninterior条目被当做内部,下面的nsystem条目则视为系统,而最后的nexterior Checksum则为IP校验和,采用与UDP校验和相同的算法来计算。

校验和是IP校验和,被计算使用校验和算法和UDP校验和一样。校验和在IGRP报头以及其后所有路由信息上计算。在计算校验和的过程中,校验和字段设置为0。校验和并不包括IP报头,那里也不像UDP和TCP中那样有虚报头。

请求

IGRP请求要求接收方发送自己的路由表。请求消息只有一个报头。只用到了版本、操作码以及系统字段。所有其它字段都是零。接受者需要将一个标准IGRP更新消息发送给请求者。

更新

IGRP更新消息包括报头,其后紧跟着路由条目。包括的许多路由更新条目可以装入一个1500字节的数据报(包括IP报头)中。采用当前的结构声明,最多允许104个条目。如果需要更多的条目,则可以发送多条更新消息。由于更新消息可以简单地逐个条目地进行处理,因而用一个分段的消息取代几个独立的消息并没有优势。

下面是路由条目的结构:

uchar number[3];       /* 3 significant octets of IP address */
    uchar delay[3];        /* delay, in tens of microseconds */
    uchar bandwidth[3];    /* bandwidth, in units of 1 Kbit/sec */
    uchar mtu[2];          /* MTU, in octets */
    uchar reliability;     /* percent packets successfully tx/rx */
    uchar load;            /* percent of channel occupied */
    uchar hopcount;        /* hop count */

uchar [2]和 uchar [3]字段是16位和24位二进制整数,按照标准的IP网络顺序。

号码定义描述的目的地。它是一个IP地址。为了节约空间,除非在内部部分,否则只给出IP地址的前3个字节。在内部部分,给出的是最后的3个字节。对于系统和外部路由,由于不可能有子网,因而低位的字节总设置为0。内部路由总是一个已知网络的子网,因而只提供该网络号码的第一个字节。

延迟的单位为10微秒。其范围为10微秒到168秒,看上去应该足够。全1的延迟说明该网络无法到达。

带宽是单位为“每秒比特”的、比例为1.0e10的带宽倒数。范围可以从1200 BPS到10 Gbps。(也就是说,如果带宽为N Kbps,则使用的数值就是10000000/N)。

MTU单位为字节。

可靠性给作为一小部分255。即255是100%。

负载也按照255的分子数给出。

跳次就是一个地数。

由于带宽和延迟所使用的单位稍有点奇怪,因而我们下面给出几个例子。这些都是一些常用介质所使用的默认值。

              Delay                 Bandwidth
                      ---------------       -------------------
      Satellite       200,000 (2 sec)             20 (500 Mbit)
      Ethernet            100 (1 ms)           1,000
      1.544 Mbit         2000 (20 ms)          6,476
      64 Kbit            2000                156,250
      56 Kbit            2000                178,571
      10 Kbit            2000              1,000,000
      1 Kbit             2000             10,000,000

度量计算

下面的例子是Cisco 8.0(3)中的合成度量值的实际计算方法说明。

metric = [K1*bandwidth + (K2*bandwidth)/(256 - load) + K3*delay] *
                        [K5/(reliability + K4)]

    If K5 == 0, the reliability term is not included.

    The default version of IGRP has K1 == K3 == 1, K2 == K4 == K5 == 0

相关信息


Document ID: 26825