ESNP LAB 笔记:配置MPLS(Part4)
7、MPLS对TTL的处理
MPLS对TTL的处理包括 TTL处理模式 和 ICMP响应报文 两个方面。
7.1 TTL处理模式
MPLS标签头中包含一个 8bit 的 TTL 字段,作用与 IP 报文头的 TTL 相同,用于防止环路和实现 Traceroute 功能。
MPLS 支持两种 TTL 模式:Uniform 和 Pipe(默认 Uniform)。
7.1.1 Uniform 模式
-
入节点(Ingress):IP TTL -1 → 映射到 MPLS TTL。
-
MPLS 域内:每跳 MPLS TTL -1。
-
出节点(Egress):MPLS TTL -1 → 写回 IP TTL。
-
特点:IP TTL 在 MPLS 域内逐跳下降,网络拓扑对外部可见,Traceroute 能显示 MPLS 内部节点。
7.1.2 Pipe 模式
-
入节点(Ingress):IP TTL -1,MPLS TTL 设置为固定值(独立于 IP TTL)。
-
MPLS 域内:MPLS TTL 每跳减 1,但 IP TTL 不再变化。
-
出节点(Egress):IP TTL -1。
-
特点:IP TTL 只在 Ingress/Egress 减 1,域内跳数对 IP TTL 无影响,可隐藏 MPLS 骨干结构。
-
应用:MPLS VPN,为了安全需要隐藏骨干网络时,Ingress 使用 Pipe 模式
7.2 ICMP响应报文
当 LSR 收到 TTL=1 的 MPLS 报文时,会生成 ICMP TTL 超时报文,返回给报文发送者。
7.2.1 响应方式
-
方式一:直接返回
如果 LSR 有到达报文源的 IP 路由,则直接通过 IP 路由返回 ICMP 消息。
→ 常见于 单标签 报文。 -
方式二:沿 LSP 返回
如果 LSR 没有源地址的 IP 路由,则 TTL 超时报文会带标签继续沿 LSP 传输,到达出节点(Egress),由 Egress 再返回给报文源。
→ 常见于 多层标签 报文。
7.2.2 Traceroute 行为总结
-
Uniform 模式 + 单标签:每跳 LSR 直接返回 ICMP,拓扑可见。
-
Pipe 模式:IP TTL 在域内不变,ICMP 超时报文通常由 Egress 返回,拓扑被隐藏。
7.3 配置命令
7.3.1 配置 MPLS 对 TTL 的处理模式
命令
-
undo ttl propagate
→ Pipe 模式 -
ttl propagate
→ Uniform 模式(缺省)
区别
模式 | TTL 处理方式 | 特点 | 应用场景 |
---|---|---|---|
Uniform | IP TTL 拷贝到 MPLS TTL,MPLS 核心每跳消耗 TTL,出栈后再写回 IP TTL | 完整反映 MPLS 核心的跳数,支持 traceroute | 调试、排错 |
Pipe | 入栈时 MPLS TTL 赋固定值(通常 255),IP TTL 只在入口和出口减 1 | MPLS 核心不影响 IP TTL,隐藏骨干 | MPLS VPN,保护运营商拓扑 |
7.3.2 配置 ICMP 响应报文使用的路径
当 MPLS 报文 TTL 超时时(Traceroute 或环路),LSR 需要返回 ICMP TTL exceeded 消息给源端。
命令
-
undo ttl expiration pop
→ LSP 返回 ICMP -
ttl expiration pop
→ IP 路由返回 ICMP(缺省)
区别
配置 | 行为 | 适用场景 |
---|---|---|
缺省(ttl expiration pop) | 如果报文只有一层标签 → LSR 直接用 IP路由 返回 ICMP 报文 | MPLS 较简单场景 |
undo ttl expiration pop | 强制 沿 LSP 返回 ICMP,即使 LSR 本地有路由 | 多层标签、VPN 场景,保证回程与业务路径一致 |
7.3.3 两者的配合
-
Uniform + IP路由返回 → 最透明,方便排错,客户能看到每个 MPLS 节点。
-
Pipe + LSP返回 → 最隐藏,客户只能看到 PE,核心 P 不暴露,且 ICMP 回程严格走 LSP。
7.4 TTL测试笔记
7.4.1 测试拓扑
对之前的测试拓扑进行了如下修改:
1、增加R4、R5。R4-PE1之间、PE2-R5之间运行OSPF,不配置LDP。
2、4.4.4.4/32不是PE1的直连路由,为了触发PE1对4.4.4.4/32建立LSP,修改PE1的LSP触发建立模式为:lsp-trigger all。
3、5.5.5.5/32不是PE2的直连路由,为了触发PE2对5.5.5.5/32建立LSP,修改PE2的LSP触发建立模式为:lsp-trigger all。
4、PE1、P1、PE2的LSP建立信息:
[PE1]dis mpls lsp
-------------------------------------------------------------------------------LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
2.2.2.2/32 NULL/3 -/GE0/0/0
2.2.2.2/32 1024/3 -/GE0/0/0
3.3.3.3/32 NULL/1025 -/GE0/0/0
3.3.3.3/32 1025/1025 -/GE0/0/0
5.5.5.5/32 NULL/1024 -/GE0/0/0
5.5.5.5/32 1026/1024 -/GE0/0/0
192.168.35.0/24 NULL/1026 -/GE0/0/0
192.168.35.0/24 1027/1026 -/GE0/0/0
4.4.4.4/32 1028/NULL -/-
1.1.1.1/32 3/NULL -/-
192.168.14.0/24 3/NULL -/-
192.168.12.0/24 3/NULL -/-
[PE1][P1]dis mpls lsp
-------------------------------------------------------------------------------LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
2.2.2.2/32 3/NULL -/-
5.5.5.5/32 NULL/1025 -/GE0/0/1
5.5.5.5/32 1024/1025 -/GE0/0/1
3.3.3.3/32 NULL/3 -/GE0/0/1
3.3.3.3/32 1025/3 -/GE0/0/1
192.168.35.0/24 1026/3 -/GE0/0/1
4.4.4.4/32 NULL/1028 -/GE0/0/0
4.4.4.4/32 1027/1028 -/GE0/0/0
1.1.1.1/32 NULL/3 -/GE0/0/0
1.1.1.1/32 1028/3 -/GE0/0/0
192.168.14.0/24 1029/3 -/GE0/0/0
[P1][PE2]dis mpls lsp
-------------------------------------------------------------------------------LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
2.2.2.2/32 NULL/3 -/GE0/0/0
2.2.2.2/32 1024/3 -/GE0/0/0
5.5.5.5/32 1025/NULL -/-
3.3.3.3/32 3/NULL -/-
192.168.35.0/24 3/NULL -/-
192.168.23.0/24 3/NULL -/-
4.4.4.4/32 NULL/1027 -/GE0/0/0
4.4.4.4/32 1026/1027 -/GE0/0/0
1.1.1.1/32 NULL/1028 -/GE0/0/0
1.1.1.1/32 1027/1028 -/GE0/0/0
192.168.14.0/24 NULL/1029 -/GE0/0/0
192.168.14.0/24 1028/1029 -/GE0/0/0
[PE2]
PE1在给4.4.4.4/32分配标签1028,没有分配标签3。
PE2在给5.5.5.5/32分配标签1025,没有分配标签3。
在MPLS中,FEC 4.4.4.4/32和FEC 5.5.5.5/32 LSP都已经正常建立。
5、PE1/PE2的FIB表信息:
[PE1]dis fib
Route Flags: G - Gateway Route, H - Host Route, U - Up RouteS - Static Route, D - Dynamic Route, B - Black Hole RouteL - Vlink Route
--------------------------------------------------------------------------------FIB Table:Total number of Routes : 17 Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
5.5.5.5/32 192.168.12.2 DGHU t[69] GE0/0/0 0x5
3.3.3.3/32 192.168.12.2 DGHU t[69] GE0/0/0 0x3
2.2.2.2/32 192.168.12.2 DGHU t[69] GE0/0/0 0x1
4.4.4.4/32 192.168.14.4 DGHU t[48] Vlanif30 0x0
192.168.12.255/32 127.0.0.1 HU t[17] InLoop0 0x0
192.168.12.1/32 127.0.0.1 HU t[17] InLoop0 0x0
192.168.14.255/32 127.0.0.1 HU t[9] InLoop0 0x0
192.168.14.1/32 127.0.0.1 HU t[9] InLoop0 0x0
1.1.1.1/32 127.0.0.1 HU t[5] InLoop0 0x0
255.255.255.255/32 127.0.0.1 HU t[4] InLoop0 0x0
127.255.255.255/32 127.0.0.1 HU t[4] InLoop0 0x0
127.0.0.1/32 127.0.0.1 HU t[4] InLoop0 0x0
127.0.0.0/8 127.0.0.1 U t[4] InLoop0 0x0
192.168.14.0/24 192.168.14.1 U t[9] Vlanif30 0x0
192.168.12.0/24 192.168.12.1 U t[17] GE0/0/0 0x0
192.168.23.0/24 192.168.12.2 DGU t[64] GE0/0/0 0x0
192.168.35.0/24 192.168.12.2 DGU t[69] GE0/0/0 0x7
[PE1][PE2]dis fib
Route Flags: G - Gateway Route, H - Host Route, U - Up RouteS - Static Route, D - Dynamic Route, B - Black Hole RouteL - Vlink Route
--------------------------------------------------------------------------------FIB Table:Total number of Routes : 17 Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
1.1.1.1/32 192.168.23.2 DGHU t[66] GE0/0/0 0x5
4.4.4.4/32 192.168.23.2 DGHU t[66] GE0/0/0 0x3
2.2.2.2/32 192.168.23.2 DGHU t[59] GE0/0/0 0x1
5.5.5.5/32 192.168.35.5 DGHU t[48] Vlanif40 0x0
192.168.23.255/32 127.0.0.1 HU t[14] InLoop0 0x0
192.168.23.3/32 127.0.0.1 HU t[14] InLoop0 0x0
192.168.35.255/32 127.0.0.1 HU t[10] InLoop0 0x0
192.168.35.3/32 127.0.0.1 HU t[10] InLoop0 0x0
3.3.3.3/32 127.0.0.1 HU t[5] InLoop0 0x0
255.255.255.255/32 127.0.0.1 HU t[4] InLoop0 0x0
127.255.255.255/32 127.0.0.1 HU t[4] InLoop0 0x0
127.0.0.1/32 127.0.0.1 HU t[4] InLoop0 0x0
127.0.0.0/8 127.0.0.1 U t[4] InLoop0 0x0
192.168.35.0/24 192.168.35.3 U t[10] Vlanif40 0x0
192.168.23.0/24 192.168.23.3 U t[14] GE0/0/0 0x0
192.168.12.0/24 192.168.23.2 DGU t[61] GE0/0/0 0x0
192.168.14.0/24 192.168.23.2 DGU t[66] GE0/0/0 0x7
[PE2]
PE1中:FEC 5.5.5.5/32已绑定 TunnelID 0x5,说明 PE1 将通过 MPLS LSP 转发目的为 5.5.5.5 的数据包,而不是普通 IP 转发。
PE2中:FEC 4.4.4.4/32已绑定 TunnelID 0x3,说明 PE2 将通过 MPLS LSP 转发目的为 4.4.4.4 的数据包,而不是普通 IP 转发。
7.4.2 Uniform模式下,观察TTL变化

1、PE1、P1、PE2配置为Uniform模式(缺省)。
2、R4 ping R5。
[R4]ping -a 4.4.4.4 -c 4 5.5.5.5
[R4]ping -a 4.4.4.4 -c 4 5.5.5.5PING 5.5.5.5: 56 data bytes, press CTRL_C to breakReply from 5.5.5.5: bytes=56 Sequence=1 ttl=252 time=60 msReply from 5.5.5.5: bytes=56 Sequence=2 ttl=252 time=60 msReply from 5.5.5.5: bytes=56 Sequence=3 ttl=252 time=50 msReply from 5.5.5.5: bytes=56 Sequence=4 ttl=252 time=50 ms--- 5.5.5.5 ping statistics ---4 packet(s) transmitted4 packet(s) received0.00% packet lossround-trip min/avg/max = 50/55/60 ms[R4]
2、通过Wireshark抓包检查TTL数值,结果符合预期。
R4抓包
PE1抓包:
Ingress(入站 LER)
收到 IP 报文时,先 IP TTL–1 = 255 - 1 = 254
然后将这个值 拷贝到 MPLS 标签的 TTL 字段(即 MPLS TTL = IP TTL–1)。
P1抓包:
MPLS 域内(Transit LSR)
每经过一个 MPLS 节点,MPLS TTL–1。
如果 TTL 归零,就触发 ICMP TTL Exceeded 报文,与 IP 网络类似。
PE2抓包:
Egress(出站 LER)
当 MPLS 标签被弹出时,Egress 将 MPLS TTL–1 的结果写回 IP 报文的 TTL 字段。
这样 IP 报文离开 MPLS 域时,IP TTL 已经包含了 MPLS 域内的跳数消耗。
7.4.3 Pipe模式下,观察TTL变化

1、PE1、P1、PE2修改为pipe模式。
配置ttl propagate命令只影响此后新建立的LSP,如果需要对之前建立的LSP也生效,应执行reset mpls ldp命令重建LSP,重建后,FEC对应的标签会重新产生和发布。
[PE1]undo ttl propagate
<PE1>reset mpls ldp all
<PE1>
[P1]undo ttl propagate
<P1>reset mpls ldp all
<P1>
[PE2]undo ttl propagate
<PE2>reset mpls ldp all
<PE2>
2、R4 ping R5。
[R4]ping -a 4.4.4.4 -c 2 5.5.5.5
[R4]ping -a 4.4.4.4 -c 2 5.5.5.5PING 5.5.5.5: 56 data bytes, press CTRL_C to breakReply from 5.5.5.5: bytes=56 Sequence=1 ttl=253 time=60 msReply from 5.5.5.5: bytes=56 Sequence=2 ttl=253 time=80 ms--- 5.5.5.5 ping statistics ---2 packet(s) transmitted2 packet(s) received0.00% packet lossround-trip min/avg/max = 60/70/80 ms[R4]
3、通过Wireshark抓包检查TTL数值,结果符合预期。
R4抓包:
PE1抓包:
Ingress(入站 LER)
收到 IP 报文时,先把 IP TTL 减 1。
然后分配一个新的 MPLS 标签,标签的 TTL 字段直接设置为一个固定初始值(通常是 255),而不是继承 IP 报文的 TTL。
P1抓包:
MPLS 域内(Transit LSR)
仅对 MPLS 标签的 TTL 做标准处理,每经过一跳 MPLS TTL 减 1。
不影响原始 IP 报文的 TTL。
PE2抓包:
Egress(出站 LER)
把 MPLS 标签弹出(POP),然后再让 IP TTL 减 1。
这样 IP 报文的 TTL 在整个 MPLS 域内只减少 2(Ingress 减 1,Egress 再减 1),与域内有多少跳无关。
7.4.4 ICMP响应报文测试
把MPLS修改回uniform模式,并reset mpls ldp all,此时FEC对应的标签重新产生和发布。
R4发IP TTL=3的ICMP报文,
在R4-Eth0/0/0、PE1-G0/0/0、P1-G0/0/1、PE2-Eth0/0/1通过wireshark抓包,观察PE2收到MPLS TTL=1的情况。
1、R4 ping R5
[R4]ping -a 4.4.4.4 -c 2 -h 3 5.5.5.5
2、R4发出的ICMP包:
2、PE1发出的MPLS ICMP包:
3、P1发出的MPLS ICMP包:
4、当 PE2收到 TTL=1 的 MPLS 报文时,它就会丢弃该报文,并向源端返回一条 ICMP Time Exceeded 报文。这跟普通 IP 网络中 TTL=1 → 0 的处理逻辑完全一致,只不过触发点是 MPLS 的 TTL 字段。
此时,PE2有报文源4.4.4.4的路由,根据FIB表进行转发。4.4.4.4在FIB表中已经绑定了LSP,所以走MPLS LSP进行转发。
PE2将根据LSP转发去往4.4.4.4的TTL超时报文:
5、P1收到PE2发出的TTL超时报文:
Frame 2259: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface -, id 0
Ethernet II, Src: 00:e0:fc:00:5d:fd, Dst: 00:e0:fc:21:6d:79
MultiProtocol Label Switching Header, Label: 1048, Exp: 6, S: 1, TTL: 2550000 0000 0100 0001 1000 .... .... .... = MPLS Label: 1048 (0x00418).... .... .... .... .... 110. .... .... = MPLS Experimental Bits: 6.... .... .... .... .... ...1 .... .... = MPLS Bottom Of Label Stack: 1.... .... .... .... .... .... 1111 1111 = MPLS TTL: 255
Internet Protocol Version 4, Src: 192.168.23.3, Dst: 4.4.4.40100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT)Total Length: 56Identification: 0x0621 (1569)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 255Protocol: ICMP (1)Header Checksum: 0xd530 [validation disabled][Header checksum status: Unverified]Source Address: 192.168.23.3Destination Address: 4.4.4.4[Stream index: 7]
Internet Control Message ProtocolType: 11 (Time-to-live exceeded)Code: 0 (Time to live exceeded in transit)Checksum: 0xf685 [correct][Checksum Status: Good]Unused: 00000000Internet Protocol Version 4, Src: 4.4.4.4, Dst: 5.5.5.50100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)Total Length: 84Identification: 0x0136 (310)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 1[Expert Info (Note/Sequence): "Time To Live" only 1]["Time To Live" only 1][Severity level: Note][Group: Sequence]Protocol: ICMP (1)Header Checksum: 0xa662 [validation disabled][Header checksum status: Unverified]Source Address: 4.4.4.4Destination Address: 5.5.5.5[Stream index: 6]Internet Control Message ProtocolType: 8 (Echo (ping) request)Code: 0Checksum: 0x25ce [unverified] [in ICMP error packet][Checksum Status: Unverified]Identifier (BE): 53163 (0xcfab)Identifier (LE): 43983 (0xabcf)Sequence Number (BE): 256 (0x0100)Sequence Number (LE): 1 (0x0001)
内嵌的“原始 IP 报文”
Inner IP: Src 4.4.4.4, Dst 5.5.5.5, TTL: 1
这表明原始发出的 ICMP Echo Request(R4 → R5)在到达触发点时,其 IP TTL 值为 1。因此当该节点对其进行减 1 操作后,TTL 变为 0,触发了 ICMP Time Exceeded。
6、PE1收到P1发出的TTL超时报文:
Frame 2242: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface -, id 0
Ethernet II, Src: 00:e0:fc:21:6d:78, Dst: 00:e0:fc:7e:3e:d8
MultiProtocol Label Switching Header, Label: 1051, Exp: 6, S: 1, TTL: 2540000 0000 0100 0001 1011 .... .... .... = MPLS Label: 1051 (0x0041b).... .... .... .... .... 110. .... .... = MPLS Experimental Bits: 6.... .... .... .... .... ...1 .... .... = MPLS Bottom Of Label Stack: 1.... .... .... .... .... .... 1111 1110 = MPLS TTL: 254
Internet Protocol Version 4, Src: 192.168.23.3, Dst: 4.4.4.40100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT)Total Length: 56Identification: 0x0621 (1569)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 255Protocol: ICMP (1)Header Checksum: 0xd530 [validation disabled][Header checksum status: Unverified]Source Address: 192.168.23.3Destination Address: 4.4.4.4[Stream index: 7]
Internet Control Message ProtocolType: 11 (Time-to-live exceeded)Code: 0 (Time to live exceeded in transit)Checksum: 0xf685 [correct][Checksum Status: Good]Unused: 00000000Internet Protocol Version 4, Src: 4.4.4.4, Dst: 5.5.5.50100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)Total Length: 84Identification: 0x0136 (310)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 1Protocol: ICMP (1)Header Checksum: 0xa662 [validation disabled][Header checksum status: Unverified]Source Address: 4.4.4.4Destination Address: 5.5.5.5[Stream index: 6]Internet Control Message ProtocolType: 8 (Echo (ping) request)Code: 0Checksum: 0x25ce [unverified] [in ICMP error packet][Checksum Status: Unverified]Identifier (BE): 53163 (0xcfab)Identifier (LE): 43983 (0xabcf)Sequence Number (BE): 256 (0x0100)Sequence Number (LE): 1 (0x0001)
7、R4收到TTL超时报文:
Frame 1765: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface -, id 0
Ethernet II, Src: 00:e0:fc:7e:3e:d8, Dst: 54:89:98:f6:50:d6
Internet Protocol Version 4, Src: 192.168.23.3, Dst: 4.4.4.40100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT)Total Length: 56Identification: 0x0621 (1569)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 253Protocol: ICMP (1)Header Checksum: 0xd730 [validation disabled][Header checksum status: Unverified]Source Address: 192.168.23.3Destination Address: 4.4.4.4[Stream index: 3]
Internet Control Message ProtocolType: 11 (Time-to-live exceeded)Code: 0 (Time to live exceeded in transit)Checksum: 0xf685 [correct][Checksum Status: Good]Unused: 00000000Internet Protocol Version 4, Src: 4.4.4.4, Dst: 5.5.5.50100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)Total Length: 84Identification: 0x0136 (310)000. .... = Flags: 0x0...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 1Protocol: ICMP (1)Header Checksum: 0xa662 [validation disabled][Header checksum status: Unverified]Source Address: 4.4.4.4Destination Address: 5.5.5.5[Stream index: 2]Internet Control Message ProtocolType: 8 (Echo (ping) request)Code: 0Checksum: 0x25ce [unverified] [in ICMP error packet][Checksum Status: Unverified]Identifier (BE): 53163 (0xcfab)Identifier (LE): 43983 (0xabcf)Sequence Number (BE): 256 (0x0100)Sequence Number (LE): 1 (0x0001)