前言
在上一篇中讲解了交换机的工作原理,知道了交换机处理数据的转发方式,其中有两种情况会以广播方式进行发送数据,第一种是目的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以外,还有其他的类型吗?下一篇来了解这些内容。