TCP/IP详解 卷一 ------IGMP

来源:互联网 发布:竹庆本乐仁波切 知乎 编辑:程序博客网 时间:2024/06/05 02:42

1、引言

对于涉及多个网络且多播数据必须通过路由器转发时需要IGMP协议(Internet 组管理协议)。

        IGMP是让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由根据这些信息知晓多播数据要向哪些接口转发。

        IGMP被当作IP层的一部分,IGMP报文通过IP数据报进行传输。

        IGMP有固定的报文长度,没有可选数据。IP首部协议字段值为2时表示该报文为IGMP报文。IGMP封装在IP数据报中的格式如图1所示。


图1   IGMP报文封装在IP数据报中

2、IGMP

版本为1的IGMP报文格式如下:


图2  IGMP报文的字段格式

类型1表示有多播路由器发出的查询报文   类型2表示主机发出的报告报文。检验和的计算法和ICMP协议相同。


组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。


3、IGMP协议

3.1 加入一个多播组

       主机的一个进程在一个主机的给定接口上加入一个多播组。在一个给定接口上的多播组中的成员是动态的,即它随时因进程加入和离开多播组而变化。一个进程可以在多个接口上加入同一多播组。

        一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量

3.2 IGMP报告和查询

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

  1. 当第一个进程加入一个组时,主机发送一个IGMP报告(报告给路由器?)。如果一个主机的多个进程加入同一个组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上(接口是指路由器接口,还是主机接口?应该是路由器接口吧,但是一开始是如何找到这个接口的?)。
  2. 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。(为什么要由路由器一遍遍的查询,而不是由主机直接发送一个已没有组的报文,是因为会有多个主机吗?原因见3.3步骤2
  3. 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
  4. 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报文。

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

3.3 实现细节

  1. 当一个主机首次发送 IGMP报告时(当第一个进程加入一个多播组),并不能保证该报告能被可靠接收,下一个报告将在间隔一段时间后发送。此时间间隔由主机在0~10秒的范围内萃集选择
  2. 当一个主机收到路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出响应,主机需要对它参加的每个组均发送一个响应。参加同一多播组的多个主机均能发送一个报告,可将他们的发送间隔设置为随机时延。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告(因为报告中的目的地址是组地址),因此如果一个主机在等待发送报告的过程中,收到了来自其他主机的相同报告,则该主机的响应就不必发送了。多播路由器并不关心有多少主机属于该组,只需要知道改组是否至少还有一台主机

在没有任何多播路由器的单个物理网络中,仅有的IGMP通信量是在主机加入一个新的多组播时,支持IP多播的主机发送的报告。

3.4 生存时间字段

IGMP报告和查询的生存时间(TTL)均设置为1。

        一个初始TTL为0的多播数据报将被限制在同一主机。默认情况下,待传多播数据报的TTL被设置为1,这使多播数据报仅局限在同一子网内传送。更大的TTL值能被多播路由器转发。

      注:对发往一个多播地址的数据报从不产生ICMP差错报文,即当TTL值为0时,多播路由器也不产生ICMP“超时”差错。

     通过增加TTL值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索。即第一个多播数据报以TTL等于1发送。若没有相应,就尝试TTL等于2,然后3等等。在这种方式下,应用可以找到以跳数来度量的最近服务器。


3.5 所有主机组

IGMP查询被发送到目的IP地址224.0.0.1。该地址为所有主机组地址

该地址涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告


注:在IGMP报告中,源地址是主机真正的地址,而目的地址是多组播地址。







0 0
原创粉丝点击