学习思考:一日三问(学习篇)之匹配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为交换机直连的链路就好处理了,理解为仅需二层提供通讯,无需三层路由的一块区域,在此区域下可实现广播、组播与无目的MAC的单播帧泛洪区域。
那进一步,我们再理解"V"的LAN就好理解了,V就是虚拟的,理解为逻辑上的,组织一下语言就是“逻辑上的局域网”,意味着这块区域不管长啥样,逻辑上就是个局域网,逻辑上和上面的LAN没啥区别,三个电脑中的一台发广播帧,其余两台都能收到,OK,理论存在,实践开始。

上面是个乱七八糟的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或者静态就行。

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接口为例来想象一下流程:
- 若不标签的帧进入交换机前,先打上接口默认标签,带标签的帧进下一步;
- 此时匹配接口的标签清单,清单里有就收到交换机内,没有就把帧拦下来(俗称丢弃);
- 查交换机MAC地址表,选择接口转发;
- 此时匹配接口的标签清单,清单有就发到对应接口处,没有就不让帧出去(俗称丢弃);
- 此时比对接口默认标签,默认标签与帧的标签相同就拆掉标签,如果不同就保持标签扔出去;
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的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权࿱…...
【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编译搭建全过程
注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好 背景:…...
Mybatis分页插件的使用问题记录
项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为,通过传入的条件…...
36. Three.js案例-创建带光照和阴影的球体与平面
36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器,用于将场景渲染到网页上。 构造器 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程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD1602液晶显示DS18B20温度传感器TCRT5000红外感应传感器AT24C02存储芯片风扇加热片继电器LED灯按键设置。 1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片; 2、系统采用DS18B20温度传感器感应当前环…...
uniApp使用腾讯地图提示未添加maps模块
uniApp使用腾讯地图,打包提示未添加maps模块解决方案 这是报错信息,在标准基座运行的时候是没问题的,但是打包后会提示未添加,可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key,定位服务可以继续用腾…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
