💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ### **为什么需要VLAN** VLAN全称叫Virtual Local Area Network(虚拟局域网),它的两个主要作用是 * 提高网络效率 在上一节中,我们讲到,交换机在转发数据帧时,如果帧的目的MAC地址没有在转发表中匹配到,交换机便会把数据帧从交换机的所有端口(除接收端口)转发出去,这很容易造成网络拥塞。 * 增加安全性 如果一个公司所有部门的个人电脑都连在一个交换机上,而不同部门之间不允午进行通信,那么通过VLAN就可以做到网络隔离,增加安全性。 ### **VLAN的协议头** VLAN 技术通过给数据帧插入**VLAN 标签**(又叫`VLAN TAG`)的方式,让交换机能够分辨出各个数据帧所属的 VLAN 。 VLAN 标签是用来区分数据帧所属 VLAN 的,是 4 个字节长度的字段,插入到以太网帧头部上。VLAN 标签会插入到源 MAC 地址后面,**IEEE 802.1Q**标准有这个格式定义和字段构成说明。 ![](https://img.kancloud.cn/86/25/86258e103ae811592d55afbe246b3cf1_704x413.png) * TPID (标签协议标识符):长度 2 个字节,值为`0x8100`,用来表示这个数据帧携带了 802.1Q 标签。不支持 802.1Q 标准的设备收到这类数据帧,会把它丢弃。 * TCI (标签控制信息): 长度 2 个字节,又分为三个子字段,用来表示数据帧的控制信息: * 优先级( Priority ):长度为 3 比特,取值范围`0 ~ 7`,用来表示数据帧的优先级。取值越大,优先级越高。当交换机发送拥塞是,优先转发优先级高的数据帧。 * CFI (规范格式指示器):长度为 1 比特,取值非 0 即 1 。 * **VLAN ID**( VLAN 标识符):长度为 12 比特,用来表示 VLAN 标签的数值。取值范围是`0 ~ 4093`。 ### **交换机端口类型及数据帧的转发** 在介绍这交接机的端口类型前,我们需要了解以下的知识: 1、带VLAN-TAG的数据帧只存在于交换机内,主机是识别不了这类数据帧的;当交换机把数据帧从端口发送给宿主机时,必须去掉VLAN-TAG转换成普通的数据帧 2、交换机内部的数据帧是一定带有VLAN-TAG的;从交换机发送出去(可以发给主机可能发给交换机)的数据帧可以带或不带VLAN-TAG 3、交换机的每个端口都有一个默认VLAN 接下来,我们来介绍下交换机的端口类型,有三类:Access、Trunk、Hyprid。三种类型的端口对数据包的详细处理流程,可以参考[此文](https://yq.aliyun.com/articles/557175),我们来详细分析一下。 * Access端口 Access端口一般用于连接PC,这类端口只能设置一个VLAN-ID,这个VLAN-ID就是它的默认VLAN。一般它的配置命令如下: ``` port link-type access port default 1 ``` 当端口接收到数据帧时,判断这个数据帧是否带有VLAN-ID:如果没有则打上自己的默认VLAN,然后给交换机进行转发;如果有则判断是否和自己的默认VLAN是否一致,不一致则丢弃,一致则转发。 当端口要发送数据帧时,判断这个数据帧的VLAN-ID(交换机内部的数据帧一定有VLAN-ID)是否与自己的默认VLAN是否一致:不一致则丢弃;一致则去掉VLAN-ID(就是去掉VLAN-TAG那两个字节,转换为普通数据帧),然后发送出去。 比如说,如下一台交换机连了四台PC,我们把交换机的四个端口都设置为Access端口,A、C端口的默认VLAN设置为1,B、D端口的默认VLAN设置为2。接下来,我们看一下数据帧的转发流程。 ![](https://img.kancloud.cn/ed/03/ed03a68d04967a55db70a277cf2f1781_531x144.png) 当PC1向PC3发送一个数据帧时,数据帧到达交换机端口A处,端口A发现数据帧没有VLAN信息,于是给它添加上自己的默认VLAN,然后交由交换机进行转发;交换机查询转发表,如果没有找到转发条目,则把数据帧从交给BCD端口进行转发;C端口收到需要发送的数据帧,发现这个数据帧的VLAN-ID和自己的默认VLAN一致,于是去掉数据帧的VLAN信息转换为普通帧再发送出去;BD端口收到需要发送的数据帧,发现这个数据帧的VLAN-ID和自己的默认VLAN不一致,于是就丢弃这个数据帧。 * Trunk端口 Trunk端口一般用来连接交换机,这类端口可以允许多个VLAN的数据帧通过。这类端口的配置命令一般为 ``` port link-type trunk port default 1 port allow-pass 2 3 4 ``` 当端口接收到数据帧时,判断数据帧是否携带VLAN信息:(1)如果数据帧未携带VLAN信息,则为数据帧添加自己的默认VLAN,然后交由交换机进行转发(2)如果数据帧的VLAN-ID如果不在自己的白名单(default与allow-pass)则丢弃;否则进行转发(注意:接收操作是不会更改数据帧的VLAN-ID) 当端口发送数据帧时,判断数据帧的VLAN-ID:(1)如果数据帧的VLAN-ID不在自己的白名单中,则丢丢弃(2)如果数据帧的VLAN-ID和自己的默认VLAN一致,则去掉数据帧的VLAN信息再进行发送(3)如果数据帧的VLAN-ID与自己的默认VLAN不一致,而在自己的allow-pass中,则直接发送。 比如说,如下两台交换机,连接了四台PC;A1、A2、B1、B2为Access类型端口,A3、B3为Trunk类型接口,A3、B3的默认VLAN为3,允许通过VLAN 1和2的数据帧。接下来,我们来分析一下数据帧的转发流程。 ![](https://img.kancloud.cn/6e/0c/6e0cd7efdce31e5d9e75969e2d621d8a_690x143.png) 比PC1向PC3发送数据帧,当数据帧到达A1时,A1端口为数据帧添加VLAN-ID 1,然后交给交换机进行转发;交换机查找转发表,如果没有找到转发条目,则将数据帧发给A2 A3端口;A3端口在发送前,发现这个数据帧的VLAN-ID和自己的默认VLAN不一样但在自己的allow-paas中,于是原封不动地发送出去;B3接收到后,发现数据帧在自己的allow-paas中,于是交给交换机B转发;交换机B检查转发表,如果没有匹配上转发条目则发给端口B1 B2;B1发送前,发现数据帧的VLAN-ID为1,与自己的默认VLAN一致,于是去掉数据帧的VLAN信息后,再发送出去。 另外,如果把上面的A3B3的默认VLAN设置为2,我们会发现PC1和PC3是没有办法正常通信的。 * Hyprid端口 。。。 * 总结 。。。 ### **参考** * https://mp.weixin.qq.com/s/vyyFHSL2aWgSr3APXL8x6g * https://yq.aliyun.com/articles/400955?spm=a2c4e.11153940.0.0.7a1a1a2ecLhtCV * https://zhuanlan.zhihu.com/p/82913168 * https://www.html.cn/qa/other/20107.html * https://yq.aliyun.com/articles/557175