VLAN简介
先简单的介绍一下VLAN的工作的原理,我们可以把它理解为将一台交换机在逻辑上分割成了数台交换机,VLAN生成的逻辑上的交换机是互不相通的。因此,在交换机上设置VLAN后,如果未做其他处理,VLAN间是无法通信的。想要实现VLAN间通信必须借助三层路由。
TPID的值,固定为0x8100。交换机通过TPID,来确定数据帧内附加了基于IEEE802.1Q的VLAN信息。而实质上的VLAN ID,是TCI中的12位元。由于总共有12位,因此最多可供识别2的12次方,也就是4096个VLAN。
而当数据帧离开汇聚链路时,TPID和TCI会被去除,这时还会进行一次CRC的重新计算。
VLAN实例
我们用PC1去ping一下PC3发现可以通
现在SW1的G0/0/024接口上抓包,从报文的交互上来看,首先PC1回去发送ARP的请求广播包去获取PC3的MAC地址,收到了应答包之后再去发送ICMP报文,可以看到由于PC1的端口加入了VLAN10,数据包上封装上了802.1Q协议并打上了VLAN10的标签
在PC3的接口下面抓一下包查看结果,我们可以发现封装的802.1Q头部已经被去除,因为ACCESS接口收到数据包后会判断VLAN ID是否和自己加入的VLAN一致,如果一致就去除802.1Q的头部,不一致则会被丢弃
再用PC2去ping一下PC4,发现也是没有问题
从报文上来看也打上PC2所在接口的VLAN标签
接下来我们做一下实验,如果我们在SW2的G0/0/24接口上禁止VLAN 10和VLAN 20的数据包通过会怎么样?
[SW2]int g0/0/24
[SW2-GigabitEthernet0/0/24]un port trunk allow-pass vlan 10 20
我们在SW2的G0/0/24抓一下包看一下,发现还是可以收到数据包,这是因为SW1的G0/0/24允许VLAN 10和VLAN 20通过,但是奇怪的是这些ARP广播包已经没人应答了
在PC3所在接口抓包看一下,结果发现这个接口压根就没有数据包,所以PC3也没有方法去回应那些ARP的广播包,这是因为虽然SW1允许VLAN 10 和VLAN 20的数据包通过,但是SW2没有允许这些数据包通过,SW2的G0/0/24 Trunk接口在接收到数据包后会判断这个数据包携带的VLAN ID是否允许通过,如果不允许通过将会被丢弃
我们看一下如果SW1的G0/0/24接口上就不允许VLAN 10和VLAN 20的数据包通过
[SW1]int g0/0/24
[SW1-GigabitEthernet0/0/24]un port trunk allow-pass vlan 10 20
[SW2]int g0/0/24
[SW2-GigabitEthernet0/0/24]port trunk allow-pass vlan 10 20
这个时候,SW1和SW2的G0/0/24都没有抓取到数据包,因为数据包在SW1上就已经被丢弃了
本文部分参考以下文章,下面这篇文档写得不错,大家可以看一下
图文并茂VLAN详解,让你看一遍就理解VLAN_漂洋过海来打你的技术博客_51CTO博客_vlan是什么
本征VLAN
看到了现在,你有没有一个疑惑,要是trunk接口接收到一个没有VLAN ID的数据包会怎么做呢?
当交换机的trunk接口收到了一个没有VLAN ID的数据包,就会自动打上接口的本征VLAN ID,通过一个实验我们来看一下,我们先把SW1的本征VLAN改成VLAN 10,默认的本征VLAN是1
[SW1]int g0/0/24
[SW1-GigabitEthernet0/0/24]port trunk pvid vlan 10
在PC3接口上进行抓包,发现啥也没有,抓了个寂寞
我们在拓扑上在增加一个PC5
在PC5的接口上进行抓包,unbelievable,发现PC5的接口居然收到了PC1发送过来的数据包,这是因为SW2的G0/0/24的本征VLAN没有修改,收到了没有打上VLAN ID的数据包就会加上VLAN 1的标签,由于交换机默认接口都是VLAN 1,所以PC5收到了数据包,PC3没有
如果这时候把PC5的IP地址改成PC3的IP地址,就会发生神奇的事情
发现竟然ping通了
我们在R5的接口上抓包发现,R1竟然在和R5进行通信
我们把SW2的本征VLAN也改回来
[SW2]int g0/0/24
[SW2-GigabitEthernet0/0/24]port trunk pvid vlan 10
SW2的G0/0/24接口收到了没有打上VLAN ID的数据包
这时候R3的接口也收到了数据包,所以如果交换机两端的本征VLAN不同可能会造成原本可以通信的电脑不能通信,原本不能通信的反倒可以通行
至此实验结束!