生活中无处不在的MPLS虚拟专用网

目录

  1. 前言
  2. 原理描述
  3. MPLS VN数据的转发
  4. 常见问题

一、前言

VN(虚拟专用网)在公网上为用户提供一个发送数据的专用的隧道,提供安全性和专用性。

相关概念

CE ( Custom Edge,用户边界) : 直接与服务提供商相连的用户设备。通常情况下,CE“感知”不到VN的存在,也不需要支持MPLS。
PE ( Provider Edge Router 提供商边界) : 指骨干网上的边缘路由器,与CE相连,主要负责v*n业务的接入。在MPLS网络中,对VN的所有处理都发生在PE上,对PE性能要求较高。
P ( Provider Router 提供商路由器) : 指骨干网上的核心路由器,主要完成路由和快速转发功能。P设备只需要具备基本MPLS转发能力,不维护VN信息。

VN分类:

1、Overlay VN方式:
服务提供商只提供逻辑的专用通道用户边缘路由器直接交换用户路由信息。
L2 VN :通过FR(Frame Relay)和ATM等_二层广域网技术实现
L3 VN :通过三层隧道技术GRE、IPsec实现
2、Peer-to-Peer VN :

在用户路由器和服务提供商路由器之间交换用户路由信息。

根据路由信息交换的类型分为:
在这里插入图片描述

可以简单理解为:Overlay VN是静态指定的,Peer-to-Peer是动态生成的。

出现原因

Overlay VN的本质是一 种“静态”VN, 这好比是静态路由,所以他具有类似静态路由的缺陷:

  • 所有的配置与部署都需要手工完成,如果某个客户的VN中新增了一个结点,则需要完成如下工作:

    1. 在这个新增结点上建立与所有已存在的N个结点的隧道及相关的路由。
    2. 对于已存在的N个结点,需要在每个结点上都建立一个与新增结点之间的隧道及相关的路由。如果客户站点的数量是N,最优路由所需的总数为N(N-1)/2条电路。
  • 由于是“静态”VN,则无法反应网络的实时变化。而且,如果隧道建立在CE上,则必须由用户维护,如果建立在PE上,则又无法解决地址冲突问题。

当帧中继或者ATM为客户提供虚拟专用网络时,供应商不参与客户的路由。服务提供商只负责为客户提供了运输客户数据的所使用的虚拟点至点链接。因此,服务供应商将只为客户提供在第2层的虚电路连接,这种实施方式被称为叠加模型。

针对叠加模型的弊端,开发出了对等模型。在对等模式中,客户和服务提供商之间交换路由信息,客户数据通过服务提供商的核心进行传输、优化。客户的路由信息在服务提供商网络中(P和PE路由器)和客户网络(CE路由器)之间通告。因此,对等模式并不需要建立虚电路。

MPLS VN基于对等模型,相比较传统的VN,MPLS VN更容易扩展和管理。新增一个站点时,只需要修改提供该站点业务的边缘节点的配置。

MPLS VN支持地址空间重叠、支持重叠VN、组网方式灵活、可扩展性好,并能够方便地支持MPLS TE,成为在IP网络运营商提供增值业务的重要手段,因此得到越来越多的应用。

二、原理描述

基本概念

  • VRF
    VRF(Virtual Routing and Forwarding)虚拟路由转发表:每个VRF可以理解为一台虚拟逻辑路由器,每台支持VRF的路由器可以创建多个VRF,这台路由器的路由表是由全局路由表和VRF路由表构成的。

    默认情况下,VRF之间、VRF与主路由器之间是逻辑隔离的,一台PE路由器分配多个VRF来连接不同的客户设备,实现同一PE 下的不同客户网络信息的隔离需求。

    VRF中的信息包括:IP路由表、标签转发表、与VRF绑定的接口以及VRF的管理信息。VRF的管理信息包括RD(Route Distinguisher,路由标识符)、路由过滤策略、成员接口列表等。

  • RD
    RD(route distinguisher路由标识):本地有效,作用是解决地址空间重叠的问题。

RD的格式

TYPE(2字节) Administrator Field Assigned Number Field
0x0002 2字节AS号 4字节分配编号
0x0102 4字节IP地址 2字节分配编号

配置RD

  • 每台路由器的每个VRF上的RD值都是唯一的
  • 从该VRF上学习到的所有IPv4路由前缀,都会在IPv4路由前缀前插入
  • 该VRF所配置的RD值,从而变成VNv4路由前缀

CE的IPv4路由进入全局的VNv4地址簇时,在32位的IPv4路由前面增加一个8个字节的RD,变成VNv4路由前缀(12字节),即使客户CE的路由是重叠的,但是可以通过添加唯一的RD ,形成独一无二的VNv4路由前缀,以解决重叠客户路由的通告问题。

地址空间重叠

VN是一种私有网络,不同的VN独立管理自己的地址范围,也称为地址空间(address space)。不同VN的地址空间可能会在一定范围内重合,例如,VRF1和VRF2都使用10.110.10.0/24网段地址,这就发生了地址空间的重叠(address spaces overlapping)。

  • RT
    RT(Route Target),RT的作用:将PE上接收到的VNv4前缀通告给正确的CE设备。

RT作为BGP的扩展community属性有如下两种格式,其中type字段为0x0002或者0x0102时表示RT

TYPE(2字节) Administrator Field Assigned Number Field
0x0002 2字节AS号 4字节分配编号
0x0102 4字节IP地址 2字节分配编号

每个VRF关联一个或多个v*n Target属性。有两类v*n Target属性:

  • Export Target:本地PE从直接相连CE学到IPv4路由后,转换为VN-IPv4路由,并为这些路由设置Export Target属性。Export Target属性作为BGP的扩展团体属性随路由发布。
  • Import Target:PE收到其它PE发布的VN-IPv4路由时,检查其Export Target属性。当此属性与PE上某个VRF的Import Target匹配时,PE就把路由加入到该VRF中。

三、MPLS v*n数据的转发

本部分内容转载自:CSDN博主「曹世宏的博客」的原创文章
原文链接:https://blog.csdn.net/qq_38265137/article/details/80503475

私网标签的分发

PE通过MP-BGP发布私网路由给骨干网的其他相关的PE前,需要为私网路由分配MPLS标签(私网标签)。当数据包在骨干网传输时,携带私网标签。

PE上分配私网标签的方法有如下两种:

  • 基于路由的MPLS标签分配:为VN路由表的每一条路由分配一个标签(one label per route)。这种方式的缺点是:当路由数量比较多时,设备入标签映射表ILM(Incoming Label Map)需要维护的表项也会增多,从而提高了对设备容量的要求。
  • 基于VRF的MPLS标签分配:为整个VRF分配一个标签,该VRF里的所有路由都共享一个标签。使用这种分配方法的好处是节约了标签。

私网路由交叉:

两台PE之间通过MP-BGP传播的路由是VNv4路由。当接收到VNv4路由,PE先进行如下处理:

  • 检查其下一跳是否可达。如果下一跳不可达,该路由被丢弃。
  • 对于RR发送过来的VNv4路由,如果收到的路由中cluster_list包含自己的cluster_id,则丢弃这条路由。
  • 进行BGP的路由策略过滤,如果不通过,则丢弃该路由。

之后,PE把没有丢弃的路由与本地的各个VRF的Import Target属性匹配。VNv4路由与本地VRF的Import VN-Target进行匹配的过程称为私网路由交叉

PE上有种特殊的路由,即来自本地CE的属于不同VN的路由。对于这种路由,如果其下一跳直接可达或可迭代成功,PE也将其与本地的其他VN实例的Import Target属性匹配,该过程称为本地交叉
例如:CE1属于VRF1,CE2属于VRF2,且CE1和CE2同时接入PE1。当PE1收到来自CE1的VN1的路由时,也会与VN2对应的VRF的Import Target属性匹配。

公网隧道迭代:

为了将私网流量通过公网传递到另一端,需要有一条公网隧道承载这个私网流量。因此私网路由交叉完成后,需要根据目的IPv4前缀进行路由迭代,查找合适的隧道(本地交叉的路由除外);只有隧道迭代成功,该路由才被放入对应的VRF路由表。将路由迭代到相应的隧道的过程叫做隧道迭代。

隧道迭代成功后,保留该隧道的标识符(Tunnel ID),供后续转发报文时使用。Tunnel ID用于唯一标识一条隧道。v*n报文转发时根据Tunnel ID查找对应的隧道,然后从隧道上发送出去。

私网路由的选择规则:

经过路由交叉和隧道迭代的路由并不是全部被放入VRF路由表。从本地CE收到的路由和本地交叉路由也不是全部被放入VRF路由表。

对于到同一目的地址的多条路由,如果不进行路由的负载分担,按如下规则选择其中的一条:

  • 同时存在直接从CE收到的路由和交叉成功后的同一目的地址路由,则优选从CE收到的路由。
  • 同时存在本地交叉路由和从其他PE接收并交叉成功后的同一目的地址路由,则优选本地交叉路由。
    (本地最优)

对于到同一目的地址的多条路由,如果进行路由的负载分担,则:

  • 优先选择从本地CE收到的路由。只有一条从本地CE收到的路由而有多条交叉路由的情况下,也只选择从本地CE收到的路由。
  • 只在从本地CE收到的路由之间分担或只在交叉路由之间分担,不会在本地CE收到的路由和交叉路由之间分担。
    负载分担的AS_PATH属性必须完全相同。

路由发布(重!):

基本MPLS v*n组网中,v*n路由信息的发布涉及CE和PE,P设备只维护骨干网的路由,不需要了解任何v*n路由信息。PE设备一般维护所有v*n路由。

VN路由信息的发布过程包括三部分:本地CE到入口PE、入口PE到出口PE、出口PE到远端CE。完成这三部分后,本地CE与远端CE之间建立可达路由,VN路由信息能够在骨干网上发布。

下面分别对这三部分进行介绍。

  1. 本地CE到入口PE的路由信息交换

    CE与直接相连的PE建立邻居或对等体关系后,把本站点的IPv4路由发布给PE。CE与PE之间可以使用静态路由、RIP(Routing Information Protocol)、OSPF(Open Shortest Path First)、IS-IS(Intermediate System to Intermediate System)或BGP(Border Gateway Protocol)。无论使用哪种路由协议,CE发布给PE的都是标准的IPv4路由

  2. 入口PE到出口PE的路由信息交换

    1. PE从CE学到v*n路由信息后,存放到VRF中。同时,为这些标准IPv4路由增加RD,形成VN-IPv4路由。
    2. 入口PE通过MP-BGP的Update报文把VN-IPv4路由发布给出口PE。Update报文中携带Export v*n Target属性及MPLS标签。
    3. 出口PE收到VN-IPv4路由后,在下一跳可达的情况下进行路由交叉、隧道迭代和路由优选,决定是否将该路由加入到VRF的路由表。被加入到v*n路由表的路由,本地PE为其保留如下信息以供后续转发报文时使用:
      • MP-BGP Update消息中携带的MPLS标签值
      • Tunnel ID
  3. 出口PE到远端CE的路由信息交换

    远端CE有多种方式可以从出口PE学习VN路由,包括静态路由、RIP、OSPF、IS-IS和BGP,与本地CE到入口PE的路由信息交换相同。此处不再赘述。值得注意的是,出口PE发布给远端CE的路由是普通IPv4路由。

以下图为(PE-CE之间使用BGP,公网隧道为LSP)为例,说明将CE2的一条路由发送到CE1的过程。

在这里插入图片描述

  1. 在CE2的BGP IPv4单播地址族下引入IGP(Interior Gateway Protocol)路由。
  2. CE2将该路由随EBGP的Update消息一起发布给Egress PE。Egress PE从连接CE2的接口收到Update消息,把该路由转化为VN IPv4路由,加入对应的VRF路由表。
  3. Egress PE为该路由分配MPLS标签,并将标签和v*n IPv4路由信息加入MP-IBGP的Update消息中的NLRI字段中,Export-RT属性加入MP-BGP Update消息的扩展团体属性字段中,将Update消息发送给Ingress PE。
  4. Ingress PE对该路由进行路由交叉。交叉成功则根据路由目的IPv4地址进行隧道迭代,查找合适的隧道。如果迭代成功,则保留该隧道的Tunnel ID和标签,并将路由加入该VRF路由表。
  5. Ingress PE把该路由通过BGP Update消息发布给CE1。此时路由是普通IPv4路由
  6. CE1收到该路由后,把该路由加入BGP路由表。通过在IGP中引入BGP路由的方法可使CE1把该路由加入IGP路由表。

MPLS VN的报文转发(重!):

在基本MPLS VN应用中(不包括跨域的情况),v*n报文转发采用两层标签方式:

  • 第一层(公网)标签在骨干网内部进行交换,指示从PE到对端PE的一条LSP。v*n报文利用这层标签,可以沿LSP到达对端PE
  • 第二层(私网)标签在从对端PE到达CE时使用,指示报文应被送到哪个Site,或者更具体一些,到达哪一个CE。这样,对端PE根据内层标签可以找到转发报文的接口

以下图为例说明MPLS VN报文的转发过程。下图是CE1发送报文给CE2的过程。其中,I-L表示内层标签,O-L表示外层标签。
在这里插入图片描述

  1. CE1发送一个VN报文。
  2. Ingress PE从绑定了VN实例的接口上接收v*n数据包后进行如下操作:
    1. 先根据绑定的VRF的RD查找对应VN的转发表。
    2. 匹配目的IPv4前缀,查找对应的Tunnel ID。
    3. 将报文打上对应的标签(I-L),根据Tunnel-ID找到隧道。
    4. 将报文从隧道发送出去。此例的隧道是LSP,则打上公网(外层)MPLS标签头(O-L1)。

接着,该报文携带两层MPLS标签穿越骨干网。骨干网的每台P设备都对该报文进行外层标签交换。

  1. Egress PE收到该携带两层标签的报文,交给MPLS协议处理。MPLS协议将去掉外层标签(此例最后的外层标签是O-L2,但如果应用了倒数第二跳弹出,则此标签会在到达Egress PE之前的一跳弹出,Egress PE只能收到带有内层标签的报文)。

  2. 此时Egress PE就可以看见内层标签,发现该标签处于栈底,将内层标签剥离。

  3. Egress PE将报文从对应出接口发送给CE2。此时报文是个纯IP报文。

这样,报文就成功地从CE1传到CE2了。CE2按照普通的IP转发过程将报文传送到目的地。

四、常见问题

  1. 如何做到同-台PE设备的不同客户CE设备之间的隔离? ——VRF
  2. 如何在PE设备与CE设备之间维护路由信息? ——RT值
  3. 如何在公网.上传递客户私有路由? ——MP-BGP传递v*nV4路由实现
  4. 如何容许重叠的客户私有路由? ——RD值
  5. 如何在公网.上转发客户数据(解决路由黑洞)? ——标签传递