Existe uma maneira de restringir a largura de banda em uma NIC no Linux? Eu gostaria de poder simular uma conexão arbitrariamente lenta.
Existe uma maneira de restringir a largura de banda em uma NIC no Linux? Eu gostaria de poder simular uma conexão arbitrariamente lenta.
Respostas:
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)
sch_netem
. Geralmente, não há necessidade de carregá-lo manualmente, ele será carregado automaticamente conforme necessário.
rate
opçã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
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.
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.
wondershaper
no Debian.
sudo wondershaper clear eth0
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.
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.
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:
Instale o proxy squid da sua distribuição - no meu Fedora era tão fácil quanto yum install squid
.
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).
Iniciar o squid :/etc/init.d/squid start
Configure seu navegador para usar a localhost
porta do servidor proxy 3128
.
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.