|
|
1.1 root 1: .\" Copyright (c) 1990 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" This code is derived from software contributed to Berkeley by
5: .\" Van Jacobson.
6: .\"
7: .\" Redistribution and use in source and binary forms are permitted provided
8: .\" that: (1) source distributions retain this entire copyright notice and
9: .\" comment, and (2) distributions including binaries display the following
10: .\" acknowledgement: ``This product includes software developed by the
11: .\" University of California, Berkeley and its contributors'' in the
12: .\" documentation or other materials provided with the distribution and in
13: .\" all advertising materials mentioning features or use of this software.
14: .\" Neither the name of the University nor the names of its contributors may
15: .\" be used to endorse or promote products derived from this software without
16: .\" specific prior written permission.
17: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20: .\"
21: .\" @(#)traceroute.8 5.3 (Berkeley) 6/24/90
22: .\"
23: .TH TRACEROUTE 8 "June 24, 1990"
24: .UC 6
25: .SH NAME
26: traceroute \- print the route packets take to network host
27: .SH SYNOPSIS
28: .B traceroute
29: [
30: .B \-m
31: max_ttl
32: ] [
33: .B \-n
34: ] [
35: .B \-p
36: port
37: ] [
38: .B \-q
39: nqueries
40: ] [
41: .B \-r
42: ] [
43: .B \-s
44: src_addr
45: ] [
46: .B \-t
47: tos
48: ] [
49: .B \-w
50: ] [
51: .B \-w
52: waittime
53: ]
54: .I host
55: [
56: .I packetsize
57: ]
58: .SH DESCRIPTION
59: The Internet is a large and complex aggregation of
60: network hardware, connected together by gateways.
61: Tracking the route one's packets follow (or finding the miscreant
62: gateway that's discarding your packets) can be difficult.
63: .I Traceroute
64: utilizes the IP protocol `time to live' field and attempts to elicit an
65: ICMP TIME_EXCEEDED response from each gateway along the path to some
66: host.
67:
68: The only mandatory parameter is the destination host name or IP number.
69: The default probe datagram length is 38 bytes, but this may be increased
70: by specifying a packet size (in bytes) after the destination host
71: name.
72:
73: Other options are:
74: .TP
75: .B \-m
76: Set the max time-to-live (max number of hops) used in outgoing probe
77: packets. The default is 30 hops (the same default used for TCP
78: connections).
79: .TP
80: .B \-n
81: Print hop addresses numerically rather than symbolically and numerically
82: (saves a nameserver address-to-name lookup for each gateway found on the
83: path).
84: .TP
85: .B \-p
86: Set the base UDP port number used in probes (default is 33434).
87: Traceroute hopes that nothing is listening on UDP ports
88: .I base
89: to
90: .I base+nhops-1
91: at the destination host (so an ICMP PORT_UNREACHABLE message will
92: be returned to terminate the route tracing). If something is
93: listening on a port in the default range, this option can be used
94: to pick an unused port range.
95: .TP
96: .B \-r
97: Bypass the normal routing tables and send directly to a host on an attached
98: network.
99: If the host is not on a directly-attached network,
100: an error is returned.
101: This option can be used to ping a local host through an interface
102: that has no route through it (e.g., after the interface was dropped by
103: .IR routed (8C)).
104: .TP
105: .B \-s
106: Use the following IP address (which must be given as an IP number, not
107: a hostname) as the source address in outgoing probe packets. On
108: hosts with more than one IP address, this option can be used to
109: force the source address to be something other than the IP address
110: of the interface the probe packet is sent on. If the IP address
111: is not one of this machine's interface addresses, an error is
112: returned and nothing is sent.
113: .TP
114: .B \-t
115: Set the
116: .I type-of-service
117: in probe packets to the following value (default zero). The value must be
118: a decimal integer in the range 0 to 255. This option can be used to
119: see if different types-of-service result in different paths. (If you
120: are not running 4.4bsd, this may be academic since the normal network
121: services like telnet and ftp don't let you control the TOS).
122: Not all values of TOS are legal or
123: meaningful \- see the IP spec for definitions. Useful values are
124: probably `-t 16' (low delay) and `-t 8' (high throughput).
125: .TP
126: .B \-v
127: Verbose output. Received ICMP packets other than TIME_EXCEEDED and
128: UNREACHABLEs are listed.
129: .TP
130: .B \-w
131: Set the time (in seconds) to wait for a response to a probe (default 3
132: sec.).
133: .PP
134: This program attempts to trace the route an IP packet would follow to some
135: internet host by launching UDP probe
136: packets with a small ttl (time to live) then listening for an
137: ICMP "time exceeded" reply from a gateway. We start our probes
138: with a ttl of one and increase by one until we get an ICMP "port
139: unreachable" (which means we got to "host") or hit a max (which
140: defaults to 30 hops & can be changed with the \-m flag). Three
141: probes (change with \-q flag) are sent at each ttl setting and a
142: line is printed showing the ttl, address of the gateway and
143: round trip time of each probe. If the probe answers come from
144: different gateways, the address of each responding system will
145: be printed. If there is no response within a 3 sec. timeout
146: interval (changed with the \-w flag), a "*" is printed for that
147: probe.
148: .PP
149: We don't want the destination
150: host to process the UDP probe packets so the destination port is set to an
151: unlikely value (if some clod on the destination is using that
152: value, it can be changed with the \-p flag).
153: .PP
154: A sample use and output might be:
155:
156: .RS
157: .nf
158: [yak 71]% traceroute nis.nsf.net.
159: traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet
160: 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms
161: 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
162: 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
163: 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms
164: 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms
165: 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms
166: 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms
167: 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms
168: 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms
169: 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms
170: 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms
171: .fi
172: .RE
173:
174: Note that lines 2 & 3 are the same. This is due to a buggy
175: kernel on the 2nd hop system \- lbl-csam.arpa \- that forwards
176: packets with a zero ttl (a bug in the distributed version
177: of 4.3BSD). Note that you have to guess what path
178: the packets are taking cross-country since the NSFNet (129.140)
179: doesn't supply address-to-name translations for its NSSes.
180: .PP
181: A more interesting example is:
182:
183: .RS
184: .nf
185: [yak 72]% traceroute allspice.lcs.mit.edu.
186: traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max
187: 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
188: 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms
189: 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms
190: 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms
191: 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms
192: 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms
193: 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms
194: 8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms
195: 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms
196: 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms
197: 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms
198: 12 * * *
199: 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms
200: 14 * * *
201: 15 * * *
202: 16 * * *
203: 17 * * *
204: 18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms
205: .fi
206: .RE
207:
208: Note that the gateways 12, 14, 15, 16 & 17 hops away
209: either don't send ICMP "time exceeded" messages or send them
210: with a ttl too small to reach us. 14 \- 17 are running the
211: MIT C Gateway code that doesn't send "time exceeded"s. God
212: only knows what's going on with 12.
213: .PP
214: The silent gateway 12 in the above may be the result of a bug in
215: the 4.[23]BSD network code (and its derivatives): 4.x (x <= 3)
216: sends an unreachable message using whatever ttl remains in the
217: original datagram. Since, for gateways, the remaining ttl is
218: zero, the ICMP "time exceeded" is guaranteed to not make it back
219: to us. The behavior of this bug is slightly more interesting
220: when it appears on the destination system:
221:
222: .RS
223: .nf
224: 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
225: 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms
226: 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms
227: 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms
228: 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms
229: 6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms
230: 7 * * *
231: 8 * * *
232: 9 * * *
233: 10 * * *
234: 11 * * *
235: 12 * * *
236: 13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms !
237: .fi
238: .RE
239:
240: Notice that there are 12 "gateways" (13 is the final
241: destination) and exactly the last half of them are "missing".
242: What's really happening is that rip (a Sun-3 running Sun OS3.5)
243: is using the ttl from our arriving datagram as the ttl in its
244: ICMP reply. So, the reply will time out on the return path
245: (with no notice sent to anyone since ICMP's aren't sent for
246: ICMP's) until we probe with a ttl that's at least twice the path
247: length. I.e., rip is really only 7 hops away. A reply that
248: returns with a ttl of 1 is a clue this problem exists.
249: Traceroute prints a "!" after the time if the ttl is <= 1.
250: Since vendors ship a lot of obsolete (DEC's Ultrix, Sun 3.x) or
251: non-standard (HPUX) software, expect to see this problem
252: frequently and/or take care picking the target host of your
253: probes.
254:
255: Other possible annotations after the time are
256: .BR !H ,
257: .BR !N ,
258: .B !P
259: (got a host, network or protocol unreachable, respectively),
260: .B !S
261: or
262: .B !F
263: (source route failed or fragmentation needed \- neither of these should
264: ever occur and the associated gateway is busted if you see one). If
265: almost all the probes result in some kind of unreachable, traceroute
266: will give up and exit.
267: .PP
268: This program is intended for use in network testing, measurement
269: and management.
270: It should be used primarily for manual fault isolation.
271: Because of the load it could impose on the network, it is unwise to use
272: .I traceroute
273: during normal operations or from automated scripts.
274: .SH AUTHOR
275: Implemented by Van Jacobson from a suggestion by Steve Deering. Debugged
276: by a cast of thousands with particularly cogent suggestions or fixes from
277: C. Philip Wood, Tim Seaver and Ken Adelman.
278: .SH SEE ALSO
279: netstat(1), ping(8)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.