Iperf - przykłady użycia, pomiar parametrów sieci
Iperf - przedstawienie
Iperf to narzędzie do pomiarów przepustowości i parametrów łącza pomiędzy dwoma hostami w sieci. Jperf to graficzny interfejs, który w połączeniu z Iperfem prezentuje pomiary na wykresach.
"Link" definiujemy jako połączenie pomiędzy dwoma komputerami w sieci.
Jakość linku możemy zbadać mierząc następujące parametry:
- Opóźnienie (czas odpowiedzi lub RTT): może być zmierzony za pomoca komendy Ping.
- Jitter (fluktuacje czasu odp.): za pomocą testu UDP Iperf.
- Utrata datagramów: może być zmierzona za pomocą testu UDP Iperf.
Przepustowość pomiędzy komputerami mierzymy testem TCP lub UDP.
Różnica pomiędzy TCP (Transmission Control Protocol) a UDP (User Datagram Protocol) jest taka, że TCP sprawdza, czy pakiety zostały poprawnie dostarczone do odbiorcy, podczas gdy przy użyciu UDP pakiety wysyłane są do odbiorcy bez dalszego sprawdzania, co się z nimi stało. Dzięki temu UDP jest szybsze niż TCP.
Iperf pozwala na oba rodzaje testów przepustowości (TCP i UDP) aby zapewnić dokładne statystyki linku.
Iperf może zostać łatwo zaintalowany zarówno na komputerach z Linux/Unix/BSD, jak również w systemie Windows. Jeden z komputerów pełni rolę serwera, a drugi klienta.
Powyżej diagram przedstawiający sytuację, w której Iperf zainstalowany jest na maszynach z Linuxem i Windowsem. Linux jest używany jako klient a Windows jako serwer Iperf. Oczywiście test można przeprowadzić pomiędzy dwoma Linuxami bądź z dwoma komputerami obsługiwanymi przez system Windows.
Wybrane parametry programu Iperf
-f |
Format danych [kmKM] |
-i |
interwał pomiędzy raportami ( w sek.) |
-r |
Test w obu kierunkach (jeden po drugim) |
-u |
test UDP (domyślnie TCP jeśli bez tego parametru) |
-d |
Test w obu kierunkach jednocześnie (duplex) |
-b |
zadana przepustowość dla testu UDP |
-w |
rozmiar okna TCP |
-P |
testy równoległe |
-p |
używany port (domyślnie 5001) |
-m |
wyświetla maks. rozmiar segmentu (MSS) |
-t |
czas trwania testu w sekundach (domyślnie 10 sek.) |
-M |
ustawienia maks. rozmiaru segmentu (MSS) |
Domyślne ustawienia Iperf
Domyślnie, klient Iperf łączy się z serwerem Iperf przy pomocy protokołu TCP na porcie 5001, a przepustowość wyświetlana to przepustowość od klienta do serwera. Jeśli chcemy użyć testu UDP, używamy argumentu -u.
Argumenty -d i -r mierzą przepustowość w obu kierunkach.
Dla testu UDP należy podać z jaką prędkością będą wysyłane dane, za pomocą parametru -b, domyślnie jest to 1Mb/s.
Strona klienta
#iperf -c 10.1.1.1.1
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16384 Byte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 33453 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.2 sec 1.26 MBytes 1.05 Mbits/sec
Strona serwera
#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453
[ ID] Interval Transfer Bandwidth
[852] 0.0-10.6 sec 1.26 MBytes 1.03 Mbits/sec
Formatowanie danych (-f)
Argument -f pozwala na wyświetlanie rezultatów w wybranym formacie: bity(b), bajty(B), kilobity(k), kilobajty(K), megabity(m), megabajty(M), gigabity(g) or gigabajty(G).
Zasadniczo przepustowość mierzy się w bitach (lub kilobitach, itd.), a ilość danych w bajtach (lub kilobajtach, itd).
Jako przypomnienie, 1 bajt równy jest 8 bitom, a w informatyce 1 kilo jest równe 1024 (2^10).
Dla przykładu: 100'000'000 bajtów nie jest to 100 Mbajtów, lecz 100'000'000/1024/1024 = 95.37 Mbajta.
Strona klienta
#iperf -c 10.1.1.1.1 -f b
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16384 Byte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 54953 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.2 sec 1359872 Bytes 1064272 bits/sec
Strona serwera
#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453
[ ID] Interval Transfer Bandwidth
[852] 0.0-10.6 sec 920 KBytes 711 Kbits/sec
Test przepustowości w obu kierunkach (-r)
Strona klienta
#iperf -c 10.1.1.1.1 -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 35726 connected with 10.1.1.1 port 5001
[ 5] 0.0-10.0 sec 1.12 MBytes 936 Kbits/sec
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 1640
[ 4] 0.0-10.1 sec 74.2 MBytes 61.7 Mbits/sec
Strona serwera
#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 54355
[ ID] Interval Transfer Bandwidth
[852] 0.0-10.1 sec 1.15 MBytes 956 Kbits/sec
------------------------------------------------------------
Client connecting to 10.6.2.5, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[824] local 10.1.1.1 port 1646 connected with 10.6.2.5 port 5001
[ ID] Interval Transfer Bandwidth
[824] 0.0-10.0 sec 73.3 MBytes 61.4 Mbits/sec
Test przepustowości w obu kierunkach jednocześnie (-d)
Strona klienta
#iperf -c 10.1.1.1.1 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 60270 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 2643
[ 4] 0.0-10.0 sec 76.3 MBytes 63.9 Mbits/sec
[ 5] 0.0-10.1 sec 1.55 MBytes 1.29 Mbits/sec
Strona serwera
#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 60270 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 2643
[ 4] 0.0-10.0 sec 76.3 MBytes 63.9 Mbits/sec
[ 5] 0.0-10.1 sec 1.55 MBytes 1.29 Mbits/sec
Rozmiar okna TCP (-w)
Rozmiar okna TCP to ilość danych, jaka może zostać zbuforowana w czasie połączenia TCP bez weryfikacji od odbiorcy. Może się zmieniać od 2B do 65kB. W systemie Linux, rozmiar okna danych zadany parametrem -w jest przez jądro podwajany.
Strona klienta
#iperf -c 10.1.1.1.1 -w 2000
WARNING: TCP window size set to 2000 bytes. A small window size
will give poor performance. See the Iperf documentation.
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 3.91 KByte (WARNING: requested 1.95 KByte)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 51400 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.1 sec 704 KBytes 572 Kbits/sec
Strona serwera
#iperf -s -w 4000
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 3.91 KByte
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 51400
[ ID] Interval Transfer Bandwidth
[852] 0.0-10.1 sec 704 KBytes 570 Kbits/sec
Port komunikacji, interwał raportowania i czas testu (-p,-i,-t)
Rozmiar okna TCP to ilość danych, jaka może zostać zbuforowana w czasie połączenia TCP bez weryfikacji od odbiorcy. Może się zmieniać od 2B do 65kB. W systemie Linux, rozmiar okna danych zadany parametrem -w jest przez jądro podwajany.
Strona klienta
#iperf -c 10.1.1.1.1 -p 12000 -t 20 -i 2
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 12000
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 58316 connected with 10.1.1.1 port 12000
[ 3] 0.0- 2.0 sec 224 KBytes 918 Kbits/sec
[ 3] 2.0- 4.0 sec 368 KBytes 1.51 Mbits/sec
[ 3] 4.0- 6.0 sec 704 KBytes 2.88 Mbits/sec
[ 3] 6.0- 8.0 sec 280 KBytes 1.15 Mbits/sec
[ 3] 8.0-10.0 sec 208 KBytes 852 Kbits/sec
[ 3] 10.0-12.0 sec 344 KBytes 1.41 Mbits/sec
[ 3] 12.0-14.0 sec 208 KBytes 852 Kbits/sec
[ 3] 14.0-16.0 sec 232 KBytes 950 Kbits/sec
[ 3] 16.0-18.0 sec 232 KBytes 950 Kbits/sec
[ 3] 18.0-20.0 sec 264 KBytes 1.08 Mbits/sec
[ 3] 0.0-20.1 sec 3.00 MBytes 1.25 Mbits/sec
Strona serwera
#iperf -s -p 12000
------------------------------------------------------------
Server listening on TCP port 12000
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 12000 connected with 10.6.2.5 port 58316
[ ID] Interval Transfer Bandwidth
[852] 0.0-20.1 sec 3.00 MBytes 1.25 Mbits/sec
Testy UPD (-u) i ustawianie przepustowości (-b)
Testy UDP dają cenne informacje o efekcie "jitter" i utracie pakietów. Dobre połączenie nie powinno gubić więcej niż 1% pakietów. Wysoka utrata pakietów powoduje bardzo dużo retransmisji segmentów TCP, co wpływa na obniżenie przepustowości.
Jitter to odchylenie od opóźnienia, niezależne od opóźnienia. Możn np. mieć bardzo wysokie czasy odpowiedzi a niskie odchylenie. Wartość jitter jest szczególnie istotna w sieciach obsługujących protokół VoIP, ponieważ jego wysoka wartość może psuć połączenie głosowe.
Argument -b pozwala na alokację żądanej przepustowości.
Strona klienta
#iperf -c 10.1.1.1.1 -u -b 10M
------------------------------------------------------------
Client connecting to 10.1.1.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 108 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 32781 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.0 sec 11.8 MBytes 9.89 Mbits/sec
[ 3] Sent 8409 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 11.8 MBytes 9.86 Mbits/sec 2.617 ms 9/ 8409 (0.11%)
Strona serwera
#iperf -s -u -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 8.00 KByte (default)
------------------------------------------------------------
[904] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 32781
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[904] 0.0- 1.0 sec 1.17 MBytes 9.84 Mbits/sec 1.830 ms 0/ 837 (0%)
[904] 1.0- 2.0 sec 1.18 MBytes 9.94 Mbits/sec 1.846 ms 5/ 850 (0.59%)
[904] 2.0- 3.0 sec 1.19 MBytes 9.98 Mbits/sec 1.802 ms 2/ 851 (0.24%)
[904] 3.0- 4.0 sec 1.19 MBytes 10.0 Mbits/sec 1.830 ms 0/ 850 (0%)
[904] 4.0- 5.0 sec 1.19 MBytes 9.98 Mbits/sec 1.846 ms 1/ 850 (0.12%)
[904] 5.0- 6.0 sec 1.19 MBytes 10.0 Mbits/sec 1.806 ms 0/ 851 (0%)
[904] 6.0- 7.0 sec 1.06 MBytes 8.87 Mbits/sec 1.803 ms 1/ 755 (0.13%)
[904] 7.0- 8.0 sec 1.19 MBytes 10.0 Mbits/sec 1.831 ms 0/ 850 (0%)
[904] 8.0- 9.0 sec 1.19 MBytes 10.0 Mbits/sec 1.841 ms 0/ 850 (0%)
[904] 9.0-10.0 sec 1.19 MBytes 10.0 Mbits/sec 1.801 ms 0/ 851 (0%)
[904] 0.0-10.0 sec 11.8 MBytes 9.86 Mbits/sec 2.618 ms 9/ 8409 (0.11%)
Wyświetlanie rozmiaru segmentu MSS (-m)
MSS to maksymalna ilość danych, w bajtach, jaką komputer może presłac za pomocą jednego, niepodzielonego segmentu TCP.
MSS = MTU - nagłóki TCP i IP.
Nagłówki TCP i IP w IPv4 są róne 40 bajtom.
MTU to największa ilość danych jaka może być przetransportowana w ramce. Przykładowe wartości MTU dla różnych topologii:
Ethernet - 1500 Bajtów, PPPoE - 1492 Bajty, Dial-up - 576 bajtów.
Ogólnie rzecz ujmując, im wyższe wartości MTU (i MSS) tym większa efektywna przepustowość.
Strona klienta
#iperf -c 10.1.1.1.1 -m
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41532 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.2 sec 1.27 MBytes 1.04 Mbits/sec
[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)
Strona serwera
#iperf -s
Ustawianie rozmiaru segmentu MSS (-M)
Strona klienta
#iperf -c 10.1.1.1.1 -M 1300 -m
WARNING: attempt to set TCP maximum segment size to 1300, but got 536
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41533 connected with 10.1.1.1 port 5001
[ 3] 0.0-10.1 sec 4.29 MBytes 3.58 Mbits/sec
[ 3] MSS size 1288 bytes (MTU 1328 bytes, unknown interface)
Strona serwera
#iperf -s
Testy równoległe (-P)
Strona klienta
#iperf -c 10.1.1.1.1 -P2
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41534 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 41535 connected with 10.1.1.1 port 5001
[ 4] 0.0-10.1 sec 1.35 MBytes 1.12 Mbits/sec
[ 3] 0.0-10.1 sec 1.35 MBytes 1.12 Mbits/sec
[SUM] 0.0-10.1 sec 2.70 MBytes 2.24 Mbits/sec
Strona serwera
#iperf -s
|