RFC 8335 PROBE: A Utility for Probing Interfaces

Internet Engineering Task Force (IETF)                         R. Bonica
Request for Comments: 8335                                     R. Thomas
Updates: 4884                                           Juniper Networks
Category: Standards Track                                     J. Linkova
ISSN: 2070-1721                                                   Google
                                                               C. Lenart
                                                                 Verizon
                                                            M. Boucadair
                                                                  Orange
                                                           February 2018

PROBE — утилита для зондирования интерфейсов

PROBE: A Utility for Probing Interfaces

PDF

Аннотация

Этот документ описывает инструмент сетевой диагностики, названный PROBE. Программа PROBE похожа на PING в том смысле, что может использоваться для запроса состояния проверяемого интерфейса, но отличается тем, что ей не требуется двухсторонняя связность между проверяющим и проверяемым интерфейсом. Вместо этого программе PROBE нужна двухсторонняя связность между проверяющим интерфейсом и интерфейсом-посредником (proxy). Этот интерфейс может размещаться на одном узле с проверяемым интерфейсом или на узле, с которым тот непосредственно соединен. Этот документ обновляет RFC 4884.

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

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошел открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.

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

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

Авторские права (Copyright (c) 2018) принадлежат 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. Введение

Сетевые операторы используют PING [RFC2151] для проверки двухсторонней связности между интерфейсами. В этом документе такие интерфейсы называются проверяющим и проверяемым. PING передает сообщения ICMP [RFC792] [RFC4443] Echo Request с проверяющего интерфейса проверяемому. Проверяющий интерфейс размещается на проверяющем узле, а проверяемый — на проверяемом.

Если проверяемый интерфейс получает сообщение ICMP Echo Request, он возвращает ICMP Echo Reply. Получив ICMP Echo Reply, проверяющий узел убеждается в наличии двухсторонней связности между проверяющим и проверяемым интерфейсом. В частности, подтверждается:

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

  • активность проверяемого интерфейса;

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

  • активность проверяющего интерфейса.

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

Подобно PING, программа PROBE выполняется на проверяющем узле, который передает сообщение ICMP Extended Echo Request со своего локального интерфейса, называемого проверяющим, на интерфейс посредника, размещаемый на узле-посреднике.

ICMP Extended Echo Request содержит структуру ICMP Extension Structure, а та содержит объект Interface Identification Object, указывающий проверяемый интерфейс, который находится на узле-посреднике или соединен с ним.

Когда интерфейс-посредник получает ICMP Extended Echo Request, узел-посредник выполняет процедуры контроля доступа. Если доступ разрешен, этот узел определяет статус проверяемого интерфейса и возвращает ICMP Extended Echo Reply. Сообщение ICMP Extended Echo Reply указывает статус проверяемого интерфейса.

Если проверяемый интерфейс размерен на узле-посреднике, PROBE определяет его статус как oper-status [RFC7223]. Если oper-status имеет значение up (1), PROBE сообщает об активности интерфейса. В противном случае PROBE сообщает, что интерфейс не активен.

Если проверяемый интерфейс расположен на узле, напрямую соединенном с посредником, и присутствует в таблице IPv4 ARP3 [RFC826] или IPv6 Neighbor Cache [RFC4861], PROBE сообщает о доступности интерфейса. В противном случае PROBE сообщает, что в таблице нет записи для интерфейса.

1.1. Терминология

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

  • Probing interface (проверяющий интерфейс) — интерфейс, передающий ICMP Extended Echo Request.

  • Probing node (проверяющий узел) — узел, на котором размещается проверяющий интерфейс.

  • Proxy interface (интерфейс-посредник) — интерфейс, которому передается ICMP Extended Echo Request.

  • Proxy node (узел-посредник) — узел, на котором размещается proxy-интерфейс.

  • Probed interface (проверяемый интерфейс) — интерфейс, чей статус запрашивается.

  • Probed node (проверяемый узел) — узел, на котором размещается проверяемый интерфейс. Если проверяемый и посредничающий интерфейсы расположены на одном узле, узел посредник является и проверяемым узлом. В остальных случаях узел-посредник непосредственно соединен с проверяемым узлом.

1.2. Уровни требований

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

2. Запрос ICMP Extended Echo

Сообщение ICMP Extended Echo Request определено для ICMPv4 и ICMPv6. Подобно другим сообщениям ICMP, оно инкапсулируется с использованием заголовков IP (версия ICMPv4 инкапсулируется в IPv4, версия ICMPv6 в IPv6).

На рисунке 1 показано сообщение ICMP Extended Echo Request.


 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      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number|   Reserved  |L|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Структура ICMP Extension

Рисунок 1. ICMP Extended Echo Request.


Поля заголовка IP

  • Source Address — адрес отправителя для проверяющего интерфейса. Поле должно содержать действительный индивидуальный адрес IPv4 или IPv6.

  • Destination Address — адрес получателя на интерфейсе-посреднике. Адрес должен быть индивидуальным.

Поля ICMP

  • Type — Extended Echo Request. Для ICMPv4 имеет значение 42, для ICMPv6 — 160.

  • Code — должен устанавливаться в 0 при передаче, на приемной стороне должен игнорироваться.

  • Checksum — для ICMPv4 см. RFC 792, для ICMPv6 — RFC 4443.

  • Identifier — идентификатор, служащий для сопоставления отклика с запросом. Может иметь значение 0.

  • Sequence Number — порядковый номер, служащий для сопоставления отклика с запросом. Может иметь значение 0.

  • Reserved — резервное поле, должно устанавливаться при передаче и игнорироваться при получении.

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

  • ICMP Extension Structure — структура, указывающая проверяемый интерфейс.

Определение ICMP Extension Structure дано в разделе 7 [RFC4884]. В соответствии с RFC 4884 эта структура включает одни заголовок Extension Header, за которым следует один или множество объектов. При использовании в сообщениях ICMP Extended Echo Request структура должна включать ровно один экземпляр Interface Identification Object (см. параграф 2.1).

Если бит L установлен, Interface Identification Object может указывать проверяемый интерфейс по имени, индексу или адресу. Если бит L сброшен, Interface Identification Object должен указывать адрес проверяемого интерфейса.

Если Interface Identification Object указывает адрес проверяемого интерфейса, этот адрес может относиться к любому семейству. Например, сообщение ICMPv4 Extended Echo Request может включать Interface Identification Object, указывающий проверяемый интерфейс адресом IPv4, IPv6 или IEEE 802. То же самое относится и к сообщениям ICMPv6 Extended Echo Request.

2.1. Объект идентификации интерфейса

Interface Identification Object указывает зондируемый интерфейс его именем, индексом или адресом. Подобно другим объектам ICMP Extension, этот идентификатор включает Object Header и Object Payload. Заголовок Object Header содержит следующие поля:

  • Class-Num — Interface Identification Object (3);

  • C-Type — значение 1 задает идентификацию интерфейса по имени, 2 — по индексу и 3 — по адресу;

  • Length — указывает размер объекта в октетах с учетом Object Header и Object Payload.

Если Interface Identification Object указывает интерфейс по имени, поле Object Payload должно содержать имя интерфейса в соответствии с [RFC7223]. Если Object Payload не завершается на 32-битовой границе, поле должно быть дополнено символами ASCII NULL.

Если Interface Identification Object указывает интерфейс индексом, поле length имеет значение 8, а поле данных содержит if-index [RFC7223].

Если Interface Identification Object указывает зондируемый интерфейс адресом, поле данных имеет вид, показанный на рисунке 2.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI                | Address Length|   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Address   ....

Рисунок 2. Interface Identification Object — C-Type 3.


Поля данных показаны ниже.

AFI4

Это 16-битовое поле указывает тип адреса в поле Address. Доступные значения приведены в реестре IANA Address Family Numbers.

Address Length

Число значимых байтов в поле Address (это поле может включать байты заполнения).

Reserved

Это поле должно устанавливаться в 0 при передаче и игнорироваться на приемной стороне.

Address

Это поле переменного размера представляет адрес, связанный с проверяемым интерфейсом. Если поле адреса не завершается на 32-битовой границе, оно должно быть дополнено нулями.

3. Отклик ICMP Extended Echo

Сообщения ICMP Extended Echo Reply определены для ICMPv4 и ICMPv6. Подобно остальным сообщениям ICMP, эти отклики инкапсулируются с использованием заголовка IP (ICMPv4 инкапсулируется в IPv4, ICMPv6 — в IPv6).

Сообщение ICMP Extended Echo Reply показано на рисунке 3.


 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      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |Sequence Number|State|Res|A|4|6|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3. Сообщение ICMP Extended Echo Reply.

Поля заголовка IP

  • Source Address — копируется из поля Destination Address в заголовке Extended Echo Request.

  • Destination Address — копируется из поля Source Address в заголовке Extended Echo Request.

ICMP fields:

  • Type — Extended Echo Reply (для ICMPv4 имеет значение 43, для ICMPv6 — 161).

  • Code — может принимать значение 0 (No Error — нет ошибок), 1 (Malformed Query — непригодная форма запроса), 2 (No Such Interface — нет такого интерфейса), 3 (No Such Table Entry — нет такой записи в таблице) и 4 (Multiple Interfaces Satisfy Query — запросу соответствует множество интерфейсов).

  • Checksum — для ICMPv4 см. RFC 792, для ICMPv6 — RFC 4443.

  • Identifier — копируется из поля Identifier соответствующего запроса Extended Echo.

  • Sequence Number — копируется из поля Sequence Number соответствующего запроса Extended Echo.

  • State — если поле Code отлично от 0, это поле должно иметь значение 0 и игнорироваться при получении. Если проверяемый интерфейс находится на узле-посреднике, это поле должно иметь значение 0 и игнорироваться при получении. В остальных случаях это поле отражает состояние таблицы ARP или записи Neighbor Cache, связанной с проверяемым интерфейсом. Состояние может указываться значением 0 (Reserved — резерв), 1 (Incomplete — неполная запись), 2 (Reachable — доступен), 3 (Stale — устарел), 4 (Delay — задержка), 5 (Probe — проба) или 6 (Failed — отказ).

  • Res — это поле должно устанавливаться в 0 и игнорироваться приемной стороной.

  • A (Active) — бит A устанавливается, если Code = 0, проверяемый интерфейс размещен на узле-посреднике и активен. В остальных случаях флаг A сбрасывается.

  • 4 (IPv4) — бит 4 устанавливается при установленном флаге A, если проверяемый интерфейс относится к IPv4.

  • 6 (IPv6) — бит 6 устанавливается при установленном флаге A, если проверяемый интерфейс относится к IPv6.

4. Обработка сообщений ICMP

Когда узел получает сообщение ICMP Extended Echo Request и выполняется любое из приведенных ниже условий, узел должен отбросить это сообщение, не уведомляя об этом отправителя.

  • Узел не понимает сообщений ICMP Extended Echo Request.

  • На узле явно не включена функциональность ICMP Extended Echo.

  • Входящий запрос ICMP Extend Echo содержит адрес отправителя (Source Address), который не уполномочен явно устанавливать флаг L в сообщениях ICMP Extended Echo Request.

  • Входящий запрос ICMP Extend Echo содержит адрес отправителя (Source Address), который не уполномочен явно для указанного типа ICMP Extended Echo Request (т. е. ifName, IfIndex или Address).

  • Поле Source Address во входящем сообщении содержит адрес, не являющийся индивидуальным.

  • Поле Destination Address во входящем сообщении содержит групповой адрес.

В остальных случаях получивший ICMPv4 Extended Echo Request узел должен сформировать сообщение ICMP Extended Echo Reply как показано ниже:

  • установлен флаг DF5 (1);

  • флаг More Fragments сброшен (0);

  • Fragment Offset = 0;

  • TTL = 255;

  • Protocol = ICMP.

Получивший сообщение ICMPv6 Extended Echo Request узел должен создать отклик ICMPv6 Extended Echo Reply :

  • Hop Limit = 255

  • Next Header — ICMPv6

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

  • Скопировать поле Source Address из сообщения Extended Echo Request в поле Destination Address отклика Extended Echo Reply.

  • Скопировать поле Destination Address из сообщения Extended Echo Request в поле Source Address отклика Extended Echo Reply.

  • Установить для кода DiffServ значение CS0 [RFC4594].

  • Установить для ICMP Type значение Extended Echo Reply.

  • Скопировать поле Identifier из сообщения Extended Echo Request в сообщение Extended Echo Reply.

  • Скопировать поле Sequence Number из сообщения Extended Echo Request в сообщение Extended Echo Reply.

  • Установить поле Code в соответствии с параграфом 4.1.

  • Установить в поле State значение 0.

  • Сбросить флаги A, 4 и 6.

  • Если (1) поле Code имеет значение 0 (нет ошибок), (2) флаг L установлен и (3) проверяемый интерфейс активен, установить бит A и один из битов 4 и 6.

  • Если (1) поле Code имеет значение 0 (нет ошибок), а бит L сброшен, значение поля State установить в соответствии с состоянием талицы ARP или записи Neighbor Cache для проверяемого интерфейса.

  • Установить подобающее значение поля Checksum.

  • Отправить сообщение ICMP Extended Echo Reply получателю.

4.1. Обработка поля Code

В поле Code должно устанавливаться значение 1 (Malformed Query) при выполнении любого из условий:

  • запрос ICMP Extended Echo Request не включает ICMP Extension Structure;

  • структура ICMP Extension Structure не включает ровно один Interface Identification Object;

  • бит L сброшен, а Interface Identification Object указывает проверяемый интерфейс по ifName или ifIndex;

  • иные ошибки в форме запроса.

В поле Code должно устанавливаться значение 2 (No Such Interface), если флаг L и ICMP Extension Structure не указывают интерфейс, размещенный на узле-посреднике.

В поле Code должно устанавливаться значение 3 (No Such Table Entry), если флаг L сброшен, а адрес, указанный в Interface Identification Object, не присутствует в таблице IPv4 ARP или IPv6 Neighbor Cache.

В поле Code должно устанавливаться значение 4 (Multiple Interfaces Satisfy Query) при выполнении любого из условий:

  • флаг L установлен, а ICMP Extension Structure указывает более одного интерфейса на узле-посреднике;

  • флаг L сброшен, а адрес, указанный в Interface Identification Object, отображается на несколько записей IPv4 ARP или IPv6 Neighbor Cache.

В остальных случаях для поля Code должно устанавливаться значение 0 (No Error).

5. Примеры использования

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

  • Проверяемый интерфейс не имеет адреса (unnumbered).

  • Проверяющий и проверяемый интерфейс не соединены между собой напрямую. Проверяемый интерфейс имеет адрес IPv6 link-local, но не имеет адрес с глобальной значимостью.

  • Проверяющий интерфейс поддерживает только IPv4, а проверяемый — только IPv6.

  • Проверяющий интерфейс поддерживает только IPv6, а проверяемый — только IPv4.

  • По причине отсутствия маршрута проверяющий интерфейс не может достигнуть проверяемого.

6. Обновление RFC 4884

В параграфе 4.6 [RFC4884] приведен список расширяемых сообщений ICMP (Т. е. сообщений, которые могут включать структуру ICMP Extension). Этот документ добавляет в список сообщения ICMP Extended Echo Request и ICMP Extended Echo Reply.

7. Взаимодействие с IANA

Агентство IANA выполнило перечисленные ниже действия.

  • Добавлена а запись в реестр ICMP Type Numbers

    42 Extended Echo Request

    Добавлена запись в субреестр Type 42 — Extended Echo Request

    (0) No Error

  • Добавлена а запись в реестр ICMPv6 ‘type’ Numbers

    160 Extended Echo Request

    В ICMPv6 различаются информационные сообщения и сообщения об ошибках. Данное сообщение является информационным и его значение должно относиться к диапазону 128-255.

    Добавлена запись в субреестр Type 160 — Extended Echo Request

    (0) No Error

  • Добавлена а запись в реестр ICMP Type Numbers

    43 Extended Echo Reply

    Добавлена запись в субреестр Type 43 — Extended Echo Reply

    (0) No Error

    (1) Malformed Query

    (2) No Such Interface

    (3) No Such Table Entry

    (4) Multiple Interfaces Satisfy Query

  • Добавлена а запись в реестр ICMPv6 ‘type’ Numbers

    161 Extended Echo Reply

    В ICMPv6 различаются информационные сообщения и сообщения об ошибках. Данное сообщение является информационным и его значение должно относиться к диапазону 128-255.

    Добавлена запись в субреестр Type 161 — Extended Echo Reply

    (0) No Error

    (1) Malformed Query

    (2) No Such Interface

    (3) No Such Table Entry

    (4) Multiple Interfaces Satisfy Query

  • Добавлена а запись в реестр ICMP Extension Object Classes and Class Sub-types

    (3) Interface Identification Object

    Добавлены перечисленные ниже C-типы в субреестр Sub-types — Class 3 — Interface Identification Object

    (0) Reserved

    (1) Identifies Interface by Name

    (2) Identifies Interface by Index

    (3) Identifies Interface by Address

    Значения C-Type выделяются по процедуре FCFS6 из диапазона 0-255.

Все указанные выше значения кодов выделены по процедуре FCFS из диапазона 0-255.

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

Утилиту PROBE легитимно можно применять для определения

  • рабочего состояния интерфейса;

  • активных на интерфейсе протоколов (например, IPv4 или IPv6).

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

  • пропускную способность интерфейса;

  • тип устройства, поддерживающего интерфейс (например, его производителя);

  • версию операционной системы, используемой устройством.

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

  • Включение и отключение функциональности ICMP Extended Echo (по умолчанию отключена).

  • Определение возможностей установки бита L (по умолчанию установка разрешена, сброс запрещен).

  • Определение разрешенных типов запросов — имя, индекс, адрес (по умолчанию все отключено).

  • Для каждого разрешенного типа запросов определение префиксов, с которых принимаются запросы ICMP Extended Echo Request.

  • Для каждого интерфейса управление восприятием сообщений ICMP Echo Request.

При получении узлом запроса ICMP Extended Echo, поддержка которого не разрешена, сообщение должно отбрасываться без уведомления отправителя (см. раздел 4).

При использовании PROBE недопустима утечка информации о VPN7 в другие сети VPN. Поэтому при получении узлом запроса ICMP Extended Echo для проверяемого интерфейса, относящегося к другой VPN, нежели интерфейс-посредник, узел должен возвращать отклик ICMP Extended Echo с кодом 2 (No Such Interface).

Для защиты локальных ресурсов реализациям следует ограничивать скорость входящих сообщений ICMP Extended Echo Request.

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

9.1. Нормативные документы

[RFC792] Postel, J., «Internet Control Message Protocol», STD 5, RFC 792, DOI 10.17487/RFC0792, September 1981, <https://www.rfc-editor.org/info/rfc792>.

[RFC826] 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, DOI 10.17487/RFC0826, November 1982, <https://www.rfc-editor.org/info/rfc826>.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», STD 89, RFC 4443, DOI 10.17487/RFC4443, March 2006, <https://www.rfc-editor.org/info/rfc4443>.

[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, «Neighbor Discovery for IP version 6 (IPv6)», RFC 4861, DOI 10.17487/RFC4861, September 2007, <https://www.rfc-editor.org/info/rfc4861>.

[RFC4884] Bonica, R., Gan, D., Tappan, D., and C. Pignataro, «Extended ICMP to Support Multi-Part Messages», RFC 4884, DOI 10.17487/RFC4884, April 2007, <https://www.rfc-editor.org/info/rfc4884>.

[RFC7223] Bjorklund, M., «A YANG Data Model for Interface Management», RFC 72238, DOI 10.17487/RFC7223, May 2014, <https://www.rfc-editor.org/info/rfc7223>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

9.2. Дополнительная литература

[RFC2151] Kessler, G. and S. Shepard, «A Primer On Internet and TCP/IP Tools and Utilities», FYI 30, RFC 2151, DOI 10.17487/RFC2151, June 1997, <https://www.rfc-editor.org/info/rfc2151>.

[RFC4594] Babiarz, J., Chan, K., and F. Baker, «Configuration Guidelines for DiffServ Service Classes», RFC 4594, DOI 10.17487/RFC4594, August 2006, <https://www.rfc-editor.org/info/rfc4594>.

Приложение A. Программа PROBE

Приложение PROBE принимает входные параметры, устанавливает счетчик и запускает цикл с выходом по нулевому значению счетчика. В каждом шаге цикла PROBE передает одно сообщение ICMP Extended Echo Request, декрементирует счетчик, запускает таймер и ждет. Запрос ICMP Extended Echo Request включает идентификатор и порядковый номер.

Если полученное в ответ сообщение ICMP Extended Echo Reply содержит такие же значения Identifier и Sequence Number, программа PROBE возвращает полученную информацию пользователю. Однако в каждом шаге цикла PROBE ждет завершения отсчета таймера, независимо от получения отклика Extended Echo.

Программа PROBE принимает следующий параметры:

  • счетчик;

  • время ожидания;

  • адрес проверяющего интерфейса;

  • счетчик интервалов маршрутизации (hop);

  • адрес интерфейса-посредника;

  • значение бита L;

  • идентификатор проверяемого интерфейса.

Счетчик указывается положительным целым числом (по умолчанию 3) и определяет число итераций упомянутого выше цикла PROBE.

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

Адрес проверяющего интерфейса задает поле Source Address в пакете ICMP Extended Echo Request. Это должен быть индивидуальный (unicast) адрес интерфейса проверяющего узла.

Адрес интерфейса-посредника указывает интерфейс, которому передается сообщение ICMP Extended Echo Request. Это должен быть индивидуальный адрес IPv4 или IPv6. Для адреса IPv4 программа PROBE будет передавать сообщение ICMPv4, для IPv6 — сообщение ICMPv6.

Бит L указывается логическим значением (TRUE для случая размещения проверяемого интерфейса и посредника на одном узле, FALSE в противном случае).

Идентификатор проверяемого интерфейса указывает этот интерфейс с помощью

  • имени;

  • адреса из любого семейства (например, IPv4, IPv6, IEEE 802, 48-битовый MAC, 64-битовый MAC);

  • if-index.

Если идентификатором проверяемого интерфейса является адрес, он не обязан относиться к тому же семейству адресов, что и адрес интерфейса-посредника. Например, PROBE принимает адрес IPv4 для посредника и IPv6 для проверяемого узла.

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

Спасибо Sowmini Varadhan, Jeff Haas, Carlos Pignataro, Jonathan Looney, Dave Thaler, Mikio Hara, Joel Halpern, Yaron Sheffer, Stefan Winter, Jean-Michel Combes, Amanda Barber и Joe Touch за рецензирование документа.

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

Ron Bonica

Juniper Networks

2251 Corporate Park Drive

Herndon, Virginia 20171

United States of America

Email: rbonica@juniper.net

Reji Thomas

Juniper Networks

Elnath-Exora Business Park Survey

Bangalore, Karnataka 560103

India

Email: rejithomas@juniper.net

Jen Linkova

Google

1600 Amphitheatre Parkway

Mountain View, California 94043

United States of America

Email: furry@google.com

Chris Lenart

Verizon

22001 Loudoun County Parkway

Ashburn, Virginia 20147

United States of America

Email: chris.lenart@verizon.com

Mohamed Boucadair

Orange

Rennes 35000

France

Email: mohamed.boucadair@orange.com


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

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

nmalykh@gmail.com


1Internet Engineering Task Force.

2Internet Engineering Steering Group.

3Address Resolution Protocol — протокол преобразования адресов.

4Address Family Identifier — идентификатор семейства адресов.

5Don’t Fragment — не фрагментировать.

6First Come First Serve — обслуживание в порядке очередности запросов.

7Virtual Private Network — виртуальная частная сеть.

8Заменен RFC 8343. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 8335 PROBE: A Utility for Probing Interfaces отключены

RFC 8311 Relaxing Restrictions on Explicit Congestion Notification (ECN) Experimentation

Internet Engineering Task Force (IETF)                          D. Black
Request for Comments: 8311                                      Dell EMC
Updates: 3168, 4341, 4342, 5622, 6679                       January 2018
Category: Standards Track
ISSN: 2070-1721

Relaxing Restrictions on Explicit Congestion Notification (ECN) Experimentation

Смягчение требований к явным уведомлениям о перегрузке в экспериментах

PDF

Аннотация

Этот документ обновляет RFC 3168, где заданы явные уведомления о перегрузке (Explicit Congestion Notification или ECN) как альтернатива отбрасыванию пакетов для информирования конечных точек о перегрузке в сети. Он смягчает ограничения RFC 3168, препятствующие экспериментам для получения преимуществ за счёт устранения потерь. Документ обобщает предполагаемые направления экспериментов и обновляет RFC 3168, разрешая эксперименты в этих областях. Для получения преимуществ от любого из обновлений требуется выпуск документа Experimental RFC в потоке IETF. Кроме того, этот документ содержит соответствующие обновления спецификаций ECN для RTP в RFC 6679 и протокола контроля перегрузок для дейтаграмм (Datagram Congestion Control Protocol или DCCP) в RFC 4341, 4342 и 5622. Документ также содержит заключение о результатах эксперимента с ECN nonce в RFC 3540 и предоставляет обоснование для перевода RFC 3540 из статуса Experimental в Historic, что позволяет применять в новых экспериментах код ECT(1).

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

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

Документ является результатом работы IETF1 и представляет собой согласованное мнение сообщества IETF. Документ был вынесен на публичное рассмотрение и одобрен для публикации IESG2. Дополнительная информация о документах BCP представлена в разделе 2 документа RFC 7841.

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

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

Авторские права (Copyright (c) 2018) принадлежат 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).

Документ может содержать материалы из IETF Document или IETF Contribution, опубликованных или публично доступных до 10 ноября 2008 года. Лица, контролирующие авторские права на некоторые из таких документов, могли не предоставить IETF Trust права разрешать внесение изменений в такие документы за рамками процессов IETF Standards. Без получения соответствующего разрешения от лиц, контролирующих авторские права этот документ не может быть изменён вне рамок процесса IETF Standards, не могут также создаваться производные документы за рамками процесса IETF Standards за исключением форматирования документа для публикации или перевода с английского языка на другие языки.

1. Введение

Этот документ обновляет RFC 3168, где заданы явные уведомления о перегрузке (Explicit Congestion Notification или ECN) как альтернатива отбрасыванию пакетов для информирования конечных точек о перегрузке в сети. Он смягчает ограничения RFC 3168, препятствующие экспериментам для получения преимуществ за счёт устранения потерь. Документ обобщает предполагаемые направления экспериментов и обновляет RFC 3168, разрешая эксперименты в этих областях. Для получения преимуществ от любого из обновлений требуется выпуск документа Experimental RFC в потоке IETF [RFC4844]. Включение этих обновлений в один документ позволяет выполнять эксперименты без изменения стандартного процесса для каждого Experimental RFC, требующего изменять RFC 3168.

Этому документу не требуется обновлять RFC 3168 для упрощения стандартизации протоколов и механизмов, описанных в Standards Track RFC, поскольку такие RFC могут обновлять RFC 3168 напрямую, не полагаясь на обновления из этого документа или исключения из процесса стандартизации.

Кроме того, этот документ содержит соответствующие обновления спецификаций ECN для RTP [RFC6679] и 3 профилей DCCP ([RFC4341], [RFC4342] [RFC5622]) по тем же причинам. Каждый эксперимент по-прежнему нужно документировать в одном или нескольких RFC, но использование Experimental RFC для этой цели не требует исключения из процесса для изменения любого из этих Proposed Standard RFC, когда изменения остаются в рамках, заданных этим документом (RFC 5622 является Experimental RFC и обновляется этим документом для согласования с другими RFC, относящимися к DCCP).

Некоторые из предполагаемых экспериментов включают использование кода ECT(1), который был выделен для экспериментов с ECN nonce в RFC 3540 [RFC3540]. Этот документ информирует о завершении экспериментов с ECN и меняет статус RFC 3540 с Experimental на Historic, чтобы разрешить новые эксперименты с кодом ECT(1).

1.1. Термины ECN

ECT

Транспорт с поддержкой ECN (ECN-Capable Transport). Один из кодов ECT(0) или ECT(1) в поле ECN [RFC3168] заголовка IP (v4 или v6). Отправитель с поддержкой ECN устанавливает такой код для индикации поддержки ECN обеими транспортными конечными точками.

Not-ECT

Код ECN, устанавливаемый отправителями для указания отсутствия поддержки ECN в транспорте.

CE

Возникла перегрузка (Congestion Experienced). Этот код ECN устанавливают промежуточные узлы для индикации перегрузки. Узел устанавливает больше маркеров CE в пакетах ECT по мере роста перегрузки.

1.2. Уровни требований

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

2. Обзор экспериментов с ECN

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

Различия в реакции на перегрузку

Уведомление о перегрузке ECN сообщает о более высокой вероятности наличия коротких очередей в узких местах сети (bottleneck), нежели отбрасывания пакетов [TCP-ABE]. Это предполагает, что для перегрузки, указываемой ECN, может быть уместна реакция отправителя, отличная от отклика на потерю пакетов (например, более медленное снижение скорости). Два примера предлагаемого изменения реакции отправителей описаны в [TCP-ABE] и [ECN-L4S]. Второе предложение связывает изменение отклика отправителя на перегрузку с функциональностью различий в маркировке при перегрузе (Congestion Marking Differences, см. ниже). Эти изменения противоречат требованию RFC 3168 считать индикацию перегрузки ECN эквивалентом отбрасывания пакета. Требуется одобрение IETF (например, через Experimental RFC в потоке документов IETF для любых откликов отправителя, проводимых в этом направлении экспериментов (см. ).

Различия в маркировке при перегрузке

Маркировку перегрузки на узлах сети можно настроить на поддержку очень небольших очередей в сочетании с другой реакцией отправителя на индикацию перегрузки (CE), например, как предложено в [ECN-L4S]. Вовлечённый трафик нужно идентифицировать отправителю, чтобы избежать ущерба для другого трафика, отправители которого не ожидают более частых маркеров перегрузки, служащих для поддержки очень малых очередей. Использование различных кодов ECN, в частности ECT(0) и ECT(1), является многообещающим способом идентификации, но это противоречит требованиям RFC 3168 не предоставлять трафику с маркером ECT(0) обработку в сети, отличающуюся от обработки трафика с маркером ECT(1). Требуется одобрение IETF (например, через Experimental RFC в потоке документов IETF для любых откликов отправителя, проводимых в этом направлении экспериментов (см. ).

Пакеты управления и повтор передачи TCP

RFC 3168 ограничивает применение ECN для TCP пакетами данных, исключая повторы передачи. Успешное внедрение ECN в больших частях Internet вызвало интерес к добавлению достигаемых преимуществ ECN для пакетов управления TCP (например, SYN) и повторно передаваемых пакетов, например, как предложено в [ECN-TCP]. Это противоречит запрету RFC 3168 на применение ECN и пакетам управления и повторной передаче TCP (см. ).

Действие этого документа ограничено тремя направлениями экспериментирования. Документ не выражает какого-либо мнения о вероятных результатах и не задаёт деталей экспериментов. Возможны дополнительные эксперименты в этих направления, например, по использованию ECN для поддержки внедрения протоколов, подобных Data Center TCP (DCTCP) [RFC8257] за пределами текущего применения DCTCP в среде ЦОД. Целью документа является устранение ограничения Standards Track RFC, стоящих на пути экспериментов в отмеченных областях.

2.1. Требуется эффективный контроль перегрузок

Контроль перегрузок остаётся важным аспектом архитектуры Internet [RFC2914]. Любые Experimental RFC в потоке документов IETF, использующие обновления этого документа для какого-либо RFC должны включать рассмотрение влияния экспериментов по контролю перегрузки для обеспечения уверенности в том, что развёртывание эксперимента не создаст связанных с перегрузкой проблем в работе Internet.

2.2. Сетевые соображения для экспериментов с ECN

Функциональность ECN [RFC3168] получила широкое распространение в Internet и реализуется также в форме дополнительных протоколов, таких как TRILL3 [ECN-TRILL]. Предполагается сосуществование экспериментов с ECN и развёрнутой функциональности ECN и ответственность за это ложится в первую очередь на разработчиков экспериментальных изменений в ECN. Кроме того, разработчики и создатели протоколов, а также операторы сетей могут запланировать или выполнить эксперименты с ECN. Приведённые ниже рекомендации помогут избежать конфликтов при экспериментах в областях, разрешённых этим документом.

  1. Описанное в RFC 3168 поведение при пересылке остаётся предпочтительным для маршрутизаторов, не участвующих в экспериментах с ECN, продолжая, в частности, считать эквивалентными коды ECT(0) и ECT(1), как указано в параграфе .

  2. Пересылающим пакеты узлам сети не следует считать, что код ECN CE говорит об отбрасывании пакета, если бы не было ECN. Это обусловлено тем, что эксперименты по различию в откликах на перегрузку (Congestion Response Differences) предполагают разную реакцию на отбрасывание пакетов и приём пакетов с маркером CE (), поэтому пакеты с маркером CE не следует произвольно отбрасывать. Соответствующее различие в откликах на перегрузку уже имеется при использовании поля ECN для индикации начинающейся перегрузки (Pre-Congestion Notification или PCN) [RFC6660].

  3. Узлу сети недопустимо создавать трафик с маркировкой ECT(1), пока этот узел не участвует в эксперименте по различной маркировке (Congestion Marking Differences) с использованием ECT(1), как указано в параграфе .

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

Требования к обработке полей ECN при туннельной инкапсуляции и декапсуляции заданы в [RFC6040], обновлению которого посвящён документ [ECN-SHIM]. Руководство для инкапсуляции с внешними заголовками, отличными от IP, приведено в [ECN-ENCAP]. Эти требования и рекомендации применимы ко всему трафику, включая связанный с любыми экспериментами ECN.

2.3. Вопросы эксплуатации и управления

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

В [RFC5706] рассматриваются эти вопросы, а Приложение A к RFC 5706 содержит краткий обзор некоторых важных аспектов.

3. ECN Nonce и RFC 3540

Как задано в RFC 3168, ECN использует 2 кода транспорта с поддержкой ECN (ECT) — ECT(0) и ECT(1) — для индикации поддержки ECN для пакета. В RFC 3168 код ECT(1) выделен для поддержки функциональности ECN nonce с целью предотвращения использования ECN для повышения своей пропускной способности за счёт других пользователей сети. Функциональность ECN nonce полностью задана в RFC 3540 [RFC3540]. В этом разделе указаны причины смены статуса RFC 3540 с Experimental на Historic (устаревший) и внесены соответствующие обновления для RFC 3168.

Хотя ECN nonce работает в соответствии со спецификацией и применяется в ограниченных средах, широкого распространения в Internet этот подход не получил. Изучение поведения ECN для 1 миллиона web-серверов с использованием данных 2014 г. [Trammell15] показало, что после согласования ECN ни один из 581711 протестированных серверов IPv4 не использовал оба кода ECT, что говорило бы о применении ECN nonce. Из 17028 протестированных серверов IPv6 только 4 устанавливали коды ECT(0) и ECT(1) в пакетах данных. Это могло говорить о применении ECN этими 4 серверами, но в равной мере могло быть связано с ошибочной перемаркировкой поля ECN промежуточным устройством или маршрутизатором.

С появлением новых экспериментальных функций, зависящих от применения кода ECT(1), дальнейшее резервирование этого кода для экспериментов с ECN nonce перестало быть оправданным. Кроме того, появились другие подходы для предотвращения злоупотреблений ECN (см. Приложение C.14 к [ECN-L4S]. Поэтому для поддержки экспериментов ECN с кодом ECT(1) этот документ вносит указанные ниже изменения.

  • Эксперимент с ECN nonce [RFC3540] считать завершённым и отметить отсутствие широкого внедрения.

  • Обновить RFC 3168 [RFC3168] для исключения обсуждения ECN nonce и применение для этого кода ECT(1).

Ниже приведены 4 основных обновления RFC 3168, исключающие обсуждение ECN nonce и использование ECT(1).

  1. Исключён абзац из раздела 5 после рисунка 1, где обсуждается ECN nonce как мотив для 2 кодов ECT.

  2. Полностью удалён параграф 11.2 «Обсуждение ECN nonce».

  3. Удалён последний абзац раздела 12, где сказано, что ECT(1) может быть частью реализации ECN nonce.

  4. Удалены два первых абзаца параграфа 20.2, где обсуждаются ECN nonce и альтернативы. Остальная часть параграфа 20.2 с обсуждением использования 4 кодов ECN сохранена.

Кроме того, в RFC 3168 нужно внести менее важные изменения, удалив все упоминания ECN nonce и устранив последствия выделения ECT(1) для ECN nonce. Для краткости они не включены в документ.

4. Обновления RFC 3168

В последующих параграфах приведены обновления RFC 3168, позволяющие экспериментировать в трёх областях, указанных в разделе .

4.1. Различия в реакции на перегрузку

RFC 3168 задаёт идентичную реакцию отправителя на отбрасывание пакетов и индикация перегрузки ECN. Маркеры перегрузки ECN устанавливают в основном механизмы активного управления очередями (Active Queue Management или AQM) в промежуточных буферах. Обычно эти механизмы настраиваются на поддержку более коротких очередей по сравнению с механизмами без AQM, в частности, основанные на отбрасывании механизмы без AQM (такие как «обрубание хвостов» — tail-drop), поскольку механизмы AQM указывают перегрузку до переполнения очереди. Хотя наличие потерь не позволяет отправителю легко понять, применяется ли AQM, получение маркера ECN CE указывает большую вероятность использования AQM для управления очередью в узком месте. Поэтому индикация перегрузки ECN с большей вероятностью (нежели отбрасывание пакета) говорит о короткой очереди в узком месте сети [TCP-ABE]. Это различие предполагает, что на указанную ECN перегрузку отправитель может реагировать иначе (например, выполнять меньший откат), нежели на указание перегрузки потерей пакета. Однако в разделе 5 RFC 3168 сказано:

«При получении поддерживающим ECN транспортным протоколом одного CE-пакета алгоритм контроля перегрузки в конечной системе должен работать в точности так же, как при индикации перегрузки путём отбрасывании одного пакета.»

Этот документ обновляет приведённый текст RFC 3168, чтобы отклик контроля перегрузки (включая отклик отправителя TCP) на пакет с маркером CE мог отличаться от реакции на потерю пакета, при условии, что отличия от RFC 3168 документированы в Experimental RFC потока документов IETF. Конкретным изменением RFC 3168 является вставка слов «если иное не указано в Experimental RFC потока документов IETF» в конце приведённого выше предложения.

В RFC 4774 [RFC4774] включён приведённый выше текст из RFC 3168 в качестве основы, но не задаётся требований на базе этого фрагмента. Поэтому для разрешения экспериментов обновлять RFC 4774 не требуется.

В параграфе 6.1.2 RFC 3168 сказано:

«Если отправитель получает пакет ECE ACK (т. е. пакет ACK с флагом ECN-Echo в заголовке TCP), отправитель узнает о том, что в сети на пути к получателю имеется насыщение. Индикацию насыщения следует трактовать просто, как потерю в результате насыщения для TCP без поддержки ECN. Т. е. отправитель TCP снижает вдвое размер окна насыщения cwnd и уменьшает порог замедленного старта ssthresh.»

Этот документ обновляет приведённый текст из RFC 3168, чтобы разрешить отклик контроля перегрузок (включая отправителя TCP) на пакет с маркером CE, отличный от реакции на отбрасывание пакета, при условии документирования отличий от RFC 3168 в Experimental RFC потока документов IETF. Конкретным изменением RFC 3168 является вставка слов: «Если не указано иное в Experimental RFC потока документов IETF» в конце второго предложения, процитированного выше.

4.2. Различия в маркировке при перегрузке

Доведённый до предела алгоритм AQM с индикацией контроля перегрузки ECN можно настроить на поддержку очень мелких очередей, снижая тем самым задержку в сети по сравнению с поддержкой больших очередей. Для эффективного использования мелких очередей нужны значительно более энергичные отклики отправителей на ECN. Примером такого подхода является протокол Datacenter TCP (DCTCP) [RFC8257]. В этом случае нужна отдельная обработка узлами сети для предотвращения препятствий со стороны энергичного трафика с малыми задержками для обычного трафика (при наличии) и препятствий со стороны обычного трафика любым службам с малыми задержками, использующим мелкие очереди. Использование разных кодов ECN является многообещающим способом идентификации двух отмеченных классов трафика на узлах сети, поэтому данные область исследований основана на применении кода ECT(1) для запроса поведения маркировки ECN в сети, отличающегося от случая ECT(0). Важно, чтобы такое изменение поведения маркировки ECN уравновешивалось использованием иного одобренного IETF отклика отправителя на маркировку CE, например, как предложено в [ECN-L4S].

В разделе 5 RFC 3168 сказано: «Маршрутизаторы трактуют коды ECT(0) и ECT(1) одинаково.»

Этот документ обновляет RFC 3168, чтобы разрешить маршрутизаторам разную трактовку кодов ECT(0) и ECT(1) при условии, что отличия от RFC 3168 документированы в Experimental RFC потока документов IETF. Конкретным изменением RFC 3168 является вставка слов: «Если не указано иное в Experimental RFC потока документов IETF» в конце предложения, процитированного выше.

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

В разделе 5 RFC 3168 сказано:

Маршрутизаторам следует устанавливать маркер CE в ECN-пакетах только в тех случаях, когда маршрутизатор должен был бы отбросить пакет для индикации перегрузки конечным узлам. Когда буфер ещё не заполнен, но маршрутизатор уже приготовился к отбрасыванию пакетов для уведомления конечных узлов о перегрузке, этому маршрутизатору следует сначала проверить наличие маркера ECT в заголовке IP. Если маркер установлен, вместо отбрасывания пакетов маршрутизатор может помещать маркер CE в заголовок IP.

Этот документ обновляет RFC 3168, чтобы разрешить индикацию перегрузки, не эквивалентную отбрасыванию, при условии, что отличия от RFC 3168 документированы в Experimental RFC потока документов IETF. Конкретным изменением RFC 3168 является замена слова «Маршрутизаторам» в начале предложения словами: «Если не указано иное в Experimental RFC потока документов IETF»

Требуется более масштабное обновление RFC 3168, чтобы разрешить отправителю использовать код ECT(1) для запроса поведения маркировки перегрузки, поддерживающего очень мелкие очереди на узлах сети. При использовании потери в качестве сигнала перегрузки число передаваемых сигналов следует сводить к минимуму, поскольку передаются лишь сведения о наличии или отсутствии перегрузки. ECN может обеспечить более детальную сигнализацию, например, для указания текущего уровня перегрузки, без недостатка, связанного с потерей большого числа пакетов. Предложенный в этой области эксперимент L4S5 [ECN-L4S] существенно повышает вероятность маркировки CE для трафика, помеченного кодом ECT(1), способом, который будет негативно влиять на имеющуюся функциональность реагирования на перегрузку, поскольку эта функциональность предполагает, что сеть маркирует пакеты ECT с частотой, с которой бы отбрасывались пакеты без ECT. Если сетевой трафик, использующий традиционные отклики отправителя на перегрузку столкнётся с ростом вероятности (и частоты) маркировки L4S в очереди узкого места сети, пропускная способность трафика будет, вероятно, гораздо меньше, чем предполагалось для уровня перегрузки в узком месте.

Этот документ обновляет RFC 3168, исключая такое взаимодействие для ECT(1). Конкретное обновление раздела 5 в RFC 3168 заключается в замене текста:

«Отправитель может выбрать любой из маркеров ECT(0) или ECT(1) для индикации ECT и использовать этот маркер для последующих пакетов.

Использование двух маркеров ECT обусловлено, прежде всего, желанием предоставить отправителю механизм проверки того, что маркер CE не теряется в сети и получатель ответит отправителю пакетов с маркером CE в соответствии с требованиями транспортного протокола. Рекомендации для отправителей и получателей по дифференциации маркеров ECT(0) и ECT(1) следует указать в отдельных документах для каждого из транспортных протоколов. В частности, данный документ не описывает различий между маркерами ECT(0) и ECT(1) для протокола TCP. Протоколам и отправителям, которым требуется единственный маркер ECT, следует использовать ECT(0)».

Новый текст:

Протоколы и отправители должны применять код ECT(0) для индикации ECT, если не указано иное в Experimental RFC потока документов IETF. Протоколам и отправителям недопустимо использовать код ECT(1) для индикации ECT, если не указано иное в Experimental RFC потока документов IETF. Рекомендации для отправителей и получателей по различению кодов ECT(0) и ECT(1) будут приведены в отдельных документах для каждого транспортного протокола. Этот документ не рассматривает механизмы различения кодов ECT(0) и ECT(1) для конечных узлов TCP.

Экспериментам по различной маркировке перегрузки следует менять поведение сети для трафика с маркерами ECT(1), а не ECT(0), если поведение сети меняется лишь для одного кода ECT. Экспериментам по различной маркировке перегрузки недопустимо менять поведение сети для трафика с маркерами ECT(0) так, чтобы требовалось менять реакцию отправителя на перегрузку для обеспечения желаемого поведения сети. Если эксперимент по различной маркировке перегрузки меняет поведение сети для трафика с маркерами ECT(1), например, поведение маркировки CE-marking так, что требуется менять реакцию отправителя на перегрузку для обеспечения желаемого поведения сети, документ Experimental RFC в потоке IETF для такого эксперимента должен задавать:

  • отклик отправителя на маркировку CE в сети;

  • изменения в поведении маршрутизаторов (или их отсутствие) при пересылке пакетов с маркером CE, являющихся частью эксперимента.

Кроме того, этот документ исключает из RFC 3168 обсуждение ECN nonce, как отмечено выше в разделе 3.

4.3. Пакеты управления и повторная передача TCP

Успешное применение ECN для трафика во многих частях Internet вызвало интерес к распространению преимуществ ECN на пакеты управления TCP (например, SYN) и повторно передаваемые пакеты, как предложено, например, в ECN++ [ECN-TCP].

RFC 3168 запрещает использовать ECN для пакетов управления TCP и повторно передаваемых пакетов во многих местах.

  • Параграф 5.2: «Для гарантированной доставки индикации перегрузки с помощью кода CE недопустимо передавать код ECT в пакете, пока потеря пакета в сети не будет обнаружена конечными узлами и интерпретирована как индикация перегрузки.»

  • Параграф 6.1.1: «Для хоста недопустимо устанавливать ECT в пакетах SYN или SYN-ACK.»

  • Параграф 6.1.4: «…чистые пакеты подтверждения (т. е. пакеты, содержащие только подтверждение без дополнительных данных) должны передаваться с кодом not-ECT.»

  • Параграф 6.1.5: «Этот документ указывает, что поддерживающим ECN реализациям TCP недопустимо устанавливать код ECT(0) или ECT(1) в заголовке IP для повторно передаваемых пакетов данных, а получателю данных TCP следует игнорировать поле ECN в прибывающих пакетах данных, которые находятся за пределами текущего окна получателя.»

  • Параграф 6.1.6: «…отправителю TCP недопустимо устанавливать код ECT или флаг CWR в пробных пакетах.»

Этот документ обновляет RFC 3168, чтобы разрешить использование кодов ECT в пакетах SYN и SYN-ACK, «чистых» пакетах подтверждения, пакетах зондирования окна и повторно передаваемых пакетах, которые изначально были переданы с кодом ECT, если отличия от RFC 3168 документированы в Experimental RFC потока IETF. Конкретным изменением RFC 3168 является вставка в конце приведённых выше предложений слов: «если не указано иное в Experimental RFC потока документов IETF».

Помимо требования к отправителям TCP не устанавливать ECT для пакетов управления TCP и передаваемых повторно пакетов в RFC 3168 ничего не сказано об уместности отбрасывания такого пакета элементами сети (например, межсетевыми экранами) как непригодного. Чтобы эксперименты с ECN в этом направлении были полезны, промежуточные устройства не должны отбрасывать такие пакеты. Поэтому в конце параграфа 6.1.1.1 RFC 3168 добавляется приведённый ниже текст.

Если не указано иное в Experimental RFC потока документов IETF, промежуточным устройствам не следует отбрасывать пакеты управления TCP и повторно передаваемые пакеты TCP лишь по потому, что поле ECN в заголовке IP не содержит Not-ECT. Исключением из этого правила может быть реакция на атаку, использующую коды ECN, отличные от Not-ECT. Например, в качестве части отклика на атаку может быть приемлемо отбрасывание пакетов TCP SYN с маркировкой ECT с большей вероятностью, нежели пакетов TCP SYN с маркером Not-ECT. Такие исключения с отбрасыванием пакетов управления TCP и повторно передаваемых пакетов TCP в ответ на атаку недопустимо применять при отсутствии атак и следует разрешать лишь в том случае, когда ясно, что использование ECN способствует атаке.

5. Обновления ECN для RTP

RFC 6679 [RFC6679] определяет применение ECN для трафика RTP. Документ позволяет использовать оба кода ECT(0) и ECT(1), а также содержит рекомендации по их применению в параграфе 7.3.1.

Отправителю следует помечать пакеты кодом ECT(0), если получатель не указал предпочтение ECT(1) или случайному значению ECT в параметре ect атрибута a=ecn-capable-rtp:.

Эксперименты с разной маркировкой перегрузки расширяют возможные последствия применения ECT(1) вместо ECT(0), поэтому приведённая выше рекомендация обновляется двумя указанными ниже предложениями.

Недопустимо применять случайные значения ECT, поскольку это может вызывать для RTP разную обработку в сети пакетов с маркерами ECT(1) и ECT(0) и различной реакции конечных точек на перегрузку. Требуется использовать код ECT(0), если не указано иное в Experimental RFC потока документов IETF.

В параграфе 7.3.3 RFC 6679 задана реакция RTP на получение пакетов с маркером CE как идентичная реакции на отбрасывание пакетов.

Получение пакетов RTP с маркером ECN-CE в заголовке IP является уведомлением о возникновении перегрузки. Принятой по умолчанию реакцией на пакеты с маркером ECN-CE должно быть уведомление алгоритма контроля перегрузки, вызывающее такой же отклик, как в случае потери пакета. Не следует по-разному обрабатывать маркировку ECN-CE и обнаружение отбрасывания пакета.

Для поддержки экспериментов с различными откликами на перегрузку этот документ обновляет текст аналогично RFC 3168, чтобы алгоритм контроля перегрузки RTP мог по-разному отвечать на пакеты с маркером CE и отбрасывание пакетов при условии, что отличия от RFC 6679 указаны в Experimental RFC потока документов IETF. Конкретным изменением RFC 6679 является вставка слов: «Если не указано иное в Experimental RFC потока документов IETF» и переформатирование двух приведённых выше предложений в соответствии с этим условием.

Получение пакетов RTP с маркером ECN-CE в заголовке IP является уведомлением о возникновении перегрузки. Если не указано иное в Experimental RFC потока документов IETF:

  • принятой по умолчанию реакцией на пакеты с маркером ECN-CE должно быть уведомление алгоритма контроля перегрузки, вызывающее такой же отклик, как в случае потери пакета;

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

Во втором предложении следующего абзаца параграфа 7.3.3 в RFC 6679:

«В будущем может быть задана иная реакция на ECN-CE после IETF Review. Подробное описание таких реакций должно приводиться в Standards Track RFC и рецензироваться для гарантий безопасного внедрения при соблюдении заданных ограничений.»

Слова «Standards Track RFC» заменяются фразой «Standards Track RFC или Experimental RFC в потоке документов IETF» для согласованности с первым обновлением.

6. Обновления ECN для DCCP в RFC 4341, 4342 и 5622

Спецификации трёх идентификаторов контроля перегрузки DCCP (DCCP Congestion Control ID или CCID) — 2 [RFC4341], 3 [RFC4342], 4 [RFC5622] — содержат в целом общую формулировку:

«каждый пакет DCCP-Data и DCCP-DataAck передаётся с полем ECN Capable, имеющим значение ECT(0) или ECT(1).»

Этот документ обновляет такие предложения во всех 3 RFC, как показано ниже:

«каждый пакет DCCP-Data и DCCP-DataAck передаётся с полем ECN Capable. Если не указано иное в Experimental RFC потока документов IETF, такие отправители DCCP должны указывать код ECT(0).»

Для поддержки экспериментов с различными откликами на перегрузку (как указано в разделе 3) этот документ обновляет упомянутые RFC, удаляя обсуждение ECN nonce. Для краткости текст здесь не приводится.

7. Взаимодействие с IANA

Чтобы отразить смену статуса RFC 3540 на Historic, агентство IANA обновило реестр Transmission Control Protocol (TCP) Header Flags <https://www.iana.org/assignments/tcp-header-flags> удалив регистрацию бита 7 как NS (Nonce Sum) и добавив в реестр слова о том, что бит 7 использовался устаревшим (Historic) RFC 3540 как NS (Nonce Sum), а сейчас является резервным (Reserved).

Для отражения экспериментального использования ECT(1), предложенного в этом документе, агентство IANA добавило для поля ECN в реестре <https://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml#ecn-field> примечание:

Код ECT(1) предназначен лишь для экспериментов [RFC8311, параграф 4.2]6

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

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

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

Альтернативы ECN nonce рассмотрены в Приложении C.1 к [ECN-L4S].

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

9.1. Нормативные документы

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2914] Floyd, S., «Congestion Control Principles», BCP 41, RFC 2914, DOI 10.17487/RFC2914, September 2000, <https://www.rfc-editor.org/info/rfc2914>.

[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, «The Addition of Explicit Congestion Notification (ECN) to IP», RFC 3168, DOI 10.17487/RFC3168, September 2001, <https://www.rfc-editor.org/info/rfc3168>.

[RFC3540] Spring, N., Wetherall, D., and D. Ely, «Robust Explicit Congestion Notification (ECN) Signaling with Nonces», RFC 3540, DOI 10.17487/RFC3540, June 2003, <https://www.rfc-editor.org/info/rfc3540>.

[RFC4341] Floyd, S. and E. Kohler, «Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control», RFC 4341, DOI 10.17487/RFC4341, March 2006, <https://www.rfc-editor.org/info/rfc4341>.

[RFC4342] Floyd, S., Kohler, E., and J. Padhye, «Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)», RFC 4342, DOI 10.17487/RFC4342, March 2006, <https://www.rfc-editor.org/info/rfc4342>.

[RFC5622] Floyd, S. and E. Kohler, «Profile for Datagram Congestion Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Rate Control for Small Packets (TFRC-SP)», RFC 5622, DOI 10.17487/RFC5622, August 2009, <https://www.rfc-editor.org/info/rfc5622>.

[RFC6679] Westerlund, M., Johansson, I., Perkins, C., O’Hanlon, P., and K. Carlberg, «Explicit Congestion Notification (ECN) for RTP over UDP», RFC 6679, DOI 10.17487/RFC6679, August 2012, <https://www.rfc-editor.org/info/rfc6679>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

9.2. Дополнительная литература

[ECN-ENCAP] Briscoe, B., Kaippallimalil, J., and P. Thaler, «Guidelines for Adding Congestion Notification to Protocols that Encapsulate IP», Work in Progress, draft-ietf-tsvwg-ecn-encap-guidelines-09, July 2017.

[ECN-EXPERIMENT] Khademi, N., Welzl, M., Armitage, G., and G. Fairhurst, «Updating the Explicit Congestion Notification (ECN) Specification to Allow IETF Experimentation», Work in Progress, draft-khademi-tsvwg-ecn-response-01, July 2016.

[ECN-L4S] Schepper, K. and B. Briscoe, «Identifying Modified Explicit Congestion Notification (ECN) Semantics for Ultra-Low Queuing Delay», Work in Progress7, draft-ietf-tsvwg-ecn-l4s-id-01, October 2017.

[ECN-SHIM] Briscoe, B., «Propagating Explicit Congestion Notification Across IP Tunnel Headers Separated by a Shim», Work in Progress, draft-ietf-tsvwg-rfc6040update-shim-05, November 2017.

[ECN-TCP] Bagnulo, M. and B. Briscoe, «ECN++: Adding Explicit Congestion Notification (ECN) to TCP Control Packets», Work in Progress, draft-ietf-tcpm-generalized-ecn-02, October 2017.

[ECN-TRILL] Eastlake, D. and B. Briscoe, «TRILL: ECN (Explicit Congestion Notification) Support», Work in Progress, draft-ietf-trill-ecn-support-04, November 2017.

[RFC4774] Floyd, S., «Specifying Alternate Semantics for the Explicit Congestion Notification (ECN) Field», BCP 124, RFC 4774, DOI 10.17487/RFC4774, November 2006, <https://www.rfc-editor.org/info/rfc4774>.

[RFC4844] Daigle, L., Ed. and Internet Architecture Board, «The RFC Series and RFC Editor», RFC 4844, DOI 10.17487/RFC4844, July 2007, <https://www.rfc-editor.org/info/rfc4844>.

[RFC5706] Harrington, D., «Guidelines for Considering Operations and Management of New Protocols and Protocol Extensions», RFC 5706, DOI 10.17487/RFC5706, November 2009, <https://www.rfc-editor.org/info/rfc5706>.

[RFC6040] Briscoe, B., «Tunnelling of Explicit Congestion Notification», RFC 6040, DOI 10.17487/RFC6040, November 2010, <https://www.rfc-editor.org/info/rfc6040>.

[RFC6660] Briscoe, B., Moncaster, T., and M. Menth, «Encoding Three Pre-Congestion Notification (PCN) States in the IP Header Using a Single Diffserv Codepoint (DSCP)», RFC 6660, DOI 10.17487/RFC6660, July 2012, <https://www.rfc-editor.org/info/rfc6660>.

[RFC8257] Bensley, S., Thaler, D., Balasubramanian, P., Eggert, L., and G. Judd, «Data Center TCP (DCTCP): TCP Congestion Control for Data Centers», RFC 8257, DOI 10.17487/RFC8257, October 2017, <https://www.rfc-editor.org/info/rfc8257>.

[TCP-ABE] Khademi, N., Welzl, M., Armitage, G., and G. Fairhurst, «TCP Alternative Backoff with ECN (ABE)», Work in Progress8, draft-ietf-tcpm-alternativebackoff-ecn-05, December 2017.

[Trammell15] Trammell, B., Kuehlewind, M., Boppart, D., Learmonth, I., Fairhurst, G., and R. Scheffenegger, «Enabling Internet-Wide Deployment of Explicit Congestion Notification», In Conference Proceedings of Passive and Active Measurement (PAM), pp. 193-205, March 2015, <https://doi.org/10.1007/978-3-319-15509-8_15>.

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

Содержимое этой спецификации, включая обновлённые части RFC 3168, в значительной мере заимствовано из [ECN-EXPERIMENT] — спасибо авторам этого документа. Авторы документов, описывающих эксперименты, дали мотивы для создания этого документа, спасибо им за интерес к инновациям. Colin Perkins предложил обновление RFC 6679 для RTP и предоставил рекомендации по обновляемым фрагментам.

Эта спецификация стала лучше, благодаря комментариям множества рецензентов, включая Ben Campbell, Brian Carpenter, Benoit Claise, Spencer Dawkins, Gorry Fairhurst, Sue Hares, Ingemar Johansson, Naeem Khademi, Mirja Kuehlewind, Karen Nielsen, Hilarie Orman, Eric Rescorla, Adam Roach, Michael Welzl. Внимательный обзор Bob Briscoe для множества черновых вариантов этого документа привёл к многочисленным улучшениям, включая добавление изменений в RFC для протокола DCCP.

Адрес автора

David Black
Dell EMC
176 South Street
Hopkinton, MA 01748
United States of America
Email: david.black@dell.com

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

nmalykh@protokols.ru


1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.

3Transparent Interconnection of Lots of Links — прозрачные соединения большого числа каналов.

4В оригинале ошибочно указано Приложение B.1, см. https://www.rfc-editor.org/errata/eid5649. Прим перев.

5Low Latency Low Loss Scalable throughput — малые задержки и потери, расширяемая пропускная способность.

6В оригинале это примечание и предыдущий абзац отсутствуют, см. https://www.rfc-editor.org/errata/eid5399. Прим. перев.

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

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

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

RFC 8309 Service Models Explained

Internet Engineering Task Force (IETF)                             Q. Wu
Request for Comments: 8309                                        W. Liu
Category: Informational                              Huawei Technologies
ISSN: 2070-1721                                                A. Farrel
                                                        Juniper Networks
                                                            January 2018

Service Models Explained

Разъяснение моделей сервиса

PDF

Аннотация

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

Небольшое число модулей YANG определяет модели сервиса (например, модель L3SM2, разработанная группой L3SM и опубликованная в RFC 8049).

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

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

Документ не относится к категории Internet Standards Track и публикуется с информационными целями.

Документ является результатом работы IETF и представляет согласованный взгляд сообщества IETF. Документ прошел открытое обсуждение и был одобрен для публикации IESG3. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.

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

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

Авторские права (Copyright (c) 2018) принадлежат 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. Введение

В последние годы было написано множество модулей на языке моделирования [RFC6020] для настройки и мониторинга. Многие из таких модулей служат для настройки конфигурации на уровне устройств (например, [RFC7223]) или управления неделимыми (монолитными) функциями или экземплярами протоколов (например, [RFC7407]).

[RFC7950] различает «модель данных», которая определяет представление данных и доступ к ним, и «модуль YANG», определяющий иерархии узлов схемы для создания автономного и компилируемого блока определений и включений. YANG собирает модели данных в структурированные модули для простоты использования.

В контексте программно-определяемых сетей (SDN4) [RFC7149] [RFC7426] модули данных YANG могут применяться на интерфейсе между контроллером и сетевыми устройствами, а также между сетевыми оркестраторами и контроллерами. Может также применяться иерархия таких компонентов с «супер-контроллерами», доменными контроллерами и контроллерами устройств, обменивающимися данными и инструкциями с помощью модулей YANG.

Был интерес к использованию YANG для определения и документирования моделей данных, описывающих сервис переносимым способом, который не зависит от использующего модель оператора, например, модель L3SM [RFC8049]. Такие модели могут применяться в ручных и даже бумажных процессах запроса с постепенным переходом к механизмам IT. В конечном итоге они могут применяться в интерактивных, программно-управляемых динамических системах, а также стать частью систем SDN.

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

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

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

Другая работа по классификации модулей YANG опубликована в [RFC8199], где приведены важные для этого документа ссылки, а также используется термин «модуль сервиса» (service module). В параграфе 6.1 приведено сравнение использования терминов в документах.

2. Термины и концепции

Читателям следует внимательно ознакомиться с описанием и классификацией модулей YANG в документе [RFC8199].

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

Network Operator — сетевой оператор

Этим термином обозначают компанию, которая владеет и эксплуатирует одну или множество сетей, обеспечивающих доступ в Internet и/или другие услуги.

Customer — абонент, клиент

Этот термин обозначает сторону, покупающую услуги (в том числе, подключение) у сетевого оператора. В контексте этого документа абонентом обычно считается компания, у которой имеется свой сеть или вычислительная платформа и которой нужно подключиться к Internet или соединить свои сайты. У такого клиента может быть корпоративная сеть или ЦОД5. Иногда этот термин применяют к отдельным лицам таких компаний, которые заключают договор на покупку услуг сетевого оператора. Описываемый здесь клиент ведет деятельность независимо от сетевого оператора, но некоторые компании могут выступать в качестве внутренних клиентов, например, пакетная сеть IP/MPLS может быть клиентом оптической транспортной сети.

Service — сервис, услуга

Сетевой оператор предоставляет клиенту одну или множество услуг. Услугой в контексте этого документа (иногда применяется термин сетевая услуга) называется та или иная форма связности сайтов клиента с Internet или соединения сайтов клиента через сеть оператора и Internet. Однако следует различать параметры, описывающие услугу, включенную с модель обслуживания клиентов (см. определение ниже), и соглашение об уровне обслуживания (SLA6), как указано в разделе 5 и параграфе 7.2.

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

В этом документе различаются услуги, предоставляемые клиентам (т. е. услуги на интерфейсе между клиентом и оператором), и услуги, реализуемые в сети (см. [RFC8199]). Это различие рассмотрено в разделе 6.

Читатели могут также обратиться к [RFC7297], где имеется пример характеризации услуг связности IP.

Data Model — модель данных

Концепции информационной модели (IM) и модели данных (DM) описаны в [RFC3444]. Этот документ определяет модель данных, сопоставляя ее с IM, как описано ниже.

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

Как отмечено в разделе 1, термины модель данных и модуль YANG здесь применяются, как указано в [RFC7950].

Service Model — модель сервиса

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

Customer Service Model – модель обслуживания клиентов

Модель обслуживания клиентов применяется для описания сервиса, предлагаемого или предоставляемого клиенту сетевым оператором, как показано на рисунке 1. Она может использоваться человеком (через пользовательский интерфейс, такой как GUI, web-форма, CLI) или программой для настройки или запроса сервиса, который может предоставляться людям (через систему выполнения заказов) или программным компонентам. Такие модели иногда называют моделями сервиса [RFC8049]. Модель обслуживания клиентов выражается в модуле YANG как основной набор параметров, который является общим для сетевых операторов, а дополнительные возможности, зависящие от конкретного сетевого оператора, определяются расширениями или дополнениями к модулю. За исключением случаев, когда детали технологии напрямую относятся к клиенту (например, инкапсуляция или механизмы доступа), модели обслуживания клиентов не зависят от технологии и абонент не влияет (и не знает) на устройство сервиса у оператора.

Примером, где такие детали имеют отношение к клиенту, является случай, где эти детали описывают поведение или взаимодействие на интерфейсе между оборудованием клиентского сайта (его часто называют Customer Edge или CE) и оборудованием оператора (обычно называют Provider Edge или PE).

Service Delivery Model – модель предоставления услуг

Модель предоставления услуг используется сетевым оператором для определения и управления способом организации сервиса в сети. Она может использоваться человеком (например, со станции управления) или программой для инструктирования компонент сети. Модули YANG, представляющие такие модели, иногда называют модулями YANG для сетевых услуг [RFC8199] и они применяются «внешними системами», такими как системы поддержки операций (OSS7). Модуль предоставления услуг выражается как базовый набор параметров, общий для разных типов сетей и технологий. Дополнительные свойства конкретной конфигурации оборудования определенного производителя или фирменных протоколов определяются в расширениях или дополнениях к модулю. Модули предоставления услуг включают модули для конкретных технологий.

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

3. Использование моделей сервиса

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

Язык описания модели определяется ее разработчиком. IETF применяет язык YANG, определенный в [RFC6020].

Кодирование и протокол обмена данными модели между клиентом и оператором зависит от развертывания и реализации. В IETF стандартизованы протоколы NETCONF [RFC6241] и RESTCONF [RFC8040] для взаимодействия «по проводу» между программными компонентами с использованием данных в формате XML или JSON. Однако размещенные вместе программные компоненты могут применять внутренний API, а системы, взаимодействующие с людьми, могут использовать web-формы и даже бумажные документы. При прямом взаимодействии с людьми интерфейсные операции могут быть реализованы через бизнес-практику, которая может вносить ошибки, что повышает значимость автоматизированных, детерминированных интерфейсов.

 --------------        Модель         ----------------------
|              |обслуживания абонента|                      |
|   Абонент    | <-----------------> |   Сетевой оператор   |
|              |                     |                      |
 --------------                       ----------------------

Рисунок 1. Модель обслуживания, применяемая на интерфейсе между абонентом и оператором.

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

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

3.1. Практические вопросы

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

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

4. Модели сервиса в контексте SDN

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

                ------------------
               |                  |
               |   Координатор    |
               |                  |
               .------------------.
              .          :         .
             .           :          .
  ------------     ------------     ------------
 |            |   |            |   |            |
 | Контроллер |   | Контроллер |   | Контроллер |
 |            |   |            |   |            |
  ------------     ------------     ------------
     :              .       .               :
     :             .         .              :
     :            .           .             :
 ---------     ---------   ---------     ---------
| Элемент |   | Элемент | | Элемент |   | Элемент |
|  сети   |   |  сети   | |  сети   |   |  сети   |
 ---------     ---------   ---------     ---------

Рисунок 2. Пример архитектуры SDN.

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

Одним из вариантов реализации такого отображения служит разделение координации сети и услуг, как показано на рисунке 3.


                                             Модель
                        ------------------ обслужив.  ----------
                       |                  | клиентов |          |
                       |   Координатор    |<-------->| Абонент  |
                       |      услуг       |    (a)   |          |
                       |                  |           ----------
                        ------------------
                           .          .
                          .            .        (b)   -----------
                         . (b)          .      ......|  BSS/OSS  |
                        .                .     :     |приложений |
                       .                  .    :      -----------
                      . Модель предоставл. .   :
                      .       услуг        .   :
             ------------------    ------------------
            |                  |  |                  |
            |   Координатор    |  |   Координатор    |
            |      сети        |  |      сети        |
            |                  |  |                  |
            .------------------    ------------------.
           .         :                       :        .
          .          : Модель конфигурации   :         .
          .          :        сети           :         .
  ------------     ------------     ------------    ------------
 |            |   |            |   |            |  |            |
 | Контроллер |   | Контроллер |   | Контроллер |  | Контроллер |
 |            |   |            |   |            |  |            |
  ------------     ------------     ------------    ------------
     :              .       .                 :            :
     :             .         .      Модель    :            :
     :            .           . конфигурации  :            :
     :            .           .  устройства   :            :
 ---------     ---------   ---------     ---------      ---------
| Элемент |   | Элемент | | Элемент |   | Элемент |    | Элемент |
|  сети   |   |  сети   | |  сети   |   |  сети   |    |  сети   |
 ---------     ---------   ---------     ---------      ---------

Рисунок 3. Пример архитектуры SDN с координатором услуг.

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

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

  • На рисунке 1 в [RFC7426] показано разделение прикладного уровня, уровня абстракции сетевых служб (NSAL8) и уровня управления. Сервисный интерфейс размещается между NSAL и уровнем управления.

  • На рисунке 1 в [RFC7491] показан интерфейс между координатором службы приложений и контроллером основанных на приложениях сетевых операций.

  • На рисунке 1 в [RFC8199] показан интерфейс из OSS или BSS9, выраженный в модулях YANG для сетевого сервиса.

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

5. Возможные причины путаницы

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

  • Обсуждаемые услуги являются услугами связи, которые сетевые операторы предоставляют своим клиентам. Услуги обеспечиваются путем манипуляций с ресурсами сети оператора. Это полностью отличается от подхода «нечто как услуга» (например, хранилище как услуга или SaaS10), где сервис-провайдер предлагает доступ к услуге с добавленной стоимостью, которая предоставляется в определенном месте сети с использованием других ресурсов (вычисления, хранилище …), которые сами не являются частью сети. Путаница возникает не только из-за использования в обоих случаях слова «услуга», но и в результате того, что операторы могут предлагать своим клиентам оба типа услуг.

  • Работа сети обычно выходит за рамки обсуждения услуг между оператором и клиентом. Это значит, что модель обслуживания клиентов не раскрывает им способы предоставления услуг оператором, детали технологии или ресурсы, используемые для предоставления услуги (все это может считаться уязвимым в плане безопасности). Например, в простом случае подключения по виртуальному каналу «точка-точка», создаваемому с помощью туннеля (например, псевдопровод MPLS) оператор не раскрывает пути туннеля через сеть. Конечно, это не мешает оператору принимать пожелания клиента (например, избегать прохождения через определенную страну) или раскрывать конкретные детали (например, те, которые можно обнаружить путем трассировки маршрута), но это не относится к стандартным свойствам услуги, описываемым моделью обслуживания клиентов.

  • Оператор может применять дополнительные модели данных (модели предоставления услуг), которые помогают описать способ реализации услуги в сети. Эти модели могут применяться на интерфейсе между координаторами сервиса и сети, как показано на рисунке 3, и могут включать многие фрагменты информации из модели обслуживания клиентов вместе с параметрами протоколов и данными конфигурации устройств. В [RFC8199] такие модели данных названы сервисными моделями и обозначены как «модули YANG для сетевых услуг» (см. сравнение в параграфе 6.1). Важно, чтобы координатор услуг мог отобразить модель обслуживания клиентов на эти модели предоставления услуг, но это разные модели.

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

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

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

6. Связь с другими работами

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

6.1. Сравнение с моделями сетевого сервиса

Как отмечено выше, в [RFC8199] приведена классификация модулей YANG. Документ вводит термин «модуль YANG для сетевого сервиса», указывающий тип модулей, которые «описывают конфигурацию, данные состояния, операции и уведомления абстрактного представления сервиса, реализованного в одном или множестве элементов сети». Эти модули служат для построения моделей предоставления услуг, описываемых в этом документе, т. е. они являются модулями, применяемыми на интерфейсе между координатором услуг или OSS/BSS и координатором сети, как показано на рисунке 3.

Рисунок 1 из [RFC8199] можно изменить, чтобы сделать более четким и включить дополнительный пример модуля YANG для сетевых услуг, как показано на рисунке 4. Как можно видеть, верхний уровень классификации модулей собирает те, которые служат для поддержки операций и бизнеса. Они могут применяться системами OSS или BSS, а координатор сервиса может быть частью OSS/BSS или отдельной компонентой. Этот верхний уровень на рисунке разделен на модули обслуживания клиентов, служащие для описания услуг, и другие модули, которые описывают дополнительные функции OSS/BSS, такие как счета на оплату и SLA.

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Модули YANG для поддержки операций и бизнеса

 +-----------------------+     +-----------------------+
 |                       |     |                       |
 |    Модули YANG для    |     |  Другие модули YANG   |
 | клиентского сервиса   |     |     для поддержки     |
 |                       |     |  операций и бизнеса   |
 |  +------+   +------+  |     |                       |
 |  |      |   |      |  |     |                       |
 |  | L2SM |   | L3SM |  |     |                       |
 |  |      |   |      |  |     |                       |
 |  +------+   +------+  |     |                       |
 |                       |     |                       |
 +-----------------------+     +-----------------------+

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Модули YANG для сетевого сервиса

+------------+  +-------------+  +-------------+  +-------------+
|            |  |             |  |             |  |             |
|  - L2VPN   |  |   - L2VPN   |  |    EVPN     |  |    L3VPN    |
|  - VPWS    |  |   - VPLS    |  |             |  |             |
|            |  |             |  |             |  |             |
+------------+  +-------------+  +-------------+  +-------------+

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Модули YANG для элементов сети

 +------------+  +------------+  +-------------+  +------------+
 |            |  |            |  |             |  |            |
 |    MPLS    |  |    BGP     |  | IPv4 / IPv6 |  |  Ethernet  |
 |            |  |            |  |             |  |            |
 +------------+  +------------+  +-------------+  +------------+

EVPN - Виртуальная частная сеть Ethernet 
L2SM - Модель услуг L2 VPN
L2VPN - Сеть L2 VPN
L3SM - Модель услуг L3 VPN
L3VPN - Сеть L3 VPN
VPLS - услуги виртуальной частной ЛВС
VPWS - услуги виртуального частного провода

Рисунок 4. Уровни абстракции модуля YANG, показывающие модули клиентского сервиса.

6.2. Модели предоставления услуг и элементов сети

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

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

  • [BGP-L3VPN-YANG] определяет модуль YANG, который может служить для настройки и поддержки BGP L3VPN.

  • [L2VPN-YANG] описывает модель данных, которую предполагается использовать в инструментах управления, работающих у операторов, для поддержки и мониторинга сетевых ресурсов, которые применяются для предоставления услуг L2VPN.

  • [EVPN-YANG] определяет модули YANG для предоставления услуг Ethernet VPN.

6.3. Модель обслуживания клиентов

Несколько инициатив в рамках IETF связаны с разработкой моделей обслуживания клиентов. L3SM представляет услугу L3VPN для клиента в соответствии с описанием оператора. На рисунке 5, заимствованном из [RFC8049], показано, что L3SM является моделью обслуживания клиентов, как описано в этом документе.

    Модель    |
    L3VPN-SVC |
              |
           +------------------+         +-----+
           |    Координация   | < --- > | OSS |
           +------------------+         +-----+
              |            |
      +----------------+   |
      |Менеджер конфиг.|   |
      +----------------+   |
              |            |
              | Netconf/CLI ...
              |            |
+------------------------------------------------+
                     Сеть

Рисунок 5. Архитектура сервиса L3SM.


Модель услуг L2 VPN (L2SM) определена в [L2VPN-SERVICE].

Использование этой модели показано на рисунке 6, который воспроизводит рисунок 5 из этого документа. Как можно видеть, L2SM является моделью обслуживания клиентов, как описано в этом документе.

    ------------------------------------
   | Запрашивающий обслуживание клиента |
    ------------------------------------
        |
Модель  |
услуг   |
L2VPN   |
        |
      -----------------------
     |   Координатор услуг   |
      -----------------------
        |
        |     Модель              +-------------+
        |  предоставления +------>|   BSS/OSS   |
        |     услуг       |       | приложений  |
        |                 V       +-------------+
      -----------------------
     |   Координация сети    |
      -----------------------
         |            |
 +----------------+   |
 |менеджер конфиг.|   |
 +----------------+   |  Модели
         |            |  устройств
         |            |
--------------------------------------------
                        Сеть

Рисунок 6. Архитектура сервиса L2SM.


6.4. Архитектура MEF

Форум MEF (MEF) разработал архитектуру для администрирования и эксплуатации сетей. Она документирована как эталонная архитектура «координации жизненного цикла услуги» (LSO11) и показана на рисунке 2 в [MEF-55].

Работа MEF охватывает все аспекты LSO, включая счета, SLA, управление заказами и жизненным циклом. Работы IETF по моделям сервиса обычно не столь широки и предлагают небольшой, самодостаточный модуль YANG для услуги. Это не отменяет ни один из подходов и лишь показывает их различие.

7. Другие концепции

В этом разделе представлены некоторые расширенные концепции.

7.1. Независимость от технологии

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

Ниже приведены два пример.

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

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

7.2. Связь с правилами

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

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

Как в случае коммерческих условий и SLA (раздел 5), предполагается, что некоторые операторы будут развивать стандартные модели обслуживания клиентов для включения параметров политики, используя свою работу или результаты работы по созданию моделей для политики в рамках IETF или других организаций по стандартизации.

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

7.3. Возможности конкретного оператора

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

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

7.4. Поддержка множества услуг

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

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

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

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

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

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

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

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

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

9. Вопросы управляемости

Документ целиком посвящен вопросам, связанным с управлением сетями и услугами.

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

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

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

10. Взаимодействие с IANA

Этот документ не требует действий IANA.

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

11.1. Нормативные документы

[RFC3444] Pras, A. and J. Schoenwaelder, «On the Difference between Information Models and Data Models», RFC 3444, DOI 10.17487/RFC3444, January 2003, <https://www.rfc-editor.org/info/rfc3444>.

[RFC8199] Bogdanovic, D., Claise, B., and C. Moberg, «YANG Module Classification», RFC 8199, DOI 10.17487/RFC8199, July 2017, <https://www.rfc-editor.org/info/rfc8199>.

11.2. Дополнительная литература

[BGP-L3VPN-YANG] Jain, D., Patel, K., Brissette, P., Li, Z., Zhuang, S., Liu, X., Haas, J., Esale, S., and B. Wen, «Yang Data Model for BGP/MPLS L3 VPNs», Work in Progress, draft-dhjain-bess-bgp-l3vpn-yang-02, August 2016.

[EVPN-YANG] Brissette, P., Sajassi, A., Shah, H., Li, Z., Tiruveedhula, K., Hussain, I., and J. Rabadan, «Yang Data Model for EVPN», Work in Progress, draft-ietf-bess-evpn-yang-0313, October 2017.

[L2VPN-SERVICE] Wen, B., Fioccola, G., Xie, C., and L. Jalil, «A YANG Data Model for L2VPN Service Delivery», Work in Progress, draft-ietf-l2sm-l2vpn-service-model-0414, October 2017.

[L2VPN-YANG] Shah, H., Brissette, P., Chen, I., Hussain, I., Wen, B., and K. Tiruveedhula, «YANG Data Model for MPLS-based L2VPN», Work in Progress, draft-ietf-bess-l2vpn-yang-0715, October 2017.

[MEF-55] MEF Forum, «Lifecycle Service Orchestration (LSO): Reference Architecture and Framework», Service Operations Specification MEF 55, March 2016.

[RFC6020] Bjorklund, M., Ed., «YANG — A Data Modeling Language for the Network Configuration Protocol (NETCONF)», RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., «Network Configuration Protocol (NETCONF)», RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.

[RFC7149] Boucadair, M. and C. Jacquenet, «Software-Defined Networking: A Perspective from within a Service Provider Environment», RFC 7149, DOI 10.17487/RFC7149, March 2014, <https://www.rfc-editor.org/info/rfc7149>.

[RFC7223] Bjorklund, M., «A YANG Data Model for Interface Management», RFC 7223, DOI 10.17487/RFC7223, May 2014, <https://www.rfc-editor.org/info/rfc7223>.

[RFC7297] Boucadair, M., Jacquenet, C., and N. Wang, «IP Connectivity Provisioning Profile (CPP)», RFC 7297, DOI 10.17487/RFC7297, July 2014, <https://www.rfc-editor.org/info/rfc7297>.

[RFC7407] Bjorklund, M. and J. Schoenwaelder, «A YANG Data Model for SNMP Configuration», RFC 7407, DOI 10.17487/RFC7407, December 2014, <https://www.rfc-editor.org/info/rfc7407>.

[RFC7426] Haleplidis, E., Ed., Pentikousis, K., Ed., Denazis, S., Hadi Salim, J., Meyer, D., and O. Koufopavlou, «Software-Defined Networking (SDN): Layers and Architecture Terminology», RFC 7426, DOI 10.17487/RFC7426, January 2015, <https://www.rfc-editor.org/info/rfc7426>.

[RFC7491] King, D. and A. Farrel, «A PCE-Based Architecture for Application-Based Network Operations», RFC 7491, DOI 10.17487/RFC7491, March 2015, <https://www.rfc-editor.org/info/rfc7491>.

[RFC7950] Bjorklund, M., Ed., «The YANG 1.1 Data Modeling Language», RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.

[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, «RESTCONF Protocol», RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.

[RFC8049] Litkowski, S., Tomotaki, L., and K. Ogaki, «YANG Data Model for L3VPN Service Delivery», RFC 8049, DOI 10.17487/RFC8049, February 2017, <https://www.rfc-editor.org/info/rfc8049>.

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

Спасибо Daniel King, Xian Zhang, Michael Scharf, Med Boucadair, Luis Miguel Contreras Murillo, Joe Salowey, Benoit Claise, Robert Sparks, Tom Petch, David Sinicrope и Deborah Brungard за рецензии и комментарии.

Спасибо Dean Bogdanovic, Tianran Zhou и Carl Moberg за помощь в координации с [RFC8199].

Большое спасибо Jerry Bonner, обнаружившему мелкую, но важную опечатку в одном слове.

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

Qin Wu

Huawei Technologies

Email: bill.wu@huawei.com

Will Liu

Huawei Technologies

Email: liushucheng@huawei.com

Adrian Farrel

Juniper Networks

Email: afarrel@juniper.net

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

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

nmalykh@protokols.ru

1Internet Engineering Task Force.

2Layer 3 Virtual Private Network Service Model — модель услуг виртуальных частных сетей L3.

3Internet Engineering Steering Group.

4Software-Defined Networking.

5Центр обработки данных. Прим. перев.

6Service Level Agreement.

7Operations Support System.

8Network Services Abstraction Layer.

9Business Support System — система поддержки бизнеса.

10Storage as a Service.

11Lifecycle Service Orchestration.

12Operations, Administration, and Maintenance — операции, администрирование и поддержка.

13Доступна более свежая версия https://tools.ietf.org/html/draft-ietf-bess-evpn-yang-06. Прим. перев.

14Работа опубликована в RFC 8466. Прим. перев.

15Доступна более свежая версия https://tools.ietf.org/html/draft-ietf-bess-l2vpn-yang-09. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 8309 Service Models Explained отключены

RFC 8307 Well-Known URIs for the WebSocket Protocol

Internet Engineering Task Force (IETF)                        C. Bormann
Request for Comments: 8307                       Universitaet Bremen TZI
Updates: 6455                                               January 2018
Category: Standards Track
ISSN: 2070-1721

Общеизвестные URI для протокола WebSocket

Well-Known URIs for the WebSocket Protocol

PDF

Аннотация

В RFC 5785 определен префикс пути /.well-known/, который может использоваться общеизвестными идентификаторами URI. Префикс был определен для URI-схем http и https. Данный документ формально обновляет RFC 6455, где определены схемы URI для протокола WebSocket, с целью расширения использования этих общеизвестных URI на соответствующие схемы URI.

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

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

Документ является результатом работы IETF1 и представляет собой согласованное мнение сообщества IETF. Документ был вынесен на публичное рассмотрение и одобрен для публикации IESG2. Дополнительная информация о документах BCP представлена в разделе 2 документа RFC 7841.

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

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

Авторские права (Copyright (c) 2018) принадлежат 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. Введение

[RFC5785] определяет префикс пути /.well-known, который может применяться в общеизвестных URI. Там же задан реестр IANA для суффиксов URI, которые будут применяться с этим префиксом пути для создания общеизвестных URI.

В [RFC5785] этот механизм определен конкретно для схем http и https (не определены в [RFC7230]). С тех пор этот механизм начали применять и другие схемы типа coap и coaps [RFC7252], используя реестр суффиксов URI, определенных для HTTP(S).

[RFC6455], в котором определены схемы URI для протокола WebSocket (ws и wss), не задает применения общеизвестных URI для этих схем URI.

Настоящий документ формально обновляет [RFC6455], добавляя использование общеизвестных URI [RFC5785] для схем ws и wss.

Общеизвестные URI для ws и wss используют реестр суффиксов URI, созданный [RFC5785], не требуя от IANA внесения изменений в этот реестр.

2. Взаимодействие с IANA

Этот документ не требует каких-либо действий IANA.

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

Раздел «Вопросы безопасности» [RFC5785] применим и должен приниматься во внимание для общеизвестных URI.

Всегда имеется возможность создать ws и wss URI так, что они юудут отображаться на общеизвестные HTTP(S) URI при использовании процедуры из раздела 4 [RFC6455]. Формальное определение механизма общеизвестных URI для схем ws и wss не меняет состояния безопасности.

Однако доступность общеизвестных URI для протокола WebSocket требует от приложений, которые хотят определить общеизвестные суффиксы URI конкретно для WebSocket, учитывать не будут ли ресурсы, которые становятся доступными через эквивалентные HTTP(S) URI, формируемые в соответствии с разделом 4 [RFC6455] приводить к раскрытию информации или иным проблемам безопасности.

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

4.1. Нормативные документы

[RFC5785] Nottingham, M. and E. Hammer-Lahav, «Defining Well-Known Uniform Resource Identifiers (URIs)», RFC 5785, DOI 10.17487/RFC5785, April 2010, <https://www.rfc-editor.org/info/rfc5785>.

[RFC6455] Fette, I. and A. Melnikov, «The WebSocket Protocol», RFC 6455, DOI 10.17487/RFC6455, December 2011, <https://www.rfc-editor.org/info/rfc6455>.

4.2. Дополнительная литература

[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, <https://www.rfc-editor.org/info/rfc7230>.

[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, «The Constrained Application Protocol (CoAP)», RFC 7252, DOI 10.17487/RFC7252, June 2014, <https://www.rfc-editor.org/info/rfc7252>.

Адрес автора

Carsten Bormann

Universitaet Bremen TZI

Postfach 330440

Bremen D-28359

Germany

Phone: +49-421-218-63921

Email: cabo@tzi.org


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

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

nmalykh@gmail.com

1Internet Engineering Task Force.

2Internet Engineering Steering Group.

Рубрика: RFC | Комментарии к записи RFC 8307 Well-Known URIs for the WebSocket Protocol отключены

RFC 8321 Alternate-Marking Method for Passive and Hybrid Performance Monitoring

Internet Engineering Task Force (IETF)                  G. Fioccola, Ed.
Request for Comments: 8321                                    A. Capello
Category: Experimental                                       M. Cociglio
ISSN: 2070-1721                                           L. Castaldelli
                                                          Telecom Italia
                                                                 M. Chen
                                                                L. Zheng
                                                     Huawei Technologies
                                                               G. Mirsky
                                                                     ZTE
                                                              T. Mizrahi
                                                                 Marvell
                                                            January 2018

Alternate-Marking Method for Passive and Hybrid Performance Monitoring

Метод маркировки с чередованием для пассивного и гибридного мониторинга сети

PDF

Аннотация

В этом документе описан метод измерения потерь, задержки и её вариаций на «живом» трафике. Метод основан на чередующейся маркировке (Alternate-Marking или AM), называемой также «окрашиванием». Представлен отчёт для разъяснения примера и демонстрации применимости метода. Технологию можно применять в различных ситуациях для пассивных или гибридных измерений в зависимости от приложения.

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

Документ не относится к категории Internet Standards Track и публикуется для проверки, экспериментальной реализации и оценки.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Не все одобренные IESG документы являются кандидатами в Internet Standard, см раздел 2 RFC 7841.

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

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

Авторские права (Copyright (c) 2018) принадлежат 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. Введение

В настоящее время сети большинства сервис-провайдеров передают трафик, весьма чувствительный к потере пакетов [RFC7680], их задержкам [RFC7679] и вариации задержки [RFC3393]. В связи с этим провайдерам требуются методики и инструменты для мониторинга и измерения производительности сети с достаточной точностью, чтобы постоянно контролировать качество обслуживания своих пользователей. С другой стороны, мониторинг производительности даёт полезные сведения для повышения эффективности управления сетью (например, изоляция сетевых неполадок, устранение неисправностей и т. п.).

Организациями по разработке стандартов (Standards Developing Organization или SDO) проделана большая работа, связанная с функциями эксплуатации, администрирования и поддержки (Operations, Administration, and Maintenance или OAM), включающими также методы мониторинга производительности. В [RFC7276] представлен хороший обзор имеющихся механизмов OAM, разработанных в IETF, ITU-T, IEEE. В IETF выполнена большая работа по обнаружению отказов и проверке связности, а также проведены некоторые работы по мониторингу производительности. Рабочая группа IPPM определила стандартные показатели для измерения производительности сети, однако разработанные этой группой методы связаны в основном с активными измерениями. Недавно рабочая группа MPLS определила механизмы для измерения потерь, односторонней и двухсторонней задержки и её вариаций в сетях MPLS [RFC6374], но применение их для пассивных измерений сталкивается с ограничениями, особенно в сетях без явных соединений.

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

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

В RFC 7799 [RFC7799] определены пассивные и гибридные методы измерения. Пассивные методы основаны исключительно на наблюдении не нарушаемого и не изменяемого потока интересующих пакетов, а гибридные измерения применяют комбинацию активных и пассивных методов. Учитывая эти определения метод чередующейся маркировки (Alternate-Marking) можно рассматривать как гибридный или пассивный, в зависимости от ситуации. Когда маркировка выполняется путём изменения значений полей в пакетах (например, поля кода дифференцированного обслуживания — DSCP), метод является гибридным. Если же маркировка выполняется в специальном (резервном) поле, заданном спецификацией протокола, метод чередующейся маркировки можно считать пассивным. Например, можно применять для маркировки метки потоков Synonymous Flow Label, описанные в [SFL-FRAMEWORK] или биты маркировки OAM, как указано в [PM-MM-BIER]).

Преимущества описываемого метода указаны ниже.

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

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

  • Точное измерение потери пакетов. При пассивных измерениях потери учитываются с точностью в 1 пакет.

  • Потенциальная применимость к любому трафику на основе пакетов или кадров. Ethernet, IP, MPLS и т. п. при индивидуальной и групповой адресации.

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

  • Гибкость. Разрешены все форматы временных меток, поскольку они поддерживаются по отдельному каналу (out of band). Выбор формата NTP (Network Time Protocol) [RFC5905] или IEEE 1588 PTP (Precision Time Protocol) [IEEE-1588] зависит от требуемой точности.

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

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

1.1. Уровни требований

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

2. Обзор метода

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

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

Предлагаемый здесь метод использует второй подход, но без дополнительных пакетов для деления потока на блоки. Вместо этого пакеты маркируются так, что пакеты одного блока получают одну «окраску», а пакеты следующего блока — другую. Каждая смена цвета представляет сигнал автосинхронизации, гарантирующий согласованность измерений на разных устройствах в пути (см. работы [IP-MULTICAST-PM] и [OPSAWG-P3M], где этот метод был предложен).

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

                         Поток трафика
    ========================================================>
    +------+       +------+       +------+       +------+
---<>  R1  <>-----<>  R2  <>-----<>  R3  <>-----<>  R4  <>---
    +------+       +------+       +------+       +------+
    .              .      .              .       .      .
    .              .      .              .       .      .
    .              <------>              <------->      .
    .           Потери на узле        Потери в канале   .
    .                                                   .
    <--------------------------------------------------->
                     Сквозные потери пакетов

Рисунок 1. Доступные измерения.

3. Подробное описание метода

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

3.1. Измерение потери пакетов

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

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

  • если цвет меняется после фиксированного числа пакетов, все блоки без потерь будут содержать одинаковое число пакетов;

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

На рисунке 2 показанокак выглядят блоки пакетов после окрашивания.

A - пакет цвета A
B - пакет цвета B

        |           |           |           |           |
        |           |    Поток трафика      |           |
------------------------------------------------------------------->
 BBBBBBB AAAAAAAAAAA BBBBBBBBBBB AAAAAAAAAAA BBBBBBBBBBB AAAAAAA
------------------------------------------------------------------->
   ...  |  Блок 5   |   Блок 4  |   Блок 3  |   Блок 2  |   Блок 1
        |           |           |           |           |

Рисунок 2. Окрашивание трафика.


На рисунке 3 показано применения метода для определения потери пакетов на канале между смежными узлами. Предположим, что мониторинг потери пакетов выполняется между двумя маршрутизаторами R1 и R2. В соответствии с методом трафик окрашивается в цвета A и B. Смена цвета служит сигналом завершения блока, как показано в верхней части рисунка 3.

Если трафик ещё не окрашен, R1 может сделать это сам. Маршрутизатору R1 нужны два счётчика на выходном интерфейсе — C(A)R1 учитывает пакеты цвета A, C(B)R1 — пакеты цвета B. Пока трафик имеет цвет A, инкрементируется лишь счётчик C(A)R1, а при трафике цвета B инкрементируется только C(B)R1. C(A)R1 и C(B)R1 могут служить эталонными значения для определения потерь между R1 и любой другой точкой измерения на дальнейшем пути. Маршрутизатору R2 тоже нужны два счётчика на входном интерфейсе — C(A)R2 и C(B)R2, учитывающие пакеты цвета A и B, соответственно. По завершении блока A можно сравнить значения C(A)R1 и C(A)R2 для определения числа потерянных пакетов блока. Аналогично при завершении блока B можно сравнить счётчики C(B)R1 и C(B)R2.

Цвет A   ----------+           +-----------+           +----------
                   |           |           |           |
Цвет B             +-----------+           +-----------+
          Блок n        ...        Блок 3      Блок 2      Блок 1
        <---------> <---------> <---------> <---------> <--------->

                            Поток трафика
        ===========================================================>
Цвет ...AAAAAAAAAAA BBBBBBBBBBB AAAAAAAAAAA BBBBBBBBBBB AAAAAAA...
        ===========================================================>

Рисунок 3. Обнаружение потери пакета в канале.


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

Использование фиксированного таймера для смены окрашивания обеспечивает лучшее управления методом — продолжительность (время) блока может быть достаточно большой для упрощения сбора и сравнения значений на разных сетевых устройствах. Предпочтительно считывать значение счётчика не сразу при смене цвета, чтобы учесть возможное нарушение порядка доставки (некоторые пакеты могут прийти с запозданием и будут увеличивать значение счётчика). Безопасным сроком ожидания представляется L/2 (L — продолжительность каждого блока) перед считыванием счётчика предыдущего блока. Недостатком выбора большой продолжительности блока является более грубое измерение.

В таблице 1 показано, как можно использовать счётчики для определения потерь между R1 и R2. В первом столбце указаны последовательные блоки трафика, а в остальных — значения счётчиков A и B на маршрутизаторах R1 и R2. А этом примере предполагается, что значения счётчиков считываются и сбрасываются в 0 по завершении блока, поэтому в таблице показаны лишь относительные значения, указывающие точное число пакетов в каждом блоке. Если счётчики не сбрасывать, таблица будет содержать кумулятивные значения, а относительные можно определить просто вычитая значение для предыдущего блока того же цвета. Цвет меняется по фиксированному таймеру (нет в таблице), поэтому число пакетов в блоках может меняться.

Таблица 1. Оценка счётчиков для измерения потери пакетов.

 

Блок

C(A)R1

C(B)R1

C(A)R2

C(B)R2

Потери

1

375

0

375

0

0

2

0

388

0

388

0

3

382

0

381

0

1

4

0

377

0

374

3

2n

0

387

0

387

0

2n+1

379

0

377

0

2

 

В блоках A (1, 3, 2n+1) все пакеты имеют цвет A, поэтому счётчики C(A) инкрементируются до числа пакетов, наблюдавшихся на интерфейсе, а C(B) = 0. В блоках B (2, 4, 2n) все пакеты имеют цвет B, счётчики C(A) = 0, а C(B) инкременитруются.

По завершении блока (смена цвета) инкрементирование относительных счётчиков прекращается и можно считать их для сравнения значений на маршрутизаторах R1 и R2 с целью определения потерь в блоке. Например, в таблице указано, что в блоке 1 (A) счётчики C(A)R1 и C(A)R2 имеют значения 375, что говорит об отсутствии потерь в первом блоке. Во втором блоке (B) счётчики R1 и R2 также совпадают (388) и это говорит об отсутствии потерь. В блоках 3 и 4 счётчики R1 и R2 различаются, что говорит о потере пакетов, в нашем примере это один пакет (382-381) в блоке 3 и три пакета (377-374) в блоке 4.

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

Следует отметить две стратегии реализации метода.

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

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

Как отмечено выше, для измерения по потокам требуется идентификация отслеживаемых потоков и определение пути для нужного потока. Можно отслеживать одие поток или группу потоков, но во втором случае измерение будет согласованным лишь прихождении всех потоков по одному пути. Кроме того, при группировке потоков невозможно точно определить, в каком потоке возникли потери. Для измерений на одном потоке нужно создать счётчики для каждого отслеживаемого потока. Когда контролируемые потоки указаны, требуется настроить мониторинг на соответствующих узлах. Настройка мониторинге означает задание правил для перехвата трафика и настройку счётчиков пакетов. Для выполнения сквозного мониторинга достаточно включить отслеживание на первом и последнем маршрутизаторе пути, в этом случае механизм просто не заметен промежуточным узлам и не зависит от выбора пути. При поэтапном (hop-by-hop) отслеживании на всем пути требуется включить отслеживание на каждом узле от источника до получателя. Если путь не известен заранее (имеется несколько путей между источником и получателем), требуется включить мониторинг на всех путях. Счётчики на интерфейсах фактического пути будут отслеживать потери пакетов, а прочие просто останутся неиспользуемыми (0).

3.1.1. «Окрашивание» пакетов

Окрашивание является основой создания блоков пакетов и подразумевает выбор места и способа задания цвета.

При измерениях по потокам можно задать поток для отслеживания правилами отбора (например, полей заголовка) для сопоставления с подмножеством пакетов. Таким способом можно контролировать число вовлечённых узлов на пути следования пакетов и размеры потоков. В общем случае может быть один или несколько окрашивающих узлов, при этом использование одного узла упрощает управление и избавляет от конфликтов. При окрашивании на нескольких узлах требуется, чтобы окраска периодически менялась между узлами в соответствии с параграфом 3.2, чтоы каждый измерительный узел на пути мог однозначно идентифицировать окрашенные пакеты. В [MULTIPOINT-ALT-MM] раскрашивание обобщено для потоков «многие со многими» (multipoint-to-multipoint). Кроме того, может быть выгодно окрашивать пакет ближе к источнику, поскольку это позволяет выполнять сквозные измерения, если это разрешено и на последнем маршрутизаторе в пути пакета.

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

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

3.1.2. Учёт пакетов

Для измерений по потокам в предположении окрашивания пакетов лишь на узлах-источниках узлы между источником и получателем (включая их) учитывают полученные и пересланные окрашенные пакеты — эта операция может быть включан на всех или части маршрутизаторов на пути, в зависимости от контролируемого сегмента сети (один канал, конкретная область городской сети или весь путь целиком). Поскольку окраска периодически меняется, нужны два счётчика (по одному для каждого цвета). Для каждого отслеживаемого потока или группы потоков и каждого интерфейса, где включён мониторинг, требуется пара счётчиков (по одному на каждый цвет). Например, для раздельного мониторинга трёх потоков маршрутизатору с четырьмя интерфейсами потребуется 24 счётчика (по 2 для каждого потока на каждом интерфейсе). В [MULTIPOINT-ALT-MM] подсчёт обобщен для потоков multipoint-to-multipoint.

В случае измерений по каналам поведение похоже, но окрашивание и учёт ведутся по каналам на конечных точках.

Ещё один важный аспект, который следует учитывать при считывании счётчиков — это момент считывания, позволяющий получить точное число пакетов в блоке. Маршрутизатор должен считывать счётчик, когда блок уже завершён, иными словами, счётчик для цвета A должен считываться, когда текущий блок имеет цвет B, чтобы подсчёт уже завершился. Это можно реализовать двумя способами. Общий подход предполагает периодическое считывание счётчиков несколько раз на протяжении блока и сравнение последовательных результатов. Когда рост значения прекращается, это означает, что текущий блок закончен и значение счётчика можно безопасно обрабатывать. При управлении окрашиванием по таймеру можно настроить считывание по этому же таймеру. Например, можно считывать счётчик A каждый раз около середины последующего блока B. Достаточный запас между концом блока и считыванием позволяет учесть возможное нарушение порядка доставки пакетов.

3.1.3. Сбор данных и расчёт потери пакетов

Узлы, включённые в мониторинг производительности, собирают значения счётчиков, но не могут использовать их напрямую для измерения потери пакетов, поскольку им известны лишь свои значения. Поэтому может применяться внешняя система управления сетью (Network Management System или NMS) для сбора и обработки значений счётчиков при расчёте потерь. NMS сравнивает значения счётчиков от разных узлов и может определить потерю пакетов (даже одного), и место, где это произошло.

Значения счётчиков нужно передавать в NMS сразу после считывания. Это можно реализовать по протоколу SNMP или FTP в режиме выталкивания (Push) или опроса (Polling). В первом случае каждый маршрутизатор периодически передаёт сведения NMS, во втором NMS периодически опрашивает маршрутизаторы для сбора сведений. В обоих случаях NMS нужно собрать все относящиеся к делу значения от всех маршрутизаторов в одном цикле таймера.

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

Варианты архитектуры измерения производительности (performance measurement или PM) рассмотрены в [COLORING], а [IP-FLOW-REPORT] вводит новые информационные элементы в IPFIX (IP Flow Information Export) [RFC7011].

3.2. Вопросы синхронизации

В этом документе представлено два метода смены окрашивания пакетов — по фиксированному числу пакетов и по фиксированному таймеру. Метод на основе таймера предпочтительней, поскольку он более детерминирован, и в дальнейшем рассматривается именно он.

В общем случае часы в сетевых устройствах не точны и время на маршрутизаторах R1 и R2 будет различаться. Для реализации этого метода часы требуется синхронизировать от одного источника с точностью ±L/2, где L -фиксированная продолжительность блока. Тогда каждый окрашенный пакет можно отнести к верному блоку на каждом из маршрутизаторов. Это обусловлено тем, что минимальная дистанция между пакетами одного цвета из разных блоков составляет L (без учёта нарушения порядка, прим. перев).

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

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

...BBBBBBBBB | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | BBBBBBBBB...
             |<======================================>|
             |                   L                    |
...=========>|<==================><==================>|<==========...
             |       L/2                   L/2        |
             |<===>|                            |<===>|
                d  |                            |   d
                   |<==========================>|
                      Доступный интервал учета

Рисунок 4. Аспекты синхронизации.


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

   d = A + D_max - D_min,

где A — точность часом, D_max — верхняя, а D_min — нижняя граница задержки между пакета устройствами.

Допустимый интервал учёта составляет L — 2d и должен быть больше нуля. Условие, которое должно выполняться и требование к точности синхронизации имеет вид

   d < L/2.

3.3. Измерение односторонней задержки

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

3.3.1. Методика с одним маркером

Чередование цветов можно использовать как метку времени для расчёта задержки. Когда цвет меняется новый блок), сетевое устройство может записать временную метку первого пакета в новом блоке, а затем это значение можно сравнить с меткой времени того же пакета на другом маршрутизаторе для расчёта задержки пакета. В примере, показанном на рисунке 2, маршрутизатор R1 сохраняет метку TS(A1)R1 при отправке первого пакета блока 1 (A), а метку TS(B2)R1 — при отправке первого пакета блока 2 (B) и т. д. R2 выполняет аналогичные операции на приёмной стороне, записывая TS(A1)R2, TS(B2)R2 и т. д. Поскольку метки относятся к конкретным пакетам (первому в каждом блоке), сравнение этих меток также будет относиться к этим пакетам и можно вычислить задержку пакета. Сравнивая метки TS(A1)R1 и TS(A1)R2 (аналогично, TS(B2)R1 и TS(B2)R2 и т. д.), можно определить задержку между R1 и R2. Для большего числа измерений можно сохранять дополнительные метки, относящиеся к другим пакетам того же блока.

Для когерентного сравнения временных меток от разных маршрутизаторов часы на узлах сети должны быть синхронизированы. Кроме того, измерения действительны лишь при отсутствии потерь и переупорядочения пакетов, поскольку в ином случае первый пакет на одном маршрутизаторе (R1) может оказаться не первым на другом (R2), например, при потере или нарушении порядка пакетов между маршрутизаторами R1 и R2.

В таблице 2 показано, как можно использовать временные метки для расчёта задержки между R1 и R2. В первом столбце указана последовательность блоков, в остальных — временные метки первых пакетов блока на R1 и R2. Разница между значениями меток указывает задержку. Для простоты все значения даны в миллисекундах.

Таблица 2. Оценка временных меток для измерения задержки.

 

Блок

TS(A)R1

TS(B)R1

TS(A)R2

TS(B)R2

Задержка R1-R2

1

12,483

15,591

3,108

2

6,263

9,288

3,025

3

27,556

30,512

2,956

18,113

21,269

3,156

2n

77,463

80,501

3,038

2n+1

24,333

27,433

3,100

 

В первой строке показаны метки R1 и R2 для первого пакета блока 1 (A). Задержка определяется разностью меток R2 и R1. Во второй строке показаны метки (в миллисекундах) R1 и R2 для первого пакета блока 2 (B). сравнивая метки от разных узлов, относящиеся к одному пакету (указывается сменой цвета), можно определить задержку в сегменте сети.

Для простоты в рассмотренном примере выполнялось одно измерение в каждом блоке (для первого пакета блока). Число измерений можно легко увеличить, рассматривая несколько пакетов из блока — можно записывать метки, например, для одного из каждых N пакетов. В предельном случае можно определять задержку для каждого пакета в блоке (непрактично с точки зрения реализации).

3.3.1.1. Средняя задержка

Как отмечено выше, метод, представленный для измерения задержки, подвержен влиянию нарушений порядка доставки пакетов. Для решение этой проблемы был рассмотрен подход, основанный на концепции средней задержки, которая рассчитывается из среднего времени прибытия пакетов в одном блоке. Сетевое устройство локально сохраняет временные метки для каждого пакета в блоке, суммирует их значения и делит сумму на число полученных в блоке пакетов. Разность среднего времени прибытия от двух смежных устройств даёт среднюю задержку между этими узлами. При расчёте средней задержки измерительная ошибка может возрастать из-за накопления ошибок множества пакетов. Этот метод устойчив к переупорядочению пакетов и их потерям, которые вносят незначительный вклад в ошибку. Кроме того, это значительно сокращает число меток, собираемых системой управления (1 на блок). С другой стороны, метод даёт лишь один результат для всего блока и не позволяет определить минимальную, максимальную и медианную задержку [RFC6703]. Детализацию измерений можно повысить, сократив продолжительность блока (например, до нескольких секунд, но это предполагает сильно оптимизированную реализацию метода.

3.3.2. Методика с двумя маркерами

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

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

Средняя задержка рассчитывается для всех пакетов выборки на основе метода с одним маркером. В некоторых случаях измерения средней задержки недостаточно для характеристики выборки и нужна дополнительная статистика задержек, например, процентили, вариации и медиана. Традиционного диапазона (минимум-максимум) следует избегать по некоторым причинам, включая стабильность максимальной задержки из-за влияния пиков. В параграфе 6.5 RFC 5481 [RFC5481] отмечено, что процентили 99,9 для задержки и её вариаций более полезен для планирования производительности. Идея преодоления этого недостатка состоит в комбинации средней задержки для всего блока и метода двойной маркировки, где часть пакетов блока выбирается для расширенного расчёта задержек. В этом случае можно выполнить детальный анализ на основе пакетов с двойной маркировкой. Следует отметить, что имеются классические алгоритмы расчёта медианы и вариаций, но их рассмотрение выходит за рамки документа. Сравнение средней задержки для всего блока и пакетов с двойной маркировкой даёт полезную информацию, позволяющую понять, действительно ли измерения с двойной маркировкой отражают тенденции задержки.

3.4. Измерение вариаций задержки

Подобно измерению односторонней задержки (с одним или двумя маркерами), метод подходит для измерения вариаций межпакетны интервалов (inter-arrival jitter) на основе определения RFC 3393 [RFC3393]. Смену цвета при использовании одного маркера можно применять в качестве отметки времени для измерения вариаций задержки. При двойной маркировке такие отметки задают пакеты со вторым маркером. В примере на рисунке 2 маршрутизатор R1 сохраняет метку TS(A)R1 при отправке первого пакета блока, а R2 сохраняет метку TS(B)R2 при получении первого пакета блока. Вариации можно легко получить по результатам измерения односторонней задержки, оценивая изменения задержки для последовательных выборок.

Концепция средней задержки тоже применима к измерению вариаций путём оценки среднего изменения интервала между последовательными пакетами блока от маршрутизаторов R1 и R2.

4. Вопросы методологии

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

4.1. Синхронизация часов

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

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

При продолжительности интервала измерения L все сетевые устройства должны быит синхронизированы с общим эталоно с точностью ±L/2 (без учёта задержки в сети). Такая точность гарантирует, что все устройства будут согласованно сопоставлять цвет с блоком. Например, если цвет меняется каждую секунду (L = 1 сек.), часы должны быть синхронизированы от общего источника с точностью не хуже ±0,5 сек.

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

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

4.2. Сопоставление данных

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

  • Применение централизованной системы NMS для сопоставления данных.

  • Распределённое решение на основе нового протокола или расширения имеющихся протоколов (например, RFC 6374 [RFC6374], TWAMP [RFC5357] или OWAMP [RFC4656]) для передачи между узлами значений счётчиков и временных меток.

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

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

Описанный здесь метод AM делит пакеты измерительного потока на блоки и каждому блоку можно присвоить номер (Block Number или BN). Значения BN генерируются каждый раз, когда узел считывает данные (счётчик или временная метка), и связывается с каждым значением счётчика или временной метки, передаваемым другим узлам или NMS. Значение BN может рассчитываться из локального времени (в момент считывания) с интервалом маркировки в качестве модуля.

Когда узел или NMS видит, например, одинаковые BN для двух пакетов от восходящего или нисходящего узла, эти пакеты относятся к одному блоку маркеров от узла. Предполагается, что механизм BN используется с синхронизированными часами узлов, что требует использовать на узлах синхронизацию часов, например, по протоколу сетевого времени (Network Time Protocol или NTP) [RFC5905] или протоколу точного времени IEEE 1588 (Precision Time Protocol или PTP) [IEEE-1588]). Вопросы синхронизации рассмотрены в параграфе 4.1.

4.3. Переупорядочение пакетов

В результате использования ECMP переупорядочение пакетов часто происходит в сетях IP. Точность PM на основе маркеров, особенно при оценке потерь, может зависеть от переупорядочения пакетов. Рассмотрим пример (Рисунок 5).

Блок    :    1    |    2    |    3    |    4    |    5    |...
--------|---------|---------|---------|---------|---------|---
Узел R1 : AAAAAAA | BBBBBBB | AAAAAAA | BBBBBBB | AAAAAAA |...
Узел R2 : AAAAABB | AABBBBA | AAABAAA | BBBBBBA | ABAAABA |...

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


Поток пакетов для узла R1 упорядочен и их можно безопасно связать с интервальными блоками, но на узле R2 порядок уже нарушен (например, пакет B в блоке 3) и нет надёжного способа отнести этот пакет к блоку 2 или 4.

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

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

5. Приложения, реализация и развёртывание

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

  • Измерение производительности потока (IP Flow Performance Measurement или IPFPM) с использованием маркировки, описанной в [COLORING]. Например, в этом документе предложен в качестве маркера последний резервный бит поля Flag в заголовке IPv4, а для IPv6 можно применять заголовок расширения IPv6.

  • Пассивное измерение производительности OAM. В [RFC8296] два бита OAM из заголовка Bit Index Explicit Replication (BIER) являются резервом для пассивного измерения производительности с использованием маркеров. В [PM-MM-BIER] описаны измерения для групповых служб в домене BIER. Кроме того, метод AM можно использовать в домене с цепочками сервисных функций (Service Function Chaining или SFC). Применение маркировки для виртуализации в сети L3 (Network Virtualization over Layer 3 или NVO3) рассмотрено в [NVO3-ENCAPS].

  • Измерение производительности MPLS. В RFC 6374 [RFC6374] применяются пакеты измерения потерь (Loss Measurement или LM) в качестве точек раздела для учёта пакетов. К сожалению это вызывает проблемы, которые могут вести к существенным ошибкам учёта. В [MPLS-FLOW] рассмотрены жедаемые свойства определения потоков MPLS для более эффективного мониторинга по основному каналу для пользовательских пакетов данных. Для идентификации служат синонимы меток потоков (Synonymous Flow Label или SFL), предложенные в [SFL-FRAMEWORK], а в [SYN-FLOW-LABELS] описано измерение производительности RFC 6374 с применением SFL.

  • Активное измерение производительности. В [ALT-MM-AMP] описан способ расширения протокола активных измерений для реализации метода AM. В [ALT-MM-SLA] описано расширение для Cisco SLA Protocol Measurement-Type UDP-Measurement.

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

5.1. Отчёт об эксперименте

Описанный здесь метод, известный также как мониторинг производительности пакетной сети (Packet Network Performance Monitoring или PNPM), был придумен и разработан в Telecom Italia.

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

Метод применядся для эксперимента в сети Telecom Italia с групповыми каналами IPTV и иными потоками трафика с высокими требованиями QoS (например, трафик Mobile Backhauling, реализованный с MPLS VPN).

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

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

В описываемом тесте используется основанная на потоках стратегия, как описано в разделе 3. Стратегию на основе каналов можно применить на физических или логических каналах (например, Ethernet VLAN или MPLS PW).

Для реализации метода использовались доступные функции маршрутизаторов, поскольку эксперимент проводился сервис-провайдером Telecom Italia в своей сети. В текущих реализациях маршрутизаторов для маркировки доступны лишь поля и свойства QoS для гибкого управления маркировкой пакетов. Если сервис-провайдер использует лишь 3 старших бита поля DSCP (соответствуют IP Precedence) для классификации QoS и очередей, младшие биты поля DSCP (биты 0 и 1) могут служить для маркировки пакетов без влияния на политику QoS. Именно этот подход применялся в эксперименте. Бит 0 можно использовать для идентификации потоков, где выполняется мониторинг (установка бита означает отслеживание потока), а бит 1 — для окрашивания и создания блоков.

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

После окрашивания трафика с использованием поля DSCP все маршрутизаторы на пути могут выполнять учёт. Для этого могут служит списки доступа с проверкой значений DSCP, учитывающие пакеты отслеживаемых потоков. На всех маршрутизаторах можно применять один список доступа. В дополнение можно использовать мониторинг потоков, такой как предложен в IPFIX [RFC7011], для распознавания временных меток в первом/последнем потоке блока, чтобы использовать один из описанных в параграфе 3.3 вариантов измерений задержки.

В эксперименте Telecom Italia устанавливался таймер смены цвета на 5 минут и последовательность действий сценария также менялась каждые 5 минут. Это значение оказалось хорошим компромиссом между частотой и стабильностью измерений (т. е. возможностью сбора всех измерений, относящихся к одному и тому же блоку). В эксперименте значения счётчиков и иные данные собирались с помощью автоматического сценария, передающего данные в NMS. Система NMS выполняла расчёты для потери пакетов, сравнивая значения от маршрутизаторов на пути потока. Пятиминутные интервалы смены цвета обеспечивали надёжное считывание счётчиков и согласованность с окном отчётов NMS.

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

Эксперимент в Telecom Italia расширялся до 1000 отслеживаемых на одном маршрутизаторе потоков, а при реализации теста на выделенном оборудовании в условиях лаборатории число потоков было ещё больше.

5.1.1. «Прозрачность» метрики

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

В реализации Telecom Italia узлы-источники окрашивали пакеты по правилам, периодически изменяющимися на основе автоматического сценария, меняющего значение поля DSCP в пакетах. Узлы между источником и получателем (включая их) использовали списки доступа для учёта окрашенных пакетов, которые они получали и пересылали.

Кроме того, на узлах-получателях окрашенные пакеты перехватывались и правила восстанавливали для всех пакетов исходные значение полей DSCP. Это обеспечивало «прозрачность» показателя за пределами сегмента сети, где проводился эксперимент. Благодаря такому восстановлению элементы за пределами домена мониторинга AM (например, узлы Provider Edge в Mobile Backhauling VPN MPLS) ничего не знали о маркировке пакетов. Таким образом, восстановление делало чередующуюся маркировку совершенно не заметной за пределами домена мониторинга.

6. Гибридные измерения

Этот метод был специально разработан для пассивных измерений, но его можно применять и в активных измерениях. Для сквозных и промежуточных измерений (гибридных) конечные точки могут обмениваться синтезированными потоками трафика и применять для них чередующуюся маркировку. В промежуточных точках синтезированный трафик обрабатывается аналогично реальному и выполняются описанные здесь измерения. Таким образом, метод маркировки может упростить активные измерения, как описано в [ALT-MM-AMP].

7. Соответствие рекомендациям RFC 6390

В RFC 6390 [RFC6390] определена модель и процессы для разработки показателей производительности (Performance Metrics) протоколов выше и ниже уровня IP (таких, как приложения IP работающие с гарантированным и основанным на дейтаграммах транспортом).

Целью этого документа является предложение не нового показателя производительности, а нового метода измерения для нескольких показателей производительности, которые уже стандартизованы. Тем не менее, к документу следует применять рекомендации [RFC6390] для более полного и согласованного описания метода. Авторы использовали шаблон Performance Metric Definition, заданный в параграфе 5.4 [RFC6390] и зависимости, указанные в параграфе 5.5.

  • Имя и описание показателя. Уже отмечено, что этот документ не задаёт показателей производительности, а описывает новый метод для измерения потерь [RFC7680]. Та же концепция с незначительными изменениями может служить для измерения задержки [RFC7679] и её вариаций [RFC3393]. Документ прежде всего описывает применимость метода для измерения потерь.

  • Метод измерения или расчёта. В соответствии с предыдущими разделами документа число потерянных пакетов рассчитывается как разность значений счётчиков на узлах отправки и получения. Оба счётчика должны относиться к одному цвету (блоку). Расчёт выполняется для установившихся значений счётчиков, что является неотъемлемой чертой счётчиков маркировки, поскольку чередование цветов даёт установившееся (стабильное) значение счётчика для одного цвета за каждый интервал маркировки.

  • Единицы измерения. Метод рассчитывает и сообщает точное число пакетов, которые были переданы источником, но не дошли до получателя.

  • Точки измерения с возможной областью измерения. Измерения могут выполняться между соседними узлами или, на канале или пути с множественными пересылками (multi-hop) при прохождении трафика по этому пути. Для пути с множественной пересылкой измерения могут быть сквозными и поэтапными (hop-by-hop).

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

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

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

  • Применение. Метод можно использовать для измерения потери пакетов с высокой точностью на «живом» трафике. Утем комбинирования измерений на каналах со сквозными измерениями можно определить места возникновения потерь.

  • Модель отчётов. Значения счётчиков передаются централизованной системе управления, которая выполняет расчёты. Такие выборки должны указывать временной интервал, когда измерения проводились, чтобы система управления могла выполнить корректные сопоставления. Выборки следует передавать, когда значения счётчиков уже установились (стабилизировались) в измерительном интервале, в иных случаях значение выборки следует сохранять локально.

  • Зависимости. Значения счётчиков должны сопоставляться с интервалом времени, к которому они относятся. Поскольку измерения основаны на значениях DSCP, должны применяться неиспользуемые биты DSCP, чтобы не оказывать влияния на связанные с QoS настройки и поведение. Промежуточным узлам недопустимо менять значение поля DSCP, чтобы не препятствовать измерениям.

  • Организация результатов. Метод служит для выполнения одиночных измерений (singleton).

  • Параметры. В настоящее время основным параметром метода является интервал смены окрашивания пакетов, в соответствии с которым считываются значения счётчиков.

8. Взаимодействие с IANA

Документ не требует действий IANA.

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

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

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

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

  • Вред самим измерениям может быть нанесён маршрутизаторами, меняющими маркировку пакетов или злоумышленниками, внедряющими искусственный трафик. Можно применять методы аутентификации, такие как цифровые подписи, для защиты от атак с внедрением трафика. Поскольку на измерения могут влиять маршрутизаторы (или иные устройства) на пути пакетов IP, намеренно меняя биты маркировки, как отмечено выше, описанный в документе механизм следует применять лишь в контексте контролируемого домена, где применяется единое (локальное) администрирование для маршрутизаторов (и иных устройств), что позволяет предотвратить упомянутые атаки. Кроме того, злоумышленник не может получить сведений о производительности сети из одной точки мониторинга, он должен использовать синхронизированные точки измерений на пути, поскольку ему нужно выполнить такие же измерения и агрегирования, которые выполняет сервис-провайдер.

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

Другой потенциальной угрозой в контексте этого документа являются атаки с задержкой. Измерения задержки выполняются с использованием конкретных пакетов в каждом блоке, выделенных цветом. Поэтому злоумышленник в MITM-атаке (man-in-the-middle) может лишь искусственно задержать соответствующие пакеты, внося систематическую ошибку в измерение задержки. Как отмечено выше, описанный метод основан на базовом протоколе синхронизации часов. Таким образом, атакуя этот протокол, злоумышленник потенциально может нарушить целостность измерений. Подробное описание угроз для протоколов синхронизации и способов их смягчения дано в RFC 7384 [RFC7384].

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

10.1. Нормативные документы

[IEEE-1588] IEEE, «IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems», IEEE Std 1588-2008.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC3393] Demichelis, C. and P. Chimento, «IP Packet Delay Variation Metric for IP Performance Metrics (IPPM)», RFC 3393, DOI 10.17487/RFC3393, November 2002, <https://www.rfc-editor.org/info/rfc3393>.

[RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, «Network Time Protocol Version 4: Protocol and Algorithms Specification», RFC 5905, DOI 10.17487/RFC5905, June 2010, <https://www.rfc-editor.org/info/rfc5905>.

[RFC7679] Almes, G., Kalidindi, S., Zekauskas, M., and A. Morton, Ed., «A One-Way Delay Metric for IP Performance Metrics (IPPM)», STD 81, RFC 7679, DOI 10.17487/RFC7679, January 2016, <https://www.rfc-editor.org/info/rfc7679>.

[RFC7680] Almes, G., Kalidindi, S., Zekauskas, M., and A. Morton, Ed., «A One-Way Loss Metric for IP Performance Metrics (IPPM)», STD 82, RFC 7680, DOI 10.17487/RFC7680, January 2016, <https://www.rfc-editor.org/info/rfc7680>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

10.2. Дополнительная литература

[ALT-MM-AMP] Fioccola, G., Clemm, A., Bryant, S., Cociglio, M., Chandramouli, M., and A. Capello, «Alternate Marking Extension to Active Measurement Protocol», Work in Progress, draft-fioccola-ippm-alt-mark-active-01, March 2017.

[ALT-MM-SLA] Fioccola, G., Clemm, A., Cociglio, M., Chandramouli, M., and A. Capello, «Alternate Marking Extension to Cisco SLA Protocol RFC6812», Work in Progress, draft-fioccola-ippm-rfc6812-alt-mark-ext-01, March 2016.

[COLORING] Chen, M., Zheng, L., Mirsky, G., Fioccola, G., and T. Mizrahi, «IP Flow Performance Measurement Framework», Work in Progress, draft-chen-ippm-coloring-based-ipfpm-framework-06, March 2016.

[IP-FLOW-REPORT] Chen, M., Zheng, L., and G. Mirsky, «IP Flow Performance Measurement Report», Work in Progress, draft-chen-ippm-ipfpm-report-01, April 2016.

[IP-MULTICAST-PM] Cociglio, M., Capello, A., Bonda, A., and L. Castaldelli, «A method for IP multicast performance monitoring», Work in Progress, draft-cociglio-mboned-multicast-pm-01, October 2010.

[MPLS-FLOW] Bryant, S., Pignataro, C., Chen, M., Li, Z., and G. Mirsky, «MPLS Flow Identification Considerations», Work in Progress, draft-ietf-mpls-flow-ident-06, December 2017.

[MULTIPOINT-ALT-MM] Fioccola, G., Cociglio, M., Sapio, A., and R. Sisto, «Multipoint Alternate Marking method for passive and hybrid performance monitoring», Work in Progress3, draft-fioccola-ippm-multipoint-alt-mark-01, October 2017.

[NVO3-ENCAPS] Boutros, S., Ganga, I., Garg, P., Manur, R., Mizrahi, T., Mozes, D., Nordmark, E., Smith, M., Aldrin, S., and I. Bagdonas, «NVO3 Encapsulation Considerations», Work in Progress, draft-ietf-nvo3-encap-01, October 2017.

[OPSAWG-P3M] Capello, A., Cociglio, M., Castaldelli, L., and A. Bonda, «A packet based method for passive performance monitoring», Work in Progress, draft-tempia-opsawg-p3m-04, February 2014.

[PM-MM-BIER] Mirsky, G., Zheng, L., Chen, M., and G. Fioccola, «Performance Measurement (PM) with Marking Method in Bit Index Explicit Replication (BIER) Layer», Work in Progress, draft-ietf-bier-pmmm-oam-03, October 2017.

[RFC4656] Shalunov, S., Teitelbaum, B., Karp, A., Boote, J., and M. Zekauskas, «A One-way Active Measurement Protocol (OWAMP)», RFC 4656, DOI 10.17487/RFC4656, September 2006, <https://www.rfc-editor.org/info/rfc4656>.

[RFC5357] Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. Babiarz, «A Two-Way Active Measurement Protocol (TWAMP)», RFC 5357, DOI 10.17487/RFC5357, October 2008, <https://www.rfc-editor.org/info/rfc5357>.

[RFC5481] Morton, A. and B. Claise, «Packet Delay Variation Applicability Statement», RFC 5481, DOI 10.17487/RFC5481, March 2009, <https://www.rfc-editor.org/info/rfc5481>.

[RFC6374] Frost, D. and S. Bryant, «Packet Loss and Delay Measurement for MPLS Networks», RFC 6374, DOI 10.17487/RFC6374, September 2011, <https://www.rfc-editor.org/info/rfc6374>.

[RFC6390] Clark, A. and B. Claise, «Guidelines for Considering New Performance Metric Development», BCP 170, RFC 6390, DOI 10.17487/RFC6390, October 2011, <https://www.rfc-editor.org/info/rfc6390>.

[RFC6703] Morton, A., Ramachandran, G., and G. Maguluri, «Reporting IP Network Performance Metrics: Different Points of View», RFC 6703, DOI 10.17487/RFC6703, August 2012, <https://www.rfc-editor.org/info/rfc6703>.

[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, DOI 10.17487/RFC7011, September 2013, <https://www.rfc-editor.org/info/rfc7011>.

[RFC7276] Mizrahi, T., Sprecher, N., Bellagamba, E., and Y. Weingarten, «An Overview of Operations, Administration, and Maintenance (OAM) Tools», RFC 7276, DOI 10.17487/RFC7276, June 2014, <https://www.rfc-editor.org/info/rfc7276>.

[RFC7384] Mizrahi, T., «Security Requirements of Time Protocols in Packet Switched Networks», RFC 7384, DOI 10.17487/RFC7384, October 2014, <https://www.rfc-editor.org/info/rfc7384>.

[RFC7799] Morton, A., «Active and Passive Metrics and Methods (with Hybrid Types In-Between)», RFC 7799, DOI 10.17487/RFC7799, May 2016, <https://www.rfc-editor.org/info/rfc7799>.

[RFC8296] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., Tantsura, J., Aldrin, S., and I. Meilik, «Encapsulation for Bit Index Explicit Replication (BIER) in MPLS and Non-MPLS Networks», RFC 8296, DOI 10.17487/RFC8296, January 2018, <https://www.rfc-editor.org/info/rfc8296>.

[SFL-FRAMEWORK] Bryant, S., Chen, M., Li, Z., Swallow, G., Sivabalan, S., and G. Mirsky, «Synonymous Flow Label Framework», Work in Progress4, draft-ietf-mpls-sfl-framework-00, August 2017.

[SYN-FLOW-LABELS] Bryant, S., Chen, M., Li, Z., Swallow, G., Sivabalan, S., Mirsky, G., and G. Fioccola, «RFC6374 Synonymous Flow Labels», Work in Progress, draft-ietf-mpls-rfc6374-sfl-01, December 2017.

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

Предыдущими спецификациями IETF с описанием этого метода были [IP-MULTICAST-PM] и [OPSAWG-P3M].

Авторы благодарны Alberto Tempia Bonda, Domenico Laforgia, Daniele Accetta, Mario Bianchetti за их вклад при разработке и реализации метода.

Спасибо Spencer Dawkins, Carlos Pignataro, Brian Haberman, Eric Vyncke за помощь, подробные и точные рецензии.

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

Giuseppe Fioccola (editor)
Telecom Italia
Via Reiss Romoli, 274
Torino 10148
Italy
Email: giuseppe.fioccola@telecomitalia.it
 
Alessandro Capello
Telecom Italia
Via Reiss Romoli, 274
Torino 10148
Italy
Email: alessandro.capello@telecomitalia.it
 
Mauro Cociglio
Telecom Italia
Via Reiss Romoli, 274
Torino 10148
Italy
Email: mauro.cociglio@telecomitalia.it
 
Luca Castaldelli
Telecom Italia
Via Reiss Romoli, 274
Torino 10148
Italy
Email: luca.castaldelli@telecomitalia.it
 
Mach(Guoyi) Chen
Huawei Technologies
Email: mach.chen@huawei.com
 
Lianshu Zheng
Huawei Technologies
Email: vero.zheng@huawei.com
 
Greg Mirsky
ZTE
United States of America
Email: gregimirsky@gmail.com
 
Tal Mizrahi
Marvell
6 Hamada St.
Yokneam
Israel
Email: talmi@marvell.com

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

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

nmalykh@protokols.ru

1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.

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

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

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

RFC 8259 The JavaScript Object Notation (JSON) Data Interchange Format

Internet Engineering Task Force (IETF)                      T. Bray, Ed.
Request for Comments: 8259                                    Textuality
Obsoletes: 7159                                            December 2017
Category: Standards Track
ISSN: 2070-1721

The JavaScript Object Notation (JSON) Data Interchange Format

Формат обмена данными JSON

PDF

Аннотация

JSON1 представляет собой облегченный текстовый формат обмена данными, независимый от языка и разработанный на основе стандарта языков программирования сценариев ECMAScript. JSON определяет небольшой набор правил форматирования для переносимого представления структурированных данных.

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

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

Документ относится к категории Internet Standards Track.

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

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

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

Авторские права (Copyright (c) 2017) принадлежат 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).

Документ может содержать материалы из IETF Document или IETF Contribution, опубликованных или публично доступных до 10 ноября 2008 года. Лица, контролирующие авторские права на некоторые из таких документов, могли не предоставить IETF Trust права разрешать внесение изменений в такие документы за рамками процессов IETF Standards. Без получения соответствующего разрешения от лиц, контролирующих авторские права этот документ не может быть изменен вне рамок процесса IETF Standards, не могут также создаваться производные документы за рамками процесса IETF Standards за исключением форматирования документа для публикации или перевода с английского языка на другие языки.

1. Введение

JSON представляет собой текстовый формат для публикации структурированных данных. Формат основан на литералах объектов JavaScript в соответствии с третьей редакцией стандарта ECMAScript [ECMA-262].

JSON может представлять 4 типа примитивов (строки — string, числа — number, логические элементы — boolean и пустые элементы — null), а также 2 структурированных типа (объекты — object и массивы — array).

Строка состоит из множества (возможно, пустого — 0) символов Unicode [UNICODE]. Отметим, что имеется в виду последняя, а не какая-либо из предшествующих версий Unicode. Не предполагается влияние возможных изменений спецификации Unicode на синтаксис JSON.

Объект представляет собой неупорядоченный набор (возможно, пустой) пар «имя-значение», где имя (name) является строкой, а значение (value) может быть строкой, числом, логическим или пустым элементом, объектом или массивом.

Массив представляет собой неупорядоченный (возможно, пустой) набор значений.

Термины «объект» и «массив» следуют соглашениям JavaScript.

Целью разработки JSON была организация минимального и переносимого текстового подмножества JavaScript.

1.1. Используемые соглашения

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

Грамматические правила в этом документе интерпретируются в соответствии с [RFC5234].

1.2. Спецификация JSON

Этот документ заменяет собой [RFC7159], который был заменой [RFC4627], содержавшего исходное описание JSON и регистрацию типа носителя application/json.

JSON описан также в [ECMA-404].

Ссылка на ECMA-404 в предыдущем предложении является нормативной, а не просто указанием разработчикам на ознакомление с документом для понимания данной спецификации. Эта ссылка подчеркивает отсутствие несоответствий в определении термина «текст JSON» в спецификациях. Однако следует отметить, что ECMA-404 допускает несколько методов, применения которых данная спецификация рекомендует избегать в интересах максимальной совместимости.

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

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

Если какой-либо из документов будет впоследствии изменен, ECMA и IETF будут совместно работать над обеспечением согласованности обоих документов.

1.3. Введение для этого выпуска

За годы с момента публикации RFC 4627 формат JSON получил очень широкое распространение. Опыт показал, что некоторые формы, разрешенные спецификацией, могут вызывать проблемы при взаимодействии.

Кроме того, было обнаружено некоторое число ошибок в RFC 4627 (см. [Err607] и 3607 [Err3607]), а затем и в RFC 7159 (см. [Err3915], [Err4264], [Err4336] и [Err4388]).

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

2. Грамматика JSON

Текст JSON представляет последовательность маркеров (token). Набор маркеров включает 6 структурных символов, строки, числа и 3 имени литералов.

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

      JSON-text = ws value ws

Ниже перечислены 6 структурных символов

      begin-array     = ws %x5B ws  ; [ левая квадратная скобка, начало массива
      begin-object    = ws %x7B ws  ; { левая фигурная скобка, начало объекта
      end-array       = ws %x5D ws  ; ] правая квадратная скобка, конец массива
      end-object      = ws %x7D ws  ; } правая фигурная скобка, конец объекта
      name-separator  = ws %x3A ws  ; : двоеточие
      value-separator = ws %x2C ws  ; , запятая

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

      ws = *(
              %x20 /              ; пробел
              %x09 /              ; горизонтальная табуляция
              %x0A /              ; перевод строки или новая строка
              %x0D )              ; возврат каретки

3. Значения

Значение JSON должно быть объектом, массивом, числом, строкой или одним из трех приведенных ниже литералов.

      false
      null
      true

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

      value = false / null / true / object / array / number / string
      false = %x66.61.6c.73.65   ; ложь
      null  = %x6e.75.6c.6c      ; пусто
      true  = %x74.72.75.65      ; истина

4. Объекты

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

      object = begin-object [ member *( value-separator member ) ]
               end-object
      member = string name-separator value

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

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

5. Массивы

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

   array = begin-array [ value *( value-separator value ) ] end-array

Значения массива не обязаны иметь одинаковые типы.

6. Числа

Представление чисел похоже на используемое в большинстве языков программирования. Числа указываются по основанию 10 с использованием десятичных цифр. Число включает целую часть, которой может предшествовать знак «минус» (-), а далее может следовать дробная и/или экспоненциальная часть. Нули перед целой частью не допускаются.

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

Экспоненциальная часть начинается с буквы «E» или «e», за которой может следовать знак «плюс» (+) или «минус» (-), а далее — одна или множество цифр.

Численные значения, которые не могут быть представлены в показанной ниже грамматике (такие, как бесконечность или NaN — не число), не допускаются.

      number = [ minus ] int [ frac ] [ exp ]
      decimal-point = %x2E       ; .
      digit1-9 = %x31-39         ; 1-9
      e = %x65 / %x45            ; e E
      exp = e [ minus / plus ] 1*DIGIT
      frac = decimal-point 1*DIGIT
      int = zero / ( digit1-9 *DIGIT )
      minus = %x2D               ; -
      plus = %x2B                ; +
      zero = %x30                ; 0

Эта спецификация позволяет реализациям вносить ограничения для диапазона и точности чисел. Поскольку программы, реализующие числа двойной точности IEEE 754 binary64 [IEEE754], доступны и применяются широко, для эффективного взаимодействия реализациям не следует ожидать большего диапазона или точности, чем они обеспечивают, в смысле точности аппроксимации чисел JSON. Числа JSON, такие как 1E400 или 3.141592653589793238462643383279, могут приводить к несовместимости, поскольку они предполагают, что создавшее их приложение ждет от принимающей программы слишком широкие возможности в плане величины и точности чисел.

Отметим, при использовании программ целые числа из диапазона [-(253)+1, (253)-1] не вызовут проблем взаимодействия в том смысле, что реализации будут воспринимать эти значения.

7. Строки

Представление строк похоже на соглашения, используемые в семействе языков программирования C. Строки начинаются и заканчиваются символами кавычек. Все символы Unicode должны размещаться внутри кавычек, за исключением символов, которые должны использовать escape-кодирование — кавычки, обратная дробная черта и символы управления от U+0000 до U+001F.

Для всех символов может применяться escape-кодирование. Если символ относится к Basic Multilingual Plane (U+0000 — U+FFFF), он может быть представлен 6-символьной последовательностью из обратной дробной черты, буквы u в нижнем регистре и четырех шестнадцатеричных цифр, указывающих код символа. Шестнадцатеричные цифра от A до F могут указываться в любом регистре. Например, строка, содержащая лишь символ обратной дробной черты, может быть представлена в форме «\u005C».

Для некоторых популярных символов имеется двухсимвольный вариант escape-кодирования. Например, строку из одиночного символа обратной дробной черты можно представить в виде «\\».

Escape-кодирование расширенных символов, не входящих в Basic Multilingual Plane, использует 12-символьное представление, кодирующее суррогатную пару UTF-16. Например, строка, содержащая лишь символ G clef (U+1D11E) может быть представлена в виде «\uD834\uDD1E».

      string = quotation-mark *char quotation-mark
      char = unescaped /
          escape (
              %x22 /          ; "    кавычка  			U+0022
              %x5C /          ; \    обратная дробная черта 	U+005C
              %x2F /          ; /    дробная черта         		U+002F
              %x62 /          ; b    «забой»       			U+0008
              %x66 /          ; f    перевод страницы       	U+000C
              %x6E /          ; n    перевод строки       		U+000A
              %x72 /          ; r    возврат каретки 		U+000D
              %x74 /          ; t    табуляция             		U+0009
              %x75 4HEXDIG )  ; uXXXX                		U+XXXX
      escape = %x5C              ; \
      quotation-mark = %x22      ; "
      unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

8. Строки и символы

8.1. Кодировка символов

Тексты JSON, передаваемые между системами, не являющимися частью замкнутой экосистемы, должны кодироваться с использованием UTF-8 [RFC3629].

Прежние спецификации JSON не требовали использования кодировки UTF-8 при передаче текста JSON. Однако в большинстве реализаций программ на основе JSON используется кодировка UTF-8, поскольку лишь она обеспечивает совместимость.

Реализациям недопустимо добавлять метку порядка байтов (U+FEFF) в начале передаваемого через сеть текста JSON. Для обеспечения совместимости реализации, выполняющие анализ текста JSON, могут игнорировать метку порядка байтов, не считая ее ошибкой.

8.2. Символы Unicode

Когда все строки в тексте JSON состоят лишь из символов Unicode [UNICODE] (хотя и в escape-форме), этот текст JSON будет совместимым в том смысле, что все реализации программ, которые будут его анализировать, получат совпадающие строки имен и значений в объектах и массивах.

Однако ABNF в этой спецификации разрешает имена элементов и значения строк с битовыми последовательностями, которые не могут быть представлены символами Unicode, например, «\uDEAD» (один непарный суррогат UTF-16). Такие экземпляры могут встречаться, например, при отсечке библиотекой строк UTF-16 без проверки разрыва суррогатных пар. Поведение программы, получившей текст JSON с такими значениями, не предсказуемо. Например, реализации могут возвращать разные значения для размера строк или даже сталкиваться с критическими ошибками при выполнении.

8.3. Сравнение строк

Программным реализация обычно требуется проверка совпадения имен. Реализации, которые преобразуют текстовое представление в последовательность кодовых блоков Unicode, а затем выполняют численное поблочное сравнение, будут совместимы в том смысле, что результаты сравнения строк будут совпадать. Если же реализация будет сравнивать строки с escape-символами без преобразования, она ошибочно сочтет строки «a\\b» и «a\u005Cb» разными.

9. Анализаторы

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

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

10. Генераторы

Генераторы JSON создают тексты JSON. Текст должен строго соблюдать грамматику JSON.

11. Взаимодействие с IANA

Для текста JSON применяется тип носителя application/json.

   Type name:  application
   Subtype name:  json
   Required parameters:  n/a
   Optional parameters:  n/a
   Encoding considerations:  binary
   Security considerations:  See RFC 8259, Section 12
   Interoperability considerations:  Described in RFC 8259
   Published specification:  RFC 8259
   Applications that use this media type:
      JSON has been used to exchange data between applications written
      in all of these programming languages: ActionScript, C, C#,
      Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript,
      Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, and
      Scheme.
   Additional information:
      Magic number(s): n/a
      File extension(s): .json
      Macintosh file type code(s): TEXT
   Person & email address to contact for further information:
      IESG
      <iesg@ietf.org> 
   Intended usage:  COMMON
   Restrictions on usage:  none
   Author:
      Douglas Crockford
      <douglas@crockford.com> 
   Change controller:
      IESG
      <iesg@ietf.org> 
   Note:  No "charset" parameter is defined for this registration.
      Adding one really has no effect on compliant recipients.4

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

Обычно с языками сценариев связаны те или иные вопросы безопасности. JSON является подмножеством JavaScript но не включает операций присваивания и вызовов.

Поскольку синтаксис JSON заимствован из JavaScript, можно использовать функцию eval() этого языка для анализа большинства текстов JSON (но не всех, поскольку такие символы как U+2028 LINE SEPARATOR и U+2029 PARAGRAPH SEPARATOR разрешены в JSON, но не приемлемы в JavaScript). В общем случае использование этой функции считается недопустимым риском, поскольку тексты могут содержать исполняемый код наряду с объявлениями данных. То же самое относится к использованию похожих на eval() функций в любом языке программирования, для которого тексты JSON соответствуют синтаксису языка.

13. Примеры

Ниже представлен объект JSON

      {
        "Image": {
            "Width":  800,
            "Height": 600,
            "Title":  "View from 15th Floor",
            "Thumbnail": {
                "Url":    "http://www.example.com/image/481989943",
                "Height": 125,
                "Width":  100
            },
            "Animated" : false,
            "IDs": [116, 943, 234, 38793]
          }
      }

Здесь элемент Image является объектом, чей элемент Thumbnail является объектом, а элемент IDs — массивом чисел.

Ниже представлен массив JSON, содержащий два объекта.

      [
        {
           "precision": "zip",
           "Latitude":  37.7668,
           "Longitude": -122.3959,
           "Address":   "",
           "City":      "SAN FRANCISCO",
           "State":     "CA",
           "Zip":       "94107",
           "Country":   "US"
        },
        {
           "precision": "zip",
           "Latitude":  37.371991,
           "Longitude": -122.026020,
           "Address":   "",
           "City":      "SUNNYVALE",
           "State":     "CA",
           "Zip":       "94085",
           "Country":   "US"
        }
      ]

Ниже представлены короткие тексты JSON, содержащие только значение.

   "Hello world!"
   42
   true

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

14.1. Нормативные документы

[ECMA-404] Ecma International, «The JSON Data Interchange Format», Standard ECMA-404, <http://www.ecma-international.org/publications/standards/Ecma-404.htm>.

[IEEE754] IEEE, «IEEE Standard for Floating-Point Arithmetic», IEEE 754.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC3629] Yergeau, F., «UTF-8, a transformation format of ISO 10646», STD 63, RFC 3629, DOI 10.17487/RFC3629, November 2003, <https://www.rfc-editor.org/info/rfc3629>.

[RFC5234] Crocker, D., Ed. and P. Overell, «Augmented BNF for Syntax Specifications: ABNF», STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[UNICODE] The Unicode Consortium, «The Unicode Standard», <http://www.unicode.org/versions/latest/>.

14.2. Дополнительная литература

[ECMA-262] Ecma International, «ECMAScript Language Specification», Standard ECMA-262, Third Edition, December 1999, <http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf>.

[Err3607] RFC Errata, Erratum ID 3607, RFC 4627, <https://www.rfc-editor.org/errata/eid3607>.

[Err3915] RFC Errata, Erratum ID 3915, RFC 7159, <https://www.rfc-editor.org/errata/eid3915>.

[Err4264] RFC Errata, Erratum ID 4264, RFC 7159, <https://www.rfc-editor.org/errata/eid4264>.

[Err4336] RFC Errata, Erratum ID 4336, RFC 7159, <https://www.rfc-editor.org/errata/eid4336>.

[Err4388] RFC Errata, Erratum ID 4388, RFC 7159, <https://www.rfc-editor.org/errata/eid4388>.

[Err607] RFC Errata, Erratum ID 607, RFC 4627, <https://www.rfc-editor.org/errata/eid607>.

[RFC4627] Crockford, D., «The application/json Media Type for JavaScript Object Notation (JSON)», RFC 4627, DOI 10.17487/RFC4627, July 2006, <https://www.rfc-editor.org/info/rfc4627>.

[RFC7159] Bray, T., Ed., «The JavaScript Object Notation (JSON) Data Interchange Format», RFC 7159, DOI 10.17487/RFC7159, March 2014, <https://www.rfc-editor.org/info/rfc7159>.

Приложение A. Отличия от RFC 7159

В этом приложении указаны различия между этим документом и текстом RFC 7159.

  • Параграф 1.2 обновлен с учетом удаления спецификации JSON из ECMA-262, добавлена нормативная ссылка на ECMA-404 и разъяснено понятие «нормативная».

  • Параграф 1.3 был обновлен с учетом ошибок в RFC 7159 (но не в RFC 4627).

  • Параграф 8.1 был изменен с учетом требования кодировки UTF-8 при передаче через сеть.

  • Раздел 12 был обновлен с уточнением описания рисков безопасности, связанных с применением функции ECMAScript «eval()».

  • Параграф 14.1 был обновлен с включением нормативной ссылки на ECMA-404.

  • Параграф 14.2 был обновлен с удалением ECMA-404, обновлением версии ECMA-262 и списка ошибок.

Участники работы

Автором RFC 4627 был Douglas Crockford. Данный документ вносит сравнительно небольшое число изменений, поэтому основная часть текста является результатом его работы.

Адрес автора

Tim Bray (редактор)

Textuality

Email: tbray@textuality.com


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

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

nmalykh@protokols.ru

1JavaScript Object Notation — обозначения объектов JavaScript.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

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

Рубрика: RFC | Комментарии к записи RFC 8259 The JavaScript Object Notation (JSON) Data Interchange Format отключены

RFC 8294 Common YANG Data Types for the Routing Area

Internet Engineering Task Force (IETF)                            X. Liu
Request for Comments: 8294                                         Jabil
Category: Standards Track                                          Y. Qu
ISSN: 2070-1721                             Futurewei Technologies, Inc.
                                                               A. Lindem
                                                           Cisco Systems
                                                                C. Hopps
                                                        Deutsche Telekom
                                                               L. Berger
                                                 LabN Consulting, L.L.C.
                                                           December 2017

Common YANG Data Types for the Routing Area

Базовые типы данных YANG для маршрутизации

PDF

Аннотация

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

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

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.

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

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

Copyright (c) 2017. Авторские права принадлежат 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. Введение

Язык моделирования данных YANG [RFC6020] [RFC7950] применяется в моделях данных конфигурации, состояния, вызовов удалённых процедур (Remote Procedure Call или RPC) и уведомлений для протоколов управления сетями. Язык YANG поддерживает небольшой набор встроенных типов данных и обеспечивает механизмы добавления производных типов на основе встроенных.

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

1.1. Терминология

Терминология для описания моделей данных YANG представлена в [RFC7950].

2. Обзор

Этот документ определяет два модуля YANG ietf-routing-types и iana-routing-types с типами данных общего назначения для маршрутизации. Импортируются лишь модули ietf-yang-types и ietf-inet-types (см. раздел 3) из [RFC6991]. Модуль ietf-routing-types содержит базовые типы данных маршрутизации, отличные от соответствующих напрямую сопоставлениям IANA и перечисленные ниже.

router-id

Идентификаторы маршрутизаторов обычно применяются для указания узлов в протоколах маршрутизации и иных протоколах плоскости управления. Примеры использования router-id можно найти в [OSPF-YANG].

route-target

Цели маршрутов (Route Target или RT) обычно служат для управления распространением данных виртуальной маршрутизации и пересылки (Virtual Routing and Forwarding или VRF) [RFC4364]) для поддержки BGP/MPLS IP VPN и BGP/MPLS Ethernet VPN [RFC7432]. Примеры использования можно найти в [L2VPN-YANG].

ipv6-route-target

IPv6 RT похожи на RT, но являются IPv6 Address Specific BGP Extended Communite, как описано в [RFC5701]. IPv6 RT имеет размер 20 октетов и включает адрес IPv6 в качестве глобального администратора.

route-target-type

Задаёт правила импорта и экспорта RT, как описано в параграфе 4.3.1 [RFC4364].

route-distinguisher

Различители маршрутов (Route Distinguisher или RD) обычно служат для указания отдельных маршрутов в поддержку VPN. Например, как описано в [RFC4364], RD применяются для идентификации независимых VPN и VRF и, в более общем случае, для идентификации разных маршрутов к одному префиксу.

route-origin

Источник маршрута (Route Origin) обычно служит для указания источника (Site of Origin) сведений VRF (см. [RFC4364]) в поддержку BGP/MPLS IP VPN и BGP/MPLS Ethernet VPN [RFC7432].

ipv6-route-origin

IPv6 Route Origin также служит для указания источника данных VRF (см. [RFC4364]) в поддержку VPN. IPv6 Route Origin — это IPv6 Address Specific BGP Extended Community, как описано в [RFC5701]. IPv6 Route Origin имеет размер 20 октетов и включает адрес IPv6 в качестве глобального администратора.

ipv4-multicast-group-address

Задаёт представление группового адреса IPv4 из диапазона 224.0.0.0 — 239.255.255.255. Пример использования имеется в [PIM-YANG].

ipv6-multicast-group-address

Задаёт представление группового адреса IPv6 из диапазона ff00::/8. Пример использования имеется в [PIM-YANG].

ip-multicast-group-address

Представляет групповой адрес IP в текстовом формате соответствующей версии IP. Пример использования имеется в [PIM-YANG].

ipv4-multicast-source-address

Представляет адрес источника IPv4 для использования в протоколах групповой передачи. Адрес можно указать шаблоном *. Пример использования имеется в [PIM-YANG].

ipv6-multicast-source-address

Представляет адрес источника IPv6 для использования в протоколах групповой передачи. Адрес можно указать шаблоном *. Пример использования имеется в [PIM-YANG].

bandwidth-ieee-float32

Представляет пропускную способность в 32-битовом формате с плавающей точкой IEEE 754 [IEEE754]. Обычно применяется It is commonly used in Traffic Engineering control-plane protocols. Пример использования имеется в [OSPF-YANG].

link-access-type

Указывает тип канала IGP.

timer-multiplier

Применяется с типом timer-value обычно для указания числа интервалов timer-value, которые могут пройти до того, как должно произойти конкретное событие. Примеры включают прибытие пакетов обнаружения двухсторонней пересылки (Bidirectional Forwarding Detection или BFD) (параграф 6.8.4 в [RFC5880]) или hello_interval [RFC3209].

timer-value-seconds16

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

timer-value-seconds32

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

timer-value-milliseconds

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

percentage

Тип для указания процентных значений от 0 до 100%. Пример можно найти в [BGP-Model].

timeticks64

Этот тип основан на типе timeticks, заданном в [RFC6991], но использует 64 бита и служит для представления времени в сотых долях секунды между двумя эпохами.Пример можно найти в [BGP-Model].

uint24

24-битовое целое число без знака. Пример можно найти в [OSPF-YANG].

generalized-label

Этот тип представляет обобщённую метку для GMPLS (Generalized Multiprotocol Label Switching) [RFC3471]. Метка не задаёт тип, он определяется контекстом. Пример можно найти в [TE-YANG].

mpls-label-special-purpose

Этот тип представляет значения специальных меток MPLS [RFC7274].

mpls-label-general-use

20-битовая метка в стеке MPLS, как указано в [RFC3032]. Метка не включает кода Traffic Class и TTL (Time to Live). Диапазон меток этого типа предназначен для общего пользования и не включает специальных меток.

mpls-label

20-битовая метка в стеке MPLS, как указано в [RFC3032]. Метка не включает кода Traffic Class и TTL (Time to Live). Диапазон включает метки общего назначения и специальные метки. Пример можно найти в [MPLS-Base-YANG].

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

mpls-label-stack

Набор узлов схемы, представляющих стек меток MPLS [RFC3032].

vpn-route-targets

Набор узлов схемы, представляющих правила импорта-экспорта RT, применяемые в VPN с BGP [RFC4364] [RFC4664]. Пример можно найти в [L2VPN-YANG].

Модуль iana-routing-types содержит общие типы маршрутизации, соответствующие отображениям IANA.

address-family

Задаёт значения для использования в идентификаторах семейств адресов на основе реестра IANA Address Family Numbers [IANA-ADDRESS-FAMILY-REGISTRY]. Пример можно найти в [BGP-Model].

subsequent-address-family

Значения для использования в идентификаторах следующего семейства адресов (Subsequent Address Family Identifier или SAFI) на основе реестра IANA Subsequent Address Family Identifiers (SAFI) Parameters [IANA-SAFI-REGISTRY].

3. Модуль ietf-routing-types

   <CODE BEGINS> file "ietf-routing-types@2017-12-04.yang"

   module ietf-routing-types {
     namespace "urn:ietf:params:xml:ns:yang:ietf-routing-types";
     prefix rt-types;

     import ietf-yang-types {
       prefix yang;
     }
     import ietf-inet-types {
       prefix inet;
     }

     organization
       "IETF RTGWG - Routing Area Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/rtgwg/> 
        WG List:  <mailto:rtgwg@ietf.org> 

        Editors:  Xufeng Liu
                  <mailto:Xufeng_Liu@jabail.com> 
                  Yingzhen Qu
                  <mailto:yingzhen.qu@huawei.com> 
                  Acee Lindem
                  <mailto:acee@cisco.com> 
                  Christian Hopps
                  <mailto:chopps@chopps.org> 
                  Lou Berger
                  <mailto:lberger@labn.com>"; 

     description
       "Этот модуль содержит набор типов данных YANG, считающихся
        полезными для протоколов маршрутизации.

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

        Распространение и применение модуля в исходной или двоичной 
        форме с изменениями или без таковых разрешено в соответствии с
        лицензией Simplified BSD License, изложенной в параграфе 4.c
        IETF Trust's Legal Provisions Relating to IETF Documents
        (https://trustee.ietf.org/license-info). 

        Эта версия модуля YANG является частью RFC 8294, где правовые
        аспекты приведены более полно.";

      revision 2017-12-04 {
        description "Исходный выпуск.";
        reference
          "RFC 8294: Common YANG Data Types for the Routing Area.
           Section 3.";
     }

     /*** Идентификаторы для MPLS и GMPLS ***/

     identity mpls-label-special-purpose-value {
       description
         "Базовый идентификатор для вывода идентификаторов, описывающих
          метки MPLS специального назначения.";
       reference
         "RFC 7274: Allocating and Retiring Special-Purpose MPLS
          Labels.";
     }
     identity ipv4-explicit-null-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку IPv4 Explicit NULL.";
       reference
         "RFC 3032: MPLS Label Stack Encoding.  Параграф 2.1.";
     }

     identity router-alert-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку Router Alert.";
       reference
         "RFC 3032: MPLS Label Stack Encoding. Параграф 2.1.";
     }

     identity ipv6-explicit-null-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку IPv6 Explicit NULL.";
       reference
         "RFC 3032: MPLS Label Stack Encoding. Параграф 2.1.";
     }

     identity implicit-null-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку Implicit NULL.";
       reference
         "RFC 3032: MPLS Label Stack Encoding. Параграф 2.1.";
     }

     identity entropy-label-indicator {
       base mpls-label-special-purpose-value;
       description
         "Представляет Entropy Label Indicator.";
       reference
         "RFC 6790: The Use of Entropy Labels in MPLS Forwarding.
          Раздел 3 и параграф 10.1.";
     }

     identity gal-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку Generic Associated Channel (G-ACh) (GAL).";
       reference
         "RFC 5586: MPLS Generic Associated Channel. Разделы 4 и 10.";
     }

     identity oam-alert-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку OAM Alert.";
       reference
         "RFC 3429: Assignment of the 'OAM Alert Label' for
          Multiprotocol Label Switching Architecture (MPLS)
          Operation and Maintenance (OAM) Functions. Разделы 3 и 6.";
     }

     identity extension-label {
       base mpls-label-special-purpose-value;
       description
         "Представляет метку Extension.";
       reference
         "RFC 7274: Allocating and Retiring Special-Purpose MPLS
          Labels. Параграф 3.1 и раздел 5.";
     }

     /*** Типы, связанные с маршрутизацией ***/

     typedef router-id {
       type yang:dotted-quad;
       description
         "32-битовое число в формате 4 значений через точку, назначаемое
          каждому маршрутизатору. Однозначно указывает маршрутизатор в 
          автономной системе (AS).";
     }

     /*** Типы, связанные с VPN ***/

     typedef route-target {
       type string {
         pattern
           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
         +     '42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
         +     '42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
         +     '655[0-2][0-9]|'
         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|'
         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|'
         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(6(:[a-fA-F0-9]{2}){6})|'
         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
         +     '[0-9a-fA-F]{1,12})';
       }

       description
         "RT - это 8-октетное значение расширенной группы BGP, исходно
          указывающее набор сайтов в BGP VPN (RFC 4364). Однако оно
          играет более общую роль в фильтрации маршрутов BGP. RT состоит
          из 2 или 3 полей: 2-октетное поле Type, поле администратора и
          необязательное поле назначенного номера.

          В соответствии с форматом данных для типов 0, 1, 2, 6, заданных
          в RFC 4360, RFC 5668, RFC 7432, шаблон кодирования имеет вид:
          0:2-octet-asn:4-octet-number
          1:4-octet-ipv4addr:2-octet-number
          2:4-octet-asn:2-octet-number
          6:6-octet-mac-address

          Для будущих типов RT дополнительно определён базовый шаблон:
          2-octet-other-hex-number:6-octet-hex-number

          Примерами служат 0:100:100, 1:1.1.1.1:100,
          2:1234567890:203, 6:26:00:08:92:78:00.";
       reference
         "RFC 4360: BGP Extended Communities Attribute.
          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
          RFC 5668: 4-Octet AS Specific BGP Extended Community.
          RFC 7432: BGP MPLS-Based Ethernet VPN.";
     }

     typedef ipv6-route-target {
       type string {
         pattern
             '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
             + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
             + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
             + ':'
             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
             + '6[0-4][0-9]{3}|'
             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
         pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
             + ':'
             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
             + '6[0-4][0-9]{3}|'
             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
       }
       description
         "IPv6 RT - 20-октетное значение BGP IPv6 Address Specific
          Extended Community, служащее для тех же функций, что и 
          8-октетные RT, но применяющие только IPv6 как адрес 
          глобального администратора. Форматом служит
          <ipv6-address:2-octet-number>.

          Примерами являются 2001:db8::1:6544, 
          2001:db8::5eb1:791:6b37:17958.";
       reference
         "RFC 5701: IPv6 Address Specific BGP Extended Community
          Attribute.";
     }

     typedef route-target-type {
       type enumeration {
         enum import {
           value 0;
           description
             "RT для импорта маршрутов.";
         }
         enum export {
           value 1;
           description
             "RT для экспорта маршрутов.";
         }

         enum both {
           value 2;
           description
             " RT для импорта и экспорта маршрутов.";
         }
       }
       description
         "Роль RT в фильтрации маршрутов.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
     }

     typedef route-distinguisher {
       type string {
         pattern
           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
         +     '42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
         +     '42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
         +     '655[0-2][0-9]|'
         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|'
         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|'
         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(6(:[a-fA-F0-9]{2}){6})|'
         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
         +     '[0-9a-fA-F]{1,12})';
       }

       description
         "Различитель маршрутов (RD) - это 8-октетное значение для
          различения маршрутов из разных BGP VPN (RFC 4364). RD имеет
          такой же формат как RT в соответствии с RFC 4360 и состоит из
          из 2 или 3 полей: 2-октетное поле Type, поле администратора и
          необязательное поле назначенного номера.

          В соответствии с форматом данных для типов 0, 1, 2, 6, заданных
          в RFC 4360, RFC 5668, RFC 7432, шаблон кодирования имеет вид:
          0:2-octet-asn:4-octet-number
          1:4-octet-ipv4addr:2-octet-number
          2:4-octet-asn:2-octet-number
          6:6-octet-mac-address

          Для будущих типов RT дополнительно определён базовый шаблон:
          2-octet-other-hex-number:6-octet-hex-number

          Примерами являются 0:100:100, 1:1.1.1.1:100,
          2:1234567890:203, and 6:26:00:08:92:78:00.";
       reference
         "RFC 4360: BGP Extended Communities Attribute.
          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
          RFC 5668: 4-Octet AS Specific BGP Extended Community.
          RFC 7432: BGP MPLS-Based Ethernet VPN.";
     }

     typedef route-origin {
       type string {
         pattern
           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
         +     '42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
         +     '42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
         +     '655[0-2][0-9]|'
         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
         +     '4294967[01][0-9]{2}|'
         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
         +     '4294[0-8][0-9]{5}|'
         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
         +     '6[0-4][0-9]{3}|'
         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
         + '(6(:[a-fA-F0-9]{2}){6})|'
         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
         +    '[0-9a-fA-F]{1,12})';
       }
       description
         "Источник маршрута (Route Origin) - это 8-октетная расширенная
          группа BGP, указывающая набор сайтов, откуда идёт маршрут BGP
          (RFC 4364). Route Origin имеет такой же формат как RT в 
          соответствии с RFC 4360 и состоит из 2 или 3 полей:
          2-октетное поле Type, поле администратора и необязательное
          поле назначенного номера.

          В соответствии с форматом данных для типов 0, 1, 2, 6, заданных
          в RFC 4360, RFC 5668, RFC 7432, шаблон кодирования имеет вид:
          0:2-octet-asn:4-octet-number
          1:4-octet-ipv4addr:2-octet-number
          2:4-octet-asn:2-octet-number
          6:6-octet-mac-address

          Для будущих типов RT дополнительно определён базовый шаблон:
          2-octet-other-hex-number:6-octet-hex-number

          Примерами являются 0:100:100, 1:1.1.1.1:100,
          2:1234567890:203, and 6:26:00:08:92:78:00.";

       reference
         "RFC 4360: BGP Extended Communities Attribute.
          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
          RFC 5668: 4-Octet AS Specific BGP Extended Community.
          RFC 7432: BGP MPLS-Based Ethernet VPN.";
     }

     typedef ipv6-route-origin {
       type string {
         pattern
             '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
             + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
             + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
             + ':'
             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
             + '6[0-4][0-9]{3}|'
             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
         pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
             + ':'
             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
             + '6[0-4][0-9]{3}|'
             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
       }
       description
         "IPv6 Route Origin - это 20-октетное значение BGP IPv6 Address
          Specific Extended Community, служащее для тех же функций, что
          и обычный 8-октетный маршрут, но принимающее лишь адрес IPv6
          для глобального администратора. Форматом служит
          <ipv6-address:2-octet-number>.

         Примерами являются 2001:db8::1:6544 и
          2001:db8::5eb1:791:6b37:17958.";
       reference
         "RFC 5701: IPv6 Address Specific BGP Extended Community
          Attribute.";
     }

     /*** Типы для групповой передачи ***/

     typedef ipv4-multicast-group-address {
       type inet:ipv4-address {
         pattern '(2((2[4-9])|(3[0-9]))\.).*';
       }
       description
         "Адрес группы IPv4 из диапазона 224.0.0.0 - 239.255.255.255.";
       reference
         "RFC 1112: Host Extensions for IP Multicasting.";
     }

     typedef ipv6-multicast-group-address {
       type inet:ipv6-address {
         pattern '(([fF]{2}[0-9a-fA-F]{2}):).*';
       }
       description
         " Адрес группы IPv6 из диапазона ff00::/8.";
       reference
         "RFC 4291: IP Version 6 Addressing Architecture. Параграф 2.7.
          RFC 7346: IPv6 Multicast Address Scopes.";
     }

     typedef ip-multicast-group-address {
       type union {
         type ipv4-multicast-group-address;
         type ipv6-multicast-group-address;
       }
       description
         "Адрес multicast-группы IP в текстовом формате, соответствующем
          версии IP.";
     }

     typedef ipv4-multicast-source-address {
       type union {
         type enumeration {
           enum * {
             description
               "Любой адрес источника.";
           }
         }
         type inet:ipv4-address;
       }
       description
         "Групповой адрес источника IPv4.";
     }

     typedef ipv6-multicast-source-address {
       type union {
         type enumeration {
           enum * {
             description
               "Любой адрес источника.";
           }
         }
         type inet:ipv6-address;
       }
       description
         "Групповой адрес источника IPv6.";
     }

     /*** Общие для протоколов типы ***/

     typedef bandwidth-ieee-float32 {
       type string {
         pattern
           '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
         + '1(\.([0-9a-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
         + '1[01][0-9]|0?[0-9]?[0-9])?)';
       }
       description
         "Пропускная способность в формате IEEE 754 с плавающей точкой
          (-1)**(S) * 2**(Exponent-127) * (1 + Fraction),
          где Exponent занимает 8 битов, Fraction - 23. Измеряется в
          октет/сек. Форматом кодирования служат внешние шестнадцатеричные
          цифры в соответствии с IEEE 754 и ISO/IEC C99. Значения должны
          быть нормализованными, неотрицательными и без дробной части:
          0x1.hhhhhhp{+}d, 0X1.HHHHHHP{+}D, 0x0p0, где h и H - 
          шестнадцатеричные, а d и D - десятичные целые числа от 1 до 127.

          При использовании 6 шестнадцатеричных цифр для hhhhhh или
          HHHHHH младшая цифра должна быть чётной, x и X указывают
          шестнадцатеричные значения, p и P - степень 2. Примерами 
          являются 0x0p0, 0x1p10, 0x1.abcde2p+20.";
       reference
         "IEEE Std 754-2008: IEEE Standard for Floating-Point Arithmetic.
          ISO/IEC C99: Information technology - Programming
          Languages - C.";
     }

     typedef link-access-type {
       type enumeration {
         enum broadcast {
           description
             "Широковещательная сеть с множественным доступом.";
         }
         enum non-broadcast-multiaccess {
           description
             "Сеть с множественным доступом без широковещания (NBMA).";
         }
         enum point-to-multipoint {
           description
             "Сеть point-to-multipoint.";
         }
         enum point-to-point {
           description
             "Сеть «точка-точка».";
         }
       }
       description
         "Тип доступа к каналу.";
     }

     typedef timer-multiplier {
       type uint8;
       description
         "Число интервалов таймера, которое следует считать отказом.";
     }

     typedef timer-value-seconds16 {
       type union {
         type uint16 {
           range "1..65535";
         }
         type enumeration {
           enum infinity {
             description
               "Таймер установлен на бесконечность.";
           }
           enum not-set {
             description
               "Таймер не установлен.";
           }
         }
       }
       units "seconds";
       description
         "Значение таймера в секундах (16 битов).";
     }

     typedef timer-value-seconds32 {
       type union {
         type uint32 {
           range "1..4294967295";
         }
         type enumeration {
           enum infinity {
             description
               "Таймер установлен на бесконечность.";
           }
           enum not-set {
             description
               "Таймер не установлен.";
           }
         }
       }
       units "seconds";
       description
         "Значение таймера в секундах (32 бита).";
     }

     typedef timer-value-milliseconds {
       type union {
         type uint32 {
           range "1..4294967295";
         }
         type enumeration {
           enum infinity {
             description
               "Таймер установлен на бесконечность.";
           }
           enum not-set {
             description
               "Таймер не установлен.";
           }
         }
       }
       units "milliseconds";
       description
         "Значение таймера в миллисекундах.";
     }

     typedef percentage {
       type uint8 {
         range "0..100";
       }
       description
         "Целое число для указания процентов.";
     }

     typedef timeticks64 {
       type uint64;
       description
         "Этот тип основан на типе timeticks, заданном в RFC 6991, но
          имеет размер 64 бита. Он представляет время по модулю 2^64
          в сотых долях секунды между двумя эпохами.";
       reference
         "RFC 6991: Common YANG Data Types.";
     }

     typedef uint24 {
       type uint32 {
         range "0..16777215";
       }
       description
         "24-битовое целое число без знака.";
     }

     /*** Типы, связанные с MPLS и GMPLS ***/

     typedef generalized-label {
       type binary;
       description
         "Обобщённая метка. Узлы, передающие и принимающие такие метки
          знают тип и контекст специфических для канала меток.";
       reference
         "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
          Signaling Functional Description. Параграф 3.2.";
     }

     typedef mpls-label-special-purpose {
       type identityref {
         base mpls-label-special-purpose-value;
       }
       description
         "Представляет значения специальных меток MPLS.";
       reference
         "RFC 3032: MPLS Label Stack Encoding.
          RFC 7274: Allocating and Retiring Special-Purpose MPLS
          Labels.";
     }

     typedef mpls-label-general-use {
       type uint32 {
         range "16..1048575";
       }
       description
         "20-битовое значение метки в стеке MPLS, как указано в
          RFC 3032. Значение не включает кодирование Traffic Class и TTL.
          Диапазон меток этого типа предназначен для общего пользования
          и не включает специальных меток.";
       reference
         "RFC 3032: MPLS Label Stack Encoding.";
     }

     typedef mpls-label {
       type union {
         type mpls-label-special-purpose;
         type mpls-label-general-use;
       }
       description
         "20-битовое значение метки в стеке MPLS, как указано в RFC 3032. 
          Значение не включает кодирование Traffic Class и TTL.
       reference
         "RFC 3032: MPLS Label Stack Encoding.";
     }

     /*** Группировки **/
     grouping mpls-label-stack {
       description
         "Задаёт стек меток MPL, представляемый списком записей для
          меток стека. Ключом списка служит идентификатор, задающий
          относительный порядок каждой записи, наименьший идентификатор
          указывает метку на вершине стека.";
       container mpls-label-stack {
         description
           "Контейнер для записей списка стека меток MPLS.";
         list entry {
           key "id";
           description
             "Список меток стека MPLS.";
           leaf id {
             type uint8;
             description
               "Указывает запись с списке меток стека MPLS. Записи
                размещаются в порядке роста значений идентификаторов.
                Значение идентификатора не имеет другой семантики.";
           }
           leaf label {
             type rt-types:mpls-label;
             description
               "Значение метки.";
           }

           leaf ttl {
             type uint8;
             description
               "Время жизни (TTL).";
             reference
               "RFC 3032: MPLS Label Stack Encoding.";
           }
           leaf traffic-class {
             type uint8 {
               range "0..7";
             }
             description
               "Класс трафика (TC).";
             reference
               "RFC 5462: Multiprotocol Label Switching (MPLS) Label
                Stack Entry: 'EXP' Field Renamed to 'Traffic Class'
                Field.";
           }
         }
       }
     }

     grouping vpn-route-targets {
       description
         "Группа, задающая правила импорта и экспорта RT в VPN с BGP.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
          RFC 4664: Framework for Layer 2 Virtual Private Networks
          (L2VPNs).";
       list vpn-target {
         key "route-target";
         description
           "Список RT.";
         leaf route-target {
           type rt-types:route-target;
           description
             "Значение RT.";
         }
         leaf route-target-type {
           type rt-types:route-target-type;
           mandatory true;
           description
             "Тип импорта-экспорта RT.";
         }
       }
     }
   }

   <CODE ENDS>

4. Модуль iana-routing-types

   <CODE BEGINS> file "iana-routing-types@2017-12-04.yang"

   module iana-routing-types {
     namespace "urn:ietf:params:xml:ns:yang:iana-routing-types";
     prefix iana-rt-types;

     organization
       "IANA";
     contact
       "Internet Assigned Numbers Authority

        Postal: ICANN
                12025 Waterfront Drive, Suite 300
                Los Angeles, CA  90094-2536
                United States of America
        Tel:    +1 310 301 5800
        <mailto:iana@iana.org>"; 

     description
       "Этот модуль содержит типы данных YANG, считающиеся заданными
        IANA и применяемые для протоколов маршрутизации.

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

        Распространение и применение модуля в исходной или двоичной 
        форме с изменениями или без таковых разрешено в соответствии с
        лицензией Simplified BSD License, изложенной в параграфе 4.c
        IETF Trust's Legal Provisions Relating to IETF Documents
        (https://trustee.ietf.org/license-info). 

        Эта версия модуля YANG является частью RFC 8294, где правовые
        аспекты приведены более полно.";

      revision 2017-12-04 {
        description "Исходный выпуск.";
        reference
          "RFC 8294: Common YANG Data Types for the Routing Area.
           Параграф 4.";
     }

     /*** Типы IANA, связанные с маршрутизацией ***/
     /*** Перечисление семейств адресов IANA ***/

     typedef address-family {
       type enumeration {
         enum ipv4 {
           value 1;
           description
             "Семейство адресов IPv4.";
         }

         enum ipv6 {
           value 2;
           description
             "Семейство адресов IPv6.";
         }

         enum nsap {
           value 3;
           description
             "Семейство адресов OSI NSAP.";
         }

         enum hdlc {
           value 4;
           description
             "Семейство адресов HDLC.";
         }

         enum bbn1822 {
           value 5;
           description
             "Семейство адресов BBN 1822.";
         }

         enum ieee802 {
           value 6;
           description
             "Семейство адресов IEEE 802 MAC.";
         }

         enum e163 {
           value 7;
           description
             "Семейство адресов ITU-T E.163.";
         }

         enum e164 {
           value 8;
           description
             "Семейство адресов ITU-T E.164 (SMDS, Frame Relay, ATM).";
         }

         enum f69 {
           value 9;
           description
             "Семейство адресов ITU-T F.69 (Telex).";
         }

         enum x121 {
           value 10;
           description
             "Семейство адресов ITU-T X.121 (X.25, Frame Relay).";
         }

         enum ipx {
           value 11;
           description
             "Семейство адресов Novell IPX.";
         }

         enum appletalk {
           value 12;
           description
             "Семейство адресов AppleTalk.";
         }

         enum decnet-iv {
           value 13;
           description
             "Семейство адресов DECnet Phase IV.";
         }

         enum vines {
           value 14;
           description
             "Семейство адресов Banyan Vines.";
         }

         enum e164-nsap {
           value 15;
           description
             "Семейство адресов ITU-T E.164 с субадресом NSAP.";
         }

         enum dns {
           value 16;
           description
             "Семейство адресов DNS.";
         }

         enum distinguished-name {
           value 17;
           description
             "Семейство адресов Distinguished Name.";
         }

         enum as-num {
           value 18;
           description
             "Семейство адресов автономных систем (AS).";
         }

         enum xtp-v4 {
           value 19;
           description
             "Семейство адресов XTP по протоколу IPv4.";
         }

         enum xtp-v6 {
           value 20;
           description
             "Семейство адресов XTP по протоколу IPv6.";
         }

         enum xtp-native {
           value 21;
           description
             "Семейство адресов естественного режима XTP.";
         }

         enum fc-port {
           value 22;
           description
             "Семейство адресов Fibre Channel (FC) World-Wide Port Name.";
         }

         enum fc-node {
           value 23;
           description
             "Семейство адресов FC World-Wide Node Name.";
         }

         enum gwid {
           value 24;
           description
             "Семейство адресов ATM Gateway Identifier (GWID) Number.";
         }

         enum l2vpn {
           value 25;
           description
             "Семейство адресов L2VPN.";
         }

         enum mpls-tp-section-eid {
           value 26;
           description
             "Семейство адресов MPLS-TP) Section Endpoint.";
         }

         enum mpls-tp-lsp-eid {
           value 27;
           description
             "Семейство адресов MPLS-TP LSP Endpoint Identifier.";
         }

         enum mpls-tp-pwe-eid {
           value 28;
           description
             "Семейство адресов MPLS-TP Pseudowire Endpoint Identifier.";
         }

         enum mt-v4 {
           value 29;
           description
             "Семейство адресов Multi-Topology IPv4.";
         }

         enum mt-v6 {
           value 30;
           description
             "Семейство адресов Multi-Topology IPv6.";
         }

         enum eigrp-common-sf {
           value 16384;
           description
             "Семейство адресов EIGRP Common Service Family.";
         }

         enum eigrp-v4-sf {
           value 16385;
           description
             "Семейство адресов EIGRP IPv4 Service Family.";
         }

         enum eigrp-v6-sf {
           value 16386;
           description
             "Семейство адресов EIGRP IPv6 Service Family.";
         }

         enum lcaf {
           value 16387;
           description
             "Семейство адресов LISP LCAF.";
         }

         enum bgp-ls {
           value 16388;
           description
             "Семейство адресов BGP-LS.";
         }

         enum mac-48 {
           value 16389;
           description
             "Семейство адресов IEEE 48-bit MAC.";
         }

         enum mac-64 {
           value 16390;
           description
             "Семейство адресов IEEE 64-bit MAC.";
         }

         enum trill-oui {
           value 16391;
           description
             "Семейство адресов TRILL OUI.";
         }

         enum trill-mac-24 {
           value 16392;
           description
             "Семейство адресов TRILL final 3 octets of 48-bit MAC.";
         }

         enum trill-mac-40 {
           value 16393;
           description
             "Семейство адресов TRILL final 5 octets of 64-bit MAC.";
         }

         enum ipv6-64 {
           value 16394;
           description
             "Семейство адресов первых 8 октетов (64 бита ) IPv6.";
         }

         enum trill-rbridge-port-id {
           value 16395;
           description
             "Семейство адресов TRILL RBridge Port ID.";
         }

         enum trill-nickname {
           value 16396;
           description
             "Семейство адресов TRILL Nickname.";
         }
       }

       description
         "Перечисление всех заданных IANA семейств адресов.";

     }

     /*** Идентификаторы SAFI для многопротокольного BGP ***/
     typedef bgp-safi {
       type enumeration {
         enum unicast-safi {
           value 1;
           description
             "Unicast SAFI.";
         }

         enum multicast-safi {
           value 2;
           description
             "Multicast SAFI.";
         }

         enum labeled-unicast-safi {
           value 4;
           description
             "Labeled Unicast SAFI.";
         }

         enum multicast-vpn-safi {
           value 5;
           description
             "Multicast VPN SAFI.";
         }

         enum pseudowire-safi {
           value 6;
           description
             "Multi-segment Pseudowire VPN SAFI.";
         }

         enum tunnel-encap-safi {
           value 7;
           description
             "Tunnel Encap SAFI.";
         }

         enum mcast-vpls-safi {
           value 8;
           description
             "VPLS SAFI.";
         }

         enum tunnel-safi {
           value 64;
           description
             "Tunnel SAFI.";
         }

         enum vpls-safi {
           value 65;
           description
             "VPLS SAFI.";
         }

         enum mdt-safi {
           value 66;
           description
             "MDT SAFI.";
         }

         enum v4-over-v6-safi {
           value 67;
           description
             "IPv4 over IPv6 SAFI.";
         }

         enum v6-over-v4-safi {
           value 68;
           description
             "IPv6 over IPv4 SAFI.";
         }

         enum l1-vpn-auto-discovery-safi {
           value 69;
           description
             "Layer 1 VPN Auto-Discovery SAFI.";
         }

         enum evpn-safi {
           value 70;
           description
             "EVPN SAFI.";
         }

         enum bgp-ls-safi {
           value 71;
           description
             "BGP-LS SAFI.";
         }

         enum bgp-ls-vpn-safi {
           value 72;
           description
             "BGP-LS VPN SAFI.";
         }

         enum sr-te-safi {
           value 73;
           description
             "SR-TE SAFI.";
         }

         enum labeled-vpn-safi {
           value 128;
           description
             "MPLS Labeled VPN SAFI.";
         }

         enum multicast-mpls-vpn-safi {
           value 129;
           description
             "Multicast for BGP/MPLS IP VPN SAFI.";
         }

         enum route-target-safi {
           value 132;
           description
             "RT SAFI.";
         }

         enum ipv4-flow-spec-safi {
           value 133;
           description
             "IPv4 Flow Specification SAFI.";
         }
         enum vpnv4-flow-spec-safi {
           value 134;
           description
             "IPv4 VPN Flow Specification SAFI.";
         }

         enum vpn-auto-discovery-safi {
           value 140;
           description
             "VPN Auto-Discovery SAFI.";
         }
       }
       description
         "Enumeration for BGP SAFI.";
       reference
         "RFC 4760: Multiprotocol Extensions for BGP-4.";
     }
   }

   <CODE ENDS>

5. Взаимодействие с IANA

Этот документ регистрирует указанные ниже URI пространств имён в реестре IETF XML Registry [RFC3688].

   URI: urn:ietf:params:xml:ns:yang:ietf-routing-types
   Registrant Contact: The IESG.
   XML: N/A; the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:iana-routing-types
   Registrant Contact: IANA.
   XML: N/A; the requested URI is an XML namespace.

Документ регистрирует указанные ниже модули YANG в реестре YANG Module Names [RFC6020]

   Name:         ietf-routing-types
   Namespace:    urn:ietf:params:xml:ns:yang:ietf-routing-types
   Prefix:       rt-types
   Reference:    RFC 8294

   Name:         iana-routing-types
   Namespace:    urn:ietf:params:xml:ns:yang:iana-routing-types
   Prefix:       iana-rt-types
   Reference:    RFC 8294

5.1. Модуль iana-routing-types

Этот документ задаёт исходный выпуск поддерживаемого IANA модуля YANG iana-routing-types (раздел 4). Модуль iana-routing-types предназначен для отражения реестров Address Family Numbers [IANA-ADDRESS-FAMILY-REGISTRY] и Subsequent Address Family Identifiers (SAFI) Parameters [IANA-SAFI-REGISTRY].

Агентство IANA добавило приведённое ниже примечание в реестр iana-routing-types YANG Module.

Address Family и Subsequent Address Family недопустимо добавлять напрямую в модуль YANG iana-routing-types. Они должны добавляться в реестры Address Family Numbers и Subsequent Address Family Identifiers (SAFI) Parameters.

При добавлении Address Family или Subsequent Address Family в реестр Address Family Numbers или Subsequent Address Family Identifiers (SAFI) Parameters должен добавляться новый оператор enum в модуль iana-routing-types. Имя оператора enum совпадает с соответствующим Address Family или SAFI, но должно быть действительным идентификатором YANG с использованием символов нижнего регистра и разделением слов символом дефиса. Ниже указан оператор enum и его субоператоры, которые следует определить.

enum

Идентификатор YANG enum для address-family (Address Family) или bgp-safi (Subsequent Address Family). Он может совпадать с address-family или bgp-safi или сокращаться для упрощения использования.

value

Выделенное IANA значение, соответствующее address-family (Address Family) или bgp-safi (Subsequent Address Family).

status

Включается лишь при отмене регистрации (значении deprecated) или её устаревании (значение obsolete).

description

Дублирует описание из реестра, если оно есть. Строки должны иметь размер не более 72 символов.

reference

Дублирует ссылку из реестра при её наличии и включает название документа.

При обновлении модуля iana-routing-types в него добавляется оператор revision перед имеющимися операторами этого типа.

Агентство IANA добавило приведённое ниже примечание в реестры Address Family Numbers и Subsequent Address Family Identifiers (SAFI) Parameters.

При изменении этого реестра обновляется модуль YANG iana-routing-types, как указано в RFC 8294.

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

Этот документ содержит базовые определения типов маршрутизации (операторы typedef) с использованием языка моделирования данных YANG. Сами определения не влияют на безопасность и приватность в Internet, но их использование в других модулях YANG может оказывать такое влияние. Вопросы безопасности, рассмотренные в спецификации YANG 1.1 [RFC7950], применимы и к этому документу.

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

7.1. Нормативные документы

[RFC3688] Mealling, M., «The IETF XML Registry», BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.

[RFC6020] Bjorklund, M., Ed., «YANG — A Data Modeling Language for the Network Configuration Protocol (NETCONF)», RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.

[RFC6991] Schoenwaelder, J., Ed., «Common YANG Data Types», RFC 6020, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.

[RFC7950] Bjorklund, M., Ed., «The YANG 1.1 Data Modeling Language», RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.

[IANA-ADDRESS-FAMILY-REGISTRY] «IANA Address Family Numbers Registry», <https://www.iana.org/assignments/address-family-numbers/>.

[IANA-SAFI-REGISTRY] «IANA Subsequent Address Family Identifiers (SAFI) Parameters Registry», <https://www.iana.org/assignments/safi-namespace/>.

7.2. Дополнительная литература

[IEEE754] IEEE, «IEEE Standard for Floating-Point Arithmetic», IEEE 754-2008, DOI 10.1109/IEEESTD.2008.4610935.

[BGP-Model] Shaikh, A., Ed., Shakir, R., Ed., Patel, K., Ed., Hares, S., Ed., D’Souza, K., Bansal, D., Clemm, A., Zhdankin, A., Jethanandani, M., and X. Liu, «BGP Model for Service Provider Networks», Work in Progress, draft-ietf-idr-bgp-model-02, July 2016.

[OSPF-YANG] Yeung, D., Qu, Y., Zhang, J., Chen, I., and A. Lindem, «Yang Data Model for OSPF Protocol», Work in Progress, draft-ietf-ospf-yang-09, October 2017.

[PIM-YANG] Liu, X., McAllister, P., Peter, A., Sivakumar, M., Liu, Y., and F. Hu, «A YANG data model for Protocol-Independent Multicast (PIM)», Work in Progress, draft-ietf-pim-yang-12, December 2017.

[TE-YANG] Saad, T., Ed., Gandhi, R., Liu, X., Beeram, V., Shah, H., and I. Bryskin, «A YANG Data Model for Traffic Engineering Tunnels and Interfaces», Work in Progress, draft-ietf-teas-yang-te-09, October 2017.

[L2VPN-YANG] Shah, H., Ed., Brissette, P., Ed., Chen, I., Ed., Hussain, I., Ed., Wen, B., Ed., and K. Tiruveedhula, Ed., «YANG Data Model for MPLS-based L2VPN», Work in Progress, draft-ietf-bess-l2vpn-yang-07, September 2017.

[MPLS-Base-YANG] Saad, T., Raza, K., Gandhi, R., Liu, X., Beeram, V., Shah, H., Bryskin, I., Chen, X., Jones, R., and B. Wen, «A YANG Data Model for MPLS Base», Work in Progress3, draft-ietf-mpls-base-yang-05, July 2017.

[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, «MPLS Label Stack Encoding», RFC 3032, DOI 10.17487/RFC3032, January 2001, <https://www.rfc-editor.org/info/rfc3032>.

[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, «RSVP-TE: Extensions to RSVP for LSP Tunnels», RFC 3209, DOI 10.17487/RFC3209, December 2001, <https://www.rfc-editor.org/info/rfc3209>.

[RFC3471] Berger, L., Ed., «Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description», RFC 3471, DOI 10.17487/RFC3471, January 2003, <https://www.rfc-editor.org/info/rfc3471>.

[RFC4364] Rosen, E. and Y. Rekhter, «BGP/MPLS IP Virtual Private Networks (VPNs)», RFC 4364, DOI 10.17487/RFC4364, February 2006, <https://www.rfc-editor.org/info/rfc4364>.

[RFC4664] Andersson, L., Ed., and E. Rosen, Ed., «Framework for Layer 2 Virtual Private Networks (L2VPNs)», RFC 4664, DOI 10.17487/RFC4664, September 2006, <https://www.rfc-editor.org/info/rfc4664>.

[RFC5701] Rekhter, Y., «IPv6 Address Specific BGP Extended Community Attribute», RFC 5701, DOI 10.17487/RFC5701, November 2009, <https://www.rfc-editor.org/info/rfc5701>.

[RFC5880] Katz, D. and D. Ward, «Bidirectional Forwarding Detection (BFD)», RFC 5880, DOI 10.17487/RFC5880, June 2010, <https://www.rfc-editor.org/info/rfc5880>.

[RFC7274] Kompella, K., Andersson, L., and A. Farrel, «Allocating and Retiring Special-Purpose MPLS Labels», RFC 7274, DOI 10.17487/RFC7274, June 2014, <https://www.rfc-editor.org/info/rfc7274>.

[RFC7432] Sajassi, A., Ed., Aggarwal, R., Bitar, N., Isaac, A., Uttaro, J., Drake, J., and W. Henderickx, «BGP MPLS-Based Ethernet VPN», RFC 7432, DOI 10.17487/RFC7432, February 2015, <https://www.rfc-editor.org/info/rfc7432>.

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

В состав группы разработчиков Routing Area YANG Architecture входили Acee Lindem, Anees Shaikh, Christian Hopps, Dean Bogdanovic, Ebben Aries, Lou Berger, Qin Wu, Rob Shakir, Xufeng Liu, Yingzhen Qu.

Спасибо Martin Bjorklund, Tom Petch, Stewart Bryant, Radek Krejci за комментарии к модели и тексту документа, Robert Raszuk за предложения по дополнительным базовым типам маршрутизации.

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

Xufeng Liu
Jabil
8281 Greensboro Drive, Suite 200
McLean, VA 22102
United States of America
Email: Xufeng_Liu@jabil.com
 
Yingzhen Qu
Futurewei Technologies, Inc.
2330 Central Expressway
Santa Clara, CA 95050
United States of America
Email: yingzhen.qu@huawei.com
 
Acee Lindem
Cisco Systems
301 Midenhall Way
Cary, NC 27513
United States of America
Email: acee@cisco.com
 
Christian Hopps
Deutsche Telekom
Email: chopps@chopps.org
 
Lou Berger
LabN Consulting, L.L.C.
Email: lberger@labn.net

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

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

nmalykh@protokols.ru

1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.

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

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

Семантика SMTP local-part на почтовых серверах Google

С некоторых пор на мой адрес в домене google.com стал сыпаться адресованный некому Александру  спам, связанный с получением «быстрых кредитов». Поскольку я Александром никогда себя не называл и традиционно пользуюсь данным родителями именем, решил копнуть поглубже и посмотреть заголовки, благо интерфейс позволяет сделать это. И что же я увидел?

Тут самое время сказать ¨Wow¨ — в заголовке локальная часть адреса совсем не моя, хоть и похожа несказанно.

И разница совсем не велика — всего лишь отсутствующая в моем адресе точечка после буквы n. Не правда ли, мелочь совсем не значимая. Однако с точки зрения программ (серверов) строки символов nmalykh и n.malykh совершенно не совпадают и даже длиной различаются. В RFC 5321 сказано:

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

Вот они и интерпретируют, как им заблагорассудится. Если глянуть на строку с адресом на приведенной выше картинке, можно заметить справа от адреса текст «(Да, это ваш адрес) Подробнее…«, где последнее слово является ссылкой. Торкаем ссылочку и попадаем на очень любопытную страницу.

Любопытная трактовка, не правда ли?

Рубрика: Разное | Комментарии к записи Семантика SMTP local-part на почтовых серверах Google отключены

RFC 8277 Using BGP to Bind MPLS Labels to Address Prefixes

Internet Engineering Task Force (IETF)                          E. Rosen
Request for Comments: 8277                        Juniper Networks, Inc.
Obsoletes: 3107                                             October 2017
Category: Standards Track
ISSN: 2070-1721

Using BGP to Bind MPLS Labels to Address Prefixes

Использование BGP для привязки меток MPLS к адресным префиксам

PDF

Аннотация

В этом документе задан набор процедур использования протокола BGP для анонсирования фактов привязки конкретным маршрутизатором указанной метки MPLS (или последовательности меток, являющейся непрерывной частью стека) к заданному префиксу адресов. Это может быть сделано путем передачи сообщения BGP UPDATE, в котором поле NLRI1 содержит префикс и метку (метки) MPLS, а поле Next Hop указывает узел, который заявил привязку метки (меток) к префиксу. Документ отменяет RFC 3107.

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

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF2 и представляет согласованный взгляд сообщества IETF. Документ прошел открытое обсуждение и был одобрен для публикации IESG3. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.

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

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

Авторские права (Copyright (c) 2017) принадлежат 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. Введение

В [RFC3107] задано кодирование и процедуры для использования BGP с целью индикации того, что определенный маршрутизатор связал метку MPLS (или последовательность меток, являющуюся непрерывной частью стека меток, как определено в [RFC3031] и [RFC3032]) с адресным префиксом. Это делается путем передачи сообщения BGP UPDATE, поле NLRI в котором содержит префикс и метку (метки) MPLS, а поле Next Hop указывает узел, который заявил о привязке метки или меток. Сообщение UPDATE также анонсирует путь к конкретному префиксу через указанный следующий маршрутизатор (next hop).

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

  • Хотя заданное в [RFC3107] кодирование позволяет связать с адресным префиксом последовательность меток MPLS (а не просто одиночную метку), документ не определяет семантику связывания последовательности меток с префиксом.

  • Многие реализации [RFC3107] предполагают связывание с префиксом единственной мети и не могут корректно обработать сообщения BGP UPDATE с привязкой префикса к последовательности меток. В результате попытка реализации использовать такую возможность с высокой вероятностью приведет к проблемам при взаимодействии с другими реализациями.

  • Процедуры отзыва привязки метки или последовательности меток к адресному префиксу не заданы в [RFC3107] четко и корректно.

  • [RFC3107] задает необязательную функцию анонсирования множества маршрутов к получателю (Advertising Multiple Routes to a Destination), которая по сведениям автора никогда не было реализована в соответствии со спецификацией. Эту функцию можно реализовать другим путем с использованием процедур [RFC7911], которые не были доступны на момент написания [RFC3107]. В [RFC3107] для управления этой функцией служил код BGP Capability, который не был реализован и в настоящее время отменен (см. раздел 6).

  • Узел BGP может получить для адресного префикса два сообщения BGP UPDATE, одно из которых будет связывать с префиксом метку (или последовательность меток), другое — нет. В [RFC3107] ничего не сказано о влиянии двух таких сообщений UPDATE на процесс решения BGP и не сказано явно, какое из этих двух сообщений UPDATE следует распространять. Это привело к тому, что разные реализации по-разному обрабатывают такие события.

  • Большая часть [RFC3107] применима к семействам адресов VPN-IPv4 ([RFC4364]) и VPN-IPv6 ([RFC4659]), но эти семейства не упомянуты в документе.

Данный документ заменяет и отменяет [RFC3107]. Здесь определяется новая возможность BGP (BGP Capability) для использования в случаях привязки префикса к последовательности меток. Использование этой возможности позволяет предотвратить упомянутую выше проблему взаимодействия. Документ также отменяет не реализованную функцию «Advertising Multiple Routes to a Destination» (см. раздел 4 в [RFC3107]) и задает использование [RFC7911] для решения тех же задач. Документ решает вопрос взаимоотношений сообщений UPDATE для одного префикса, одно из которых анонсирует привязку к метке, другое не включает такой привязки. Однако для совместимости с имеющимися реализациями указано, что большая часть таких взаимодействий определяется локальной политикой.

Места, где данная спецификация отличается от [RFC3107], указаны в тексте. Предполагается, что реализации, соответствующие данному документу, будут совместимы с развернутыми реализациями [RFC3107].

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

2. Использование BGP для привязки адресного префикса к MPLS

Протокол BGP может служить для анонсирования информации о привязке определенным узлом (назовем его N) конкретной метки MPLS (или определенной последовательности меток, составляющей непрерывную часть стека) к конкретному адресному префиксу. Это выполняется путем передачи сообщений Multiprotocol BGP UPDATE, т. е. сообщений UPDATE с атрибутом MP_REACH_NLRI, соответствующим [RFC4760]. Сетевой адрес в поле Next Hop этого атрибута указывает IP-адрес узла N. Метка (метки) и префикс кодируются в поле NLRI атрибута MP_REACH_NLRI, как описано в параграфах 2.2 и 2.3.

Если префикс относится к IPv4 или VPN-IPv4 ([RFC4364]), поле AFI4 атрибута MP_REACH_NLRI имеет значение 1, а для префиксов IPv6 или VPN-IPv6 ([RFC4659]) указывается AFI = 2.

Если префикс относится к IPv4 или IPv6, в поле SAFI5 устанавливается значение 4, в для префикса VPN-IPv4 или VPN-IPv6 — SAFI = 128.

Использование SAFI = 4 или SAFI = 128 при AFI отличном от 1 и 2 выходит за рамки этого документа.

Данный документ не задает формат адреса в поле Next Hop атрибута MP_REACH_NLRI. Формат поля Next Hop зависит от множества факторов и рассматривается во многих RFC (см. [RFC4364], [RFC4659], [RFC4798] и [RFC5549]).

Существует множество приложений с другими методами использования BGP для анонсирования привязки меток MPLS, например [RFC7432], [RFC6514], [TUNNEL-ENCAPS]. Описанный здесь метод не объявляется единственным вариантом анонсирования привязки меток MPLS с помощью BGP. Обсуждение выбора метода для конкретных приложений выходит за рамки документа.

Далее в документе SAFI-x UPDATE будет обозначать сообщение BGP UPDATE с атрибутом MP_REACH_NLRI или MP_UNREACH_NLRI ([RFC4760]), в котором поле SAFI содержит значение x.

Этот документ определяет параметр BGP Optional Capabilities ([RFC5492]), известный как Multiple Labels Capability.

  • Пока эта возможность не указана в данной сессии BGP обоими узлами BGP, эти узлы должны передавать в данной сессии сообщения UPDATE для SAFI-4 или SAFI-128 с привязкой единственной метки и должны использовать кодирование, описанное в параграфе 2.2.

  • Если эта возможность указана обоими узлами в данной сессии BGP, оба узла должны передавать в данной сессии сообщения UPDATE с кодированием, описанным в параграфе 2.3 и могут связывать префикс с последовательностью меток.

Представление Multiple Labels Capability описано в параграфе 2.1.

Процедуры для явного отзыва привязки меток описаны в параграфе 2.4. Процедуры изменения привязки метки (меток) к данному префиксу на данном узле описаны в параграфе 2.5.

Процедуры распространения сообщений UPDATE для SAFI-4 и SAFI-128 описаны в разделе 3.

Когда узел BGP устанавливает и распространяет обновление (UPDATE) для SAFI-4 или SAFI-128 или меняет адрес в поле Next Hop, он должен соответствующим образом программировать свой уровень данных. Это описано в разделе 4.

2.1. Поддержка множества меток

[RFC5492] определяет Capabilities Optional Parameter. Узел BGP может включить Capabilities Optional Parameter в свое сообщение BGP OPEN. Параметр представляет собой триплет, включающий 1 октет Capability Code, 1 октет размера и значение переменной длины.

Данный документ определяет код возможности (Capability Code), известный как Multiple Labels Capability. Агентство IANA назначило для этого кода значение 8 (данный код введен этим документом и отсутствует в [RFC3107].)

Если узел BGP не передает Multiple Labels Capability в своем сообщении BGP OPEN для конкретной сессии BGP или не получает Multiple Labels Capability в сообщении BGP OPEN от партнера в данной сессии BGP, ему недопустимо передавать в этой сессии какие-либо сообщений UPDATE, связывающие с префиксом более одной метки MPLS. При анонсировании привязки единственной метки к префиксу узел BGP должен использовать кодирование, описанное в параграфе 2.2.

Значение поля Multiple Labels Capability (рисунок 1) состоит из одного или множества триплетов, размером 4 октета. Два первых октета задают значение AFI, третий — SAFI, а четвертый — Count. Поле Count в триплете <AFI, SAFI, Count> указывает максимальное число меток, которые узел BGP, указавший поддержку множества меток, способен обработать в сообщении UPDATE для указанных AFI и SAFI. Значение 255 показывает отсутствие ограничения на число меток в сообщении UPDATE для указанных AFI и SAFI.

Любая реализация, передающая Multiple Labels Capability должна быть способна обрабатывать не менее двух меток в NLRI. Однако в некоторых вариантах развертывания может требоваться большее число меток.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI              |    SAFI       |    Count      ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~              AFI              |    SAFI       |    Count      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Формат Multiple Labels Capability.

Если указано более 1 триплета с данной парой AFI и SAFI, все триплеты, кроме первого, должны игнорироваться.

Триплеты вида <AFI=x, SAFI=y, Count=0> или <AFI=x, SAFI=y, Count=1> передавать недопустимо, а при получении такие триплеты должны игнорироваться.

Multiple Labels Capability с размером, не кратным 4, должны считаться некорректно сформированными.

Механизм «Graceful Restart Mechanism for BGP» [RFC4724] описывает процедуру, которая позволяет поддерживать маршруты, полученные через данную сессию BGP, после отказа и последующего перезапуска сессии. Эта процедура требует передачи RIB целиком при перезапуске сессии. Если в отказавшей сессии был выполнен обмен Multiple Labels Capability для данного AFI/SAFI, но этого обмена не произошло в восстановленной сессии, все префиксы, анонсированные в этом AFI/SAFI с множеством меток, должны быть явно отозваны. Точно так же при снижении максимального числа меток (указанного в Capability для данного AFI/SAFI) все префиксы, анонсированные с большим числом меток, должны быть явно отозваны.

В документе «Accelerated Routing Convergence for BGP Graceful Restart» [Enhanced-GR] описана другая процедура, позволяющая поддерживать полученные в сессии BGP маршруты при отказе и перезапуске этой сессии. Эти процедуры недопустимо применять при наличии любого из приведенных ниже условий.

  • Обмен Multiple Labels Capability для данного AFI/SAFI был выполнен до перезапуска сессии, но не был повторен после перезапуска.

  • Обмен Multiple Labels Capability для данного AFI/SAFI до перезапуска был выполнен со значением Count, а после перезапуска повторен с меньшим значением.

При выполнении любого из условий должен быть выполнен обмен полным набором маршрутов для данных AFI/SAFI.

Если сообщение BGP OPEN содержит множество копий Multiple Labels Capability, значение будет иметь лишь первая, а последующие копии должны игнорироваться.

Если (a) узел BGP передал Multiple Labels Capability в своем сообщении BGP OPEN для определенной сессии BGP, (b) получил Multiple Labels Capability в сообщении BGP OPEN от партнера в этой сессии и (c) обе возможности указывают AFI/SAFI x/y, тогда при использовании UPDATE для AFI x и SAFI y для анонсирования привязки метки или последовательности меток к данному префиксу узел BGP должен применять кодирование, описанное в параграфе 2.3. Это кодирование должно применяться даже при связывании с префиксом лишь одной метки.

Если оба партнера в сессии BGP передали Multiple Labels Capability, но AFI/SAFI x/y не было задано обеими сторонами, сообщения UPDATE для AFI/SAFI x/y в этой сессии должны использовать кодирование параграфа 2.2, а такие сообщения UPDATE могут привязывать к префиксу лишь одну метку.

Узлу BGP не следует передавать сообщений UPDATE, которые привязывают к префиксу больше меток, нежели партнер способен воспринять в соответствии с переданной им возможностью Multiple Labels Capability. Если узел BGP получает сообщение UPDATE, привязывающее к префиксу больше меток, чем этот узел готов получить (как он указал в Multiple Labels Capability), этот узел должен применять к данному сообщения UPDATE стратегию treat-as-withdraw6 из [RFC7606].

Несмотря на заявленное узлом BGP число меток, которые он способен принять, его партнеру недопустимо пытаться передать больше меток, нежели можно корректно поместить в поле NLRI атрибута MP_REACH_NLRI. Следует подчеркнуть, что пространство для меток в поле NLRI ограничено.

  • В соответствии с [RFC4760] размер поля ограничен 255 битами (не октетами), включая число битов префикса.

  • В SAFI-128 UPDATE префикс имеет размер не менее 64 битов и может достигать 192 битов (например, в маршруте к хосту VPN-IPv6).

2.2. Кодирование NLRI без поддержки множества меток

Если возможность Multiple Labels Capability не была передана и получена в данной сессии BGP, в сообщениях BGP UPDATE с атрибутом MP_REACH_NLRI, содержащим одну комбинацию AFI/SAFI, заданную в разделе 2, поле NLRI кодируется, как показано на рисунке 2.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Length     |                 Label                 |Rsrv |S|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Prefix                               ~
~                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 2. NLRI с одной меткой.

Length

Однооктетное поле Length указывает число битов в оставшейся части поля NLRI.

Отметим, что размер всегда будет составлять 20 (число битов поле Label) + 3 (число битов в поле Rsrv) + 1 (число битов в поле S) + размер префикса в битах.

В атрибуте MP_REACH_NLRI с AFI/SAFI = 1/4 размер префикса составляет не более 32 битов, при AFI/SAFI = 2/4 — не более 128 битов. В атрибуте MP_REACH_NLRI с SAFI = 128 размер префикса будет не более 96 битов, если AFI = 1 и не более 192 битов для AFI = 2.

Как указано в [RFC4760], действительный размер поля NLRI будет равен числу битов, указанному в поле Length, с округлением до ближайшего большего целого числа октетов.

Label

20-битовое поле со значением метки MPLS (см. [RFC3032]).

Rsrv

В этом 3-битовом поле при передаче следует устанавливать 0, а на приеме оно должно игнорироваться.

S

Это 1-битовое поле должно быть установлено (1) при передаче и должно игнорироваться при получении.

Отметим, что сообщение UPDATE анонсирует не только привязку метки и префикса, но и путь к префиксу через узел, указанный в Network Address поля Next Hop атрибута MP_REACH_NLRI.

[RFC3107] требует установки бита S, если с префиксом связана лишь одна метка. Если бит S не установлен, [RFC3107] указывает присутствие других меток в NLRI. Однако некоторые реализации считают, что в NLRI бывает лишь одна метка и не проверяют бит S. Процедуры, заданные в этом документе, обеспечат взаимодействие с такими реализациями. Пока возможность Multiple Labels Capability не передана и не принята обеими сторонами сессии BGP, этот документ требует указывать в NLRI лишь одну метку, что ведет к установке бита S на передающей стороне и игнорированию на приемной.

Если применяются процедуры [RFC7911], 4-октетный идентификатор пути (определен в разделе 3 [RFC7911]) является частью NLRI и предшествует полю Length.

2.3. Кодирование NLRI при поддержке множества меток

Если возможность Multiple Labels Capability передана и получена обеими сторона данной сессии BGP, в сообщениях BGP UPDATE этой сессии, где атрибут MP_REACH_NLRI содержит одну из комбинаций AFI/SAFI, заданных в разделе 2, поле NLRI кодируется, как показано на рисунке 3.

Length

Однооктетное поле Length указывает число битов в оставшейся части поля NLRI.

Отметим, что каждая метка увеличивает размер на 24 бита (20 битов поля Label, 3 бита Rsrv и бит S).

В атрибуте MP_REACH_NLRI с AFI/SAFI = 1/4 размер префикса составляет не более 32 битов, при AFI/SAFI = 2/4 — не более 128 битов. В атрибуте MP_REACH_NLRI с SAFI = 128 размер префикса будет не более 96 битов, если AFI = 1 и не более 192 битов для AFI = 2.

Как указано в [RFC4760], действительный размер поля NLRI будет равен числу битов, указанному в поле Length, с округлением до ближайшего большего целого числа октетов.

Label

 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
+-+-+-+-+-+-+-+-+
|    Length     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Label                 |Rsrv |S~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                 Label                 |Rsrv |S|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Prefix                               ~
~                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3. NLRI с последовательностью меток.

20-битовое поле со значением метки MPLS (см. [RFC3032]).

Rsrv

В этом 3-битовом поле при передаче следует устанавливать 0, а на приеме оно должно игнорироваться.

S

Во всех метках, кроме последней (т. е. непосредственно предшествующей префиксу) бит S должен быть сброшен (0), а в последней метке должен быть установлен (1).

Отметим, что отсутствие установленного бита S в последней метке делает невозможным корректный разбор NLRI. Обсуждение обработки ошибок при отказе в обработке NLRI приведено в разделе 3, п. j [RFC7606].

Отметим, что сообщение UPDATE анонсирует не только привязку метки и префикса, но и путь к префиксу через узел, указанный в Network Address поля Next Hop атрибута MP_REACH_NLRI.

Если применяются процедуры [RFC7911], 4-октетный идентификатор пути (определен в разделе 3 [RFC7911]) является частью NLRI и предшествует полю Length.

2.4. Явный отзыв привязки метки к префиксу

Предположим, что узел BGP анонсировал в данной сессии привязку метки или последовательности меток к данному префиксу, а сейчас желает отозвать эту привязку. Для этого узел может передать сообщение BGP UPDATE с атрибутом MP_UNREACH_NLRI, поле NLRI которого показано на рисунке 4.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Length     |        Compatibility                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Prefix                               ~
~                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 4. NLRI для отзыва.


При передаче в поле Compatibility следует установить 0x800000, а при получении это поле должно игнорироваться.

Это кодирование применяется для явного отзыва (в данной сессии BGP) привязки указанного префикса к любой метке или последовательности меток, которая ранее была выполнена процедурами этого документа для данного префикса. Кодирование не зависит от передачи и приема возможности Multiple Labels Capability для этой сессии. Отметим, что привязки, которые не были анонсированы в этой сессии, не могут быть отозваны таким методом. Однако привязки, анонсированные в предыдущей сессии с тем же партнером могут быть отозваны этим методом, если текущая сессия является результатом «аккуратного перезапуска» (graceful restart [RFC4724]) предыдущей сессии.

При использовании атрибута MP_UNREACH_NLRI для отзыва маршрута, в котором поле NLRI было ранее задано атрибутом MP_REACH_NLRI, размеры и значения соответствующих префиксов и AFI/SAFI должны совпадать. При использовании процедур [RFC7911] должны также совпадать соответствующие значения полей идентификаторов пути. Отметим, что размер префикса — это не размер NLRI и для определения размера префикса в MP_UNREACH_NLRI из размера поля Compatibility должно вычитаться значение размера NLRI.

Явный отзыв в сообщении SAFI-x UPDATE для данной сессии BGP отзывает не только привязки префиксов к меткам, но и пути к этим префиксам, анонсированные ранее в SAFI-x UPDATE для этой сессии.

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

[RFC3107] также делает возможным отзыв без явного указания метки путем установки в поле Compatibility значения 0x800000. Однако некоторые реализации устанавливают в этом поле 0x000000. Для совместимости с предыдущими версиями этот документ рекомендует устанавливать Compatibility = 0x800000 и требует игнорировать поле при получении.

2.5. Смена привязанной к префиксу метки

Предположим, что узел BGP S1 в данной сессии BGP получил сообщение SAFI-4 или SAFI-128 UPDATE U1, которое указывает метку (или последовательность меток) L1, префикс P и следующий маршрутизатор N1. Как указано выше, это показывает, что метка (последовательность меток) L1 связана с префиксом P на узле N1. Предположим, что S1 затем получает в той же сессии сообщение UPDATE U2 с тем же AFI/SAFI, которое указывает метку (последовательность меток) L2, префикс P и тот же следующий интервал N1.

  • Если [RFC7911] не используется, сообщение UPDATE U2 должно трактоваться как привязка L2 к префиксу P на узле N1 и отмена имеющейся привязки L1 к префиксу P на N1. Т. е. UPDATE U1 неявно отзывается и заменяется UPDATE U2.

  • Предположим, что используется [RFC7911], сообщение UPDATE U1 имеет Path Identifier I1, а UPDATE U2 — Path Identifier I2.

    • Если I1 совпадает с I2, сообщение UPDATE U2 должно должно интерпретироваться как привязка L2 к префиксу P на узле N1 и отмена привязки L1 к P на узле N1. Сообщение UPDATE U1 неявно отзывается.

    • Если I1 и I2 различаются, сообщение U2 должно интерпретироваться как привязка метки L2 к префиксу P на узле N1, но U2 недопустимо трактовать как отмену привязки L1 к P на узле N1. При некоторых условиях (их указание выходит за рамки документа) S1 может выбрать балансировку трафика между путями, представленными U1 и U2. Для отправки трафика по пути, представленному U1, S1 использует метку (метки), анонсированную в U1, а для отправки по пути, представленному U2, — метку (метки), анонсированную в U2 (хотя эти пути ведут к одному маршрутизатору, можно предположить, что далее они разойдутся).

Предположим, что узел BGP S1 получил в данной сессии BGP сообщение SAFI-4 или SAFI-128 UPDATE, задающее метку L1, префикс P и next hop N1. Затем предположим, что S1 получил в другой сессии BGP сообщение UPDATE с тем же AFI/SAFI, которое задает метку L2, префикс P и тот же next hop N1. Узлу BGP S1 следует трактовать это как наличие у N1 не менее двух путей к P и S1 может использовать это для распределения трафика, передаваемого в P.

Отметим, что здесь рассмотрены лишь случаи, где два сообщения UPDATE имеют одинаковый следующий интервал — — next hop. Процедуры для разных next hop в двух сообщениях UPDATE рассмотрены в [RFC4271].

3. Установка и распространение маршрутов SAFI-4 или SAFI-128

3.1. Совместимость маршрутов

Предположим, что узел BGP получил два сообщения SAFI-4 UPDATE с одним значением Prefix:

  • в разных сессиях BGP;

  • в одной сессии, использующей добавление пути, и NLRI в сообщениях имеют разные идентификаторы путей.

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

То же самое применимо и для маршрутов SAFI-128.

3.2. Изменение поля меток в процессе распространения

3.2.1. Поле Next Hop не меняется

Если при распространении маршрутов SAFI-4 или SAFI-128 сетевой адрес (Network Address) в поле Next Hop не меняется, поле (поля) Label также должно оставаться неизменным.

Отметим, что данный маршрут недопустимо распространять партнеру, если NLRI в маршруте имеет множество меток, но возможность Multiple Labels Capability не согласована с этим партнером. Точно так же данный маршрут недопустимо распространять партнеру, если NLRI в маршруте имеет больше меток, чем может обработать (указал в Multiple Labels Capability) этот партнер. В любом случае, если предыдущий маршрут с теми же AFI, SAFI и префиксом (но с меньшим числом меток) уже был распространен партнеру, этот маршрут должен быть отозван с использованием процедуры, описанной в параграфе 2.4.

3.2.2. Поле Next Hop меняется

Если Network Address в поле Next Hop меняется перед распространением маршрута SAFI-4 или SAFI-128, поле (поля) Label в распространяемом маршруте должно содержать метку (метки), привязанную к префиксу в новом next hop.

Предположим, что узел BGP S1 получил сообщение UPDATE, связывающее последовательность из одной или нескольких меток с определенным префиксом. Если S1 принимает решение о распространении этого маршрута после изменения next hop, S1 может изменить метку одним из перечисленных ниже способов, в зависимости от локальной политики.

  • Одна метка может быть заменена на другую с таким же или иным значением.

  • Последовательность меток может быть заменена одной меткой.

  • Одна метка может быть заменена последовательностью меток.

  • Последовательность меток может быть заменена другой с тем же или иным числом меток.

При решении вопроса о распространении сообщений UPDATE с привязкой последовательности из нескольких меток узел BGP должен принимать во внимание информацию Multiple Labels Capability (параграф 2.1). Узлу BGP недопустимо передавать множество меток партнерам, с которыми не было обмена Multiple Labels Capability, а также недопустимо передавать больше меток, чем партнер может обработать (указал в Multiple Labels Capability).

Возможно, что локальная политика узла BGP задает кодирование N меток в NLRI данного маршрута перед его распространением, но один из партнеров BGP не способен обработать N в NLRI. В этом случае возможны 2 варианта.

  • Можно распространить маршрут с меньшим числом меток. Если это имеет смысл и делается, выбор меток определяется локальной политикой.

  • Можно отказаться от распространения маршрута данному партнеру. В этом случае распространенный ранее данному партнеру маршрут с теми же AFI, SAFI и префиксом (но меньшим числом меток) должен быть отозван по процедуре параграфа 2.4.

4. Уровень данных

Далее в документе фраза «узел S туннелирует пакет P узлу N» предполагает, что P является пакетом MPLS. Это означает, что узел S инкапсулирует пакет P и организует доставку P на узел N так, что стек меток пакета P до инкапсуляции придет узлу N неизменным, но не будет виден другими узлами между S и N (если они имеются).

Если туннель является LSP7, инкапсуляция может заключаться в простом вталкивании дополнительной метки в стек MPLS. Если узлы N и S смежны на канальном уровне, может оказаться достаточно инкапсуляции L2. Могут применяться и другие типы туннелей (например, IP, GRE, UDP) в зависимости от конкретного типа развертывания.

Предположим, что узел BGP S1 получает сообщение SAFI-4 или SAFI-128 BGP UPDATE с MP_REACH_NLRI, указывающим метку L1, префикс P и next hop N1, а также предположим, что S1 устанавливает этот маршрут в качестве лучшего (или одного из лучших) пути к P. Затем предположим, что S1 распространяет этот маршрут, заменив next hop на себя и метку — на L2. Если S1 получит пакет данных MPLS и в процессе его обработки для пересылки увидит, что метка L2 поднялась на вершину стека, S1 должен будет заменить метку L2 на L1 в качестве верхней метки стека и туннелировать этот пакет узлу N1.

Предположим, что полученный S1 маршрут содержит не одну метку, а последовательность из k меток <L11, L12, …, L1k>, где L11 — первая метка в NLRI, а L1k — последняя. Снова предположим, что S1 распространяет этот маршрут, указав себя в качестве next hop и заменив поле Label на единственную метку L2. Если S1 получает пакет данных MPLS и в процессе его обработки для пересылки видит метку L2 на вершине стека, вместо простой замены L2 на L1 он будет удалять L2 и вталкивать в стек метки с L1k по L11 так, чтобы метка L11 оказалась в стеке верхней. После этого узел S1 должен туннелировать пакет узлу N1 (отметим, что L1k не будет нижней меткой стека и у нее не будет установлен флаг bottom of stack, если метка L2 не была нижней в стеке).

В предыдущих абзацах предполагается, что S1 распространяет маршрут SAFI-4 или SAFI-128 после указания себя в качестве next hop и меняет метку или последовательность меток в NLRI этого маршрута на одну метку. Однако локальная политика может разрешать узлу BGP задавать множество меток в распространяемом маршруте SAFI-4 или SAFI-128 после установки себя в качестве next hop.

Предположим, например, что S1 поддерживает метки контекста ([RFC5331]). Пусть L21 будет меткой контекста, поддерживаемой S1, а L22 — меткой в пространстве, указанном (для S1) меткой L21. Предположим, что S1 получает сообщение SAFI-4 или SAFI-128 UPDATE для префикса P, в котором поле Label имеет значение <L11, L12, …, L1k>, а next hop — N1. Перед распространением UPDATE узел S1 может указать себя в качестве next hop (заменив N1 на S1) и заменить стек меток <L11, L12, …, L1k> на пару меток <L21, L22>.

Если в таком случае узел S1 получает пакет данных MPLS с верхней меткой L21 и второй меткой L22, он будет удалять из стека обе метки, заменяя их последовательностью <L11, L12, …, L1k>. Отметим, что контекстный характер метки L21 известен лишь S1, а другие узлы BGP не знают, как узел S1 будет интерпретировать L21 (или L22).

Способность заменять одну или множество меток другой меткой (или множеством) может обеспечить высокий уровень гибкости, но делать это нужно с осторожностью. Предположим снова, что S1 получает сообщение UPDATE с префиксом P, стеком меток <L11, L12, …, L1k> и next hop N1. Пусть S1 распространяет UPDATE узлу BGP S2, устанавливая себя в качестве next hop и заменяя поле Label последовательностью <L21, L22, …, L2k>. Далее предположим, что S1 программирует свой уровень данных так, что при обработке пересылаемого пакета MPLS с верхней меткой L21 эта метка заменяется последовательностью <L11, L12, …, L1k>, а затем пакет туннелируется N1.

В этом случае узел BGP S2 будет получать маршрут с префиксом P, полем Label <L21, L22, …, L2k> и next hop S1. Если S2 решит переслать пакет IP по этому маршруту, он будет вталкивать метки <L21, L22, …, L2k> в стек пакета и туннелировать пакет узлу S1, который заменит L21 на <L11, L12, …, L1k> и туннелирует пакет узлу N1. Узел N1 получит пакет со стеком меток <L11, L12, …, L1k, L22, …, L2k>. В некоторых случаях это будет полезно, а в других может приводить к неожиданным результатам.

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

При вталкивании меток в стек пакета поля TTL8 ([RFC3032], [RFC3443]) и TC9 ([RFC3032], [RFC5462]) должны быть установлены для каждой метки. Документ не задает правил установки полей, оставляя это локальной политике.

Этот документ не задает никаких новых правил обработки стека меток во входящих пакетах данных.

Решение вопроса о возможности применения маршрутов SAFI-4 для базовой пересылки пакетов IP или только для пересылки пакетов MPLS определяется локальной политикой. Если узел BGP S1 пересылает пакеты в соответствии с маршрутами SAFI-4, тогда при пересылке пакета IP с адресом получателя D маршрут, в котором префикс P является самым длинным префиксом, совпадающим с D, рассматривается наряду с другими маршрутами, применяемыми для пересылки пакетов IP. Предположим, что пакет пересылается в соответствии с маршрутом SAFI-4, имеющим префикс P, next hop N1 и последовательность меток L1. Для пересылки пакета по этому маршруту S1 должен создать стек меток для пакета, втолкнуть в него последовательность меток L1 и туннелировать пакет узлу N1.

5. Связь между маршрутами SAFI-4 и SAFI-1

Узел BGP может получить маршруты SAFI-1 и SAFI-4 для префикса P. Разные реализации по разному трактуют это.

Например, некоторые реализации могут считать маршруты SAFI-1 и SAFI-4 совершенно независимыми и трактовать их по принципу «корабль в ночи» (ships in the night). В таком случае выбор лучшего пути для двух SAFI будет независимым и будет выбран лучший маршрут SAFI-1 к префиксу P и лучший маршрут SAFI-4 к тому же префиксу. Выбор маршрута для реальной пересылки пакетов по этому префиксу будет зависеть от локальной политики.

Другие реализации могут считать маршруты SAFI-1 и SAFI-4 для одного префикса сравнимыми и при выборе маршрута к префиксу P останется маршрут SAFI-1 или SAFI-4, но не оба. В таких реализациях при распределении нагрузки между равноценными маршрутами некоторые из таких маршрутов могут оказаться SAFI-1, а другие — SAFI-4. Какой из маршрутов будет применяться, определяет локальная политика.

Некоторые реализации могут позволять передачу в одной сессии BGP сообщений UPDATE для SAFI-1 и SAFI-4, а другие могут это запрещать. Некоторые реализации, разрешающие оба SAFI в одной сессии, могут считать получение маршрута SAFI-1 для префикса P в данной сессии неявным отзывом предыдущего маршрута SAFI-4 для префикса P в этой сессии и наоборот. Поведение других реализаций может быть иным.

Узел BGP может получить маршрут SAFI-4 через данную сессию BGP, имея другие сессии BGP, где SAFI-4 не разрешаются. В таких случаях узел BGP может преобразовать маршрут SAFI-4 в маршрут SAFI-1 и распространять результат через другие сессии, где SAFI-4 не поддерживается. Это определяется локальной политикой.

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

6. Взаимодействие с IANA

Агентство IANA выделило значение 8 для Multiple Labels Capability в реестре BGP Capability Codes со ссылкой на данный документ.

Реестр BGP Capability Codes был изменен с указанием кода возможности 4 (множество маршрутов к адресату) как отмененного со ссылкой на данный документ.

Агентство IANA изменило ссылку для SAFI 4 в реестре Subsequent Address Family Identifiers (SAFI) Parameters указанием на данный документ.

Этот документ также добавлен в качестве ссылки для SAFI 128 в том же реестре.

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

Вопросы безопасности BGP, рассмотренные в [RFC4271], применимы в данном случае.

Если реализация BGP, не соответствующая данному документу, кодирует множество меток в NLRI, но возможность Multiple Labels Capability не была передана и принята, соответствующая данному документу реализация BGP будет вероятно сбрасывать сессию BGP.

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

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

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

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

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

8.1. Нормативные документы

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC3031] Rosen, E., Viswanathan, A., and R. Callon, «Multiprotocol Label Switching Architecture», RFC 3031, DOI 10.17487/RFC3031, January 2001, <https://www.rfc-editor.org/info/rfc3031>.

[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, «MPLS Label Stack Encoding», RFC 3032, DOI 10.17487/RFC3032, January 2001, <https://www.rfc-editor.org/info/rfc3032>.

[RFC3107] Rekhter, Y. and E. Rosen, «Carrying Label Information in BGP-4», RFC 3107, DOI 10.17487/RFC3107, May 2001, <https://www.rfc-editor.org/info/rfc3107>.

[RFC3443] Agarwal, P. and B. Akyol, «Time To Live (TTL) Processing in Multi-Protocol Label Switching (MPLS) Networks», RFC 3443, DOI 10.17487/RFC3443, January 2003, <https://www.rfc-editor.org/info/rfc3443>.

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, DOI 10.17487/RFC4271, January 2006, <https://www.rfc-editor.org/info/rfc4271>.

[RFC4364] Rosen, E. and Y. Rekhter, «BGP/MPLS IP Virtual Private Networks (VPNs)», RFC 4364, DOI 10.17487/RFC4364, February 2006, <https://www.rfc-editor.org/info/rfc4364>.

[RFC4659] De Clercq, J., Ooms, D., Carugi, M., and F. Le Faucheur, «BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN», RFC 4659, DOI 10.17487/RFC4659, September 2006, <https://www.rfc-editor.org/info/rfc4659>.

[RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter, «Multiprotocol Extensions for BGP-4», RFC 4760, DOI 10.17487/RFC4760, January 2007, <https://www.rfc-editor.org/info/rfc4760>.

[RFC4798] De Clercq, J., Ooms, D., Prevost, S., and F. Le Faucheur, «Connecting IPv6 Islands over IPv4 MPLS Using IPv6 Provider Edge Routers (6PE)», RFC 4798, DOI 10.17487/RFC4798, February 2007, <https://www.rfc-editor.org/info/rfc4798>.

[RFC5462] Andersson, L. and R. Asati, «Multiprotocol Label Switching (MPLS) Label Stack Entry: «EXP» Field Renamed to «Traffic Class» Field», RFC 5462, DOI 10.17487/RFC5462, February 2009, <https://www.rfc-editor.org/info/rfc5462>.

[RFC5492] Scudder, J. and R. Chandra, «Capabilities Advertisement with BGP-4», RFC 5492, DOI 10.17487/RFC5492, February 2009, <https://www.rfc-editor.org/info/rfc5492>.

[RFC5549] Le Faucheur, F. and E. Rosen, «Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop», RFC 5549, DOI 10.17487/RFC5549, May 2009, <https://www.rfc-editor.org/info/rfc5549>.

[RFC7606] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. Patel, «Revised Error Handling for BGP UPDATE Messages», RFC 7606, DOI 10.17487/RFC7606, August 2015, <https://www.rfc-editor.org/info/rfc7606>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

8.2. Дополнительная литература

[Enhanced-GR] Patel, K., Chen, E., Fernando, R., and J. Scudder, «Accelerated Routing Convergence for BGP Graceful Restart», Work in Progress, draft-ietf-idr-enhanced-gr-06, June 2016.

[RFC4724] Sangli, S., Chen, E., Fernando, R., Scudder, J., and Y. Rekhter, «Graceful Restart Mechanism for BGP», RFC 4724, DOI 10.17487/RFC4724, January 2007, <https://www.rfc-editor.org/info/rfc4724>.

[RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, «MPLS Upstream Label Assignment and Context-Specific Label Space», RFC 5331, DOI 10.17487/RFC5331, August 2008, <https://www.rfc-editor.org/info/rfc5331>.

[RFC6514] Aggarwal, R., Rosen, E., Morin, T., and Y. Rekhter, «BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs», RFC 6514, DOI 10.17487/RFC6514, February 2012, <https://www.rfc-editor.org/info/rfc6514>.

[RFC7432] Sajassi, A., Ed., Aggarwal, R., Bitar, N., Isaac, A., Uttaro, J., Drake, J., and W. Henderickx, «BGP MPLS-Based Ethernet VPN», RFC 7432, DOI 10.17487/RFC7432, February 2015, <https://www.rfc-editor.org/info/rfc7432>.

[RFC7911] Walton, D., Retana, A., Chen, E., and J. Scudder, «Advertisement of Multiple Paths in BGP», RFC 7911, DOI 10.17487/RFC7911, July 2016, <https://www.rfc-editor.org/info/rfc7911>.

[TUNNEL-ENCAPS] Rosen, E., Patel, K., and G. Velde, «The BGP Tunnel Encapsulation Attribute», Work in Progress, draft-ietf-idr-tunnel-encaps-0710, July 2017.

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

Этот документ отменяет RFC 3107. Спасибо Yakov Rekhter — соавтору RFC 3107 за его работу над документом. Спасибо также Ravi Chandra, Enke Chen, Srihari R. Sangli, Eric Gray и Liam Casey за их рецензии и замечания.

Спасибо Alexander Okonnikov и David Lamparter за найденные в RFC 3107 ошибки.

Спасибо Lili Wang и Kaliraj Vairavakkalai за помощью и советы при подготовке документа.

Спасибо Mach Chen, Bruno Decraene, Jie Dong, Adrian Farrel, Jeff Haas, Jonathan Hardwick, Jakob Heitz, Alexander Okonnikov, Keyur Patel, Kevin Wang и Lucy Yong за их рецензии и замечания к данному документу.

Адрес автора

Eric C. Rosen

Juniper Networks, Inc.

10 Technology Park Drive

Westford, Massachusetts 01886

United States of America

Email: erosen@juniper.net


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

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

nmalykh@protokols.ru

1Network Layer Reachability Information — информация о доступности на сетевом уровне.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

4Address Family Identifier — идентификатор семейства адресов.

5Subsequent Address Family Identifier — идентификатор последующего семейства адресов.

6Рассматривать как отзыв.

7Label Switched Path — путь с коммутацией по меткам.

8Time-to-Live — время жизни.

9Traffic Class — класс трафика.

10В https://tools.ietf.org/html/draft-ietf-idr-tunnel-encaps-10 имеется более свежий вариант документа. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 8277 Using BGP to Bind MPLS Labels to Address Prefixes отключены

RFC 8209 A Profile for BGPsec Router Certificates, Certificate Revocation Lists, and Certification Requests

Internet Engineering Task Force (IETF)                       M. Reynolds
Request for Comments: 8209                                          IPSw
Updates: 6487                                                  S. Turner
Category: Standards Track                                          sn3rd
ISSN: 2070-1721                                                  S. Kent
                                                                     BBN
                                                          September 2017

Профиль для сертификатов маршрутизаторов BGPsec, списков отзыва и запросов сертификатов

A Profile for BGPsec Router Certificates, Certificate Revocation Lists, and Certification Requests

PDF

Аннотация

Этот документ определяет стандартный профиль для сертификатов X.509, используемых для обеспечения возможности проверки путей AS1 в протоколе BGP2, с помощью расширения, названного BGPsec. BGP является стандартным протоколом междоменной маршрутизации в Internet, собирая, по сути дела, Internet в единое целое. Расширение BGPsec было разработано, как одна из компонент решения по обеспечению защиты BGP. Целью BGPsec является обеспечение полной проверки пути AS на основе использования строгих криптографических примитивов. Сертификаты конечных элементов (EE3), задаваемые этим профилем, выпускаются для маршрутизаторов внутри AS. Каждый из таких сертификатов выпускается с сертификатом удостоверяющего центра (УЦ или CA4) инфраструктуры открытых ключей ресурсов (RPKI5). Сертификаты УЦ и EE содержат расширение AS Resource. Сертификат EE этого типа подтверждает, что маршрутизатор или маршрутизаторы, владеющие соответствующим секретным ключом (private key), уполномочены выпускать защищенные анонсы маршрутов от имени AS, указанных в сертификате. В этом документе описан также профиль формата запросов сертификата и заданы процедуры проверки пути сертификации трансляторов (RP6) для этих сертификатов EE. Данный документ расширяет RPKI и, следовательно, служит обновлением профиля RPKI Resource Certificates Profile (RFC 6487).

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

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

Документ является результатом работы IETF7 и представляет собой согласованное мнение сообщества IETF. Документ был вынесен на публичное рассмотрение и одобрен для публикации IESG8. Дополнительная информация о документах BCP представлена в разделе 2 документа RFC 5741.

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

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

Авторские права (Copyright (c) 2017) принадлежат 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. Введение

Этот документ определяет профиль для сертификатов X.509 конечных элементов (EE) [RFC5280] с целью использования в контексте сертификации путей AS в протоколе BGPsec. Эти сертификаты получили название BGPsec Router Certificate (сертификат маршрутизатора BGPsec). Держатель секретного ключа, связанного с BGPsec Router Certificate, уполномочен передавать защищенные анонсы маршрутов (BGPsec UPDATE) от имени автономных систем, указанных в сертификате. Маршрутизатор, владеющий секретным ключом, уполномочен передавать (своим партнерам) защищенные анонсы маршрутов, указывающие номер автономной системы маршрутизатора (ASN9) в качестве источника анонсов. Обеспечиваемые BGPsec свойства (владение ключом) позволяют каждой AS на пути AS убедиться в том, что другие AS на этом пути уполномочены анонсировать данный маршрут (в следующую AS на пути AS).

Этот документ основан на [RFC6487], а тот, в свою очередь, — на [RFC5280]. Документ служит обновлением для [RFC6487]. Он устанавливает требования, предъявляемые к Resource Certificate, используемому в качестве BGPsec Router Certificate, т. е. задает ограничения для полей сертификата и расширения, приемлемые в этом контексте. Документ также описывает запросы, используемые для приобретения BGPsec Router Certificate. Кроме того, документ задает для этих сертификатов процедуру проверки пути сертификации Relying Party (RP).

1.1. Терминология

Предполагается знакомство читателя с терминами и концепциями, описанными в A Profile for X.509 PKIX Resource Certificates [RFC6487], BGPsec Protocol Specification [RFC8205], A Border Gateway Protocol 4 (BGP-4) [RFC4271], BGP Security Vulnerabilities Analysis [RFC4272], Considerations in Validating the Path in BGP [RFC5123] и Capabilities Advertisement with BGP-4 [RFC5492].

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

2. Описание ресурсов в сертификатах

+---------+   +------+
| CA Cert |---| IANA |
+---------+   +------+
         \
      +---------+   +-----+
      | CA Cert |---| RIR |
      +---------+   +-----+
              \
             +---------+   +-----+
             | CA Cert |---| ISP |
             +---------+   +-----+
              / |            | |
   +-----+   /  |            | |   +-----+
   | CRL |--+   |            | +---| ROA |
   +-----+      |            |     +-----+
                |            |   +----------+
       +----+   |            +---| Manifest |
     +-| EE |---+                +----------+
     | +----+
     +-----+

Рисунок 1


На рисунке 1 показаны некоторые элементы инфраструктуры открытых ключей ресурсов (RPKI), а также некоторые объекты, генерируемые RPKI элементами. Агентство IANA выпускает сертификат удостоверяющего центра (CA) для каждого регионального регистратора RIR10. В свою очередь RIR выпускает сертификаты CA для провайдеров (ISP11). ISP выпускают сертификаты EE для себя, чтобы обеспечить возможность проверки подписей объектов RPKI. CA также создают списки отзыва сертификатов (CRL12). Эти сертификаты CA и EE называют сертификатами ресурсов, для них используются профили [RFC6487]. [RFC6480] предусматривает использование сертификатов ресурсов для обеспечения проверки манифестов [RFC6486] и полномочий источника маршрута (ROA13) [RFC6482]. ROA и манифесты включают сертификаты ресурсов, используемые для их проверки.

В этот документе определяется другой тип сертификата ресурса, названный сертификатом маршрутизатора BGPsec. Цель введения этих сертификатов описана в разделе 1 и попадает в область действия, определенную в [RFC6484]. Введение сертификатов BGPsec Router оказывает минимальное влияние на RPKI CA, поскольку профиль сертификатов RPKI CA и CRL не изменяется (т. е. соответствует заданному в [RFC6487]). Кроме того, алгоритмы, используемые для генерации сертификатов RPKI CA, которые служат для эмиссии сертификатов BGPsec Router и CRL, которые требуются для проверки пригодности сертификатов BGPsec Router, остаются неизменными (т. е. соответствуют спецификации [RFC7935]). Единственное влияние заключается в том, что от RPKI CA требуется возможность обработки профилированных запросов сертификатов (см. параграф 3.2), подписанных с использованием алгоритмов [RFC8208]. Сертификаты BGPsec Router используются лишь для проверки подписи в запросе сертификата BGPsec (их обрабатывают только CA) и подписи в сообщениях BGPsec UPDATE [RFC8205] (их обрабатывают только маршрутизаторы BGPsec). Сертификаты BGPsec Router не применяются для обработки манифестов и ROA, а также для проверки подписей в сертификатах и CRL.

В этом документе перечислены лишь различия между данным профилем и [RFC6487]. Отметим, что сертификаты BGPsec Router являются сертификатами EE и поэтому не влияют на процедуру смены алгоритма, описанную в [RFC6916].

3. Обновления RFC 6487

3.1. Поля сертификата BGPsec Router

Сертификат BGPsec Router согласуется с профилем [RFC6487] с учетом изменений, приведенных в этом разделе. Таким образом, это приемлемый сертификат открытого ключа X.509, соответствующий профилю PKIX [RFC5280]. Различия между этим профилем и профилем [RFC6487] указаны в этом разделе.

3.1.1. Subject

Поддерживаемыми вариантами представления общего имени (common name) являются printableString и UTF8String. Для сертификатов BGPsec Router рекомендуется в качестве общего имени применять строку «ROUTER-», за которой следует 32-битовое значение ASN [RFC3779], представленное восемью 16-ричными цифрами, а в качестве атрибута порядкового номера — 32-битовое значение BGP Identifier [RFC4271] (т. е. ID) в форме восьми 16-ричных цифр. Если имеется не один номер ASN, выбор включаемого в общее имя значения отдается на откуп эмитенту (Issuer). Если один и тот же сертификат выпускается для множества маршрутизаторов (и, следовательно, все эти маршрутизаторы используют общий секретный ключ), выбор значения ID, используемого в общем имени также определяет эмитент.

3.1.2. Subject Public Key Info

См. параграф 3.1 в [RFC8208].

3.1.3. Поля расширений BGPsec Router Certificate версии 3

3.1.3.1. Базовые ограничения

Узлы BGPsec являются конечными элементами (EE), следовательно, расширение Basic Constraints присутствовать не должно, как указано в [RFC6487].

3.1.3.2. Расширение EKU

Сертификаты BGPsec Router должны включать расширение EKU14. Как указано в [RFC6487], это расширение не должно обозначаться критическим. Данный документ определяет одно расширение EKU для сертификатов BGPsec Router.

     id-kp OBJECT IDENTIFIER ::=
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) kp(3) }

     id-kp-bgpsec-router OBJECT IDENTIFIER ::= { id-kp 30 }

Маршрутизатор BGPsec должен требовать наличия расширения EKU в полученном сертификате BGPsec Router. При наличии множества значений KeyPurposeId маршрутизатору BGPsec не требуется распознавать все эти значения, если присутствует требуемое значение KeyPurposeId. Маршрутизаторы BGPsec должны отвергать сертификаты без расширения BGPsec Router EKU даже при наличии в них anyExtendedKeyUsage OID, определенного в [RFC5280].

3.1.3.3. Subject Information Access

Это расширение не применяется в сертификатах BGPsec Router и должно быть опущено.

3.1.3.4. IP Resources

Это расширение не применяется в сертификатах BGPsec Router и должно быть опущено.

3.1.3.5. AS Resources

Каждый сертификат BGPsec Router должен включать расширение AS Resources в соответствии с параграфом 4.8.11 [RFC6487]. Расширение AS Resources должно включать один или множество номеров ASN, а задание «наследуемых» элементов недопустимо.

3.2. Профиль запроса сертификата BGPsec Router

Соответствует разделу 6 в [RFC6487]. Различия между данным профилем и [RFC6487] перечислены ниже.

  • Расширение Basic Constraints.

    При наличии этого расширения CA недопустимо принимать во внимание установленное значение cA = TRUE.

  • Расширение EKU.

    При наличии этого расширения должно присутствовать id-kp-bgpsec-router (см. параграф 3.1.3.2), а CA должен выполнять запрос для id-kp-bgpsec-router.

  • Расширение SIA15.

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

  • Поле SubjectPublicKeyInfo задано в [RFC8208].

  • Запрос подписывается по алгоритму, заданному в [RFC8208].

3.3. Проверка пригодности сертификата BGPsec Router

Проверка пригодности сертификатов BGPsec Router идентичная процедуре валидации, описанной в разделе 7 [RFC6487] (и всех RFC, обновляющих эту процедуру), с перечисленными ниже изменениями. Например, на этапе 3 (критерий, указанный в параграфе 7.2 [RFC6487]) слова «сертификат содержит все поля, которые должны присутствовать» относится к полям, требуемым этой спецификацией.

Ниже перечислены различия:

  • сертификаты BGPsec Router должны включать расширение BGPsec Router EKU, определенное в параграфе 3.1.3.2;

  • в сертификаты BGPsec Router недопустимо включать расширение SIA;

  • в сертификаты BGPsec Router недопустимо включать расширение IP Resources;

  • сертификаты BGPsec Router должны включать расширение AS Resources;

  • сертификаты BGPsec Router должны включать поле subjectPublicKeyInfo, описанное в [RFC8208].

Примечание. BGPsec RP будут требоваться для поддержки алгоритмов [RFC8208], которые используются для проверки пригодности подписей BGPsec, а также алгоритмов [RFC7935], которые требуются для проверки пригодности подписей сертификатов BGPsec, сертификатов RPKI CA и списков отзыва RPKI CRL.

3.4. Сертификаты маршрутизаторов и функции подписи в RPKI

Как указано в разделе 1, основное применение сертификатов BGPsec Router в RPKI происходит в контексте сертификации путей AS в протоколе BGPsec.

Секретный ключ, связанные с сертификатом EE маршрутизатора, может использоваться многократно для генерации подписей во множестве экземпляров Signature Segment атрибута BGPsec_PATH [RFC8205]. Т. е. сертификат BGPsec Router используется для проверки пригодности множества подписей.

Сертификаты BGPsec Router сохраняются в репозитории CA-эмитента и репозитории, соответствующие [RFC6481], должны использовать для сертификатов файлы с расширением имени .cer.

4. Замечания по устройству

Профиль сертификатов BGPsec Router основан на профиле Resource Certificate, определенном в [RFC6487]. В результате многие из описанных здесь вариантов выбора являются отражением выбора, сделанного в предшествующей работе. Для более полного понимания вариантов выбора читателю рекомендуется обратиться к [RFC6484].

Удостоверяющие центры CA требуются политикой сертификации (CP16) [RFC6484] для выпуска подобающим образом сформированных сертификатов BGPsec Router независимо от того, что присутствует в запросе сертификата, обеспечивая этим запросам некоторую гибкость.

  • Сертификаты BGPsec Router всегда являются сертификатами EE, следовательно, запрос на выпуск сертификата CA приводит к выпуску сертификата EE;

  • Сертификаты BGPsec Router всегда являются сертификатами EE, следовательно, запрос для расширения Key Usage значений keyCertSign и cRLSign будет выдавать сертификаты без обоих значений;

  • Сертификаты BGPsec Router всегда включают значение BGPsec Router EKU, следовательно, запросы без этого значения будут возвращать сертификаты со значением;

  • Сертификаты BGPsec Router никогда не включают расширение SIA, следовательно, запросы сертификата с таким расширением будут возвращать сертификаты без расширения.

Отметим, что такое поведение аналогично включению удостоверяющим центром CA расширения AS Resources в выпускаемые сертификаты BGPsec Router, несмотря на то, что это расширение не указано в запросах.

5. Вопросы реализации

Этот документ разрешает оператору включать список ASN в сертификат BGPsec Router. В данном случае сертификат маршрутизатора станет неприемлемым если любой из номеров ASN удаляется из сертификата любого «вышестоящего» (superior) CA на пути к доверенной привязке. Операторы могут предотвратить такую возможность, выпуская свой сертификат BGPsec Router для каждого отличающегося номера ASN так, что сертификаты маршрутизаторов для ASN, сохранившихся в вышестоящем CA, будут сохраняться действующими.

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

Для данного документа применимы вопросы безопасности, рассмотренные в [RFC6487].

Сертификат BGPsec Router не пройдет проверку пригодности RPKI, определенную в [RFC6487] по причине использования разных криптографических алгоритмов. Следовательно, RP требуется идентифицировать EKU для определения подходящего ограничения Validation.

Сертификат BGPsec Router является расширением RPKI [RFC6480] для работы с маршрутизаторами. Он является основой построения BGPsec и применяется для проверки пригодности подписей происхождения BGPsec Signature Segment в подписанных сегментах пути [RFC8205]. Таким образом, его важной защитной функцией является защищенная привязка одного или множества номеров ASN к открытому ключу, согласованная с иерархией выделения/присваивания RPKI.

Функции хэширования [RFC8208] применяются при генерации двух расширений идентификаторов ключей (т. е. Subject Key Identifier и Issuer Key Identifier), включаемых в сертификаты BGPsec. Однако, как отмечено в [RFC6818], устойчивость к коллизиям не является требуемым свойством односторонних хэш-функций при их использовании для генерации идентификаторов ключей. Несмотря на то, что коллизии возникают редко, они остаются возможными и оператора следует предупреждать о возникновении такого конфликта. Коллизия значений Subject Key Identifier может приводить к выбору из кэша неподходящего сертификата и последующему отказу при проверке подписи.

7. Согласование с IANA

Этот документ использует два значения OID из реестра SMI для PKIX. Одно значение служит для модуля ASN.1 [X680] [X690] в Приложении A и берется из реестра IANA «SMI Security for PKIX Module Identifier» (id-mod-bgpsec-eku). Другое применяется для BGPsec Router EKU, определенного в параграфе 3.1.3.2 и Приложении A и берется из реестра IANA «SMI Security for PKIX Extended Key Purpose» (id-kp-bgpsec-router). Эти значения OID были выделены до того, как управление PKIX Arc было передано IANA. Ссылки в этих реестрах были обновлены в соответствии с данным документом.

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

8.1. Нормативные документы

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC3779] Lynn, C., Kent, S., and K. Seo, «X.509 Extensions for IP Addresses and AS Identifiers», RFC 3779, DOI 10.17487/RFC3779, June 2004, <https://www.rfc-editor.org/info/rfc3779>.

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, DOI 10.17487/RFC4271, January 2006, <https://www.rfc-editor.org/info/rfc4271>.

[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 5280, DOI 10.17487/RFC5280, May 2008, <https://www.rfc-editor.org/info/rfc5280>.

[RFC6481] Huston, G., Loomans, R., and G. Michaelson, «A Profile for Resource Certificate Repository Structure», RFC 6481, DOI 10.17487/RFC6481, February 2012, <https://www.rfc-editor.org/info/rfc6481>.

[RFC6486] Austein, R., Huston, G., Kent, S., and M. Lepinski, «Manifests for the Resource Public Key Infrastructure (RPKI)», RFC 6486, DOI 10.17487/RFC6486, February 2012, <https://www.rfc-editor.org/info/rfc6486>.

[RFC6487] Huston, G., Michaelson, G., and R. Loomans, «A Profile for X.509 PKIX Resource Certificates», RFC 6487, DOI 10.17487/RFC6487, February 2012, <https://www.rfc-editor.org/info/rfc6487>.

[RFC7935] Huston, G. and G. Michaelson, Ed., «The Profile for Algorithms and Key Sizes for Use in the Resource Public Key Infrastructure», RFC 7935, DOI 10.17487/RFC7935, August 2016, <https://www.rfc-editor.org/info/rfc7935>.

[RFC8174] Leiba, B., «Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words», BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8205] Lepinski, M., Ed., and K. Sriram, Ed., «BGPsec Protocol Specification», RFC 8205, DOI 10.17487/RFC8205, September 2017, <https://www.rfc-editor.org/info/rfc8205>.

[RFC8208] Turner, S. and O. Borchert, «BGP Algorithms, Key Formats, and Signature Formats», RFC 8208, DOI 10.17487/RFC8208, September 2017, <https://www.rfc-editor.org/info/rfc8208>.

[X680] ITU-T, «Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation», ITU-T Recommendation X.680, ISO/IEC 8824-1, August 2015, <https://www.itu.int/rec/T-REC-X.680/en>.

[X690] ITU-T, «Information technology — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)», ITU-T Recommendation X.690, ISO/IEC 8825-1, August 2015, <https://www.itu.int/rec/T-REC-X.690/en>.

8.2. Дополнительная литература

[RFC4272] Murphy, S., «BGP Security Vulnerabilities Analysis», RFC 4272, DOI 10.17487/RFC4272, January 2006, <https://www.rfc-editor.org/info/rfc4272>.

[RFC5123] White, R. and B. Akyol, «Considerations in Validating the Path in BGP», RFC 5123, DOI 10.17487/RFC5123, February 2008, <https://www.rfc-editor.org/info/rfc5123>.

[RFC5492] Scudder, J. and R. Chandra, «Capabilities Advertisement with BGP-4», RFC 5492, DOI 10.17487/RFC5492, February 2009, <https://www.rfc-editor.org/info/rfc5492>.

[RFC6480] Lepinski, M. and S. Kent, «An Infrastructure to Support Secure Internet Routing», RFC 6480, DOI 10.17487/RFC6480, February 2012, <https://www.rfc-editor.org/info/rfc6480>.

[RFC6482] Lepinski, M., Kent, S., and D. Kong, «A Profile for Route Origin Authorizations (ROAs)», RFC 6482, DOI 10.17487/RFC6482, February 2012, <https://www.rfc-editor.org/info/rfc6482>.

[RFC6484] Kent, S., Kong, D., Seo, K., and R. Watro, «Certificate Policy (CP) for the Resource Public Key Infrastructure (RPKI)», BCP 173, RFC 6484, DOI 10.17487/RFC6484, February 2012, <https://www.rfc-editor.org/info/rfc6484>.

[RFC6818] Yee, P., «Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 6818, DOI 10.17487/RFC6818, January 2013, <https://www.rfc-editor.org/info/rfc6818>.

[RFC6916] Gagliano, R., Kent, S., and S. Turner, «Algorithm Agility Procedure for the Resource Public Key Infrastructure (RPKI)», BCP 182, RFC 6916, DOI 10.17487/RFC6916, April 2013, <https://www.rfc-editor.org/info/rfc6916>.

Приложение A. Модуль ASN.1

   BGPSECEKU { iso(1) identified-organization(3) dod(6) internet(1)
     security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-bgpsec-eku(84) }

     DEFINITIONS EXPLICIT TAGS ::=
     BEGIN
     -- EXPORTS ALL --
     -- IMPORTS NOTHING --
     -- OID Arc --
     id-kp  OBJECT IDENTIFIER  ::= {
       iso(1) identified-organization(3) dod(6) internet(1)
       security(5) mechanisms(5) pkix(7) kp(3) }
     -- BGPsec Router Extended Key Usage --
     id-kp-bgpsec-router OBJECT IDENTIFIER ::= { id-kp 30 }
     END

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

Авторы выражают свою признательность Geoff Huston, George Michaelson и Robert Loomans за их работу над [RFC6487], послужившим базой. Кроме того, в подготовке этой работы важную роль сыграли усилия Matt Lepinski. Спасибо также Rob Austein, Roque Gagliano, Richard Hansen, Geoff Huston, David Mandelberg, Sandra Murphy и Sam Weiler за их рецензии и комментарии.

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

Mark Reynolds

Island Peak Software

328 Virginia Road

Concord, MA 01742

United States of America

Email: mcr@islandpeaksoftware.com

Sean Turner

sn3rd

Email: sean@sn3rd.com

Stephen Kent

Raytheon BBN Technologies

10 Moulton St.

Cambridge, MA 02138

United States of America

Email: kent@alum.mit.edu


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

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

nmalykh@gmail.com

1Autonomous System — автономная система.

2Border Gateway Protocol — протокол граничного шлюза.

3End entity.

4Certification Authority — орган сертификации.

5Resource Public Key Infrastructure.

6Relying Party — зависимая сторона.

7Internet Engineering Task Force.

8Internet Engineering Steering Group.

9AS number.

10Regional Internet Registry.

11Internet Service Provider.

12Certificate Revocation List.

13Route Origin Authorization.

14Extended Key Usage — расширенное использование ключа

15Subject Information Access — доступ к информации субъекта.

16Certificate Policy.

Рубрика: RFC | Комментарии к записи RFC 8209 A Profile for BGPsec Router Certificates, Certificate Revocation Lists, and Certification Requests отключены