Iperf e Jperf- Teste de Performance de Rede
Troubleshooting, Throughput, testes de conectividade e transmissĂŁo de pacotes em rede com Software Livre/Open Source

Linux power user since 2003. IT Manager, DevOps/SRE, Systems Administrator, and teacher. Bass player, Krav Maga practitioner, and sport shooter.
https://esli.blog || https://esli.cafe
Base de Conhecimento
O TCP é o protocolo da camada de transporte orientado à conexão, que oferece um serviço confiåvel. Frequentemente aparece como parte da pilha TCP/IP da arquitetura Internet, mas é um protocolo de propósito geral que pode ser adaptado para ser usado com uma variedade de sistemas.
O protocolo UDP Ă© restringido a portas e sockets, e transmite os dados de forma nĂŁo orientada Ă conexĂŁo. Ele nada mais Ă© do que uma interface para o protocolo IP. Esse protocolo substitui o protocolo TCP quando a transferĂȘncia de dados nĂŁo precisa estar submetida a serviços como controle de fluxo. A função bĂĄsica do UDP Ă© servir de multiplexador ou demultiplexador para o trĂĄfego de informaçÔes do IP. Assim como o TCP, trabalha com portas que orientam adequadamente o trĂĄfego de informação a cada aplicação de nĂvel superior.
O UDP fornece os serviços de broadcast e multicast, permitindo que um Ășnico cliente envie pacotes para vĂĄrios outros na rede. O UDP Ă© uma escolha adequada para fluxos de dados em tempo real, especialmente aqueles que admitem perda ou corrompimento de parte de seu conteĂșdo, tais como vĂdeos ou voz. AplicaçÔes sensĂveis a atrasos na rede, mas poucos sensĂveis a perdas de pacotes, como jogos de computadores, tambĂ©m podem se utilizar do UDP. As garantias de TCP envolvem retransmissĂŁo e espera de dados, como consequĂȘncia, intensificam os efeitos de uma alta latĂȘncia de rede. Algum tratamento de erro pode ser adicionado, mas geralmente aplicaçÔes multicast tambĂ©m admitem perda de parte dos pacotes ou fazem retransmissĂ”es constantes (tal como o ocorre no protocolo DHCP).
O UDP nĂŁo perde tempo com criação ou destruição de conexĂ”es. Durante uma conexĂŁo, o UDP troca apenas 2 pacotes, enquanto no TCP esse nĂșmero Ă© superior a 10.
Embora o processamento dos pacotes UDP seja realmente mais rĂĄpido, quando as garantias de confiabilidade e ordenação sĂŁo necessĂĄrias, Ă© pouco provĂĄvel que uma implementação em UDP obterĂĄ resultados melhores do que o uso direto do TCP. Em primeiro lugar, corre-se o risco de que uma implementação ingĂȘnua feita em UDP seja menos eficiente do que os algoritmos jĂĄ testados e otimizados presentes no TCP. Em segundo lugar, boa parte do protocolo TCP, nos principais sistemas operacionais, opera em modo nĂșcleo, tendo portanto uma execução mais privilegiada do que um protocolo de aplicação teria. Finalmente, Ă© vĂĄlido lembrar que muitas placas de rede jĂĄ possuem o TCP programado em seu firmware o que permite, por exemplo, o cĂĄlculo de checksum por hardware. Por isso, o protocolo UDP nĂŁo deveria ser utilizado para fluxos de bytes confiĂĄveis, tais como a transferĂȘncia de arquivos. Como exemplo, podemos citar o protocolo TFTP, exceção a essa regra, que foi feito redes locais, de alta confiabilidade. Na internet, seu desempenho Ă© muito inferior ao sua versĂŁo confiĂĄvel, o protocolo FTP.
De uma forma bem simplificada, A principal diferença entre ambos, é que o tcp é orientado a conexão, ou seja, antes de enviar os dados é feito uma comunicação entre remetente e destinatårio, cria-se um canal de comunicação, então é transmitido os dados... Jå o udp não é orientado a conexão, portanto os dados são enviados sem ter a certeza de que o receptor recebeu os dados... Isto mostra alguns pontos conclusivos entre TCP e UDP, o primeiro mais seguro, onde hå um tratamento sobre perdas e conexão, jå o segundo é mais råpido e com melhor aplicabilidade em determinadas situaçÔes (as vezes necessårias).
Quem usa TCP: Telnet, FTP, SMTP, SSH, HTTP,...
Quem usa UDP: SNMP, TFTP, RPC, DHCP,...
O TCP, tal como o UDP, usa o IP para a entrega dos datagramas Ă rede, e os pontos de acesso Ă aplicação sĂŁo identificados por portas acessadas por multiplexação, tal como acontece com o UDP, o que permite mĂșltiplas ligaçÔes em cada host. As portas podem ser associadas com uma aplicação (Processo).
O IP trata o pacote TCP como dados e nĂŁo interpreta qualquer conteĂșdo da mensagem do TCP, sendo que os dados TCP viajam pela rede em datagramas IP. Os roteadores que interligam as redes apenas verificam o cabeçalho IP, quando fazem o envio dos datagramas. O TCP no destino interpreta a mensagem do protocolo TCP.
Rede Local e o tråfego de informaçÔes
Nas comunicaçÔes que ocorrem em redes locais Ethernet o endereço IP não é diretamente usado na comunicação, ele serve apenas para se descobrir o MAC Address, que é de fato o endereço que importa nas comunicaçÔes locais. Essa descoberta é feita através de um protocolo de rede chamado Address Resolution Protocol (ARP). De forma resumida, o switch fica responsåvel por registrar cada interface MAC dos hosts conectados e enviar os pacotes aos hosts de destinos, no caso de um hub, ele não possui este mapeamento de MAC address, o pacote é enviado a todas as maquinas.
Jitter Ă© definida como a medida de variação do atraso entre os pacotes de dados. Observa-se ainda que uma variação de atraso elevada produz uma recepção nĂŁo regular dos pacotes. Logo, uma das formas de minimizar a variação de atraso Ă© a utilização de buffer, o qual armazena os dados Ă medida que eles chegam e os encaminha para a aplicação seguindo uma mesma cadĂȘncia.
Buffer é uma região de memória temporåria utilizada para escrita e leitura de dados. Normalmente são utilizados quando existe uma diferença entre a taxa em que os dados são recebidos e a taxa em que eles podem ser processados, ou no caso em que essas taxas são variåveis.
O que Ă©
O Jperf consiste em um software de anĂĄlise de performance de banda e cĂĄlculo de perda de datagramas na rede, cria fluxo de dados sob TCP e UDP e permite medir e analisar o desempenho da rede. Ele Ă© mantido pela Universidade de Illinois. O Iperf Ă© um software livre, do tipo client/server desenvolvido pelo National Laboratory for Applied Network Research (NLANR), Ă© escrito em C++ e sua Ășltima versĂŁo Ă© a 2.0.5, disponibilizada em Julho/2010 (nota: hĂĄ um projeto onde desenvolve-se a continuação de um ânovoâ iperf, atualmente a versĂŁo Ă© 3.0-beta4).
Ă uma ferramenta multi-plataforma que pode ser executada atravĂ©s de qualquer tipo de rede (falo sobre topologias, infraestrutura, meios, etc...) e exibir resultados de desempenho padrĂŁo com nĂveis em comum entre essas diferentes redes, assim, ele pode ser usado para a comparação de equipamentos de rede com e sem fio e tecnologias de uma maneira imparcial.
Com o Iperf podemos testar/medir o throughput da rede, serve como ferramenta de apoio para outros testes em rede, simulação de conectividade, situação/diagnóstico da situação do cabeamento (para certificar sua rede em relação a atividade e transmissão de dados, identificar segmentos da rede com falhas...).
A função exercida pelo Iperf tambĂ©m Ă© alcançada utilizando alguns softwares no linux com propositos de ânetwork toolsâ, como scanners, sniffers e outros de monitoramento. O diferencial Ă© que nesses aplicativos o administrador teria pouca informação (como um simples ping) ou, num software mais robusto, teria que âpeneirarâ a informação desejada dentro de uma inundação de logs gerados, o Iperf Ă© justamente a aplicação que irĂĄ dar a informação desejada. Outros softwares semelhantes ao Iperf sĂŁo: ttcp (test tcp) e bwping.
Veja no final do tutorial os links para downloads, versÔes do iperf e jperf além de outros links ;-)
Instalação no GNU/Linux:
Depois de ter baixado o aplicativo descompacte e compile.
root@server ~ # tar -zxvf iperf-2.0.5.tar.gz
root@server ~ # cd iperf-2.0.5
root@server ~ # ./configure ; make ; make install
Seu funcionamento é simples, na configuração padrão, o cliente passarå a enviar tråfego TCP para o servidor por 10 segundos, e em seguida mostrarå a quantidade dados transferida (MBytes) e a velocidade atingida (Mbits/s). Deve haver no minimo duas maquinas com o Iperf em sua rede. Uma serå executada como servidor a outra como cliente. Por padrão o iperf usarå a porta TCP 5001, certifique-se que não hå nenhum tipo de firewall bloqueando esta porta (tanto nas maquinas cliente/servidor) ou na rede.
PossĂveis situaçÔes de uso
Bem, aqui a coisa complica ;-)
Podemos criar alguns ambientes simulando possĂveis situaçÔes para o uso do iperf, mas pode ficar meio confuso, pois os resultados obtidos em softwares mais complexos sĂŁo mais aproveitĂĄveis e fĂĄceis de se adquirir do que com o iperf, para qualquer administrador de rede.
O primeiro caso Ă© utilizado por mim (e sempre aconselho a utilizarem), Ă© a utilização para fins acadĂȘmicos (lembra que ele Ă© mantido por uma Universidade??), o iperf Ă© uma Ăłtima ferramenta para ensino. Leva o aluno a usar um sistema operacional, testar numa rede real, ao invĂ©s de simuladores de rede com softwares complexos para ministrar conteĂșdos simples.
Inserindo em um ambiente corporativo: Como provar para um superior dentro da empresa que um determinado segmento da rede, uma sala, andar precisa de uma nova infraestrutura de rede, novos cabeamentos, que precisa de melhorias?? VocĂȘ nĂŁo vai levar um diretor para ficar vendo canaletas, cabos utp empoeirados, racks e guias?? No mundo corporativo ninguĂ©m sabe a diferença entre fibra Ăłptica e coxial, o que importa sĂŁos nĂșmeros, o impacto financeiro que causa na receita, na margem... Com o iperf vocĂȘ coloca o iperf server num ponto em comum (um servidor da rede, firewall, dmz, qualquer ponto onde todos os hosts devem acessar), e executa os testes com o iperf cliente a partir de um ponto de rede âbomâ e outro a partir do local onde com certeza Ă© problemĂĄtico. VocĂȘ terĂĄ conteĂșdo suficiente para produzir uma boa documentação (seguindo todos os processos gerenciais, administrativos, e bla-bla-bla), obviamente com argumentos e teorias/normas de cabeamento estruturado e vĂĄrios outros textos bonitos e acadĂȘmicos em sua documentação, o iperf entra como ponto chave (cereja do bolo) concluindo e comprovando tudo, sem possibilidades de dĂșvidas (dica: diretores querem ver grĂĄficos, imagens e cores, dificilmente irĂĄ ler sua documentação, mas vocĂȘ comprovarĂĄ que parte da rede compromete o funcionamento da comunicação, que no final das contas afeta o faturamento). Para quem nĂŁo Ă© de TI, textos (mesmo que simples) sĂŁo horrĂveis (por preconceito e preguiça, jĂĄ acham que nĂŁo vĂŁo entender o que estĂĄ escrito). Com isto, o sucesso de um projeto aprovado sĂŁo grĂĄficos e imagens bem colocadas e o esclarecimento de como afeta no faturamento (infelizmente a maioria entende TI como gastos e despesas, e profissional de redes como um âpica-fioâ).
Um terceiro e Ășltimo bom exemplo, digamos que vocĂȘ topou fazer uma pequena rede num escritĂłrio, como um bom estudante/profissional de redes, vocĂȘ fez tudo pelas normas, bonitinho, cabeamento estruturado, um mini-rack de parede, canaletas, keystone,... No final, como as boas empresas de infraestrutura, vocĂȘ entrega toda a documentação de como fez, por que fez, o que usou, como/onde/por que... Para certificar sua rede, mostrar todo o poder de transmissĂŁo e conexĂŁo, nada como uns bons logs do iperf, screenshots, e se a pessoa pagar a vista, adiantado e com uns trocados para o cafezinho, vocĂȘ faz testes ao vivo, em cores, e mostrando ao seu cliente que cada centavo investido valeu ;-).
Claro, pensei em 3 situaçÔes bem distintas e fĂĄceis de se encontrar por aĂ, mas hĂĄ vĂĄrios outros ambientes onde podemos inserir o iperf com muito sucesso (se vocĂȘ usou-o com sucesso e retornos positivos, dĂȘ um feedback)...
O BĂĄsico - Executando como Server No Windows
Via linha de comando (Iniciar > Executar > digite âcmdâ) entre na pasta onde o Iperf foi salvo (neste exemplo coloquei dentro de uma pasta chamada âiperfâ em Arquivo de programas).
Ao acessar a pasta onde estĂĄ o iperf (use o comando âdirâ para ter certeza, ele vai listar o que hĂĄ dentro da pasta). Para iniciar o iperf como servidor apenas digite: âiperf âsâ.
C:\ Arquivos de programas\Iperf > iperf âs
O iperf serå iniciado como servidor e estå aguardando conexÔes dos clientes (lembre-se da porta padrão).

No GNU/Linux
Considerando que a porta TCP 5001 esteja habilitada, entre com o comando abaixo em um terminal para o Iperf subir como o servidor:
root@server ~ # iperf
AparecerĂĄ a seguinte resposta:
root@server ~ # iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
Após executar o iperf como servidor, mantenha a janela do terminal aberta. Caso queira certificar-se que a porta estå aberta e recebendo conexÔes, digite seguinte comando em outro terminal:
root@server ~ # nmap 127.0.0.1 -p 5001 | grep 5001
O nmap irĂĄ responder da seguinte forma:
root@server ~ # nmap 127.0.0.1 -p 5001 | grep 5001
5001/tcp open commplex-link
Nesta resposta do nmap hå a seguinte informação:
PORTA(5001/tcp) STATUS(open) e SERVIĂO (commplex-link)
Neste comando que inseri, apenas pedi para que o nmap desse um âOlĂĄâ na minha maquina (127.0.0.1 ou localhost) na porta especificada (-p 5001). O resto foi apenas enfeite, a continuação ( | grep 5001 ) faz com que apenas seja exibido a linha onde contĂ©m este nĂșmero (5001).
Verifique tambĂ©m que apĂłs realizar este comando com o nmap, no terminal onde estĂĄ rodando o servidor iperf, ele deu uma âmovimentadaâ:
[ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 44382
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 0.0 sec 0.00 Bytes 0.00 bits/sec
O BĂĄsico â o Cliente
No Windows Numa segunda maquina, navegue pelo prompt até a pasta onde estå executåvel do iperf, digite o comando para executå-lo como cliente:
C:\Program Files\Iperf > iperf âc {IP.DO.IPERF.SERVER}
No Linux
Para executar no Linux, basta digitar o comando, pois o iperf foi instalado no linux (esta Ă© a diferença entre a versĂŁo do Windows e do Linux, no Windows nĂŁo hĂĄ instalação, sendo que vocĂȘ deve navegar pelo prompt atĂ© a pasta onde estĂĄ o executĂĄvel).
Neste exemplo iremos considerar que 172.22.254.254 seja o endereço ip de nosso servidor Iperf, e o cliente estĂĄ sendo executado numa maquina com ip 172.22.0.1, a saĂda do comando seria algo parecido como:

Neste exemplo acima, foi transferido 114 MBytes em 95,2 Mbits/sec.
Na maquina cliente, por linha de comando, digitando iperf â c e o IP do Iperf Server. Isto Ă© o suficiente para que o Iperf envie trĂĄfego TCP do client para o server durante 10 segundo (essa Ă© a configuração padrĂŁo). ApĂłs 10 segundos as informaçÔes sĂŁo mostradas, como na imagem acima.
Neste exemplo, em 10 segundos foram transferidos 114 MBytes, atingindo a velocidade de mĂ©dia de 95,2 Mbits/sec (normal em uma rede 100 Mbits). Note que no server tambĂ©m sĂŁo mostradas as estatĂsticas.
Utilizando UDP Outra opção Ă© adicionar o argumento âu nos dois lados (server e client) para que o teste seja efetuado com pacotes UDP.
Na inicialização do Servidor:
root@server ~ # iperf -s -u
No Windows:
C:\Program Files\Iperf> iperf -s âu
Como flag no cliente para informa-lo da utilização do protocolo UDP:
root@client~ # iperf -c 192.168.0.1 -u
No Windows:
C:\Program Files\Iperf> iperf âc 10.10.8.75 âu
Usando esta opção (UDP), no final da transmissĂŁo de pacotes, quando sĂŁo exibidas as estatĂsticas no server, aparecem mais trĂȘs itens: Jitter, nĂșmero total de pacotes transmitidos e pacotes perdidos.

Nos mesmos 10 segundos utilizados anteriormente, tivemos 0,018 milissegundos de jitter e nenhum pacote perdido, de 893 transmitidos.
Observe que a transferĂȘncia de dados foi menor, porque a taxa de transferĂȘncia padrĂŁo UDP no Iperf Ă© de 1 Mbps.
Se vocĂȘ quiser aumentar a banda utilize a opção âb do lado cliente:
root@client~ # iperf âc 10.10.8.75 âb 70M
No exemplo acima serå tranferido 70 Mbits/sec. Este opção funciona para o modo UDP apenas.
Argumentando... Mais OpçÔes
Além das opçÔes jå citadas, o Iperf ainda oferece outros argumentos, que podem ser utilizados de acordo com sua necessidade. As flags são inseridas como a maioria dos aplicativos em modo texto para GNU/Linux, seguindo a linha:
Para iniciar como servidor utilizando por padrão o protocolo TCP: iperf -s [ opçÔes ]
Para iniciar o cliente, indica-se o ip do servidor: iperf -c ip.do.iperf.server [ opçÔes ]
Para iniciar como servidor utilizando UDP: iperf -s -u [ opçÔes ]
Para iniciar o cliente, além ip do servidor, qdeve usar a flag indicando o uso de UDP: iperf -c -u ip.do.iperf.server [ opçÔes ]
Se o servidor foi iniciado apenas com o padrĂŁo (-s), ou seja, usando o TCP, o cliente obrigatoriamente vai ser executado tambĂ©m como TCP. Caso o servido foi iniciado usando a flag -u (para UDP), o cliente deverĂĄ usar â-uâ em todos os testes. NĂŁo Ă© possĂvel iniciar o servidor como UDP e rodar testes no cliente como TCP ou vice-versa.
OpçÔes gerais
As opçÔes âgeraisâ sĂŁo flags que podem ser utilizadas tanto no servidor quanto no cliente. -f, --format
à o formato com que serå exibido as informaçÔes, como Kbits, Mbits, Gbits, KBytes, Mbytes, Gbytes,...
No exemplo abaixo, executei o cliente com â-f Mbytesâ (caso queira, â--format MBytesâ), ele irĂĄ me reportar as informaçÔes em Mbytes. As informaçÔes que estarĂŁo sendo mostradas no servidor, continuam com o formato padrĂŁo (exibindo taxas de transferĂȘncias em Mbits).

-i, --interval n Por padrĂŁo, o iperf (tanto cliente como o servidor) irĂŁo realizar os testes durante 10 segundos e depois exibir o resultado para vocĂȘ. A flag â-i Nâ irĂĄ fazer com que o iperf exiba o status do teste a cada N intervalo de tempo que vocĂȘ definir. No meu exemplo, indiquei 1 segundo (-i 1), ou seja, a cada 1 segundo durante o teste, o iperf mostrarĂĄ o status das transmissĂ”es.

-l, --len N Com a flag â-lâ vocĂȘ define (em B, KB ou MB) o tamanho do buffer, no exemplo abaixo (o servidor estava sendo executado como UDP, flag â-uâ), inseri o nĂșmero 9999, como nĂŁo coloquei nenhuma letra indicativa apĂłs (B, KB ou MB), ele defin e como sendo Bytes.

-m, --print_mss Exibe o tamanho mĂĄximo do segmento (MTU - TCP/IP header).

-o, --output Redireciona as mensagens e logs do iperf (que por padrĂŁo sĂŁo exibidos ao concluir os testes) pra um arquivo, basta indicar o nome do mesmo.
-p, --port n Indica a porta a ser utilizada. Por padrĂŁo o iperf usa a 5001. Usando âiperf -s -p 8080â o servidor ficarĂĄ escutando conexĂ”es na porta 8080, e nos clientes vocĂȘ deverĂĄ usar a flag para indicar a porta em que o cliente enviarĂĄ os pacotes (exemplo, âiperf -c x.x.x.x -p 8080â).
-u, --udp Utiliza o protocolo UDP, ao invés do padrão TCP. Caso vå utilizå-lo, todos os iperfs (o servidor e os clientes) devem usar esta flag.

-x, --reportexclude
A flag -x seguida de uma ou mais das letras: C D M S V
Faz com que o iperf omita alguma informação. A letra C omitirĂĄ informação de conexĂŁo, D dados, M multicast, S de configuraçÔes/opçÔes, V de informaçÔes do servidor. No exemplo abaixo, utilizei â-x CMSVâ, ou seja, o iperf sĂł me mostrou informaçÔes relativas aos dados (o quanto foi transmido, em qual taxa de velocidade). Esta Ă© uma excelente flag, pois com ela vocĂȘ extrai exatamente a informação necessĂĄria, excluindo de seu relatĂłrio final dados que nĂŁo serĂŁo Ășteis.

-y, --reportstyle C Com a flag -y, o iperf exibirå as informaçÔes no formato CSV (separados por virgula).

-w, --window n Com TCP opção vocĂȘ determina o tamanho do socket buffer (ou TCP window size).

-B, --bind bind to , an interface or multicast address
-M, --mss n Configura o tamanho mĂĄximo de cada segmento de pacote TCP (MTU - 40 bytes)
-N, --nodelay Desabilita o delay para transmissÔes TCP
-V, --IPv6Version Configuração para uso do IPv6.
OpçÔes para o cliente
As opçÔes a seguir são de exclusividade da maquina em que estarå rodando o cliente do iperf.
-P , --parallel Simula a carga de transmissĂŁo de um nĂșmero N de clientes em paralelo. No exemplo abaixo, indiquei o nĂșmero 7, ou seja, o iperf enviarĂĄ conexĂ”es como se fossem 7 maquinas com iperfs clientes enviando transmissĂ”es ao mesmo servidor.

-T, --ttl O famoso âtime-to-liveâ, neste caso para multicast ( o valor default Ă© 1)
-n, --num NĂșmero de byte para transmissĂŁo (inseri um nĂșmero de em seguida as letras do formato, por exemplo â-n 35 KBâ).
-t, --time Tempo de transmissĂŁo dos testes (o valor default Ă© 10 segundos). No exemplo abaixo, inseri o â-t 15â para fazer testes por 15 segundos, juntamente com a flag â-i 1â para que o iperf exiba um status a cada 1 segundo (ao invĂ©s de apenas ficar esperando, como Ă© o padrĂŁo), tambĂ©m inseri o argumento para exibir os dados em Mbytes, por final, o â-uâ, pois na ocasiĂŁo estava rodando o servidor como udp. No final fica a seguinte linha de comando: iperf -c x.x.x.x -i 1 -t 15 -f Mbytes -u

-d, --dualtest Apesar do Iperf enviar trĂĄfego no sentido Client â> Server por padrĂŁo, podemos configurĂĄ-lo para que o teste seja executado nos dois sentidos simultaneamente.
Para isto, execute o Iperf Server da mesma forma (iperf âs) e do lado cliente, apenas adicione o argumento âd. root@client ~ # iperf -c 192.168.0.1 -d Verifique no exemplo abaixo que o iperf exibe as duas saidas:

Observe que desta vez temos duas linhas, sendo que em um sentido a transferĂȘncia atingiu 94,2 Mbits/s e no outro 35,7 Mbits/s. Se somarmos as duas temos 129,9 Mbits/s (abaixo dos 200 Mbits/s nominal de uma rede full duplexâŠ).
-r, --tradeoff Realiza o teste nos âdois sentidosâ, servidor â â cliente, semelhante ao argumento anterior (-d), porĂ©m neste os testes nĂŁos sĂŁo feitos simultĂąneos, mas individualmente.
-L, --listenport Indica a porta que serĂĄ utilizada para receber os testes bidirecionais descritos acima (-d e -r)
-b, --bandwidth
#[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u) -b Especifica a banda a ser utilizada (bandwith)
-F, --fileinput Inseri algum arquivo para ser transmitido como forma de dados.
-I, --stdin Inseri um arquivo para transmitir como entrada padrĂŁo (stdin)
OpçÔes para o Servidor
Além das OpçÔes Gerais, que podem ser utilizadas tanto no servidor quanto no cliente, o servidor possui algumas (na verdade, apenas 2)opçÔes exclusivas: -s, --server Iniciar o iperf como servidor (nem conto isto como uma opção...)
-U, --single_udp Inicia como UDP (ao invés de TCP para as transmissÔes como padrão)
-D, --daemon Inicia o servidor como um daemon.
Interface GrĂĄfica em JAVA
Junto com o iperf, estĂĄ disponibilizado para download o pacote jperf, justamente uma interface grĂĄfica em Java.
Realizando o download do pacote e descompactado-o, haverĂĄ o jperf.bat (para executĂĄ-lo em Windows) e o pacote jperf.sh para executar em Linux.
Este arquivo sh é apenas o comando para executar o jperf.jar com os parùmetros e flags necessårias para a maquina virtual java iniciar a aplicação (comigo funcionou perfeitamente tanto no SunJava Runtime quanto no OpenJDK, mas prefiro o OpenJDK..).
Na imagem abaixo estĂĄ a tela inicial quando executamos o jperf.

Logo de inicio, o jperf mostra o campo âiperf commandâ, informando qual o comando em modo texto que serĂĄ executado ao vocĂȘ escolher as opçÔes no modo grĂĄfico.
Logo abaixo, o modo em que o iperf serĂĄ executado: Servidor ou Cliente. Veja que habilitando uma das opçÔes, ficarĂĄ disponĂvel configuraçÔes que vemos anteriormente como flags. Por exemplo âParallel Streamsâ(opção â-Pâ em linha de comando). Note que alterando as opçÔes, automaticamente a caixa âcommandâ exibe como fica as opçÔes que vocĂȘ escolheu em modo linha de comando.

Ao lado esquerdo da janela, hå as opçÔes de configuração relativas as configuraçÔes de transmissão, pacotes, envio, entre outras.
EstĂŁo divididas em 3 blocos:



Lembrando, tudo que hĂĄ nos 3 blocos do lado esquerdo sĂŁo as flags que apresentei anteriormente em modo de linha de comando (bloco da camada de transporte, aplicação e IP), basta prestar atenção ao nome dos botĂ”es que vocĂȘ perceberĂĄ o que cada botĂŁo da interface grĂĄfica faz, como por exemplo: No bloco âTransport Layerâ hĂĄ os botĂ”es para ativar TCP ou UDP, ao ativĂĄ-los, abaixo Ă© habilitado as configuraçÔes de tamanho de buffer, pacotes, formato (em kbytes, mbytes,...) e caixa para inserir os valores. No bloco âApplication Layerâ, hĂĄ opção para o formato de saĂda das informaçÔes, intervalo para reportar o status dos testes, modo de teste (dual simultĂąneo ou individual)...
No lado direito, hå a exibição dos relatórios/logs/resultados dos testes... Estes são mostrados em duas formas:
Em log, exatamente igual ao mostrado em linha de comando. Mas em grĂĄficos, que Ă© o ponto mais interessante desta interface ;-)

Abaixo da ĂĄrea preta (exibição do grĂĄfico), temos o campo âoutputâ onde serĂĄ mostrado a saĂda que temos ao usar o iperf em modo de linha de comando, alĂ©m da opção de salvar os resultados.
Lembrete: tanto os blocos a esquerda quanto a ĂĄreas do grĂĄfico e do log sĂŁo redimensionĂĄveis (no caso dos blocos, vocĂȘ oculta-os), permitindo assim que vocĂȘ tenha maior foco ao que deseja extrair do iperf e de seus testes. (veja exemplos e explicaçÔes abaixo):
Abaixo temos duas imagens, a primeira trata-se do Jperf sendo executado como servidor, na segunda estĂĄ o cliente. No cliente (veja o campo onde mostra o comando) foi configurado para usar a opção âParallel Stream -Pâ que envia um nĂșmero X de conexĂ”es simultaneas, no nosso caso, 10 conexĂ”es.
Veja que tanto no cliente quanto no servidor, cada conexão possui uma cor diferente, que diferencia o comportamento de cada linha no gråfico da primeira imagem (servidor) ondeé mostrado a relação de cada conexão (cada cor) com tamanho/velocidade/tempo/largura de banda/atraso.
Obs.: Ambos estão sendo rodados em Debian, usando o OpenJDK (num deles, tive problemas ao usar o Java Sun), curiosidade: Na véspera de natal as 00hrs e 12Min ;-)


ConclusĂŁo
Este pequeno tutorial/Manual e How-to desenvolvi atravĂ©s de 1 mĂȘs (Dezembro/2011 a Janeiro/2012) pesquisando e testando o software iperf e sua interface grĂĄfica. A principal fonte de informaçÔes (como qualquer programa no Linux) foi sua Man-page e o seu site oficial (como qualquer outra coisa, procure sempre quem fez, depois procure quem usa, rsrsss). Obviamente tive como referencia tambĂ©m vĂĄrios outros sites, a maioria em InglĂȘs, pois hĂĄ falta de material do Iperf/Jperf em portuguĂȘs (isto tambĂ©m foi uma das coisas que me motivaram a desenvolver este material).
Tive 4 ambientes de rede para testar o iperf:
No primeiro, uma simples rede virtualizada para ter consciĂȘncia do software em questĂŁo. A maquina virtual e a hospedeira eram Linux. Num segundo ambiente de testes, usei duas maquinas fĂsicas (um pc e um notebook), ambos com placa de rede em Mbits, mas ligados entre sĂ por um cabo crossover (mal crimpado) ligado em um utp (ambos cat5e) atravĂ©s de uma emenda (dessas de plĂĄstico sem-vergonha vendidas em lojas como se fosse emenda âprofissionalâ). No terceiro ambiente, mostrei o iperf a um colega/profissional (PEIP InformĂĄtica) e testamos o jperf numa rede cabeada (megabit) com 100% das maquinas Windows. Por final, realizei alguns testes em minha pequena rede que tenho em casa, onde todos os equipamentos funcionam em gigabit (switch e interface das maquinas) com pach-cords cat.6 (certificados, Furukawa).
As screenshots neste manual referem-se a todos esses testes realizados, nĂŁo testei-o em wirelless, mas seria interessante mostrar a diferença entre cabeado e sem fio numa mesma rede (pois wirelless possui uma boa incidĂȘncia de perda de pacotes e problemas com a velocidade real/nominal devido a interferĂȘncias,...).
Minha rede estĂĄ lenta, e agora??
Existe pontos na qual deve-se tomar muito cuidado ao formalizar conclusÔes pelos logs e resultados do iperf:
Sistema Operacional: O sistema em que estĂĄ executando o iperf pode conter problemas com rede, como vĂrus ou conflitos de programas instalados ou atualizaçÔes, demorar para processar pacotes, firewall/antivĂrus ativados com âsistemas de detecçãoâ instalados,... Rede: Sua rede pode conter switches gerenciĂĄveis que bloqueiam determinados pacotes/protocolos ou conexĂ”es, analisadores e IDS's que podem aumentar o tempo de transmissĂŁo, controle de banda, VLAN, etc... (recomendo que conheça bem a rede antes de usar o iperf, algo nela pode afetar os resultados do iperf).
Então, antes de pensar em sua rede, faça o teste em vårios hosts diferentes, não só hardware diferente, mas Sistema operacional também.
Testou em vårios hosts, verificou as informaçÔes acima e continua lento???
A partir daqui inicia-se um trabalho mais profundo onde vocĂȘ irĂĄ utilizar sniffers, portscan e outras ferramentas mais avançadas no Linux para identificar os motivos de sua rede estar lenta.
Para isso, DICA: comece sua investigação seguindo a tabela OSI (checando os âitensâ em sua rede e em seus hosts a partir da camada 1 da tabela OSI atĂ© chagar na 7ÂȘ).
Geralmente lentidĂŁo em rede Ă© causada por cabos mal crimpados, plugs rj45 com aquela travinha quebrada, placas de rede defeituosa, cabos UTP danificados ou velhos (tanto os pach-cords quanto os usandos em backbone, manobra em switch ou pach panel), redes feitas por eletricistas ou amiguinhos pseudo-tecnicos que cobram barato (sem seguir regras e normas bĂĄsicas de rede, como a curvatura do cabo, distĂąncia de geradores de interferĂȘncias, entre muitas outras...), produtos de mĂĄ qualidade, cascateamento ou loopback de switch, etc...
ApĂłs verificar tudo isto, vĂĄ subindo na camada OSI, outras coisas que sĂŁo comuns achar por aĂ, Ă© servidores emitindo muito broadcast, serviços que geram pacotes excessivos e desnecessĂĄrios na rede, servidores e switchs mal configurados, etc...
Esta etapa, foge dos âpoderesâ do iperf, daĂ vai de seus conhecimentos, estudo do que estĂĄ funcionando na rede e suas particularidades, utilização de sniffers e portscans, entre muitos outros aspectos. Veremos isto num futuro tutorial, correto? Vamos ver....
Download e Links:
Site Oficial: https://iperf.sourceforge.net/
Projeto do Iperf 3.0 (atualmente beta na versĂŁo 4) https://code.google.com/p/iperf/
Os programas semelhantes mencionados no inicio do tutorial:
TTCP: https://www.pcausa.com/Utilities/pcattcp.htm
BWPing: https://bwping.sourceforge.net/




