Анонс выпуска P4Runtime v1.0

Анонс выпуска P4Runtime v1.0

PDF

Опубликован Antonin Bas и Waqar Mohsin 11 марта 2019 г.

Выпущена спецификация P4Runtime v1.0.0, подготовленная рабочей группой P4 API. Выпуск v1.0.0 включает:

  • определение сервиса RPC — файлы Protocol Buffers (Protobuf), которые определяют формат сообщений, используемых для чтения и записи элементов уровня данных, а также набор RPC, которые могут использоваться для передачи этих сообщений между разделенными клиентом и сервером;

  • полная спецификация семантики сообщений Protobuf.

Что такое P4Runtime и зачем это нужно?

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

P4Runtime пытается решить эту проблему путем определения стандартного, открытого и аппаратно-независимого (для устройств с фиксированной и программируемой функциональностью) API, позволяющего контролировать работу произвольных уровней пересылки P4.

P4Runtime одинаково хорошо подходит для локальных и удаленных уровней управления (независимо от RPC). На рисунке показан типичный вариант развертывания SDN с P4Runtime. В примере коммутатор использует операционную системы Stratum на основе Open Networking Linux (ONL).


P4Runtime не зависит от конвейера обработки. При добавлении новых функций на уровне пересылки P4 интерфейс P4Runtime API не меняется и не требуется заново компилировать программы уровня управления (и даже перезагружать его).

Для достижения независимости от конвейера P4Runtime отделяет формат обмена сообщениями Protobuf от формата данных, передаваемых в этих сообщениях, так же, как gNMI определяет фиксированный сервис gRPC и фиксированный формат сообщений Protobuf, которые могут применяться для передачи любых структурированных в форме дерева данных, часто моделируемых с помощью YANG. В P4Runtime сама модель данных описывается сообщением Protobuf, называемым P4Info, которое выводится из программы P4. С другой стороны интерфейс является фиксированным и не зависит от программы P4, что способствует расширяемости (т. е. добавлению протоколов и действий) и оптимизирует реализации клиентов и серверов.


В приведенной выше таблице сообщение P4Info (средняя колонка) является моделью данных, задающей содержимое сообщений P4Runtime (справа). Например, запись P4Info для ipv4_lpm диктует, что каждая запись сопоставления, добавляемая в таблицу, обеспечивает должным образом форматированные значения для двух полей сопоставления (hdr.ipv4.dstAddr и hdr.meta.vrf_id) и должна выбирать из 2 действий (drop или set_nhop).

P4Runtime v1.0.0 — результат взаимодействия профессионалов

Разработка P4Runtime началась в середине 2016 г. и ускорилась в 2017 после создания рабочей группы P4 API. Параллельно разрабатывалось множество реализаций и с 2017 г. результаты были показаны на разных мероприятиях.

  • В ноябре 2017 г Google Cloud, Barefoot Networks и ONF продемонстрировали первую физическую сеть на базе P4Runtime во время конгресса SDN NFV World Congress (видео).

  • В феврале 2018 г. на MWC фонд ONF продемонстрировал фабрику коммутации от нескольких производителей, управляемую контроллером ONOS через P4Runtime.

  • В марте 2018 г. на саммите OCP компания Google показала видео о реализации P4Runtime на основе коммутатора с ONL, управляемого контроллером P4 SDN (видео).

  • В ноябре 2018 г. на ONS Europe и в декабре 2018 г. на ONF Connect фонд ONF показал фабрику коммутации от нескольких производителей, управляемую контроллером ONOS с использованием P4Runtime и OF-DPA. Коммутаторы (white-box), управляемые P4Runtime, работали на основе ОС Stratum.

После двух лет разработок и прототипирования выпуск P4Runtime 1.0.0 достиг готовности. Этот выпуск обеспечивает гарантии совместимости с прежними выпусками — все новые библиотеки будут совместимы с предшественниками, если только не будет увеличен старший номер (с 1 до 2). Предполагается, что такое увеличение будет происходить редко и, следуя рекомендациям Google для версий облачных API, старший номер версии кодируется в имени пакета Protobuf для устранения возможности рассогласования версий между клиентом и сервером, а также обеспечения конечным точкам возможности одновременно поддерживать несколько версий.

Представление четкого и однозначного интерфейса API с полной спецификацией облегчит разработчикам программ и оборудования реализацию совместимой продукции.

Что интересного в P4Runtime?

  • Арбитраж. Интерфейс P4Runtime позволяет подключить несколько контроллеров к серверу P4Runtime на устройстве для обеспечения резервирования и отказоустойчивости. Наличие нескольких контроллеров позволяет одному или нескольким работать в режиме резервного с переключением при отказе основного.

  • Разделение ролей. P4Runtime поддерживает совместное использование уровня данных P4 с разными ведущими (возможно и резервными) контроллерами. Это делает возможными неоднородные системы с комбинацией локального и одного или нескольких удаленных уровней управления (например, локальный для L2 и удаленный для L3).

  • Настраиваемость уровня данных. Независимая от конвейера природа P4Runtime позволяет «вталкивать» совершенно новый уровень пересылки (с другим P4Info) через сам интерфейс. Это позволяет уровню управления использовать программируемость уровня данных, когда она поддерживается.

  • Ввод-вывод пакетов. P4Runtime поддерживает потоки пакетов между клиентом и сервером благодаря двухстороннему потоку gRPC. К пакету можно привязать произвольные метаданные (согласно P4Info).

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

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

  • Расширяемость архитектуры. P4Runtime использует любые сообщений protobuf для поддержки произвольных фирменных расширений, которые могут оставаться закрытыми. Новые сообщения Protobuf могут определяться для настройки внешних или потоковых уведомлений между сервером и клиентами.

Могут P4Runtime и SAI дополнять друг друга?

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

Считается, что SAI и P4Runtime хорошо дополняют друг друга. В проекте flexsai уже реализовано использование описания P4 для SAI API с целью создания «соглашения» между уровнями управления и пересылки. Но flexsai базируется на генерации API вместо предоставления приложениям независимого от конвейера интерфейса и не поддерживает функциональность RPC.

Предполагается, что взаимодополняющая природа SAI и P4Runtime может использоваться для расширения P4Runtime в SAI.

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

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

nmalykh@protokols.ru

Рубрика: SDN, Новости, Сетевое программирование | Комментарии к записи Анонс выпуска P4Runtime v1.0 отключены

RFC 8545 Well-Known Port Assignments for the One-Way Active Measurement Protocol (OWAMP) and the Two-Way Active Measurement Protocol (TWAMP)

Internet Engineering Task Force (IETF)                    A. Morton, Ed.
Request for Comments: 8545                                     AT&T Labs
Updates: 4656, 5357                                       G. Mirsky, Ed.
Category: Standards Track                                      ZTE Corp.
ISSN: 2070-1721                                               March 2019

Well-Known Port Assignments for the One-Way Active Measurement Protocol (OWAMP) and the Two-Way Active Measurement Protocol (TWAMP)

Назначение общеизвестных портов для протоколов OWAMP и TWAMP

PDF

Аннотация

Этот документ содержит мотивацию и описание переназначения общеизвестных портов для протоколов односторонних (One-Way Active Measurement Protocol или OWAMP) и двухсторонних активных измерений (Two-Way Active Measurement Protocol или TWAMP) при управлении и выполнении измерений. Документ разъясняет также состав и смысл названий для этих стандартов в отрасли.

Этот документ обновляет RFC 4656 и RFC 5357 в части назначения общеизвестных портов UDP, а также уточняет полный состав протоколов OWAMP и TWAMP для отрасли.

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

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

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

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

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

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

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

1. Введение

Рабочая группа IETF IPPM (IP Performance Metrics — параметры производительности IP) разработала исходный протокол OWAMP, описанный в [RFC4656]. Продолжение работы по поддержке тестирования привело к разработке протокола TWAMP, описанного в [RFC5357]. Оба протокола OWAMP и TWAMP требуют реализации протоколов управления и согласования режима (OWAMP-Control и TWAMP-Control) на основе надёжного транспорта TCP (включая настройку защиты и вывод ключей). Протоколы управления обеспечивают настройку и поддержку сеансов тестирования с применением связанных протоколов тестирования (OWAMP-Test и TWAMP-Test) с транспортом UDP.

IETF признает значимость выделения общеизвестного порта UDP для протоколов OWAMP-Test и TWAMP-Test, а также возможность выполнить это путём переназначения портов.

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

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

3. Область действия

У этого документа две задачи (1) заново выделить общеизвестные порты UDP для протоколов тестирования и соответствующих документов Standards Track (OWAMP и TWAMP) и (2) уточнить назначение и состав названий протоколов для отрасли. Документ обновляет [RFC4656] и [RFC5357] в части назначения общеизвестных портов UDP.

4. Определения и основы

В этом документе определены основные требования и уточнён требуемый состав протоколов OWAMP и TWAMP Standards Track.

OWAMP-Control

Протокол, заданный в разделе 3 [RFC4656].

OWAMP-Test

Протокол, заданный в разделе 4 [RFC4656].

Описание OWAMP приведено в выдержке из параграфа 1.1 в [RFC4656]: «OWAMP фактически состоит из двух связанных протоколов – OWAMP-Control и OWAMP-Test». Похожее предложение приведено в разделе 2 [RFC4656]. Во избежание сомнений реализация OWAMP-Control и OWAMP-Test является обязательной для Standards Track OWAMP, как указано в [RFC4656] (в согласованной трактовке термина «состоит» в разных словарях).

TWAMP-Control

Протокол, заданный в разделе 3 [RFC5357].

TWAMP-Test

Протокол, заданный в разделе 4 [RFC5357].

ОписаниеTWAMP приведено в выдержке из параграфа 1.1 в [RFC5357]: «Подобно OWAMP [RFC4656], протокол TWAMP фактически состоит из двух связанных протоколов – TWAMP-Control и TWAMP-Test». Во избежание сомнений реализация TWAMP-Control и TWAMP-Test является обязательной для Standards Track TWAMP, как указано в [RFC5357] (в согласованной трактовке термина «состоит» в разных словарях).

Идея TWAMP Light описана в Приложении I («TWAMP Light (Informative)») к [RFC5357]. TWAMP Light включает неуказанный протокол управления в сочетании с протоколом TWAMP-Test protocol. В [RFC5357] идея TWAMP Light была представлена в Приложении I, поскольку TWAMP Light не соответствует требованиям к протоколам IETF (нет спецификации для согласования форм работы и обязательных для реализации функций защиты), как указано в Приложении A к этому документу. См. также [LarsAD] и [TimDISCUSS].

Поскольку идея TWAMP Light включает TWAMP-Test, считается разумным в будущих версиях TWAMP-Test применять общеизвестный порт UDP (указан в этом документе). Очевидно, что идея TWAMP Light предусматривает множество компонентов и коммуникационных возможностей за рамками TWAMP-Test (например, реализацию требований безопасности), иначе Приложение I к [RFC5357] состояло бы из одного предложения (приравнивание TWAMP Light к TWAMP-Test).

5. Общеизвестные номера портов

Исходно для протоколов управления, являющихся важными компонентами Standards Track OWAMP и TWAMP, были выделены общеизвестные порты TCP и UDP. Поскольку для OWAMP-Control и TWAMP-Control требуется транспорт TCP, эти протоколы не могут работать с назначенными изначально портами UDP. Однако сессии OWAMP-Test и TWAMP-Test используют транспорт UDP.

В соответствии с этим документом агентство IANA переназначило общеизвестный порт UDP для протокола тестирования вместо протокола управления (см. раздел 7). Использование этого порта UDP необязательно для Standards Track OWAMP и TWAMP. Оно может упростить некоторые операции за счёт доступности общеизвестного порта для протоколов тестирования или при использовании этого порта по умолчанию в будущих спецификациях, включающих TWAMP-Test. Например, спецификация [TR-390] определяет тестирование на пользовательских границах (customer edge) сетей IP и соответствующие реализации выиграют от предоставления общеизвестного порта UDP.

5.1. Влияние на протокол TWAMP-Control

В параграфе 3.5 [RFC5357] подробной описан процесс согласования номера Receiver Port, через который TWAMP Session-Reflector будет передавать и принимать пакеты TWAMP-Test (см. цитату ниже). Control-Client, действующий от имени Session-Sender, предлагает номер Receiver Port из диапазона Dynamic range [RFC6335].

Receiver Port указывает желаемый порт UDP, в который Session-Sender будет направлять пакеты TWAMP-Test (порт, запрошенный у Session-Reflector для приёма пакетов). Receiver Port также является портом UDP, из которого Session-Reflector будет передавать пакеты TWAMP-Test (Session-Reflector использует один порт UDP для передачи и приёма).

Возможно, что предложенный номер Receiver Port будет недоступен, например, выделен для другой сессии. Для таких случаев этот документ обновляет последний абзац параграфа 3.5 в [RFC5357] в соответствии с Erratum ID 1587 (https://www.rfc-editor.org/errata/eid1587), как показано ниже.

… Server на стороне Session-Reflector может предложить для этой сессии доступный порт в поле Port. Control-Client воспринимает этот порт и создаёт сообщение Session-Request с подходящими параметрами или не принимает его и использует поле Accept для информирования Control-Client об отказе или ошибке (в этом случае серверу недопустимо предлагать другой порт и поле Port должно иметь значение 0).

Control-Client, поддерживающий выделенный TWAMP-Test Receiver Port (раздел 7), может использование этого порта в команде Request-TW-Session. Если Server не поддерживает выделенный TWAMP-Test Receiver Port, он передаёт доступный номер порта в сообщении Accept-Session с полем Accept = 0. таким образом, применение выделенного порта TWAMP Receiver Port совместимо с имеющимися решениями TWAMP-Control на основе [RFC5357]. Разумеется, использование порта UDP из диапазона Dynamic Ports [RFC6335] поможет избежать ситуаций, когда Control-Client или Server уже использует предложенный порт.

5.2. Влияние на протокол OWAMP-Control

Как указано выше, клиент OWAMP-Control поддерживающий использование выделенного OWAMP-Test Receiver Port (раздел 7), может запросить применение этого порта в команде Request-Session. Если Server не поддерживает выделенный OWAMP-Test Receiver Port (или порт недоступен), он передаёт другой номер порта в сообщении Accept-Session с полем Accept = 0. Дальнейший обмен происходит в соответствии со спецификацией.

5.3. Влияние на протоколы OWAMP-Test и TWAMP-Test

Протоколы OWAMP-Test и TWAMP-Test могут служить для измерения параметров производительности IP в средах с несколькими равноценными путями (Equal-Cost Multipath или ECMP). Хотя алгоритмы распределения потоков IP по доступным путям не стандартизованы, чаще всего для этого используется квинтет из адресов IP отправителя и получателя, типа протокола и номеров портов у отправителя и получателя. При попытке отслеживать разные пути в сети ECMP достаточно менять лишь один из этих параметров. Таким образом, повторное выделение порта не окажет негативного влияния на возможность организации одновременных тестовых сессий OWAMP/TWAMP между одной парой точек для разных путей в сети ECMP с выделенным заново номером порта UDP в качестве Receiver Port, так как использование этого порта является необязательным.

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

Вопросы безопасности, связанные с активными измерениями на «живых» путях, применимы и здесь (см. [RFC4656] и [RFC5357]).

В части приватности вовлечённых в тестирование (в том числе тех, чей трафик измеряется) объем доступных для отслеживания конфиденциальных сведений существенно сокращается при использовании активных методов, рассматриваемых здесь. С пассивными наблюдениями пользовательского трафика в измерительных целях связано много рисков приватности. Читателям рекомендуется обратиться к рассмотрению вопросов безопасности при крупномасштабных измерениях производительности широкополосных сетей (Large-Scale Measurement of Broadband Performance или LMAP) [RFC7594], где рассмотрены активные и пассивные измерения.

Зарегистрированный порт UDP в качестве Receiver Port для OWAMP-Test и TWAMP-Test может стать целью атак с отказом в обслуживании (denial of service или DoS) или перехвата и изменения с участием человека (man-in-the-middle или MITM). Для повышения защиты от DoS-атак рекомендуется:

  • фильтровать доступ к OWAMP/TWAMP Receiver Port с помощью списков контроля доступа;

  • использовать не маршрутизируемые (глобально) адреса IP для OWAMP/TWAMP Session-Reflector.

В MITM-атаке злоумышленник пытается изменять пакеты OWAMP-Test/TWAMP-Test для искажения результатов измерений. Однако реализация может использовать режим с проверкой подлинности (authenticated mode) для обнаружения подмены данных. Кроме того, реализация может использовать режим с шифрованием (encrypted mode) для предотвращения просмотра и незаметного изменения пакетов OWAMP-Test и TWAMP-Test.

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

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

Агентство IANA заново выделило два номера портов UDP из диапазона System Ports в реестре Service Name and Transport Protocol Port Number Registry [RFC6335]. В частности, заново выделены порты UDP 861 и 862, как показано ниже, с сохранением выделенных портов TCP. Для этих портов также изменены назначившее и контактное лицо (как для UDP, так и для TCP) с указанием IESG и IETF Chair, соответственно.

 

Имя службы

Номер порта

Транспортный протокол

Описание

Документ

owamp-control

861

tcp

OWAMP-Control

RFC 4656

owamp-test

861

udp

OWAMP-Test Receiver Port

RFC 8545

twamp-control

862

tcp

TWAMP-Control

RFC 5357

twamp-test

862

udp

TWAMP-Test Receiver Port

RFC 8545

 

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>.

[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>.

[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. Cheshire, «Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry», BCP 165, RFC 6335, DOI 10.17487/RFC6335, August 2011, <https://www.rfc-editor.org/info/rfc6335>.

[RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., Aitken, P., and A. Akhter, «A Framework for Large-Scale Measurement of Broadband Performance (LMAP)», RFC 7594, DOI 10.17487/RFC7594, September 2015, <https://www.rfc-editor.org/info/rfc7594>.

[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. Дополнительная литература

[IPPM-TWAMP-06] Hedayat, K., Krzanowski, R., Yum, K., Morton, A., and J. Babiarz, «A Two-way Active Measurement Protocol (TWAMP)», Work in Progress3, draft-ietf-ippm-twamp-06, December 2007.

[LarsAD] Eggert, L., «Subject: [ippm] AD review: draft-ietf-ippm-twamp-06.txt», message to the ippm mailing list, April 2008, <https://mailarchive.ietf.org/rch/msg/ippm/LzcTPYhPhWhbb5-ncR046XKpnzo>.

[TimDISCUSS] «Tim Polk’s Ballot discuss», July 2008, <https://datatracker.ietf.org/doc/rfc5357/history>.

[TR-390] Broadband Forum, «TR-390: Performance Measurement from IP Edge to Customer Equipment using TWAMP Light», Issue: 1, May 2017, <https://www.broadband-forum.org/technical/download/TR-390.pdf>.

Приложение A. Основы TWAMP Light

В этом информационном приложении указаны основания перевода идеи TWAMP Light в статус информационного приложения к [RFC5357].

Как отмечено в разделе 4, идея TWAMP Light была помещена в Приложение I к [RFC5357] по причине её несоответствия требованиям к протоколам IETF (нет спецификации согласования этой формы работы и обязательных для реализации свойств защиты), как указано ниже.

  • Lars Eggert (Area Director) в рецензии [LarsAD] отметил, что наличие двух вариантов TWAMP (TWAMP Light и Complete TWAMP) требует протокольного механизма для согласования используемого варианта. Отметим, что в этом документе Complete TWAMP называется Standards Track TWAMP. См. комментарий Lars Section 5.2, paragraph 0 в [LarsAD] со ссылкой на [IPPM-TWAMP-06]. Рабочая группа согласилась поместить описание TWAMP Light в Приложение I и упоминать его как «путь поэтапной адаптации TWAMP с реализацией сначала TWAMP-Test».

  • Tim Polk в Ballot discuss от 16.07.2008 [TimDISCUSS] отметил, что TWAMP Light является неполной спецификацией, поскольку ключ, требуемый для режимов с аутентификацией и шифрованием, зависит от ключа TWAMP-Control Session. В Приложение I добавлены требования, учитывающие замечание Tim (см. три последних абзаца Приложения I к [RFC5357]).

Поскольку идея TWAMP Light явно включает протокол TWAMP-Test и другие не определённые средства, Приложение I к [RFC5357] просто описывает идеи об использовании TWAMP-Test вне контекста Standards Track TWAMP.

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

Авторы признательны рабочей группе IPPM за быстрые отклики. Спасибо также Muthu Arul Mozhi Perumal и Luay Jalil за их участие и предложения.

Участники работы

Richard Foote и Luis M. Contreras внесли заметный вклад в этот документ.

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

Al Morton (editor)
AT&T Labs
200 Laurel Avenue South
Middletown, NJ 07748
United States of America
Phone: +1 732 420 1571
Fax: +1 732 368 1192
Email: acmorton@att.com
 
Greg Mirsky (editor)
ZTE Corp.
Email: gregimirsky@gmail.com

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

nmalykh@protokols.ru

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

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

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

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

RFC 8553 DNS AttrLeaf Changes: Fixing Specifications That Use Underscored Node Names

Internet Engineering Task Force (IETF)                        D. Crocker
Request for Comments: 8553                   Brandenburg InternetWorking
BCP: 222                                                      March 2019
Updates: 2782, 3263, 3529, 3620, 3832,
         3887, 3958, 4120, 4227, 4386,
         4387, 4976, 5026, 5328, 5389,
         5415, 5518, 5555, 5617, 5679,
         5766, 5780, 5804, 5864, 5928,
         6120, 6186, 6376, 6733, 6763,
         7208, 7489, 8145
Category: Best Current Practice
ISSN: 2070-1721

DNS AttrLeaf Changes: Fixing Specifications That Use Underscored Node Names

Изменения DNS AttrLeaf в спецификациях с именами узлов с подчёркиванием

PDF

Аннотация

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

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

Документ относится к категории Internet Best Current Practice.

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

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

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

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

Исходно применение символа подчёркивания в качестве префикса доменного имени [RFC1035], создающего пространство ограниченной интерпретации записей о ресурсах было определено без реестра IANA [IANA-reg]. Это привело к несогласованным действиям по созданию имён, выведенных из одного пространства имён. Реестр таких имён сейчас определён (раздел 4 в [RFC8552]) и рассмотрены основы применения имён с символом подчёркивания [RFC8552].

Базовая модель регистрации имён с символом подчёркивания, как указано в [RFC8552], состоит в том, что каждая запись уникальна как комбинация типа записи и «глобального» (верхнего уровня) имени узла с символом подчёркивания, т. е. ближайшего в корню DNS имени с символом подчеркивания.

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

Кроме того, документы, определяющие записи о ресурсах DNS SRV [RFC2782] и URI [RFC7553] DNS, содержат меташаблоны для назначения имён с подчёркиванием, частично основанные на отдельных реестрах [RFC6335]. Для той части, которая определяет глобальное (верхнего уровня) имя узла с подчёркиванием, это закрепляет несогласованное именование с символом подчёркивания отдельными спецификациями из того же пространства имён. Данный документ устраняет это, предоставляя детальный пересмотр спецификация SRV и URI для приведения их в соответствие с единым интегрированным реестром Underscored and Globally Scoped DNS Node Names.

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

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

2. Использование RRset с подчёркиванием в спецификациях

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

2.1. TXT RRset

Примечание. Документы этой категории включают [RFC5518], [RFC5617], [RFC6120], [RFC6376], [RFC6763], [RFC7208], [RFC7489].

В этом параграфе представлен базовый подход к внесению изменений в имеющиеся спецификации, определяющие прямое использование имён с символом подчёркивания при определении области действия TXT RRset. Представлены сведения, требуемые для приспособления таких спецификаций в использованию реестра IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Таким образом, этот подход означает как обновление имеющихся спецификаций, так и рекомендации по внесению изменений при пересмотре документов.

Для любого документа, задающего использование TXT RRset под одним или несколькими именами с подчёркиванием, глобальное имя узла предполагается зарегистрированным в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Предпринята попытка найти имеющиеся документы, в которых это сделано, зарегистрировать глобальные имена с символом подчёркивания и указать их в исходном списке имён, включённых в реестр.

Для публичных спецификаций, определяющих применение TXT RRset и использующих имя с символом подчёркивания, ниже приведён шаблон текста, который может быть включён в раздел «Взаимодействие с IANA (IANA Considerations).

В соответствии с [RFC8552], пожалуйста добавьте приведённую ниже запись в реестр Underscored and Globally Scoped DNS Node Names.

Таблица . Запись реестра Underscored and Globally Scoped DNS Node Names для TXT RR.

 

Тип RR

_Имя узла

Документ

TXT

_{имя узла DNS}

{ссылка на документ с дополнением}

 

2.2. SRV RRset

Примечание. Документы этой категории включают [RFC3263], [RFC3529], [RFC3620], [RFC3832], [RFC3887], [RFC3958], [RFC4120], [RFC4227], [RFC4386], [RFC4387], [RFC4976], [RFC5026], [RFC5328], [RFC5389], [RFC5415], [RFC5555], [RFC5679], [RFC5766], [RFC5780], [RFC5804], [RFC5864], [RFC5928], [RFC6186].

В спецификации записи SRV [RFC2782] задан шаблон для использования имён с символом подчёркивания. Глобальное имя характеризуется как ссылка на protocol, связанный с использованием SRV RRset.

В этом параграфе представлен базовый подход к внесению изменений в имеющиеся спецификации, определяющие использование SRV RRset. Представлены сведения, требуемые для приспособления таких спецификаций в использованию реестра IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Таким образом, этот подход означает как обновление имеющихся спецификаций, так и рекомендации по внесению изменений при пересмотре документов.

Для любого документа, задающего использование SRV RRset, глобальное (protocol) имя узла с символом подчёркивания предполагается зарегистрированным в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Предпринята попытка найти имеющиеся документы, в которых это сделано, зарегистрировать глобальные имена с символом подчёркивания и указать их в исходном списке имён, включённых в реестр.

Для публичных спецификаций, определяющих применение SRV RRset и использующих имя с символом подчёркивания, ниже приведён шаблон текста для регистрации глобальных имён (ближайших к корню) с подчёркиванием, который может быть включён в раздел «Взаимодействие с IANA (IANA Considerations).

В соответствии с [RFC8552], пожалуйста добавьте приведённую ниже запись в реестр Underscored and Globally Scoped DNS Node Names.

Таблица . Запись реестра Underscored and Globally Scoped DNS Node Names для SRV RR.

 

Тип RR

_Имя узла

Документ

SRV

_{имя узла DNS protocol}

{ссылка на документ с дополнением}

 

2.3. URI RRset

В спецификации записи URI [RFC7553] задан шаблон для использования имён с символом подчёркивания. Глобальное имя характеризуется как именование протокола (protocol), связанного с применением URI RR, или обращение последовательности Enumservice [RFC6117].

В этом параграфе представлен базовый подход к внесению изменений в имеющиеся спецификации, определяющие использование URI RRset. Представлены сведения, требуемые для приспособления таких спецификаций в использованию реестра IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Таким образом, этот подход означает как обновление имеющихся спецификаций, так и рекомендации по внесению изменений при пересмотре документов.

Для любого документа, задающего использование URI RRset, глобальное (protocol или Enumservice верхнего уровня) имя узла с символом подчёркивания предполагается зарегистрированным в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552]. Предпринята попытка найти имеющиеся документы, в которых это сделано, зарегистрировать глобальные имена с символом подчёркивания и указать их в исходном списке имён, включённых в реестр.

Для публичных спецификаций, определяющих применение URI RRset и использующих имя с символом подчёркивания, ниже приведён шаблон текста для регистрации глобальных имён (ближайших к корню) с подчёркиванием, который может быть включён в раздел «Взаимодействие с IANA (IANA Considerations).

В соответствии с [RFC8552], пожалуйста добавьте приведённую ниже запись в реестр Underscored and Globally Scoped DNS Node Names.

Таблица . Запись реестра Underscored and Globally Scoped DNS Node Names для URI RR.

 

Тип RR

_Имя узла

Документ

URI

_{имя узла DNS protocol или Enumservice}

{ссылка на документ с дополнением}

 

3. Спецификации шаблонов с символом подчёркивания

3.1. Изменение спецификации SRV

Спецификация доменного имени, под которым появляется запись SRV [RFC2782], включает шаблон использования имён с символом подчёркивания. Глобальное имя с подчёркиванием характеризуется как указывающее протокол, связанный с использованием SRV RR.

В текст [RFC2782] внесены показанные ниже обновления. Следует также отметить, что добавлена нормативная ссылка на RFC 8552 в раздел «Литература» RFC 2782.

Прежнее

Формат SRV RR.

Ниже представлен формат SRV RR, имеющей код типа DNS 33.

_Service._Proto.Name TTL Class SRV Priority Weight Port Target

Proto

Символьное имя желаемого протокола с символом подчёркивания (_) в начале для предотвращения конфликтов с встречающимися на практике метками DNS. Наиболее полезными значениями поля являются в настоящее время _TCP и _UDP, хотя можно использовать любое имя, указанное в Assigned Numbers или применяемое локально (для служб). Регистр символов в Proto не учитывается.

Новое

Формат SRV RR.

Ниже представлен формат SRV RR, имеющей код типа DNS 33.

«_Service._Proto.Name TTL Class SRV Priority Weight Port Target»

_…_

Proto

Символьное имя желаемого протокола с символом подчёркивания в начале (например, _name) в начале для предотвращения конфликтов с встречающимися на практике метками DNS. Наиболее полезными значениями поля являются в настоящее время _TCP и _UDP. Регистр символов в Proto не учитывается.
Имя SRV RRset protocol (глобальное) с символом подчёркивания следует регистрировать в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552].

3.2. Изменение спецификации URI

Спецификация доменного имени ( под которым появляется запись URI [RFC7553]) похожа на спецификацию SRV [RFC2782], хотя в тексте упоминается лишь имя service, а не отличие service от protocol. Кроме того, спецификация URI RR допускает варианты схемы именования с символом подчёркивания:

одна схема соответствует применяемой для SRV с глобальным именем узла с подчёркиванием protocol;

другая схема основана на обращении последовательности Enumservice [RFC6117].

Текст [RFC7553] изменён, как показано ниже. Кроме того, добавлена нормативная ссылка на RFC 8552 в раздел «Литература» RFC 7553.

Прежнее

4.1. Имя, класс и тип владельца

Имя владельца URI подчиняется специальным соглашениям. Подобно SRV RR [RFC2782], в URI RR имеются сведения о службе, указанные в имени владельца. Для кодирования службы в конкретном имени владельца применяются параметры службы. Допускаются параметры, зарегистрированные в реестре IANA Service Name and Transport Protocol Port Number Registry [RFC6335] или в качестве Enumservice [RFC6117]. Порядок параметров Enumservice Registration меняется на обратный (субтипы перед типом) с добавлением в начало символа подчёркивания (_) и размещением перед именем владельца в отдельных метках. Символ подчёркивания добавляется перед параметрами службы для предотвращения конфликтов с встречающимися на практике метками DNS и порядок меняется на обратный, чтобы при необходимости можно было передавать полномочия различным зонам (и, следовательно, провайдерам DNS).

Предположим, например, что выполняется поиск URI службы с ENUM Service Parameter «A:B:C» для хоста example.com. Запрос будет иметь вид (QNAME,QTYPE)=(«_C._B._A.example.com»,»URI»). В качестве другого примера рассмотрим поиск URI службы с Service Name «A» и Transport Protocol «B» для хоста example.com. Запрос будет иметь вид (QNAME,QTYPE)=(«_A._B.example.com»,»URI»).

Новое

4.1. Имя, класс и тип владельца

Имя владельца URI подчиняется специальным соглашениям. Подобно SRV RRset [RFC2782], глобальное (верхнего уровня) имя URI RRset с символом подчёркивания следует регистрировать в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552].

Подобно SRV RRset, в URI RRset имеются сведения о службе, указанные в имени владельца. Допустимые параметры служб указаны ниже.

  • Параметры, зарегистрированные в реестре IANA Service Name and Transport Protocol Port Number Registry [RFC6335]. Символ подчёркивания добавляется перед параметрами службы для предотвращения конфликтов с встречающимися на практике метками DNS и порядок меняется на обратный, чтобы при необходимости можно было передавать полномочия различным зонам (и, следовательно, провайдерам DNS).

  • Параметры, зарегистрированные в Enumservice Registrations [RFC6117]. Порядок параметров Enumservice Registration меняется на обратный (субтипы перед типом) с добавлением в начало символа подчёркивания (_) и размещением перед именем владельца в отдельных метках. Имя Enumservice верхнего уровня (глобальное) становится глобальным именем для регистрации в соответствии с RFC 8552.

Предположим, например, что выполняется поиск URI службы с ENUM Service Parameter «A:B:C» для хоста example.com. Запрос будет иметь вид (QNAME,QTYPE)=(«_C._B._A.example.com»,»URI»). В качестве другого примера рассмотрим поиск URI службы с Service Name «A» и Transport Protocol «B» для хоста example.com. Запрос будет иметь вид (QNAME,QTYPE)=(«_A._B.example.com»,»URI»).

3.3. Изменение спецификации DNSSEC Signaling

В Signaling Trust Anchor Knowledge in DNS Security Extensions (DNSSEC) [RFC8145] определено использование имён узлов DNS, фактически разрешающее все имена, начинающиеся с _ta-, при использовании в запросе NULL RR.

Текст параграфа 5.1 (Формат запроса) в RFC 8145 изменяется, как указано ниже. Кроме того, добавлена нормативная ссылка на RFC 8552 в раздел «Литература» RFC 8145.

Прежнее

Например, проверяющий распознаватель DNS …

                              QNAME=_ta-4444.

Новое

Например, проверяющий распознаватель DNS … «QNAME=_ta-4444».

Для NULL RR в реестре IANA Underscored and Globally Scoped DNS Node Names [RFC8552] зарегистрирована запись для всех узлов, имена которых начинаются с _ta-.

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

Хотя этот документ упоминает реестры IANA, он не задаёт новых реестров и процедур.

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

Этот документ не создаёт проблем безопасности.

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

6.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>.

[RFC6117] Hoeneisen, B., Mayrhofer, A., and J. Livingood, «IANA Registration of Enumservices: Guide, Template, and IANA Considerations», RFC 6117, DOI 10.17487/RFC6117, March 2011, <https://www.rfc-editor.org/info/rfc6117>.

[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. Cheshire, «Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry», BCP 165, RFC 6335, DOI 10.17487/RFC6335, August 2011, <https://www.rfc-editor.org/info/rfc6335>.

[RFC7553] Faltstrom, P. and O. Kolkman, «The Uniform Resource Identifier (URI) DNS Resource Record», RFC 7553, DOI 10.17487/RFC7553, June 2015, <https://www.rfc-editor.org/info/rfc7553>.

[RFC8145] Wessels, D., Kumari, W., and P. Hoffman, «Signaling Trust Anchor Knowledge in DNS Security Extensions (DNSSEC)», RFC 8145, DOI 10.17487/RFC8145, April 2017, <https://www.rfc-editor.org/info/rfc8145>.

[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>.

[RFC8552] Crocker, D., «Scoped Interpretation of DNS Resource Records through «Underscored» Naming of Attribute Leaves», RFC 8552, DOI 10.17487/RFC8552, March 2019, <https://www.rfc-editor.org/info/rfc8552>.

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

[IANA-reg] IANA, «Protocol Registries», <https://www.iana.org/protocols>.

[RFC1035] Mockapetris, P., «Domain names — implementation and specification», STD 13, RFC 1035, DOI 10.17487/RFC1035, November 1987, <https://www.rfc-editor.org/info/rfc1035>.

[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, «A DNS RR for specifying the location of services (DNS SRV)», RFC 2782, DOI 10.17487/RFC2782, February 2000, <https://www.rfc-editor.org/info/rfc2782>.

[RFC3263] Rosenberg, J. and H. Schulzrinne, «Session Initiation Protocol (SIP): Locating SIP Servers», RFC 3263, DOI 10.17487/RFC3263, June 2002, <https://www.rfc-editor.org/info/rfc3263>.

[RFC3529] Harold, W., «Using Extensible Markup Language-Remote Procedure Calling (XML-RPC) in Blocks Extensible Exchange Protocol (BEEP)», RFC 3529, DOI 10.17487/RFC3529, April 2003, <https://www.rfc-editor.org/info/rfc3529>.

[RFC3620] New, D., «The TUNNEL Profile», RFC 3620, DOI 10.17487/RFC3620, October 2003, <https://www.rfc-editor.org/info/rfc3620>.

[RFC3832] Zhao, W., Schulzrinne, H., Guttman, E., Bisdikian, C., and W. Jerome, «Remote Service Discovery in the Service Location Protocol (SLP) via DNS SRV», RFC 3832, DOI 10.17487/RFC3832, July 2004, <https://www.rfc-editor.org/info/rfc3832>.

[RFC3887] Hansen, T., «Message Tracking Query Protocol», RFC 3887, DOI 10.17487/RFC3887, September 2004, <https://www.rfc-editor.org/info/rfc3887>.

[RFC3958] Daigle, L. and A. Newton, «Domain-Based Application Service Location Using SRV RRs and the Dynamic Delegation Discovery Service (DDDS)», RFC 3958, DOI 10.17487/RFC3958, January 2005, <https://www.rfc-editor.org/info/rfc3958>.

[RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, «The Kerberos Network Authentication Service (V5)», RFC 4120, DOI 10.17487/RFC4120, July 2005, <https://www.rfc-editor.org/info/rfc4120>.

[RFC4227] O’Tuathail, E. and M. Rose, «Using the Simple Object Access Protocol (SOAP) in Blocks Extensible Exchange Protocol (BEEP)», RFC 4227, DOI 10.17487/RFC4227, January 2006, <https://www.rfc-editor.org/info/rfc4227>.

[RFC4386] Boeyen, S. and P. Hallam-Baker, «Internet X.509 Public Key Infrastructure Repository Locator Service», RFC 4386, DOI 10.17487/RFC4386, February 2006, <https://www.rfc-editor.org/info/rfc4386>.

[RFC4387] Gutmann, P., Ed., «Internet X.509 Public Key Infrastructure Operational Protocols: Certificate Store Access via HTTP», RFC 4387, DOI 10.17487/RFC4387, February 2006, <https://www.rfc-editor.org/info/rfc4387>.

[RFC4976] Jennings, C., Mahy, R., and A. Roach, «Relay Extensions for the Message Sessions Relay Protocol (MSRP)», RFC 4976, DOI 10.17487/RFC4976, September 2007, <https://www.rfc-editor.org/info/rfc4976>.

[RFC5026] Giaretta, G., Ed., Kempf, J., and V. Devarapalli, Ed., «Mobile IPv6 Bootstrapping in Split Scenario», RFC 5026, DOI 10.17487/RFC5026, October 2007, <https://www.rfc-editor.org/info/rfc5026>.

[RFC5328] Adolf, A. and P. MacAvock, «A Uniform Resource Name (URN) Namespace for the Digital Video Broadcasting Project (DVB)», RFC 5328, DOI 10.17487/RFC5328, September 2008, <https://www.rfc-editor.org/info/rfc5328>.

[RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, «Session Traversal Utilities for NAT (STUN)», RFC 5389, DOI 10.17487/RFC5389, October 2008, <https://www.rfc-editor.org/info/rfc5389>.

[RFC5415] Calhoun, P., Ed., Montemurro, M., Ed., and D. Stanley, Ed., «Control And Provisioning of Wireless Access Points (CAPWAP) Protocol Specification», RFC 5415, DOI 10.17487/RFC5415, March 2009, <https://www.rfc-editor.org/info/rfc5415>.

[RFC5518] Hoffman, P., Levine, J., and A. Hathcock, «Vouch By Reference», RFC 5518, DOI 10.17487/RFC5518, April 2009, <https://www.rfc-editor.org/info/rfc5518>.

[RFC5555] Soliman, H., Ed., «Mobile IPv6 Support for Dual Stack Hosts and Routers», RFC 5555, DOI 10.17487/RFC5555, June 2009, <https://www.rfc-editor.org/info/rfc5555>.

[RFC5617] Allman, E., Fenton, J., Delany, M., and J. Levine, «DomainKeys Identified Mail (DKIM) Author Domain Signing Practices (ADSP)», RFC 5617, DOI 10.17487/RFC5617, August 2009, <https://www.rfc-editor.org/info/rfc5617>.

[RFC5679] Bajko, G., «Locating IEEE 802.21 Mobility Services ping DNS», RFC 5679, DOI 10.17487/RFC5679, December 2009, <https://www.rfc-editor.org/info/rfc5679>.

[RFC5766] Mahy, R., Matthews, P., and J. Rosenberg, «Traversal ping Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)», RFC 5766, DOI 10.17487/RFC5766, April 2010, <https://www.rfc-editor.org/info/rfc5766>.

[RFC5780] MacDonald, D. and B. Lowekamp, «NAT Behavior Discovery Using Session Traversal Utilities for NAT (STUN)», RFC 5780, DOI 10.17487/RFC5780, May 2010, <https://www.rfc-editor.org/info/rfc5780>.

[RFC5804] Melnikov, A., Ed. and T. Martin, «A Protocol for Remotely Managing Sieve Scripts», RFC 5804, DOI 10.17487/RFC5804, July 2010, <https://www.rfc-editor.org/info/rfc5804>.

[RFC5864] Allbery, R., «DNS SRV Resource Records for AFS», RFC 5864, DOI 10.17487/RFC5864, April 2010, <https://www.rfc-editor.org/info/rfc5864>.

[RFC5928] Petit-Huguenin, M., «Traversal Using Relays around NAT (TURN) Resolution Mechanism», RFC 5928, DOI 10.17487/RFC5928, August 2010, <https://www.rfc-editor.org/info/rfc5928>.

[RFC6120] Saint-Andre, P., «Extensible Messaging and Presence Protocol (XMPP): Core», RFC 6120, DOI 10.17487/RFC6120, March 2011, <https://www.rfc-editor.org/info/rfc6120>.

[RFC6186] Daboo, C., «Use of SRV Records for Locating Email Submission/Access Services», RFC 6186, DOI 10.17487/RFC6186, March 2011, <https://www.rfc-editor.org/info/rfc6186>.

[RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., «DomainKeys Identified Mail (DKIM) Signatures», STD 76, RFC 6376, DOI 10.17487/RFC6376, September 2011, <https://www.rfc-editor.org/info/rfc6376>.

[RFC6763] Cheshire, S. and M. Krochmal, «DNS-Based Service Discovery», RFC 6763, DOI 10.17487/RFC6763, February 2013, <https://www.rfc-editor.org/info/rfc6763>.

[RFC7208] Kitterman, S., «Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1», RFC 7208, DOI 10.17487/RFC7208, April 2014, <https://www.rfc-editor.org/info/rfc7208>.

[RFC7489] Kucherawy, M., Ed. and E. Zwicky, Ed., «Domain-based Message Authentication, Reporting, and Conformance (DMARC)», RFC 7489, DOI 10.17487/RFC7489, March 2015, <https://www.rfc-editor.org/info/rfc7489>.

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

Спасибо Bill Fenner, Dick Franks, Tony Hansen, Peter Koch, Olaf Kolkman, Andrew Sullivan за тщательное рецензирование (первоначальных) черновых версий. За последующие улучшения спасибо Tim Wicinski, John Levine, Bob Harold, Joel Jaeggli, Ondrej Sury, Paul Wouters.

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

Адрес автора

Dave Crocker
Brandenburg InternetWorking
675 Spruce Dr.
Sunnyvale, CA 94086
United States of America
Phone: +1.408.246.8253
Email: dcrocker@bbiw.net
URI: http://bbiw.net/

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

nmalykh@protokols.ru


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

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

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

RFC 8525 YANG Library

Internet Engineering Task Force (IETF)                        A. Bierman
Request for Comments: 8525                                     YumaWorks
Obsoletes: 7895                                             M. Bjorklund
Category: Standards Track                                 Tail-f Systems
ISSN: 2070-1721                                         J. Schoenwaelder
                                                       Jacobs University
                                                               K. Watsen
                                                         Watsen Networks
                                                               R. Wilton
                                                           Cisco Systems
                                                              March 2019

YANG Library

Библиотека YANG

PDF

Аннотация

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

Данный документ отменяет RFC 7895.

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

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

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

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

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

Авторские права (Copyright (c) 2019) принадлежат 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 [RFC7950], хранилищ данных [RFC8342] и схем хранилищ [RFC8342] применяемых сервером сетевого управления. Данный документ описывает модуль YANG ietf-yang-library, который обеспечивает эту информацию. Эта версия библиотеки YANG совместима с архитектурой хранилищ NMDA [RFC8342]. Предыдущая версия библиотеки YANG, определённая в [RFC7895], не совместима с NMDA, поскольку предполагает применение во всех хранилищах одной схемы. Это может не соблюдаться в NMDA, где динамические хранилища конфигурации могут применять свои схемы. Кроме того, хранилище рабочего состояния может поддерживать ненастраиваемые модули YANG в дополнение к модулям, поддерживаемым традиционными хранилищами конфигурации.

Определения старой библиотеки YANG сохранены (для совместимости), но отмечены как deprecated (устаревшие). Для совместимости с прежними версиями серверам с поддержкой NMDA следует заполнять устаревшее дерево /modules-state в соответствии со старой версией. Новое дерево /yang-library будет игнорироваться старыми клиентами, но обеспечит все данные, требуемые поддерживающим NMDA клиентам (они будут игнорировать дерево /modules-state). При заполнении /modules-state рекомендуется указывать модули YANG с узлами данных config true, которые могут настраиваться через традиционные хранилища конфигурации, и модули YANG с узлами config false, которые возвращаются операцией NETCONF4 <get> или ее эквивалентом.

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

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

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

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

Перечисленные ниже термины определены в [RFC7950]:

  • module — модуль;

  • submodule — субмодуль;

  • data node — узел данных.

В документе фраза «реализует модуль» (implement a module) применяется в трактовке параграфа 5.6.5 [RFC7950].

Перечисленные ниже термины определены в [RFC8342]:

  • datastore — хранилище данных;

  • datastore schema — схема хранилища данных;

  • configuration — конфигурация;

  • conventional configuration datastore — традиционное хранилище данных;

  • operational state — рабочее состояние;

  • operational state datastore — хранилище рабочего состояния;

  • dynamic configuration datastore — динамическое хранилище конфигурации;

  • client — клиент;

  • server — сервер.

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

YANG library — библиотека YANG

Набор модулей и субмодулей YANG, хранилищ и схем хранилищ, применяемых сервером.

YANG library content identifier – идентификатор содержимого библиотеки YANG

Генерируемый сервером идентификатор содержимого библиотеки YANG.

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

2. Постановка задачи

Приведённая ниже информация нужна клиентскому приложению (для каждого модуля YANG в библиотеке) для полного использования языка моделирования данных YANG:

  • name — имя модуля YANG;

  • revision — при наличии этой информации в модуле или субмодуле YANG номер выпуска берётся из наиболее свежего оператора revision в модуле или субмодуле;

  • submodule list — имя и (при наличии) выпуск каждого субмодуля, используемого модулем;

  • feature list — имя каждой функции (возможности) YANG, поддерживаемой сервером;

  • deviation list — имя каждого модуля YANG с оператором deviation, влияющим на данный модуль YANG.

В дополнение к этому для каждого поддерживаемого сервером хранилища данных клиентскому приложению нужно:

  • identity — отождествление YANG для хранилища данных;

  • schema — схема (т. е. набор модулей), реализованная в хранилище.

Для выбора одного из вариантов модели данных библиотеки YANG использованы приведённые ниже критерии.

  1. Информация должна быть удобна для потребителя. Поскольку библиотека YANG может быть велика, следует позволять клиентам кэшировать содержимое библиотеки YANG.

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

  3. Можно не реализовать функцию или модуль в <operational>, даже если это реализовано в другом хранилище. Это требуется для переходного процесса — сервер, желающий реализовать <operational>, не обязан поддерживать все модули сразу.

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

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

  6. Должна обеспечиваться возможность использования библиотеки YANG при монтировании схемы [RFC8528].

3. Модель данных библиотеки YANG

Модуль ietf-yang-library предоставляет информацию о модулях, субмодулях, хранилищах и схемах хранилищ, поддерживаемых сервером. Все узлы данных модуля ietf-yang-library имеют тип config false и поэтому доступны лишь в хранилище рабочего состояния.

+-----------+
| хранилище |
+-----------+
     |
     | имеет
     V
+-----------+            +--------+                +------------+
|   схема   |объединение | набор  |  состоит из    | модули +   |
| хранилища |----------->| модулей|--------------->| субмодули  |
+-----------+            +--------+                +------------+

Рисунок 1.


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

Ниже приведена диаграмма дерева YANG для модуля ietf-yang-library без устаревшего дерева /modules-state.

   module: ietf-yang-library
     +--ro yang-library
        +--ro module-set* [name]
        |  +--ro name                  string
        |  +--ro module* [name]
        |  |  +--ro name         yang:yang-identifier
        |  |  +--ro revision?    revision-identifier
        |  |  +--ro namespace    inet:uri
        |  |  +--ro location*    inet:uri
        |  |  +--ro submodule* [name]
        |  |  |  +--ro name        yang:yang-identifier
        |  |  |  +--ro revision?   revision-identifier
        |  |  |  +--ro location*   inet:uri
        |  |  +--ro feature*     yang:yang-identifier
        |  |  +--ro deviation*   -> ../../module/name
        |  +--ro import-only-module* [name revision]
        |     +--ro name         yang:yang-identifier
        |     +--ro revision     union
        |     +--ro namespace    inet:uri
        |     +--ro location*    inet:uri
        |     +--ro submodule* [name]
        |        +--ro name        yang:yang-identifier
        |        +--ro revision?   revision-identifier
        |        +--ro location*   inet:uri
        +--ro schema* [name]
        |  +--ro name          string
        |  +--ro module-set*   -> ../../module-set/name
        +--ro datastore* [name]
        |  +--ro name      ds:datastore-ref
        |  +--ro schema    -> ../../schema/name
        +--ro content-id    string
     notifications:
       +---n yang-library-update
          +--ro content-id    -> /yang-library/content-id

Контейнер /yang-library содержит всю библиотеку YANG и имеет перечисленные ниже дочерние узлы.

  • /yang-library/module-set содержит записи, представляющие наборы модулей. Список /yang-library/module-set/module перечисляет все модули, относящиеся к набору. Модуль указывается вместе с субмодулями (если они имеются), набором функций и всеми отклонениями. Список /yang-library/module-set/import-only-module содержит все модули (и их субмодули), используемые лишь для импорта. Назначение модуля в набор определяется сервером. Данный выпуск библиотеки YANG не задаёт семантики включения модуля в список набора.

  • Список /yang-library/schema содержит записи для каждой схемы хранилища, поддерживаемой сервером. Все традиционные хранилища данных используют общую запись списка schema. Динамическое хранилище конфигурации может использовать другую схему и для него может потребоваться отдельная запись в списке schema. Запись имеет лист-список (leaf-list) ссылок на записи в списке module-set. Схема является объединением всех модулей во всех указанных наборах.

  • Список /yang-library/datastore содержит одну запись для каждого хранилища, поддерживаемого сервером, и указывает связанную с хранилищем схему путём ссылки на запись списка schema. Каждое поддерживаемое традиционное хранилище имеет свою запись, указывающую на общий элемент списка schema.

  • Лист /yang-library/content-id содержит идентификатор содержимого библиотеки YANG, зависящий от реализации, который представляет текущие данные в библиотеке YANG на конкретном сервере. Значение этого листа должно меняться при любом изменении информации в библиотеке YANG. Не требуется совпадение content-id для одной и той же информации. Этот лист позволяет клиентам извлекать сразу всю информацию схемы, кэшировать ее и запрашивать снова лишь при изменении листа. Если этот лист меняется, сервер также генерирует уведомление yang-library-update.

Отметим, что для серверов NETCONF, реализующих расширения NETCONF для поддержки NMDA [RFC8526], изменение идентификатора содержимого библиотеки YANG приводит к новому значению возможности :yang-library:1.1, определённой в [RFC8526]. Если такой сервер реализует уведомления NETCONF [RFC5277] и генерируются уведомления netconf-capability-change [RFC6470], такие уведомления будут создаваться при каждой смене идентификатора содержимого библиотеки YANG.

4. Модуль библиотеки YANG

Модуль YANG ietf-yang-library импортирует определения из модулей ietf-yang-types и ietf-inet-types, определённых в [RFC6991], а также из модуля ietf-datastores, определённого в [RFC8342]. Хотя модуль YANG определён с использованием YANG версии 1.1, библиотека YANG поддерживает модули YANG для любой версии языка YANG.

   <CODE BEGINS> file "ietf-yang-library@2019-01-04.yang"

   module ietf-yang-library {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
     prefix yanglib;

     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types";
     }
     import ietf-inet-types {
       prefix inet;
       reference
         "RFC 6991: Common YANG Data Types";
     }
     import ietf-datastores {
       prefix ds;
       reference
         "RFC 8342: Network Management Datastore Architecture
                    (NMDA)";
     }

     organization
       "IETF NETCONF (Network Configuration) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/netconf/> 
        WG List:  <mailto:netconf@ietf.org> 

        Author:   Andy Bierman
                  <mailto:andy@yumaworks.com> 

        Author:   Martin Bjorklund
                  <mailto:mbj@tail-f.com> 

        Author:   Juergen Schoenwaelder
                  <mailto:j.schoenwaelder@jacobs-university.de> 

        Author:   Kent Watsen
                  <mailto:kent+ietf@watsen.net> 

        Author:   Robert Wilton
                  <mailto:rwilton@cisco.com>"; 
     description
       "Этот модуль содержит информацию о модулях YANG, хранилищах и
        схемах хранилищ, используемых сервером сетевого управления.

        Ключевые слова ДОЛЖНО, НЕДОПУСТИМО, ТРЕБУЕТСЯ, НУЖНО, НЕ СЛЕДУЕТ, 
        СЛЕДУЕТ, НЕ НУЖНО, РЕКОМЕНДУЕТСЯ, НЕ РЕКОМЕНДУЕТСЯ, МОЖНО и
        НЕОБЯЗАТЕЛЬНО в этом документе интерпретируются в соответствии с
        BCP 14 (RFC 2119) (RFC 8174) тогда и только тогда, когда они
        указаны заглавными буквами, как показано здесь.

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

        Распространение и использование в исходной или двоичной форме
        с изменениями или без таковых разрешено в соответствии с 
        упрощённой лицензией BSD, как указано в параграфе 4.c
        документа IETF Trust Legal Provisions применительно к 
        документам IETF (https://trustee.ietf.org/license-info). 

        Данная версия модуля YANG является частью RFC 8525, где
        правовые аспекты изложены более полно.";

     revision 2019-01-04 {
       description
         "Добавлена поддержка хранилищ данных с архитектурой NMDA.";
       reference
         "RFC 8525: YANG Library";
     }
     revision 2016-04-09 {
       description
         "Исходный выпуск.";
       reference
         "RFC 7895: YANG Module Library";
     }

     /*
      * Определения типов
      */

     typedef revision-identifier {
       type string {
         pattern '\d{4}-\d{2}-\d{2}';
       }
       description
         "Представляет дату в формате ГГГГ-ММ-ЧЧ format.";
     }

     /*
      * Группировки
      */

     grouping module-identification-leafs {
       description
         "Параметры для идентификации модулей и субмодулей YANG.";
       leaf name {
         type yang:yang-identifier;
         mandatory true;
         description
           "Имя модуля или субмодуля YANG.";
       }
       leaf revision {
         type revision-identifier;
         description
           "Дата выпуска модуля или субмодуля YANG. Если оператора revision
            нет в модуле или субмодуле YANG, этот лист не создаётся.";
       }
     }

     grouping location-leaf-list {
       description
         "Общий параметр leaf-list для местоположения модулей и субмодулей.";
       leaf-list location {
         type inet:uri;
         description
           "Содержит идентификатор URL, представляющий ресурс схемы YANG 
            для модуля или субмодуля.

            Этот лист присутствует лишь при наличии URL для извлечения
            схемы для данной записи.";
       }
     }

     grouping module-implementation-parameters {
       description
         "Параметры для описания реализации модуля.";
       leaf-list feature {
         type yang:yang-identifier;
         description
           "Список имён всех возможностей YANG из данного модуля, 
            поддерживаемых сервером, независимо от их определения
            в модуле или включённом в него субмодуле.";
       }
       leaf-list deviation {
         type leafref {
           path "../../module/name";
         }
         description
           "Список всем модулей отклонения YANG, используемых сервером,
            для изменения соответствия модуля, связанного с этой записью.
            Отметим, что один и тот же модуль может служить для отклонений
            разных модулей, поэтому одна запись МОЖЕТ присутствовать в 
            нескольких записях module.

            Этой ссылке НЕДОПУСТИМО указывать (напрямую или косвенно)
            модуль без отклонений (deviation).

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

     grouping module-set-parameters {
       description
         "Набор параметров, описывающих набор модулей.";
       leaf name {
         type string;
         description
           "Произвольное имя набора модулей.";
       }
       list module {
         key "name";
         description
           "Запись этого списка представляет модуль, реализованный сервером,
            как описано в параграфе 5.6.5 RFC 7950, с конкретным набором
            поддерживаемых возможностей и отклонений.";
         reference
           "RFC 7950: The YANG 1.1 Data Modeling Language";
         uses module-identification-leafs;
         leaf namespace {
           type inet:uri;
           mandatory true;
           description
             "Идентификатор пространства имён XML для этого модуля.";
         }
         uses location-leaf-list;
         list submodule {
           key "name";
           description
             "Каждая запись представляет один субмодуль в родительском
              модуле.";
           uses module-identification-leafs;
           uses location-leaf-list;
         }
         uses module-implementation-parameters;
       }
       list import-only-module {
         key "name revision";
         description
           "Запись этого списка указывает, что сервер импортирует 
            многократно используемые определения из указанного выпуска
            модуля, но не реализует из этого выпуска каких-либо
            доступных протоколу объектов.

            Для одного модуля МОЖЕТ присутствовать множество записей. 
            Это может быть обусловлено импортом множеством модулей одного
            модуля с указанием разных дат выпуска в операторах revision.";
         leaf name {
           type yang:yang-identifier;
           description
             "Имя модуля YANG.";
         }
         leaf revision {
           type union {
             type revision-identifier;
             type string {
               length "0";
             }
           }
           description
             "Дата выпуска модуля YANG. При отсутствии оператора
              revision в модуле YANG указывается пустая строка.";
         }
         leaf namespace {
           type inet:uri;
           mandatory true;
           description
             "Пространство имён XML для этого модуля.";
         }
         uses location-leaf-list;
         list submodule {
           key "name";
           description
             "Каждая запись представляет один субмодуль в родительском
              модуле.";
           uses module-identification-leafs;
           uses location-leaf-list;
         }
       }
     }
     grouping yang-library-parameters {
       description
         "Структура данных библиотеки YANG представлена как группировка,
          поэтому её можно повторно применять в конфигурации или иных 
          структурах данных мониторинга.";
       list module-set {
         key "name";
         description
           "Набор модулей, который может применяться в одной или 
            нескольких схемах.

            Набор модулей не обязан быть ссылочно полным, т. е он может
            определять модули, содержащие операторы import для модулей
            не включённых в этот набор.";
         uses module-set-parameters;
       }
       list schema {
         key "name";
         description
           "Схема хранилища, которая может применяться одним или
            несколькими хранилищами.

            Схема должна быть действительной и ссылочно полное, т. е.
            она должна включать модули для выполнения всех операторов 
            import во всех модулях, указанных в схеме.";
         leaf name {
           type string;
           description
             "Произвольное имя схемы.";
         }
         leaf-list module-set {
           type leafref {
             path "../../module-set/name";
           }
           description
             "Набор module-set, включённых в схему. Если неимпортируемый
              модуль присутствует в нескольких наборах модулей, выпуск
              модуля и связанные с ним возможности (функции) и 
              отклонения должны быть идентичны.";
         }
       }
       list datastore {
         key "name";
         description
           "Хранилище, поддерживаемое сервером.

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

            Сервер ДОЛЖЕН создавать в этом списке одну запись для 
            каждого поддерживаемого хранилища. Всем хранилищам с
            одной схемой СЛЕДУЕТ ссылаться на эту схему.";
         leaf name {
           type ds:datastore-ref;
           description
             "Отождествление хранилища данных.";
         }
         leaf schema {
           type leafref {
             path "../../schema/name";
           }
           mandatory true;
           description
             "Ссылка на схему, поддерживаемую хранилищем. Все 
              не импортируемые модули схемы реализуются со связанными
              возможностями и отклонениями.";
         }
       }
     }

     /*
      * Контейнер верхнего уровня
      */

     container yang-library {
       config false;
       description
         "Контейнер, содержащий всю библиотеку YANG данного сервера.";
       uses yang-library-parameters;
       leaf content-id {
         type string;
         mandatory true;
         description
           "Созданный сервером идентификатор содержимого дерева
            /yang-library. Сервер ДОЛЖЕН менять значение этого листа, 
            если представленная в дереве /yang-library информация
            меняется (за исключением смены /yang-library/content-id).";
       }
     }

     /*
      * Уведомления
      */

     notification yang-library-update {
       description
         "Генерируется при любом изменении информации в библиотеке YANG
          на сервере.";
       leaf content-id {
         type leafref {
           path "/yanglib:yang-library/yanglib:content-id";
         }
         mandatory true;
         description
           "Включает идентификатор содержимого библиотеки YANG для
            обновлённого варианта на момент создания уведомления.";
       }
     }

     /*
      * Унаследованные группировки
      */

     grouping module-list {
       status deprecated;
       description
         "Структура данных модуля представлена в форме группировки и
          может многократно применяться в конфигурации или другой
          структуре данных мониторинга.";

       grouping common-leafs {
         status deprecated;
         description
           "Общие параметры модулей и субмодулей YANG.";
         leaf name {
           type yang:yang-identifier;
           status deprecated;
           description
             "Имя модуля или субмодуля YANG.";
         }
         leaf revision {
           type union {
             type revision-identifier;
             type string {
               length "0";
             }
           }
           status deprecated;
           description
             "Дата выпуска модуля или субмодуля YANG. Если оператора
              revision нет в модулей или субмодуле, строка будет пустой.";
         }
       }

       grouping schema-leaf {
         status deprecated;
         description
           "Базовый параметр листа схему для модулей и субмодулей.";
         leaf schema {
           type inet:uri;
           description
             "Содержит идентификатор URL, представляющий ресурс схемы YANG
              для модуля или субмодуля.

              Этот лист присутствует лишь при наличии URL, доступного для
              извлечения схемы для данной записи.";
         }
       }
       list module {
         key "name revision";
         status deprecated;
         description
           "Каждая запись представляет один выпуск модуля, поддерживаемый
            в данный момент сервером.";
         uses common-leafs {
           status deprecated;
         }
         uses schema-leaf {
           status deprecated;
         }
         leaf namespace {
           type inet:uri;
           mandatory true;
           status deprecated;
           description
             "Идентификатор пространства имён XML для этого модуля.";
         }
         leaf-list feature {
           type yang:yang-identifier;
           status deprecated;
           description
             "Список имён свойств YANG из данного модуля, которые 
              поддерживаются сервером, независимо от их определения
              в модуле или любом из включённых субмодулей.";
         }
         list deviation {
           key "name revision";
           status deprecated;
           description
             "Список имён отклонений модулей YANG и выпусков, 
              используемых этим сервером для изменения соответствия
              модуля, связанного с этой записью. Отметим, что один
              и тот же модуль может использоваться для указания 
              отклонений множества модулей, поэтому запись МОЖЕТ
              появляться во множестве записей module.

              Модуль отклонений ДОЛЖЕН присутствовать в списке
              module с тем же именем и выпуском. Значением 
              conformance-type для модуля deviation будет implement.";
           uses common-leafs {
             status deprecated;
           }
         }
         leaf conformance-type {
           type enumeration {
             enum implement {
               description
                 "Показывает, что сервер реализует один или множество 
                  доступных протоколу объектов, определённых в модуле 
                  YANG, указанном этой записью. Это включает операторы 
                  deviation, определённые в модуле.

                  Для модулей YANG версии 1.1 имеется не более одной
                  записи с типом соответствия implement для конкретного
                  имени модуля, поскольку YANG 1.1 требует реализации
                  не более одного выпуска модуля.

                  Для модулей YANG версии 1 НЕ СЛЕДУЕТ включать более
                  одной записи module для конкретного имени модуля.";
             }
             enum import {
               description
                 "Показывает, что сервер импортирует повторно используемые
                  определения из указанного выпуска модуля, но не реализует
                  каких-либо доступных протоколу объектов из этого выпуска.

                  МОЖЕТ существовать множество записей module для одного 
                  имени модуля. Это может возникать в случаях импорта одного
                  модуля множеством других модулей с разными датами выпуска 
                  в операторах import.";
             }
           }
           mandatory true;
           status deprecated;
           description
             "Указывает тип соответствия, заявленного сервером для модуля 
              YANG, указанного этой записью.";
         }
         list submodule {
           key "name revision";
           status deprecated;
           description
             "Каждая запись представляет 1 субмодуль в родительском модуле.";
           uses common-leafs {
             status deprecated;
           }
           uses schema-leaf {
             status deprecated;
           }
         }
       }
     }

     /*
      * Унаследованные узлы данных рабочего состояния
      */

     container modules-state {
       config false;
       status deprecated;
       description
         "Содержит информацию мониторинга модуля YANG.";
       leaf module-set-id {
         type string;
         mandatory true;
         status deprecated;
         description
           "Содержит специфический для сервера идентификатор, который
            представляет текущий набор модулей и субмодулей. Сервер
            ДОЛЖЕН менять значение этого листа при изменении данных,
            представленных экземплярами списков module.";
       }
       uses module-list {
         status deprecated;
       }
     }

     /*
      * Унаследованные уведомления
      */

     notification yang-library-change {
       status deprecated;
       description
         "Генерируется при изменении набора модулей и субмодулей,
          поддерживаемых сервером.";
       leaf module-set-id {
         type leafref {
           path "/yanglib:modules-state/yanglib:module-set-id";
         }
         mandatory true;
         status deprecated;
         description
           "Содержит значение module-set-id, которое представляет
            набор модулей и субмодулей, которые сервер поддерживал в
            момент генерации уведомления.";
       }
     }
   }
   <CODE ENDS>

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

RFC 7895 ранее зарегистрировал один идентификатор URI в реестре IETF XML Registry [RFC3688]. Данный документ перенимает эту запись RFC 7895 и меняет значение Registrant Contact на IESG в соответствии с разделом 4 [RFC3688].

     URI: urn:ietf:params:xml:ns:yang:ietf-yang-library
     Registrant Contact: The IESG.
     XML: N/A, запрошенный URI является пространством имён XML.

Данный документ регистрирует модуль YANG в реестре YANG Module Names [RFC6020]

     name:         ietf-yang-library
     namespace:    urn:ietf:params:xml:ns:yang:ietf-yang-library
     prefix:       yanglib
     reference:    RFC 8525

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

Модуль YANG, заданный в этом документе, определяет схему данных, предназначенных для доступа с использованием протоколов сетевого управления, таких как NETCONF [RFC6241] или RESTCONF [RFC8040]. Нижним уровнем NETCONF является защищённый транспорт с обязательной реализацией протокола SSH5 [RFC6242]. Нижним уровнем RESTCONF является HTTPS с обязательной реализацией защищённого транспорта TLS [RFC8446].

Модель NACM6 [RFC8341] обеспечивает способы ограничения доступа для конкретных пользователей NETCONF или RESTCONF предопределенным подмножеством протокольных операций NETCONF или RESTCONF и содержимого .

Некоторые из доступных для чтения узлов данных этого модуля YANG могут оказаться чувствительными или уязвимыми в отдельных сетевых средах. Поэтому важно ограничить возможность чтения (например, с помощью get, get-config или notification) таких данных. Ниже указаны деликатные/уязвимые субдеревья и узлы данных.

Ветвь /yang-library библиотеки YANG может помочь атакующему при определении возможностей сервера и известных ошибок реализации. Хотя часть этих сведений доступна всем пользователям через сообщения NETCONF <hello> (или похожие сообщения других протоколов управления), этот модуль YANG может раскрывать дополнительные детали, способные помочь атакующему. Уязвимости сервера могут относиться к конкретным модулям, версиям возможностям или отклонениям. Эта информация включается в каждую запись module. Например, если конкретная операция с определенным узлом данных может приводить к аварии на сервере или значительно снижать его производительность, информация из списка модулей будет помогать атакующему обнаружить серверы с таким дефектом для организации атаки на службы.

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

7.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>.

[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>.

[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>.

[RFC6242] Wasserman, M., «Using the NETCONF Protocol over Secure Shell (SSH)», RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.

[RFC6991] Schoenwaelder, J., Ed., «Common YANG Data Types», RFC 6991, 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>.

[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>.

[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>.

[RFC8341] Bierman, A. and M. Bjorklund, «Network Configuration Access Control Model», STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, <https://www.rfc-editor.org/info/rfc8341>.

[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, «Network Management Datastore Architecture (NMDA)», RFC 8342, DOI 10.17487/RFC8342, March 2018, <https://www.rfc-editor.org/info/rfc8342>.

[RFC8446] Rescorla, E., «The Transport Layer Security (TLS) Protocol Version 1.3», RFC 8446, DOI 10.17487/RFC8446, August 2018, <https://www.rfc-editor.org/info/rfc8446>.

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

[RFC5277] Chisholm, S. and H. Trevino, «NETCONF Event Notifications», RFC 5277, DOI 10.17487/RFC5277, July 2008, <https://www.rfc-editor.org/info/rfc5277>.

[RFC6470] Bierman, A., «Network Configuration Protocol (NETCONF) Base Notifications», RFC 6470, DOI 10.17487/RFC6470, February 2012, <https://www.rfc-editor.org/info/rfc6470>.

[RFC7895] Bierman, A., Bjorklund, M., and K. Watsen, «YANG Module Library», RFC 7895, DOI 10.17487/RFC7895, June 2016, <https://www.rfc-editor.org/info/rfc7895>.

[RFC8340] Bjorklund, M. and L. Berger, Ed., «YANG Tree Diagrams», BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, <https://www.rfc-editor.org/info/rfc8340>.

[RFC8343] Bjorklund, M., «A YANG Data Model for Interface Management», RFC 8343, DOI 10.17487/RFC8343, March 2018, <https://www.rfc-editor.org/info/rfc8343>.

[RFC8344] Bjorklund, M., «A YANG Data Model for IP Management», RFC 8344, DOI 10.17487/RFC8344, March 2018, <https://www.rfc-editor.org/info/rfc8344>.

[RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., Ananthakrishnan, H., and X. Liu, «A YANG Data Model for Network Topologies», RFC 8345, DOI 10.17487/RFC8345, March 2018, <https://www.rfc-editor.org/info/rfc8345>.

[RFC8348] Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, «A YANG Data Model for Hardware Management», RFC 8348, DOI 10.17487/RFC8348, March 2018, <https://www.rfc-editor.org/info/rfc8348>.

[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, «A YANG Data Model for Routing Management (NMDA Version)», RFC 8349, DOI 10.17487/RFC8349, March 2018, <https://www.rfc-editor.org/info/rfc8349>.

[RFC8526] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, «NETCONF Extensions to Support the Network Management Datastore Architecture», RFC 8526, DOI 10.17487/RFC8526, March 2019, <https://www.rfc-editor.org/info/rfc8526>.

[RFC8528] Bjorklund, M. and L. Lhotka, «YANG Schema Mount», RFC 8528, DOI 10.17487/RFC8528, March 2019, <https://www.rfc-editor.org/info/rfc8528>.

Приложение A. Отличия от RFC 7895

Ниже перечислены изменения [RFC7895] внесённые этим документом.

  • Название YANG Module Library заменено на YANG Library.

  • Добавлен контейнер верхнего уровня /yang-library, включающий всю библиотеку YANG и обеспечивающий информацию о наборах модулей, схемах и хранилищах данных.

  • Контейнер /modules-state переработан в список /yang-library/module-set.

  • Добавлены списки /yang-library/schema и /yang-library/datastore.

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

  • Добавлено уведомление yang-library-update взамен устаревшего yang-library-change.

  • Отменено дерево /modules-state.

  • Отменена группировка /module-list.

  • Отменено уведомление /yang-library-change.

Приложение B. Экземпляр библиотеки YANG для базового сервера

Приведённый ниже пример показывает библиотеку YANG базового сервера, реализующего модули ietf-interfaces [RFC8343] и ietf-ip [RFC8344] в хранилищах <running>, <startup> и <operational>, а также модуль ietf-hardware [RFC8348] в хранилище <operational>.

Некоторые значения листьев разбиты на несколько строк из соображений форматирования.

   <yang-library
       xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"
       xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">

     <module-set>
       <name>config-modules</name>
       <module>
         <name>ietf-interfaces</name>
         <revision>2018-02-20</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-interfaces
         </namespace>
       </module>
       <module>
         <name>ietf-ip</name>
         <revision>2018-02-22</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-ip
         </namespace>
       </module>
       <import-only-module>
         <name>ietf-yang-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-yang-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>ietf-inet-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-inet-types
         </namespace>
       </import-only-module>
     </module-set>

     <module-set>
       <name>state-modules</name>
       <module>
         <name>ietf-hardware</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-hardware
         </namespace>
       </module>
       <import-only-module>
         <name>ietf-inet-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-inet-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>ietf-yang-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-yang-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>iana-hardware</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:iana-hardware
         </namespace>
       </import-only-module>
     </module-set>

     <schema>
       <name>config-schema</name>
       <module-set>config-modules</module-set>
     </schema>
     <schema>
       <name>state-schema</name>
       <module-set>config-modules</module-set>
       <module-set>state-modules</module-set>
     </schema>

     <datastore>
       <name>ds:startup</name>
       <schema>config-schema</schema>
     </datastore>
     <datastore>
       <name>ds:running</name>
       <schema>config-schema</schema>
     </datastore>
     <datastore>
       <name>ds:operational</name>
       <schema>state-schema</schema>
     </datastore>

     <content-id>75a43df9bd56b92aacc156a2958fbe12312fb285</content-id>
   </yang-library>

Приложение C. Экземпляр библиотеки YANG для расширенного сервера

Приведенный ниже пример расширяет библиотеку из приложения B за счёт использования модулей из [RFC8345] и [RFC8349] для иллюстрации сервера с перечисленными ниже дополнительными возможностями.

  • Имеется модуль с возможностями, поддерживаемыми лишь в хранилище <operational>. Модуль ietf-routing поддерживается в <running>, <startup> и <operational>, а модули multiple-ribs и router-id разрешены лишь в <operational>. Поэтому лист router-id доступен для чтения, но не может быть изменён.

  • Поддерживается динамическое хранилище конфигурации example-ds-ephemeral с модулями ietf-network и ietf-network-topology, настраиваемыми с помощью условного протокола динамического управления конфигурацией.

  • Показан пример связанных с хранилищем отклонений. Модуль example-vendor-hardware-deviations включен в схему для хранилища <operational> с целью удаления узлов данных, которые сервер не может поддерживать.

  • Показано применение наборов модулей (module-set) для совместной организации связанных модулей.

Некоторые значения листьев разбиты на несколько строк из соображений форматирования.

   <yang-library
       xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"
       xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"
       xmlns:ex-ds-eph="urn:example:ds-ephemeral">

     <module-set>
       <name>config-state-modules</name>
       <module>
         <name>ietf-interfaces</name>
         <revision>2018-02-20</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-interfaces
         </namespace>
       </module>
       <module>
         <name>ietf-ip</name>
         <revision>2018-02-22</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-ip
         </namespace>
       </module>
       <module>
         <name>ietf-routing</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-routing
         </namespace>
       </module>
       <import-only-module>
         <name>ietf-yang-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-yang-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>ietf-inet-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-inet-types
         </namespace>
       </import-only-module>
     </module-set>

     <module-set>
       <name>config-only-modules</name>
       <module>
         <name>ietf-routing</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-routing
         </namespace>
       </module>
     </module-set>

     <module-set>
       <name>dynamic-config-state-modules</name>
       <module>
         <name>ietf-network</name>
         <revision>2018-02-26</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-network
         </namespace>
       </module>
       <module>
         <name>ietf-network-topology</name>
         <revision>2018-02-26</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-network-topology
         </namespace>
       </module>
       <import-only-module>
         <name>ietf-inet-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-inet-types
         </namespace>
       </import-only-module>
     </module-set>

     <module-set>
       <name>state-only-modules</name>
       <module>
         <name>ietf-hardware</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-hardware
         </namespace>
         <deviation>example-vendor-hardware-deviations</deviation>
       </module>
       <module>
         <name>ietf-routing</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-routing
         </namespace>
         <feature>multiple-ribs</feature>
         <feature>router-id</feature>
       </module>
       <module>
         <name>example-vendor-hardware-deviations</name>
         <revision>2018-01-31</revision>
         <namespace>
           urn:example:example-vendor-hardware-deviations
         </namespace>
       </module>
       <import-only-module>
         <name>ietf-inet-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-inet-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>ietf-yang-types</name>
         <revision>2013-07-15</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:ietf-yang-types
         </namespace>
       </import-only-module>
       <import-only-module>
         <name>iana-hardware</name>
         <revision>2018-03-13</revision>
         <namespace>
           urn:ietf:params:xml:ns:yang:iana-hardware
         </namespace>
       </import-only-module>
     </module-set>

     <schema>
       <name>config-schema</name>
       <module-set>config-state-modules</module-set>
       <module-set>config-only-modules</module-set>
     </schema>
     <schema>
       <name>dynamic-config-schema</name>
       <module-set>dynamic-config-state-modules</module-set>
     </schema>
     <schema>
       <name>state-schema</name>
       <module-set>config-state-modules</module-set>
       <module-set>dynamic-config-state-modules</module-set>
       <module-set>state-only-modules</module-set>
     </schema>

     <datastore>
       <name>ds:startup</name>
       <schema>config-schema</schema>
     </datastore>
     <datastore>
       <name>ds:running</name>
       <schema>config-schema</schema>
     </datastore>
     <datastore>
       <name>ex-ds-eph:ds-ephemeral</name>
       <schema>dynamic-config-schema</schema>
     </datastore>
     <datastore>
       <name>ds:operational</name>
       <schema>state-schema</schema>
     </datastore>

     <content-id>14782ab9bd56b92aacc156a2958fbe12312fb285</content-id>
   </yang-library>

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

Andy Bierman

YumaWorks

Email: andy@yumaworks.com

Martin Bjorklund

Tail-f Systems

Email: mbj@tail-f.com

Juergen Schoenwaelder

Jacobs University

Email: j.schoenwaelder@jacobs-university.de

Kent Watsen

Watsen Networks

Email: kent+ietf@watsen.net

Robert Wilton

Cisco Systems

Email: rwilton@cisco.com


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

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

nmalykh@protokols.ru

1Network Management Datastore Architecture — архитектура хранилища данных сетевого управления.

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

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

4Network Configuration Protocol — протокол настройки конфигурации сети.

5Secure Shell — защищённая оболочка.

6Network Configuration Access Control Model — модель управления доступом к конфигурации.

Рубрика: RFC | Комментарии к записи RFC 8525 YANG Library отключены

Поддержка HTTPS

[donation_goal id=»2556″]

С 12 января 2019 года на сайте поддерживаются защищенные соединения HTTPS с заверенным УЦ сертификатом. Если вы заинтересованы в защите ваших коммуникаций, вы можете использовать защищенное соединение, перейдя по ссылке.

Рубрика: Разное | Комментарии к записи Поддержка HTTPS отключены

Справочное руководство для ptpd2

PDF

Демон протокола точного времени (Precision Time Protocol)

ptpd2 — демон PTP (IEEE 1588-2008)

Синтаксис

ptpd2 [ -?hH ] [ -e SETTING ] [ -kvOLAl ] [ -smMyEPanCV ] [ -c FILE ] [ -R DIR ] [ -f FILE ] [ -S FILE ] [ -d DOMAIN ] [ -u ADDRESS ] [ -r NUMBER ] -i INTERFACE

Описание

Демон PTP реализует протокол точного времени PTP версии 2, определенный стандартом IEEE 1588-2008. Протокол PTP разработан для точной координации времени подключенных к ЛВС компьютеров. Демон должен работать от имени пользователя root для того, чтобы он мог управлять системными часами и использовать младшие номера портов. Демон является универсальным и поддерживает в IPv4 групповой, индивидуальный и гибридный (смешанный) режим работы, а также режим Ethernet. Даже без аппаратной поддержки демон может обеспечивать субмиллисекундную точность часов и устойчивость к отказам опорного источника (PTP Grandmaster — GM) и каналов, а также может перезапускаться с минимальным влиянием на работу часов. Этот переносимый демон в настоящее время поддерживает ОС Linux, FreeBSD и Mac OS X, работая на разных архитектурах процессоров (32 и 64 бита), включая x86 и ARM.

Настройка из командной строки

Начиная с версии 2.3.0, предпочтительным механизмом настройки является конфигурационный файл, а опции, доступные в краткой (-x) и полной (—xxxxx) нотации, обеспечивают управление работой демона и базовые настройки протокола PTP. Остальные настройки (см. ptpd2.conf — конфигурационный файл демона PTP) также могут заданы опциями командной строки, но они доступны лишь в форме —section:key=value.

Базовые опции демона

-c --config-file PATH

Задает путь к конфигурационному файлу (см. ptpd2.conf — конфигурационный файл демона PTP).

-k

Проверяет конфигурацию и завершает на этом работу, возвращая 0 при отсутствии ошибок в конфигурации.

-v

Выводит строку номера версии и завершает на этом работу.

-h

Выводит на экран краткую справку.

-H

Выводит на экран подробную справку для всех настроек и вариантов поведения.

-e --explain SETTING

Выводит справку для одной настройки (section:key).

-O

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

-L

Пропускает проверку файла блокировки и блокировку (global:ignore_lock)

-A

Использует зависящие от установок и порта имена файлов блокировки при запуске нескольких экземпляров.

-l --lockfile

Задает полный путь к файлу блокировки (global:lock_file)

-R --lock-directory DIR

Задает каталог для файлов блокировки (global:lock_directory)

-f --log-file PATH

Указывает путь к журнальному файлу (global:log_file)

-S --statistics-file PATH

Указывает путь к файлу статистики1 (global:statistics_file).

-T --show-templates

Выводит на экран встроенные конфигурационные шаблоны

-t --templates [name],[name],…

Применяет один или несколько конфигурационных шаблонов в указанном порядке (см. ptpd2.conf — конфигурационный файл демона PTP и ptpengine:template_files)

Базовые операции протокола PTP

-i --interface DEV

Обязательный параметр, указывающий имя используемого интерфейса, например, eth0 (ptpengine:interface).

-d --domain NUMBER

Номер домена PTP в который войдет этот узел (ptpengine:domain).

-s --slaveonly

Режим вторичного (Slave) устройства (эквивалент ptpengine:preset=slaveonly).

-m --masterslave

Полная реализация IEEE 1588 — master, slave, если не является лучшим GM (ptpengine:preset=masterslave).

-M --masteronly

Только master — пассивен, если не является лучшим GM (ptpengine:preset=masteronly).

-y --hybrid

Гибридный режим с поддержкой групповой и индивидуальной адресации — групповая для синхронизации и анонсов, индивидуальная для запросов и откликов задержки (ptpengine:ip_mode=hybrid)

-U --unicast

Индивидуальная адресация (ptpengine:ip_mode=unicast). Для GM при запросах и откликах задержки (ptpengine:ip_mode=hybrid) должны указываться индивидуальные адресаты (-u, —unicast-destinations, ptpengine:unicast_destinations), если не задано индивидуальное согласование (-g, —unicast-negotiation, ptpengine:unicast_negotiation=y). Для slave должны указываться индивидуальные адресаты, если не задано индивидуальное согласование.

-g --unicast-negotiation

Разрешает индивидуальную доставку сообщений и интервал согласования сигнальных сообщений usin, как используется в профиле Telecom (также включает ptpengine:ip_mode=unicast)

-u --unicast-destinations ip/host, ip/host, …

Список индивидуальных адресатов, см. —unicast (ptpengine:ip_mode=unicast + ptpengine:unicast_destinations)

-E --e2e

Механизм сквозной задержки (ptpengine:delay_mechanism=E2E)

-P --p2p

Механизм задержки между партнерами — peer to peer (ptpengine:delay_mechanism=P2P)

-a --delay-override

В состоянии slave изменяет интервал запроса задержки, анонсированный ведущим — master (ptpengine:log_delayreq_override) — используется значение ptpengine:log_delayreq_interval.

-r --delay-interval NUMBER

Задает интервал сообщений с запросом задержки двоичным логарифмом значения (ptpengine:log_delayreq_interval)

-n --clock:no_adjust

Отключает корректировку часов (clock:no_adjust)

-D<DD...> --debug

Уровень отладки (global:debug_level), работает только при сборке RUNTIME_DEBUG.

-C --foreground

Не запускать в фоновом режиме (демон) (global:foreground=Y)

-V

Работать не в режиме демона (foreground), отображая все сообщения на стандартный вывод (global:verbose_foreground=Y)

Опции совместимости

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

-b DEV

Используемый сетевой интерфейс.

-i NUMBER

Номер домена PTP.

-G

Режим master с NTP (только master)

-W

Режим master без NTP (master/slave)

-Y NUMBER

Интервал запросов задержки (двоичный логарифм значения)

-t

Не корректировать часы.

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

Состояния порта PTPD

init INITIALIZING (инициализация)

flt FAULTY (отказ)

lstn_init LISTENING (первый раз)

lstn_reset LISTENING (после сброса)

pass PASSIVE (не лучший master, без анонсов)

uncl UNCALIBRATED (не калиброван)

slv SLAVE (ведомый)

pmst PRE-MASTER

mst MASTER (активный)

dsbl DISABLED (отключен)

? (unk) UNKNOWN (неизвестное состояние)

Формат файла статистики

При включенной записи статистики (ptpengine:log_statistics, подробный вывод на консоль или в журнальный файл — ptpengine:statistics_file) демон в режиме slave будет записывать данные о синхронизации при получении каждого сообщения Sync и Delay Response. При запуске демона или очистке журнала в файл записывается строка комментария (начинается с #), содержащая имена всех колонок. Журнальный файл использует формат CSV2 и его легко импортировать в программы обработки и электронные таблицы для анализа и построения графиков. При продолжительной работе программы файл может достигать очень большого размера, поэтому можно увеличить интервал записи сообщений с помощью параметра global:statistics_log_interval в конфигурационном файле. Размер и максимальное число записей можно также контролировать с помощью конфигурационного файла (см. ptpd2.conf — конфигурационный файл демона PTP).

Ниже описаны колонки (поля) статистических записей.

Timestamp

Время приема сообщения. Значение может иметь текстовый формат, Unixtime (с долями секунды) или включать оба варианта (в этом случае добавляется поле) в зависимости от установки global:statistics_timestamp_format (см. ptpd2.conf — конфигурационный файл демона PTP). При импорте журнального файла в программы создания графиков лучше установить  формат Unixtime (если программа его понимает) или оба, поскольку некоторые программы не могут корректно обрабатывать доли секунд при преобразовании из текстового формата.

State

Состояние порта PTP.

Clock ID

Отождествление порта, в настоящее время являющегося лучшим ведущим (master) в соответствии с определением IEEE 1588. Этот будет идентификатор локальных часов, если они являются лучшим первичным источником. Отображается как clock_id/port(host).

Порт — это номер порта часов PTP, который не следует путать с портом UDP. Идентификатор часов представляет собой 64-битовый идентификатор EUI-64, который обычно создается из 48-битового MAC-адреса путем вставки посередине его значения 0xfffe. PTPd пытается преобразовать идентификатор часов обратно в MAC-адрес и найти имя хоста из файла /etc/ethers.

Заполнение файла ethers поможет администратору распознавать ведущие узлы по их именам.

One Way Delay

Текущее значение задержки в одном направлении (или средней задержки в пути) в секундах, рассчитанное PTPd в состоянии slave из обмена сообщениями Delay Request и Delay Response.

Примечание. Если это значение остается нулевым, обычно это означает, что не было получено сообщений Delay Response скорей всего в результате проблем в сети.

Offset From Master

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

Slave to Master

Промежуточная разница времени (в секундах), полученное из обмена сообщениями Delay Request и Delay Response и применяемое для расчета односторонней задержки. Если последнее значение отвергнуто фильтром, в журнале будет указано предыдущее значение. Значение будет равно 0 при отсутствии сообщений Delay Responsed.

Master to Slave

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

Observed Drift

Интегральный «аккумулятор» системы слежения для управления часами PI — разность частот ведомых и ведущих часов. Это значение становится стабильным после стабилизации разницы во времени (смещения) и может использоваться (реально используется) для контроля стабильности часов.

Last Packet Received

Это поле показывает, какое сообщение было получено последним — S для Sync, D для Delay Response и P для Peer Delay Response при использовании режима задержки P2P. Если в журнале ведомого узла нет записей D (или P), это означает отсутствие сообщений Delay Response, которое может быть связано с проблемами в сети. Для двухступенчатых часов будет записываться S при получении Follow-up.

Sequence ID

Порядковый номер последнего полученного сообщения (Sync, Follow-Up, Delay Response, Peer Delay Response). Порядковые номера в журнале статистики могут помочь при поиске проблем синхронизации во время анализа трафика, изменение смещения или задержки в пути можно отследить для конкретного пакета, соответствующего Sequence ID.

One Way Delay Mean

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

One Way Delay Std Dev

Стандартное отклонение задержки в одном направлении, рассчитанное за последнее окно выборки.

Offset From Master Mean

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

Offset From Master Std Dev

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

Observed Drift Mean

Наблюдаемый средний дрейф (подстройка локальных часов), рассчитанный за последнее окно выборки.

Observed Drift Std Dev

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

raw delayMS

Необработанное (нефильтрованное) значение delayMS, полезное для оценки пиков и производительности фильтров.

Примечание. Все статистические значения (среднее и стандартное отклонение) будут рассчитываться и выводиться, если PTPd был собран без опции —disable-statistics. Продолжительность интервала выборки определяется установкой global:statistics_update_interval (см. ptpd2.conf — конфигурационный файл демона PTP).

Обрабатываемые сигналы

Ниже перечислены сигналы, обрабатываемые PTPd.

SIGHUP — перезагрузка конфигурационного файла (если он применяется) и повторное открытие log-файлов.

SIGUSR1 — в режиме slave принудительный сдвиг часов на значение Offset с ведущим (Master).

SIGUSR2 — сброс всех счетчиков PTP в целевой журнал (и обнуление, при ptpengine:sigusr2_clears_counters).

SIGINT|SIGTERM — аккуратное завершение с закрытием журналов и других файлов, очистка файла блокировки и выход.

SIGKILL — выход без аккуратного завершения.

Коды завершения

При успешном выходе (запущен демон или программа завершена без ошибок) ptpd2 возвращает 0. Это же значение возвращается при запуске программы с опцией -k (—check-config), если конфигурация не содержит ошибок. Отличный от 0 код возврата говорит о возникновении ошибки. При ошибке с файлом блокировки или невозможности запуска ptpd2 в режиме демона возвращается код 3. При ошибках выделения памяти в процессе запуска возвращается код 2. Во остальных случаях, таких как ошибки конфигурации, запуск ptpd2 в режиме справки (help) или без параметров, самозакрытии программы, сетевых ошибках при старте или попытки запуска ptpd2 от имени пользователя без полномочий (не root) возвращается код 1.

Поддерживаемые платформы и архитектура

PTPd полностью поддерживается в Linux и FreeBSD, поскольку основные усилия разработчиков сосредоточены на этих ОС. OpenBSD и NetBSD также поддерживаются, но с меньшим вниманием разработчиков. Поддерживается Mac OS X, а с версии PTPd 2.3.1 и OpenSolaris (11) (протестировано на OmniOS). ОС Sun/Oracle Solaris 11 не тестировалась, но по сути все должно работать. Solaris 10 не поддерживается по причине отсутствия поддержки сокета SO_TIMESTAMP. Теоретически можно использовать Solaris 10 с применением pf для snoop, но в настоящее время работа в этом направлении не ведется. Представлены исправления (patch) для QNX/Neutrino, но они еще не включены официально по причине отсутствия QNX для разработчиков. Некоторые пользователи переносили PTPd на другие RTOS, но это также еще не включено.

Начиная с версии 2.3.1, PTPd полностью работает на программном уровне и опирается только на ядро и OS API без привязки к оборудованию. Любой порт little-endian или big-endian в современных версиях поддерживаемых ОС должен работать, но активно тестировались только x86 и ARM. Единственной тесной привязкой к оборудованию являются драйверы сетевых адаптеров и их влияние на программные временные метки.

Поддержка аппаратных временных меток

В версии 2.3.1, PTPd по-прежнему не поддерживает аппаратных временных меток. Такая функциональность появится в версии 2.4 и возможно в промежуточных версиях 2.3.x, которые будут поддерживать аппаратные часы и временные метки Linux. Это сильно зависит от ОС, а в значительной степени и от оборудования. В Linux имеется API ядра для PTP, но его поддерживает не все оборудование. Поскольку PTPd работает в разных ОС, где аппаратные временные метки могут использовать разные механизмы на каждой платформе, программа должна быть переписана в модульном стиле, чтобы можно было вносить изменения без ненужного усложнения кода, что само по себе является проблемой.

Ошибки

Начиная с версии ptpd 2.3.1, полностью поддерживается семейство (Open)Solaris (11) OS, но без функциональности libpcap, что не позволяет применять транспорт IPv4/pcap и Ethernet. PTPd можно собрать и запустить, но никаких данных не будет получено.

При обнаружении каких-либо ошибок сообщайте о них через страницу SourceForge.

ptpd2.conf — конфигурационный файл демона PTP

Формат файла

Настройки в конфигурационном файле PTPd сгруппированы по разделам и имеют форму section:key=value. Конфигурационный файл может быть форматирован таким способом (предпочтительно) или в стиле .ini, где строки key=value группируются в разделы с заголовками [section]. Каждая из описанных здесь настроек может быть задана параметрами командной строки (—section:key=value). Использование кавычек необязательно. Конфигурационный файл должен завершаться пустой строкой.

Перезагрузка конфигурации

Лишь небольшое число конфигурационных установок (SNMP, файл блокировки) требуют перезапуска процесса PTPd для вступления настроек в силу. Остальные настройки можно менять в процессе работы ptpd — конфигурационный файл считывается заново и проверяется при получении демоном PTPd сигнала SIGHUP. При перезагрузке конфигурации PTPd всегда пытается проверить настройки до их применения и никогда не прерывает работу в результате конфигурационных ошибок. Если такое произошло, это скорей всего связано с программной ошибкой.

Приоритет командной строки

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

Разделы конфигурационного файла

ptpengine

Настройки протокола PTP.

clock

Настройки, связанные с часами.

servo

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

global

Глобальные параметры — запись событий в журнал и т. п.

ntpengine

Настройки NTP.

variables

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

Пользовательские переменные

Чтобы упростить управление конфигурацией и автоматизированную настройку, PTPd поддерживает пользовательские переменные, которые могут быть определены в конфигурационном файле или командной строке. Переменные определяются в форме variables:[name]=[value] или с использованием стиля .ini в разделе [variables]. После определения переменной ее можно указывать в последующих конфигурационных настройках в форме @name@, куда будет автоматически подставляться заданное значение переменной.

Пример

variables:instance=server15
global:status_file=/var/run/ptpd2.@instance@.status
global:log_file=/var/run/ptpd2.@instance@.status

Отметим, что такой же результат может был получен из командной строки ptpd при задании параметров —config=/path/to/file —variables:instance=server15

Встроенные переменные

PTPd включает поддержку встроенных переменных, определяемых автоматически.

@pid@ — текущий идентификатор процесса PTPd.

@hostname@ — текущее имя хоста.

Конфигурационные шаблоны и файлы шаблонов

Начиная с версии 2.3.1.1, ptpd позволяет пользователю минимизировать усилия по настройке базовых вариантов с помощью встроенных шаблонов и шаблонных файлов. Шаблоном называется набор предопределенных настроек, которые указываются до каких-либо других установок, поэтому пользователь может переопределить нужные ему значения. Для использования этой возможности следует указать строку global:config_templates=[name],[name],… в конфигурационном файле или запустить ptpd с параметром —global:config_templates=[name],[name],…. Можно указать несколько шаблонов, разделенных запятыми, пробелами или символами табуляции и при совпадении в них тех или иных настроек будет действовать значение из последнего шаблона. Шаблоны могут включать пользовательские переменные.

Множество шаблонов можно задать также в форме global:template_files (список разделенных запятыми, пробелами или символами табуляции полных путей к файлам). Файлы шаблонов будут обрабатываться в указанном порядке и при совпадении настроек действовать будет значение из последнего файла. PTPd также будет пытаться загрузить при старте заданный по умолчанию шаблон templates.conf из принятого по умолчанию конфигурационного каталога /usr/share/ptpd/templates.conf.

Файлы шаблонов форматируются в стиле .ini — каждый шаблон представляет раздел, определенный как [template-name], за которым следуют параметры в форме section:setting.

Example:

[my-template]
global:verbose_foreground=Y
ptpengine:preset=slaveonly

Для просмотра списка встроенных шаблонов используется команда ptpd с параметром -T или —show-templates

Параметры конфигурации

ptpengine:interface [STRING]

Обязательный параметр, указывающий используемый сетевой интерфейс по имени (eth0, igb0 и т. п.). См. также ptpengine:backup_interface.

Значение по умолчанию отсутствует.

ptpengine:backup_interface [STRING]

Указывает резервный сетевой интерфейс для работы (eth0, igb0 и т. п.). При недоступности GM ведомый узел будет чередовать основного и резервного ведущего, пока не будет найден GM.

Значение по умолчанию отсутствует.

ptpengine:preset [SELECT]

Варианты — none, slaveonly, masteronly, masterslave

Задает режим работы машины PTP3.

none — нет ограничений на класс часов;

slaveonly — только ведомый (только класс часов 255);

masteronly — ведущий, пассивных, когда не является лучшим (класс часов 0..127);

masterslave — полная реализация IEEE 1588 — ведущий или ведомый, если если имеется лучший ведущий (класс часов 128..254).

Значение по умолчанию — slaveonly.

ptpengine:transport [SELECT]

Варианты — ipv4, ethernet

Определяет способ доставки пакетов PTP4.

Значение по умолчанию — ipv4

ptpengine:dot1as [BOOLEAN]

Включает совместимость с IEEE 802.1AS/AVB (поле transportSpecific в заголовке сообщений PTP). Требует транспорта Ethernet, поскольку это единственное из используемых отображений 802.1AS, которое поддерживает PTP.

Значение по умолчанию — N.

ptpengine:ip_mode [SELECT]

Варианты — multicast, unicast, hybrid.

Режим адресации IP (требуется транспорт IP).

multicast — групповая адресация для всех сообщений.

hybrid — групповая адресация для sync и announce, индивидуальная для запросов задержки и откликов на них.

unicast — индивидуальная адресация для всех передач. При выборе режима IP-адреса получателей (ptpengine:unicast_destinations) должны задаваться в зависимости от настройки согласования индивидуальной адресации (ptpengine:unicast_negotiation) и роли ведущего или ведомого (ptpengine:unicast_destinations).

Значение по умолчанию — multicast.

ptpengine:disabled [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:unicast_negotiation [BOOLEAN]

Включает согласование индивидуальной адресации с использованием сигнальных сообщений, как в профиле Telecom (ITU-T G.8265.1).

Значение по умолчанию — N.

ptpengine:unicast_grant_duration [INT: 30 .. 604800]

Задает продолжительность (в секундах) интервала, в течение которого передача индивидуальных сообщение предоставляется ведущим узлом или запрашивается ведомым в случае согласования индивидуальной передачи (ptpengine:unicast_negotiation). При использовании PTPd с другими реализациями PTP, программа PTPd никогда не отказывается предоставлять сообщения на основе запрошенной длительности интервала — она будет предоставлять интервал 30, если запрошено меньшее значение и 7 дней (604800 секунд), если запрошено слишком большое значение.

Значение по умолчанию — 300

ptpengine:disable_bmca [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:unicast_any_master [BOOLEAN]

При использовании согласования индивидуальной адресации (slave) задает восприятие сообщений PTP от любого GM. По умолчанию воспринимаются сообщения только от подходящих ведущих (ptpengine:unicast_destinations) при условии, что передача предоставлена GM. Эта установка может применяться при комбинации GM, поддерживающих G.8265.1, и заданной вручную (без согласования) индивидуальной адресации или для решения проблем взаимодействия, когда сигнальные и синхронизирующие сообщения приходят с разными идентификаторами порта.

Значение по умолчанию — N.

ptpengine:unicast_port_mask [INT: 0 .. 65535 (0xFFFF)]

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

Значение по умолчанию — 0.

ptpengine:disable_udp_checksums [BOOLEAN]

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

Значение по умолчанию — Y

ptpengine:use_libpcap [BOOLEAN]

Задает использование libpcap для передачи и приема трафика (автоматически включается в режиме Ethernet). Требует сборки программы с libpcap, а опция сборки —disable-pcap не позволяет использовать эту функцию. Начиная с версии 2.3.1, в Solaris не используется libpcap, если при сборке не была указана опция -enable-experimental-options.

Значение по умолчанию — N.

ptpengine:delay_mechanism [SELECT]

Варианты — E2E, P2P, DELAY_DISABLED.

Задает использование механизма обнаружения задержки. Если нужна лишь синхронизация, следует выбирать DELAY_DISABLED. Режим E2E использует сообщения Delay Request, P2P — Peer Delay Request.

Значение по умолчанию — E2E

ptpengine:domain [INT: 0 .. 127]

Задает номер домена PTP.

Значение по умолчанию — 0.

ptpengine:any_domain [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:port_number [INT: 1 .. 65534]

Номер порта PTP (часть PTP Port Identity, а не порт UDP). Для обычных часов (один порт) следует использовать принятое по умолчанию значение, но при запуске нескольких экземпляров для имитации граничных часов номер порта можно менять.

Значение по умолчанию — 1

ptpengine:port_description [STRING: до 64 символов]

Пользовательское описание порта PTP, возвращаемое в ответ на сообщения USER_DESCRIPTION и CLOCK_DESCRIPTION.

Значение по умолчанию — [ptpd]

ptpengine:slave_only [BOOLEAN]

Задает работу в режиме «только ведомый» (slave only) и устанавливает класс часов 255, отменяя предустановку.

Значение по умолчанию — Y

ptpengine:inbound_latency [INT]

Задает корректировку задержки (в наносекундах) для входящих пакетов.

Значение по умолчанию — 0.

ptpengine:outbound_latency [INT]

Задает корректировку задержки (в наносекундах) для исходящих пакетов.

Значение по умолчанию — 0.

ptpengine:offset_shift [INT]

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

Значение по умолчанию — 0.

ptpengine:always_respect_utc_offset [BOOLEAN]

Опция для совместимости. В режиме всегда применяется смещение от UTC (часовой пояс), указанное ведущим, даже если для текущего флага currrentUtcOffsetValid установлено значение FALSE1.

Значение по умолчанию — N.

ptpengine:prefer_utc_offset_valid [BOOLEAN]

Расширение совместимости для алгоритма BMC. При включенной опции BMC для ведущих и ведомых часов будет предпочитать ведущего, анонсирующего currrentUtcOffsetValid = TRUE1.

Значение по умолчанию — N.

ptpengine:require_utc_offset_valid [BOOLEAN]

Опция для совместимости, при включении которой ptpd2 будет игнорировать сообщения Announce от ведущих, анонсирующих currentUtcOffsetValid = FALSE1.

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

ptpengine:log_announce_interval [INT: -4 .. 7]

Интервал анонсов PTP в состоянии master. При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) для ведомых это значение служит начальным (минимальным) запрашиваемым интервалом, а для ведущих — минимальным предоставляемым интервалом. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 1.

ptpengine:log_announce_interval_max [INT: -1 .. 7]

При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) это будет максимальный интервал анонсирования, предоставляемый ведущим и максимальный интервал, который будет пытаться запросить ведомый. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 5.

ptpengine:announce_receipt_timeout [INT: 2 .. 255]

Тайм-аут приема анонсов PTP, анонсированный в состоянии master.

Значение по умолчанию — 6.

ptpengine:announce_receipt_grace_period [INT: 0 .. 20]

Тайм-аут приема анонсов PTP, применяемый в состоянии slave. При возникновении тайм-аута получения анонсов дисквалифицируется текущий лучший GM, затем выжидается n тайм-аутов получения анонсов перед сбросом. Это обеспечивает аккуратно восстановление при отказе GM, когда резервные GM реагируют медленно. При установке значения 0, эта опция не используется.

Значение по умолчанию — 0.

ptpengine:log_sync_interval [INT: -7 .. 7]

Интервал синхронизирующих сообщений PTP в состоянии master. При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) для ведомых это значение служит начальным (минимальным) запрашиваемым интервалом, а для ведущих — минимальным предоставляемым интервалом. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 0.

ptpengine:log_sync_interval_max [INT: -1 .. 7]

При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) это будет максимальный интервал Sync, предоставляемый ведущим, и максимальный вариант, который будут пытаться запросить ведомые. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 5.

ptpengine:log_delayreq_override [BOOLEAN]

Заменяет значение интервала Delay Request, предоставленное лучшим ведущим.

Значение по умолчанию — N.

ptpengine:log_delayreq_auto [BOOLEAN]

Автоматически заменяет значение интервала Delay Request (на ptpengine:log_delayreq_interval), если принятое значение равно 127 (0X7F), например в индивидуальных сообщениях, если не используется согласование индивидуальной адресации (ptpengine:unicast_negotiation).

Значение по умолчанию — Y.

ptpengine:log_delayreq_interval_initial [INT: -7 .. 7]

Интервал Delay Request, используемый до получения первого Delay Response. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 0.

ptpengine:log_delayreq_interval [INT: -7 .. 7]

Минимальный интервал Delay Request, анонсированный в состоянии master. В состоянии slave это значение переопределяет интервал ведущего. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д. При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) для ведомых это значение служит начальным (минимальным) запрашиваемым интервалом, а для ведущих — минимальным предоставляемым интервалом.

Значение по умолчанию — 0.

ptpengine:log_delayreq_interval_max [INT: -1 .. 7]

При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) это будет максимальный интервал Delay Request, предоставляемый ведущим, и максимальный вариант, который будут пытаться запросить ведомые. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

ptpengine:log_peer_delayreq_interval [INT: -7 .. 7]

Минимальный интервал Delay Request в одноранговом режиме. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д. При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) это значение служит начальным (минимальным) запрашиваемым у партнера интервалом и — минимальным предоставляемым партнеру интервалом.

Значение по умолчанию — 1.

ptpengine:log_peer_delayreq_interval_max [INT: -1 .. 7]

При использовании согласования индивидуальной адресации (ptpengine:unicast_negotiation) это будет максимальный интервал Delay Request для партнера, предоставляемый узлом и максимальный интервал, который узел будет пытаться запросить у партнера. Выражается в форме двоичного логарифма, -1=0,5 сек, 0=1 сек, 1=2 сек и т. д.

Значение по умолчанию — 5.

ptpengine:foreignrecord_capacity [INT: 5 .. 10]

Размер записей для внешних ведущих (максимальное число внешних ведущих).

Значение по умолчанию — 5.

ptpengine:ptp_allan_variance [INT: 0 .. 65535]

Задает вариацию Allan, анонсируемую в состоянии master.

Значение по умолчанию — 28768.

ptpengine:ptp_clock_accuracy [SELECT]

Варианты — ACC_25NS, ACC_100NS, ACC_250NS, ACC_1US, ACC_2.5US, ACC_10US, ACC_25US, ACC_100US, ACC_250US, ACC_1MS, ACC_2.5MS, ACC_10MS, ACC_25MS, ACC_100MS, ACC_250MS, ACC_1S, ACC_10S, ACC_10SPLUS, ACC_UNKNOWN.

Диапазон точности часов, анонсируемый в состоянии master.

Значение по умолчанию — ACC_UNKNOWN.

ptpengine:utc_offset [INT]

Смещение базового источника времени от UTC, анонсируемое в состоянии master.

Значение по умолчанию — 0.

ptpengine:utc_offset_valid [BOOLEAN]

Обоснованность смещения базового источника времени от UTC, анонсируемого в состоянии master.

Значение по умолчанию — N.

ptpengine:time_traceable [BOOLEAN]

Трассируемость смещения базового источника времени от UTC, анонсируемого в состоянии master.

Значение по умолчанию — N.

ptpengine:frequency_traceable [BOOLEAN]

Трассируемость частоты базового источника времени, анонсируемого в состоянии master.

Значение по умолчанию — N.

ptpengine:ptp_timescale [SELECT]

Варианты — PTP, ARB.

Шкала времени, анонсируемого в состоянии master (для ARB ведомые узлы игнорируют свойства UTC). Для класса часов 13 (зависит от приложения) это значение игнорируется и применяется ARB.

Значение по умолчанию — ARB.

ptpengine:ptp_timesource [SELECT]

Варианты — ATOMIC_CLOCK, GPS TERRESTRIAL_RADIO, PTP, NTP, HAND_SET, OTHER, INTERNAL_OSCILLATOR.

Источник времени, анонсируемый в состоянии master.

Значение по умолчанию — INTERNAL_OSCILLATOR.

ptpengine:clock_class [INT: 0 .. 255]

Класс часов, анонсируемый в состоянии master. Для режима «только ведомый» всегда 255. Минимальное, максимальное и принятое по умолчанию значения контролируются предустановками. При установке значения 13 (зависимый от приложения источник времени) анонсируемой шкалой времени всегда будет ARB. Эта настройка контролирует возможные состояния порта PTP. При значении меньше 128 порт может находиться лишь в состоянии MASTER или PASSIVE (master only). При значении больше 127 порт будет находится в состоянии MASTER или SLAVE.

Значение по умолчанию — 255.

ptpengine:priority1 [INT: 0 .. 248]

Значение Priority 1, анонсируемое в состоянии master и применяемое при выборе Best Master Clock.

Значение по умолчанию — 128.

ptpengine:priority2 [INT: 0 .. 248]

Значение Priority 2, анонсируемое в состоянии master и применяемое при выборе Best Master Clock.

Значение по умолчанию — 128.

ptpengine:max_listen [INT: min: 1 ]

Число последовательных сбросов протокола в состояние LISTENING перед полным сбросом сети.

Значение по умолчанию — 5.

ptpengine:unicast_destinations [STRING]

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

Значение по умолчанию отсутствует.

ptpengine:unicast_domains [STRING]

Задает номер домена PTP для каждого настроенного индивидуального получателя (ptpengine:unicast_destinations). Эта настройка применяется лишь часами slave-only с множеством индивидуальных получателей, чтобы каждый ведущий узел был в своем домене, как это делается в профиле Telecom. Число записей должно совпадать с числом индивидуальных получателей, иначе для ненастроенных доменов или доменов 0 будут будет установлен номер из ptpengine:domain. Значения в виде целых чисел без знака (0 .. 255) разделяются запятыми, пробелами или символами табуляции.

Значение по умолчанию отсутствует.

ptpengine:unicast_local_preference [STRING]

Задает локальное предпочтение для каждого настроенного индивидуального получателя (ptpengine:unicast_destinations). Эта настройка применяется лишь часами slave-only с множеством индивидуальных получателей, чтобы каждый ведущий узел был в своем домене, как это делается в профиле Telecom. Число записей должно совпадать с числом индивидуальных получателей, иначе для ненастроенного предпочтения будет установлено значение 255 (минимум) и ненастроенные записи не будут вытеснять сконфигурированные. Значения в виде целых чисел без знака (0 .. 255) разделяются запятыми, пробелами или символами табуляции.

Значение по умолчанию отсутствует.

ptpengine:unicast_peer_destination [STRING]

При использовании режима IP с индивидуальной адресацией (ptpengine:ip_mode=unicast) и однорангового механизма задержки (ptpengine:delay_mechanism=P2P) партнер с индивидуальным адресом должен быть указан для запроса у него задержки. Формат использует индивидуальный адрес IPv4.

Значение по умолчанию отсутствует.

ptpengine:management_enable [BOOLEAN]

Включает обработку управляющих сообщений PTP. По умолчанию обрабатываются лишь сообщения GET. См. также ptpengine:management_set_enable.

Значение по умолчанию — Y.

ptpengine:management_set_enable [BOOLEAN]

Задает восприятие управляющих сообщений SET и COMMAND.

Значение по умолчанию — N.

ptpengine:igmp_refresh [BOOLEAN]

Передает явные запросы IGMP join между сбросами и периодически в состоянии master.

Значение по умолчанию — Y.

ptpengine:master_igmp_refresh_interval [INT: 0 .. 255]

Задает интервал (в секундах) периодической отправки IGMP join в состоянии master при групповой адресации IPv4. Значения меньше 10 или при отключенном ptpengine:igmp_refresh не оказывают никакого влияния.

Значение по умолчанию — 60.

ptpengine:multicast_ttl [INT: 1 .. 64]

Групповое время жизни для multicast-пакетов PTP (игнорируется и устанавливается 1 для одноранговых сообщений).

Значение по умолчанию — 64.

ptpengine:ip_dscp [INT: 0 .. 63]

Значение DiffServ для приоритизации пакетов (десятичное). При значении 0 опция не используется, 46 (0x2e) задает ускоренную пересылку.

Значение по умолчанию — 0.

ptpengine:sync_stat_filter_enable [BOOLEAN]

Включает статистический фильтр для сообщений Sync.

Значение по умолчанию — N.

ptpengine:sync_stat_filter_type [SELECT]

Варианты — none, mean, min, max, absmin, absmax, median.

Тип фильтра для сообщений Sync.

none — без фильтрации.

mean — среднее, сглаживание с учетом пиков.

min — минимальное значение, полезно при значительных вариациях задержки («удачливые пакеты»).

max — максимальное значение, полезно для тестирования наихудших сценариев.

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

absmax — абсолютный максимум (дальше всего от 0).

median — медиана (среднее значение) — более «здравое», нежели mean, но подверженное влиянию пиков.

Значение по умолчанию — min.

ptpengine:sync_stat_filter_window [INT: 3 .. 128]

Число выборок для статистического фильтра Sync.

Значение по умолчанию — 4.

ptpengine:sync_stat_filter_window_type [SELECT]

Варианты — sliding, interval.

Поведение окна выборки для статистического фильтра Sync.

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

interval — выводит только значение каждой n-й выборки (полное окно), независимо от интервала выборки.

Значение по умолчанию — sliding.

ptpengine:delay_stat_filter_enable [BOOLEAN]

Включает статистический фильтр для сообщений Delay.

Значение по умолчанию — N.

ptpengine:delay_stat_filter_type [SELECT]

Варианты — none, mean, min, max, absmin, absmax, median.

Тип фильтра для сообщений Delay.

none — без фильтрации.

mean — среднее, сглаживание с учетом пиков.

min — минимальное значение, полезно при значительных вариациях задержки («удачливые пакеты»).

max — максимальное значение, полезно для тестирования наихудших сценариев.

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

absmax — абсолютный максимум (дальше всего от 0).

median — медиана (среднее значение) — более «здравое», нежели mean, но подверженное влиянию пиков.

Значение по умолчанию — min.

ptpengine:delay_stat_filter_window [INT: 3 .. 128]

Число выборок для статистического фильтра Delay.

Значение по умолчанию — 4.

ptpengine:delay_stat_filter_window_type [SELECT]

Варианты — sliding, interval.

Поведение окна выборки для статистического фильтра Delay.

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

interval — выводит только значение каждой n-й выборки (полное окно), независимо от интервала выборки.

Значение по умолчанию — sliding.

ptpengine:delay_outlier_filter_enable [BOOLEAN]

Включает фильтр пиков для компоненты Delay Response в состоянии slave.

Значение по умолчанию — N.

ptpengine:delay_outlier_filter_action [SELECT]

Варианты — discard, filter.

Действие фильтра Delay Response. При установке значения filter, пики заменяются скользящим средним значением.

Значение по умолчанию — discard.

ptpengine:delay_outlier_filter_capacity [INT: 4 .. 60]

Число выборок в буфере фильтра пиков Delay Response.

Значение по умолчанию — 20.

ptpengine:delay_outlier_filter_threshold [FLOAT: 0.001000 .. 1000.000000]

Порог фильтра пиков Delay Response — множитель для максимального стандартного отклонения Пирса (Peirce). При значении больше 1,0 фильтр становится жестче стандартного фильтра Пирса.

Значение по умолчанию — 1.000000.

ptpengine:delay_outlier_filter_always_filter [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:delay_outlier_filter_autotune_enable [BOOLEAN]

Автоматически включает контроль порога для фильтра пиков Delay Response.

Значение по умолчанию — Y.

ptpengine:delay_outlier_filter_autotune_minpercent [INT: 0 .. 99]

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

Значение по умолчанию — 20.

ptpengine:delay_outlier_filter_autotune_maxpercent [INT: 1 .. 100]

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

Значение по умолчанию — 95.

ptpengine:delay_outlier_filter_autotune_step [FLOAT: 0.010000 .. 10.000000]

Шаг изменения порога фильтра пиков Delay Response для увеличения и уменьшения при автонастройке.

Значение по умолчанию — 0..10.0000

ptpengine:delay_outlier_filter_autotune_minthreshold [FLOAT: 0.010000 .. 10.000000]

Нижний предел фильтра Delay Response при автонастройке.

Значение по умолчанию — 0..10.0000

ptpengine:delay_outlier_filter_autotune_maxthreshold [FLOAT: 0.010000 .. 10.000000]

Верхний предел фильтра Delay Response при автонастройке.

Значение по умолчанию — 5.000000.

ptpengine:delay_outlier_weight [FLOAT: 0.010000 .. 2.000000]

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

Значение по умолчанию — 1.000000.

ptpengine:delay_outlier_filter_stepdetect_enable [BOOLEAN]

Включает детектирование шагов фильтра Delay Response (delaySM) для блокировки при достижении некого значения.

Значение по умолчанию — N.

ptpengine:delay_outlier_filter_stepdetect_threshold [INT: 50000 .. 999999999]

Порог детектирования шага. Детектирование выполняется только при значении delaySM (в наносекундах) ниже порога.

Значение по умолчанию — 1000000.

ptpengine:delay_outlier_filter_stepdetect_level [INT: 50000 .. 999999999]

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

Значение по умолчанию — 500000.

ptpengine:delay_outlier_filter_stepdetect_credit [INT: 50 .. 1000]

Начальный запас (число выборок) фильтра детектирования шагов Delay, для которого фильтр может начать блокировку. При исчерпании запаса фильтр прекращает блокировку. Запас постепенно восстанавливается (ptpengine:delay_outlier_filter_stepdetect_credit_increment).

Значение по умолчанию — 200.

ptpengine:delay_outlier_filter_stepdetect_credit_increment [INT: 1 .. 100]

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

Значение по умолчанию — 10.

ptpengine:sync_outlier_filter_enable [BOOLEAN]

Включает фильтр пиков для компоненты Sync в состоянии slave.

Значение по умолчанию — N.

ptpengine:sync_outlier_filter_action [SELECT]

Варианты — discard, filter.

Действие фильтра пиков Sync. При установке filter пики заменяются скользящим средним значением.

Значение по умолчанию — discard.

ptpengine:sync_outlier_filter_capacity [INT: 4 .. 60]

Число выборок для буфера фильтра пиков Sync.

Значение по умолчанию — 20.

ptpengine:sync_outlier_filter_threshold [FLOAT: 0.001000 .. 1000.000000]

Порог фильтра пиков Sync — множитель для максимального стандартного отклонения Пирса (Peirce). При значении больше 1,0 фильтр становится жестче стандартного фильтра Пирса.

Значение по умолчанию — 1.000000.

ptpengine:sync_outlier_filter_always_filter

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

Значение по умолчанию — N.

ptpengine:sync_outlier_filter_autotune_enable [BOOLEAN]

Включает автоматический контроль порога для фильтра пиков Sync.

Значение по умолчанию — Y.

ptpengine:sync_outlier_filter_autotune_minpercent [INT: 0 .. 99]

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

Значение по умолчанию — 20.

ptpengine:sync_outlier_filter_autotune_maxpercent [INT: 1 .. 100]

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

Значение по умолчанию — 95.

ptpengine:sync_outlier_filter_autotune_step [FLOAT: 0.010000 .. 10.000000]

Шаг изменения порога фильтра пиков Sync для увеличения и уменьшения при автонастройке.

Значение по умолчанию — 0..100000

ptpengine:sync_outlier_filter_autotune_minthreshold [FLOAT: 0.010000 .. 10.000000]

Нижний предел фильтра Sync при автонастройке.

Значение по умолчанию — 0..100000.

ptpengine:sync_outlier_filter_autotune_maxthreshold [FLOAT: 0.010000 .. 10.000000]

Верхний предел фильтра Sync при автонастройке.

default 5.000000

ptpengine:sync_outlier_weight [FLOAT: 0.010000 .. 2.000000]

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

Значение по умолчанию — 1.000000.

ptpengine:sync_outlier_filter_stepdetect_enable [BOOLEAN]

Включает детектирование шагов фильтра Sync (delaySM) для блокировки при достижении некого значения.

Значение по умолчанию — N.

ptpengine:sync_outlier_filter_stepdetect_threshold [INT: 50000 .. 999999999]

Порог детектирования шага. Детектирование выполняется только при значении delaySM (в наносекундах) ниже порога.

Значение по умолчанию — 1000000.

ptpengine:sync_outlier_filter_stepdetect_level [INT: 50000 .. 999999999]

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

Значение по умолчанию — 500000.

ptpengine:sync_outlier_filter_stepdetect_credit [INT: 50 .. 1000]

Начальный запас (число выборок) фильтра детектирования шагов Sync, для которого фильтр может начать блокировку. При исчерпании запаса фильтр прекращает блокировку. Запас постепенно восстанавливается (ptpengine:sync_outlier_filter_stepdetect_credit_increment).

Значение по умолчанию — 200.

ptpengine:sync_outlier_filter_stepdetect_credit_increment [INT: 1 .. 100]

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

Значение по умолчанию — 10.

ptpengine:sync_sequence_checking [BOOLEAN]

При включенной опции сообщения Sync воспринимаются лишь при росте порядковых номеров6.

Значение по умолчанию — N.

ptpengine:clock_update_timeout [INT: 0 .. 3600]

Отличное от нуля значение задает время (в секундах) перед сбросом ведомого узла в состояние PTP_LISTENING, если нет обновления часов. Это полезно в ситуациях, когда ведомый узел находится в состоянии SLAVE (приме Announce), но не получает или не воспринимает сообщения Sync.

Значение по умолчанию — 0.

ptpengine:calibration_delay [INT: 0 .. 300]

Задержка (в секундах) между переходом в состояние ведомого и разрешением обновлять часы. Это позволяет стабилизировать среднюю задержку в пути перед началом обновления часов. Активизируется при переходе в состояние ведомого и переключении GM, используемого ведомым. При значении 0 задержка не используется.

Значение по умолчанию — 0.

ptpengine:idle_timeout [INT: 10 .. 3600]

Тайм-аут бездействия PTP (в секундах). Если PTPd находится в состоянии SLAVE и не было обновлений часов в течение этого времени, PTPd освобождает управления часами.

Значение по умолчанию — 0.

ptpengine:offset_alarm_threshold [INT: 0 .. 999999999]

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

Значение по умолчанию — 0.

ptpengine:panic_mode [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:panic_mode_duration [INT: 1 .. 60]

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

Значение по умолчанию — 2.

ptpengine:panic_mode_release_clock [BOOLEAN]

При входе в режим тревоги управление часами освобождается на весь период тревоги. Если этот режим не задан, PTP будет контролировать часы в режиме тревоги. При установке вместе с ntpengine:* произойдет переключение на NTP.

Значение по умолчанию — N.

ptpengine:panic_mode_exit_threshold [INT: 0 .. 999999999]

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

Значение по умолчанию — 0.

ptpengine:pid_as_clock_identity [BOOLEAN]

Идентификатор процесса ptpd служит средней частью идентификатора часов PTP. Полезно при запуске множества экземпляров.

Значение по умолчанию — N.

ptpengine:ntp_failover [BOOLEAN]

Переключение на NTP при невозможности синхронизации по PTP. Требует ntpengine:enabled, но не требует другой настройки конфигурации NTP и будет выдавать предупреждение взамен переключения, если нет управления ntpd.

Значение по умолчанию — N.

ptpengine:ntp_failover_timeout [INT: 0 .. 1800]

Тайм-аут переключения на NTP в секундах — время между переходом ведомого узла PTP в состояние LISTENING и переключением на NTP. Значение 0 задает незамедлительное переключение. Эта настройка управляет временем удержания выбора источника точного времени.

Значение по умолчанию — 60.

ptpengine:prefer_ntp [BOOLEAN]

Задает предпочтение синхронизации NTP с использованием PTP лишь при недоступности NTP. Подходит для использования NTP с локальным приемником GPS или иным устройством точного времени.

Значение по умолчанию — N.

ptpengine:panic_mode_ntp [BOOLEAN]

Отменена в версии 2.3.1, но поддерживается (см. ptppengine:panic_mode_release_clock).

Значение по умолчанию — N.

ptpengine:sigusr2_clears_counters [BOOLEAN]

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

Значение по умолчанию — N.

ptpengine:timing_acl_permit [STRING]

Разрешающий список контроля доступа для сигнальных и синхронизирующих сообщений. Строка представляет собой последовательность префиксов и/или адресов IP, разделенных запятыми, пробелами, символами табуляции или точки с запятой. Принимается нотация CIDR (a.b.c.d/mm), отдельные адреса IP (a.b.c.d) или полное указание сети и маски (a.b.c.d/m.m.m.m). Можно применять сокращения вида 172.16/12 вместо 172.16.0.0/12 или 192.168/255.255 вместо 192.168.0.0/255.255.0.0 и т. п. Выполняется сопоставление списка с IP-отправителя во входящих сообщениях. Списки доступа IP поддерживаются только в транспортном режиме IP.

Значение по умолчанию отсутствует.

ptpengine:timing_acl_deny [STRING]

Запрещающий список контроля доступа для сигнальных и синхронизирующих сообщений. Строка представляет собой последовательность префиксов и/или адресов IP, разделенных запятыми, пробелами, символами табуляции или точки с запятой. Принимается нотация CIDR (a.b.c.d/mm), отдельные адреса IP (a.b.c.d) или полное указание сети и маски (a.b.c.d/m.m.m.m). Можно применять сокращения вида 172.16/12 вместо 172.16.0.0/12 или 192.168/255.255 вместо 192.168.0.0/255.255.0.0 и т. п. Выполняется сопоставление списка с IP-отправителя во входящих сообщениях. Списки доступа IP поддерживаются только в транспортном режиме IP.

Значение по умолчанию отсутствует.

ptpengine:management_acl_permit [STRING]

Разрешающий список контроля доступа для управляющих сообщений. Строка представляет собой последовательность префиксов и/или адресов IP, разделенных запятыми, пробелами, символами табуляции или точки с запятой. Принимается нотация CIDR (a.b.c.d/mm), отдельные адреса IP (a.b.c.d) или полное указание сети и маски (a.b.c.d/m.m.m.m). Можно применять сокращения вида 172.16/12 вместо 172.16.0.0/12 или 192.168/255.255 вместо 192.168.0.0/255.255.0.0 и т. п. Выполняется сопоставление списка с IP-отправителя во входящих сообщениях. Списки доступа IP поддерживаются только в транспортном режиме IP.

Значение по умолчанию отсутствует.

ptpengine:management_acl_deny [STRING]

Запрещающий список контроля доступа для управляющих сообщений. Строка представляет собой последовательность префиксов и/или адресов IP, разделенных запятыми, пробелами, символами табуляции или точки с запятой. Принимается нотация CIDR (a.b.c.d/mm), отдельные адреса IP (a.b.c.d) или полное указание сети и маски (a.b.c.d/m.m.m.m). Можно применять сокращения вида 172.16/12 вместо 172.16.0.0/12 или 192.168/255.255 вместо 192.168.0.0/255.255.0.0 и т. п. Выполняется сопоставление списка с IP-отправителя во входящих сообщениях. Списки доступа IP поддерживаются только в транспортном режиме IP.

Значение по умолчанию отсутствует.

ptpengine:timing_acl_order [SELECT]

Варианты — permit-deny, deny-permit.

Порядок, в котором применяются разрешающие и запрещающие списки контроля доступа для сигнальных и синхронизирующих сообщений. Процесс совпадает с принятым в Apache httpd (см. http://httpd.apache.org/docs/current/mod/mod_access_compat.html#order).

Значение по умолчанию — deny-permit.

ptpengine:management_acl_order [SELECT]

Варианты — permit-deny, deny-permit.

Порядок, в котором применяются разрешающие и запрещающие списки контроля доступа для управляющих сообщений. Процесс совпадает с принятым в Apache httpd (см. http://httpd.apache.org/docs/current/mod/mod_access_compat.html#order).

Значение по умолчанию — deny-permit.

clock:no_adjust [BOOLEAN]

Не корректировать часы.

Значение по умолчанию — N.

clock:no_reset [BOOLEAN]

Не сбрасывать часы, только «подводить».

Значение по умолчанию — N.

clock:step_startup_force [BOOLEAN]

Принудительно корректировать часы после запуска независимо от сдвига и установки clock:no_reset.

Значение по умолчанию — N.

clock:step_startup [BOOLEAN]

Корректировать часы при старте только при разнице не меньше 1 секунды, игнорируя режим тревоги и clock:no_reset.

Значение по умолчанию — N.

clock:set_rtc_on_step [BOOLEAN]

Пытаться установить RTC7 при корректировке часов (только Linux, во FreeBSD это делается автоматически).

Значение по умолчанию — N.

clock:drift_handling [SELECT]

Варианты — reset, preserve, file.

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

reset — сброс в 0 (не рекомендуется).

preserve — использовать значение в ядре.

file — загрузить/сохранить при запуске/отключении с использованием в промежутке значения из ядра. Для задания файла с записью дрейфа служит параметр clock:drift_file.

Значение по умолчанию — preserve.

clock:drift_file [STRING]

Задает файл для записи дрейфа.

Значение по умолчанию — /etc/ptpd2_kernelclock.drift.

clock:leap_seconds_file [STRING]

Задает местоположение файла с описанием високосных секунд (актуальную версию можно загрузить по ссылке). Когда этот параметр задан, ведущий узел PTP использует данные из файла для анонсирования флагов leap и смещения UTC, переписывающих настройки ОС, а ведомый узел PTP будет использовать эти данные вместе с информацией, полученной от GM. При наличии этой опции файл всегда будет загружаться заново при перезагрузке конфигурации (SIGHUP), переводе часов и после високосной секунды, чтобы гарантировать своевременность информации. Начиная с 2.3.1, файл входит в комплект ptpd и размещается в (prefix)/share/ptpd/leap-seconds.list.ddMMMyyyy, где ddMMMyyyy — дата завершения срока действия файла високосных секунд.

Значение по умолчанию отсутствует.

clock:leap_second_pause_period [INT: 5 .. 600]

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

Значение по умолчанию — 5.

clock:leap_second_notice_period [INT: 3600 .. 86400]

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

Значение по умолчанию — 43200.

clock:leap_second_handling [SELECT]

Варианты — accept, ignore, step, smear.

Поведение синхронизации часов во время високосной секунды.

accept — информировать ядро ОС о високосной секунде и позволить ему добавить или удалить високосную секунду.

ignore — не информировать ядро ОС, это приводит к смещению +/-1 секунда, которое затем будет устранено.

step — не информировать и перевести часы сразу после високосной секунды.

smear — постепенно вводить дополнительное смещение в течение интервала времени перед високосной секундой, аккумулируя сдвиг +/-1 сек. (clock:leap_second_smear_period). После стабилизации часов это приводит к сдвигу частоты часов, который устраняется после события. Когда високосная секунда закончится, дополнительный сдвиг тоже удаляется и время возвращается к соответствию с первичным источником.

Значение по умолчанию — accept.

clock:leap_second_smear_period [INT: 3600 .. 86400]

При установке clock:leap_second_handling = smear, этот параметр определяет период (в секундах, до события високосной секунды, в течение которого високосная секунда постепенно добавляется. Например, при установке 24 часов (86400 секунд), добавляется +/-11,5 микросекунд за каждую секунду (сдвиг частоты 11,5 ppm).

Значение по умолчанию — 86400.

clock:max_offset_ppm [INT: 500 .. 1000]

Максимальный абсолютный сдвиг частоты, который может применяться к корректировке часов при их «подводе». Выражается в миллионных долях (1 ppm — сдвиг на 1 мксек. за секунду). Значения больше 512 будут использовать корректировку продолжительности такта для более быстрого «подвода». Максимальное значение, принятое по умолчанию, составляет 512 без использования «тика».

Значение по умолчанию — 500.

servo:delayfilter_stiffness [INT]

Жесткость фильтра Mean Path Delay (средняя задержка).

Значение по умолчанию — 6.

servo:kp [FLOAT: min: 0.000001 ]

Усиление пропорциональной компоненты сервоконтроллера PI (kP).

Значение по умолчанию — 0..100000

servo:ki [FLOAT: min: 0.000001 ]

Усиление интегральной компоненты сервоконтроллера PI (kI).

Значение по умолчанию — 0..001000

servo:dt_method [SELECT]

Варианты — none, constant, measured.

Задает способ расчета интервала обновления следящей системы (delta t).

none — интервал обновления не меняется (dt всегда 1),

constant — постоянное значение (целевая частота обновления) — интервал синхронизации для PTP,

measured — следящая система измеряет частоту обновления и использует этот интервал.

Значение по умолчанию — constant.

servo:dt_max [FLOAT: 1.500000 .. 100.000000]

Задает максимальный интервал обновления (delta t) при использовании режима measured (servo:dt_method = measured), задаваемый как множитель интервала синхронизации.

Значение по умолчанию — 5.000000.

servo:stability_detection [BOOLEAN]

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

Значение по умолчанию — N.

servo:stability_threshold [FLOAT: 1.000000 .. 10000.000000]

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

Значение по умолчанию — 5.000000.

servo:stability_period [INT: 1 .. 100]

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

Значение по умолчанию — 3.

servo:stability_timeout [INT: 1 .. 60]

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

Значение по умолчанию — 10.

servo:max_delay [INT: 0 .. 999999999]

Не воспринимать задержку от ведущего к ведомому (delayMS из сообщений Sync) или от ведомого к ведущему (delaySM из сообщений Delay Response), если она превышает это значение (в наносекундах). При значении 0 не применяется.

Значение по умолчанию — 0.

servo:max_delay_max_rejected [INT: min: 0 ]

Максимальное число последовательных отвергнутых измерений задержки с превышением порога maxDelay (servo:max_delay) перед сбросом ведомого узла. При значении 0 проверка не проводится.

Значение по умолчанию — 0.

servo:max_delay_stable_only [BOOLEAN]

Если установлен параметр max_delay, выполнять проверку только при стабилизированной следящей системе.

Значение по умолчанию — N.

servo:max_offset [INT: 0 .. 999999999]

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

Значение по умолчанию — 0.

global:config_templates [STRING]

Список разделенных запятыми, пробелами или символами табуляции имен шаблонов, применяемых в конфигурации (см. Конфигурационные шаблоны и файлы шаблонов). Шаблоны применяются в порядке их указания, поэтому перекрывающиеся установки будут взяты из последнего шаблона, где они присутствуют. PTPd поддерживает встроенные шаблоны, для просмотра которых можно воспользоваться командой ptpd2 -T (или —show-templates).

Значение по умолчанию отсутствует.

global:template_files [STRING]

Список разделенных запятыми, пробелами или символами табуляции имен файлов шаблонов, применяемых в конфигурации (см. Конфигурационные шаблоны и файлы шаблонов). Шаблоны загружаются и применяются в порядке их указания, поэтому перекрывающиеся установки будут взяты из последнего шаблона, где они присутствуют. PTPd не будет прерывать работу, если один или несколько файлов не удалось открыть. PTPd всегда пытается при старте загрузить шаблоны из файла /usr/share/ptpd/templates.conf.

Значение по умолчанию отсутствует.

global:enable_alarms [BOOLEAN]

Включает поддержку сигналов и уведомлений о событиях. Сигналы включают самодиагностику базовых ошибок и событий, таких как смена ведущего или параметров времени. При включенной поддержке SNMP (global:enable_snmp) и прерываний SNMP (global:enable_snmp_traps) сигналы вызывают прерывания SNMP.

Значение по умолчанию — N.

global:alarm_timeout [INT: 0 .. 3600]

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

Значение по умолчанию — 30.

global:alarm_initial_delay [INT: 0 .. 3600]

Задержка (в секундах) начала обработки сигналов после запуска ptpd. Эта опция позволяет предотвратить ненужные сигналы, пока PTPd начинает синхронизацию, что должно произойти в течение нескольких секунд, но может затянуться в случаях, когда групповая передача должна сходиться в восходящем направлении или имеется несоответствие между интервалами сообщений и индивидуальная сигнализация должна скорректировать их до приемлемых значений. Это также предотвращает слишком ранние оповещения о разнице времени с ведущим узлом при старте (ptpengine:offset_alarm_threshold) — задержка может быть увеличена для охвата начального периода синхронизации, однако это не рекомендуется, поскольку сигнал о смещении часов после запуска может указывать на «холодный» старт ведомого узла.

Значение по умолчанию — 10.

global:enable_snmp [BOOLEAN]

Включает агент SNMP (если программа собрана с опцией PTPD_SNMP).

Значение по умолчанию — N.

global:enable_snmp_traps [BOOLEAN]

Включает уведомления о сигналах и событиях через прерывания SNMP. Требуется сборка PTPd с опцией PTPD_SNMP и включенная сигнализация (global:enable_alarms).

Значение по умолчанию — N.

global:use_syslog [BOOLEAN]

Передает журнальные сообщения в syslog. Отключение этой опции будет направлять все сообщения на стандартный вывод (stdout) или в заданный журнальный файл.

Значение по умолчанию — N.

global:lock_file [STRING]

Указывает местоположение файла блокировки.

Значение по умолчанию отсутствует.

global:auto_lockfile [BOOLEAN]

Задает связанный с режимом и интерфейсом файл блокировки (переопределяет global:lock_file).

Значение по умолчанию — N.

global:lock_directory [STRING]

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

Значение по умолчанию — /var/run.

global:ignore_lock [BOOLEAN]

Пропускать проверку и блокировку файла блокировки.

Значение по умолчанию — N.

global:quality_file [STRING]

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

Значение по умолчанию отсутствует.

global:quality_file_max_size [INT: min: 0 ]

Максимальный размер файла записи пакетов Sync (в килобайтах). По достижении заданного размера содержимое файла будет отсекаться. 0 указывает неограниченный размер.

Значение по умолчанию — 0.

global:quality_file_max_files [INT: 0 .. 100]

Включает ротацию журналов записи пакетов Sync с использованием до n файлов. При значении 0 ротации не будет.

Значение по умолчанию — 0.

global:quality_file_truncate [BOOLEAN]

Отсекает содержимое файла записи пакетов Sync при каждом его открытии (запуск программы или сигнал SIGHUP).

Значение по умолчанию — N.

global:status_file [STRING]

Задает файл для записи информации о состоянии ptpd2.

Значение по умолчанию — /var/run/ptpd2.status.

global:log_status [BOOLEAN]

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

Значение по умолчанию — N.

global:status_update_interval [INT: 1 .. 30]

Задает интервал обновления файла статуса (в секундах).

Значение по умолчанию — 1.

global:log_file [STRING]

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

Значение по умолчанию отсутствует.

global:log_file_max_size [INT: min: 0 ]

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

Значение по умолчанию — 0.

global:log_file_max_files [INT: 0 .. 100]

Включает ротацию журнала событий с использованием до n файлов. При значении 0 ротации не будет.

Значение по умолчанию — 0.

global:log_file_truncate [BOOLEAN]

Отсекает содержимое файла записи событий при каждом его открытии (запуск программы или сигнал SIGHUP).

Значение по умолчанию — N.

global:log_level [SELECT]

options LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_ALL

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

Значение по умолчанию — LOG_ALL.

global:statistics_file [STRING]

Задает путь к журналу статистики. Указание файла включает запись статистики, но это можно переопределить установкой global:log_statistics.

Значение по умолчанию отсутствует.

global:statistics_log_interval [INT: min: 0 ]

Задает запись за каждые n секунд статистики сообщений Sync и Delay (0 — записывать все).

Значение по умолчанию — 0.

global:statistics_file_max_size [INT: min: 0 ]

Максимальный размер файла статистики (в килобайтах). По достижении заданного размера содержимое файла будет отсекаться. 0 указывает неограниченный размер.

Значение по умолчанию — 0.

global:statistics_file_max_files [INT: 0 .. 100]

Включает ротацию статистики с использованием до n файлов. При значении 0 ротации не будет.

Значение по умолчанию — 0.

global:statistics_file_truncate [BOOLEAN]

Отсекает содержимое файла статистики при каждом его открытии (запуск программы или сигнал SIGHUP).

Значение по умолчанию — N.

global:dump_packets [BOOLEAN]

Запись содержимого каждого пакета PTP.

Значение по умолчанию — N.

global:verbose_foreground [BOOLEAN]

Задает работу в приоритетном режиме (foreground) с выводом статистики и сообщений в stdout. Переопределяет файлы журнала и статистики, отменяет запись в syslog.

Значение по умолчанию — N.

global:foreground [BOOLEAN]

Задает работу а приоритетном режиме (foreground), игнорируется при установке global:verbose_foreground.

Значение по умолчанию — N.

global:log_statistics [BOOLEAN]

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

Значение по умолчанию — N.

global:statistics_timestamp_format [SELECT]

Варианты — datetime, unix, both.

Формат временные меток для журнала статистики синхронизации (при включенной опции global:log_statistics).

datetime — дата и время в формате YYYY-MM-DD hh:mm:ss.uuuuuu.

unix — Unix timestamp с наносекундами — s.ns

both — форматированная дата и время, затем временная метка Unix (добавляется поле в журнал)

Значение по умолчанию — datetime.

global:periodic_updates [BOOLEAN]

Обновлять журнал состояния при каждом обновлении статистики (global:statistics_update_interval). Обновление записывается в основной журнал. Обновления состояния записываются даже при отключенной в ptpd поддержке статистики.

Значение по умолчанию — N.

global:cpuaffinity_cpucore [INT: -1 .. 255]

Связывает процесс ptpd2 с указанным ядром CPU (0 — первый процессор и т. д., -1 — без привязки к конкретному ядру).

Значение по умолчанию — 0.

global:statistics_update_interval [INT: 1 .. 60]

Интервал обновления статистики синхронизации (в секундах). Контролирует также частоту записи состояний при использовании global:statistics_update_interval.

Значение по умолчанию — 30.

global:timingdomain_election_delay [INT: 0 .. 3600 ]

Задержка (в секундах) перед освобождением службы времени (NTP или PTP) и выбором новой для контроля часов. Для незамедлительного выбора используется значение 0.

Значение по умолчанию — 15.

ntpengine:enabled [BOOLEAN]

Включает интеграцию с NTPd.

Значение по умолчанию — N.

ntpengine:control_enabled [BOOLEAN]

Включает управление локальным демоном NTPd.

Значение по умолчанию — N.

ntpengine:check_interval [INT: 5 .. 600]

Интервал проверки NTP (в секундах)

Значение по умолчанию — 15.

ntpengine:key_id [INT: 0 .. 65535]

Номер ключа NTP. Должен быть указан как доверенный ключ управления в файле ntp.conf и быть отличным от 0, чтобы работала опция ntpengine:control_enabled.

Значение по умолчанию — 0.

ntpengine:key [STRING]

Ключ NTP (нешифрованный, до 20 символов), который должен соответствовать ключу из файла ключей ntpd и быть непустым, чтобы работала опция ntpengine:control_enabled.

Значение по умолчанию отсутствует.

Ошибки

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

При обнаружении каких-либо ошибок сообщайте о них через страницу SourceForge.

По материалам руководств man

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

nmalykh@protokols.ru

1Использование этой опции без global:log_statistics Y ведет к ошибке (core dump).

2Comma-separated values — разделенные запятыми значения.

3Предварительные установки влияют на настройку ptpengine:slave_only, clock_no_adjust и ptpengine:clock_class (диапазон и значение по умолчанию). Для просмотра предварительных установок служит команда ptpd2 -H или (—long-help)

4Для транспорта Ethernet нужна сборка с libpcap, такой транспорт не поддерживается в Solaris с версии 2.3.1 и не может использоваться на таких системах, если при компиляции ptpd не была задана опция enable-experimental-options.

5Такое поведение не описано в стандарте.

6Это может вызвать временную блокировку ведомого узла, если GM перезапустится до тайм-аута анонсов, поэтому вводится ограничение на 50 последовательных ошибок номеров. Можно также использовать ptpengine:clock_update_timeout для сброса ведомого заранее.

7RTC будет устанавливаться в соответствии с часами ОС независимо от часового пояса, поэтому предполагается, что в RTC применяется время UTC или иным способом задана одинаковая с PTP шкала времени. Это верно для большинства систем x86 с одной загрузкой.

Рубрика: Linux, Измерения и тестирование | Комментарии к записи Справочное руководство для ptpd2 отключены

Набор программ для тестирования Ethernet OAM (dot1ag-utils)

PDF

Репозиторий Git с исходнsми кодами утилит доступен по ссылке.

dot1agd

Демон, отвечающий на IEEE 802.1ag LBM и LTM PDU, запускается на тестируемой системе командой

sudo dot1agd -i <имя интерфейса>

Имена имеющихся в системе интерфейсов можно посмотреть с помощью команды ifconfig.

После запуска команды на экране появится сообщение

$sudo dot1agd -i enp0s25 
Listening on interface enp0s25 for CFM frames

Дальше программа будет «молчать». Завершение работы демона обеспечивается нажатием клавиш Ctrl+C.

ethping

Передает сообщения Loopback (LBM) в кадрах с тегами или без них в зависимости от опции -v. Запускается командой

ethping -i <имя интерфейса> [-v vid] [-l mdlevel] [-c count] mac-address

Имена имеющихся в системе интерфейсов можно посмотреть с помощью команды ifconfig.

vid

Тег IEEE 802.1Q для тестируемой VLAN. При отсутствии опции теги не используются.

count

Число передаваемых кадров LBM (по умолчанию 5).

mdlevel

IEEE 802.1ag Maintenance Domain Level.

mac-address

MAC-адрес тестируемой системы (где запущен демон dot1agd). Его следует заранее посмотреть на тестовой системе с помощью ifconfig.

Пример вывода

$ethping -i enp0s25 08:00:27:dc:45:36  
Sending CFM LBM to 08:00:27:dc:45:36 
64 bytes from 08:00:27:dc:45:36, sequence 2057043034, 160.039 ms 
64 bytes from 08:00:27:dc:45:36, sequence 2057043035, 39.997 ms 
64 bytes from 08:00:27:dc:45:36, sequence 2057043036, 99.999 ms 
64 bytes from 08:00:27:dc:45:36, sequence 2057043037, 180.163 ms 
64 bytes from 08:00:27:dc:45:36, sequence 2057043038, 40.023 ms

ethtrace

Передает сообщения Link Trace Messages (LTM) в кадрах с тегами или без них в зависимости от опции -v. Запускается командой

ethtrace -i <имя интерфейса> [-v vid] [-l mdlevel] [-c count] mac-address

Имена имеющихся в системе интерфейсов можно посмотреть с помощью команды ifconfig.

vid

Тег IEEE 802.1Q для тестируемой VLAN. При отсутствии опции теги не используются.

count

Число передаваемых кадров LBM (по умолчанию 5).

mdlevel

IEEE 802.1ag Maintenance Domain Level.

mac-address

MAC-адрес тестируемой системы (где запущен демон dot1agd). Его следует заранее посмотреть на тестовой системе с помощью ifconfig.

Пример вывода

$ethtrace -i enp0s25 08:00:27:dc:45:36     
Sending CFM LTM probe to 08:00:27:dc:45:36 
ttl 1: LTM with id 1415737007 
       reply from 08:00:27:dc:45:36, id=1415737007, ttl=0, RlyHit

dot1ag_ccd

Это демон, который передает через интерфейс IEEE 802.1ag CCM PDU и принимает на этом же интерфейсе такие PDU от удаленных демонов. Следовательно, запускать демон нужно на двух машинах одновременно. Программа выводит информацию о состоянии соединения только в syslog, поэтому придется воспользоваться некоторыми ухищрениями, описанными ниже.

Демон считает соединение прерванным, если он не получает подряд 3 CCM PDU от удаленного партнера. В этом случае в syslog помещается запись вида

00:1e:67:17:ad:08,DOWN,100,0,maintenance-domain,maintenance-association,PsUP,isUp

Когда прием CCM PDU восстанавливается, в syslog помещается запись вида

00:1e:67:17:ad:08,UP,100,0,maintenance-domain,maintenance-association,PsUP,isUp

Формат записи в syslog

mac-address,status,mepid,mdLevel,domain,association,port_status,interface_status

Значение полей можно понять из приведенных ниже описаний параметров.

Запуск демона

dot1ag_ccd -i interface -t interval -d domain -m MEPID -a association [-v vid] [-l mdlevel] [-f facility] [-V]

interface

Имя интерфейса (из ifconfig), через который будут передаваться и приниматься CCM PDU.

domain

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

rcvd CCM: 08:00:27:dc:45:36, level 0, MD "maintenance-domain" (expected "TestDomain", discard frame)

association

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

rcvd CCM: 08:00:27:dc:45:36, level 0, MD "TestDomain", MA "maintenance-association" (expected "TestAssoc", discard frame)

interval

Интервал между CCM PDU в миллисекундах (поддерживается 100, 1000, 10000, 60000 и 600000).

MEPID

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

config error: CCM received with our MEPID 100 (ours 100)

vid

Тег IEEE 802.1Q для тестируемой VLAN. При отсутствии опции теги не используются.

mdlevel

Уровень иерархии домена (0 — 7). Должен быть одинаковым у всех участвующих в тесте систем. При несовпадении выдается ошибка вида

rcvd CCM: 08:00:27:dc:45:36, level 1 (expected level 0, discard frame)

facility

Уровень syslog. Поддерживаются значения LOG_KERN, LOG_USER, LOG_MAIL, LOG_NEWS, LOG_UUCP, LOG_DAEMON, LOG_AUTH, LOG_CRON, LOG_LPR, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7. По умолчанию LOG_DAEMON.

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

dot1ag_ccd -i enp0s25 -t 100 -d TestDomain -m 100 -a TestAssoc -V

На другой (где будем наблюдать результаты) используем команду

dot1ag_ccd -i enp0s3 -t 100 -d TestDomain -m 101 -a TestAssoc -V

На консоли обеих ВМ будет вывод, подобный приведенному ниже (для теста на 3 ВМ).

rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
Mar 20 14:54:00 debian-mini dot1ag_ccd: 00:1e:67:17:ad:08,DOWN,105,0,TestDomain,TestAssoc,PsUP,isUp
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 00:1e:67:17:ad:08, level 0, MD "TestDomain", MA "TestAssoc" 
Mar 20 14:54:01 debian-mini dot1ag_ccd: 00:1e:67:17:ad:08,UP,105,0,TestDomain,TestAssoc,PsUP,isUp
rcvd CCM: 00:1e:67:17:ad:08, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 00:1e:67:17:ad:08, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 00:1e:67:17:ad:08, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 00:1e:67:17:ad:08, level 0, MD "TestDomain", MA "TestAssoc" 
rcvd CCM: 08:00:27:e8:e5:ab, level 0, MD "TestDomain", MA "TestAssoc"

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

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

nmalykh@protokols.ru

Рубрика: Linux, Измерения и тестирование | Комментарии к записи Набор программ для тестирования Ethernet OAM (dot1ag-utils) отключены

RFC 8499 DNS Terminology

Отменен RFC 9499.

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

RFC 8511 TCP Alternative Backoff with ECN (ABE)

Internet Engineering Task Force (IETF)                        N. Khademi
Request for Comments: 8511                                      M. Welzl
Category: Experimental                                University of Oslo
ISSN: 2070-1721                                              G. Armitage
                                                                 Netflix
                                                            G. Fairhurst
                                                  University of Aberdeen
                                                           December 2018

TCP Alternative Backoff with ECN (ABE)

PDF

Аннотация

Механизмы активного управления очередями (Active Queue Management или AQM) обеспечивают устойчивость к всплескам (пикам) трафика при одновременном сохранении коротких очередей для минимизации времени пребывания пакетов в очередях узких мест сети. Проходящие через узкие места соединения TCP могут терять значительную часть производительности, особенно при наличии небольшого числа потоков или большом значении произведения пропускной способности и задержки (bandwidth-delay product или BDP). Получение маркера перегрузки (Congestion Experienced или CE) явного уведомления о перегрузке (Explicit Congestion Notification или ECN) указывает, что в узком месте применяется механизм AQM и сетевая очередь в этом месте вероятно будет короткой. Эти сигналы позволяют передающей стороне соединения TCP реагировать на ECN и для предотвращения перегрузки сокращать окно перегрузки (Congestion Window или cwnd) на меньшую величину, чем требует механизм контроля перегрузок для предполагаемой потери пакета. Данная спецификация задаёт экспериментальное изменение реакции TCP, заданной в RFC 3168, как это разрешает RFC 8311.

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

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

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

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

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

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

Явные уведомления о перегрузке (ECN) [RFC3168] позволяют механизму (AQM) информировать о начинающейся перегрузке без необходимости потери пакетов. Это позволяет сети доставлять приложению некоторые пакеты, которые были бы отброшены, если бы приложение или транспорт не поддерживали ECN. Это сокращение потерь пакетов является наиболее очевидным преимуществом ECN, но зачастую оно сравнительно мало. Другие преимущества от внедрения ECN документированы в [RFC8087].

Правила для ECN исходно были заданы как очень консервативные и требовали, чтобы алгоритмы контроля перегрузки транспорта с поддержкой ECN (ECN-Capable Transport или ECT) считали индикацию перегрузки через ECN эквивалентом потери пакета [RFC3168]. Исследования показали сокращение сетевых задержек, вызванных контролем перегрузки в TCP на основе потерь и избыточной буферизацией [BUFFERBLOAT]. Это привело к созданию механизмов AQM, таких как улучшенный пропорциональный интегральный контроллер (Proportional Integral Controller Enhanced или PIE) [RFC8033] и контроль задержки в очередях (Controlling Queue Delay или CoDel) [RFC8289], которые предотвращают раздувание очередей, характерное для неуправляемых и слишком больших буферов, развёрнутых в сети Internet [BUFFERBLOAT].

Отмеченные выше механизмы AQM нацелены на поддержку неизменно короткой очереди с допущением кратковременных всплесков пакетов. Однако применяемые в настоящее время механизмы контроля перегрузок на основе потерь не всегда обеспечивают эффективное использование узкого канала (bottleneck) при коротких очередях. Например, отправителю TCP с контролем перегрузок Reno требуется возможность сохранять данные по меньшей мере в объёме BDP в буфере узкого места для обеспечения полной загрузки пути в условиях вызванного потерями сокращения окна перегрузки (cwnd) [RFC5681]. Такой объём буферизации фактически удваивает размер находящихся в сети (in flight) данных и максимальное время кругового обхода (round-trip time или RTT) для отправителя TCP.

Современные механизмы AQM могут использовать ECN для сигнализации о первых признаках надвигающегося заполнения очереди задолго до вынужденного отбрасывания пакетов. Поэтому для алгоритма контроля перегрузок в транспортном протоколе разумно применять более взвешенный отклик на ранние предупреждения о перегрузке после получения удалённой точкой пакета с маркером ECN CE. С учётом этих изменений в современной практике AQM строгое требование обработки сигналов ECN CE как предполагаемой потери пакетов было смягчено в [RFC8311]. Этот документ задаёт новый механизм отклика на сигналы контроля перегрузки передающей стороной, названный ABE (Alternative Backoff with ECN). ABE повышает среднюю пропускную способность TCP при использовании в маршрутизаторах буферов с AQM, которые разрешают лишь короткие очереди.

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

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

3. Спецификация

Эта спецификация меняет алгоритм контроля перегрузки поддерживающего ECN транспортного протокола TCP путём смены отклика отправителя TCP обратной связью от получателя TCP, указывающей приём им пакета с маркером CE, т. е. с установленным флагом ECN-Echo (задан в [RFC3168]) в соответствии с процессом, заданным в [RFC8311].

Отклик отправителя TCP в настоящее время задан в параграфе 6.1.2 спецификации ECN [RFC3168] и слегка обновлён в параграфе 4.1 [RFC8311].

Индикацию насыщения следует трактовать просто, как потерю в результате насыщения для TCP без поддержки ECN. Т. е. отправитель TCP снижает вдвое размер окна насыщения cwnd и уменьшает порог замедленного старта ssthresh, если не указано иное в Experimental RFC потока документов IETF.

В соответствии с RFC 8311 этот документ задаёт изменение для передающей стороны TCP, где при получении пакета с флагом ECN-Echo следует инициировать у источника TCP установку для порога замедленного старта (slow start threshold или ssthresh) значения 0,8 * FlightSize с нижней границей 2 * SMSS3, применяемой к результату. Как и в [RFC5681], отправитель TCP также снижает значение cwnd не более чем до нового значения ssthresh. В параграфе 6.1.2 RFC 3168 даны рекомендации по установке cwnd меньше 2 * SMSS.

3.1. Выбор коэффициента ABE Multiplier

ABE отвязывает реакцию отправителя TCP на предполагаемую потерю пакетов от индикации перегрузки сигналом ECN в фазе предотвращения перегрузки. Для этого ABE использует иной коэффициент масштабирования в уравнении 4 из параграфа 3.1 в [RFC5681]. В описании соответственно используются beta_{loss} и beta_{ecn} для указания факторов мультипликативного снижения, применяемого в ответ на предполагаемую потерю пакета и в ответ на указание получателем перегрузки с помощью ECN. Для соединений TCP без поддержки ECN применяется только beta_{loss}. Иными словами, отклик на предполагаемую потерю пакетов имеет вид

      ssthresh = max (FlightSize * beta_{loss}, 2 * SMSS)

а отклик на индикацию перегрузки сигналом ECN —

      ssthresh = max (FlightSize * beta_{ecn}, 2 * SMSS)

и

      cwnd = ssthresh

(для ssthresh == 2 * SMSS в параграфе 6.1.2 RFC 3168 даны рекомендации по установке cwnd меньше 2 * SMSS)

FlightSize — размер остающихся в сети данных, ограниченный сверху меньшим из значений cwnd отправителя и анонсированным получателем окном (rwnd) [RFC5681]. Большие значения beta_{loss} и beta_{ecn} означают менее энергичный отклик на любое отдельное событие отката (backoff).

Подходящий выбор значений beta_{loss} и beta_{ecn} обеспечивает баланс между загрузкой пути и опустошением очереди в узком месте. Более энергичное поведение (меньшие beta_*) ведёт к риску недогрузки пути, тогда как менее энергичный откат (большие beta_*) может приводить к более медленному опустошению очереди в узком месте.

В Internet уже несколько лет применяется по меньшей мере два разных значения beta_{loss} — стандартное 0,5 [RFC5681] и принятое в реализации Linux CUBIC [RFC8312] значение 0,7, начиная с ядра 2.6.25, выпущенного в 2008 г. ABE не меняет значений beta_{loss}, используемых текущими реализациями TCP.

Этот документ рекомендует значение beta_{ecn}=0,8, применяемое только для стандартного контроля перегрузок TCP [RFC5681]. Выбор beta_{ecn} позволяет настраивать отклик соединения TCP для снижения порогов маркировки AQM. Значение beta_{loss} характеризует отклик алгоритма контроля перегрузки на потерю пакетов, т. е. заполнение буфера (неизвестного размера). Для алгоритмов контроля перегрузок в TCP предлагаются различные значения beta_{loss}. Поэтому beta_{ecn}, скорей всего, является параметром, связанным с алгоритмом, а не постоянной, кратной значению beta_{loss} имеющегося алгоритма. Выбор параметра был изучен в ряде тестов (раздел IV в [ABE2017]) с NewReno и CUBIC через CoDel и PIE в вариантах с незначительным мультиплексированием. Результаты этих тестов показывают, что для соединений CUBIC подходит значение beta_{ecn} = 0.85 (сравн. с beta_{loss} = 0.7), а соединения NewReno показывают улучшения при beta_{ecn} от 0,7 до 0,85 (сравн. с beta_{loss} = 0.5).

4. Обсуждение

Большая часть технического обоснования ABE приведена в [ABE2017], где сочетаются эксперименты, теория и моделирование с NewReno [RFC5681] и CUBIC [RFC8312] для оценки производительности. Показано, что ABE обеспечивает значительный рост производительности в сценариях с незначительным мультиплексирования несколько одновременных потоков) без потери преимуществ сокращения задержки в результате внедрения CoDel или PIE. Повышения производительности достигается при реагировании на ECN-Echo для предотвращения перегрузки (когда ssthresh > cwnd) путём умножения cwnd и ssthresh на значение из диапазона [0,7, 0,85]. Применение ABE при cwnd не более ssthresh в настоящее время не рекомендуется, но его использование в этом сценарии может выиграть в результате дополнительного внимания, экспериментов и спецификации.

4.1. Обоснования применения ECN для изменения уровня отката

Механизмы AQM, такие как CoDel [RFC8289] и PIE [RFC8033], устанавливают целевую задержку в маршрутизаторах и применяют уведомления о перегрузке для ограничения задержки в очередях, с которыми сталкиваются пакеты, а не в ответ на надвигающееся или фактическое исчерпание буфера в узком месте. С текущими принятыми по умолчанию значениями целевой задержки CoDel и PIE эффективно эмулируют узкое место с короткой очередью (раздел II в [ABE2017]), одновременно допуская в очереди короткие всплески (пики) трафика. Это обеспечивает приемлемую производительность соединений TCP на путях с низким BDP или в сценариях с сильным мультиплексированием (много одновременных потоков). Однако при незначительном мультиплексировании на пути с большим BDP обычный откат (backoff) TCP ведёт к пропускам передачи пакетов и недогрузке пути.

Вместо отбрасывания пакетов механизму AQM разрешено помечать пакеты ECN-Capable маркером ECN CE. Получение отклика с маркером CE не только указывает перегрузку на сетевом пути, но и говорит о наличии в узком месте на пути механизма AQM. Таким образом, появление маркера CE скорей всего объясняется наличием узкого места с контролируемой короткой очередью. Реагирование на сигналы ECN о перегрузке, отличающееся от реакции на предполагаемую потерю пакетов, может обеспечить сокращение отката при коротких очередях. Использование ECN может обеспечивать и другие преимущества [RFC8087]. Идея разного реагирования на предполагаемую потерю пакетов и сигналы о перегрузке от ECN была высказана до этой спецификации, например, в предыдущем исследовании предлагалось использовать отклики ECN CE для смены поведения контроля перегрузок TCP путём увеличения коэффициента сокращения (окна) с сочетании с уменьшением коэффициента расширения [ICC2002]. Целью этой работы была организация AQM через узкие места (с использованием RED4) без обязательной настройки для эмуляции короткой очереди (текущее применение RED в качестве Internet AQM ограничено [RFC7567]).

4.2. Основанный на RTT отклик на указанную перегрузку

Эта спецификация применяется к использованию откликов ECN, как задано в [RFC3168], где определён отклик на индикацию перегрузки не чаше 1 раза за интервал кругового обхода. Поскольку ABE реагирует на указанную перегрузку 1 раз за RTT, механизм не реагирует на дополнительные потери в том же интервале RTT, так как отправитель ABE уже сократил окно перегрузки. Если перегрузка продолжается после такого сокращения, ABE продолжает уменьшать окно перегрузки в каждом следующем интервале RTT. Такое последовательное сокращение окна может защитить сеть от продолжительного отсутствия беспристрастности, когда алгоритмы AQM не поддерживают малое значение среднего размера очереди. Механизм не полагается на Accurate ECN [ACC-ECN-FEEDBACK].

Механизмы транспортного протокола, напротив, могут быть созданы для использования более частых и детальных откликов ECN (например, Accurate ECN [ACC-ECN-FEEDBACK]), что позволяет более часто корректировать скорость передачи. Примером такого подхода является Data Center TCP (DCTCP) [RFC8257].

5. Требования к внедрению ABE

Это обновление относится лишь к передающей стороне. Подобно другим изменениям в алгоритмах контроля перегрузки, оно не требует менять что-либо на приёмной стороне TCP или в сетевых устройствах. Обновление не требует вносить связанные с ABE изменения в маршрутизаторы или использовать отклики Accurate ECN [ACC-ECN-FEEDBACK] на приёмной стороне.

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

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

6. Цели экспериментов с ABE

В [RFC3168] сказано, что отклик контроля перегрузки, следующий за индикацией ECN, совпадает с откликом на отбрасывание пакета. [RFC8311] обновляет эту спецификацию, разрешая системам поддерживать разное поведение в случаях индикации ECN и потери пакетов. Данная спецификация определяет такой эксперимент и имеет статус Experimental RFC. Авторы ожидают, что в будущем статус сменится на Standards-Track.

Целью эксперимента в Internet является получение опыта внедрения ABE и подтверждение приемлемой безопасности в сетях, использующих такой обновленный контроль перегрузок в TCP. Для оценки ABE в этом эксперименте нужна поддержка в маршрутизаторах AQM маркировки ECN для пакетов, содержащих код поддерживающего ECN транспорта (ECN-Capable Transport) — ECT(0) [RFC3168].

Результат эксперимента должен включать исследование влияния установки маркера ECN-CE и последующей потери в том же интервале RTT. В конце эксперимента результат будет сообщён рабочей группе TCPM или IESG.

Механизм ABE реализован как исправление (patch) для Linux и FreeBSD, предназначенное для исследований и экспериментов и доступное по ссылке <https://heim.ifi.uio.no/michawe/research/abe/>. Код будет применяться для получения результатов теста, представляемых в [ABE2017]. Код FreeBSD был внесён (commit) в основную ветвь ядра (mainline kernel) 9 марта 2018 г. [ABE-REVISION].

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

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

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

Описанный метод вносит изменение в транспорт лишь на стороне отправителя и не меняет обмен протокольными сообщениями, поэтому соображения безопасности для ECN [RFC3168] остаются применимыми.

Это изменение контроля перегрузок в TCP с помощью ECN обычно будет менять доступную производительность для потоков, проходящих через узкое место в сети (bottleneck). Это может приводить к получению некоторыми потоками большей доли пропускной способности. Похожая несправедливость распределения пропускной способности наблюдается и в других механизмах контроля перегрузок, применяемых в Internet долгие годы (например, CUBIC [RFC8312]). Несправедливость может возникать и в результате других факторов, включая интервал кругового обхода для потока. ABE применяется только при получении пакетов с маркировкой ECN, а не в результате потери пакетов. Поэтому использование ABE не может вызывать перегрузочный коллапс (congestion collapse).

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>.

[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>.

[RFC5681] Allman, M., Paxson, V., and E. Blanton, «TCP Congestion Control», RFC 5681, DOI 10.17487/RFC5681, September 2009, <https://www.rfc-editor.org/info/rfc5681>.

[RFC7567] Baker, F., Ed. and G. Fairhurst, Ed., «IETF Recommendations Regarding Active Queue Management», BCP 197, RFC 7567, DOI 10.17487/RFC7567, July 2015, <https://www.rfc-editor.org/info/rfc7567>.

[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>.

[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>.

[RFC8311] Black, D., «Relaxing Restrictions on Explicit Congestion Notification (ECN) Experimentation», RFC 8311, DOI 10.17487/RFC8311, January 2018, <https://www.rfc-editor.org/info/rfc8311>.

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

[ABE-REVISION] Stewart, L., «ABE patch review in FreeBSD», Revision 331214, March 2018, <https://svnweb.freebsd.org/base?view=revision&revision=331214>.

[ABE2017] Khademi, N., Armitage, G., Welzl, M., Zander, S., Fairhurst, G., and D. Ros, «Alternative backoff: Achieving low latency and high throughput with ECN and AQM», IFIP Networking Conference and Workshops Stockholm, Sweden, DOI 10.23919/IFIPNetworking.2017.8264863, June 2017.

[ACC-ECN-FEEDBACK] Briscoe, B., Kuehlewind, M., and R. Scheffenegger, «More Accurate ECN Feedback in TCP», Work in Progress, draft-ietf-tcpm-accurate-ecn-07, July 2018.

[BUFFERBLOAT] Gettys, J. and K. Nichols, «Bufferbloat: Dark Buffers in the Internet», ACM Queue, Volume 9, Issue 11, DOI 10.1145/2063166.2071893, November 2011, <https://queue.acm.org/detail.cfm?id=2071893>.

[ICC2002] Kwon, M. and S. Fahmy, «TCP increase/decrease behavior with explicit congestion notification (ECN)», 2002 IEEE International Conference on Communications Conference Proceedings, ICC 2002, Cat. No.02CH37333, DOI 10.1109/ICC.2002.997262, May 2002, <http://dx.doi.org/10.1109/ICC.2002.997262>.

[RFC8033] Pan, R., Natarajan, P., Baker, F., and G. White, «Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem», RFC 8033, DOI 10.17487/RFC8033, February 2017, <https://www.rfc-editor.org/info/rfc8033>.

[RFC8087] Fairhurst, G. and M. Welzl, «The Benefits of ping Explicit Congestion Notification (ECN)», RFC 8087, DOI 10.17487/RFC8087, March 2017, <https://www.rfc-editor.org/info/rfc8087>.

[RFC8289] Nichols, K., Jacobson, V., McGregor, A., Ed., and J. Iyengar, Ed., «Controlled Delay Active Queue Management», RFC 8289, DOI 10.17487/RFC8289, January 2018, <https://www.rfc-editor.org/info/rfc8289>.

[RFC8312] Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and R. Scheffenegger, «CUBIC for Fast Long-Distance Networks», RFC 8312, DOI 10.17487/RFC8312, February 2018, <https://www.rfc-editor.org/info/rfc8312>.

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

Работа N. Khademi, M. Welzl и G. Fairhurst частично финансировалась European Community в рамках Seventh Framework Programme по проекту Reducing Internet Transport Latency (RITE) (ICT-317700). Представленные здесь мнения принадлежат исключительно авторам.

G. Armitage выполнил большую часть работы над этим документом, будучи сотрудником Swinburne University of Technology, Melbourne, Australia.

Авторы благодарны Stuart Cheshire за многочисленные предложения при работе над документом. Спасибо за вклад в [ABE2017] Chamil Kulatunga, David Ros, Stein Gjessing, Sebastian Zander. Спасибо за отклики на документ David Black, Roland Bless, Bob Briscoe, Markku Kojo, John Leslie, Lawrence Stewart (в алфавитном порядке) и рабочей группе TCPM.

Авторы признательны всем членам исследовательской группы IRTF Internet Congestion Control (ICCRG), кто предоставил свои отклики на описанный в этом документе контроль перегрузок.

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

Naeem Khademi
University of Oslo
PO Box 1080 Blindern
Oslo N-0316
Norway
Email: naeemk@ifi.uio.no
 
Michael Welzl
University of Oslo
PO Box 1080 Blindern
Oslo N-0316
Norway
Email: michawe@ifi.uio.no
 
Grenville Armitage
Netflix Inc.
Email: garmitage@netflix.com
 
Godred Fairhurst
University of Aberdeen
School of Engineering, Fraser Noble Building
Aberdeen AB24 3UE
United Kingdom
Email: gorry@erg.abdn.ac.uk

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

nmalykh@protokols.ru

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

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

3Sender Maximum Segment Size — максимальный размер сегмента у отправителя.

4Random Early Detection — случайное раннее обнаружение.

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

RFC 8505 Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery

Internet Engineering Task Force (IETF)                   P. Thubert, Ed.
Request for Comments: 8505                                         Cisco
Updates: 6775                                                E. Nordmark
Category: Standards Track                                         Zededa
ISSN: 2070-1721                                           S. Chakrabarti
                                                                 Verizon
                                                              C. Perkins
                                                               Futurewei
                                                           November 2018

Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery

Регистрационные расширения для обнаружения соседей 6LoWPAN

PDF

Аннотация

Эта спецификация обновляет RFC 6775 (спецификация обнаружения соседей в 6LoWPAN) для прояснения роли протокола как метода регистрации с целью упрощения регистрационных операций в маршрутизаторах 6LoWPAN, а также для расширения возможностей регистрации и обнаружения мобильности для разных сетевых технологий, включая регистраторы маршрутизации (Routing Registrar), выполняющие маршрутизацию для путей к хостам и/или функции посредников при обнаружении соседей в сетях со слабым питанием.

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

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

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

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

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

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

Сети IPv6 со слабым питанием и потерями (Low-Power and Lossy Network или LLN) поддерживают топологии «звезда» (star) и «ячейки» (mesh). Для таких сетей в документе Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) [RFC6775] (его называют также 6LoWPAN Neighbor Discovery (ND)) определён механизм регистрации и центральный регистратор IPv6 ND для обеспечения уникальности адресов. Механизм 6LoWPAN ND снижает зависимость протокола IPv6 ND [RFC4861] [RFC4862] от группового трафика на сетевом уровне и широковещания на канальном.

Эта спецификация обновляет 6LoWPAN ND [RFC6775] для упрощения и обобщения регистрации в маршрутизаторах 6LoWPAN (6LR). В частности, обновлено и расширено поведение и элементы протокола 6LoWPAN ND для:

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

  • упрощения регистрации потока для адресов Link-Local (на локальном канале);

  • поддержки не знающих о маршрутизации узлов-листьев в сети с маршрутизацией;
  • регистрации в сети с маршрутизацией через посредника;
  • обеспечения возможности проверки регистрации с помощью опции ROVR (5.3. Поле ROVR);
  • регистрации на посреднике IPv6 ND (например, Routing Registrar);
  • улучшения поддержки приватности и временных адресов.

Эти функции соответствуют требованиям, приведённым с Приложении B.

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

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

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

2.2. Связанные документы

В этом документе применяются термины и концепции из перечисленных ниже документов.

  • Neighbor Discovery for IP version 6 (IPv6) [RFC4861];

  • IPv6 Stateless Address Autoconfiguration [RFC4862];

  • IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs): Overview, Assumptions, Problem Statement, and Goals [RFC4919];

  • Problem Statement and Requirements for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Routing [RFC6606];

  • Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) [RFC6775].

2.3. Сокращения

6BBR

6LoWPAN Backbone Router — магистральный маршрутизатор 6LoWPAN.

6CIO

Capability Indication Option — опция индикации возможности.

6LBR

6LoWPAN Border Router — граничный маршрутизатор 6LoWPAN.

6LN

6LoWPAN Node — узел 6LoWPAN.

6LoWPAN

IPv6 over Low-Power Wireless Personal Area Network — IPv6 в персональной беспроводной сети со слабым питанием.

6LR

6LoWPAN Router — маршрутизатор 6LoWPAN.

ARO

Address Registration Option — опция регистрации адреса.

DAC

Duplicate Address Confirmation — подтверждение дубликата адреса.

DAD

Duplicate Address Detection — обнаружение дубликата адреса.

DAR

Duplicate Address Request — запрос о дубликате адреса.

DODAG

Destination-Oriented Directed Acyclic Graph — ориентированный на адресата ациклический направленный граф.

EARO

Extended Address Registration Option — расширенная опция регистрации адреса.

EDA

Extended Duplicate Address — расширенное обнаружение дубликата адреса.

EDAC

Extended Duplicate Address Confirmation — расширенное подтверждение дубликата адреса.

EDAR

Extended Duplicate Address Request- расширенный запрос о дубликате адреса.

LLN

Low-Power and Lossy Network — сеть со слабым питанием и потерями.

NA

Neighbor Advertisement — анонсирование соседа.

NCE

Neighbor Cache Entry — запись кэширования соседа.

ND

Neighbor Discovery — обнаружение соседа.

NS

Neighbor Solicitation — предложение соседства.

RA

Router Advertisement — анонс маршрутизатора.

ROVR

Registration Ownership Verifier (произносится как rover) — проверяющий владение регистрацией (адреса).

RPL

Routing Protocol for Low-Power and Lossy Networks — протокол маршрутизации для сетей LLN.

RS

Router Solicitation — предложение маршрутизатора.

TID

Transaction ID — идентификатор транзакции (порядковый номер в EARO).

2.4. Новые термины

Backbone Link — магистральный канал

Транзитный канал IPv6, соединяющий два или более магистральных маршрутизатора.

Binding — привязка

Ассоциация между адресом IP, MAC3-адресом и другой информацией об узле, владеющем адресом IP.

Registration — регистрация

Процесс, с помощью которого 6LN регистрирует адрес IPv6 в 6LR для подключения к сети LLN.

Registered Node — зарегистрированный узел

6LN, для которого выполнена регистрация с соответствии с полями EARO.

Registering Node — регистрирующий узел

Узел, выполняющий регистрацию (зарегистрированный узел или прокси).

IPv6 ND Registrar — регистратор IPv6 ND

Узел, способный обработать регистрацию через сообщения NS(EARO) или EDAR и отвечающий после этого сообщением NA или EDAC с опцией EARO и соответствующим статусом регистрации.

Registered Address — зарегистрированный адрес

Адрес, зарегистрированный для узла (Registered Node).

RFC 6775-only — поддержка лишь RFC 6775

Реализация, тип узла или сообщение, соответствующее требованиям [RFC6775], но не данного документа.

Route-over network — сеть с маршрутизацией

Сеть, связность с которой обеспечивается уровнем IP.

Routing Registrar — регистратор маршрутизации

Регистратор IPv6 ND, обеспечивающий также услуги доступности для зарегистрированного адреса, включая DAD и proxy NA.

Backbone Router (6BBR) — магистральный маршрутизатор

Регистратор маршрутизации (Routing Registrar), выполняющий функции посредника для операций 6LoWPAN ND, заданные в этом документе, с целью обеспечения работы нескольких LLN, объединённых магистральным каналом (Backbone Link), как одной подсети IPv6.

Updated — обновленный

6LN, 6LR или 6LBR, поддерживающий данную спецификацию, в отличие от устройств RFC 6775-only.

3. Применимость опций ARO

Опция ARO, описанная в [RFC6775], упрощает DAD для хостов и заполняет записи NCE [RFC4861] в маршрутизаторах. Это снижает зависимость от групповых операций, которые зачастую столь же навязчивы, как широковещание, при работе IPv6 ND (см. [Multicast-over-IEEE802-Wireless]).

В этом документе заданы новые коды состояния для регистраций, отвергнутых 6LR или 6LBR, по причинам, не связанным с дубликатами. Например,

  • недостаточно места на маршрутизаторе;

  • регистрация с устаревшим порядковым номером (например, при перемещении уже после регистрации);

  • некорректное поведение хоста с попыткой зарегистрировать недействительный адрес (например, не указанный, как определено в [RFC4291]);

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

В таких случаях хост будет получать сообщение об ошибке, помогающее выяснить проблему, и сможет повторить попытку (возможно с другим адресом) или зарегистрироваться на ином маршрутизаторе, в зависимости от возвращённой ошибки. Возврат ошибок при регистрации адреса не предназначен для ограничения возможности хостов формировать и регистрировать несколько адресов. Каждый хост может сформировать и зарегистрировать множество адресов по соображениям приватности, используя механизмы, такие как описаны в [RFC4941] (Privacy Extensions for Stateless Address Autoconfiguration in IPv6), например, автоматическую настройку без учёта состояния (Stateless Address Autoconfiguration или SLAAC), и ему следует соблюдать [RFC7934] (Host Address Availability Recommendations).

Как указано в IPv6 ND [RFC4861], маршрутизатору требуется достаточно большое хранилище для записей NCE от всех подключённых напрямую адресов, по которым он пересылает пакеты (неиспользуемые записи могут удаляться). Маршрутизатору, обслуживающему механизм регистрации адресов, требуется место для хранения NCE всех адресов, которые могут быть зарегистрированы на нем, независимо от реального взаимодействия с ними. Число регистраций, поддерживаемых 6LR или 6LBR, должно быть указано в документации производителя, а оператору сети должно быть доступно динамическое использование связанных с этим ресурсов, например, через консоль управления. Администраторы сети должны гарантировать, что маршрутизаторы 6LR и 6LBR в их сети поддерживают нужное число и типы устройств, которые могут регистрироваться на них, с учётом числа требуемых устройствам адресов IPv6, а также поведения адресов и скорости их обновления.

4. Опции и сообщения расширенного обнаружения соседей

Эта спецификация не добавляет опций, а изменяет имеющиеся, обновляя соответствующее поведение.

4.1. Расширенная опция ARO (EARO)

Опция ARO определена в параграфе 4.1 [RFC6775]. Данная спецификация определяет расширенную опцию EARO, основанную на ARO, для использования в сообщениях NS и NA. EARO включает порядковый номер, называемый идентификатором транзакции (Transaction ID или TID), который служит для определения последнего местоположения регистрирующегося мобильного устройства. Новый флаг T указывает, что имеющееся поле TID заполнено, а опция является EARO. Узел 6LN запрашивает услуги маршрутизации или прокси у 6LR, используя новый флаг R в EARO.

Поле EUI-64 переопределено и названо ROVR для включения разных типов информации, например, криптографических данных переменного размера (см. 5.3. Поле ROVR). Можно использовать ROVR большего размера, если совместимость с прежними версиями не требуется в сети LLN. Значение поля Length за вычетом 1 указывает размер поля ROVR в 8-байтовых словах. Более подробно это рассмотрено в параграфе 5.1. Расширение ARO. Формат опции EARO показан на рисунке 1.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Length    |    Status     |    Opaque     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Rsvd | I |R|T|     TID       |     Registration Lifetime     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
...            Registration Ownership Verifier (ROVR)         ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Формат EARO.


Type

33

Length

8-битовое целое число без знака, указывающее размер опции в 8-байтовых словах.

Status

8-битовое целое число без знака, указывающее статус регистрации в отклике NA. В сообщениях NS должно иметь значение 0. См. таблицу 1.

Opaque

Не анализируемое ND значение. 6LN может передавать его без изменений другому процессу. Если поле не используется, оно должно быть установлено в 0.

Rsvd

Резервное поле. Должно устанавливаться в 0 отправителем, а получатель должен игнорировать поле.

I

2-битовое целое число. Значение 0 указывает, что поле Opaque содержит абстрактный индекс, служащий для определения маршрутной топологии, куда предполагается вставка адреса. В этом случае поле Opaque передаётся процессу маршрутизации с указанием того, что оно несёт сведения о топологии (0 указывает принятую по умолчанию). Использование других значений в поле I недопустимо.

R

Регистрирующий узел устанавливает флаг R для запроса услуг доступности (маршрутизации) зарегистрированного адреса у Routing Registrar.

T

Флаг, указывающий, что следующий октет служит TID.

TID

1-байтовое целое число без знака. Идентификатор транзакции поддерживается узлом и инкрементируется с каждой транзакцией с 1 или несколькими регистрациями, выполненными одновременно на одном или нескольких 6LR. При сброшенном флаге T это поле должно игнорироваться.

Registration Lifetime

16-битовое целое число, указывающее срок регистрации в минутах. Значение 0 говорит о завершении срока регистрации и указывает, что соответствующее состояние должно быть удалено.

Registration Ownership Verifier (ROVR)

Разрешает сопоставление нескольких попыток регистрации одного адреса IPv6. Для совместимости с прежними версиями поле ROVR должно иметь размер 64 бита, в ином случае размер может быть 128, 192 или 256 битов.

Таблица 1. Коды состояния EARO.

Значение

Описание

0-2

Определены в [RFC6775]. Отметим, что значение Status = 1 (дубликат адреса) применимо к зарегистрированному адресу. Если Source Address конфликтует с имеющейся регистрацией, должен применяться статус Duplicate Source Address.

3

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

4

Удалено. Состояние привязки было удалено. Это значение Status может быть помещено в сообщение NA(EARO), переданное как отказ от прокси-регистрации в IPv6 ND Registrar, или в асинхронное сообщение NA(EARO).

5

Запрошена проверка. Для регистрирующего узла возникли сомнения во владении зарегистрированным адресом или приемлемости прокси для регистрации. IPv6 ND Registrar может поместить это значение Status в асинхронные сообщения DAC или NA.

6

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

7

Недействительный адреса отправителя. Адрес отправителя NS(EARO) не является Link-Local.

8

Зарегистрированный адрес не корректен топологически. Зарегистрированный адрес не применим на этом канале.

9

Реестр 6LBR заполнен. Новая регистрация не может быть воспринята по причине заполнения реестра 6LBR. Отметим, что этот код применяется 6LBR вместо Status = 2 при отклике на обмен сообщениями Duplicate Address и передаётся регистрирующему узлу маршрутизатором 6LR.

10

Отказ при проверке. Некорректное подтверждение владения зарегистрированным адресом.

4.2. Расширенные форматы сообщений о дубликатах адресов

Сообщения DAR и DAC используют общий базовый формат, определённый в параграфе 4.4 [RFC6775], и позволяют доставлять сведения из ARO через несколько интервалов пересылки. Расширенный формат DAR и DAC показан на рисунке 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |CodePfx|CodeSfx|          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Status     |     TID       |     Registration Lifetime     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
...          Registration Ownership Verifier (ROVR)           ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Registered Address                      +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 2. Формат расширенного сообщения о дубликате адреса.


Ниже перечислены изменённые поля сообщений.

Code

Код ICMP [RFC4443] для сообщений Duplicate Address разделен на два 4-битовых поля Code Prefix и Code Suffix. В поле Code Prefix отправитель должен устанавливать 0, а получатель должен игнорировать поле. Ненулевое значение Code Suffix указывает поддержку данной спецификации. В нем должно устанавливаться значение 1 при работе в режиме совместимости с прежними версиями, где применяется ROVR размером 64 бита. В иных случаях можно устанавливать значение 2, 3, 4, указывающее размер ROVR 128, 192, 256 бита, соответственно.

TID

1-байтовое целое число. Определение и обработка TID соответствуют заданным для EARO в параграфе 4.1. Это поле должно игнорироваться при пустом (null) ICMP Code.

Registration Ownership Verifier (ROVR)

Размер ROVR определяется полем ICMP Code Suffix. Определение и обработка поля ROVR соответствуют заданным для EARO в параграфе 4.1.

4.3. Расширения опции CIO

Эта спецификация определяет 5 новых битов возможностей для опции 6CIO, определённой в [RFC7400] (6LoWPAN-GHC: Generic Header Compression for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)) для сообщений IPv6 ND. Флаг G определён в параграфе 3.3 [RFC7400].

Флаг D показывает, что 6LBR поддерживает сообщения EDAR и EDAC. Маршрутизатор 6LR, получающий флаг D из анонсов, может обмениваться сообщениями EDAR и EDAC с 6LBR и устанавливать флаг D, а также флаг L в опции 6CIO своих анонсов. Благодаря этому, 6LN могут предпочесть регистрацию на 6LR, способном использовать новые функции 6LBR.

Новые флаги L, B и P указывают, может ли маршрутизатор выступать как 6LR, 6LBR или Routing Registrar (например, 6BBR), соответственно (или в комбинации). Эти флаги не исключают друг друга и обновленный узел может анонсировать несколько функций.

Флаг E указывает возможность использования EARO при регистрации. Маршрутизатор 6LR, поддерживающий эту спецификацию, должен устанавливать флаг E.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   Length = 1  |     Reserved      |D|L|B|P|E|G|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3. Новые биты возможностей в 6CIO.


Ниже указаны поля опции.

Type

36

D

6LBR поддерживает сообщения EDAR и EDAC.

L

Узел является 6LR.

B

Узел является 6LBR.

P

Узел является Routing Registrar.

E

Узел является IPv6 ND Registrar, т. е. поддерживает регистрацию на основе EARO.

5. Обновление RFC 6775

EARO (4.1. Расширенная опция ARO (EARO)) обновляет опцию ARO, используемую в сообщениях NS и NA между 6LN и 6LR. Обновление позволяет регистрацию в Routing Registrar для получения дополнительных услуг, таких как возврат возможности маршрутизации по зарегистрированному адресу с помощью обычных средств маршрутизации и/или proxy ND, как показано на рисунке 4.

               Routing
6LN            Registrar
  |                |
  |   NS(EARO)     |
  |--------------->|
  |                |
  |                | Вставка/поддержка
  |                | маршрута к хосту или
  |                | состояния IPv6 ND proxy
  |                | <----------------->
  |   NA(EARO)     |
  |<---------------|
  |                |

Рисунок 4. Поток (пере)регистрации.


EDAR и EDAC обновляют сообщения DAR и DAC для доставки новой информации между 6LR и 6LBR через сеть LLN (mesh). Расширениями ARO являются DAR и DAC при использовании в сообщениях Duplicate Address, передающие дополнительные сведения маршрутизатору 6LBR. В свою очередь, 6LBR может служить посредником при регистрации для получения услуг доступности от Routing Registrar, таких как 6BBR (рисунок 5). Эта спецификация предотвращает поток сообщения Duplicate Address для адресов Link-Local в топологии с маршрутизацией [RFC6606] (параграф 5.6).

                                       Routing
6LN          6LR            6LBR      Registrar
 |            |              |            |
 |<Link-local>|   <Routed>   |<Link-local>|
 |            |              |            |
 |  NS(EARO)  |              |            |
 |----------->|              |            |
 |            | Extended DAR |            |
 |            |------------->|            |
 |            |              |  proxy     |
 |            |              |  NS(EARO)  |
 |            |              |----------->|
 |            |              |            | Вставка/поддержка
 |            |              |            | маршрута к хосту или
 |            |              |            | состояния IPv6 ND proxy
 |            |              |            | <----------------->
 |            |              |  proxy     |
 |            |              |  NA(EARO)  |
 |            | Extended DAC |<-----------|
 |            |<-------------|            |
 |  NA(EARO)  |              |            |
 |<-----------|              |            |
 |            |              |            |

Рисунок 5. Поток (пере)регистрации.


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

В разделе 5 [RFC6775] указано, как 6LN запускает интерфейс и находит доступные 6LR. Регистрирующему узлу следует регистрироваться на 6LR, поддерживающем данную спецификацию, если такой маршрутизатор найден, как указано в параграфе 6.1, вместо регистрации на 6LR, поддерживающем лишь RFC 6775. В иных случаях регистрирующий узел работает в режиме совместимости с прежними версиями, присоединяясь к RFC 6775-only 6LR.

5.1. Расширение ARO

Опция EARO обновляет ARO и совместима с прежней версией тогда и только тогда, когда установлено значение Length = 2. Формат опции EARO на рисунке 1. Вопросы совместимости более подробно рассматриваются в разделе 6. Изменения в сообщении NS и опции ARO описаны ниже.

  • Поле Target Address в NS, содержащее EARO, сейчас показывает регистрируемый адрес в отличие от поля Source Address в NS, указанного в [RFC6775] (см. 5.5. Регистрация целевого адреса). Это изменение позволяет 6LBR передать прокси-регистрацию для адреса 6LN регистратору Routing Registrar и в большинстве случаев избежать использования Source Address в качестве адреса до его регистрации.

  • Поле EUI-64 в ARO переименовано в Registration Ownership Verifier (ROVR) и его не требуется выводить из MAC-адреса (см. 5.3. Поле ROVR).

  • Поле Length в опции может отличаться от 2 и принимать значения от 3 до 5, делая опцию EARO несовместимой с прежней опцией ARO. Увеличение размера соответствует большему полю ROVR, размер которого выводится из значения Length.

  • Добавлено поле Opaque для доставки необрабатываемых данных, передаваемых другому процессу регистрации, например для анонсирования протоколом маршрутизации. Новое поле I указывает тип необрабатываемой информации и процесс, для которого 6LN передаёт Opaque. I = 0 указывает передачу топологических сведений процессу маршрутизации, если регистрация распределяется далее. В этом случае значение 0 в поле Opaque (1) обеспечивает совместимость с прежними версиями, где поле является резервным, и (2) указывает использование принятой по умолчанию топологии.

  • Этот документ задаёт для опции EARO новый флаг R. При установленном флаге Registering Node запрашивает у 6LR обеспечения доступности регистрируемого адреса, например через маршрутизацию или proxy ND. Сброшенный флаг R указывает, что Registering Node является маршрутизатором и будет анонсировать доступность Registered Address по протоколу маршрутизации (такому как RPL [RFC6550]).

  • Поддерживающий эту спецификацию узел должен включать поле TID в опцию EARO и устанавливать флаг T для индикации его присутствия (см. 5.2. Идентификатор транзакции).

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

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

5.2. Идентификатор транзакции

TID является порядковым номером, который инкрементируется 6LN при каждой перерегистрации на 6LR, и служит для определения свежего запроса на регистрацию, который сеть использует для определения последнего места размещения 6LN. Когда Registered Node зарегистрирован на нескольких 6LR параллельно, для них должны указываться одинаковые значения TID. Это позволяет 6LBR и/или Routing Registrar определить идентичные регистрации и отличать их от перемещений узла (см. примеры в параграфе 5.7 и Приложении A).

5.2.1. Сравнение значений TID

Операции TID полностью совместимы со счётчиком RPL Path Sequence, описанным в параграфе 7.2 [RFC6550] (RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks).

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

Диапазон TID делится на 2 части в стиле [Perlman83], где значения 128 и больше используются как линейная последовательность для индикации перезапуска и загрузки (bootstrap) счётчика, а значения от 0 до 127 служат кольцевым счётчиком в пространстве со 128 именами, как описано в [RFC1982]. Переход от линейного режима к кольцевому отслеживается. При работе в кольцевом режиме слишком удалённые номера считаются несравнимыми, как указано ниже. Окно сравнения SEQUENCE_WINDOW = 16 настраивается на основе значения 2N, а для N данная спецификация задаёт значение 4.

Сравнение значений счётчика выполняется в соответствии с приведёнными ниже правилами.

  1. Перед использованием счётчика его следует инициализировать зависящим от реализации значением не меньше 128, рекомендуется использовать 240 (256 — SEQUENCE_WINDOW).

  2. Когда инкрементирование счётчика ведёт к переходу через максимум, счётчик должен сбрасываться в 0. Для диапазона 128 и больше максимум составляет 255, в диапазоне значений меньше 128 — 127.

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

    1. Если первое значение A относится к диапазону [128-255], а второе B — к диапазону [0-127]:

      1. если (256 + B — A) SEQUENCE_WINDOW, B считается больше A, A меньше B и они не равны;

      2. если (256 + B — A) > SEQUENCE_WINDOW, A считается больше B, B меньше A и они не равны.

      Например, если A = 240 и B = 5, то (256 + 5 — 240) = 21. Значение 21 больше SEQUENCE_WINDOW (16), поэтому 240 больше чем 5. Если A = 250 и B = 5, то (256 + 5 — 250) = 11. Значение 11 меньше SEQUENCE_WINDOW (16), поэтому 250 меньше чем 5.

    2. Если оба сравниваемых номера относятся к одному диапазону (оба не больше или оба больше 127):

      1. если абсолютное значение разности не превышает SEQUENCE_WINDOW, используется сравнение, заданное в [RFC1982];

      2. если абсолютное значение разности превышает SEQUENCE_WINDOW, считается, что произошла ресинхронизация номеров и они не сравнимы.

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

5.3. Поле ROVR

Поле ROVR заменяет EUI-64 в опции ARO, определённой в [RFC6775], и связано с состоянием регистрации в 6LR и 6LBR. ROVR может быть уникальным идентификатором Registering Node, таким как адрес EUI-64 на интерфейсе, а также маркером, получаемым криптографическими методами, который может применяться в дополнительных протокольных обменах для связывания криптографического элемента (ключа) с регистрацией для того, чтобы его мог изменить лишь владелец, подтвердив владение ROVR. Областью действия ROVR является регистрация конкретного адреса IPv6 и недопустимо использовать то же значение ROVR для регистрации другого адреса.

ROVR может использовать разные типы и конкретный тип указывается в сообщении, передающем новый тип. Например, это может быть криптографическая строка, служащая для подтверждения владения регистрацией, как указано в [AP-ND] (Address Protected Neighbor Discovery for Low-power and Lossy Networks). Для поддержки потоков, относящихся к подтверждению владения, эта спецификация вводит в EARO новые коды состояния Validation Requested (запрошена проверка) и Validation Failed (отказ при проверке).

Примечание относительно конфликтов ROVR. Разные методы формирования ROVR работают в разных пространствах имён. В [RFC6775] задано использование адресов EUI-64, [AP-ND] задаёт генерацию криптографических маркеров. Хотя в самом пространстве EUI-64 конфликты не предполагаются, они становятся возможными при реализации [AP-ND] даже на одном узле. Реализация, понимающая пространство имён, должна считать ROVR из разных пространств имён различающимися даже при совпадении их значений. Поддерживающие лишь RFC 6775 маршрутизаторы 6LBR и 6LR будут путать пространства имён, что несколько повышает вероятность конфликтов ROVR. Конфликты ROVR не оказывают влияния при регистрации двумя узлами разных адресов, поскольку значимость ROVR ограничена контекстом одной регистрации. Не предполагается уникальность значений ROVR в рамках одной регистрации, поскольку эта спецификация позволяет узлу применять одно значение ROVR для регистрации нескольких адресов IPv6. Поэтому недопустимо использовать ROVR в качестве ключа для идентификации Registering Node или индекса регистрации. Поле применяется лишь для сопоставления при проверке проверке совпадения меняющего регистрацию узла с узлом, зарегистрировавшим адрес IPv6. Если ROVR не является адресом EUI-64, недопустимо использовать это поле как идентификатор интерфейса с зарегистрированным адресом. Таким образом, регистрация с применением ROVR не будет конфликтовать с регистрацией адреса IPv6, выведенного из EUI-64 и использующего EUI-64 в качестве ROVR согласно [RFC6775].

Регистрирующему узлу следует сохранять ROVR или иметь данные для восстановления значения в постоянной памяти. При отказе от этого такие события, как перезагрузка, будут вызывать потерю состояния и повторная регистрация того же адреса может быть невозможна, пока (1) в 6LR и 6LBR не истечёт срок прежней регистрации или (2) система управления не сбросит соответствующее состояние в сети.

5.4. Расширенные сообщения о дубликатах адресов

Для отображения нового содержимого EARO в сообщениях EDA добавлено поле TID в сообщения EDAR и EDAC, заменившее резервное поле (Reserved), и отличное от 0 значение ICMP Code указывает поддержку этой спецификации. Формат сообщений EDAR и EDAC показан на рисунке 2.

Как и опция EARO, сообщения EDA совместимы с прежними версиями RFC 6775-only, если поле ROVR имеет размер 64 бита. Замечания о совместимости протоколов между 6LN и 6LR применимы к совместимости между 6LR и 6LBR.

5.5. Регистрация целевого адреса

Сообщение NS с опцией EARO является регистрацией тогда и только тогда, когда в нем есть опция SLLA4 (SLLAO) [RFC6775]. EARO можно применять в сообщениях NS и NA между Routing Registrar для определения распределенного состояния регистрации, в этом случае оно не включает опцию SLLA и не путается с регистрацией.

Registering Node — это узел, выполняющий регистрацию на Routing Registrar. Как указано в [RFC6775], это может быть также зарегистрированный узел (Registered Node), регистрирующий один из своих адресов, и указывающий свой MAC-адрес в опции SLLA сообщения NS(EARO).

Эта спецификация добавляет возможность посредничества при регистрации от имени зарегистрированного узла, доступного через сеть LLN. В этом случае Registered Node доступен от Routing Registrar через mesh-конфигурацию, а регистрирующий узел указывает MAC-адрес регистрируемого узла в SLLA в сообщении NS(EARO). Если зарегистрированный узел доступен через конфигурацию с маршрутизацией (route-over) для Registering Node, SLLA в NS(ARO) содержит адрес регистрирующего узла. Это позволяет регистрирующему узлу привлекать пакеты от Routing Registrar и маршрутизировать их через сеть LLN зарегистрированному узлу.

Для выполнения такой операции данная спецификация меняет поведение 6LN и 6LR так, что зарегистрированный узел указывается в поле Target Address сообщений NS и NA, а не в поле Source Address. В соответствии с этим опция TLLA (Target Link-Layer Address Option или TLLAO) указывает адрес канального уровня узла 6LN, владеющего адресом.

Регистрирующий узел (например, 6LBR, являющийся корнем RPL), анонсирующий доступность для 6LN, должен поместить свой адрес канального уровня в опцию SLLA регистрационного сообщения NS(EARO). Это обеспечивает совместимость с 6LoWPAN ND при поддержке тем лишь RFC 6775.

5.6. Адреса Link-Local и регистрация

Узлы LLN часто не имеют кабельных подключений и могут перемещаться. При этом нет никакой гарантии уникальности узла Link-Local среди огромного и способного постоянно меняться числа соседних узлов. В отличие от [RFC6775], эта спецификация требует уникальности адреса Link-Local лишь с точки зрения двух узлов, использующих его для связи (например, 6LN и 6LR в обмене NS/NA). Это упрощает процесс DAD в топологии с маршрутизацией для адресов Link-Local за счёт избавления от обмена сообщениями EDA между 6LR и 6LBR для этих адресов.

Обмен между двумя узлами с адресами Link-Local предполагает между узлами один интервал (hop). Узел должен регистрировать адрес Link-Local в 6LR для получения дальнейшей связности через этот 6LR и, в частности, для использования адреса Link-Local в качестве Source Address при регистрации других (например, глобальных) адресов.

Если не возникает конфликтов с ранее зарегистрированным адресом, адрес Link-Local является уникальным с точки зрения этого 6LR и регистрация не является дубликатом. Два разных 6LR могут заявить один адрес Link-Local при разных адресах канального уровня. В этом случае узел 6LN должен взаимодействовать лишь с одним из 6LR.

Обмен сообщениями EDAR и EDAC между 6LR и 6LBR, обеспечивающий уникальность адреса в домене, охватываемом 6LBR, не требуется для адресов Link-Local.

При передаче NS(EARO) маршрутизатору 6LR узел 6LN должен использовать адрес Link-Local как Source Address для регистрации, независимо от типа регистрируемого адреса IPv6. Этот адрес Link-Local должен быть регистрируемым или ранее зарегистрированным на 6LR адресом.

При старте 6LN узел обычно передаёт групповые сообщения RS и получает одно или множество индивидуальных сообщения RA от 6LR. Если 6LR может обрабатывать сообщения EARO, он помещает опцию 6CIO в свои сообщения RA с флагом E, установленным в соответствии с требованиями параграфа 6.1.

Когда у регистрирующего узла нет ранее зарегистрированного адреса, он должен регистрировать адрес Link-Local, используя его как Source Address и Target Address в сообщении NS(EARO). В таких случаях рекомендуется применять адрес, для которого не требуется DAD (см. [RFC6775]), например, адрес, выведенный из глобально уникального адреса EUI-64. Использование опции SLLA в NS согласуется с имеющимися спецификациями ND, такими как [RFC4429] (Optimistic Duplicate Address Detection (DAD) for IPv6). 6LN затем может использовать этот адрес для регистрации других адресов.

Маршрутизатор 6LR, поддерживающий эту спецификацию, отвечает сообщением NA(EARO), установив нужный статус. Поскольку не выполняется обмена сообщениями EDAR и EDAC для адресов Link-Local, 6LR может сразу же ответить на регистрацию адреса Link-Local, основываясь лишь на имеющемся состоянии и опции SLLA, помещённой в сообщение NS(EARO) в соответствии с [RFC6775].

Узел регистрирует свои уникальные в глобальном масштабе адреса IPv6 (Global Unicast Address или GUA) на 6LR для обеспечения глобальной доступности этих адресов через данный маршрутизатор 6LR. При регистрации с обновлённым 6LR регистрирующий узел не использует GUA как Source Address в отличие от узла, соответствующего [RFC6775]. Для адресов, не относящихся к Link-Local обмен сообщениями EDAR и EDAC должен выполняться в соответствии с [RFC6775], но применяются описанные здесь расширенные форматы DAR и DAC для ретрансляции расширенных сведений в случае EARO.

5.7. Поддержка состояний регистрации

В этом разделе рассматриваются действия протокола, вовлекающие Registering Node, 6LR и 6LBR. Нужно подчеркнуть, что действия с 6LBR применимы лишь к зарегистрированным на этом маршрутизаторе адресам, но это не относится к адресам Link-Local, как указано в параграфе 5.6. Состояние регистрации включает все данные, хранящиеся в маршрутизаторе для этой регистрации, включая NCE. Маршрутизаторы 6LBR и Routing Registrar могут хранить дополнительные сведения и применять протоколы синхронизации, не включённые в этот документ.

6LR не может воспринять новую регистрацию при нехватке места в регистрационном хранилище. В такой ситуации опция EARO возвращается в сообщении NA с кодом состояния Neighbor Cache Full (Status 2, см. [RFC6775] и таблицу 1) и регистрирующий узел может попытаться выполнить регистрацию на другом 6LR.

При заполненном реестре 6LBR не может решить, является ли регистрация нового адреса дубликатом. В таком случае 6LBR отвечает на EDAR сообщением EDAC с новым кодом состояния 6LBR Registry Saturated (таблица 1). Отметим, что этот код применяется 6LBR вместо кода Neighbor Cache Full при ответе в обмене сообщениями Duplicate Address и передаётся регистрирующему узлу маршрутизатором 6LR. Узлу нет смысла повторять регистрацию на другом 6LR, поскольку проблема охватывает всю сеть. Узел может отказаться от этого адреса, отменить регистрацию других адресов для освобождения места или сохранить адрес как «пробный» [RFC4861] для последующего повтора.

Узел обновляет регистрацию путём передачи нового сообщения NS(EARO) для зарегистрированного адреса и 6LR должен сообщить о новой регистрации маршрутизатору 6LBR.

Узлу, прекращающему использовать адрес, следует попытаться отменить его регистрацию на всех 6LR, где адрес был зарегистрирован. Это делается с помощью сообщений NS(EARO) с Registration Lifetime = 0. Если этого не сделать, состояние будет оставаться в сети до завершения текущего Registration Lifetime, что может приводить к истощению ресурсов 6LR даже в случае их корректного планирования. 6LR может применять меры защиты, препятствующие данному узлу или иным узлам владеть запрашиваемым числом адресов (см. 7. Вопросы безопасности).

Узлу, уходящему с конкретного 6LR, следует попытаться отменить на нем регистрацию всех своих адресов и зарегистрироваться на другом 6LR с увеличением TID. Если узел появляется в другом месте, следует использовать асинхронное сообщение NA(EARO) или EDAC с кодом состояния Moved для очистки состояния в прежнем месте. Статус Moved может указывать Routing Registrar в сообщении NA(EARO) для индикации передачи права владения прокси-состоянием другому Routing Registrar в результате перемещения устройства. Если у получателя сообщения есть статус регистрации, соответствующий адресу, ему следует распространить статус по пути пересылки к зарегистрированному узлу (например, обратив имеющийся путь RPL [RFC6550], как предложено в [Efficient-NPDAO]). Независимо от этого, получатель должен очистить указанное состояние.

При получении NS(EARO) с Registration Lifetime = 0 и признании EARO наиболее свежим для данной записи NCE (см. 5.2. Идентификатор транзакции), 6LR сбрасывает NCE. Если адрес был зарегистрирован на 6LBR, маршрутизатор 6LR должен уведомить 6LBR через обмен Duplicate Address, указав Registration Lifetime = 0 и последнее известное значений TID.

При получении сообщения EDAR маршрутизатор 6LBR определяет, является ли TID последним для конкретной записи. Если это так, он отвечает на EDAR сообщением EDAC с кодом статуса 0 (Success) [RFC6775], а запись планируется для удаления. В иных случаях возвращается статус Moved и имеющаяся запись сохраняется.

Когда для адреса запланировано удаления, маршрутизатору 6LBR следует сохранять для него запись NCE со статусом DELAY [RFC4861] в течение настраиваемого интервала для предотвращения ситуаций, когда (1) мобильный узел, отозвавший регистрацию на одном 6LR, ещё не зарегистрировался на другом или (2) новая регистрация ещё не достигла 6LBR в результате задержки в сети. По прошествии заданного времени 6LBR просто удаляет запись.

6. Совместимость с прежними версиями

Эта спецификация меняет поведение партнёров в потоке регистрации. Для совместимости с прежними версиями узел 6LN, регистрирующийся на 6LR, для которого нет сведений о поддержке данной спецификации, должен вести себя в соответствии с [RFC6775]. Если же известно о поддержке 6LR данной спецификации, 6LN должен следовать ей.

Узел 6LN, поддерживающий эту спецификацию, должен всегда применять EARO вместо ARO при регистрации на маршрутизаторе. Это поведение совместимо с прежним, поскольку флаг T и поле TID занимают резервные поля [RFC6775] и будут игнорироваться маршрутизатором, поддерживающим лишь RFC 6775. Поддерживающий эту спецификацию маршрутизатор должен отвечать на NS(ARO) и NS(EARO) сообщением NA(EARO). Не поддерживающий эту спецификацию маршрутизатор будет считать ROVR адресом EUI-64 и соответственно обрабатывать поле. Это не вызовет проблем, если зарегистрированные адреса различаются.

6.1. Поддержка сигнализации EARO

В [RFC7400] определена опция 6CIO, указывающая партнёру возможности узла. Эта опция должна присутствовать в сообщениях RS и RA, если она сведения из неё не известна из предшествующего обмена или не заданы на всех узлах сети. В любом случае опция 6CIO должна помещаться в сообщение RA, передаваемое в ответ на RS с опцией 6CIO.

В параграфе 4.3 задан новый флаг для 6CIOУказывающий поддержку EARO отправителем сообщения. Добавлены также новые флаги 6CIO для указания возможностей отправителя, являющегося 6LR, 6LBR или Routing Registrar (см. параграф 4.3). Там же задан флаг, указывающий поддержку сообщений EDAR и EDAC маршрутизатором 6LBR. Этот флаг действует лишь в сообщениях RA, но не в RS. Дополнительные сведения о 6LBR размещаются в отдельной опции ABRO (Authoritative Border Router Option), помещаемой в RA в соответствии с [RFC6775]. В частности, она должна включаться в сообщения RA, передаваемые в ответ на RS с опцией 6CIO, указывающей возможность выступать в качестве 6LR, поскольку сообщения RA распространяют сведения между маршрутизаторами.

6.2. 6LN с поддержкой только RFC 6775

Поддерживающий лишь RFC 6775 узел 6LN будет использовать зарегистрированный адрес как Source Address в сообщении NS и не будет применять его в EARO. Обновленный 6LR должен воспринимать такую регистрацию, если она действительная в соответствии с [RFC6775], и должен поддерживать соответствующую привязку кэша. Обновленный 6LR должен после этого использовать сообщения DAR и DAC, соответствующие [RFC6775], для индикации маршрутизатору 6LBR отсутствия TID в сообщениях.

Основное отличие от [RFC6775] заключается в том, что обмен сообщениями DAR и DAC для целей DAD не применяется для адресов Link-Local. В любом случае маршрутизатор 6LR должен использоваться EARO в отклике и может указывать любые коды состояния, определённые в этой спецификации.

6.3. 6LR с поддержкой только RFC 6775

Обновленный узел 6LN раскрывает возможности 6LR в опции 6CIO сообщений RA от 6LR. При отсутствии 6CIO в RA предполагается, что 6LR поддерживает лишь RFC 6775. Обновленный узел 6LN должен использовать EARO в запросе независимо от типа 6LR (RFC 6775 или обновленный), это предполагает установку флага T. Узел должен использовать ROVR размером 64 бита, если 6LR поддерживает лишь RFC 6775.

Если обновленный узел 6LN переходит от обновлённого 6LR к маршрутизатору 6LR, поддерживающему лишь RFC 6775, последний будет передавать сообщение DAR в соответствии с RFC 6775, которое невозможно сравнить с обновлённым в плане свежести. Разрешение сообщениям DAR, соответствующим лишь RFC 6775, обновлять состояние, созданное обновлённым протоколом в 6LBR, открывает возможность для атак, поэтому его невозможно принять по умолчанию. Однако при временном существовании в сети обновлённых и унаследованных 6LR для администратора имеет смысл установить политику, разрешающую такое поведение, с использованием той или иной защиты, выходящей за рамки этого документа.

6.4. 6LBR с поддержкой только RFC 6775

Эта спецификация расширяет сообщения о дубликатах адресов для передачи EARO. Как и в случае с сообщениями NS и NA, обновленный маршрутизатор 6LBR должен всегда применять сообщения EDAR и EDAC.

Отметим, что поддерживающий лишь RFC 6775 маршрутизатор 6LBR будет воспринимать и обрабатывать сообщение EDAR, как обычное сообщение DAR (RFC 6775), пока размер ROVR составляет 64 бита. Обновленный маршрутизатор 6LR раскрывает возможности 6LBR через опцию 6CIO в сообщениях RA от 6LR — при отсутствии 6CIO в сообщениях RA предполагается, что 6LBR поддерживает лишь RFC 6775.

Если 6LBR поддерживает лишь RFC 6775, маршрутизатор 6LR должен использовать лишь 64 первых (слева) бита ROVR и помещать результат в сообщение EDAR для поддержки совместимости. Таким образом, сохраняется поддержка DAD.

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

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

[RFC6775] не защищает содержимое своих сообщений и ожидает, что шифрование нижележащего уровня предотвратит возможные атаки. Эта спецификация требует от MAC-уровня LLN защиты индивидуального трафика к Routing Registrar и от него, а также защиты группового и широковещательного трафика от Routing Registrar для предотвращения вмешательства и повторного использования сообщений ND.

Эта спецификация рекомендует применять защиту приватности (раздел 8) и предотвращения кражи адресов с помощью методов, выходящих за рамки этого документа. Например, [AP-ND] гарантирует владение зарегистрированным адресом на основе криптографических ROVR.

Мошеннический узел может использовать механизм регистрации для атаки на 6LR или 6LBR с целью провоцирования отказов в обслуживании реестра. Реестры 6LR или 6LBR могут переполняться и отказывать в регистрации, что будет препятствовать запрашивающим узлам в использовании новых адресов. Для снижения этих рисков (1) раздел 5.2 предоставляет счётчик инкрементирование которого позволяет обнаруживать и сбрасывать устаревшие состояния регистрации а также способствует отражению атак с повторным использованием пакетов, а (2) раздел 5.7 содержит рекомендации, позволяющие удалять устаревшие регистрации из 6LR и 6LBR как можно быстрее.

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

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

  • Срок регистрации следует делать индивидуально настраиваемым для каждого адреса или группы адресов. Узлу следует настраивать для каждого адреса (категории адресов) срок ожидаемый регистрации в маршрутизаторе 6LR, где адрес зарегистрирован. В частности, при развёртывании с мобильными или часто меняющимися адресами следует использовать сроки регистрации с порядком значения близким к ожидаемому сроку присутствия с некоторым запасом по времени.

  • Маршрутизаторам (6LR и 6LBR) следует быть настраиваемыми для ограничения числа адресов, которые может регистрировать 1 узел, в качестве меры защиты. В любом случае маршрутизатор должен быть способен поддерживать минимальное число адресов для каждого узла, зависящее от типа устройства, и составляющее от 3 для сильно ограниченных LLN до 10 для более крупных устройств. Узел может распознаваться по его MAC-адресу, если тот не маскируется по соображениям приватности. Рекомендуется применять более строгую (например, по криптографическим свидетельствам) идентификацию узлов. При достижении максимального числа адресов маршрутизатору следует использовать алгоритм LRU5 для очистки адресов, сохраняя хотя бы 1 адрес Link-Local. Маршрутизатору следует пытаться сохранить хотя бы один стабильный адрес, если стабильность можно проверить (например, используемый дольше других адрес).

  • Для предотвращения отказов при регистрации по причине нехватки ресурсов администраторам следует проявлять осторожность и развёртывать достаточно число 6LR в соответствии с потребностями узлов в зоне действия маршрутизаторов. Предполагается, что 6LBR, обслуживающий сеть LLN, является более мощным, чем средний 6LR, но в сети, которая может достигать насыщения, конкретной LLN следует распределять функции 6LBR, например, используя скоростные магистрали и Routing Registrar для объединения LLN.

Узлы LLN зависят от 6LBR и могут применять для своей работы услуги Routing Registrar. Должна быть реализована модель доверия, обеспечивающая возможность служить регистраторами лишь доверенным устройствам, чтобы избежать таких угроз, как «чёрные дыры» или «бомбардировки», когда подставной 6LBR будет нарушать состояние сети, используя статус Removed. Модель доверия должна, как минимум, использовать контроль доступа L2 или проверку ролей (см. Req-5.1 в Приложении B.5).

8. Вопросы приватности

Как указано в разделе 3, этот протокол не ограничивает число адресов IPv6 для каждого устройства. Однако для смягчения атак на службы могут оказаться полезными защитные меры по ограничению числа адресов с достаточно высоким пределом, не препятствующим обычной работе устройств. Хостам следует поддерживать возможность создания и регистрации любых адресов, топологически корректных в подсети, анонсируемой 6LR/6LBR.

Эта спецификация не требует определённого способа формирования адресов IPv6, но не рекомендует применять EUI-64 для формирования индикаторов интерфейса с адресом Link-Local, поскольку это препятствует использованию безопасного обнаружения соседей (Secure Neighbor Discovery или SEND) [RFC3971], криптографического создания адресов (Cryptographically Generated Address или CGA) [RFC3972] и других механизмов защиты приватности.

В [RFC8065] (Privacy Considerations for IPv6 Adaptation-Layer Mechanisms) разъясняется важность приватности и способы формирования адресов с учётом приватности. Все реализации и развёртывания должны учитывать вопросы приватности адресов в своих средах.

Адрес IPv6 узла 6LN в заголовке IPv6 может быть сжат без учёта состояния, если идентификатор интерфейса в адресе IPv6 можно получить из адреса нижележащего уровня. Когда экономия в результате сжатия не критична, например, адреса можно сжать с учётом состояния, применяется редко и/или на одном интервале пересылки, следует учитывать соображения приватности. В частности, новым реализациям следует соблюдать [RFC8064] (Recommendation on Stable IPv6 Interface Identifiers), где рекомендован заданный в [RFC7217] (A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)) механизм создания идентификаторов интерфейсов для использования в SLAAC.

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

Агентство IANA внесло множество изменений в реестр Internet Control Message Protocol version 6 (ICMPv6) Parameters.

9.1. Флаги опции ARO

В IANA создан новый субреестр Address Registration Option Flags в реестре Internet Control Message Protocol version 6 (ICMPv6) Parameters (сведения, относящиеся к ICMPv6, приведены в [RFC4443]). Эта спецификация определяет 8 битов (от 0 до 7) и выделяет бит 6 для флага R, а бит 7 — для флага T (см. 4.1. Расширенная опция ARO (EARO)). Биты выделяются в соответствии с процедурой IETF Review или IESG Approval (см. [RFC8126]). Исходное содержимое реестра указано в таблице 2.

Таблица 2. Новые флаги опции ARO.

Бит

Описание

Документ

0-5

Не выделен

6

Флаг R

RFC 8505

7

Флаг T

RFC 8505

9.2. Поле ARO I

В IANA создан новый субреестр Address Registration Option I-Field в реестре Internet Control Message Protocol version 6 (ICMPv6) Parameters. Эта спецификация определяет 4 целочисленных значения (0 — 3) и выделяет значение 0 для абстрактного индекса выбора топологии (Abstract Index for Topology Selection, см. 4.1. Расширенная опция ARO (EARO)). Значения выделяются в соответствии с процедурой IETF Review или IESG Approval (см. [RFC8126]). Исходное содержимое реестра указано в таблице 3.

Таблица 3. Новый субреестр для поля EARO I.

Значение

Описание

Документ

0

Abstract Index for Topology Selection

RFC 8505

1-3

Не выделены

9.3. Коды ICMP

В IANA создано два новых субреестра в реестре ICMPv6 «Code» Fields, который сам является субреестром кодов ICMPv6 в реестре Internet Control Message Protocol version 6 (ICMPv6) Parameters. Субреестры относятся к типам ICMP 157 (Duplicate Address Request, таблица 4) и 158 (Duplicate Address Confirmation, таблица 5). Для этих типов ICMP поле ICMP Code делится на две части — Code Prefix и Code Suffix и новые субреестры относятся к суффиксам, которые могут принимать значения от 0 до 15. Значения выделяются по процедуре IETF Review или IESG Approval (см. [RFC8126]).

Таблица 4. Суффиксы кодов для сообщений ICMP Type 157 DAR.

Суффикс

Описание

Документ

0

Сообщение DAR

RFC 6775

1

Сообщение EDAR 64-битовым полем ROVR

RFC 8505

2

Сообщение EDAR 128-битовым полем ROVR

RFC 8505

3

Сообщение EDAR 192-битовым полем ROVR

RFC 8505

4

Сообщение EDAR 256-битовым полем ROVR

RFC 8505

5-15

Не выделены

Таблица 5. Суффиксы кодов для сообщений ICMP Type 158 DAC.

Суффикс

Описание

Документ

0

Сообщение DAC

RFC 6775

1

Сообщение EDAC 64-битовым полем ROVR

RFC 8505

2

Сообщение EDAC 128-битовым полем ROVR

RFC 8505

3

Сообщение EDAC 192-битовым полем ROVR

RFC 8505

4

Сообщение EDAC 256-битовым полем ROVR

RFC 8505

5-15

Не выделены

9.4. Новые значения ARO Status

Агентство IANA добавило в субреестр Address Registration Option Status Values значения, указанные в таблице 6.

Таблица 6. Новые значения ARO Status.

Значение

Описание

Документ

3

Перемещён

RFC 8505

4

Удалён

RFC 8505

5

Запрошена проверка

RFC 8505

6

Дубликат адреса отправителя

RFC 8505

7

Недействительный адрес отправителя

RFC 8505

8

Регистрируемый адрес топологически некорректен

RFC 8505

9

Реестр 6LBR переполнен

RFC 8505

10

Отказ при проверке

RFC 8505

9.5. Новые биты 6LoWPAN Capability

Агентство IANA добавило в субреестр 6LoWPAN Capability Bits биты, указанные в таблице 7.

Таблица 7. Новые биты возможностей 6LoWPAN.

Бит

Описание

Документ

10

Поддержка EDA (D)

RFC 8505

11

Возможности 6LR (L)

RFC 8505

12

Возможности 6LBR (B)

RFC 8505

13

Регистратор маршрутизации (P)

RFC 8505

14

Поддержка EARO (E)

RFC 8505

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

10.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>.

[RFC4291] Hinden, R. and S. Deering, «IP Version 6 Addressing Architecture», RFC 4291, DOI 10.17487/RFC4291, February 2006, <https://www.rfc-editor.org/info/rfc4291>.

[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>.

[RFC4862] Thomson, S., Narten, T., and T. Jinmei, «IPv6 Stateless Address Autoconfiguration», RFC 4862, DOI 10.17487/RFC4862, September 2007, <https://www.rfc-editor.org/info/rfc4862>.

[RFC4919] Kushalnagar, N., Montenegro, G., and C. Schumacher, «IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs): Overview, Assumptions, Problem Statement, and Goals», RFC 4919, DOI 10.17487/RFC4919, August 2007, <https://www.rfc-editor.org/info/rfc4919>.

[RFC6282] Hui, J., Ed. and P. Thubert, «Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks», RFC 6282, DOI 10.17487/RFC6282, September 2011, <https://www.rfc-editor.org/info/rfc6282>.

[RFC6606] Kim, E., Kaspar, D., Gomez, C., and C. Bormann, «Problem Statement and Requirements for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Routing», RFC 6606, DOI 10.17487/RFC6606, May 2012, <https://www.rfc-editor.org/info/rfc6606>.

[RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. Bormann, «Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)», RFC 6775, DOI 10.17487/RFC6775, November 2012, <https://www.rfc-editor.org/info/rfc6775>.

[RFC7400] Bormann, C., «6LoWPAN-GHC: Generic Header Compression for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)», RFC 7400, DOI 10.17487/RFC7400, November 2014, <https://www.rfc-editor.org/info/rfc7400>.

[RFC8126] Cotton, M., Leiba, B., and T. Narten, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.

[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. Дополнительная литература

[Alternative-Ellip-Curve-Reps] Struik, R., «Alternative Elliptic Curve Representations», Work in Progress, draft-struik-lwip-curve-representations-00, October 2017.

[AP-ND] Thubert, P., Ed., Sarikaya, B., Sethi, M., and R. Struik, «Address Protected Neighbor Discovery for Low-power and Lossy Networks», Work in Progress, draft-ietf-6lo-ap-nd-086, October 2018.

[Arch-for-6TiSCH] Thubert, P., Ed., «An Architecture for IPv6 over the TSCH mode of IEEE 802.15.4», Work in Progress, draft-ietf-6tisch-architecture-17, November 2018.

[Efficient-NPDAO] Jadhav, R., Ed., Thubert, P., Sahoo, R., and Z. Cao, «Efficient Route Invalidation», Work in Progress, draft-ietf-roll-efficient-npdao-097, October 2018.

[IEEE-802-15-4] IEEE, «IEEE Standard for Low-Rate Wireless Networks», IEEE Standard 802.15.4, DOI 10.1109/IEEESTD.2016.7460875, <https://ieeexplore.ieee.org/document/7460875/>.

[IPv6-Backbone-Router] Thubert, P., Ed. and C. Perkins, «IPv6 Backbone Router», Work in Progress, draft-ietf-6lo-backbone-router-088, October 2018.

[IPv6-over-802.11ah] Del Carpio Vega, L., Robles, M., and R. Morabito, «IPv6 over 802.11ah», Work in Progress, draft-delcarpio-6lo-wlanah-01, October 2015.

[IPv6-over-NFC] Choi, Y., Ed., Hong, Y-G., Youn, J-S., Kim, D-K., and J-H. Choi, «Transmission of IPv6 Packets over Near Field Communication», Work in Progress, draft-ietf-6lo-nfc-12, November 2018.

[IPv6-over-PLC] Hou, J., Liu, B., Hong, Y-G., Tang, X., and C. Perkins, «Transmission of IPv6 Packets over PLC Networks», Work in Progress, draft-hou-6lo-plc-05, October 2018.

[Multicast-over-IEEE802-Wireless] Perkins, C., McBride, M., Stanley, D., Kumari, W., and JC. Zuniga, «Multicast Considerations over IEEE 802 Wireless Media», Work in Progress, draft-ietf-mboned-ieee802-mcast-problems-03, October 2018.

[ND-Optimizations] Chakrabarti, S., Nordmark, E., Thubert, P., and M. Wasserman, «IPv6 Neighbor Discovery Optimizations for Wired and Wireless Networks», Work in Progress, draft-chakrabarti-nordmark-6man-efficient-nd-07, February 2015.

[Perlman83] Perlman, R., «Fault-Tolerant Broadcast of Routing Information», North-Holland Computer Networks 7: pp. 395-405, DOI 10.1016/0376-5075(83)90034-X, 1983, <http://www.cs.illinois.edu/~pbg/courses/cs598fa09/readings/p83.pdf>.

[RFC1958] Carpenter, B., Ed., «Architectural Principles of the Internet», RFC 1958, DOI 10.17487/RFC1958, June 1996, <https://www.rfc-editor.org/info/rfc1958>.

[RFC1982] Elz, R. and R. Bush, «Serial Number Arithmetic», RFC 1982, DOI 10.17487/RFC1982, August 1996, <https://www.rfc-editor.org/info/rfc1982>.

[RFC3610] Whiting, D., Housley, R., and N. Ferguson, «Counter with CBC-MAC (CCM)», RFC 3610, DOI 10.17487/RFC3610, September 2003, <https://www.rfc-editor.org/info/rfc3610>.

[RFC3810] Vida, R., Ed. and L. Costa, Ed., «Multicast Listener Discovery Version 2 (MLDv2) for IPv6», RFC 3810, DOI 10.17487/RFC3810, June 2004, <https://www.rfc-editor.org/info/rfc3810>.

[RFC3971] Arkko, J., Ed., Kempf, J., Zill, B., and P. Nikander, «SEcure Neighbor Discovery (SEND)», RFC 3971, DOI 10.17487/RFC3971, March 2005, <https://www.rfc-editor.org/info/rfc3971>.

[RFC3972] Aura, T., «Cryptographically Generated Addresses (CGA)», RFC 3972, DOI 10.17487/RFC3972, March 2005, <https://www.rfc-editor.org/info/rfc3972>.

[RFC4429] Moore, N., «Optimistic Duplicate Address Detection (DAD) for IPv6», RFC 4429, DOI 10.17487/RFC4429, April 2006, <https://www.rfc-editor.org/info/rfc4429>.

[RFC4941] Narten, T., Draves, R., and S. Krishnan, «Privacy Extensions for Stateless Address Autoconfiguration in IPv6», RFC 4941, DOI 10.17487/RFC4941, September 2007, <https://www.rfc-editor.org/info/rfc4941>.

[RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, «RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks», RFC 6550, DOI 10.17487/RFC6550, March 2012, <https://www.rfc-editor.org/info/rfc6550>.

[RFC7217] Gont, F., «A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)», RFC 7217, DOI 10.17487/RFC7217, April 2014, <https://www.rfc-editor.org/info/rfc7217>.

[RFC7428] Brandt, A. and J. Buron, «Transmission of IPv6 Packets over ITU-T G.9959 Networks», RFC 7428, DOI 10.17487/RFC7428, February 2015, <https://www.rfc-editor.org/info/rfc7428>.

[RFC7668] Nieminen, J., Savolainen, T., Isomaki, M., Patil, B., Shelby, Z., and C. Gomez, «IPv6 over BLUETOOTH(R) Low Energy», RFC 7668, DOI 10.17487/RFC7668, October 2015, <https://www.rfc-editor.org/info/rfc7668>.

[RFC7934] Colitti, L., Cerf, V., Cheshire, S., and D. Schinazi, «Host Address Availability Recommendations», BCP 204, RFC 7934, DOI 10.17487/RFC7934, July 2016, <https://www.rfc-editor.org/info/rfc7934>.

[RFC8064] Gont, F., Cooper, A., Thaler, D., and W. Liu, «Recommendation on Stable IPv6 Interface Identifiers», RFC 8064, DOI 10.17487/RFC8064, February 2017, <https://www.rfc-editor.org/info/rfc8064>.

[RFC8065] Thaler, D., «Privacy Considerations for IPv6 Adaptation-Layer Mechanisms», RFC 8065, DOI 10.17487/RFC8065, February 2017, <https://www.rfc-editor.org/info/rfc8065>.

[RFC8105] Mariager, P., Petersen, J., Ed., Shelby, Z., Van de Logt, M., and D. Barthel, «Transmission of IPv6 Packets over Digital Enhanced Cordless Telecommunications (DECT) Ultra Low Energy (ULE)», RFC 8105, DOI 10.17487/RFC8105, May 2017, <https://www.rfc-editor.org/info/rfc8105>.

[RFC8163] Lynn, K., Ed., Martocci, J., Neilson, C., and S. Donaldson, «Transmission of IPv6 over Master-Slave/Token-Passing (MS/TP) Networks», RFC 8163, DOI 10.17487/RFC8163, May 2017, <https://www.rfc-editor.org/info/rfc8163>.

[RFC8279] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., Przygienda, T., and S. Aldrin, «Multicast Using Bit Index Explicit Replication (BIER)», RFC 8279, DOI 10.17487/RFC8279, November 2017, <https://www.rfc-editor.org/info/rfc8279>.

[Routing-for-RPL-Leaves] Thubert, P., Ed., «Routing for RPL Leaves», Work in Progress, draft-thubert-roll-unaware-leaves-05, May 2018.

Приложение A. Применимость и выполненные требования

Эта спецификация расширяет 6LoWPAN ND для включения порядкового номера регистрации и выполнения требования Приложения B.1, за счёт разрешения узлам перемещаться из одной сети LLN в другую. Полная спецификация для обеспечения мобильности на основе использования EARO и определённых в этом документе процедур регистрации приведена в [IPv6-Backbone-Router] (IPv6 Backbone Router). 6BBR является примером регистратора маршрутизации, который выступает как IPv6 ND через магистральный канал, объединяющий несколько LLN и сам канал в одну подсеть IPv6. Предполагаемый поток регистрации для этого случая показан на рисунке 6, где отмечена возможность совмещения любой комбинации 6LR, 6LBR, 6BBR.

6LN              6LR             6LBR            6BBR
 |                |               |                |
 |   NS(EARO)     |               |                |
 |--------------->|               |                |
 |                | Extended DAR  |                |
 |                |-------------->|                |
 |                |               |                |
 |                |               | proxy NS(EARO) |
 |                |               |--------------->|
 |                |               |                | NS(DAD)
 |                |               |                | ------>
 |                |               |                | <ожидание>
 |                |               |                |
 |                |               | proxy NA(EARO) |
 |                |               |<---------------|
 |                | Extended DAC  |                |
 |                |<--------------|                |
 |   NA(EARO)     |               |                |
 |<---------------|               |                |
 |                |               |                |

Рисунок 6. Поток (пере)регистрации.


В [Arch-for-6TiSCH] (An Architecture for IPv6 over the TSCH mode of IEEE 802.15.4) описано, как хост 6LoWPAN ND в режиме переключения каналов с разделением по времени (Time-Slotted Channel Hopping или TSCH) IEEE Std. 802.15.4 [IEEE-802-15-4] можно подключить к Internet через mesh-сеть RPL. Для этого нужно дополнить в протокол 6LoWPAN ND поддержку мобильности и доступности в защищённой управляемой сетевой среде. Этот документ определяет новые операции и выполняет требования, приведённые в Приложении B.2.

Термин LLN в этом документе применяется в широков смысле и охватывает разные типы сетей WLAN и WPAN, включая Low-Power IEEE Std. 802.11, Bluetooth, IEEE Std. 802.11ah и беспроводные mesh-сети IEEE Std. 802.15.4, чтобы выполнить требования к адресам из Приложения B.3.

Эту спецификацию может применять любой беспроводный узел для регистрации своих адресов IPv6 Addresses в Routing Registrar и получения услуг маршрутизации, таких как операции proxy ND через магистральный канал. Это соответствует требованиям Приложения B.4.

Спецификация расширена [AP-ND] для выполнения некоторых связанных с защитой требования Приложения B.5.

В [ND-Optimizations] (IPv6 Neighbor Discovery Optimizations for Wired and Wireless Networks) предполагается, что 6LoWPAN ND [RFC6775] можно расширить на другие каналы (сверх IEEE Std. 802.15.4). Метод регистрации полезен, когда применяемый для доставки групповых пакетов IPv6 метод канального уровня недостаточно эффективен в части доставки или потребления энергии в оконечных устройствах (в частности, спящих устройствах с малым потреблением энергии). Значимость такого расширения особенно заметна в случае мобильных беспроводных устройств для снижения группового трафика, связанного с IPv6 ND [RFC4861] [RFC4862] и влияющего на работу беспроводной среды [Multicast-over-IEEE802-Wireless]. Это соответствует требованиям к расширяемости из Приложения B.6.

Приложение B. Требования (не нормативные)

В этом Приложении указаны требования, обсуждавшиеся рабочей группой 6lo для обновления 6LoWPAN ND. Соответствие этих требования имеющимся спецификациям показано в таблице 8.

B.1. Требования, связанные с мобильностью

По причине нестабильности соединений LLN даже стационарные узлы 6LN могут менять точку подключения, например, может произойти смена 6LR-a на 6LR-b, но при этом может не быть возможности уведомить от этом 6LR-a. В результате 6LR-a может привлекать трафик, который он не может больше доставлять. При смене состояния каналов к 6LR нужно идентифицировать устаревшие состояния в 6LR и своевременно восстанавливать доступность, например, с помощью сигналов при обнаружении перемещения или сообщений keep-alive с периодом, соответствующим потребностям приложения.

Req-1.1

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

Req-1.2

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

Req-1.3

Устаревшие состояния должны очищаться в 6LR.

Req-1.4

Узлам 6LN следует также обеспечивать возможность регистрации своего адреса на нескольких 6LR.

B.2. Требования, связанные с протоколами маршрутизации

Точкой подключения 6LN может быть 6LR в mesh-сети LLN. Маршрутизация IPv6 в сети LLN может быть основана на протоколе RPL, определённом IETF для этой конкретной задачи. Органы стандартизации (Standards Development Organization или SDO) рассматривают и другие протоколы на основе ожидаемых характеристик сети. 6LN, подключённому через ND к 6LR, нужно указывать (1) своё участие в протоколах маршрутизации для получения связности через 6LR или (2) предполагать, что связность обеспечивает 6LR.

Указанные обновления позволяют другим спецификациям определять новые службы, такие как улучшенная проверка адресов отправителей (Source Address Validation Improvement или SAVI) (с помощью [AP-ND]), участие в качестве неосведомленного листа в протоколе маршрутизации (например, описанном в [RFC6550] протоколе RPL) (с помощью [Routing-for-RPL-Leaves]), и регистрации магистральных маршрутизаторов в качестве посредников ND в сети LLN (с помощью [IPv6-Backbone-Router]).

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

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

Архитектура BIER9 [RFC8279] предлагает оптимизированный метод поддержки групповой адресации в LLN с весьма ограниченными требованиями к состоянию маршрутизации на узлах.

Req-2.1

Метод регистрации ND следует расширить, чтобы 6LR получал инструкции об анонсировании адреса 6LN через выбранный протокол маршрутизации для обеспечения доступности адреса с помощью этого протокола.

Req-2.2

С учётом RPL следует расширить опцию ARO, используемую при регистрации, для передачи сведений, позволяющих создать сообщение DAO, как указано в параграфе 6.4 [RFC6550], в частности, рассчитать Path Sequence и, возможно, RPLInstanceID.

Req-2.3

Следует поддерживать и оптимизировать групповые операции, например, использование BIER или MPL10. Приемлемость ND для регистрации в Routing Registrar должна определяться с учётом дополнительных издержек, связанных с регистрацией групповых слушателей (Multicast Listener Discovery Version 2 или MLDv2) для IPv6 [RFC3810].

B.3. Требования, связанные с разными типами каналов со слабым питанием

Механизм 6LoWPAN ND [RFC6775] был определён с акцентом на IEEE Std.802.15.4 и, в частности, возможность вывода идентификатора из глобально уникального адреса EUI-64. В данный момент рабочая группа 6lo расширила метод сжатия заголовков 6LoWPAN HC (Header Compression) [RFC6282] на другие типы каналов, включая ITU-T G.9959 [RFC7428], Master-Slave/Token-Passing [RFC8163], Digital Enhanced Cordless Telecommunications (DECT) Ultra Low Energy [RFC8105], Near Field Communication [IPv6-over-NFC] и IEEE Std. 802.11ah [IPv6-over-802.11ah], а также сети Bluetooth [RFC7668] и PLC (Power Line Communication) [IPv6-over-PLC].

Req-3.1

Поддержку механизмов регистрации следует расширить на каналы LLN, отличающиеся от IEEE Std.802.15.4, по меньшей мере на каналы, для которых есть спецификации поддержки IPv6 (например, Wi-Fi со слабым питанием).

Req-3.2

В рамках этого расширения следует предоставлять механизм расчёта уникального идентификатора с возможностью создания адреса Link-Local, которому следует быть уникальным в рамках LLN, подключённой к 6LBR, обнаруженному ND, в каждом узле LLN.

Req-3.3

Опцию ARO в регистрации ND следует расширить для формирования подходящего уникального идентификатора.

Req-3.4

ND следует задавать формирование локального для сайта адреса в соответствии с рекомендациями [RFC7217].

B.4. Требования, связанные с операциями Proxy

Работающие в цикле устройства могут не просыпаться в ответ на поиск со стороны узла, использующего IPv6 ND и может потребоваться прокси. Кроме того, таким устройствам может требоваться 6LBR для регистрации в Routing Registrar. Методу регистрации ND следует защищать адреса работающих в цикле устройств, которые большую часть времени «спят» и не способны защитить свои адреса.

Req-4.1

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

Req-4.2

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

Req-4.3

Механизму регистрации следует разрешать длительный сон устройств (от нескольких дней до месяца.

B.5. Требования, связанные с безопасностью

Для гарантированной работы потоков 6LoWPAN ND следует избегать подмены ролей 6LR, 6LBR и Routing Registrar. После успешной регистрации узлом своего адреса 6LoWPAN ND следует обеспечивать энергосберегающие способы защиты владения адресов даже для зарегистрированных узлов, находящихся в спящем режиме. В частности, маршрутизаторам 6LR и 6LBR следует поддерживать возможность проверки происхождения последующей регистрации данного адреса от того же узла.

В LLN имеет смысл обеспечивать защиту на базе уровня L2. В процессе загрузки LLN узлы присоединяются к сети через проверку полномочий с помощью Joining Assistant (JA) или Commissioning Tool (CT). После присоединения к сети узлы взаимодействуют по защищённым каналам. Ключи для защиты L2 могут распространяться JA или CT. JA/CT может входить в LLN или находиться все LLN, но в обоих случаях нужно маршрутизировать пакеты между JA/CT и подключающимся узлом.

Req-5.1

Механизмам защиты 6LoWPAN ND следует предоставлять 6LR, 6LBR и Routing Registrar, а также 6LN в роли 6LR средства проверки подлинности и полномочий друг друга в соответствии с ролью.

Req-5.2

Механизмам защиты 6LoWPAN ND следует предоставлять 6LR и 6LBR средства проверки новых регистраций от полномочных устройств. Подключение несанкционированных узлов должно пресекаться.

Req-5.3

Механизмам защиты 6LoWPAN ND не следует сильно увеличивать размер пакетов. В частности, сообщениям NS, NA, DAR, DAC для потока (пере)регистрации не следует быть больше 80 октетов, чтобы они помещались в защищённые кадры IEEE Std.802.15.4 [IEEE-802-15-4].

Req-5.4

Повторяющимся операциям защиты 6LoWPAN ND недопустимо требовать значительной нагрузки на CPU в узлах 6LN. При использовании хэширования ключей следует выбирать механизмы легче SHA-1.

Req-5.5

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

Req-5.6

Механизмам защиты 6LoWPAN ND следует разрешать (1) вариант CCM (Counter with CBC-MAC) [RFC3610], называемый CCM*, для использования на уровнях L2 и L3, а также (2) повторное использование кода защиты, который должен присутствовать на устройстве для вышележащего уровня защиты (например, TLS). Желательна также гибкость и поддержка длинных ключей (например, 256 битов).

Req-5.7

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

Req-5.8

Маршрутизацию пакетов следует продолжать при переходе незащищённого канала в защищённое состояние.

Req-5.9

Механизмам защиты 6LoWPAN ND следует предоставлять 6LR и 6LBR средства проверки соответствия регистрации нового адреса тому же узлу 6LN, который регистрировался изначально. При несоответствии следует определять истинного владельца и отклонять или отвергать регистрацию в случае дубликата.

B.6. Требования, связанные с расширяемостью

Варианты применения автоматического считывания измерителей (Automatic Meter Reading или AMR, операции дерева сбора данных) и расширенной инфраструктуры измерений (Advanced Metering Infrastructure или AMI, двухсторонняя связь между измерителями) показывают наличие большого числа (например, 5000) узлов LLN, относящихся к одному графу RPL DODAG и подключённых к 6LBR через много (например, 15) интервалов пересылки (hop) в LLN.

Req-6.1

Механизму регистрации следует обеспечивать маршрутизатору 6LBR регистрировать тысячи устройств.

Req-6.2

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

B.7. Требования, связанные с эксплуатацией и поддержкой

Параграф 3.8 в [RFC1958] (Architectural Principles of the Internet) гласит: «По возможности избегайте опций и параметров. Любые опции и параметры следует делать настраиваемыми или согласуемыми динамически, а не вручную». Это особенно важно в LLN, где число устройств может быть большим и настройка вручную нежелательна. Возможности динамической настройки устройств LLN также могут быть ограничены сетью или источниками питания.

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

Req-7.1

Следует обеспечить модель управления, обеспечивающую доступ к 6LBR, отслеживание их нагрузки (в сравнении с возможностями) и передачу сигналов при перегрузке. Рекомендуется обеспечивать доступ к 6LBR по каналам, не относящимся к LLN.

Req-7.2

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

Req-7.3

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

Req-7.4

В случае отказа при регистрации следует предоставлять сведения об отказе, включая идентификацию узла, отклонившего регистрацию и статус в EARO.

B.8. Соответствие требованиям спецификаций

Таблица 8. Документы с требованиями.

Требование

Документ

Req-1.1

[IPv6-Backbone-Router]

Req-1.2

[RFC6775]

Req-1.3

[RFC6775]

Req-1.4

RFC 8505

Req-2.1

RFC 8505

Req-2.2

RFC 8505

Req-2.3

Req-3.1

Зависит от технологии

Req-3.2

Зависит от технологии

Req-3.3

Зависит от технологии

Req-3.4

Зависит от технологии

Req-4.1

RFC 8505

Req-4.2

RFC 8505

Req-4.3

[RFC6775]

Req-5.1

Req-5.2

[AP-ND]

Req-5.3

Req-5.4

Req-5.5

[AP-ND]

Req-5.6

[Alternative-Ellip-Curve-Reps]

Req-5.7

[AP-ND]

Req-5.8

Req-5.9

[AP-ND]

Req-6.1

RFC 8505

Req-6.2

RFC 8505

Req-7.1

Req-7.2

Req-7.3

Req-7.4

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

Честь и слава Eric Levy-Abegnoli, разработавшему инфраструктуру «защиты первого интервала» (First-Hop Security), на базе которой был реализован первый магистральный маршрутизатор. Большое спасибо Sedat Gormus, Rahul Jadhav, Tim Chown, Juergen Schoenwaelder, Chris Lonvick, Dave Thaler, Adrian Farrel, Peter Yee, Warren Kumari, Benjamin Kaduk, Mirja Kuehlewind, Ben Campbell, Eric Rescorla, Lorenzo Colitti за их вклад и рецензии. Спасибо также Thomas Watteyne за первую в мире реализацию 6LN, сыгравшую важную роль в ранних тестах 6LR, 6LBR и Backbone Router.

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

Pascal Thubert (редактор)

Cisco Systems, Inc.

Building D (Regus) 45 Allee des Ormes

Mougins — Sophia Antipolis

France

Phone: +33 4 97 23 26 34

Email: pthubert@cisco.com

Erik Nordmark

Zededa

Santa Clara, CA

United States of America

Email: nordmark@sonic.net

Samita Chakrabarti

Verizon

San Jose, CA

United States of America

Email: samitac.ietf@gmail.com

Charles E. Perkins

Futurewei

2330 Central Expressway

Santa Clara, CA 95050

United States of America

Email: charliep@computer.org


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

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

nmalykh@protokols.ru

1Internet Engineering Task Force.

2Internet Engineering Steering Group.

3Media Access Control — контроль доступа к среде.

4Source Link-Layer Address — адрес отправителя на канальном уровне.

5Least Recently Used — наиболее давно использованный.

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

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

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

9Bit Index Explicit Replication — явная репликация битовых индексов.

10Multicast Protocol for Low-Power and Lossy Networks — групповой протокол для сетей LLN.

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