stringtranslate.com

Явное уведомление о перегрузке

Явное уведомление о перегрузке ( 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 требует специальной поддержки как на уровне Интернета, так и на транспортном уровне по следующим причинам:

Без ECN эхо-сигнал индикации перегрузки достигается косвенно за счет обнаружения потерянных пакетов. При использовании ECN перегрузка указывается путем установки поля ECN в IP-пакете на CE (опыт перегрузки) и передается обратно от приемника передатчику путем установки соответствующих битов в заголовке транспортного протокола. Например, при использовании TCP индикация перегрузки возвращается путем установки бита ECE.

Работа ECN с IP

ECN использует два младших (самых правых) бита поля класса трафика в заголовке IPv4 или IPv6 для кодирования четырех различных кодовых точек:

Когда обе конечные точки поддерживают 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, помечая их кодовой точкой ECT. Это позволяет промежуточным маршрутизаторам, поддерживающим ECN, помечать эти IP-пакеты кодом CE вместо того, чтобы отбрасывать их, чтобы сигнализировать о надвигающейся перегрузке.

При получении IP-пакета с кодовой точкой Congestion Experienced получатель TCP возвращает это указание на перегрузку, используя флаг ECE в заголовке TCP. Когда конечная точка получает сегмент TCP с битом ECE, она уменьшает окно перегрузки, как при потере пакета. Затем он подтверждает индикацию перегрузки, отправляя сегмент с установленным битом CWR.

Узел продолжает передавать сегменты TCP с установленным битом ECE до тех пор, пока не получит сегмент с установленным битом CWR.

Чтобы увидеть затронутые пакеты с помощью tcpdump , используйте предикат filter (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, поскольку используется протокол управления передачей данных центра обработки данных (DTCCP). [12] В предыдущих версиях Windows и несерверных версиях она отключена по умолчанию.

Поддержку ECN можно включить с помощью команды оболочки, например netsh interface tcp set global ecncapability=enabled.

БСД

Во FreeBSD ECN для TCP можно настроить с помощью sysctl net.inet.tcp.ecn.enable . По умолчанию он включен только для входящих соединений, которые его запрашивают. Его также можно включить для всех подключений или полностью отключить. [13]

NetBSD  4.0 реализует поддержку ECN для TCP; его можно активировать через интерфейс sysctl , установив для sysctl net.inet.tcp.ecn.enableпараметра значение 1. [14]

Аналогично, sysctl net.inet.tcp.ecn можно использовать в OpenBSD . [15]

Линукс

Начиная с версии 2.4.20 ядра Linux , выпущенной в ноябре 2002 года, [16] Linux поддерживает три режима работы ECN для TCP, которые настраиваются через интерфейс sysctl путем установки параметра /proc/sys/net/ipv4/tcp_ecn в одно значение. следующих значений: [17]

Начиная с версии 4.1 ядра Linux, выпущенной в июне 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]

Начиная с Solaris 11.4, поведение по умолчанию активно . Использование 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) или дисциплины организации очередей CAKE [27] .

Современные реализации BSD, такие как FreeBSD , NetBSD и OpenBSD , имеют поддержку маркировки ECN в реализации организации очередей ALTQ для ряда дисциплин организации очередей , в частности RED и Blue . FreeBSD 11 включала реализацию дисциплин организации очередей CoDel , PIE, FQ-CoDel и FQ-PIE в среде ipfw /dummynet с возможностью маркировки ECN. [28]

Центр обработки данных TCP

Протокол управления передачей центра обработки данных ( TCP или DTCCP ) использует ECN для улучшения алгоритма управления перегрузкой протокола управления передачей . [29] Используется в сетях центров обработки данных . В то время как стандартный алгоритм управления перегрузкой TCP способен только обнаружить наличие перегрузки, DTCCP, используя ECN, способен оценить степень перегрузки . [30]

DTCCP изменяет приемник TCP, чтобы он всегда передавал точную маркировку ECN входящих пакетов за счет игнорирования функции, предназначенной для сохранения надежности сигнализации. Это делает отправителя DTCCP уязвимым к потере подтверждений ACK от получателя, и у него нет механизма обнаружения или устранения этой проблемы. [31] По состоянию на июль 2014 года алгоритмы, обеспечивающие эквивалентную или лучшую обратную связь с приемником при более надежном подходе, являются активной темой исследований. [31]

Смотрите также

Рекомендации

  1. ^ Стивен Бауэр; Роберт Беверли; Артур Бергер (2011). «Измерение состояния готовности ECN на серверах, клиентах и ​​маршрутизаторах» (PDF) . Конференция по интернет-измерениям 2011. Архивировано (PDF) из оригинала 22 марта 2014 г.
  2. ^ Альберто Медина; Марк Оллман; Салли Флойд. «Измерение взаимодействия между транспортными протоколами и промежуточными процессорами» (PDF) . Конференция по интернет-измерениям 2004 г. Архивировано (PDF) из оригинала 4 марта 2016 г.
  3. ^ «TBIT, инструмент вывода поведения TCP: ECN» . Icir.org. Архивировано из оригинала 11 марта 2013 г. Проверено 22 марта 2014 г.
  4. ^ Брайан Траммелл; Мирья Кюлевинд; Дамиано Боппарт; Иэн Лермонт; Горри Фэйрхерст; Ричард Шеффенеггер (2015). «Включение явного уведомления о перегрузке во всем Интернете» (PDF) . Материалы конференции по пассивным и активным измерениям 2015. Архивировано из оригинала (PDF) 15 июня 2015 года . Проверено 14 июня 2015 г.
  5. ^ AB Дэвид Мюррей; Терри Козинец; Себастьян Зандер; Майкл Диксон; Полихронис Куцакис (2017). «Анализ изменения характеристик сетевого трафика предприятия» (PDF) . 23-я Азиатско-Тихоокеанская конференция по коммуникациям (APCC 2017). Архивировано (PDF) из оригинала 3 октября 2017 г. Проверено 3 октября 2017 г.
  6. ^ abc «Ваше приложение и сети следующего поколения». Apple Inc., 2015 г. Архивировано из оригинала 15 июня 2015 г.
  7. ^ Кузманович, А.; Мондал, А.; Флойд, С.; Рамакришнан, К. (июнь 2009 г.). Добавление возможности явного уведомления о перегрузке в пакеты SYN/ACK TCP. дои : 10.17487/RFC5562 . РФК 5562.
  8. ^ АБ Александр Кузманович. Возможности явного уведомления о перегрузке. В материалах конференции 2005 года по приложениям, технологиям, архитектурам и протоколам компьютерной связи . 2005.
  9. ^ Джамал Хади Салим и Увайз Ахмед. Оценка производительности явного уведомления о перегрузке (ECN) в IP-сетях. RFC 2884. Июль 2000 г.
  10. ^ Марек Маловидски, Исследование производительности ECN в сетях RED на основе моделирования, В Proc. СПЕКТЫ'03 . 2003.
  11. ^ «Новые сетевые функции в Windows Server 2008 и Windows Vista». Архивировано из оригинала 15 января 2010 г.
  12. ^ «Протокол управления передачей центра обработки данных (DTCCP) (Windows Server 2012)» . Архивировано из оригинала 26 августа 2017 г.
  13. ^ «tcp (4) — протокол управления передачей данных в Интернете» . Руководство по интерфейсам ядра FreeBSD . Проверено 3 апреля 2020 г. .
  14. ^ «Анонс NetBSD 4.0» . 19 декабря 2007 г. Архивировано из оригинала 31 октября 2014 г. Проверено 13 октября 2014 г.
  15. ^ Майкл Лукас (2013). Абсолютный OpenBSD: UNIX для практичных параноиков. Нет крахмального пресса. ISBN 9781593274764. Проверено 22 марта 2014 г.
  16. ^ «Карта сетевого кода в ядре Linux 2.4.20, технический отчет DataTAG-2004-1, проект DataTAG FP5/IST» (PDF) . datatag.web.cern.ch . Март 2004 г. Архивировано (PDF) из оригинала 27 октября 2015 г. Проверено 1 сентября 2015 г.
  17. ^ «Документация/сеть/ip-sysctl.txt: /proc/sys/net/ipv4/* Переменные» . ядро.орг . Архивировано из оригинала 05 марта 2016 г. Проверено 15 февраля 2016 г.
  18. ^ Добавление явного уведомления о перегрузке (ECN) в IP. Сентябрь 2001 г. doi : 10.17487/RFC3168 . РФК 3168 . Проверено 15 февраля 2016 г.
  19. ^ "Справочные страницы Linux" . man7.org . 05.12.2015. Архивировано из оригинала 16 февраля 2016 г. Проверено 15 февраля 2016 г.
  20. ^ «ECN (явное уведомление о перегрузке) в TCP/IP» . Архивировано из оригинала 19 июня 2012 г.
  21. ^ «macOS 10.12 Sierra: обзор Ars Technica» . Арс Техника . 20 сентября 2016 г. Архивировано из оригинала 26 апреля 2018 г. . Проверено 25 апреля 2018 г.
  22. ^ Inc., Apple. «Сети для современного Интернета — WWDC 2016 — Видео — Разработчик Apple». Разработчик Apple . Архивировано из оригинала 18 апреля 2018 года . Проверено 18 апреля 2018 г. {{cite web}}: |last=имеет общее имя ( справка )
  23. ^ Бхума, Падма (март 2017 г.). «TCP ECN — Опыт включения ECN в Интернете» (PDF) . Архивировано (PDF) из оригинала 9 мая 2018 г. Проверено 3 мая 2017 г.
  24. ^ Inc., Apple. «Достижения в области сетевых технологий, часть 1 — WWDC 2017 — Видео — Разработчик Apple». Разработчик Apple . Архивировано из оригинала 31 января 2018 года . Проверено 18 апреля 2018 г. {{cite web}}: |last=имеет общее имя ( справка )
  25. ^ "ipadm(8)" . Информационная библиотека Oracle Solaris 11.4 . Оракул . Проверено 6 мая 2021 г.
  26. ^ «Администрирование сетей TCP/IP, IPMP и IP-туннелей в Oracle® Solaris 11.4, использование функции TCP ECN» . Информационная библиотека Oracle Solaris 11.4 . Оракул . Проверено 6 мая 2021 г.
  27. ^ Хойланд-Йоргенсен, Токе; Тяхт, Дэйв; Мортон, Джонатан (2018). «Часть торта: комплексное решение по управлению очередями для домашних шлюзов». arXiv : 1804.07617v2 [cs.NI].
  28. ^ «Импортируйте Dummynet AQM версии 0.2.1 (CoDel, FQ-CoDel, PIE и FQ-PIE) во FreeBSD 11» . Проект FreeBSD, FreeBSD r300779 . Проверено 5 августа 2016 г.
  29. ^ «TCP центра обработки данных (DTCCP)» . Архивировано из оригинала 31 октября 2014 г. Проверено 7 марта 2023 г.
  30. ^ TCP для центров обработки данных (DTCCP): контроль перегрузки TCP для центров обработки данных. дои : 10.17487/RFC8257 . RFC 8257 . Проверено 21 августа 2021 г.
  31. ^ ab Постановка задачи и требования к повышению точности обратной связи с явным уведомлением о перегрузке (ECN). 26 августа 2015 г. doi : 10.17487/RFC7560 . РФК 7560 . Проверено 21 августа 2021 г.

Внешние ссылки