http://linux.die.net/man/8/nuttcp
nuttcp - network performance measurement tool
nuttcp -h
nuttcp -V
nuttcp -t [ -bdDsuv ] [ -cdscp_value ] [ -lbuffer_len ] [ -nnum_bufs ]
nuttcp is a network performance measurement tool intended for use by network and system managers. Its most basic usage is to determine the raw TCP (or UDP) network layer throughput by transferring memory buffers from a source system across an interconnecting network to a destination system, either transferring data for a specified time interval, or alternatively transferring a specified number of buffers. In addition to reporting the achieved network throughput in Mbps, nuttcp also provides additional useful information related to the data transfer such as user, system, and wall-clock time, transmitter and receiver CPU utilization, and loss percentage (for UDP transfers).
nuttcp is based on nttcp, which in turn was an enhancement by someone at Silicon Graphics (SGI) on the original ttcp, which was written by Mike Muuss at BRL sometime before December 1984, to compare the performance of TCP stacks by U.C. Berkeley and BBN to help DARPA decide which version to place in the first BSD Unix release. nuttcp has several useful features beyond those of the basic ttcp/nttcp, such as a server mode, rate limiting, multiple parallel streams, and timer based usage. nuttcp is also continuing to evolve to meet new requirements that arise and to add desired new features. nuttcp has been successfully tested and used on a variety of Solaris, SGI, and PPC/X86 Linux systems, and should probably work fine on most flavors of Unix.
There are two basic modes of operation for nuttcp. The original or classic mode is the transmitter/receiver mode, which is also the way the original ttcp and nttcp worked. In this mode, a receiver is first initiated on the destination host using "nuttcp -r", and then a transmitter must be started on the source host using "nuttcp -t". This mode is somewhat deprecated and is no longer recommended for general use. The preferred and recommended mode of operation for nuttcp is the new client/server mode. With this mode, a server is first started on one system using "nuttcp -S" (or "nuttcp -1"), and then a client may either transmit data to (using "nuttcp -t") or receive data from (using "nuttcp -r") the server system. All the information provided by nuttcp is reported by the client, including the information from the server, thus providing a full snapshot of both the transmitter and receiver ends of the data transfer.
The server may be started by a normal, non-privileged user by issuing either a "nuttcp -S" or a "nuttcp -1" command. However, the optimal and recommended method of running a server is to run "nuttcp -S" via the inetd/xinetd daemon. This method has several significant advantages, including being more robust, allowing multiple simultaneous connections, and providing for access control over who is allowed to use the nuttcp server via the hosts.allow (and hosts.deny) file. By default, the nuttcp server listens for commands on port 5000, and the actual nuttcp data transfers take place on port 5001.
The host parameter must be specified for the transmitter, and provides the host name or IP address of the receiver. In classic transmitter/receiver mode, the host parameter may not be specified for the receiver. In client/server mode, when the client is the receiver, the host parameter specifies the host name or IP address of the transmitter (server).
Normally, a nuttcp data transfer is memory-to-memory. However, by using the "-s" option, it is possible to also perform memory-to-disk, disk-to-memory, and disk-to-disk data transfers. Using the "-s" option with the transmitter will cause nuttcp to read its data from the standard input instead of using a prefabricated memory buffer, while using the "-s" option on the receiver causes nuttcp to write its data to standard output. All these types of data transfers are possible with the classic transmitter/receiver mode. For security reasons, the "-s" option is disabled on the server, so it is not possible to access the disk on the server side of a data transfer.
The allowed options to nuttcp are:
Print out a usage statement. Running nuttcp with no arguments will also produce a usage statement.
-V
Prints the nuttcp version number. The nuttcp version is also printed as part of the normal nuttcp output when the "-v" verbose output is used (but not when using the default brief output). In client/server mode, the version number of both the client and server is identified.
-t
Indicates that this nuttcp is the transmitter. In client/server mode, this means the server specified by the host parameter is the receiver.
-r
Indicates that this nuttcp is the receiver. In client/server mode, this means the server specified by the host parameter is the transmitter.
-S
Indicates that this nuttcp is the server. The only option that may be specified to the server is the "-P" option, which allows one to change the control port used by the server, but only when the server is started by a normal, non-privileged user. When the server is initiated by inetd/xinetd, the server control port should be specified in the services file.
-1
Basically the same as the "-S" option, but indicates a one-shot server, i.e. the server exits after the first data transfer initiated by a client. The "-1" option should only be used when the server is started by a normal, non-privileged user. This option will probably rarely need to be used, but can be useful for a quick test and eliminates the possibilty of leaving a non-access controlled nuttcp server running on the system (which can happen when using the "-S" option and forgetting to kill the nuttcp server after finishing a series of tests).
-b
Produce brief one-line output, which includes the amount of data transferred in MB (1024**2 bytes), the time interval in seconds, the TCP (or UDP) network throughput in Mbps (millions of bits per second), the transmitter and/or receiver CPU utilization, and for UDP data transfers also outputs the loss percentage. In client/server mode, most of the printed statistics are from the viewpoint of the receiver. This is the default output format.
-B
This option is only valid for the receiver, and forces the receiver to read a full buffer (as specified by the "-l" buffer length option) from the network. It is mainly intended to be used with the "-s" option to only output full buffers to standard output (e.g. for use with tar). It is also implicitly set whenever the number of streams as specified by the "-N" option is greater than 1. This option is not passed to the server.
-d
For TCP data transfers, sets the SO_DEBUG option on the data socket. This option is not passed to the server. It is a rarely used option which may possibly be removed or renamed in a future version of nuttcp.
-D
This option is only valid for the transmitter, and only for TCP data transfers, in which case it sets the TCP_NODELAY option on the data socket, which turns off the Nagle algorithm causing data packets to be sent as soon as possible without introducing any unnecessary delays. This option is not passed to the server. It is a rarely used option which may possibly be removed or renamed in a future version of nuttcp.
-s
Setting the "-s" option causes nuttcp to either read its data from standard input rather than using prefabricated memory buffers (for "nuttcp -t"), or to write its data out to standard output (for "nuttcp -r"). The "-s" option is disabled for security reasons on the server.
-u
Use UDP for the data transfer instead of the default of TCP.
-v
Verbose output that provides some additional information related to the data transfer. In client/server mode, the server is always verbose (implicit "-v" option), but the client controls the extent and type of output via the "-v" and "-b" options.
Normally, to conserve memory, the transmitter only sets the TCP send socket buffer size and the receiver only sets the TCP receive socket buffer size. However, if the "-wb" option is used, the transmitter will also set the TCP receive socket buffer size and the receiver will also set the TCP send socket buffer size. Under normal circumstances, this should never be necessary. This option was implemented because certain early braindead Solaris 2.8 systems would not properly set the TCP window size unless both the TCP send and receive socket buffer sizes were set (later Solaris 2.8 systems have corrected this deficiency). Thus the 'b' in this option can stand either for "braindead" or "both".
Under Construction
For now, consult the README file for basic usage guidelines.
Under Construction
For now, see the examples.txt file for some examples of using nuttcp.
ping(8), traceroute(8), tracepath(8), pathchar(8), netstat(1), mtrace(8)
Developed by Bill Fink based on nttcp which in turn was an enhancement of the original ttcp developed by Mike Muuss at BRL. IPv6 capability and some other fixes and enhancements contributed by Rob Scott. Many useful suggestions and testing performed by Phil Dykstra and others.
The current version is available via anonymous ftp from:
Please send bug reports to [email protected].