O iperf3 é a ferramenta padrão para medir throughput de rede entre dois endpoints no Linux. Quando você precisa responder “quão rápido este link está realmente performando?” — seja para solucionar transferências lentas, validar um novo segmento de rede ou fazer benchmark após uma atualização de switch — o iperf3 fornece números precisos de desempenho TCP e UDP em segundos.
Este guia cobre instalação, cenários de teste comuns, testes UDP, streams paralelos e como interpretar resultados para identificar gargalos de rede.
Pré-requisitos
- Duas máquinas Linux conectadas pela rede que você deseja testar
- iperf3 instalado em ambos os endpoints
- Porta 5201/TCP aberta entre as máquinas (ou porta customizada com
-p) - Acesso root ou sudo para instalação
Instalando o iperf3
No Debian/Ubuntu:
sudo apt update && sudo apt install -y iperf3
No RHEL/Fedora/AlmaLinux:
sudo dnf install -y iperf3
No Alpine:
sudo apk add iperf3
Verifique a instalação:
iperf3 --version
iperf3 vs Outras Ferramentas de Teste de Rede
Antes de executar testes, entenda o que o iperf3 mede e quando usar alternativas:
| Ferramenta | Mede | Melhor Para |
|---|---|---|
| iperf3 | Throughput (largura de banda) | Velocidade máxima entre dois pontos |
| ping | Latência (RTT) | Conectividade básica, tempo de resposta |
| mtr | Latência por hop | Análise de caminho, encontrar hops lentos |
| tcpdump | Captura de pacotes | Análise profunda de protocolo |
| netperf | Throughput + latência | Benchmarks de requisição-resposta |
| ethtool | Velocidade/configurações do link | Verificação de interface física |
O iperf3 responde “quantos dados eu posso empurrar por este link?” — não é uma ferramenta de latência. Use-o junto com ping/mtr para uma imagem completa.
Executando Seu Primeiro Teste de Largura de Banda TCP
Todo teste iperf3 requer duas máquinas: um servidor (listener) e um cliente (sender).
Iniciar o Servidor
Na Máquina A (ex: 10.0.0.10):
iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
O servidor escuta na porta 5201 por padrão e aceita um cliente por vez.
Executar o Cliente
Na Máquina B:
iperf3 -c 10.0.0.10
Connecting to host 10.0.0.10, port 5201
[ 5] local 10.0.0.20 port 43218 connected to 10.0.0.10 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 112 MBytes 941 Mbits/sec 0 378 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 940 Mbits/sec 0 378 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 940 Mbits/sec 0 378 KBytes
...
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 378 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec 0 sender
[ 5] 0.00-10.04 sec 1.09 GBytes 936 Mbits/sec receiver
Lendo a Saída
| Coluna | Significado |
|---|---|
| Transfer | Total de dados transferidos por intervalo |
| Bitrate | Throughput em Mbits/sec ou Gbits/sec |
| Retr | Retransmissões TCP (indicador de perda de pacotes) |
| Cwnd | Tamanho da janela de congestionamento TCP |
Neste exemplo, um link de 1 Gbps mostra 940 Mbits/sec — isso é 94% de eficiência, o que é normal. Cabeçalhos TCP, enquadramento Ethernet e overhead de protocolo consomem os 6% restantes.
Pegadinha: Se você ver números significativamente menores (ex: 100 Mbits em um link de 1 Gbps), verifique a velocidade física do link com
ethtool eth0 | grep Speed— falhas de auto-negociação são um culpado comum.
Testando Desempenho UDP
Testes UDP revelam jitter e perda de pacotes — métricas críticas para VoIP, streaming de vídeo e aplicações em tempo real.
iperf3 -c 10.0.0.10 -u -b 500M
A flag -b é necessária para UDP porque diferente do TCP, UDP não tem controle de congestionamento integrado e enviará na taxa que você especificar.
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-1.00 sec 59.6 MBytes 500 Mbits/sec 0.018 ms 0/43200 (0%)
[ 5] 1.00-2.00 sec 59.6 MBytes 500 Mbits/sec 0.021 ms 3/43198 (0.0069%)
...
[ 5] 0.00-10.00 sec 596 MBytes 500 Mbits/sec 0.019 ms 12/432000 (0.0028%) receiver
| Métrica | Faixa Aceitável | Limite Problemático |
|---|---|---|
| Jitter | < 1 ms | > 5 ms (VoIP degrada) |
| Perda de pacotes | < 0.1% | > 1% (perda de qualidade perceptível) |
Cenário do mundo real: Você tem um sistema VoIP com reclamações de qualidade de chamada. Execute um teste UDP na taxa de bits do codec (ex:
-b 100Kpara G.711) entre o servidor de telefonia e o segmento de rede. Se o jitter exceder 5 ms ou a perda exceder 1%, o problema é do lado da rede, não do aplicativo.
Cenários de Teste Avançados
Streams Paralelos
Um único stream TCP pode não saturar um link de alta largura de banda devido a limites da janela de congestionamento. Use streams paralelos:
iperf3 -c 10.0.0.10 -P 4
Isso cria 4 conexões TCP paralelas. O resumo mostra largura de banda por stream e agregada. Em links de 10 Gbps, você frequentemente precisará de 4-8 streams paralelos para alcançar throughput completo.
Modo Reverso (Servidor Envia para Cliente)
Teste a direção oposta sem trocar papéis:
iperf3 -c 10.0.0.10 -R
A flag -R diz ao servidor para enviar dados ao cliente. Útil para testar links assimétricos ou quando você não pode executar o cliente em ambas as pontas.
Duração e Intervalo de Teste Customizados
iperf3 -c 10.0.0.10 -t 60 -i 5
-t 60— executar por 60 segundos ao invés dos 10 padrão-i 5— reportar a cada 5 segundos ao invés de a cada 1
Testes mais longos são essenciais para detectar problemas intermitentes como microbursts ou congestionamento periódico.
Definir Tamanho da Janela TCP
iperf3 -c 10.0.0.10 -w 256K
O tamanho da janela TCP limita quanto dado pode estar em trânsito antes de esperar por confirmação. Para links de alta latência (WAN, VPN), aumentar o tamanho da janela pode melhorar dramaticamente o throughput:
Produto Largura de Banda-Atraso (BDP): Janela necessária = Largura de banda × RTT
Para um link de 1 Gbps com RTT de 20 ms: 1.000.000.000 × 0,020 / 8 = 2,5 MB
iperf3 -c 10.0.0.10 -w 2500K
Saída JSON para Scripts
iperf3 -c 10.0.0.10 -J > result.json
Parse com jq:
jq '.end.sum_sent.bits_per_second / 1000000' result.json
Isso retorna a largura de banda em Mbits/sec — perfeito para scripts de monitoramento e análise de tendências.
Porta Customizada
Se a porta 5201 estiver bloqueada:
# Servidor
iperf3 -s -p 9999
# Cliente
iperf3 -c 10.0.0.10 -p 9999
Executando iperf3 como um Serviço Persistente
Para testes contínuos, execute o servidor como um serviço systemd:
sudo tee /etc/systemd/system/iperf3.service > /dev/null << 'EOF'
[Unit]
Description=iperf3 Network Performance Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/iperf3 -s
Restart=on-failure
User=nobody
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now iperf3.service
Nota de segurança: O iperf3 não tem autenticação. Exponha-o apenas em redes confiáveis. Use regras de firewall para restringir acesso por IP de origem.
Solução de Problemas em Testes de Desempenho de Rede com iperf3
“iperf3: error - unable to connect to server”: O servidor não está escutando ou um firewall está bloqueando a porta 5201. Verifique com ss -tlnp | grep 5201 no servidor e verifique se as regras de firewall permitem a porta.
“iperf3: error - the server is busy”: O iperf3 lida com apenas um cliente por vez. Aguarde o teste atual terminar, ou execute múltiplas instâncias de servidor em portas diferentes: iperf3 -s -p 5202.
Resultados extremamente inconsistentes entre execuções: Outros tráfegos estão competindo por largura de banda. Execute testes durante janelas de manutenção, ou use -t 60 para médias mais longas. Também verifique por saturação de CPU — o iperf3 é single-threaded, e uma CPU lenta pode criar gargalo antes da rede.
Throughput cai após alguns segundos: Provavelmente buffer bloat TCP ou overflow de buffer do switch. Observe a coluna Retr (retransmit) — retransmissões crescentes significam que pacotes estão sendo descartados. Reduza streams paralelos ou verifique configurações de QoS do switch.
Throughput próximo de zero: Verifique incompatibilidades de MTU. Se um lado tem MTU 9000 (jumbo frames) e o outro tem 1500, pacotes são fragmentados ou descartados. Verifique com ip link show eth0 | grep mtu.
Resumo
- O iperf3 mede throughput TCP e UDP entre dois endpoints — instale em ambos os lados, execute
-sem um e-cno outro - Testes TCP mostram largura de banda, retransmissões e janela de congestionamento; testes UDP adicionam métricas de jitter e perda de pacotes
- Use streams paralelos
-P 4para saturar links de alta largura de banda e-Rpara testes de direção reversa - Para links de alta latência (WAN/VPN), calcule o produto largura de banda-atraso e defina o tamanho da janela com
-w - Testes UDP com
-u -bsão essenciais para avaliação de qualidade de VoIP e streaming — observe jitter e perda - Saída JSON (
-J) habilita monitoramento scriptado e análise de tendências - Execute o iperf3 como um serviço systemd para disponibilidade persistente em endpoints de teste
- Sempre verifique velocidade física do link com
ethtoole regras de firewall antes de culpar a rede
tcpdump: Capture and Analyze Network Traffic on Linux | nftables: The Modern Linux Firewall Replacing iptables | Configure UFW Firewall on Ubuntu Server | Private Network Segments - Understanding RFC 1918