Internet组管理协议 IGMP报文及协议( 二 )



对TTL字段我们将在本节的后面介绍 。
13.3.3 实现细节
为改善该协议的效率,有许多实现的细节要考虑 。首先,当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务) 。下一个报告将在间隔一段时间后发送 。这个时间间隔由主机在0 ~ 1 0秒的范围内随机选择 。
其次,当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应(采用“响应”的复数形式是因为该主机必须对它参加的每个组均发送一个响应) 。既然参加同一多播组的多个主机均能发送一个报告,可将它们的发送间隔设置为随机时延 。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告,因为如图1 3 - 3所示的报告中的目的地址是那个组地址 。这意味着假如一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了 。因为多播路由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机 。的确,一个多播路由器甚至不关心哪个主机属于一个多播组 。它仅仅想知道在给定的接口上的多播组中是否还至少有一个主机 。

;;;;在没有任何多播路由器的单个物理网络中,仅有的IGMP通信量就是在主机加入一个新的多播组时,支持IP多播的主机所发出的报告 。
13.3.4 生存时间字段
在图1 3 - 3中,我们注重到IGMP报告和查询的生存时间(TTL)均设置为1,这涉及到IP首部中的TTL字段 。一个初始TTL为0的多播数据报将被限制在同一主机 。在默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送 。更大的TTL值能被多播路由器转发 。
回顾6 . 2节,对发往一个多播地址的数据报从不会产生ICMP差错 。当TTL值为0时,多播路由器也不产生ICMP“超时”差错 。
在正常情况下,用户进程不关心传出数据报的TTL 。然而,一个例外是Traceroute程序(第8章),它主要依据设置TTL值来完成 。既然多播应用必须能够设置要传送数据报的TTL值,这意味着程序设计接口必须为用户进程提供这种能力 。
通过增加TTL值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索(eXPandingring search) 。第一个多播数据报以TTL等于1发送 。假如没有响应,就尝试将TTL设置为2,然后3,等等 。在这种方式下,该应用能找到以跳数来度量的最近的服务器 。
从224.0.0.0到224.0.0.255的非凡地址空间是打算用于多播范围不超过1跳的应用 。不管TTL值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报 。
13.3.5 所有主机组
在图1 3 - 3中,我们看到了路由器的IGMP查询被送到目的IP地址224.0.0.1 。该地址被称为所有主机组地址 。它涉及在一个物理网络中的所有具备多播能力的主机和路由器 。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组 。这个组的成员无需发送IGMP报告 。
13.4 一个例子
现在我们已经了解了一些IP多播的细节,再来看看所包含的信息 。我们使sun主机能够支持多播,并将采用一些多播软件所提供的测试程序来观察具体的过程 。
首先,采用一个经过修改的netstat命令来报告每个接口上的多播组成员情况(在3.9节显示了netstat-ni命令的输出结果) 。在下面的输出中,用黑体表示有关的多播组 。

(点击查看原图)
其中, - n参数将以数字形式显示IP地址(而不是按名字来显示它们),- i参数将显示接口的统计结果,- a参数将显示所有配置的接口 。

推荐阅读