IGMPv1:IP 组播的主机扩展

发布时间:2021-09-21作者:小编阅读:0

IP 组播是将 IP 数据报传输到“主机组/host group”,即由单个 IP 目标地址标识的零个或多个主机的集合。组播数据报以与常规单播 IP 数据报相同的“尽力而为/best-efforts”可靠性传送到其目标主机组的所有成员,即,不能保证数据报完整地到达目标组的所有成员或以相同的顺序到达相对于其他数据报。

主机组的成员资格是动态的;也就是说,主机可以随时加入和离开组。对主机组中成员的位置或数量没有限制。一个主机一次可能是多个组的成员。主机不需要是组的成员就可以向它发送数据报。

主机组可以是永久的或临时的。永久组具有众所周知的管理分配的 IP 地址。永久的是地址,而不是组的成员;在任何时候,一个永久组可能有任意数量的成员,甚至为零。那些不为永久组保留的 IP 组播地址可用于动态分配给临时组,只要它们有成员就存在。

IP 组播数据报的互联网转发由“组播路由器/multicast routers”处理,该路由器可能与互联网网关共存或分离。主机将 IP 组播数据报作为本地网络组播传输,该数据报到达目标主机组的所有紧邻成员。如果数据报的 IP 生存时间大于 1,则连接到本地网络的组播路由器负责将其转发到具有目标组成员的所有其他网络。在 IP 生存期内可达的其他成员网络上,附加的组播路由器通过将数据报作为本地组播传输来完成交付。

本备忘录指定了主机 IP 实现所需的扩展以支持 IP 组播,其中“主机/host”是除充当组播路由器的主机或网关之外的任何 Internet 主机或网关。组播路由器内部和之间使用的算法和协议对主机是透明的,并将在单独的文档中指定。本备忘录也没有指定如何为所有类型的网络实现本地网络组播,尽管它指定了任意本地网络所需的服务接口,并以以太网规范为例。其他类型网络的规范将成为未来备忘录的主题。

1. 一致性级别

本规范的一致性分为三个级别:

级别0:不支持 IP 组播。

目前,没有要求所有 IP 实现都支持 IP 组播。级别0主机通常不受组播活动的影响。唯一的例外出现在某些类型的本地网络上,其中级别1或级别2主机的存在可能导致组播 IP 数据报错误传送到级别0主机。此类数据报可以通过其目标地址字段中存在的 D 类 IP 地址轻松识别;它们应该被不支持 IP 组播的主机悄悄丢弃。D 类地址在本备忘录的第 4 节中描述。

级别1:支持发送但不接收组播 IP 数据报。

级别 1 允许主机参与一些基于组播的服务,例如资源位置或状态报告,但不允许主机加入任何主机组。IP 实现可以很容易地从级别0升级到级别1,并且几乎不需要新代码。只有本备忘录的第 4、5 和 6 节适用于级别1实现。

级别2:完全支持 IP 组播。

级别2允许主机加入和离开主机组,以及向主机组发送 IP 数据报。它需要实施互联网组管理协议 (Internet Group Management Protocol,IGMP) 并扩展主机内的 IP 和本地网络服务接口。本备忘录的以下所有部分都适用于级别2实现。

2、 主机组地址

主机组由 D 类 IP 地址标识,即以“1110”作为其高四位的那些。E 类 IP 地址,即那些以“1111”作为其高四位的地址,保留用于将来的寻址模式。

在 Internet 标准的“点分十进制”表示法中,主机组地址的范围从 224.0.0.0 到 239.255.255.255。地址224.0.0.0保证不分配给任何组,224.0.0.1分配给所有IP主机(包括网关)的永久组。这用于寻址直连网络上的所有组播主机。整个 Internet 上的所有主机都没有组播地址(或任何其他 IP 地址)。其他著名的永久团体的地址将在“指定号码”中公布。

附录2包含一些与主机组地址相关的几个问题的背景讨论。

3、 主机 IP 实现模型

主机 IP 实现的组播扩展是根据下面所示的分层模型指定的。在这个模型中,ICMP和(对于级别2主机)IGMP被认为是在IP模块内部实现的,IP地址到本地网络地址的映射被认为是本地网络模块的职责。此模型仅用于说明目的,不应被解释为限制实际实现。

IGMPv1:IP 组播的主机扩展

要提供级别1组播,主机 IP 实现必须支持组播 IP 数据报的传输。要提供级别2组播,主机还必须支持组播 IP 数据报的接收。这两个新服务中的每一个都在下面的单独部分中进行了描述。对于每个服务,为IP 服务接口、IP 模块、本地网络服务接口和以太网本地网络模块指定了扩展。对以太网以外的本地网络模块的扩展被简要提及,但没有详细说明。

4、 发送组播 IP 数据报

4.1、 IP 服务接口的扩展

使用与发送单播 IP 数据报相同的“发送 IP”操作发送组播 IP 数据报;上层协议模块只是指定一个IP主机组地址,而不是一个单独的IP地址作为目的地。然而,一些扩展可能是必要的或可取的。

首先,服务接口应该为上层协议提供一种方法来指定传出组播数据报的 IP 生存时间,如果这种能力尚不存在。如果上层协议选择不指定生存时间,则对于所有组播 IP 数据报应默认为 1,因此需要明确选择以超出单个网络进行组播。

其次,对于可能连接到多个网络的主机,服务接口应该为上层协议提供一种方法来识别哪个网络接口用于组播传输。初始传输只使用一个接口;如有必要,组播路由器负责转发到任何其他网络。如果上层协议选择不标识出接口,则应使用默认接口,最好在系统管理的控制下。

第三(仅限级别2实现),对于主机本身是数据报发送到的组的成员的情况,服务接口应该为上层协议提供一种方法来禁止本地传输数据报;默认情况下,数据报的副本被环回。这是对上层协议的性能优化,这些协议将组的成员资格限制为每个主机一个进程(例如路由协议),或者在较高层处理组通信的环回(例如组播传输协议)。

4.2、 IP 模块的扩展

为了支持组播 IP 数据报的发送,必须扩展 IP 模块以在路由传出数据报时识别 IP 主机组地址。大多数 IP 实现包括以下逻辑:

如果 IP-destination 在同一本地网络上,则将数据报本地发送到 IP-destination;否则,将数据报本地发送到 GatewayTo( IP-destination )。

要允许组播传输,必须将路由逻辑更改为:

如果 IP-destination 在同一个本地网络上或 IP-destination 是一个主机组,则将数据报本地发送到 IP-destination;否则,将数据报本地发送到 GatewayTo( IP-destination )。

如果发送主机本身是传出接口上目标组的成员,则传出数据报的副本必须环回本地传递,除非被发送方禁止。(仅限级别2实现。)传出数据报的 IP 源地址必须是对应于传出接口的单个地址之一。

主机组地址绝不能放置在源地址字段中,或者位于传出 IP 数据报的源路由或记录路由选项中的任何位置。

4.3、 本地网络服务接口的扩展

无需更改本地网络服务接口即可支持组播 IP 数据报的发送。当 IP 模块调用现有的“发送本地”操作时,它仅指定 IP 主机组目的地,而不是单个 IP 目的地。

4.4、 以太网本地网络模块的扩展

以太网通过在以太网数据包的目的字段中允许组播地址来直接支持本地组播数据包的发送。支持组播 IP 数据报发送所需的只是将 IP 主机组地址映射到以太网组播地址的过程。

通过将 IP 地址的低 23 位放入以太网组播地址 01-00-5E-00-00-00(十六进制)的低 23 位,将 IP 主机组地址映射到以太网组播地址)。由于 IP 主机组地址有 28 位有效位,多个主机组地址可能映射到同一个以太网组播地址。

4.5、 对以太网以外的本地网络模块的扩展

其他直接支持组播的网络,例如符合 IEEE 802.2 标准的环网或总线,为了发送组播 IP 数据报,可以采用与以太网相同的方式进行处理。对于支持广播但不支持组播的网络,例如实验以太网,所有 IP 主机组地址都可以映射到单个本地广播地址(以增加所有本地主机的开销为代价)。对于连接两台主机(或一台主机和一个组播路由器)的点对点链路,组播应该像单播一样传输。对于像 ARPANET 这样的存储转发网络或公共 X.25 网络,所有 IP 主机组地址都可能映射到 IP 组播路由器的众所周知的本地地址;这种网络上的路由器将负责完成网络内以及网络之间的组播传送。

5、 接收组播 IP 数据报

5.1、 IP 服务接口的扩展

上层协议模块使用与正常单播数据报相同的“接收 IP”操作来接收传入的组播 IP 数据报。目的上层协议的选择是基于IP头中的协议字段,与目的IP地址无关。但是,在可以接收任何发往特定组的数据报之前,上层协议必须要求 IP 模块加入该组。因此,必须扩展 IP 服务接口以提供两个新操作:

JoinHostGroup(组地址,接口)

LeaveHostGroup(组地址,接口)

JoinHostGroup 操作请求该主机成为给定网络接口上由“group-address”标识的主机组的成员。LeaveGroup 操作请求该主机放弃其在给定网络接口上由“group-address”标识的主机组中的成员资格。在仅支持一个接口的主机上可以省略 interface 参数。对于可能连接到多个网络的主机,上层协议可以选择不指定接口,在这种情况下,请求将应用于发送组播数据报的默认接口(。

允许在多个接口上加入同一组,在这种情况下可能会收到重复的组播数据报。也允许多个上层协议请求同一组的成员资格。

两个操作都应该立即返回(即它们是非阻塞操作),指示成功或失败。由于组地址或接口标识符无效,任一操作都可能失败。由于缺少本地资源,JoinHostGroup 可能会失败。LeaveHostGroup 可能会失败,因为主机不属于给定接口上的给定组。LeaveHostGroup 可能会成功,但如果多个上层协议请求同一组中的成员身份,则成员身份会持续存在。

5.2、 IP 模块的扩展

为了支持组播 IP 数据报的接收,必须扩展 IP 模块以维护与每个网络接口关联的主机组成员资格列表。以这些组之一为目的地的传入数据报的处理方式与以主机的单个地址之一为目的地的数据报完全相同。

发往主机不属于的组的传入数据报将被丢弃,而不会生成任何错误报告或日志条目。在具有多个网络接口的主机上,如果数据报通过一个接口到达,而目的地是该主机所属的组,但仅在不同的接口上,该数据报将被悄悄丢弃。(这些情况只会发生在本地网络模块中组播地址过滤不充分的结果。)传入的数据报不会因为 IP 生存时间为 1 而被拒绝(即,生存时间不应在未转发的到达数据报上自动递减)。在其源地址字段中包含 IP 主机组地址的传入数据报将被悄悄丢弃。响应发往 IP 主机组的数据报,从不生成 ICMP 错误消息(目标不可达、超时、参数问题、源抑制或重定向)。

响应来自上层协议的 JoinHostGroup 和 LeaveHostGroup 请求,更新主机组成员资格列表。每个成员都应该有一个关联的引用计数或类似的机制来处理多个加入和离开同一个组的请求。在给定接口上的第一个加入请求和最后一个离开组的请求时,该接口的本地网络模块会收到通知,以便它可以更新其组播接收过滤器。

IP 模块还必须扩展以实现 IGMP 协议,在附录1中指定。IGMP 用于使相邻组播路由器了解特定本地网络上存在的主机组成员资格。为了支持 IGMP,每个级别2主机必须在初始化时加入每个网络接口上的“所有主机”组(地址 224.0.0.1),并且只要主机处于活动状态,就必须保持成员身份。

(寻址到所有主机组的数据报被组播路由器识别为一种特殊情况并且永远不会转发到单个网络之外,无论它们的生存时间如何。因此,所有主机地址不能用作互联网范围的广播地址。为了IGMP的目的,只有当主机至少属于一个其他组时才真正需要所有主机组的成员。但是,指定主机应保持为all-hosts组的成员。主机组一直是因为(1)它更简单,(2)接收不必要的 IGMP 查询的频率应该足够低,开销可以忽略不计,以及(3)所有主机地址可以用于其他面向路由的目的,例如通告网关的存在或解析本地地址。)

5.3、 本地网络服务接口的扩展

使用与本地网络单播数据包相同的“接收本地”操作将传入的本地网络组播数据包传送到 IP 模块。为了让 IP 模块告诉本地网络模块接受哪些组播数据包,本地网络服务接口被扩展以提供两个新的操作:

JoinLocalGroup ( group-address )

LeaveLocalGroup ( group-address )

其中“group-address”是 IP 主机组地址。JoinLocalGroup 操作请求本地网络模块接受并传送随后到达的以给定 IP 主机组地址为目的地的数据包。LeaveLocalGroup 操作请求本地网络模块停止传送发往给定 IP 主机组地址的数据包。本地网络模块应根据需要将 IP 主机组地址映射到本地网络地址,以更新其组播接收过滤器。任何本地网络模块都可以自由地忽略 LeaveLocalGroup 请求,并且如果无法充分过滤传入的数据包,则可以将数据包发送到比 JoinLocalGroup 请求中指定的地址更多的地址。

本地网络模块不得传送从该模块传输的任何组播数据包;组播的环回在 IP 层或更高层处理。

5.4、 以太网本地网络模块的扩展

为了支持组播 IP 数据报的接收,以太网模块必须能够接收寻址到与主机的 IP 主机组地址相对应的以太网组播地址的数据包。非常需要利用以太网硬件接口可能具有的任何地址过滤功能,以便主机只接收那些发往它的数据包。

不幸的是,许多当前的以太网接口对硬件可配置为识别的地址数量有很小的限制。然而,实现必须能够侦听任意数量的以太网组播地址,这可能意味着在地址数量超过过滤器限制的那些时间段内“打开”地址过滤器以接受所有组播数据包。

对于硬件地址过滤不充分的接口,可能需要(出于性能原因)在以太网模块的软件中执行以太网地址过滤。但是,这不是强制性的,因为 IP 模块根据 IP 目标地址执行自己的过滤。

5.5、 对以太网以外的本地网络模块的扩展

其他组播网络,例如 IEEE 802.2 网络,可以以与以太网相同的方式处理,以接收组播 IP 数据报。对于纯广播网络,例如实验以太网,所有传入的广播数据包都可以被接受并传递到 IP 模块进行 IP 级过滤。在点对点或存储转发网络上,组播 IP 数据报将作为本地网络单播到达,因此无需更改本地网络模块。

附录1、 互联网组管理协议 (IGMP)

IP 主机使用互联网组管理协议 (Internet Group Management Protocol,IGMP) 将其主机组成员身份报告给任何紧邻的组播路由器。IGMP 是一种非对称协议,这里是从主机的角度而不是组播路由器的角度来指定的。(IGMP 也可以在组播路由器之间对称或非对称地使用。这种用法在此未指定。)与 ICMP 一样,IGMP 是 IP 的组成部分。要求所有符合 IP 组播规范级别2的主机都实现。IGMP 消息封装在 IP 数据报中,IP 协议编号为 2。所有与主机相关的 IGMP 消息都具有以下格式:

IGMPv1:IP 组播的主机扩展

版本/ Version

本备忘录规定了 IGMP 的第 1 版。版本 0 在 RFC-988 中指定,现在已过时。

类型/ Type

主机关注的 IGMP 消息有两种类型:

1 = 主机成员查询

2 = 主机成员报告

未使用/ Unused

未使用的字段,发送时归零,接收时忽略。

校验和/ Checksum

校验和是 8 字节 IGMP 消息的补码和的 16 位补码。为了计算校验和,校验和字段被清零。

组地址/ Group Address

在主机成员查询消息中,组地址字段在发送时为零,在接收时被忽略。

在主机成员报告消息中,组地址字段保存正在报告的组的 IP 主机组地址。

非正式协议说明

组播路由器发送主机成员查询消息(以下称为查询)以发现哪些主机组在其连接的本地网络上有成员。查询寻址到所有主机组(地址 224.0.0.1),并携带 IP 生存时间为 1。

主机通过生成主机成员报告(以下称为报告)来响应查询,在收到查询的网络接口上报告它们所属的每个主机组。为了避免并发报告的“内爆”并减少传输的报告总数,使用了两种技术:

1. 当主机接收到查询时,它不是立即发送报告,而是在传入查询的网络接口上为其每个组成员启动报告延迟计时器。每个计时器都设置为一个不同的、随机选择的值,介于 0 和 D 秒之间。当计时器到期时,将为相应的主机组生成报告。因此,报告分散在 D 秒间隔内,而不是同时发生。

2. 发送报告时,IP 目标地址与被报告的主机组地址相同,IP 生存时间为 1,以便同一网络上同一组的其他成员可以偷听报告。如果主机在该网络上听到其所属组的报告,则该主机将停止该组自己的计时器,并且不会为该组生成报告。因此,在正常情况下,对于网络上存在的每个组,仅由延迟计时器最先到期的成员主机生成一个报告。请注意,组播路由器接收所有 IP 组播数据报,因此无需明确寻址。进一步注意,路由器不需要知道哪些主机属于一个组,只需知道至少一个主机属于特定网络上的一个组。

上述行为有两个例外。首先,如果在接收到查询时已经为组成员资格运行报告延迟计时器,则该计时器不会重置为新的随机值,而是允许以其当前值继续运行。其次,永远不会为所有主机组 (224.0.0.1) 中的主机成员资格设置报告延迟计时器,并且永远不会报告该成员资格。

如果主机使用伪随机数生成器来计算报告延迟,则应使用主机自己的单个 IP 地址之一作为生成器种子的一部分,以减少多台主机生成相同延迟序列的机会。

主机应确认收到的Report 的IP 目的字段和IGMP 组地址字段中的IP 主机组地址相同,以确保主机自己的Report 不会被错误接收的Report 取消。主机应该安静地丢弃除主机成员查询或主机成员报告之外的任何类型的 IGMP 消息。

组播路由器定期发送查询以刷新他们对特定网络上存在的成员资格的了解。如果在一定数量的查询之后没有收到特定组的报告,则路由器假定该组没有本地成员并且它们不需要将该组的远程发起的组播转发到本地网络。查询通常很少发送(每分钟不超过一次),以便将主机和网络上的 IGMP 开销保持在非常低的水平。然而,当组播路由器启动时,它可能会发出几个紧密间隔的查询,以便快速建立其对本地成员资格的了解。

当主机加入一个新组时,它应该立即为该组发送一个报告,而不是等待一个查询,以防它是网络上该组的第一个成员。为避免初始报告丢失或损坏的可能性,建议在短暂延迟后重复一次或两次。(实现此目的的一种简单方法是将其视为仅收到该组的查询,设置该组的随机报告延迟计时器。下面的状态转换图说明了这种方法。)请注意,在不存在组播路由器的网络上,唯一的 IGMP 流量是主机加入新组时发送的一个或多个报告。

状态转换图

下面的状态转换图更正式地指定了 IGMP 行为。对于任何单个网络接口上的任何单个 IP 主机组,主机可能处于以下三种可能状态之一:

非成员/ Non-Member状态,当主机不属于接口上的组时。这是所有网络接口上所有成员的初始状态;它不需要主机中的存储。

延迟成员/ Delaying Member状态,当主机属于接口上的组并且为该成员运行报告延迟计时器时。

空闲成员/ Idle Member状态,当主机属于接口上的组并且没有为该成员运行的报告延迟计时器时。

有五个重要事件会导致 IGMP 状态转换:

当主机决定加入接口上的组时,会发生“加入组/join group”。它可能只发生在非成员状态。

当主机决定离开接口上的组时,会发生“离开组/leave group”。它可能只发生在延迟成员和空闲成员状态。

当主机收到有效的 IGMP 主机成员查询消息时,会出现“查询收到/query received”。要有效,查询消息必须至少有 8 个八位字节长,具有正确的 IGMP 校验和,并且 IP 目标地址为 224.0.0.1。单个查询适用于接收查询的接口上的所有成员资格。对于处于非成员或延迟成员状态的成员,它会被忽略。

当主机收到有效的 IGMP 主机成员报告消息时,会出现“报告收到/report received”。要有效,报告消息必须至少有 8 个八位字节长,具有正确的 IGMP 校验和,并且在其 IP 目标字段和 IGMP 组地址字段中包含相同的 IP 主机组地址。报告仅适用于在接收报告的界面上由报告确定的组中的成员。对于处于非成员或空闲成员状态的成员,它会被忽略。

当接口上的组的报告延迟计时器到期时,发生“计时器到期/timer expired”。它可能只发生在延迟成员国。

所有其他事件,例如接收无效的 IGMP 消息,或除查询或报告之外的 IGMP 消息,在所有状态下都将被忽略。

针对上述事件,可以采取三种可能的行动:

在界面上为组“发送报告/send report”。

接口上组的“启动计时器/start timer”,使用 0 到 D 秒之间的随机延迟值。

接口上组的“停止计时器/stop timer”。

在下图中,每个状态转换弧都标有导致转换的事件,并在括号中标记了在转换期间采取的任何操作。

IGMPv1:IP 组播的主机扩展

all-hosts 组(地址 224.0.0.1)作为特殊情况处理。主机在每个接口上以该组的空闲成员状态开始,从不转换到另一个状态,也从不发送该组的报告。

协议参数

最大报告延迟 D 为 10 秒。

附录2、 主机组地址问题

本附录不是 IP 组播规范的一部分,但提供了与 IP 主机组地址相关的几个问题的背景讨论。

组地址绑定

IP主机组地址绑定到物理主机可以认为是IP单播地址绑定的泛化。IP 单播地址静态绑定到单个 IP 网络上的单个本地网络接口。IP 主机组地址动态绑定到一组 IP 网络上的一组本地网络接口。

了解 IP 主机组地址不绑定到一组 IP 单播地址很重要。组播路由器不需要维护每个主机组的单个成员的列表。例如,连接到以太网的组播路由器只需要将单个以太网组播地址与具有本地成员的每个主机组相关联,而不是成员的个人 IP 或以太网地址的列表。

临时主机组地址的分配

本备忘录没有指定如何分配临时组地址。预计 IP 临时主机组地址空间的不同部分将使用不同的技术进行分配。例如,可能有许多服务器可以联系以获取新的临时组地址。一些更高级别的协议(例如 RFC-1045 中指定的 VMTP)可能会生成更高级别的临时“进程组”或“实体组”地址,然后通过算法将这些地址映射到 IP 临时主机组地址的子集,类似于IP 主机组地址映射到以太网组播地址的方式。IP 组地址空间的一部分可能会留出供应用程序随机分配,这些应用程序可以容忍与其他组播用户偶尔发生冲突,可能会生成新地址,直到找到合适的“安静”地址。

通常,主机不能假设发送到任何主机组地址的数据报只会到达预期的主机,或者作为临时主机组成员接收的数据报是为接收者准备的。必须使用更高级别的标识符或身份验证令牌在 IP 之上的级别检测误投。如果发送者担心不需要的监听器,则传输到主机组地址的信息应加密或由管理路由控制进行管理。

以上就是IGMPv1:IP 组播的主机扩展的介绍。如果你还有其他问题,欢迎进行咨询探讨,希望亿联云的专业的解决方案,可以解决你目前遇到的问题。亿联云提供主机托管、服务器租用、mpls专线接入、SD-WAN组网等方面的专业服务,资源覆盖全球。欢迎咨询。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,请联系站长邮箱:shawn.lee@eliancloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

标题:IGMPv1:IP 组播的主机扩展

TAG标签:企业组网

地址:https://www.elinkcloud.cn/article/20210922105201.html

上一篇:在云中进行灾难恢复的5种有效方式
下一篇:动态路由协议:OSPF、RIP、BGP比较
返回顶部