tcpdump(1M) tcpdump(1M)
NAME
tcpdump - dump traffic on a network
SYNOPSIS
tcpdump [-deflmnNOpqStvx] [-c count] [-F File] [-i interface]
[-r file]
DESCRIPTION
tcpdump initiates a mode (promiscuous mode) of network interfaces to
allow reading all packets from the network. Then tcpdump filters out
the packets that match the value of expression, and outputs the infor-
mation.
To call tcpdump you must have root privileges.
This command should only be used by experienced system administrators
for diagnostic purposes.
OPTIONS
-c count
Exit after receiving count packets.
-d Dump the compiled packet-matching code to standard output and
stop.
-e Output the link-level header on each dump line. In a token ring
network, output the source routing information also.
-f Output foreign (remote) Internet addresses numerically rather
than symbolically.
-F File
Use File as input for the filter expression. An additional
expression given on the command line is ignored.
-i interface
Listen on interface. If this argument is omitted, tcpdump
searches the system interface list for the lowest numbered, con-
figured interface (excluding loopback).
-l Make stdout line-buffered. This argument is useful if you want to
see the data while capturing it.
Examples:
tcpdump -l | tee ofile
tcpdump -l > dat & tail -f ofile
-m Put the interface into "multicast promiscuous mode". This is
necessary to listen to all multicast packets.
Page 1 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
-n Do not convert addresses (i.e., host addresses, port numbers,
etc.) to names.
-N Do not output domain name qualification of host names. Thus if
you specify this flag, tcpdump will output nic instead of
nic.ddn.mil.
-O Do not run the packet-matching code optimizer. This is useful
only if you suspect a bug in the optimizer.
-p Do not put the interface into "promiscuous mode". Note that the
interface might be in promiscuous mode for some other reason.
-q Quick output. Output less protocol information.
-r file
Read packets from file (which was created with the -w option).
Standard input is used if file is -.
-s snaplen
Read snaplen bytes of data from each packet rather than the
default of 68 (with NIT, the minimum is 96). 68 bytes is adequate
for IP, ICMP, TCP and UDP but may truncate protocol information
from name server and NFS packets (see below). Packets truncated
because of a limited snapshot are indicated in the output with
[proto], where proto is the name of the protocol level at which
the truncation has occurred.
Note that taking larger snapshots both increases the amount of
time it takes to process packets and, effectively, decreases the
amount of packet buffering. This may cause packets to be lost.
You should therefore limit snaplen to the smallest number that
will capture the protocol information you are interested in.
-S Output absolute, rather than relative, TCP sequence numbers.
-t Do not output a timestamp on each dump line.
-tt Output an unformatted timestamp on each dump line.
-v (Slightly more) verbose output. For example, the time-to-live and
type of service information in an IP packet are output.
-w file
Write the raw packets to file rather than parsing and outputting
them. They can later be output with the -r option. Standard out-
put is used if file is -. Note that only the amount of bytes
given with -s snaplen is available per packet for later analysis
using the -r option.
-x Output each packet (minus its link-level header) in hex. The
smaller of the entire packet or snaplen bytes will be output.
Page 2 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
-A ULLCno
Attachment unit relative to the ULLC (Universal Link Level Con-
troller). The unit number (default 0) is augmented for each board
linked under the ULLC.
expression
Selects which packets will be dumped. If no expression is given,
all packets on the net will be dumped. Otherwise, only packets
for which expression is true will be dumped.
The expression consists of one or more primitives. Primitives
usually consist of an id (name or number) preceded by one or more
qualifiers. There are three different kinds of qualifier:
type indicates what kind of thing the ID name or number refers
to. Possible types are host, net and port. For example,
host foo, net 128.3, port 20. If there is no type qualif-
ier, host is assumed.
dir specifies a particular transfer direction to and/or from
id. Possible directions are src, dst, src or dst and src
and dst. For example, src foo, dst net 128.3, src or dst
port ftp-data. If there is no dir qualifier, src or dst is
assumed.
proto restricts the match to a particular protocol. Possible
protos are: ether, ip, arp, rarp, tcp and udp. For exam-
ple, ether src foo, arp net 128.3, tcp port 21). If there
is no proto qualifier, all protocols consistent with the
type are assumed.
Example:
src foo means (ip or arp or rarp) src foo (except the
latter is not legal syntax), net bar means (ip or arp or
rarp) net bar and port 53 means (tcp or udp) port 53.
In addition to the above, there are some special primitive keywords
that do not follow the pattern: gateway, broadcast, less, greater and
arithmetic expressions. All of these are described below.
Page 3 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
More complex filter expressions are built up by using the words and,
or and not to combine primitives (e.g. host foo and not port ftp and
not port ftp-data). To save typing, identical qualifier lists need
only be specified once.
Example:
tcp dst port ftp or ftp-data or domain
is exactly the same as
tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain.
Legal primitives
dst host host
True if the IP destination field of the packet is host, which may
be either an address or a name.
src host host
True if the IP source field of the packet is host.
host host
True if either the IP source or destination of the packet is
host. Any of the above host expressions can be preceded by the
keywords, ip, arp, or rarp (e.g. ip host host, which is
equivalent to ether proto \ip and host host). If host is a name
with multiple IP addresses, each address will be checked for a
match.
ether dst ehost
True if the Ethernet destination address is ehost. ehost may be
either a name from /etc/ethers or a number.
ether src ehost
True if the Ethernet source address is ehost.
ether host ehost
True if either the Ethernet source or destination address is
ehost.
gateway host
True if the packet used host as a gateway, i.e. the Ethernet
source or destination address was host but neither the IP source
nor the IP destination was host. host must be a name and must be
found in both /etc/hosts and /etc/ethers. (An equivalent expres-
sion is ether host ehost and not host host which can be used with
either names or numbers for host/ehost.)
dst net net
True if the IP destination address of the packet has a network
number of net, which may be either an address or a name.
Page 4 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
src net net
True if the IP source address of the packet has a network number
of net.
net net
True if either the IP source or destination address of the packet
has a network number of net.
dst port port
True if the packet is ip/tcp or ip/udp and has a destination port
value of port. The port can be a number or a name used in
/etc/inet/services. If a name is used, both the port number and
the protocol are checked. If a number or a non-unique name is
used, only the port number is checked (e.g. dst port 513 will
output both tcp/login traffic and udp/who traffic, and port
domain will output both tcp/domain and udp/domain traffic).
src port port
True if the packet has a source port value of port.
port port
True if either the source or destination port of the packet is
port. Any of the above port expressions can be preceded by the
keywords tcp or udp. (For example, tcp src port port matches only
tcp packets.
less length
True if the packet has a length less than or equal to length.
This is equivalent to:
len <= length.
greater length
True if the packet has a length greater than or equal to length.
This is equivalent to:
len >= length.
ip proto protocol
True if the packet is an ip packet [see ip(7)] of protocol type
protocol. protocol can be a number or one of the names icmp, udp,
nd, or tcp. Note that the identifiers tcp, udp, and icmp are also
keywords and must be escaped with a backslash (\), which is \\ in
the C shell and Korn shell.
broadcast
True if the packet is a broadcast packet.
ether multicast
True if the packet is a LAN (ethernet, fddi, etc.) multicast
packet. The ether keyword is optional. This is shorthand for
"ether[0] & 1 != 0".
Page 5 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
ip multicast
True if the packet is an IP multicast packet.
ether proto protocol
True if the packet is of ether type protocol. protocol can be a
number or a name like ip, arp, or rarp. Note these identifiers
are also keywords and must be escaped with a backslash (\).
ip, arp, rarp
Abbreviations for ether proto p, where p is one of the above pro-
tocols.
tcp, udp, icmp
Abbreviations for ip proto p, where p is one of the above proto-
cols.
expr relop expr
True if the relation holds, where relop is one of >, <, >=, <=,
=, !=, and expr is an arithmetic expression composed of integer
constants (expressed in standard C syntax), the normal binary
operators [+, -, *, /, &, |], a length operator, and special
packet data access functions. To access data inside the packet,
use the following syntax:
proto [expr: size]
proto is one of ether, ip, arp, rarp, tcp, udp, or icmp and indi-
cates the protocol layer for the index operation. The byte
offset, relative to the indicated protocol layer, is given by
expr.
size is optional and indicates the number of bytes in the field
of interest (1, 2 or 4; default = 1). The length operator (indi-
cated by the keyword len) gives the length of the packet.
For example, ether[0] & 1 != 0 catches all multicast traffic. The
expression ip[0] & 0xf != 5 catches all IP packets with options.
The expression ip[2:2] & 0x1fff = 0 catches only unfragmented
datagrams and fragment zero of fragmented datagrams. This check
is implicitly applied to the tcp and udp index operations. For
instance, tcp[0] always means the first byte of the TCP header,
and never means the first byte of an intervening fragment.
Page 6 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
Primitives may be combined using:
- a parenthesized group of primitives and operators (parentheses are
shell metacharacters and must be escaped).
- negation (! or not)
- concatenation (and)
- alternation (or).
Negation has highest precedence. Alternation and concatenation have
equal precedence and associate left to right. Note that explicit and
tokens, not juxtaposition, are now required for concatenation.
If an identifier is given without a keyword, the most recent keyword
is assumed. For example, not host vs and ace is short for not host vs
and host ace which should not be confused with not (host vs or ace).
Expression arguments can be passed to tcpdump as either a single argu-
ment or as multiple arguments, whichever is more convenient. Gen-
erally, if the expression contains shell metacharacters, it is easier
to pass it as a single, quoted argument. Multiple arguments are con-
catenated with spaces before being parsed.
EXAMPLES
To output all packets arriving at or departing from sundown:
tcpdump host sundown
To output traffic between helios and either hot or ace:
tcpdump host helios and \(hot or ace \)
To output all IP packets between ace and any host except helios:
tcpdump ip host ace and not helios
To output all ftp traffic through Internet gateway snup (note that the
expression is quoted to prevent the shell from (mis-)interpreting the
parentheses):
tcpdump 'gateway snup and (port ftp or ftp-data)'
To output traffic neither sourced from nor destined for local hosts
(if you gateway to one other net, none of this data should ever make
it onto your local net).
tcpdump ip and not net localnet
To output the start and end packets (the SYN and FIN packets) of each
TCP conversation that involves a non-local host.
Page 7 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
tcpdump 'tcp[13] & 3!= 0 and not src and dst net localnet'
To output IP packets longer than 576 bytes sent through gateway snup:
tcpdump 'gateway snup and ip[2:2]> 576'
To output IP broadcast or multicast packets that were not sent via
Ethernet broadcast or multicast:
tcpdump 'ether[0] & 1 = 0 and ip[16]>= 224'
To output all ICMP packets that are not echo requests/replies (i.e.,
not ping packets):
tcpdump 'icmp[0]!= 8 and icmp[0]!= 0'
Output from tcpdump
The output of tcpdump is protocol-dependent. The following gives a
brief description and examples of most of the formats.
Link-level headers
If the -e option is given, the link-level header is output. On Ether-
nets, the source and destination addresses, protocol, and packet
length are output.
The following description assumes familiarity with the SLIP compres-
sion algorithm described in RFC-1144.
On SLIP links, a direction indicator (I for inbound, O for outbound),
packet type, and compression information are output. The packet type
is output first. The three types are ip, utcp, and ctcp. No further
link information is output for ip packets. For TCP packets, the con-
nection identifier is output following the type.
If the packet is compressed, its encoded header is output. The special
cases are output as *S+n and *SA+n, where n is the amount by which the
sequence number (or sequence number and ack has changed. If it is not
a special case, zero or more changes are output. A change is indicated
by U (urgent pointer), W (window), A (acknowledgment), S (sequence
number), and I (packet ID), followed by a delta (+n or -n), or a new
value (=n). Finally, the amount of data in the packet and the
compressed header length are output.
For example, the following line shows an outbound compressed TCP
packet, with an implicit connection identifier; the acknowledgment has
changed by 6, the sequence number by 49, and the packet ID by 6; there
are 3 bytes of data and 6 bytes of compressed header:
O ctcp * A+6 S+49 I+6 3 (6)
Page 8 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
Note: With Reliant UNIX SLIP interfaces for tcpdump are not supported.
ARP/RARP packets
ARP/RARP output shows the type of request and its arguments. The for-
mat is intended to be self-explanatory. Here is a short sample taken
from the start of an rlogin from host rtsg to host csam:
arp who-has csam tell rtsg
arp reply csam is-at CSAM
The first line means that rtsg sent an arp packet asking for the Eth-
ernet address of Internet host csam. csam replies with its Ethernet
address (in this example, Ethernet addresses are in caps and Internet
addresses in lower case).
If you use tcpdump -n, addresses are shown numerically:
arp who-has 128.3.254.6 tell 128.3.254.68
arp reply 128.3.254.6 is-at 02:07:01:00:01:c4
If tcpdump -e had been used, the fact that the first packet is broad-
cast and the second is point-to-point would be visible:
RTSG Broadcast 0806 64: arp who-has csam tell rtsg
CSAM RTSG 0806 64: arp reply csam is-at CSAM
For the first packet this means the Ethernet source address is RTSG,
the destination is the broadcast address, the type field contained hex
0806 (type ETHERARP) and the total length was 64 bytes.
TCP packets
The following description assumes familiarity with the TCP protocol
described in RFC-793.
The general format of a tcp protocol line is:
src> dst: flags data-seqno ack window urgent options
src and dst are the source and destination IP addresses and ports.
flags are some combination of S (SYN), F (FIN), P (PUSH) or R (RST) or
a single "." (no flags).
data-seqno describes the portion of sequence space covered by the data
in this packet (see example below).
Page 9 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
ack is the sequence number of the next data expected in the other
direction on this connection.
window is the number of bytes of receive buffer space available in the
other direction on this connection.
urg indicates there is urgent data in the packet.
options are tcp options enclosed in angle brackets (e.g., <mss 1024>).
src, dst and flags are always present. The other fields depend on the
contents of the packet's tcp protocol header and are output only if
appropriate.
Here is the opening portion of an rlogin from host rtsg to host csam.
rtsg.1023> csam.login: S 768512:768512(0) win 4096 <mss 1024>
csam.login> rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024>
rtsg.1023> csam.login:. ack 1 win 4096
rtsg.1023> csam.login: P 1:2(1) ack 1 win 4096
csam.login> rtsg.1023:. ack 2 win 4096
rtsg.1023> csam.login: P 2:21(19) ack 1 win 4096
csam.login> rtsg.1023: P 1:2(1) ack 21 win 4077
csam.login> rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1
csam.login> rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1
The first line means that tcp port 1023 on rtsg sent a packet to port
login on csam. The S indicates that the SYN flag was set. The packet
sequence number was 768512 and it contained no data. (The notation is
"first:last(nbytes)" which means sequence numbers first up to but not
including last, which is nbytes bytes of user data.) There was no
piggy-backed ack, the available receive window was 4096 bytes and
there was a max-segment-size option requesting an mss of 1024 bytes.
csam replies with a similar packet except it includes a piggy-backed
ack for rtsg's SYN. rtsg then acknowledges csam's SYN. The "." means
no flags were set. The packet contained no data so there is no data
sequence number. Note that the acknowledgment sequence number is a
small integer (1). The first time tcpdump sees a tcp conversation, it
outputs the sequence number from the packet. On subsequent packets of
the conversation, the difference between the current packet's sequence
number and this initial sequence number is output. This means that
sequence numbers after the first can be interpreted as relative byte
positions in the conversation's data stream (with the first data byte
Page 10 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
each direction being 1). -S will override this feature, causing the
original sequence numbers to be output.
On the 6th line, rtsg sends csam 19 bytes of data (bytes 2 through 20
in the rtsg. The PUSH flag is set in the packet. On the 7th line, csam
says it has received data sent by rtsg up to but not including byte
21. Most of this data is apparently sitting in the socket buffer since
csam's receive window has been reduced by 19 bytes. csam also sends
one byte of data to rtsg in this packet. On the 8th and 9th lines,
csam sends two bytes of urgent, pushed data to rtsg.
UDP packets
UDP format is illustrated by this rwho packet:
actinide.who> broadcast.who: udp 84
This line means that port who on host actinide sent a udp datagram to
port who on host broadcast (the Internet broadcast address). The
packet contained 84 bytes of user data.
Some UDP services are recognized (from the source or destination port
number) and the higher-level protocol information output. In particu-
lar, this applies to Domain Name service requests (RFC-1034/1035) and
Sun RPC calls (RFC-1050) to NFS.
UDP name server requests
The following description assumes familiarity with the Domain Service
protocol described in RFC-1035.
Name server requests are formatted as follows:
src> dst: id op? flags qtype qclass name (len)
h2opolo.1538> helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
Host h2opolo asked the domain server on helios for an address record
(qtype=A) associated with the name ucbvax.berkeley.edu. The query ID
was 3. The + indicates the recursion desired flag was set. The query
length was 37 bytes, not including the UDP and IP protocol headers.
The query operation was the normal one, Query, so the op field was
omitted. If the op had been anything else, it would have been output
between the 3 and the +. Similarly, the qclass was the normal one,
CIN, and was thus omitted. Any other qclass would have been output
immediately after the A.
A few anomalies are checked and may result in extra fields enclosed in
square brackets: If a query contains an answer, name server or author-
ity section, ancount, nscount or arcount are output as [na], [nn] or
[nau] where n is the appropriate count. If any of the response bits
are set (AA, RA or rcode) or any of the must be zero bits are set in
Page 11 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
bytes two and three, [b2&3=x] is output, where x is the hex value of
header bytes two and three.
UDP name server responses
Name server responses are formatted as follows:
src> dst: id op rcode flags a/n/au type class data (len)
helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)
helios.domain> h2opolo.1537: 2 NXDomain* 0/1/0 (97)
In the first example, helios responds to query ID 3 from h2opolo with
3 answer records, 3 name server records and 7 authority records. The
first answer record is type A (address) and its data is Internet
address 128.32.137.3. The total size of the response was 273 bytes,
excluding UDP and IP headers. The op (Query) and response code
(NoError) were omitted, as was the class (CIN) of the A record.
In the second example, helios responds to query 2 with a response code
of non-existent domain (NXDomain) with no answers, one name server and
no authority records. The * indicates that the authoritative answer
bit was set. Since there were no answers, no type, class or data were
output.
Other flag characters that might appear are - (recursion available,
RA, not set) and | (truncated message, TC, set). If the question sec-
tion does not contain exactly one entry, [nq] is output.
Note that name server requests and responses tend to be large and the
default snaplen of 96 bytes may not capture enough of the packet to
output. Use the -s flag to increase the snaplen if you need to seri-
ously investigate name server traffic. -s 128 is a useful setting.
NFS requirements
NFS operations and acknowledgments are issued in the following format:
src.xid > dst.nfs: op args
src.nfs > dst.xid: reply op rslt
Please note that the specified data depends on the type of NFS opera-
tion. The format is self-explanatory if it is read together with an
NFS protocol specification. NFS versions 2 (RFC1094) and 3 (RFC1813)
are supported.
Page 12 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
Example:
orion.1dfc1 > saturn.nfs: getattr3 fhlen 32 (4,5 / 66076)
saturn.nfs > orion.1dfc1: reply getattr3 DIR 40777 ids 0/1 sz 18432
orion.1dfec > saturn.nfs: lookup3 fhlen 32 (4,5 / 66076) "RCS"
saturn.nfs > orion.1dfec: reply lookup3 fhlen 32 (4,5 / 68577)
In the first line, the orion client machine sends the RPC call with
the 1dfc1 handle to saturn. Please note that the number following the
name of the sender machine is an RCP handle and not the sender port.
The operation is a getattr3 ("get attributes" in NFS version 3) for
the file with the device number 4,5 and the Inode 66076. The total
length of the NFS file handle is 32 bytes. The saturn server responds
with the file attributes. The attributes shown here refer to the file
type (DIR), the access rights (octal 40777), the user and group ID of
the owner (0/1) and the size of the file (18432 bytes).
In the third line, orion requests the saturn server to search for the
name RCS in the directory with the device number 4,5 and Inode 66076.
The saturn server responds with the handle for the file in question;
device number 4,5 and Inode number 68577.
The MNT (mount protocol) for the NFS protocol and the NLM (Network
lock manager protocol) packets are output in a comparable format.
Please note that NFS operations are very large and the above output is
only created after increasing snaplen. -s 256 was used in the example
to monitor the NFS data traffic.
KIP Appletalk (DDP in UDP)
Appletalk DDP packets encapsulated in UDP datagrams are de-encapsu-
lated and dumped as DDP packets (i.e., all the UDP header information
is discarded). The file /etc/atalk.names is used to translate
Appletalk net and node numbers to names.
Lines in this file have the form
Number Name
____________________
1.254 ether
16.1 icsd-net
1.254.110 ace
The first two lines give the names of Appletalk networks. The third
line gives the name of a particular host (a host is distinguished from
a net by the 3rd octet in the number - a net number must have two
octets and a host number must have three octets.) The number and name
Page 13 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
should be separated by whitespace (blanks or tabs). The
/etc/atalk.names file may contain blank lines or comment lines (lines
starting with a #).
Appletalk addresses are output in the form
net.host.port
144.1.209.2> icsd-net.112.220
office.2> icsd-net.112.220
jssmag.149.235> icsd-net.2
(If /etc/atalk.names does not exist or does not contain an entry for
some Appletalk host/net number, addresses are output in numeric form.)
In the first example, NBP (DDP port 2) on net 144.1 node 209 is send-
ing to whatever is listening on port 220 of net icsd node 112. The
second line is the same except that the full name of the source node
is known (office). The third line is a send from port 235 on net
jssmag node 149 to broadcast on the icsd net NBP port (note that the
broadcast address (255) is indicated by a net name with no host number
- for this reason it is a good idea to keep node names and net names
distinct in /etc/atalk.names).
NBP (Name Binding Protocol) and ATP (Appletalk Transaction Protocol)
packets have their contents interpreted. Other protocols just dump the
protocol name (or number if no name is registered for the protocol)
and packet size.
NBP packets are formatted as in the following examples:
icsd-net.112.220> jssmag.2: nbp-lkup 190: "=:LaserWriter@*"
jssmag.209.2> icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250
techpit.2> icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186
The first line is a name lookup request for laserwriters sent by net
icsd host 112 and broadcast on net jssmag. The nbp ID for the lookup
is 190. The second line shows a reply for this request (note that it
has the same ID) from host jssmag.209 saying that it has a laserwriter
resource named RM1140 registered on port 250. The third line is
another reply to the same request saying host techpit has laserwriter
techpit registered on port 186.
ATP packet formatting is demonstrated by the following example:
jssmag.209.165> helios.132: atp-req 12266<0-7> 0xae030001
helios.132> jssmag.209.165: atp-resp 12266:0 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:1 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:2 (512) 0xae040000
Page 14 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
helios.132> jssmag.209.165: atp-resp 12266:3 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:4 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:5 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:6 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp*12266:7 (512) 0xae040000
jssmag.209.165> helios.132: atp-req 12266<3,5> 0xae030001
helios.132> jssmag.209.165: atp-resp 12266:3 (512) 0xae040000
helios.132> jssmag.209.165: atp-resp 12266:5 (512) 0xae040000
jssmag.209.165> helios.132: atp-rel 12266<0-7> 0xae030001
jssmag.209.133> helios.132: atp-req* 12267<0-7> 0xae030002
jssmag.209 initiates transaction ID 12266 with host helios by request-
ing up to 8 packets (the <0-7>). The hex number at the end of the line
is the value of the userdata field in the request.
helios responds with 8 512-byte packets. The :digit following the
transaction ID gives the packet sequence number in the transaction and
the number in parentheses is the amount of data in the packet, exclud-
ing the atp header. The * on packet 7 indicates that the EOM bit was
set.
jssmag.209 then requests that packets 3 and 5 be retransmitted. helios
resends them, then jssmag.209 releases the transaction. Finally,
jssmag.209 initiates the next request. The * on the request indicates
that XO (exactly once) was not set.
IP fragmentation
Fragmented Internet datagrams are output as follows:
(frag id:size@offset+)
(frag id:size@offset)
The first format indicates there are more fragments. The second format
indicates this is the last fragment.
id is the fragment ID (in hex). size is the fragment size (in bytes)
excluding the IP header. offset is this fragment's offset (in bytes)
in the original datagram.
The fragment information is output for each fragment. The first frag-
ment contains the higher-level protocol header and the fragment infor-
mation is output after the protocol info. Fragments after the first
contain no higher-level protocol header, and the fragment information
is output after the source and destination addresses.
For example, here is part of an ftp from arizona.edu to lbl-rtsg.arpa
over a CSNET connection that does not appear to handle 576-byte
datagrams:
Page 15 Reliant UNIX 5.44 Printed 11/98
tcpdump(1M) tcpdump(1M)
arizona.ftp-data> rtsg.1170:. 1024:1332(308) ack 1 win 4096
(frag 595a:328@0+)
arizona> rtsg: (frag 595a:204@328)
rtsg.1170> arizona.ftp-data:. ack 1536 win 2560
In this example, the addresses in the second line do not include port
numbers. This is because the TCP protocol information is all in the
first fragment and we have no idea what the port or sequence numbers
are when we output the later fragments. Second, the tcp sequence
information in the first line is output as if there were 308 bytes of
user data when, in fact, there are 512 bytes (308 in the first frag-
ment and 204 in the second). If you are looking for holes in the
sequence space or trying to match up acknowledgments with packets,
this can confuse you.
A packet with the IP don't fragment flag is marked with a trailing
(DF).
Timestamps
By default, all output lines are preceded by a timestamp. The times-
tamp is the current clock time in the following format:
hh:mm:ss.frac
and is as accurate as the kernel's clock (e.g. ±10 ms). The timestamp
reflects the time the kernel first saw the packet. No attempt is made
to account for the time lag between when the Ethernet interface
removed the packet from the wire and when the kernel serviced the new
packet interrupt.
Page 16 Reliant UNIX 5.44 Printed 11/98