当前位置: 首页 > news >正文

学习思考:一日三问(学习篇)之匹配VLAN

学习思考:一日三问(学习篇)之匹配VLAN

  • 一、学了什么(是什么)
    • 1.1 理解LAN与"V"的LAN
    • 1.2 理解"V"的LAN怎么还原成LAN
    • 1.3 理解二层交换机眼中的"V"的LAN
  • 二、为何会产生需求(为什么)
    • 2.1 局域网肆意扩张后的"分地运动"
  • 三、有什么用(怎么做)
    • 3.1 理解并灵活使用交换机对标签的处理方式
    • 3.2 用代码逻辑来理解VLAN匹配方式

一、学了什么(是什么)

1.1 理解LAN与"V"的LAN

家用路由器接口总能看到"LAN"的字样,中文翻译过来称为局域网,我们是否可以将家用路由器功能拆分为以下拓扑?
理解LAN
倘若我们直接理解为LAN为交换机直连的链路就好处理了,理解为仅需二层提供通讯,无需三层路由的一块区域,在此区域下可实现广播、组播与无目的MAC的单播帧泛洪区域。

那进一步,我们再理解"V"的LAN就好理解了,V就是虚拟的,理解为逻辑上的,组织一下语言就是“逻辑上的局域网”,意味着这块区域不管长啥样,逻辑上就是个局域网,逻辑上和上面的LAN没啥区别,三个电脑中的一台发广播帧,其余两台都能收到,OK,理论存在,实践开始。

VLAN综合图
上面是个乱七八糟的VLAN分配图,咱们可以按照"V"的LAN的逻辑思维,可以整理成底下这样,"V"的LAN和实际LAN在逻辑上一致,我们这里可以想象各自LAN被路由器隔离广播域,如果需要"V"的LAN间互通,我们按照三层路由逻辑做通就行,假设我们有三层交换机,则每个连接LAN的接口此时改名为"V"的LAN的Interface,简称vlanif,默认一个vlanif绑定着对应编号的"V"的LAN,例如vlan 5逻辑上连接下图“路由器”的接口叫vlanif 5,在此接口上配置IP作为vlan 5的网关,再走路由互访就行,更为复杂的路由方式那就起个OSPF或者静态就行。
逻辑上的VLAN

1.2 理解"V"的LAN怎么还原成LAN

"V"的LAN在原有LAN的帧头中加了一个字段,帧字段区别可见此篇文章:没别的,就聊聊VLAN
所以交换机收到时,把帧头的“标签”贴上,再转手传给其他交换机。扔给路由器或者计算机的时候把“标签”撕掉就行。就想象咱们平常送礼前撕标签的感觉就行。

1.3 理解二层交换机眼中的"V"的LAN

在二层交换机中,"V"的LAN也是LAN,但是要同贴上一样标签的LAN才是一个LAN,不同标签的LAN就是不同LAN,所以此时交换机按道理来说,还需要在收发接口上维系一个标签清单,允许哪些标签的帧从哪个接口出去,而且对于没有标签的帧,为了保持格式统一性,应当打上接口的默认标签(默认标签为1),所有帧在交换机内都是带标签的,遇到同为接口的默认标签号的接口发出就撕掉标签,整理一下,交换机需要这些东西:

  • 接口默认标签号
  • 接口允许通过标签清单

二、为何会产生需求(为什么)

2.1 局域网肆意扩张后的"分地运动"

局域网设备扩大后。广播范围也会越来越大,有些敏感部门需要隔离其他业务部门,所以在原有的庞大LAN范围内,期望能利用一些二层的字段相互隔离不同类型的数据帧,所以不妨把帧都打上标签,用交换机匹配帧,实现放行或拒绝带特定标签的帧。

三、有什么用(怎么做)

3.1 理解并灵活使用交换机对标签的处理方式

交换机常见的两种"V"的LAN接口:Access和Trunk,而我们实现的目标是:终端发出的无标签帧,带上指定标签,准确到达同标签区域,并以无标签的形式,将帧发给目标主机。所以从需求来看,两种接口类型可以想象成一种接口,即:带有标签放行清单与默认贴撕标签能力的接口。我们以Trunk接口为例来想象一下流程:

  1. 若不标签的帧进入交换机前,先打上接口默认标签,带标签的帧进下一步;
  2. 此时匹配接口的标签清单,清单里有就收到交换机内,没有就把帧拦下来(俗称丢弃);
  3. 查交换机MAC地址表,选择接口转发;
  4. 此时匹配接口的标签清单,清单有就发到对应接口处,没有就不让帧出去(俗称丢弃);
  5. 此时比对接口默认标签,默认标签与帧的标签相同就拆掉标签,如果不同就保持标签扔出去;

OK此时就有人疑惑了,假如是Access接口呢,那就意味着接口默认标签号=接口唯一允许通过标签清单=指定VLAN标号,此时代入上述过程再看看,结果如下:

收/发数据帧有无标签是否为接口默认标签动作
贴默认标签,匹配清单唯一放行项,收入交换机
匹配清单唯一放行项,收入交换机
不匹配清单唯一放行项,丢弃
匹配清单唯一放行项,转至出接口,撕掉标签
不匹配清单唯一放行项,丢弃

因为交换机内部都是带标签的,所以不存在发数据帧的时候有无标签帧

3.2 用代码逻辑来理解VLAN匹配方式

相信有些朋友看上述分析文字比较枯燥,所以可以参考下面这些伪代码,逻辑上还是比较清楚的:

# 当模式为Access时,VLAN列表仅有一个允许项,即接口标签号,默认为1
if InPort.mode == "Access":InPort.allow_vlan_list = [Inport.default_tag]
if OutPort.mode == "Access":OutPort.allow_vlan_list = [Outport.default_tag]
# 对齐带Tag的帧格式(Port.default_tag默认为1)
if Frame.tag == null:Frame.add(InPort.default_tag)
# 如果帧标签在in接口允许清单中,则进行下一步,无则丢弃
if Frame.tag in InPort.allow_vlan_list:InPort.pass(Frame)# 查询MAC地址表,有表项则丢到对应接口,进行下一步,无则丢弃OutPort = Switch.search(Frame)if OutPort != null:# 如果帧标签在out端口允许清单中,则进行下一步,无则丢弃if Frame.tag in OutPort.allow_vlan_list:# 如果帧标签和out接口默认标签一致,则撕掉标签转发;# 如果不一致则直接转发if Frame.tag == OutPort.default_tag:Frame.take_off_tag()# out接口转发帧OutPort.forward(Frame)else:OutPort.discard(Frame)else:Switch.discard(Frame)
else:InPort.discard(Frame)

相关文章:

学习思考:一日三问(学习篇)之匹配VLAN

学习思考:一日三问(学习篇)之匹配VLAN 一、学了什么(是什么)1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求(为…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点: 认证框架 802.1X 使用 EAP(可扩展认证协议…...

用C#(.NET8)开发一个NTP(SNTP)服务

完整源码,附工程下载,工程其实也就下面两个代码。 想在不能上网的服务器局域网中部署一个时间服务NTP,当然系统自带该服务,可以开启,本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见,…...

Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别

MyBatis 是一个用于简化数据库操作的框架,它可以帮助开发人员通过映射语句轻松执行 SQL 查询,并且能够方便地实现对象与数据库表之间的映射。MyBatis 支持一对一、一对多和多对多等关联查询。下面我们来探讨一下 MyBatis 如何实现一对一、一对多的关联查…...

ABAP SQL 取日期+时间最新的一条数据

我们在系统对接的时候,外部系统可能会推送多个数据给到我们。 我们 SAP 系统的表数据中日期和时间是作为主键的,那么如果通过 ABAP SQL 取到最新日期的最新时间呢。 解决方案: 方式 1:SELECT MAX 可以通过两个 SELECT MAX 来取…...

【Rust自学】4.3. 所有权与函数

4.3.0 写在正文之前 在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权&#xff1…...

【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)

一、什么是分布式锁 我们在上篇文章中实现了单机模式下的秒杀业务。其中采用了synchronized加锁来解决各种线程安全问题。而synchronized关键字是依赖于单机的JVM,在集群模式下,每个服务器都有独立的JVM,如果此时还采用synchronized关键字加…...

用docker快速安装电子白板Excalidraw绘制流程图

注:本文操作以debian12.8 最小化安装环境为host系统。 一、彻底卸载原有的残留 apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras 二、设置docker的安装源 # Add Dockers official G…...

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…...

人工智能入门是先看西瓜书还是先看花书?

在人工智能入门时,关于先看《机器学习》(西瓜书)还是先看《深度学习》(花书)的问题,实际上取决于个人的学习目标和背景。 《机器学习》(西瓜书)由周志华教授撰写,是一本…...

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题,禁用点击窗体标题栏放大缩小//logger.Info($&…...

进程内存转储工具|内存镜像提取-取证工具

1.内存转储,内存转储(Memory Dump)是将计算机的物理内存(RAM)内容复制到一个文件中的过程,这个文件通常被称为“内存转储文件”或“核心转储文件”(Core Dump),内存转储的主要目的是…...

数据结构day5:单向循环链表 代码作业

一、loopLink.h #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__#include <stdio.h> #include <stdlib.h>typedef int DataType;typedef struct node {union{int len;DataType data;};struct node* next; }loopLink, *loopLinkPtr;//创建 loopLinkPtr create();//…...

(OCPP服务器)SteVe编译搭建全过程

注意&#xff1a;建议使用3.6.0&#xff0c;我升级到3.7.1&#xff0c;并没有多什么新功能&#xff0c;反而电表的实时数据只能看到累计电能了&#xff0c;我回退了就正常&#xff0c;数据库是兼容的&#xff0c;java版本换位java11&#xff0c;其他不变就好 背景&#xff1a;…...

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…...

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…...

CentOS 7 安装、测试和部署FastDFS

目录 FastDFS环境搭建 安装 libfastcommon 库 安装FastDFS 查看编译后的文件 FastDFS配置 FastDFS启动 启动tracker服务 启动storage服务 查看storage是否已经注册到了tracker下 查看存储文件的目录 FastDFS重启 FastDFS关闭 使用fdfs_test进行测试 修改client.co…...

全志H618 Android12修改doucmentsui选中图片资源详情信息

背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 进入file文件管理器后,点击选中图片资源,选中功能按钮,获取信息,不显示“调试信息(仅开发者)”;现状是,获取信息,显示“调试信…...

【083】基于51单片机智能烘手器【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统LCD1602液晶显示DS18B20温度传感器TCRT5000红外感应传感器AT24C02存储芯片风扇加热片继电器LED灯按键设置。 1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片&#xff1b; 2、系统采用DS18B20温度传感器感应当前环…...

uniApp使用腾讯地图提示未添加maps模块

uniApp使用腾讯地图&#xff0c;打包提示未添加maps模块解决方案 这是报错信息&#xff0c;在标准基座运行的时候是没问题的&#xff0c;但是打包后会提示未添加&#xff0c;可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key&#xff0c;定位服务可以继续用腾…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...