У нас есть сетевой коммутатор, и мы можем легко попросить его ограничить пропускную способность, которую он позволяет, что хорошо. Было бы здорово, если бы мы могли также попросить его генерировать для нас потери пакетов — сделать это с WANem возможно, но добавляет задержки, а мы имеем дело с приложениями реального времени, поэтому любая добавленная нами задержка плоха для нас. Кто-нибудь знает сетевой коммутатор или маршрутизатор, который позволяет это или может быть взломан, чтобы приспособиться к этому?
решение1
Все коммутаторы, которые имеют ограничение скорости на порту или vlan, должны позволять вам «симулировать» потерю пакетов. Если вашему приложению требуется 1 МБ трафика, то установите лимит чуть ниже этого значения, и коммутатор должен отбрасывать пакеты.
Помните, что все коммутаторы, которые имеют эту функциональность, должны делать выборку, чтобы иметь возможность ограничивать. Например: порт 1 установлен на ограничение 1 МБ. Порт 1 отправляет трафик 2 МБ в течение доли секунды. Большая его часть, вероятно, пройдет. Это происходит потому, что пока коммутатор не сможет обнаружить и измерить, сколько трафика проходит, он не знает, что отбрасывать. В зависимости от вашего поставщика это может быть реализовано разными способами: некоторые буферизуют, а затем отбрасывают пакеты из буфера, а некоторые просто разрешают момент входа и выхода, а затем ограничивают.
Если вы хотите узнать, как именно будет реагировать ваше приложение, я бы посоветовал вам установить BSD-бокс прямо перед компьютером, на котором вы тестируете приложение. В BSD (просто потому, что я использую их в качестве брандмауэров) есть команда, которая называетсяipfwчто позволит вам напрямую управлять соединением. Итак, предположим, что ваш текущий сценарий выглядит следующим образом:
+--------------------+ +----------------+ | Сервер приложений | ---> | Клиентская машина | +--------------------+ +----------------+
Я понимаю, что это было бы чрезмерное упрощение, но это иллюстрирует концепцию. Что вы можете сделать, так это установить NAT в середине и ограничить его скорость
+--------------------+ +-----------------------+ +----------------+ | Сервер приложений | ---> | Поле ограничения скорости | ---> | Клиентская машина | | 10.0.0.5 | | 10.0.0.6 192.168.1.1 | | 192.168.1.2 | +--------------------+ +-----------------------+ +----------------+
Опять же, я знаю, что это чрезмерное упрощение. Я добавил IP-адреса, чтобы показать вам, какие команды будут в BSD на Rate Limit Box. Сначала настройте BSD для работы в качестве обычного маршрутизатора, вы можете использовать pf sense и т. д. Затем вы можете добавить следующие команды в приглашение.
ipfw pipe 1 конфигурация bw 101Kbit ipfw добавить 1 канал 1 ip из 10.0.0.5 в 192.168.1.2 ipfw добавить 2 трубы 1 ip из 192.168.1.2 в 10.0.0.5
Это сымитирует соединение 101kb к клиенту и от него к серверу. Затем вы можете изменить значение 101 на любое, чтобы увидеть, что происходит при различных ограничениях. Реальное преимущество этого по сравнению с коммутатором, поддерживающим функции ограничения, заключается в том, что он дешев (простой компьютер с парой интерфейсов) и что вы можете использовать Wireshark для захвата трафика, если необходимо, чтобы затем увидеть, что именно теряется и в каком объеме. Эта информация может быть очень полезна при разработке лучшего приложения.
ИМХО