1. Topology
CE1------[R1(PE1)---R2(P)---R3(ASBR1)]------[R4(ASBR2)----R5(PE2)]----------CE2
                              [AS 100]                                              [AS 200]
2. 标签分配过程
    PE1与ASBR1之间是两层标签,内层标签为到×××目的网络的私网标签,PE1通过MP-IBGP分配的;外层标签为到PE1 Loopback接口地址的公网标签,由LDP分配的。
    ASBR1与ASBR2之间是一层标签,为到×××目的网络的私网标签,由 ASBR1通过MP-EBGP分配的。
    ASBR2与PE2之间是两层标签,这要分为两种情况:
      - 如果ASBR2没有执行next-hop-self,内层标签为到×××目的网络的私网标签,是由ASBR1通过MP-EBGP分配给ASBR2的,而 ASBR2没有改变标签信息,通过MP-IBGP将其分配给PE2;外层标签为到ASBR1与ASBR2建立EBGP的IP地址的公网标签,由LDP分配的。注意,到这个32位主机地址的IP路由要发布到整个AS200中去。
      - 如果ASBR2执行了next-hop-self,内层标签为到×××目的网络的私网标签,是由ASBR2通过MP-IBGP分配的;外层标签为到 ASBR2的Loopback接口地址的公网标签,由LDP分配的。
3. 标签转发过程
    - 如果ASBR2上没有执行next-hop-self:
    PE2上,查找VRF标签转发表,找到到×××目的网络的下一跳地址和私网标签;由于下一跳地址为ASBR1上与ASBR2建立EBGP的地址,于是递归查找到该地址的公网标签转发表,得公网标签;PE2封装2层标签转发给 ASBR2;
    ASBR2上,根据公网标签执行标签转发,由于是倒数第二跳,弹出外层标签,ASBR2将只有1层×××标签的报文转发给 ASBR1;
    ASBR1上,根据私网标签执行标签转发,执行一个×××的标签交换动作,并查到下一跳为PE1 Loopback地址,所以进行递归查找公网标签转发表,得公网标签;ASBR1封装2层标签转发给AS100中得P,即,R2;
    P (R2)上,根据公网标签执行标签转发,由于是倒数第二跳,所以弹出公网标签,将只有1层×××标签得报文转发给PE1;
    PE1上,根据私网标签执行标签转发,由于是最有一跳,所以弹出私网标签,将IP报文转发给CE1。
    - 如果ASBR2上执行了next-hop-self:
    PE2上,查找VRF标签转发表,找到到×××目的网络的下一跳地址和私网标签;由于下一跳地址为ASBR2 Loopback接口得地址,于是递归查找到该地址的公网标签转发表,得公网标签3,即,倒数第二跳;PE2只封装1层×××标签转发给ASBR2;
    ASBR2 上,根据私网标签执行标签转发,执行一个标签交换得动作,ASBR2将只有1层×××标签的报文转发给ASBR1;
    ASBR1上,根据私网标签执行标签转发,执行一个标签交换得动作,并查到下一跳为PE1 Loopback地址,所以进行递归查找公网标签转发表,得公网标签;ASBR1封装2层标签转发给AS100中得P,即,R2;
    P (R2)上,根据公网标签执行标签转发,由于是倒数第二跳,所以弹出公网标签,将只有1层×××标签得报文转发给PE1;
    PE1上,根据私网标签执行标签转发,由于是最有一跳,所以弹出私网标签,将IP报文转发给CE1。
    
4. 特点
    ASBR 上维护了所有×××的路由表和标签转发表,所以,在这个解决方案中,ASBR的压力最大,要求最高。
    
5. 各LSR上的相关表项 (在ASBR2上,没有执行next-hop-self操作)
- R1 (PE1 in AS 100)
C3600-R1#show ip bgp ***v4 all labels                                          
   Network          Next Hop      In label/Out label                            
Route Distinguisher: 100:1 (***-a)                                              
   10.16.1.0/24     0.0.0.0         20/aggregate(***-a)     *****                    
   10.58.1.0/24     172.16.34.4     nolabel/18                                  
到×××目的网络10.16.1.0/24的入标签为20,将分配给其MP-IBGP Peer R3。
C3600-R1#show ip cef vrf ***-a 10.16.1.0 255.255.255.0                          
10.16.1.0/24, version 7, epoch 0, attached, connected                          
0 packets, 0 bytes                                                              
  tag information set                                                          
    local tag: 20                     *****                                          
  via FastEthernet1/0, 0 dependencies                                          
    valid glean adjacency                                                      
    tag rewrite with , , tags imposed: {}     *****                                  

- R2 (P in AS 100)
P 路由器感知不到××× LSP,所以只需要关注公网LSP
C3600-R2#show mpls forwarding-table                                            
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop            
tag    tag or VC   or Tunnel Id      switched   interface                      
16     Pop tag     1.1.1.1/32        14034      Fa0/0      172.16.12.1          
到 1.1.1.1/32的出标签为 弹出操作,这是由R1分配的标签3导致的动作。
到1.1.1.1/32的入标签为 16,将分配给R3。
C3600-R2#show ip cef 1.1.1.1                                                    
1.1.1.1/32, version 11, epoch 0, cached adjacency 172.16.12.1                  
0 packets, 0 bytes                                                              
  tag information set                                                          
    local tag: 16                                                              
  via 172.16.12.1, FastEthernet0/0, 0 dependencies                              
    next hop 172.16.12.1, FastEthernet0/0                                      
    valid cached adjacency                                                      
    tag rewrite with Fa0/0, 172.16.12.1, tags imposed: {}                      
- R3 (ASBR1 in AS 100)
ASBR是要维护××× LFIB信息的,但是,不维护×××的FIB信息
C3600-R3#show mpls forwarding-table                                            
Local  Outgoing    Prefix                 Bytes tag  Outgoing   Next Hop            
tag    tag or VC   or Tunnel Id           switched   interface                              
17     16          1.1.1.1/32             0          Fa0/0      172.16.23.2          
20     20          100:1:10.16.1.0/24     942        Fa0/0      172.16.23.2      
到1.1.1.1/32的出标签为16,这是由R2分配的。
到100:1:10.16.1.0/24的出标签为20,这是由R1分配的。
到100:1:10.16.1.0/24的入标签为 20,将分配给MP-EBGP Peer.
在ASBR上,需要通过分别查找私网/公网标签,来分析到×××目的地址的出标签栈,因为在CEF表中并没有记录。
在本例中,到×××目的地址100:1:10.16.1.0/24的出标签栈为{16 20}
- R4 (ASBR2 in AS 200)
R4将来自AS 100的×××路由通告给自己的MP-IBGP Peer时,将下一跳设置为R3 (BGP缺省行为)。所以,R4不需要维护来自AS100的××× LFIB信息,只需要维护到R3 (建立BGP邻居使用的地址)的LFIB信息
C3600-R4#show mpls forwarding-table                                            
Local  Outgoing    Prefix                Bytes tag  Outgoing   Next Hop            
tag    tag or VC   or Tunnel Id          switched   interface                      
16     Pop tag     172.16.34.3/32        504        Fa0/0      172.16.34.3                  
到172.16.34.3/32 (这是R3上与R4建立BGP邻居的地址)的出标签为 弹出操作。注意,这个行为不是因为R3分配给R4标签3导致的(R3并没有分配给R4关于172.16.34.3/32的任何标签),这个行为是MP- EBGP结果。如果会话是MP-EBGP,直连,支持×××v4,就会生成该条目。
到172.16.34.3/32的入标签为16,将分配给 R5。
其实,R4同样也维护了到AS100 ×××目的地址的LIB信息,如果本地接入×××,那么这个条目将转化为LFIB
  C3600-R4#sho ip bgp ***v4 all labels                                            
   Network          Next Hop      In label/Out label                            
Route Distinguisher: 100:1                                                      
   10.16.1.0/24     172.16.34.3     nolabel/20                                  
到10.16.1.0/24的出标签为20,这是由R3分配的。
- R5 (PE2 in AS 200)
C3600-R5#show mpls forwarding-table                                            
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop            
tag    tag or VC   or Tunnel Id      switched   interface                            
19     16          172.16.34.3/32    0          Fa0/0      172.16.45.4      
到 172.16.34.3/32的出标签为16,这是由R4分配的
C3600-R5#show ip bgp ***v4 all labels                                          
   Network          Next Hop      In label/Out label                            
Route Distinguisher: 100:1 (***-a)                                              
   10.16.1.0/24     172.16.34.3     nolabel/20                                  
看出,该表项和R4的一样。是由于R5接收该路由信息时,没有改变吓一跳信息。
到10.16.1.0/24的出标签为20,这是由R3分配的。                    
C3600-R5#show ip cef vrf ***-a 10.16.1.0                                        
10.16.1.0/24, version 8, epoch 0, cached adjacency 172.16.45.4                  
0 packets, 0 bytes                                                              
  tag information set                                                          
    local tag: ×××-route-head                                                  
    fast tag rewrite with Fa0/0, 172.16.45.4, tags imposed: {16 20}            
  via 172.16.34.3, 0 dependencies, recursive                                    
    next hop 172.16.45.4, FastEthernet0/0 via 172.16.34.3/32                    
    valid cached adjacency                                                      
    tag rewrite with Fa0/0, 172.16.45.4, tags imposed: {16 20}    
到×××目的 10.16.1.0/24的入标签为空,×××-route-head。
到×××目的10.16.1.0/24的出标签栈为{16 20},与分别查看公网/私网标签信息得出的结论是一致的。

C3600-R5#traceroute vrf ***-a 10.16.1.1                                        
                                                                                
Type escape sequence to abort.                                                  
Tracing the route to 10.16.1.1                                                  
                                                                                
  1 172.16.45.4 [MPLS: Labels 16/20 Exp 0] 136 msec 120 msec 120 msec  -->R4收到的报文的标签信息{16 20},是R5发的      
  2 172.16.34.3 [MPLS: Label 20 Exp 0] 176 msec 124 msec 200 msec      -->R3收到的报文的标签信息{20},是R4发的
  3 172.16.23.2 [MPLS: Labels 16/20 Exp 0] 128 msec 132 msec 180 msec  -->R2收到的报文的标签信息{16 20},是R3发的
  4 10.16.1.1 [MPLS: Label 20 Exp 0] 156 msec 188 msec *               -->R1收到的报文的标签信息{20},是R2发的
注:ASBR(R3-R4)之间只有1层标签,为 ×××标签。在ASBR1上,其实执行了×××标签交换,由20交换为20。
6. 额外配置
在实现Option B时,需要在ASBR上做一些额外的配置
no bgp default route-target filter   -->维护所有的×××标签信息
需要将MP-EBGP邻居的32位用来建立BGP会话的地址重发布到本AS中的IGP中,以便分配标签