99
UNIVERSIDADE SÃO FRANCISCO Engenharia de Computação BRUNO GALASSO MOLINARI IMPLEMENTAÇÃO DE AMBIENTE DE TESTES AUTOMATIZADOS PARA AVALIAÇÃO DE PARÂMETROS DE QoS EM REDES DE COMUNICAÇÃO DE DADOS BASEADO EM SOFTWARE LIVRE Itatiba 2010

IMPLEMENTAÇÃO DE AMBIENTE DE TESTES …lyceumonline.usf.edu.br/salavirtual/documentos/1886.pdf · AUTOMATIZADOS PARA AVALIAÇÃO DE PARÂMETROS DE QoS EM REDES DE COMUNICAÇÃO

Embed Size (px)

Citation preview

UNIVERSIDADE SÃO FRANCISCO

Engenharia de Computação

BRUNO GALASSO MOLINARI

IMPLEMENTAÇÃO DE AMBIENTE DE TESTES

AUTOMATIZADOS PARA AVALIAÇÃO DE PARÂMETROS

DE QoS EM REDES DE COMUNICAÇÃO DE DADOS

BASEADO EM SOFTWARE LIVRE

Itatiba

2010

BRUNO GALASSO MOLINARI – RA 002200600186

IMPLEMENTAÇÃO DE AMBIENTE DE TESTES

AUTOMATIZADOS PARA AVALIAÇÃO DE PARÂMETROS

DE QoS EM REDES DE COMUNICAÇÃO DE DADOS

BASEADO EM SOFTWARE LIVRE

Monografia apresentada ao Curso de

Engenharia de Computação da

Universidade São Francisco, como requisito

parcial para obtenção do título de Bacharel

em Engenharia de Computação.

Orientador: Prof. Marcelo Augusto

Gonçalves Bardi

Itatiba

2010

AGRADECIMENTOS

Agradeço primeiramente aos meus pais, Ismael e Solange, que me deram o apoio

necessário durante toda esta minha trajetória, ajudando a alcançar meus objetivos.

À minha namorada Mariana, pela paciência, incentivo e carinho.

Ao meu orientador Prof. Marcelo Agusto Gonçalves Bardi cujo auxílio e cobranças

foram fundamentais para a realização desse trabalho.

Ao meu chefe e amigo Tadeu, pelo apoio e compreensão durante esse período.

Ao meu colega de trabalho e amigo Wallace, por ter me incentivado a ingressar na área

de engenharia.

À FTD Comunicação de Dados Ltda. pelo apoio durante a faculdade e empréstimo dos

equipamentos utilizados para realização dos testes deste trabalho.

Enfim, a todos que me apoiaram neste momento da minha vida. Obrigado.

RESUMO

Nos últimos anos, houve um crescimento em aplicações de rede que utilizam recursos

multimídia, como vídeo em tempo real, VoIP, videoconferência, telemedicina e muitas outras.

Essas aplicações normalmente exigem que a rede por onde trafegam possuam parâmetros de

qualidade de serviço (QoS) bem definidos, o que requer que muitas instalações e

configurações de rede atualmente sejam realizadas visando obter esta garantia de qualidade

para alguns serviços. Dessa forma, este trabalho objetiva desenvolver um ambiente para

testar, de forma automatizada, se a configuração de uma determinada rede está de acordo com

os parâmetros exigidos pelas aplicações conforme as informações fornecidas pelo usuário.

Todo o desenvolvimento do sistema foi realizado utilizando-se como base o sistema

operacional Linux e softwares como ping, iperf, apache, PHP e MySQL. Através de uma

interface WEB o usuário informa os parâmetros de qualidade da rede que deseja avaliar. Após

a confirmação do usuário o sistema configura automaticamente todos os softwares envolvidos

e realiza o teste em segundo plano, durante o tempo determinado pelo usuário. Ao final do

teste o sistema avalia as informações obtidas e informa os resultados ao usuário através de

tabelas, gráficos e observações sobre as condições encontradas. A partir dessas informações é

possível saber se a rede está configurada corretamente ou se são necessárias alterações em sua

configuração.

Palavras-chave: parâmetros de QoS. redes de computadores. testes.

ABSTRACT

In recent years, has been a growth in network applications that use multimedia resources like

real time video, VoIP (Voice over IP), video conference, telemedicine and many more. These

applications typically require of the network through where passing have parameters of

quality of service (QoS) well defined, what requires that many installations and network

configurations currently being performed to obtain this guarantee of quality for some services.

Thus, this work have the objective to develop an environment for testing, an automated way,

if the configuration of a network is in according to the parameters required by the

applications, based in information provided by user. All development of the system was

performed using as a base the Linux operating system and software such as ping, iperf,

Apache, PHP and MySQL. Through a Web interface, the user informs the quality parameters

of the network that want to evaluate. After user's confirming, the system automatically

configures all the software involved and conducts a test in the background during the time set

by user. At the end of the test, the system evaluates the information obtained and reports the

results to the user through tables, graphs and comments on the conditions found. From this

information it is possible to know if the network is configured correctly or if changes are

required in your configuration.

Keywords: QoS parameters. computer networks. tests.

LISTA DE FIGURAS

FIGURA 1 - Camadas TCP/IP ................................................................................................. 15

FIGURA 2 - Diagrama geral dos casos de uso ......................................................................... 35

FIGURA 3 - Diagrama de seqüência de um teste completo ..................................................... 37

FIGURA 4 - Diagrama de classes............................................................................................. 38

FIGURA 5 - Estrutura de dados ............................................................................................... 39

FIGURA 6 - Diagrama do laboratório de teste ......................................................................... 40

FIGURA 7 - Laboratório de testes visão geral ......................................................................... 43

FIGURA 8 - Laboratório de testes roteadores .......................................................................... 43

FIGURA 9 - Gráfico de atraso no teste 3 do cenário 2............................................................. 45

FIGURA 10 - Gráfico de atraso no teste 2 do cenário 2........................................................... 45

FIGURA 11 - Gráfico de atraso no teste 1 do cenário 3 ........................................................... 47

FIGURA 12 - Gráfico de atraso no teste 2 do cenário 3........................................................... 47

LISTA DE TABELAS

TABELA 1 - Classes de serviço ITU-T .................................................................................... 21

TABELA 2 - Classes de serviço e limites máximos ................................................................. 22

TABELA 3 - Configurações dos fluxos de dados no cenário 1 ................................................ 41

TABELA 4 - Configurações dos fluxos de dados no cenário 2 ................................................ 41

TABELA 5 - Configurações dos fluxos de dados no cenário 3 ................................................ 42

TABELA 6 - Resultados esperados nos testes no cenário 1 ..................................................... 44

TABELA 7 - Resultados dos testes no cenário 1 ...................................................................... 44

TABELA 8 - Resultados esperados nos testes no cenário 2 ..................................................... 45

TABELA 9 - Resultados dos testes no cenário 2 ...................................................................... 46

TABELA 10 - Resultados esperados nos testes no cenário 3 ................................................... 47

TABELA 11 - Resultados dos testes no cenário 3 .................................................................... 48

LISTA DE ABREVIATURAS E SIGLAS

AF – Assured Forwarding

BTC – Bulk Transport Capacity

Diffserv - Differentiated Service

DS – Differentiated Service

DSCP - Diffserv code point

EF – Expedited Forwarding

FIFO – First In, First Out

IETF – Internet Engineering Task Force

Intserv – Integrated Services

IP – Internet Protocol

IPDV – IP Delay Variation

IPER – IP Packet Errored Ratio

IPLR – IP Packet Loss Ratio

IPTD – IP Transfer Delay

IPPM – IP Performance Metrics

ISO – International Organization for Standardization

ITU – International Telecommunication Union

ITU-T – ITU Telecommunication Standardization Sector

OWD – One-Way Delay

PHB – Per-Hop Behaviors

PHP – Hypertext Preprocessor

QoS – Quality of Service

RFC – Request for Comments

RSVP – Resource Reservation Protocol

RTD – Round Trip Delay

RTT – Round Trip Time

SLA – Service Level Agreements

TCP – Transmission Control Protocol

TOS – Type of Service

UDP – User Datagram Protocol

UML – Unified Modeling Language

UTC – Coordinated Universal Time

VOIP – Voice over IP

WFQ – Weighted Far Queue

SUMÁRIO

1 INTRODUÇÃO ................................................................................................................... 12

1.1 OBJETIVOS ....................................................................................................................... 13

1.2 ORGANIZAÇÃO DO TRABALHO ................................................................................. 13

2 ASPECTOS TEÓRICOS .................................................................................................... 15

2.1 ARQUITETURA INTERNET E TCP/IP ............................................................................ 15

2.2 QUALIDADE DE SERVIÇO ............................................................................................ 16

2.2.1 Parâmetros de QoS .......................................................................................................... 17

2.2.1.1 Confiabilidade .............................................................................................................. 17

2.2.1.2 Delay ............................................................................................................................. 18

2.2.1.3 Jitter .............................................................................................................................. 19

2.2.1.4 Throughput ................................................................................................................... 20

2.2.1.5 Classes de Serviço ........................................................................................................ 21

2.2.2 Técnicas para Alcançar Qualidade de Serviço ................................................................ 22

2.2.2.1 Superdimensionamento ................................................................................................ 22

2.2.2.2 Armazenamento em Buffers.......................................................................................... 23

2.2.2.3 Modelagem de Tráfego ................................................................................................. 23

2.2.2.4 Mecanismos de Escalonamento .................................................................................... 24

2.2.2.4.1 FIFO .......................................................................................................................... 24

2.2.2.4.2 Prioridade .................................................................................................................. 25

2.2.2.4.3 Varredura Cíclica ....................................................................................................... 25

2.2.2.4.4 WFQ .......................................................................................................................... 25

2.2.2.5 Mecanismos de Regulação ........................................................................................... 26

2.2.2.5.1 Algoritmo de Balde Furado ....................................................................................... 26

2.2.2.5.2 Algoritmo de Balde de Símbolos ............................................................................... 27

2.2.3 Serviços Integrados e Serviços Diferenciados ................................................................ 27

2.2.3.1 Serviços Integrados ...................................................................................................... 27

2.2.3.2 Serviços Diferenciados ................................................................................................. 28

2.2.3.3 Intserv X Diffserv ......................................................................................................... 29

2.2.4 Utilização de QoS em redes ............................................................................................. 30

3 METODOLOGIA ................................................................................................................ 32

3.1 FERRAMENTAS ............................................................................................................... 32

3.2 DESENVOLVIMENTO ..................................................................................................... 33

3.3 REQUISITOS ..................................................................................................................... 34

3.4 CASOS DE USO ................................................................................................................ 35

3.4.1 Iniciar Teste Lado Mestre ................................................................................................ 35

3.4.2 Iniciar Teste Lado Escravo .............................................................................................. 36

3.4.3 Iniciar Testes Anteriores .................................................................................................. 36

3.5 DIAGRAMAS DE SEQÜÊNCIA ...................................................................................... 36

3.6 DIAGRAMA DE CLASSES .............................................................................................. 38

3.7 MODELAGEM DE DADOS ............................................................................................. 38

3.8 METODOLOGIA DE TESTES ......................................................................................... 39

3.9 LABORATÓRIO DE TESTES .......................................................................................... 40

3.10 CENÁRIOS DE TESTES ................................................................................................. 40

3.10.1 Cenário 1 ....................................................................................................................... 40

3.10.2 Cenário 2 ....................................................................................................................... 41

3.10.3 Cenário 3 ....................................................................................................................... 41

3.11 REALIZAÇÃO DOS TESTES ......................................................................................... 42

4 RESULTADOS E DISCUSSÕES ....................................................................................... 44

4.1 RESULTADOS NO CENÁRIO 1 ...................................................................................... 44

4.2 RESULTADOS NO CENÁRIO 2 ...................................................................................... 45

4.3 RESULTADOS NO CENÁRIO 3 ...................................................................................... 46

4.4 CONSIDERAÇÕES SOBRE OS RESULTADOS ............................................................. 48

5 CONCLUSÃO ...................................................................................................................... 50

5.1 EXTENSÕES ..................................................................................................................... 50

REFERÊNCIAS ..................................................................................................................... 52

REFERÊNCIAS CONSULTADAS ....................................................................................... 54

APÊNDICES ........................................................................................................................... 55

APÊNDICE A – SHELL SCRIPT PARA TRATAMENTO DOS DADOS GERADOS

PELO IPERF: APAGARESUMO.SH .................................................................................. 56

APÊNDICE B – SHELL SCRIPT PARA TRATAMENTO DOS DADOS GERADOS

PELO PING: PINGS.SH ........................................................................................................ 57

APÊNDICE C – AGENTE ESCRAVO: SERVIDOR.PHP ................................................ 58

APÊNDICE D – SCRIPT PHP PARA ARMAZENAR DADOS DO TESTE E FLUXO

NA BASE DE DADOS E INICIALIZAR O AGENTE MESTRE: SALVAR_TESTE.PHP

.................................................................................................................................................. 61

APÊNDICE E – AGENTE MESTRE: CLIENTE.PHP ...................................................... 63

APÊNDICE F – SCRIPT PHP PARA GERAR GRAFICOS: GERA_GRAFICO.PHP .. 67

APÊNDICE G – PAGINA PHP COM OS RESULTADOS E GRÁFICOS DO TESTE:

RESULTADOS_TESTE.PHP ................................................................................................ 72

APÊNDICE H – RESULTADOS COMPLETOS DO LABORATÓRIO DE TESTES ... 75

APÊNDICE I – EXEMPLOS DE TELAS DE EXECUÇÃO DO SISTEMA ................... 91

APÊNDICE J – CONFIGURAÇÕES DOS ROTEADORES ............................................ 95

12

1 INTRODUÇÃO

Nos últimos anos, houve um crescimento em aplicações de rede que utilizam recursos

multimídia, como vídeo em tempo real, VoIP , videoconferência, telemedicina e muitas outras.

Essas aplicações normalmente têm como característica uma taxa de transmissão de dados

constante e as comunicações ocorrem utilizando-se da infra-estrutura da Internet. Entretanto,

em particular as aplicações de multimídia, são muito sensíveis ao atraso fim-a-fim e a

variação do atraso, mas podem tolerar perdas de dados ocasionais [1].

O modelo da Internet trabalha com o sistema de melhor esforço, compartilhando a

largura de banda entre todos os serviços. Com a implantação de qualidade de serviço (QoS)

em uma rede, por outro lado, é possível que aplicações de multimídia e de tempo real tenham

um bom desempenho e funcionem de forma adequada.

Com o aumento da utilização dessas tecnologias que requerem cada vez mais

qualidade de serviço, muitas empresas estão instalando em suas redes equipamentos com

capacidade de prover essa qualidade de serviço, sendo necessárias ferramentas para testar e

verificar se os equipamentos instalados e as configurações realizadas estão funcionando da

maneira correta.

Para a realização de testes de QoS são necessários equipamentos específicos e

normalmente com custo elevado, como os equipamentos OneTouch™ Series II Network

Assistant [2] da empresa Fluke Networks [3] ou o SmartClass Ethernet [4] da empresa JDSU

[5], que são a linha básica de equipamentos de testes desses fabricantes e realizam testes com

somente um fluxo de dados, sendo assim não permitem testar os parâmetros de QoS de forma

completa, apenas de um fluxo, não o comportamento com diferentes fluxos, e já apresentam

custos elevados. Já equipamentos capazes de realizar testes com vários fluxos de forma

simultânea como o EtherScope™ Series II Network Assistant [6] da fabricante Fluke

Networks ou a série T-BERD/MTS [7] da JDSU, possuem um custo muito maior, muitas vezes

inviáveis para algumas empresas.

Uma alternativa para realização desses tipos de teste é a utilização de vários

computadores para gerar fluxos diferentes e coletar dados manualmente para criar e formatar

relatórios com os resultados dos testes. Normalmente, os testes são realizados utilizando a

ferramenta iperf para gerar os fluxos de dados em computadores diferentes. Como é uma

ferramenta que não possui interface gráfica e somente funciona em modo texto, é necessário

após a sua execução copiar a saída de dados no prompt e formatá-los para uma melhor

13

apresentação.

Em alguns casos são utilizados vários fluxos em um mesmo computador, sendo

necessário inserir as marcas de QoS para distinguir os fluxos; o iperf é capaz de realizar essa

tarefa. Porém, uma desvantagem nesse tipo de testes é que além de exigir vários

computadores, é necessário realizar diversas configurações, executar vários comandos em

modo texto e criar o relatório manualmente através da captura dos dados nos diversos

computadores utilizados.

Nesse contexto, uma ferramenta baseada em software livre que realize o teste e gere

relatórios de forma automatizada, aliada a não necessidade de vários computadores, traria

uma maior agilidade e redução nos custos desses procedimentos.

1.1 Objetivos

Este trabalho tem por objetivo implementar um ambiente de testes automatizados para

avaliar parâmetros de QoS em redes de comunicação de dados, utilizando ferramentas

baseadas em software livre. Os parâmetros avaliados serão atraso, variação de atraso, perda de

pacotes e garantia de banda.

1.2 Organização do Trabalho

Primeiramente será apresentada, na seção de Aspectos Teóricos, a fundamentação

teórica sobre qualidade de serviço em redes e telecomunicações, incluindo seus parâmetros

principais, técnicas para provê-la em redes, uma análise sobre as principais arquiteturas e

como a qualidade de serviço está sendo implantada e utilizada atualmente.

Em seguida, a seção de Metodologia apresenta as ferramentas e a metodologia

utilizada no desenvolvimento dos softwares que compõem o sistema, além da documentação

do sistema segundo a abordagem UML.

Na seção de Testes e Resultados serão detalhados os cenários de testes e a realização

dos mesmos. Também serão mostrados os resultados obtidos e uma análise sobre eles.

Por fim, as Conclusões apresentam os objetivos alcançados, o que pôde ser aprendido

14

durante o desenvolvimento e quais as principais contribuições desse projeto.

15

2 ASPECTOS TEÓRICOS

Esse capítulo apresenta a fundamentação teórica para o desenvolvimento do sistema e

análise dos seus resultados.

2.1 Arquitetura Internet e TCP/IP

O modelo de referência TCP/IP é utilizado como base para a Internet. É um modelo de

quatro camadas sendo elas: Física/Enlace, Rede, Transporte e Aplicação. A Figura 1 apresenta

um diagrama que representa as quatro camadas TCP/IP.

FIGURA 1 - Camadas TCP/IP

Os protocolos da Internet são uma suíte de protocolos, onde os mais conhecidos são o

TCP e o IP, que devido a sua popularidade deram o nome ao modelo de referência da Internet.

Essa suíte de protocolos inclui, além do TCP/IP, muitos outros protocolos divididos nas três

camadas superiores do modelo de referência TCP/IP [8].

16

A camada de rede da Internet fornece um único modelo de serviço conhecido como

serviço de melhor esforço. Com o serviço de melhor esforço, não há garantia de que a

temporização entre pacotes seja preservada, não há garantias de que os pacotes sejam

recebidos na ordem que foram enviados e não há garantia da eventual entrega dos pacotes

transmitidos [1].

Ainda, o serviço de melhor esforço compartilha a largura de banda entre todos os

serviços, os pacotes são encaminhados da melhor forma possível e quando há

congestionamento, os pacotes são descartados sem distinção.

2.2 Qualidade de Serviço

Segundo Oodan et al. [9], qualidade pode ser definida e expressada em termos de

parâmetros que indicam benefícios para o usuário. Esses parâmetros podem ser expressos de

forma quantitativa ou qualitativa. Um conjunto de critérios de qualidade que contêm os

benefícios de um produto ou serviço para o usuário.

A ISO define qualidade na norma ISO 8402 como “A totalidade das características de

uma entidade que lhe conferem a capacidade de satisfazer necessidades explícitas e

implícitas” [10].

A ITU define Qualidade de Serviço (QoS) na recomendação E.800, como sendo o

efeito coletivo provocado pelas características de desempenho de um serviço, determinando o

grau de satisfação do usuário do serviço [11].

A IETF considera como QoS a capacidade de segmentar o tráfego ou de diferenciar

tipos de tráfego para que a rede trate esses fluxos de forma diferente dos outros. Assim, QoS

engloba tanto a qualificação do serviço quanto o desempenho global da rede para cada

categoria. Do ponto de vista da rede, QoS é a habilidade de um elemento de rede (por

exemplo, uma aplicação, host ou roteador) de ter diferentes níveis de garantia para que o

requisitos de tráfego e serviço possam ser satisfeitos, gerenciando a banda de acordo com a

demanda dos serviços e das configurações da rede [12].

A implantação de qualidade de serviço (QoS) em uma rede, baseada na arquitetura da

Internet, é o que permite que aplicações de multimídia e de tempo real tenham um bom

desempenho e funcionem de forma adequada. Com o uso de QoS, os pacotes são marcados

para distinguir os tipos de serviços e os roteadores são configurados para criar filas distintas

17

para cada aplicação, de acordo com as prioridades das mesmas. Assim, uma faixa da largura

de banda é reservada e, no caso de congestionamento, determinados tipos de fluxos de dados

ou aplicações têm prioridade na entrega.

A qualidade de serviço é medida fim-a-fim. Mesmo que a rede seja formada por vários

elementos, o desempenho individual de cada elemento não é levado em consideração na

análise da qualidade de um serviço. A QoS é específica para cada serviço e é expressa por um

conjunto único de parâmetros [12].

2.2.1 Parâmetros de QoS

Em uma rede IP, uma seqüência de pacotes, desde uma origem até um destino, é

chamada de fluxo. As necessidades de cada fluxo podem ser caracterizadas por quatro

parâmetros principais: confiabilidade (perda de pacotes), atraso fim-a-fim (delay), variação do

atraso (jitter) e largura de banda (throughput). Juntos esses parâmetros definem a QoS que o

fluxo exige [13].

Atualmente existem dois grupos de trabalhos principais trabalhando na definição de

padrões de métricas para medição de Qualidade de Serviço em redes IP, a IPPM e a ITU-T

[14].

A IPPM é parte da IETF, e sua tarefa é desenvolver critérios sólidos para definir todos

os conceitos relacionados à métricas de desempenho. Seu foco é no desenvolvimento de

padrões de métricas que possam ser aplicados em medições de qualidade, desempenho e

confiabilidade de comunicações na Internet. Já a ITU-T usa uma abordagem mais teórica e

genérica [14].

2.2.1.1 Confiabilidade

Segundo Tanenbaum [13], a confiabilidade em redes IP está relacionada à capacidade

da mesma em entregar os pacotes transmitidos sem erros e sua medida é a quantidade de

pacotes perdidos ou com erro. A quantidade de pacotes perdidos pode ser obtida através da

comparação do número de pacotes transmitidos pela origem com o número de pacotes

18

recebidos no destino, sendo o ideal que não existam perdas de pacotes, mas isso nem sempre é

possível. Nenhum bit de um pacote pode ser entregue de forma incorreta. Em geral, esse

objetivo é alcançado calculando-se o total de verificação de cada pacote na origem e

conferindo-se o total de verificação no destino [13].

Segundo Kurose e Ross [1], em uma rede vários fatores podem contribuir para que um

pacote não seja entregue ou faça com que ele seja descartado: um erro no roteamento pode

levar o pacote a um destino errado ou não encontrar o destino correto; a queda de um enlace

durante a transmissão do pacote ou o excesso de tráfego em um roteador pode lotar os seus

buffers de saída, causando o descarte do pacote.

Diferentes tipos de aplicações podem ser mais ou menos tolerantes a falhas.

Aplicações de multimídia como, por exemplo, VOIP, dependendo da forma como a voz é

codificada e de como a perda é tratada no receptor, é capaz de funcionar com taxas de até

20% de perda de pacotes [1]. Já aplicações como correio eletrônico ou transferência de

arquivos não podem ter fragmentos das informações perdidas [13].

De acordo com Kurose e Ross [1], vemos que a perda de pacotes pode ser contornada

utilizando-se o protocolo TCP, pois o mesmo realiza a retransmissão dos pacotes perdidos,

mas essa retransmissão aumenta o atraso fim-a-fim, o que não é pode ser aceitável em alguns

tipos de aplicações, por exemplo, videoconferência.

A perda de pacotes é sempre analisada em uma direção, pois o tráfego em redes IP

pode ser assimétrico, isto é, o caminho de resposta nem sempre é o mesmo do de envio, e

porque algumas aplicações de tempo real e UDP são unidirecionais [14].

Enquanto a IPPM considera pacotes perdidos e pacotes com erro como uma única

métrica, a ITU-T define a métrica IP Packet Loss Ratio para os pacotes perdidos e a IP Packet

Errored Ratio para pacotes com erro [14].

2.2.1.2 Delay

Delay, ou atraso fim-a-fim, é o acúmulo de atrasos de processamento, atrasos de

transmissão, atraso de filas, atraso de propagação nos enlaces e atrasos de processamento em

sistemas finais [1].

Segundo Braun et al. [14], podemos considerar dois tipos de atraso:

One-Way Delay, representa o atraso em uma única direção, isto é, do host de

19

origem ao host de destino, é o tempo que se passa desde que o primeiro bit deixa a

origem até que o último bit chegue ao destino. Um problema crítico nessa

abordagem é que ambos os hosts, destino e origem, precisam estar com os relógios

sincronizados com precisão, utilizando, por exemplo, uma fonte de tempo UTC e

nem sempre isso é possível [14];

Round-Trip Delay, que é a soma do atraso nas duas direções, do envio do pacote

da origem ao destino e a reposta na direção contraria. Utiliza as marcas de tempo

na origem e é obtido através da diferença entre o tempo de envio e o tempo de

resposta [14]. Como não necessita de sincronismo de tempo entre os hosts, é mais

fácil de ser medido. Muitas aplicações realizam esse tipo de medição, por

exemplo, a ferramenta ping. Essa métrica também é conhecida como Round Trip

Time.

O atraso é uma métrica muito importante, pois descreve o grau de interatividade e a

demora de uma comunicação [14]. Por exemplo, para aplicações de áudio altamente

interativas, como o telefone por Internet, atrasos fim-a-fim menores do que 150 ms não são

percebidos pelo ouvido humano; atrasos entre 150 ms e 400 ms podem ser aceitáveis, mas não

são o ideal, e atraso que excedem 400 ms podem atrapalhar seriamente a interatividade [1].

Já aplicações não interativas, como transferência de arquivos e correio eletrônico, não

são sensíveis ao atraso. Se todos os pacotes estiverem uniformemente atrasados alguns

segundos, não haverá nenhum dano [13].

A IPPM utiliza as duas métricas, OWD e RTD, já a ITU-T define apenas a métrica IP

Transfer Delay com as mesmas características da métrica One-Way Delay [14].

2.2.1.3 Jitter

A variação de atraso nos tempos de chegada de pacotes é chamada de jitter [4].

Variação de atraso de pacote significa que os pacotes experimentam atrasos diferentes dentro

da mesma corrente de pacotes [1].

Segundo Kurose e Ross [1], a principal causa da ocorrência de jitter são os atrasos

aleatórios de fila nos roteadores, isto é, pacotes do mesmo fluxo podem passar mais ou menos

tempo na fila de saída dos roteadores no caminho.

O jitter afeta principalmente aplicações de multimídia como áudio e vídeo. Se o

20

receptor ignorar a presença de variação de atraso e reproduzir as porções de dados assim que

elas chegam, então a qualidade de áudio ou vídeo poderá facilmente se tornar ininteligível no

receptor [1].

De acordo com Kurose e Ross [1], algumas técnicas podem ser utilizadas para tentar

eliminar a variação de atraso, como a utilização de números de seqüência, marcas de tempo e

atraso de reprodução (utilização de buffers).

Em algumas aplicações, como vídeo por demanda, o jitter pode ser eliminado pelo

armazenamento em buffer no receptor, seguido pela busca de dados para exibição no buffer, e

não na rede em tempo real. No entanto, para outras aplicações, em especial aquelas que

exigem interação em tempo real entre pessoas, como telefonia via Internet e

videoconferência, o retardo inerente do armazenamento em buffer não é aceitável [13].

Segundo Braun et al. [14], tanto a ITU-T quanto a IPPM utilizam o mesmo termo para

variação de atraso, IP Delay Variation. Ele é definido como a diferença do atraso de um par

de pacotes de um mesmo fluxo, não são especificados quais pacotes devem ser usados, mas

normalmente são utilizados pacotes consecutivos. O IPDV é um número real, positivo ou

negativo, e só pode ser definido com dois pacotes. Essa métrica define os limites mínimos dos

buffers de recepção e é importante para interatividade (buffers pequenos) e qualidade da

comunicação (pacotes muito atrasados são perdidos). A ITU-T define para classes de tráfego

de tempo real o limite máximo de 50 ms de variação de atraso.

Conforme Braun et al. [14], nas definições da IPPM e da ITU-T, o IPDV é diferente do

jitter. O jitter é obtido através da diferença entre o atraso em uma direção de um pacote

especifico e a média do atraso em uma direção dos pacotes em um intervalo de tempo.

2.2.1.4 Throughput

Segundo Dattatreya [15], a definição geral para throughput de qualquer sistema é a

taxa de produção de saídas bem sucedidas. Em comunicação de dados, é a taxa total de bits,

calculada usando todos os bits dos pacotes recebidos corretamente.

Throughput também pode ser representado como largura de banda e, de acordo com

Tanenbaum [13], diferentes tipos de aplicações têm necessidades de largura de banda

diferentes, correio eletrônico e login remoto, por exemplo, não exigem muita largura de

banda, já todas as aplicações de vídeo necessitam de um grande volume desse recurso.

21

A IPPM define a métrica Bulk Transport Capacity, e a define como a capacidade

máxima de transporte de um link utilizando uma única conexão com um protocolo com

prevenção de congestionamento (isto é, TCP), onde todos os cabeçalhos, retransmissões ou

perdas são subtraídas da performance geral. E fornece uma idéia do máximo de performance

do ponto de vista do usuário quando ocorrem transferências de alto volume de tráfego[14].

A unidade de medida de throughput é em bits por segundo (bps), podendo também ser

expressa em Kbps, Mbps, Gbps, etc. [14].

O throughput é obtido dividindo o número de bits transmitidos com sucesso pelo

tempo em segundos transcorridos entre o inicio e o fim da transmissão.

2.2.1.5 Classes de Serviço

Varias grupos de criação de padrões tentam dividir os serviços em categorias (Classes

de Serviço de QoS). A ITU-T sugere a definição de seis classes resumidas na Tabela 1.

TABELA 1 - Classes de serviço ITU-T

Classe de Serviço Características

0 Tempo real, sensível ao jitter, altamente interativa

1 Tempo real, sensível ao jitter, interativa

2 Transação de dados, altamente interativa

3 Transação de dados, interativa

4 Baixa perda (transferência de dados, streaming de vídeo)

5 Aplicações padrão de redes IP

Segundo Marchese [12], a ITU-T define na recomendação Y.1541 classes de serviço

genéricas baseadas nos parâmetros de QoS apresentados anteriormente. Nessa recomendação,

a ITU-T associa cada parâmetro (IPTD, IPDV, IPLR e IPER) a um limite máximo para o

mesmo em cada classe de serviço, que refletem os requisitos para os diferentes tipos de

aplicação. Os valores para cada classe de serviço podem ser vistos na Tabela 2.

22

TABELA 2 - Classes de serviço e limites máximos

Classe de Serviço IPTD (ms) IPDV (ms) IPLR IPER

0 100 50 1x10-3

1x10-4

1 400 50 1x10-3

1x10-4

2 100 N* 1x10-3

1x10-4

3 400 N* 1x10-3

1x10-4

4 1000 N* 1x10-3

1x10-4

5 N* N* N* N*

*N – Não especificado

2.2.2 Técnicas para Alcançar Qualidade de Serviço

Na seção 2.2.1 foram identificados os requisitos de qualidade de serviço. Nesta seção

serão apresentadas as técnicas que podem ser utilizadas para garantir os requisitos e prover

qualidade de serviço.

2.2.2.1 Superdimensionamento

Uma solução prática para garantir a qualidade de serviço é fornecer tanta capacidade

de roteadores, tanto de espaço de buffers e tanta largura de banda que os pacotes

simplesmente são transmitidos com enorme facilidade [13].

Segundo Marchese [12], existe um erro em pensar que o superdimensionamento vai

solucionar todos os problemas de QoS, e que aumentar a largura de banda é uma solução mais

simples que fazer o gerenciamento da qualidade de serviço. Portanto, o

superdimensionamento não pode ser visto realmente com uma solução, pois ainda será

necessário o gerenciamento da qualidade de serviço para poder garantir os requisitos de

23

qualidade de serviço, por exemplo, em um caso em que ocorram muito mais acessos a um

sistema do que o previsto e a largura de banda seja insuficiente.

E segundo Tanenbaum [13], no superdimensionamento existe outro problema

relacionado ao custo, pois é necessário adquirir uma quantidade enorme de equipamentos e

largura de banda.

2.2.2.2 Armazenamento em Buffers

Em Tanenbaum [13], vemos que os fluxos podem ser armazenados em buffers no lado

receptor antes de serem entregues para as aplicações, isto é, os pacotes chegam ao destino e

ficam armazenados no buffer e, após algum tempo, são entregues às aplicações de forma

constante.

Segundo Tanenbaum [13], o armazenamento dos fluxos em buffers não afeta a sua

confiabilidade e não causa impacto na utilização da largura de banda, mas aumenta o atraso

dos pacotes tendo em vista que os pacotes só são entregues as aplicações após algum tempo.

A vantagem desta técnica é a suavização do jitter, pois os pacotes só sofrerão atrasos

na entrega para as aplicações caso ocorra um atraso muito alto na rede e o buffer fique vazio.

Em algumas aplicações como áudio e vídeo por demanda, a variação no atraso é o principal

problema, portanto, essa técnica auxilia muito na qualidade deste tipo de serviço.

2.2.2.3 Modelagem de Tráfego

A modelagem de tráfego está relacionada à regulagem da taxa e do volume de

transmissão de dados [13]. A técnica de modelagem de tráfego suaviza o tráfego no lado

transmissor fazendo com que os pacotes sejam enviados a uma taxa constante.

Segundo Tanenbaum [13] quando uma conexão é configurada, deve ser determinado

um padrão de tráfego, ou seja, uma forma para essa conexão. A modelagem de tráfego policia

os fluxos de dados limitando a largura de banda para uma taxa acordada, isto é, faz com que

os fluxos fiquem dentro da forma prevista [12].

24

Com a modelagem de tráfego é possível reduzir o congestionamento na rede, pois os

dados serão transmitidos de forma constante a uma taxa máxima. Este fator é de grande

importância no caso da transmissão de dados em tempo real, como conexões de áudio e vídeo,

que têm requisitos estritos de qualidade de serviço [13].

2.2.2.4 Mecanismos de Escalonamento

O modo como os pacotes enfileirados são selecionados para transmissão pelo enlace é

conhecido como disciplina de escalonamento [1].

Segundo Marchese [12], o escalonamento de pacotes especifica a política de serviços

de uma fila em um nó, isto é, o escalonamento decide a ordem que será utilizada para escolher

os pacotes que serão transmitidos sobre um canal. Ele também é uma parte importante quando

se fala de qualidade de serviço, podendo causar grande impacto em diferentes parâmetros de

QoS, como atraso, jitter e perda de pacotes.

A seguir serão apresentadas as mais importantes disciplinas de escalonamento.

2.2.2.4.1 FIFO

A disciplina de escalonamento FIFO seleciona pacotes para transmissão pelo enlace

na mesma ordem em que eles chegaram à fila de saída do enlace [1]. Isto é, o primeiro pacote

a chegar a um nó será o primeiro a ser transmitido.

Segundo Kurose e Ross [1], como os buffers em um nó são finitos, se um pacote chega

à fila de saída e ela está cheia, o nó utilizará uma política de descarte e determinará se o

pacote será descartado ou se outro pacote será retirado da fila para dar espaço aoque está

chegando. E Peterson e Davie [16] dizem que essa ação é tomada sem levar em conta a qual

fluxo o pacote pertence ou o quanto ele é importante.

25

2.2.2.4.2 Prioridade

Segundo Peterson e Davie [16], a disciplina de escalonamento por prioridade é uma

variação básica da disciplina FIFO, onde a idéia é marcar cada pacote com uma prioridade;

essa marca pode ser carregada, por exemplo, no campo TOS do cabeçalho IP. E os roteadores

implementam múltiplas filas, normalmente do tipo FIFO, para cada prioridade.

De acordo com Kurose e Ross [1], na disciplina de escalonamento por prioridade um

nó ao transmitir um pacote, sempre será escolherá um da classe de prioridade mais alta que a

fila não esteja vazia, isto é, que tenha pacotes esperando para serem transmitidos.

Para Peterson e Davie [16], um problema com o escalonamento por prioridade é que

enquanto a fila com a maior prioridade tiver ao menos um pacote para transmissão, as outras

filas não serão atendidas, podendo causar inanição nas outras filas.

2.2.2.4.3 Varredura Cíclica

Na disciplina de escalonamento por varredura cíclica os pacotes são classificados do

mesmo modo que no escalonamento por prioridade. Contudo, em vez de haver uma prioridade

estrita de serviço entre as classes, um escalonador de varredura cíclica alterna serviços entre

as classes [1]. Isto é, o escalonador transmite um pacote da classe um e em seguida um pacote

da classe dois, e volta a transmitir um pacote da classe um, seguido de outro classe dois e

assim por diante. Caso uma fila de uma classe esteja vazia é transmitido um pacote de outra

fila.

2.2.2.4.4 WFQ

A disciplina de escalonamento Weighted Far Queue, segundo Peterson e Davie [16], é

uma implementação de uma variação do escalonamento por varredura cíclica, que permite que

sejam atribuídos pesos para cada classe. E tem considerável utilização nas arquiteturas com

26

QoS atuais [1].

Segundo Kurose e Ross [1], um escalonador WFQ atende as classes de modo cíclico,

assim como na varredura cíclica, mas cada classe receberá uma fração de tempo igual ao seu

peso divido pelo somatório dos pesos de todas as classes que tenham pacotes para transmitir.

2.2.2.5 Mecanismos de Regulação

Regulação é o ajuste da taxa com a qual é permitido que um fluxo injete pacotes na

rede e é uma das pedras fundamentais de qualquer arquitetura com QoS [1].

Segundo Kurose e Ross [1], as características da taxa de pacotes reguladas em um

fluxo são:

Taxa média: número de pacotes enviados em um intervalo de tempo;

Taxa de pico: número máximo de pacotes que podem ser enviados durante um

período curto de tempo;

Tamanho da rajada: número máximo de pacotes que podem ser enviados em

um intervalo de tempo extremamente curto.

Podemos ver em Marchese [12] que existem dois métodos básicos para regulação, os

quais serão apresentados a seguir.

2.2.2.5.1 Algoritmo de Balde Furado

De acordo com Tanenbaum [13], o algoritmo de balde furado consiste de uma fila

finita. Quando um pacote chega a um nó, se houver espaço na fila, será incluído nela; caso

contrário, ele será descartado. O balde transmite para a rede os bytes dos pacotes a uma taxa

constante.

Ainda, segundo Tanenbaum [13], esse tratamento faz com que os pacotes saiam do nó

a uma taxa constante, independente da forma como chegam até ele, isto é, ele transforma um

fluxo de pacotes irregulares em um fluxo de pacotes regular.

27

2.2.2.5.2 Algoritmo de Balde de Símbolos

O algoritmo do balde furado impõe um padrão rígido à taxa média, independente da

irregularidade do tráfego. Em muitas aplicações é melhor permitir que a saída aumente um

pouco sua velocidade quando chegarem rajadas maiores; assim, é necessário um algoritmo

mais flexível, de preferência um que nunca perca dados [13]. Um algoritmo como esse, é o do

balde de símbolos.

O algoritmo do balde de símbolos é similar ao do balde furado, mas sua

implementação é diferente. De acordo com Marchese [12], símbolos são gerados a uma taxa

constante e colocados no balde. Quando um pacote entra na fila para ser transmitido, ele

precisa pegar um símbolo para cada byte que possui, consumindo o símbolo do balde. Um

byte só pode ser transmitido se existirem símbolos no balde, caso contrário deve esperar até

que um novo símbolo seja inserido no balde.

Segundo Tanenbaum [13], o algoritmo do balde de símbolos possibilita um tipo de

modelagem de tráfego diferente do algoritmo do balde furado, pois permite que fluxos

inativos ou com baixa atividade economizem símbolos para futuras rajadas de tráfego.

O balde de símbolos tem um tamanho finito e descarta símbolos quando o balde está

cheio, mas nunca descarta pacotes [13].

2.2.3 Serviços Integrados e Serviços Diferenciados

Nesta seção serão apresentadas as principais arquiteturas de QoS: Serviços Integrados

(Intserv) e Serviços Diferenciados (Diffserv). Elas representam padrões correntes da IETF

para prover qualidade de serviço e incorporam os princípios e os mecanismos apresentados

nas seções anteriores.

2.2.3.1 Serviços Integrados

28

Entre 1995 e 1997, a IETF dedicou um grande esforço à criação de uma arquitetura

para multimídia de fluxo. Este trabalho resultou em mais de duas dezenas de RFCs,

começando com as RFCs 2205 a 2210. O nome genérico deste trabalho é algoritmos baseados

no fluxo ou serviços integrados [13].

Segundo Kurose e Ross [1], a arquitetura de serviços integrados (Intserv) possui duas

características fundamentais:

Recursos reservados: Um roteador deve saber qual a quantidade de recursos que já

está reservada para sessões em andamento.

Estabelecimento de chamada: Uma sessão que exige garantias de QoS deve

primeiramente estar habilitada a reservar recursos suficientes em cada roteador da

rede em seu trajeto entre a origem e destino.

De acordo com Tanenbaum [13], o principal protocolo da IETF para a arquitetura de

serviços integrados é o RSVP. Ele é o protocolo empregado para fazer as reservas de recursos

entre a origem e o destino do fluxo.

Segundo Peterson e Davie [16], a arquitetura Intserv define duas grandes classes de

serviços: serviços garantidos e serviços de carga controlada. Em Kurose e Ross [1], vemos

que a especificação de serviço garantido é definida na RFC 2212, e estabelece limites rígidos

para atrasos de fila que um pacote sofrerá em um roteador. Já o serviço de carga controlada

receberá, de acordo com a RFC 2211, uma qualidade de serviço que se aproxima muito da

QoS que o mesmo fluxo receberia de um elemento de rede que não tivesse carga.

2.2.3.2 Serviços Diferenciados

A IETF padronizou arquitetura de serviços diferenciados, descritas nas RFCs 2474 e

2475, como uma abordagem mais simples para oferecer qualidade de serviço, uma estratégia

que pode ser implementada em grande parte localmente em cada roteador, sem configuração

antecipada e sem ter de envolver todo o caminho. Essa abordagem é conhecida como

qualidade de serviço baseada na classe (em vez de ser baseada no fluxo) [13].

A arquitetura de serviços diferenciados (Diffserv) é flexível, no sentido de que não

define serviços específicos nem classes de serviços específicas. Em vez disso, ela fornece os

29

componentes funcionais, isto é, as peças de uma arquitetura de rede com as quais esses

serviços podem ser montados [1]. A arquitetura Diffserv consiste em dois conjuntos de

elementos funcionais:

Funções de borda: classificação de pacotes e condicionamento do tráfego. Na

borda de entrada da rede os pacotes são marcados identificando a qual classe ele

pertence. A marcação é feita alterando o campo DS do cabeçalho do pacote. Caso o

tráfego esteja fora do padrão acordado ele pode receber uma marcação diferente,

de uma classe menos prioritária, ou ser descartado [1].

Função central: envio. Quando um pacote marcado com DS chega a um roteador

habilitado com Diffserv ele é repassado até seu próximo salto de acordo com o

comportamento por salto associado à classe do pacote. O comportamento por salto

influencia a maneira pela qual os buffers e a largura de banda de um roteador são

compartilhados entre as classes de tráfego concorrentes [1].

De acordo com Peterson e Davie [16], a IETF decidiu utilizar seis bits do campo TOS

do cabeçalho IP para realizar a marcação dos pacotes, esses seis bits são chamados de DSCP.

Eles mapeiam as classes de serviço que definem o comportamento por salto (PHB) a ser

aplicado ao pacote.

Segundo Kurose e Ross [1], até agora foram definidos dois PHBs: um de repasse

acelerado (EF) e um de repasse assegurado (AF) respectivamente pelas RFCs 3246 e 2597.

O repasse acelerado é dividido em duas classes, a do tráfego regular e a do tráfego de

repasse acelerado [13]. E, segundo Braun et al. [14], deve-se assegurar que o tráfego da classe

de repasse acelerado receba uma taxa mínima de transmissão, independente da intensidade de

outros tipos de tráfego.

De acordo com Tanenbaum [13], o repasse assegurado é um pouco mais elaborado,

definindo quatro classes de prioridade, além de três possibilidades de descarte de pacotes que

estejam sofrendo congestionamento: baixo, médio e alto. Assim, definindo doze classes de

serviço.

2.2.3.3 Intserv X Diffserv

O Intserv é capaz de prover uma qualidade de serviço parecida com as de tecnologias

30

de circuitos, através da reservas de recursos prévia. Segundo Tanenbaum [13], os algoritmos

baseados no fluxo têm potencial para oferecer boa qualidade de serviço a um ou mais fluxos,

porque eles reservam quaisquer recursos necessários ao longo da rota. Porém, eles também

têm a desvantagem de exigirem uma configuração antecipada para estabelecer cada fluxo,

algo que não se ajusta bem quando existem milhares ou milhões de fluxos. Além disso, eles

mantêm o estado interno por fluxo nos roteadores e envolvem trocas complexas de roteador

para roteador, a fim de configurar os fluxos.

De acordo com Kurose e Ross [1], o Diffserv possui uma escalabilidade muito maior,

pois não precisa manter os estados dos fluxos, isso porque seu comportamento é determinado

por salto e não fim-a-fim, isso é uma diferença muito grande quando se trata de milhões de

fluxos (um número comum na Internet atual). Ainda possui uma flexibilidade muito maior

que a arquitetura Intserv na definição de classes, permitindo que sejam adicionadas ou

retiradas classes sem afetar a que já estão em utilização.

2.2.4 Utilização de QoS em redes

Atualmente a maioria das conexões de acesso a Internet, principalmente os acessos

residenciais, não possuem nenhum tipo de qualidade de serviço oferecida. A única garantia

oferecida é uma pequena porcentagem da largura de banda contratada. No caso de acessos

corporativos o cenário não é muito diferente, mas a largura de banda garantida normalmente é

maior.

Alguns provedores de serviços de Internet vendem atualmente serviços de acesso com

garantias de qualidade de serviço, mas de acordo com Xiao [17], essa garantia só é válida

enquanto o tráfego está dentro da rede do provedor de serviço, quando passam por redes de

outros provedores a QoS não pode ser garantida.

Segundo Xiao [17], isso ocorre por que os provedores não possuem acordos para

manter a qualidade de serviço do tráfego de outros provedores em sua rede, sendo o tráfego

proveniente de outros provedores tratados como serviços de melhor esforço.

A qualidade de serviço é oferecida pelos provedores de serviços a usuário na forma de

acordos de nível de serviço (SLA), onde são definidas as classes de serviços oferecidas e os

parâmetros máximos de largura de banda, atraso, jitter e número de pacotes perdidos em uma

31

determinada classe ou conexão. No SLA também é definido a forma como o usuário entregará

os dados ao provedor, isso é, marcação dos pacotes, taxa média, taxa de pico e tamanho

máximo de rajadas. Caso o tráfego entregue esteja fora do formato acordado o provedor de

serviços não irá garantir os níveis definidos no SLA [17].

Empresas e órgãos públicos também podem utilizar QoS dentro de suas redes privadas,

priorizando aplicações críticas ou que necessitem de algum nível de qualidade de serviço para

um bom funcionamento, utilizando as técnicas de QoS internamente.

32

3 METODOLOGIA

Neste capitulo é apresentada a metodologia para o desenvolvimento do sistema e

documentação do desenvolvimento, incluindo alguns conceitos da UML. Além de definidos

os cenários e metodologia de testes.

3.1 Ferramentas

O desenvolvimento foi realizado utilizando o sistema operacional Linux, distribuição

GNU/Debian, versão 5.0.4 codinome Lenny, disponível em http://www.debian.org. Foi

utilizado o software Apache versão 2.0 como servidor HTTP (http://www.apache.org) com o

módulo de suporte a linguagem PHP na versão 5.0 (http://www.php.net). Como servidor de

banco de dados, foi utilizado o software MySQL versão 5 (http://www.mysql.com).

O software utilizado pelo sistema para gerar os fluxos de dados é o iperf versão 2.0.4

(http://sourceforge.net/projects/iperf/). Ele também será responsável por gerar os dados brutos

com os resultados dos testes.

A ferramenta de teste de redes ping em conjunto com ferramentas de shell scripts foi

usada para registrar os dados de atraso dos fluxos.

A suíte NetBeans (http://netbeans.org/) foi utilizada para o desenvolvimento das

páginas e scripts em PHP da interface web do sistema. Para gerar os gráficos com os

resultados dos testes foi utilizada a classe PHP pChart, disponível em

http://pchart.sourceforge.net/.

Todos os dados de configuração e resultados dos testes ficam armazenados em base de

dados no servidor MySQL. E o software phpmyadmin (http://www.phpmyadmin.net) foi

usado para a criação e manutenções na base de dados.

33

3.2 Desenvolvimento

Foram desenvolvidos scripts em shell script (Apêndices A e B), utilizando o editor de

texto gedit, para capturar as saídas geradas em arquivos de texto, retirar as informações

desnecessárias e inserir os dados relevantes na base de dados, para que possam ser utilizados

futuramente para gerar os gráficos e página de resultados a serem exibidos pela interface web.

O shell utilizado para executar os scripts é o bash.

Foi desenvolvida uma interface web na linguagem PHP para a configuração dos testes

e apresentação dos resultados. Alguns códigos desenvolvidos podem ser vistos nos Apêndices

C a G.

Durante o desenvolvimento foram utilizados equipamentos de rede, como roteadores e

switchs, com capacidade de realizar QoS para verificar o funcionamento do sistema de testes

automatizados.

O desenvolvimento seguiu as seguintes fases:

Instalação do sistema operacional e ferramentas necessárias para o

desenvolvimento e funcionamento do sistema;

Testes das ferramentas iperf e ping;

Desenvolvimento dos shell scripts que para tratamento dos resultados brutos do

teste;

Testes de funcionamento dos shell scripts;

Desenvolvimento da interface web para configuração dos testes e relatórios

automatizados;

Testes da interface web;

Laboratório de testes com equipamentos de rede e diferentes configurações de QoS

e ajustes no software.

Os diagramas da UML apresentados nesse trabalho foram desenvolvidos utilizando a

ferramenta de desenho de diagramas DIA (http://live.gnome.org/Dia).

O desenvolvimento do texto do trabalho ocorreu em paralelo ao desenvolvimento da

aplicação.

Algumas telas de exemplo de funcionamento do sistema encontram-se no Apêndice I.

34

3.3 Requisitos

O sistema proposto visa permitir que sejam realizados testes de qualidade de serviço

em redes de comunicação de dados de forma automatizada e que sejam criados relatórios

também de forma automatizada a partir dos resultados obtidos durante os testes.

Os testes deverão ser configurados para que seja possível medir os parâmetros

definidos como essenciais para a qualidade de serviço.

O sistema terá duas formas de funcionamento, modo escravo e modo mestre.

No modo escravo o usuário deve informar em qual endereço IP o sistema deve

aguardar a conexão do sistema em modo mestre, após a conexão serão trocadas informações

sobre os parâmetros do teste e o escravo iniciará o envio de dados com o software iperf.

No modo mestre o usuário informará os dados básicos do testes como nome, número

de fluxos, tempo de duração, tipo de marcação de pacotes e endereços IPs utilizados no teste.

Em seguida, para cada fluxo, deverá informar a qual classe de QoS ele pertence, a largura de

banda e tamanhos dos pacotes.

Após a confirmação dos dados pelo usuário, o sistema no modo mestre irá se conectar

ao sistema funcionando no modo escravo, enviará os parâmetros dos testes e iniciará os

softwares ping e iperf para receber os fluxos e gerar os arquivos com resultados. Após a

finalização do testes será responsável por formatar e salvar os resultados e em seguida exibi-

los ao usuário.

Todos os campos exibidos nas páginas de configuração são de preenchimento

obrigatório, com exceção do tempo de teste.

Caso o usuário não forneça o tempo de duração do testes será utilizado o tempo padrão

de sessenta segundos.

O campo “tamanho dos pacotes” na configuração dos fluxos deve possuir um valor

maior que 64 bytes.

As marcas de QoS utilizadas nos fluxos devem ser digitadas em formato decimal.

O sistema deverá permitir que o usuário visualize os resultados de testes anteriores.

35

3.4 Casos de Uso

O sistema possui três casos de uso, que podem ser observados na Figura 2.

FIGURA 2 - Diagrama geral dos casos de uso

3.4.1 Iniciar Teste Lado Mestre

Nome do Caso de Uso: Iniciar Teste Lado Mestre Sistema de Teste de QoS

Ator Envolvido: Usuário

PRÉ-CONDIÇÃO

1 – Ter acesso ao sistema.

DESCRIÇÃO DO CASO

1 – Clicar em iniciar novo Teste Mestre;

2 – Inserir dados básicos do teste;

3 – Inserir dados dos fluxos;

4 – Confirmar configurações;

5 – Se ocorrerem erros, fim.

6 – Caso contrário visualizar resultados.

PÓS-CONDIÇÃO

1 – Teste realizado.

2 – Resultados exibidos.

36

3.4.2 Iniciar Teste Lado Escravo

Nome do Caso de Uso: Iniciar Teste Lado Escravo Sistema de Teste de QoS

Ator Envolvido: Usuário

PRÉ-CONDIÇÃO

1 – Ter acesso ao sistema

DESCRIÇÃO DO CASO

1 – Clicar em iniciar novo Teste Escravo;

2 – Inserir dados do teste;

3 – Se ocorrerem erros, fim.

4 – Caso contrário teste realizado com sucesso.

PÓS-CONDIÇÃO

1 – Teste realizado.

3.4.3 Iniciar Testes Anteriores

Nome do Caso de Uso: Visualizar Testes Anteriores Sistema de Teste de QoS

Ator Envolvido: Usuário

PRÉ-CONDIÇÃO

1 – Ter acesso ao sistema.

2 – Existirem testes já realizados

DESCRIÇÃO DO CASO

1 – Clicar em iniciar Visualizar Resultados Anteriores;

2 – Selecionar o teste desejado;

3 – Visualizar resultados.

PÓS-CONDIÇÃO

1 – Resultados exibidos.

3.5 Diagramas de Seqüência

A Figura 3 mostra o diagrama de seqüência da execução de um teste completo.

37

FIGURA 3 - Diagrama de seqüência de um teste completo

38

3.6 Diagrama de Classes

A Figura 4 apresenta do diagrama de classes do sistema desenvolvido.

FIGURA 4 - Diagrama de classes

3.7 Modelagem de Dados

A estrutura do banco de dados utilizada no sistema é formada por sete tabelas:

teste: armazena os dados básicos e estados dos testes;

fluxos_teste: contêm as informações específicas de cada fluxo do teste;

39

resultados_simples: armazena os resultados obtidos a partir das ferramentas iperf e

ping;

classe_qos: armazena os requisito mínimos para cada classe de serviço.

A Figura 5 apresenta a estrutura do banco de dados.

FIGURA 5 - Estrutura de dados

3.8 Metodologia de Testes

Para a realização dos testes de funcionamento do software foram utilizados dois

notebooks com sistema operacional Linux Debian, versão 5.0.4, e com todos os softwares

necessários para o funcionamento do sistema. Foram utilizados também dois roteadores AR-

1700 da empresa FTD Comunicação de Dados.

Os testes foram realizados configurando os roteadores para prover a qualidade de

serviço especificada por cada cenário e o software foi configurado para testar os parâmetros

de QoS de acordo com o proposto pelo cenário.

40

3.9 Laboratório de Testes

O laboratório foi montado da forma apresentada da Figura 6, os roteadores foram

conectados através da porta serial (WAN), utilizando o protocolo PPP. E os notebooks foram

conectados as portas Ethernet (LAN) dos seus respectivos roteadores. A conexão serial entre

os roteadores foi configurada com 2 Mbps de largura de banda.

FIGURA 6 - Diagrama do laboratório de teste

Os testes foram realizados três vezes em cada cenário para evitar que uma falha

esporádica ou comportamento estranho afetassem os resultados dos testes e também para

verificar a estabilidade e coerência entre os resultados do software.

3.10 Cenários de Testes

Foram criados três cenários de testes com configurações diferentes para avaliar o

funcionamento e comportamento do software.

3.10.1 Cenário 1

No cenário 1 foram utilizados dois fluxos com as características apresentadas na

Tabela 3, com o fluxo 1 recebendo uma prioridade maior que a do fluxo 2 no escalonamento.

41

TABELA 3 - Configurações dos fluxos de dados no cenário 1

Fluxo Classe Largura de

Banda (bps)

Tamanho dos

Pacotes (bytes)

1 1 - Tempo real, sensível ao jitter, interativa 300 000 64

2 5 - Aplicações padrões de redes IP 1 700 000 1 500

3.10.2 Cenário 2

No cenário 2 foram utilizados três fluxos com as características apresentadas na Tabela

4, com o fluxo 1 e fluxo 2 recebendo a mesma prioridade, portanto compartilhando a banda

no escalonamento e o fluxo 3 com uma prioridade menor.

TABELA 4 - Configurações dos fluxos de dados no cenário 2

Fluxo Classe Largura de

Banda (bps)

Tamanho dos

Pacotes (bytes)

1 0 - Tempo real, sensível ao jitter, altamente

interativa

200 000 128

2 1 - Tempo real, sensível ao jitter, interativa 150 000 64

3 5 - Aplicações padrões de redes IP 1 650 000 768

3.10.3 Cenário 3

No cenário 3 foram utilizadas as mesmas configurações do cenário 2 com três fluxos e

com as características apresentadas na Tabela 5, e com o fluxo 1 e fluxo 2 recebendo a mesma

prioridade, portanto compartilhando a banda no escalonamento e o fluxo 3 com uma

prioridade menor.

Durante a execução do teste o fluxo 3 foi configurado para gerar uma largura de banda

de 2000000 bps, acima do permitido para a classe e perto do limite máximo do link, para

verificar se o excesso de tráfego desse fluxo não irá influenciar no escalonamento dos fluxos

42

de maior prioridade.

TABELA 5 - Configurações dos fluxos de dados no cenário 3

Fluxo Classe Largura de

Banda (bps)

Tamanho dos

Pacotes (bytes)

1 0 - Tempo real, sensível ao jitter, altamente

interativa

200 000 128

2 1 - Tempo real, sensível ao jitter, interativa 150 000 64

3 5 - Aplicações padrões de redes IP 1 650 000 768

3.11 Realização dos Testes

O laboratório foi montado de acordo com o proposto, como pode ser observado nas

Figuras 7 e 8. Primeiramente os roteadores foram configurados de acordo com as regras de

cada cenário (Apêndice J) e em seguida foram realizados os testes, três vezes consecutivas em

cada configuração, pelo período de cinco minutos por teste.

Durante os testes foi encontrado um problema com o tamanho dos pacotes para a

realização dos mesmos. A ferramenta iperf ao ser configurada para gerar os dados utilizando

pacotes muito pequenos gera um volume de dados muito maior do que o configurado. Isso se

de deve ao fato da configuração do tamanho do pacote na ferramenta ser relativo apenas a

quantidade de dados do pacote, assim como a largura de banda utilizada, também se refere aos

dados do pacote, excluindo os cabeçalhos UDP, IP e Ethernet. Por esse motivo, os testes

foram realizados utilizando em todos os fluxos o tamanho do pacote em 1500 bytes.

43

FIGURA 7 - Laboratório de testes visão geral

FIGURA 8 - Laboratório de testes roteadores

44

4 RESULTADOS E DISCUSSÕES

Nesta seção serão mostrados e analisados os resultados obtidos durante os testes, os

relatórios de resultados completos gerados pelo sistema estão no Apêndice H.

4.1 Resultados no Cenário 1

No cenário 1 todos os testes ocorreram sem problemas e os fluxos apresentaram o

comportamento e resultados esperados, de acordo com as classes de QoS definidas

anteriormente, são apresentados na Tabela 6 e os resultados obtidos estão na Tabela 7.

TABELA 6 - Resultados esperados nos testes no cenário 1

Fluxo Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1 >= 291 601,12 < 400 < 50 < 0,001

2 >= 1 652 419,04 N N N

*N – Não especificado

TABELA 7 - Resultados dos testes no cenário 1

Fluxo Teste Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1

1 293 960,8 6,772 4,129 0,000

2 293 960,8 5,246 2,529 0,000

3 293 960,8 6,594 3,569 0,000

2

1 1 665 608,0 17,417 3,967 0,000

2 1 666 156,8 8,301 2,863 0,000

3 1 665 333,6 8,458 3,155 0,000

Podemos observar que todos os resultados ficaram dentro dos parâmetros esperados e

o desempenho do software ficou de acordo com o configurado.

45

4.2 Resultados no Cenário 2

No cenário 2 ocorreram problemas durante o teste de numero três, durante quinze

segundos houve aumento de atrasos, sem explicação, fazendo com que o resultado fosse

negativo para esse parâmetro em alguns fluxos. O gráfico de atraso, mostrado na Figura 9,

mostra o resultado anormal, comparado com o gráfico de um teste com resultado correto

(Figura 10).

FIGURA 9 - Gráfico de atraso no teste 3 do cenário 2

FIGURA 10 - Gráfico de atraso no teste 2 do cenário 2

Os resultados esperados para os testes nesse cenário, de acordo com as classes de QoS

definidas anteriormente, são apresentados na Tabela 8 e os resultados obtidos na Tabela 9.

TABELA 8 - Resultados esperados nos testes no cenário 2

Fluxo Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1 >= 194 401,12 < 100 < 50 < 0,001

2 >= 145 801,12 < 400 < 50 < 0,001

3 >= 1 603 805,60 N N N

*N – Não especificado

46

TABELA 9 - Resultados dos testes no cenário 2

Fluxo Teste Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1

1 195 960,8 5,168 2,006 0,000

2 195 960,8 5,224 2,221 0,000

3 195 960,8 5,012 2,366 0,000

2

1 146 960,8 4,670 1,681 0,000

2 146 960,8 4,673 2,552 0,000

3 146 960,8 4,179 2,190 0,000

3

1 1 616 804,0 11,825 6,865 0,000

2 1 616 216,0 17,295 9,048 0,000

3 1 616 804,0 14,107 7,629 0,000

Podemos observar que todos os resultados ficaram dentro dos parâmetros esperados,

que o desempenho do software ficou de acordo com o configurado e, mesmo com o problema

de atrasos no terceiro teste o resultado médio ficou bem próximo ao obtido nos outros testes

do cenário.

4.3 Resultados no Cenário 3

No cenário 3, assim como no cenário 2, ocorreram problemas durante o teste de

número um, com relação ao aumento de atrasos, durante dez segundos, também fazendo com

que o resultado fosse negativo para esse parâmetro em alguns fluxos. O gráfico de atraso,

mostrado na Figura 11, mostra o resultado anormal, comparado com o gráfico de um teste

com resultado correto (Figura 12).

47

FIGURA 11 - Gráfico de atraso no teste 1 do cenário 3

FIGURA 12 - Gráfico de atraso no teste 2 do cenário 3

Os resultados esperados para os testes nesse cenário, de acordo com as classes de QoS

definidas anteriormente, são apresentados na Tabela 10. Neste cenário é esperado que o fluxo

três não obtenha o mínimo esperado no parâmetro de largura de banda, pois a largura de

banda gerada é maior do que a capacidade do enlace entre os roteadores, mas é esperado que

o excesso de banda gerada no fluxo três não interfira nos resultados dos outros fluxos. Os

resultados obtidos estão na Tabela 11.

TABELA 10 - Resultados esperados nos testes no cenário 3

Fluxo Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1 >= 194 401,12 < 100 < 50 < 0,001

2 >= 145 801,12 < 400 < 50 < 0,001

3 >= 1 944 104,16 N N N

*N – Não especificado

48

TABELA 11 - Resultados dos testes no cenário 3

Fluxo Teste Throughput (bps) IPTD (ms) IPDV (ms) IPLR

1

1 195 960,8 4,842 3,338 0,000

2 195 960,8 4,952 2,710 0,000

3 195 960,8 5,151 2,366 0,000

2

1 146 960,8 4,832 2,840 0,000

2 146 960,8 4,635 2,776 0,000

3 146 960,8 4,927 2,469 0,000

3

1 1 575 604,8 258,113 9,646 0,195

2 1 575 448,0 240,895 9,996 0,195

3 1 570 469,6 259,917 9,759 0,198

Os resultados ficaram dentro dos parâmetros esperados e o desempenho do software

ficou de acordo com o configurado e, da mesma forma que no cenário 2 ocorreram problemas

com atrasos no teste número um, o resultado médio, porém, ficou bem próximo ao obtido nos

outros testes do cenário.

4.4 Considerações Sobre os Resultados

Através dos resultados obtidos foi possível verificar que o sistema está funcionando

bem e de forma estável, e que também está medindo de forma correta os parâmetros de

qualidade de serviço propostos. Principalmente no cenário 3 foi possível verificar o

funcionamento do QoS aplicado pelo roteador, que mesmo com um fluxo de tráfego com

largura de banda maior do que o suportado pelo enlace manteve a qualidade dos fluxos que

possuíam uma prioridade maior.

Não foi possível determinar a causa dos problemas nos testes de atraso, sendo a causa

mais provável, a interferência de outro software em execução nos computadores que

realizavam os testes, que utilizou recursos, como processamento, atrasando o funcionamento

do software que realiza o teste de atraso. Após a ocorrência dos erros em dois testes seguidos

os roteadores foram reiniciados, e os testes seguintes não apresentaram erros.

Devido ao comportamento do iperf com pacotes pequenos, não foi possível realizar os

49

testes com o tamanho de pacotes propostos, para isso será necessária uma alteração no

funcionamento do software que deverá prever os tamanhos dos cabeçalhos para calcular o

tráfego que deverá ser gerado pelo iperf.

50

5 CONCLUSÃO

Com base nos critérios e resultados apresentados nesta monografia, onde o objetivo

era o desenvolvimento de um ambiente de testes automatizados de qualidade de serviço em

rede de comunicação de dados baseado em softwares livres, constatou-se que o objetivo

proposto foi alcançado.

O usuário do sistema pode realizar os testes através de uma interface web e visualizar

os resultados na própria aplicação sem a necessidade de recorrer a comandos no shell e outros

softwares para montar os relatórios e gráficos com os resultados.

A utilização de ferramentas livres como Linux, Apache, MySQL, iperf, ping

proporcionam uma ferramenta gratuita para a realização dos testes de qualidade de serviço em

ocasiões onde é necessário verificar o funcionamento das configurações aplicadas na rede,

sendo uma alternativa muito mais barata que os equipamentos de testes de redes encontrados

no mercado.

Durante a realização do trabalho foi possível aprimorar os conhecimentos em

programação utilizando shell scripts além de um aprendizado muito grande em linguagem de

programação PHP, banco de dados MySQL e nos funcionamento e opções de configurações

das ferramentas ping e iperf.

5.1 Extensões

Este trabalho pode ser continuado da seguinte forma:

Implementação de um módulo gerador de tráfego, baseado no iperf, que seja mais

flexível permitindo, por exemplo, que o tráfego gerado tenha períodos de

inatividade ou períodos de pico de tráfego acima do permitido pela configuração

do QoS;

Implementação de um módulo para medição de atraso e tratamento dos dados sem

a necessidade de utilização de ferramentas de shell scripts, permitindo que a

ferramenta possa ser utilizadas em outros sistema operacionais;

Utilização de base de dados que não necessite de um servidor MySQL instalado,

51

utilizando, por exemplo, base de dados SQLite, aumentando a portabilidade da

ferramenta;

Utilização de servidor web leve, integrado, multiplataforma e com suporte a PHP.

Implementação, que em conjunto com as sugestões anteriores, tornaria o sistema

totalmente portável;

Exportação dos resultados para planilhas eletrônicas.

52

REFERÊNCIAS

1 KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet: uma abordagem top-

down. 3ª edição. São Paulo: Pearson, 2006. 634 p.

2 FLUKE NETWORKS. One Touch Series II: Overview. Disponível em:

<http://www.flukenetworks.com/fnet/en-

us/products/OneTouch+Series+II/Overview.htm?categorycode=LANT>. Acesso em: 08 mar.

2010.

3 FLUKE NETWORKS. Test and Troubleshoot. Disponível em:

<http://www.flukenetworks.com/fnet/en-

us/products/family.htm?wbc_purpose=BasiNewsListingsupportAndDownloadsWhereToBuysi

temap&categorycode=LANT>. Acesso em: 08 mar. 2010.

4 JDSU. SmartClass Ethernet. Disponível em: <http://www.jdsu.com/specials/smartclass-

ethernet-adsl/index.html>. Acesso em: 08 mar. 2010.

5 JDSU. Acess Network Test. Disponível em:

<http://www.jdsu.com/products/communications-test-measurement/products/access-network-

test.html#Ethernet Test>. Acesso em: 08 mar. 2010.

6 FLUKE NETWORKS. EtherScope Series II: Overview. Disponível em:

<http://www.flukenetworks.com/fnet/en-

us/products/EtherScope+Series+II/?categorycode=LANT>. Acesso em: 08 mar. 2010.

7 JDSU. T-BERD® 4000 Multiple Services Test Platform. Disponível em:

<http://www.jdsu.com/products/communications-test-measurement/products/a-z-product-

list/t-berd-4000-multiple-services-test-platform.html>. Acesso em: 08 mar. 2010.

8 CISCO SYSTEMS. Internetworking Technology Handbook: Internet Protocols (IP).

Disponível em:

<http://www.cisco.com/en/US/docs/internetworking/technology/handbook/Internet-

53

Protocols.html#wp2468>. Acesso em: 07 mar. 2010.

9 OODAN, A. et al. Telecommunications Quality of Service Management: From legacy to

emerging services. Londres, Reino Unido: The Institution Of Engineering And Technology,

2009. 602 p.

10 ISO - INTERNATIONAL ORGANIZATION FOR STANDARDIZATION. ISO

8402:1994: Quality management and quality assurance -- Vocabulary. Disponível em:

<http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=201

15>. Acesso em: 12 abr. 2010.

11 ITU – INTERNATIONAL TELECOMMUNICATION UNION. Terms and definitions

related to quality of service and network performance including dependability.

Disponível em: <http://www.itu.int/rec/T-REC-E/recommendation.asp?lang=en&parent=T-

REC-E.800>. Acesso em: 03 mar. 2010.

12 MARCHESE, M. QoS Over Heterogeneous Networks. West Sussex: John Wiley & Sons,

2007. 307 p.

13 TANENBAUM, A. S. Rede de Computadores. 4ª edição. Rio de Janeiro:

Campus/Elsevier, 2003. 968 p.

14 BRAUN, T. et al. End-to-End Quality of Service Over Heterogeneous Networks.

Berlin: Springer, 2008. 266 p.

15 DATTATREYA, G. R. Performance Analysis of Queuing and Computer Networks. 1ª

edição. Boca Raton: CRC Press, 2008. 449 p.

16 PETERSON, L. L.; DAVIE, B.S. Computer Networks: A Systems Approach. 3. ed. San

Francisco: Elsevier Science, 2003. 809 p.

17 XIAO, X. Technical, commercial, and regulatory challenges of QoS: An Internet

Service Model Perspective. Burlington: Elsevier, 2008. 274 p.

54

REFERÊNCIAS CONSULTADAS

BEZERRA, E. Princípios de análise e projeto de sistemas com UML. Rio de Janeiro:

Elsevier, 2002. 279p.

BLUM, R. Linux Command Line and Shell Scripting Bible. Indianapolis: Wiley

Publishing, 2008. 809 p.

BURTCH, K. O. Linux Shell Scripting with Bash. 1ª edição. Indianapolis: Sams Publishing,

2004. 412 p.

CONVERSE, T.; PARK, J.; MORGAN, C. PHP5 and MySQL Bible. Indianapolis: Wiley

Publishing, 2004. 1042 p.

MySQL AB. MySQL 5.1 Reference. Disponível em:

<http://dev.mysql.com/doc/refman/5.1/en/>. Acesso em: 06 mar. 2010.

NARAMORE, E.; GERNER, J.; SCOUARNEC, Y. L.; STOLZ, J.;GLASS, M. K. Beginning

PHP5, Apache, and MySQL Web Development. Indianapolis: Wiley Publishing, 2005. 798

p.

PETERS, R. Expert Shell Scripting. 1ª edição: Apress, 2009. 293 p.

PHP GROUP. PHP: Documentation. Disponível em: <http://www.php.net/docs.php>.

Acesso em: 06 mar. 2010.

RNP – REDE NACIONAL DE ENSINO E PESQUISA. QoS. Disponível em:

<http://www.rnp.br/qos/index.html>. Acesso em: 27 fev. 2010.

55

APÊNDICES

56

APÊNDICE A – Shell script para tratamento dos dados gerados pelo iperf:

apagaresumo.sh

#####################################################

#Processa Saidas IPERF e insere na base de dados #

#Parametros: #

# $1 ID do Teste #

# $2 ID do Fluxo #

# $3 arquivo a ser processado #

# $4 usuario sql #

# $5 senha sql #

# $6 base de dados sql #

#####################################################

#Limpando linhas desnecessarias

linhas=`cat $3 | grep -in ",0.0-" | grep -v ",0.0-1\.0" | cut -d ',' -f 7`

fluxo=$2

teste=$1

for i in $linhas; do

sed "/"$i"/d" $3 > tmp$3

cat tmp$3 > $3

rm tmp$3

done

cont=0

echo $cont

linhas=`cat $3`

for i in $linhas; do

if [ "$cont" -eq 0 ]; then

tinicial="1970-1-1"

tinicial=$tinicial" "$(echo $i | cut -d',' -f1 | cut -c'9-10');

tinicial=$tinicial":"$(echo $i | cut -d',' -f1 | cut -c'11-12');

tinicial=$tinicial":"$(echo $i | cut -d',' -f1 | cut -c'13-14');

tinicial=$(date -d "$tinicial" +"%s")

cont=1

echo $tinicial

fi

colarray[0]=`expr $tinicial + $(echo $i | cut -d',' -f7 | cut -d'-' -f 2 | cut -d'.' -f 1) - 10801`

echo ${colarray[0]}

colarray[1]=$(echo $i | cut -d',' -f2)

colarray[2]=$(echo $i | cut -d',' -f3)

colarray[3]=$(echo $i | cut -d',' -f8)

colarray[4]=$(echo $i | cut -d',' -f9)

colarray[5]=$(echo $i | cut -d',' -f10)

colarray[6]=$(echo $i | cut -d',' -f11)

colarray[7]=$(echo $i | cut -d',' -f12)

mysql -u $4 -p$5 -e "INSERT INTO resultados_simples

VALUES($2,$1,'${colarray[1]}:${colarray[2]}',${colarray[3]},${colarray[4]},${colarray[5]},

${colarray[6]},${colarray[7]},${colarray[0]},null)" $6

done

57

APÊNDICE B – Shell script para tratamento dos dados gerados pelo ping: pings.sh

######################################################

#*Processa Saidas do ping e insere na base de dados #

#Parametros: #

# $1 ID do Teste #

# $2 ID do Fluxo #

# $3 arquivo a ser processado #

# $4 usuario sql #

# $5 senha sql #

# $6 base de dados sql #

# #

######################################################

linhas=`cat $3 | tr -d ' ' `

fluxo=$2

teste=$1

for i in $linhas; do

colarray[0]=$(echo $i | cut -d':' -f1)

colarray[1]=$(echo $i | cut -d'=' -f4 | cut -d'm' -f1)

mysql -u $4 -p$5 -e "UPDATE resultados_simples SET ping_rtt=${colarray[1]} WHERE

testeid=$1 AND fluxoid=$2 AND

tempos=((HOUR(${colarray[0]})*60*60)+(MINUTE(${colarray[0]})*60)+SECOND(${cola

rray[0]}))" $6

done

58

APÊNDICE C – Agente escravo: servidor.php

<?php

error_reporting (E_ALL);

/* desabilita o timeout para que o script fique esperando pela conexão */

set_time_limit (0);

$address = $argv[1];

$port = 1234;

$numfluxos=0;

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'1')

;

fclose($fp);

if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0) {

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'-1');

fclose($fp);

die("Falha criando Socket: " . socket_strerror ($sock) . "\n");

}

if (($ret = socket_bind ($sock, $address, $port)) < 0) {

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'-1');

fclose($fp);

die("Falha associando o socket a endereço e porta: " . socket_strerror ($ret) . "\n");

}

if (($ret = socket_listen ($sock, 5)) < 0) {

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'-1');

fclose($fp);

die("Falha ao começar a escutar no socket: " . socket_strerror ($ret) . "\n");

}

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'2');

fclose($fp);

do {

if (($msgsock = socket_accept($sock)) < 0) {

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'-1');

59

fclose($fp);

die("Falha ao aceitar conexão no socket: " . socket_strerror ($msgsock) . "\n");

break;

}

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'3');

fclose($fp);

$msg = "0\n";

socket_write($msgsock, $msg, strlen($msg));

do {

if (FALSE == ($buf = socket_read ($msgsock, 2048, PHP_NORMAL_READ))) {

echo "Erro recebendo dados do socket" . socket_strerror ($ret) . "\n";

break 2;

}

if (!$buf = trim ($buf)) {

continue;

}

$confs=split(',',$buf);

if ($buf == 'R') {

break;

}

if ($buf == 'E') {

socket_close ($msgsock);

break 2;

}

if ($confs[0] == 'I') {

$numfluxos=intval($confs[1]);

$ipmaster=$confs[2];

$tipomarca=$confs[3];

$tempoteste=$confs[4];

$resp = "I,F,".$numfluxos." \n";

socket_write ($msgsock, $resp, strlen ($resp));

//break;

}

if ($confs[0] == 'F') {

if($numfluxos > 0 & intval($confs[1]) <= $numfluxos){

$fmarca[$confs[1]] = $confs[2];

$fbanda[$confs[1]] = $confs[3];

$ftampacote[$confs[1]] = $confs[4];

$resp = "F,".$confs[1].",OK \n";

socket_write ($msgsock, $resp, strlen ($resp));

//break;

}

else{

$resp = "F,".$confs[1].",NOK\n";

socket_write ($msgsock, $resp, strlen ($resp));

break 2;

}

60

}

if ($confs[0] == 'S') {

$resp = "S,GO\n";

socket_write ($msgsock, $resp, strlen ($resp));

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'4');

fclose($fp);

for($i=1; $i <= $numfluxos;$i++)

{

$cmd = "iperf -c ".$ipmaster." -b ".$fbanda[$i]." -t ".$tempoteste." -p 500".$i." -S

".$fmarca[$i]." -l ".$ftampacote[$i]." > /dev/null &";

echo $cmd."\n";

passthru($cmd);

}

//break;

}

if ($confs[0] == 'T') {

$resp = "T,BYE\n";

socket_write ($msgsock, $resp, strlen ($resp));

$fp = fopen('status/statusconexaoe.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'5');

fclose($fp);

socket_close ($msgsock);

break 2;

}

} while (true);

socket_close ($msgsock);

} while (true);

socket_close ($sock);

?>

61

APÊNDICE D – Script PHP para armazenar dados do teste e fluxo na base de dados e

inicializar o agente mestre: salvar_teste.php

<?php

session_start();

function Redirecionar_URL(){

echo "<script language=\"JavaScript\">function redireciona()

{window.location=\"status_mestre.php\";}redireciona();</script>";

}

include "dbconn.inc";

if (!$conn) {

die('Could not connect to MySQL: ' . mysqli_connect_error());

}

mysqli_query($conn, 'SET NAMES \'utf8\'');

mysqli_autocommit($conn,FALSE);

$tipo_marca = ($_SESSION["Teste_Tipo_Marca"] == "DSCP") ? 1 : 2;

$result = mysqli_query($conn, 'INSERT INTO testes (teste_nome, teste_tipo_marca,

teste_num_fluxo, teste_ip_escravo, teste_ip_mestre, teste_tempo, teste_data, teste_erro)

VALUES

("'.$_SESSION["Teste_Nome"].'",'.$tipo_marca.','.$_SESSION["Teste_Num_Fluxos"].',"'.$_

SESSION["Teste_IP_Escravo"].'","'.$_SESSION["Teste_IP_Mestre"].'","'.$_SESSION["Teste

_Tempo"].'","'.date("m/d/Y").'",0)');

$teste_id = mysqli_insert_id($conn);

$_SESSION["TesteID"]=$teste_id;

if(!$result) {

mysqli_rollback($conn);

echo mysqli_error($conn);

die('Erro inserido dados do teste');

}

mysqli_free_result($result);

for($i=1; $i <= $_SESSION["Teste_Num_Fluxos"];$i++)

{

$tmp=split('-',$_SESSION["ClasseQos".$i]);

$classe = $tmp[0];

if($tipo_marca==1){

$marca = dechex((intval($_SESSION["MarcaF".$i])*4));

}

else{

$marca = dechex((intval($_SESSION["MarcaF".$i])*8*4));

}

if(strlen($marca) < 2){

$marca = "0".$marca;

}

$banda = intval($_SESSION["Teste_Banda_F".$i]);

$tampacote = intval($_SESSION["Teste_Tam_Pacote_F".$i]);

echo 'INSERT INTO fluxos_teste (teste_id, fluxo_id, fluxo_classe, fluxo_marca,

fluxo_banda, fluxo_tam_pacote) VALUES ('.$teste_id.', '.$i.', '.$classe.', "'.$marca.'",

'.$banda.', '.$tampacote.')';

62

$result1 = mysqli_query($conn, 'INSERT INTO fluxos_teste (teste_id, fluxo_id,

fluxo_classe, fluxo_marca, fluxo_banda, fluxo_tam_pacote) VALUES ('.$teste_id.', '.$i.',

'.$classe.', "'.$marca.'", '.$banda.', '.$tampacote.')');

if(!$result1) {

mysqli_rollback($conn);

die('Erro inserido dados do fluxo'.$i);

}

mysqli_free_result($result1);

}

mysqli_commit($conn);

mysqli_close($conn);

echo "Dados Inseridos com Sucesso";

$ip=$_POST["ip_local"];

$cmd = "php ./cliente.php '$teste_id' >/dev/null & ";

passthru($cmd);

sleep(5);

Redirecionar_URL();

?>

63

APÊNDICE E – Agente mestre: cliente.php

<?php

error_reporting (E_ALL);

$teste_id = $argv[1];

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0);

fwrite($fp,'1');

fclose($fp);

include "dbconn.inc";

if (!$conn) {

die('Could not connect to MySQL: ' . mysqli_connect_error());

}

mysqli_query($conn, 'SET NAMES \'utf8\'');

$result=mysqli_query($conn,'SELECT * FROM testes WHERE teste_id='.$teste_id);

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

$teste_nome = $row['teste_nome'];

$teste_tipo_marca = $row['teste_tipo_marca'];

$teste_num_fluxo = $row['teste_num_fluxo'];

$teste_ip_escravo = $row['teste_ip_escravo'];

$teste_ip_mestre = $row['teste_ip_mestre'];

$teste_tempo = $row['teste_tempo'];

mysqli_free_result($result);

$address = $teste_ip_escravo;

$service_port = 1234;

$socket = socket_create (AF_INET, SOCK_STREAM, 0);

if ($socket < 0) {

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

mysqli_close($conn);

die("Falha criando socket: " . socket_strerror ($socket) . "\n");

}

$conect = socket_connect ($socket, $address, $service_port);

if ($conect < 0) {

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

die("Falha na conexão: ($result) " . socket_strerror($conect) . "\n");

}

64

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'2');

fclose($fp);

$buf = socket_read ($socket, 1024);

$msg="I,".$teste_num_fluxo.",".$teste_ip_mestre.",".$teste_tipo_marca.",".$teste_tempo."\n"

;

socket_write ($socket, $msg, strlen ($msg));

$buf = socket_read ($socket, 1024);

$resp=split(',',$buf);

if($resp[0] == "I" & $resp[1] == "F" & intval($resp[2]) == $teste_num_fluxo){

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'3');

fclose($fp);

}

else{

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

socket_write ($socket,"E\n",3);

socket_close ($socket);

mysqli_close($conn);

die("Erro na troca de dados do teste!!!");

}

for($i=1; $i <= $teste_num_fluxo;$i++){

$result = mysqli_query($conn, 'SELECT fluxo_marca, fluxo_banda, fluxo_tam_pacote

FROM fluxos_teste WHERE teste_id='.$teste_id.' AND fluxo_id='.$i);

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

$qos[$i]="0x".$row['fluxo_marca'];

$msg="F,".$i.",0x".$row['fluxo_marca'].",".$row['fluxo_banda'].",".$row['fluxo_tam_pacote'].

"\n";

socket_write ($socket, $msg, strlen ($msg));

$buf = socket_read ($socket, 1024);

$resp=split(',',$buf);

if(($resp[0] == 'F')){// & ($resp[2] == "OK")){

mysqli_free_result($result);

continue;

}

else{

mysqli_free_result($result);

socket_write ($socket,"E\n",3);

socket_close ($socket);

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

65

mysqli_close($conn);

die("Erro na troca de dados do fluxo!!!");

break;

}

}

for($i=1; $i <= $teste_num_fluxo;$i++)

{

$cmd1 = "ping -Q ".$qos[$i]." ".$teste_ip_escravo." | awk '/^[0-9]+ bytes from / { \"date

+%Y%m%d%H%M%S\" | getline d; close(\"date +%Y%m%d%H%M%S\") ; print d, \": \",

$0; }' > resultadoping".$i.".txt &";

$cmd2 = "iperf -s -i 1 -u -y C -p 500".$i." -S ".$qos[$i]." > saida".$i.".txt &";

passthru($cmd1);

passthru($cmd2);

}

sleep(2);

socket_write ($socket,"S\n",3);

$buf = socket_read ($socket, 1024);

$resp=split(',',$buf);

if($resp[0] == 'S'){// & $resp[1] == "GO"){

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'4');

fclose($fp);

}

else{

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

socket_write ($socket,"E\n",3);

socket_close ($socket);

mysqli_close($conn);

$cmd= "killall iperf";

passthru($cmd);

$cmd= "killall ping";

passthru($cmd);

die("Erro na troca de dados!!!");

}

sleep(intval($teste_tempo)+10);

socket_write ($socket,"T\n",3);

66

$buf = socket_read ($socket, 1024);

$resp=split(',',$buf);

if($resp[0]== 'T'){// & $resp[1] == "BYE"){

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'5');

fclose($fp);

}

else{

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'-1');

fclose($fp);

socket_write ($socket,"E\n",3);

socket_close ($socket);

mysqli_close($conn);

$cmd = "killall iperf";

passthru($cmd);

$cmd = "killall ping";

passthru($cmd);

die("Teste não finalizado corretamente!!!");

}

mysqli_close($conn);

socket_close ($socket);

$cmd = "killall iperf";

passthru($cmd);

$cmd = "killall ping";

passthru($cmd);

for($i=1; $i <= $teste_num_fluxo;$i++)

{

$cmd1 = "bash ./apagaresumo.sh ".$teste_id." ".$i." saida".$i.".txt ".$dbuser." ".$dbpass."

".$basedados." &";

$cmd2 = "bash ./pings.sh ".$teste_id." ".$i." resultadoping".$i.".txt ".$dbuser." ".$dbpass."

".$basedados." &";

passthru($cmd1);

passthru($cmd2);

}

$fp = fopen('status/statusconexaom.sts', 'w');

ftruncate($fp,0 );

fwrite($fp,'6');

fclose($fp);

//fim

?>

67

APÊNDICE F – Script PHP para gerar graficos: gera_grafico.php

<?php

include("pChart/pData.class");

include("pChart/pChart.class");

$testeid = $argv[1];

$numfluxos = $argv[2];

include "dbconn.inc";

if (!$conn) {

die('Could not connect to MySQL: ' . mysqli_connect_error());

}

mysqli_query($conn, 'SET NAMES \'utf8\'');

$cont=0;

$result=mysqli_query($conn,'SELECT DISTINCT tempos FROM resultados_simples

WHERE testeid='.$testeid.' ORDER BY tempos LIMIT 1');

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

$tempoinicial = $row['tempos'] -1 ;

mysqli_free_result($result);

for($i = 1; $i <= $numfluxos; $i++){

$result = mysqli_query($conn, 'SELECT throughput, jitter, pacotes_perdidos,

pacotes_enviados, ping_rtt, tempos FROM resultados_simples R WHERE

R.testeid='.$testeid.' AND R.fluxoid='.$i.' ORDER BY tempos');

while (($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) != NULL) {

$banda[$i][$cont] = $row['throughput']/1024;

$jitter[$i][$cont] = $row['jitter'];

$pperdidos[$i][$cont] = $row['pacotes_perdidos'];

$rtt[$i][$cont] = ($row['ping_rtt'] == null) ? 1000.0 : $row['ping_rtt'];

$tempos[$i][$cont] = $row['tempos'] - $tempoinicial;

$cont++;

echo $i." + ".$cont."\n";

}

$cont = 0;

mysqli_free_result($result);

}

mysqli_close($conn);

// Dataset definition

$DataSet = new pData;

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->AddPoint($banda[$i],"BandaF".$i);

$DataSet->AddPoint($jitter[$i],"JitterF".$i);

$DataSet->AddPoint($pperdidos[$i],"PperdidosF".$i);

$DataSet->AddPoint($rtt[$i],"RttF".$i);

}

68

$DataSet->Addpoint($tempos[1],"Tempos");

$DataSet->SetAbsciseLabelSerie("Tempos");

$DataSet->SetXAxisName("Tempo de Teste");

//Grafico Largura de Banda

// Initialise the graph

$Test = new pChart(1200,300);

$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);

// Prepare the graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

$Test->setGraphArea(80,40,980,260);

// Initialise graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->AddSerie("BandaF".$i);

$DataSet->SetSerieName("Largura de Banda Fluxo ".$i,"BandaF".$i);

}

// Draw the SourceForge Rank graph

$DataSet->SetYAxisName("Largura de Banda kbps");

$Test->drawScale($DataSet->GetData(),$DataSet-

>GetDataDescription(),SCALE_NORMAL,213,217,221,TRUE,0,0,FALSE,10,FALSE);

$Test->drawGraphAreaGradient(225,225,225,-30);

$Test->drawGrid(1,TRUE,155,155,155,10);

$Test->setShadowProperties(2,2,0,0,0,30,4);

$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());

$Test->clearShadow();

$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,30);

// Write the legend (box less)

$Test->setFontProperties("fonts/tahoma.ttf",12);

$Test->drawLegend(980,50,$DataSet-

>GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);

// Write the title

$Test->setFontProperties("fonts/MankSans.ttf",18);

$Test->setShadowProperties(1,1,0,0,0);

$Test->drawTitle(0,0,"Resultado dos Testes - Largura de

Banda",255,255,255,1200,30,TRUE);

$Test->clearShadow();

// Render the picture

$Test->Render("graficos/resultado_banda.png");

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->RemoveSerie("BandaF".$i);

69

$DataSet->removeSerieName("BandaF".$i);

}

//Grafico RTT

// Initialise the graph

$Test = new pChart(1200,300);

$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);

// Prepare the graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

$Test->setGraphArea(80,40,980,260);

// Initialise graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->AddSerie("RttF".$i);

$DataSet->SetSerieName("RTT Fluxo ".$i,"RttF".$i);

}

// Draw the SourceForge Rank graph

$DataSet->SetYAxisName("RTT ms");

$Test->drawScale($DataSet->GetData(),$DataSet-

>GetDataDescription(),SCALE_NORMAL,213,217,221,TRUE,0,0,FALSE,10,FALSE);

$Test->drawGraphAreaGradient(225,225,225,-30);

$Test->drawGrid(1,TRUE,155,155,155,10);

$Test->setShadowProperties(2,2,0,0,0,30,4);

$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());

$Test->clearShadow();

$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,30);

// Write the legend (box less)

$Test->setFontProperties("fonts/tahoma.ttf",12);

$Test->drawLegend(980,50,$DataSet-

>GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);

// Write the title

$Test->setFontProperties("fonts/MankSans.ttf",18);

$Test->setShadowProperties(1,1,0,0,0);

$Test->drawTitle(0,0,"Resultado dos Testes - RTT",255,255,255,1200,30,TRUE);

$Test->clearShadow();

// Render the picture

$Test->Render("graficos/resultado_rtt.png");

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->RemoveSerie("RttF".$i);

$DataSet->removeSerieName("RttF".$i);

}

70

//Grafico Jitter

// Initialise the graph

$Test = new pChart(1200,300);

$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);

// Prepare the graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

$Test->setGraphArea(80,40,980,260);

// Initialise graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->AddSerie("JitterF".$i);

$DataSet->SetSerieName("Jitter Fluxo ".$i,"JitterF".$i);

}

// Draw the SourceForge Rank graph

$DataSet->SetYAxisName("Jitter ms");

$Test->drawScale($DataSet->GetData(),$DataSet-

>GetDataDescription(),SCALE_NORMAL,213,217,221,TRUE,0,0,FALSE,10,FALSE);

$Test->drawGraphAreaGradient(225,225,225,-30);

$Test->drawGrid(1,TRUE,155,155,155,10);

$Test->setShadowProperties(2,2,0,0,0,30,4);

$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());

$Test->clearShadow();

$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,30);

// Write the legend (box less)

$Test->setFontProperties("fonts/tahoma.ttf",12);

$Test->drawLegend(980,50,$DataSet-

>GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);

// Write the title

$Test->setFontProperties("fonts/MankSans.ttf",18);

$Test->setShadowProperties(1,1,0,0,0);

$Test->drawTitle(0,0,"Resultado dos Testes - Jitter",255,255,255,1200,30,TRUE);

$Test->clearShadow();

// Render the picture

$Test->Render("graficos/resultado_jitter.png");

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->RemoveSerie("JitterF".$i);

$DataSet->removeSerieName("JitterF".$i);

}

//Grafico Pacotes Perdidos

71

// Initialise the graph

$Test = new pChart(1200,300);

$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);

// Prepare the graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

$Test->setGraphArea(80,40,980,260);

// Initialise graph area

$Test->setFontProperties("fonts/tahoma.ttf",9);

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->AddSerie("PperdidosF".$i);

$DataSet->SetSerieName("Pacotes Perdidos Fluxo ".$i,"PperdidosF".$i);

}

// Draw the SourceForge Rank graph

$DataSet->SetYAxisName("Pacotes Perdidos");

$Test->drawScale($DataSet->GetData(),$DataSet-

>GetDataDescription(),SCALE_NORMAL,213,217,221,TRUE,0,0,FALSE,10,FALSE);

$Test->drawGraphAreaGradient(225,225,225,-30);

$Test->drawGrid(1,TRUE,155,155,155,10);

$Test->setShadowProperties(2,2,0,0,0,30,4);

$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());

$Test->clearShadow();

$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,30);

// Write the legend (box less)

$Test->setFontProperties("fonts/tahoma.ttf",12);

$Test->drawLegend(980,50,$DataSet-

>GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);

// Write the title

$Test->setFontProperties("fonts/MankSans.ttf",18);

$Test->setShadowProperties(1,1,0,0,0);

$Test->drawTitle(0,0,"Resultado dos Testes - Pacotes

Perdidos",255,255,255,1200,30,TRUE);

$Test->clearShadow();

// Render the picture

$Test->Render("graficos/resultado_pperdidos.png");

for($i = 1; $i <= $numfluxos; $i++){

$DataSet->RemoveSerie("PperdidosF".$i);

$DataSet->removeSerieName("PperdidosF".$i);

}

?>

72

APÊNDICE G – Pagina PHP com os resultados e gráficos do teste: resultados_teste.php

<?php

session_start();

include "dbconn.inc";

if (!$conn) {

die('Could not connect to MySQL: ' . mysqli_connect_error());

}

mysqli_query($conn, 'SET NAMES \'utf8\'');

$numfluxos = $_SESSION["Teste_Num_Fluxos"];

$cont=0;

for($i = 1; $i <= $numfluxos; $i++){

$jitter_status[$i]=0;

$rtt_status[$i]=0;

$banda_status[$i]=0;

$pperdidos_status[$i]=0;

$penviados[$i]=0;

$bandamedia[$i] = 0;

$penviados[$i] = 0;

$jittersoma[$i]= 0;

$rttsoma[$i]= 0;

$pperdidos[$i] = 0;

$jittermedia[$i]=0;

$rttmedia[$i]=0;

$tmp=split('-',$_SESSION["ClasseQos".$i]);

$classe = $tmp[0];

$result=mysqli_query($conn,'SELECT iptd, ipdv, iplr FROM classes_qos WHERE

classeid='.$classe);

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

$iptd[$i] = $row['iptd'] ;

$ipdv[$i] = $row['ipdv'] ;

$iplr[$i] = $row['iplr'] ;

mysqli_free_result($result);

$result=mysqli_query($conn, 'SELECT throughput, jitter, pacotes_perdidos,

pacotes_enviados, ping_rtt, tempos FROM resultados_simples R WHERE

R.testeid='.$_SESSION["TesteID"].' AND R.fluxoid='.$i.' ORDER BY tempos');

while (($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) != NULL) {

$rtt =($row['ping_rtt'] == null) ? 1000.0 : $row['ping_rtt'];

if($ipdv[$i] != "ND"){

if($row['jitter'] > floatval($ipdv[$i]))

$jitter_status[$i]=$jitter_status[$i]+1;

}

if($iptd[$i] != "ND"){

if(($rtt/2 )> $iptd[$i])

$rtt_status[$i]=$rtt_status[$i]+1;

}

$bandamedia[$i] = $bandamedia[$i] + intval($row['throughput']);

$penviados[$i] = $penviados[$i] + intval($row['pacotes_enviados']);

73

$jittersoma[$i]=$jittersoma[$i]+$row['jitter'];

$rttsoma[$i]= $rttsoma[$i]+$row['ping_rtt'];

$pperdidos[$i] = $pperdidos[$i] + $row['pacotes_perdidos'];

$cont++;

}

$bandamedia[$i] = $bandamedia[$i]/$cont;

$bandaesperada[$i] = ($_SESSION["Teste_Banda_F".$i]-(336*$penviados[$i])/$cont);

if($bandamedia[$i] < $bandaesperada[$i]){

$banda_status[$i]=1;

}

$pperdidos[$i] = $pperdidos[$i] / $penviados[$i];

if($iplr[$i] != "ND"){

if($pperdidos[$i] > floatval($iplr[$i]))

$pperdidos_status[$i]=1;

}

$jittermedia[$i]=$jittersoma[$i]/$cont;

$rttmedia[$i]=$rttsoma[$i]/$cont;

$cont = 0;

mysqli_free_result($result);

}

mysqli_close($conn);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Resultados</title>

</head>

<body>

<?php

echo "<b> Resultados do Teste:</b> ".$_SESSION["Teste_Nome"]."<br />\n";

echo "<b> Número de Fluxos:</b> ".$_SESSION["Teste_Num_Fluxos"]."<br />\n";

echo "<b> IP Lado Mestre:</b> ".$_SESSION["Teste_IP_Mestre"]."<br />\n" ;

echo "<b> IP Lado Escravo:</b> ".$_SESSION["Teste_IP_Escravo"]."<br />\n";

echo "<b> Tempo de Teste</b> ".$_SESSION["Teste_Tempo"]." segundos<br /><br

/>\n";

for($i=1; $i <= $_SESSION["Teste_Num_Fluxos"];$i++)

{

echo "<b> Fluxo ".$i."</b> : <br />";

echo "<b> Classe QoS:</b> ".$_SESSION["ClasseQos".$i]."<br />\n";

echo "<b> Tipo de Marca:</b>

".(($_SESSION["Teste_Tipo_Marca"]==1)?"DSCP":(($_SESSION["Teste_Tipo_Marca"]==2

)?"IP Precedence":$_SESSION["Teste_Tipo_Marca"]))."<br />\n";

echo "<b> Marca QoS:</b> 0x".$_SESSION["MarcaF".$i]."<br />";

echo "<b> Largura de Banda:</b> ".($_SESSION["Teste_Banda_F".$i])." bps<br

/>\n";

echo "<b> Tamanho dos Pacotes:</b> ".$_SESSION["Teste_Tam_Pacote_F".$i]."

bytes<br />\n";

74

echo "<table border=\"1\" cellspacing=\"1\" cellpadding=\"5\">";

echo "<thead>";

echo " <tr>";

echo "<th> Throughput </th>";

echo " <th>IPTD</th>";

echo " <th>IPDV</th>";

echo " <th>IPLR</th>";

echo "</tr>";

echo " </thead>";

echo " <tbody>";

echo " <tr>";

echo "<td> Média Obtida: ".$bandamedia[$i]."bps<br /> Minimo Esperado:

".$bandaesperada[$i]."bps <br /> Status:".(($banda_status[$i]==0)?"<font

color=\"#00FF00\"> OK </font>" : "<font color=\"#FF0000\"> NOK </font>")."</td>";

echo "<td> Média Obtida: ".number_format($rttmedia[$i], 3, '.', '')." ms <br />

Maximo Esperado: ".$iptd[$i]." ms <br /> Status: ".(($rtt_status[$i]==0)?"<font

color=\"#00FF00\"> OK </font>" : "<font color=\"#FF0000\"> NOK </font>")."</td>";

echo "<td> Média Obtida: ".number_format($jittermedia[$i], 3, '.', '')." ms <br

/>Maximo Esperado: ".$ipdv[$i]." ms <br /> Status: ".(($jitter_status[$i]==0)?"<font

color=\"#00FF00\"> OK </font>" : "<font color=\"#FF0000\"> NOK </font>")."</td>";

echo "<td> Taxa Obtida: ".number_format($pperdidos[$i], 3, '.', '')." <br />

Maximo Esperado: ".$iplr[$i]." <br /> Status: ".(($pperdidos_status[$i]==0)?"<font

color=\"#00FF00\"> OK </font>" : "<font color=\"#FF0000\"> NOK </font>")."</td>";

echo "</tr>";

echo "</tbody>";

echo "</table><br />";

}

?>

<b> Graficos: <br /></b>

<img src="graficos/resultado_banda.png" alt="resultado_banda"/>

<img src="graficos/resultado_jitter.png" alt="resultado_jitter"/>

<img src="graficos/resultado_rtt.png" alt="resultado_rtt"/>

<img src="graficos/resultado_pperdidos.png" alt="resultado_pperdidos"/>

</body>

</html>

75

APÊNDICE H – Resultados completos do laboratório de testes

Resultados do Teste: Cenário 1 - Teste 1

Número de Fluxos: 2

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 300000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

293960.8bps

Minimo Esperado:

291601.12bps

Status: OK

Média Obtida: 6.272

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

4.129 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 1700000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1665608bps

Minimo Esperado:

1652411.2bps

Status: OK

Média Obtida:

17.417 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 3.967

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

76

Resultados do Teste: Cenário 1 - Teste 2

Número de Fluxos: 2

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 300000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

293960.8bps

Minimo Esperado:

291601.12bps

Status: OK

Média Obtida: 5.246

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

2.529 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

77

Marca QoS: 0x28

Largura de Banda: 1700000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1666156.8bps

Minimo Esperado:

1652395.52bps

Status: OK

Média Obtida: 8.301

ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 2.863

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

78

Resultados do Teste: Cenário 1 - Teste 3

Número de Fluxos: 2

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 300000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

293960.8bps

Minimo Esperado:

291601.12bps

Status: OK

Média Obtida: 6.594

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

3.569 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 1700000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1665333.6bps

Minimo Esperado:

1652419.04bps

Status: OK

Média Obtida: 8.458

ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 3.155

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

79

Resultados do Teste: Cenário 2 - Teste 1

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Minimo Esperado:

194401.12bps

Status: OK

Média Obtida: 5.168

ms

Maximo Esperado:

100 ms

Status: OK

Média Obtida:

2.006 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

80

Marca QoS: 0x50

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Status: OK

Média Obtida: 4.670

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

1.681 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 1650000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1616804bps

Minimo Esperado:

1603805.6bps

Status: OK

Média Obtida:

11.825 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 6.865

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

81

Resultados do Teste: Cenário 2 - Teste 2

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Minimo Esperado:

194401.12bps

Status: OK

Média Obtida: 5.224

ms

Maximo Esperado:

100 ms

Status: OK

Média Obtida:

2.221 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x50

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Média Obtida: 4.673

ms

Maximo Esperado:

400 ms

Média Obtida:

2.552 ms

Maximo Esperado:

50 ms

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

82

Throughput IPTD IPDV IPLR

Status: OK Status: OK Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 1650000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1616216bps

Minimo Esperado:

1603822.4bps

Status: OK

Média Obtida:

17.295 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 9.048

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

83

Resultados do Teste: Cenario 2 - Teste 3

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Minimo Esperado:

194401.12bps

Status: OK

Média Obtida: 5.012

ms

Maximo Esperado:

100 ms

Status: NOK

Média Obtida:

2.366 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x50

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Status: OK

Média Obtida: 4.179

ms

Maximo Esperado:

400 ms

Status: NOK

Média Obtida:

2.190 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 1650000 bps

Tamanho dos Pacotes: 1500 bytes

84

Throughput IPTD IPDV IPLR

Média Obtida:

1616804bps

Minimo Esperado:

1603805.6bps

Status: OK

Média Obtida:

14.107 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 7.629

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.000

Maximo

Esperado: ND

Status: OK

Graficos:

Resultados do Teste: Cenario 3 - Teste 1

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

85

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Minimo Esperado:

194401.12bps

Status: OK

Média Obtida: 4.842

ms

Maximo Esperado:

100 ms

Status: NOK

Média Obtida:

3.338 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x50

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Status: OK

Média Obtida: 4.832

ms

Maximo Esperado:

400 ms

Status: NOK

Média Obtida:

2.591 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 2000000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1575604.8bps

Minimo Esperado:

1944104.16bps

Status: NOK

Média Obtida:

258.113 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 9.646

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.195

Maximo

Esperado: ND

Status: OK

Graficos:

86

Resultados do Teste: Cenario 3 - Teste 2

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Média Obtida: 4.952

ms

Média Obtida:

2.710 ms

Taxa Obtida: 0.000

Maximo Esperado:

87

Throughput IPTD IPDV IPLR

Minimo Esperado:

194401.12bps

Status: OK

Maximo Esperado:

100 ms

Status: OK

Maximo Esperado:

50 ms

Status: OK

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x50

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Status: OK

Média Obtida: 4.635

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

2.776 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 2000000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida: 1575448bps

Minimo Esperado:

1944073.92bps

Status: NOK

Média Obtida:

240.895 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 9.996

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.195

Maximo

Esperado: ND

Status: OK

Graficos:

88

Resultados do Teste: Cenario 3 - Teste 3

Número de Fluxos: 3

IP Lado Mestre: 192.168.1.6

IP Lado Escravo: 192.168.1.10

Tempo de Teste 300 segundos

Fluxo 1 :

Classe QoS: 0-Tempo Real Altamente Interativa

Tipo de Marca: DSCP

Marca QoS: 0x78

Largura de Banda: 200000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

195960.8bps

Minimo Esperado:

194401.12bps

Status: OK

Média Obtida: 5.151

ms

Maximo Esperado:

100 ms

Status: OK

Média Obtida:

2.840 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 2 :

Classe QoS: 1-Tempo Real Interativa

Tipo de Marca: DSCP

Marca QoS: 0x50

89

Largura de Banda: 150000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

146960.8bps

Minimo Esperado:

145801.12bps

Status: OK

Média Obtida: 4.927

ms

Maximo Esperado:

400 ms

Status: OK

Média Obtida:

2.469 ms

Maximo Esperado:

50 ms

Status: OK

Taxa Obtida: 0.000

Maximo Esperado:

0.001

Status: OK

Fluxo 3 :

Classe QoS: 5-Aplicações Padrão de Redes IP

Tipo de Marca: DSCP

Marca QoS: 0x28

Largura de Banda: 2000000 bps

Tamanho dos Pacotes: 1500 bytes

Throughput IPTD IPDV IPLR

Média Obtida:

1570469.6bps

Minimo Esperado:

1944069.44bps

Status: NOK

Média Obtida:

259.917 ms

Maximo Esperado:

ND ms

Status: OK

Média Obtida: 9.759

ms

Maximo Esperado:

ND ms

Status: OK

Taxa Obtida:

0.198

Maximo

Esperado: ND

Status: OK

Gráficos:

90

91

APÊNDICE I – Exemplos de telas de execução do sistema

Tela inicial do sistema.

Tela de configuração de novo teste lado mestre.

92

Tela de configuração de novo teste lado escravo.

Tela com o resumo das configurações do testes, apresentada antes de iniciar o teste.

93

Tela de estado do andamento do teste.

Tela de estado do andamento do teste.

94

Tela de estado do andamento do teste.

Tela de Resultados do Teste.

95

APÊNDICE J – Configurações dos roteadores

Roteador 1 – Cenário 1:

roteador1#show running-config

Building configuration...

!

version AR1700i+ - 1.0.42

!

hostname roteador1

!

mark-rule cenario1 mark 1 ip any any dscp class AF33

mark-rule cenario1 mark 2 ip any any dscp class AF11

!

ip route 0.0.0.0 0.0.0.0 192.168.1.2

!

interface ethernet 0

ip mark cenario1 in

ip address 192.168.1.5 255.255.255.252

no ipx network

mtu 1500

txqueuelen 100

no shutdown

!

interface loopback 0

ip address 127.0.0.1 255.0.0.0

no shutdown

!

interface serial 0

physical-layer synchronous

encapsulation ppp

no backup

clock rate 2048000

clock type internal

no invert txclock

ip policy 1 0 300000bps queue fifo

ip policy 2 1 1700000bps queue fifo

ip address 192.168.1.1 255.255.255.252

no ipx network

ip peer-address 192.168.1.2

no ip vj

keepalive interval 5

keepalive timeout 3

no authentication

no shutdown

!

roteador1#

96

Roteador 1 – Cenários 2 e 3:

roteador1#show running-config

Building configuration...

!

version AR1700i+ - 1.0.42

!

hostname roteador1

!

mark-rule cenario2e3 mark 1 ip any any dscp class AF33

mark-rule cenario2e3 mark 2 ip any any dscp class AF22

mark-rule cenario2e3 mark 3 ip any any dscp class AF11

!

ip route 0.0.0.0 0.0.0.0 192.168.1.2

!

interface ethernet 0

ip mark cenario2e3 in

ip address 192.168.1.5 255.255.255.252

no ipx network

mtu 1500

txqueuelen 100

no shutdown

!

interface loopback 0

ip address 127.0.0.1 255.0.0.0

no shutdown

!

interface serial 0

physical-layer synchronous

encapsulation ppp

no backup

clock rate 2048000

clock type internal

no invert txclock

ip policy 1 0 200000bps queue fifo

ip policy 2 0 150000bps queue fifo

ip policy 3 1 1650000bps queue fifo

ip address 192.168.1.1 255.255.255.252

no ipx network

ip peer-address 192.168.1.2

no ip vj

keepalive interval 5

keepalive timeout 3

no authentication

no shutdown

!

roteador1#

97

Roteador 2 – Cenário 1:

roteador2#show running-config

Building configuration...

!

version AR1700i+ - 1.0.42

!

hostname roteador2

!

mark-rule cenario1 mark 1 ip any any dscp class AF33

mark-rule cenario1 mark 2 ip any any dscp class AF11

!

ip route 0.0.0.0 0.0.0.0 192.168.1.1

!

interface ethernet 0

ip mark cenario1 in

ip address 192.168.1.9 255.255.255.252

no ipx network

mtu 1500

txqueuelen 100

no shutdown

!

interface loopback 0

ip address 127.0.0.1 255.0.0.0

no shutdown

!

interface serial 0

physical-layer synchronous

encapsulation ppp

no backup

no clock rate

clock type external

no invert txclock

ip policy 1 0 300000bps queue fifo

ip policy 2 1 1700000bps queue fifo

ip address 192.168.1.2 255.255.255.252

no ipx network

ip peer-address 192.168.1.1

no ip vj

keepalive interval 5

keepalive timeout 3

no authentication

no shutdown

!

roteador2#

98

Roteador 2 – Cenários 2 e 3:

roteador2#show running-config

Building configuration...

!

version AR1700i+ - 1.0.42

!

hostname roteador2

!

mark-rule cenario2e3 mark 1 ip any any dscp class AF33

mark-rule cenario2e3 mark 2 ip any any dscp class AF22

mark-rule cenario2e3 mark 3 ip any any dscp class AF11

!

ip route 0.0.0.0 0.0.0.0 192.168.1.1

!

interface ethernet 0

ip mark cenario2e3 in

ip address 192.168.1.9 255.255.255.252

no ipx network

mtu 1500

txqueuelen 100

no shutdown

!

interface loopback 0

ip address 127.0.0.1 255.0.0.0

no shutdown

!

interface serial 0

physical-layer synchronous

encapsulation ppp

no backup

no clock rate

clock type external

no invert txclock

ip policy 1 0 200000bps queue fifo

ip policy 2 0 150000bps queue fifo

ip policy 3 1 1650000bps queue fifo

ip address 192.168.1.2 255.255.255.252

no ipx network

ip peer-address 192.168.1.1

no ip vj

keepalive interval 5

keepalive timeout 3

no authentication

no shutdown

!

roteador2#