VLAN
1、LAN表示Local Area NetWork,本地局域网,通常使用Hub和Switch来连接LAN中的计算机。或者说,在同一个Hub和Switch的计算机,都在同一个LAN中。
2、一个LAN表示一个广播域,含义是:LAN中的所有成员都会收到任意一个成员发出的广播包。
3、VLAN表示Virtual LAN。
一个带有VLAN功能的switch能够将自己的端口划分成多个LAN。
4、计算机发出的广播包可以被同一个LAN中其他计算机收到,位于其他LAN的计算机则无法收到。
简而言之:VLAN将一个交换机划分成多个交换机,限制广播范围,在二层上将计算机隔离到不同的VLAN中。
例如:
有两组机器A组和B组,如果想配置成A组的机器可以相互访问,B组中的机器也可以相互访问,但是A和B中的机器无法相互访问。
解决方案:
a、使用两个交换机,A和B分别连接一个交换机
b、使用一个带VLAN功能的交换机,将A和B的机器分别存放到不同的VLAN中。
注意:VLAN的隔离是二层上的隔离,A和B无法相互访问指的是二层广播包(比如arp)无法跨越VLAN的边界。但三层上(比如IP)是可以通过路由器让A和B互通的。
5、现今的交换机几乎都支持VLAN。通常交换机的端口有两种配置模式:Access和Trunk.如下图:
Access口:
这些端口被打上VLAN的标签,表示属于哪个VLAN;
不同的VLAN用VLANID来区分,VLANID的范围是1-4096;
Access口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入Access口后,就会被打上所在VLAN的标签。
Access口只能属于一个VLAN。
Trunk口:
假设有两个交换机A和B.
A上有VLAN1(A).VLAN2(B).VLAN3©;B上也有VLAN1,VLAN2,VLAN3。
A组和B组上相同的VLAN之间如何能够通信呢?办法是将A和B连起来,而且连接A和B的端口允许VLAN1、2、3三个VLAN的数据都能够通过。这样的端口就是Trunk口。
而VLAN1,2,3的数据包在通过·Trunk口到达对方交换机的过程中始终带着自己的VLAN标签。
6、KVM下如何实现VLAN:如下图:
eth0是宿主机的物理网卡,有一个命名为eht0.10的子设备与之相连。
eth0.10就是VLAN设备了,其VLANID就是VLAN10.
eth0.10挂在命名为brvlan10的Linux Bridge上,虚机VM1的虚拟网卡vent0也挂在brvlan10上。
这么做的效果是:
宿主机用软件实现了了一个交换机(虚拟的),上面定义了一个VLAN10.
ent0.10,brvlan10和vnet0都分别接到了VLAN10的Access口上。而eth0就是一个Trunk口。
VM1通过vnet0发出的数据包会被打上VLAN10的标签。
eth0.10的作用是:定义了VLAN10.
brvlan10作用是:Bridge上的其他网络设备自动加入到VLAN10中。
增加一个VLAN20,如下图:
这样虚拟交换机就有两个VLAN了,VM1和VM2分别属于VLAN10和VLAN20。
对于新创建的虚机,只需要将其他网卡放入相应的Bridge,就能控制其所属的VLAN。
VLAN设备总是以母子关系出现,母子设备之间是一对多的关系。
一个母设备(eth0)可以有多个子设备(eth0.10,eth0.20…),而一个子设备只有一个母设备。
7、VM1和VM2是ping不通的。
有原因是:
1、VM2向VM1发ping包之前,须知道VM1的IP 192.168.100.10所对应的MAC地址。VM2会在网络上广播ARP包,作用是:询问谁知道192。168.100.10的MAC地址是多少?
2、ARP是二层协议,VLAN的隔离作用使得ARP只能在VLAN20的范围内广播,只有bevlan20和eth0.20能收到,VLAN10里的设备收不到。VM1无法应答VM2发出的ARP包。
3、VM2拿不到VM1vnet0的MAC地址,也就ping不到VM1.
8、Linux Bridge+VLAN=虚拟交换机
a、物理交换机存在多个VLAN,每个VLAN拥有多个端口。
同一个VLAN端口之间可以交换转发,不同VLAN端口之间隔离。所以交换机包含两层功能:交换与隔离。
b、Linux的VLAN设备实现的是隔离功能,但没有交换功能。
一个VLAN母设备(eth0)不能拥有两个相同ID的VLAN子设备,因此也就不可能出现数据交换情况。
c、Linux Bridge专门实现交换。
将同一个VLAN的子设备都挂载到一个Bridge上,设备之间就可以交换数据。
总结:
Linux Bridge加上VLAN在功能上完全模拟现实世界里的二层交换机。
eth0相当于虚拟交换机上的trunk口,允许VLAN10和VLAN20的数据通过。
eth0.10,vnet0和brvlan10都可以看作vlan10的Access口。
eth0.20,vnet1和brvlan20都可以看作vlan20的Access口。
来源:https://blog.csdn.net/AIfurture/article/details/99057479