IGMP Snooping和组播VLAN技术原理-程序员宅基地

技术标签: IGMP  IGMP snooping  组播VLAN  HCIE R&S学习笔记  

IGMP Snooping:

诞生原因:
由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以这个过程它并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在以前学习的MAC地址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送接收到的组播报文,这样一来不但会造成带宽的极大浪费,而且影响网络安全。注意:对应224.xxx.xxx.xxx的报文时都直接回泛洪,因为只是协议报文。

IGMP Snooping ( Internet Group Management Protocol Snooping)是IPv4环境下,在二层交换机上提供的一种组播机制。通过侦听组播路由器和用户主机之间发送的IGMP协议报文,在交换机上创建二层组播转发表(组播组和该组播接收者的端口对应关系),当交换机转发组播报文时,报文按照交换机组播转发表转发。如果没有对应的组播转发表项,则泛洪到所有端口。否则,仅泛洪到有接收者的端口上去。
在这里插入图片描述
基本概念:
在这里插入图片描述
一、路由器端口:
路由器端口是指朝向组播路由器的端口,数据链路层组播设备从该端口接收组播报文。路由器端口分为如下两类:

  1. 动态路由器端口:能够接收到源地址不为0.0.0.0的IGMP Query(IGMP查询报文)报文或者PIM Hello报文的端口(端口开启了PIM)。动态路由器端口依赖于组播设备与主机之间交互的协议报文,动态维护。每个动态路由器端口启动一个路由器端口老化定时器,定时器超时则该路由器端口失效。
  2. 静态路由端口:用户使用配置命令指定的,不会老化。

二、组播组成员端口:
是指朝向组成员主机的端口,数据链路层组播设备从该端口发出组播报文。组播组成员端口简称为成员端口,分为如下两类:

  1. 动态成员端口:能够接收到IGMP Report(IGMP查询报文)报文的端口。动态成员端口依赖于组播设备与主机之间交互的协议报文,动态维护。每个动态成员端口启动一个成员端口老化定时器,定时器超时则该成员端口失效。
  2. 静态成员端口:用户使用配置命令指定的,不会老化。

出端口信息是二层组播转发表项中的一个重要信息,包括路由器端口和成员端口。总的来说,IGMP snooping将交换机的接口划分了路由器接口和组播组成员端口,并且都分为两种方式,第一种是静态,第二种是动态。

三、动态生成的组播转发表项(4部分内容):
包含路由器端口和组播转发表项,除此之外,每条表项还包括组播组地址和VLAN编号:

  1. 组播组地址:可以为组播IP地址,也可以为组播IP地址映射后的组播MAC地址。按照IP地址转发的模式可以避免MAC地址转发模式中的地址重复问题。
  2. VLAN编号,指定了二层广播域范围。如果使用了组播VLAN功能,入VLAN编号为组播VLAN的编号,出VLAN编号为主机所在的用户VLAN编号。否则入VLAN编号和出VLAN编号均为主机所在VLAN的编号。

运行机制:

  1. 当交换机收到IGMP通用查询报文时,如果收到通用查询报文的端口原来就是路由器端口,以太网交换机就重置该端口的老化定时器;如果收到通用查询报文的端口原来不是路由器端口,则交换机启动对该端口的老化定时器(老化时间为180秒或PIM Hello报文携带的Holdtime值,其中Holdtime缺省为105秒)。

  2. 当以太网交换机收到IGMP报告报文时,首先判断该报文要加入的IP组播组对应的MAC组播组是否已经存在。
    • 如果不存在则新建MAC组播组,并将接收报告报文的端口加入该MAC组播组中,同时启动该端口的老化定时器(健壮系数 × 普遍查询时间间隔 + 最大响应时间),将该端口所属VLAN下存在的所有路由器端口加入到此MAC组播转发表中,而且新建IP组播组,并将接收报告报文的端口加入到IP组播组中。
    • 如果该报文对应的MAC组播组已经存在,但是接收报告报文的端口不在该MAC组播组中,则将接收报告报文的端口加入MAC组播组中并启动该端口的老化定时器,然后判断此报文对应的IP组播组是否存在:如果不存在,则新建IP组播组并把接收报告报文的端口加入到IP组播组中,如果存在则将接收报告报文的端口加入到IP组播组中。
    • 如果该报文对应的MAC组播组已存在,并且接收报告报文的端口也已经存在于该MAC组播组,则仅重置接收报告报文的端口上的老化定时器(也可以理解为刷新)。

  3. 当以太网交换机收到对某IP组播组的离开报文,则会向接收此离开报文的端口发送所离开组的特定组查询报文,以确认此端口相连的主机中还有没有此组播组的其他成员,同时启动一个响应查询定时器(特定组查询消息发送时间间隔 × 健壮系数)。如果在该定时器超时的时候还没有收到该组播组的报告报文,则将该端口从相应MAC组播组中删去。如果MAC组播组没有组播成员端口时,交换机将通知组播路由器将该分支从组播树中删除。

  4. 快速离组机制:当一个交换设备的接口只连接一个设备的时候(access接口),当设备发送了离组报文的时候就会立刻关闭这个接口的相应流量转发,不会发送查询报文。

IGMP Snooping版本:
IGMP协议用于组成员关系管理,运行于三层组播设备和成员主机之间的网段,有v1、v2、v3三个版本(默认是版本2,只能处理IGMP版本1,2的报文,要对IGMPv3报文进行处理,只有配置版本3)。

在二层设备上配置IGMP Snooping版本,设备可以处理相应版本的IGMP报文。一般二层设备上配置和三层组播设备一致的版本。如果三层组播设备没有启用IGMP,则在二层设备上配置和成员主机相同或高于成员主机的版本。

同一VLAN内必须运行同一个版本的IGMP协议。如果VLAN内存在支持不同版本的主机,需要配置IGMP Snooping版本,使设备可以处理所有主机的报文。

华为设备相关配置:

一、快速离开配置:
[R1-vlan10]igmp-snooping prompt-leave //在对应vlan中进行配置,还可以在后面跟相应的策略,只针对对应的组播组进行控制,需要配置ACL进行配合。

二、IGMP snooping配置:
先配置全局,再配置相应的vlan。

  1. 执行命令igmp snooping enable,使能全局IGMP Snooping功能。
  2. 执行命令vlan vlan-id,进入VLAN视图。
  3. 执行命令igmp snooping enable,使能VLAN的IGMP Snooping功能。
    可以在系统视图下使用igmp snooping enable [ vlan { vlan-id1 [ to vlan-id2 ] } &<1-10> ]命令,使能多个VLAN的IGMP Snooping功能。

三、配置对应版本:

  1. 执行命令vlan vlan-id,进入VLAN视图。
  2. 执行命令igmp snooping version version,配置IGMP Snooping可以处理的IGMP版本。

IGMP Snooping proxy:

概念:
配置IGMP Snooping功能后,交换机对上游IGMP查询者的Query报文和下游主机的Report和Leave报文都不修改地转发。当网络中存在大量用户主机时,过量的IGMP报文给上游设备带来处理压力。配置IGMP Snooping Proxy功能后,交换机可以代替组播路由器向下游发送IGMP Query报文给接收者主机,也可以代替大量下游接收者主机向上游路由器发送IGMP Report和IGMP Leave报文,有效节约上游三层设备和本设备之间的带宽。

配置了IGMP Snooping Proxy功能的设备称为IGMP Snooping代理,在其上游设备看来,它就相当于一台主机;在其下游设备看来,它相当于一台查询器。
在这里插入图片描述
运行机制:

  1. IGMP普遍组查询报文:
    交换机向本VLAN内除接收接口以外的所有接口发送IGMP普遍组查询报文;同时根据本地维护的组成员关系生成报告报文,向所有路由器端口发送,不需要再等到主机回复进行转发。

  2. IGMP特定组查询报文/IGMP特定源组查询报文:
    若该组对应的转发表项中还有成员端口,则向所有路由器端口回复该组的报告报文,没有的话就不会做任何回应。这里的话不用告诉下行的设备。

  3. IGMP报告报文:
    •若不存在该组对应的转发表项,则创建转发表项,将接收接口作为动态成员端口添加到出接口列表中,并启动其老化定时器,然后向所有路由器端口发送该组的报告报文;这里因为是新加入的组播组,所以要求必须转发到路由器,路由器才能下放流量。
    •若已存在该组对应的转发表项,且其出接口列表中已包含该动态成员端口,则重置其老化定时器;不需要转发到路由器,因为路由器现在正常下放组播的流量。
    •若已存在该组对应的转发表项,但其出接口列表中不包含该接收接口,则将该接口作为动态成员端口添加到出接口列表中,并启动其老化定时器;这里也不需要转发到路由器,因为流量是已经下发的,只需要多添加下放的接口即可。
    •这里需要注意的是交换机开启了IGMP Snooping的交换机后,下游主机就不会互相抑制了。因为不会进行成员接口的信息的互相转发的。一个交换机组成员接口只会接收一个相同的组成员报告报文,也就是接收最后的报告报文,不同组的报告报文可以同时存在同一个接口。

  4. IGMP离开报文(仅在IGMPv2中存在):向接收接口发送针对该组的特定组查询报文。只有当删除某组播组对应转发表项中的最后一个成员端口时,才会向所有路由器端口发送该组的离开报文。

华为设备配置:

  1. 执行命令vlan vlan-id,进入VLAN视图。
  2. 执行命令igmp snooping proxy,使能IGMP Snooping Proxy功能。

注意:

  1. 如果与VLAN对应的三层VLANIF接口使能了三层组播功能(例如IGMP、PIM),则不能在该VLAN内使能IGMP Snooping Proxy功能。
  2. 在指定VLAN内,可同时配置查询器和报文抑制功能共同完成IGMP Snooping Proxy功能。如果配置了IGMP Snooping Proxy功能,不能再配置查询器或报文抑制功能。

组播VLAN:

概述:
在igmp snooping基础之上配置,目的是解决在trunk链路上对不同VLAN用户复制多份数据占用带宽的问题(只针对组播数据流量而言),trunk接口的路由器方向需要配置为多个子接口。路由器发送查询的报文按正常的vlan进行转发。

对于通用查询报文,会每个VLAN都发送,但是对于其他的被动的发出的查询报文( IGMP特定组查询报文/IGMP特定源组查询报文),会根据对方请求的vlan发送,在交换机上开启了组播vlan,也就是说交换机发送回来的组播信息都通过组播vlan,包括被动查询报文。

例如:上游路由器不必在每个用户VLAN(VLAN2和VLAN3)内都复制一份组播流(查询报文),而是数据流在组播VLAN(VLAN4)内复制一份后发送给二层设备(连接下层的接口PVID只要属于对于的组播VLAN,都会向下层进行发送)。这样就避免了组播流在上游设备的重复复制,不仅节省了网络带宽,又减轻了上游路由器的负担。

具体原因是,路由器接收到的报告报文都来自组播vlan的,所以路由器下放的所有组播流量都通过组播vlan进行下发。

在这里插入图片描述
基本概念:

  1. 组播VLAN:网络侧接口所属VLAN,用于实现组播流的汇聚。一个组播VLAN可以绑定多个用户VLAN。
  2. 用户VLAN:用户侧接口所属VLAN,用于接收组播VLAN的组播数据。一个用户VLAN只能加入一个组播VLAN。

对比普通二层组播:

  1. 如果不同VLAN的用户有相同的组播数据需求时,上游路由器仍然需要发送多份相同报文到不同VLAN中。
  2. 属于不同VLAN(VLAN2和VLAN3)的用户需要接收相同的组播流,上游路由器R1就会把组播数据在每个VLAN内都复制一份然后发送给下游交换机S1。这样,既造成了路由器与二层设备之间带宽的浪费,也增加了路由器额外的负担。

华为设备相关配置:
一、首先配置用户VLAN:

  1. 执行命令igmp snooping enable,使能全局IGMP Snooping功能。
  2. 执行命令vlan vlan-id,创建VLAN并进入VLAN视图。
  3. 执行命令igmp snooping enable,使能VLAN的IGMP Snooping功能。

二、配置用户VLAN绑定到组播VLAN

  1. 执行命令igmp snooping enable,使能全局IGMP Snooping功能。
  2. 执行命令vlan vlan-id,创建VLAN并进入VLAN视图。
  3. 执行命令igmp snooping enable,使能VLAN的IGMP Snooping功能。
  4. 执行命令multicast vlan enable,使能组播VLAN功能,将当前VLAN配置为组播VLAN。
  5. 执行命令multicast vlan user-vlan { vlan-id1 [ to vlan-id2 ] } &<1-10>,配置组播VLAN和用户VLAN的对应关系,将用户VLAN绑定到组播VLAN。

查看命令: 使用命令display multicast vlan mvlan [ vlan-id ],查看组播VLAN的信息。

参考资料:华为hedex文档

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tushanpeipei/article/details/112299685

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签