IGMP有3个版本V1(RFC1112),V2(RFC2236),V3(RFC3376),
IGMP v1支持host membership query 和host membership report
report message是由IGMP host发给IGMP router来报告它加入的组播组.
query message是由IGMP router发给IGMP client来查询IGMP host所加入的组播组.
这样做之后,IGMP路由器就记录了它所在网段主机加入的所有组播地址.
下面看这个例子之后可能大家就比较清楚了,
在IGMP router的LAN端有2台PC,hostA,hostB,hostC,hostA加入了224.100.1.1,hostB加入了224.100.1.2,hostC没有加入任何的组播.
当IGMP router想要查询lan端的组播地址是,它以组播地址224.0.0.1 发到它的lan端,224.0.0.1代表子网中所有支持多播的设备的多播地址, 这个时候如果pc和IGMP router之间用hub或者layer2的交换机(没有enable IGMP snooping),那么包括hostC的3台主机都会收到,只不过hostC不会回应,hostA和hostB会发送报告信息给router,内容分别 为224.100.1.1和224.100.1.2.
如果hostA想要加入一个新的组播地址224.100.1.3,它会发个report信息给想要加入的组播地址,router收到后加入IGMP table.
===========================================
IGMPv2,包括membership query,membership report, Leave Group message .
membership query 包括general query,group-specific query.
general query和IGMP V1一样,发224.0.0.1来查询在网络中有哪些组播组.
group-specific query,用来查询是否在网络中存在特定的组播组.
membership report,这个和V1一样,加入一个新的GROUP也一样.
Leave Group message是由这个组的最后一个成员发给224.0.0.2(网络中的所有组播路由器),内容为这个组播地址,IGMP router收到后,会发送一个group-specific query来查询是否网络中的这个组播地址已经不存在了,如果没有回应,就把这个组从IGMP table 中删除.
==============================================
IGMP V3,
Membership Report
其中Membership Query分为三种:
General Query,用于查询接口下所有多播成员信息;
Group-Specific Query,用于查询接口下指定组的成员信息;
Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。
==========================================
下面来谈谈IGMP V1,V2,V3的区别,
IGMPv1 :主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。
IGMPv2 :该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。
IGMPv3 :与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。
IGMPv3同路由器的交互过IGMPv2程同相同。但是在IGMP V1/V2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMP V3的主机通告该主机所希望加入的 多播组,同时还通告该主机所希望接收的多播源的地址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMP v3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。