目录

简介

为什么6PE在数据平面中使用两个MPLS标签？

相关信息

简介

本文档解释为什么Cisco IOS© IPv6提供商边缘路由器(6PE)在数据平面中使用两个多协议标签交换(MPLS)标签。

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

问：为什么6PE在数据平面中使用两个MPLS标签？

A.6PE使用两个标签：

- 顶部标签是传输标签，由标签分发协议(LDP)或MPLS流量工程(TE)逐跳分配。

- 底部标签是由边界网关协议(BGP)分配并由提供商边缘(PE)路由器之间的内部BGP(iBGP)通告的标签。

当发布6PE时，主要要求是所有MPLS核心路由器（P路由器）都不必须支持IPv6。这一要求促使人们需要在数据层面添加两个标签。6PE需要两个标签的原因有两个。

PHP功能

如果仅使用传输标签，并且使用倒数第二跳跳跃(PHP)，则倒数第二跳路由器（P路由器）将需要了解IPv6。

使用PHP时，此倒数第二跳路由器需要删除MPLS标签并将数据包作为IPv6数据包转发。该P路由器需要知道数据包是IPv6，因为P路由器需要对IPv6使用正确的第2层封装类型。(IPv6和IPv4的封装类型不同；例如，对于以太网，IPv6的封装类型是0x86DD，而IPv4的封装类型是0x0800。) 如果倒数第二跳路由器不支持IPv6，则它可能将IPv4的第2层封装类型用于IPv6数据包。出口PE路由器会认为数据包是IPv4。

IPv4和IPv6报头中都存在生存时间(TTL)处理。在IPv6中，该字段称为跳数限制。IPv4和IPv6字段位于报头中的不同位置。此外，还需要更改IPv4报头中的报头校验和；IPv6中没有报头校验和字段。如果倒数第二跳路由器不支持IPv6，则会导致IPv6数据包格式不正确，因为路由器期望在报头中找到TTL字段和报头校验和字段。

由于这些差异，倒数第二跳路由器需要知道它是IPv6数据包。此路由器如何知道数据包是IPv6数据包，因为它没有为IPv6转发等价类(FEC)分配标签，并且MPLS报头中没有封装字段？它可以扫描标签堆栈后的第一个半字节，如果值为6，则确定数据包为IPv6。但是，这意味着倒数第二跳路由器需要支持IPv6。

如果使用显式null标签（因此没有PHP），则此方案可能会起作用。 但是，该决定要求使用PHP。

负载平衡

P路由器上的典型负载均衡遵循此过程。P路由器转到标签堆栈的末尾，通过查看标签堆栈后的第一个半字节来确定它是否是IPv4数据包。

- 如果半字节的值为4，则MPLS负载为IPv4数据包，P路由器通过散列源和目标IPv4地址来平衡负载。

- 如果P路由器支持IPv6，而半字节值为6，则P路由器通过散列源和目标IPv6地址来平衡负载。

- 如果P路由器不支持IPv6，且半字节的值不是4（如果数据包是IPv6数据包，则可能是6），则P路由器会确定它不是IPv4数据包，并根据底部标签做出负载均衡决策。

在6PE场景中，假设有两个出口PE路由器在BGP中向入口PE路由器通告一个IPv6前缀。此IPv6前缀将在BGP中使用两个不同的标签进行通告。因此，在数据平面中，底部标签将是两个标签中的一个。这将允许P路由器在底部标签上按流进行负载均衡。

如果6PE仅使用传输标签来通过MPLS核心传输6PE数据包，则P路由器将无法逐流对这些数据包进行负载均衡，除非P路由器支持IPv6。如果P路由器支持IPv6，它们可以使用源和目的IPv6地址做出负载均衡决策。

相关信息

- 技术支持和文档 - Cisco Systems