网络多播和实时通信技术
上QQ阅读APP看书,第一时间看更新

2.2 距离向量多播路由

距离向量路由算法也称Ford-Folkerson或Bellman-Ford算法,已经在许多网络和互联网络中使用了许多年。例如起初的IP网络路由协议RIP就是基于距离向量路由选择;Xerox PUP互联网络路由协议也是如此;许多UNIX系统都运行Berkeley的routed路由进程,该进程所实现的就是距离向量路由算法。

使用距离向量算法的路由器维持一个路由表,该表为在互联网络中每个可达的目的地都设立一个登记项。一个“目的地”可以是单个主机、单个子网或一组子网集合。一个路由表项典型地如下所示。

     (目的地,距离,下一跳段地址,下一跳段链路,历时)

距离是到达目的地的距离,典型地以跳段或某个其他的延迟单位度量。下一跳段地址是前往目的地的通路上的下一个路由器的地址,或者在与该路由器共享同一链路的情况下就是目的地自身地址。下一跳段链路是用以到达下一跳段地址的链路的本地标识符。历时表示该表项已经存在多长时间,用以将变得不可达的目的地超时。

每个路由器都在它的每条附接链路上周期性地发送一个路由分组。对于LAN链路,为了能够到达所有的邻居路由器,路由分组通常是作为一个本地广播或多播发送。路由分组包含取自发送方路由表的一个<目的地,距离>对(距离向量)列表。在从一个邻居路由器接收到一个路由分组时,如果该邻居路由器提供了一个新的到达一个给定目的地的较短路由,或者如果该邻居不再提供接收方路由器一直在使用的一条路由,那么接收方路由器可能更新它自己的路由表。借助这样的交互,路由器就能够计算到达互联网络所有目的地的最短通路路由。

为了满足低延迟多播的目标和为TTL范围控制提供合理的语义,我们需要多播分组沿着从发送方到多播组成员的最短通路(或接近最短通路)树投递。

就在一个距离向量路由环境中对多播路由的支持而言,从发送方到达每个多播组都潜在地有一个不同的最短通路树。以一个给定的发送方为根的每个最短通路多播树都是单个以那个发送方为根的最短通路广播树的一个子树。以下我们将以此看法为基础,讨论如何利用距离向量路由环境来提供低延迟低开销的多播路由。

2.2.1 反向通路洪泛

在基本的反向通路转发算法中,当且仅当一个广播分组是从路由器往回到源S的最短通路(反向通路)上到达时,该路由器才会转发该源于S的广播分组。路由器在除分组从其到达的所有附接链路上转发分组。在两个方向上的通路长度相同的网络中,例如使用跳段计数测量通路长度,该算法产生到达所有链路的最短通路广播。

为了实现基本的反向通路转发算法,一个路由器必须能够识别从它往回到达任何主机的最短通路。在使用距离向量作为单播流量路由的互联网络中,该信息恰好就是存储在每个路由器的路由表中的信息,而且大多数距离向量路由的实现都使用跳段计数作为它们的距离度量值。因此反向通路转发易于实现,在大多数距离向量路由环境中,在提供最短通路广播方面是有效的。另外,只要在两个方向上通路长度相等或近于相等,不使用跳段计数的距离向量也可以支持最短通路或近似最短通路的广播。

前面叙述的反向通路转发执行广播。为了把该算法用于多播,只需指定一组可以用作分组的目的地的互联网络多播地址,并且对所有指向这样的地址的分组执行反向通路转发就可以了。主机选择它们属于哪些组,并且简单地丢弃前往所有不是这些组的到达分组。

早先使用的反向通路转发算法是基于在路由器之间都是点到点链路的环境,每个主机也通过一条条点到点链路附接到它自己的路由器。在现在的互联网络环境中,路由器既可能连接到点到点链路,也可能连接到像是以太网这样的多路访问链路,而且多数主机都驻留在多路访问链路(即LAN)上。为此,每当一个路由器把一个多播分组转发到一个多路访问链路时,就把它作为一个本地多播发送,使用从互联网络多播地址映射得到的一个链路层地址。这样,单个分组传输可以到达可能在共享链路上存在的所有成员主机。路由器被假定成能够收到在它们的附接链路上传输的所有多播分组,因此单个传输也到达在那条链路上的任何其他路由器。遵照反向通路算法,一个接收路由器仅当它认为发送方路由器是在最短通路上,即发送方路由器是前往多播源发方的下一跳地址时,才会转发该分组。

作为一种广播机制,基本的反向通路转发算法的主要缺点是单个广播分组可能不止一次地通过链路传输,最大次数可达到共享链路的路由器的个数。其原因来自该转发策略本身,它把分组在除从其到达的链路之外的所有链路上洪泛,而不管这些链路是否是以发送方为根的最短通路树的一部分。这个问题将在本章的后续部分讨论。为了把这个基本的洪泛形式的反向通路转发跟将要在后面介绍的优化方法相区别,我们把它称作反向通路洪泛,或简称RPF(Reverse Path Flooding)。

2.2.2 反向通路广播

为了避免由RPF算法产生的重复广播分组,需要每个路由器标识它的哪些链路是在以任何给定的源S为根的最短反向通路树中。然后当一个源于S的广播分组通过往回到S的最短通路到达时,该路由器可以仅在S的孩子链路上转发出去。

下面介绍一种标识孩子链路的技术,它仅使用通常在路由器之间交换的距离向量路由分组中包含的信息。该技术为每条链路针对每个可能的源S都标识单个“父”路由器。“父”是具有到S最小距离的路由器。在具有相同距离的情况下,选择其中具有最低地址的路由器为“父”。一个特别的路由器在它的每条链路上获悉每个邻居到达每个S的距离,而这正是在定期接收的路由分组中传达的信息。因此每个路由器都能够独立地确定它是否是一条特别的链路(对于每个S的“父”路由器而言)。

作为例子,图2-1显示了该技术在互联网中是如何工作的。在这个例子中,三个路由器x、y和z都附接到LAN a(共享链路)。路由器z还连接到LAN b。虚线表示从x和y到一个驻留在互联网中某个位置的特别的广播分组源S的最短通路。从x到S的距离是5个跳段,从y到S的距离是6个跳段。路由器z经过x到达S的距离也是6个跳段。

图2-1 反向通路转发示例

先看一下在这种情况下使用RPF算法会产生的问题。x和y都在它们到达源S的最短通路的链路上收到源于S的广播分组。它们都把广播分组的一个拷贝转发到LAN a。因此附接到LAN a的所有主机都会收到来自S的广播分组的重复拷贝。然而路由器z只把来自x的拷贝转发到LAN b,因为x是z前往S的最短通路的下一跳段地址。

现在再看父路由器选择技术是如何解决在共享链路上广播分组的重复拷贝问题的。所有三个路由器x、y和z都在LAN a上定期地发送距离向量路由分组,报告它们到每个目的地的距离。从这些分组,它们中的每一个都知道x具有到S的最短距离。因此,仅x把LAN a当作针对S的孩子链路。x是LAN a的父路由器。LAN a不是y针对S的孩子链路。y不再多余地把源于S的广播分组转发到LAN a。

如果x和y到S的距离都是5,那么具有最低地址的路由器,比如说x,将成为LAN a的父路由器。注意,为了反向通路转发的目的,每个路由器必须为每个源S选择单个最短反向通路。具有多个到达S相同距离且都是最短通路的路径的路由器在决定是否转发由S发送的广播时,应该使用下一跳段地址最低的路径。因此,在我们的例子中,仍然是仅当广播来自x时,z才会把它在LAN b上转发。

为了免除重复的广播分组,父路由器选择技术需要在每个路由表项中设置一个附加的域——孩子(children)。在一个路由器的路由表项中,孩子域是一个对应每条附接链路都有1比特的位图。在面向目的地的路由表项中,如果L是这个路由器源于目的地的广播的孩子链路,那么孩子域中对应L的位置1。

我们把这种算法称作反向通路广播(Reverse Path Broadcasting,RPB),因为它提供一个到达互联网的每条链路的干净、利落的广播(假定没有传输差错或拓扑故障)。

2.2.3 截短的反向通路广播

RPF和RPB都实现最短通路广播,它们可以把多播分组传播到互联网络中的所有链路,依赖主机地址过滤器抛弃不想接收的多播。在非频繁多播的小的互联网中,这是一个可以接受的方法,就像链路层桥接器把多播分组发送到每个网段对于某些局域网也是可以接受的那样。然而,正像在大的扩展LAN中那样,为了节省网络和路由器资源,需要把多播分组仅仅发送到想要接收它们的那些链路。

为了把源自S的多播通过最短通路投递给组G的成员,必须对以S为根的最短通路广播树“剪枝”,使得该多播仅到达有组G的成员的那些链路。为此,需要组G的成员定期地沿着广播树向上往S的方向发送成员关系报告。没有从其接收到成员报告的枝将被从树中剪除。不幸的是,这种剪枝操作需要针对每个组在每个广播树上分别进行,结果引发大的报告带宽和路由器存储需求,相当于总组数与可能的源总数的乘积的量级。

在这一节里,我们介绍一种替代方法,它仅仅把非成员的叶网络从每个广播树中删除。它具有适度的带宽和存储需求,适用于叶网络带宽是关键资源的互联网络。下一节将讨论比较彻底的剪枝问题。

为了让一个路由器放弃在一个没有组成员的叶网络上转发多播分组的操作,该路由器必须能够识别叶、检测组成员关系。使用在前一节介绍的算法,一个路由器能够识别它的哪些链路是对于一个给定的源的孩子链路。叶链路就是它的那些没有其他的路由器利用其到达源S的孩子链路。作为例子,在图2-1中的LAN b就是对于以S为根的广播树的叶链路。如果每个路由器都定期地在它的每条链路上发送一个分组,说“这个链路是我到达这些目的地的下一跳段”,那么这些链路的父路由器就能够说出这些链路是否是对于每个可能的目的地的叶。在我们的示例中,路由器z在LAN a上定期地发送这样的一个分组说“这个链路是我到达S的下一跳段”,因此路由器x(LAN a的父路由器)就知道LAN a不是一个对于S的叶。事实上,之所以要把路由器z连接到LAN a,就是为了让它连接针对S的孩子链路b。

某些距离向量路由的实现在它们常规的路由协议分组中为通过其路由分组的链路(即该路由器到目的地的最短通路使用该链路)前往的所有目的地宣告一个无穷大的距离,从而已经隐含地传达了这个下一跳段信息。这是称作水平分裂的技术的一部分(既然在计算自己到达某个目的地的最小距离过程中已经选用了在该链路上的一个邻居报告的最小距离,就不可以再通过该链路往回向该邻居报告自己到达该目的地的距离),它有助于在拓扑改变时减少路由聚合的时间。在没有这样的下一跳段信息的情况下,只需在路由分组的每个<目的地,距离>对中加进一个额外的位。这些位标识前往哪些目的地的路径是要经过发送路由协议分组的链路的。

在路由表中,另一个位图域——叶被加到每个登记项,标识哪个孩子链路是叶链路。

现在我们能够标识叶了,我们还要检查在这些叶上是否有一个给定组的成分。为此,我们让主机定期地报告它们的成员关系。我们可以用在第1章中介绍的组成员报告算法,让每个报告都在本地报告到正在被报告的组。在那条链路上的同一组的其他成员都接听到报告,并禁止它们自己的报告,因此在每个报告间隔时间内,链路上的每个组仅发布一个报告。不必使用非常小的报告间隔时间,一般说来,当在一条链路上一个组的所有成员都离开时的情况是否会被很快检测到的问题不是很重要,因为这只是意味着在所有的成员都离开之后的一段时间内指向那个组的分组可能还会被投递到该链路。

然后,路由器对于每条附接链路维持一个在那条链路上存在哪些组的列表。如果这些列表存储为哈希表,以组地址进行索引,那么一个组的存在与否就可以很快确定,而不管存在多少个组。现在反向通路转发算法就变成,如果一个源自S发给G的多播分组是从前往S的下一跳段地址到达,就在对于S的所有孩子链路上转发一个拷贝,除非是没有G的成员的叶链路。

总结一下这个我们称之为截短的反向通路广播(或TRPB)算法的代价。

● 在存储代价方面,在每个路由器中对于每个路由表项都需要增加标识孩子和叶域的几个位;对于路由器的每条链路增加一个组列表。组列表的大小应该能够容纳在单条链路上预期存在的组的最大数目。

● 在成员报告消耗的带宽方面是在每条链路上,在每个报告间隔时间内,每个存在的组传输一个成员报告。成员报告是很小的固定长度的分组,报告间隔时间可以合理地设置成分钟的数量级。

● 在路由分组中传达下一跳段信息的带宽消耗典型地是0,要么因为使用了水平分裂技术,要么因为可以从已有的<目的地,距离>对中盗用未被使用的位来运载这类信息。

2.2.4 反向通路多播

如前所述,通过向每个多播源发送成员关系报告剪枝最短通路广播树会引发很大的报告流量和路由器存储需求。在大的互联网络中,我们不期望每个可能的源都向每个存在的组发送多播分组,因此对每个可能有的多播树都执行剪枝操作将是有巨大开销的一种浪费。我们倾向于仅对那些在实际使用中的多播树执行剪枝操作。

我们的最后一种反向通路转发策略提供对最短通路多播树的按需剪枝。当一个源开始把一个多播分组发送给一个组时,按照TRPB算法,它被沿着最短通路广播树投递到除了非成员叶以外的所有链路。当该分组到达一个其所有的孩子链路都没有目的地组成员的路由器时,该路由器就针对那个(源,组)对产生一个没有成员的报告(Non-Membership Report,NMR),并将该报告发送给往回向着源的方向一个跳段的路由器。如果往回一个跳段路由器也从它的所有孩子路由器(即在它的各个孩子链路上的所有路由器,它们经由这些链路到达多播的源)接收到NMR,它的这些孩子链路也都没有该组的成员,那么它再往回给它的前辈发送一个NMR。以这种方式,没有组成员的信息沿着没有导向组成员的所有支路向树根方向传播。借助放在中间路由器上的NMR,随后从同一个源发往同一组的多播分组就可以被阻止在不必要的支路上往下传输。

一个没有组成员的报告包括一个历时域,由产生报告的路由器设置初值,被接收报告的路由器增值。当一个NMR的历时值达到一个门槛(Tmaxage)时,它就被丢弃。在叶上产生的NMR以0值历时域起始。作为从靠近叶的路由器接收到NMR的结果,由中间路由器产生的NMR的起始历时值等于所有下属NMR中的最大历时值。因此,被一个NMR剪掉的任何通路在经历Tmaxage时间后将重新加入多播树。如果在那时候仍然有来自同一个源发往同一个组的流量,那么在那个通路上仍然没有组成员的情况下,下一个多播分组将触发一个新的NMR的产生。

当一个新组的成员在一个特别的链路上出现时,我们希望该链路立即被包括在正在给该组发送的任何源的树上。为了做到这一点,可以让路由器记住它发送了哪些NMR,并在需要时发送取消报文来消除NMR的效果。

如果一个NMR在传送的过程中丢失了,那么相关的子树会不必要地继续留在多播树中,但这种情况通常只会持续到下一个多播分组引发另一个NMR为止。丢失取消分组的影响则比较严重,因为新的通路不能及时地加入树,直到Tmaxage的时间长度内在那个通路上的组成员接收不到多播分组。如果我们要求接收方对取消报文做肯定的确认应答,那么我们就可以把Tmaxage时间设置得很长,这样做就能够减少在不必要的分支上(即仍然没有组成员的通路)向下传输的多播流量的数量。

这个被称作反向通路多播(reverse path multicasting,RPM)的算法需要有跟TRPB算法同样的代价,再加上传输、存储和处理NMR及取消报文的代价。那些附加的代价主要跟下列因素有关:多播源和组成员的个数及位置,多播流量分布,成员变化的频率,以及互联网拓扑。在最坏的情况下,一个路由器必须存储的NMR的数目是这样的数量级:在Tmaxage长度时间内活动的多播源的个数,乘上在那段时间内在它们(包括每一个多播源)向外发送的多播分组中作为目的地址的多播组的平均个数,再乘上邻接路由器的个数。

有许多因素可以减少这些存储需求:

(1)连接到同一链路的所有主机都可以当作单个多播源处理,只要路由器能够从数据报的源地址识别源链路,就像IP地址那样。

(2)使用一个小的生成时间(time-to-live)发送的多播数据报在到达许多路由器之前可能就期满,因此在那些路由器中避免产生NRM。

我们相信,许多互联网络多播应用都能够有效地使用TTL范围控制,要么因为它们仅需要跟一个大的组的附近子集通信(例如在寻找一个附近的名字服务器时),或者因为已经知道所有的组成员都接近发送方(例如一个并行计算分布在单个场点的若干台计算机上)。如果是这样的情况,存储代价就会大幅度减少,在典型的距离向量路由环境中(少于100条链路),NMR的存储空间不会是一个限制因素。

通过减少Tmaxage来恢复存储也会消耗带宽。然而在对路由器存储容量大小、超时值做出建议之前,或者甚至跟比较简单的TRPB算法相比,是否值得为RPM更为精细的算法增加复杂性和开销,需要在真实的互联网络环境中获得实际的多播流量的经验。

在我们关于反向通路转发的讨论中尚未提及的一个问题是拓扑变化的影响。如果在分组传输的过程中路由表改变,反向通路转发可能引起分组重复投递或丢失。由于我们仅需要数据报类可靠性,偶尔的分组丢失或重复投递是可以接受的;我们假定主机负责提供适当的端到端的恢复机制。然而RPM算法的实现必须仔细考虑可能会导致剪枝多播树的任何拓扑改变。例如,相对于一个给定的多播源,当路由器有一条新的孩子链路或新的孩子路由器时,它必须为执行中的NMR发送取消报文,以保证新的链路或路由器会被包括在未来的来自那个源的多播传输中。

2.2.5 DVMRP

DVMRP(Distance Vector Multicast Routing Protocol,距离向量多播路由协议)是一种属于所谓的密集方式(dense mode,DM)路由协议。某些多播路由协议在具有丰富带宽且接收方相当密集的分布环境中工作得很好。在这种情况下,由于不需要具有很大的可扩展性,使用定期的洪泛或其他强化带宽的技术是合理的。

现有的密集方式路由协议除了我们将在本节中阐述的DVMRP,还包括我们将在本书的后面介绍的MOSPF(Multicast Extensions to Open Shortest Path First,开放最短通路优先的多播扩展)和PIM-DM(Protocol Independent Multicast - Dense Mode,协议独立多播——密集方式)。

DVMRP是一个距离向量路由协议,支持通过互联网络的多播数据报投递。DVMRP使用反向通路多播(RPM)算法构建基于源的多播投递树。

1.物理和隧道接口

一个DVMRP路由器的接口可以是对于直接附接的子网的物理接口,也可以是通向另一个具有多播能力的域的隧道接口(虚拟接口)。所有接口的配置都使用一种指定它们的具体代价的度量值,以及为了通过这个接口任何多播分组都必须超过的TTL门槛值。此外,每个隧道接口必须显式地配置两个附加参数:本地路由器隧道接口的IP地址和远方路由器接口的IP地址。

仅当IP头中的TTL域大于赋给接口的TTL门槛值时,多播路由器才通过接口转发数据报。表2-1列出了用以限制IP多播范围的常规TTL值。例如,TTL小于16的多播数据报限于同一场点内的传播,不应该通过接口转发到同一区域的另一场点。

表2-1 TTL范围控制值

基于TTL的范围限定并非对于所有的应用都是足够的。当试图同时对拓扑、地理和带宽进行限制时会有冲突。特别地,基于TTL的范围限定不能够处理重叠区域,而处理重叠区域的功能是管理域的一个必要特征。鉴于这些问题,1994年创建了“管理”范围限定,提供基于多播地址的范围限定。某些地址在给定的管理范围(例如一个公司的互联网络)内可以使用,但不能转发到MBONE。这就允许具有私密性,以及在D类地址空间内的地址重复使用。从239.0.0.0到239.255.255.25的地址范围被保留为管理限定的范围。

2.基本操作

DVMRP实现反向通路多播(RPM)算法。根据RPM,对于任何(源,组)对的第一个数据报通过整个互联网络转发(可以通过提供分组的TTL和路由器接口门槛值来做到这一点)。当接收到这个流量时,如果叶路由器在它们直接附接的叶子网上没有组成员,那么它们可以往回向着源的方向发送剪枝(prune)报文。剪枝报文从树中删除不是前往组成员的所有分支,让它们离开一个基于源的最短通路树。

在一个周期的时间之后,对于每个(源,组)对的剪枝状态期满,回收被用来存储属于不再处于活动状态的组的剪枝状态的路由器存储器。如果这些组刚好仍然在使用中,那么随后发往该(源,组)对的数据报将通过所有的下游路由器广播。这将引发一组新的剪枝报文,重新生成该(源,组)对的基于源的最短通路树。由于RPM(特别是DVMRP)剪枝报文的发送不是可靠的,因此必须把剪枝存活时间设置得比较短,以补偿潜在的剪枝报文丢失。

DVMRP还实现一种机制,快速地把先前从一个组的投递树上剪掉的枝再嫁接回来。如果一个已经发送了针对一个(源,组)对的剪枝报文的路由器在叶网络上发现了新的组成员,那么它就向针对这个源的前一跳段路由器发送一个嫁接(graft)报文。当一个上游路由器接收到一个嫁接报文时,它就取消先前接收到的剪枝报文。嫁接报文往回向着源的方向逐跳串接,直至它们到达投递树上最近的活动分支点。就这样,先前被剪掉的枝被很快地恢复成多播投递树的一部分。

3.DVMRP路由器功能

当一个子网上有不止一个DVMRP路由器时,主导路由器负责定期发送IGMP主机成员关系查询报文。为了避免重复的多播数据报,在子网上有不止一个DVMRP路由器的情况下,仅其中的一个路由器被选举为该子网的主导路由器。一个DVMRP路由器在初始化时把自己当作所在子网的主导路由器,直到它从一个具有较低IP地址的邻居路由器接收到一个主机成员关系查询报文为止。最终,具有最低IP地址的路由器成为该子网的主导路由器。

在图2-2中,路由器C是在下游,潜在地可能接收来自路由器A或路由器B的源子网的数据报。如果路由器A到源子网的度量值小于B的度量值,那么对于这个源,路由器A是主导,路由器B是从属。

图2-2 在一个冗余拓扑中的DVMRP主导路由器

这就意味着,路由器A将转发来自源子网的流量,路由器将丢弃接收到的来自那个源的流量。然而,如果路由器A的度量值等于路由器B的度量值,那么在其下游接口(孩子链路)具有较低IP地址的路由器成为主导路由器。注意,在一个具有多个路由器转发来自多个源前往多个组的流量的子网上,对于不同的源,主导路由器可能也不同。

4.DVMRP路由表

由于DVMRP是为了路由多播而不是为单播开发的,一个路由器可能需要运行多个路由进程——一个用于单播流量投递,另一个用于多播流量投递。DVMRP进程定期地与具有多播能力的邻居交换路由表更新报文。这些更新独立于提供对单播路由支持的任何内部网关协议产生的那些更新。

DVMRP依靠接收“毒性逆转(poison reverse)”更新做叶路由器检测。该技术需要一个下游邻居向它往回到达一个源子网的最短通路上的前一跳路由器通告到达该源子网的代价为“无穷大”。如果一个上游路由器在一个下游接口上没有接收到针对一个源子网的“毒性逆转”更新,那么该上游路由器就认为该下游子网是一个叶,从它的转发端口列表中删除该下游端口。

再次查看图2-2,发现图中有两个类型的路由器:主导和从属。从属路由器是一个不在往回前往一个源的最短通路树上的路由器。主导路由器在每个源的基础上持续跟踪从属路由器,它从不需要也不会期待从一个从属路由器接收剪枝报文。仅仅真正位于下游分发树上的路由器将会需要向主导路由器发送剪枝报文。如果在LAN上的一个主导路由器从所有下游路由器都接收到了关于一个目标组针对源子网的剪枝,并且其所有的孩子链路都没有目的地组成员,那么它自己就要往上游朝着源的方向发送一个剪枝报文。

图2-3给出了一个DVMRP路由器的样例路由表。与由诸如RIP、OSPF或BGP这样的单播路由协议建立的路由表不同,DVMRP路由表包含源前缀和“前-网关”,而不是目的地前缀和下一跳段网关。

图2-3 DVMRP路由表

该路由表表示在互联网络中到达每个可能的源前缀的最短通路(基于源的)生成树,也就是反向通路广播树(RPB)。DVMRP路由表不表示组成员关系或接收的剪枝报文。

DVMRP路由表的主要成分包括下列条目。

● 源前缀(Source Prefix)

潜在的或实际的多播数据报源的子网。

● 子网掩码(Subnet Mask)

跟源前缀相关联的子网掩码。注意,DVMRP为每个源子网都提供子网掩码,也就是说DVMRP是无类别的。

● 前-网关(From-Gateway)

往回前往一个特别的源前缀的前一跳段路由器。

● TTL(time-to-live,生存时间)

生存时间用于表管理,表明一个登记项在从路由表中删除之前所经历的秒数。这个TTL与在基于TTL的范围限定中所使用的TTL没有关系。

5.DVMRP转发表

由于DVMRP路由表不能够感知组成员关系,因此DVMRP进程需要根据在多播路由表中包含的信息与已知的多播组,以及接收到的报文相结合的综合条件建立一个转发表。转发表表示本地路由器对于针对每个(源,组)对的最短通路(基于源的)投递树,即反向通路多播(RPM)树的了解。图2-4显示的是一个样例DVMRP路由器的转发表。

图2-4 DVMRP转发表

在该表中的成分包括下列条目。

● 源前缀:向指定的组发送多播数据报的子网(每行一组)。

● 多播组:作为多播数据报目的地址的D类IP地址。注意,给定的源前缀可能包含多个多播组的源。

● TTL(time-to-live,生存时间)用于表管理,表明一个登记项在从转发表中删除之前所经历的秒数。

● 入口:对于一个(源,组)对的父接口。在这一列中的'Pr'表明,已经把一个剪枝报文发送给了上游路由器(在DVMRP路由表中的针对源前缀的前-网关)。

● 出口:在其上转发对于(源,组)对的多播数据报的孩子接口。在这一列中的'p'表明,本路由器已经在这个端口上接收了来自下游路由器的一个剪枝报文。

6.DVMRP树的建立和转发小结

DVMRP让分组从一个多播源沿着反向通路多播(RPM)树向外转发。该技术的通用名是反向通路转发,在本书的往后部分我们将会看到,它也被一些其他的多播路由协议采用。

不过,我们已经知道,反向通路广播(Reverse Path Broadcasting,RPB)过度使用网络资源,因为所有的结点都接收每个分组的一个拷贝。RPB没有通过剪枝来使得分发树仅包括通向有处于活动状态的接收方的分支的过程。因此RPB是一个广播技术,而不是一个多播技术。

截短的反向通路广播(Truncated RPB,TRPB)加进了一个小的优化,使用组成员关系报告机制在RPB树边缘的LAN上告知是否有接收方;如果没有接收方,那么分组就止于叶路由器,不转发到边缘LAN。尽管节约了LAN带宽,但TRPB仍然把每个分组的一个拷贝发送到在拓扑中的每个路由器。

在DVMRP中使用的反向通路多播(Reverse Path Multicasting,RPM)为了对分发树进行剪枝,从组成员报告机制得到组成员关系信息,向上游(向着源子网方向)发送控制报文。该技术为了避免在不是通往处于活动状态的接收方的树枝上传输所浪费的带宽,在参与操作的路由器上需要消耗一些存储器(存储剪枝信息)。

在DVMRP中,按需建立RPM分发树,产生对于给定的源发往一个组的转发表登记项。转发表指明对于来自这个源的分组所期待的输入接口,以及将其往该组的其余部分分发所使用的输出接口。转发表登记项在发往一个新的(源,组)对的分组到达一个DVMRP路由器时建立。在接收每个分组时,都把分组的源和组对照转发表适当的行进行匹配检查。如果匹配成功,并且分组是在正确的输入接口上接收到的,就在对于这个组的适当的输出接口上往下游转发。

DVMRP的树建立协议也常被称作“广播和剪枝”,因为发往一个新的(源,组)对的分组第一次到达时,它被传输给在互联网络中的所有路由器。然后边缘路由器启动剪枝操作,不需要的投递支路被剪除。因此,在从一个树枝的顶部到最远的叶路由器的来回路程时间(典型地在几十毫秒的数量级或更少)内,这个新的(源,组)对的分布树被很快修剪成仅服务于处于活动状态的接收方。

当一个分组到达时DVMRP路由器所做的检查被称作反向通路检查。在接收一个多播分组时路由器必须做的第一件事是确定它是在正确的输入接口上到达的。对于这个路由器已经看到过的匹配(源,组)对的分组,已经有一个转发表登记项指明所期待的输入接口。对于新的分组,DVMRP的路由表被用来把实际的接收接口跟该路由器认为是在往回通向源的最短通路上的接口进行比较。如果反向通路检查成功,就把分组仅在该路由器认为是孩子接口(针对分组的源)的那些接口上转发;可能有一些接口,它们对于一个给定的源,既不是孩子接口,也不是输入接口。孩子接口连接到使用该路由器作为其前往源的最短通路上的上一跳段的子网。

一旦确定了针对这个(源,组)对的输入接口和有效的下游孩子接口,就建立一个转发表登记项,使得在未来能够对这个(源,组)对的分组做快速的转发。任何时候都不可以把多播分组往回向源的方向转发,因为那样会引发转发回路。