一、简介:
VLAN又称为虚拟局域网,它是用来将使用路由器的网络分割成多个虚拟局域网,起到隔离广播域的作用,一个VLAN通常对应一个IP网段,不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。
二、Ethernet 802.1q帧(VLAN 数据帧)
Ethernet 802.1q 帧与传统的Ethernet帧的区别,就是在源Mac地址后面,在长度/协议类型字段之前加入了4个字节的VLAN标签(VLAN TAG)
1、VLAN TAG
VLAN TAG:由TPID(标签协议标识符)和TCI(标记控制信息)组成,其中TCI 包含了PRI、CFI、VID等字段。
标签名 | 长度 | 解释 | |
TPID | 16bit | 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。 | |
PRI | 3bit | Priority,表示数据帧的802.1Q优先级。取值范围为0~7,值越大优先级越高。 | |
CFI | 1bit | CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。 | |
VID | 12bit | VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。 |
三、链路类型与接口类型
常见的链路类型有:接入链路(Access) 和干道链路(Trunk)。
常见接口类型有:Access接口、Trunk接口和Hybrid接口3种接口类型。
1.干道链路(Trunk)
为了实现跨VLAN间通讯,交换机和交换机间使用干道链路(Trunk)进行相连。为了让交换机设备能正确识别在干道链路上通讯的以太网数据帧必须是打上VLAN TAG的VLAN数据帧。所以通常干道链路的两端要设为能给数据帧打上TAG的Trunk接口。
2.接入链路(Access)
某些设备只能收发Untagged帧无标记帧,如:个人主机、服务器、Hub集线器等,这样就要求交换机与这些设备连接使用接入链路(Access),并且与接入链路相通的交换机接口使用可以进行VLAN TAG剥离操作的Access接口。
3.缺省VLAN和本征VLAN
缺省VLAN(华为PVID)和本征VLAN(思科)本质上是同一个概念。这里统称缺省VLAN。
前面提到,设备处理的数据帧都带Tag,当设备收到Untagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。
对于Access接口,缺省VLAN就是该接口被划分到的VLAN,也称被接口允许通过VLAN。
对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN。接口的缺省VLAN和允许通过的VLAN需要分别配置,互不影响。默认的缺省VLAN为VLAN 1。当一个数据帧没有打标签,是一个原始的以太网帧时,它属于缺省VLAN。
缺省VLAN的作用是为了解决无法打vlan标签的设备与能打vlan标签的设备进行通信而存在。
虽然在交换机之间传输不打标签。但在交换机内部会被打上标签,因为只能在本Vlan内部发送广播。
3.接口汇总分析
接口类型 | 对接收不带Tag的报文处理 | 对接收带Tag的报文处理 | 发送帧处理过程 |
Access接口 | 接收该报文,并打上缺省的VLAN ID。 | 当VLAN ID与缺省VLAN ID相同时,接收该报文。 当VLAN ID与缺省VLAN ID不同时,丢弃该报文。 | 先剥离帧的PVID Tag,然后再发送。 |
Trunk接口 | 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。 打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | · 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID与缺省VLAN ID相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。 当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 |
Hybrid接口 | 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。 打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID是该接口允许通过的VLAN ID时,发送该报文。可以通过命令设置发送时是否携带Tag。 |
4.静态VLAN
基于端口的VLAN,即明确指定出各个端口属于哪个VLAN。
5.动态VLAN
基于MAC地址的VLAN:
通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属,属于OSI第二层
例:假定有一个MAC地址“A”被交换机设定为属于VLAN “10”,那么不论MAC地址为“A”的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN 10中去。计算机连在端口1时,端口1属于VLAN 10;而计算机连在端口2时,则是端口2属于VLAN 10。
但是,基于MAC地址的VLAN,在设定时必须调查所连接的所有计算机的MAC地址并加以登录。而且如果计算机交换了网卡,还是需要更改设定。
基于IP地址(子网)的VLAN:
就是通过所连计算机的IP地址,来决定端口所属VLAN的,属于OSI第三层。
例:假定有一个IP地址“A”被交换机设定为属于VLAN “10”,那么这台计算机的IP地址不变,无论它连在交换机哪个端口,该端口都会被划分到VLAN 10中去。计算机连在端口1时,端口1属于VLAN 10;而计算机连在端口2时,则是端口2属于VLAN 10。
因此,与基于MAC地址的VLAN相比,能够更为简便地改变网络结构。
基于用户的VLAN:
根据交换机各端口所连的计算机上当前登录的用户,来决定该端口属于哪个VLAN。
解释:这里的用户识别信息,一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名。这些用户名信息,属于OSI第四层以上的信息。
总的来说,决定端口所属VLAN时利用的信息在OSI中的层面越高,就越适于构建灵活多变的网络。
四、不同VLAN间的通讯
PC0的IP地址:192.168.1.1
PC2的IP地址:192.168.2.1
1.当PC0发送IP协议帧到交换机,此时发送的是传统的以太网Ethemet II帧。
2.当Switch的Fa0/1口配为Access口时,PC0发送的以太网帧会被打上VLAN 10的标签,变成VLAN数据帧。
3.当VLAN数据帧通过Switch的TRUNK口时,发现VLAN 10与缺省VLAN(VLAN 1)不同保持原标签不动发送帧。当三层交换机接收VLAN数据帧,会根据目的IP地址所对应VLAN 标签重新打上新的VLAN 标签,然后发送给交换机对应VLAN的Access口,最后剥离标签,变成普通的以太网帧发送给PC2。
五、思科VLAN相关配置代码
二层交换机
创建VLAN
VLAN <vlan-id>
重命名VLAN
name <vlan-name>
端口分配VLAN
interface <interface-id> #进入接口配置模式#
switchport mode access #将接口设置为访问模式#
switchport access vlan <vlan-id> #接口分配到指定的VLAN#
汇聚链路端口设置(Trunk模式)
interface <interface-id> #进入要配置为 trunk 的接口配置模式#
switchport mode trunk #修改接口为trunk模式#
switchport trunk allowed vlan <vlan-list> #配置允许通过 trunk 的 VLAN#
三层交换机
1.汇聚链路端口设置(Trunk模式)
interface <interface-id> #进入要配置为 trunk 的接口配置模式#
switchport trunk encapsulation dot1q #配置 trunk 的封装协议#
switchport mode trunk #配置接口为 trunk 模式#
2.接口配置IP地址
interface <interface-id> #进入接口配置模式#
no switchport #二层端口提升三层端口#
ip address <ip-address> <subnet-mask> #配置ip#
3.开启路由模式
ip routing #开启路由功能#
4.VLAN配置ip地址
interface vlan <vlan-id> #进入 VLAN 接口配置模式#
ip address <ip-address> <subnet-mask> #配置 VLAN 接口的 IP 地址和子网掩码#