Procurando 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 |