OPTION C跨域也叫多跳MP-EBGP跨域,由于BGP只要能建立TCP连接,就能成为BGP邻居并传递路由信息,因此,OPTION C通过多跳的MP-EBGP直接在源、宿端PE之间传递×××路由信息,然后在源、宿端PE之间构建LSP公网隧道。
×××信息传递
OPTION C跨域时×××信息传递比较简单,即直接在源和宿端PE间通过多跳MP-EBGP传递,如上图,PE2和PE1之间建立多跳的MP-EBGP连接,×××信息直接从PE2传递到PE1。
LSP隧道构建
从×××信息传递的方式可以看出,×××从PE1到PE2之间只有一跳,×××的下一跳为PE2,PE2为×××分配标签,并且一直不会改变。
现在重要的是确定PE1到PE2的外层LSP怎样建立,首先,PE2和ASBR2在一个AS,通过IGP协议,ASBR2会有PE2的路由信息,通过正常的LDP协议,ASBR2和PE2会构建一个LSP隧道,ASBR1和PE2不在一个AS,ASBR1没有PE2的路由信息,此时可以通过EBGP协议把 PE2的路由信息传递给ASBR1,另外,对BGP协议进行扩展(RFC3107),让BGP在传递路由时同时分配标签,这样,ASBR1和ASBR2之间的LSP形成,并在ASBR2处形成标签SWAP,同样,ASBR1和PE1之间也通过扩展的IBGP传送PE2的路由信息,同时分配标签,并在 ASBR1处形成标签SWAP,但这一段LSP的建立和ASBR之间LSP的建立不一样,ASBR之间是直连的,下一跳直接可达,PE1和ASBR1之间不是直连的,但PE1和ASBR1位于同一个AS,通过LDP可以构建一个LSP隧道,这样,在PE1到ASBR1之间的LSP隧道最终包括三层标签,最底层×××标签(PE2分配),中间一层为到PE2的标签(ASBR1通过扩展BGP分配),最外层为到ASBR1的标签(LDP分配),ASBR之间构建一个双层LSP隧道,底层为×××标签(PE2分配),外层为到PE2的标签(ASBR2通过扩展BGP分配),ASBR2到PE2之间为双层LSP隧道,内层为×××标签(PE2分配),外层为到PE2的标签(LDP分配)这三段隧道通过在ASBR处的标签SWAP粘结起来,最终形成端到端的LSP隧道。
特点
ASBR不需要处理×××信息,最符合×××的要求,即中间设备不感知×××信息
使用BGP扩展来传递公网标签
在宿端AS之外的AS出现三层标签的LSP隧道。
使用一张书上的图,有颜色的链路为测试使用的链路。
R2/R1/R3的AS为100,使用IGP为ospf
R5/R4/R7的AS为200,使用IGP为ospf
R2:10.0.6.2 R1:10.0.6.1 R3:10.0.3.3 R5:10.0.3.5 R4:10.0.3.4 R7:10.0.9.7
R2和R7为两个PE,R3和R5为两个ASBR
juniper@Boll-Lab> show route table *** logical-router r2
***-1.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.0.5.0/24 *[Direct/0] 1d 01:20:44
>via ge-0/1/7.19
10.0.5.2/32 *[Local/0] 1d 01:20:44
Local via ge-0/1/7.19
172.16.0.0/30 *[BGP/170] 06:33:00, localpref 100, from 10.0.9.7
AS path: 200 I
> to 10.0.4.5 via ge-0/1/7.12, Push 16, Push 101072, Push 100288(top) //压入2层×××标签,一层LDP标签
juniper@Boll-Lab>show route table mpls.0 logical-router r1 label 100288
mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
100288 *[LDP/9] 23:47:10, metric 1
> to 10.0.4.14 via ge-0/1/5.13, Pop
100288(S=0) *[LDP/9] 23:47:10, metric 1
>to 10.0.4.14 via ge-0/1/5.13, Pop
juniper@Boll-Lab> show route table mpls.0 logical-router r3 label 101072 //弹出LDP标签,进入BGP的LSP,在ASBR上进行中间BGP标签的SWAP
mpls.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
101072 *[×××/170] 22:48:54
> to 10.0.2.2 via ge-0/1/6.35, Swap 101136
juniper@Boll-Lab> show route table mpls.0 logical-router r5 label 101136 //弹出中间层的BGP标签
mpls.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
101136 *[×××/170] 22:49:26
> to 10.0.2.9 via ge-0/1/7.45, Pop
101136(S=0) *[×××/170] 22:49:26
> to 10.0.2.9 via ge-0/1/7.45, Pop
juniper@Boll-Lab> show route table inet.3 10.0.9.7 logical-router r5 //进入LDP的LSP,压入到10.0.9.7的LDP标签
inet.3: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10.0.9.7/32 *[LDP/9] 1d 00:46:23, metric 1
> to 10.0.2.9 via ge-0/1/7.45, Push 100624
juniper@Boll-Lab> show route table mpls.0 label 100624 logical-router r4
mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
100624 *[LDP/9] 23:24:37, metric 1
> to 10.0.2.18 via ge-0/1/5.47, Pop
100624(S=0) *[LDP/9] 23:24:37, metric 1
> to 10.0.2.18 via ge-0/1/5.47, Pop
juniper@Boll-Lab> show route table mpls.0 logical-router r7 //弹出LDP标签,弹出最里层的BGP标签,进入×××转发
mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0 *[MPLS/0] 1d 01:24:11, metric 1
Receive
1 *[MPLS/0] 1d 01:24:11, metric 1
Receive
2 *[MPLS/0] 1d 01:24:11, metric 1
Receive
16 *[×××/0] 1d 01:24:11
to table ***-4.inet.0, Pop
100304 *[LDP/9] 23:24:58, metric 1
> to 10.0.2.17 via ge-0/1/6.47, Pop
100304(S=0) *[LDP/9] 23:24:58, metric 1
> to 10.0.2.17 via ge-0/1/6.47, Pop
100320 *[LDP/9] 23:24:58, metric 1
> to 10.0.2.17 via ge-0/1/6.47, Swap 100640