Введение
Снижение качества обслуживания из-за высокой сетевой нагрузки
Перегрузка сети в области передачи данных и теории очередей – это снижение качества обслуживания, возникающее, когда сетевой узел или канал передают больше данных, чем способны обработать. Типичные последствия включают задержку в очереди, потерю пакетов или блокировку новых соединений. Одним из результатов перегрузки является то, что незначительное увеличение нагрузки приводит либо к небольшому росту, либо даже к снижению пропускной способности сети. Сетевые протоколы, использующие агрессивную повторную передачу для компенсации потери пакетов, вызванной перегрузкой, могут усугубить её, даже после того как первоначальная нагрузка снизится до уровня, который обычно не вызывал бы перегрузку. Такие сети демонстрируют два стабильных состояния при одном и том же уровне нагрузки. Стабильное состояние с низкой пропускной способностью известно как пропускная способность, вызванная перегрузкой (или коллапс сети). Сети используют методы управления перегрузкой и предотвращения перегрузки, чтобы избежать коллапса. К ним относятся: экспоненциальная отсрочка в протоколах, таких как CSMA/CA в 802.11 и аналогичный CSMA/CD в оригинальном Ethernet, уменьшение размера окна в TCP и справедливое распределение очереди в устройствах, таких как маршрутизаторы и сетевые коммутаторы. Другие методы борьбы с перегрузкой включают схемы приоритетов, которые передают некоторые пакеты с более высоким приоритетом, и явное выделение сетевых ресурсов для конкретных потоков посредством контроля доступа.
Пропускная способность сети
Ресурсы сети ограничены, включая время обработки маршрутизатора и пропускную способность канала связи. Конкуренция за ресурсы может возникать в сетях в нескольких типичных ситуациях. Беспроводная локальная сеть может быть легко перегружена одним персональным компьютером. Даже в высокоскоростных компьютерных сетях магистраль может быть легко перегружена несколькими серверами и клиентскими компьютерами. Атаки типа "отказ в обслуживании", осуществляемые ботнетами, способны перегрузить даже самые мощные каналы связи магистральной сети Интернет, вызывая масштабную сетевую перегрузку. В телефонных сетях массовый одновременный набор может перегрузить цифровые телефонные линии, что фактически является атакой типа "отказ в обслуживании".
Колапс застойного мозга
Загруженный коллапс (или коллапс из-за перегрузки) – это состояние, при котором перегрузка препятствует или ограничивает эффективную передачу данных. Коллапс из-за перегрузки обычно происходит в узких местах сети, где входящий трафик превышает исходящую пропускную способность. Типичными узкими местами являются точки соединения между локальной и глобальной сетями. Когда сеть находится в таком состоянии, она стабилизируется в состоянии высокой загруженности, но с низкой полезной пропускной способностью, что приводит к задержкам и потерям пакетов, а также к крайне низкому качеству обслуживания. Возможность коллапса из-за перегрузки была выявлена еще в 1984 году. Впервые он был зафиксирован в раннем Интернете в октябре 1986 года, когда пропускная способность магистральной сети NSFNET фазы I снизилась на три порядка величины – с 32 кбит/с до 40 бит/с, и это продолжалось до тех пор, пока конечные узлы не начали внедрять механизмы контроля перегрузки, разработанные Ван Джейкобсоном и Салли Флойд, в период с 1987 по 1988 год. Когда промежуточные маршрутизаторы получали больше пакетов, чем могли обработать, они отбрасывали их, рассчитывая на то, что конечные точки сети повторно отправят информацию. Однако ранние реализации TCP имели неэффективную логику повторной передачи. При потере пакетов конечные точки отправляли дополнительные пакеты, дублирующие потерянные данные, что удваивало входящую скорость трафика.
Контроль за загруженностью
Контроль перегрузки регулирует поступление трафика в телекоммуникационную сеть, чтобы избежать коллапса, вызванного перегрузкой из-за превышения пропускной способности. Обычно это достигается путем снижения скорости отправки пакетов. В то время как контроль перегрузки предотвращает перегрузку сети со стороны отправителей, контроль потока предотвращает перегрузку приемника со стороны отправителя.
Практическое предотвращение перегрузки сети
Протоколы, ориентированные на установление соединения, такие как широко используемый протокол TCP, отслеживают потерю пакетов или задержки в очередях, чтобы регулировать скорость передачи данных. Различные механизмы предотвращения сетевых перегрузок обеспечивают различные компромиссы.
Предотвращение перегрузки TCP/IP
Алгоритм предотвращения перегрузки TCP является основой управления перегрузкой в Интернете. Проблемы возникают, когда несколько одновременных TCP-потоков сталкиваются с потерей пакетов из-за переполнения буфера, особенно при наличии эффекта "раздувания буфера". Эта задержка потери пакетов нарушает работу автоматического предотвращения перегрузки TCP. Все потоки, столкнувшиеся с этой потерей пакетов, одновременно начинают процедуру восстановления TCP – это явление называется глобальной синхронизацией TCP.
Управление активной очереди
Управление активной очередью (AQM) — это изменение порядка или отбрасывание сетевых пакетов внутри буфера передачи, связанного с сетевым интерфейсным контроллером (NIC). Эту задачу выполняет сетевой планировщик.
Раннее выявление
Одним из решений является использование раннего обнаружения случайных потерь (RED) на выходной очереди сетевого оборудования. На сетевых аппаратных портах с более чем одной выходной очередью можно использовать взвешенное раннее обнаружение случайных потерь (WRED). RED косвенно сигнализирует отправителю и получателю TCP, отбрасывая некоторые пакеты, например, когда средняя длина очереди превышает заданный порог (например, 50%) и увеличивая количество отбрасываемых пакетов линейно или кубически, вплоть до, например, 100%, по мере заполнения очереди.
Устойчивое раннее выявление случайного типа
Надежный алгоритм раннего обнаружения (RRED) был предложен для повышения пропускной способности TCP при атаках типа «отказ в обслуживании» (DoS), в частности, при атаках с низкой скоростью (LDoS). Эксперименты подтвердили, что алгоритмы, подобные RED, уязвимы к атакам LDoS из-за колебаний размера очереди TCP, вызванных этими атаками.
WRED на основе потоков
Некоторые сетевые устройства оснащены портами, способными отслеживать и измерять каждый поток, и таким образом могут сигнализировать о превышении пропускной способности в соответствии с определенной политикой обеспечения качества обслуживания. Такая политика может затем распределять полосу пропускания между потоками на основе определенных критериев.
Уведомление о прямом перегрузке
Другой подход заключается в использовании явного уведомления о перегрузке (ECN). ECN используется только в том случае, если оба хоста сигнализируют о своем желании его применять. В этом методе для сигнализации о явной перегрузке используется бит протокола. Это предпочтительнее, чем косвенное уведомление о перегрузке, сигнализируемое потерей пакетов алгоритмами RED/WRED, однако для его работы требуется поддержка с обеих сторон.
Отсталая ECN
Обратная ECN (BECN) — это еще один предлагаемый механизм уведомления о перегрузке. Он использует сообщения ICMP Source Quench в качестве механизма сигнализации IP для реализации базового механизма ECN для IP-сетей, сохраняя уведомления о перегрузке на уровне IP и не требуя согласования между конечными точками сети. Эффективные уведомления о перегрузке могут передаваться протоколам транспортного уровня, таким как TCP и UDP, для внесения необходимых корректировок.
Радиосвязь
Протоколы, предотвращающие коллапс из-за перегрузки, как правило, исходят из предположения, что потеря данных вызвана именно перегрузкой. В проводных сетях ошибки при передаче случаются редко. WiFi, 3G и другие сети с радиоинтерфейсом подвержены потере данных из-за помех и в некоторых случаях могут демонстрировать низкую пропускную способность. TCP-соединения, работающие поверх физического уровня на основе радиосвязи, фиксируют потерю данных и часто ошибочно интерпретируют её как признак перегрузки.
Краткосрочные связи
Протокол медленного старта неэффективен для коротких соединений. В старых веб-браузерах создавалось множество короткоживущих соединений, которые открывались и закрывались для каждого файла. Это удерживало большинство соединений в режиме медленного старта. Начальная производительность может быть низкой, и многие соединения так и не выходят из этого режима, что значительно увеличивает задержку. Чтобы избежать этой проблемы, современные браузеры либо открывают несколько соединений одновременно, либо повторно используют одно соединение для всех файлов, запрошенных с конкретного сервера.
Контроль за вводом
Контроль доступа — это любая система, требующая от устройств получения разрешения перед установлением новых сетевых соединений. Если новое соединение может привести к возникновению перегрузки, разрешение может быть отклонено. Примеры включают в себя возможности передачи без конкуренции (CFTXOP) в стандарте ITU-T G.hn для домашней сети по существующей проводке, протокол резервирования ресурсов для IP-сетей и протокол резервирования потока для Ethernet.