igmp

Reference

igmp

 通过组播,可以实现一个主机同时向组内的多台主机发送数据,节省网络带宽。

组播ip地址范围是224.0.0.0-----239.255.255.255,其中224.0.0.0-----224.0.0.255是有特殊用途的保留地址,239.0.0.0-----239.255.255.255是私网地址,224.0.1.0-----238.255.255.255是用于公网上的组播地址。



组播有一系列的协议支持包括:

1、用于主机和路由器之间的IGMP协议。实现主机加入、离开组播组等功能。

2、路由器之间的组播协议有:PIM-SM、PIM-DM。实现嫁接、剪枝等功能。



还有一个IGMP Snooping,用在交换机上。开启IGMP Snooping功能的交换机可以对经过它的IMGP报文进行解析,建立组播转发表,这样一来,交换机就可以根据组播转发表转发组播数据。如果没有开启IGMP Snooping功能,交换机只能广播组播数据。IGMP Snooping的实际应用意义是:减少了网络上的主机由于接受到不必要的组播报文而产生的处理负荷。IGMP Snooping并不是一个协议,只能算是一个实现细节,一种应用。



IGMP Snooping分两种,一种是passive方式的,另一种是active方式的。passive方式的只解析组播报文,不对报文进行过滤。active方式的会过滤掉一些对路由器没有意义的组播报文。比如交换机下面有两个主机都加入了同一个组,这样交换机上面的路由器中就会有一条表项与之对应。如果一个主机想离开这个组,它就会发送离开报文给路由器(经过交换机转发)。但是此时,即使路由器收到了离开报文,它也并不会删除那条表项,因为还有另一个主机在组播组中。active方式的IGMP Snooping使交换机可以过滤掉此类报文。



下面说说IGMP的工作原理:

IGMP目前有三个版本,分别是IGMPV1、IGMPV2、IGMPV3,功能逐渐增强



IGMPV1中定义了加入报文、查询报文、响应报文三种报文。

1、当主机加入某组播组时,会向路由器发送加入报文,告诉路由器自己加入了一个组播组,路由器会记录一条组播表项 。

2、查询路由器(IP最小的路由器)会定时从所有端口向外发送查询报文(按VLAN查询,如果该端口加入了多个VLAN,则发送多次查询报文),检查这些端口下是否有主机属于某组播组

3、主机收到查询报文后,如果自己没有加入任何组播组,则不进行响应;如果自己已经加入了某组播组,则会发现响应报文

4、主机离开组播组时,不发送任何报文,悄悄离开;路由器中纪录的该组播的表项会因查询超时而自动老化

5、查询报文的目的地址是224.0.0.1(表示所有路由器和支持IGMP的主机),组地址是0(表示查询所有组播组)

6、响应报文的目的地址是主机所在组的地址,组地址也是主机所在组的地址。如果网络上有多个主机加入了同一个组,那么只有一台主机(随机选取)会发送响应报文。由于响应报文的目的地址是主机所在组的地址,所以响应报文会被发送到主机所在组内的所有主机,其他的主机在收到该报文后,发现已经有人向路由器进行报告了,于是他们就不会再额外发送响应报文了。



IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。路由器收到离开报文后,会发送查询报文,查询是否还有其它的主机属于该组播组,如果没有就删除组播表项,有则不删除。

需要注意的是,此时路由器发送的查询报文的组地址已经不是0了,而是特定的组地址(发送离开报文的主机所在的组)。因为此时路由器只想知道该特定组内是否有主机存在。这一点也是IGMPV2对IGMPV1的改进,名称叫特定组查询,IGMPV1中没有该功能。

注意:

1、不论是IGMPV1还是IGMPV2,所有的加入报文和离开报文都要被上报到查询路由器

2、非查询路由器收到查询报文后,从所有端口转发该报文

3、非查询路由器收到特定组查询报文后,根据组播表进行转发

4、特定组查询报文的目的地址是要查询的组地址

5、离开报文的目的地址是224.0.0.2(表示所有路由器)



IGMP报文格式:

8位报文类型-8最大响应时间-16位校验和-32位组地址



报文类型:

0x11表示查询报文,包括普通查询和特定组查询报文

0x16表示加入报文

0x17表示离开报文

0x12表示IGMPV1查询报文



IGMPV3待续。。。