address-family ipv4 no synchronization redistribute connected neighbor 4.4.4.4 activate neighbor 4.4.4.4 next-hop-self neighbor 4.4.4.4 send-label no auto-summary exit-address-family address-family vpnv4 neighbor 2.2.2.2 activate
neighbor 2.2.2.2 send-community both neighbor 2.2.2.2 next-hop-unchanged exit-address-family
address-family ipv4 vrf vpna no synchronization redistribute connected
neighbor 56.1.1.6 remote-as 400 neighbor 56.1.1.6 activate exit-address-family
3、结果验证
R1#traceroute 6.6.6.6
Type escape sequence to abort. Tracing the route to 6.6.6.6
1 12.1.1.2 128 msec 88 msec 104 msec
2 27.1.1.7 [MPLS: Labels 201/306/503 Exp 0] 180 msec 228 msec 264 msec 3 37.1.1.3 [MPLS: Labels 306/503 Exp 0] 228 msec 244 msec 228 msec 4 34.1.1.4 [MPLS: Labels 402/503 Exp 0] 260 msec 228 msec 260 msec 5 56.1.1.5 [AS 300] [MPLS: Label 503 Exp 0] 232 msec 220 msec 188 msec 6 56.1.1.6 [AS 300] 288 msec * 224 msec
(1)、在P路由器f0/0接口抓包如下:
明显看到P路由器处有MPLS三层标签。 (2)、在ASBR1内接口f0/1抓包如下:
(3)、在ASBR2外接口f0/0抓包如下:
(4)、在PE2内接口f0/1抓包如下:
标签分配和数据转发完全和理论相吻合。 4、补充标签TTL复制功能测试。
问题:为何上面的抓包中最底层标签突然从254变成251呢?
根据RFC3031中的描述,LSR节点在对分组打标签时,需要将原IP分组或上层标签中的TTL值拷贝到新增加标签的TTL域。LSR在转发标签分组时,对栈顶标签的TTL域作减一操作。标签出栈时,再将栈顶的TTL值拷贝回IP分组或下层标签。开启了标签TTL复制功能的MPLS TTL行为在以上的抓包图片可以清楚看出来。
以下再附上一个关闭标签TTL复制功能的MPLS包头。 R2(config)#no mpls ip propagate-ttl ?
forwarded Propagate IP TTL for forwarded traffic //外部的 local Propagate IP TTL for locally originated traffic //内部的
华为对应的指令是:
ttl propagate { public | vpn }
undo ttl propagate { public | vpn }
R2(config)#no mpls ip propagate-ttl forwarded //只对外部路由关闭TTL复制
结果:(没有显示骨干网络)
R1#traceroute 6.6.6.6 Type escape sequence to abort. Tracing the route to 6.6.6.6
1 12.1.1.2 120 msec 72 msec 72 msec
2 56.1.1.5 [AS 300] [MPLS: Label 503 Exp 0] 184 msec 240 msec 184 msec
3 56.1.1.6 [AS 300] 264 msec * 284 msec
抓包结果对比:
(1)、在P路由器f0/0接口抓包如下:
(2)、在ASBR1内接口f0/1抓包如下:
(3)、在ASBR2外接口f0/0抓包如下:
(4)、在PE2内接口f0/1抓包如下:
注:在ASBR之间做第二层标签交换的时候并没有涉及TTL复制,所以只是顶层标签减1,所有涉及添加和弹出标签的地方,TTL均取255,完全符合理论。