Nuttcp top 5 commands: +++++++++++++++++++++++ nuttcp Good for a relatively close . This command will use the defaults which is to do a tcp transfer for 10 seconds. It will use the default window size for the hosts it is run on. It will do ipv4 if is either a v4 numeric address or is a name that resolves to a v4 address. It will do v6 if is a v6 numeric address or a name that resolves to a v6 address. [ must already have a server running] Example: [rob@damp-nrl rob]$ nuttcp damp-arl-ge 647.9830 MB / 10.01 sec = 542.9427 Mbps 9 %TX 14 %RX Note that the %TX and %RX are the cpu utilization on the transmitter and receiver. +++++++++++++++++++++++ nuttcp -w6m Good for a cross-country oc12 size link Same as above except it uses a likely much larger window size that is more appropriate for a tcp transfer with a larger bandwidth delay product. For more information on BDP and appropriate window sizing please refer to one of Phil Dykstra's DREN Conference presentations or papers. See http://sd.wareonearth.com/~phil/ [In order to utilize a 6 megabyte window both the transmit and receive systems must support that size. On some systems this requires modifying system parameters. Remember 6m is 6*1024*1024 bytes.] Example: [rob@damp-ssc rob]$ nuttcp -w6m damp-arl-ge 642.2890 MB / 10.31 sec = 522.5387 Mbps 9 %TX 5 %RX +++++++++++++++++++++++ nuttcp -u -i -Ri50m Good for checking on packet loss This nuttcp command transmits a 10 second stream of udp packets at 50Mbps. It will present interval reports once a second. The interval and final reports not only present throughput, but also packet loss. It is important to rate limit udp transfers to avoid causing network problems with your testing. If you know the bandwidth and utilization of the whole path you are testing then you can choose a different number for the rate limit. The default is to use 8192 byte buffers and this may cause undesired fragmentation. If you are still on a 1500 mtu network you should consider -l1200 to set the buffers to 1200 bytes.] Example: [rob@damp-ssc rob]$ nuttcp -u -i -Ri50m damp-asc-atm 0.3281 MB / 1.00 sec = 2.7587 Mbps 706 / 748 ~drop/pkt 94.39 ~%loss 0.3203 MB / 1.00 sec = 2.6873 Mbps 721 / 762 ~drop/pkt 94.62 ~%loss 0.2734 MB / 1.00 sec = 2.2941 Mbps 726 / 761 ~drop/pkt 95.40 ~%loss 0.2969 MB / 1.00 sec = 2.4907 Mbps 729 / 767 ~drop/pkt 95.05 ~%loss 0.2500 MB / 1.00 sec = 2.0974 Mbps 734 / 766 ~drop/pkt 95.82 ~%loss 0.2266 MB / 1.00 sec = 1.9008 Mbps 742 / 771 ~drop/pkt 96.24 ~%loss 0.2266 MB / 1.00 sec = 1.9008 Mbps 697 / 726 ~drop/pkt 96.01 ~%loss 0.2188 MB / 1.00 sec = 1.8353 Mbps 742 / 770 ~drop/pkt 96.36 ~%loss 0.2734 MB / 1.00 sec = 2.2941 Mbps 736 / 771 ~drop/pkt 95.46 ~%loss 0.2188 MB / 1.00 sec = 1.8353 Mbps 745 / 773 ~drop/pkt 96.38 ~%loss 2.6330 MB / 10.00 sec = 2.2087 Mbps 99 %TX 0 %RX 7292 / 7629 drop/pkt 95.58 %loss +++++++++++++++++++++++ nuttcp -w1m 127.0.0.1 nuttcp -w1m ::1 Good for checking a hosts internal capability Since this never goes through an actual interface it is a measure of the cpu power, memory bandwidth and tcp stack efficiency. The first one is ipv4, and the second is ipv6. If you run both it will give you a comparison of the efficiency of a host's v4 and v6 stacks. If the host is a single processor machine you can more or less double the number as the maximum it could ever perform through an actual interface. This does not test things like bus performance or nic card performance. Since this test is very dependent on system load and processor scheduling, the result will vary from test to test, so it is probably a good idea to run several to get a good measure. Example: [rob@damp-ssc rob]$ nuttcp -w1m 127.0.0.1 6340.5000 MB / 9.99 sec = 5321.5008 Mbps 68 %TX 31 %RX [rob@damp-ssc rob]$ [rob@damp-ssc rob]$ nuttcp -w1m ::1 6661.3125 MB / 10.00 sec = 5588.5398 Mbps 71 %TX 28 %RX +++++++++++++++++++++++ For any of these commands you might want to add the following options: -r runs the stream in the other direction, ie. From the server to the client -v turns on verbose reporting (the old default style) which such things as the used window size -F this flips the connect, which you don't need to understand. What you need to know is that if you are behind a NAT, or a port block, this allows you to do a receive by doing -r -F. -R[i] this limits the rate of the transmitter. This is important if you really don't want to use the maximum bandwidth that a host can produce, especially when running udp transfers. The optional extra 'i' is to have the rate limit apply instantaneously as opposed to an average which may go above and below the limit. +++++++++++++++++++++++ Running a nuttcp server: Any user on a machine can run a server by simply running the nuttcp -S command, which starts an ipv4 server. nuttcp -S -6 will start an ipv6 server which depending on the system and kernel setting may also listen on a 4to6 translation. If you get a message about address being in use you can use the -P to run the server on a different port, any client would also have to specify the same -P option to talk to it. Note that under windows port 5000 is in use and opening another server on the port does NOT give you an error, so you will always need a -P option to run a server on windows. A good example of 2 servers on 2 different ports would be: nuttcp -S nuttcp -S -6 -P5008 and the localhost client commands would be nuttcp 127.0.0.1 nuttcp -P5008 ::1 nuttcp servers automatically fork themselves into the background and run until they hit an error or are killed. For permanent availability nuttcp can be run out of inetd or xinetd, examples of which can be found on the ftp site.