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