一、基本概念:

1.协议概述:

是运行在主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息;另一方面,路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活跃状态,实现所连网段组成员关系的收集与维护。通过IGMP,在路由器中记录的信息是某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。

  • 主机加入和离开组播
  • 路由器维护组播组
  • 查询器选举机制
  • 成员报告抑制机制

2.常用组播管理协议:

  • IGMP v1=RFC1122
  • IGMP V2=RFC2236
  • IGMP V3=RFC3376
  • 所有版本的IGMP都支持ASM(任意源组播)模型
  • IGMP v3可以直接应用在SSM(指定源组播)模型
  • 而IGMPV1和IGMP v2则需要在IGMP SSM Mapping技术的支持下才能应用于SSM模型。

二、IGMPV1

1.查询与响应:(维护)

  • IGMP查询器周期性(60s)地向网段内所有主机以组播方式(224.0.0.1)发送成员关系查询消息(组地址为0)

2.查询报文:

  • 网络内所有主机都接收到该查询消息,如果某主机对任意组播组G感兴趣,则以组播(地址为目的组播组地址)方式发送“成员关系报告”报文来宣告自己将加入该组播组,只需要一个主机回复此报文即可(IGMPV1成员报告抑制)。

3.加组报文:

报告抑制:当路由器向PC发送普遍组查询报文(60s)时,目的地址为224.0.0.1,所有的设备(除本身)都能收到,会产生一个随机的定时器(抑制定时器0~10s),定时器的时间是随机的,0~10s以内,当定时器一过,pc就会发送成员关系报告报文,目的地址为所处的组播地址,发出以后,其他的所有设备都会收到,其他终端收到后,如果自己加入的组和收到成员关系报告报文的组播地址一样,就不会再次发送成员关系报告。

  • 经过查询/响应过程后,IGMP路由器了解到本网络内组播组G对应的接收者,生成(*,G)组播项并依此作为组播信息的转发依据。

在共享网络中有多台路由器时,由组播路由协议选举查询器。不同的组播路由协议有不同的选举机制。 pim的协议中DR决定了谁是查询器。

4.IGMPV1组成员离开:

主机悄悄离开(不发送报告)。路由器发送成员关系查询(3次),没人回应,认为没有该组的组成员,下次该组流量来时,就不去转发,收敛时间为3分钟。

三、IGMP v2

  • 主要基于查询和响应机制来完成组播组成员管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP成员关系报告报文,因此只需要其中一台路由器发送IGMP查询报文就足够了,这就需要有一个查询器的选举机制来确定由那台路由器作为查询器。对于IGMPv1来说,由组播路由协议(PIM)选举出唯一的组播信息转发者DR作为IGMP查询器。

查询器:

在BMA网络中,属于同一组播组的两台路由器,选举出一台路由器发送查询消息(IP地址小的)

非查询器会启动一个查询计时器,周期检查IGMP查询路由器的状态,缺省情况为120s。

1. 与IGMPv1相比,IGMPV2增加了查询器选举机制和离开组机制:

  • IGMPv2中,增加了独立的查询器选举机制,其选举过程如下:(120s)

    • 所有IGMPV2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP普遍组查询(General Query)报文(224.0.0.1)
    • 本地网段中其它IGMPv2路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的路由器将成为查询器,去其他路由器成为非查询器
    • 所有非查询器上都会启动一个定时器(即其他查询器存在时间定时器)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器,否则,就认为原查询器失效,并发起新的查询器选举过程。

2.IGMPV2离开机制:

在IGMPv1中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组播组成员的离开。而在IGMPv2中,当一个主机离开某组播组时:

  • 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文
  • 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的的地址字段和组地址字段均填充为所要查询的组播组地址)
  • 如果该网段内还有该组播组的其他成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间内发送成员关系报告报文;
  • 如果在最大响应时间内(1s)收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
  • 发送特定组查询两次(2s),无人回应,则删除该组信息

3.普遍查询和成员报告:

  • 主机会主动向其要加入的组播组发送IGMP成员关系报告报文以声明加入,而不必等待IGMP查询器发来的查询报文。
  • IGMP查询器周期性地以组播方式向本地网段内所有主机与路由器发送IGMP查询报文(224.0.0.1)
  • 当收到查询报文后,pc1会向组播组1发送IGMP成员关系报文,宣告其属于组播组1,同时本网段中所有PC和路由器都会收到,这样,PC2如果也属于组1,就不会再发送成员关系报文。减少本地网段的信息流量。这叫成员报告抑制机制。(0~10s)谁回复成员报告,谁就是Last  reporter。
  • 经过以上查询和响应过程,IGMP路由器了解到本地网段中有G1和G2的成员,于是由组播路由协议(如PIM)生成(*,G)表项,作为组播数据转发的依据。
  • 当有组播源发往某组播组的数据时,且IGMP中存在该组播组,就将组播数据转发到本地网段,接收者主机便能收到该组播数据了。

4.普遍查询和组成员报告:

周期性发送(60s),向本地网段内所有主机发送IGMP General Query报文,目的地址224.0.0.1,ttl为1,组地址:224.0.0.0。

5.特定组查询和离开组:

当最后一个接收者离开时发送,向所有组播路由器发送Leave  Group报文,目的地址224.0.0.2,报文包含要离开的组播组地址信息。

最后一个接收者,是上一次普遍查询响应的主机,当查询器收到后,发送特定组长询,发两次,时间为2s,这时主机设置的响应延迟为0~1s。如果该网段还存在接收者,该接收者会发送一个成员报告信息给路由器。

6.IGMPV2加组到离组过程:

加组过程:

维护过程:

收到查询信息后,客户端会设置一个随机的抑制时间(0~10s),时间一过,就会发送成员报告信息,当路由器收到后就会将last reporter修改成该客户端IP,其他客户端也会收到该成员报告报文,其他客户端就会取消发送成员报告信息报文。

离开查询:

非Last   reporter离开时不会发送离开组信息。

Last reporter 离开组时发送离开组信息:

特定组查询:

当Last reporter发送离开组报文后,路由器会连续发送两次特定组查询报文,没有离开组的客户端收到后,设定一个随机的抑制时间(0~1s),时间一过,就会回复成员报告报文,路由器就会将该客户端设备  Last reporter ,其他客户端收到该成员报告报文自动取消回复特定组查询。

7.IGMPv2协议报文:

  • Type为IGMP报文类型:

    • Membership Query报文:Type字段值为0x11
    • 版本1的Membership Report报文:type为0x12,该Report报文用于和IGMPv1兼容。
    • 版本2的Membership Query报文:Type 0x16
    • Leave Group报文:Type  0x17
  • Membership Query报文包含两种:
    • General Query报文的组地址字段值为0
    • Group-Specific Query报文中,组地址为被查询的组播组地址
  • Membership Report报文和Leave Group报文中,组地址为主机要加入或离开的组播组地址
  • Max Reps Time为最大响应时间,只有Membership Query报文使用该字段该字段中规定了主机在发送一个Membership Report报文时最大延时时间,单位为0.1s,默认值为100(10s),在Membership Report和Leave Group报文中,由主机设置为0
  • 校验和:是IGMP报文长度的16位检测
  • 组地址字段:在不同的报文类型中有不同的含义:
    • 在General Query报文中设为0
    • Group-Specific Query报文中为被查询的组播组地址
    • 在Membership Report报文和Leave Group报文中,组地址字段为主机想要加入或离开的组播组地址。

四、IGMP v3:(SSM)模型

1.概述:

在兼容和继承IGMPV1和IGMPV2的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。

PC1:加入源为10.1.1.1和10.1.2.1的224.1.1.1的这个组

PC2:加入任意源的224.1.1.1的组

PC3:加入源为10.1.2.1的224.1.1.1的组,离开源为10.1.1.1的224.1.1.1的组

2.特点

周期查询(60s),目的地址为224.0.0.1

成员报告目的地址为224.0.0.22

无抑制, 因为V1和V2只关心组播地址,不关注源地址,所以需要抑制,而V3,关注组播地址和源地址,加入加入的组一样,源不一样,使用抑制就不合理,所以V3取消抑制。

3.V3的好处:

普遍查询:

特定组源查询:

成员报告:

离开组:

  • 主机控制能力的增强:

    • 增加了针对组播源的过滤模式,使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。

      • 若接收某个指定组播源的信息:可以在报文中标记INCLUDE Sources字段
      • 若拒绝接收来自指定组播的信息:标记EXCLUDE Sources
    • 携带源地址的查询报文:IGMPV3还增加了对特定源组查询的支持
      • 普通组查询报文中,既不携带组地址,也不携带源地址
      • 特定组查询报文中,携带组地址,但不携带源地址
      • 特定源组查询报文,既携带组地址,还携带一个或多个源地址
    • 包含多组记录的报告报文:IGMPV3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。每个组记录中包含有组播组地址和组播源地址列表:
      • IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据
      • IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外组播源发往该组播组播数据。
      • TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE转变为INCLUDE。
      • TO_EX:表示组播组与组播源列表之间过滤模式有INCLUDE转变为EXCLUDE。
      • ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源,如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
      • 不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。组定时器只对EXCLUDE模式下起作用。

4.IGMPv3过滤模式和源列表:

  • IGMPV3主机位接口上每一个组播组都维护一个表项信息,其格式为(组地址,过滤模式,源列表);
  • 过滤模式包含INCLUDE 和EXCLUDE两种类型:
    • INCLUDE模式表示只接收来自于在源列表中列出的组播源发送的组播数据包
    • EXCLUDE模式表示只接收来自于不同源列表列出的组播源发送的组播数据包。
  • 源列表包含0个或多个IP单播地址,通常用集合形式来表示

5.IGMPV3主机侧维护的组状态:

  • IGMPV3组播有当前状态、过滤模式改变以及源列表改变三种状态,对应的组记录也有三种类型:

    • 当前状态记录
    • 过滤模式变化记录
    • 源列表变化记录
  • 当主机接口维护的组状态发生变化时,会主动发送组记录类型为过滤模式变化或源列表的Membership Report报文。
  • 当接收到Membership Query报文时,会响应组记录类型为当前状态的Membership Report 报文

6.IGMPv3路由器侧维护的组状态:

  • 路由器为接口上的每一个组播组维护一个状态,该状态包含组过滤模式和源列表以及定时器:

    • 组状态格式为(组地址,组定时器,过滤模式,源记录列表);
    • 源记录格式为(源地址,源定时器)
  • 每一个组播组只对应一种过滤模式:
    • 对于INCLUDE模式,源记录列表包含该接口网段的主机需要接受的组播源列表,表示为:INCLUDE(S,G)
    • 对于EXCLUDE模式,源记录列表包含两类源列表,第一类与过滤模式相反,是主机需要接收的组播源列表S1;第二类是主机不需要接受的组播源列表S2,表示为:EXCLUDE(S1,S2,G)

7.IGMPv3普遍组查询:

组地址:224.0.0.0

目的地址:224.0.0.1

8.IGMPv3特定源组查询:

7.IGMPv3特定组查询:

8.IGMP不同版本间的操作:

高兼容低,低抑制高

五:IGMP  Snooping

  • 二层组播问题:

    • 组播数据被二层交换机以广播方式发送

  • IGMP   Snooping功能

    • 组播数据在二层按照转发表项发送给组播接收者

IGMP Snooping基本概念和运行机制:

不同VLAN组播点播处理:

  • 不同VLAN的主机点播同一组数据时,路由器需要为每个VLAN的主机复制一份组播报文

组播vlan的功能:

路由器只在组播vlan内复制数据,减轻路由器负担,并节省网络带宽

组播___IGMP的更多相关文章

  1. Linux IPC socket 广播,组播

    getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...

  2. IPv4组播通信原理

    2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...

  3. UDP及其组播,接收发送封装

    1.Receiver public class Receiver { public delegate void HeartBeat(byte[] data); public event HeartBe ...

  4. ffmpeg无法接收组播流问题处理

    问题:ffmpeg无法对IP组播进行处理,表现如下 [root@os01 /]# ffprobe udp://225.0.0.2:9000 ffprobe version Copyright (c) ...

  5. 组播(Multicast)传输

    组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...

  6. dell n2000 组播抑制

    http://en.community.dell.com/support-forums/network-switches/f/866/t/19677497 http://en.community.de ...

  7. Ztack学习笔记(6)-广播组播点播

    Zigbee网络中进行数据通信主要有三种类型:单播.组播.广播.那这三种方式如何设置呢,在哪里设置呢, 一. 广播 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式.广播的短地址有三种 0 ...

  8. [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法:

    [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法: http://www.cnitblog.com/dvb-dvb/archive/2012/10/15/aa.html by def ...

  9. [转载] ACE 组播校验和出错问题解决

    源地址:http://yuanmuqiuyu2000.blog.sohu.com/140904942.html 使用ACE框架写了个组播简单的测试工具,但是测试过程中,总是发现udp校验和出错的信息. ...

随机推荐

  1. 在Ubuntu16.04.4上安装docker

    在Ubuntu16.04.4上安装docker 一.环境准备     首先我们需要一台Ubuntu16.04 虚拟机或者真机,其次,我们对其进行环境配置.       1.1.移除已经安装过的dock ...

  2. 一、异步编程模型(APM)

    一.概念 APM即异步编程模式的简写(Asynchronous Programming Model).大家在写代码的时候或者查看.NET 的类库的时候肯定会经常看到和使用以BeginXXX和EndXX ...

  3. IntelliJ IDEA 运行你的第一个Java应用程序

    IntelliJ IDEA 运行你的第一个Java应用程序创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导.你应该注意的主要是项目的SDK.SD ...

  4. JavaScript的DOM_获取和操作层次节点

    一.层次节点的概述 节点的层次结构可以划分为:父节点与子节点.兄弟节点这两种.当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点. 二.childNodes 属性 chil ...

  5. Android(java)学习笔记208:Android下的属性动画高级用法(Property Animation)

    1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...

  6. hdu1579 Function Run Fun(深搜+记忆化)

    版权声明:本文为博主原创文章.未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37076755 转载请注明出处 ...

  7. struts2不同版本在核心filter在web.xml中的配置

    FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.配置如下: <filter> <filter-name>struts2</filte ...

  8. rfcn校招总结

    idea:ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了,就解决了分类和定位的矛盾,但因为引入roi-wise lay ...

  9. VC MFC工具栏(CToolBar)控件(转)

    工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建, ...

  10. Using Lookup Tables to Accelerate Color Transformations

    转自:http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter24.html In feature-film visual-effects ...