一、vlan的含义
局域网LAN的发展是VLAN产生的基础,因而先介绍一下局域网LAN
由Hub、网桥或交换机等网络设备连接同一网段内的所有节点形成局域网(LAN),通常是一个单独的广播域。处于同一个局域网LAN之内的网络节点之间可以直接通信,处于不同局域网段的设备之间的通信则必须经过路由器才能通信。
上述传统拓扑结构的关键在于用三层设备,即路由器,来隔离不同的LAN,在网络规模增大的情况下存在两个缺陷:
1、路由器数量需要增多,网络时延随之加长,进而导致网络数据传输速度的下降。这主要是因为数据在从一个局域网传递到另一个局域网时,必须经过路由器的路由操作: 路由器根据数据包中的相应信息确定数据包的目标地址,然后再选择合适的路径转发出去。
2、用户是按照它们的物理连接被自然地划分到不同的用户组(广播域)中。这种分割方式并不是根据工作组中所有用户的共同需要和带宽的需求来进行的。因此,尽管不同的工作组或部门对带宽的需求有很大的差异,但它们却被机械地划分到同一个广播域中争用相同的带宽。
综上两点,必须选出一种隔离广播域的方式,兼备下述两点
1、可以不用通过路由器来隔离不同广播域
2、可以突破地理位置的限制,在逻辑上划分出不同的广播域
这就是VLAN,IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。
带 VLAN 的交换机的端口分为两类:
1、Access port
这些端口被打上了 VLAN Tag。离开交换机的 Access port 进入计算机的以太帧中没有 VLAN Tag,这意味着连接到 access ports 的机器不会觉察到 VLAN 的存在。离开计算机进入这些端口的数据帧被打上了 VLAN Tag。
2、Trunk port
有多个交换机时,组A中的部分机器连接到 switch 1,另一部分机器连接到 switch 2。要使得这些机器能够相互访问,你需要连接两台交换机。 要避免使用一根电缆连接每个 VLAN 的两个端口,我们可以在每个交换机上配置一个 VLAN trunk port。Trunk port 发出和收到的数据包都带有 VLAN header,该 header 表明了该数据包属于那个 VLAN。因此,只需要分别连接两个交换机的一个 trunk port 就可以转发所有的数据包了。通常来讲,只使用 trunk port 连接两个交换机,而不是用来连接机器和交换机,因为机器不想看到它们收到的数据包带有 VLAN Header。
单台交换机上划分VLAN
多台交换机上划分VLAN
三、vlan的类型
1、基于端口的 VLAN (untagged VLAN - 端口属于一个VLAN,数据帧中没有VLAN tag)
这种模式中,在交换机上创建若干个VLAN,在将若干端口放在每个VLAN 中。每个端口在某一时刻只能属于一个VLAN。一个 VLAN 可以包含所有端口,或者部分端口。每个端口有个PVID (port VLAN identifier)。这种模式下,一个端口上收到的 frame 是 untagged frame,因此它不包含任何有关 VLAN 的信息。VLAN 的关系只能从端口的 PVID 上看出来。交换机在转发 frame 时,只将它转发到相同 PVID 的端口。
如上图所示,连接两个交换机的同一个 VLAN 中的两个计算机需要通信的话,需要在两个交换机之间连两根线:
一根从 Switch A 端口4 到 Switch B 端口 4 (VLAN 1)
一根从 Switch A 端口8 到 Switch B 端口 8 (VLAN 2)
2、Tagged VLANs (数据帧中带有 VLAN tag)
这种模式下,frame 的VLAN 关系是它自己携带的信息中保存的,这种信息叫 a tag or tagged header。当交换机收到一个带 VLAN tag 的帧,它只将它转发给具有同样 VID 的端口。一个能够接收或者转发 tagged frame 的端口被称为 a tagged port。所有连接到这种端口的网络设备必须是 802.1Q 协议兼容的。这种设备必须能处理 tagged frame,以及添加 tag 到其转发的 frame。
上图中,两个交换机上的端口8 支持 VLAN 1 和 2, 因此一根线就可以了实现跨交换机的同VLAN 内的计算机互相通信了。
四、VLAN在交换机中的应用
二层交换机最基本的功能包括:
1、MAC 地址学习
当交换机从它的某个端口收到数据帧时,它将端口的 ID 和帧的源 MAC 地址保存到它的内部MAC表中。这样,当将来它收到一个要转发到该 MAC 地址的帧时,它就知道直接从该端口转发出去了。
2、数据帧转发
交换机在将从某个端口收到数据帧,再将其从某个端口转发出去之前,它会做一些逻辑判断:
a、如果帧的目的 MAC 地址是广播或者多播地址的话,将其从交换机的所有端口(除了传入端口)上转发。
b、如果帧的目的MAC地址在它的内部MAC表中能找到对应的输出端口的话(MAC 地址学习过程中保存的),将其从该端口上转发出去。
c、对其它情况,将其从交换机的所有端口(除了传入端口)上转发(洪泛)。
3、加 VLAN 标签/去 VLAN 标签
a、帧接收
从 trunk port 上收到的数据帧必须是加了标签的。从 access port 上收到的数据帧必须是没有加标签的,否则该帧将会被抛弃。
b、帧处理
根据上述转发流程决定其发出的端口。
c、帧发出
从 trunk port 发出的帧是加了标签的。从 access port 上发出的帧必须是没加标签的。
默认情况下,交换机的所有端口都处于VLAN 1 中,也就相当于没有配置 VLAN。该机制说明如下
1、PC A 发一个帧到交换机的 1 端口,其目的MAC地址为 PC B 的 MAC。
2、交换机比较其目的 MAC 地址和它的内部 MAC Table,发现它不存在(此时表为空)。在决定泛洪之前,它把端口 1 和 PC A 的 MAC 地址存进它的 MAC Table。
3、交换机将帧拷贝多份,分别从2和3端口发出。
4、PC B 收到该帧以后,发现其目的 MAC 地址和他自己的 MAC 地址相同。它发出一个回复帧进入端口3。
5、交换机将 PC B 的 MAC地址和端口3 存在它的 MAC 表中。
6、因为该帧的目的地址为PC A 的 MAC 地址它已经在 MAC 表中,交换机直接将它转发到端口1,达到PC A。
配置了 VLAN 的交换机的该机制类似,只不过:
1、MAC 表格中每一行有不同的 VLAN ID。做比较的时候,拿传入帧的目的 MAC 地址和 VLAN ID 和此表中的行数据相比较。,则选择其 Ports 作为转发出口端口。
2、如果没有吻合的表项,则将此帧从所有有同样 VLAN ID 的 Access ports 和 Trunk ports 转发出去。