LAN 表示 Local Area Network ,本地局域网,一般使用 Hub 或者 Switch 来链接LAN 中的计算机。通常来讲,两台计算机连入同一个 Hub 或者 Switch 时,他们就在同一个LAN中。
一个LAN 表示一个广播域。其含义是:LAN中的全部成员都会受到任意一个成员发出的广播包。
VLAN 表示 Virtual LAN。一个带有VLAN 功能的 Switch 可以将本身的端口划分出多个LAN。计算机发出的广播包能够被同一个LAN中的其余计算机收到,但位于其余LAN的计算机则没法收到。简单的说,VLAN将一个交换机分红了多个交换机,限制了广播的范围,在二层将计算机隔离到不一样的VLAN中。
比方说,有两组机器,Group A 和 Group B ,咱们想配置成Group A 中的机器能够互相访问,Group B 中的机器也能够互相访问,可是 Group A 和 Group B 中的机器没法互相访问。一种方法是使用两个交换机,A和B分别接到不一样的交换机上。另外一种方法是使用一个带VLAN功能的交换机,将 A 和 B的机器分别接到不一样的VLAN中。
请注意,VLAN的隔离是二层上的隔离,A 和 B 没法互相访问指的是二层广播包(好比arp)没法跨域VLAN的边界。但在三成上(好比IP)是能够经过路由器让A 和 B 互通的。概念上必定要分清楚。
如今的交换机几乎都是支持VLAN的。一般交换机的端口有两种配置模式: Access 和 Trunk,以下图
Access 口
这些口被打上了VLAN的标签,代表该端口属于哪一个VLAN。不一样VLAN用VLAN ID 来区分,VLAN ID 的范围是 1- 4096 。Access 口都是直接与计算机网络相连的,这样从该网卡出来的数据包流入 Access口后就被打上了所在的VLAN 标签。Access 口只能属于一个VLAN。
Trunk 口
架设有两个交换机 A 和 B 。A上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);B 上也有VLAN一、二、3,那如何让 AB 上相同的VLAN之间可以通讯呢?
办法是将 A 和 B 连起来,并且链接 A 和 B 的端口要容许 VLAN一、二、3 这三个VLAN的数据经过。这样的端口就是 Trunk 口了。VLAN 一、二、3 的数据包在经过Trunk 口到达对方交换机的过程当中始终带着本身的VLAN 标签。
了解了VLAN的概念以后,咱们来看KVM虚拟化环境下是如何实现 VLAN 的,见下图
eth0 数宿主机上的物理网卡,有一个命名为 eth0.10的自身与之相连。
eth0.10 就是VLAN设备了,其VLAN ID 就是 VLAN10
eth0.10 古仔命名为 brvlan10 的Linux Bridge上,虚机VM1 的虚拟网卡vnet0也挂载brvlan10 上。
这样配置的效果就是:宿主机用软件实现了一个交换机(虚拟的),上面定义了一个VLAN10 。 eth0.10 、brvlan10 和 vnet0 都分别接到了 VLAN 10 的Access 口上。而eth0 就是一个 Trunk口。VM1 经过 vnet0 发出来的数据包会被打上 VLAN10 的标签。
eth0.10 的做用是:定义了VLAN10
brvlan10 的做用是:Bridge 上链接的其余设备自动加入到 VLAN10 中。
下面咱们在增长一个 VLAN20 ,如图
这样虚拟交换机就有两个VLAN了,VM1 和 VM2分别属于 VLAN10 和 VLAN 20 。对于新建立的虚机,只须要将其虚拟网卡放入对应的 Bridge中,就能使用其所属的 VLAN。
VLAN 设备老是以母子关系出现,母子设备之间是一对多的关系。
一个母设备(eth0),能够有多个子设备(eth0.10 eth0.20 ....),而一个子设备只有一个母设备。