组播 | 不同 VLAN 间数据转发实现逻辑 / 实验

发布于:2025-08-03 ⋅ 阅读:(7) ⋅ 点赞:(0)

注:本文为 “不同 vlan 间组播数据转发” 相关合辑。
图片清晰度受引文原图所限。
略作重排,如有内容异常,请看原文。


组播 VLAN:解决路由器为不同 VLAN 用户复制多份流量问题

aiaiai010101 于 2018-11-16 22:42:06 发布

一、组播 VLAN 与传统二层组播的传输流程对比

1.传统二层组播传输流程

当 VLAN2 和 VLAN3 的用户需要接收相同组播流时,上游路由器 RouterA 的物理接口会被逻辑划分为两个子接口,分别对应 VLAN2 和 VLAN3 两个网段。

由于组播传输遵循 “一个网段一份数据” 的原则,路由器需为每个子接口(即每个 VLAN)单独复制一份组播流,并通过 Trunk 链路发送至交换机 SwitchA。

交换机接收到两份重复的组播流后,再分别向 VLAN2 和 VLAN3 内的用户端口分发。此过程中,路由器与交换机之间的链路承载了两份相同数据,造成带宽浪费,同时路由器的复制操作也增加了其处理负载。

2.组播 VLAN 传输流程

在这里插入图片描述

部署组播 VLAN(如 VLAN4)后,路由器仅需向组播 VLAN 复制一份组播流,通过 Trunk 链路发送至交换机。

交换机作为组播流的分发点,利用组播 VLAN 与用户 VLAN(VLAN2、VLAN3)的绑定关系,在二层完成组播流的跨 VLAN 复制,并分别向 VLAN2 和 VLAN3 内的用户端口转发。

这一流程消除了路由器的重复复制操作,减少了上游链路的带宽占用,同时将组播复制的负载转移至二层交换机,优化了网络整体性能。

二、组播 VLAN 与用户 VLAN 的绑定机制

组播 VLAN 与用户 VLAN 的绑定关系是实现跨 VLAN 组播传输的核心,其核心规则与角色定义如下:

  • 组播 VLAN:作为网络侧接口所属的 VLAN,主要功能是实现组播流的汇聚。其显著特征为 一对多映射,即一个组播 VLAN 可同时绑定多个用户 VLAN,承载多个用户 VLAN 的组播需求。

  • 用户 VLAN:作为用户侧接口所属的 VLAN,用于接收来自组播 VLAN 的组播数据。其显著特征为 唯一性约束,即每个用户 VLAN 只能隶属于一个组播 VLAN,以此确保组播流来源唯一,避免数据冲突或重复接收。

这种绑定机制呈现 “逻辑嵌套” 结构:组播 VLAN 作为上层容器,负责从路由器接收组播流并进行集中管理;用户 VLAN 作为下层成员,通过绑定关系获取组播流,既实现了组播数据在不同 VLAN 间的高效分发,又保持了各 VLAN 的独立性和安全性。这一逻辑本质上类似于通过将物理接口划分为多个子接口,在逻辑层面实现组播数据的优化传输。

三、组播 VLAN 的应用价值

组播 VLAN 技术的引入,主要解决了传统组播在多 VLAN 场景下的两大痛点:

1.带宽优化:减少上游链路中重复组播流的传输,提升链路利用率。

2.设备减负:将组播复制的任务从路由器转移至二层交换机,降低核心路由设备的负载,增强网络稳定性。

该技术尤其适用于 IPTV、视频会议等需要跨 VLAN 传输大量相同组播数据的场景,能够显著提升网络的传输效率和可扩展性。


交换机路由器:不同 VLAN 间转发组播数据

o( ̄︶ ̄)o__小肉松 已于 2022-05-18 09:41:58 修改

1. 实验需求

现有一台处于 VLAN 10 的服务器,其能输出两组不同的组播数据,分别为 S1 和 S2。组播数据 S1 的接收者分布在 VLAN 20 和 VLAN 30,组播数据 S2 的接收者分布在 VLAN 20 和 VLAN 40。现仅有一台不支持组播路由协议 PIM 和 IGMP 的交换机,如何使得处于不同 VLAN 的接收者收到其所需要的组播数据?

在这里插入图片描述

2. 配置思路

正常情况下,由于交换机的 MAC 表中不存在目的 IP 地址为组播地址的项,因此组播报文将在该网段内进行广播(泛洪),使得处于同一 VLAN 的用户都能收到该组播报文。

针对处于 VLAN 10 的组播数据 S1,要使处于另一网段 VLAN 20 和 VLAN 30 的接收者收到组播数据,只需将 VLAN 20 和 VLAN 30 设置为允许带有标签 vlan_id=10 的报文通过,即可实现将组播数据 S1 和 S2 发送到 VLAN 20 和 VLAN 30。由于 VLAN 30 不需要 S2,故在 VLAN 20 中配置 ACL 禁止 S2 即可。对于组播数据 S2,VLAN 20 和 VLAN 40 的配置原理相同。

FAQ:

  1. 不可以针对组播数据 S1 的目的 IP 地址配置静态路由吗?针对一个目的 IP 地址,只能设置一个下一跳。现在需要将 S1 转发到 VLAN 20 和 VLAN 30,存在两个下一跳,但 S1 的数据只有一份,因此配置静态路由无法实现。
  2. 不可以使用策略路由捕获组播数据,然后重定向到 VLANIF20 或 VLAN30IF 吗?与静态路由的方法同理,由于 S1 的数据只有一份,但存在两个下一跳,因此策略路由也无法实现。

3. 具体配置

实验环境

  1. 一台能发送组播报文的 PC 机(模拟服务器),其能发出组播数据 S1(目的 IP = 224.3.29.71)、组播数据 S2(目的 IP = 224.3.29.72)。
  2. 一台 H3C 交换机,型号为 S5130-EI
  3. 一台 PC 机,其能接入不同 VLAN 中,开启抓包软件 Wireshark 验证是否收到组播数据。

H3C 交换机具体配置

# 创建本地账号‘admin’
local user admin
 password simple admin123
 service-type telnet
 authorization-attribute user-role network-admin # 设置用户权限,network-admin 为最高权限

# 开启远程终端 0 - 4 号,允许其能使用账号‘admin’使用 telnet 服务
user-interface vty 0 4
 authentication-mode scheme # 远程用户密码与本地用户一致
 user-role network-admin # 设置用户权限,network-admin 为最高权限
 protocol inbound telnet # 配置 vty 支持 telnet 协议

# 创建 VLAN 10、VLAN 20、VLAN 30 和 VLAN 40
vlan 10
 quit
vlan 20
 quit
vlan 30
 quit
vlan 40
 quit

# 配置 VLAN 的网关
interface Vlan-interface1 # 配置交换机管理流量网段的网关
 ip address 172.168.141.254 255.255.255.0
interface Vlan-interface10 # 配置 192.168.10.0/24 网段的网关
 ip address 192.168.10.1 255.255.255.0
interface Vlan-interface20 # 配置 192.168.20.0/24 网段的网关
 ip address 192.168.20.1 255.255.255.0
interface Vlan-interface30 # 配置 192.168.30.0/24 网段的网关
 ip address 192.168.30.1 255.255.255.0
interface Vlan-interface40 # 配置 192.168.40.0/24 网段的网关
 ip address 192.168.40.1 255.255.255.0

# 创建 ACL,仅允许组播组‘224.3.29.71 255.255.255.255’、ICMP 报文通过
acl advanced 3000
 rule 5 permit ip destination 224.3.29.71 0
 rule 10 permit icmp
 rule 15 deny ip

# 创建 ACL,仅允许组播组‘224.3.29.72 255.255.255.255’、ICMP 报文通过
acl advanced 3001
 rule 5 permit ip destination 224.3.29.72 0
 rule 10 permit icmp
 rule 15 deny ip

# 创建 ACL,仅允许组播组‘224.3.29.71 255.255.255.255’、‘224.3.29.72 255.255.255.255’、ICMP 报文通过
acl advanced 3002
 rule 5 permit ip destination 224.3.29.71 0
 rule 10 permit ip destination 224.3.29.72 0
 rule 15 permit icmp
 rule 20 deny ip

# 批量配置端口,设置其为 VLAN 20 的接口,并允许 VLAN 10 的报文穿越
interface range GigabitEthernet 1/0/9 to GigabitEthernet 1/0/10
 port link-type hybrid
 undo port hybrid vlan 1
 port hybrid vlan 10 20 untagged # 允许 VLAN 20、VLAN 10 报文通过并摘掉其 VLAN 标签
 port hybrid pvid vlan 20 # 设置接口属于 VLAN 20 网段
 packet-filter 3002 outbound # 配置 ACL 3002 于接口发出方向,仅允许特定组播报文、ICMP 报文通过

# 批量配置端口,设置其为 VLAN 30 的接口,并允许 VLAN 10 的报文穿越
interface range GigabitEthernet 1/0/11 to GigabitEthernet 1/0/12
 port link-type hybrid
 undo port hybrid vlan 1
 port hybrid vlan 10 30 untagged
 port hybrid pvid vlan 30
 packet-filter 3000 outbound

# 批量配置端口,设置其为 VLAN 40 的接口,并允许 VLAN 10 的报文穿越
interface range GigabitEthernet 1/0/13 to GigabitEthernet 1/0/14
 port link-type hybrid
 undo port hybrid vlan 1
 port hybrid vlan 10 40 untagged
 port hybrid pvid vlan 40
 packet-filter 3001 outbound

发送组播报文的 Python 代码

import socket
import struct
import time

# 创建一个套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
adapter_ip = "192.168.10.200"  # 网卡 IP
sock.bind((adapter_ip, 0))

multicast_group = ('224.3.29.71', 10000)  # 组播报文目的地址
sock.settimeout(10)

ttl = struct.pack('b', 10)  # 本博主数据结构与算法第 10 篇对 struct 二进制结构体进行介绍
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)

try:
    i = 0
    while True:
        msg = str(i) + ", src=" + str(sock.getsockname()) + ", multicast_group=" + str(multicast_group)
        sent = sock.sendto(msg.encode('UTF-8'), multicast_group)
        print("已发送消息:" + msg)
        i += 1
        time.sleep(2)
finally:
    sock.close()

via: