Явное уведомление о перегрузке - Explicit Congestion Notification

Явное уведомление о перегрузке (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 г. яблоко объявила, что ECN будет включена по умолчанию для поддерживаемых и будущих продуктов, чтобы способствовать внедрению ECN-сигнализации во всей отрасли.[6]

Операция

ECN требует специальной поддержки как на уровне Интернета, так и на уровне транспортный уровень по следующим причинам:

  • В TCP / IP маршрутизаторы работают на уровне Интернета, а скорость передачи обрабатывается конечными точками на транспортном уровне.
  • Перегрузка может обрабатываться только передатчиком, но, поскольку известно, что это произошло только после того, как пакет был отправлен, должен быть эхо-сигнал индикации перегрузки от приемника к передатчику.

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

Работа ECN с IP

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

  • 00 - Транспорт без поддержки ECN, без ECT
  • 10 - Транспорт с возможностью ECN, ECT (0)
  • 01 - Транспортировка с поддержкой ECN, ECT (1)
  • 11 - Обнаружена перегрузка, CE.

Когда обе конечные точки поддерживают ECN, они маркируют свои пакеты с помощью ECT (0) или ECT (1). Маршрутизаторы рассматривают кодовые точки ECT (0) и ECT (1) как эквивалентные. Если пакет проходит через активное управление очередью (AQM) очередь (например, очередь, которая использует случайное раннее обнаружение (КРАСНЫЙ)), который испытывает перегрузку, и соответствующий маршрутизатор поддерживает 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.enable 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 механизм, как указано в RFC 3168 раздел 6.1.1.1,[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 включен для 50 процентов сеансов 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]

Солярис

В Солярис ядро поддерживает три состояния ECN для TCP:[нужна цитата ]

  • никогда - нет ECN
  • активный - использовать ECN
  • пассивный - рекламировать поддержку ECN только по запросу.

Поведение по умолчанию пассивный. Начиная с Solaris 11, полное использование ECN можно активировать через ipadm set-prop -p ecn = active tcp.[нужна цитата ]

Поддержка ECN в IP маршрутизаторами

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

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

Маршрутизаторы Linux выполняют маркировку ECN, если настроены с одним из КРАСНЫЙ или очереди GRED с явным ecn параметр, используя SFB дисциплина, используя CoDel Дисциплина Fair Queuing (fq_codel) или CAKE[25] дисциплина в очередях.

Современные реализации BSD, такие как FreeBSD, NetBSD и OpenBSD, имеют поддержку маркировки ECN в ALTQ реализация очередей для ряда дисциплины очередей, особенно КРАСНЫЙ и Синий. FreeBSD 11 включены CoDel, PIE, FQ-CoDel и FQ-PIE дисциплины очередей реализация в ipfw Фреймворк / dummynet с возможностью маркировки ECN.[26]

Дата-центр TCP

Протокол управления передачей данных центра (Дата-центр TCP или же DCTCP) использует ECN для улучшения Протокол управления передачей алгоритм управления перегрузкой. Он используется в Дата центр сети. В то время как стандарт Алгоритм контроля перегрузки TCP может только обнаружить присутствие перегрузки, DCTCP, используя ECN, может измерить степень заторов.[27]

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

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

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

  1. ^ Стивен Бауэр; Роберт Беверли; Артур Бергер (2011). «Измерение состояния готовности ECN серверов, клиентов и маршрутизаторов» (PDF). Конференция по Интернет-измерениям 2011 г. В архиве (PDF) из оригинала от 22.03.2014.
  2. ^ Альберто Медина; Марк Оллман; Салли Флойд. «Измерение взаимодействия между транспортными протоколами и промежуточными ящиками» (PDF). Конференция по измерениям Интернета, 2004 г. В архиве (PDF) из оригинала от 04.03.2016.
  3. ^ "TBIT, инструмент определения поведения TCP: ECN". Icir.org. В архиве из оригинала от 11.03.2013. Получено 2014-03-22.
  4. ^ Брайан Траммелл; Мирья Кюлевинд; Дамиано Боппарт; Иэн Лермонт; Горри Фэрхерст; Ричард Шеффенеггер (2015). «Включение возможности развертывания явного уведомления о перегрузке в Интернете» (PDF). Материалы конференции по пассивным и активным измерениям, 2015 г. оригинал (PDF) 15 июня 2015 г.. Получено 14 июн 2015.
  5. ^ а б Дэвид Мюррей; Терри Козинец; Себастьян Зандер; Майкл Диксон; Полихронис Куцакис (2017). «Анализ изменения характеристик трафика корпоративной сети» (PDF). 23-я Азиатско-Тихоокеанская конференция по коммуникациям (APCC 2017). В архиве (PDF) из оригинала 3 октября 2017 г.. Получено 3 октября 2017.
  6. ^ а б c «Ваше приложение и сети нового поколения». Apple Inc., 2015 г. В архиве из оригинала от 15.06.2015.
  7. ^ RFC 5562 - Добавление возможности явного уведомления о перегрузке в пакеты TCP SYN / ACK. В архиве 2010-09-02 на Wayback Machine А. Кузманович, А. Мондал, С. Флойд, К. Рамакришнан
  8. ^ а б Александар Кузманович. Возможность явного уведомления о перегрузке. В Труды конференции 2005 г. по приложениям, технологиям, архитектурам и протоколам для компьютерных коммуникаций. 2005.
  9. ^ Джамал Хади Салим и Увайз Ахмед. Оценка производительности явного уведомления о перегрузке (ECN) в IP-сетях. RFC 2884. Июль 2000 г.
  10. ^ Марек Маловидски, Исследование производительности ECN в сетях RED на основе моделирования, In Proc. СПЕКТРЫ'03. 2003.
  11. ^ «Новые сетевые функции в Windows Server 2008 и Windows Vista». В архиве из оригинала от 15.01.2010.
  12. ^ «Протокол управления передачей данных центра обработки данных (DCTCP) (Windows Server 2012)». В архиве из оригинала от 26.08.2017.
  13. ^ "tcp (4) - протокол управления передачей в Интернете". Руководство по интерфейсам ядра FreeBSD. Получено 3 апреля 2020.
  14. ^ «Анонс NetBSD 4.0». 2007-12-19. В архиве с оригинала 31.10.2014. Получено 2014-10-13.
  15. ^ Майкл Лукас (2013). Абсолютная OpenBSD: UNIX для практических параноиков. ISBN  9781593274764. Получено 2014-03-22.
  16. ^ "Карта сетевого кода в ядре Linux 2.4.20, технический отчет DataTAG-2004-1, проект FP5 / IST DataTAG" (PDF). datatag.web.cern.ch. Март 2004 г. В архиве (PDF) из оригинала 27 октября 2015 г.. Получено 1 сентября 2015.
  17. ^ «Документация / сеть / ip-sysctl.txt: / proc / sys / net / ipv4 / * Переменные». kernel.org. В архиве из оригинала на 2016-03-05. Получено 2016-02-15.
  18. ^ «RFC 3168 - Добавление явного уведомления о перегрузке (ECN) в IP». ietf.org. Сентябрь 2001 г. В архиве из оригинала от 05.02.2016. Получено 2016-02-15.
  19. ^ "Справочные страницы Linux". man7.org. 2015-12-05. В архиве из оригинала от 16.02.2016. Получено 2016-02-15.
  20. ^ «ECN (явное уведомление о перегрузке) в TCP / IP». В архиве из оригинала от 19.06.2012.
  21. ^ «macOS 10.12 Sierra: обзор Ars Technica». Ars Technica. 20 сентября 2016 г. В архиве из оригинала 26 апреля 2018 г.. Получено 25 апреля 2018.
  22. ^ Inc., Apple. «Сети для современного Интернета - WWDC 2016 - Видео - Apple Developer». Разработчик Apple. В архиве с оригинала 18 апреля 2018 г.. Получено 18 апреля 2018.
  23. ^ Бхоома, Падма (март 2017 г.). «TCP ECN - Опыт включения ECN в Интернете» (PDF). В архиве (PDF) из оригинала на 2018-05-09. Получено 2017-05-03.
  24. ^ Inc., Apple. «Достижения в области сетевых технологий, часть 1 - WWDC 2017 - видеоролики - разработчик Apple». Разработчик Apple. В архиве с оригинала 31 января 2018 г.. Получено 18 апреля 2018.
  25. ^ Хойланд-Йоргенсен, Ток; Тэхт, Дэйв; Мортон, Джонатан (2018). «Кусочек пирога: комплексное решение для управления очередью для домашних шлюзов». arXiv:1804.07617v2 [cs.NI ].
  26. ^ "Импортировать Dummynet AQM версии 0.2.1 (CoDel, FQ-CoDel, PIE и FQ-PIE) во FreeBSD 11". Проект FreeBSD, FreeBSD r300779. Получено 5 августа 2016.
  27. ^ «Дата-центр TCP». В архиве из оригинала от 23.12.2016. Получено 2016-12-21.
  28. ^ «Требования к более точной обратной связи ECN». tools.ietf.org. IETF. 9 марта 2015 года. В архиве с оригинала 19 ноября 2015 г.. Получено 2 мая, 2015.
  29. ^ «RFC 7560: Постановка проблемы и требования для повышения точности обратной связи с явным уведомлением о перегрузке (ECN)». tools.ietf.org. IETF. 26 августа 2015 года. В архиве из оригинала 29 апреля 2016 г.. Получено 12 мая, 2016.

внешняя ссылка