VLAN(Virtual Local Network,虚拟局域网),对于VLAN的划分方法有很多种:基于端口划分,基于MAC地址划分,基于网络协议划分,基于IP地址划分,基于策略划分等等。但是就上述而言,对VLAN的划分就是以交换机为主语的,也就是说,主机并不感知VLAN的存在,那么关于报文中VLAN的标签到底是怎么回事呢?
首先,我们先来说一下交换机的端口。
交换机的端口以三种分类:
- Access接口:一般用于接用户计算机,一个Access端口只能属于一个VLAN。
- Trunk接口:一般用于交换机之间的互联的端口,trunk口可以属于多个VLAN,可以接受和发送多个VLAN的报文。
- Hybrid接口:可以用于交换机之间的连接,也可以用于接用户的计算机,Hybrid端口可以属于多个VLAN,可以接受和发送多个VLAN的报文。
那么对于可以接受和发送多个VLAN的端口来说,就有一个缺省VLAN的概念,什么是缺省VLAN呢?举个例子,当收到一个不知道属于哪个VLAN的报文的时候,Trunk端口或者Hybrid端口怎么对其进行处理呢?就将其设置为缺省VLAN。对于缺省VLAN也有叫做PVID(Port VID),或者Native Vlan的叫法。缺省VLAN可能是不存在的VLAN。
- Access端口只属于一个VLAN,则缺省VLAN就是他所在的VLAN,不用设置。
- Hybrid端口和Trunk口都属于多个VLAN,所以需要设置缺省VLAN ID。在没有设置的情况下,这个缺省VLAN ID均为1。
所谓VLAN tag就是在以太网帧格式的源MAC和目的IP之间添加了4字节,这四个字节中除了控制位以外,就是12bit的VLAN ID号码。这个报文格式由于是IEEE 802.1Q协议提出的,所以有时候也称为802.1Q帧格式。
端口对于报文的处理,其处理方面分为两种:接受报文、发送报文:
- Access端口:
- 当收到不带VLAN Tag的报文,则加上端口的PVID;当收到带VLAN Tag的报文,则交换机不做处理,直接丢弃。
- 当Access端口向主机发送帧时,会剥离802.1Q的 tag头部,发送普通的以太网帧给主机。
- Trunk端口:
- 当收到不带VLAN Tag的报文,则打上端口的PVID;如果该帧包含802.1Q的报文头部,查看是否允许进入(缺省VID,所包含VID),如果可以则接收,否则丢弃。
- 当发送帧时,比较该帧的VLAN ID与端口PVID,当不同时,且是允许通过的VLAN ID,则保留Tag,直接透传;当相同时,则去掉Tag,发送报文。
- Hybrid端口:
- 当接收到不带VLAN Tag的报文时,打上端口的PVID;当该帧包含802.1Q报文头部,查看是否允许进入(PVID,所包含VID),如果可以则接收,否则丢弃。
- 当发送报文时,当VLAN ID是该端口允许通过的VLAN ID,则发送该报文,并可以通过命令进行配置端口在发送该VLAN报文时候是否携带Tag。
- 总的来说,在接受数据的时候,PVID的作用是为不带VLAN Tag的untag报文添加一个PVID 的tag;在发送报文的时候,将带有PVID Tag的报文的VLAN Tag剥离,从而发送一个不带VLAN Tag的untag报文。这也就是主机与交换机相连的时候采用Access端口,主机从属VLAN但是主机不感知VLAN的原因。
- Trunk端口和Hybrid端口的最大区别是,Trunk端口在发送报文时候,只有当VLAN Tag=PVID的时候才会发送出不带Tag的报文;而Hybrid端口可以配置发送多个VLAN的报文,且不带VLAN Tag。
- 值得一提的是,同一个交换机上Trunk和Hybrid是不允许并存的。对于Hybrid的妙用如下:
可以看到B与D的通信过程是这样的:
1.当D向B发送数据,到了端口2,加上VID=20的标签。交换机发现端口1允许通过VID=20的报文,然后报文到了端口1,端口1对于VID=20的报文是不加标签的,所以,剥离标签到达B。
2.当B向D发送数据时候,B的报文进入端口1,打上VID=10的标签。交换机发现端口2允许VID=10的报文,然后报文到达端口2,端口2对于VID=10的报文是不叫标签的,所以,剥离标签到达D。
3.对于这次通信的往返,虽能正常通信,但所走的VLAN是不同的。
原文链接:https://blog.csdn.net/dandandean_96/article/details/83857092
芝麻哒哒哒 发布了32 篇原创文章 · 获赞 86 · 访问量 1万+ 私信 关注