IVL和SVL

本文对比分析了SVL(共享VLAN学习)和IVL(独立VLAN学习)两种二层交换机的工作原理、转发流程及实际应用,指出SVL在MAC地址冲突和VLAN通信干扰上的局限性,并阐述IVL如何解决这些问题,最终说明在现代网络环境中IVL更优的应用价值。

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

SVL方式的二层交换机

SVL(Shared VLAN Learning)方式的二层交换机在学习MAC地址并建立MAC地址表的过程中并不附加VLAN ID,或者说它的MAC地址表是为所有VLAN共享使用的。它的二层转发基本流程如下:

(1)      根据接收到的以太网帧的源MAC信息添加或刷新MAC地址表项;

(2)      根据目的MAC信息查找MAC地址表,如果没有找到匹配项,那么在报文对应的VLAN内广播;

(3)      如果找到匹配项,但是表项对应的端口并不属于报文对应的VLAN,那么丢弃该帧;

(4)      如果找到匹配项,且表项对应的端口属于报文对应的VLAN,那么将报文转发到该端口,但是如果表项对应端口与收到以太网帧的端口相同,则丢弃该帧。

这种类型的二层交换机转发与普通二层交换机转发基本相同,只是多了转发过程中的VLAN检查。这样的交换机可能遇到下述问题:位于不同VLAN的主机(或网络设备)具有相同的MAC地址,由于SVL交换机所有VLAN共享一个MAC表,这样对应的MAC表项中端口就会不断的变化,而且两个VLAN的报文转发也会受到影响,这种情况如图7所示。

图7中,VLAN 10的PC A发送给PC B的报文由于MAC地址表查找结果与VLAN不符而被丢弃了;同理,当MAC B学习到PORT 2时,VLAN 20的PC D和PC C之间的通信就会出现问题。这样,虽然不同的主机被隔离在了不同的冲突域和广播域中,但是MAC地址却可能导致不同VLAN的通信相互影响。

在实际应用中,SVL方式的二层交换机已经比较少见了。

 IVL方式的二层交换机

IVL(Independent VLAN Learning)方式的交换机在学习MAC地址并建立MAC地址表的过程中同时附加VLAN ID,同一个MAC地址可以出现在不同的VLAN中,这样的方式也可以理解为每个VLAN都有自己独立的MAC地址表。它的二层转发基本流程如下:

(1)      根据接收到的以太网帧的源MAC+VLAN-ID信息添加或刷新MAC地址表项;

(2)      根据目的MAC+VLAN-ID查找MAC地址表项,如果没有找到匹配项,那么在VLAN-ID对应的VLAN内广播;

(3)      如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的端口相同,则丢弃该帧。

SVL方式交换机上可能遇到的转发问题,在IVL交换机中得以解决,如图8所示。

IVL方式的二层交换机转发流程更加清晰,VLAN之间不会互相影响,目前实际应用中的二层交换机大多采用这种方式。

----------------------------------------------------------------------

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地址通过老化机制来更新;
在转发的过程中,不会对帧的内容进行修改。


### 链式线性表的实验内容 链式线性表是一种通过指针连接节点数据结构,其核心在于动态分配内存并建立节点之间的逻辑关系。以下是关于链式线性表的一些常见实验内容: #### 单链表的基本操作 单链表是最简单的链式线性表形式,其实现通常包括以下功能[^2]: 1. **创建单链表**: 可以按照逆位序(从表头插入)或正位序(从表尾插入)的方式构建链表。 2. **遍历链表**: 输出链表中的所有元素。 3. **查找节点**: 给定一个关键字,在链表中找到对应的节点位置。 4. **插入节点**: 在指定位置前/后插入新节点。 5. **删除节点**: 删除指定位置上的节点或者具有特定值的节点。 这些基本操作构成了学习链式线性表的基础部分。 ```c++ // 插入节点函数示例 (C++) void insertNode(Node* &head, int value) { Node* newNode = new Node; newNode->data = value; newNode->next = nullptr; if (!head) { // 如果链表为空,则直接设置为头结点 head = newNode; } else { Node* temp = head; while (temp->next != nullptr) { // 找到最后一个节点 temp = temp->next; } temp->next = newNode; // 将新节点附加到末尾 } } ``` --- ### 提升训练建议 为了进一步掌握链式线性表的应用能力,可以尝试完成一些更复杂的题目和项目实践: 1. **双向链表的操作** - 实现双端队列的功能,支持在头部和尾部进行高效的插入与删除操作。 - 编写程序模拟浏览器的历史记录管理器,允许前进和回退页面访问历史。 2. **循环链表的设计** - 构建一个基于循环链表的游戏场景,比如约瑟夫环问题,解决如何安全退出游戏的问题。 3. **复杂数据处理** - 使用链表存储学生信息(姓名、学号、成绩),设计菜单驱动界面实现增删改查等功能。 - 结合文件读取技术,加载外部数据源初始化链表,并保存修改后的状态至磁盘。 4. **性能优化挑战** - 对于大规模数据集下的频繁查询需求,考虑引入哈希映射辅助定位目标节点的位置,从而减少时间开销。 以上提到的各种扩展任务不仅能够加深对理论知识的理解程度,还能培养实际编程技巧以及解决问题的能力[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值