1、 VLAN 的帧格式
传统的以太网数据帧在目的 MAC地址和源 MAC 地址之后封装的是上层协议的类型字段。
传统的以太网数据帧格式
802.1q 帧格式
每台支持 802.1q 协议的交换机发送的数据包都会包含VLAN ID,以指明交换机属于哪一个 VLAN。因此,在一个VLAN交换网络中,以太网帧有以下两种形式:
·有标记帧(tagged frame):加入了4 字节 802.1qTag 的帧
·无标记帧(untagged frame):原始的、未加入4 字节 802.1qTag 的帧
2、 链路类型
VLAN 中有以下两种链路类型:
·接入链路(Access Link):用于连接用户主机和交换机的链路。
通常情况下,主机并不需要知道自己属于哪个 VLAN,主机硬件通常也不能识别带有VLAN 标记的帧。因此,主机发送和接收的帧都是 untagged帧。
·干道链路(Trunk Link):用于交换机间的互连或交换机与路由器之间的连接。
干道链路可以承载多个不同 VLAN数据,数据帧在干道链路传输时,干道链路的两端设备需要能够识别数据帧属于哪个VLAN,所以在干道链路上传输的帧都是Tagged 帧。
说明:
对于主机来说,它不需要知道 VLAN 的存在。主机发出的是untagged 报文。
交换设备接收到报文后,根据配置规则(如接口信息)判断出报文所属的 VLAN后,再进行处理。
如果报文需要通过另一台交换机转发,则该报文必须通过干道链路透传到对端交换设备上。
为了保证其它交换设备能够正确处理报文中的 VLAN信息,在干道链路上传输的报文必须都打上了 VLAN 标记。
·当交换设备最终确定报文出接口后,将报文发送给主机前,需要将 VLAN标记从帧中删除,这样主机接收到的报文都是不带 VLAN标记的以太网帧。
所以,一般情况下,干道链路上传输的都是tagged 帧,接入链路上传送到的都是 untagged帧。这样处理的好处是:网络中配置的 VLAN信息可以被所有交换设备正确处理,而主机不需要了解VLAN信息。
3、接口类型
在 802.1Q 中定义VLAN 帧后,设备的有些接口可以识别 VLAN帧,有些接口则不能识别 VLAN帧。
根据对VLAN 帧的识别情况,将接口分为 4类:
· Access 接口:
Access 接口是交换机上用来连接用户主机的接口,它只能连接接入链路。
仅仅允许唯一的 VLAN ID 通过本接口,这个VLAN ID 与接口的缺省 VLANID 相同,Access 接口发往对端设备的以太网帧永远是不带标签的帧。
· Trunk 接口
Trunk 接口是交换机上用来和其他交换机连接的接口,它只能连接干道链路,允许多个VLAN 的帧(带 Tag标记)通过。
· Hybrid 接口
Hybrid 接口是交换机上既可以连接用户主机,又可以连接其他交换机的接口
Hybrid 接口既可以连接接入链路又可以连接干道链路。Hybrid接口允许多个 VLAN 的帧通过,并可以在出接口方向将某些VLAN 帧的 Tag剥掉。
· QinQ 接口
QinQ(802.1Q-in-802.1Q)接口是使用QinQ 协议的接口。QinQ接口可以给帧加上双重 Tag,即在原来Tag 的基础上,给帧加上一个新的 Tag,从而可以支持多达4094× 4094个 VLAN(不同的产品支持不同的规格),满足网络对VLAN数量的需求。
QinQ 帧的格式如图所示。外层的标签通常被称作公网Tag,用来存放公网的 VLANID。内层标签通常被称作私网 Tag,用来存放私网的VLAN ID。
4、缺省 VLAN
每种类型的接口都可以配置一个缺省 VLAN,对应的VLAN ID 为 PVID(PortDefault VLAN ID)。接口类型不同,缺省VLAN的含义也有所不同。
可以基于接口、 MAC 地址、子网、网络层协议、匹配策略方式来划分VLAN。
VLAN 划分方式
|
原理
|
优点
|
缺点
|
基于接口
|
根据交换设备的接口编号来划分VLAN。 网络管理员给交换机的每个接口配置不同的 PVID,即一个接口缺省属于的 VLAN。 当一个数据帧进入交换机接口时,如果没有带 VLAN 标签,且该接口上配置了 PVID,那么,该数据帧就会被打上接口的 PVID。 如果进入的帧已经带有 VLAN标签,那么交换机不会再增加VLAN 标签,即使接口已经配置了 PVID。 对VLAN帧的处理由接口类型决定。 |
定义成员简单。
|
成员移动需重新配置 VLAN。
|
基于 MAC 地址
|
根据计算机网卡的MAC地址来划分VLAN。 网络管理员成功配置 MAC 地址和VLAN ID 映射关系表,如果交换机收到的是 untagged(不带 VLAN 标签)帧,则依据该表添加 VLAN ID。 |
当终端用户的物理位置发生改变,不需要重新配置 VLAN。提高了终端用户的安全性和接入的灵活性。
|
只适用于网卡不经常更换、网络环境较简单的场景中。 需要预先定义网络中所有成员。 |
基于子网划分
|
如果交换设备收到的是 untagged(不带 VLAN 标签)帧,交换设备根据报文中的 IP 地址信息,确定添加的VLAN ID
|
将指定网段或 IP 地址发出 的 报 文 在 指 定 的VLAN 中传输,减轻了网络管理者的任务量,且有利于管理 |
网络中的用户分布需要有规律,且多个用户在同一个网段。 |
基于协议划分
|
根据接口接收到的报文所属的协议(族)类型及封装格式来给报文分配不同的 VLAN ID。
|
基于协议划分 VLAN,将网络中提供的服务类型与 VLAN 相绑定,方便管理和维护。
|
需要对网络中所有的协议类型和VLAN ID的映射关系表进行初始配置。 需要分析各种协议的地址格式并进行相应的转换,消耗交换机较多的资源,速度上稍具劣势。 |
基 于 匹 配 策 略(MAC 地址、 IP地址、接口)
|
基于匹配策略划分 VLAN 是指在交换机上配置终端的 MAC 地址和 IP地址,并与 VLAN 关联。只有符合条件的终端才能加入指定VLAN。符合策略的终端加入指定VLAN 后,严禁修改 IP 地址或 MAC地址,否则会导致终端从指定 VLAN中退出。 |
安全性非常高,基于 MAC 地址和 IP地址成功划分VLAN 后,禁止用户改变 IP 地址或MAC 地址。 相较于其他 VLAN划分方式,基于MAC 地址和 IP 地址组合策略划分VLAN 是优先级最高的 VLAN 划分方式。 |
针对每一条策略都需要手工配置。
|
如果设备同时支持多种方式划分 VLAN,优先级顺序从高至低依次是:
基于匹配策略划分 VLAN->基于MAC 地址划分 VLAN和基于子网划分 VLAN->基于协议划分VLAN->基于接口划分VLAN。
·基于 MAC 地址划分VLAN 和基于子网划分 VLAN拥有相同的优先级。
缺省情况下,优先基于 MAC地址划分 VLAN。但是可以通过命令改变基于MAC 地址划分VLAN 和基于子网划分VLAN 的优先级,从而决定优先划分 VLAN的方式。
·基于接口划分 VLAN 的优先级最低,但是最常用的VLAN 划分方式。
·基于匹配策略划分 VLAN 的优先级最高,但是最不常用的VLAN 划分方式。
划分 VLAN 的实现流程图
VLAN基本通信原理
为了提高处理效率,交换机内部的数据帧一律都带有VLAN Tag,以统一方式处理。
当一个数据帧进入交换机接口时,如果没有带VLAN Tag,且该接口上配置了 PVID(PortDefault VLAN ID),那么,该数据帧就会被标记上接口的 PVID。如果数据帧已经带有VLAN Tag,那么,即使接口已经配置了 PVID,交换机不会再给数据帧标记VLAN Tag。
由于接口类型不同,交换机对帧的处理过程也不同。下面根据不同的接口类型分别介绍
VLAN内跨越交换机通信原理
有时属于同一个 VLAN 的用户主机被连接在不同的交换机上。当VLAN 跨越交换机时,就需要交换机间的接口能够同时识别和发送跨越交换机的VLAN 报文。这时,需要用到 TrunkLink 技术。
Trunk Link 有两个作用:
中继作用:把 VLAN 报文透传到互联的交换机
干线作用:一条 Trunk Link 上可以传输多个VLAN 的报文。
如图所示的网络中,为了让 DeviceA和 DeviceB 之间的链路既支持VLAN2 内的用户通讯又支持 VLAN3内的用户通讯,需要配置连接接口同时加入两个 VLAN。即应配置DeviceA 的以太网接口 Port2和 DeviceB 的以太网接口Port1 同时加入 VLAN2和 VLAN3。
当用户主机 Host A 发送数据给用户主机Host B 时,数据帧的发送过程如下:
1. 数据帧首先到达DeviceA 的接口 Port4。
2. 接口 Port4给数据帧加上 Tag,Tag 的 VID字段填入该接口所属的 VLAN 的编号2。
3. DeviceA查询自己的MAC地址表中是否存在目的地址为DeviceB的MAC地址的转发表项。·如果存在, DeviceA 将数据帧转发给接口Port2。·如果不存在, DeviceA 会将数据帧发送到本设备上除port4 接口外的所有属于 VLAN2的接口。
4. 接口Port2 将帧转发到 DeviceB上。
5. DeviceB 收到数据帧后,会查询自己的MAC 地址表中是否存在目的地址为 HostB 的 MAC地址的转发表项。
·如果存在, DeviceB 会将数据帧发送给出接口Port3。
·如果不存在, DeviceB 会将数据帧发送到本设备上除port1 接口外的所有属于 VLAN2的接口。
6. 接口Port3 将数据帧发送给主机 HostB。
VLAN间通信原理
划分 VLAN 后,不同VLAN 之间不能直接通信。如果要实现 VLAN间通信,可以采取以下方案:
方式一:子接口
如图所示,DeviceA 为支持配置子接口的三层设备, DeviceB为二层交换设备。LAN 通过DeviceB的以太网接口(交换式以太网接口)与 DeviceA 的以太网接口(路由式以太网接口)相连。用户主机被划分到两个VLAN:VLAN2和VLAN3。可通过如下配置实现VLAN 间互通。
在 DeviceA 的以太网接口(与DeviceB 相连的以太网接口)上创建 2个子接口 Port1.1和Port2.1,并配置802.1Q封装与 VLAN2 和VLAN3 分别对应。
配置子接口的 IP 地址,保证两个子接口对应的IP 地址路由可通。
将 DeviceB 与DeviceA 相连的以太网接口类型配置为 Trunk或 Hybrid 类型,允许VLAN2和 VLAN3的帧通过。
将用户设备的缺省网关设置为所属 VLAN 对应子接口的IP 地址
1.主机A 和 C的通信过程如下:1. 主机 A将主机 C 的IP 地址和自己所在网段进行比较,发现主机 C和自己不在同一个子网。
2. 主机A 发送 ARP请求给自己的网关 DeviceA,请求网关的MAC 地址。
3. DeviceA 收到该ARP 请求后,返回 ARP应答报文,报文中源 MAC 地址为VLAN2 对应子接口的 MAC地址。
4. 主机A 学习到网关的 MAC地址。
5. 主机A向网关发送目的 MAC为子接口MAC地址、目的 IP为主机 C的IP 地址的报文。
6. DeviceA 收到该报文后进行三层转发,发现主机C 的 IP地址为直连路由,报文将通过VLAN3 关联的子接口进行转发。
7. DeviceA 作为VLAN3 内主机的网关,向 VLAN3内发送一个 ARP 广播,请求主机C的 MAC地址。
8. 主机C 收到网关发送的 ARP广播后,对此请求进行 ARP 应答。
9. 网关收到主机C 的应答后,就把主机 A的报文发送给主机 C。主机A 之后要发给 C的报文都先发送给网关,由网关做三层转发。
方式二:VLANIF接口
三层交换技术是将路由技术与交换技术合二为一的技术,在交换机内部实现了路由,提高了网络的整体性能。三层交换机通过路由表传输第一个数据流后,会产生一个MAC 地址与 IP地址的映射表。当同样的数据流再次通过时,将根据此表直接从二层通过而不是通过三层,从而消除了路由器进行路由选择而造成的网络延迟,提高了数据包转发效率。
为了保证第一次数据流通过路由表正常转发,路由表中必须有正确的路由表项。因此必须在三层交换机上部署三层接口并部署路由协议,实现三层路由可达。VLANIF 接口由此而产生。VLANIF接口是三层逻辑接口,可以部署在三层交换机上,也可以部署在路由器上。在图 所示的网络中,交换机上划分了 2个 VLAN:VLAN2 和 VLAN3。可通过如下配置实现VLAN 间互通。
在Device 上创建 2个 VLANIF 接口并配置VLANIF 接口的 IP地址,保证两个 VLANIF接口对应的IP 地址路由可通。
将用户设备的缺省网关设置为所属VLAN 对应 VLANIF接口的 IP 地址。
1.主机A 和 C的通信过程如下:1. 主机 A将主机 C 的IP 地址和自己所在网段进行比较,发现主机 C和自己不在同一个子网。
2. 主机A 发送 ARP请求给自己的网关 Device,请求网关的MAC 地址。
3 Device 收到该ARP 请求后,返回 ARP应答报文,报文中源 MAC 地址为VLANIF2 的MAC地址。
4. 主机A 学习到网关的 MAC地址。
5. 主机A 向网关发送目的 MAC为 VLANIF 接口MAC 地址、目的 IP为主机 C 的IP 地址的报文。
6. Device 收到该报文后进行三层转发,发现主机C 的 IP地址为直连路由,报文将通过
VLANIF3 接口进行转发。
7. Device 作为VLAN3 内主机的网关,向 VLAN3内发送一个 ARP 广播,请求主机C 的
MAC 地址。
8. 主机C 收到网关发送的 ARP广播后,对此请求进行 ARP 应答。
9. 网关收到主机C 的应答后,就把主机 A的报文发送给主机 C。主机A 之后要发给 C的报文都先发送给网关,由网关做三层转发。
产生背景:
交换网络中, VLAN 技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。但是在一般的三层交换机中,通常是采用一个VLAN 对应一个三层逻辑接口的方式实现广播域之间的互通,这样导致了IP 地址的浪费。例如,设备内 VLAN划分如图所示。
如表所示, VLAN2 预计未来有10 个主机地址的需求,给其分配一个掩码长度是 28的子网1.1.1.0/28,其中1.1.1.0 为子网号, 1.1.1.15为子网定向广播地址,这两个地址都不能用作主机地址,此外 1.1.1.1作为子网缺省网关地址也不可作为主机地址,剩下范围在 1.1.1.2~1.1.1.14的地址可以被主机使用,共 13 个。这样,尽管VLAN2 只需要 10个地址,但是按照子网划分却要分给它 13个地址。
同理, VLAN3 预计未来有5 个主机地址的需求,至少需要分配一个掩码长度是 29的子网 1.1.1.16/29。VLAN4预计未来只有 1 个主机,则分配一个掩码长度是30 的子网 1.1.1.24/30。
上述 VLAN 一共需要10+5+1=16个地址,但是按照普通 VLAN 的编址方式,即使最优化的方案也需要占用16+8+4=28个地址,浪费了将近一半的地址。而且,如果 VLAN2 后来并没有10 台主机,而实际只接入了 3台主机,那么多出来的地址也会因不能再被其他 VLAN 使用而被浪费掉。
同时,这种划分也给后续的网络升级和扩展带来了很大不便。假设 VLAN4今后需要再增加 2 台主机,而又不愿意改变已经分配的IP 地址。并且在 1.1.1.24后面的地址已经分配给了其他人的情况下,只能再给 VLAN4的新用户重新分配一个的 29位掩码的子网和一个新的VLAN。这样 VLAN4中的客户虽然只有3 台主机,但是却被分配在两个子网中,并且也不在同一个VLAN 内,不利于网络管理。
综上所述,很多 IP 地址被子网号、子网定向广播地址、子网缺省网关地址消耗掉,而不能用于VLAN内的主机地址。同时,这种地址分配的约束也降低了编址的灵活性,使许多闲置地址也被浪费掉。为了解决这一问题VLAN Aggregation 就应运而生。
实现原理
VLAN Aggregation(VLAN聚合,也称 Super VLAN)技术就是在一个物理网络内,用多个VLAN隔离广播域,使不同的 VLAN属于同一个子网。它引入了 Super-VLAN 和Sub-VLAN 的概念。
Super-VLAN:和通常意义上的VLAN 不同,它只建立三层接口,与该子网对应,而且不包含物理接口。可以把它看作一个逻辑的三层概念—若干 Sub-VLAN 的集合。
Sub-VLAN:只包含物理接口,用于隔离广播域的 VLAN,不能建立三层 VLAN 接口。它与外部的三层交换是靠 Super-VLAN 的三层接口来实现的。
一个 Super-VLAN 可以包含一个或多个保持着不同广播域的Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个 Super-VLAN 中,无论主机属于哪一个Sub-VLAN,它的 IP地址都在Super-VLAN 对应的子网网段内。
这样, Sub-VLAN 间共用同一个三层接口,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的。消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。
仍以表所示例子进行说明。用户需求不变。仍旧是VLAN2 预计未来有 10个主机地址的需求,VLAN3 预计未来有5 个主机地址的需求,VLAN4预计未来有 1 个主机地址的需求。
按照 VLANAggregation 的实现方式,新建 VLAN10 并配置为Super-VLAN,给其分配一个掩码长度是 24的子网1.1.1.0/24,其中1.1.1.0 为子网号, 1.1.1.1为子网网关地址如图所示。Sub-VLAN(VLAN2、VLAN3、 VLAN4)的地址划分如表 所示。
VLAN Aggregation 的实现中,各Sub-VLAN 间的界线也不再是从前的子网界线了,它们可以根据其各自主机的需求数目在Super-VLAN 对应子网内灵活的划分地址范围。
从表中可以看到, VLAN2、VLAN3 和 VLAN4共用同一个子网(1.1.1.0/24)、子网缺省网关地址(1.1.1.1)和子网定向广播地址(1.1.1.255)。这样,普通VLAN 实现方式中用到的其他子网号(1.1.1.16、1.1.1.24)和子网缺省网关(1.1.1.17、1.1.1.25),以及子网定向广播地址(1.1.1.15、1.1.1.23、1.1.1.27)就都可以用来作为主机 IP地址使用。
这样, 3 个VLAN 一共需要 10+5+1=16个地址,实际上在这个子网里就刚好分配了 16 个地址给(1.1.1.2~1.1.1.17)。这16 个主机地址加上子网号(1.1.1.0)、子网缺省网关(1.1.1.1)和子网定向广播地址(1.1.1.255),一共用去了19 个 IP地址,网段内仍剩余 255-19=236的地址可以被任意 Sub-VLAN 内的主机使用。
VLAN 间通信
VLAN Aggregation 在实现不同VLAN 间共用同一子网网段地址的同时也带来了 Sub-VLAN间的三层转发问题。
普通VLAN 实现方式中, VLAN间的主机可以通过各自不同的网关进行三层转发来达到互通的目的。但是VLANAggregation 方式下,同一个 Super-VLAN 内的主机使用的是同一个网段的地址和共用同一个网关地址。即使是属于不同的Sub-VLAN 的主机,由于它们同属一个子网,彼此通信时只会做二层转发,而不会通过网关进行三层转发。而实际上不同的Sub-VLAN的主机在二层是相互隔离的,这就造成了 Sub-VLAN间无法通信的问题。
解决这一问题的方法就是使用ARP Proxy。
·不同 Sub-VLAN 间的三层互通
例如,Super-VLAN(VLAN10)包含Sub-VLAN(VLAN2和 VLAN3),具体组网如图所示。
ARP Proxy 实现不同Sub-VLAN 间的三层互通组网图
VLAN2 内的主机A 与 VLAN3内的主机 B 的通信过程如下:(假设主机A 的 ARP表中无主机 B 的对应表项并且网关上使能了Sub-VLAN 间的 ARPProxy)。
1. 主机A 将主机 B的 IP 地址(1.1.1.3)和自己所在网段1.1.1.0/24 进行比较,发现主机B和自己在同一个子网,但是主机A 的ARP 表中无主机 B的对应表项。
2. 主机A 发送 ARP广播,请求主机 B 的MAC 地址。
3. 主机 B并不在 VLAN2 的广播域内,无法接收到主机A 的这个 ARP请求。
4. 由于网关上使能 Sub-VLAN 间的 ARP Proxy,当网关收到主机A 的 ARP请求后,开始在路由表中查找,发现 ARP请求中的主机B 的 IP地址(1.1.1.3)为直连接口路由,则网关向所有其他Sub-VLAN 接口发送一个 ARP广播,请求主机B 的MAC 地址。
5. 主机 B收到网关发送的 ARP 广播后,对此请求进行ARP 应答。
6. 网关收到主机 B的应答后,就把自己的 MAC 地址当作B 的 MAC地址回应给主机 A。
7. 网关和主机 A的 ARP 表项中都存在主机B 的对应表项。
8. 主机A 之后要发给 B的报文都先发送给网关,由网关做三层转发。主机B 发送报文给主机 A的过程和上述的 A 到B 的报文流程类似,不再赘述。
·Sub-VLAN 与外部网络的二层通信
在基于接口的VLAN 二层通信中,无论是数据帧进入接口还是从接口发出都不会有针对Super-VLAN的报文。如图所示。
从 HostA 侧Port1 进入设备 Switch1的帧会被打上 VLAN2 的Tag,在设备 Switch1中这个 Tag不会因为VLAN2 是VLAN10的 Sub-VLAN 而变为VLAN10 的 Tag。该数据帧从Trunk 类型的接口 Port3出去时,依然是携带 VLAN2 的Tag。
也就是说,设备 Switch1 本身不会发出VLAN10 的报文。就算其他设备有 VLAN10的报文发送到该设备上,这些报文也会因为设备 Switch1 上没有VLAN10 对应物理接口而被丢弃。
Super-VLAN 中是不存在物理接口的,这种限制是强制的,表现在:
§如果先配置了 Super-VLAN,再配置Trunk 接口时, Trunk的 VLAN allowed 表项里就自动滤除了Super VLAN。
如图所示,虽然 Switch1 的Port3 允许所有的 VLAN通过,但是也不会有做为Super-VLAN 的VLAN10 的报文从该接口进出。
§如果先配好了 Trunk 接口,并允许所有VLAN 通过,则在此设备上将无法配置 SuperVLAN。本质原因是有物理接口的VLAN 都不能被配置为 SuperVLAN。而允许所有VLAN 通过的Trunk 接口是所有 VLAN的 tagged 接口,当然任何VLAN 都不能被配置为 SuperVLAN。
对于设备 Switch1 而言,有效的VLAN 只有 VLAN2和 VLAN3,所有的数据帧都在这两个VLAN中转发的。
如图 所示, Switch1 上配置了Super-VLAN 4,Sub-VLAN 2 和Sub-VLAN 3,并配置一个普通的 VLAN10;Switch2上配置两个普通的 VLAN10 和 VLAN 20。假设Super-VLAN 4 中的Sub-VLAN2 下的主机 A 想访问与Switch2 相连的主机 C,通信过程如下:(假设Switch1 上已配置了去往 1.1.3.0/24网段的路由, Switch2 上已配置了去往1.1.1.0/24网段的路由)
1. 主机 A将主机 C 的IP 地址(1.1.3.2)和自己所在网段1.1.1.0/24 进行比较,发现主机C和自己不在同一个子网。1. 主机 A发送 ARP 请求给自己的网关,请求网关的MAC 地址。
2. Switch1 收到该ARP 请求后,查找 Sub-VLAN和Super-VLAN的对应关系,从 Sub-VLAN2发送 ARP 应答给主机A。ARP应答报文中的源 MAC 地址为Super-VLAN 4 对应的VLANIF4的 MAC 地址。
3. 主机 A学习到网关的 MAC 地址。
4. 主机 A向网关发送目的 MAC 为Super-VLAN 4 对应的VLANIF4 的 MAC、目的IP 为1.1.3.2的报文。
5. Switch1 收到该报文后进行三层转发,下一跳地址为1.1.2.2,出接口为 VLANIF10,把报文发送给Switch2。
6. Switch2 收到该报文后进行三层转发,通过直连出接口VLANIF20,把报文发送给主机C。
7. 主机 C的回应报文,在 Switch2 上进行三层转发到达Switch1。
8. Switch1 收到该报文后进行三层转发,通过Super-VLAN,把报文发送给主机 A。