跳到主要内容

5. 转发

5. 转发 (Forwarding)

如果 backbone 中的中间 routers 没有任何关于到 VPNs 的 routes 的信息, packets 如何从一个 VPN site 转发到另一个 VPN site?

当 PE 从 CE device 接收到 IP packet 时, 它会选择一个特定 VRF, 在其中查找该 packet 的 destination address. 这一选择基于该 packet 的 ingress attachment circuit.

假设找到了匹配项. 因此我们得知该 packet 的 "next hop".

如果该 packet 的 next hop 通过来自此 PE 的 VRF attachment circuit 直接到达 (即 packet 的 egress attachment circuit 与其 ingress attachment circuit 位于同一 PE 上), 则 packet 被发送到 egress attachment circuit, 并且不会向该 packet 的 label stack 压入 MPLS labels.

如果 ingress 和 egress attachment circuits 位于同一 PE 上, 但与不同 VRFs 关联, 且 ingress attachment circuit 的 VRF 中与 destination address 最匹配的 route 是 egress attachment circuit 的 VRF 中若干 routes 的 aggregate, 则可能还需要在 egress VRF 中查找该 packet 的 destination address.

如果该 packet 的 next hop 不是通过 VRF attachment circuit 到达, 则该 packet 必须至少经过 backbone 中的一跳. 因而该 packet 具有一个 "BGP Next Hop", 且该 BGP Next Hop 将为与该 packet destination address 最匹配的 route 分配一个 MPLS label. 将此 label 称为 "VPN route label". IP packet 被转换为 MPLS packet, 并以 VPN route label 作为 label stack 上唯一的 label.

随后必须将该 packet tunneling 到 BGP Next Hop.

如果 backbone 支持 MPLS, 则按如下方式完成:

  • 重新分发 VPN-IPv4 addresses 的 PE routers (以及任何 Autonomous System border routers) 需要把自身的 /32 address prefixes 插入 backbone 的 IGP routing tables. 这使 MPLS 能够在 backbone network 中的每个 node 上, 为到每台 PE router 的 route 分配对应 label. 为确保不同实现之间的互操作性, 要求支持 LDP 以建立穿越 backbone 的 label switched paths. 不过, 也可以使用其他方法建立这些 label switched paths. (其中一些其他方法可能不要求 IGP 中存在 /32 address prefixes.)

  • 如果到 BGP next hop 存在任何 traffic engineering tunnels, 且其中一个或多个可供相关 packet 使用, 则选择其中一个 tunnel. 该 tunnel 将与一个 MPLS label 关联, 即 "tunnel label". tunnel label 被压入 MPLS label stack, packet 被转发到该 tunnel 的 next hop.

  • 否则,

    • packet 将具有一个 "IGP Next Hop", 即沿到 BGP Next Hop 的 IGP route 的 next hop.

    • 如果 BGP Next Hop 与 IGP Next Hop 相同, 且使用 penultimate hop popping, 则 packet 随后被发送到 IGP Next Hop, 只携带 VPN route label.

    • 否则, IGP Next Hop 将为与 BGP Next Hop address 最匹配的 route 分配一个 label. 将其称为 "tunnel label". tunnel label 被压入并作为 packet 的 top label. 然后 packet 被转发到 IGP Next Hop.

  • 然后 MPLS 会将 packet 穿越 backbone 携带到 BGP Next Hop, 在那里检查 VPN label.

如果 backbone 不支持 MPLS, 只携带 VPN route label 的 MPLS packet 可以使用 [MPLS-in-IP-GRE] 的技术 tunneling 到 BGP Next Hop. 当 packet 从 tunnel 中出来时, 它将位于 BGP Next Hop, 在那里检查 VPN route label.

在 BGP Next Hop, 对 packet 的处理取决于 VPN route label (见 Section 4.3.2). 在许多情况下, PE 能够根据该 label 确定 packet 应通过哪个 attachment circuit 传输 (到 CE device), 以及该 interface 的适当 data link layer header. 在其他情况下, PE 可能只能确定 packet 的 destination address 需要先在某个特定 VRF 中查找, 然后再转发给 CE device. 也存在一些中间情形, 在这些情形下 VPN route label 可以确定 packet 的 egress attachment circuit, 但仍需执行一次查找 (例如 ARP), 以确定该 attachment circuit 上 packet 的 data link header.

MPLS header 本身的信息, 和/或与 label 关联的信息, 也可用于在到 CE 的 interface 上提供 QoS.

无论如何, 如果 packet 到达其 ingress PE 时是 unlabeled IP packet, 则它离开其 egress PE 时也将再次是 unlabeled packet.

带有 VPN route labels 的 packets 通过 backbone tunneling, 这一事实使得可以让所有 VPN routes 都不进入 P routers. 这对于确保该方案的可扩展性至关重要.