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.
Примечания
[править | править код]- ↑ Measuring Interactions Between Transport Protocols and Middleboxes. Alberto Medina, Mark Allman, and Sally Floyd. Internet Measurement Conference 2004, August 2004.
- ↑ Aleksandar Kuzmanovic. The power of explicit congestion notification. In Proceedings of the 2005 conference on Applications, technologies, architectures, and protocols for computer communications. 2005
- ↑ "New Networking Features in Windows Server 2008 and Windows Vista" . Архивировано из оригинала 15 апреля 2012 года.
- ↑ "ECN (Explicit Congestion Notification) in TCP/IP" . Архивировано из оригинала 15 апреля 2012 года.
См. также
[править | править код]- Тип обслуживания
- TCP / IP
- en:Network congestion avoidance
- Перегрузка сети
- Data center bridging[англ.]