Como acelerar a largura de banda em uma interface de rede Linux?

Respostas:

32

O módulo do kernel do netem , controlado pelo iproute.

Você precisa compilar o Netem com o kernel:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Uma vez carregado o módulo netem, o tc do iproute permite coisas como:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(Perda de 50% de pacotes, atraso extra de 50 ms)

bortzmeyer
fonte
Sim, esse é realmente um módulo muito bom para essas coisas. Eu não posso acreditar que ninguém respondeu isso até agora ...
Eu uso isso para testar servidores localmente (no host local), pois é padrão em todas as distros há anos. Para adicionar 20ms atrasar "tc qdisc adicionar dev lo punho raiz 1: 0 netem atraso 20msec", e para removê-lo "tc qdisc del dev lo root"
pixelbeat
11
Nota rápida: o módulo do kernel é sch_netem. Geralmente, não há necessidade de carregá-lo manualmente, ele será carregado automaticamente conforme necessário.
sleske
Aqui está trabalhando ligação linuxfoundation.org/collaborate/workgroups/networking/netem
Lee Chee Kiam
Minha versão de netem (Ubuntu 13.10) também tem a opção de limitar a largura de banda usando a rateopção: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Note-se que para alguns dispositivos, como lo(para acessar localhost), você precisa definir o comprimento da fila, bem como: ifconfig lo txqueuelen 1000. Consulte serverfault.com/a/394949/76090
z0r
27

Lado do cliente, certo?

trickle deve fazer o que você quer. Se você estiver executando o Ubuntu (ou Debian, eu acho), poderá instalá-lo e sudo apt-get install trickle, em seguida, executá-lo. trickle -s -d 10 -u 10 firefox(ou seja, eu não o uso há algum tempo) executaria o firefox, limitando a velocidade de download e upload a 10 kilobytes por segundo.

Bernard
fonte
Obrigado por esta dica. Por alguma razão, o trickle não funcionaria para mim no firefox, mas funcionou bem no google-chrome. (Ubuntu 9.10 64bit)
Tom
6
trickle funciona interceptando chamadas para vincular nas funções padrão da biblioteca para transferências TCP - se um aplicativo tiver essas funções vinculadas estaticamente no tempo de compilação, isso não funcionará.
precisa saber é o seguinte
16

Eu encontrei uma maneira de evitar que minha caixa coma toda a largura de banda disponível na rede usando uma ferramenta chamada 'wondershaper' no ubuntu. Espero que exista em outros linux destros também. Posso limitar a largura de banda que o meu pc em casa linux pode consumir usando o seguinte comando.

sudo wondershaper eth0 1000 200

Isso limita o limite de download para 1000 kilobits e aumenta para 200 kilobits. Consulte as páginas de manual do wondershaper para obter mais informações / opções.

atormentar
fonte
11
Isso não é exatamente o que o OP está procurando (trata-se de conservar a largura de banda, não de degradar propositadamente a conexão), mas ainda é bom saber.
sleske
11
BTW: É um pacote wondershaperno Debian.
sleske
Este b / c abalado estávamos tendo problemas no escritório com saturação da largura de banda, havia um suporte que eu não conseguia interromper, e pude consertar isso em duas linhas simples: # apt-get install wondershaper then # wondershaper eth0 9999999 500 obrigado novamente!
orange80
4
O wondershaper parece ter alguns problemas de matemática. Para obter um caminho de 1 Mb / s para cima / para baixo, acabamos usando 28096 em vez de 1024. No entanto, não faço ideia do motivo disso.
boatcoder 14/05
Para redefinir, use:sudo wondershaper clear eth0
Léo Lam
8

O NIST cria um simulador de rede chamado NistNet.

http://snad.ncsl.nist.gov/nistnet/ (o link parece morto)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

O NistNet permite criar um roteador que emule um link de comunicação de sua escolha.

Para uma operação mais simples, você o possui em uma caixa com duas placas de rede entre duas redes.

Por exemplo, eu tinha um aplicativo que precisava trabalhar em um link de satélite.

Os dados podem passar do link de 2 Mbps com grande latência. O controle teve que passar por um link de 128kbps, com a mesma latência.

O NistNet ajudou a fazer tudo funcionar em 128kbps.

Usando o NistNet, eu poderia simular não apenas a largura de banda, mas também a latência, e também descartaria pacotes para você, simulando um link ocupado ou não confiável.

Se você deseja simular uma conexão abitrar, não restrinja apenas a largura de banda, mas também a latência.

Não se esqueça de fragmentar pacotes também. Você pode definir pequenas MTUs agradáveis ​​no link falso.

A adição de jitter de pacotes do IIRC permitirá descobrir se você consegue lidar com pacotes fora de ordem.

Tim Williscroft
fonte
O NistNet não é atualizado há muito tempo, não é? OMI, a melhor maneira, de longe, é o módulo netem, que já existe em todos os kernels recentes.
Você pode simular uma máquina com 2 NICs usando uma VM.
Scott
link não funciona
hasen
Link funciona para mim.
tripleee
4

Pessoalmente, eu usei o wonderershaper no passado para isso, embora tenha sido escrito para um caso de uso oposto - aproveitando ao máximo sua conexão ADSL.

Vou ter que tentar os outros mencionados aqui embora.

Thomas Vander Stichele
fonte
3

Você pode usar o proxy squid instalado localmente para limitar a largura de banda, por exemplo, para testar uma página da web no link lento:

  1. Instale o proxy squid da sua distribuição - no meu Fedora era tão fácil quanto yum install squid.

  2. Adicione o seguinte a /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Isso limitará a largura de banda a cerca de 128 kbps (16000 Bps).

  3. Iniciar o squid :/etc/init.d/squid start

  4. Configure seu navegador para usar a localhostporta do servidor proxy 3128.

Tometzky
fonte
3

Ninguém mencionou ainda ip_relay , chamado "iprelay" nos repositórios Debian. Ele funciona como um proxy TCP, em vez de interceptar as chamadas da mesma maneira que o trickle , e funcionará com qualquer aplicativo que possa usar um proxy (por exemplo, um navegador da web) ou aceitar uma porta de destino definida pelo usuário (telnet, ssh, ftp, curl, et cetera ).

É um pouco mais difícil de configurar, mas geralmente funciona em situações onde o fluxo não funciona.

CodeGnome
fonte
11
Isto é exatamente para o que estou procurando! Muito obrigado. Fico feliz que rolei para baixo e continuei lendo.
Jay R. Wren