Перегрузка сети в теории сетей передачи данных и очередей — это снижение качества обслуживания , которое происходит, когда сетевой узел или соединение переносит больше данных, чем может обработать. Типичные эффекты включают задержку в очереди , потерю пакетов или блокировку новых соединений. Следствием перегрузки является то, что постепенное увеличение предлагаемой нагрузки приводит либо к небольшому увеличению, либо даже к уменьшению пропускной способности сети . [1]
Сетевые протоколы , которые используют агрессивные повторные передачи для компенсации потери пакетов из-за перегрузки, могут увеличить перегрузку, даже после того, как начальная нагрузка была снижена до уровня, который обычно не вызывал бы перегрузку сети. Такие сети демонстрируют два стабильных состояния при одном и том же уровне нагрузки. Стабильное состояние с низкой пропускной способностью известно как congestive collapse .
Сети используют методы контроля перегрузки и предотвращения перегрузки , чтобы попытаться избежать коллапса. К ним относятся: экспоненциальная отсрочка в протоколах, таких как CSMA/CA в 802.11 и аналогичный CSMA/CD в оригинальном Ethernet , сокращение окна в TCP и справедливая организация очередей в устройствах, таких как маршрутизаторы и сетевые коммутаторы . Другие методы, которые решают проблему перегрузки, включают схемы приоритетов, которые передают некоторые пакеты с более высоким приоритетом раньше других, и явное распределение сетевых ресурсов определенным потокам с помощью управления доступом .
Сетевые ресурсы ограничены, включая время обработки маршрутизатора и пропускную способность канала . Конфликт ресурсов может возникнуть в сетях в нескольких распространенных обстоятельствах. Беспроводная локальная сеть легко заполняется одним персональным компьютером. [2] Даже в быстрых компьютерных сетях магистраль может быть легко перегружена несколькими серверами и клиентскими ПК. Атаки типа «отказ в обслуживании» ботнетов способны заполнить даже самые крупные магистральные сетевые каналы Интернета , создавая крупномасштабную перегрузку сети. В телефонных сетях событие массового вызова может перегрузить цифровые телефонные каналы, что в противном случае можно определить как атаку типа «отказ в обслуживании».
Коллапс перегрузки (или коллапс перегрузки) — это состояние, при котором перегрузка препятствует или ограничивает полезную связь. Коллапс перегрузки обычно происходит в узких местах в сети, где входящий трафик превышает исходящую пропускную способность. Точки соединения между локальной сетью и глобальной сетью являются обычными узкими местами. Когда сеть находится в таком состоянии, она переходит в стабильное состояние, в котором спрос на трафик высок, но доступна лишь малая полезная пропускная способность, во время которого происходят задержки и потери пакетов , а качество обслуживания крайне низкое.
Коллапс перегрузки был идентифицирован как возможная проблема к 1984 году. [3] Впервые он был замечен в раннем Интернете в октябре 1986 года, [4] когда магистраль NSFNET фазы I упала на три порядка с ее пропускной способности 32 кбит/с до 40 бит/с, [5] что продолжалось до тех пор, пока конечные узлы не начали реализовывать контроль перегрузки Ван Якобсона и Салли Флойд между 1987 и 1988 годами. [6] Когда было отправлено больше пакетов , чем могли обработать промежуточные маршрутизаторы, промежуточные маршрутизаторы отбрасывали многие пакеты, ожидая, что конечные точки сети повторно передают информацию. Однако ранние реализации TCP имели плохое поведение при повторной передаче. Когда происходила эта потеря пакетов, конечные точки отправляли дополнительные пакеты, которые повторяли потерянную информацию, удваивая входящую скорость.
Контроль перегрузки модулирует входящий трафик в телекоммуникационную сеть, чтобы избежать перегрузки из-за переподписки. [7] Обычно это достигается путем снижения скорости пакетов. В то время как контроль перегрузки не позволяет отправителям перегружать сеть , контроль потока не позволяет отправителю перегружать получателя .
Теория управления перегрузкой была разработана Фрэнком Келли , который применил микроэкономическую теорию и теорию выпуклой оптимизации для описания того, как индивидуумы, контролирующие свои собственные ставки, могут взаимодействовать для достижения оптимального распределения ставок в масштабах всей сети. Примерами оптимального распределения ставок являются справедливое распределение по принципу максимума-минимума и предложение Келли о пропорционально справедливом распределении, хотя возможны и многие другие.
Пусть будет скоростью потока , будет емкостью канала связи и будет 1, если поток использует канал связи и 0 в противном случае. Пусть , и будут соответствующими векторами и матрицей. Пусть будет возрастающей, строго вогнутой функцией , называемой полезностью , которая измеряет, какую выгоду получает пользователь, передавая данные со скоростью . Тогда оптимальное распределение скорости удовлетворяет
Двойственная задача Лагранжа разделяется так, что каждый поток устанавливает свою собственную скорость, основанную только на цене , сигнализируемой сетью. Каждая пропускная способность связи накладывает ограничение, которое приводит к множителю Лагранжа , . Сумма этих множителей — это цена, на которую реагирует поток.
Затем контроль перегрузки становится распределенным алгоритмом оптимизации. Многие текущие алгоритмы контроля перегрузки можно смоделировать в этой структуре, используя либо вероятность потери, либо задержку в очереди на канале . Главным недостатком является то, что он назначает одну и ту же цену всем потокам, в то время как контроль потока скользящего окна вызывает всплески , из-за которых разные потоки наблюдают разные потери или задержки на данном канале.
Среди способов классификации алгоритмов управления перегрузкой можно выделить:
Были изобретены механизмы для предотвращения перегрузки сети или борьбы с сбоями сети:
Правильное поведение конечной точки обычно заключается в повторении сброшенной информации, но постепенном замедлении частоты повторения. При условии, что все конечные точки делают это, перегрузка снимается, и сеть возобновляет нормальное поведение. [ необходима цитата ] Другие стратегии, такие как медленный старт , гарантируют, что новые соединения не перегрузят маршрутизатор до того, как начнется обнаружение перегрузки.
Распространенные механизмы предотвращения перегрузки маршрутизатора включают справедливую очередь и другие алгоритмы планирования , а также случайное раннее обнаружение (RED), когда пакеты случайным образом отбрасываются при обнаружении перегрузки. Это заранее запускает конечные точки для замедления передачи до того, как произойдет коллапс перегрузки.
Некоторые сквозные протоколы разработаны для хорошего поведения в условиях перегрузки; TCP является хорошо известным примером. Первые реализации TCP для обработки перегрузки были описаны в 1984 году, [8] но включение Ван Якобсона решения с открытым исходным кодом в Berkeley Standard Distribution UNIX (" BSD ") в 1988 году впервые обеспечило хорошее поведение.
UDP не контролирует перегрузку. Протоколы, построенные поверх UDP, должны обрабатывать перегрузку независимо. Протоколы, которые передают данные с фиксированной скоростью, независимо от перегрузки, могут быть проблемными. Протоколы потоковой передачи в реальном времени, включая многие протоколы Voice over IP , обладают этим свойством. Таким образом, необходимо принять специальные меры, такие как качество обслуживания, чтобы предотвратить потерю пакетов при наличии перегрузки.
Протоколы, ориентированные на соединение , такие как широко используемый протокол TCP, отслеживают потерю пакетов или задержку в очереди, чтобы скорректировать скорость передачи. Различные процессы предотвращения перегрузки сети поддерживают различные компромиссы. [9]
Алгоритм предотвращения перегрузки TCP является основной основой для контроля перегрузки в Интернете. [10] [11] [12] [13] [14]
Проблемы возникают, когда параллельные потоки TCP испытывают отбрасывание хвостов , особенно при наличии буферного раздувания . Эта отложенная потеря пакетов мешает автоматическому предотвращению перегрузки TCP. Все потоки, которые испытывают эту потерю пакетов, начинают переподготовку TCP в один и тот же момент – это называется глобальной синхронизацией TCP .
Активное управление очередями (AQM) — это переупорядочивание или отбрасывание сетевых пакетов внутри буфера передачи, связанного с контроллером сетевого интерфейса (NIC). Эта задача выполняется сетевым планировщиком .
Одним из решений является использование случайного раннего обнаружения (RED) в выходной очереди сетевого оборудования. [15] [16] На портах сетевого оборудования с более чем одной выходной очередью можно использовать взвешенное случайное раннее обнаружение (WRED).
RED косвенно сигнализирует отправителю и получателю TCP, отбрасывая некоторые пакеты, например, когда средняя длина очереди превышает пороговое значение (например, 50%), и удаляет линейно или кубически больше пакетов [17] , например, до 100%, по мере дальнейшего заполнения очереди.
Надежный алгоритм случайного раннего обнаружения (RRED) был предложен для улучшения пропускной способности TCP против атак типа «отказ в обслуживании» (DoS), особенно атак типа «отказ в обслуживании» с низкой скоростью (LDoS). Эксперименты подтвердили, что алгоритмы типа RED уязвимы для атак типа LDoS из-за колеблющегося размера очереди TCP, вызванного атаками. [18]
Некоторое сетевое оборудование оснащено портами, которые могут отслеживать и измерять каждый поток и, таким образом, могут сигнализировать о слишком большом потоке пропускной способности в соответствии с некоторой политикой качества обслуживания. Политика затем может разделить пропускную способность между всеми потоками по некоторым критериям. [19]
Другой подход заключается в использовании явного уведомления о перегрузке (ECN). [20] ECN используется только тогда, когда два хоста сигнализируют, что хотят его использовать. При этом методе бит протокола используется для сигнализации о явной перегрузке. Это лучше, чем косвенное уведомление о перегрузке, сигнализируемое потерей пакетов алгоритмами RED/WRED, но оно требует поддержки обоих хостов. [21] [15]
Когда маршрутизатор получает пакет, помеченный как ECN-capable, и маршрутизатор ожидает перегрузки, он устанавливает флаг ECN, уведомляя отправителя о перегрузке. Отправитель должен отреагировать, уменьшив свою пропускную способность передачи, например, уменьшив скорость отправки, уменьшив размер окна TCP или другими способами.
Избежание перегрузки может быть эффективно достигнуто путем сокращения трафика. Когда приложение запрашивает большой файл, графику или веб-страницу, оно обычно объявляет окно размером от 32 до 64 КБ. Это приводит к тому, что сервер отправляет полное окно данных (предполагая, что файл больше окна). Когда много приложений одновременно запрашивают загрузки, эти данные могут создать точку перегрузки у вышестоящего провайдера. Уменьшая объявление окна, удаленные серверы отправляют меньше данных, тем самым уменьшая перегрузку. [22] [23]
Backward ECN (BECN) — еще один предложенный механизм уведомления о перегрузке. Он использует сообщения подавления источника ICMP в качестве механизма сигнализации IP для реализации базового механизма ECN для сетей IP, сохраняя уведомления о перегрузке на уровне IP и не требуя согласования между конечными точками сети. Эффективные уведомления о перегрузке могут распространяться на протоколы транспортного уровня, такие как TCP и UDP, для соответствующих корректировок. [24]
Протоколы, которые избегают перегрузочного коллапса, как правило, предполагают, что потеря данных вызвана перегрузкой. В проводных сетях ошибки во время передачи редки. WiFi , 3G и другие сети с радиоуровнем подвержены потере данных из-за помех и в некоторых случаях могут испытывать низкую пропускную способность. TCP-соединения, работающие через физический уровень на основе радио, видят потерю данных и склонны ошибочно полагать, что происходит перегрузка.
Протокол медленного запуска плохо работает для коротких соединений. Старые веб-браузеры создавали много кратковременных соединений и открывали и закрывали соединение для каждого файла. Это удерживало большинство соединений в режиме медленного запуска. Первоначальная производительность может быть низкой, и многие соединения никогда не выходят из режима медленного запуска, что значительно увеличивает задержку. Чтобы избежать этой проблемы, современные браузеры либо открывают несколько соединений одновременно, либо повторно используют одно соединение для всех файлов, запрашиваемых с определенного сервера.
Управление доступом — это любая система, которая требует, чтобы устройства получили разрешение перед установлением новых сетевых подключений. Если новое подключение рискует создать перегрузку, разрешение может быть отклонено. Примерами служат возможности передачи без конкуренции (CFTXOP) в стандарте ITU-T G.hn для домашних сетей по устаревшим кабелям, протокол резервирования ресурсов для IP-сетей и протокол резервирования потоков для Ethernet .
В октябре 1986 г. в Интернете произошел первый из серии «коллапсов перегрузки». В этот период пропускная способность от LBL до Калифорнийского университета в Беркли (сайты, разделенные 400 ярдами и двумя переходами IMP) упала с 32 Кбит/с до 40 бит/с. Мы были очарованы этим внезапным падением пропускной способности в тысячу раз и приступили к расследованию того, почему все стало так плохо. В частности, мы задавались вопросом, ведет ли себя неправильно 4.3BSD (Berkeley UNIX) TCP или его можно настроить для лучшей работы в ужасных сетевых условиях. Ответ на оба этих вопроса был «да».
...Преимущество этой функции заключается не только в избежании сильных колебаний, но и в избежании недоиспользования канала при низких нагрузках. Применимость полученной функции не зависит от диапазона нагрузки, никакие параметры не нужно настраивать. По сравнению с исходной линейной функцией сброса применимость значительно расширена...Наш пример с реалистичными параметрами системы дает аппроксимирующую функцию кубической части размера очереди...