交换技术 ·

IGMP和IGMPsnooping

作用:用来在接受者和与其直接相邻的组播路由器之间建立、维护组播组成员关系。

接受者声明自己要接收哪个组的数据

路由器了解哪些组播组存在接受者

 

 

IGMPV1工作机制

 

 

1.最后一跳路由器周期性(一分钟)向所有主机(224.0.0.1)发送普遍组成员关系查询

2.主机clientA收到普遍组查询后,发送IGMP成员关系报告,报告自己在组播组中

3.同属于G1的Client C监听到ClientA的IGMP报告后不再发送IGMP报告(响应抑制机制)。

 

响应抑制机制:路由器发送查询报文时有一个最大响应时间10s,主机收到查询报文会设置一个0-10s的随机的倒计时

先超时的做出响应,发送报告报文中的目标地址为想要加入的组播地址,其他想要加入该组播的主机被抑制发送报告

 

 

注意:

1.想要加入的主机主动发送 报告报文,不想继续加组的静默离开

2.普遍组查询计时器超时(130s)后,没有收到报告报文,认为该组不存在组播成员,删除该组,组播数据来不再转发

3.查询器的选举依赖于组播路由协议,Pim的选出来的DR充当查询器

4.因此连接主机的接口不仅要开启IGMP enable,还要开启Pim dm/sm

 


IGMPV2工作机制

在IGMPV1的基础上  增加了两种报文

1.组成员离开向224.0.0.2发送离开组消息(0X17)

查询器向该组发送特定组查询  发送2  每次1

有其他接受者在1s内回复查询器

2.最大响应时间10秒可改

3.有独立的查询器选举机制(IP地址小的 获胜)

 

 

 

 

      • IGMPv1报文:
        • 版本:版本标识为1。
        • 类型:普遍组查询 (0x11),成员关系报告 (0x12)。
        • 组地址:普遍组查询报文中,组地址为0;成员关系报告报文中,组地址为成员想要加入的组播组的地址。

 

      • IGMPv2报文:IGMPv2报文与IGMPv1报文略有不同,它取消了版本字段,增加了最大响应时间字段。
        • 类型:相比于IGMPv1,IGMPv2新增了两种报文:
          • 特定组查询报文(0x11):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
          • 成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。
        • 最大响应时间:表示主机响应查询返回报告的最大时间。
          • 对于普遍组查询,最大响应时间默认为10秒。
          • 对于特定组查询,最大响应时间默认为1秒。
        • 组地址:
          • 普遍组查询报文中,组地址设置为0。
          • 特定组查询报文中,组地址为需要查询的组地址。
          • 在成员报告或离开组的消息中,组地址为需要报告或离开的组地址。

IGMPV3工作机制

只接受特定源发送的组播数据

 

 

      • IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
      • 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
      • 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2...)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2...)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。
      • 在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。

 




二层组播遇到的问题

 

  • 由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以主机加组的过程二层设备并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。
  • 这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在MAC地址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送组播报文,这样一来不但对网络资源造成的极大浪费而且影响网络安全。
  • IGMP Snooping机制的提出,解决了二层组播泛洪问题。
  • 作用:避免泛洪不必要的组播流量

使能IGMP Snooping功能后,二层设备会侦听主机和路由器之间交互的IGMP报文。通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据帧在数据链路层按需转发。


  • IGMP Snooping建立和维护二层组播转发表的过程:

①  RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断为路由器接口,并向VLAN内除接收接口外其他接口转发,并对该接收端口做如下处理。

 

如果路由器接口列表没有该接口,添加进表并启动老化计时器。

如果路由器接口列表中包含该接口,重置老化计时器。

路由器端口老化计时器缺省180s,可配置

 

主机收到查询报文后回送IGMP报告报文

二层组播设备把收到的报告报文向VLAN内所有路由器端口转发,并对接收该报告报文的接口作如下处理

 

如果不存在该组对应转发表项,创建转发表项,将该接口作为动态成员端口添加到出接口列表中,并启动老化计时器

如果存在该组的对应转发表项,但出接口列表不包含该接口,将该接口作为动态成员端口添加到接口列表,并启动老化计时器

如果存在该组的对应转发表项,并且出接口列表中包含该动态成员端口,则重置老化计时器。

 

动态成员端口的老化计时器=健壮系数(2)× 普遍组查询间隔(60)+最大响应时间(10)#默认130s

 

②  Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的MAC地址0x0100.5e01.0203。最初转发表上没有这个组播MAC地址的表项,所以该报告被扩散到交换机的所有接口,包括与交换机CPU相连的内部接口0;

 

当CPU收到Client B的IGMP报告时,CPU利用IGMP报告中的信息建立了一个转发表项,此表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号。

 

③  形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口0、1和3,且而不向交换机其他端口扩散。

  • Client C 加入组224.1.2.3并主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口4)。

 

 

 

IGMP相关端口

 

路由器端口(上游) 二层组播设备上,连接朝向三层组播设备一侧的接口,从此接口接收组播数据报文180s   105s

 

两种接口被视为动态路由器接口:

①手动源地址不为0.0.0.0的IGMP普遍组查询报文缺省老化计时器为180s

② 收到PIMhello报文(三层组播设备PIM接口向外发送用于发现并维持邻居关系的报文)的接口老化时间为hello报文字段的holdtime值105s

静态路由器接口:手工配置的路由器接口

成员端口(下游) 二层组播设备上,连接组播组成员一侧的接口,往此接口发送组播数据报文

收到报告报文的接口 默认为动态成员接口 老化时间为130s

手工配置的为静态成员端口

 

 

总结:当二层设备上建立了二层组播转发表项后,二层设备根据收到的组播报文的所属vlan和目的地址(组播组地址)查表转发。

如果是静态路由器端口,则收到IGMPreport 和Leave报文也会向静态路由器端口转发,如果配置静态成员端口,则转发表项中会添加该接口为出接口

当IGMP snooping enable时,如果离组消息在交换机端口收到,则转发所有路由器接口。查询器发送特定组查询报文,向mac组播表中所有端口转发,如果有响应,刷新timer,向uplink(路由器端口)转发report;没有响应2*1s后删除端口

 

优点:组播数据只向有接受者存在的接口转发,无接收者的接口不转发,节省网络带宽

 

缺点1:运行IGMPsnooping 的二层设备需要对接收到的IGMP报文进行分析,但是二层设备不能区分哪些数据是IGMP报文,哪些数据不是IGMP报文。他会把所有的组播数据都交给CPU处理。在组播流量比较大的时候,CPU的负担会加重,对二层设备性能造成影响

解决方案:使用能够识别三层包头的交换机,识别IP报头中protocol取值为2

 

缺点2:由于IGMP加组报文只向路由器接口转发,所以IGMP的抑制机制失效,当收到查询器发送的通用查询时,所有接受者都会发送加组报文,当网络中存在大量用户主机时,冗余 的IGMP报文给上游设备带来处理压力

解决方案:IGMP Snooping Proxy

 

 

IGMP snooping Proxy

作用:减少上游设备收到IGMP报告报文和离开报文的数量

原理:代理下游主机向上游设备发送成员关系报告报文。配置IGMP snooping Proxy的设备,在上游设备看来它是一台主机,在下游设备看来,他相当于一台查询器

交换机代替查询器查询组成员关系,并处理来自成员的离开消息,发送特定查询消息,如果没有成员再向路由器 发送离组消息

参与评论