Симулятор плохого соединения: обзор инструмента Comcast

Утилита позволяет задать задержку и пропускную способность сети. Это даёт возможность заранее протестировать систему в более реалистичных условиях.

Comcast создан для тестирования проектов, использующих вычислительные сети. Утилита позволяет программно задать задержку, пропускную способность, повреждение и потерю пакетов. Все перечисленные проблемы не являются серьёзными, но именно с ними ваша система будет сталкиваться регулярно. Неудивительно, что инструмент назван в честь печально известного в США оператора Интернета.

Утилита является обёрткой вокруг встроенных в ОС инструментов. На данный момент поддерживаются macOS и Linux.

Установка

Проект написан на языке Go. Убедившись, что у вас установлен этот язык, установите Comcast следующей командой:

$ go get github.com/tylertreat/comcast

Использование

Версия утилиты под Linux основана на iptables и tc. В качестве параметров можно задавать устройство, задержку, пропускную способность, потерю пакетов и номер порта. Пример команды:

$ comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=8.8.8.8,10.0.0.0/24 --target-proto=tcp,udp,icmp --target-port=80,22,1000:2000

Версия для macOS сделана на основе pfctl и ipfw. При запуске Comcast проверит наличие pfctl (появилась в Yosemite), тогда будут доступен весь список параметров, как в версии под Linux. В противном случае некоторые функции будут недоступны.

$ comcast --device=eth0 --latency=250 --target-bw=1000 --packet-loss=10%

Данная команда добавит 250 мс задержки, ограничит пропускную способность до 1 Мб/с, а также 10% пакетов будут потеряны. Чтобы отключить ограничения, введите:

$ comcast --stop

Дополнения

Как отдельно заметил разработчик, Comcast является лишь обёрткой, поэтому добиться того же самого результата можно, используя встроенные утилиты, на основе которых он работает. Более подробно это описано в разделе readme проекта на GitHub. Также там приведена таблица с рекомендуемыми автором параметрами для каждого типа соединения.

Антон Фабрициус