当前位置: 首页 > news >正文

华为数通HCIP-IGMP(网络组管理协议)

 IGMP(网络组管理协议)


  作用:维护、管理最后一跳路由器以及组播接收者之间的关系;
  应用:最后一跳路由器以及组播接收者之间;
  原理:当组播接收者需要接收某个组别的流量时,会向最后一跳路由器,发送IGMP报文,最后一跳路由器会根据组播接收者加入的组别,生成组播路由表,进行转发;
            当组播接收者需要离开某个组播组别时,也向最后一跳路由器,发送IGMP报文,最后一跳路由器会删除对应的组播路由表,不再转发对应组播组别的流量;
 
 工作流程:
  1、查询阶段:最后一跳路由器会寻找网段内的组播接收者,并且询问它们加入了哪个组别;
  2、报告阶段:组播接收者告知最后一跳路由器,自身加入了哪个组播组,最后一跳路由器生成组播路由表;
  3、离开阶段:组播接收者告知最后一跳路由器,自身需要离开某个组播组,最后一跳路由器删除对应的组播路由表;

 版本:
  V1——工作在ASM模型
  V2——工作在ASM模型(默认)
  V3——工作在SSM模型


配置:
 最后一跳路由器(R4):
[R4]multicast routing-enable              //全局下开启组播功能
      pim                                               //全局下开启pim

      interface GigabitEthernet0/0/0     //进入距离组播接收者最近的接口
        pim dm                                      //开启pim
        igmp enable                               //开启IGMP
        igmp version 1                           //修改IGMP版本为1,默认为2


IGMPv1工作过程


 1、查询阶段
      最后一跳路由器周期性发送查询报文(默认为60s/次),用于查询网段的组播接收者所加入的组别;
       查询报文
        sip 最后一跳路由器的接口ip
        dip 224.0.0.1(网段内的所有设备均可接收)
        组播地址 0.0.0.0

       如果存在多台最后一跳路由器时,需要依靠pim确定谁负责周期性发送查询报文;


       由pim的DR负责;
       选举规则:
        (1)接口优先级,越大越优;(默认为1)
                interface Ethernet0/0/0
                   pim hello-option dr-priority 2      //修改接口DR优先级
                display pim interface                      //查看pim的DR以及DR优先级
        (2)接口ip越大越优

      因此在配置IGMPv1时,最后一跳路由器的接口也需要开启pim;

 2、报告阶段(成员响应阶段)
   (1)被动加组
      组播组成员在收到查询报文后,会产生成员报告报文进行发送;
      成员报告报文
       sip:接收者自己
       dip:自身需要加入的组别
       组播地址:自身需要加入的组别

      最后一条路由器收到成员报告报文后,会在本地生成一张(* G)组播路由表,并且以接收到该成员报告报文的接口作为下游接口,日后收到dip为对应组别的流量就可以从该下游接口发送;

   (2)主动加组
       当新的组播接收者加入网络中,并且不想等待查询周期时,可以选择主动向外发送成员报告报文,最后一条路由器收到后,也会生成组播路由表;

  3、离开阶段
       默默离开;
       当组播接收者,不再需要接收某个组别的流量时,不会做出任何动作,直接离开;
       最后一跳路由器需要等待130s,没有收到对应组别的成员报告报文,才会删除对应表项,停止发送对应组别的流量;


IGMPv1的缺陷


  1、没有自身的查询选举机制,需要依靠pim的DR帮忙查询;
  2、当网段内存在多台同组的组播接收者时,均会发送成员报告报文,但最后一跳路由器为一个组播组只会生成一张表,因此会浪费链路资源;
  3、无离开机制,当某个组别的成员全部离开时,会导致在超时时间内,最后一跳路由器依然发送改组别的流量造成链路资源的浪费;

IGMPv2对v1的改进

IGMPv2对v1的改进
 1、查询阶段
       新增了查询器的概念,如果存在多台最后一跳路由器时,会进行查询器的选举,查询器负责发送普遍组查询报文,用于查找网段内的组播接收者;
       选举规则:接口ip,越小越优;
       普遍组查询报文
        sip 最后一跳路由器的接口ip
        dip 224.0.0.1(网段内的所有设备均可接收)
        组播地址 0.0.0.0
      接口下:igmp timer query 20                   //修改查询周期


 2、报告阶段
      (1)新增响应抑制机制
        机制原理:组播组成员收到普遍组查询报文后,会随机在本地生成一个0.0~10.0s计时器,在计时结束后才会发送成员报告报文,如果在计时结束之前,收到同组的成员报告报文则停止发送成员报告报文;
       成员报告报文
        sip:接收者自己
        dip:自身需要加入的组别
        组播地址:自身需要加入的组别

      (2)可以调整最大响应时间,最多调整成25.0s
                接口下: 
                    igmp max-response-time 20     //修改最大响应时间为20.0s

      (3)last reporter(最后一个通告者)
                定义:每一个组别都会有一个;
                          指某个组别中最新收到的成员报告报文的发送者;
                作用:最后一跳路由器通过last reporter确保某个组播组中存在接收者;

3离开阶段

 新增离开报文;
       当一台组播接收者需要离开某个组别时,会发送离开报文;
       离开报文:
         sip:组播接收者自己
         dip:需要离开的组别
         组播地址:需要离开的组别
       当查询器收到离开报文后,会判断该离开报文的发送者是否为该组别的last reporter,如果不是,则不做任何操作;如果是则针对离开的组别发送特定组查询报文,用于探测该组别是否还有别的接收者;
       特定组查询报文:
         sip:查询器的接口ip;
         dip:需要查询的组别;
         组播地址:需要查询的组别;
       最多连续发送两次,每次的最大响应时间为1s;
       如果2s内收到成员报告报文回应,说明,该组别仍然存在组播接收者,则保留对应的组播路由表,并且将最新一份收到的成员报告报文的发送者,记录为该组别的last reporter;
       如果2s内没有收到成员报告报文回应,说明,该组别没有其他接收者,则删除对应组别的组播路由表;

IGMPv3对v2的改进


1、工作于SSM模型,组播接收端可以指定接收来自哪些源的流量;
2、查询阶段跟v2完全一致;
3、组播组成员可以加入多个组播组;
4、最后一跳路由器收到成员报告报文后,直接生成(s g)组播路由表,只有收到sip匹配s,dip匹配g的组播流量才会往下发;
5、成员报告报文改进:
     (1)dip变为224.0.0.22
     (2)六种模式:include、exclude、change to include、change to exclude、alllow new source、block old source;
     (3)其中正常加入某个组播组别,使用include模式发送;
     (4)通过change to exclude模式的成员报告报文,指定自身无需接收的流量;
     (5)通过change to include模式的成员报告报文,进行退出某个组播组别,其中组播源指定为0.0.0.0;(取消了离开报文)

6、取消响应抑制机制,组播组成员收到加入同组的成员报告报文,也会正常发送,防止同组不同源的接收者,相互抑制;
7、新增了特定源组查询,当接收者不再接收来自某个源的某个组别的流量时,查询器会触发特定源组查询,去判断是否还有对应流量的接收者;

v3配置:
interface GigabitEthernet0/0/0
 pim sm                           //igmpv3一定要使用pim sm
 igmp enable
 igmp version 3

IGMP兼容:
  V1/V2:最终会以V1的方式工作;
  V1/V2以及V3:接收端为V3,路由器端为V1/V2时,无法兼容,其余情况均能兼容;

IGMP SNOOPING

作用:
    解决因为交换机泛洪业务组播流所带来的问题:
      (1)组播流量的有偿性、安全性得不到保障;
      (2)浪费链路资源;
      (3)当出现两个组播组ip,映射出同一mac地址时,会出现接收者误拆包的问题,浪费设备开销;
 原理:交换机通过监听IGMP报文,在本地构建一张组播流量转发表,实现组播流量的按需转发;
 应用:应用于最后一跳路由器以及组播接收者之间的交换机上;

 端口角色:
  (1)路由器端口
           用于连接路由器,当接口收到igmp查询报文以及pim的hello报文时,接口变为路由器端口;
  (2)成员端口
           用于连接组播接收者,当接口收到成员报告报文时,对应接口会被列为对应组播组别的成员端口;

 工作过程:
  1、查询阶段
       当交换机收到普遍组查询报文,会把收到的接口设置为路由器端口,并且将该报文在同vlan内进行泛洪;

  2、报告阶段
       当交换机收到成员报告报文时,会根据该报文所加入的组播组,在本地生成(* g)组播流量转发表,并且将收到该报文的接口,记录为该组别的成员接口,并且从同vlan的路由器端口发送出去;
      (报告阶段不会有响应抑制机制,避免交换机无法接收到同一组播组所有接收者的成员报告报文,导致无法生成完成的成员接口)
       如果交换机收到的成员报告报文中的组别,已经在自身的组播流量转发表中存在,则直接添加成员接口即可;
  
       组播流量转发表生成完成后,从路由器端口收到的组播流量会查表,从特定的成员端口发送出去;

  3、离开阶段
       当交换机收到离开报文后,将该报文,直接从同vlan的路由器端口发送出去,同时将收到该离开报文的接口的老化时间设为2s,如果2s内没有从该接口收到成员报告报文,则从成员接口列表中删除该接口;
       
       当交换机收到特定组查询报文后,会将对应组别的所有成员端口的老化时间设置为2s,如果没有在2s内收到成员报告报文,则进行删表操作,如果有收到成员报告报文,则保留收到报文的成员接口,其余删除;

       如果一个接口130s内没有收到成员报告报文,则从成员接口列表中,删除该接口;

  缺陷:取消了响应抑制机制,增大了路由器的负担;
            

配置:
[S1]multicast routing-enable     //全局下开启组播功能
      igmp-snooping enable        //全局下开启igmp snooping
      vlan 1                                 
         igmp-snooping enable     //进入特定vlan开启igmp snooping,如果没有划分则进入vlan 1;

  display igmp-snooping router-port vlan 1         //查看路由器端口
  display igmp-snooping port-info                       //查看交换机的组播流量转发表
   **模拟器上,配置了igmp snooping后,igmp中路由器与组播接收者之间的报文交互会失效,无法工作;

相关文章:

华为数通HCIP-IGMP(网络组管理协议)

IGMP(网络组管理协议) 作用:维护、管理最后一跳路由器以及组播接收者之间的关系; 应用:最后一跳路由器以及组播接收者之间; 原理:当组播接收者需要接收某个组别的流量时,会向最后…...

价格管控有哪些有效的方法

品牌在面对线上店铺的低价、窜货时,需要及时进行干预治理,否则低价效应会蔓延,会有越来越多的店铺跟价,导致渠道更加混乱,但是管控价格也非一时之事,需要品牌按流程治理。 力维网络有多年价格管控经验&…...

【Docker】Docker相关基础命令

目录 一、Docker服务相关命令 1、启动docker服务 2、停止docker服务 3、重启docker服务 4、查看docker服务状态 5、开机自启动docker服务 二、Images镜像相关命令 1、查看镜像 2、拉取镜像 3、搜索镜像 4、删除镜像 三、Container容器相关命令 1、创建容器 2、查…...

掌握Python的X篇_16_list的切片、len和in操作

接上篇掌握Python的X篇_15_list容器的基本使用,本篇进行进一步的介绍。 文章目录 1. list的索引下标可以是负数2. 切片(slice)2.1 切片基础知识2.2 如何“取到尽头”2.3 按照步长取元素2.4 逆序取值 3. len函数获取lis的元素个数4. in操作符…...

给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin

给定长度值length&#xff0c;把列表切分成每段长度为length的N段列表&#xff0c;Kotlin import kotlin.random.Randomfun main(args: Array<String>) {var source mutableListOf<String>()val end Random.nextInt(30) 1for (i in 0 until end) {source.add(i.…...

leetcode每日一题Day2——344. 反转字符串

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …...

ISP记1

噪声分类 空间区域 分布模型分类&#xff1a;Gaussian噪声、瑞利噪声、泊松噪声、乘性噪声、脉冲噪声、均匀分布噪声 频域谱波形分类&#xff1a;均匀分布噪声、白噪声&#xff08;噪声的功率谱为参数&#xff0c;且与图像线性无关&#xff09;1/f噪声、a f 2 f^{2} f2噪声&a…...

无线蓝牙耳机有什么值得耳机买的?几款值得买的口碑品牌盘点

蓝牙耳机是一种无线耳机&#xff0c;其通过蓝牙技术与其他设备进行连接&#xff0c;例如手机、电脑、平板电脑等。蓝牙耳机使得用户可以在不受线缆限制的情况下享受音频体验&#xff0c;而且还可以方便地进行通话&#xff0c;目前市场上有许多不同种类和品牌的蓝牙耳机&#xf…...

异步检索在 Elasticsearch 中的理论与实践

异步检索在 Elasticsearch 中的理论与实践 https://www.elastic.co/guide/en/elasticsearch/reference/8.1/async-search.html#submit-async-search 引言 Elasticsearch 是一种强大的分布式搜索和分析引擎&#xff0c;它能够快速地存储、搜索和分析大量数据。在处理大规模数据时…...

了解Unity编辑器之组件篇Physics 2D(十二)

一、Area Effector 2D区域施加力&#xff09;&#xff1a;用于控制区域施加力的行为 Use Collider Mask&#xff08;使用碰撞器遮罩&#xff09;&#xff1a;启用后&#xff0c;区域施加力仅会作用于特定的碰撞器。可以使用Collider Mask属性选择要作用的碰撞器。 Collider Ma…...

[Pytorch]手写数字识别——真·手写!

Github网址&#xff1a;https://github.com/diaoquesang/pytorchTutorials/tree/main 本教程创建于2023/7/31&#xff0c;几乎所有代码都有对应的注释&#xff0c;帮助初学者理解dataset、dataloader、transform的封装&#xff0c;初步体验调参的过程&#xff0c;初步掌握openc…...

android studio 找不到符号类 Canvas 或者 错误: 程序包java.awt不存在

android studio开发提示 解决办法是&#xff1a; import android.graphics.Canvas; import android.graphics.Color; 而不是 //import java.awt.Canvas; //import java.awt.Color;...

AWS——02篇(AWS之服务存储EFS在Amazon EC2上的挂载——针对EC2进行托管文件存储)

AWS——02篇&#xff08;AWS之服务存储EFS在Amazon EC2上的挂载——针对EC2进行托管文件存储&#xff09; 1. 前言2. 关于Amazon EFS2.1 Amazon EFS全称2.2 什么是Amazon EFS2.3 优点和功能2.4 参考官网 3. 创建文件系统3.1 创建 EC2 实例3.2 创建文件系统 4. 在Linux实例上挂载…...

FFmpeg 打包mediacodec 编码帧 MPEGTS

在Android平台上合成视频一般使用MediaCodec进行硬编码&#xff0c;使用MediaMuxer进行封装&#xff0c;但是因为MediaMuxer支持格式有限&#xff0c;一般会采用ffmpeg封装&#xff0c;比如监控一般使用mpeg2ts格式而非MP4,这是因为两者对帧时pts等信息封装差异导致应用场景不同…...

软件测试如何推进项目进度?

在软件研发中&#xff0c;有一种思想叫TDD&#xff0c;即测试驱动开发&#xff0c;TDD是敏捷方法中的一项核心实践&#xff0c;其原理是在开发功能代码之前&#xff0c;先编写单元测试用例代码&#xff0c;对要编写的函数或类明确测试方法后&#xff0c;再进行设计与编码。 本…...

首次尝试鸿蒙开发!

今天是我第一次尝试鸿蒙开发&#xff0c;是因为身边的学长有搞这个的&#xff0c;而我也觉得我也该拓宽一下技术栈&#xff01; 首先配置环境&#xff0c;唉~真的是非常心累&#xff0c;下载一个DevEco Studio 3.0.0.993&#xff0c;然后配置环境变量这些操作不用多说&#xff…...

前端面试题-react

1 React 中 keys 的作⽤是什么&#xff1f; Keys 是 React ⽤于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识在开发过程中&#xff0c;我们需要保证某个元素的 key 在其同级元素中具有唯⼀性。在 React Diff 算法中 React 会借助元素的 Key 值来判断该元素是新近创建…...

EIP-2535 Diamond standard 实用工具分享

前段时间工作对接到了这标准的协议&#xff0c;于是简单介绍下这个标准分享下方便前端er使用的调用工具 一、标准的诞生 在写复杂逻辑的solidity智能合约时&#xff0c;经常会碰到两个问题&#xff0c;升级和合约大小限制。 升级目前有几种proxy模式&#xff0c;通过delegateca…...

【LangChain】向量存储(Vector stores)

LangChain学习文档 【LangChain】向量存储(Vector stores)【LangChain】向量存储之FAISS 概要 存储和搜索非结构化数据的最常见方法之一是嵌入它并存储生成的嵌入向量&#xff0c;然后在查询时嵌入非结构化查询并检索与嵌入查询“最相似”的嵌入向量。向量存储负责存储嵌入数…...

Debian/Ubuntu 安装 Chrome 和 Chrome Driver 并使用 selenium 自动化测试

截至目前&#xff0c;Chrome 仍是最好用的浏览器&#xff0c;没有之一。Chrome 不仅是日常使用的利器&#xff0c;通过 Chrome Driver 驱动和 selenium 等工具包&#xff0c;在执行自动任务中也是一绝。相信大家对 selenium 在 Windows 的配置使用已经有所了解了&#xff0c;下…...

Carla仿真实战:3种高效定位车辆生成点的方法(附代码示例)

Carla仿真实战&#xff1a;3种高效定位车辆生成点的方法&#xff08;附代码示例&#xff09; 在自动驾驶仿真开发中&#xff0c;精确控制车辆生成位置是构建测试场景的基础需求。许多开发者在使用Carla时都遇到过车辆"乱跑"的问题——明明指定了坐标&#xff0c;生成…...

别再只盯着ONNX了!用PNNX把PyTorch模型轻松转成ncnn格式(安卓部署实战)

深度学习模型安卓部署实战&#xff1a;PNNX与ONNX转换工具深度对比 在移动端部署深度学习模型时&#xff0c;模型转换环节往往是开发者遇到的第一个技术瓶颈。许多团队习惯性地选择ONNX作为中间格式&#xff0c;却忽视了更高效的替代方案。本文将带您深入探索PNNX这一专为PyTor…...

F3D:为什么这款极简3D查看器能让你彻底告别传统软件的臃肿?

F3D&#xff1a;为什么这款极简3D查看器能让你彻底告别传统软件的臃肿&#xff1f; 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 在3D设计、工程可视化和科研数据分析的日常工作中&#xff0c;你是否曾因…...

eMMC5.1协议详解:从CMD0到CSD寄存器,手把手教你读懂关键命令

eMMC5.1协议深度解析&#xff1a;关键命令与寄存器实战指南 在嵌入式存储领域&#xff0c;eMMC5.1协议作为主流存储解决方案的核心规范&#xff0c;其命令集与寄存器操作直接决定了设备性能与稳定性。本文将聚焦协议中最关键的CMD命令序列与CSD寄存器结构&#xff0c;通过实际示…...

如何用纯C语言征服LeetCode:从零开始的算法学习之旅

如何用纯C语言征服LeetCode&#xff1a;从零开始的算法学习之旅 【免费下载链接】leetcode LeetCode in pure C 项目地址: https://gitcode.com/gh_mirrors/leetcode5/leetcode LeetCode算法题是程序员提升编程能力的重要途径&#xff0c;而使用纯C语言来解决这些问题不…...

C# rtwpriv Wi-Fi定频工具

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、使用简介&#xff0c;说明#前言 对于无线产品&#xff0c;很多需要做CE,FCC,SRRC等认证&#xff0c;需要测试RF&#xff0c;像Realtek方案的Wi-Fi用到rtwpriv工具…...

用Python和C语言两种解法,搞定ZZULIOJ 1091‘爬楼梯’问题(附多实例测试详解)

用Python和C语言两种解法&#xff0c;搞定ZZULIOJ 1091‘爬楼梯’问题&#xff08;附多实例测试详解&#xff09; 当你第一次看到这个题目时&#xff0c;可能会觉得它只是一个简单的递归问题。但深入思考后会发现&#xff0c;这实际上是动态规划的经典案例——斐波那契数列的变…...

Phi-3-mini-4k-instruct与Vue3前端框架集成实战

Phi-3-mini-4k-instruct与Vue3前端框架集成实战 1. 引言 前端开发正在经历一场智能化变革&#xff0c;传统的静态页面已经无法满足用户对个性化、智能化交互的需求。想象一下&#xff0c;如果你的Vue3应用能够理解用户意图、自动生成内容、提供智能建议&#xff0c;那会是怎样…...

两行代码实现全自动网页翻译:translate.js 终极指南

两行代码实现全自动网页翻译&#xff1a;translate.js 终极指南 【免费下载链接】translate Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly! 项目地址: https://gitcode.com/…...

OpenClaw+nanobot日程管理:自然语言输入转日历事件

OpenClawnanobot日程管理&#xff1a;自然语言输入转日历事件 1. 为什么需要自然语言日程管理 作为一个经常被各种会议和截止日期追着跑的技术从业者&#xff0c;我一直在寻找更高效的日程管理方式。传统的日历应用需要手动填写时间、地点、标题等字段&#xff0c;操作繁琐且…...