IGMP 又称互联网组管理协议,是 TCP/IP 协议栈中负责 IPv4 组播成员注册管理的协议。是配置组播主要使用的协议,目前 IGMP 一共有三个版本 IGMPv1、IGMPv2、IGMPv3三种版本高版本向下兼容低版本的所有功能特性。目前主流的都是 IGMPv2 ,现在也都在慢慢向 IGMPv3 过渡了。 IGMP 协议用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播成员的关系,工作机制就是通过本地组播路由器想要接收特定组的组播流量,或主机不再希望接收特定组的流量,组播路由器可以根据已知的成员来决定是否转发数据流量。 三个版本的基本区别如下:
- IGMP v1 定义了基本的组播成员查询和报告机制
- IGMP v2 新增了查询者选举和组播成员离开的机制
- IGMP v3 中增加了组播成员可以自己选择是否要接收的组播源组播数据
IGMP version 1 :
IGMP 协议是一种非对称的用在路由器和 PC 机之间的协议,就是组播接收者使用 IGMP 协议通告希望加入到某个特定的组播组内,组播路由器也会使用 IGMP 协议来查询局域网内网段是否有加进来的组播成员。但是两个动作发送的报文是不一样的。 普遍组查询报文(General-query) 普遍组查询报文是组播路由器向局域网内所有主机以组播方式发送的查询报文,局域网内所有的路由器和主机都能识别并接收,只有属于该组播组内的设备会进行回应,查询报文中的组播地址段若为 0.0.0.0 则是代表查询所有的组播组,所有的开启了组播协议的设备全都会回应。 成员报告报文(Report) 这个报文是组播接收者发给组播路由器的,但是他分为两种情况,一种是终端设备主动发给组播路由器,用于主动申请加入某个组播组内的。另一种是收到了组播路由器的查询报文后,被动发起的响应,告知组播路由器活跃用户的信息。 注: 因 IGMP v1 版本并没有定义主机离开的通知,所以当有组播接收者离开了当前组播组或者掉线的话,组播路由器还会继续向该设备继续进行组播报文的发送,会影响局域网内的网络性能以及资源浪费等问题。
IGMP version 2 :
IGMP v2 主要是新增了查询者选举和组播组内组员离开的机制,其他的功能和机制都和 IGMP v1 差不多。
- 选举查询者:不需要依赖组播路由协议就可以选举查询路由器。
- 最大响应时间字段:通过调整响应时间来控制过量响应和调整离开延迟。
- 特定组查询:允许路由器仅查询一个组,而非查询本网段上所有组。
- 离开消息:离组消息提供了一种方法通知路由器当前主机离开组播组。
查询者的选举机制 IGMP v2 新增了查询者选举机制,在局域网内有多个组播路由器存在时,会根据组播路由器的接口 IP 地址来进行比较,最小的路由器将被选举为查询者。 在初始阶段时,路由器会把自己假定为查询者并发出普遍组查询报文,彼此双方都收到后,会根据报文源 IP 地址最小的那个路由器,在接下来的 60s 内若没有从其他路由器收到任何查询报文,那么他就会认定自己是查询者,并继续发送查询报文。 这时选举失败的路由器,会启用一个查询者保活的计时器,在计时器内没有收到查询者发送的查询报文,就会认为查询故障了,会重新开启选举查询者的动作。 IGMP v2 离开机制 相比于 v1 的版本 v2 新增了一种离开组播组的通告功能,允许组播接收者发送报文告诉组播路由器自己要离开当前组播组。这样每当离开一个组播成员,那么组播路由器就会少发送一份组播数据,当组播组内的成员全部离开后,路由器就会立刻停止转发组播数据到这个组播组内。但是由于组播路由器是不会记录组播内有多少成员的,所以每当收到一个成员离开的报文,就会触发组播路由器向组播组中发送一个特定的查询报文,存活的组播成员收到这个报文都会进行回应,当然这个等待回应也有一个时间等待,超过这个时间没有收到任何回应,那么路由器就会认为这个组播组内没有成员,会立刻停止组播数据的转发。
IGMP version 3:
v3 版本新增了对于组播源的过滤功能,使系统有能力向组播源进行通告,指定接收特定的组播源发送的组播数据,或者终端向路由器报告希望接收那些特定的组播数据。像 v1 和 v2 版本都是组播源是老大,他发送的数据你无条件的接收,你自己是没有能力进行拒绝的。 为了实现上述的这种过滤功能,v3 版本在成员报告报文中做了修改,添加了一段可以用来表达组和源的组记录关系,简单理解组记录为三元组(组地址、过滤模式、源地址列表)。通过三元组来达到了可以由组播接收者反向来决定组播数据的接收机制。 加入机制 当有组播接收者想要加入到组播组内的时候 v3 和其他版本不同,其他版本的组播接收者只能接收这个组播组内所有组播源发送的组播数据,若这个组播接收者只想接收某些特定的组播源发送的数据,其他版本均无法做到,只有 v3 版本的可以进行选择组播源来进行接收。 离开机制 v3 版本的离开报文,是以主机发送带有特定含义组记录的成员报告来表达自己的离开,同其他两个版本不一样,其他版本均是添加 Leave-group 字段在成员报告中表示自己要离开组播组。
IGMP Proxy
是一类特殊的 IGMP 设备的统称,他既可以是组播接收者,又可以是组播查询者的角色。他面向主机的时候表现为查询者,如果面对的是路由器他又变成组播接收者的角色。他是依靠上下游的 IGMP 报文来建立组播路由表的。 IGMP Proxy 设备收到某组组播成员的报告后,会在其组播转发表中查找该组播组,若没有找到对应的组播组, IGMP Proxy 设备会向上游组播路由器发送针对该组播组的报告报文,并在自己的组播路由表中加上这个组播组。 IGMP Proxy 收到一个接收者离开的报文,他也会向接收到离开报文的接口发送一个特定组查询报文,查询接口下是否还有存活的组播接收者,若有的话他就继续向该接口发送数据,若没有任何回应报文,他就会立刻停止向该接口发送组播数据报文。
IGMP Snooping
这个功能主要是在 IPv4 环境下,针对二层交换机上提供的一种组播机制,通过侦听组播路由器和用户主机之间发送的 IGMP 报文,在自己交换机内创建一个组播转发表,把组播接收者和组播组的对应关系填写在这个表内,并按照这个表进行组播数据报文转发。若收到一个没有记录在表内的组播报文会进行一个泛洪处理。这样做的好处是,不会使二层交换机每次收到组播数据报文的时候,每次都进行全端口的泛洪工作,可以很好的降低非组播成员接收组播数据报文的次数,从而使网络中数据流量更简明。
标签:基本,知识点,组播,报文,接收者,查询,IGMP,路由器 From: https://blog.51cto.com/u_14167341/5947515