Hacker News
Understanding Traceroute
linsomniac
|next
[-]
Not exactly.
Most big routers have ASICs (custom silicon) that can handle the bulk of routing decisions, like an interface card will have a chip that can directly determine where a packet needs to go and forwards it there. These are extremely fast, but limited, and are called "fast path".
Aside: Too many ACLs is a common way that packets fall off the fast path, and is why routers on the public Internet will happily forward along bogon traffic that by it's very nature is just wasting bits on the pipes.
There are some things that the fast path cannot handle, and generating ICMP TTL exceeded messages is one of them. Those go over to the router CPU, which historically has been insanely underpowered. Back when I was doing more routing it was common to have host CPUs in the multi-GHz range with multiple cores, but routers of a similar class would have a 100MHz MIPS CPU.
That's why, as the article goes on to explain, "*"s in the traceroute may not indicate a problem. It's not necessarily a literal deprioritization of ICMP.
If you ever see packet loss in a trace at one step but the steps after it aren't showing it, you can ignore that packet loss, it's likely a CPU limitation on a busy router.
FujiApple
|root
|parent
|next
[-]
Trippy now includes [0] forward loss (Floss) and backward loss (Bloss) _heuristics_ to help surface such behaviour.
The idea was inspired by our previous discussion [1] on the topic on HN some time ago!
These columns are experimental and so not shown by default but can be enabled [2].
[0] https://github.com/fujiapple852/trippy/blob/master/RELEASES....
stingraycharles
|root
|parent
|next
|previous
[-]
Or are there other types of packets in the slow path that do get a delivery guarantee by the router?
I’m curious how these tradeoffs are made.
charcircuit
|root
|parent
|next
|previous
[-]
_moof
|root
|parent
|next
|previous
[-]
jiveturkey
|root
|parent
|next
|previous
[-]
2015 - Characterizing ICMP Rate Limitation on Routers[1]
[0] https://pages.cs.wisc.edu/~suman/courses/640/papers/govindan...
runjake
|next
|previous
[-]
homepage: https://www.bitwizard.nl/mtr/
excellent article on using mtr: https://www.cloudflare.com/learning/network-layer/what-is-mt...
thelastgallon
|next
|previous
[-]
p_ing
|next
|previous
[-]
https://archive.nanog.org/meetings/nanog47/presentations/Sun...
HeadlessChild
|next
|previous
[-]
EDIT: You probably to increase the maximum hop count for it to fully work.
gerdesj
|next
|previous
[-]
(reads article - I've got a five digit /. ID and that was after lurking for several years - respond first, ask questions/read article later)
Oh. You now fail to understand networks in Rust instead of C/Python/nicker elastic. sighs in policy based routing tables.
A modern mtr (traceroute is so 90's) should do things like run up and down the stack for each point along a route. It will still probably need to use the TTL field to find each point (IP) but then use ICMP/TCP/UDP/etc to measure that point in some way or perhaps interpolate it from points either side.
When I want to really get to grips with latency and stuff, I start off with a small dedicated box on a customer network and "smoke ping" with all points measurable on the path. I also have several running from our datacentre and a fair few RIPE Atlas probes too.
traceroute is handy but you must be able to decipher what it is telling you. Wearing a stethoscope does not make you a doctor.
marviio
|next
|previous
[-]
linsomniac
|next
|previous
[-]
esbranson
|next
|previous
[-]
lm411
|next
|previous
[-]
> traceroute tracks the route packets taken from an IP network on their way to a given host. It utilizes the IP protocol's time to live (TTL) field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway along the path to the host.