I have an interesting issue where my traceroute skips one hop on the way. I do not know why but it seems to be some kind of Juniper behaviour which I do not understand yet. Blue routers are Cisco machines, The other PC-like icons are Juniper routers.

I have this topology: enter image description here

But when I do a CE2: traceroute (to CE1 Lo0 interface) I get the following:

root> traceroute                       
traceroute to (, 30 hops max, 52 byte packets
 1 (  2.514 ms  1.861 ms  1.393 ms
 2 (  5.597 ms  6.516 ms  5.480 ms
     MPLS Label=300160 CoS=0 TTL=1 S=0
     MPLS Label=18 CoS=0 TTL=1 S=1
 3 (  5.618 ms  6.154 ms  5.312 ms
     MPLS Label=300 CoS=0 TTL=1 S=0
     MPLS Label=203 CoS=0 TTL=1 S=0
     MPLS Label=18 CoS=0 TTL=2 S=1
 4 (  5.742 ms  5.344 ms  5.366 ms
     MPLS Label=203 CoS=0 TTL=1 S=0
     MPLS Label=18 CoS=0 TTL=1 S=1
 5 (  5.550 ms  4.752 ms  4.675 ms
     MPLS Label=18 CoS=0 TTL=1 S=1
 6 (  5.315 ms  5.238 ms  5.532 ms


And I try the same thing from the other side CE1: traceroute (to CE2 interface Lo0) I get this:

Type escape sequence to abort.
Tracing the route to
VRF info: (vrf in name/id, vrf out name/id)
  1 1 msec 1 msec 0 msec
  2 [MPLS: Labels 201/16 Exp 0] 5 msec 5 msec 4 msec
  3 [MPLS: Labels 301/300144/16 Exp 0] 4 msec 4 msec 4 msec
  4 [MPLS: Labels 300144/16 Exp 0] 4 msec 4 msec 4 msec
  5 5 msec 6 msec 6 msec

As you can see, the PE2_2 router is not present in the output? Can anyone please explain why this occurs?

  • Did any answer help you? If so, you should accept the answer so that the question doesn't keep popping up forever, looking for an answer. Alternatively, you can post and accept your own answer.
    – Ron Maupin
    Jan 5, 2021 at 2:45

3 Answers 3


traceroute works by using probe packets with increasing TTL values. The hop where a packet's TTL times out is supposed to return an time exceeded ICMP message which is processed and displayed by traceroute. If a hop doesn't decrement the TTL you simply don't see it.

Apparently, PE2_2 doesn't decrement TTL in that path - without the (sanitized) configuration we won't be able to tell you why.


That is how MPLS works. The packet doesn't get routed at that point, it is label switched.

Traceroute works by having the packet TTL expire and an ICMP message is sent back saying that the packet expired. Routers will decrement the TTL as they route the packet. MPLS doesn't route packets, it places labels on the packet and switches based on the labels. That means the router doesn't route the packet, so it doesn't decrement the TTL, and the TTL doesn't expire.

If you use some other type of tunnel, you will observe the same behavior because the outer packet of the tunnel will have its TTL decremented, not the traceroute packet TTL, so the traceroute packet header TTL will not expire.

Basically, a tunnel looks like a single hop to the original traceroute packet, and the intermediate routes probably do not have a route back to the source host to even be able to send an ICMP timeout.


Weirdly enough, this was caused by a command on PE2_2 juniper.

delete routing-instances L3VPN-1 vrf-table-label solved this behaviour, now i get:

Type escape sequence to abort.
Tracing the route to
VRF info: (vrf in name/id, vrf out name/id)
  1 1 msec 0 msec 0 msec
  2 [MPLS: Labels 205/299792 Exp 0] 6 msec 6 msec 5 msec
  3 [MPLS: Labels 301/299888/299792 Exp 0] 5 msec 6 msec 5 msec
  4 [MPLS: Labels 299888/299792 Exp 0] 5 msec 8 msec 5 msec
  5 [MPLS: Label 299792 Exp 0] 5 msec 3 msec 3 msec
  6 5 msec 5 msec 5 msec

Still not sure what happened there. Cheers

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.