VLAN tag与Access、Trunk、Hybrid三种端口模式

做~自己de王妃 提交于 2020-11-26 09:30:30

1、VLAN的概念:

什么是VLAN?长话短说,言简意赅:VLAN(Virtual Local Area Network,虚拟局域网)技术。虚拟是从软件层面来说的,就是说通过协议来划分VLAN。


传统意义上的LAN在地域上乃指区域范围比较小,如一家公司内部网;从设备层面看指的是某个三层(接口)以下的某片区域,如路由器接口、交换机三层口、无线AP下的网络;从IP上看或许是192.168.xxx.xxx、172.16.xxx.xxx、...的网段,却也不尽然;从不同方面看有不同种分类方式。


那么VLAN因何而产生呢?

在二层交换机不能隔绝广播域并且路由器转发性能过低且价格昂贵,需要交换机能够将这许多主机划区域管理的迫切需求下应运而生。背景什么的点到为止,接下来说说VLAN是如何使用的。


2、802.1Q与tag、untag:

首先,VLAN是纯软件的实现,在一台或多台交换机上可以配置划分多个VLAN,同一个VLAN可以跨交换设备,意味着可以跨楼层,跨街区等;同一台交换设备上同样可以划分一个或多个VLAN,所有交换设备默认所有端口都在VLAN 1下。其中1指的是VLAN的编号ID(vid),在以太帧是单个Tag标签的情况下(也有双Tag的Qinq技术,用以扩展当前vid不够使用的问题,其基础还是单Tag,有兴趣的朋友可以搜索了解)可表示的ID最大是4095(12bit)。那么vid是如何使用,Tag又是什么,有什么细节,需要注意什么?后面会一一介绍。


要区分一个frame数据帧能够在哪个网络中传输,其frame本身就必须携带标识自己身份的标签,即所谓tag,但是在常见的以太帧格式中都不带Tag。如下所示,为抓取到的一个标准的以太帧(Type为0x0800即IPv4数据报的以太帧,0x0806的以太类型说明这个帧是一个ARP帧,0x8100说明这是一个IEEE 802.1Q帧,而0x86DD说明这是一个IPv6帧等等):


其中0x8100正是我们要要说的带Tag的以太帧类型,该类型为802.3的标准,而802.3中的以太帧格式中携带tag的为802.1Q标准定义,如下所示:

从左到右依次是(VLAN中重点关注802.1QTag字段):

(1)、Preamble:帧前导码;

(2)、SFD:帧开始标识符;

(3)DMAC:目标MAC地址;

(4)SMAC:源MAC地址;


(5)802.1Q Tag:这是一个可选字段,有该字段称为带Tag帧,无该字段称为unTag帧,其中分为四个部分:

EtherType字段:即原来的不带Tag的Type位置,还是Type字段固定为0x8100表示这是一个有Tag的802.1Q帧,之后的解析要先解析2B的Priority、CFI、VID字段;

Priority字段:优先级字段,对于QoS(Quality of Service,服务质量)有用,在网络拥堵、缓存紧张的情况下,端口在接收到数据时,低优先级的数据可能会被drop,高优先级则被缓存下来,但是优先级也是有限度的,当以太交换设备,入口流量过大,出口速率很小的时候,高优先级的数据也会因为缓冲堆积而无法缓存被丢弃掉,当然也有基于端口的IBP入口背压机制和基于此的PFC优先级流控机制来解决拥塞丢包问题,其中就会用到Tag的优先级字段。通常网络中大多数数据帧优先级均为0,不带Tag也就默认为0;而对于VOIP和流媒体的数据帧实时性要求比较高,优先级就会比较高。

CFI字段:标准格式指示,作不同标准的兼容之用;

VID字段:即标识该帧属于哪个VLAN,0~4095个,其中0和4095被保留,只有4094个可以用,且1为默认VLAN,没有划分属于哪个VLAN的交换机端口都默认在VLAN1下;


(6)、Type/Length:以太类型字段,和Tag中的Type不冲突,如该Type为0x0800而Tag的Type为0x8100即为802.1Q的IPV4报文。

(7)、Data:数据字段,为三层以上报文头部和通信数据内容。Data最小为46B,为的是保证最小帧长64B(如图中所示,不包含802.1Q tag的绿色部分),以确保

CSMA /CD算法的有效性。

(8)、FCS:帧校验序列字段,采用CRC循环冗余校验值来填充。一般说FCS错误也称为CRC错误,都指的是数据帧传输有错误(本身错误或传输错误)。

(9)、IFG:以太帧间隙,在一条数据帧的FCS和前导码之间,用于缓冲和流控,IFG根据速率来设,若IFG过小可能导致严重的CRC等问题。


以上便是802.3的以太帧,在加了802.1Q的可选VLAN tag之后实现可携带所属VLAN信息进行数据交互,交换机则是根据Tag信息来决定是否(有可能直接丢弃,后面再会提到)转发(或洪泛)该数据到哪个VLAN中。


3、三种端口模式:

上面分析了802.3以太帧格式以及802.1Q的VLAN Tag格式。下面来说三种对于带Tag标签/不带Tag标签的数据帧有着不同动作的端口类型。分别为:Access(接入)、Trunk(主干)和Hybrid(混合)三种。

我们已经知道了,报文要么是Tag要么是UnTag,但是端口为什么会有三种呢?首先对于交换芯片来说,确实只有Tag和UnTag两种,但是上层需求不同而产生了从软件层面划分的这三种端口属性类型。


以太网交换机的通信是基于端口的通信,其端口类型分为Trunk port(干道端口)、Access port(接入端口)、Hybird port(混合端口)三种。Access port即配置了Access属性的port,在交换组网中,一般用于交换机和用户PC主机相连(但并非只能连PC,如果连Trunk口则连路上有可能会有带Tag的帧),连接用户主机和交换机的链路称为接入链路(Access Link);而Trunk port一般用于交换机之间互连,通过Trunk port相连的链路称为干道链路。Hybird port可以连接交换机和用户主机,也可以连接交换机和交换机,属于两用型,用法当然基本具有Access和Trunk的所有属性。


首先来说这三种port属性的特点:


提前说一点:数据在交换机内部转发,必须带Tag,因为交换机所有端口不一定属于同一个VLAN,必须有Tag的VID来区分目标VLAN,以达到交换机对入口报文的指定VLAN内转发/洪泛,所以入口报文必须在进行FDB查询之前加上Tag。若之前没有Tag,无论是哪种mode的port,都按照端口设置的PVID来打上Tag标签,PVID即默认VID,一般为端口的VID,但不一定是VID;若之前就有Tag则不同mode类型的端口处理方式不同,如下描述:


Access port:只能属于一个VLAN,Access链路上的数据帧是不带VLAN tag的帧(因为Access链路要么是PC->Access port,PC本身不会识别VLAN tag,所以PC->Access port是不会带VLAN tag的;要么是Access port->PC,由于出端口目标是明确的桌面环境,不存在需要带VLAN Tag去区别VLAN,所以Access port->PC也是不需要带VLAN tag的,毕竟PC本质上只能属于一个VLAN)。那么一条数据帧从交换机中转发出去,若出口是Access模式,则必须剥掉802.1Q Tag,若一条数据帧带Tag到达Access口(不是由Access链路到Access口的)则比较是否和PVID相同,相同则接收,也不需再打Tag,否则直接丢弃该数据帧。


Trunk port:可以属于多个VLAN,Trunk上的帧是带tag的帧,目的就是为了区分不同的VLAN,实现不同交换机的同一VLAN间以及跨VLAN的数据通信。若数据帧到达Trunk口带Tag先判断该Trunk口是否允许该Tag中VID的报文通过,允许则直接转发,不允许则丢弃;若数据帧带Tag从交换机Trunk口出来,则比较Tag的VID是否和PVID相等, 相等则剥掉Tag,不相等则直接转发不剥掉Tag(这也就有了Access口和Trunk口连接时Access口会收到带Tag帧的情况了)。


Hybrid port:具备Access和Trunk口的两种特性,这种特性即:①入口untag则打PVID的tag;②入口带tag则判断是否允许进入(允许进入的不止PVID的,还有手动添加的,如某个Hybrid 口PVID为1,但是其允许VID为1~10的通过则即使Tag的VID是5也能被接收转发);③出口带Tag/不带Tag,带Tag为Trunk口的属性,不带Tag为Access/Trunk口的属性,为手动设置(如,一个Hybrid口将VID=10~15的vlan设置UnTag,16~20的VLAN设为Tag,则数据帧出去时,仅根据该配置来决定是否剥掉Tag,而不是比较PVID了,若是在没有设置的情况下,只配置了一个口为Hybrid口,即没有tag和untag的列表,则报文不能从该口出去)。


4、Access与Trunk打Tag与剥Tag的过程:

以下例(如图所示)来说明以太网数据帧在进入和离开Access、Trunk两种不同类型端口时,添加与剥离VLAN tag的步骤。

SW1和SW2各有三个端口,其端口类型与链路类型如图所示,SW1:port3和SW2:port3都是trunk port,SW1:port3属于一个VLAN,而SW2:port3属于两个VLAN。

(2)、入端口和出端口都是Access port:
①当A要给B发送消息,则A发送一个不带tag的数据帧(源MAC:A,目标MAC:B)到达SW1:port1;
②SW1:port1接收到不带tag的数据帧,根据port1所在所在VLAN(VLAN 1),进入交换机之后便加上VLAN tag,标识了该数据帧属于VLAN 1;
③在经过查找FDB表,知道了要将数据帧送给B则必须从SW1:port 2转发出去,经过交换机内部交换芯片处理后到达SW1:port 2即将转发;
④在从SW1:port 2转发出去之前,由于SW1:port 2也是Access port,所以将数据帧的VLAN tag剥离掉,然后发出,则B收到来自A的不带tag的数据帧。



(1)、入端口和出端口有Access port和Trunk port:
①当A要给C发送消息,同样A发送一个不带tag的数据帧(源MAC:A,目标MAC:C)到达SW1:port1;
②SW1:port1接收到不带tag的数据帧,根据port1所在所在VLAN(VLAN 1),进入交换机之后便加上VLAN tag,标识了该数据帧属于VLAN 1;
③经过查找FDB表,知道了要将数据帧送给C则必须从SW1:port 3转发出去,经过交换机内部交换芯片处理后到达SW1:port 3即将转发;
④由于SW1:port 3是Trunk端口,则先检查VLAN tag的VLAN ID是否等于PVID,检查不等于则直接发送【如果VID==PVID则剥离tag再转发】。
⑤SW2:port3接收到从Trunk link上收到的带VLAN tag的数据帧,先解析是否带VLAN tag【如果不带则加上tag信息,tag中的VLAN ID设为PVID】,如果带tag则判断,端口是否允许该tag所标识的VLAN数据进入,允许则进入交换机内部进行交换转发,不允许则丢弃;
⑥在交换机内部通过tag信息的标识,查找FDB表数据到达SW2:port1,由于SW2:port1是一个Access port,所以在数据转发前先将tag剥离掉,在转发给C,则C收到一个不带tag的来自A的数据帧。





5、Access与Trunk实例分析:

接着,我们用思科的Packet Tracer搭建实验环境来验证相关功能。环境如下:

两台接入层交换机Switch0和Switch1其FE0/1~FE0/24均设置为Access 口,且FE0/1~FE0/12均加入VLAN 1,而FE0/13~FE0/24均加入VLAN 2。因此各PC与Server所处VLAN就如图所示清晰明了:PC0、PC2、Server2处于VLAN1;PC1、PC3、Server3处于VLAN2;另外顶端的直接连接在Multilayer Switch0的FE0/1类型为Access port上的Server1属于VLAN3。


主要的配置如下:

①Multilayer Switch0配置:


②Switch0和Switch1除了IP外配置一致:


测试步骤如下:
①在三台服务器上搭建我们的三个Web网站;
②开启三层交换机的ip routing功能,则任何一个主机可以访问任何一台服务器(由于trunk链路的存在,才可以实现跨交换机实现同一VLAN间通信);


③但是当关闭三层交换机的ip routing功能,则主机只能访问本VLAN内Server,不同VLAN的主机不能跨VLAN访问服务器(由于Trunk链路与路由二者均存在,才可以实现不同交换机上不同VLAN间的任意通信)。

总结:

①进入交换机必须带Tag,未带Tag则按PVID加上Tag;

②出交换机端口,Access不能带Tag、Trunk不能带PVID的tag、Hybrid根据Tag表和UnTag表中的VID集合来决定带不带Tag;

③PVID只是用来对端口Tag的添加和剥离有影响,并不能决定是否可以透传转发;转发决定权在于端口是否配置允许VLAN列表。


上述便是对VLAN的基础理论与应用领域的一个概述。很多概念没有细讲,但是基本概念已经很清楚了。基于此,我们或许能够对VLAN有一个基础的认识且产生兴趣文章的目的也就达到了。


本文分享自微信公众号 - 嵌入式C开发(gh_c7f143abdd35)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!