一、前言
VLAN在网络中常用且重要,我们在用户接入时经常要说的是“给他划个VLAN”,那我们为什么需要VLAN,而VLAN又如何使用呢?本篇先简单说下VLAN的原理,以后再详细介绍。
本篇参考了以下链接的大量内容:
https://blog.csdn.net/phunxm/article/details/9498829
二、广播域与VLAN
之前在学习交换机相关知识时,比如ARP协议就是依赖于广播报文来实现其“发现目标MAC”地址的功能,所以在交换机网络中,广播是非常重要的,因为交换机最重要功能就是“交换”,无条件的交换数据。那想来也是,如果要无条件交换数据,接入网络的任何设备就需要互相通信而不依赖任何多余的配置,所以交换机网络中必须存在大量的广播报文来“发现”对方,这种畅通无阻可以认为是广播域的基本特征。
在介绍路由器的时候,我们说路由器的端口可以隔离广播域,所以在网络愈加庞大的时候,我们会将不同部门、分公司、子公司等等划分到不同的网段,再用路由器将这些网段连在一起组成可以互相通信的网络,这样就避免了广播域太过于庞大。但是这个成本不低,如果公司里有10个部门那最少3台路由器感觉有些浪费,而同一个部门的人他不一定就在一个办公室,布线也是个问题,所以路由+交换这种组网模式用在企业内部现在看来有些僵化了。
那公司内部能不能只用交换机来组网,同时还能隔离广播域呢,很明显VLAN就是干这个的。
三、单交换机VLAN
VLAN要实现的效果是,接入网络的设备不经过路由器也能隔离广播域。考虑如下图所示的交换机,5个端口分别接了5台PC,当其中一台PC发广播包时所有PC都能收到这个数据,这就是所谓广播域。
如果我们将其中两个端口进行特别的设置,让其与其他端口的数据不能互通,像下图这样。VLAN就是这样发挥作用的,我们将其中两个端口划分到VLAN10,这样他们可以互通,并与其他端口无法通信。
划分VALN的操作非常简单:
system-view #进入系统视图
vlan batch 10 #生成vlan10
interface Ethernet 0/0/1 #进入E0/0/1端口
port link-type access #端口模式为access
port default vlan 10 #设置端口仅可通过vlan10的流量
interface Ethernet 0/0/2 #进入E0/0/1端口
port link-type access #端口模式为access
port default vlan 10 #设置端口仅可通过vlan10的流量
这样我们就将E0/0/1和E0/0/2设置为仅允许VLAN10的流量通过,而其他未设置的端口默认是VLAN1。最后结果是这两个端口的设备可以互通,但无法与其他端口的设备互通,其他端口的设备可以互通但无法与这两个端口的设备互通。
四、多交换机的VLAN
实际的网络肯定不只是一台交换机,所以存在多个交换机串联的情况,因为VLAN的特性这就使得我们必须预留出多个专属的“串联”端口来将多个交换机连接在一起,如下图所示。
如果网络规模较小、设备较少、VLAN数量也不多的情况我们这样做可能还可以顶一顶,但网络规模一旦变大问题也就滚雪球般变大。比如我们需要10个VLAN的话,岂不是每台交换机至少占用10个端口来实现串联?
五、TRUNK模式
针对前面提出的问题,其实有个非常简单的办法,比如我们每个交换机拿出2个端口专门用来串联,让其通过所有VLAN的流量不就行了吗,这样的端口就是VLAN的TRUNK模式。
如下图所示,白色的端口是默认的VLAN1,红色的端口是VLAN10,蓝色的端口是TRUNK模式且允许VLAN10和VLAN1通过。
配置TRUNK端口:
system-view #进入系统视图
interface Ethernet 0/0/1 #进入E0/0/1端口
port link-type trunk #端口模式为trunk
port trunk allow-pass vlan 1 10 #设置端口可通过vlan 1 和10的流量
(具体配置可以百度参考相关的实验)
通过TRUNK端口的使用,我们每台交换机仅占用2个端口就可以将大量的交换机串联在一起并接入大量的设备互相通信,同时不同VLAN间又不会互相干扰。
六、VLAN与虚拟交换机
对于交换机的VLAN,可以将其理解为“虚拟交换机”,也就是物理上可能我们是10台交换机通过TRUNK端口串联在一起组成了比较大规模的网络。而在不做任何配置的情况下,交换机端口默认是VLAN1,也即是这10台交换机在逻辑上可以视为1台交换机。那如果端口们依次划分了1、10、20这三个VLAN,则可以在逻辑上认为网络中有三台交换机,这些虚拟交换机的端口可以跨办公室、跨楼层,将物理上分隔较远的设备联系在一起,同时与其他虚拟交换机又相互隔离。
七、VLAN与TAG
VLAN的实现实际上依赖于交换机能够处理VLAN的TAG(标签),可以先记住下面的逻辑:
1)数据进入ACCESS端口会被打上端口的VLAN标签
2)数据出ACCESS端口先检查是否与端口VLAN标签匹配,不匹配数据无法通过,匹配则可通过并去掉标签
3)数据进出TRUNK端口都会检查是否与端口VLAN标签匹配,不匹配无法通过,匹配可通过。注意TRUNK端口不会打标签。
以下面的网络为例,根据配置PC1只能与PC3通信,PC4只能与PC2通信。
对于ACCESS端口,进端口时打上标签,出端口时去除标签,而TRUNK端口只检查标签,符合的通关不符合的不通过。所以PC1向PC3发包时VLAN标签的流转如下图所示。PC4与PC2的通信同理不再赘述。
对于此,我们可以衍生出一些问题,比如我下面列的这些。
1、如果数据已打上了标签后再进入ACCESS端口会怎样?
如下图所示的网络,LSW4与LSW5之间,一侧是TRUNK模式,一侧是ACCESS模式。这样PC5与PC6自然是无法通信的,但我们发现PC5与PC6的症状是不一样的。
下图是PC5 ping PC6
下图是PC6 ping PC5
通过抓包我们发现在LSW4的E0/0/2端口是可以收到ARP应答报文的,但是这个报文并没有穿过LSW4到达PC5。下图是我们在LSW4的E0/0/2端口抓到的ARP ACK和应答报文,也就是PC5的ARP报文确实到达了PC6,而PC6的响应报文也确实发出了。
先说答案,如果报文有VLAN TAG标签ACCESS端口会让其通过(如果TAG正确的话),但不会再二次打上标签了。像下图这样,PC5的ARP报文可以正常到达PC6。
2、对于不带TAG的报文TRUNK端口会怎么处理
PC6的ARP响应报文如下图这样,因为LSW4的E0/0/2端口是TRUNK模式,所以它需要检查报文的TAG,而LSW5的E0/0/1端口在发出报文时将TAG10去掉了,所以无法通过TRUNK端口的检查。所以不带TAG的报文无法通过TRUNK的检查。
3、如果把LSW4的TRUNK模式取消掉会怎样
前面由于TRUNK将PC6的响应报文拦截了,那我们将这个TRUNK端口取消会怎样,数据能否通过了呢?答案是情况更糟糕了,PC5的ARP报文甚至无法穿过LSW4。所以带了TAG的报文无法通过非VLAN端口。
4、去掉了TAG的报文还能通过普通端口吗?
接着我们将LSW4另一个端口也修改为普通端口,你会发现PC5与PC6可以互通了,所以报文被ACCESS端口去掉TAG后就变成了普通的报文。
八、回顾
1、VLAN可以隔离广播域,相同VLAN的端口可以在逻辑上认为其是独立的虚拟交换机,虚拟交换机内部的端口可以互通但不同VLAN间默认无法通信。
2、VLAN使用基础是将交换机的端口配置为ACCESS模式并设置其允许通过的VLAN TAG,如此配置了相同VLAN TAG的端口就可以互相通信。
3、使用TRUNK端口来连接交换机,可以节省对端口的占用数量。
4、报文进入ACCESS端口:报文在进入ACCESS端口时会被打上相应TAG。如果报文已带有TAG,但TAG与ACCESS端口配置的不一致则无法进入端口。如果TAG与ACCESS端口配置的一致,则可以进入端口且不会被重复打上TAG。
5、报文离开ACCESS端口:离开ACCESS端口时会被去掉相应TAG。如果报文未携带TAG或TAG不对则无法离开ACCESS端口。
6、报文进出TRUNK端口:报文必须携带有正确的TAG才能进入或离开TRUNK端口。没有TAG或错误的TAG都无法进出TRUNK端口。
7、非VLAN端口不允许带了TAG的报文通过。
8、被ACCESS端口去掉了TAG的报文就变成了普通报文,可以通过非VLAN端口。