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:

FerramentaMedeMelhor Para
iperf3Throughput (largura de banda)Velocidade máxima entre dois pontos
pingLatência (RTT)Conectividade básica, tempo de resposta
mtrLatência por hopAnálise de caminho, encontrar hops lentos
tcpdumpCaptura de pacotesAnálise profunda de protocolo
netperfThroughput + latênciaBenchmarks de requisição-resposta
ethtoolVelocidade/configurações do linkVerificaçã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

ColunaSignificado
TransferTotal de dados transferidos por intervalo
BitrateThroughput em Mbits/sec ou Gbits/sec
RetrRetransmissões TCP (indicador de perda de pacotes)
CwndTamanho 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étricaFaixa AceitávelLimite 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 100K para 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 -s em um e -c no 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 4 para saturar links de alta largura de banda e -R para 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 -b sã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 ethtool e 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