Эта проблема находится на уровне операционной системы / раздела. Вы должны быть уверены, что всегда используете надлежащий корпус, если хотите, чтобы ваши ссылки работали на нескольких машинах. К сожалению, вам придется запускать свою локальную систему на Linux или другом разделе, чувствительном к регистру, если вы хотите поймать ошибки, прежде чем вы нажмете их вживую.
Всегда лучше иметь ваше тестирование / локальное сервер как можно ближе к вашим производственным серверам.
Один из моих коллег использует tc, чтобы сделать это. Обратитесь к странице справочника для получения дополнительной информации. Вы видите пример его использования здесь .
Не попробовали его самостоятельно, но , эта страница имеет список сменных модулей, которые работают в Linux', созданном в iptables системе фильтрации IP. Один из модулей называют "энным", и позволяет Вам устанавливать правило, которое отбросит настраиваемый уровень пакетов. Могло бы быть хорошее место для запуска, по крайней мере.
Этот учебное руководство на сетевых моделированиях физики содержит класс C++ в пример кода для моделирования задержки и потери пакетов в соединении UDP и может быть руководства. Посмотрите общественность задержка и переменные packetLoss Соединение класс, найденный в файл Connection.h загружаемый исходный код .
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
.
iptables (8) имеет модуль статистики, который может использоваться для соответствия каждому энному пакету. Для отбрасывания этого пакета просто добавьте ОТБРАСЫВАНИЕ-j .
Для отброшенных пакетов я бы просто использовал iptables и статистический модуль .
iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
Выше будет отбрасывать входящий пакет с вероятностью 1%. Будьте осторожны, все, что выше 0,14, и большинство из вас, скорее всего, полностью остановятся tcp-соединения.
Взгляните на man iptables и выполните поиск по «статистике» для получения дополнительной информации.
Вы можете попробовать http://snad.ncsl.nist.gov/nistnet/ Это довольно старый проект NIST (последний выпуск 2005 г.), но он мне подходит.