📄 rfc1075.txt
字号:
—无穷大
标有‘*’的行表示直接由转发算法使用的字段。
孩子和叶子接口列表能用位图实现。
5.1 发送路由报文
使用DVMRP路由报文能达到三个基本的目的:周期性的提供所有路由信息,为最近
改变的路由免费提供路由信息,为响应一个请求提供一些或所有路由信息。
送到物理接口的路由报文的IP TTL字段应为1。
何时发送路由报文的规则:
—每过FULL_UPDATE_RATE秒,路由器应该发送带有所有路由信息的DVMRP报文
给它的所有虚拟接口。为了在路由器发送更新信息时阻止它们同步,应该使用一个实时定时
器。
—在路由改变时,路由更新信息应该为这个路由发送。为了避免网络被触发更新所淹没,
触发更新之间必须有一些延时;建议使用TRIGGERED_UPDATE_RATE秒作为间隔时间。
当DVMRP路由器重新启动时,对所有路由的请求应该被在所有虚拟接口上发送。
—如果可能,当DVMRP路由器将中止执行时,它应该在所有虚拟接口上,为所有路
由发送带有等于无穷大的度量的DVMRP报文。
当报文发送到经由支持多播的网络连接的路由器上时,它应该被多播到地址224.0.0.4。
因此,路由器必须侦听每个支持多播的物理接口上的多播地址224.0.0.4。如果不支持多播,
则使用广播。就像已经提到的那样,到隧道的路由更新信息应以单播数据报的形式发送到远
程隧道终端。
当发送路由报文时,除了响应特定的路由请求外(经由非零计数的RDA命令),必须
进行毒害的分裂水平处理。这意味着给定一个使用网络X的路由,送到网络X上的路由信
息必须包括度量为无穷大的路由,还应该包括设置在FLAGS0命令上的适当的标志。
毒害的分裂水平是减少路由循环的可能性的一种方式。另一中RIP中没有的方法是选
择路由中的较好的无穷大。对于在一个小规模的,连接良好的网络上传播的路由,小于16
位的无穷大可能更好些。无穷大的值越小,计数到无穷大的事件发生的时间越短。在穿越一
个大规模的互联网时,16位的无穷大可能太小。以计数到无穷大事件发生的时间变长为代
价,无穷大应该被增加。
在因特网上多播的一个概念是使用“阈值”来限制多播数据报离开一个网络。在子网或
自治系统的边缘的多播路由器可能要求一个数据报具有大的TTL值,以便离开一个网络。
这种机制使得大部分多播数据报处于一个网络中,减少了外部的通信量。如果一个应用程序
想把多播超出它的本地网络的范围,那么它的数据报的TTL字段的值至少是阈值和到网络
边缘的距离的和。必须有一个配置选项允许为物理接口和隧道指定阈值。
当一个路由器启动时,它必须在它的每个虚拟接口上为所有的路由发送一个请求。这个
请求是一个带有RDA命令的报文,RDA命令的计数等于0。
5.2 接收路由报文
路由器必须知道路由报文到达的虚拟接口。因为路由报文的地址可能是所有多播路由器
的IP地址,而且因为有隧道,接收接口不能仅仅通过检查报文的IP目的地址而被识别。
对于在路由报文中表示的每条路由,以下必须出现:
IF 为一个路由设置了度量:
THEN 增加有报文到达的虚拟接口的度量。
在路由表中查找路由的目的地址。
IF 路由没有出现在表中:
THEN 试图在路由表中发现到相同网络的一条路由。
IF 那条路由出现在表中:
THEN IF 这条路由和被发现的路由来自相同的路由器:
THEN CONTINUE 下一条路由。
IF 路由没有一个无穷大的度量:
THEN 在路由表中增加这条路由。
CONTINUE 下一条路由。
IF 这条路由和被发现的路由来自同一个路由器:
THEN 清除路由定时器。
IF 收到一个路由,它与被发现的路由的度量不同:
THEN 使用新的路由和无穷大来改变被发现的路由。
IF 度量与无穷大相等:
THEN 置路由定时器的值为EXPIRATION_TIMEOUT.
CONTINUE 下一条路由。
IF 接收到的无穷大与被发现的无穷大不同:
THEN 将发现路由器无穷大改为接收到的无穷大。
将被发现的路由的度量改为接收到的无穷大和发现路由度量的最小值。
ELSE IF 收到一个度量,(它小于被发现路由的度量或(路由定时器的当前值至少接近
EXPIRATION_TIMEOUT的一半,而且被发现路由的度量等于接收到的度量,
这个度量小于接收到的无穷大)):
THEN 使用接收到的路由改变路由表。清除路由定时器。
CONTINUE 下一条路由。
5.3 邻居
必须有一个列表保存在每个附属的网络上的临近多播路由器。信息可从接收到的
DVMRP路由报文中获得。如果在NEIGHBOR_TIMEOUT秒中没有收到一个邻居的任何消
息,则认为它已经关机了。
5.4 本地组成员
像[2]所要求的那样,多播路由器必须跟踪附属于它的有多播能力的网络上的组成员。
每过QUERY_RATE秒,在每个网络上,应由一个指定的路由器发送一个IGMP成员请求给
所有多播组地址(224.0.0.1)。IGMP成员请求将使主机在一个短延迟内用IGMP成员报告作
为响应。主机将为一个组发送一个报告声明这个组的多播地址。
成员请求报文的IP TTL字段为1。
在一个网络上的路由器选举或“指定”一个单一的路由器发出请求。被指定的路由器是
网络中IP地址最小的路由器。当启动时,路由器在获知(假设通过路由报文)还有一个更
低的地址的路由器之前,它认为自己就是被指定的路由器。为了在启动时获知一个网络上出
现的组成员,路由器应该多播许多成员请求,每次请求之间有一个短的延时。我们建议发送
三个请求,每次的间隔是四秒。
多播路由器必须接收所有送到所有多播地址的数据报。当从一个接口上收到有关一个组
的IGMP成员报告,它必须记录这个接口上这个组的存在性和时间,而且如果这个组已经被
记录,则更新时间。被记录的组成员必须设置了超时时间。如果过了
MEMBERSHIP_TIMEOUT秒后,没有收到一个被记录的组的组成员报告,则这个被记录的
组将被删除。
6 转发算法
这一部分讲述多播转发算法和必须为这个算法保存的状态。
转发算法用于确定到达一个物理接口或隧道的多播数据报应如果被处理。如果多播数据
报是被淹没的,则在一个虚拟接口上接收到的数据报应该从所有其它的虚拟接口上转发出
去。因为在互联网上的冗余路径,所有数据报应该被复制。路由算法提供的孩子和叶子信息
用于修剪到所有可能的目的地的树的分支。
在路由实体中,每个虚拟接口都有一个占支配性的路由器地址。这个地址是在那个虚拟
接口上,具有到目的地较低度量的路由(它的度量不等于无穷大)的路由器的地址。这个占
支配性的路由器地址不是为下一跳的虚拟接口准备的。
在路由器实体中,每个虚拟接口中还有一个从属路由器地址。这个地址是认为自己是这
个虚拟网络的父亲的路由器的地址。因此,从属路由器地址不是为到一个叶子网络的虚拟接
口准备的。
管理在路由实体中孩子和叶子的算法如下:
当路由器启动时:
为每个虚拟接口生成一个路由实体,它带有:
—在它的孩子列表中所有其它的虚拟接口,
—一个空的叶子列表,
—没有占支配性的路由器地址,
—没有从属路由器地址。
为每个虚拟接口开始一个保持定时器,值为LEAF_TIMEOUT。
当接收到一个新的路由:
生成这个路由实体,它带有:
—在它的孩子列表中,包含除了接收到新路由的虚拟接口以外的所有虚拟接口,
—空叶子列表,
—没有占支配性的路由器地址,
—没有从属路由器地址。
为除了接收到新路由的那个虚拟接口以外的所有虚拟接口开始保持定时器,值为
LEAF_TIMEOUT。
当在一个虚拟接口V上接收到一个邻居N送来的路由,它有一个比在路由表中那一个
低的度量(或相同的度量,如果N的地址小于V的地址),对于这条路由:
If N是V的占支配性的路由器,不让N再当占支配性的路由器,并且在孩子列表中
加入V。
当在虚拟接口V上接收到邻居N送来的路由,它的度量等于无穷大(分裂水平标志应
该被被设置),对这条路由:
If V在叶子列表中,从叶子列表删除V。
If V没有占支配性的路由器,把N记录为占支配性的路由器。
当在虚拟接口V上接收到一个邻居N送来的路由,它的度量不同于无穷大(没有分裂
水平标志),对这条路由:
If N是V的占支配性的路由器,不让N再当占支配性的路由器,并且为V开始保持
定时器。
当一个虚拟接口V的定时器超时,对每条路由:
If V没有占支配性的路由器,在叶子列表中加入V。
当虚拟接口V的邻居N失败,对每一条路由:
If N是V的占支配性的路由器,不让N再当占支配性的路由器,并为V开始保持定
时器。
转发算法是:
IF IP的TTL字段小于2:
THEN CONTINUE 下一个数据报。
寻找到IP数据报的源端的路由。
IF 没有路由存在:
THEN CONTINUE 下一个数据报。
IF 没有为这个路由在下一跳虚拟接口上收到数据报
THEN CONTINUE 下一个数据报。
IF 数据报被隧道化:
THEN 用在IP 松散源路由中的第一个地址代替数据报的源地址。
用在IP松散源路由中的第二个地址代替数据报的目的地址。
删除数据报的松散源路由和空(null)选项,并相应调整IP头部的长度字段。
IF 数据报的目的地址是组224.0.0.0或组224.0.0.1:
THEN CONTINUE 下一个数据报。
FOR 每一个虚拟接口V
DO IF V在数据报源端的孩子列表中:
THEN IF V不在源端的叶子列表中
OR 在V上有目的组的成员
THEN IF IP的TTL字段比V的阈值要大:
THEN 将TP的TTL字段减1
将数据报从V中转发
7 时间值
这一部分包括不同速率和超时,以及它们的意思,它们的值的列表。所有值都以秒为单
位。
路由环境的动态性影响以下速率。较低的速率将允许环境发生改变时的快速适应,代价
是浪费了网络带宽。
FULL_UPDATE_RATE=60
—带有完整的路由表的路由报文被发送的时间间隔。
TRIGGERED_UPDATE_RATE=5
—触发路由报文可能被发送的时间间隔。
提高以下的速率和超时值可能增加分组被转发到一个虚拟接口的时间值。
QUERY+RATE=120
—发出本地组成员请求的时间间隔。
MEMBERSHIP_TIMEOUT=2*QUERY_RATE+20
—本地组成员关系在没有证实的情况下的最长有效时间。
LEAF_TIMEOUT=2*QUERY_RATE+20
—为每个虚拟接口设置的保持定时器的超时值。
增加下面的超时值会增加路由算法的稳定性,代价是路由环境改变时较慢的反应。
NEIGHBOR_TIMEOUT=4*FULL_UPDATE_RATE
—在没有被证实的情况下,一个邻居被承认的时间。这对于超时路由,和设置孩子
和叶子标志时很重要。
EXPIRATION_TIMEOUT=2*FULL_UPDATE_RATE
—在没有被证实的情况下,一条路由被认为是有效的时间。当定时器超时时,分组
将不会在这条路由上转发,路由更新将认为这条路由有一个无穷大的度量。
GARBAGE_TIMEOUT=4*FULL_UPDATE_RATE
—在没有被证实的情况下,一条路由存在的时间。当定时器超时时,路由更新将
不再具有这条路由的任何信息。这条路由将被删除。
8 配置选项
一条路由应该可以被配置下列信息:
—隧道描述:本地终端,远程终端,度量,和阈值。如果没有提供阈值,度量应该
被用于缺省的阈值。
—对于一个物理接口:度量,无穷大,阈值和子网掩码。如果没有提供阈值,度量
应该被用于缺省的阈值。
9 结论
本备忘录展示了DVMRP(一种可扩展的远距离矢量路由协议)和TRPB路由算法。在
这篇文档里提到的思想的一个具体实现已经被完成,正在测试阶段。
与RIP相比,在DVMRP中增加的特征使得它更加灵活,代价是更加复杂的处理。做
为一个距离矢量算法,DVMRP仍然用不足之处。因为连接状态类算法维持DVMRP所要维
持的状态信息中许多信息,而这些信息超出了RIP的需要,所以一个多播状态类的路由协
议应该被开发。
TRPB算法能促使不必要的数据报被发送。反向路径多播算法(RPM)可能是一个更好
的算法。设计NMR和NMR-cancel DVMRP报文的目的是支持RPM。对于这个主题需要更
深入的研究。
10 致谢
我们将感谢Robb Foster, Alan Dahlbom, Ross Callon和IETF主机工作组提供了他们的思
想。
11参考书目
[1] Hedrick, C., "Routing Information Protocol", RFC 1058, Rutgers University, June 1988.
[2] Deering, S., "Host Extensions for IP Multicasting", RFC 1054, Stanford University, May
1988.
[3] Deering, S., "Multicast Routing in Internetworks and Extended LANs", SIGCOMM Summer
1988 Proceedings, August 1988.
[4] Callon, R., "A Comparison of 'Link State' and 'Distance Vector' Routing Algorithms", DEC,
November 1987.
[5] Postel, J., "Internet Protocol", RFC 791, USC/Information Sciences Institute, September
1981.
[6] Mills, D., "Toward an Internet Standard Scheme for Subnetting", RFC 940, University of
Delaware, April 1985.
RFC1075 Distance Vector Multicast Routing Protocol 远距离矢量多播选路协议
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -