组播、IGMP、IGMP Snooping

本文详细介绍了组播技术的基本概念,包括组播IP地址范围、IGMP协议的不同版本及其工作原理,探讨了IGMP Snooping的作用及其实现方式,并对比了IGMP V1与V2的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 通过组播,可以实现一个主机同时向组内的多台主机发送数据,节省网络带宽。

组播ip地址范围是224.0.0.0-----239.255.255.255,其中224.0.0.0-----224.0.0.255是有特殊用途的保留地址,239.0.0.0-----239.255.255.255是私网地址,224.0.1.0-----238.255.255.255是用于公网上的组播地址。

 

组播有一系列的协议支持包括:

1、用于主机和路由器之间的IGMP协议。实现主机加入、离开组播组等功能。

2、路由器之间的组播协议有:PIM-SM、PIM-DM。实现嫁接、剪枝等功能。

 

还有一个IGMP Snooping,用在交换机上。开启IGMP Snooping功能的交换机可以对经过它的IMGP报文进行解析,建立组播转发表,这样一来,交换机就可以根据组播转发表转发组播数据。如果没有开启IGMP Snooping功能,交换机只能广播组播数据。IGMP Snooping的实际应用意义是:减少了网络上的主机由于接受到不必要的组播报文而产生的处理负荷。IGMP Snooping并不是一个协议,只能算是一个实现细节,一种应用。

 

IGMP Snooping分两种,一种是passive方式的,另一种是active方式的。passive方式的只解析组播报文,不对报文进行过滤。active方式的会过滤掉一些对路由器没有意义的组播报文。比如交换机下面有两个主机都加入了同一个组,这样交换机上面的路由器中就会有一条表项与之对应。如果一个主机想离开这个组,它就会发送离开报文给路由器(经过交换机转发)。但是此时,即使路由器收到了离开报文,它也并不会删除那条表项,因为还有另一个主机在组播组中。active方式的IGMP Snooping使交换机可以过滤掉此类报文。

 

下面说说IGMP的工作原理:

IGMP目前有三个版本,分别是IGMPV1、IGMPV2、IGMPV3,功能逐渐增强

 

IGMPV1中定义了加入报文、查询报文、响应报文三种报文。

1、当主机加入某组播组时,会向路由器发送加入报文,告诉路由器自己加入了一个组播组,路由器会记录一条组播表项 。

2、查询路由器(IP最小的路由器)会定时从所有端口向外发送查询报文(按VLAN查询,如果该端口加入了多个VLAN,则发送多次查询报文),检查这些端口下是否有主机属于某组播组

3、主机收到查询报文后,如果自己没有加入任何组播组,则不进行响应;如果自己已经加入了某组播组,则会发现响应报文

4、主机离开组播组时,不发送任何报文,悄悄离开;路由器中纪录的该组播的表项会因查询超时而自动老化

5、查询报文的目的地址是224.0.0.1(表示所有路由器和支持IGMP的主机),组地址是0(表示查询所有组播组)

6、响应报文的目的地址是主机所在组的地址,组地址也是主机所在组的地址。如果网络上有多个主机加入了同一个组,那么只有一台主机(随机选取)会发送响应报文。由于响应报文的目的地址是主机所在组的地址,所以响应报文会被发送到主机所在组内的所有主机,其他的主机在收到该报文后,发现已经有人向路由器进行报告了,于是他们就不会再额外发送响应报文了。

 

IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。路由器收到离开报文后,会发送查询报文,查询是否还有其它的主机属于该组播组,如果没有就删除组播表项,有则不删除。

需要注意的是,此时路由器发送的查询报文的组地址已经不是0了,而是特定的组地址(发送离开报文的主机所在的组)。因为此时路由器只想知道该特定组内是否有主机存在。这一点也是IGMPV2对IGMPV1的改进,名称叫特定组查询,IGMPV1中没有该功能。

注意:

1、不论是IGMPV1还是IGMPV2,所有的加入报文和离开报文都要被上报到查询路由器

2、非查询路由器收到查询报文后,从所有端口转发该报文

3、非查询路由器收到特定组查询报文后,根据组播表进行转发

4、特定组查询报文的目的地址是要查询的组地址

5、离开报文的目的地址是224.0.0.2(表示所有路由器)

 

IGMP报文格式:

8位报文类型-8最大响应时间-16位校验和-32位组地址

 

报文类型:

0x11表示查询报文,包括普通查询和特定组查询报文

0x16表示加入报文

0x17表示离开报文

0x12表示IGMPV1查询报文

 

IGMPV3待续。。。

 

 

 

### 关于IGMP Snooping配置的方法教程 #### 配置概述 IGMP Snooping 是一种用于优化局域网中 IP 流量的技术。通过监听主机发送的 IGMP 报文,交换机可以了解哪些端口连接了接收特定流的主机,并仅向这些端口转发相应的数据包[^1]。 #### 基本配置流程 以下是基于典型网络环境下的 IGMP Snooping 的基本配置方法: 1. **启用 IGMP Snooping 功能** 在支持 IGMP Snooping 的二层设备上全局启用该功能。通常可以通过以下命令实现: ```shell igmp-snooping enable ``` 此命令会激活整个设备上的 IGMP Snooping 功能[^2]。 2. **指定 VLAN 上的应用范围** 如果只需要在某些特定 VLAN 中应用 IGMP Snooping,则需单独针对这些 VLAN 进行设置: ```shell vlan <VLAN_ID> igmp-snooping enable ``` 3. **定义静态条目(可选)** 对于一些固定的地址需求,可通过手动添加静态条目的方式来增强控制能力: ```shell igmp-snooping static {group-address | source-group} interface-type interface-number ``` 4. **设定快速离开机制** 启用快速离开特性能够加速移除不再感兴趣的成员关系处理过程,从而减少不必要的带宽消耗: ```shell igmp-snooping fast-leave-enable ``` 5. **关联策略文件(如果适用)** 使用 `group-policy` 来规定如何响应来自客户端的不同类型的请求或者状态变更通知等高级选项: ```shell ip access-list standard GROUP_POLICY_LIST permit host <multicast_group_address> any log igmp snooping group-policy GROUP_POLICY_LIST ``` 以上步骤提供了一个基础框架用来指导完成一次标准的 IGMP Snooping 设置操作;然而实际部署过程中可能还需要考虑更多细节因素比如安全性考量、性能调优等方面的内容。 #### 注意事项 - 确认所使用的硬件平台确实支持所需版本的功能集。 - 测试阶段应密切监控网络行为以验证预期效果并及时调整参数直至达到理想状况为止。 ```python # 示例 Python 脚本展示自动化部分配置项检测逻辑 def check_igmp_snooping_status(device_ip, username, password): import paramiko ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh_client.connect(hostname=device_ip, username=username, password=password) stdin, stdout, stderr = ssh_client.exec_command('show run | include igmp-snooping') output = stdout.read().decode() if 'enable' in output.lower(): return True else: return False finally: ssh_client.close() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值