VLAN是什么,一个好的网络为什么要划分VLAN呢?

news2024/11/25 11:23:53

前言

在上一篇中讲解了交换机的工作原理,知道了交换机处理数据的转发方式,其中有两种情况会以广播方式进行发送数据,第一种是目的MAC是全F的,以及组播MAC,第二种是未知单播帧,那这个会带来什么样的问题呢?

案例场景引入问题

某个办公楼有多个办公区域被不同团队租用,管理员给了每个办公区域一个独立的交换机进行接入,然后在统一接入到公用的核心交换机,通过路由器出去上网。

 「模拟器、工具合集」复制整段内容
链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab=7ulgil

图片

上面这个属于常见的企业网架构,也是入门篇后续要学会规划跟搭建的,核心交换机以及路由器的内容暂时没学,可以忽略掉,我们主要把重点放在下面的三个办公区域。(后续大部分课程会以这个架构进行讲解知识点,另外整体的架构等知识点学完以后,会在案例部分进行整个框架解析,为什么要这样来组网)

很显然,像这样结构的网络划分,租用办公对的用户希望是自己属于一个独立的的区域,跟其他区域隔离开来,IT管理员给他们划分了多个网段,每个办公区域一个独立的网段,想用网段进行隔离,我们来看看这样的网络用什么样的问题。(地址如上,PC手动配置地址、掩码即可,实际中肯定是自动获取,由于我们还没学到DHCP的配置,所以暂时的手动)

  • 办公区域1在的PC2在访问PC1的时候,其他区域能否收该区域的数据包呢?

 这个抓包测试下就可以验证得到结果了,我们使用PC2  ping PC1,抓取任意一台其他区域的电脑。

建议在测试之前,把设备的名字改了,比如办公区一的,改成bg1,办公区二的改成bg2,办公区三的改成bg3,核心交换机改成Core,该名字的命令是sysname 

图片

从PC2去ping pc1,通的

图片

好玩的事情出现了,虽然这个网络的办公区域用了不同的网段进行了隔离,但是在PC6开启的抓包中,还是收到了来自于192.168.255.1的ARP请求,询问谁是255.50,那么得到了一个结论

图片

虽然网段区分了,但是由于交换机默认都处于一个广播域中,在同一个局域网下面还是可以接收到的,整个流程如下

图片

  • PC2发送ARP请求PC1的MAC地址,数据包从网卡发出,办公区1的交换机收到以后,读取二层头部,源MAC学习进MAC地址表(从E0/0/2学到),发现目标MAC是全F,执行广播操作,除了接收到该接口以外的所有接口发送出去,这个时候PC1会收到进行处理,会单播回应,交换机通过查询MAC表知道PC2在E0/0/2,直接转发过去。

  • 与此同时广播包会发送到核心交换机,核心交换机也会做相同的操作,学习源MAC、广播ARP,从源接口以外的所有接口广播。(G0/0/2、G0/0/3、G0/0/4)。

  • 办公区二收到以后,同样的操作,学习MAC,广播ARP,但是PC3与PC4收到后发现请求的不是自己,丢弃。

  • 办公区三收到以后,同样的操作,学习MAC,广播ARP,但是PC5与PC6收到后发现请求的不是自己,丢弃。

  • 出口路由器收到以后,发现请求的不是自己,丢弃。 

有没有发现什么严重的问题!PC2的一个ARP请求包,就这样传遍了整个局域网,虽然IT人员用不同的网段进行了区分,但是由于本身交换机的网络就属于一个大的广播域,加上交换机的处理机制,会把该包转发给除源接口以外的所有活动接口(物理线路起来的)广播出去,所以核心交换机收到以后,会转发给出口路由器、办公区二、办公区三都会是收到,同时办公区二、与三也会执行除源接口以外的所有活动接口广播出去,下面的PC都能收到,但是这对于办公区二以及三的终端来说,该流量就属于“无意义”的流量,因为收到的PC是需要去花费时间来拆开二层头部,读取ARP的内容,结果一看发现找的不是自己,然后丢弃,这还是一个PC发的ARP广播请求包,按一个稍微大点的网络,几百台终端在这样一个大的局域网里面,每一台访问某个主机就需要ARP解析,想想看,多少这种“无意义”的流量占用着带宽、浪费网络设备以及PC的资源,因为这个解析只对于这台请求的PC来说以及被请求的终端来说是有意义,特别是其他区域的终端来说,完全是应该避免这种情况发生的。

图片

这就是一个大的网络环境下,如果都处于一个大的广播域中带来的问题,回顾:路由器收到一个ARP广播报文请求后,如果发现找到不是自己,就会直接丢弃,不会转发,路由器的三层接口天生是隔离广播域的。

  • 更糟糕的情况

图片

PC2开启长ping功能,还是开启PC6的抓包

图片

假设访问的PC1(192.168.255.50)关机了,会发生什么事情呢?

图片

是不是很奇怪,单播报文,在抓包的PC6上发现了,而且是给192.168.255.50,这个又回到了之前交换机的处理数据过程的理论了,由于PC1关机,对应的交换机口物理线路关闭,交换机会把该接口的MAC地址记录清除。

图片

清除以后,这个时候当PC2在去访问192.168.255.50(PC1的时候),交换机不知道PC1的MAC在哪,所以只能采取泛洪方式的操作,除源接口以外的所有接口发送出去,这样整个局域网的的设备与终端都会收到,这只是一台出现这样的,那N台呢?是不是整个网络都被无用的流量给占用了。

上面的情况还只是设备与终端接收 不必要处理的流量,浪费了点链路带宽以及性能,但是在网络中还存在某些病毒跟攻击,某一台机器使用过程中不小心中了病毒,那整个局域网中是不是非常的危险了?加上一些攻击存在,可能整个网络面临瘫痪的情况。

VLAN的出现

基于上面的情况,主要的问题在于交换机的工作机制以及处于同一个广播域下,假设按照原本IT管理的想法是,每个办公区一个独立区域,区域之间互不影响。

图片

实现这样的需求,想办法把每个区域的广播域限制在该区域内传播,这样就不会影响其他区域了,我们都知道局域网的简称叫做LAN,实现每个区域一个广播域的技术叫做VLAN(Virtual Local Area Network),虚拟局域网,相当于把一个大的局域网,逻辑的分成多个小的局域网,实现每个小的局域网之间是相互独立、隔离;从而实现区域独立的效果。

  • 填坑:交换机默认有vlan吗?

图片

还记得在MAC表中以及静态绑定的时候是必须输入vlan参数的,而且默认情况下这个ID是1,这样就是说明交换机所有接口默认都属于VLAN1中,一个VLAN就是一个广播域。

  • 感受下配置VLAN后的效果。

    • VLAN怎么配置呢,先了解这两个步骤

(1)创建VLAN ID,创建方法,系统视图下,vlanid,id的范围=1~4094

举例:[bg1]  vlan 10      //创建了一个VLAN 10

(2)接口加入对应 VLAN

[bg1] interface  Ethernet0/0/1  //进入需要划分的接口

[bg1-Ethernet0/0/1]port link-type access   //接口类型为access,这个第一次接触,下一篇会介绍

[bg1-Ethernet0/0/1]port default vlan 10     //将该接口加入VLAN 10中(划入)

  • 该环境如何规划呢,才能让每个区域独立出来呢?

图片

上面提到过VLAN是把一个大LAN(局域网),逻辑的划分成多个需要的虚拟LAN,来进行隔离,按照这个原理,是不是把每个区域单独划分一个VLAN 不接可以了吗?,比如上图的区域一划分进VLAN 10,区域二划分进VLAN 20,区域三划分进VLAN 30,大致的规划有了,按照上面介绍的配置中,接口是需要加入对应的VLAN的,那哪些接口需要加入呢?

目前只关注如何隔离开这个广播网络,暂时不涉及其他如何上网以互通,来分析下如何隔离。

办公区之间如果想要隔离开,简单有效的办法就是把对接终端的接口划入一个独立的VLAN,这样是不是PC就属于单独的一个LAN,进行隔离了呢?我们来验证测试下。

  • 办公区一交换机配置

[bg1]vlan 10                                                     //创建VLAN 10的ID

[bg1]interface   Ethernet0/0/2                         //进入2号口,对接PC2

[bg1-Ethernet0/0/2]port link-type access     //接口链路类型为access

[bg1-Ethernet0/0/2]port default vlan 10      //接口默认VLAN为10,划入进10

[bg1-Ethernet0/0/2]q                                  //退出

[bg1]interface   Ethernet0/0/3

[bg1-Ethernet0/0/3]port  link-type access

[bg1-Ethernet0/0/3]port  default vlan  10

[bg1-Ethernet0/0/3]q

[bg1]interface  Ethernet0/0/1

[bg1-Ethernet0/0/1]undo port default vlan         //去掉该接口加入vlan10

  • 办公区二交换机配置

[bg2]vlan  20

[bg2-vlan20]q

[bg2]interface  Ethernet0/0/2

[bg2-Ethernet0/0/2]  port link-type access

[bg2-Ethernet0/0/2]  port default vlan 20

[bg2-Ethernet0/0/2]q

[bg2]interface  Ethernet0/0/3

[bg2-Ethernet0/0/3]  port link-type access

[bg2-Ethernet0/0/3]  port default vlan 20

[bg2-Ethernet0/0/3]q

  • 办公区三交换机配置

 不给出配置,能自己独立把办公区三的配置完成吗?

  • 在测试下

图片

这里直接开启抓核心交换机G0/0/1的包,看下还能否收到来自于PC2的ARP包请求。

图片

PC2访问PC1通了,但是核心交换机没有收到任何的数据包,说明这个广播包没有被发送到核心这边来,因为我们通过VLAN已经把它隔离了。

图片

查看MAC地址一个明显的特征可以发现,VLAN 参数那变成了10了,这里就要介绍一个重要的概念了,之前没有学到VLAN,所以没有提及。

当交换机从某个接口收到一个数据包时,读取包的二层头部,将源MAC记录在MAC表中,记录内容:MAC地址、VLAN ID、源接口,VLAN ID与源接口获取的方式通过从哪个口收到该数据包,从而知道该接口是哪个,这个接口对应的VLAN ID是哪个,所以最终MAC表中记录 PC2(5489-98ae-62b8)对应接口ETH0/0/2,所属VLAN  10

图片

当交换机读取到目的MAC是ARP的请求(全F),之前我们说的原理是从除了原接口以外的所有接口进行广播,这里呢多了一个参数,从除了原接口以外的所有属于VLAN 10的接口进行发送,这里就E0/0/3(PC1)所在的接口属于VLAN10,所以交换机只会发给E0/0/3,而E0/0/1没有任何配置,默认属于VLAN1,所以呢,不会进行发送。相当于把一台交换机逻辑的分成了两台交换机一样了,甚至可以多台。

其实之前讲解的原理,除了从源接口以外所有接口进行广播,其实也是会看VLAN的,只是默认情况下交换机所有接口都属于VLAN1,那会也没学VLAN的概念,就没有提及。

同样的,PC1关机或者出现问题后,PC2发送的数据包,交换机收到一个未知单播帧后,只会在该VLAN内除源接口以外的其他属于对应VLAN的接口进行发送,同样有某个机子中毒或者出现攻击,影响的只是该VLAN内的主机,其他区域并不影响。

所以呢,一个好的网络为什么要划分VLAN就是这个原因。 

留一个小疑问

从VLAN隔离的角度,如果直接在核心上面划分VLAN是不是更加方便快捷,只需要配置一台设备即可,这样做有什么坏处吗?

  

”承上启下”

对于VLAN的用途已经有了一个很好的认知,其中一些细节的地方一直没提到,比如接口的类型,那它是用于干什么的?接口处于access vlan 的时候,一个数据包过来它是如何把处理的呢?同一个VLAN内它是如何实现通信的,除了access以外,还有其他的类型吗?下一篇来了解这些内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录

1.创建新文件夹,用来存放SDK包(其实本质就是路径要对就ok了),右键鼠标通过Open Git Bash here来打开git 输入命令 git clone --depth1 https://gitee.com/lcsc/luban-lite.git 来拉取,如下所示:&#xff0…

基于Gradle搭建Spring6.2.x版本源码阅读环境

前言 阅读源码是程序猿成长的必经一环,正所谓知其然知其所以然。我们在开发成长道路上不仅需要知道如何使用,更要懂得其背后的原理,如此方可得心应手。本篇文章旨在指导大家搭建Spring6.0以上版本的源码阅读环境,方便大家在学习源…

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…

ubuntu16.04在ros使用USB摄像头-解决could not open /dev/video0问题

首先检查摄像头 lsusb 安装 uvc camera 功能包 sudo apt-get install ros-indigo-uvc-camera 安装 image 相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view运行 uvc_camera 节点 首先输入roscore 然后另外开一个终端输入…

Linux:文件管理(二)——文件缓冲区

目录 一、缓冲区概念 二、缓冲区刷新机制 三、用缓冲区刷新解释下面现象。 一、缓冲区概念 缓冲区,本质就是一块内存区域。 设计缓冲区就是为了让本来要一次一次传的数据,都暂时传到缓冲区,让缓冲区刷新一次,这样只发生了一次传…

PH热榜 | 2024-11-24

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. AutoFlow Studio 标语:借助简化的AI质检,更快发布产品,更聪明地进行测试。 介绍&…

hubuctf-2024校赛-复现wp

web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…

飞书会话消息左右排列

飞书会话消息左右排列 1. 飞书登录后&#xff0c;点击头像&#xff0c;弹出菜单有个按钮设置 2. 3.

《图像形态学运算全解析:原理、语法及示例展示》

简介&#xff1a; 本文详细介绍了图像形态学中的多种运算&#xff0c;包括腐蚀、膨胀、开运算、闭运算、形态学梯度运算、礼帽运算以及黑帽运算。分别阐述了各运算的原理、语法格式&#xff0c;并通过 Python 代码结合具体示例图片&#xff08;如erode.JPG、dilate.JPG、close.…

链路聚合实验

1、聚合方式 &#xff08;1&#xff09;、lacp 静态链路聚合、 动态链路聚合&#xff08;开启lacp模式&#xff0c;常用&#xff09; &#xff08;2&#xff09;、手工负载分担 静态端口聚合&#xff08;两台交换机都按照下面的命令配置&#xff09; <H3C>sys System Vi…

电子电气架构 -- ASIL D安全实现策略

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

禁止Chrome的自动升级

一、需求分析 因为用Chromeselenium做了网页自动化填写任务&#xff0c;如果Google Chrome浏览器自动升级&#xff0c;就会导致chromedriver加载失败&#xff0c;自动化任务失效&#xff0c;因此需要禁止Chrome浏览器的自动升级。 二、当前环境 三、实际配置 运行注册表编辑…

C0034.在Ubuntu中安装的Qt路径

Qt安装路径查询 在终端输入qmake -v如上中/usr/lib/x86_64-linux-gnu就是Qt的安装目录&#xff1b;

C++从零到满绩——类和对象(中)

目录 1>>前言 2>>构造函数&#xff08;我称之为初始化函数&#xff09; 3>>析构函数&#xff08;我称之为销毁函数&#xff09; 4>>拷贝构造函数&#xff08;我称之为复制函数&#xff09; 5>>运算符重载 5.2>>赋值运算符重载 ​编辑…

oracle 12c查看执行过的sql及当前正在执行的sql

V$SQL 提供了已经执行过及正在执行的SQL语句的信息。 一 查看共享池中所有sql的统计信息 #统计共享池中某类sql执行次数&#xff0c;总体执行时长&#xff0c;平均执行时长等信息&#xff0c;并按总体执行时长降序排序 SELECT INST_ID,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTI…

解锁PPTist的全新体验:Windows系统环境下本地部署与远程访问

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在Windows系统环境中&#xff0c;如何本地部署开源在线演示文稿应用PPTist&#xff0c;并实现远程访问&#xff1f;本文将为您提供详细的部署和配置指南。 P…

C语言中的指针和字符串的赋值

前言&#xff1a;温习下以前学过的C语言知识&#xff0c;温故而知新。 实例说明 本文用一段实例代码阐述指针和字符串的联系。 #include <iostream> #include <cstring> int main() {using namespace std;char animal[20] "bear";const char * bird …

Linux高阶——1117—TCP客户端服务端

目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…

物体网格弹性变形---Unity中实现

在游戏引擎场景中的3D物体是由一定数量的点、面组成的&#xff0c;如下图&#xff1a; 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体&#xff0c;如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件&#xff0c;分别用来获取Mes…

【ArcGISPro】根据yaml构建原始Pro的conda环境

使用场景 我们不小心把原始arcgispro-py3的conda环境破坏了,我们就可以使用以下方法进行修复 查找文件 在arcgis目录下找到yaml文件 如果没找到请复制以下内容到新的yaml文件 channels: - esri - defaults dependencies: - anyio=4.2.0=py311haa95532_0 - appdirs=1.4.4=p…