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中,以便分配标签
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中,以便分配标签