VLAN扩展技术

MVRP

MRP(Multiple Registration Protocol,多属性注册协议)作为一个属性注册协议的载体, 可以用来传递属性信息。MVRP(Multiple VLAN Registration Protocol,多 VLAN 注册协议) 是 MRP 的一种应用,用于在设备间发布并学习 VLAN 配置信息。

image.png

所有支持 MVRP 特性的交换机能够接收来自其它交换机的 MVRP VLAN 注册信息,并动 态更新本地的 VLAN 注册信息,包括当前的 VLAN 成员、这些 VLAN 成员可以通过哪个端口到 达等。而且所有支持 MVRP 特性的交换机能够将本地的 VLAN 注册信息向其他交换机传播,以 便使同一交换网内所有支持 MVRP 特性的设备的 VLAN 信息达成一致。MVRP 传播的 VLAN 注册信息即包括本地手工配置的静态 VLAN 信息,也包括来自其它交换机的动态 VLAN 注册信息

MVRP消息

  • Join(注册声明):MRP 实体配置了某些属性,需要对端实体来注册自己的属性信息时,它会向对端实体发送 Join 消息 ,MRP 实体收到来自对端实体的 Join 消息时,它会注册该 Join 消息中的属性,并向本设备的其他实体传播该 Join 消息,其他实体收到传播的 Join 消息后,根据该 Join 消息中的属性在该实体的注册状态,向其对端实体发送 Join 消息。
  • JoinEmpty:用于声明 MRP 实体的非注册属性。比如一个 MRP 实体加入了某静态 VLAN(我们将本地手工创建的 VLAN 称为静态 VLAN,通过 MRP 消息学习并创建的 VLAN 称为动态 VLAN),此时若该实体还没有通过 MRP 消息注册该 VLAN,这时该实体向对端实体发送的 Join 消息就为 JoinEmpty 消息。
  • JoinIn:用于声明 MRP 实体的注册属性。比如 MRP 实体加入了某静态 VLAN 且通过 MRP 消息注册了该 VLAN,或该实体收到本设备其他实体传播的某 VLAN 的 Join 信息且通过 MRP 消息注册了该 VLAN,这时该实体向对端实体发送的 Join 消息就为 JoinIn 消息。
  • New(注册声明):用于 MSTP(Multiple Spanning Tree Protocol,多生成树协议)拓扑变化的情 况。当 MSTP 拓扑变化时,MRP 实体需要向对端实体发送 New 消息声明拓扑变化。 MRP 实体收到来自对端实体的 New 消息时,它会注册该 New 消息中的属性,并向本设备的其他实体传播该 New 消息,其他实体收到传播的 New 消息后,向其对端实体发送该 New 消息。
  • Leave(回收声明):用于 MRP 实体注销了某些属性,需要对端实体进行同步注销时,它会向对端实体发送 Leave 消息。当一个 MRP 实体收到来自对端实体的 Leave 消息时,它会注销该 Leave 消息中的属性,并向本设备的其他实体传播该 Leave 消息,其他实体收到传播的 Leave 消息后,根据该 Leave 消息中的属性在本设备上的状态,决定是否向其对端实体发送该 Leave 消息(比如该 Leave 消息中的属性为某 VLAN,若该 VLAN 为动态 VLAN,且本设备上无实体注册该 VLAN,则在设备上删除该 VLAN,并向对 端实体发送该 Leave 消息;若该 VLAN 为静态 VLAN,则不向对端实体发送该 Leave 消息)。
  • LeaveAll(回收声明):用于 MRP 实体启动时都会启动各自的 LeaveAll 定时器,当该定时器超时后,MRP 实体就会向对端实体发送 LeaveAll 消息。当一个 MRP 实体收发 LeaveAll 消息时,它会启动 Leave 定时器,同时根据自身的属性状态决定是否发送 Join 消息要求对端实体重新注册某属性。该实体在 Leave 定时器超时前,重新注册收到的来自对端实体的 Join 消息中的属性;在 Leave 定时器超时后,注销所有未重新注册的属性信息,从而周期性地清除网络中的垃圾属性。

MVRP注册模式

MVRP 传播的 VLAN 注册信息既包括本地手工配置的静态注册信息,也包括来自其它设备 的动态注册信息。MVRP 的端口注册模式有以下三种:

  • Normal 模式:该模式下的 MVRP 实体允许进行动态 VLAN 的注册或注销。
  • Fixed 模式:该模式下的 MVRP 实体禁止进行动态 VLAN 的注销,收到的 MVRP 报文会被丢弃。也就是说,在该模式下,实体已经注册的动态 VLAN 是不会被注销的, 同时也不会注册新的动态 VLAN。
  • Forbidden 模式:该模式下的 MVRP 实体禁止进行动态 VLAN 的注册,收到的 MVRP 报文会被丢弃。也就是说,在该模式下,实体不会注册新的动态 VLAN,一旦在配置该模式前注册的动态 VLAN 被注销后,不会重新进行注册。

MRP定时器

MRP 的定时器也就是 MVRP 的定时器。MRP 消息发送的时间间隔是通过定时器来实现的, MRP 定义了下列四种定时器,用于控制各 MRP 消息的发送周期:

  • Periodic 定时器:每个 MRP 实体启动时都会启动各自的 Periodic 定时器,来控制 MRP 消息的周期发送。该定时器超时前,实体收集需要发送的 MRP 消息,在该定时 器超时后,将所有待发送的 MRP 消息封装成尽可能少的报文发送出去,这样减少了 报文发送数量。随后再重新启动 Periodic 定时器,开始新一轮的循环。
  • Join 定时器:Join 定时器用来控制 Join 消息的发送。为了保证消息能够可靠地发送 到对端实体,MRP 实体在发送 Join 消息时,将启动 Join 定时器。如果在该定时器超 时前收到了来自对端实体的 JoinIn 消息,且该 JoinIn 消息中的属性与发出的 Join 消 息中的属性一致,便不再重发该 Join 消息,否则在该定时器超时后,当 Periodic 定时 器也超时,它将重发一次该 Join 消息。
  • Leave 定时器:Leave 定时器用来控制属性的注销。当 MRP 实体收到来自对端实体 的 Leave 消息(或收发 LeaveAll 消息)时,将启动 Leave 定时器。如果在该定时器 超时前,收到来自对端实体的 Join 消息,且该 Join 消息中的属性与收到的 Leave 消 息中的属性一致(或与收发的 LeaveAll 消息中的某些属性一致),则这些属性不会在 本实体被注销,其他属性则会在该定时器超时后被注销。
  • LeaveAll 定时器:每个 MRP 实体启动时都会启动各自的 LeaveAll 定时器,当该定时 器超时后,该实体就会向对端实体发送 LeaveAll 消息,随后再重新启动 LeaveAll 定 时器,开始新一轮的循环,对端实体在收到 LeaveAll 消息后也重新启动 LeaveAll 定 时器。 image.png

工作流程

单向注册

image.png

在Device A上创建静态VLAN 2,通过VLAN属性的单向注册,将Device B和Device C的相应端口自动加入VLAN 2:

  • 在Device A上创建静态VLAN 2后,Port 1启动Join定时器和Hold定时器,等待Hold定时器超时后,Device A向Device B发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,再等待Hold定时器超时后,发送第二个JoinEmpty消息。
  • Device B上接收到第一个JoinEmpty后创建动态VLAN 2,并把接收到JoinEmpty消息的Port 2加入到动态VLAN 2中,同时告知Port 3启动Join定时器和Hold定时器,等待Hold定时器超时后向Device C发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinEmpty消息。Device B上收到第二个JoinEmpty后,因为Port 2已经加入动态VLAN 2,所以不作处理。
  • Device C上接收到第一个JoinEmpty后创建动态VLAN 2,并把接收到JoinEmpty消息的Port 4加入到动态VLAN 2中。Device C上收到第二个JoinEmpty后,因为Port 4已经加入动态VLAN 2,所以不作处理。
  • 此后,每当Leaveall定时器超时或收到LeaveAll消息,设备会重新启动Leaveall定时器、Join定时器、Hold定时器和Leave定时器。Device A的Port 1在Hold定时器超时之后发送第一个JoinEmpty消息,再等待Join定时器+Hold定时器之后,发送第二个JoinEmpty消息,Device B向Device C发送JoinEmpty消息的过程也是如此

双向注册

image.png

通过上述VLAN属性的单向注册过程,端口Port 1、Port 2、Port 4已经加入VLAN 2,但是Port 3还没有加入VLAN 2(只有收到JoinEmpty消息或JoinIn消息的端口才能加入动态VLAN)。为使VLAN 2流量可以双向互通,需要进行Device C到Device A方向的VLAN属性的注册过程:

  • VLAN属性的单向注册完成后,在Device C上创建静态VLAN 2(将动态VLAN转换成静态VLAN),Port 4启动Join定时器和Hold定时器,等待Hold定时器超时后,Device C向Device B发送第一个JoinIn消息(因为Port 4已经注册了VLAN 2,所以发送JoinIn消息),Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息。
  • Device B上接收到第一个JoinIn后,把接收到JoinIn消息的Port 3加入到动态VLAN 2中,同时告知Port 2启动Join定时器和Hold定时器,等待Hold定时器超时后,向Device A发送第一个JoinIn消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息;Device B上收到第二个JoinIn后,因为Port 3已经加入动态VLAN 2,所以不作处理。
  • Device A上接收到JoinIn之后,停止向Device B发送JoinEmpty消息。此后,当Leaveall定时器超时或收到LeaveAll消息,设备重新启动Leaveall定时器、Join定时器、Hold定时器和Leave定时器。Device A的Port 1在Hold定时器超时之后就开始发送JoinIn消息;
  • Device B向Device C发送JoinIn消息。
  • Device C收到JoinIn消息后,由于本身已经创建了静态VLAN 2,所以不会再创建动态VLAN 2。

VLAN聚合(Super-Vlan)

tips
华三技术中称之为“Super-Vlan”技术。 主要用于数据中心服务器区之间的隔离,实际上对于IP地址的节省意义不大。
一般情况下,一个 VLAN 对应一个 VLANIF 接口。但由于在一个 VLAN 对应的子网中,子网号、子网广播地址、子网网关不能作为 VLAN 内的主机 IP 地址,并且子网中实际接入的主机数量可能少于可用的 IP 地址数量,容易造成 IP 地址的浪费。因此需要引入 VLAN 聚合。

类似于路由聚合,将不同网段的 VLAN 聚合成一个范围更大的网段,并将它们的网关设置成同一个。提高了 IP 地址的利用率。

  • VLAN 聚合:在一个物理网络内,用多个VLAN(称为Sub-VLAN)隔离广播域,并将这些 Sub-VLAN 聚合成一个逻辑的 VLAN(称为Super-VLAN),这些 Sub-VLAN 使用同一个 IP 子网和缺省网关,进而达到节约 IP 地址资源的目的。
  • Sub-VLAN只包含物理接口,不能建立三层 VLANIF 接口,用于隔离广播域。每个 Sub-VLAN 内的主机与外部的三层通信设备是靠 Super-VLAN 的三层 VLANIF 接口实现的。
  • Super-VLAN:只建立三层 VLANIF 接口,不包含物理接口,与子网网关对应。与普通的 VLAN 不同,Super-VLAN 的 VLANIF 接口状态取决于所包含的 Sub-VLAN 的物理接口状态。
注意
  • VLAN 1 不能配置为 Super-VLAN
  • Super-VLAN 的 VLAN ID 与 Sub-VLAN 的 VLAN ID 必须不同
  • 将 Sub-VLAN 加入到 Super-VLAN 时,必须保证 Sub-VLAN 没有创建对应的 VLANIF 接口。

聚合原理

每个 Sub-VLAN 对应一个广播域,多个 Sub-VLAN 和一个 Super-VLAN 关联,只给 Super-VLAN 分配一个 IP 子网,所有 Sub-VLAN 都使用 Super-VLAN 的 IP 子网和缺省网关进行 三层 通信。

多个 Sub-VLAN 共享一个网关地址,节约了子网网络地址、子网定向广播地址、子网缺省网关地址,且各 Sub-VLAN 间的界线也不再是从前的子网界线了,可以根据每个 Sub-VLAN 内所需的 IP 地址数量进行灵活的地址规划,从而既保证了各个 Sub-VLAN 作为一个独立广播域实现广播隔离,又节省了IP地址资源,提高了编址的灵活性。

VLAN 之间的通信过程

相同Sub-VLAN
相同的 Sub-VLAN 之间通信就好比原先的普通 VLAN ,由于同属于一个广播域,因此相同 Sub-VLAN 的设备直接通过二层通信。
不同Sub-VLAN

不同的 Sub-VLAN 之间通信,IP 地址属于相同网段,因此主机会发送 ARP请求 ,但是实际不同 Sub-VLAN 之间属于不同的广播域,因而 ARP 报文无法传递到其他 Sub-VLAN ,ARP 请求得不到响应,设备无法学习到对端 MAC 地址,从而无法完成 Sub-VLAN 之间通信。

要实现Sub-VLAN之间的通信,需要在 Super-VLAN 的 VLANIF 中开启 ARP 代理功能

通信过程:

  1. PC1 发现 PC2 跟自己在同一网段下,并且自己的 ARP 表没有 PC2 的表项,因此直接发送 ARP 广播请求 PC2 的 MAC 地址。
  2. 作为网关的 Super-VLAN 对应的 VLANIF100 收到 PC1 的 ARP 请求,由于网关上使能了 Sub-VLAN 间的 ARP 代理功能,则向 Super-VLAN100 的所有 Sub-VLAN 接口发送一个 ARP 广播,请求 PC2 的 MAC 地址。
  3. PC2 收到网关发送的 ARP 广播,应答该 ARP 请求。
  4. 网关收到 PC2 的应答后,将自己的 MAC 地址回应给 PC1,PC1 之后要发送给 PC2 的报文都先发送给网关,由网关进行三层转发。
与其他设备的二层通信

Sub-VLAN 与其他设备进行二层通信时,与普通的 VLAN 内二层通信无差别。

  1. 从 PC1 进入 SW1 的报文会被打上 VLAN10 的 Tag。在 SW1 中这个 Tag 不会因为 VLAN10 是 VLAN100 的 Sub-VLAN 而变为 VLAN100 的 Tag。
  2. 当报文从 SW1 的 GE0/0/0 出去时,依然携带 VLAN10 的 Tag。也就是说,SW1 本身不会发出 VLAN100 的报文。就算其他设备有 VLAN100 的报文发送到该设备上,这些报文也会因为 SW1 上没有 VLAN100 应的物理接口而被丢弃。
  3. 对于其他设备而言,有效的 VLAN 只有 Sub-VLAN10,20和30, 所有的报文都是在这些VLAN中交互的。因此,SW1 上虽然配置了 VLAN 聚合,但与其他设备的二层通信, 不会涉及到Super-VLAN,与正常的 二层通信流程 一样。
与其他设备三层通信
与其他设备进行三层通信时,就直接通过默认网关进行路由了。

Sub-VLAN之间三层通信

image.png

如图所示,假设 PCA 需要发送报文给 PCB,PCA 发现目的 IP 地址和自己在同一网段, 所以发送 ARP 请求,而 PCB 在 VLAN3 广播域内,并不能收到这个广播请求,所以,PCA 是不能及时收到 PCB 的 ARP 应答的,但是,Super VLAN10 是可以收到这个 ARP 广播的。 Super VLAN10 的本地代理 ARP 所做的就是:当 PCA 在二层发出的 ARP 请求在其广播域内没有回应时,网关开始在路由表查找,发现下一跳为直连路由接口,则在 Sub VLAN3 内 发送新的 ARP 请求 PCB 的 MAC 地址;得到 PCB 的回应后,Super VLAN10 就把自己接口对应的 MAC 地址当作 PCB 的 MAC 地址,在 Sub VLAN2 内给予 PCA 响应。之后,PCA 发送 普通 IP 报文给 PCB 时,都通过 Super VLAN 接口进行正常的三层报文转发。 PCB 回送给 PCA 的报文转发过程和上述的 PCA 到 PCB 的流程类似。

Sub-VLAN与外部通信

image.png

PCA 需要发送 IP 报文到 PCC,PCA 检查发现 PCC 与自己属于不同的 IP 网段,所以需要将报文发送给自己的网关 Super VLAN10。因此 PCA 检查自己的网关 IP 地址和 MAC 地址信 息,发现只有 IP 地址信息而无 MAC 地址信息,所以发送 ARP 报文请求网关的 MAC 地址。该报文在 Sub VLAN2 内发送并被 SWB 接收,SWB 并没有对应的 VLAN2 接口,但是它发现 Sub VLAN2 被映射到了 Super VLAN10,Super VLAN10 是可以提供三层服务的,所以交换机给予 ARP 响应并在 Sub VLAN2 内发送。

自此 PCA 成功学习到了网关的 MAC 地址,接下来,PCA 发送目的 MAC 为 Super VLAN10、 目的 IP 为 30.1.1.2 的报文。Sub VLAN2 接收到报文后,检测到目的 MAC,知道应该进行三 层转发,于是查找路由表,发现下一跳地址为 20.1.1.2,出接口为 VLAN20,并通过 ARP 表项 和 MAC 表项确定出端口,把报文发送给 SWA,SWA 根据正常的转发流程把报文发送给 PCC。

PCC 返回给 PCA 的报文到达 SWB 时,正常 IP 转发检查发现出接口为 Super VLAN10 的 三层接口,但是在 Super VLAN10 内没有包含任何物理端口。开启了 Super VLAN 的交换机始 终注意到,如果存在 Super VLAN,那么需要从 Super VLAN 转发出去的报文都应该寻找其对 应的 Sub VLAN,并在 Sub VLAN 内按照 ARP 和 MAC 表项进行正常转发。所有此处,SWB 在 Sub VLAN2 内发现了之前已经学习到的 PCA 的 ARP 和 MAC 信息,最终报文转发给 PCA, 完成双向通信。 Sub VLAN 与外部的三层通信等同于 Super VLAN 到外部的三层通信。

MUX VLAN(PVLAN)

tips
华三技术中称之为“Private Vlan”技术,并且无separate VLAN,只有Primary Vlan和Secondary Vlan,默认各个Secondary Vlan之间隔离。可以开启 上行设备的本地ARP代理实现三层互通。 主要用于小区vlan划分,因为默认一个用户一个vlan,但由于用户量较多,vlan号不够用,因此使用Private vlan技术进行vlan扩展。 具体原理可见 https://www.h3c.com/cn/d_201505/868804_30003_0.htm image.png
MUX VLAN(Multiplex VLAN,多路 VLAN),提供了在 VLAN 端口间进行二层流量隔离的机制。

传统 VLAN 中,要实现二层流量隔离,就要配置多个 VLAN ID,并在交换机上对各个 VLAN ID 进行放行限制,在网络规模较大时,不仅耗费大量 VLAN ID,同时增加了工作量和维护量。

MUX VLAN 分为 Principal VLAN(主VLAN) 和 Subordinate VLAN(从VLAN),Subordinate VLAN 又分为 Separate VLAN(隔离型从VLAN)和 Group VLAN(互通型从VLAN)。

  • Principal VLAN:可以与 MUX VLAN 内所有 VLAN 进行通信
  • Separate VLAN :只能和 Principal VLAN 进行通信,和其他 VLAN 隔离。每个 Separate VLAN 必须绑定一个 Principal VLAN
  • Group VLAN:可以和 Principal VLAN 通信,同时可以与处于同一组的 VLAN 进行通信,但不能和其他组或 Separate VLAN 进行通信。每个 Group VLAN 必须绑定一个 Principal VLAN。
注意
  • MUX VLAN 技术中,一个 Principal VLAN 只能将一个VLAN设置为Separate VLAN。可以将多个VLAN设置为Group VLAN(最多128个)
  • 配置为 MUX VLAN(即 Principal VLAN)的 VLAN 不能在 Super-VLAN、Sub-Vlan 中使用

MUX VLAN 应用举例

如上图,实现了:

  • 部门A和B各自实现了内部用户二层互通
  • 部门A和B的用户之间二层隔离
  • 部门A和B的用户都能通过二层访问服务器
  • 访客区内的任意PC除了能访问服务器,不饿能访问其他任何设备,包括其他访客。

QinQ

由于 IEEE802.1Q 中定义的 VLAN Tag 域只有12bit ,只能表示4094个 VLAN,因此利用 VLAN 对用户进行隔离和标识受到网络扩展的限制。

QinQ(802.1Q in 802.1Q)技术是一项扩展 VLAN 空间的技术,通过在802.1Q标签报文的基础上再加一层802.1Q的 Tag 来达到扩展 VLAN 空间的功能。

如上图,用户报文在公网上传递时携带了两层Tag,内层是私网Tag,外层是公网Tag。

QinQ 工作原理

QinQ封装结构

QinQ封装在无标签的以太网数据帧的源MAC地址字段后面加上两个VLAN标签构成。

  • TPID(Tag Protocol Identifier,标签协议标识):表示帧类型。取值为 0x8100 时表示 802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。
    • 对于内层的802.1Q Tag,该值设置为0x8100;
    • 对于外层的802.1Q Tag,不同厂商所使用的 值可能不相同:
      • 0x8100:Huawei路由器使用
      • 0x88A8:802.1ad规定外层802.1Q Tag中的TPID为0x88a8

在公网传输的过程中,设备只根据 外层 VLAN Tag 转发报文,并根据报文的外层 VLAN Tag 进行 MAC 地址学习,而用户的私网 VLAN Tag 将被当作报文的 数据部分 进行传输。即使私网 VLAN Tag 相同,也能通过公网 VLAN Tag 区分不同的用户。

企业A和企业B的私网 VLAN 分别为 1-101-20,公网 VLAN 分别为 34 ,企业A和B的报文进入公网时,报文外面就会携带上 VLAN 3 和 4 的标签,即使私网 VLAN Tag 有重叠,也不会产生冲突,当报文穿过公网,到达另一侧 PE 后,报文会被剥离公网 VLAN Tag,然后再转发给用户网络的 CE 设备。

实现方式——基本QinQ

基本 QinQ 是基于 端口 方式实现的。开启端口的基本 QinQ 功能后,当该端口接收到报文,设备会为该报文打上本端口缺省 VLAN 的 VLAN Tag。如果接收到的是已经带有 VLAN Tag ,则会成为双 Tag 的报文,如果不带 VLAN Tag 的报文,则成为带有缺省 VLAN Tag 的报文。

基于端口的QinQ的缺点是外层VLAN Tag封装方式固定,不能根据业务种类选择外层VLAN Tag封装的方式,从而很难有效支持多业务的灵活运营。

实现方式——灵活QinQ

相比于基本 QinQ 的固定 Tag(对进入二层 QinQ 接口的 所有帧 加上 相同 的外层 Tag ),灵活 QinQ(Selective QinQ) 可根据流分类的结果选择是否打外层标签,打上何种标签。可根据用户的 VLAN标签、优先级(缺省情况下,外层 VLAN 和内层 VLAN 优先级保持一致)、MAC地址、IP协议、IP源地址、 IP目的地址、或应用程序的端口号进行流分类。

配置注意事项

  • vlan-id1 和 vlan-id2 指的是内网标签,vlan-id3指的是外网标签。
  • 配置灵活QinQ的当前接口类型建议为 Hybrid,并且必须先通过命令 qinq vlan-translation enable 先使能 VLAN 转换功能。灵活QinQ功能只在当前接口的入方向生效

参考文章