老掉牙的IGMPv1,你知道多少?

IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理

的协议。

IGMP运行在主机与主机直接连接的组播路由器之间,用来建立、维护组播成员关系如下图所示:

老掉牙的IGMPv1,你知道多少?

1、IGMPv1报文解析

  • 普遍组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。
  • 成员报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
老掉牙的IGMPv1,你知道多少?

Version:IGMPv1值为1;

Type:General Query普通组查询为0x1,Report成员报告报文为0x2;

Unused:发送时置0,接收时忽略;

Checksum:IGMP报文的校验和;

Group Address:组播组地址。在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。

2、IGMPv1查询与响应机制

通过查询与响应,IGMP查询器可以了解到该网段内哪些组播组存在成员。

  • IGMP查询器周期性(缺省60s一次)发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;
  • 网络内所有的主机都能接收到该查询消息,如果某主机对任何组播组G感兴趣,则以组播方式发送成员报告报文,其中Group Address携带组播组G的地址,来宣告自己加入该组播组;
  • 经过查询与响应过程,IGMP路由器了解到本网络内存在组播组G对应的接收者,生成(*,G)组播表项,并依据此作为组播信息的转发依据。
老掉牙的IGMPv1,你知道多少?

问题1,如果这个网络有2个或2个以上的组播路由器,谁来查询?

当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,因此需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier).IGMP本身无法依靠报文选举,只能依靠上层协议替它选举。在IGMPv1中,由组播路由协议PIM得DR作为Querier。

问题2,PC1、PC2、PC3他们响应查询的report报文,目的组地址可以不同么?

收到IGMP普遍组查询报文后,被动响应请求,而告知组播路由器组活跃信息的报文,目标组地址字段可以不同,是D类非224.0.0.X地址。无论主机你加入到哪个组了,都要回复report报文告知,以便我查询器能了解到下面哪些主机处于哪个组。

问题3,假设这些主机加入的是同1个组,需不需要所有的主机都回复1个report报文?

IGMPv1中有个机制叫IGMPv1响应抑制机制,每个主机在收到查询的时候会在本地启动1个定时器,缺省情况下,定时器的范围是0-10秒之间的随机值,谁的计时器先超时,谁先发,发出的report组播路由器会收到,其他在同一个组播组里的主机也会收到,收到后它们知道已经有主机回复report了,也就不再发送report,这样相同的report的就被抑制了。

3、IGMPv1主机加入组

加入组的过程就是主机主动报告的过程,不等普遍组查询报文过来,主动report声明加入;

例如主动发送针对G2的报告报文,IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2).网络中一旦有G2的数据到达路由器,将向该网络段转发。

老掉牙的IGMPv1,你知道多少?

4、IGMPv1主机离开

IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。

假设退出的主机所在组播组里还有成员

其他成员会向IGMP查询器回复report报文,因此主机的离开,查询器根本感知不到。

假设退出的主机所在组播组里没有成员

IGMP查询器不会收到该组播组的报告报文,则在一定时间(缺省值为130秒)后,删除所对应的组播转发表项。很显然,这期间组播流量继续转发,对网络是一种负担,所以这也是开发IGMPv2的主要原因。


分享到:


相關文章: