Enterramon Decal 2

Using the Enterramon Traceroute (Hop Test)

What is traceroute

Traceroute is what you reach for when ping has already told you something is slow, but not why. Where ping only measures the round trip to a single target, traceroute maps every single network it passes through along the way, hop by hop, and times each one individually.

It works by sending packets with a slowly increasing time-to-live value, one hop, then two, then three, and so on. Each router along the path that the packet expires at sends a small message back, and that’s how the tool builds up the full path one hop at a time. The result is a list, starting at the region you tested from and ending at the target, showing everything the traffic passed through to get there.

Our Hop Test does exactly this, from five regions, with three separate timing samples per hop instead of just one.

Using the Enterramon Hop Test

Head to enterramon.com/traceroute  and enter a domain or IP address.

Same two settings as Ping, and for the same reasons.

globe

Region

Cape Town, Frankfurt, Singapore, St Louis, or Sydney. The path traffic takes changes completely depending on where it starts, so if you’re chasing a routing issue that’s specific to a region, that’s the region to test from.

bring_your_own_ip

IP version

IPv4 or IPv6. Worth running both if the target supports both, since IPv4 and IPv6 traffic can genuinely take different physical paths through different networks.

Hit Run Test and we map every hop between the chosen region and the target, with three timing samples per hop rather than one.

Understanding the traceroute results

The results break down into a few blocks:

hub

Hops

The total number of unique hops the path crossed to reach the target. A short path isn’t automatically better, it just tells you how many networks the traffic passed through. What matters more is what’s happening at each one.

public

Countries

How many countries the path physically crossed. Handy for a quick sanity check, if you’re testing from Cape Town to a server that should be hosted locally and the trace shows the path bouncing through three other countries first, that’s worth investigating on its own. The country tag is determined by the listed location of that IP or subnet, this is not always accurate as the listed location of the IP may not be where it actually is used on the internet.

timer_off

Timeouts

How many hops along the path didn’t respond at all. This is one of the more misunderstood numbers on the page, and it’s worth being upfront about it here rather than leaving it to guesswork, some routers are configured to not respond to this kind of probe at all, as a deliberate security or load setting, not because anything is actually broken. A timeout mid-path with a clean, fast result at every hop after it usually just means that one router doesn’t reply. A timeout at the very end, right where the target should be, is a different story and worth a closer look, but could also be a firewall rule or access list, or an actual issue that needs to be investigated.

list_alt

Per-hop detail

For each hop you get the IP address, the hostname if it resolves, three separate round-trip times, and the country and network operator responsible for that hop. The three RTT samples per hop matter for the same reason the packet table matters on Ping, a single slow reading could be a momentary blip, but three consistently slow readings at the same hop is a real pattern. If a hop fails to respond, it’s explicitly marked as such rather than left blank, so you can tell the difference between a hop that’s slow and one that’s simply silent. Of course a slow hop could mean you have congestion on the route or you are changing continents, so knowing where you are testing from and to can be important.

How traceroute can help you

Ping tells you a server is reachable and gives you a rough sense of how fast. Traceroute tells you where along the way any delay is actually happening.

When ping times come back high, traceroute is how you find out whether the problem sits at the destination server itself, several networks upstream, on a congested transit link somewhere in the middle, or because traffic is being routed through a longer physical path than it needs to be. Those are four very different problems with four very different fixes, and ping alone can’t tell you which one you’re looking at.

This is especially useful for anything international. A visitor connecting from one continent to a server on another crosses several networks to get there, and every so often one of those networks has a bad day. Traceroute shows you exactly which hop that is, rather than leaving you to guess whether it’s your server, your host’s network, or something entirely outside anyone’s control.

It’s also worth running before and after any routing-relevant change, a new CDN, a BGP update on your provider’s side, a change in upstream transit. Comparing a trace from before the change to one after is usually the clearest way to confirm traffic is taking the path you expect, and to catch it quickly if a change has quietly sent visitors somewhere less direct than before.

Running a traceroute yourself on a Mac

Macs already ship with traceroute built into Terminal, no install needed. Open Terminal and run traceroute example.com, swapping in whatever domain or IP you’re chasing. Below is a real run against a Cloudflare-fronted domain, home network and ISP hops generalised out since there’s no reason to publish that part.

traceroute example.com (default, UDP)

Home router and ISP hops generalised, target and later hops are the real addresses.

HopHostRTT 1RTT 2RTT 3
1[home router]16.271 ms14.191 ms14.655 ms
2[ISP hop]17.638 ms13.596 ms14.133 ms
3[ISP hop]13.134 ms17.373 ms16.103 ms
4[IXP]54.938 ms51.171 ms29.790 ms
5197.234.240.21 / 197.234.240.3722.801 ms22.901 ms15.269 ms
6172.66.147.243 (target)15.415 ms14.912 ms14.425 ms

The default macOS traceroute sends UDP probes, not ICMP. That trips people up if they’re used to Windows, where tracert only ever uses ICMP. To match ICMP behaviour on a Mac, add the -I flag, traceroute -I example.com. Documentation for this flag often notes it needs root, but that’s not something to take on faith either, so here’s the same target run with -I straight after the one above, same terminal session, no separate sudo prompt appeared either time.

traceroute -I example.com (ICMP)

Same target, same terminal session, run straight after the UDP trace above.

HopHostRTT 1RTT 2RTT 3
1[home router]15.041 ms10.005 ms13.743 ms
2[ISP hop]11.131 ms17.979 ms30.236 ms
3[ISP hop]11.452 ms12.436 ms10.399 ms
4[IXP]25.407 ms32.512 ms37.787 ms
5197.234.240.2941.433 ms32.020 ms26.293 ms
6172.66.147.243 (target)14.996 ms12.115 ms9.797 ms

Same six hops both times, same hostnames, only the RTTs shift a little between runs, which is normal and not something either protocol choice caused here. That won’t hold on every network. Some routers treat UDP and ICMP probes differently, replying to one and silently dropping the other, so a hop that times out under the default UDP mode is worth re-running with -I before you assume anything’s actually broken there. Whether -I asks for a password on your machine depends on your sudo timeout settings, run sudo -k first if you want to check honestly rather than relying on a cached credential from something else you ran earlier.

Terminal only shows you the path from your Mac, on your network, at that moment. Running the same target through the Hop Test from Cape Town, Frankfurt, Singapore, St Louis, or Sydney adds the regions your own connection can’t reach, and gives you three timing samples per hop instead of the one Terminal defaults to.

Linux and Windows behave differently again

Linux traceroute matches macOS in the way that matters most, UDP by default, ICMP behind a flag. Same target, same two commands, run on a Linux box instead of a Mac.

traceroute example.com (Linux, default UDP)
HopHostRTT 1RTT 2RTT 3
1[server provider edge]1.588 ms1.560 ms1.542 ms
22-1-c13-1.ear2.StLouis1.Level3.net*2.317 ms*
3be9184.rcr21.stl03.atlas.cogentco.com*1.831 ms*
4be2388/be2349.ccr42.ord01.atlas.cogentco.com5.761 ms5.761 ms
5141.101.73.110 / be2766/be2765.ccr41.ord036.116 ms6.505 ms6.476 ms
638.122.181.134 / 38.142.64.15434.315 ms6.256 ms6.233 ms
7172.66.147.243 (target)5.950 ms6.554 ms6.568 ms
sudo traceroute -I example.com (Linux, ICMP)
HopHostRTT 1RTT 2RTT 3
1[server provider edge]0.736 ms0.719 ms*
2****
3be9184.rcr21.stl03.atlas.cogentco.com6.446 ms6.443 ms6.440 ms
4be2349.ccr41.ord01.atlas.cogentco.com11.949 ms11.945 ms11.833 ms
5be2765.ccr41.ord03.atlas.cogentco.com11.828 ms11.825 ms11.821 ms
638.122.181.13417.059 ms15.577 ms15.557 ms
7141.101.73.11010.790 ms10.683 ms10.676 ms
8141.101.73.14717.011 ms9.944 ms11.063 ms
9172.66.147.243 (target)9.881 ms9.875 ms9.868 ms

Same command shape as macOS, but a real difference showed up running it, not reading about it. The plain traceroute needed no elevated privileges at all, -I did, a password prompt every time. On the Mac test earlier neither command asked for one in that session, likely a cached credential rather than a real platform difference, but on this Linux box the distinction was explicit and repeatable. Worth checking on your own system rather than assuming either way.

Windows doesn’t give you a choice between UDP and ICMP in the first place. tracert has always been ICMP-only, no flag needed or available to switch it. What it will do without warning, if the target has an IPv6 address and the machine has working IPv6 connectivity, is trace over IPv6 automatically. Been the default behaviour since Vista and Server 2008, still catches people out. Here’s a real run from an older Server 2012 box.

tracert example.com (Windows Server 2012)

Tracing route to example.com [2606:4700:10::ac42:93f3], IPv6 chosen automatically.

HopHostRTT 1RTT 2RTT 3
12c0f:f508::1<1 ms<1 ms<1 ms
22c0f:f508:0:27::1<1 ms<1 ms<1 ms
3cloudflare.ixp.joburg1 ms5 ms30 ms
42400:cb00:45:3::<1 ms<1 ms<1 ms
52606:4700:10::ac42:93f3 (target)<1 ms<1 ms<1 ms

Five hops over IPv6 rather than the longer IPv4 path Linux and macOS showed to the same domain. If you actually wanted the IPv4 route, tracert -4 example.com forces it on versions that support the flag, worth checking yours does before relying on it. Nothing wrong with the IPv6 result on its own, but it’s a different path to a different address family than the other two traces in this article, not a like-for-like comparison unless you force the protocol on all three.

Two other commands worth knowing

tracepath ships on most Linux systems and needs no root at all, not even for its ICMP-style probing. What it adds over plain traceroute is live path MTU discovery, shown right in the output. Real run below, including a few silent hops near the end, tracepath keeps going and reports them rather than stopping.

tracepath example.com
HopHostTimeNote
1[localhost]0.010mspmtu 1500
12605:a140::a0.876ms
12605:a140::a1.273ms
22001:550:2:1c::45:11.420ms
3be9184.rcr21.stl03.atlas.cogentco.com1.996ms
4SORENSON-CO.bar1.Houston1.Level3.net7.371msasymm 5
5be2766.ccr41.ord03.atlas.cogentco.com6.684ms
62400:cb00:612:3::20.874msasymm 7
72400:cb00:14:2::59.992msasymm 5
8no reply
9no reply

The asymm notes mean the return path likely has a different hop count than the outbound one, common on the internet and not a fault by itself. pmtu 1500 on hop one confirms the path can carry a full-size Ethernet frame without fragmenting, worth knowing if something further downstream is dropping oversized packets silently.

mtr takes a different approach entirely, instead of one pass it sends repeated probes to every hop continuously, then shows loss percentage and timing spread rather than three samples once. Real output below, ten pings per hop against the same target.

mtr example.com
HopHostLoss%AvgBestWorstStDev
12605:a140::a0.0%0.70.41.90.5
2lag-105.ear1.Washington12.Level3.net0.0%0.90.52.30.5
32001:1900::3:1cb0.0%6.96.310.01.1
4SORENSON-CO.bar1.Houston1.Level3.net0.0%15.46.252.315.7
52400:cb00:14:2::40.0%7.27.07.70.3
62400:cb00:1274:3::0.0%9.67.218.03.7
72606:4700:10::ac42:93f3 (target)0.0%8.37.89.30.5

Zero loss on every hop, but hop 4 swings from a best of 6.2ms to a worst of 52.3ms, nearly a 9x spread, with a StDev of 15.7 to match. The average, 15.4ms, sits right in the middle and tells you almost nothing about how erratic that hop actually is. A single traceroute pass would have shown one number and moved on. This is the real case for repeated sampling over a one-off trace, and it’s the same reasoning behind the Hop Test running three timing samples per hop instead of one, a single reading can’t tell a real pattern from a momentary blip. For chasing an active issue rather than just illustrating one, running mtr for longer, a few hundred pings instead of ten, gives a steadier picture of whether a hop like this is consistently unstable or just had a rough few seconds.

What traceroute is not

Traceroute maps the path. It doesn’t tell you anything about what happens once the traffic actually arrives at the server, that’s a job for Server Check or a full page load test instead.

It’s also not a perfect map of every path every visitor takes. A trace shows you the specific path from one test region at one moment in time. Real users are scattered across many networks and locations, and routing can change between tests, sometimes hop to hop, sometimes for the whole path, depending on how the networks in between are configured. Treat a single trace as a sample of the route, not a permanent guarantee of it.

And timeouts need reading carefully rather than taken at face value. A silent hop in the middle of an otherwise clean trace usually means that router just doesn’t respond to this type of probe, not that anything is actually failing. It’s the pattern across the whole trace that tells the real story, not any single line in isolation.

If ping alone already gave you a clean result with no packet loss, a trace usually won’t add much, since there’s no delay to go hunting for. Traceroute earns its place once ping has already shown you something’s off and you need to know where.