NAME¶
paris-traceroute - print the IP-level routes between two Internet hosts.
SYNOPSIS¶
paris-traceroute [
-fhilnqvV ] [
-b initial_id ]
[
-d dest_port ] [
-a algorithm ] [
-f
first_ttl ]
[
-L packetlen ] [
-m max_ttl ]
[
-M max_missing_hops ] [
-p protocol ]
[
-q nqueries ] [
-s source_port ] [
-t
tos ]
[
-T delaymsecs ] [
-w waittime ]
host
DESCRIPTION¶
Paris traceroute is a new version of the well-known network diagnosis tool. It
addresses problems caused by load balancers with the initial
traceroute(8) implementation. By controlling the flow identifier of the
probes, it is able to follow accurate paths in networks with load balancers.
It is also able to find all the load balanced paths to the destination.
Finally, it enriches its output with information extracted from the received
packets, allowing a more precise analysis of the discovered paths.
Options are:
- -a
- Set the probing algorithm:
- hopbyhop
- Send q (configured with the -q flag) probes with the
same TTL, then wait for all the replies or a timeout. Increment the TTL
and reiter the operation until we reach the destination. All packets hold
the same flow identifier.
- packetbypacket
- It is the classic traceroute(8) algorithm: send one
probe at a time, then wait for a reply or a timeout. Reiter the operation
until we reach the destination.
- concurrent
- Send all the probes from min_ttl to max_ttl and wait for
all replies or a timeout.
- scout
- Send a scout probe with a ttl max to the destination. If
the destination can be reached, compute the number of hops used to reach
the destination and start the concurrent algorithm with a max_ttl equal to
this number of hops. If the destination cannot be reached, the hopbyhop
algorithm will be used instead. This algorithm is only usable with UDP
probes.
- exhaustive
- Print all the possible "load balanced" paths to
the destination. (See section EXHAUSTIVE ALGORITHM )
- -b
- Set the initial probe identifier.
- -d
- Set the the UDP/TCP destination port (default: 33457).
- -f
- Set the initial ttl (default: 1).
- -h
- Print help.
- -i
- Print the "IP Identifier" value of the responses.
It is used to identify the different interfaces of a router, or uncover
NAT boxes.
- -l
- Display the ttl value of the reply. Useful to study
asymmetric routing and NAT boxes.
- -L
- Set the data length to be used in outgoing packets.
(default: 0).
- -m
- Set the maximum ttl (default: 30).
- -M
- Set the maximum number of consecutive unresponsive hops
which causes the program to abort (default 3).
- -n
- Print hop addresses numerically. The default is to print
also hostnames.
- -p
- Set the protocol to use (possible values: udp, tcp,
icmp).
- -q
- Set the number of probes per hop (default: 3).
- -s
- Set the UDP/TCP source port (default: 33456).
- -t
- Set the Type of Service (default: 0). This field is taken
into account by many per-flow load balancers: in presence of such a load
balancer, packets having different TOS values are likely to follow a
different paths.
- -T
- Set the time to wait between probes, in milliseconds
(default 50ms).
- -v
- Print debug messages.
- -V
- Print the program version.
- -w
- Set the time to wait for a response, in milliseconds
(default 5000ms).
EXHAUSTIVE ALGORITHM¶
With the deployment of load balancing, there is no longer only one path between
two Internet hosts. This algorithm sends enough probes at each hop to find all
the possible interfaces. Unlike the other algorithms, it varies the flow
identifier of the probes in a controlled manner, to ensure the discovery of
all the interfaces with a high confidence degree. It also categorizes load
balancers as "per-packet" (pseudo-random, round-robin packet
balancing) or "per-flow" (packets belonging to the same flow follow
the same path).
In case of per-flow load balancing, it prints additional information to track
flows. The following trace shows the enriched output:
14 1.1.1.1:0,1,3 539.065 ms 1.1.1.2:2,4,5 492.152 ms
15 2.2.2.2:0,1,3 563.163 ms 2.2.2.3:2,4,5 470.919 ms
Integers listed after the interface addresses are "flow identifiers":
they are used to identify a flow in the set of interfaces found by the
algorithm. For example, flow #0 traverses interfaces 1.1.1.1 and 2.2.2.2. This
is the same for flows 1 and 3 while flows 2, 4 and 5 traverse 1.1.1.2 and
2.2.2.3.
OUTPUT¶
The following information are extracted from the response packets and displayed:
- Response TTL
- The TTL of the responses (from the routers and the
destination) is optionally displayed in square brackets (Use the -l
flag ).
- Original TTL
- This is the TTL of the probe when it was received and
dropped by the router. If the original TTL is different than 1, it is
displayed with a !Tx symbol, where x is the value of the
TTL. For example, !T0 indicates that the value of the TTL was 0
when the probe reached the router that discarded it.
- IP Identifier
- This the identifier of the IP error packet sent by the
router. This field is set with the value of an internal 16-bit counter
usually incremented for each packet sent. This value is optionally
displayed inside brackets. For instance {1234} indicates that the
probe had its identifier set to 1234.
- MPLS labels
- If the packet contains ICMP extensions for MPLS, the MPLS
label stack is diplayed in an additionnal line just after the current hop
line. Labels of the same stack are separated with a "|"
character.
- Other ICMP error messages
- Paris traceroutes uses the same convensions as
traceroute(8) to display unexpected ICMP messages (i.e. different
than TIME_EXCEEDED, PORT_UNREACHABLE and ECHO_REPLY).
SEE ALSO¶
traceroute(8), pathchar(8),
netstat(1),
ping(8)
AUTHOR¶
The initial version of
traceroute(8) was implemented by Van Jacobson from
a suggestion by Steve Deering. Paris traceroute was implemented by Xavier
Cuvellier. Debugged and enhanced by Brice Augustin.
The current version is available at:
BUGS¶
Please send bug reports to brice.augustin@rp.lip6.fr.