FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Aplicando priorizao de pacotes em conexes xDSL assimtricas
Aplicando priorizao de pacotes em conexes xDSL assimtricas
Por Marcelo Araujo   
17/06/2006

ImageProcurando um modelo para garantir a qualidade do meu acesso a Internet através de um link assimétrico xDSL, encontrei nos ports um software criado pela Intrarts Creative Media chamado throttled, que se propõem em priorizar pacotes ACKs usando uma técnica descrita por Daniel Hartmeier. A técnica consiste em manipular as conexões de saida priorizando determinados trafégos baseados em classificações de prioridades.

Throttled bandwidth shaping application

1 - Entendendo o problema.

    Em uma conexão assimétrica xDSL geralmente temos mais capacidade de downstream do que upstream.
    Um exemplo básico é a minha conexão:

            Downstream: 250Kbps
            Upstream  : 150Kbps

    Um dos problemas notados é quando você tem um ou mais downloads com uma certa taxa de transferência e inicia um upload concorrente, o download tem uma queda significativa em velocidade.

2 - A explicação para isso.

    Quando uma conexão TCP está enviando dados mesmo que seja apenas em um sentido IN (Exemplo de um download através de um FTP), o protocolo de transporte (TCP) envia no sentido oposto pacotes ACKs (Acknowledgment), se por algum motivo esse pacotes não são recebidos pelo emissor o mesmo irá supor que os pacotes transmitidos foram perdidos e irá retransmiti-los.     Os pacotes ACKs (neste caso) possuem um número de seqüência de confirmação, e para manter a transferência em sua taxa máxima é importante que esses pacotes (ACKs) sejam priorizados.     Quando o UPLINK esta saturado por outras conexões (como um upload simultâneo), todos os pacotes ACKs que estão sendo enviados recebem um atraso e consequentemente o receptor destes pacotes ira atrasar a resposta dos mesmos, isso causa uma queda no troughput do download já iniciado.

3 - A solução.  

   Os pacotes ACKs relacionados a download são pequenos, porque não contêm nenhum PAYLOAD de dados. Mesmo um download rápido que sature todo o Downstream do Link, não precisa mais do que uma fração de largura de banda do Upstream para o envio dos pacotes ACKs de confirmação.    
   O software throttled se propõem a dar prioridade aos pacotes ACKs que não têm nenhum payload.

4 - Instalando o throttled.

    Podemos instalar usando os pacotes pré-compilados ou diretamente via ports.

    Pré-compilado:

    nagazaki# pkg_add -vr throuttled

    Via Ports:

    nagazaki# cd /usr/ports/net/throttled && make install clean

5 - Configurando o throttled.

    Logo após a instalação teremos 2 arquivos no diretório /usr/local/sbin/:

    nagazaki# ls /usr/local/sbin/throttled*
    /usr/local/sbin/throttled
    /usr/local/sbin/throttled-startup


    O arquivo throttled-startup é onde iremos configurar o software.
    Editando este arquivo iremos alterar algumas opções:

    ------------------8< throttled-startup >8-------------------------
    # Define a interface de rede
    INTERFACE=tun0

    # Maximo de upload em "bytes"
    MAXSPEED=16384 # 128k de upload

    # Numero das regras que o throttled ira adicionar no IPFW
    RULNUM=07000
    
    # Aqui é onde o daemon é startado.
    /usr/local/sbin/throttled -s $MAXSPEED -r $RULENUM -d 17778 -p 1 -d 17777 -p 2 -T

    # Define o IP da interface WAN
    IP=200.200.200.2

    ------------------8< throttled-startup >8-------------------------

6 - Explicando o funcionamento do throttled.

    O daemon é startado escutando em duas portas diferentes, exemplo:

  /usr/local/sbin/throttled -s $MAXSPEED -r $RULENUM -d 17778 -p 1 -d 17777 -p 2 -T    
    
    A porta 17778 tem prioridade 1 (-p 1).
    A porta 17777 tem prioridade 2 (-p 2).
    A opção -T é habilitada para fazer o controle dos pacotes ACKs com e sem PAYLOAD de dados.

    Exemplo de regras:
    # Neste exemplo, estamos priorizando a resolução DNS.
    /sbin/ipfw add $RULENUM divert 17778 ip from $IP to any 53 out xmit $INTERFACE

    # Priorizando conexões SSH.
    /sbin/ipfw add $RULENUM divert 17778 tcp from $IP 22 to any out xmit $INTERFACE
    /sbin/ipfw add $RULENUM divert 17778 tcp from $IP to any 22 out xmit $INTERFACE

    # Saida para outras conexões com menos prioridades.
    /sbin/ipfw add $RULENUM divert 17777 ip from $IP to any out xmit $INTERFACE   
    
7 - Finalizando.

    Você pode "chamar" o throttled-startup em qualquer parte do seu script de firewall ou se preferir como eu fiz, adicionei algumas opções e chamadas diretamente no script de firewall, sem precisar me referênciar ao throttled-startup.

    Lembrando que esta é uma alternativa "caseira" e não é o estado da arte em "QoS e ToS", para priorização de serviços ethernet, existem soluções mais profissionais no sistema, PF+ALTQ ou IPFW2+DUMMYNET.


    Bom é isso ai, uma solução simples para ser implementada e testada.

    - Marcelo Araujo
    - www.fug.com.br
    - araujo < at > fug < dot > com < dot > br

Comentrios
Interessante
Por Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo em 17/06/2006 22:49:07
O tpico abordado por nosso companheiro Marcelo Arajo foi de muita utilidade, com certeza preencheu informaes em muitos dos usurios.  
 
Valeu! :)
http://www.intrarts.com/throttledcli.htm
Por Joao Paulo - 0v3rm1nd em 18/06/2006 01:16:01
Eu tambem uso throttled aqui, com um Speedy (ADSL da Telefonica) e em um cliente no Rio com Velox (ADSL Telemar) e devo dizer que a diferenca na qualidade da comunicacao TCP eh gritante! Quando tiro throttled da rede alguns usuarios ja percebem na hora. Principalmente com Velox a throttled faz muita diferenca. Com Speedy aqui na capital, parece ser melhor. Mas no interior (Araraquara) throttled tambem tem impacto significante no Speedy. Quem usa ADSL e tem FreeBSD ou Mac OS X, deve usar isso. O how-to ai em cima serve pro Mac OS X tambem. Parabens ao Marcelo e aqueles que mante esse site. Se ele tivesse um forum seria perfeito.
Entao usuarios MAC OS X se encontram aqu
Por Henrique Castro em 18/06/2006 01:25:06
Que bom! Eu tambem uso esse software mas apenas no meu powerbook. Ele tem controle de QoS pre definido pra JOGOS!!! rlz a lot 
 
E tem uma versao que tem interface grafica escrita com Cocoa: 
 
http://mac.softpedia.com/progScreenshots/Throttled-Pro-Screenshot-7646.html 
 
Que alias e praticamente um remake do GTK que a Apple fez. Incrivel similaridade na hora de desenvolver pra essas duas IDE graficas. 
 
Boa vou visitar mais esse site aqui. 
no PF tbm rula
Por neurobashing em 20/06/2006 14:20:20
No pf pode fazer a mesma coisa: 
 
ext_if="fxp0" 
 
altq on $ext_if priq bandwidth 250Kb queue { q_pri, q_def } 
queue q_pri priority 7 
queue q_def priority 1 priq(default) 
 
pass out on $ext_if proto tcp from $ext_if to any flags S/SA \ 
keep state queue (q_def, q_pri) 
 
pass in on $ext_if proto tcp from any to $ext_if flags S/SA \ 
keep state queue (q_def, q_pri) 
 
Ta bm explicado aqui: http://www.benzedrine.cx/ackpri.html


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 17/06/2006 )