多协议标签交换 (MPLS) : MPLS

在MPLS中的Traceroute命令

2016 年 10 月 25 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 8 月 22 日) | 反馈


目录


简介

本文档说明 traceroute 命令在多协议标签交换 (MPLS) 环境中的工作方式。

先决条件

要求

Cisco 建议您了解以下主题:

  • 基本 MPLS 知识

有关详细信息,请参阅 MPLS 初学者常见问题

使用的组件

本文档不限于特定的软件和硬件版本。

规则

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

正常 traceroute 命令

本部分介绍传统 traceroute 命令的工作原理。此图显示了一个服务提供商设置,其中,路由器 1 (R1) 和路由器 4 (R4) 是提供商边缘 (PE) 路由器,而路由器 2 (R2) 和路由器 3 (R3) 是提供商 (P) 路由器。

/image/gif/paws/26585/mpls_traceroute1.gif

此示例执行从 R1 到 R4 环回 14 的 traceroute。R1 使用具有大于 32000 的任意目标端口值的 User Datagram Protocol (UDP) 数据报。如果您为端口号选择这样一个高值,请确保预定接收方上不存在这样一个端口。它会将数据报置于 IP 数据包中。

注意: 在本文档中,只要提到 IP 数据包,它便是包含 UDP 数据报的 IP 数据包。

这是正常 traceroute 命令的事件序列:

  1. R1 通过其 eth1 接口发送目标地址为 14 且存活时间 (TTL) 为 1 的 IP 数据包。

  2. R2 接收该数据包,并注意到它不是预定接收方,而且该数据包的 TTL 为 1。R2 丢弃该数据包,并向 R1 发送 TTL 过期 Internet Control Message Protocol (ICMP) 消息。此 ICMP 消息的源地址是 R2 eth0 的 IP 地址(接收原始数据包的接口的地址)。

  3. 接收 ICMP 消息时,R1 会通过其 eth1 接口发送另一个目标为 14 且 TTL 为 2 的 IP 数据包。

  4. R2 接收该数据包,并注意到它不是预定接收方,而且可以通过 R3 到达预定接收方。R2 将 TTL 递减(从 2 到 1),并将数据包转发到 R3。R3 接收该数据包并注意到它不是预定接收方。TTL 为 1。R3 丢弃该数据包,并使用其 eth0 地址作为源地址,将 TTL 过期 ICMP 消息发送给 R1。

  5. R1 接收该 ICMP 消息,并通过其 eth1 接口将另一个 TTL 值为 3 的 IP 数据包发送给 14。在途中,R2 和 R3 将 TTL 递减,并将其传递给 R4。R4 获取该数据包,发现它是预定接收方,然后尝试连接到 UDP 数据报中的端口值。R4 发现此端口不存在,并向 R1 发送 ICMP port unreachable 错误消息。

    与前面一样,此 ICMP 消息的源地址为 R4 的 eth0。traceroute 程序现在具有带有对应源地址的所有 ICMP 错误消息,并具有指向目标的完整路由。

MPLS traceroute 命令

请考虑正常 traceroute 命令部分中详细介绍的这一相同方案,只不过所有路由器(R1 到 R4)现在进行标签交换而不是进行 IP 转发。下图中显示了试验床设置。试验床中显示的所有接口都处于 10.13.0.0 网络中。

mpls_traceroute2.gif

对于本文档而言,假设:

  • R1 使用标签 47 到达 R4 并将数据包转发到 R2。

  • R2 使用标签 45 到达 R4 并将数据包转发到 R3。

  • R3 弹出标签并将数据包转发到 R4。

  • R4 使用标签 28 到达 R1 并将数据包转发到 R3。

  • R3 使用标签 26 到达 R1 并将数据包转发到 R2。

  • R2 弹出标签并将数据包转发到 R1。

以下步骤说明了执行从 R1 到 R4 环回 10.13.1.51 的 traceroute 时的事件序列。

  1. R1 将标签为 47 且 TTL 为 1 的标签交换数据包发送给 R2。该 IP 数据包的 TTL 字段会复制到标签报头的 TTL 字段上。

  2. R2 发现它不是预定接收方,并且 TTL 为 1。R2 丢弃该数据包,并像对常规 IP 数据包那样来创建 TTL 过期 ICMP 消息。在这种情况下,将针对 MPLS 的每个 ICMP 扩展生成 ICMP 消息数据包。

  3. R2 将标签 47(过期的传入标签)附加到 ICMP 消息。它不直接将数据包发送到 R1。而是查询其标签转发信息库 (LFIB),并发现它应将标签 45 用于使用标签 47 接收的数据包。它将标签 45 置于该数据包上,并将 TTL 过期 ICMP 消息发送到 R3。

  4. R3 弹出标签并将其发送到 R4。R4 看到目标为 R1,向该消息提供标签 28,然后通过 R3 和 R2 将该消息发送到 R1。

  5. ICMP 错误消息会一直传输到另一端,然后向回发送到 R1。本示例提供了一个图示说明:

    /image/gif/paws/26585/mpls_traceroute3.gif

    在 R4 的以太网接口上嗅探到的数据包确认步骤 1 – 5。在嗅探器输出中,Frame 1 是入站数据包,而 Frame 2 是来自 R4 的出站数据包。将对输出进行格式设置以反映本讨论的内容,要注意的要点用粗体表示。

    Frame 1 (182 on wire, 182 captured)
    Ethernet II 
    Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
    Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84)
    Type: IP (0x0800)
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 254 
    Protocol: ICMP (0x01) 
    Header checksum: 0x1b8e (correct)
    Source: 10.13.2.33 (10.13.2.33)
    Destination: 10.13.2.34 (10.13.2.34) 
    Internet Control Message Protocol
    Type: 11 (Time-to-live exceeded) 
    Code: 0 (TTL equals 0 during transit)
    Checksum: 0x0c88 (correct) 
    Data (140 bytes) 
    04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..."
    100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7....  
    200000 0000 0000 0000 0000 0000 0000 0000................  
    300000 0000 0000 0000 0000 0000 0000 0000................ 
    400000 0000 0000 0000 0000 0000 0000 0000................ 
    500000 0000 0000 0000 0000 0000 0000 0000................
    600000 0000 0000 0000 0000 0000 0000 0000................ 
    700000 0000 0000 0000 0000 0000 0000 0000................ 
    802000 edf2 0008 0101 0002 f101........... 
    
    Frame 2 (186 on wire, 186 captured) 
    Ethernet II 
    Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84)
    Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
    Type: MPLS label switched packet (0x8847)
    MultiProtocol Label Switching Header 
    MPLS Label: Unknown (28) 
    MPLS Experimental Bits: 6 
    MPLS Bottom Of Label Stack: 1 
    MPLS TTL: 253 
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 253 
    Protocol: ICMP (0x01)
    Header checksum: 0x1c8e (correct)
    Source: 10.13.2.33 (10.13.2.33) 
    Destination: 10.13.2.34 (10.13.2.34) 
    Internet Control Message Protocol 
    Type: 11 (Time-to-live exceeded) 
    Code: 0 (TTL equals 0 during transit)
    Checksum: 0x0c88 (correct) 
    Data (140 bytes) 
    04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..." 
    100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7.... 
    200000 0000 0000 0000 0000 0000 0000 0000................ 
    300000 0000 0000 0000 0000 0000 0000 0000................ 
    400000 0000 0000 0000 0000 0000 0000 0000................ 
    500000 0000 0000 0000 0000 0000 0000 0000................ 
    600000 0000 0000 0000 0000 0000 0000 0000................ 
    700000 0000 0000 0000 0000 0000 0000 0000................ 
    802000 edf2 0008 0101 0002 f101........... 
    

    在该输出的 Frame 1 中,由 R4 接收的第一个数据包是从 R2(10.13.2.33,接收原始数据包的接口)到 R1 (10.13.2.34) 的 TTL 过期 ICMP 消息。在 ICMP 消息的数据部分(字节 0x89 以及 0x8A 的第一个半字节处),MPLS 标签(20 个字节)过期,其值为 0x02F(或 47)。这是 TTL 为 1 的数据包的传入标签。R2 在 ICMP 错误消息中附加此标签。

    在该输出的 Frame 2 中,type 显示为 MPLS label switched packet,这表示它是 MPLS 数据包。R4 将标签 28 置于 Frame 1 上,并通过标签交换路径将其转发到 R1。该帧中的 MPLS 报头用粗体表示。此外,如果您参考该数据包的 TTL 部分,则在 Frame 1 中其值为 254,在 Frame 2 中其值为 253。R4 已将其递减 1。

  6. R1 接收 ICMP 消息,并将另一个标签为 47 且 TTL 为 2 的数据包发送到 R2。R2 交换标签,递减 TTL(从 2 到 1)并转发到 R3。与步骤 2 一样,R3 将附加有过期的传入标签的 TTL 过期 ICMP 消息发送到 R4,R4 然后将其发送回 R1。

    此处显示的 R4 处的嗅探器输出确认步骤 6:

    Frame 3 (182 on wire, 182 captured)
    Ethernet II 
    Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
    Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
    Type: IP (0x0800) 
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 255 
    Protocol: ICMP (0x01) 
    Header checksum: 0x146f (correct) 
    Source: 10.13.3.134 (10.13.3.134) 
    Destination: 10.13.2.34 (10.13.2.34) 
    Internet Control Message Protocol 
    Type: 11 (Time-to-live exceeded) 
    Code: 0 (TTL equals 0 during transit)
    Checksum: 0x0c88 (correct) 
    Data (140 bytes) 
    04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..."  
    100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A.... 
    200000 0000 0000 0000 0000 0000 0000 0000................ 
    300000 0000 0000 0000 0000 0000 0000 0000................ 
    400000 0000 0000 0000 0000 0000 0000 0000................ 
    500000 0000 0000 0000 0000 0000 0000 0000................ 
    600000 0000 0000 0000 0000 0000 0000 0000................ 
    700000 0000 0000 0000 0000 0000 0000 0000................
    802000 0df3 0008 0101 0002 d101........... 
    
    Frame 4 (186 on wire, 186 captured) 
    Ethernet II 
    Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
    Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
    Type: MPLS label switched packet (0x8847) 
    MultiProtocol Label Switching Header 
    MPLS Label: Unknown (28) 
    MPLS Experimental Bits: 6 
    MPLS Bottom Of Label Stack: 1 
    MPLS TTL: 254 
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 254 
    Protocol: ICMP (0x01) 
    Header checksum: 0x156f (correct) 
    Source: 10.13.3.134 (10.13.3.134) 
    Destination: 10.13.2.34 (10.13.2.34) 
    Internet Control Message Protocol 
    Type: 11 (Time-to-live exceeded) 
    Code: 0 (TTL equals 0 during transit) 
    Checksum: 0x0c88 (correct) 
    Data (140 bytes) 
    04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..."
    100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A....  
    200000 0000 0000 0000 0000 0000 0000 0000................ 
    300000 0000 0000 0000 0000 0000 0000 0000................ 
    400000 0000 0000 0000 0000 0000 0000 0000................  
    500000 0000 0000 0000 0000 0000 0000 0000................ 
    600000 0000 0000 0000 0000 0000 0000 0000................ 
    700000 0000 0000 0000 0000 0000 0000 0000................ 
    802000 0df3 0008 0101 0002 d101........... 
    

    Frame 3 输出,您可以确定 Frame 3 是从 R3 到 R1 的 ICMP 数据包。源地址 (10.13.3.134) 是接收原始数据包的地址。ICMP 错误消息在数据部分末尾包含过期的标签信息。其值为 0x02d(即 45)。Frame 4 是从 R4 发送到 R1 的 MPLS 数据包。

  7. 在接收到 ICMP 消息时,R1 会发送另一个标签为 47 且 TTL 为 3 的数据包。在途中,R2 和 R3 会递减 TTL 并将数据包转发到 R4。R4 注意到它是预定接收方,并发现 UDP 数据报端口不可达。它通过 R3 和 R2 将 ICMP port unreachable 消息发送到 R1。

    在此嗅探器输出中,要注意的重点用粗体表示:

    Frame 5 (60 on wire, 60 captured)
    Ethernet II 
    Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
    Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
    Type: IP (0x0800) 
    Trailer: 00000000000000000000000000000000... 
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 1 
    Protocol: UDP (0x11) 
    Header checksum: 0x0446 (correct) 
    Source: 10.13.2.34 (10.13.2.34)
    Destination: 10.13.1.51 (10.13.1.51) 
    User Datagram Protocol 
    Source port: 37647 (37647) 
    Destination port: 33436 (33436) 
    Length: 8 
    Checksum: 0xd2c3 (correct) 
    
    Frame 6 (74 on wire, 74 captured) 
    Ethernet II 
    Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
    Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
    Type: MPLS label switched packet (0x8847) 
    MultiProtocol Label Switching Header 
    MPLS Label: Unknown (28) 
    MPLS Experimental Bits: 6 
    MPLS Bottom Of Label Stack: 1 
    MPLS TTL: 255 
    Internet Protocol 
    Version: 4 
    Header length: 20 bytes 
    Time to live: 255 
    Protocol: ICMP (0x01) 
    Header checksum: 0x5694 (correct) 
    Source: 10.13.5.10 (10.13.5.10) 
    Destination: 10.13.2.34 (10.13.2.34) 
    Internet Control Message Protocol 
    Type: 3 (Destination unreachable) 
    Code: 3 (Port unreachable) 
    Checksum: 0x1485 (correct)
    Data (28 bytes) 
    04500 001c 9e1d 0000 0111 0446 0a0d 0222E..........F..." 
    100a0d 0133 930f 829c 0008 d2c3...3........ 
    

    Frame 5 显示出 UDP 数据报由 R1 发送到 R4。UDP 数据报中的目标端口值为 33436(大于 32000),如正常 traceroute 命令部分中所述。

    Frame 6 中,R4 将一个 destination unreachable ICMP 类型和一个 port unreachable 代码发送到 R1。来自 R2 和 R3 的所有较早 ICMP 消息的类型字段都已设置为 time-to-live exceeded。扩展 traceroute 命令的输出如下所示:

    R1#traceroute 
    Protocol [ip]:  
    Target IP address: 10.13.1.51 
    Source address: 10.13.2.34 
    Numeric display [n]:  
    Timeout in seconds [3]:
    Probe count [3]: 1 
    Minimum Time to Live [1]:
    Maximum Time to Live [30]:
    Port Number [33434]:  
    Loose, Strict, Record, Timestamp, Verbose[none]:
    Type escape sequence to abort. 
    Tracing the route to 10.13.1.51
    1 10.13.2.33 [MPLS: Label 47 Exp 0] 0 msec 
    2 10.13.3.134 [MPLS: Label 45 Exp 0] 0 msec
    3 10.13.5.10 4 msec 
    R1# 
    

    默认情况下,traceroute 命令针对每个 TTL 值使用三个探测。它发送三个 TTL 为 1 的数据包,三个 TTL 为 2 的数据包,依此类推。此 traceroute 命令随单个探测发出,因此易于跟踪和调试。如输出中所示,traceroute 命令还显示出过期标签值。

no mpls ip propagate-ttl 命令

当您配置 MPLS 时,会在将 IP 数据包转发到 MPLS 域中时由标签交换路由器 (LSR) 附加一个标签。此标签必须在 TTL 字段中含有值。默认情况下,LSR 读取传入数据包的 IP 报头中的 TTL 字段,将其递减 1,然后将剩余内容复制到 MPLS 报头的 TTL 字段中。核心 LSR 仅查看最上面的标签。如果 TTL 值未达到 0,则转发该数据包。弹出标签的输出边缘 LSR 将标签 TTL 字段的剩余内容复制到 IP 报头的 TTL 字段中,然后将 IP 数据包转发出 MPLS 域。

此行为可使用 no mpls ip propagate-ttl configuration 配置命令来更改。附加标签时,输入边缘 LSR 使用值 255 作为标签中的 TTL 值。弹出标签时,输出边缘 LSR 不会将标签 TTL 值复制到 IP 报头中。最终结果是 IP 报头 TTL 不会反映跨 MPLS 核心所使用的跳数;因此,当用户从其网络的一端到另一端执行 traceroute 时,MPLS 核心网络中的路由器不会出现在 traceroute 信息中。在输入和输出边缘 LSR 中禁用 TTL 传播十分重要。否则,IP 报头在离开 MPLS 域时所具有的值可能高于进入该域时所具有的值。

下面是一个示例:

mpls_traceroute4.gif

C1 执行一个到 C2 的 traceroute。使用默认 IP TTL 传播操作时,C1 中的 traceroute 与下面类似:

C1#traceroute C2.cust.com

Tracing the route to C2.cust.com
  1 A.provider.net       44 msec  36 msec  32 msec
  2 B provider.net      164 msec  132 msec  128 msec
  3 C.provider.net	148 msec  156 msec  152 msec
  4 C2.cust.com         180 msec  *  181 msec

此输出说明了 MPLS 网络中的典型 traceroute 行为。当带有标记的数据包的标签报头带有来自原始 IP 数据包的 TTL 值时,该路径中的路由会丢弃超出 TTL 的数据包。因此,traceroute 显示出该路径中的所有路由器。行为如下:

  1. 第一个数据包为 TTL 等于 1 的 IP 数据包。路由器 A 递减 TTL 并丢弃该数据包,因为它达到 0。将向源发送一个 ICMP TTL 超出消息。

  2. 发送的第二个数据包为 TTL 等于 2 的 IP 数据包。路由器 A 递减该 TTL,对数据包进行标记,然后将该数据包转发到路由器 B。

  3. 路由器 B 递减 MPLS 报头中的 TTL 值,丢弃该数据包,并向源发送一个 ICMP TTL 超出消息。由于它是已丢失的 MPLS 数据包,因此 ICMP 消息的返回地址必须派生自该 MPLS 数据包内 IP 报头中的源地址。但是,该 IP 地址实际上对于路由器 B 可能是未知的,因此,路由器 B 会沿已丢弃数据包所经过的相同标签交换路径 (LSP)(朝着路由器 C 的方向)转发 ICMP 消息。在 LSP 末尾处,将会删除标签,并根据 IP 报头中的目标地址转发 ICMP 消息(朝着路由器 C1)。

  4. 第三个数据包(TTL 为 3)会经历与前面的数据包类似的处理,只不过路由器 C 现在是丢弃数据包的路由器(基于 IP 报头中的 TTL)。路由器 B 之前因倒数第二跳弹出而删除了标签,并且在 IP 报头中复制了 TTL。

  5. 第四个数据包(TTL 为 4)到达检查 IP 报头的 TTL 的最终目标。

如果在全局配置模式下使用 no mpls ip propagate-ttl 命令禁用了 IP TTL 传播,则不会在 IP 报头中复制 TTL 值,并且 C1 到 C2 的 traceroute 与下面类似:

C1#traceroute C2.cust.com

Tracing the route to C2.cust.com
  1 A.provider.net   44 msec  36 msec  32 msec
  2 C2.cust.com     180 msec  *  181 msec

当在这种情况下使用 traceroute 命令时,只会从看到 IP 报头中存储的实际 TTL 的那些路由器接收 ICMP 回复。在这种情况下,路由器 C1 执行 traceroute 命令(如所示的那样),但核心路由器不会将 TTL 复制到标签或从标签复制 TTL。这会导致以下行为:

  1. 第一个数据包是 TTL 等于 1 的 IP 数据包。路由器 A 递减 TTL,丢弃数据包,并向源发送 ICMP TTL 超出消息。

  2. 第二个数据包是 TTL 等于 2 的 IP 数据包。路由器 A 递减 TTL,对数据包进行标记,并将 MPLS 报头中的 TTL 设置为 255。

  3. 路由器 B 将 MPLS 报头中的 TTL 递减为 254,删除 MPLS 标签,并将 MPLS 报头中的 TTL 值复制到 IP 报头的 TTL 字段中。

  4. 路由器 C 递减 IP TTL,并将数据包发送到下一跳路由器 C2。数据包已到达最终目标。


相关信息


Document ID: 26585