第13章 IGMP:Internet组管理协议

13.3 IGMP 协议

13.3.1 加入一个多播组

多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序),该进程在一个主机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员是动态的—它随时因进程加入和离开多播组而变化。

这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加入的多播组。这些是一个支持多播主机中任何 A P I所必需的部分。使用限定词“接口”是因为多播组中的成员是与接口相关联的。一个进程可以在多个接口上加入同一多播组。

S t a n f o r d大学伯克利版U n i x中的IP 多播详细说明了有关socket API的变化,这些变化在Solaris 2.x和ip(7)的文档中也提供了。这里暗示一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量。

13.3.2 IGMP 报告和查询

多播路由器使用I G M P报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:


  1. 当第一个进程加入一个组时,主机就发送一个 I G M P报告。如果一个主机的多个进程加入同一组,只发送一个I G M P报告。这个报告被发送到进程加入组所在的同一接口上。
  2. 进程离开一个组时,主机不发送 I G M P报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的 I G M P查询中就不再发送报告报文。
  3. 多播路由器定时发送I G M P查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个 I G M P查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此I G M P查询报文中的组地址被设置为 0。
  4. 主机通过发送I G M P报告来响应一个I G M P查询,对每个至少还包含一个进程的组均要发回I G M P报告。

使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

图1 3 - 3显示了两个I G M P报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。

速读原著-TCP/IP(IGMP 协议)_网络

对T T L字段我们将在本节的后面介绍。

13.3.3 实现细节

为改善该协议的效率,有许多实现的细节要考虑。首先,当一个主机首次发送 I G M P报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是I P交付服务)。

下一个报告将在间隔一段时间后发送。这个时间间隔由主机在 0 ~ 1 0秒的范围内随机选择。其次,当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应(采用“响应”的复数形式是因为该主机必须对它参加的每个组均发送一个响应)。既然参加同一多播组的多个主机均能发送一个报告,可将它们的发送间隔设置为随机时延。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告,因为如图1 3 - 3所示的报告中的目的地址是那个组地址。这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了。因为多播路由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机。的确,一个多播路由器甚至不关心哪个主机属于一个多播组。它仅仅想知道在给定的接口上的多播组中是否还至少有一个主机。

在没有任何多播路由器的单个物理网络中,仅有的 I G M P通信量就是在主机加入一个新的多播组时,支持I P多播的主机所发出的报告。

13.3.4 生存时间字段

在图1 3 - 3中,我们注意到I G M P报告和查询的生存时间 ( T T L )均设置为1,这涉及到I P首部中的T T L字段。一个初始 T T L为0的多播数据报将被限制在同一主机。在默认情况下,待传多播数据报的T T L被设置为1,这将使多播数据报仅局限在同一子网内传送。更大的 T T L值能被多播路由器转发。

回顾6 . 2节,对发往一个多播地址的数据报从不会产生 I C M P差错。当T T L值为0时,多播路由器也不产生I C M P“超时”差错。

在正常情况下,用户进程不关心传出数据报的 T T L。然而,一个例外是Tr a c e r o u t e程序(第8章),它主要依据设置T T L值来完成。既然多播应用必须能够设置要传送数据报的TTL值,这意味着程序设计接口必须为用户进程提供这种能力。

通过增加T T L值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索 ( e x p a n d i n g ring search)。第一个多播数据报以T T L等于1发送。如果没有响应,就尝试将 T T L设置为2,然后3,等等。在这种方式下,该应用能找到以跳数来度量的最近的服务器。

从2 2 4 . 0 . 0 . 0到2 2 4 . 0 . 0 . 2 5 5的特殊地址空间是打算用于多播范围不超过 1跳的应用。不管T T L值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报。

13.3.5 所有主机组

在图1 3 - 3中,我们看到了路由器的 I G M P查询被送到目的 I P地址2 2 4 . 0 . 0 . 1。该地址被称为所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送I G M P报告。