![]() |
Internet-TechnologieProf. Jürgen Plate |
Mit dem Programm nuttcp kann man die Transferrate für TCP, UDP und UDP-Multicast messen. Da es seine Daten aus dem Arbeitsspeicher heraus über das Netzwerk sendet, wird nur die Zeit gemessen, die zum Ausführen des Netzwerkcodes im Kernel benötigt wird. Zusätzlich zu den Transferraten gibt das Programm auch die benötigte CPU-Zeit aus. nuttcp basiert auf nttcp von Silicon Graphics, das seinerseits eine Weiterentwicklung von ttcp (Mike Muuss, Berkeley 1984) ist.
nuttcp funktioniert nach dem Client-Server-Prinzip und ist in den Repositories von Debian und in den FreeBSD-Ports vorhanden. Wie bei nttcp gibt es neben dem Sender- und Empfängermodus einen Servermodus, in dem Senden und Empfangen möglich sind. Dieser ist insbesondere beim Aufruf via inetd nützlich (beim Start über inetd entfällt auch der Login auf dem fernen Rechner). Die Ergebnisse werden beim Client angezeigt. Eine Besonderheit von nuttcp ist, dass es ausser dem memory-to-memory-Transfer auch disk-to-memory, memory-to-disk und disk-to-disk messen kann. Damit lassen sich Szenarien messen, die realistischen Einsatzgebieten näher kommen.
Auf dem Server wird nuttcp mit dem Parameter -S ("Server") gestartet. Bei bedarf kann mit dem Parameter -P noch ein Port angegeben werden (bei älteren Versionen ab 5000, bei neueren ab 1024). Wird nuttcp als Server gestartet, forkt es automatisch in den Hintergrund und verbleibt dort bis ein Fehler auftritt, oder der Prozess beendet wird. Dies kann man mit dem Parameter –nofork unterbinden. Zum Beispiel:
root@server# nuttcp -S
Auf dem Client wird nuttcp mit der IP-Adresse oder dem Domainnamen des Servers als Parameter gestartet. Es dauert standardmäßig 10 Sekunden, bis der Test zuende ist. Erst dann sieht man eine Ausgabe. Zum Beispiel:
root@client# nuttcp 192.168.1.23 113.0118 MB / 10.07 sec = 94.1244 Mbps 1 %TX 22 %RX 0 retrans 0.15 msRTTDie Messung liefert:
Mit dem Parameter -i n für "Berichte jede n Sekunden" kann das Ausgabeintervall eingestellt werden und mit dem Parameter -T lässt sich die Testzeit verlängern. Werden Server und Client jeweils mit dem Parameter -xt gestartet, wird zusätzlich ein automatisches Traceroute ausgeführt. Der Parameter -r erlaubt einen Test in Gegenrichtung. Alle Parameter werden gelistet, wenn man nuttcp ohne Parameter aufruf. Natürlich gibt es auch eine Manualseite. Zum Beispiel:
root@client# nuttcp -i1 192.168.1.23 11.1875 MB / 1.00 sec = 93.8425 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3728 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8493 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3726 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8418 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3764 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8429 Mbps 0 retrans 10.9375 MB / 1.00 sec = 91.7516 Mbps 0 retrans 11.5000 MB / 1.00 sec = 96.4709 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3690 Mbps 0 retrans 112.8125 MB / 10.06 sec = 94.1159 Mbps 1 %TX 23 %RX 0 retrans 0.16 msRTT root@client# nuttcp -r -i1 192.168.1.23 11.1250 MB / 1.00 sec = 93.3215 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8476 Mbps 0 retrans 11.1250 MB / 1.00 sec = 93.3230 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8477 Mbps 0 retrans 11.1250 MB / 1.00 sec = 93.3234 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8478 Mbps 0 retrans 11.1250 MB / 1.00 sec = 93.3224 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8480 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8477 Mbps 0 retrans 11.1250 MB / 1.00 sec = 93.3230 Mbps 0 retrans 112.0048 MB / 10.04 sec = 93.6184 Mbps 5 %TX 5 %RX 0 retrans 0.21 msRTT
Mit dem Parameter -u kann man auch UDP-Verbindungen testen.
root@client# nuttcp -u -i1 -T5 192.168.1.23 0.1191 MB / 1.00 sec = 0.9994 Mbps 0 / 122 ~drop/pkt 0.00 ~%loss 0.1191 MB / 1.00 sec = 0.9994 Mbps 0 / 122 ~drop/pkt 0.00 ~%loss 0.1191 MB / 1.00 sec = 0.9994 Mbps 0 / 122 ~drop/pkt 0.00 ~%loss 0.1191 MB / 1.00 sec = 0.9994 Mbps 0 / 122 ~drop/pkt 0.00 ~%loss 0.1191 MB / 1.00 sec = 0.9994 Mbps 0 / 122 ~drop/pkt 0.00 ~%loss 0.5967 MB / 5.01 sec = 0.9999 Mbps 100 %TX 0 %RX 0 / 611 drop/pkt 0.00 %loss
Der Parameter -w "size" ermöglicht das Setzen der Puffergröße ("window"), beispielsweise setzt -w8m den Puffer auf 8 Megabyte. Auf die gleiche Weise kann mittels -l "size" die UDP Paketgröße bzw. die TCP write size gesetzt werden, z. B.: -l512. Nicht zuletzt kann mit -R die Datenrate (in bps) festgelegt werden, z. B.: -R10m für 10 MBit/s. Seit Version 6.2.8 gibt es für UDP auch noch einen "burst mode", den man bei -R zusätzlich angibt, zum Beispiel: Sende UDP-Pakete mit 300 Mbps in Bursts von 20 Paketen:
root@client# nuttcp -u -R300m/20 -i1 -T5 192.168.1.23 0.0352 MB / 1.00 sec = 0.2949 Mbps 0 / 36 ~drop/pkt 0.00 ~%loss 0.0361 MB / 1.00 sec = 0.3031 Mbps 0 / 37 ~drop/pkt 0.00 ~%loss 0.0352 MB / 1.00 sec = 0.2949 Mbps 0 / 36 ~drop/pkt 0.00 ~%loss 0.0361 MB / 1.00 sec = 0.3031 Mbps 0 / 37 ~drop/pkt 0.00 ~%loss 0.0361 MB / 1.00 sec = 0.3031 Mbps 0 / 37 ~drop/pkt 0.00 ~%loss 0.1797 MB / 5.03 sec = 0.3000 Mbps 100 %TX 0 %RX 0 / 184 drop/pkt 0.00 %lossDer folgende Vergleich zeigt, was bei Verkleinern der Fenstergröße geschieht:
root@client# nuttcp -i1 -T5 192.168.1.23 11.1875 MB / 1.00 sec = 93.8433 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8479 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3727 Mbps 0 retrans 11.1875 MB / 1.00 sec = 93.8457 Mbps 0 retrans 11.2500 MB / 1.00 sec = 94.3721 Mbps 0 retrans 56.5000 MB / 5.04 sec = 94.0850 Mbps 1 %TX 22 %RX 0 retrans 0.17 msRTT root@client# nuttcp -w1k -i1 -T5 192.168.1.23 3.5000 MB / 1.00 sec = 29.3589 Mbps 0 retrans 3.5000 MB / 1.00 sec = 29.3604 Mbps 0 retrans 3.5625 MB / 1.00 sec = 29.8850 Mbps 0 retrans 3.5000 MB / 1.00 sec = 29.3597 Mbps 0 retrans 3.5625 MB / 1.00 sec = 29.8831 Mbps 0 retrans 17.6537 MB / 5.00 sec = 29.6094 Mbps 2 %TX 13 %RX 0 retrans 0.17 msRTT