IGMP详解

IGMP(Internet Group Managment Protocol,因特网组管理协议)

目录

前提

概述

IGMPV1

两个角色:

IGMPV2报文格式

IGMPV2的选举机制改进

 IGMPV3

报文格式–查询报文

报文格式—成员关系报告报文

重点字段 Group Record

IGMPV3成员加组机制

IGMPV3组成员离组机制


前提

组播通信中,组播网络需要将组播数据发送特定的组播组成员,所以组播网络需要知道组成员位置和其加入的组

通过IGMP,组成员可将加组信息发送给组播网络,使组播识别和感知。、

感知组播组成员的方法

手工静态配置:在组播路由器上静态指定连接组播组成员的接口,静态加组。

灵活性差,配置工作量大,但是稳定高效,新上线组成员快速建立组播转发通路。

动态感知:组播网络通过IGMP消息感知接口,成员加组信息。

概述

IGMP是TCP/IP协议簇中负责IPV4组播成员管理的协议。主要利用组播组内的IGMP报文交换来建立和维护组播组成员关系。igmp报文份封装在ip报文中。目前有三个版本,IGMPv1、IGMPV2 、IGMPV3,组播路由器与组成员交互IGmp报文后会生成IGMP路由表项和IGMP组表项,这两项共同帮助设备生成组播路由表项。

IGMP组表项:用于维护组加入信息并通知组播路由协议。

IGMP路由表项:扩展组播路由表项的出接口。

IGMPV1:基于查询和响应机制完成组播管理。

IGMPV1

两个角色:

1.组播组成员

2.IGMP查询器:组播报文,一个多路访问网络只需要一个组播路由器发送查询报文,即IGMP查询器。

两种报文:(General Query) 普遍组查询报文:     查询器向共享网络上所有主机和路由器发送的查询报文(查询组成员)

(Report)成员关系报文:主机向查询器发送的报文。用于申请加入某个组播组或应答普遍组查询报文。

 

       

 版本(version)4bit :对IGMPv1而言,该字段值为1.
类型(type)4bit:指示了IGMPv1报文的报文类型。

   成员关系查询报文,该字段值为1,成员关系报告报文,该字段值为2。

保留字段(unused)8bit :未使用字段。发送时必须是0,接受忽略。        
校验和(checksum)16bit:用于校验IGMPv1报文。在进行校验时为0.传送报文时,必须计算该校验字并插入到该字段中,接收时,该字段在处理该包时进行检验。
组地址(group address)32bit:若是IGMPv1成员关系查询报文,该字段值为0(0.0.0.0);

若是IGMPv1成员关系报告报文,该字段值是主机加入组播组的组地址。

IGMPV1组成员加组机制

igmp查询器发送普遍组查询-(缺省情况下60s发送一次)–>> 组成员反馈成员关系报告报文>>>>>igmp查询器收到成员关系报告后生成IGMP路由表项IGMP组表项

IGMPV1 依赖组播路由协议(PIM)进行选举IGMP查询器

当组播组成员离组时,就不会再对普遍组查询报文做出回应。IGMP查询器不会收到特定组的报告报文则在130s(缺省值)删除特定组的对应组播选项。

IGMPV2,IGMPV1的改进版本,2者功能兼容

为了改进组成员离开机制,IGMP新增了两种报文

成员离开报文(leave):成员离开组播组时主动向查询器发送的报文,离开时目的地址为224.0.0.2

特定组查询报文(Group-Specific Query)查询器向共享网段内指定组播组发送的查询报文,作用查询此组播组是否存在成员;目的地址为查询组播组的组地址。

IGMPV2报文格式

TYPE 8bit  报文类型,有以下几种类型:

0x11 = Membership Query IGMP查询消息。

0x12 = Version 1 Membership Report IGMPv1成员报告消息。

0x16 = Version 2 Membership Report IGMPv2成员报告消息。

0x17 = Leave Group 离开消息。

在IGMPV2中,旧的4位版本字段和旧的4位类型字段拼成了一个新的8位类型字段,通过分别将成员查询(V1和V2的)及版本1的成员报告报文的IGMP版本2的类型代码置为0x11和0x12,保持了IGMPV1和V2包格式的向后兼容。

Max Resp Time 8bit  主机响应查询返回报告的最大时间

在发出响应报告前的以1/10秒为单位的最长时间,缺省值为10秒。

新的最大响应时间(以1/10秒为单位)字段允许查询用路由器为它的查询报文指定准确的查询间隔响应时间。IGMP版本2主机在随机选择它们的响应时间值时以此作为上限。

这样在查询响应间隔时有助于控制响应的爆发。

Group Address 32 bit

组播组地址(如果是通用查询则为0.0.0.0)。

除了在通用查询时这一字段置为0.0.0.0外,这一字段和IGMP版本1中的这一字段意义相同。

特定组的查勋报文中,组地址的为需要查询的组的地址。

IGMPV2的选举机制改进

使用独立的查询器选举机制,当共享网段上存在多个组播地址时,IP地址最小的路由器称为查询器。(注:非查询器上会启动一个定时器:其他查询器存在时间定时器【Other Querier Present Timer】;在该定时器超时前,如果收到了来自查询器的报文,则重置定时;反之则认为查询器失效,发起新的查询器选举。

IGMPV2成员离组机制

组播组成员向本地网段内所有的组播路由器(des:224.0.0.2)发送泽针对该组的离开报文

查询器收到报文>>发送针对该组的特定组查询报文(缺省情况下发送两次。间隔1s)启动组成员关系定时器(Timer-Membership=间隔*次数)

两种情况:如果该组还存在其他成员。在收到查询器发送的特定组查询报文后会立即发送针对该组的报告报文,查询器收到此报告报文后,会继续维护该组的租成员关系。反之,因查询器不能收到报告报文,就会删除该组对应的IGMP组表项,当后续再有该组的组播数据到达时。也不会进行转发。

 IGMPV3

报文格式–查询报文

 Type 8比特: 成员关系查询Type=0x11。 
 Max Resp Code 8比特: 设备接收到查询消息后发出响应报文的最大延迟时间,超过该时间没有发出响应报文,则查询设备认为此次查询超时,单位是1/10秒
 Checksum 16比特 :1GMP消息的校验和。传送报文时,必须计算校验和并填入该字段中;接收报文时,必须在处理报文之前检验校验和,以判断IGMP消息在传输过程中是否发生
了错误
 Group Address 32比特 :对干普遍组查询消息,该字段置0。对于特定组查询消息,特定组/源查询消息,该字段为设詈为欲查询的组播组的地址 
 Resv 4比特: 保留字段,发送报文时置0;接收到报文时,对该字段不做任何处理
  1比特 该比特位詈1时,所有收到此查询消息的其他路由器不启动定时器刷新过程,但是此查询消息并不抑制查询器选举过程和路由器的主机侧外理过程, 
 QQIC 8比特 :查询器的查询间隔,单位是秒,非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值。
 Number of Sources(N) 16比特 :消息中包令的组播源的数量 对干普谝组查询报文和特定组查询报文 该字船为0,对于特定组/源地址查询报文 该字段非0,此参数的大小受到所在网络
MTU大小的限制。
 Source Address 32比特 :组播源地址,其数量受到Number ofSources字段值大小的限制。

报文格式—成员关系报告报文

封装该消息的IP报文头的目的地址字段为224.0.0.22,本地网段上的所有IGMPv3路由器都能识别并接收

重点字段 Group Record

 重要字段

Record Type 8bit :Group Record消息的类型。

MODE_IS_INCLUDE:接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该消息为无效消息。

MODE_IS_EXCLUDE:不接收源地址列表包含的源发往该组的组播数据。

CHANGE_TO_INCLUDE_MODE:过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机离开组播组。

CHANGE_TO_EXCLUDE_MODE:过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表中新组播源发往该组的组播数据。

ALLOW_NEW_SOURCES:表示在现有的基础上,需要接收源地址列表包含的源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。

BLOCK_OLD_SOURCES:表示在现有的基础上,不再接收从源地址列表包含的源组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。

IGMPV3成员加组机制

成员加组机制和V2大体相同,主要有一下不同

IGMPV3的成员关系报告能够携带组播源信息

IGMPV3成员关系报文没有成员关系报文抑制机制。

IGMPV3组成员离组机制

IGMPV3没有专门的成员离组报文,成员离开需要借助成员关系报告实现

IGMP查询器在收到改变源组对应关系的成员关系报告后,会发送特定源组查询报文,确认是否还有组成员存在

各版本差异

查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/76183.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章:

IGMP详解

IGMP(Internet Group Managment Protocol,因特网组管理协议)
目录
前提
概述
IGMPV1
两个角色:
IGMPV2报文格式
IGMPV2的选举机制改进 IGMPV3
报文格式–查询报文
报文格式—成员关系报告报文
重点字段 Group Record
IGMPV3成员加……

Enviva发布关于现代生物能源在重工业垂直领域演进的白皮书

以取代化石燃料和加速可扩展、经济实惠、安全的清洁能源转型为使命,Enviva的可持续再生木质生物质将助推石灰、钢铁、水泥和可持续航空燃料等领域实现脱碳
全球领先的可持续再生木质生物质生产商Enviva Inc. (NYSE: EVA)今天发布了一份白皮书,探讨了如何……

Docker容器卷的基础概念

Docker容器数据卷
docker挂载主机目录访问如果出现cannot open directory.:Permission denied
解决办法:在挂载目录后多加一个–privilegedtrue参数即可
-v 宿主机路径:容器内路径
-p 宿主机端口:容器内端口
为什么要用容器数据卷? 就怕人家docker ……

【SpringBoot高级篇】SpringBoot集成MybatisPlus+PageHelper分页

【SpringBoot高级篇】SpringBoot集成MybatisPlusPageHelper分页简介SpringBoot集成PageHelper插件pomyml配置StockMapper启动类测试类简介
在项目中我们执行一个分页查询时,很多时候还会需要知道该查询的其他信息,如总数、每页数量、当前页数、上一页或……

《Towards End-to-End Lane Detection: an Instance Segmentation Approach》论文阅读

摘要 车道自动保持是一项重要的辅助驾驶功能,它依赖于车道线检测算法。传统的车道线检测算法依赖人为设计的特征和规则,以及后处理方法,因此计算量大且无法适应不同的场景。近期人们开始使用深度学习实现像素级的车道线分割,由于巨……

WEB安全之javascript基础(四):面向对象原型

WEB安全之javascript基础(四):面向对象原型面向对象第一种方法第二方法原型面向对象
JavaScript是一种基于原型的语言,它没类的声明语句,比如C 或Java中用的。这有时会对习惯使用有类申明语句语言的程序员产生困扰。相……

Linux常用基本命令【分类查询版】(超实用不来看看嘛?)

文章目录命令介绍Linux命令的通用命令格式帮助命令man:获得帮助信息help:获得 shell 内置命令的帮助信息常用快捷键文件目录类命令pwd:显示当前工作目录的绝对路径ls:列出目录的内容cd:切换目录mkdir:创建一……

第26讲:多表查询之UNION ALL联合查询

多表查询之UNION ALL联合查询 文章目录 多表查询之UNION ALL联合查询1.UNION联合查询的概念以及语法2.UNION ALL联合查询的典型案例1.UNION联合查询的概念以及语法
联合查询是指将多次查询的结果合并起来,形成一个新的查询结果集。
联合查询使用的关键字为UNION,通过UNION可……

Redis哨兵模式与Redis缓存穿透、击穿和雪崩

一、哨兵模式概述 (自动选主机的方式) 主从切换技术:当主机宕机后,需要手动把一台从(slave)服务器切换为主服务器,这就需要人工干预,费时费力,还回造成一段时间内服务不可……

51单片机定时器/计数器(定时器中断)

中断系统:定时器中断(51单片机定时器/计数器)
实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52
定时器介绍
1、51单片机定时器原理 定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1&a……

【面试题 高逼格利用 类实现加法】编写代码, 实现多线程数组求和.

编写代码, 实现多线程数组求和.关键1. 数组的初始化关键2. 奇偶的相加import java.util.Random;public class Thread_2533 {public static void main(String[] args) throws InterruptedException {// 记录开始时间long start System.currentTimeMillis();// 1. 给定一个很长的……

一个python训练

美国:28:麻省理工学院,斯坦福大学,哈佛大学,加州理工学院,芝加哥大学,普林斯顿大学,宾夕法尼亚大学,耶鲁大学,康奈尔大学,哥伦比亚大学,密歇根大学安娜堡分校,约翰霍普金斯大学,西北大学,加州大学伯克利分校,纽约大学,加州大学洛杉矶分校,杜克大学,卡内基梅隆大学,加州大学圣地……

Mybatis03学习笔记

目录 使用注解开发
设置事务自动提交
mybatis运行原理
注解CRUD
lombok使用(偷懒神器,大神都不建议使用)
复杂查询环境(多对一)
复杂查询环境(一对多)
动态sql环境搭建
动态sql常用标签……

设置或取得c# NumericUpDown 编辑框值的方法,(注意:不是Value值)

本人在C#开发中使用到了NumericUpDown控件,但是发现该控件不能直接控制显示值,经研究得到下面的解决办法
NumericUpDown由于是由多个控件组合而来的控件,其中包含一个类似TextBox的控件,若想取得或改变其中的值要使用如下方法
N……

使用NPOI 技术 的SetColumnWidth 精确控制列宽不能成功的解决办法(C#)

在使用NPOI技术开发自动操作EXCEL软件时遇到不能精确设置列宽的问题。

ISheet sheet1 hssfworkbook.CreateSheet("Sheet1");
sheet1.SetColumnWidth(0, 50 * 256); // 在EXCEL文档中实际列宽为49.29
sheet1.SetColumnWidth(1, 100 * 256); // 在EXCEL文……

Mysql 数据库zip版安装时basedir datadir 路径设置问题,避免转义符的影响

本人在开发Mysql数据库自动安装程序时遇到个很奇怪的问题,其中my.ini的basedir 的路径设置是下面这样的:
basedir d:\测试\test\mysql
但是在使用mysqld安装mysql服务时老是启动不了,报1067错误,后来查看window事件发现一个独特……

java stream sorted排序 考虑null值

项目里使用到排序, java里没有像C# 里的linq,只有stream,查找stream.sorted源码看到有个
Comparator.nullsLast
然后看了一下实现,果然是能够处理null值的排序,如:minPriceList.stream().sorted(Comparator.comparing(l -> l.g……

spring @EnableConfigurationProperties 实现原理

查看DataSourceAutoConfiguration源码,发现如下代码: Configuration ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) EnableConfigurationProperties(DataSourceProperties.class) Import({ DataSourcePoolMetadataProvidersCon……

postman请求https网址没有响应,但是用浏览器有响应,解决办法

遇到个问题:同一个get请求的url,postman请求https网址没有响应,但是用浏览器有响应
url是https开头的,查看错误描述里有一个SSL的选项: 然后根据描述关掉这个选项: 然后就没问题了,能正常请求及……

java @Inherited注解的作用

看到很多注解都被Inherited进行了修饰,但是这个Inherited有什么作用呢?
查看Inherited代码描述:
Indicates that an annotation type is automatically inherited. If an Inherited meta-annotation is present on an annotation type decl……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注