二、IGMP协议简介

IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。

IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。

IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。

IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。

IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。

图1 IGMP在组播网络中的部署位置

IGMP在组播网络中的部署位置如上图1所示。

1、IGMP版本简介

到目前为止,IGMP有三个版本:IGMPv1版本(由RFC 1112定义)、IGMPv2版本(由RFC 2236定义)、IGMPv3版本(由RFC 3376定义)。

IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。

三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。

所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM Mapping技术的支持才可以应用于SSM模型。

IGMP三个版本的比较如下表1所示。

2、IGMPv1工作原理

2.1、IGMPv1报文介绍

IGMPv1包括两种类型的报文:

普遍组查询报文(General Query):

查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。

成员报告报文(Report):

主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。

IGMPv1报文的格式如下图1所示,其中各个字段的说明见下表1。

图1 IGMPv1报文格式

2.2、IGMPv1工作机制

IGMPv1协议主要基于查询和响应机制完成组播组管理。

当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,因此只需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier)

在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。

IGMPv1的工作机制可以分为普遍组查询和响应机制、新组成员加入机制和组成员离开机制三个方面。

图2 组播网络示意图

下面以上图2所示组网为例,介绍IGMPv1的工作机制。

如上图2所示,组播网络中RouterA和RouterB连接主机网段,RouterA为IGMP查询器,在主机网段上有HostA、HostB、HostC三个接收者。HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。

2.2.1、IGMPv1普遍组查询和响应机制

通过普遍组查询和响应,IGMP查询器可以了解到该网段内哪些组播组存在成员。

图3 IGMP查询和响应示意图

如上图3所示,普遍组查询和响应过程如下:

IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;收到该查询报文的组成员启动定时器。

普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。

第一个定时器超时的组成员发送针对该组的报告报文。

假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。

IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,则由组播路由协议生成(*,G1)组播转发表项,“*”代表任意组播源。网络中一旦有组播组G1的数据到达路由器,将向该网段转发。

2.2.2、IGMPv1新组成员加入机制

图4 新组成员加入示意图

如上图4所示,主机HostC加入组播组G2的过程如下:

主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入。

IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2)。网络中一旦有G2的数据到达路由器,将向该网段转发。

2.2.3、IGMPv1组成员离开机制

IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。如上图2所示。

假设HostA想要退出组播组G1

HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。

假设HostC想要退出组播组G2

HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒)后,删除G2所对应的组播转发表项。

3、IGMPv2与IGMPv1相比的变化

IGMPv2的工作机制与IGMPv1基本相同,最大的不同之处在于IGMPv2增加了离开组机制。

主机离开组播组时,会主动发送成员离开报文通知IGMP查询器;IGMP查询器收到成员离开报文后,会连续发送特定组查询报文,询问该组播组是否还存在组成员。

如果在一段时间内没有收到成员主机发送的报告报文,IGMP查询器将不再维护该组的组成员关系。

IGMPv2可以使IGMP查询器及时了解到网段内哪些组播组已不存在成员,从而及时更新组成员关系,减少网络中冗余的组播流量。

1、IGMPv2报文介绍

与IGMPv1相比,IGMPv2的变化如下:

除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:

1.1、成员离开报文(Leave):

成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。

1.2、特定组查询报文(Group-Specific Query):

查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。

IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。

IGMPv2报文的格式如下图1所示,其中各个字段的说明见下表1。

图1 IGMPv2报文格式

2、IGMPv2工作机制

在工作机制上,与IGMPv1相比,IGMPv2增加了查询器选举和离开组机制。

图2 组播网络示意图

下面以上图2所示组网为例,介绍IGMPv2的工作机制。

如上图2所示,组播网络中RouterA和RouterB连接主机网段,在主机网段上有HostA、HostB、HostC三个接收者。假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。

查询器选举机制、离开组机制的过程如下。

2.1 、IGMPv2查询器选举机制

IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器

图3 查询器选举示意图

如上图3所示,在IGMPv2中,查询器的选举过程如下:

最初,所有运行IGMPv2的组播路由器(RouterA和RouterB)都认为自己是查询器,向本网段内的所有主机和组播路由器发送普遍组查询报文。

RouterA和RouterB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的组播路由器将成为查询器,其他组播路由器成为非查询器(Non-Querier)。

如上图3所示,RouterA的接口地址小于RouterB,则RouterA当选为查询器,RouterB为非查询器。

此后,将由IGMP查询器(RouterA)向本网段内的所有主机和其他组播路由器发送普遍组查询报文,而非查询器(RouterB)则不再发送普遍组查询报文。

非查询器(RouterB)上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

2.2、IGMPv2离开组机制

图4 离开组示意图

如上图4所示,在IGMPv2中,主机HostA离开组播组G1的过程如下:

HostA向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。

查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。

该网段内还存在组G1的其他成员(如上图4所示的HostB),这些成员(HostB)在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。

如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达查询器时,查询器将不会向下游转发。

tcp 组播_华为组播理论知识详解(二)相关推荐

  1. 华为关闭telnet命令_华为s5720配置telnet命令详解

    华为s5720配置telnet命令详解 以本地PC登录远程的Telnet_Server为例,Telent登录配置如下: 1. 使能服务器功能 system-view [HUAWEI] sysname ...

  2. 华为交换机关机方法_华为交换机启动配置命令详解大全

    华为交换机启动配置命令详解大全 1.自动保存配置 [Huawei]set save-configuration ? backup-to-server  Back up the configuratio ...

  3. 1、决策树理论知识详解与sklearn实践

    看过我数学建模专栏的读者应该知道,我从去年开始就计划写这专栏,但由于各种原因,一直无暇实施计划.而从本篇开始,这个专栏将开始填坑.每篇博文会采用理论+实践的形式,试图用sklearn这个强大的工具包来 ...

  4. 华为5720设置静态路由不通_静态路由理论知识详解

    一.简介 静态路由是一种需要管理员手工配置的特殊路由. 静态路由在不同网络环境中有不同的目的: 当网络结构比较简单时,只需配置静态路由就可以使网络正常工作. 在复杂网络环境中,配置静态路由可以改进网络 ...

  5. 华为路由器ospf路由表解读_华为动态路由OSPF实例详解之多区域配置-华为路由器设置...

    在企业的大型网络中,因为设备众多,静态路由已经很难满足路由时常变化的需求,动态路由已经是必然选择,其中,OSPF又是最简单适合的动态路由协议,上一节已经介绍了单区域的OSPF配置,接着简单介绍下多区域 ...

  6. arp协议的主要功能是_【思唯网络学院】ARP理论知识详解(一)

    一.简介 ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址的协议. ARP安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学 ...

  7. rip协议中周期性广播路由信息的报文_RIP路由理论知识详解(一)

    一.RIP简介 RIP是Routing Information Protocol(路由信息协议)的简称,它是一种较为简单的内部网关协议(Interior Gateway Protocol). RIP是 ...

  8. IPv6理论知识详解

    1. IPv6地址表示 IPv6地址可以表示为128位由0.1组成的字符串,为了便于计算机理解,将128位的二进制字符串表示为32位的十六进制字符串,为了便于理解,人们将其划分为8组,组与组之间用 : ...

  9. IPv4、IPv6地址、组播地址及子网子划分详解二子网划分

    IPv4.IPv6地址.组播地址及子网子划分详解二子网划分 5.子网划分 5.1.子网掩码 5.2.无类域间选择CIDR 5.3.根据子网掩码和CIDR值划分子网 5.4.二进制AND运算在划分子网中 ...

最新文章

  1. java if (name!=null name!=),命名不规范,lombok泪两行!
  2. 阿里面试题:Mybatis中的Dao接口和XML文件里的SQL是如何建立关系的?
  3. 从TCP协议的原理来谈谈rst复位攻击
  4. LeetCode Algorithm 101. Symmetric Tree
  5. java 异常_学习Java,你需要知道这些Java异常
  6. 图像局部特征(十二)--BRISK特征
  7. v8go 库手动编译 v8 golang 库手动编译
  8. linux查找文件并显示修改时间,linux下find命令和文件的三种时间
  9. java学生选课系统_java实现学生选课系统
  10. ××项目日常工作制度和流程(草案)
  11. Matlab的卷积编码实现
  12. QT 即时聊天软件(一)
  13. 一项调查:从浅到深的机器学习方法的血压估计使用生物传感器【翻译】
  14. IDEA报错: Port already in use: 1099
  15. getElementByClassName
  16. Office 2016零售版转换为VOL版本
  17. 设计数据库时需要考虑的问题
  18. GitHub 安装失败 Win7 64位
  19. MS5611气压计IIC源程序
  20. WORD:论文的页码设置封面,摘要,目录,正文怎么用不同页码

热门文章

  1. 学习java的中文网站_学习java的网站有哪些
  2. 腾讯机器狗,站起来了!
  3. 在印度8年的华为工程师,有很多话想说。
  4. linux如何更改默认内核,[linux 内核] 设置内核的默认启动版本
  5. 自控matlab设计,自动控制原理课程设计--基于MATLAB软件的自动控制系统仿真
  6. todo在此放置对话框控件_MFC界面开发进入BCGControlBar v30.5时代,Gantt Chart控件升级...
  7. php300云,概述 · PHP300Framework2.0 · 看云
  8. SpringBoot启动流程分析(四):IoC容器的初始化过程
  9. git命令之git mergetool vi非正常退出.swp删除不了的问题
  10. OpenShift helm的安装