Dear reader, I'm not updating these pages anymore. If you have tc or ip related questions, you can post them on the LARTC mailing list.



Traffic generators: overview

  tcpblastttcpiperf AB Linbot & wgetping(4)
TCP YES YES YES YESYES NO
UDP YES YES YES YESNO NO
ICMP NO NO NO NO NO YES
client-server (1) NO YES YES NO NO NO
Multiple streams NO YES YES YESYES NO
Full BandWidth? (2)YES YES NO (UDP:YES)NO NO NO
MTU (3) NO NO YES NO NO NO

(1): ttcp and iperf are server/client programs. So you have to start on 1 PC the server and anther PC can act as client and connects to the server and send the data.

(2): tcpblast, ttcp and iperf (TCP) are sending as much data they can. When iperf sends UDP you can specify a rate. AB and Linbot are querying a web-server so they generate as much as the webserver can deliver and as much the scripts can proces.

(3): With iperf you can specify the TCP maximum segment wich is MTU - 40bytes. You can also specify the TCP window size.

(4): You can start several pings in the background to generate the rate you want or you can specify the -f parameter to flood the destination host.

tcpblast

local copy: I found this little program in the contrib area of MRTG (Multi Router Traffic Grapher).

# ./tcpblast --help
 
 usage: ./tcpblast [options] destination nblocks
  
  tcpblast/udpblast is a simple tool for probing network and estimating its
  through output. It sends nblocks of 1024 B blocks of data to specified
  destination host
I'm using this program to generate the traffic and not to measure the bandwidth. But tcpblast is only a client program. It can kill the destination server because it's overloading the server by sending random data to a port.

ttcp

local copy: This is a server-client program that generates traffic between them. It works great and I choose it above tcpblast. With ttcp you don't risk to overload the destination server. I include the programma itself in and endless loop so it keeps sending in data instead of stopping.

Starting the server on poort POORT1:

while true; do ttcp -r -s -p $POORT1; done

Connecting with a client to server SERVER:

while true ;do ttcp -t -s $SERVER -p $POORT1; done

iperf

local copy (Home page): This is also a client-server program that measured the bandwidth. It has more options than ttcp. It can also generates parallel connections.

Apache Benchmark & linbot & wget

Apache Benchmark

As results, a lot of small connectionts are generated. This is the results of the netstat command when I generated 8 parallel connections.
$ netstat | grep kriek:www
tcp        0      1 192.168.1.128:4279      kriek:www               SYN_SENT
tcp        0      1 192.168.1.128:4278      kriek:www               LAST_ACK
tcp        0      0 192.168.1.128:4277      kriek:www               CLOSE
tcp        0      0 192.168.1.128:4276      kriek:www               CLOSE
tcp        0      0 192.168.1.128:4275      kriek:www               CLOSE
tcp        0      0 192.168.1.128:4274      kriek:www               CLOSE
tcp        0      0 192.168.1.128:4273      kriek:www               CLOSE

Linbot & wget

Linbot is a tool to test the html pages of web-servers. It queries all the pages of the web-servers and looks for broken links. So it generates a lot of small connections to download different files. I think this is the best tool you can get to generate real traffic.

Another tool that can be used is wget. This downloads all the files from a web-server.

ping

Starting ping with the option -f, floods the destination hosts and creates a lot of bandwitdh. You can start also different pings at the same time so you can generate a very small stream.