5.1. VXLAN/NVGRE Encapsulation (VXLAN/NVGRE 封装)
5.1. VXLAN/NVGRE Encapsulation (VXLAN/NVGRE 封装)
VXLAN 和 NVGRE 都是提供数据平面封装的技术示例, 该封装用于在网络虚拟化边缘 (NVE) 之间通过公共物理 IP 基础设施传输数据包 - 例如, VXLAN 网络中的 VXLAN 隧道端点 (VTEP)。这两种技术都在每个数据包中包含特定 NVO 实例的标识符, VXLAN 中的 VNI 和 NVGRE 中的 VSID。在本文档的其余部分中, 我们使用 VNI 作为 NVO 实例的表示, 并理解如果封装是 NVGRE, 则可以同样使用 VSID, 除非另有说明。
请注意, PE 等同于 NVE/VTEP。
VXLAN 封装基于 UDP, 在 UDP 头部之后有一个 8 字节的头部。VXLAN 提供 24 位 VNI, 通常提供与租户 VID 的一对一映射, 如 [RFC7348] 中所述。在这种情况下, 入口 VTEP 不在封装帧上包含内部 VLAN 标签, 并且出口 VTEP 丢弃带有内部 VLAN 标签的帧。[RFC7348] 中的这种操作模式映射到 [RFC7432] 中的基于 VLAN 的服务, 其中租户 VID 映射到 EVI。
VXLAN 还提供在封装帧中包含内部 VLAN 标签的选项, 如果在 VTEP 上显式配置。这种操作模式可以映射到 [RFC7432] 中的 VLAN 捆绑服务, 因为租户的所有标记帧都映射到单个桥接表 / MAC-VRF, 并且在执行 VXLAN 解封装时, 如 [RFC7348] 第 6 节所述, 配置 PE 不使用内部 VLAN 标签进行查找。
[RFC7637] 封装基于 GRE 封装, 它强制包含可选的 GRE 密钥字段, 该字段携带 VSID。如 [RFC7637] 中所述, VSID 和租户 VID 之间存在一对一映射。禁止包含内部 VLAN 标签。[RFC7637] 中的这种操作模式映射到 [RFC7432] 中的基于 VLAN 的服务。
如下一节所述, 除了使用 BGP 封装扩展团体来指示封装类型 (例如, VXLAN 或 NVGRE) 之外, 对 EVPN 路由的编码没有变化以支持 VXLAN 或 NVGRE 封装。但是, 根据 NVE 所在位置 (即, 在 hypervisor 或 ToR 中) 以及是否需要多归属功能, 对 EVPN 过程可能会有影响。
5.1.1. Virtual Identifiers Scope (虚拟标识符范围)
尽管 VNI 被定义为 24 位全局唯一值, 但在某些场景中, 特别是在数据中心互联的上下文中, 希望为 VNI 使用本地有效值。
5.1.1.1. Data-Center Interconnect with Gateway (使用网关的数据中心互联)
在不同数据中心中的 NVE 需要互连, 并且 NVE 需要在数据中心内使用 VNI 作为全局唯一标识符的情况下, 需要在数据中心网络 (DCN) 的边缘部署网关 (GW)。这是因为网关将提供在跨越网络边界时转换 VNI 的功能, 这可能与运营商的控制范围边界对齐。例如, 考虑图 1 的网络。假设有三个网络运营商: DC1, DC2 和 WAN 网络各一个。数据中心边缘的网关负责在每个 DCN 中使用的值与 WAN 中使用的值之间转换 VNI。
+--------------+
| |
+---------+ | WAN | +---------+
+----+ | +---+ +----+ +----+ +---+ | +----+
|NVE1|-| | | |WAN | |WAN | | | |-|NVE3|
+----+ |IP |GW |-|Edge| |Edge|--|GW | IP | +----+
+----+ |Fabric +---+ +----+ +----+ +---+ Fabric | +----+
|NVE2|-| | | | | |-|NVE4|
+----+ +---------+ +--------------+ +---------+ +----+
|<------ DC 1 ------> <------ DC2 ------>|
图 1: 使用网关的数据中心互联
5.1.1.2. Data-Center Interconnect without Gateway (不使用网关的数据中心互联)
在不同数据中心中的 NVE 需要互连, 并且 NVE 需要使用本地分配的 VNI (例如, 类似于 MPLS 标签) 的情况下, 可能不需要在 DCN 边缘部署网关。更具体地说, 发送 NVE 使用的 VNI 值由接收流量的 NVE 分配 (换句话说, 这类似于 "下游分配" 的 MPLS 标签)。这允许在不同 DCN 之间解耦 VNI 空间, 而无需在数据中心边缘使用专用网关。此主题在第 10.2 节中介绍。
+--------------+
| |
+---------+ | WAN | +---------+
+----+ | | +----+ +----+ | | +----+
|NVE1|-| | |ASBR| |ASBR| | |-|NVE3|
+----+ |IP Fabric|---| | | |--|IP Fabric| +----+
+----+ | | +----+ +----+ | | +----+
|NVE2|-| | | | | |-|NVE4|
+----+ +---------+ +--------------+ +---------+ +----+
|<------ DC 1 -----> <---- DC2 ------>|
图 2: 使用 ASBR 的数据中心互联
5.1.2. Virtual Identifiers to EVI Mapping (虚拟标识符到 EVI 的映射)
就像在 [RFC7432] 中一样, 存在将广播域 (由 VLAN ID 表示) 映射到 EVI 的两个选项, 当 EVPN 控制平面与 VXLAN (或 NVGRE 封装) 结合使用时, 也存在将由 VXLAN VNI (或 NVGRE VSID) 表示的广播域映射到 EVI 的两个选项:
选项 1: 每个 EVI 一个广播域
在此选项中, 由 VNI 表示的单个以太网广播域 (例如, 子网) 映射到唯一的 EVI。这对应于 [RFC7432] 中的基于 VLAN 的服务, 其中面向租户的接口, 逻辑接口 (例如, 由 VID 表示) 或物理接口映射到 EVI。因此, 每个 NVE 上的每个 VNI 都需要 BGP 路由区分器 (RD) 和路由目标 (RT)。此模型的优点是它允许使用 BGP RT 约束机制, 以便将路由的传播和导入限制为仅对给定 VNI 感兴趣的 NVE。如果 RD 和 RT 不是从 VNI 自动派生的, 则此模型的缺点可能是配置开销。
在此选项中, MAC-VRF 表在控制平面中由 RT 标识, 在数据平面中由 VNI 标识。在此选项中, 特定的 MAC-VRF 表仅对应于单个桥接表。
选项 2: 每个 EVI 多个广播域
在此选项中, 多个子网 (每个由唯一的 VNI 表示) 映射到单个 EVI。例如, 如果租户具有多个段/子网 (每个由 VNI 表示), 则该租户的所有 VNI 都映射到单个 EVI; 例如, 在这种情况下, EVI 表示租户而不是子网。这对应于 [RFC7432] 中的 VLAN 感知捆绑服务。此模型的优点是它不需要为每个 VNI 配置 RD/RT。但是, 与使用自动派生的选项 1 相比, 这是一个无关紧要的点。此模型的缺点是路由将由可能对给定 VNI 不感兴趣的 NVE 导入。
在此选项中, MAC-VRF 表在控制平面中由 RT 标识; 该 MAC-VRF 的特定桥接表在控制平面中由 <RT, Ethernet Tag ID> 标识。在此选项中, 数据平面中的 VNI 足以标识特定的桥接表。
5.1.2.1. Auto-Derivation of RT (RT 的自动派生)
为了简化配置, 当使用每个 EVI 一个 VNI 的选项时, 用于 EVPN 的 RT 可以自动派生。RD 可以按照 [RFC7432] 中所述自动生成, RT 可以按照下面所述自动派生。
由于图 1 中描述的网关 PE 参与 DCN 和 WAN BGP 会话, 因此重要的是, 当 RT 值从 VNI 自动派生时, 假设两者都在同一自治系统 (AS) 内运行, DCN 和 WAN 之间的 RT 空间不存在冲突。此外, 在同一 DCN 内可能需要 VXLAN 和 NVGRE 封装, 并且它们相应的 VNI 是独立管理的, 这意味着 VNI 空间可能重叠。为了避免 RT 空间中的冲突, DCN 的带有 2 个八位字节 AS 编号的 6 字节 RT 值可以如下自动派生:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Global Administrator | Local Administrator |
+-----------------------------------------------+---------------+
| Local Administrator (Cont.) |
+-------------------------------+
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Global Administrator |A| TYPE| D-ID | Service ID |
+-----------------------------------------------+---------------+
| Service ID (Cont.) |
+-------------------------------+
6 个八位字节的 RT 字段由两个子字段组成:
-
Global Administrator 子字段: 2 个八位字节。此子字段包含 IANA 分配的 AS 编号
<https://www.iana.org/assignments/as-numbers/>。 -
Local Administrator 子字段: 4 个八位字节
-
A: 单比特字段, 指示此 RT 是否自动派生
- 0: 自动派生
- 1: 手动派生
-
Type: 3 比特字段, 标识其他 3 个字节定义的空间。定义了以下空间:
- 0: VID (802.1Q VLAN ID)
- 1: VXLAN
- 2: NVGRE
- 3: I-SID
- 4: EVI
- 5: dual-VID (QinQ VLAN ID)
-
D-ID: 4 比特字段, 标识域 ID。域 ID 的默认值为零, 表示给定技术仅存在单个编号空间。但是, 如果给定技术存在多个编号空间 (例如, 重叠的 VXLAN 空间), 则需要从 1 开始通过其相应的域 ID 标识每个编号空间。
-
Service ID: 此 3 个八位字节字段设置为 VNI, VSID, I-SID 或 VID。
-
应该注意的是, RT 自动派生适用于 2 个八位字节的 AS 编号。对于 4 个八位字节的 AS 编号, RT 需要手动配置, 因为 3 个八位字节的 VNI 字段无法适应 2 个八位字节的本地管理员字段。
5.1.3. Constructing EVPN BGP Routes (构建 EVPN BGP 路由)
在 EVPN 中, 例如, 标识转发表的 MPLS 标签由出口 PE 通过 EVPN 控制平面分发, 并由入口 PE 放置在给定数据包的 MPLS 头部中。出口 PE 在接收该数据包时使用此标签来配置该数据包。这与出口 NVE 使用 VNI 非常相似, 区别在于 MPLS 标签具有本地意义, 而 VNI 通常具有全局意义。因此, 特别是为了支持本地分配的 VNI 选项, MAC/IP Advertisement 路由中的 MPLS Label1 字段, 每个 EVI 的 Ethernet A-D 路由中的 MPLS 标签字段, 以及包含式组播以太网标签 (IMET) 路由的 P-Multicast Service Interface (PMSI) Tunnel 属性中的 MPLS 标签字段用于携带 VNI。在本备忘录的其余部分, 上述 MPLS 标签字段将称为 VNI 字段。VNI 字段用于本地和全局 VNI; 对于任何一种情况, 整个 24 位字段用于编码 VNI 值。
对于基于 VLAN 的服务 (每个 MAC-VRF 一个 VNI), MAC/IP Advertisement, 每个 EVI 的 Ethernet A-D 和 IMET 路由中的 Ethernet Tag 字段必须 (MUST) 设置为零, 就像 [RFC7432] 中的基于 VLAN 的服务一样。
对于 VLAN 感知捆绑服务 (每个 MAC-VRF 多个 VNI, 每个 VNI 与其自己的桥接表关联), MAC Advertisement, 每个 EVI 的 Ethernet A-D 和 IMET 路由中的 Ethernet Tag 字段必须 (MUST) 标识 MAC-VRF 中的桥接表; 该 EVI 的以太网标签集需要在该 EVI 中的所有 PE 上一致配置。对于本地分配的 VNI, Ethernet Tag 字段中通告的值必须 (MUST) 设置为 VID, 就像 [RFC7432] 中的 VLAN 感知捆绑服务一样。此类设置必须在给定域内参与该 EVI 的所有 PE 设备上一致完成。对于全局 VNI, Ethernet Tag 字段中通告的值应该 (SHOULD) 设置为 VNI, 只要它与 Ethernet Tag 的现有语义匹配, 即, 它标识 MAC-VRF 中的桥接表, 并且 VNI 集在该 EVI 中的每个 PE 上一致配置。
为了指示要使用哪种类型的数据平面封装 (即, VXLAN, NVGRE, MPLS 或 GRE 中的 MPLS), 在 [RFC5512] 中定义的 BGP 封装扩展团体包含在出口 PE 通告的所有 EVPN 路由 (即, MAC Advertisement, 每个 EVI 的 Ethernet A-D, 每个 ESI 的 Ethernet A-D, IMET 和 Ethernet Segment) 中。IANA 已分配五个新值来扩展 [RFC5512] 中定义的封装类型列表; 它们在第 11 节中列出。
第 11 节中列出的 MPLS 封装隧道类型是必需的, 以便区分仅支持非 MPLS 封装的通告节点和支持 MPLS 和非 MPLS 封装的通告节点。仅支持 MPLS 封装的通告节点不需要通告任何封装隧道类型; 即, 如果 BGP 封装扩展团体不存在, 则假定为 MPLS 封装或静态配置的封装。
路由的 MP_REACH_NLRI 属性的 Next Hop 字段必须 (MUST) 设置为 NVE 的 IPv4 或 IPv6 地址。每个路由中的其余字段按照 [RFC7432] 设置。
请注意, 此处定义的过程 - 在存在指定使用 VNI 的隧道封装扩展团体的情况下使用 MPLS Label 字段来携带 VNI - 与 [TUNNEL-ENCAP] 第 8.2.2.2 节 ("When a Valid VNI has not been Signaled") 中描述的过程一致。