1
Qualidade de Serviço aplicado a redes IP
Marcelo S. Araujo
Resumo - Este trabalho consiste em demonstrar e explicar as
ténicas existentes no mercado para a criação de mecanismos que
possam prover algum tipo de grarantia de qualidade de serviço
para aplicações em redes de computadores que usam o protocolo
IP. O artigo foi elaborado visando únicamente as técnicas
usadas no protocolo IP, foram escolhidas apenas as tecnologias
já consolidadas no mercado e que tornaram-se padrões na
Internet.
Index Terms-- Cisco, CoS, DSCP, DiffServ, FreeBSD, IP,
IPFW, MPLS, QoS e ToS.
I. NOMENCLATURA
Uma lista com as principais nomenclaturas
alfabetica usadas no texto.
AF
BE
BSD
CS
DSCP
EF
IP
IPFW
PHB
QoS
RFC
ToS
E
-
em ordem
Assure Forwarding
Best Effort
Berkeley Software Distribution
Class Selector
Differentiated Services Field Codepoint
Expedite Forwarding
Internet Protocol
IP Firewall
Per-Hop Behavior
Quality of Service
Request For Comments
Type of Service
II. INTRODUÇÃO
ste artigo apresenta as principais técnicas usadas no
mercado para manipular e classificar pacotes de dados
transferidos como fluxo de informações usando o protocolo IP
em suas versões 4 e 6 mais comumente conhecidos como
Ipv4 e Ipv6. A aplicabilidade desta pesquisa consiste tanto
em mostrar os modelos em um ambiente experimental e
funcional, como na geração de código de máquina
desenvolvido usando a linguagem de programação C e
aplicado diretamente no sistema operacional FreeBSD,
permitindo que outras
pessoas ao redor
do mundo
beneficiem-se com este aprendizado.
As redes IP's suportam hoje diferentes aplicações
encontradas no mercado, o uso da tecnologia para a
transferência de voz, video e dados de aplicações críticas
requerem cada vez mais o uso de técnicas para classificar este
tipo de fluxo de informação e garantir a qualidade em seu
momento
de
uso.
A
escolha do FreeBSD como sistema operacional para
a implementação dos testes e geração de código
partiu em síntese por ser conhecido como um dos mais
robustos e seguros sistemas operacionais da computação
moderna. FreeBSD é usado no coração da Internet, toda a
infra-estrutura DNS F-ROOT, na raiz do sistema de resolução
de nomes é sustentado por FreeBSD, que também é a base dos
maiores backbones acadêmicos e governamentais, segundo
Paul Vixie do ISC(Internet Systems Consortium). FreeBSD
serve os sites de maior tráfego na Internet, em especial a rede
Yahoo! e as maiores empresas de hosting do mercado,
representando segundo a consultoria inglesa Netcraft 27% de
todos
os
sites
da
Internet.
Rank Position
Company Site
OS
1
DataPipe
FreeBSD
6
Aplus
FreeBSD
Tab1.
F
8
Pair Networks
FreeBSD
12
Swishmail
FreeBSD
23
WebAir
FreeBSD
Servidores
com
os
maiores
uptimes.
reeBSD
é conhecido também por ter uma das
melhores e mais famosas implementações TCP/IP
conhecidas no mercado. Em julho de 2005, Andre
Oppermann, desenvolvedor FreeBSD solicitou levantamento
de fundos para trabalhar de forma dedicada em melhorias do
protocolo TCP/IP no FreeBSD. Sistemas BSD tem, desde seus
primórdios, a reconhecida fama de ter uma das pilhas TCP/IP
mais robustas e com melhor performance, além de ter sido o
sistema onde o TCP/IP foi projetado, criado e popularizado. O
FreeBSD por volta da série 3 teve um grande número de
mudanças, e o sistema ficou conhecido na época como a
melhor implementação TCP/IP disponível, e manteve esse
título sem contestações até início da série 4. Hoje na atual
2
série 7 o FreeBSD destaca-se pela performance e inovações
inseridas novamente na pilha TCP/IP.
III. PREPARAÇÃO TÉCNICA DO TRABALHO
Rank Position
Company Site
OS
1
DataPipe
FreeBSD
10
Aplus
FreeBSD
13
Swishmail
FreeBSD
22
Pair Network
FreeBSD
25
WebAir
FreeBSD
T
ab2. Servidor com maior troughput
A
escolha do IPFW e suas API's para a implementação
do código experimental e para a execução dos testes e
comprovações de teorias consistem em que o mesmo é
robusto o bastante e possui uma grande comunidade de
desenvolvedores e especialistas nesta ferramenta que é o
FIREWALL padrão do FreeBSD , implementado inicialmente
em 1993 por Daniel Boulet e mantido hoje por uma
comunidade de desenvolvedores , destacando-se entre eles
Luigi Rizzo ao qual implementou muitas novas funções como
DUMMYNET e outros mecanismos para a implementação de
Traffic Shapping. Históricamente o FreeBSD é um dos
projetos mais bem organizados e possuí mais de 10 anos de
logs em seu repositório oficial de código. O IPFW em
particular possuí mais de 5 anos de histórico documentado .
“””
Revision 1.1 - Thu Jun 27 23:02:16 2002 UTC (5 years, 11 months ago)
by luigi.
“””
A
lém destas informações o IPFW possuí uma lista
especialisada
para
discussões
entre
os
desenvolvedores chamada de [email protected] e
os emails gerados por esta pesquisa podem ser vistos em:
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003282.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003291.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003294.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003296.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003297.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008February/003295.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008March/003387.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008March/003422.html
http://lists.freebsd.org/pipermail/freebsd-ipfw/2008March/003421.html
Para interação com outros desenvolvedores ao redor do
mundo em especial com Roman Bogorodskiy(RUSSIA),
Stanislav Sedov(RUSSIA) e Ion-Mihai Itetcu(ROMENIA) ao
qual ajudaram-me em muitos tópicos desta pesquisa, desde
a implementação do código até a resolução dos testes, foi
usado alguns sistemas desenvolvidos pelo google como o
WIKI(http://code.google.com/p/exports/w/list)
e
o
GoogleCode
um
agregado
de ferramentas
para
desenvolvimento colaborativo.
Os principais
tópicos
pesquisados
foram as
implementações que modificam diretamente algum aspecto
do protocolo IP com foco direto em seu cabeçalho,
O protocolo IPv4 é dividido em seu cabeçalho por 14
campos contendo de 20 a 60 bytes com endereços de 32
bits .
O protocolo IPv6 é dividido em seu cabeçalho por 8
campos contendo 40 bytes fixos com endereços de 128bits.
IPv4 (32bits) 232 = 4 bilhões de endereços
IPv6 (128bits) 2128 = 340 decilhões de endereços
IPv4 = 200.18.53.60
IPv6 = 2001:12F0:502:206:212:F0FF:FEDA:BA61
Cada versão de protocolo implementa o conceito de
precedência de pacote e a interoperabilidade entre ambas as
versões existe de forma funcional.
Podemos classificar as técnicas de marcação IP
existentes no mercado como:
1.
2.
3.
ToS
CoS
DSCP
A. A arquitetura do IPv4 e IPv6
Para entendermos as técnicas utilizadas neste projeto é
necessário que tenhamos uma introdução básica sobre a
estrutura do protocolo IP em ambas as versões.
3
definem a precedência do pacote.
/*
* Definitions for IP precedence (also in ip_tos)
* unused).
*/
#define IPTOS_PREC_NETCONTROL
#define IPTOS_PREC_INTERNETCONTROL
#define IPTOS_PREC_CRITIC_ECP
#define IPTOS_PREC_FLASHOVERRIDE
#define IPTOS_PREC_FLASH
#define IPTOS_PREC_IMMEDIATE
#define IPTOS_PREC_PRIORITY
#define IPTOS_PREC_ROUTINE
(hopefully
0xe0
0xc0
0xa0
0x80
0x60
0x40
0x20
0x00
Tipo de serviço: Os próximos 4 bits definem o tipo de
serviço do pacote.
Neste diagrama de blocos podemos ver que existe uma
divisão significativa em todo o cabeçalho IP, usando a
estrutura de código escrita em C do próprio IP, rápidamente
apresentarei esta estrutura.
Código: sys/netinet/ip.h
Estrutura IPv4:
Version: Sempre deve ser definido com a versão corrente
do protocolo, neste caso 4.
IP Header Length: Normalmente é formado por um
tamanho de 32bits, o real tamanho do cabeçalho IP.
struct ip {
#if BYTE_ORDER == LITTLE_ENDIAN
u_int ip_hl:4,
/* header length */
ip_v:4;
/* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
u_int ip_v:4,
/* version */
ip_hl:4;
/* header length */
#endif
ToS: Campo de 8bits que indica o tipo de serviço ao qual
o pacote faz parte, desta forma é possivel classificar
determinado pacote e tomar uma decição em cima desta
classificação.
No campo ToS temos uma grande estrutura de código que
divide os 8 bits em 3 tipos de classificadores de pacotes.
Precedência IP: Os 3 primeiros bits do campo ToS
/*
* Definitions for IP type of service (ip_tos).
*/
#define IPTOS_LOWDELAY
0x10
#define IPTOS_THROUGHPUT
0x08
#define IPTOS_RELIABILITY
0x04
#define IPTOS_MINCOST
0x02
#if 1
/* ECN RFC3168 obsoletes RFC2481, and these will be
deprecated soon. */
#define IPTOS_CE
0x01
#define IPTOS_ECT
0x02
#endif
O sétimo bit: Comumente chamado de MBZ(must be
zero), é considerado desta forma após um UPDATE da
RFC1349.
Ná prática temos a seguinte divisão dos 8bits no header
ToS :
0
1
2
3
4
5
6
7
PRECEDENCE
TOS
MBZ
|------------------------------- Field ToS ---------------------------|
Size of Datagram: Combina o tamanho do cabeçalho com
o tamanho do dado enviado, este campo é definido em bytes.
O minímo é 20bytes e o máximo 65535 ou 64Kbytes de
tamanho de um datagrama.
/* maximum packet size */
#define IP_MAXPACKET
65535
Identification: Um nùmero de até 16bits que em
conjunto com o source address identifica este pacote, usado
4
durante o reassembly de fragmentos de datagrama para a
remontagem do pacote.
onde o pacote não está protegido por uma camada CRC no
link físico. Pacotes com checksum inválidos são descartados
por todos os nós em uma rede.
Flags: Uma sequência de 3 flags usada para controlar
quando um roteador pode estar apto a fragmentar um pacote
recebido..
u_short ip_off;
#define IP_RF 0x8000
#define IP_DF 0x4000
#define IP_MF 0x2000
/* fragment offset field */
/* reserved fragment flag */
/* dont fragment flag */
/* more fragments flag */
Fragmentation Offset: Um contador de 1byte que é setado
pelo roteador que esta fragmentando determinado pacote.
Time To Live: Nùmero máximo de saltos em que um
pacote pode ser encaminhado até o seu destino, é
decrementado por cada roteador que o mesmo passa. Existem
duas definições para o TTL ao qual ditam o nùmero máximo
de saltos que um pacote pode dar, na RFC 1340 esse nùmero
é de 64 saltos, este é o padrão usado no sistema FreeBSD.
/*
* Internet implementation parameters.
*/
/* maximum time to live (seconds) */
#define MAXTTL
255
/* default ttl, from RFC 1340 */
#define IPDEFTTL 64
/*
* This is the real IPv4 pseudo header, used for computing
* the TCP and UDP.
*/
struct ippseudo {
/* source internet address */
struct in_addr ippseudo_src;
/* destination internet address */
struct in_addr ippseudo_dst;
u_char
ippseudo_pad; /* pad, must be zero */
u_char
ippseudo_p;
/* protocol */
u_short
ippseudo_len; /* protocol length */
};
#endif
Source Address: O endereço original de quem enviou o
pacote.
Destination Address: O endereço final do destinatario do
pacote.
Estrutura IPv6:
Version: 4bits com o número da versão IP.
Traffic Class: 8bits valor de prioridade para tráfego
internet.
Protocol: Indica o tipo de protocolo usado para transportar
o pacote IP.
IDENTIFICADOR PROTOCOLO
1
ICMP
2
IGMP
6
TCP
17
UDP
Header Checksum: É insirido pelo remetente do pacote e
atualizado sempre que o cabeçalho é modificado por um
roteador, comumente usado para detectar erros de
transformação introduzida no pacote dentro de um roteador
Flow Label: 20bits utilizado para manipulação especial de
identificação sequêncial de pacotes entre origem e destino.
Payload length: 16bits unsigned, Especifica o
comprimento de dados incluso no pacote. Quando habilitado a
zero, a opção é um hop-by-hop jumbo frame.
Next Header: Especifica o próximo protocolo
encapsulado. Os valores são compatíveis com os especificados
para o protocolo IPv4.
Hop Limit: 8bits unsigned, é um substituto do campo TTL
no IPv4.
Source Address e Destination Address: Tem a mesma
função do protocolo IPv4.
NOTA: A estrutura IPV6 é muito simples tratando-se do
código implementado, por este motivo não introdusi trexos do
código neste documento, mas os mesmos podem ser vistos
em:
código: sys/netinet/ip6.h
5
B. ToS - Type of Service
Este tópico pretende clarificar alguns aspectos dentro dos
8bits usados por todo o campo ToS no cabeçalho IPv4. O
protocolo IPv6 foi projetado para manter interoperabilidade
com condicionadores de pacotes projetados para o IPv4, o
mesmo tipo de marcação usado no IPv4 pode ser usado em
conjunto
com
o
protocolo
IPv6.
Existe hoje algumas dúzias de RFC's que explicam o uso
correto dos 8bits do campo ToS, vários updates foram
lançados em torno destas RFC's gerando uma pequena
confusão e não conformidade entre diversos fabricantes de
equipamentos
de
rede.
Embora tudo isso pareça desorganizado, temos algumas
regras e práticas a serem adotadas para implementar o uso
correto do ToS. Na RFC 791 temos os 3 primeiros bits 0-2
identificados como PRECEDENCE e os próximos 3 bits 3-5
para classificar o tipo de serviço, o restante dos bits 6 e 7 são
reservados para uso futuro.
Bits 0-2: Precedence.
Bit 3: 0 = Normal Delay,
1 = Low Delay.
Bits 4: 0 = Normal Throughput, 1 = High Throughput.
Bits 5: 0 = Normal Relibility, 1 = High Relibility.
Bit 6-7: Reserved for Future Use.
0
1
2
3
PRECEDENCE
4
5
TOS
6
7
0
0
Em 1992 foi criada a RFC 1349 e consequentemente
parte da RFC 791 tornou-se obsoleta. Apartir desta nova
definição usamos um bit reservado para transmitir datagramas
dentro da rede com uma nova marcação.
0
------
1
minimize delay
maximize throughput
maximize reliability
minimize monetary cost
normal service
2
3
4
5
6
7
PRECEDENCE
TOS
MBZ
|------------------------------- Field ToS ---------------------------|
Para provar os conceitos aprendidos nesta pesquisa além
das RFC's consultadas foi verificado como o sistema FreeBSD
implementa essas ténicas em seu principal firewall
chamado de IPFW.
Código: sbin/ipfw/ipfw2.c
static struct _s_x f_iptos[] = {
{ "lowdelay", IPTOS_LOWDELAY},
{ "throughput", IPTOS_THROUGHPUT},
{ "reliability", IPTOS_RELIABILITY},
};
Podemos verificar que o IPFW esta de acordo com a
implementação proposta na RFC 1349.
C. ToS – IP Precedence
O campo PRECEDENCE é raramente usado e por default é
chamado com o offset 0xe0 no sistema FreeBSD com todos
os 3 primeiros bits setados como 111.
Código: sys/netinet/ip_fw2.c
case O_IPPRECEDENCE:
match = (is_ipv4 &&
(cmd->arg1 == (ip->ip_tos & 0xe0)) );
break;
O IPFW por padrão não suporta todas as combinações
propostas pela RFC 791..
|------------------------------- Field ToS ---------------------------|
1000
0100
0010
0001
0000
{ "mincost", IPTOS_MINCOST},
{ "congestion", IPTOS_CE},
{ "ecntransport", IPTOS_ECT},
{ "ip tos option", 0},
{ NULL, 0 }
111 - Network Control
110 - Internetwork Control
101 - CRITIC/ECP
100 - Flash Override
011 - Flash
010 - Immediate
001 - Priority
000 – Routine
A RFC 791 explica como podemos usar estes 3 primeiros
bits para controlar alguns aspectos em uma rede de
computadores.
Os offsets 0xe0(Network Control) e
0xc0(Internet Control) devem ser usados somentre e
unicamente entre GATEWAYS de rede, todos os outros
offsets podem ser usados para controles internos dentro da
rede.
Com base neste estudo
foi desenvolvido um
patch(remendo) que implementa todos os controles
PRECEDENCE propostos pela RFC 791. Este patch ainda
não foi incluído oficialmente no KERNEL do sistema, o
mesmo pode ser visto e acompanhado através do BUG
TRACKER GNATS.
PR Number: kern/121122
http://www.freebsd.org/cgi/query-pr.cgi?pr=121122
Este patch implementa uma nova função chamada de
iptospre na interface ipfw com o usuario.
ipfw add 10 iptospre immediate ip from 192.168.0.0/24 to any
ipfw add 11 count ip from 192.168.0.0/24 to any iptospre immediate
6
D. DSCP – Differentiated Services Code Point
Serviços Diferenciados(DiffServ) é um novo modelo no
qual o tráfego é tratado por sistemas intermediários com
prioridades relativas baseadas no campo ToS. Definido na
RFC 2474 e RFC 2475, o padrão DiffServ substitui a
especificação original de definir a prioridade do pacote
descrita na RFC 791. O DiffServ aumenta o número de níveis
de prioridade definíveis realocando os bits no campo ToS.
IP PRECEDENCE = INTERCONTROL
DSCP CODE = CS6
O CS(Class Selector) mantêm a interoperabilidade entre
redes que usam o IP PRECEDENCE e DSCP para manipular
e classificar alguns fluxos de dados.
DSCP
CS0
CS1
CS2
CS3
CS4
CS5
CS6
CS7
A RFC 2474 define a imiplementação DiffServ com o
seguinte texto:
“””
Differentiated services enhancements to the Internet
protocol are intended to enable scalable service
discrimination in the Internet without the need for per-flow
state and signaling at every hop. A variety of services may be
built from a small, well-defined set of building blocks which
are deployed in network nodes.
“””
O aumento da necessidade de permitir a discriminação de
serviços escaláveis usando o protocolo IP sem a necessidade
de definir o estado desta prioridade por fluxo de dados
transmitido e o beneficio de definir blocos de condicionadores
de tráfego para garantir a qualidade do serviço é um dos
principais motivadores para o DiffServ tornar-se o padrão
usado hoje pelo mercado.
O DSCP usa os seis primeiros bits mais significativos do
cabeçalho ToS. Os últimos bits atualmente não são usados.
IPTOSPRE
ROUTINE
PRIORITY
IMMEDIATE
FLASH
FLASHOVER
CRITICECP
INTERCONTROL
NETCONTROL
BITS
000000
001000
010000
011000
100000
101000
110000
111000
O padrão DiffServ usa os 6 primeiros bits mais
significativos no campo ToS chamado de DSCP ao qual
possibilita criar alguns mecanismos para condicionamento de
tráfego in redes de computadores.
0
1
2
3
4
5
6
7
0
0
0
0
0
0
X
X
|------------------------------- Field ToS ---------------------------|
A classificação dos pacotes estão disponíveis em 3 fases,
estas fases provêem uma nova forma de diferenciar serviços
dentro de uma rede.
As RFCs 2597 e 2598 propoem estes três níveis:
DSCP: Differentiated services codepoint
CU: Currently unused
Minha principal dúvida é em como o DSCP trabalha em
uma rede onde usa-se IP PRECEDENCE para marcar algum
tipo de pacote IP. A estrutura DSCP prove
plena
interoperabilidade entre redes que usam IP PRECEDENCE. O
padrão estipulado pelo IETF(Internet Engineering Task
Force) reusa todo os bits do campo ToS mas mantém total
compatibilidade entre as duas tecnologias.
Exemplo:
0
1
2
3
4
5
6
7
1
1
0
X
X
X
X
X
|------------------------------- Field ToS ---------------------------|
EF (expedite forwarding): Têm um atraso baixo e
concedem a largur a de banda necessária.
AF (assure forwarding): Diferenciar e classificar a largura
de banda.
BE (best-effort): Nenhuma classificação de largura de
banda.
EF – Expedite forwarding: Assim como é descrito na
RFC 2598, o EF deve ter uma baixa perda de pacote e uma
baixa latência o que lhe assegura uma rápida transmissão de
um extremo ao outro da rede, este serviço é conhecido
também como serviço Prêmio. Muitas situações onde a rede
têm um tráfego excedido e precisamos de alguma largura de
banda garantida para uma palicação, devemos usar o EF para
este.
O DSCP recomendado para o EF: 101110
AF – Assure forwarding: A RFC 2597 define um grupo
chamado de AF(Assure forwarding) dentro do domínio
7
DiffServ. Este grupo define quatro principais níveis para
classificar e manipular alguns fluxos dentro da rede. Assim
como é descrito na RFC 2597, o AF é um meio de classificar
diferentes garantias para um pacote IP dentro de um domínio
DiffServ, essas classificações tem como base duas situações,
prioridade de transmissão e probabilidade de descarte.
Class 1
Baixa Perda
Média Perda
Alta Perda
1010
1100
1110
AFxy
DSCP
AF11
AF12
AF13
AF21
AF22
AF23
AF31
AF32
AF33
AF41
AF42
AF43
Class 2
10010
10100
10110
Class 3
alguns componentes como classificadores de pacotes,
condicionadores de pacotes e algoritimos de descarte são
necessários para a implementação de QoS em redes de
computadores. Na figura abaixo podemos ver todos os prérequisitos para implementar QoS em uma rede IP.
Class 4
11010
11100
11110
100010
100100
100110
Onde x: Prioridade de transmissão.
Onde y: Probabilidade de discarte.
BITS
001010
001100
001110
010010
010100
010110
011010
011100
011110
100010
100100
100110
BE – Best effort: Quando não é necessário nenhum
mecanismo para diferenciar o tráfego, usamos o BE.
Um dos desenvolvedores
do FreeBSD Roman
Bogorodskiy(RUSSIA) desenvolveu um patch que ainda não
está incluído oficialmente no KERNEL do sistema, o mesmo
pode ser visto e acompanhado através do BUG TRACKER
GNATS.
O projeto FreeBSD provê todos os recursor necessários
para a implementação de QoS em redes de computadores,
sendo que o principal componente é chamado de
DUMMYNET(4).
O DUMMYNET é desenvolvido e mantido por Luigi
Rizzo([email protected])
inicialmente
para
efetuar
experimentos em redes de computadores. Hoje o sistema
DUMMYNET permite o controle do tráfego simultaneamente
em diversas interfaces de rede,
pode-se implementar
limitações de largura de banda, políticas de prioridade em filas
de condicionamento de tráfego e emulação de atraso e perda
de pacotes,
todos os recursos providos pelo sistema
DUMMYNET são implementados através do ipfw(8).
PR Number: kern/102471
http://www.freebsd.org/cgi/query-pr.cgi?pr=102471
Este patch implementa uma nova função chamada de dscp
na interface do ipfw com o usuario.
ipfw add 10 dscp AF33 ip from 192.168.0.0/24 to any
ipfw add 11 count ip from 192.168.0.0/24 to any dscp AF33
E. Ambiente de teste
Uma breve descrição do ambiente a ser testado e da
simulação prática.
Quando falamos em criar ou aplicar QoS em uma rede de
computadores usando o protocolo IP ou não, devemos estar
atento que QoS é um conjunto de componentes ao qual
permite garantir alguma qualidade no serviço prestado,
somente marcar e identificar pacotes não garante que
determinado fluxo de dados tenha prioridade dentro da rede,
O DUMMYNET implementa uma variante do algoritmo
de descarte de pacotes WFQ(Weighted Fair Queueing)
chamado de WF2Q+(Worst-case Weighted Fair Queueing) .
O algoritimo WF2Q+ foi desenvolvido por Jon Bennett e
8
Zhang Hui em 1997. Com o WF2Q+, cada fluxo está
associado a um peso, de tal forma que a soma de todos os
pesos de todos os fluxos não pode ser maior que um valor prédefinido W.
mesmos estão descritos e apresentados no diagrama de rede
abaixo.
peso[1] + peso[2] + ... + peso[N] <= W
Um determinado peso especifica o quanto de capacidade de
saída determinado fluxo tem o direito de receber, quanto
menor o peso, menos pacotes seram enfileirados.
O funcionamento do DUMMYNET consiste básicamente
em usar o IPFW para classificar os pacotes e devidi-los em
fluxos. Dependendo da política adotada, um fluxo de pacote
pode conter uma única conexão TCP, ou a partir da
identificação do src/dst, ou uma sub-rede inteira ou
simplesmente um determinado protocolo.
Pacotes que pertencem ao mesmo fluxo são então passados
para o interior de dois diferentes objetos que aplicam o
condicionamento de tráfego.
PIPE: O PIPE emula um link com determinada largura de
banda, delay e filas para a simulação de perda de pacotes. Os
pacotes são enfileirados a partir de um classificador e, em
seguida, transferido para o PIPE correspondente.
QUEUE: O QUEUE é uma abstração utilizada para
executar o algoritimo WF2Q+. O QUEUE associa um peso e
uma referência para cada PIPE, cada vez que o QUEUE
receber determinado fluxo o controle de banda é efetuado. O
descarte tem como base o droptail, onde os pacotes que
chegarem quando a fila estiver cheia, se ainda não for hora de
liberar o fluxo desta fila serão descartados.
Para que a QUEUE libere o fluxo é necessário preencher o
espaço de 50 slots , o preenchimento deste espaço gera um
delay como no exemplo a seguir.
Criando uma QUEUE de 50Kbit/s, o MTU da interface de
rede continua com 1500bytes multiplicando o MTU pela
quantidade de slots, precisamos de um fluxo de 600Kbit/s para
a liberação do fluxo de dados através da fila, esse mecanismo
geraria um delay de 12 segundos para a liberação do fluxo de
pacotes.
MTU * SLOT
1024
/
QUEUE
12000 * 50 / 1024 = 585.9375 Kb / 50 = 11.71875/seg
É necessário um cuidado extra na hora de criar os
condicionadores
de pacotes para não inserir delays
indesejados.
A disposição dos equipamentos e aconfiguração dos
MÁQUINA
LAPTOP
GATEWAY
MODEM ADSL2+
PROCESSADOR
AMD64 Turion
AMD32 Athlon XP
MIPS32
O ambiente proposto implementa através da máquina
GATEWAY o condicionamento do pacote em filas de
prioridade e faz a marcação dos pacotes usando DSCP, o
modem por sua vez prioriza os pacotes verificando a marcação
DSCP de cada um deles.
Númerando a sequência de passos podemos melhor
visualizar todo o processo.
SEQ.
MAQ.
PROCESSO
1
LAPTOP
Gera um fluxo de dados para determinado
serviço INTERNET(www, smtp, pop).
2
GATEWAY
Identifica este fluxo de dados e classifica.
3
GATEWAY
Condiciona esse fluxo de dados em uma
QUEUE.
4
GATEWAY
Marca os pacotes IP's com o código DSCP.
5
MODEM
Identifica o pacote através do código DSCP.
6
MODEM
Prioriza o envio pelo código DSCP.
Ná pratica teremos uma ADSL de 2Mbps de download e
512Kbps de upload, vamos priorizar alguns serviços conforme
a tabela abaixo.
Serviço
ssh, cvsup,
cvspserver
dns, www
imap, smtp, pop3
All
Peso
50
DiffServ
EF
20
10
5
AF11
AF12
BE
9
Configuramos então na máquina GATEWAY as seguintes
regras no IPFW:
1) Limitamos a nossa banda de upload para não saturar o link.
ipfw pipe 1 config bw 512Kbit/s
2) Configuramos 4 filas com pesos diferenciados para o pipe1.
ipfw queue 40 config weight 5 pipe 1
ipfw queue 30 config weight 50 pipe 1
ipfw queue 20 config weight 20 pipe 1
ipfw queue 10 config weight 10 pipe 1
3) Priorizamos os principais serviços.
ipfw add queue 30 ip from any to any ssh,cvsup,cvspserver
ipfw add dscp EF ip from any to any ssh,cvsup,cvspserver
F. Conclusão
Este trabalho além de apresentar as ténicas existentes no
mercado em aplicação de mecanismos de QoS para criar
ambientes e garantir a qualidade dos serviços prestados em
redes de computadores , mostra também os benefícios que o
software de código aberto proporciona para o
desenvolvimento de tecnologias para um mercado onde o
consumo de Internet demanda cada vez mais qualidade e
garantia de serviços proporcionando um crescimento no
desenvolvimento de novas aplicações, mudando a forma de
como as pessoas interagem usando estes mecanismos e como
as mesmas podem obter novas experiências de acesso.
G. Trabalhos futuros
Apartir deste trabalho, muitos desenvolvedores ao redor do
mundo solicitaram a criação de um evento de ação para o IP
FIREWALL IPFW ao qual deverá englobar
todas as
implementações mostradas neste artigo em um único módulo
chamado de MODIP. O MODIP permitirá que o usuário
através desta ação possa aplicar qualquer um dos mecanismos
citados neste artigo, conforme exemplo a seguir.
4) Diferenciamos alguns erviços.
ipfw add queue 20 ip from any to any 53,80
ipfw add dscp AF11 ip from any to any 53, 80
5) Diferenciamos alguns erviços.
ipfw add queue 10 ip from any to any imap,smtp,pop3
ipfw add dscp AF12 ip from any to any imap,smtp,pop3
6) Deixamos o resto com o melhor esforço.
ipfw add queue 40 ip from any to any
ipfw add dscp BE ip from any to an
ipfw add 10 modip tos:lowdelay ip from any to any
ipfw add 11 modip dscp:af14 ip from any to any
ipfw add 12 modip ippre:flash ip from any to any
Desta forma podemos representar a divisão e classificação
dos serviços acima da seguinte forma.
O patch pode ser acessado em:
http://people.freebsd.org/~araujo/logs/ipfwmodip20080324.diff
IV. REFERENCES
Periodicals:
[1]
[2]
[3]
[4]
Ferguson, Paul, and Huston, Geoff, "Quality of Service Delivering QoS
on the Internet and in Corporate Networks," New York, John Wiley&
Son, 1998
Lee, Donn, "Enhaced IP Services,"Indianapolis, Cisco Press, 1999.
Vegesna, Srinivas, “IP Quality of Service for the Internet and The
Intranets,” Indianapolis, Cisco Press, 2000.
Cisco System, “Implementing Quality of Service Policies with DSCP”,
Feb
15,
2008[Online],
Available:
http://www.cisco.com/en/US/tech/tk543/tk757/technologies_tech_note0
9186a00800949f2.shtml
No modem ADSL usamos apenas a identificação do DSCP
para priorizar as classes de serviços conforme a tabela abaixo.
Technical Reports:
Serviço
ssh, cvsup,
cvspserver
dns, www
imap, smtp, pop3
All
Tipo
Prêmio
DiffServ
EF
Ouro
Prata
Bronze
AF11
AF12
BE
[5]
Postel, J., "INTERNET PROTOCOL,", RFC 0791, Darpa Internet
Program., Vriginia, September. 1981.
[6] IETF, "Requirements for Internet Hosts – Communication Layers,",
RFC 1122, Octoberr. 1989
[7] Almquist, P., "Type of Service in the Internet Protocol Suite,", RFC
1349, Consultant.,July. 1992.
[8] Xiao X., Crabbe E. AND Paxson V., "TCP Processing of the IP
Precedence Field,"ACIRI/ICSI.,January. 2000.
[9] Iana, "Differentiated Services Field Codepoints”, Mar.2002[Online],
Available: http://www.iana.org/assignments/dscp-registry
[10] Nichols, K., Blake, S., Baker, F., Black, D., "Definition of the
Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers",
RFC 2474, December.1998.
1
0
[11] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., Weiss, W., "An
Architecture for Differentiated Services",RFC 2475, December.1998.
[12] Heinanen, J., Baker, F., Weiss, W., Wroclawski, J., "Assure Forwarding
PHB Group", RFC 2597, June.1999.
[13] Jacobson, V., Nichols, K., Poduri, K., "An Expedited Forwarding PHB",
RFC 2598, June.1999.
[14] Davie, B., Charny, A., Bennett, J.C.R., Benson, K., Le Boudec, J.Y.,
Courtney, W., Davari, S., Firoiu, V., Stiliadis, D., "An Expedited
Forwarding PHB(Per-Hop Behavior)", RFC 3246, March.2002.
[15] Gorssman, D., "New Terminology and Clarifications for Diffserv", RFC
3260, April.2002.
Papers Presented at Conferences (Unpublished):
[16] Kenjiro Cho, "The Design and Implementation of the ALTQ Traffic
Management System," dissertation, Keio University, January
2001[Online], Available: http://www.sonycsl.co.jp/~kjc/papers.html
[17] Kenjiro Cho, "Managing Traffic with ALTQ," dissertation, USENIX
Annual Technical Conference,June 1999[Online], Available:
http://www.sonycsl.co.jp/~kjc/papers.html
[18] Luigi Rizzo, “Ipfw and dummynet: traffic shaping and network
emulation in FreeBSD”, dissertation , BSD Conference, November
2001[Online],
Available:
http://info.iet.unipi.it/~luigi/bsdcon01/dummynet/
[19] Opperman, A., "FreeBSD 5 Network Enhancements", dissertation,
SUCON04, September .2004.
[20] Opperman, A., "New Networking Features in FreeBSD 6.0",
dissertation, The FreeBSD Project, November .2006.
[21] Opperman, A., "Optimizing the FreeBSD IP and TCP Stack", The
FreeBSD Project, January.2005.
[22] Kennaway, K., "Introducing FreeBSD 7.0", The FreeBSD Project,
November.2007.
Standards:
[23] BSD
Community,
FAQ,
“OpenBSD
Packet
Filter”,
http://www.openbsd.org/faq/pf/
[24] BSD Community, FAQ, “DUMMYNET “, http://www.dummynet.com/
Download

Qualidade de Serviço aplicado a redes IP