IGMP协议

IGMP

(Internet Group Management Protocol)因特网组管理协议

是TCP/IP协议族中负责IP组播成员管理的协议,它用来在IP主机和与其直接相邻的组播路由器之(最后一跳路由器)间建立、维护组播组成员关系

IGMPv1

工作机制

  • 如图所示,假设Client AClient C想要接收组播组G1的数据,Client B想要接收组播组G2的数据。普遍组查询和响应过程如下:
    1. RTA发送普遍组查询报文。
    2. 网段内所有主机都接收到该查询报文,Client A和Client C是组播组G1成员,则在本地启动定时器Timer-G1。Client B是组播组G2的成员,则在本地启动定时器Timer-G2。定时器的范围为0~10秒之间的随机值。定时器先超时的主机发送针对该组的成员报告报文。Client A上的Timer-G1首先超时,向该网段发送目的地址为G1的成员报告报文。Client B上的Timer-G2超时,向该网段发送成员报告报文,目的地址为G2。
    3. Client C侦听到Client A的成员报告报文,则停止定时器Timer-G1,不再发送针对G1的成员报告报文。这就是响应抑制机制,可以减少网段上的协议流量
  • RTA接收到成员报告报文后,了解到本网段内存在组播组G1G2的成员,一旦RTA收到G1G2的组播数据,将向该网段转发。

IGMPv1

新成员加入

当有新成员加入的时候会直接发送IGMP成员关系报告表明要加入的组,而不会等待组播路由器发送的普遍组查询以及定时器超时(无论这个组是否存在),并且对于组播路由器来说它每60s都会发送一次普遍组查询报文,来了解网络中存在的组情况

问题一

组成员静默离开问题

由于IGMPv1是没有专门定义离开组的消息,并且组播路由器删除无效组(没有任何成员的组)的时间为130s(老化时间),所以在这130s内,组播路由器收到无效组的消息还是会向网段内进行转发,但此时是没有人接收的,也就造成了很多无效的流量

问题二

查询器选举

  • 多台路由器同时连接到同一接收端网络时,只需要有一台路由器进行IGMP的查询。
  • IGMPv1无查询路由器选举机制,其依赖于组播路由协议在末端网络中选举一个查询器。
  • 由于不同的组播路由协议采用不同的选举机制,所以在IGMPv1中,同一末端网络中可能会存在多台查询器。
  • 针对IGMPv1中的两个问题,IGMPv2进行了改进和优化。

IGMPv1和v2报文比较

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

v3对比v2

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

二层中组播数据转发问题

组播数据在二层被泛洪

也就是说整了半天,其实到最后还是小范围的泛洪发送

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

IGMP Snooping

工作原理

 

  • 使能IGMP Snooping功能后,二层设备会侦听主机和路由器之间交互的IGMP报文。通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据帧在数据链路层按需转发。
  • IGMP Snooping建立和维护二层组播转发表的过程:
    • RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断1号接口为连接路由器的接口。
    • Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的MAC地址0x0100.5e01.0203。该报文将被发往路由器的接口以及交换机CPU相连的内部接口0;当CPU收到Client BIGMP报告时,CPU利用IGMP报告中的信息将该接口加入二层组播转发表中,此时表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号。
    • 形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口013,而且不向交换机其他端口扩散。
  • Client C加入组224.1.2.3并主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口4)。
  • IGMP Snooping通过侦听组播路由器与主机之间交互的IGMP报文建立组播数据报文的二层转发表项,从而管理和控制组播数据报文在二层网络中的转发(生成组播地址对应的多个端口号,组播数据的控制转发,而不泛洪)
  • IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制

IGMP

最后一跳路由器(组播路由器)通过协议得知网段内有哪些组播组

IGMP-Snooping

将组播数据准确地发往对应的主机

实验

IGMP协议_第1张图片

注意:Igmp  enable 在最后一跳路由器跟主机相连的端口配置,目的为了发现网段中的组播组!!!

全局:multicast  routing-enable

接口:

IGMP协议_第2张图片

PC:

IGMP协议_第3张图片

IGMP协议_第4张图片

抓包,查看发送的普遍查询,以及离开时发送的 leave 报文

查询接口:display igmp interface g0/0/0

 

IGMP协议_第5张图片

Igmp  v1版本是无法选择查询器的,需要依赖组播协议

查询组信息:display igmp group

 

IGMP协议_第6张图片

1、全局开启

2vlan 1中开启

交换机开启IGMP-Snooping之后会生成的映射表(在PC上多加入几次,让交换机收到IGMP报文,不然如果没监听到报文,映射表肯定是空的)

交换机查询IGMP组播组对应端口信息dis  igmp-snooping  port-info  vlan 1

IGMP协议_第7张图片

你可能感兴趣的:(网络)