47.2.1   帧模式MPLS转发
前面简要介绍了MPLS的传播过程,这里我们来详细介绍MPLS的转发机制,在MPLS的转发机制中,通
常分为帧模式和信元模式。帧模式工作流程如下:
 
首先,当San Jose路由器收到IP分组以后,将会根据其目的地址,对IP转发表FIB进行3层查找。由于Cisco
的CEF是唯一使用FIB表的第3层交换机制,所以必须在运行MPLS的所有路由器上启用CEF,而所有接收非标
签分组,并将其以标签分组的方式通过MPLS主干传播的入口接口,都必须支持CEF交换。核心路由器不执
行CEF交换—他们只交换标签分组---但为分配标签,他们仍然以全局方式启用CEF。通过如下命令可以查看
FIB的信息:
SanJose#show ip cef 192.168.2.0
192.168.2.0/24, version 11, cached adjacency to Serial1/0/1
0 packets, 0 bytes
   tag information set
        local tag: 29
        fast tag rewrite with Se1/0/1, point2point, tags imposed: {30}
   via 172.16.1.4, Serial1/0/1, 0 dependencies
        next hop 172.16.1.4, Serial1/0/1
        valid cached adjacency
        tag rewrite with Se1/0/1, point2point, tags imposed: {30}
 
标签的转发通常使用特定的标签转发表.查看方式如下:
SanFrancisco#show tag forwarding-table tags 30 detail
Local    Outgoing        Prefix                        Bytes tag    Outgoing      Next Hop
tag        tag or VC      or Tunnel Id            switched      interface
30          28                    192.168.2.0/24        0                    Se0/0/1        172.16.3.1
                MAC/Encaps=14/18, MTU=1504, Tag Stack{28}
                00107BB59E2000107BEC6B008847 0001C000
        Per-packet load-sharing
 
NewYork#show tag forwarding-table tags 37 detail
Local    Outgoing        Prefix                        Bytes tag    Outgoing      Next Hop
tag        tag or VC      or Tunnel Id            switched      interface
37          untagged              192.168.2.0/24 0                    Se2/1/3        192.168.2.1
                MAC/Encaps=0/0, MTU=1504, Tag Stack{}
        Per-packet load-sharing
MPLS标签使用栈结构,也就是一个分组可以包含多个标签,并利用BoS位标识栈底。
 
在帧模式MPLS中,运行Cisco IOS软件并作为MPLS LSR的Cisco路由器可以对分组标签执行大量的操作: 
  弹出标记(Pop tag):
删除MPLS标签栈顶的标签,将余下的有小负载作为一个标签分组进行传递。
 
 
  聚集(Aggregate):
删除MPLS标签栈顶的标签,并对低层的IP分组执行3层查找。被删除的标签是栈底标签,如
果不是则丢弃报文。
 
标签栈进行MPLS交换的工作原理如下: 在网络中通过某些功能使得边缘路由器就分组规则达成一致,
而不需要了解核心网络情况时可以启用这种转发方式。首先NewYork路由器分配标签为73,并且和SanJose
达成一致,数据在核心传送前就带有了双标签,但两个POP的用户通过73标签的封装,并不了解骨干网的
一些情况,如下图所示
 
标签具体的分配流程采用TDP或者LDP协议。由MPLS的发展史可以看到,TDP是LDP的前身,为Cisco
专有协议,并且在IOS 11.1CT以及12.0中实现。而LDP为TDP在IETF标准化后的产物,IOS 12.2T以后的版本包
含此协议。功能上而言,两者是等价的俄,可以同时用于网络中,甚至可以在同一个LSR的不同接口启用
不同的标签分发协议。关于它们,我们将在稍后的章节介绍。
最后我们注意,在MPLS帧模式中,有一种特殊的机制为倒数第二跳弹出(Penultimate  Hop  Popping).
对于一个从MPLS邻居收到的目的地为MPLS域外的一个子网分组而言, MPLS网络中的出口边缘LSR可能必须
对它进行两次查找操作,该LSR必须检查标签栈头中的标签。并执行标签查找工作,就像认识到必须弹出
标签并检查并检查底层IP分组一样,必须对IP分组执行3层查找,然后再转发。
例如上图的NewYork  POP路由器,在双重栈的查找下,使得性能下降剧烈。所以为了解决这个问题,
提出了PHP机制,如下图所示:
 
倒数第二跳弹出机制只用于直接连接的子网或者聚合路由。对于直接相连的接口,需要执行3层查找,
以便获得被发送到直接相连的目的地分组的小一条信息。如果前缀是一个聚合,也必须执行3层查找,以
获得具体的路由,然后使用它将分组路由给正确的出口。
使用倒数第二跳弹出机制后,edge-LSR可以请求上游邻居弹出标签,如上页图中的New  York路由器。
邻居通告采用特殊的隐式无效(imp-null)LDP、TDP标签值告知。
NewYork#show tag tdp binding 192.168.2.0 24
   tib entry: 192.168.2.0/24, rev 10
              local binding:    tag: imp-null(1)
              remote binding: tsr: 172.16.3.1:0, tag: 28
Washington#show tag tdp binding 192.168.2.0 24
    tib entry: 192.168.2.0/24, rev 10
              local binding:    tag: 28
              remote binding: tsr: 172.16.3.2:0, tag: imp-null(1)
             remote binding: tsr: 172.16.1.4:0, tag: 30
              remote binding: tsr: 172.16.2.1:0, tag: 37
 
47.2.2   帧模式MPLS和BGP交互
我们知道在传统的以BGP链接的骨干网中,通常每个路由器都要运行BGP路由协议,特别是在核心网中,
IBGP是全互联的,如下图所示:
 
在如上配置的情况下,查看7200a的路由表和转发表如下:
7200a#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
              D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
              N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
              E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
              i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
              * - candidate default, U - per-user static route, o - ODR
Gateway of last resort is 7.1.5.1 to network 0.0.0.0
B        171.68.0.0/16 [200/0] via 12.12.12.12, 01:10:44
          3.0.0.0/32 is subnetted, 1 subnets
7200a#show ip cef 171.68.0.0
171.68.0.0/16, version 69, cached adjacency to POS3/0
0 packets, 0 bytes, wccp tag 139
   via 12.12.12.12, 0 dependencies, recursive
        next hop 10.0.3.5, POS3/0 via 12.12.12.12/32
        valid cached adjacency
这种结构由于核心路由器要运行BGP,配置比较复杂,出现故障恢复也比较麻烦,和核心层尽量简单
的设计模式有些冲突,在MPLS核心网络中,核心路由器不运行BGP,同时,iBGP链接仅在各POP之间运行,
如下图所示:
 
查看7200a的FIB信息如下:
7200a#show ip cef 171.68.0.0 detail
171.68.0.0/16, version 1934, cached adjacency to POS3/0
0 packets, 0 bytes
   tag information from 12.12.12.12/32, shared
        local tag: 36
        fast tag rewrite with PO3/0, point2point, tags imposed {12323}
   via 12.12.12.12, 0 dependencies, recursive
        next hop 10.0.3.5, POS3/0 via 12.12.12.12/32
        valid cached adjacency
        tag rewrite with PO3/0, point2point, tags imposed {12323}
在12008a上查询LFIB表如下:
12008a#show mpls forwarding
Local    Outgoing        Prefix                        Bytes tag    Outgoing      Next Hop
tag        tag or VC      or Tunnel Id            switched      interface
12318    Pop tag          10.0.57.0/24            0                    PO1/0            point2point
              1/43                10.0.57.0/24            0                    AT3/0.1        point2point
12319    12320              10.0.86.0/24            0                    PO1/0            point2point
              1/44                10.0.86.0/24            0                    AT3/0.1        point2point
12320    12321              10.1.1.1/32              0                    PO1/0            point2point
              1/45                10.1.1.1/32              0                    AT3/0.1        point2point
12321    12322              10.1.1.2/32              0                    PO1/0            point2point
              1/46                10.1.1.2/32              0                    AT3/0.1        point2point
12322    12326              16.16.16.16/32        0                    PO1/0            point2point
               1/51                16.16.16.16/32        0                    AT3/0.1        point2point
12323    12324              12.12.12.12/32        575                PO1/0            point2point
               1/49                12.12.12.12/32        0                    AT3/0.1        point2point
12324    12325              13.13.13.13/32        0                    PO1/0            point2point
                1/50                13.13.13.13/32        0                    AT3/0.1        point2point
12325    12327              17.17.17.17/32        144                PO1/0            point2point
 
12008a#show ip cef 12.12.12.12 internal
12.12.12.12/32, version 385, per-destination sharing
0 packets, 0 bytes
   tag information set, shared
        local tag: 12323
  via 10.0.5.11, POS1/0, 0 dependencies
        traffic share 1
        next hop 10.0.5.11, POS1/0
        unresolved
        valid adjacency
        tag rewrite with PO1/0, point2point, tags imposed {12324}
   via 10.0.4.11, ATM3/0.1, 1 dependency
        traffic share 1
        next hop 10.0.4.11, ATM3/0.1
        unresolved
        valid adjacency
        tag rewrite with AT3/0.1, point2point, tags imposed {1/49(vcd=65)}
 
   0 packets, 0 bytes switched through the prefix
   tmstats: external 0 packets, 0 bytes
                      internal 0 packets, 0 bytes
   Load distribution: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (refcount 2)
   Hash    OK    Interface                                  Address                  Packets    Tags imposed
   1          Y      POS1/0                                        point2point                      0        {12324}
   2          Y      ATM3/0.1                                    point2point                      0        {1/49}
   3          Y      POS1/0                                        point2point                      0        {12324}
   4          Y      ATM3/0.1                                    point2point                      0        {1/49}
   5          Y      POS1/0                                        point2point                      0        {12324}
   6          Y      ATM3/0.1                                    point2point                      0        {1/49}
   7          Y      POS1/0                                        point2point                      0        {12324}
   8          Y      ATM3/0.1                                    point2point                      0        {1/49}
   9          Y      POS1/0                                        point2point                      0        {12324}
   10        Y      ATM3/0.1                                    point2point                      0        {1/49}
   11        Y      POS1/0                                        point2point                      0        {12324}
   12        Y      ATM3/0.1                                    point2point                      0        {1/49}
   13        Y      POS1/0                                        point2point                      0        {12324}
   14        Y      ATM3/0.1                                    point2point                      0        {1/49}
   15        Y      POS1/0                                        point2point                      0        {12324}
   16        Y      ATM3/0.1                                    point2point                      0        {1/49}
   refcount 5
具体的转发规则如下图所示:
 
根据MPLS的转发原理,不同的地址和网络边界可以查询不同的转发表,图下所示:
 
47.2.3   信元模式MPLS
在信元模式MPLS中,存在一些局限:
  ATM头没有字段承载TTL
  不支持倒数第二跳弹出(PHP)
  不支持ATM LSR的路由聚合
由于ATM头无法携带TTL,则在ATM中传输的环路问题难以避免,解决这个问题可以通过2方面解决:
1.  LDP在LSP的LDP信令交互中使用路由跳计数TLV.因为ATM  LSR不能每一跳都减少TTL,所以在心
愿出口,路由器要把TTL减掉信元网络中的跳数.
2.  LDP的路径向量TLV保存了在信元网络中LSP经过的所有路由跳的列表信息.路径向量用来在
控制平面进行环路检测,当向量中发现某个LSP出现2次后,则认为是环路.
注意:  在帧模式网络中不使用LDP路径向量和跳计数TLV.
另一个问题需要解释的是ATM不支持PHP,我们知道,在传统的帧模式转发过程中,在倒数第二跳弹出标
签后,IP报文依旧可以传输到最后一跳路由器.而ATM的标签为VPI/VCI值,所以倒数第二跳弹出了以后,数据将
会面临无处可发的状态.同时虽然ATM  LSR在控制平面运行路由协议,但路由不能进行汇总,因为这样将会导
致心愿的重组和再次分割,处理消耗过大,并且这样而言,ATM交换机成了一个路由器了.
在处理ATM的MPLS交换中,要求ATM  eLSR控制层面具有纯粹的IP连接性.并且可以通过VC  0/32实现管
理信息的传递和互通  .在ATM  LSR的控制层面,采用的是午夜行船(Ship-in-the-night)的模式,  即在VC交换层
面上方使用不同的控制层面,
信元模式MPLS转发流程如下,  采用逐渐的向下游发送转发标签请求,下游依次回复标签,完成LVC的建
立.
 
在ATM网络中,VC的使用相对紧张,所以对于每个FEC定义一个VC的做法会导致VC的耗尽从而影响转发
性能.当合并VC的时候,会遇到如下的问题.
 
在实现VC聚合的时候,采用了一个简单的方法,在ATM-LSR交换机上,对信元按照入端VC排序.
 
0 1/30
0 1/30
0 1/30
output
Interface&VC
0 1/30
0 1/30
0 1/30
output
Interface&VC
 
47.2.4   MPLS TTL
我们已经熟悉在IP网络中的TTL机制,每经过一个路由器TTL值减一,当TTL等于零的时候,丢弃报文并发
送不可达的ICMP消息.并用于防止在路由环路的时候,报文在环路中反复传输.
在MPLS网络中,MPLS标签同样含有该字段,它采用类似的机制来防止IP报文在MPLS云中反复传递.当一
个IP分组要进入MPLS云的时候,在IngressLSR方,拷贝IP报文中的TTL字段,然后逐跳减一(IP段中的TTL不变),而
在Egress站中,将其复制到IP-TTL中,如下图所示: