Явное уведомление о перегрузке ( ECN ) является расширением Интернет-протокола и протокола управления передачей и определено в RFC 3168 (2001). ECN обеспечивает сквозное уведомление о перегрузке сети без потери пакетов. ECN - это дополнительная функция, которая может использоваться между двумя конечными точками с поддержкой ECN, если базовая сетевая инфраструктура также поддерживает ее.
Обычно сети TCP / IP сигнализируют о перегрузке, отбрасывая пакеты. После успешного согласования ECN маршрутизатор с поддержкой ECN может установить метку в заголовке IP вместо отбрасывания пакета, чтобы сигнализировать о надвигающейся перегрузке. Получатель пакета отражает сообщение о перегрузке отправителю, что снижает его скорость передачи, как если бы он обнаружил потерянный пакет.
Вместо того, чтобы правильно реагировать или игнорировать биты, некоторое устаревшее или неисправное сетевое оборудование исторически отбрасывало или искажало пакеты с установленными битами ECN. [1] [2] [3] По состоянию на 2015 год [Обновить]измерения показали, что доля веб-серверов в общедоступном Интернете, для которых настройка ECN предотвращает сетевые соединения, была уменьшена до менее 1%. [4]
Пассивная поддержка существует в Ubuntu Linux с 12.04 и в Windows Server с 2012 года. [5] Пассивная поддержка на самых популярных веб-сайтах увеличилась с 8,5% в 2012 году до более 70% в мае 2017 года. [5] Теперь требуется внедрение через Интернет. клиенты активно запрашивают ECN. В июне 2015 года Apple объявила, что ECN будет включена по умолчанию для ее поддерживаемых и будущих продуктов, чтобы способствовать внедрению ECN-сигнализации во всей отрасли. [6]
Операция
ECN требует специальной поддержки как на уровне Интернета, так и на транспортном уровне по следующим причинам:
- В TCP / IP маршрутизаторы работают на уровне Интернета, а скорость передачи обрабатывается конечными точками на транспортном уровне.
- Перегрузка может обрабатываться только передатчиком, но поскольку известно, что это произошло только после того, как пакет был отправлен, должен быть эхо-сигнал индикации перегрузки от приемника к передатчику.
Без ECN эхо-сигнал индикации перегрузки достигается косвенно путем обнаружения потерянных пакетов. В случае ECN перегрузка указывается установкой поля ECN в IP-пакете на CE и передается обратно приемником передатчику путем установки правильных битов в заголовке транспортного протокола. Например, при использовании TCP индикация перегрузки отражается эхом путем установки бита ECE.
Работа ECN с IP
ECN использует два наименее значимых (крайних правых) бита поля класса трафика в заголовке IPv4 или IPv6 для кодирования четырех разных кодовых точек:
00
- Транспорт без поддержки ECN, без ECT10
- Транспортировка с поддержкой ECN, ECT (0)01
- Транспортировка с поддержкой ECN, ECT (1)11
- Обнаружена перегрузка, CE.
Когда обе конечные точки поддерживают ECN, они маркируют свои пакеты с помощью ECT (0) или ECT (1). Маршрутизаторы рассматривают кодовые точки ECT (0) и ECT (1) как эквивалентные. Если пакет проходит через очередь активного управления очередью (AQM) (например, очередь, которая использует случайное раннее обнаружение (RED)), которая испытывает перегрузку, и соответствующий маршрутизатор поддерживает ECN, он может изменить кодовую точку на CE
вместо отбрасывания пакета . Это действие называется «маркировкой», и его цель состоит в том, чтобы проинформировать принимающую конечную точку о надвигающейся перегрузке . В принимающей конечной точке эта индикация перегрузки обрабатывается протоколом верхнего уровня (протокол транспортного уровня ) и должна быть возвращена передающему узлу, чтобы сообщить ему о снижении скорости передачи.
Поскольку индикация CE может эффективно обрабатываться только протоколом верхнего уровня, который ее поддерживает, ECN используется только в сочетании с протоколами верхнего уровня, такими как TCP , которые поддерживают контроль перегрузки и имеют метод для отражения индикации CE в передающей конечной точке. .
Работа ECN с TCP
TCP поддерживает ECN, используя два флага в заголовке TCP. Первый, ECN-Echo (ECE), используется для отражения индикации перегрузки (т. Е. Сигнализирует отправителю об уменьшении объема информации, которую он отправляет). Второй, сокращение окна перегрузки (CWR), подтверждает получение эхо-сигнала индикации перегрузки. Использование ECN в TCP-соединении необязательно; для использования ECN его необходимо согласовать при установлении соединения путем включения подходящих опций в сегменты SYN и SYN-ACK.
Когда ECN согласован для TCP-соединения, отправитель указывает, что IP-пакеты, которые несут TCP-сегменты этого соединения, переносят трафик от ECN Capable Transport, помечая их кодовой точкой ECT. Это позволяет промежуточным маршрутизаторам, поддерживающим ECN, помечать эти IP-пакеты кодовой точкой CE вместо того, чтобы отбрасывать их, чтобы сигнализировать о надвигающейся перегрузке.
После получения IP-пакета с кодовой точкой « Опыт перегрузки» приемник TCP возвращает это сообщение о перегрузке, используя флаг ECE в заголовке TCP. Когда конечная точка получает сегмент TCP с битом ECE, она уменьшает окно перегрузки, как при отбрасывании пакета. Затем он подтверждает индикацию перегрузки, отправляя сегмент с установленным битом CWR.
Узел продолжает передавать сегменты TCP с установленным битом ECE, пока он не получит сегмент с установленным битом CWR.
Чтобы увидеть затронутые пакеты с помощью tcpdump , используйте предикат фильтра (tcp[13] & 0xc0 != 0)
.
Пакеты управления ECN и TCP
Поскольку протокол управления передачей (TCP) не выполняет контроль перегрузки для пакетов управления (чистые ACK, сегменты SYN, FIN), пакеты управления обычно не помечаются как поддерживающие ECN.
Предложение 2009 г. [7] предлагает маркировать пакеты SYN-ACK как поддерживающие ECN. Было показано, что это усовершенствование, известное как ECN +, значительно повышает производительность короткоживущих TCP-соединений. [8]
Работа ECN с другими транспортными протоколами
ECN также определен для других протоколов транспортного уровня, которые выполняют контроль перегрузки, в частности DCCP и протокола передачи управления потоком (SCTP). Общий принцип аналогичен TCP, хотя детали кодирования по сети отличаются.
ECN можно использовать с протоколами, расположенными выше UDP . Однако UDP требует, чтобы управление перегрузкой выполнялось приложением, а ранние протоколы на основе UDP, такие как DNS , не использовали ECN. Более поздние протоколы на основе UDP, такие как QUIC , используют ECN для контроля перегрузки.
Влияние на производительность
Поскольку ECN эффективен только в сочетании с политикой активного управления очередью (AQM), преимущества ECN зависят от того, какой именно AQM используется. Однако несколько наблюдений, по-видимому, справедливы для разных AQM.
Как и ожидалось, ECN уменьшает количество пакетов, отброшенных TCP-соединением, что, избегая повторной передачи, уменьшает задержку и особенно дрожание. Этот эффект наиболее заметен, когда TCP-соединение имеет единственный ожидающий сегмент [9], когда удается избежать тайм-аута RTO ; это часто имеет место для интерактивных подключений, таких как удаленный вход в систему, и транзакционных протоколов, таких как HTTP-запросы, диалоговая фаза SMTP или SQL-запросы.
Влияние ECN на массовую пропускную способность менее очевидно [10], потому что современные реализации TCP достаточно хороши для своевременной повторной отправки отброшенных сегментов, когда окно отправителя велико.
Было обнаружено, что использование ECN снижает производительность в сильно загруженных сетях при использовании алгоритмов AQM, которые никогда не отбрасывают пакеты. [8] Современные реализации AQM избегают этой ловушки, отбрасывая, а не маркируя пакеты при очень высокой нагрузке.
Реализации
Многие современные реализации набора протоколов TCP / IP имеют некоторую поддержку ECN; однако они обычно поставляются с отключенным ECN.
Поддержка ECN в TCP хостами
Майкрософт Виндоус
Версии Windows, начиная с Windows Server 2008 и Windows Vista, поддерживают ECN для TCP. [11] Начиная с Windows Server 2012, он включен по умолчанию в версиях Windows Server, поскольку используется протокол управления передачей данных центра обработки данных (DCTCP). [12] В предыдущих версиях Windows и несерверных версиях он отключен по умолчанию.
Поддержка ECN может быть включена с помощью команды оболочки, такой как netsh interface tcp set global ecncapability = enabled .
BSD
Во FreeBSD ECN для TCP можно настроить с помощью net.inet.tcp.ecn . включить sysctl . По умолчанию он включен только для входящих соединений, которые его запрашивают. Его также можно включить для всех подключений или полностью отключить. [13]
NetBSD 4.0 реализует поддержку ECN для TCP; его можно активировать через интерфейс sysctl , установив 1 в качестве значения для sysctl net.inet.tcp.ecn.enable параметр. [14]
Точно так же sysctl net.inet.tcp.ecn можно использовать в OpenBSD . [15]
Linux
Начиная с версии 2.4.20 ядра Linux , выпущенной в ноябре 2002 года [16], Linux поддерживает три режима работы ECN для TCP, настроенных через интерфейс sysctl путем установки параметра / proc / sys / net / ipv4 / tcp_ecn на одно из следующих значений: [17]
- 0 - отключить ECN и не инициировать и не принимать его
- 1 - включить ECN при запросе входящих соединений, а также запрашивать ECN при попытках исходящего соединения
- 2 - (по умолчанию) включать ECN при запросе входящих соединений, но не запрашивать ECN при исходящих соединениях
Начиная с версии ядра Linux 4.1, выпущенной в июне 2015 года, Механизм tcp_ecn_fallback , как указано в разделе 6.1.1.1 RFC 3168, [18] включен по умолчанию [19], когда включен ECN (значение 1). Механизм отката пытается установить соединение ECN при первоначальной настройке исходящих соединений, с постепенным откатом для передач без возможности ECN, смягчая проблемы с хостами, нетерпимыми к ECN, или межсетевыми экранами.
Mac OS X
В Mac OS X 10.5 и 10.6 реализована поддержка ECN для TCP. Управляется с помощью логических переменных sysctl.net.inet.tcp.ecn_negotiate_in и net.inet.tcp.ecn_initiate_out . [20] Первая переменная включает ECN для входящих соединений, для которых уже установлены флаги ECN; второй пытается инициировать исходящие соединения с включенным ECN. Обе переменные по умолчанию равны 0 , но может быть установлен на 1, чтобы включить соответствующее поведение.
В июне 2015 года Apple Inc. объявила, что в OS X 10.11 ECN будет включен по умолчанию [6], но ОС поставляется без этого поведения по умолчанию. В macOS Sierra ECN включен для половины сеансов TCP. [21]
iOS
В июне 2015 года Apple Inc. объявила, что iOS 9 , ее следующая версия iOS, будет поддерживать ECN и будет включена по умолчанию. [6] Согласование TCP ECN включено для 5% случайно выбранных подключений через Wi-Fi / Ethernet в iOS 9 и 50% случайно выбранных подключений через Wi-Fi / Ethernet и нескольких операторов сотовой связи в iOS 10 [22] [23 ] и 100% для iOS 11 [24]
Солярис
Solaris ядро поддерживает три состояния ECN для TCP: [25]
- никогда - нет ECN
- active - использовать ECN
- пассивный - рекламировать поддержку ECN только по запросу.
Поведение по умолчанию пассивный . Начиная с Solaris 11, полное использование ECN можно активировать через ipadm set-prop -p ecn = active tcp . [26]
Поддержка ECN в IP маршрутизаторами
Поскольку маркировка ECN в маршрутизаторах зависит от некоторой формы активного управления очередью , маршрутизаторы должны быть настроены с подходящей дисциплиной очереди для выполнения маркировки ECN.
Маршрутизаторы Cisco IOS выполняют маркировку ECN, если они настроены с использованием дисциплины очередей WRED, начиная с версии 12.2 (8) T.
Маршрутизаторы Linux выполняют ECN маркировку , если сконфигурирована с одним из RED дисциплин очередей или GRED с явной ECN параметром, используя SFB дисциплины, с помощью CoDel (fq_codel) дисциплины Fair Queuing, или ТОРТ [27] очередей дисциплины.
Современные реализации BSD, такие как FreeBSD , NetBSD и OpenBSD , поддерживают маркировку ECN в реализации очереди ALTQ для ряда дисциплин организации очереди , особенно RED и Blue . FreeBSD 11 включала реализацию дисциплин организации очереди CoDel , PIE, FQ-CoDel и FQ-PIE в инфраструктуре ipfw / dummynet с возможностью маркировки ECN. [28]
Дата-центр TCP
Протокол управления передачей центра обработки данных ( TCP или DCTCP центра обработки данных ) использует ECN для улучшения алгоритма управления перегрузкой протокола управления передачей . Используется в сетях дата-центров . В то время как стандартный алгоритм управления перегрузкой TCP способен обнаруживать только наличие перегрузки, DCTCP, используя ECN, может измерить степень перегрузки. [29]
DCTCP модифицирует приемник TCP, чтобы всегда передавать точную маркировку ECN входящих пакетов за счет игнорирования функции, предназначенной для сохранения надежности сигнализации. Это делает отправителя DCTCP уязвимым для потери ACK от получателя, для чего у него нет механизма, который можно было бы обнаружить или с которым можно было бы справиться. [30] По состоянию на июль 2014 г.[Обновить], алгоритмы, которые обеспечивают эквивалентную или лучшую обратную связь приемника при более надежном подходе, являются активной темой исследований. [31]
Смотрите также
- Обратный ECN (BECN)
- Предотвращение перегрузки сети
- Тип услуги (ToS)
Рекомендации
- ^ Стивен Бауэр; Роберт Беверли; Артур Бергер (2011). «Измерение состояния готовности ECN на серверах, клиентах и маршрутизаторах» (PDF) . Internet Measurement Conference 2011. Архивировано (PDF) из оригинала 22 марта 2014 года.
- ^ Альберто Медина; Марк Оллман; Салли Флойд. «Измерение взаимодействий между транспортными протоколами и промежуточными ящиками» (PDF) . Internet Measurement Conference 2004. Архивировано (PDF) из оригинала 04.03.2016.
- ^ «TBIT, инструмент вывода поведения TCP: ECN» . Icir.org. Архивировано 11 марта 2013 года . Проверено 22 марта 2014 .
- ^ Брайан Траммелл; Мирья Кюлевинд; Дамиано Боппарт; Иэн Лермонт; Горри Фэрхерст; Ричард Шеффенеггер (2015). «Включение явного уведомления о перегрузке в Интернете» (PDF) . Материалы пассивной и активной Measurement Conference 2015. Архивировано из оригинального (PDF) на 15 июня 2015 . Проверено 14 июня 2015 года .
- ^ а б Дэвид Мюррей; Терри Козинец; Себастьян Зандер; Майкл Диксон; Полихронис Куцакис (2017). «Анализ изменения характеристик трафика корпоративной сети» (PDF) . 23-я Азиатско-Тихоокеанская конференция по коммуникациям (APCC 2017). Архивировано 3 октября 2017 года (PDF) . Проверено 3 октября 2017 года .
- ^ а б в «Ваше приложение и сети нового поколения» . Apple Inc. 2015. Архивировано 15 июня 2015 года.
- ^ RFC 5562 - Добавление возможности явного уведомления о перегрузке в пакеты TCP SYN / ACK. Архивировано 2 сентября 2010 г.в Wayback Machine А. Кузманович, А. Мондал, С. Флойд, К. Рамакришнан.
- ^ a b Александр Кузманович. Возможность явного уведомления о перегрузке. В материалах конференции 2005 г. по приложениям, технологиям, архитектурам и протоколам для компьютерных коммуникаций . 2005 г.
- ^ Джамал Хади Салим и Uvaiz Ахмед. Оценка производительности явного уведомления о перегрузке (ECN) в IP-сетях. RFC 2884. Июль 2000 г.
- ^ Марек Маловидски, Исследование производительности ECN в сетях RED на основе моделирования, In Proc. СПЕКТРЫ'03 . 2003 г.
- ^ «Новые сетевые функции в Windows Server 2008 и Windows Vista» . Архивировано 15 января 2010 года.
- ^ «Протокол управления передачей данных центра обработки данных (DCTCP) (Windows Server 2012)» . Архивировано 26 августа 2017 года.
- ^ «tcp (4) - протокол управления передачей данных в Интернете» . Руководство по интерфейсам ядра FreeBSD . Проверено 3 апреля 2020 .
- ^ «Анонс NetBSD 4.0» . 2007-12-19. Архивировано 31 октября 2014 года . Проверено 13 октября 2014 .
- ^ Майкл Лукас (2013). Абсолютный OpenBSD: UNIX для практических параноиков . ISBN 9781593274764. Проверено 22 марта 2014 .
- ^ «Карта сетевого кода в ядре Linux 2.4.20, технический отчет DataTAG-2004-1, проект FP5 / IST DataTAG» (PDF) . datatag.web.cern.ch . Март 2004. Архивировано 27 октября 2015 года (PDF) . Проверено 1 сентября 2015 года .
- ^ «Документация / сеть / ip-sysctl.txt: / proc / sys / net / ipv4 / * Переменные» . kernel.org . Архивировано 5 марта 2016 года . Проверено 15 февраля 2016 .
- ^ «RFC 3168 - Добавление явного уведомления о перегрузке (ECN) в IP» . ietf.org . Сентябрь 2001. Архивировано 05 февраля 2016 года . Проверено 15 февраля 2016 .
- ^ "Страницы руководства Linux" . man7.org . 2015-12-05. Архивировано 16 февраля 2016 года . Проверено 15 февраля 2016 .
- ^ «ECN (явное уведомление о перегрузке) в TCP / IP» . Архивировано 19 июня 2012 года.
- ^ «macOS 10.12 Sierra: обзор Ars Technica» . Ars Technica . 20 сентября 2016 года. Архивировано 26 апреля 2018 года . Проверено 25 апреля 2018 года .
- ^ Inc., Apple. «Сети для современного Интернета - WWDC 2016 - Видео - Apple Developer» . Разработчик Apple . Архивировано 18 апреля 2018 года . Проверено 18 апреля 2018 года .
- ^ Бхоома, Падма (март 2017 г.). «TCP ECN - Опыт использования ECN в Интернете» (PDF) . Архивировано (PDF) из оригинала на 2018-05-09 . Проверено 3 мая 2017 .
- ^ Inc., Apple. «Достижения в области сетевых технологий, часть 1 - WWDC 2017 - Видео - разработчик Apple» . Разработчик Apple . Архивировано 31 января 2018 года . Проверено 18 апреля 2018 года .
- ^ «ipadm (8)» . Информационная библиотека Oracle Solaris 11.4 . Oracle . Дата обращения 6 мая 2021 .
- ^ «Администрирование сетей TCP / IP, IPMP и IP-туннелей в Oracle® Solaris 11.4, используя функцию TCP ECN» . Информационная библиотека Oracle Solaris 11.4 . Oracle . Дата обращения 6 мая 2021 .
- ^ Хойланд-Йоргенсен, Ток; Тэхт, Дэйв; Мортон, Джонатан (2018). «Piece of CAKE: Комплексное решение для управления очередью для домашних шлюзов». arXiv : 1804.07617v2 [ cs.NI ].
- ^ «Импортировать Dummynet AQM версии 0.2.1 (CoDel, FQ-CoDel, PIE и FQ-PIE) во FreeBSD 11» . Проект FreeBSD, FreeBSD r300779 . Дата обращения 5 августа 2016 .
- ^ «Дата-центр TCP» . Архивировано 23 декабря 2016 года . Проверено 21 декабря 2016 .
- ^ «Требования к более точной обратной связи ECN» . tools.ietf.org . IETF. 9 марта 2015 года. Архивировано 19 ноября 2015 года . Проверено 2 мая 2015 года .
- ^ «RFC 7560: Постановка проблемы и требования для повышения точности обратной связи с явным уведомлением о перегрузке (ECN)» . tools.ietf.org . IETF. 26 августа 2015 года. Архивировано 29 апреля 2016 года . Проверено 12 мая 2016 года .
Внешние ссылки
- Веб-страница ECN Салли Флойд
- RFC 4774 (BCP), Указание альтернативной семантики для поля явного уведомления о перегрузке (ECN) , С. Флойд, (ноябрь 2006 г.)
- Поддержка ядра Linux для определения алгоритма управления перегрузкой для каждого маршрута / пункта назначения (объединено в ядре Linux 4.0)