计算机网络:网络层 —— 网际组管理协议 IGMP

文章目录

    • IP多播协议
      • 网际组管理协议IGMP
        • IGMP的三种报文类型
        • IGMP的基本工作原理
          • 加入多播组
          • 监视多播组的成员变化
            • 多播路由器发送IGMP成员查询报文
            • 多播组成员发送IGMP成员报告报文
            • 多播路由器移除多播组成员
            • 注意事项
          • 退出多播组

IP多播协议

要在因特网上进行IP多播,就必须要考虑IP多播数据报经过多个多播路由器进行转发的问题。多播路由器必须根据IP多播数据报首部中IP多播地址,将其转发到有该多播组成员的局域网。

网际组管理协议IGMP

网际组管理协议(Internet Group Management Protocol,IGMP)是 TCP/IP 体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本局域网上,是否有主机(实际上是主机中的某个进程)加入或退出了某个多播组

IGMP 仅在本网络有效,使用 IGMP 并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中

![[网际组管理协议IGMP.png]]

IGMP的三种报文类型

网际组管理协议 IGMP 目前的最新版本是2002年10月公布的 IGMPv3 [RFC 3376]

IGMP 有三种报文类型:

  • 成员报告报文
  • 成员查询报文
  • 离开组报文

IGMP 报文被封装在 IP 数据报中传送,TCP/IP 的网际层会为其添加一个 IP 首部,使之成为 IP 数据报:

  • 协议字段的值=2,表示数据载荷部分是 IGMP 报文

  • 目的地址字段的值根据其所封装 IGMP 报文类型各有不同,但都属于IP多播地址

  • 生存时间TTL字段的值=1,避免封装 IGMP 报文的 IP 多播数据报被路由器转发到其他网络。

  • 封装有 IGMP 报文的 IP 数据报都是 IP 多播数据报

IGMP的基本工作原理
加入多播组

加入多播组:希望加入多播组的主机(即希望接收多播数据的设备)向以太网发送IGMP成员报告报文

假设 主机B 首先以太网发送 IGMP 成员报告报文,主机A 也要发送 IGMP 成员报告报文,接收到 主机B 发送的成员报告报文后,就取消发送自己的成员报告报文:

![[加入多播组.png]]

  1. 主机B发起请求

    • 主机B首先决定它想要加入一个具有 IP 地址 226.0.9.26 的多播组。
    • 它通过发送一个 IGMP 成员报告报文来表达这一意图。这个报文被封装在 IP 多播数据报中,再进一步封装在以太网多播帧里。
    • 报文中指定了目标多播地址 226.0.9.26,以及对应的以太网多播地址 01-00-5E-00-09-1A
  2. 路由器R1接收到请求:当路由器 R1 收到这个 IGMP 成员报告报文时,它解析出相关信息,并将其添加到内部维护的多播组列表中。此时,R1 知道至少有一台主机(B)对该多播组有兴趣。

  3. 其他主机的行为:其他主机(如 A, C 和 D)也可能尝试加入不同的多播组。

    • 主机A 同样希望加入 226.0.9.26 组,但它发现 B 已经发送了请求,于是选择不发送自己的 IGMP 成员报告报文。

    • 主机C 想加入另一个多播组 228.1.1.1,但它的请求在 MAC 层就被丢弃了,可能是由于某种原因(例如,该组不在其配置范围内)。

    • 主机D 不打算加入任何多播组,因此不会发送 IGMP 成员报告报文。

  4. 结果

    • 最终,路由器 R1 的多播组列表中记录了两个组:226.0.9.26 和 228.1.1.1。
    • 对于每个组,R1 会根据成员情况调整其多播数据的转发策略,确保仅将数据发送给已知的感兴趣成员所在的子网。
监视多播组的成员变化

监视多播组的成员变化:多播路由器默认每隔125秒就向其直连网络发送一个封装有 IGMP 成员查询报文的 IP 多播数据报

多播路由器发送IGMP成员查询报文
  • IGMP成员查询报文中的内容也可以是 0.0.0.0,表示全部多播组

  • 224.0.0.1 是特殊的IP多播地址,在本网络中所有参加多播的主机和路由器的网际层都会接受该多播数据报

  • 以太网多播帧的目的地址,是由IP多播数据报的目的地址映射而来的多播MAC地址

![[多播路由器发送IGMP成员查询报文.png]]

  1. IGMP成员查询报文的封装:查询报文被封装在 IP 多播数据报中,然后再封装在以太网多播帧中。IP 多播数据报的目标地址通常是 224.0.0.1(所有系统组),这是标准的多播地址,用于向网络中的所有主机发送消息。

  2. 查询报文的内容:查询报文中包含多播组的IP地址 226.0.9.26,说明路由器正在询问是否有主机想要加入这个特定的多播组。

  3. 主机响应查询

    • 主机A 和 主机B 分别在收到查询后的 2 秒和 8 秒内回应了 IGMP 成员报告报文,表明它们有意加入指定的多播组。

    • 主机C没有回应,这意味着它不想加入该多播组。

    • 主机D也不在任何多播组中,因此也不会回应查询。

  4. MAC层处理

    • 主机A 和 主机B 的 MAC 层接受了查询报文,并向上层传递。

    • 主机C 和 主机D 的 MAC 层丢弃了查询报文,因为它们没有加入相关的多播组。

  5. 多播组列表更新:根据主机的响应,路由器R1更新了其多播组列表,记录下了哪些主机对哪个多播组感兴趣。

通过这样的周期性查询和响应机制,多播路由器能够保持最新的多播组成员信息,从而更有效地管理和转发多播数据。

多播组成员发送IGMP成员报告报文

![[发送IGMP成品报告报文作为应答.png]]

  • 收到IGMP成员查询报文的被查询多播组的任何成员,将会发送IGMP成员报告报文作为应答,为了减少不必要的重复应答,每个多播组只需要有一个成员应答就可以了。

  • 因此,采用了一种延迟响应的策略,收到IGMP成员查询报文的主机并不是立即响应,而是在1~10秒的范围内,等待一段随机的时间后再进行响应。如果在这段随机的时间内,收到了同组其他成员发送的IGMP成品报告报文,就取消响应

多播路由器移除多播组成员

假设 主机C 不再是多播组 228.1.1.1 的成员,多播路由器长时间收不到该多播组成员的响应,则将其从多播组列表中删除。

![[主机不再是多播组成员.png]]

注意事项
  • 同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性地发送IGMP成员查询报文。

  • 只要在这些多播路由器中选择一个作为查询路由器,由查询路由器发送IGMP成员查询报文,而其他的多播路由器仅被动接收响立并更新自己的多播组列表即可。

  • 选择查询路由器的方法:每个多播路由器若监听到源IP地址比自己的IP地址小的IGMP成员查询报文,则退出选举。最后,网络中只有IP地址最小的多播路由器成为查询路由器

退出多播组

IGMPV2IGMPv1 的基础上增加了一个可选项:当主机要退出某个多播组时,可主动发送一个离开组报文,而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员

![[离开组报文.png]]

  • 224.0.0.2 是特殊的IP多播地址,在本网络中的所有多播路由器的网际层都会接受该多播数据报。

  • 有成员离开该多播组,暂时不删除该多播组,立即发送针对该多播组的特殊的IGMP成员查询报文,探测该多播组是否还有其他成员。封装该报文的IP多播数据报的目的地址,为该多播组的地址 228.1.1.1,而不是特殊的多播地址 224.0.0.1.

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

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

相关文章

每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date

premiere n.首映,首次公演 v.首次公演(戏剧、音乐、电影) a.首要的,最早的 Today we’re premiering Meta Movie Gen: the most advanced media foundation models to-date. 迄今,到现在为止 …

使用Deno进行现代Web开发

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 [TOC] 引言 Deno 是一个现代的、安全的、基于 V8 引擎的 JavaScript 和 TypeScript 运行时,由 Node.js 的作者 Rya…

C++设计模式结构型模式———适配器模式

文章目录 一、引言二、适配器模式三、类适配器四、总结 一、引言 适配器模式是一种结构型设计模式,它在日常生活中有着广泛的应用,比如各种转换接头和电源适配器,它们的主要作用是解决接口不兼容的问题。就像使用电源适配器将220V的市电转换…

交换机如何实现2.5G网络传输速率和网络变压器有关吗

华强盛电子导读:I19926430038 交换机实现2.5G网络传输速率涉及多个因素,其中包括硬件设计、端口支持、传输介质以及网络协议等。网络变压器在其中扮演了一个重要的角色,但并不是唯一的因素。 1. **硬件设计**:交换机需要有支持2.…

Centos环境下安装docker

本文演示离线版安装用于没有网络环境的系统 在线版安装可参考以下链接 https://www.runoob.com/docker/centos-docker-install.html 一、docker离线安装 1、下载docker离线安装包 docker下载地址: Docker版本下载 选择版本 下载后上传至服务器 百度网盘下载…

微软官方 .NET 混淆软件 Dotfuscator

微软官方 .NET 混淆软件 Dotfuscator 1、前言2、Dotfuscator 特色2.1、强大的保护2.2、不需要顾问2.3、世界一流的支持2.4、广泛的平台支持 3、Dotfuscator 功能介绍3.1、.NET Obfuscator3.2、篡改防御和提示3.3、监控性能和使用情况3.4、Silverpght XAML Obfuscatio3.5、WPF B…

深入浅出:SM4 加密算法及其多种工作模式详解

深入浅出:SM4 加密算法及其多种工作模式详解 引言 SM4 是中国国家密码管理局定义的对称分组加密算法,广泛应用于无线局域网安全协议等领域。作为中国商用密码算法之一,SM4 采用 128 位的分组长度和密钥长度,提供了高效且安全的加…

摄像机实时接入分析平台LiteAIServer视频智能分析软件诊断噪声检测

在科技日新月异的今天,视频监控系统的应用日益广泛,从公共安全到家庭防护,从生产线管理到交通监控,视频监控已经成为现代社会不可或缺的一部分。然而,噪声问题一直是影响视频画面清晰度和可用性的关键因素。为了解决这…

NumPy安装

1.NumPy简介 NumPy(Numerical Python) 是 Python 语言的扩展程序库,支持大量维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliph…

推荐几款TOP级AI驱动的单元测试工具

这篇文章,我想对开发人员人员来说更有帮助,毕竟开发同学“苦单元测试久已”! 软件开发是一项创造性的工作,但其中也包含着许多乏味的任务。其中最乏味的莫过于编写“单元测试”了,用于验证软件组件是否按预期工作。单…

C#的Event事件示例小白级剖析

1、委托Delegate 首先说一下delegate委托,委托是将方法作为参数进行传递。 // 定义了一个委托类型public delegate void MyDelegate(int num);// 定义了一个啥也不干的委托实例public MyDelegate m_delegate _ > {};// 定义了一个和委托相同格式的方法public …

JWT-混淆算法

jwt - RS256(RSA SHA-256) 题目来源:DownUnderCTF2021 Web jwt 外国的比赛,找不到线上的环境了,github中有Docker,拖下来用docker生成一个本地环境 原题wp链接: https://ctftime.org/write…

物联网开发教程专栏介绍与专栏说明——列表目录查阅(持续更新)

阿齐Archie《物联网开发:完整实现单片机通信模组云服务器智能应用软件》专栏 为方便查阅学习本专栏,特整理专栏介绍与专栏说明 一、专栏介绍 物联网开发教程专栏目前有P1和P2系列,P1系列为《手把手完整实现STM32ESP8266MQTT阿里云APP应用》…

Matlab实现海洋捕食者优化算法(MPA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 海洋捕食者优化算法(MPA)是一种基于自然界海洋生物捕食行为的优化算法,它通过模拟海洋捕食者如鲨鱼、海豚等在寻找猎物时的群体协作和个体行为来探索最优解。MPA因其出色的全局…

数据结构(8.5_1)——归并排序

定义 归并:把两个或多个已经有序的序列合并成一个 归并后: 2路归并 把两个或多个已经有序的序列合并成一个 m路归并 m路归并,每选出一个元素需要对比关键字m-1次 归并排序(手算) 代码实现 算法效率分析 2路归并的“归并树”——形态上…

软件开发详解:基于食堂采购系统源码开发现代化供应链管理平台实战

下文,小编将从食堂采购系统源码切入,为大家详细解答如何开发现代化供应链管理平台。 一、供应链管理平台的功能需求 供应链管理平台的设计,需要满足企业从原料采购到成品交付的完整业务流程。以下是基于食堂采购系统源码开发的供应链管理平…

【99.9%解决】vue3+vite+typescript+vscode使用@alias路径别名配置不正确导致红色波浪线的解决办法

相信很多人设置了别名“”后在编辑器内产生了大量的红色波浪线,警告无法读取相关模块。网上针对这个问题都没有好好分析原因,并且提供真正理解之下的解决方案。我在历经各种失败后,总结出这篇文章,希望对大家有所帮助。 当然我因为…

「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。 关键词 高级动画弹性缓动自动动画缓动曲线 一、Animation 组件的高级缓动曲线 缓动曲线&#…

BFS解决拓扑排序(3)_火星词典

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 BFS解决拓扑排序(3)_火星词典 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录…

QT中使用图表之QChart绘制X轴为日期时间轴的折线图

显然X轴是日期时间轴的话,那么我们使用的轴类就得是QDateTimeAxis QChart中日期时间轴的精度是毫秒 因此图表里面的数据的x值需要是一个毫秒数,才能显示出来 --------------------------------------------------------------------------------------…