让我们一起解密组播、IGMP、IGMP监听

news2024/11/16 15:43:54

前言:一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播路由这一块,知识点、名词非常多,要完全掌握并不是一件容易的事情。下面海翎光电的小编跟大家分享一下我的学习经验,如有错误请提出,谢谢。还有,此文全部组播均为IPv4环境下的组播,IPv6的组播跟IPv4完全不同,请注意区分。

   一、 为什么需要组播

    简单来说,就是因为在一些诸如视频点播的应用时,单播对主机的压力太大、而广播又对网络链路的压力太大。所以……

  (一)  组播IP地址

  • 224.0.0.0~239.255.255.255 所有组播地址

  • 224.0.0.0~224.0.0.255 有特殊用途的组播地址(不能被路由)

  • 224.0.0.1 同一网段所有主机

  • 224.0.0.2 同一网段所有组播路由器

  • 224.0.1.0~238.255.255.255 公网组播地址

  • 239.0.0.0~239.255.255.255 私网组播地址

   (二) 组播IP地址和MAC地址的关系

    组播MAC地址的高24bit位是以01-00-5E开头,低23bit为组播IP地址的低23bit。

    由于IP组播地址的高4bit是1110,标识了组播组,而低28bit中只有23bit被映像到组播MAC地址上,这样IP组播地址中就会有5bit没有使用,从而出现了32个IP组播地址映像到同一MAC地址上的结果。

    (三)组播模型分类

    根据接收者对组播源处理方式的不同,组播模型分为以下三类:

    (1) ASM 模型:Any-Source Multicast,任意信源组播

    在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。

    (2) SFM 模型:Source-Filtered Multicast,信源过滤组播

    该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。

    在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。

    因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。

    (3) SSM 模型:Source-Specific Multicast,指定信源组播

    在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。

    SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。

    (四) 组播服务模型:针对接受者对源如何进行选择

  (五)组播ip地址

    (六)组播mac地址

高24bit=0x01005e,第25bit=0,第23bit=组播ip地址的第23bit

mac地址=01-00-5e(前缀)

    优于ip地址的前4bit是1110,代表主笔标识,而后28bit中只有23bit被映射到mac地址表,这样ip地址中就有5bit信息丢失,直接的结果就是出现32个ip组播地址映射到同一个mac地址上。

   (七) 组播的基本架构

    数据发送-转发-接受

 (八) 组播路由协议包括

    (九)域间组播协议

   对于ssm模型,没有域内和域间划分。优于接受者预先只掉组播的具体位置,因此可以借助pim sm的功能直接创建组播传输路劲

   二、 IGMP简介 

    IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。

    (一)到目前为止,IGMP 有三个版本:

IGMPv1(由RFC 1112 定义)

IGMPv2(由RFC 2236 定义)

IGMPv3(由RFC 3376 定义)

    1、查询报文

    该报文由组播路由器发出。可细分为通用查询报文和特定组查询报文。组播路由器定时发出通用查询报文(下图的组播路由器每125s发送一次)。通用查询报文的目标IP为224.0.0.1(所有主机),IGMP报头内的组播IP为0.0.0.0。用来查询该网段有哪些组播组的成员。特定组查询报文的目标IP则是要查询的组播组地址。

    查询报文抓包

    2、报告报文

    该报文由主机发出。可对组播路由器发出的查询报文进行回应,同时主机在主动加入特定组的时候,也会主动发送该报文报告。报告报文的目标IP和IGMP报头内的组播IP均为主机加入的组播组地址(注意!这里虽说是回应路由器的,但是数据包的目标IP不是路由器)。

报告报文抓包

   3、离开报文(仅限IGMPv2和v3)

    该报文由主机发出。当主机离开组播组时发送此报文,向组播路由器报告离开了特定的组播组。离开报文的目标IP为224.0.0.2(所有组播路由器),IGMP报头内的组播IP为特定离开组的IP。

离开报文抓包

   (二) igmp版本比较

     三、交换机处理组播的方式

    1、一切没有开启或不支持IGMP监听功能的交换机,组播数据包都以广播的形式在广播域内泛洪。

    2、开启IGMP监听功能的交换机的每个VLAN会维护一个组播地址表。当收到组播数据包时,如果表中含有该数据包组播IP的条目,则按照表中的组播IP向对应的端口进行转发,否则以广播的形式在广播域内泛洪。

     四、交换机的组播地址表样式

 五、交换机组播地址表的学习和维护(IGMP监听过程)

    (假设当前只有一个VLAN)

    1、当组播路由器发出IGMP通用查询报文然后收到主机回应的IGMP报告报文时,交换机会把收到回应的端口和对应的组播地址学习到组播地址表中(其实只要是IGMP报告报文,都会学习,不管有没有事先查询)。如下图所示:

    2、当主机发出IGMP离开报文时,组播路由器会发送IGMP特定组查询报文。如果该端口在一定时间内得不到回应,则删除条目对应的端口;如果得到回应则不删除。当开启端口快速离开功能时,一旦该端口收到离开报文,交换机将立即删除条目对应的端口。

    3、和MAC地址表一样,自动学习到的条目都有老化时间。若在一定时间内没有收到对应组播地址某个端口上的IGMP报告报文,条目上相应的端口会自动删除。当所有端口都被删除时,条目则自动删除。

    4、组播地址表的学习和维护全靠IGMP监听(不考虑CGMP)。

    5、如果网络中没有组播路由器,也就没有IGMP查询报文,组播地址表的建立将会变得十分困难(思科2960可以配置定期发送IGMP查询报文)。

    6、除非把交换机配置成IGMP查询器,否则交换机不会发送任何IGMP报文,只会静静地监听。

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

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

相关文章

ChatGPT 被大面积封号,到底发生什么了?

意大利数据保护机表示 OpenAI 公司不但非法收集大量意大利用户个人数据,没有设立检查 ChatGPT 用户年龄的机制。 ChatGPT 似乎正在遭遇一场滑铁卢。 3月31日, 大量用户在社交平台吐槽,自己花钱开通的 ChatGPT 账户已经无法登录,更…

举一反三学python(9)—excel基础

一、导论: 操作 excel 表格的Python 第三方库有openpyxl、xlrd、xlwt等,它们的功能都相同,就是语法有差异,今天我就带领大家学习用openpyxl模块操作实用的excel文件。 openpyxl模块为第三方库,首先要安装:p…

electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求

文章目录引入1.引入依赖2.集成插件3.测试接口请求引入 后端接口出的太慢?问题不大,咱们可以借助vite-plugin-mock-server插件自己写接口,返回商量好的格式,后续联调直接切换环境即可 vite-plugin-mock-server官网 mock.js官网 …

uniapp人脸识别解决方案

APP端: 因为APP端无法使用uni的camera组件,最开始考虑使用内嵌webview的方式,通过原生dom调用video渲染画面然后通过canvas截图。但是此方案兼容性在ios几乎为0,如果app只考虑安卓端的话可以采用此方案。后面又想用live-pusher组件…

【Linux】vi编辑器——插入模式

目录 插入模式 光标移动命令 a A i I o O命令 a----------------在光标后附加文本 A----------------在文本行末附加文本 i------------------在光标前插入文本 I-------------------在文本开始插入文本 o----------------在光标下插入新行 O---------------在…

陶泓达:4.11黄金原油白银最新走势分析及操作策略!

黄金行情走势分析:   周一(4月10日),国际金价一度跌约1%,重回2000美元干口下方。此前公布的美国3月非农就业数据显示劳动力市场吃紧,并提高了美联储5月再次加息的预期。金属公司MKS PAMP在一份报告中表示:“金价自20…

Doris(5):数据导入(Load)之Broker load

为适配不同的数据导入需求,Doris系统提供了五种不同的数据导入方式,每种数据导入方式支持不同的数据源,存在不同的方式(异步,同步) Broker load 通过Broker进程访问并读取外部数据源(HDFS&#…

elasticsearch之DSL查询文档

目录 DSL查询分类 全文检索查询 match查询: multi_match: 精准查询 地理坐标查询 矩形范围查询 中心点范围 组合查询 elasticsearch中的相关性打分算法是什么? 案例——给“如家”这个品牌的酒店排名靠前一些 function score query…

ChatGPT写新闻-ChatGPT写文章

ChatGPT写新闻 ChatGPT可以用于生成新闻稿件,但需要注意的是,由ChatGPT生成的新闻稿件可能存在语义、逻辑、事实准确性等方面的问题,因此需要进行人工审核和编辑,确保其准确性。 下面是一个示例过程,大致了解如何使用…

GPT3.5 , InstructGPT和ChatGPT的关系

GPT-3.5 GPT-3.5 系列是一系列模型,从 2021 年第四季度开始就使用文本和代一起进行训练。以下模型属于 GPT-3.5 系列: code-davinci-002 是一个基础模型,非常适合纯代码完成任务text-davinci-002 是一个基于 code-davinci-002 的 InstructG…

PixiJS 文字模糊处理策略

pixijs介绍 PixiJS是一个用于创建交互式2D图形和动画的JavaScript库。它是一个快速、轻量级、易于使用的库,可以在WebGL和Canvas上运行。支持WebGL和Canvas两种渲染方式。WebGL是一种基于OpenGL的3D图形API,可以在GPU上进行高效的图形渲染。Canvas是一种…

基于神经辐射场NeRF的SLAM方法

随着2020年NeRF[1]的横空出世,神经辐射场方法(Neural Radiance Fields)如雨后春笋般铺天盖地卷来。NeRF最初用来进行图像渲染,即给定相机视角,渲染出该视角下的图像。NeRF是建立在已有相机位姿的情况下,但在…

Android kotlin (仿淘宝app收藏)用RecyclerView(androidx+BRVAH3.0.6)实现单选/多选/全选/反选/批量删除功能

文章目录 一、实现效果二、引入依赖三、实现源码1、实体类2、适配器3、提示框(关闭和确定)4、视图实现一、实现效果 二、引入依赖 在app的build.gradle在添加以下代码 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0

使用采集工具,轻松获取目标受众的数据,让您的市场营销更加精准

【数据采集神器】使用采集工具,轻松获取目标受众的数据,让您的市场营销更加精准! 在当前这个信息化社会中,数据已经成为了企业发展和市场营销的必要手段。企业需要通过数据来了解市场的需求,了解自己产品的竞争优势&a…

你真的懂docker吗?25个试题,学过你就来

前言:遇到不会的,答案偷偷放在评论区了哦~ 1.什么是Docker A 虚拟机 B 半虚拟化技术 C 开源的应用容器引擎 D 后端软件 2. 如何搜索Nginx镜像 A docker search nginx B docker rm nginx C doc…

剑指 Offer II 024. 反转链表(经典题型)

时间是伟大的作者,她能写出未来的结局。 ——卓别林 目录 题目描述: 方法1:迭代法(翻指针) 方法2:头插法 方法3:递归法 题目描述: 给定单链…

【工作感悟】老程序员总结的四条工作经验教训

文章目录前言1. 不要做小需求2. 要做大需求3. 定期同步工作进度4. 项目结束,主动复盘总结前言 想来从事互联网工作已经很多年了,已经从当初的懵懂少年逐渐退化成老油条。刚毕业的时候,真是个愣头青,什么都不懂,也什么…

SegGPT: Segmenting Everything In Context

目录摘要本文方法上下文着色Context EnsembleIn-Context Tuning消融实验摘要 最近基于大规模数据的模型越来越火了,chat GPT以及seg everything,感觉后面很多像目标检测,图像恢复等等都会出现这种泛化能力强,基于大规模数据的模型…

[2019.01.24]JNI经验积累

[1 jobject<--->jclass|jstring](1)jobject向上转型jclass|jstring:jclass jcls static_cast<jclass>(jobject);jstring jstr static_cast<jclass>(jobject);(2)jclass|jstring向下转型jobject:默认情况下是自动转换的[2 jstring<--->const char*](1…

c++string相关内容

1. string基本概念本质:string是C风格的字符串&#xff0c;而string本质上是一个类string和 char *区别:char * 是一个指针string 是一个类&#xff0c;类内部封装了char *&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器 特点:string类内部封装了很多成员方法例如…