【主机扩展用于IP多点传送】1.备忘录状态
该备忘录说明了为了支持多播而对互联网协议(IP)的主机实现的扩展 。它是互联网上
IP多播的推荐标准 。该备忘录可以任意发布 。
2.简介
IP多播是指一个IP数据报向一个主机组的传送,该主机组是由一个单独的IP目的地址
标记的多个或零个主机 。一个多播数据报被尽可能地传递给它的目的主机组的所有成员,就
像常规的单播IP数据报一样 。也就是说,不能保证数据报能完好无损的到达目的组所有成
员,也不能保证它以相对于其它数据报同样的顺序到达 。
主机组的成员是动态变化的;也就是说,主机可以随意加入和离开组 。对一个主机组的
位置和组成员的数量并没有限制 。一个主机可以同时是一个或多个组的成员 。不是某一组的
成员的主机也能向该组发送数据报 。
主机组可以是永久的或是暂时的 。永久组是一个众所周知的,由Internet治理机构分配
的IP地址,它的地址是永久的,而该组的成员是可以改变的 。在任意时刻,一个永久组可
以有任意数量的成员,甚至没有成员 。另外一些不是为永久组保留的IP多播地址是为暂时
组动态分配的地址,这些暂时组只有当它们有成员时才存在 。
IP多播数据报的网间传递是通过“多播路由器”实现的,多播路由器可以驻留在互联
网网关上,也可以与互联网网关分离 。主机以本地网络多播的方式传送IP多播数据报,这
些数据报只到达目的主机组中所有与该主机直接邻近的成员 。假如数据报的IP首部中的生
存时间(TTL)字段大于1,则在本地网络上的一个或多个多播路由器负责将它传递到有目的
主机组的成员的其他网络上 。在那些可以在IP生存时间为零以前到达的其它成员网络里,
当地一个多播路由器以本地多播的方式传递该数据报来完成传送 。
该备忘录说明了为了支持IP多播而对主机的IP实现的扩展,这里的“主机”是除了用
作多播路由器以外的任何互联网主机和网关 。用在多播路由器内和之间的算法和协议对主机
是透明的,将在独立的文档中说明 。该备忘录也不说明本地网络多播是如何在所有不同类型
的网络中实现的,尽管它说明了任意的本地网络所需的服务界面,并给出了一个以太网技术
要求说明作为例子 。其他类型的网络技术说明将会在将来的备忘录中说明 。
3.一致性等级
这个规范有三个一致性等级:
0级:不支持IP多播 。
在这一等级中不需要所有的IP实现支持IP多播 。0级主机一般不受多播活动的影响 。
在一些类型的本地网中,由于1级和2级主机的存在可能导致多播IP数据报错误递交到0
级主机上,这就出现了唯一的异常 。因为这些数据报目的地址字段中出现D类IP地址,所
以它们能被很轻易地被检测出来 。它们会被不支持IP多播的主机毫无声息的丢弃 。D类地
址在本备忘录的第四部分说明 。
1级:能发送但不能接收多播IP数据报 。
1级主机可以参加一些基于多播的服务,诸如资源定位或状态报告,但它不答应主机加
入任何主机组 。IP实现可以非常轻易地从0级升到1级,仅需增加少量的代码 。在本备忘
录中仅仅第4、5、6部分适用于1级的实现 。
2级:完全支持IP多播 。
2级主机可以加入或离开主机组,以及发送数据报给主机组 。它要求Internet组治理协
议(IGMP)的实现和在主机内对IP和本地网服务接口的扩展 。本备忘录中以下所有部分都
适用于2级的实现 。
4.主机组地址
主机组由D类IP地址标记,即高四位为“1110”的那些IP地址 。E类IP地址,即那
些高四位为“1111”的IP地址,是为了将来的编址方式而保留的 。
在Internet标准的点分十进制表示中,主机组地址的范围是从244.0.0.0到
239.255.255.255 。地址224.0.0.0被保证不分配给任何组(包括网关) 。它被用于标记在直接
相连的网络中所有多播主机 。没有多播地址(或其它IP地址)用来标记Internet上的所有主
机 。其它众所周知的地址、永久组将在“已分配编号”(AssignedNumbers)文档中公布 。
附录2包括与主机组地址相关的一些问题的背景的讨论 。
5.主机IP实现模型
对主机IP实现的多播扩展将在下面的层次模型图中说明 。在这种模型中,ICMP和IGMP
(对于2级主机)应在IP模块中实现,IP地址到本地网络地址的映射应由本地网络模块负
责 。这种模型仅用于说明目的,而不应该认为它限制了实际的实现 。
高层协议模块
__________________________________________________________
---------------------IP服务接口-----------------------
__________________________________________________________
ICMPIGMP
IP____________________________
模块
__________________________________________________________
----------------本地网络接口-----------------
__________________________________________________________
本地网络IP到本地物理地址映射
模块(例如,ARP)
(例如,以太网)_____________________________
为了达到1级多播,主机实现必须支持多播IP数据报的传送 。为了达到2级多播,主
机必须还需支持多播数据报的接收 。这两个新服务将在以下各自独立的章节中分别讲述 。对
于每种服务,将分别在IP服务接口、IP模块、本地网络服务接口、以太网本地网络模块中
说明需要的扩展 。对于非以太网的本地网络模块的扩展只是简要地提及,而不具体说明 。
6.发送多播IP数据报
6.1IP服务接口的扩展
多播IP数据报的发送和单播IP数据报的发送一样的,都使用“发送IP”操作;高层协
议模块仅仅指定一个IP主机组地址,而不是单个IP地址,作为目的地址 。然而,许多扩展
可能是必须或是可取的 。
首先,服务接口必须提供一种方式,让高层协议能够指定要送出的多播数据报的IP生
存时间(TTL)字段的值,假如这种能力以前并不存在的话 。假如高层协议没有指定生存时
间,那么对所有多播IP数据报,生存时间(TTL)缺省为1 。因此,要让多播跨过单个网络,
就必须明确指定生存时间 。
第二,对于那些属于多个网络的主机,服务接口必须提供一种方式,能让高层协议标记
哪个网络接口将被用于多播传送 。仅有一个接口用于初始传送;假如需要的话,多播路由器
负责向所有其它网络传递 。假如高层协议没有标记一个外出接口,缺省接口将被使用,这可
由系统治理来控制 。
第三(这仅用于2级实现),假如发送数据报的主机本身是它发向的主机组的成员,那
么服务接口应该提供一种方式,让高层协议禁止这个数据报的本地传送;缺省情况下,该数
据报的一个拷贝被回送 。这对于限制了组成员关系只能是每个主机一个进程(例如路由选择
协议)的高层协议,或对于在更高协议上处理组通信回送(例如多播传输协议)的高层协议,
这是一种性能优化 。
6.2IP模块的扩展
为了支持多播IP数据报的发送,IP模块必须被扩展以在为外出数据报选择路由时识别
IP主机组地址 。大多数IP实现包括以下逻辑:
ifIP目的地在同样的本地网络上
在本地发送数据报给IP目的地
else
在本地发送数据报给网关(IP目的地)
为了达到多播传送,路由选择逻辑必须改为:
ifIP目的地在同样的本地网络上
orIP目的地是一个主机组
在本地发送数据报给IP目的地
else
在本地发数据报给网关(IP目的地)
假如发送主机本身是外出接口上目的主机组的成员,则外出数据报一个拷贝必须回送来
达到本地传送,除非由发送者禁止 。(仅用于2级实现)
外出数据报的源地址必须是与外出接口相对应的单个地址中的一个 。
主机组地址一定不会出现在外出IP数据报的源地址字段,和源路由或记录路由选项中
的任何地方 。
6.3本地网络服务接口的扩展
为了支持多播IP数据报的发送,对本地网络服务接口没有任何改变 。当IP模块调用现
存的“sendlocal"操作时,只不过指定一个IP主机组目的地址,而不是单个IP目的地址 。
6.4以太网本地网络模块的扩展
通过答应多播地址出现在以太网分组中的目的地址字段,以太网就能支持本地多播分组
的发送 。为了支持多播IP数据报的发送,所需的是一个将IP主机组地址映射到以太网多播
地址的过程 。
IP主机组地址映射到以太网多播地址,是通过将IP地址的低23位放在以太网多播地址
01-00-5E-00-00-00(十六进制)的低23位上 。因为在IP主机组地址上有28个有意义的位,所
以多个主机组地址可以映射到相同的以太网多播地址上 。
6.5非以太网的本地网络模块的扩展
其它的那些本身就支持多播的网络,例如符合IEEE802.2标准的环和总线网络 。它们
可以像以太网那样达到发送多播IP数据报的目的 。对于那些支持广播而不支持多播的网络,
例如实验性以太网,所有的IP主机组地址可以被映射为单个本地广播地址(以增加所有本
地主机费用为代价) 。对于连接两个主机(或者一个主机,一个多播路由器)的一个的点对
点连接,多播应该完全像单播那样传递 。对于像ARPANET这样的存储转发网络,或公共的
X.25网络,所有IP主机组地址必须映射为IP多播路由器的众所周知的本地地址;在这些网
络上路由器负责完成在一个网络内或所有网络中的多播传递 。
7.接收多播IP数据报
7.1对IP服务接口的扩展
高层协议使用与接收标准的单播数据报一样的“ReceiveIP”操作,接收到来的多播IP
数据报 。目的高层协议的选择由IP首部的协议字段决定,而与目的IP地址无关 。然而,在
属于一个特定组的任意数据报被接收之前,高层协议必须请求IP模块加入该组 。因此,必
须扩展IP服务接口,提供以下两个操作:
JoinHostGroup(group-address,interface)
LeaveHostGroup(group-address,interface)
JoinHostGroup操作要求本主机在给定的本地网络接口上成为以“group-address”标记的
主机组中的成员 。LeaveGroup操作要求本主机在给定的本地网络接口上离开以
“group-address”标记的主机组 。假如主机只有一个接口,则interface参数可以省略 。对于
属于多个网络的主机,高层协议可以不指明interface,这要求使用缺省的interface发送多播
数据报(参看6.1节) 。
答应在多个interface上加入一个相同的组,这种情况下可能会有重复的多播数据报被接
收;也答应多个高层协议要求加入同一个组 。
这两种操作都立即返回(即它们是非阻塞操作),表示成功或是失败 。每种操作都可能因
为无效的组地址或接口标识符而出错 。JoinHostGroup操作可能由于缺少本地资源而失败 。
LeaveHostGroup可能因为本主机不属于在给定接口上的某一组而失败 。LeaveHostGroup如
果成功,组成员关系可能还存在,因为可能有多个高层协议是同一个组的成员 。
7.2IP模块的扩展
为了能够接收多播IP数据报,必须扩展IP模块,维持一个与每个网络接口相关的主机
组成员列表 。在到来的数据报中,目的地属于这些组地址中某一个的数据报的处理方式与目
的地属于主机的单播地址中某一个数据报的处理方式相同 。
假如主机接收到目的地址是组地址的数据报,而该主机不属于该组,则这个数据报将被
丢弃而不生成任何错误或日志记录 。在有多个网络接口的主机上,假如目的地属于某一组的
数据报经由一个接口到达,而该主机只在另一个网络接口上属于这个组,则这个数据报将被
毫无声息的丢弃 。(出现这种情况的唯一原因是本地网络模块的多播地址过滤功能不完
善 。)
假如到来的数据报的IP生存时间(TTL)为1,则该数据报不会被拒收(即,假如到来
的数据报不会再被转发,则它的生存时间字段不会自动减少) 。假如到来的数据报的源地址
字段出现了IP主机组地址,则该数据报将被毫无声息的丢弃 。ICMP出错信息(目的主机
不可达,超时,参数问题,源站被抑制,重定向)不会因为目的地为IP主机组的数据报而
产生 。
主机组成员列表根据高层协议的JoinHostGroup和LeaveHostGroup操作要求而更新 。每
个成员应该有一个相应的参照数或其它同样的机制,来处理加入和离开同一组的多个要求 。
当第一个要求加入和最后一个要求离开在给定接口上的某个组时,那个接口的网络模块就被
告知,去更新它的多播接收过滤器(参看7.3部分) 。
IP模块也必须扩展,实现在附录1中说明的IGMP协议 。IGMP是用来让邻近的多播路
由器获知在一个特定的本地网络中出现的主机组成员 。为了支持IGMP,每个2级主机必须
在初始化时加入“所有主机”组(地址为224.0.0.1),而且只要主机是开着的,它都要是这
个组的成员 。
(地址是所有主机组的数据报会被多播路由器当成一个非凡情况,不管它的生存时间是
多少,它不会被传递出单一的网络 。因此,所有主机地址不用于互联网范围上的广播地址 。
为了达到IGMP的目的,属于所有主机组的这项要求仅仅在主机属于至少一个其它组时才真
正是必须的 。然而,要求主机在任何时候是一个所有主机组的成员的原因是(1)简单,(2)接
收不必要的IGMP请求的频率应足够的低,以使开销可以忽略不计 。(3)所有主机地址可以
用于其它面向路由选路的目的,例如通知网关的存在或解析本地地址)
7.3对本地网络服务接口的扩展
把到来的本地网络多播分组传递给IP模块使用的方式与处理本地网络单播分组时一
样,都是使用“ReceiveLocal”操作 。为了答应IP模块通知本地网络模块它要接收哪种多
播分组,必须扩展本地网络服务接口,以提供以下两个新操作:
JoinLocalGroup(group-address)
LeaveLocalGroup(group-address)
“group-address”是IP主机组地址,JoinLocalGroup操作要求本地网络模块接收和向上传递
目的地为给定IP主机组地址的分组 。LeaveLocalGroup操作要求本地网络模块停止向上递交
目的地为给定IP主机组地址的分组 。本地网络模块应该能够映射IP主机组地址到本地网络
地址,
这是更新本地网络模块的多播接收过滤器所要求的 。任何本地网络模块都可以忽略
LeaveLocalGroup操作的要求 。假如它不能充分过滤到来的分组,也可以向上传递超出
JoinLocalGroup操作所要求的更多的多播地址的分组 。
本地网络模块不会向上传递任何从该模块出发的多播分组;多播回送是在IP层或更高
层处理 。
7.4对以太网本地网络模块的扩展
为了支持多播IP数据报的接收,以太网模块必须能接收地址是与主机的IP主机组地址
相关的以太网多播地址的分组 。利用以太网硬件接口可能具有的地址过滤能力是非常可取
的,这样主机只接收目的地指向它的那些分组 。
不幸的是,许多当前的以太网接口对硬件能识别的地址数目有很少的限制 。而且,一个
具体的实现必须能侦听任意数目的以太网多播地址,这意味着当地址数目超过过滤器的限制
时,“打开”地址过滤器以接收所有的多播分组 。
对于那些硬件地址过滤能力不强的接口,为了性能的原因,在以太网模块的软件中执行
以太网地址过滤可能要好一些 。然而,这并不是强制性的,因为IP模块基于IP目的地址执
行它自己的过滤 。
7.5对以太网以外的本地网络模块的扩展
像IEEE802.2网络这样的其它多播网络,为了达到接收多播IP数据报的目的而进行的
处理方式与以太网相同 。对于纯广播网络,如实验性以太网,所有到达的广播分组能够被接
收并传递给IP模块以实现IP层过滤 。在点对点或存储转发网络,多播IP数据报以本地网
络单播的形式到达,所以没有必要修改本地网络模块 。
附录1INTERNET组治理协议(IGMP)
Internet组治理协议(IGMP)用于IP主机向所有紧邻的多播路由器报告它们的主机组
成员关系 。IGMP是不对称的协议,将从主机的视角而不是从多播路由器的视角描述它 。
(IGMP也可以在多播路由器之间对称或非对称的使用 。这样的用法这里没有指定 。)
像ICMP一样,IGMP是IP的一个组成部分 。要在所有符合IP多播规范的2级主机上
实现 。IGMP报文封装在IP数据报中,数据报的IP协议字段为2 。所有与主机相关的IGMP
报文具有如下格式:
0123
01234567890123456789012345678901
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
版本类型未用校验和
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
组地址
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
版本
本备忘录说明IGMP版本1 。版本0在RFC-988中说明,它现在已经废弃 。
类型
有两种与主机相关的IGMP报文:
1=主机成员请求
2=主机成员报告
未用
未用字段,在发送时为零,接收时被忽略 。
组地址
主机成员请求报文在被发送时组地址字段为零,被接收时忽略该字段 。
主机成员报告报文中,组地址字段为被报告组的IP主机组地址 。
非正式的协议描述
多播路由器发送主机成员请求报文(在下文叫做请求),以发现哪些主机组在它们所属
的本地网络上有成员 。请求的目的地址为所有主机组(224.0.0.1),携带的IP生存时间为1 。
主机为了响应一个请求,生成主机成员报告报文,报告它们在接到请求的网络接口上
所属的每个主机组 。为了避免并发报告“爆炸”,减少被传送的报告的总数,使用了两种技
术:
1.当主机接收到一个请求,不是立即发送报告,而是为到达请求的网络接口上每个组
成员启动一个报告延时定时器 。每个定时器被设置为在0到D秒之间的一个不同的、随机
选择的值 。当一个定时器超时,会为相应的主机组产生一个报告 。因此,报告的产生时间分
散在D秒的间隔内,而不是都立即产生 。
2.被发送的报告的IP目的地址等于它要报告的主机组的地址,它的IP生存时间为1,
所以在同一网络上这一组的其它成员能侦听到该报告 。假如主机听到在那个网络上它所属的
组的报告,则主机停止那个组的定时器,不再产生那个组的报告 。因此,在通常情况下,仅
仅为出现在网络上的每个组生成一个报告,这是由延迟定时器最先超时的成员主机生成的 。
要注重的是,多播路由器接收所有IP多播数据报,因此不需要明确的指明它的地址 。还要
注重的是,路由器不需知道哪些主机属于一个组,而仅需知道是否至少有一个主机属于在特
定网络上的一个组 。
对以上描述的特性有两个例外 。第一,假如在请求收到以前,已经有一个报告延时定
时器在为一个组成员运行,则该定时器不会重置为一个新的随机值,而答应以它的当前值运
行 。第二,报告定时器不会因为主机是所有主机组(224.0.0.1)的成员而生成,这个成员关
系不会被报告 。
假如主机使用伪随机数生成器计算报告延迟时间,主机的单个IP地址之一应用作生成
器种子的一部分,以减少多宿主机生成相同的延迟序列的可能性 。
主机应该确保接收到的报告的IP目的地址字段和IGMP组地址字段有相同的IP组地
址 。以保证主机自己的报告不会因为错误的接收报告而取消 。主机应该丢弃除了主机成员请
求或主机成员报告类型以外的任何IGMP报文 。
多播路由器周期性地发送请求,以更新它所知的,在特定网络上目前的成员关系情况 。
假如在几次请求之后,没有接收到特定组的报告,则路由器假设这个组已经没有本地成员,
它们就不需转发从远端传来的那个组的多播数据报到本地网络上 。正常情况下,请求被发送
的频率很低(每分钟不超过一次),因此IGMP对主机和网络的开销非常小 。然而,当多播
路由器启动时,它可以发出几个时间间隔很小的请求,以便尽快获知本地成员的情况 。
当主机加入一个新的组时,它应该立即发送一个那个组的报告,而不是等待一个请求,
以防万一它是这个网络上该组的第一个成员 。考虑到初始的报告可能丢失或损坏,建议在一
个短的延迟后重复报告一到两次 。(达到这一目的的一种简单的方式是似乎仅仅那个组的请
求被接收,设置组随机报告延迟定时器 。以下的状态变换图解释了这种方法 。)
要注重的是,在一个没有多播路由器的网络上,当有主机加入一个新组时,唯一的IGMP
通信量是一个或多个报告的传送 。
状态变换图
通过下面的状态转换图,将更加正式地说明IGMP特性 。每个主机可能处于三种可能
的状态中的一种,这与在任意的单个网络接口上的一个单独的IP主机组有关 。
—非成员状态,当主机不属于这个接口上的组时 。这是所有网络接口上所有成员的初
始状态;它不需要主机的存储空间 。
—延时成员状态,当主机属于那个接口上的组时,需要为这个成员关系运行一个报告
延时定时器 。
—空闲成员状态,当主机属于那个接口上的组时,不需要为这个成员关系运行一个报
告延时定时器 。
有五种重大的事件能使IGMP状态变换:
—当主机决定加入这个接口的组时,出现“加入组”事件 。这只能出现在非成员状态 。
—当主机决定离开这个接口的组时,出现“离开组”事件 。这只能出现在延迟成员和
空闲成员状态 。
—当主机收到一个有效的IGMP主机成员请求报文时,出现“请求收到”事件 。要达
到有效状态,请求报文必须至少有8字节长,有一个正确的IGMP校验和和地址为224.0.0.1
的IP目的地址 。单一的请求适合于收到请求的接口的所有成员关系 。这里不考虑非成员状
态或延迟成员状态的情况 。
—当主机接收到一个有效的IGMP主机成员报告报文时,出现“报告收到”状态 。要达
到有效状态,报告报文必须至少有8字节长,有一个正确的IGMP校验和,而且在它的IP
目的地址字段和IGMP组地址字段有相同的IP组地址 。报告仅用于在接收到报告的接口上,
由报告标识的组组成员 。这里不考虑非成员状态或空闲成员状态的情况 。
—当接口上的组的报告延迟定时器超时时,出现“定时器超时”事件 。它只出现在延迟
成员状态 。
所有其它的事件,如收到无效的IGMP报文,或收到除请求或报告之外的IGMP报文,
被忽略了 。
有三种可能的动作,可以用来响应以上事件:
—为那个接口上的组“发送报告” 。
—为那个接口上的组“打开定时器”,使用在0到D秒之间的随机延时值 。
—为那个接口上的组“停止定时器” 。
在下面的图表中,每个状态转换弧由促使转换的事件标记,在圆括号中的是在转换过程
中所执行的动作 。
________________
--------->非成员<---------
________________
离开组加入组离开组
(停止定时器)(发送报告,
打开定时器)
________________________________
<---------
<-------------------
接收到请求
延迟成员(开始定时器)空闲成员
------------------->
接收到报告
(停止定时器)
_________________------------------->_________________
定时器超时
(发送报告)
所有主机组(地址为224.0.0.1)的处理属于非凡情况 。主机开始时是每个接口上的那个
组的空闲成员状态,不会变换到其它状态,也不会为那个组发送报告 。
协议参数
最大报告延时D为10秒 。
附录2主机组地址问题
本附录不是IP多播规范的一部分,但提供了有关IP主机组地址的一些问题的背景讨论 。
组地址绑定
IP主机组地址到物理主机地址的绑定可以被认为是IP单播地址绑定的推广 。一个IP单
播地址静态地绑定到一个单一的IP网络上的一个单一的本地网络地址接口上 。一个IP主机
组地址动态地绑定到一个IP网络集合上的本地网络接口集合上 。
IP主机组地址不会绑定到IP单播地址集合上,理解这一点很重要 。多播路由器不会维
持每个主机组的单个成员的列表 。例如,属于一个以太网的多播路由器仅需有一个与有本地
成员的每个主机组对应的单一的以太网多播地址,而不是那些成员的单个IP或以太网地址
列表 。
临时主机组地址的分配
本备忘录没有说明暂时的组地址是如何分配的 。预期是IP暂时主机组地址空间的不同
部分的分配使用不同的技术 。例如,可能有许多服务器联系在一起获得一个新的暂时组地址 。
一些高层协议(比如VMTP,在RFC-1045中说明)可以生成高层暂时“进程组”或“实体
组”地址,这些地址会在算法中映射到IP暂时主机组地址的子集中,这与IP主机组地址映
射到以太网多播地址上类似 。IP组地址空间的一部分可以留给一些应用程序随机分配,这
些应用程序能容忍和其它多播用户偶然冲突,在发现一个合适的“安静”地址之前,一直生
成新的地址 。
一般来说,主机不能假设被送到主机组地址的数据报将仅仅到达目的主机,或作为暂时
主机组的一个成员接收数据报的目的就是为了接受 。在IP层以上,使用高层标识符或认证
标志来检测错误投递 。假如发送者不想让不必要的用户收到,则传递给主机组地址的信息应
该被加密或用路由治理控制方法进行控制 。
- 身份证的数字代表什么
- 电脑主机声音大怎么解决
- 用于双面呢绒的线是什么线
- 锤子T2手机支持卡入内存卡吗?锤子T2手机扩展内存说明
- 三星手机智能识别功能的作用于使用方法
- mac mini是电脑主机吗
- 飞机的用途
- 360浏览器网页平滑滚动效果如何启动?扩展功能步骤详解
- 主机和pc区别
- 核定征收适用于哪些企业
