Есть ли способ ограничить пропускную способность на сетевой карте в Linux? Я хотел бы иметь возможность симулировать произвольно медленное соединение.
7 ответов
Модуль ядра netem , управляемый iproute.
Вам нужно скомпилировать Netem с ядром:
Networking -->
Networking Options -->
QoS and/or fair queuing -->
Network emulator
После загрузки модуля netem tc iproute позволяет вам делать следующее:
tc qdisc add dev tap0 root netem delay 50ms loss 50%
(Потеря пакета 50%, дополнительная задержка 50 мс)
Клиентская сторона, верно?
струйка должна делать то, что вы хотите. Если вы используете Ubuntu (или Debian, я думаю), вы можете установить его с помощью sudo apt-get install trickle
, а затем запустить его. trickle -s -d 10 -u 10 firefox
(или около того, я давно его не использовал) запускал firefox, ограничивая его скорость загрузки и выгрузки до 10 килобайт в секунду.
Я нашел способ, чтобы мой блок не использовал всю пропускную способность, доступную в сети, используя инструмент, называемый wondershaper в Ubuntu. Я надеюсь, что он существует и в других Linux-дестро. Я могу ограничить пропускную способность, которую может потреблять мой домашний ПК с Linux, используя следующую команду.
sudo wondershaper eth0 1000 200
Это ограничивает ограничение загрузки до 1000 килобит и до 200 килобит. Обратитесь к справочным страницам Wondershaper для получения дополнительной информации / опций.
NIST создает сетевой симулятор под названием NistNet.
http://snad.ncsl.nist.gov/nistnet/ (ссылка кажется мертвой)
http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/
NistNet позволяет вам создать маршрутизатор, который эмулирует связь по вашему выбору.
Для простейшей работы у вас есть это на коробке с двумя сетевыми картами между двумя сетями.
Например, у меня было приложение, которое должно было работать по спутниковой связи.
Данные могут передаваться по каналу 2 Мбит / с с большой задержкой. Контроль должен был проходить по каналу 128 кбит / с с той же задержкой.
NistNet помог заставить все это работать на скорости 128 кбит / с.
Используя NistNet, я мог имитировать не только пропускную способность, но и задержку, а также отбрасывать пакеты для вас, имитируя занятую или ненадежную связь.
Если вы хотите смоделировать непредвиденное соединение, не просто ограничивайте пропускную способность, но и увеличивайте задержку.
Не забудьте также фрагментировать пакеты. Вы можете установить хорошие маленькие MTU на фальшивую ссылку.
IIRC добавление джиттера пакетов позволит вам узнать, можете ли вы справиться с пакетами, вышедшими из строя.
Я лично использовал Wondershaper в прошлом для этого, хотя он был написан для противоположного варианта использования - максимально использовать ваше соединение ADSL.
Я должен попробовать другие упомянутые здесь, хотя.
Вы можете использовать локально установленный прокси-сервер squid для ограничения пропускной способности, например, для тестирования веб-страницы по медленной ссылке:
Установите squid proxy из вашего дистрибутива - на моем Fedora это было так же просто, как
yum install squid
.Добавьте следующее в
/etc/squid/squid.conf
:delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 16000/16000
Это ограничит пропускную способность до 128 кбит / с (16000 бит / с).
Запустите squid:
/etc/init.d/squid start
Настройте браузер на использование
localhost
порта прокси-сервера3128
.
Никто еще не упомянул ip_relay с именем "iprelay" в репозиториях Debian. Он работает как TCP-прокси, а не перехватывает вызовы, как это делает Trickle , и будет работать с любым приложением, которое может использовать прокси (например, веб-браузер) или принимать определенный пользователем порт назначения (telnet, ssh, ftp, curl, и так далее).
Это немного сложнее в настройке, но часто работает в ситуациях, когда ручеек не будет.