reports certain network interface statistics much like
does for system statistics. Statistics include bandwidth being used,
number of packets, average packet size, and much more.
Network information is collected either by reading data from
or by directly monitoring the network interface
The default action for
is to automatically search for an appropriate
interface, and to show current statistics on it.
is the sample interval, in seconds, in which the statistics are based upon
and when in default mode, how often the display is updated. If -1 is
given, then the interval is taken to be the entire length of the sample.
Default is 5 seconds.
When reading data from
will exit immediately after the entire file has been processed. When
collecting data from
will keep running unless the
option had been specified.
The options are as follows:
Accounting mode. Displays the estimated number of bytes per second,
minute, hour, day, and month.
Displays the total number of seconds the
and the percentage of total time this was,
as if the interface were limited to
bits per second. See the
section below to see how the
affects bandwidth calculation.
"Dumb" bandwidth mode. Displays the total number of seconds the
and the percentage of total time this was. See the
section below to see difference between "dumb" and normal
Suppresses the display of empty intervals.
Flush all output streams after printing each interval. Sometimes useful
when redirecting output into a file, or piping tcpstat into another
-f filter expr
Filter the packets according the rules given by
For the syntax of these rules, see
The argument must be quoted if it contains spaces in order to separate it
from other options.
-h , -
Display version and a brief help message.
Do a live capture (rather than read from a file) on the interface
given on the command line. If
is "auto" then
tries to find an appropriate one by itself.
Include the size of the link-layer header when calculating statistics.
(Ethernet only, right now. Usually 14 bytes per packet.)
Set the interface into non-promiscuous mode (promiscuous
is the default) when doing live captures.
Set the output format when displaying statistics. See the
Sx OUTPUT FORMAT
section below for a description of the syntax.
Show the timestamp relative to
Avoid this option, because it will most likely go away in future versions.
Read all data from
which may be a regular file, a named pipe or "-" to read it's data from
standard input. Acceptable file formats include pcap
files) and "snoop" format files.
is usually a file created by the
command using the "-w" option.
When monitoring an interface,
runs for only
seconds, and then quits. When reading from a data file,
prints statistics for
seconds relative to the first packet seen.
string is any quoted string, and
will write this string to the stdout. In addition,
will substitute certain values for substrings which begin with a "%", as
well as most standard
"\" escape characters. Here is a list of all substitution strings:
the number of ARP packets
the average packet size in bytes
the number of bytes per second
the number of bits per second
the number of ICMP and ICMPv6 packets
the standard deviation of the size of each packet in bytes
the number of IPv4 packets
the network "load" over the last minute, similar to
the maximum packet size in bytes
the minimum packet size in bytes
the number of bytes
the number of packets
the number of packets per second
same as %S, but relative to the first packet seen
same as %s, but relative to the first packet seen
the timestamp for the interval in seconds after the "UNIX epoch"
the timestamp for the interval in seconds.microseconds after the "UNIX epoch"
the number of TCP packets
the number of UDP packets
the number of IPv6 packets
switch the output to the file descriptor
at this point in the string. All output for each interval before this
parameter is by default the standard output (file descriptor 1). Useful
when redirecting the output into more than one file (or fifo) for separate
statistics. Be sure you know where they are going. Writing to "dangling"
file descriptors (without directing them to a specific destination) may
produce unexpected results.
the "%" character
which will produce an output which would look similar to:
It is worth noting for example, that many of the protocol filters (%T, %U,
etc.) may be seen as being redundant because protocols can be filtered
Upon receiving a SIGINT,
will print any remaining statistics, and then exit.
Upon receiving a SIGUSR1 when printing intervals,
will print the current statistics immediately. This can be useful
when using an interval length of "-1" to print statistics on demand.
the packet filter device
tcpstat -i fxp0
Displays the default statistics every 5 seconds of all traffic currently
passing through the fxp0 network interface.
tcpstat -r file.dump
Displays the default statistics every 5 seconds from the
generated file "file.dump".
Due to the nature of how bandwidth is actually measured (from discrete
samples of data), the bandwidth numbers displayed will vary according to the
variable. Generally speaking, if you often have rapid bursts of packet data,
the bandwidth reported will not reflect this when
is sufficiently large. This results in an "averaging" effect, which may or
may not be desired. On the other hand, if
is too small (say < 0.01), this results in unrealisticaly large
bandwidths for very short amounts of time.
The reason for the latter is that most network interfaces do not hand over
packets bit by bit, but rather packet by packet. Thus, each packet is
reported as being tranfered "instantaneously", resulting in "infinite" (or
rather indeterminable) bandwidth. Thus, when counting single bits on the
wire, there really is no such thing as "bandwidth" because they aren't
really moving from the network stack's point of view (cf. Zeno's Paradox.)
A possible solution is to internaly spline the packet sizes together and
report the bandwidth as the scalar integral over the given interval, but
this has yet to be implimented, and to be honest, would be the proverbial
cruise missle to destroy an ant hill.
That being said (whew!), a "good value" for
is usualy somewhere between 0.5 and 2.
Difference between normal and 'dumb' bandwidth modes.
In normal bandwidth mode, when an interval exceeds the given bandwidth,
the extra bytes are "moved" into the next interval. This has the effect
of trying to imagine how overloaded an interface would be if the interface
had a smaller bandwidth, yet same amount of data tried to get through.
In "dumb" bandwidth mode, each interval which exceeds the given bandwidth
is simply counted. Nothin' else.
was first written in Winter 1998 using
Fx 3.0 ,
and then finaly retrofited for Linux in Spring 2000.
Due to a bug in libpcap, tcpstat will hang indefinately under Linux
when no packets arrive. This is because the timeout in pcap_open_live()
is ignored under Linux when the interface is idle, which causes pcap_dispatch()
to never return.
Not tested with link types other than Ethernet, PPP, and "None" types.
There may be problems reading non-IPv4 packets across platforms when
reading null type link layers. This is due to a lack of a standardized
packet type descriptor in libpcap for this link type.
Snoop file formats cannot be read from stdin or named pipes.