Explicit Congestion Notification (Explicit Congestion Notification)

Перейти к навигации Перейти к поиску

Explicit Congestion Notification (ECN, с англ. — «Явное Уведомление о Перегруженности») — расширение протокола IP, описанное в RFC 3168. ECN позволяет обеим сторонам в сети узнавать о возникновении затора на маршруте к заданному хосту или сети без отбрасывания пакетов. Это дополнительная функция, которая используется только в том случае, когда обе конечные точки обмена информацией сообщают, что они хотят её использовать.

Основные понятия

[править | править код]

Обычно, узлы TCP/IP сетей сообщают о возникновении затора путём отбрасывания пакетов. Если ECN сессия успешно установлена, поддерживающие расширение ECN маршрутизаторы могут сигнализировать о начале заторов устанавливая биты в заголовке IP, а не удаляя пакеты. Получатель пакетов информирует отправителя о заторе, который должен реагировать так, как будто был обнаружен сброс пакетов.

ECN использует два бита в DiffServ области в заголовке IP, для IPv4 в байте TOS, а в IPv6 в октете класса передачи пакета. Эти два бита могут использоваться для установки в одно из следующих значений:

  • поток поддерживающий ECN: англ. ECN-Capable Transport (ECT)
  • поток не поддерживающий ECN: англ. Not-ECN-Capable Transport (Not-ECT)
  • подтвержденная перегрузка: англ. Congestion Experienced (CE)

Некоторое устаревшее или тестовое сетевое оборудование отбрасывает пакеты с установленными битами ECN, а не игнорирует их[1].

Использование

[править | править код]

Для использования ECN требуется его поддержка на транспортном уровне.

Использование в TCP/IP

[править | править код]

В дополнение к двум ECN-битам в заголовке IP, TCP использует два флага заголовка TCP для сигнализации отправителю о заторе и сокращения объема информации, которую он посылает.

Использование ECN в соединениях TCP не является обязательным.

Использование в других транспортных протоколах

[править | править код]

Расширение ECN также определено для других протоколов транспортного уровня, которые выполняют контроль заторов в сети, в частности DCCP и SCTP. Общий принцип использования похож на TCP, хотя детали кодирования отличаются.

В принципе можно использовать расширение ECN и с протоколами, лежащими на уровнях над UDP. Однако, UDP требует, чтобы контроль перегрузок осуществлялся на уровне приложений, а текущей возможности приложений для сетей не дают им доступа к ECN битам

Производительность

[править | править код]

Использование ECN эффективно только в сочетании с политикой активного управления очередью (AQM), и польза от ECN зависит от правильности использования AQM.

Опытным путём было установлено, что ECN плохо влияет на производительность сильно перегруженной сети, если используются AQM алгоритмы, никогда не отбрасывающие пакеты[2]. Современные реализации AQM позволяют избежать подобной проблемы, заменяя маркировку пакетов на их отбрасывание, в случае критических перегрузок.

Реализация

[править | править код]

Многие современные реализации протокола TCP/IP имеют поддержку ECN, однако они обычно поставляются с выключенным ECN.

Поддержка на серверах

[править | править код]

Windows Server 2008 и Windows Vista поддерживают расширение ECN, но оно отключено по умолчанию[3]. Поддержка ECN может быть включена с помощью следующей команды:

netsh interface tcp set global ecncapability=enabled 

Mac OS X 10.5 по умолчанию поддерживает ECN. Управление производится с помощью интерфейса sysctl[4] :

net.inet.tcp.ecn_negotiate_in net.inet.tcp.ecn_initiate_out 

Ядро Linux поддерживает расширение ECN уже в течение некоторого времени, однако оно по умолчанию отключено. В большинстве версий ядра, оно может быть активировано через интерфейс Sysctl :

sysctl net.ipv4.tcp_ecn=1

FreeBSD 8.0 поддерживает расширение ECN. Оно может быть активировано через интерфейс Sysctl:

sysctl net.inet.tcp.ecn.enable=1 

Поддержка на маршрутизаторах

[править | править код]

Маркировка ECN полей маршрутизаторами зависит в той или иной форме от активного управления очередями. Маршрутизаторы должны быть соответствующим образом настроены для маркировки полей ECN.

Маршрутизаторы Cisco IOS выполняют маркировку ECN , если настроен WRED, начиная с версии 12.2 (8) T.

Примечания

[править | править код]
  1. Measuring Interactions Between Transport Protocols and Middleboxes. Alberto Medina, Mark Allman, and Sally Floyd. Internet Measurement Conference 2004, August 2004.
  2. Aleksandar Kuzmanovic. The power of explicit congestion notification. In Proceedings of the 2005 conference on Applications, technologies, architectures, and protocols for computer communications. 2005
  3. "New Networking Features in Windows Server 2008 and Windows Vista". Архивировано из оригинала 15 апреля 2012 года.
  4. "ECN (Explicit Congestion Notification) in TCP/IP". Архивировано из оригинала 15 апреля 2012 года.