之前在对交换机的介绍中,我们知道交换机的作用就是隔离广播域,在不需要跨网段传输时,在同一子网中转发数据包从而进行通信。实现的核心原理就是在交换机中拥有一张 MAC 表,记录了对应终端设备和接口之间的关系。
今天会在此基础上,介绍 VLAN 的概念,先来看这样一个设计很不好的网络,假设这是一家公司的拓扑图:
可以发现,公司的每个部门之间和核心交换机相连,这就会造成很大的问题:
- 非常大的广播域 – 广播非常消耗资源,特别是广播域很大的情况,比如 HR 部门发送一条广播,市场部,技术部等等部门都会收到。
- 不易于管理,比如 HR 看到的信息,其他部门不应该能看到。
- 安全的威胁,由于所有部门都在一个广播域,当其中一个部门出现安全隐患时,会蔓延到所有部门。
- 不容易排查问题
而 VLAN 的出现就是为了解决上述的问题。
VLAN
VLAN 翻译成中文,是”虚拟局域网”。 LAN 可以是由少数几家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN 所指的 LAN 特指使用路由器分割的网络,也就是广播域。
也就是说,由原来的二层交换机只能构建单一的广播域,通过启用 VLAN 后,能够将网络分割成多个广播域。
在实现上,在交换机内部的 MAC 表,除了有 MAC 地址和对应的接口号外,还多了一列 VLAN 号,用于将广播域隔离开,数据只在 VLAN 号相同的端口进行传递。
VLAN 号的介绍
VLAN TAG 包的 VLAN ID 号,有效范围是 1-4094,0 和 4095 都为协议保留值,VLAN ID 0 表示不属于任何VLAN,但携带 802.1Q 的优先级标签,所以一般被称为 Priority-only frame,其一般作为系统使用,用户不可使用和删除。
1 为系统默认 VLAN,即 Native VLAN。默认情况下,所有的接口都属于 VLAN1. 当交换机收到未带有 VLAN TAG 包的数据帧时,会将数据包转发至 Native VLAN 端口。
2-1001 是普通的 VLAN,1006-1024 保留仅系统使用,用户不能查看和使用,1002-1005是支持 fddi 和令牌环的 VLAN,1025-4095 是扩展的 VLAN。
中继链路:是只承载标记数据(即具有 VLANID 标签的数据包)的干线链路
VLAN 接口的类型
Access:
Access 类型的端口只能属于一个 VLAN,用于连接终端设备。
Trunk:
Trunk 类型的端口可以允许多个 VLAN通过,可以接收和发送多个 VLAN 的报文,用于交换机之间的连接端口。
交换机使用 VLAN 的原理
Access 口的处理过程:
在收到终端设备发送的报文后,会先判断是否带有 VLAN 信息。
1、 如果没有,则加上该端口的 VLAN 号。
1. 接着找到目的 MAC 的端口号,并且 VLAN 号也相同,则进行转发,并去掉加上的 VLAN 信息。
2. 如果找到目的 MAC (比如泛洪全 f),但是对应的接口 VLAN 号不满足,则不进行转发。
2、 如果有,则丢弃(因为 Access 一般和终端设备直连,而 VLAN 信息都是交换机加上的,所以不会有 VLAN 信息。)
现在通过 Access 实现了隔离同一台交换机的之间的广播域隔离,但如果想要在多台交换机隔离又该怎么办呢?
为了实现在多台交换机的隔离,就需要将 VLAN 信息记录下了,然后在传递的交换机进行判断。在之前的数据链路层文章中介绍,用的协议主要是 Ethernet2 和 IEEE 的 802.3. 但对于这两个协议来说,都不能进行标识 VLAN 的信息,所以为了实现在多台交换机上隔离的效果,就在这两个协议中添加了一个 4Byte 的字段,用于表示 VLAN 信息。
其实 Type 字段:表示使用的协议,如 Ox8100 表示 802.1q .
Priority: 优先级字段,对数据帧分类,分级等,QoS 用到。
CFI:表示是否令牌环网数据。
VLAN ID:VLAN 号 (0 – 4095)
有了新添加的 VLAN 信息,将不同交换机连接起来的这条链路,就称为 Trunk 链路。在 Trunk 中,可以预先设置上允许通信的 VLAN 号,在交换机间传递。
这条链路也被成称为中继链路(干路):在同一链路上,可以实现传输所有 VLAN 的数据。
Native VLAN:当交换机收到没有 vlan 的信息数据包中,会将数据包发到默认的 native vlan 中。在连接的交换机中,要保证 native vlan 要一致。
Trunk 口的引入,处理过程:
在 Trunk 口收到数据时:
1、 判断是否有 VLAN 信息。
1. 如果没有则打上端口的 Native VLAN 号,并进行交换转发。
2. 如果有 VLAN 信息,并且该 Trunk 端口允许该 VLAN 的数据进入,则将报文带有原有 VLAN 标记进行转发,否则丢弃。
在 Trunk 口发出数据时:
1、 比较端口的 Native VLAN 号和将要发送报文的 VLAN 号
1. 如果两者相等则剥离 VLAN 信息再发送。(也就是说发送的是本征 VLAN 时,trunk 端口会去除 VLAN 信息)
2. 否则报文将携带原有的 VLAN 标记进行转发。
为同一 接口 配置不同 VLAN 类型
有时会出现这样的情况,为了方便会将多个终端设备接在一起,比如交换机和接口和一个 IP 电话相连,在电话的后面有着一台 PC。
这种意味着在一个 VLAN 中,有着不同种类的流量,一种是普通的数据流量,另一种是语音的流量。
为了区分这种流量,就需要对交换机额外配置下,第一次配置数据流量,第二次配置语音流量。但需要注意的是,虽然是不同类型的 VLAN,但却配置在同一接口下。









