IVL&SVL知识

 
IVL(independent vlan learning)网 上大部分资料都说为每个vlan建一个表,看起来好像有很多表,其实这里所说的表是指逻辑上的表,实际上在交换机中还是只有一个表,如果将VID相同的记 录都提取出来组成一个表,那么就一个物理上的表在逻辑上就可以认为是多个表了。

IVL(independent vlan learning):

在MAC表中以MAC+VID为主键进行储存。这样,同一个MAC就可能由于VID的不同而在MAC表中存在多条记录。

1.根据MAC+VID在MAC表中寻找,找不到转3

2.向找到的port转发packet,end.

3.向packet携带的vid对应的整个VLAN的port转发,end.

 

SVL(shared valn learning):

在MAC表中以MAC为主键进行储存,也就是说同一个MAC在SVL方式下只能存在一个记录在MAC表中。

1.在MAC中先根据MAC寻找相应的记录,找不到转4

2.记录中的VID与packet中携带的VID一样,得到相应的port;不一样转5

3.将packet转发到相应的port,end.

4.向packet携带的vid对应的整个VLAN的port转发,end.

5.drop,end.

MAC表中主要的参数:
MAC    VID    PORT


1、IVL模式是独享式的MAC地址学习模式,各个VLAN内学习到的MAC地址为各个VLAN所有,不会共享给 其他VLAN。我司多数交换机为这种MAC学习模式。
SVL模式是共享式MAC地址学习模式,某一个VLAN学习到的MAC会被其他所有VLAN共享使用,我司3026系列交换机,2050系列交换机支持这 种MAC学习模式。
2、转发流程角度
a、对于支持IVL的交换机,转发流程分以下几步
根据帧内Tag Header的VLAN ID查找L2FDB表,确定查找的范围;
根据目的MAC查找出端口,图中应该从端口2转发出去;
如果在L2FDB表中查找不到该目的MAC,则该报文将通过广播的方式在该VLAN内所有端口转发;
同时该以太网帧的源MAC将被学习到接收到报文的端口上,即端口1(VLAN 2);
L2FDB表中的MAC地址通过老化机制更新;
在转发的过程中,不会对帧的内容进行修改;
b、对于支持SVL的交换机,转发流程分以下几步
根据帧的目的MAC查MAC转发表(即L2FDB),查找相应的出端口。根据现有L2FDB表,报文应该从端口2发送出去;
判断出端口的VLAN ID和报文Tag Header内的VLAN ID是否匹配,匹配则转发,不匹配则丢弃;
如果在L2FDB表中查找不到该目的MAC,则判断出端口的VLAN ID和报文Tag Header内的VLAN ID是否匹配,不匹配直接丢弃;匹配则在该VLAN内广播;
L2FDB表中MAC地址通过老化机制来更新;
在转发的过程中,不会对帧的内容进行修改

### IVL 和 SVL 的定义 在虚拟局域网 (VLAN) 技术中,存在两种主要的 MAC 地址学习模式:独立 VLAN 学习 (IVL, Independent VLAN Learning) 和共享 VLAN 学习 (SVL, Shared VLAN Learning)[^1]。 #### 独立 VLAN 学习 (IVL) IVL 是一种独享式的 MAC 地址学习机制,在这种模式下,每个 VLAN 都拥有自己独立的 MAC 地址表。这意味着当某个 VLAN 内部的学习到了一个新的 MAC 地址时,这个地址仅限于该特定 VLAN 使用,并不会被其他 VLAN 所知晓或访问[^2]。 对于采用 IVL 方式的二层交换机而言,其转发流程相对简单明了,因为各 VLAN 间相互隔离,不存在跨 VLAN 的数据冲突风险。因此,在现代企业级网络部署场景里,大多数情况下会选择使用基于 IVL 设计的产品来构建内部通信环境[^3]。 ```python def ivl_mac_learning(vlan_id, mac_address): """ Simulate the process of learning a new MAC address under IVL mode. Args: vlan_id (int): The ID number associated with this VLAN. mac_address (str): A string representing the hardware address to be learned. Returns: dict: Updated dictionary containing only entries specific to given VLAN. """ # Initialize an empty dictionary for storing MAC addresses per-VLAN basis mac_table = {} # Add or update entry corresponding to specified VLAN and MAC combination if vlan_id not in mac_table: mac_table[vlan_id] = [] mac_table[vlan_id].append(mac_address) return {vlan_id: list(set(mac_table.get(vlan_id)))} ``` #### 共享 VLAN 学习 (SVL) 相比之下,SVL 则采取了一种更为开放的态度对待 MAC 地址管理——即允许所有 VLAN 访问同一个全局性的 MAC 表单。这样一来,只要任意一个 VLAN 成功记录下一个新的物理地址,则整个系统内的每一个 VLAN 均可立即获得此信息并加以利用[^4]。 然而值得注意的是,尽管这种方法提高了资源利用率,但也带来了潜在的安全隐患和技术挑战。例如,如果多个不同的 VLAN 中出现了重复使用的硬件地址情况,那么就可能导致严重的路由错误和服务中断现象发生。 ```python def svl_mac_learning(global_mac_table, mac_address): """ Demonstrate how a global MAC table is updated across all VLANs using SVL method Args: global_mac_table (list): List holding globally accessible MAC addresses. mac_address (str): String representation of newly discovered device's physical address. Returns: set: Unique collection of known devices' identifiers available system-wide. """ # Append new discovery into centralized storage structure without duplicates global_mac_table.append(mac_address) return set(global_mac_table) ``` 综上所述,虽然两者都属于有效的解决方案之一,但在实际应用场景的选择上往往取决于具体需求考量因素如安全性、性能优化等方面的要求差异而定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值