Iperf3

Iperf3 è uno strumento per testare la velocità di connessione di rete fra due host. Il sito dove scaricarlo è https://iperf.fr/. È inoltre incluso in molte distribuzioni Linux (pacchetto iperf3 in Debian, per esempio)

Principio di funzionamento

Iperf3 va lanciato come "server" da un lato, e come "client" dall'altro lato. Di default, il "client" mandera` pacchetti al "server", quindi la misura della velocità viene fatta con traffico che va DAL CLIENT AL SERVER. È tuttavia possibile invertire il flusso (per una singola prova) passando al client il parametro "-R" (vedi dopo). Iperf3 parla di default TCP, ma puo` anche parlare UDP. Dato che UDP però non ha alcun algoritmo di controllo sui pacchetti inviati (ovvero, non controlla che siano arrivati dall'altra parte) la misura in UDP non riesce a fornirci un "massimo", siamo noi a dove dire "vorrei fare X" e a vedere quanti pacchetti si perdono alla velocità X. Ovviamente l'ideale sarebbe non perderne quasi nessuno...

Uso lato "server"

Lato "server" iperf3 può essere lanciato come demone oppure semplicemente come listener in una console, da chiudersi quando si sono finiti i test.

Per esempio, per lanciare iperf3 come server sulla porta standard (tcp/5201) eseguo semplicemente:

iperf3 -s

Se volgio bindarlo a una specifica interfaccia:

iperf3 -s -B <indirizzo IP dell'interfaccia a cui lo voglio bindare>

Iperf3 a questo punto rimane disponibile ad accettare connessioni fino a che non lo si chiude.

Uso lato "client" in TCP

Una volta lanciato il server, possiamo collegarci ad esso dal client per effettuare i test. Quasi tutti i parametri del test possono essere definiti dal client e il server si adeguerà.

Test di 10 secondi di durata che misura la velocità nella direzione DAL CLIENT AL SERVER, in TCP: (verboso, -V)

iperf3 -V -c <indirizzo ip del server>

Test come sopra, ma al contrario: misura la velocità DAL SERVER AL CLIENT:

iperf3 -V -R -c <indirizzo ip del server>

Siccome anche il server mostra a video un output durante il test, volendo possiamo dire al client che, alla fine del test, ci riporti l'output a video che ha prodotto il server, aggiungendo alla command line il parametro --get-server-output"

iperf3 -V -c <indirizzo ip del server> --get-server-output

Vale la pena di notare che è possibile che all'inizio del test (nei primi due secondi circa) la velocità risulti inferiore rispetto alla media del resto del test: è normale, il TCP impiega qualche istante a raggiungere la massima velocità a causa di come gestisce l'inizio delle connessioni (TCP slow start). È possibile dire a iperf3 di non tenere conto dei primi 2 secondi nel calcolo della media con il parametro --omit 2. Dal lato di chi genera il traffico e lo manda (e non da chi lo riceve, ovviamente) possiamo anche vedere il numero di pacchetti ritrasmessi (Colonna "Retr" nei risultati). Questo ci dà una indicazione della eventuale saturazione del link.

Uso lato "client" in UDP

In UDP non possiamo misurare la massima prestazione come facciamo in TCP, ma possiamo più che altro chiederci "alla velocità X, il link ce la fa oppure perde un sacco di pacchetti?". Quando facciamo il test in UDP, definiamo noi una velocità a cui vogliamo andare (per esempio, un megabit e` il default se non indichiamo nulla) e il test, mostrandoci quanti pacchetti vengono persi, ci farà capire se il link è affidabile o no a quella velocità. Ci mostrerà anche il jitter (misurato dal ricevente). Per questo tipo di test in particolare è decisamente comodo usare l'opzione --get-server-output per vedere sempre anche i risultati dall'altro lato, in quanto è la differenza fra quello che vediamo da un lato e quello che vediamo dall'altro che va valutata per capire come va il link.

Test di 10 secondi di durata che misura la qualità del link nella direzione DAL CLIENT AL SERVER, in UDP, con un traffico di 10 Mbit/secondo:

iperf3 -V -u -b10M -c <indirizzo ip del server> --get-server-output

Test come sopra, ma al contrario: misura la velocità DAL SERVER AL CLIENT:

iperf3 -V -u -b10M -R -c <indirizzo ip del server> --get-server-output

Nota: in UDP il client si connette al server sulla porta TCP 5021, poi apre una porta UDP casuale, quindi se ci sono regole di firewall fra server e client è molto probabile che il test UDP non funzioni.

Uso avanzato

Iperf3 può fare più di quanto descritto sopra, e spesso, specie a velocità molto elevate, i risultati possono essere fuorvianti. Leggete il manuale e consultate la documentazione, che comunque non è completissima, per saperne di più.