is a protocol used between hosts and multicast routers on a single physical network to establish hosts' membership in particular multicast groups. Multicast routers use this information, in conjunction with a multicast routing protocol, to support IP multicast forwarding across the Internet.
The Internet Group Management Protocol is a communications protocol used by hosts and adjacent routers on IPv4 networks to establish multicast group memberships.
IGMP snooping
is the process of listening to Internet Group Management Protocol (IGMP) network traffic. The feature allows a network switch to listen in on the IGMP conversation between hosts and routers. By listening to these conversations the switch maintains a map of which links need which IP multicast streams.
IGMP snooping with IGMP proxy
开启IGMP snooping的作用是侦听IGMP router 和IGMP client之间的IGMP report,query,leave信息,在这个过程中,对于IGMP report,它会在switch的MAC filter database记录下GDA(组目的地址) mac address和哪个端口关联.
对于leave message(IGMP v2),当switch收到client发来的leave message时,switch会发送组查询来查看是不是真的没有这个组的PC了,如果没有回复,就会删除那条entry.
对于IGMPV1没有leave message的情况下,IGMP router会周期的发224.0.0.1查询,switch会根据database发给关联的port,如果连续3次没回,就会把那条entry 删除掉.
- 对于不支持IGMP snooping的switch收到组播包后,会flood到每个端口去,因为对应于组播地址来说,它的MAC address是GDA(01:00:5E:XX:XX:XX),在switch里面并不存在这样的entry,这样可以节省带宽
- 对于收费节目来说可以控制访问.
下面来看一下IGMP proxy
topo和上面的一样,只不过在layer2 switch上开启IGMP proxy.IGMP router通过拦截IGMP 报文来建立组播表,它的功能分两块来看,
- 上联端口执行主机角色,下联端口执行路由器角色.上联端口执行主机的角色,响应来自路由器的查询,当新增用户组或者某组最后一个用户退出时,主动发送成员报告包或者离开包。下联端口执行路由器的角色,完全按照IGMP中规定的机制执行,包括查询者选举机制,定期发送通用查询信息,收到离开包时发送特定查询等.
IGMP snooping 的实现机理是:交换机通过侦听主机向路由器的IGMP成员报告消息的方式,形成组成员和交换机接口的对应关系;交换机根据该对应关系将收到组播数据包只转给具有组成员的接口。
IGMP Proxy与IGMP Snooping实现功能相同但机理相异:IGMP Snooping只是通过侦听IGMP的消息来获取有关信息,而IGMP Proxy则拦截了终端用户的IGMP请求并进行相关处理后,再将它转发给上层路由器.
所以在IGMP snooping里面形成的table是组成员和交换机接口的对应关系,在IGMP Proxy里面形成的是组播路由表.
相当于IGMP snooping来说,实现了IGMP proxy的二层网络设备,对用户侧承担Server的角色,定期查询用户信息,对于网络路由侧又承担Client的角色,在需要时将当前的用户信息发送给网络.不仅能够达到抑制二层组播泛滥的目的更能有效地获取和控制用户信息,同时在减少网络侧协议消息以降低网络负荷方面起到一定作用。
IGMP(layer 3)
IGMP,就是Internet Group Management Protocol的意思。该协议用来在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系,但不包括组播路由器之间的组成员关系信息的传播与维护,这部分工作由各组播路由协议完成。所有参与组播的主机必须实现IGMP。
它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系
主要功能
当一台主机加入到一个新的组时,它发送一个IGMP消息到组地址以宣告它的成员身份,多播路由器和交换机就可以从中学习到组的成员。利用从IGMP中获取到的信息,路由器和交换机在每个接口上维护一个多播组成员的列表。
IGMP报文格式和分类
一个完整的IGMP数据报:正如ICMP一样, IGMP 也被当作IP 层的一部分。
IGMP报文的基本格式:IGMP有固定的报文长度,没有可选数据。
1) 4位IGMP版本。
2) 4位IGMP类型:为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。
3) 16位校验和:检验和字段覆盖整个IGMP报文。使用的算法和IP首部校验和算法相同。IGMP的检验和是必需的。
IGMP 版本说明
目前有三个版本:
IGMP v1,支持host membership query 和host membership report。
IGMP v2,支持membership query,membership report,Leave Group message 。
IGMP v3,支持membership report 和membershipquery。
其中MembershipQuery分为三种:
General Query,用于查询接口下所有多播成员信息;
Group-Specific Query,用于查询接口下指定组的成员信息;
Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。
区别是:
- IGMPv1 :主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。
当主机加入某组播组时,会向路由器发送加入报文,告诉路由器自己加入了一个组播组,路由器会记录一条组播表项 。
查询路由器(IP最小的路由器)会定时从所有端口向外发送查询报文(按VLAN查询,如果该端口加入了多个VLAN,则发送多次查询报文),检查这些端口下是否有主机属于某组播组,主机收到查询报文后,如果自己没有加入任何组播组,则不进行响应;如果自己已经加入了某组播组,则会发送加入报文,主机离开组播组时,不发送任何报文,悄悄离开;路由器中纪录的该组播的表项会因查询超时而自动老化,查询报文的目的地址是224.0.0.1(表示所有路由器和支持IGMP的主机),组地址是0(表示查询所有组播组)。响应报文的目的地址是主机所在组的地址,组地址也是主机所在组的地址。如果网络上有多个主机加入了同一个组,那么只有一台主机(随机选取)会发送响应报文。由于响应报文的目的地址是主机所在组的地址,所以响应报文会被发送到主机所在组内的所有主机,其他的主机在收到该报文后,发现已经有人向路由器进行报告了,于是他们就不会再额外发送响应报文了。
- IGMPv2:该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。
IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。路由器收到离开报文后,会发送查询报文,查询是否还有其它的主机属于该组播组,如果没有就删除组播表项,有则不删除。
需要注意的是,此时路由器发送的查询报文的组地址已经不是0了,而是特定的组地址(发送离开报文的主机所在的组)。因为此时路由器只想知道该特定组内是否有主机存在。这一点也是IGMPV2对IGMPV1的改进,名称叫特定组查询,IGMPV1中没有该功能
- IGMPv3:与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包
简而言之:IGMP 各版本区别v1无离开信息,v2有离开信息,v3允许主机指定它要接收通信流量的主机对象。
TS IGMP join