MPLS学习( by quqi99 )

作者:张华  发表于:2013-06-29
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

 http://blog.csdn.net/quqi99 )

          在谈MPLS时,先回顾一下路由选择协议算法( 动态路由,动态自学习转发规则。Linux本身将ipv4 forward功能打开可添加路由规则做静态路由器,动态路由可有一个软件Quagga来模拟),它分为两类:

1)内部网关协议IGP,如RIP,OSPF等

2)外部网关协议EGP,如BGP。

       RIP(Routing Information Protocol, 路由信息协议)是一种基于距离向量的路由选择协议,它仅和相邻路由器交换信息,交换的信息是“我到本自治系统中所有网络的(最短)距离,以及每个网络应该经过的下一跳路由器。它的缺点是,网络中的一个路由器出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器,即所谓的”好消息传播得快,而坏消息传播得慢“。

        OSPF(Open Shortest Path First, 开放最短路径优先)是一种基于链路状态协议,它不像RIP只和相信路由器交换信息,而是采取洪泛法和本自治系统内所有的路由器交换信息,这样每个路由器都知道全网的拓扑结构。为了使它应用于规模很大的网络,它将一个自治系统再划分为若干个更小的自治系统,在一个区域内的路由器最好不要超过200个。

可以设置IP帧的服务类型(TOS)字段,将它设置为代价加权值,这样就可能算出多条代价相同的路径,OSPF为每条路径负载平衡分配通信量。而RIP只能找到某个网络的一条路径。

         BGP(网络边界协议)是一种基于路径向量的路由算法,它不是为了找最佳路由,而是为了找一个比较好的路由。每个自治系统出一个路由器作为BGP发言人和其他自治系统的BGP发言人通过TCP建立连接协商到达某一目的地址需要可经过哪个自治区域


          然后我们再回顾一下路由器的原理。

          路由器是一种具有多个输入端口和多个输出端口的专用计算机,通过路由表来控制从哪个输入端口转到哪一个输出端口。那么它就分为“转发”和路由选择“两个层面,如下图,转发表是根据路由表建立的。路由选择是多个路由器协同构建路由表,当网络拓扑发生变化时,动态地改变所选择的路由,它是用软件实现的。而转发表则根据路由表得出的从哪个端口进的要往哪个端口转,为提高转发速度它可以通过硬件来实现。在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,而是笼统地的使用路由表这一名词。我在这里专门提这事,是因为MPLS也就是在转发表这一块引入了标签的概念,因为标签是等长的,不像IP一样不等长要用最大长度匹配算法影响效率。


           


            最早使用的路由器就是利用普通的计算机,用计算机的CPU作为路由器的路由选择处理机。当某个输入端口(网卡)收到一个分组时,就中断通过CPU,然后分组就从输入端口复制到存储器中,CPU再从分组首部中提取目的地址,查找路由表,再将分组复制到合适的输出端口(网卡)的缓存中,这就是下面基于存储器的交换结构。

          后来有不经过CPU直接走总线的,但总线忙的时候就会被阻塞去等。

          再后来有基于互连网络的交换方式,它有2N条总线,可以使N个输入端口和N个输出端口相连。


                       

         上面已经谈到了MPLS的实质就是在转发表中引入了标签的概念,以前的路由器是通过目的地址进行转发的,发出数据的路由器不知道数据会怎么转发,而是走一步看一步。但是LSR(Label Switching Router)标签路由器它先就通过LDP(Label Switched Protocol)标签分配协议发一个包到目的地址,利用L3层的路由功能就把要转发的路径LSP(Label Switched Path)先事先确定下来了,接下来LDR就照着这个已经早就算好的LSP一步步转发就好了,从而提供了效率。

        并且它提供了转发等价类(FEC, Forwarding Equivalence Class)的概念,即安同样的方式对待,即可以由管理员灵活地将目的地址相同的数据包归为一类,或者将目的地址和源地址相同的数据包归为一类(就就相当于普通的路由器),具体将具有某种服务质量的数据包归于一类。总之,非常灵活。归为一类的FEC就会分配一个相同的具有本地意义的标签。在用LDP协议确实LSP时也早就在每一个LSR上为每一个FEC分配好本地有意义的标签了。通过FEC的灵活设置,可以很灵活的控制从入LSR到出LSR的路径,从而实现负载均衡(也称为流量工程)。

        所以现在的关键就是LDP如何生成LSP。刚才已经说了LSP的建立实质就是将FEC和标签进行绑定。例如当网络的路由改变时,如果有一个边缘LSR发现自己的路由表中出现了新的目的地址,并且这一地址不属于任何现有的FEC,则该边缘LSR需要为这个新目的地址建立一个新的FEC

        1)边缘LSR决定该FEC将要使用的路由,向其下游LSR发起标签请求消息,并指时是要为哪个FEC分配标签。

        2)下游LSR收到请求消息后,根据本地的路由表找出对应该FEC的下一跳,继续向下游LSR发出标签请求消息。

        3)出口LSR最终收到这种消息之后,就为该FEC分配合法的标签信息,并向上游报告它分配的标签。

        4)收到标签分配消息的LSR检查本地存储的标签请求消息状态,如果数据库中记录了相应的标签请求消息,LSR将为该FEC进行标签分配,然后继续向上游报告标签分配消息。

       5)入口LSR也做上步同样的操作。这时,就完成了LSP的建立,接下来就是各LSR根据这事先生成好的LDP进行转发了。

       

       另外值得一提的是,维护标签可以使用上面提到的LDP专有协议,也可以通过扩展BGP来实现


     关于路由区分符(Route Distinguisher:RD)和路由目标(Route Target:RT)

RD, VPN中IP地址的规划是由客户自行制订的,所以有可能重叠。地址重叠的后果之一就是BGP无法区分来自不同VPN的重叠路由,从而导致某个站点不可达。为了解决这个问题,BGP/MPLS VPN除了采用在PE路由器上使用多个VRF表的方法,还引入了RD的概念。RD具有全局唯一性,通过将8个字节的RD作为IPv4地址前缀的扩展,使不唯一的IPv4地址转化为唯一的VPN-IPv4地址。VPN-IPv4地址对客户端设备来说是不可见的,它只用于骨干网络上路由信息的分发。RD和VRF表之间建立了一一对应的关系。通常情况下,对于不同PE路由器上属于同一个VPN的子接口,为其所对应的VRF表分配相同的RD,换句话说,就是为每一个VPN分配一个唯一的RD。但是对于重叠VPN,即某个站点属于多个VPN的情况,由于PE路由器上的某个子接口属于多个VPN,此时,该子接口所对应的VRF表只能被分配一个RD,从而多个VPN共享一个RD。

RT, RT的作用类似于BGP中扩展团体属性,用于路由信息的分发。它分成Import RT和Export RT,分别用于路由信息的导入、导出策略。当从VRF表中导出VPN路由时,要用Export RT对VPN路由进行标记;在往VRF表中导入VPN路由时,只有所带RT标记与VRF表中任意一个Import RT相符的路由才会被导入到VRF表中RT使得PE路由器只包含和其直接相连的VPN的路由,而不是全网所有VPN的路由,从而节省了PE路由器的资源,提高了网络拓展性。RT具有全局唯一性,并且只能被一个VPN使用。通过对Import RT和Export RT的合理配置,运营商可以构建不同拓扑类型的VPN,如重叠式VPN和Hub-and-spoke VPN。


  MPLS VPN网络主要由CE、PE和P等3部分组成,如下图:



  • CE(Custom EdgeRouter,用户网络边缘路由器)设备直接与服务提供商网络相连,它“感知”不到VPN的存在;
  • PE(Provider EdgeRouter,骨干网边缘路由器)设备与用户的CE直接相连,负责VPN业务接入,处理VPN-IPv4路由,是MPLS三层VPN的主要实现者:
  • P(ProviderRouter,骨干网核心路由器)负责快速转发数据,不与CE直接相连。在整个MPLSVPN中,P、PE设备需要支持MPLS的基本功能,CE设备不必支持MPLS。

MPLSVPN网络存在问题

  1. 本地路由冲突问题,即:上图中,在BLUE和YELLOW两个VPN中可能会使用相同的IP地址段,那么在PE上如何区分这个地址段的路由是属于哪个VPN的;
  2. 路由在网络中的传播问题,上述问题会在整个网络中存在;
  3. PE向CE的报文转发问题,当PE接收到一个目的地址在10.1.1.0/24网段内的IP报文时,他如何判断该发给哪个VPN;

    VRF: Virtual RoutingForwarding,VPN路由转发表,也称VPN-instance(VPN实例),是PE为直接相连的site建立并维护的一个专门实体,每个site在PE上都有自己的VPN-instance,每个VPN-instance包含到一个或多个与该PE直接相连的CE的路由和转发表,另外如果要实现同一VPN各个Site间的互通,该VPN-instance还就应该包含连接在其他PE上的发球该VPN的Site的路由信息。

VPN路由传递过程

  1. PE从CE接收路由,放入相应的VRF;
  2. 发送方PE将VRF中的IPv4路由添加VRF中配置的RT-Export,RD等参数变为VPN v4路由然后通过MP-iBGP邻居传递给远端PE;
  3. 远端PE接收到VPN v4路由后,比较本地VRF中的Import RT和接收到的Export RT,如果发现至少一个匹配项,则将VPN v4路由还原成IPv4路由导入到对应的VRF;
  4. 远端PE将VRF中的路由传递给CE;

// RT是Route Target的缩写,RT的本质是每个VRF表达自己的路由取舍及喜好的方式,主要用于控制VPN路由的发布和安装策略;

//  RD是Route Distinguisher的缩写,是说明路由属于哪个VPN的标志;


 https://wiki.openstack.org/wiki/QuantumBGP_MPLS_VPN 这个链接是OpenStack中对MPLS的设计:

-GeneralBGPMPLSImplementation.png

    上面说了,两个自治区域中会有两个BGP发言人进行协商,那这两个发言人称之为一对peer, Neutron Server和BGP peer之间通过BGPMplsVPNDriver这个BGP发言人进程来实现协商过程。这个过程的命令使用顺序如下:

Create bgpmplsvpngroup

  quantum bgpmplsvpngroup-create --name test --route-target 6800:1

List bgpmplsvpngroup

 quantum bgpmplsvpngroup-list -c id -c name -c route_target

Set bgpmplsvpngroup id to env variable

  GROUP=`quantum bgpmplsvpngroup-list -c id -c name -c route_target  | awk '/test/{print $2}'`

Delete bgpmplsvpngroup

  quantum bgpmplsvpngroup-delete <id>

Create virtual router

  quantum router-create router1

Create network which will connect virtual router and PE router

  quantum net-create net-connect

Create subnet in the above network

  quantum subnet-create net-connect 50.0.0.0/24 --name=subnet-connect

Create BGP MPLS VPN

  quantum bgpmplsvpn-create --name=vpn1 --route_distinguisher=6800:1 --connected_subnet=subnet-connect --routes '[{"destination": ["10.0.0.0/24", "20.0.0.0/24"], "router_id": "router1"}]' --remote_prefixes list=true 30.0.0.0/24 40.0.0.0/24 --connect_to list=true $GROUP --connect_from list=true $GROUP

List BGP MPLS VPN

  quantum bgpmplsvpn-list

Delete BGP MPLS VPN

  quantum bgpmplsvpn-delete vpn1

Insert VPN service to the router

  quantum router-service-insert router1 vpn1


20150116华为公司的另外一个类似的BP

数据模型

  • MPLS VPN: /v2.0/inter_dc/, Mapping connectivity between attachment circuits in different DCs using tunnels
  • Attachment Circuit: /v2.0/inter_dc/attachment_circuits, Mapping the connectivity between PE and CE in MPLS
  • Provider Edge: /v2.0/inter_dc/provider_edges,  Mapping the concept of PE in MPLS
  • Tunnel: /v2.0/inter_dc/tunnels, Mapping the connectivity between PE and PE in MPLS that provide Qos, Backup-type and Bandwidth criteria


L2层DC间互联,L2层直接使用overlay方式不交换路由,L3层互联在CE和PE之间需要交换路由

L2层DC间互联

1, First step is to create provider edges in Datacenter-1 and Datacenter-2.
POST /v2.0/inter_dc/provider_edges
{
"provider_edges": [
  {
   "name": "DC1_Provider_Edge”
  },
  {
   "name": "DC2_Provider_Edge”
  }]
}
2, Attachment circuits can be created for each tenant to attach the L2 networks to the provider edge in each datacenter.
POST /v2.0/inter_dc/attachment_circuits
{
"attachment_circuits": [
  {
   "name": "DataCenter 1",
   "type": "L2"  // Other options L3
   "provider_edge_id": "<UUID of provider edge 1>",
   "networks": [
    {
        "network_id": "<UUID of L2 network to be extended>"
    }
     // More L2 networks are allowed
    },
    {
    "name": "DataCenter 2",
    “type”: “L2” // Other options L3
    "provider_edge_id": "<UUID of provider edge 2>",
    "networks": [
     {
        "network_id": "<UUID of L2 network to be extended>"
     }
       // More L2 networks are allowed
    }]
}
3, create mpls_vpn
POST /v2.0/inter_dc/mpls_vpns
{
    "mpls_vpn":
    {
      "name": "Datacenter Interconnect",
       “type”: “L2”, // Other options: L3
       "tunnel_options": {
             "tunnel_type": "fullmesh", //Other options: Customized
              "tunnel_backup": "frr", // Other options: Secondary
              "qos": "Gold", // Other options: Silver, Bronze
              "bandwidth": "10" // Unit: Gbps
     }
     "attachment_circuits": [
      {
        "attachment_circuit_id": "<UUID of attachment circuit>"
      },
      {
        "attachment_circuit_id": "<UUID of attachment circuit>"                
      }]
   }
}

L3层DC间互联

just associate with router rather network in attachement_ciruits, then define the tunnels. 
[1], https://docs.google.com/a/canonical.com/file/d/0B3xdv0OBUS0SMmFQb0tZMmR3RUE/edit
[2], https://review.openstack.org/#/c/101044/


Logo

更多推荐