摘要
- RFC 1112 用本地查询与报告让路由器了解组播成员关系,但随机报告定时器会让一台主机的消息代表整个组,而不是逐一列出成员。
- IGMPv1 没有“离组”消息:只有报告停止、成员状态计时器过期后,路由器才知道最后一名接收者已经离开。RFC 2236 后来加入了更快的离组信号。
组地址不是成员名单
一个 IP 组播地址可以是永久保留的,即使当时没有任何主机加入。主机也可以向某个组发送数据报,而不加入该组。Stephen Deering 在 RFC 1112 中把这些事实分开:目的地址标识组,成员状态则按主机和网络接口维护。上层应用可以让 IP 加入或退出某组;相邻路由器面对的是另一个问题:本地网段上目前是否还有主机想接收这个组。
规范区分两级主机能力。Level 1 可以发送组播,却不加入组,也不实现 IGMP。Level 2 才支持加入、离开并运行 IGMP,以便把本地成员关系告诉相邻组播路由器。因此,仅看组地址并不能知道谁会接收;路由器需要来自本地网段的近期信号。
第一条报告为什么不该独自到达
路由器会向全主机地址 224.0.0.1 发送 Host Membership Query。每台 Level 2 主机检查该接口上的组成员状态。如果所有主机立刻应答,链路上就会出现一阵重复的控制报文。RFC 1112 为每个成员状态设置随机延迟计时器;若主机在自己的计时器到期前,先听到同一组的有效报告,就取消待发报告。于是,一份报告便能告诉路由器:至少还有一名本地成员。
这是一种有意的信息压缩。路由器收到的不是人数、机器清单,也不是每个应用都已准备好接收数据的证明,而是本地网络上“这个组有人”的信号。它减少了重复报文,却同时舍弃了转发决策所不需要的信息。
新成员加入时则不等随机计时器:主机应立即报告,因为它可能是该网络中的第一个成员。规范建议短暂间隔后再重复一两次,以防首份报告丢失。不过,组播本身仍与单播 IP 一样采用尽力而为交付;它不保证每名成员都完整收到数据报,也不保证收到顺序相同。成员报告只能告知路由器,无法保证交付。
最后一名接收者离开后的沉默
IGMPv1 定义了查询和报告,却没有 Leave Group 消息。主机离组后,本机 IP 模块不再把它视为成员,但路由器不会立即收到通知。周期性查询会刷新路由器的记录;如果没有主机再报告该组,成员计时器最终会到期。简化控制协议的代价,是最后一名接收者离开后,路由器状态还会保留一段时间。
这并非路由器永远相信成员仍在,而是由查询与成员计时器限定的延迟。但在高带宽组播或成员频繁变化的网段里,路由器可能继续把流量转发到已经没有接收者的网段,直到记录过期。
RFC 2236 为 IGMPv2 增加 Leave Group 消息,让离组可以更快被报告。收到消息的查询路由器会针对该组再次查询,并等候回复,才判定网段已空。新设计没有把沉默变成确定性;它缩短了不确定期,并再次检查是否还有其他成员。
1989 年的取舍很明确。IGMPv1 把成员关系变成一个“是否有人”的问题,以减少控制流量。一个报告可以让同组其他主机静默,同时给路由器足够信息,决定是否继续向本地网络转发该组数据。它无法告诉路由器那一份报告背后究竟有多少成员,也无法指出最后一人刚刚离开的时刻。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
