Мотивация
Когда в сети возникает перегрузка, буферы маршрутизаторов переполняются и маршрутизаторы начинают терять пакеты. Для TCP-трафика это является сигналом о необходимости перехода в т.н. «фазу затяжного пуска» для снижения нагрузки на сеть и устранения перегрузки. Это достаточно простая процедура, когда в начале передачи данных окно соединения устанавливается равным 1, а при получении каждого последующего подтверждения окно увеличивается на 1, пока не достигнет максимума.
У данного сценария есть два недостатка. Во-первых, потерянные пакеты необходимо передавать повторно, что увеличивает нагрузку на сеть и является причиной значительных задержек в TCP-потоках. Более серьезный феномен называется глобальной синхронизацией, при которой имеет место следующая ситуация. В случае резкого увеличения объемов трафика очереди переполняются, и множество пакетов теряется. Как правило, это затрагивает многие TCP-соединения, в результате они переходят в фазу затяжного пуска, суммарный объем сетевого трафика резко падает и в течение определенного периода сеть используется не в полной мере. Поскольку многие TCP-соединения переходят в фазу затяжного пуска примерно в одно и то же время, они и выходят из этого режима также приблизительно одновременно, что вызывает очередное резкое увеличение объемов трафика в сети и новый цикл «изобилия и голодания».
Одно из решений заключается в использовании на каждом маршрутизаторе буферов большего размера для снижения вероятности потери пакетов. У такого подхода есть два недостатка. Во-первых, когда эти большие буферы заполняются, задержки во всех соединениях возрастают во много раз. Еще хуже ситуация в случае самоподобного трафика (инвариантный относительно изменения масштаба) – повторяющийся во всех масштабах времени. Тогда построить достаточно большие буферы невозможно в принципе. Большие всплески активности отправителей могут возникать друг за другом, поддерживая состояние перегрузки, и потребности в буферах при этом будут расти до бесконечности.
Лучшее решение состоит в том, чтобы предвидеть наступление перегрузки и предлагать то одному, то другому TCP-сообщению снизить скорость передачи данных. Затем определяется эффект этого замедления, после чего, в случае необходимости, замедляется другое соединение. Подобным образом, когда начинается перегрузка, торможение трафика осуществляется постепенно, с минимальным воздействием на TCP-соединения и без глобальной синхронизации. Именно такое решение реализовано в методе RED.