Postado originalmente por
JorgeAldo
poiseh, eu lancei uma vez um produto desses.
controlador de banda duplo, se sair do cache sai com up1/down1 se não sair do cache sai com up2/down2.
Ainda tenho os códigos fonte de projeto aqui. Mas o povo ficou tão bitolado em mikrotik que não aceitam que não funcione em mikrotik.
A solução é baseada no FreeBSD + Squid.
DUVIDO (eu não vou dizer que é impossível por que quase tudo tem um jeito) MUITO que alguem consiga fazer isso no mikrotik ou no linux.
Alias, no linux tem como, mas é mais simples no BSD.
A questão toda gira em torno do seguinte :
O controle de banda do Linux (e até mesmo do FreeBSD se for usado o PF) só faz controle de subida, do que é transmitido pela placa.
O DOWN do cliente é o UP da placa LAN e aqui se faz o controle de download do cliente.
Como o UP do cliente é DOWN da placa LAN, nessa placa o cliente sobe livre.
Para compensar, o UP do cliente do ponto de vista da placa WAN é seu UP, o que permite fazer controle de banda aqui, já o DOWN da WAN é o DOWN do cliente e não se faz controle de banda, o que é compensado na LAN.
A filosofia disso é que teoricamente não adianta jogar fora pacotes que já trafegaram pelo link de internet.
Qual o efeito disso ? Uma conexão saindo do cliente e interceptada pelo SQUID não tem controle de banda up. O cliente manda como quiser (Pois só é vista pela placa LAN). [PS.: como de todo jeito o squid vai ter que mandar os dados - um form POST grande, ou um upload de arquivo, por exemplo - para cima, esse acaba sofrendo controle de banda, mas não sem sobressaltos]
Já a conexão que o SQUID gera com o mundo exterior não sofre controle de banda (Pois só é vista pela placa WAN). [PS.: Do mesmo jeito que o anterior, com sobressaltos]
Dá pra resolver ? Parcialmente, mas nunca é a melhor solução.
Por que não concordo com essa filosofia ? Por que o protocolo TCP tem o chamado sliding window, que é diminuido (consequentemente diminuindo a velocidade) se algum pacote é perdido. Logo fazer controle de banda tanto no UP quanto no DOWN da placa de rede tem efeito nos clientes/servidores envolvidos, além do que a maior parte dos sistemas operacionais (Mesmo o windows) suporta o bit ECN, que pode explicitamente avisar aos envolvidos na comunicação de que algum roteador no meio do caminho quer que eles diminuam a velocidade pois em algum ponto da rede há um congestionamento.
*PS : Normalmente essa tranferencia do servidor remoto para o cache e do cache para o cliente é feito por buffers de tamanho fixo, por exemplo, de 2k em 2k. Dependendo de como o aplicativo (não apenas o squid) trasfere esses buffers e de seu tamanho em relação ao MTU, pode gerar picos intermitentes na rede, que se vistos num gráfico formariam uma imagem de dente de serra.