Моделируйте отложенные и отброшенные пакеты на Linux

Эта проблема находится на уровне операционной системы / раздела. Вы должны быть уверены, что всегда используете надлежащий корпус, если хотите, чтобы ваши ссылки работали на нескольких машинах. К сожалению, вам придется запускать свою локальную систему на Linux или другом разделе, чувствительном к регистру, если вы хотите поймать ошибки, прежде чем вы нажмете их вживую.

Всегда лучше иметь ваше тестирование / локальное сервер как можно ближе к вашим производственным серверам.

234
задан George Stocker 5 March 2009 в 14:06
поделиться

7 ответов

Один из моих коллег использует tc, чтобы сделать это. Обратитесь к странице справочника для получения дополнительной информации. Вы видите пример его использования здесь .

6
ответ дан Mark 4 November 2019 в 13:05
поделиться

Не попробовали его самостоятельно, но , эта страница имеет список сменных модулей, которые работают в Linux', созданном в iptables системе фильтрации IP. Один из модулей называют "энным", и позволяет Вам устанавливать правило, которое отбросит настраиваемый уровень пакетов. Могло бы быть хорошее место для запуска, по крайней мере.

1
ответ дан unwind 4 November 2019 в 13:05
поделиться

Этот учебное руководство на сетевых моделированиях физики содержит класс C++ в пример кода для моделирования задержки и потери пакетов в соединении UDP и может быть руководства. Посмотрите общественность задержка и переменные packetLoss Соединение класс, найденный в файл Connection.h загружаемый исходный код .

3
ответ дан Vaillancourt 4 November 2019 в 13:05
поделиться

netem усиливает функциональность, уже встроенную в Linux и утилиты пространства пользователя для моделирования сетей. Это на самом деле, что ответ Mark's отсылает к другим именем.

примеры на [1 111] их домашняя страница уже шоу, как можно достигнуть того, что Вы попросили:

Примеры

задержки глобальной вычислительной сети Эмуляции

Это - самый простой пример, он просто добавляет установленную сумму задержки со всеми пакетами, выходящими из локального Ethernet.

# tc qdisc add dev eth0 root netem delay 100ms

Теперь простой тест ping для хостинга в локальной сети должен показать увеличение 100 миллисекунд. Задержка ограничена разрешением часов ядра (Гц). На большинстве 2,4 системы системные часы работают в 100В Гц, который позволяет задержки инкрементов 10В мс. На 2,6, значение является параметром конфигурации от 1 000 до 100В Гц.

Более поздние примеры просто изменяют параметры, не перезагружая qdisc

, который Очень широкие сети показывают изменчивости, таким образом, возможно добавить случайное изменение.

# tc qdisc change dev eth0 root netem delay 100ms 10ms

Это заставляет добавленную задержку быть 100 В± 10В мс. Изменение сетевой задержки не чисто случайно, так для эмуляции этого также существует значение корреляции.

# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

Это заставляет добавленную задержку быть 100 В± 10В мс со следующим случайным элементом, зависящим 25% от последнего. Это не истинная статистическая корреляция, но приближение.

распределение Задержки

Как правило, задержка сети не универсальна. Более распространено использовать что-то как нормальное распределение для описания вариации в задержке. Дисциплина netem может взять таблицу для определения неоднородного распределения.

# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

фактические таблицы (нормальный, Парето, paretonormal) сгенерированы как часть iproute2 компиляции и помещены в/usr/lib/tc; таким образом, это возможно с некоторым усилием сделать Ваше собственное распределение на основе экспериментальных данных.

Потеря пакетов

Случайная потеря пакетов определяется в команде 'tc' в проценте. Самое маленькое ненулевое значение:

2 <глоток> в€ ’32 = 0,0000000232%

# tc qdisc change dev eth0 root netem loss 0.1%

Это заставляет 1/10-й из процента (т.е. 1 из 1 000) пакеты быть случайным образом отброшенным.

дополнительная корреляция может также быть добавлена. Это заставляет генератор случайных чисел быть менее случайным и может использоваться для эмуляции пакетных пакетных потерь.

# tc qdisc change dev eth0 root netem loss 0.3% 25%

Это заставит 0,3% пакетов быть потерянным, и каждая последовательная вероятность зависит четвертью от последней.

Probn = 0,25 Г — Probn-1 + 0,75 Г — Случайный

Примечание , которое необходимо использовать tc qdisc add, если у Вас нет правил для того интерфейса или tc qdisc change, если у Вас уже есть правила для того интерфейса. Попытка использовать tc qdisc change в интерфейсе без правил даст ошибку RTNETLINK answers: No such file or directory.

311
ответ дан Community 4 November 2019 в 13:05
поделиться

iptables (8) имеет модуль статистики, который может использоваться для соответствия каждому энному пакету. Для отбрасывания этого пакета просто добавьте ОТБРАСЫВАНИЕ-j .

4
ответ дан hillu 4 November 2019 в 13:05
поделиться

Для отброшенных пакетов я бы просто использовал iptables и статистический модуль .

iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP

Выше будет отбрасывать входящий пакет с вероятностью 1%. Будьте осторожны, все, что выше 0,14, и большинство из вас, скорее всего, полностью остановятся tcp-соединения.

Взгляните на man iptables и выполните поиск по «статистике» для получения дополнительной информации.

83
ответ дан 23 November 2019 в 03:24
поделиться

Вы можете попробовать http://snad.ncsl.nist.gov/nistnet/ Это довольно старый проект NIST (последний выпуск 2005 г.), но он мне подходит.

1
ответ дан 23 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: