RFC 7575 Autonomic Networking: Definitions and Design Goals

Internet Research Task Force (IRTF)                         M. Behringer
Request for Comments: 7575                                   M. Pritikin
Category: Informational                                     S. Bjarnason
ISSN: 2070-1721                                                 A. Clemm
                                                           Cisco Systems
                                                            B. Carpenter
                                                       Univ. of Auckland
                                                                S. Jiang
                                            Huawei Technologies Co., Ltd
                                                            L. Ciavaglia
                                                          Alcatel Lucent
                                                               June 2015

Autonomic Networking: Definitions and Design Goals

Самоуправляющиеся сети — определения и цели разработки

PDF

Аннотация

Самоуправляющиеся системы (сети) были впервые описаны в 2001 г. Основной их целью является самоуправление, включая самонастройку, самовосстановление и самозащиту. Это достигается за счёт автоматической работы с минимальной зависимостью от администрирования людьми или централизованными системами управления. Обычно предполагается распределения функций между элементами сети.

В этом документе определён язык описания и очерчены цели (а также отмечено то, что не является целью) автоматических функций. Высокоуровневая эталонная модель иллюстрирует взаимодействие функциональных элементов в самоуправляемой сети (Autonomic Network или AN). Документ является результатом работы исследовательской группы IRTF Network Management.

Статус документа

Документ не содержит какой-либо спецификации (Internet Standards Track) и публикуется с информационными целями.

Документ является результатом работы IRTF (Internet Research Task Force). IRTF публикует результаты исследований и разработок, связанных с Internet. Эти результаты не всегда пригодны для развёртывания. Данный документ RFC представляет согласованный взгляд исследовательской группы Network Management в составе IRTF. Документы, одобренные для публикации IRSG, не претендуют на статус стандартов Internet (см. раздел 2 в RFC 5741).

Информация о текущем статусе документа, найденных ошибках и способах обратной связи доступна по ссылке http://www.rfc-editor.org/info/rfc7575.

Авторские права

Copyright (c) 2015. Авторские права принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно.

1. Введение в самоуправляющиеся сети

Самоуправляющиеся (автоматические) системы впервые были описаны в манифесте IBM [Kephart] в 2001 году. Фундаментальная концепция включает устранение внешних систем из контура управления и замыкание этого контура в самой автоматической системе с целью обеспечения ей возможностей самоуправления, включая самонастройку, самовосстановление и самозащиту.

Изначально сети IP разрабатывались с похожими свойствами. Сетям IP следовало быть распределенными и обеспечивающими избыточность для устойчивости к отказам в любой части сети. Протоколы маршрутизации, такие как OSPF и IS-IS, имеют свойства самоуправления и их можно считать самоуправляющимися в соответствии с этим документом.

Однако по мере развития сетей IP постоянно возрастающий уровень «интеллекта» элементов сети зачастую не вносился в протоколы в соответствии с упомянутой парадигмой, а реализовался во внешних системах управления конфигурацией. Это сделало элементы сети зависимыми от неких процессов, которые управляют ими под руководством человека или системы управления сетью.

Самоуправляющиеся функции можно определить двумя способами:

  • на уровне узла, когда узлы взаимодействуют между собой образуя контуры обратной связи;

  • на уровне системы, где контуры обратной связи включают также централизованные элементы.

Самоуправление на уровне системы явно или неявно связано с работой многих групп IETF, где рассматривается взаимодействие с контроллерами или системами управления сетью.

В этой работе основное внимание уделено функциям самоуправления на уровне узлов. Рассматриваются интеллектуальные возможности алгоритмов на уровне узла для снижения зависимости от администрирования людьми или централизованными системами управления.

Некоторые реализации сетей получают преимущества от полностью автоматического подхода. Например, это могут быть сети с большим числом сравнительно простых устройств. Однако для большинства развёрнутых сегодня сетей требуется смешанный подход, где часть функций автономна, а другие управляются централизованно. Централизованное управление имеет явные преимущества и выбирается для многих сетевых функций. В этом документе не рассматривается вопрос выбора функций для автономного или централизованного управления. Однако документ должен помочь при выборе подхода для конкретных ситуаций.

Самоуправляющаяся функция не может в каждом случае найти всю требуемую информацию, например, связанные с правилами сведения требуют данных (правил) от человека по самой природе. Там, где требуются данные от той или иной централизованной системы, они предоставляются в абстрактной общесетевой форме.

Самоуправляемые вычисления (Autonomic Computing) в целом и самоуправляющиеся сети в частности много лет служат предметом академического изучения. Имеется много литературы, в том числе несколько полезных обзорных статей (например, [Samaan], [Movahedi], [Dobson]). В этом документе основное внимание уделено концепциям и определениям, которые представляются достаточно зрелыми и способны стать основой для совместимых спецификаций в ближайшем будущем. В частности, такие спецификации должны будут сосуществовать с традиционными методами настройки и управления сетями, а не просто реализовать самоуправляющиеся системы со всеми требуемыми свойствами.

Имеется важное различие между «автоматизированным» и «автоматическим». Автоматизированными называют предопределённые процессы, такие как сценарии. Термин «автоматический» применяется в контексте самоуправления и включает контуры обратной связи между элементами, а также «северный» интерфейс к централизованным элементам (см. определения в следующем параграфе). Обычно автоматизированный процесс работает в данной среде, но при изменении среды его приходится изменять. Самоуправляющийся процесс может адаптироваться к изменению среды.

В этом документе даны определения и указаны цели проектирования для AN в рамках IETF и IRTF. Документ представляет согласованный взгляд исследовательской группы IRTF Network Management (NMRG).

2. Определения

Autonomic — самоуправляющийся, автоматический

Самоуправление (самонастройка, самозащита, самовосстановление, самооптимизация), с возможностью высокоуровневого вмешательства со стороны централизованного элемента через Intent (намерение, см. ниже). Функции самоуправления приспосабливаются к изменяющейся среде.

Automatic — автоматизированный1

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

Intent — намерение, цель

Абстрактная, высокоуровневая политика, используемая для работы сети. Областью действия политики является автоматический домен, такой как сеть предприятия. Намерения не включают конфигурацию или сведения для конкретных узлов (в параграфе 3.2 описано сосуществование Intent с другими парадигмами управления). Политика может включать информацию, относящуюся к узлу с определённой ролью (например, к граничному коммутатору) или выполняющему определённую функцию узлу. Намерения обычно задаёт и предоставляет тот или иной централизованный элемент.

Autonomic Domain — домен самоуправления

Группа (набор) автоматических (самоуправляющихся) узлов с общей целью (Intent).

Autonomic Function — функция самоуправления

Свойство или функция, которое не требует настройки и может получить все требуемые сведения путём самообучения, обнаружения или получения цели (Intent).

Autonomic Service Agent — агент самоуправляемой службы

Агент, реализованный на автоматическом узле и выполняющий автоматическую функцию частично (распределенная функция) или полностью.

Autonomic Node — узел с самоуправлением

Узел, реализующий исключительно автоматические функции. Такой узел не требует (!) настройки конфигурации (отметим, что настройка конфигурации может применяться для переопределения автоматической функции, см. параграф 3.2). Autonomic Node может работать на любом уровне сетевого стека. Примерами являются маршрутизаторы, коммутаторы, ПК, менеджеры вызовов (call manager) и т. п.

Autonomic Network — сеть с самоуправлением

Сеть, содержащая лишь самоуправляемые узлы. Сеть может состоять из одного или нескольких доменов самоуправления.

3. Цели

В этом разделе описаны высокоуровневые цели Autonomic Networking, не зависящие от конкретного решения.

3.1. Самоуправление

Исходная цель проектирования самоуправляющихся систем, описанная в [Kephart] применима и к сетям с самоуправлением (Autonomic Network). Главное целью является самоуправление, которое включает несколько «само» свойств.

  • Самонастройка. Функции не требуют настройки администратором или системой управления. Они сами настраивают себя на основе самообучения, обнаружения и целей (Intent). Обнаружение (Discovery) служит используемым по умолчанию способом получения требуемой для работы информации.

  • Самовосстановление. Автоматические функции адаптируют себя в соответствии с изменением среды и автоматически восстанавливаются при возникновении проблем.

  • Самооптимизация. Самоуправляемые функции автоматически определяют способы оптимизации своего поведения для набора чётко заданных целей.

  • Самозащита. Самоуправляемые функции автоматически защищают себя от возможных атак.

Самоуправляемой можно назвать почти любую сеть, если понятие «само» достаточно широко. Например, чётко заданная система программно-определяемых сетей (Software-Defined Networking или SDN), включая контроллеры, может быть описана в целом как самоуправляемая (автоматическая), если контроллер обеспечивает администратору интерфейс, имеющий перечисленные выше свойства (высокий уровень, сеть в целом и т. д.).

В рамках работ IETF и IRTF свойства «само» определяются на уровне узла. Цель проекта заключается в том, чтобы сделать функции узлов самоуправляемыми (минимизировать зависимость от систем управления и контроллеров, а также от участия человека). Самоуправляемым функциям на узле может потребоваться обмен информацией с другими узлами для достижения поставленных целей.

Как отмечено во введении, замкнутый контур управления является важной частью самоуправляющихся систем. Это предполагает диалоги на одном уровне (peer-to-peer) между сторонами, составляющими контур управления. Такой диалог требует двухстороннего согласования между каждой парой или группой партнёров, включённых в контур, поэтому они не могут воспользоваться обычными протоколами «запрос-отклик». Кроме того, для организации замкнутого контура управление не обойтись без процедур обнаружения. Возможно применение многосторонних протоколов, но это ведёт к существенному усложнению.

3.2. Сосуществование с традиционным управлением

В ближайшем будущем узлы и сети с самоуправлением будут скорее исключением, автоматические функции будут определяться поэтапно. Поэтому нужно принимать во внимание сосуществование с другими парадигмами сетевого управления, такими как управление с консоли, SNMP, SDN (с соответствующими API), NETCONF (Network Configuration Protocol) и т. п. Это требует разрешения конфликтов a) принятого по умолчанию автоматического поведения и Intent с b) другими методами. Проблема решается с помощью приоритизации. В общем случае автоматические механизмы определяют поведение на уровне сети, тогда как альтернативные методы обычно работают по узлам. Концепция управления на уровне узла имеет более высокий приоритет по сравнению с другими автоматическими методами. Это соответствует современным примерам автоматических функций, например, в маршрутизации (статический) маршрут имеет преимущество перед алгоритмом маршрутизации. Вкратце можно сказать:

  • низший приоритет — принятое по умолчанию автоматическое поведение:

  • средний приоритет — автоматические намерения (Intent);

  • высший приоритет — концепции управления сетью для конкретного узла, такие как управление с консоли, SNMP, SDN, NETCONF и т. п. (приоритеты этих концепций выходят за рамки документа).

Описанная выше приоритизация ведёт к тому, что действия администратора всегда могут переопределить автоматическое поведение. Это обычное ожидание современных администраторов и поэтому оно сохраняется как принцип проектирования. В критических системах, таких как атомные станции, иногда применяется противоположный подход, где считается что чётко заданный алгоритм надёжней человека, особенно в редких исключительных ситуациях. Однако при возникновении конфликта между переопределениями на конкретном узле и автоматическим поведением следует выдавать предупреждения.

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

3.3. Защита по умолчанию

Всем автоматическим взаимодействиям следует быть защищёнными по умолчанию. Для этого от любого участника домена с самоуправлением требуется способность подтвердить свою принадлежность к домену с использованием доменного отождествления, например, сертификата, выданного удостоверяющим центром домена. Отождествление служить для того, чтобы узлы могли узнать о своих соседях, а также для определения границ домена и криптографической защиты взаимодействий внутри домена. Узлы из чужих доменов могут использовать взаимопроверку отождествлений и защищать взаимодействия, если для них имеется взаимно признаваемая привязка доверия.

Надёжное, криптографически проверяемое отождествление в домене является фундаментом автоматических сетей (Autonomic Networking). Его можно применять для защиты всех коммуникаций без традиционной настройки, например, заранее известных общих ключей. Дополнительную информацию можно найти в документе «Making The Internet Secure By Default» [Behringer].

Автоматические функции должны поддерживать способность адаптировать своё поведение в зависимости от домена или узла, с которым происходит взаимодействие.

3.4. Децентрализация и распределённость

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

В некоторых случаях для современной практики предпочтительней иметь централизованное хранилище информации, например, базу данных о пользователях на сервере проверки подлинности и полномочий, а также учёта (Authentication, Authorization, Accounting или AAA). Автоматической сети следует иметь возможность распределять такие базы данных и по меньшей мере следует предпринимать такие усилия. В зависимости от ситуации распределение может быть простой репликацией или включать более сложные взаимодействия и организацию.

3.5. Упрощение северного интерфейса автоматических узлов

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

Поэтому узлам в Autonomic Network требуется «северный» (northbound) интерфейс. Однако такой интерфейс следует делать как можно более простым и высокоуровневым.

3.6. Абстракции

Администратор или автоматическая система управления взаимодействует с AN на высоком уровне абстракций. Намерение (Intent) определяется на уровне абстракции, который много выше типичных параметров конфигурации. Например, намерением может быть «оптимизация сети по потреблению электроэнергии». Intent недопустимо использовать для передачи низкоуровневых команд или концепций, поскольку они относятся к другому уровню абстракции. Например, администратору не следует раскрывать версию протокола IP, используемого в сети. Со стороны отчётов и обратной связи сеть с самоуправлением абстрагирует информацию и предоставляет сообщения высокого уровня, такие как «связь между узлами x и y не работает» (возможно с указанием конкретного канала, если их несколько).

3.7. Автоматические отчёты.

Хотя сети с самоуправлением минимизируют вовлечение пользователей, они все равно должны обеспечивать пользователям видимость как в традиционных сетях. Однако в AN отчётность следует обеспечивать на уровне сети в целом. Информацию о сети следует собирать и агрегировать в самой сети, предоставляя администратору консолидированный отчёт.

Уровни абстракции, предоставляемые через Intent, должны поддерживаться и для функций отчётов, чтобы пользователи имели представление об эффективности их намерений (Intent). Например, для оценки эффективности сети в части намерения «оптимизировать с точки зрения потребляемой энергии» следует предоставлять агрегированные сведения о числе портов, которые удалось отключить, и соответствующей экономии энергии с соблюдением проверки текущего уровня обслуживания.

Событиям в сети с самоуправлением следует относится к AN в целом, а не к отдельным системам. Например, один и тот же признак отказа не следует сообщать для каждой системе, которая столкнулась с таким отказом, а достаточно указать 1 раз для AN в целом. В конечном итоге сети AN следует поддерживать управления на основе исключений, когда пользователь информируется лишь о событиях, которые действительно требуют его внимания (привлечения). Для этого нужны возможности, позволяющие системам в сети сравнивать информацию и применять конкретные алгоритмы для определения событий, о которых следует сообщать.

3.8. Общая инфраструктура автоматических сетей

В [RFC7576] отмечено, что имеется уже достаточно много автоматических функций. Однако они в большинстве своём независимы и каждая использует свои методы и протоколы для коммуникаций, обнаружения, определения и распространения политики и т. п.

Целью работы группы Autonomic Networking в IETF является не просто создание автоматических функций, но и определение общей инфраструктуры, которую автоматические функции могут использовать. Эта инфраструктура AN может включать общие функции управления и администрирования, обнаружения служб, согласования, распространения намерений, самослежения (мониторинга), диагностики и т. п. Нужен также общий подход к определению и распространению намерений (Intent).

Применительно к описанной ниже эталонной модели всем компонентам вокруг «Агентов автоматических служб» следует быть общими, чтобы агентам не нужно было дублировать задачи.

3.9. Независимость функции и уровня

Автоматические функции могут размещаться на любых уровнях сетевого стека. Например, коммутация L2 сегодня уже сравнительно самоуправляема во многих средах, поскольку большинство коммутаторов можно соединять различными способами и они автоматически образуют простую топологию L2. Функции маршрутизации работают на более высоком уровне и могут быть автоматическими на уровне L3. Даже функции прикладного уровня могут быть автоматическими, например в унифицированных коммуникациях.

Самоуправляемость (автономность) в контексте этой схемы является свойством функции, реализуемой на узле. Автоматические функции можно реализовать на узлах любого типа, например, на коммутаторах, маршрутизаторах, серверах или менеджерах вызовов.

Для автоматических сетей AN требуется общий уровень управления, чтобы автоматические узлы могли взаимодействовать. В обычных сетях IP протокол IP является связующим уровнем, который объединяет все элементы, и автоматические функции в контексте этой схемы также следует реализовать на уровне IP. Это относится к протоколам обнаружения соседей и другим функциям автоматической плоскости управления (Autonomic Control Plane).

3.10. Поддержка полного жизненного цикла

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

Состояние жизненного цикла автоматического узла отражается в модели состояния. Поведение автоматической функции может различаться в разных состояниях развёртывания.

4. Что не относится к целям разработки

В этом разделе отмечены элементы, которые явно не являются целями разработки для автоматических сетей в IETF и IRTF. Они отмечены для предотвращения недопонимания в части общих намерений, часто отмечаемого в опасениях администраторов и архитекторов сетей.

4.1. Исключение операторов

В параграфе 3.1 сказано: «Цель проекта заключается в том, чтобы сделать функции узлов самоуправляемыми (минимизировать зависимость от систем управления и контроллеров, а также от участия человека)». Однако полное исключение операторов не является целью разработки. Проблема, на решение которой нацелены сети с самоуправлением (Autonomic Networking), состоит в подверженной ошибкам и сложно расширяемой модели индивидуальной настройки элементов сети, традиционно выполняемой с помощью команд, но сегодня в основном использующей сценарии и базы данных конфигурации. Это не означает исключения опытных операторов, которые все равно нужны для надзора, управления правилами, диагностики, реагирования на обращения в службу поддержки и т. п. Основной задачей является снижение нагрузки на операторов для выполнения рутинной работы и привлечение их к решению задач более высокого уровня (им следует быть похожими на врачей, а не санитаров).

4.2. Исключение аварийных исправлений

Сколь бы ни были хорошо автоматические механизмы, иногда могут возникать неисправности или иные ситуации, когда эти механизмы не могут работать корректно. В таких случаях требуется вмешательство квалифицированного оператора, позволяющее устранить или обойти проблему. Есть надежда сделать решить проблему с помощью механизмов высокого уровня (адаптация базы правил), но иногда не удаётся обойтись без прямого вмешательства на уровне устройства. Обычно это происходит при аппаратных сбоях, даже если AN может в данный момент обойти отказ. Замену отказавшего оборудования обычно не удаётся выполнить автоматически. Однако замену можно отложить, если автоматическая система способна обнаружить отказ и перестроиться для минимизации влияния на работу.

4.3. Исключение центрального управления

Хотя цель включает упрощение северного интерфейса (параграф 3.5), она заключается не в исключении централизованного управления а в обеспечении более высокого уровня абстракции. Высшее руководство может опасаться потери управления автоматической сетью AN. Фактически, вероятность этого не выше, чем в традиционных сетях и автоматическое применение общей политики и правил безопасности может обеспечить даже большую централизацию управления.

5. Эталонная модель самоуправления

Автоматическая сеть AN состоит из автоматических узлов (Autonomic Node), которые взаимодействуют между собой через автоматическую плоскость управления (Autonomic Control Plane), которая обеспечивает отказоустойчивые и защищённые коммуникации. Автоматическая плоскость управления является самоорганизующейся и автоматической.

Автоматический узел содержит различные элементы, такие как автоматические агенты служб, реализующие автоматические функции. На рисунке 1 показана эталонная модель автоматического (самоуправляемого) узла. Элементы такого узла перечислены ниже.

  • Агенты автоматических служб (Autonomic Service Agent) реализуют автоматическое поведение конкретных служб или функций.

  • Самопознание (Self-knowledge) — автоматический узел знает свои свойства и возможности.

  • Изучение (обнаружение) сети (Network Knowledge (Discovery)) может потребоваться автоматическим агентам служб для выполнения таких задач как обнаружение служб.

  • Контуры обратной связи (Feedback Loop) обеспечивают взаимодействие узла с внешними элементами управления.

  • Автоматический пользовательский агент (Autonomic User Agent) предоставляет интерфейс (front-end) для внешних пользователей (администраторы или программы управления), через который можно получать отчёты. и выполнять мониторинг AN.

+------------------------------------------------------------+
|                      +------------+                        |
|                      |  Контуры   |                        |
|                      |обрат. связи|                        |
|                      +------------+                        |
|                            ^                               |
|            Автоматический пользовательский агент           |
|                            V                               |
| +-----------+        +------------+        +------------+  |
| | Само-     |        |   Агенты   |        | Изучение   |  |
| | познание  |<------>| автоматич. |<------>|(обнаружен.)|  |
| |           |        |   служб    |        |   сети     |  |
| +-----------+        +------------+        +------------+  |
|                            ^                     ^         |
|                            |                     |         |
|                            V                     V         |
|------------------------------------------------------------|
|           Автоматическая плоскость управления              |
|------------------------------------------------------------|
|                 Стандартные функции ОС                     |
+------------------------------------------------------------+

Рисунок 1. Эталонная модель для узла с самоуправлением.


На момент завершения этого документа работа над эталонной моделью ещё продолжалась, см. [Reference-Model].

6. Вопросы безопасности

В этом документе приведены определения и цели проектирования автоматических сетей (Autonomic Networking). В рамках разработки решений потребуется полный анализ угроз с учётом возможных атак как внутри сети, так и извне.

7. Литература

[ACP] Behringer, M., Bjarnason, S., BL, B., and T. Eckert, «An Autonomic Control Plane», Work in Progress2, draft-behringer-anima-autonomic-control-plane-02, March 2015.

[Behringer] Behringer, M., Pritikin, M., and S. Bjarnason, «Making The Internet Secure By Default», Work in Progress, draft-behringer-default-secure-00, January 2014.

[BOOTSTRAP] Pritikin, M., Behringer, M., and S. Bjarnason, «Bootstrapping Key Infrastructures», Work in Progress, draft-pritikin-anima-bootstrapping-keyinfra-01, February 2015.

[Dobson] Dobson, S., Denazis, S., Fernandez, A., Gaiti, D., Gelenbe, E., Massacci, F., Nixon, P., Saffre, F., Schmidt, N., and F. Zambonelli, «A survey of autonomic communications», ACM Transactions on Autonomous and Adaptive Systems (TAAS), Volume 1, Issue 2, Pages 223-259, DOI 10.1145/1186778.1186782, December 2006.

[GANA] ETSI, «Autonomic network engineering for the self-managing Future Internet (AFI); Generic Autonomic Network Architecture (An Architectural Reference Model for Autonomic Networking, Cognitive Networking and Self-Management)», ETSI GS AFI 002, April 2013, <http://www.etsi.org/deliver/etsi_gs/AFI/001_099/002/01.01.01_60/gs_afi002v010101p.pdf>.

[Kephart] Kephart, J. and D. Chess, «The Vision of Autonomic Computing», IEEE Computer, vol. 36, no. 1, pp. 41-50, DOI 10.1109/MC.2003.1160055, January 2003.

[Movahedi] Movahedi, Z., Ayari, M., Langar, R., and G. Pujolle, «A Survey of Autonomic Network Architectures and Evaluation Criteria», IEEE Communications Surveys & Tutorials, Volume 14, Issue 2, Pages 464-490, DOI 10.1109/SURV.2011.042711.00078, 2012.

[Reference-Model] Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia, L., and B. Liu, «A Reference Model for Autonomic Networking», Work in Progress3, draft-behringer-anima-reference-model-02, June 2015.

[RFC7576] Jiang, S., Carpenter, B., and M. Behringer, «General Gap Analysis for Autonomic Networking», RFC 7576, DOI 10.17487/RFC7576, June 2015, <http://www.rfc-editor.org/info/rfc7576>.

[Samaan] Samaan, N. and A. Karmouch, «Towards Autonomic Network Management: an Analysis of Current and Future Research Directions», IEEE Communications Surveys and Tutorials, Volume 11, Issue 3, Page(s) 22-36, DOI 10.1109/SURV.2009.090303, 2009.

Благодарности

Большая часть работы по AN выполнена в рамках крупного проекта Cisco Systems, где участвовали (в алфавитном порядке) Ignas Bagdonas, Parag Bhide, Balaji BL, Toerless Eckert, Yves Hertoghs, Bruno Klauser.

Спасибо за вклад в документ Dimitri Papadimitriou, Rene Struik, Kostas Pentikousis, Dave Oran, Diego Lopez Garcia.

Рабочая группа ETSI AFI <http://portal.etsi.org/afi> определила похожую схему для Autonomic Networking в документе «General Autonomic Network Architecture» [GANA]. Многие из концепций данного документа можно сопоставить со схемой GANA, но это выходит за рамки этого документа. Отдельная благодарность Ranganai Chaparadza за комментарии и помощь при создании документа.

Адреса авторов

Michael H. Behringer

Cisco Systems

Building D, 45 Allee des Ormes

Mougins 06250

France

EMail: mbehring@cisco.com

Max Pritikin

Cisco Systems

5330 Airport Blvd

Boulder, CO 80301

United States

EMail: pritikin@cisco.com

Steinthor Bjarnason

Cisco Systems

Mail Stop LYS01/5

Philip Pedersens vei 1

LYSAKER, AKERSHUS 1366

Norway

EMail: sbjarnas@cisco.com

Alexander Clemm

Cisco Systems

170 West Tasman Drive

San Jose, CA 95134-1706

United States

EMail: alex@cisco.com

Brian Carpenter

Department of Computer Science

University of Auckland

PB 92019

Auckland 1142

New Zealand

EMail: brian.e.carpenter@gmail.com

Sheng Jiang

Huawei Technologies Co., Ltd

Q14, Huawei Campus

No.156 Beiqing Road

Hai-Dian District, Beijing 100095

China

EMail: jiangsheng@huawei.com

Laurent Ciavaglia

Alcatel Lucent

Route de Villejust

Nozay 91620

France

EMail: laurent.ciavaglia@alcatel-lucent.com


Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

1В переводе используется принятая в русском языке терминология для автоматических и автоматизированных узлов (систем, элементов). Автоматическая система работает без привлечения человека или внешней системы управления, автоматизированная просто выполняет задание (сценарий), заданный человеком или внешней системой управления. Термин «самоуправляемый» в переводе используется как синоним термина «автоматический» Прим. перев.

2Опубликовано в RFC 8994. Прим. перев.

3Опубликовано в RFC 8993. Прим. перев.

Рубрика: RFC | Оставить комментарий

RFC 7540 Hypertext Transfer Protocol Version 2 (HTTP/2)

Internet Engineering Task Force (IETF)                         M. Belshe
Request for Comments: 7540                                         BitGo
Category: Standards Track                                        R. Peon
ISSN: 2070-1721                                              Google, Inc
                                                         M. Thomson, Ed.
                                                                 Mozilla
                                                                May 2015

Протокол передачи гипертекста версии 2 (HTTP/2)

Hypertext Transfer Protocol Version 2 (HTTP/2)

PDF

Аннотация

Эта спецификация описывает оптимизированное выражение семантики протокола передачи гипертекста (HTTP1), называемого HTTP версии 2 (HTTP/2). HTTP/2 обеспечивает более эффективное использование сетевых ресурсов и снижение воздействия задержек за счет добавления сжатия, а также позволяет организовать множество одновременных обменов через одно соединение. В новой версии также добавлено «выталкивание» представлений с сервера клиенту без запроса.

Данная спецификация дополняет, но не отменяет синтаксис сообщений HTTP/1.1. Существующая семантика HTTP сохранена без изменений.

Статус документа

Документ является проектом стандарт Internet (Internet Standards Track).

Документ является результатом работы IETF2 и представляет согласованный взгляд сообщества IETF. Документ прошел открытое обсуждение и был одобрен для публикации IESG3. Не все одобренные IESG документы претендуют на статус Internet Standard (см. раздел 2 в RFC 5741).

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc7540.

Авторские права

Авторские права (Copyright (c) 2015) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа IETF Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

Протокол передачи гипертекста HTTP чрезвычайно успешен. Однако способы использования нижележащего транспорта в HTTP/1.1 (раздел 6 в [RFC7230]) имеют некоторые характеристики, оказывающие отрицательное влияние на производительность современных приложений.

В частности, HTTP/1.0 разрешает в каждый момент времени только один незавершенный запрос на соединение TCP. В HTTP/1.1 добавлен конвейер для запросов (pipelining), но это лишь частично решает проблему одновременных запросов и продолжает вызывать блокировку (head-of-line). Следовательно, клиенты HTTP/1.0 и HTTP/1.1, которым нужно сделать множество запросов, вынуждены организовывать множественные соединения с сервером, чтобы обеспечить их параллельную обработку и снизить задержку.

Кроме того, поля заголовков HTTP зачастую многословны и содержат повторы, что ведет к бессмысленному росту сетевого трафика, приводящему к быстрому заполнению начального окна насыщения TCP [TCP]. Это может приводить к избыточным задержкам при отправке множества запросов через новое соединение TCP.

HTTP/2 решает эти проблемы, определяя оптимизированное отображение семантики HTTP на нижележащие уровни. В частности, разрешается чередование сообщений с запросами и откликами в одном соединении и применяется более эффективное кодирование полей заголовка HTTP. Кроме того, обеспечивается приоритизация запросов, что позволяет в первую очередь отправить более важные запросы с соответствующим ростом производительности.

Новый протокол более «дружелюбен» к сети за счет использования меньшего числа соединений TCP по сравнению с HTTP/1.x. Это снижает конкуренцию с другими потоками и долгосрочными соединениями, что, в свою очередь, повышает эффективность использования пропускной способности сети.

Наконец, HTTP/2 обеспечивает возможность более эффективной обработки сообщений за счет применения двоичного кадрирования сообщений.

2. Обзор протокола HTTP/2

HTTP/2 обеспечивает оптимизированный транспорт для семантики HTTP. HTTP/2 поддерживает все основные свойства HTTP/1.1, но его целью является повышение эффективности несколькими способами.

Базовым блоком протокола HTTP/2 является кадр (frame, см. параграф 4.1). каждый тип кадров служит для своих целей. Например, кадры HEADERS и DATA служат базой для запросов и откликов HTTP (параграф 8.1), а другие кадры типа SETTINGS, WINDOW_UPDATE и PUSH_PROMISE служат для поддержки иных функций HTTP/2.

Мультиплексирование запросов обеспечивается связыванием каждого обмена HTTP «запрос-отклик» со своим потоком (stream, см. раздел 5). Потоки в значительной мере не зависимы один от другого, поэтому блокировка или приостановка того или иного запроса или отклика не препятствует работе других потоков.

Управление потоком и приоритизация обеспечивают возможность эффективного использования мультиплексируемых потоков. Управление потоком (параграф 5.2) помогает обеспечить передачу только данных, которые могут быть использованы получателем. Приоритизация (параграф 5.3) обеспечивает возможность направить ограниченные ресурсы сначала на более важные потоки.

HTTP/2 добавляет новый режим взаимодействия, в котором сервер может «выталкивать» (push) отклики для клиента (параграф 8.2). Выталкивание позволяет серверу по своему усмотрению передать данные, которые сервер считает требующимися для клиента, что требует некого компромисса между загрузкой сети и снижением задержки. Сервер делает это, синтезируя запрос, который он передает, как кадр PUSH_PROMISE. После этого сервер имеет возможность отправить отклик на синтезированный запрос в отдельном потоке.

Поскольку используемые в соединении поля заголовков HTTP могут включать большой объем избыточных данных, содержащие эти поля кадры сжимаются (параграф 4.3). В общем случае это очень полезно для запросов, поскольку позволяет сжать многочисленные запросы в один пакет.

2.1. Организация документа

Спецификация HTTP/2 разделена на 4 части:

  • начало работы HTTP/2 (раздел 3) — инициирование соединений HTTP/2;

  • уровни кадров (раздел 4) и потоков (раздел 5), описывающие структуру кадров HTTP/2 и формирование из них мультиплексируемых потоков;

  • определения кадров (раздел 6) и ошибок (раздел 7) подробно описывают типы кадров и ошибок, применяемые в HTTP/2;

  • отображения HTTP (раздел 8) и дополнительные требования (раздел 9) описывают выражение семантики HTTP с использованием кадров и потоков.

Хотя часть концепций кадров и потоков отделена от HTTP, данная спецификация не определяет полностью базовый уровень кадров. Уровни кадров и потоков адаптированы к потребностям протокола HTTP и выталкивания данных с серверов.

2.2. Соглашения и термины

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с RFC 2119 [RFC2119].

Все числовые значения используют сетевой порядок байтов и предполагаются беззнаковыми, пока явно не указано иное. Литералы приводятся в десятичном или шестнадцатеричном формате. Шестнадцатеричные значения указываются префиксом 0x.

Ниже приведены определения основных терминов, используемых в документе.

client — клиент

Конечная точка, выступающая инициатором соединения HTTP/2. Клиенты передают запросы HTTP и получают отклики HTTP.

connection — соединение

Соединение транспортного уровня между двумя конечными точками.

connection error — ошибка соединения

Ошибка, воздействующая на соединение HTTP/2 в целом.

endpoint — конечная точка

Клиент или сервер в данном соединении.

frame — кадр

Наименьший коммуникационный блок в соединении HTTP/2, состоящий из заголовка и последовательности октетов переменного размера в зависимости от типа кадра.

peer партнер

Конечная точка. При обсуждении конкретной конечной точки термин «партнер» используется для конечной точки на другой стороне соединения.

receiver — получатель

Конечная точка, получающая кадры.

sender — отправитель

Конечная точка, передающая кадры.

server — сервер

Конечная точка, воспринимающая соединение HTTP/2. Сервер получает запросы HTTP и передает отклики HTTP.

stream — поток

Двухсторонний поток кадров в соединении HTTP/2.

stream error — ошибка потока

Ошибка отдельного потока HTTP/2.

Термины gateway (шлюз), intermediary (посредник), proxy (прокси) и tunnel (туннель) определены в параграфе 2.3 [RFC7230]. Посредники в разные моменты могут выступать как клиент или как сервер.

Термин payload body (тело данных) определен в параграфе 3.3 [RFC7230].

3. Начало работы HTTP/2

Соединение HTTP/2 представляет собой протокол прикладного уровня, работающий через соединение TCP ([TCP]). Клиент является инициатором соединения TCP.

HTTP/2 использует те же схемы http и https для URI, которые применяются в HTTP/1.1. По умолчанию в HTTP/2 используются те же номера портов — 80 для http URI и 443 для https URI. В результате от реализации, обрабатывающей запрос для URI целевого ресурса типа http://example.org/foo или https://example.com/bar, требуется сначала определить, поддерживает ли восходящий сервер (партнер, с которым клиент желает организовать непосредственное соединение) HTTP/2.

Способы определения поддержки HTTP/2 различаются для http и https URI. Обнаружение поддержки для http URI описано в параграфе 3.2, для https URI — в параграфе 3.3.

3.1. Идентификация версии HTTP/2

Определенный в этом документе протокол имеет два идентификатора.

  • Строка h2 указывает протокол, где HTTP/2 использует защиту транспортного уровня (TLS4) [TLS12]. Этот идентификатор применяется в поле согласования TLS прикладного уровня (ALPN5) [TLS-ALPN] и в любом другом месте, где указывается HTTP/2 «поверх» TLS.

    Строка h2 включается в идентификатор протокола ALPN в форме последовательности из 2 октетов 0x68, 0x32.

  • Строка h2c указывает протокол, где HTTP/2 работает на основе открытого TCP. Этот идентификатор применяется в поле заголовка HTTP/1.1 Upgrade и в любых других местах, где указывается HTTP/2 на базе TCP.

    Строка h2c зарезервирована из пространства ALPN, на протокол не использует TLS.

Согласование h2 или h2c предполагает использование транспорта, защиты, кадрирования и семантики сообщений, описанных в этом документе.

3.2. Начало работы HTTP/2 для http URI

Клиент, делающий запрос для http URI, не зная о поддержке HTTP/2 на следующем интервале, использует механизм HTTP Upgrade (параграф 6.7 d [RFC7230]). Это выполняется путем отправки запроса HTTP/1.1, включающего поле заголовка Upgrade с маркером h2c. Такой запрос HTTP/1.1 должен включать в точности одно поле заголовка HTTP2-Settings (параграф 3.2.1) .

Например,

     GET / HTTP/1.1
     Host: server.example.com
     Connection: Upgrade, HTTP2-Settings
     Upgrade: h2c
     HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

Запросы, содержащие информационное тело, должны быть переданы целиком до того, как клиент сможет передавать кадры HTTP/2. Это означает, что большой запрос может заблокировать соединение до тех пор, пока он не будет передан полностью.

Если важна одновременная передача начального и последующих запросов, можно использовать запрос OPTIONS для перехода на HTTP/2 за счет задержки в один период кругового обхода.

Не поддерживающий HTTP/2 сервер может передать в ответ на запрос отклик без поля Upgrade в заголовке.

     HTTP/1.1 200 OK
     Content-Length: 243
     Content-Type: text/html
     ...

Сервер должен игнорировать маркер h2 в поле заголовка Upgrade. Присутствие маркера h2 предполагает работу HTTP/2 через TLS и для этого случая согласование происходит иначе (см. параграф 3.3).

Сервер, поддерживающий HTTP/2, воспринимает Upgrade с откликом 101 (переключение протокола). После пустой строки, завершающей отклик 101, сервер может начать передачу кадров HTTP/2. Эти кадры должны включать отклик на запрос, вызвавший переключение протокола (Upgrade).

Например,

     HTTP/1.1 101 Switching Protocols
     Connection: Upgrade
     Upgrade: h2c

     [ HTTP/2 connection ...

Первым кадром HTTP/2 от сервера должен быть серверный префикс соединения (параграф 3.5), состоящий из кадра SETTINGS (параграф 6.5). При получении отклика 101 клиент должен передать префикс соединения (параграф 3.5), включающий кадр SETTINGS.

Запросу HTTP/1.1, переданному до Upgrade, присваивается идентификатор потока 1 (параграф 5.1.1) с принятыми по умолчанию значениями (параграф 5.3.5). Поток 1 является неявно «полузакрытым» соединением от клиента к серверу (параграф 5.1), поскольку запрос завершается, как HTTP/1.1. После начала работы соединения HTTP/2 поток 1 используется для отклика.

3.2.1. Поле заголовка HTTP2-Settings

Запросы для перехода от HTTP/1.1 к HTTP/2 (обновления) должны включать в точности одно поле заголовка HTTP2-Settings. Это поле зависит от контекста и включает параметры, управляющие соединением HTTP/2 в предположении, что сервер примет запрос на переход.

     HTTP2-Settings    = token68

Серверу недопустимо переводить соединение на HTTP/2, если данное поле отсутствует в заголовке или задано в нескольких экземплярах. Серверам недопустимо передавать это поле в заголовке.

Содержимое поля заголовка HTTP2-Settings — это информационные элементы (payload) кадра SETTINGS (параграф 6.5), представленные в форме строки base64url (т. е., URL и безопасное для имен файлов представление Base64, описанное в разделе 5 [RFC4648] без трейлерных символов =). Создание ABNF [RFC5234] для token68 определено в параграфе 2.1 [RFC7235].

Поскольку обновление предназначено лишь для следующего незамедлительно соединения, передающий поле HTTP2-Settings клиент должен также передать HTTP2-Settings в качестве опции соединения в поле заголовка Connection для предотвращения пересылки (см. параграф 6.1 в [RFC7230]).

Сервер декодирует и интерпретирует эти значения, как и остальные значения в кадре SETTINGS. Явное подтверждение этих установок не требуется (параграф 6.5.3), поскольку отклик 101 служит неявным подтверждением. Предоставление этих значений в запросе Upgrade дает пользователю возможность обеспечить параметры до получения от сервера каких-либо кадров.

3.3. Начало работы HTTP/2 для https URI

Клиент, делающий запрос для https URI, использует TLS [TLS12] с расширением ALPN6 [TLS-ALPN].

В HTTP/2 на основе TLS используется идентификатор протокола h2. Идентификатор h2c недопустимо передавать от клиентов или выбирать на сервере — этот идентификатор описывает протокол, не использующий TLS.

После завершения согласования TLS клиент и сервер должны передать префикс соединения (параграф 3.5).

3.4. Начало работы с заранее известным HTTP/2

Клиент может получить информацию о поддержке конкретным сервером HTTP/2 иными способами. Например, в [ALT-SVC] описан механизм анонсирования такой поддержки.

Клиент должен отправить префикс соединения (параграф 3.5) и сразу после этого может передавать такому серверу кадры HTTP/2. Сервер может идентифицировать такие соединения по полученным префиксам. Это оказывает влияние лишь на организацию соединений HTTP/2 через открытые (не шифрованные) соединения TCP, а реализации, поддерживающие HTTP/2 через TLS должны использовать согласование протокола в TLS [TLS-ALPN].

Аналогично, сервер должен передать префикс соединения (параграф 3.5).

Без дополнительной информации известная заранее поддержка сервером HTTP/2 вовсе не означает, что он будет поддерживать такие соединения и впредь. Например, конфигурация сервера может измениться, на разных экземплярах кластеризованного сервера конфигурации могут отличаться, могут также измениться условия в сети.

3.5. Префикс соединения HTTP/2

В HTTP/2 от каждой из оконечных точек требуется отправить префикс соединения в качестве финального подтверждения использования протокола для организации начальных установок соединения HTTP/2. Клиент и сервер передают разные префиксы соединения.

Клиентский префикс начинается с последовательности из 24 октетов с шестнадцатеричным представлением

     0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a

Таким образом, префикс соединения начинается со строки «PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n7». За этой последовательностью должен быть передан кадр SETTINGS (параграф 6.5), который может быть пустым. Клиент передает свой префикс соединения непосредственно по получении отклика 101 (Switching Protocols), указывающего успешную смену протокола, или в качестве первых октетов данных приложения в соединении TLS. Если соединение HTTP/2 начинается до получения информации о поддержке сервером этого протокола, клиентский префикс соединения передается сразу после организации соединения.

Примечание. Клиентский префикс соединения выбран так, что большая часть серверов HTTP/1.1 и HTTP/1.0, а также посредников не будет пытаться обработать последующие кадры. Однако это не решает вопросов, поднятых в [TALKING].

Серверный префикс соединения состоит из (возможно пустого) кадра SETTINGS (параграф 6.5), который должен быть первым кадром от сервера в соединении HTTP/2.

Кадры SETTINGS, полученные от партнера, как часть префикса соединения, должны подтверждаться (см. параграф 6.5.3) после отправки префикса соединения.

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

Клиенты и серверы должны трактовать неприемлемый префикс соединения, как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR. В этом случае кадр GOAWAY (параграф 6.8) может быть опущен, поскольку неприемлемый префикс показывает, что партнер не использует HTTP/2.

4. Кадры HTTP

После того, как соединение HTTP/2 организовано, его оконечные точки начинают обмен кадрами.

4.1. Формат кадра

Все кадры начинаются с фиксированного 9-октетного заголовка, за которым следуют информационные поля переменного размера.

+-----------------------------------------------+
|                 Length (24)                   |
+---------------+---------------+---------------+
|   Type (8)    |   Flags (8)   |
+-+-------------+---------------+-------------------------------+
|R|                 Stream Identifier (31)                      |
+=+=============================================================+
|                   Frame Payload (0...)                      ...
+---------------------------------------------------------------+

Рисунок 1. Схема кадра


Поля фиксированного заголовка определены ниже.

Length

Размер информационных полей кадра (frame payload), выраженный 24-битовым целым числом без знака. Кадры размером более 214 (16384) недопустимо передавать, если получатель не установил большее значение для параметра SETTINGS_MAX_FRAME_SIZE.

9 октетов заголовка кадра не учитываются в поле размера.

Type

8-битовый идентификатор типа кадра, определяющего его формат и значение. Реализации должны игнорировать и отбрасывать любые кадры неизвестного типа.

Flags

8-битовое поле, зарезервированное для логических флагов, определяемых типом кадра.

Семантика флагов указывается типом кадра. Не определенные семантикой соответствующего типа флаги должны игнорироваться, а при передаче для них должно устанавливаться значение 0 (0x0).

R

1-битовое резервное поле. Назначение этого бита не определено, он должен оставаться сброшенным (0x0) при передаче и должен игнорироваться на приемной стороне.

Stream Identifier

Идентификатор потока (см. параграф 5.1.1), указанный 31-битовым целым числом без знака. Значение 0x0 зарезервировано для кадров, связанных с соединением в целом, а не с отдельным потоком.

Структура и содержимое информационных элементов кадра полностью определяется его типом.

4.2. Размер кадра

Размер информационных полей в кадре ограничен анонсированным получателем значением SETTINGS_MAX_FRAME_SIZE, которое может находиться в диапазоне от 214 (16 384) до 224-1 (16 777 215) октетов, включительно.

Все реализации должны обеспечивать возможность приема и минимальной обработки кадров размером до 214 октетов плюс 9-октетный заголовок кадра (параграф 4.1). При описании размера кадров фиксированный заголовок кадра не учитывается.

Примечание. Для некоторых типов кадров, например, PING (параграф 6.7), имеются дополнительные ограничения на размер.

Конечная точка должна передать код ошибки FRAME_SIZE_ERROR, если размер полученного кадра превосходит SETTINGS_MAX_FRAME_SIZE, любой из пределов, заданных типом кадра, или слишком мал, чтобы вместить обязательные для кадра данные. Ошибка размера для кадра, который меняет состояние всего соединения, должна трактоваться, как ошибка соединения (параграф 5.4.1) — это включает все кадры, содержащие блок заголовка (параграф 4.3) (HEADERS, PUSH_PROMISE и CONTINUATION), SETTINGS, а также все кадры с идентификатором потока 0. Конечные точки не обязаны использовать все доступное пространство кадра и применение кадров с размером меньше разрешенного максимума позволяет ускорить реакцию на них. Большие кадры могут вызывать задержки передачи чувствительных к задержкам кадров (типа RST_STREAM, WINDOW_UPDATE или PRIORITY), блокировка которых может негативно влиять на производительность.

4.3. Сжатие и декомпрессия заголовка

Как и в HTTP/1, поле заголовка HTTP/представляет собой имя и одно или несколько связанных с ним значений. Поля заголовков используются в сообщениях с запросами и откликами HTTP, а также в операциях выталкивания (push) на серверах (см. параграф 8.2).

Список заголовка может включать множество полей или не включать ни одного. При передаче через соединение список преобразуется (serialize) в блок заголовка с использованием сжатия заголовков HTTP [COMPRESSION]. Последовательный блок заголовка затем может быть разделен на множество последовательностей октетов, называемых фрагментами блока заголовка, которые передаются в информационных блоках (payload) кадров HEADERS (параграф 6.2), PUSH_PROMISE (параграф 6.6) или CONTINUATION (параграф 6.10).

Для поля заголовка Cookie [COOKIE] используется особая трактовка с помощью отображения HTTP (см. параграф 8.1.2.5).

Принимающая сторона восстанавливает блок заголовка из фрагментов и выполняет декомпрессию для восстановления списка заголовка.

Полный блок заголовка может использоваться в одном из двух вариантов:

  • один кадр HEADERS или PUSH_PROMISE с установленным флагом END_HEADERS;

  • кадр HEADERS или PUSH_PROMISE со сброшенным флагом END_HEADERS и одним или множеством кадров CONTINUATION, из которых в последнем установлен флаг END_HEADERS.

Сжатие заголовка выполняется с учетом состояния. Для соединения в целом используется один контекст сжатия и один контекст декомпрессии. Ошибки при декодировании блока заголовка должны трактоваться, как ошибки соединения (параграф 5.4.1) типа COMPRESSION_ERROR.

Каждый блок заголовка обрабатывается, как дискретный элемент. Блоки заголовков должны передаваться в виде непрерывной последовательности кадров без чередования с кадрами других типов или из других потоков. Последний кадр в последовательности HEADERS или CONTINUATION имеет установленный флаг END_HEADERS. Последний кадр в последовательности PUSH_PROMISE или CONTINUATION имеет установленный флаг END_HEADERS. Это обеспечивает логическую эквивалентность блока заголовка одному кадру.

Фрагменты блока заголовка могут передаваться только в кадрах HEADERS, PUSH_PROMISE или CONTINUATION, поскольку эти кадры переносят данные, которые могут изменять контекст сжатия на приемной стороне. Конечной точке, принимающей кадры HEADERS, PUSH_PROMISE или CONTINUATION требуется собрать блоки заголовков и выполнить декомпрессию даже если кадры будут отброшены. Получатель должен разорвать соединение с возвратом ошибки (параграф 5.4.1) типа COMPRESSION_ERROR, если он не смог выполнить декомпрессию блока заголовка.

5. Потоки и мультиплексирование

«Поток» представляет собой независимую, двунаправленную последовательность кадров, передаваемых между клиентом и сервером через соединение HTTP/2. Потоки имеют несколько важных характеристик:

  • в одном соединении HTTP/2 может быть открыто множество одновременных потоков и любая из конечных точек может чередовать кадры разных потоков;

  • потоки могут устанавливаться и применяться в одностороннем порядке или совместно использоваться клиентом и сервером;

  • любая из конечных точек может закрыть поток;

  • порядок передачи кадров в потоке имеет значение и получатель обрабатывает кадры в порядке их приема; в частности, кадры HEADERS и DATA значимы в семантическом смысле;

  • потоки обозначаются целочисленными идентификаторами, которые выделяются создавшей поток конечной точкой.

5.1. Состояния потока

Жизненный цикл потока показан на рисунке 2.

                         +--------+
                 send PP |        | recv PP
                ,--------|  idle  |--------.
               /         |        |         \
              v          +--------+          v
       +----------+          |           +----------+
       |          |          | send H /  |          |
,------| reserved |          | recv H    | reserved |------.
|      | (local)  |          |           | (remote) |      |
|      +----------+          v           +----------+      |
|          |             +--------+             |          |
|          |     recv ES |        | send ES     |          |
|   send H |     ,-------|  open  |-------.     | recv H   |
|          |    /        |        |        \    |          |
|          v   v         +--------+         v   v          |
|      +----------+          |           +----------+      |
|      |   half   |          |           |   half   |      |
|      |  closed  |          | send R /  |  closed  |      |
|      | (remote) |          | recv R    | (local)  |      |
|      +----------+          |           +----------+      |
|           |                |                 |           |
|           | send ES /      |       recv ES / |           |
|           | send R /       v        send R / |           |
|           | recv R     +--------+   recv R   |           |
| send R /  `----------->|        |<-----------'  send R / |
| recv R                 | closed |               recv R   |
`----------------------->|        |<----------------------'
                         +--------+

   send:   конечная точка передает этот кадр
   recv:   конечная точка принимает этот кадр

   H:  кадр HEADERS (с подразумеваемыми CONTINUATION)
   PP: кадр PUSH_PROMISE (с подразумеваемыми CONTINUATION)
   ES: флаг END_STREAM 
   R:  кадр RST_STREAM

Рисунок 2. Состояния потока


На рисунке показаны переходы состояний потока, а также кадры и флаги, воздействующие только на эти переходы. В этом смысле кадры CONTINUATION не оказывают влияния на смену состояний — эффективно они являются частью кадра HEADERS или PUSH_PROMISE, за которым данный кадр следует.

В плане смены состояний потоков флаг END_STREAM обрабатывается как отдельное от переносящего этот флаг кадра событие — кадр HEADERS с установленным флагом END_STREAM может вызвать две смены состояния.

Каждая из конечных точек имеет свое представление о состоянии потока и эти представления могут различаться, когда часть кадров еще находится в пути. Конечные точки не координируют создание потоков и каждая из точек создает потоки по своему усмотрению. Негативные последствия рассогласования состояний ограничиваются возможностью получения кадров в течение некоторого времени после «закрытия» потока с помощью RST_STREAM.

Состояния потоков описаны ниже.

idle — бездействие

Все потоки начинаются в состоянии idle.

Ниже перечислены переходы, которые приемлемы из этого состояния.

  • Отправка или получение кадра HEADERS вызывает переход потока в состояние open. Идентификатор потока выбирается в соответствии с параграфом 5.1.1. Этот же кадр HEADERS может вызвать незамедлительный переход потока в состояние half-closed.
  • Отправка кадра PUSH_PROMISE в другой поток резервирует бездействующий поток для использования в будущем. Состояние потока меняется на reserved (local).
  • Получение кадра PUSH_PROMISE из другого потока резервирует бездействующий поток для использования в будущем. Состояние потока меняется на reserved (remote).
  • Отметим, что кадр PUSH_PROMISE не передается через бездействующий поток, но указывает вновь резервируемый поток в поле Promised Stream ID.

Прием кадра, отличного от HEADERS или PRIORITY, через поток в состоянии должна трактоваться, как ошибка соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

reserved (local) — локально зарезервирован

Поток в состоянии reserved (local) — этот поток, который был зарезервирован отправкой кадра PUSH_PROMISE. Кадр PUSH_PROMISE резервирует бездействующий (idle) поток, путем связывания с открытым потоком, который был инициирован удаленным партнером (см. параграф 8.2).

Из этого состояния возможны только указанные ниже переходы.

  • Конечная точка передает кадр HEADERS который переводит поток в состояние half-closed (remote).
  • Любая из конечных точек может передать кадр RST_STREAM, переводящий поток в состояние closed с отменой имеющегося резервирования.

В этом состоянии конечной точке недопустимо передавать какие-либо кадры, за исключением HEADERS, RST_STREAM или PRIORITY.

В этом состоянии может быть принят кадр PRIORITY или WINDOW_UPDATE. Получение кадра любого типа, кроме RST_STREAM, PRIORITY или WINDOW_UPDATE, в этом состоянии должно трактоваться, как ошибка соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

reserved (remote) — зарезервирован удаленной стороной

Поток в состоянии reserved (remote) — этот поток, который был зарезервирован удаленным партнером.

Из этого состояния возможны только указанные ниже переходы.

  • Получение кадра HEADERS вызывает переход потока в состояние half-closed (local).
  • Любая из оконечных точек может передать кадр RST_STREAM, который переводит поток в состояние closed, отменяя резервирование.

Оконечная точка в этом состоянии может передать кадр PRIORITY для повторной приоритизации резервного потока. В этом состоянии для конечных точек недопустимо передавать какие-либо кадры, за исключением RST_STREAM, WINDOW_UPDATE или PRIORITY.

Получение кадра любого типа, кроме HEADERS, RST_STREAM или PRIORITY, в этом состоянии должно трактоваться, как ошибка соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

open — открыт

Поток в открытом состоянии может использоваться обоими партнерами для передачи кадров любого типа. В этом состоянии передающие партнеры наблюдают за анонсируемыми другой стороной ограничениями, относящимися к управлению потоками данных на уровне потока в целом (параграф 5.2).

Из этого состояния любая из конечных точек может передать кадр с установленным флагом END_STREAM, который вызывает переход потока в одно из полузакрытых (half-closed) состояний. Конечная точка, передавшая флаг END_STREAM вызывает переход потока в состояние half-closed (local), а принявшая флаг END_STREAM — в состояние half-closed (remote).

Любая из конечных точек может передать из этого состояния кадр RST_STREAM, вызывающий незамедлительный переход потока в состояние closed.

half-closed (local) — полузакрыт локальной стороной

Поток в состоянии half-closed (local) не может быть использован для передачи каких-либо кадров за исключением WINDOW_UPDATE, PRIORITY и RST_STREAM.

Поток переходит из состояния half-closed (local) в закрытое (closed) при получении кадра с установленным флагом END_STREAM или при отправке любым из партнеров кадра RST_STREAM.

Конечная точка может получать через находящийся в этом состоянии поток кадры любого типа. Требуется обеспечение «кредита» управления потоком данных с помощью кадров WINDOW_UPDATE для продолжения приема кадров с управлением потоком данных. В этом состоянии получатель может игнорировать кадры WINDOW_UPDATE, которые могут прийти за короткое время после отправки кадра с установленным флагом END_STREAM.

Кадры PRIORITY, полученные в этом состоянии, служат для повторной приоритизации потоков, зависящих от указанного потока.

half-closed (remote) — полузакрыт удаленной стороной

Поток в состоянии half-closed (remote) больше не может использоваться партнером для передачи кадров. В этом состоянии конечная точка больше не обязана поддерживать окно (получателя) управления потоком данных.

Если конечная точка получает какие-либо кадры, отличные от WINDOW_UPDATE, PRIORITY и RST_STREAM, для потока в этом состоянии, она должна возвращать ошибку потока (параграф 5.4.2) типа STREAM_CLOSED.

Поток в состоянии half-closed (remote) может использоваться конечной точкой для передачи кадров любого типа и конечная точка будет продолжать наблюдение ограничений, связанных у управлением потоком данных на уровне потока в целом (параграф 5.2).

Поток может перейти из состояния half-closed (remote) в закрытое состояние путем передачи кадра с флагом END_STREAM или передачи любой из сторон кадра RST_STREAM.

closed — закрыт

Состояние closed является завершающим для потока.

Конечной точке недопустимо передавать в закрытый поток какие-либо кадры, за исключением PRIORITY. Конечная точка, получившая отличный от PRIORITY после приема RST_STREAM, должна трактовать его, как ошибку потока (параграф 5.4.2) типа STREAM_CLOSED. Аналогично, конечная точка, получившая любой кадр после приема кадра с флагом END_STREAM, должна трактовать это, как ошибку соединения (параграф 5.4.1) типа STREAM_CLOSED, если кадр не разрешен в соответствии с приведенным ниже описанием.

Кадры WINDOW_UPDATE или RST_STREAM могут приниматься в этом состоянии в течение короткого периода после отправки кадра DATA или HEADERS с флагом END_STREAM. Пока удаленный партнер не получит и не обработает RST_STREAM или кадр с флагом END_STREAM, передача этих типов кадров возможна. Конечные точки должны игнорировать кадры WINDOW_UPDATE и RST_STREAM, принятые в этом состоянии, хотя они могут выбрать трактовку кадров, принятых по истечении достаточно продолжительного времени после отправки END_STREAM, как ошибок соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадры PRIORITY могут передаваться через закрытые потоки для приоритизации потоков, которые зависят от закрытого. Конечным точкам следует обрабатывать кадры PRIORITY, хотя они могут игнорировать их, если поток был удален из дерева зависимостей (см. параграф 5.3.4).

Если это состояние достигнуто в результате передачи кадра RST_STREAM, может оказаться, что получивший такой кадр партнер уже передал или поместил в очередь на передачу кадры для закрываемого потока. Конечная точка должна игнорировать кадры, которые она получает через закрываемые потоки после отправки кадра RST_STREAM. Конечная точка может ограничить период, в течение которого она будет такие кадры, а потом начнет трактовать их, как ошибки.

Кадры с управлением потоком данных (т. е., DATA), принятые после отправки RST_STREAM, учитываются в окне управления потоком данных соединения. Эти кадры могут игнорироваться, но, поскольку они были переданы до получения их отправителем кадра RST_STREAM, отправитель будет учитывать их в окне управления потоком данных.

Конечная точка может получить кадр PUSH_PROMISE после отправки ею RST_STREAM. Кадр PUSH_PROMISE вызывает переход потока в состояние reserved, даже если связанный с ним поток сброшен. Следовательно, для закрытия нежелательного потока требуется RST_STREAM.

Если в этом документе не содержится более конкретных указаний, реализациям следует трактовать получение кадра, не разрешенного явно в описании состояния, как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR. Отметим, что кадры PRIORITY могут передаваться и приниматься в любом состоянии потока. Кадры неизвестных типов игнорируются.

Пример смены состояния для обмена запрос-отклик HTTP приведены в параграфе 8.1, примеры смены состояний для выталкивания на сервере (server push) — в параграфах 8.2.1 и 8.2.2.

5.1.1. Идентификаторы потоков

Для идентификации потоков используются целые числа без знака размером 31 бит. Потоки, инициируемые клиентами, должны иметь нечетные идентификаторы, а потоки, инициируемые серверами, — четные. Идентификатор с нулевым значением (0x0) служит для сообщений управления соединением и не может применяться для организации нового потока.

На запросы HTTP/1.1, обновленные до HTTP/2 (см. параграф 3.2), отвечают с идентификатором потока 1 (0x1). По завершении процесса обновления поток 0x1 переходит в состояние half-closed (local) для клиента. Следовательно, идентификатор 0x1 не может быть выбран для нового потока клиентом, который обновляется с HTTP/1.1.

Идентификатор вновь созданного потока должен быть численно больше идентификаторов всех потоков, которые инициирующая точка открыла или зарезервировала. Это относится к потокам, открываемым с помощью кадров HEADERS и резервируемым с помощью PUSH_PROMISE. Конечная точка, получившая неожиданный идентификатор потока, должна ответить на него сообщением об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Первое использование идентификатора нового потока неявно закрывает все бездействующие (состояние idle) потоки, которые были инициированы этим партнером и имеют меньшие значения идентификаторов. Например, если клиент передает кадр HEADERS в поток 7 без передачи кадров в поток 5, то поток 5 переводится в состояние closed при отправке или получении первого кадра для потока 7.

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

5.1.2. Одновременные потоки

Партнер может ограничить число одновременно активных потоков, используя параметр SETTINGS_MAX_CONCURRENT_STREAMS (см. параграф 6.5.2) в кадре SETTINGS. Максимальное число одновременных потоков задается для каждой конечной точки и применяется только к партнеру, получившему эти настройки. Т. е., клиент определяет максимальное число одновременных потоков, которые может инициировать сервер, а серверы задают максимальное число одновременных потоков, которые может инициировать клиент.

Потоки в состоянии open или любом из полузакрытых (half-closed) состояний учитываются в числе разрешенных одновременных потоков. Потоки в любом из этих трех состояний учитываются при контроле предела, заданного параметром SETTINGS_MAX_CONCURRENT_STREAMS. Потоки в любом из резервных (reserved) состояний не учитываются в числе одновременных.

Конечной точке недопустимо превышать заданный ее партнером предел числа потоков. Конечная точка, получившая кадр HEADERS, который вызывает превышение анонсированного предела, должна трактовать это как ошибку потока (параграф 5.4.2) типа PROTOCOL_ERROR или REFUSED_STREAM. Выбор типа определяется желанием конечной точки разрешать автоматические повторы (см. параграф 8.1.4).

Конечная точка, желающая снизить SETTINGS_MAX_CONCURRENT_STREAMS до значения меньше текущего числа открытых потоков может закрыть потоки, выходящие за пределы нового значения, или сохранять их до завершения.

5.2. Управление потоком

Использование потоков для мультиплексирования порождает конфликты с использованием соединений TCP, приводящие к блокировке потоков. Схема управления потоком данных обеспечивает отсутствие деструктивного воздействия одного потока на другой в рамках одного соединения. Управление потоком данных применяется как для отдельных потоков, так и для соединения в целом.

HTTP/2 обеспечивает управление потоком данных на основе кадров WINDOW_UPDATE (параграф 6.9).

5.2.1. Принципы управления потоком данных

Управление потоком данных в потоках HTTP/2 имеет целью обеспечить возможность применения множества разных алгоритмов управления потоком данных без изменения протокола. Характеристики управления потоком данных в HTTP/2 перечислены ниже.

  1. Управление потоком данных относится к конкретному соединению. Оба типа управления потоком реализуются между конечными точками одного интервала пересылки (hop), а не сквозного пути.

  2. Управление потоком данных основано на кадрах WINDOW_UPDATE. Получатели анонсируют число октетов, которые они готовы принимать в потоке и соединении в целом. Эта схема является кредитной (credit-based).

  3. Управление потоком данных сопряжено с общим управлением, обеспечиваемым получателем. Получатель может выбрать любой размер окна для каждого потока и соединения в целом. Отправитель должен соблюдать приделы управления потоком данных, заданные получателем. Клиенты, серверы и промежуточные узлы независимо анонсируют свое окно управления потоком данных как получатели и принимают ограничения партнера, выступая в качестве отправителей.

  4. Начальное значение размера окна управления потоком данных составляет 65 535 октетов как для нового потока, так и для соединения в целом.

  5. Тип кадра определяет применение к нему управления потоком данных. Из описанных в документе типов кадров управление потоком применяется только к кадрам DATA, а остальные типы кадров не учитываются в окне управления потоком данных. Это предотвращает блокировку важных кадров управления системой контроля потока данных.

  6. Управление потоком данных не может быть отключено.

  7. HTTP/2 определяет лишь формат и семантику кадров WINDOW_UPDATE (параграф 6.9). Этот документ не задает условий, при которых получатель передает такие кадры или отправляемые в них значения, и не указывает, как отправитель выбирает пакеты для передачи. Реализации могут выбирать любые алгоритмы, соответствующие их потребностям.

Реализации также отвечают за управление передачей запросов и откликов на основе их приоритета, а также предотвращение блокировки head-of-line для запросов и управление созданием новых потоков. Алгоритмы, выбранные для решения этих задач, могут взаимодействовать с алгоритмом управления потоком данных.

5.2.2. Допустимое использование управления потоком данных

Управление потоком данных определено для защиты конечных точек, работающих в условиях ограниченных ресурсов. Например, посреднику (proxy) требуется разделять память между множеством соединений, которые могут включать медленные нисходящие соединения в комбинации с быстрыми восходящими. Управление потоком данных предназначено для случаев, когда получатель не способен обработать данные в одном потоке, но хочет продолжать обработку данных в другом потоке того же соединения.

Системы, где такая возможность не требуется, могут анонсировать окно управления потоком данных максимального размера (231-1) и поддерживать это окно, предавая кадр WINDOW_UPDATE при получении любых данных. Это эффективно отключает управление потоком данных для этого получателя. А отправитель всегда использует окно управления потоком данные, анонсированное получателем.

Системы с ограниченными ресурсами (например, памятью) могут реализовать управление потоком данных для ограничения объема памяти, которым может воспользоваться партнер. Однако следует отметить, что это может приводить к неоптимальному использованию доступных ресурсов сети, если управление потоком данных включено без информации о произведении «пропускная способность — задержка» (см. [RFC7323]).

Даже при наличии полной информации о произведении «пропускная способность — задержка» реализация управления потоком данных может сталкиваться с трудностями. При использовании управления потоком данных получатель должен своевременно считывать содержимое приемных буферов TCP. Невыполнение этого требования может порождать ситуации, когда критически важные кадры типа WINDOW_UPDATE не будут прочитаны и не подействуют.

5.3. Приоритет потока

Клиент может задать приоритет для нового потока, включив соответствующую информацию в кадр HEADERS (параграф 6.2), открывающий поток. В любой другой момент для смены приоритета потока может использоваться кадр PRIORITY (параграф 6.3).

Целью приоритизации является обеспечение конечным точкам возможности указать партнеру свои предпочтения для выделения им ресурсов при управлении одновременными потоками. Наиболее важна возможность использования приоритета для выбора потоков при передаче кадров в случаях наличия ограничений.

Потоки можно приоритизировать путем их маркировки в зависимости от завершения других потоков (параграф 5.3.1). Для каждой зависимости выделяется относительный «вес» — число, которое используется для определения относительной доли доступных ресурсов, выделяемых потокам, которые зависят от одного и того же потока.

Явно заданные приоритеты для потоков служит входными данными для процесса приоритизации. Это не гарантирует какого-либо определенного порядка обработки или передачи для данного потока по сравнению с другими потоками. Конечная точка не может вынудить партнера обрабатывать одновременные потоки в конкретном порядке на основе приоритета. Следовательно, указание приоритета служит лишь рекомендацией.

Данные о приоритизации могут быть опущены и в этом случае будут применяться принятые по умолчанию настройки приоритетов (параграф 5.3.5).

5.3.1. Зависимости потока

Для каждого потока может быть задана явная зависимость от другого потока. Включение зависимости выражает предпочтение выделять указанному потоку ресурсы раньше, нежели зависимому от него потоку.

Поток, который не зависит от какого-либо другого потока, имеет значение зависимости 0x0. Иными словами, несуществующий поток 0 образует корень дерева (зависимостей).

Поток, зависящий от другого потока, является зависимым. Поток, от которого зависит другой поток, называется родительским. Зависимость потока, не включенного в текущее дерево (такой поток находится в состоянии простоя — idle), приводит к тому, что данный поток получает используемый по умолчанию приоритет (параграф 5.3.5).

При определении зависимости от другого потока поток добавляется в качестве новой зависимости родительского потока. Зависимые потоки с общим родителем не упорядочиваются один относительно другого. Например, если потоки B и C зависят от потока A и создается поток D, зависящий от потока A, это приведет к зависимости от A потоков B, C и D в любом порядке.


                     A                 A
                    / \      ==>      /|\
                   B   C             B D C

Рисунок 3. Пример создания зависимости «по умолчанию»

 

Флаг эксклюзивности позволяет добавить новый уровень зависимости. Этот флаг делает поток зависящим лишь от его родителя, делая остальные потоки (зависимости) зависящими от данного исключительного потока. В предыдущем примере создание потока D с исключительной зависимостью от потока A делает поток D родительским для B и C.


                                       A
                     A                 |
                    / \      ==>       D
                   B   C              / \
                                     B   C

Рисунок 4. Пример создания исключительной зависимости

 

Внутри дерева зависимостей зависимому потоку следует выделять ресурсы только в тех случаях, когда все потоки, от которых он зависит (цепочка родителей вплоть до 0x0), закрыты или в них ничего не происходит.

Поток не может зависеть от самого себя. Конечная точка должна трактовать это как ошибку потока (параграф 5.4.2) типа PROTOCOL_ERROR.

5.3.2. «Взвешивание» зависимостей

Все зависимости потоков выражаются «весом» — целыми числами от 1 до 256 (включительно).

Потокам, имеющим общего родителя следует распределять ресурсы пропорционально весу. Таким образом, если поток B зависит от потока A и имеет вес 4, поток C тоже зависит от A, но имеет вес 12 и в потоке A ничего не происходит, в идеальном случае B получит треть ресурсов, выделенных для потока C.

5.3.3. Повторная приоритизация

Приоритет для потоков изменяется с помощью кадров PRIORITY. Установка зависимости вынуждает поток стать зависимым от указанного родительского потока.

Зависимые потоки перемещаются вместе с их родителем, если приоритет того изменяется. Установка зависимости с флагом исключительности для приоритизируемого заново потока вынуждает все зависимости нового родительского потока стать зависимыми от повторно приоритизированного потока.

Если поток становится зависимым от одной из своих недавних зависимостей, эта зависимость (поток) перемещается так, чтобы стать зависимой от прежнего родителя потока для которого меняется приоритизация. Вес перемещенного зависимого потока сохраняется.

В качестве примера рассмотрим дерево зависимостей, где B и C зависят от A, D и E зависят от C, а F — от D. Если поток A становится зависимым от D, то D занимает место A. Все остальные отношения зависимости сохраняются за исключением потока F, который становится зависимым от A, если реприоритизация является исключительной.

  x                x                x                 x
  |               / \               |                 |
  A              D   A              D                 D
 / \            /   / \            / \                |
B   C     ==>  F   B   C   ==>    F   A       OR      A
   / \                 |             / \             /|\
  D   E                E            B   C           B C F
  |                                     |             |
  F                                     E             E
            (промежуточное)   (неисключит.)    (исключит.)

Рисунок 5. Пример изменения порядка зависимостей


5.3.4. Управление состоянием приоритизации

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

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

В качестве примера предположим, что потоки A и B имеют общего родителя, а потоки C и D зависят от A. До удаления потока A при невозможности продолжения A и D поток C получит все ресурсы, выделенные для A. Если поток A удален из дерева, вес этого потока будет поделен между C и D. Если продолжение D становится невозможным, поток C получит только часть ресурсов. При одинаковых начальных весах это составит 1/3, а не половину доступных ресурсов.

Возможны ситуации, когда поток закрывается, а приоритизационная информация, которая создает зависимости от этого потока еще находится «в пути». Если поток, указанный в зависимости, не имеет связанной с ним информации о приоритете, зависимый поток получает установленный по умолчанию приоритет (параграф 5.3.5). Это может создавать неоптимальную приоритизацию, поскольку потоку может быть присвоен приоритет, отличный от нужного.

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

Аналогично, бездействующему потоку может быть присвоен приоритет или такой поток может стать родителем других потоков. Это позволяет организовать группирующий узел в дереве зависимостей, что позволяет более гибко выражать приоритеты. Бездействующие потоки начинаются с принятым по умолчанию приоритетом (параграф 5.3.5).

Удержание информации о приоритете для потоков, которые не учитываются в пределе, устанавливаемом SETTINGS_MAX_CONCURRENT_STREAMS, могут сильно загружать конечную точку. Следовательно, объем сохраняемой информации о приоритетах может ограничиваться.

Объем дополнительной информации о состоянии, которую поддерживает конечная точка для приоритизации, может зависеть от нагрузки. При высокой загрузке информация о состоянии может отбрасываться в целях экономии ресурсов. В экстремальных случаях конечная точка может отбрасывать даже данные приоритизации для активных или резервных потоков. Если задан предел, конечной точке следует поддерживать состояние по меньшей мере для числа потоков, разрешенного значением SETTINGS_MAX_CONCURRENT_STREAMS. Реализациям следует также пытаться удерживать состояния для потоков, которые активно используются в дереве приоритетов.

Если конечная точка сохраняет достаточно данных о состоянии и получает кадр PRIORITY, меняющий приоритет закрытого потока, ей следует изменить зависимости потоков, зависящих от него.

5.3.5. Приоритеты по умолчанию

Все потокам изначально задается неисключительная зависимость от потока 0x0. Выталкиваемые потоки (параграф 8.2) изначально зависят от связанных с ними потоков. В обоих случаях потокам присваивается принятый по умолчанию вес 16.

5.4. Обработка ошибок

Кадрирование HTTP/2 допускает два класса ошибок:

  • ошибки, не позволяющие использовать соединение совсем, называются ошибками соединения;

  • ошибки в отдельных потоках называются ошибками потока.

Список кодов ошибок представлен в разделе 7.

5.4.1. Обработка ошибок соединения

Ошибкой соединения считается любая ошибка, препятствующая дальнейшей обработке уровня кадров или повреждающая состояние соединения.

Конечной точке, столкнувшейся с ошибкой соединения, следует сначала передать кадр GOAWAY (параграф 6.8) с идентификатором последнего потока, полученного без ошибок от партнера. Кадр GOAWAY включает код ошибки, указывающий причину разрыва соединения. После отправки кадра GOAWAY конечная точка должна закрыть соединение TCP.

Возможны ситуации, когда нет гарантии получения кадра GOAWAY принимающей стороной (в параграфе 6.6 [RFC7230] описано, как незамедлительный разрыв может вызывать потерю данных). В случае ошибки соединения GOAWAY обеспечивает лишь попытку сообщить партнеру о причине разрыва соединения.

Конечная точка может завершить соединение в любой момент. В частности, конечная точка может трактовать ошибку потока, как ошибку соединения. Конечным точкам следует передавать кадр GOAWAY при завершении соединения, указывая в нем обстоятельства завершения.

5.4.2. Обработка ошибок потока

Ошибки потока относятся к конкретному потоку и не затрагивают работу других потоков.

Конечная точка, обнаружившая ошибку потока, передает кадр RST_STREAM (параграф 6.4) с идентификатором потока, в котором возникла ошибка. Кадр RST_STREAM включает код, обозначающий тип ошибки.

RST_STREAM служит последним кадром, который конечная точка передает в поток. Передавший RST_STREAM партнер должен быть готов к приему любых кадров, которые уже были отправлены или помещены в очередь удаленным партнером. Эти кадры можно игнорировать за исключением тех, которые меняют состояние соединения (например, кадры, управляющие сжатием заголовков (параграф 4.3) или управлением потоками данных).

Обычно конечным точкам не следует отправлять более одного кадра RST_STREAM для любого потока. Однако конечная точка может передавать дополнительные кадры RST_STREAM, если она продолжает получать кадры через закрытый поток по истечении периода кругового обхода. Такое поведение разрешено для обеспечения совместимости с ошибочными реализациями.

Для предотвращения петель конечным точкам недопустимо передавать кадры RST_STREAM в ответ на получение RST_STREAM.

5.4.3. Разрыв соединения

Если соединение TCP закрывается или сбрасывается, а потоки остаются в открытом (open) или полузакрытом (half-closed) состоянии, затронутые этим потоки невозможно восстановить автоматически (см. параграф 8.1.4).

5.5. Расширения HTTP/2

HTTP/2 допускает расширения протокола. В рамках описанных в этом параграфе ограничений протокольные расширения могут применяться для предоставления дополнительных услуг или изменения некоторых аспектов протокола. Расширения действуют только в рамках одного соединения HTTP/2.

Это применимо к элементам протокола, определенных в данном документе, и не оказывает влияния на существующие опции для расширения HTTP типа определения новых методов, кодов состояний или полей заголовков.

В расширениях разрешается использовать новые кадры (параграф 4.1), новые параметры (параграф 6.5.2) или новые коды ошибок (раздел 7). Для поддержки этих расширений организованы новые реестры: тип кадров (параграф 11.2), параметры (параграф 11.3), коды ошибок(параграф 11.4).

Реализации должны игнорировать неизвестные или неподдерживаемые значения во всех расширяемых элементах протокола. Кадры неизвестных или неподдерживаемых типов реализации должны отбрасывать. Это означает, что любую из точек расширения можно применять без предварительного согласования. Однако кадры расширения не позволяется помещать в середину блока заголовка (параграф 4.3), это должно трактоваться, как ошибка соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Расширения, которые могут менять семантику существующих компонент протокола, должны согласовываться до начала использования. Например, расширение, которое меняет схему кадра HEADERS нельзя применять, пока партнер не сообщил о возможности их восприятия. В таких случаях может потребоваться также согласования начала использования измененной схемы. Отметим, что предположение об использовании управления потоком для каких-либо кадров, отличных от DATA, является таким изменением семантики и может применяться лишь после согласования.

Этот документ не задает конкретного метода согласования использования расширений, но отмечает, что для этого могут служить настройки (параграф 6.5.2). Если оба партнера устанавливают значение, которое показывает готовность использовать расширение, это расширение может применяться. При использовании настроек для согласования расширения начальное значение должно определяться с запретом расширения по умолчанию.

6. Определения кадров

Данная спецификация определяет множество типов кадров, каждый из которых идентифицируется уникальным 8-битовым кодом типа. Каждый тип кадров служит своим целям в процессе организации и поддержки соединения в целом и его отдельных потоков.

Передача определенных типов кадров может менять состояние соединения. Если конечная точка не способна поддерживать синхронизированное представление состояния соединения, связь через такое соединение становится невозможной. Следовательно, для конечных точек важно иметь общее представление о том как может измениться состояние соединения в результате использования данного кадра.

6.1. DATA

Кадры DATA (type=0x0) передают произвольные последовательности октетов переменного размера, связанные с потоком. Например, один или множество кадров DATA может быть использован для передачи данных запроса или отклика HTTP.

Кадры DATA могут также включать заполнение, которое может использоваться для сокрытия размеров сообщений. Заполнение относится к функциям защиты (см. параграф 10.7).

+---------------+
|Pad Length? (8)|
+---------------+-----------------------------------------------+
|                            Data (*)                         ...
+---------------------------------------------------------------+
|                           Padding (*)                       ...
+---------------------------------------------------------------+

Рисунок 6. Информация кадра DATA


Поля кадров DATA перечислены ниже.

Pad Length

8-битовое поле, содержащее размер заполнения кадра в октетах. Это поле является условным (указано символом ? на рисунке) и присутствует только при установленном флаге PADDED.

Data

Данные приложения, размер которых определяется вычитанием размера заполнения и других полей из общего размера кадра.

Padding

Октеты заполнения не содержат осмысленных данных приложения. При передаче октеты заполнения должны заполняться нулями. Получатель не обязан обрабатывать заполнение, но может трактовать отличное от нулей заполнение, как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Ниже перечислены флаги, определенные для кадров DATA.

END_STREAM (0x1)

Установленный бит 0 показывает, что этот кадр является последним, который данная конечная точка передала для указанного потока. Установка этого флага вызывает переход потока в полузакрытое (half-closed) или закрытое (closed) состояние (параграф 5.1).

PADDED (0x8)

Установленный бит 3 указывает на присутствие поля Pad Length и октетов заполнения, указанных им.

Кадр DATA должны быть связаны с потоком. В ответ на кадр DATA с идентификатором потока 0x0 получатель должен передать сигнал об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Для кадров DATA применяется управление потоком данных и они могут передавать только в потоках с состоянием open или half-closed (remote). При управлении потоком данных учитывается вся информация кадра DATA, включая поля Pad Length и Padding при их наличии. Если кадр DATA принят в потоке, состояние которого является open или half-closed (local), получатель должен ответить индикацией ошибки потока (параграф 5.4.2) типа STREAM_CLOSED.

Общее число октетов заполнения определяется значением поля Pad Length. Если размер заполнения совпадает с размером данных в кадре или превышает его, получатель должен трактовать это как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Примечание. Размер кадра может быть увеличен на один октет путем включения поля Pad Length = 0.

6.2. HEADERS

Кадры HEADERS (type=0x1) служат для создания потоков (параграф 5.1) и для передачи фрагментов блока заголовков. Кадры HEADERS могут передаваться в потоки с состоянием idle, reserved (local), open или half-closed (remote).

+---------------+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|E|                 Stream Dependency? (31)                     |
+-+-------------+-----------------------------------------------+
|  Weight? (8)  |
+-+-------------+-----------------------------------------------+
|                   Header Block Fragment (*)                 ...
+---------------------------------------------------------------+
|                           Padding (*)                       ...
+---------------------------------------------------------------+

Рисунок 7. Информация кадра HEADERS


Элементы данных кадров HEADERS приведены ниже.

Pad Length

8-битовое поле, содержащее размер заполнения кадра в октетах. Это поле присутствует только при установленном флаге PADDED.

E

Однобитовый флаг, указывающий на исключительную зависимость потока (см. параграф 5.3). Это поле присутствует лишь при установленном флаге PRIORITY.

Stream Dependency

31-битовый идентификатор потока, от которого зависит данный поток (см. параграф 5.3). Это поле присутствует лишь при установленном флаге PRIORITY.

Weight

8-битовое целое число без знака, представляющее вес приоритета для потока (см. параграф 5.3). Добавление 1 к значению поля дает вес от 1 до 256. Это поле присутствует лишь при установленном флаге PRIORITY.

Header Block Fragment

Фрагмент блока заголовка (параграф 4.3).

Padding

Октеты заполнения.

Ниже перечислены флаги, определенные для кадров HEADERS.

END_STREAM (0x1)

Установленный бит 0 показывает, что блок заголовка (параграф 4.3) является последним, который данная конечная точка передала для указанного потока.

Кадры HEADERS передают флаги END_STREAM, указывающие конец потока. Однако за кадром HEADERS с установленным флагом END_STREAM могут следовать кадры CONTINUATION того же потока. Логически кадры CONTINUATION являются частью кадра HEADERS.

END_HEADERS (0x4)

Установленный бит 2 показывает, что кадр содержит целый блок заголовка (параграф 4.3) и за ним не следует кадров CONTINUATION.

За кадром HEADERS со сброшенным флагом END_HEADERS должен следовать кадр CONTINUATION для того же потока. Получатель должен трактовать прием другого типа кадра или кадра в другом потоке как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

PADDED (0x8)

Установленный бит 3 указывает на присутствие поля Pad Length и октетов заполнения, указанных им.

PRIORITY (0x20)

Установленный бит 5 говорит о присутствии полей Exclusive Flag (E), Stream Dependency и Weight (см. параграф 5.3).

Данные кадра HEADERS включают блок заголовка (параграф 4.3). Если этот блок не помещается в кадр HEADERS, он продолжается в кадре CONTINUATION (параграф 6.10).

HEADERS должны привязываться к потокам. В ответ на кадр HEADERS с идентификатором потока 0x0 получатель должен передать сигнал об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадр HEADERS меняет состояние соединения в соответствии с параграфом 4.3.

Кадры HEADERS могут включать заполнение. Поля заполнения идентичны используемым в кадрах DATA (параграф 6.1). Заполнение, размер которого превышает размер оставшийся после размещения фрагмента блока заголовка, должен трактоваться как PROTOCOL_ERROR.

Информация о приоритете в кадрах HEADERS логически эквивалентна отдельному кадру PRIORITY, но ее включение в HEADERS позволяет предотвратить ошибочную приоритизацию при создании нового потока. Поля приоритизации в кадрах HEADERS, следующих за первым в потоке, меняют приоритизацию потока (параграф 5.3.3).

6.3. PRIORITY

Кадр PRIORITY (type=0x2) задает предложенный отправителем приоритет для потока (параграф 5.3). Эти кадры могут передаваться при любом состоянии потоков, включая бездействующие (idle) и закрытые (closed).

+-+-------------------------------------------------------------+
|E|                  Stream Dependency (31)                     |
+-+-------------+-----------------------------------------------+
|   Weight (8)  |
+-+-------------+

Рисунок 8. Информация кадра PRIORITY


Информационные поля кадра PRIORITY показаны на рисунке.

E

Однобитовый флаг, указывающий на исключительную зависимость потока (см. параграф 5.3).

Stream Dependency

31-битовый идентификатор потока, от которого зависит данный поток (см. параграф 5.3).

Weight

8-битовое целое число без знака, представляющее вес приоритета для потока (см. параграф 5.3). Добавление 1 к значению поля дает вес от 1 до 256.

Для кадров PRIORITY не определено каких-либо флагов.

Кадр PRIORITY всегда идентифицирует поток. В ответ на кадр PRIORITY с идентификатором потока 0x0 получатель должен передать сигнал об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадр PRIORITY может быть передан в любом состоянии потока, однако он не может передаваться между последовательными кадрами, составляющими один блок заголовка (параграф 4.3). отметим, что этот кадр может приходить после завершения обработки или передачи кадра и в результате не повлияет на указанный поток. Для потоков в состоянии half-closed (remote) или closed этот кадр может влиять лишь на обработку указанного потока и зависимых от него потоков, не оказывая влияния на передачу самого кадра в этом потоке.

Кадр PRIORITY может быть передан в потоки, находящиеся в состоянии idle или closed. Это позволяет изменить приоритизацию группы зависимых потоков, поменяв приоритет неиспользуемого или закрытого родительского потока.

Кадры PRIORITY с размером, отличным от 5 октетов, должны трактоваться как ошибка потока (параграф 5.4.2) типа FRAME_SIZE_ERROR.

6.4. RST_STREAM

Кадр RST_STREAM (type=0x3) позволяет незамедлительно прервать поток. RST_STREAM передается для запроса разрыва потока или индикации возникшей ошибки.

+---------------------------------------------------------------+
|                        Error Code (32)                        |
+---------------------------------------------------------------+

Рисунок 9. Информация кадра RST_STREAM


Кадр RST_STREAM содержит одно 32-битовое целое число без знака, указывающее код ошибки (параграф 7), который показывает причину прерывания потока.

Для кадров RST_STREAM не определено каких-либо флагов.

Кадр RST_STREAM полностью прерывает указанный поток и вызывает его переход в состояние closed. После приема кадра RST_STREAM в потоке его получателю недопустимо передавать в этот поток дополнительные кадры за исключением PRIORITY. Однако после отправки RST_STREAM передавшая этот кадр конечная точка должна быть готова к получению и обработке дополнительных кадров, которые могли быть переданы в этот поток до прибытия кадра RST_STREAM.

Кадр RST_STREAM должен быть связан с потоком. В ответ на кадр RST_STREAM с идентификатором потока 0x0 получатель должен передать сигнал об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадры RST_STREAM недопустимо передавать в поток, находящийся в состоянии idle. В ответ на кадр RST_STREAM в бездействующем потоке получатель должен передать сигнал об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадры RST_STREAM с размером, отличным от 4 октетов, должны трактоваться как ошибка потока (параграф 5.4.2) типа FRAME_SIZE_ERROR.

6.5. SETTINGS

Кадры SETTINGS (type=0x4) служат для передачи конфигурационных параметров, воздействующих на коммуникации конечной точки, типа предпочтений и ограничений в поведении партнера. Кадры SETTINGS служат также для подтверждения приема таких параметров. Отдельные параметры из кадров SETTINGS могут называться также «установками» (setting).

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

Кадры SETTINGS должны передаваться обеими конечными точками при организации соединения и могут также передаваться каждой из конечных точек в любой момент в течение срока существования соединения. Реализации должны поддерживать параметры, определенные этой спецификацией.

Каждый параметр из кадра SETTINGS устанавливается взамен имеющегося значения этого параметра. Параметры обрабатываются в порядке их следования в кадре и получателю кадра SETTINGS не требуется поддерживать какое-либо состояние в дополнение к текущим значениям своих параметров. Следовательно, значение параметра SETTINGS является последним значением, которое увидел получатель.

Параметры SETTINGS подтверждаются принявшим кадр партнером. Для этого в кадрах SETTINGS используется описанный ниже флаг.

ACK (0x1)

Установленный бит 0 показывает, что кадр подтверждает прием и применение кадра SETTINGS от партнера. При установленном флаге поля данных (payload) кадра SETTINGS должны быть пустыми. Прием кадра SETTINGS с флагом ACK и отличным от 0 полем размера должен трактоваться как ошибка соединения (параграф 5.4.1) типа FRAME_SIZE_ERROR. Дополнительная информация приведена в параграфе 6.5.3. Синхронизация настроек.

Кадры SETTINGS всегда относятся к соединению, а не к отдельным потокам. Поле идентификатора потока в кадрах SETTINGS должно иметь нулевое значение (0x0). При получении кадра SETTINGS с отличным от 0 идентификатором потока конечная точка должна ответить сигналом об ошибке соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадры SETTINGS влияют на состояние соединения. Некорректно сформированные или неполные кадры SETTINGS должны трактоваться как ошибка соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадры SETTINGS с размером, не кратным 6 октетам, должны считаться ошибкой соединения (параграф 5.4.1) типа FRAME_SIZE_ERROR.

6.5.1. Формат SETTINGS

Информационные поля кадра SETTINGS могут (но не обязаны) включать параметры, каждый из которых включает 16-битовый идентификатор и 32-битовое значение.

+-------------------------------+
|       Identifier (16)         |
+-------------------------------+-------------------------------+
|                        Value (32)                             |
+---------------------------------------------------------------+

Рисунок 10. Информация кадра SETTINGS


6.5.2. Параметры SETTINGS

Определенные настоящим документом параметры перечислены ниже.

SETTINGS_HEADER_TABLE_SIZE (0x1)

Позволяет отправителю сообщить удаленной стороне максимальный размер (в октетах) таблицы сжатия заголовков, применяемой для декодирования блоков заголовка. Кодировщик может выбрать размер, не превышающий это значение, используя сигнализацию для конкретного формата сжатия внутри блока заголовка. (см. [COMPRESSION]). Начальное значение составляет 4096 октетов.

SETTINGS_ENABLE_PUSH (0x2)

Эта установка может служить для запрета выталкивания данных сервером (параграф 8.2). Конечной точке недопустимо передавать кадр PUSH_PROMISE, если она получила этот параметр со значением 0. Конечная точка, установившая для этого параметра значение 0 и имеющая подтверждение этого, должна трактовать получение кадра PUSH_PROMISE, как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

В качестве начального значения параметра используется 1, что показывает возможность использования на сервере выталкивания данных. Все значения этого параметра, кроме 0 и 1, должны считаться ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

SETTINGS_MAX_CONCURRENT_STREAMS (0x3)

Показывает максимальное число потоков, которые будет разрешать отправитель. Это ограничение является направленным и указывает число потоков, которые отправитель позволяет создавать получателю. Изначально для этого значения не задано ограничений. Рекомендуется устанавливать для этого параметра значение не менее 100 чтобы не возникало неоправданного ограничения параллельной работы.

Нулевое значение SETTINGS_MAX_CONCURRENT_STREAMS не следует считать особым, оно просто предотвращает создание новых потоков. Однако такая же ситуация может возникать при любом значении в случае достижения заданного предела. Серверам следует устанавливать нулевое значение лишь на короткий период — если сервер не хочет принимать запросы, лучше закрыть соединение.

SETTINGS_INITIAL_WINDOW_SIZE (0x4)

Показывает размер начального окна отправителя (в октетах) для управления потоком данных на уровне потока. Начальное значение составляет 216-1 (65 535) октетов.

Этот параметр влияет на размер окна для всех потоков (см. параграф 6.9.2).

Значения, превышающие максимальный размер окна управления потоком данных 231-1, должны считаться ошибкой соединения (параграф 5.4.1) типа FLOW_CONTROL_ERROR.

SETTINGS_MAX_FRAME_SIZE (0x5)

Показывает максимальный размер данных (payload) в кадре, которые отправитель готов получать (в октетах).

Начальное значение составляет 214 (16 384) октетов. Анонсируемые конечной точкой значения должны лежать в диапазоне от этого начального значения до максимального разрешенного размера кадра (224-1 или 16 777 215 октетов), включительно. Выходящие за предел этого диапазона значения должны считаться ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

SETTINGS_MAX_HEADER_LIST_SIZE (0x6)

Это предложение информирует партнера о максимальном размере списка заголовков, который отправитель готов получать (в октетах). Значение учитывает размер несжатых полей заголовков, включая размер имени и значения в октетах с добавлением «отягощения» (overhead) в 32 октета на каждое поле заголовка.

Для любого конкретного запроса может быть установлен предел ниже заявленного. Начальное значение для этого параметра не устанавливается.

Конечная точка, получившая кадр SETTINGS с неизвестными или неподдерживаемыми идентификаторами, должна игнорировать такой кадр.

6.5.3. Синхронизация настроек

Большинство значений в кадрах SETTINGS начинают работать после получения кадра партнером и применения им этого значения и отправителю следует понимать, когда это было сделано. Для обеспечения такой синхронизации получатель кадра SETTINGS со сброшенным флагом ACK должен применить обновленные параметры сразу же после получения кадра.

Значения из кадра SETTINGS должны обрабатываться в порядке их следования без включения обработки других кадров между обработкой двух значений из одного кадра. Не поддерживаемые параметры должны игнорироваться. После обработки всех значений получатель должен незамедлительно отправить кадр SETTINGS с установленным флагом ACK. При получении кадра SETTINGS с флагом ACK отправитель измененных параметров может считать, что они применены партнером.

Если отправитель кадра SETTINGS не получает подтверждения в течение разумного интервала, он может передать сигнал об ошибке соединения (параграф 5.4.1) типа SETTINGS_TIMEOUT.

6.6. PUSH_PROMISE

Кадры PUSH_PROMISE (type=0x5) служат для упреждающего уведомления конечной точки-партнера об инициировании потоков. Кадр PUSH_PROMISE включает 31-битовый беззнаковый индикатор потока, который конечная точка планирует открыть, вместе с набором заголовков, обеспечивающих для потока дополнительный контекст. Использование кадров PUSH_PROMISE подробно описано в параграфе 8.2.

+---------------+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|R|                  Promised Stream ID (31)                    |
+-+-----------------------------+-------------------------------+
|                   Header Block Fragment (*)                 ...
+---------------------------------------------------------------+
|                           Padding (*)                       ...
+---------------------------------------------------------------+

Рисунок 11. Информация кадра PUSH_PROMISE


Информационные поля кадра PUSH_PROMISE описаны ниже.

Pad Length

8-битовое поле, содержащее размер заполнения кадра в октетах. Это поле присутствует только при установленном флаге PADDED.

R

Один резервный бит.

Promised Stream ID

31-битовое целое число без знака, идентифицирующее поток, который резервируется с помощью PUSH_PROMISE. Идентификатор предлагаемого потока должен быть приемлемым выбором для следующего потока, передаваемого отправителем (см. параграф 5.1.1).

Header Block Fragment

Фрагмент блока заголовка (параграф 4.3), содержащий поля заголовка запроса.

Padding

Октеты заполнения.

Ниже описаны флаги, определенные для кадров PUSH_PROMISE.

END_HEADERS (0x4)

Установленный бит 2 показывает, что этот кадр целиком содержит блок заголовка (параграф 4.3) и за ним не следует кадров CONTINUATION.

Кадр PUSH_PROMISE без флага END_HEADERS должен сопровождаться последующим кадром CONTINUATION для того же потока. Получатель должен считать получение вслед за таким кадром END_HEADERS кадра другого типа или кадра для другого потока ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

PADDED (0x8)

Установленный бит 3 говорит о наличии поля Pad Length и соответствующего размера поля заполнения.

Кадры PUSH_PROMISE должны передаваться только в инициированный партнером поток, находящийся в состоянии open или half-closed (remote). Идентификатор потока в кадре PUSH_PROMISE указывает поток, с которым кадр связан. Получение такого кадра с идентификатором потока 0x0 должен считаться ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Предложенные потоки не требуется применять в том порядке, в котором они были обещаны. Кадры PUSH_PROMISE лишь резервируют идентификаторы потока для последующего использования.

Кадры PUSH_PROMISE недопустимо передавать, если для партнера установлено значение SETTINGS_ENABLE_PUSH = 0. Конечная точка с такой установкой, если она была подтверждена, должна считать получение кадра PUSH_PROMISE ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Получатели кадров PUSH_PROMISE могут отвергнуть предложенные потоки, возвращая RST_STREAM с указанием идентификатора потока отправителю кадра PUSH_PROMISE.

Кадры PUSH_PROMISE меняют состояние соединения двумя путями. Во-первых, включение блока заголовка (параграф 4.3) может поменять состояние, поддерживаемое в части сжатия заголовков. Во-вторых, PUSH_PROMISE также резервирует поток для последующего использования, переводя предложенный поток в состояние reserved. Отправителю недопустимо передавать кадр PUSH_PROMISE в поток, который не находится в состоянии open или half-closed (remote), отправитель должен обеспечить пригодность предложенного потока для выбора в качестве нового (параграф 5.1.1) (т. е., предложенный поток должен находиться в состоянии idle).

Поскольку кадр PUSH_PROMISE резервирует поток, игнорирование PUSH_PROMISE делает состояние потока неопределенным. Получатель кадра PUSH_PROMISE в потоке с состоянием отличным от open и half-closed (local) должен считать это ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR. Однако конечная точка, передавшая RST_STREAM в соответствующий поток, должна обрабатывать полученные кадры PUSH_PROMISE, как будто они приняты до того, как был отправлен и обработан кадр RST_STREAM.

Получатель должен считать кадр PUSH_PROMISE, предлагающий недопустимый идентификатор потока (параграф 5.1.1), ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR. Отметим, что недопустимыми считаются идентификаторы потоков, которые не находятся в состоянии idle.

Кадры PUSH_PROMISE могут включать заполнение. Поля и флаги заполнения идентичны описанным для кадров DATA (параграф 6.1).

6.7. PING

Кадры PING (type=0x6) обеспечивают механизм измерения минимального времени кругового обхода от отправителя, а также проверки работоспособности соединения. Кадры PING может передавать любая из конечных точек.

+---------------------------------------------------------------+
|                                                               |
|                      Opaque Data (64)                         |
|                                                               |
+---------------------------------------------------------------+

Рисунок 12. Информация кадра PING


В дополнение к заголовку кадр PING должен содержать 8 октетов не обрабатываемых (opaque) данных в информационном поле. Отправитель может выбирать содержимое этого поля произвольным способом.

Получатель кадра PING без флага ACK должен передать в ответ кадр PING с установленным флагом ACK и исходным информационным полем (payload). Откликам PING следует отдавать приоритет по отношению к другим кадрам.

Для кадров PING определен описанный ниже флаг.

ACK (0x1)

Установленный бит 0 показывает, что данный кадр PING является откликом на запрос PING. Конечные точки должны устанавливать этот флаг в откликах PING. Конечным точкам недопустимо отвечать на кадры PING с установленным флагом.

Кадры PING не связываются с каким-либо потоком. Получение кадра PING с отличным от 0x0 идентификатором потока должно считаться ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Получение кадра PING с отличным от 8 полем размера должно считаться ошибкой соединения (параграф 5.4.1) типа FRAME_SIZE_ERROR.

6.8. GOAWAY

Кадры GOAWAY (type=0x7) служат для инициирования разрыва соединения или сигнализации о серьезной ошибке. GOAWAY позволяет конечной точке аккуратно прекратить восприятие новых потоков, продолжая обработку ранее созданы до их завершения. Это важно для административных операций типа обслуживания серверов.

Между конечной точкой, начинающей новые потоки, и удаленной точкой, передающей кадр GOAWAY, возникает «соперничество». Для его преодоления в кадр GOAWAY включается идентификатор последнего инициированного партнером потока, который передающая кадр конечная точка может обработать в рамках данного соединения. Например, если сервер передает кадр GOAWAY, в нем указывается инициированный клиентом поток с максимальным номером.

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

Если получатель кадра GOAWAY уже передал данные в поток, идентификатор которого превышает указанное в кадре GOAWAY значение, этот поток не будет обработан. Получатель кадра GOAWAY может считать, что этот поток просто не создавался и предпринять попытку еще раз создать его позднее в новом соединении.

Конечным точкам следует всякий раз передавать кадр GOAWAY перед завершением соединения, чтобы удаленная сторона могла понимать какие из потоков будут обработаны. Например, если клиент HTTP передает запрос POST в тот же момент, когда сервер закрывает соединение, клиент просто не может знать начал ли сервер обработку этого запроса, если сервер не передаст кадр GOAWAY, показывающий какие потоки будут обработаны.

При некорректном поведении партнера конечная точка может закрыть соединение без отправки кадра GOAWAY.

Кадр GOAWAY не обязательно присутствует закрытию соединения непосредственно. Получателю кадра GOAWAY, который больше не намерен использовать соединение, следует передать кадр GOAWAY перед разрывом соединения.

+-+-------------------------------------------------------------+
|R|                  Last-Stream-ID (31)                        |
+-+-------------------------------------------------------------+
|                      Error Code (32)                          |
+---------------------------------------------------------------+
|                  Additional Debug Data (*)                    |
+---------------------------------------------------------------+

Рисунок 13. Информация кадра GOAWAY


Для кадров GOAWAY не определено каких-либо флагов.

Кадры GOAWAY связаны с соединением, а не с конкретным потоком. Конечная точка должна считать кадры GOAWAY с отличным от 0x0 идентификатором потока ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Идентификатор последнего потока в кадре GOAWAY указывает наибольший номер потока, для которого отправитель GOAWAY может предпринимать те или иные действия. Все потоки, вплоть до указанного значения идентификатора (включая его) будут так или иначе обработаны. Для последнего потока может быть указано значение 0, если потоки больше не будут обрабатываться совсем.

Примечание. В этом контексте «обработка» означает, что некие данные из потока будут переданы некому вышележащему программному уровню, который в результате может выполнить те или иные действия.

Если соединение разрывается без передачи кадра GOAWAY, идентификатор последнего потока эффективно служит максимально возможным идентификатором.

В потоках с меньшими или равным последнему значениями идентификаторов, которые не были полностью закрыты до разрыва соединения, попытки запросов, транзакций и иных протокольных действий невозможны, за исключением идемпотентных8 запросов типа HTTP GET, PUT или DELETE. Любые протокольные действия с потоками, идентификаторы которых превышают последний, можно безопасно повторить в новом соединении.

Действия в потоках, номера которых не превышают значение идентификатора последнего потока, могут быть выполнены полностью. Отправитель кадра GOAWAY может аккуратно закрыть соединение путем передачи кадра GOAWAY и поддержки для соединения состояния open пока не будут завершены все предшествующие потоки.

При изменении ситуации конечная точка может передать множество кадров GOAWAY. Например, конечная точка, передавшая кадр GOAWAY с кодом NO_ERROR, в процессе аккуратного разрыва соединения может столкнуться с обстоятельствами, требующими немедленно разорвать соединение. Идентификатор последнего потока из полученного сообщения GOAWAY показывает поток, до которого может продолжаться обработка. Конечным точкам недопустимо увеличивать значение идентификатора последнего потока, поскольку партнеры могут уже повторить необработанные запросы через другое соединение.

Клиент, не способный повторять запросы, будет терять все запросы, которые были «на лету» в момент разрыва соединения сервером. Это верно и для промежуточных устройств (посредников), которые могут не обслуживать клиентов, использующих HTTP/2. Серверу, который пытается аккуратно завершить соединение, следует передать начальный кадр GOAWAY с идентификатором последнего потока 231-1 и кодом NO_ERROR. Это информирует клиента о неизбежности разрыва соединения и запрете отправки новых запросов. Выждав время для находящихся в процессе передачи запросов на создание потока (хотя бы один интервал кругового обхода), сервер может передать другой кадр GOAWAY с обновленным идентификатором последнего потока. Это позволяет разорвать соединение без потери запросов.

После передачи кадра GOAWAY отправитель может отбрасывать кадры от потоков, инициированных его получателем, если они содержат идентификаторы сегментов с номерами выше последнего. Однако кадры, меняющие состояние соединения, не могут быть полностью проигнорированы. Например, кадры HEADERS, PUSH_PROMISE и CONTINUATION должны пройти минимальную обработку для поддержки согласованности состояния сжатия заголовков (см. параграф 4.3). Кадры DATA должны учитываться в окне управления потоком данных соединения. Отказ от обработки указанных кадров может нарушать синхронизацию состояний управления потоком данных и сжатия заголовков.

Кадр GOAWAY содержит также 32-битовый код ошибки (параграф 7), указывающий причину разрыва соединения.

Конечные точки могут добавлять «непрозрачные» (opaque) данные в информационное поле любого кадра GOAWAY. Дополнительные отладочные данные предназначены лишь для диагностики и семантика их не важна. Отладочная информация может содержать конфиденциальные данные, относящиеся к безопасности или приватности. Запись отладочных данных в системный журнал или иное хранилище должна сопровождаться адекватными мерами защиты от несанкционированного доступа.

6.9. WINDOW_UPDATE

Кадры WINDOW_UPDATE (type=0x8) служат для реализации управления потоком данных (см. параграф 5.2).

Управление потоком данных осуществляется на двух уровнях — отдельные потоки и соединение в целом.

Оба варианта управления потоком являются поэтапными (hop by hop), т. е., реализуются между парой конечных точек. Промежуточные устройства не пересылают кадры WINDOW_UPDATE между зависимыми соединениями. Однако дросселирование (торможение) передачи данных любым получателем может опосредованно вызывать распространение информации управления потоком данных в направлении исходного отправителя.

Управление потоком данных применяется лишь для кадров, обозначенных в качестве управляемых. Этот документ определяет единственный тип управляемых кадров — DATA. Кадры, не включаемые в управление потоком данных, должны восприниматься и обрабатываться, пока получатель способен выделять ресурсы для их обслуживания. Получатель может указать на ошибку потока (параграф 5.4.2) или соединения (параграф 5.4.1) типа FLOW_CONTROL_ERROR, если он не способен воспринять кадр.

+-+-------------------------------------------------------------+
|R|              Window Size Increment (31)                     |
+-+-------------------------------------------------------------+

Рисунок 14. Информация кадра WINDOW_UPDATE


Информационное поле (payload) кадра WINDOW_UPDATE представляет собой один резервный бит и 31-битовое целое число без знака, указывающее число октетов, которые отправитель может передать в дополнение к имеющемуся окну управления потоком данных. Допустимые значения добавок к окну управления потоком данных лежат в диапазоне от 1 до 231-1 (2 147 483 647) октетов.

Для кадров WINDOW_UPDATE не определено каких-либо флагов.

Кадр WINDOW_UPDATE может относиться к конкретному потоку или соединению в целом. В первом случае в кадре указывается идентификатор соответствующего потока, во втором идентификатор имеет значение 0.

Получатель должен считать кадр WINDOW_UPDATE с нулевым инкрементом окна управления потоком данных ошибкой потока (параграф 5.4.2) типа PROTOCOL_ERROR или ошибкой соединения (параграф 5.4.1), если кадр относится к соединению в целом.

Кадр WINDOW_UPDATE может быть передан отправителем кадра с флагом END_STREAM. В таких случаях получатель может принять кадр WINDOW_UPDATE через поток в состоянии half-closed (remote) или closed. Недопустимо считать этот случай ошибкой (см. параграф 5.1).

Получатель кадра, на который воздействует управление потоком данных, всегда должен учитывать такой кадр в окне управления потоком данных соединения, если данный кадр не связан с ошибкой соединения (параграф 5.4.1). Это требуется делать даже для ошибочных кадров. Отправитель учитывает кадр в окне управления потоком данных и если получатель не будет делать то же, окна управления потоком данных у получателя и отправителя могут стать разными.

Кадры WINDOW_UPDATE с размером, отличающимся от 4 октетов, должны считаться ошибкой соединения (параграф 5.4.1) типа FRAME_SIZE_ERROR.

6.9.1. Окно управления потоком данных

Управление потоком данных в HTTP/2 реализуется с использованием окна, сохраняемого каждым отправителем в каждом потоке. Окно управления потоком данных задается целочисленным значением, показывающим число данных, которые разрешено передать отправителю. Таким образом, размер окна определяется буферной емкостью получателя.

Применимы два окна управления потоком данных — одно для потока, другое для соединения в целом. Отправителю недопустимо передавать кадры, к которым применяется управление потоком данных, если они выходят за пределы пространства, доступного в любом из анонсированных получателем окон управления потоком данных. Кадры нулевого размера с установленным флагом END_STREAM (т. е., пустые кадры DATA) могут передаваться даже при отсутствии пространства в окнах управления потоком данных.

При расчетах для управления потоком данных 9 октетов заголовка кадра не учитываются.

После передачи кадра, к которому применяется управление потоком данных, отправитель уменьшает размер доступного пространства в обоих окнах управления потоком на размер переданного кадра.

Получатель кадра передает кадр WINDOW_UPDATE после того, как он воспримет данные и освободит пространство в окне управления потоком данных. Для окон управления потоком данных соединения в целом и отдельного потока передаются раздельные кадры WINDOW_UPDATE.

Отправитель, получив кадр WINDOW_UPDATE, увеличивает соответствующее окно на указанный в кадре размер. Отправителю недопустимо увеличивать размер окна управления потоком данных сверх 231-1 октетов. Если отправитель получает кадр WINDOW_UPDATE со значением, приводящим к нарушению этого предела, он должен разорвать поток или соединение, к которому это относится. Для потоков в таких случаях отправитель передает RST_STREAM с кодом ошибки FLOW_CONTROL_ERROR, для соединений — кадр GOAWAY с кодом ошибки FLOW_CONTROL_ERROR.

Кадры, подлежащие управлению потоком от отправителя и кадры WINDOW_UPDATE от получателя не имеют какой-либо синхронизации. Это позволяет получателю активно обновлять размер окна, сохраняемый отправителем, для предотвращения «замораживания» потока.

6.9.2. Начальный размер окна управления потоком данных

При первоначальной организации соединения HTTP/2 новые потоки создаются с начальным окном управления потоком данных в в 65535 октетов. Размер окна управления потоком данных для всего соединения также составляет 65535 октетов. Обе конечных точки могут установить начальный размер окна для новых потоков, включая значение SETTINGS_INITIAL_WINDOW_SIZE в кадр SETTINGS, формирующий часть префикса соединения. Размер окна управления потоком данных для соединения в целом можно изменить лишь с помощью кадров WINDOW_UPDATE.

До получения кадра SETTINGS, устанавливающего значение SETTINGS_INITIAL_WINDOW_SIZE, конечная точка может использовать при передаче кадров, для которых используется управление потоком, лишь принятого по умолчанию размера окна. Аналогично на уровне соединения в целом используется принятый по умолчанию начальный размер окна до получения кадра WINDOW_UPDATE.

Кроме изменения размера окна управления потоком данных для еще не созданных потоков кадр SETTINGS может менять размер начального окна для потоков с уже активным окном управления потоком данных (т. е., потоков в состоянии open или half-closed (remote)). При изменении SETTINGS_INITIAL_WINDOW_SIZE получатель должен исправить размер окна управления потоком данных для всех потоков, которые он поддерживает, на разницу между новым и прежним значением.

Изменение SETTINGS_INITIAL_WINDOW_SIZE может сделать размер доступного в окне управления потоком данных пространства отрицательным. Отправитель должен отслеживать возникновение окон отрицательного размера и недопустимо передавать новые кадры, для которых используется управление потоком данных, пока не будет получен кадр WINDOW_UPDATE, увеличивающий размер окна управления потоком данных до положительного значения.

Например, если клиент передал 60 KB данных сразу после организации соединения, а сервер установил для начального окна размер 16 KB, клиент получит для доступного в окне управления потоком пространства отрицательное значение -44 KB при получении кадра SETTINGS. Клиент сохраняет отрицательный размер окна управления потоком данных, пока кадры WINDOW_UPDATE не восстановят положительное значение и лишь после этого клиент может возобновить передачу.

Кадры SETTINGS не могут менять окно управления потоком данных соединения.

Конечная точка должна считать значение SETTINGS_INITIAL_WINDOW_SIZE, увеличивающее размер окна управления потоком данных сверх максимально разрешенного значения, ошибкой соединения (параграф 5.4.1) типа FLOW_CONTROL_ERROR.

6.9.3. Снижение размера окна управления для потока

Получатель, желающий уменьшить окно управления потоком данных по сравнению с текущим значением, может отправить новый кадр SETTINGS. Однако этот получатель должен быть готов к получению большего объема данных,, которые отправитель мог уже передать до обработки кадра SETTINGS.

После отправки кадра SETTINGS, уменьшающего окно управления потоком данных, получатель может продолжать обработку потоков, выходящих за пределы окна. Это разрешение не позволяет получателю незамедлительно снизить объем доступного для окон управления потоком данных пространства памяти. Обработка этих потоков может быть «заморожена», поскольку отправителю для продолжения передачи будут требоваться кадры WINDOW_UPDATE. Получатель может вместо этого передать RST_STREAM с кодом ошибки FLOW_CONTROL_ERROR для соответствующих потоков.

6.10. CONTINUATION

Кадры CONTINUATION (type=0x9) служат для продолжения последовательности фрагментов блока заголовка (параграф 4.3). Может передаваться любое число кадров CONTINUATION, пока такому кадру предшествует кадр HEADERS, PUSH_PROMISE или CONTINUATION без флага END_HEADERS.

+---------------------------------------------------------------+
|                   Header Block Fragment (*)                 ...
+---------------------------------------------------------------+

Рисунок 15. Информация кадра CONTINUATION


Информационное поле кадра CONTINUATION содержит фрагмент блока заголовка (параграф 4.3).

Для кадров CONTINUATION определен один флаг, описанный ниже.

END_HEADERS (0x4)

Установленный бит 2 показывает, что данный кадр завершает блок заголовка (параграф 4.3).

Если флаг END_HEADERS не установлен, за этим кадром должен следовать другой кадр CONTINUATION. Получатель должен в таких случаях считать получение любого другого типа кадра или кадра в другом потоке ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадр CONTINUATION меняет состояние соединения, как описано в параграфе 4.3.

Кадры CONTINUATION должны быть привязаны к потокам. Прием кадра CONTINUATION с полем идентификатора потока 0x0 получатель должен считать ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

Кадру CONTINUATION должен предшествовать кадр HEADERS, PUSH_PROMISE или CONTINUATION без флага END_HEADERS. Нарушение этого правила получатель должен считать ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

7. Коды ошибок

Коды ошибок указываются 32-битовыми полями в кадрах RST_STREAM и GOAWAY для передачи информации о причине ошибки потока или соединения.

Для кодов ошибок потоков и соединений используется общее пространство значений. Некоторые коды применимы лишь к потоку или соединению в целом и не имеют смысла в ином контексте.

Определенные в данной спецификации коды ошибок приведены ниже.

NO_ERROR (0x0)

Соответствующее условие не является результатом ошибки. Например, кадр GOAWAY может включать этот код для индикации аккуратного разрыва соединения.

PROTOCOL_ERROR (0x1)

Конечная точка столкнулась с неуказанной ошибкой протокола. Этот код применяется в тех случаях, когда для ошибки нет более конкретного кода.

INTERNAL_ERROR (0x2)

Конечная точка столкнулась с неожиданной внутренней ошибкой.

FLOW_CONTROL_ERROR (0x3)

Конечная точка обнаружила нарушение ее партнером протокола управления потоком данных.

SETTINGS_TIMEOUT (0x4)

Конечная точка передала кадр SETTINGS, но не получила своевременного отклика (см. параграф 6.5.3. Синхронизация настроек).

STREAM_CLOSED (0x5)

Конечная точка получила кадр после того, как поток был наполовину закрыт (half-closed).

FRAME_SIZE_ERROR (0x6)

Конечная точка получила кадр с неприемлемым размером.

REFUSED_STREAM (0x7)

Конечная точка отвергла поток до выполнения какой-либо прикладной обработки (см. параграф 8.1.4).

CANCEL (0x8)

Используется конечной точкой для индикации того, что поток больше не требуется.

COMPRESSION_ERROR (0x9)

Конечная точка не способна поддерживать контекст сжатия заголовков для соединения.

CONNECT_ERROR (0xa)

Соединение, организованное по запросу CONNECT (параграф 8.3) было сброшено или аварийно завершено.

ENHANCE_YOUR_CALM (0xb)

Конечная точка обнаружила у партнера поведение, которое может создать избыточную нагрузку.

INADEQUATE_SECURITY (0xc)

Свойства нижележащего транспорта не соответствуют требованиям безопасности (см. параграф 9.2).

HTTP_1_1_REQUIRED (0xd)

Конечная точка требует использования HTTP/1.1 вместо HTTP/2.

Недопустимо запускать какую-либо специальную обработку не известных или не поддерживаемых кодов ошибок. Их можно трактовать, как INTERNAL_ERROR.

8. Обмен сообщениями HTTP

Протокол HTTP/2 разрабатывался с учетом обеспечения возможной совместимости с текущими приложениями HTTP. Это означает, что с точки зрения приложений большая часть функциональности сохраняется неизменной. Для обеспечения этого сохранена семантика всех запросов и откликов, хотя синтаксис передачи этой семантики изменен.

Таким образом, спецификации и требования к семантике и содержимому HTTP/1.1 (Semantics and Content) [RFC7231], условным запросам (Conditional Requests) [RFC7232], запросам части документа (Range Requests) [RFC7233], кэшированию (Caching) [RFC7234] и проверке подлинности (Authentication) [RFC7235] остаются применимыми в HTTP/2. Отдельные части синтаксиса сообщений и маршрутизации HTTP/1.1 (Message Syntax and Routing) [RFC7230], типа схем URI для HTTP и HTTPS также применимы в HTTP/2, но выражение их семантики для этого протокола отличается и описано ниже.

8.1. Обмен запросами и откликами HTTP

Клиент передает запрос HTTP на организацию нового потока, указывая не использованный ранее идентификатор потока (параграф 5.1.1). Сервер передает отклик HTTP с запрошенным идентификатором потока.

Сообщение HTTP (запрос или отклик) включает:

  1. отклики (и только они) могут включать один или множество кадров HEADERS (за каждым может следовать один или множество кадров CONTINUATION), содержащих заголовки информационных (1xx) откликов HTTP (см. параграф 3.2 в [RFC7230] и параграф 6.2 в [RFC7231]);

  2. один кадр HEADERS (за которым может следовать один или множество кадров CONTINUATION), содержащий заголовки сообщения (см. параграф 3.2 в [RFC7230]);

  3. может содержать кадры DATA с информационными полями (payload) сообщения (см. параграф 3.3 в [RFC7230]);

  4. дополнительно может содержать один кадр HEADERS, за которым могут следовать кадры CONTINUATION, с трейлерной частью (trailer-part), если она имеется (см. параграф 4.1.2 в [RFC7230]).

Последний кадр в цепочке имеет флаг END_STREAM, показывающий, что за этим кадром HEADERS могут следовать кадры CONTINUATION с оставшимися частями блока заголовков.

Другие кадры (из любого потока) недопустимо помещать между кадром HEADERS и следующими за ним кадрами CONTINUATION.

HTTP/2 использует кадры DATA для передачи информационного содержимого сообщений. В HTTP/2 недопустимо использовать описанное в параграфе 4.1 [RFC7230] chunked-кодирование передачи.

Трейлерный (задние) поля заголовка передаются в блоке заголовка, который также завершает поток. Текой блок заголовка представляет собой последовательность, начинающуюся с кадра HEADERS, за которым может следовать один или несколько кадров CONTINUATION, при этом кадр HEADERS включает флаг END_STREAM. Блоки заголовка после первого, которые не завершают поток, не являются частью запроса или отклика HTTP.

Кадр HEADERS (и связанные с ним кадры CONTINUATION) может появляться только в начале или в конце потока. Конечная точка, получившая кадр HEADERS без флага END_STREAM после приема финального (не информационного) кода состояния, должна считать соответствующий запрос или отклик сформированным некорректно (параграф 8.1.2.6).

Обмен HTTP запрос-отклик полностью занимает один поток. Запрос начинается с кадра HEADERS, который переводит поток в состояние open. Завершается запрос кадром с флагом END_STREAM, который переводит поток в состояние half-closed (local) для клиента и half-closed (remote) для сервера. Отклик начинается с кадра HEADERS и завершается кадром с флагом END_STREAM, который переводит поток в состояние closed .

Отклик HTTP завершается после того, как сервер передаст (или клиент получит) кадр с флагом END_STREAM (включая все кадры CONTINUATION, требуемые для завершения блока заголовка). Сервер может передать полный отклик до того, как клиент полностью передаст запрос, если отклик не зависит от какой-либо части запроса, которая еще не передана и не получена. Когда это справедливо, сервер может запросить у клиента прерывание запроса без ошибки путем отправки RST_STREAM с кодом NO_ERROR после передачи всего отклика (т. е., кадра с флагом END_STREAM). Клиенту недопустимо отбрасывать отклики в результате получения RST_STREAM, хотя клиент всегда может по своему разумению отбрасывать отклики в связи с другими причинами.

8.1.1. Обновление HTTP/2

HTTP/2 прекращает поддержку информационного кода состояния 101 (Switching Protocols), описанного в параграфе 6.2.2 [RFC7231].

Семантика кода 101 не применима к протоколам с мультиплексированием. Другие протоколы способны применять те же механизмы, которые в протоколе HTTP/2 служат для согласования его использования (см. параграф 3).

8.1.2. Поля заголовка HTTP

Информация в полях заголовка HTTP представляется в форме последовательности пар «ключ — значение» (key-value). Список зарегистрированных полей заголовков HTTP можно найти в реестре Message Header Field, доступном по ссылке https://www.iana.org/assignments/message-headers.

Как и в HTTP/1.x, имена полей заголовка представляются строками символов ASCII, которые сравниваются без учета регистра символов. Однако при кодировании в HTTP/2 имена полей заголовка должны приводиться к нижнему регистру. Запросы и отклики, содержащие заглавные буквы в именах полей заголовков, должны считаться некорректно сформированными (параграф 8.1.2.6).

8.1.2.1. Поля псевдозаголовка

Хотя в HTTP/1.x используется стартовая строка сообщения (см. параграф 3.1 в [RFC7230]) для передачи целевого идентификатора URI, метода запроса и кода состояния в отклике, в для этого HTTP/2 служат специальные поля псевдозаголовка, начинающиеся с символа двоеточия («:», ASCII 0x3a).

Поля псевдозаголовка не относятся к заголовку HTTP. Конечным точкам недопустимо генерировать поля псевдозаголовка за исключением определенных в этом документе.

Поля псевдозаголовка действительны лишь в том контексте, где они определены. Поля псевдозаголовка, определенные для запросов, недопустимо включать в отклики и наоборот. Поля псевдозаголовка недопустимо включать в трейлер. Конечные точки должны считать запросы и отклики с неопределенными или недействительными полями псевдозаголовков ошибкой форматирования (параграф 8.1.2.6).

Все поля псевдозаголовка должны размещаться в блоке заголовка до обычных полей заголовка. Любые запросы и отклики с полями псевдозаголовка после полей обычного заголовка должны считаться ошибкой форматирования (параграф 8.1.2.6).

8.1.2.2. Поля заголовка, относящиеся к соединению

HTTP/2 не использует поле заголовка Connection для индикации связанных с соединением полей заголовка, в этом протоколе относящиеся к соединению метаданные передаются иными способами. Конечный точкам недопустимо создавать сообщение HTTP/2 с относящимися к соединению полями заголовка. При получении сообщения с такими полями оно должно считаться некорректно сформированным (параграф 8.1.2.6).

Единственным исключением является поле TE, которое может присутствовать в заголовках запросов HTTP/2, но в это поле недопустимо включать какие-либо значения кроме trailers.

Это означает, что промежуточные узлы, преобразующие сообщения HTTP/1.x в HTTP/2 должны удалять все поля заголовка, указанные в поле Connection вместе с этим полем. Таким промежуточным узлам следует также удалять все относящиеся к соединению поля заголовка типа Keep-Alive, Proxy-Connection, Transfer-Encoding и Upgrade, даже если они не указаны в поле Connection.

Примечание. HTTP/2 осознанно не поддерживает обновление до других протоколов. Методы согласования, описанные в разделе 3, считаются достаточными для согласования использования дополнительных протоколов.

8.1.2.3. Поля псевдозаголовка запроса

Поля псевдозаголовков, определенные для запросов HTTP/2 перечислены ниже.

  • Поле :method включает метод HTTP (раздел 4 [RFC7231]).

  • Поле :scheme включает относящуюся к схеме часть целевого идентификатора URI (параграф 3.1 [RFC3986]).

    Значения поля :scheme не ограничиваются схемами http и https для идентификаторов URI. Прокси-серверы и шлюзы могут транслировать запросы для схем, не относящихся к HTTP, позволяя использовать HTTP для взаимодействия с другими (не HTTP) службами.

  • Поле :authority включает часть authority идентификатора URI (параграф 3.2 [RFC3986]). Недопустимо включение в это поле отмененной субкомпоненты userinfo для URI со схемой http или https.

    Для обеспечения гарантии точно воспроизведения строки запроса HTTP/1.1 это поле должно опускаться при трансляции запросов HTTP/1.1, в которых цель запроса указана в форме origin или asterisk (см. параграф 5.3 в [RFC7230]). Клиентам, генерирующим запросы HTTP/2 непосредственно, следует использовать поле псевдозаголовка :authority вместо поля заголовка Host. Промежуточные узлы, преобразующие запрос HTTP/2 в HTTP/1.1, должны создавать поле заголовка Host, если его нет в запросе, путем копирования содержимого поля псевдозаголовка :authority.

  • Поле :path включает части path и query целевого идентификатора URI (path-absolute и необязательная компонента из символа ? И следующей за ним части query, как описано в параграфах 3.3 и 3.4 [RFC3986]). Запрос в форме звездочки (asterisk) включает символ * для поля псевдозаголовка :path.

    Недопустимо оставлять это поле пустым для идентификаторов URI со схемой http или https. Идентификаторы URI со схемами http и https, не содержащие компоненты path, должны включать значение /. Исключением из этого правила является запрос OPTIONS для http или https URI, который не включает компоненты path. Эти запросы должны включать поле псевдозаголовка :path со значением * (см. параграф 5.3.4 [RFC7230]).

Все запросы HTTP/2, за исключением CONNECT (параграф 8.3), должны включать в точности по одному приемлемому значению для полей псевдозаголовка :method, :scheme и :path. Запросы HTTP с пропущенными обязательными полями псевдозаголовка считаются некорректно сформированными (параграф 8.1.2.6).

HTTP/2 не определяет способа передачи идентификатора версии, который включается в строку запроса HTTP/1.1.

8.1.2.4. Поля псевдозаголовка отклика

Для откликов HTTP/2 определено одно поле псевдозаголовка :status, которое включает код состояния HTTP (см. раздел 6 в [RFC7231]). Это поле должно включаться во все отклики, которые в противном будут считаться некорректно сформированными (параграф 8.1.2.6).

HTTP/2 не определяет способа передачи идентификатора версии, который включается в строку состояния HTTP/1.1.

8.1.2.5. Сжатие поля Cookie в заголовке

В полях заголовка Cookie [COOKIE] используется точка с запятой (;) для разделения cookie-пар (или «крошек» — crumbs). Для этого поля не выполняется правило создания списков в HTTP (см. параграф 3.2.2 в [RFC7230]), что препятствует разбиению cookie-пар на разные пары «имя-значение» (name-value). Это может существенно снижать эффективность сжатия при обновлении отдельных cookie-пар.

Для повышения эффективности сжатия поле заголовка Cookie можно разделить на отдельные поля заголовка, каждое их которых включает одну или множество cookie-пар. Если после декомпрессии имеется множество полей Cookie, они должны быть собраны (конкатенация) в одну строку октетов с двухоктетными разделителями 0x3B, 0x20 (точка с запятой и пробел — строка ASCII «; ») до их передачи в не относящийся к HTTP/2 контекст типа соединения HTTP/1.1 или серверного приложения базового HTTP.

Следовательно приведнные ниже два списка полей Cookie семантически эквивалентны.

     cookie: a=b; c=d; e=f

     cookie: a=b
     cookie: c=d
     cookie: e=f
8.1.2.6. Запросы и отклики с некорректным форматом

Некорректно сформированными считаются запросы и отклики, содержащие допустимую последовательность кадров HTTP/2, но неприемлемые по причине наличия избыточных кадров, запрещенных полей в заголовке, отсутствия в заголовке обязательных полей или указания имен полей заголовка с использованием заглавных букв (верхний регистр).

Запрос или отклик с информационными полями (payload) может включать в заголовок поле размера содержимого. Если значение этого поля не соответствует сумме размеров информационных полей в кадрах DATA с содержимым, такой запрос или отклик считается некорректно сформированным. Отклик, для которого не определены информационные поля, как описано в параграфе 3.3.2 [RFC7230], может иметь отличное от 0 поле размера содержимого даже при отсутствии содержимого в кадрах DATA.

Промежуточным узлам, обрабатывающим запросы или отклики HTTP (т. е., всем промежуточным узлам, не выступающим в качестве туннеля) недопустимо пересылать запросы или отклики, сформированные некорректно. Обнаруженные запросы или отклики этого вида должны считаться ошибкой потока (параграф 5.4.2) типа PROTOCOL_ERROR.

Для запросов некорректной формы сервер может передать отклик HTTP до закрытия или сброса потока. Клиентам недопустимо воспринимать отклики некорректной формы. Отметим, что эти требования предназначены для защиты от некоторых распространенных атак на HTTP и по этой причине достаточно строги, поскольку их ослабление может привести к раскрытию уязвимостей в реализациях.

8.1.3. Примеры

В этом параграфе приведены запросы и отклики HTTP/1.1 и эквивалентные запросы и отклики HTTP/2.

Запрос HTTP GET включает поля заголовка запроса без информационного элемента в теле и, следовательно, передается в одном кадре HEADERS, за которым могут следовать кадры CONTINUATION, содержащие упорядоченный блок полей заголовка запроса. Приведенный ниже кадр HEADERS имеет флаги END_HEADERS и END_STREAM, а кадры CONTINUATION не передаются.

     GET /resource HTTP/1.1           HEADERS
     Host: example.org          ==>     + END_STREAM
     Accept: image/jpeg                 + END_HEADERS
                                          :method = GET
                                          :scheme = https
                                          :path = /resource
                                          host = example.org
                                          accept = image/jpeg

Подобно этому, отклик, включающий только поля заголовка, передается в кадре HEADERS (за которым также могут следовать кадры CONTINUATION), содержащем упорядоченный блок полей заголовка отклика.

     HTTP/1.1 304 Not Modified        HEADERS
     ETag: "xyzzy"              ==>     + END_STREAM
     Expires: Thu, 23 Jan ...           + END_HEADERS
                                          :status = 304
                                          etag = "xyzzy"
                                          expires = Thu, 23 Jan ...

Запрос HTTP POST, включающий заголовок запроса и информацию (payload), передается в кадре HEADERS, за которым могут следовать кадры CONTINUATION, содержащие поля заголовка запроса, а также следует один или множество кадров DATA. В последнем кадре CONTINUATION (или кадре HEADERS) устанавливается флаг END_HEADERS, а в последнем кадре DATA — флаг END_STREAM.

     POST /resource HTTP/1.1          HEADERS
     Host: example.org          ==>     - END_STREAM
     Content-Type: image/jpeg           - END_HEADERS
     Content-Length: 123                  :method = POST
                                          :path = /resource
     {двоичные данные}                    :scheme = https

                                      CONTINUATION
                                        + END_HEADERS
                                          content-type = image/jpeg
                                          host = example.org
                                          content-length = 123

                                      DATA
                                        + END_STREAM
                                      {двоичные данные}

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

Отклик, включающий поля заголовка и данные (payload) передается в форме кадра HEADERS, за которым могут следовать кадры CONTINUATION, а затем один или множество кадров DATA, в последнем из которых установлен флаг END_STREAM.

     HTTP/1.1 200 OK                  HEADERS
     Content-Type: image/jpeg   ==>     - END_STREAM
     Content-Length: 123                + END_HEADERS
                                          :status = 200
     {двоичные данные}                    content-type = image/jpeg
                                          content-length = 123

                                      DATA
                                        + END_STREAM
                                      {двоичные данные}

Информационные отклики с кодом состояния 1xx, отличным от 101, передаются в форме кадра HEADERS, за которым могут следовать кадры CONTINUATION.

Трейлерные поля заголовка передаются в виде блока заголовка после блока заголовка запроса или отклика и всех кадров DATA. Кадры HEADERS с трейлерным блоком заголовка имеют флаг END_STREAM.

Приведенный ниже пример включает код состояния 100 (Continue), который передается в откликах на запросы с маркером 100-continue в поле заголовка Expect, и трейлерные поля заголовка.

     HTTP/1.1 100 Continue            HEADERS
     Extension-Field: bar       ==>     - END_STREAM
                                        + END_HEADERS
                                          :status = 100
                                          extension-field = bar

     HTTP/1.1 200 OK                  HEADERS
     Content-Type: image/jpeg   ==>     - END_STREAM
     Transfer-Encoding: chunked         + END_HEADERS
     Trailer: Foo                         :status = 200
                                          content-length = 123
     123                                  content-type = image/jpeg
     {двоичные данные}                    trailer = Foo
     0
     Foo: bar                         DATA
                                        - END_STREAM
                                      {двоичные данные}

                                      HEADERS
                                        + END_STREAM
                                        + END_HEADERS
                                          foo = bar

8.1.4. Механизмы обеспечения надежности для запросов HTTP/2

В HTTP/1.1 клиент HTTP не способен повторить неидемпотентный запрос при возникновении ошибки, поскольку у него нет способа определения причины ошибки. До возникновения ошибки на сервере могла быть выполнена некоторая обработка и повторный запроса моет привести к нежелательным эффектам.

HTTP/2 обеспечивает два механизма предоставления клиенту гарантии того, что запрос не был обработан:

  • кадр GOAWAY показывает наибольший номер потока, который мог быть обработан, поэтому для запроса с большим номером гарантируется безопасность повтора;

  • в RST_STREAM может быть включен код ошибки REFUSED_STREAM для индикации того, что поток был закрыт до начала его обработки, поэтому любой запрос, переданный в сброшенный поток, можно безопасно повторить.

Необработанные запросы не связаны с отказами и клиенты могут автоматически повторять их даже при использовании неидемпотентных методов.

Серверу недопустимо указывать, что поток не обработан, пока он не может этот факт гарантировать. Если кадры потока переданы прикладному уровню для любого потока, для этого потока недопустимо использовать REFUSED_STREAM, а кадр GOAWAY должен включать идентификатор потока, который не меньше идентификатора данного потока.

В дополнение к этим механизмам кадры PING обеспечивают клиентам простой способ проверки соединений. Бездействующее соединение может быть разорвано, поскольку некоторые промежуточные устройства (например, трансляторы адресов и балансировщики нагрузки) просто отбрасывают без уведомления привязки соединений. Кадры PING позволяют клиенту безопасно проверить активность соединения без отправки запроса.

8.2. Выталкивание на сервере

HTTP/2 позволяет серверам отправлять с упреждением (или «выталкивать» — push) отклики (вместе с соответствующими «ожидаемыми» — promised — запросами), связанные с предыдущим запросом этого клиента. Это может быть полезно в тех случаях, когда сервер знает о наличии у него откликов для полного ответа на исходный запрос.

Клиент может запросить отключение выталкивания на сервере, однако это нужно независимо согласовывать для каждого этапа пересылки (hop). Для индикации запрета выталкивания служит установка SETTINGS_ENABLE_PUSH = 0.

Ожидаемые запросы должны быть кэшируемыми (см. параграф 4.2.3 в [RFC7231]), должны быть безопасными (см. параграф 4.2.1 в [RFC7231]) и в них недопустимо включать тело запроса. Клиент, получающий ожидаемый запрос, который не является кэшируемым является заведомо небезопасным или указывает наличие тела запроса, должен сбросить предложенный (promised) поток с ошибкой потока (параграф 5.4.2) типа PROTOCOL_ERROR. Отметим, что это может приводить к сбросу предложенного потока, если клиент не считает недавно определенный метод безопасным.

Вытолкнутые сервером отклики, которые являются кэшируемыми (см. раздел 3 в [RFC7234]), могут сохраняться клиентами, реализующими HTTP-кэш. Вытолкнутые отклики считаются в должной мере проверенными на сервере-источнике (например, если присутствует директива no-cache, как описано в параграфе 5.2.2 [RFC7234]), пока поток, указанный идентификатором предложенного потока, остается открытым.

Некэшируемые вытолкнутые отклики недопустимо сохранять в каком-либо кэше HTTP. Их можно сделать доступными приложению отдельным способом.

Сервер должен включать значение в поле псевдозаголовка :authority, для которого сервер является полномочным (см. параграф 10.1). Клиент должен трактовать PUSH_PROMISE, для которого сервер не является полномочным, как ошибку потока (параграф 5.4.2) типа PROTOCOL_ERROR.

Промежуточный узел может принять вытолкнутый сервером отклик и не переслать его клиенту. Иными словами, использование вытолкнутых данных зависит от посредников. Точно также, промежуточный узел может дополнительно вытолкнуть данные клиенту без участия сервера.

Клиент не может использовать выталкивания. Поэтому сервер, получивший кадр PUSH_PROMISE, должен считать это ошибкой соединения (параграф 5.4.1) типа PROTOCOL_ERROR. Клиенты должны отвергать любые попытки изменить установку для SETTINGS_ENABLE_PUSH отличных от нуля значений, трактуя сообщение как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR.

8.2.1. Запросы на выталкивание

Выталкивание на сервере семантически эквивалентно ответу сервера на запрос, однако в этом случае сам запрос также передает сервер в форме кадра PUSH_PROMISE.

Кадр PUSH_PROMISE включает блок заголовка, содержащий полный набор полей заголовков запроса, которые сервер присваивает этому запросу. Невозможно вытолкнуть отклик на запрос, включающий тело запроса (request body).

Обещанные9 запросы всегда связываются с явным запросом от клиента. Кадры PUSH_PROMISE, передаваемые сервером, отправляются в поток такого явного запроса. Кадр PUSH_PROMISE включает также обещанный (promised) идентификатор потока, который выбирается из доступных серверу идентификаторов потоков (см. параграф 5.1.1).

Поля заголовка в PUSH_PROMISE и любых последующих кадрах CONTINUATION должны быть действительным и полным набором полей заголовка запроса (параграф 8.1.2.3). Сервер должен включить в поле псевдозаголовка :method действительный и безопасный метод. Если клиент получает PUSH_PROMISE без действительного и полного набора полей или поле псевдозаголовка :method не является безопасным, он должен указать в ответе ошибку потока (параграф 5.4.2) типа PROTOCOL_ERROR.

Серверу следует передавать кадры PUSH_PROMISE (параграф 6.6) до отправки каких-либо кадров, ссылающихся на обещанные (promised) отклики. Это позволяет избежать ситуаций ввода клиентом запроса до получения каких-либо кадров PUSH_PROMISE.

Например, если сервер получает запрос на документ, содержащий встроенные ссылки на множество файлов с изображениями, и сервер решил «вытолкнуть» эти дополнительные изображения клиенту, отправка кадров PUSH_PROMISE до передачи кадров DATA, содержащих ссылки на эти изображения, гарантирует, что клиент может узнать о выталкивании ресурсов до того, как обнаружит ссылки на них. Аналогично, если сервер выталкивает отклики, упомянутые в блоке заголовка (например, в полях заголовка Link), отправка PUSH_PROMISE до передачи блока заголовка гарантирует, что клиент не будет запрашивать эти ресурсы.

Передача кадров PUSH_PROMISE клиентом недопустима.

Кадры PUSH_PROMISE могут передаваться сервером в отклике на любой инициированный клиентом поток, но поток должен находиться в состоянии open или half-closed (remote) по отношению к серверу. Кадры PUSH_PROMISE чередуются с кадрами, которые содержат ответ, но они не могут чередоваться с кадрами HEADERS и CONTINUATION, которые содержат один блок заголовка.

Отправка кадра PUSH_PROMISE создает новый поток и переводит его в состояние reserved (local) для сервера и reserved (remote) для клиента.

8.2.2. Отклики Push

После отправки кадра PUSH_PROMISE сервер может начать доставку вытолкнутого отклика как отклика (параграф 8.1.2.4) в инициированном сервером потоке, который использует обещанный идентификатор потока. Сервер использует этот поток для передачи отклика HTTP, используя последовательность кадров, определенную в параграфе 8.1. Этот поток становится «полузакрытым» для клиента (параграф 5.1) после передачи начального кадра HEADERS.

После того, как клиент получает кадр PUSH_PROMISE и решает воспринять вытолкнутый отклик, ему не следует вводить какие-либо запросы, пока не будет закрыт обещанный поток.

Если клиент по какой-либо причине принимает решение о нежелании получать выталкиваемые сервером отклики или сервер слишком долго не начинает отправку обещанного отклика, клиент может передать кадр RST_STREAM с кодом CANCEL или REFUSED_STREAM и указанием идентификатора выталкиваемого потока.

Клиент может использовать параметр SETTINGS_MAX_CONCURRENT_STREAMS для ограничения числа откликов, которые будут одновременно выталкиваться сервером. Анонсирование SETTINGS_MAX_CONCURRENT_STREAMS = 0 запрещает серверу выталкивать отклики, предотвращая создание ненужных потоков. Это не запрещает серверу передавать кадры PUSH_PROMISE; клиенты должны сбрасывать нежелательные потоки.

Клиенты, получающие вытолкнутый отклик, должны проверить полномочность сервера (см. параграф 10.1) или разрешение прокси, предоставившему такой отклик, выполнять эту операцию для соответствующего запроса. Например, серверу, который предоставляет сертификат лишь для example.com DNS-ID или Common Name, не разрешено выталкивать отклик для https://www.example.org/doc.

Отклик для потока PUSH_PROMISE начинается с кадра HEADERS, который сразу переводит поток в состояние half-closed (remote) для сервера и half-closed (local) для клиента, и завершается кадром с END_STREAM, который переводит поток в состояние closed.

Примечание. Клиент никогда не передает кадров с флагом END_STREAM для «серверного выталкивания».

8.3. Метод CONNECT

В HTTP/1.x используется псевдометод CONNECT ([RFC7231], параграф 4.3.6) для преобразования соединения HTTP в туннель к удаленному хосту. CONNECT применяется в основном HTTP для организации сессии TLS с исходным сервером при взаимодействии с ресурсами https.

В HTTP/2 метод CONNECT служит для организации туннеля с удаленным хостом через один поток HTTP/2 с похожими целями. Отображение поля заголовка HTTP работает в соответствии с описанием параграфа «8.1.2.3. Поля псевдозаголовка запроса» с некоторыми отличиями, указанными ниже.

  • В поле псевдозаголовка :method устанавливается значение CONNECT.

  • Поля псевдозаголовка :scheme и :path должны быть опущены.

  • Поле псевдозаголовка :authority указывает хост и порт для соединения (эквивалент authority-form в request-target запросов CONNECT, см. параграф 5.3 в [RFC7230]).

Запрос CONNECT, не соответствующий этим ограничениям, считается некорректно сформированным (параграф 8.1.2.6).

Прокси, поддерживающие метод CONNECT, организуют соединение TCP [TCP] с сервером, указанным полем псевдозаголовка :authority. После организации соединения прокси передает клиенту кадр HEADERS с кодом состояния 2xx, как определено в параграфе 4.3.6 [RFC7231].

После начальных кадров HEADERS, переданных каждым партнером, все последующие кадры DATA соответствуют данным, отправленным в соединение TCP. Данные из всех кадров DATA, отправленных клиентом, передаются посредником серверу TCP, а данные от сервера TCP собираются посредником в кадры DATA. Типы кадров, отличающиеся от DATA и кадров управления потоком (RST_STREAM, WINDOW_UPDATE и PRIORITY) недопустимо передавать в подключенный поток и при получении они должны считаться ошибками потока (параграф 5.4.2).

Соединение TCP может быть закрыто любым из партнеров. Флаг END_STREAM в кадре DATA считается эквивалентом бита TCP FIN. Предполагается, что клиент передает кадр DATA с флагом END_STREAM после приема кадра, содержащего флаг END_STREAM. Прокси, получивший кадр DATA с флагом END_STREAM, передает присоединенные данные с флагом FIN в последнем сегменте TCP. Прокси, получивший сегмент TCP с флагом FIN, передает кадр DATA с флагом END_STREAM. Отметим, что заключительный сегмент TCP или кадр DATA может быть пустым.

Ошибки соединения TCP указываются с помощью RST_STREAM. Прокси считает любую ошибку в соединении TCP, где принят сегмент с установленным битом RST, ошибкой потока (параграф 5.4.2) типа CONNECT_ERROR. Поэтому прокси должен передавать сегмент TCP с флагом RST при обнаружении ошибки потока или соединения HTTP/2.

9. Дополнительные требования HTTP

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

9.1. Управление соединением

Соединения HTTP/2 являются постоянными. Для повышения производительности предполагается, что клиенты не будут закрывать соединения, пока не решат, что сервер больше не нужен (например, уход с конкретной web-страницы) или сервер сам не закроет соединение.

Клиентам не следует открывать более одного соединения HTTP/2 для данной пары хоста и номера порта, где хост выводится из URI, выбранной альтернативной службы [ALT-SVC] или настроенного прокси.

Клиент может создавать дополнительные соединения на замену, вместо соединений, у которых заканчивается пространство доступных идентификаторов потоков (параграф 5.1.1), для обновления ключевого материала соединения TLS или взамен соединения, где возникли ошибки (параграф 5.4.1).

Клиент может открыть несколько соединений с одним адресом IP и портом TCP, используя разные значения SNI10 [TLS-EXT] для получения разных сертификатов TLS, но следует избегать создания нескольких соединений с одинаковой конфигурацией.

Серверам рекомендуется поддерживать открытые соединения как можно дольше, но разрешается незамедлительно разрывать бездействующие соединения при необходимости. Когда любая из сторон решит закрыть транспортное соединение TCP, этой стороне следует сначала передать кадр GOAWAY (параграф 6.8) , чтобы обе точки могли надежно определить, были ли обработаны отправленные ранее кадры и завершить все оставшиеся задачи.

9.1.1. Повторное использование соединений

Соединения, организованные с исходным сервером напрямую или через туннель, созданный с помощью метода CONNECT (параграф 8.3), можно использовать повторно для запросов с множеством разных компонент URI authority. Повторное соединение может применяться, пока исходный сервер остается полномочным (параграф 10.1). Для соединений TCP без TLS это зависит от наличия хоста с именем, преобразующимся в такой же адрес IP.

Для ресурсов https повторное использование соединений зависит также от наличия сертификата, который действителен для хоста из URI. Представленный сервером сертификат должен проходить все проверки, которые клиент выполняет при организации нового соединения TLS с хостом из URI.

Исходный сервер может представить сертификат с множеством атрибутов или имен subjectAltName с шаблонами, один из которых действует для полномочий (authority) из URI. Например, сертификат с subjectAltName = *.example.com может разрешить использование того же соединения для запроса URI, начинающегося с https://a.example.com/ или https://b.example.com/.

В некоторых случаях повторное использование соединения для разных источников может приводить к передаче запроса неподходящему исходному серверу. Например, промежуточное устройство может разорвать соединение TLS, если это устройство применяет расширение TLS SNI [TLS-EXT] для выбора исходного сервера. Это означает, что клиент может отправить конфиденциальную информацию серверу, который не предполагался целью запроса, хотя этот сервер и является полномочным.

Сервер, не желающий разрешать клиентам повторные соединения, может указать, что он не является полномочным для запроса, путем отправки кода 421 (Misdirected Request) в ответе на запрос (см. параграф 9.1.2).

Клиент, настроенный на использование прокси через HTTP/2, направляет запросы этому посреднику через одно соединение, т. е. все запросы, передаваемые через прокси, используют одно соединение с посредником.

9.1.2. Код состояния 421 (ошибочно направленный запрос)

Код 421 (Misdirected Request — ошибочно направленный запрос) указывает, что запрос был направлен на сервер, не способный создать отклик. Этот код может быть передан сервером, не настроенным на передачу откликов для комбинации scheme и authority, включенных в URI запроса11.

Клиент, получивший код 421 от сервера может повторить запрос (в зависимости от того, является ли метод запроса идемпотентным) через другое соединение. Это возможно при повторном использовании соединения (параграф 9.1.1) или при выборе другого сервиса [ALT-SVC].

Этот код состояния недопустимо генерировать прокси.

9.2. Использование возможностей TLS

Реализации HTTP/2 должны применять TLS версии 1.2 [TLS12] или выше при работе HTTP/2 через TLS. Следует выполнять общие рекомендации по использованию TLS [TLSBCP] с дополнительными ограничениями, присущими HTTP/2.

Реализация TLS должна поддерживать расширение SNI [TLS-EXT] для TLS. Клиенты HTTP/2 должны указывать имя целевого домена при согласовании TLS.

От систем HTTP/2, согласующих TLS 1.3 и выше, требуется лишь поддержка использования расширения SNI, для систем TLS 1.2 имеются дополнительные требования, приведенные в следующих параграфах. Реализациям настоятельно рекомендуется применять по умолчанию соответствующие параметры, но в конечном итоге система сама отвечает за соответствие требованиям.

9.2.1. Возможности TLS 1.2

В этом параграфе описаны ограничения набора функций TLS 1.2, которые могут быть применены в HTTP/2. Из-за ограничений развертываемых систем отказы при согласовании TLS могут быть не возможны, если не выполняются приведенные здесь ограничения. Конечная точка может незамедлительно разорвать соединение HTTP/2, в котором не выполняются эти требования TLS, с возвратом ошибки соединения (параграф 5.4.1) типа INADEQUATE_SECURITY.

В системах HTTP/2 на основе TLS 1.2 сжатие должно быть отключено. Компрессия TLS может приводить к раскрытию информации, которая в иных условиях не была бы раскрыта [RFC3749]. Базовая компрессия не нужна, поскольку HTTP/2 обеспечивает функции сжатия, которые лучше осведомлены о контексте и поэтому больше подходят для использования в целях повышения производительности, безопасности или улучшения иных свойств.

Системы HTTP/2 на основе TLS 1.2 должны запрещать повторное согласование. Конечная точка должна трактовать повторное согласование TLS как ошибку соединения (параграф 5.4.1) типа PROTOCOL_ERROR. Отметим, что запрет повторного согласования может приводить к возникновению долгоживущих, не используемых соединений по причине ограничения числа сообщений, разрешенных для шифрования базовому шифронабору.

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

Это эффективно предотвращает использование повторного согласования в ответ на запрос конкретного защищенного ресурса. Будущие спецификации могут предложить решение для поддержки таких ситуаций. В качестве альтернативы сервер может использовать ошибку (параграф 5.4) типа HTTP_1_1_REQUIRED для запроса у клиента использования протокола, поддерживающего повторное согласование.

Реализации должны поддерживать обмен эфемерными ключами размером не менее 2048 битов для шифров, использующих эфемерное конечное поле DHE12 [TLS12], и 224 битов для шифров, использующих эфемерные эллиптические кривые ECDHE13 [RFC4492]. Клиенты должны воспринимать DHE размером до 4096 битов. Конечные точки могут считать согласование ключей, размер которых меньше нижнего предела, как ошибку соединения (параграф 5.4.1) типа INADEQUATE_SECURITY.

9.2.2. Шифры TLS 1.2

В системах HTTP/2 на базе TLS 1.2 не следует использовать какие-либо шифры из числа включенных в «черный список» (Приложение A).

Конечные точки могут возвращать ошибку соединения (параграф 5.4.1) типа INADEQUATE_SECURITY при попытке использования шифров из «черного списка». Системы, выбравшие использование таких шифров, рискуют столкнуться с сообщениями об ошибках, если они не знают, что партнеры воспримут такие шифры.

Реализациям недопустимо генерировать ошибки в ответ на согласование шифров, не включенных в «черный список». Поэтому когда клиенты предлагают шифр, отсутствующий в «черном списке», они должны быть готовы использовать этот шифр с HTTP/2.

«Черный список» включает шифры, которые в TLS 1.2 являются обязательными, а это означает, что системы TLS 1.2 могут иметь не пересекающиеся наборы разрешенных шифров. Для предотвращения этой проблемы, вызывающей отказы при согласовании TLS, системы HTTP/2, использующие TLS 1.2, должны поддерживать шифр TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [TLS-ECDHE] с эллиптической кривой P-256 [FIPS186].

Отметим, что клиенты могут анонсировать поддержку шифров из «черного списка» для возможности соединений с серверами, которые не поддерживают HTTP/2. Это позволяет серверу выбрать HTTP/1.1 с шифром из «черного списка» HTTP/2. Однако это может приводить к согласованию с HTTP/2 с шифром из «черного списка», если прикладной протокол и шифр выбираются независимо.

10. Вопросы безопасности

10.1. Полномочия сервера

HTTP/2 опирается на определение полномочий в HTTP/1.1 для решения вопроса о полномочиях сервера предоставлять данный отклик (см. параграф 9.1 в [RFC7230]). Это зависит от локальной трансляции имени в схеме URI «http» и полномочий аутентифицированного сервера для схемы «https» (см. раздел 3 в [RFC2818]).

10.2. Кросспротокольные атаки

В кросспротокольной атаке злоумышленник вынуждает клиента инициировать транзакцию с неким протоколом для сервера, который понимает другой протокол. Атакующий может оказаться способен организовать транзакцию, которая представляется действительной для второго протокола. В комбинации с возможностями web-контекста это может применяться для воздействия на слабо защищенные серверы в частных сетях.

Завершение согласования TLS с идентификатором ALPN для HTTP/2 может считаться достаточной защитой от кросспротокольных атак. ALPN обеспечивает позитивную индикацию желания сервера обрабатывать HTTP/2, что предотвращает атаки на другие протоколы на базе TLS.

Использование TLS осложняет атакующему контроль над данными, которые могут служит для кросспротокольных атак при использовании открытых (нешифрованных) протоколов.

Открытая (без шифрования) версия HTTP/2 имеет минимальную защиту от кросспротокольных атак. Префикс соединения (параграф 3.5) содержит строку, предназначенную для того, чтобы запутать серверы HTTP/1.1, но никакой специальной защиты для других протоколов не предусмотрено. Сервер, готовый игнорировать части запроса HTTP/1.1, содержащие поле заголовка Upgrade в дополнение к клиентскому префиксу соединения, может подвергаться кросспротокольным атакам.

10.3. Атаки с промежуточной инкапсуляцией

Кодирование поля заголовка HTTP/2 позволяет указывать имена, которые не являются разрешенными именами полей в синтаксисе сообщений Internet, используемом HTTP/1.1. Запросы и отклики с недопустимыми именами полей должны считаться некорректно сформированными (параграф 8.1.2.6). Поэтому посредник не может транслировать запрос или отклик HTTP/2, содержащий недопустимое имя поля, в сообщение HTTP/1.1.

Аналогично, HTTP/2 разрешает значения полей, которые не действительны. Хотя большинство значений, которые могут быть закодированы, не меняют синтаксический анализ поля заголовка, символы возврата каретки (CR, ASCII 0xd), перевода строки (LF, ASCII 0xa) и nul-символ (NUL, ASCII 0x0) могут использоваться атакующим при дословной трансляции. Любой запрос или отклик с символами, которые не разрешены в поле заголовка, должен считаться некорректно сформированным (параграф 8.1.2.6). Разрешенные символы определены правилом field-content ABNF а параграфе 3.2 [RFC7230].

10.4. Кэшируемость вытолкнутых откликов

Выталкиваемые отклики не имеют явного запроса от клиента, запрос предоставляется сервером в кадре PUSH_PROMISE.

Кэширование вытолкнутых откликов возможно на основе рекомендаций, представленных исходным сервером в поле заголовка Cache-Control. Однако при этом могут возникать проблемы, если на одном серверном хосте имеется несколько арендаторов. Например, сервер может предлагать каждому из множества пользователей небольшую часть своего пространства URI.

Когда множество арендаторов совместно использует пространство на одном сервере, этот сервер должен гарантировать, что арендаторы не смогут выталкивать представления ресурсов, для которых они не имеют полномочий. Невыполнение этого требования позволит арендаторам выдавать представления, которые обслуживаться за пределами кэша, переопределяя фактическое представление, которое обеспечил полномочный сервер.

Вытолкнутые отклики, для которых исходный сервер не является полномочным (параграф 10.1) недопустимо использовать или кэшировать.

10.5. Отказ в обслуживании

Соединению HTTP/2 для работы может потребоваться больше ресурсов, нежели соединению HTTP/1.1. Использование сжатия заголовков и управления потоком данных зависит от выделения ресурсов для сохранения большего числа состояний. Настройки этих функций гарантируют строгое ограничение выделяемой памяти.

Число кадров PUSH_PROMISE таким способом не ограничивается. Клиентам, воспринимающим выталкивание от сервера, следует ограничить число потоков, которым разрешено находиться в состоянии reserved (remote). Избыточное число выталкиваемых сервером потоков может считаться ошибкой потока (параграф 5.4.2) типа ENHANCE_YOUR_CALM.

Возможности обработки не могут ограничиваться так же эффективно, как возможности хранения состояний.

Кадры SETTINGS могут использоваться для принуждения партнера затрачивать на обработку дополнительное время. Это можно сделать путем бессмысленного изменения параметров SETTINGS, установки множества неопределенных параметров или многократного изменения одного и того же параметра в кадре. Кадры WINDOW_UPDATE или PRIORITY могут быть использованы для принуждения к ненужному расходу ресурсов.

С помощью большого числа мелких или пустых кадров можно вынудить партнера затрачивать значительное время на обработку заголовков. Однако следует отметить, что использование таких кадров может быть легитимным, например, для передачи пустых кадров DATA или CONTINUATION в конце потока.

Сжатие заголовков также позволяет потерю ресурсов на обработку. Возможные варианты злоупотреблений сжатием описаны в разделе 7 [COMPRESSION].

Ограничения в параметрах SETTINGS не могут быть снижены мгновенно и это создает для конечных точек риск, связанный с превышением партнером вновь установленных пределов. В частности, сразу после организации соединения установленные сервером ограничения могут быть не известны клиентам и могут быть превышены без явного нарушения протокола.

Все эти возможности — изменение SETTINGS, мелкие кадры, сжатие заголовков — могут применяться легитимно. Они создают угрозы лишь при ненужном или чрезмерном использовании.

Конечная точка, которая не отслеживает такое поведение, подвергает себя риску атак, нацеленных на отказ в обслуживании. Реализациям следует контролировать использование этих функций и устанавливать для него ограничения. Конечная точка может считать сомнительные действия ошибкой соединения (параграф 5.4.1) типа ENHANCE_YOUR_CALM.

10.5.1. Ограничения размера блока заголовков

Большой блок заголовков (параграф 4.3) может вынуждать реализацию представлять большое число состояний. Важные для маршрутизации поля заголовка могут оказаться в конце блока, что будет препятствовать организации потока полей заголовков к конечному адресату. Упорядочение и другие причины, такие как обеспечение корректности кэширования, означают, что конечной точке потребуется буферизовать весь блок заголовков. Поскольку размер блока заголовков жестко не ограничен, некоторые конечные точки будут вынуждены выделять большой блок доступной памяти для полей заголовков.

Конечная точка может использовать SETTINGS_MAX_HEADER_LIST_SIZE для информирования партнеров об ограничениях на размер блока заголовков. Этот параметр носит рекомендательный характер, поэтому конечная точка может передавать блоки заголовков, выходящие за этот предел, что ведет к риску трактовки запроса или отклика, как некорректно сформированного. Этот параметр относится к соединению, поэтому любой запрос или отклик может столкнуться с этапом пересылки (hop), где предел не известен и имеет более жесткое ограничение. Промежуточный узел может попытаться предотвратить эту проблему, передавая значения, представленные другими партнерами, но не обязан делать этого.

Сервер, который получает блок заголовков с размером больше, чем он готов обрабатывать, может передать отклик HTTP 431 (Request Header Fields Too Large) [RFC6585]. Клиент может отбрасывать отклики, которые он не способен обработать. Блок заголовков должен обрабатываться для поддержки согласованного состояния соединения, пока соединение не закрыто.

10.5.2. Проблемы CONNECT

Метод CONNECT позволяет создать непропорциональную нагрузку на прокси, поскольку создание потоков является «недорогим» в сравнении с созданием и поддержкой соединений TCP. Прокси-сервер может также поддерживать некоторые ресурсы соединения TCP после закрытия потока, который передает запрос CONNECT, поскольку исходящее соединение TCP остается в состоянии TIME_WAIT. В результате прокси не может ограничивать ресурсы, потребляемые запросами CONNECT, на основании SETTINGS_MAX_CONCURRENT_STREAMS.

10.6. Использование сжатия

Компрессия может позволить атакующему восстановить секретные данные, которые были сжаты в одном контексте с данными, контролируемыми злоумышленником. HTTP/2 позволяет сжимать поля заголовков (параграф 4.3) и рассмотренные ниже проблемы присущи также к использованию сжатого кодирования содержимого HTTP (см. параграф 3.1.2.1 в [RFC7231]).

Имеются очевидные атаки на компрессию, использующие характеристики web (например, [BREACH]). Атакующий инициирует множество запросов, содержащих разный открытый текст, наблюдая размер полученного шифрованного текста, который будет короче при корректном предположении о секрете.

Реализациям, взаимодействующим по защищенному каналу, недопустимо совместно сжимать содержимое конфиденциальных и контролируемых атакующим данных, если для каждого источника данных не применяется отдельный словарь. Недопустимо применять сжатие, если источник данных не может быть надежно определен. Базовое сжатие потока, например, обеспечиваемое TLS, недопустимо применять с HTTP/2 (см. параграф 9.2).

Дополнительное рассмотрение вопросов, связанных со сжатием полей заголовков, приведено в [COMPRESSION].

10.7. Использование заполнения

Заполнение в HTTP/2 не предназначено для замены заполнений «общего назначения», таких как в TLS [TLS12]. Избыточное заполнение может даже быть контрпродуктивным. Корректность использования заполнения может зависеть от информации о дополняемых данных.

Для смягчения атак, основанных на сжатии, запрет или ограничение компрессии могут оказаться предпочтительней заполнения.

Заполнение может служить для сокрытия точного размера содержимого кадра и применяться для смягчения некоторых типичных для HTTP атак, например, атак, где сжатое содержимое включает контролируемые злоумышленником открытые данные вместе с секретной информацией (например, [BREACH]).

Использование заполнения может приводить к незаметному сразу снижению уровня защиты. В лучшем случае, заполнение лишь осложняет атакующему получение информации о размере, увеличивая число кадров, которые злоумышленник должен наблюдать. Некорректно реализованные схемы заполнения легко преодолеваемы. В частности, случайное заполнение с предсказуемым распределением обеспечивает очень слабую защиту. Аналогично, дополнение полей данных до фиксированного размера предоставляет информацию об этом размере, если атакующий контролирует открытые данные.

Промежуточным узлам следует сохранять заполнение в кадрах DATA, но они могут отбрасывать заполнение кадров HEADERS и PUSH_PROMISE. Достаточной причиной изменения заполнения кадров на промежуточных узлах является улучшение защиты, обеспечиваемой заполнением.

10.8. Вопросы приватности

Некоторые характеристики HTTP/2 предоставляют наблюдателю возможность сопоставить действия одного клиента или сервера в течение временного интервала. Это включает значения параметров, способ управления окнами контроля потока данных, способы указания приоритета для потоков, время реакции на «раздражители» и обработку любых свойств, управляемых параметрами.

Наблюдая различия в поведении, злоумышленник может создать «отпечатки» для каждого клиента, как указано в параграфе 1.8 [HTML5].

Предпочтение HTTP/2 использовать единственное соединение TCP позволяет сопоставить активность пользователей на сайте. Повторное использование соединений для разных источников позволяет отслеживать эти источники.

Поскольку кадры PING и SETTINGS запрашивают незамедлительный отклик, они могут использоваться конечной точкой при измерении задержки для данного партнера. В некоторых случаях это может оказывать влияние на приватность.

11. Согласование с IANA

Добавляется строка идентификации протокола HTTP/2 в реестр «Application-Layer Protocol Negotiation (ALPN) Protocol Ids», организованный [TLS-ALPN].

Этот документ организует реестры для типов кадров, параметров и кодов ошибок, представленные ниже.

Этот документ регистрирует поле заголовка HTTP2-Settings для использования в HTTP, а также код состояния 421 (Misdirected Request).

Документ регистрирует метод PRI для использования в HTTP с целью предотвращения конфликтов с префиксами соединений (параграф 3.5).

11.1. Регистрация идентификационных строк HTTP/2

Этот документ определяет две регистрации для идентификации протокола HTTP/2 (см. параграф 3.3) в реестре «Application-Layer Protocol Negotiation (ALPN) Protocol Ids», организованном [TLS-ALPN].

Строка «h2» указывает использование HTTP/2 на базе TLS.

Protocol:  HTTP/2 over TLS
Identification Sequence:  0x68 0x32 ("h2")
Specification:  This document

Строка «h2c» указывает использование HTTP/2 на базе TCP без шифрования.

Protocol:  HTTP/2 over TCP
Identification Sequence:  0x68 0x32 0x63 ("h2c")
Specification:  This document

11.2. Реестр типов кадров

Этот документ организует реестр типов кадров HTTP/2. Реестр «HTTP/2 Frame Type» содержит 8-битовые значения, выделяемые по процедуре «IETF Review» или «IESG Approval» [RFC5226] для диапазона значений 0x00 — 0xef. Диапазон 0xf0 — 0xff зарезервирован для экспериментов (Experimental Use).

Для новых записей в реестре требуется предоставить перечисленные ниже сведения.

Frame Type:  Имя или метка для типа кадров.
Code:  8-битовый код, выделенный для типа кадра.
Specification:  Ссылка на спецификацию, включающую описание схемы кадра, его семантику и используемые флаги, которые присутствуют в зависимости от значения типа флага.

Типы, регистрируемые данным документом, приведены в таблице.

 

Тип кадра

Код

Параграф

DATA

0x0

6.1

HEADERS

0x1

6.2

PRIORITY

0x2

6.3

RST_STREAM

0x3

6.4

SETTINGS

0x4

6.5

PUSH_PROMISE

0x5

6.6

PING

0x6

6.7

GOAWAY

0x7

6.8

WINDOW_UPDATE

0x8

6.9

CONTINUATION

0x9

6.10

 

11.3. Реестр параметров

Этот документ организует реестр параметров HTTP/2. Реестр «HTTP/2 Settings» содержит 16-битовые значения, выделяемые по процедуре «Expert Review» [RFC5226] из диапазона 0x0000 — 0xefff. Значения 0xf000 — 0xffff зарезервированы для экспериментов (Experimental Use).

При новых регистрациях рекомендуется предоставлять перечисленную ниже информацию.

Name:  Символьное имя параметра (необязательно).
Code:  16-битовый код параметра.
Initial Value:  Начальное значение параметра.
Specification:  Необязательная ссылка на спецификацию, описывающую параметр.

Параметры, регистрируемые данным документом, приведены в таблице.

 

Имя

Код

Начальное значение

Спецификация

HEADER_TABLE_SIZE

0x1

4096

Параграф 6.5.2

ENABLE_PUSH

0x2

1

Параграф 6.5.2

MAX_CONCURRENT_STREAMS

0x3

(бесконечность)

Параграф 6.5.2

INITIAL_WINDOW_SIZE

0x4

65535

Параграф 6.5.2

MAX_FRAME_SIZE

0x5

16384

Параграф 6.5.2

MAX_HEADER_LIST_SIZE

0x6

(бесконечность)

Параграф 6.5.2

 

11.4. Реестр кодов ошибок

Этот документ организует реестр кодов ошибок для HTTP/2. Реестр «HTTP/2 Error Code» содержит 32-битовые значения кодов и пополняется на основе процедуры «Expert Review» [RFC5226].

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

В новых регистрациях рекомендуется указывать приведенную ниже информацию.

Name:  Имя для кода ошибки. Задание имен для ошибок не является обязательным.
Code:  32-битовый код ошибки.
Description:  Краткое описание семантики кода (более подробное, если спецификации нет). 
Specification:  Необязательная ссылка на спецификацию, определяющую код ошибки.

Коды, регистрируемые данным документом, приведены в таблице.

Имя

Код

Описание

Спецификация

NO_ERROR

0x0

Аккуратное завершение

Раздел 7

PROTOCOL_ERROR

0x1

Обнаружена протокольная ошибка

Раздел 7

INTERNAL_ERROR

0x2

Отказ реализации

Раздел 7

FLOW_CONTROL_ERROR

0x3

Превышение предела, заданного для управления потоком данных

Раздел 7

SETTINGS_TIMEOUT

0x4

Установки не подтверждены

Раздел 7

STREAM_CLOSED

0x5

Получен кадр для закрытого потока

Раздел 7

FRAME_SIZE_ERROR

0x6

Некорректный размер кадра

Раздел 7

REFUSED_STREAM

0x7

Поток не обработан

Раздел 7

CANCEL

0x8

Поток прерван

Раздел 7

COMPRESSION_ERROR

0x9

Состояние компрессии не обновлено

Раздел 7

CONNECT_ERROR

0xa

Ошибка соединения TCP для метода CONNECT

Раздел 7

ENHANCE_YOUR_CALM

0xb

Выход за пределы возможностей обработки

Раздел 7

INADEQUATE_SECURITY

0xc

Согласованные параметры TLS не приемлемы

Раздел 7

HTTP_1_1_REQUIRED

0xd

Требуется использовать HTTP/1.1 для запроса

Раздел 7

11.5. Регистрация поля заголовка HTTP2-Settings

Этот документ регистрирует поле заголовка HTTP2-Settings в реестре Permanent Message Header Field Names [BCP90].

Header field name:  HTTP2-Settings
Applicable protocol:  http
Status:  standard
Author/Change controller:  IETF
Specification document(s):  Section 3.2.1 of this document
Related information:  This header field is only used by an HTTP/2
      client for Upgrade-based negotiation.

11.6. Регистрация метода PRI

Этот документ регистрирует метод PRI в реестре HTTP Method Registry, параграф 8.1 [RFC7231].

Method Name:  PRI
Safe:  Yes
Idempotent:  Yes
Specification document(s):  Section 3.5 of this document
Related information:  This method is never used by an actual client.
      This method will appear to be used when an HTTP/1.1 server or
      intermediary attempts to parse an HTTP/2 connection preface.

11.7. Код состояния 421 (Misdirected Request)

Этот документ регистрирует код состояния HTTP 421 (Misdirected Request) в реестре HTTP Status Codes, параграф 8.2 [RFC7231].

Status Code:  421
Short Description:  Misdirected Request
Specification:  Section 9.1.2 of this document

11.8. Обновление маркера h2c

Этот документ регистрирует маркер обновления h2c в реестре HTTP Upgrade Tokens, параграф 8.6 [RFC7230].

Value:  h2c
Description:  Hypertext Transfer Protocol version 2 (HTTP/2)
Expected Version Tokens:  None
Reference:  Section 3.2 of this document

12. Литература

12.1. Нормативные документы

[COMPRESSION] Peon, R. and H. Ruellan, «HPACK: Header Compression for HTTP/2», RFC 7541, DOI 10.17487/RFC7541, May 2015, <http://www.rfc-editor.org/info/rfc7541>.

[COOKIE] Barth, A., «HTTP State Management Mechanism», RFC 6265, DOI 10.17487/RFC6265, April 2011, <http://www.rfc-editor.org/info/rfc6265>.

[FIPS186] NIST, «Digital Signature Standard (DSS)», FIPS PUB 186-4, July 2013, <http://dx.doi.org/10.6028/NIST.FIPS.186-4>.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC2818] Rescorla, E., «HTTP Over TLS», RFC 2818, DOI 10.17487/RFC2818, May 2000, <http://www.rfc-editor.org/info/rfc2818>.

[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, «Uniform Resource Identifier (URI): Generic Syntax», STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005, <http://www.rfc-editor.org/info/rfc3986>.

[RFC4648] Josefsson, S., «The Base16, Base32, and Base64 Data Encodings», RFC 4648, DOI 10.17487/RFC4648, October 2006, <http://www.rfc-editor.org/info/rfc4648>.

[RFC5226] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 5226, DOI 10.17487/RFC5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5234] Crocker, D., Ed. and P. Overell, «Augmented BNF for Syntax Specifications: ABNF», STD 68, RFC 5234, DOI 10.17487/ RFC5234, January 2008, <http://www.rfc-editor.org/info/rfc5234>.

[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing», RFC 7230, DOI 10.17487/RFC7230, June 2014, <http://www.rfc-editor.org/info/rfc7230>.

[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content», RFC 7231, DOI 10.17487/RFC7231, June 2014, <http://www.rfc-editor.org/info/rfc7231>.

[RFC7232] Fielding, R., Ed. and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests», RFC 7232, DOI 10.17487/RFC7232, June 2014, <http://www.rfc-editor.org/info/rfc7232>.

[RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Range Requests», RFC 7233, DOI 10.17487/RFC7233, June 2014, <http://www.rfc-editor.org/info/rfc7233>.

[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Caching», RFC 7234, DOI 10.17487/RFC7234, June 2014, <http://www.rfc-editor.org/info/rfc7234>.

[RFC7235] Fielding, R., Ed. and J. Reschke, Ed., «Hypertext Transfer Protocol (HTTP/1.1): Authentication», RFC 7235, DOI 10.17487/RFC7235, June 2014, <http://www.rfc-editor.org/info/rfc7235>.

[TCP] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, DOI 10.17487/RFC0793, September 1981, <http://www.rfc-editor.org/info/rfc793>.

[TLS-ALPN] Friedl, S., Popov, A., Langley, A., and E. Stephan, «Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension», RFC 7301, DOI 10.17487/RFC7301, July 2014, <http://www.rfc-editor.org/info/rfc7301>.

[TLS-ECDHE] Rescorla, E., «TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)», RFC 5289, DOI 10.17487/RFC5289, August 2008, <http://www.rfc-editor.org/info/rfc5289>.

[TLS-EXT] Eastlake 3rd, D., «Transport Layer Security (TLS) Extensions: Extension Definitions», RFC 6066, DOI 10.17487/RFC6066, January 2011, <http://www.rfc-editor.org/info/rfc6066>.

[TLS12] Dierks, T. and E. Rescorla, «The Transport Layer Security (TLS) Protocol Version 1.2», RFC 5246, DOI 10.17487/ RFC5246, August 2008, <http://www.rfc-editor.org/info/rfc5246>.

12.2. Дополнительная литература

[ALT-SVC] Nottingham, M., McManus, P., and J. Reschke, «HTTP Alternative Services», Work in Progress14, draft-ietf-httpbis-alt-svc-06, February 2015.

[BCP90] Klyne, G., Nottingham, M., and J. Mogul, «Registration Procedures for Message Header Fields», BCP 90, RFC 3864, September 2004, <http://www.rfc-editor.org/info/bcp90>.

[BREACH] Gluck, Y., Harris, N., and A. Prado, «BREACH: Reviving the CRIME Attack», July 2013, <http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf>.

[HTML5] Hickson, I., Berjon, R., Faulkner, S., Leithead, T., Doyle Navara, E., O’Connor, E., and S. Pfeiffer, «HTML5», W3C Recommendation REC-html5-20141028, October 2014, <http://www.w3.org/TR/2014/REC-html5-20141028/>.

[RFC3749] Hollenbeck, S., «Transport Layer Security Protocol Compression Methods», RFC 3749, DOI 10.17487/RFC3749, May 2004, <http://www.rfc-editor.org/info/rfc3749>.

[RFC4492] Blake-Wilson, S., Bolyard, N., Gupta, V., Hawk, C., and B. Moeller, «Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)», RFC 4492, DOI 10.17487/RFC4492, May 2006, <http://www.rfc-editor.org/info/rfc4492>.

[RFC6585] Nottingham, M. and R. Fielding, «Additional HTTP Status Codes», RFC 6585, DOI 10.17487/RFC6585, April 2012, <http://www.rfc-editor.org/info/rfc6585>.

[RFC7323] Borman, D., Braden, B., Jacobson, V., and R. Scheffenegger, Ed., «TCP Extensions for High Performance», RFC 7323, DOI 10.17487/RFC7323, September 2014, <http://www.rfc-editor.org/info/rfc7323>.

[TALKING] Huang, L., Chen, E., Barth, A., Rescorla, E., and C. Jackson, «Talking to Yourself for Fun and Profit», 2011, <http://w2spconf.com/2011/papers/websocket.pdf>.

[TLSBCP] Sheffer, Y., Holz, R., and P. Saint-Andre, «Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)», BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015, <http://www.rfc-editor.org/info/rfc7525>.

Приложение A. «Черный список» шифров TLS 1.2

Реализация HTTP/2 может считать согласование любого из перечисленных ниже шифров с TLS 1.2 ошибкой соединения (параграф 5.4.1) типа INADEQUATE_SECURITY:

  • TLS_NULL_WITH_NULL_NULL;

  • TLS_RSA_WITH_NULL_MD5;

  • TLS_RSA_WITH_NULL_SHA;

  • TLS_RSA_EXPORT_WITH_RC4_40_MD5;

  • TLS_RSA_WITH_RC4_128_MD5;

  • TLS_RSA_WITH_RC4_128_SHA;

  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5;

  • TLS_RSA_WITH_IDEA_CBC_SHA;

  • TLS_RSA_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_RSA_WITH_DES_CBC_SHA;

  • TLS_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_DH_DSS_WITH_DES_CBC_SHA;

  • TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA;

  • TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_DH_RSA_WITH_DES_CBC_SHA;

  • TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_DHE_DSS_WITH_DES_CBC_SHA;

  • TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA;

  • TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_DHE_RSA_WITH_DES_CBC_SHA;

  • TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_DH_anon_EXPORT_WITH_RC4_40_MD5;

  • TLS_DH_anon_WITH_RC4_128_MD5;

  • TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA;

  • TLS_DH_anon_WITH_DES_CBC_SHA;

  • TLS_DH_anon_WITH_3DES_EDE_CBC_SHA;

  • TLS_KRB5_WITH_DES_CBC_SHA;

  • TLS_KRB5_WITH_3DES_EDE_CBC_SHA;

  • TLS_KRB5_WITH_RC4_128_SHA;

  • TLS_KRB5_WITH_IDEA_CBC_SHA;

  • TLS_KRB5_WITH_DES_CBC_MD5;

  • TLS_KRB5_WITH_3DES_EDE_CBC_MD5;

  • TLS_KRB5_WITH_RC4_128_MD5;

  • TLS_KRB5_WITH_IDEA_CBC_MD5;

  • TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA;

  • TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA;

  • TLS_KRB5_EXPORT_WITH_RC4_40_SHA;

  • TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5;

  • TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5;

  • TLS_KRB5_EXPORT_WITH_RC4_40_MD5;

  • TLS_PSK_WITH_NULL_SHA;

  • TLS_DHE_PSK_WITH_NULL_SHA;

  • TLS_RSA_PSK_WITH_NULL_SHA;

  • TLS_RSA_WITH_AES_128_CBC_SHA;

  • TLS_DH_DSS_WITH_AES_128_CBC_SHA;

  • TLS_DH_RSA_WITH_AES_128_CBC_SHA;

  • TLS_DHE_DSS_WITH_AES_128_CBC_SHA;

  • TLS_DHE_RSA_WITH_AES_128_CBC_SHA;

  • TLS_DH_anon_WITH_AES_128_CBC_SHA;

  • TLS_RSA_WITH_AES_256_CBC_SHA;

  • TLS_DH_DSS_WITH_AES_256_CBC_SHA;

  • TLS_DH_RSA_WITH_AES_256_CBC_SHA;

  • TLS_DHE_DSS_WITH_AES_256_CBC_SHA;

  • TLS_DHE_RSA_WITH_AES_256_CBC_SHA;

  • TLS_DH_anon_WITH_AES_256_CBC_SHA;

  • TLS_RSA_WITH_NULL_SHA256;

  • TLS_RSA_WITH_AES_128_CBC_SHA256;

  • TLS_RSA_WITH_AES_256_CBC_SHA256;

  • TLS_DH_DSS_WITH_AES_128_CBC_SHA256;

  • TLS_DH_RSA_WITH_AES_128_CBC_SHA256;

  • TLS_DHE_DSS_WITH_AES_128_CBC_SHA256;

  • TLS_RSA_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA;

  • TLS_DHE_RSA_WITH_AES_128_CBC_SHA256;

  • TLS_DH_DSS_WITH_AES_256_CBC_SHA256;

  • TLS_DH_RSA_WITH_AES_256_CBC_SHA256;

  • TLS_DHE_DSS_WITH_AES_256_CBC_SHA256;

  • TLS_DHE_RSA_WITH_AES_256_CBC_SHA256;

  • TLS_DH_anon_WITH_AES_128_CBC_SHA256;

  • TLS_DH_anon_WITH_AES_256_CBC_SHA256;

  • TLS_RSA_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA;

  • TLS_PSK_WITH_RC4_128_SHA;

  • TLS_PSK_WITH_3DES_EDE_CBC_SHA;

  • TLS_PSK_WITH_AES_128_CBC_SHA;

  • TLS_PSK_WITH_AES_256_CBC_SHA;

  • TLS_DHE_PSK_WITH_RC4_128_SHA;

  • TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA;

  • TLS_DHE_PSK_WITH_AES_128_CBC_SHA;

  • TLS_DHE_PSK_WITH_AES_256_CBC_SHA;

  • TLS_RSA_PSK_WITH_RC4_128_SHA;

  • TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA;

  • TLS_RSA_PSK_WITH_AES_128_CBC_SHA;

  • TLS_RSA_PSK_WITH_AES_256_CBC_SHA;

  • TLS_RSA_WITH_SEED_CBC_SHA;

  • TLS_DH_DSS_WITH_SEED_CBC_SHA;

  • TLS_DH_RSA_WITH_SEED_CBC_SHA;

  • TLS_DHE_DSS_WITH_SEED_CBC_SHA;

  • TLS_DHE_RSA_WITH_SEED_CBC_SHA;

  • TLS_DH_anon_WITH_SEED_CBC_SHA;

  • TLS_RSA_WITH_AES_128_GCM_SHA256;

  • TLS_RSA_WITH_AES_256_GCM_SHA384;

  • TLS_DH_RSA_WITH_AES_128_GCM_SHA256;

  • TLS_DH_RSA_WITH_AES_256_GCM_SHA384;

  • TLS_DH_DSS_WITH_AES_128_GCM_SHA256;

  • TLS_DH_DSS_WITH_AES_256_GCM_SHA384;

  • TLS_DH_anon_WITH_AES_128_GCM_SHA256;

  • TLS_DH_anon_WITH_AES_256_GCM_SHA384;

  • TLS_PSK_WITH_AES_128_GCM_SHA256;

  • TLS_PSK_WITH_AES_256_GCM_SHA384;

  • TLS_RSA_PSK_WITH_AES_128_GCM_SHA256;

  • TLS_RSA_PSK_WITH_AES_256_GCM_SHA384;

  • TLS_PSK_WITH_AES_128_CBC_SHA256;

  • TLS_PSK_WITH_AES_256_CBC_SHA384;

  • TLS_PSK_WITH_NULL_SHA256;

  • TLS_PSK_WITH_NULL_SHA384;

  • TLS_DHE_PSK_WITH_AES_128_CBC_SHA256;

  • TLS_DHE_PSK_WITH_AES_256_CBC_SHA384;

  • TLS_DHE_PSK_WITH_NULL_SHA256;

  • TLS_DHE_PSK_WITH_NULL_SHA384;

  • TLS_RSA_PSK_WITH_AES_128_CBC_SHA256;

  • TLS_RSA_PSK_WITH_AES_256_CBC_SHA384;

  • TLS_RSA_PSK_WITH_NULL_SHA256;

  • TLS_RSA_PSK_WITH_NULL_SHA384;

  • TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256;

  • TLS_EMPTY_RENEGOTIATION_INFO_SCSV;

  • TLS_ECDH_ECDSA_WITH_NULL_SHA;

  • TLS_ECDH_ECDSA_WITH_RC4_128_SHA;

  • TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA;

  • TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA;

  • TLS_ECDHE_ECDSA_WITH_NULL_SHA;

  • TLS_ECDHE_ECDSA_WITH_RC4_128_SHA;

  • TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA;

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA;

  • TLS_ECDH_RSA_WITH_NULL_SHA;

  • TLS_ECDH_RSA_WITH_RC4_128_SHA;

  • TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDH_RSA_WITH_AES_128_CBC_SHA;

  • TLS_ECDH_RSA_WITH_AES_256_CBC_SHA;

  • TLS_ECDHE_RSA_WITH_NULL_SHA;

  • TLS_ECDHE_RSA_WITH_RC4_128_SHA;

  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA;

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA;

  • TLS_ECDH_anon_WITH_NULL_SHA;

  • TLS_ECDH_anon_WITH_RC4_128_SHA;

  • TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDH_anon_WITH_AES_128_CBC_SHA;

  • TLS_ECDH_anon_WITH_AES_256_CBC_SHA;

  • TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA;

  • TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA;

  • TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA;

  • TLS_SRP_SHA_WITH_AES_128_CBC_SHA;

  • TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA;

  • TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA;

  • TLS_SRP_SHA_WITH_AES_256_CBC_SHA;

  • TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA;

  • TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA;

  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256;

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384;

  • TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256;

  • TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384;

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256;

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384;

  • TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256;

  • TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384;

  • TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256;

  • TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384;

  • TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256;

  • TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384;

  • TLS_ECDHE_PSK_WITH_RC4_128_SHA;

  • TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA;

  • TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA;

  • TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA;

  • TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256;

  • TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384;

  • TLS_ECDHE_PSK_WITH_NULL_SHA;

  • TLS_ECDHE_PSK_WITH_NULL_SHA256;

  • TLS_ECDHE_PSK_WITH_NULL_SHA384;

  • TLS_RSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_RSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256;

  • TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384;

  • TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256;

  • TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384;

  • TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_DH_anon_WITH_ARIA_128_CBC_SHA256;

  • TLS_DH_anon_WITH_ARIA_256_CBC_SHA384;

  • TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256;

  • TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384;

  • TLS_RSA_WITH_ARIA_128_GCM_SHA256;

  • TLS_RSA_WITH_ARIA_256_GCM_SHA384;

  • TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256;

  • TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384;

  • TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256;

  • TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384;

  • TLS_DH_anon_WITH_ARIA_128_GCM_SHA256;

  • TLS_DH_anon_WITH_ARIA_256_GCM_SHA384;

  • TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256;

  • TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384;

  • TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256;

  • TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384;

  • TLS_PSK_WITH_ARIA_128_CBC_SHA256;

  • TLS_PSK_WITH_ARIA_256_CBC_SHA384;

  • TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256;

  • TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384;

  • TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256;

  • TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384;

  • TLS_PSK_WITH_ARIA_128_GCM_SHA256;

  • TLS_PSK_WITH_ARIA_256_GCM_SHA384;

  • TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256;

  • TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384;

  • TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256;

  • TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384;

  • TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256;

  • TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384;

  • TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256;

  • TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384;

  • TLS_RSA_WITH_AES_128_CCM;

  • TLS_RSA_WITH_AES_256_CCM;

  • TLS_RSA_WITH_AES_128_CCM_8;

  • TLS_RSA_WITH_AES_256_CCM_8;

  • TLS_PSK_WITH_AES_128_CCM;

  • TLS_PSK_WITH_AES_256_CCM;

  • TLS_PSK_WITH_AES_128_CCM_8;TLS_PSK_WITH_AES_256_CCM_8

Примечание. Этот список создан из множества зарегистрированных шифров TLS на момент подготовки этого документа. Список включает шифры, которые не предлагают обмена эфемерными ключами, а также шифры, основанные на TLS null, потоковом и блочном шифровании (как определено в параграфе 6.2.3 [TLS12]). Могут существовать дополнительные шифры с такими свойствами, они не запрещаются явно.

Благодарности

Этот документ включает существенный вклад перечисленных ниже людей.

  • Adam Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton, Gavin Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, и Jonathan Leighton (участники SPDY).

  • Gabriel Montenegro и Willy Tarreau (механизм Upgrade).

  • William Chan, Salvatore Loreto, Osama Mazahir, Gabriel Montenegro, Jitu Padhye, Roberto Peon и Rob Trace (управление потоком данных).

  • Mike Bishop (расширяемость).

  • Mark Nottingham, Julian Reschke, James Snell, Jeff Pinner, Mike Bishop и Herve Ruellan (существенные редакторские правки).

  • Kari Hurtta, Tatsuhiro Tsujikawa, Greg Wilkins, Poul-Henning Kamp и Jonathan Thackray.

  • Alexey Melnikov, который был редактором этого документа в 2013 году.

Существенная часть вклада Martin была поддержана компанией Microsoft, пока он там работал.

Японское сообщество HTTP/2 внесло важный вклад, включая множество реализаций, а также технических и редакторских правок.

Адреса авторов

Mike Belshe

BitGo

EMail: mike@belshe.com

Roberto Peon

Google, Inc

EMail: fenix@google.com

Martin Thomson (редактор)

Mozilla

331 E Evelyn Street

Mountain View, CA 94041

United States

EMail: martin.thomson@gmail.com


Перевод на русский язык

Николай Малых

nmalykh@gmail.com

1Hypertext Transfer Protocol.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

4Transport Layer Security.

5Application-layer protocol negotiation.

6Application-layer protocol negotiation — согласование протокола на прикладном уровне.

7В оригинале строка ошибочно содержит закрывающую круглую скобку. См. https://www.rfc-editor.org/errata/eid5031. Прим. перев.

8Дающих такой же результат при повторном запросе. Прим. перев.

9В оригинале ошибочно сказано «выталкиваемые». См. https://www.rfc-editor.org/errata/eid4720. Прим. перев.

10Server Name Indication — указание имени сервера.

11Этот абзац предложено удалить в последующей версии документа. См. https://www.rfc-editor.org/errata/eid4666. Прим. перев.

12Diffie-Hellman.

13Ephemeral elliptic curve Diffie-Hellman.

14Завершенная работа опубликована в RFC 7838. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 7540 Hypertext Transfer Protocol Version 2 (HTTP/2) отключены

RFC 7538 The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)

Отменен RFC 9110.

Рубрика: RFC | Оставить комментарий

RFC 7401 Host Identity Protocol Version 2 (HIPv2)

Internet Engineering Task Force (IETF)                 R. Moskowitz, Ed.
Request for Comments: 7401                                HTT Consulting
Obsoletes: 5201                                                  T. Heer
Category: Standards Track              Hirschmann Automation and Control
ISSN: 2070-1721                                                P. Jokela
                                            Ericsson Research NomadicLab
                                                            T. Henderson
                                                University of Washington
                                                              April 2015

Host Identity Protocol Version 2 (HIPv2)

Протокол отождествления хостов версии 2 (HIPv2)

PDF

Аннотация

Этот документ определяет детали протокола отождествления хостов (Host Identity Protocol или HIP). Протокол HIP позволяет соответствующим хостам безопасно организовывать и поддерживать общее состояние уровня IP, что позволяет разделить роли идентификатора и «локатора» для адресов IP, обеспечивая непрерывность связи при смене адреса IP. Протокол HIP основан на обмене ключами Diffie-Hellman с использованием открытых ключей в качестве идентификаторов из нового пространства имён Host Identity для взаимной аутентификации партнёров. Протокол рассчитан на устойчивость а атакам на отказ в обслуживании (denial-of-service или DoS) и перехвату с участием человека (man-in-the-middle или MitM). При использовании с другим подходящим протоколом защиты, таким как ESP (Encapsulating Security Payload), протокол обеспечивает защиту целостности и может обеспечивать шифрование для протоколов вышележащего уровня (например, TCP или UDP).

Этот документ отменяет RFC 5201 и решает отмеченные IESG проблемы, в частности, вопрос гибкости шифрования. Документ также учитывает опыт реализации RFC 5201.

Статус документа

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 5741.

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc7401.

Авторские права

Авторские права (Copyright (c) 2015) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, перечисленные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

Этот документ задаёт детали протокола отождествления хостов (HIP). Высокоуровневое описание протокола и его архитектуры HIP представлено в отдельном документе [HIP-ARCH]. Вкратце, архитектура HIP предлагает альтернативу двойному использованию адресов IP как «локаторов» (меток маршрутизации) и «идентификаторов» (обозначения конечных точек — хостов). В HIP применяются открытые ключи или пары ключей (открытый и секретный) в качестве идентификаторов хостов, к которым привязаны вышележащие протоколы вместо адресов IP. Благодаря применению открытых ключей (и их представлений) в качестве идентификаторов хостов, хосты могут напрямую аутентифицировать динамическую смены адресов IP, а при желании можно использовать строгую проверку подлинности между хостами на уровне стека TCP/IP.

Этот документ задаёт базовый протокол HIP (базовый обмен), используемый между хостами для создания контекста взаимодействия на уровне IP, называемого ассоциацией HIP, до начала коммуникаций. Документ определяет формат пакетов, а также процедуры обновления и разрыва активных ассоциаций HIP. Архитектура HIP включает другие элементы, описанные в отдельных документах, включая перечисленные ниже.

  • «Using the Encapsulating Security Payload (ESP) Transport Format with the Host Identity Protocol (HIP)» [RFC7402] описывает применение протокола ESP для защиты целостности и необязательного шифрования.

  • «Host Mobility with the Host Identity Protocol» [HIP-HOST-MOB] определяет поддержку мобильности хостов в HIP.

  • «Host Identity Protocol (HIP) Domain Name System (DNS) Extension» [HIP-DNS-EXT] определяет расширение DNS для включения данных Host Identity.

  • «Host Identity Protocol (HIP) Rendezvous Extension» [HIP-REND-EXT] задаёт использование механизма «встречи» (rendezvous) для связи с мобильными хостами HIP.

С момента разработки базового обмена HIP были достигнуты успехи в криптографии и атаках на криптосистемы, в результате чего потребовалось обеспечить гибкость криптографических протоколов, т. е. возможность переключения с одного криптографического примитива на другой стала частью таких протоколов. Важно поддерживать разумный набор базовых алгоритмов для разных вариантов применения и обеспечить возможность отказа от алгоритмов, для которых были обнаружены уязвимости. Это обновление базового обмена обеспечивает требуемую криптографическую гибкость при борьбе с атаками на понижение, которые становятся возможными в результате гибкости. Кроме того, добавлена поддержка эллиптических кривых с использованием Elliptic Curve DSA (ECDSA) и Elliptic Curve Diffie-Hellman (ECDH).

1.1. Новое пространство имён и идентификаторы

Протокол HIP вводит новое пространство имён Host Identity (отождествление хостов), некоторые аспекты которого рассмотрены в описании архитектуры HIP[HIP-ARCH].

Имеется два основных представления отождествления хоста — полное (Host Identity или HI) и тег отождествления (Host Identity Tag или HIT). HI является открытым ключом и напрямую представляет отождествление хоста. Поскольку имеются разные алгоритмы открытых ключей, использующие разный размер ключа, HI напрямую не подходит в качестве идентификатора пакета или индекса связанных с реализацией структур состояний, требуемых для поддержки HIP. Поэтому применяется хэш от HI или тег отождествления хоста (HIT) в качестве рабочего представления. Тег HIT имеет размер 128 битов и применяется в заголовках HIP и для индексирования соответствующих состояний на конечных хостах. У HIT есть важное свойство защиты — самосертификация (см. 3. Отождествление HI и его структура).

1.2. Базовый обмен HIP (BEX)

Базовый обмен HIP — это двухсторонний криптографический протокол, используемый для организации между хостами коммуникационного контекста. Базовый обмен включает 4 пакета и совместим с SIGMA [KRA03]. Первая сторона обмена называется Инициатором (Initiator), вторая — Ответчиком (Responder). Протокол выполняет обмен ключами Diffie-Hellman (DH) [DIF76] во втором и третьем пакетах, а также аутентифицирует стороны в третьем и четвертом. Применение 4 пакетов повышает устойчивость HIP к DoS-атакам и позволяет Ответчику не устанавливать состояние, пока не будут проверены адрес IP и криптографическая головоломка (puzzle). Ответчик начинает обмен puzzle по втором пакете, а Инициатор завершает его в третьем до того, как ответчик сохранит какое-либо состояние из обмена.

В обмене может применяться вывод DH для шифрования Host Identity Инициатора в третьем пакете (хотя в работе Aura и др. [AUR05] отмечено, что такая операция может мешать работе промежуточных устройств с проверкой пакетов) или Host Identity можно передать без шифрования. Host Identity Ответчика не защищается. Следует отметить, что теги HIT Инициатора и Ответчика передаются в пакетах открыто, что позволяет перехватчику, имеющему сведения о сторонах взаимодействие, идентифицировать их по тегам HIT. Следовательно, шифрование HI любой из сторон не обеспечивает защиты от таких аткак.

Передача пакетов данных начинается после четвёртого пакета. Третий и четвёртый пакеты HIP в будущем смогут также передавать данные, однако детали этого будут определены позднее.

Существующая ассоциация HIP может быть обновлена с использованием определённого в этом документе механизма, а когда ассоциация становится ненужной, её можно закрыть с помощью определённого в документе механизма.

HIP разработан как протокол сквозной аутентификации и организации ключей для использования с ESP [RFC7402] и другими протоколами сквозной защиты. Базовый протокол не охватывает все детали управления правилами, присутствующие в обмене ключами IKE (Internet Key Exchange) [RFC7296] и позволяющие IKE поддерживать сложные правила на шлюзах. Поэтому HIP не является полнофункциональной заменой IKE.

1.3. Структура документа

В разделе 2 определены некоторые ключевые слова, обозначения и термины, применяемые в документе, в разделе 3 определена структура Host Identity и различных представлений. В разделе 4 приведён обзор протокола базового обмена HIP, а разделы 5 и 6 описывают формат пакетов и правила их обработки. В разделах 7, 8 и 9 обсуждаются правила, безопасность и взаимодействие с IANA.

2. Термины и определения

2.1. Уровни требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с RFC 2119 [RFC2119].

2.2. Обозначения

[x]

Указывает, что значение x является необязательным.

{x}

Указывает, что значение x является шифрованным.

X(y)

Указывает, что y является параметром X.

<x>i

Указывает, что имеется i элементов x.

—>

Связь от Инициатора к Ответчику (запросы).

<—

Связь от Ответчика к Инициатору (отклики).

|

Объединение (конкатенация).

Ltrunc (H(x), #K)

Указывает #K младших битов результата хэш-функции H от входных данных x.

2.3. Определения

HIP base exchange (BEX) — базовый обмен HIP

Согласование для организации новой ассоциации HIP.

Host Identity (HI) — отождествление хоста

Открытый ключ алгоритма подписи, представляющий отождествление хоста. В HIP хост подтверждает своё отождествление, создавая подпись с секретным ключом, относящимся к его HI (см. 3. Отождествление HI и его структура).

Host Identity Tag (HIT) — тег отождествления хоста

Сокращение HI в формате IPv6, создаваемое путём хэширования HI (см. 3.1. Тег отождествления хоста (HIT)).

HIT Suite — комплект HIT

HIT Suite группирует все криптоалгоритмы, которые нужны для генерации и применения HI и его тега HIT. В частности, это 1) алгоритм подписи с открытым ключом, 2) хэш-функция и 3) отсечка (см. Приложение E. HIT Suite и генерация HIT).

HIP association — ассоциация HIP

Общее состояние двух партнёров после завершения BEX.

HIP packet — пакет HIP

Пакет управления с заголовком HIP, относящийся к организации, поддержке или прерыванию ассоциации HIP.

Initiator — Инициатор

Хост, инициирующий BEX. Эта роль обычно теряется по завершении BEX.

Responder — Ответчик

Хост, отвечающий Инициатору BEX. Эта роль обычно теряется по завершении BEX.

Responder’s HIT hash algorithm (RHASH) — алгоритм хэширования HIT ответчика

Алгоритм хэширования, применяемый в документе для разных расчётов хэш-значений, а также для генерации тега HIT Ответчика. RHASH является хэш-функцией, определяемой HIT Suite тега HIT Ответчика (см. 5.2.10. HIT_SUITE_LIST).

Length of the Responder’s HIT hash algorithm (RHASH_len) — размер вывода алгорита RHASH

Естественный размер вывода RHASH в битах.

Signed data — подписанные данные

Подписанные данные защищаются цифровой подписью, созданной отправителем с применением секретного ключа его HI.

KDF — функция вывода ключей

Функция вывода ключей (Key Derivation Function или KDF) служит для создания симметричных ключей в обмене DH.

KEYMAT — ключевой материал

Ключевой материал, выведенный из обмена ключами DH с использованием функции KDF. Симметричные ключи для шифрования и защиты целостности пакетов HIP и шифрованных пакетов данных пользователя выводятся из этого ключевого материала.

3. Отождествление HI и его структура

В этом разделе рассматриваются свойства Host Identity и Host Identity Tag, а также определяется их точный формат. В протоколе HIP открытый ключ асимметричной пары ключей служит отождествлением хоста HI. Соответственно, сам хост определяется как объект, содержащий секретный ключ пары. Более подробное описание различий между отождествлением и соответствующим идентификатором приведено в документе по архитектуре HIP [HIP-ARCH].

Реализации HIP должны поддерживать алгоритм открытых ключей RSA (Rivest Shamir Adleman) [RSA] и алгоритм ECDSA (Elliptic Curve Digital Signature Algorithm) для генерации HI, как указано в параграфе 5.2.9. Могут также поддерживаться дополнительные алгоритмы.

Хешированное кодирование HI — тег HIT — применяется в протоколах для представления Host Identity. HIT имеет размер 128 битов и три важных свойства: i) размер совпадает с размером адреса IPv6, что позволяет применять его в адресных полях API и протоколов с фиксированным размером, ii) тег сам сертифицирует себя (т. е. по данному HIT сложно расчетным путём найти соответствующий ключ Host Identity) и iii) вероятность совпадения HIT у двух хостов (конфликт) очень мала, поэтому злоумышленнику не удастся найти конфликт с используемым тегом HIT. Более подробное описание свойств безопасности HIT приведено в [HIP-ARCH].

Структура HIT определена в [RFC7343]. HIT — это наложенный маршрутизируемый криптографический хэш-идентификатор (Overlay Routable Cryptographic Hash Identifier или ORCHID), состоящий из 3 частей. Назначаемый IANA префикс служит для того, чтобы отличать теги от адресов IPv6. 4-битовый код указывает алгоритм, применяемый для генерации HI и хэшированного представления HI. Третьей частью является 96-битовое хэш-представление Host Identity. Кодирование алгоритма генерации ORCHID и точный алгоритм генерации хэш-представления заданы в Приложении E и [RFC7343].

Передача HI и HIT в заголовках пакетов пользовательских данных повышает издержки для этих пакетов, поэтому передача указанных значений не предполагается в каждом пакете и применяются иные методы сопоставления пакетов с HI. В некоторых случаях можно применять HIP без дополнительных заголовков в пользвательских пакетах данных. Например, при использовании ESP для защиты трафика данных индекс параметров защиты (Security Parameter Index или SPI) в заголовке ESP может служить для сопоставления защифрованного пакета данных с ассоциацией HIP.

3.1. Тег отождествления хоста (HIT)

128-битовый тег HIT — это хэшированное значение HI. Использование хэшированного представления идентификатора обеспечивает два преимущества по сравнению открытым ключом отождествления хоста, имеющим переменный размер. Во-первых, фиксированный размер HIT позволяет сохранить контроль за размером пакетов и упрощает кодирование протоколов. Во-вторых, он обеспечивает согласованный формат протокола, не зависящий от применяемой технологии отождествления.

RFC 7343 [RFC7343] задаёт 128-битовые идентификаторы на основе хэш-значений, называемые ORCHID. Префикс для этих идентификаторов, выделенный из блока адресов IPv6, также определён в [RFC7343]. Тег HIT является одним из типов ORCHID.

Этот документ расширяет исходную, экспериментальную спецификацию HIP [RFC5201] мерами обеспечения криптографической гибкости. Одна из таких мер разрешает использовать разные хэш-функции для генерации тегов HIT. HIT Suite группирует наборы алгоритмов, которые нужны для создания и применения конкретного HIT, и указываются эти группы с помощью HIT Suite ID, передаваемых в поле алгоритма OGA (ORCHID Generation Algorithm) идентификатора ORCHID. С помощью HIT Suite ID в поле OGA ID хост может определить по тегу HIT другого хоста, поддерживает ли тот необходимые алгоритмы хэширования и подписи для создания ассоциации HIP с этим хостом.

3.2. Создание HIT из HI

Теги HIT должны создаваться в соответствии с методом генерации ORCHID, описанным в [RFC7343], с идентификатором контекста 0xF0EF F02F BFF4 3D0F E793 0C3C 6E61 74EA (случайное значение, созданное редактором данной спецификации) и входных данных, представляющих поле Host Identity (см. параграф 5.2.9) в данных пакета HIP. Хэш-функцию, алгоритм подписи и алгоритм генерации HIT из HI определяет набор HIT Suite (см. параграф 5.2.10), который указывается 4 битами поля OGA ID в идентификаторе ORCHID. В настоящее время для создания HIT определены усеченные алгоритмы SHA-1, SHA-384 и SHA-256 [FIPS.180-4.2012].

Для отождествлений, являющихся открытыми ключами RSA, DSA (Digital Signature Algorithm) [FIPS.186-4.2013] или ECDSA (Elliptic Curve DSA), вводом ORCHID служит кодирование открытого ключа, указанное в поле Host Identity параметра HOST_ID (см. параграф 5.2.9). Этот документ определяет 4 алгоритма: RSA, DSA, ECDSA, ECDSA_LOW. Профиль ECDSA_LOW предназначен для устройств с малой вычислительной мощностью, поэтому применим однин из указанных ниже вариантов.

Открытый ключ RSA кодируется в соответствии с разделом 2 в [RFC3110], принимая конкатенацию полей размера экспоненты (e_len), показателя (e) и модуля (n). Размер n_len модуля n может быть определён из общего размера HI и предшествующих полейHI, включая показатель степени (e). Таким образом, входные данные для генерации HIT имеют такой же размер, как HI. Поля должны кодироваться в сетевом порядке байтов, как указано в [RFC3110].

Открытый ключ DSA кодируется в соответствии с разделом 2 в [RFC2536], принимая конкатенацию полей T, Q, P, G, Y. Таким образом, размер хэшируемых данных составляет 1 + 20 + 3 * 64 + 3 * 8 * T октетов, где T — параметр размера, определённый в [RFC2536]. Этот параметр влияет на размеры полей, поэтому для него должно выбираться минимальное значение, позволяющее поместить P, G и Y. Поля должны кодироваться в сетевом порядке байтов, как указано в [RFC2536].

Открытые ключи ECDSA кодируются в соответствии с параграфом 4.2 и разделом 6 в [RFC6090].

В Приложении B представлен псевдокод, иллюстрирующий кодирование открытых ключей.

4. Обзор протокола

В этом разделе приведено упрощенно описание работы протокола HIP без рассмотрения формата пакетов и этапов обработки, которые приведены в разделах 5 и 6, являющихся нормативными.

Для протокола HIP агентство IANA выделило номер 139.

Заголовок данные HIP (параграф 5.1) может передаваться в каждой дейтаграмме IP. Однако эти заголовки достаточно велики (40 байтов), поэтому желательно «сжимать» заголовки HIP, передавая их лишь в пакетах управления при организации или смене состояния ассоциации HIP. Фактический метод «сжатия» и сопоставления пакетов с имеющимися ассоциациями (при их наличии) определяется отдельными документами, описывающими форматы и методы транспортировки. Все реализации HIP должны поддерживать транспортный формат ESP для HIP [RFC7402].

4.1. Создание HIP-ассоциации

Система, начинающая базовый обмен HIP считается Инициатором (Initiator), а её партнёр — Ответчиком (Responder). Это различие обычно утрачивается по завершении базового обмена и любая их сторон может стать Инициатором в будущих коммуникациях.

Базовый обмен HIP служит для организации состояния между Инициатором и Ответчиком. Первый пакет (I1) начинает обмен, а 3 оставшихся (R1, I2, R2) реализуют аутентифицированный обмен ключами Diffie-Hellman (DH) [DIF76] для генерации сеансовых ключей. В двух первых пакетах хосты согласуют набор криптографических идентификаторов и алгоритмы, которые применяются после обмена. В процессе обмена ключами DH создаётся фрагмент ключевого материала, из которого выводятся ключи ассоциации HIP с помощью функции вывода ключей (Key Derivation Function или KDF). Если нужны другие криптографические ключи, например, для использования с ESP, предполагается их вывод из того же ключевого материала с использованием KDF.

Инициатор сначала передаёт Ответчику запускающий пакет I1, который содержит его тег HIT и может включать HIT Ответчика, если этот тег известен. Кроме того, пакет I1 инициализирует согласование группы DH, используемой для создания ключевого материала, поэтому пакет I1 включает список идентификаторов групп DH, поддерживаемых Инициатором. Отметим, что в некоторых случаях возможна замена этого пакета иным триггером и в таких случаях протокол начинает с передачи Ответчиком пакета R1, при этом должен указываться механизм передачи списка поддерживаемых Инициатором групп DH (например, использование принятой по умолчанию группы).

Второй пакет (R1) фактически начинает аутентифицированный обмен DH. Этот пакет содержит «головоломку» (puzzle), являющуюся криптографической задачей которую Инициатор должен решить для продолжения обмена. Уровень сложности этой задачи можно настраивать в зависимости от степени доверия к Инициатору, текущей нагрузки и других факторов. В дополнение к этому R1 содержит параметр DH для Ответчика и список поддерживаемых Ответчиком криптографических алгоритмов. На основе этого Инициатор может продолжить, прервать или перезапустить базовый обмен с соответствующим набором криптографических алгоритмов. Пакет R1 также включает подпись для выбранных частей сообщения. Некоторые поля не включаются в подпись для поддержки создаваемых заранее пакетов R1.

В пакете I2 Инициатор должен указать решение головоломки и при отсутствии верного решения пакет I2 будет отброшен. I2 включает также параметр DH с информацией, требуемой Ответчику. Инициатор подписывает пакет I2.

Пакет R2 подтверждает получение I2 и завершает базовый обмен. Ответчик подписывает этот пакет.

Базовый обмен показан на рисунке 1, где key указывает открытый ключ Host Identity, а sig — подпись с использованием этого ключа. Некоторые параметр пакета на рисунке не показаны.

   Инициатор                              Ответчик

                I1: список DH
              -------------------------->
                                          выбор готового R1
                R1: puzzle, DH, key, sig
              <-------------------------
проверка подписи                          состояния пока нет
решение головоломки
              I2: решение, DH, {key}, sig
              -------------------------->
расчет DH                                 проверка решения
                                          проверка подписи
                        R2: sig
              <--------------------------
проверка подписи                          расчет DH

Рисунок 1. Базовый обмен HIP (BEX).


4.1.1. Механизм HIP Puzzle

Механизм HIP Puzzle предназначен для защиты Ответчика от DoS и позволяет Ответчику задержать создание состояния до получения пакета I2. Кроме того, головоломка позволяет Ответчику использовать достаточно простые расчеты для проверки «искренности» Инициатора, требующие от того нескольких тактов CPU для решения задачи.

Головоломка позволяет Ответчику отложить создание состояния ассоциации до получения действительного пакета I2. Пакет I2 без верного решения задачи может быть отвергнут сразу после проверки решения Ответчиком. Решение можно проверить расчетом лишь одной хэш-функции, а непригодные решения могут быть отвергнуты до создания состояния и требующих ресурсов CPU проверки подписи и создания ключей DH. Меняя сложность головоломки, Ответчик может предотвратить DoS-атаки, нацеленные на рсход ресурсов CPU или памяти.

Ответчик может оставаться без состояния и отбрасывать большинство обманных пакетов I2, поскольку для решения задачи нужен HIT-тег Инициатора. Идея состоит в том, что у Ответчика имеется несколько (возможно переменное число) готовых пакетов R1, из которых он выбирает подходящий на основе сведений из пакета I1. Когда Ответчик получает пакет I2, он может проверить решение задачи с использованием HIT Инициатора. Это делает бессмысленным для атакующего сначала передать один пакет I1/R1, а затем генерировать множество фиктивных пакетов I2, как будто с разными HIT. Однако метод не защищает Ответчика от атак с использованием фиксированного значения HIT, против которых может применяться частичное создание локального состояния с запоминанием фактов отказа при проверке решения (один из вариантов описан в Приложении A). Реализациям Ответчика следует включать достаточный объем случайности в значения puzzle, чтобы предотвратить алгоритмические атаки [CRO03].

Ответчик может устанавливать сложность головоломки для Инициатора на основе уровня доверия к нему. Поскольку головоломка не учитывается при создании подписи, Ответчик может использовать созданные заранее пакеты R1 и передавать их в качестве головоломки для Инициатора. Ответчику следует применять эвристические методы обнаружения DoS-атак и устанавливать сложность головоломки (#K), как описано ниже.

4.1.2. Обмен Puzzle

Ответчик запускает обмен Puzzle, получив пакет I1. Ответчик предоставляет случайное значение #I и требует от Инициатора найти случайное значение #J. Для выбора нужного #J Инициатор должен создать конкатенацию #I, тегов HIT обеих сторон и #J, затем рассчитать хэш этой конкатенации, используя алгоритм RHASH. Младшие #K результата должны быть 0. Значение #K определяет сложность головоломки.

Для генерации верного #J Инициатор создаёт множество значений #J, пока не будет получена хеш-цель из нулей. Инициатору следует прерывать попытки только по истечении срока действия головоломки, заданного полем Lifetime в параметре PUZZLE (см. параграф 5.2.4). Ответчику требуется восстановить конкатенацию #I, тегов HIT и представленного #J, а затем рассчитать хэш для проверки корректности решения задачи Инициатором.

Для предотвращения атак с предварительным расчетом Ответчик должен выбирать значение #I так, чтобы Инициатор не мог угадать его. Кроме того, конструкция должна позволять Ответчику убедиться в том, что значение #I выбрано им, а не Инициатором. Пример реализации этого приведён в Приложении A.

Используя поле Opaque в PUZZLE (см. параграф 5.2.4) параметра ECHO_REQUEST_SIGNED (см. параграф 5.2.20) или ECHO_REQUEST_UNSIGNED (см. параграф 5.2.21), Ответчик может включить в R1 те или иные данные, которые Инициатор должен без изменений скопировать в соответствующий пакет I2. Ответчик может использовать необрабатываемые (opaque) данные для передачи части сведений локального состояния Инициатору и обратно, например, для проверки того, что I2 является откликом на переданный ранее R1. Ответчик может создавать эти данные разными способами, например, применяя шифрование или хэширование с неким секретом, переданное значение #I и возможно другие связанные данные. Используя тот же секрет, полученное значение #I (из пакета I2) и другие связанные данные (при наличии), Ответчик может убедиться, что это он передал #I Инициатору. Ответчик должен периодически менять применяемый секрет.

Ответчику рекомендуется генерировать новые секреты для головоломки и новые R1 каждые несколько минут. Кроме того, ему рекомендуется обеспечивать возможность проверки правильности решения головоломки в течение не меньше Lifetime секунд после смены секрета головоломки. Это гарантирует действительность головоломки в интервале от Lifetime до 2 * Lifetime секунд. Это не позволит атакующему воспользоваться старой головоломкой и предотвратит проблемы в сучаях, когда срок действия значение Lifetime сравнимо с задержкой в сети и временем решения головоломки.

Значение головоломки #I и решение #J служат входными данными для создания ключевого материала из обмена DH (см. параграф 6.5). Поэтому для того, чтобы ключевой материал различался, Ответчику не следует дважды использовать одно значение #I с теми же ключами DH для одного Инициатора. Такую уникальность можно обеспечить, например, с использованием счётчика в качестве дополнения входных данных при создании #I. Этот счётчик можно увеличивать для каждого обработанного пакета I1. Состояние счётчика можно передавать в поле Opaque в PUZZLE (см. параграф 5.2.4) параметра ECHO_REQUEST_SIGNED (см. параграф 5.2.20) или ECHO_REQUEST_UNSIGNED (см. параграф 5.2.21) без необходимости организации состояния.

Примечание. Разработчики протокола явно рассмотрели вопрос включения в R1 временной метки для защиты Инициатора от атак с повторным использованием (replay). Принято решение не включать метку для предотвращения проблем с глобальной синхронизацией часов.

Примечание. Разработчики протокола явно рассмотрели вопрос использования привязки функции для головоломки к памяти, а не к CPU. Принято решение не использовать привязанные к памяти функции.

4.1.3. Аутентифицированный обмен Diffie-Hellman с согласованием DH Group

Пакеты R1, I2, R2 реализуют стандартный аутентифицированный обмен DH. Ответчик передаёт один из своих открытых ключей DH и свой открытый ключ аутентификации (т. е. Host Identity) в пакете R1. Подпись в пакете R1 позволяет Инициатору убедиться в том, что пакет R1 создан Ответчиком. Однако, поскольку R1 создаётся заранее и не охватывает связанную с ассоциацией информацию из пакета I1, это не обеспечивает защиты от replay-атак.

Перед фактическим аутентифицированным обменом DH Инициатор указывает своё предпочтение по выбору групп DH в пакете I1 как отсортированный список идентификаторов групп DH. Пакет I1 не подписывается и , следовательно, список передаётся без аутентификации для предотвращения ресурсоемких расчётов при обработке пакета I1 на стороне Ответчика. На основе предпочтений Инициатора Ответчик указывает в пакете R1 наиболее подходящее открытое значение DH, а также присоединяет список своих предпочтений к пакету R1, чтобы передать Инициатору основания для выбора группы DH. Этот список передаётся в подписанной части пакета R1. Если выбор группы DH в пакете R1 не соответствует предпочтениям Инициатора и Ответчика, Инициатор может счесть, что список DH Group ID в пакете I1 был изменён (см. ниже).

Если Ответчик не поддерживает ни один из DH Group ID в пакете I1, он выбирает наиболее подходящую для себя группу DH, назависимо от предпочтений Инициатора, затем передаёт Инициатору пакет R1 с этой группой DH и списком поддерживаемых DH Group ID.

Инициатор получает в пакете R1 открытые значение DH и список групп DH Group ID, поддерживаемых Ответчиком. Этот список включается в подпись пакета R1 для предотвращения подмены. Инициатор сравнивает Group ID открытого значения DH в пакете R1 со списком поддерживаемых DH Group ID в пакетах R1 и своими предпочтениями, указанными в списке поддерживаемых DH Group ID. Инициатор продолжает обмен BEX лишь в том случае, когда Group ID открытого значения DH Ответчика является идентификатором наиболее предпочтительной группы, поддерживаемой Инициатором и Ответчиком. Иное говорит о воздейтсиии на ассоциацию атаки с понижением и Инициатор должен перезапустить базовый обмен новым пакетом I1 или прервать этот обмен. Если Ответчик выбрал группу DH, не поддерживаемую Инициатором, тот может прервать согласование или передать новый пакет I1 с другим списком поддерживаемых групп DH. Однако Инициатор должен проверить подпись пакета R1 до перезапуска или прерывания согласования. При некорректной подписи Инициатор должен просто игнорировать пакет R1.

Если предпочтения в части DH Group ID совпадают, Инициатор рассчитывает сеансовый ключ DH (Kij) и создаёт ассоциацию HIP используя материал из сеансового ключа (см. параграф 6.5). Ассоциация может также использоваться Инициатором для шифрования своего открытого ключа аутентификации, т. е. Host Identity. Результирующий пакет I2 содержит ключ DH Инициатора и его (возможно зашированный) открытый ключ аутентификации. Подпись сообщения I2 охватывает все параметры подписываемых диапазонов (см. параграф 5.2) без исключений, как для пакета R1.

Ответчик извлекает открытый ключ DH Инициатора из пакета I2, рассчитывает сеансовый ключ DH, создаёт соответствующую ассоциацию HIP и расшифровывает открытый ключ аутентификации Инициатора. После этого он может проверить подпись с использованием ключа аутентификации.

Финальное сообщение R2 завершает обмен BEX и защищает Инициатора от replay-атак, поскольку Ответчик использует общий ключ из обмена DH для создания хэшированного кода аутентификации сообщения (Hashed Message Authentication Code или HMAC), а также использует секретный ключ своего Host Identity для подписания пакета.

4.1.4. Защита HIP от повторного использования пакетов (Replay)

HIP включает описанные здесь механизмы для защиты от враждебного повторного использования пакетов (replay). Ответчики защищаются от повторного использования пакетов I1 благодаря ответам на I1 без сохранения состояния подписанными пакетами R1. Инициаторы защищены от повторов R1 с помощью монотонно возрастающих «счетчиков генерации R1» включаемых в пакеты R1. Ответчики защищены от воспроизведения обманных пакетов I2 механизмом головоломок (puzzle, см. параграф 4.1.1) и необязательными данными Opaque. Хосты защищены от повторного использования пакетов R2 и UPDATE применением менее дорогостоящей проверки HMAC до проверки подписи HIP.

Счетчик генерации R1 представляет собой монотонно возрастающее 64-битовое число, для которого может быть установлено любое начальное значение. Счётчик может работать на уровне всей системы, однако следует поддерживать отдельный счётчик для каждого отождествления Host Identity, если их несколько. Значение этого счётчика следует сохранять при перезагрузке системы и вызовах базового обмена HIP. Счётчик указывает текущее поколение головоломок. Реализации должны воспринимать головоломки текущего поколения и могут воспринимать их из предыдущих поколений. Локальный счётчик системы должен инкрементироваться не реже чем прекращается действие каждого прежнего R1. Локальному счетчику следует быть неснижаемым, поскольку в противном случае хост предоставит своим партнёрам возможность повторно использовать созданные ранее R1 с большими номерами.

Хост может получит несколько пакетов R1 в результате отправки нескольких I1 (см. параграф 6.6.1) или повторного использования старых R1. При передаче нескольких пакетов I1 одному хосту Инициатору следует выждать некоторое время (разумное значение — удвоенный ожидаемый интервал RTT) после получения первого R1, чтобы принять другие R1, а также следует отвечать на пакет R1 с наибольшим значением счётчика генерации R1. Если Инициатор обрабатывает R1 или уже передал пакет I2 (ждёт получения R2) и получает другой пакет R1 с большим значением счётчика, он может перезапустить обработку R1 для нового пакета R1, как будто он прибыл первым.

Счётчик генерации R1 может достигнуть максимума или быть сброшен. Для Инициатора важна устойчивость к потере состояния или сбросу счётчика генерации R1 у партнёра. При выборе между несколькими R1 Инициатору рекомендуется предпочитать пакет R1 соответствующий текущему счетчику, но если это не работает, Инициатор может воспользоваться другими R1, начиная с пакета с наибольшим значением счетчика.

4.1.5. Отклонение базового обмена HIP

Поддерживающий HIP хост может не воспринимать базовый обмен HIP. Если политика хоста разрешает ему выступать лишь Инициатором и позволяет организовать ассоциацию HIP с исходным Инициатором, хосту следует самому начать базовый обмен HIP. Хост может выбрать такую политику, поскольку при обмене защищён лишь идентификатор HI инициатора. Следует отметить, что такое поведение может создавть риск состояния, когда каждый из хостов готов быть лишь инициатором и оба отвергают базовый обмен.

Если политика хоста не позволяет ему вступать в обмен HIP с Инициатором, хосту следует передать сообщение ICMP Destination Unreachable, Administratively Prohibited. Более сложный пакет HIP здесь не применяется, поскольку он открыват больше возможных DoS-атак, чем простое сообщение ICMP. Сообщение HIP NOTIFY не применяется, поскольку между хостами ещё нет ассоциации HIP.

4.1.6. Прерывание базового обмена HIP

Два хоста HIP могут столкнуться с ситуацией, когда они не могут завершить базовый обмен HIP из-за недостаточной поддержки криптографических алгоритмов, в частности HIT Suite и групп DH. После приёма пакета R1 Инициатор может определить, поддерживает ли Ответчик требуемые криптографические операции для создания ассоциации HIP. Инициатор может прервать обмен BEX после получения пакета R1, указывающего неподдерживаемый набор алгоритмов. Конкретные условия описаны ниже.

Пакет R1 содержит подписанный список идентификаторов HIT Suite, поддерживаемых Ответчиком, поэтому Инициатор может определить, поддерживает ли Ответчик тег HIT источника. Если HIT Suite ID из HIT Инициатора не содержится в списке HIT Suite пакета R1, Инициатор может прервать согласования, а также может перезапустить его, передав новый пакет I1 с тегом HIT источника, поддерживаемым Ответчиком.

В процессе согласования Инициатор и Ответчик выбирают одну группу DH. Ответчик выбирает группу DH и её открытое значение DH в R1 на основе списка DH Group ID в пакете I1. Если Ответчик не поддерживает ни одной группы DH, указанной Инициатором, он выбирает DH произвольно и отвечает пакетом R1 со списком поддерживаемых DH Group ID. В этом случае Инициатор получает пакет R1 с открытым значением DH для незапрошенной группы DH и список групп DH Ответчика в подписанной части пакета R1. В этот момент Инициатор может прервать согласования, а также может запустить его заново, передав новый пакет I1 с набором DH Group ID, поддерживаемых Ответчиком.

4.1.7. Защита HIP от понижения

В атаках на понижение (downgrade) злоумышленник пытается незаметно манипулировать пакетами Инициатора и/или Ответчика с целью повлиять на результат криптографического согласования в процессе BEX в свою пользу. В результате жертвы могут выбрать более слабые криптографические алгоритмы, нежели они могли выбрать без вмешательства злоумышленника. Атаки с понижением могут быть успешны лишь в том случае, когда они остаются незамеченными и жертвы считают коммуникационный канал защищенным.

В HIP почти все пакеты параметров, связанные с криптографическим согласованием, имеют подпись. Этими параметрами нельзя манипулировать напрямую с атаках с понижением без аннулирования подписей. Однако подписанные пакеты могут подвегаться replay-атакам, где злоумышленник может воспользоваться старым пакетом BEX с устаревшим и слабым выбором криптоалгоритмов и передать такой пакет вместо свежего с набором более сильных алгоритмов. Такие атаки возможны на пакеты R1 и I2. Однако вопроизведенные пакеты R1 и I2 невозможно применить для успешного обмена HIP BEX, поскольку эти пакеты включают открытые значения DH Инициатора и Ответчика. Старые значения DH из воспроизводимых пакетов ведёт к недействительному ключевому материалу и несоответствию общих секретов, поскольку атакующий не может вывести действительный ключевой материал из открытых ключей DH в R1 и не может создать действительный код HMAC и подпись для воспроизводимого I2.

В отличие от первой версии HIP [RFC5201], версия 2, определённая в этом документе, начинает согласование групп DH уже в первом пакете BEX (I1). Пакеты I1 намеренно не защищены подписью для предотвращения загружающих CPU криптографических операций обработки лавины пакетов I1, направленных Ответчику. Поэтому список DH Group ID в пакете I1 можно подменить или изменить. Для предотвращения незаметных манипуляция с пакетами I1 Ответчик выбирает группу DH детерминированно и включает свой список DH Group ID в подписанную часть пакета R1. Инициатор может заметить попытку понижения, сравнивая список DH Group ID в пакете R1 со своими предпочтениями в пакете I1. Если выбор групп DH в пакете R1 не соответствует лучшему варианту из двух списков (DH ID Ответчика с высшим приоритетом имеется в списке DH от Инициатора), Инициатор может сделать заключение о подмене списка в пакете I1. В этом случае Инициатор может прервать обмен BEX или запустить его заново. Как отмечено выше, обнаружения downgrade-атаки достаточно для её предотвращения.

4.1.8. Режим HIP Opportunistic

Можно инициировать обмен HIP BEX, даже когда HI (и HIT) Ответчика неизвестен. В этом случае в начальном пакете I1 для HIT адресата указывается значение 0. Такой тип соединения называется режимом Opportunistic. Ответчик может иметь несколько HIT в результате поддержки нескольких HIT Suite. Поскольку HIT Suite Ответчика в режиме Opportunistic не определяется HIT получателя в пакете I1, Ответчик волен выбрать HIT любого из своих HIT Suite. Полный набор поддерживаемых Инициатором HIT Suite неизвестен Ответчику, поэтому ему следует выбирать HIT из того же HIT Suite, что и HIT Инициатора (указывается информацией HIT Suite в поле OGA ID тега HIT Инициатора), поскольку этот набор очевидно поддерживается Инициатором. Если Ответчик выбирает друго тег HIT, который не поддерживается Инициатором, Инициатор может перезапустить BEX пакетом I1 с HIT источника, содержащимся в списке HIT Suite Ответчика из пакета R1.

Отметим, что Инициатор не может проверить подпись пакета R1, если он не поддерживает HIT Suite Итветчика. Поэтому Инициатор должен считать пакеты R1 с неподдерживаемыми HIT Ответчика потенциально обманными и ему недопустимо использовать из непроверенных R1 какие-либо параметры за исключением HIT_SUITE_LIST. Кроме того, Инициатор, использующий HIT_SUITE_LIST from из непроверенного пакета R1 для определения возможного HIT источника должен убедиться, что HIT_SUITE_LIST из первого непроверенного пакета R1 совпадает с HIT_SUITE_LIST во тором пакете R1, для которого Инициатор поддерживает алгоритм подписи. Инициатор должен перезапустить обмен BEX новым пакетом I1, для которого алгоритм был указан в проверяемом R1, если два списка различаются. Эта процедура должна смягчить атаки на понижение.

С режимом Opportunistic связаны проблемы как безопасности, так и API, рассматриваемые ниже.

С учётом того, что Инициатор не знает HI Ответчика, должны быть подходящие вызовы API, позволяющие Инициатору напрямую или опосредованно запросить у базовой системы инициирование базового обмена HIP на основе «локаторов» (адресов). HI ответчика будет предварительно представлен в пакете R1 и аутентифицирован после получения и проверки пакета R2. Следовательно, HIT Ответчика можно передать приложению через новые механизмы API. Однако приложение с совместимым с прежними версиями API видит лишь локаторы, использованные при начальном контакте. В зависимости от желаемой семантики API, возникает ряд приведённых ниже проблем.

  • Фактические локаторы могут измениться, если применяется сообщение UPDATE, даже при сохранении с точки зрения API ассоциации между двумя конкретными локаторами. Однако обновление локатора остаётся безопасным и ассоциация сохраняется между теми же узлами.

  • Разные ассоциации между одной парой локаторо могут приводить к соединениям между разными узлами, если реализация больше не помнит идентификаторов, которые были использованы в более ранней ассоциации. Это может произойти при легитимной изменении локатора партнёра или при захвате атакующим локатора партнёра. Поэтому при использовании режима Opportunistic реализации HIP недопустимо предполагать, что HI в сообщении R1 совпадает с HI, ранее показанным для этого адреса.

    Если у реализации HIP и приложения нет единого представления о составе ассоциации, это может происходить даже в рамках одной ассоциации. Например, реализация может не знать, когда следует сбросить состояние HIP для приложения на основе UDP.

Кроме того, здесь применим ряд соображений безопасности. Механизм счётчиков генерации будет менее эффективен для защиты от повторного использования пакетов R1 с учётом того, что Ответчик может выбрать воспроизведение произвольного HI, а не только полученного в пакете. Более важно, что обмен Opportunistic уязвим к MitM-атакам, поскольку у Инициатора нет сведений об открытом ключе партнёра. Чтобы оценить влияние этой уязвимости, она сравнивается с уязвимости современных коммуникаций без HIP.

Атакующий на пути между партнёрами может включиться в процесс (MitM), представляя свой идентификатор Инициатору, а затем создавая другую ассоциацию HIP в направлении Ответчика. Это возможно, если Инициатор использует режим Opportunistic, а Ответчик настроен на восприятие соединений от любого узла с поддержкой HIP. Атакующий вне пути не сможет организовать такую атаку, поскольку он не способен отвечать на сообщения базового обмена.

Эти свойства безопасности характерны для коммуникаций в современной сети Internet. Клиент, связывающийся с сервером без использования сквозной защиты, может обнаружить, что он взаимодействует с сервером через MitM в предположении готовности сервера взаимодействовать с кем угодно. При использовании сквозной защиты худшим, что может случиться как при использовании Opportunistic HIP так и в режиме без HIP (обычный IP) является отказ в обслуживании, когда элемент пути нарушает взаимодействие но не способен выполнить MitM-атаку.

Однако по завершении обмена Opportunistic протокол HIP обеспечивает защиту целостности и конфиденциальности и позволяет безопасно менять локаторы (адреса) конечных точек. В результате режим Opportunistic в HIP предлагает модель защиты «лучше, чем ничего» (better than nothing). Исходно базовый обмен, аутентифицированный в режиме Opportunistic, полагается на веру (leap of faith) и подвержен MitM-атакам, но последующие дейтаграммы, относящиеся к той же ассоциации HIP не могут быть скомпрометированы новой MitM-атакой. Кроме того, при уходе MitM с пути активной ассоциации атака будет обнаружена постфактум. Таким образом, можно считать, что режим Opportunistic в HIP не менее защищён, чем обычные коммуникации IP без защиты.

4.2. Обновление ассоциации HIP

Ассоциацию HIP между парой хостов может потребоваться обновить с течением времени. Примеры включают необходимость смены ключей защищённых связей, новые защищённые связи, смену адресов IP. Для этих о похожих целей применяются пакеты UPDATE. Этот документ задаёт лишь формат и базовые правила обработки UPDATE с обязательными параметрами, а фактическое использование определяется в отдельных спецификациях.

HIP включает пакеты общего назначения UPDATE, которые могут передавать несколько параметров HIP для обновления состояния HIP между парой хостов. В сообщения UPDATE включаются монотонно возрастающие порядковые номера и партнёр явно подтверждает эти сообщения. Потеря UPDATE или подтверждения может быть восстановлена путём повтора передачи. При некоторых обстоятельствах может применяться несколько сообщений UPDATE.

Пакеты UPDATE защищены с помощью параметров HIP_MAC и HIP_SIGNATURE, поскольку обработка подписей UPDATE открывает возможность организации DoS-атак на промежуточные системы.

Пакеты UPDATE подтверждаются явно с помощью параметра, возвращающего полученный от партнера порядковый номер. Один пакет UPDATE может содержать как порядковый номер, так и 1 или несколько номеров подтверждения (т. е. подтверждения UPDATE от партнера). Формат пакетов UPDATE определён в параграфе 5.3.5.

4.3. Обработка ошибок

Обработка ошибок HIP зависит от наличия активной ассоциации HIP. В общем случае при наличии ассоциации HIP между отправителем и получателем пакета, вызвавшего ошибку, получателю следует отвечать пакетом NOTIFY. Если же ассоциации нет или получатель не может надёжно определить отправителя, он может ответить подходящим сообщением ICMP (см. параграф 5.4).

Протокол HIP и его конечный автомат разработаны так, чтобы обеспечивать восстановление после сбоя и потери состояния одной из сторон. Ниже указаны основные варианты обработки ошибок.

Нет предыдущего состояния между системами.

Данные передаёт Инициатор. Процесс является стандартным базовым обменом 4 для создании ассоциации HIP.

Система с данными для передачи не имеет состояния с получателем, но у того остается ассоциация HIP.

Данные передаёт Инициатор, который действует как при отсутствии предшествующего состояния, передавая пакет I1 и получая R1. Когда Ответчик получает действительный пакет I2, старая ассоциация «обнаруживается» и удаляется, а вместо неё создаётся новая.

Система с данными для передачи имеет ассоциацию HIP, но ее нет у получателя.

Система передаёт данные в исходящую защищённую пользовательскую ассоциацию. Получатель «обнаруживает» ситуацию, когда он получил пакет с данными пользователя, но не может связать его с ассоциацией HIP. Принимающий хост должен отбросить пакет.

Принимающему хосту следует передать пакет ICMP типа Parameter Problem для информирования отправителя об отсутствии ассоциации HIP (см. параграф 5.4) и он может инициировать новый обмен HIP BEX. Однако использование этих дополнительных механизмов зависит от реализации и политики. Если передающее приложение не ждёт отклика, система может передать в этом состоянии большое число пакетов, поэтому рекомендуется отправка 1 или нескольких пакетов ICMP. Однако частота таких откликов должна быть ограничена для предотвращения злоупотреблений (см. параграф 5.4).

4.4. Конечный автомат HIP

Сам протокол HIP имеет немного состояний. В базовом обмене HIP участвуют Инициатор и Ответчик. После организации защищённой связи (security association или SA) это различие исчезает. Если состояние HIP нужно создать снова, управляющие параметры определяет партнёр, у которого сохранилось состояние и который имеет дейтаграмму для отправки другому партнёру. Описанный ниже конечный автомат пытается контролировать эти процессы.

Конечный автомат является симметричным, представляется с точки зрения Инициатора или Ответчика и не является полным представлением логики обработки. Дополнительные правила обработки приведены в описаниях пакетов, поэтому для полной реализации HIP нужна поддержка конечного автомата и этих правил.

Этот документ расширяет конечный автомат [RFC5201] и добавляет вариант перезапуска, позволяющего согласовать криптографические алгоритмы. Расширение заключается в переходе из состояния I1-SENT обратно в это же состояние (перезапуск). Инициатору требуется запускать базовый обмен HIP снова, если Ответчик не поддерживает HIT Suite Инициатора. В этом случае Инициатор перезапускает базовый обмен HIP отправкой нового пакета I1 с HIT источника, поддерживаемым Ответчиком.

Разработчикам следует понимать, что рассмотренный здесь конечный автомат является лишь описанием и логика обработки может быть реализована разными способами. В разделе 6 правила обработки пакетов рассмотрены более подробно. Это описание сосредоточено лишь на пакетах HIP I1, R1, I2 и R2. Механизмы из других спецификаций (например, многоадресность или мобильность) могут добавлять состояния и переходы в конечный автомат.

4.4.1. Термины для конечного автомата

Unused Association Lifetime (UAL) — срок действия неиспользуемой ассоциации

Определяемое реализацией время, по истечении которого хост может начать разрыв имеющейся ассоциации HIP при отсутствии приёма или передачи пакетов через нее.

Maximum Segment Lifetime (MSL) — максимальный срок действия сегмента

Максимальное время, которое предполагается для нахождения пакета HIP в сети. По умолчанию принято время 2 минуты, заимствованное из [RFC0793], поскольку это преобладающее допущение о сроке действия пакетов.

Exchange Complete (EC) — обмен завершен

Время, которое хост проводит в состоянии R2-SENT перед переходом в состояние ESTABLISHED. Это время составляет продолжительность тайм-аута повтора I2, умноженное на значение n приблизительно равное I2_RETRIES_MAX.

Receive ANYOTHER — получен другой пакет

Получение любого пакета, для которого не задана смена состояния или правила обработки в текущем состоянии.

4.4.2. Состояния HIP

Таблица 1. Состояния HIP.

Состояние

Описание

UNASSOCIATED

Запуск конечного автомата

I1-SENT

Запуск базового обмена

I2-SENT

Ожидание завершения базового обмена

R2-SENT

Ожидание завершения базового обмена

ESTABLISHED

Ассоциация HIP создана

CLOSING

Ассоциация HIP закрывается, данные передать невозможно

CLOSED

Ассоциация HIP закрыта, данные передать невозможно

E-FAILED

Отказ при базовом обмене HIP

4.4.3. Процессы состояний HIP

Поведение системы, находящейся в состоянии UNASSOCIATED, показано в таблице 2.

Таблица 2. Стартовое состояние UNASSOCIATED.

Триггер

Действие

Для передачи пользовательских данных нужна новая ассоциация HIP

Отправка I1 и переход в I1-SENT.

Получение I1

Передача R1 и сохранение UNASSOCIATED.

Получение I2, обработка

При успешной обработке передача R2 и переход в R2-SENT, в ином случае сохранение UNASSOCIATED.

Получение пользовательских данных для неизвестной ассоциации HIP

Необязательная передача ICMP (см. параграф 5.4) и сохранение UNASSOCIATED.

Получение CLOSE

Необязательная передача ICMP Parameter Problem и сохранение UNASSOCIATED.

Получение ANYOTHER

Отбрасывание пакета и сохранение UNASSOCIATED.

Поведение системы, находящейся в состоянии I1-SENT, показано в таблице 3.

Таблица 3. I1-SENT — инициализация базового обмена HIP.

Триггер

Действие

Получение I1 от Ответчика

Если локальный тег HIT меньше HIT партнера (см. параграф 6.5), пакет I1 отбрасывается, иначе передается R1. В обоих случаях сохраняется I1-SENT.

Получение I2, обработка

При успешной обработке передача R2 и переход в R2-SENT, иначе сохранение I1-SENT.

Получение R1, обработка

Если HIT Suite из локального HIT не поддерживается партнёром, выбор подходящего локального HIT, передача I1 и сохранение I1-SENT.
При успешной обработке передача I2 и переход в I2-SENT, иначе сохранение I1-SENT.

Получение ANYOTHER

Отбрасывание пакета и сохранение I1-SENT.

Тайм-аут

Инкрементирование счётчика повторов. Если счётчик меньше I1_RETRIES_MAX, передача I1 и сохранение I1-SENT, если счётчик больше I1_RETRIES_MAX, переход в E-FAILED.

Поведение системы, находящейся в состоянии I2-SENT, показано в таблице 4.

Таблица 4. I2-SENT — ожидание завершения базового обмена HIP.

Триггер

Действие

Получение I1

Передача R1 и сохранение I2-SENT.

Получение R1, обработка

При успешной обработке передача I2. Сохранение I2-SENT

Получение I2, обработка

Если обработка успешна и локальный тег HIT меньше HIT партнера, отбрасывание I2 и сохранения I2-SENT. Если обработка успешна и локальный тег HIT больше партнеросного, передача R2 и переход в R2-SENT. При неудачной обработке сохраняется I2-SENT.

Получение R2, обработка

При успешной обработке переход в ESTABLISHED, иначе сохранение I2-SENT.

Получение CLOSE, обработка

При успешной обработке передача CLOSE_ACK и переход в CLOSED, иначе сохранение I2-SENT.

Получение ANYOTHER

Отбрасывание пакета и сохранение I2-SENT.

Тайм-аут

Инкрементирование счётчика повторов. Если счётчик меньше I2_RETRIES_MAX, передача I2 и сохранение I2-SENT, если счётчик больше I2_RETRIES_MAX, переход в E-FAILED.

Поведение системы, находящейся в состоянии R2-SENT, показано в таблице 5.

Таблица 5. R2-SENT — ожидание завершения HIP.

Триггер

Действие

Получение I1

Отбрасывание пакета и сохранение R2-SENT.

Получение I2, обработка

При успешной обработке передача I2. Сохранение R2-SENT

Получение R1

Отбрасывание пакета и сохранение R2-SENT.

Получение R2

Отбрасывание пакета и сохранение R2-SENT.

Получение данных или UPDATE

Переход в ESTABLISHED.

Тайм-аут завершения обмена

Переход в ESTABLISHED.

Получение CLOSE, обработка

При успешной обработке передача CLOSE_ACK и переход в CLOSED, иначе сохранение ESTABLISHED.

Получение CLOSE_ACK

Отбрасывание пакета и сохранение R2-SENT.

Получение NOTIFY

Обработка пакета и сохранение R2-SENT.

Поведение системы, находящейся в состоянии ESTABLISHED, показано в таблице 6.

Таблица 6. ESTABLISHED — ассоциация HIP создана.

Триггер

Действие

Получение I1

Передача R1 и сохранение ESTABLISHED.

Получение I2

Обработка головоломки и (возможно) проверка Opaque data.
При успешной обработке передача R2, отбрасывание старой ассоциации HIP, создание новой и переход в R2-SENT, при отказе сохранение ESTABLISHED.

Получение R1

Отбрасывание пакета и сохранение ESTABLISHED.

Получение R2

Отбрасывание пакета и сохранение ESTABLISHED.

Получение пользовательских данных для ассоциации HIP

Обработка пакета и сохранение ESTABLISHED.

Нет пакетов в интервале UAL минут

Передача CLOSE и переход в CLOSING.

Получение UPDATE

Обработка пакета и сохранение ESTABLISHED.

Получение CLOSE, обработка

При успешной обработке send CLOSE_ACK и переход в CLOSED, при отказе сохранение ESTABLISHED.

Получение CLOSE_ACK

Отбрасывание пакета и сохранение ESTABLISHED.

Получение NOTIFY

Обработка пакета и сохранение ESTABLISHED.

Поведение системы, находящейся в состоянии CLOSING, показано в таблице 7.

Таблица 7. CLOSING — ассоциация HIP не использовалась в течение UAL минут.

Триггер

Действие

Для передачи данных пользователя нужна новая инкарнация ассоциации HIP

Передача I1 и переход в I1-SENT.

Получение I1

Передача R1 и сохранение CLOSING.

Получение I2, обработка

При успешной обработке передача R2 и переход в R2-SENT, иначе сохранение CLOSING.

Получение R1, обработка

При успешной обработке передача I2 и переход в I2-SENT, иначе сохранение CLOSING.

Получение CLOSE, обработка

При успешной обработке передача CLOSE_ACK, отбрасывание состояния и переход в CLOSED, иначе сохранение CLOSING.

Получение CLOSE_ACK, обработка

При успешной обработке отбрасывание состояния и переход в UNASSOCIATED, иначе сохранение CLOSING.

Получение ANYOTHER

Отбрасывание пакета и сохранение CLOSING.

Тайм-аут

Увеличение тайм-аута sum и сброс таймера. Если тайм-аут sum меньше UAL+MSL, повтор CLOSE и сохранение CLOSING. Если тайм-аут sum больше UAL+MSL, переход в UNASSOCIATED.

Поведение системы, находящейся в состоянии CLOSED, показано в таблице 8.

Таблица 8. CLOSED — передан CLOSE_ACK и при необходимости повторяется.

Триггер

Действие

Для передачи дейтаграммы нужна другая инкарнация ассоциации HIP

Передача I1 и сохранение CLOSED.

Получение I1

Передача R1 и сохранение CLOSED.

Получение I2, обработка

При успешной обработке передача R2 и переход в R2-SENT, иначе сохранение
CLOSED.

Получение R1, обработка

При успешной обработке передача I2 и переход в I2-SENT, иначе сохранение
CLOSED.

Получение CLOSE, обработка

При успешной обработке передача CLOSE_ACK. Сохранение CLOSED.

Получение CLOSE_ACK, обработка

При успешной обработке отбрасывание состояния и переход в UNASSOCIATED, иначе сохранение CLOSED.

Получение ANYOTHER

Отбрасывание пакета и сохранение CLOSED.

Тайм-аут (UAL+2MSL)

Отбрасывание состояния и переход в UNASSOCIATED

Поведение системы, находящейся в состоянии E-FAILED, показано в таблице 9.

Таблица 9. E-FAILED — отказ HIP при создании ассоциации с партнером.

Триггер

Действие

Ожидание в зависимости от реализации

Переход в UNASSOCIATED, после чего возможен повтор согласования.

4.4.4. Упрощённая диаграмма состояний HIP

На рисунке 2 показаны основные смены состояний. Переходы в результате приёма пакетов неявно предполагают их успешную аутентификацию или обработку.

                            +--+       +----------------------------+
      приём I1, передача R1 |  |       |                            |
                            |  v       v                            |
                          +--------------+  приём I2, передача R2   |
         +----------------| UNASSOCIATED |----------------+         |
дейтагр. |  +--+          +--------------+                |         |
для отпр.|  |  | Alg. not supported,                      |         |
отпр. I1 |  |  | передача I1                              |         |
  .      v  |  v                                          |         |
  .   +---------+  приём I2, передача R2                  |         |
+---->| I1-SENT |--------------------------------------+  |         |
|     +---------+            +----------------------+  |  |         |
|          | приём R1,       |приём I2, передача R2 |  |  |         |
|          v передача I2     |                      v  v  v         |
|       +---------+          |                    +---------+       |
|  +--->| I2-SENT |----------+     +--------------| R2-SENT |<---+  |
|  |    +---------+                |              +---------+    |  |
|  |          |  |прием R2         |     тайм-аут  |             |  |
|  |прием R1, |  |                 |  данных или EC|             |  |
|  |отпр. I2  +--|-----------------+               |    приём I2,|  |
|  |          |  |       +-------------+           |  передача R2|  |
|  |          |  +------>| ESTABLISHED |<----------+             |  |
|  |          |          +-------------+                         |  |
|  |          |            |  |  |      приём I2, передача R2    |  |
|  |          +------------+  |  +-------------------------------+  |
|  |          |               +-----------+                      |  |
|  |          |    нет пакетов в течение  |    +---+             |  |
|  |          |  UAL минут, передача CLOSE|    |   |тайм-аут     |  |
|  |          |                           v    v   |(UAL+MSL)    |  |
|  |          |                        +---------+ |повтор       |  |
+--|----------|------------------------| CLOSING |-+CLOSE        |  |
   |          |                        +---------+               |  |
   |          |                         | |   | |                |  |
   +----------|-------------------------+ |   | +----------------+  |
   |          |               +-----------+   +------------------|--+
   |          |               |приём CLOSE,     приём CLOSE_ACK  |  |
   |          +-------------+ |отпр. CLOSE_ACK  или тайм-аут     |  |
   |     приём CLOSE,       | |                 (UAL+MSL)        |  |
   |     передача CLOSE_ACK v v                                  |  |
   |                     +--------+  приём I2, передача R2       |  |
   +---------------------| CLOSED |------------------------------+  |
                         +--------+                                 |
                          ^ |  |                                    |
приём CLOSE,              | |  |             тайм-аут (UAL+2MSL)    |
передача CLOSE_ACK        +-+  +------------------------------------+

Рисунок 2. Состояния HIP.


4.5. Пользовательские данные

4.5.1. Расчёт псевдозаголовков TCP и UDP для пользовательских данных

При расчёте контрольных сумм TCP и UDP в пользовательских пакетах данных, проходящих через сокеты, привязанные к HIT, должен использоваться формат псевдозаголовка IPv6 [RFC2460], даже если фактический адрес в заголовке пакета является IPv4. Кроме того, в псевдозаголовке IPv6 должны использоваться теги HIT вместо адресов IPv6. Отметим, что псевдозаголовок для фактических данных HIP рассчитывается иначе (см. параграф 5.1.1).

4.5.2. Передача данных в пакетах HIP

Включение пользовательских данных в пакеты HIP могут определять другие документы, однако в настоящее время заголовок HIP является завершающим и за ним не следуют другие заголовки.

4.5.3. Транспортные форматы

Фактический формат, применяемый для передачи пользовательских данных после базового согласования HIP, этот документ не задаёт. Такие транспортные форматы и методы будут описаны в отдельных документах. Все реализации HIP должны поддерживать по меньшей мере транспортный формат ESP для HIP [RFC7402]. Выбор транспортного формата происходит во время базового обмена. Ответчик указывает свои предпочтения для транспорта в параметре TRANSPORT_FORMAT_LIST пакета R1, а Инициатор выбирает один из форматов и включает соответствующий параметр HIP в пакет I2.

4.5.4. Перезагрузка, тайм-аут и перезапуск HIP

Имитация потери состояния является одной из возможных DoS-атак. Ниже описан процесс управления восстановлением состояния, не открывающий возможности для DoS-атак.

Если хост перезагружен или в ассоциации HIP произошёл тайм-аут, состояние HIP теряется. Если у такого хоста сеть дейтаграмма для передачи партнёру, он просто запустит повторно базовый обмен HIP. По завершении обмена Инициатор может создать новую ассоциацию для данных (payload) и начать их отправку. Партнёр не сбрасывает своё состояние до приёма действительного пакета I2.

Если система получает пакет пользовательских данных, который не соответствует имеющейся ассоциации HIP, это может говорить о потере состояния при его сохранении у партнёра. Система может передать пакет ICMP типа Parameter Problem с полем Pointer, указывающим связанную с ассоциацией HIP информацию. Реакция на такие пакет зависит от реализации и среды её применения.

Если явно потерявший состояние хост хочет перезапустить базовый обмен HIP, он передаёт партнёру сообщение I1. После успешного базового обмена Инициатор может создать новую ассоциацию HIP, а партнёр отбросит свои старые ассоциации для данных и создаст новую.

4.6. Распространение сертификатов

Этот документ не задаёт способы использования сертификатов и их передачи между хостами. Предполагается определение этих функций в будущей спецификации, как было сделано для HIP версии 1 (см. [RFC6253]). Однако значение типа параметра для переноса сертификатов зарезервировано (CERT, Type 768), см. параграф 5.2.

5. Формат пакетов

5.1. Формат данных

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   | Header Length |0| Packet Type |Version| RES.|1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Checksum             |           Controls            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Sender's Host Identity Tag (HIT)               |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Receiver's Host Identity Tag (HIT)              |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
/                        HIP Parameters                         /
/                                                               /
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Все пакеты HIP начинаются с показанного ниже фиксированного заголовка.

Логически заголовок HIP является заголовком расширения IPv6, однако этот документ не описывает обработку значений Next Header, отличающихся от 59 (IPPROTO_NONE), означающего отсутствие последующих заголовков. Будущие документы могут задать поведение для других значений, однако текущие реализации должны игнорировать последующие данные при получении нереализованного значения Next Header.

Поле Header Length указывает общий размер HIP Header и HIP Parameters в 8-байтовых блоках без учёта первых 8 байтов. Поскольку заголовки HIP должны включать теги HIT отправителя и получателя, минимальное значение этого поля составляет 4, а максимальный размер поля HIP Parameters — (255 * 8) — 32 = 2008 байтов (см. параграф 5.1.3 по части фрагментации HIP). Отметим, что это задаёт дополнительное ограничение на размер параметров в поле HIP Parameters, независимо от максимального размера отдельных параметров.

Поле Packet Type указывает тип пакета HIP. Конкретные типы пакетов указаны ниже в соответствующих параграфах. При получении хостом HIP пакета HIP нераспознанного типа этот пакет должен отбрасываться.

Поле HIP Version занимает 4 бита, данный документ определяет версию 2. Предполагается увеличение номера версии лишь при внесении в протоколо изменений, не совместимых с прежней версией. Большинство расширений может обрабатываться за счёт определения новых типов пакетов, параметров или элементов управления Control (см. параграф 5.1.2). Три следующих бита зарезервированы на будущее и должны сбрасываться в 0 при передаче, а получатель должен игнорировать их.

Два фиксированных бита в заголовке зарезервированы для совместимости с SHIM6 параграфом 5.3 в [RFC5533]. В реализациях, следующих лишь этой спецификации, эти биты должны устанавливаться, как показано на рисунке, а получатели должны игнорировать их. Это обеспечит оптимальную совместимость на будущее. Отметим, что реализации, которые следуют другим совместимым спецификациям в дополнение к этой, правила установки этих битов могут быть иными. Например, реализации, поддерживающей данную спецификацию и протокол SHIM6, нужно проверять эти биты для определения способа обработки пакета.

Поля HIT всегда имеют размер 128 битов (16 байтов).

5.1.1. Контрольная сумма

Поскольку контрольная сумма учитывает поля адресов отправителя и получателя в заголовке IP, она должна пересчитываться понимающими HIP устройствами NAT.

Если для пакета HIP используется протокол IPv6, псевдозаголовок [RFC2460] содержит адреса отправителя и получателя IPv6, размер пакета HIP в поле Length псевдозаголовка, нулевое поле и номер протокола HIP (см. параграф 5.1) в поле Next Header. Поле Length указывает размер в байтах и может быть рассчитано из поля HIP Header Length

   (HIP Header Length + 1) * 8

В случае IPv4 используется формат псевдозаголовка IPv4 UDP [RFC0768]. В псевдозаголовке используются адреса отправителя и получателя из заголовка IP, нулевое поле, номер протокола HIP (см. раздел 4) и размер, определяемый как для IPv6.

5.1.2. Поле HIP Controls

Поле HIP Controls переносит информацию о структуре пакета и созможностях хоста. В настоящее время определён лишь 1 бит.

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | | | | | |A|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


A — Anonymous

Установка этого бита говорит о том, что HI отправителя этого пакета является анонимным, т. е. не включён в каталог. Сохранять анонимные HI не следует. Партнёр, получивший анонимный HI в пакете R1 или I2, может отвергнуть этот пакет.

Остальные биты зарезервированы на будущее и должны сбрасываться в 0 при передаче, а получатель должен игнорировать их.

5.1.3. Поддержка фрагментации HIP

Реализация HIP должна поддерживать фрагментацию и сборку IP. Сборка фрагментов должна быть реализована для IPv4 и IPv6, а фрагментацию требуется реализовать для IPv4 (стек и сети IPv4 обычно делают это по умолчанию) и рекомендуется для IPv6. В сетях IPv6 минимальное значение MTU (1280 байтов) больше чем в IPv4. Большего размера MTU обычно достаточно для большинства пакетов HIP, поэтому фрагментация может не потребоваться. Если предполагается передача пакетов HIP больше минимального IPv6 MTU, реализация должна поддерживать создание фрагментов даже для IPv6.

В сетях IPv4 пакеты HIP могут сталкиваться с малым значением MTU на пути передачи. Поскольку базовый протокол HIP, заданный этим документов, не включает механизма использования нескольких дейтаграмм IP для одного пакета HIP, поддержка обнаружения MTU на пути не имеет значения для HIP в сетях IPv4. Понимающим HIP устройствам NAT следует выполнять фрагментацию и сборку для пакетов HIP.

Реализации HIP должны соблюдать осторожность в алгоритмах сборки фрагментов для устойчивости к DoS-атакам.

Использование цепочек сертификатов может приводить к фрагментации пакетов, а та может открывать возможность для DoS-атак [KAU03]. Можно применять схему «хэш и URL», определённую в [RFC6253] для HIP версии 1, чтобы избежать фрагментации и смягчить DoS-атаки.

5.2. Параметры HIP

Параметры HIP содержат сведения, требуемые для организации и поддержки ассоциаций HIP. Например, это могут быть открытые ключи партнёра и сигналы согласования шифров и обработки данных, а также дополнительная информация, важная для конечных хостов и промежуточных устройств. Спецификация параметров HIP и их сопоставления с пакетами HIP и типами пакетов достаточно гиби и позволяют расширениям HIP определять новые параметры и поведение протокола. В пакетах HIP параметры упорядочиваются по численным значениям их типа и представляются в формате TLV. Определённые данным документом параметры приведены в таблице.

TLV

Тип

Размер

Данные

R1_COUNTER

129

12

Счётчик генерации Puzzle.

PUZZLE

257

12

#K и Random #I.

SOLUTION

321

20

#K, Random #I и решение головоломки #J.

SEQ

385

4

Идентификатор пакета UPDATE.

ACK

449

переменный

Идентификатор пакета UPDATE.

DH_GROUP_LIST

511

переменный

Упорядоченный список DH Group ID, поддерживаемых хостом.

DIFFIE_HELLMAN

513

переменный

Открытый ключ.

HIP_CIPHER

579

переменный

Список алгоритмов шифрования HIP.

ENCRYPTED

641

переменный

Шифрованная часть пакета HIP.

HOST_ID

705

переменный

Host Identity с FQDN или NAI.

HIT_SUITE_LIST

715

переменный

Упорядоченный список HIT Suite, поддерживаемых Ответчиком.

CERT

768

переменный

Сертификат HI (задан в отдельном документе).

NOTIFICATION

832

переменный

Информационные сведения.

ECHO_REQUEST_SIGNED

897

переменный

Подписанные Opaque data для возврата

ECHO_RESPONSE_SIGNED

961

переменный

Подписанные Opaque data, возвращаемые по запросу.

TRANSPORT_FORMAT_LIST

2049

переменный

Упорядоченный список предпочтительных номеров типов транспорта HIP.

HIP_MAC

61505

переменный

Код аутентификации сообщения HMAC с ключевым материалом из KEYMAT.

HIP_MAC_2

61569

переменный

Код аутентификации сообщения HMAC с ключевым материалом из KEYMAT. В отличие от HIP_MAC, в расчёт HIP_MAC_2 включается параметр HOST_ID.

HIP_SIGNATURE_2

61633

переменный

Подпись, используемая в пакете R1.

HIP_SIGNATURE

61697

переменный

Подпись, используемая в пакете R1.

ECHO_REQUEST_UNSIGNED

63661

переменный

Opaque data для возврата после подписи

ECHO_RESPONSE_UNSIGNED

63425

переменный

Opaque data, возвращаемые по запросу, после подписи.

Поскольку порядок (по возрастанию) параметров HIP строго соблюдается (см. параграф 5.2.1), выделенные значения параметров разделены промежутками для будущих назначений. Диапазоны параметров показаны в таблице.

Диапазон типов

Назначение

0 — 1023

Согласование.

1024 — 2047

Резерв.

2048 — 4095

Параметры, относящиеся к транспортным форматам HIP.

4096 — 8191

Подписываемые параметры, выделенные соответствующими спецификациями.

8192 — 32767

Резерв.

32768 — 49151

Подписываемые параметры. Резерв для приватного использования.

49152 — 61439

Резерв.

61440 — 62463

Подписи и (подписанные) MAC.

62464 — 63487

Параметры, для которых не применяются подписи и MAC.

63488 — 64511

Rendezvous и ретрансляция.

64512 — 65023

Параметры, для которых не применяются подписи и MAC.

65024 — 65535

Резерв.

Процедура определения новых параметров описана в параграфе 5.2.2. Диапазон от 32768 (215) до 49151 (215 + 214) зарезервирован для приватного использования (Reserved for Private Use) и типы из него следует выбирать случайным образом для снижения вероятности конфликтов.

5.2.1. Формат TLV

В следующих параграфах описываются параметры, представыляемые в формате TLV. Значение поля Type в этих параметрах определяет порядок параметров в пакете. Параметры должны включаться в пакет строго в порядке возрастания значений типа. При наличии в пакете нескольких однотипных параметров они должны размещаться в пакете один за другим. При нарушении порядка параметров формат пакета считается некорректным и пакет должен отбрасываться.

Параметры типов 2048 — 4095 относятся к транспортному формату. В настоящее время определён лишь формат ESP [RFC7402].

Все параметры TLV имеют размер (с учётом полей Type и Length), кратный 8 байтам. При необходимости в параметр должно добавляться заполнение до кратного 8 байтам размера. Это правило обеспечивает корректное выравнивание данных. В байтах заполнения отправитель должен устанавливать значение 0, а получателю не следует проверять эти значения.

Поле Length указывает размер поля Contents (в байтах), поэтому общий размер параметра TLV (поля Type, Length, Contents, Padding) связан со значением поля Length выражением 11 + Length — (Length + 3) % 8, где % указывает деление по модулю.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type            |C|             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
/                          Contents                             /
/                                               +-+-+-+-+-+-+-+-+
|                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

Код типа параметра размером 16 битов, бит C является частью поля Type.

C

Бит критичности параметра. Устанавливается (1) для параметров, которые получатель должен распознавать, и сбрасывается в остальных случаях. Бит C является частью поля Type, поэтому критичные параметры всегда имеют нечетное значение типа, некритичные — четное.

Length

Размер поля Contents в байтах. Поля Type, Length, Padding не учитываются.

Contents

Зависит от типа параметра.

Padding

Заполнение до 7 байтов при необходимости.

Критические параметры (нечетное значение типа) должны распознаваться получателем. Если получатель встречает неизвестные критический параметр, дальнейшая обработка пакета недопустима. Получатель может передать сообщение ICMP или пакет NOTIFY, как указано в параграфе 4.3. Некритические параметры можно игнорировать и получателю, встретившему такой неизвестный параметр, следует продолжать обработку пакета, как будто параметра нет.

5.2.2. Определение новых параметров

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

  1. Младший бит (C) в коде типа служит для указания критических параметров. Поэтому типы с нечетным номером всегда задают критические параметры.

  2. Новый параметр может быть критическим лишь в том случае, когда старая реализация при его игнорировании создаст проблему безопасности. В общем случае новые параметры следует задавать как некритические и ожидать для них отклика от получателя.

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

  4. Правила выделения кодов Type приведены в разделе 9.

5.2.3. R1_COUNTER

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Reserved, 4 байта                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                R1 generation counter, 8 байтов                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

129

Length

12

R1 generation counter

Текущее поколение действительных головоломок.

Параметр R1_COUNTER содержит 64-битовое целое число без знака с сетевым порядком байтов, указывающее текущее поколение действительных головоломок. Отправителю следует периодически инкрементировать этот счётчик. рекомендуется инкрементировать счётчик не реже отмены старых значений PUZZLE, чтобы значения SOLUTION для них больше не принимались.

Поддержка параметра R1_COUNTER является обязательной, хотя его включение в пакет R1 не требуется. Его следует включать в R1 (тогда оно учитывается в подписи) и при наличии параметра в R1 Инициатор должен возвращать его (включая поле Reserved) в пакете I2.

5.2.4. PUZZLE

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  #K, 1 byte   |    Lifetime   |        Opaque, 2 bytes        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Random #I, RHASH_len / 8 байтов          |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

257

Length

4 + RHASH_len / 8

#K

Число проверяемых битов.

Lifetime

Срок действия головоломки — 2(Lifetime — 32) секунд.

Opaque

Данные, установленные Ответчиком для индексирования головоломки.

Random #I

Случайное значение размером RHASH_len битов.

Random #I представляется целым числом размером n битов (n = RHASH_len), а #K и Lifetime — 8-битовыми целыми числами с сетевым порядком байтов.

Параметр PUZZLE указывает сложность головоломки #K и n-битовое случайное целое число Random #I. Поле Lifetime указывает время, в течение которого действует решение головоломки, и ограничивает время, которое Инициатор может потратить на решение задачи. Срок действия указывается степенью 2 и фактический срок составляет 2(Lifetime — 32) секунд. Задача может быть дополнена параметром ECHO_REQUEST_SIGNED или ECHO_REQUEST_UNSIGNED, включаемым в пакет R1. Содержимое запроса возвращается в параметре ECHO_RESPONSE_SIGNED или ECHO_RESPONSE_UNSIGNED, позволяя Ответчику использовать значение как часть обработки головоломки.

Поля Opaque и Random #I не учитываются в параметре HIP_SIGNATURE_2.

5.2.5. SOLUTION

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  #K, 1 byte   |   Reserved    |        Opaque, 2 bytes        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Random #I, n байтов                      |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Puzzle solution #J, RHASH_len / 8 байтов             |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

321

Length

4 + RHASH_len / 4

#K

Число проверяемых битов.

Reserved

0 при передаче, игнорируется при получении.

Opaque

Копируется без изменений из полученного параметра PUZZLE.

Random #I

Случайное значение размером RHASH_len битов.

Puzzle solution #J

Случайное значение размером RHASH_len битов.

Random #I и Random #J представляются целами числами без знака размером n битов (n = RHASH_len), а #K — 8-битовое целое число без знака. Все числа используют сетевой порядок байтов.

Параметр SOLUTION содержит решение головоломки. Он возвращает случайное значение сложности #K, поле Opaque и целочисленное представление головоломки #I.

5.2.6. DH_GROUP_LIST

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DH GROUP ID #1| DH GROUP ID #2| DH GROUP ID #3| DH GROUP ID #4|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DH GROUP ID #n|                Padding                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

511

Length

Число DH Group ID.

DH GROUP ID

Идентификатор группы DH, поддерживаемой хостом. Список ID упорядочивается по предпочтениям хоста. Возможные DH Group ID указываются в параметре DIFFIE_HELLMAN. Размер DH Group ID составляет 1 октет.

Параметр DH_GROUP_LIST содержит список поддерживаемых хостом DH Group ID. Инициатор передаёт DH_GROUP_LIST в пакете I1, а Ответчик Responder передаёт свой список в подписанной чати пакета R1. DH Group ID в DH_GROUP_LIST указываются в порядке снижения предпочтений хоста, передающего список. Информация в DH_GROUP_LIST позволяет Ответчику выбрать предпочтительную группу DH, поддерживаемую Инициатором. На основе DH_GROUP_LIST в пакете R1 Инициатор может определить, выбрал ли Ответчик наилучший вариант из числа предпочитается обеими сторонами. Если Ответчик выбрал не лучший вариант, Инициатор может считать это попыткой атаки на понижение (см. параграф 4.1.7).

При выборе группы DH для параметра DIFFIE_HELLMAN в пакете R1 Ответчик должен выбрать первый идентификатор DH Group ID из своего DH_GROUP_LIST в пакете R1, который совместим с одним из Suite ID списке Инициатора DH_GROUP_LIST из пакета I1. Ответчику недопустимо выбирать какой-либо иной DH Group ID из числа содержащихся в обоих списках во избежание незамеченной атаки на понижение.

В общем случае хостам следует предпочитать более сильные группы, если сложность расчётов не слишком велика для приложения.

5.2.7. DIFFIE_HELLMAN

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Group ID    |      Public Value Length      | Public Value  /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

513

Length

Размер в октетах без учёта Type, Length, Padding.

Group ID

Указывает значения для p и g, а также KDF.

Public Value Length

Размер следующего поля Public Value в октетах.

Public Value

Открытый ключ DH отправителя.

Один параметр DIFFIE_HELLMAN может быть включён в выбранный пакет HIP на основе выбранного идентификатора DH Group ID (параграф 5.2.6). Ниже перечислены определённые в настоящее время Group ID со значениями.

Группа

KDF

Значение

Резерв

0

Отменена

1

Отменена

2

1536-bit MODP group [RFC3526]

HKDF [RFC5869]

3

3072-bit MODP group [RFC3526]

HKDF [RFC5869]

4

Отменена

5

Отменена

6

NIST P-256 [RFC5903]

HKDF [RFC5869]

7

NIST P-384 [RFC5903]

HKDF [RFC5869]

8

NIST P-521 [RFC5903]

HKDF [RFC5869]

9

SECP160R1 [SECG]

HKDF [RFC5869]

10

2048-битовая группа MODP [RFC3526]

HKDF [RFC5869]

11

Группы MODP DH определены в [RFC3526], группы ECDH 7-9 — в [RFC5903] и [RFC6090], ECDH 10 описана в Приложении D. Любые группы ECDH, используемые с HIP, должны иметь коэффициент (co-factor) 1.

Group ID указывает также функцию вывода ключей для создания симметричных ключей для HMAC и симметричного шифрования из обмена ключами DH (см. параграф 6.5).

Реализации HIP должны поддерживать Group ID 3. 160-битовая группа SECP160R1 может применяться при невысоких требованиях к защите (например, для просмотра web) или при ограниченных возможностях оборудования (например, в некоторых PDA). Разработчикам следует реализовать Group ID 4 и 8.

Для предотвращения ненужных отказов в процессе базового обмена остальные группы следует реализовать на хостах с достаточными ресурсами.

5.2.8. HIP_CIPHER

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Cipher ID #1         |          Cipher ID #2         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Cipher ID #n         |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

579

Length

Размер в октетах без учёта Type, Length, Padding.

Cipher ID

Идентификатор алгоритма, используемого для шифрования параметра ENCRYPTED. Ниже перечислены определённые в настоящее время Cipher ID.

Suite ID

Значение

Резерв

0

NULL-ENCRYPT

1 ([RFC2410])

AES-128-CBC

2 ([RFC3602])

Резерв

3 (не используется)

AES-256-CBC

4 ([RFC3602])

Отправитель параметра HIP_CIPHER должен обеспечить в нем не более 6 полей Cipher ID, а получатель должен быть готов обрабатывать параметры, содержащие более 6 полей Cipher ID, воспринимая из них 6 первых и отбрасывая остальные. Ограничение числа Cipher ID определяет максимальный размер параметра HIP_CIPHER. По умолчанию параметр HIP_CIPHER должен включать хотя бы один обязательный Cipher ID. Может применяться параметр конфигурации для переопределения администратором заданного по умолчанию идентификатора.

Ответчик указывает поддерживаемые и желаемые Cipher ID (до 6) в порядке предпочтения в пакете R1, а Инициатор должен выбрать из них лишь один Cipher ID, который применяется для генерации параметра ENCRYPTED.

Обязательная реализация — AES-128-CBC. Разработчикам следует поддерживать NULL-ENCRYPT для тестирования и отладки, но недопустимо предлагать или воспринимать его, если явно не задано тестирование или отладка HIP.

5.2.9. HOST_ID

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          HI Length            |DI-Type|      DI Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Algorithm            |         Host Identity         /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |       Domain Identifier       /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

705

Length

Размер в октетах без учёта Type, Length, Padding.

HI Length

Размер поля Host Identity в октетах.

DI-Type

Тип следующего поля Domain Identifier.

DI Length

Размер поля Domain Identifier в октетах.

Algorithm

Индекс используемого алгоритма.

Host Identity

Фактическое значение Host Identity.

Domain Identifier

Идентификатор отправителя.

Определённые в настоящее время значения DI-Type приведены в таблице.

Тип

Значение

Не включено

0

FQDN

1

NAI

2

FQDN

Полное доменное имя (Fully Qualified Domain Name) в двоичном формате.

NAI

Идентификатор доступа в сеть (Network Access Identifier).

Формат FQDN определён в параграфе 3.1 RFC 1035 [RFC1035], формат NAI — в [RFC4282].

Хост может связать Host Identity с одним Domain Identifier в параметре HOST_I. При отсутствии Domain Identifier (DI-Type = 0), в поле DI Length также устанавливается 0.

Определённые в настоящее время HI Algorithm перечислены ниже.

Профили алгоритмов

Значения

Резерв

0

DSA

3 [FIPS.186-4.2013] (рекомендуется)

RSA

5 [RFC3447] (требуется)

ECDSA

7 [RFC4754] (требуется)

ECDSA_LOW

9 [SECG] (рекомендуется)

Для ключей DSA, RSA, ECDSA следует применять профили, содержащие по меньшей мере 112 битов «силы защиты» (как определено в [NIST.800-131A.2011]). Для дополнения подписи RSA должно применяться заполнение по методу вероятностной схемы подписи (Probabilistic Signature Scheme или PSS) [RFC3447].

Host Identity выводится из формата DNSKEY для RSA и DSA. Для этого применяется поле Public Key части RDATA из RFC 4034 [RFC4034]. Для криптографии на основе эллиптических кривых (Elliptic Curve Cryptography или ECC) выделены два профиля — ECDSA и ECDSA_LOW. ECC содержит кривые, одобренные NIST и определённые в RFC 4754 [RFC4754]. Профиль ECDSA_LOW определён для устройств с ограниченными вычислительными возможностями и использует более короткие кривые из Standards for Efficient Cryptography Group [SECG]. При использовании ECDSA с HIP должен применяться коэффициент 1.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          ECC Curve            |                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                         Public Key                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Для ECDSA и ECDSA_LOW отождествление хоста (Host Identity) представляется двумя полями.

ECC Curve

Метка кривой.

Public Key

Открытый ключ в форме строки октетов Represented [RFC6090].

Для хостов, применяющих ECDSA в качестве алгоритма, требуются указанные ниже кривые ECC.

Алгоритм

Кривая

Значения

ECDSA

Резерв

0

ECDSA

NIST P-256

1 [RFC4754]

ECDSA

NIST P-384

2 [RFC4754]

Для хостов, реализующих профиль алгоритма ECDSA_LOW, требуются указанные ниже кривые.

Алгоритм

Кривая

Значения

ECDSA_LOW

Резерв

0

ECDSA_LOW

SECP160R1

1 [SECG]

5.2.10. HIT_SUITE_LIST

Параметр HIT_SUITE_LIST содержит список поддерживаемых Ответчиком HIT Suite ID. Ответчик передает HIT_SUITE_LIST в подписанной части пакета R1. На основе HIT_SUITE_LIST Инициатор может определить, какие наборы из исходного списка HIT Suite ID поддерживает Ответчик.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ID #1     |     ID #2     |     ID #3     |     ID #4     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ID #n     |                Padding                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

715

Length

Число HIT Suite ID

ID

Однооктетный идентификатор HIT Suite, поддерживаемого хостом. Список идентификаторов упорядочивается по уровню предпочтения. 4 старших бита поля ID соответствуют HIT Suite ID в поле ORCHID OGA ID, а младшие биты являются резервными и устанавливаются отправителем в 0. Получение ID с отличными от 0 четырьмя младшими битами следует считать ошибкой, которая может вести к отправке NOTIFICATION типа UNSUPPORTED_HIT_SUITE.

HIT Suite ID индексирует HIT Suite, включающие алгоритмы подписи, как указано в параграфе 5.2.9, и хэш-функции.

Поле ID в HIT_SUITE_LIST является 8-битовым в отличие от 4-битовых HIT Suite ID и OGA ID в ORCHID. Это предназначено для расширения пространства HIT Suite ID, если 16 доступных значений будет недостаточно. В этом случае значение 0 (одно из 16) указывает, что 4 дополнительных бита ORCHID будут служить для кодирования HIT Suite ID. Текущие 4-битовые HIT Suite ID используют лишь старшие биты поля I, а в будущих документах может быть определено использование 4 младших битов поля ID.

Ниже перечислены определённые в настоящее время HIT Suite ID и связи между 4-битовыми ID, применяемыми в поле OGA ID, и 8-битовым представлением в HIT_SUITE_LIST ID.

HIT Suite

4-битовый идентификатор

8-битовое кодирование

Резерв

0

0x00

RSA,DSA/SHA-256

1

0x10 (требуется)

ECDSA/SHA-384

2

0x20 (рекомендуется)

ECDSA_LOW/SHA-1

3

0x30 (рекомендуется)

В таблице 10 комбинации HIT Suite представлены более подробно. Каждый алгоритм генерации принимает на входе идентификатор HI, как указано в параграфе 3.2. Результат размером 96 битов напрямую используется в ORCHID.

Таблица 10. Наборы HIT Suite.

Индекс

Хэш-функция

HMAC

Семейство алгоритмов подписи

Описание

0

Резерв

1

SHA-256

HMAC-SHA-256

RSA, DSA

RSA или DSA HI хешируется SHA-256 и отсекается до 96 битов.

2

SHA-384

HMAC-SHA-384

ECDSA

ECDSA HI хешируется SHA-384 и отсекается до 96 битов.

3

SHA-1

HMAC-SHA-1

ECDSA_LOW

ECDSA_LOW HI хешируется SHA-1 и отсекается до 96 битов.

Хэш Ответчика, как указано в HIT Suite, определяет код HMAC, применяемый для функции RHASH. В настоящее время определены кода HMAC-SHA-256 [RFC4868], HMAC-SHA-384 [RFC4868], HMAC-SHA-1 [RFC2404].

5.2.11. TRANSPORT_FORMAT_LIST

Параметр TRANSPORT_FORMAT_LIST содержит список поддерживаемых Ответчиком форматов транспорта HIP (TF) и передаётся в подписанной части пакета R1. На основе TRANSPORT_FORMAT_LIST Инициатор выбирает 1 подходящий транспорт в своём пакете отклика.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          TF type #1           |           TF type #2          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/          TF type #n           |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

2049

Length

Удвоенное число типов TF.

TF Type

Тип транспортного формата (TF), поддерживаемого хостом. Номера типов соответствуют номерам параметров HIP для соответствующего транспорта. Список TF упорядочивается по предпочтениям отправителя.

Типы TF индексируют соответствующие параметры HIP для формата транспорта из диапазона 2050 — 4095. Параметры и их применение задают отдельные документы. В настоящее время определён лишь транспорт IPsec ESP [RFC7402].

Для каждого указанного типа TF отправитель TRANSPORT_FORMAT_LIST должен включить в пакет HIP соответствующий параметр формата транспорта. Получатель должен игнорировать тип TF в TRANSPORT_FORMAT_LIST при отсутствии в пакете соответствующего параметра транспортного формата.

5.2.12. HIP_MAC

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             HMAC                              |
/                                                               /
/                               +-------------------------------+
|                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

61505

Length

Размер в октетах без учёта Type, Length, Padding.

HMAC

Код HMAC рассчитанный для пакета HIP без учёта HIP_MAC и последующих параметров, таких как HIP_SIGNATURE, HIP_SIGNATURE_2, ECHO_REQUEST_UNSIGNED, ECHO_RESPONSE_UNSIGNED. В поле Checksum должно устанавливаться значение 0, а поле HIP Header Length в базовом заголовке HIP должно рассчитываться без учёта исплюченных при вычислении HMAC параметров. Размер HMAC является естественным размером вывода применяемой хэш-функции.

HMAC использует RHASH как алгоритм хэширования. Расчёт и проверка описаны в параграфе 6.4.1.

5.2.13. HIP_MAC_2

HIP_MAC_2 — это код MAC пакета и HI отправителя в форме параметра HOST_ID, когда этот параметр фактически в пакет не включен. Структура параметра описана в параграфе 5.2.12.

Type

61569

Length

Размер в октетах без учёта Type, Length, Padding.

HMAC

Код HMAC рассчитанный для пакета HIP без учёта HIP_MAC_2 и последующих параметров, таких как HIP_SIGNATURE, HIP_SIGNATURE_2, ECHO_REQUEST_UNSIGNED, ECHO_RESPONSE_UNSIGNED. В поле Checksum должно устанавливаться значение 0, а поле HIP Header Length в базовом заголовке HIP должно рассчитываться без учёта исплюченных при вычислении HMAC параметров. Размер HMAC является естественным размером вывода применяемой хэш-функции.

HMAC использует RHASH как алгоритм хэширования. Расчёт и проверка описаны в параграфе 6.4.1.

5.2.14. HIP_SIGNATURE

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    SIG alg                    |            Signature          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

61697

Length

Размер в октетах без учёта Type, Length, Padding.

SIG alg

Алгоритм подписи.

Signature

Подпись рассчитывается для пакета HIP без параметра HIP_SIGNATURE и следующих за ним параметров. При расчёте подписи для поля Checksum должно устанавливаться значение 0, а поле HIP Header Length в базовом заголовке HIP должно рассчитываться лишь до начала параметра HIP_SIGNATURE.

Алгоритм подписи определён в параграфе 5.2.9. Поле Signature кодируется в зависимости от применяемого алгоритма (например, в соответствии с [RFC3110] для RSA/SHA-1, [RFC5702] для RSA/SHA-256, [RFC2536] для DSA, [RFC6090] для ECDSA). Расчёт и проверка HIP_SIGNATURE описаны в параграфе 6.4.2.

5.2.15. HIP_SIGNATURE_2

HIP_SIGNATURE_2 исключает переменные параметры пакета R1 для создания R1 заранее. Структура параметра описана в параграфе 5.2.14.

Type

61633

Length

Размер в октетах без учёта Type, Length, Padding.

SIG alg

Алгоритм подписи.

Signature

В пакете R1 с параметром HIP_SIGNATURE_2 поля HIT Инициатора, Checksum, а также Opaque и Random #I в PUZZLE должны иметь значение 0 при расчёте подписи HIP_SIGNATURE_2. Поле HIP Header Length в базовом заголовке HIP должно быть скорректировано, как будто при расчёте подписи параметра HIP_SIGNATURE_2 не было в пакете, т. е. HIP Header Length указывает при проверке и подписывании начало HIP_SIGNATURE_2.

Обнуление HIT Инициатора позволяет создать пакеты R1 заранее для минимизации последствий возможных DoS-атак. Обнуление Random #I и Opaque в параметре PUZZLE позволяет динамически заполнять эти поля в заранее созданных R1. Расчёт и проверка HIP_SIGNATURE_2 описаны в параграфе 6.4.2.

5.2.16. SEQ

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Update ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

385

Length

4

Update ID

32-битовый порядковый номер.

Update ID является целым числом без знака с сетевым порядком байтов и хост устанавливает для него значение 0 при переходе в состояние ESTABLISHED. Update ID действует в одной ассоциации HIP, не переходя в другие ассоциации или хосты. Update ID увеличивается на 1 перед каждым пакетом UPDATE, передаваемым хостом. В первом UPDATE от хоста Update ID = 0.

5.2.17. ACK

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       peer Update ID 1                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                       peer Update ID n                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

449

Length

Размер в октетах без учёта Type, Length

peer Update ID

32-битовый порядковый номер, соответствующий полю Update ID в подтверждаемом пакете.

Параметр ACK включает одно или несколько полей Update ID для полученных от партнёра пакетов. Число полей определяется делением поля Length на 4.

5.2.18. ENCRYPTED

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              IV                               /
/                                                               /
/                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               /
/                        Encrypted data                         /
/                                                               /
/                               +-------------------------------+
/                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

641

Length

Размер в октетах без учёта Type, Length, Padding

Reserved

0 при передаче, игнорируется при получении.

IV

Вектор инициализации (при необходимости), размер которого выводится из HIP_CIPHER.

Encrypted data

Данные, зашифрованные с использованием алгоритма, указанного параметром HIP_CIPHER.

Параметр ENCRYPTED инкапсулирует другие параметры в форме зашифрованных данных (блочный шифр). Первыми полями инкапсулированных параметров являются Type и Length первого из таких параметров, что позволяет легко разобрать содержимое после расшифровки.

Поле Encrypted data содержит шифрованный вывод конкатенации параметров HIP. Каждый из этих «внутренних» параметров дополняется в соответствии с правилами параграфа 5.2.1. В результате размер конкатенации параметров кратен 8 байтам.

Некоторые алгоритмы шифрования требуют, чтобы размер шифруемых данных был кратным размеру блока шифрования. В этом случае упомянутый выше блок должен включать дополнительное заполнение до нужного размера (кратного размеру блока шифрования). Алгоритм шифрования может задавать заполнение, отличное от 0, например, в AES [FIPS.197.2001] применяется схема заполнения PKCS5 (см. параграф 6.1.1 в [RFC2898]) где для заполнения n байтов применяется значение n. Это даёт блок «нешифрованных данных», которые преобразуются в «шифрованный блок». Дополнительное заполнение добавляется к набору параметров для выполнения требований к выравниванию шифруемых блоков и не учитывается в полях HIP TLV Length, а после расшифровки удаляется.

Отметим, что размер данных после шифрования может отличаться от исходного, поскольку при шифровании может применяться сжатие или дополнение данных. По завершении процесса шифрования поле Encrypted data готово для включения в параметр. При необходимости добавляется поле Padding для выравнивания (см. параграф 5.2.1).

5.2.19. NOTIFICATION

Параметр NOTIFICATION служит для передачи партренру HIP таких сведений, как сообщения об ошибках и смене состояний. Паараметр может передаваться в пакетах NOTIFY, а возможность его применения в других типах пакетов требует изучения.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Reserved             |      Notify Message Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               /
/                   Notification Data                           /
/                                               +---------------+
/                                               |     Padding   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

832

Length

Размер в октетах без учёта Type, Length, Padding.

Reserved

0 при передаче, игнорируется при получении.

Notify Message Type

Указывает тип уведомления.

Notification Data

Информация или сведения об ошибке, дополняющие Notify Message Type и зависящие от типа (см. ниже).

Сведения из уведомлений могут включать сообщения об ошибках, указывающие причину отказа при создании HIP Security Association, а также информацию о состоянии, которую реализация HIP хочет передать партнеру. Список уведомлений со значениями Notify Message Type приведён ниже. Пакет HIP может включать несколько параметров NOTIFICATION при необходимости передать несколько разных уведомлений. Для предотвращения некоторых типов атак Ответчику следует избегать отправик NOTIFICATION хосту, который не прошёл проверку с помощью головоломки (puzzle solution).

Notify Message Type из диапазона 0-16383 предназначены для информирования об ошибках, а 16384-65535 — для сведений о состоянии. Реализации, получившей пакет NOTIFY с Notify Message Type, указывающим ошибку, в ответ на пакет запроса (например, I1, I2, UPDATE) следует считать, что соответствующий запрос привел к полному отказу. Неизвестные типы ошибок должны игнорироваться, но это следует вносить в системный журнал.

В настоящее время Notify Message Type из диапазона 1-10 служат для информирования об ошибках в структуре пакетов, 11-20 — о проблемах в параметрах.

Поле Notification Data в параметре NOTIFICATION, где Notify Message Type относится к диапазону состояний, должно игнорироваться, если оно не распознано.

Notify Message Type для ошибок

UNSUPPORTED_CRITICAL_PARAMETER_TYPE 1

Передаётся для нераспознанного параметра с установленным битом C. В поле Notification Data указывается 2-октетный типа параметра.

INVALID_SYNTAX 7

Указывает недействительность полученного сообщения HIP по причине недопустимого типа, размера или значения, а также при иных нарушениях формата. Для предотвращения DoS-атак с применением обманных сообщений этот код можно возвращать лишь для пакетов, где поля HIP_MAC (при наличии) и SIGNATURE были проверены. Этот код должен передаваться в отклике на любую ошибку, для которой нет отдельного кода и в него не следует включать детали для предотвращения утечки информации к зондирующим узлам. Для отладки следует записывать более подробные сведения в системный журнал.

NO_DH_PROPOSAL_CHOSEN 14

Ни один из предложенных Group ID не приемлем.

INVALID_DH_CHOSEN 15

Поле DH Group ID не соответствует предложенным Ответчиком.

NO_HIP_PROPOSAL_CHOSEN 16

Ни один из предложенных HIT Suite или HIP Encryption Algorithm не приемлем.

INVALID_HIP_CIPHER_CHOSEN 17

HIP_CIPHER Crypto ID не соответствует предложенным Ответчиком.

UNSUPPORTED_HIT_SUITE 20

Передаётся в ответ на I1 или R1, для которого HIT Suite не поддерживается.

AUTHENTICATION_FAILED 24

Передаётся при ошибке в подписи HIP, за исключением случаев отказа при проверке подписи в NOTIFY.

CHECKSUM_FAILED 26

Передаётся при ошибке в контрольной сумме HIP.

HIP_MAC_FAILED 28

Передаётся при ошибке в HIP HMAC.

ENCRYPTION_FAILED 32

Ответчик не смог расшифровать параметр ENCRYPTED.

INVALID_HIT 40

Передаётся при отказе в процессе проверки HIT партнёра по соответствующему HI.

BLOCKED_BY_POLICY 42

Ответчик не хочет воспринимать ассоциацию в соответствии с политикой (например, при получении HIT = NULL, если политика не разрешает режим Opportunistic).

RESPONDER_BUSY_PLEASE_RETRY 44

Ответчик не хочет воспринимать ассоциацию по причине перегрузки и желания снизить загрузку, отклонив запрос Инициатора. Инициатор может повторить попытку, однако он должен найти другое (отличающееся) решение гловоломки для такого повтора. Отметим, что Инициатору может потребоваться получение новой головоломки с помощью обмена I1/R1.

Notify Message Type для состояния

I2_ACKNOWLEDGEMENT 16384

Ответчик получил пакет I2 от Инициатора, но его пришлось поместить в очередь на обработку. Головоломка была решена верно и Ответчик хочте организовать ассоциацию, но в данный момент в очереди находится некотрое число пакетов I2. Пакет R2 передаётся после обработки I2.

5.2.20. ECHO_REQUEST_SIGNED

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (переменный размер)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

897

Length

Размер Opaque data в октетах.

Opaque data

Неанализируемый данные, которые имеют смысл лишь для узла, передавшего ECHO_REQUEST_SIGNED и получившего в ответ ECHO_RESPONSE_SIGNED или ECHO_RESPONSE_UNSIGNED

Параметр ECHO_REQUEST_SIGNED содержит неанализируемый блок данных (blob) которые отправитель хочет получить обраьно в соответствующем отклике.

ECHO_REQUEST_SIGNED и соответствующие параметры отклика могут использоваться узлом для любых целей, когда он хочет передать то или иное состояние в запросе и получить его обратно в пакете отклика. Параметр ECHO_REQUEST_SIGNED учитывается в HIP_MAC и SIGNATURE. Пакет HIP может содержать лишь 1 параметр ECHO_REQUEST_SIGNED и может включать несколько параметров ECHO_REQUEST_UNSIGNED. Откликом на ECHO_REQUEST_SIGNED должен быть ECHO_RESPONSE_SIGNED.

5.2.21. ECHO_REQUEST_UNSIGNED

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (переменный размер)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

63661

Length

Размер Opaque data в октетах.

Opaque data

Неанализируемые (opaque) данные, которые предполагаются осмысленными лишь для узла, передавшего ECHO_REQUEST_UNSIGNED и получающего соответствующий параметр ECHO_RESPONSE_UNSIGNED.

ECHO_REQUEST_UNSIGNED содержит неанализируемый блок данных (blob), которые отправитель желает получить обратно в отклике.

ECHO_REQUEST_UNSIGNED и соответствующий отклик могут служить для любых целей, когда узел хочет передать в запросе некоторое состояние и получить его обратно в пакете отклика. ECHO_REQUEST_UNSIGNED не учитывается в HIP_MAC и SIGNATURE. Пакет HIP может включать 1 или несколько параметров ECHO_REQUEST_UNSIGNED. Промежуточные устройства могут добавлять параметры ECHO_REQUEST_UNSIGNED в проходящие через них пакеты HIP. Создатель ECHO_REQUEST_UNSIGNED (конечный хост или промежуточное устройство) должен создавать поле Opaque так, чтобы можно было обнаружить и удалить соответствующий параметр ECHO_RESPONSE_UNSIGNED.

В ответ на параметр ECHO_REQUEST_UNSIGNED должен передаваться параметр ECHO_RESPONSE_UNSIGNED.

5.2.22. ECHO_RESPONSE_SIGNED

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (переменный размер)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

961

Length

Размер Opaque data в октетах.

Opaque data

Неанализируемые (opaque) данные, которые копируются из параметра ECHO_REQUEST_SIGNED или ECHO_REQUEST_UNSIGNED, вызвавшего этот отклик.

ECHO_RESPONSE_SIGNED содержит неанализируемый блок данных (blob), которые отправитель ECHO_REQUEST_SIGNED желает получить обратно. Эти данные копируются из параметра ECHO_REQUEST_SIGNED.

Параметры ECHO_REQUEST_SIGNED и ECHO_RESPONSE_SIGNED могут служить для любых целей, когда узел хочет передать в запросе некоторое состояние и получить его обратно в пакете отклика. ECHO_RESPONSE_SIGNED учитывается в HIP_MAC и SIGNATURE.

5.2.23. ECHO_RESPONSE_UNSIGNED

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (переменный размер)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Type

63425

Length

Размер Opaque data в октетах.

Opaque data

Неанализируемые (opaque) данные, которые копируются из параметра ECHO_REQUEST_SIGNED или ECHO_REQUEST_UNSIGNED, вызвавшего этот отклик.

ECHO_RESPONSE_UNSIGNED содержит неанализируемый блок данных (blob), которые отправитель ECHO_REQUEST_SIGNED или ECHO_REQUEST_UNSIGNED желает получить обратно. Эти данные копируются из соответствующего параметра запроса.

Запрос и ECHO_RESPONSE_UNSIGNED могут служить для любых целей, когда узел хочет передать в запросе некоторое состояние и получить его обратно в пакете отклика. ECHO_RESPONSE_UNSIGNED не учитывается в HIP_MAC и SIGNATURE.

5.3. Пакеты HIP

Имеется 8 основных пакетов HIP (Таблица 11), из которых 4 обеспечивают базовый обмен HIP, 1 служит для обновления, 1 — для уведомлений и 2 для закрытия ассоциации HIP. Поддержка пакетов типа NOTIFY не обязательна, остальные пакеты HIP, перечисленные в таблице 11, должны поддерживаться.

Таблица 11. Типы пакетов HIP.

Тип пакета

Название пакета

1

I1 — пакет Инициатора HIP

2

R1 — пакет Ответчика HIP

3

I2 — второй пакет Инициатора HIP

4

R2 — второй пакет Ответчика HIP

16

UPDATE — пакет HIP Update

17

NOTIFY — пакет HIP Notify

18

CLOSE — пакет HIP Association Closing

19

CLOSE_ACK — пакет HIP Closing Acknowledgment

Пакеты включают фиксированный заголовок (параграф 5.1), за которым могут следовать параметры в формате TLV.

В дополнение к базовым пакетам дополнительные спецификации могут определять другие типы пакетов. Например, поддержка многоадресности и мобильности не включена в эту спецификацию.

Используемые в описаниях пакетов обозначения приведены в параграфе 2.2.

В будущем после заголовка HIP могут быть размещены данные вышележащего уровня. Поле Next Header в заголовке указывает наличие дополнительных данных после заголовка HIP. Пакеты HIP недопустимо фрагментировать на несколько заголовков расширения путём установки в поле Next Header заголовка HIP номера протокола HIP. Это ограничивает размер дополнительных данных в пакете.

5.3.1. I1 — пакет Инициатора HIP

Заголовок HIP для пакета I1 имеет вид

       Packet Type = 1
       SRC HIT = HIT Инициатора
       DST HIT = HIT Ответчика или NULL

     IP ( HIP ( DH_GROUP_LIST ) )

Пакет I1 содержит фиксированный заголовок HIP и список Инициатора DH_GROUP_LIST. Битов управления нет.

Инициатор получает HIT Ответчика из запроса DNS или FQDN Ответчика (см. [HIP-DNS-EXT]), иного репозитория или локальной таблицы. Если Инициатор не знает HIT Ответчика, от может проробовать режим Opportunistic (параграф 4.1.8), установив значение NULL (все нули) как HIT Ответчика.

Поскольку пакет I1 легко подделать (даже подписанный), не предпинимается попыток усложнить его создание и обработку.

Инициатор включает параметр DH_GROUP_LIST в пакет I1 для информирования ответчика о предпочитаемых DH Group ID. Отметим, что DH_GROUP_LIST в пакетах I1 не учитывается в подписи пакета.

Реализации должны быть способны обрабатывать «шквал» пакетов I1, отбрасывая одинаковые пакеты, прибывшие близко по времени.

5.3.2. R1 — пакет Ответчика HIP

Заголовок HIP для пакета R1 имеет вид

       Packet Type = 2
       SRC HIT = HIT Ответчика
       DST HIT = HIT Инициатора

     IP ( HIP ( [ R1_COUNTER, ]
                PUZZLE,
                DIFFIE_HELLMAN,
                HIP_CIPHER,
                HOST_ID,
                HIT_SUITE_LIST,
                DH_GROUP_LIST,
                [ ECHO_REQUEST_SIGNED, ]
                TRANSPORT_FORMAT_LIST,
                HIP_SIGNATURE_2 )
                <, ECHO_REQUEST_UNSIGNED >i)

Бит управления A должен устанавливаться если идентификатор HI Ответчика является анонимным.

Тег HIT Инициатора должен совпадать с одним из полученных в пакете I1, если R1 является откликом на I1. Если у Ответчика имеется несколько HI, используемый HIT Ответчика должен соответствовать запросу Инициатора. Если Инициатор использует режим Opportunistic, Ответчик может свободно выбирать из HI (см. параграф 4.1.8).

Счётчик генерации пакетов R1 служит для определения текущего действительного поколения головоломок. Значение счётчика увеличивается периодически и рекомендуется увеличивать его не реже, чем перестают восприниматься решения прежних голововломок. Головоломка содержит случайное значение Random #I и сложность #K. Сложность указывает число младших битов в результате хэширования головоломки, которые должны быть нулями (см. параграф 4.1.2). Random #I не учитывается в подписи и должно считаться 0 при создании подписи, чтобы отправитель мог установить #I в подготовленном заранее пакете R1 перед его отправкой партнеру.

Ответчик выбирает DIFFIE_HELLMAN Group ID и Public Value в соответствии с предпочтениями Инициатора, указанными параметром DH_GROUP_LIST в пакете I1. Ответчик возвращает свои предпочтения, на основе которых он выбрал открытое значение DH, в DH_GROUP_LIST. Это позволяет Инициатору определить, не был ли список DH_GROUP_LIST в его пакете I1 изменён атакующим.

Открытое значение DH является эфемерным и значения не следует неоднократно применять в разных ассоциациях HIP. Как только Ответчик получил действительный отклик на пакет R1, значение DH следует исключить. Возможна передача Ответчиком одного значения DH одновременно разным хостам в соответствующих пакетах R1 и такие отклики также следует воспринимать. Однако в качестве защиты от «шквала» пакетов I1 реализация может предложить и неоднократно использовать одно значение DH (если этого не избежать) в течение некоторого времени, например, 15 минут. Используя небольшое число разных головоломок для данного значения DH, пакеты R1 можно подготовить заранее и передавать со скоростью получения пакетов I1. Процессу сборки мусора (scavenger) следует очищать неиспользуемые значения DH и головоломки.

Повторное использование открытых значений DH создаёт риск безопасности, связанный с использованием несколькими Инициаторами одного ключевого материала (из-за несовершенства генераторов случайных чисел). Кроме того, использование несколькими Инициаторами одной половины открытого ключа Ответчика может приводить к упрощения криптографических атак и несовершенству защиты.

Однако риски, связанные с повторным использованием одного значения, носят статистический характер и авторам неизвестен какой-либо механизм, позволяющий манипулировать протоколом так, чтобы риск повторного использования любого данного ключа DH Ответчика отличался от базовой вероятности. Поэтому Ответчикам рекомендуется избегать повторного применения одного ключа DH для нескольких Инициаторов, но (поскольку риск считается статистическим и возможности манипуляций неизвестны), реализации могут повторно использовать ключ для экономии ресурсов и повышения вероятности успешного взаимодействия с традиционными клиентами даже при шквале пакетов I1. В частности, когда слишком расточительно заранее создавать пакеты R1 для каждого возможного Инициатора со своим ключом DH, Ответчик может передать один ключ DH нескольким Инициаторам, создавая возможность применения несколькими легитимными Инициаторами одного ключа на стороне ответчика. Однако, как только Ответчик узнает об использовании конкретного ключа DH, ему следует прекратить предложение этого ключа. Это направлено на обеспечение Ответчикам с ограниченными ресурсами возможности предлагать услуги при шквалах пакетов I1 и одновременно сделать возможность повторного использования ключа DH статистической и как можно более низкой.

Если Ответчик применяет одну пару ключей DH для нескольких согласования, он должен позаботиться о предотвращении атак на мелкие подгруппы [RFC2785]. Для этого при получении I2 Ответчику следует проверить открытый ключ DH Инициатора, как указано в параграфе 3.1 [RFC2785]. Если проверка не прошла, Ответчику недопустимо создавать общий ключ DH и он должен прервать HIP BEX.

Параметр HIP_CIPHER содержит алгоритмы, поддерживаемые Ответчиком для шифрования содержимого параметра ENCRYPTED, в порядке предпочтительности. Все реализации должны поддерживать AES [RFC3602].

Параметр HIT_SUITE_LIST содержит упорядоченный список предпочитаемых и поддерживамых Ответчиком HIT Suite. Этот список позволяет Инициатору определить соответствует ли его HIT источника поддерживаемому Ответчиком набору.

Параметры ECHO_REQUEST_SIGNED и ECHO_REQUEST_UNSIGNED содержат данные, которые отправитель хочет получить неизменными обратно в параметре ECHO_RESPONSE_SIGNED или ECHO_RESPONSE_UNSIGNED. Пакет R1 можен (но не обязан) влючать один или несколько параметров ECHO_REQUEST_UNSIGNED, как указано в параграфе 5.2.21.

Параметр TRANSPORT_FORMAT_LIST содержит упорядоченный список предпочитаемых и поддерживаемых Ответчиком транспортных форматов. Этот список позволяет Инициатору и Ответчику согласовать общий способ защиты данных (payload). Параметр описан в параграфе 5.2.11.

Подпись рассчитывается для пакета HIP, как указано в параграфе 5.2.15. Это Ответчику заранее создать пакеты R1. Инициатору следует проверять подпись и он должен проверить соответствие HI Ответчика ожидаемому значению.

5.3.3. I2 — второй пакет Инициатора HIP

Заголовок HIP для пакета I2 имеет вид

       Packet Type = 3
       SRC HIT = HIT Инициатора
       DST HIT = HIT Ответчика

     IP ( HIP ( [R1_COUNTER,]
                SOLUTION,
                DIFFIE_HELLMAN,
                HIP_CIPHER,
                ENCRYPTED { HOST_ID } or HOST_ID,
                [ ECHO_RESPONSE_SIGNED, ]
                TRANSPORT_FORMAT_LIST,
                HIP_MAC,
                HIP_SIGNATURE
                <, ECHO_RESPONSE_UNSIGNED>i ) )

Действителен бит управления A, который должен устанавливаться, если HI Инициатора является анонимным.

Теги HIT должны соответствовать указанным в R1.

При наличии в пакете R1 параметра R1_COUNTER Инициатор должен скопировать полученный в R1 параметр в I2.

Параметр Solution содержит Random #I из пакета R1 и рассчитанное значение #J. Младшие #K битов RHASH(#I | … | #J) должны иметь значение 0.

Значение DH является эфемерным. Если расчёт выполняется заранее, процессу сборки мусора следует очищать неиспользуемые значения DH. Ответчик может повторно использовать значения DH при некоторых условиях, как указано в параграфе 5.3.2.

HIP_CIPHER содержит один шифронабор, выбранный Инициатором, который тот использует для шифрования параметров ENCRYPTED. Выбранный шифр должен соответствовать одному из предложенных Ответчиком в пакете R1. Все реализации должны поддерживать AES [RFC3602].

HI Инициатора может быть зашифрован с использованием алгоритма HIP_CIPHER. Ключевой материал выводится из обмена DH, как указано в параграфе 6.5.

ECHO_RESPONSE_SIGNED и ECHO_RESPONSE_UNSIGNED содержат неанализируемые (opaque) данные из соответствующих параметров эхо-запроса.

TRANSPORT_FORMAT_LIST содержит один тип формата транспорта, выбранный Инициатором. Выбранный тип должен соответствовать одному из предложенных Ответчиком в пакете R1. В настоящее премя определён лишь транспортный формат ESP ([RFC7402]).

Значение HMAC в параметре HIP_MAC рассчитывается для всего пакета HIP за исключением параметров после HIP_MAC, как указано в параграфе 6.4.1. Ответчик должен проверять HIP_MAC.

Подпись рассчитывается для всего пакета HIP за исключением параметров после HIP_SIGNATURE, как описано в параграфе 5.2.14. Ответчик должен проверять подпись, используя HI из пакета или идентификатор HI полученный иным способом.

5.3.4. R2 — второй пакет Ответчика HIP

Заголовок HIP для пакета R2 имеет вид

       Packet Type = 4
       SRC HIT = HIT Ответчика
       DST HIT = HIT Инициатора

     IP ( HIP ( HIP_MAC_2, HIP_SIGNATURE ) )

Битов управления нет.

HIP_MAC_2 рассчитывается для всего пакета HIP объединённого (конкатенация) с параметром Ответчика HOST_ID. После расчёта HMAC параметр HOST_ID удаляется, процедура описана в параграфе 6.4.1.

Подпись рассчитывается для всего пакета HIP.

Инициатор должен проверять HIP_MAC и подпись.

5.3.5. UPDATE — пакет обновления HIP

Заголовок HIP для пакета UPDATE имеет вид

       Packet Type = 16
       SRC HIT = HIT отправителя
       DST HIT = HIT получателя

     IP ( HIP ( [SEQ, ACK, ] HIP_MAC, HIP_SIGNATURE ) )

Битов управления нет.

Пакет UPDATE содержит обязательные параметры HIP_MAC и HIP_SIGNATURE, а также необязательные параметры.

Пакет UPDATE может включать 1 параметр SEQ, наличие которого указывает, что получатель должен подтвердить UPDATE. Пакет UPDATE без параметра SEQ, содержащий лишь параметр ACK является просто подтверждением предыдущего UPDATE и его недопустимо подтверждать отдельным параметром ACK. Пакеты UPDATE, содержащие лишь параметр ACK, не требуют обработки в порядке, соответствующем другим пакетам UPDATE. Пакет UPDATE, не включающий параметр SEQ или ACK, является недействительным и для таких неподтверждаемых обновлений должны применяться пакеты NOTIFY.

Пакет UPDATE может включать параметр ACK, содержащий порядковый номер SEQ из подтверждаемого пакета UPDATE. Хост может подтверждать сразу несколько пакетов UPDATE, например, параметр ACK может содержать два полученных последними значения SEQ для устойчивости к потере пакетов. Значения ACK не кумулятивны и для каждого полученного уникального SEQ требуется по меньшей мере одно соответствующее значения ACK в отклике. Полученные избыточные параметры ACK игнорируются. Хосты должны реализовать обработку параметров ACK с несколькими порядковыми номерами SEQ, даже если они не реализуют отправку параметров ACK с несколькими SEQ.

Пакет UPDATE может включать оба параметра SEQ и ACK. В общем случае пакеты UPDATE с параметром SEQ следует подтверждать по завершении обработки UPDATE. Хост может задержать UPDATE с параметром ACK на короткое время, чтобы совместить ACK, подобно отложенным подтверждениям в TCP.

Отправитель может отказаться от гарантированной передачи конкретного UPDATE (например, при перегрузке событиями). В соответствии с семантикой получатель должен подтверждать UPDATE, но отправитель может не заботиться о получении параметра ACK.

Пакеты UPDATE можно передавать повторно без увеличения SEQ. Если одно подмножество параметров включено в несколько пакетов UPDATE с разными SEQ, хост должен гарантировать, что многократная обработка параметров не приведёт к протокольной ошибке.

5.3.6. NOTIFY — пакет уведомления HIP

Пакет NOTIFY может служить для предоставления информации партнёру. Обычно пакеты NOTIFY применяются для указания некоторых ошибок протокола или отказов при согласовании. Пакеты NOTIFY не подтверждаются. Получатель может обработать пакет лишь как информационный и не следует менять состояние HIP (см. параграф 4.4.2) на основе лишь получения пакета NOTIFY.

Заголовок HIP для пакета NOTIFY имеет вид

       Packet Type = 17
       SRC HIT = HIT отправителя
       DST HIT = HIT получателя или 0, если тег неизвестен

     IP ( HIP (<NOTIFICATION>i, [HOST_ID, ] HIP_SIGNATURE) )

Битов управления нет.

Пакеты NOTIFY служат для передачи одного или нескольких параметров NOTIFICATION.

5.3.7. CLOSE — пакет закрытия ассоциации HIP

Заголовок HIP для пакета CLOSE имеет вид

       Packet Type = 18
       SRC HIT = HIT отправителя
       DST HIT = HIT получателя

     IP ( HIP ( ECHO_REQUEST_SIGNED, HIP_MAC, HIP_SIGNATURE ) )

Битов управления нет.

Отправитель должен включать параметр ECHO_REQUEST_SIGNED, используемый для проверки CLOSE_ACK, полученного в отклие, а также HIP_MAC и подпись (для всего пакета HIP).

Получатель должен отвечать пакетом CLOSE_ACK с параметром ECHO_RESPONSE_SIGNED, соответствующим ECHO_REQUEST_SIGNED.

5.3.8. CLOSE_ACK — пакет подтверждения закрытия HIP

Заголовок HIP для пакета CLOSE_ACK имеет вид

       Packet Type = 19
       SRC HIT = HIT отправителя
       DST HIT = HIT получателя

     IP ( HIP ( ECHO_RESPONSE_SIGNED, HIP_MAC, HIP_SIGNATURE ) )

Битов управления нет.

Отправитель должен включать в пакет HMAC и подпись (для всего пакета HIP). Получатель должен проверить ECHO_RESPONSE_SIGNED, а также HIP_MAC и подпись, если у него есть статус ассоциации HIP.

5.4. Сообщения ICMP

Когда реализация HIP обнаруживает проблему со входящим пакетом и не может определить отправителя или не имееет с отправителем ассоциации HIP, она может ответить пакетом ICMP. Частота отправки таких откликов должна быть ограничена в соответствии с [RFC4443]. В большинстве случаев пакет ICMP имеет тип Parameter Problem (12 для ICMPv4, 4 для ICMPv6) с полем Pointer, указывающим вызвавшее генерацию сообщения ICMP поля.

5.4.1. Недействительная версия

Если реализация HIP получает пакет HIP с нераспознанным номером версии HIP, ей следует отвечать пакетом ICMP типа Parameter Problem с полем Pointer, указывающим байт Version/RES. в заголовке пакета HIP. Частоту передачи таких пакетов следует ограничивать.

5.4.2. Другие проблемы в заголовке HIP и структуре пакета

Реализация HIP, получившая пакет HIP с нерешаемыми проблемами в заголовке или формате, она может ответить пакетом ICMP типа Parameter Problem с полем Pointer, указывающим проблемное место в пакете. Частоту передачи таких пакетов следует ограничивать. Реализации недопустимо передавать сообщения ICMP при ошибке контрольной суммы, такие пакеты должны просто отбрасываться.

5.4.3. Неверное решение Puzzle

Если реализация HIP получает пакет I2 с неверным решением головоломки, её поведение зависит от версии протокола IP. В случае IPv6 рееализации следует отвечать пакетом ICMP типа Parameter Problem с полем Pointer, указывающим начало поля Puzzle solution #J в параметре SOLUTION пакета HIP. При использовании IPv4 реализация может ответить пакетом ICMP типа Parameter Problem, копируя из пакета I2 достаточно байтов, чтобы поместить параметр SOLUTION в сообщение ICMP и указывая в поле Pointer начало поля Puzzle solution #J, как для IPv6. Отметим, что размер сообщения ICMPv4 будет превышать обычный размер ICMPv4, определённый в [RFC0792].

5.4.4. Несуществующая ассоциация HIP

Если реализация HIP получает пакет CLOSE, UPDATE или иной пакет, для обслуживания которого нужна ассоциация, а тег HIT отправителя или получателя не соответствует имеющимся ассоциациям HIP, реализация может ответить пакетом ICMP типа Parameter Problem, ограничивая скорость передачи таких пакетов. Поле Pointer в пакете ICMP Parameter Problem должно указывать начало первого тега HIT, который не соответствует имеющимся ассоциациям.

Хосту недопустимо отвечать такими сообщениями ICMP на пакеты I1, R2, I2, R2, NOTIFY. При определении нового типа пакетов в спецификации следует указать правила в части передачи этого типа сообщений ICMP.

6. Обработка пакетов

На каждом хосте предполагается одна реализация HIP, которая поддерживает HIP-ассоциации хоста и обслуживает запросы на создание новых ассоциаций. Каждая ассоциация управляется концептуальным конечным автоматом, состояния которого определены в параграфе 4.4. Реализация HIP может одновременно поддерживать ассоциации HIP с несколькими хостами и даже может иметь несколько активных ассоциаций с одним хостом, различаемых по тегам HIT. Однако для любой пары HIT невозможно создать более одной ассоциации HIP одновременно, поэтому единственным способом организации между парой хостов нескольких ассоциаций является использование разных HIT.

Обработка пакетов зависит от состояния ассоциаций HIP по отношению к аутентифицированному или представляющемуся инициатором партнёру. Реализация HIP проверяет наличие активной ассоциации с отправителем пакета на основе тегов HIT. Если данные передаются в конкретном транспортном формате, сопоставление пакетов с имеющимися ассоциациями задаёт спецификация транспортного формата.

6.1. Обработка исходящих данных приложения

Приложение на хосте HIP может передавать свои данные, используя идентификатор, заданный через базовый API. Интерфейс API может быть совместимым с прежними версиями (см. [RFC5338]), используя идентификаторы подобно адресам IP, или полностью новым, обеспечивающим расширенные функции для Host Identity. В зависимости от реализации HIP предоставляемый приложению идентификатор может различаться, например, это может быть HIT или адрес IP.

Точный формат и метод передачи пользовательских данных от хоста-источника HIP к адресату HIP определяется соответствующей спецификацией транспортного формата. В сеть данные передаются с использованием подходящих IP-адресов отправителя и получателя.

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

Приведённый ниже концептуальный алгоритм задаёт этапы обработки исходящих дейтаграмм, направленных по HIT.

  1. Если в дейтаграмме задан конкретный адрес источника, это должен быть тег HIT. В ином случае реализация может заменить адрес отправителя тегом HIT. Иначе пакет должен отбрасываться.

  2. Если в дейтаграмме адрес источника не задан, реализация должна выбрать для дейтаграммы подходящий тег HIT в соответствии с локальной политикой.

  3. Если для данной пары тегов HIT отправителя и получателя нет активной ассоциации HIP, она должна создаваться путём запуска базового обмена. В процессе обмена реализации следует помещать в очередь на отправку хотя бы один пользовательский пакет для каждой создаваемой ассоциации HIP и можно помещать в очередь большее число пакетов.

  4. При наличии активной ассоциации HIP для данной пары HIT отправителя и получателя исходящая дейтаграмма передаётся на транспортную обработку. Форматы транспорта определяют отдельные документы, а транспорт ESP для HIP является обязательным во всех реализациях HIP.

  5. Перед отправкой пакета теги HIT в дейтаграмме заменяются адресами IP. Для IPv6 следует применять правила [RFC6724]. Отметим, что этап преобразования HIT в адрес IP может выполняться в другой точке стека протоколов, например, перед инкапсуляцией пакета в выходной формат.

6.2. Обработка входящих данных приложения

Приведённый ниже концептуальный алгоритм задаёт этапы обработки входящих дейтаграмм при использовании на принимающем хосте тегов HIT в качестве идентификаторов на уровне приложения. Более подробные описания обработки пакетов задают спецификации соответствующих транспортных форматов.

  1. Входящая дейтаграмма сопоставляется с имеющимися ассоциациями HIP обычно с использованием информации из пакета. Например, это можно сделать по ESP SPI (Security Parameter Index).

  2. Транспортный формат декапсулируется соответствующим способом, давая в результате пакет, подобный обычному (нешифрованному) пакету IP. По возможности на этом этапе следует также проверить, был ли пакет действительно передан (однократно) удаленным хостом HIP, указанным ассоциацией HIP. Метод проверки может меняться в зависимости от режима транспорта. Хотя HI (а также HIT) применяется в качестве идентификатора вышележащего уровня, метод проверки должен подтвердить, что пакет был передан узлом с корректным отождествлением, которое действительно отобразается на соответствующий тег HIT. Для транспорта ESP [RFC7402] проверка выполняется с использованием значения SPI в пакете данных путём поиска соответствующей защищённой связи SA со связанным тегом HIT и ключом, а также расшифровкой пакета с использованием связанного ключа.

  3. Адрес IP в дейтаграмме заменяется тегом HIT, связанным с ассоциацией HIP. Отметим, что преобразование адреса IP в тег HIT может выполняться в другом месте стека протоколов.

  4. Дейтаграмма доставляется вышележащему уровню (например, UDP или TCP). При демультиплексировании дейтаграммы сокет вылележащего уровня выбирается по тегу HIT.

6.3. Решение головоломки

В этом параграфе рассматривается решение головоломки (puzzle). В пакете R1 значения #I и #K передаются в сетевом порядке байтов, равно как значения #I и #J в пакете I2. Хэш-значение создаётся путём применения алгоритма RHASH к конкатенации (в сетевом порядке) указанных ниже данных.

n-битовое случайное значение #I (n = RHASH_len) с сетевым порядком байтов как в пакетах R1 и I2.

128-битовый тег HIT Инициатора с сетевым порядком байтов как в HIP Payload внутри пакетов R1 и I2.

128-битовый тег HIT Ответчика с сетевым порядком байтов как в HIP Payload внутри пакетов R1 и I2.

n-битовое случайное значение #J (n = RHASH_len) с сетевым порядком байтов как в пакетах R1 и I2.

В действительном решении головоломки #K младших битов результирующего дайджеста RHASH должны быть 0.

Примечания.

  1. Размер хэшируемых данных зависит от размера результата хэш-функции RHASH у Ответчика.

  2. Все данные на входе функции хэширования должны использовать сетевой порядок байтов.

  3. Порядок тегов HIT Инициатора и Ответчика различается в пакетах R1 и I2 (см. параграф 5.1). Нужно соблюдать осторожность при копировании значений на вход функции хэширования.

  4. Для головоломки #I может существовать множество верных решений #J.

Ниже указаны процедуры обработки в предположении использования Ответчиком заранее созданных пакетов R1.

Предварительные расчеты Ответчика

Установка сложности головоломки #K.

Создание подписанных пакетов R1 и кэширование их.

Ответчик

Выбор подходящего R1 из кэша.

Генерация случайного значения #I.

Отправка #I и #K в пакете R1.

Сохранение #I и #K на некоторое время (delta).

Инициатор

Повторение попыток решить головоломку, пока не будет найдено соответствующее значение #J:

Ltrunc( RHASH( #I | HIT-I | HIT-R | #J ), #K ) == 0

Отправка #I и #J в пакете I2.

Ответчик

Проверка того, что полученное значение #I было сохранено.

Определение верного #K на основе #I.

Расчет V := Ltrunc( RHASH( #I | HIT-I | HIT-R | #J ), #K )

Отключение при V != 0

Восприятие при V == 0

6.4. Расчёт и проверка HIP_MAC и SIGNATURE

В последующих параграфах определены действия по обработке параметров HIP_MAC, HIP_MAC_2, HIP_SIGNATURE, HIP_SIGNATURE_2. Параметр HIP_MAC_2 содержится в пакетах R2, HIP_SIGNATURE_2 — в R1, а HIP_SIGNATURE и HIP_MAC — в других пакетах HIP.

6.4.1. Расчёт HMAC

Для HMAC применяется функция хэширования RHASH, тип которой зависит от HIT Suite у Ответчика. В HIT Suite RSA/DSA/SHA-256 применяется HMAC-SHA-256 [RFC4868], в ECDSA_LOW/SHA-1 — HMAC-SHA-1 [RFC2404], в ECDSA/SHA-384 — HMAC-SHA-384 [RFC4868].

Описанный ниже процесс применим к параметрам HIP_MAC и HIP_MAC_2. При обработке HIP_MAC_2 отличие от расчётов для HIP_MAC включает псевдо-поле HOST_ID с информацией Ответчика, переданной ранее в пакете R1.

Инициатору и Ответчику следует проявлять осторожность при проверке и расчёте HIP_MAC_2. В частности, Инициатор должен сохранять HOST_ID в точности, как было в пакете R1, пока не получит параметр HIP_MAC_2 в пакете R2.

Расчёт HIP_MAC выполняется как

   HMAC: { HIP header | [ Parameters ] }

где Parameters включает все параметры пакета HIP с типами от 1 до (тип HIP_MAC — 1).

При расчёте HIP_MAC применяются два правила:

  • в заголовке HIP устанавливается Checksum = 0;

  • в заголовке HIP отсчёт поля Header Length начинается от начала параметра HIP_MAC.

Порядок параметров описан в параграфе 5.2.1.

Расчёт HIP_MAC_2 выполняется как

   HIP_MAC_2: { HIP header | [ Parameters ] | HOST_ID }

где Parameters включает все параметры пакета HIP с типами от 1 до (тип HIP_MAC_2 — 1).

При расчёте HIP_MAC_2 применяются три правила:

  • в заголовке HIP устанавливается Checksum = 0;

  • в заголовке HIP отсчёт поля Header Length начинается от начала параметра HIP_MAC_2 и увеличивается на размер конкатенации HOST_ID (включая поля Type и Length);

  • параметр HOST_ID имет именно ту форму, в которой он был получен в пакете R1 от Ответчика.

Порядок параметров описан в параграфе 5.2.1, за исключением того, что параметр HOST_ID в этом расчёте добавляется в конце.

Параметр HIP_MAC определён в параграфе 5.2.12, а HIP_MAC_2 — в параграфе 5.2.13. Процесс расчёта и проверки HMAC (для HIP_MAC и HIP_MAC_2, пока для HIP_MAC_2 не указано иное) описан ниже

Отправитель пакета

  1. Создаётся пакет HIP без HIP_MAC, HIP_SIGNATURE, HIP_SIGNATURE_2 и иных параметров, значение типа которых превышает значение типа параметра HIP_MAC.

  2. При расчёте HIP_MAC_2 в конец пакета добавляется параметр HOST_ID (Ответчик).

  3. При расчёте HIP_MAC_2 в поле Header Length заголовка HIP учитывается параметр HOST_ID.

  4. Рассчитывается HMAC с использованием ключа HIP-gl или HIP-lg, выведенного из KEYMAT в соответствии с параграфом 6.5.

  5. Для HIP_MAC_2 параметр HOST_ID удаляется из пакета.

  6. В пакет добавляется параметр HIP_MAC и другие параметры, значение типа которых больше значения типа HIP_MAC (HIP_MAC_2), включая возможные параметры HIP_SIGNATURE и HIP_SIGNATURE_2.

  7. Заново рассчитывается значение поля Length в заголовке HIP.

Получатель пакета

  1. Проверка поля HIP Header Length.

  2. Удаляется параметр HIP_MAC или HIP_MAC_2, а также последующие параметры с большими значениями типа, включая возможные параметры HIP_SIGNATURE или HIP_SIGNATURE_2 с сохранением содержимого, которое может потребоваться позднее.

  3. В случае HIP_MAC_2 создаётся и добавляется в пакет параметр HOST_ID (с информацией Ответчика). Параметру HOST_ID следует совпадать с полученные ранее от Ответчика значением.

  4. Пересчитывается размер пакета HIP в заголовке HIP и очищается поле Checksum (0). В случае HIP_MAC_2 размер рассчитывается с учетом поля HOST_ID.

  5. Рассчитывается HMAC с использованием ключа HIP-gl или HIP-lg, выведенного из KEYMAT в соответствии с параграфом 6.5 и сравнивается с полученным HMAC.

  6. В полях Checksum и Header Length заголовка HIP устанавливаются исходные значения. Отметим, что значения Checksum и Length после этого становятся некорректными.

  7. В случае HIP_MAC_2 из пакета удаляется параметр HOST_ID перед дальнейшей обработкой.

6.4.2. Расчёт подписи

Приведённая ниже процедура применима к параметрам HIP_SIGNATURE и HIP_SIGNATURE_2. При обработке HIP_SIGNATURE_2 отличием является использование параметра HIP_SIGNATURE_2 и HIT Инициатора, а также очистка (0) полей PUZZLE Opaque и Random #I перед расчетом подписи. Параметр HIP_SIGNATURE определён в параграфе 5.2.14, HIP_SIGNATURE_2 — в параграфе 5.2.15.

Расчёт HIP_SIGNATURE и HIP_SIGNATURE_2 выполняется как

   HIP_SIGNATURE: { HIP header | [ Parameters ] }

где Parameters включает параметры пакета HIP с типами от 1 до (тип HIP_SIGNATURE — 1).

При расчёте подписи применяются два правила:

  • в заголовке HIP устанавливается Checksum = 0;

  • в заголовке HIP отсчёт поля Header Length начинается от начала параметра HIP_SIGNATURE.

Порядок параметров описан в параграфе 5.2.1.

   HIP_SIGNATURE_2: { HIP header | [ Parameters ] }

где Parameters включает параметры пакета HIP с типами от 1 до (тип HIP_SIGNATURE_2 — 1).

При расчёте подписи применяются три правила:

  • в заголовке HIP устанавливается Checksum = 0 и HIT = 0 (для Ответчика).

  • в заголовке HIP отсчёт поля Header Length начинается от начала параметра HIP_SIGNATURE_2;

  • В параметре PUZZLE для полей Opaque и Random #I устанавливается значение 0.

Порядок параметров описан в параграфе 5.2.1.

Процесс расчета и проверки подписей (обеих, за исключением случаев, где явно указано HIP_SIGNATURE_2) показан ниже.

Отправитель пакета

  1. Создаётся пакет HIP без параметра HIP_SIGNATURE и следующих за ним параметров.

  2. Рассчитывается поле Length и устанавливается Checksum = 0 в заголовке HIP. Для HIP_SIGNATURE_2 устанавливается HIT Инициатора в заголовке HIP, а также поля Opaque и Random #I в параметре PUZZLE.

  3. Рассчитывается подпись с использованием секретного ключа, соответствующего HI (открытый ключ).

  4. В пакет добавляется параметр HIP_SIGNATURE.

  5. Добавляются параметры, следующие за HIP_SIGNATURE.

  6. Пересчитывается поле Length в заголовке HIP и рассчитывается поле Checksum.

Получатель пакета

  1. Проверяется поле Length и контрольная сумма в заголовке HIP.

  2. Сохраняется содержимое HIP_SIGNATURE и следующих за ним параметров, после чего они удаляются.

  3. Пересчитывается поле Length в заголовке HIP и устанавливается Checksum = 0. Для HIP_SIGNATURE_2 устанавливается HIT Инициатора в заголовке HIP, а также 0 для Opaque и Random #I в параметре PUZZLE.

  4. Вычисляется подпись и сравнивается с полученной с использованием HI (открытй ключ) отправителя пакета.

  5. Восстанавливается исходный пакет путём добавления удалённых параметров (п. 2) и восстановления сброшенных в 0 значений (п. 3).

При проверке может использоваться идентификатор HI из пакета HIP, HI полученный с помощью запроса DNS, если в параметре HOST_ID получено имя FQDN, или HI из иного источника.

6.5. Генерация HIP KEYMAT

Ключевой материал HIP выводится из сеансового ключа DH (Kij), создаваемого в процессе базового обмена HIP (см. параграф 4.1.3). Инициатор имеет ключ Kij при создании пакета I2, а Ответчик получает Kij в пакете I2, поэтому пакет I2 уже может содержать шифрованную информацию.

KEYMAT выводится путём подачи Kij в функцию вывода ключей, указанную DH Group ID. Этот документ определяет единственную функцию вывода ключей на основе хэширования (Hash-based Key Derivation Function или HKDF) [RFC5869] с использованием функции RHASH. Новые DH Group ID и соответствующие функции распределения ключей могут определять другие документы.

Ниже приведено более подробное описание вывода ключевого материала с использованием HKDF. Пусть

   info    = sort(HIT-I | HIT-R)
   salt    =  #I | #J

Sort(HIT-I | HIT-R) определяется как конкатенация двух тегов HIT в сетевом порядке байтов, при этом меньшее значение HIT предшествует большему. Теги сравниваются как положительные (без знака) 128-битовые целые числа с сетевым порядком байтов. Значения #I и #J берутся из головоломки и её решения, которые были переданы в сообщениях R1 и I2 при создании ассоциации HIP. Оба хоста сохраняют значения #I и #J в ассоциации HIP для применения в будущем.

Исходные ключи выводятся последовательно в порядке, определяемом численным сравнением тегов HIT, как указано выше. HOST_g указывает хост с большим значением HIT, HOST_l — с меньшим. Ниже показан порядок вывода четырёх начальных ключей.

Ключ шифрования HIP-gl для параметра ENCRYPTED хоста HOST_g.

Ключ защиты целостности (HMAC) HIP-gl для исходящих пакетов HIP хоста HOST_g.

Ключ шифрования HIP-lg для параметра ENCRYPTED хоста HOST_l.

Ключ защиты целостности (HMAC) HIP-lg для исходящих пакетов HIP хоста HOST_l.

Число битов, выведенных для данного алгоритма является «естественным» размером ключей. Для обязательных алгоритмов применяются указанные ниже размеры.

AES 128 или 256 битов

SHA-1 160 битов

SHA-256 256 битов

SHA-384 384 бита

NULL 0 битов

При использовании других размеров ключей они должны трактоваться как ключи для других алгоритмов и определяться отдельно.

6.6. Инициирование базового обмена HIP

Реализация может запустить базовый обмен HIP с другим хостом на основе решения локальной политики, обычно вызываемого дейтаграммой приложения, подобно обмену ключами IPsec IKE при динамической организации SA. Кроме того, система может инициировать обмен HIP после перезагрузки, тайм-аута или потери состояния HIP (параграф 4.5.4).

Реализация готовит пакет I1 и передаёт его по IP-адресу партнёра, который может быть получен традиционным способом, например, через DNS. Содержимое пакета I1 описано в параграфе 5.3.1. Выбор используемых Host Identity для Инициатора и Ответчика, если их несколько, обычно определяет политика. Ниже приведены концептуальные правила запуска базового обмена HIP.

  1. Инициатор получает один или несколько тегов HIT Ответчика и один или несколько адресов с помощью запроса DNS по FQDN Ответчика, из иного репозитория или локальной базы данных. Если Инициатор не знает HIT Ответчика, он может попытаться использовать значение NULL в качестве HIT Ответчика (см. параграф 4.1.8. Режим HIP Opportunistic). Если у Инициатора есть выбор из нескольких HIT Ответчика, он выбирает HIT, для которого поддерживает HIT Suite.

  2. Инициатор передаёт пакет I1 по одному из адресов Ответчика в соответствии с локальной политикой.

  3. Инициатор включает в пакет I1 список DH_GROUP_LIST. Выбор и порядок DH Group ID в списке должен быть сохранен Инициатором, поскольку это потребуется при обработке пакета R1. В большинстве случаев предпочтения для групп DH будут статическими и не требуется хранить их для каждой ассоциации.

  4. После передачи пакета I1 отправитель переходит в состояние I1-SENT и запускает таймер, значение которого следует выбирать больше наихудшего ожидаемого RTT. Отправителю также следует увеличить на 1 счётчик попыток, связанный с I1.

  5. По завершению отсчёта таймера отправителю следует повторить пакет и заново запустить таймер, повторяя это до I1_RETRIES_MAX раз.

6.6.1. Параллельная отправка нескольких пакетов I1

Для минимизации задержки при создании ассоциации реализация может передать один и тот же пакет I1 по нескольким адресам Ответчика, однако недопустимо параллельно отправлять пакет более чем по трём (3) адресам Ответчика. Кроме того, при повторе по тайм-ауту реализация должна воздерживаться от передачи одного пакета I1 по нескольким адресам, т. е. при повторе инициализации соединения по тайм-ауту недопустимо передавать пакет I1 по нескольким адресам получателя. Эти ограничения предназначены для предотвращения перегрузки сети и возможных DoS-атак, например, когда кто-то заявил сотни или тысячи адресов, что может породить огромное число пакетов от Инициатора.

Поскольку не гарантируется, что Ответчик различит дубликаты пакетов I1, полученные по разным адресам (он не поддерживает состояния при отправке пакетов R1), Инициатор может получить несколько пакетов R1.

Инициатору следует выбрать предпочтительный адрес получателя по адресам отправителя в принятых пакетах R1 и использовать свой предпочтительный адрес в качестве источника для пакета I2. Правила обработки R1 даны в параграфе 6.8.

6.6.2. Обработка входящих сообщений ICMP Protocol Unreachable

Хост может получить сообщение ICMP Destination Protocol Unreachable в ответ на пакет HIP I1. Это может говорить о том, что партнёр не поддерживает HIP или указывать попытку атаки с целью обмануть Инициатора.

При получении системой сообщения ICMP Destination Protocol Unreachable в процессе ожидания пакета R1 недопустимо прерывать ожидание. Можно игнорировать сообщение ICMP и передать ещё несколько пакетов I1, а также можно счетсть сообщение ICMP намеком на то, что партнёр возможно не поддерживает HIP и вернуться в состояние UNASSOCIATED раньше, чем в ином случае. Однако хост должен, как минимум, продолжить ожидание пакета R1 в течение разумного времени до перехода в состояние UNASSOCIATED.

6.7. Обработка входящих пакетов I1

Реализации следует отвечать на I1 пакетом R1, за исключением случаев, когда она не хочет или не способна организовать ассоциацию HIP. Если реализация не может создать ассоциацию HIP, хосту следует передать сообщение «ICMP Destination Protocol Unreachable, Administratively Prohibited» по IP-адресу отправителя пакета I1. Если реализация не хочет создавать ассоциацию HIP, хост может игнорировать пакет I1. Это может быть, например, в случае DoS-атаки с пакетами I1.

Реализации следует поддерживать возможность обработки шквала принятых пакетов I1 с отбрасыванием дубликатов, полученных в коротком интервале времени. Обманные пакеты I1 могут вызывать атаку на систему с помощью пакетов R1, поэтому для R1 отправитель должен иметь механизм ограничения скорости отправки R1 по одному адресу. Конечному автомату HIP рекомендуется не менять состояние по факту отправки пакета R1.

Ниже приведены концептуальные правила отклика на пакет I1.

  1. Ответчик должен убедиться, что HIT Ответчика в полученном пакете I1 совпадает с одним из его тегов HIT или имеет значение NULL. В противном случае он должен отбросить пакет.

  2. Если Ответчик находится в состоянии ESTABLISHED, он может ответить пакетом R1, приготовиться к отбрасыванию имеющейся защищённой связи HIP с партнёром и сохранить состояние ESTABLISHED.

  3. Если Ответчик находится в состоянии I1-SENT, он должен сравнить HIT отправителя со своим (получатель) HIT. Если HIT отправителя больше, следует отбросить пакет I1 и сохранить состояние I1-SENT. Если HIT отправителя меньше, следует передать пакет R1 и сохранить состояние I1-SENT. Сравнение HIT описано в параграфе 6.5.

  4. Если реализация принимает решение ответить на I1 пакетом R1, она создаёт новый пакет R1 или выбирает заранее созданный, как описано в параграфе 5.3.2. Создаётся или выбирается пакет R1 с наиболее предпочтительным открытым ключом DH, который также включён в DH_GROUP_LIST пакета I1. Если нет подходящего DH Group ID в DH_GROUP_LIST пакета I1, пакет R1 передается с любым подходящим открытым ключом DH.

  5. Если в пакете I1 тег HIT Ответчика имеет значение NULL, Ответчик выбирает HIT с тем же HIT Suite как у HIT Инициатора. Если Ответчик не поддерживает такой HIT Suite, ему следует выбрать требуемый HIT Suite (параграф 5.2.10), которым в настоящее время служит RSA/DSA/SHA-256. В остальном выбор HIT определяет локальная политика.

  6. Ответчик указывает поддерживаемые форматы транспорта HIP в списке TRANSPORT_FORMAT_LIST, как указано в параграфе 5.2.11. Ответчик должен указать по меньше мере один формат транспорта для данных.

  7. Ответчик передаёт пакет R1 по IP-адресу отправителя пакета I1.

6.7.1. Управление пакетами R1

Все совместимые реализации должны поддерживать создание пакетов R1. Даже если устройство настроено лиши на инициирование ассоциаций, оно должно быть способно обрабатывать пакеты I1 в случаях восстановления при потере состояния или завершении срока действия ключа. Пакеты R1 можно создавать заранее. Пакет R1 можно использовать повторно в течение короткого интервала Delta T, зависящего от реализации, и использованные пакеты следует отменять и не применять больше после получения действительного пакета I2 от Инициатора. При шквале пакетов I1 пакеты R1 можно применять за пределами обычного Delta T. Сведения R1 недопустимо отбрасывать до завершения интервале Delta S (зависит от реализации) после того, как пакет R1 больше не предлагается. Предполагается, что Delta S — это максимальное время, требуемое для того, чтобы последний пакет I2 в ответ на R1 прибыл к Ответчику.

Реализации, поддерживающие несколько групп DH, могут заранее создавать R1 для каждой поддерживаемой группы, чтобы быстро обрабатывать входящие пакеты I1 с разными DH Group ID в DH_GROUP_LIST.

Реализация может сохранять сведения о полученных пакетах I1 и сопоставлять с ними пакеты I2 (см. параграф 4.1.1).

6.7.2. Обработка сообщений с некорректным форматом

Если реализация получает пакет I1 с ошибками формата, ей не следует отвечать сообщением NOTIFY, поскольку это откпывает возможность для DoS-атак. Вместо этого можно ответить пакетов ICMP, как указано в параграфе 5.4.

6.8. Обработка входящих пакетов R1

Получившая пакет R1 система должна сначала проверить, отправляла ли она его источнику пакет I1 (состояние I1-SENT). Если этот так, пакет R1 следует обработать, как указано ниже, передать пакет I2 и перейти в состояние I2-SENT, установив таймер для защиты I2. Если система находится в состоянии I2-SENT, она может ответить на пакет R1, если он имеет большее значение счётчика генерации R1. В этом случае системе следует отбросить состояние, созданное в результате обработки прежнего пакета R1 и вернуться в состояние I1-SENT. При любом другом состоянии системы относительно передавшего пакет R1 хоста, пакет R1 следует просто отбросить.

При отправке нескольких пакетов I1 Инициатору следует подождать некоторое время после приёма первого пакета R1, чтобы могли прийти другие пакеты R1, а отвечать следует на пакет R1 с наибольшим значением счётчика генерации.

Ниже приведены концептуальные правила отклика на пакет R1.

  1. Получившая пакет R1 система должна сначала проверить, отправляла ли она его источнику пакет I1 (т. е. наличие ассоциации HIP в состоянии I1-SENT, связанной с HIT из R1). Если пакет I1 не был передан в режиме Opportunistic mode (см. параграф 4.1.8), адрес IP из полученного пакета R1 следует игнорировать при обработке R1 и при поиске ассоциации HIP полученный пакет R1 следует сопоставлять лишь с ассоциациями, использующими HIT. При наличии соответствия системе следует обработать пакет R1, как указано ниже.

  2. В ином случае, если состояние системы отличается от I1-SENT и I2-SENT относительно HIT в пакете R1, ей следует просто отбросить пакет R1 и сохранить текущее состояние.

  3. Если ассоциация HIP имеет состояние I1-SENT или I2-SENT, полученный тег HIT Инициатора должен совпадать с HIT в исходном пакете I1. Кроме того, HIT Ответчика должен совпадать с указанным в I1, если там не было NULL HIT.

  4. Системе следует проверить подпись R1, как указано в параграфе 5.2.15, до обработки пакета.

  5. Если ассоциация HIP имеет состояние I1-SENT и имеется несколько действительных пакетов R1, система должна выбрать из них пакет с наибольшим значением счётчика генерации R1.

  6. Система должна проверить наличие HIT Suite Инициатора в параметре HIT_SUITE_LIST пакета R1 (поддержка HIT Suite Ответчиком). Если Ответчик поддерживает HIT Suite, обработка продолжается нормально, в противном случае система может сохранить состояние I1-SENT и повторно запустить BEX, передав новый пакет I1 с HIT Инициатора, поддерживаемым Ответчиком и, следовательно, включённым в HIT_SUITE_LIST пакета R1. Система может прервать BEX, если нет подходящего HIT источника. Системе следует подождать некоторое время для получения других пакетов R1 с большим значением счётчика генерации или иными HIT и HIT Suite, прежде чем перезапустить или прервать BEX.

  7. Система должна убедиться, что DH Group ID в параметре DIFFIE_HELLMAN сообщения R1 совпадает с первым DH Group ID в DH_GROUP_LIST Ответчика в пакете R1, а также соответствует значению, включенному Инициатором в список DH_GROUP_LIST пакета I1. Если DH Group ID из параметра DIFFIE_HELLMAN не соответствует наилучшему выбору Ответчика, Инициатор может счесть, что список DH_GROUP_LIST в пакете I1 был намеренно изменен. В таком случае Инициатор может передать новый пакет I1, однако ему не следует менять предпочтения в DH_GROUP_LIST нового пакета I1. Инициатор может также прервать обмен HIP.

  8. Если ассоциация HIP имеет состояние I2-SENT, система может вернуться в I1-SENT и обработать принятый пакет R1, если значение счётчика генерации R1 в нем больше, чем в ранее обработанном пакете R1.

  9. В пакете R1 может быть установлен бит A и в этом случае система может отвергнуть (отбросить) пакет R1 и вернуться в состояние UNASSOCIATED. Системе следует рассматривать отбрасывание R1 лишь в случае использования ею NULL HIT в пакете I1. Если бит A установлен, HIT Ответчика является анонимным и его не следует хранить постоянно.

  10. Системе следует попытаться сравнить HIT с полученным Host Identity, используя Host Identity для создания HIT и сравнения с HIT отправителя.

  11. Система должна сохранить полученное значение счётчика генерации R1 для последующих операций.

  12. Система пытается решить головоломку из пакета R1. Поиск решения должен прерываться по истечении срока действия головоломки. Если найти решение не удалось, реализация может повторить передачу I1 с учётом ограничений или прервать базовый обмен HIP.

  13. Система рассчитывает стандартный ключевой материал Diffie-Hellman в соответствии с открытым значением и Group ID из параметра DIFFIE_HELLMAN. Ключевой материал DH Kij служит для извлечения ключей в соответствии с параграфом 6.5.

  14. Система выбирает HIP_CIPHER ID из вариантов, предложенных в пакете R1, и использует выбранные значения при создании и применении ключей шифрования, а также при отправке пакета I2. Если предложенные варианты не подходят системе, она может повторить отправку I1 или прервать обмен HIP.

  15. Система выбирает подходящий формат транспорта из списка TRANSPORT_FORMAT_LIST и включает соответствующий параметр транспортного формата в последующий пакет I2.

  16. Система инициализирует оставшиеся переменные в соответствующем состоянии, включая счётчики Update ID.

  17. Система готовит и передаёт пакет I2, как указано в параграфе 5.3.3.

  18. Системе следует запустить таймер, для которого следует устанавливать значение больше худшего ожидаемого RTT, и она должна инкрементировать счётчик попыток, связанных с I2. Отправителю следует повторить пакет I2 по завершении отсчёта таймера и перезапустить таймер вплоть до I2_RETRIES_MAX раз.

  19. Если система имеет состояние I1-SENT, ей нужно перейти в I2-SENT, в иных случаях состояние не меняется.

6.8.1. Обработка сообщений с некорректным форматом

При получении пакета R1 с некорректным форматом реализация должна отбросить его. Отправка NOTIFY или ICMP не поможет, поскольку отправитель пакета R1 обычно не имеет состояния. Реализации следует подождать возможного получения корректного пакета R1 и можно начать заново, передав новый пакет I1.

6.9. Обработка входящих пакетов I2

При получении пакета I2 система может выполнить начальную проверку соответствия пакета I2 переданному ранее пакету R1, если Ответчик хранит такое состояние. Например, отправитель может проверить, отправлен ли пакет I2 с адреса или HIT, откуда Ответчик недавно получил пакет I1. Пакет R1 может включать необрабатываемые (opaque) данные, которые возвращаются в пакете I2. Если пакет I2 кажется подозрительным, система может отбросить его.

Затем реализации следует обработать пакет I2. Это включает проверку решения головоломки, создание ключа DH, возможно расшифровку Host Identity Инициатора, проверку подписи и, наконец, отправку пакета R2.

Ниже приведены концептуальные правила отклика на пакет I2.

  1. Система может выполнить проверки, чтобы убедиться в соответствии I2 недавно переданному пакету R1. Провирки зависят от реализации, пример представлен в Приложении A.

  2. Система должна убедиться, что HIT Ответчика соответствует одному из его тегов HIT и должна отбросить пакет при несоответствии.

  3. Система должна убедиться в поддержке HIT Инициатора. Ответчику следует отбрасывать пакеты I2 с неподдерживаемыми HIT Инициатора.

  4. Если конечный автомат системы находится в состоянии R2-SENT, система может проверить сходство полученного пакета I2 с пакетом, вызвавшим переход в R2-SENT. Если пакеты похожи, система может повторить переданный ранее пакет R2 и сбросить таймер R2-SENT, сохранив состояние R2-SENT.

  5. Если конечный автомат системы находится в состоянии I2-SENT, система должна сравнить локальный тег HIT с тегом отправителя (подобно описанию в параграфе 6.5). Если локальный тег HIT меньше HIT отправителя, следует отбросить пакет I2, использовать партнерский ключ DH и #I из полученного ранее пакета R1, а также взять локальный ключ DH и #J из переданного ранее пакета I2. В ином случае системе следует обработать полученный пакет I2 и отбросить ключевой материал DH Kij, который могу быть выведен при отправке предыдущего пакета I2. Партнерский ключ DH и #J берутся из свежепринятого пакета I2, локальный ключ DH и #I — из переданного ранее пакета R1.

  6. Если конечный автомат системы находится в состоянии I1-SENT и теги HIT а пакете I2 соответствуют указанным в переданном ранее пакете I1, система использует принятый пакет I2 как основу для создаваемой ассоциации HIP и прекращает отправку пакетов I1 (при условии прохождения указанных ниже проверок I2).

  7. Если конечный автомат системы находится в состоянии, отличном от R2-SENT, системе следует проверить попадание значения счётчика генерации R1, возвращённого в I2 (при наличии), в допустимый диапазон. Реализации должны воспринимать головоломки из текущего поколения и могут воспринимать более ранние. Если значение счётчика генерации в пакете I2 выходит за допустимые пределы, пакет I2 является устаревшим (возможно повторно использованным и его следует отбросить.

  8. Система должна проверить решение головоломки (параграф 5.3.3), рассчитав хэш по алгоритму RHASH.

  9. Пакет I2 должен иметь 1 значение в параметре HIP_CIPHER, которое должно совпадать с одним из значений, предложенных Инициатором в пакете R1.

  10. Система должна вывести ключевой материал DH Kij на основе открытого значения и Group ID в параметре DIFFIE_HELLMAN. Этот материал применяется для создания ключей ассоциации HIP, как указано в параграфе 6.5. Если DH Group ID не поддерживается, пакет I2 просто отбрасывается.

  11. Зашифрованный идентификатор HOST_ID расшифровывается с ключом Инициатора, определенным в параграфе 6.5. Если расшированные данные отличаются от HOST_ID, пакет I2 просто отбрасывается.

  12. Реализации следует также проверить соответствие HIT Инициатора в пакете I2 значению Host Identity, переданному в пакете I2 (некоторые промежуточные устройства не способны выполнить такую проверку).

  13. Система должна обработать параметр TRANSPORT_FORMAT_LIST. Спецификацию обработки транспортных параметров задают отдельные документы (например, [RFC7402]).

  14. Система должна проверить HIP_MAC в соответствии с процедурами параграфа 5.2.12.

  15. Система должна проверить HIP_SIGNATURE в соответствии с параграфами 5.2.14 и 5.3.3.

  16. Если указанные выше проверки прошли, система продолжает обработку I2, в противном случае она отбрасывает пакет I2 и не меняет состояние конечного автомата.

  17. В пакете I2 может быть установлен бит A и в этом случае система может отвергнуть (отбросить) пакет I2, возвратив конечный автомат в состояние UNASSOCIATED. При установленном бите A тег HIT Инициатора не следует хранить постоянно.

  18. Система инициализирует оставшиеся переменные в соответствующем состоянии, включая счётчики Update ID.

  19. Если после успешной обработки I2 конечный автомат находится в состоянии UNASSOCIATED, I1-SENT, I2-SENT или R2-SENT, передаётся пакет R2 и конечный автомат переходит в состояние R2-SENT.

  20. Если после успешной обработки I2 конечный автомат находится в состоянии ESTABLISHED, старая ассоциация HIP сбрасывается и создаётся новая, передаётся пакет R2 и конечный автомат переходит в состояние R2-SENT.

  21. При переходе конечного автомата в состояние R2-SENT система запускает таймер. Состояние конечного автомата меняется на ESTABLISHED, если через входящую ассоциацию HIP получены данные или принят пакет UPDATE (или иной пакет, указывающий переход удалённого партнёра в состояние ESTABLISHED). По завершении отсчёта таймера (с учётом максимального числа повторов I2) конечный автомат переходит в состояние ESTABLISHED.

6.9.1. Обработка сообщений с некорректным форматом

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

6.10. Обработка входящих пакетов R2

Пакет R2, полученный в состоянии UNASSOCIATED, I1-SENT или ESTABLISHED будет отбрасываться без смены состояния конечного автомата. В состоянии I2-SENT пакет R2 должен обрабатываться.

Ниже приведены концептуальные правила отклика на пакет R2.

  1. Если состояние системы отличается от I2-SENT, пакет R2 просто отбрасывается.

  2. Система должна убедиться, что применяемые теги HIT соответствуют полученным в пакете R1, вызвавшем переход в состояние I1-SENT.

  3. Система должна проверить HIP_MAC_2 в соответствии с процедурами параграфа 5.2.13.

  4. Система должна проверить подпись HIP в соответствии с процедурами параграфа 5.2.14.

  5. Отказ при любой из указанных выше проверок с высокой вероятностью говорит о MitM или иной атаке. Системе следует вести себя подобающим образом в соответствии с локальной политикой.

  6. После успешной обработки пакета R2 конечный автомат переходит в состояние ESTABLISHED.

6.11. Передача пакетов UPDATE

Хост передаёт пакет UPDATE для обновления сведений, связанных с ассоциацией HIP. Возможно много вариантов применения этого пакета, например, управление мобильностью или смена ключей в имеющейся ESP SA. Ниже описаны концептуальные правила передачи пакетов UPDATE партнеру. В других документах моугт быть определены дополнительные применения пакетов UPDATE.

Последовательность пакетов UPDATE указывается параметром SEQ. Перед отправкой UPDATE система сначала проверяет, не осталось ли незавершенный пакетов UPDATE, которые могут помешать обработке нового пакета. Когда обработки ожидает (не подтверждены) несколько пакетов UPDATE, отправитель должен считать, что получатель может обрабатывать их в произвольном порядке. Поэтому новые пакеты UPDATE, зависящие от приёма и обработки предыдущих UPDATE, должны откладываться до получения требуемых подтверждений ACK. Одним из способов предотвращения конфликтов является разрешение иметь лишь один необработанный пакет UPDATE в каждый момент времени. Однако разрешение нескольких UPDATE может повысить производительность мобильных и многоадресных (многодомных) протоколов.

Ниже приведены концептуальные правила передачи пакетов UPDATE.

  1. Первый пакет UPDATE передаётся с Update ID = 0. В иных случаях система сама устанавливает Update ID, увеличивая значение в каждом переданном пакете.

  2. Система создаёт пакет UPDATE с параметром SEQ, содержащим текущее значение Update ID. Пакет может также включать параметры ACK, подтверждающие Update ID из предыдущих UPDATE SEQ от партнера.

  3. Система передаёт созданное сообщение UPDATE и запускает таймер UPDATE, для которого по умолчанию устанавливается удвоенное значение оценки RTT. При наличии нескольких необработанных сообщений UPDATE работает несколько таймеров.

  4. По завершении отсчёта таймера пакет UPDATE передаётся заново до UPDATE_RETRY_MAX раз. Для последующих повторов таймер UPDATE следует экспоненциально увеличивать. Если после UPDATE_RETRY_MAX попыток не было получено подтверждения, ассоциация HIP считается разорванной и конечный автомат следует перевести из состояния ESTABLISHED в CLOSING, как указано в параграфе 4.4.4. Таймер UPDATE останавливается при получении от партнёра ACK с подтверждением UPDATE.

6.12. Приём пакетов UPDATE

Обработка полученного системой пакета UPDATE зависит от состояния ассоциации HIP, а также наличия и значений параметров SEQ и ACK. Обычно сообщения UPDATE содержать также необязательные параметры, обработка которых описана в отдельных документах.

Для каждой ассоциации хост сохраняет следующий ожидаемый идентификатор обновления от партнёра (peer Update ID), начальное значение которого равно 0. Сравнение номеров (больше, меньше) выполняется в циклическом пространстве номеров, поэтому должна выполняться соответствующая обработка перехода через максимум (232).

Отправитель может передать несколько остающихся сообщений UPDATE и они обрабатываются в полядке их приёма получателем (т. е. без восстановления порядка). При обработке сообщений UPDATE без соблюдения порядка получатель должен отслеживать, какие сообщения UPDATE были обработаны ранее, чтобы дубликаты и повторы пожтверждались без дополнительной обработки. Получатель может задать окно приёма для Update ID, которые он желает обрабатывать в данный момент и отбрасывать сообщения UPDATE, не попадающие в это окно.

Ниже приведены концептуальные правила обработки принимаемых пакетов UPDATE.

  1. При отсутствии соответствующей ассоциации HIP реализация может ответить сообщением ICMP Parameter Problem, как указано в параграфе 5.4.4.

  2. Если ассоциация находится в состоянии ESTABLISHED и присутствует параметр SEQ (но не ACK), обработка UPDATE и отклик на пакет выполняются в соответствии с параграфом 6.12.1.

  3. Если ассоциация находится в состоянии ESTABLISHED и присутствует параметр ACK (но не SEQ), обработка UPDATE выполняется в соответствии с параграфом 6.12.2.

  4. Если ассоциация находится в состоянии ESTABLISHED и в UPDATE присутствуют параметры ACK и SEQ, сначала обрабатывается ACK в соответствии с параграфом 6.12.2, затем — остальная часть UPDATE в соответствии с параграфом 6.12.1.

6.12.1. Обработка параметра SEQ в принятом пакете UPDATE

Ниже приведены концептуальные правила обработки параметра SEQ в принятом пакете UPDATE.

  1. Если Update ID в принятом SEQ не является следующим в последовательности Update ID и превышает верхнюю границу окна приёма для новых UPDATE, пакет должен отбрасываться.

  2. Если Update ID в принятом SEQ соответствует недавно обработанному UPDATE, пакет считается повторным. Проверку HIP_MAC (следующий шаг) недопустимо пропускать (хотя приемлемо побайтовое сравнение полученного пакета с сохраненным). Хосту рекомендуется кэшировать пакеты UPDATE, переданные с ACK, для предотвращения издержек, связанных с созданием нового пакета ACK в ответ на повторный пакет UPDATE. Система должна снова подтверждать (очевидные) повторы UPDATE, но следует также учитывать ограничение частоты откликов на повторы для защиты от replay-атак.

  3. Система должна проверить HIP_MAC в пакете UPDATE и при несовпадении должна отбросить пакет.

  4. Система может проверить SIGNATURE в пакете UPDATE. При несовпадении пакет следует отбросить, записав в журнал сообщение об ошибке.

  5. Если обрабатывается новый параметр SEQ, после этого обрабатываются параметры UPDATE. Система должна записать Update ID из принятого параметра SEQ для защиты от повторного использования.

  6. Подготавливается и передаётся партнёру пакет подтверждения UPDATE с параметром ACK. Этот параметр может включаться в отдельный пакет UPDATE или присоединяться к UPDATE с параметром SEQ, как указано в параграфе 5.3.5. Параметр ACK может подтверждать несколько Update ID от партнера.

6.12.2. Обработка параметра ACK в принятом пакете UPDATE

Ниже приведены концептуальные правила обработки параметра ACK в принятом пакете UPDATE.

  1. Порядковый номер в ACK должен соответствовать переданному ранее пакету UPDATE, который ещё не подтвержден. Если совпадения не найдено или ACK не подтверждает новый пакет UPDATE, тогда должен быть отброшен прежний пакет (при отсутствии параметра SEQ) или выполнена обработка в соответствии с параграфом 6.12.1.

  2. Система должна проверить HIP_MAC в пакете UPDATE и при несовпадении должна отбросить пакет.

  3. Система может проверить SIGNATURE в пакете UPDATE. При несовпадении пакет следует отбросить, записав в журнал сообщение об ошибке.

  4. Соответствующий таймер UPDATE останавливается (см. параграф 6.11), чтобы подтверждённый сейчас пакет UPDATE больше не передавался. При подтверждении нескольких UPDATE останавливаются все соответствующий таймеры.

6.13. Обработка пакетов NOTIFY

Обработка пакетов NOTIFY необязательна. Если обработка выполняется, все ошибки в полученных параметрах NOTIFICATION следует записывать в системный журнал. Эти ошибки должны считаться лишь информацией и получателю не следует менять состояние HIP (см. параграф 4.4.2) лишь на основе полученного сообщения NOTIFY.

6.14. Обработка пакетов CLOSE

Получив сообщение CLOSE, хост отвечает сообщением CLOSE_ACK и переходит в состояние CLOSED (достоверность CLOSE проверяется с использованием HIP_MAC и SIGNATURE). Эта обработка выполняется независимо от нахождения ассоциации HIP в состоянии CLOSING, чтобы можно было обработать отправленные обеими сторонами сообщения CLOSE. Ассоциация HIP не сбрасывается до перехода хоста в состояние UNASSOCIATED.

После запуска процесса закрытия любая новая потребность в отправке данных вызывает создание новой ассоциации HIP, начиная с отправки пакета I1.

При отсутствии соответствующей ассоциации HIP пакет CLOSE отбрасывается.

6.15. Обработка пакетов CLOSE_ACK

При получении сообщения CLOSE_ACK хост проверяет, что он находится в состоянии CLOSING или CLOSED, а CLOSE_ACK является откликом на CLOSE. Хост может сопоставлять сообщения CLOSE_ACK с CLOSE, сравнивая значение ECHO_REQUEST_SIGNED (в пакете CLOSE) с ECHO_RESPONSE_SIGNED (в пакете CLOSE_ACK).

CLOSE_ACK содержит параметры HIP_MAC и SIGNATURE для проверки. Состояние сбрасывается при переходе в UNASSOCIATED и после этого хост может отвечать параметром ICMP Parameter Problem на входящие сообщения CLOSE (см. параграф 5.4.4).

6.16. Обработка потери состояния

В случае аварии или непредвиденной потери состояния системе следует удалить соответствующее состояние HIP, включая ключевой материал, т. е. состояние не следует помещать в долговременное хранилище. Если реализация отбрасывает состояние (как рекомендуется), она должна также сбросить значение счётчика генерации R1, если локальная политика явно не задаёт сохранение значения для конкретного хоста. реализации недопустимо сохранять по умолчанию партнерские значения счетчиков создания R1, но при сохранении этих значений это должно явно настраиваться в HIT.

7. Правила HIP

Имеется множество переменных, влияющих на базовый обмен HIP, которые должен поддерживать каждый хост. Все реализации HIP должны поддерживать одновременно более одного идентификатора HI, из которых хотя бы один следует резервировать для анонимного использования. Хотя анонимные HI редко применяются как HI Ответчика, они часто нужны для Инициаторов. Рекомендуется поддерживать более двух HI.

Инициаторы могут применять разные HI для разных Ответчиков с целью обеспечения базовой приватности. Применение таких приватных HI повторно для того же Ответчика и срок использования этих HI определяется локальной политикой и зависит от требований Инициатора к приватности.

Значение #K в HIP R1 следует выбирать с осторожностью. Слишком высокие значения #K будут мешать клиентам со слабым CPU, поскольку они не смогут решить головоломку за разумное время. Значение #K следует повышать лишь в том случае, когда Ответчик сильно загружен, т. е. больше не может обрабатывать все входящие согласования HIP. Если Ответчик не загружен сильно, следует устанавливать #K = 0.

Ответчикам, которые работают лишь с заданными Инициаторами, нужны списки управления доступом (Access Control List или ACL), указывающие хосты, от которых они воспринимают базовый обмен HIP, а также предпочтительный формат транспорта и локальный срок действия. В таких ACL следует поддерживать шаблоны, в том числе на общедоступных или предоставляющих анонимные услуги Ответчиках.

8. Вопросы безопасности

Протокол HIP предназначен для защищённой аутентификации хостов и также пытается ограничить раскрытие хостов для разных DoS- и MitM-атак. Однако сам протокол HIP может подвергаться таким атакам, которые способны повредить обычной работе хостов.

В DoS-атаках часто используется преимущество асимметрии издержек на создание ассоциации. Одним из примеров такой асимметрии является необходимость сохранения Ответчиком локального состояния при возможности Инициатора обходиться без установки состояния. HIP не пытается повысить издержки при создании ассоциации для Инициатора, но пытается снизить их для Ответчика. Это достигается за счёт того, что Ответчик запускает трехэтапный обмен вместо Инициатора, что делает обмен HIP 4-пакетным. При этом первый пакет Ответчика (R1) может быть подготовлен заранее и Ответчик может применять заготовленные пакеты многократно, пока тот или иной Инициатор не предоставит действительный отклик на такой пакет R1. В случае лавины потоков I1 хост может многократно применять одно значение DH, даже если какой-либо Инициатор предоставил действительный отклик с этим значением DH. Однако такое поведение не рекомендуется и его следует избегать. Использование одних значений Diffie-Hellman и случайного значения головоломки #I сопряжено с некоторым риском и нужно соблюдать баланс между таким риском и возможным шквалом пакетов HIP I1.

Смещение издержек создания состояния к Инициатору при создании пакетов HIP I2 представляет собой другую DoS-атаку. Злоумышленник может подделать пакет I1 и Ответчик передаст ему пакет HIP R1. Это позволяет предположительно связать Инициатора с оценкой пакета HIP R1 и созданием пакета I2. Защитой от таких атак является простое игнорирование пакетов R1, которые не соответствуют переданным I1 (параграф 6.8, п. 1).

Пакет R1 значительно больше пакета I1 и эту асимметрию можно использовать для атак с отражением. Злоумышленник может использовать IP-адрес жертвы для передачи шквала пакетов I1 мощному Ответчику, а тот для каждого небольшого пакета I1 будет передавать жертве более крупный пакет R1, что усиливает лавинную атаку с отражением. Для предотвращения таких атак Ответчику следует ограничивать частоту передачи пакетов R1 в целом или для конкретного адреса IP.

Другим типом DoS-атак является лавинная отправка обменных пакетов I2. Когда атакующий Инициатор решил головоломку, он может передавать пакеты с подставным IP-адресом отправителя, включающие недействительную подпись HIP или недействительные шифрованные данные HIP (в параметре ENCRYPTED). Это потребует от Ответчика расхода ресурсов для определения того, что пакет I2 не может быть обработан полностью. Защитой от таких атак является отбрасывание пакетов I2 с данным решением головоломки после приёма N некорректных пакетов I2. Это остановит атаку и злоумышленнику потербуется запросить другой пакет R1 для её продолжения. Ответчик может во время таких атак увеличивать значение #K. Для сохранения списка решений из некорректных пакетов Ответчику требуется сохранять состояние для этих пакетов I2, пока не увеличится значения счетчика R1. Поскольку некорректные пакеты обычно отфильтровываются по контрольной сумме до проверки подписи, в «черный список» помещаются лишь решения головоломки из пакетов, которые созданы для прохождения проверки контрольной суммы и головоломки. Кроме того, перед созданием новой записи в списке требуется верное решение головоломки, поэтому для лавинной атаки на «черный список» злоумышленнику придётся сначала решить головоломки.

Ещё одним вариантом DoS-атаки является имитация перезапуска состояния после перезагрузки одного из партнёров. Перезапускающийся хост передаёт партнёрам пакеты I1, на которые те будут отвечать пакетом R1 даже находясь в состоянии ESTABLISHED. Если пакет I1 является обманным, принятый пакет R1 будет неожиданным для хоста, чей адрес использован в обманном пакете, и будет отброшен как в описанном выше случае.

Четвёртый вариант DoS-атаки заключается в имитации разрыва ассоциации HIP. Протокол HIP полагается на таймеры и обмен CLOSE/CLOSE_ACK для явного сигнала о завершении ассоциации HIP. Поскольку сообщения CLOSE и CLOSE_ACK содержат HIP_MAC, посторонний не может закрыть соединение. Наличие параметра SIGNATURE позволяет промежуточным устройствам (например, межсетевым экранам, трансляторам NAT на основе SPI) просматривать эти сообщения и отбрасывать соответствующее состояние. Однако необязательный ответ на сообщение CLOSE пакетом ICMP Parameter Problem (см. параграф 5.4.4) может позволить атакующему подменить IP-адрес отправителя для отправки сообщений CLOSE, запускающих атаку с отражением.

Пятой формой DoS-атаки является повторное использование пакетов R1 с целью вынудить Инициатора решать устаревшие головоломки с потерей синхронизации с Ответчиком. Монотонно возрастающий счётчик R1 предназначен для защиты от таких атак (см. параграф 4.1.4).

Защититься от MitM-атак (перехват с участием человека) сложно без сторонней аутентификации. Опытный злоумышленник MitM может легко справиться со всеми частями HIP, однако протокол HIP опосредованно обеспечивает защиту от MitM-атак. Если HI Ответчика получен из подписанной зоны DNS, сертификата или иным защищённым способом, Инициатор может использовать его для проверки пакета HIP R1.

Аналогично, если HI Инициатора хранится в защищённой зоне DNS, доверенном сертификате или получен иным защищённым способом, Ответчик может получить HI (после получения пакета HIP I2) и проверить, можно ли доверять HI.

В этом документе представлена концепция режима HIP opportunistic, но документ не задаёт семантику такой организации соединения для приложений. Как отмечено в параграфе 4.1.8, имеются некоторые опасения по поводу режима opportunistic.

Сообщения NOTIFY применяются лишь с информационными целями и не подтверждаются. Реализация HIP не может полагаться лишь на сведения из NOTIFY, поскольку эти пакеты можно использовать повторно (replay). Реализации не следует менять какие-либо данные о состоянии на основе лишь полученного сообщения NOTIFY.

Поскольку протокол HIP будут поддерживать не все хосты, предполагается использование сообщений ICMP Destination Protocol Unreachable для организации DoS-атак. Атака на Инициатора будет выглядеть так, будто Ответчик не поддерживает HIP, но вскоре после приёма сообщения ICMP Инициатор получит действительный пакет HIP R1. Поэтому для защиты от таких атак Инициатору не следует реагировать на сообщение ICMP в течение некоторого времени, пока не будет получен реальный пакет HIP R1 от Ответчика. Аналогичная атака на Ответчик более сложна. Обычно, если принятое Ответчиком сообщение I1 является обманным сообщением от злоумышленника, Ответчик может получить сообщение ICMP с IP-адреса, по которому было передано сообщение R1. Однако изощренный злоумышленник может попытаться воспользоваться этим с целью прервать базовый обмен HIP с помощью передачи Ответчику такого сообщения ICMP до того, как Инициатор сможет отправить действительный пакет I2. Поэтому Ответчику не следует реагировать на такие сообщения ICMP. В частности, ему не следует удалять какое-либо минимальное состояние, созданное при отправке пакета HIP R1 (если оно было создано), а следует дождаться получения действительного пакета HIP I2 или естественного тайм-аута (если пакеты R1 отслеживаются). Точно так же Инициатору следует игнорировать любые сообщения ICMP в процессе ожидания пакета HIP R2 и следует удалять какие-либо ожидающие состояния лишь по естественному тайм-ауту.

9. Взаимодействие с IANA

Агентство IANA зарегистрировало номер протокола 139 для Host Identity Protocol и включило его в реестры IPv6 Extension Header Types [RFC7045] и Assigned Internet Protocol Numbers. Ссылка на [RFC5201] в обоих реестрах заменена ссылкой на данную спецификацию.

Ссылка на [RFC5201] для 128-битового значения 0xF0EF F02F BFF4 3D0F E793 0C3C 6E61 74EA в пространстве имён CGA Message Type [RFC3972] заменена ссылкой на данную спецификацию.

В реестр Host Identity Protocol (HIP) Parameters были внесены перечисленные ниже изменения. Многие изменения связаны с заменой ссылки на [RFC5201] ссылкой на данную спецификацию, но имеются и другие отличия. Терминология выделения значений определена в [RFC5226], имеющиеся упоминания IETF Consensus заменены на IETF Review в соответствии с [RFC5226].

HIP Version — версия HIP

Этот документ добавляет в реестр значение 2. Для значения 1 сохранена ссылка на [RFC5201].

Packet Type — тип пакета

7-битовое поле Packet Type в протоколе HIP описывает тип протокольного сообщения HIP. Поле определено в параграфе 5.1. Все имеющиеся ссылки на [RFC5201] заменены ссылками на эту спецификацию. Остальные значения сохранены.

HIT Suite ID — идентификатор набора HIT

Эта спецификация создаёт новый реестр HIT Suite ID. Он отличается от имеющегося реестра Suite ID, который сохранен для протокола версии 1 [RFC5201] (этот реестр закрыт для новых регистрация).

4-битовое значение HIT Suite ID использует поле OGA ID из ORCHID для указания типа HIT. Этот документ определяет три HIT Suite (см. параграф 5.2.10).

HIT Suite ID также передаётся в 4 старших битах поля ID в параметре HIT_SUITE_LIST, а 4 младших бита зарезервированы для будущих расширений пространства HIT Suite ID (сверх 16 значений).

В настоящее время HIT Suite использует лишь 4 бита, поскольку они передаются в HIT. Расширение числа битов в HIT Suite ID снижает криптостойкость HIT. Значения HIT Suite ID следует выделять с осторожностью для экономии пространства значений. Более того, отмененные идентификаторы следует выделять повторно по прошествии достаточного времени. Если 15 значений Suite ID (значение 0 исходно является резервным) окажется не достаточно, можно использовать большее число HIT Suite ID с помощью резервного значения HIT Suite ID = 0 для индикации большего числа битов. Параметр HIT_SUITE_LIST уже поддерживает 8-битовые HIT Suite ID, если они нужны. Однако [RFC7343] в настоящее время не поддерживает такое расширение. Предлагается сначала воспользоваться методом «опрокидывания» (rollover), описанным а Приложении E. Возможные расширения пространства HIT Suite ID до 8 битов и новые значения HIT Suite ID выделяются по процедуре IETF Review.

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

Parameter Type — тип параметра

16-битовое поле Type в параметре HIP описывает тип параметра (определено в параграфе 5.2.1). Текущие значения типов рассматриваются в параграфах 5.2.3 — 5.2.23. Реестр Parameter Types обновлён, как описано ниже.

Добавлено значение 129 для параметра R1_COUNTER со ссылкой на эту спецификацию, а имеющееся значение 128 для этого параметра сохранено со ссылкой на [RFC5201]. Это документирует изменение, внесенной в версии 2 для данного протокола. Для ясности имя значения 128 было сменено на R1_Counter (v1 only).

Добавлено значение 579 для нового типа HIP_CIPHER со ссылкой на эту спецификацию. Этот тип параметра функционально заменяет тип HIP_TRANSFORM (577), который сохранен со ссылкой на [RFC5201]. Для ясности имя значения 577 заменено на HIP_TRANSFORM (v1 only).

Добавлено значение 715 для HIT_SUITE_LIST со ссылкой на эту спецификацию.

Добавлено значение 2049 для TRANSPORT_FORMAT_LIST со ссылкой на эту спецификацию.

Имя типа HMAC (61505) заменено на HIP_MAC, а HMAC_2 (61569) — на HIP_MAC_2 со ссылками на эту спецификацию.

Для остальных типов со ссылками на [RFC5201] эти ссылки были обновлены с указанием данного документа, а типы со ссылками на иные RFC оставлены без изменений.

Типы 32768 — 49151 (не 49141 — значение, указанное в прежней таблице) были зарезервированы для приватного использования (Reserved for Private Use). Реализациям следует выбирать типы из этого диапазона случайно для снижения вероятности конфликтов. При этом следует использовать метод, обеспечивающий фактическую случайность (например, бросание монеты).

Указанная ранее процедура выделения в порядке запросов с требованием спецификации (First Come First Served with Specification Required) заменена на Specification Required (нужна спецификация).

Group ID — идентификатор группы

8-битовые значения Group ID применяются в параметрах DIFFIE_HELLMAN и DH_GROUP_LIST (параграф 5.2.7). Реестр обновлён с учётом новых значений, определённых в параграфе 5.2.7, устаревшие значения сохранены в реестре с пометкой DEPRECATED и ссылкой на [RFC5201]. Новые значения выделяются по процедуре IETF Review.

HIP Cipher ID — идентификатор шифра HIP

16-битовые значения Cipher ID в параметре HIP_CIPHER определены в параграфе 5.2.8. Это новый реестр. Значения из неиспользуемого и резервного пространства выделяются по процедуре IETF Review.

DI-Type — тип DI

4-битовые значения DI-Type в параметре HOST_ID определены в параграфе 5.2.9. Новые значения выделяются по процедуре IETF Review. Имеющиеся значения со ссылкой на [RFC5201] обновлены с указанием этой спецификации.

HI Algorithm — алгоритм HI

16-битовые значения Algorithm в параметре HOST_ID определены в параграфе 5.2.9. Это новый реестр. Значения из неиспользуемого и резервного пространства выделяются по процедуре IETF Review.

ECC Curve Label — метка кривой ECC

Когда для HI Algorithm в параметре HOST_ID определено значение ECDSA или ECDSA_LOW, нужен новый реестр для значений ECC Curve Label, определённых в параграфе 5.2.9. Это может быть сделано созданием двух определяемых алгоритмом субреестров с именами ECDSA Curve Label и ECDSA_LOW Curve Label. Новые значения выделяются по процедуре IETF Review.

Notify Message Type — тип сообщения Notify

16-битовые значения Notify Message Type в параметре NOTIFICATION определены в параграфе 5.2.19.

Notify Message Type от 1 до 10 служат для информирования об ошибках в структуре пакета, 11-20 — о проблемах в параметрах, содержащих относящийся к криптографии материал, 21-30 — о проблемах при аутентификации или проверке целостности пакета. Типы выше 30 служат для информирования об иных типах ошибок или событиях.

Процедуры регистрации были обновлены. Для значений 1-50 сохраняется процедура IETF Review, для 51-8191 применяется процедура Specification Required. Для диапазона 8192-16383 сохранен статус Reserved for Private Use, для 16384-40959 применяется процедура Specification Required, а для 40960-65535 сохранен статус Reserved for Private Use.

В имеющийся реестр внесены указанные ниже изменения и ссылки на [RFC5201] заменены ссылками на эту спецификацию.

Тип INVALID_HIP_TRANSFORM_CHOSEN переименован в INVALID_HIP_CIPHER_CHOSEN с прежним значением 17.

Добавлено значение 20 для типа UNSUPPORTED_HIT_SUITE.

Тип HMAC_FAILED переименован в HIP_MAC_FAILED с прежним значением 28.

Тип SERVER_BUSY_PLEASE_RETRY переименован в RESPONDER_BUSY_PLEASE_RETRY с прежним значением 44.

10. Отличия от RFC 5201

В этом разделе приведена сводка технических изменений, внесенных в [RFC5201]. Раздел является информационным и предназначен для оказания помощи разработчикам при реализации новой версии протокола. Если текст этого раздела противоречит информации других разделов, нормативной следует считать информацию из других разделов.

Этот документ задаёт протокол HIP версии 2, который не совместим с HIP версии 1 [RFC5201]. Основными техническими изменениями являются включение дополнительных функций криптографической гибкости, а также обновление обязательных и дополнительных алгоритмов, включая поддержку эллиптических кривых с помощью алгоритмов Elliptic Curve DSA (ECDSA) и Elliptic Curve Diffie-Hellman (ECDH). Обновлены обязательные для реализации криптоалгоритмы, включая замену HMAC-SHA-1 на HMAC-SHA-256 и алгоритма подписи RSA/SHA-1 на RSASSA-PSS, а также добавление ECDSA к RSA в качестве обязательного типа открытых ключей. Эта версия HIP согласована с пересмотром ORCHID [RFC7343].

Ниже перечислены изменения, внесённые в работу протокола.

  • Впараграфе 4.1.3 описан новый процесс для согласования группы Diffie-Hellman (аспект криптографической гибкости). Инициатор может указать предпочтения при выборе группы DH в пакете I1 и предложить несколько вариантов. Ответчик возвращает свои предпочтения на основе локальной политики и предложения Инициатора. Если предложенный Ответчиком выбор не устраивает Инициатора (неподдерживаемый алгоритм), он может запустить базовый обмен заново.

  • Другим аспектом криптографической гибкости является добавления возможности применять разные криптографические хэш-функции для создания HIT. Для поддержки этого была введена терминология алгоритма хэширования для HIT Ответчика (RHASH). Кроме того, были добавлены HIT Suite для группировки набора криптографических алгоритмов, применяемых совместно для подписи открытого ключа, функции хэширования и отсечки хэш-значений. Применение HIT Suite ограничивает комбинации при выборе алгоритмов для различных функций. Идентификаторы HIT Suite ID связаны с полем ORCHID OGA ID ([RFC7343]).

  • The puzzle mechanism has been slightly changed, in that the #I parameter depends on the HIT hash function (RHASH) selected, and the specification now advises against reusing the same #I value to the same Initiator; more details are provided in Sections 4.1.2 and 5.2.4).

  • Параграф 4.1.4 расширен разъяснением деталей перехода счётчика генерации R1 через максимум и сброса.

  • Добавлен параграф 4.1.6 с описанием процедур прерывания базового обмена HIP.

  • В параграфе 4.1.7 даны рекомендации по предотвращению атак на снижение стойкости криптоалгоритмов.

  • В параграфе 4.1.8 обновлено описание режима Opportunistic с учётом криптографической гибкости за счёт процедур выбора HIT.

  • Обновлено описание генерации HIP KEYMAT в параграфе 6.5 с учётом согласования функции вывода ключей.

  • Обновлено описание обработки пакетов I1, R1, I2 с учётом новых параметров.

  • Добавлено требование, в соответствии с которым хосты должны поддерживать обработку параметров ACK с несколькими порядковыми номерами SEQ, даже если они не поддерживают передачу таких параметров.

  • Разъяснено, что в пакете R1 может присутствовать несколько параметров ECHO_REQUEST_UNSIGNED, а в I2 — несколько параметров ECHO_RESPONSE.

  • Добавлены процедуры отклика на несоответствие версия сообщениями ICMP Parameter Problem.

  • Обновлён раздел 8. Вопросы безопасности с удалением атак, которые более не считаются возможными.

  • Использование бита Anonymous для возможности применения анонимного Host Identity отправителя поддерживается теперь не только в пакетах R1 и I2.

  • Использование шифра NULL HIP CIPHER явно ограничено отладкой и тестированием HIP и поддержка алгоритма перестала быть обязательной.

Ниже перечислены изменения, внесённые в типы и кодирование параметров (параграф 5.2).

  • Добавлены 4 типа: DH_GROUP_LIST, HIP_CIPHER, HIT_SUITE_LIST, TRANSPORT_FORMAT_LIST.

  • 2 типа параметров переименованы — HMAC в HIP_MAC и HMAC2 в HIP_MAC_2.

  • 1 тип признан устаревшим — HIP_TRANSFORM. Функционально он заменён типом HIP_CIPHER, имеющим несколько иную семантику (хеш-значения удалены и определяются параметром RHASH).

  • Параметр TRANSPORT_FORMAT_LIST позволяет согласовать транспорт со списком, а не по порядку размещения в пакет HIP.

  • Код типа для R1_COUNTER сменен со 128 на 129, поскольку сейчас параметр является критическим и должен возвращаться при его наличии в R1.

  • Размер параметров PUZZLE и SOLUTION стал переменным и зависит от размера RHASH.

  • Обновлены поддерживаемые идентификаторы Diffie-Hellman Group ID.

  • Параметр HOST_ID сейчас требует указания Algorithm.

  • Параметр NOTIFICATION поддерживает новые значения Notify Message Type.

  • Поле алгоритма HIP_SIGNATURE увеличено в размере с 8 битов до 16 для выравнивания с HOST_ID.

  • Спецификация уточняет, что параметр SEQ всегда содержит 1 идентификатор обновления, но ACK может подтверждать несколько идентификаторов обновлений.

  • Удалено ограничение, требовавшее наличие лишь одного параметра ECHO_RESPONSE_UNSIGNED в каждом пакете HIP.

  • Документ создаёт новый диапазон для выделения параметров, охватываемых подписью (при её наличии) и применяет его к новому параметру DH_GROUP_LIST.

  • Документ разъясняет, что в пакете может быть несколько параметров NOTIFY.

Ниже перечислены изменения в содержимом пакетов (параграф 5.3).

  • Пакет I1 сейчас включает DH_GROUP_LIST Инициатора.

  • Пакет R1 сейчас включает параметры HIP_CIPHER, HIT_SUITE_LIST, DH_GROUP_LIST, TRANSPORT_FORMAT_LIST.

  • Пакет I2 сейчас включает параметры HIP_CIPHER и TRANSPORT_FORMAT_LIST.

  • Документ разъясняет, что пакеты UPDATE, не включающие параметр SEQ или ACK, недействительны.

11. Литература

11.1. Нормативные документы

[FIPS.180-4.2012] National Institute of Standards and Technology, «Secure Hash Standard (SHS)», FIPS PUB 180-4, March 2012, <http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf>.

[NIST.800-131A.2011] National Institute of Standards and Technology, «Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths», NIST SP 800-131A, January 2011, <http://csrc.nist.gov/publications/nistpubs/800-131A/sp800-131A.pdf>.

[RFC0768] Postel, J., «User Datagram Protocol», STD 6, RFC 768, August 1980, <http://www.rfc-editor.org/info/rfc768>.

[RFC0793] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981, <http://www.rfc-editor.org/info/rfc793>.

[RFC1035] Mockapetris, P., «Domain names — implementation and specification», STD 13, RFC 1035, November 1987, <http://www.rfc-editor.org/info/rfc1035>.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC2404] Madson, C. and R. Glenn, «The Use of HMAC-SHA-1-96 within ESP and AH», RFC 2404, November 1998, <http://www.rfc-editor.org/info/rfc2404>.

[RFC2410] Glenn, R. and S. Kent, «The NULL Encryption Algorithm and Its Use With IPsec», RFC 2410, November 1998, <http://www.rfc-editor.org/info/rfc2410>.

[RFC2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 2460, December 1998, <http://www.rfc-editor.org/info/rfc2460>.

[RFC2536] Eastlake 3rd, D., «DSA KEYs and SIGs in the Domain Name System (DNS)», RFC 2536, March 1999, <http://www.rfc-editor.org/info/rfc2536>.

[RFC3110] Eastlake 3rd, D., «RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)», RFC 3110, May 2001, <http://www.rfc-editor.org/info/rfc3110>.

[RFC3526] Kivinen, T. and M. Kojo, «More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)», RFC 3526, May 2003, <http://www.rfc-editor.org/info/rfc3526>.

[RFC3602] Frankel, S., Glenn, R., and S. Kelly, «The AES-CBC Cipher Algorithm and Its Use with IPsec», RFC 3602, September 2003, <http://www.rfc-editor.org/info/rfc3602>.

[RFC3972] Aura, T., «Cryptographically Generated Addresses (CGA)», RFC 3972, March 2005, <http://www.rfc-editor.org/info/rfc3972>.

[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, «Resource Records for the DNS Security Extensions», RFC 4034, March 2005, <http://www.rfc-editor.org/info/rfc4034>.

[RFC4282] Aboba, B., Beadles, M., Arkko, J., and P. Eronen, «The Network Access Identifier», RFC 4282, December 2005, <http://www.rfc-editor.org/info/rfc4282>.

[RFC4443] Conta, A., Deering, S., and M. Gupta, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 4443, March 2006, <http://www.rfc-editor.org/info/rfc4443>.

[RFC4754] Fu, D. and J. Solinas, «IKE and IKEv2 Authentication Using the Elliptic Curve Digital Signature Algorithm (ECDSA)», RFC 4754, January 2007, <http://www.rfc-editor.org/info/rfc4754>.

[RFC4868] Kelly, S. and S. Frankel, «Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec», RFC 4868, May 2007, <http://www.rfc-editor.org/info/rfc4868>.

[RFC5702] Jansen, J., «Use of SHA-2 Algorithms with RSA in DNSKEY and RRSIG Resource Records for DNSSEC», RFC 5702, October 2009, <http://www.rfc-editor.org/info/rfc5702>.

[RFC6724] Thaler, D., Draves, R., Matsumoto, A., and T. Chown, «Default Address Selection for Internet Protocol Version 6 (IPv6)», RFC 6724, September 2012, <http://www.rfc-editor.org/info/rfc6724>.

[RFC7343] Laganier, J. and F. Dupont, «An IPv6 Prefix for Overlay Routable Cryptographic Hash Identifiers Version 2 (ORCHIDv2)», RFC 7343, September 2014, <http://www.rfc-editor.org/info/rfc7343>.

[RFC7402] Jokela, P., Moskowitz, R., and J. Melen, «Using the Encapsulating Security Payload (ESP) Transport Format with the Host Identity Protocol (HIP)», RFC 7402, April 2015, <http://www.rfc-editor.org/info/rfc7402>.

11.2. Дополнительная литература

[AUR05] Aura, T., Nagarajan, A., and A. Gurtov, «Analysis of the HIP Base Exchange Protocol», in Proceedings of the 10th Australasian Conference on Information Security and Privacy, July 2005.

[CRO03] Crosby, S. and D. Wallach, «Denial of Service via Algorithmic Complexity Attacks», in Proceedings of the 12th USENIX Security Symposium, Washington, D.C., August 2003.

[DIF76] Diffie, W. and M. Hellman, «New Directions in Cryptography», IEEE Transactions on Information Theory Volume IT-22, Number 6, pages 644-654, November 1976.

[FIPS.186-4.2013] National Institute of Standards and Technology, «Digital Signature Standard (DSS)», FIPS PUB 186-4, July 2013, <http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf>.

[FIPS.197.2001] National Institute of Standards and Technology, «Advanced Encryption Standard (AES)», FIPS PUB 197, November 2001, <http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf>.

[HIP-ARCH] Moskowitz, R., Ed., and M. Komu, «Host Identity Protocol Architecture», Work in Progress3, draft-ietf-hip-rfc4423-bis-09, October 2014.

[HIP-DNS-EXT] Laganier, J., «Host Identity Protocol (HIP) Domain Name System (DNS) Extension», Work in Progress4, draft-ietf-hip-rfc5205-bis-06, January 2015.

[HIP-HOST-MOB] Henderson, T., Ed., Vogt, C., and J. Arkko, «Host Mobility with the Host Identity Protocol», Work in Progress5, draft-ietf-hip-rfc5206-bis-08, January 2015.

[HIP-REND-EXT] Laganier, J. and L. Eggert, «Host Identity Protocol (HIP) Rendezvous Extension», Work in Progress6, draft-ietf-hip-rfc5204-bis-05, December 2014.

[KAU03] Kaufman, C., Perlman, R., and B. Sommerfeld, «DoS protection for UDP-based protocols», in Proceedings of the 10th ACM Conference on Computer and Communications Security, October 2003.

[KRA03] Krawczyk, H., «SIGMA: The ‘SIGn-and-MAc’ Approach to Authenticated Diffie-Hellman and Its Use in the IKE Protocols», in Proceedings of CRYPTO 2003, pages 400-425, August 2003.

[RFC0792] Postel, J., «Internet Control Message Protocol», STD 5, RFC 792, September 1981, <http://www.rfc-editor.org/info/rfc792>.

[RFC2785] Zuccherato, R., «Methods for Avoiding the «Small-Subgroup» Attacks on the Diffie-Hellman Key Agreement Method for S/MIME», RFC 2785, March 2000, <http://www.rfc-editor.org/info/rfc2785>.

[RFC2898] Kaliski, B., «PKCS #5: Password-Based Cryptography Specification Version 2.0», RFC 2898, September 2000, <http://www.rfc-editor.org/info/rfc2898>.

[RFC3447] Jonsson, J. and B. Kaliski, «Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1», RFC 3447, February 2003, <http://www.rfc-editor.org/info/rfc3447>.

[RFC3849] Huston, G., Lord, A., and P. Smith, «IPv6 Address Prefix Reserved for Documentation», RFC 3849, July 2004, <http://www.rfc-editor.org/info/rfc3849>.

[RFC5201] Moskowitz, R., Nikander, P., Jokela, P., and T. Henderson, «Host Identity Protocol», RFC 5201, April 2008, <http://www.rfc-editor.org/info/rfc5201>.

[RFC5226] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5338] Henderson, T., Nikander, P., and M. Komu, «Using the Host Identity Protocol with Legacy Applications», RFC 5338, September 2008, <http://www.rfc-editor.org/info/rfc5338>.

[RFC5533] Nordmark, E. and M. Bagnulo, «Shim6: Level 3 Multihoming Shim Protocol for IPv6», RFC 5533, June 2009, <http://www.rfc-editor.org/info/rfc5533>.

[RFC5737] Arkko, J., Cotton, M., and L. Vegoda, «IPv4 Address Blocks Reserved for Documentation», RFC 5737, January 2010, <http://www.rfc-editor.org/info/rfc5737>.

[RFC5869] Krawczyk, H. and P. Eronen, «HMAC-based Extract-and-Expand Key Derivation Function (HKDF)», RFC 5869, May 2010, <http://www.rfc-editor.org/info/rfc5869>.

[RFC5903] Fu, D. and J. Solinas, «Elliptic Curve Groups modulo a Prime (ECP Groups) for IKE and IKEv2», RFC 5903, June 2010, <http://www.rfc-editor.org/info/rfc5903>.

[RFC6090] McGrew, D., Igoe, K., and M. Salter, «Fundamental Elliptic Curve Cryptography Algorithms», RFC 6090, February 2011, <http://www.rfc-editor.org/info/rfc6090>.

[RFC6253] Heer, T. and S. Varjonen, «Host Identity Protocol Certificates», RFC 6253, May 2011, <http://www.rfc-editor.org/info/rfc6253>.

[RFC7045] Carpenter, B. and S. Jiang, «Transmission and Processing of IPv6 Extension Headers», RFC 7045, December 2013, <http://www.rfc-editor.org/info/rfc7045>.

[RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. Kivinen, «Internet Key Exchange Protocol Version 2 (IKEv2)», STD 79, RFC 7296, October 2014, <http://www.rfc-editor.org/info/rfc7296>.

[RSA] Rivest, R., Shamir, A., and L. Adleman, «A Method for Obtaining Digital Signatures and Public-Key Cryptosystems», Communications of the ACM 21 (2), pp. 120-126, February 1978.

[SECG] SECG, «Recommended Elliptic Curve Domain Parameters», SEC 2 Version 2.0, January 2010, <http://www.secg.org/>.

Приложение A. Использование головоломок Ответчиком

Как указано в параграфе 4.1.1, Ответчик может задержать создание состояния и отвергнуть большинство фиктивных пакетов I2, используя набор заранее созданных пакетов R1 и локальную функцию выбора. В этом приложении описан один из вариантов реализации механизма, чтобы дать разработчикам идею. При использовании этого приложения разработчики могут внести изменения, усложняющие злоумышленникам организацию атаки.

Ответчик создает секретное значение S, которое затем обновляет периодически. При этом Ответчик должен помнить 2 последних значения S. При каждой регенерации S счётчик генерации (R1_COUNTER) R1 увеличивается на 1.

Ответчик создаёт подписанный заранее пакет R1. Подписи для созданных заранее пакетов R1 должны пересчитываться при повторном расчёте ключа DH или смене значения R1_COUNTER при регенерации S.

Когда Инициатор передаёт пакет I1 для инициализации соединения, Ответчик получает из пакета тег HIT и адрес IP и генерирует значение #I для головоломки. Значение #I устанавливается для заранее подписанного пакета R1.

       #I = Ltrunc( RHASH ( S | HIT-I | HIT-R | IP-I | IP-R ), n)

где n = RHASH_len. Алгоритм RHASH совпадает с применяемым при генерации тега HIT для Ответчика.

Во входящем пакете I2 Ответчик получает сведения, требуемые для проверки решения головоломки: теги HIT, адреса IP и сведения об используемом значение S из R1_COUNTER. По этим значениям Ответчик может снова создать значение #I и сравнить его с полученным в пакете I2. Если значения #I совпадают, он может проверить решение головоломки, используя #I, #J и #K (сложность), в противном случае пакет I2 отбрасывается.

       V := Ltrunc( RHASH( I2.I | I2.hit_i | I2.hit_r | I2.J ), #K )
       если V != 0, пакет отбрасывается

Если решение головоломки верное, значения #I и #J сохраняются для последующего применения в качестве входных данных при генерации ключевого материала.

Сохранение сведений об ошибке в решении головоломки зависит от реализации. Хотя Ответчик не обязан сохранять данные состояния, он может делать это для защиты себя от некоторых атак (см. параграф 4.1.1).

Приложение B. Генерация кодирования открытого ключа из HI

Приведённый ниже псевдокод иллюстрирует процесс генерации ключа шифрования из HI для RSA и DSA. Символ := указывает назначение (присваивание), += — добавление в конец. Псевдофункция encode_in_network_byte_order принимает два параметра — целое число (bignum) и размер в байтах, возвращая целое число в форме строки байтов заданного размера.

   switch ( HI.algorithm )
   {

   case RSA:
      buffer := encode_in_network_byte_order ( HI.RSA.e_len,
                ( HI.RSA.e_len > 255 ) ? 3 : 1 )
      buffer += encode_in_network_byte_order ( HI.RSA.e, HI.RSA.e_len )
      buffer += encode_in_network_byte_order ( HI.RSA.n, HI.RSA.n_len )

      break;

   case DSA:
      buffer := encode_in_network_byte_order ( HI.DSA.T , 1 )
      buffer += encode_in_network_byte_order ( HI.DSA.Q , 20 )
      buffer += encode_in_network_byte_order ( HI.DSA.P , 64 +
                                               8 * HI.DSA.T )
      buffer += encode_in_network_byte_order ( HI.DSA.G , 64 +
                                               8 * HI.DSA.T )
      buffer += encode_in_network_byte_order ( HI.DSA.Y , 64 +
                                               8 * HI.DSA.T )

      break;

   }

Приложение C. Примеры контрольных сумм для пакетов HIP

Контрольная сумма HIP для пакетов HIP задана в параграфе 5.1.1, контрольные суммы пакетов TCP и UDP, передаваемых через защищённые связи с поддержкой HIP, — в параграфе 4.5.1. Приведённые ниже примеры используют адреса [RFC3849] и [RFC5737], а также HIT с префиксом 2001:20, за которым следуют нули, а затем десятичное значение 1 и 2, соответственно.

Приведённый ниже пример предназначен лишь для тестирования расчёта контрольной суммы.

C.1. IPv6 HIP (пакет I1)

     Адрес отправителя:              2001:db8::1
     Адрес получателя:               2001:db8::2
     Размер пакета вышележ. уровня:  48              0x30
     Следующий заголовок:            139             0x8b
     Протокол Payload:               59              0x3b
     Размер заголовка:               5               0x5
     Тип пакета:                     1               0x1
     Версия:                         2               0x2
     Резерв:                         1               0x1
     Управление:                     0               0x0
     Контрольная сумма:              6750            0x1a5e
     HIT отправителя:                2001:20::1
     HIT получателя:                 2001:20::2
     Тип DH_GROUP_LIST:              511             0x1ff
     Размер DH_GROUP_LIST:           3               0x3
     DH_GROUP_LIST Group ID :        3,4,8

C.2. IPv4 HIP (пакет I1)

     Адрес отправителя:              192.0.2.1
     Адрес получателя:               192.0.2.2
     Размер пакета вышележ. уровня:  48              0x30
     Следующий заголовок:            139             0x8b
     Протокол Payload:               59              0x3b
     Размер заголовка:               5               0x5
     Тип пакета:                     1               0x1
     Версия:                         2               0x2
     Резерв:                         1               0x1
     Управление:                     0               0x0
     Контрольная сумма:              61902           0xf1ce
     HIT отправителя:                2001:20::1
     HIT получателя:                 2001:20::2
     Тип DH_GROUP_LIST:              511             0x1ff
     Размер DH_GROUP_LIST:           3               0x3
     DH_GROUP_LIST Group ID:         3,4,8

C.3. Сегмент TCP

Независимо от протокола IPv6 или IPv4 сокеты TCP и UDP используют формат псевдозаголовка IPv6 [RFC2460] с HIT вместо адресов IPv6.

     HIT отправителя:                2001:20::1
     Receiver's HIT:                 2001:20::2
     Размер пакета вышележ. уровня:  20              0x14
     Следующий заголовок:            6               0x06
     Порт отправителя:               65500           0xffdc
     Порт получателя:                22              0x0016
     Порядковый номер:               1               0x00000001
     Номер подтверждения:            0               0x00000000
     Смещение данных:                5               0x5
     Флаги:                          SYN             0x02
     Размер окна:                    65535           0xffff
     Контрольная сумма:              28586           0x6faa
     Указатель важности:             0               0x0000

Приложение D. 160-битовые группы ECDH и ECDSA

160-битовые группы ECDH и ECDSA SECP160R1 рассчитаны на симметричную стойкость 80 битов. Когда-то это считалось достаточным для защиты в течение года. Сегодня эти группы следует применять лишь для хостов с невысокой производительностью (например, встраиваемые устройства) и при низких требованиях к безопасности (например, не нужна долгосрочная защита конфиденциальности).

Приложение E. HIT Suite и генерация HIT

HIT как идентификатор ORCHID [RFC7343] состоит из трёх частей — 28-битовый префикс, 4-битовый код алгоритма генерации ORCHID (OGA) и хэш-значения, включающее Host Identity и идентификатор контекста. Индекс OGA указывает конкретный алгоритм, с помощью которого создаётся открытый ключ и 96-битовое хэшированное кодирование. OGA зависит от протокола и интерпретируется, как описано ниже, для всех протоколов, использующих общий с HIP идентификатор контекста. Группы HIP задают действительные комбинации алгоритмов подписи и хэширования в HIT Suite. Эти наборы HIT Suite указываются индексом, который передаётся в поле OGA ID идентификаторов ORCHID.

Набор применяемых HIT Suite будет расширяться по мере роста вычислительных возможностей и обнаружения уязвимостей в применяемых алгоритмах. Предполагается использование HIT Suite для внедрения новых наборов и отказа от старых, пока они ещё не стади опасными. Поскольку 4-битовое поле OGA ID позволяет иметь лишь 15 HIT Suite одновременно (HIT Suite ID = 0 является резервным), идентификаторы отмененных HIT Suite потребуется применять снова. В таких случаях может просходить «опрокидывание» (rollover) HIT Suite ID и недавно добавленный HIT Suite будет иметь меньший индекс, нежели его предшественник. «Опрокидование» фактически препятствует повторному использованию HIT Suite. Для плавного перехода следует отменять HIT Suite заблаговременно до повторного использования индекса HIT Suite.

Поскольку число HIT Suite строго ограничено значением 16, выбирать HIT Suite следует с осторожностью, поэтому в HIT Suite группируются подходящие наборы алгоритмов.

HIT Suite в HIT Ответчика определяет RHASH и хэш-функцию, которая будет применяться для HMAC в пакетах HIP, а также семейство алгоритмов подписи для генерации HI. Список HIT Suite приведён в таблице 10.

Благодарности

Стремление создать протокол HIP возникло после заседания MALLOC на 43-й конференции IETF. Baiju Patel и Hilarie Orman реально помогли исходному автору Bob Moskowitz вывести HIP за рамки 5 абзацев идей. Протокол обрел зрелость благодаря значительному вкладу членов IETF. Самое главное, что цели разработки были чётко сформулированы и отличались от других работ в этом направлении. Особо следует отметить членов исследовательской группы IRTF NameSpace. Noel Chiappa внёс ценный влад на ранних этапах обсуждения обработки идентификаторов, а Keith Moore — толчок для обеспечения распознаваемости. Steve Deering призывал продолжать работу, поскольку стойкость могла служить подтверждением перспективности идей для исследовательской группы.

Много людей внесло вклад в работу — ценные советы по безопасности дал Steve Bellovin, Rob Austein следил за связанными с DNS частями, Call Kocher научил Bob Moskowitz, как сделать головоломки сложными для ответа Инициатору, но простыми для проверки Ответчиком. Bill Sommerfeld предложил концепцию днейрождения, которая позднее превратилась в счётчик генерации R1, для простого управления перезагрузкой. Erik Nordmark предложил механизм CLOSE для завершения соединений, Rodney Thayer и Hugh Daniels предоставили множество откликов. На ранних стадиях разработки документа John Gilmore заставлял Bob Moskowitz предлагать что-то важное.

На более поздних этапах работы, когда редактирование было передано Pekka Nikander, вклад первых разработчиков оказался неоценимым. Без реальных реализаций протокола документ не достиг бы требуемого уровня.

Как обычно бывает в IETF, много людей внесло свой вклад в текст и идеи. Список этих людей включает Jeff Ahrenholz, Francis Dupont, Derek Fawcus, George Gross, Xin Gu, Rene Hummen, Miika Komu, Mika Kousa, Julien Laganier, Andrew McGregor, Jan Melen, Henrik Petander, Michael Richardson, Tim Shepard, Jorma Wall, Jukka Ylitalo. Приносим свои извинения тем, кого забыли включить в этот список.

После создания в начале 2004 г. рабочей группы HIP в документ было внесено множество изменений. В частности, исходный документ был поделен на две части, одна из которых описывала базовый обмен, а другая — использование ESP. Некоторые изменения протокола, предлоенные Aura и др. [AUR05], были добавлены на финальном этапе.

Адреса авторов

Robert Moskowitz (редактор)

HTT Consulting

Oak Park, MI

United States

EMail: rgm@labs.htt-consult.com

Tobias Heer

Hirschmann Automation and Control

Stuttgarter Strasse 45-51

Neckartenzlingen 72654

Germany

EMail: tobias.heer@belden.com

Petri Jokela

Ericsson Research NomadicLab

Jorvas FIN-02420

Finland

Phone: +358 9 299 1

EMail: petri.jokela@nomadiclab.com

Thomas R. Henderson

University of Washington

Campus Box 352500

Seattle, WA

United States

EMail: tomhend@u.washington.edu


Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

1Internet Engineering Task Force.

2Internet Engineering Steering Group.

3Работа опубликована в RFC 9063. Прим. перев.

4Работа опубликована в RFC 8005. Прим. перев.

5Работа опубликована в RFC 8046. Прим. перев.

6Работа опубликована в RFC 8004. Прим. перев.

Рубрика: RFC | Оставить комментарий

RFC 7491 A PCE-Based Architecture for Application-Based Network Operations

Internet Engineering Task Force (IETF)                           D. King
Request for Comments: 7491                            Old Dog Consulting
Category: Informational                                        A. Farrel
ISSN: 2070-1721                                         Juniper Networks
                                                              March 2015

A PCE-Based Architecture for Application-Based Network Operations

Основанная на PCE архитектура ABNO

PDF

Аннотация

Такие службы, как распространение содержимого, распределенные базы данных и связность между ЦОД, могут вносить новые требования к работе сетей. Им нужно резервирование связности, надёжности и ресурсов (таких как пропускная способность) по потребности в зависимости от приложений (таких как соединения «точка-точка», виртуализация сетей, транзит мобильной связи) для разных сетевых технологий от пакетных (IP/MPLS) до оптических. Среды, работающие с такими требованиями, называют основанными на приложениях сетевыми операциями (Application-Based Network Operations или ABNO). ABNO объединяет множество существующих технологий и может рассматриваться как использование инструментария имеющихся компонентов, дополненного новыми элементами.

В этом документе описывается архитектура и модель для ABNO с рассмотрением совместной работы компонентов. Это по сути «поваренная книга» об имеющихся технологиях, соответствующих потребностям приложений.

Статус документа

Этот документ не является спецификацией стандарта Internet и публикуется с информационными целями.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 5741.

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc7491.

Авторские права

Авторские права (c) 2015 принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно.

1. Введение

Современные сети объединяют множество технологий, позволяющих инфраструктуре сети предоставлять разнообразные услуги для поддержки различных характеристик и потребностей приложений. Растёт потребность в реагировании сети на запросы служб, вводимые напрямую с уровня приложений. Это отличается от устоявшейся модели, где услуги предоставляются сетью в ответ на команды управления, вводимые человеком.

Управляемые приложениями запросы и организуемые по ним службы вносят ряд новых требований к работе сетей. Они требуют резервирования сетевой связности, надёжности и ресурсов (таких как пропускная способность) в соответствии с потребностями и с учётом специфики приложения для различных сетевых приложений (например, соединений «точка-точка», виртуализации сетей, транзита мобильной связи) в широком диапазоне технологий — от пакетных (IP/MPLS) до оптических. Среды, работающие с такими требованиями, называют основанными на приложениях сетевыми операциями (ABNO).

Был разработан элемент расчёта пути (Path Computation Element или PCE) [RFC4655] для предоставления услуг по расчёту путей в сетях с управлением GMPLS и MPLS. Применимость PCE может быть расширена для предоставления возможностей расчёта пути и исполнения правил для платформ и служб ABNO.

ABNO может предоставлять приложениям указанные ниже типы услуг, координируя компоненты, которые работают и управляют сетью.

  • Оптимизация потоков трафика между приложениями с целью создания наложенной сети для взаимодействия в таких вариантах применения, как совместное использование файлов, кэширование или отражение данных, потоковая передачи или взаимодействия в реальном масштабе времени, описанных как оптимизация трафика прикладного уровня (Application-Layer Traffic Optimization или ALTO) [RFC5693].

  • Удалённое управление компонентами сети, позволяющее координировать программирование ресурсов сети с помощью таких методов, как разделение элементов управления и пересылки (Forwarding and Control Element Separation или ForCES) [RFC3746], OpenFlow [ONF], интерфейс с системой маршрутизации (Interface to the Routing System или I2RS) [I2RS-Arch] или плоскость управления, координируемую по протоколу взаимодействия PCE (PCE Communication Protocol или PCEP) [PCE-Init-LSP].

  • Взаимосвязь сетей доставки содержимого (Content Delivery Networks или CDNi) [RFC6707] путём организации и управления (resizing) соединениями между такими сетями. Аналогичным путём ABNO может координировать соединения между ЦОД.

  • Координация ресурсов сети для автоматизации предоставления и облегчения обслуживания трафика, планирования пропускной способности и глобальной одновременной оптимизации с использованием PCEP [RFC5557].

  • Планирования виртуальных частных сетей (Virtual Private Network или VPN) для поддержки развёртывания новых клиентов VPN и облегчения связности между ЦОД.

В этом документе описаны архитектура и примеры применения ABNO, а также показано, как можно использовать архитектуру ABNO для координации запросов системы управления и приложений на расчёт путей, применения правил и управления ресурсами сети в интересах использующих сеть приложений. Рассмотрение примеров использования показывает архитектуру ABNO как инструментарий, включающий множество имеющихся компонентов и протоколов, поэтому документ поход на поваренную книгу. ABNO совместима с развёрнутыми системами управления сетью (Network Management System или NMS) и поддержки операций (Operations Support System или OSS), а также с более современными разработками в области программируемых сетей, такими как программно-определяемые сети (Software-Defined Networking или SDN).

1.1. Область действия

Этот документ описывает инструментарий, показывая, как описанные во множестве документов функциональные компоненты можно собрать вместе в рамках единой архитектуры для обеспечения функций, требуемых ABNO. Во многих случаях известно, что имеющиеся протоколы достаточно или почти достаточно подходят для выполнения требований к интерфейсам между компонентами. В таких случаях протоколы считаются пригодными для применения в реализации ABNO. В других случаях очевидно, что нужна дополнительная работа и для них приводятся указатели на текущие работы, которые могут быть полезны. Для случаев, кода такие работы не известны авторам, в Приложении A даны краткие описания отсутствующих интерфейсных протоколов.

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

2. Сетевые операции на основе приложений

2.1. Допущения

Основным допущением, лежащим в основе этого документа, является то, что следует применять имеющиеся технологии там, где они подходят для решения соответствующих задач. Кроме того, когда имеющейся технологии почти достаточно, предполагается, что лучше внести в неё незначительные расширения, чем создавать новую.

Отметим, что этот документ описывает архитектуру. Функциональные компоненты являются концепциями архитектуры и имеют свои чёткие зоны ответственности. Пары функциональных компонентов взаимодействуют через функциональные интерфейсы, которые поэтому тоже являются концепциями архитектуры.

2.2. Реализация архитектуры

Необходимо подчеркнуть, что этот документ описывает функциональную архитектуру, а не устройство программ. Поэтому не предполагается, что архитектура будет ограничивать реализации. Разделение функций ABNO по отдельным функциональным компонентам с чёткими интерфейсами между ними позволит разработчикам выбирать включаемые функции и распределять их между разными процессами и даже процессорами. Реализация этой архитектуры может принимать некоторые важные решения о функциональных компонентах, как указано ниже.

  • Несколько функциональных компонентов можно объединить в одном программном компоненте с раскрытием лишь внешних интерфейсов. Это может обеспечивать явные преимущества для быстрых путей в программах и снижать издержки взаимодействия между процессами. Например, можно реализовать активный элемент PCE с учётом состояний как один сервер, объединяющий компоненты ABNO PCE, базы данных организации трафика (Traffic Engineering Database или TED), базу данных о путях с коммутацией по меткам (Label Switched Path Database) и диспетчер обеспечения (Provisioning Manager, см. параграф 2.3).

  • Функциональные компоненты можно распределить между процессами, процессорами или серверами, чтобы интерфейсы раскрывались как внешние протоколы. Например обработчик OAM3 (см. параграф 2.3.1.6) можно представить как выделенный сервер в сети, который воспринимает из сети все отчёты о состоянии, агрегирует и сопоставляет их, затем отправляет уведомления другим серверам, которым нужно понимать происходящее.

  • Каждый компонент может присутствовать в нескольких экземплярах, т. е. функции компонента могут быть разделены между несколькими программными компонентами, каждый из которых отвечает за обработку определённой функции или части сети. Например, в реализации может быть несколько экземпляров TED (см. параграф 2.3.1.8), каждый из которых содержит сведения о топологии отдельного домена сети (такого как сетевой уровень или автономная система). Может применяться несколько экземпляров PCE, каждый из которых обрабатывает свою базу TED и может быть быть распределён по нескольким серверам с разным управлением. Ещё одним примером может быть несколько контроллеров ABNO, каждый из которых поддерживает свой класс приложений или прикладных служб.

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

2.3. Базовая архитектура ABNO

Архитектура ABNO показана на рисунке 1, а компоненты и функциональные интерфейсы рассматриваются в параграфах 2.3.1 и 2.3.2, соответственно. Примеры использования, приведённые в разделе 3, показываются раздельно как применяются различные компоненты для предоставления разных услуг. Важно понимать, что показанные на рисунке связи и интерфейсы между компонентами иллюстрируют некоторые базовые и вероятные взаимодействия, однако не исключены и другие интерфейсы и взаимосвязи, требуемые для реализации конкретной функциональности.

 +----------------------------------------------------------------+
 |          OSS / NMS / Координатор прикладных служб              |
 +-+---+---+----+-----------+---------------------------------+---+
   |   |   |    |           |                                 |
...|...|...|....|...........|.................................|......
:  |   |   |    |      +----+----------------------+          |     :
:  |   |   | +--+---+  |                           |      +---+---+ :
:  |   |   | |Агент +--+     Контроллер ABNO       +------+       | :
:  |   |   | |правил|  |                           +--+   |Обработ| :
:  |   |   | +-+--+-+  +-+------------+----------+-+  |   | чик   | :
:  |   |   |   |  |      |            |          |    |   | OAM   | :
:  |   | +-+---++ | +----+-+  +-------+-------+  |    |   +---+---+ :
:  |   | |Сервер| +-+ VNTM |--+               |  |    |       |     :
:  |   | |ALTO  |   +--+-+-+  |               |  | +--+---+   |     :
:  |   | +--+---+      | |    |      PCE      |  | |Клиент|   |     :
:  |   |    |  +-------+ |    |               |  | |I2RS  |   |     :
:  |   |    |  |         |    |               |  | +-+--+-+   |     :
:  | +-+----+--+-+       |    |               |  |   |  |     |     :
:  | |Базы данных+-------:----+               |  |   |  |     |     :
:  | |   TED     |       |    +-+---+----+----+  |   |  |     |     :
:  | |  LSP-DB   |       |      |   |    |       |   |  |     |     :
:  | +-----+--+--+     +-+---------------+-------+-+ |  |     |     :
:  |       |  |        |    Диспетчер подготовки   | |  |     |     :
:  |       |  |        +-----------------+---+-----+ |  |     |     :
...|.......|..|.................|...|....|...|.......|..|.....|......
   |       |  |                 |   |    |   |       |  |     |
   |     +-+--+-----------------+--------+-----------+----+   |
   +----/               Уровень клиента сети               \--+
   |   +----------------------------------------------------+ |
   |      |                         |        |          |     |
  ++------+-------------------------+--------+----------+-----+-+
 /                      Уровни серверов сети                     \
+-----------------------------------------------------------------+

Рисунок 1. Базовая архитектура ABNO.

2.3.1. Компоненты ABNO

В этом параграфе описываются функциональные компоненты, показанные прямоугольниками на рисунке 1. Взаимодействия между этими компонентами (функциональные интерфейсы) описаны в параграфе 2.3.2.

2.3.1.1. NMS и OSS

Система управления сетью (NMS) или система поддержки операций (OSS) может служить для контроля, эксплуатации и управления сетью. В архитектуре ABNO система NMS или OSS пожет передавать высокоуровневые запросы обслуживания контроллеру ABNO, а также организовывать правила для действий компонентов в архитектуре.

NMS и OSS могут воспринимать сетевые события через обработчик OAM и действовать в соответствии с этим, а также выводить отчёты пользователям и генерировать сигналы. NMS и OSS могут обращаться к базе данных организации трафика (TED) и базе данных о путях с коммутацией по меткам (Label Switched Path Database или LSP-DB), чтобы показать пользователям текущее состояние сети. Кроме того, NMS и OSS могут использовать прямой программный или конфигурационный интерфейс для взаимодействия с элементами сети.

2.3.1.2. Координатор прикладных служб

Помимо NMS и OSS, услуги в архитектуре ABNO могут запрашиваться приложениями или от их имени. В этом контексте термин «приложение» трактуется очень широко и может пониматься как программа, работающая на хосте или сервере и предоставляющая услуги пользователю (например, программа для видеоконференций), программный инструмент, применяемый пользователем для отправки в сеть запросов на организацию конкретной услуги (например, сквозное соединение или плановое резервирование пропускной способности), многофункциональная система управления, отвечающая за организацию предоставления комплексной сетевой услуги, такой как виртуальная частная сеть.

В рамках этой архитектуры все эти концепции приложения собраны воедино в координаторе прикладных служб (Application Service Coordinator), поскольку все они в той или иной мере отвечают за координацию действий сети по обеспечению услуг для использования приложениями. На практике координатор прикладных служб может быть распределён между разными приложениями или серверами. Координатор взаимодействует с контроллером ABNO для запроса сетевых операций.

2.3.1.3. Контроллер ABNO

Контроллер ABNO является главным шлюзом в сеть для NMS, OSS и контроллера прикладных служб с целью обеспечения расширенной координации и функций сети. Контроллер ABNO управляет поведением сети ответ на изменение сетевых условий и в соответствии с требованиями приложений к сети и правилами. Он является точкой присоединения и вызывает нужные компоненты в нужном порядке. Примеры использования в разделе 3 дают более чёткое представление о взаимодействии контроллера ABNO с другими компонентами архитектуры ABNO.

2.3.1.4. Агент правил

Политика (правила) играют важную роль в поддержке сетей и управлении ими, а поэтому оказывает значительное влияние на работу ключевых компонентов архитектуры ABNO. На рисунке 1 показан агент правил (Policy Agent), как компонент, в котором NMS/OSS задаёт правила для применения. Агент отвечает за распространение правил в другие компоненты системы. Для упрощения рисунка пришлось опустить многие из происходящих взаимодействий политики. Хотя показано взаимодействие агента лишь с контроллером ABNO, сервером ALTO и диспетчером топологии виртуальной сети (Virtual Network Topology Manager или VNTM), на деле он взаимодействует с другими компонентами и самими элементами сети. Например, элемент расчёта пути (PCE) будет точкой применения правил (Policy Enforcement Point или PEP) [RFC2753], как описано в [RFC5394], а клиент интерфейса в систему маршрутизации (I2RS) будет также PEP, как отмечено в [I2RS-Arch].

2.3.1.5. Клиент интерфейса с системой маршрутизации (I2RS)

Интерфейс с системой маршрутизации (I2RS) описан в [I2RS-Arch] и обеспечивает программируемый способ доступа (чтение и запись) к состоянию маршрутизации и сведениям о правилах на маршрутизаторах сети. Клиент I2RS предложен в [I2RS-PS] и его назначение состоит в управлении запросами сведений на множестве маршрутизаторов сети (где работает агент I2RS) и координации установки и сбора состояний на маршрутизаторах.

2.3.1.6. Обработчик OAM

Операции, администрирование и обслуживание (OAM) играют очень важную роль в понимании работы сети, обнаружения отказов и принятии мер по реагированию на проблемы в сети.

В архитектуре ABNO обработчик OAM отвечает за приём уведомлений (их часто называют сигналами тревоги — alert) из сети о возможных проблемах, сопоставление их и инициирование других компонентов системы для выполнения действий по сохранению или восстановлению служб, организованных контроллером ABNO. Обработчик OAM также сообщает о проблемах в сети (в частности, о влияющих на службы проблемах) NMS, OSS и координатору прикладных служб. Кроме того, обработчик OAM взаимодействует с устройствами сети для инициирования действий OAM в плоскости данных (таких как мониторинг и тестирование).

2.3.1.7. Элемент расчёта пути (PCE)

Элемент расчёта пути (PCE) определён в [RFC4655] и является функциональным компонентом, обслуживающим запросы на расчёт пути по графу сети. В частности, PCE генерирует маршруты с организацией трафика для путей с коммутацией по меткам (Label Switched Path или LSP) в MPLS-TE и GMPLS. PCE может принимать запросы от контроллера ABNO, диспетчера топологии виртуальной сети (Virtual Network Topology Manager) или самих элементов сети. PCE работает с представлением топологии сети, хранящимся в базе данных организации трафика (TED). Более сложные расчёты может предоставлять PCE с учётом состояний (Stateful PCE), дополняющий TED базой данных, содержащей сведения о LSP, которые подготовлены и работают в сети (LSP-DB, см. параграф 2.3.1.8.2), как описано в [RFC4655] и [Stateful-PCE].

Дополнительная функциональность активных PCE позволяет функциональным компонентам с Stateful PCE подавать запросы на организацию новых услуг или изменение имеющихся, как описано в [Stateful-PCE] и [PCE-Init-LSP]. Эта функция может обращаться к элементам сети напрямую или через диспетчер обеспечения (Provisioning Manager).

Координация между PCE, работающими с разными TED, может быть полезна для расчёта путей в многодоменных и многоуровневых сетях. Доменом в этом случае может быть автономная система (Autonomous System или AS), что позволяет рассчитывать пути между AS.

PCE является ключевым компонентом архитектуры ABNO и дополнительное представлении о роли этих элементов можно получить из рассмотрения примеров, представленных в разделе 3.

2.3.1.8. Базы данных

Архитектура ABNO включает ряд баз данных, где хранятся сведения для использования системой. Основными базами данных являются базы TED и LSP (LSP-DB), но могут применяться и другие базы со сведениями о топологии (сервер ALTO), политике (агент правил), службах (контролёр ABNO) и т. п.

В последующем тексте выделены основные компоненты, использующие базы данных. Следует отметить, что базы доступны для проверки любым компонентам ABNO. Обновления баз данных следует обрабатывать с осторожностью, поскольку разрешение записи в них нескольким компонентам может вызывать проблемы связанные последовательностью действий и одновременными попытками записи.

2.3.1.8.1. База данных организации трафика (TED)

TED — это хранилище данных о топологии сети, которые могут быть дополнены сведениями о возможностях (например, о метрике или пропускной способности) и активными данными о состоянии (например, up/down или оставшаяся свободная полоса). Базу TED можно создать на основе сведений из сети или от NMS/OSS (например, данные инвентаризации).

Основным применением TED в архитектуре ABNO является предоставление необработанных (raw) данных, с которыми работают элементы расчёта пути. TED может просматриваться пользователями NMS/OSS для определения текущего состояния сети и предоставлять сведения прикладным службам, таким как оптимизация трафика на прикладном уровне (ALTO) [RFC5693].

2.3.1.8.2. База данных LSP

LSP-DB — это хранилище данных о LSP, которые организованы или могут быть созданы в сети, включая пути и использование ресурсов LSP. Базу LSP-DB можно создать из локально генерируемых сведений. Например, эта база обновляется при предоставлении LSP. Можно создать базу также на основе сведений из сети, получаемых путём опроса или считывания состояний LSP, которые уже организованы.

Основным применением LSP-DB в архитектуре ABNO является улучшение планирования и оптимизации LSP. Новые LSP можно создавать так, чтобы они не были связаны с путями (path-disjoint) других LSP (для поддержки защищённых служб). LSP можно перемаршрутизировать для оптимизации путей или освобождения ресурсов для других LSP. Возможен быстрый ремонт LSP при уведомлении о неполадках в сети или перенос LSP на другой путь для исключения ресурсов, которые планируется отключить для обслуживания. Основным потребителем LSP-DB являются Stateful PCE (параграф 2.3.1.7).

2.3.1.8.3. Базы данных SRLG

Базу TED можно дополнить сведениями о группах каналов с общим риском (Shared Risk Link Group или SRLG), которые содержат для каждого сетевого ресурса один или несколько идентификаторов, связывающих этот ресурс с другими ресурсами в той же базе TED, для которых существует такой же риск отказа.

Хотя эти данные могут быть очень полезны, их можно дополнить дополнительными подробными сведениями, поддерживаемыми в отдельной базе данных и индексируемыми по идентификатору SRLG из базы TED. Такая база данных может интерпретировать сведения SRLG из других сетей (например, сетей серверов), предоставлять вероятности отказов, связанные с каждой SRLG, предлагать приоритет, когда не удаётся найти пути, не связанные с SRLG, и сопоставлять SRLG разных серверных сетей или сетей партнёров.

2.3.1.8.4. Другие базы данных

В систему ABNO могут встраиваться другие базы данных, используемые в работе сети, например, сведения о потоках и потребностях в трафике, предсказанных и плановых запросах трафика, истории отказов и восстановления каналов и узлов, ресурсах сети, таких как метки пакетов и физические метки (MPLS и GMPLS) и т. п.

Как отмечено в параграфе 2.3.1.8.1, TED можно дополнить данными инвентаризации. Вполне вероятно, что во многих сетях такие сведения хранятся в отдельной базе данных (Inventory Database), которая включает информацию о производителе, модели, дате установки и т. п.

2.3.1.9. Сервер ALTO

Сервер ALTO предоставляет сведения о сети уровню приложений на основе абстрактных карт области сети. Эти данные представляются в упрощённом виде, но полезны для управления трафиком на уровне приложений. Службы ALTO помогают поставщикам услуг совместно использовать данные о сетевых местоположениях и стоимости путей между ними. Критерии выбора между местоположениями могут зависеть от таких сведений, как максимальная пропускная способность, минимальный трафик между доменами, стоимость для пользователя и т. п.

Сервер ALTO создаёт представления ALTO для совместного использования данных с координатором прикладных служб, чтобы тот мог выбирать лучшие пути в сети для передачи трафика прикладного уровня. Представления ALTO рассчитываются на основе сведений из сетевых баз данных, политики, заданной агентом правил (Policy Agent), по алгоритмам, используемым элементом PCE.

Базовый протокол ALTO [RFC7285] определяет, в частности, одноузловое абстрактное представления сети для координатора прикладных служб, состоящее из двух частей — карты сети и карты стоимости. Карта сети указывает множество задаваемых провайдером идентификаторов (Provider-defined Identifier или PID), представляющих точки входа в сеть. Каждый узел на прикладном уровне известен как конечная точка (End Point или EP), которой назначен PID, поскольку PID являются точками входа в сеть из приложений. Как указано в [RFC7285], PID может обозначать подсеть, набор подсетей, участок города, точку присутствия (Point of Presence или PoP) и т. п. Каждый такой регион сети может быть одним доменом или множеством сетей, это лишь представление, выдаваемое сервером ALTO уровню приложений. Карта стоимости указывает стоимость путей между EP и/или PID. Критерии используемые координатором прикладных служб для выбора между двумя местоположениями в сети зависят от атрибутов, таких как максимальная пропускная способность, минимальный междоменный трафик, стоимость для пользователя и т. п.

2.3.1.10. Диспетчер топологии виртуальной сети (VNTM)

Топология виртуальной сети (Virtual Network Topology или VNT) определена в [RFC5212] как один или множество LSP в одной или нескольких сетях, обеспечивающие сведения для эффективной обработки путей в сети верхнего уровня. Например, набор LSP в сети с мультиплексированием по длине волны (wavelength division multiplexed или WDM) может обеспечивать связность в качестве виртуальных каналов в вышележащей сети с коммутацией пакетов.

VNT расширяет число физических/выделенных каналов в сети верхнего уровня и настраивается путём создания или уничтожения нижележащих LSP и анонсирования изменений в вышележащую сеть. VNT можно приспособить к потребностям трафика, чтобы в сети верхнего уровня можно было создавать или освобождать пропускную способность по мере потребностей. Освобождение ненужных ресурсов VNT делает их доступными в сети нижележащего уровня для других применений.

Создание виртуальной топологии для включения в сеть является непростой задачей. Нужно принять решения о том, какие узлы верхнего уровня лучше подключить, в какой сети нижнего уровня обеспечивать LSP для связности и как маршрутизировать LSP в сети нижнего уровня. Кроме того, нужны определённые действия для обеспечения низкоуровневых LSP и анонсирования связности в сети вышележащего уровня.

В [RFC5623] описано, как диспетчер VNTM может создавать соединения на уровне серверов для поддержки связности на клиентском уровне. В архитектуре ABNO создание новых соединений можно передать менеджеру обеспечения, как описано в параграфе 2.3.1.11.

Все эти действия и решения в значительной мере зависят от политики, поэтому координирующий их компонент VNTM получает данные от агента правил (политики). Диспетчер VNTM тесно связан с PCE сети верхнего уровня и каждым PCE в сетях нижнего уровня.

2.3.1.11. Диспетчер обеспечения

Диспетчер обеспечения (Provisioning Manager) отвечает за подачу или доставку запросов на организацию LSP. Это могут быть инструкции для плоскости управления, работающей в сети, или программирование отдельных сетевых устройств. Во втором случае диспетчер обеспечения может выступать в качестве контроллера OpenFlow [ONF].

Взаимодействия между сетью и диспетчером обеспечения более подробно рассматриваются в параграфе 2.3.2.6.

2.3.1.12. Уровни сети клиента и сервера

Сети клиентов и серверов показаны на рисунке 1 как иллюстративные примеры использования архитектуры ABNO для координации услуг через несколько сетей, где сети нижнего уровня обеспечивают связность для сетей верхнего уровня. В параграфе 3.2 представлены варианты применения для многоуровневых сетей.

2.3.2. Функциональные интерфейсы

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

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

2.3.2.1. Интерфейсы настройки и программирования

Сетевые устройства можно настраивать и программировать напрямую из NMS/OSS. Имеется много протоколов для решения этих задач, включая:

  • SNMP [RFC3412];

  • протокол настройки сети (Network Configuration Protocol или NETCONF) [RFC6241];

  • RESTCONF [RESTCONF];

  • общий протокол управления коммутаторами (General Switch Management Protocol или GSMP) [RFC3292];

  • ForCES [RFC5810];

  • OpenFlow [ONF];

  • PCEP [PCE-Init-LSP].

Разработан стандарт TeleManagement Forum (TMF) Multi-Technology Operations Systems Interface (MTOSI) [TMF-MTOSI] для облегчения сетевого взаимодействия приложений и обеспечения возможности обнаруживать, настраивать и активировать ресурсы. Исходно информационная модель MTOSI могла представлять лишь ориентированные на соединения сети и ресурсы. В последующих выпусках была добавлена поддержка сетей без организации явных соединений (connectionless). Для NMS интерфейс MTOSI является северным и основан на web-услугах SOAP.

С точки зрения ABNO настройка сети является сквозной (pass-through) функцией. Это можно увидеть в левой части рисунка 1.

2.3.2.2. Создание TED по данным из сети

Как указано в параграфе 2.3.1.8, база TED предоставляет подробные сведения о возможностях и состоянии сети для использования системой ABNO и PCE, в частности. Базу TED можно создать через участие в протоколах IGP-TE, работающих в сети (например, OSPF-TE [RFC3630] и IS-IS TE [RFC5305]). Можно также создать TED с использованием расширений BGP для распространения сведений о состоянии каналов [BGP-LS].

Система ABNO может поддерживать одну базу TED для множества сетей или использовать свою TED в каждой сети. Кроме того, сервер ALTO [RFC5693] может предоставлять абстрактную топологию сети для построения базы TED на прикладном уровне, которую PCE может использовать для расчёта путей между серверами и объектами прикладного уровня для предоставления прикладных служб.

2.3.2.3. Улучшение TED

Базу TED можно улучшить данными инвентаризации от NMS/OSS, что дополняет сведения, полученные, как указано в параграфе 2.3.2.2, информацией, которая обычно не распространяется в сети, например, данными о типах и возможностях узлов или характеристиках оптических каналов. Протокол для этого интерфейса ещё не выбран, но протокол, разработанный или адаптированный в соответствии с требованиями к интерфейсу в систему маршрутизации (I2RS) [I2RS-Arch], может оказаться подходящим кандидатов для распространения объёмной информации о состоянии маршрутизации с чётко определенным языком представления. Другим кандидатом может быть протокол NETCONF [RFC6241], передающий данные с использованием языка YANG [RFC6020].

Отметим, что в общем случае любая комбинация протокола и кодирования, подходящая для представления TED, как описано в параграфе 2.3.2.4, подойдёт, вероятно, или может быть сделана подходящей для обеспечения возможности записи в TED как описано здесь.

2.3.2.4. Представление TED

База TED может быть представлена на северном интерфейсе системы ABNO для использования в NMS/OSS или координаторе прикладных служб. Это позволит пользователям и приложениям получить представление топологии сети и статус сетевых ресурсов, а также планировать и предоставлять сетевые услуги. Имеется несколько протоколов, позволяющих экспортировать TED на северной границе.

  • Протокол ALTO [RFC7285] предназначен для распространения абстрактной топологии, используемой сервером ALTO, и может быть полезен для экспорта TED. Сервер ALTO предоставляет стоимость пути между EP или PID, поэтому прикладной уровень может выбрать соединение, наиболее подходящее для обмена информацией между своими точками.

  • Протокол, служащий для экспорта топологических сведений из сети, можно применять для экспорта топологии из TED [BGP-LS].

  • Для I2RS [I2RS-Arch] потребуется протокол, способный обрабатывать обмен большими объёмами маршрутных сведений, который подойдёт и для экспорта TED. В этом случае имеет смысл стандартизовать представление TED на формальном языке моделирования данных, таком ка YANG [RFC6020], чтобы можно было использовать имеющиеся протоколы, например, NETCONF [RFC6241] или расширяемый протокол обмена сообщениями и сведениями о присутствии (Extensible Messaging and Presence Protocol или XMPP) [RFC6120].

Отметим, что экспорт из TED может быть полным дампом содержимого (выраженным на подходящем языке абстракции), как описано выше, а также набором данных, агрегированным или отфильтрованным в соответствии с правилами или конкретными требованиями, Таким образом, связи, показанные на рисунке 1, могут быть несколько упрощёнными, поскольку контроллер ABNO может участвовать в подготовке и представлении сведений из TED на северном интерфейсе.

2.3.2.5. Запросы расчёта пути из сети

Как задаёт архитектура PCE [RFC4655], элементы сети могут подавать запросы на расчёт пути элементу PCE по протоколу PCEP [RFC5440]. Это упрощает создание в сети LSP в ответ на простые запросы связности и позволяет сети повторно оптимизировать и ремонтировать LSP.

2.3.2.6. Управление сетями с помощью диспетчеров обеспечения

Как указано в параграфе 2.3.1.11, диспетчер обеспечения подаёт или направляет запросы на предоставление ресурсов в сети. Эти операции могут происходить на двух уровнях: запросы на предоставление/настройку конкретных ресурсов в плоскостях данных или пересылки и запросы на инициирование набора действий, которые запрограммированы с помощью плоскости управления. Для предоставления ресурсов сети уже имеется много протоколов, указанных ниже.

  • Программирование/настройка конкретных сетевых ресурсов

    • ForCES [RFC5810] определяет протокол для отделения элемента управления (диспетчер обеспечения) от элементов пересылки на каждом узле сети.

    • Обобщенный протокол управления коммутатором (General Switch Management Protocol или GSMP) [RFC3292] — это асимметричный протокол, позволяющий одному или нескольким внешним контроллерам коммутаторов (например, диспетчерам обеспечения) организовать и поддерживать состояние коммутатора по меткам (такого как MPLS).

    • OpenFlow [ONF] — это коммуникационный протокол, предоставляющий контроллеру OpenFlow (такому как диспетчер обеспечения)доступ к плоскости пересылки коммутатора или маршрутизатора в сети.

    • Исторически сложилось так, что для организации состояния пересылки/коммутации на отдельных узлах сети используются другие механизмы, основанные на конфигурации. Эти механизмы варьируются от нестандартных командных интерфейсов (command line interface или CLI) до различных стандартизованных вариантов вроде языка трансляции 1 (Transaction Language 1 или TL1) [TL1] и SNMP [RFC3412]. Эти механизмы не предназначены для быстрых операций в сети и не обеспечивают простого программирования. Не предполагается их использование диспетчером обеспечения в архитектуре ABNO.

    • NETCONF [RFC6241] предоставляет более активный протокол настройки, который может подойти для массового программирования ресурсов сети. Использование протокола зависит от определения подходящих модулей YANG для требуемых вариантов. Ранние работы группы IETF NETMOD направлены на функции маршрутизации высокого уровня, сравнимые с функциями, рассмотренными в параграфе 2.3.2.8 (см. [YANG-Rtg]).

    • Спецификация [TMF-MTOSI] обеспечивает подготовку, активацию, деактивацию и освобождение ресурсов через интерфейс активации услуг (Service Activation Interface или SAI). Базовый коммуникационный транспорт (Common Communication Vehicle или CCV) — это программы промежуточного уровня (middleware) для реализации MTOSI. CCV применяется для обеспечения абстракции промежуточных программ в сочетании с языком описания услуг Web (Web Services Description Language или WSDL), чтобы можно было связать MTOSI с разными технологиями middleware по мере необходимости.

  • Инициирование действий через плоскость управления

    • LSP можно запрашивать с помощью интерфейса системы управления головной части LSP, используя такие инструменты, как CLI, TL1 [TL1], SNMP [RFC3412]. Настройка с таким уровнем детализации не столь критична по времени, как при программировании отдельных сетевых ресурсов, поскольку основная задача программирования сквозной связности передаётся плоскости управления. Тем не менее, эти механизмы остаются неподходящими для программируемого управления сетью и не предлагаются для использования диспетчером обеспечения в архитектуре ABNO.

    • Как отмечено выше, NETCONF [RFC6241] обеспечивает более активный протокол настройки. Это может быть особенно подходящим для запросов на организацию LSP. Нужна работа по созданию модуля YANG.

    • Протокол взаимодействия PCE (PCEP) [RFC5440] был предложен для запросов организации LSP [PCE-Init-LSP] и работает достаточно хорошо, поскольку требуемые элементы протокола совпадают с применяемыми для откликов на запросы расчёта пути. Функциональный элемент, подающий запросы PCEP для организации LSPs называют активным PCE, однако следует отметить, что функциональным компонентом ABNO для запроса организации LSP является диспетчер обеспечения. Другие контроллеры, такие как VNTM и контроллер ABNO пользуются услугами диспетчера обеспечения для изоляции функций расчёта и запроса путей от механизмов обеспечения, использующихся в любой данной сети.

Отметим, что I2RS не предоставляет механизмов управления ресурсами сети на этом уровне, поскольку предназначен для управления состоянием маршрутизации в маршрутизаторах, а не состоянием пересылки в плоскости данных.

2.3.2.7. Аудит сети

После предоставления ресурсов или организации соединений важно, чтобы система ABNO могла определить состояние сети, а при изменении предоставленных ресурсов или выводе их из эксплуатации изменения в сети должны быть понятны системе ABNO. Эти функции делится на четыре категории, описанных ниже.

  • Сбор обновлений базы TED, как описано в параграфе 2.3.2.2.

  • Явные уведомления об успешном создании LSP и его последующем состоянии могут предоставляться с использованием расширений PCEP, как описано в [Stateful-PCE] и [PCE-Init-LSP].

  • Может применяться OAM с проверкой результатов обработчиком OAM, как описано в параграфе 2.3.2.14.

  • Ряд компонентов ABNO может подавать запросы и проверять состояние сети с помощью различных технологий, включая I2RS, NETCONF, SNMP.

2.3.2.8. Управление системой маршрутизации

Как обсуждалось в параграфе 2.3.1.5, интерфейс с системой маршрутизации (I2RS) обеспечивает программируемый способ доступа (чтение и запись) к данным состояния маршрутизации на маршрутизаторах сети. Клиент I2RS подаёт запросы маршрутизаторам сети для организации или извлечения состояния маршрутизации. Для этих запросов служит протокол I2RS, который будет основан на NETCONF [RFC6241] и RESTCONF [RESTCONF] с рядом дополнений.

2.3.2.9. Интерфейс контроллера ABNO с PCE

Контроллер ABNO должен иметь возможность обращаться к PCE для определения услуг, которые могут быть предоставлены в сети и нет причин отказываться для этого от стандартного протокола PCEP, заданного в [RFC5440].

2.3.2.10. Интерфейс VNTM с PCE

Между диспетчером топологии виртуальной сети (VNTM) и PCE имеется два вида взаимодействий.

  1. Когда VNTM хочет определить, какие LSP можно организовать в сети, он использует стандартный интерфейс PCEP [RFC5440] для запроса расчёта пути.

  2. Когда PCE понимает, что он не может выполнить расчёт запрошенного пути, или видит, что в сети (в соответствии с теми или иными заданными правилами) недостаточно ресурсов (например, пропускная способность того или иного канала близка к истощению), он может уведомить VNTM, который (в соответствии с правилами) может принять меры для создания дополнительной виртуальной топологии. Интерфейс для этого в настоящее время не задан, хотя может оказаться, что протокол, разработанный для I2RS, будет иметь подходящие функции (см. параграф 2.3.2.8). Другим вариантом может быть расширение сообщений PCEP Notify (PCNtf) [RFC5440].

2.3.2.11. Управляющие интерфейсы ABNO

Северный интерфейс контроллера ABNO используют NMS, OSS и координатор прикладных служб для запроса в сети услуг поддержки приложений. Этот интерфейс также должен быть способен сообщать об асинхронном завершении запросов услуг и изменениях в состоянии услуг. Интерфейс должен обладать строгими средствами защиты, проверки подлинности и соблюдения правил. В настоящее время этот интерфейс не задан. Это должен быть основанный на транзакциях интерфейс, поддерживающий спецификацию абстрактных услуг с достаточной гибкостью для простоты расширения в сочетании с компактностью и простотой синтаксического анализа. Протокол, разработанный для I2RS (см. параграф 2.3.2.8) может оказаться подходящим для этого.

2.3.2.12. Запросы обеспечения ABNO

При некоторых обстоятельствах контроллер ABNO может направлять запросы напрямую диспетчеру обеспечения. Например, если такой диспетчер служит контроллером SDN, контроллер ABNO может использовать один из API, определённых для запросов к контроллеру SDN (например, Floodlight REST API [Flood]). Поскольку диспетчер обеспечения может получать инструкции от Stateful PCE, в некоторых случаях может быть уместно использование расширений PCEP [PCE-Init-LSP].

2.3.2.13. Интерфейсы политики

Как отмечено в параграфе 2.3.1.4 и других местах этого документа, политика (правила) является важнейшим компонентом архитектуры ABNO. Роль политики заключается в соблюдении указанных ниже требований и правил.

  • Добавление ресурсов по запросам должно предоставляться лишь полномочным функциям.

  • Микропотокам клиентов не следует инициировать организацию или выделение на уровне сервера.

  • Следует поддерживать возможности учёта.

  • Требуются механизмы защиту для проверки полномочности запросов и возможностей (функций).

Связанная с правилами функциональность системы может включать правила маршрутизации и пересылки:

  • поведение ECMP;

  • классификация пакетов по LSP или категориям QoS.

Определены разные варианты архитектуры с поддержкой правил, включая схему для использования политики в системах с поддержкой PCE [RFC5394]. Однако принятый IETF протокол Common Open Policy Service (COPS) [RFC2748] не получил широкого распространения.

Потребуется работа по определению всех интерфейсов политики в архитектуре ABNO, а также по определению внутренних и внешних интерфейсов (последние нуждаются в протоколах). Обсуждается вопрос возможности поддержки протоколом I2RS настройки правил и манипуляций с ними.

2.3.2.14. OAM и отчёты

Обработчик OAM должен взаимодействовать с сетью для:

  • включения функций OAM в сети;

  • выполнения упреждающих операций OAM в сети;

  • приёма уведомления о событиях в сети.

Для этого могут применяться любые интерфейсы настройки и программирования, описанные в параграфе 2.3.2.1. Уведомления NETCONF описаны в [RFC5277], OpenFlow поддерживает множество асинхронных уведомлений о событиях [ONF], протокол Syslog [RFC5424] передаёт отчёты о событиях в сети, а IP Flow Information Export (IPFIX) [RFC7011] позволяет агрегировать и передавать статистику сети.

Обработчик OAM сопоставляет полученные и сети сведения о событиях и передаёт их контроллеру ABNO, который может использовать их для восстановления предоставляемых услуг, а также NMS, OSS и координатору прикладных служб. Здесь подходит механизм, используемый для передачи из сети сведений о событиях и новых протокол не требуется, хотя для независимых от технологии передачи отчётов OAM могут потребоваться новые модели данных.

3. Варианты применения ABNO

В этом разделе приведены примеры использования архитектуры ABNO для управляемых приложениями и NMS/OSS сетевых операций. Примеры дают конкретный материал, демонстрирующий архитектуру, для облегчения её понимания и применения путём «профилирования» и выбора нужных компонентов и интерфейсов. Представленный набор примеров не содержит всех вариантов применения ABNO и предназначен для широкого охвата приложений, которые обычно рассматриваются, но не исключаются и другие варианты применения.

Описания в этом разделе не являются подробными заявлении о применимости ABNO. Предполагается, что такие заявления для описанных здесь и иных случаев могут быть подходящим материалом для других документов.

3.1. Связность между AS

Приведённый здесь пример описывает использование модели ABNO для организации сквозных услуг MPLS между автономными системами (AS). На рисунке 2 показана топология простой сети, где три AS (ASa, ASb, and ASc) соединены граничными маршрутизаторами (AS Border Router или ASBR) a1, a2, b1 — b4, c1, c2. Узел-источник (s) размещён в ASa и соединяется с адресатом (d), размещённым в ASc. Нужно рассчитать оптимальный путь для LSP от s к d, а затем инициировать в сети организацию LSP.

+--------------+ +-----------------+ +--------------+
|ASa           | |       ASb       | |          ASc |
|         +--+ | | +--+       +--+ | | +--+         |
|         |a1|-|-|-|b1|       |b3|-|-|-|c1|         |
| +-+     +--+ | | +--+       +--+ | | +--+     +-+ |
| |s|          | |                 | |          |d| |
| +-+     +--+ | | +--+       +--+ | | +--+     +-+ |
|         |a2|-|-|-|b2|       |b4|-|-|-|c2|         |
|         +--+ | | +--+       +--+ | | +--+         |
|              | |                 | |              |
+--------------+ +-----------------+ +--------------+

Рисунок 2. Топология связи между AS с иерархией PCE (Parent PCE).

Далее описываются этапы предоставления услуги в рамках архитектуры ABNO.

  1. Управление запросами.

    Как показано на рисунке 3, NMS/OSS подаёт контроллеру ABNO запрос для пути между s и d. Контроллер ABNO проверяет наличие у NMS/OSS права вносить такой запрос услуги.

  2.                +---------------------+
                   |       NMS/OSS       |
                   +----------+----------+
                              |
                              V
    +--------+    +-----------+-------------+
    | Агент  +-->-+     Контроллер ABNO     |
    | правил |    |                         |
    +--------+    +-------------------------+

    Рисунок 3. Управление запросом в ABNO.

    Расчёт пути с иерархией PCE.

                +-----------------+
                | Контроллер ABNO |
                +----+-------+----+
                     |       A
                     V       |
                  +--+-------+--+   +--------+
    +--------+    |             |   |        |
    | Агент  +-->-+ PCE-родитель+---+ AS TED |
    | правил |    |             |   |        |
    +--------+    +-+----+----+-+   +--------+
                   /     |     \
                  /      |      \
           +-----+-+ +---+---+ +-+-----+
           |       | |       | |       |
           | PCE a | | PCE b | | PCE c |
           |       | |       | |       |
           +---+---+ +---+---+ +---+---+
               |         |         |
            +--+--+   +--+--+   +--+--+
            | TEDa|   | TEDb|   | TEDc|
            +-----+   +-----+   +-----+

    Рисунок 4. Запрос расчёта пути с иерархией PCE.

    Контроллеру ABNO нужно найти сквозной путь для LSP. Поскольку AS хотят поддерживать конфиденциальность сведений о своих внутренних ресурсах и топологии, они не будут использовать общую базу TED и в каждой будет свой PCE. Здесь применима архитектура Hierarchical PCE (H-PCE) [RFC6805].

    Как показано на рисунке 4, контроллер ABNO передаёт запрос родительскому PCE для сквозного пути. Родительский PCE (см. [RFC6805]) обращается к базе TED, которая показывает связность между AS. Это помогает понять, что сквозной путь должен проходить через ASa, Asb и ASc, поэтому передаются раздельные запросы на расчёт пути каждому из PCE a, b и c на определения лучшего пути через AS.

    Каждый из дочерних PCE применяет к полученному запросу правила для проверки его допустимости и выбора типов ресурсов сети, которые могут использоваться в результате расчёта. В целях конфиденциальности каждый из дочерних PCE может предоставлять отклик с использованием ключа пути [RFC5520] для сокрытия деталей рассчитанного сегмента. Родительский PCE сопоставляет отклики от дочерних и применяет свои правила для их объединения в лучший сквозной путь, который возвращается контроллеру ABNO.

  3. Предоставление сквозного LSP

    Имеется несколько вариантов обеспечения сквозного LSP в архитектуре ABNO, часть которых описана ниже.

    1. Обеспечение от контроллера ABNO с плоскостью управления

      На рисунке 5 показано, как контроллер ABNO отправляет через диспетчер обеспечения запрос для организации сквозного LSP. Как описано в параграфе 2.3.2.6, для этого взаимодействия можно применить протокол NETCONF [RFC6241] или расширения PCEP из [PCE-Init-LSP]. В любом случае запрос на обеспечение передаётся головному маршрутизатору с коммутацией по меткам (Label Switching Router или LSR) а тот использует сигнализацию плоскости управления (например, с помощью RSVP-TE [RFC3209]) для инициирования организации LSP.

    2.               +-----------------+
                    | Контроллер ABNO |
                    +--------+--------+
                             |
                             V
                      +------+-------+
                      | Диспетчер    |
                      | обеспечения  |
                      +------+-------+
                             |
                             V
        +--------------------+------------------------+
       /                    Сеть                       \
      +-------------------------------------------------+

      Рисунок 5. Предоставление сквозного LSP.

      Обеспечение путём программирования сетевых ресурсов

      В этом варианте LSP организуется поэтапно (hop by hop) от диспетчера обеспечения с использованием таких механизмов, как ForCES [RFC5810] или OpenFlow [ONF] (см. параграф 2.3.2.6). Картина в этом случае совпадает с показанной на рисунке 5. Для взаимодействия между контроллером ABNO и диспетчером обеспечения применяется PCEP или NETCONF (как в варианте 3a), а за распределение запросов между отдельными элементами сети отвечает диспетчер обеспечения.

    3. Обеспечение с активным родительским PCE

      Активный PCE (параграф 2.3.1.7) работает на основе концепций [PCE-Init-LSP]. В этом случае процесс варианта 3a изменяется так, что PCE напрямую передаёт команду PCEP в сеть без возврата отклика сначала контроллеру ABNO. Этот подход показан на рисунке 6 и может быть изменён так, чтобы диспетчер обеспечения продолжал программировать отдельные ресурсы сети как в варианте 3b.

    4.             +-----------------+
                  | Контроллер ABNO |
                  +----+------------+
                       |
                       V
                    +--+----------+         +--------------+
      +--------+    |             |         | Диспетчер    |
      | Агент  +-->-+ PCE-родитель+---->----+ обеспечения  |
      | правил |    |             |         |              |
      +--------+    +-+----+----+-+         +-----+--------+
                     /     |     \                |
                    /      |      \               |
             +-----+-+ +---+---+ +-+-----+        V
             |       | |       | |       |        |
             | PCE a | | PCE b | | PCE c |        |
             |       | |       | |       |        |
             +-------+ +-------+ +-------+        |
                                                  |
                 +--------------------------------+------------+
                /                    Сеть                       \
               +-------------------------------------------------+

      Рисунок 6. Разделение с активным PCE.

      Обеспечение с активными дочерними PCE и сборкой сегментов

      Сочетание вариантов 3b и 3c может создавать комбинацию механизмов программирования сети для обеспечения сквозного LSP. На рисунке 7 показано, как каждый из дочерних PCE может стать активным и отвечать за организацию сквозного сегмента LSP через одну из AS. Затем контроллер ABNO использует диспетчер обеспечения для программирования соединений между AS, используя ForCES или OpenFlow, а сегменты LSP объединяются в соответствии с идеями из [RFC5150]. Можно спорить, является ли PCE-родитель в этой модели активным (указывает дочерним создать сегменты LSP) или пассивным (запрашивает сегменты пути у потомков).

  4.                +-----------------+
                   | Контроллер ABNO +-------->--------+
                   +----+-------+----+                 |
                        |       A                      |
                        V       |                      |
                     +--+-------+--+                   |
       +--------+    |             |                   |
       | Агент  +-->-+ PCE-родитель|                   |
       | правил |    |             |                   |
       +--------+    ++-----+-----++                   |
                     /      |      \                   |
                    /       |       \                  |
               +---+-+   +--+--+   +-+---+             |
               |     |   |     |   |     |             |
               |PCE a|   |PCE b|   |PCE c|             |
               |     |   |     |   |     |             V
               +--+--+   +--+--+   +---+-+             |
                  |         |          |               |
                  V         V          V               |
       +----------+-+ +------------+ +-+----------+    |
       |Диспетчер   | |Диспетчер   | |Диспетчер   |    |
       |обеспечения | |обеспечения | |обеспечения |    |
       +-+----------+ +-----+------+ +-----+------+    |
         |                  |              |           |
         V                  V              V           |
      +--+-----+       +----+---+       +--+-----+     |
     /   AS a   \=====/   AS b   \=====/   AS c   \    |
    +------------+ A +------------+ A +------------+   |
                   |                |                  |
             +-----+----------------+-----+            |
             |    Диспетчер обеспечения   +----<-------+
             +----------------------------+

    Рисунок 7. Подготовка LSP в активными дочерними PCE и сшиванием.

    Проверка услуги

    Контроллеру ABNO необходимо убедиться, что сквозной путь LSP организован в соответствии с запросом. При использовании для создания LSP плоскости управления головной LSR может передать уведомление (возможно, через PCEP) об успешной организации пути, но для проверки создания LSP контроллер ABNO будет запрашивать у обработчика OAM выполнение проверки непрерывности (Continuity Check) OAM в плоскости данных и возврат отчёта о готовности LSP к передаче трафика.

  5. Уведомление о предоставлении услуги

    Когда контроллер ABNO убедился в готовности службы передавать трафик, он уведомляет об этом NMS/OSS. Предоставление услуги можно дополнительно проверить с помощью аудита сети (параграф 2.3.2.7).

3.2. Многоуровневая сеть

Сети обычно создаются с использованием нескольких уровней, представляющих разделение административных областей или технологий, а также по ролям узлов (клиенты и серверы).

Предпочтительно координировать управление сетевыми ресурсами и их использованием (учёт нескольких уровней и управления ими) вместо независимого управления и оптимизации ресурсов на каждом уровне. Это способствует повышению эффективности и автоматизации сети и может определяться как межуровневая организация трафика.

Архитектура PCE поддерживает межуровневую организацию трафика [RFC5623], а в сочетании с архитектурой ABNO обеспечивает набор возможностей для координации сетевых ресурсов между несколькими уровнями.

Приведённый ниже пример показывает использование ABNO для координации распределения сетевых ресурсов серверного уровня с целью создания виртуальной топологии в сети клиентского уровня для организации на нем сквозной связности. Многоуровневая сеть представлена на рисунке 8.

+--+   +--+   +--+                    +--+   +--+   +--+
|P1|---|P2|---|P3|                    |P4|---|P5|---|P6|
+--+   +--+   +--+                    +--+   +--+   +--+
                  \                  /
                   \                /
                    +--+  +--+  +--+
                    |L1|--|L2|--|L3|
                    +--+  +--+  +--+

Рисунок 8. Многоуровневая сеть.

В сети имеется 6 маршрутизаторов пакетного уровня (P1 — P6) и три оптических коммутатора по длине волны (lambda, L1 — L3). Между маршрутизаторами P1 — P3, а также между P4 — P6 имеется связность, но эти «островки» маршрутизаторов не связаны на уровне пакетов (возможно из-за отказа в сети или нехватки пропускной способности между островками). Однако имеется связность на оптическом уровне между коммутаторами L1 — L3 и оптическая сеть подключена к маршрутизаторам P3 и P4 (с оптическими линейными платами). В этом примере желательно соединение на пакетном уровне (MPLS LSP) между P1 и P6, для организации которого в архитектуре ABNO используется ряд шагов.

  1. Управление запросами.

    Как показано на рисунке 9, координатор прикладных услуг подаёт запрос на организацию связности между P1 и P6 в сети пакетного уровня, т. е. координатор запрашивает MPLS LSP с определённой пропускной способностью для доставки трафика приложений. Контроллер ABNO проверяет наличие у координатора прикладных служб прав на запрос услуги.

  2.           +---------------------------+
              |  Координатор прикладных   |
              |           служб           |
              +-------------+-------------+
                            |
                            V
    +------+   +------------+------------+
    |Агент +->-+     Контроллер ABNO     |
    |правил|   |                         |
    +------+   +-------------------------+

    Рисунок 9. Управление запросами координатора прикладных служб.

    Расчёт пути для услуги на пакетном уровне.

    Контроллер ABNO передаёт запрос на расчёт пути элементу PCE пакетного уровня для нахождения подходящего LSP, как показано на рисунке 10. PCE использует подходящие для запроса правила и обращается к базе TED для пакетного уровня. Выясняется, что доступных сейчас путей нет.

  3.              +-----------------+
                 | Контроллер ABNO |
                 +----+------------+
                      |
                      V
    +--------+     +--+-----------+   +--------+
    | Агент  +-->--+     PCE      +---+TED для |
    | правил |     |пакетн. уровня|   |пакетов |
    +--------+     +--------------+   +--------+

    Рисунок 10. Запрос расчёта пути.

    Вызов VNTM и расчёт пути на оптическом уровне.

    После неудачного расчёта пути в п. 2 PCE вместо уведомления об этом контроллера ABNO вызывает VNTM для определения возможности создать нужный канал в виртуальной топологии для преодоления разрыва.

                   +------+
    +--------+     |      |     +--------------+
    | Агент  +-->--+ VNTM +--<--+     PCE      |
    | правил |     |      |     |пакетн. уровня|
    +--------+     +---+--+     +--------------+
                       |
                       V
                 +---------------+   +---------+
                 |     PCE       +---+ TED для |
                 | оптич. Уровня |   | оптики  |
                 +---------------+   +---------+

    Рисунок 11. Вызов VNTM и расчёта пути оптического уровня.

    Как показано на рисунке 11, PCE пакетного уровня сообщает диспетчеру VNTM о проблеме связности и тот обращается к правилам, чтобы проверить, разрешено ли ему находить путь. При положительном ответе VNTM запрашивает у PCE оптического уровня поиск пути через оптическую сеть для организации виртуального канала для пакетного уровня. При обработке этого запроса PCE обращается к базе TED оптического уровня.

  4. Предоставление оптического пути.

    После нахождения пути через оптическую сеть его нужно предоставить. Варианты решения этой задачи описаны в п. 3 параграфа 3.1. Инициировать предоставление может PCE оптического уровня или его пользователь (VNTM). Команду можно отправить головному узлу оптического LSP (P3), чтобы можно было использовать плоскость управления (например, GMPLS RSVP-TE [RFC3473]) для предоставления LSP. Можно также предоставить ресурсы сети напрямую с помощью любого из механизмов, указанных в параграфе 2.3.2.6.

  5. Создание виртуальной топологии на пакетном уровне.

    После создания LSP на оптическом уровне его можно сделать доступным пакетному уровню как виртуальный канал. При использовании сигнального механизма GMPLS [RFC6107] процесс можно автоматизировать в плоскости управления, в иных случаях может потребоваться специальная инструкция для головного маршрутизатора оптического LSP (например, через I2RS).

    +--------+
    |TED для |
    |пакетов |
    +------+-+
           A
           |
          +--+                    +--+
          |P3|....................|P4|
          +--+                    +--+
              \                  /
               \                /
                +--+  +--+  +--+
                |L1|--|L2|--|L3|
                +--+  +--+  +--+

    Рисунок 12. Анонсирование нового виртуального канала.

    После создания виртуального канала (рисунок 12) он анонсируется в IGP для сети пакетного уровня и появляется в базе TED для этой сети.

  6. Завершение расчёта пути и его предоставление на пакетном уровне.

    Сейчас пакетная сеть уже имеет требуемые ресурсы и PCE для пакетного уровня может завершить свою работу с предоставлением MPLS LSP как описано в параграфе 3.1.

  7. Проверка услуги и уведомление об исполнении.

    Как отмечено в параграфе 3.1, контроллеру ABNO нужно проверить возможность корректной организации сквозного LSP до уведомления о завершении организации услуги контроллера прикладных служб. Кроме того, весьма вероятно, что потребуется проверка услуги до того, как можно будет начать использование LSP оптического уровня, т. е. VNTM должен координироваться с обработчиком OAM для проверки готовности LSP.

3.2.1. Соединение ЦОД через многоуровневые сети

Для поддержки новых и создаваемых облачных приложений, таких как резервирование данных в реальном масштабе времени, перенос виртуальных машин, кластеризация серверов или реорганизация ресурсов, все чаще требуется динамическое предоставление или выделение ресурсов IT, а также соединение удалённых ЦОД. Эти операции требуют доставки трафика между ЦОД и соединения, обеспечивающие такую связь, обычно предоставляются через статические устройства (каналы) или выделенные арендованные линии, что ведёт к неэффективному использованию ресурсов. Кроме того, основным требованием является возможность управления удалёнными ЦОД как единым целым.

В таких средах плоскость данных зависит от оператора и провайдера. Их клиенты могут арендовать услуги с коммутацией длин волн (lambda switch capable или LSC) или пакетов (packet switch capable или PSC), а также мультиплексирования с разделением по времени (time division multiplexing или TDM), а применение архитектуры и контроллера ABNO позволяет обеспечить динамическое предоставление сетевых услуг независимо от базового сервиса и транспорта.

Соединение ЦОД может включать эксплуатацию, управление и поддержку гетерогенных сред для сайта каждого ЦОД и сегмента ядра сети (metro-core), соединяющий их, не только в части технологии базовой плоскости данных, но и в плоскости управления. Например, каждый сайт ЦОД или домен может централизованно управляться локально (скажем, через OpenFlow [ONF]), а транспорт в инфраструктуре ядра сети может управляться с помощью GMPLS. Хотя протокол OpenFlow специально приспособлен для работы в однодоменных сетях ЦОД (управление на уровне пакетов, множество маршрутных исключений), стандартизованная архитектура на базе GMPLS позволит динамически выделять и восстанавливать оптические ресурсы в многодоменных (например с оборудованием разных производителей) сетях, соединяющих ЦОД. Аспекты применения архитектуры ABNO и связанных с этим процедур описаны ниже.

  1. Запрос от координатора прикладных служб или NMS.

    Как показано на рисунке 13, контроллер ABNO получает от координатора прикладных служб или NMS запрос на создание нового сквозного соединения между парой конечных точек. Фактические адреса этих конечных точек рассматриваются ниже. Контроллер ABNO запрашивает у PCE путь между этими точками после рассмотрения применимой политики, заданной агентом правил (см. рисунок 1).

  2.           +---------------------------+
              |  Координатор прикладных   |
              |       служб или NMS       |
              +-------------+-------------+
                            |
                            V
    +------+   +------------+------------+
    |Агент +->-+     Контроллер ABNO     |
    |правил|   |                         |
    +------+   +-------------------------+

    Рисунок ё3. Управление запросами координатора прикладных служб.

    Отображение адресов.

    Для расчёта сквозного пути элементу PCE нужно иметь однородное представление всей топологии, что означает необходимость учёта и идентификации фактических конечных точек в части сетевых адресов клиентов. Контроллеру ABNO и/или PCE может потребоваться трансляция или отображение адресов из разных пространств. В зависимости от распространения и сбора топологических сведений возможны два варианта, описанных ниже.

    1. Уровень приложений знает сетевой уровень клиента

      Объекты прикладного уровня могут иметь интерфейс с TED или сервером ALTO, позволяющий им сопоставить высокоуровневые конечные точки с сетевыми адресами. Механизм такого сопоставления выходит за рамки этого документа, но основан на прямых интерфейсах с другими компонентами ABNO в дополнение к интерфейсу с контроллером ABNO.

      В этом варианте запрос от NMS или координатора прикладных служб содержит адреса в сети клиентского уровня, поэтому при запросе контроллера ABNO к PCE для расчёта пути между двумя конечными точками PCE может использовать предоставленные адреса, рассчитать путь и продолжать рабочий процесс, взаимодействуя с диспетчером обеспечения.

    2. Уровень приложений не знает сетевой уровень клиента

      В этом случае контроллер ABNO получает от NMS или диспетчера прикладных служб запрос, содержащий лишь идентификаторы из пространства адресов уровня приложений. Чтобы PCE мог рассчитать сквозной путь, эти адреса нужно преобразовать в адреса сети клиентского уровня. Трансляцию выполняет контроллер ABNO, который может обращаться к базам данных TED и ALTO, что позволяет запросу, передаваемому элементу PCE, оставаться связанным с одной сетью и TED. Как вариант, запрос на расчёт может использовать адреса уровня приложений, предоставляя трансляцию адресов элементу PCE.

      Отметим, что во избежание путаницы оба подхода в этом случае требуют чёткого указания используемого пространства адресов.

  3. Процесс обеспечения.

    После нахождения пути диспетчер обеспечения получает высокоуровневый запрос на предоставление услуги. Поскольку в рассматриваемом случае элементы сети не обязательно настраиваются по одному протоколу, сквозной пути делится на сегменты, а контроллер ABNO координирует и организует их создание, адаптируя и/или транслируя абстрактный запрос предоставления услуги в запросы конкретных сегментов с помощью VNTM или PCE, выдающих соответствующие команды или инструкции. Обеспечение может включать настройку элементов сети напрямую или передачу организации базового соединения выделенному экземпляру плоскости управления, отвечающему за этот сегмент.

    Диспетчер обеспечения может использовать для программирования элементов сети множество механизмов, как показано на рисунке 14. Он определяет технологию, применяемую для фактического обеспечения в каждом сегменте, из заданной вручную конфигурации или путём обнаружения.

  4.               +-----------------+
                  | Контроллер ABNO |
                  +-------+---------+
                          |
                          |
                          V
      +------+     +------+-------+
      | VNTM +--<--+     PCE      |
      +---+--+     +------+-------+
          |               |
          V               V
    +-----+---------------+------------+
    |       Диспетчер обеспечения      |
    +----------------------------------+
      |       |       |       |       |
      V       |       V       |       V
    OpenFlow  V    ForCES     V      PCEP
           NETCONF          SNMP

    Рисунок 14. Процесс обеспечения.

    Проверка и уведомление об исполнении.

    После предоставления услуги сквозной связности и проверки корректности её работы контроллеру ABNO нужно уведомить координатор прикладных служб или NMS.

3.3. Работа без прерывания

Многие службы зависят от организации нового LSP, чтобы можно было переключить трафик с имеющегося LSP с минимальными перебоями или без таковых. В этом параграфе рассматривается эти варианты использования, представлена общая модель работы без прерывания (make-before-break) в архитектуре ABNO и показано как можно поддержать каждый из вариантов применения с помощью элементов базовой модели.

3.3.1. Работа без прерывания при повторной оптимизации

Работа без прерывания — это механизм сигнализации RSVP-TE, организующий новый LSP до разрыва имеющегося LSP [RFC3209]. Это обеспечивает некоторые преимущества в таких ситуациях, как реоптимизация работающих LSP.

Процесс прост и в примере на рисунке 15 используется PCE с учётом состояния [Stateful-PCE] для мониторинга сети и принятия при необходимости мер повторной оптимизации. В этом процессе запрос на обслуживание поступает к контроллеру ABNO, например, от OSS. Запрос обслуживания указывает, что LSP нужно оптимизировать снова с учётом конкретных условий и правил. Это позволяет контроллеру ABNO управлять порядком и приоритетами реоптимизации множества LSP с использованием элементов глобальной одновременной оптимизации (Global Concurrent Optimization или GCO), как описано в параграфе 3.4, и применением правил во всей сети, например, для первоочередной реоптимизации LSP, обеспечивающих чувствительные к времени службы.

  +---------------------------------------------+
  |    OSS, NMS, координатор прикладных служб   |
  +----------------------+----------------------+
                         |
            +------------+------------+
            |     Контроллер ABNO     |
            +------------+------------+
                         |
    +------+     +-------+-------+     +-----+
    |Агент +-----+      PCE      +-----+ TED |
    |правил|     +-------+-------+     +-----+
    +------+             |
                         |
  +----------------------+----------------------+
 /                      Сеть                     \
+-------------------------------------------------+

Рисунок 15. Процесс работы без прерывания.

Контроллер ABNO поручает элементу PCE расчёт и организацию начального пути. PCE отслеживает изменения в сети с течением времени, отражаемые в базе TED, и в соответствии с правилами может рассчитать и организовать путь на замену, используя в сети работу без прерывания. После организации нового пути о сообщения сети о его корректном использовании PCE уничтожает прежний путь и может сообщить о реоптимизации контроллеру ABNO.

3.3.2. Работа без прерывания при восстановлении

Работа без прерывания может применяться для ремонта отказавшего LSP, когда есть желание сохранить ресурсы на части пути и имеется вероятность «кражи» ресурсов другими LSP, если сначала уничтожить отказавший LSP. В отличие от примера из параграфа 3.3.1, в данном случае рассматривается ситуация, когда обслуживание прервано в результате отказа в сети. Очевидно, что в случае LSP «один со многими» отказ может затрагивать лишь часть дерева и прерывание будет лишь для части листьев-адресатов, поэтому восстановление без прерывания не будет влиять на листья, не затронутые первоначальным отказом.

На рисунке 16 показаны компоненты, взаимодействующие в этом случае. Запрос на обслуживание приходит контроллеру ABNO, например, от OSS. Запрос указывает, что LSP может быть восстановлен после отказа и следует попытаться использовать как можно большую часть исходного пути.

Контроллер ABNO поручает PCE рассчитать и организовать исходный путь, а также просит обработчик OAM инициировать OAM на LSP и отследить результаты. В какой-то момент сеть сообщает об отказе обработчику OAM, который уведомляет контроллер ABNO. Контроллер ABNO поручает PCE рассчитать новый путь, используя как можно больше ресурсов исходного пути, и PCE создаёт новый LSP.

  +---------------------------------------------+
  |    OSS, NMS, координатор прикладных служб   |
  +----------------------+----------------------+
                         |
            +------------+------------+   +-------+
            |     Контроллер ABNO     +---+Обраб. |
            +------------+------------+   | OAM   |
                         |                +---+---+
                 +-------+-------+            |
                 |      PCE      |            |
                 +-------+-------+            |
                         |                    |
  +----------------------+--------------------+-+
 /                      Сеть                     \
+-------------------------------------------------+

Рисунок 16. Процесс восстановления без прерывания работы.

После организации нового пути и сообщения из сети о его корректной работе контроллер ABNO даёт элементу PCE команду уничтожить старый путь.

3.3.3. Работа без прерывания при проверке и выборе пути

В более сложном варианте использования отслеживание LSP может выполняться по множеству атрибутов, таких как задержка и её вариации. Когда LSP выходит за установленные пороги, трафик может переноситься на другой LSP, обеспечивающий желаемое (или лучшее) качество обслуживания. Для этого нужно организовать новый LSP и протестировать его, а необходимость переноса трафика требует использовать работу без прерывания.

Возможно, что новый LSP не сможет обеспечить желаемые характеристики и потребуется проверить несколько LSP для выбора наилучшего. Даже при организации исходного LSP может быть желательным тестирование нескольких LSP для выбора используемого трафиком.

На рисунке 17 показаны компоненты, взаимодействующие в этом случае. Поскольку одновременно может существовать множество LSP, требуется отдельная операция для координации выбора пути и эту работу выполняет клиент I2RS под управлением контроллера ABNO.

   +---------------------------------------------+
   |    OSS, NMS, координатор прикладных служб   |
   +----------------------+----------------------+
                          |
  +------+   +------------+------------+    +-------+
  |Агент +---+     Контроллер ABNO     +----+Обраб. |
  |правил|   |                         +--+ | OAM   |
  +------+   +------------+------------+  | +---+---+
                          |               |     |
                  +-------+-------+    +--+---+ |
                  |      PCE      |    |Клиент| |
                  +-------+-------+    |I2RS  | |
                          |            +--+---+ |
                          |               |     |
  +-----------------------+---------------+-----+-+
 /                       Сеть                      \
+---------------------------------------------------+

Рисунок 17. Процесс проверки и выбора пути без прерывания.

Обработчик OAM отвечает за инициирование тестов LSP и возврат результатов контроллеру ABNO. Обработчик OAM может также проверять результаты тестов сквозной связности через многодоменную сеть, где в каждом домене применяется своя технология. Например, сквозной путь может включать сегменты MPLS, Ethernet/VLAN, IP и т. п.

В остальном процесс похож на повторную оптимизацию, описанную в параграфе 3.3.1. Приведённый ниже псевдокод иллюстрирует взаимодействия между компонентами ABNO.

      OSS запрашивает услугу с гарантией качества

      :Label1

      DoWhile пока недостаточно LSP (контроллер ABNO)
        Запросить у PCE расчёт и предоставление LSP (контроллер ABNO)
        Создать LSP (PCE)
      EndDo

      :Label2

      DoFor для каждого LSP (контроллер ABNO)
        Проверить LSP (обработчик OAM)
        Сообщить результаты контроллеру ABNO (обработчик OAM)
      EndDo

      Оценить результаты всех тестов (контроллер ABNO)
      Выбрать предпочтительный LSP и указать клиенту I2RS (контроллер ABNO)
      Поместить трафик на предпочтительный LSP (I2RS Client)

      DoWhile слишком много LSP (контроллер ABNO)
        Дать PCE коменду уничтожения ненужного LSP (контроллер ABNO)
        Уничтожить ненужный LSP (PCE)
      EndDo

      DoUntil пока нет триггера (обработчик OAM, контроллер ABNO, Policy Agent)
        Сохранять передачу трафика (Network)
        Протестировать LSP (обработчик OAM)
      EndDo

      If уже есть подходящий LSP (контроллер ABNO)
        GoTo Label2
      Else
        GoTo Label1
      EndIf

3.4. Глобальная одновременная оптимизация

Глобальная одновременная оптимизация (GCO) определена в [RFC5557] и является ключевой технологией для максимизации эффективности сети путём одновременного расчёта набора путей с организацией трафика. Запрос на расчёт пути GCO учитывает всю топологию сети и полный набор LSP вместе с соответствующими ограничениями. GCO подходит также для перерасчёта путей набора имеющихся LSP.

Оптимизация GCO может запрашиваться в разных ситуациях, включая:

  • маршрутизацию новых услуг, когда элементу PCE нужно учитывать другие службы или топологию сети;

  • повторную оптимизацию имеющихся служб из-за фрагментации ресурсов сети или неоптимального размещения последовательно рассчитываемых услуг;

  • восстановление связности для массовых услуг при катастрофических сбоях в сети.

Сервис-провайдер может также захотеть рассчитать и внедрить новые массовые службы на основе прогнозируемой матрицы трафика. Функциональность GCO и возможности одновременных расчётов обеспечивают значительные преимущества при оптимизации сети, позволяя оптимально использовать ресурсы сети и избегать блокировки.

В приведённом ниже примере показано как архитектура и компоненты ABNO применяются для одновременной оптимизации набора услуг.

3.4.1. Пример использования GCO с MPLS LSP

При рассмотрении GCO для расчёта путей можно разделить целевые функции GCO на три категории:

  • минимизация совокупного расхода пропускной способности (Minimize Bandwidth Consumption или MBC);

  • минимизация загрузки наиболее занятого канала (Most Loaded Link или MLL);

  • минимизация совокупных расходов для набора путей (Minimize Cumulative Cost или (MCC).

В приведённом примере использования предполагается, что GCO запрашивается по отдельному каналу (offline) системой NMS/OSS. Расчёт путей может занять значительное время, а пользователь может проверять рассчитанные пути перед их обеспечением в сети.

  1. Управление запросами

    NMS/OSS запрашивает новую услугу связности для массовых служб. Контроллер ABNO проверяет наличие у NMS/OSS права подавать такой запрос и применяет атрибут GCO с запросом MBC (рисунок 18).

    1.                +---------------------+
                     |       NMS/OSS       |
                     +----------+----------+
                                |
                                V
      +--------+    +-----------+-------------+
      | Агент  +-->-+     Контроллер ABNO     |
      | правил |    |                         |
      +--------+    +-------------------------+

      Рисунок 18. Запрос NMS к контроллеру ABNO.

      В каждом запросе указывается источник, получатель и запрашиваемая пропускная способность. Запросы передаются контроллеру ABNO и классифицируются как запросы GCO. PCE применяет для каждого запроса подходящие правила и обращается к TED пакетного уровня.

  2. Расчёт пути на уровне пакетов.

    При расчёте набора услуг для приложения GCO протокол PCEP поддерживает списки векторов синхронизации (synchronization vector или SVEC) для синхронизированного расчёта путей, как задано в [RFC5440] и описано в [RFC6007].

    1. Контроллер ABNO передаёт запрос массового обслуживания элементу PCE пакетного уровня с поддержкой GCO в сообщении PCEP. PCE применяет к запросу подходящие правила и обращается к TED пакетного уровня, как показано на рисунке 19.

    2.              +-----------------+
                   | Контроллер ABNO |
                   +----+------------+
                        |
                        V
      +--------+     +--+-----------+   +--------+
      |        |     |              |   |        |
      | Агент  +-->--+ PCE пакетного+---+ TED для|
      | правил |     | уровня с     |   | пакетов|
      |        |     |поддержкой GCO|   |        |
      +--------+     +--------------+   +--------+

      Рисунок 19. Запрос расчёта пути для PCE с поддержкой GCO.

      При получении запроса массового обслуживания (GCO) элемент PCE применяет целевую функцию MBC и рассчитывает услуги одновременно.

    3. По завершении расчёта путей запрошенной услуги GCO элемент PCE передаёт эти пути контроллеру ABNO. Отклик включает полный явный путь для каждой услуги (TE LSP).

  3. Одновременно рассчитанное решение, полученное от PCE контроллер ABNO отправляет NMS/OSS как отклик PCEP (рисунок 20). Пользователь NMS/OSS может проверить пути-кандидаты и предоставить их для новых услуг или сохранить решение на будущее.

+---------------------+
|       NMS/OSS       |
+----------+----------+
           ^
           |
+----------+----------+
|   Контроллер ABNO   |
|                     |
+---------------------+

Рисунок 20. Передача решения от ABNO в NMS/OSS.

3.5. Адаптивное управление сетью (ANM)

Архитектура ABNO обеспечивает возможность реактивного управления сетевыми ресурсами на основе классификации, профилирования и предсказаний в соответствии с текущими потребностями и загрузкой ресурсов. Можно манипулировать ресурсами транспортной сети серверного уровня, такими как временная нарезка оптической транспортной сети (Optical Transport Network или OTN) [G.709] или сетка длин волн с переменной спектральной полосой (flexi-grid) [G.694.1], в соответствии с текущими и прогнозируемыми потребностями в рамках модели эластичных оптических сетей (Elastic Optical Networks или EON) [EON]. EON обеспечивает эффективный и расширяемый транспорт за счёт гибкой гранулярной сортировки трафика в домене оптических частот. Это достигается за счёт произвольного объединения (конкатенации) оптического спектра, позволяющего обеспечивать настраиваемую пропускную способность. Полоса выделяется с дискретностью 12,5 ГГц.

Адаптивное управление сетью (Adaptive Network Management или ANM) с EON позволяет выделять оптическую полосу нужного размера для сквозного оптического пути. При использовании flexi-grid выделение полосы происходит в соответствии с объёмом трафика, форматом оптической модуляции, дальностью связи или запросами пользователей, что позволяет добиться высокой спектральной эффективности и расширяемости. OTN обеспечивает гибкое и гранулярное выделение пропускной способности в сетях с коммутацией по длинам волн (Wavelength Switched Optical Network или WSON).

Для эффективного использования оптических ресурсов нужна система мониторинга сетевых ресурсов и выбора оптимальной конфигурации сети на основе состояния, доступности пропускной способности и пользовательских служб. Такую систему называют ANM.

3.5.1. Включение ANM

Процесс адаптивного управления сетью может включаться по разным причинам, указанным ниже.

Измерения

Измерения трафика могут применяться для распределения полосы (пропускной способности) в соответствии с потребностями трафика, насколько это возможно. Триггером могут служить измерения потоков трафика на маршрутизаторах IP, проверка баз данных организации трафика и состояний каналов, пороговые значения загрузки критически важных каналов сети, запросы от внешних объектов. В настоящее время операторы используют в сетях активные зонды для мониторинга, которые сохраняют результаты в системе OSS. Компоненты OSS или обработчика OAM активируют основанный на измерениях триггер, поэтому контроллер ABNO в данном случае не принимает непосредственного участия в процессе.

Запуск человеком

Оператор может запросить у ABNO запуск процесса адаптивного управления сетью через NMS.

Периодический запуск

Процесс адаптивного планирования сети может запускаться периодически для поиска оптимальной конфигурации.

Контроллер ABNO получает от OSS или NMS запрос на запуск процесса адаптивного управления сетью.

3.5.2. Обработка запроса на расчёт GCO

По запросам человека или периодических триггеров, описанных в предыдущем параграфе, OSS или NMS передаёт контроллеру ABNO запрос на выполнение GCO на основе EON. Контроллер ABNO выбирает набор служб для повторной оптимизации и целевую функцию, обеспечивающую наилучшее использование ресурсов сети. При выборе контроллер руководствуется политикой использования ресурсов для всей сети, определением оптимизации и допустимой степенью нарушения работы имеющихся услуг.

Этот запрос GCO передаётся элементу PCE, как описано в параграфе 3.4. PCE может рассмотреть сквозные пути и оптимальное распределение спектра для каждого канала, чтобы удовлетворить потребности трафика и оптимизировать расход оптической полосы пропускания в сети.

PCE работает с базой TED, но, вероятно, будет учитывать состояния, чтобы знать, какие LSP соответствуют тому или иному выделению полосы и на каких каналах сети. Получив ответ, PCE возвращает набор возможных путей контроллеру ABNO, который передаёт их NMS или OSS для выбора/контроля последующего процесса установки или изменения пути. Этот обмен показан на рисунке 21, где не показаны взаимодействия, используемые OSS/NMS для организации или изменения LSP в сети.

          +---------------------------+
          |        OSS или NMS        |
          +-----------+---+-----------+
                      |   ^
                      V   |
+------+   +----------+---+----------+
|Агент +->-+     Контроллер ABNO     |
|правил|   |                         |
+------+   +----------+---+----------+
                      |   ^
                      V   |
                +-----+---+----+
                +      PCE     |
                +--------------+

Рисунок 21. Адаптивное управление сетью с участием человека.

3.5.3. Автоматизированный процесс обеспечения

Хотя оператор контролирует большинство сетевых операций, для некоторых действий не требуется присмотра, например, для простой смены модуляции в транспондере с переменной битовой скоростью (Bit-rate Variable Transponder или BVT) с целью повышения оптической спектральной эффективности или снижения энергопотребления. Когда участие человека не требуется, PCE передаёт диспетчеру обеспечения новую конфигурацию для настройки элементов сети, как показано на рисунке 22.

          +------------------------+
          |      OSS или NMS       |
          +-----------+------------+
                      |
                      V
+------+   +----------+------------+
|Агент +->-+     Контроллер ABNO   |
|правил|   |                       |
+------+   +----------+------------+
                      |
                      V
               +------+------+
               +     PCE     |
               +------+------+
                      |
                      V
    +----------------------------------+
    |       Диспетчер обеспечения      |
    +----------------------------------+

Рисунок 22. Адаптивное управление сетью без участия человека.

3.6. Операции псевдопроводов и управление ими

Псевдопровода в сети MPLS [RFC3985] работают как форма многоуровневой сети на основе связности, предоставляемой сетью MPLS. Псевдопровода организуются через LSP, работающие как транспортные туннели, и для размещения туннелей в сети и привязки их к псевдопроводам требуется планирование.

В этом параграфе рассмотрены 4 примера: многосегментные псевдопровода, псевдопровода с разными путями (в том числе многосегментные, и защита сегментов в псевдопроводе. В параграфе 3.6.5 рассматривается применимость архитектуры ABNO для этих случаев.

3.6.1. Многосегментные псевдопровода

В [RFC5254] описана архитектура многосегментных псевдопроводов. Сквозная услуга, как показано на рисунке 23, может состоять из последовательности «сшитых» сегментов, обозначенных на рисунке как AC, PW1, PW2, PW3, AC. Сегменты псевдопровода соединяются на границе «поставщика сшивки» (stitching Provider Edge или S-PE), например, PW1 сшивается с PW2 в S-PE1. Каждое устройство доступа (AC) сшивается с сегментом псевдопровода на завершающем PE (terminating PE или T-PE), например, PW1 сшивается с AC в T-PE1.

Каждый сегмент псевдопровода передаётся через сеть MPLS по пути LSP, работающему как транспортный туннель, например, PW1 передаётся через LSP1. LSP между узлами PE могут проходить через разные сети MPLS с PE в качестве граничных узлов или PE могут размещаться внутри сети так, что каждый LSP включает охватывает лишь часть сети.

          -----         -----         -----         -----
 ---     |T-PE1|  LSP1 |S-PE1|  LSP2 |S-PE3|  LSP3 |T-PE2|    +---+
|   | AC |     |=======|     |=======|     |=======|     | AC |   |
|CE1|----|........PW1........|..PW2........|..PW3........|----|CE2|
|   |    |     |=======|     |=======|     |=======|     |    |   |
 ---     |     |       |     |       |     |       |     |    +---+
          -----         -----         -----         -----

Рисунок 23. Многосегментный псевдопровод.

Хотя показанная на рисунке 23 топология проста для понимания в реальных сетях все может быть гораздо сложнее. На рисунке 24 показана небольшая многосвязная (mesh) сеть PE. Каналы между PE не являются физическими и представляют возможные MPLS LSP между PE.

При организации сквозной услуги между граничными узлами клиентов (Customer Edge или CE) CE1 и CE2 нужно выбрать используемые PE. Иными словами, нужно рассчитать путь для определения сегментов псевдопровода (hop), а затем организовать требуемые туннели LSP для передачи сегментов псевдопровода, которые будут сшиты воедино. Для каждого LSP может потребоваться свой расчёт пути через сеть MPLS между PE. Выбор путей для многосегментного псевдопровода будет зависеть от:

  • связности MPLS;

  • доступности пропускной способности MPLS;

  • возможностей сшивки псевдопроводов и пропускной способности PE;

  • правил и соображений конфиденциальности при использовании PE.

                               -----
                              |S-PE5|
                              /-----\
 ---      -----         -----/       \-----         -----      ---
|CE1|----|T-PE1|-------|S-PE1|-------|S-PE3|-------|T-PE2|----|CE2|
 ---      -----\        -----\        -----        /-----      ---
                \         |   -------   |         /
                 \      -----        \-----      /
                  -----|S-PE2|-------|S-PE4|-----
                        -----         -----

Рисунок 24. Топология сети с многосегментными псевдопроводами.

3.6.2. Псевдопровода с разными путями

Для предоставляемой псевдопроводом услуги связности может потребоваться устойчивость к отказам. Во многих случаях это обеспечивается путём организации пары псевдопроводов, передаваемых через сеть по разным LSP, как показано на рисунке 25 (обозначения заимствованы из [RFC3985]). Очевидно, что в этом случае задача состоит в постоянном разделении двух LSP (LSP1 и LSP2) внутри сети MPLS. Это не отличается от обычной проблемы разных путей в сети MPLS.

              -------                         -------
             |  PE1  |          LSP1         |  PE2  |
        AC   |       |=======================|       |   AC
         ----...................PW1...................----
 --- -  /    |       |=======================|       |    \  -----
|     |/     |       |                       |       |     \|     |
| CE1 +      |       |       Сеть MPLS       |       |      + CE2 |
|     |\     |       |                       |       |     /|     |
 --- -  \    |       |=======================|       |    /  -----
         ----...................PW2...................----
        AC   |       |=======================|       |   AC
             |       |          LSP2         |       |
              -------                         -------

Рисунок 25. Псевдопровода с разными путями.

Псевдопровод с разными путями на рисунке 26 организован за счёт «двудомности» каждого CE через несколько PE. Требование к разным путям LSP сохраняется, но оно осложняется разными конечными точками LSP. В этом случае головной маршрутизатор (например, PE1) не может полагаться для поддержки разных путей на сигнальный протокол, поскольку ему известен путь лишь одного LSP. Поэтому нужна координация при расчёте путей.

              -------                         -------
             |  PE1  |          LSP1         |  PE2  |
         AC  |       |=======================|       |  AC
          ---...................PW1...................---
         /   |       |=======================|       |   \
 -----  /    |       |                       |       |    \  -----
|     |/      -------                         -------      \|     |
| CE1 +                      Сеть MPLS                      + CE2 |
|     |\      -------                         -------      /|     |
 -----  \    |  PE3  |                       |  PE4  |    /  -----
         \   |       |=======================|       |   /
          ---...................PW2...................---
         AC  |       |=======================|       |  AC
             |       |          LSP2         |       |
              -------                         -------

Рисунок 26. Псевдопровода с разными путями и развязанными PE.

3.6.3. Многосегментные псевдопровода с разными путями

                             -----                -----
                            |S-PE5|--------------|T-PE4|
                            /-----\               ----- \
        -----         -----/       \-----         -----  \ ---
       |T-PE1|-------|S-PE1|-------|S-PE3|-------|T-PE2|--|CE2|
 ---  / -----\        -----\        -----        /-----    ---
|CE1|<        -------   |   -------   |         /
 ---  \ -----        \-----        \-----      /
       |T-PE3|-------|S-PE2|-------|S-PE4|-----
        -----         -----         -----

Рисунок 27. Топология с многосегментными проводами по разным путям.

На рисунке 27 показано ка можно объединить услуги из двух предыдущих параграфов для предоставления сквозной услуги с разными путями в многосегментной среде. Для обеспечения вквозной отказоустойчивости нужна два полностью разные многосегментные провода.

Как при любом расчёте разных путей, первый путь выбирается с учётом необходимости второго, полностью иного пути. Если применить последовательный расчёт к топологии рисунка 27, первый путь CE1,T-PE1,S-PE1,S-PE3,T-PE2,CE2 сделает невозможным расчёт полностью отличающегося второго пути. Проблема усложняется многоуровневой природой пути. Выбора разных PE недостаточно, поскольку туннели LSP между ними могут совместно использовать каналы сети MPLS. По этому для обеспечения желаемого уровня сервиса требуется многоуровневое планирование.

3.6.4. Защита сегментов псевдопровода

Альтернативой услуге сквозной защиты псевдопровода, обеспечиваемой механизмом, описанным в параграфе 3.6.3, может быть защита отдельных сегментов псевдопровода или PE. Например, псевдопровод между S-PE1 и S-PE5 на рисунке 27 можно защитить парой сшитых сегментов S-PE1 — S-PE5 и S-PE5 — S-PE3, как показано на рисунке 28.

          -------              -------              -------
         | S-PE1 |    LSP1    | S-PE5 |    LSP3    | S-PE3 |
         |       |============|       |============|       |
         |   .........PW1..................PW3..........   | Выходной
Входной  |  :    |============|       |============|    :  | сегмент
сегмент  |  :    |             -------             |    :..........
 ...........:    |                                 |    :  |
         |  :    |                                 |    :  |
         |  :    |=================================|    :  |
         |   .........PW2...............................   |
         |       |=================================|       |
         |       |    LSP2                         |       |
          -------                                   -------

Рисунок 28. Фрагмент многосегментного псевдопровода с защитой сегмента.

Определение сегментов для защиты псевдопроводов требует координации и планирования и, как указано в параграфе 3.6.5,это планирование должно учитывать пути, обеспечиваемые LSP через базовые сети MPLS.

3.6.5. Применимость ABNO для псевдопроводов

Архитектура ABNO хорошо подходит для планирования и управления псевдопроводами в описанных выше вариантах применения. Пользователю или приложению нужна едина точка для запроса услуг — контроллер ABNO. Контроллер может запросить у PCE топологию поддерживающих сшивку псевдопроводов PE, а также дополнительные сведения о возможностях PE, такие как нагрузка на них и административные правила, способность PCE использовать несколько TED или других PCE в базовых сетях MPLS для определения путей туннелей LSP. На момент создания этого документа протокол PCEP не поддерживал запросы и откллики расчёта путей, связанные с псевдопроводами, но общие концепции этого очень похожи не уже используемые и значительного расширения не потребуется.

После расчёта путей можно использовать разные системы обеспечения для организации LSP и предоставления псевдопроводов под контролем диспетчера обеспечения. Контроллер ABNO с помощью клиента I2RS будет инструктировать сетевые устройства в части размещения трафика в псевдопроводах и в сочетании с обработчиком OAM будет обеспечивать корректную обработку отказов, надлежащее качество обслуживания и уровень защиты.

Во многих случаях сеть псевдопроводов образует наложенную сеть (со своей базой TED и механизмами обеспечения) на основе базовых пакетных сетей, предоставляя возможность передачи для сетей клиентов (данные псевдопроводов). Таким образом, пространство задачи, решаемой ABNO в этом случае представляет классическую многоуровневую сеть.

3.7. Межслойная оптимизация (CSO)

Если рассматривать термин «слой» (stratum) как широкое разделение уровней, наиболее важных для приложения и сети в целом, необходимость межслойной оптимизации (Cross-Stratum Optimization или CSO) возникает, когда нужно координировать страты приложений и сети для эффективной работы и оптимизации ресурсов в обоих слоях.

Приложения в ЦОД могут предоставлять широкий набор услуг, таких как видеоигры, облачные вычисления и grid-приложения. Появляются также широкополосные видео-приложения, такие как удалённая хирургия, живые концерты и спортивные события.

Этот вариант применения архитектуры ABNO связан в основном с приложениями для ЦОД, предъявляющими высокие требования к пропускной способности в агрегате и индивидуально. Кроме того, этим приложениям могут требоваться особые ограничения на параметры, связанные с QoS, такие как задержки и их вариации.

3.7.1. Работа ЦОД

Центры оьработки данных (ЦОД) имеют разные размеры и конфигурации, но все они содержат вычислительные серверы, хранилища и средства управления приложениями. ЦОД предоставляют конечным пользователям прикладные услуги, такие как видеоигры, облачные вычисления и т. п. Поскольку ЦОД, используемые для предоставления прикладных услуг, могут быть распределены в сети, решения о контроле и управлении прикладными услугами, например, при создании нового экземпляра услуги или выборе ЦОД для клиента, могут существенно влиять на состояние сети, а возможности и состояние сети могут существенно влиять на производительность приложений. Эти решения обычно принимаются приложениями, у которых очень мало или нет совсем сведений о базовой сети. В результате решения могут быть неоптимальными с точки зрения приложений или в части использования ресурсов сети и качества обслуживания.

Процесс CSO оптимизирует работу приложений и загрузку (использование) сети за счёт координации решений в слоях приложений и сети. Ресурсы приложений можно условно разделить на вычислительные ресурсы (серверы разных типов, виртуальные машины, память и хранилища) и содержимое (видео, аудио, базы данных, большие наборы данных). Под сетевым слоем понимается уровень IP и нижележащие уровни (MPLS, SDH, OTN, WDM). Ресурсы сетевого слоя включают маршрутизаторы, коммутаторы и каналы. Очень важно раскрыть потенциаль плоскостей управления MPLS и GMPLS на нижних сетевых уровнях для удовлетворения значительных агрегатных и индивидуальных потребностей прикладного уровня.

Этот пример показывает, что архитектура ABNO поддерживает межслойную (приложения-сеть) оптимизацию для ЦОД. Другие формы CSO (например, для одноранговых приложений) здесь не рассматриваются.

3.7.1.1. Перенос виртуальных машин

Ключевым фактором снижения затрат на ЦОД, консолидацию, гибкость и масштабируемость приложений стала технология виртуализации высислений за счёт применения виртуальных машин (Virtual Machine или VM). Для программного приложения VM выглядит как выделенный процессор со своей памятью и операционной системой. VM не только предоставляют блок вычислительных возможностей, но и обеспечивают среду приложений, которую можно реплицировать, резервировать и перености. Могут предлагаться разные конфигурации VM, оптимизированные для различных типов обработки (например, с большим объёмом памяти или высокой пропускной способностью). VM можно перемещать между вычислительными ресурсами в одном или разных ЦОД. Перенос VM служит для распределения нагрузки между ресурсами ЦОД и может выполняться в нескольких режимах.

  1. Плановый или динамический перенос.

  2. Массовый или последовательный перенос.

  3. Перенос между парой точек (point-to-point) или между точкой и несколькими точками (point-to-multipoint).

Перенос VM может решать задачи распределения нагрузки или планового обслуживания в ЦОД, а также эффективно снижать нагрузку на сеть вокруг ЦОД. Однако процесс переноса VM, особенно между ЦОД, может оказывать существенное влияние на сеть и предоставляемые услуги.

Для некоторых ситуаций, таких как восстановление при аварии, может потребоваться массовый перенос «на лету», который может потребовать одновременного расчёта и динамической организации путей.

Операции прикладного слоя должны учитывать ситуацию в сетевом слое, даже когда действия в сетевом слое определяются состоянием сетевого слоя.

3.7.1.2. Распределение нагрузки

Серверы приложений могут размещаться во многих ЦОД в разных частях сети. При запросе конечного пользователя к приложению нужно принять решение о выборе ЦОД, где следует разместить обработку и хранение данных для выполнения запроса. Одним из основных факторов работы приложений в нескольких ЦОД (вместо одного крупного центра) является желание организовать работу приложения на машине, расположенной как можно ближе к конечному пользователю, что обеспечивает повышение качества обслуживания за счёт сокращения задержек в сети. Однако при перегрузке в сти или ЦОД это может давать обратный эффект.

Таким образом, ключевыми факторами выбора сервера при организации VM для приложения являются:

  • загрузка серверов в ЦОД;

  • загрузка сети в ЦОД;

  • загрузка сетей между ЦОД;

  • условия в сети между конечным пользователем и ЦОД.

При выборе в слое приложений требуется учитывать ситуацию в сетевом слое.

3.7.2. Применение архитектуры ABNO

+------------+    +---------------------------------+
|Пользователь|--->|  Координатор прикладных служб   |
+------------+    +---------------------------------+
      |                          |
      |                          v
      |                 +-----------------+
      |                 | Контроллер ABNO |
      |                 +-----------------+
      |                          |
      |                          v
      |              +----------------------+       +--------------+
      |              |Другие компоненты ABNO|       | o o o   DC 1 |
      |              +----------------------+       |  \|/         |
      |                          |            ------|---O          |
      |                          v           |      |              |
      |            --------------------------|--    +--------------+
      |           / Сеть оператора       PE1 |  \
      |          /      .....................O   \   +--------------+
      |         |      .                          |  | o o o   DC 2 |
      |         | PE4 .                      PE2  |  |  \|/         |
       ---------|----O........................O---|--|---O          |
                |     .                           |  |              |
                |      .                    PE3   |  +--------------+
                 \      .....................O   /
                  \                          |  /   +--------------+
                   --------------------------|--    | o o o   DC 3 |
                                             |      |  \|/         |
                                              ------|---O          |
                                                    |              |
                                                    +--------------+

Рисунок 29. Архитектура ABNO в контексте кросс-стратовой оптимизации для ЦОД.

В этом параграфе показано, как можно применить архитектуру ABNO при решении задач межслойного взаимодействия в ЦОД, отмеченных в параграфе 3.7.1.

На рисунке 29 схематически показан пример приложения на основе ЦОД. Сеть оператора обеспечивает доступ конечных пользователей через PE4. Доступ в трём ЦОД (DC1, DC2, DC3) осуществляется по зазным путям через PE1, PE2 и PE3.

Координатор прикладных служб получает от конечного пользователя сведения о желаемых услугах и преобразует их в запрос сервиса, который он передаёт контроллеру ABNO. Конечные пользователи могут уже знать, с каким ЦОД они хотят работать, или координатор прикладных служб можут определить такой ЦОД. В ином случае задачу выбора ЦОД должен рашать контроллер ABNO и он может для этого использовать дополнительную базу данных (см. 2.3.1.8) со сведениями о загрузке серверов и другими параметрами ЦОД.

Контроллер ABNO проверяет ресурсы сети, используя сведения от других компонентов ABNO и применяя эти компоненты при настройке сети для удовлетворения потребностей конечных пользователей.

3.7.2.1. Внедрённые приложения, службы и продукция

Контроллер ABNO должен использовать ряд компонентов для реализации функций CSO, описанных в параграфе 3.7.1.

Сервер ALTO предоставляет сведения о топологической близости и подходящем географиеческом местоположении серверов по отношению к базовым сетям. Эти сведения могут применяться для оптимизации выбора партнёра, помогающей сократить путь трафика IP, или указания сети конкретного сервис-провайдера. ALTO в сочетании с контроллером ABNO и координатором прикладных служб могут решать общие проблемы, такие как выбор серверов приложений на основе доступности ресурсов и использования базовых сетей.

Контроллер ABNO может также формировать представление о текущей нагрузке в сети по сведениям из TED или от обработчика OAM (fнапример, путём запуска диагностических инструментов для измерения потерь, задержки и её вариаций). Это представление влияет, очевидно, на предоставление путей от конечных пользователей к ЦОД, а также на выбор ЦОД для предоставления услуг и, возможно, точек присоединения конечных пользователей к выбранному ЦОД. Представление об использовании PCE в CSO приведено в [CSO-PCE] (см. рисунок 29).

Как уже отмечено, комбинация контроллера ABNO и координатора прикладных служб должна быть способна выбирать (возможно, и переносить) местоположение VM для предоставления услуг конечному пользователю. Поскольку для направления конечного пользователя к нужному серверу (VM) пременяется перенаправление DNS, важна способность контроллера ABNO помогать должным образом программировать серверы DNS.

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

3.8. Сервер ALTO

Архитектура ABNO поддерживает совместную оптимизацию на сетевом и прикладном уровне. В таких случаях приложению представляется абстрактная топология сети, содержащая лишь сведения, относящиеся к нему. Приложение рассчитывает маршрутизацию прикладного уровня в соответствии со своими задачами и может взаимодействовать с контроллером ABNO для организации явных LSP, поддерживающих эту маршрутизацию.

Ниже указаны проиллюстрированы этапы действий, выполняемых в этом варианте применения.

  1. Запрос приложением топологии прикладного уровня.

        +----+       L0 Wt=10 BW=50       +----+
        | N0 |............................| N3 |
        +----+                            +----+
          |   \    L4                        |
          |    \   Wt=7                      |
          |     \  BW=40                     |
          |      \                           |
    L1    |       +----+                     |
    Wt=10 |       | N4 |               L2    |
    BW=45 |       +----+               Wt=12 |
          |      /                     BW=30 |
          |     /  L5                        |
          |    /   Wt=10                     |
          |   /    BW=45                     |
        +----+                            +----+
        | N1 |............................| N2 |
        +----+       L3 Wt=15 BW=35       +----+

    Рисунок 30. Необработанная топология сети.

    На рисунке 30 показана сеть из 5 узлов и 6 каналов. Приложение с конечными точками в узлах N0, N1, N2 заправшивает топологию сети для расчёта маршрутов на прикладном уровне, например, для максимизации пропускной способности при репликации содержимого между конечными точками на трёх сайтах. Запрос приходит на контроллер ABNO, который пересылает его серверу ALTO. Сервер ALTO обращается к агенту правил, TED и PCE для возврата абстрактной топологии прикладного уровня.

    Например, политика может задавать предоставление приложению пропускной способности не выше 40 Мбит/с. Сеть предварительно определила, что маршруту от N0 к N2 следует использовать путь N0->N3->N2 в соответствии с такими целями, как GCO (см. параграф 3.4). Сервер ALTO может создать для приложения сокращённую топологию, например, показанную на рисунке 31.

        +----+
        | N0 |............
        +----+            \
          |   \            \
          |    \            \
          |     \            \
          |      |            \   AL0M2
    L1    |      | AL4M5       \  Wt=22
    Wt=10 |      | Wt=17        \ BW=30
    BW=40 |      | BW=40         \
          |      |                \
          |     /                  \
          |    /                    \
          |   /                      \
        +----+                        +----+
        | N1 |........................| N2 |
        +----+   L3 Wt=15 BW=35       +----+

    Рисунок 31. Сокращённый граф для конкретного приложения.

    Сервер ALTO использует топологию и имеющиеся маршруты для расчёта абстрактной карты сети, сосотоящей из трёх PID. Попарная пропускная способность, а также общие узкие места в сети могут быть вычислены по топологии внутренней сети и отражены в картах стоимости.

  2. Расчёт приложением наложенной сети.

    На основе абстрактной топологии приложение рассчитывает маршрутизацию на прикладном уровне. Приложение может рассчитать связующее дерево (spanning tree) для максимизации общей пропускной способности от N0 к N2. На рисунке 32 показан пример маршрутизации прикладного уровня с использованием путей N0->N1->N2 (35 Мбит/с) и N0->N2 (30 Мбит/с), что даёт в результате 65 Мбит/с.

  3. +----+
    | N0 |----------------------------------+
    +----+        AL0M2 BW=30               |
      |                                     |
      |                                     |
      |                                     |
      |                                     |
      | L1                                  |
      |                                     |
      | BW=35                               |
      |                                     |
      |                                     |
      |                                     |
      V                                     V
    +----+        L3 BW=35                +----+
    | N1 |...............................>| N2 |
    +----+                                +----+

    Рисунок 32. Связующее дерево прикладного уровня.

    Организация контроллером ABNO путей для приложения.

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

3.9. Другие возможные варианты применения

В этом параграфе указаны другие возможные варианты применения, которые могут быть описаны в будущем.

3.9.1. Обслуживание трафика

Этот вариант может включать несколько сценарией:

  • вложенные LSP;

  • классификация пакетов (потоки IP в LSP на граничных маршрутизаторах);

  • «наполнение ведра» (Bucket Stuffing);

  • потоки IP в «хеш-ведро» ECMP (Hash Bucket).

3.9.2. Планирование пропускной способности

Планирование пропускной способности заключается в настроке LSP на основе заданного расписания. Это может служить для поддержки графиков технического обслуживания и эксплуатации для регулировки пропускной способности сети на основе наблюдаемой картины трафика. Схема ABNO предоставляет компоненты для решения задач планирования пропускной способности.

4. Живучесть и резервирование в рамках архитектуры ABNO

Архитектура ABNO представлена в этом документе как функциональные блоки, каждый из которых реализуется отдельно или в связке с другими блоками как единая программа или продукция. Кроме того, каждый реализованный блок или набор блоков может размещаться на обдельном устройстве (например, сетевом сервере) или виртуальной машине (например, в ЦОД), а также возможно развёртывание группы программ на одном процессоре. С точки зрения архитектурной модели эти варианты реализации и внедрения не различаются.

Аналогично, реализация функционального компонента архитектуры ABNO может обеспечиваться не одним экземпляром или разными экземплярами разных реализаций, обеспечивающими одну или похожие функции. например, компонент PCE может иметь несколько реализаций для распределенной обработки большого числа расчётных запросов и в разнах экземплярах могут применться различные алгоритмы, чтобы один экземпляр мог обеспечивать расчёт развязанных (параллельных) путей, в другой — оптимальных путей к группе получателей (point-to-multipoint).

Возможность иметь несколько экземпляров компонентов ABNO обеспечивает отказоустойчивость модели, когда при отказе одного экземпляра отдельного компонента (в результате программного или аппаратного сбоя или проблем связности) его работу принимают на себя другие экземпляры. В некоторых случаях может потребоваться синхронизация между экземплярами компонентов для обеспечения бесперебойно отказоустойчивости.

Вопросы обеспечения таких свойств реализаций ABNO выходят за рамки этого документа.

5. Вопросы безопасности

Архитектура ABNO описывает сетевую систему и безопасность должна играть важную роль. Прежде всего, нужно обеспечить надлежащую защиту внешних протоколов (входы и выходы блока, показанного точками на рисунке 1). Это включает проверку подлинности и полномочий при контроле доступа к различным функциям, выполняемым системой ABNO для поддержки различных правил на основе идентификации и для управления сетевыми устройствами. Во-вторых, внутренние протоколы, используемые между компонентами ABNO, также должны иметь надлежащую защиту, особенно при реализации этих компонентов на разных узлах сети.

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

Всем протоколам, применяемым для реализации архитектуры ABNO, следует иметь развитые средства защиты.

6. Вопросы управляемости

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

Система ABNO сама нуждается в мониторинге и управлении, которые можно разделить на несколько категорий.

  • Управление внешними протоколами.

  • Управление внутренними протоколами.

  • Мониторинг компонентов ABNO и управление ими.

  • Настройка правил, применяемых в системе ABNO.

7. Литература

[BGP-LS] Gredler, H., Medved, J., Previdi, S., Farrel, A., and S. Ray, «North-Bound Distribution of Link-State and TE Information using BGP», Work in Progress4, draft-ietf-idr-ls-distribution-10, January 2015.

[CSO-PCE] Dhody, D., Lee, Y., Contreras, LM., Gonzalez de Dios, O., and N. Ciulli, «Cross Stratum Optimization enabled Path Computation», Work in Progress, draft-dhody-pce-cso-enabled-path-computation-07, January 2015.

[EON] Gerstel, O., Jinno, M., Lord, A., and S.J.B. Yoo, «Elastic optical networking: a new dawn for the optical layer?», IEEE Communications Magazine, Volume 50, Issue 2, ISSN 0163-6804, February 2012.

[Flood] Project Floodlight, «Floodlight REST API», <http://www.projectfloodlight.org>.

[G.694.1] ITU-T Recommendation G.694.1, «Spectral grids for WDM applications: DWDM frequency grid», February 2012.

[G.709] ITU-T Recommendation G.709, «Interface for the optical transport network», February 2012.

[I2RS-Arch] Atlas, A., Halpern, J., Hares, S., Ward, D., and T. Nadeau, «An Architecture for the Interface to the Routing System», Work in Progress5, draft-ietf-i2rs-architecture-09, March 2015.

[I2RS-PS] Atlas, A., Ed., Nadeau, T., Ed., and D. Ward, «Interface to the Routing System Problem Statement», Work in Progress6, draft-ietf-i2rs-problem-statement-06, January 2015.

[ONF] Open Networking Foundation, «OpenFlow Switch Specification Version 1.4.0 (Wire Protocol 0x05)», October 2013.

[PCE-Init-LSP] Crabbe, E., Minei, I., Sivabalan, S., and R. Varga, «PCEP Extensions for PCE-initiated LSP Setup in a Stateful PCE Model», Work in Progress7, draft-ietf-pce-pce-initiated-lsp-03, March 2015.

[RESTCONF] Bierman, A., Bjorklund, M., and K. Watsen, «RESTCONF Protocol», Work in Progress8, draft-ietf-netconf-restconf-04, January 2015.

[RFC2748] Durham, D., Ed., Boyle, J., Cohen, R., Herzog, S., Rajan, R., and A. Sastry, «The COPS (Common Open Policy Service) Protocol», RFC 2748, January 2000, <http://www.rfc-editor.org/info/rfc2748>.

[RFC2753] Yavatkar, R., Pendarakis, D., and R. Guerin, «A Framework for Policy-based Admission Control», RFC 2753, January 2000, <http://www.rfc-editor.org/info/rfc2753>.

[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, «RSVP-TE: Extensions to RSVP for LSP Tunnels», RFC 3209, December 2001, <http://www.rfc-editor.org/info/rfc3209>.

[RFC3292] Doria, A., Hellstrand, F., Sundell, K., and T. Worster, «General Switch Management Protocol (GSMP) V3», RFC 3292, June 2002, <http://www.rfc-editor.org/info/rfc3292>.

[RFC3412] Case, J., Harrington, D., Presuhn, R., and B. Wijnen, «Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3412, December 2002, <http://www.rfc-editor.org/info/rfc3412>.

[RFC3473] Berger, L., Ed., «Generalized Multi-Protocol Label Switching (GMPLS) Signaling Resource ReserVation Protocol-Traffic Engineering (RSVP-TE) Extensions», RFC 3473, January 2003, <http://www.rfc-editor.org/info/rfc3473>.

[RFC3630] Katz, D., Kompella, K., and D. Yeung, «Traffic Engineering (TE) Extensions to OSPF Version 2», RFC 3630, September 2003, <http://www.rfc-editor.org/info/rfc3630>.

[RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, «Forwarding and Control Element Separation (ForCES) Framework», RFC 3746, April 2004, <http://www.rfc-editor.org/info/rfc3746>.

[RFC3985] Bryant, S., Ed., and P. Pate, Ed., «Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture», RFC 3985, March 2005, <http://www.rfc-editor.org/info/rfc3985>.

[RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, «A Path Computation Element (PCE)-Based Architecture», RFC 4655, August 2006, <http://www.rfc-editor.org/info/rfc4655>.

[RFC5150] Ayyangar, A., Kompella, K., Vasseur, JP., and A. Farrel, «Label Switched Path Stitching with Generalized Multiprotocol Label Switching Traffic Engineering (GMPLS TE)», RFC 5150, February 2008, <http://www.rfc-editor.org/info/rfc5150>.

[RFC5212] Shiomoto, K., Papadimitriou, D., Le Roux, JL., Vigoureux, M., and D. Brungard, «Requirements for GMPLS-Based Multi-Region and Multi-Layer Networks (MRN/MLN)», RFC 5212, July 2008, <http://www.rfc-editor.org/info/rfc5212>.

[RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., «Requirements for Multi-Segment Pseudowire Emulation Edge-to-Edge (PWE3)», RFC 5254, October 2008, <http://www.rfc-editor.org/info/rfc5254>.

[RFC5277] Chisholm, S. and H. Trevino, «NETCONF Event Notifications», RFC 5277, July 2008, <http://www.rfc-editor.org/info/rfc5277>.

[RFC5305] Li, T. and H. Smit, «IS-IS Extensions for Traffic Engineering», RFC 5305, October 2008, <http://www.rfc-editor.org/info/rfc5305>.

[RFC5394] Bryskin, I., Papadimitriou, D., Berger, L., and J. Ash, «Policy-Enabled Path Computation Framework», RFC 5394, December 2008, <http://www.rfc-editor.org/info/rfc5394>.

[RFC5424] Gerhards, R., «The Syslog Protocol», RFC 5424, March 2009, <http://www.rfc-editor.org/info/rfc5424>.

[RFC5440] Vasseur, JP., Ed., and JL. Le Roux, Ed., «Path Computation Element (PCE) Communication Protocol (PCEP)», RFC 5440, March 2009, <http://www.rfc-editor.org/info/rfc5440>.

[RFC5520] Bradford, R., Ed., Vasseur, JP., and A. Farrel, «Preserving Topology Confidentiality in Inter-Domain Path Computation Using a Path-Key-Based Mechanism», RFC 5520, April 2009, <http://www.rfc-editor.org/info/rfc5520>.

[RFC5557] Lee, Y., Le Roux, JL., King, D., and E. Oki, «Path Computation Element Communication Protocol (PCEP) Requirements and Protocol Extensions in Support of Global Concurrent Optimization», RFC 5557, July 2009, <http://www.rfc-editor.org/info/rfc5557>.

[RFC5623] Oki, E., Takeda, T., Le Roux, JL., and A. Farrel, «Framework for PCE-Based Inter-Layer MPLS and GMPLS Traffic Engineering», RFC 5623, September 2009, <http://www.rfc-editor.org/info/rfc5623>.

[RFC5693] Seedorf, J. and E. Burger, «Application-Layer Traffic Optimization (ALTO) Problem Statement», RFC 5693, October 2009, <http://www.rfc-editor.org/info/rfc5693>.

[RFC5810] Doria, A., Ed., Hadi Salim, J., Ed., Haas, R., Ed., Khosravi, H., Ed., Wang, W., Ed., Dong, L., Gopal, R., and J. Halpern, «Forwarding and Control Element Separation (ForCES) Protocol Specification», RFC 5810, March 2010, <http://www.rfc-editor.org/info/rfc5810>.

[RFC6007] Nishioka, I. and D. King, «Use of the Synchronization VECtor (SVEC) List for Synchronized Dependent Path Computations», RFC 6007, September 2010, <http://www.rfc-editor.org/info/rfc6007>.

[RFC6020] Bjorklund, M., Ed., «YANG — A Data Modeling Language for the Network Configuration Protocol (NETCONF)», RFC 6020, October 2010, <http://www.rfc-editor.org/info/rfc6020>.

[RFC6107] Shiomoto, K., Ed., and A. Farrel, Ed., «Procedures for Dynamically Signaled Hierarchical Label Switched Paths», RFC 6107, February 2011, <http://www.rfc-editor.org/info/rfc6107>.

[RFC6120] Saint-Andre, P., «Extensible Messaging and Presence Protocol (XMPP): Core», RFC 6120, March 2011, <http://www.rfc-editor.org/info/rfc6120>.

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., «Network Configuration Protocol (NETCONF)», RFC 6241, June 2011, <http://www.rfc-editor.org/info/rfc6241>.

[RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, «Content Distribution Network Interconnection (CDNI) Problem Statement», RFC 6707, September 2012, <http://www.rfc-editor.org/info/rfc6707>.

[RFC6805] King, D., Ed., and A. Farrel, Ed., «The Application of the Path Computation Element Architecture to the Determination of a Sequence of Domains in MPLS and GMPLS», RFC 6805, November 2012, <http://www.rfc-editor.org/info/rfc6805>.

[RFC7011] Claise, B., Ed., Trammell, B., Ed., and P. Aitken, «Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information», STD 77, RFC 7011, September 2013, <http://www.rfc-editor.org/info/rfc7011>.

[RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., Previdi, S., Roome, W., Shalunov, S., and R. Woundy, «Application-Layer Traffic Optimization (ALTO) Protocol», RFC 7285, September 2014, <http://www.rfc-editor.org/info/rfc7285>.

[RFC7297] Boucadair, M., Jacquenet, C., and N. Wang, «IP Connectivity Provisioning Profile (CPP)», RFC 7297, July 2014, <http://www.rfc-editor.org/info/rfc7297>.

[Stateful-PCE] Crabbe, E., Minei, I., Medved, J., and R. Varga, «PCEP Extensions for Stateful PCE», Work in Progress9, draft-ietf-pce-stateful-pce-10, October 2014.

[TL1] Telcorida, «Operations Application Messages — Language For Operations Application Messages», GR-831, November 1996.

[TMF-MTOSI] TeleManagement Forum, «Multi-Technology Operations Systems Interface (MTOSI)», <https://www.tmforum.org/MTOSI/2319/home.html>.

[YANG-Rtg] Lhotka, L. and A. Lindem, «A YANG Data Model for Routing Management», Work in Progress10, draft-ietf-netmod-routing-cfg-17, March 2015.

Приложение A. Не определённые интерфейсы

В этом приложении кратко перечислены интерфейсы, которые ещё не были определены на момент написания документа. Интерфейсы, для которых имеется возможность выбора, не включены в список.

  • Интерфейс для добавления в TED дополнительных сведений описан в параграфе 2.3.2.3. В настоящее время для этого интерфейса протокол не определён, но есть кандидаты:

    • протокол, разработанный или адаптированный в соответствии с требованиями I2RS [I2RS-Arch];

    • NETCONF [RFC6241].

  • Протокол, используемый интерфейсом в систему маршрутизации (I2RS), описан в параграфе 2.3.2.8. Рабочая группа I2RS определила, что этот протокол будет основан на сочетании NETCONF [RFC6241] и RESTCONF [RESTCONF] с дополнениями и изменениями, которые будут сочтены необходимыми для поддержки желаемой функции. Детали протокола ещё предстоит определить.

  • Как указано в параграфе 2.3.2.10, менеджеру топологии виртуальных сетей (VNTM) нужен интерфейс, который PCE или контроллер ABNO может применять для информирования о потребности клиентского уровня в дополнительной виртуальной топологии. Возможно, что для этого подойдёт протокол, выбранный для использования с I2RS, или это можно сделать с использованием расширения сообщений PCEP Notify (PCNtf).

  • Северный интерфейс контроллера ABNO используется NMS, OSS и координатором прикладных служб для запроса услуг в сети в поддержку приложений, как описано в параграфе 2.3.2.11.

    • Возможно, для этого подойдёт протокол, выбранный в соответствии с требованиями I2RS.

    • Возможный подход к интерфейсу этого типа описан в [RFC7297] для простого варианта применения.

  • Как указано в параграфе 2.3.2.14, возможны независимые от уровня модели данных для предоставления базовых интерфейсов управления, настройки и отчётов OAM.

  • Как отмечено в параграфе 3.6, модель ABNO подходит для включения многосегментных псевдопроводов в топологию сети, состоящей из туннелей S-PE и MPLS. Текущее определение протокола PCEP [RFC5440] и связанные с ним расширения, работа над которыми ещё не завершена, не включают всех деталей запроса таких путей, поэтому может потребоваться доработка, хотя общие концепции остаются применимыми. Такая работа может потребоваться для расширения применений PCE в различных вариантах сетей.

Благодарности

Спасибо за обсуждения и рецензии Ken Gray, Jan Medved, Nitin Bahadur, Diego Caviglia, Joel Halpern, Brian Field, Ori Gerstel, Daniele Ceccarelli, Cyril Margaria, Jonathan Hardwick, Nico Wauters, Tom Taylor, Qin Wu, Luis Contreras. Спасибо George Swallow за сообщение о наличии базы данных SRLG. Tomonori Takeda и Julien Meuric предоставили ценные комментарии в рамках обзора Routing Directorate, Tina Tsou — в рамках обзора Operational Directorate.

Эта работа финансировалась по программе Евросоюза Seventh Framework по исследованию, технологической разработке и демонстрации в рамках проекта PACE по грантовому соглашению 619712 и в рамках проекта IDEALIST по грантовому соглашению 317999.

Участники работы

Quintin Zhao
Huawei Technologies
125 Nagog Technology Park
Acton, MA 01719
United States
EMail: qzhao@huawei.com
 
Victor Lopez
Telefonica I+D
EMail: vlopez@tid.es
 
Ramon Casellas
CTTC
EMail: ramon.casellas@cttc.es
 
Yuji Kamite
NTT Communications Corporation
EMail: y.kamite@ntt.com
 
Yosuke Tanaka
NTT Communications Corporation
EMail: yosuke.tanaka@ntt.com
 
Young Lee
Huawei Technologies
EMail: leeyoung@huawei.com
 
Y. Richard Yang
Yale University
EMail: yry@cs.yale.edu

Адреса авторов

Daniel King
Old Dog Consulting
EMail: daniel@olddog.co.uk
 
Adrian Farrel
Juniper Networks
EMail: adrian@olddog.co.uk

Перевод на русский язык

nmalykh@protokols.ru


1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.

3Operations, Administration, and Maintenance — операции, администрирование и поддержка.

4Опубликовано в RFC 7752. Прим. перев.

5Опубликовано в RFC 7921. Прим. перев.

6Опубликовано в RFC 7920. Прим. перев.

7Опубликовано в RFC 8281. Прим. перев.

8Опубликовано в RFC 8040. Прим. перев.

9Опубликовано в RFC 8231. Прим. перев.

10Опубликовано в RFC 8022. Прим. перев.

Рубрика: RFC | Оставить комментарий

RFC 7454 BGP Operations and Security

Internet Engineering Task Force (IETF)                 J. Durand
 Request for Comments:7454                    Cisco Systems, Inc.
 BCP: 194                                           I. Pepelnjak
 Category: Best Current Practice                             NIL
 ISSN: 2070-1721                                      G. Doering
                                                        SpaceNet
                                                   February 2015

PDF

Функционирование и безопасность BGP

BGP Operations and Security

Аннотация

Протокол BGP (Border Gateway Protocol – протокол граничного шлюзе) практически исключительно применяется в сети Internet для обмена маршрутной информацией между доменами сети. Такая роль протокола делает важным понимание мер защиты, которые можно и следует принимать для предотвращения случайных или преднамеренных нарушений картины маршрутизации.

В этом документе описаны меры защиты сессий BGP, как таковых, включая время жизни TTL (Time to Live), опцию TCP-AO (TCP Authentication Option — опция аутентификации TCP), а также фильтрацию на уровне управления. Описаны также меры по улучшению контроля потоков маршрутной информации, использование фильтрации префиксов и ее автоматизации, фильтрации max-prefix и путей AS1, подавления маршрутных осцилляций и очистке групп BGP.

Статус документа

Этот документ относится к категории обмена опытом (Internet Best Current Practice).

Документ является результатом работы IETF2 и представляет собой согласованное мнение сообщества IETF. Документ был вынесен на публичное рассмотрение и одобрен для публикации IESG3. Дополнительная информация о документах BCP представлена в разделе 2 документа RFC 5741.

Информация о текущем статусе этого документа, обнаруженных ошибках и способах обратной связи может быть найдена по ссылке http://www.rfc-editor.org/info/rfc7454.

Авторские права

Авторские права (Copyright (c) 2015) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа IETF Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

Протокол BGP, описанный в RFC 4271 [2], является протоколом Internet для обмена маршрутной информацией между доменами сети. BGP непосредственно не включает механизмов управления набором маршрутов для обмена, соответствующих рекомендациям, выработанным сообществом Internet. Задачей данного документа является сбор воедино существующих рекомендаций и помощь сетевым администраторам при создании согласованных правил BGP.

1.1. Уровни требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с RFC 2119 [1].

2. Сфера применимости документа

Рекомендации, приведенные в этом документе, рассчитаны на типовые партнерские отношения Internet BGP. Природа Internet такова, что автономные системы всегда могут согласовать между собой исключения из общей схемы для соответствующих узлов и, следовательно, настроить сессии BGP так, что параметры конфигурации будут отличаться от приведенных рекомендаций. Это допустимая (и нормальная) практика, однако каждое исключение может повлиять на всю среду междоменной маршрутизации и администраторам следует осторожно применять такие исключения.

3. Определения и сокращения

  • ACL: Access Control List — список управления доступом.

  • ASN: Autonomous System Number — номер автономной системы.

  • IRR: Internet Routing Registry — реестр маршрутизации Internet.

  • IXP: Internet Exchange Point — точка обмена трафиком Internet.

  • LIR: Local Internet Registry — локальный регистратор Internet.

  • PMTUD: Path MTU Discovery — определение MTU для пути.

  • RIR: Regional Internet Registry — региональный регистратор Internet.

  • Tier 1 transit provider — транзитный провайдер IP, способный достичь любой сети в Internet без приобретения услуг по транзиту.

  • uRPF: Unicast Reverse Path Forwarding — индивидуальная пересылка по обратному пути.

В дополнение к приведенным выше сокращениям в документе используется пара специфических терминов.

  • Downstream — любая сеть, расположенная в нисходящем4 направлении (сеть провайдера или пользователя).

  • Upstream — любая сеть, расположенная в восходящем направлении.

4. Защита узла BGP

Узлы BGP требуется защищать от попыток повреждения сессий BGP. Для обеспечения такой защиты следует пользоваться списками управления доступом (ACL), которые будут отбрасывать все пакеты, направленные в порт TCP 179 на локальном устройстве, если их отправитель не включен в число разрешенных партнеров (соседей) BGP. Опыт показывает, что естественной защиты протокола TCP в приложениях уровня управления не всегда достаточно. При отсутствии ACL возможна организация атак на узел BGP путем простой передачи ему большого числа на соединение.

Если поддерживаются списки ACL для уровня управления маршрутизатором (receive-ACL, control-plane policing, и т. п.), их также следует применять, чтобы избавиться от необходимости фильтрации на уровне данных пакетов, проходящих через маршрутизатор (и, следовательно, не попадающих на уровень управления). Если оборудование не позволяет этого, можно применять ACL на интерфейсах для блокировки пакетов, адресованных локальному маршрутизатору.

Некоторые маршрутизаторы автоматически создают ACL при настройке BGP, а на остальных устройствах такие ACL следует настраивать и поддерживать вручную или с помощью программ-сценариев (script).

В дополнение к строгой фильтрации может быть задано скоростное ограничение для допустимого трафика BGP. Ограничение трафика BGP по скорости позволяет принимать не более заданного числа битов (или пакетов) в секунду для трафика BGP на уровне управления. Это защищает уровень управления маршрутизатором от перегрузки управляющим трафиком BGP.

Фильтрация и ограничение скорости для уровня управления применяются не только для BGP (если маршрутизатор перегружен управляющим трафиком других протоколов, это может сказаться и на BGP). Более подробные рекомендации по защите уровня управления маршрутизатором приведены в RFC 6192 [11].

5. Защита сессий BGP

Современные вопросы безопасности протоколов, основанных на TCP (следовательно, и BGP) описаны в RFC 6952 [14]. В последующих параграфах рассматриваются основные вопросы, поднятые в этом RFC, и даны основанные на опыте рекомендации по защите сессий TCP, используемых в работе BGP.

5.1. Защита сессий TCP, используемых протоколом BGP

Атака на сессии TCP, используемые протоколом BGP (BGP-сессии), например, путем отправки подставных пакетов TCP RST, может разорвать связь между партнерами BGP.

После успешной атаки с подменой ARP (или аналогичной MITM-атаки5) злоумышленник даже сможет помещать свои пакеты в поток TCP (атака на маршрутизацию).

Сессии BGP можно защитить с помощью разных механизмов. Защита MD5 в заголовках сессий TCP, описанная в RFC 2385 [7], была первым из таких механизмов. Позднее взамен ее была предложена опция аутентификации TCP (TCP-AO; RFC 5925 [4]), которая обеспечивает более сильную защиту. Тем не менее, MD5 остается одним из наиболее распространенных механизмов защиты по причине ее реализации во множестве устройств. Если оборудование поддерживает TCP-AO, следует выбирать именно этом механизм.

Для защиты сеансов можно применять также IPsec. На момент публикации документа данных о влиянии применения IPsec для защиты BGP было недостаточно и требовался дополнительный анализ этого механизма.

Недостатком защиты сессий TCP является усложнение настройки и управления за счет необходимости поддержки данных аутентификации (например, паролей MD5). Защита сессий TCP, используемых BGP, не требуется даже в тех случаях, когда партнерские связи организуются через сети общего пользования, где возможно применение обманных пакетов (например, сети IXP), но операторам рекомендуется рассмотреть возможность применения защиты TCP.

Кроме того, сетевым администраторам следует блокировать обманные пакеты (те, в которых IP-адрес отправителя относится к IP-пространству данной сети) на всем периметре своей сети (см. RFC 2827 [8] и RFC 3704 [9]). Это защитит сессии TCP, используемые Internal BGP (IBGP), от атак, исходящих из других AS.

5.2. Защита BGP TTL (GTSM)

Стойкость сессий BGP к обманным пакетам можно усилить с помощью механизмов GTSM6 (TTL security), определенных в RFC 5082 [3]. Вместо передачи пакетов TCP с TTL = 1 узлы BGP в этом случае передают пакеты TCP с TTL = 255, а получатель проверяет значения полей TTL (255). Поскольку передать пакеты IP с TTL = 255 хосту IP, с которым нет непосредственного соединения, механизм защиты BGP TTL эффективно предотвращает атаки с обманными пакетами, исходящие от хостов без прямого подключения к подсети, в которой располагается узел BGP. Сетевым администраторам следует реализовать механизм защиты TTL для соединенных напрямую партнеров BGP.

Механизм GTSM можно применить и для защиты партнеров BGP, не имеющих непосредственного соединения. Для решения этой задачи следует выбрать значение TTL с учетом удаленности партнера BGP (используя описанный выше принцип). В этом случае эффективность защиты снижается, поскольку атаки с обманными пакетами из области диаметра TTL предотвратить не удастся.

Подобно MD5, защита TTL настраивается для обеих сторон соединения BGP.

6. Фильтрация префиксов

Основным аспектом защиты BGP является контроль префиксов, которые принимаются и анонсируются партнерами BGP. Префиксы, которыми обмениваются партнеры BGP, контролируются с помощью входных и выходных фильтров, которые могут проверять соответствие префиксов IP (как описано в этом разделе), AS path (см. раздел 9) или иных атрибутов BGP (например групп BGP, как описано в разделе 11).

6.1. Определение фильтра префиксов

В этом параграфе перечислены наиболее широко используемые фильтры префиксов. В последующих параграфах разъясняется применение этих фильтров.

6.1.1. Особые префиксы

6.1.1.1. Особые префиксы IPv4

Реестр особых префиксов IANA IPv4 Special-Purpose Address Registry [23] содержит список префиксов IPv4 специального назначения, который следует использовать при настройке фильтра префиксов. Префиксы, для которых в колонке Global указано значение False, следует отбрасывать в сессиях Internet BGP.

6.1.1.2. Особые префиксы IPv6

Реестр особых префиксов IANA IPv6 Special-Purpose Address Registry [24] содержит список префиксов IPv6 специального назначения, который следует использовать при настройке фильтра префиксов. Префиксы, для которых в колонке Global указано значение False, следует отбрасывать в сессиях Internet BGP.

6.1.2. Невыделенные префиксы

IANA выделяет префиксы региональным регистраторам (RIR), которые, в свою очередь, выделяют префиксы локальным регистраторам (LIR). Имеет смысл не принимать префиксы сетей, которые не были выделены IANA и/или RIR. В этом параграфе описаны опции создания списка выделенных префиксов для каждого уровня. Важно понимать, что фильтры нераспределенных префиксов требуется постоянно обновлять, поскольку происходит выделение новых префиксов. Следовательно, автоматизация обновления фильтров префиксов является залогом успешной фильтрации. Сетевым администраторам не следует рассматривать описанные здесь решения, если они не имеют возможности обновлять фильтры префиксов, поскольку использование устаревших может приносить больше вреда, чем пользы.

6.1.2.1. Фильтры выделенных IANA префиксов

Агентство IANA распределило все доступное пространство адресов IPv4. Следовательно, сетевым администраторам больше не требуется проверка получаемых от партнеров BGP префиксов на предмет соответствия распределенному IANA адресному пространству IPv4 [25]. Администраторам уже не нужны какие-либо фильтры для проверки того, что префиксы IPv4, получаемые в обновлениях BGP, были выделены IANA.

Для IPv6 с учетом размеров адресного пространства представляется разумным принимать лишь те префиксы, которые уже распределены IANA. Администраторы могут создавать динамические списки на базе распределенного IANA адресного пространства IPv6 [26]. Поскольку IANA продолжает выделять префиксы для RIR, следует регулярно проверять упомянутый выше список на предмет выделения новых блоков и вносить соответствующие изменения в фильтры префиксов на сетевых устройствах. Некоторые маршрутизаторы способны самостоятельно «затягивать» списки распределенных адресных блоков. Между выделением региональному регистратору (RIR) блока адресов и началом реального использования адресов из этого блока локальными регистраторами (LIR) и их клиентами обычно проходит некоторое время, поэтому проверка списка выделенных блоков может выполняться достаточно редко. Однако администраторам следует обновлять фильтры префиксов IPv6 с задержкой не более месяца после выделения нового префикса агентством IANA.

Если используемый процесс (ручной или автоматизированный) не обеспечивает гарантий регулярного обновления фильтров, разумно совсем отказаться от применения таких фильтров. Опыт IPv4 показывает, что многие операторы реализовали фильтры выделенных IANA префиксов, но не обновляли их с требуемой регулярностью. Это создавало проблемы и требовало от RIR дополнительной работы по «дебогонизации» (de-bogonize) недавно выделенных префиксов (дебогонизация описана в документе [18]).

6.1.2.2. Фильтры выделенных RIR префиксов

Более точная проверка может быть выполнена в тех случаях, когда нужно убедиться в том, что полученные префиксы порождены или переданы транзитом автономными системами (AS), уполномоченными на это. Ранее было отмечено, что AS могут анонсировать чужие (или более специфичные) префиксы, а также порождать «черные дыры» или угрозы безопасности. Для снижения таких рисков администраторам нужна уверенность в том, что анонсы BGP соответствуют информации, хранящейся в реестрах. Здесь следует рассмотреть два варианта — краткосрочный и долгосрочный, которые будут описаны ниже.

6.1.2.2.1. Фильтры префиксов, созданные по реестрам IRR

Реестр маршрутизации Internet (IRR7) — база данных, содержащая маршрутную информацию Internet, описанную с использованием объектов языка RPSL8 (RFC 4012 [10]). Сетевым администраторам предоставлено право описывать политику маршрутизации своих сетей в IRR и эта информация публикуется (обычно в открытом доступе). Большинство RIR также поддерживают IRR и могут контролировать соответствие зарегистрированных маршрутов выделенным или напрямую присвоенным префиксам. Однако следует отметить, что список таких префиксов не обязательно будет полным и список маршрутов в IRR не будет совпадать с набором выделенных RIR префиксов.

Можно воспользоваться информацией IRR для создания списка исходящих и транзитных префиксов, которые можно принимать от данной соседней AS. Это можно сравнительно просто выполнить с помощью программных сценариев (script) и имеющихся инструментов, которые способны извлечь нужные данные их реестра. Модель одинаково применима к протоколам IPv4 и IPv6.

Макроалгоритм для сценария описан ниже. Для рассматриваемого партнера его администратор предоставляет номер AS и может также представить объект AS-SET (AS-MACRO). AS-SET представляет собой объект содержащий номера AS или другие объекты AS-SET. Оператор может создать AS-SET, указав номера AS всех своих клиентов. Транзитный провайдер Tier 1 может создать объект AS-SET, описывающий объекты AS-SET подключенных к нему операторов, которые, в свою очередь, указывают номера AS своих клиентов. С помощью рекурсии можно определить из AS-SET полный список номеров AS, которые партнер будет анонсировать. Каждый из этих номеров AS также можно без сложностей найти в соответствующей IRR для всех связанных с ними префиксов. С помощью двух описанных механизмов можно создать для данного партнера сценарий, который построит список допустимых префиксов и номеров AS, исходящих от данного партнера. Можно также отказаться от использования данных о происхождении префиксов и создать на основе полученных данных «монолитные» фильтры префиксов.

Как и префиксы, номера AS и AS-SET могут не находиться в сфере действия одного RIR, поэтому могут возникать сложности с выбором IRR для опроса по каждому объекту. Некоторые IRR не ограничиваются одним регионом или полномочным RIR. Это позволяет RIR публиковать информацию из своих IRR для общего пользования. Они также позволяют любому абоненту (subscriber) возможность публикации своих данных (иногда на контрактной основе). При запросе к таким IRR можно задать источник информации, чтобы получить наиболее надежные данные. Можно проверить популярные IRR, содержащие данные из многих источников (такие, как RADb9 [27]), и выбрать в качестве источников желаемые RIR и доверенные крупные ISP (Internet Service Provider).

Поскольку объекты IRR могут меняться достаточно часто, важно регулярно обновлять фильтры префиксов, подготовленные с использованием этого механизма. Следует рассмотреть возможность ежедневного обновления фильтров, поскольку иной раз изменения маршрутов требуется проводить в чрезвычайных ситуациях, а реестры могут быть обновлены лишь в последний момент. Отметим, что этот вариант существенно усложняет конфигурации маршрутизаторов, поскольку может быстро добавлять десятки тысяч конфигурационных записей от некоторых важных партнеров. Для решения таких задач администраторы могут воспользоваться специальными инструментами типа IRRToolSet [30] (набор средств для упрощения создания автоматизированных конфигураций фильтров на основе правил, хранящихся в IRR).

Администраторам следует опубликовать и поддерживать информацию о своих ресурсах в базе IRR своего RIR, если это возможно.

6.1.2.2.2. SIDR – защищенная междоменная маршрутизация

Инфраструктура SIDR (Secure Inter-Domain Routing — защищенная междоменная маршрутизация), описанная в RFC 6480 [12], была разработана для защиты анонсов в Internet. Ко времени публикации данного документа опубликовано уже множество работ в этом направлении и предложена схема с полным набором протоколов, позволяющая проверять соответствие анонсов подписанным маршрутным объектам в RIR. Базовые услуги SIDR приведены ниже.

  • Проверка источника (Origin validation), описанная в RFC 6811 [5], позволяет убедиться в корректности связанных с маршрутом атрибутов. Основным элементом проверки является номер AS, породившей данный маршрут. Проверка источника в настоящее время уже работает (реестры Internet, протоколы, реализация в части маршрутизаторов) и теоретически может быть реализована, хотя на момент публикации этого документа число подписанных ресурсов было достаточно мало.

  • Проверка пути (Path validation) с помощью BGPsec [29] позволяет убедиться, что обманные (ошибочные) пути BGP не будут воздействовать на трафик для данного получателя (см. RFC 7132 [16]). Работа по BGPsec еще не была завершена к моменту публикации данного документа и, следовательно, проверка не может быть реализована.

Предполагается, что реализация SIDR позволит в долгосрочной перспективе решить многие проблемы безопасности в маршрутизации BGP, однако развертывание системы и накопление подписанных объектов займут продолжительное время. Следует также отметить, что инфраструктура SIDR дополняет (но не заменяет) рекомендации по безопасности, приведенные в данном документе. По этой причине администраторам следует реализовать предлагаемые SIDR механизмы (например, проверку источника) поверх существующих механизмов даже в тех случаях, когда будет казаться, что они решают одинаковые задачи.

Если реализована проверка источника, следует опираться на правила, описанные в RFC 7115 [15]. Кратко их можно сформулировать таккаждый внешний маршрут, полученный маршрутизатором, следует сравнивать с данными RPKI10:

  • если соответствующий элемент ROA11 найден и корректен, префикс следует принять;

  • если найденный элемент ROA некорректен, префикс следует отбросить;

  • если элемент ROA не найден, префикс следует принять, но соответствующему маршруту следует дать низкий уровень предпочтения.

В дополнение к этом администраторам следует подписать свои маршрутные объекты, чтобы их можно было проверить другим сетям, использующим проверку источника.

Следует понимать, что модель RPKI обеспечивает новые, интересные возможности. В статье On the Risk of Misbehaving RPKI Authorities [31] рассмотрено возможное влияние модели RPKI на Internet, если полномочные органы не будут вести себя должным образом. Для модели RPKI, как части защиты BGP, нужен дополнительный анализ.

6.1.3. Слишком специфичные префиксы

Некоторые ISP не принимают чересчур специфичные анонсы (и не анонсируют префиксов, которые могут быть слишком специфичны). Допустимый уровень специфичности определяется для каждой пары партнеров BGP. Некоторые сообщества ISP пытаются документировать требования к специфичности. В этом документе не дается оценок этому, а лишь отмечается факт наличия такой практики в Internet и рекомендуется ознакомиться с ней. В качестве примера можно отметить доступный на момент публикации документ RIPE, в соответствии с которым префиксы IPv4 длиннее /24 и префиксы IPv6 длиннее /48 в общем случае не анонсируются и не принимаются в Internet [20] [21]. В будущем указанные значения могут измениться.

6.1.4. Фильтрация префиксов, относящихся к локальной и нижележащим AS

Сетям следует фильтровать свои префиксы в партнерских связях со всеми своими соседями (входящее направление). Это предотвратит утечку локального трафика во внешние сети в тех случаях, когда кто-то другой анонсирует эти префиксы в Internet. Это также защитит инфраструктуру, которая могла бы пострадать в случае, когда префикс магистрали внезапно стал бы предпочтительней, нежели Internet.

В некоторых случаях (например, для многодомных сайтов) такие фильтры применять не следует, поскольку это может нарушать работу системы резервирования внешних соединений.

Такие же фильтры могут быть настроены для префиксов нисходящего направления, чтобы обеспечить защиту для них. Создавать подобные фильтры нужно с осторожностью, чтобы не нарушить работу системы резервирования соединений. Например, при наличии у оператора многодомного клиента оператору следует воспринимать анонсы префиксов такого клиента от своих партнеров и маршрутизаторов восходящего направления. Это позволит сохранить доступ клиента в сеть оператора (и сети других его клиентов) через Internet даже при разрыве партнерской связи BGP между клиентом и оператором.

6.1.5. Префиксы ЛВС IXP

6.1.5.1. Сетевая безопасность

При соединении IXP и партнеров с другими членами IXP через общую подсеть (префикс IXP) не следует принимать более специфичные префиксы для префикса ЛВС IXP от какого-либо из внешних партнеров BGP. Принятие таких маршрутов может приводить к возникновению «черных дыр» в связности с ЛВС IXP.

Если префикс ЛВС IXP воспринимается, как «точное соответствие» (exact match), следует принять меры по защите маршрутизаторов сети от передачи трафика IXP в направлении полученного извне префикса ЛВС IXP (рекурсивная маршрутная петля). Это можно обеспечить, установив предпочтение маршрутов IGP над маршрутами EBGP12 или за счет использования «BGP next-hop-self» на всех маршрутах, полученных от данной IXP.

Если префикс ЛВС IXP принимается, это следует делать только для AS, которые данная IXP уполномочила на анонсирование префикса (обычно это реализуется автоматически путем фильтрации анонсов с использованием базы данных IRR).

6.1.5.2. PMTUD и проблема Loose uRPF

Для того, чтобы определение MTU на пути (PMTUD) работало при наличии loose uRPF13, требуется чтобы все сети, могущие быть источником трафика, который проходит через IXP (т. е., члены IXP и их нижележащие сети), имели маршрут для префикса ЛВС IXP. Это необходимо, поскольку сообщения ICMP packet too big, передаваемые маршрутизаторами членов IXP, могут передаваться с адресов из префикса ЛВС IXP. При наличии loose uRPF эти пакеты ICMP будут отбрасываться, если нет маршрута для префикса ЛВС IXP или менее специфичного маршрута, включающего префикс IXP.

В этом случае каждому члену IXP следует быть уверенным в наличии маршрута для префикса ЛВС IXP или менее специфичного префикса на всех его маршрутизаторах и анонсировании префикса ЛВС IXP или менее специфичного маршрута (вплоть до маршрута по умолчанию) своим нисходящим партнерам. Анонсы для достижения этой цели следует пропускать через фильтры на базе IRR, описанные в параграфе 6.1.2.2.1 а также фильтры слишком специфичных адресов, описанные в параграфе 6.1.3. Самым простым способом реализации этого является реализация в самой IXP мер по генерации своего префикса и его анонсированию всем членам IXP через партнерство BGP. Скорей всего для этого будут использоваться серверы маршрутов BGP и IXP будет передавать весь префикс, который будет одинаковым или менее специфичным по отношению к префиксу ЛВС IXP.

В Приложении A приведен пример рекомендаций, касающихся префикса ЛВС IXP.

6.1.6. Маршрут по умолчанию

6.1.6.1. IPv4

Обычно префикс 0.0.0.0/0 не следует воспринимать и анонсировать в конкретной конфигурации провайдер-клиент; рекомендуется отфильтровывать такие префиксы.

6.1.6.2. IPv6

Обычно префикс ::/0 не следует воспринимать и анонсировать в конкретной конфигурации провайдер-клиент; рекомендуется отфильтровывать такие префиксы.

6.2. Рекомендации по фильтрам префиксов в сетях с полной маршрутизацией

В сетях, имеющих полную таблицу Internet BGP, следует применять некоторые правила для каждого партнера BGP в части принимаемых и анонсируемых маршрутов. Рекомендуется в каждой автономной системе задавать правила приема и анонсирования маршрутов на всех граничных точках для защиты сети и своих партнеров от конфигурационных ошибок. Наиболее распространенная политика фильтрации и применения фильтров префиксов описана в параграфе 6.1.

6.2.1. Фильтры на границе с Internet-партнерами

6.2.1.1. Входная фильтрация

Существует два основных варианта фильтрации — мягкая (loose), когда не проверяется выделение префиксов RIR, и строгая (strict) с верификацией соответствия анонсов реестрам маршрутизации.

6.2.1.1.1. Мягкая фильтрация на входе

В этом случае будут фильтроваться перечисленные ниже префиксы при их получении от партнера BGP:

  • префиксы без глобальной маршрутизации (параграф 6.1.1);

  • префиксы, не выделенные IANA (только для IPv6) (параграф 6.1.2.1);

  • слишком специфичные маршруты (параграф 6.1.3);

  • префиксы, относящиеся к локальной AS (параграф 6.1.4);

  • префиксы ЛВС IXP (параграф 6.1.5);

  • используемый по умолчанию маршрут (параграф 6.1.6).

6.2.1.1.2. Строгая фильтрация на входе

В этом случае фильтры служат для строгой проверки соответствия анонсов содержимому реестров маршрутизации (параграф 6.1.2.2). Уделяется также внимание возможным неточностям в реестрах (отсутствие префиксов, ошибочные данные и т. п.). Наличие неточностей зависит от регионов и регистров Internet. Перед применением строгой фильтрации следует проверить воздействие фильтра и на основании результатов проверки принимать решение о фильтрации, чтобы решение проблемы не нанесло большего вреда, чем сама проблема.

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

В дополнение к этому администраторы могут применить перечисленные ниже фильтры, если используемый в качестве источника данных реестр маршрутизации не вызывает достаточного доверия:

  • префиксы без глобальной маршрутизации (параграф 6.1.1);

  • слишком специфичные маршруты (параграф 6.1.3);

  • префиксы, относящиеся к локальной AS (параграф 6.1.4);

  • префиксы ЛВС IXP (параграф 6.1.5);

  • используемый по умолчанию маршрут (параграф 6.1.6).

6.2.1.2. Выходная фильтрация

Следует обеспечить конфигурацию, гарантирующую передачу только соответствующих префиксов. Например, можно разрешать передачу только своих префиксов и префиксов нисходящих сетей. Для решения этой задачи можно использовать группы (BGP community), атрибут AS path или то и другое вместе. Кроме того, для предотвращения нежелательных анонсов по причине конфигурационных ошибок может иметь смысл добавление ряда фильтров:

  • префиксы без глобальной маршрутизации (параграф 6.1.1);

  • слишком специфичные маршруты (параграф 6.1.3);

  • префиксы ЛВС IXP (параграф 6.1.5);

  • используемый по умолчанию маршрут (параграф 6.1.6).

Если возможно просто перечислить анонсируемые префиксы, достаточно настроить конфигурацию на передачу дозволенных префиксов и отказ от анонсирования всех остальных.

6.2.2. Фильтры на границе с клиентами

6.2.2.1. Входная фильтрация

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

Такие же правила применимы для клиентов, к которым подключены другие клиенты (например, провайдеров, подключенных к транзиту Tier 1). Исключением является случай, когда в сети клиента применяется строгая префиксов на входе/выходе и эта сеть анонсирует слишком много префиксов, чтобы их можно было в явном виде включить в конфигурацию маршрутизатора. В таких ситуациях можно применять фильтры, описанные в параграфе 6.2.1.1.

6.2.2.2. Выходная фильтрация

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

Если клиент желает получить полную таблицу маршрутизации (многодомная сеть или желание видеть полную таблицу Internet), можно воспользоваться перечисленными ниже фильтрами:

  • префиксы без глобальной маршрутизации (параграф 6.1.1);

  • слишком специфичные маршруты (параграф 6.1.3);

  • используемый по умолчанию маршрут (параграф 6.1.6).

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

6.2.3. Фильтры для вышестоящих провайдеров

6.2.3.1. Входная фильтрация

Если из восходящего направления желательно получать полную таблицу маршрутизации, применяются такие же фильтры, как описано для партнеров в параграфе 6.2.1.1 за исключением фильтрации маршрута по умолчанию. Иногда от вышестоящего провайдера желательно получать используемый по умолчанию маршрут (в дополнение к полной таблице BGP). В предположении, что вышестоящий провайдер анонсирует только маршрут по умолчанию, будет применяться простой фильтр, принимающий только этот маршрут и ничего другого.

6.2.3.2. Выходная фильтрация

Применяемые в этом случае фильтры скорей всего не будут отличаться от фильтров для партнеров (параграф 6.2.1.2). Однако могут применяться разные правила, если восходящий провайдер не обеспечивает транзит для всех префиксов.

6.3. Рекомендации по фильтрации префиксов для оконечных сетей

6.3.1. Входная фильтрация

Оконечные сети реализуют свои фильтры в соответствии с маршрутами, которые они запрашивают из восходящего направления. Если запрашивается маршрут по умолчанию, может применяться входной фильтр, воспринимающий только этот маршрут (параграф 6.1.6). Если оконечная сеть не способна перечислить префиксы по причине их большого числа (например, если нужна полная таблица маршрутизации Internet), следует настроить перечисленные ниже фильтры для отсеять ненужные анонсы из восходящего направления:

  • немаршрутизируемые префиксы (параграф 6.1.1);

  • слишком специфичные маршруты (параграф 6.1.3);

  • префиксы, относящиеся к локальной AS (параграф 6.1.4);

  • используемый по умолчанию маршрут (параграф 6.1.6), если этот маршрут не запрашивался.

6.3.2. Выходная фильтрация

В оконечных сетях скорей всего будет реализоваться очень простая политика — анонсировать только свои локальные маршруты. Могут также быть реализованы фильтры префиксов, описанные в параграфе 6.2.1.2 для предотвращения анонсирования некорректных провайдеру в восходящем направлении.

7. Подавление осцилляций BGP

Механизм подавления маршрутных осцилляций BGP (BGP route flap dampening) позволяет «штрафовать» маршруты при каждом их изменении в таблице маршрутизации BGP. Этот механизм был разработан для защиты Internet от событий, влияющих на одну сеть. Исследования показали, что реализация механизмов подавления осцилляций BGP может принести больше вреда, нежели пользы. По этой причине сообщество RIPE выступило с рекомендациями отказа от применения BGP route flap dampening [19]. Позднее были проведены дополнительные исследования для определения порога подавления, позволяющего сделать решение «применимым» (см. RFC 7196 [6] и [22], где рассматриваются также рекомендации RIPE). Данный документ рекомендует следовать предложениям IETF и RIPE, используя механизм подавления осцилляций BGP с настроенными пороговыми значениями.

8. Максимальное число префиксов от партнера

Рекомендуется задавать в конфигурации максимальное число маршрутов, принимаемых от партнера. Ниже приведены рекомендуемые в общем случае правила:

  • Для партнеров рекомендуется устанавливать предел меньше, чем число маршрутов в сети Internet. Это позволит разорвать партнерскую сессию BGP, если партнер будет анонсировать полную таблицу. Администраторы могут также устанавливать разные предельные значения для каждого партнера в зависимости от анонсируемого ими числа маршрутов с некоторым запасом «на вырост».

  • Для восходящих соединений, обеспечивающих полную таблицу маршрутизации, рекомендуется задавать предел, превышающий число маршрутов в Internet. Пороговое значение остается полезным для защиты сети (и, в частности, памяти маршрутизаторов) от передачи из восходящего направления слишком большого числа маршрутов. Предельное значение следует выбирать с учетом реальных возможностей маршрутизаторов.

Важно регулярно пересматривать установленные пределы, поскольку сеть Internet может меняться достаточно быстро. Некоторые производители предлагают механизмы установки двух пороговых значений — превышение большего вызывает разрыв сессии, а превышение меньшего просто фиксируется в системном журнале и может служить сигналом о необходимости повышения порога.

9. Фильтрация AS Path

В этом параграфе приведены рекомендации по обработке атрибутов BGP AS path.

  • Следует принимать от клиентов только 2-х или 4-байтовые значения AS path, содержащие ASN, относящиеся к клиенту (или транзитные). Если администратор не будет применять фильтры для реализации этого, следует рассмотреть вопрос ограничения размера воспринимаемых от клиента путей (конечный или транзитный клиент), а также следует отбрасывать избыточное удлинение (prepending) в путях. Такая мягкая политика может комбинироваться с фильтрами для конкретных 2-х или 4-байтовых AS path, которые недопустимо воспринимать от клиента (такие, как вышестоящие транзитные провайдеры или партнеры одного уровня).

  • Не следует принимать префиксы с приватными номерами AS в атрибутах AS, если они не связаны с префиксами клиентов. Исключением могут быть случаи, когда вышестоящий провайдер обеспечивает специфические услуги (типа организации «черной дыры») на основе приватных номеров AS — в таких случаях префиксы следует воспринимать. Провайдеру следует информировать своих клиентов об правилах предоставления и использования таких услуг.

  • Не следует принимать префиксы с первым номером AS в атрибуте AS не относится к какому-либо из партнеров, если партнерство не организовано в направлении маршрутного сервера BGP [17] (например, IXP) с прозрачной обработкой AS path. В последнем случае упомянутую проверку следует отключать, поскольку первым номером AS будет номер одного из членов IXP, тогда как номером AS партнера будет номер одного из маршрутных серверов BGP.

  • Не следует анонсировать префиксы с непустым AS path, если для этих префиксов сеть не служит транзитной.

  • Не следует анонсировать префиксы с номерами восходящих AS в атрибутах AS своим партнерским AS, если сеть не является транзитной для этих префиксов.

  • Приватные номера AS применяются в «закрытых» средах и не следует использовать их в анонсах партнерам BGP, которые не входят в такую среду, а также следует вырезать такие номера при получении от партнеров BGP, не входящих в «закрытую» среду.

  • Не следует менять принятое по умолчанию поведение BGP (т. е., не следует воспринимать свой номер AS в атрибутах AS path). Если рассматривается исключение из этого правила, следует внимательно изучить возможные последствия (они могут быть серьезными для маршрутизации).

Фильтрация AS path потребует дополнительных исследований по завершении перенумерации ASN. Такие операции являются достаточно распространенными и существуют плавного перехода на ASN [28]. Обычная практика перехода (в рамках конкретного маршрутизатора) состоит в изменении AS, представленного партнером с прежним ASN так, будто смены номеров не было. Это позволяет изменять ASN на маршрутизаторах без одновременной замены конфигурации у всех партнеров EBGP (поскольку эта операция требует синхронизации со всеми партнерами, подключенными к маршрутизатору). Во время перенумерации описанные выше правила могут уточняться.

10. Фильтрация Next-Hop

Если партнеры размещены в сети с разделяемой средой (типа IXP), BGP может анонсировать префиксы с атрибутом next hop третьей стороны, направляя тем самым пакеты не анонсирующему префикс узлу а куда-то в другое место.

Это может быть желательным для маршрутных серверов BGP [17], передающих маршрутные данные, но не имеющих возможностей для приема и пересылки реального трафика. Поэтому маршрутный сервер BGP будет анонсировать префиксы с атрибутом next-hop, указывающим на маршрутизатор, изначально сообщивший серверу данный префикс.

При прямом партнерстве между ISP такой вариант является нежелательным, поскольку партнеры, указав один на другого, могут создать «черную дыру» (недостижимый следующий интервал — next hop) или направить трафик третьей стороне, которая будет вынуждена иго пересылать. Для случая «черной дыры» проблема осложняется невозможностью ее обнаружения без анализа префиксов BGP на принимающем маршрутизаторе IXP.

Поэтому для партнеров IXP следует применять политику фильтрации на входе, чтобы для воспринимаемых префиксов установить в атрибуте next hop значение IP-адреса партнера BGP (находящегося в ЛВС IXP), передавшего префикс.

Это правило не следует применять для сессий с серверами маршрутов и партнеров, администраторы которых осознанно позволяют другим передавать next hop третьей стороны.

Это правило следует скорректировать для случая реализации механизма RTBH14, описанного в RFC 6666 [13]. В этом случае администраторы будут использовать общеизвестное значение BGP next hop для маршрутов, которые они хотят фильтровать (например, при связанной с таким маршрутом угрозе). Такой маршрут будет уводить трафик в null-интерфейс. В комбинации с uRPF это позволяет отбрасывать трафик, связанный с данным префиксом. Партнеры могут обмениваться данными о применяемых «черных дырах», используя, например, особые группы BGP. Администраторы могут распространять информацию о «черных дырах» и использованием заранее согласованной группы BGP — при получении маршрута с такой группой созданные правила могут изменить next hop для создания «черной дыры».

11. Очистка BGP Community

Дополнительно можно рассмотреть приведенные ниже правила для BGP AS path:

  • Администраторам следует вычищать входящие группы со своим номером в старших битах и оставлять только те группы, которые партнеры или клиенты могут использовать для сигнализации.

  • Администраторам не следует удалять другие группы, применимые к полученным маршрутам (группы, не удаленные применением предыдущего правила). В частности, следует сохранять исходные группы после их применения. Клиентам эти группы могут пригодиться для взаимодействия с восходящим провайдером. В частности, администраторам обычно не следует удалять неэкспортируемые группы, поскольку они обычно анонсируются их партнерами с определенной целью.

12. Вопросы безопасности

Этот документ целиком посвящен безопасности применения BGP. Здесь описан позитивный опыт, которым следует пользоваться для защиты инфраструктуры BGP — защиты маршрутизаторов и сессий BGP, фильтрации префиксов BGP и атрибутов AS path, а также настройки иных опций защиты сетей BGP.

Документ не описывает имеющиеся реализации BGP, их возможные уязвимости и способы обработки ошибок. Не рассматривается детально и защита от атак с применением специальных пакетов.

13. Литература

13.1. Нормативные документы

[1] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[2] Rekhter, Y., Li, T., and S. Hares, «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006, <http://www.rfc-editor.org/info/rfc4271>.

[3] Gill, V., Heasley, J., Meyer, D., Savola,, P., and C. Pignataro, «The Generalized TTL Security Mechanism (GTSM)», RFC 5082, October 2007, <http://www.rfc-editor.org/info/rfc5082>.

[4] Touch, J., Mankin, A., and R. Bonica, «The TCP Authentication Option», RFC 5925, June 2010, <http://www.rfc-editor.org/info/rfc5925>.

[5] Mohapatra, P., Scudder, J., Ward, D., Bush, R., and R. Austein, «BGP Prefix Origin Validation», RFC 6811, January 2013, <http://www.rfc-editor.org/info/rfc6811>.

[6] Pelsser, C., Bush, R., Patel, K., Mohapatra, P., and O. Maennel, «Making Route Flap Damping Usable», RFC 7196, May 2014, <http://www.rfc-editor.org/info/rfc7196>.

13.2. Дополнительная литература

[7] Heffernan, A., «Protection of BGP Sessions via the TCP MD5 Signature Option», RFC 2385, August 1998, <http://www.rfc-editor.org/info/rfc2385>.

[8] Ferguson, P. and D. Senie, «Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing», RFC 2827, May 2000, <http://www.rfc-editor.org/info/rfc2827>.

[9] Baker, F. and P. Savola, «Ingress Filtering for Multihomed Networks», RFC 3704, March 2004, <http://www.rfc-editor.org/info/rfc3704>.

[10] Blunk, L., Damas, J., Parent, F., and A. Robachevsky, «Routing Policy Specification Language next generation (RPSLng)», RFC 4012, March 2005, <http://www.rfc-editor.org/info/rfc4012>.

[11] Dugal, D., Pignataro, C., and R. Dunn, «Protecting the Router Control Plane», RFC 6192, March 2011, <http://www.rfc-editor.org/info/rfc6192>.

[12] Lepinski, M. and S. Kent, «An Infrastructure to Support Secure Internet Routing», RFC 6480, February 2012, <http://www.rfc-editor.org/info/rfc6480>.

[13] Hilliard, N. and D. Freedman, «A Discard Prefix for IPv6», RFC 6666, August 2012, <http://www.rfc-editor.org/info/rfc6666>.

[14] Jethanandani, M., Patel, K., and L. Zheng, «Analysis of BGP, LDP, PCEP, and MSDP Issues According to the Keying and Authentication for Routing Protocols (KARP) Design Guide», RFC 6952, May 2013, <http://www.rfc-editor.org/info/rfc6952>.

[15] Bush, R., «Origin Validation Operation Based on the Resource Public Key Infrastructure (RPKI)», RFC 7115, January 2014, <http://www.rfc-editor.org/info/rfc7115>.

[16] Kent, S. and A. Chi, «Threat Model for BGP Path Security», RFC 7132, February 2014, <http://www.rfc-editor.org/info/rfc7132>.

[17] Jasinska, E., Hilliard, N., Raszuk, R., and N. Bakker, «Internet Exchange Route Server», Work in Progress, draft-ietf-idr-ix-bgp-route-server-06, December 2014.

[18] Karrenberg, D., «RIPE-351 — De-Bogonising New Address Blocks», October 2005.

[19] Smith, P. and C. Panigl, «RIPE-378 — RIPE Routing Working Group Recommendations On Route-flap Damping», May 2006.

[20] Smith, P., Evans, R., and M. Hughes, «RIPE-399 — RIPE Routing Working Group Recommendations on Route Aggregation», December 2006.

[21] Smith, P. and R. Evans, «RIPE-532 — RIPE Routing Working Group Recommendations on IPv6 Route Aggregation», November 2011.

[22] Smith, P., Bush, R., Kuhne, M., Pelsser, C., Maennel, O., Patel, K., Mohapatra, P., and R. Evans, «RIPE-580 — RIPE Routing Working Group Recommendations On Route-flap Damping», January 2013.

[23] IANA, «IANA IPv4 Special-Purpose Address Registry», <http://www.iana.org/assignments/iana-ipv4-special-registry>.

[24] IANA, «IANA IPv6 Special-Purpose Address Registry», <http://www.iana.org/assignments/iana-ipv6-special-registry>.

[25] IANA, «IANA IPv4 Address Space Registry», <http://www.iana.org/assignments/ipv4-address-space>.

[26] IANA, «Internet Protocol Version 6 Address Space», <http://www.iana.org/assignments/ipv6-address-space>.

[27] Merit Network Inc., «Merit RADb», <http://www.radb.net>.

[28] George, W. and S. Amante, «Autonomous System (AS) Migration Features and Their Effects on the BGP AS_PATH Attribute», Work in Progress, draft-ga-idr-as-migration-03, January 2014.

[29] Bellovin, S., Bush, R., and D. Ward, «Security Requirements for BGP Path Validation», RFC 7353, August 2014, <http://www.rfc-editor.org/info/rfc7353>.

[30] «IRRToolSet project page», <http://irrtoolset.isc.org>.

[31] Cooper, D., Heilman, E., Brogle, K., Reyzin, L., and S. Goldberg, «On the Risk of Misbehaving RPKI Authorities», <http://www.cs.bu.edu/~goldbe/papers/hotRPKI.pdf>.

Приложение A. Пример фильтрации префиксов IXP

IXP в зоне RIPE выделен префикс IPv4 /22 сетевым центром RIPE NCC (X.Y.0.0/22 в приведенном примере) и используется префикс /23 из этого блока /22 для ЛВС IXP (предположим, X.Y.0.0/23). Этот префикс ЛВС IXP является одним из используемых членами IXP для настройки партнерства EBGP. Для IXP может также быть выделен номер AS (AS64496 в данном примере).

Всем членам IXP следует убедиться, что они фильтруют префиксы, более специфичные, чем X.Y.0.0/23 от всех своих партнеров EBGP. Восприятие префикса X.Y.0.0/24 или X.Y.1.0/24 может оказать серьезное влияние на маршрутизацию.

IXP следует генерировать префикс X.Y.0.0/22 и анонсировать его своим членам через партнерство EBGP (скорей всего, через свои серверы маршрутов BGP для AS64496).

Членам IXP следует принимать префикс IXP только в том случае, если он проходит через фильтры IRR (параграф 6.1.2.2.1)

Членам IXP следует анонсировать префикс X.Y.0.0/22 в нисходящем направлении. Этот анонс будет проходить через фильтры IRR, поскольку он происходит из IXP.

Благодарности

Авторы благодарят к комментарии и поддержку Marc Blanchet, Ron Bonica, Randy Bush, David Freedman, Wesley George, Daniel Ginsburg, David Groves, Mike Hugues, Joel Jaeggli, Tim Kleefass, Warren Kumari, Jacques Latour, Lionel Morand, Jerome Nicolle, Hagen Paul Pfeifer, Thomas Pinaud, Carlos Pignataro, Jean Rebiffe, Donald Smith, Kotikalapudi Sriram, Matjaz Straus, Tony Tauber, Gunter Van de Velde, Sebastian Wiesinger, Matsuzaki Yoshinobu.

Авторы рады дополнительно поблагодарить Gunter Van de Velde за представление документа на нескольких конференциях IETF в разных рабочих группах, что помогло широкому распространению этого документа и получению откликов на него.

Адреса авторов

Jerome Durand

Cisco Systems, Inc.

11 rue Camille Desmoulins

Issy-les-Moulineaux 92782 CEDEX

France

EMail: jerduran@cisco.com

Ivan Pepelnjak

NIL Data Communications

Tivolska 48

Ljubljana 1000

Slovenia

EMail: ip@ipspace.net

Gert Doering

SpaceNet AG

Joseph-Dollinger-Bogen 14

Muenchen D-80807

Germany

EMail: gert@space.net

Перевод на русский язык

Николай Малых

nmalykh@protokols.ru


1Autonomous System — Автономная система.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

4Восходящим считается направление от потребителя услуг (пользователя), нисходящим — к нему. Прим. перев.

5Man-in-the-middle attack – атака с перехватом пакетов на пути и участием человека в процессе.

6Generalized TTL Security — обобщенная защита TTL.

7Internet Routing Registry.

8Routing Policy Specification Language — язык задания правил маршрутизации.

9Routing Assets Database — база данных об активах маршрутизации.

10Resource Public Key Infrastructure — инфраструктура открытых ключей маршрутных ресурсов.

11Route Origin Authorization — полномочия порождения маршрутов.

12External BGP — внешний BGP.

13Ослабленный режим проверки достижимости отправителя путем пересылки пакета в его адрес.

14Remote Triggered Black Holing — «черная дыра» с дистанционным включением.

Рубрика: RFC | Комментарии к записи RFC 7454 BGP Operations and Security отключены

RFC 7432 BGP MPLS-Based Ethernet VPN

Internet Engineering Task Force (IETF)                   A. Sajassi, Ed.
Request for Comments: 7432                                         Cisco
Category: Standards Track                                    R. Aggarwal
ISSN: 2070-1721                                                   Arktan
                                                                N. Bitar
                                                                 Verizon
                                                                A. Isaac
                                                               Bloomberg
                                                               J. Uttaro
                                                                    AT&T
                                                                J. Drake
                                                        Juniper Networks
                                                           W. Henderickx
                                                          Alcatel-Lucent
                                                           February 2015

BGP MPLS-Based Ethernet VPN

Ethernet VPN на основе BGP MPLS

PDF

Аннотация

Этот документ описывает процедуры для BGP MPLS Ethernet VPN (EVPN). Эти процедуры соответствуют требованиям RFC 7209 Requirements for Ethernet VPN (EVPN).

Статус документа

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 5741.

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc7432.

Авторские права

Авторские права (Copyright (c) 2015) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа IETF Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

Виртуальные частные ЛВС (VPLS), определённые в [RFC4664], [RFC4761] и [RFC4762], являются проверенной и широко развёрнутой технологией. Однако у имеющихся решений есть много ограничений в части многодомности и резервирования, оптимизации групповой передачи, простоты предоставления, распределения нагрузки по потокам и поддержки множества путей. Эти ограничения важны для центров обработки данных (ЦОД — Data Center или DC). В [RFC7209] описаны мотивы для новых решений, преодолевающих эти ограничения, а также приведены требования к новым решениям.

В этом документе описаны процедуры для решения на основе BGP MPLS, названного Ethernet VPN (EVPN) и соответствующего требованиям [RFC7209]. Следует прочесть [RFC7209], где требования и мотивы описаны подробно. Для EVPN нужны расширения имеющихся протоколов IP/MPLS, описанные в этом документе. В дополнение к этому EVPN использует некоторые «строительные блоки» имеющихся технологий MPLS.

2. Уровни требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с [RFC2119].

3. Терминология

Broadcast Domain — широковещательный домен

В сети с мостами широковещательный домен соответствует виртуальной ЛВС (Virtual LAN или VLAN), которая обычно представлена одним VLAN ID (VID), но может представляться несколькими VID при использовании обучения SVL (Shared VLAN Learning) в соответствии с [802.1Q].

Bridge Table — таблица моста

Широковещательный домен в MAC-VRF.

CE

Краевое устройство клиента, например, хост, маршрутизатор или коммутатор.

EVI

Экземпляр EVPN, охватывающий краевые устройства провайдера (Provider Edge или PE), участвующие в EVPN.

MAC-VRF

Таблица виртуальной маршрутизации и пересылки для MAC-адресов в PE.

Ethernet Segment (ES) — сегмент Ethernet

При подключении клиентской стороны (устройство или сеть) к одному или нескольким PE через набор каналов Ethernet такой набор называют сегментов Ethernet.

Ethernet Segment Identifier (ESI) — идентификатор сегмента Ethernet

Уникальный идентификатор, отличный от 0 и указывающий сегмент Ethernet.

Ethernet Tag — тег Ethernet

Тег Ethernet указывает конкретный домен широковещания, например, VLAN. Экземпляр EVPN включает один или несколько доменой широковещания.

LACP

Link Aggregation Control Protocol — протокол управления агрегированием каналов.

MP2MP

Multipoint to Multipoint — множество со множеством.

MP2P

Multipoint to Point — множество с одним.

P2MP

Point to Multipoint — один со множеством.

P2P

Point to Point — точка-точка (один с одним).

PE

Крайвое устройство провайдера (Provider Edge).

Single-Active Redundancy Mode

Когда лишь одному из устройств PE, подключённых к сегменту Ethernet, разрешено пересылать трафик в сегмент Ethernet и из него для данной VLAN, такой режим резервирования называют Single-Active (активен один).

All-Active Redundancy Mode

Когда всем устройствам PE, подключённым к сегменту Ethernet, разрешено пересылать трафик в сегмент Ethernet и из него для данной VLAN, такой режим резервирования называют All-Active (активны все).

4. Обзор EVPN на основе BGP MPLS

В этом разделе представлен обзор EVPN. Экземпляр EVPN включает краевые устройства клиента (CE), соединённые с краевыми устройствами провайдера (PE), образующими границу инфраструктуры MPLS. CE может быть хостом, маршрутизатором или коммутатором. PE обеспечивают связность через виртуальные мосты L2 между CE. В сети провайдера может существовать множество экземпляров EVPN.

PE могут соединяться с инфраструктурой MPLS LSP, обеспечивающей преимущества технологии MPLS, такие как быстрая перемаршрутизация, отказоустойчивость и т. п. PE могут также соединяться с инфраструктурой IP и в этом случае между ними может применяться туннелировани IP/GRE (Generic Routing Encapsulation) или иные туннели IP. В документе подробно описаны процедуры лишь для туннелей MPLS LSP, однако их можно расширить на туннели IP в качестве туннелирования в сети с коммутацией пакетов (Packet Switched Network или PSN).

В EVPN изучение MAC между PE происходит не в плоскости данных (как с традиционными мостами в [RFC4761] [RFC4762]), а в плоскости управления. Это обучение обеспечивает лучший контроль процесса изучения MAC, включая указание, кто и что может изучать, а также возможность применения правил. Кроме того, плоскостью управления для анонсирования доступности MAC является многопротокольное (multi-protocol или MP) расширение BGP (как в IP VPN [RFC4364]). Это обеспечивает гибкость и возможность сохранять «виртуализацию» или изоляцию групп взаимодействующих агентов (хосты, серверы, виртуальные машины) друг от друга. В EVPN узлы PE анонсируют MAC-адреса, узнанные от подключённых к ним CE, вместе с меткой MPLS другим PE в плоскости управления с использованием Multiprotocol BGP (MP-BGP). Обучение в плоскости управления позволяет распределять трафик CE, подключённых к нескольким PE. Это дополняет распределение нагрузки через ядро MPLS по нескольким LSP между парой PE. Иными словами, это позволяет CE подключаться к нескольким активным точкам присоединения и улучшает время схождения при некоторых отказах в сети.

Однако обучение между PE и CE использует наиболее подходящий для CE метод — обучение в плоскости данных, IEEE 802.1x, протокол обнаружения канального уровня (Link Layer Discovery Protocol или LLDP), IEEE 802.1aq, ARP, плоскость управления сетью или иные протоколы.

Решение вопроса о заполнении таблицы пересылки L2 в PE всеми MAC-адресами получателей, известными плоскости управления, или реализации в PE решения на основе кэширования принимается локально. Например, таблица пересылки MAC может заполняться только MAC получателей из активных потоков, проходящих через PE.

Атрибуты правил EVPN очень похожи на применяемые в IP-VPN. Для экземпляра EVPN требуется отличитель маршрута (Route Distinguisher или RD), уникальный в масштабе MAC-VRF и 1 или несколько глобально уникальных целей маршрута (Route Target или RT). CE подключается к MAC-VRF на PE через интерфейс Ethernet, на котором может быть задан 1 или несколько тегов Ethernet, например, VLAN ID. Некоторые варианты развёртывания гарантируют уникальность VLAN ID среди экземпляров EVPN — все точки присоединения к данному экземпляру EVPN используют один VLAN ID, а другие экземпляры EVPN этот VLAN ID не применяют. В этом документе данный случай называется Unique VLAN EVPN и для него описаны упрощенные процедуры оптимизации.

5. Сегмент Ethernet

Как показано в [RFC7209], каждому сегменту Ethernet требуется уникальный идентификатор в EVPN. В этом разделе описано назначение идентификаторов и их кодирование для сигнализации EVPN. Далее описываются протокольные механизмы для работы с идентификаторами.

Когда сайт клиента подключён к одному или нескольким PE через набор каналов Ethernet, этот набор каналов называют сегментом Ethernet. Для многодомного сайта каждый сегмент Ethernet (ES) указывается уникальным ненулевым идентификатором (Ethernet Segment Identifier или ESI). ESI представляется 10-октетным целым числом в формате линии и первым передаётся старший октет. Указанные ниже значения ESI являются резервными.

  • ESI 0 указывает однодомный сайт.

  • ESI {0xFF} (повтор 10 раз) называется MAX-ESI.

В общем случае сегменту Ethernet следует иметь нерезервное значение ESI, уникальное в сети (т. е. во всех экземплярах EVPN на всех PE). Если CE сегмента Ethernet управляются оператором сети, следует гарантировать уникальность ESI, однако при неуправляемых CE оператор должен настроить уникальные ESI для этого сегмента Ethernet. Это нужно для автоматического обнаружения сегментов Ethernet и выбора назначенного узла пересылки (Designated Forwarder или DF).

В сети с управляемыми и неуправляемыми CE значение ESI имеет показанный ниже формат.

               +---+---+---+---+---+---+---+---+---+---+
               | T |          ESI Value                |
               +---+---+---+---+---+---+---+---+---+---+

T (ESI Type)

1-октетное поле (старший октет), задающее формат остальных 9 октетов (ESI Value). Используемые 6 типов ESI описаны ниже.

Type 0 (T=0x00)

Указывает произвольное 9-октетное значение ESI, управляемое и настраиваемое оператором.

Type 1 (T=0x01)

При использовании IEEE 802.1AX LACP между PE и CE этот тип ESI указывает автоматически создаваемые ESI, определяемые из LACP путём конкатенации указанных ниже параметров.
  • Адрес CE LACP System MAC (6 октетов) должен помещаться в 6 старших октетов поля ESI Value.
  • Ключ CE LACP Port Key (2 октета) должен помещаться в 2 октета после адреса System MAC.
  • Остающийся октет имеет значение 0x00.
Что касается CE, он будет рассматривать множество PE, к которым он подключён, как один коммутатор. Это позволяет CE агрегировать каналы, подключённые к разным PE, в одну группу (bundle).
Этот механизм можно применять лишь в случаях, когда ESI создаются в соответствии с приведёнными выше требованиями к уникальности.

Type 2 (T=0x02)

Этот тип применяется в случае подключения хостов через ЛВС с мостами между CE PE. ESI Value генерируется автоматически на основе протокола мостов L2 — при использовании протокола MSTP (Multiple Spanning Tree Protocol) в ЛВС на основе мостов значение ESI выводится путём прослушивания PDU мостов (Bridge PDU или BPDU) в сегменте Ethernet. Для этого на PE не требуется запускать MSTP, однако PE должен узнать MAC-адрес корневого моста (Root Bridge) и его приоритет (Bridge Priority) из внутреннего связующего дерева (Internal Spanning Tree или IST), прослушивая BPDU. Состав ESI Value описан ниже.
    • MAC-адрес Root Bridge (6 октетов) должен помещаться в 6 старших октетов поля ESI Value.
    • Root Bridge Priority (2 октета) должен помещаться в 2 октета после MAC-адреса Root Bridge.
    • Остающийся октет имеет значение 0x00.
Этот механизм можно применять лишь в случаях, когда ESI соответствуют приведённым выше требованиям к уникальности.

Type 3 (T=0x03)

Этот тип указывает ESI Value на основе MAC, созданное автоматически или заданное оператором.
    • Адрес System MAC (6 октетов). MAC-адрес PE должен помещаться в 6 старших октетов поля ESI Value.
    • Значение Local Discriminator (3 октета) должно помещаться в 3 младших октета ESI Value.
Этот механизм можно применять лишь в случаях, когда ESI создаются в соответствии с приведёнными выше требованиями к уникальности.

Type 4 (T=0x04)

Значение ESI Value на основе router-ID, созданное автоматически или заданное оператором.
  • Идентификатор Router ID (4 октета) должен помещаться в 4 старших октета поля ESI Value.
  • Значение Local Discriminator (4 октета) должно помещаться в 4 октета после Router ID3.
  • Остающийся октет имеет значение 0x00.
Этот механизм можно применять лишь в случаях, когда ESI создаются в соответствии с приведёнными выше требованиями к уникальности.

Type 5 (T=0x05)

Значение ESI Value на основе номера автономной системы (Autonomous System или AS), созданное автоматически или заданное оператором.
  • Номер AS (4 октета), принадлежащий системе, должен помещаться в 4 старших октета поля ESI Value. Если используется 2-октетный номер AS, 2 старших октета имеют значение 0x0000.
  • Значение Local Discriminator (4 октета) должно помещаться в 4 октета после номера AS.
  • Остающийся октет имеет значение 0x00.
Этот механизм можно применять лишь в случаях, когда ESI создаются в соответствии с приведёнными выше требованиями к уникальности.

6. Ethernet Tag ID

Ethernet Tag ID — 32-битовое поле, содержащее 12- или 24-битовый идентификатор, указывающий конкретный домен широковещания (например, VLAN) экземпляра EVPN. 12-битовый идентификатор называется VLAN ID (VID). Экземпляр EVPN содержит один или несколько доменов широковещания (одну или несколько VLAN). VLAN для данного экземпляра EVPN назначает поставщик услуг EVPN. Данная сеть VLAN может сама по себе представляться множеством VID. В таких случаях, узлы PE этой сети VLAN для данного экземпляра EVPN отвечают за трансляцию VLAN ID от локально подключённых устройств CE и к ним.

Если VLAN представляется одним VID на всех устройствах PE, участвующих в этой сети VLAN для экземпляра EVPN, трансляция VID на PE не требуется. Кроме того, в некоторых вариантах развёртывания гарантируется уникальность VID во всех экземплярах EVPN — все точки присоединения данного экземпляра EVPN используют одно значение VID, а в других экземплярах EVPN это значение не применяется. Это позволяет выводить RT для каждого экземпляра EVPN автоматически из соответствующего VID, как описано в параграфе 7.10.1. Автоматический вывод из Tag ID.

В последующих параграфах рассматривается связь между доменами широковещания (например, VLAN), Ethernet Tag ID (например, VID) и MAC-VRF, а также установка Ethernet Tag ID в разных маршрутах EVPN BGP (определены в разделе 8) для разных типов сервисных интерфейсов, описанных в [RFC7209].

Значение Ethernet Tag ID = 0xFFFFFFFF зарезервировано и называется MAX-ET.

6.1. Интерфейс сервиса на основе VLAN

С таким интерфейсом службы экземпляр EVPN лишь из одного домена широковещания (например, одной VLAN). Поэтому между VID и MAC-VRF имеется взаимно однозначное соответствие. Поскольку MAC-VRF соответствует одной сети VLAN, он состоит из одной таблицы моста, соответствующей VLAN. Если VLAN представляется множеством VID (например, свой VID на сегмент Ethernet и на PE), каждому PE требуется выполнять трансляцию VID для кадров, направленных в его сегменты. В таких вариантах кадры, передаваемые через сеть MPLS/IP, следует оставлять помеченными исходным VID, а трансляция VID должна поддерживаться в пути данных и должна выполняться на соответствующем PE. Ethernet Tag ID на всех маршрутах EVPN должен иметь значение 0.

6.2. Интерфейс сервиса VLAN Bundle

С таким интерфейсом экземпляр EVPN соответствует нескольким доменам широковещания (например, VLAN), однако поддерживается лишь одна таблица моста на MAC-VRF и ей пользуется несколько VLAN. Это предполагает, что MAC-адреса должны быть уникальными во всех VLAN для этого EVI, чтобы служба могла работать. Иными словами, существует сопоставление «множество в один» между VLAN и MAC-VRF, состоящей из одной таблицы моста. Кроме того, одна сеть VLAN должна представляться одним VID (например, не разрешается трансляция VID для этого типа интерфейса службы). Кадры с инкапсуляцией MPLS должны оставаться помеченными исходным VID. Трансляция не разрешается. Для Ethernet Tag ID на всех маршрутах EVPN должно быть установлено значение 0.

6.2.1. Интерфейс сервиса на базе порта

Этот интерфейс службы является особым случаем интерфейса VLAN bundle, где все VLAN на порту относятся к одной службе и отображаются на одну связку (bundle). Процедуры идентичны описанным в параграфе 6.2.

6.3. Интерфейс службы VLAN-Aware Bundle

С таким интерфейсом экземпляр EVPN содержит несколько доменов широковещания (например, VLAN) и свою таблицу моста для каждой сети VLAN, т. е. поддерживается множество (по одной на VLAN) таблиц на одну MAC-VRF для экземпляра EVPN.

Групповой, широковещательный и трафик неизвестных индивидуальных получателей (Broadcast, unknown unicast, or multicast или BUM) передаётся только узлам CE данного домена широковещания. Однако широковещательные домены в EVI могут иметь свой P-Tunnel или использовать общие P-туннели (например, один туннель на всех в EVI.

Когда VLAN представляется одним VID и трансляции VID не требуется, инкапсулированные в MPLS пакеты должны содержать это значение VID. Для Ethernet Tag ID на всех маршрутах EVPN должно быть установлено это значение VID. Анонсирующий узел PE может объявлять MPLS Label1 в анонсе маршрута MAC/IP только EVI или Ethernet Tag ID и EVI. Решение принимается локально анонсирующим PE (PE размещения) и не влияет на другие PE.

Когда VLAN представляется разными VID на разных CE и требуется трансляция VID, в каждом маршруте EVPN BGP должен передаваться нормализованный Ethernet Tag ID (VID). Кроме того, анонсирующий PE объявляет MPLS Label1 в анонсе маршрута MAC/IP, представляющем Ethernet Tag ID и EVI, так что при получении пакета с инкапсуляцией MPLS он может идентифицировать соответствующую таблицу моста по метке MPLS EVPN и выполнять трансляцию Ethernet Tag ID только на PE размещения, т. е. кадры Ethernet, передаваемые через сеть MPLS/IP должны сохранять исходный идентификатор VID, а трансляция VID выполняется на PE размещения. Для Ethernet Tag ID во всех маршрутах EVPN должно устанавливаться нормализованное значение Ethernet Tag ID, выданное провайдером EVPN.

6.3.1. Интерфейс службы на основе портов с поддержкой VLAN

Этот интерфейс службы является особым случаем интерфейса VLAN-aware bundle, где все VLAN на порту относятся к одному экземпляру сервиса и отображены на одну связку, но без трансляции VID. Процедуры идентичны описанным в параграфе 6.3.

7. Маршруты BGP EVPN

Этот документ определяет новое поле BGP NLRI (Network Layer Reachability Information — сведения о доступности на сетевом уровне) — EVPN NLRI.

+-----------------------------------+
|    Route Type (1 октет)           |
+-----------------------------------+
|     Length (1 октет)              |
+-----------------------------------+
| Зависит от Route Type (переменный)|
+-----------------------------------+

Route Type определяет кодирование остальной части EVPN NLRI.

Поле Length указывает число октетов в зависящем от Route Type поле EVPN NLRI.

Этот документ определяет 4 типа маршрутов:

1 — Ethernet Auto-Discovery (A-D);
2 — MAC/IP Advertisement;
3 — Inclusive Multicast Ethernet Tag;
4 — Ethernet Segment.

Подробное описание и процедуры для каждого типа описаны в последующих параграфах.

EVPN NLRI передаётся в BGP [RFC4271] с использованием расширений BGP Multiprotocol [RFC4760] с идентификатором семейства адресов (Address Family Identifier или AFI) 25 (L2VPN) и следующим идентификатором семейства адресов (Subsequent Address Family Identifier или SAFI) 70 (EVPN). Поле NLRI в атрибуте MP_REACH_NLRI/MP_UNREACH_NLRI содержит EVPN NLRI с указанным выше кодированием.

Чтобы два узла BGP обменивались помеченными EVPN NLRI, они должны использовать анонсы возможностей BGP (Capabilities Advertisement), подтверждающие способность обоих обрабатывать такие NLRI. Это делается в соответствии с [RFC4760] путём указания кода возможности 1 (multiprotocol BGP) с AFI 25 (L2VPN) и SAFI 70 (EVPN).

7.1. Ethernet Auto-discovery

EVPN NLRI для маршрутов типа Ethernet A-D имеет вид

+----------------------------------------+
|  Route Distinguisher (RD) (8 октетов)  |
+----------------------------------------+
|Ethernet Segment Identifier (10 октетов)|
+----------------------------------------+
|  Ethernet Tag ID (4 октета)            |
+----------------------------------------+
|  MPLS Label (3 октета)                 |
+----------------------------------------+

При обработке ключей маршрута BGP только поля Ethernet Segment Identifier и Ethernet Tag ID считаются частью префикса в NLRI. Поле MPLS Label трактуется как атрибут маршрута, а не его часть.

Процедуры и использование таких маршрутов описаны в параграфах 8.2. Быстрое схождение и 8.4. Псевдонимы и резервный путь.

Значение 20-битовой метки MPLS помещается в старшие биты 3-октетного поля MPLS Label.4

7.2. MAC/IP Advertisement

EVPN NLRI для маршрутов типа MAC/IP Advertisement имеет вид

+----------------------------------------+
|  Route Distinguisher (RD) (8 октетов)  |
+----------------------------------------+
|Ethernet Segment Identifier (10 октетов)|
+----------------------------------------+
|  Ethernet Tag ID (4 октета)            |
+----------------------------------------+
|  MAC Address Length (1 октет)          |
+----------------------------------------+
|  MAC Address (6 октетов)               |
+----------------------------------------+
|  IP Address Length (1 октет)           |
+----------------------------------------+
|  IP Address (0, 4 или 16 октетов)      |
+----------------------------------------+
|  MPLS Label1 (3 октета)                |
+----------------------------------------+
|  MPLS Label2 (0 или 3 октета)          |
+----------------------------------------+

При обработке ключей маршрута BGP только поля Ethernet Tag ID, MAC Address Length, MAC Address, IP Address Length и IP Address считаются частью префикса в NLRI. Поля Ethernet Segment Identifier, MPLS Label1, MPLS Label2 трактуется как атрибут маршрута, а не его часть. Размеры адресов IP и MAC указываются в битах.

Процедуры и использование таких маршрутов описаны в разделах 9. Определение доступности индивидуального MAC-адреса и 14. Распределение нагрузки для индивидуальных пакетов.

Значение 20-битовой метки MPLS помещается в старшие биты 3-октетных полей MPLS Label1 и MPLS Label2.1

7.3. Inclusive Multicast Ethernet Tag

EVPN NLRI для маршрутов типа Inclusive Multicast Ethernet Tag имеет вид

+---------------------------------------+
|  RD (8 октетов)                       |
+---------------------------------------+
|  Ethernet Tag ID (4 октета)           |
+---------------------------------------+
|  IP Address Length (1 октет)          |
+---------------------------------------+
|  Originating Router's IP Address      |
|          (4 или 16 октетов)           |
+---------------------------------------+

Процедуры и использование таких маршрутов описаны в разделах 11. Обработка трафика с множеством получателей, 12. Обработка индивидуальных пакетов неизвестных получателей и 16. Групповая передача и широковещание. Размер адреса IP указывается в битах. При обработке ключей маршрута BGP только поля Ethernet Tag ID, IP Address Length и Originating Router’s IP Address считаются частью префикса в NLRI.

7.4. Ethernet Segment

EVPN NLRI для маршрутов типа Ethernet Segment имеет вид

+----------------------------------------+
|  RD (8 октетов)                        |
+----------------------------------------+
|Ethernet Segment Identifier (10 октетов)|
+----------------------------------------+
|  IP Address Length (1 октет)           |
+----------------------------------------+
|  Originating Router's IP Address       |
|          (4 или 16 октетов)            |
+----------------------------------------+

Процедуры и использование таких маршрутов описаны в параграфе 8.5. Выбор DF. Размер адреса IP указывается в битах. При обработке ключей маршрута BGP только поля Ethernet Segment ID, IP Address Length и Originating Router’s IP Address считаются частью префикса в NLRI.

7.5. ESI Label Extended Community

Эта расширенная группа является новой переходной группой с полями Type = 0x06 и Sub-Type = 0x01. Она может анонсироваться с маршрутами Ethernet Auto-discovery и разрешает процедуры расщепления горизонта (split-horizon) для многодомных сайтов, как указано в параграфе 8.3. Расщепление горизонта. Поле ESI Label представляет ES анонсирующим PE и применяется в фильтрации split-horizon другими PE, подключёнными к тому же многодомному сегменту Ethernet.

Каждая расширенная группа ESI Label кодируется 8 октетами, как показано ниже.

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type=0x06     | Sub-Type=0x01 | Flags(1 октет)|  Reserved=0   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Reserved=0   |          ESI Label                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Младший бит октета Flags определён как Single-Active. Значение 0 указывает, что многодомный сайт работает в режиме избыточности All-Active, а 1 указывает режим Single-Active.

Значение 20-битовой метки MPLS помещается в старшие биты 3-октетного поля ESI Label.5

7.6. ES-Import Route Target

Это новая расширенная группа Route Target, передаваемая с маршрутом Ethernet Segment. Она позволяет всем PE одного многодомного сайта импортировать маршруты Ethernet Segment. Значение выводится автоматически для ESI Type 1, 2, 3 путём указания MAC-адреса в 6 старших октетах 9-октетного поля ESI Value в ES-Import Route Target.

     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Type=0x06     | Sub-Type=0x02 |          ES-Import            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                     Продолжение ES-Import                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Этот документ добавляет для расширенной группы Route Target значение 0x06 в старшем октета (поле Type) в дополнение к значениям, заданным в [RFC4360]. Значение второго октета (поле Sub-Type) 0x02 указывает, что это расширенная группа (Extended Community) типа Route Target. Новое значение Type = 0x06 указывает, что структура RT содержит 6-октетное значение (например, адрес MAC). Узлы BGP, реализующие RT Constraint [RFC4684], должны применять процедуры RT Constraint и для ES-Import RT.

Процедуры и использование этого атрибута описаны в параграфе 8.1. Автоматическое обнаружение многодомных ES.

7.7. Расширенная группа MAC Mobility

Эта новая переходная расширенная группа имеет поля Type = 0x06 и Sub-Type = 0x00 и может анонсироваться с маршрутами MAC/IP Advertisement. Процедуры использования группы описаны в разделе 15. Мобильность MAC.

MAC Mobility кодируется 8-октетным значением, как показано ниже.

     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Type=0x06     | Sub-Type=0x00 |Flags(1 октет)|  Reserved=0    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                       Sequence Number                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Младший бит октета Flags определён как флаг Sticky/static и может иметь значение 1, указывающее статический MAC-адрес, который нельзя поменять. Порядковый номер служит для того, чтобы устройства PE сохраняли корректный маршрут MAC/IP Advertisement при наличии нескольких обновлений для одного MAC-адреса.

7.8. Расширенная группа Default Gateway

Расширенная группа Default Gateway относится к типу Opaque (см. параграф 3.3 в [RFC4360]) и является переходной группой (первый октет имеет значение 0x03). Второй октет (Sub-Type) имеет значение 0x0d (Default Gateway), выделенное IANA. Поле Value для этой группы является резервным (отправитель устанавливает 0, получатель игнорирует). Процедуры и применение атрибута описаны в параграфе 10.1. Принятый по умолчанию шлюз.

7.9. Назначение RD для MAC-VRF

Для отличителя маршрута (RD) должно быть установлено значение RD из MAC-VRF, анонсирующей NLRI. Значение RD должно назначаться для данной MAC-VRF на устройстве PE и должно быть уникальным среди всех MAC-VRF на PE. Рекомендуется использовать Type 1 RD [RFC4364]. Поле Value содержит IP-адрес PE (обычно loopback), за которым следует уникальное в масштабе PE число, которое может генерироваться самим PE. В случае уникальной VLAN EVPN младшие 12 битов могут содержать VLAN ID, а старшие 4 — 0.

7.10. Цели маршрутов

Маршрут EVPN может включать один или несколько атрибутов цели (Route Target или RT. RT могут настраиваться (как в IP VPN) или выводиться автоматически.

Если PE применяет RT Constraint, узел PE анонсирует все такие RT, используя RT Constraint в соответствии с [RFC4684]. Применение RT Constraint позволяет каждому маршруту EVPN достигать лишь тех PE, которым указан импорт хотя бы одного RT из набора, передаваемого в маршруте EVPN.

7.10.1. Автоматический вывод из Tag ID

Для сценария Unique VLAN EVPN крайне желательно автоматически выводить RT из Ethernet Tag ID (VLAN ID) для данного экземпляра EVPN, как показано ниже.

  • В поле Global Administrator для RT должен указываться номер автономной системы (AS), с которой связано устройство PE.

  • 12-битовое значение VLAN ID должно помещаться в 12 младших битов поля Local Administrator, а остальные должны иметь значение 0.

8. Многодомные функции

В этом разделе рассматриваются функции, процедуры и связанные маршруты BGP, используемые для поддержки многодомности в EVPN. Описаны как многодомные устройства (multihomed device или MHD), так и многодомные сети (multihomed network или MHN).

8.1. Автоматическое обнаружение многодомных ES

PE, подключённые к одному сегменту Ethernet, могут автоматически находить друг друга путём обмена маршрутами Ethernet Segment без настройки или с минимальной настройкой.

8.1.1. Создание маршрута Ethernet Segment

Отличитель маршрута (RD) должен быть Type 1 RD [RFC4364]. Значение поля включает IP-адрес PE (обычно петлевой), за которым следует уникальный номер PE.

Идентификатор сегмента (ESI) должен иметь 10-октетное значение, описанное в разделе 5. Сегмент Ethernet.

Анонсы BGP для маршрутов Ethernet Segment должны включать ES-Import Route Target, как указано в параграфе 7.6.

Фильтрация маршрутов Ethernet Segment должна выполняться так, чтобы маршруты Ethernet Segment импортировались только устройствами PE, которые многодомны в одном сегменте Ethernet. С этой целью каждый узел PE, подключенный к определённому сегменту Ethernet, создаёт правило фильтрации для импорта маршрута, содержащего цель ES-Import Route Target, созданную из ESI.

8.2. Быстрое схождение

В EVPN доступность MAC-адресов определяется черз плоскость управления BGP в сети MPLS. Поэтому при отсутствии какого-либо механизма быстрой защиты время схождения для сети зависит от числа маршрутов MAC/IP Advertisement, которые должен отозвать столкнувшийся с отказом узел PE. Для больших сред такая схема замедляет схождение.

Для решения проблемы в EVPN определён механизм, позволяющий быстро и эффективно сообщить удаленным узлам PE о необходимости обновления их таблиц пересылки при возникновении отказа связности с сегментом Ethernet. Для этого каждый узел PE анонсирует набор из одного или нескольких Ethernet A-D на маршрут ES для каждого локально подключённого сегмента Ethernet (создание этих маршрутов описано в параграфе 8.2.1. Создание Ethernet A-D для маршрута Ethernet Segment). PE может потребоваться анонсировать более одного Ethernet A-D на маршрут ES для данного сегмента ES, поскольку ES может входить в несколько EVI и RT для всех этих EVI могут не поместиться в один маршрут. Анонсирование нескольких Ethernet A-D на маршрут ES для ES позволяет включать в каждый маршрут часть полного набора RT. Ethernet A-D на маршрут ES в наборе различаются по RD.

При отказе связности с подключённым сегментом PE отзывает соответствующие наборы Ethernet A-D для маршрутов ES. В результате все PE, получившие отзыв, обновляют свои смежности next-hop для всех MAC-адресов, связанных с соответствующим сегментом Ethernet. Если нет PE, анонсирующих Ethernet A-D для того же сегмента, получивший отзыв узел PE просто аннулирует записи MAC для сегмента. В иных случаях PE обновляет смежности next-hop.

8.2.1. Создание Ethernet A-D для маршрута Ethernet Segment

В этом параграфе описаны процедуры, применяемые при создании Ethernet A-D для маршрута ES, используемых для быстрого схождения (см. выше) и анонсирования меток ESI, используемых для фильтрации split-horizon (параграф 8.3. Расщепление горизонта). Требуется поддержка этих маршрутов.

Для отличителя маршрута (RD) должен указываться Type 1 RD [RFC4364]. Поле включает IP-адрес PE (обычно, loopback), за которым следует число, уникальное в масштабе PE.

В поле Ethernet Segment Identifier должно помещаться 10-октетное значение, как указано в разделе 5. Сегмент Ethernet. Маршрут Ethernet A-D не требуется при нулевом значении идентификатора сегмента (однодомный вариант).

В поле Ethernet Tag ID должно быть указано MAX-ET.

Метка MPLS в NLRI должна иметь значение 0.

В маршрут должна включаться расширенная группа ESI Label. Если желателен режим All-Active, в поле флагов Single-Active расширенной группы ESI Label должно быть установлено значение 0, а в поле MPLS label этой расширенной группы должна помещаться действительная метка MPLS. Метка MPLS в Extended Community называется меткой ESI и она должна иметь одинаковое значение во всех Ethernet A-D для маршрута ES, анонсируемых для ES. Это должна быть назначенная в нисходящем направлении метка MPLS, если анонсирующий узел PE использует входную репликацию для принимаемого от других PE трафика BUM. Если анонсирующий узел PE использует P2MP MPLS LSP для передачи трафика BUM, это должна быть назначенная в восходящем направлении метка MPLS. Использование метки описано в параграфе 8.3. Расщепление горизонта.

Если желателен режим Single-Active, бит Single-Active в поле флагов расширенной группы ESI Label должен иметь значение 1, а для метки ESI следует указывать действительное значение метки MPLS.

8.2.1.1. Ethernet A-D RT

Каждый маршрут Ethernet A-D для ES должен включать хотя бы один атрибут RT. Набор маршрутов Ethernet A-D для ES должен передавать весь набор RT для всех экземпляров EVPN, к которым относится сегмент Ethernet.

8.3. Расщепление горизонта

Рассмотрим узел CE, подключенный к 2 или более PE в сегменте Ethernet ES1, работающем в режиме All-Active. Если CE передаёт пакет BUM одному из PE, не являющемуся назначенным узлом пересылки (Designated Forwarder или DF), скажем, PE1, то PE1 будет пересылать этот пакет всем или части других PE в этом экземпляре EVPN, включая DF PE для этого сегмента Ethernet. В этом случае DF PE, с которым CE имеет несколько соединений, должен отбросить пакет и не пересылать его обратно CE. Эта фильтрация в документе называется расщеплением горизонта (split-horizon).

При работе множества PE в режиме Single-Active использование фильтрации split-horizon настоятельно рекомендуется, поскольку оно предотвращает временные петли в моменты отказа или восстановления, которые могут влиять на сегмент Ethernet (например, когда два PE считают себя DF для сегмента, пока не завершена процедура выбора DF).

Для реализации функции split-horizon каждый пакет fBUM, исходящий не от DF PE, инкапсулируется с меткой MPLS, указывающей сегмент происхождения (Ethernet), т. е. сегмент, из которого кадр попал в сеть EVPN. Эта метка называется меткой ESI и должна распространяться всеми PE, работающими в режиме All-Active, с использованием набора Ethernet A-D для маршрутов ES, как указано в параграфе 8.2.1. Метку ESI следует распространять всем PE при работе в режиме Single-Active, с использованием набора Ethernet A-D для маршрутов ES. Эти маршруты импортируются узлами PE, подключёнными к сегменту Ethernet, а также PE, имеющими хотя бы один общий экземпляр EVPN с сегментом Ethernet в маршруте. Как описано в параграфе 8.2.16, маршрут должен содержать расширенную группу ESI Label с действительной меткой ESI. PE полагается на значение метки ESI для решения вопроса о выходе кадра BUM из конкретного сегмента Ethernet.

8.3.1. Назначение метки ESI

В последующих параграфах описываются процедуры назначения меток ESI, которые зависят от типа туннелей, применяемых для доставки в сети EVPN пакетов с множеством адресатов.

8.3.1.1. Входная репликация

Каждый узел PE в режиме All-Active или Single-Active, применяющий репликацию на входе для трафика BUM, анонсирует в нисходящем направлении назначенную метку ESI в наборе маршрутов Ethernet A-D на ES для подключённых ES. Эта метка должна программироваться в пространстве меток платформы анонсирующим PE, а запись пересылки для этой метки должна указывать, что пакеты с такой меткой не пересылаются в сегмент Ethernet, куда была распространена эта метка.

Правила включения метки ESI в пакет BUM входным PE в режиме All-Active приведены ниже.

  • Входной узел PE, на являющийся DF, должен включать метку ESI, распространяемую выходным PE DF, в копию передаваемого им пакета BUM.

  • Входному узлу PE (DF или не DF) следует включать метку ESI, распространяемую каждым выходным PE, не являющимся DF, в копию передаваемого им пакета BUM.

Ниже приведено правило включения метки ESI в пакет BUM входным PE в режиме Single-Active.

  • Входному узлу PE DF следует включать метку ESI, распространяемую выходным PE, в копию передаваемого им пакета BUM.

В обоих режимах All-Active и Single-Active входному PE недопустимо включать метку ESI в копию пакета BUM, передаваемого выходному узлу PE, не подключённому к сегменту ES, через который пакет BUM попал в EVI.

В качестве примера рассмотрим PE1 и PE2 с многодомными подключениями к CE1 в сегменте ES1, работающими в режиме All-Active. Предположим, что PE1 использует LSP P2P или MP2P для передачи пакетов PE2. Пусть PE1 не является DF для VLAN1, а PE2 служит DF для VLAN1 и PE1 получает пакет BUM от CE1 в VLAN1 сегмента ES1. В этом случае PE2 распространяет маршрут Inclusive Multicast Ethernet Tag для VLAN1, соответствующей экземпляру EVPN. Когда PE1 передаёт полученный от CE1 пакет BUM, он должен сначала втолкнуть в стек MPLS метку ESI, которую PE2 распространил для ES1. Затем он должен втолкнуть в стек MPLS метку MPLS, распространённую PE2 в маршруте Inclusive Multicast Ethernet Tag для VLAN1. Полученный пакет инкапсулируется в стек меток LSP P2P или MP2P для передачи пакета PE2. Когда PE2 получает этот пакет, он определяет по верхней метке MPLS набор ESI, в которые он будет реплицировать пакет после удаления меток LSP P2P или MP2P. Если следующей является метка ESI, назначенная PE2 для ES1, то PE2 недопустимо пересылать пакет в ES1. Если следующей является метка ESI, не назначенная PE2, то PE2 должен отбросить пакет. Следует отметить, что в этом случае при получении PE2 пакета BUM для VLAN1 от CE1 ему следует инкапсулировать пакет с меткой ESI, полученной от PE1, при передаче его PE1, чтобы избежать временных петель в случае отказа, который влияет на ES1 (например, отказ порта или канала).

8.3.1.2. P2MP MPLS LSP

PE в режиме All-Active, не являющиеся DF и применяющие P2MP LSP для передачи трафика BUM анонсируют назначенную восходящим направлением метку ESI в наборе маршрутов Ethernet A-D на ES для своего общего подключённого сегмента ES. Эта метка назначается восходящим PE, анонсирующим маршрут. Метка должна программироваться другими PE, которые подключены к ESI, анонсируемому в маршруте, в контексте пространства меток для анонсирующего PE. Кроме того, запись пересылки для этой метки должна приводить к тому, что пакеты с этой меткой не пересылаются в сегмент Ethernet, для которого распространена метка. Эта метка должна также программироваться другими PE, которые импортируют маршрут, но не подключены к ESI, анонсируемому в маршруте, в контексте пространства меток анонсирующего PE. Кроме того, запись пересылки для этой метки должна приводить к выталкиванию (pop) метки без других действий.

DF PE в режиме Single-Active, использующим P2MP LSP для передачи трафика BUM, следует анонсировать назначенную восходящим направлением метку ESI в наборе маршрутов Ethernet A-D на ES для своего подключённого сегмента ES, как описано выше.

В качестве примера рассмотрим PE1 и PE2 с многодомным подключением к CE1 в ES1, работающие в режиме All-Active. Рассмотрим также PE3 одного из экземпляров EVPN в ES1. Предположим, что узел PE1, не являющийся DF, применяет P2MP MPLS LSP для передачи пакетов BUM. Когда PE1 передаёт пакет BUM, полученный от CE1, он должен сначала втолкнуть (push) в стек MPLS метку ESI, назначенную для ESI, где был получен пакет. Результирующий пакет далее инкапсулируется в стек меток P2MP MPLS, требуемый для передачи пакета другим PE. Выталкивание на предпоследнем этапе должно быть отключено в P2MP LSP, используемых в транспортной инфраструктуре MPLS для EVPN. Когда PE2 получит этот пакет, он декапсулирует верхнюю метку MPLS и перешлёт пакет с использованием контекста пространства меток, определяемого верхней меткой. Если следующей является метка ESI, назначенная PE1 для ES1, тогда PE2 недопустимо пересылать пакет в ES1.Когда PE3 получит этот пакет, он декапсулирует верхнюю метку MPLS и перешлёт пакет, используя контекст пространства меток, определяемый верхней меткой. Если следующей является метка ESI, назначенная PE1 для ES1 и PE3 не подключён к ES1, тогда PE3 должен вытолкнуть метку и лавинно разослать пакет через все локальные ESI в этом экземпляре EVPN. Нужно отметить, что при передаче узлом PE2 кадра BUM через P2MP LSP, следует инкапсулировать кадр с меткой ESI, даже если этот узел служит DF для данной VLAN, чтобы избежать временных петель в случае отказа, который может влиять на ES1 (например, отказ порта или канала).

8.4. Псевдонимы и резервный путь

В случае, когда CE подключён к нескольким PE, с использованием группы агрегирования (Link Aggregation Group или LAG) с избыточностью All-Active, возможно, что лишь один PE узнает набор MAC-адресов, связанных с трафиком от CE. Это ведёт к ситуации, когда удалённые PE получают маршруты MAC/IP Advertisement для этих адресов от одного PE даже при подключении к многодомному сегменту нескольких PE. В результате удалённые PEs не смогут эффективно распределить нагрузку между узлами PE, подключёнными к многодомному сегменту Ethernet. Это может возникать, например, когда PE выполняют обучение в плоскости данных при доступе, а функция распределения нагрузки в CE хэширует трафик с заданного MAC-адреса отправителя в один узел PE. Другой случай возникает, когда PE полагаются на обучение в плоскости управления на доступе (например, через ARP), поскольку трафик ARP будет хэшироваться одним каналом в LAG.

Для решения этой проблемы в EVPN введена концепция псевдонимов (aliasing), обеспечивающая PE возможность сигнализировать свою доступность для экземпляра EVPN в данном ES даже без изучения MAC-адресов из EVI/ES. Для этого служит маршрут Ethernet A-D для EVI. Удалённому PE, получающему маршрут MAC/IP Advertisement с незарезервированным ESI, следует считать анонсированный MAC-адрес доступным через все PE, анонсировавшие доступность EVI/ES для этого MAC-адреса через комбинацию маршрута Ethernet A-D на EVI для EVI/ES (и тега Ethernet, если это применимо) и Ethernet A-D на ES для ES со сброшенным (0) битом Single-Active в флагах расширенной группы ESI Label.

Отметим, что маршрут Ethernet A-D для EVI может быть получен удаленным PE до получения набора маршрутов Ethernet A-D для ES. Поэтому маршрут Ethernet A-D для EVI недопустимо применять для пересылки трафика удаленным PE, пока он не получит маршруты Ethernet A-D для ES.

Резервный путь является тесно связанным решением, но применяется в режиме Single-Active. В этом случае PE также анонсирует свою доступность для данного EVI/ES, применяя ту же комбинацию маршрутов Ethernet A-D для EVI и Ethernet A-D для ES, что указана выше, но с установленным (1) битом Single-Active в флагах расширенной группы ESI Label. Удалённому PE, получающему маршрут MAC/IP Advertisement с незарезервированным ESI, следует считать анонсированный MAC-адрес доступным через любой PE, анонсировавший эту комбинацию маршрутов, а также ему следует установить резервный путь для этого MAC-адреса.

8.4.1. Создание маршрута Ethernet A-D на экземпляр EVPN

В этом параграфе описаны процедуры создания маршрута Ethernet A-D на экземпляр EVPN (EVI), который применяется для псевдонима (см. выше). Поддержка этого маршрута необязательна.

Отличитель маршрута (RD) должен устанавливаться в соответствии с 7.9. Назначение RD для MAC-VRF.

Идентификатор сегмента Ethernet (ESI) должен быть 10-октетным значением, как описано в разделе 5. Сегмент Ethernet. Маршрут Ethernet A-D не требуется при Segment Identifier = 0.

Ethernet Tag ID — это идентификатор тега Ethernet в сегменте Ethernet. Его значением может быть 12-битовый идентификатор VLAN ID, занимающий 12 младших битов (старшие 20 битов сбрасываются в 0), или другой тег Ethernet, используемый EVPN. Для него можно установить принятый по умолчанию тег Ethernet для сегмента Ethernet или 0.

Отметим, что сказанное выше позволяет анонсировать маршрут Ethernet A-D с одним из указанных ниже уровней детализации:

  • Один маршрут Ethernet A-D на пару <ESI, Ethernet Tag ID> в MAC-VRF. Это применимо при использовании узлом PE размещения на основе MPLS с трансляцией VID и может быть применимо при использовании PE размещения по MAC-адресам с трансляцией VID.

  • Один маршрут Ethernet A-D для каждого <ESI> в MAC-VRF (где Ethernet Tag ID = 0). Это применимо при использовании узлом PE размещения по MAC или MPLS без трансляции VID.

Использование метки MPLS описано в разделе 14. Распределение нагрузки для индивидуальных пакетов.

Поле Next Hop атрибута MP_REACH_NLRI из маршрута должно содержать адрес IPv4 или IPv6 анонсирующего PE.

Маршрут Ethernet A-D должен содержать один или несколько атрибутов RT, как указано в 7.10. Цели маршрутов.

8.5. Выбор DF

Рассмотрим CE, который является хостом или маршрутизатором с прямыми подключениями к нескольким PE в экземпляре EVPN данного сегмента Ethernet. В сегменте Ethernet может быть задан один или несколько тегов Ethernet. В этом примере лишь один из узлов PE, назначенный пересылающим (Designated Forwarder или DF), отвечает за указанные ниже действия.

  • Передача группового и широковещательного трафика с данным тегом Ethernet из конкретного сегмента Ethernet в CE.

  • Лавинная рассылка неизвестного индивидуального трафика (трафика, для которого PE не знает MAC-адрес получателя) с данным тегом Ethernet из конкретного сегмента Ethernet узлу CE, если среда требует этого.

Отметим, что выбор DF с детализацией <ES, VLAN> или <ES, VLAN bundle> для трафика BUM принят по умолчанию в данной спецификации.

CE всегда передаёт пакеты конкретного потока по одному каналу к PE. Например, если CE является хостом, он, как отмечено выше, считает набор каналов, используемых для доступа к узлам PE группой агрегирования (LAG). CE применяет локальную функцию хэширования для отображения потоков трафика в каналы LAG.

Если сеть мостов подключена к множеству PE в сети EVPN через коммутаторы, поддержка избыточности All-Active требует соединения сети мостов с двумя или более PE с применением LAG.

Если сеть мостов не соединена с узлами PE через LAG, лишь один из каналов между сетью мостов и PE должен быть активным для данной пары <ES, VLAN> или <ES, VLAN bundle>. В этом случае набор маршрутов Ethernet A-D для ES, анонсируемый каждым PE, должен иметь установленный (1) бит Single-Active в флагах расширенной группы ESI Label.

Принятая по умолчанию процедура выбора DF с детализацией <ES, VLAN> для службы на основе VLAN или <ES, VLAN bundle> для службы VLAN-Aware Bundle называется «нарезкой сервиса» (service carving). При таком выделении можно выбрать несколько DF на сегмент Ethernet (по одному на VLAN или VLAN bundle), чтобы распределять нагрузку многоадресного трафика в данный сегмент. Процедуры распределения нагрузки равномерно делят пространство VLAN в ES между PE и каждый PE служит DF для отдельных (не пересекающихся) VLAN или VLAN bundle в данном ES. Процедура «нарезки» описана ниже.

  1. Когда узел PE обнаруживает ESI подключённого сегмента Ethernet, он анонсирует маршрут Ethernet Segment со связанным атрибутом расширенной группы ES-Import.

  2. Затем PE запускает таймер (по умолчанию на 3 секунды), чтобы разрешить получение маршрутов Ethernet Segment от других узлов PE, подключённых к тому же сегменту Ethernet. Значение таймера следует задавать одинаковым для всех PE, подключённых к одному сегменту Ethernet.

  3. По завершении отсчёта таймера каждый PE создаёт список адресов IP всех узлов PE, подключённых к сегменту Ethernet (включая себя) в порядке роста числовых значений. Адреса IP для этого списка извлекаются из поля Originating Router’s IP address в анонсированном маршруте Ethernet Segment. Затем каждому PE назначается номер, указывающий его позицию в списке (начиная с 0 для PE с наименьшим численным значением адреса IP. Номера служат для выбора PE на роль DF для данного экземпляра EVPN в сегменте Ethernet по приведённым ниже правилам.

    В предположении группы резервирования из N узлов PE для службы на основе VLAN узел PE с номером i будет DF для <ES, VLAN V>, когда (V mod N) = i. Для службы VLAN-Aware Bundle при делении по модулю должно применяться наименьшее значение VLAN в группе на данном ES.

    Следует отметить, что поле Originating Router’s IP address в маршруте Ethernet Segment для получения IP-адреса PE должно содержать упорядоченный список, позволяющий узлу CE быть многодомным в разных AS, если такая потребность когда-нибудь возникнет.

  4. Узел PE, выбранный в качестве DF для данной пары <ES, VLAN> или <ES, VLAN bundle>, разблокирует многоадресный трафик для данной VLAN или VLAN bundle в соответствующем сегменте ES. Отметим, что DF PE разблокирует многоадресный трафик, выходящий в сегмент. Остальные (не DF) PE продолжат отбрасывать многоадресный трафик в выходном направлении к <ES, VLAN> или <ES, VLAN bundle>.

    При отказе порта или канала затронутый узел PE отзывает свой маршрут Ethernet Segment. Это заново запустит процедуру нарезки сервиса на всех PE в группе резервирования. При отказе узла PE, вводе или выводе PE из эксплуатации узлы PE снова запустят процедуру нарезки сервиса. В случае многодомного режима Single-Active при переносе службы с одного PE в группе резервирования на другой, который в конечном итоге будет выбран DF для службы, следует инициировать уведомление об очистке MAC-адреса в соответствующий сегмент Ethernet. Это можно сделать, например, с помощью обновления new в протоколе IEEE 802.1ak Multiple VLAN Registration Protocol (MVRP).

8.6. Взаимодействие с однодомными PE

Будем называть PE, поддерживающие лишь однодомные устройства CE, однодомными PE. Для таких PE упомянутые выше многодомные процедуры можно опустить, однако для полной совместимости однодомных PE с многодомными следует поддерживать на однодомных PE некоторые из описанных выше многодомных процедур, указанные ниже.

  • Процедуры обработки маршрутов Ethernet A-D для быстрого схождения (8.2. Быстрое схождение), позволяющие однодомным PE воспользоваться преимуществами быстрого схождения.

  • Процедуры обработки маршрутов Ethernet A-D для псевдонимов (8.4. Псевдонимы и резервный путь), позволяющие однодомным PE воспользоваться преимуществами распределения нагрузки.

  • Процедуры обработки маршрутов Ethernet A-D для резервного пути (8.4. Псевдонимы и резервный путь), позволяющие однодомным PE воспользоваться преимуществами улучшенного схождения.

9. Определение доступности индивидуального MAC-адреса

PE пересылают полученные пакеты по MAC-адресам получателей. Это предполагает способность PE изучать пути достижения индивидуальных MAC-адресов получателей. Имеется два варианта изучения MAC-адресов — локальное и удалённое.

9.1. Локальное обучение

Конкретный узел PE должен быть способен изучать MAC-адреса от подключённых к нему CE. Это называется локальным обучением.

Узлы PE в конкретном экземпляре EVPN должны поддерживать обучение в локальной плоскости данных по стандартным процедурам IEEE Ethernet. Узел PE должен быть способен изучать MAC-адреса в плоскости данных при получении из сети CE:

  • запросов DHCP;

  • ARP Request для своего MAC;

  • ARP Request для партнёра.

Дополнительно PE могут изучать MAC-адреса от CE в плоскости управления или через интеграцию плоскости поддержки (management) между PE и CE.

Имеются приложения, в которых MAC-адрес, доступный через данный PE в локально подключённом сегменте (например, с ESI X), может перемещаться, становясь доступным через иной PE в другом сегменте (например, с ESI Y). Это называется мобильностью MAC (MAC Mobility), процедуры для этого описаны в 15. Мобильность MAC.

9.2. Удалённое обучение

Конкретный узел PE должен быть способен определить, как передать трафик по MAC-адресу, принадлежащему CE, подключённым к другим PE, или находящемуся за ними, т. е. удаленным CE или находящимся за ними хостам. Такие MAC-адреса называются здесь удалёнными.

Этот документ требует от PE изучать удалённые MAC-адреса в плоскости управления. Для этого каждый узел PE анонсирует MAC-адреса, узнанные от локально подключённых CE в плоскости управления, всем другим PE этого экземпляра EVPN, используя MP-BGP и, в частности, маршрут MAC/IP Advertisement.

9.2.1. Создание анонса адреса MAC/IP

Протокол BGP расширен для анонсирования MAC-адресов с использованием типа маршрута MAC/IP Advertisement в EVPN NLRI.

Значение RD должно быть установлено в соответствии с 7.9. Назначение RD для MAC-VRF. Для Ethernet Segment Identifier устанавливается 10-октетное значение ESI, описанное в 5. Сегмент Ethernet. Ethernet Tag ID может иметь значение 0 или представлять действительный тег Ethernet Tag ID, когда имеется несколько таблиц мостов в MAC-VRF (т. е. PE нужно поддерживать сервис VLAN-Aware Bundle для этого EVI).

Когда Ethernet Tag ID в NLRI имеет ненулевое значение для конкретного домена широковещания, это может быть значение Ethernet для CE (например, VLAN ID у CE) или провайдера EVPN (например VLAN ID провайдера). Последний вариант применяется, когда теги Ethernet у CE (например, VLAN ID у CE) для конкретного домена широковещания различаются у разных CE.

Поле MAC Address Length указывается в битах и имеет значение 48. Иные значения размера MAC-адреса выходят за рамки этого документа. Кодирование MAC-адреса должно использовать 6-октетный формат, заданный в [802.1Q] и [802.1D-REV].

Поле IP Address не обязательно. По умолчанию в поле IP Address Length установлено значение 0 и IP Address не включается в маршрут. Если нужно анонсировать действительный адрес IP, он кодируется в маршруте. При наличии IP-адреса поле IP Address Length указывает его размер в битах (32 или 128). Другие значения IP Address Length выходят за рамки этого документа. IP-адрес должен быть задан 4 октетами для IPv4 или 16 октетами для IPv6. Поля Length в EVPN NLRI (размер в октетах, как указано в 7. Маршруты BGP EVPN) достаточно для определения наличия и формата адреса IP в маршруте как для IPv4, так и для IPv6.

Поле MPLS Label1 кодируется как 3 октета, где старшие 20 битов содержат значение метки. Метка MPLS Label1 должна назначаться в нисходящем направлении и связывается с MAC-адресом анонсируемым PE. Анонсирующий PE использует эту метку при получении инкапсулированного в MPLS пакета для пересылки на по MAC-адресу получателя в сторону CE. Процедуры пересылки заданы в разделах 13 и 14.

PE может анонсировать одну и ту же метку EVPN для всех MAC-адресов в данном экземпляре MAC-VRF. Назначение такой метки называется назначением метки для MAC-VRF. Как вариант, PE может анонсировать уникальную метку EVPN для пары <MAC-VRF, тег Ethernet>. Это называется назначением метки <MAC-VRF, тег Ethernet>. В качестве третьего варианта PE может анонсировать уникальную метку EVPN для пары <ESI, тег Ethernet>. Это называется назначением метки <ESI, тег Ethernet>. Четвёртым вариантом является анонсирование узлом PE уникальной метки EVPN для MAC-адреса. Это называют назначением метки для MAC. У всех этих вариантов есть свои недостатки и выбор конкретного метода определяется локально узлом PE, от которого исходит маршрут.

Назначение по метке MAC-VRF требует наименьшего числа меток EVPN, но нужен роиск MAC в дополнение к поиску MPLS для пересылки на выходном PE. С другой стороны, уникальная метка на <ESI, тег Ethernet> или MAC позволяет выходному PE пересылать пакеты, полученные от другого PE, подключённому CE после поиска лишь по метке MPLS (без поиска MAC). Это включает возможность выполнять подходящую трансляцию VLAN ID на выходе к CE.

Поле MPLS Label2 не обязательно и при наличии кодируется 3 октетами, 20 старших битов которых содержат метку. В поле Next Hop атрибута MP_REACH_NLRI для маршрута должен быть помещён адрес анонсирующего PE (IPv4 или IPv6).

Анонс BGP для маршрута MAC/IP Advertisement должен содержать хотя бы один атрибут RT. Значения RT могут настраиваться (как в IP VPN) или выводиться автоматически из Ethernet Tag ID в случае Unique VLAN, как описано в параграфе 7.10.1. Автоматический вывод из Tag ID.

Следует отметить, что этот документ не требует от узлов PE создания состояний пересылки для удалённых MAC, когда те получены из плоскости управления. Вопрос создания таких состояний решается локально.

9.2.2. Распознавание маршрута

Если поле Ethernet Segment Identifier в полученном маршруте MAC/IP Advertisement имеет зарезервированное значение ESI (0 или MAX-ESI), то при решении PE установить состояние пересылки для соответствующего MAC-адреса оно должно основываться только на маршруте MAC/IP Advertisement.

Если поле Ethernet Segment Identifier в полученном маршруте MAC/IP Advertisement имеет незарезервированное значение ESI и принимающий узел PE локально подключён к тому же ESI, тогда PE не меняет своё состояние пересылки на основе полученного маршрута. Это гарантирует предпочтение локальных маршрутов перед удалёнными.

Если поле Ethernet Segment Identifier в полученном маршруте MAC/IP Advertisement имеет незарезервированное значение ESI и принимающий узел PE решит установить состояние пересылки для соответствующего MAC-адреса, это должно происходить при получении как маршрута MAC/IP Advertisement, так и связанного набора маршрутов Ethernet A-D для ES. Зависимость установки маршрута MAC от маршрутов Ethernet A-D для ES нужна для гарантированного предотвращения случайной установки маршрутов MAC во время массового отзыва.

Для иллюстрации этого рассмотрим два PE (PE1 и PE2) соединённые с многодомным сегментом Ethernet (ES1). Предполагается режим избыточности All-Active. Данный MAC-адрес M1 известен PE1, но не PE2. На PE3 могут возникать показанные ниже состояния.

T1

Когда получен маршрут MAC/IP Advertisement от PE1 и наборы маршрутов Ethernet A-D для ES и Ethernet A-D для EVI от PE1 и PE2, узел PE3 может пересылать трафик для M1 как PE1, так и PE2.

T2

Если после T1 узел PE1 отзовёт свой набор маршрутов withdraws Ethernet A-D для ES, узел PE3 будет пересылать трафик для M1 только PE2.

T2′

Если после T1 узел PE2 отзовёт свой набор маршрутов withdraws Ethernet A-D для ES, узел PE3 будет пересылать трафик для M1 только PE1.

T2»

Если после T1 узел PE1 отзовёт свой маршрут MAC/IP Advertisement, узел PE3 будет считать трафик для M1 направленным по неизвестному индивидуальному адресу.

T3

PE2 анонсирует маршрут MAC для M1, а затем PE1 отзывает свой маршрут MAC для M1. Узел PE3 продолжает пересылать трафик для M1 обоим узлам PE1 и PE2. Иными словами, несмотря на отзыв M1 узлом PE1, PE3 пересылает трафик для M1 обоим узлам PE1 PE2. Это связано с тем, что поток от CE, ведущий к хешированию трафика для M1 узлом PE1, может быть прерван, что приведёт к устареванию M1 на PE1, однако M1 может быть доступен обоим узлам PE1 и PE2.

10. ARP и ND

Поле IP Address в маршруте MAC/IP Advertisement может содержать один из адресов IP, связанных с MAC-адресом. Это можно использовать для минимизации лавинной рассылки сообщений ARP или ND (Neighbor Discovery) через сеть MPLS и удалённые CE. Минимизируется также обработка сообщение ARP (или ND) на конечных станциях (хостах), подключённых к сети EVPN. Узел PE может узнать адрес IP, связанный с MAC-адресом, из плоскости управления или данных между CE и PE или путём отслеживания некоторых сообщений от CE или к нему. Когда PE знает адрес IP, связанный с MAC-адресом локально подключённого CE, он может анонсировать этот адрес другим PE путём включения в маршрут MAC/IP Advertisement. Это может быть адрес IPv4, представленный 4 октетами, или IPv6 из 16 октетов. Для ARP и ND в поле IP Address Length должно устанавливаться значение 32 при адресе IPv4 и 128 для IPv6.

Если с MAC-адресом связано несколько адресов IP, маршрут MAC/IP Advertisement должен создаваться для каждого адреса IP. Например, это могут быть адреса IPv4 и IPv6 для одного MAC-адреса при использовании двойного стека IP. Когда привязка адреса IP к MAC-адреса удаляется, маршрут MAC/IP Advertisement для этого IP должен отзываться.

Отметим, что маршрут только для MAC может анонсироваться вместе с маршрутом MAC/IP, но независимо от него, в случаях, когда изучение MAC через сеть или узел выполняется в плоскости данных и не зависит от отслеживания ARP для создания маршрута MAC/IP. В таких случаях при завершении срока действия записи ARP и отзыве MAC/IP информация MAC не будет теряться. Когда MAC/IP изучается в плоскости поддержки (management) или управления, передающий узел PE может создавать и анонсировать лишь маршрут MAC/IP. Если принимающий PE получает оба маршрута MAC и MAC/IP, то при получении отзыва маршрута MAC/IP он должен удалить соответствующую запись из таблицы ARP, но не запись для MAC из таблицы MAC-VRF, если не получен отзыв и для маршрута MAC.

Когда PE получает ARP Request для адреса IP от CE и у этого PE есть привязка MAC-адреса к IP, узлу PE следует выступить посредником ARP, отвечая на ARP Request.

10.1. Принятый по умолчанию шлюз

Когда PE нужно выполнить пересылку между подсетями, каждая из которых представляет свой домен широковещания (например, другую сеть VLAN), пересылка происходит на уровне L3 и выполняющий такую функцию узел PE называется принятым по умолчанию шлюзом (default gateway) для экземпляра EVPN. В этом случае при получении PE запроса ARP для IP-адреса, настроенного как адрес принятого по умолчанию шлюза, узел PE возвращает ARP Reply.

Каждый узел PE, служащий принятым по умолчанию шлюзом для данного экземпляра EVPN, может анонсировать в плоскости управления EVPN свой MAC-адрес этого шлюза, используя маршрут MAC/IP Advertisement, и каждый такой PE указывает, что маршрут связан с заданным по умолчанию шлюзом. Для этого нужно включать в маршрут расширенную группу Default Gateway, определённую в параграфе 7.8. Расширенная группа Default Gateway. В анонсах маршрутов MAC с расширенной группой Default Gateway устанавливается ESI = 0.

В поле IP Address маршрута MAC/IP Advertisement устанавливается IP-адрес принятого по умолчанию шлюза этой подсети (например, экземпляра EVPN). Для данной подсети (например, VLAN или экземпляр EVPN) IP-адрес принятого по умолчанию шлюза совпадает на всех участвующих PE. Включение этого адреса IP позволяет принимающему PE сравнить заданный у него IP-адрес шлюза по умолчанию с полученным в маршруте MAC/IP Advertisement для этой подсети (или экземпляра EVPN), при наличии расхождений PE следует уведомить оператора и записать ошибку в системный журнал (log).

Если заранее не известно (из не описанных в документе источников), что все PE в данном экземпляре EVPN выступают принятыми по умолчанию шлюзами для этого экземпляра EVPN, должна быть установлена действительная метка MPLS для нисходящего направления (downstream).

Кроме того, даже если все PE данного экземпляра EVPN выступают принятыми по умолчанию шлюзами для этого экземпляра EVPN, но не у всех PE имеется достаточно (маршрутной) информации для маршрутизации между подсетями для всего трафика между подсетями из подсети, связанной с экземпляром EVPN, тогда при анонсировании таким PE в плоскости управления EVPN MAC-адреса своего шлюза по умолчанию в маршруте MAC/IP Advertisement с указанием связанного с маршрутом шлюза по умолчанию, этот маршрут должен включать действительную метку для нисходящего направления.

Если все PE данного экземпляра EVPN выступают принятыми по умолчанию шлюзами для этого экземпляра EVPN и используется один и тот же MAC-адрес шлюза по умолчанию на всех, такие анонсы не требуются. Однако при наличии у каждого шлюза своего MAC-адерса, все шлюза должны знать MAC-адреса других шлюзов и анонсы нужны. Это называется псевдонимами MAC-адреса (MAC address aliasing), поскольку один принятый по умолчанию шлюз может быть представлен несколькими адресами MAC.

Каждый PE, получающий такой маршрут и импортирующий его по процедурам этого документа, отвечает на полученные сообщения ARP Requests, как описано в этом параграфе.

Каждый PE в роли заданного по умолчанию шлюза для данного экземпляра EVPN при получении и импорте такого маршрута по процедурам этого документа должен создать состояние пересылки MAC, позволяющее ему выполнять пересылку IP для пакетов, направленных по MAC-адресу из маршрута.

11. Обработка трафика с множеством получателей

Данному PE нужны процедуры для передачи широковещательного и группового трафика, полученного от CE с данным тегом Ethernet (VLAN) в данном экземпляре EVPN, всем другим PE, охватывающим этот тег Ethernet (VLAN) в данном экземпляре EVPN. В некоторых ситуациях, как описано в разделе 12. Обработка индивидуальных пакетов неизвестных получателей, PE может также потребоваться лавинная рассылка индивидуального трафика для неизвестные адресатов другим PE.

Узлы PE в конкретном экземпляре EVPN могут применять репликацию на входе, P2MP LSP или MP2MP LSP для передачи трафика BUM другим PE.

Каждый узел PE должен для указанного выше анонсировать маршрут Inclusive Multicast Ethernet Tag. В последующих параграфах рассмотрены процедуры создания маршрута Inclusive Multicast Ethernet Tag.

11.1. Создание маршрута Inclusive Multicast Ethernet Tag

Отличитель маршрута RD должен быть установлен в соответствии с параграфом 7.9. Назначение RD для MAC-VRF.

Ethernet Tag ID — это идентификатор тега Ethernet, который может иметь значение 0 или действительного тега Ethernet.

В поле Originating Router’s IP Address должен быть указан IP-адрес PE, которому следует быть общим для всех EVI на PE (например, этом может быть адрес loopback-интерфейса PE). Поле IP Address Length указывает размер в битах.

Поле Next Hop атрибута MP_REACH_NLRI в маршруте должно содержать адрес анонсирующего PE (IPv4 или IPv6).

Анонс BGP для маршрута Inclusive Multicast Ethernet Tag должен включать хотя бы 1 атрибут Route Target (RT). Назначение RT должно выполняться по процедуре из параграфа 7.10. Цели маршрутов.

11.2. Идентификация P-Tunnel

Для идентификации туннеля P-tunnel, служащего для пересылки трафика BUM, маршрут Inclusive Multicast Ethernet Tag должен включать атрибут Provider Multicast Service Interface (PMSI), как укащано в [RFC6514]. В зависимости от технологии, применяемой в P-tunnel для экземпляра EVPN на PE, атрибут PMSI Tunnel маршрута Inclusive Multicast Ethernet Tag создаётся, как указано ниже.

  • Если создавший анонс узел PE использует дерево P-multicast для P-tunnel в EVPN, атрибут PMSI Tunnel должен содержать отождествление дерево (Отметим, что PE может создать отождествление до фактического создания экземпляра дерева).

  • Узел PE, использующий дерево P-multicast для P-tunnel, может агрегировать несколько экземпляров EVPN (EVI), присутствующих на PE, в одно дерево. В этом случае дополнительно к отождествлению дерева атрибут PMSI Tunnel должен включать назначенную в восходящем направлении метку MPLS, которую PE однозначно привязал к EVI, связанному с обновлением (как указано его атрибутами RT).

    Если PE уже анонсировал маршруты Inclusive Multicast Ethernet Tag для двух или более EVI, которые теперь хочет объединить, он должен анонсировать эти маршруты заново. Анонсируемые повторно маршруты должны совпадать с исходными, за исключением атрибута PMSI Tunnel и содержащейся в нем метки.

  • Если создавший анонс узел PE использует использует репликацию на входе для P-tunnel в EVPN, маршрут должен включать атрибут PMSI Tunnel с Tunnel Type = Ingress Replication и Tunnel Identifier с маршрутизируемым адресом PE. Атрибут PMSI Tunnel должен содержать назначенную в нисходящем направлении метку MPLS. Эта метка служит для демультиплексирования трафика EVPN BUM, полученного PE через туннель MP2P.

  • Флаг Leaf Information Required в атрибуте PMSI Tunnel должен быть сброшен (0), а при получении должен игнорироваться.

12. Обработка индивидуальных пакетов неизвестных получателей

Процедуры этого документа не требуют от узлов PE лавинной рассылки индивидуального трафика с неизвестными адресатами другим PE. Если PE узнают MAC-адреса CE из протокола плоскости управления, они могут распространять MAC-адреса через BGP и все индивидуальные адреса MAC будут известны до того, как появится трафик для них.

Если узел PE не знает MAC-адрес получателя, он может разослать пакет лавинно. При этом необходимо учитывать «расщепление горизонта», как описано ниже. Принципы, лежащие в основе описываемых процедур, заимствованы из правил пересылки с расщеплением горизонта в решениях VPLS [RFC4761] [RFC4762]. Когда PE, способный к лавинной рассылке (скажем, PEx) получает кадр с неизвестным MAC-адресом получателя, он применяет лавинную рассылку. Если кадр получен от присоединённого CE, узел PEx должен передать копию кадра в каждый сегмент Ethernet (с тем же EVI), для которого он служит DF, за исключением сегмента Ethernet, откуда получен кадр. Кроме того, узел PE должен разослать кадр всем другим PE, участвующим в экземпляре EVPN. Если же кадр получен от другого PE (скажем, PEy), PEx должен передать копию пакета в каждый сегмент Ethernet (с тем же EVI), для которого он служит DF. PEx недопустимо передавать кадр другим PE, поскольку узел PEy уже сделал это. Правила пересылки с расщеплением горизонта применяются к пакетам с неизвестными MAC-адресами.

Решение о применении лавинной рассылки пакетов для неизвестных MAC-адресов зависит от способа изучения адресов между узлами CE и узлами PE.

Узлы PE в конкретном экземпляре EVPN могут применять репликацию на входе, используя RSVP-TE P2P LSP или LDP MP2P LSP для передачи индивидуального трафика неизвестных получателей другим PE. Для этого можно также использовать RSVP-TE P2MP или LDP P2MP.

12.1. Входная репликация

При использовании репликации на входе атрибут P-tunnel в маршрутах Inclusive Multicast Ethernet Tag для экземпляра EVPN указывает нисходящую метку, которую другие PE могут применять при передаче трафика BUM для данного экземпляра EVPN этому PE.

Узел PE, получивший пакет с такой меткой MPLS, должен считать его пакетом BUM. Если MAC-адрес получателя является индивидуальным, PE должен считать пакет индивидуальным с неизвестным адресатом.

12.2. P2MP MPLS LSP

Процедуры использования P2MP LSP очень похожи на процедуры VPLS, описанные в [RFC7117]. Атрибут P-tunnel, используемый PE для передачи трафика BUM для конкретного экземпляра EVPN, анонсируется в маршруте Inclusive Multicast Ethernet Tag, как описано в разделе 11. Обработка трафика с множеством получателей.

Атрибут P-tunnel задаёт идентификатор P2MP LSP. Это эквивалент дерева Inclusive, описанного в [RFC7117]. Отметим, что множество тегов Ethernet, которые могут различаться в разных экземплярах EVPN, может применяться в одном P2MP LSP с использованием меток восходящего направления [RFC7117]. Это эквивалент дерева Aggregate Inclusive [RFC7117]. При использовании P2MP LSP для лавинной рассылки трафика неизвестных индивидуальных получателей порядок пакетов может меняться.

Узел PE, получающий пакет по пути P2MP LSP, заданному в атрибуте PMSI Tunnel, должен считать его пакетом BUM. Если MAC-адрес получателя является индивидуальным, PE должен считать пакет индивидуальным с неизвестным адресатом.

13. Пересылка индивидуальных пакетов

В этом разделе описаны процедуры для пересылки индивидуальных пакетов узлами PE, когда такие пакеты получены от напрямую подключённых CE или других PE.

13.1. Пересылка пакетов, полученных от CE

Когда узел PE получает пакет от CE с данным тегом Ethernet Tag ID, он должен сначала найти в пакете MAC-адрес отправителя. В некоторых средах со включённой защитой MAC адрес отправителя может служить для проверки отождествления хоста и и принятия решения о допуске трафика от этого хоста в сеть. Поиск MAC источника может также применяться для локального изучения MAC-адресов.

Если PE решает переслать пакет, он должен найти MAC-адрес получателя. Если PE получил анонс MAC для этого адреса получателя от одного или нескольких других PE или узнал его от присоединённых локально CE, этот MAC-адрес считается известным. Остальные MAC считаются неизвестными.

Для известного MAC-адреса узел PE пересылает пакет одному или нескольким удаленным PE или локально подключённому CE. При пересылке удалённому PE пакет инкапсулируется с меткой EVPN MPLS, анонсированной удаленным PE для этого MAC-адреса, в стек меток MPLS LSP для достижения удалённого PE.

Если MAC-адрес неизвестен и административная политика PE требует лавинной рассылки для неизвестных индивидуальных получателей, выполняются указанные ниже процедуры.

  • Узел PE должен лавинно разослать пакет другим PE. Сначала PE должен инкапсулировать пакет с меткой ESI MPLS, как указано в параграфе 8.3. Расщепление горизонта. При использовании репликации на входе пакет должен реплицироваться каждому удалённому PE с меткой VPN, являющейся меткой MPLS. Это метка MPLS, анонсируемая удаленным PE в атрибуте PMSI Tunnel маршрута Inclusive Multicast Ethernet Tag для <MAC-VRF> или комбинации <MAC-VRF, тег Ethernet>.

    Тег Ethernet в маршруте может совпадать с тегом Ethernet, связанным с интерфейсом, через который входной узел PE получил пакет. При использовании P2MP LSP пакет должен передаваться через P2MP LSP, в котором PE является корнем для тега Ethernet в экземпляре EVPN. При использовании одного P2MP LSP для всех тегов Ethernet все PE в экземпляре EVPN должны быть листьями P2MP LSP. Если применяются разные P2MP LSP для данного тега Ethernet в экземпляре EVPN, листьями P2MP LSP должны быть лишь PE с тем же тегом Ethernet. Пакеты должны инкапсулироваться в стек меток P2MP LSP.

Если MAC-адрес неизвестен и административная политика PE запрещает лавинную рассылку для неизвестных индивидуальных получателей, узел PE должен отбросить пакет.

13.2. Пересылка пакетов, полученных от удалённого PE

В этом параграфе описаны процедуры пересылки индивидуальных пакетов от удалённого PE известным и неизвестным адресатам.

13.2.1. Пересылка неизвестным индивидуальным адресатам

При получении узлом PE пакета MPLS от удалённого PE сначала обрабатывается стек меток MPLS, затем, если верхняя метка в стеке MPLS оказывается меткой P2MP LSP, связанного с экземпляром EVPN или (при репликации на входе) нисходящей меткой, анонсированной в атрибуте P-tunnel, и после выполнения процедуры расщепления горизонта применяются указанные ниже действия. 8.3:

  • Если PE служит DF для трафика BUM в конкретном наборе ESI для тега Ethernet, по умолчанию PE лавинно рассылает пакет этим ESI. Иными словами, по умолчанию PE предполагает, что для трафика BUM не требуется поиск MAC-адреса получателя. Как вариант, PE может выполнить такой поиск для лавинной рассылки пакета только части интерфейсов CE с таким тегом Ethernet. Например, PE может отказаться от пересылки пакетов BUM в некоторые сегменты Ethernet на основании административной политики, даже будучи DF для сегмента Ethernet.

  • Если PE не является DF ни в одном ESI для тега Ethernet, по умолчанию пакет отбрасывается.

13.2.2. Пересылка известным индивидуальным адресатам

Если верхняя метка MPLS оказывается меткой EVPN, заданной в анонсе индивидуального MAC, узел PE пересылает пакет на основе сведений CE next-hop, связанных с меткой, или выполняет поиск MAC-адреса получателя для пересылки пакета узлу CE.

14. Распределение нагрузки для индивидуальных пакетов

В этом параграфе рассмотрены процедуры распределения нагрузки при пересылке индивидуальных пакетов для известных адресатов многодомному CE.

14.1. Распределение трафика от PE к удаленным CE

При импорте удаленным PE маршрута MAC/IP Advertisement для данной пары <ESI, тег Ethernet> в MAC-VRF, узле должен проверить все импортируемые маршруты Ethernet A-D для данного ESI с целью определения параметром распределения нагрузки в сегменте Ethernet.

14.1.1. Режим избыточности Single-Active

Для данного ES при импорте удаленным PE набора маршрутов Ethernet A-D для ES хотя бы от одного PE с установленным флагом Single-Active в расширенной группе ESI Label удалённый узел PE должен сделать вывод, что ES работает в режиме избыточности Single-Active. Поэтому MAC-адрес будет доступен лишь через PE, анонсировавший соответствующий маршрут MAC/IP Advertisement, его называют основным (primary) PE. Другие PE, анонсирующие наборы маршрутов Ethernet A-D для ES в том же ES, обеспечивают резервные пути для этого ES на случая отказа основного PE и называются резервными (backup) PE. Следует отметить, что основным PE для данной пары <ES, VLAN> (или <ES, VLAN bundle>) является DF для этой пары <ES, VLAN> (или <ES, VLAN bundle>).

При отказе основного PE он может отозвать свой набор маршрутов Ethernet A-D на ES для затронутого сегмента ES до отзыва своего набора маршрутов MAC/IP Advertisement.

Если имеется лишь один резервный PE для данного ES, удалённый PE может использовать отзыв набора маршрутов Ethernet A-D для ES от основного PE с целью обновления записей пересылки для связанных адресов MAC, чтобы указать резервный PE. Когда резервный PE начинает изучать MAC-адреса своих подключённых ES, он начнёт передачу своих маршрутов MAC/IP Advertisement, пока отказавший узел PE отзывает свои. Эти минимизирует лавинные рассылки трафика в случаях отказа.

Если имеется несколько резервных PE для данного ES, удалённый PE должен использовать отзыв набора маршрутов Ethernet A-D для ES от основного PE с целью начать лавинную рассылку трафика для связанных MAC-адресов (коль скоро лавинная рассылка для неизвестных индивидуальных адресатов разрешена административно), поскольку нет возможности выбрать один резервный узел PE.

14.1.2. Режим избыточности All-Active

Если удалённый узел PE импортировал набор маршрутов Ethernet A-D для ES от одного или нескольких PE и ни один из маршрутов не имеет установленного (1) флага Single-Active в расширенной группе ESI Label, удалённый PE должен сделать вывод, что данные сегмент ES работает в режиме избыточности All-Active. Удалённому узлу PE, получившему маршрут MAC/IP Advertisement с нерезервным ESI, следует считать все анонсированные MAC-адреса доступными через все PE, которые анонсировали для этого MAC доступность EVI/ES через комбинацию маршрута Ethernet A-D на EVI для данного EVI/ES (и тега Ethernet, если это применимо) и маршрута Ethernet A-D на ES для данного сегмента ES. Удалённый PE должен использовать полученные маршруты MAC/IP Advertisement и Ethernet A-D на EVI/ES для создания набор следующих узлов (next hop) на пути к анонсированным MAC-адресам.

Каждый следующий узел (next hop) включает стек меток MPLS, который применяется выходным PE для пересылки пакета. Этот стек описан ниже.

  • Если next hop создаётся из маршрута MAC, должен применяться этот стек меток. Однако, если маршрута MAC для данного PE нет, next hop и стек меток MPLS создаются из маршрутов Ethernet A-D. Отметим, что последующее описание относится к определению стека меток для конкретного next hop на пути к данному PE, откуда удалённый PE получил и импортировал маршруты Ethernet A-D с теми же ESI и тегом Ethernet, какие указаны в анонсе MAC. Упомянутые ниже маршруты Ethernet A-D относятся к импортированным от данного PE.

  • Если набор маршрутов Ethernet A-D на ES для этого сегмента ES и маршрут Ethernet A-D для EVI существуют, лишь тогда используется метка из последнего.

Для объяснения рассмотрим узел CE (CE1) с подключением к двум PE (PE1 и PE2) на интерфейсе LAG (ES1), передающий пакеты с MAC-адресом источника MAC1 в VLAN1 (отображена на EVI1). Удалённый узел PE (PE3) способен узнать о доступности MAC1 от PE1 и PE2. Оба PE1 и PE2 могут анонсировать MAC1 в BGP, если они получали пакеты с MAC1 от CE1. Если это не так и MAC1 анонсирует лишь узел PE1, PE3 все равно будет считать MAC1 доступным через PE1 и PE2, поскольку оба анонсировали набор маршрутов Ethernet A-D на ES для сегмента ES1, а также маршрут Ethernet A-D на EVI для <EVI1, ES1>.

Стек меток MPLS для передачи пакетов узлу PE1 является стеком MPLS LSP для доступа к PE1 (на вершине стека), за которым следует метка EVPN анонсируемая PE1 для MAC от CE1. Стеком меток MPLS для передачи пакетов узлу PE2 является стек MPLS LSP для доступа к PE2 (на вершине стека), за которым следует метка MPLS из маршрута Ethernet A-D, анонсированного PE2 для <ES1, VLAN1>, если PE2 не анонсировал MAC1 через BGP. Назовём такой стек MPLS next hop.

Удалённый PE (PE3) может сейчас распределять трафик от своих CE, адресованный в CE1, между PE1 и PE2. PE3 может использовать кортеж сведений о потоке для хеширования трафика в один из MPLS next hop с целью распределения нагрузки для трафика IP. Кроме того, PE3 может распределять нагрузку по MAC-адресу отправителя.

Когда PE3 решит передать конкретный пакет узлу PE1 или PE2, он может выбрать один из возможных путей к конкретному удалённому PE, используя обычные процедуры MPLS. Например, если применяются туннели на основе RSVP-TE LSP и PE3 решает передать пакет PE1, тогда PE3 может выбрать из набора RSVP-TE LSP путь, где PE1 служит получателем.

Когда PE1 или PE2 получает пакет для CE1 от PE3 и его индивидуальный адресат известен, пакет пересылается CE1. Если это пакет BUM, пересылать его CE должен лишь один из узлов PE1 и PE2 — тот, который служит DF.

14.2. Распределение трафика между PE и локальным CE

На CE можно настроить более одного интерфейса для подключения к разным или одному PE с целью распределения нагрузки за счёт применения таких технологий, как LAG. PE и CE могут распределять трафик между интерфейсами с использованием одного из описанных ниже механизмов.

14.2.1. Обучение в плоскости данных

PE используют обучение в плоскости данных для локальных MAC-адресов, узнанных от локальных CE. Это позволяет узлам PE узнать конкретный MAC-адрес и связать его с один или несколькими интерфейсами, если технология между PE и CE разрешает несколько путей. PE могут распределять трафик для этого MAC-адреса между интерфейсами.

Способность CE распределять нагрузку, создаваемую на разных интерфейсах, зависит от реализации CE.

14.2.2. Обучение в плоскости управления

CE может быть хостом, анонсирующим с использованием протокола управления один MAC на всех интерфейсах. Это позволяет узлам PE узнать MAC-адрес хоста и связать его со всеми интерфейсами. Тогда PE могут распределять трафик для хоста между интерфейсами. Хост также может распределять трафик и получающий его узел PE использует для его пересылки процедуры EVPN.

15. Мобильность MAC

Данный хост или конечная станция (определяемые MAC-адресом) может перемещаться из одного сегмента Ethernet в другой. Это называется мобильностью или перемещением MAC (MAC Mobility или MAC move) и отличается от многодомной ситуации, где данный адрес MAC доступен через несколько PE для одного сегмента Ethernet. При перемещении MAC имеется два набора маршрутов MAC/IP Advertisement — по одному для каждого сегмента Ethernet — и MAC-адрес будет казаться доступным в каждом из этих сегментов.

Чтобы все PE экземпляра EVPN могли корректно определить текущее местоположение MAC-адреса, все анонсы о его доступности в прежнем сегменте Ethernet должны быть отозваны узлами PE, которые их анонсировали.

При использовании локального обучения в плоскости данных эти PE не могут определить перенос MAC-адреса в другой сегмент и получение маршрутов MAC/IP Advertisement с атрибутом расширенной группы MAC Mobility от других PE инициирует отзыв прежних анонсов. Если локальное обучение происходит в плоскости управления, оно само вызовет отзыв прежних анонсов узлами PE.

Когда данный MAC-адрес перемещался неоднократно, возможно, между одной парой сегментов Ethernet, может возникать множество отзывов и повторных анонсов. Чтобы все PE в экземпляре EVPN корректно получили сведения через инфраструктуру BGP, требуется добавить порядковый номер для атрибутов расширенной группы MAC Mobility. Для корректной обработки перемещений реализация должна отслеживать изменения порядковых номеров. Каждый случай перемещения данного MAC-адреса имеет порядковый номер, задаваемый в соответствии с приведёнными ниже правилами.

  • PE при первом анонсировании MAC-адреса не использует атрибут расширенной группы MAC Mobility.

  • PE, обнаруживший локально присоединённый MAC-адрес, который ранее был указан в маршруте MAC/IP Advertisement с другим идентификатором сегмента Ethernet, анонсирует MAC-адрес в маршруте MAC/IP Advertisement с атрибутом расширенной группы MAC Mobility и порядковым номером на 1 больше номера в атрибуте расширенной группы MAC Mobility из полученного маршрута MAC/IP Advertisement. При первом переносе данного MAC-адреса, когда в принятом маршруте MAC/IP Advertisement нет атрибута расширенной группы MAC Mobility предполагается номер 0.

  • PE, обнаруживший локально присоединённый MAC-адрес, для которого уже был получен маршрут MAC/IP Advertisement с тем же ненулевым идентификатором сегмента Ethernet, анонсирует его:

    1. без атрибута расширенной группы MAC Mobility, если в принятом маршруте не было такого атрибута;

    2. с атрибутом расширенной группы MAC Mobility и порядковым номером, равным большему номеров в полученных маршрутах MAC/IP Advertisement с атрибутом расширенной группы MAC Mobility.

  • PE, обнаруживший локально присоединённый MAC-адрес, для которого уже был получен маршрут MAC/IP Advertisement с тем же нулевым идентификатором сегмента Ethernet (однодомный вариант), анонсирует его с атрибутом расширенной группы MAC Mobility и порядковым номером, установленным должным образом. В однодомном варианте ESI не сравниваются, а в многодомном сравнение ESI служит для предотвращения ложного обнаружения переноса MAC между PE, подключёнными к одному многодомному сайту.

PE, получивший маршрут MAC/IP Advertisement для MAC-адреса с другим идентификатором сегмента Ethernet и большим порядковым номером, чем он ранее анонсировал, отзывает свой маршрут MAC/IP Advertisement. Если два или более PE анонсируют один MAC-адрес с одинаковым порядковым номером, но разными идентификаторами сегментов Ethernet, получивший маршруты PE выбирает маршрут, анонсированный PE с меньшим адресом IP. Если PE является инициатором маршрута MAC и получает тот же MAC-адрес с таким же номером, как создал он сам, PE сравнивает свой адрес IP с IP-адресом удалённого PE и выбирает меньший IP. Если его маршрут не является лучшим, PE отзывает его.

15.1. Проблема дублирования MAC

Возможны случаи, когда один MAC-адрес узнают разные PE в одной VLAN поскольку два (или более) хоста ошибочно настроены с одним адресом MAC (дубликат). В таких ситуациях трафик от этих хостов будет вызывать постоянные «перемещения» MAC между PE, подключёнными к этим хостам. Важно распознавать такие ситуации и избегать увеличения порядкового номера (в атрибуте расширенной группы MAC Mobility) до бесконечности. Для исправления ситуации узел PE, обнаруживший перемещение MAC путём локального обучения, запускает таймер на M секунд (по умолчанию of M = 180) и при обнаружении N (по умолчанию 5) перемещений MAC до завершения отсчёта таймера принимает решение о наличии дубликата MAC. Узел PE должен уведомить оператора и прекратить передачу и обработку маршрутов BGP MAC/IP Advertisement для этого MAC-адреса, пока оператор не устранить проблему. Значения M и N должны быть настраиваемыми для обеспечения гибкости оперативного управления. Отметим, что другие PE экземпляра EVPN будут пересылать трафик для дублированного MAC-адреса одному из анонсирующих его узлов PE.

15.2. Закреплённые MAC-адреса

В некоторых случаях желательно задать некоторые MAC адреса как статические, чтобы они не могли перемещаться. Такие MAC-адреса анонсируются с расширенной группой MAC Mobility, где установлен (1) флаг static и порядковый номер имеет значение 0. если PE получил такой анонс, а потом узнал этот же MAC-адрес от локального обучения, он должен уведомить оператора.

16. Групповая передача и широковещание

Узлы PE конкретного экземпляра EVPN могут применять репликацию на входе или P2MP LSP для пересылки группового трафика другим PE.

16.1. Входная репликация

PE могут применять репликацию на входе для лавинной рассылки трафика BUM, как описано в разделе 11. Обработка трафика с множеством получателей. Данный широковещательный пакет должен передаваться всем удаленным PE. Однако данный групповой пакет для группового потока может пересылаться лишь подмножеству PE. В частности, данный групповой поток может передаваться лишь тем PE, у которых получатели заинтересованы в нём. Определение PE, имеющих получателей для данного группового потока выполняется с помощью явного отслеживания в соответствии с [RFC7117].

16.2. P2MP LSP

PE может использовать дерево Inclusive для отправки пакетов BUM. Этот термин заимствован из [RFC7117].

Можно применять разные транспортные технологии в сети сервис-провайдера (SP). Для деревьев Inclusive P-multicast такие технологии включают LSP «один со многими», создаваемые RSVP-TE или Multipoint LDP (mLDP).

16.2.1. Деревья Inclusive

Дерево Inclusive позволяет использовать одно дерево группового распределения, называемое деревом Inclusive P-multicast, в сети SP для передачи всего группового трафика от заданного набора экземпляров EVPN в данный узел PE. Можно нстроить конкретное дерево P-multicast для передачи трафика от сайтов одного или нескольких экземпляров EVPN. Способность передавать через одно дерево трафик нескольких экземпляров EVPN называют агрегированием (Aggregation), а дерево — Aggregate Inclusive P-multicast или, короче, Aggregate Inclusive. Дерево Aggregate Inclusive должно включать каждый узел PE, относящийся к любому из экземпляров EVPN, использующих дерево. Это означает, что PE может получать трафик BUM даже при отсутствии у него заинтересованных в этом трафике получателей.

Деревья Inclusive или Aggregate Inclusive, определённые в этом документе, являются деревьями P2MP (один со многими). Дерево P2MP служит для передачи трафика лишь EVPN CE, подключённых к PE, являющемуся корнем дерева.

Процедуры сигнализации дерева Inclusive совпадают с описанными в [RFC7117] с заменой маршрута VPLS A-D на маршрут Inclusive Multicast Ethernet Tag. Атрибут P-tunnel attribute [RFC7117] для дерева Inclusive анонсируется в маршруте Inclusive Multicast Ethernet Tag, как описано в разделе 11. Обработка трафика с множеством получателей. Отметим, что для дерева Aggregate Inclusive узел PE может «агрегировать» несколько экземпляров EVPN на одном пути P2MP LSP, используя метки восходящего направления. Процедуры агрегирования совпадают с описанными в [RFC7117] с заменой маршрутов VPLS A-D на маршруты Inclusive Multicast Ethernet Tag.

17. Схождение

В этом разделе описано восстановление при различных типах отказов в сети.

17.1. Отказы транзитных каналов и узлов между PE

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

17.2. Отказы PE

Рассмотрим хост CE1, подключенный к PE1 и PE2. При отказе PE1 удалённый узел PE3 может обнаружить это по отказу сессии BGP. Такое обнаружение может занимать доли секунды при использовании обнаружения двухсторонней пересылки (Bidirectional Forwarding Detection или BFD) для сессий BGP. PE3 может обновить своё состояние пересылки для начале передачи трафика CE1 только через PE2.

17.3. Отказы сети на пути от PE к CE

Если прерывается связь между многодомным CE и одним из PE, к которым он подключён, этот PE должен отозвать набор маршрутов Ethernet A-D для ES, анонсированный ранее для ES. Это позволяет удаленным PE исключить MPLS next hop для этого PE из набора MPLS next hop, которые могут служить для пересылки трафика CE. При устаревании записи MAC на PE, этот PE должен отозвать MAC-адрес через BGP.

Когда тег Ethernet перестаёт применяться в сегменте Ethernet, узел PE должен отозвать маршруты Ethernet A-D для EVI, анонсированные для пар <ESI, тег Ethernet tags>, затронутых исключением тега. Кроме того, PE должен отозвать маршруты MAC/IP Advertisement, затронутые таким исключением.

Реализации следует применять маршруты Ethernet A-D на ES для оптимизации отзыва маршрутов MAC/IP Advertisement. Когда PE получает отзыв конкретного маршрута Ethernet A-D от анонсировавшего его PE, ему следует считать отозванными все маршруты MAC/IP Advertisement, полученные из того же ESI как маршруты Ethernet A-D от анонсирующего PE. Это оптимизирует время схождения сети при отказах между PE и CE.

18. Порядок кадров

Если в MAC первый полубайт (биты 5 — 8) старшего октета MAC-адреса получателя (следует за последней меткой MPLS) имеет значение 0x4 или 0x6, кадр Ethernet может быть ошибочно истолкован пакет IPv4 или IPv6 промежуточными узлами, выполняющими ECMP на основе глубокой инспекции пакетов, что ведёт к распределению пакетов одного потока по разным путям ECMP, способному влиять на задержку. В результате может нарушаться порядок следования пакетов одного потока. Такие нарушения могут возникать в устойчивом состоянии сети без каких-либо отказов и существенно влиять на работу сети. Для предотвращения таких нарушений служит ряд правил.

  • При использовании в сети глубокой инспекции пакетов для ECMP следует применять Preferred PW MPLS Control Word [RFC4385] со значением 0 (например, 4-октетное поле со значением 0) при передаче пакетов с инкапсуляцией EVPN через MP2P LSP.

  • Если в сети применяются энтропийные метки [RFC6790], не следует использовать слово управления при передаче пакетов с инкапсуляцией EVPN через MP2P LSP.

  • При передаче пакетов с инкапсуляцией EVPN через P2MP LSP или P2P LSP не следует применять слово управления.

19. Вопросы безопасности

Соображения безопасности, рассмотренные в [RFC4761] и [RFC4762], применимы к этому документу в части изучения MAC в плоскости данных через устройство присоединения (Attachment Circuit или AC) и лавинной рассылки трафика неизвестных индивидуальных адресатов и сообщений ARP через ядро MPLS/IP. Соображения безопасности из [RFC4364] применимы к этому документу в части изучения MAC в плоскости управления через ядро MPLS/IP. Далее рассмтриваются дополнительные вопросы безопасности.

Как отмечено в [RFC4761], есть два аспекта обеспечения приватности данных и защиты от DoS7-атак в VPN — защита плоскости управления и защита путей пересылки. Компрометация плоскости управления может привести к передаче узлом PE данных клиента из той или иной сети EVPN в другую EVPN, отправке данных клиентов EVPN в «черную дыру» или перехватчику, что неприемлемо с точки зрения приватности данных. Кроме того, компрометация плоскости управления может открывать возможность несанкционированного использования данных EVPN (например, репликация трафика в дереве групповой рассылки для усиления DoS-атак с передачей больших объёмов трафика).

Механизмы этого документа используют для плоскости управления протокол BGP. Описанные в [RFC5925] методы помогут проверить подлинность сообщений BGP, осложняя подделку обновлений (может служить для перенаправления трафика EVPN в другой экземпляр EVPN) и отзывов (DoS-атаки). В вариантах магистралей с несколькими AS (b) и (c) в [RFC4364] рассмотрены меры защиты сессий BGP через несколько AS между граничными маршрутизаторами AS (Autonomous System Border Router или ASBR), PE или рефлекторами маршрутов (Route Reflector).

Дополнительное обсуждение вопросов безопасности для BGP приведено в спецификации BGP [RFC4271] и анализе безопасности BGP [RFC4272]. Исходное обсуждение опции подписи TCP MD5 для защиты сессий BGP приведено в [RFC5925], а [RFC6952] включает вопросы применения ключей и аутентификации в BGP.

Отметим, что [RFC5925] может помочь в сохранении приватности меток MPLS — знание меток позволяет перехватить трафик EVPN. Для такого перехвата нужен ещё доступ к пути данных в сети SP. Предполагается, что пользователи VPN принимают меры предосторожности (такие как шифрование) для защиты данных, передаваемых через VPN.

Одним из требований защиты плоскости данных является восприятие меток MPLS лишь от корректных интерфейсов. Для PE такие интерфейсы включают каналы от других маршрутизаторов в AS узла PE. Для ASBR такими интерфейсами служат каналы от других маршрутизаторов в автономной системе ASBR и каналы от других ASBR в AS, где имеются экземпляры данной сети EVPN. Это особенно важно для экземпляров EVPN в нескольких AS.

Важно также ограничивать вредоносный трафик в сети от самозванных адресов MAC. Механизм, описанный в параграфе 15.1. Проблема дублирования MAC, показывает, как можно обнаружить дубликаты MAC-адресов и предотвратить фиктивные перемещения MAC. Механизм, описанный в параграфе 15.2. Закреплённые MAC-адреса, показывает, как привязать MAC-адреса к данному сегменту Ethernet, чтобы при их появлении в других сегментах Ethernet трафик этих MAC-адресов не мог мог попасть из тех сегментов в сеть EVPN.

20. Взаимодействие с IANA

Этот документ определяет EVPN NLRI для передачи в многопротокольных расширениях BGP. NLRI импользует имеющийся идентификатор AFI = 25 (L2VPN). Агентство IANA выделило для BGP EVPN значение SAFI = 70.

Агентство IANA выделило приведённые ниже субтипы EVPN Extended Community из [RFC7153] и данный документ становится единственной ссылкой для них.

 

0x00

MAC Mobility

[RFC7432]

0x01

ESI Label

[RFC7432]

0x02

ES-Import Route Target

[RFC7432]

 

Этот документ создаёт реестр EVPN Route Types, новые значения в который вносятся по процедуре RFC Required, заданной в [RFC5226]. Максимальным значением для этого реестра является 255. Исходно выделенные значения указаны ниже.

 

0

Резерв

[RFC7432]

1

Ethernet Auto-discovery

[RFC7432]

2

MAC/IP Advertisement

[RFC7432]

3

Inclusive Multicast Ethernet Tag

[RFC7432]

4

Ethernet Segment

[RFC7432]

 

21. Литература

21.1. Нормативные документы

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006, <http://www.rfc-editor.org/info/rfc4271>.

[RFC4360] Sangli, S., Tappan, D., and Y. Rekhter, «BGP Extended Communities Attribute», RFC 4360, February 2006, <http://www.rfc-editor.org/info/rfc4360>.

[RFC4364] Rosen, E. and Y. Rekhter, «BGP/MPLS IP Virtual Private Networks (VPNs)», RFC 4364, February 2006, <http://www.rfc-editor.org/info/rfc4364>.

[RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter, «Multiprotocol Extensions for BGP-4», RFC 4760, January 2007, <http://www.rfc-editor.org/info/rfc4760>.

[RFC4761] Kompella, K., Ed., and Y. Rekhter, Ed., «Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling», RFC 4761, January 2007, <http://www.rfc-editor.org/info/rfc4761>.

[RFC4762] Lasserre, M., Ed., and V. Kompella, Ed., «Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling», RFC 4762, January 2007, <http://www.rfc-editor.org/info/rfc4762>.

[RFC7153] Rosen, E. and Y. Rekhter, «IANA Registries for BGP Extended Communities», RFC 7153, March 2014, <http://www.rfc-editor.org/info/rfc7153>.

21.2. Дополнительная литература

[802.1D-REV] «IEEE Standard for Local and metropolitan area networks — Media Access Control (MAC) Bridges», IEEE Std. 802.1D, June 2004.

[802.1Q] «IEEE Standard for Local and metropolitan area networks — Media Access Control (MAC) Bridges and Virtual Bridged Local Area Networks», IEEE Std 802.1Q(tm), 2014 Edition, November 2014.

[RFC4272] Murphy, S., «BGP Security Vulnerabilities Analysis», RFC 4272, January 2006, <http://www.rfc-editor.org/info/rfc4272>.

[RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, «Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN», RFC 4385, February 2006, <http://www.rfc-editor.org/info/rfc4385>.

[RFC4664] Andersson, L., Ed., and E. Rosen, Ed., «Framework for Layer 2 Virtual Private Networks (L2VPNs)», RFC 4664, September 2006, <http://www.rfc-editor.org/info/rfc4664>.

[RFC4684] Marques, P., Bonica, R., Fang, L., Martini, L., Raszuk, R., Patel, K., and J. Guichard, «Constrained Route Distribution for Border Gateway Protocol/MultiProtocol Label Switching (BGP/MPLS) Internet Protocol (IP) Virtual Private Networks (VPNs)», RFC 4684, November 2006, <http://www.rfc-editor.org/info/rfc4684>.

[RFC5226] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5925] Touch, J., Mankin, A., and R. Bonica, «The TCP Authentication Option», RFC 5925, June 2010, <http://www.rfc-editor.org/info/rfc5925>.

[RFC6514] Aggarwal, R., Rosen, E., Morin, T., and Y. Rekhter, «BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs», RFC 6514, February 2012, <http://www.rfc-editor.org/info/rfc6514>.

[RFC6790] Kompella, K., Drake, J., Amante, S., Henderickx, W., and L. Yong, «The Use of Entropy Labels in MPLS Forwarding», RFC 6790, November 2012, <http://www.rfc-editor.org/info/rfc6790>.

[RFC6952] Jethanandani, M., Patel, K., and L. Zheng, «Analysis of BGP, LDP, PCEP, and MSDP Issues According to the Keying and Authentication for Routing Protocols (KARP) Design Guide», RFC 6952, May 2013, <http://www.rfc-editor.org/info/rfc6952>.

[RFC7117] Aggarwal, R., Ed., Kamite, Y., Fang, L., Rekhter, Y., and C. Kodeboniya, «Multicast in Virtual Private LAN Service (VPLS)», RFC 7117, February 2014, <http://www.rfc-editor.org/info/rfc7117>.

[RFC7209] Sajassi, A., Aggarwal, R., Uttaro, J., Bitar, N., Henderickx, W., and A. Isaac, «Requirements for Ethernet VPN (EVPN)», RFC 7209, May 2014, <http://www.rfc-editor.org/info/rfc7209>.

Благодарности

Большое спасибо Yakov Rekhter за неоднократное рецензирование документа и важные комментарии, а также за увлекательное обсуждения нескольких тем, которое помогло сформировать документ. Спасибо также Pedro Marques, Kaushik Ghosh, Nischal Sheth, Robert Raszuk, Amit Shukla, Nadeem Mohammed за обсуждения, которые помогли сформировать документ. Спасибо Han Nguyen за комментарии и поддержку работы. Спасибо Steve Kensil и Reshad Rahman за их рецензии. Спасибо Jorge Rabadan за вклад в раздел 5. Спасибо Thomas Morin за обзор документа и вклад в параграф 8.6. Большое спасибо Jakob Heitz за помощь в улучшении некоторых разделов документа.

Спасибо Clarence Filsfils, Dennis Cai, Quaizar Vohra, Kireeti Kompella, Apurva Mehta за их вклад в документ.

Последняя, но не менее важная благодарность Giles Heron (руководитель WG) за подробную рецензию при подготоке WG Last Call и многочисленные ценные предложения.

Участники работы

Кроме авторов, указанных на титульной странице, в создание документа внесли вклад указанные ниже люди.

Keyur Patel
Samer Salam
Sami Boutros
Cisco
 
Yakov Rekhter
Ravi Shekhar
Juniper Networks
 
Florin Balus
Nuage Networks

Адреса авторов

Ali Sajassi (editor)
Cisco
EMail: sajassi@cisco.com
 
Rahul Aggarwal
Arktan
EMail: raggarwa_1@yahoo.com
 
Nabil Bitar
Verizon Communications
EMail : nabil.n.bitar@verizon.com
 
Aldrin Isaac
Bloomberg
EMail: aisaac71@bloomberg.net
 
James Uttaro
AT&T
EMail: uttaro@att.com
 
John Drake
Juniper Networks
EMail: jdrake@juniper.net
 
Wim Henderickx
Alcatel-Lucent
EMail: wim.henderickx@alcatel-lucent.com

Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.

3В исходном документе вместо Router ID ошибочно сказано «адреса IP). См. https://www.rfc-editor.org/errata/eid5718. Прим. перев.

4В исходном документе этого предложения не было. См. https://www.rfc-editor.org/errata/eid5554. Прим. перев.

5В исходном документе этого предложения не было. См. https://www.rfc-editor.org/errata/eid5554. Прим. перев.

6В оригинале ошибочно указан параграф 8.1.1. См. https://www.rfc-editor.org/errata/eid6286. Прим. перев.

7Denial-of-service — отказ в обслуживании.

Рубрика: RFC | Оставить комментарий

RFC 7444 Security Labels in Internet Email

Independent Submission                                       K. Zeilenga
Request for Comments: 7444                                   A. Melnikov
Category: Informational                                    Isode Limited
ISSN: 2070-1721                                            February 2015

Защитные метки в электронной почте Internet

Security Labels in Internet Email

PDF

Аннотация

В этом документе описано использование поля заголовка SIO-Label в электронной почте Internet для передачи информации о степени «секретности» сообщения в целом. Это поле может содержать текстовое (отображаемый маркер — display marking) и/или структурированное (защитная метка — security label) представление уровня секретности сообщения. Данный документ описывает также поле заголовка SIO-Label-History для записи изменений метки.

Статус документа

Данный документ не является спецификацией протокола Internet и публикуется с информационными целями.

Документ публикуется в серии RFC в качестве независимого от других ветвей RFC. Редактор (RFC Editor) публикует этот документ по своему усмотрению и не делает каких-либо заявлений о реализации или развертывании. Документ одобрен для публикации редактором RFC Editor и не претендует на роль какого-либо стандарта Internet (см. параграф 2 в RFC 5741).

Информация о текущем статусе этого документа, обнаруженных ошибках и способах обратной связи может быть найдена по ссылке http://www.rfc-editor.org/info/rfc7444.

Авторские права

Авторские права (Copyright (c) 2015) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К этому документу применимы права и ограничения, перечисленные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно, поскольку в них описаны права и ограничения, относящиеся к данному документу.

1. Введение

Метки защиты (security label), иногда называемые метками конфиденциальности (confidentiality label), служат структурированным представлением уровня секретности части информации. Защитные метки могут использоваться вместе с разрешением (структурированная информация о людях или иных субъектах, которым разрешен доступ), а также правилами защиты в плане контроля доступа к каждой части информации. Например, почтовое сообщение может иметь метку EXAMPLE CONFIDENTIAL, требующую от получателя и отправителя наличия прав доступа к информации с меткой EXAMPLE CONFIDENTIAL. Защитные метки, разрешения и правила защиты рассмотрены в документе X.841 [X.841].

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

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

Метки защиты могут использоваться не только для управления правами доступа. В частности, они могут служить для передачи сведений об уровне конфиденциальности разных частей информации (например, при организации хранилищ).

В этом документе описан протокол передачи уровня конфиденциальности в сообщениях электронной почты [RFC5322]. В частности, документ описывает поле заголовка SIO-Label, содержащее метку защиты, отображаемые маркеры и цветовую маркировку. В документе также описано поле заголовка SIO-Label-History для записи сведений об изменении метки защиты.

Данный протокол основан на документе XEP-0258: Security Labels in XMPP [XEP258].

1.1. Взаимодействие с маркировкой в тексте

В средах, где требуется маркировка сообщений по уровню конфиденциальности, общепринятым является текстовое представление таких уровней в форме специальных маркеров (display marking) в теле сообщение и/или поле заголовка Subject (тема). Например, авторы зачастую получают сообщения вида:

To: author <author@example.com>;
From: Some One <someone@example.net>;
Subject: the subject (UNCLASSIFIED)
UNCLASSIFIED

Text of the message.

UNCLASSIFIED

Обычно при размещении в теле сообщения маркер помещается в качестве первой строки или нескольких строк. Такой вариант называют маркировкой FLOT1. Маркировка может окружаться дополнительным текстом, показывающим, что она обозначает уровень конфиденциальности сообщения. FLOT может также сопровождаться маркировкой LLOT2. В приведенном выше примере используются две строки FLOT и две строки LLOT (в обоих случаях маркер обозначается пустой строкой между ним и исходным содержимым).

При включении в поле Subject маркер обычно помещается перед исходным текстом темы сообщения и после него, иногда маркер помещается в скобки и/или отделяется от исходного текста пробелами.

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

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

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

1.2. Взаимодействие с существующими метками защиты

Используется множество нестандартных полей заголовков (например, X-X411) для передачи информации о конфиденциальности сообщений с использованием структурированной или текстовой формы.

Авторы надеются, что вместо применения существующих (нестандартных) полей заголовков с течением времени станут использоваться поля, описанные в данном документе.

1.3. Взаимодействие с ESS для S/MIME

Услуги ESS3 для S/MIME (ESS) [RFC2634] обеспечивают, наряду с другими типами сервиса, подписи «для обеспечения целостности, невозможности отказа от авторства и [защищенного] связывания атрибутов (таких, как защитная метка) и исходным содержимым».

Хотя описанный в данном документе протокол может использоваться вместе с ESS, протокол прежде всего рассматривается, как альтернатива ESS.

Отмечено, что в ESS метка защиты относится к содержимому MIME [RFC2045], тогда как в данном протоколе метки относятся к сообщению в целом.

Отмечено также, что в ESS метки защищенным способом связываются с содержимым MIME за счет использования цифровых подписей. Данный протокол не предлагает услуг подписывания сообщений и, следовательно, не обеспечивает защищенной привязки метки к сообщению, защиту целостности и невозможность отказа от авторства.

Данный протокол предназначен для ситуаций/сред, где наличие цифровой подписи не требуется для обеспечения нужной защиты.

2. Используемые в документе соглашения

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с [RFC2119].

Формальная спецификация синтаксиса в этом документе использует представление ABNF4, описанное в [RFC5234].

Термин «представление base64» служит для обозначения кодирования Base 64, определенного в параграфе 4 [RFC4648]. Термин «BER-представление» служит для обозначения кодирования BER5, определенного в [X.690].

3. Обзор

Пользовательский агент MUA6, генерирующий сообщение, может при соответствующей настройке предлагать пользователю меню уровня конфиденциальности для выбора и последующего отображения маркеров, цвета фона и символов, а также параметров защитной метки, связанных с полем SIO-Label в заголовке сообщения.

Агенты подачи сообщений MSA7, а также агенты передачи (MTA8) и доставки (MDA9) сообщений при соответствующей настройке будут использовать данные о конфиденциальности (или их отсутствие) при решении вопросов о приеме, пересылке или иных действиях с поданным сообщением. Эти агенты, далее обозначаемые, как сервисные агенты (SA10), могут при соответствующей настройке менять данные о конфиденциальности сообщения (изменять метку и/или маркер) эквивалентным представлением уровня конфиденциальности. Агентам SA, добавляющим, меняющим или удаляющим поле заголовка SIO-Label, следует сохранять информацию об этом в поле заголовка SIO-Label-History.

Принимающим агентам MUA, которые поддерживают данное расширение, следует при отображении сообщения выводить маркер (если он есть), полученный в поле заголовка SIO-Label или, в соответствии с политикой и конфигурацией, выполнять локальную маркировку, а также маркировку, созданную полученной меткой и требованиями регуляторов. Желательно также показывать эти маркеры в списке сообщений. В случае отображения полученного маркера его следует выводить с использованием цветов фона и текста, заданных полем заголовка. Если маркировка генерируется на основе полученной метки и требований регуляторов, маркер следует выводить с использованием цветов, заданных требованиями регуляторов.

Не предполагается принятие агентами MUA решений о предоставлении доступа на основе значений поля SIO-Label, MUA могут использовать предоставленную информацию об уровне конфиденциальности (или ее отсутствие) для определения действий по отношению к принятому сообщению. Например, MUA могут организовать хранение сообщений с учетом содержимого описываемого поля.

4. Поле заголовка SIO-Label

Поле заголовка называется SIO-Label и включает набор пар «ключ-значение», каждая из которых рассматривается, как параметр.

Формальный синтаксис поля представлен ниже:

sio-label = "SIO-Label:" [FWS] sio-label-parm-seq [FWS] CRLF
sio-label-parm-seq = sio-label-parm [ [FWS] ";" [FWS] sio-label-parm-seq ]
sio-label-parm = parameter

Параметры определены в [RFC2231], FWS — в [RFC5322], а добавление CRLF — в [RFC5234]. Отметим, что параметры, определенные в [RFC2231], основаны на формате ABNF [RFC0822], которые неявно допускает в некоторых случаях включение пробельных символов. В частности, такие символы неявно разрешены в параметрах, непосредственно предшествующих и следующих за знаком равенства (=). Отметим также, что [RFC2231] разрешает заключенные в кавычки строки (для создания параметров) значительной длины для строк в кодировках, отличных от US-ASCII, и других подобных случаев. Разработчикам следует обратиться за подробностями к упомянутым спецификациям.

Параметр marking (маркер) представляет собой отображаемую строку для использования в реализациях, в которых невозможно или нежелательно следование требованиям регуляторов в части генерации маркировки. Обычно этот параметр следует включать в поля SIO-Label. Его отсутствие допустимо лишь в тех случаях, когда агент SA при генерации маркировки опирается на другие SA.

Цветовые параметры (fgcolor — цвет текста и bgcolor — цвет фона) являются маркерами, определяющими выбор цветов для отображения текста и фона, соответственно. Их значения могут указываться в шестнадцатеричном представлении RGB (например, «#ff0000») или в форме именованных цветов CSS11(например, red — красный), перечисленных ниже (16 цветов HTML4 и orange — оранжевый) [CSS3-Color]. По умолчанию применяется черный фон и белые символы. При отсутствии параметра marking нужно опускать также параметры fgcolor и bgcolor. Формат представления HEXDIG определен в [RFC5234].

Формальный синтаксис показан ниже:

   color = hex-color / named-color

   hex-color = "#" 6HEXDIG    ; Шестнадцатеричное представление RGB

   named-color =
              "aqua" /
              "black" /
              "blue" /
              "fuschia" /
              "gray" /
              "green" /
              "lime" /
              "maroon" /
              "navy" /
              "olive" /
              "purple" /
              "red" /
              "silver" /
              "teal" /
              "white" /
              "yellow" /
              "orange" ; именованные цвета

 

Параметр type (тип) представляет собой заключенную в кавычки строку, содержащую текст «:ess», «:x411», «:xml» или URI [RFC3986], определяющие тип и представление параметра label (метка). Метка представляет собой заключенную в кавычки строку. При наличии параметра label нужно включать и параметр type. При управлении доступом (authorization) на основе данных об уровне конфиденциальности отсутствие параметров type и label показывает, что сообщение обрабатывает в соответствии с принятыми по умолчанию правилами (например, при отсутствии SIO-Label).

Строка «:ess» говорит, что параметр label представляет собой форму base64 для BER-кодирования защитной метки ESS [RFC2634].

Пример метки ESS:

SIO-Label: marking="EXAMPLE CONFIDENTIAL";
fgcolor=black; bgcolor=red;
type=":ess"; label="MQYGASkCAQM="

Строка «:x411» показывает, что параметр label представляет собой форму base64 для BER-кодирования защитной метки X.411 [X.411].

Пример метки X.411:

SIO-Label: marking="EXAMPLE CONFIDENTIAL";
fgcolor=black; bgcolor=red;
type=":x411"; label="MQYGASkCAQM="

Строка «:xml» говорит, что параметр label содержит форму base64 для защитной метки, представленной с применением [XML]. Пролог XML следует опускать, если иного не требуется (например, при кодировке, отличной от UTF-8). Специфика представления защитной метки задается корневым элементом имени и его пространством имен.

Пример метки XML:

SIO-Label: marking="EXAMPLE CONFIDENTIAL";
fgcolor=black; bgcolor=red;
type=":xml";
label*0="PFNlY0xhYmVsIHhtbG5zPSJodHRwOi8vZXhhbX";
label*1="BsZS5jb20vc2VjLWxhYmVsLzAiPjxQb2xpY3lJ";
label*2="ZGVudGlmaWVyIFVSST0idXJuOm9pZDoxLjEiLz";
label*3="48Q2xhc3NpZmljYXRpb24+MzwvQ2xhc3NpZmlj";
label*4="YXRpb24+PC9TZWNMYWJlbD4=";

где метка XML с новыми строками и пробельными символами для удобочитаемости имеет вид:

<SecLabel xmlns="http://example.com/sec-label/0">
<PolicyIdentifier URI="urn:oid:1.1"/>
<Classification>3</Classification>
</SecLabel>

Форматы :ess и :x411 следует использовать для представления защитных меток ESS и X.411, соответственно, вместо прямого XML-представления этих форматов.

В минимальный вариант поля нужно включать параметр marking и оба параметра type и label.

Это поле может быть расширено путем включения дополнительных параметров в новых документах, дополняющих (или заменяющих) данный. В реализациях следует игнорировать нераспознанные дополнительные параметры. Эти рекомендации не являются обязательными и позволяют агентам обрабатывать сообщения с нераспознанными параметрами в поле SIO-Label отлично от сообщений, где SIO-Label не содержит неизвестных параметров.

В заголовок каждого сообщения нужно включать не более одного поля SIO-Label.

Расширенный пример:

SIO-Label: marking*=us-ascii'en'EXAMPLE%20CONFIDENTIAL;
fgcolor = black ; bgcolor = red ;
type=":ess"; label*0="MQYG";
label*1="ASkCAQM="

Этот пример эквивалентен приведенному выше примеру метки ESS.

5. Поле заголовка SIO-Label-History

Любой агент SA может записывать изменения метки в поле SIO-Label-History. Это поле предназначено для трассировки изменений (и только для нее). Например, оно может служить для записи сведений о добавлении, изменении или удалении метки сервисным агентом. Поле может также применяться в иных ситуациях. Например, шлюз, транслирующий сообщения X.400 в электронную почту RFC 5322, может использовать это поле для записи внесенных при трансляции изменений метки.

Поле SIO-Label-History рассматривается, как трассировочное, в соответствии с определением в параграфе 3.6.7 [RFC5322].

Формальный синтаксис поля SIO-Label-History совпадает с синтаксисом SIO-Label, но содержит дополнительные параметры:

  • change — одно из значений add, replace, delete;

  • changed-by — строка, идентифицирующая агент (в общем случае, полное доменное имя агента);

  • changed-at — дата и время внесения изменений в формате [RFC5322];

  • changed-comment — строка комментариев;

  • marking, fgcolor, bgcolor, type, label — значения параметров метки до внесения изменений в SIO-Label с использованием синтаксиса параметров, определенного для параметров SIO-Label (для операций add эти параметры не указываются);

  • new-marking, new-fgcolor, new-bgcolor, new-type, new-label — значения параметров метки после внесения изменений с использованием синтаксиса, определенного для параметров SIO-Label (для операции delete эти параметры не указываются).

В минимальное поле нужно включать параметры change, changed-by, changed-at.

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

Каждое сообщение может содержать множество полей SIO-Label-History. Все поля SIO-Label-History следует размещать непосредственно вслед за полем SIO-Label в виде одной группы. Добавляемое поле SIO-Label-History следует размещать непосредственно перед всеми имеющимися полями SIO-Label-History.

Примеры SIO Label History вида Add, Modify, Delete:

   SIO-Label-History: marking="EXAMPLE CONFIDENTIAL";
       fgcolor=black; bgcolor=red;
       type=":xml";
       label*0="PFNlY0xhYmVsIHhtbG5zPSJodHRwOi8vZXhhbX";
       label*1="BsZS5jb20vc2VjLWxhYmVsLzAiPjxQb2xpY3lJ";
       label*2="ZGVudGlmaWVyIFVSST0idXJuOm9pZDoxLjEiLz";
       label*3="48Q2xhc3NpZmljYXRpb24+MzwvQ2xhc3NpZmlj";
       label*4="YXRpb24+PC9TZWNMYWJlbD4=";
       change=delete;
       changed-by="delete.example.com";
       changed-at="18 Feb 2013 9:24 PDT";
       changed-comment="delete"
   SIO-Label-History: marking="EXAMPLE CONFIDENTIAL";
       fgcolor=black; bgcolor=red;
       type=":ess"; label="MQYGASkCAQM=";
       new-marking="EXAMPLE CONFIDENTIAL";
       new-fgcolor=black; new-bgcolor=red;
       new-type=":xml";
       new-label*0="PFNlY0xhYmVsIHhtbG5zPSJodHRwOi8vZXhhbX";
       new-label*1="BsZS5jb20vc2VjLWxhYmVsLzAiPjxQb2xpY3lJ";
       new-label*2="ZGVudGlmaWVyIFVSST0idXJuOm9pZDoxLjEiLz";
       new-label*3="48Q2xhc3NpZmljYXRpb24+MzwvQ2xhc3NpZmlj";
       new-label*4="YXRpb24+PC9TZWNMYWJlbD4=";
       change=replace;
       changed-by="modify.example.net";
       changed-at="18 Feb 2013 8:24 PDT";
       changed-comment="replaced with XML variant"
   SIO-Label-History: new-marking="EXAMPLE CONFIDENTIAL";
       new-fgcolor=black; new-bgcolor=red;
       new-type=":ess"; new-label="MQYGASkCAQM=";
       change=add;
       changed-by="add.example.net";
       changed-at="18 Feb 2013 7:24 PDT";
       changed-comment="added label"

 

6. Взаимодействие с IANA

Поля SIO-Label и SIO-Label-History зарегистрированы в реестре Provisional Message Header Field Registry в соответствии с [RFC3864].

Имя поля заголовка: SIO-Label

Применим к протоколам: mail [RFC5322]

Статус: provisional

Автор/контролер изменений: Kurt Zeilenga (kurt.zeilenga@isode.com)

Спецификация: RFC 7444

Имя поля заголовка: SIO-Label-History

Применим к протоколам: mail [RFC5322]

Статус: provisional

Автор/контролер изменений: Kurt Zeilenga (kurt.zeilenga@isode.com)

Спецификация: RFC 7444

7. Вопросы безопасности

Конфиденциальную информацию следует защищать подобающим образом (независимо от наличия метки). Для сообщений электронной почты обычно подходит аутентификация передающей стороной приемной стороны для организации защиты на транспортном уровне, включая защиту целостности и конфиденциальности данных. Когда приемная сторона решает вопрос предоставления доступа на основе представления передающей стороны, включая ее самоидентификацию, этого обычно бывает достаточно для аутентификации передающей стороны.

Данный документ обеспечивает способ обозначения уровня конфиденциальности сообщений электронной почты. Указание уровня секретности сообщения в общем случае не повышает этот уровень, однако само это указание может рассматриваться как конфиденциальная (секретная) информация. Например, маркировка BLACK PROJECT RESTRICTED может раскрыть существование секретного проекта.

Поле SIO-Label показывает уровень конфиденциальности сообщения в целом, включая его заголовок и содержимое. Данный документ не описывает способов указания уровня конфиденциальности отдельных частей сообщения (например, разного уровня конфиденциальности разных частей MIME, содержащихся в сообщении). Преимуществами предложенной в документе модели являются простота и легкость применения (единственное указание уровня конфиденциальности) по сравнению со сложностью и трудностью независимой маркировки отдельных частей.

Указанный уровень конфиденциальности может использоваться для определения способов обработки сообщений. Например, значение поля SIO-Label (или его отсутствие) можно использовать для решения о пересылке сообщения тому или иному адресату, а в случае пересылки — для определения минимальных требований по защите на пути пересылки. Механизм определения способов обработки сообщений на основе маркировки по уровню конфиденциальности выходит за пределы настоящего документа.

Реальное содержимое сообщения по уровню конфиденциальности может отличаться от указанного в заголовке уровня. Агентам следует избегать понижения уровня защиты при обмене сообщениями на основе указанного в заголовке уровня конфиденциальности.

Данный протокол сам по себе не обеспечивает услуг подписания сообщений типа тех, которые применяются для защиты целостности, невозможности отказа от авторства и привязки атрибутов (таких, как метки защиты в сообщениях). Хотя этот протокол может использоваться вместе со службами подписи, данный документ не детализирует такие применения.

Предполагается, что защитные метки и отображаемые маркеры указывают одинаковый уровень конфиденциальности, однако данная спецификация не требует такого совпадения. Например, MUA может представить сообщение, в котором метка защиты указывает некий уровень конфиденциальности, а отображаемый маркер показывает иной уровень, что может вызвать в агентах SA проблемы, связанные с неподобающей обработкой сообщения. Обычно для каждого SA приемлемо использование значений SIO-Label для проверки совпадения уровней конфиденциальности в метке защиты и отображаемом маркере с принятием подобающих мер (например, отказ в приеме) в случае расхождения.

Этот документ также обеспечивает средство фиксации изменения метки в сообщении. Это средство предназначено исключительно для трассировки. Следует отметить, что поле SIO-Label-History может включать конфиденциальную информацию и, следовательно, может удаляться из сообщения в случаях возможности раскрытия информации на основании содержащихся в этом поле данных.

8. Литература

8.1. Нормативные документы

[CSS3-Color] Celik, T. and C. Lilley, «CSS3 Color Module», W3C Candidate Recommendation CR-css3-color-20030514, May 2003, <http://www.w3.org/TR/2003/CR-css3-color-20030514>.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119> (перевод).

[RFC2231] Freed, N. and K. Moore, «MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations», RFC 2231, November 1997, <http://www.rfc-editor.org/info/rfc2231>.

[RFC2634] Hoffman, P., Ed., «Enhanced Security Services for S/MIME», RFC 2634, June 1999, <http://www.rfc-editor.org/info/rfc2634>.

[RFC3864] Klyne, G., Nottingham, M., and J. Mogul, «Registration Procedures for Message Header Fields», BCP 90, RFC 3864, September 2004, <http://www.rfc-editor.org/info/rfc3864>.

[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, «Uniform Resource Identifier (URI): Generic Syntax», STD 66, RFC 3986, January 2005, <http://www.rfc-editor.org/info/rfc3986>.

[RFC4648] Josefsson, S., «The Base16, Base32, and Base64 Data Encodings», RFC 4648, October 2006, <http://www.rfc-editor.org/info/rfc4648>.

[RFC5234] Crocker, D., Ed. and P. Overell, «Augmented BNF for Syntax Specifications: ABNF», STD 68, RFC 5234, January 2008, <http://www.rfc-editor.org/info/rfc5234> (перевод).

[RFC5322] Resnick, P., Ed., «Internet Message Format», RFC 5322, October 2008, <http://www.rfc-editor.org/info/rfc5322> (перевод).

[X.411] ITU-T, «Message Handling Systems (MHS) — Message Transfer System: Abstract Service Definition and Procedures», ITU-T Recommendation X.411, June 1999.

[X.690] ITU-T, «ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)», ITU-T Recommendation X.690, November 2008.

[XML] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and F. Yergeau, «Extensible Markup Language (XML) 1.0 (Fifth Edition)», W3C Recommendation REC-xml-20081126, November 2008, <http://www.w3.org/TR/2008/REC-xml-20081126>.

8.2. Дополнительная литература

[RFC0822] Crocker, D., «STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES», STD 11, RFC 822, August 1982, <http://www.rfc-editor.org/info/rfc822>.

[RFC2045] Freed, N. and N. Borenstein, «Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies», RFC 2045, November 1996, <http://www.rfc-editor.org/info/rfc2045>.

[X.841] ITU-T, «Security information objects for access control», ITU-T Recommendation X.841, October 2000.

[XEP258] Zeilenga, K., «XEP-0258: Security Labels in XMPP», XEP XMPP Extension Protocols, April 2013.

Благодарности

Авторы благодарят членов сообщества, включая Dave Cridland, Brad Hards, Russ Housley, Steve Kille, Graeme Lunt, Alan Ross, Jim Schaad, David Wilson за просмотр документа, комментарии и предоставленные тексты.

Адреса авторов

Kurt Zeilenga

Isode Limited

EMail: Kurt.Zeilenga@isode.com

Alexey Melnikov

Isode Limited

14 Castle Mews

Hampton, Middlesex TW12 2NP

United Kingdom

EMail: Alexey.Melnikov@isode.com

Перевод на русский язык

Николай Малых

nmalykh@protokols.ru


1First Line(s) of Text — первая строка (строки) текста.

2Last Line(s) of Text — последняя строка (строки) текста.

3Enhanced Security Services — услуги по улучшенной защите.

4Augmented Backus-Naur Form — расширенная форма Бэкуса-Наура.

5Basic Encoding Rules — базовые правила кодирования.

6Mail User Agent – пользовательский почтовый агент.

7Mail Submission Agent.

8Mail Transfer Agent.

9Mail Delivery Agent.

10Service Agent.

11Cascading Style Sheet.

Рубрика: RFC | Комментарии к записи RFC 7444 Security Labels in Internet Email отключены

RFC 7426 Software-Defined Networking (SDN): Layers and Architecture Terminology

Internet Research Task Force (IRTF)                   E. Haleplidis, Ed.
Request for Comments: 7426                          University of Patras
Category: Informational                              K. Pentikousis, Ed.
ISSN: 2070-1721                                                     EICT
                                                              S. Denazis
                                                    University of Patras
                                                           J. Hadi Salim
                                                       Mojatatu Networks
                                                                D. Meyer
                                                                 Brocade
                                                          O. Koufopavlou
                                                    University of Patras
                                                            January 2015

Программно-определяемые сети (SDN) — уровни и архитектура

Software-Defined Networking (SDN): Layers and Architecture Terminology

PDF

Аннотация

Программно-определяемые сети (SDN1) определяют новый подход к программируемости сетей, т. е. возможности динамической инициализации, управления, изменения и администрирования поведения сети через открытые интерфейсы. SDN усиливает роль программ в работе сетей за счет введения абстракции для уровня пересылки данных (data forwarding plane) и связанного с этим отделения уровня пересылки от уровня управления (control plane). Такое разделение ускоряет инновационные циклы для обоих уровней, как показывает имеющийся опыт. Однако накапливается и путаница в части понимания, что такое SDN, какова структура уровней в архитектуре SDN и как эти уровни взаимодействуют между собой. Этот документ, являющийся результатом работы группы IRTF SDN RG2, разрешает эти вопросы и содержит краткий справочник для исследовательского сообщества SDN на основе рецензирования литературы, RFC и документов, выпущенных другими органами стандартизации.

Статус документа

Этот документ не является спецификацией стандарта Internet и публикуется с информационными целями.

Документ является результатом работы IRTF3. Группа IRTF публикует результаты связанных с Internet исследований и разработок. Эти результаты не обязательно пригодны для реализации. Данный RFC представляет согласованное мнение исследовательской группы Software-Defined Networking в составе IRTF. Документ был одобрен для публикации IRTF и не претендует на статус стандарта Internet (см. раздел 2 документа RFC 5741).

Информация о статусе этого документа, обнаруженных ошибках и способах обратной связи доступна по ссылке http://www.rfc-editor.org/info/rfc7426.

Авторские права

Авторские права (c) 2015 принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно.

1. Введение

Термин «программно-определяемые сети» (SDN) обозначает парадигму программируемых сетей [PNSurvey99] [OF08]. Вкратце, SDN означает способность программных приложений динамически управлять (программировать) отдельными сетевыми устройствами и за счет этого управлять поведением сети в целом [NV09]. Boucadair и Jacquenet [RFC7149] показали, что SDN представляет собой набор технологий для упрощения разработки, доставки и использования сетевых служб динамичным, детерминированным и масштабируемым способом.

Ключевым элементом SDN является разделение (традиционных) уровней пересылки (forwarding) и управления (control) для того, чтобы обеспечить приложениям возможности, требуемые для программного управления сетью. Цель состоит в дальнейшем разделении и связанной с этим программируемости для снижения уровня сложности и ускорения развития обоих уровней [A4D05].

Эволюция исследований и разработок в сфере программируемых сетей подробно рассмотрена в [SDNHistory] [SDNSurvey], начиная с 1980-х годов. Как отмечено в [SDNHistory], многие идеи, концепции и проблемы применимы и к более поздним исследованиям и разработкам SDN (и стандартизации SDN), а также остаются активными направлениями исследования и обсуждения в современном сообществе исследователей. Например, Rooney и др. [Tempest] рассматривают вопросы предоставления третьим сторонам доступа в сеть без создания угрозы ее целостности, а также приспособления унаследованных сетевых решений в их (тогда) новую программируемую среду. Кроме того, концепция разделения уровней управления и пересылки, являющаяся важной частью SDN, широко обсуждалась еще до 1998 года [Tempest] [P1520] в сетях SS7 [ITUSS7], Ipsilon Flow Switching [RFC1953] [RFC2297] и ATM [ITUATM].

Исследования SDN часто сосредоточены на разных аспектах программируемости и нередко возникают противоречивые точки зрения на саму природу SDN. Отмечено, что в силу разных причин (например, концентрация работ на одной области, когда результаты могут оказаться не применимыми в других областях), некоторые общепринятые определения не коррелируют между собой. Например OpenFlow [OpenFlow] и NETCONF4 [RFC6241] считаются интерфейсами SDN, но относятся к управлению и администрированию, соответственно.

Это диктует необходимость консолидации определений SDN в литературе и сопоставления их с ранними работами в IETF и сообществе исследователей. Особый интерес представляет, например, определение уровней, входящих в архитектуру SDN, а также интерфейсов и связанных с ними атрибутов, которые обеспечат лучшее взаимодействие между этими уровнями. Таким образом, целью настоящего документа является не стандартизация какого-либо конкретного уровня или интерфейса, а скорее предоставление кратких справок, отражающих текущие подходы к многоуровневой архитектуре SDN. Предполагается, что этот документ будет полезен в предстоящих работах SDN RG, а также обсуждениях в рамках всего сообщества SDN.

В этом документе рассматривается направление работы SDN RG, названное «Обзор архитектуры и систематика SDN5», способствующее лучшему пониманию основных технологий SDN без привязки к технологиям и бизнесу, не задающее нового стандарта IETF. Это служит основой для дальнейшего обсуждения. Таким образом, мы не делаем каких-либо важных заявлений и не обсуждаем применимость любой из рассмотренных в документе моделей для решения тех или иных конкретных задач. Вместо этого рассматриваются характеристики, атрибуты и классификация моделей для обеспечения их систематики. Документ не содержит исчерпывающего списка направлений исследования SDN, интересующимся этим вопросом читателям следует обратиться к обзорам [SLTSDN] и [SDNACS]. В частности, Jarraya и др. в [SLTSDN] представили обзор связанных с SDN исследований, например, разделение управления, связанное с теоремой CAP6, рассмотренной в параграфе 3.5.4.

Этот документ был представлен для широкого обзора, обсуждения и комментариев большинству членов SDNRG, число которых превышало 100 человек. В SDN RG было достигнуто соглашение о целесообразности публикации документа в потоке IRTF в рамках серии RFC [RFC5743].

Оставшаяся часть документа организована следующим образом — раздел 2 посвящен используемой в документе терминологии, в разделе 3 представлен обзор современных абстракций архитектуры SDN, а раздел 4 рассматривает связь многоуровневой архитектуры SDN с известными технологиями поддержки SDN.

2. Терминология

Ниже приведены определения используемых в документе терминов.

Software-Defined Networking (SDN) – программно-определяемые сети

Модель программируемых сетей, которая поддерживает разделение уровней пересылки и управления через стандартизованные интерфейсы.

Resource — ресурс

Физическая или виртуальная компонента, доступная в системе. Ресурсы могут быть очень простыми и четко ограниченными (например, порт или очередь) или комплексными, состоящими из множества других ресурсов (например, сетевое устройство).

Network Device – сетевое устройство

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

Interface — интерфейс

Точка взаимодействия между двумя элементами (сущностями). При размещении элементов в разных местах интерфейс между ними обычно реализуется через сетевой протокол. Если элементы расположены в одном месте, интерфейс может быть реализован с помощью программного API7, межпроцессных коммуникаций (IPC8) или сетевого протокола.

Application (App) – приложение (программа)

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

Service – сервис (служба)

Часть программы, которая выполняет одну или множество функций и предоставляет один или множество интерфейсов API для приложений или других служб на том же или других уровнях, позволяя вызывать функции и возвращая один или множество результатов. Службы могут объединяться с другими службами или вызываться последовательно для создания нового сервиса.

Forwarding Plane (FP) – уровень пересылки

Набор ресурсов в масштабе всей сети, отвечающих за пересылку трафика.

Operational Plane (OP) – операционный уровень

Набор ресурсов, отвечающих за общее управление работой отдельных сетевых устройств.

Control Plane (CP) – уровень управления

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

Management Plane (MP) – уровень администрирования

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

Application Plane – уровень приложений

Набор приложений и служб, программирующих поведение сети.

Device and resource Abstraction Layer (DAL) – уровень абстракции устройств и ресурсов

Уровень абстракции ресурсов устройства, основанный на одной или множестве моделей. Для физических устройств этот уровень может называться уровнем абстракции оборудования (HAL9). DAL обеспечивает единую точку отсчета для ресурсов уровней пересылки и операций в устройстве.

Control Abstraction Layer (CAL) – уровень абстракции управления

Уровень абстракции управления. CAL обеспечивает доступ к интерфейсу «южной границы» уровня управления (Control-Plane Southbound Interface).

Management Abstraction Layer (MAL) – уровень абстракции администрирования

MAL обеспечивает доступ к интерфейсу «южной границы» уровня администрирования (Management-Plane Southbound Interface).

Network Services Abstraction Layer (NSAL) – уровень абстракции сетевых служб

Обеспечивает абстракции сервиса, которые могут применяться службами и приложениями.

3. Уровни и архитектура SDN

На рисунке 1 показаны абстрактные компоненты архитектуры SDN в форме достаточно подробной схемы верхнего уровня. Отметим, что в конкретной реализации разные уровни (plane) могут размещаться совместно или разделяться физически, как будет описано ниже.

SDN базируется на концепции разделения управляющих и управляемых объектов. Контроллер манипулирует управляемым объектом через некий интерфейс. Локальные интерфейсы обеспечиваются в основном путем вызова функций API из той или иной библиотеки или системных вызовов. Однако такие интерфейсы можно расширить с использованием протоколов, которые могут применять локальные коммуникации между процессами (IPC), или протоколов, работающих удаленно. Эти протоколы могут быть реализованы как открытые стандарты или фирменные (proprietary) решения.

Day в книге [PiNA] исследовал применение IPC в качестве основы для определения вариантов рекурсивной сетевой архитектуры с разной областью действия и набором операций. Модель [RINA10] описывает рекурсивную сетевую архитектуру на основе IPC, которая использует повторяющиеся шаблоны и структуры. Данный документ не предлагает новую архитектуру, здесь лишь рассматриваются предшествующие работы для систематизации. Хотя рекурсия выходит за рамки этой работы, на рисунке 1 показана иерархическая модель, в которой уровни могут образовывать стек над каждым другим уровнем, реализуя при необходимости рекурсию.

3.1. Обзор

В этом документе используется модель, центром которой является сетевое устройство. Уровень управления относится в основном к возможностям обработки пакетов устройством, а уровень администрирования — к общим аспектам работы устройства. Сетевое устройство рассматривается, как комплексный ресурс, который включает в себя или является частью множества ресурсов типа [DIOPR]. Ресурсы могут быть простыми, однокомпонентными сетевыми устройствами (например, порт или очередь в устройстве) или объединяться в комплексные ресурсы (например, сетевой адаптер или полное сетевое устройство).

Читателю следует принимать во внимание, что в этом документе не делается различий между физическими и виртуальными ресурсами, а также между программными и аппаратными реализациями, поскольку мы не углубляемся в вопросы реализации или производительности. Иными словами, ресурс может быть полностью реализован аппаратно или программно, а может быть гибридным. Кроме того, мы не различаем, реализуется ли ресурс как наложение (overlay) или часть (компонента) некого другого устройства. В общем случае программы сетевого устройства могут работать на «голом железе» (bare metal) или виртуализованной подложке. И, наконец, в документе не рассматривается выделение, организация и освобождение ресурсов.

              o--------------------------------o
              |                                |
              | +-------------+   +----------+ |
              | | Приложение  |   |  Сервис  | |
              | +-------------+   +----------+ |
              |       Прикладной уровень       |
              o---------------Y----------------o
                              |
*-----------------------------Y---------------------------------*
|            Уровень абстракции сетевых служб (NSAL)            |
*------Y------------------------------------------------Y-------*
       |                                                |
       |               Сервисный интерфейс               |
       |                                                |
o------Y------------------o       o---------------------Y------o
|      |Уровень управления|       |Уровень администрир. |      |
| +----Y----+   +-----+   |       |  +-----+       +----Y----+ |
| | Служба  |   | App |   |       |  | App |       | Служба  | |
| +----Y----+   +--Y--+   |       |  +--Y--+       +----Y----+ |
|      |           |      |       |     |               |      |
| *----Y-----------Y----* |       | *---Y---------------Y----* |
| | Уровень абстракции  | |       | | Уровень абстракции     | |
| | управления (CAL)    | |       | | администрирования (MAL)| |
| *----------Y----------* |       | *----------Y-------------* |
|            |            |       |            |               |
o------------|------------o       o------------|---------------o
             |                                 |
             | Южный                           | Южный
             | интерфейс                       | интерфейс
             | CP                              | MP
             |                                 |
*------------Y---------------------------------Y----------------*
|        Уровень абстракции устройств и ресурсов (DAL)          |
*------------Y---------------------------------Y----------------*
|            |                                 |                |
|    o-------Y----------o   +-----+   o--------Y----------o     |
|    |Уровень пересылки |   | App |   |Операционный уров. |     |
|    o------------------o   +-----+   o-------------------o     |
|                     Сетевое устройство                        |
+---------------------------------------------------------------+

Рисунок 1. Многоуровневая архитектура SDN.


SDN включает множество уровней, показанных на рисунке 1. Начиная с нижней части рисунка и перемещаясь вверх можно видеть перечисленные ниже уровни.

  • Уровень пересылки отвечает за обработку пакетов в путях данных на основе инструкций, полученных от уровня управления. Операции уровня пересылки включают пересылку, изменение и отбрасывание пакетов (могут включаться и другие операции). Уровень пересылки обычно является точкой завершения (termination point) для служб и приложений уровня управления. Уровень пересылки может включать ресурсы типа классификаторов. Этот уровень зачастую называют уровнем данных (data plane) или путем данных (data path).

  • Операционный уровень отвечает за управление рабочим состоянием сетевого устройства, например, его активностью, числом доступных портов, статусом каждого порта и т. п. Операционный уровень обычно служит точкой завершения для служб и приложений уровня администрирования. Операционный уровень связан с ресурсами сетевого устройства типа портов, памяти и т. п. Отметим, что у некоторых членов группы IRTF SDN RG имеется другое мнение по части определения операционного уровня. Т. е. можно сказать, что операционный уровень не самостоятелен и на практике является набором функций уровня пересылки. С другой стороны, этот уровень позволяет выделить область действия операций и в этом смысле операционный уровень указан отдельно на рисунке 1. В документе используется именно такой подход.

  • Уровень управления отвечает за принятие решений о том, как пакеты должны пересылаться одним или множеством сетевых устройств, и «выталкивает» эти решения вниз для выполнения их сетевыми устройствами. Уровень управления обычно связан с уровнем пересылки и в меньшей степени с операционным уровнем устройства. Уровень управления управления может быть заинтересован в информации операционного уровня, которая может включать, например, текущее состояние конкретного порта или его возможности. Основная работа уровня управления заключается в «тонкой настройке» таблиц, относящихся к уровню пересылки, на основе топологии сети или запросов внешних служб.

  • Уровень администрирования отвечает за мониторинг, настройку и администрирование сетевых устройств (например, принятие решений относительно состояния сетевого устройства). Уровень администрирования обычно взаимодействует с операционным уровнем и в меньшей степени с уровнем пересылки. Уровень администрирования может использоваться для настройки уровня пересылки, но делает это нечасто и более масштабно (на уровне устройства в целом), нежели операционный уровень. Например, уровень администрирования может разом установить правила пересылки для всех портов, хотя предполагается, что такие действия будут производиться редко.

  • Уровень приложений, на котором размещаются приложения и службы, определяющие поведение устройства. Приложения, которые непосредственно (или в первую очередь) поддерживают операции уровня пересылки (типа процесса маршрутизации на уровне управления), не считаются частью уровня приложений. Отметим, что приложения могут быть реализованы в форме модулей и распределены, поэтому зачастую могут охватывать разные уровни, показанные на рисунке 1.

[RFC7276] определяет уровни данных, управления и администрирования в терминах OAM11. Этот документ пытается расширить действие терминов, определенных в [RFC7276], с учетом всех аспектов архитектуры SDN.

Все отмеченные выше уровни соединяются через интерфейсы (Y на рисунке 1). Интерфейс может играть множество ролей в зависимости от того, размещаются ли соединяемые уровни на одном (физическом или виртуальном) устройстве. Если соответствующие уровни устроены так, что не размещаются на одном устройстве, интерфейс может принимать лишь форму протокола. Если уровни совмещаются на одном устройстве, интерфейс может быть реализован на основе открытого или фирменного протокола, открытого или фирменного API межпроцессного взаимодействия, а также вызовов ядра операционной системы.

Приложения, т. е. программы, выполняющие конкретные расчеты и использующие службы без предоставления доступа к другим приложениям, могут быть реализованы естественным путем внутри одного уровня или охватывать несколько уровней. Например, приложения или службы могут охватывать уровни управления и администрирования и, таким образом, иметь возможность использования обоих интерфейсов CPSI12 и MPSI13, хотя это не указано явно на рисунке 1. Примером этого может служить приложение, использующее сразу [OpenFlow] и [OF-CONFIG].

Службы, т. е. программы, обеспечивающие API для приложений или других служб, также могут быть естественным образом реализованы на конкретных уровнях. Службы, охватывающие несколько уровней, относятся также к уровню приложений.

Хотя это и не показано явно на рисунке 1, службы, приложения и целые уровни могут размещаться рекурсивно, обеспечивая в этой модели семантику наложения (перекрытия). Например, услуги уровня приложений могут обеспечиваться для других услуг или приложений через NSAL. Другие примеры включают виртуальные ресурсы, реализованные на основе физических ресурсов и иерархических контроллеров уровня управления [KANDOO].

Отметим, что этот документ посвящен коммуникациям «север-юг» между разными уровнями. Очевидно, что это не исключает коммуникаций между элементами внутри одного уровня.

Однако нужно отметить, что рисунке 1 представлен абстрактный вид разных уровней без деталей реализации. Многие реализации прошлых лет размещали уровень администрирования над уровнем управления. Это можно интерпретировать, как использование уровня управления в качестве сервиса для уровня администрирования. Более того, во многих сетях, особенно на маршрутизаторах Internet и коммутаторах Ethernet уровень управления был реализован в тесной связи с сетевым устройством. При этом уровень управления в целом был распределен по всей сети. С другой стороны, уровень администрирования обычно был централизованным и отвечал за администрирование уровня управления и всех устройств. Однако с принятием принципов SDN это различие утратило четкость.

В дополнение к перечисленным выше уровням данный документ рассматривает четыре абстрактных уровня.

  • Абстракция DAL представляет ресурсы уровней пересылки и операций для уровней управления и администрирования. Варианты DAL могут абстрагировать оба уровня или любой из двух уровней устройства для любого из уровней администрирования и управления.

  • Абстракция CAL представляет интерфейс южной границы уровня управления и DAL от приложений и служб для уровня управления.

  • Абстракция MAL представляет интерфейс южной границы уровня администрирования и DAL от приложений и служб для уровня администрирования.

  • Абстракция NSAL представляет службы для использования приложениями и другими службами.

На момент написания этого документа связанные с SDN работы начались и в других органах стандартизации (SDO). Например, в ITU разработаны архитектурные [ITUSG13] и сигнальные требования и протоколы [ITUSG11], но соответствующие исследовательские группы еще не опубликовали свои работы, за исключением [ITUY3300]. Взгляды, представленные в [ITUY3300] и [ONFArch], согласуются с этим документом.

3.2. Сетевые устройства

Сетевое устройство — это объект, принимающий пакеты на своих портах и выполняющий по отношению к ним одну или множество функций. Например, сетевое устройство может пересылать принятые пакеты, отбрасывать их, менять заголовок (или данные) и т. п. Сетевое устройство представляет собой агрегат множества ресурсов, таких как порты, CPU, память и очереди. Ресурсы могут быть простыми или агрегированными для формирования комплексного ресурса, воспринимаемого как целое. Сетевое устройство само по себе является комплексным ресурсом. Примерами сетевых устройств служат коммутаторы и маршрутизаторы. Другими примерами могут служить элементы сети, выполняющие функции выше (межсетевые экраны, балансировщики нагрузки, видеотранскодеры) или ниже уровня IP (коммутаторы L2, оптические и радиочастотные элементы сетей).

Сетевые устройства могут быть реализованы в виде оборудования или программ, а также быть физическими или виртуальными. Как уже было отмечено выше, в этом документе не делается различий между этими типами. В каждом сетевом устройстве имеется уровень пересылки и операционный уровень.

Уровень пересылки, зачастую называемый путем данных (data path), отвечает за обработку и пересылку пакетов. Этот уровень обеспечивает коммутацию и маршрутизацию, преобразование и фильтрацию пакетов. Ресурсы уровня пересылки включают фильтры, измерители, маркеры, классификаторы и могут включать иные типы ресурсов.

Операционный уровень отвечает за рабочее состояние сетевого устройства, например, за статус сетевых портов и интерфейсов. Ресурсы операционного уровня включают память, CPU, порты, интерфейсы, очереди и могут включать иные типы ресурсов.

Уровни пересылки и операций представляются через абстракцию DAL, которая может быть выражена одной или несколькими моделями. Примерами моделей абстракции уровня пересылки являются ForCES14 [RFC5812], OpenFlow [OpenFlow], YANG [RFC6020] и SNMP MIB [RFC3418]. Примеры моделей абстракции операционного уровня включают ForCES [RFC5812], YANG [RFC6020], SNMP MIB [RFC3418].

Отметим, что приложения также могут размещаться в сетевых устройствах. Примеры таких приложений включают мониторинг событий, определение топологии или обслуживание ARP [RFC0826] в самом устройстве вместо пересылки такого трафика на уровень управления.

3.3. Уровень управления

Уровень управления обычно распределен и отвечает главным образом за настройку уровня пересылки с использованием интерфейса CPSI с DAL в качестве опорной точки. Уровень управления (CP) отвечает за инструктирование уровня пересылки (FP) по части обработки сетевых пакетов.

Коммуникации между объектами уровня управления, которые иногда называют интерфейсом «восток-запад», обычно реализуются через протоколы шлюзов типа BGP [RFC4271] или PCEP15 [RFC5440]. Сообщения соответствующего протокола обычно передаются по основному каналу (in-band) и затем перенаправляются уровнем пересылки на уровень управления для дальнейшей обработки. Примеры этой категории включают [RCP], [SoftRouter] и [RouteFlow].

Функциональность уровня управления обычно включает:

  • определение и поддержку топологии;

  • выбор и организацию маршрутов для пакетов;

  • механизмы восстановления путей при отказах.

CPSI обычно определяется со следующими характеристиками:

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

  • ориентация на эффективность передачи через «провод» и представление устройству, а не человеку.

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

CPSI может быть реализован с помощью протокола, API или межпроцессных коммуникаций. Если уровень управления и сетевое устройство не размещены вместе, этот интерфейс, безусловно, является протоколом. Примерами CPSI являются ForCES [RFC5810] и OpenFlow [OpenFlow].

Абстракция CAL обеспечивает доступ управляющим приложениям и службам к разным CPSI. Уровень управления может поддерживать более одного интерфейса CPSI.

Управляющие приложения могут использовать CAL для управления сетевым устройством без предоставления услуг вышележащим уровням. Примеры включают приложения, выполняющие функции управления, типа OSPF, IS-IS, BGP.

Примерами служб уровня управления служат виртуальные частные ЛВС, туннели, топологические службы и т. п.

3.4. Уровень администрирования

Уровень администрирования обычно централизован и предназначен для обеспечения оптимальной работы сети в целом за счет взаимодействия с операционным уровнем сетевых устройств с использованием интерфейса MPSI с DAL в качестве опорной точки.

Функциональность уровня администрирования обычно начинается с представления сети в целом и традиционно рассчитана на восприятие человеком. Однако в последнее время действия человека все больше заменяют алгоритмами. Функциональность уровня администрирования [FCAPS] обычно включает:

  • администрирование отказов и мониторинга;

  • управление конфигурацией.

В дополнение к этому функциональность уровня администрирования может также включать управление функциями виртуальных сетей (VNF Manager16) и виртуализованной инфраструктуры как описано в [NFVArch]. Такие элементы могут использовать интерфейсы администрирования к ресурсам уровня управления для запроса и предоставления ресурсов виртуальным функциям, а также для организации виртуальных функций пересылки на базе аналогичных физических функций. Возможность создания общей абстрактной модели для SDN и виртуализации сетевых функций (NFV17) рассмотрена в [SDNNFV]. Отметим однако, что имеются лишь примеры приложений и служб на уровне управления, а формальных определений объектов в этом документе не дано. Как было отмечено выше, организация и определение любых связанных с этим объектов выходят за рамки документа.

Интерфейс MPSI, в отличие от CPSI, обычно не критичен ко времени и не разделяет предъявляемых CPSI требований.

MPSI ближе к человеку, чем CPSI (см. [RFC3535]), поэтому MPSI обычно имеет приведенные ниже характеристики:

  • интерфейс ориентирован в основном на удобство, а эффективность «в проводе» не столь важна;

  • сообщения передаются не столь часто, как в CPSI.

В качестве примера баланса между производительностью и удобством отметим соглашение, принятое на 2002 IAB Workshop [RFC3535] — ключевым требованием для технологии сетевого администрирования является простота использования, а не производительность. Как отмечено в [RFC6632], текстовые конфигурационные файлы должны поддерживать возможность включения символов разных языков. В предназначенных для человека строках следует применять кодировку UTF-8, а протокольные элементы должны быть строками ASCII без учета регистра символов, который требует более сложной обработки.

MPSI может варьироваться от протокола до API или даже межпроцессных коммуникаций. Если уровень администрирования не встроен в сетевое устройство, MPSI обычно является протоколом. Примерами MPSI являются ForCES [RFC5810], NETCONF [RFC6241], IPFIX18 [RFC7011], Syslog [RFC5424], Open vSwitch Database (OVSDB) [RFC7047] и SNMP [RFC3411].

Абстракция MAL обеспечивает службам и приложениям доступ к разным MPSI. Уровень администрирования может поддерживать более одного MPSI.

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

Службы уровня администрирования обеспечивают доступ для других служб или приложений выше административного уровня.

3.5. Обсуждение уровней управления и администрирования

Определение четкого различия между управлением (control) и администрированием (management) в контексте SDN привлекло внимание сообщества в процессе подготовки этого документа. Было отмечено, что раньше уровень администрирования по большей части игнорировался или выносился за пределы экосистемы SDN. Далее в этом разделе описаны характеристики различий между уровнями управления и администрирования для лучшего понимания механизмов, возможностей и потребностей соответствующих интерфейсов.

3.5.1. Временной масштаб

Был поднят вопрос о временном масштабе для уровней управления и администрирования в плане скорости реакции и требуемой быстротой изменений, вносимых на уровне пересылки или операций. В общем случае уровню управления требуется передавать свои обновления «часто» — в интервале миллисекунд, что требует каналов с высокой пропускной способностью и малыми задержками. Уровень администрирования, напротив, обычно работает в более продолжительных временных рамках (минуты, часы и даже дни), поэтому высокая скорость не так важна. Хорошим примером может служить изменение конфигурации устройства.

3.5.2. Продолжительность состояний

Другим различием между уровнями управления и администрирования является продолжительность сохранения состояний. Состояние считается краткосрочным (эфемерным), если оно сильно ограничено во времени и не требует записи в энергонезависимую память. Хорошим примером служит картина маршрутизации, которая обычно связана с уровнем управления. Долгосрочное состояние существует в течение достаточно продолжительного времени (от часов до дней и даже месяцев), предназначено для использования за пределами срока действия создавшего его процесса и может сохраняться при перезагрузке устройства. Долгосрочные состояния обычно связаны с уровнем администрирования.

3.5.3. Расположение

Как было отмечено выше, уровень управления обычно выполняется на сетевых устройствах и по своей природе распределен между ними, а уровень администрирования обычно выполняется централизовано на удалении от устройств. Однако с появлением централизации SDN (логической централизации) обнаружилась тенденция контроллеров путать различие между уровнями управления и администрирования в части их расположения.

3.5.4. Теорема CAP

Теорема CAP рассматривает распределенную вычислительную систему, состоящую из множества вычислительных ресурсов (CPU, память, хранилища), соединенных коммуникационной сетью и совместно решающих задачи. Теорема (иногда ее называют гипотезой) указывает три характеристики распределенных систем, которые нужны всегда.

  • Согласованность означает, что система одинаково реагирует на запрос, независимо от принявшего его узла (или не отвечает совсем).

  • Доступность означает, что система всегда отвечает на запрос (хотя запросы могут быть несогласованными или некорректными).

  • Устойчивость к разделению обеспечивает функционирование системы даже при отказе узлов или коммуникационной сети.

В 2000 году Eric Brewer [CAPBR] предположил, что распределенная система может удовлетворять любым двум из этих требований, но не всем трем. Это предположение позднее было подтверждено Gilbert и Lynch [CAPGL], а сейчас его обычно называют теоремой CAP [CAPFN].

Пересылку пакетов через сеть корректно будет считать вычислительной задачей. Одна из основных абстракций SDN заключается в том, что все элементы сети считаются вычислительными ресурсами, выполняющими простую расчетную задачу просмотра полей входящего пакета и принятия решения о его пересылке. Поскольку задача пересылки пакета со входа сети на ее выход обычно реализуется большим числом пересылающих элементов, сеть пересылающих элементов является распределенной вычислительной системой. Следовательно, теорема CAP применима к пересылке пакетов.

Если в контексте теоремы CAP считать устойчивость к разделению первостепенно важной, традиционные операции уровня управления обычно будут локальными и быстрыми (доступность), тогда как операции уровня администрирования обычно централизованы (согласованность) и могут быть достаточно медленными.

Теорема CAP обеспечивает также понимание архитектуры SDN. Например, централизованный контроллер SDN действует как согласованная глобальная база данных, а конкретные механизмы SDN обеспечивают согласованную обработку входящих в сеть пакетов всеми коммутаторами SDN. Вопрос устойчивости к потере связности с контроллером не решается в базовой модели SDN. Когда контроллер недоступен коммутатору SDN, поток становится недоступным, пока соединение не будет восстановлено. Предложено было использовать множество контроллеров SDN, расположенных в разных местах (например, указав в коммутаторе SDN список контроллеров), что может повысить уровень устойчивости к разделению, но за счет потери абсолютной согласованности. Panda и др. [CAPFN] выполнили первое исследование применимости теоремы CAP к SDN.

3.6. Уровень абстракции сетевых служб

Уровень NSAL обеспечивает доступ к службам уровней управления, администрирования и операций со стороны других служб и приложений. Отметим, что термин SAL слишком перегружен и часто применяется в разном контексте от разработки систем до ориентированной на услуги архитектуры, поэтому к нему явно добавлены сети (N — Network), чтобы подчеркнуть связь с рисунком 1, а в разделе 4 он отображен на известные решения SDN.

Интерфейсы служб могут принимать разные формы в зависимости от конкретных требований. Примеры сервисных интерфейсов включают RESTful API, открытые протоколы типа NETCONF, межпроцессные коммуникации, интерфейсы CORBA [CORBA] и т. п. Двумя основными подходами являются интерфейсы RESTful и интерфейсы вызова удаленных процедур (RPC19). Оба подхода используют архитектуру «клиент-сервер» и XML или JSON для передачи сообщений, но имеют слегка различающиеся характеристики.

Характеристики интерфейсов RESTful, разработанных в соответствии с парадигмой передачи репрезентативного состояния [REST], перечислены ниже.

  • Идентификация ресурсов позволяет указывать отдельные ресурсы, например, с URI.

  • Манипуляции с ресурсами через представления в форматах типа JSON, XML или HTML.

  • Описывающие себя сообщения, каждое из которых содержит информацию, достаточную для его обработки.

  • Гиперсреда в качестве конечного автомата приложения. Клиенту не нужно заранее знать как взаимодействовать с приложением, поскольку интерфейс API динамически предоставляется сервером.

Вызовы удаленных процедур (RPC) [RFC5531], типа XML-RPC и т. п., имеют следующие характеристики:

  • отдельные процедуры указываются идентификаторами;

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

3.7. Уровень приложений

Приложения и службы, использующие услуги уровня управления и/или администрирования, образуют уровень приложений.

Кроме того, службы уровня приложений могут предоставлять свои услуги другим службам и приложениям того же уровня через сервисные интерфейсы.

Примеры приложений включают определение топологии сети, предоставление сети, резервирование пути и т. п.

4. Представление модели SDN

Мы считаем, что в интерфейс «южной границы» SDN следует включать как CPSI, так и MPSI.

Контроллеры SDN типа [NOX] и [Beacon] представляют собой набор приложений и служб уровня управления, реализующих CPSI ([NOX] и [Beacon] используют OpenFlow) и обеспечивающих интерфейс «северной границы» для приложений. Интерфейс северной границы SDN для контроллеров реализован в уровне абстракции сетевых служб (NSAL) рисунка 1.

Указанная выше модель может применяться для описания всех известных технологий с поддержкой SDN, как будет показано ниже.

4.1. ForCES

Схема IETF ForCES20 [RFC3746] включает одну модель и два протокола. ForCES отделяет уровень пересылки от уровня управления открытым интерфейсом в виде протокола ForCES [RFC5810], который работает с объектами уровня пересылки, используя модель ForCES [RFC5812].

Модель ForCES [RFC5812] основана на том, что элементы сети состоят из множества логически разделенных объектов, работающих совместно для обеспечения заданной функциональности (например, маршрутизации или коммутации IP), а для внешнего наблюдателя они представляются цельными элементами сети.

ForCES моделирует уровень пересылки с использованием логических функциональных блоков (LFB21), которые, будучи связанными в граф, образуют элемент пересылки (FE22). LFB описываются в формате XML на основе схемы XML.

Определения LFB включают базовые и «заказные» (custom-defined) типы данных, определения метаданных, входные и выходные порты, операционные параметры и компоненты, а также определения возможностей и событий.

Модель ForCES может использоваться для определения LFB с требуемым уровнем детализации, независимо от физической или виртуальной природы устройств.

Протокол ForCES не зависит от модели и может служить для мониторинга, настройки и управления любым элементом, смоделированным в ForCES. Протокол включает простые команды Set, Get и Del. Протокол ForCES разрабатывался для обеспечения высокой пропускной способности и быстрых обновлений.

Применительно к рисунку 1, модель ForCES [RFC5812] подходит для DAL, а также уровней операций и пересылки, использующих LFB. Протокол ForCES [RFC5810] был разработан с расчетом на CPSI и подходит для этого интерфейса, но может применяться и для MPSI.

4.2. NETCONF/YANG

NETCONF23 [RFC6241] является протоколом сетевого управления IETF [RFC6632] и обеспечивает механизмы для создания, изменения и удаления конфигурации сетевых устройств.

Операции протокола NETCONF реализованы в форме вызова удаленных процедур (RPC). Протокол NETCONF использует представление данных в формате XML как для конфигурации, так и для протокольных сообщений. Недавние исследования, в частности, [ESNet] и [PENet] показали, что NETCONF работает лучше SNMP [RFC3411].

В дополнение к этому был разработан язык моделирования данных YANG [RFC6020] для задания моделей данных и протокольных операций NETCONF. Язык моделирования данных YANG используется для моделирования данных конфигурации и состояния в протоколе NETCONF, а также вызовах удаленных процедур и уведомлениях NETCONF.

Модели YANG организуют иерархию данных в форме дерева, где каждый узел имеет значение или набор дочерних узлов. Кроме того, YANG структурирует модели данных в модули и субмодули, что обеспечивает их многократное применение и расширяемость. YANG также включает набор базовых типов данных и позволяет определять свои типы.

YANG обеспечивает возможность определять NETCONF RPC, которые позволяют включать в протокол расширяемые наборы команд. Для определения RPC имена операций, входные и выходные параметры задаются с использованием операторов определения данных YANG.

Применительно к рисунку 1, модель YANG [RFC6020] подходит для задания DAL на уровнях операций и пересылки. NETCONF [RFC6241] подходит для MPSI. NETCONF является протоколом управления [RFC6632], который не был (изначально) рассчитан на быстрое обновление CP и может не соответствовать требованиям CPSI.

4.3. OpenFlow

Модель OpenFlow изначально разрабатывалась в Stanford University, а сейчас активно развивается в качестве стандарта [OpenFlow] консорциумом ONF24. Исходной целью было предоставление исследователям возможности применять экспериментальные протоколы в действующей сети [OF08]. Модель OpenFlow претерпела множество изменений и очевидно появление новых версий. Приведенное описание соответствует версии 1.4 [OpenFlow]. Вкратце, OpenFlow определяет протокол, с помощью которого логически централизованный контроллер может управлять коммутатором OpenFlow. Каждый коммутатор, соответствующий OpenFlow, поддерживает одну или множество таблиц потоков, которые служат для поиска (lookup) пакетов. При поиске и пересылке пакетов применяются различные операции. Таблица групп и канал OpenFlow к внешнему контроллеру также входят в спецификацию коммутатора.

Применительно к рисунку 1, спецификации коммутатора OpenFlow [OpenFlow] определяют DAL для уровня пересылки, а также для CPSI. Протокол OF-CONFIG [OF-CONFIG], основанный на модели YANG [RFC6020], обеспечивает DAL для уровней пересылки и операций коммутатора OpenFlow, а также задает NETCONF [RFC6241] в качестве MPSI. OF-CONFIG перекрывается с OpenFlow DAL, но при использовании NETCONF [RFC6241] в качестве транспортного протокола, ему присущи ограничения, описанные в предыдущем параграфе.

4.4. Интерфейс с системой маршрутизации

Интерфейс с системой маршрутизации (I2RS) обеспечивает стандартный путь взаимодействия с системой маршрутизации в реальном масштабе времени с управлением по событиям через набор определяемых протоколами интерфейсов управления и администрирования. По сути, одной из основных целей I2RS является обеспечение возможности программирования RIB25), что позволит по новому организовать работу сетей.

Интерфейс I2RS изначально не был предназначен для создания новых интерфейсов и лишь усиливал или расширял существующие, а также определял информационные модели для системы маршрутизации. Например, в недавнем обсуждении проблем I2RS [I2RSProb] рассматривались ранее определенные IETF протоколы типа ForCES [RFC5810], NETCONF [RFC6241] и SNMP [RFC3417]. Для определения информационных моделей и моделей данных рабочая группа I2RS выбрала язык моделирования YANG [RFC6020].

В настоящее время группа I2RS занята разработкой информационной модели [I2RSInfo] применительно к уровню абстракции сетевых служб (NSAL) для агента I2RS.

Применительно к рисунку 1, архитектура I2RS [I2RSArch] охватывает уровни управления и приложений и использует любые доступные CPSI и DAL, будь то ForCES [RFC5810], OpenFlow [OpenFlow] или другой интерфейс. Агент I2RS является службой уровня управления. Все службы и приложения «поверх» этого агента относятся к уровням управления, администрирования или приложений. В документах I2RS административный доступ к агенту может быть обеспечен протоколами управления типа SNMP и NETCONF. Протокол I2RS можно также отобразить на сервисный интерфейс для обеспечения доступа службам и приложениям, не относящимся к уровню управления.

4.5. SNMP

Простой протокол сетевого управления SNMP26 является протоколом управления, стандартизованным IETF, и в настоящее время имеется третья версия протокола (SNMPv3) [RFC3417] [RFC3412] [RFC3414]. Протокол включает набор стандартов управления сетью, в том числе протокол уровня приложений, схему баз данных и набор объектов данных. SNMP представляет данные администрирования (управляемые объекты) в форме переменных управляемой системы, которые описывают конфигурацию этой системы. Переменные могут считываться и устанавливаться управляющими приложениями.

SNMP использует расширяемую модель для описания данных, определяемого базами MIB27, которые описывают структуру данных управления для подсистемы устройства. В MIB используется иерархическое пространство имен, содержащее идентификаторы объектов (OID28). Каждый идентификатор OID указывает переменную, которая может быть прочитана и установлена по протоколу SNMP. В базах MIB используются обозначения, определенные структурой управляющей информации (Structure of Management Information) версии 2 [RFC2578].

Ранний пример использования SNMP в контексте SDN рассмотрен в работе [Peregrine].

Применительно к рисунку 1, базы SNMP MIB могут служить для описания DAL уровней пересылки и операций. Подобно YANG, базы SNMP MIB могут описывать DAL для уровня пересылки. Протокол SNMP, подобно NETCONF, предназначен для MPSI.

4.6. PCEP

Архитектура PCE29 [RFC4655] определяет сущность, способную рассчитывать пути для одной или множества служб. В качестве PCE может служить узел сети, станция управления сетью или специализированная расчетная платформа, знающие о ресурсах и способные учесть множество ограничений для разных вариантов расчета путей и технологий коммутации. Коммуникационный протокол PCE (PCEP30) [RFC5440] применяется для обмена информацией между клиентами PCC31 и PCE или между множеством устройств PCE.

Архитектура PCE представляет сеть с разделением расчета путей для служб, сквозной сигнализации и реальной пересылки пакетов. Определения интерактивного (online) или автономного (offline) расчета пути зависят от доступности PCE из сети и узлов системы управления сетью (NMS32), а также от типа оптимизации запроса, который может существенно влиять на время отклика PCE клиентам PCC.

Механизм обмена сообщениями PCEP упрощает задание конечных точек расчета (адреса отправителя и получателя), целевых функций (запрошенный алгоритм и критерии оптимизации) и связанных с ними ограничений типа параметров трафика (например, запрашиваемой полосы), возможностей коммутации и типа кодирования.

Применительно к рисунку 1, PCE является службой уровня управления, предоставляющей услуги приложениям этого уровня. PCEP может служить в качестве интерфейса «восток-запад» между PCE, которые могут выступать в качестве элементов управления доменом (службы и приложения). Рабочая группа PCE определяет расширения [PCEActive], которые позволяют активному PCE работать с использованием PCEP, MPLS или LSP33, что делает его применимым в качестве CPSI для коммутаторов MPLS и GMPLS.

4.7. BFD

Обнаружение двухсторонней пересылки BFD34 [RFC5880] — это стандартизованный IETF сетевой протокол, разработанный для детектирования отказов на пути между двумя элементами пересылки, включая физические интерфейсы, субинтерфейсы, каналы данных и (для расширения возможностей) сами устройства пересылки, с потенциально очень малой задержкой. BFD может обеспечивать детектирование с малыми издержками для всех типов путей между системами, включая прямые физические соединения, виртуальные устройства (каналы), MPLS LSP, пути с множеством интервалов маршрутизации и односторонние соединения, для которых имеется также обратный путь. Протокол часто реализуется в неких компонентах машины пересылки в системе, когда пересылка и управление разделены.

Применительно к рисунку 1, агент BFD может быть реализован в виде службы уровня управления, которая будет использовать CPSI в направлении уровня пересылки для отправки и приема пакетов BFD. Однако агенты BFD обычно реализуются в форме приложения на устройстве и используют уровень пересылки для отправки и получения пакетов BFD, обновляя соответствующим образом ресурсы уровня управления. Службы и приложения уровней администрирования и управления, которые отслеживают изменение ресурсов или подписаны на уведомления о таких изменениях, будут узнавать об изменениях через соответствующие интерфейсы и выполнять требуемые действия.

5. Заключение

Этот документ был создан после тщательного и детального анализа литературы, RFC и документов, выпущенных другими органами стандартизации. Документ был представлен на рассмотрение широкого сообщества SDN и мы надеемся, что он сможет послужить удобным инструментом для сетевых исследователей, инженеров и практиков в ближайшие годы.

Мы завершаем документ кратким обзором терминологии многоуровневой архитектуры SDN. В общем случае мы рассматриваем элемент сети как некий набор ресурсов. Каждый элемент сети включает уровень пересылки (FP), отвечающий за обработку пакетов в пути данных, и уровень операций (OP), отвечающий за управление рабочим состоянием устройства. Ресурсы элемента сети представляются абстракцией DAL, управляются и администрируются службами или приложениями, которые относятся к уровню управления или администрирования. Уровень управления (CP) отвечает за принятие решений о пересылке пакетов. Уровень администрирования (MP) отвечает за мониторинг, настройку и администрирование сетевых устройств. Интерфейсы служб представляются абстракцией NSAL, через которую другие сетевые службы или приложения могут использовать их. Введенная этим документом систематика (таксономия) определяет разные уровни SDN, уровни абстракции и интерфейсы для того, чтобы прояснить терминологию SDN и задать общепринятые определения для сообщества SDN, безотносительно к конкретным реализациям.

6. Вопросы безопасности

Этот документ не предлагает новой архитектуры или протокола, поэтому он не оказывает какого-либо влияния на безопасность Internet. При этом безопасность имеет первостепенное значение для сетей, поэтому ее следует принимать во внимание при разработке сетевой архитектуры и развертывании сетей. Безопасность SDN рассматривается в литературе, например, в [SDNSecurity], [SDNSecServ] и [SDNSecOF]. Вопросы безопасности, относящиеся к конкретным интерфейсам (например, ForCES, I2RS, SNMP или NETCONF), рассмотрены в соответствующих документа, а также в [RFC7149].

7. Литература

[A4D05] Greenberg, A., Hjalmtysson, G., Maltz, D., Myers, A., Rexford, J., Xie, G., Yan, H., Zhan, J., and H. Zhang, «A Clean Slate 4D Approach to Network Control and Management«, ACM SIGCOMM Computer Communication Review, Volume 35, Issue 5, pp. 41-54, 2005.

[ALIEN] Parniewicz, D., Corin, R., Ogrodowczyk, L., Fard, M., Matias, J., Gerola, M., Fuentes, V., Toseef, U., Zaalouk, A., Belter, B., Jacob, E., and K. Pentikousis, «Design and Implementation of an OpenFlow Hardware Abstraction Layer», In Proceedings of the ACM SIGCOMM Workshop on Distributed Cloud Computing (DCC), Chicago, Illinois, USA, pp. 71-76, doi 10.1145/2627566.2627577, August 2014.

[Beacon] Erickson, D., «The Beacon OpenFlow Controller«, In Proceedings of the second ACM SIGCOMM workshop on Hot Topics in Software Defined Networking, pp. 13-18, 2013.

[CAPBR] Brewer, E., «Towards Robust Distributed Systems«, In Proceedings of the Symposium on Principles of Distributed Computing (PODC), 2000.

[CAPFN] Panda, A., Scott, C., Ghodsi, A., Koponen, T., and S. Shenker, «CAP for Networks«, In Proceedings of the second ACM SIGCOMM workshop on Hot Topics in Software Defined Networking, pp. 91-96, 2013.

[CAPGL] Gilbert, S. and N. Lynch, «Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services«, ACM SIGACT News, Volume 33, Issue 2, pp. 51-59, 2002.

[CORBA] Object Management Group, «CORBA Version 3.3», November 2012, <http://www.omg.org/spec/CORBA/3.3/>.

[DIOPR] Denazis, S., Miki, K., Vicente, J., and A. Campbell, «Designing Interfaces for Open Programmable Routers«, In «Active Networks», Springer Berlin Heidelberg, pp. 13-24, 1999.

[ESNet] Yu, J. and I. Al Ajarmeh, «An Empirical Study of the NETCONF Protocol», Sixth International Conference on Networking and Services, pp. 253-258, 2010.

[FCAPS] ITU, «Management Framework For Open Systems Interconnection (OSI) For CCITT Applications», ITU Recommendation X.700, September 1992, <http://www.itu.int/rec/T-REC-X.700-199209-I/en>.

[I2RSArch] Atlas, A., Halpern, J., Hares, S., Ward, D., and T. Nadeau, «An Architecture for the Interface to the Routing System», Work in Progress35, draft-ietf-i2rs-architecture-07, December 2014.

[I2RSInfo] Bahadur, N., Folkes, R., Kini, S., and J. Medved, «Routing Information Base Info Model», Work in Progress, draft-ietf-i2rs-rib-info-model-0436, December 2014.

[I2RSProb] Atlas, A., Nadeau, T., and D. Ward, «Interface to the Routing System Problem Statement», Work in Progress37, draft-ietf-i2rs-problem-statement-05, January 2015.

[ITUATM] ITU, «B-ISDN ATM Layer Specification», ITU Recommendation I.361, 1990, <http://www.itu.int/rec/T-REC-I.361-199902-I/en>.

[ITUSG11] ITU, «ITU-T Study Group 11: Protocols and test specifications», <http://www.itu.int/en/ITU-T/studygroups/2013-2016/11/Pages/default.aspx>.

[ITUSG13] ITU, «ITU-T Study Group 13: Future networks including cloud computing, mobile and next-generation networks», <http://www.itu.int/en/ITU-T/studygroups/2013-2016/13/Pages/default.aspx>.

[ITUSS7] ITU, «Introduction to CCITT Signalling System No. 7», ITU Recommendation Q.700, 1993, <http://www.itu.int/rec/T-REC-Q.700-199303-I/e>.

[ITUY3300] ITU, «Framework of software-defined networking», ITU Recommendation Y.3300, June 2014, <http://www.itu.int/rec/T-REC-Y.3300-201406-I/en>.

[KANDOO] Yeganeh, S. and Y. Ganjali, «Kandoo: A Framework for Efficient and Scalable Offloading of Control Applications«, In Proceedings of the first ACM SIGCOMM workshop on Hot Topics in Software Defined Networks, pp. 19-24, 2012.

[NFVArch] ETSI, «Network Functions Virtualisation (NFV): Architectural Framework», ETSI GS NFV 002, October 2013, <http://www.etsi.org/deliver/etsi_gs/nfv/001_099/002/01.01.01_60/gs_nfv002v010101p.pdf>.

[NOX] Gude, N., Koponen, T., Pettit, J., Pfaff, B., Casado, M., McKeown, N., and S. Shenker, «NOX: Towards an Operating System for Networks«, ACM SIGCOMM Computer Communication Review, Volume 38, Issue 3, pp. 105-110, July 2008.

[NV09] Chowdhury, N. and R. Boutaba, «Network Virtualization: State of the Art and Research Challenges», Communications Magazine, IEEE, Volume 47, Issue 7, pp. 20-26, 2009.

[OF-CONFIG] Open Networking Foundation, «OpenFlow Management and Configuration Protocol (OF-Config 1.1.1)», March 2013, <https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow-config/of-config-1-1-1.pdf>.

[OF08] McKeown, N., Anderson, T., Balakrishnan, H., Parulkar, G., Peterson, L., Rexford, J., Shenker, S., and J. Turner, «OpenFlow: Enabling Innovation in Campus Networks«, ACM SIGCOMM Computer Communication Review, Volume 38, Issue 2, pp. 69-74, 2008.

[ONFArch] Open Networking Foundation, «SDN Architecture, Version 1», June 2014, <https://www.opennetworking.org/images/stories/downloads/sdn-resources/technical-reports/TR_SDN_ARCH_1.0_06062014.pdf>.

[OpenFlow] Open Networking Foundation, «The OpenFlow Switch Specification, Version 1.4.0», October 2013, <https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.4.0.pdf>.

[P1520] Biswas, J., Lazar, A., Huard, J., Lim, K., Mahjoub, S., Pau, L., Suzuki, M., Torstensson, S., Wang, W., and S. Weinstein, «The IEEE P1520 standards initiative for programmable network interfaces», IEEE Communications Magazine, Volume 36, Issue 10, pp. 64-70, 1998.

[PCEActive] Crabbe, E., Minei, I., Medved, J., and R. Varga, «PCEP Extensions for Stateful PCE», Work in Progress38, draft-ietf-pce-stateful-pce-10, October 2014.

[PENet] Hedstrom, B., Watwe, A., and S. Sakthidharan, «Protocol Efficiencies of NETCONF versus SNMP for Configuration Management Functions«, Master’s thesis, University of Colorado, 2011.

[PNSurvey99] Campbell, A., De Meer, H., Kounavis, M., Miki, K., Vicente, J., and D. Villela, «A Survey of Programmable Networks«, ACM SIGCOMM Computer Communication Review, Volume 29, Issue 2, pp. 7-23, September 1992.

[Peregrine] Chiueh, D., Tu, C., Wang, Y., Wang, P., Li, K., and Y. Huang, «Peregrine: An All-Layer-2 Container Computer Network», In Proceedings of the 2012 IEEE 5th International Conference on Cloud Computing, pp. 686-693, 2012.

[PiNA] Day, J., «Patterns in Network Architecture: A Return to Fundamentals», Prentice Hall, ISBN 0132252422, 2008.

[RCP] Caesar, M., Caldwell, D., Feamster, N., Rexford, J., Shaikh, A., and J. van der Merwe, «Design and Implementation of a Routing Control Platform«, In Proceedings of the 2nd conference on Symposium on Networked Systems Design & Implementation Volume 2, pp. 15-28, 2005.

[REST] Fielding, Roy, «Chapter 5: Representational State Transfer (REST)», in Dissertation «Architectural Styles and the Design of Network-based Software Architectures«, 2000.

[RFC0826] Plummer, D., «Ethernet Address Resolution Protocol: Or converting network protocol addresses to 48.bit Ethernet address for transmission on Ethernet hardware», STD 37, RFC 826, November 1982, <http://www.rfc-editor.org/info/rfc826>.

[RFC1953] Newman, P., Edwards, W., Hinden, R., Hoffman, E., Ching Liaw, F., Lyon, T., and G. Minshall, «Ipsilon Flow Management Protocol Specification for IPv4 Version 1.0», RFC 1953, May 1996, <http://www.rfc-editor.org/info/rfc1953>.

[RFC2297] Newman, P., Edwards, W., Hinden, R., Hoffman, E., Liaw, F., Lyon, T., and G. Minshall, «Ipsilon’s General Switch Management Protocol Specification Version 2.0», RFC 2297, March 1998, <http://www.rfc-editor.org/info/rfc2297>.

[RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., «Structure of Management Information Version 2 (SMIv2)», STD 58, RFC 2578, April 1999, <http://www.rfc-editor.org/info/rfc2578>.

[RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, «An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks», STD 62, RFC 3411, December 2002, <http://www.rfc-editor.org/info/rfc3411>.

[RFC3412] Case, J., Harrington, D., Presuhn, R., and B. Wijnen, «Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3412, December 2002, <http://www.rfc-editor.org/info/rfc3412>.

[RFC3414] Blumenthal, U. and B. Wijnen, «User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)», STD 62, RFC 3414, December 2002, <http://www.rfc-editor.org/info/rfc3414>.

[RFC3417] Presuhn, R., «Transport Mappings for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3417, December 2002, <http://www.rfc-editor.org/info/rfc3417>.

[RFC3418] Presuhn, R., «Management Information Base (MIB) for the Simple Network Management Protocol (SNMP)», STD 62, RFC 3418, December 2002, <http://www.rfc-editor.org/info/rfc3418>.

[RFC3535] Schoenwaelder, J., «Overview of the 2002 IAB Network Management Workshop», RFC 3535, May 2003, <http://www.rfc-editor.org/info/rfc3535>.

[RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, «Forwarding and Control Element Separation (ForCES) Framework», RFC 3746, April 2004, <http://www.rfc-editor.org/info/rfc3746>.

[RFC4271] Rekhter, Y., Li, T., and S. Hares, «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006, <http://www.rfc-editor.org/info/rfc4271>.

[RFC4655] Farrel, A., Vasseur, J., and J. Ash, «A Path Computation Element (PCE)-Based Architecture», RFC 4655, August 2006, <http://www.rfc-editor.org/info/rfc4655>.

[RFC5424] Gerhards, R., «The Syslog Protocol», RFC 5424, March 2009, <http://www.rfc-editor.org/info/rfc5424>.

[RFC5440] Vasseur, JP. and JL. Le Roux, «Path Computation Element (PCE) Communication Protocol (PCEP)», RFC 5440, March 2009, <http://www.rfc-editor.org/info/rfc5440>.

[RFC5531] Thurlow, R., «RPC: Remote Procedure Call Protocol Specification Version 2», RFC 5531, May 2009, <http://www.rfc-editor.org/info/rfc5531>.

[RFC5743] Falk, A., «Definition of an Internet Research Task Force (IRTF) Document Stream», RFC 5743, December 2009, <http://www.rfc-editor.org/info/rfc5743>.

[RFC5810] Doria, A., Hadi Salim, J., Haas, R., Khosravi, H., Wang, W., Dong, L., Gopal, R., and J. Halpern, «Forwarding and Control Element Separation (ForCES) Protocol Specification», RFC 5810, March 2010, <http://www.rfc-editor.org/info/rfc5810>.

[RFC5812] Halpern, J. and J. Hadi Salim, «Forwarding and Control Element Separation (ForCES) Forwarding Element Model», RFC 5812, March 2010, <http://www.rfc-editor.org/info/rfc5812>.

[RFC5880] Katz, D. and D. Ward, «Bidirectional Forwarding Detection (BFD)», RFC 5880, June 2010, <http://www.rfc-editor.org/info/rfc5880>.

[RFC6020] Bjorklund, M., «YANG — A Data Modeling Language for the Network Configuration Protocol (NETCONF)», RFC 6020, October 2010, <http://www.rfc-editor.org/info/rfc6020>.

[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, «Network Configuration Protocol (NETCONF)», RFC 6241, June 2011, <http://www.rfc-editor.org/info/rfc6241>.

[RFC6632] Ersue, M. and B. Claise, «An Overview of the IETF Network Management Standards», RFC 6632, June 2012, <http://www.rfc-editor.org/info/rfc6632>.

[RFC7011] Claise, B., Trammell, B., and P. Aitken, «Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information», STD 77, RFC 7011, September 2013, <http://www.rfc-editor.org/info/rfc7011>.

[RFC7047] Pfaff, B. and B. Davie, «The Open vSwitch Database Management Protocol», RFC 7047, December 2013, <http://www.rfc-editor.org/info/rfc7047>.

[RFC7149] Boucadair, M. and C. Jacquenet, «Software-Defined Networking: A Perspective from within a Service Provider Environment», RFC 7149, March 2014, <http://www.rfc-editor.org/info/rfc7149>.

[RFC7276] Mizrahi, T., Sprecher, N., Bellagamba, E., and Y. Weingarten, «An Overview of Operations, Administration, and Maintenance (OAM) Tools», RFC 7276, June 2014, <http://www.rfc-editor.org/info/rfc7276>.

[RINA] Day, J., Matta, I., and K. Mattar, «Networking is IPC: A Guiding Principle to a Better Internet«, In Proceedings of the 2008 ACM CoNEXT Conference, Article No. 67, 2008.

[RouteFlow] Nascimento, M., Rothenberg, C., Salvador, M., Correa, C., de Lucena, S., and M. Magalhaes, «Virtual Routers as a Service: The RouteFlow Approach Leveraging Software-Defined Networks«, In Proceedings of the 6th International Conference on Future Internet Technologies, pp. 34-37, 2011.

[SDNACS] Kreutz, D., Ramos, F., Verissimo, P., Rothenberg, C., Azodolmolky, S., and S. Uhlig, «Software-Defined Networking: A Comprehensive Survey«, Networking and Internet Architecture (cs.NI), arXiv:1406.0440, 2014.

[SDNHistory] Feamster, N., Rexford, J., and E. Zegura, «The Road to SDN: An Intellectual History of Programmable Networks«, ACM Queue, Volume 11, Issue 12, 2013.

[SDNNFV] Haleplidis, E., Hadi Salim, J., Denazis, S., and O. Koufopavlou, «Towards a Network Abstraction Model for SDN», Journal of Network and Systems Management: Special Issue on Management of Software Defined Networks, pp. 1-19, 2014.

[SDNSecOF] Kloti, R., Kotronis, V., and P. Smith, «OpenFlow: A Security Analysis«, 21st IEEE International Conference on Network Protocols (ICNP) pp. 1-6, October 2013.

[SDNSecServ] Scott-Hayward, S., O’Callaghan, G., and S. Sezer, «SDN Security: A Survey«, In IEEE SDN for Future Networks and Services (SDN4FNS), pp. 1-7, 2013.

[SDNSecurity] Kreutz, D., Ramos, F., and P. Verissimo, «Towards Secure and Dependable Software-Defined Networks«, In Proceedings of the second ACM SIGCOMM workshop on Hot Topics in Software Defined Networking, pp. 55-60, 2013.

[SDNSurvey] Nunes, B., Mendonca, M., Nguyen, X., Obraczka, K., and T. Turletti, «A Survey of Software-Defined Networking: Past, Present, and Future of Programmable Networks«, IEEE Communications Surveys and Tutorials, DOI:10.1109/SURV.2014.012214.00180, 2014.

[SLTSDN] Jarraya, Y., Madi, T., and M. Debbabi, «A Survey and a Layered Taxonomy of Software-Defined Networking«, IEEE Communications Surveys and Tutorials, Volume 16, Issue 4, pp. 1955-1980, 2014.

[SoftRouter] Lakshman, T., Nandagopal, T., Ramjee, R., Sabnani, K., and T. Woo, «The SoftRouter Architecture«, In Proceedings of the ACM SIGCOMM Workshop on Hot Topics in Networking, 2004.

[Tempest] Rooney, S., van der Merwe, J., Crosby, S., and I. Leslie, «The Tempest: A Framework for Safe, Resource Assured, Programmable Networks«, Communications Magazine, IEEE, Volume 36, Issue 10, pp. 42-53, 1998.

Благодарности

Авторы благодарны Salvatore Loreto и Sudhir Modali за их вклад в первоначальное обсуждение в рамках почтовой конференции SDNRG, а также связанные с документом замечания, которые помогли улучшить форму документа.

Кроме того, мы выражаем признательность (в алфавитном порядке) Shivleela Arlimatti, Roland Bless, Scott Brim, Alan Clark, Luis Miguel Contreras Murillo, Tim Copley, Linda Dunbar, Ken Gray, Deniz Gurkan, Dave Hood, Georgios Karagiannis, Bhumip Khasnabish, Sriganesh Kini, Ramki Krishnan, Dirk Kutscher, Diego Lopez, Scott Mansfield, Pedro Martinez-Julia, David E. Mcdysan, Erik Nordmark, Carlos Pignataro, Robert Raszuk, Bless Roland, Francisco Javier Ros Munoz, Dimitri Staessens, Yaakov Stein, Eve Varma, Stuart Venters, Russ White и Lee Young за критические замечания о и дискуссии в рамках IETF 88, IETF 89 и IETF 90, а также в почтовой конференции SDNRG, которые были приняты во внимание при пересмотре этого документа.

Мы благодарим (в алфавитном порядке) Spencer Dawkins и Eliot Lear за рецензирование в IRSG, которое внесло уточнения в документ.

Наконец, мы благодарим Nobo Akiya за рецензирование раздела BFD, Julien Meuric за рецензирование раздела PCE, а также Adrian Farrel и Benoit Claise за рецензирование документа в IESG.

Поддержка Kostas Pentikousis осуществлялась [ALIEN],исследовательским проектом, частично финансируемым Европейской Комиссией про программе Seventh Framework (грант 317880). Выраженное здесь мнение принадлежит лишь автору. Европейская Комиссия не несет никакой ответственности за любое использование содержащейся в этом документе информации.

Участники работы

Авторы благодарны перечисленным ниже (в алфавитном порядке) людям, внесшим свой вклад в создание этого документа. Все они предоставили тексты, ссылки и комментарии, которые позволили сделать документ более полным.

  • Daniel King предоставил текст, относящийся к PCEP.

  • Scott Mansfield предоставил информацию по текущим работам ITU в сфере SDN.

  • Yaakov Stein предоставил текст, относящийся к теореме CAP и связанную с с SDO информацию.

  • Russ White внес предложения по тексту определений управления, администрирования и приложений.

Адреса авторов

Evangelos Haleplidis (редактор)

University of Patras

Department of Electrical and Computer Engineering

Patras 26500

Greece

EMail: ehalep@ece.upatras.gr

Kostas Pentikousis (редактор)

EICT GmbH

Torgauer Strasse 12-15

10829 Berlin

Germany

EMail: k.pentikousis@eict.de

Spyros Denazis

University of Patras

Department of Electrical and Computer Engineering

Patras 26500

Greece

EMail: sdena@upatras.gr

Jamal Hadi Salim

Mojatatu Networks

Suite 400, 303 Moodie Dr.

Ottawa, Ontario K2H 9R4

Canada

EMail: hadi@mojatatu.com

David Meyer

Brocade

EMail: dmm@1-4-5.net

Odysseas Koufopavlou

University of Patras

Department of Electrical and Computer Engineering

Patras 26500

Greece

EMail: odysseas@ece.upatras.gr


Перевод на русский язык

Николай Малых

nmalykh@gmail.com

1Software-Defined Networking.

2Software-Defined Networking Research Group — группа по исследованию программно-определяемых сетей.

3Internet Research Task Force — группа по исследованию технологий Internet.

4Network Configuration Protocol — протокол настройки сети.

5Оригинальное название направления — Survey of SDN approaches and Taxonomies.

6Consistency, Availability and Partitioning — согласованность, доступность и разделение.

7Application programming interface — интерфейс с прикладными программами.

8Inter-process communication.

9Hardware Abstraction Layer.

10Recursive InterNetwork Architecture — рекурсивная межсетевая архитектура.

11Operations, Administration, and Maintenance — операции, администрирование, обслуживание.

12Control-Plane Southbound Interface — интерфейс южной границы уровня управления.

13Management-Plane Southbound Interface — интерфейс южной границы уровня администрирования.

14Forwarding and Control Element Separation — разделение элементов пересылки и управления.

15Path Computation Element (PCE) Communication Protocol — коммуникационный протокол элементов расчета пути.

16Virtual Network Function Manager.

17Network Function Virtualization.

18IP Flow Information Export — экспорт информации о потоках IP.

19Remote Procedure Call.

20Forwarding and Control Element Separation — разделение элементов пересылки и управления.

21Logical Functional Block.

22Forwarding Element.

23Network Configuration Protocol — протокол настройки конфигурации сети.

24Open Networking Foundation.

25Routing Information Base — база данных маршрутизации.

26Simple Network Management Protocol.

27Management Information Base — база данных управления.

28Object identifier.

29Path Computation Element — элемент расчета пути.

30PCE Communication Protocol.

31Path Computation Client.

32Network Management System.

33GMPLS Label Switched Path — путь с коммутацией по меткам GMPLS.

34Bidirectional Forwarding Detection.

35Работа завершена и опубликована в RFC 7921. Прим. перев.

36Работа завершена и опубликована в RFC 8430. Прим. перев.

37Работа завершена и опубликована в RFC 7920. Прим. перев.

38Работа завершена и опубликована в RFC 8231. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 7426 Software-Defined Networking (SDN): Layers and Architecture Terminology отключены

RFC 7413 TCP Fast Open

Internet Engineering Task Force (IETF)                          Y. Cheng
Request for Comments: 7413                                        J. Chu
Category: Experimental                                  S. Radhakrishnan
ISSN: 2070-1721                                                  A. Jain
                                                                  Google
                                                           December 2014

TCP Fast Open

Механизм TFO

PDF

Аннотация

Этот документ описывает экспериментальный механизм TCP, названный TCP Fast Open (TFO). TFO позволяет передавать данные в пакетах SYN и SYN-ACK и воспринимать их на приемной стороне в процессе начального согласования соединения. Это позволяет сэкономить один интервал кругового обхода (round-trip time или RTT) по сравнению со стандартным TCP, где применяется трехэтапное согласование (three-way handshake или 3WHS) до того, как может начаться обмен данными. Однако TFO отступает от стандартной семантики TCP, поскольку данные в SYN при некоторых обстоятельствах допускают повторное использование (replay). Приложениям не следует использовать TFO, если они не готовы к таким ситуациям. Этот вопрос рассмотрен в разделе 6. Применимость TFO.

Статус документа

Документ не является спецификацией стандарта (Internet Standards Track) и публикуется для проверки, экспериментальной реализации и оценки.

Документ определяет экспериментальный протокол (Experimental Protocol) для сообщества Internet. Документ является результатом работы IETF1 и выражает согласованное мнение сообщества IETF. Документ прошел открытое рецензирование и одобрен для публикации IESG2. Не все одобренные IESG документы претендуют на статус того или иного стандарта Internet (см. раздел 2 в RFC 5741).

Информация о текущем статусе документа, найденных ошибках и способах обратной связи доступна по ссылке http://www.rfc-editor.org/info/rfc7413.

Авторские права

Copyright (c) 2014. Авторские права принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, перечисленные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

TFO является экспериментальным обновлением TCP, которое позволяет обмен данными на этапе согласования соединения TCP. Этот документ описывает решение, которое позволяет приложениям сэкономить один интервал кругового обхода без серьезного влияния на безопасность. Основой TFO является значение security cookie, используемое серверной стороной для проверки подлинности (аутентификации) клиента, инициирующего соединение TFO. Документ описывает детали обмена данными в процессе начального согласования TCP, протокол для TFO cookie, возможные новые проблемы безопасности и их ослабление, а также новых интерфейс API для сокетов.

Мотивом разработки TFO послужили потребности современных Web-приложений. Протокол TCP разрешает обмен данными лишь после завершения трехэтапного согласования (3WHS) [RFC793], что добавляет задержку в один интервал RTT. Для коротких обменов Web этот дополнительный интервал RTT составляет существенную часть общей задержки в сети даже при широком использовании постоянных соединений HTTP. Например, браузер Chrome [Chrome] сохраняет бездействующие соединения TCP до 5 минут, но 35% запросов HTTP выполняются в новых соединениях TCP [RCCJR11]. Для таких приложений Web (и подобных им) включение данных в пакет SYN может значительно снизить задержку. Далее описано решение проблем, возникающих в результате такого обмена данными.

1.1. Терминология

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с RFC 2119 [RFC2119].

TFO является сокращением для TCP Fast Open, клиентом называется активная (открывающая) сторона соединения TCP, сервером — пассивная.

2. Данные в SYN

Стандартный протокол TCP позволяет передавать данные в пакетах SYN ([RFC793], параграф 3.4), но запрещает доставлять их приложению до завершения 3WHS. Это связано с тем, что начальное согласование TCP служит для захвата старых и продублированных пакетов SYN.

Чтобы разрешить приложениям обмен данными во время согласования TCP это ограничение снято в TFO и данные из пакетов SYN разрешается доставлять приложению. Это изменение семантики TCP вызывает две проблемы (рассматриваются ниже), которые не позволяют применять TFO для некоторых приложений.

Поэтому реализациям TCP недопустимо использовать TFO по умолчанию и можно применять TFO лишь при явном запросе приложения или настройке на уровне сервисного порта. Приложениям нужно перед использованием проверить применимость TFO, как описано в разделе 6.

2.1. Смягчение семантики TCP в части дубликатов SYN

TFO разрешает доставлять данные приложению до завершения 3WHS, открывая себя в плане целостности данных в перечисленных ниже ситуациях:

  1. принимающий хост получает данные в дубликатах SYN после того, как он забыл об их получении в исходном SYN (например, в результате перезагрузки);

  2. дубликат получен после того, как организованное исходным пакетом SYN соединение было закрыто по инициативе отправителя (получатель не защищен состоянием TIME-WAIT 2 MSL).

В отмененном ныне T/TCP [RFC1644] (отменен [RFC6247]) предпринималась попытка решить эти проблемы. Попытка оказалась неудачной и решение не было развернуто по причине уязвимостей, описанных в разделе 8. Смежные работы. Вместо попытки перехвата всех сомнительных пакетов SYN, чтобы сделать TFO полностью совместимым с семантикой TCP, принято решение воспринимать старые пакеты SYN с данными, т. е. ограничить применение TFO классом приложений, устойчивых к дубликатам пакетов SYN с данными (6. Применимость TFO). Предполагается, что это обеспечит верный компромисс между сложностью и применимостью.

2.2. Пакеты SYN с подставными адресами IP

Стандартный протокол TCP подвержен атакам SYN flood [RFC4987], поскольку пакеты SYN с подставными IP-адресами отправителей могут легко переполнить небольшую очередь прослушивающего приложения, что ведет к полной блокировке порта службы.

TFO делает еще один шаг вперед, позволяя серверной стороне TCP передавать данные приложению до завершения 3WHS. Это открывает серьезную уязвимость. Приложение, обслуживающее порт, на котором включен TFO, может потреблять значительные ресурсы CPU и памяти на обработку запросов и создание откликов. Если отклик существенно больше запроса, атакующий будет способен организовать атаку с усиленным отражением, направленную на жертву за пределами сервера TFO.

Имеется много методов ослабления атак SYN flood, описанных в [RFC4987], но, к сожалению, ни один из них не подходит для TFO. Здесь предлагается использовать предоставляемые сервером cookie для смягчения новых уязвимостей (раздел 3) и представлена оценка эффективности такой защиты (раздел 7).

3. Обзор протокола

Важной частью TFO является Fast Open Cookie (cookie) — код аутентификации сообщения (message authentication code или MAC), создаваемый сервером. Клиент запрашивает cookie в одном обычном соединении TCP и затем использует код для будущих соединений TCP при обмене данными в процессе 3WHS.

Запрос Fast Open Cookie.

  1. Клиент передает пакет SYN с опцией Fast Open и пустым полем cookie для запроса кода.

  2. Сервер генерирует код cookie и возвращает его в опции Fast Open пакета SYN-ACK.

  3. Клиент кэширует cookie для будущих соединений TCP Fast Open (см. ниже).

Выполнение процедуры TCP Fast Open.

  1. Клиент передает пакет SYN с данными и cookie в опции Fast Open.

  2. Сервер проверяет пригодность cookie.

    1. Если значение cookie действительно, сервер передает подтверждение SYN-ACK для SYN и данных. Затем сервер доставляет полученные данные приложению.

    2. В противном случае сервер отбрасывает данные и передает подтверждение SYN-ACK лишь для порядкового номера SYN.

  3. Если сервер воспринимает данные из пакета SYN, он может передать данные отклика до завершения согласования. Максимальный объем передаваемых данных определяется контролем перегрузок TCP [RFC5681].

  4. Клиент передает ACK с подтверждением SYN и данных сервера. Если данные клиента не были подтверждены, он повторяет их отправку в пакете ACK.

  5. Остальная часть соединения выполняется как в обычном TCP. Клиент может повторять операции Fast Open после получения cookie (до истечения срока действия, заданного сервером). Таким образом, механизм TFO полезен для приложений, имеющих временную привязку соединений между клиентом и сервером.

Запрос Fast Open Cookie в соединении 1.

   TCP A (клиент)                                      TCP B (сервер)
   ______________                                      ______________
   CLOSED                                                      LISTEN

   #1 SYN-SENT       ----- <SYN,CookieOpt=NIL>  ---------->  SYN-RCVD
   #2 ESTABLISHED    <---- <SYN,ACK,CookieOpt=C> ----------  SYN-RCVD
   (кэширование cookie C)

Процедура TCP Fast Open в соединении 2.

   TCP A (клиент)                                      TCP B (сервер)
   ______________                                      ______________
   CLOSED                                                      LISTEN

   #1 SYN-SENT       ----- <SYN=x,CookieOpt=C,DATA_A> ---->  SYN-RCVD
   #2 ESTABLISHED    <---- <SYN=y,ACK=x+len(DATA_A)+1> ----  SYN-RCVD
   #3 ESTABLISHED    <---- <ACK=x+len(DATA_A)+1,DATA_B>----  SYN-RCVD
   #4 ESTABLISHED    ----- <ACK=y+1>--------------------> ESTABLISHED
   #5 ESTABLISHED    --- <ACK=y+len(DATA_B)+1>----------> ESTABLISHED

4. Детали протокола

4.1. Fast Open Cookie

Fast Open Cookie служит для смягчения новых уязвимостей при разрешении обмена данных в процессе согласования соединений. Значением cookie является код MAC, генерируемый сервером. Клиент не анализирует это значение, а просто кэширует cookie и передает его серверу в последующих пакетах SYN при создании новых соединений. Сервер может прекратить действие cookie в любой момент с целью защиты.

4.1.1. Опция Fast Open


                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |      Kind     |    Length     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                            Cookie                             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Kind

1 байт со значение 34.

Length

1 байт, задающий размер (от 6 до 18 байтов). Размер ограничен свободным пространством поля опций. Значение поля должно быть четным.

Cookie

0 или от 4 до 16 байтов (Length — 2).

Опция Fast Open служит для запроса или передачи Fast Open Cookie. Когде поле cookie отсутствует или пусто, опция используется клиентом для запроса cookie у сервера. При наличии cookie опция служит для передачи кода от сервера к клиенту или от клиента к серверу (процедура Fast Open).

Минимальный размер cookie составляет 4 байта. Хотя на рисунке показано выравнивание cookie по 32-битовым границам, такое выравнивание не требуется. Опции с некорректным значением Length или без флага SYN должны игнорироваться.

4.1.2. Обработка Cookie на сервере

Сервер отвечает за генерацию и проверку подлинности cookie. В качестве cookie следует использовать код MAC с приведенными ниже свойствами. Требование следует указано потому, что в некоторых случаях может применяться тривиальная генерация cookie (параграф 7.3).

  1. Значение cookie аутентифицирует IP-адрес клиента (отправителя), который может быть IPv4 или IPv6.

  2. Значения cookie могут создаваться только сервером, но не другими сторонами, включая клиентов.

  3. Генерация и проверка выполняются достаточно быстро по сравнению с другой обработкой SYN и SYN-ACK.

  4. Сервер может закодировать в cookie другую информацию и воспринимать от клиента в любой момент несколько значений cookie. Это зависит от реализации сервера и невидимо для клиента.

  5. Для cookie устанавливается срок действия, причины этого рассмотрены в разделе 5. Вопросы безопасности. Это может быть периодическая смена ключа, используемого сервером для создания cookie, или включение временной метки при создании cookie.

    Для постепенного аннулирования cookie с течением времени сервер может реализовать ротацию ключей, используемых для создания и проверки cookie. Такой подход полезен для больших серверов, сохраняющих обновления ключей Fast Open. Конкретный механизм не задается, поскольку он зависит от реализации сервера.

Сервер поддерживает операции создания и проверки cookie:

  • GetCookie(IP_Address) возвращает (новое) значение cookie;

  • IsCookieValid(IP_Address, Cookie) проверяет пригодность cookie, т. е. соответствие IP-адресу клиента и срок действия.

Примером может реализации служить использование AES_128 для шифрования адресов IPv4 (с дополнением) или IPv6 и отсечки до 64 битов. Сервер может периодически обновлять ключ для завершения срока действия cookie. Ширование AES на современных процессорах выполняется всего на несколько сотен наносекунд [RCCJR11].

Если разрешается лишь одно значение cookie для адреса IP и сервер может регенерировать cookie независимо, лучшим вариантом проверки будет просто регенерация действительного cookie и сравнение с принятым значением. В этом случае при отрицательном результате проверки принятого cookie уже будет готово значение cookie для отправки клиенту.

4.1.3. Обработка Cookie клиентом

Клиент должен кэшировать cookie от сервера для последующих соединений Fast Open. Для многодомных клиентов cookie зависят от IP-адресов клиента и сервера, поэтому клиенту следует кэшировать не более одного (последнего) cookie для каждой пары IP-адресов сервера и клиента.

При кэшировании cookie рекомендуется кэшировать также анонсированный сервером максимальный размер сегмента (MSS). Клиент может кэшировать MSS от сервера для определения максимального объема данных, которые можно поместить в пакет SYN при следующих соединениях TFO. Такое кэширование полезно, поскольку при использовании Fast Open клиент передает данные в пакете SYN до того, как сервер анонсирует MSS в своем пакете SYN-ACK. Если клиент поместит в пакет SYN больше данных, чем сервер может воспринять, это вероятно потребует от клиента повторной передачи всех или части этих данных. Поэтому кэширование MSS может повысить производительность.

Без кэширования MSS объем данных в пакетах SYN ограничивается принятым по умолчанию значением MSS в 536 байта для IPv4 [RFC1122] и 1220 байтов для IPv6 [RFC2460]. Даже при выполнении клиентом этого требования при отправке SYN ясно, что получатель IPv4, анонсирующий MSS < 536 байтов, может получить сегмент большего размера.

Если кэшированное значение MSS больше типового размера (1460 байтов для IPv4 или 1440 для IPv6), избыточные данные в пакете SYN могут вызвать проблемы, которые сведут на нет преимущества Fast Open. Например, слишком большой пакет SYN может вызвать фрагментацию IP и ввести в заблуждение межсетевые экраны и промежуточные устройства, что вызовет повторную передачу SYN и другие побочные эффекты. Поэтому клиент может ограничить кешируемое значение MSS до 1460 байтов для IPv4 или 1440 для IPv6.

4.1.3.1. Кэширование клиентом негативных откликов

Клиент должен кэшировать негативные отклики от сервера для предотвращения возможных отказов при соединениях. Негативные отклики включают отсутствие подтверждения от сервера данных в пакете SYN, сообщения ICMP об ошибках и (наиболее важно) полное отсутствие отклика SYN-ACK от сервера, т. е. тайм-аут в соединении. Последний случай вероятно обусловлен несовместимостью с промежуточными устройствами или полной блокировкой соединения межсетевым экраном после обработки пакета SYN с данными. Если клиент не реагирует на эти негативные отклики и продолжает попытки Fast Open, соединение с сервером может оказаться совсем невозможным.

Для любых негативных откликов клиенту следует отключить Fast Open на конкретном пути (адреса и порты отправителя и получателя) по меньшей мере на время. Поскольку TFO включается на уровне порта, а cookie не зависят от порта, клиенту следует включать в кэш и номера портов.

4.2. Протокол Fast Open

Одним из преобладающих требований к TFO является полная совместимость с имеющимися реализациями TCP на стороне клиентов и серверов.

Сервер поддерживает две переменных на каждый прослушиваемый сокет (IP-адрес и порт).

FastOpenEnabled

По умолчанию режим отключен (off) и должен включаться приложением явно. При выключенном режиме сервер не выполняет связанных с TFO операций и должен игнорировать опции cookie.

PendingFastOpenRequests

Задает отслеживание соединений TFO в состоянии SYN-RCVD. Если эта переменная превышает ранее установленный системный предел, сервер должен отключить TFO для всех новых запросов на соединение, пока PendingFastOpenRequests не станет меньше установленного в системе предела. Переменная служит для защиты от некоторых уязвимостей, рассматриваемых в разделе 5. Вопросы безопасности.

Сервер сохраняет флаг FastOpened на уровне соединения, чтобы пометить успешное использование TFO.

4.2.1. Запрос Fast Open Cookie

При любой попытке использовать TFO клиент должен сначала запросить у сервера cookie, как показано ниже.

  1. Клиент передает пакет SYN с опцией Fast Open, где Length = 0 (пустое поле cookie).

  2. Сервер отвечает пакетом SYN-ACK в соответствии с параграфом 4.1.2. Обработка Cookie на сервере. SYN-ACK может включать опцию Fast Open если сервер в данный момент поддерживает TFO на этом порту.

  3. Если SYN-ACK включает опцию Fast Open с полем cookie, клиент меняет cookie и другую информацию в соответствии с параграфом 4.1.3. Обработка Cookie клиентом . В ином случае, если SYN-ACK обнаружен впервые и не является (ложным) повтором, клиент может удалить данные сервера из кэша cookie. Если SYN-ACK является ложным повтором, клиент ничего не делает с кэшем, по приведенным ниже причинам.

Сеть или серверы могут отбрасывать пакеты SYN или SYN-ACK с опцией cookie, что вызывает тайм-аут SYN или SYN-ACK. Клиентам и серверам рекомендуется в таком случае повторить передачу пакетов SYN и SYN-ACK без опции cookie. Это гарантирует прохождение соединению с запросом cookie и снизит задержку отброшенных пакетов SYN/SYN-ACK. Очевидным недостатком максимальной совместимости является то, что любое обычное отбрасывание SYN приведет к отказу cookie (хотя можно утверждать, что задержка передачи данных до завершения 3WHS обоснована, если пакет SYN отброшен в результате перегрузки). В следующем параграфе описана эвристика обнаружения таких отбрасываний, когда клиент получает пакет SYN-ACK.

Клиентам также рекомендуется записывать набор серверов, которые не отвечают на запросы cookie, и пытаться снова запрашивать cookie у них лишь по истечении некоторого времени.

4.2.2. TCP Fast Open

После получения клиентом cookie от нужного сервера он может организовывать последующие соединения TFO, пока не завершится срок действия cookie, заданный сервером.

Клиент передает SYN.

Для организации соединения TFO клиент должен иметь cookie от сервера.

  1. Передается пакет SYN.

    1. Если в пакете SYN нет места для опции Fast Open, соединение TFO прерывается и используется обычное согласование 3WHS.

    2. В ином случае в заголовок включается опция Fast Open с полученным от сервера значением cookie. Включаются также данные размером не более кэшированного значения MSS от сервера или принятых по умолчанию 536 байтов.

  2. Переход в состояние SYN-SENT и обновление SND.NXT для включения данных.

При работе с сетью и серверами, отбрасывающими пакеты SYN с данными или неизвестными опциями, когда срабатывает таймер SYN, клиенту следует повторить передачу пакета SYN без опции Fast Open.

Сервер получает SYN и отвечает пакетом SYN-ACK.

При получении пакета SYN с опцией Fast Open сервер выполняет указанные ниже действия.

  1. Инициализируется и сбрасывается локальный флаг FastOpened. Если FastOpenEnabled = false, переход к п. 5.

  2. Если PendingFastOpenRequests превышает системный предел, переход к п. 5.

  3. Если IsCookieValid() (параграф 4.1.2) возвращает false, переход к п. 5.

  4. Данные буферизуются и уведомляется приложение. Устанавливается флаг FastOpened и инкрементируется PendingFastOpenRequests.

  5. Передается пакет SYN-ACK, который может включать опцию Fast Open. При установленном флаге FastOpened пакет подтверждает SYN и полученные данные, а противном случае — только SYN. Сервер может включить данные отклика в пакет SYN-ACK, если они уже готовы. Некоторые приложения предпочитают задерживать SYN-ACK, позволяя приложению обработать запрос для создания отклика, но это остается за реализацией.

  6. Переход в состояние SYN-RCVD. Если установлен флаг FastOpened, сервер должен следовать [RFC5681] (основан на [RFC3390]) для установки начального окна насыщения, чтобы передать дополнительные пакеты.

При срабатывании таймера SYN-ACK серверу следует повторно передать сегмент SYN-ACK без данных и опций Fast Open по причинам совместимости.

Особым случаем является одновременная организация соединения, когда получателем SYN является клиент в состоянии SYN-SENT. Протокол не меняется, поскольку [RFC793] уже поддерживает данные в SYN и одновременную организацию соединения. Но сокет клиента может иметь данные, доступные для чтения, еще до его подключения. Этот документ не рассматривает соответствующие изменения API.

Клиент принимает SYN-ACK.

При получении пакета SYN-ACK клиенту следует выполнить указанные ниже действия.

  1. Если SYN-ACK включает опцию Fast Open, опцию MSS или обе, обновляется соответствующее значение cookie и данные MSS в кэше cookie.

  2. Передается пакет ACK с установкой в номере подтверждения RCV.NXT и включением данных после SND.UNA, если они доступны.

  3. Переход в состояние ESTABLISHED.

Отметим, что здесь не возникает «наказания» за задержку, если отправитель не подтверждает данные в исходном пакете SYN. Клиенту следует повторно передать неподтвержденные данные в первом пакете ACK п. 2. Обмен данными начнется после согласования, как при обычном соединении TCP.

Если у клиента истекло время ожидания и повторно переданы лишь обычные пакеты SYN, он может эвристически определить пути, где преднамеренно отбрасываются пакеты SYN с опцией Fast Open или данными. Если SYN-ACK подтверждает лишь начальную последовательность и не включает опцию Fast Open cookie, это предположительно вызывается повторным (обычным) пакетом SYN, а исходный пакет SYN или соответствующий SYN-ACK потерян.

Сервер принимает ACK.

При получении пакета ACK, подтверждающего последовательность SYN, сервер декрементирует PendingFastOpenRequests и переходит в состояние ESTABLISHED. Какой-либо особой обработки не требуется.

5. Вопросы безопасности

Fast Open Cookie не позволяет атакующему просто организовать лавину поддельных пакетов SYN с данными, чтобы исчерпать ресурсы сервера или организовать атаку с усиленным отражением на другой хост. Сервер может защищаться от атак подставными пакетами SYN с непригодными cookie, используя имеющиеся методы [RFC4987]. Следует отметить, что генерация поддельных cookie «ничего не стоит», проверка пригодности cookie, присущая любой схеме аутентификации, может требовать гораздо больших ресурсов, нежели обработка обычных пакетов SYN. Ниже подробно описаны новые уязвимости TFO и меры противодействия.

5.1. Атаки SYN Flood с действительными cookie

Атакующий может получать cookie от скомпрометрированных (взломанных) хостов и лавинно рассылать фиктивные пакеты SYN с данными и «действительными» cookie (с взломанных хостов или иных удобных точек). Как и обычное согласование TCP, механизм TFO уязвим для таких атак. Однако ущерб здесь может быть существенно больше. Помимо временного нарушения работы портов сервиса возможно истощение ресурсов CPU и памяти на сервере. Такая атака будет отражаться в системных журналах сервера как DoS3-атака на прикладном уровне со стороны бот-сетей, вызывая средства защиты и сигналы тревоги.

Для защиты сервера важно ограничить максимальное число ожидающих запросов на соединения TFO, т. е. PendingFastOpenRequests (параграф 4.2). При достижении предела сервер временно отключает TFO, как указано в параграфе 4.1.2. Обработка Cookie на сервере и последующие запросы TFO будут обрабатываться как обычные запросы на соединение (данные будут отбрасываться, а подтверждаться будут лишь SYN). Это позволяет использовать обычные методы защиты от атак SYN flood [RFC4987], подобные SYN cookie для сохранения работоспособности сервера. Основным влиянием атак SYN flood на стандартный стек TCP является не сам лавинный трафик, потребляющий ресурсы на обработку TCP и память хоста, а обманные пакеты SYN, заполняющие небольшие очереди прослушивающих сокетов.

Однако с TFO атаки SYN flood могут напрямую препятствовать работе, если не задано ограничения в стеке. Пакеты RST от обманных хостов будут скорее усиливать, нежели препятствовать лавине пакетов SYN по сравнению с обычным (без TFO) случаем, поскольку атакующий может заполнить много пакетов SYN данными и это потребует больше ресурсов для обработки. По этой причине серверу TFO нужно отслеживать сбрасываемые соединения в состоянии SYN-RCVD в дополнение к обычному ограничению максимального размера очереди. Реализации могут комбинировать эти методы, например, учитывая запросы на соединения, которые были только что сброшены по PendingFastOpenRequests, пока не истечет время ожидания.

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

5.1.1. Атаки из-за трансляторов NAT

Атакующий, расположенный за транслятором NAT, может легко получить действительные cookie для организации упомянутой выше атаки и нанести вред другим клиентам, использующим тот же путь. В [BRISCOE12] предложено серверам расширить создание cookie путем включения временных меток TCP — GetCookie(IP_Address, Timestamp) — и реализовать это путем шифрования конкатенации двух значения для создания cookie. Клиент сохраняет cookie и временную метку для возврата обоих значений в пакетах SYN. Затем сервер реализует IsCookieValid(IP_Address, Timestamp, Cookie), шифруя IP и временную метку для сравнения со значением cookie.

Это позволяет серверу создавать разные cookie для клиентов, использующих один адрес IP, что дает возможность отбрасывать неправомерно используемые злоумышленниками cookie. Однако злоумышленник может просто повторять атаки с новыми cookie. В конечном итоге серверу приходится подавлять все запросы с IP-адреса, как при текущем подходе. Кроме того, этот подход требует изменения [RFC1323] (отменен [RFC7323]) для передачи ненулевых zero Timestamp Echo Reply в пакетах SYN, что может вызывать проблемы с межсетевыми экранами. В результате преимущества не превышают недостатков.

5.2. Атаки с усиленным отражением на сторонние хосты

Ограничение PendingFastOpenRequests системным пределом можно выполнить без Fast Open cookie и это защитит ресурсы сервера, а также ограничит ущерб, который атакующий может нанести с помощью атак с усиленным сервером отражением. Однако остается уязвимость к атакам с усиленными отражениями от большого числа серверов. Атакующий может легко нанести ущерб, заставив многочисленные серверы отвечать пакетами данных по выбранному им IP-адресу жертвы.

При использовании Fast Open cookie атакующему потребуется сначала украсть действительное значение cookie у своей жертвы. Это вероятно потребует от атакующего сначала взломать хост или сеть жертвы, но в некоторых случаях это можно сделать сравнительно легко. В этом случае у злоумышленника уже не будет интереса в организации атаки на хост, который уже взломан, однако может представлять интерес нарушение работы сети жертвы. Поскольку украденное значение cookie пригодно лишь для одного сервера, атакующему потребуется украсть действительные cookie для множества серверов и использовать их до истечения срока действия, чтобы нанести существенный вред без срабатывания защиты.

Можно утверждать, что взломавший сеть или хост злоумышленник может организовать похожую, но более простую атаку путем простой вставки битов. Уровень ущерба будет идентичен, но связанная с TFO атака позволяет злоумышленнику сохранить анонимность и маскирует источник атаки. Например, атакующий может с помощью DHCP получить cookie, когда он (или взломанный им хост) владеет определенным IP-адресом, выполняя обычный механизм Fast Open для серверов, поддерживающих TFO и собирая действительные cookie. Затем атакующий активно или пассивно освобождает свой IP-адрес и когда этот адрес будет назначен сервером DHCP другому хосту (жертве), атакующий может организовать лавину обманных запросов Fast Open с действительными cookie к соответствующим серверам. Поскольку значения cookie действительны, серверы будут воспринимать запросы и отвечать пакетами SYN-ACK с данными по адресу жерты. Таким образом, злоумышленник может организовать атаку с усиленным отражением на другой хост.

Лучшей защитой для сервера будет не отвечать пакетами с данными до завершения процедуры согласования и это полностью исключает риск атак с усиленным отражением. Однако возможная экономия времени за счет использования TFO в этом случае будет снижаться.

6. Применимость TFO

Этот раздел предназначен в помощь приложениям, рассматривающим вопрос применения TFO, в оценке преимуществ и недостатков TFO на примере клиентских и серверных приложений Web. Приложениями в данном случае считаются процессы, напрямую записывающие данные в сокет, например, процесс JavaScript, передающий данные серверу. Предлагаемое изменение API сокета описано в Приложении A.

6.1. Дубликаты данных в SYN

При использовании TFO возможна неоднократная доставка первых данных, записанных в сокет, приложению на удаленном хосте (параграф 2.1). Это относится лишь к данным в пакетах SYN, но не к последующему обмену.

Опытным путем в [JIDKT07] показано, что дублирование пакетов в сети Tier-1 возникает редко. Поскольку повторы возможны лишь при дублировании пакетов SYN с данными, а дубликат приходит уже после того, как получатель сбросит исходное состояние SYN для соединения, влияние повторов представляется необычным на практике. Тем не менее, клиенту, который не может неоднократно обрабатывать одни и те же данные SYN, недопустимо включать TFO для отправки данных в SYN. Аналогично, серверу, не способному неоднократно воспринимать одни и те же данные в SYN, недопустимо включать TFO для приема данных в SYN. Для оценки вероятности получения дубликатов SYN и SYN-ACK с данными в сетях, отличных от Tier 1, нужны дополнительные исследования.

6.2. Возможное влияние на производительность

Механизм TFO разработан для приложений, чувствительных к задержкам на этапе организации соединений TCP. Для использования преимуществ TFO первый блок данных приложения (например, запрос HTTP) должен быть не больше максимального сегмента TCP (за вычетом размера опций в SYN). В противном случае удаленный сервер сможет обработать данные приложения лишь по завершении начального согласования, что снижает преимущества TFO.

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

6.3. Пример клиентов и серверов Web

6.3.1. Воспроизведение запроса HTTP

Хотя TFO разрабатывался для Web-приложений, браузерам не следует применять TFO для отправки запросов SYN, если они восприимчивы к повторам (replay). Одним из примеров являются запросы POST без защиты транзакций на прикладном уровне (например, с помощью уникального идентификатора в заголовке запроса).

С другой стороны, механизм TFO особенно полезен для запросов GET, поскольку воспроизведение (replay) GET может происходить в чередующихся (striped) соединениях TCP — после того, как сервер получит запрос HTTP, но до того, как ACK для запросов придут в браузер, в браузере может завершиться время ожидания и он повторит тот же запрос в другом (возможно новом) соединении TCP. Это отличается от воспроизведения TFO лишь тем, что повторное использование инициируется браузером, а не стеком TCP.

6.3.2. HTTP с использованием TLS (HTTPS)

Для TLS по протоколу TCP безопасно и полезно включать TLS client_hello в пакет SYN для экономии одного интервала RTT при согласовании TLS. Здесь нет опасений в части нарушения идемпотентности и, в частности, это может применяться вместе описанными выше соединениями.

6.3.3. Сравнение с постоянными соединениями HTTP

Полезен ли механизм TFO для широкого развертывания постоянных соединений HTTP? Кратким ответом будет «да». Исследования ([RCCJR11] [AERG11]) показали, что среднее число транзакций на соединение составляет 2 — 3 на основе масштабных измерений для серверов и клиентов. В этих исследованиях серверы и клиенты сохраняли бездействующие соединения на несколько минут (пока человек думает).

Сохранение бездействующих соединений дольше ведет к риску снижения производительности. В [HNESSK10] и [MQXMZ11] показано, что большинство домашних маршрутизаторов и ISP не соблюдают 124-минутный тайм-аут, заданный в [RFC5382]. В [MQXMZ11] отмечено, что 35% мобильных ISP просто обрывают соединения, бездействующие в течение 30 минут. Конечные хосты, не подозревая о тайм-аутах промежуточных устройств, используют продолжительное время ожидания для TCP для таких бездействующих соединений.

Для обхода этой проблемы некоторые приложения передают частые пакеты TCP keep-alive. Однако это ведет к истощению батарей на мобильных устройствах [MQXMZ11]. Фактически питание стало важным аспектом для современных устройств LTE (Long Term Evolution) и мобильные браузеры закрывают соединения HTTP в течение нескольких секунд или даже быстрее [SOUDERS11].

В [RCCJR11] исследована производительность браузера Chrome [Chrome] на основе статистики за 28 дней. Chrome сохраняет бездействующие постоянные соединения HTTP от 5 до 10 минут. Однако среднее число транзакций на соединение составляет лишь 3,3, а на TCP 3WHS приходится до 25% задержки сетевых транзакций HTTP. По оценке авторов TFO сокращает время загрузки страниц популярных сайтов на 10% — 40%.

6.3.4. Балансировщики нагрузки и серверные фермы

Серверам, расположенным за балансировщиками нагрузки и воспринимающим запросы по одному адресу IP, следует использовать общий ключ, обеспечивающий создание идентичных Fast Open cookie для определенного IP-адреса клиента. В противном случае клиент может получать в соединении разные cookie и попытки использовать Fast Open будут приводить к обычному согласованию 3WHS.

7. Открытые области для экспериментов

Здесь отмечены некоторые вопросы, которые требуют экспериментов в Internet и различных сетевых сценариях. Эти эксперименты должны помочь в оценке преимуществ и рисков Fast Open и связанных с этим протоколов.

7.1. Влияние промежуточных устройств и NAT на производительность

В [MAF04] отмечено, что некоторые промежуточные устройства и конечные хосты могут отбрасывать пакеты с неизвестными опциями TCP. Исследования ([LANGLEY06] [HNRGHT11]) показали, что 6% проверенных путей в Internet отбрасывали пакеты SYN с данными или неизвестными опциями TCP. TFO при возникновении такой проблемы возвращается к обычному согласованию TCP и повторяет SYN без данных и опций cookie по истечении начального тайм-аута SYN. Кроме того, реализациям рекомендуется кэшировать такие события для предотвращения повторных отказов. Требуется дополнительное исследование влияния таких событий на производительность.

Еще один вопрос связан с потерей преимуществ TFO при работе через некоторые трансляторы адресов операторского класса (Carrier-Grade NAT или CGN). Обычно хосты за NAT используют общий адрес IP и будут получать от сервера одно значение cookie. Это не препятствует работе TFO. Но некоторые конфигурации CGN, где для каждого нового соединения TCP от данного физического хоста используется другой внешний адрес IP, препятствуют получению преимуществ TFO. Однако это не снижает производительности, как указано в параграфе 4.2.2. TCP Fast Open.

7.2. Влияние на контроль перегрузок

Хотя TFO не влияет напрямую на контроль перегрузок TCP, в некоторых случаях это возможно. При тайм-ауте SYN-ACK обычный TCP уменьшает начальное окно насыщения перед отправкой любый данных [RFC5681], однако с TFO сервер уже мог передать данные размером вплоть до начального окна.

Если сервер обслуживает в основном краткосрочные соединения, потеря SYN-ACK не оказывает такого влияния на уменьшение окна насыщения, как в обычном TCP. Это может дестабилизировать состояние сети. Соединения, сталкивающиеся с потерями, могут повторять попытки и увеличивать перегрузку. Возможным решением является временное отключение Fast Open, если сервер сталкивается с потерей многих пакетов данных или SYN-ACK в процессе согласования соединений. Здесь будут полезны дополнительные эксперименты.

7.3. Fast Open без cookie

Механизм cookie снижает риск истощения ресурсов и атак с усилением отражения. Однако cookie не требуются, если сервер имеет защиту на прикладном уровне или устойчив к таким атакам. Например, Web-сервер, отвечающий лишь простыми откликами HTTP redirect, помещаемыми в SYN-ACK, может не заботиться об истощении ресурсов.

Для таких приложений сервер может выбрать создание тривиальных и даже пустых cookie с целью повышения производительности за счет отказа от создания и проверки cookie. Если сервер обнаружит DoS-атаку с помощью других механизмов защиты, он может перейти на обычный режим Fast Open для прослушиваемых сокетов.

8. Смежные работы

8.1. T/TCP

Расширения TCP для транзакций (TCP Extensions for Transactions) [RFC1644] были (среди прочего) попыткой обойти 3WHS, поэтому цель их совпадает с целью TFO. Основные усилия были сосредоточены на борьбе со старыми и дублированными пакетами SYN, но не было уделено внимания уязвимостям, связанным с обходом 3WHS [PHRACK98].

Как отмечено выше, здесь применяется практический подход, сосредоточенный на безопасности TFO, допуская старые и продублированные пакеты SYN с данными после признания того, что полное соответствие семантике TCP скорей всего невозможно. Предлагается считать такой подход разумным компромиссом, поскольку это существенно упрощает TFO и делает механизм привлекательным для разработчиков и пользователей TCP.

8.2. Общая защита от атак SYN Flood

В [RFC4987] изучено ослабление обычных атак SYN flood (пакетами SYN без данных). Но не SYN cookie без учета состояния, ни SYN Cache с поддержкой состояний не защищают данные в пакетах SYN.

Более эффективной защитой может быть простое отключение TFO, когда на хосте предполагается атака SYN flood (например, заполнение SYN backlog). После отключения TFO применяется обычная защита от атак SYN flood. В разделе 5. Вопросы безопасности этот вопрос рассмотрен подробно.

8.3. Самостоятельно организуемые приложением соединения

Некоторые Web-браузеры поддерживают историю доменов для часто посещаемых страниц Web. Затем эти браузеры заранее открывают соединения TCP с такими доменами до того, как пользователь введет запрос к серверу [BELSHE11]. Хотя этот метод также снижает задержку, он расходует ресурсы сервера и сети, инициируя и поддерживая бездействующие соединения.

8.4. Fast Open Cookie в пакетах FIN

Другим предложением является запрос TFO в пакетах FIN, поскольку отбрасывание FIN несовместимыми промежуточными устройствами не влияет на задержку. Однако пути, блокирующие SYN cookie, с большей вероятностью могут отбросить последующий пакет SYN с данными, а многие приложения закрывают соединение с помощью RST, а не FIN.

Хотя cookie в пакетах FIN могут не повысить отказоустойчивость, это дает клиентам, использующим одно соединение, преимущество в задержке по сравнению с клиентами, создающими много параллельных соединений. Если эксперименты с TFO покажут рост совместног использования соединений, cookie в FIN могут быть полезны.

8.5. Транзакция TCPCT

TCPCT4 [RFC6013] устраняет состояние сервера при начальном согласовании и защищает от DoS-атак с подменой. Подобно TFO, TCPCT позволяет включать данные в пакеты SYN и SYN-ACK. Но сервер в процессе начального согласования не может передать данных больше MSS (а не начального окна, как в TFO). Поэтому задержка для приложений (например, Web) может быть больше, чем при использовании TFO.

9. Взаимодействие с IANA

Агентство IANA выделило значение 34 в реестре TCP Option Kind Numbers (см. параграф 4.1.1). Новая опция TCP имеет переменный размер, а в поле Meaning реестра TCP Option Kind Numbers указано TCP Fast Open Cookie. Имеющимся и новым реализациям следует использовать номер опции 34. Реализациям, использующим номер 254 [RFC6994] с magic number 0xF989 (16 битов), выделенный в реестре TCP Experimental Option Experiment Identifiers (TCP ExIDs), следует перейти по умолчанию к новому номеру (34).

10. Литература

10.1. Нормативные документы

[RFC793] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981, <http://www.rfc-editor.org/info/rfc793>.

[RFC1122] Braden, R., Ed., «Requirements for Internet Hosts — Communication Layers», STD 3, RFC 1122, October 1989, <http://www.rfc-editor.org/info/rfc1122>.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC3390] Allman, M., Floyd, S., and C. Partridge, «Increasing TCP’s Initial Window», RFC 3390, October 2002, <http://www.rfc-editor.org/info/rfc3390>.

[RFC5382] Guha, S., Ed., Biswas, K., Ford, B., Sivakumar, S., and P. Srisuresh, «NAT Behavioral Requirements for TCP», BCP 142, RFC 5382, October 2008, <http://www.rfc-editor.org/info/rfc5382>.

[RFC5681] Allman, M., Paxson, V., and E. Blanton, «TCP Congestion Control», RFC 5681, September 2009, <http://www.rfc-editor.org/info/rfc5681>.

[RFC6994] Touch, J., «Shared Use of Experimental TCP Options», RFC 6994, August 2013, <http://www.rfc-editor.org/info/rfc6994>.

10.2. Дополнительная литература

[AERG11] Al-Fares, M., Elmeleegy, K., Reed, B., and I. Gashinsky, «Overclocking the Yahoo! CDN for Faster Web Page Loads», in Proceedings of Internet Measurement Conference, November 2011.

[BELSHE11] Belshe, M., «The Era of Browser Preconnect», February 2011, <http://www.belshe.com/2011/02/10/the-era-of-browser-preconnect/>.

[BRISCOE12] Briscoe, B., «Some ideas building on draft-ietf-tcpm-fastopen-01», message to the tcpm mailing list, July 2012, <http://www.ietf.org/mail-archive/web/tcpm/current/msg07192.html>.

[Chrome] Google Chrome, <https://www.google.com/intl/en-US/chrome/browser/>.

[HNESSK10] Haetoenen, S., Nyrhinen, A., Eggert, L., Strowes, S., Sarolahti, P., and M. Kojo, «An Experimental Study of Home Gateway Characteristics», in Proceedings of Internet Measurement Conference, October 2010.

[HNRGHT11] Honda, M., Nishida, Y., Raiciu, C., Greenhalgh, A., Handley, M., and H. Tokuda, «Is it Still Possible to Extend TCP?», in Proceedings of Internet Measurement Conference, November 2011.

[JIDKT07] Jaiswal, S., Iannaccone, G., Diot, C., Kurose, J., and D. Towsley, «Measurement and Classification of Out-of-Sequence Packets in a Tier-1 IP Backbone» IEEE/ACM Transactions on Networking (TON), Volume 15, Issue 1, pp 54-66.

[LANGLEY06] Langley, A., «Probing the viability of TCP extensions», <http://www.imperialviolet.org/binary/ecntest.pdf>.

[MAF04] Medina, A., Allman, M., and S. Floyd, «Measuring Interactions Between Transport Protocols and Middleboxes», in Proceedings of Internet Measurement Conference, October 2004.

[MQXMZ11] Wang, Z., Qian, Z., Xu, Q., Mao, Z., and M. Zhang, «An Untold Story of Middleboxes in Cellular Networks», in Proceedings of SIGCOMM, August 2011.

[PHRACK98] «T/TCP vulnerabilities», Phrack Magazine, Volume 8, Issue 53, Article 6, July 8, 1998, <http://www.phrack.com/issues.html?issue=53&id=6>.

[RCCJR11] Radhakrishnan, S., Cheng, Y., Chu, J., Jain, A., and B. Raghavan, «TCP Fast Open», in Proceedings of the 7th ACM CoNEXT Conference, December 2011.

[RFC1323] Jacobson, V., Braden, R., and D. Borman, «TCP Extensions for High Performance», RFC 1323, May 1992, <http://www.rfc-editor.org/info/rfc1323>.

[RFC1644] Braden, R., «T/TCP — TCP Extensions for Transactions Functional Specification», RFC 1644, July 1994, <http://www.rfc-editor.org/info/rfc1644>.

[RFC2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 24605, December 1998, <http://www.rfc-editor.org/info/rfc2460>.

[RFC4987] Eddy, W., «TCP SYN Flooding Attacks and Common Mitigations», RFC 4987, August 2007, <http://www.rfc-editor.org/info/rfc4987>.

[RFC6013] Simpson, W., «TCP Cookie Transactions (TCPCT)», RFC 6013, January 2011, <http://www.rfc-editor.org/info/rfc6013>.

[RFC6247] Eggert, L., «Moving the Undeployed TCP Extensions RFC 1072, RFC 1106, RFC 1110, RFC 1145, RFC 1146, RFC 1379, RFC 1644, and RFC 1693 to Historic Status», RFC 6247, May 2011, <http://www.rfc-editor.org/info/rfc6247>.

[RFC7323] Borman, D., Braden, B., Jacobson, V., and R. Scheffenegger, Ed., «TCP Extensions for High Performance», RFC 7323, September 2014, <http://www.rfc-editor.org/info/rfc7323>.

[SOUDERS11] Souders, S., «Making A Mobile Connection», <http://www.stevesouders.com/blog/2011/09/21/making-a-mobile-connection/>.

Приложение A. Пример изменения API сокета для поддержки TFO

A.1. Активная сторона соединения

Для активной стороны создаваемого соединения изменяется или заменяется вызов connect(), который не принимает в качестве аргумента пользовательский буфер данных. Рекомендуется заменить вызов connect() для минимизации правок в API и снижения издержек приложений при развертывании.

Одним из решений, принятым в ядре Linux 3.7, служит добавление флага MSG_FASTOPEN для sendto() и sendmsg(). MSG_FASTOPEN помечает попытку передать данные в SYN как комбинацию connect() и sendto(), за счет неявного вызова операции connect(). Блокировка сохраняется до завершения согласования и буферизации данных.

Для неблокируемого сокета возвращается число байтов, буферизованных и отправленных в пакете SYN. Если значение cookie не доступно локально, возвращается -1 с кодом ошибки EINPROGRESS и автоматически передается SYN с запросом TFO cookie. Вызывающему нужно снова записать данные при подключении сокета. При ошибке возвращается тот же код, что и в connect() при отказе в процессе согласования.

Реализация может отказаться от изменения вызова sendmsg(), поскольку TFO связан лишь с протоколом TCP. Решением может служить добавление новой опции сокета TCP_FASTOPEN. Когда эта опция установлена до операции connect(), вызов sendmsg() или sendto() будет выполнять Fast Open подобно описанному выше флагу MSG_FASTOPEN. Однако такой подход требует дополнительного системного вызова setsockopt().

A.2. Пассивная сторона соединения

Изменения на пассивной стороне проще и приложению нужно лишь разрешить прием запросов Fast Open с помощью новой опции TCP_FASTOPEN при вызове setsockopt() до вызова listen().

Опция включает Fast Open на прослушиваемом сокете. Значение опции задает порог PendingFastOpenRequests, т. е. макимальный размер ожидающих SYN с данными. После включения реализация TCP будет отвечать на запрос пакетом с TFO cookie. Традиционно accept() возвращает управление лишь после подключения сокета, но для соединений Fast Open accept() возвращает управление при получении пакета SYN с действительным Fast Open cookie и данными и доступности данных для чтения с помощью, например, recvmsg(), read().

Благодарности

Спасибо Bob Briscoe, Michael Scharf, Gorry Fairhurst, Rick Jones, Roberto Peon, William Chan, Adam Langley, Neal Cardwell, Eric Dumazet, Matt Mathis за их отклики. Особая благодарность Barath Raghavan за вклад по вопросам безопасности Fast Open и многократное вычитывание документа.

Адреса авторов

Yuchung Cheng

Google, Inc.

1600 Amphitheatre Parkway

Mountain View, CA 94043

United States

EMail: ycheng@google.com

Jerry Chu

Google, Inc.

1600 Amphitheatre Parkway

Mountain View, CA 94043

United States

EMail: hkchu@google.com

Sivasankar Radhakrishnan

Department of Computer Science and Engineering

University of California, San Diego

9500 Gilman Drive

La Jolla, CA 92093-0404

United States

EMail: sivasankar@cs.ucsd.edu

Arvind Jain

Google, Inc.

1600 Amphitheatre Parkway

Mountain View, CA 94043

United States

EMail: arvind@google.com

Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

1Internet Engineering Task Force.

2Internet Engineering Steering Group.

3Denial of service — отказ в обслуживании.

4TCP Cookie Transaction.

5Заменен RFC 8200. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 7413 TCP Fast Open отключены