📄 rfc1075.txt
字号:
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 保持时间1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 多播地址2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 保持时间2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
计数是多播地址和提供的保持时间对的数目,它的值从1到255。地址的长度依赖于当
前地址家族。提供的保持时间对的数目受512字节的报文长度限制。
缺省:无。
描述:NMR命令是实验性的,并没有在一个具体的实现中被测试。每个多播地址和保持
时间对一起被叫做非成员报告。非成员报告告述接收路由器发送路由器没有给定组中的后继
组成员。基于这条信息,接收路由器能停止为了列表中特定的多播地址而向发送路由器转发
数据报。时间对表示NMR有效的时间,以秒为单位。
如果计数等于0,则出错。
在一个有NMR命令的报文中,仅有的其它命令是AFI,flags0,和NULL命令。与flags0
相关的标志没有被定义,但这种情况可能会在将来改变。
3.10 非成员报告取消(NMR Cancel)命令
格式: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
| 10 | |计数( count) |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
计数(count)附加参数数组,AFI=IP
0 1 2 3
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 多播地址1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 多播地址2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
计数是提供的多播地址的数目,它的值从1到255。地址长度依赖于当前地址家族。提
供的地址数目受512字节的报文长度的限制。
缺省:无。
描述:NMR Cancel命令是实验性的,并没有在具体的实现中被测试。对于每个列出的
多播地址,任意先前相应的非成员报告被取消了。当对于给定的多播地址,没有相应的非成
员报告,对那个多播地址的Cancel命令应该被忽略。
当计数(count)等于0时,出错。
在一个有NMR Cancel命令的报文中,仅有的其它命令是AFI,flags0,和NULL命令。与
flags0相关的标志没有被定义,但这种情况可能会在将来改变。
3.12 例子(字节在{}中),不包括报文头部:
3.12.1 提供一条到IP地址为128.2.251.231的单独的路由。路径的字段为:
度量(metric)为2,无穷大(infinity)为16,子网掩码为255.255.255.0:
Subtype为1,AFI 2, Metric 2, Infinity 16,Subnet Mask 255.255.255.0
{2} {2} {4} {2} {6} {16} {3} {1} {255} {255} {255} {0}
DA Count=1 [128.2.251.231]
{7} {1} {128} {2} {251} {231}
3.12.2 提供一条到IP地址为128.2.251.231和128.2.236.2的路由
它的度量(metric)为2,无穷大(infinity)为16,子网掩码为255.255.255.0:
Subtype 1, AFI 2, Metric 2,Infinity 16,Subnet Mask 255.255.255.0
{2} {2} {4} {2} {6} {16} {3} {1} 255} {255} {255} {0}
DA Count=2 [128.2.251.231] [128.2.236.2]
{7} {1} {128} {2} {251} {231} {128} {2} {236} {2}
3.12.3 请求到IP目的地址的所有路由。
Subtype 2, AFI 2, RDA Count = 0
{2} {2} {8} {0}
3.12.4 组224.2.3.1和224.5.4.6(它们的保持时间为20秒)和组224.7.8.5
(它的保持时间为40秒)的非成员报告。
Subtype 3,
AFI 2, NMR Count = 3 [224.2.3.1, 20]
{2} {2} {10} {3} {224} {2} {3} {1} {0} {0} {0} {20}
[224.5.4.6, 20] [224.7.8.5, 40]
{224} {5} {4} {6} {0} {0} {0} {20} {224} {7} {8} {5} {0} {0} {0} {40}
3.13 命令总结
值 名字 在同一报文中允许的其它命令
----- ---- ---------------------------------------
0 Null Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA, RDA, NMR, NMR-cancel
2 AFI Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA, RDA, NMR, NMR-cancel
3 Subnetmask Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA, RDA
4 Metric Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA
5 Flags0 Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA
6 Infinity Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA
7 DA Null, AFI, Subnetmask, Metric, Flags0,
Infinity, DA
8 RDA Null, AFI, Subnetmask, Flags0, RDA
9 NMR Null, AFI, Flags0, NMR
10 NMR-cancel Null, AFI, Flags0, NMR-cancel
4 隧道
隧道是在被不支持多播路由的网关隔开的路由器之间发送数据报的一种方法。它充当两
个路由器之间的虚拟网络。例如,有一台运行在斯坦福大学的路由器,和一台运行在BBN
上的路由器,这两台路由器可以被一个允许多播数据报穿越因特网的隧道连接。我们认为隧
道是过渡性的手段。
隧道是用弱封装的常规多播数据报来实现的。弱封装使用一个特殊的两元素IP松散源
路由[5]。(这种封装形式比“强”封装(预先考虑一个完全新的IP头部)要好,因为它不
要求隧道终端知道彼此的最大重装缓冲器大小。它也有始发者的生存时间值和任何出现的其
它的IP选项的正当的特性所带来的好处。)
隧道有一个本地终端和远程终端,度量和与它相关的阈值。在隧道每一端的路由器仅需
在本地和远程终端上达成一致就行。要了解有关隧道是如何配置的信息,参看第八部分。因
为不知道一个隧道终端之间的中间网关的数目,所以需要进一步研究来确定合适的度量和阈
值。
要在隧道上发送数据报,会出现如下事件:
—一个空IP选项被插进数据报中。这为松散源路由IP选项提供了优先选取的对齐方式。
—一个两元素松散源路由IP选项被插进数据报中。
—设置源路由指针指向在源路由中的第二个元素。
—在源路由中的第一个元素被起始主机(起始IP源地址)的地址所替换。
—在源路由中的第二个元素被起始主机所提供的多播目的地址(起始的IP目的地址)
所替换。
—IP源地址被路由器的合适的外出物理接口(本地隧道终端)的地址所替换。
—IP目的地址被远程路由器(远程隧道的终端)的地址所代替。
—使用非多播路由算法传送数据报到远程路由器。
中间的非多播网关将为隧道化的数据报选择到远程隧道终端的路由。因为数据报的IP
源地址已经被本地隧道终端地址所替换,ICMP出错信息将到达起始多播路由器。这种特性
是所需的,因为发送多播数据报(多播路由器决定将该数据报放进隧道中)的主机并不知道使
用了隧道。如果当封装这个数据报时,数据报的IP源地址没有改变,任何ICMP错误被送
到起始主机。
当远程隧道终端收到隧道化的数据报时,发生下列事件:
IP源地址被松散源路由中的第一个元素所替换。
IP目的地址被松散源路由的第二个元素所替换。
空选项和松散源路由选项被从数据报中移出。这种处理是必须的,因为主机并不知道它
接收的数据报是从隧道发送来的。
因为没有特定的网络与一个隧道相联系,所以不用为一个隧道跟踪本地组成员。隧道的
唯一的邻居是一个远程终端。路由信息通过隧道交换,但并不为一个隧道生成一个路由。路
由信息应该以一个单播数据报发送,直接到达远程隧道终端;它们不能用IP松散源路由。
为隧道使用源路由和记录选项的原因是:
我们考虑定义我们自己的IP选项来处理隧道,但我们担心中间网关不能透明的传递它
们不知道的IP选项。使用新选项的数据报不会穿越因特网。如果我们能生成一个新的IP选
项,这样就比较好,但这目前还不能做到。记住这是一个过渡设计,允许我们在当前环境中
进行实验。
包含LSRR选项的隧道化分组有一下特征:
字段 值
—— ———————————
源地址 = 源网关地址
目的地址 = 目的网关地址
LSRR指针 = 指向LSRR地址2
LSRR地址1 = 源主机
LSRR地址2 = 多播目的地址
由于为隧道使用LSRR选项而引起的两个问题是“中间网关能忽略这个选项?”和“目
的网关能恰当的检测出LSRR被用于一个隧道吗?”
当中间网关收到一个数据报,它检查目的地址。对于一个隧道化的数据报,目的地址并
不等于接收网关的地址。因此,LSRR选项不会被检查出来,中间网关将把该数据报转发给
到目的地址的下一跳。
当目的网关接收到一个数据报时,它注意到该数据报的目的地址与它自己的一个地址相
匹配。因为源路由还没有用完,它将查看下一个LSRR选项地址。这个地址是多播地址。因
为主机被禁止把多播地址放到源路由上,网关能推断出LSRR用于隧道。这里的不足之处是
LSRR中的多播地址可能有一些其它意义。不过当前还没有其它的意义被定义。
如果隧道化的数据报被错误的定址到不支持多播的目的网关上,则目的网关将试图找到一条
到多播地址的路由。这将失败,而且一个ICMP目的不可达错误报文被送到隧道化的数据报
源端。因为隧道化数据报的源地址已被调整为源多播网关的地址,ICMP错误将不会被送到
起始主机,这台主机并不知道隧道的存在。
5 路由算法
这一部分对距离矢量路由算法做一个简要的介绍。要了解更多的信息请参阅[1]。
虽然DVMRP能表示到单个主机的路由,这个转发和路由算法仅支持网络和子网路由。
在以下的讨论中,术语“虚接口”用来代表一个物理接口或一个隧道本地终端。物理接
口是一个网络接口,例如是以太网卡。到目的地的路由将通过一个虚接口。术语“虚网络”
用来代表一个物理网络或隧道,它仅能在参考物理网络上路由。
TRPB算法通过计算最短(反向)路径树,将多播数据报从源端(物理)网络转发到这
个数据报所有可能的接收者。每个多播路由器必须确定它在树中相对于特定源端的位置,而
且确定它的那些虚接口在最短路径树上。数据报就从这些虚接口中转发出来。排除不在最短
路径树上的虚接口的过程叫做“修剪”(pruning)。
考虑一个虚拟网络,使用Deering的术语,如果一台路由器的责任是通过它的连接虚拟
接口向一个虚拟网络转发数据报,则这台路由器叫做这个虚拟网络的“父亲”。虚拟网络也
能被认为是这个路由器的“孩子”虚拟网络。使用孩子信息,路由器能进行反向路径广播。
不必要的数据报可能仍会被送到一些网络上,而这些网络没有这些数据报的任何接收
者。
有两种接收者:属于一个特定多播组的主机和多播路由器。如果在一个虚拟网络上没有
多播路由器,则认为虚拟网络沿树向上到达一个给定的源端,这个虚拟网络是一个“叶子”
网络。如果一个网络是给定源端的一个叶子,而且在这个网络上没有特定组的成员,则没有
接收者接收从源端到这个网络上的组的数据报。那个网络的父亲路由器能放弃发送这个网络
上的数据报,或“截断”最短路径树。跟踪和使用这个信息的算法是截断反向路径广播(TRPB)
算法。
确定那些虚拟网络是否是叶子并不简单。如果任何临近路由器认为一个给定的虚拟网络
在到一个给定目的地的路径上,那么这个虚拟网络不是叶子。否则,它是叶子。这是一个选
举的功能。如果一个带有由分裂水平处理毒害的度量的路由被某一路由器发送,则那个路由
器使用那个虚拟网络作为那个路由的向上树路径(即,那个路由器投票认为这个虚拟网络相
对于这条路由的目的地来说不是叶子)。因为在一个虚拟网络上的路由器是动态的,而且所
有路由更新信息并不被路由器保存,所以需要一个试探法来决定一个网络是一个叶子。当时
间长度为LEAF_TIMEOUT秒的保持定时器正在运行时,DVMRP采样在一个虚拟接口上的
路由更新信息。每个虚拟接口有一个保持时间定时器。如果当保持定时器还在运行时,或在
任意其它时间收到一条带有一个被分裂水平处理毒害的度量的路由,那么这条路由的合适的
虚拟接口“变坏”了,——它不是叶子。对每条路由来说,当保持定时器超时时,任何没有
变坏的虚拟接口被认为是叶子。
对于一个更好的转发算法——反向路径多播算法的描述,参见[3]。
一个路由实体应该有以下要素:
—目的地址(多播数据报源端) *
—目的地址的子网掩码 *
—到达目的地址的下一跳路由器
—到达下一跳路由器的虚拟接口 *
—孩子虚拟接口列表 *
—叶子虚拟接口列表 *
—每个虚拟接口的主要路由器地址
—每个虚拟接口的次要路由器地址
—表示实体状态的标志集合
—度量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -