RFC 9330 Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Architecture

Internet Engineering Task Force (IETF)                   B. Briscoe, Ed.
Request for Comments: 9330                                   Independent
Category: Informational                                   K. De Schepper
ISSN: 2070-1721                                          Nokia Bell Labs
                                                              M. Bagnulo
                                        Universidad Carlos III de Madrid
                                                                G. White
                                                               CableLabs
                                                            January 2023

Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Architecture

Архитектура службы Internet L4S

PDF

Аннотация

Этот документ описывает архитектуру L4S с малыми задержками и потерями в сочетании с расширяемым управлениям пропускной способностью. Основой L4S является осознание того. Что основной причиной задержки в очередях являются контроллеры перегрузки у отправителей, а не сами очереди. Архитектура L4S позволяет (но не требует) всем приложениям Internet отказаться от алгоритмов контроля перегрузок, которые ведут к существенным задержкам в очередях, и применять вместо них новый класс средств контроля перегрузок, способных определять пропускную способность с очень малыми задержками в очередях. Это достигается за счёт изменения явных уведомлений о перегрузке (Explicit Congestion Notification или ECN) из сети. Новая архитектура обеспечивает приложениям малые задержки и высокую пропускную способность.

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

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

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

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

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

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

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

Трафик из узких каналов (например, домашний доступ в Internet или Wi-Fi) все чаща приходит из приложений, которые предпочитают малые задержки — интерактивные web-приложения и службы, голосовая связь, видео со звуком и интерактивные видеосистемы, интерактивное удалённое присутствие, мгновенный обмен сообщениями, сетевые и облачные игры, удалённые рабочие столы, облачные приложения и дополненная реальность, а также дистанционное управления промышленным оборудованием и процессами с визуальным сопровождением. За последнее десятилетие или около того было много сделано для сокращения задержки путём кэширования и переноса серверов ближе к пользователям. Однако очереди остаются основным, хотя и меняющимся компонентом задержки. Например, всплески задержки до сотен миллисекунд не являются редкостью даже при использовании современного активного управления очередями (Active Queue Management или AQM) [COBALT] [DOCSIS3AQM]. Классический механизм AQM в узких местах сетей доступа обычно настраивается для буферизации пилообразности (sawteeth) отдельных потоков, что может приводить примерно к удвоению задержки во время продолжительных потоков по сравнению с ожидаемой задержкой для незагруженного пути [BufferSize]. Малые потери тоже важны, поскольку для интерактивных приложений потери транслируются в дополнительные задержки, связанные с повтором передачи.

Было показано, что при достижении в сетях доступа скоростей, распространённых сегодня в развитых странах, повышение пропускной способности канала ведёт к снижению скорости отдачи, если проблема задержки не решена. [Dukkipati06] [Rajiullah15]. Поэтому целью является служба Internet с очень малыми задержками в очередях и потерями, а также расширяемой пропускной способностью. Очень малыми считаются задержки меньше 1 мсек в среднем и меньше 2 мсек при 99-м процентиле. Сквозная задержка выше 50 мсек [Raaen14] или даже 20 мсек [NASA04] начинает казаться неестественной для требовательных интерактивных приложений. Поэтому устранение ненужной изменчивости задержек увеличивает зону охвата таких приложений (дальность, при которой использование остаётся комфортным) и/или обеспечивает дополнительный запас времени, который можно использовать для улучшения обработки. Этот документ описывает архитектуру L4S для достижения указанных целей.

Дифференцированное обслуживание (Differentiated service или Diffserv) предлагает ускоренную пересылку (Expedited Forwarding или EF) [RFC3246] для некоторых пакетов за счёт других, но даёт эффекта, когда весь (или большая часть) трафик в узких местах требует малой задержки. L4S хорошо работает в таких случаях, когда весь трафик относится к L4S, поскольку служба «отдаёт не забирая», не требует настройки и управления (регулирование трафика или контракты), связанных с предпочтением одних потоков перед другими.

Задержка в очередях время от времени ведёт к снижению производительности [Hohlfeld14]. Это происходит i) при наличии потока с достаточно большой потребностью в пропускной способности (например, TCP) наряду с другим пользовательским трафиком в узком канале или ii) когда само приложение с малой задержкой запрашивает высокую пропускную способность или адаптивное управление скоростью (например, интерактивное видео). В настоящее время повышенид производительности за счёт L4S должно быть достаточным мотивом для внедрения операторами сетей.

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

Первопричиной проблемы является присутствие стандартного контроля перегрузок (Reno [RFC5681]) или совместимых с ним вариантов (например, CUBIC [RFC8312]) в TCP и другом транспорте, таком как QUIC [RFC9000]. Далее в документе похожие на Reno механизмы контроля перегрузок называются «классическими». Эти механизмы вызывают сравнительно большие пилообразные колебания заполнения очередей. Если оператор наивно пытается сократить задержки в очереди путём настройки AQM для работы с уменьшенной очередью, классический контроль перегрузок приведёт к значительному недоиспользованию канала в ниженей части каждого зубца пилы. Продолжительность зубьев увеличивается по мере роста скорости потока (см. параграф 5.1 и [RFC3649]).

Было показано, что при замене на передающем узле классического контроля перегрузок расширяемым (Scalable) производительность упомянутых выше приложений под нагрузкой может существенно возрастать после внедрения в сети подходящего механизма AQM. В приведённом ниже примере решения с использованием ЦОД TCP (Data Center TCP или DCTCP) [RFC8257] Dual-Queue Coupled AQM [RFC9332] на канале DSL или Ethernet задержка в очереди при значительной нагрузке составляет 1-2 мсек при 99-м процентиле без потери полезной загрузки (utilization) [L4Seval22] [DualPI2Linux] (для других типов каналов ситуация описана в параграфе 6.3). Это сопоставимо со средней задержкой 5-20 мсек для классического контроля перегрузки и современных AQM, таких как Flow Queue CoDel [RFC8290], Proportional Integral controller Enhanced (PIE) [RFC8033], DOCSIS PIE [RFC8034] и 20-30 мсек при 99-м процентиле [DualPI2Linux].

Архитектура L4S предназначена для поэтапного внедрения. Можно развернуть службу L4S в узком месте одновременно с имеющимися службами best efforts [DualPI2Linux], чтобы неизмененные приложения могли начать использование службы сразу же по обновлении сетевого стека отправителя. В сетях доступа обычно узким место является одиночный канал для каждого сайт (дом, небольшое предприятие или мобильное устройство), поэтому развёртывание службы на одной или обеих сторонах такого канала должно обеспечить почти все преимущества в соответствующем направлении. Для TCP [ACCECN] отправитель проверяет предоставление получателем более точных откликов, а для иного транспорта, такого как QUIC [RFC9000] и DCCP3 [RFC4340] подходят любые получатели.

В этом документе представлена архитектура L4S, состоящая из 3 компонентов: изоляция в сети трафика L4S от классического, свойства протокола, позволяющие элементам сети идентифицировать трафик L4S и поддержка контроля перегрузок L4S на хосте. Протокол определён отдельно в [RFC9331] как экспериментальное изменение явных уведомлений о перегрузке (ECN). Этот документ описывает и обосновывает составные части архитектуры и их взаимодействия для обеспечения малой задержки и потерть, а также расширяемых услуг Internet. Кроме того, в документе подробно рассматривается поэтапное развёртывание, упомянутое здесь.

1.1. Структура документа

Этот документ описывает архитектуру L4S в три приёма. В разделе 2 приведён краткий обзор идеи на высоком уровне и описаны основные компоненты с минимальным обоснованием. Это предназначено лишь для организации контекста определения терминов в разделе 3 и разъяснения структуры оставшейся части документа. Раздел 4 содержит более подробное описание каждого компонента с обоснованиями, но по-прежнему описывает архитектуру, а не способы реализации. В разделе 5 объясняется выбор каждого элемента решения () и отличия от других подходов ().

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

2. Обзор архитектуры L4S

Ниже очерчены три основных компонента архитектуры L4S: 1) расширяемые (Scalable) элементы контроля перегрузок на передающем хосте, 2) механизм AQM в узких местах сети (bottleneck), 3) протокол взаимодействия.

Сначала нужно уяснить главное — малые задержки не обеспечиваются сетью, а являются результатом осторожного поведения контроллеров перегрузки с масштабированием, используемых отправителями L4S. Сеть играет определённую роль в первую очередь для изоляции трафика L4S с малыми задержками от очередей с большой задержкой, требуемых для имеющегося трафика с «классическим» поведением. Сеть также изменяет способ сигнализации транспорту о росте очередей. Сеть использует протокол ECN, но сигнализирует о начале роста очереди незамедлительно без задержки, связанной со сглаживанием, характерной для Classic AQM. Поскольку поддержка ECN важна для L4S, отправители используют поле ECN как протокол, позволяющий сети отличать пакеты L4S от классических.

  1. Хост

    Расширяемые элементы контроля перегрузок уже имеются. Они решают задачи масштабирования для классических элементов контроля перегрузок, таких как Reno или CUBIC. Поскольку скорости потоков выросли с момента разработки контроля перегрузок TCP в 1988 г., для достаточно продолжительных потоков на восстановление (в результате маркировки ECN или потери пакетов) затрачиваются сотни круговых обходов (round trip), как показано в примерах параграфа 5.1 и в [RFC3649], и их число продолжает расти. Поэтому контроль за постановкой в очередь и её использованием ослабляется и малейшие нарушения (например, появление новых потоков) препятствуют достижению высокой скорости.

    При расширяемом контроле перегрузок среднее время от одного сигнала перегрузки до следующего (время восстановления) инвариантно к изменению скорости потока при сохранении прочих условий. Это обеспечивает одинаковый уровень контроля за постановкой в очередь и её использованием независимо от скорости потока, а также гарантирует устойчивость к нарушениям при высокой скорости потока. Наиболее распространенным расширяемым контролем перегрузок (в контролируемых средах) является протокол DCTCP [RFC8257], реализованный и развёрнутый в серверных версиях Windows (Server Edition), начиная с 2012 г., а также в Linux и FreeBSD. Несмотря на хорошую работу функций DCTCP в широком диапазоне значений времени кругового обхода (round-trip time или RTT), в большинстве реализацию отсутствуют некоторые функции защиты, которые требуются для работы за пределами контролируемых сред, таких как ЦОД (см. ). Поэтому нужно реализовать расширяемые элементы контроля перегрузок в TCP и других транспортных протоколах (QUIC, SCTP4, RTP/RTCP, RMCAT5 и т. п.). За время подготовки и публикации этого документа были реализованы расширяемые элементы контроля перегрузок Prague для TCP и QUIC [PRAGUE-CC] [PragueLinux], вариант L4S контроллера RMCAT SCReAM [SCReAM-L4S] и связанная с L4S ECN часть BBRv26 [BBRv2] для транспорта TCP и QUIC.

  2. Сеть

    Трафик L4S нужно изолировать от задержки в очередях классического трафика. Одним из путей решения является поддержка одной очереди на поток приложения (FQ), например, FQ-CoDel [RFC8290]. Однако достаточно использовать лишь две очереди и не требовать проверки транспортных заголовков в сети, что возможно не всегда (см. ). При наличии лишь двух очередей может показаться невозможным узнать, какая пропускная способность нужно запланировать для каждой очереди, без определения числа потоков, использующих каждую очередь в каждый момент. И нежелательно произвольно делить пропускную способность сети доступа на две части. Для решения этой задачи с минимальными сложностями был разработан механизм Dual-Queue Coupled AQM. Он действует как полупроницаемая мембрана, которая разделяет задержку, но не пропускную способность. Таким образом, две очереди предназначены для перехода от классического поведения к L4S, а не для приоритизации полосы.

    В разделе 4 дано высокоуровневое объяснение работы вариантов FQ и DualQ для L4S, а в [RFC9332] дано полное объяснение модели DualQ Coupled AQM. Конкретный алгоритм маркировки не задан для L4S AQM и в приложениях к [RFC9332] приведены ненормативные примеры, которые были реализованы и оценены, а также даны рекомендации для принятых по умолчанию значений параметров. Предполагается, что эксперименты с L4S улучшат понимание настройки параметров и выбора алгоритмов маркировки.

  3. Протокол

    Передающий хост должен отмечать пакеты L4S и классические разными идентификаторами, чтобы сеть могла классифицировать их для разной обработки. В спецификации идентификатора L4S [RFC9331] сделано заключение, что все варианты требуют компромиссов, но коды ECT(1) и CE7 в поле ECN представляют работоспособное решение. Как уже отмечено, сеть также использует ECN для незамедлительной сигнализации транспорту о самом начале роста очереди.

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

Classic Congestion Control — классический контроль перегрузок

Поведение контроля перегрузок, способное сосуществовать со стандартным Reno [RFC5681] без существенного негативного влияния на скорость потока [RFC5033]. Проблема расширяемости классического контроля перегрузок рассмотрена на примерах в параграфе и [RFC3649].

Scalable Congestion Control — расширяемый контроль перегрузок

Контроль перегрузок, где среднее время от одного сигнала насыщения до следующего (время восстановления) не зависит от скорости потока при прочих равных условиях. Например, DCTCP усредняет 2 сигнала пересылки за интервал кругового обхода, независимо от скорости потока, как и другие недавно разработанные расширяемые механизмы контроля перегрузок, такие как Relentless TCP [RELENTLESS], Prague для TCP и QUIC [PRAGUE-CC] [PragueLinux], BBRv2 [BBRv2] [BBR-CC], L4S-вариант SCReAM для потоков в реальном масштабе времени [SCReAM-L4S] [RFC8298]. Дополнительные сведения можно найти в параграфе 4.3 [RFC9331].

Classic Service — классический сервис

Классический сервис предназначен для всех вариантов поведения контроля перегрузок, сосуществующих с Reno [RFC5681] (например, сам Reno, CUBIC [RFC8312], Compound [CTCP], TFRC [RFC5348]). «Классической очередью» называется очередь, обеспечивающая классический сервис.

Low Latency, Low Loss, and Scalable throughput (L4S) service — сервис с малыми задержками и потерями, а также расширяемой пропускной способностью

Сервис L4S предназначен для трафика с расширяемыми алгоритмами контроля перегрузок, такими как Prague [PRAGUE-CC], который был выведен из DCTCP [RFC8257]. Сервис L4S предназначен для более широкого класса трафика, нежели просто Prague, и позволяет развивать набор средств контроля перегрузок, аналогичных Prague, таких как отмечены выше (Relentless, SCReAM и т. п.). Очередью L4S называется очередь, обеспечивающая услуги L4S.
Атрибуты Classic и L4S могут применяться к очередям (queue), кодам (codepoint), идентификаторам (identifier), классификации (classification), пакетам (packet), потокам (flow). Например термин «пакет L4S» относится к пакету с идентификатором L4S, переданному из системы контроля перегрузок L4S.
Оба типа сервиса (Classic и L4S) могут справляться с некоторой долей неотзывчивого и слабо отзывающегося трафика, но в случае L4S скорость должна быть достаточно плавной или низкой, чтобы не возникала очередь (например, DNS, VoIP, синхронизация игр и т. п.).

Reno-friendly — совместимость с Reno

Часть классического трафика, совместимая со стандартным контролем перегрузок Reno, заданным для TCP в [RFC5681]. Спецификация TFRC [RFC5348] косвенно подразумевает, что дружественностью (совместимостью) считается «нахождение обычно в пределах двухкратного отличия скорости передачи потока TCP при одинаковых условиях». Термин Reno-friendly используется здесь вместо TCP-friendly, поскольку последнее выражение стало неточным, так как протокол TCP сейчас использует много разных вариантов контроля перегрузок, а Reno применяется не только в TCP, но и в других транспортных протоколах (например, QUIC [RFC9000]).

Classic ECN — классический механизм явных уведомлений о перегрузке

Исходный механизм явных уведомлений о перегрузке (ECN) [RFC3168] требует считать сигналы ECN эквивалентом отбрасывания пакетов как при генерации в сети, так и отвечающим хостом.
Для L4S имена кодов 2-битового поля IP-ECN не отличаются от заданных в спецификации ECN [RFC3168] — Not-ECT, ECT(0), ECT(1), CE, где ECT указывает поддержку ECN в транспорте (ECN-Capable Transport), а CE — возникновение перегрузки (Congestion Experienced). Пакеты с кодом CE называют промаркированными ECN (ECN-marked), а иногда — просто маркированными, если наличие ECN ясно из контекста.

Site — сайт

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

Traffic Policing — надзор за трафиком

Ограничение трафика путём отбрасывания пакетов или их перевода в более низкий класс обслуживания (в отличие от внесения задержки, называемого формированием или формовкой трафика — traffic shaping). Надзор может включать ограничение скорости и/или размера всплесков (пиков). Надзор, сосредоточенный на ограничении очередей, а не средней скорости потока, в этом документе называется надзором за перегрузкой (congestion policing), задержкой (latency policing), всплесками (burst policing) или защитой очередей (queue protection). В иных случаях применяется термин «надзор за скоростью (rate policing).

4. Компоненты архитектуры L4S

Элементы архитектуры L4S описаны в следующих 3 параграфах.

4.1. Протокольные механизмы

Архитектура L4S включает a) отмену прежнего использования идентификатора, b) новое назначение того же идентификатора, c) дополнение необязательных идентификаторов, как описано ниже.

  1. Важным аспектом расширяемого контроля перегрузок является использование явных сигналов о перегрузке. В классическом ECN [RFC3168] требуется считать сигнал ECN эквивалентом отбрасывания независимо от генерации сигнала в сети или на отвечающем хосте. L4S требует от сетей и хостов поддерживать более чёткую трактовку каждого сигнала ECN, который менее важен, чем отбласывание. Поэтому сигнала L4S:

    • могут быть более частыми;

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

Для поддержки L4S, пришлось изменить стандартную спецификацию ECN [RFC3168], чтобы пакеты L4S могли передаваться не только как эквивалент отбрасывания. [RFC8311] является обновлением стандарта, смягчающим требования [RFC3168] (и некоторых других Standards Track RFC) и обеспечивающим возможность экспериментальных изменений, предложенных для L4S. Кроме того, ког ECT(1), ранее считавшийся экспериментальным ECN nonce [RFC3540], в [RFC8311] перенесён в число устаревших (historic), чтобы код можно было использовать заново.

  1. В [RFC9331] указано, что ECT(1) служит идентификатором для пакетов L4S при отдельной от классических пакетов обработке. Это соответствует требованиям по указанию альтернативной обработки ECN в [RFC4774].

    Ко CE служит для индикации возникновения перегрузки в обоих случаях (L4S и Classic). Это вызывает опасение, что прежний механизм Classic AQM на пути может пометить некоторые пакеты ECT(0) как CE и затем они будут ошибочно отнесены к очереди L4S. В Приложении B к [RFC9331] разъяснено, что должны совпасть 5 маловероятных условий, чтобы возникли нежелательные эффекты, которые и в этом случае приведут лишь к пренебрежимо малой вероятности ненужного повтора передачи.

  2. Оператор сети может захотеть включать определённый не отвечающий трафик, не относящийся к L4S, в очередь L4S, если он представляется достаточно сглаженным и низкоскоростным, чтобы не создавать очередь (например, VoIP, дейтаграммы синхронизации сетевых игр с малой скоростью, DNS, LDAP8 и т. п.). Такой трафик требуется помечать конкретными идентификаторами, например кодом Diffserv для малой задержки, таким как EF [RFC3246], NQB9 [NQB-PHB], или своим идентификатором оператора.

4.2. Сетевые компоненты

Архитектура L4S нацелена на обеспечение малой задержки без необходимости выполнять в элементах сети операции на уровне отдельных потоков. Тем не менее, архитектура не отвергает решений по потокам. Ниже описаны известные схемы: a) DualQ Coupled AQM с L4S AQM в одной очереди, связанным с Classic AQM в другой, b) очереди по потокам с экземпляром Classic и L4S AQM в каждой очереди, c) двойные очереди с AQM для каждого потока, но без очередей по потокам.

  1. Dual-Queue Coupled AQM () обеспечивает упомянутую выше полупроницаемую мембрану.

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

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

После этого планировщик может обслуживать очередь L4S с приоритетом (вход с высшим приоритетом указан 1 на рисунке), поскольку объём трафик L4S недостаточно велик для полного использования предоставленного приоритета. Поэтому:

    • для кратковременной изоляции задержек (доли RTT) приоритизация очереди L4S защищает малую задержку, позволяя всплескам (пикам) быстро рассеиваться;

    • для объединения пропускной способности в более продолжительных интервалах времени (RTT и больше) классическая очередь создаёт равное и противонаправленное давление на трафик L4S, чтобы ни один из типов не получил преимущества при разделении пропускной способности; противоречие между приоритизацией L4S и связыванием с маркировкой из Classic AQM обеспечивает приблизительную беспристрастность по отношению к потокам.

Для предотвращения приоритизации трафика L4S, на некоторое время блокирующей классическую очередь в отдельных реализациях, рекомендуется задавать приоритет по условию, а не строго (см. Приложение A к спецификации DualQ [RFC9332]).

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

Если какая-либо из очередей становится постоянно перегруженной, происходит отбрасывание некоторых пакетов с поддержкой ECN, как рекомендует раздел 7 спецификации ECN [RFC3168] и параграф 4.2.1 рекомендация для AQM [RFC7567]. Компромиссы разных подходов обсуждаются в параграфе 4.2.3 спецификации DualQ [RFC9332] (на рисунке не показано).

Механизм Dual-Queue Coupled AQM задан максимально обобщенно [RFC9332] без указания конкретных AQM в очередях, чтобы разработчики могли реализовать разные идеи. Информационные приложения к спецификации содержат примеры псевдокода для двух разных подходов AQM — DualPI2 (произносится как Dual PI Squared) [DualPI2Linux] с использованием PI2-варианта PIE и не требующий настройки (zero-config) вариант RED, называемый Curvy RED. DualQ Coupled AQM на основе PIE был также задан и реализован для Low Latency DOCSIS [DOCSIS3.1].

  1.                (3)                  (2)
                   .-------^------..------------^------------------.
     ,-(1)------.                               _____
    ; _________  :            L4S  -------.    |     |
    :|Расшир.  | :               _\      ||__\_|марк.|
    :|отправит.| :  __________  / /      ||  / |_____|\   ___________
    :|_________|\; |          |/   -------'       ^    \1|Планировщик|
     `----------'\_|Классифик.|        Связывание :     \|приоритета |_\
      _________  / |  IP-ECN  |                   :     /|по условию | /
     |Классич. |/  |__________|\   -------.     __:__  / |___________|
     |отправит.|                \_\ || | ||__\_|марк/|/
     |_________|                  / || | ||  / |отбр.|
                           Classic -------'    |_____|
    
    
    (1) Передающий хост с масштабированием
    (2) Изоляция в разных сетевых очередях
    (3) Протокол идентификации пакетов

    Рисунок . Компоненты решения L4S DualQ Coupled AQM.


    Очереди по потокам и AQM. Для L4S можно использовать планировщик с очередями по потокам, такой как FQ-CoDel или FQ-PIE. Например, в каждой очереди системы FQ-CoDel, а также CoDel AQM обычно имеется опция маркировки ECN с незамедлительным (не сглаженным) низким порогом для поддержки использования в ЦОД (см. параграф 5.2.7 спецификации FQ-CoDel [RFC8290]). В Linux это было изменено так, что низкий порог может применяться исключительно к пакетам ECT(1) [FQ_CoDel_Thresh]. Затем при наличии в очереди потока потока пакетов Not-ECT или ECT(0) применяется Classic AQM (например, CoDel), а если в очереди имеется поток пакетов ECT(1), применяется более низкий порог (обычно доли миллисекунды). Кроме того пакеты ECT(0) и Not-ECT могут выделяться в отдельную от пакетов ECT(1) и CE очередь, чтобы избежать смешивания при использовании ими общего идентификатора потока (например, в VPN).

  2. Двойные очереди с AQM по потокам. Следует также обеспечивать возможность использовать двойные очереди для изоляции, но с маркировкой по потокам для управления их скоростями (вместо связанной маркировки по потокам Dual-Queue Coupled AQM). Одна из двух очередей будет изолировать пакеты L4S, которые помечались бы кодом ECN. Скорости потоков можно регулировать с помощью маркировки в конкретном потоке. Целью маркировки может быть дифференциация (например, [Nadas20], где требуется передача дополнительных сигнальных значений по потокам) или выравнивание скоростей потоков (возможно, аналогично Approx Fair CoDel [AFCD] [CODEL-APPROX-FAIR], но с двумя очередями).

    Отметим, что при использовании DualQ без указания маркировки по очередям или потокам это означает AQM с двойной очередью и маркировкой по очередям.

4.3. Механизмы хостов

Архитектура L4S включает на конечных хостах 2 механизма, указанных ниже.

  1. Расширяемый контроль перегрузок у отправителя. В разделе 2 для расширяемого контроля перегрузок задано поведение расширяемого контроля перегрузок, при котором среднее время от одного сигнала перегрузки до следующего (время восстановления) не зависит от скорости потока при прочих равных условиях. Наиболее распространенным примером является DCTCP, описанный в информационном документе [RFC8257] для протокола, применяемого в настоящее время в контролируемых средах. Составлен список улучшений безопасности и производительности для расширяемого контроля перегрузок, применимого в общедоступной сети Internet (см. Приложение A. Обоснование требований Prague L4S к [RFC9331]). Часть требований, с которыми может быть связан ущерб для других, перечислена в нормативном разделе 4 [RFC9331]. TCP Prague [PRAGUE-CC] реализован в Linux в качестве образца для выполнения этих требований [PragueLinux].

    Транспортные протоколы, отличные от TCP, используют различные элементы контроля перегрузок, разработанные для совместимости с Reno. Прежде, чем они смогут использовать услуги L4S, эти механизмы нужно обновить для реализации масштабируемых откликов на перегрузку, которые используют код ECT(1). Рассматриваются расширяемые варианты для недавних транспортных протоколов (например, QUIC), а связанная с L4S ECN часть of BBRv2 [BBRv2] [BBR-CC] является расширяемым контролем перегрузок, предназначенным, среди прочего, для транспорта TCP и QUIC. Реализован также L4S-вариант контроллера RMCAT SCReAM [RFC8298] для потоков, доставляемых по протоколу RTP [SCReAM-L4S].

    В параграфе 4.3 спецификации L4S ECN [RFC9331] расширяемый контроль перегрузок определён более подробно и заданы требования для L4S Scalable congestion control.

  2. Отклики ECN в некоторых транспортных протоколах уже достаточно детализированы для L4S (в частности, DCCP [RFC4340] и QUIC [RFC9000]), но другие нужно обновлять или они находятся в процесс обновления.

    • Для TCP протокол обратной связи ECN использует допущение из Classic ECN [RFC3168] об эквивалентности маркировки ECN отбрасыванию пакета, что делает его непригодным для Scalable TCP. Поэтому реализации получателей TCP нужно обновлять [RFC7560]. Работы по стандартизации и реализации более точных откликов ECN для TCP (AccECN) ещё не завершены [ACCECN] [PragueLinux].

    • Отклики ECN лишь очерчены в приложениях к признанной устаревшей второй спецификации SCTP [RFC4960], а более полная спецификация предложена в давно просроченном документе [ECN-SCTP]. Нужно разработать и внедрить новое решение для поддержки L4S в SCTP.

    • Для RTP отклики ECN заданы в [RFC6679], а [RFC8888] предлагает последние улучшения Standards Track.

5. Обоснование

5.1. Почему эти компоненты выбраны основными?

Явные сигналы о перегрузке (протокол)

Явные сигналы о перегрузке являются важнейшей частью L4S. Использование отбрасывания в качестве сигнала перегрузки создаёт напряжённость, поскольку отбрасывание является одновременно ущербом (чем меньше, тем лучше) и полезным сигналом (чем больше, тем лучше).
  • Явные сигналы о перегрузке можно использовать неоднократно в интервале кругового обхода для обеспечения жёсткого контроля без нанесения вреда. При высокой нагрузке могут передаваться ещё более явные сигналы, чтобы очередь оставалась короткой при любой нагрузке. В отличие от этого, механизмы Classic AQM должны часто отбрасывать пакеты при высокой нагрузке для сохранения короткой очереди. При использовании ECN в контроле перегрузки L4S сокращается размер зубьев пилы и возврат к рабочей точке происходит чаще и можно не заботиться о росте числа сигналов из-за увеличения числа зубьев. Сокращение амплитуды зубьев соответствует меньшему интервалу между пустой очередью и очень низким порогом маркировки (~1 мсек в общедоступной сети Internet), поэтому вариации задержки будут очень малы без риска недогрузки каналов.
  • Явные сигналы о перегрузке могут передаваться незамедлительно для отслеживания флуктуаций очереди. L4S переносит сглаживание от сетевых устройств к хостам. Сеть не знает RTT для каких-либо потоков, поэтому при сглаживании в сети (как в классическом подходе) предполагается худшее значение RTT, поскольку иначе потоки с большим RTT становятся нестабильными. Это задерживает классические сигналы перегрузки на 100-200 мсек. В отличие от сети, хосты знают своё значение RTT, поэтому в модели L4S хост может сглаживать каждой поток по своему значению RTT, внося при этом лишь незначительную задержку (обычно несколько миллисекунд). Хост может даже не вносить задержку на сглаживание, если это приемлемо (например, при запуске потока).
Оба указанных выше пункта неосуществимы, если явная сигнализация о перегрузке считается «эквивалентом отбрасывания» (как в Classic ECN [RFC3168]), поскольку отбрасывание является не только сигналом, но и «повреждением». Поэтому отбрасывание не может быть очень частым и не может происходить сразу же, иначе пакеты будут слишком часто отбрасываться просто из-за кратковременных флуктуаций в очереди. В результате в L4S AQM очередь L4S использует новый вариант L4S ECN, который не эквивалентен отбрасыванию (параграф 5.2 в спецификации L4S ECN [RFC9331]), тогда как в классических очередях применяется Classic ECN [RFC3168] или отбрасывание, которые по-прежнему эквивалентны друг другу.
До стандартизации Classic ECN были различные предложения придать маркировке ECN значение, отличное от отбрасывания. Однако не было веских причин принимать эти предложения, поэтому был выбран вариант эквивалентности. В [RFC3168] указано:
Среда, где все конечные узлы поддерживают ECN, позволяет разработать новые критерии установки маркера CE и механизмы контроля перегрузки для реакции конечных узлов на CE-пакеты. Однако рассмотрение этого вопроса выходит за рамки данного документа.

Изоляция очередей (сеть)

Контроль перегрузки L4S сохраняет задержку в очереди достаточно низкой, тогда как классическому контролю нужна задержка в очереди порядка RTT, чтобы избежать недогрузки канала. Одна очередь не может иметь двух размеров, поэтому трафик L4S нужно выделять в отдельную очередь (например, DualQ) или очереди (скажем, FQ).

Связанные уведомления о перегрузке

Связывание уведомлений о перегрузке между двумя очередями, как в DualQ Coupled AQM, не требуется, но обеспечивает простой способ позволить отправителям определять свою скорость пакет за пакетом, вместо её переопределения сетевым планировщиком. Альтернативой является управление скоростью каждого прикладного потока сетевым планировщиком (см. обсуждение в параграфе ).

Идентификатор пакета L4S (протокол)

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

Расширяемые уведомления о перегрузке

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

Низкие потери

Задержки не являются единственной проблемой, решаемой L4S. Связанная с малыми потерями (Low Loss) часть имени указывает, что L4S обычно обеспечивает отсутствие потерь при перегрузке благодаря применению ECN. Иначе сами потери вызывали бы задержку из-за повтора передачи, особенно для коротких потоков [RFC2884].

Расширяемая пропускная способность

Связанная с расширяемостью пропускной способности (Scalable throughput) часть имени означает расширяемые элементы контроля перегрузки по потокам с неограниченным расширением, что позволяет избежать проблем, неизбежных при использовании алгоритмов Reno-friendly [RFC3649]. При разработке в 1988 г. механизмов предотвращения перегрузки TCP было известно, что это не будет расширяться до случаев с большим произведением пропускной способности на загрузку (bandwidth-delay product, см. примечание 6 в [TCP-CA]). Сегодня скорости потоков в широкополосных каналах WAN уже вышли за пределы расширяемости контроля перегрузок Classic Reno, поэтому были развёрнуты более расширяемые варианты TCP CUBIC [RFC8312] и Compound [CTCP]. Однако они тоже уже приближаются к своим пределам масштабируемости.
Рассмотрим в качестве примера сценарий с максимальным RTT 30 мсек на пике каждого зуба пилы. Если скорость передачи пакетов Reno увеличивается в 8 раз (с 1250 до 10000 пакет/с или с 15 до 120 Мбит/с при размере пакетов 1500 байт), время восстановления после перегрузки также растёт в 8 раз от 422 мсек до 3,38 сек. Очевидно, что контролю перегрузки потребуется на восстановление после каждого факта перегрузки несколько секунд. Механизм CUBIC [RFC8312] был разработан для увеличения масштабируемости, но он приближается к своему пределу. При том же максимальном RTT 30 мсек и скорости 120 Мбит/с CUBIC остаётся в режиме полной совместимости с Reno и восстановление займёт около 4,3 сек. Однако при следующем увеличении скорости в 8 раз до 960 Мбит/с алгоритм переходит в режим CUBIC со временем восстановления 12,2 сек. С этого момента каждое следующее увеличение скорости в 8 раз удваивает время восстановления CUBIC (кубический корень от 8 равен 2), например, при скорости 7,68 Гбит/с время восстановления будет 24,3 сек. При расширяемом контроле перегрузок, таком как DCTCP или Prague выдаётся в среднем 2 сигнала на интервал кругового обхода независимо от скорости потока, что делает динамический контроль очень строгим.
Представление о скорости отдельного потока загрузки (download) на момент написания документа (2021 г.) можно составить по данным [BDPdata] — усреднённая глобально средняя скорость стационарного доступа в 2020 г. составляла 103 Мбит/с, а среднее базовое значение RTT для CDN10 — от 25 до 34 мсек (2019 г.). Усреднение по странам выполнялось с учётом числа пользователей Internet (данные, собранные по миру, имеют разную достоверность, но в документе применена двойная проверка и результаты хорошо согласуются с другим источником). Таким образом, одиночному потоку CUBIC в лучшем случае потребовалось бы около 200 интервалов RTT (5 секунд) для восстановления после каждого спада пилы, если поток был достаточно долгим. Это указано как «лучший случай», поскольку предполагается, что все применяют AQM, тогда как на деле большинство пользователей имеет (возможно раздутый) буфер tail-drop. В этом случае (tail-drop) вероятное среднее время восстановления было бы не меньше 20 сек. (4 раза по 5 сек), поскольку RTT под нагрузкой будет по меньшей мере вдвое превышать значение для AQM, а время восстановления потоков Reno-friendly пропорционально квадрату RTT.
Хотя работа по масштабированию средств контроля перегрузок обычно начинается с транспорта TCP, сказанное выше относится и к другому транспорту (например, SCTP и QUIC) и менее гибким алгоритмам (например, RMCAT), которые обычно основаны на похожих разработках.

5.2. Что L4S добавляет к имеющимся подходам

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

Diffserv

Diffserv решает задачу выделения пропускной способности для важного трафика, а также сокращения задержки в очередях для трафика, чувствительного к задержкам. L4S решает лишь задачу сокращения задержки в очереди. Потребность в Diffserv сохраняется там, где нужно отдать приоритет важному трафику (например, из коммерческих соображений или для защиты важного инфраструктурного трафика) [L4S-DIFFSERV]. L4S может обеспечивать малые задержки для всего трафика в каждом классе Diffserv (включая случай наличия лишь принятого по умолчанию класса Diffserv).
Diffserv может сокращать задержки лишь для малой части трафика в узком месте канала. Как уже сказано, этот метод влияет лишь на часть приложений, которым нужны малые задержки, работающих одновременно на сайте (например, дома, в небольшом офисе или на мобильном устройстве). L4S, напротив, работает для всего трафика и не вносит издержек управления (правила или соглашения для трафика), связанных с предпочтением для отдельных пакетов по отношению к другим. Это даёт L4S больше шансов на сквозное внедрение.
В частности, если сеть не доверяет конечным системам в части приоритизации пакетов, она самостоятельно задаёт для пакетов класс Diffserv. Однако доступные в таких сетях методы, такие как проверка идентификаторов потоков или более глубокий анализ сигнатур приложений, не всегда совмещаются с шифрованием на уровне выше IP [RFC8404]. В таких случаях пользователям приходится выбирать между конфиденциальностью и качеством обслуживания (Quality of Service или QoS).
Как и в Diffserv, идентификатор L4S размещается в заголовке IP. Но, в отличие от Diffserv, идентификатор L4S не указывает желание или необходимость некого уровня обслуживания. Скорее, этот метод обещает некое поведение (расширяемые отклики на перегрузку), которое сеть может при необходимости проверить объективно. Это связано с тем, что малые задержки зависят от коллективного поведения хостов, а приоритизация пропускной способности — от сети.

Современные механизмы AQM

Механизмы AQM для классического трафика, такие как PIE и FQ-CoDel, значительно снижают задержку в очередях по сравнению с работой без AQM. L4S дополняет эти AQM и ему не следует препятствовать как можно более широкому развёртыванию этих механизмов. Тем не менее, AQM сами по себе не могут существенно сократить задержку в очередях без значительного снижения уровня использования канала, поскольку корнем проблемы является хост, где классические методы контроля перегрузок вносят большие пилообразные вариации скорости. L4S разрешает этот конфликт между задержкой и загрузкой канала, позволяя хосту минимизировать амплитуду зубьев пилы. Classic AQM с одной очередью недостаточно, чтобы хосты могли использовать меньшую амплитуду пилы, по двум причинам: i) сокращение не будет снижать задержку в AQM, разработанном для большей амплитуды классической пилы, поскольку очередь в каждый момент может иметь лишь один размер и ii) сокращение амплитуды предполагает повышение частоты зубьев, поэтому потоки L4S будут вызывать в Classic AQM частую маркировку ECN, которая будет выглядеть как очень значительная перегрузка классических потоков и в результате значительно снижать их скорость ().

Очереди и маркировка по потокам

Подходя на уровне потоков, такие как FQ-CoDel и Approx Fair CoDel [AFCD], не совместимы с L4S. Однако очереди на уровне потока самой по себе недостаточно, она лишь изолирует один поток от других, но не от себя. В реализации на уровне потоков требуется добавлять расширяемый контроль перегрузок, что уже сделано в Linux FQ-CoDel (см. параграф 5.2.7 в [RFC8290] и [FQ_CoDel_Thresh]). Без такого простого изменения AQM на уровне потоков, такие как FQ-CoDel, не способны поддерживать приложения которым нужны сразу высокая пропускная способность и малая задержка, например, основанное на видео управление удалёнными процедурами или интерактивное видео на основе облака11.
Хотя методы, работающие на уровне потока, не совместимы с L4S, важно иметь альтернативу DualQ, поскольку обработка сквозных потоков (L4) в сети (L3 и L2) препятствует некоторым сквозным функциям.
  1. Варианты L4S на уровне потоков, подобные FQ-CoDel, не совместимы с полным сквозным шифрованием идентификаторов транспортного уровня для приватности и конфиденциальности (например, IPsec или шифрованные туннели VPN в отличие от DTLS через UDP), поскольку им нужно заглядывать в пакеты для получения идентификаторов сквозных транспортных потоков.
    В отличие от этого DualQ L4S не требует заглядывать в пакет глубже уровня IP. Пока операторы применяют подход DualQ, пользователи получают очень малые задержки при сквозном шифрованием [RFC8404].
  2. При использовании L4S на уровне потоков сеть берет на себя контроль относительной скорости каждого прикладного потока. Некоторые видят в этом преимущество, поскольку сеть не позволяет отдельному потоку работать быстрей других, другие считают неотъемлемым свойством Internet возможность каждого потока контролировать свою скорость, принимая во внимание другие потоки через сигналы перегрузки. Последние считают, что это позволяет развивать приложения, заинтересованные в скорости, например, i) видеопотоки с переменной скоростью, которая выделяется примерно поровну для каждого вместо принудительного постоянного значения, или ii) сквозная «сборка мусора» [RFC6817] с использованием меньшей (чем поровну) пропускной способности [LEDBAT_AQM].
    Архитектура L4S не требует от IETF предпочтения одного подхода перед другими, поскольку поддерживает оба, позволяя «рынку» принять решение. Тем не менее, в духе принципа «делать что-то одно и делать это хорошо» [McIlroy78] вариант DualQ обеспечивает малые задержки, не предрешая вопрос управления скоростью потоков, которое при желании может быть добавлено отдельно. В отличие от планирования, «регулировщик» (policer) будет разрешать приложению контролировать скорость до определённого момента, но сеть все равно может установить точку вмешательства для предотвращения захвата ресурсов отдельным потоком.

ABE

L4S является не альтернативой, а дополнением к ABE (Alternative Back-off ECN), обеспечивающим меньшую задержку в очереди. ABE [RFC8511] меняет поведения хоста при откликах на маркеры ECN для более полного использования канала связи и обеспечения потокам ECN большей пропускной способности. ABE использует ECT(0) и предполагает, в сети одинаковую трактовку ECN и отбрасывания, используя меньшую задержку в очередях, которую могут обеспечить методы AQM. Однако, как отмечено выше, AQM все равно не могут существенно сократить задержки без потери загрузки канала (для не связанных с ABE потоков).

BBR

BBR12 [BBR-CC] контролирует сквозную задержку в очередях без какой-либо специальной логики в сети (такой как AQM) и поэтому может работать практически на любом пути. BBR сохраняет достаточно малую задержку в очередях, но иногда не столь малую, как в современных AQM, таких как PIE или FQ-CoDel, и уж точно не такую малую, как при использовании L4S. Задержка не остаётся малой постоянно из-за регулярных всплесков при зондировании пропускной способности и энергичной фазы запуска потока.
L4S дополняет BBR. В BBRv2 может применяться L4S ECN (при доступности) и расширяемый контроль перегрузок L4S в ответ на сигналы ECN из точек пути [BBRv2]. Сигналы L4S ECN дополняют основанные на задержке аспекты контроля перегрузки BBR явной индикацией, которую хосты могут использовать для схождения на беспристрастной скорости и сохранения задержки ниже установленной сетью цели. Без L4S ECN оба эти аспекта требуется предполагать или оценивать.

6. Применимость

6.1. Приложения

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

  • игры, включая облачные;

  • VoIP;

  • видеоконференции;

  • просмотр web-страниц;

  • (адаптивные) видео-потоки;

  • мгновенные сообщения.

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

  • облачные интерактивные видео-приложения;

  • виртуальная и добавленная реальность на основе облака.

Два упомянутых приложения были успешно продемонстрированы с L4S при работе по каналу доступа 40 Мбит/с загруженному множеством чувствительных к задержкам приложений из приведённого выше списка работающих одновременно через одну очередь в узком месте [L4Sdemo16] [L4Sdemo16-Video]. В первом случае видео-панораму футбольного стадиона можно было поворачивать и сжимать так, что прокси в облаке мог на лету генерировать субокно видео потока матча под управлением движениями пальцев со стороны каждого пользователя. Во втором гарнитура виртуальной реальности отображала картинку с 360-градусной камеры в гоночном автомобиле. Отображаемое поле определялось поворотом головы пользователя и извлекалось из облачного прокси. В обоих случаях при базовой сквозной задержке в 7 мсек дополнительная задержка в очереди (около 1 мсек) была столь мала, что изображение казалось созданным локально.

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

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

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

6.2. Варианты применения

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

  • Узкое место в какой-либо сети доступа, например, DSL, пассивная оптическая сеть (Passive Optical Network или PON), кабель DOCSIS, мобильная или спутниковая сеть, канал Wi-Fi (см. , где рассмотрены различные канальные технологии).

  • Частные сети с неоднородными ЦОД без единого администрирования, позволяющего одновременно вносить изменения для отправителей, получателей и сетей, требуемые для внедрения DCTCP:

    • частные ЦОД, соединённые через распределенные сети, с раздельным администрированием внутри одной компании;

    • ЦОД, управляемые разными компаниями и соединённые в сеть с общими интересами (например, финансы);

    • ЦОД с арендаторами (облако), использующими стек выбранной операционной системы (Infrastructure as a Service или IaaS);

  • Различный контроль перегрузок на уровне транспорта (или приложений):

    • эластичный контроль (TCP/SCTP);

    • приложения в реальном масштабе времени (RTP, RMCAT);

    • запрос-отклик (DNS/LDAP).

  • Потребность в QoS с малой задержкой но без проверки и вмешательства со стороны уровня IP [RFC8404]:

    • мобильные и другие сети, как правило, проверяют вышележащие уровни для понимания потребностей приложений в QoS, однако с ростом потребностей в обеспечении приватности и шифрования L4S предоставляет альтернативное решение; не нужно выбирать, предпочтительный трафик в очереди, когда L4S может обеспечить благоприятную постановку в очередь для всего трафика.

  • При минимизации задержки в очередях приложения с фиксированным бюджетом задержки могут взаимодействовать на больших расстояниях или по обходным путям, например, через более длинные цепочки сервисных функций [RFC7665] или маршрутизаторы для анонимизации (onion router).

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

6.3. Применимость для конкретных канальных технологий

Некоторые технологии канального уровня объединяют множество пакетов в блоки (burst), буферизуя для этого входящие пакеты. Такое агрегирование применяется в Wi-Fi, PON, кабельных модемах, тогда как проводные сети Ethernet и DSL не делают этого. Ни один отправитель (независимо от L4S) не может каким-либо способом сократить буферизацию, требуемую для агрегирования пакетов. Механизмам AQM не следует считать эти буферы частью управляемой очереди, поскольку никакие сигналы перегрузки не могут сократить размер буфера.

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

  • Радиоканалы (сотовые и спутниковые сети, Wi-Fi) с удаленным источником являются наиболее сложным случаем. Пропускная способность такого канала может быстро изменяться на порядки, поэтому считается желательным наличие постоянной очереди для использования внезапно возросшей пропускной способности.

  • В сотовых сетях дополнительные сложности связаны с буферизацией требуемой для незаметного перехода между сотами (hand-over).

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

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

Кроме того, некоторые каналы (особенно радио) более подвержены потерям при передаче. В параграфе 6.4.3 указано, реакция L4S на потери должна быть столь же резкой, как и при классическом отклике. Однако упомянутое там же исследование показало возможность существенно более эффективного восстановления потерь на канальном уровне за счёт смягчения ограничений для упорядоченности пакетов L4S.

6.4. Вопросы развёртывания

Механизмы L4S AQM, будь то DualQ [RFC9332] или FQ [RFC8290], сами являются механизмами поэтапного внедрения L4S, где трафик L4S может сосуществовать с имеющимся классическим трафиком (Reno-friendly). В параграфе 6.4.1 описано, как внедрение L4S AQM лишь на одном узле с каждой стороны канала доступа обеспечивает почти все преимущества L4S.

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

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

6.4.1. Топология развёртывания

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

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

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

                                         ______
                                        (      )
                      __          __  (          )
                     |DQ\________/DQ|( Предприятие)
                 ___ |__/        \__| (или кампус)
                (   )                   (______)
              (      )                           ___||_
+----+      (          )  __                 __ /      \
| DC |-----(    Ядро    )|DQ\_______________/DQ|| Дом  |
+----+      (          ) |__/               \__||______|
               (_____) __
                      |DQ\__/\        __ ,===.
                      |__/    \  ____/DQ||| ||Мобильное
                               \/    \__|||_||устройство
                                         | o |
                                         `---'

Рисунок . Вероятное размещение DualQ (DQ) в базовой топологии доступа.


Внедрение в mesh-топологии зависит от уровня перегрузки в ядре сети. Если перегрузки в ядре нет или производительность достаточно высока и узкими местами почти всегда являются ребра, достаточно будет внедрить L4S AQM на таких рёбрах. Например, некоторые сети ЦОД спроектированы так, что узким местом является гипервизор или сетевые контроллеры (Network Interface Controller или NIC) хостов, а другая узость возникает в коммутаторе стойки (top-of-rack), на портах, обращённых к хосту и ядру.

Затем L4S AQM потребуется там, где узким местом в доме становятся каналы Wi-Fi. L4S AQM может потребоваться в любых сохраняющихся узких местах, таких как соединения между сетями, например в некоторых точках обмена Internet, а также на входах и выходах каналов WAN между ЦОД.

6.4.2. Последовательность внедрения

Чтобы отдельный поток L4S обеспечивал преимущества нужно развернуть 3 (иногда 2) элемента: i) контроль перегрузки у отправителя, ii) AQM в узком месте и iii) обновление старого транспорта (а именно, TCP) в части обратной связи от получателя. С этими же проблемами столкнулось внедрение ECN [RFC8170], откуда были извлечены уроки.

Во-первых, при развёртывании L4S используется наличие DCTCP уже на многих хостах Internet (например, клиенты и серверы Windows, FreeBSD, Linux). Поэтому L4S AQM можно внедрить в узком месте сети, чтобы сразу же получить рабочее развёртывание всех частей L4S для тестирования при условии смены кода ECT(0) на ECT(1). В DCTCP нужно устранить несколько проблем безопасности для базового применения в общедоступной сети Internet (см. параграф 4.3 спецификации L4S ECN [RFC9331]), но протокол DCTCP по умолчанию не включён и эти вопросы можно решать в рамках контролируемых внедрений или экспериментов.

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

В-третьих, идентификатор L4S выбран так, что сетевые операторы могут сначала включить L4S лишь для некоторых клиентов или отдельных приложений. Выбор идентификатора тщательно продуман, чтобы не поставить под угрозу будущее развитие в направлении внедрения L4S как всеобщего сервиса Internet. Это обусловлено тем, что идентификатор L4S задан не только как сквозное поле ECN, но и может сочетаться с другими заголовками пакетов или статусом клиента или его канала доступа (см. параграф 5.4 в [RFC9331]). Операторы могли бы сделать это даже без одобрения IETF, однако IETF лучше указать, что локальный идентификатор должен применяться в сочетании с идентификатором IETF — ECT(1). Если оператор выбрал подход лишь с локальным применением, он просто будет удалять дополнительное правило, чтобы сервис работал через Internet (промежуточные устройства, партнёров и т. п.).

 

Серверы или прокси

Канал доступа

Клиенты

0

DCTCP (имеющийся)

DCTCP (имеющийся)

1

Добавление L4S AQM в нисходящем канале

Работа в нисходящем направлении по внедрению в контролируемой среде (пробному)

2

Обновление DCTCP до TCP Prague

Замена откликов DCTCP на AccECN

Полностью работающее нисходящее направление

3

Добавление L4S AQM в восходящем канале

Обновление DCTCP до TCP Prague

Полностью работающие нисходящее и восходящее направление

 

Рисунок . Пример последовательности развёртывания L4S.

На рисунке 3 приведён пример последовательности внедрения элементов L4S при наличии DCTCP с обеих сторон.

  1. DCTCP не применяется в общедоступной сети Internet, поэтому здесь подчёркнуто, что поток DCTCP полностью локализован в контролируемой среде развёртывания. Внутри этой среды сразу после внедрения L4S AQM пробный поток DCTCP получает выгоду даже без дополнительного внедрения. В этом примере внедрение происходит сначала в нисходящем направлении, но в других ситуациях внедрение может начинаться с восходящего направления. Если ранее для нисходящего доступа не был развернут механизм AQM, L4S AQM существенно улучшает классические услуги (а также добавляет услуги L4S). Если AQM уже был внедрён, классические услуги не изменяются (а L4S добавит улучшения).

  2. Здесь TCP Prague [PRAGUE-CC] представляет вариант DCTCP, разработанный для применения в рабочей среде Internet (т. е. он соответствует всем требованиям раздела 4 в спецификации L4S ECN [RFC9331], что означает возможность использования в общедоступной сети Internet). Если приложение в основном однонаправленное, TCP Prague на передающей стороне обеспечит все требуемые преимущества при условии поддержки принимающей стороной откликов Accurate ECN (AccECN) [ACCECN].

    Для TCP нужны отклики AccECN от другой стороны, но это базовые отклики ECN, внедрение которых уже запланировано для других целей, таких как DCTCP и BBR. Внедрение на обеих сторонах может происходить в любом порядке, поскольку в TCP контроль перегрузок L4S включается лишь при указании поддержки AccECN в процессе начального согласования. Таким образом, внедрение TCP Prague на сервере позволяет пробному внедрению L4S перейти в рабочее состояние для одного направления, независимо от развёртывания AccECN на другой стороне. Дополнительным мотивом для этого этапа может быть большая производительность TCP Prague по сравнению с DCTCP (см. Приложение A.2 к спецификации L4S ECN [RFC9331]).

    В отличие от TCP, отклики QUIC ECN [RFC9000] с самого начала поддерживают L4S. Поэтому для транспорта QUIC внедрение на этом этапе контроля перегрузок Prague является простым и достаточным.

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

    В случае TCP обновление прокси для поддержки TCP Prague обеспечит преимущества L4S в нисходящем направлении всем клиентам, поддерживающим AccECN (независимо от поддержки ими L4S). В восходящем направлении прокси будет поддерживать AccECN как получатель и любой клиент, внедривший у себя L4S получит преимущества в восходящем направлении независимо от поддержки AccECN серверами за прокси.

  3. Этот этап состоит из 2 шагов для включения L4S в восходящем направлении. L4S AQM или TCP Prague можно развернуть в любом порядке, как уже описано. Для мотивирования первого шага отложенная выгода от включения новых услуг после второго шага должна превышать инвестиционные риски первого шага. Как уже отмечено, потенциал новых интерактивных услуг обеспечивает такую мотивацию. L4S AQM также значительно улучшает классические услуги в восходящем направлении, если механизм AQM не был внедрён ранее.

Отметим, что последовательность внедрения может быть иной. Например, сначала можно обновить восходящее направление, использовать сквозной протокол, отличный от TCP (например, QUIC и RTP). Устройства, подобные 3GPP, могут потребовать внедрения L4S в пользовательском оборудовании 5G и т. д.

6.4.3. Поток L4S с узким местом без ECN

Если L4S включён между двумя хостами, отправитель L4S должен безопасно сосуществовать с Reno при реакции на какое-либо отбрасывание пакета (см. параграф 4.3 в спецификации L4S ECN [RFC9331]). К сожалению, помимо защиты классического трафика это ухудшает работу сервиса L4S при возникновении какой-либо потели, даже если её причиной не является перегрузка в узком месте. Это может быть, например,

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

  • ошибки при передаче (например, электрические помехи);

  • правила управления скоростью.

Для решения этой проблемы разрабатывается 3 взаимодополняющих подхода, но они ещё в стадии исследования.

  • В контроле перегрузок Prague игнорируются некоторые потери, связь которых с перегрузкой представляется маловероятной (применяются некоторые идеи из BBR [BBR-CC] в части изолированных потерь). Это позволяет маскировать любые из указанных выше потерь, сосуществуя с контролем перегрузки по потерям.

  • Сочетание недавнего подтверждения (Recent Acknowledgement или RACK) [RFC8985], L4S и повторов передачи на канальном уровне без изменения порядка может исправлять ошибки передачи без задержки из-за блокировки в начале линии (head of line), обычно связанной с повтором передачи на канальном уровне [UnorderedLTE] [RFC9331].

  • Гибридное управление скоростью по ECN и отбрасыванию ().

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

6.4.4. Поток L4S с Classic ECN в узком месте

Поддержка Classic ECN начинает реализовываться в Internet как повышение уровня (объёма) маркировки CE. Сложно понять, связано это с добавлением поддержки ECN в реализации FQ-CoDel и/или FQ-COBALT, что обычно не вызывает проблем, поскольку планирование в очередях по потокам (flow queue или FQ) по своей природе предотвращает превышение потоком «справедливой» скорости независимо от энергичности этого потока. Однако некоторые маркировки Classic ECN могут быть вызваны внедрением ECN с одной очередью. Этот случай рассматривается в параграфе 4.3 спецификации L4S ECN [RFC9331].

6.4.5. Развёртывание L4S AQM внутри туннеля

В L4S AQM поле ECN служит для сигналов о перегрузке. Поэтому, как и в Classic ECN, при размещении AQM внутри туннеля или на нижележащем уровне для корректной работы сигнализации ECN нужно соответствующее стандартам распространение поля ECN по уровням [RFC6040] [ECN-SHIM] [ECN-ENCAP].

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

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

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

8.1. Ограничение скорости трафика

8.1.1. Ограничение скорости на уровне потока

В современной сети Internet провайдеры (ISP) обычно принудительно разделяют пропускную способность общих каналов, выделенных различным сайтам (например, домовладениям, организациям или мобильным пользователям, см. ), с помощью той или иной формы планировщика [RFC0970]. ISP также применяют различные методы (например, перенаправление на средства очистки) для борьбы с лавинными рассылками (flooding). Однако никогда не возникало универсальной необходимости контролировать скорость отдельных потоков приложений, Internet обычно полагается на самоограничение контроля перегрузки у отправителей для совместного использования «внутрисайтовой» пропускной способности.

При разработке L4S это сложившееся состояние было сохранено. Для предоставления услуг L4S с использованием DualQ параграф 4.2 в [RFC9332] разъясняет, как неотзывчивым потокам предоставляется не больше преимуществ, чем AQM с одной очередью, независимо от наличия перегрузки.

Если когда либо потребуется управление скоростью по потокам, его можно будет добавить, поскольку оно ортогонально разделению классического трафика и L4S. Как разъяснено в параграфе 5.2, L4S с DualQ обеспечивает малые задержки без необходимости управлять скоростью на уровне потока. Поэтому при потребности в контроле скорости по потокам можно использовать очереди по потокам (FQ) с поддержкой L4S или добавить контроль скорости потока как модульное расширение DualQ. Однако контроль скорости на уровне потока обычно не внедряется в качестве механизма защиты, поскольку активный злоумышленник может просто разделить свой трафик между разными идентификаторами потоков, если скорость каждого потока ограничена.

8.1.2. Ограничение скорости для L4S

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

На ранних этапах развёртывания (а, возможно, и всегда) некоторые сети не будут предоставлять услуг L4S. В общем случае этим сетям не нужны правила для трафика L4S. От них требуется (в соответствии со спецификациями ECN [RFC3168] и L4S ECN [RFC9331]) не менять идентификатор L4S, поскольку это нарушит сквозной контроль перегрузок. Если сеть уже рассматривает трафик ECN как Not-ECT, она может относить и трафик L4S к Not-ECT. В узком месте такой сети может возникать очередь и отбрасывание пакетов. При обнаружении отбрасывания расширяемым протоколом контроля перегрузки он должен реагировать безопасно для классического контроля перегрузки, как требует параграф 4.3 в [RFC9331]. Это ухудшит сервис L4S, чтобы он был не лучше (и не хуже) классического сервиса best efforts при наличии на пути узкого места без ECN ().

В представляющихся редкими случаях сеть с поддержкой только Classic ECN [RFC3168] в узком месте с одной очередью, может начать ограничивать трафик L4S для защиты конкурирующего с ним трафика Classic ECN (см., например, параграф 6.1.3 эксплуатационных рекомендация L4S [L4SOPS]). Однако параграф 4.3 спецификации L4S ECN [RFC9331] рекомендует отправителю адаптировать свою реакцию на перегрузку для надлежащего сосуществования с потоками Classic ECN, т. е. вернуться к самоограничению.

Некоторые операторы сетей могут ограничивать доступ к услугам L4S, предоставляя его лишь части клиентов. Их классификаторы пакетов (2 на рисунке ) могут идентифицировать клиентов но некоторым полям (например, диапазону адресов отправителей) в дополнение к классификации по полю ECN. Если соответствует лишь идентификатор ECN L4S, но не адрес отправителя (например), классификатор может направить пакеты (клиентов без доступа к L4S) в классическую очередь. Чёткое разъяснение способов использования операторами дополнительных локальных классификаторов (см. параграф 5.4 в [RFC9331]) призвано устранить любые мотивы сброса идентификаторов L4S. Тогда сквозное сохранение идентификатора L4S ECN будет более вероятным даже без поддержки сервиса на некоторых интервалах пересылки. Такие локальные соглашения будут требовать лишь простой классификации по факту регистрации, а не управляемой и зависящей от приложения проверки трафика на соответствие контракту, как принято в Diffserv.

8.2. Дружественность к задержкам

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

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

Локальная защита очереди в узком месте

Функция защиты очередей по потокам (5-tuple) [DOCSIS-Q-PROT] была разработана для очереди с малой задержкой в DOCSIS, где применяется архитектура DualQ L4S. Она защищает сервис с малой задержкой от любых потоков, создающих очереди, которые случайно или злонамеренно классифицируют себя в очередь с малой задержкой. Функция предназначена для оценки потоков исключительно по их вкладу в очередь, а не по скорости потока. Если для общей очереди с малой задержкой возникает риск превышения порога, функция перенаправляет достаточное число пакетов с высокой оценкой в классическую очередь, чтобы сохранить малую задержку.

Очистка распределенного трафика

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

Локальное планирование по потокам в узком месте

Планированию по потокам следует по своей природе изолировать потоки без всплесков (non-bursty) от потоков со всплесками (пиками) трафика (сравнение ограничения и планирования на уровне потоков дано в параграфе 5.2).

Защита очереди подсети распределенного доступа

Защита очередей по потокам может быть организована для структуры очередей, распределенной по подсети, использующей управляющие сообщения нижележащих уровней (см. параграф 2.1.4 в [QDyn]). Например, в сети радиодоступа пользовательское оборудование уже передаёт регулярные отчёты о состоянии буфера контроллеру сети, который может использовать эти сведения для удалённого ограничения отдельных потоков.

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

Архитектура раскрытия перегрузки (Congestion Exposure или ConEx) [RFC7713] использует аудит на выходе для побуждения отправителей правдиво сообщать о перегрузке пути по основному каналу, где это может использоваться входными ограничителями. Возможен и сквозной вариант этой архитектуры.

Распределенное кондиционирование трафика на границе домена

Может быть предпочтительной архитектура, подобная Diffserv [RFC2475], где трафик заранее (проактивно) кондиционируется на входе в домен вместо реактивного ограничения при возникновении очереди в узком месте после объединения с другим трафиком.

Защита очередей распределенного ядра сети

Функция ограничения (policing) может быть распределена между механизмами на уровне потоков на входе в сеть, которые характеризуют склонность к пикам (burstiness) каждого потока сигналом, передаваемым с трафиком, и механизмами на уровне классов в узком месте, которые воздействуют на эти сигналы, если постановка в очередь действительно происходит после схождения трафика. Это чем-то похоже на [Nadas20], что, в свою очередь, похоже на идею беспристрастной очереди без учёта состояний.

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

8.3. Взаимодействие ограничения скорости и L4S

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

Классические ограничители скорости отбрасывают все пакеты, превышающие установленный предел скорости, обычно разрешая всплески (есть варианты, где ограничитель перемаркировывает несоответствующий трафик кодом Diffserv, подходящим для отбрасывания, поэтому пакеты при перегрузке могут быть отброшены где угодно). Когда трафик L4S сталкивается с таким регулятором скорости, он испытывает потери пакетов и источник будет возвращаться к классическому контроля перегрузки, теряя преимущества L4S (). Поэтому в сетях где уже имеются регуляторы скорости и планируется внедрение L4S, предпочтительно перепроектировать ограничители скорости, чтобы они стали более дружественны к сервисуL4S. Совместимое с L4S ограничение скорости в настоящее время является областью исследований (отметим, что это отличается от управления задержкой). Можно было бы установить порог начала маркировки ECN чуть ниже порога ограничения скорости или чуть ниже величины пиков, при которой начинается отбрасывание. Например, при 3-цветной маркировке в двумя скоростями [RFC2698] или пороге PCN и маркере избыточной скорости [RFC5670] можно применять маркировку ECN при низкой скорости и отбрасывание — при высокой. Или можно было добавить к имеющемуся ограничителю скорости управление «скоростью перегрузки», например, с использованием «локального» варианта агрегатного регулятора ConEx [CONG-POLICING]. Может быть удастся разработать элементы расширяемого контроля перегрузок, позволяющие менее катастрофически реагировать на потери, которым не предшествовал интервал роста задержки.

Устройству совместимых с L4S регуляторов скорости должен быть посвящен отдельный специальный документ. Обсуждение взаимодействия L4S и Diffserv приведено в [L4S-DIFFSERV].

8.4. Целостность ECN

Разработаны разные варианты защиты целостности в контуре откликов на перегрузку (по потерям, Classic ECN, L4S ECN) от некорректного поведения получателей, отправителей и сети. Краткое описание таких методов в рассмотрением применимости, доводов за и против дано в Приложении C.1 к спецификации L4S ECN [RFC9331].

8.5. Вопросы приватности

Как отмечалось в параграфе 5.2, архитектура L4S не исключает подходов с проверкой сквозных идентификаторов транспортного уровня. Например, поддержка L4S добавлена в FQ-CoDel, где происходит классификация в сети по идентификатору потока приложения. Однако основным нововведением L4S является модель DualQ AQM, не требующая заглядывать внутрь пакета дальше внешнего заголовка IP, поскольку идентификатор L4S помещается в поле IP-ECN.

Таким образом, архитектура L4S обеспечивает очень малую задержку в очереди без необходимости просмотра информации выше уровня IP. Это означает, что пользователям, желающим шифровать идентификаторы потоков приложений, например в туннелях IPsec или иных туннелях VPN с шифрованием, не придётся жертвовать малой задержкой [RFC8404].

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

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

[ACCECN] Briscoe, B., Kühlewind, M., and R. Scheffenegger, «More Accurate ECN Feedback in TCP», Work in Progress, Internet-Draft, draft-ietf-tcpm-accurate-ecn-22, 9 November 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-tcpm-accurate-ecn-22>.

[AFCD] Xue, L., Kumar, S., Cui, C., Kondikoppa, P., Chiu, C-H., and S-J. Park, «Towards fair and low latency next generation high speed networks: AFCD queuing», Journal of Network and Computer Applications, Volume 70, pp. 183-193, DOI 10.1016/j.jnca.2016.03.021, July 2016, <https://doi.org/10.1016/j.jnca.2016.03.021>.

[BBR-CC] Cardwell, N., Cheng, Y., Hassas Yeganeh, S., Swett, I., and V. Jacobson, «BBR Congestion Control», Work in Progress, Internet-Draft, draft-cardwell-iccrg-bbr-congestion-control-02, 7 March 2022, <https://datatracker.ietf.org/doc/html/draft-cardwell-iccrg-bbr-congestion-control-02>.

[BBRv2] «TCP BBR v2 Alpha/Preview Release», commit 17700ca, June 2022, <https://github.com/google/bbr>.

[BDPdata] Briscoe, B., «PI2 Parameters», TR-BB-2021-001, arXiv:2107.01003 [cs.NI], DOI 10.48550/arXiv.2107.01003, October 2021, <https://arxiv.org/abs/2107.01003>.

[BufferSize] Appenzeller, G., Keslassy, I., and N. McKeown, «Sizing Router Buffers», SIGCOMM ’04: Proceedings of the 2004 conference on Applications, technologies, architectures, and protocols for computer communications, pp. 281-292, DOI 10.1145/1015467.1015499, October 2004, <https://doi.org/10.1145/1015467.1015499>.

[COBALT] Palmei, J., Gupta, S., Imputato, P., Morton, J., Tahiliani, M. P., Avallone, S., and D. Täht, «Design and Evaluation of COBALT Queue Discipline», IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN), DOI 10.1109/LANMAN.2019.8847054, July 2019, <https://ieeexplore.ieee.org/abstract/document/8847054>.

[CODEL-APPROX-FAIR] Morton, J. and P. Heist, «Controlled Delay Approximate Fairness AQM», Work in Progress, Internet-Draft, draft-morton-tsvwg-codel-approx-fair-01, 9 March 2020, <https://datatracker.ietf.org/doc/html/draft-morton-tsvwg-codel-approx-fair-01>.

[CONG-POLICING] Briscoe, B., «Network Performance Isolation using Congestion Policing», Work in Progress, Internet-Draft, draft-briscoe-conex-policing-01, 14 February 2014, <https://datatracker.ietf.org/doc/html/draft-briscoe-conex-policing-01>.

[CTCP] Sridharan, M., Tan, K., Bansal, D., and D. Thaler, «Compound TCP: A New TCP Congestion Control for High-Speed and Long Distance Networks», Work in Progress, Internet-Draft, draft-sridharan-tcpm-ctcp-02, 11 November 2008, <https://datatracker.ietf.org/doc/html/draft-sridharan-tcpm-ctcp-02>.

[DOCSIS-Q-PROT] Briscoe, B., Ed. and G. White, «The DOCSIS® Queue Protection Algorithm to Preserve Low Latency», Work in Progress, Internet-Draft, draft-briscoe-docsis-q-protection-06, 13 May 2022, <https://datatracker.ietf.org/doc/html/draft-briscoe-docsis-q-protection-06>.

[DOCSIS3.1] CableLabs, «MAC and Upper Layer Protocols Interface (MULPI) Specification, CM-SP-MULPIv3.1», Data-Over-Cable Service Interface Specifications DOCSIS 3.1 Version i17 or later, 21 January 2019, <https://specification-search.cablelabs.com/CM-SP-MULPIv3.1>.

[DOCSIS3AQM] White, G., «Active Queue Management Algorithms for DOCSIS 3.0: A Simulation Study of CoDel, SFQ-CoDel and PIE in DOCSIS 3.0 Networks», CableLabs Technical Report, April 2013, <https://www.cablelabs.com/wp-content/uploads/2013/11/Active_Queue_Management_Algorithms_DOCSIS_3_0.pdf>.

[DualPI2Linux] Albisser, O., De Schepper, K., Briscoe, B., Tilmans, O., and H. Steen, «DUALPI2 — Low Latency, Low Loss and Scalable (L4S) AQM», Proceedings of Linux Netdev 0x13, March 2019, <https://www.netdevconf.org/0x13/session.html?talk-DUALPI2-AQM>.

[Dukkipati06] Dukkipati, N. and N. McKeown, «Why Flow-Completion Time is the Right Metric for Congestion Control», ACM SIGCOMM Computer Communication Review, Volume 36, Issue 1, pp. 59-62, DOI 10.1145/1111322.1111336, January 2006, <https://dl.acm.org/doi/10.1145/1111322.1111336>.

[ECN-ENCAP] Briscoe, B. and J. Kaippallimalil, «Guidelines for Adding Congestion Notification to Protocols that Encapsulate IP», Work in Progress, Internet-Draft, draft-ietf-tsvwg-ecn-encap-guidelines-17, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-ecn-encap-guidelines-17>.

[ECN-SCTP] Stewart, R., Tuexen, M., and X. Dong, «ECN for Stream Control Transmission Protocol (SCTP)», Work in Progress, Internet-Draft, draft-stewart-tsvwg-sctpecn-05, 15 January 2014, <https://datatracker.ietf.org/doc/html/draft-stewart-tsvwg-sctpecn-05>.

[ECN-SHIM] Briscoe, B., «Propagating Explicit Congestion Notification Across IP Tunnel Headers Separated by a Shim», Work in Progress, Internet-Draft, draft-ietf-tsvwg-rfc6040update-shim-15, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-rfc6040update-shim-15>.

[FQ_CoDel_Thresh] «fq_codel: generalise ce_threshold marking for subset of traffic», commit dfcb63ce1de6b10b, October 2021, <https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=dfcb63ce1de6b10b>.

[Hohlfeld14] Hohlfeld, O., Pujol, E., Ciucu, F., Feldmann, A., and P. Barford, «A QoE Perspective on Sizing Network Buffers», IMC ’14: Proceedings of the 2014 Conference on Internet Measurement, pp. 333-346, DOI 10.1145/2663716.2663730, November 2014, <https://doi.acm.org/10.1145/2663716.2663730>.

[L4S-DIFFSERV] Briscoe, B., «Interactions between Low Latency, Low Loss, Scalable Throughput (L4S) and Differentiated Services», Work in Progress, Internet-Draft, draft-briscoe-tsvwg-l4s-diffserv-02, 4 November 2018, <https://datatracker.ietf.org/doc/html/draft-briscoe-tsvwg-l4s-diffserv-02>.

[L4Sdemo16] Bondarenko, O., De Schepper, K., Tsang, I., Briscoe, B., Petlund, A., and C. Griwodz, «Ultra-Low Delay for All: Live Experience, Live Analysis», Proceedings of the 7th International Conference on Multimedia Systems, Article No. 33, pp. 1-4, DOI 10.1145/2910017.2910633, May 2016, <https://dl.acm.org/citation.cfm?doid=2910017.2910633>.

[L4Sdemo16-Video] «Videos used in IETF dispatch WG ‘Ultra-Low Queuing Delay for All Apps’ slot», <https://riteproject.eu/dctth/#1511dispatchwg>.

[L4Seval22] De Schepper, K., Albisser, O., Tilmans, O., and B. Briscoe, «Dual Queue Coupled AQM: Deployable Very Low Queuing Delay for All», TR-BB-2022-001, arXiv:2209.01078 [cs.NI], DOI 10.48550/arXiv.2209.01078, September 2022, <https://arxiv.org/abs/2209.01078>.

[L4SOPS] White, G., Ed., «Operational Guidance for Deployment of L4S in the Internet», Work in Progress, Internet-Draft, draft-ietf-tsvwg-l4sops-03, 28 April 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-l4sops-03>.

[LEDBAT_AQM] Al-Saadi, R., Armitage, G., and J. But, «Characterising LEDBAT Performance Through Bottlenecks Using PIE, FQ-CoDel and FQ-PIE Active Queue Management», IEEE 42nd Conference on Local Computer Networks (LCN), DOI 10.1109/LCN.2017.22, October 2017, <https://ieeexplore.ieee.org/document/8109367>.

[lowat] Meenan, P., «Optimizing HTTP/2 prioritization with BBR and tcp_notsent_lowat», Cloudflare Blog, October 2018, <https://blog.cloudflare.com/http-2-prioritization-with-nginx/>.

[McIlroy78] McIlroy, M.D., Pinson, E. N., and B. A. Tague, «UNIX Time-Sharing System: Foreword», The Bell System Technical Journal 57: 6, pp. 1899-1904, DOI 10.1002/j.1538-7305.1978.tb02135.x, July 1978, <https://archive.org/details/bstj57-6-1899>.

[Nadas20] Nádas, S., Gombos, G., Fejes, F., and S. Laki, «A Congestion Control Independent L4S Scheduler», ANRW ’20: Proceedings of the Applied Networking Research Workshop, pp. 45-51, DOI 10.1145/3404868.3406669, July 2020, <https://doi.org/10.1145/3404868.3406669>.

[NASA04] Bailey, R., Trey Arthur III, J., and S. Williams, «Latency Requirements for Head-Worn Display S/EVS Applications», Proceedings of SPIE 5424, DOI 10.1117/12.554462, April 2004, <https://ntrs.nasa.gov/api/citations/20120009198/downloads/20120009198.pdf?attachment=true>.

[NQB-PHB] White, G. and T. Fossati, «A Non-Queue-Building Per-Hop Behavior (NQB PHB) for Differentiated Services», Work in Progress, Internet-Draft, draft-ietf-tsvwg-nqb-15, 11 January 2023, <https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-nqb-15>.

[PRAGUE-CC] De Schepper, K., Tilmans, O., and B. Briscoe, Ed., «Prague Congestion Control», Work in Progress, Internet-Draft, draft-briscoe-iccrg-prague-congestion-control-01, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-briscoe-iccrg-prague-congestion-control-01>.

[PragueLinux] Briscoe, B., De Schepper, K., Albisser, O., Misund, J., Tilmans, O., Kühlewind, M., and A.S. Ahmed, «Implementing the ‘TCP Prague’ Requirements for Low Latency Low Loss Scalable Throughput (L4S)», Proceedings Linux Netdev 0x13, March 2019, <https://www.netdevconf.org/0x13/session.html?talk-tcp-prague-l4s>.

[QDyn] Briscoe, B., «Rapid Signalling of Queue Dynamics», TR-BB-2017-001, arXiv:1904.07044 [cs.NI], DOI 10.48550/arXiv.1904.07044, April 2019, <https://arxiv.org/abs/1904.07044>.

[Raaen14] Raaen, K. and T-M. Grønli, «Latency Thresholds for Usability in Games: A Survey», Norsk IKT-konferanse for forskning og utdanning (Norwegian ICT conference for research and education), 2014, <http://ojs.bibsys.no/index.php/NIK/article/view/9/6>.

[Rajiullah15] Rajiullah, M., «Towards a Low Latency Internet: Understanding and Solutions», Dissertation, Karlstad University, 2015, <https://www.diva-portal.org/smash/get/diva2:846109/FULLTEXT01.pdf>.

[RELENTLESS] Mathis, M., «Relentless Congestion Control», Work in Progress, Internet-Draft, draft-mathis-iccrg-relentless-tcp-00, 4 March 2009, <https://datatracker.ietf.org/doc/html/draft-mathis-iccrg-relentless-tcp-00>.

[RFC0970] Nagle, J., «On Packet Switches With Infinite Storage», RFC 970, DOI 10.17487/RFC0970, December 1985, <https://www.rfc-editor.org/info/rfc970>.

[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and W. Weiss, «An Architecture for Differentiated Services», RFC 2475, DOI 10.17487/RFC2475, December 1998, <https://www.rfc-editor.org/info/rfc2475>.

[RFC2698] Heinanen, J. and R. Guerin, «A Two Rate Three Color Marker», RFC 2698, DOI 10.17487/RFC2698, September 1999, <https://www.rfc-editor.org/info/rfc2698>.

[RFC2884] Hadi Salim, J. and U. Ahmed, «Performance Evaluation of Explicit Congestion Notification (ECN) in IP Networks», RFC 2884, DOI 10.17487/RFC2884, July 2000, <https://www.rfc-editor.org/info/rfc2884>.

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

[RFC3246] Davie, B., Charny, A., Bennet, J.C.R., Benson, K., Le Boudec, J.Y., Courtney, W., Davari, S., Firoiu, V., and D. Stiliadis, «An Expedited Forwarding PHB (Per-Hop Behavior)», RFC 3246, DOI 10.17487/RFC3246, March 2002, <https://www.rfc-editor.org/info/rfc3246>.

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

[RFC3649] Floyd, S., «HighSpeed TCP for Large Congestion Windows», RFC 3649, DOI 10.17487/RFC3649, December 2003, <https://www.rfc-editor.org/info/rfc3649>.

[RFC4340] Kohler, E., Handley, M., and S. Floyd, «Datagram Congestion Control Protocol (DCCP)», RFC 4340, DOI 10.17487/RFC4340, March 2006, <https://www.rfc-editor.org/info/rfc4340>.

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

[RFC4960] Stewart, R., Ed., «Stream Control Transmission Protocol», RFC 4960, DOI 10.17487/RFC4960, September 2007, <https://www.rfc-editor.org/info/rfc4960>.

[RFC5033] Floyd, S. and M. Allman, «Specifying New Congestion Control Algorithms», BCP 133, RFC 5033, DOI 10.17487/RFC5033, August 2007, <https://www.rfc-editor.org/info/rfc5033>.

[RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, «TCP Friendly Rate Control (TFRC): Protocol Specification», RFC 5348, DOI 10.17487/RFC5348, September 2008, <https://www.rfc-editor.org/info/rfc5348>.

[RFC5670] Eardley, P., Ed., «Metering and Marking Behaviour of PCN-Nodes», RFC 5670, DOI 10.17487/RFC5670, November 2009, <https://www.rfc-editor.org/info/rfc5670>.

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

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

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

[RFC6817] Shalunov, S., Hazel, G., Iyengar, J., and M. Kuehlewind, «Low Extra Delay Background Transport (LEDBAT)», RFC 6817, DOI 10.17487/RFC6817, December 2012, <https://www.rfc-editor.org/info/rfc6817>.

[RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., Morris, J., Hansen, M., and R. Smith, «Privacy Considerations for Internet Protocols», RFC 6973, DOI 10.17487/RFC6973, July 2013, <https://www.rfc-editor.org/info/rfc6973>.

[RFC7560] Kuehlewind, M., Ed., Scheffenegger, R., and B. Briscoe, «Problem Statement and Requirements for Increased Accuracy in Explicit Congestion Notification (ECN) Feedback», RFC 7560, DOI 10.17487/RFC7560, August 2015, <https://www.rfc-editor.org/info/rfc7560>.

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

[RFC7665] Halpern, J., Ed. and C. Pignataro, Ed., «Service Function Chaining (SFC) Architecture», RFC 7665, DOI 10.17487/RFC7665, October 2015, <https://www.rfc-editor.org/info/rfc7665>.

[RFC7713] Mathis, M. and B. Briscoe, «Congestion Exposure (ConEx) Concepts, Abstract Mechanism, and Requirements», RFC 7713, DOI 10.17487/RFC7713, December 2015, <https://www.rfc-editor.org/info/rfc7713>.

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

[RFC8034] White, G. and R. Pan, «Active Queue Management (AQM) Based on Proportional Integral Controller Enhanced (PIE) for Data-Over-Cable Service Interface Specifications (DOCSIS) Cable Modems», RFC 8034, DOI 10.17487/RFC8034, February 2017, <https://www.rfc-editor.org/info/rfc8034>.

[RFC8170] Thaler, D., Ed., «Planning for Protocol Adoption and Subsequent Transitions», RFC 8170, DOI 10.17487/RFC8170, May 2017, <https://www.rfc-editor.org/info/rfc8170>.

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

[RFC8290] Hoeiland-Joergensen, T., McKenney, P., Taht, D., Gettys, J., and E. Dumazet, «The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm», RFC 8290, DOI 10.17487/RFC8290, January 2018, <https://www.rfc-editor.org/info/rfc8290>.

[RFC8298] Johansson, I. and Z. Sarker, «Self-Clocked Rate Adaptation for Multimedia», RFC 8298, DOI 10.17487/RFC8298, December 2017, <https://www.rfc-editor.org/info/rfc8298>.

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

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

[RFC8404] Moriarty, K., Ed. and A. Morton, Ed., «Effects of Pervasive Encryption on Operators», RFC 8404, DOI 10.17487/RFC8404, July 2018, <https://www.rfc-editor.org/info/rfc8404>.

[RFC8511] Khademi, N., Welzl, M., Armitage, G., and G. Fairhurst, «TCP Alternative Backoff with ECN (ABE)», RFC 8511, DOI 10.17487/RFC8511, December 2018, <https://www.rfc-editor.org/info/rfc8511>.

[RFC8888] Sarker, Z., Perkins, C., Singh, V., and M. Ramalho, «RTP Control Protocol (RTCP) Feedback for Congestion Control», RFC 8888, DOI 10.17487/RFC8888, January 2021, <https://www.rfc-editor.org/info/rfc8888>.

[RFC8985] Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, «The RACK-TLP Loss Detection Algorithm for TCP», RFC 8985, DOI 10.17487/RFC8985, February 2021, <https://www.rfc-editor.org/info/rfc8985>.

[RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., «QUIC: A UDP-Based Multiplexed and Secure Transport», RFC 9000, DOI 10.17487/RFC9000, May 2021, <https://www.rfc-editor.org/info/rfc9000>.

[RFC9113] Thomson, M., Ed. and C. Benfield, Ed., «HTTP/2», RFC 9113, DOI 10.17487/RFC9113, June 2022, <https://www.rfc-editor.org/info/rfc9113>.

[RFC9331] De Schepper, K. and B. Briscoe, Ed., «The Explicit Congestion Notification (ECN) Protocol for Low Latency, Low Loss, and Scalable Throughput (L4S)», RFC 9331, DOI 10.17487/RFC9331, January 2023, <https://www.rfc-editor.org/info/rfc9331>.

[RFC9332] De Schepper, K., Briscoe, B., Ed., and G. White, «Dual-Queue Coupled Active Queue Management (AQM) for Low Latency, Low Loss, and Scalable Throughput (L4S)», RFC 9332, DOI 10.17487/RFC9332, January 2023, <https://www.rfc-editor.org/info/rfc9332>.

[SCReAM-L4S] «SCReAM», commit fda6c53, June 2022, <https://github.com/EricssonResearch/scream>.

[TCP-CA] Jacobson, V. and M. Karels, «Congestion Avoidance and Control», Laurence Berkeley Labs Technical Report , November 1988, <https://ee.lbl.gov/papers/congavoid.pdf>.

[UnorderedLTE] Austrheim, M., «Implementing immediate forwarding for 4G in a network simulator», Master’s Thesis, University of Oslo, 2018.

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

Спасибо Richard Scheffenegger, Wes Eddy, Karen Nielsen, David Black, Jake Holland, Vidhi Goel, Ermin Sakic, Praveen Balasubramanian, Gorry Fairhurst, Mirja Kuehlewind, Philip Eardley, Neal Cardwell, Pete Heist, Martin Duke за их рецензии и комментарии. Спасибо также рецензентам от направления Marco Tiloca, Lars Eggert, Roman Danyliw, Éric Vyncke.

Работа Bob Briscoe и Koen De Schepper частично финансировалась Европейской комиссией в рамках программы Seventh Framework через проект Reducing Internet Transport Latency (RITE) (ICT-317700). Работа Koen De Schepper частично финансировалась также в рамках проектов 5Growth и DAEMON EU H2020, работа Bob Briscoe частично финансировалась также Research Council of Norway по проекту TimeIn, CableLabs и Comcast Innovation Fund. Выраженные здесь мнения принадлежат исключительно авторам.

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

Bob Briscoe (editor)
Independent
United Kingdom
Email: ietf@bobbriscoe.net
URI: https://bobbriscoe.net/
 
Koen De Schepper
Nokia Bell Labs
Antwerp
Belgium
Email: koen.de_schepper@nokia.com
URI: https://www.bell-labs.com/about/researcher-profiles/koende_schepper/
 
Marcelo Bagnulo
Universidad Carlos III de Madrid
Av. Universidad 30
28911 Madrid
Spain
Phone: 34 91 6249500
Email: marcelo@it.uc3m.es
URI: https://www.it.uc3m.es
 
Greg White
CableLabs
United States of America
Email: G.White@CableLabs.com

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

nmalykh@protokols.ru


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

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

3Datagram Congestion Control Protocol — протокол дейтаграмм с контролем перегрузок.

4Stream Control Transmission Protocol — протокол управления потоковой передачей.

5RTP Media Congestion Avoidance Techniques — методы предотвращения перегрузки сред RTP.

6Bottleneck Bandwidth and Round-trip propagation time — пропускная способность узких мест и время кругового обхода.

7Congestion Experienced — наблюдается перегрузка.

8Lightweight Directory Access Protocol — облегчённый протокол доступа к каталогам.

9Non-Queue-Building — без создания очереди.

10Content Delivery Network — сеть доставки содержимого. Прим. перев.

11Может показаться, что задержку, созданную самой очередью, не следует учитывать, поскольку исключение задержки в сети просто переносит её к отправителю. Однако современные адаптивные приложения, например, HTTP/2 [RFC9113] и некоторые интерактивные приложения (), могут хранить объекты с малой задержкой в начале своей локальной очереди отправки, перемешивая приоритеты других объектов в зависимости от хода других передач (см. например, [lowat]). После выпуска объектов в сеть перемешивание уже невозможно.

12Bottleneck Bandwidth and Round-trip propagation time — пропускная способность в узком месте и время кругового обхода.

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

RFC 9129 YANG Data Model for the OSPF Protocol

Internet Engineering Task Force (IETF)                          D. Yeung
Request for Comments: 9129                                  Arrcus, Inc.
Category: Standards Track                                          Y. Qu
ISSN: 2070-1721                                                Futurewei
                                                                J. Zhang
                                                        Juniper Networks
                                                                 I. Chen
                                                   The MITRE Corporation
                                                               A. Lindem
                                                           Cisco Systems
                                                            October 2022

YANG Data Model for the OSPF Protocol

Модель данных YANG для протокола OSPF

PDF

Аннотация

Этот документ задаёт модель данных YANG, которая может служить для настройки и управления OSPF. Модель основана на версии YANG 1.1, определённой в RFC 7950, и соответствует архитектуре хранилищ данных управления сетью (Network Management Datastore Architecture или NMDA), описанной в RFC 8342.

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

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

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

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

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

Copyright (c) 2022. Авторские права принадлежат 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] — язык определения данных, служащий для задания содержимого концептуального хранилища данных, позволяющего управлять сетевыми устройствами по протоколу настройки сети (Network Configuration Protocol или NETCONF) [RFC6241], RESTCONF [RFC8040] или иному протоколу управления сетью. Кроме того, модели данных YANG могут служить основой для реализации других интерфейсов, таких как консольный (Command-Line Interface или CLI) и программный API.

Этот документ определяет модель данных YANG, которая может служить для настройки и управления OSPF. Он дополняет модель данных ядра маршрутизации, заданную в [RFC8349], и предоставляет основу для разработки моделей данных протоколов маршрутизации. Модель полностью соответствует архитектуре NMDA [RFC8342]. Модель данных интерфейса определена в [RFC8343] и применяется для ссылки на интерфейсы из протоколов маршрутизации. Модель данных для цепочек ключей [RFC8177] применяется для аутентификации OSPF и обеспечивает ссылки на настроенные цепочки ключей и криптографические алгоритмы.

Поддерживаются оба протокола OSPFv2 [RFC2328] и OSPFv3 [RFC5340]. В дополнение к протоколу ядра OSPF поддерживаются функции из других RFC, связанных с OSPF. Это включает устройства запроса [RFC1793], организацию трафика (Traffic Engineering или TE) [RFC3630], разные семейства адресов [RFC5838], аккуратный перезапуск [RFC3623] [RFC5187], опцию NSSA (Not-So-Stubby Area) [RFC3101] и OSPFv2 или OSPFv3 в качестве протокола между провайдером и клиентом (Provider Edge to Customer Edge или PE-CE) [RFC4577] [RFC6565]. Не входящие в ядро функции в модели OSPF являются необязательными.

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

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

1.2. Диаграммы деревьев

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

2. Устройство модели данных

Хотя базовые элементы конфигурации OSPF (маршрутизаторы, области, интерфейсы) не меняются, детали модели конфигурации зависят от производителя. Различия наблюдаются в разных аспектах, включая привязку экземпляра протокола к домену маршрутизации и создание экземпляров протокола. Цель этого документа состоит в определении модели данных, обеспечивающей пользовательский интерфейс для OSPFv2 и OSPFv3. Обязательных элементов (mandatory) очень немного, что даёт производителям возможность приспособить эту модель данных к своим реализациям.

2.1. Рабочее состояние OSPF

Рабочее состояние OSPF включено в одно дерево с конфигурацией OSPF в соответствии с архитектурой NMDA [RFC8342] и дополняется лишь контейнер routing из ietf-routing [RFC8349], а контейнер routing-state не меняется.

2.2. Обзор

Модуль YANG OSPF, заданный в этом документе, включает все базовые блоки, нужные для протокола OSPF. Модуль дополняет путь /routing/control-plane-protocols/control-plane-protocol, заданный в модуле ietf-routing. Модель ietf-ospf задаёт один экземпляр OSPF, который может быть создан как OSPFv2 или OSPFv3. Несколько экземпляров создаются как экземпляры протоколов плоскости управления.

   module: ietf-ospf
     augment /rt:routing/rt:control-plane-protocols/
              rt:control-plane-protocol:
       +--rw ospf
             .
             .
          +--rw address-family?       iana-rt-types:address-family
             .
             .
          +--rw areas
          |  +--rw area* [area-id]
          |     +--rw area-id                   area-id-type
          |        .
          |        .
          |     +--rw virtual-links
          |     |  +--rw virtual-link* [transit-area-id router-id]
          |     |     .
          |     |     .
          |     +--rw sham-links {pe-ce-protocol}?
          |     |  +--rw sham-link* [local-id remote-id]
          |     |     .
          |     |     .
          |     +--rw interfaces
          |        +--rw interface* [name]
          |           .
          |           .
          +--rw topologies {multi-topology}?
             +--rw topology* [name]
                .
                .

Контейнер ospf включает один экземпляр протокола OSPF, содержащий данные конфигурации и состояния на уровне маршрутизатора OSPF. Каждый экземпляр OSPF сопоставляется с экземпляром протокола плоскости управления в соответствии с [RFC8349].

Контейнеры areas и area/interfaces определяют конфигурацию и рабочее состояние областей и интерфейсов OSPF.

Контейнер topologies определяет конфигурацию и рабочее состояние OSPF для топологий OSPF при поддержке функции (feature) multi-topology.

2.3. OSPFv2 и OSPFv3

Определённая здесь модель данных поддерживает протоколы OSPFv2 и OSPFv3. Обязательное поле version указывает применяемую версию OSPF и в соответствии с этим модель данных использует OSPFv2 или OSPFv3.

2.4. Необязательные функции

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

multi-topology

Поддержка маршрутизации MT Multi-Topology) [RFC4915].

multi-area-adj

Поддержка смежности нескольких областей OSPF [RFC5185].

explicit-router-id

Поддержка явного задания Router ID на уровне экземпляра.

demand-circuit

Поддержа устройств, запрашивающих OSPF [RFC1793].

mtu-ignore

Поддержка запрета проверки MTU пакета OSPF Database Description в соответствии с параграфом 10.6 в [RFC2328].

lls

Поддержка сигнализации LLS (OSPF Link-Local Signaling) [RFC5613].

prefix-suppression

Поддержка подавления анонсов префиксов OSPF [RFC6860].

ttl-security

Поддержка проверки безопасности для OSPF TTL (Time to Live) [RFC5082].

nsr

Поддержка OSPF NSR (Non-Stop Routing), позволяющей маршрутизатору с избыточностью плоскости управления (например, платы с двумя процессорами маршрутов — Route Processor или RP)) поддерживать своё состояние и отношения смежности при плановом или неплановом перезапуске плоскости управления. Это отличается от безостановочной пересылки (Non-Stop Forwarding или NSF) тем, что не требует содействия соседей OSPF для восстановления состояния плоскости управления.

graceful-restart

Поддержка аккуратного (graceful) перезапуска OSPF [RFC3623] [RFC5187].

auto-cost

Поддержка расчёта стоимости для интерфейса OSPF по эталонной пропускной способности [RFC2328].

max-ecmp

Поддержка настройки максимального числа равноценных путей (Equal-Cost Multi-Path или ECMP).

max-lsa

Поддержка настройки максимального числа анонсов состояния канала (Link State Advertisement или LSA), воспринимаемых экземпляром OSPF [RFC1765].

te-rid

Поддержка настройки TE Router ID, т е. Router Address TLV, как указано в параграфе 2.4.1 [RFC3630], или Router IPv6 Address TLV, как указано в разделе 3 [RFC5329].

ldp-igp-sync

Поддержка синхронизации LDP IGP [RFC5443].

ospfv2-authentication-trailer

Поддержка трейлера аутентификации OSPFv2 [RFC5709] [RFC7474].

ospfv3-authentication-ipsec

Поддержка IPsec для аутентификации OSPFv3 [RFC4552].

ospfv3-authentication-trailer

Поддержка трейлера аутентификации OSPFv3 [RFC7166].

fast-reroute

Поддержка IP Fast Reroute (IP-FRR) [RFC5714].

node-flag

Поддержка флагов узла для префиксов for OSPF [RFC7684].

node-tag

Поддержка административных флагов узла для экземпляров OSPF [RFC7777].

lfa

Поддержка беспетлевых вариантов (Loop-Free Alternate или LFA) [RFC5286].

remote-lfa

Поддержка удалённых LFA (Remote LFA или R-LFA) [RFC7490].

stub-router

Поддержка анонсов тупиковых маршрутизаторов OSPF [RFC6987].

pe-ce-protocol

Поддержка OSPF в качестве протокола PE-CE [RFC4577] [RFC6565].

ietf-spf-delay

Поддержка алгоритма задержки IETF Shortest Path First (SPF) [RFC8405].

bfd

Поддержка обнаружения двухсторонней пересылки (Bidirectional Forwarding Detection или BFD) для нахождения соседей OSPF [RFC5880] [RFC5881].

hybrid-interface

Поддержка гибридных интерфейсов OSPF (broadcast и point-to-multipoint) [RFC6845].

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

2.5. Конфигурация и рабочее состояние маршрутизатора OSPF

Контейнер ospf размещается на верхнем уровне модели и представляет экземпляр протокола OSPF с конфигурацией и рабочим состоянием на уровне маршрутизатора. Рабочее состояние включает статистику экземпляра, статистику задержки IETF SPF, базу данных LSDB (AS-Scope Link State Database), локальную таблицу RIB, журналы SPF и LSA.

   module: ietf-ospf
     augment /rt:routing/rt:control-plane-protocols/
              rt:control-plane-protocol:
       +--rw ospf
          .
          .
          +--rw address-family?       iana-rt-types:address-family
          +--rw enabled?              boolean
          +--rw explicit-router-id?   rt-types:router-id
          |                           {explicit-router-id}?
          +--rw preference
          |  +--rw (scope)?
          |     +--:(single-value)
          |     |  +--rw all?          uint8
          |     +--:(multi-values)
          |        +--rw (granularity)?
          |        |  +--:(detail)
          |        |  |  +--rw intra-area?   uint8
          |        |  |  +--rw inter-area?   uint8
          |        |  +--:(coarse)
          |        |     +--rw internal?     uint8
          |        +--rw external?     uint8
          +--rw nsr {nsr}?
          |  +--rw enabled?  boolean
          +--rw graceful-restart {graceful-restart}?
          |  +--rw enabled?                      boolean
          |  +--rw helper-enabled?               boolean
          |  +--rw restart-interval?             uint16
          |  +--rw helper-strict-lsa-checking?   boolean
          +--rw auto-cost {auto-cost}?
          |  +--rw enabled?               boolean
          |  +--rw reference-bandwidth?   uint32
          +--rw spf-control
          |  +--rw paths?            uint16 {max-ecmp}?
          |  +--rw ietf-spf-delay {ietf-spf-delay}?
          |     +--rw initial-delay?   uint32
          |     +--rw short-delay?     uint32
          |     +--rw long-delay?      uint32
          |     +--rw hold-down?       uint32
          |     +--rw time-to-learn?   uint32
          |     +--ro current-state?             enumeration
          |     +--ro remaining-time-to-learn?
          |                   rt-types:timer-value-milliseconds
          |     +--ro remaining-hold-down?
          |                   rt-types:timer-value-milliseconds
          |     +--ro last-event-received?       yang:timestamp
          |     +--ro next-spf-time?             yang:timestamp
          |     +--ro last-spf-time?             yang:timestamp
          +--rw database-control
          |  +--rw max-lsa?   uint32 {max-lsa}?
          +--rw stub-router {stub-router}?
          |  +--rw (trigger)?
          |     +--:(always)
          |        +--rw always!
          +--rw mpls
          |  +--rw te-rid {te-rid}?
          |  |  +--rw ipv4-router-id?   inet:ipv4-address
          |  |  +--rw ipv6-router-id?   inet:ipv6-address
          |  +--rw ldp
          |     +--rw igp-sync?   boolean {ldp-igp-sync}?
          +--rw fast-reroute {fast-reroute}?
          |  +--rw lfa {lfa}?
          +--rw node-tags {node-tag}?
          |  +--rw node-tag* [tag]
          |     +--rw tag      uint32
          +--ro router-id?          rt-types:router-id
          +--ro local-rib
          |  +--ro route* [prefix]
          |     +--ro prefix        inet:ip-prefix
          |     +--ro next-hops
          |     |  +--ro next-hop* []
          |     |     +--ro outgoing-interface?   if:interface-ref
          |     |     +--ro next-hop              inet:ip-address
          |     +--ro metric?       uint32
          |     +--ro route-type?   route-type
          |     +--ro route-tag?    uint32
          +--ro statistics
          |  +--ro discontinuity-time         yang:date-and-time
          |  +--ro originate-new-lsa-count?   yang:counter32
          |  +--ro rx-new-lsas-count?         yang:counter32
          |  +--ro as-scope-lsa-count?        yang:gauge32
          |  +--ro as-scope-lsa-chksum-sum?   uint32
          |  +--ro database
          |  |  +--ro as-scope-lsa-type*
          |  |     +--ro lsa-type?        uint16
          |  |     +--ro lsa-count?       yang:gauge32
          |  |     +--ro lsa-cksum-sum?   uint32
          |  +--ro protected-routes {fast-reroute}?
          |  |  +--ro address-family-stats*
          |  |         [address-family prefix alternate]
          |  |     +--ro address-family
          |  |         iana-rt-types:address-family
          |  |     +--ro prefix                  inet:ip-prefix
          |  |     +--ro alternate               inet:ip-address
          |  |     +--ro alternate-type?         enumeration
          |  |     +--ro best?                   boolean
          |  |     +--ro non-best-reason?        string
          |  |     +--ro protection-available?   bits
          |  |     +--ro alternate-metric-1?     uint32
          |  |     +--ro alternate-metric-2?     uint32
          |  |     +--ro alternate-metric-3?     uint32
          |  +--ro unprotected-routes {fast-reroute}?
          |  |  +--ro address-family-stats* [address-family prefix]
          |  |     +--ro address-family    iana-rt-types:address-family
          |  |     +--ro prefix            inet:ip-prefix
          |  +--ro protection-statistics* [frr-protection-method]
          |     +--ro frr-protection-method    string
          |     +--ro address-family-stats* [address-family]
          |        +--ro address-family
          |             iana-rt-types:address-family
          |        +--ro total-routes?           uint32
          |        +--ro unprotected-routes?     uint32
          |        +--ro protected-routes?       uint32
          |        +--ro linkprotected-routes?   uint32
          |        +--ro nodeprotected-routes?   uint32
          +--ro database
          |  +--ro as-scope-lsa-type* [lsa-type]
          |     +--ro as-scope-lsas
          |        +--ro as-scope-lsa* [lsa-id adv-router]
          |           +--ro lsa-id               union
          |           +--ro adv-router           inet:ipv4-address
          |           +--ro decoded-completed?   boolean
          |           +--ro raw-data?            yang:hex-string
          |           +--ro (version)?
          |              +--:(ospfv2)
          |              |  +--ro ospfv2
          .              .
          .              .
          |              +--:(ospfv3)
          |                 +--ro ospfv3
          .
          .
          +--ro spf-log
          |  +--ro event* [id]
          |     +--ro id                    uint32
          |     +--ro spf-type?             enumeration
          |     +--ro schedule-timestamp?   yang:timestamp
          |     +--ro start-timestamp?      yang:timestamp
          |     +--ro end-timestamp?        yang:timestamp
          |     +--ro trigger-lsa*
          |        +--ro area-id?      area-id-type
          |        +--ro type?         uint16
          |        +--ro lsa-id?       union
          |        +--ro adv-router?   rt-types:router-id
          |        +--ro seq-num?      uint32
          +--ro lsa-log
          |  +--ro event* [id]
          |     +--ro id                    uint32
          |     +--ro lsa
          |     |  +--ro area-id?      area-id-type
          |     |  +--ro type?         uint16
          |     |  +--ro lsa-id?       union
          |     |  +--ro adv-router?   rt-types:router-id
          |     |  +--ro seq-num?      uint32
          |     +--ro received-timestamp?   yang:timestamp
          |     +--ro reason?               identityref
          .
          .

2.6. Конфигурация и рабочее состояние области OSPF

Контейнер area содержит конфигурацию области OSPF и список контейнеров для всех интерфейсов OSPF в эту область. Рабочее состояние области включает статистику и LSDB.

   module: ietf-ospf
     augment /rt:routing/rt:control-plane-protocols/
              rt:control-plane-protocol:
       +--rw ospf
          .
          .
          +--rw areas
          |  +--rw area* [area-id]
          |     +--rw area-id                   area-id-type
          |     +--rw area-type?                identityref
          |     +--rw summary?                  boolean
          |     +--rw default-cost?             ospf-metric
          |     +--rw ranges
          |     |  +--rw range* [prefix]
          |     |     +--rw prefix       inet:ip-prefix
          |     |     +--rw advertise?   boolean
          |     |     +--rw cost?        ospf-metric
          |     +--rw topologies {ospf:multi-topology}?
          |     |  +--rw topology* [name]
          |     |     +--rw name  -> ../../../../../../../../
          |     |                    ../../../rt:ribs/rib/name
          |     |     +--rw summary?        boolean
          |     |     +--rw default-cost?   ospf-metric
          |     |     +--rw ranges
          |     |         +--rw range* [prefix]
          |     |            +--rw prefix       inet:ip-prefix
          |     |            +--rw advertise?   boolean
          |     |            +--rw cost?        ospf-metric
          |     +--ro statistics
          |     |  +--ro discontinuity-time           yang:date-and-time
          |     |  +--ro spf-runs-count?              yang:counter32
          |     |  +--ro abr-count?                   yang:gauge32
          |     |  +--ro asbr-count?                  yang:gauge32
          |     |  +--ro ar-nssa-translator-event-count?
          |     |                                     yang:counter32
          |     |  +--ro area-scope-lsa-count?        yang:gauge32
          |     |  +--ro area-scope-lsa-cksum-sum?    uint32
          |     |  +--ro database
          |     |     +--ro area-scope-lsa-type*
          |     |        +--ro lsa-type?        uint16
          |     |        +--ro lsa-count?       yang:gauge32
          |     |        +--ro lsa-cksum-sum?   uint32
          |     +--ro database
          |     |  +--ro area-scope-lsa-type* [lsa-type]
          |     |     +--ro lsa-type           uint16
          |     |     +--ro area-scope-lsas
          |     |        +--ro area-scope-lsa* [lsa-id adv-router]
          |     |           +--ro lsa-id               union
          .     .           .
          .     .           .
          |     |           +--ro (version)?
          |     |              +--:(ospfv2)
          |     |              |  +--ro ospfv2
          |     |              |     +--ro header
          .     .              .     .
          .     .              .     .
          |     |              |     +--ro body
          |     |              |        +--ro router
          .     .              .        .
          .     .              .        .
          |     |              |        +--ro network
          .     .              .        .
          .     .              .        .
          |     |              |        +--ro summary
          .     .              .        .
          .     .              .        .
          |     |              |        +--ro external
          .     .              .        .
          .     .              .        .
          |     |              |        +--ro opaque
          .     .              .        .
          .     .              .        .
          |     |              +--:(ospfv3)
          |     |                 +--ro ospfv3
          |     |                    +--ro header
          .     .                    .
          .     .                    .
          |     |                    +--ro body
          |     |                       +--ro router
          .     .                       .
          .     .                       .
          |     |                       +--ro network
          .     .                       .
          .     .                       .
          |     |                       +--ro inter-area-prefix
          .     .                       .
          .     .                       .
          |     |                       +--ro inter-area-router
          .     .                       .
          .     .                       .
          |     |                       +--ro as-external
          .     .                       .
          .     .                       .
          |     |                       +--ro nssa
          .     .                       .
          .     .                       .
          |     |                       +--ro link
          .     .                       .
          .     .                       .
          |     |                       +--ro intra-area-prefix
          .     .                       .
          .     .                       .
          |     |                       +--ro router-information
          .     .                       .
          .     .                       .
          |     +--rw virtual-links
          |     |  +--rw virtual-link* [transit-area-id router-id]
          |     |     +--rw transit-area-id       -> ../../../../
          |     |                                    area/area-id
          |     |     +--rw router-id             rt-types:router-id
          |     |     +--rw hello-interval?       uint16
          |     |     +--rw dead-interval?        uint32
          |     |     +--rw retransmit-interval?  uint16
          |     |     +--rw transmit-delay?       uint16
          |     |     +--rw lls?                  boolean {lls}?
          |     |     +--rw ttl-security {ttl-security}?
          |     |     |  +--rw enabled?  boolean
          |     |     |  +--rw hops?     uint8
          |     |     +--rw enabled?              boolean
          |     |     +--rw authentication
          |     |     |  +--rw (auth-type-selection)?
          |     |     |     +--:(ospfv2-auth)
          |     |     |     |  +--rw ospfv2-auth-trailer-rfc?
          |     |     |     |  |       ospfv2-auth-trailer-rfc-version
          |     |     |     |  |        {ospfv2-authentication-trailer}?
          |     |     |     |  +--rw (ospfv2-auth-specification)?
          |     |     |     |     +--:(auth-key-chain) {key-chain}?
          |     |     |     |     |  +--rw ospfv2-key-chain?
          |     |     |     |     |         key-chain:key-chain-ref
          |     |     |     |     +--:(auth-key-explicit)
          |     |     |     |        +--rw ospfv2-key-id?     uint32
          |     |     |     |        +--rw ospfv2-key?        string
          |     |     |     |        +--rw ospfv2-crypto-algorithm?
          |     |     |     |                identityref
          |     |     |     +--:(ospfv3-auth-ipsec)
          |     |     |     |      {ospfv3-authentication-ipsec}?
          |     |     |     |  +--rw sa?                       string
          |     |     |     +--:(ospfv3-auth-trailer)
          |     |     |        |  {ospfv3-authentication-trailer}?
          |     |     |        +--rw (ospfv3-auth-specification)?
          |     |     |           +--:(auth-key-chain) {key-chain}?
          |     |     |           |  +--rw ospfv3-key-chain?
          |     |     |           |          key-chain:key-chain-ref
          |     |     |           +--:(auth-key-explicit)
          |     |     |              +--rw ospfv3-sa-id?        uint16
          |     |     |              +--rw ospfv3-key?          string
          |     |     |              +--rw ospfv3-crypto-algorithm?
          |     |     |                      identityref
          |     |     +--ro cost?              ospf-link-metric
          |     |     +--ro state?             if-state-type
          |     |     +--ro hello-timer?       rt-types:
          |     |     |                         rtimer-value-seconds16
          |     |     +--ro wait-timer?        rt-types:
          |     |     |                         rtimer-value-seconds16
          |     |     +--ro dr-router-id?      rt-types:router-id
          |     |     +--ro dr-ip-addr?        inet:ip-address
          |     |     +--ro bdr-router-id?     rt-types:router-id
          |     |     +--ro bdr-ip-addr?       inet:ip-address
          |     |     +--ro statistics
          |     |     |  +--ro discontinuity-time     yang:date-and-time
          |     |     |  +--ro if-event-count?        yang:counter32
          |     |     |  +--ro link-scope-lsa-count?  yang:gauge32
          |     |     |  +--ro link-scope-lsa-cksum-sum?
          |     |     |                               uint32
          |     |     |  +--ro database
          |     |     |     +--ro link-scope-lsa-type*
          |     |     |        +--ro lsa-type?        uint16
          |     |     |        +--ro lsa-count?       yang:gauge32
          |     |     |        +--ro lsa-cksum-sum?   int32
          |     |     +--ro neighbors
          |     |     |  +--ro neighbor* [neighbor-router-id]
          |     |     |     +--ro neighbor-router-id
          |     |     |                           rt-types:router-id
          |     |     |     +--ro address?        inet:ip-address
          |     |     |     +--ro dr-router-id?   rt-types:router-id
          |     |     |     +--ro dr-ip-addr?     inet:ip-address
          |     |     |     +--ro bdr-router-id?  rt-types:router-id
          |     |     |     +--ro bdr-ip-addr?    inet:ip-address
          |     |     |     +--ro state?          nbr-state-type
          |     |     |     +--ro dead-timer? rt-types:
          |     |     |     |                  rtimer-value-seconds16
          |     |     |     +--ro statistics
          |     |     |        +--ro discontinuity-time
          |     |     |                           yang:date-and-time
          |     |     |        +--ro nbr-event-count?
          |     |     |                           yang:counter32
          |     |     |        +--ro nbr-retrans-qlen?
          |     |     |                           yang:gauge32
          |     |     +--ro database
          |     |        +--ro link-scope-lsa-type* [lsa-type]
          |     |           +--ro lsa-type           uint16
          |     |           +--ro link-scope-lsas
          .     .
          .     .
          |     +--rw sham-links {pe-ce-protocol}?
          |     |  +--rw sham-link* [local-id remote-id]
          |     |     +--rw local-id               inet:ip-address
          |     |     +--rw remote-id              inet:ip-address
          |     |     +--rw hello-interval?        uint16
          |     |     +--rw dead-interval?         uint32
          |     |     +--rw retransmit-interval?   uint16
          |     |     +--rw transmit-delay?        uint16
          |     |     +--rw lls?                   boolean {lls}?
          |     |     +--rw ttl-security {ttl-security}?
          |     |     |  +--rw enabled?  boolean
          |     |     |  +--rw hops?     uint8
          |     |     +--rw enabled?            boolean
          |     |     +--rw authentication
          |     |     |  +--rw (auth-type-selection)?
          |     |     |     +--:(ospfv2-auth)
          |     |     |     |  +--rw ospfv2-auth-trailer-rfc?
          |     |     |     |  |       ospfv2-auth-trailer-rfc-version
          |     |     |     |  |        {ospfv2-authentication-trailer}?
          |     |     |     |  +--rw (ospfv2-auth-specification)?
          |     |     |     |     +--:(auth-key-chain) {key-chain}?
          |     |     |     |     |  +--rw ospfv2-key-chain?
          |     |     |     |     |         key-chain:key-chain-ref
          |     |     |     |     +--:(auth-key-explicit)
          |     |     |     |        +--rw ospfv2-key-id?     uint32
          |     |     |     |        +--rw ospfv2-key?        string
          |     |     |     |        +--rw ospfv2-crypto-algorithm?
          |     |     |     |                identityref
          |     |     |     +--:(ospfv3-auth-ipsec)
          |     |     |     |      {ospfv3-authentication-ipsec}?
          |     |     |     |  +--rw sa?                       string
          |     |     |     +--:(ospfv3-auth-trailer)
          |     |     |        |  {ospfv3-authentication-trailer}?
          |     |     |        +--rw (ospfv3-auth-specification)?
          |     |     |           +--:(auth-key-chain) {key-chain}?
          |     |     |           |  +--rw ospfv3-key-chain?
          |     |     |           |          key-chain:key-chain-ref
          |     |     |           +--:(auth-key-explicit)
          |     |     |              +--rw ospfv3-sa-id?        uint16
          |     |     |              +--rw ospfv3-key?          string
          |     |     |              +--rw ospfv3-crypto-algorithm?
          |     |     |                      identityref
          |     |     +--rw cost?               ospf-link-metric
          |     |     +--rw mtu-ignore?         boolean
          |     |                               {mtu-ignore}?
          |     |     +--rw prefix-suppression? boolean
          |     |                               {prefix-suppression}?
          |     |     +--ro state?              if-state-type
          |     |     +--ro hello-timer?       rt-types:
          |     |     |                         rtimer-value-seconds16
          |     |     +--ro wait-timer?        rt-types:
          |     |     |                         rtimer-value-seconds16
          |     |     +--ro dr-router-id?       rt-types:router-id
          |     |     +--ro dr-ip-addr?         inet:ip-address
          |     |     +--ro bdr-router-id?      rt-types:router-id
          |     |     +--ro bdr-ip-addr?        inet:ip-address
          |     |     +--ro statistics
          |     |     |  +--ro discontinuity-time     yang:date-and-time
          |     |     |  +--ro if-event-count?        yang:counter32
          |     |     |  +--ro link-scope-lsa-count?  yang:gauge32
          |     |     |  +--ro link-scope-lsa-cksum-sum?
          |     |     |                               uint32
          |     |     |  +--ro database
          |     |     |     +--ro link-scope-lsa-type*
          |     |     |        +--ro lsa-type?        uint16
          |     |     |        +--ro lsa-count?       yang:gauge32
          |     |     |        +--ro lsa-cksum-sum?   uint32
          |     |     +--ro neighbors
          |     |     |  +--ro neighbor* [neighbor-router-id]
          |     |     |     +--ro neighbor-router-id
          |     |     |                           rt-types:router-id
          |     |     |     +--ro address?        inet:ip-address
          |     |     |     +--ro dr-router-id?   rt-types:router-id
          |     |     |     +--ro dr-ip-addr?     inet:ip-address
          |     |     |     +--ro bdr-router-id?  rt-types:router-id
          |     |     |     +--ro bdr-ip-addr?    inet:ip-address
          |     |     |     +--ro state?          nbr-state-type
          |     |     |     +--ro cost?           ospf-link-metric
          |     |     |     +--ro dead-timer? rt-types:
          |     |     |     |                  rtimer-value-seconds16
          |     |     |     +--ro statistics
          |     |     |        +--ro discontinuity-time?
          |     |     |                           yang:date-and-time
          |     |     |        +--ro nbr-event-count?
          |     |     |                           yang:counter32
          |     |     |        +--ro nbr-retrans-qlen?
          |     |     |                           yang:gauge32
          |     |     +--ro database
          |     |        +--ro link-scope-lsa-type* [lsa-type]
          |     |           +--ro lsa-type           uint16
          |     |           +--ro link-scope-lsas
          .     .
          .     .

2.7. Конфигурация и рабочее состояние интерфейса OSPF

Контейнер interface содержит конфигурацию и рабочее состояние интерфейса OSPF. Рабочее состояние интерфейса включает статистику интерфейса, список соседей и link-local LSDB.

   module: ietf-ospf
     augment /rt:routing/rt:control-plane-protocols/
              rt:control-plane-protocol:
       +--rw ospf
          .
          .
          +--rw areas
          |  +--rw area* [area-id]
          |     .
          |     .
          |     +--rw interfaces
          |        +--rw interface* [name]
          |           +--rw name                   if:interface-ref
          |           +--rw interface-type?        enumeration
          |           +--rw passive?               boolean
          |           +--rw demand-circuit?        boolean
          |                                        {demand-circuit}?
          |           +--rw priority?              uint8
          |           +--rw multi-areas {multi-area-adj}?
          |           |  +--rw multi-area* [multi-area-id]
          |           |     +--rw multi-area-id      area-id-type
          |           |     +--rw cost?              ospf-link-metric
          |           +--rw static-neighbors
          |           |  +--rw neighbor* [identifier]
          |           |     +--rw identifier       inet:ip-address
          |           |     +--rw cost?            ospf-link-metric
          |           |     +--rw poll-interval?   uint16
          |           |     +--rw priority?        uint8
          |           +--rw node-flag?             boolean
          |                                        {node-flag}?
          |           +--rw bfd {bfd}?
          |           |  +--rw enabled?            boolean
          |           |  +--rw local-multiplier?   multiplier
          |           |  |      {client-base-cfg-parms}?
          |           |  +--rw (interval-config-type)?
          |           |  |      {client-base-cfg-parms}?
          |           |     +--:(tx-rx-intervals)
          |           |     |  +--rw desired-min-tx-interval?  uint32
          |           |     |  +--rw required-min-rx-interval? uint32
          |           |     +--:(single-interval)
          |           |     |   {single-minimum-interval}?
          |           |        +--rw min-interval?             uint32
          |           +--rw fast-reroute {fast-reroute}?
          |           |  +--rw lfa {lfa}?
          |           |     +--rw candidate-enabled?  boolean
          |           |     +--rw enabled?            boolean
          |           |     +--rw remote-lfa {remote-lfa}?
          |           |        +--rw enabled?  boolean
          |           +--rw hello-interval?        uint16
          |           +--rw dead-interval?         uint32
          |           +--rw retransmit-interval?   uint16
          |           +--rw transmit-delay?        uint16
          |           +--rw lls?                   boolean {lls}?
          |           +--rw ttl-security {ttl-security}?
          |           |  +--rw enabled?  boolean
          |           |  +--rw hops?     uint8
          |           +--rw enabled?               boolean
          |           +--rw authentication
          |           |  +--rw (auth-type-selection)?
          |           |     +--:(ospfv2-auth)
          |           |     |  +--rw ospfv2-auth-trailer-rfc?
          |           |     |  |       ospfv2-auth-trailer-rfc-version
          |           |     |  |        {ospfv2-authentication-trailer}?
          |           |     |  +--rw (ospfv2-auth-specification)?
          |           |     |     +--:(auth-key-chain) {key-chain}?
          |           |     |     |  +--rw ospfv2-key-chain?
          |           |     |     |         key-chain:key-chain-ref
          |           |     |     +--:(auth-key-explicit)
          |           |     |        +--rw ospfv2-key-id?     uint32
          |           |     |        +--rw ospfv2-key?        string
          |           |     |        +--rw ospfv2-crypto-algorithm?
          |           |     |                identityref
          |           |     +--:(ospfv3-auth-ipsec)
          |           |     |      {ospfv3-authentication-ipsec}?
          |           |     |  +--rw sa?                       string
          |           |     +--:(ospfv3-auth-trailer)
          |           |        |  {ospfv3-authentication-trailer}?
          |           |        +--rw (ospfv3-auth-specification)?
          |           |           +--:(auth-key-chain) {key-chain}?
          |           |           |  +--rw ospfv3-key-chain?
          |           |           |          key-chain:key-chain-ref
          |           |           +--:(auth-key-explicit)
          |           |              +--rw ospfv3-sa-id?        uint16
          |           |              +--rw ospfv3-key?          string
          |           |              +--rw ospfv3-crypto-algorithm?
          |           |                      identityref
          |           +--rw cost?               ospf-link-metric
          |           +--rw mtu-ignore?         boolean
          |           |                         {mtu-ignore}?
          |           +--rw prefix-suppression? boolean
          |           |                         {prefix-suppression}?
          |           +--ro state?                 if-state-type
          |           +--ro hello-timer?       rt-types:
          |           |                         rtimer-value-seconds16
          |           +--ro wait-timer?        rt-types:
          |           |                         rtimer-value-seconds16
          |           +--ro dr-router-id?       rt-types:router-id
          |           +--ro dr-ip-addr?         inet:ip-address
          |           +--ro bdr-router-id?      rt-types:router-id
          |           +--ro bdr-ip-addr?        inet:ip-address
          |           +--ro statistics
          |           |  +--ro discontinuity-time?    yang:date-and-time
          |           |  +--ro if-event-count?        yang:counter32
          |           |  +--ro link-scope-lsa-count?  yang:gauge32
          |           |  +--ro link-scope-lsa-cksum-sum?
          |           |                               uint32
          |           |  +--ro database
          |           |     +--ro link-scope-lsa-type*
          |           |        +--ro lsa-type?        uint16
          |           |        +--ro lsa-count?       yang:gauge32
          |           |        +--ro lsa-cksum-sum?   int32
          |           +--ro neighbors
          |           |  +--ro neighbor* [neighbor-router-id]
          |           |     +--ro neighbor-router-id
          |           |                           rt-types:router-id
          |           |     +--ro address?        inet:ip-address
          |           |     +--ro dr-router-id?   rt-types:router-id
          |           |     +--ro dr-ip-addr?     inet:ip-address
          |           |     +--ro bdr-router-id?  rt-types:router-id
          |           |     +--ro bdr-ip-addr?    inet:ip-address
          |           |     +--ro state?          nbr-state-type
          |           |     +--ro dead-timer? rt-types:
          |           |     |                  rtimer-value-seconds16
          |           |     +--ro statistics
          |           |        +--ro discontinuity-time?
          |           |                           yang:date-and-time
          |           |        +--ro nbr-event-count?
          |           |                           yang:counter32
          |           |        +--ro nbr-retrans-qlen?
          |           |                           yang:gauge32
          |           +--ro database
          |           .  +--ro link-scope-lsa-type* [lsa-type]
          |           .     +--ro lsa-type           uint16
          |           .     +--ro link-scope-lsas
          .           .
          .           .
          |           +--rw topologies {ospf:multi-topology}?
          |           |  +--rw topology* [name]
          |           |     +--rw name  -> ../../../../../../../../
          |           |                    ../../../rt:ribs/rib/name
          |           |     +--rw cost? ospf-link-metric
          |           +--rw instance-id?           uint8
          .
          .

2.8. Уведомления OSPF

Эта модель YANG содержит все уведомления, информирующие клиентов YANG о важных событиях при работе протокола. Уведомления включают базовый набор ловушек (trap) из OSPFv2 MIB [RFC4750] и OSPFv3 MIB [RFC5643].

     notifications:
       +---n if-state-change
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro (if-link-type-selection)?
       |  |  +--:(interface)
       |  |  |  +--ro interface
       |  |  |     +--ro interface?   if:interface-ref
       |  |  +--:(virtual-link)
       |  |  |  +--ro virtual-link
       |  |  |     +--ro transit-area-id?      area-id-type
       |  |  |     +--ro neighbor-router-id?   rt-types:router-id
       |  |  +--:(sham-link)
       |  |     +--ro sham-link
       |  |        +--ro area-id?          area-id-type
       |  |        +--ro local-ip-addr?    inet:ip-address
       |  |        +--ro remote-ip-addr?   inet:ip-address
       |  +--ro state?                   if-state-type
       +---n if-config-error
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro (if-link-type-selection)?
       |  |  +--:(interface)
       |  |  |  +--ro interface
       |  |  |     +--ro interface?   if:interface-ref
       |  |  +--:(virtual-link)
       |  |  |  +--ro virtual-link
       |  |  |     +--ro transit-area-id?      area-id-type
       |  |  |     +--ro neighbor-router-id?   rt-types:router-id
       |  |  +--:(sham-link)
       |  |     +--ro sham-link
       |  |        +--ro area-id?          area-id-type
       |  |        +--ro local-ip-addr?    inet:ip-address
       |  |        +--ro remote-ip-addr?   inet:ip-address
       |  +--ro packet-source?           yang:dotted-quad
       |  +--ro packet-type?             packet-type
       |  +--ro error?                   enumeration
       +---n nbr-state-change
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro (if-link-type-selection)?
       |  |  +--:(interface)
       |  |  |  +--ro interface
       |  |  |     +--ro interface?   if:interface-ref
       |  |  +--:(virtual-link)
       |  |  |  +--ro virtual-link
       |  |  |     +--ro transit-area-id?      area-id-type
       |  |  |     +--ro neighbor-router-id?   rt-types:router-id
       |  |  +--:(sham-link)
       |  |     +--ro sham-link
       |  |        +--ro area-id?          area-id-type
       |  |        +--ro local-ip-addr?    inet:ip-address
       |  |        +--ro remote-ip-addr?   inet:ip-address
       |  +--ro neighbor-router-id?      rt-types:router-id
       |  +--ro neighbor-ip-addr?        yang:dotted-quad
       |  +--ro state?                   nbr-state-type
       +---n nbr-restart-helper-status-change
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro (if-link-type-selection)?
       |  |  +--:(interface)
       |  |  |  +--ro interface
       |  |  |     +--ro interface?   if:interface-ref
       |  |  +--:(virtual-link)
       |  |  |  +--ro virtual-link
       |  |  |     +--ro transit-area-id?      area-id-type
       |  |  |     +--ro neighbor-router-id?   rt-types:router-id
       |  |  +--:(sham-link)
       |  |     +--ro sham-link
       |  |        +--ro area-id?          area-id-type
       |  |        +--ro local-ip-addr?    inet:ip-address
       |  |        +--ro remote-ip-addr?   inet:ip-address
       |  +--ro neighbor-router-id?      rt-types:router-id
       |  +--ro neighbor-ip-addr?        yang:dotted-quad
       |  +--ro status?                  restart-helper-status-type
       |  +--ro age?                     rt-types:timer-value-seconds16
       |  +--ro exit-reason?             restart-exit-reason-type
       +---n if-rx-bad-packet
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro (if-link-type-selection)?
       |  |  +--:(interface)
       |  |  |  +--ro interface
       |  |  |     +--ro interface?   if:interface-ref
       |  |  +--:(virtual-link)
       |  |  |  +--ro virtual-link
       |  |  |     +--ro transit-area-id?      area-id-type
       |  |  |     +--ro neighbor-router-id?   rt-types:router-id
       |  |  +--:(sham-link)
       |  |     +--ro sham-link
       |  |        +--ro area-id?          area-id-type
       |  |        +--ro local-ip-addr?    inet:ip-address
       |  |        +--ro remote-ip-addr?   inet:ip-address
       |  +--ro packet-source?           yang:dotted-quad
       |  +--ro packet-type?             packet-type
       +---n lsdb-approaching-overflow
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro ext-lsdb-limit?          uint32
       +---n lsdb-overflow
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro ext-lsdb-limit?          uint32
       +---n nssa-translator-status-change
       |  +--ro routing-protocol-name?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol/name
       |  +--ro address-family?
       |  +     -> /rt:routing/control-plane-protocols/
       |  +         control-plane-protocol[rt:name=current()/../
       |  +         routing-protocol-name]/ospf/address-family
       |  +--ro area-id?                 area-id-type
       |  +--ro status?                  nssa-translator-state-type
       +---n restart-status-change
          +--ro routing-protocol-name?
          +     -> /rt:routing/control-plane-protocols/
          +         control-plane-protocol/name
          +--ro address-family?
          +     -> /rt:routing/control-plane-protocols/
          +         control-plane-protocol[rt:name=current()/../
          +         routing-protocol-name]/ospf/address-family
          +--ro status?                  restart-status-type
          +--ro restart-interval?        uint16
          +--ro exit-reason?             restart-exit-reason-type

2.9. Операции OSPF RPC

Модуль ietf-ospf задаёт две операции RPC.

clear-database

Сброс содержимого конкретной базы OSPF LSDB с переводом отношений смежности в состояние DOWN и повторным созданием собственных анонсов LSA.

clear-neighbor

Сброс конкретного соседа или группы соседей OSPF, связанных с интерфейсом OSPF.
     rpcs:
       +---x clear-neighbor
       |  +---w input
       |     +---w routing-protocol-name
       |     +     -> /rt:routing/control-plane-protocols/
       |     +         control-plane-protocol/name
       |     +---w interface?               if:interface-ref
       +---x clear-database
          +---w input
             +---w routing-protocol-name
                   -> /rt:routing/control-plane-protocols/
                       control-plane-protocol/name

3. Модуль YANG OSPF

Модуль YANG ietf-ospf ссылается на [RFC0905], [RFC1765], [RFC1793], [RFC2328], [RFC3101], [RFC3623], [RFC3630], [RFC4552], [RFC4576], [RFC4577], [RFC4915], [RFC4973], [RFC5082], [RFC5185], [RFC5187], [RFC5250], [RFC5286], [RFC5309], [RFC5329], [RFC5340], [RFC5443], [RFC5613], [RFC5642], [RFC5709], [RFC5714], [RFC5838], [RFC5880], [RFC5881], [RFC6565], [RFC6845], [RFC6860], [RFC6987], [RFC6991], [RFC7166], [RFC7474], [RFC7490], [RFC7684], [RFC7770], [RFC7777], [RFC7884], [RFC8177], [RFC8294], [RFC8343], [RFC8349], [RFC8405], [RFC8476], [RFC9314].

   <CODE BEGINS> file "ietf-ospf@2022-10-19.yang"
   module ietf-ospf {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-ospf";

     prefix ospf;

     import ietf-inet-types {
       prefix inet;
       reference
         "RFC 6991: Common YANG Data Types";
     }

     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types";
     }

     import ietf-interfaces {
       prefix if;
       reference
         "RFC 8343: A YANG Data Model for Interface Management";
     }

     import ietf-routing-types {
       prefix rt-types;
       reference
         "RFC 8294: Common YANG Data Types for the Routing Area";
     }

     import iana-routing-types {
       prefix iana-rt-types;
       reference
         "RFC 8294: Common YANG Data Types for the Routing Area";
     }

     import ietf-routing {
       prefix rt;
       reference
         "RFC 8349: A YANG Data Model for Routing Management
          (NMDA Version)";
     }

     import ietf-key-chain {
       prefix key-chain;
       reference
         "RFC 8177: YANG Data Model for Key Chains";
     }

     import ietf-bfd-types {
       prefix bfd-types;
       reference
         "RFC 9314: YANG Data Model for Bidirectional Forwarding
          Detection (BFD)";
     }

     organization
       "IETF Link State Routing (lsr) Working Group";

     contact
       "WG Web:   <https://datatracker.ietf.org/wg/lsr/> 
        WG List:  <mailto:lsr@ietf.org> 

        Editor:   Derek Yeung
                  <mailto:derek@arrcus.com> 
        Author:   Acee Lindem
                  <mailto:acee@cisco.com> 
        Author:   Yingzhen Qu
                  <mailto:yingzhen.qu@futurewei.com> 
        Author:   Jeffrey Zhang
                  <mailto:zzhang@juniper.net> 
        Author:   Ing-Wher Chen
                  <mailto:ingwherchen@mitre.org>"; 

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

        Эта модель YANG соответствует архитектуре NMDA (RFC 8342).

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

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

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

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

     revision 2022-10-19 {
       description
         "Исходный выпуск.";
       reference
         "RFC 9129: YANG Data Model for the OSPF Protocol";
     }

     feature multi-topology {
       description
         "Поддержка маршрутизации Multi-Topology (MT).";
       reference
         "RFC 4915: Multi-Topology (MT) Routing in OSPF";
     }

     feature multi-area-adj {
       description
         "Поддержка смежности с несколькими областями (RFC 5185).";
       reference
         "RFC 5185: OSPF Multi-Area Adjacency";
     }

     feature explicit-router-id {
       description
         "Явно задаёт Router ID на уровне экземпляра.";
     }

     feature demand-circuit {
       description
         "Поддержка устройств OSPF demand (RFC 1793).";
       reference
         "RFC 1793: Extending OSPF to Support Demand Circuits";
     }

     feature mtu-ignore {
       description
         "Запрет проверки несоответствия MTU для пакетов OSPF 
          Database Description, описанной в спецификации OSPFv2
          (RFC 2328). Проверка применима и к OSPFv3 (RFC 5340).";
       reference
         "RFC 2328: OSPF Version 2, Section 10.6
          RFC 5340: OSPF for IPv6";
     }

     feature lls {
       description
         "Сигнализация OSPF LLS, определённая в RFC 5613.";
       reference
         "RFC 5613: OSPF Link-Local Signaling";
     }

     feature prefix-suppression {
       description
         "Поддержка подавления префиксов OSPF, описанная в RFC 6860.";
       reference
         "RFC 6860: Hiding Transit-Only Networks in OSPF";
     }

     feature ttl-security {
       description
         "Поддержка проверки безопасности OSPF Time TTL.";
       reference
         "RFC 5082: The Generalized TTL Security Mechanism (GTSM)";
     }

     feature nsr {
       description
         "Поддержка безостановочной маршрутизации (NSR). Функция 
          позволяет маршрутизатору с избыточностью плоскости управления
          (например, с двойными платами RP) поддерживать своё состояние
          и смежности при плановом или неплановом перезапуске экземпляра
          OSPF. Это отличается от аккуратного перезапуска и 
          безостановочной пересылки (NSF) тем, что для восстановления
          состоянии плоскости управления не требуется протокол
          сигнализации или содействие соседей OSPF .";
     }

     feature graceful-restart {
       description
         "Аккуратный перезапуск OSPF в соответствии с RFC 3623 и 5187.";
       reference
         "RFC 3623: Graceful OSPF Restart
          RFC 5187: OSPFv3 Graceful Restart";
     }

     feature auto-cost {
       description
         "Расчёт стоимости для интерфейса OSPF по эталонной пропускной
          способности.";
       reference
         "RFC 2328: OSPF Version 2";
     }

     feature max-ecmp {
       description
         "Задаёт максимальное число путей ECMP.";
     }

     feature max-lsa {
       description
         "Максимальной число анонсов LSA, воспринимаемых экземпляром.";
       reference
         "RFC 1765: OSPF Database Overflow";
     }

     feature te-rid {
       description
         "Поддержка настройки TE Router ID, т. е. Router Address TLV 
          (параграф 2.4.1 в RFC 3630) или Router IPv6 Address TLV
          (раздел 3 в RFC 5329).";
       reference
         "RFC 3630: Traffic Engineering (TE) Extensions to
          OSPF Version 2, Section 2.4.1
          RFC 5329: Traffic Engineering Extensions to OSPF Version 3,
          Section 3";
     }

     feature ldp-igp-sync {
       description
         "Синхронизация LDP IGP.";
       reference
         "RFC 5443: LDP IGP Synchronization";
     }

     feature ospfv2-authentication-trailer {
       description
         "Поддержка трейлера аутентификации OSPFv2.";
       reference
         "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication
          RFC 7474: Security Extension for OSPFv2 When
          Using Manual Key Management";
     }

     feature ospfv3-authentication-ipsec {
       description
         "Поддержка IPsec для аутентификации OSPFv3.";
       reference
         "RFC 4552: Authentication/Confidentiality for OSPFv3";
     }

     feature ospfv3-authentication-trailer {
       description
         "Поддержка трейлера аутентификации OSPFv3.";
       reference
         "RFC 7166: Supporting Authentication Trailer for OSPFv3";
     }

     feature fast-reroute {
       description
         "Поддержка IP Fast Reroute (IP-FRR).";
       reference
         "RFC 5714: IP Fast Reroute Framework";
     }

     feature key-chain {
       description
         "Поддержка цепочки ключей для аутентификации.";
       reference
         "RFC 8177: YANG Data Model for Key Chains";
     }

     feature node-flag {
       description
         "Поддержка флагов узла для префиксов OSPF.";
       reference
         "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
     }

     feature node-tag {
       description
         "Поддержка административных флагов узла для экземпляров 
          маршрутизации OSPF.";
       reference
         "RFC 7777: Advertising Node Administrative Tags in OSPF";
     }

     feature lfa {
       description
         "Поддержка Loop-Free Alternate (LFA).";
       reference
         "RFC 5286: Basic Specification for IP Fast Reroute:
          Loop-Free Alternates";
     }

     feature remote-lfa {
       description
         "Поддержка Remote LFA (R-LFA).";
       reference
         "RFC 7490: Remote Loop-Free Alternate (LFA) Fast Reroute
          (FRR)";
     }

     feature stub-router {
       description
         "Поддержка анонсов тупиковых маршрутизаторов OSPF (RFC 6987).";
       reference
         "RFC 6987: OSPF Stub Router Advertisement";
     }

     feature pe-ce-protocol {
       description
         "Поддержка OSPF в качестве протокола PE-CE.";
       reference
         "RFC 4577: OSPF as the Provider/Customer Edge Protocol
          for BGP/MPLS IP Virtual Private Networks (VPNs)
          RFC 6565: OSPFv3 as a Provider Edge to Customer Edge (PE-CE)
          Routing Protocol";
     }

     feature ietf-spf-delay {
       description
         "Поддержка алгоритма задержки IETF SPF.";
       reference
         "RFC 8405: Shortest Path First (SPF) Back-Off Delay Algorithm
          for Link-State IGPs";
     }

     feature bfd {
       description
         "Поддержка BFD для обнаружения доступности соседей OSPF.";
       reference
         "RFC 5880: Bidirectional Forwarding Detection (BFD)
          RFC 5881: Bidirectional Forwarding Detection
          (BFD) for IPv4 and IPv6 (Single Hop)";
     }

     feature hybrid-interface {
       description
         "Поддержка гибридных интерфейсов OSPF.";
       reference
         "RFC 6845: OSPF Hybrid Broadcast and
          Point-to-Multipoint Interface Type";
     }

     identity ospf {
       base rt:routing-protocol;
       description
         "Любая версия протокола OSPF.";
     }

     identity ospfv2 {
       base ospf;
       description
         "Протокол OSPFv2.";
     }

     identity ospfv3 {
       base ospf;
       description
         "Протокол OSPFv3.";
     }

     identity area-type {
       description
         "Базовый идентификатор для типа области OSPF.";
     }

     identity normal-area {
       base area-type;
       description
         "Обычная область OSPF.";
     }

     identity stub-nssa-area {
       base area-type;
       description
         "Тупиковая или NSSA область OSPF.";
     }

     identity stub-area {
       base stub-nssa-area;
       description
         "Тупиковая область OSPF.";
     }

     identity nssa-area {
       base stub-nssa-area;
       description
         "OSPF NSSA.";
       reference
         "RFC 3101: The OSPF Not-So-Stubby Area (NSSA) Option";
     }

     identity ospf-lsa-type {
       description
         "Базовый идентификатор типов LSA для OSPFv2 и OSPFv3.";
     }

     identity ospfv2-lsa-type {
       base ospf-lsa-type;
       description
         "Типы OSPFv2 LSA.";
     }

     identity ospfv2-router-lsa {
       base ospfv2-lsa-type;
       description
         "OSPFv2 Router-LSA - тип 1.";
     }

     identity ospfv2-network-lsa {
       base ospfv2-lsa-type;
       description
         "OSPFv2 Network-LSA - тип 2.";
     }

     identity ospfv2-summary-lsa-type {
       base ospfv2-lsa-type;
       description
         "Типы OSPFv2 summary LSA.";
     }

     identity ospfv2-network-summary-lsa {
       base ospfv2-summary-lsa-type;
       description
         "OSPFv2 Network summary LSA - тип 3.";
     }

     identity ospfv2-asbr-summary-lsa {
       base ospfv2-summary-lsa-type;
       description
         "OSPFv2 ASBR summary LSA - тип 4.";
     }

     identity ospfv2-external-lsa-type {
       base ospfv2-lsa-type;
       description
         "OSPFv2 External-LSA.";
     }

     identity ospfv2-as-external-lsa {
       base ospfv2-external-lsa-type;
       description
         "OSPFv2 AS-External-LSA - тип 5.";
     }

     identity ospfv2-nssa-lsa {
       base ospfv2-external-lsa-type;
       description
         "OSPFv2 NSSA-LSA - тип 7.";
     }

     identity ospfv2-opaque-lsa-type {
       base ospfv2-lsa-type;
       description
         "Типы OSPFv2 Opaque-LSA.";
       reference
         "RFC 5250: The OSPF Opaque LSA Option";
     }

     identity ospfv2-link-scope-opaque-lsa {
       base ospfv2-opaque-lsa-type;
       description
         "OSPFv2 Link-Scope Opaque-LSA - тип 9.";
     }

     identity ospfv2-area-scope-opaque-lsa {
       base ospfv2-opaque-lsa-type;
       description
         "OSPFv2 Area-Scope Opaque-LSA - тип 10.";
     }

     identity ospfv2-as-scope-opaque-lsa {
       base ospfv2-opaque-lsa-type;
       description
         "OSPFv2 AS-Scope Opaque-LSA - тип 11.";
     }

     identity ospfv2-unknown-lsa-type {
       base ospfv2-lsa-type;
       description
         "Неизвестный тип OSPFv2 LSA.";
     }

     identity ospfv3-lsa-type {
       base ospf-lsa-type;
       description
         "Типы OSPFv3 LSA.";
       reference
         "RFC 5340: OSPF for IPv6";
     }

     identity ospfv3-router-lsa {
       base ospfv3-lsa-type;
       description
         "OSPFv3 Router-LSA - тип 0x2001.";
     }

     identity ospfv3-network-lsa {
       base ospfv3-lsa-type;
       description
         "OSPFv3 Network-LSA - тип 0x2002.";
     }

     identity ospfv3-summary-lsa-type {
       base ospfv3-lsa-type;
       description
         "Типы OSPFv3 summary LSA.";
     }

     identity ospfv3-inter-area-prefix-lsa {
       base ospfv3-summary-lsa-type;
       description
         "OSPFv3 Inter-Area-Prefix-LSA - тип 0x2003.";
     }

     identity ospfv3-inter-area-router-lsa {
       base ospfv3-summary-lsa-type;
       description
         "OSPFv3 Inter-Area-Router-LSA - тип 0x2004.";
     }

     identity ospfv3-external-lsa-type {
       base ospfv3-lsa-type;
       description
         "Типы OSPFv3 External-LSA.";
     }

     identity ospfv3-as-external-lsa {
       base ospfv3-external-lsa-type;
       description
         "OSPFv3 AS-External-LSA - тип 0x4005.";
     }

     identity ospfv3-nssa-lsa {
       base ospfv3-external-lsa-type;
       description
         "OSPFv3 NSSA-LSA - тип 0x2007.";
     }

     identity ospfv3-link-lsa {
       base ospfv3-lsa-type;
       description
         "OSPFv3 Link-LSA - тип 0x0008.";
     }

     identity ospfv3-intra-area-prefix-lsa {
       base ospfv3-lsa-type;
       description
         "OSPFv3 Intra-Area-Prefix-LSA - тип 0x2009.";
     }

     identity ospfv3-router-information-lsa {
       base ospfv3-lsa-type;
       description
         "OSPFv3 Router-Information-LSA - тип 0x800C, 0xA00C, 0xC00C.";
     }

     identity ospfv3-unknown-lsa-type {
       base ospfv3-lsa-type;
       description
         "Неизвестный тип OSPFv3 LSA.";
     }

     identity lsa-log-reason {
       description
         "Базовый идентификатор для причины записи LSA.";
     }

     identity lsa-refresh {
       base lsa-log-reason;
       description
         "Идентификатор записи LSA в результате приёма обновления LSA.";
     }

     identity lsa-content-change {
       base lsa-log-reason;
       description
         "Идентификатор записи LSA в результате изменения содержимого.";
     }

     identity lsa-purge {
       base lsa-log-reason;
       description
         "Идентификатор записи LSA в результате очистки.";
     }

     identity informational-capability {
       description
         "Базовый идентификатор возможностей маршрутизатора.";
     }

     identity graceful-restart {
       base informational-capability;
       description
         "Маршрутизатор поддерживает аккуратный перезапуск.";
       reference
         "RFC 3623: Graceful OSPF Restart
          RFC 5187: OSPFv3 Graceful Restart";
     }

     identity graceful-restart-helper {
       base informational-capability;
       description
         "Маршрутизатор способен помогать аккуратному перезапуску.";
       reference
         "RFC 3623: Graceful OSPF Restart
          RFC 5187: OSPFv3 Graceful Restart";
     }

     identity stub-router {
       base informational-capability;
       description
         "Маршрутизатор способен быть тупиковым OSPF stub.";
       reference
         "RFC 6987: OSPF Stub Router Advertisement";
     }

     identity traffic-engineering {
       base informational-capability;
       description
         "Маршрутизатор может поддерживать OSPF TE.";
       reference
         "RFC 3630: Traffic Engineering (TE) Extensions to
          OSPF Version 2
          RFC 5329: Traffic Engineering Extensions to OSPF Version 3";
     }

     identity p2p-over-lan {
       base informational-capability;
       description
         "Маршрутизатор может поддерживать соединения OSPF «точка-точка»
          через ЛВС.";
       reference
         "RFC 5309: Point-to-Point Operation over LAN in Link State
          Routing Protocols";
     }

     identity experimental-te {
       base informational-capability;
       description
         "Маршрутизатор может поддерживать экспериментальный OSPF TE.";
       reference
         "RFC 4973: OSPF-xTE: Experimental Extension to OSPF for
          Traffic Engineering";
     }

     identity router-lsa-bit {
       description
         "Базовый идентификатор для битов Router-LSA.";
     }

     identity vlink-end-bit {
       base router-lsa-bit;
       description
         "Бит V, указывающий, что маршрутизатор является конечной
          точкой одного или нескольких виртуальных каналов.";
     }

     identity asbr-bit {
       base router-lsa-bit;
       description
         "Бит E, указывающий, что маршрутизатор является ASBR.";
     }

     identity abr-bit {
       base router-lsa-bit;
       description
         "Бит B, указывающий, что маршрутизатор является ABR.";
     }

     identity nssa-bit {
       base router-lsa-bit;
       description
         "Бит Nt, указывающий, что маршрутизатор является граничным для
          NSSA и безусловно транслирует NSSA-LSA в AS-External-LSA.";
     }

     identity ospfv3-lsa-option {
       description
         "базовый идентификатор для опций OSPF LSA.";
     }

     identity af-bit {
       base ospfv3-lsa-option;
       description
         "Бит AF, указывающий поддержку маршрутизатором семейств адресов
          OSPFv3, как описано в RFC 5838.";
       reference
         "RFC 5838: Support of Address Families in OSPFv3";
     }

     identity dc-bit {
       base ospfv3-lsa-option;
       description
         "Бит DC, указывающий поддержку demand-устройств.";
     }

     identity r-bit {
       base ospfv3-lsa-option;
       description
         "Бит R, указывающий активность инициатора.";
     }

     identity n-bit {
       base ospfv3-lsa-option;
       description
         "Бит N, указывающий подключение маршрутизатора к NSSA.";
     }

     identity e-bit {
       base ospfv3-lsa-option;
       description
         "Бит E, описывающий способ лавинной рассылки AS-External-LSA.";
     }

     identity v6-bit {
       base ospfv3-lsa-option;
       description
         "Бит V6, сброс которого исключает маршрутизатор/канал из
          расчётов маршрутизации IPv6.";
     }

     identity ospfv3-prefix-option {
       description
         "Базовый идентификатор для опций префиксов OSPFv3.";
     }

     identity nu-bit {
       base ospfv3-prefix-option;
       description
         "Бит NU, указывающий исключение префикса из расчётов 
          IPv6 unicast.";
     }

     identity la-bit {
       base ospfv3-prefix-option;
       description
         "Бит LA, указывающий, что префикс является адресом IPv6
          интерфейса анонсирующего маршрутизатора.";
     }

     identity p-bit {
       base ospfv3-prefix-option;
       description
         "Бит P, указывающий, что префикс NSSA следует транслировать в
          AS-External-LSA и анонсировать транслирующему граничному
          маршрутизатору NSSA.";
     }

     identity dn-bit {
       base ospfv3-prefix-option;
       description
         "Бит DN, указывающий, что Inter-Area-Prefix-LSA или префикс
          AS-External-LSA анонсируется как префикс L3VPN.";
     }

     identity ospfv2-lsa-option {
       description
         "базовый идентификатор для опций OSPFv2 LSA.";
     }

     identity mt-bit {
       base ospfv2-lsa-option;
       description
         "Бит MT, указывающий что маршрутизатор поддерживает несколько
          топологий, как описано в RFC 4915.";
       reference
         "RFC 4915: Multi-Topology (MT) Routing in OSPF";
     }

     identity v2-dc-bit {
       base ospfv2-lsa-option;
       description
         "Бит DC, указывающий поддержку demand-устройств.";
     }

     identity v2-p-bit {
       base ospfv2-lsa-option;
       description
         "Бит P, используемый только для LSA типа 7 и указывающий, что
          граничному маршрутизатору NSSA следует транслировать LSA типа
          7 в LSA типа 5.";
     }

     identity mc-bit {
       base ospfv2-lsa-option;
       description
         "Бит MC, указывающий поддержку маршрутизатором MOSPF.";
     }

     identity v2-e-bit {
       base ospfv2-lsa-option;
       description
         "Бит E, описывающий способ лавинной рассылки AS-External-LSA.";
     }

     identity o-bit {
       base ospfv2-lsa-option;
       description
         "Бит O, указывающий поддержку опции Opaque LSA (RFC 5250).";
       reference
         "RFC 5250: The OSPF Opaque LSA Option";
     }

     identity v2-dn-bit {
       base ospfv2-lsa-option;
       description
         "Бит DN, который должен устанавливаться при передаче LSA типов
          3, 5, 7 от PE к CE (RFC 4576).";
       reference
         "RFC 4576: Using a Link State Advertisement (LSA) Options Bit
          to Prevent Looping in BGP/MPLS IP Virtual Private Networks
          (VPNs)";
     }

     identity ospfv2-extended-prefix-flag {
       description
         "Базовый идентификатор для флага Extended Prefix TLV.";
     }

     identity a-flag {
       base ospfv2-extended-prefix-flag;
       description
         "Флаг присоединения, указывающий что префикс соответствует
          маршруту, напрямую соединённому с анонсирующим 
          маршрутизатором.";
     }

     identity node-flag {
       base ospfv2-extended-prefix-flag;
       description
         "Флаг узла, указывающий, что префикс служит для представления
          анонсирующего узла (т. е. адреса loopback.";
     }

     typedef ospf-metric {
       type uint32 {
         range "0 .. 16777215";
       }
       description
         "Метрика OSPF. 24-битовое целое число без знака.";
     }

     typedef ospf-link-metric {
       type uint16 {
         range "0 .. 65535";
       }
       description
         "метрика канала OSPF.  16-битовое целое число без знака .";
     }

     typedef opaque-id {
       type uint32 {
         range "0 .. 16777215";
       }
       description
         "Opaque-LSA ID. 24-битовое целое число без знака .";
     }

     typedef area-id-type {
       type yang:dotted-quad;
       description
         "Тип Area ID.";
     }

     typedef route-type {
       type enumeration {
         enum intra-area {
           description
             "Внутриобластной маршрут OSPF.";
         }
         enum inter-area {
           description
             "Межобластной маршрут OSPF.";
         }
         enum external-1 {
           description
             "Внешний маршрут OSPF типа 1.";
         }
         enum external-2 {
           description
             "Внешний маршрут OSPF типа 2.";
         }
         enum nssa-1 {
           description
             "Маршрут OSPF NSSA типа 1.";
         }
         enum nssa-2 {
           description
             "Маршрут OSPF NSSA типа 2.";
         }
       }
       description
         "Тип маршрута OSPF.";
     }

     typedef if-state-type {
       type enumeration {
         enum down {
           value 1;
           description
             "Интерфейс в состоянии Down.";
         }
         enum loopback {
           value 2;
           description
             "Интерфейс в состоянии Loopback.";
         }
         enum waiting {
           value 3;
           description
             "Интерфейс в состоянии Waiting.";
         }
         enum point-to-point {
           value 4;
           description
             "Интерфейс в состоянии Point-to-point.";
         }
         enum dr {
           value 5;
           description
             "Интерфейс в состоянии DR.";
         }
         enum bdr {
           value 6;
           description
             "Интерфейс в состоянии Backup.";
         }
         enum dr-other {
           value 7;
           description
             "Интерфейс в состоянии DR Other.";
         }
       }
       description
         "Тип состояния интерфейса OSPF.";
       reference
         "RFC 2328: OSPF Version 2";
     }

     typedef router-link-type {
       type enumeration {
         enum point-to-point-link {
           value 1;
           description
             "Канал «точка-точка» к другому маршрутизатору.";
         }
         enum transit-network-link {
           value 2;
           description
             "Канал в транзитную сеть, указанную DR.";
         }
         enum stub-network-link {
           value 3;
           description
             "Канал в тупиковую сеть (stub), указанную подсетью.";
         }
         enum virtual-link {
           value 4;
           description
             "Виртуальный канал через транзитную область.";
         }
       }
       description
         "Тип канала маршрутизатора OSPF.";
     }

     typedef nbr-state-type {
       type enumeration {
         enum down {
           value 1;
           description
             "Сосед в состоянии Down.";
         }
         enum attempt {
           value 2;
           description
             "Сосед в состоянии Attempt.";
         }
         enum init {
           value 3;
           description
             "Сосед в состоянии Init.";
         }
         enum 2-way {
           value 4;
           description
             "Сосед в состоянии 2-Way.";
         }
         enum exstart {
           value 5;
           description
             "Сосед в состоянии ExStart (начало обмена).";
         }
         enum exchange {
           value 6;
           description
             "Сосед в состоянии Exchange.";
         }
         enum loading {
           value 7;
           description
             "Сосед в состоянии Loading.";
         }
         enum full {
           value 8;
           description
             "Сосед в состоянии Full.";
         }
       }
       description
         "Тип состояния соседа OSPF.";
       reference
         "RFC 2328: OSPF Version 2";
     }

     typedef restart-helper-status-type {
       type enumeration {
         enum not-helping {
           value 1;
           description
             "Состояние помощника в перезапуске not-helping.";
         }
         enum helping {
           value 2;
           description
             "Состояние помощника в перезапуске helping.";
         }
       }
       description
         "Состояние помощника в перезапуске.";
     }

     typedef restart-exit-reason-type {
       type enumeration {
         enum none {
           value 1;
           description
             "Перезапуск не предпринимался.";
         }
         enum in-progress {
           value 2;
           description
             "Перезапуск выполняется.";
         }
         enum completed {
           value 3;
           description
             "Перезапуск завершен.";
         }
         enum timed-out {
           value 4;
           description
             "Тайм-аут при перезапуске.";
         }
         enum topology-changed {
           value 5;
           description
             "Перезапуск прерван из-за изменения топологии.";
         }
       }
       description
         "Описывает результат последней попытки аккуратного перезапуска.
          Локальный маршрутизатор перезапускается или помогает.";
     }

     typedef packet-type {
       type enumeration {
         enum hello {
           value 1;
           description
             "Пакет OSPF Hello.";
         }
         enum database-description {
           value 2;
           description
             "Пакет OSPF Database Description.";
         }
         enum link-state-request {
           value 3;
           description
             "Пакет OSPF Link State Request.";
         }
         enum link-state-update {
           value 4;
           description
             "Пакет OSPF Link State Update.";
         }
         enum link-state-ack {
           value 5;
           description
             "Пакет OSPF Link State Acknowledgment.";
         }
       }
       description
         "Типы пакетов OSPF.";
     }

     typedef nssa-translator-state-type {
       type enumeration {
         enum enabled {
           value 1;
           description
             "NSSATranslatorState enabled.";
         }
         enum elected {
           value 2;
           description
             "NSSATranslatorState elected.";
         }
         enum disabled {
           value 3;
           description
             "NSSATranslatorState disabled.";
         }
       }
       description
         "Тип состояния транслятора OSPF NSSA.";
       reference
         "RFC 3101: The OSPF Not-So-Stubby Area (NSSA) Option";
     }

     typedef restart-status-type {
       type enumeration {
         enum not-restarting {
           value 1;
           description
             "Маршрутизатор не перезапускается.";
         }
         enum planned-restart {
           value 2;
           description
             "Маршрутизатор выполняет плановый перезапуск.";
         }
         enum unplanned-restart {
           value 3;
           description
             "Маршрутизатор выполняет неплановый перезапуск.";
         }
       }
       description
         "Тип состояния аккуратного перезапуска OSPF.";
     }

     typedef fletcher-checksum16-type {
       type string {
         pattern '(0x)?[0-9a-fA-F]{4}';
       }
       description
         "16-битовая контрольная сумма Fletcher в форме строки 0xXXXX.";
       reference
         "RFC 905: ISO Transport Protocol Specification ISO DP 8073";
     }

     typedef ospfv2-auth-trailer-rfc-version {
       type enumeration {
         enum rfc5709 {
           description
             "Поддержка трейлера аутентификации OSPF RFC 5709.";
           reference
             "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication";
         }
         enum rfc7474 {
           description
             "Поддержка трейлера аутентификации OSPF RFC 7474.";
           reference
             "RFC 7474: Security Extension for OSPFv2
              When Using Manual Key Management";
         }
       }
       description
         "Поддержка трейлера аутентификации OSPFv2.";
     }

     grouping tlv {
       description
         "Тип-Размер-Значение (Type-Length-Value или TLV).";
       leaf type {
         type uint16;
         description
           "Тип TLV.";
       }
       leaf length {
         type uint16;
         description
           "Размер TLV в октетах.";
       }
       leaf value {
         type yang:hex-string;
         description
           "Значение TLV.";
       }
     }

     grouping unknown-tlvs {
       description
         "Группировка служит для неизвестных TLV и суб-TLV.";
       container unknown-tlvs {
         description
           "Все неизвестные TLV.";
         list unknown-tlv {
           description
             "Неизвестный TLV.";
           uses tlv;
         }
       }
     }

     grouping node-tag-tlv {
       description
         "Группировка OSPF Node Admin Tag TLV.";
       list node-tag {
         leaf tag {
           type uint32;
           description
             "Значение административного тега узла.";
         }
         description
           "Список тегов.";
       }
     }

     grouping router-capabilities-tlv {
       description
         "Группировка для TLV возможностей маршрутизатора OSPF.";
       reference
         "RFC 7770: Extensions to OSPF for Advertising Optional
          Router Capabilities";
       container router-informational-capabilities {
         leaf-list informational-capabilities {
           type identityref {
             base informational-capability;
           }
           description
             "Список идентификаторов поддерживаемых маршрутизатором 
              информационных возможностей.";
         }
         description
           "Определения OSPF Router Informational Flag.";
       }
       list informational-capabilities-flags {
         leaf informational-flag {
           type uint32;
           description
             "Флаг отдельной информационной возможности.";
         }
         description
           "Список флагов информационных возможностей. Возвращаются все
            32-битовые информационные флаги, независимо от их
            известности устройству.";
       }
       list functional-capabilities {
         leaf functional-flag {
           type uint32;
           description
             "Флаг отдельной функциональной возможности.";
         }
         description
           "Список флагов функциональных возможностей. Возвращаются все
            32-битовые функциональные флаги, независимо от их
            известности устройству.";
       }
     }

     grouping dynamic-hostname-tlv {
       description
         "TLV динамического имени хоста.";
       reference
         "RFC 5642: Dynamic Hostname Exchange Mechanism for OSPF";
       leaf hostname {
         type string {
           length "1..255";
         }
         description
           "Динамическое имя хоста.";
       }
     }

     grouping sbfd-discriminator-tlv {
       description
         "S-BFD Discriminator TLV.";
       reference
         "RFC 7884: OSPF Extensions to Advertise Seamless Bidirectional
          Forwarding Detection (S-BFD) Target Discriminators";
       list sbfd-discriminators {
         leaf sbfd-discriminator {
           type uint32;
           description
             "Индивидуальный S-BFD Discriminator.";
         }
         description
           "Список дискриминаторов S-BFD.";
       }
     }

     grouping maximum-sid-depth-tlv {
       description
         "TLV узла для Maximum SID Depth (MSD).";
       reference
         "RFC 8476: Signaling Maximum SID Depth (MSD) Using OSPF";
       list msd-type {
         leaf msd-type {
           type uint8;
           description
             "Тип MSD.";
         }
         leaf msd-value {
           type uint8;
           description
             "Значение MSD для типа.";
         }
         description
           "Список кортежей MSD.";
       }
     }

     grouping ospf-router-lsa-bits {
       container router-bits {
         leaf-list rtr-lsa-bits {
           type identityref {
             base router-lsa-bit;
           }
           description
             "Список битов Router-LSA, содержащий идентификаторы для 
              всех битов, установленных в Router-LSA.";
         }
         description
           "Биты Router-LSA.";
       }
       description
         "Биты Router-LSA. В настоящее время одинаковы для OSPFv2 и
          OSPFv3, но могут быть разделены будущими дополнениями.";
     }

     grouping ospfv2-router-link {
       description
         "Канал маршрутизатора OSPFv2.";
       leaf link-id {
         type union {
           type inet:ipv4-address;
           type yang:dotted-quad;
         }
         description
           "Router-LSA Link ID.";
       }
       leaf link-data {
         type union {
           type inet:ipv4-address;
           type uint32;
         }
         description
           "Данные канала Router-LSA.";
       }
       leaf type {
         type router-link-type;
         description
           "Тип канала Router-LSA.";
       }
     }

     grouping ospfv2-lsa-body {
       description
         "Тело OSPFv2 LSA.";
       container router {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv2-router-lsa')" {
           description
             "Применимо только к Router-LSA.";
         }
         description
           "Router-LSA.";
         uses ospf-router-lsa-bits;
         leaf num-of-links {
           type uint16;
           description
             "Число каналов в Router-LSA.";
         }
         container links {
           description
             "Все каналы маршрутизатора.";
           list link {
             description
               "Канал Router-LSA.";
             uses ospfv2-router-link;
             container topologies {
               description
                 "Все топологии для канала.";
               list topology {
                 description
                   "Зависящая от топологии информация.";
                 leaf mt-id {
                   type uint8;
                   description
                     "MT-ID для топологии разрешён на канале.";
                 }
                 leaf metric {
                   type uint16;
                   description
                     "Метрика для топологии.";
                 }
               }
             }
           }
         }
       }
       container network {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv2-network-lsa')" {
           description
             "Применимо только к Network-LSA.";
         }
         description
           "Network-LSA.";
         leaf network-mask {
           type yang:dotted-quad;
           description
             "Маска IP-адреса для сети.";
         }
         container attached-routers {
           description
             "Все присоединённые маршрутизаторы.";
           leaf-list attached-router {
             type inet:ipv4-address;
             description
               "Список маршрутизаторов, присоединённых к сети.";
           }
         }
       }
       container summary {
         when "derived-from(../../header/type, "
            + "'ospfv2-summary-lsa-type')" {
           description
             "Применимо только к summary LSA.";
         }
         description
           "Summary LSA.";
         leaf network-mask {
           type inet:ipv4-address;
           description
             "Маска IP-адреса для сети.";
         }
         container topologies {
           description
             "Все топологии для summary LSA.";
           list topology {
             description
               "Зависящая от топологии информация.";
             leaf mt-id {
               type uint8;
               description
                 "MT-ID для топологии разрешён в summary.";
             }
             leaf metric {
               type ospf-metric;
               description
                 "Метрика для топологии.";
             }
           }
         }
       }
       container external {
         when "derived-from(../../header/type, "
            + "'ospfv2-external-lsa-type')" {
           description
             "Применимо только к AS-External-LSA и NSSA-LSA.";
         }
         description
           "External-LSA.";
         leaf network-mask {
           type inet:ipv4-address;
           description
             "Маска IP-адреса для сети.";
         }
         container topologies {
           description
             "Все топологии для External-LSA.";
           list topology {
             description
               "Зависящая от топологии информация.";
             leaf mt-id {
               type uint8;
               description
                 "MT-ID для топологии разрешён для внешних и
                  NSSA-префиксов.";
             }
             leaf flags {
               type bits {
                 bit E {
                   description
                     "Указывает внешнюю метрику типа 2.";
                 }
               }
               description
                 "Флаги топологии.";
             }
             leaf metric {
               type ospf-metric;
               description
                 "Метрика для топологии.";
             }
             leaf forwarding-address {
               type inet:ipv4-address;
               description
                 "Адрес IPv4 Forwarding.";
             }
             leaf external-route-tag {
               type uint32;
               description
                 "Флаг маршрута для топологии.";
             }
           }
         }
       }
       container opaque {
         when "derived-from(../../header/type, "
            + "'ospfv2-opaque-lsa-type')" {
           description
             "Применимо только для Opaque-LSA.";
         }
         description
           "Opaque-LSA.";

         container ri-opaque {
           description
             "OSPF Router-Information-Opaque-LSA.";
           reference
             "RFC 7770: Extensions to OSPF for Advertising Optional
              Router Capabilities";

           container router-capabilities-tlv {
             description
               "Информационные и функциональные возможности 
                маршрутизатора.";
             uses router-capabilities-tlv;
           }

           container node-tag-tlvs {
             description
               "Все Node Admin Tag TLV.";
             list node-tag-tlv {
               description
                 "Node Admin Tag TLV.";
               uses node-tag-tlv;
             }
           }

           container dynamic-hostname-tlv {
             description
               "OSPF Dynamic Hostname TLV.";
             uses dynamic-hostname-tlv;
           }

           container sbfd-discriminator-tlv {
             description
               "OSPF S-BFD Discriminator TLV.";
             uses sbfd-discriminator-tlv;
           }

           container maximum-sid-depth-tlv {
             description
               "OSPF Node MSD TLV.";
             uses maximum-sid-depth-tlv;
           }
           uses unknown-tlvs;
         }

         container te-opaque {
           description
             "OSPFv2 TE Opaque-LSA.";
           reference
             "RFC 3630: Traffic Engineering (TE) Extensions to
              OSPF Version 2";

           container router-address-tlv {
             description
               "TLV с адресом маршрутизатора.";
             leaf router-address {
               type inet:ipv4-address;
               description
                 "Адрес маршрутизатора.";
             }
           }

           container link-tlv {
             description
               "Описывает один канал и состоит из набора суб-TLV.";
             leaf link-type {
               type router-link-type;
               mandatory true;
               description
                 "Тип канала.";
             }
             leaf link-id {
               type union {
                 type inet:ipv4-address;
                 type yang:dotted-quad;
               }
               mandatory true;
               description
                 "Link ID.";
             }
             container local-if-ipv4-addrs {
               description
                 "Все адреса IPv4 локального интерфейса.";
               leaf-list local-if-ipv4-addr {
                 type inet:ipv4-address;
                 description
                   "Список адресов IPv4 локального интерфейса.";
               }
             }
             container remote-if-ipv4-addrs {
               description
                 "Все адреса IPv4 удалённого интерфейса.";
               leaf-list remote-if-ipv4-addr {
                 type inet:ipv4-address;
                 description
                   "Список адресов IPv4 удалённого интерфейса.";
               }
             }
             leaf te-metric {
               type uint32;
               description
                 "TE metric.";
             }
             leaf max-bandwidth {
               type rt-types:bandwidth-ieee-float32;
               description
                 "Максимальная пропускная способность.";
             }
             leaf max-reservable-bandwidth {
               type rt-types:bandwidth-ieee-float32;
               description
                 "Максимальная резервируемая пропускная способность.";
             }
             container unreserved-bandwidths {
               description
                 "Вся незарезервированная пропускная способность.";
               list unreserved-bandwidth {
                 leaf priority {
                   type uint8 {
                     range "0 .. 7";
                   }
                   description
                     "Приоритет от 0 до 7.";
                 }
                 leaf unreserved-bandwidth {
                   type rt-types:bandwidth-ieee-float32;
                   description
                     "Незарезервированная пропускная способность.";
                 }
                 description
                   "Список значение незарезервированной пропускной
                    способности для разных приоритетов.";
               }
             }
             leaf admin-group {
               type uint32;
               description
                 "Административная группа-Класс ресурсов-Цвет.";
             }
             uses unknown-tlvs;
           }
         }

         container extended-prefix-opaque {
           description
             "Все Extended Prefix TLV в LSA.";
           list extended-prefix-tlv {
             description
               "Extended Prefix TLV.";
             leaf route-type {
               type enumeration {
                 enum unspecified {
                   value 0;
                   description
                     "Не задано.";
                 }
                 enum intra-area {
                   value 1;
                   description
                     "Маршрут внутри области OSPF.";
                 }
                 enum inter-area {
                   value 3;
                   description
                     "Маршрут между областями OSPF.";
                 }
                 enum external {
                   value 5;
                   description
                     "Внешний маршрут OSPF.";
                 }
                 enum nssa {
                   value 7;
                   description
                     "Внешний маршрут OSPF NSSA.";
                 }
               }
               description
                 "Тип маршрута.";
             }
             container flags {
               leaf-list extended-prefix-flags {
                 type identityref {
                   base ospfv2-extended-prefix-flag;
                 }
                 description
                   "Список флагов Extended Prefix TLV, содержащий
                    идентификаторы для флагов префикса, устанавливаемые
                    во флагах расширенного префикса.";
               }
               description
                 "Флаги префикса.";
             }
             leaf prefix {
               type inet:ip-prefix;
               description
                 "Адресный префикс.";
             }
             uses unknown-tlvs;
           }
         }

         container extended-link-opaque {
           description
             "Все Extended Link TLV в LSA.";
           reference
             "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
           container extended-link-tlv {
             description
               "Extended Link TLV.";
             uses ospfv2-router-link;
             container maximum-sid-depth-tlv {
               description
                 "OSPF Node MSD TLV.";
               uses maximum-sid-depth-tlv;
             }
             uses unknown-tlvs;
           }
         }
       }
     }

     grouping ospfv3-lsa-options {
       description
         "Опции OSPFv3 LSA.";
       container lsa-options {
         leaf-list lsa-options {
           type identityref {
             base ospfv3-lsa-option;
           }
           description
             "Список опций OSPFv3 LSA, содержащий идентификаторы
              OSPFv3 LSA Option, устанавливаемых для LSA.";
         }
         description
           "Опции OSPFv3 LSA.";
       }
     }

     grouping ospfv3-lsa-prefix {
       description
         "Префикс OSPFv3 LSA.";

       leaf prefix {
         type inet:ip-prefix;
         description
           "Префикс LSA.";
       }
       container prefix-options {
         leaf-list prefix-options {
           type identityref {
             base ospfv3-prefix-option;
           }
           description
             "Список опций префиксов OSPFv3, содержащий идентификаторы
              опций OSPFv3, устанавливаемых для префикса OSPFv3.";
         }
         description
           "Опции префикса.";
       }
     }

     grouping ospfv3-lsa-external {
       description
         "AS-External-LSA or NSSA-LSA.";
       leaf metric {
         type ospf-metric;
         description
           "Метрика AS-External-LSA или NSSA-LSA.";
       }
       leaf flags {
         type bits {
           bit E {
             description
               "Указывает внешнюю метрику типа 2.";
           }
           bit F {
             description
               "Указывает включение пересылающего адреса в LSA.";
           }
           bit T {
             description
               "Указывает включение тега внешнего маршрута в LSA.";
           }
         }
         description
           "Флаги AS-External-LSA или NSSA-LSA.";
       }

       leaf referenced-ls-type {
         type identityref {
           base ospfv3-lsa-type;
         }
         description
           "Referenced Link State (LS) Type.";
         reference
           "RFC 5340: OSPF for IPv6";
       }
       leaf unknown-referenced-ls-type {
         type uint16;
         description
           "Значение для неизвестного Referenced LS Type.";
       }

       uses ospfv3-lsa-prefix;

       leaf forwarding-address {
         type inet:ipv6-address;
         description
           "Адрес IPv6 Forwarding.";
       }

       leaf external-route-tag {
         type uint32;
         description
           "Тег маршрута.";
       }
       leaf referenced-link-state-id {
         type uint32;
         description
           "Referenced Link State ID.";
         reference
           "RFC 5340: OSPF for IPv6";
       }
     }

     grouping ospfv3-lsa-body {
       description
         "Тело OSPFv3 LSA.";
       container router {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-router-lsa')" {
           description
             "Применимо лишь к Router-LSA.";
         }
         description
           "Router-LSA.";
         uses ospf-router-lsa-bits;
         uses ospfv3-lsa-options;

         container links {
           description
             "Все каналы маршрутизатора.";
           list link {
             description
               "Канал Router-LSA.";
             leaf interface-id {
               type uint32;
               description
                 "Interface ID для канала.";
             }
             leaf neighbor-interface-id {
               type uint32;
               description
                 "Interface ID соседа по каналу.";
             }
             leaf neighbor-router-id {
               type rt-types:router-id;
               description
                 "Router ID соседа по каналу.";
             }
             leaf type {
               type router-link-type;
               description
                 "Ти канала: 1 - «точка-точка»
                             2 — транзитная сеть
                             3 — резерв для каналов OSPFv3
                             4 — виртуальный канал.";
             }
             leaf metric {
               type uint16;
               description
                 "Метрика канала.";
             }
           }
         }
       }
       container network {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-network-lsa')" {
           description
             "Применимо только к Network-LSA.";
         }
         description
           "Network-LSA.";

         uses ospfv3-lsa-options;

         container attached-routers {
           description
             "Все присоединённые маршрутизаторы.";
           leaf-list attached-router {
             type rt-types:router-id;
             description
               "Список присоединённых к сети маршрутизаторов.";
           }
         }
       }
       container inter-area-prefix {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-inter-area-prefix-lsa')" {
           description
             "Применимо только к Inter-Area-Prefix-LSA.";
         }
         leaf metric {
           type ospf-metric;
           description
             "Метрика префикса Inter-Area Prefix.";
         }
         uses ospfv3-lsa-prefix;
         description
           "Prefix-LSA.";
       }
       container inter-area-router {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-inter-area-router-lsa')" {
           description
             "Применимо только к Inter-Area-Router-LSA.";
         }
         uses ospfv3-lsa-options;
         leaf metric {
           type ospf-metric;
           description
             "Метрика граничного маршрутизатора AS (ASBR).";
         }
         leaf destination-router-id {
           type rt-types:router-id;
           description
             "Router ID маршрутизатора ASBR из LSA.";
         }
         description
           "Inter-Area-Router-LSA.";
       }
       container as-external {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-as-external-lsa')" {
           description
             "Применимо только к AS-External-LSA.";
         }

         uses ospfv3-lsa-external;

         description
           "AS-External-LSA.";
       }
       container nssa {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-nssa-lsa')" {
           description
             "Применимо только к NSSA-LSA.";
         }
         uses ospfv3-lsa-external;

         description
           "NSSA-LSA.";
       }
       container link {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-link-lsa')" {
           description
             "Применимо только к Link-LSA.";
         }
         leaf rtr-priority {
           type uint8;
           description
             "Приоритет маршрутизатора для выбора DR. Предпочитается
              маршрутизатор с наибольшим значением, 0 указывает, что
              маршрутизатор нежелателен в качестве DR или BDR.";
         }
         uses ospfv3-lsa-options;

         leaf link-local-interface-address {
           type inet:ipv6-address;
           description
             "Адрес link-local интерфейса создавшего анонс 
              маршрутизатора для этого канала.";
         }

         leaf num-of-prefixes {
           type uint32;
           description
             "Число префиксов.";
         }

         container prefixes {
           description
             "Все префиксы для канала.";
           list prefix {
             description
               "Список связанных с каналом префиксов.";
             uses ospfv3-lsa-prefix;
           }
         }
         description
           "Link-LSA.";
       }
       container intra-area-prefix {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-intra-area-prefix-lsa')" {
           description
             "Применимо только к Intra-Area-Prefix-LSA.";
         }
         description
           "Intra-Area-Prefix-LSA.";

         leaf referenced-ls-type {
           type identityref {
             base ospfv3-lsa-type;
           }
           description
             "Referenced LS Type.";
         }
         leaf unknown-referenced-ls-type {
           type uint16;
           description
             "Значение для неизвестного Referenced LS Type.";
         }
         leaf referenced-link-state-id {
           type uint32;
           description
             "Referenced Link State ID.";
         }
         leaf referenced-adv-router {
           type rt-types:router-id;
           description
             "Referenced Advertising Router.";
           reference
             "RFC 5340: OSPF for IPv6";
         }

         leaf num-of-prefixes {
           type uint16;
           description
             "Число префиксов.";
         }
         container prefixes {
           description
             "Все префиксы в этом анонсе LSA.";
           list prefix {
             description
               "Список префиксов в LSA.";
             uses ospfv3-lsa-prefix;
             leaf metric {
               type uint16;
               description
                 "Метрика перфикса.";
             }
           }
         }
       }
       container router-information {
         when "derived-from-or-self(../../header/type, "
            + "'ospfv3-router-information-lsa')" {
           description
             "Применимо только к Router-Information-LSA (RFC 7770).";
           reference
             "RFC 7770: Extensions to OSPF for Advertising Optional
              Router Capabilities";
         }
         container router-capabilities-tlv {
           description
             "Информационные и функциональные возможности 
              маршрутизатора.";
           uses router-capabilities-tlv;
         }
         container node-tag-tlvs {
           description
             "Все Node Admin Tag TLV.";
           list node-tag-tlv {
             description
               "Node Admin Tag TLV.";
             uses node-tag-tlv;
           }
         }
         container dynamic-hostname-tlv {
           description
             "OSPF Dynamic Hostname TLV.";
           uses dynamic-hostname-tlv;
         }

         container sbfd-discriminator-tlv {
           description
             "OSPF S-BFD Discriminator TLV.";
           uses sbfd-discriminator-tlv;
         }

         description
           "Router-Information-LSA.";
         reference
           "RFC 7770: Extensions to OSPF for Advertising Optional
            Router Capabilities";
       }
     }

     grouping lsa-header {
       description
         "LSA для OSPFv2 и OSPFv3.";
       leaf age {
         type uint16;
         mandatory true;
         description
           "Возраст LSA.";
       }
       leaf type {
         type identityref {
           base ospf-lsa-type;
         }
         mandatory true;
         description
           "Тип LSA.";
       }
       leaf adv-router {
         type rt-types:router-id;
         mandatory true;
         description
           "Анонсирующий LSA маршрутизатор.";
       }
       leaf seq-num {
         type uint32;
         mandatory true;
         description
           "Порядковый номер LSA.";
       }
       leaf checksum {
         type fletcher-checksum16-type;
         mandatory true;
         description
           "Контрольная сумма LSA.";
       }
       leaf length {
         type uint16;
         mandatory true;
         description
           "Размер LSA с учётом заголовка.";
       }
     }

     grouping ospfv2-lsa {
       description
         "OSPFv2 LSA. Анонсы LSA однозначно указываются триплетом
          <LSA Type, Link State ID, Advertising Router> с разделением
          экземпляров по порядковым номерам LSA.";
       container header {
         must "(derived-from(type, "
            + "'ospfv2-opaque-lsa-type') and "
            + "opaque-id and opaque-type) or "
            + "(not(derived-from(type, "
            + "'ospfv2-opaque-lsa-type')) "
            + "and not(opaque-id) and not(opaque-type))" {
           description
             "Значение opaque-type и opaque-id применимы лишь 
              к Opaque-LSA.";
         }
         description
           "Декодированные данные заголовка OSPFv2 LSA.";

         container lsa-options {
           leaf-list lsa-options {
             type identityref {
               base ospfv2-lsa-option;
             }
             description
               "Список опций LSA, содержащий идентификаторы 
                установленных опций OSPFv2 LSA.";
           }
           description
             "Опции LSA.";
         }

         leaf lsa-id {
           type yang:dotted-quad;
           mandatory true;
           description
             "Link State ID.";
         }

         leaf opaque-type {
           type uint8;
           description
             "Тип Opaque-LSA.";
         }

         leaf opaque-id {
           type opaque-id;
           description
             "Opaque-LSA ID.";
         }

         uses lsa-header;
       }
       container body {
         description
           "Декодированные данные тела OSPFv2 LSA.";
         uses ospfv2-lsa-body;
       }
     }

     grouping ospfv3-lsa {
       description
         "Декодированный анонс OSPFv3 LSA.";
       container header {
         description
           "Декодированные данные заголовка OSPFv3 LSA.";
         leaf lsa-id {
           type uint32;
           mandatory true;
           description
             "OSPFv3 LSA ID.";
         }
         uses lsa-header;
       }
       container body {
         description
           "Декодированные данные тела OSPF LSA.";
         uses ospfv3-lsa-body;
       }
     }
     grouping lsa-common {
       description
         "Общие поля для представления OSPF LSA.";
       leaf decode-completed {
         type boolean;
         description
           "Тело OSPF LSA было декодировано за исключением
            неизвестных TLV. Типы неизвестных LSA и OSPFv2 Opaque-LSA
            не декодированы. Некорректно сформированные LSA обычно не
            воспринимаются м не включаются в LSDB.";
       }
       leaf raw-data {
         type yang:hex-string;
         description
           "Шестнадцатеричное представление полного анонса LSA, как
            он получен или передан, с сетевым порядком байтов.";
       }
     }

     grouping lsa {
       description
         "OSPF LSA.";
       uses lsa-common;
       choice version {
         description
           "Тело OSPFv2 или OSPFv3 LSA.";
         container ospfv2 {
           description
             "OSPFv2 LSA.";
           uses ospfv2-lsa;
         }
         container ospfv3 {
           description
             "OSPFv3 LSA.";
           uses ospfv3-lsa;
         }
       }
     }

     grouping lsa-key {
       description
         "Ключ OSPF LSA. Ключ базы данных для каждого анонса LSA данного
          типа в базе LSDB.";
       leaf lsa-id {
         type union {
           type yang:dotted-quad;
           type uint32;
         }
         description
           "Link State ID.";
       }
       leaf adv-router {
         type rt-types:router-id;
         description
           "Анонсирующий маршрутизатор.";
       }
     }

     grouping instance-stat {
       description
         "Статистика для экземпляра.";
       leaf discontinuity-time {
         type yang:date-and-time;
         description
           "Время последнего события, когда один или несколько счётчиков
            этого экземпляра OSPF столкнулись с разрывом. Если разрывов
            не было с момента последней реинициализации экземпляра OSPF,
            узел содержит время инициализации, которое обычно происходит
            при создании экземпляра OSPF.";
       }
       leaf originate-new-lsa-count {
         type yang:counter32;
         description
           "Число созданных LSA. Разрыв этого счётчика может происходить
            при реинициализации экземпляра OSPF.";
       }
       leaf rx-new-lsas-count {
         type yang:counter32;
         description
           "Число принятых новых LSA.  Разрыв этого счётчика может
            происходить при реинициализации экземпляра OSPF.";
       }
       leaf as-scope-lsa-count {
         type yang:gauge32;
         description
           "Число AS-Scope LSA.";
       }
       leaf as-scope-lsa-chksum-sum {
         type uint32;
         description
           "Сумма по модулю 2^32 контрольных сумм LSA для AS-Scope LSA.
            Значение при сравнении следует считать беззнаковым. Хотя
            разные контрольные суммы относятся к разным комбинациям LSA,
            эквивалентные контрольные суммы не гарантируют совпадения
            LSA, поскольку разные комбинации могут давать одну
            контрольную сумму.";
       }
       container database {
         description
           "Контейнер для статистики на уровне AS-Scope LSA.";
         list as-scope-lsa-type {
           description
             "Список статистики AS-Scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип AS-Scope LSA.";
           }
           leaf lsa-count {
             type yang:gauge32;
             description
               "Число LSA этого типа.";
           }
           leaf lsa-cksum-sum {
             type uint32;
             description
               "Сумма по модулю 2^32 контрольных сумм LSA для LSA этого
                типа. Значение при сравнении следует считать 
                беззнаковым. Хотя разные контрольные суммы относятся к 
                разным комбинациям LSA, эквивалентные контрольные суммы
                не гарантируют совпадения LSA, поскольку разные 
                комбинации могут давать одну контрольную сумму.";
           }
         }
       }
       uses instance-fast-reroute-state;
     }

     grouping area-stat {
       description
         "Per-area statistics.";
       leaf discontinuity-time {
         type yang:date-and-time;
         description
           "Время последнего события, когда один или несколько счётчиков
            этой области OSPF столкнулись с разрывом. Если разрывов
            не было с момента последней реинициализации области OSPF,
            узел содержит время инициализации, которое обычно происходит
            при создании области OSPF.";
       }
       leaf spf-runs-count {
         type yang:counter32;
         description
           "Число запусков внутриобластного алгоритма SPF. Разрыв этого
            счётчика может возникать при реинициализации области OSPF.";
       }
       leaf abr-count {
         type yang:gauge32;
         description
           "Число доступных в области граничных маршрутизаторов (ABR).";
       }
       leaf asbr-count {
         type yang:gauge32;
         description
           "Общее число граничных маршрутизаторов AS (ASBR), доступных
            внутри этой области.";
       }
       leaf ar-nssa-translator-event-count {
         type yang:counter32;
         description
           "Общее число изменения состояния транслятора NSSA. Разрыв 
            счётчика может возникать при реинициализации области OSPF.";
       }
       leaf area-scope-lsa-count {
         type yang:gauge32;
         description
           "Число Area-scope LSA в области.";
       }
       leaf area-scope-lsa-cksum-sum {
         type uint32;
         description
           "Сумма по модулю 2^32 контрольных сумм LSA для Area-scope LSA
            Значение при сравнении следует считать беззнаковым. Хотя
            разные контрольные суммы относятся к разным комбинациям LSA, 
            эквивалентные контрольные суммы не гарантируют совпадения 
            LSA, поскольку разные комбинации могут давать одну 
            контрольную сумму.";
       }
       container database {
         description
           "Контейнер для статистики Area-scope LSA.";
         list area-scope-lsa-type {
           description
             "Список статистики Area-scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип Area-scope LSA.";
           }
           leaf lsa-count {
             type yang:gauge32;
             description
               "Число LSA этого типа.";
           }
           leaf lsa-cksum-sum {
             type uint32;
             description
               "Сумма по модулю 2^32 контрольных сумм LSA для LSA этого
                типа. Значение при сравнении следует считать 
                беззнаковым. Хотя разные контрольные суммы относятся к 
                разным комбинациям LSA, эквивалентные контрольные суммы
                не гарантируют совпадения LSA, поскольку разные 
                комбинации могут давать одну контрольную сумму.";
           }
         }
       }
     }

     grouping interface-stat {
       description
         "Per-interface statistics.";
       leaf discontinuity-time {
         type yang:date-and-time;
         description
           "Время последнего события, когда один или несколько счётчиков
            этого интерфейса OSPF столкнулись с разрывом. Если разрывов
            не было с момента последней реинициализации интерфейса OSPF,
            узел содержит время инициализации, которое обычно происходит
            при создании интерфейса OSPF.";
       }
       leaf if-event-count {
         type yang:counter32;
         description
           "Число изменений состояния интерфейса или ошибок на нем.
            Разрыв счётчика может возникать при реинициализации
            интерфейса OSPF.";
       }
       leaf link-scope-lsa-count {
         type yang:gauge32;
         description
           "Число Link-scope LSA.";
       }
       leaf link-scope-lsa-cksum-sum {
         type uint32;
         description
           "Сумма по модулю 2^32 контрольных сумм LSA для Link-scope LSA
            Значение при сравнении следует считать беззнаковым. Хотя
            разные контрольные суммы относятся к разным комбинациям LSA, 
            эквивалентные контрольные суммы не гарантируют совпадения 
            LSA, поскольку разные комбинации могут давать одну 
            контрольную сумму.";
       }
       container database {
         description
           "Контейнер для статистики Link-scope LSA.";
         list link-scope-lsa-type {
           description
             "Список статистики Link-scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип Link-scope LSA.";
           }
           leaf lsa-count {
             type yang:gauge32;
             description
               "Число LSA этого типа.";
           }
           leaf lsa-cksum-sum {
             type uint32;
             description
               "Сумма по модулю 2^32 контрольных сумм LSA для LSA этого
                типа. Значение при сравнении следует считать 
                беззнаковым. Хотя разные контрольные суммы относятся к 
                разным комбинациям LSA, эквивалентные контрольные суммы
                не гарантируют совпадения LSA, поскольку разные 
                комбинации могут давать одну контрольную сумму.";
           }
         }
       }
     }

     grouping neighbor-stat {
       description
         "Статистика на уровне соседа.";
       leaf discontinuity-time {
         type yang:date-and-time;
         description
           "Время последнего события, когда один или несколько счётчиков
            для этого соседа OSPF столкнулись с разрывом. Если разрывов
            не было с момента последней реинициализации соседа OSPF,
            узел содержит время инициализации, которое обычно происходит
            при динамическом обнаружении соседа OSPF.";
       }
       leaf nbr-event-count {
         type yang:counter32;
         description
           "Число изменений состояния соседа или ошибок для него.
            Разрыв счётчика может возникать при реинициализации
            соседа OSPF.";
       }
       leaf nbr-retrans-qlen {
         type yang:gauge32;
         description
           "Текущий размер очереди на повтор передачи.";
       }
     }

     grouping instance-fast-reroute-config {
       description
         "Эта группа задаёт глобальную конфигурацию 
          IP Fast Reroute (IP-FRR).";
       container fast-reroute {
         if-feature "fast-reroute";
         description
           "Этот контейнер может дополняться глобальными параметрами
            для IP-FRR.";
         container lfa {
           if-feature "lfa";
           description
             "Этот контейнер может дополняться глобальными параметрами
              для Loop-Free Alternate (LFA). Создание контейнера не
              влияет на активацию LFA.";
         }
       }
     }

     grouping instance-fast-reroute-state {
       description
         "Группировка данных состояния IP-FRR.";

       container protected-routes {
         if-feature "fast-reroute";
         config false;
         description
           "Статистика защиты экземпляра.";

         list address-family-stats {
           key "address-family prefix alternate";
           description
             "Сведения о защищённом префиксе на семейство адресов.";

           leaf address-family {
             type iana-rt-types:address-family;
             description
               "Семейство адресов.";
           }
           leaf prefix {
             type inet:ip-prefix;
             description
               "Защищённый префикс.";
           }
           leaf alternate {
             type inet:ip-address;
             description
               "Другой next-hop для префикса.";
           }
           leaf alternate-type {
             type enumeration {
               enum equal-cost {
                 description
                   "Вариант на основе ECMP.";
               }
               enum lfa {
                 description
                   "Вариант на основе LFA.";
               }
               enum remote-lfa {
                 description
                   "Вариант на основе Remote-LFA.";
               }
               enum tunnel {
                 description
                   "Вариант на основе туннеля (RSVP-TE или GRE).";
               }
               enum ti-lfa {
                 description
                   "Вариант на основе TI-LFA.";
               }
               enum mrt {
                 description
                   "Вариант на основе MRT.";
               }
               enum other {
                 description
                   "Вариант неизвестного типа.";
               }
             }
             description
               "Тип варианта.";
           }
           leaf best {
             type boolean;
             description
               "Указывает предпочтительность этого варианта.";
           }
           leaf non-best-reason {
             type string {
               length "1..255";
             }
             description
               "Описывает причину того, что вариант не является
                лучшим выбором.";
           }
           leaf protection-available {
             type bits {
               bit node-protect {
                 position 0;
                 description
                   "Доступна защита узла.";
               }
               bit link-protect {
                 position 1;
                 description
                   "Доступна защита канала.";
               }
               bit srlg-protect {
                 position 2;
                 description
                   "Доступна защита SRLG.";
               }
               bit downstream-protect {
                 position 3;
                 description
                   "Доступна защита нисходящего направления.";
               }
               bit other {
                 position 4;
                 description
                   "Доступна иная защита.";
               }
             }
             description
               "Защита обеспечивается вариантом (альтернативой).";
           }
           leaf alternate-metric-1 {
             type uint32;
             description
               "Метрика от точки локального ремонта (PLR) до адресата
                по альтернативному пути.";
           }
           leaf alternate-metric-2 {
             type uint32;
             description
               "Метрика от PLR до альтернативного узла.";
           }
           leaf alternate-metric-3 {
             type uint32;
             description
               "Метрика от альтернативного узла до адресата.";
           }
         }
       }

       container unprotected-routes {
         if-feature "fast-reroute";
         config false;
         description
           "Список незащищённых префиксов.";

         list address-family-stats {
           key "address-family prefix";
           description
             "Статистика незащищённых префиксов на AF.";

           leaf address-family {
             type iana-rt-types:address-family;
             description
               "Семейство адресов.";
           }
           leaf prefix {
             type inet:ip-prefix;
             description
               "Незащищённый префикс.";
           }
         }
       }

       list protection-statistics {
         key "frr-protection-method";
         config false;
         description
           "Список статистики методов защиты.";

         leaf frr-protection-method {
           type string;
           description
             "Используемый метод защиты.";
         }
         list address-family-stats {
           key "address-family";
           description
             "Статистика защиты на AF.";

           leaf address-family {
             type iana-rt-types:address-family;
             description
               "Семейство адресов.";
           }
           leaf total-routes {
             type uint32;
             description
               "Общее число префиксов.";
           }
           leaf unprotected-routes {
             type uint32;
             description
               "Общее число незащищённых префиксов.";
           }
           leaf protected-routes {
             type uint32;
             description
               "Общее число защищённых префиксов.";
           }
           leaf linkprotected-routes {
             type uint32;
             description
               "Общее число префиксов с защитой канала.";
           }
           leaf nodeprotected-routes {
             type uint32;
             description
               "Общее число защищённых префиксов.";
           }
         }
       }
     }

     grouping interface-fast-reroute-config {
       description
         "Эта группа определяет конфигурацию интерфейса IP-FRR.";
       container fast-reroute {
         if-feature "fast-reroute";
         container lfa {
           if-feature "lfa";
           leaf candidate-enabled {
             type boolean;
             default "true";
             description
               "Разрешает применять интерфейс как резервный.";
           }
           leaf enabled {
             type boolean;
             default "false";
             description
               "Активирует LFA. Предполагается расчёт LFA на префикс.";
           }
           container remote-lfa {
             if-feature "remote-lfa";
             leaf enabled {
               type boolean;
               default "false";
               description
                 "Активирует Remote LFA (R-LFA).";
             }
             description
               "Конфигурация R-LFA.";
           }
           description
             "Конфигурация LFA.";
         }
         description
           "Конфигурация интерфейса IP-FRR.";
       }
     }

     grouping interface-physical-link-config {
       description
         "Конфигурация стоимости интерфейса, применяемая только к
          физическим (не виртуальным) интерфейсам и и sham-каналам.";
       leaf cost {
         type ospf-link-metric;
         description
           "Стоимость интерфейса.";
       }
       leaf mtu-ignore {
         if-feature "mtu-ignore";
         type boolean;
         description
           "Управляет обходом проверки несоответствия MTU для пакетов
            Database Description (параграф 10.6 в RFC 2328).";
         reference
           "RFC 2328: OSPF Version 2, Section 10.6";
       }
       leaf prefix-suppression {
         if-feature "prefix-suppression";
         type boolean;
         description
           "Подавляет анонсы префиксов, связанных с интерфейсом.";
       }
     }

     grouping interface-common-config {
       description
         "Общая конфигурация для всех типов интерфейсов, включая
          виртуальные и sham-каналы (фиктивные).";

       leaf hello-interval {
         type uint16;
         units "seconds";
         description
           "Интервал между пакетами Hello (в секундах), который должен
            совпадать для всех маршрутизаторов в одной сети. Разные
            реализации и развёртывания применяют разные интервалы Hello.
            Примером значения для ЛВС служит интервал в 10 секунд.";
         reference
           "RFC 2328: OSPF Version 2, Appendix C.3";
       }

       leaf dead-interval {
         type uint16;
         units "seconds";
         must '../dead-interval > ../hello-interval' {
           error-message "Интервал «умирания» (dead) должен быть "
                       + "больше интервала Hello";
           description
             "Значение должно быть больше hello-interval.";
         }
         description
           "Интервал, после которого сосед считается отключённым 
            (в секундах), если от него нет пакетов Hello. Обычно это
            в 3 - 4 раза больше hello-interval. Типовое значение для
            ЛВС составляет 40 секунд.";
         reference
           "RFC 2328: OSPF Version 2, Appendix C.3";
       }

       leaf retransmit-interval {
         type uint16 {
           range "1..3600";
         }
         units "seconds";
         description
           "Интервал повтора неподтвержденных анонсов LSA (в секундах).
            Значение должно быть больше RTT между любыми двумя 
            маршрутизаторами в сети. Примером служит значение 5 сек.";
         reference
           "RFC 2328: OSPF Version 2, Appendix C.3";
       }

       leaf transmit-delay {
         type uint16;
         units "seconds";
         description
           "Оценка времени передачи пакетов обновления состояния канала
            (LSU) на интерфейсе (в секундах). Возраст LSA увеличивается
            на это значение при анонсировании через интерфейс. Примером
            значения является 1 секунда.";
         reference
           "RFC 2328: OSPF Version 2, Appendix C.3";
       }

       leaf lls {
         if-feature "lls";
         type boolean;
         description
           "Управляет поддержкой сигнализации LLS.";
       }

       container ttl-security {
         if-feature "ttl-security";
         description
           "Проверка безопасности TTL.";
         leaf enabled {
           type boolean;
           description
             "Управляет проверкой безопасности TTL.";
         }
         leaf hops {
           type uint8 {
             range "1..254";
           }
           default "1";
           description
             "Максимальное число пересылок (hop), которые пакет OSPF
              может пройти до получения.";
         }
       }
       leaf enabled {
         type boolean;
         default "true";
         description
           "Управляет протоколом OSPF на интерфейсе.";
       }

       container authentication {
         description
           "Конфигурация проверки подлинности.";
         choice auth-type-selection {
           description
             "Опции для настройки аутентификации OSPFv2/OSPFv3.";
           case ospfv2-auth {
             when "derived-from-or-self(../../../../../../rt:type, "
                + "'ospfv2')" {
               description
                 "Применимо только к OSPFv2.";
             }
             leaf ospfv2-auth-trailer-rfc {
               if-feature "ospfv2-authentication-trailer";
               type ospfv2-auth-trailer-rfc-version;
               description
                 "Поддержка трейлера аутентификации OSPFv2 (RFC 5709
                  и RFC 7474).";
               reference
                 "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication
                  RFC 7474: Security Extension for OSPFv2 When Using
                  Manual Key Management";
             }
             choice ospfv2-auth-specification {
               description
                 "Указание цепочки ключей или явных параметров ключа.";
               case auth-key-chain {
                 if-feature "key-chain";
                 leaf ospfv2-key-chain {
                   type key-chain:key-chain-ref;
                   description
                     "Имя цепочки ключей.";
                 }
               }
               case auth-key-explicit {
                 leaf ospfv2-key-id {
                   type uint32;
                   description
                     "Идентификатор ключа.";
                 }
                 leaf ospfv2-key {
                   type string;
                   description
                     "Ключ аутентификации OSPFv2. Размер ключа может
                      зависеть от применяемого алгоритма.";
                 }
                 leaf ospfv2-crypto-algorithm {
                   type identityref {
                     base key-chain:crypto-algorithm;
                   }
                   description
                     "Криптоалгоритм, связанный с ключом.";
                 }
               }
             }
           }
           case ospfv3-auth-ipsec {
             when "derived-from-or-self(../../../../../../rt:type, "
                + "'ospfv3')" {
               description
                 "Применимо только к OSPFv3.";
             }
             if-feature "ospfv3-authentication-ipsec";
             leaf sa {
               type string;
               description
                 "Имя защищённой связи (SA).";
             }
           }
           case ospfv3-auth-trailer {
             when "derived-from-or-self(../../../../../../rt:type, "
                + "'ospfv3')" {
               description
                 "Применимо только к OSPFv3.";
             }
             if-feature "ospfv3-authentication-trailer";
             choice ospfv3-auth-specification {
               description
                 "Указание цепочки ключей или явных параметров ключа.";
               case auth-key-chain {
                 if-feature "key-chain";
                 leaf ospfv3-key-chain {
                   type key-chain:key-chain-ref;
                   description
                     "Имя цепочки ключей.";
                 }
               }
               case auth-key-explicit {
                 leaf ospfv3-sa-id {
                   type uint16;
                   description
                 "Имя защищённой связи (SA).";
                 }
                 leaf ospfv3-key {
                   type string;
                   description
                     "Ключ аутентификации OSPFv3. Размер ключа может
                      зависеть от применяемого алгоритма.";
                 }
                 leaf ospfv3-crypto-algorithm {
                   type identityref {
                     base key-chain:crypto-algorithm;
                   }
                   description
                     "Криптоалгоритм, связанный с ключом.";
                 }
               }
             }
           }
         }
       }
     }

     grouping interface-config {
       description
         "Конфигурация для обычных интерфейсов OSPF (не виртуальных
          или фиктивных - sham).";

       leaf interface-type {
         type enumeration {
           enum broadcast {
             description
               "Широковещательная сеть с множественным доступом.";
           }
           enum non-broadcast {
             description
               "Сеть с множественным доступом без широковещания (NBMA).";
           }
           enum point-to-multipoint {
             description
               "Сеть «один со многими» (point-to-multipoint).";
           }
           enum point-to-point {
             description
                "Сеть «точка-точка».";
              "Specifies an OSPF point-to-point network.";
           }
           enum hybrid {
             if-feature "hybrid-interface";
             description
               "Гибридная сеть (широковещание/point-to-multipoint).";
           }
         }
         description
           "Тип интерфейса.";
       }

       leaf passive {
         type boolean;
         description
           "Управляет пассивным интерфейсом. Префикс пассивного
            интерфейса анонсируется, но смежность не создается.";
       }

       leaf demand-circuit {
         if-feature "demand-circuit";
         type boolean;
         description
           "Управляет demand-устройством.";
       }

       leaf priority {
         type uint8;
         description
           "Задаёт приоритет маршрутизатора OSPF. В сети с множественным
            доступом это служит для выбора DR. На интерфейсах других
            типов приоритет игнорируется. Маршрутизатор с высоким 
            приоритетом предпочитается при выборе. Значение 0 указывает,
            что маршрутизатору нежелательно быть DR или BDR.";
       }

       container multi-areas {
         if-feature "multi-area-adj";
         description
           "Контейнер для конфигурации с множеством областей.";
         list multi-area {
           key "multi-area-id";
           description
             "Настраивает смежность между областями OSPF.";
           leaf multi-area-id {
             type area-id-type;
             description
               "Идентификатор области для смежности областей.";
           }
           leaf cost {
             type ospf-link-metric;
             description
               "Стоимость интерфейса для смежности областей.";
           }
         }
       }

       container static-neighbors {
         description
           "Статически заданные соседи.";

         list neighbor {
           key "identifier";
           description
             "Статически заданный сосед OSPF.";

           leaf identifier {
             type inet:ip-address;
             description
               "Router ID, адрес IPv4 или IPv6 у соседа.";
           }

           leaf cost {
             type ospf-link-metric;
             description
               "Стоимость интерфейса. Разные реализации по умолчанию 
                задают разную стоимость, при этом у некоторых стоимость
                обратно пропорциональная значения. Некоторые задают по
                умолчанию 1, считая стоимостью число пересылок (hop).";
           }
           leaf poll-interval {
             type uint16;
             units "seconds";
             description
               "Интервал опроса (в секундах) для отправки пакетов
                OSPF Hello с целью обнаружения соседей в сети NBMA.
                Этот интервал задаёт детализацию поиска новых соседей.
                Примером может служить интервал 120 секунд (2 минуты)
                для унаследованных пакетных сетей (PDN) X.25.";
             reference
               "RFC 2328: OSPF Version 2, Appendix C.5";
           }
           leaf priority {
             type uint8;
             description
               "Приоритет соседа при выборе DR. Маршрутизатор с высоким 
                приоритетом предпочитается при выборе, 0, указывает,
                что маршрутизатору нежелательно быть DR или BDR.";
           }
         }
       }

       leaf node-flag {
         if-feature "node-flag";
         type boolean;
         default "false";
         description
           "Набор префиксов, указывающих анонсирующий маршрутизатор.";
         reference
           "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
       }

       container bfd {
         if-feature "bfd";
         description
           "Конфигурация интерфейса BFD.";
         uses bfd-types:client-cfg-parms;
         reference
           "RFC 5880: Bidirectional Forwarding Detection (BFD)
            RFC 5881: Bidirectional Forwarding Detection
            (BFD) for IPv4 and IPv6 (Single Hop)
            RFC 9314: YANG Data Model for Bidirectional Forwarding
            Detection (BFD)";
       }

       uses interface-fast-reroute-config;
       uses interface-common-config;
       uses interface-physical-link-config;
     }

     grouping neighbor-state {
       description
         "Рабочее состояние соседа OSPF.";

       leaf address {
         type inet:ip-address;
         config false;
         description
           "Адрес соседа.";
       }
       leaf dr-router-id {
         type rt-types:router-id;
         config false;
         description
           "Router ID у DR соседа.";
       }

       leaf dr-ip-addr {
         type inet:ip-address;
         config false;
         description
           "Адрес IP у DR соседа.";
       }

       leaf bdr-router-id {
         type rt-types:router-id;
         config false;
         description
          "Router ID у BDR соседа.";
       }

       leaf bdr-ip-addr {
         type inet:ip-address;
         config false;
         description
           "Адрес IP у BDR соседа.";
       }
       leaf state {
         type nbr-state-type;
         config false;
         description
           "Состояние соседа OSPF.";
       }
       leaf cost {
         type ospf-link-metric;
         config false;
         description
           "Стоимость доступа к соседу для сетей point-to-multipoint
            и Hybrid.";
       }
       leaf dead-timer {
         type rt-types:timer-value-seconds16;
         config false;
         description
           "Таймер, отслеживающий оставшееся время до момента, когда
            сосед будет сочтён «мертвым».";
       }
       container statistics {
         config false;
         description
           "Статистика для соседа.";
         uses neighbor-stat;
       }
     }

     grouping interface-common-state {
       description
         "Базовое рабочее состояние интерфейса OSPF.";
       reference
         "RFC 2328: OSPF Version 2, Section 9";

       leaf state {
         type if-state-type;
         config false;
         description
           "Состояние интерфейса.";
       }

       leaf hello-timer {
         type rt-types:timer-value-seconds16;
         config false;
         description
           "Таймер, отслеживающий оставшееся время до момента отправки
            через интерфейс следующего сообщения Hello.";
       }

       leaf wait-timer {
         type rt-types:timer-value-seconds16;
         config false;
         description
           "Таймер, отслеживающий оставшееся время до момента выхода
            интерфейса из состояния Waiting.";
       }

       leaf dr-router-id {
         type rt-types:router-id;
         config false;
         description
           "DR Router ID.";
       }

       leaf dr-ip-addr {
         type inet:ip-address;
         config false;
         description
           "IP-адрес DR.";
       }

       leaf bdr-router-id {
         type rt-types:router-id;
         config false;
         description
           "BDR Router ID.";
       }

       leaf bdr-ip-addr {
         type inet:ip-address;
         config false;
         description
           "IP-адрес BDR.";
       }

       container statistics {
         config false;
         description
           "Статистика для интерфейса.";
         uses interface-stat;
       }

       container neighbors {
         config false;
         description
           "Все соседи на интерфейсе.";
         list neighbor {
           key "neighbor-router-id";
           description
             "Список соседей OSPF на интерфейсе.";
           leaf neighbor-router-id {
             type rt-types:router-id;
             description
               "Router ID соседа.";
           }
           uses neighbor-state;
         }
       }
       container database {
         config false;
         description
           "Link-scope LSDB.";
         list link-scope-lsa-type {
           key "lsa-type";
           description
             "Список OSPF Link-scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип OSPF Link-scope LSA.";
           }
           container link-scope-lsas {
             description
               "Все Link-scope LSA этого типа.";
             list link-scope-lsa {
               key "lsa-id adv-router";
               description
                 "Список OSPF Link-scope LSA.";
               uses lsa-key;
               uses lsa {
                 refine "version/ospfv2/ospfv2" {
                   must "derived-from-or-self( "
                      + "../../../../../../../../../../"
                      + "rt:type, 'ospfv2')" {
                     description
                       "OSPFv2 LSA.";
                   }
                 }
                 refine "version/ospfv3/ospfv3" {
                   must "derived-from-or-self( "
                      + "../../../../../../../../../../"
                      + "rt:type, 'ospfv3')" {
                     description
                       "OSPFv3 LSA.";
                   }
                 }
               }
             }
           }
         }
       }
     }

     grouping interface-state {
       description
         "Рабочее состояние интерфейса OSPF.";
       reference
         "RFC 2328: OSPF Version 2, Section 9";

       uses interface-common-state;
     }

     grouping virtual-link-config {
       description
         "Состояние конфигурации виртуального канала OSPF.";

       uses interface-common-config;
     }

     grouping virtual-link-state {
       description
         "Рабочее состояние виртуального канала OSPF.";

       leaf cost {
         type ospf-link-metric;
         config false;
         description
           "Стоимость интерфейса виртуального канала.";
       }
       uses interface-common-state;
     }

     grouping sham-link-config {
       description
         "Состояние конфигурации фиктивного канала OSPF.";

       uses interface-common-config;
       uses interface-physical-link-config;
     }

     grouping sham-link-state {
       description
         "Рабочее состояние фиктивного канала OSPF.";
       uses interface-common-state;
     }

     grouping address-family-area-config {
       description
         "Состояние конфигурации области OSPF для семейства адресов.";

       container ranges {
         description
           "Контейнер для сводных (summary) диапазонов.";

         list range {
           key "prefix";
           description
             "Сводка маршрутов, соответствующих адресу и маске.
              Применима лишь для маршрутизаторов ABR.";
           leaf prefix {
             type inet:ip-prefix;
             description
               "Префикс IPv4 или IPv6.";
           }
           leaf advertise {
             type boolean;
             description
               "Аносируется или скрыт.";
           }
           leaf cost {
             type ospf-metric;
             description
               "Анонсируемая стоимость сводного маршрута.";
           }
         }
       }
     }

     grouping area-common-config {
       description
         "Базовое состояние конфигурации области OSPF.";

       leaf summary {
         when "derived-from(../area-type,'stub-nssa-area')" {
           description
             "Сводный анонс в тупиковую область или NSSA.";
         }
         type boolean;
         description
           "Управляет анонсами в тупиковые области или NSSA.";
       }
       leaf default-cost {
         when "derived-from(../area-type,'stub-nssa-area')" {
           description
             "Стоимость LSA принятого по умолчанию маршрута,
              анонсируемого у тупиковую область или NSSA.";
         }
         type ospf-metric;
         description
           "Задаёт сводную стоимость маршрута по умолчанию для
            тупиковой области или NSSA.";
       }
     }

     grouping area-config {
       description
         "Состояние конфигурации области OSPF.";

       leaf area-type {
         type identityref {
           base area-type;
         }
         default "normal-area";
         description
           "Тип области.";
       }

       uses area-common-config;
       uses address-family-area-config;
     }

     grouping area-state {
       description
         "Рабочее состояние области OSPF.";

       container statistics {
         config false;
         description
           "Статистика для области.";
         uses area-stat;
       }

       container database {
         config false;
         description
           "Area-scope LSDB.";
         list area-scope-lsa-type {
           key "lsa-type";
           description
             "Список OSPF Area-scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип OSPF Area-scope LSA.";
           }
           container area-scope-lsas {
             description
               "Все Area-scope LSA.";
             list area-scope-lsa {
               key "lsa-id adv-router";
               description
                 "Список OSPF Area-scope LSA.";
               uses lsa-key;
               uses lsa {
                 refine "version/ospfv2/ospfv2" {
                   must "derived-from-or-self( "
                      + "../../../../../../../../"
                      + "rt:type, 'ospfv2')" {
                     description
                       "OSPFv2 LSA.";
                   }
                 }
                 refine "version/ospfv3/ospfv3" {
                   must "derived-from-or-self( "
                      + "../../../../../../../../"
                      + "rt:type, 'ospfv3')" {
                     description
                       "OSPFv3 LSA.";
                   }
                 }
               }
             }
           }
         }
       }
     }

     grouping local-rib {
       description
         "Локальная таблица RIB для маршрутов, рассчитанных
          локальным экземпляром маршрутизации OSPF.";
       container local-rib {
         config false;
         description
           "Local RIB.";
         list route {
           key "prefix";
           description
             "Локальные маршруты экземпляра OSPF.";
           leaf prefix {
             type inet:ip-prefix;
             description
               "Префикс адресата.";
           }
           container next-hops {
             description
               "Следующие узлы (next-hop) для маршрута.";
             list next-hop {
               description
                 "Список next-hop для маршрута.";
               leaf outgoing-interface {
                 type if:interface-ref;
                 description
                   "Имя выходного интерфейса.";
               }
               leaf next-hop {
                 type inet:ip-address;
                 description
                   "Адрес next-hop.";
               }
             }
           }
           leaf metric {
             type uint32;
             description
               "Метрика маршрута.";
           }
           leaf route-type {
             type route-type;
             description
               "Тип маршрута.";
           }
           leaf route-tag {
             type uint32;
             description
               "Тег для маршрута.";
           }
         }
       }
     }

     grouping ietf-spf-delay {
       leaf initial-delay {
         type uint32;
         units "milliseconds";
         default "50";
         description
           "Задержка, применяемая в состоянии QUIET (мсек).";
       }
       leaf short-delay {
         type uint32;
         units "milliseconds";
         default "200";
         description
           "Задержка, применяемая в состоянии SHORT_WAIT (мсек).";
       }
       leaf long-delay {
         type uint32;
         units "milliseconds";
         default "5000";
         description
           "Задержка, применяемая в состоянии LONG_WAIT (мсек).";
       }
       leaf hold-down {
         type uint32;
         units "milliseconds";
         default "10000";
         description
           "Таймер для интервала без изменений, когда IGP
            считается стабильным (мсек).";
       }
       leaf time-to-learn {
         type uint32;
         units "milliseconds";
         default "500";
         description
           "Продолжительность изучения всех событий IGP, относящихся
            к одному сетевому событию (мсек).";
       }
       leaf current-state {
         type enumeration {
           enum quiet {
             description
               "Состояние QUIET.";
           }
           enum short-wait {
             description
               "Состояние SHORT_WAIT.";
           }
           enum long-wait {
             description
               "Состояние LONG_WAIT.";
           }
         }
         config false;
         description
           "Текущее состояние алгоритма отсрочки SPF (back-off).";
       }
       leaf remaining-time-to-learn {
         type rt-types:timer-value-milliseconds;
         config false;
         description
           "Время, оставшееся до завершения time-to-learn.";
       }
       leaf remaining-hold-down {
         type rt-types:timer-value-milliseconds;
         config false;
         description
           "Время, оставшееся до завершения hold-down.";
       }
       leaf last-event-received {
         type yang:timestamp;
         config false;
         description
           "Время последнего события-триггера SPF.";
       }
       leaf next-spf-time {
         type yang:timestamp;
         config false;
         description
           "Время следующего запланированного SPF.";
       }
       leaf last-spf-time {
         type yang:timestamp;
         config false;
         description
           "Время последнего расчёта SPF.";
       }
       description
         "Группировка для конфигурации и состояния задержки IETF SPF.";
       reference
         "RFC 8405: Shortest Path First (SPF) Back-Off Delay Algorithm
          for Link-State IGPs";
     }

     grouping node-tag-config {
       description
         "Состояние конфигурации тега узла OSPF.";
       container node-tags {
         if-feature "node-tag";
         list node-tag {
           key "tag";
           leaf tag {
             type uint32;
             description
               "Значение тега узла.";
           }
           description
             "Список тегов узлов.";
         }
         description
           "Контейнер для административных тегов узла.";
       }
     }

     grouping instance-config {
       description
         "Состояние конфигурации экземпляра OSPF.";

       leaf enabled {
         type boolean;
         default "true";
         description
           "Включает и выключает протокол.";
       }

       leaf explicit-router-id {
         if-feature "explicit-router-id";
         type rt-types:router-id;
         description
           "Уникальный 32-битовый идентификатор маршрутизатора
            (RFC 2328).";
         reference
           "RFC 2328: OSPF Version 2";
       }

       container preference {
         description
           "Конфигурация предпочтений для маршрутизатора. Во многих
            реализациях называется административной дистанцией.";
         reference
           "RFC 8349: A YANG Data Model for Routing Management
            (NMDA Version)";
         choice scope {
           description
             "Опции выражения предпочтений одним или несколькими
              значениями.";
           case single-value {
             leaf all {
               type uint8;
               description
                 "Предпочтение для внутриобластных, межобластных
                  и внешних маршрутов.";
             }
           }
           case multi-values {
             choice granularity {
               description
                 "Опции для указания предпочтений внутриобластных
                  и межобластных маршрутов.";
               case detail {
                 leaf intra-area {
                   type uint8;
                   description
                     "Предпочтение для маршрутов внутри области.";
                 }
                 leaf inter-area {
                   type uint8;
                   description
                     "Предпочтение для маршрутов между областями.";
                 }
               }
               case coarse {
                 leaf internal {
                   type uint8;
                   description
                     "Предпочтение для маршрутов внутри и между 
                      областями.";
                 }
               }
             }
             leaf external {
               type uint8;
               description
                 "Предпочтение для маршрутов внешних AS и NSSA.";
             }
           }
         }
       }

       container nsr {
         if-feature "nsr";
         description
           "Состояние настройки безостановочной маршрутизации (NSR).";
         leaf enabled {
           type boolean;
           description
             "Включает и выключает NSR.";
         }
       }

       container graceful-restart {
         if-feature "graceful-restart";
         description
           "Состояние конфигурации аккуратного перезапуска.";
         reference
           "RFC 3623: Graceful OSPF Restart
            RFC 5187: OSPFv3 Graceful Restart";
         leaf enabled {
           type boolean;
           description
             "Управляет аккуратным перезапуском (RFC 3623 для
              OSPFv2 и RFC 5187 для OSPFv3).";
         }
         leaf helper-enabled {
           type boolean;
           description
             "Включает поддержку помощника при аккуратном перезапуске
              маршрутизаторов (раздел 3 в RFC 3623).";
           reference
             "RFC 3623: Graceful OSPF Restart, Section 3";
         }
         leaf restart-interval {
           type uint16 {
             range "1..1800";
           }
           units "seconds";
           default "120";
           description
             "Интервал попыток аккуратного перезапуска (в секундах)
              до отказа (Приложение B.1 в RFC 3623).";
           reference
             "RFC 3623: Graceful OSPF Restart, Appendix B.1";
         }
         leaf helper-strict-lsa-checking {
           type boolean;
           description
             "Прерывает аккуратный перезапуск при смене топологии LSA
              (Приложение B.2 в RFC 3623).";
           reference
             "RFC 3623: Graceful OSPF Restart, Appendix B.2";
         }
       }

       container auto-cost {
         if-feature "auto-cost";
         description
           "Состояние автоматического расчёта стоимости интерфейса.";
         leaf enabled {
           type boolean;
           description
             "Управляет автоматическим расчётом стоимости интерфейса.";
         }
         leaf reference-bandwidth {
           when "../enabled = 'true'" {
             description
               "Применимо лишь при автоматическом расчёте стоимости.";
           }
           type uint32 {
             range "1..4294967";
           }
           units "Mbits";
           description
             "Эталонная пропускная способность для автоматического
              расчёта стоимости интерфейса (Мбит/с). Это значение
              делится на скорость интерфейса и 1 указывает
              минимальную стоимость.";
         }
       }

       container spf-control {
         leaf paths {
           if-feature "max-ecmp";
           type uint16 {
             range "1..65535";
           }
           description
             "Максимальное число равноценных путей (ECMP).";
         }
         container ietf-spf-delay {
           if-feature "ietf-spf-delay";
           uses ietf-spf-delay;
           description
             "Конфигурация алгоритма задержки IETF SPF.";
         }
         description
           "Управление расчётом SPF.";
       }

       container database-control {
         leaf max-lsa {
           if-feature "max-lsa";
           type uint32 {
             range "1..4294967294";
           }
           description
             "Максимальное число OSPF LSA, принимаемых маршрутизатором";
         }
         description
           "Управление поддержкой базы данных.";
       }

       container stub-router {
         if-feature "stub-router";
         description
           "Задаёт конфигурацию максимальной метрики.";

         choice trigger {
           description
             "Триггеры, разрешающие состояние маршрутизатора-заглушки.";
           container always {
             presence "Разрешает безусловную поддержку stub router.";
             description
               "Безусловное состояние stub router (анонсы транзитных
                каналов с MaxLinkMetric).";
             reference
               "RFC 6987: OSPF Stub Router Advertisement";
           }
         }
       }

       container mpls {
         description
           "Состояние конфигурации OSPF MPLS.";
         container te-rid {
           if-feature "te-rid";
           description
             "Стабильный IP-адрес маршрутизатора OSPF для TE.";
           leaf ipv4-router-id {
             type inet:ipv4-address;
             description
               "Явно заданный TE IPv4 Router ID.";
           }
           leaf ipv6-router-id {
             type inet:ipv6-address;
             description
               "Явно заданный TE IPv6 Router ID.";
           }
         }
         container ldp {
           description
             "Состояние конфигурации OSPF MPLS LDP.";
           leaf igp-sync {
             if-feature "ldp-igp-sync";
             type boolean;
             description
               "Включает синхронизацию LDP IGP.";
           }
         }
       }
       uses instance-fast-reroute-config;
       uses node-tag-config;
     }

     grouping instance-state {
       description
         "Рабочее состояние экземпляра OSPF.";

       leaf router-id {
         type rt-types:router-id;
         config false;
         description
           "32-битовый уникальный идентификатор маршрутизатора
            (RFC 2328).";
         reference
           "RFC 2328: OSPF Version 2";
       }

       uses local-rib;

       container statistics {
         config false;
         description
           "Статистика для экземпляра.";
         uses instance-stat;
       }

       container database {
         config false;
         description
           "AS-Scope LSDB.";
         list as-scope-lsa-type {
           key "lsa-type";
           description
             "Список OSPF AS-Scope LSA.";
           leaf lsa-type {
             type uint16;
             description
               "Тип OSPF AS-Scope LSA.";
           }
           container as-scope-lsas {
             description
               "Все AS-Scope LSA этого типа.";
             list as-scope-lsa {
               key "lsa-id adv-router";
               description
                 "Список OSPF AS-Scope LSA.";
               uses lsa-key;
               uses lsa {
                 refine "version/ospfv2/ospfv2" {
                   must "derived-from-or-self( "
                      + "../../../../../../"
                      + "rt:type, 'ospfv2')" {
                     description
                       "OSPFv2 LSA.";
                   }
                 }
                 refine "version/ospfv3/ospfv3" {
                   must "derived-from-or-self( "
                      + "../../../../../../"
                      + "rt:type, 'ospfv3')" {
                     description
                       "OSPFv3 LSA.";
                   }
                 }
               }
             }
           }
         }
       }
       uses spf-log;
       uses lsa-log;
     }

     grouping multi-topology-area-common-config {
       description
         "Базовое состояние конфигурации области OSPF с несколькими 
          топологиями.";
       leaf summary {
         when "derived-from(../../../area-type, 'stub-nssa-area')" {
           description
             "Сводный анонс в тупиковую область или NSSA.";
         }
         type boolean;
         description
           "Управляет сводными анонсами в топологию тупиковой области
            или NSSA.";
       }
       leaf default-cost {
         when "derived-from(../../../area-type, 'stub-nssa-area')" {
           description
             "Стоимость для LSA маршрута по умолчанию, анонсируемого 
              в тупиковую область или NSSA.";
         }
         type ospf-metric;
         description
           "Задаёт сводный маршрут по умолчанию для тупиковой области
            или NSSA.";
       }
     }

     grouping multi-topology-area-config {
       description
         "Состояние конфигурации области OSPF с разными топологиями.";

       uses multi-topology-area-common-config;
       uses address-family-area-config;
     }

     grouping multi-topology-state {
       description
         "Рабочее состояние OSPF с несколькими топологиями.";

       uses local-rib;
     }

     grouping multi-topology-interface-config {
       description
         "Состояние конфигурации OSPF с несколькими топологиями.";

       leaf cost {
         type ospf-link-metric;
         description
           "Стоимость интерфейса для этой топологии.";
       }
     }

     grouping ospfv3-interface-config {
       description
         "Связанное с интерфейсом состояние конфигурации OSPFv3.";

       leaf instance-id {
         type uint8;
         default "0";
         description
           "Идентификатор экземпляра OSPFv3.";
       }
     }

     grouping ospfv3-interface-state {
       description
         "Связанное с интерфейсом рабочее состояние OSPFv3.";

       leaf interface-id {
         type uint32;
         config false;
         description
           "Идентификатор экземпляра OSPFv3.";
       }
     }

     grouping lsa-identifiers {
       description
         "Параметры, однозначно указывающие LSA.";
       leaf area-id {
         type area-id-type;
         description
           "Area ID.";
       }
       leaf type {
         type uint16;
         description
           "Тип LSA.";
       }
       leaf lsa-id {
         type union {
           type inet:ipv4-address;
           type yang:dotted-quad;
         }
         description
           "Link State ID.";
       }
       leaf adv-router {
         type rt-types:router-id;
         description
           "Анонсирующий LSA маршрутизатор.";
       }
       leaf seq-num {
         type uint32;
         description
           "Порядковый номер LSA.";
       }
     }

     grouping spf-log {
       description
         "Группировка для журнальных записей SPF (log).";
       container spf-log {
         config false;
         description
           "Контейнер с записями SPF.";
         list event {
           key "id";
           description
             "Список записей SPF в форме буфера переноса в обратном
              хронологическом порядке (начиная со старых).";
           leaf id {
             type uint32;
             description
               "Идентификатор события (сугубо внутреннее значение).";
           }
           leaf spf-type {
             type enumeration {
               enum full {
                 description
                   "Расчёт SPF был выполнен для всего SPF.";
               }
               enum intra {
                 description
                   "Расчёт SPF лишь для маршрутов внутри области.";
               }
               enum inter {
                 description
                   "Расчёт SPF для сводных маршрутов между областями.";
               }
               enum external {
                 description
                   "Расчёт SPF лишь для маршрутов внешних AS и NSSA.";
               }
             }
             description
               "Расчёт SPF лишь для для записи журнала SPF.";
           }
           leaf schedule-timestamp {
             type yang:timestamp;
             description
               "Временная метка для запланированного расчёта.";
           }
           leaf start-timestamp {
             type yang:timestamp;
             description
               "Временная метка начала расчёта.";
           }
           leaf end-timestamp {
             type yang:timestamp;
             description
               "Временная метка завершения расчёта.";
           }
           list trigger-lsa {
             description
               "Список LSA, вызвавших расчёт.";
             uses lsa-identifiers;
           }
         }
       }
     }

     grouping lsa-log {
       description
         "Группировка для системного журнала LSA (log).";
       container lsa-log {
         config false;
         description
           "Контейнер со списком записей журнала LSA, включая локальные
            изменения LSA.";
         list event {
           key "id";
           description
             "Список записей LSA в форме буфера переноса в обратном
              хронологическом порядке (начиная со старых).";
           leaf id {
             type uint32;
             description
               "Идентификатор события (сугубо локальное значение).";
           }
           container lsa {
             description
               "Контейнер, описывающий LSA, записанные в журнал.";
             uses lsa-identifiers;
           }
           leaf received-timestamp {
             type yang:timestamp;
             description
               "Временная метка получения LSA. При локальном обновлении
                LSA это будет время создания LSA.";
           }
           leaf reason {
             type identityref {
               base lsa-log-reason;
             }
             description
               "Причина внесения записи в журнал LSA.";
           }
         }
       }
     }

     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol" {
       when "derived-from(rt:type, 'ospf')" {
         description
           "Это дополнение пригодно лишь для экземпляра протокола
            маршрутизации OSPF (типа ospfv2 или ospfv3).";
       }
       description
         "Дополнение OSPF control-plane-protocol для модуля 
          ietf-routing.";

       container ospf {
         description
           "Экземпляр протокола OSPF.";

         leaf address-family {
           when "derived-from-or-self(../../rt:type, 'ospfv3')" {
             description
               "Применимо только для OSPFv3.";
           }
           type iana-rt-types:address-family;
           description
             "Семейство адресов для экземпляра.";
         }

         uses instance-config;
         uses instance-state;

         container areas {
           description
             "Все области OSPF.";
           list area {
             key "area-id";
             description
               "Список областей OSPF.";
             leaf area-id {
               type area-id-type;
               description
                 "Area ID.";
             }

             uses area-config;
             uses area-state;

             container virtual-links {
               when "derived-from-or-self(../area-type, 'normal-area') "
                  + "and ../area-id = '0.0.0.0'" {
                 description
                   "Виртуальные каналы должны быть в магистральной 
                    (backbone) области.";
               }
               description
                 "Все виртуальные каналы.";
               list virtual-link {
                 key "transit-area-id router-id";
                 description
                   "Виртуальный канал OSPF.";
                 leaf transit-area-id {
                   type leafref {
                     path "../../../../area/area-id";
                   }
                   must "derived-from-or-self("
                      + "../../../../area[area-id=current()]"
                      + "/area-type, 'normal-area') and "
                      + "../../../../area[area-id=current()]"
                      + "/area-id != '0.0.0.0'" {
                     error-message "Транзитной области виртуального "
                             + "канала недопустимо быть магистральной.";
                     description
                       "Транзитной области виртуального канала 
                        недопустимо быть магистральной (0.0.0.0).";
                   }
                   description
                     "Идентификатор транзитной области виртуального 
                      канала.";
                 }
                 leaf router-id {
                   type rt-types:router-id;
                   description
                     "Router ID удалённой конечной точки виртуального
                      канала.";
                 }

                 uses virtual-link-config;
                 uses virtual-link-state;
               }
             }
             container sham-links {
               if-feature "pe-ce-protocol";
               description
                 "Все фиктивные (sham) каналы.";
               list sham-link {
                 key "local-id remote-id";
                 description
                   "Фиктивный канал OSPF.";
                 leaf local-id {
                   type inet:ip-address;
                   description
                     "Адрес локальной конечной точки фиктивного канала";
                 }
                 leaf remote-id {
                   type inet:ip-address;
                   description
                     "Адрес удалённой конечной точки фиктивного канала";
                 }
                 uses sham-link-config;
                 uses sham-link-state;
               }
             }
             container interfaces {
               description
                 "Все интерфейсы OSPF.";
               list interface {
                 key "name";
                 description
                   "Список интерфейсов OSPF.";
                 leaf name {
                   type if:interface-ref;
                   description
                     "Ссылка на имя интерфейса.";
                 }
                 uses interface-config;
                 uses interface-state;
               }
             }
           }
         }
       }
     }

     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/ospf" {
       when "derived-from(../rt:type, 'ospf')" {
         description
           "Это дополнение действительно лишь для OSPF
            (тип ospfv2 или ospfv3).";
       }
       if-feature "multi-topology";
       description
         "Дополнение состояния конфигурации экземпляра OSPF
          с несколькими топологиями.";
       container topologies {
         description
           "Все топологии.";
         list topology {
           key "name";
           description
             "Топология OSPF. Семейство адресов топологии OSPF 
              должно совпадать с семейством экземпляра маршрутизации.";
           leaf name {
             type leafref {
               path "../../../../../../rt:ribs/rt:rib/rt:name";
             }
             description
               "Имя таблицы RIB, соответствующей топологии OSPF.";
           }

           uses multi-topology-state;
         }
       }
     }

     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/ospf/"
           + "areas/area" {
       when "derived-from-or-self(../../../rt:type, "
          + "'ospfv2')" {
         description
           "Это дополнение действительно лишь для OSPFv2.";
       }
       if-feature "multi-topology";
       description
         "Дополнение состояния конфигурации области OSPF 
          с несколькими топологиями.";
       container topologies {
         description
           "Все топологии для области.";
         list topology {
           key "name";
           description
             "Топология области OSPF.";
           leaf name {
             type leafref {
               path "../../../../../../../../"
                  + "rt:ribs/rt:rib/rt:name";
             }
             description
               "Одна топология разрешена для этой области.";
           }

           uses multi-topology-area-config;
         }
       }
     }

     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/ospf/"
           + "areas/area/interfaces/interface" {
       when "derived-from-or-self(../../../../../rt:type, "
          + "'ospfv2')" {
         description
           "Это дополнение действительно лишь для OSPFv2.";
       }
       if-feature "multi-topology";
       description
         "Дополнение состояния конфигурации интерфейса OSPF 
          с несколькими топологиями.";
       container topologies {
         description
           "Все топологии для интерфейса.";
         list topology {
           key "name";
           description
             "Топология для интерфейса OSPF.";
           leaf name {
             type leafref {
               path "../../../../../../../../../../"
                  + "rt:ribs/rt:rib/rt:name";
             }
             description
               "Одна топология разрешена для этого интерфейса.";
           }

           uses multi-topology-interface-config;
         }
       }
     }

     augment "/rt:routing/rt:control-plane-protocols/"
           + "rt:control-plane-protocol/ospf/"
           + "areas/area/interfaces/interface" {
       when "derived-from-or-self(../../../../../rt:type, "
          + "'ospfv3')" {
         description
           "Это дополнение действительно лишь для OSPFv3.";
       }
       description
         "Дополнение состояния конфигурации OSPFv3, связанной 
          с интерфейсом.";
       uses ospfv3-interface-config;
       uses ospfv3-interface-state;
     }

     grouping route-content {
       description
         "Эта группировка определяет атрибуты маршрута,
          связанные с OSPF.";
       leaf metric {
         type uint32;
         description
           "Метрика маршрута OSPF.";
       }
       leaf tag {
         type uint32;
         default "0";
         description
           "Тег маршрута OSPF.";
       }
       leaf route-type {
         type route-type;
         description
           "Тип маршрута OSPF.";
       }
     }

     augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" {
       when "derived-from(rt:source-protocol, 'ospf')" {
         description
           "Это дополнение действительно лишь для маршрутов,
            полученных от протокола OSPF.";
       }
       description
         "Связанные с OSPF атрибуты маршрута.";
       uses route-content;
     }

     /*
      * RPC
      */

     rpc clear-neighbor {
       description
         "Этот вызов RPC очищает указанный набор соседей OSPF.
          При отказе по внутренним причинам OSPF следует возвращать
          error-tag и error-app-tag, соответствующие ошибке.";
       input {
         leaf routing-protocol-name {
           type leafref {
             path "/rt:routing/rt:control-plane-protocols/"
                + "rt:control-plane-protocol/rt:name";
           }
           mandatory true;
           description
             "Экземпляр протокола OSPF для которого удаляются соседи.

              Если указанного экземпляра OSPF нет, эту операцию НУЖНО
              завершать отказом с error-tag data-missing и
              error-app-tag routing-protocol-instance-not-found.";
         }

         leaf interface {
           type if:interface-ref;
           description
             "Имя экземпляра OSPF, для которого удаляются соседи.

              Если указанного экземпляра OSPF нет, эту операцию НУЖНО
              завершать отказом с error-tag data-missing и
              error-app-tag ospf-interface-not-found.";
         }
       }
     }

     rpc clear-database {
       description
         "Этот вызов RPC очищает указанную базу OSPF Link State. Кроме 
          того, все отношения соседства переводятся в состояние DOWN,
          а самосозданные LSA реорганизуются. При отказе операции по
          внутренним причинам OSPF следует указывать причину в error-tag
          и error-app-tag.";
       input {
         leaf routing-protocol-name {
           type leafref {
             path "/rt:routing/rt:control-plane-protocols/"
                + "rt:control-plane-protocol/rt:name";
           }
           mandatory true;
           description
             "Экземпляр протокола OSPF, для которого очищается LSDB.

              Если указанного экземпляра OSPF нет, эту операцию НУЖНО
              завершать отказом с error-tag data-missing и
              error-app-tag routing-protocol-instance-not-found.";
         }
       }
     }

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

     grouping notification-instance-hdr {
       description
         "Группировка с описаниями связанных с экземпляром общих
          уведомления OSPF.";

       leaf routing-protocol-name {
         type leafref {
           path "/rt:routing/rt:control-plane-protocols/"
              + "rt:control-plane-protocol/rt:name";
         }
         must "derived-from( "
            + "/rt:routing/rt:control-plane-protocols/"
            + "rt:control-plane-protocol[rt:name=current()]/"
            + "rt:type, 'ospf')";
         description
           "Имя экземпляра протокола маршрутизации OSPF.";
       }

       leaf address-family {
         type leafref {
           path "/rt:routing/"
              + "rt:control-plane-protocols/rt:control-plane-protocol"
              + "[rt:name=current()/../routing-protocol-name]/"
              + "ospf/address-family";
         }
         description
           "Семейство адресов экземпляра OSPF.";
       }
     }

     grouping notification-interface {
       description
         "Группировка для сведений об интерфейсе в связанных с
          интерфейсами уведомлениях OSPF.";

       choice if-link-type-selection {
         description
           "Варианты типов канала.";
         container interface {
           description
             "Обычный интерфейс.";
           leaf interface {
             type if:interface-ref;
             description
               "Интерфейс.";
           }
         }
         container virtual-link {
           description
             "Виртуальный канал.";
           leaf transit-area-id {
             type area-id-type;
             description
               "Area ID.";
           }
           leaf neighbor-router-id {
             type rt-types:router-id;
             description
               "Router ID соседа.";
           }
         }
         container sham-link {
           description
             "Фиктивный канал.";
           leaf area-id {
             type area-id-type;
             description
               "Area ID.";
           }
           leaf local-ip-addr {
             type inet:ip-address;
             description
               "Локальный адрес фиктивного канала.";
           }
           leaf remote-ip-addr {
             type inet:ip-address;
             description
               "Удаленный адрес фиктивного канала.";
           }
         }
       }
     }

     grouping notification-neighbor {
       description
         "Группировка для сведений о соседе в связанных
          с соседями уведомлениях.";

       leaf neighbor-router-id {
         type rt-types:router-id;
         description
           "Router ID соседа.";
       }

       leaf neighbor-ip-addr {
         type inet:ip-address;
         description
           "Адрес соседа.";
       }
     }

     notification if-state-change {
       uses notification-instance-hdr;
       uses notification-interface;

       leaf state {
         type if-state-type;
         description
           "Состояние интерфейса.";
       }
       description
         "Это уведомление передаётся при обнаружении
          смены состояния интерфейса.";
     }

     notification if-config-error {
       uses notification-instance-hdr;
       uses notification-interface;

       leaf packet-source {
         type inet:ip-address;
         description
           "Адрес источника.";
       }

       leaf packet-type {
         type packet-type;
         description
           "Тип пакета OSPF.";
       }

       leaf error {
         type enumeration {
           enum bad-version {
             description
               "Непригодня версия.";
           }
           enum area-mismatch {
             description
               "Несоответствие областей.";
           }
           enum unknown-nbma-nbr {
             description
               "Неизвестный сосед NBMA.";
           }
           enum unknown-virtual-nbr {
             description
               "Неизвестный сосед по виртуальному каналу.";
           }
           enum auth-type-mismatch {
             description
               "Несоответствие типа аутентификации.";
           }
           enum auth-failure {
             description
               "Отказ при аутентификации.";
           }
           enum net-mask-mismatch {
             description
               "Несоответствие маски сети.";
           }
           enum hello-interval-mismatch {
             description
               "Несоответствие интервала Hello.";
           }
           enum dead-interval-mismatch {
             description
               "Несоответствие интервала Dead.";
           }
           enum option-mismatch {
             description
               "Несоответствие опций.";
           }
           enum mtu-mismatch {
             description
               "Несоответствие MTU.";
           }
           enum duplicate-router-id {
             description
               "Дубликат Router ID.";
           }
           enum no-error {
             description
               "Нет ошибок.";
           }
         }
         description
           "Коды ошибок.";
       }
       description
         "Это уведомление передаётся при получении пакета, указывающего
          ошибку настройки интерфейса передающего маршрутизатора OSPF.";
     }

     notification nbr-state-change {
       uses notification-instance-hdr;
       uses notification-interface;
       uses notification-neighbor;

       leaf state {
         type nbr-state-type;
         description
           "Состояние соседа.";
       }

       description
         "Это уведомление передаётся при обнаружении смены состояния
          соседа.";
     }

     notification nbr-restart-helper-status-change {
       uses notification-instance-hdr;
       uses notification-interface;
       uses notification-neighbor;

       leaf status {
         type restart-helper-status-type;
         description
           "Состояние помошника в перезапуске.";
       }

       leaf age {
         type rt-types:timer-value-seconds16;
         description
           "Оставшееся время текущего интервала аккуратного перезапуска
            OSPF, когда маршрутизатор служит помощником для соседа.";
       }

       leaf exit-reason {
         type restart-exit-reason-type;
         description
           "Причина завершения помощника при перезапуске.";
       }
       description
         "Это уведомление передаётся при обнаружении смены состояния
          помощника при перезапуске соседа.";
     }

     notification if-rx-bad-packet {
       uses notification-instance-hdr;
       uses notification-interface;

       leaf packet-source {
         type inet:ip-address;
         description
           "Адрес источника.";
       }

       leaf packet-type {
         type packet-type;
         description
           "Тип пакета OSPF.";
       }

       description
         "Это уведомление передаётся при невозможности анализа пакета
          OSPF, принятого на интерфейсе OSPF.";
     }

     notification lsdb-approaching-overflow {
       uses notification-instance-hdr;

       leaf ext-lsdb-limit {
         type uint32;
         description
           "Максимальное число не заданных по умолчанию AS-External-LSA,
            которые можно сохранить в базе LSDB.";
       }

       description
         "Это уведомление передаётся, когда число LSA в LSDB 
          маршрутизатора превысит 90% от предела ext-lsdb-limit.";
     }

     notification lsdb-overflow {
       uses notification-instance-hdr;

       leaf ext-lsdb-limit {
         type uint32;
         description
           "Максимальное число не заданных по умолчанию AS-External-LSA,
            которые можно сохранить в базе LSDB.";
       }

       description
         "Это уведомление передаётся, когда число LSA в LSDB 
          маршрутизатора превысит предел ext-lsdb-limit.";
     }

     notification nssa-translator-status-change {
       uses notification-instance-hdr;

       leaf area-id {
         type area-id-type;
         description
           "Area ID.";
       }

       leaf status {
         type nssa-translator-state-type;
         description
           "Состояние транслятора NSSA.";
       }

       description
         "Это уведомление передаётся при смене роли маршрутизатора в
          трансляции OSPF NSSA-LSA в OSPF AS-External-LSA.";
     }

     notification restart-status-change {
       uses notification-instance-hdr;

       leaf status {
         type restart-status-type;
         description
           "Состояние перезапуска.";
       }

       leaf restart-interval {
         type uint16 {
           range "1..1800";
         }
         units "seconds";
         default "120";
         description
           "Интервал перезапуска.";
       }

       leaf exit-reason {
         type restart-exit-reason-type;
         description
           "Причина выхода для перезапуска.";
       }

       description
         "Это уведомление передаётся при смене состояния аккуратного
          перезапуска для маршрутизатора.";
     }
   }
   <CODE ENDS>

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

Заданный этим документом модуль YANG определяет схему для данных, предназначенную для доступа через сеть с использованием протоколов управления, таких как NETCONF [RFC6241] или RESTCONF [RFC8040]. Нижним уровнем NETCONF служит защищённый транспорт с обязательной поддержкой SSH (Secure Shell) [RFC6242]. Нижним уровнем RESTCONF служит протокол HTTPS с обязательной поддержкой защиты на транспортном уровне (TLS) [RFC8446].

Модель доступа к конфигурации сети (NACM – Network Configuration Access Control Model) [RFC8341] обеспечивает возможность разрешить доступ лишь определённых пользователей NETCONF или RESTCONF к заранее заданному подмножеству операций NETCONF или RESTCONF и содержимого.

В этом модуле данных YANG определено множество узлов данных, которые разрешают запись, создание и удаление (т. е. config true, как принято по умолчанию). Эти узлы могут быть конфиденциальными или уязвимыми в некоторых сетевых средах. Запись в такие узлы (например, edit-config) без должной защиты может негативно влиять на работу сети. Ниже перечислены ветви и узлы, которые могут быть конфиденциальны или уязвимы.

/ospf

/ospf/areas/

/ospf/areas/area[area-id]

/ospf/virtual-links/

/ospf/virtual-links/virtual-link[transit-area-id router-id]

/ospf/areas/area[area-id]/interfaces

/ospf/areas/area[area-id]/interfaces/interface[name]

/ospf/area/area[area-id]/sham-links

/ospf/area/area[area-id]/sham-links/sham-link[local-id remote-id]

Доступные для записи узлы данных представляют конфигурацию экземпляров, областей, виртуальных каналов, фиктивных (sham) каналов и интерфейсов и соответствуют указанным выше узлам схемы.
Для OSPF возможность изменения конфигурации позволяет скомпрометировать целиком домен OSPF, включая партнерство с несанкционированными маршрутизаторами для нарушения маршрутизации трафика и организацию массированных атак на службы (Denial-of-Service или DoS). Например, активизация OSPF на любом незащищённом интерфейсе позволить организовать смежность OSPF с несанкционированным и враждебным соседом. После организации смежности возможен перехват трафика. Например, может быть организована DoS-атака путём изменения стоимости интерфейса OSPF с введением асимметрии и возникновением жёсткой петли. Как правило, несанкционированное изменение большинства функций OSPF создаёт свой риск безопасности. Следует обратиться к разделу Security Considerations в соответствующих RFC.

Некоторые из доступных для чтения узлов в этом модуле YANG могут быть конфиденциальны или уязвимы в той или иной сетевой среде. Важно контролировать доступ к таким объектам (например, get, get-config, notification). Ниже перечислены ветви и узлы, которые могут быть конфиденциальны или уязвимы.

/ospf/database

/ospf/areas/area[area-id]/database

/ospf/virtual-links/virtual-link[transit-area-id router-id]/database

/ospf/areas/area[area-id]/interfaces/interface[name]/database

/ospf/area/area[area-id]/sham-links/sham-link[local-id remote-id]/database

Раскрытие базы состояний каналов (LSDB) будет подробно показывать топологию сети. Имеются отдельные базы LSDB для каждого интерфейса, области, виртуального и фиктивного канала, интерфейса. Соответствующие узлы данных показаны выше.
Раскрытие LSDB включает сведения, выходящие за рамки маршрутизатора OSPF. Это может быть нежелательно, поскольку может приводить к атакам. Кроме того, в случае раскрытия LSDB области можно восстановить целиком топологию IP-сети, а при развёртывании TE — и этой топологии. Операторы могут считать свою топологию конфиденциальной.

Для аутентификации OSPF конфигурация поддерживается через указание цепочек ключей [RFC8177] или прямое указание ключа и алгоритма проверки подлинности. Поэтому настройка аутентификации с использованием варианта (case) auth-key-chain в контейнере ospfv2-auth-specification или ospfv3-auth-specification наследует вопросы безопасности [RFC8177]. Это включает соображения о локальном хранении и обработке ключей аутентификации.

Кроме того, поддерживается локальное задание ключей аутентификации OSPF и связанных с ними алгоритмов для унаследованных реализаций, не поддерживающих цепочки ключей [RFC8177]. реализациям рекомендуется переходить на цепочки ключей, поскольку они обеспечивают (1) бесшовную смену ключей и алгоритмов, (2) задании ключей в шестнадцатеричном формате, повышающем энтропию ключа и (3) шифрование ключей с использованием алгоритма AES Key Wrap с заполнением (Padding) [RFC5649].

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

  • Модуль YANG OSPF поддерживает RPC clear-neighbor и clear-database, компрометация доступа к которым позволяет использовать временные отказы сети для организации DoS-атаки.

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

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

Этот документ регистрирует URI в реестре IETF XML Registry [RFC3688] в соответствии с форматом [RFC3688].

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

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

   Name:  ietf-ospf
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-ospf
   Prefix:  ospf
   Reference:  RFC 9129

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

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

[RFC1765] Moy, J., «OSPF Database Overflow», RFC 1765, DOI 10.17487/RFC1765, March 1995, <https://www.rfc-editor.org/info/rfc1765>.

[RFC1793] Moy, J., «Extending OSPF to Support Demand Circuits», RFC 1793, DOI 10.17487/RFC1793, April 1995, <https://www.rfc-editor.org/info/rfc1793>.

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

[RFC2328] Moy, J., «OSPF Version 2», STD 54, RFC 2328, DOI 10.17487/RFC2328, April 1998, <https://www.rfc-editor.org/info/rfc2328>.

[RFC3101] Murphy, P., «The OSPF Not-So-Stubby Area (NSSA) Option», RFC 3101, DOI 10.17487/RFC3101, January 2003, <https://www.rfc-editor.org/info/rfc3101>.

[RFC3623] Moy, J., Pillay-Esnault, P., and A. Lindem, «Graceful OSPF Restart», RFC 3623, DOI 10.17487/RFC3623, November 2003, <https://www.rfc-editor.org/info/rfc3623>.

[RFC3630] Katz, D., Kompella, K., and D. Yeung, «Traffic Engineering (TE) Extensions to OSPF Version 2», RFC 3630, DOI 10.17487/RFC3630, September 2003, <https://www.rfc-editor.org/info/rfc3630>.

[RFC3688] Mealling, M., «The IETF XML Registry», BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.

[RFC4552] Gupta, M. and N. Melam, «Authentication/Confidentiality for OSPFv3», RFC 4552, DOI 10.17487/RFC4552, June 2006, <https://www.rfc-editor.org/info/rfc4552>.

[RFC4576] Rosen, E., Psenak, P., and P. Pillay-Esnault, «Using a Link State Advertisement (LSA) Options Bit to Prevent Looping in BGP/MPLS IP Virtual Private Networks (VPNs)», RFC 4576, DOI 10.17487/RFC4576, June 2006, <https://www.rfc-editor.org/info/rfc4576>.

[RFC4577] Rosen, E., Psenak, P., and P. Pillay-Esnault, «OSPF as the Provider/Customer Edge Protocol for BGP/MPLS IP Virtual Private Networks (VPNs)», RFC 4577, DOI 10.17487/RFC4577, June 2006, <https://www.rfc-editor.org/info/rfc4577>.

[RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. Pillay-Esnault, «Multi-Topology (MT) Routing in OSPF», RFC 4915, DOI 10.17487/RFC4915, June 2007, <https://www.rfc-editor.org/info/rfc4915>.

[RFC4973] Srisuresh, P. and P. Joseph, «OSPF-xTE: Experimental Extension to OSPF for Traffic Engineering», RFC 4973, DOI 10.17487/RFC4973, July 2007, <https://www.rfc-editor.org/info/rfc4973>.

[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C. Pignataro, «The Generalized TTL Security Mechanism (GTSM)», RFC 5082, DOI 10.17487/RFC5082, October 2007, <https://www.rfc-editor.org/info/rfc5082>.

[RFC5185] Mirtorabi, S., Psenak, P., Lindem, A., Ed., and A. Oswal, «OSPF Multi-Area Adjacency», RFC 5185, DOI 10.17487/RFC5185, May 2008, <https://www.rfc-editor.org/info/rfc5185>.

[RFC5187] Pillay-Esnault, P. and A. Lindem, «OSPFv3 Graceful Restart», RFC 5187, DOI 10.17487/RFC5187, June 2008, <https://www.rfc-editor.org/info/rfc5187>.

[RFC5250] Berger, L., Bryskin, I., Zinin, A., and R. Coltun, «The OSPF Opaque LSA Option», RFC 5250, DOI 10.17487/RFC5250, July 2008, <https://www.rfc-editor.org/info/rfc5250>.

[RFC5286] Atlas, A., Ed. and A. Zinin, Ed., «Basic Specification for IP Fast Reroute: Loop-Free Alternates», RFC 5286, DOI 10.17487/RFC5286, September 2008, <https://www.rfc-editor.org/info/rfc5286>.

[RFC5309] Shen, N., Ed. and A. Zinin, Ed., «Point-to-Point Operation over LAN in Link State Routing Protocols», RFC 5309, DOI 10.17487/RFC5309, October 2008, <https://www.rfc-editor.org/info/rfc5309>.

[RFC5329] Ishiguro, K., Manral, V., Davey, A., and A. Lindem, Ed., «Traffic Engineering Extensions to OSPF Version 3», RFC 5329, DOI 10.17487/RFC5329, September 2008, <https://www.rfc-editor.org/info/rfc5329>.

[RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, «OSPF for IPv6», RFC 5340, DOI 10.17487/RFC5340, July 2008, <https://www.rfc-editor.org/info/rfc5340>.

[RFC5613] Zinin, A., Roy, A., Nguyen, L., Friedman, B., and D. Yeung, «OSPF Link-Local Signaling», RFC 5613, DOI 10.17487/RFC5613, August 2009, <https://www.rfc-editor.org/info/rfc5613>.

[RFC5642] Venkata, S., Harwani, S., Pignataro, C., and D. McPherson, «Dynamic Hostname Exchange Mechanism for OSPF», RFC 5642, DOI 10.17487/RFC5642, August 2009, <https://www.rfc-editor.org/info/rfc5642>.

[RFC5709] Bhatia, M., Manral, V., Fanto, M., White, R., Barnes, M., Li, T., and R. Atkinson, «OSPFv2 HMAC-SHA Cryptographic Authentication», RFC 5709, DOI 10.17487/RFC5709, October 2009, <https://www.rfc-editor.org/info/rfc5709>.

[RFC5714] Shand, M. and S. Bryant, «IP Fast Reroute Framework», RFC 5714, DOI 10.17487/RFC5714, January 2010, <https://www.rfc-editor.org/info/rfc5714>.

[RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and R. Aggarwal, «Support of Address Families in OSPFv3», RFC 5838, DOI 10.17487/RFC5838, April 2010, <https://www.rfc-editor.org/info/rfc5838>.

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

[RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and M. Lundberg, «OSPFv3 as a Provider Edge to Customer Edge (PE-CE) Routing Protocol», RFC 6565, DOI 10.17487/RFC6565, June 2012, <https://www.rfc-editor.org/info/rfc6565>.

[RFC6845] Sheth, N., Wang, L., and J. Zhang, «OSPF Hybrid Broadcast and Point-to-Multipoint Interface Type», RFC 6845, DOI 10.17487/RFC6845, January 2013, <https://www.rfc-editor.org/info/rfc6845>.

[RFC6860] Yang, Y., Retana, A., and A. Roy, «Hiding Transit-Only Networks in OSPF», RFC 6860, DOI 10.17487/RFC6860, January 2013, <https://www.rfc-editor.org/info/rfc6860>.

[RFC6987] Retana, A., Nguyen, L., Zinin, A., White, R., and D. McPherson, «OSPF Stub Router Advertisement», RFC 6987, DOI 10.17487/RFC6987, September 2013, <https://www.rfc-editor.org/info/rfc6987>.

[RFC6991] Schoenwaelder, J., Ed., «Common YANG Data Types», RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.

[RFC7166] Bhatia, M., Manral, V., and A. Lindem, «Supporting Authentication Trailer for OSPFv3», RFC 7166, DOI 10.17487/RFC7166, March 2014, <https://www.rfc-editor.org/info/rfc7166>.

[RFC7474] Bhatia, M., Hartman, S., Zhang, D., and A. Lindem, Ed., «Security Extension for OSPFv2 When Using Manual Key Management», RFC 7474, DOI 10.17487/RFC7474, April 2015, <https://www.rfc-editor.org/info/rfc7474>.

[RFC7490] Bryant, S., Filsfils, C., Previdi, S., Shand, M., and N. So, «Remote Loop-Free Alternate (LFA) Fast Reroute (FRR)», RFC 7490, DOI 10.17487/RFC7490, April 2015, <https://www.rfc-editor.org/info/rfc7490>.

[RFC7684] Psenak, P., Gredler, H., Shakir, R., Henderickx, W., Tantsura, J., and A. Lindem, «OSPFv2 Prefix/Link Attribute Advertisement», RFC 7684, DOI 10.17487/RFC7684, November 2015, <https://www.rfc-editor.org/info/rfc7684>.

[RFC7770] Lindem, A., Ed., Shen, N., Vasseur, JP., Aggarwal, R., and S. Shaffer, «Extensions to OSPF for Advertising Optional Router Capabilities», RFC 7770, DOI 10.17487/RFC7770, February 2016, <https://www.rfc-editor.org/info/rfc7770>.

[RFC7777] Hegde, S., Shakir, R., Smirnov, A., Li, Z., and B. Decraene, «Advertising Node Administrative Tags in OSPF», RFC 7777, DOI 10.17487/RFC7777, March 2016, <https://www.rfc-editor.org/info/rfc7777>.

[RFC7884] Pignataro, C., Bhatia, M., Aldrin, S., and T. Ranganath, «OSPF Extensions to Advertise Seamless Bidirectional Forwarding Detection (S-BFD) Target Discriminators», RFC 7884, DOI 10.17487/RFC7884, July 2016, <https://www.rfc-editor.org/info/rfc7884>.

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

[RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. Zhang, «YANG Data Model for Key Chains», RFC 8177, DOI 10.17487/RFC8177, June 2017, <https://www.rfc-editor.org/info/rfc8177>.

[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, «Common YANG Data Types for the Routing Area», RFC 8294, DOI 10.17487/RFC8294, December 2017, <https://www.rfc-editor.org/info/rfc8294>.

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

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

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

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

[RFC8405] Decraene, B., Litkowski, S., Gredler, H., Lindem, A., Francois, P., and C. Bowers, «Shortest Path First (SPF) Back-Off Delay Algorithm for Link-State IGPs», RFC 8405, DOI 10.17487/RFC8405, June 2018, <https://www.rfc-editor.org/info/rfc8405>.

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

[RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, «Signaling Maximum SID Depth (MSD) Using OSPF», RFC 8476, DOI 10.17487/RFC8476, December 2018, <https://www.rfc-editor.org/info/rfc8476>.

[RFC9314] Jethanandani, M., Ed., Rahman, R., Ed., Zheng, L., Ed., Pallagatti, S., and G. Mirsky, «YANG Data Model for Bidirectional Forwarding Detection (BFD)», RFC 9314, DOI 10.17487/RFC9314, September 2022, <https://www.rfc-editor.org/info/rfc9314>.

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

[RFC0905] International Organization for Standardization, «ISO Transport Protocol specification ISO DP 8073», RFC 905, DOI 10.17487/RFC0905, April 1984, <https://www.rfc-editor.org/info/rfc905>.

[RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., Coltun, R., and F. Baker, «OSPF Version 2 Management Information Base», RFC 4750, DOI 10.17487/RFC4750, December 2006, <https://www.rfc-editor.org/info/rfc4750>.

[RFC5443] Jork, M., Atlas, A., and L. Fang, «LDP IGP Synchronization», RFC 5443, DOI 10.17487/RFC5443, March 2009, <https://www.rfc-editor.org/info/rfc5443>.

[RFC5643] Joyal, D., Ed. and V. Manral, Ed., «Management Information Base for OSPFv3», RFC 5643, DOI 10.17487/RFC5643, August 2009, <https://www.rfc-editor.org/info/rfc5643>.

[RFC5649] Housley, R. and M. Dworkin, «Advanced Encryption Standard (AES) Key Wrap with Padding Algorithm», RFC 5649, DOI 10.17487/RFC5649, September 2009, <https://www.rfc-editor.org/info/rfc5649>.

[RFC5880] Katz, D. and D. Ward, «Bidirectional Forwarding Detection (BFD)», RFC 5880, DOI 10.17487/RFC5880, June 2010, <https://www.rfc-editor.org/info/rfc5880>.

[RFC5881] Katz, D. and D. Ward, «Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)», RFC 5881, DOI 10.17487/RFC5881, June 2010, <https://www.rfc-editor.org/info/rfc5881>.

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

Авторы благодарны Yi Yang, Alexander Clemm, Gaurav Gupta, Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta, Michael Darwish, Alan Davey, Renato Westphal за подробные рецензии и полезные замечания.

Спасибо Tom Petch за рецензию Last Call и улучшение организации документа.

Спасибо Alvaro Retana за комментарии AD.

Спасибо Benjamin Kaduk, Suresh Krishnan, Roman Danyliw за комментарии IESG review.

Принадлежность автора к MITRE Corporation указана лишь для идентификации и не означает явного согласия или поддержки корпорацией MITRE высказанных суждений, мнений ил точек зрения. Корпорация MITRE одобрила публикацию этого документа для Public Release, Distribution Unlimited с Public Release Case Number 18-3194.

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

Dean Bogdanovic
Volta Networks, Inc.
Email: dean@voltanet.io
 
Kiran Koushik Agrahara Sreenivasa
Verizon
500 W Dove Rd
Southlake, TX 76092
United States of America
Email: kk@employees.org

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

Derek Yeung
Arrcus, Inc.
2077 Gateway Place, Suite 400
San Jose, CA 95110
United States of America
Email: derek@arrcus.com
 
Yingzhen Qu
Futurewei
2330 Central Expressway
Santa Clara, CA 95050
United States of America
Email: yingzhen.qu@futurewei.com
 
Jeffrey Zhang
Juniper Networks
10 Technology Park Drive
Westford, MA 01886
United States of America
Email: zzhang@juniper.net
 
Ing-Wher Chen
The MITRE Corporation
Email: ingwherchen@mitre.org
 
Acee Lindem
Cisco Systems
301 Midenhall Way
Cary, NC 27513
United States of America
Email: acee@cisco.com

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

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

nmalykh@protokols.ru

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

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

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

RFC 9316 Intent Classification

Internet Research Task Force (IRTF)                                C. Li
Request for Comments: 9316                                 China Telecom
Category: Informational                                         O. Havel
ISSN: 2070-1721                                                A. Olariu
                                                     Huawei Technologies
                                                       P. Martinez-Julia
                                                                    NICT
                                                                J. Nobre
                                                                   UFRGS
                                                                D. Lopez
                                                         Telefonica, I+D
                                                            October 2022

Intent Classification

Классификация намерений

PDF

Аннотация

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

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

Документ является результатом работы исследовательской группы IRTF Network Management Research Group (NMRG).

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

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

Документ является результатом работы IRTF1. IRTF публикует результаты относящихся к Internet исследований и разработок. Эти результаты могут оказаться не пригодными для реализации. Данный RFC представляет согласованное мнение исследовательской группы Coding for Efficient Network Communications в рамках IRTF. Документы, одобренные для публикации IRSG, не претендуют на статус Internet Standard (см. раздел 2 в RFC 7841).

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

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

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

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

1. Введение

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

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

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

1.1. Исследования

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

  • Выражение и распознавание намерений ([Bezahaf21], [Bezahaf19], [Jacobs18]). Использование единой классификации может обеспечить согласованное понимание различных предлагаемых и исследуемых форм выражения намерений.

  • Организация (оркестровка) интеллектуальных автономных сетей радиодоступа (radio access network или RAN) [Banerjee21], где намерения классифицируются по их содержимому.

  • Верификация сети намерений [Tian19], где ведётся работа над созданием языка намерений.

Этот документ уже оказался весьма актуальным для сообщества исследователей, поскольку он послужил основой для предложения самогенерируемых систем на основе намерений [Bezahaf19], для продвижения виртуальных сетевых функций (Virtual Network Function или VNF) на основе сетей IBN2, которые полагаются на определения профилей намерений пользователя, соответствующих абстрактным сетевым службам [Leivadeas21], для повышения эффективности решений по предоставлению сетей на основе намерений, создания новых подходов к управлению службами [Davoli21] и даже определения для пользователей грамматики задания высокоуровневых требований к выбору blockchain в форме намерений [Padovan20]. Этот документ был упомянут в исследованиях, посвящённых интеллектуальным автономным сетям на основе намерений [Mehmood21] [Szilagyi21].

В документе также описан пример успешного применения этого предложения в академической среде [POC-IBN] исследователями в сфере программно-определяемых сетей и виртуализации сетевых функций (Software-Defined Networking / Network Function Virtualization или SDN/NFV) для определения сферы действия их проекта. Конкретная задача, которую решают исследователи, состоит в определении способов применения концепции намерений на разных уровнях, соответствующих разным заинтересованным сторонам.

Технический комитет IEEE по эксплуатации и управлению сетями (IEEE Communications Society Technical Committee on Network Operation and Management или IEEE-CNOM), исследовательская группа IRTF Network Management и IFIP WG6.6 разработали таксономию для управления сетями и службами [IFIP-NSM], применяемую исследовательским сообществом в сфере управления и эксплуатации сетей для структурирования сферы исследований с помощью чётко заданного набора ключевых слов и повышения катества обзоров в журнальных публикациях, конференциях и семинарах. Предложенная здесь таксономия намерений может послужить расширением для управления на основе намерений.

1.2. Стандарты и открытый код

Несколько SDO и проектов с открытым кодом, такие как IRTF NMRG, Open Networking Foundation (ONF) [ONF] / Open Network Operating System (ONOS) [ONOS], European Telecommunications Standards Institute (ETSI) / Experiential Networked Intelligence (ENI) и TMF с его автономными сетями, высказали намерения определить набор сетевых операций для декларативного выполнения.

Совсем недавно в IRTF NMRG был выпущен документ «Intent-Based Networking — Concepts and Definitions» [RFC9315], разъясняющий концепцию намерений (Intent) и содержащий обзор связанной с ней функциональности. Цель документа состоит в продвижении единому базовому пониманию терминов, концепций и функциональности, которое может послужить основой для последующего определения связанных исследовательских и инженерных задач и способов их решения.

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

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

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

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

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

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

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

Основное внимание в этом документе уделено определению критериев, позволяющих классифицировать намерения с точки зрения заинтересованных сторон. Концепции и определения, связанные с IBN представлены в [RFC9315]. Намерения рассмотрены, прежде всего, в контексте сети, однако не исключаются и другие типы намерений, представленные в параграфах 4.4 и 6.2.

Невозможно полностью дифференцировать намерения на основе лишь общих характеристик, за которыми следуют концепции, термины и намерения. В документе разъясняется, что представляют собой намерения для разных заинтересованных сторон путём классификации по различным измерениям, таким как решения, намерения пользователей и типы намерений. Такая классификация обеспечивает единое для всех участников понимание и служит для определения области действия и приоритета отдельных проектов, подтверждения концепций (proof of concept или PoC), исследований и проектов с открытым кодом.

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

2. Сокращения

AI

Artificial Intelligence — искусственный интеллект.

CE

Customer Equipment — клиентское оборудование.

CFS

Customer Facing Service — обслуживание клиентов.

CLI

Command-Line Interface — интерфейс командной строки, командный интерфейс.

DB

Database — база данных.

DC

Data Center — центр обработки данных, ЦОД

ECA

Event Condition Action — действие по событию.

GBP

Group-Based Policy — политика по группам.

GPU

Graphics Processing Unit — графический процессор.

IBN

Intent-Based Network — сеть на основе намерений.

NFV

Network Function Virtualization — виртуализация сетевой функции.

O&M

OAM & Maintenance — OAM и техническое обслуживание (поддержка).

ONF

Open Networking Foundation — фонд открытых сетей.

ONOS

Open Network Operating System — открытая сетевая операционная система (ОС).

PNF

Physical Network Function — функция физической сети.

QoE

Quality of Experience — качество опыта (работы).

RFS

Resource Facing Service — обслуживание ресурсов.

SDO

Standards Development Organization — орган стандартизации.

SD-WAN

Software-Defined Wide-Area Network — программно-управляемая распределенная сеть (WAN).

SLA

Service Level Agreement — соглашение об уровне обслуживания.

SUPA

Simplified Use of Policy Abstractions — упрощенное применение абстракций.

VM

Virtual Machine — виртуальная машина.

VNF

Virtual Network Function — виртуальная сетевая функция.

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

Единое базовое понимание терминов и определений для IBN представлено в [RFC9315], как показано ниже.

Intent — намерения

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

Intent-Based Network

Сеть, управляемая с использованием намерений.

Policy — правила (политика)

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

Intent User — пользователь намерений

Пользователь, задающий и вносящий запросы намерений для системы управления на основе намерений.

Другие определения, относящиеся к этому документу, такие как область действия намерений (intent scope), сетевая область действия намерений (intent network scope), абстракция намерений (intent abstraction), жизненный цикл намерений (intent life cycle) представлены в разделе 5. Функциональные характеристики и поведение.

4. Абстрактные требования к намерениям

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

4.1. Что такое намерения?

Термин «намерения» (Intent) получил очень широкое распространение в отрасли для разных целей, иногда не согласующихся с общими принципами SDO, отмеченными в разделе 1. В [RFC9315] даны разъяснения относительно того, что считать намерениями и чем намерения отличаются от правил и служб.

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

4.2. Решения и пользователи намерений

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

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

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

Таблица 1. Решения и пользователи намерений.

Решения

Пользователи намерений

Сети операторов

Сетевые операторы, Разработчики услуг и приложений, операторы услуг, клиенты и подписчики

Сети ЦОД

Администраторы облаков и базовых сетей, разработчики приложений, клиенты и арегдаторы

Сети предприятий

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

Эти решения и пользователи намерений являются стартовой точкой для классификации и применяются методикой , представленной в параграфе 6.1. Методика классификации намерений.

  • Например, для сетей операторов желание клиента (подписчика) смотреть видео с высоким разрешением ведёт к представлению его намерений преобразованием видеороликов в формат 1080p.

  • Для ЦОД у администраторов имеются свои чёткие намерения для сети, такие как распределение нагрузки. Для всех потоков трафика, требующих цепочки услуг NFV, они могут ограничить максимальную загрузку любого узла/контейнера VNF значением 50%, а для сетевых каналов — не более 70%.

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

4.3. Преимущества намерений для заинтересованных сторон

Современные сетевые API и CLI стали слишком сложными по причине глубокой интеграции с низкоуровневыми концепциями сетей. От клиентов, разработчиков приложений и конечных пользователей не следует требовать установки адресов IP, VLAN, подсетей, портов, тогда как операторы сетей могут хотеть сохранения технического и сетевого контроля. Все заинтересованные стороны получат преимущества от упрощений интерфейсов, таких как:

  • запрос приоритетного (gold) VPN-сервиса между сайтами A, B, C;

  • резервирование CE между сайтами клиента;

  • добавление правил доступа к сетевой служте.

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

  • упрощения и автоматизации сетевых операций;

  • упрошения определений сетевых служб;

  • предоставления простых клиентских API для дополнительных услуг (операторов);

  • информирования об отличии поведения сети или службы от запрошенного;

  • возможности автоматической оптимизации и корректировки для выбранных сценариев;

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

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

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

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

4.4. Типы намерений, которые необходимо поддерживать

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

  • Намерения для обслуживания клиентов

    • самообслуживание клиентов с SLA;

    • заказы операторов служб.

  • Намерения для служб сети и базовой (underlay) сети

    • заказы операторов служб;

    • настройка, проверка, корректировка и оптимизация конфигурации сети на основе намерений;

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

  • Намерения для сети и базовой сети

    • настройка конфигурации сети;

    • увтоматизированное управление жизненным циклом сетевых конфигураций;

    • сетевые ресурсы (коммутаторы, маршрутизаторы, маршрутизация, правила, базовая сеть).

  • Намерения для управления облаком

    • конфигурация ЦОД, VM, серверы баз данных и приложений;

    • связь между VM.

  • Намерения для управления ресурсами облака

    • управление жизненным циклом ресурсов облака (самонастройка по правилам, автоматической масштабирование, восстановление и оптимизация).

  • Стратегические намерения

    • безопасность, QoS, политика приложений, управление трафиком и т. п.;

    • настройка и монитринг правил, генерация сигналов при несоответствии, автоматическое восстановление;

    • создание моделей и правил для сетей и сетевых служб;

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

  • Намерения для задач эксплуатации

    • перенос сетей;

    • замена устройств;

    • обновление сетевых программ;

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

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

5. Функциональные характеристики и поведение

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

5.1. Абстрагирование намерений

Моделирование намерений можно абстрагировать с помощью триплетов {контекст, возможности, ограничения}.

  • Контекст обосновывает намерение и определяет, уместно ли оно в текущей ситуации, т.е выбирает намерения на основе применимости.

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

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

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

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

5.2. Типы пользователей намерений

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

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

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

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

5.3. Область действия намерений

Намерения служат для управления поведением сетей, в которых они применяются, и все намерения испольняются в конкретной области (scope), такой как:

  • область связности, если намерение создаёт или изменяет соединения;

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

  • область приложения, если намерение задаёт приложение для воздействия;

  • область QoS, когда намерение задаёт характеристики QoS для сети.

Эти области действия намерений применяются методикой, представленной в параграфе 6.1. Методика классификации намерений.

5.4. Намерения для сети

Независимо от типа пользователей намерений, их запросы влияют на сеть или её компоненты, служащие целью намерения. Таким образом, область действия намерения в сети или цель политики (в сфере декларативно политики) может представлять VNF или PNF, элементы физической сети, кампусные сети, SD-WAN, RAN, границы облаков, облака, филиалы и т. п..

5.5. Абстракция намерений

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

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

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

В соответствии с определением термина «намерения» в [RFC9315], низкоуровневые намерения не считаются намерениями. Однако эта классификация сохраняется здесь для идентификации PoC, демонстраций, примеров использования, которые по-прежнему требуют или применяют низкий уровень абстакции для намерений.

5.6. Жизненный цикл намерений

Намерения можно разделить на временные и постоянные (сохраняющиеся).

Transient — временные

Для намерения нет управления жизненным циклом. После успешного завершения заданной операции намерение завершается и больше не может влиять на целевой объект.

Persistent — постоянные

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

5.7. Уровни самоуправления

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

  • автоматически преобразуются в правила конфигурации лишь на более высоких уровнях;

  • охватывают весь жизненный цикл;

  • преобразуются в правила конфигурации и мониторинга;

  • обеспечивают сами себя с помощью AI.

Ниже приведены типовые примеры автономных (самоуправляемых) сетей уровня 0 — 5.

Уровень 0 — традиционная сеть с ручным управлением

Персонал O&M вручную управляет сетью, получая сигналы тревоги и записи системного журнала.
  • Нет намерений.

Уровень 1 — частично автоматизированная сеть

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

Уровень 2 — автоматизированная сеть

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

Уровень 3 — сеть с самооптимизацией

Глубокое понимание состояния сети и автоматическое управление сетью в соответствии с требованиями пользователей намерений в сети.
  • Намерения, основанные на понимании состояния сети.

Уровень 4 — сеть с частичным самоуправлением

В ограниченной среде людям не нужно участвовать в принятии решений и сеть может настраиваться сама.
  • Намерения на основе ограниченного AI.

Уровень 5 — автономная (самоуправляемая) сеть

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

6. Классификация намерений

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

Три классификации в этом документе разработаны с нуля в соответствии с представленной методикой) посредством трёх итераций — для решения в сетях операторов, ЦОД и сетях предприятий. Для каждого из решений указаны конкретные типы намерений и их пользователи. Затем идентифицируется область действия намерений и сети, абстракции и требования жизненного цикла.

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

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

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

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

6.1. Методика классификации намерений

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

          +------------------------------------------+
          |Знание решений (требования, примеры       |
          |использования, тезнологии, сеть, намерения|
          |пользователей, требования к намерениям)   |
          +----------------+-------------------------+
                           | Ввод              Rx=чтение
                           |                   Ux=обновление 
                  +--------V--------+          (добавить/удалить)
                  |1. Идентификация |
                  |   намерений     +------------+
                  |                 |            |
                  +---------^-+-----+            |
                         R1 | | U1               |
+---------------+ U8        | |    R2         +--v----------------+
|8.Идентификация+---------+ | |   +-----------> 2.Идентификация   |
|  новых        | R8      | | |   | U2        |   типов пользоват.|
|  категорий    <-------- | | |   | +---------+   намерений       |
+--------^------+       | | | |   | |         +-------|-----------+
         |              | | | |   | |                 |
         |             ++-+-v-v---+-v-+               |
+--------+------+ U7   |              | R3     +------v------------+
|7.Идентификация+------> Классификация+--------> 3.Идентификация   |
|  требований   | R7   |  намерений   | U3     |   типа            |
|  жизн. цикла  <------+              <--------+   намерений       |
+--------^------+      +^--^-+--^-+---+        +------|------------+
         |              || | |  | |                   |
         |              || | |  | |                   |
+--------+-----+        || | |  | | R4        +-------v-----------+
|6.Идентификац.| U6     || | |  | +-----------> 4.Идентификация   |
|  абстракций  +---------| | |  |   U4        |   области действия|
|              <---------+ | |  +-------------+   намерений       |
+-------^------+ R6        | |                +-------+-----------+
        |                  | |                        |
        |               U5 | |R5                      |
        |          +-------+-v--------+               |
        |          |5.Идентификация   |               |
        +----------+  области сети    <---------------+
                   +------------------+

Рисунок 1. Методика классификации намерений.


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

  1. Получение сведений из знаний о решении как входных данных для идентификации решения (например, оператор, предприятие, ЦОД). Решения с намерениями проверяются на соответствие имеющейся классификации и могут использоваться (при наличии), добавляться (при отсутствии) или удаляться (при ненужности) из классификации. (R1-U1)

  2. Определяются типы пользователей намерения (клиент, оператор сети или сервиса и т. п.). Просматривается имеющаяся классификация и тип пользователя применяется (при наличии), добавляется (при отсутствии) или удаляется (при ненужности). (R2-U2)

  3. Определяется тип намерения (намерение для сети или обслуживания пользователей и т. п. Просматривается имеющаяся классификация и тип намерения применяется, добавляется или удаляется. (R3-U3)

  4. Определяется область действия намерения (например, связность, приложение) на основе знаний о решении. Просматривается имеющаяся классификация и область действия применяется, добавляется или удаляется. (R4-U4)

  5. Определяются области сети (например, кампус, радидоступ). Просматривается имеющаяся классификация и область применяется, добавляется или удаляется. (R5-U5)

  6. Определяются абстракции (например, технические, нетехнические). Просматривается имеющаяся классификация и абстракции применяются, добавляются или удаляются. (R6-U6)

  7. Определяются требования к жизненному циклу намерения (постоянное, временное). Просматривается имеющаяся классификация и требования применяются, добавляются или удаляются. (R7-U7).

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

6.2. Таксономия намерений

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

Категории сферы намерений на рисунке 2 являются общими для всех 3 решений (операторы, ЦОД, предприятия). Сокращения (Cx) в параграфах 6.3.2 и 6.4.2 указываются в соответствии со столбцами в последующих таблицах.

                             +--------------------------------+
                         +-->|  Оператор   Предприятие   ЦОД  |
                         |   +--------------------------------+
                         |   +--------------------------------+
                         |   |Клиент, подписч., конечн. польз.|
           +----------+  |   |Оператор сети или сервиса       |
         +>+ Решение  +--+   |Разработчик приложений          |
         | +----------+   +->|Администратор предприятия       |
         |                |  |Администратор облака            |
         | +----------+   |  | Администратор базовой сети     |
         +>+Тип       +---+  +--------------------------------+
         | |пользоват.|      +--------------------------------+
         | |намерений |      |Намерения обслуживания клиентов |
         | +----------+      |Стратегические намерения        |
         | +----------+      |Намерения сетевых служб         |
         +>+Тип       +----->|Намерения служб базовой сети    |
+------+ | |намерений |      |Намерения для сети              |
|Намер.+-+ +----------+      |Намерения для базовой сети      |
+------+ |                   |Намерения для эксплуат. задач   |
         | +----------+      |Намерения для управления облаком|
         +>+Сфера     +---+  |Намерения управл. ресурс. облака|
         | |намерений |   |  +--------------------------------+
         | +----------+   |  +--------------------------------+
         |                +->|  Связность   Приложение  QoS   |
         | +----------+      | Безопасность Хранилище Расчёты |
         +>+Сфера     +---+  +--------------------------------+
         | |сети      |   |  +--------------------------------+
         | +----------+   |  |Радиодоступ       Филиал        |
         |                +->|Транспорт. доступ SD-WAN        |
         | +----------+      |Транспорт. агрег. VNF      PNF  |
         +>+Абстракция+----+ |Ядро транспорта   Физическая    |
         | |          |    | |Коай облака       Логическая    |
         | +----------+    | |Ядро облака       Кампус        |
         | +----------+    | +--------------------------------+
         +>+Жизненный |    | +--------------------------------+
           |цикл      +--+ +>|Тезническая       Нетехническая |
           +----------+  |   +--------------------------------+
                         |   +--------------------------------+
                         +-->|Постоянно         Временно      |
                             +--------------------------------+

Рисунок 2. Таксономия намерений.


6.3. Классификация намерений для операторских решений

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

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

Таблица 2. Классификация намерений для операторских решений.

Пользователь

Тип намерения

Описание намерения

Клиент, подписчик

Обслуживание клиентов

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

Стратегические намерения

Клиент создаёт модели и правила для намерений для примеенния в намерениях обслуживание клиентов.
Пример. Запрос надёжного обслуживания в пиковые периоды для видео-приложений.

Сетевой оператор

Намерения сетевой службы

Услуги, предоставляемые оператором сетевой службы клиентам (например, оператор сервиса).
Пример. Запрос сетевого сервиса с гарантиями по задержкам для доступа клиента A.

Намерения для сети

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

Задачи эксплуатации

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

Стратегические намерения

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

Оператор сервиса

Обслуживание клиентов

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

Намерения для сетевой службы

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

Задачи эксплуатации

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

Стратегические намерения

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

Разработчик приложений

Обслуживание клиентов

API для намерений обслуживания клиентов, предоставляемый разработчикам приложений.
Пример. API для запроса у сети просмотра HD-видео (4K/8K).

Намерения для сетевой службы

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

Намерения для сети

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

Задачи эксплуатации

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

Стратегические намерения

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

6.3.2. Категории намерений

В этом параграфе выполнены пп. 4 — 7 с рисунка 1, а ниже указаны предложенные категории.

Область намерений

C1=связность, C2=безопасность/приватность, C3=приложение, C4=QoS

Область сети

Домен сети

C1=радиодоступ, C2=транспортный доступ, C3=транспортное агрегирование, C4=ядро транспорта, C5=граница облака, C6=ядро облака

Область сетевой функции (NF)

C1=VNF, C2=PNF

Абстракция (ABS)

C1=техническая (с техническим откликом), C2=нетехническая (без технического отклика) (см. параграф 5.2)

Жизненный цикл (L-C)

C1=постоянное (полный жизненный цикл), C2=временное (краткосрочное)

6.3.3. Пример классификации намерений

В этом параграфе дан пример применения методики из параграфа 6.1 для классификации намерений, представленных в демонстрации PoC «A Multi-Level Approach to IBN» [POC-IBN]. Это подтверждения выполнено исследователями в сфере SDN/NFV, решающими задачу применения концепции намерений на разных уровнях, соответствующих различным заинтересованным сторонам. Для исследования применялись два типа намерений — намерения среза (slice) и намерения цепочки услуг (service chain). В PoC [POC-IBN] намерения для среза выражали запрос сетевого среза с 2 типами компонентов — набором виртуальных функций верхнего уровня и набором виртуальных коммутаторов и/или маршрутизаторов L2/ L3 VNF. Намерение для цепочки услуг выражалось запросом услуги, предоставляемой через цепочку компонентов в виртуальных функциях L4-L7.

В соответствии с методикой классификации из параграфа 6.1 можно вывести следующее:

  1. решением для обоих намерений служит сеть оператора;

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

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

  4. областью намерений являются связность и приложение;

  5. областью сети являются VNF, граница и ядро облака;

  6. абстракции возвращают технические сведения для среза и не возвращают для цепочки услуг;

  7. жизненный цикл является постоянным.

На рисунке 3 показано табличное представление этих сведений. X в таблице относится к намерению для среза, Y — для цепочки услуг.

Пользователь

Тип намерений

Область намерений

Обл. NF

Область сети

ABS

L-C

C1

C2

C3

C4

C1

C2

C1

C2

C3

C4

C5

C6

C1

C2

C1

Клиент, подписчик

Обслуживание клиентов

Стратегические намерения

Сетевой оператор

Намерения для сетевой службы

X

X

X

X

X

X

Намерения для сети

Задачи эксплуатации

Стратегические намерения

Оператор сервиса

Намерения клиента

Y

Y

Y

Y

Y

Y

Y

Намерения для сетевой службы

Задачи эксплуатации

Стратегические намерения

Разработчик приложений

Намерения клиента

Намерения для сетевой службы

Намерения для сети

Задачи эксплуатации

Стратегические намерения

Рисунок 3. Пример классификации намерений для операторского решения.

6.4. Классификация намерений для решений ЦОД

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

В таблице 3 описаны пользователи и типы намерений для решения ЦОД.

Таблица 3. Классификация намерений для ЦОД.

Пользователь

Тип намерения

Описание намерения

Клиент, арендатор

Обслуживание клиентов

Самообслуживание клиентов через портал арендаторов.
Пример. Запрос расчётов на GPU и ресурсов хранилища для поддержки 10 тысяч служб видеонаблюдения.

Стратегические намерения

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

Администратор облака

Управление облаком

Настройка VM, серверов DB, серверов приложений и связи между серверами и VM.
Пример. Запрос связности между VM A, B, C в сети N1.

Намерения управления облачными ресурсами

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

Задачи эксплуатации

Администратор облака запрашивает выполнение автоматизированных задач, отличных от намерений по управлению облаком и облачными ресурсами.
Пример. Запрос на обновление операционной системы до версии X на всех VM в сети N1.
Описание операций. Намерение обновить систему может изменить топологию (соединения со службами и партнерами), вызывать обмен данными (обновление содержмого) и придерживаться определённого уровня QoE (выделение достаточных ресурсов). Таким образом, сеть выполняет нужную настройку конфигурации для лучшего исполнения намерения, например, организуются прямые восходящие соединения между трминалами и справедливо выделяются очереди на маршрутизаторах с учётом других сетевых служб.

Стратегические намерения

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

Администратор базовой сети

Намерения для базовой сетевой службы

Услуга, создаваемые и предоставляемая администратором базовой сети.
Пример. Запрос базовой службы между DC1 и DC2 с полосой B.

Намерения для базовой сети

Администратор базовой сети запрашивает в масштабе DCN некую конфигурацию базовой сети или её ресурсов.
Пример. Организация и выбеление пула адресов DHCP.

Задачи эксплуатации

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

Стратегические намерения

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

Разработчик приложений

Управление облаком

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

Управление ресурсами облака

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

Намерения для базовой сетевой службы

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

Намерения для базовой сети

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

Задачи эксплуатации

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

Стратегические намерения

Разработчик приложений создаёт модели, правила намерений и рабочие процессы для применения другими намерениями. Предназначено для внутренних DCN DevOps.
Пример. API для запроса порогов распределения нагрузки.

6.4.2. Категории намерений

Ниже представлены предложенные категории

Область намерений

C1=связность, C2=безопасность/приватность, C3=приложение, C4=QoS, C5=хранилище, C6=расчёты

Область сети

Домен сети

Сеть ЦОД

Область сети DCN (DCN Net)

C1=логическая, C2=физическая

Область ресурса DCN (DCN Res)

C1=виртуальный, C2=физический

Абстракция (ABS)

C1=техническая (с техническим откликом), C2=нетехническая (без технического отклика) (см. параграф 5.2)

Жизненный цикл (L-C)

C1=постоянное (полный жизненный цикл), C2=временное (краткосрочное)

6.4.3. Пример классификации намерений

В этом параграфе приведён пример использования методики из параграфа 6.1 исследовательским сообществом для классификации намерений. Как указано в параграфе 6.3.3, успешное применение предложенной в документе классификации продемонстрировано в PoC «A Multi-Level Approach to IBN» [POC-IBN]. Это подтверждения выполнено исследователями в сфере SDN/NFV, решающими задачу применения концепции намерений на разных уровнях, соответствующих различным заинтересованным сторонам.

Для исследования применялись два типа намерений — намерения среза (slice) и намерения цепочки услуг (service chain). Для решения ЦОД применимы лишь намерения среза. Как указано в параграфе 6.3.3 намерения для среза выражали запрос сетевого среза с 2 типами компонентов — набором виртуальных функций верхнего уровня и набором виртуальных коммутаторов и/или маршрутизаторов L2/ L3 VNF.

В соответствии с методикой классификации из параграфа 6.1 можно вывести следующее:

  1. решением для обоих намерений служит сеть оператора;

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

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

  4. областью намерений являются связность и приложение;

  5. областью сети являются VNF, граница и ядро облака;

  6. абстракции возвращают технические сведения для среза и не возвращают для цепочки услуг;

  7. жизненный цикл является постоянным.

На рисунке 4 показано табличное представление этих сведений. X в таблице относится к намерению для среза.

Пользователь

Тип намерений

Область намерения

DCN Res

DCN Net

ABS

L-C

C1

C2

C3

C4

C5

C6

C1

C2

C1

C2

C1

C2

C1

C2

Клиент, арендатор

Обслуживание клиентов

Стратегические намерения

Администратор облака

Управление облаком

X

X

X

X

X

X

Управление ресурсами облака

Задачи эксплуатации

Стратегические намерения

Администратор базовой сети

Намерения для базовой сети

Намерения для ресурсов базовой сети

Задачи эксплуатации

Стратегические намерения

Разработчик приложений

Управление облаком

Управление ресурсами облака

Намерения для базовой сети

Намерения для ресурсов базовой сети

Задачи эксплуатации

Стратегические намерения

Рисунок 4. Пример классификации намерений для ЦОД.

6.5. Классификация намерений для корпоративных решений

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

В таблице 4 описаны пользователи и типы намерений для решения в сети предприятия.

Таблица 4. Классификация намерений для корпоративных решений.

Пользователь

Тип намерения

Описание намерения

Конечный пользователь

Обслуживание клиентов

Самообслуживание или приложения конечного пользоватля корпоративной сети. В сети могут быть разные типы конечных пользователей.
Пример. Запрос доступа в VPN. Запрос видеосвязи между пользователями A и B.

Стратегические намерения

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

Администратор корпоративной сети (внутренний или MSP)

Намерения для сетевой службы

Сервис, предоставляемый администраторам конечным пользователям и их приложениям.
Пример. Для всех конечного пользователя приложения X нужно синхронизировать прибытие голографических объектов в интервале 50 мсек. Соединение с VPN управления для типа сервиса A.
Описание операций. Работа сетевого уровня состоит в обеспечении задержки в алгоритме маршрутизации от 50 до 70 мсек. В то же время нужны сетевые ресурсы для обеспечения пропускной способности видеоконференций 4K.

Намерения для сети

Администратор запрашивает настройку в масштабе сети (например, базовой или кампусной) или настроку ресурсов (коммутаторы, маршрутизаторы, правила).
Пример. Настроить на коммутаторах кампусной сети 1 приоритизацию трафика типа A. Настроить YouTube как не имеющий отношения к бизнесу сервис.

Задачи эксплуатации

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

Стратегические намерения

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

Разработчик приложений

Намерения конечного пользователя

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

Намерения для сетевой службы

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

Намерения для сети

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

Задачи эксплуатации

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

Стратегические намерения

Разработчик приложений создаёт модели, правила намерений и рабочие процессы для применения другими намерениями. Это предназначено для доверенных внутренних DevOps.
Пример. API для стратегических намерений в случае опасности (угрозы).

6.5.2. Категории намерений

Ниже указаны предложенные категории.

Область намерения

C1=связность, C2=безопасность/приватность, C3=приложение, C4=QoS

Область сети (Net)

C1=кампус, C2=филиал, C3=SD-WAN

Абстракция (ABS)

C1=техническая (с техническим откликом), C2=нетехническая (без технического отклика) (see Section 5.2)

Жизненный цикл (L-C)

C1=постоянное (полный жизненный цикл), C2=временное (краткосрочное)

На рисунке 5 приведено табличное представление классификации для решения в сети предприятия.

Пользователь

Тип намерений

Область намерений

Net

ABS

L-C

C1

C2

C3

C4

C1

C2

C3

C1

C2

C1

C2

Конечный пользователь

Обслуживание клиентов

Стратегические намерения

Администратор корпоративной сети

Намерения для сетевой службы

Намерения для сети

Задачи эксплуатации

Стратегические намерения

Разработчик приложений

Намерения конечного пользователя

Намерения для сетевой службы

Намерения для сети

Задачи эксплуатации

Стратегические намерения

Рисунок 5. Категории намерений для корпоративных решений.

7. Заключение

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

Достоинства этого документа о классификации в сообществе исследователей были показаны в реализации PoC [POC-IBN], где концепции документа были применены на разных уровнях, соответствующих различным заинтересованным сторонам.

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

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

Область безопасности и приватности задаёт характеристики безопасности сети, клиентов или конечных пользователей и приватности клиентов и конечных пользователей.

Более подробные сведения о намерениях защиты (безопасности) будут приведены в будущих документах, задающих архитектуру, функциональность, пользовательские намерения и модели. Анализ вопросов безопасности основанных на намерениях систем в целом приведён в разделе 9 [RFC9315].

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

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

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

[Banerjee21] Banerjee, A., Mwanje, S., and G. Carle, «Contradiction Management in Intent-driven Cognitive Autonomous RAN», September 2021.

[Bezahaf19] Bezahaf, M., Hernandez, M., Bardwell, L., Davies, E., Broadbent, M., King, D., and D. Hutchison, «Self-Generated Intent-Based System», 10th International Conference on Networks of the Future (NoF), DOI 10.1109/NoF47743.2019.9015045, October 2019, <https://doi.org/10.1109/NoF47743.2019.9015045>.

[Bezahaf21] Bezahaf, M., Davies, E., Rotsos, C., and N. Race, «To All Intents and Purposes: Towards Flexible Intent Expression», IEEE 7th International Conference on Network Softwarization (NetSoft), DOI 10.1109/NetSoft51509.2021.9492554, July 2021, <https://doi.org/10.1109/NetSoft51509.2021.9492554>.

[Davoli21] Davoli, G., «Programmability and Management of Software-Defined Network Infrastructures», 2021.

[IFIP-NSM] IFIP, «Network and Service Management Taxonomy», <https://www.simpleweb.org/ifip/taxonomy.html>.

[Jacobs18] Jacobs, A., Pfitscher, R., Ferreira, R., and L. Granville, «Refining Network Intents for Self-Driving Networks», Proceedings of the Afternoon Workshop on Self-Driving Networks (SelfDN), DOI 10.1145/3229584.3229590, August 2018, <https://doi.org/10.1145/3229584.3229590>.

[Leivadeas21] Leivadeas, A. and M. Falkner, «VNF Placement Problem: A Multi-Tenant Intent-Based Networking Approach», 24th Conference on Innovation in Clouds, Internet and Networks and Workshops (ICIN), DOI 10.1109/ICIN51074.2021.9385553, March 2021, <https://doi.org/10.1109/ICIN51074.2021.9385553>.

[Mehmood21] Mehmood, K., Kralevska, K., and D. Palma, «Intent-driven Autonomous Network and Service Management in Future Networks: A Structured Literature Review», DOI 10.48550/arXiv.2108.04560, August 2021, <https://doi.org/10.48550/arXiv.2108.04560>.

[ONF] Open Networking Foundation, «Intent NBI — Definition and Principles», October 2016, <https://opennetworking.wpengine.com/wp-content/uploads/2014/10/TR-523_Intent_Definition_Principles.pdf>.

[ONOS] Koshibe, A., «Intent Framework», 2016, <https://wiki.onosproject.org/display/ONOS/Intent+Framework/>.

[Padovan20] Padovan, S., «Design and Implementation of a Blockchain Intent Management System», November 2020.

[POC-IBN] Martini, B., Cerroni, W., Gharbaoui, M., and D. Borsatti, «A Multi-Level Approach to IBN», IETF 108 Hackathon Report, July 2020, <https://www.ietf.org/proceedings/108/slides/slides-108-nmrg-ietf-108-hackathon-report-a-multi-level-approach-to-ibn-02>.

[RFC9315] Clemm, A., Ciavaglia, L., Granville, L. Z., and J. Tantsura, «Intent-Based Networking — Concepts and Definitions», RFC 9315, DOI 10.17487/RFC9315, October 2022, <https://www.rfc-editor.org/info/rfc9315>.

[Szilagyi21] Szilágyi, P., «I2BN: Intelligent Intent Based Networks», Journal of ICT Standardization, Volume 9, Issue 2, DOI 10.13052/jicts2245-800X.926, June 2021, <https://doi.org/10.13052/jicts2245-800X.926>.

[Tian19] Tian, B., Zhang, X., Zhai, E., Liu, H., Ye, Q., Wang, C., Wu, X., Ji, Z., Sang, Y., Zhang, M., Yu, D., Tian, C., Zheng, H., and B. Zhao, «Safely and automatically updating in-network ACL configurations with intent language», SIGCOMM ’19: Proceedings of the ACM Special Interest Group on Data Communication, DOI 10.1145/3341302.3342088, August 2019, <https://doi.org/10.1145/3341302.3342088>.

[TMF-AUTO] Boasman-Patel, A., Sun, D., Wang, Y., Maitre, C., Domingos, J., Troullides, Y., Mas, I., Traver, G., and G. Lupo, «Autonomous Networks: Empowering Digital Transformation For The Telecoms Industry», May 2019.

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

Этот документ был подготовлен с учётом рецензий, предложений, комментариев и предложенного текста от указанных в алфавитном порядке людей: Mehdi Bezahaf, Brian E. Carpenter, Laurent Ciavaglia, Benoit Claise, Alexander Clemm, Yehia Elkhatib, Jerome Francois, Pedro Andres Aranda Gutierrez, Daniel King, Branislav Meandzija, Bob Natale, Juergen Schoenwaelder, Xiaolin Song, Jeff Tantsura.

Спасибо Barbara Martini, Walter Cerroni, Molka Gharbaoui, Davide Borsatti за их вклад в демонстрацию PoC «A multi-level approach to IBN» — первую попытку применить методику классификации намерений.

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

Ниже указаны люди, внесшие вклад в создание этого документа.

Написали значительную часть текста:

Xueyuan Sun
China Telecom
 
Will (Shucheng) Liu
Huawei

Написали текст ранних вариантов этого документа:

Ying Chen
China Unicom
 
John Strassner
Huawei
 
Weiping Xu
Huawei
 
Richard Meade
Huawei

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

Chen Li
China Telecom
Xicheng District
No.118 Xizhimennei street
Beijing
100035
China
Email: lichen6@chinatelecom.cn
 
Olga Havel
Huawei Technologies
Ireland
Email: olga.havel@huawei.com
 
Adriana Olariu
Huawei Technologies
Ireland
Email: adriana.olariu@huawei.com
 
Pedro Martinez-Julia
NICT
Japan
Email: pedro@nict.go.jp
 
Jeferson Campos Nobre
Federal University of Rio Grande do Sul (UFRGS)
Porto Alegre-RS
Brazil
Email: jcnobre@inf.ufrgs.br
 
Diego R. Lopez
Telefonica I+D
Don Ramon de la Cruz, 82
28006 Madrid
Spain
Email: diego.r.lopez@telefonica.com

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

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

nmalykh@protokols.ru

1Internet Research Task Force — комиссия по исследовательским задачам Internet.

2Intent-Based Network — сеть на основе намерений. В оригинале ошибочно сказано Internet-Based Network, см. https://www.rfc-editor.org/errata/eid7178. Прим. перев.

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

RFC 9315 Intent-Based Networking — Concepts and Definitions

Internet Research Task Force (IRTF)                             A. Clemm
Request for Comments: 9315                                     Futurewei
Category: Informational                                     L. Ciavaglia
ISSN: 2070-1721                                                    Nokia
                                                         L. Z. Granville
                         Federal University of Rio Grande do Sul (UFRGS)
                                                             J. Tantsura
                                                               Microsoft
                                                            October 2022

Intent-Based Networking — Concepts and Definitions

Сеть на основе намерений — концепции и определения

PDF

Аннотация

Сети на основе намерений (Intent или Intent-Based) берут отрасль штурмом. Однако термины, связанные с такими сетями, часто применяются расплывчато и непоследовательно, во многих случаях перекрываясь и смешиваясь с другими концепциями (например, политика — policy). В этом документе разъяснён термин «намерение» (intent) и дан обзор связанной с ним функциональности. Цель состоит в содействии общему пониманию терминов, концепций и функциональности, которые могли бы послужить основой для дальнейших определений исследовательских и инженерных задач, а также их решения.

Документ является результатом работы группы IRTF Network Management Research Group (NMRG) и отражает согласованное мнение группы, получив множество подробных положительных отзывов от участников группы. Документ публикуется с информационными целями.

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

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

Документ является результатом работы IRTF1. IRTF публикует результаты относящихся к Internet исследований и разработок. Эти результаты могут оказаться не пригодными для реализации. Данный RFC представляет согласованное мнение исследовательской группы Coding for Efficient Network Communications в рамках IRTF. Документы, одобренные для публикации IRSG, не претендуют на статус Internet Standard (см. раздел 2 в RFC 7841).

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

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

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

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

1. Введение

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

В прошлом интерес к управлению и операциям в рамках IETF был сосредоточен на характеристиках отдельных сетей и устройств. В стандартизации акцент обычно был смещён на инструменты управления, которые должны предоставляться сетевым устройствам. Ярким примером служит управление на основе SNMP [RFC3411] и более 200 MIB, заданных IETF за эти годы. Более свежие примеры включают определения моделей данных YANG [RFC7950] для таких аспектов, как настройка интерфейсов, списков управления доступом (Access Control List или ACL) и Syslog.

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

В соответствии с этим в IETF начали заниматься аспектами сквозного управления, выходящими за рамки отдельных изолированных устройств. Примеры включают задание моделей YANG для топологии сети [RFC8345] или введение моделей служб, применяемых системами оркестровки и контроллерами [RFC8309]. Большой интерес вызвало обсуждение вопросов самоуправления сетей в рабочей группе ANIMA. Такие сети движимы желанием снизить операционные расходы и упростить управление сетью в целом, что вступает в противоречие с необходимостью управлять одним устройством и одной функцией за раз. Хотя самоуправляемые сети предназначены для демонстрации свойств «самоуправления» (self-management), они по-прежнему требуют действий оператора или внешней системы для обеспечения операционных рекомендаций и сведений о целях, задачах и экземплярах служб, которые сеть должна обслуживать.

Эти входные данные и операционные рекомендации обычно называют намерениями (intent), а сеть, позволяющую операторам предоставить свои данные в форме намерений, — сетью на основе намерений (Intent-Based Network или IBN). Сеть, помогающую реализовать намерения, называют основанной на намерениях системой (Intent-Based System или IBS). Такие системы могут по разному проявлять себя, например, как контроллер, система управления, реализованная в виде приложения, которое работает на сервере или группе серверов, или набор распределенных в сети функций, совместно реализующих основанную на намерениях функциональность.

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

Такое представление стало популярным в отрасли и привело к разработке множества решений, предлагающий управление на основе намерений (Intent-Based Management), обещающее сервис-провайдерам целостное управление сетями с высоким уровнем абстракций как системой, состоящей из соединённых компонентов, а не набора независимых устройств (соединённых между собой). Такие предложения включают IBN и IBS (с полным жизненным циклом намерений), контроллеры программно управляемых сетей (Software-Defined Network или SDN), обеспечивающие единую точку управления и администрирования для сети, а также системы управления сетью и системы поддержки операций (Operations Support System или OSS).

Давно признано, что комплексные решения для управления не могут работать лишь на уровне отдельных устройств и конфигураций нижнего уровня. В этом смысле представление намерений не является совсем новым. В прошлом модель ITU-T для управления телекоммуникационной сетью (Telecommunications Management Network или TMN) представляла набор уровней управления, определяющий иерархию управления для сетевых элементов, сети, сетевых служб и бизнеса [M3010]. Операционные цели высокого уровня распространяются в модели сверху вниз. Связанная иерархия абстракций имеет решающее значение для разложения комплексного управления на отдельные области задач. Эта иерархия абстракций сопровождается информационной иерархией, которая на нижнем уровне касалась сведений, относящихся к конкретным устройствам, а на верхних уровнях включала, например, экземпляры сквозного сервиса. Аналогично концепция управления на основе правил (Policy-Based Network Management или PBNM) долгое время расхваливала возможность позволить пользователям2 управлять сетями путём задания высокоуровневых правил управления, при этом системы управления автоматически «толковали» (rendering) эти правила, т. е. переводили их в конфигурации нижнего уровня и логику управления.

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

Следует отметить, что формулировка связанных с IBN исследовательских проблем выходит за рамки документа. Однако следует признать, что сети IBN стали важной темой в сообществе исследователей. Согласно IEEE Xplore [IEEEXPLORE] по состоянию на декабрь 2021 г за 10 лет с 2012 г. было опубликовано 1138 с термином intent, из которых 411 конкретно посвящены сетям. Только за период с 2020 г. было опубликовано 316 статей о «намерениях» и 153 — о сетях на основе намерений. Кроме того, проводятся семинары, посвящённые этой теме, такие как IEEE International Workshop on Intent-Based Networking [WIN21], а также специальные выпуски журналов [IEEE-TITS21]. Обзор текущих исследований представлен в [PANG20], где среди наиболее важных исследовательских задач указаны такие вопросы, как трансляция и понимание намерений, интерфейсы и безопасность.

2. Определения и сокращения

ACL

Access Control List — список управления доступом.

API

Application Programming Interface — интерфейс с прикладными программами.

IBA

Intent-Based Analytics — основанная на намерениях аналитика. Аналитика, определённая и выведенная из намерений пользователей и служащая для проверки предусмотренного состояния.

IBN

Intent-Based Network — сеть на базе намерений. Сеть, управляемая с использованием намерений.

IBS

Intent-Based System — система на базе намерений. Система, поддерживающая функции управления с помощью намерений.

Intent — намерения

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

Intent-Based Management — управление на базе намерений

Концепция управления на основе концепции намерений.

PBNM

Policy-Based Network Management — управление сетью на основе правил.

PDP

Policy Decision Point — точка принятия решений по правилам.

PEP

Policy Enforcement Point — точка применения правил (политики).

Policy — правила (политика)

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

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

Модель, представляющая услугу, которую сеть предоставляет пользователям.

SsoT

Single Source of Truth — единая точка доверия. Функциональный блок системы IBN, нормализующий намерения пользователей и служащий единым источником данных для нижележащих уровней.

Statement of Intent — заявление о намерениях

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

SvoT

Single Version of Truth — единая версия доверия.

User — пользователь

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

3. Концепции

Ниже представлен обзор концепция для намерений и управления на основе намерений (IBM), а также связанных с ними концепций моделей услуг и политики (и PBNM) и описаны их взаимоотношения с намерениями и IBM.

3.1. Намерения и управление на их основе

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

Термин intent был впервые введён в контексте самоуправляемых сетей (Autonomic Network), где он был определён как «абстрактная политика высокого уровня, применяемая для работы сети» [RFC7575]. В соответствии с этим определением намерения являются конкретным типом политики, предоставляемым пользователем для обеспечения руководства самоуправляемой сетью, которая в остальном работает без привлечения людей. Однако, чтобы термин «намерения» не рассматривался как синоним политики, нужно чётко указать отличие намерений от иных правил.

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

Управление на основе намерений (IBM) направлено на создание сетей, которые проще поддерживать и эксплуатировать и которые требуют минимального вмешательства извне. Сети (даже самоуправляемые) не являются ясновидящими и не могут автоматически узнавать, какие операционные цели и экземпляры сетевых служб нужно поддерживать. Иными словами, они не знают намерений провайдера, придающих смысл существованию сети. Все ещё требуется указывать сетям, что собой представляют такие намерения. При этом концепция намерений не ограничивается сетями с самоуправлением, такими как сети с автономной (самоуправляемой) плоскостью управления (Autonomic Control Plane) [RFC8994], а применимы к любым сетям.

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

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

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

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

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

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

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

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

  • Генерировать на месте данные эксплуатации, администрирования и поддержки (Operations, Administration, and Maintenance или OAM) и сетевой телеметрии для последующего автономного анализа при каждом наблюдении значительных флуктуаций задержки на пути (выход за рамки события-условия-действия без задания степени значимости и собираемых данных).

  • Направлять трафик в космической сети (Space Information Network) так, чтобы минимизировать зависимость от стратостатов, если предполагаемым получателем не является самолёт (не задан способ достижения, экстраполяция сценариев из [PANG20]).

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

Ниже приведены примеры, не являющиеся выражением намерений (на естественном языке для простоты).

  • Настроить на данном интерфейсе адрес IP (это настройка устройства и манипулирование «кнопками»).

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

  • Настроить VPN с туннелем между A и B по пути P (это настройка сервиса).

  • Запретить трафик к префиксу P1, если он не исходит от префикса P2 (правило доступа или межсетевого экрана, а не намерение).

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

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

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

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

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

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

3.2. Связанные концепции

3.2.1. Модели сервиса

Модель сервиса — это модель, представляющая услугу, обеспечиваемую пользователю сетью. В соответствии с [RFC8309] модель сервиса описывает услугу и её параметры независимым от реализации переносимым способом, который можно применять независимо от оборудования и операционной среды, где реализована услуга. Различают две категории — модель обслуживания клиентов (Customer Service Model) описывает экземпляр предоставляемой клиенту услуги, возможно требующей заказа, а модель предоставления услуги (Service Delivery Model) описывает реализацию услуги в имеющейся сетевой инфраструктуре.

Примерами могут служить услуги L3 VPN [RFC8299], Network Slice [NETWORK-SLICE] или локальный доступ в Internet. Модели сервиса представляют экземпляры служб как самостоятельные сущности. Службы имеют свои параметры, действия и жизненные циклы. Обычно экземпляр службы может быть привязан к конкретным пользователям коммуникационных услуг, которым могут быть выставлены счета за предоставляемые услуги.

Создание службы обычно включает несколько аспектов, указанных ниже.

  • Пользователь (или северная система) определяет и/или запрашивает создание экземпляра службы.

  • Выделяются ресурсы (адреса IP, номера AS, пулы VLAN или VxLAN, интерфейсы, полоса, память).

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

  • Привязки между объектами верхнего и нижнего уровня, которые нужно поддерживать.

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

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

Созданные экземпляры моделей услуг отображаются на низкоуровневые модели сетей и устройств, например, экземпляры путей или конкретных конфигураций портов. Модель сервиса обычно включает также уровня служб и зависимости от нижележащих сетевых ресурсов, требуемых для предоставления услуги. Это упрощает управление, позволяя следовать зависимостям в действиях по устранению неполадок и анализу влияния, когда события в сети оцениваются с точки зрения воздействия на службы и клиентов. Службы обычно организуются и предоставляются «сверху вниз», что также упрощает отслеживание назначения сетевых ресурсов (композиция), а поиск и устранение неполадок выполняется «снизу вверх» (декомпозиция). Модели сервиса могут быть связаны с другими данными, не относящимися к сети, но обеспечивающими бизнес-контекст. Это включает сведения о клиентах (например, информация для выставления счетов), заказы услуг, каталоги служб, тарифы, договоры на обслуживание и соглашения об уровне обслуживания (Service Level Agreement или SLA), включая договорные соглашения по корректирующим действиям.

[SERVICE-MAPPING-YANG] служит примером модели данных, обеспечивающей отображение моделей обслуживания клиентов (например, L3VPN Service Model) на модели организации трафика (Traffic Engineering или TE, например, TE Tunnel или the Abstraction and Control of Traffic Engineered Networks Virtual Network).

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

3.2.2. Политика и управление сетью на её основе

Управление сетью на основе правил (PBNM) — это парадигма управления, разделяющие правила поведения системы и её функциональность. Это обещает снизить расходы на поддержку информационных и коммуникационных систем одновременно повышая гибкость и адаптивность при работе. Сегодня это лежит в основе множества архитектур и парадигм управления, включая основанные на SLA, требованиях бизнеса, самоуправляемые, адаптивные и самоподдерживающиеся [BOUTABA07]. Заинтересованным читателям рекомендуется обратиться к имеющейся литературе, включающей множество ссылок. Здесь представлен лишь краткий обзор.

В основе такого управления лежит концепция правил (политики). Имеется множество определений политики — правила, регулирующие выбор поведение системы [SLOMAN94], набор правил, применяемых для поддержки и управления сменой и поддержанием состояния одного или нескольких объектов [STRASSNER03]. Общим для большинства определений является то, что политика считается «правилом». Обычно определение правила включает событие (которое вызывает правило), набор условий (при выполнении которых происходят фактические действия) и одно или несколько выполняемых действий.

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

Политика обычно предполагает некую степень абстракции, чтобы справиться с неоднородностью сетевых устройств. Вместо правил для конкретных устройств, задающих события, условия и действия в терминах зависящих от устройства команд, параметров и моделей данных, политика определяется на более высоком уровне абстракции, включающем каноническую модель систем и устройств, к которым она применяется. Агент политики в контроллере или устройстве последовательно «разбирает» правила, т. е. транслирует каноническую модель в соответствующее устройству представление. Эта концепция позволяет применять одну политику для широкого класса устройств без необходимость создания множества вариантов. Иными словами, определение политики отделено от её реализации и исполнения. Это позволяет расширять операционный масштаб и даёт сетевым операторам и авторам политики возможность использовать абстракции более высокого уровня, нежели специфика устройств, и применять определения высокого уровня в разных сетевых доменах, сетях WAN, центрах обработки данных (ЦОД или DC) облаках общего пользования.

В PBNM обычно применяется выталкивание (push) — правила выталкиваются в устройства, где они разбираются и применяются. Операции выталкивания выполняет менеджер или контроллер, отвечающий за развёртывание политики в сети и отслеживание корректности работы правил. Возможна иная архитектура политики, например, управление на основе правил может включать компонент втягивания (pull) в котором решение о предпринимаемых действиях передаётся точке принятия решений (Policy Decision Point или PDP). PDP может размещаться вне управляемого устройства и обычно имеет глобальную видимость и контекст для принятия решений. Всякий раз при наблюдении устройством события, связанного с политикой, при отсутствии полного определения правила или возможности выбрать действие, устройство обращается к PDP за решением (принимаемым, например, в соответствии с условиями). Затем устройство применяет решение, полученное от PDP, исполняя политику и действуя как точка применения правил (Policy Enforcement Point или PEP). В любом случае архитектура PBNM обычно включает центральный элемент, распространяющий правила по сети или принимающий решения.

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

3.2.3. Различия между намерениями, политикой и моделями служб

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

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

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

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

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

4. Принципы

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

  1. Единый источник (Single Source of Truth или SSoT) и одна версия (Single Version of Truth или SVoT) доверия. SSoT является важной частью IBS, позволяя выполнять несколько важных операций. В качестве SsoT системы служит набор проверенных выражений намерений. SsoT и записи рабочих состояний позволяют сравнивать предполагаемое/желаемое состояние с фактическим/операционным состоянием системы и определять различия между ними. SSoT и различия служат основой для корректирующих действий. Если в IBS имеются средства прогнозирования состояний, можно дополнительно разрабатывать стратегии предсказания, планирования и упреждающих действий в отношении любых тенденций расхождения с целью минимизации их влияния. Помимо предоставления средств для согласования работы системы, SSoT позволяет улучшить отслеживание для проверки, были ли и насколько хорошо выполнены исходные намерения и связанные с ними бизнес-цели для оценки влияния изменений в параметрах намерений, а также влияния и последствий происходящих в системе событий.

    Единая версия (или представление — View) доверия выводится из SSoT и может служить для выполнения таких операций, как запросы, опросы или фильтрация измеренных или полученных сопоставлением данных для создания так называемых «представлений» (view). Эти представления могут помогать пользователям IBS. Для создания заявления о намерениях как единого источника доверия система IBS должна следовать чётко заданным и хорошо документированным процессам и моделям. SSoT также называют неизменностью намерений [LENROW15].

  2. Одно касание, но не один шаг. В идеальной системе IBS пользователь в той или иной форме выражает намерения, а система выполняет все последующие операции (одно касание). Можно представить и подход «без касания» (zero-touch), если IBS имеет возможности или средства распознавания намерений в любой форме данных. Однако это не должно отвлекать от того, что достижение корректно сформированного и правильного выражения намерений не является одношаговым (one-shot) процессом. Напротив, взаимодействие между пользователем и IBS следует организовывать как итерационный процесс. В зависимости от уровня абстракции выражение намерений исходно может содержать в той или иной степени неявные части, а также неточные или неизвестные параметры и ограничения. Роль IBS заключается в разборе, понимании и уточнении намерений для достижения чётко сформированного и действительного выражения намерений, которое система может использовать для операций исполнения и подтверждения. Процесс уточнения намерений может включать комбинацию итерационных шагов, вовлекающих пользователя в проверку предложенных уточнений и уточнение некоторых параметров и переменных, которые система не может вывести или узнать самостоятельно. Кроме того, IBS потребуется разрешение конфликтов в намерениях, чтобы помочь пользователю сделать верный выбор среди вариантов, которые могут иметь разные последствия.

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

  4. Обучение. IBS — обучающаяся система. В отличие от императивных систем, таких как правила «событие-условие-действие» (Event-Condition-Action), где пользователь заранее задаёт ожидаемое поведение, в IBS пользователь лишь объявляет предполагаемое поведение системы, не указывая способов его достижения. Таким способом происходит передача рассуждений/рационализма от человека (знание предметной области) к системе. Эта передача когнитивных возможностей подразумевает наличие в IBS способов или средств обучения, рассуждения, а также представления знаний и управления ими. Способности IBS к обучению могут применяться для разных задач, таких как оптимизация разбора и уточнения намерений. Способность IBS к постоянному развитию создаёт условия для постоянного обучения и оптимизации. Другие когнитивные возможности, такие как планирование, также могут применяться в IBS для прогнозирования или предсказания будущих состояний системы и откликов на изменения намерений или условий в сети и соответствующей выработки планов по адаптации к этим изменениям при сохранении стабильности и эффективности системы, а также компромисса между стоимостью и надёжностью операций.

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

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

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

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

  • Абстракция и связанная с ней виртуализация, не зависящие от деталей реализации.

  • Настроенное на человека сетевое взаимодействие. IBN следует «говорить» на языке пользователя, не требуя от него «языка» устройств или сетей.

  • Возможность объяснения как важная функция IBN, обнаружение и разрешение с помощью IBN конфликтов намерений, а также согласование желаний пользователя с фактическими возможностями сети.

  • Встроенная поддержка, верификация и гарантии доверия.

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

5. Функциональность IBN

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

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

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

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

5.1. Реализация намерений

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

5.1.1. Восприятие намерений и взаимодействие с пользователями

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

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

5.1.2. Трансляция намерений

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

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

5.1.3. Оркестровка намерений

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

5.2. Обеспечение намерений

Обеспечение намерений (Intent Assurance) связано с функциями, требуемые для гарантии соответствия сети, воспринятым намерениям.

5.2.1. Мониторинг

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

5.2.2. Оценка соответствия намерений

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

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

5.2.3. Действия по обеспечению соответствия

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

5.2.4. Абстракции, агрегирование, отчёты

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

6. Жизненный цикл

Намерения имеют жизненный цикл — они возникают, могут меняться со временем и отзываться в какой-то момент. Этот жизненный цикл тесно связан с функциями взаимодействия в концепции намерений. На рисунке 1 показан жизненный цикл намерений и его основные функции. Указанные в разделе 5 функции разделены (по вертикали) на 2 функциональные плоскости, отражающие различия между исполнением и обеспечением. Каждая плоскость разделена по горизонтали на 3 части, показывающие разные точки зрения и взаимодействие с разными ролями.

  • Пользовательское пространство включает функции, связывающие сеть и IBS с пользователем-человеком. Это функции, позволяющие человеку сформулировать, а IBS — реализовать намерения. Здесь имеются также функции информирования о состоянии сети в части намерений, позволяющие пользователю оценить результат и его соответствие намерениям.

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

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

      Пользовательское   :       Пространство            :  Пространство
      пространство       :      трансляции (IBS)         :  сетевых
                         :                               :  операций
           +----------+  :  +----------+   +-----------+ : +-----------+
Восприятие |распознав.|---> |трансляция|-->|  обучение |-->| настройка/|
           |и генерац.|     |    и     |   |планирован.|   |предоставл.|
           |намерений |<--- |уточнение |   |воспроизвед| : |           |
           +----^-----+  :  +----------+   +-----^-----+ : +-----------+
                |        :                       |       :        |
   .............|................................|................|.....
                |        :                  +----+---+   :        v
                |        :                  |проверка|   :  +----------+
                |        :                  +----^---+ <----| отслежив.|
Обеспечение +---+---+    :  +---------+    +-----+---+   :  |наблюдение|
            | отчет | <---- |абстракц.|<---| анализ  | <----|          |
            +-------+    :  +---------+    |агрегиров|   :  +----------+
                         :                 +---------+   :

Рисунок 1. Жизненный цикл намерений.


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

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

  • «Внешний» контур управления намерениями распространяется на пространство пользователя. Он включает действия пользователя и корректировку намерений на основе наблюдений и обратной связи от IBS.

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

7. Дополнительные соображения

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

Operational Intent — эксплуатационные намерения

Намерения, связанные с эксплуатационными целями оператора. Это соответствует исходному термину intent и концепциям данного документа.

Rule Intent — намерения для политики

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

Service Intent — намерения для сервиса

Синоним модели обслуживания клиентов [RFC8309].

Flow Intent — намерения для потока

Синоним цели уровня обслуживания (Service Level Objective) для данного потока.

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

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

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

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

В этом документе описаны концепции и даны определения для основанных на намерениях сетей (Intent-Based Networking). Поэтому приведённые ниже соображения безопасности сохраняют высокий уровень, т. е указаны в виде принципов, рекомендаций или требований. Более подробное рассмотрение будет приведено в документах, задающих архитектуру и функциональность.

Безопасность в IBN имеет несколько аспектов:

  • защита самой системы IBS;

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

  • выражение правил или параметров безопасности в заявлениях о намерениях.

Защита IBS нацелена на обеспечения операционной безопасности IBS за счёт внедрения механизмов защиты и применения накопленного опыта. В контексте IBN такие механизмы и методы могут включать проверку намерений, предоставление возможности работать с намерениями лишь проверенным и уполномоченным пользователям, обнаружение фальсифицированных намерений и защиту от них. Такие механизмы могут включать внедрение нескольких уровней намерений. Например, намерения, связанные с защитой сети, следует помещать на «более глубокий» уровень, который при необходимости переопределяет намерения других уровней, а сам не может быть изменён обычными операциями и требует применения защищённых операций. Следует также рассмотреть применение дополнительных механизмов, таких как компоненты разъяснений, описывающие ветвления защиты и компромиссы, которые следует учитывать.

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

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

  • управление данными;

  • уровни конфиденциальности при обмене данными;

  • уровни доступности ресурсов системы, защиты на путях пересылки, изоляция в функциях обработки;

  • уровни шифрования;

  • уполномоченные для выполнения операций.

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

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

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

[BOUTABA07] Boutaba, R. and I. Aib, «Policy-Based Management: A Historical Perspective», Journal of Network and Systems Management (JNSM), Vol. 15, Issue 4, DOI 10.1007/s10922-007-9083-8, November 2007, <https://doi.org/10.1007/s10922-007-9083-8>.

[CLEMM20] Clemm, A., Faten Zhani, M., and R. Boutaba, «Network Management 2030: Operations and Control of Network 2030 Services», Journal of Network and Systems Management (JNSM), Vol. 28, Issue 4, DOI 10.1007/s10922-020-09517-0, October 2020, <https://doi.org/10.1007/s10922-020-09517-0>.

[GHARBAOUI21] Gharbaoui, M., Martini, B., and P. Castoldi, «Implementation of an Intent Layer for SDN-enabled and QoS-Aware Network Slicing», 2021 IEEE 7th International Conference on Network Softwarization (NetSoft), pp. 17-23, DOI 10.1109/NetSoft51509.2021.9492643, June 2021, <https://doi.org/10.1109/NetSoft51509.2021.9492643>.

[IEEE-TITS21] Garg, S., Guizani, M., Liang, Y-C., Granelli, F., Prasad, N., and R. R. V. Prasad, «Guest Editorial Special Issue on Intent-Based Networking for 5G-Envisioned Internet of Connected Vehicles», IEEE Transactions on Intelligent Transportation Systems, Vol. 22, Issue 8, pp. 5009-5017, DOI 10.1109/TITS.2021.3101259, August 2021, <https://doi.org/10.1109/TITS.2021.3101259>.

[IEEEXPLORE] IEEE, «IEEE Xplore», <https://ieeexplore.ieee.org/>.

[LENROW15] Lenrow, D., «Intent As The Common Interface to Network Resources», Intent Based Network Summit 2015 ONF Boulder: IntentNBI, February 2015.

[M3010] ITU-T, «Principles for a telecommunications management network», ITU-T Recommendation M.3010, February 2000.

[NETWORK-SLICE] Farrel, A., Ed., Drake, J., Ed., Rokui, R., Homma, S., Makhijani, K., Contreras, L. M., and J. Tantsura, «Framework for IETF Network Slices», Work in Progress, Internet-Draft, draft-ietf-teas-ietf-network-slices-14, 3 August 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-ietf-network-slices-14>.

[PANG20] Pang, L., Yang, C., Chen, D., Song, Y., and M. Guizan, «A Survey on Intent-Driven Networks», IEEE Access, Vol. 8, pp.22862-22873, DOI 10.1109/ACCESS.2020.2969208, January 2020, <https://doi.org/10.1109/ACCESS.2020.2969208>.

[RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, «An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks», STD 62, RFC 3411, DOI 10.17487/RFC3411, December 2002, <https://www.rfc-editor.org/info/rfc3411>.

[RFC7575] Behringer, M., Pritikin, M., Bjarnason, S., Clemm, A., Carpenter, B., Jiang, S., and L. Ciavaglia, «Autonomic Networking: Definitions and Design Goals», RFC 7575, DOI 10.17487/RFC7575, June 2015, <https://www.rfc-editor.org/info/rfc7575>.

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

[RFC8299] Wu, Q., Ed., Litkowski, S., Tomotaki, L., and K. Ogaki, «YANG Data Model for L3VPN Service Delivery», RFC 8299, DOI 10.17487/RFC8299, January 2018, <https://www.rfc-editor.org/info/rfc8299>.

[RFC8309] Wu, Q., Liu, W., and A. Farrel, «Service Models Explained», RFC 8309, DOI 10.17487/RFC8309, January 2018, <https://www.rfc-editor.org/info/rfc8309>.

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

[RFC8994] Eckert, T., Ed., Behringer, M., Ed., and S. Bjarnason, «An Autonomic Control Plane (ACP)», RFC 8994, DOI 10.17487/RFC8994, May 2021, <https://www.rfc-editor.org/info/rfc8994>.

[SERVICE-MAPPING-YANG] Lee, Y., Ed., Dhody, Dhruv., Ed., Fioccola, G., Wu, Q., Ed., Ceccarelli, D., and J. Tantsura, «Traffic Engineering (TE) and Service Mapping YANG Data Model», Work in Progress, Internet-Draft, draft-ietf-teas-te-service-mapping-yang-11, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-te-service-mapping-yang-11>.

[SLOMAN94] Sloman, M., «Policy Driven Management for Distributed Systems», Journal of Network and Systems Management (JNSM), Vol. 2, Issue 4, pp. 333-360, December 1994.

[STRASSNER03] Strassner, J., «Policy-Based Network Management», August 2003.

[TR523] Open Networking Foundation, «Intent NBI — Definition and Principles», ONF TR-523, October 2016.

[WIN21] Ciavaglia, L. and E. Renault, «1st International Workshop on Intent-Based Networking», IEEE International Conference on Network Softwarization, June 2021, <https://netsoft2021.ieee-netsoft.org/program/workshops/win-2021/>.

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

Спасибо членам исследовательской группы IRTF Network Management (NMRG) за полезные дискуссии и отклики. В частности, авторы хотели бы поблагодарить Remi Badonnel, Walter Cerroni, Marinos Charalambides, Luis Contreras, Jerome Francois, Molka Gharbaoui, Olga Havel, Chen Li, William Liu, Barbara Martini, Stephen Mwanje, Jeferson Nobre, Haoyu Song, Peter Szilagyi, Csaba Vulkan за отклики и поддержку. Отдельная благодарность Remi Badonnel, Walter Cerroni, Jerome Francois, Molka Gharbaoui, Barbara Martini, Stephen Mwanje, Peter Szilagyi, Csaba Vulkan, сделавшим ещё один шаг и предоставившим рецензии.

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

Alexander Clemm
Futurewei
2330 Central Expressway
Santa Clara, CA 95050
United States of America
Email: ludwig@clemm.org
 
Laurent Ciavaglia
Nokia
Route de Villejust
91620 Nozay
France
Email: laurent.ciavaglia@nokia.com
 
Lisandro Zambenedetti Granville
Federal University of Rio Grande do Sul (UFRGS)
Av. Bento Gonçalves
Porto Alegre-RS
9500
Brazil
Email: granville@inf.ufrgs.br
 
Jeff Tantsura
Microsoft
Email: jefftant.ietf@gmail.com

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

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

nmalykh@protokols.ru

1Internet Research Task Force — комиссия по исследовательским задачам Internet.

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

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

RFC 9306 Vendor-Specific LISP Canonical Address Format (LCAF)

Internet Engineering Task Force (IETF)                A. Rodriguez-Natal
Request for Comments: 9306                                         Cisco
Updates: 8060                                                 V. Ermagan
Category: Experimental                                      Google, Inc.
ISSN: 2070-1721                                               A. Smirnov
                                                           V. Ashtaputre
                                                                   Cisco
                                                            D. Farinacci
                                                             lispers.net
                                                            October 2022

Vendor-Specific LISP Canonical Address Format (LCAF)

Фирменные LCAF

PDF

Аннотация

Этот документ описывает новый формат канонического представления адресов (Canonical Address Format или LCAF) протокола разделения идентификаторов и локаторов (Locator/ID Separation Protocol или LISP) для фирменных (Vendor-Specific) LCAF. Этот формат позволяет организациям применять своё кодирование LCAF. Документ обновляет RFC 8060.

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

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

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

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

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

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

Канонический формат адресов LISP (LCAF) [RFC8060] задаёт форму и представление адресов разных типов, которые могут применяться в реализациях протокола LISP [RFC9300] [RFC9301]. Однако в некоторых реализациях могут применяться особые форматы, не применимые в других реализациях. Этот документ расширяет [RFC8060], вводя фирменный формат (Vendor-Specific LCAF), определяющий способ создания адресов LCAF для использования в конкретных реализациях LISP. Этот документ также обновляет [RFC8060], задавая поведение для нераспознанных типов LCAF.

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

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

3. Нераспознанные типы LCAF

В [RFC8060] обработка неизвестных типов LCAF не описана. Этот документ обновляет [RFC8060], указывая, что любые нераспознанные типы LCAF, полученные в сообщении плоскости управления LISP, должны игнорироваться. Если игнорируются все локаторы, это эквивалентно приёму управляющего сообщения LISP с Locator Count = 0, как указано в [RFC9301]. Если EID-Prefix содержит лишь нераспознанные типы LCAF, управляющее сообщение LISP должно отбрасываться, а в системный журнал должна вноситься запись об этом (EID обозначает идентификатор конечной точки).

4. Фирменные LCAF

В Vendor-Specific LCAF используется уникальный идентификатор организации (IEEE Organizationally Unique Identifier или OUI) [IEEE.802] для предотвращения конфликтор при использовании LCAF. Формат Vendor-Specific LCAF показан на рисунке 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 255  |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Rsvd3    |    Organizationally Unique Identifier (OUI)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Internal format...                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Фирменный LCAF.


Поля первых 8 октетов Vendor-Specific LCAF совпадают с полями базового формата LCAF, заданного в [RFC8060]. Поле Type должно иметь значение 255, выделенное IANA для фиременныхLCAF (см. 6. Взаимодействие с IANA). Значение поля Length учитывает поле Internal format, а также поля OUI и Rsvd3 как в [RFC8060]. Эти поля для Vendor-Specific LCAF описаны ниже.

Rsvd3

8-битовое резервное поле. Оно должно иметь значение 0 при передаче, а получатель должен игнорировать поле.

Organizationally Unique Identifier (OUI)

24-битовое поле OUI или идентификатора компании (Company ID или CID), выделенного агентством регистрации IEEE (Registration Authority или RA) в соответствии со стандартом IEEE Std 802 [IEEE.802]

Internal format

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

Тип Vendor-Specific LCAF не следует применять в системах, где взаимодействуют разные организации. Однако во многих случаях на практике две или более организации используют общую систему и тогда им требуется явно согласовать применение конкретных Vendor-Specific LCAF. В таких случаях вовлечённые организации должны тщательно оценить взаимодействия в конкретном развёртывании. Не рекомендуется применять значения OUI, не выделенные организации.

Если устройство LISP получает сообщение LISP, содержащее Vendor-Specific LCAF с неизвестным OUI, оно должно отбросить это сообщение и следует указать это событие в системном журнале.

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

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

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

В соответствии с рекомендациями [RFC8126] агентство IANA выделило для Vendor-Specific LCAF значение из реестра LISP Canonical Address Format (LCAF) Types, заданного в [RFC8060]).

Таблица 1. Назначение Vendor-Specific LCAF.

 

Значение

Имя типа LISP LCAF

Документ

255

Vendor Specific

RFC 9306, раздел 4

 

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

[IEEE.802] IEEE, «IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture», DOI 10.1109/IEEESTD.2014.6847097, IEEE Std 802, July 2014, <https://ieeexplore.ieee.org/document/6847097>.

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

[RFC8060] Farinacci, D., Meyer, D., and J. Snijders, «LISP Canonical Address Format (LCAF)», RFC 8060, DOI 10.17487/RFC8060, February 2017, <https://www.rfc-editor.org/info/rfc8060>.

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

[RFC9300] Farinacci, D., Fuller, V., Meyer, D., Lewis, D., and A. Cabellos, Ed., «The Locator/ID Separation Protocol (LISP)», RFC 9300, DOI 10.17487/RFC9300, October 2022, <https://www.rfc-editor.org/info/rfc9300>.

[RFC9301] Farinacci, D., Maino, F., Fuller, V., and A. Cabellos, Ed., «Locator/ID Separation Protocol (LISP) Control Plane», RFC 9301, DOI 10.17487/RFC9301, October 2022, <https://www.rfc-editor.org/info/rfc9301>.

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

Авторы признательны Joel Halpern, Luigi Iannone, Alvaro Retana за предложения и рекомендации.

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

Alberto Rodriguez-Natal
Cisco
Spain
Email: natal@cisco.com
 
Vina Ermagan
Google, Inc.
1600 Amphitheatre Parkway
Mountain View, CA 94043
United States of America
Email: ermagan@gmail.com
 
Anton Smirnov
Cisco
Diegem
Belgium
Email: asmirnov@cisco.com
 
Vrushali Ashtaputre
Cisco
San Jose, CA
United States of America
Email: vrushali@cisco.com
 
Dino Farinacci
lispers.net
San Jose, CA
United States of America
Email: farinacci@gmail.com

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

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

nmalykh@protokols.ru


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

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

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

RFC 9305 Locator/ID Separation Protocol (LISP) Generic Protocol Extension

Internet Engineering Task Force (IETF)                     F. Maino, Ed.
Request for Comments: 9305                                         Cisco
Category: Standards Track                                       J. Lemon
ISSN: 2070-1721                                                         
                                                              P. Agarwal
                                                                Innovium
                                                                D. Lewis
                                                                M. Smith
                                                                   Cisco
                                                            October 2022

Locator/ID Separation Protocol (LISP) Generic Protocol Extension

Расширение базового протокола LISP

PDF

Аннотация

В этом документе описаны расширения плоскости данных протокола разделения локаторов и идентификаторов (Locator/ID Separation Protocol или LISP) путём изменения заголовка LISP для поддержки многопротокольной инкапсуляции и расширения возможностей протокола.

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

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

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

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

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

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

Плоскость данных LISP задана в [RFC9300] и определяет формат инкапсуляции для передачи пакетов IPv4 и IPv6 (далее IP) с использованием заголовка LISP и внешнего транспорта UDP/IP.

Заголовок плоскости данных LISP не указывает инкапсулируемый протокол, поэтому в настоящее время инкапсуляция применяется лишь для пакетов IP. Другие протоколы, прежде всего, VXLAN3 [RFC7348] (определяющий формат заголовка, аналогичный LISP) применяются для инкапсуляции протоколов канального уровня (Layer 2 или L2), таких как Ethernet.

Этот документ залает расширение заголовка LISP, определённого в [RFC9300], для указания внутреннего протокола, что позволяет инкапсулировать Ethernet, IP или иной нужный протокол, сохраняя совместимость с имеющимися развёртываниями LISP.

Применяется флаг заголовка LISP (бит P) для указания наличия 8-битового поля Next Protocol. При наличии этого поля оно занимает 8 битов, выделенных в [RFC9300] для функций Echo-Noncing и Map-Versioning. Эти две функции становятся недоступными при использовании бита P. Однако можно задать подходящий промежуточные (shim) заголовки расширения базового протокола LISP (LISP Generic Protocol Extension или LISP-GPE) для задания возможностей, эквивалентных Echo-Noncing и Map-Versioning.

Поскольку все резервные биты заголовка плоскости данных LISP уже заняты, LISP-GPE можно использовать также для расширения заголовка плоскости данных LISP путём задания промежуточных заголовокв Next Protocol, реализующих новые функции плоскости данных, не поддерживаемые в заголовке LISP. Например, используя заголовок основанных на группах правил (Group-Based Policy или GBP) header [VXLAN-LISP] или IOAM4 [VXLAN-GPE] с LISP-GPE, можно рассмотреть расширение для поддержки в плоскости данных функций GBP или метаданных IOAM.

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

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

1.2. Определения терминов

В этом документе используются термины, определённые в [RFC9300].

2. Заголовок LISP без расширений протокола

Как описано в разделе 1, заголовок LISP не включает идентификатор протокола, указывающий тип передаваемого содержимого (payload). Поэтому в LISP передаются только пакеты IP.

Заголовок LISP [RFC9300] содержит набор флагов (часть их зарезервирована), поле Nonce/Map-Version и поле Instance ID/Locator-Status-Bits. Флаги обеспечивают гибкое кодирование полей. Отметим, что бит 5 остался последним резервным флагом заголовка LISP.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|R|K|K|            Nonce/Map-Version                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Instance ID/Locator-Status-Bits               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Заголовок LISP.


3. Расширение базового протокола LISP (LISP-GPE)

Этот документ задаёт два изменения заголовков LISP для поддержки многопротокольной инкапсуляции — флаг P и поле Next Protocol. Документ задаёт поведение протокола при установленном (1) флаге P, а сброшенный (0) бит P прежнее поведение. Заголовок LISP-GPE показан на рисунке 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|P|K|K|        Nonce/Map-Version/Next Protocol        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Instance ID/Locator-Status-Bits               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 2. Заголовок LISP-GPE.


P

Бит 5 задан как флаг Next Protocol, установка (1) которого говорит о наличии 8-битового поля Next Protocol. Сброшенный (0) бит указывает, что заголовок LISP полностью соответствует определению [RFC9300].

При установленном флаге P биты N, E, V и биты 8-23 поля Nonce/Map-Version/Next Protocol должны сбрасываться (0) при отправке, а получатель должен игнорировать их. Свойства, эквивалентные реализованным с помощью битов N, E, и V в [RFC9300], такие как Echo-Noncing и Map-Versioning, можно обеспечить путём задания подходящих промежуточных заголовков LISP-GPE.

 0 x 0 0 x 1 x x
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|L|E|V|I|P|K|K|             0x0000            | Next Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Instance ID/Locator-Status-Bits               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3. LISP-GPE с установленным битом P.


Заголовок LISP-GPE с установленным флагом P показан на рисунке 3.

Next Protocol

При установленном (1) флаге P младшие 8 битов первого 32-битового слова служат полем Next Protocol, указывающим протокол, инкапсулируемый в поле данных пакета.

Этот документ определяет указанные ниже значения Next Protocol.

   0x00:  резерв
   0x01:  IPv4
   0x02:  IPv6
   0x03:  Ethernet
   0x04:  Network Service Header (NSH) [RFC8300]
   0x05 - 0x7D:  не распределены
   0x7E и 0x7F:  эксперименты и тестирование
   0x80 - 0xFD:  не распределены (shim-заголовки)
   0xFE, 0xFF:  эксперименты и тестирование (shim-заголовки)

Эти значения внесены в реестр IANA LISP-GPE Next Protocol, как указано в параграфе 6.1.

Значения Next Protocol 0x7E, 0x7F, 0xFE, 0xFF выделены для экспериментов и тестирования в [RFC3692], значения 0x80 — 0xFD — для протоколов, кодируемых как промежуточные (shim) заголовки. Все такие протоколы должны использовать структуру заголовка, показанную на рисунке 4, которая включает поле Next Protocol. При использовании shim-заголовков с другими протоколами, указанными значениями Next Protocol от 0x00 до 0x7F, промежуточные заголовки должны быть первыми.

Промежуточные заголовки позволяют поэтапно внедрять новые функции GPE, сохраняя их понятную данной реализации туннельного маршрутизатора (Tunnel Router или xTR) обработку на «быстром» пути (обычно ASIC5) и переводя новые функции GPE на «медленный» путь.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     |   Reserved    | Next Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                    Protocol-Specific Fields                   ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 4. Shim-заголовок.


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

Type

Служит для идентификации различных сообщений данного протокола.

Length

Ращмер протокольного сообщения в 4-октетных блоках без учёта первых 4 октетов.

Reserved

Зарезервировано для протокола, определённого в этом сообщении.

Next Protocol

Указывает протокол для инкапсулируемых данных (payload). Значения протоколов указаны в реестре IANA LISP-GPE Next Protocol (параграф 6.1).

4. Вопросы реализации и внедрения

4.1. Заявление о применимости

LISP-GPE, как протокол инкапсуляции на обснове UDP, соответствует рекомендациям по использованию UDP из [RFC8085]. Применимость этих рекомендаций зависит от базовой сети IP и природы инкапсулируемых данных.

В [RFC8085] описано два варианта примерения приложений UDP для 1) общедоступной сети Internet и 2) контролируемой среды. Контролируемая среда предполагает один административный домен или набор смежных взаимодействующих доменов. Сетью в контролируемой среде можно управлять для создания определённых рабочих условий, а в общедоступной сети Internet это невозможно. Поэтому требования к туннельным протоколам для контролируемых сред задают меньше ограничений, чем для работы в общедоступной сети Internet.

Сфера применимости LISP-GPE совпадает с набором вариантов использования, указанных в [RFC9300] для протокола плоскости данных LISP. Общим свойством этих вариантов применения является наличие большого набора взаимодействующих элементов, стремящимися обмениваться данными через общедоступную сеть Internet или иные крупные инфраструктуры IP с отделением адресации и топологии взаимодействующих элементов от топологии, маршрутизации и адресации базовой сети и Internet.

Расширение LISP-GPE рассчитано на реализацию в сетевых средах, управляемых одним оператором или операторами взаимодействующих смежных сетей, которые соответствуют определению контролируемых сред в [RFC8085].

Для целей этого документа контролируемая среда с управляемым трафиком (Traffic-Managed Controlled Environment или TMCE), описанная в [RFC8086], рассматривается как сеть IP с организацией трафика (traffic-engineered) и/или иным управлением (например, применением ограничителей скорости трафика) для предотвращения перегрузки. Значительная часть текста этого разела заимствована из [RFC8086].

Операторы сетей отвечают за соблюдение требований и рекомендаций этого раздела в своих системах с LISP-GPE.

4.2. Функциональность контроля перегрузок

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

С учётом приведённых выше рекомендаций новые инкапсулируемые данные при регистрации в LISP-GPE должны сопровождаться набором рекомендаций, выведенных из раздела 5 в [RFC9300]. Такие новые протоколы следует разрабатывать с явными сигналами контроля перегрузки от нижележащего протокола в IP. После этого межсетевой уровень IP может выступать уровнем переноса для доставки уведомлений от перегруженных узлов, не понимающих бит IP, наверх до транспортного уровня (L4). Следуя рекомендациям [ENCAP-GUIDE], создатели подсетей могут разрешить протоколу L2 участие в контроле перегрузок без отбрасывания пакетов путём распространения получателям данных явного контроля перегрузок (Explicit Congestion Notification или ECN) [RFC3168].

4.3. Контрольная сумма UDP

Для данных IP (payload) в параграфе 5.3 [RFC9300] задана обработка контрольных сумм UDP с предложением к разработчикам учитывать рекомендации по контрольным суммам UDP из параграфа 3.4 в [RFC8085], когда они хотят защитить от повреждений заголовки UDP и LISP.

Для защиты целостности заголовков LISP-GPE, опций и данных (например, для предотвращения доставки данных в систему другого арендатора при повреждении поля данных) следует использовать внешнюю контрольную сумму UDP с LISP-GPE при транспортировке по протоколу IPv4. Контрольная сумма UDP обеспечивает статистические гарантии сохранности содержимого в процессе доставки. Такие проверки целостности не являются криптографически строгими и не предназначены для обнаружения ошибок на физическом уровне или враждебного изменения дейтаграмм (см. параграф 3.4 в [RFC8085]). В системах, где такой риск возникает, операторам следует использовать дополнительные механизмы защиты целостности данных, такие как IPsec.

Оператор может отказаться от применения контрольных сумм UDP (использовать нулевую сумму), если защита целостности пакетов LISP-GPE обеспечивается другими механизмами, такими как IPsec, или выполняется одно из условий параграфа 4.3.1 (a, b или c).

4.3.1. Обработка нулевой контрольной суммы UDP для IPv6

По умолчанию контрольная сумма UDP должна использоваться при доставке LISP-GPE по протоколу IPv6. Конечную точку туннеля можно настроить на использование нулевой контрольной суммы UDP, если выполняются дополнительные требования, указанные в этом параграфе.

При использовании LISP-GPE с протоколом IPv6 контрольная сумма UDP служит для защиты заголовков IPv6, UDP и LISP-GPE, а также данных от возможных повреждений. Таким образом, по умолчанию для LISP-GPE должна применяться контрольная сумма UDP при доставке через IPv6. Оператор может настроить работу с нулевой контрольной суммой UDP при работе в контролируемой среде с управлением трафиком, как указано в параграфе 4.1, если выполняется какое-либо из приведённых ниже условий.

  1. Известно, что повреждение пакетов крайне маловероятно (возможно, на основе сведений оператора о применяемом в базовой сети оборудовании) и оператор принимает риск незамеченного повреждения пакетов.

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

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

Кроме того, реализации туннелей LISP-GPE, использующие нулевые контрольные суммы UDP должны соблюдать приведённые ниже требования.

  1. Использование контрольной суммы UDP при работе по протоколу IPv6 должно быть по умолчанию включено для всех туннелей LISP-GPE.

  2. Если LISP-GPE применяется с нулевой контрольной суммой UDP по протоколу IPv6, реализации xTR должны соблюдать все требования, указанные в разделе 4 [RFC6936] и требование 1 из раздела 5 в [RFC6936].

  3. Выходным маршрутизаторам туннелей (Egress Tunnel Router или ETR), декапсулирующим пакеты, следует проверять, что адреса отправителя и получателя IPv6 действительны для туннеля LISP-GPE, настроенного на использование нулевой контрольной суммы UDP, и отбрасывать не прошедшие проверку пакеты.

  4. Входные маршрутизаторы туннелей (Ingress Tunnel Router или ITR), инкапсулирующие пакеты, могут использовать разные адреса отправителя IPv6 для каждого туннеля LISP-GPE с нулевой контрольной суммой UDP, чтобы усилить проверку адреса отправителя IPv6 декапсулятором (т. е. один и тот же адрес отправителя IPv6 не применяется для нескольких адресов получателей IPv6, как индивидуальных, так и групповых). Если это невозможно, рекомендуется применять каждый адрес отправителя для как можно меньшего числа туннелей LISP-GPE с нулевой контрольной суммой UDP.

  5. Следует принимать меры для предотвращения выхода туннельного трафика LISP-GPE по протоколу IPv6 с нулевой контрольной суммой UDP в общедоступную сеть Internet. Такими мерами являются фильтры пакетов на выходных маршрутизаторах-посредниках (Proxy Egress Tunnel Router или PETR) и физическое или логическое отделение сети LISP от общедоступных сетей Internet.

Приведённые выше требования не меняют требований [RFC6935], [RFC6936], [RFC8200].

Требование проверки адреса отправителя IPv6 в дополнение к проверке адреса получателя IPv6, а также рекомендации не использовать один адрес отправителя IPv6 для разных туннелей LISP-GPE совместно несколько смягчают отсутствие охвата контрольной суммой UDP в заголовке IPv6. В среде с управляемым трафиком, соответствующей хотя бы 1 из приведённых в начале параграфа требований, обеспечиваются дополнительные гарантии.

4.4. DSCP, ECN, TTL, 802.1Q

При инкапсуляции пакетов IP (включая Ethernet) документ [RFC2983] обеспечивает руководство по отображению кодов дифференцированного обслуживания (Differentiated Services Code Point или DSCP) между внутренними и внешними заголовками IP. При использовании сетевой виртуализации обычно лучше всего подходит модель Pipe. Значение DSCP в туннельном заголовке устанавливается на основе правил (оно может быть фиксированным, зависеть от класса трафика во внутреннем заголовке или определяться иным механизмом группировки трафика). Могут быть применимы некоторые аспекты модели Uniform (она трактует внутреннее и внешнее значения DSCP как одно поле, выполняя копирование на входе и выходе), такие как возможность перемаркировки внутреннего заголовка на выходе туннеля на основе транзитной маркировки. Однако модель Uniform концептуально не согласуется с виртуализацией сети в части строгой изоляции инкапсулированного трафика от физической сети.

В [RFC6040] описан механизм раскрытия возможностей ECN в туннелях IP и распространения маркеров на внутренние пакеты. Такому поведению должны следовать пакеты IP, инкапсулированные в LISP-GPE.

Хотя обе модели Uniform и Pipe пригодны для TTL (Hop Limit для IPv6) при обработке туннельных пакетов IP, модель Pipe лучше подходит для виртуализации сетей. В [RFC2003] даны рекомендации по обработке TTL внутренних и внешних заголовков IP, этот подход ближе к модели Pipe и рекомендуется для приложений виртуализации сетей с использованием LISP-GPE.

При выполнении маршрутизатором LISP-GPE инкапсуляции Ethernet внутреннее значение 3-битового кода приоритета (Priority Code Point или PCP) 802.1Q [IEEE.802.1Q_2014] может отображаться в код DSCP поля дифференцированного обслуживания (Differentiated Services или DS) внешнего заголовка, определённое в [RFC2474]. Поле идентификатора VLAN 802.1Q (VLAN Identifier или VID) [IEEE.802.1Q_2014] может отображаться в поле идентификатора экземпляра LISP (Instance ID или IID) или применяться для его установки.

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

5. Совместимость с прежними версиями

LISP-GPE использует порт получателя UDP 4341, выделенный для LISP.

При инкапсуляции пакетов IP для маршрутизатора, не поддерживающего LISP-GPE, флаг P должен сбрасываться (0), т. е. заданный этим документом формат инкапсуляции недопустимо применять для маршрутизаторов, не указавших поддержку этой спецификации, поскольку такие маршрутизаторы будут игнорировать флаг P (как указано в [RFC9300]) и в результате ошибочно интерпретировать другие поля заголовка LISP, что может приводить к значимым ошибкам.

5.1. Обнаружение возможностей ETR

Обнаружение поддержки LISP-GPE маршрутизаторами xTR выходит за рамки этого документа. С учётом того, что областью применимости LISP-GPE являются контролируемые среды с управлением трафиком, для этого могут применяться механизмы настройки ITR и ETR (xTR).

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

6.1. Реестр LISP-GPE Next Protocol

Агентство IANA создало реестр LISP-GPE Next Protocol, содержащий 8-битовые значения. В таблице 1 приведены значения Next Protocol, заданные этим документом. Новые значения выделяются по процедуре Specification Required [RFC8126]. Протоколы, которым выделяются значения, не обязательно относятся к категории IETF Standards Track.

Таблица 1.

 

Next Protocol

Описание

Документ

0x00

Резерв

RFC 9305

0x01

IPv4

RFC 9305

0x02

IPv6

RFC 9305

0x03

Ethernet

RFC 9305

0x04

NSH

RFC 9305

0x05-0x7D

Не выделены

0x7E-0x7F

Эксперименты и тестирование

RFC 9305

0x80-0xFD

Не выделены (shim-заголовки)

0xFE-0xFF

Эксперименты и тестирование (shim-заголовки)

RFC 9305

 

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

Соображения безопасности для LISP-GPE похожи на вопросы безопасности и методы смягчения проблем для LISP, описанные в [RFC7835].

Как другие варианты инкапсуляции с применением необязательных расширений, LISP-GPE подвергается воздействию злоумышленников, размещённых на пути доставки, которые могут пытаться изменить пакеты (включая флаг P) для удаления или изменения частей данных (payload) или заявления инкапсуляции иного протокола. Следует применять типовые методы защиты целостности (например, IPsec) в сочетании с LISP-GPE для расширений протоколов, которым нужна защита от злоумышленников на пути доставки.

При использовании LISP-GPE такие проблемы, как подмена плоскости данных, лавинные атаки и перенаправление трафика, могут зависеть от конкретного инкапсулируемого протокола.

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

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

[IEEE.802.1Q_2014] IEEE, «IEEE Standard for Local and metropolitan area networks—Bridges and Bridged Networks», IEEE Std 802.1Q-2014, December 2014, <https://ieeexplore.ieee.org/document/6991462>.

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

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

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

[RFC9300] Farinacci, D., Fuller, V., Meyer, D., Lewis, D., and A. Cabellos, Ed., «The Locator/ID Separation Protocol (LISP)», RFC 9300, DOI 10.17487/RFC9300, October 2022, <https://www.rfc-editor.org/info/rfc9300>.

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

[ENCAP-GUIDE] Briscoe, B. and J. Kaippallimalil, «Guidelines for Adding Congestion Notification to Protocols that Encapsulate IP», Work in Progress, Internet-Draft, draft-ietf-tsvwg-ecn-encap-guidelines-17, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-ecn-encap-guidelines-17>.

[RFC2003] Perkins, C., «IP Encapsulation within IP», RFC 2003, DOI 10.17487/RFC2003, October 1996, <https://www.rfc-editor.org/info/rfc2003>.

[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, «Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers», RFC 2474, DOI 10.17487/RFC2474, December 1998, <https://www.rfc-editor.org/info/rfc2474>.

[RFC2983] Black, D., «Differentiated Services and Tunnels», RFC 2983, DOI 10.17487/RFC2983, October 2000, <https://www.rfc-editor.org/info/rfc2983>.

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

[RFC3692] Narten, T., «Assigning Experimental and Testing Numbers Considered Useful», BCP 82, RFC 3692, DOI 10.17487/RFC3692, January 2004, <https://www.rfc-editor.org/info/rfc3692>.

[RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, «IPv6 and UDP Checksums for Tunneled Packets», RFC 6935, DOI 10.17487/RFC6935, April 2013, <https://www.rfc-editor.org/info/rfc6935>.

[RFC6936] Fairhurst, G. and M. Westerlund, «Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums», RFC 6936, DOI 10.17487/RFC6936, April 2013, <https://www.rfc-editor.org/info/rfc6936>.

[RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., and C. Wright, «Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks», RFC 7348, DOI 10.17487/RFC7348, August 2014, <https://www.rfc-editor.org/info/rfc7348>.

[RFC7835] Saucez, D., Iannone, L., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Threat Analysis», RFC 7835, DOI 10.17487/RFC7835, April 2016, <https://www.rfc-editor.org/info/rfc7835>.

[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, «UDP Usage Guidelines», BCP 145, RFC 8085, DOI 10.17487/RFC8085, March 2017, <https://www.rfc-editor.org/info/rfc8085>.

[RFC8086] Yong, L., Ed., Crabbe, E., Xu, X., and T. Herbert, «GRE-in-UDP Encapsulation», RFC 8086, DOI 10.17487/RFC8086, March 2017, <https://www.rfc-editor.org/info/rfc8086>.

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

[RFC8200] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», STD 86, RFC 8200, DOI 10.17487/RFC8200, July 2017, <https://www.rfc-editor.org/info/rfc8200>.

[RFC8300] Quinn, P., Ed., Elzur, U., Ed., and C. Pignataro, Ed., «Network Service Header (NSH)», RFC 8300, DOI 10.17487/RFC8300, January 2018, <https://www.rfc-editor.org/info/rfc8300>.

[VXLAN-GPE] Brockners, F., Bhandari, S., Govindan, V., Pignataro, C., Gredler, H., Leddy, J., Youell, S., Mizrahi, T., Kfir, A., Gafni, B., Lapukhov, P., and M. Spiegel, «VXLAN-GPE Encapsulation for In-situ OAM Data», Work in Progress, Internet-Draft, draft-brockners-ippm-ioam-vxlan-gpe-03, 4 November 2019, <https://datatracker.ietf.org/doc/html/draft-brockners-ippm-ioam-vxlan-gpe-03>.

[VXLAN-LISP] Lemon, J., Ed., Maino, F., Smith, M., and A. Isaac, «Group Policy Encoding with VXLAN-GPE and LISP-GPE», Work in Progress, Internet-Draft, draft-lemon-vxlan-lisp-gpe-gbp-02, 30 April 2019, <https://datatracker.ietf.org/doc/html/draft-lemon-vxlan-lisp-gpe-gbp-02>.

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

Особая благодарность Dino Farinacci за руководство и детальный обзор. Спасибо Tom Herbert за обсуждение и назначение кодов для экспериментов и тестирования.

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

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

Darrel Lewis
Cisco Systems, Inc.
 
Fabio Maino
Cisco Systems, Inc.
 
Paul Quinn
Cisco Systems, Inc.
 
Michael Smith
Cisco Systems, Inc.
 
Navindra Yadav
Cisco Systems, Inc.
 
Larry Kreeger
 
Jennifer Lemon
Broadcom
 
Puneet Agarwal
Innovium

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

Fabio Maino (editor)
Cisco Systems
San Jose, CA
United States of America
Email: fmaino@cisco.com
 
Jennifer Lemon
Email: jalemon@meus.us
 
Puneet Agarwal
Innovium
United States of America
Email: puneet@acm.org
 
Darrel Lewis
Cisco Systems
San Jose, CA
United States of America
Email: darlewis@cisco.com
 
Michael Smith
Cisco Systems
San Jose, CA 95134
United States of America
Email: michsmit@cisco.com

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

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

nmalykh@protokols.ru


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

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

3Virtual eXtensible Local Area Network — виртуальная расширяемая ЛВС.

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

5Application-Specific Integrated Circuit — специализированная интегральная схема.

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

RFC 9303 Locator/ID Separation Protocol Security (LISP-SEC)

Internet Engineering Task Force (IETF)                          F. Maino
Request for Comments: 9303                                 Cisco Systems
Category: Standards Track                                     V. Ermagan
ISSN: 2070-1721                                             Google, Inc.
                                                             A. Cabellos
                                    Universitat Politecnica de Catalunya
                                                               D. Saucez
                                                                   Inria
                                                            October 2022

Locator/ID Separation Protocol Security (LISP-SEC)

Защита протокола LISP

PDF

Аннотация

Этот документ описывает защиту протокола разделения идентификаторов и локаторов (Locator/ID Separation Protocol Security или LISP-SEC), представляющую собой набор механизмов аутентификации, защиты целостности и защиты от повторного использования (anti-replay) для данных отображений идентификаторов конечных точек на локаторы маршрутизации LISP (Endpoint-ID-to-Routing-Locator или EID-RLOC), передаваемых процессами поиска сопоставлений. LISP-SEC также позволяет проверять полномочность заявления префиксов EID-Prefix в сообщениях Map-Reply.

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

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

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

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

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

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

Протокол разделения идентификаторов и локаторов (Locator/ID Separation Protocol или LISP) [RFC9300] [RFC9301] является протоколом сетевого уровня, позволяющим разделить адреса IP на два независимых пространства — идентификаторы конечных точек (Endpoint Identifier или EID) и локаторы маршрутизации (Routing Locator или RLOC). Сопоставления EID с RLOC хранятся в базе данных и системе отображения LISP Mapping System, будучи доступными через процесс поиска Map-Request/Map-Reply. Если эти отображения EID-RLOC, передаваемые с сообщениях Map-Reply, не имеют защиты целостности, злоумышленник может манипулировать ими и захватывать коммуникации, выдавать себя за нужный EID, создавать атаки на службы (Denial-of-Service или DoS), в том числе, распределенные (Distributed Denial-of-Service или DDoS). При передаче Map-Reply без проверки подлинности враждебный элемент LISP может перезаявить EID-Prefix и перенаправить трафик. Модель угроз LISP-SEC, описанная в разделе 4, создана на основе модели угроз LISP, заданной в [RFC7835] и включающей подробное описание атак с перезаявлением (overclaiming).

Этот документ задаёт набор механизмов безопасности LISP-SEC, обеспечивающих аутентификацию источников, защиту целостности и защиту от повторного использования (anti-replay) для данных отображений EID-RLOC в LISP, передаваемых процессами поиска сопоставлений. LISP-SEC также позволяет проверять полномочность заявления EID-Prefix в сообщениях Map-Reply, гарантируя, что отправитель Map-Reply, указывающий местоположение для данного EID-Prefix, имеет право делать это в соответствии с регистрацией EID-Prefix на Map-Server. Защита Map-Register и Map-Notify, включая право элемента LISP регистрировать EID-Prefix или заявлять о его присутствии в RLOC, выходит за рамки LISP-SEC, поскольку эти протоколы защищены механизмами, заданными в [RFC9301]. Однако LISP-SEC расширяет сообщения Map-Register, позволяя входным маршрутизаторам туннелей (Ingress Tunnel Router или ITR) работать с Map-Request без LISP-SEC. Рассмотрение вопросов безопасности приведено в разделе 7.

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

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

3. Определения терминов

One-Time Key (OTK) — одноразовый ключ

Эфемерный случайно сгенерированный ключ, применяемый в одном обмене Map-Request — Map-Reply.

ITR One-Time Key (ITR-OTK) — одноразовый ключ ITR

Одноразовый ключ, созданный ITR.

MS One-Time Key (MS-OTK) — одноразовый ключ MS

Одноразовый ключ, созданный сервером отображений (Map-Server).

Authentication Data (AD) — данные аутентификации

Метаданные, включаемые в заголовок инкапсулированного управляющего сообщения LISP (Encapsulated Control Message или ECM), как указано в [RFC9301], или в сообщение Map-Reply, для поддержки защиты конфиденциальности и целостности, а также проверки полномочности EID-Prefix.

OTK Authentication Data (OTK-AD) — данные аутентификации OTK

Часть данных аутентификации в ECM, относящаяся к одноразовому ключу.

EID Authentication Data (EID-AD) — данные аутентификации EID

Часть данных аутентификации ECM и Map-Reply, применяемая для проверки полномочности EID-Prefix.

Packet Authentication Data (PKT-AD) — данные аутентификации пакета

Часть данных аутентификации Map-Reply, служащая для защиты целостности сообщения Map-Reply.

Определения других терминов, включая Map-Request, Map-Reply, Ingress Tunnel Router (ITR), Egress Tunnel Router (ETR), Map-Server (MS), Map-Resolver (MR), приведены в спецификации LISP [RFC9301].

4. Модель угроз LISP-SEC

LISP-SEC устраняет угрозы плоскости управления, описанные в параграфах 3.7 и 3.8 [RFC7835], которые нацелены на отображений EID-RLOC, включая манипуляции с сообщениями Map-Request и Map-Reply, а также злонамеренные перезаявления ETR EID-Prefix. LISP-SEC принимает 2 основных допущения: предполагается, что (1) LISP Mapping System доставляет сообщения Map-Request предусмотренному ETR, как указано EID, и (2) невозможна организация атак на пути внутри LISP Mapping System. Защита Mapping System от атак на пути зависит от конкретной системы отображения и выходит за рамки этого документа. Хотя LISP-SEC позволяет обнаруживать атаки с перезаявлением EID-Prefix, предполагается, что Map-Server могут проверять при регистрации полномочия для EID-Prefix.

В соответствии с моделью угроз из [RFC7835], в LISP-SEC предполагается, что атаки любого типа, включая атаки в пути, могут организовываться вне границ LISP Mapping System. Атакующий в пути за пределами LISP Mapping System может, например, перехватывать сообщения Map-Request и Map-Reply, подменяя отождествления узлов LISP. Другой тип атак в пути, называемых атаками с перезаявлением (overclaiming), может быть организован вредоносным ETR, заявляющим EID-Prefix, для которых у него нет полномочий. Это позволяет ETR перенаправить трафик.

5. Протокольные операции

Целью механизмов защиты, заданных в [RFC9301], является предотвращение несанкционированной вставки данных отображения за счёт аутентификации источника и защиты целостности для сообщений Map-Register, а также использования nonce для обнаружения незапрошенных сообщений Map-Reply от злоумышленников вне пути.

LISP-SEC базируется на механизмах защиты из [RFC9301] для предотвращения угроз, описанных в разделе 4, путём использования доверительных отношений между элементами LISP [RFC9301], участвующими в обмене сообщениями Map-Request и Map-Reply. Эти отношения доверия (см. 7. Вопросы безопасности и [RFC9301]) применяются для защищённого распространения (8.4. Функции Key Wrap для каждого сообщения одноразового ключа (OTK), обеспечивающего аутентификацию источника, защиту целостности и предотвращения повторного использования данных отображения в процессе поиска сопоставлений и это обеспечивает эффективную защиту от атак с перезаявлением (overclaiming). Обработка параметров защиты в процессе обмена сообщениями Map-Request и Map-Reply описана ниже.

  • Для каждого сообщения Map-Request создаётся новый ключ ITR-OTK, который сохраняется в ITR и защищённо передаётся серверу Map-Server.

  • Map-Server использует ITR-OTK для расчёта хэшированного кода аутентификации сообщения (Hashed Message Authentication Code или HMAC) [RFC2104], который защищает целостность данных отображения, известных Map-Server, в случае атак с перезаявлением. Map-Server также выводит новый ключ MS-OTK, который передаётся ETR, путём применения KDF (например, [RFC5869]) к ITR-OTK.

  • ETR использует MS-OTK для расчёта HMAC, который защищает целостность Map-Reply, переданного ITR.

  • ITR использует сохранённый ключ ITR-OTK для проверки целостности данных отображения, предоставленных Map-Server и ETR, и отсутствия атак с перезаявлением на пути между Map-Server и ITR.

В разделе 6 дано подробное описание управляющих сообщений LISP-SEC и их обработки, а в оставшейся части этого параграфа описан поток операций протокола LISP на каждом объекте, вовлеченном в обмен Map-Request и Map-Reply.

  1. ITR при необходимости передать сообщение Map-Request генерирует и сохраняет OTK (ITR-OTK). Этот ключ ITR-OTK шифруется и включается в сообщение ECM, содержащее Map-Request для Map-Resolver.

  2. Map-Resolver декапсулирует ECM, расшифровывает ITR-OTK (если нужно) и пересылает через Mapping System полученное сообщение Map-Request и ITR-OTK как часть нового ECM. LISP Mapping System доставляет ECM подходящему Map-Server, указанному EID получателя в Map-Request.

  3. На Map-Server настроены локальные отображения и данные политики для ETR, отвечающего за EID получателя. Используя конфигурационные сведения, Map-Server после декапсуляции ECM находит наиболее подходящий (longest-match) EID-Prefix, включающий EID, запрошенный в принятом Map-Request. Map-Server добавляет этот EID-Prefix вместе с кодом HMAC, рассчитанным с помощью ITR-OTK в новое сообщение ECM, которое содержит полученное сообщение Map-Request.

  4. Map-Server выводит новый ключ MS-OTK, применяя KDF к ITR-OTK. MS-OTK включается в сообщение ECM, которое Map-Server использует для пересылки Map-Request маршрутизатору ETR.

  5. Если Map-Server работает в режиме посредника (proxy), как указано в [RFC9301], ETR не привлекается к созданию Map-Reply и пп. 6 и 7 пропускаются. В этом случае Map-Server создаёт Map-Reply от имени ETR, как описано в параграфе 6.7.2. Генерация Map-Reply посредником.

  6. ETR при получении инкапсулированного в ECM сообщения Map-Request от Map-Server расшифровывает MS-OTK (если нужно) и формирует Map-Reply с данными отображения EID-RLOC, как указано в [RFC9301].

  7. ETR рассчитывает HMAC для Map-Reply с ключом MS-OTK для защиты целостности всего сообщения Map-Reply, а также копирует сведения о полномочности EID-Prefix, которые Map-Server включил в инкапсулированный в ECM запрос Map-Request сообщения Map-Reply. После этого ETR передаёт сообщение Map-Reply запрашивающему ITR.

  8. ITR при получении Map-Reply использует сохранённый локально ключ ITR-OTK для проверки целостности сведений о полномочности EID-Prefix из Map-Reply, включённых сервером Map-Server. Затем ITR рассчитывает MS-OTK применяя ту же функцию KDF (указана в инкапсулированном в ECM сообщении Map-Reply), которую использовал Map-Server и проверяет целостность Map-Reply.

6. Детали управляющих сообщений LISP-SEC

Метаданные LISP-SEC, связанные с Map-Request, передаются в сообщении ECM, содержащем Map-Request, а метаданные, связанные с Map-Reply, в самом сообщении Map-Reply.

Эта спецификация использует HMAC в различных местах, как описано ниже. Реализации LISP-SEC должны поддерживать функцию HMAC AUTH-HMAC-SHA-256-128 [RFC6234]. В развёртываниях LISP-SEC следует применять функцию AUTH-HMAC-SHA-256-128, за исключением случаев, когда реализация поддерживает лишь AUTH-HMAC-SHA-1-96 [RFC2104].

6.1. Расширения ECM LISP-SEC

В LISP-SEC применяются сообщения ECM, определённые в [RFC9301], с установленным (1) битом S для индикации включения в заголовок LISP данных аутентификации (Authentication Data или AD). Формат LISP-SEC ECM AD показан на рисунке 1. OTK-AD обозначает данные аутентификации одноразового ключа, а EID-AD — данные аутентификации EID.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ECM AD Type  |   Unassigned  |        Requested HMAC ID      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\
|              OTK Length       |     Key ID    | OTK Wrap. ID  | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|                       One-Time-Key Preamble ...               | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+OTK-AD
|                   ... One-Time-Key Preamble                   | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
~                      One-Time Key (128 bits)                  ~/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <---+
|           EID-AD Length       |           KDF ID              |     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     |
| Record Count  |E| Unassigned  |         EID HMAC ID           |EID-AD
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\    |
|  Unassigned   | EID mask-len  |           EID-AFI             | |   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Rec |
~                          EID-Prefix ...                       ~ |   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/    |
~                            EID HMAC                           ~     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <---+

Рисунок 1. Данные аутентификации LISP-SEC ECM.


ECM AD Type

1 (LISP-SEC Authentication Data), см. раздел 8. Взаимодействие с IANA.

Unassigned

Устанавливается 0 при передаче и игнорируется при получении.

Requested HMAC ID

Алгоритм HMAC, который будет применяться для защиты отображений, запрошенных ITR. Разрешённые значения указаны в реестре LISP-SEC Authentication Data HMAC ID (параграф 8.3). Подробности даны в параграфе 6.4.

OTK Length

Число байтов в OTK-AD, включая OTK Preamble и OTK.

Key ID

Идентификатор распространённого заранее ключа, совместно используемого ITR и Map-Resolver, а также Map-Server и ETR. Такие ключи выводятся из заранее распространённого секрета для шифрования и защиты целостности OTK. Key ID позволяет менять распространённые заранее секреты без нарушения работы.

OTK Wrapping ID (OTK Wrap. ID)

Идентификатор функции вывода ключа (KDF) и алгоритма упаковки ключей (key wrapping), применяемых для шифрования OTK. Разрешённые значения указаны в реестре LISP-SEC Authentication Data Key Wrap ID (параграф 8.4). Подробности даны в параграфе 6.5. Шифрование и расшифровка OTK.

One-Time-Key Preamble

Устанавливается 0, если OTK не шифруется. При шифровании OTK это поле может передавать дополнительные метаданные от операции упаковки ключа. Когда 128-битовый ключ OTK передаётся без шифрования распознавателем Map-Resolver, в OTK Preamble устанавливается значение 0x0000000000000000 (64 бита). Подробности даны в параграфе 6.5.1. Нешифрованный OTK.

One-Time-Key

OTK, упакованный в соответствии с OTK Wrapping ID. См. параграф 6.5. Шифрование и расшифровка OTK.

EID-AD Length

Число байтов EID-AD. ITR должен указывать EID-AD Length = 4, поскольку он заполняет лишь поле KDF ID, не используя остальные части EID-AD. Данные EID-AD могут включать несколько EID-Record, каждая из которых занимает 4 байта плюс размер EID-Prefix с кодированием AFI.

KDF ID

Идентификатор функции вывода ключей (KDF), используемой для создания MS-OTK. Разрешённые значения указаны в реестре LISP-SEC Authentication Data Key Derivation Function ID (параграф 8.5). Подробности даны в параграфе 6.7. Обработка в Map-Server.

Record Count

В соответствии с параграфом 5.2 в [RFC9301].

E

Бит ETR-Cant-Sign, установка (1) которого указывает ITR, что хотя бы 1 из ETR, полномочных для EID-Prefix из этого Map-Reply, не включил LISP-SEC. Флаг может устанавливать только Map-Server (см. параграф 6.7).

Unassigned

Устанавливается 0 при передаче и игнорируется при получении.

EID HMAC ID

Идентификатор алгоритма HMAC, применяемого для защиты целостности EID-AD. Это поле устанавливает только Map-Server, рассчитывающий EID-Prefix HMAC (см. параграф 6.7.1).

EID mask-len

В соответствии с параграфом 5.2 в [RFC9301].

EID-AFI

В соответствии с параграфом 5.2 в [RFC9301].

EID-Prefix

В соответствии с параграфом 5.2 в [RFC9301].

EID HMAC

Код HMAC для EID-AD, рассчитанный и установленный Map-Server (см. параграф 6.7.1).

6.2. Расширения Map-Reply LISP-SEC

LISP-SEC использует сообщение Map-Reply, определённое в [RFC9301], с Type = 2 и установленным (1) битом S для индикации наличия в сообщении данных аутентификации (AD). Формат LISP-SEC Map-Reply AD показан на рисунке 2. PKT-AD — это данные аутентификации пакета, охватывающие содержимое Map-Reply.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MR AD Type   |                Unassigned                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <---+
|           EID-AD Length       |           KDF ID              |     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     |
| Record Count  |   Unassigned  |         EID HMAC ID           |EID-AD
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\    |
|  Unassigned   | EID mask-len  |           EID-AFI             | |   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Rec |
~                          EID-Prefix ...                       ~ |   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/    |
~                            EID HMAC                           ~     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <---+
|         PKT-AD Length         |         PKT HMAC ID           |\
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
~                            PKT HMAC                           ~PKT-AD
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/

Рисунок 2. Данные аутентификации LISP-SEC Map-Reply.


MR AD Type

1 (LISP-SEC Authentication Data). См. 8. Взаимодействие с IANA.

EID-AD Length

Число байтов в EID-AD (см. 6.1. Расширения ECM LISP-SEC).

KDF ID

Идентификатор функции KDF, используемой для вывода MS-OTK (см. 6.1. Расширения ECM LISP-SEC).

Record Count

Число записей в сообщении Map-Reply (см. 6.1. Расширения ECM LISP-SEC).

Unassigned

Устанавливается 0 при передаче и игнорируется при получении.

EID HMAC ID

Идентификатор алгоритма HMAC, применяемого для защиты целостности EID-AD (см. 6.1. Расширения ECM LISP-SEC).

EID mask-len

Размер маски для EID-Prefix (см. 6.1. Расширения ECM LISP-SEC).

EID-AFI

См. 6.1. Расширения ECM LISP-SEC.

EID-Prefix

См. 6.1. Расширения ECM LISP-SEC.

EID HMAC

См. 6.1. Расширения ECM LISP-SEC.

PKT-AD Length

Число байтов в PKT-AD.

PKT HMAC ID

Идентификатор алгоритма HMAC, применяемого для защиты целостности Map-Reply (см. 6.5. Шифрование и расшифровка OTK).

PKT HMAC

Код HMAC всего пакета Map-Reply для защиты его целостности, включая данные LISP-SEC AD (из поля Map-Reply Type в поле PKT HMAC), позволяющие аутентифицировать сообщение.

6.3. Расширения Map-Register LISP-SEC

Бит S в сообщении Map-Register (см. [RFC9301]) указывает серверу Map-Server, что регистрируемый ETR поддерживает LISP-SEC. ETR с поддержкой LISP-SEC должен устанавливать (1) флаг S в сообщениях Map-Register.

6.4. Обработка в ITR — генерация Map-Request

При создании Map-Request маршрутизатор ITR генерирует случайный ключ ITR-OTK, сохраняя его локально до получения соответствующего Map-Reply (6.9. Обработка в ITR — приём Map-Reply) вместе с nonce, создаваемым как указано в [RFC9301].

ITR может использовать поле KDF ID для указания рекомендуемого алгоритма KDF в соответствии с локальными правилами. Map-Server может переопределить KDF ID, если он не поддерживает рекомендованный ITR алгоритм (6.7. Обработка в Map-Server). Значение KDF NOPREF (0) может служить для указания отсутствия у ITR предпочтительного KDF ID.

Для пути между ITR и Map-Resolver должна обеспечиваться защита конфиденциальности и целостности с помощью ITR-OTK. Это можно реализовать путём шифрования ITR-OTK с использованием заранее распространённого секрета для ITR и Map-Resolver (6.5. Шифрование и расшифровка OTK) или включения DTLS [RFC9147] между ними.

Сообщения Map-Request (как задано в [RFC9301]) должны инкапсулироваться как управляющие сообщения LISP в ECM с установленным (1) флагом S для индикации наличия данных аутентификации (AD). Такие сообщения в этом документе называются дакже защищёнными (Protected) Map-Request.

ITR-OTK упаковывается с использованием алгоритма, указанного полем OTK Wrapping ID (шифрование OTK описано в параграфе 6.5). При выборе алгоритма NULL-KEY-WRAP-128 (8.4. Функции Key Wrap) и отсутствии иного механизма шифрования (например, DTLS) на пути между ITR и Map-Resolver, сообщение Map-Request должно отбрасываться, а в системном журнале следует оставлять соответствующую запись. Реализации могут включать механизмы предотвращения атак на истощение ресурсов системного журнала, но это выходит за рамки документа.

Поле Requested HMAC ID указывает алгоритм HMAC, предложенный для использования Map-Server и ETR с целью защиты целостности ECM AD и Map-Reply. HMAC ID со значением NONE (0) можно использовать, если у ITR нет пердпочтений для HMAC ID.

Поле KDF ID указывает функцию KDF, предложенную для использования на Map-Server при выводе MS-OTK. Можно указать KDF с идентификатором NONE (0), если у ITR нет предпочтений для KDF ID.

В поле EID-AD Length указывается значение 4, поскольку данные аутентификации (AD) не включают EID-Prefix AD и EID-AD содержит лишь поле KDF ID.

Если ITR напрямую соединён с Mapping System, такой как LISP+ALT [RFC6836], он выполняет функции ITR и Map-Resolver, пересылая защищённые Map-Request, как указано в 6.6. Обработка в Map-Resolver.

Обработка на Proxy ITR (PITRs) эквивалентна обработке на ITR, поэтому применяются описанные выше процедуры.

6.5. Шифрование и расшифровка OTK

Защита конфиденциальности и целостности MS-OTK должна обеспечиваться на пути между Map-Server и ETR. Это можно реализовать за счёт применения DTLS между Map-Server и ETR или шифрования MS-OTK с заранее распространенным секретом, известным Map-Server и ETR [RFC9301]. Точно так же должна обеспечиваться конфиденциальность и целостность ITR-OTK на пути между ITR и Map-Resolver, которая может быть достигнута такими же способами. Общий ключ ITR и Map-Resolver подобен общему ключу Map-Server и ETR.

В этом параграфе описана обработка OTK на пути ITR — Map-Resolver и Map-Server — ETR.

Важно отметить, что для предотвращения атак с перезаявлением от ETR общий ключ ITR и Map-Resolver должен быть независимым от общего ключа Map-Server и ETR.

OTK упаковывается с помощью алгоритма, указанного полем OTK Wrapping ID, которое задает:

  • алгоритм Key Encryption Algorithm, применяемый для шифрования упаковываемого OTK;

  • функцию вывода ключей KDF для создания ключа шифрования для каждого сообщения.

Реализации этой спецификации должны поддерживать OTK Wrapping ID AES-KEY-WRAP-128+HKDF-SHA256, задающий применение функции вывода ключей HKDF-SHA256, заданной в [RFC5869], для создания ключей шифрования каждого сообщения (per-msg-key), а также алгоритм упаковки ключей AES-KEY-WRAP-128 для шифрования 128-битовых OTK, в соответствии с [RFC3394].

Реализации этой спецификации должны поддерживать OTK Wrapping NULL- KEY-WRAP-128, применяемый для передачи нешифрованных 128-битовых OTK с преамбулой 0x0000000000000000 (64 бита).

Процесс упаковки для OTK Wrapping ID AES-KEY-WRAP-128+HKDF- SHA256 описан ниже.

  1. KDF и алгоритмы упаковки ключей указываются значением поля OTK Wrapping ID. Начальные значения идентификаторов указаны в таблице 5.

  2. Если выбран алгоритм NULL-KEY-WRAP-128 (8.4. Функции Key Wrap) и протокол DTLS не включён, сообщение Map-Request должно отбрасываться а в системный журнал следует вносить соответствующую запись. Разработчики могут реализовать механизмы защиты от истощения ресурсов системного журнала, но это выходит за рамки данного документа.

  3. Заранее распространённый секрет, применяемый для вывода per-msg-key, представляется PSK[Key ID], указывающим распределенный заранее секрет, указанный индексом Key ID.

  4. 128-битовый ключ шифрования рассчитывается, как показано ниже

    per-msg-key = KDF( nonce + s + PSK[Key ID] )

    где nonce — значение поля Nonce из Map-Request, s — строка OTK-Key-Wrap, а + указывает конкатенацию.

  5. Ключ per-msg-key применяется для упаковки OTK с помощью AES-KEY-WRAP-128, как указано в параграфе 2.2.1 [RFC3394]. Для инициализации упаковки ключа AES (Key Wrap Initialization) должно использоваться значение 0xA6A6A6A6A6A6A6A6 (64 бита). Результатом упаковки ключа AES является 192-битовое значение, старшие 64 бита которого копируются в поле One-Time Key Preamble, а оставшиеся 128 младших битов — в поле One-Time Key данных аутентификации LISP-SEC AD.

При расшифровке ключа OTK получатель должен убедиться, что значение Initialization Value, полученное при расшифровке упакованного ключа AES, равно 0xA6A6A6A6A6A6A6A6. Если это не так, получатель должен отбросить сообщение целиком.

6.5.1. Нешифрованный OTK

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

При передаче 128-битового OTK без шифрования для OTK Wrapping ID устанавливается значение NULL_KEY_WRAP_128, а для OTK Preamble — 0x0000000000000000 (64 бита).

6.6. Обработка в Map-Resolver

При получении защищённого Map-Request распознаватель Map-Resolver декапсулирует ECM, расшифровывая ITR-OTK (если это нужно) в соответствии с параграфом 6.5. Шифрование и расшифровка OTK.

Защита конфиденциальности ITR-OTK и безопасность в целом после того, как Map-Request передаётся распознавателем Map-Resolver на Map-Server, зависит от применяемой Mapping System и выходит за рамки документа.

В системах отображения, где Map-Server соответствует [RFC9301], Map-Resolver создаёт новый заголовок ECM с установленным (1) битом S, который содержит нешифрованный ключ ITR-OTK, как указано в параграфе 6.5, и другие данные, полученные из ECM Authentication Data принятого инкапсулированного сообщения Map-Request.

Затем Map-Resolver пересылает серверу Map-Server полученное сообщение Map-Request, которое инкапсулируется с новым заголовком ECM, включающим недавно рассчитанные поля Authentication Data.

6.7. Обработка в Map-Server

При получении защищённого Map-Request сервер Map-Server обрабатывает его в соответствии с установкой битов S и P в Map-Register от полномочных для префикса ETR, как описано ниже.

При обработке Map-Request сервер Map-Server может переопределить поле KDF ID, если он не поддерживает функцию KDF, рекомендованную ITR. Обработка Map-Request должна выполняться в порядке, указанном в таблице 1, путём выполнения первого правила, соответствующего условиям, указанным в первом столбце.

Таблица 1. Обработка Map-Request.

Условия совпадения

Обработка

1. Хотя бы 1 ETR полномочен для EID-Prefix, включённого в Map-Request, зарегистрированный с битом P=1.

Map-Server должен генерировать защищённое LISP-SEC сообщение Map-Reply, как указано в параграфе 6.7.2. Бит ETR-Cant-Sign (E) в EID-AD должен быть сброшен (0).

2. Хотя бы 1 ETR полномочен для EID-Prefix, включённого в Map-Request, зарегистрированный с битом S=1.

Map-Server должен генерировать защищённое LISP-SEC инкапсулипрванное сообщение Map-Request (параграф 6.7.1) для передачи одному из полномочных ETR, зарегистрированных с установленным (1) битом S (и битом P=0). Если имеется хотя бы 1 ETR, зарегистрированный с S=0, флаг ETR-Cant-Sign (E) в EID-AD должен быть установлен (1) для указания ITR, что Map-Request без LISP-SEC может достичь ETR с отключённым LISP-SEC.

3. Все ETR полномочны для EID-Prefix, включённого в Map-Request, зарегистрированный с битом S=0.

Map-Server должен передать сообщение Negative Map-Reply, защищенное LISP-SEC, как описано в параграфе 6.7.2. Флаг ETR-Cant-Sign (E) должен быть установлен (1) для указания ITR, что Map-Request без LISP-SEC может достичь ETR с отключённым LISP-SEC.

Таким образом, ITR передающий Map-Request с защитой LISP-SEC всегда получает защищённые LISP-SEC отклики Map-Reply. Однако установленный (1) флаг ETR-Cant-Sign (E) указывает, что Map-Request без защиты LISP-SEC может достичь ETR, на которых нет LISP-SEC. Этот механизм позволяет ITR обрабатывать запросы без LISP-SEC, которые не защищены от угроз, указанных в разделе 4.

6.7.1. Генерация защищённых LISP-SEC сообщений Map-Request

Map-Server декапсулирует ECM и генерирует новые данные аутентификации ECM AD, включающие OTK-AD и EID-AD с сведениями о полномочиях EID-Prefix, которые в конечном итоге получены запрашивающим ITR. Map-Server обновляет OTK-AD, выводя новый ключ OTK (MS-OTK) из ITR-OTK, полученного с Map-Request. MS-OTK выводится с применением функции KDF, заданной полем KDF ID. Если указанный KDF ID алгоритм не поддерживается, Map-Server использует другой алгоритм с соответственно обновляет поле KDF ID. Сообщение Map-Request должно инкапсулироваться в ECM с установленным (1) битом S для индикации наличия данных аутентификации (AD).

MS-OTK упаковывается с помощью алгоритма, заданного полем OTK Wrapping ID (см. 6.5. Шифрование и расшифровка OTK). При использовании алгоритма NULL-KEY-WRAP-128 и отсутствии DTLS на пути между Map-Server и ETR сообщение Map-Request должно отбрасываться и это следует записывать в системный журнал.

Map-Server включает в EID-AD самый длинный из совпадающих зарегистрированных EID-Prefix для EID получателя и код HMAC для этого EID-Prefix. HMAC рассчитывается с ключом ITR-OTK из полученных ECM AD с применением алгоритма, выбранного в соответствии с полем Requested HMAC ID. Если Map-Server не поддерживает этот алгоритм, но применяет свой и указывает его в поле EID HMAC ID. При расчёте HMAC должны использоваться данные EID-AD целиком, от поля EID-AD Length до EID HMAC, которое для расчёта должно устанавливаться в 0.

Затем Map-Server пересылает инкапсулированное в ECM обновлённое сообщение Map-Request, содержащее OTK-AD, EID-AD и полученное сообщение Map-Request, полномочному ETR, как указано в [RFC9301].

6.7.2. Генерация Map-Reply посредником

Защищённое LISP-SEC сообщение Map-Reply от посредника генерируется в соответствии с [RFC9301] и имеет установленный (1) бит S. Map-Reply включает данные аутентификации AD с данными EID-AD, рассчитанными в соответствии с параграфом 6.7.1, а также данными PKT-AD, рассчитанными с соответствии с параграфом 6.8.

6.8. Обработка в ETR

При получении инкапсулированного в ECM сообщения Map-Request с установленным (1) битом S маршрутизатор ETR декапсулирует ECM. Поле OTK расшифровывается (если оно зашифровано) в соответствии с параграфом 6.5 для получения нешифрованного ключа MS-OTK. Затем ETR генерирует Map-Reply, как указано в [RFC9301] и включает в него данные аутентификации AD с EID-AD из принятого инкапсулированного Map-Request, а также PKT-AD.

Данные EID-AD копируются из Authentication Data в принятом инкапсулированном сообщении Map-Request. PKT-AD содержит код HMAC для всего пакета Map-Reply, созданный с ключом MS-OTK и алгоритмом HMAC, заданным в поле Requested HMAC ID полученного инкапсулированного Map-Request. Если ETR не поддерживает запрошенный алгоритм HMAC, он использует иной алгоритм, указывая его в поле PKT HMAC ID. Операция HMAC должна охватывать Map-Reply целиком, а для поля PKT HMAC при расчёте должно устанавливаться значение 0.

ETR передаёт сообщение Map-Reply запрашивающему ITR, как указано в [RFC9301].

6.9. Обработка в ITR — приём Map-Reply

В ответ на защищённое сообщение Map-Request маршрутизатор ITR ожидает получить Map-Reply с установленным (1) битом S, включающее EID-AD и PKT-AD. В противном случае ITR должен отбросить Map-Reply.

При получении Map-Reply маршрутизатор ITR должен проверить целостность EID-AD и PKT-AD, а при обнаружении нарушения должен отбросить Map-Reply. После обработки Map-Reply маршрутизатор ITR должен отбросить пару <nonce, ITR-OTK>, счязанную с Map-Reply.

Целостность EID-AD проверяется с применением ITR-OTK (сохранен локально на время этого обмена) для перерасчёта HMAC данных EID-AD с использованием алгоритма, заданного в поле EID HMAC ID. Если ITR указал Requested HMAC ID в своём сообщении Map-Request, а PKT HAMC ID в соответствующем Map-Reply отличается или ITR не указывал Requested HMAC ID в Map-Request, при этом PKT HMAC ID в соответствующем Map-Reply не поддерживается ITR, тот должен отбросить Map-Reply и передать (с учётом правил ограничения частоты из [RFC9301]) новое сообщение Map-Request с другим значением Requested HMAC ID в соответствии с локальной политикой ITR. Код HMAC вычисляется для всех данных EID-AD, начиная от EID-AD Length и заканчивая EID HMAC, при расчёте HMAC маршрутизатор ITR должен установить в поле EID HMAC значение 0.

Для проверки целостности PKT-AD сначала выводится MS-OTK из сохранённого локально ITR-OTK с применением алгоритма, заданного полем KDF ID. Это обусловлено тем, что при создании PKT-AD в ETR использовался ключ MS-OTK. Если ITR указал рекомендуемый KDF ID в своём Map-Request, а KDF ID из соответствующего Map-Reply отличается или ITR не указывал рекомендуемого KDF ID в своём Map-Request, тот должен отбросить Map-Reply и передать (с учётом правил ограничения частоты из [RFC9301]) новое сообщение Map-Request с другим значением KDF ID в соответствии с локальной политикой ITR. Реализации LISP-SEC должны поддерживать функцию KDF HKDF-SHA256, а развёртываниям LISP-SEC следует применять её, если в том же развёртывании нет более старой реализации, использующей HKDF-SHA1-128. Без согласования настройки вовлечённых элементов могут возникать дополнительные задержки, однако процесс сходится со временем, благодаря поддержке HKDF-SHA1-128 и HKDF-SHA256.

Затем выведенное значение MS-OTK применяется для пересчёта HMAC из PKT-AD с применением алгоритма, указанного в поле PKT HMAC ID. Если поле PKT HMAC ID не совпадает с Requested HMAC ID, ITR должен отбросить Map-Reply и передавать (с учётом правил ограничения частоты из [RFC9301]) новое сообщение Map-Request с другим значением Requested HMAC ID в соответствии с локальной политикой, пока не переберёт все поддерживаемые ITR значения HMAC ID. Несовпадение значений PKT HMAC ID и Requested HMAC ID не позволяет проверить Map-Reply.

Отдельная запись EID-Record в Map-Reply считается действительной, если (1) оба поля EID-AD и PKT-AD действительны и (2) непусто пересечение EID-Prefix в EID-Record из Map-Reply с одним из EID-Prefix из EID-AD. После идентификации действительности записи Map-Reply маршрутизатор ITR устанавливает для EID-Prefix в записи Map-Reply значение набора пересечений, рассчитанных ранее и добавляет EID-Record из Map-Reply в свой кэш EID-RLOC Map-Cache, как описано в [RFC9301]. Пример проверки записи Map-Reply представлен в параграфе 6.9.1.

[RFC9301] разрешает ETR передавать сообщения SMR (Solicit-Map-Request) напрямую ITR. Вызванное таким SMR сообщение Map-Request будет передаваться через Mapping System и поэтому будет защищено в соответствии с этой спецификацией, если она применяется. Если ITR воспринимает Map-Reply, прицепленные к Map-Request, и их содержимого ещё нет в его EID-RLOC Map-Cache, маршрутизатор должен передать Map-Request через Mapping System, чтобы проверить содержимое с помощью защищённого Map-Reply до использования.

6.9.1. Проверка записей в Map-Reply

Содержимое Map-Reply может включать записи EID-Record. Сообщение Map-Reply целиком подписано ETR с кодом HMAC PKT для защиты целостности и аутентификации источника EID-Prefix, заявляемых ETR. Поле Authentication Data в Map-Reply может включать несколько EID-Records в EID-AD. Данные EID-AD подписывает Map-Server кодом HMAC EID для защиты целостности и аутентификации источника EID-Prefix, вставленных Map-Server.

При получении Map-Reply с установленным (1) флагом S маршрутизатор ITR сначала проверяет коды HMAC для EID и PKT-AD. Несоответствии любого из HMAC следует записать в системный журнал, а Map-Reply недопустимо обрабатывать дальше. Реализации могут включать механизмы предотвращения атак с истощением ресурсов ведения журнала (это выходит за рамки документа). Если оба кода HMAC действительны, ITR выполняет проверку каждой EID-Record, заявленной ETR, путём расчёта пересечения каждого включённого EID-Prefix из Map-Reply с каждым из EID-Prefix в EID-AD. Запись EID-Record действительная лишь при непустом пересечении, в противном случае должна вноситься запись в системный журнал, а запись EID-Record должна отбрасываться. Реализации могут включать механизмы предотвращения атак с истощением ресурсов ведения журнала (выходит за рамки документа).

Например, для Map-Reply с тремя записями отображений EID-Prefix

      2001:db8:102::/48
      2001:db8:103::/48
      2001:db8:200::/40

EID-AD будет содержать 2 EID-Prefix

      2001:db8:103::/48
      2001:db8:203::/48

EID-Record с EID-Prefix 2001:db8:102::/48 не выбрана для использования ITR, поскольку она не включена ни в одну из EID-AD, подписанных Map-Server. В системный журнал должна помещаться запись об этом, а EID-Record должна быть отброшена. Реализации могут включать механизмы предотвращения атак с истощением ресурсов ведения журнала (выходит за рамки документа).

EID-Record с EID-Prefix 2001:db8:103::/48 выбрана для использования ITR, поскольку она соответствует второму EID-Prefix из EID-AD.

EID-Record с EID-Prefix 2001:db8:200::/40 не выбрана для использования ITR, поскольку она не включена ни в одну из EID-AD, подписанных Map-Server. В системный журнал должна помещаться запись об этом, а EID-Record должна быть отброшена. Реализации могут включать механизмы предотвращения атак с истощением ресурсов ведения журнала (выходит за рамки документа). В этом последнем случае ETR пытается перезаявить EID-Prefix 2001:db8:200::/40, но Map-Server разрешил только 2001:db8:203::/48; поэтому EID-Record отбрасывается.

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

Этот документ расширяет плоскость управления LISP, заданную в [RFC9301], поэтому соображения безопасности из этого документа применимы и здесь.

7.1. Безопасность системы отображения

Модель угроз LISP-SEC, описанная в разделе 4, предполагает, что система отображения LISP работает корректно и доставляет сообщения Map-Request серверу Map-Server, который полномочен для запрошенного EID.

Предполагается, что Mapping System обеспечивает конфиденциальность OTK и целостность данных Map-Reply. Однако способы защиты LISP Mapping System выходят за рамки этого документа.

Безопасность Map-Register, включая права элементов LISP регистрировать EID-Prefix или заявлять наличие RLOC также выходит за рамки LISP-SEC.

7.2. Генерация случайных значений

Ключи ITR-OTK должны генерироваться источником псевдослучайных (или строго случайных) значений с подобающей затравкой (seed). Рекомендации по созданию случайных значений представлены в [RFC4086].

7.3. Совмещение Map-Server и ETR

Если Map-Server совмещён с ETR, LISP-SEC не обеспечивает защиты от атак с перезаявлением со стороны этого ETR. Однако в этом конкретном случае, где ETR размещается в доверенной области Map-Server, атаки с перезаявлением от ETR не включены в модель угроз.

7.4. Внедрение LISP-SEC

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

Например, в некоторых других развёртываниях злоумышленники могут оказаться очень изощрёнными и это вынудит применять при внедрении очень строгие правила в части алгоритмов HMAC, воспринимаемых ITR.

Аналогичные соображения применимы ко всей модели угроз LISP-SEC, поэтому при разработке и внедрении следует внимательно относиться к рекомендациям, которые указаны в этом документе уровнем следует.

7.5. Предоставление общих ключей

Предоставление ключей, совместно используемых парой ITR и Map-Resolver или ETR и Map-Server следует организовывать через инфраструктуру оркестровки, которая выходит за рамки этого документа. Рекомендуется периодически обновлять оба этих ключа, чтобы они не устаревали и злоумышленники не получали к ним несанкционированного доступа. Для общих ключей следует использовать непредсказуемые случайные значения.

7.6. Replay-атаки

Злоумышленники могут захватывать действительные сообщения Map-Request или Map-Reply и повторно использовать их (replay). Однако, как только ITR получает исходное сообщение Map-Reply, пара <nonce,ITR-OTK>, хранящаяся в ITR, отбрасывается. При получении воспроизводимого сообщения Map-Reply маршрутизатором ITR у него не будет пары <nonce,ITR-OTK>, соответствующей полученному Map-Reply и это сообщение будет отброшено.

При повторном использовании Map-Request элементы Map-Server, Map-Resolver и ETR должны выполнять расчёт LISP-SEC. С точки зрения ресурсов это эквивалентного легитимным расчётам LISP-SEC, поэтому кроме возможности организации DoS-атаки, злоумышленник не получает дополнительного эффекта, поскольку сообщение отбрасывается, как отмечено выше.

7.7. Приватность сообщений

Следует использовать DTLS [RFC9147] (в соответствии с [RFC7525]) для защиты приватности взаимодействий и предотвращения перехвата, изменения и подделки сообщений, передаваемых между ITR, Map-Resolver, Map-Server, ETR, если ключи OTK не шифруются иными средствами, например с использованием заранее распространённого секрета. Ответчик DTLS проверяет инициатора, что позволяет ITR проверить подлинность Map-Resolver, Map-Server — подлинность отвечающего ETR.

7.8. DoS и DDoS-атаки

LISP-SEC снижает риск атак DoS и DDoS, защищая целостность сообщений и проверяя подлинность источников Map-Request и Map-Reply, а также предотвращая перезаявление EID-Prefix вредоносными ETR, которое могло бы перенаправить трафик на большое число хостов.

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

Агентство IANA создало указанные в последующих параграфах субреестры в реестре Locator/ID Separation Protocol (LISP) Parameters. Во всех этих субреестрах новые значения выделяются по процедуре Specification Required, заданной в [RFC8126]. В рецензии экспертов (Expert Review) следует оценивать защитные свойства добавляемых функций, чтобы сохранялось строгое шифрования. Например, на момент создания этого документа применение функций на основе SHA-256 считалось достаточным для защиты. Могут потребоваться консультации со специалистами по безопасности.

8.1. Реестр типов ECM AD

Агентство IANA создало реестр LISP ECM Authentication Data Types со значениями от 0 до 255 для использования в расширениях LISP-SEC ECM (6.1. Расширения ECM LISP-SEC). Исходное содержимое реестра приведено в таблице 2.

Таблица 2. Типы LISP ECM Authentication Data.

 

Имя

Номер

Документ

Резерв

0

RFC 9303

LISP-SEC-ECM-EXT

1

RFC 9303

 

Значения 2 — 255 не выделены.

8.2. Реестр типов Map-Reply AD

Агентство IANA создало реестр LISP Map-Reply Authentication Data Types со значениями от 0 до 255 для использования в расширениях LISP-SEC Map-Reply (6.2. Расширения Map-Reply LISP-SEC). Исходное содержимое реестра приведено в таблице 3.

Таблица 3. Типы Map-Reply Authentication Data.

 

Имя

Номер

Документ

Резерв

0

RFC 9303

LISP-SEC-MR-EXT

1

RFC 9303

 

Значения 2 — 255 не выделены.

8.3. Функции HMAC

Агентство IANA создало реестр LISP-SEC Preferred Authentication Data HMAC IDs со значениями от 0 до 65535 для использования в качестве Requested HMAC ID, EID HMAC ID, PKT HMAC ID в данных аутентификации LISP-SEC AD. Исходное содержимое реестра приведено в таблице 4.

Таблица 4. Идентификаторы LISP-SEC Preferred Authentication Data HMAC.

 

Имя

Номер

Документ

NOPREF

0

RFC 9303

AUTH-HMAC-SHA-1-96

1

[RFC2104]

AUTH-HMAC-SHA-256-128

2

[RFC6234]

 

Значения 3 — 65535 не выделены.

8.4. Функции Key Wrap

Агентство IANA создало реестр LISP-SEC Authentication Data Key Wrap IDs со значениями от 0 до 65535 для использования в качестве идентификаторов алгоритма упаковки ключей OTK в LISP-SEC AD. Исходное содержимое реестра приведено в таблице 5.

Таблица 5. Идентификаторы LISP-SEC Authentication Data Key Wrap.

 

Имя

Номер

Key Wrap

KDF

Документ

Резерв

0

Нет

Нет

RFC 9303

NULL-KEY-WRAP-128

1

RFC 9303

None

RFC 9303

AES-KEY-WRAP-128+HKDF-SHA256

2

[RFC3394]

[RFC4868]

RFC 9303

 

Значения 3 — 65535 не выделены.

8.5. Функции вывода ключей

Агентство IANA создало реестр LISP-SEC Authentication Data Key Derivation Function IDs со значениями от 0 до 65535 для использования в качестве KDF ID. Исходное содержимое реестра приведено в таблице 6.

Таблица 6. Идентификаторы LISP-SEC Authentication Data Key Derivation Function.

 

Имя

Номер

Документ

NOPREF

0

RFC 9303

HKDF-SHA1-128

1

[RFC5869]

HKDF-SHA256

2

[RFC5869]

 

Значения 3 — 65535 не выделены.

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

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

[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, «HMAC: Keyed-Hashing for Message Authentication», RFC 2104, DOI 10.17487/RFC2104, February 1997, <https://www.rfc-editor.org/info/rfc2104>.

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

[RFC3394] Schaad, J. and R. Housley, «Advanced Encryption Standard (AES) Key Wrap Algorithm», RFC 3394, DOI 10.17487/RFC3394, September 2002, <https://www.rfc-editor.org/info/rfc3394>.

[RFC4868] Kelly, S. and S. Frankel, «Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec», RFC 4868, DOI 10.17487/RFC4868, May 2007, <https://www.rfc-editor.org/info/rfc4868>.

[RFC5869] Krawczyk, H. and P. Eronen, «HMAC-based Extract-and-Expand Key Derivation Function (HKDF)», RFC 5869, DOI 10.17487/RFC5869, May 2010, <https://www.rfc-editor.org/info/rfc5869>.

[RFC6234] Eastlake 3rd, D. and T. Hansen, «US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)», RFC 6234, DOI 10.17487/RFC6234, May 2011, <https://www.rfc-editor.org/info/rfc6234>.

[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, «Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)», BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015, <https://www.rfc-editor.org/info/rfc7525>.

[RFC7835] Saucez, D., Iannone, L., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Threat Analysis», RFC 7835, DOI 10.17487/RFC7835, April 2016, <https://www.rfc-editor.org/info/rfc7835>.

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

[RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, «The Datagram Transport Layer Security (DTLS) Protocol Version 1.3», RFC 9147, DOI 10.17487/RFC9147, April 2022, <https://www.rfc-editor.org/info/rfc9147>.

[RFC9300] Farinacci, D., Fuller, V., Meyer, D., Lewis, D., and A. Cabellos, Ed., «The Locator/ID Separation Protocol (LISP)», RFC 9300, DOI 10.17487/RFC9300, October 2022, <https://www.rfc-editor.org/info/rfc9300>.

[RFC9301] Farinacci, D., Maino, F., Fuller, V., and A. Cabellos, Ed., «Locator/ID Separation Protocol (LISP) Control Plane», RFC 9301, DOI 10.17487/RFC9301, October 2022, <https://www.rfc-editor.org/info/rfc9301>.

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

[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, «Randomness Requirements for Security», BCP 106, RFC 4086, DOI 10.17487/RFC4086, June 2005, <https://www.rfc-editor.org/info/rfc4086>.

[RFC6836] Fuller, V., Farinacci, D., Meyer, D., and D. Lewis, «Locator/ID Separation Protocol Alternative Logical Topology (LISP+ALT)», RFC 6836, DOI 10.17487/RFC6836, January 2013, <https://www.rfc-editor.org/info/rfc6836>.

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

Авторы благодарны Luigi Iannone, Pere Monclus, Dave Meyer, Dino Farinacci, Brian Weis, David McGrew, Darrel Lewis, Landon Curt Noll за их полезные предложения в процессе подготовки этого документа.

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

Fabio Maino
Cisco Systems
San Jose, CA
United States of America
Email: fmaino@cisco.com
 
Vina Ermagan
Google, Inc.
1600 Amphitheatre Parkway
Mountain View, CA 94043
United States of America
Email: ermagan@gmail.com
 
Albert Cabellos
Universitat Politecnica de Catalunya
c/ Jordi Girona s/n
08034 Barcelona
Spain
Email: acabello@ac.upc.edu
 
Damien Saucez
Inria
2004 route des Lucioles — BP 93
Sophia Antipolis
France
Email: damien.saucez@inria.fr

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

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

nmalykh@protokols.ru


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

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

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

RFC 9299 An Architectural Introduction to the Locator/ID Separation Protocol (LISP)

Internet Engineering Task Force (IETF)                       A. Cabellos
Request for Comments: 9299          Universitat Politecnica de Catalunya
Category: Informational                                   D. Saucez, Ed.
ISSN: 2070-1721                                                    Inria
                                                            October 2022

An Architectural Introduction to the Locator/ID Separation Protocol (LISP)

Архитектурное введение в протокол LISP

PDF

Аннотация

Этот документ описывает архитектуру протокола разделения идентификаторов и локаторов (Locator/ID Separation Protocol или LISP), упрощая понимание спецификаций LISP и обеспечивая базу для обсуждения деталей протоколов LISP. Документ служит введением, а подробные сведения приведены в спецификациях RFC 9300 и RFC 9301.

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

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

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

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

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

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

Этот документ описывает архитектуру протокола разделения идентификаторов и локаторов (LISP) [RFC9300] [RFC9301], основные механизмы работы и принципы устройства. По сути, LISP основан на хорошо известной архитектурной идее освобождения от перегрузки семантики адресов IP. Как отметил Noel Chiappa [RFC4984], в настоящее время адреса IP указывают сразу топологическое местоположение точки подключения к сети и идентификацию узлов. Однако требования узлов и маршрутизации принципиально различаются. Системам маршрутизации нужна агрегируемость адресов и их топологическая значимость, а узлам требуется идентификация, независимая от конкретного местоположения [RFC4984].

LISP создаёт два раздельных пространства имён для идентификаторов конечных точек (Endpoint Identifier или EID) и локаторов маршрутизации (Routing Locator или RLOC). Оба пространства синтаксически идентичны современным адресам IPv4 и IPv6. Однако EID служат для однозначной идентификации узлов независимо от их топологического местоположения и обычно маршрутизируются внутри домена. Локаторы RLOC назначаются топологически и обычно маршрутизируются между доменами. С помощью LISP можно логически разделить границу Internet (места подключения узлов) и ядро (где происходит междоменная маршрутизация). Маршрутизаторы с поддержкой LISP соединяют эти логические пространства. LISP поддерживает базу данных, называемую системой сопоставления (Mapping System), для хранения и извлечения сведений о сопоставлении отождествлений и местоположений. Маршрутизаторы с поддержкой LISP обмениваются пакетами через ядро Internet, инкапсулируя их в нужное место.

  • Локаторы RLOC имеют смысл лишь в базовой (underlay) сети, т. е. в ядре маршрутизации.

  • EID имеют смысл лишь в наложенной сети, которая является связующей инкапсуляцией между маршрутизаторами с поддержкой LISP.

  • На границе LISP идентификаторы EID сопоставляются с RLOC.

  • В базовой сети RLOC служат сразу локаторами и идентификаторами.

  • EID внутри сайта LISP служат идентификаторами и локаторами для других узлов этого сайта.

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

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

Исходную мотивацию разработки LISP можно найти в проблеме расширяемости маршрутизации [RFC4984], где при полном развёртывании LISP ядро Internet будет заполнено RLOC, а механизмы организации трафика (Traffic Engineering или TE) будут вынесены в систему сопоставления. В таком варианте локаторы RLOC будут квазистатическими (т. е. меняющимися редко), что делает систему маршрутизации расширяемой [Quoitin], а EID могут перемещаться свободно, «не создавая пены» в базовой системе глобальной маршрутизации. В [RFC7215] рассмотрено влияние LISP на систему глобальной маршрутизации в процессе перехода. Однако разделение местоположения и идентификации, предлагаемое LISP, подходит и для применения в других случаях, таких как TE, многодомные подключения и мобильность узлов.

В этом документе описана архитектура и основные механизмы работы LISP, а также принципы разработки. Важно отметить, что документ не задаёт и не дополняет LISP. Заинтересованным читателям следует обратиться к спецификациям LISP ([RFC9300] и [RFC9301]), а также дополнительным документам ([RFC6831], [RFC6832], [RFC9302], [RFC6835], [RFC6836], [RFC7052]) для спецификации протокола и рекомендаций по развёртыванию LISP [RFC7215].

2. Определения терминов

Endpoint Identifier (EID) — идентификатор конечной точки

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

Routing Locator (RLOC) — локатор маршрутизации

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

Ingress Tunnel Router (ITR) — входной маршрутизатор туннеля

Поддерживающий LISP маршрутизатор, инкапсулирующий пакеты от сайта LISP в направлении ядра сети.

Egress Tunnel Router (ETR) — выходной маршрутизатор туннеля

Поддерживающий LISP маршрутизатор, декапсулирующий пакеты из ядра сети в направлении сайта LISP.

xTR

Машрутизатор, реализующий функции ITR и ETR.

Map-Request

Сигнальное сообщение LISP, служащее для запроса отображения EID на RLOC.

Map-Reply

Сигнальное сообщение LISP, служащее ответом на Map-Request и содержащее нужное отображение EID на RLOC.

Map-Register

Сигнальное сообщение LISP, служащее для регистрации отображения EID на RLOC.

Map-Notify

Сигнальное сообщение LISP, передаваемое в ответ на Map-Register для подтверждения корректного получения отображения EID на RLOC.

Этот документ описывает архитектуру LISP и не вносит новых терминов. Определения используемых терминов даны в [RFC9300], [RFC9301], [RFC6831], [RFC6832], [RFC9302], [RFC6835], [RFC6836], [RFC7052], [RFC7215].

3. Архитектура LISP

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

3.1. Принципы устройства протокола

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

Разделение локаторов и идентификаторов

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

Наложение

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

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

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

Возможность поэтапного развёртывания

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

3.2. Обзор архитектуры

LISP архитектурно отделяет ядро от периметра Internet, создавая два пространства имён — EID и RLOC. Периметр образуют сайты LISP (например, автономные системы — AS), использующие адреса EID. Идентификаторы EID — это адреса IPv4 или IPv6, однозначно указывающие конечные хосты, которые назначаются и настраиваются с использованием механизмов, существовавших на момент разработки протокола. В EID не включаются междоменные топологические данные и поэтому EID обычно маршрутизируются на периферии (внутри сайта LISP), но не в ядре. Взаимодействие сайтов LISP с сайтами и доменами без поддержки LISP в сети Internet описано в параграфе 3.5. Механизмы межсетевого взаимодействия.

Сайты LISP (на периметре) подключаются к межсетевому ядру Internet через поддерживающие LISP маршрутизаторы (например, граничные маршрутизаторы). Сайты LISP соединяются через межсетевое ядро Internet с использованием туннелей между поддерживающими LISP маршрутизаторами. Когда пакет от сайта LISP направлен в сеть ядра, он попадает в инкапсулированный туннель через входной маршрутизатор ITR. Пакеты из ядра сети на сайт LISP выходят из инкапсулированного туннеля через выходной маршрутизатор ETR. XTR — это маршрутизатор, выполняющий функции ITR и ETR. В этом контексте ITR инкапсулируют пакеты, а ETR декапсулируют их, следовательно LISP работает как наложение на имеющееся ядро Internet.

                       /-----------------\                 ---
                       |     Система     |                  |
                       .  сопоставления  |                  |Плоскость
                      -|                 |`,                |управления
                    ,' \-----------------/  .               |
                   /                         |             ---
   ,..,           -        _,....,,          |      ,..,    |
 /     `        ,'      ,-`        `',       |    /     `   |
/        \ +-----+   ,'              `,  +-----+ /        \ |
| Простр.|-| xTR |--/   Пространство  ,--| xTR |-| Простр.| |Плоскость
|  EID   |-|     |--|       RLOC      |--|     |-|  EID   | |данных
\        / +-----+  .                 /  +-----+ \        / |
 `.    .'            `.              ,'           `.    .'  |
   `'-`                `.,        ,.'               `'-`   ---
                          ``'''``
  Сайт LISP (периметр)      Core         Сайт LISP (периметр)

Рисунок 1. Схема архитектуры LISP.


При использовании LISP ядро работает с локаторами RLOC. Локатор RLOC — это адрес IPv4 или IPv6, назначенный интерфейсу маршрутизатора ITR или ETR в сторону ядра.

База данных (обычно распределенная), которую называют системой сопоставления (Mapping System), содержит сопоставления между EID и RLOC. Такие сопоставления связывают идентификаторы устройств, подключённых к сайту LISP (EID), с набором RLOC, настроенных на поддерживающих LISP маршрутизаторах, обслуживающих сайт. Кроме того, сопоставления включают правила TE и могут быть настроены на поддержку многодомности и распределения нагрузки. Система сопоставления LISP концептуально похожа на DNS и организована как распределенная по сети база данных множества организаций. В LISP маршрутизаторы ETR регистрируют сопоставления, а ITR извлекают их.

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

Ниже (Рисунок 2) представлена упрощённая последовательность потока пакетов между парой узлов, подключённых к сайтам LISP. Отметим, что типичные маршрутизаторы с поддержкой LISP — это xTR (ITR и ETR). Клиент HostA на рисунке передаёт пакет серверу HostB.

                         /----------------\
                         |     Система    |
                         |  сопоставления |
                        .|                |-
                       ` \----------------/ `.
                     ,`                       \
                    /                          `.
                  ,'         _,..-..,,           ',
                 /         -`         `-,          \
               .'        ,'              \          `,
               `        '                 \           '
           +-----+     |                   | RLOC_B1+-----+
    HostA  |     |    |    Пространство     |-------|     |  HostB
    EID_A--|ITR_A|----|        RLOC         |       |ETR_B|--EID_B
           |     | RLOC_A1                  |-------|     |
           +-----+     |                   | RLOC_B2+-----+
                        ,                 /
                         \               /
                          `',         ,-`
                             ``''-''``

Рисунок 2. Последовательность потока пакетов в LISP.

  1. HostA извлекает EID_B для HostB, обычно запрашивая DNS и получая запись A или AAAA. Затем он создаёт пакет IP как в Internet. Пакет имеет адрес отправителя EID_A и адрес получателя EID_B.

  2. Пакет пересылается в ITR_A сайта LISP с использованием стандартных внутридоменных механизмов.

  3. ITR_A при получении пакета запрашивает систему сопоставления для получения локатора ETR_B, обслуживающего EID_B сервера HostB. Для этого служит управляющее сообщение LISP, называемое Map-Request. Сообщение содержит EID_B в качестве ключа поиска. В ответ ITR_A получает другое управляющее сообщение LISP — Map-Reply. Это сообщение содержит два локатора RLOC_B1 и RLOC_B2, а также правила TE — приоритет и вес для каждого локатора. Отметим, что при необходимости Map-Reply может включать большее число локаторов. ITR_A может кэшировать сопоставления в локальном хранилище для ускорения пересылки последующих пакетов.

  4. ITR_A инкапсулирует пакет в сторону RLOC_B1 (выбирается в соответствии с приоритетом и весом в сопоставлении). Пакет имеет два заголовка IP. Внешний заголовок указывает RLOC_A1 как источник и RLOC_B1 — как получателя. Во внутреннем исходном заголовке пакета указан адрес источника EID_A и получателя EID_B. Затем ITR_A добавляет заголовок LISP. Более подробно процесс описан в параграфе 3.3.1. Инкапсуляция LISP.

  5. Инкапсулированный пакет пересылается через межсетевое ядро как обычный пакет IP, оставляя EID невидимым для ядра.

  6. При получении инкапсулированного пакета маршрутизатор ETR_B декапсулирует его и пересылает в HostB.

3.3. Плоскость данных

В этом параграфе приведено высокоуровневое описание плоскости данных LISP, детально заданной в [RFC9300]. Плоскость данных LISP отвечает за инкапсуляцию и декапсуляцию пакетов данных и кэширование соответствующего состояния пересылки. Основными элементами плоскости данных являются маршрутизаторы ITR и ETR. Оба типа маршрутизаторов поддерживают LISP и соединяют EID с пространством RLOC (ITR) и наоборот (ETR).

3.3.1. Инкапсуляция LISP

Маршрутизаторы ITR инкапсулируют пакеты данных в направлении ETR. Пакеты данных LISP инкапсулируются с использованием UDP (порт 4341). Порт отправителя ITR обычно выбирает с использованием хэш-значения квинтета (5-tuple) из внутреннего заголовка (для согласованности при спользовании нескольких путей, как в ECMP [RFC2992]) и игнорируется при получении. Пакеты данных LISP часто инкапсулируются в пакеты UDP с нулевой контрольной суммой [RFC6935] [RFC6936], которую нельзя проверить при получении, поскольку внутри пакета LISP имеется транспортный заголовок с проверяемой контрольной суммой. Использование нулевой контрольной суммы UDP при передаче по протоколу IPv6 для всех протоколов туннелирования, подобных LISP, регулируется заявлением о применимости из [RFC6936]. Если пакеты данных LISP инкапсулируются в пакеты UDP с ненулевой контрольной суммой, внешняя контрольная сумма проверяется при получении пакетов UDP как при обычной обработке UDP.

Пакеты с инкапсуляцией LISP включают также заголовок LISP (между внешним заголовком UDP и исходным заголовком IP). Заголовок LISP устанавливают маршрутизаторы ITR и вырезают ETR. Заголовок содержит сведения о достижимости (4.2. Достижимость RLOC) и поле Instance ID, служащее для разделения трафика разных арендаторов на сайте LISP, что позволяет применять на сайтах перекрывающуюся, но логически разделенную адресацию EID.

В результате LISP работает с 4 заголовками — внутренним заголовком от источника и 3 заголовками, которые LISP добавляет перед ним (от внешнего к внутреннему), как указано ниже.

  1. Внешний заголовок IP с RLOC в качестве адресов отправителя и получателя. Этот заголовок создаёт маршрутизатор ITR и вырезает маршрутизатор ETR.

  2. Заголовок UDP (порт 4341), обычно с нулевой контрольной суммой, создаваемый ITR и вырезаемый ETR.

  3. Заголовок LISP со свойствами плоскости пересылки (такими как доступность) и полем Instance ID. Этот заголовок создаёт маршрутизатор ITR и вырезает маршрутизатор ETR.

  4. Внутренний заголовок IP с EID в качестве адресов отправителя и получателя. Этот заголовок создаёт хост-источник и он сохраняется неизменным при обработке в плоскости данных LISP на ITR и ETR.

В некоторых случаях полезна повторная инкапсуляция и/или рекурсивные туннели для выбора конкретного пути через базовую сеть, например, для предотвращения перегрузки или отказа. Туннелирование с повторной инкапсуляцией является последовательным применением туннелей LISP и выполняется при удалении декапсулятором (ETR) заголовка LISP и новой инкапсуляции (ITR) с добавлением другого заголовка. Рекурсивные туннели являются вложенными и реализуются с использованием для пакета неоднократной инкапсуляции LISP. Такие функции реализуются маршрутизаторами с реинкапсуляцией туннелей (Re-encapsulating Tunnel Router или RTR). Маршрутизатор RTR можно считать выступающим сначала в роли ETR для декапсуляции пакетов, затем — в роли ITR с инкапсуляцией пакетов для другого локатора (см. [RFC9300] и [RFC9301]).

3.3.2. Состояние пересылки LISP

В архитектуре LISP маршрутизаторы ITR сохраняют лишь сведения, достаточные для маршрутизации проходящего через них трафика. Иными словами, ITR нужно лишь извлечь из системы сопоставления LISP отображения EID-Prefix (блок EID) на RLOC, применяемые для инкапсуляции пакетов. Такие сопоставления хранятся в локальном кэше, называемом LISP Map-Cache, для последующих пакетов, направляемых в тот же EID-Prefix. Отметим, что в случае перекрытия EID-Prefix маршрутизатор ITR может получить по запросу набор сопоставлений из запрошенного EID-Prefix и более конкретных EID-Prefix (см. параграф 5.5 в [RFC9301]). Отображения включают значения TTL, устанавливаемые ETR. Дополнительные сведения об управлении Map-Cache приведены в параграфе 4.1. Поддержка кэша.

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

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

3.4.1. Сопоставления LISP

Каждое отображение включает привязки EID-Prefix к набору RLOC, а также правила TE в виде приоритета и веса для RLOC. Приоритет позволяет ETR настроить активную и резервную политику, а вес служит для распределения нагрузки (трафика) между RLOC (по потокам).

Типичное сопоставление в LISP связывает EID в форме префиксов IP с набором RLOC тоде в форме адресов IP. Адреса IPv4 и IPv6 кодируюся с использованием подходящего идентификатора семейства адресов (Address Family Identifier или AFI) [RFC8060]. Однако LISP может поддерживать более общее кодирование адресов на канонического формату LISP (LISP Canonical Address Format или LCAF) [RFC8060]. С помощью такого обобщённого синтаксиса кодирования адресов LISP стремится обеспечить гибкость имеющихся и будущих приложений. Например, LCAF позволяет поддерживать адреса MAC (Media Access Control), географические координаты, имена ASCII и задаваемые приложением данные.

3.4.2. Интерфейс системы сопоставления

LISP задаёт стандартный интерфейс между плоскостями данных и управления в [RFC9301], включающий 2 сущности.

Map-Server — сервер сопоставлений

Компонент сетевой инфраструктуры, изучающий отображения через маршрутизаторы ETR и публикующий их в системе сопоставления LISP Mapping System. Обычно Map-Server не уполномочен отвечать на запросы, поэтому он пересылает их ETR. Однако сервер может работать в режиме посредника (proxy-mode), когда ETR делегирует ему право отвечать на запросы. Это полезно при ограниченности ресурсов ETR (например, CPU или питания).

Map-Resolver — распознаватель сопоставлений

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

Интерфейс определяет 4 управляющих сообщения LISP, передаваемых в дейтаграммах UDP (порт 4342).

Map-Register

Эти сообщения применяются маршрутизаторами ETR для регистрации отображений в системе сопоставления и аутентифицируются с использованием общего для ETR и Map-Server ключа.

Map-Notify

По запросу ETR это сообщение передаёт Map-Server в ответ на сообщение Map-Register для подтверждения корректного получения отображения и передачи последнего состояния Map-Server для отображения EID на RLOC. В некоторых случаях Map-Notify может передаваться для прежних RLOC, если для EID зарегистрирован новый набор RLOC.

Map-Request

Это сообщение применяется маршрутизаторами ITR или распознавателями Map-Resolver для получения сопоставления данного EID.

Map-Reply

Это сообщение передаёт Map-Server или ETR в ответ на Map-Request, указывая найденное сопоставление. Следует отметить, что Map-Reply может содержать негативный отклик, если, например, запрошенный идентификатор EID не входит в пространство LISP EID. В таких случаях ITR обычно пересылает трафик как есть (без инкапсуляции) в сеть Internet. Это определено для поддержки поэтапного развёртывания LISP.

3.4.3. Система сопоставления

LISP архитектурно разделяет плоскости управления и данных с помощью стандартного интерфейса. Интерфейс связывает плоскость данных (маршрутизаторы, отвечающие за пересылку пакетов данных) с системой сопоставления LISP (база данных, отвечающая за хранение отображений). При таком разделении плоскости данных и управления могут иметь разную архитектуру и расширяться независимо. Обычно плоскость данных оптимизируется для маршрутизации пакетов по иерархическим адресам IP. Однако требования плоскости управления могут быть иными, например, за счёт использования преимуществ LCAF система сопоставления может хранить неиерархические ключи (такие как MAC-адреса) и для её расширяемости нужен будет другой подход. Другим важным различием плоскостей данных и управления LISP является то, что за счёт локального кэширования отображений в ITR системе сопоставления не требуется работать со скоростью линии.

При выборе архитектуры системы сопоставления было рассмтрено множество механизмов создания распределенных систем — базы данных на основе графов в форме альтернативной логической топологии LISP (LISP Alternative Logical Topology или LISP-ALT) [RFC6836], иерархические базы данных в форме дерева делегированных баз данных LISP (LISP Delegated Database Tree или LISP-DDT) [RFC8111], монолитные базы данных в форме LISP Not-so-novel EID-to-RLOC Database (LISP-NERD) [RFC6837], плоские базы данных в форме распределенной хэш-таблицы LISP (LISP Distributed Hash Table или LISP-DHT) [LISP-SHDHT] [Mathy], и основанные на групповой передаче базы данных [LISP-EMACS]. Следует отметить, что в некоторых вариантах, таких как приватное развёртывание, система сопоставления может быть логически централизованной и обычно будет включать один Map-Server/Map-Resolver.

В последующих параграфах более подробно рассмотрены две из упомянутых систем сопоставления (LISP-ALT и LISP-DDT), которые были реализованы и развёрнуты.

3.4.3.1. LISP-ALT

LISP-ALT [RFC6836] была первой системой сопоставления, которая бала предложена, разработана и развёрнута в пилотной сети LISP. Она основана на распределенном наложении BGP с участием Map-Server и Map-Resolver. Узлы соединялись с партнёрами через статические туннели. Каждый вовлечённый Map-Server в топологии ALT анонсировал EID-Prefix, зарегистрированные обслуживаемыми ETR, что делало EID маршрутизируемыми в топологии ALT.

Когда маршрутизатору ITR нужно отображение, он передаёт Map-Request распознавателю Map-Resolver, который, используя топологию ALT, пересылает Map-Request в направлении Map-Server, отвечающего за сопоставление. При получении запроса Map-Server пересылает его маршрутизатору ETR, который отвечает напрямую ITR.

3.4.3.2. LISP-DDT

LISP-DDT [RFC8111] концептуально похожа на DNS — иерархический каталог, внутренняя структура которого отражает иерархическую природу адресного пространства EID. Иерархия DDT включает узлы DDT, формирующие дерево, листьями которого служат Map-Server. Наверху структууры размещается корень DDT, являющийся экземпляром узла DDT, соответствующим всему пространству адресов. Как и DNS, система DDT поддерживает множество избыточных узлов DDT и/или корней DDT. Распознаватели Map-Resolver являются клиентами иерархии DDT и могут обращаться к корню и другим узлам DDT.

                        /---------\
                        |         |
                        | DDT Root|
                        |   /0    |
                      ,.\---------/-,
                  ,-'`       |       `'.,
               -'`           |           `-
           /-------\     /-------\    /-------\
           |  DDT  |     |  DDT  |    |  DDT  |
           | Node  |     | Node  |    | Node  |  ...
           |  0/8  |     |  1/8  |    |  2/8  |
           \-------/     \-------/    \-------/
         _.                _.            . -..,,,_
       -`                -`              \        ````''--
+------------+     +------------+   +------------+ +------------+
| Map-Server |     | Map-Server |   | Map-Server | | Map-Server |
| EID-Prefix1|     | EID-Prefix2|   | EID-Prefix3| | EID-Prefix4|
+------------+     +------------+   +------------+ +------------+

Рисунок 3. Схематическое представление дерева DDT.


Префиксы и структура на рисунке 3 представлены лишь для иллюстрации.

Структура DDT на деле не индексирует EID-Prefix, индексируя взамен расширенные префиксы (Extended EID-Prefix или XEID-Prefix), которые являются просто конкатенацией нескольких полей (от старшего бита к младшему): Database-ID, Instance ID, Address Family Identifier и фактических EID-Prefix. Database-ID указывается для возможных в будущем требований повышения уровня иерархии и возможности создания нескольких отдельных деревьев баз данных.

При ответах на запрос LISP-DDT работает подобно DNS, но поддерживает лишь интерактивный поиск. Клиенты DDT (обычно Map-Resolver) создают запросы Map-Request к корневому узлу DDT, получая в ответ новое управляющее сообщение LISP — Map-Referral. Это сообщение содержит список RLOC набора узлов DDT, соответствующих настроенному делегированию XEID. Т. е. сведения в Map-Referral указывают потомка запрашиваемого узла DDT, у которого есть более конкретные сведения об интересующем префиксе XEID-Prefix. Этот процесс повторяется, пока клиент DDT не пройдёт структуру дерева (вниз) и не найдет Map-Server, обслуживающий искомый XEID. В этот момент клиент передаёт Map-Request и получает Map-Reply с сопоставлениями. Важно подчеркнуть, что клиенты DDT могут кэшировать сведения из Map-Referral, т. е. структуру DDT, чтобы сократить время извлечения сопоставлений [Jakab].

Система сопоставления DDT основана на ручной настройке, т. е. на Map-Resolver настраивается набор доступных корневых узлов DDT, а на узлах DDT — соответствующее делегирование XEID. Изменение настроек на узлах DDT требуется лишь при смене структуры дерева и настройки не зависят от динамики EID (выделения RLOC или смены правил TE).

3.5. Механизмы межсетевого взаимодействия

EID обычно идентичны адресам IPv4 или IPv6 и хранятся в системе сопоставления LISP. Однако они обычно не анонсируются в систему маршрутизации за пределами локального домена LISP. Поэтому для LISP нужен механизм межсетевого взаимодействия, позволяющий сайтам LISP взаимодействовать с сайтами, не понимающими LISP (и наоборот). Механизмы межсетевого взаимодействия LISP заданы в [RFC6832].

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

Proxy Ingress Tunnel Router (PITR) — маршрутизатор-посредник входного туннеля

PITR обеспечивают связность унаследованной сети Internet с сайтами LISP. PITR анонсируют в систему глобальной маршрутизации блоки EID-Prefix (с агрегированием при возможности) для привлечения трафика. Для каждого входящего пакета из источника вне сайта LISP (не EID) PITR использует инкапсуляцию LISP в направлении RLOC подходящего сайта LISP. Влияние PITR на размер таблицы маршрутизации зоны без принятого по умолчанию маршрута (Default-Free Zone или DFZ) в худшем случае похоже на ситуацию без применения LISP. EID-Prefix будут по возможности агрегироваться как PITR, так и системой глобальной маршрутизации.

Proxy Egress Tunnel Router (PETR) — маршрутизатор-посредник выходного туннеля

PETR обеспечивает связность сайта LISP с традиционной сетью Internet. В некоторых случаях сайты LISP не могут передавать инкапсулированные пакеты с локальным адресом EID в качестве источника в традиционную сеть Internet, например, когда краевой маршрутизатор провайдера (Provider Edge или PE) использует индивидуальную пересылку по обратному пути (Unicast Reverse Path Forwarding или uRPF) или промежуточная сеть между сайтом LISP и не понимающим LISP сайтом не поддерживает нужную версию IP (IPv4 или IPv6). В обоих PETR преодолевает такие ограничения за счёт инкапсуляции пакетов. Не существует конкретных правил распространения адресов PETR RLOC маршрутизаторам ITR.

Кроме того, LISP определяет механизмы для работы с приватными EID [RFC1918] через LISP-NAT [RFC6832]. В этом случае xTR заменяет приватное значение EID источника на маршрутизируемое. На момент написания документа продолжалась работа по прохождению через NAT, т. е. размещения xTRs за NAT с использованием немаршрутизируемых RLOC.

PITR, PETR, и LISP-NAT позволяют развёртывать LISP поэтапно, обеспечивая достаточную гибкость размещения временных между частями сети с поддержкой и без поддержки LISP и упрощая перенос этих границ со временем.

4. Механизмы работы LISP

В этом разделе описаны основные рабочие механизмы, определённые в LISP.

4.1. Поддержка кэша

Разделение плоскостей управления и данных в LISP с хранением сопоставлений в плоскости данных и использовании их для пересылки в плоскости управления требует локального кэширования в ITR для снижения сигнальных издержек (Map-Request/Map-Reply) и повышения скорости пересылки. Локальный кэш в ITR называют Map-Cache и применяют для пакетов с инкапсуляцией LISP. Map-Cache индексируется по парам (Instance ID, EID-Prefix) и содержит в основном набор RLOC со связанными правилами TE (приоритет и вес).

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

Record Time To Live (TTL) — срок действия записи

Каждая запись сопоставления имеет поле TTL, задаваемое маршрутизатором ETR. По истечении TTL запись не может применяться ITR, пока не будет обновлена отправкой нового Map-Request.

Solicit-Map-Request (SMR) — запрос Map-Request

SMR служит явным механизмом обновеления данных сопоставления. В частности, можно передать специальный тип Map-Request по требованию ETR для запроса обновления сопоставлений. При получении сообщения SMR маршрутизатор ITR должен обновить привязки передавая Map-Request системе сопоставления. Использование SMR описано в [RFC9301].

Map-Versioning — версия сопоставления

Этот необязательный механизм добавляет в конец заголовка LISP пакетов данных номер версии отображения, используемой маршрутизатором xTR. При получении xTR пакета с инкапсуляцией LISP от удалённого xTR, можно узнать, не устарела ли локальная или удалённая версия Map-Cache. Если локальная версия устарела маршрутизатор передает Map-Request для удалённого EID, чтобы получить новое сопоставление. Если же обнаружно устаревание Map-Cache на удалённом xTR, маршрутизатор передаёт SMR для уведомления того о доступности нового сопоставления. Подробное описание процесса приведено в [RFC9302].

В некоторых случаях запись Map-Cache можно обновить заранее с помощью описанных ниже механизмов.

4.2. Достижимость RLOC

В большинстве случаев LISP работает с системой отображения на основе вытягивания (pull), например, DDT. Это обеспечивает сквозную архитектуру вытягивания и состояние сети храниться в плоскости управления, а плоскость данных извлекает его по запросу. Это влияет на распространение сведений о достижимости и живучести xTR, поскольку архитектура вытягивания требует явных механизмов распространения таких данных. Поэтому в LISP задан набор механизмов для информирования ITR и PITR о доступности кэшированных RLOC.

Locator-Status-Bits (LSBs) — биты состояния локатора

Метод LSBs является пассивным. Поле LSB передаётся в заголовках LISP пакетов данных и может устанавливаться маршрутизаторами ETR для указания активных и неактивных (up/down) RLOC сайта ETR. Эти сведения могут служить маршрутизаторам ITR подсказкой о доступности для выполнения дополнительной проверки. LSB не указывают статус доступности пути, а лишь дают подсказки о состоянии RLOC. Поэтому они не должны применяться в общедоступной сети Internet и следует связывать их с Map-Versioning для предотвращения «гонки», где LSB считаются относящимися не к тем RLOC, с которыми они связаны.

Echo-Nonce

Это пассивный метод, который может эффективно работать лишь при двухсторонних потоках данных между двумя взаимодействующими xTR. По сути, ITR добавляет в конце заголовка LISP пакетов данных случайное значение (nonce). Если путь и зондируемый локатор активны, ETR будет добавлять это же случайное значение в следующий пакет данных. Если этого не происходит, ITR может счесть локатор недоступным. При одностороннем трафике или несовпадении принимающего трафик ETR с передающим трафик назад маршрутизатором ITR нужны дополнительные механизмы. Механизм Echo-Nonce должен применяться лишь в доверенных средах, а не в общедоступной сети Internet.

RLOC-Probing — зондирование RLOC

Имеется механизм активного зондирования, когда ITR передают пробные пакеты конкретным локаторам. Это позволяет проверить как локатор, так и путь к нему. В частности, это делается путём отправки Map-Request (с некоторыми флагами) в плоскости данных (пространство RLOC) и ожидания Map-Reply, передаваемого также в плоскости данных. Активная природа RLOC-Probing обеспечивает эффективный механизм определения доступности и (в случае отказа) переключения на другой локатор. Кроме того, механизм обеспечивает полезную оценку RTT для задержек на пути, которую могут использовать другие сетевые алгоритмы.

Следует отметить, что RLOC-Probing и Echo-Nonce могут работать вместе. В частности, если nonce не возвращается, ITR не может определить на каком из направлений возник отказ. В этом случае ITR может использовать RLOC-Probing.

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

Сигналы ICMP

Базовая среда LISP — инфраструктура Internet — использует ICMP для сигналов о недоступности (среди прочего). LISP может использовать это и считать получение сообщений ICMP Network Unreachable или ICMP Host Unreachable подсказкой о возможной недоступности локатора, вызывающей дополнительную проверку.

Базовая маршрутизация

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

4.3. Синхронизация ETR

Все ETR, полномочные для конкретного EID-Prefix, должны анонсировать запрашивающим одно и то же сопоставление. Это значит, что ETR должны знать о статусе RLOC в других ETR. Это называют синхронизацией ETR.

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

4.4. Обработка MTU

Поскольку LISP инкапсулирует пакеты, протоколу приходится иметь дело с превышением размера пакетов над MTU для пути между ITR и ETR. LISP определяет два механизма.

Без учёта состояния

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

С учётом состояния

ITR отслеживают значения MTU на путях к целевым локаторам на основании пакетов ICMP Too Big от промежуточных маршрутизаторов. Маршрутизаторы ITR передают сообщения ICMP Too Big для информирования отправителей об эффективном значении MTU. Кроме того, ITR могут применять механизмы определения MTU для пути (Path MTU Discovery или PMTUD) [RFC1191] или определение MTU на уровне пакетизавции (Packetization Layer Path MTU Discovery или PLPMTUD) [RFC4821] для отслеживания MTU в направлении локаторов.

В обоих случаях при невозможности фрагментировать пакеты (IPv4 с DF=1 или IPv6) ITR отбрасывает пакет и передаёт его отправителю сообщение ICMP Too Big.

5. Мобильность

Разделение локаторов и идентификаторов в LISP подходит для целей TE, где сайты LISP могут менять свои точки присоединения к Internet (т. е. RLOC) не затрацивая конечные точки и ядро Internet. В этом контексте граничные маршрутизаторы используют функциональность xTR, а конечные точки не знают о наличии LISP. Это похоже на Network Mobility [RFC3963], однако данный режим работы не обеспечивает «бесшовной» мобильности конечных точек между разными сайтами LISP, поскольку адрес EID может не маршрутизироваться в посещенном сайте. Тем не менее, LISP можно использовать для бесшовной мобильности IP, когда LISP реализован непосредственно на конечной точке или та перемещается к подключённому xTR. Тогда каждая конечная точка является xTR, а адрес EID — это один из предоставленных сетевому стеку, используемому приложениями, тогда как RLOC берётся из посещенной сети. Это похоже на функциональность Mobile IP ([RFC5944] и [RFC6275]).

При смене устройством своего локатора RLOC маршрутизатор xTR обновляет RLOC в своём локальном сопставлении и регистрирует его на своём Map-Server, обычно с малым значением TTL (1 минута). Чтобы избежать потребности в домашнем шлюзе, ITR также указывает смену RLOC всем удаленным устройствам, имеющим текущую связь с перемещенным устройством Сочетание обоих методов обеспечивает расширяемость системы, поскольку сигнализация строго ограничена Map-Server и хостами, с которыми имеется связь. В случае перемещения EID-Prefix может быть достаточно мелким, вплоть до /32 или /128 (IPv4 и IPv6, соответственно), в зависимости от конкретного применения (например, перенос подсети или одной виртуальной машиы или мобильного узла).

Разделение идентификатора и локатора, обеспечиваемое LISP, позволяет работать с другими решениями для мобильности L2 и L3.

6. Групповая передача

LISP поддерживает доставку групповых пакетов IP, переданных из пространства EID. Требуемые изменения протоколов групповой доставки указаны в [RFC6831].

LISP может создавать состояния групповой рассылки (для приёма и передачи) как в ядре, так и на сайтах. При использовании сигнализации для создания групповой рассылки на сайтах маршрутизаторы LISP инкапсулируют сообщения PIM Join/Prune от получателя к сайтам источников как индивидуальные пакеты. В ядре маршрутизаторы ETR создают новое сообщение PIM Join/Prune, адресованное RLOC маршрутизатора ITR, обслуживающего источник. Упрощённая последовательность приведена ниже.

  1. Конечный хост, желающий присоединиться к групповому каналу передаёт отчёт IGMP. Групповые маршрутизаторы PIM на сайте LISP распространяют сообщения PIM Join/Prune (S-EID, G) в направлении ETR.

  2. Сообщение Join поступает в ETR и маршрутизатор ETR создаёт два сообщения Join. Первое является индивидуальным пакетом с инкапсуляцией LISP для исходного сообщения Join в направлении RLOC обслуживающешл источник маршрутизатора ITR. Это сообщение создаёт групповое состояние (S-EID, G) на сайте источника. Второе сообщение Join содержит в качестве адреса получателя RLOC маршрутизатора ITR, обслуживающего источник (S-RLOC, G) и создаёт состояние групповой рассылки в ядре.

  3. Групповые пакеты данных, созданные источником (S-EID, G) передаются от него к ITR. Маршрутизатор ITR инкапсулирует групповые пакеты в LISP. Внешний заголовок включает его RLOC (S-RLOC) как отправителя и исходный адрес multicast-группы (G) как получателя. Отметим, что групповые адреса являются логическими и не распознаются системой сопоставления. Затем групповые пакеты передаются через ядро в направлении принимающих ETR, которые декапсулируют пакеты и пересылают их по групповому состоянию на сайте.

Отметим, что внутренние и внешние групповые адреса обычно различаются за исключением особых случаев, когда базовый провайдер жёстко контролирует наложение. Спецификации LISP уже поддерживают все режимы PIM modes [RFC6831]. Кроме того, LISP может поддерживать другие механизмы сохранения групповых состояний.

Когда групповые источники и получатели имеются на сайтах LISP, а ядро сети между сайтами не обеспечивает поддержки групповой передачи, можно применять бессигнальный механизм для создания наложения, которое позволит передавать групповой трафик между сайтами и соединить деревья групповой рассылки на разных сайтах [RFC8378]. Регистрации с разных сайтов-получателей будут слиты в системе сопоставления для сборки списка групповой репликации, включающего все RLOC, ведущие к получателям для конкретной группы или группового канала. Список репликации для каждой конкретной групповой записи поддерживается как запись системы сопоставления LISP.

7. Варианты применения

7.1. Организация трафика

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

Отображение связывает список RLOC с EID-Prefix. Каждый локатор RLOC соответствует интерфейсу ETR (или набора ETR), способному корректно переслать трафик по EID из префикса. Для каждого RLOC в отображении указывается приоритет и вес. Приоритет служит для выбора предпочтительных для передачи пакетов RLOC (менее предпочтительные предоставляются для резервирования), а вес позволяет распределять нагрузку между RLOC с одинаковым приоритетом пропорционально заданному значению веса.

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

7.2. LISP для сосуществования с IPv6

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

Например, два ЦОД, поддерживающие лишь IPv6 можно соединить через традиционную сеть IPv4 (Internet). Если граничные маршрутизаторы поддерживают LISP, передача пакетов между ЦОД выполняется без какой-либо трансляции, поскольку исходные пакеты IPv6 (в пространстве EID) LISP будет инкапсулировать и передавать в пакетах IPv4 традиционной сети Internet через IPv4 RLOC.

7.3. LISP для VPN

Обычно в одной физической инфраструктуре работает несколько виртуальных сетей. В таких ситуациях определение принадлежности пакета к виртуальной сети становится важной задачей и для этого часто применяются теги или метки. При использовании LISP пакеты можно различать по полю Instance ID. Когда ITR инкапсулирует пакет из определённой виртуальной сети (например, известной по VRF3 или VLAN), он помечает инкапсулированный пакет значением Instance ID, соответствующим виртуальной сети. Когда ETR получает пакет с Instance ID, он использует это поле для определения принадлежности пакета.

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

7.4. LISP для мобильности VM в ЦОД

Способ обеспечения бесшовной можильности виртуальных машин (VM) в ЦОД состоит в представлении опорной сети ЦОД как пространства RLOC, а подсетей с серверами, как пространство EID. Маршрутизаторы LISP помещаются на границе между магистралью и каждой подсетью серверов. При перемещении VM в другую подсеть она может (временно) сохранить прежний адрес для продолжения работы без сброса транспортных соединений. Когда xTR обнаруживает адрес источника из другой подсети, он регистрирует адрес в системе сопоставления. Для информирования других маршрутизаторов LISP о переносек виртуальной машины и её новом местоположении, чтобы избежать обходных путей через исходную подсеть, применяются такие механизмы, как сообщения Solicit-Map-Request.

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

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

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

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

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

Сопоставления являются центральным элементом LISP и должны приниматься все меры предосторожности для предотвращения вредоносных манипуляций или использования их злоумышленниками. Использование доверенных серверов Map-Server, строго соответствующих [RFC9301], и механизмов аутентификации, предоставляемых LISP-SEC [RFC9303], снижает риск атак на целостность сопоставлений. В более критических средах могут потребоваться меры защиты. Реализация защиты для данной системы сопоставления сильно зависит от архитектуры этой системы и модели угроз, предполагаемой для развёртывания. Поэтому безопасность системы сопоставления должна рассматриваться в соответствующих документах по архитектуре Mapping System.

Как и в других механизмах туннелирования промежуточные устройства на пути между ITR (или PITR) и ETR (или PETR) должны иметь механизмы снятия инкапсуляции для корректной проверки содержимого пакетов с инкапсуляцией LISP.

Как и другие механизчы инкапсуляции и сопоставления (map-and-encap), LISP разрешает «трехстороннюю» маршрутизацию (т. е. поток пакетов проходит через разные граничные маршрутизаторы в зависимости от направления). Это означает, что у промежуточных устройств может не быть полного представления о трафике, который они инспектируют или обрабатывают. Кроме того, пакеты с инкапсуляцией LISP маршрутизируются по внешним адресам IP (RLOC) и могут быть доставлены маршрутизатору ETR, который не отвечает за EID получателя пакета, или сетевому элементу, не являющемуся ETR. Снижение риска обеспечивается применением подходящих методов фильтрации, на элементах сети, которые могут получать неожиданные пакеты с инкапсуляцией LISP.

Дополнительные сведения о влиянии LISP на безопасность приведены в [RFC7835].

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

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

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

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

[RFC1191] Mogul, J. and S. Deering, «Path MTU discovery», RFC 1191, DOI 10.17487/RFC1191, November 1990, <https://www.rfc-editor.org/info/rfc1191>.

[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. J., and E. Lear, «Address Allocation for Private Internets», BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, <https://www.rfc-editor.org/info/rfc1918>.

[RFC2992] Hopps, C., «Analysis of an Equal-Cost Multi-Path Algorithm», RFC 2992, DOI 10.17487/RFC2992, November 2000, <https://www.rfc-editor.org/info/rfc2992>.

[RFC3963] Devarapalli, V., Wakikawa, R., Petrescu, A., and P. Thubert, «Network Mobility (NEMO) Basic Support Protocol», RFC 3963, DOI 10.17487/RFC3963, January 2005, <https://www.rfc-editor.org/info/rfc3963>.

[RFC4821] Mathis, M. and J. Heffner, «Packetization Layer Path MTU Discovery», RFC 4821, DOI 10.17487/RFC4821, March 2007, <https://www.rfc-editor.org/info/rfc4821>.

[RFC4984] Meyer, D., Ed., Zhang, L., Ed., and K. Fall, Ed., «Report from the IAB Workshop on Routing and Addressing», RFC 4984, DOI 10.17487/RFC4984, September 2007, <https://www.rfc-editor.org/info/rfc4984>.

[RFC5944] Perkins, C., Ed., «IP Mobility Support for IPv4, Revised», RFC 5944, DOI 10.17487/RFC5944, November 2010, <https://www.rfc-editor.org/info/rfc5944>.

[RFC6275] Perkins, C., Ed., Johnson, D., and J. Arkko, «Mobility Support in IPv6», RFC 6275, DOI 10.17487/RFC6275, July 2011, <https://www.rfc-editor.org/info/rfc6275>.

[RFC6831] Farinacci, D., Meyer, D., Zwiebel, J., and S. Venaas, «The Locator/ID Separation Protocol (LISP) for Multicast Environments», RFC 6831, DOI 10.17487/RFC6831, January 2013, <https://www.rfc-editor.org/info/rfc6831>.

[RFC6832] Lewis, D., Meyer, D., Farinacci, D., and V. Fuller, «Interworking between Locator/ID Separation Protocol (LISP) and Non-LISP Sites», RFC 6832, DOI 10.17487/RFC6832, January 2013, <https://www.rfc-editor.org/info/rfc6832>.

[RFC6835] Farinacci, D. and D. Meyer, «The Locator/ID Separation Protocol Internet Groper (LIG)», RFC 6835, DOI 10.17487/RFC6835, January 2013, <https://www.rfc-editor.org/info/rfc6835>.

[RFC6836] Fuller, V., Farinacci, D., Meyer, D., and D. Lewis, «Locator/ID Separation Protocol Alternative Logical Topology (LISP+ALT)», RFC 6836, DOI 10.17487/RFC6836, January 2013, <https://www.rfc-editor.org/info/rfc6836>.

[RFC6837] Lear, E., «NERD: A Not-so-novel Endpoint ID (EID) to Routing Locator (RLOC) Database», RFC 6837, DOI 10.17487/RFC6837, January 2013, <https://www.rfc-editor.org/info/rfc6837>.

[RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, «IPv6 and UDP Checksums for Tunneled Packets», RFC 6935, DOI 10.17487/RFC6935, April 2013, <https://www.rfc-editor.org/info/rfc6935>.

[RFC6936] Fairhurst, G. and M. Westerlund, «Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums», RFC 6936, DOI 10.17487/RFC6936, April 2013, <https://www.rfc-editor.org/info/rfc6936>.

[RFC7052] Schudel, G., Jain, A., and V. Moreno, «Locator/ID Separation Protocol (LISP) MIB», RFC 7052, DOI 10.17487/RFC7052, October 2013, <https://www.rfc-editor.org/info/rfc7052>.

[RFC7215] Jakab, L., Cabellos-Aparicio, A., Coras, F., Domingo-Pascual, J., and D. Lewis, «Locator/Identifier Separation Protocol (LISP) Network Element Deployment Considerations», RFC 7215, DOI 10.17487/RFC7215, April 2014, <https://www.rfc-editor.org/info/rfc7215>.

[RFC7835] Saucez, D., Iannone, L., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Threat Analysis», RFC 7835, DOI 10.17487/RFC7835, April 2016, <https://www.rfc-editor.org/info/rfc7835>.

[RFC8060] Farinacci, D., Meyer, D., and J. Snijders, «LISP Canonical Address Format (LCAF)», RFC 8060, DOI 10.17487/RFC8060, February 2017, <https://www.rfc-editor.org/info/rfc8060>.

[RFC8111] Fuller, V., Lewis, D., Ermagan, V., Jain, A., and A. Smirnov, «Locator/ID Separation Protocol Delegated Database Tree (LISP-DDT)», RFC 8111, DOI 10.17487/RFC8111, May 2017, <https://www.rfc-editor.org/info/rfc8111>.

[RFC8378] Moreno, V. and D. Farinacci, «Signal-Free Locator/ID Separation Protocol (LISP) Multicast», RFC 8378, DOI 10.17487/RFC8378, May 2018, <https://www.rfc-editor.org/info/rfc8378>.

[RFC9300] Farinacci, D., Fuller, V., Meyer, D., Lewis, D., and A. Cabellos, Ed., «The Locator/ID Separation Protocol (LISP)», RFC 9300, DOI 10.17487/RFC9300, October 2022, <https://www.rfc-editor.org/info/rfc9300>.

[RFC9301] Farinacci, D., Maino, F., Fuller, V., and A. Cabellos, Ed., «Locator/ID Separation Protocol (LISP) Control Plane», RFC 9301, DOI 10.17487/RFC9301, October 2022, <https://www.rfc-editor.org/info/rfc9301>.

[RFC9302] Iannone, L., Saucez, D., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Map-Versioning», RFC 9302, DOI 10.17487/RFC9302, October 2022, <https://www.rfc-editor.org/info/rfc9302>.

[RFC9303] Maino, F., Ermagan, V., Cabellos, A., and D. Saucez, «Locator/ID Separation Protocol Security (LISP-SEC)», RFC 9303, DOI 10.17487/RFC9303, October 2022, <https://www.rfc-editor.org/info/rfc9303>.

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

[Jakab] Jakab, L., Cabellos-Aparicio, A., Coras, F., Saucez, D., and O. Bonaventure, «LISP-TREE: A DNS Hierarchy to Support the LISP Mapping System», IEEE Journal on Selected Areas in Communications, vol. 28, no. 8, pp. 1332-1343, DOI 10.1109/JSAC.2010.101011, October 2010, <https://ieeexplore.ieee.org/document/5586446>.

[LISP-EMACS] Brim, S., Farinacci, D., Meyer, D., and J. Curran, «EID Mappings Multicast Across Cooperating Systems for LISP», Work in Progress, Internet-Draft, draft-curran-lisp-emacs-00, 9 November 2007, <https://www.ietf.org/archive/id/draft-curran-lisp-emacs-00.txt>.

[LISP-SHDHT] Cheng, L. and M. Sun, «LISP Single-Hop DHT Mapping Overlay», Work in Progress, Internet-Draft, draft-cheng-lisp-shdht-04, 15 July 2013, <https://www.ietf.org/archive/id/draft-cheng-lisp-shdht-04.txt>.

[Mathy] Mathy, L. and L. Iannone, «LISP-DHT: Towards a DHT to map identifiers onto locators», CoNEXT ’08: Proceedings of the 2008 ACM CoNEXT Conference, ReArch ’08 — Re-Architecting the Internet, DOI 10.1145/1544012.1544073, December 2008, <https://dl.acm.org/doi/10.1145/1544012.1544073>.

[Quoitin] Quoitin, B., Iannone, L., de Launois, C., and O. Bonaventure, «Evaluating the Benefits of the Locator/Identifier Separation», Proceedings of 2nd ACM/IEEE International Workshop on Mobility in the Evolving Internet Architecture, DOI 10.1145/1366919.1366926, August 2007, <https://dl.acm.org/doi/10.1145/1366919.1366926>.

Приложение A. История разделения идентификаторов и локаторов

Архитектура LISP для разделения местоположения и отождествления стала результатом дискуссий во время семинара IAB Routing and Addressing в Амстердаме в октябре 2006 г. [RFC4984].

Сразу после семинара спонтанно сформировалась небольшая группа единомышленников для работы над идеей, возникшей в неформальных дискуссиях на семинаре в различных почтовых конференциях. Первый документ Internet-Draft для LISP появился в январе 2007 г.

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

Протокол LISP перешёл из сферы IRTF в рабочую группу IETF в марте 2009 г. После многочисленных исправления базовые спецификации в начале 2013 г. были выпущены как RFC. Работа по расширению, совершенствованию и поиску новых применений продолжается (и несомненно будет длиться ещё долго). Рабочая группа LISP была в 2018 г. преобразована для продолжения работы над базовым протоколом LISP и создания документов Standards Track.

A.1. Старые модели LISP

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

LISP 1

Все EID появляются в обычных таблицах маршрутизации и пересылки в сети (т. е. являются «маршрутизируемыми»). Это свойство применяется для получения сопоставлений EID с RLOC в процессе начальной загрузки (bootstrapping). Пакеты передаются с EID в качестве адресата во внешнем заголовке и когда ETR видит такой пакет, он передаёт Map-Reply маршрутизатору ITR источника, давая полное сопоставление.

LISP 1.5

LISP 1.5 похож на LISP 1, но маршрутизация EID происходит в отдельной сети.

LISP 2

EID не маршрутизируются, сопоставления EID с RLOC доступны через DNS.

LISP 3

EID не маршрутизируются и их нужно искать в новой базе данных о сопоставлениях EID с RLOC (изачально это была система, использующая распределенные хэш-таблицы). Были возможны два варианта — push-системы, где все отображения распространялись всем ITR, и pull-системы, в которых ITR загружали сопоставления при необходимости.

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

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

Спасибо также Dino Farinacci, Fabio Maino, Luigi Iannone, Sharon Barkai, Isidoros Kouvelas, Christian Cassar, Florin Coras, Marc Binderberger, Alberto Rodriguez-Natal, Ronald Bonica, Chad Hintz, Robert Raszuk, Joel M. Halpern, Darrel Lewis, David Black.

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

Albert Cabellos
Universitat Politecnica de Catalunya
c/ Jordi Girona s/n
08034 Barcelona
Spain
Email: acabello@ac.upc.edu
 
Damien Saucez (editor)
Inria
2004 route des Lucioles — BP 93
Sophia Antipolis
France
Email: damien.saucez@inria.fr

 

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

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

nmalykh@protokols.ru


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

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

3Virtual Routing and Forwarding — виртуальная маршрутизация и пересылка.

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

RFC 9301 Locator/ID Separation Protocol (LISP) Control Plane

Internet Engineering Task Force (IETF)                      D. Farinacci
Request for Comments: 9301                                   lispers.net
Obsoletes: 6830, 6833                                           F. Maino
Category: Standards Track                                  Cisco Systems
ISSN: 2070-1721                                                V. Fuller
                                             vaf.net Internet Consulting
                                                        A. Cabellos, Ed.
                                    Universitat Politecnica de Catalunya
                                                            October 2022

Locator/ID Separation Protocol (LISP) Control Plane

Плоскость управления протокола разделения идентификаторов и локаторов (LISP)

PDF

Аннотация

Этот документ описывает плоскость управления и службу сопоставления (Mapping Service) для протокола разделения идентификаторов и локаторов (Locator/ID Separation Protocol или LISP), реализованные двумя типами использующих LISP устройств — распознавателями LISP Map-Resolver и серверами LISP Map-Server, — которые обеспечивают упрощённый интерфейс (front end) для одного или нескольких идентификаторов конечных точек (Endpoint ID или EID) в базу сопоставления с локаторами маршрутизации (Routing Locator или RLOC).

Используя этот интерфейс службы плоскости управления и взаимодействуя с распознавателями Map-Resolver и серверами Map-Server, входные (LISP Ingress Tunnel Router или ITR) и выходные (Egress Tunnel Router или ETR) маршрутизаторы туннелей независимы от деталей базы данных системы сопоставления, что способствует модульности с разными вариантами баз данных. Поскольку эти устройства реализуются на «периметре» (edge) инфраструктуры плоскости управления LISP, соединяя узлы с адресами EID на сайте LISP, снижается сложность и стоимость реализации и эксплуатации развёртывания LISP.

Этот документ отменяет RFC 6830 и RFC 6833.

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

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

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

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

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

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

Протокол разделения локаторов и идентификаторов (Locator/ID Separation Protocol или LISP) [RFC9300] (см. также [RFC9299]) задаёт архитектуру и механизм для динамического туннелирования путём разделения адресов IP на два пространства имён — идентификаторы конечных точек (Endpoint ID или EID), используемые внутри сайтов, и локаторы маршрутизации (Routing Locator или RLOC), используемые в транзитных сетях, образующих инфраструктуру Internet. Для такого разделения LISP задаёт протокольные механизмы сопоставления EID с RLOC. Кроме того, в LISP предполагается наличие базы данных, хранящей и распространяющей такие отображения между узлами системы отображения (Mapping System). Предложено несколько таких баз, включая наложенную службу распространения содержимого (Content distribution Overlay Network Service) для LISP-NERD (старее, чем EID-to-RLOC Database) [RFC6837], дополнительную логическую топологию LISP (LISP Alternative Logical Topology или LISP-ALT) [RFC6836] и дерево делегированной базы данных LISP (LISP Delegated Database Tree или LISP-DDT) [RFC8111].

LISP Mapping Service определяет два типа понимающих LISP узлов — Map-Resolver, который воспринимает Map-Request от входных маршрутизаторов туннелей (Ingress Tunnel Router или ITR) и преобразует сопоставления EID-RLOC с помощью базы данных, и Map-Server, который узнаёт полномочные отображения EID-RLOC у выходных маршрутизаторов туннелей (Egress Tunnel Router или ETR) и публикует их в базе данных.

Плоскость управления LISP и службу сопоставления можно применять с множеством плоскостей данных на основе инкапсуляции или трансляции, включая заданные в LISP [RFC9300], расширении базового протокола LISP (LISP Generic Protocol Extension или LISP-GPE) [RFC9305], виртуальных расширяемых ЛВС (Virtual eXtensible Local Area Network или VXLAN) [RFC7348], VXLAN-GPE [NVO3-VXLAN-GPE], GRE3 [RFC2890], протоколе туннелирования GPRS (GPRS Tunneling Protocol или GTP) [GTP-3GPP], адресации ILA (Identifier-Locator Addressing) [INTAREA-ILA] и маршрутизации по сегментам (Segment Routing или SRv6) [RFC8402].

Концептуально серверы отображения LISP Map-Server имеют некоторые базовые свойства настройки и поддержки серверов системы доменных имён (Domain Name System или DNS) [RFC1035], а распознаватели Map-Resolver похожи на кэширующие распознаватели DNS. С учётом этого в данной спецификации применяются термины (распознаватель и сервер) из спецификаций DNS.

Отметим, что этот документ не предполагает какую-либо инфраструктуру баз отображения для иллюстрации некоторых аспектов операций Map-Server и Map-Resolver. Интерфейс службы отображения может и, скорей всего, будет) применяться ITR и ETR для доступа к другим системам баз данных по мере развития инфраструктуры LISP.

Протоколы LISP не предназначены для решения задач связности и расширяемости от имени произвольных взаимодействующих сторон. Соответствующие ситуации описаны в параграфе 1.1 [RFC9300].

Этот документ отменяет [RFC6830] и [RFC6833].

1.1. Сфера применимости

Изначально протокол LISP создавался для решения проблемы расширения маршрутизации в сети Internet [RFC4984]. Хотя имеется ряд подходов к решению этой задачи, по мере разработки и совершенствования LISP было найдено и реализовано много других применений LISP. В результате устройство и разработка LISP изменились с нацеленностью на эти варианты применения. Общим свойством таких вариантов является большой набор кооперирующихся объектов, стремящихся взаимодействовать через Internet или иную крупную инфраструктуру IP, сохраняя адресацию и топологию сотрудничающих элементов отдельно от топологии, маршрутизации и адресации базовой сети и Internet.

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

  1. Должна быть реализована защита LISP (LISP Security или LISP-SEC) [RFC9303]. Это значит, что бит S должен быть установлен в сообщениях Map-Reply (параграф 5.4), Map-Register (параграф 5.6), Encapsulated Control (ECM) (параграф 5.8).

  2. Разработчикам следует использовать HMAC-SHA256-128+HKDF-SHA256 как Algorithm ID (параграф 12.5) в сообщениях Map-Register (параграф 5.6) и недопустимо использовать None или HMAC-SHA-1-96-None как Algorithm ID (параграф 12.5) в сообщениях Map-Register (параграф 5.6).

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

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

3. Определения терминов

Map-Server — сервер отображений (сопоставлений)

Элемент инфраструктуры сети, изучающий записи отображений EID-Prefix от ETR через описанный ниже механизм регистрации или ото какого-либо иного полномочного источника, если он имеется. Map-Server публикует эти EID-Prefix в базе данных отображений.

Map-Request — запрос отображения

Сообщение плоскости управления, запрашивающее у системы отображения распознавание EID. LISP Map-Request может передаваться также по адресу RLOC для проверки доступности или обмена ключами защиты между инкапсулятором и декапсулятором. Этот тип Map-Request называют также RLOC-Probe Request.

Map-Reply — отклик с отображением

Сообщение плоскости управления, возвращаемое в ответ на сообщение Map-Request, переданное в Mapping System при распознавании EID. LISP Map-Reply может также возвращаться декапсулятором в ответ на Map-Request от инкапсулятора для проверки доступности. Этот тип Map-Reply называют также RLOC-Probe Reply.

Encapsulated Map-Request — инкапсулированный запрос отображения

Запрос LISP Map-Request, передаваемый с инкапсуляцией LISP (ECM). Этот Map-Request имеет в начале дополнительный заголовок LISP и передаётся в порт UDP 4342. Внешним адресом является маршрутизируемый адрес, называемый также RLOC. Применяется ITR при отправке Map-Resolver и сервером Map-Server при пересылке Map-Request в ETR.

Map-Resolver — распознаватель отображений

Элемент инфраструктуры сети, воспринимающий инкапсулированные в LISP (ECM) сообщения Map-Request (обычно от ITR) и определяющий, является ли IP-адрес получателя частью пространства EID. Если это не так, возвращается Negative Map-Reply, в ином случае Map-Resolver находит подходящее отображение EID-RLOC, запрашивая базу данных отображений.

Negative Map-Reply — негативный отклик для отображения

LISP Map-Reply с пустым набором Locator-Set, возвращаемый в ответ на Map-Request, если EID получателя не зарегистрирован в Mapping System, запрещён правилами или не прошла аутентификация.

Map-Register message — сообщение Map-Register

Сообщение LISP, передаваемое ETR серверу Map-Server для регистрации связанных с маршрутизатором EID-Prefix. В дополнение к отправке EID-Prefix для регистрации сообщение включает 1 или несколько RLOC, обеспечивающих доступ к ETR. Map-Server использует эти RLOC при пересылке Map-Request (переформатированных как Encapsulated Map-Request). ETR может запросить, чтобы Map-Server отвечал на Map-Request от своего имени, установив в сообщении флаг proxy Map-Reply (P).

Map-Notify message — сообщение Map-Notify

Сообщение LISP, передаваемое Map-Server маршрутизатору ETR для подтверждения приёма и обработки Map-Register. ETR запрашивает возврат Map-Notify установкой флага want-map-notify (M-bit) в сообщении Map-Register. В отличие от Map-Reply, сообщение Map-Notify использует порт UDP 4342 для источника и получателя. Сообщения Map-Notify передаются также маршрутизаторам ITR от Map-Server при изменении RLOC-Set.

Определения других терминов, в частности Ingress Tunnel Router (ITR), Egress Tunnel Router (ETR), Re-encapsulating Tunnel Router (RTR), приведены в спецификации плоскости данных LISP [RFC9300].

4. Базовый обзор

Map-Server — это устройство, публикующее EID-Prefix в базе отображений LISP от имени набора ETR. При получении Map-Request (обычно от ITR) сервер обращается к базе данных для поиска ETR и может получить в ответ набор RLOC для EID-Prefix. Для публикации EID-Prefix маршрутизатор ETR переиодически отправляет сообщения Map-Register серверу Map-Server. Сообщение Map-Register содержит список EID-Prefix и набор RLOC, которые можно использовать для доступа к ETR.

При использовании LISP-ALT [RFC6836] в качестве базы данных отображений Map-Server соединяется с сетью ALT и действует как последний маршрутизатор (last-hop) ALT-Router. Промежуточные ALT-Router пересылают Map-Request серверу Map-Server, который анонсирует конкретный EID-Prefix, а тот пересылает их владеющему ETR, который отвечает сообщениями Map-Reply.

При использовании базы отображения LISP-DDT [RFC8111] Map-Server передаёт финальные сообщения Map-Referral от дерева делегированной базы данных (Delegated Database Tree или DDT).

Map-Resolver получает инкапсулированные Map-Request от своих ITR-клиентов и использует базу отображений в поиске подходящего ETR для ответа на эти запросы. В сети LISP-ALT Map-Resolver выступает как первый маршрутизатор (first-hop) ALT-Router. Он имеет туннели GRE к другим ALT-Router и использует BGP для изучения путей к ETR с разными префиксами в базе данных LISP-ALT. Map-Resolver использует сведения о путях для пересылки Map-Request через ALT корректным ETR. В сети LISP-DDT [RFC8111] Map-Resolver поддерживает кэш ссылок и выступает первым (first-hop) узлом DDT. Map-Resolver использует ссылочные данные для пересылки Map-Request.

Хотя Map-Resolver может кэшировать отклики для повышения производительности, нужно решать проблемы, связанные с управлением кэшем, чтобы это было надёжно и практично. В этой спецификации Map-Resolver работают без кэширования, декапсулируя и пересылая инкапсулированные Map-Request, полученные от ITR. Спецификация функций кэширования выходит за рамки этого документиа.

Отметим, что одно устройство может совмещать функции Map-Server и Map-Resolver и это будет применяться во многих случаях. При использовании LISP-ALT и LISP-DDT могут быть узлы, поддерживающие только ALT или только DDT, соответственно, соединяющие Map-Resolver и Map-Server для создания системы отображения Mapping System.

5. Форматы пакетов плоскости управления LISP IPv4 и IPv6

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

     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Version|  IHL  |Type of Service|          Total Length         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |         Identification        |Flags|      Fragment Offset    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Time to Live | Protocol = 17 |         Header Checksum       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Source Routing Locator                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 Destination Routing Locator                   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  / |           Source Port         |         Dest Port             |
UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  \ |           UDP Length          |        UDP Checksum           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |                         LISP Message                          |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Управляющее сообщение IPv4 UDP LISP.

     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Version| Traffic Class |           Flow Label                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |         Payload Length        | Next Header=17|   Hop Limit   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                     Source Routing Locator                    +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                  Destination Routing Locator                  +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  / |           Source Port         |         Dest Port             |
UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  \ |           UDP Length          |        UDP Checksum           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |                         LISP Message                          |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 2. Управляющее сообщение IPv6 UDP LISP.

При отправке UDP Map-Request, Map-Register, Map-Notify (в качестве уведомления) порт источника UDP выбирается отправителем, а для порта получателя устанавливается значение 4342. При передаче UDP Map-Reply, Map-Notify (как подтверждения Map-Register), Map-Notify-Ack устанавливается порт отправителя UDP 4342, а номер порта получателя копируется из поля порта отправителя в Map-Request или вызвавшем сообщение пакете данных. реализации должны быть готовы воспринимать пакеты, в которых указан порт отправителя или получателя UDP 4342 в результате смены номера порта системой NAT.

Поле UDP Length отражает размер заголовка UDP и содержимого сообщения LISP. Предполагается, что LISP будет применяться сотрудничающими организациями, взаимодействующими через базовые сети. При внедрении предполагается установка MTU в соответствии с конкретными рекомендациями по развёртыванию для предотвращения фрагментации внутренних пакетов или внешних инкапсулированных пакетов. Для внедрений, где ограничения базовых сетей в части MTU на пути неизвестны, размер сообщения должен ограничиваться 576 байтами для IPv4 и 1280 — для IPv6 с учётом всего пакета IP, как описано в [RFC8085].

Контрольная сумма UDP рассчитывается и устанавливается (не 0) для всех сообщений, передаваемых в порт 4342 или из него. Это должно проверяться при получении и управляющие сообщения с ошибкой контрольной суммы должны отбрасываться [RFC1071].

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

5.1. Типы пакетов управления LISP

В этом параграфе описаны форматы управляющих сообщений LISP и дана сводка назначенных документом кодов LISP Type для IANA. Для полноты в сводку включено сообщение LISP Shared Extension, заданное в [RFC9304]. Определения типов сообщений перечислены в таблице 1.

Таблица 1.

 

Сообщение

Код

Двоичный код

Резерв

0

b’0000′

LISP Map-Request

1

b’0001′

LISP Map-Reply

2

b’0010′

LISP Map-Register

3

b’0011′

LISP Map-Notify

4

b’0100′

LISP Map-Notify-Ack

5

b’0101′

LISP DDT Map-Referral

6

b’0110′

Unassigned

7

b’0111′

LISP Encapsulated Control

8

b’1000′

Не выделены

9-14

b’1001′- b’1110′

LISP Shared Extension

15

b’1111′

 

Разработчикам протколв, экспериментирующим с новыми форматами сообщений, рекомендуется применять тип LISP Shared Extension, описанный в [RFC9304].

Сообщения плоскости управления LISP используют идентификаторы семейств адресов (Address Family Identifier или AFI) [AFN] или канонический формат адресов LISP (LISP Canonical Address Format или LCAF) [RFC8060] для представления адресов с фиксированным или переменным размером. Это включает явные поля в каждом управляющем сообщении или части EID-Record или RLOC-Record в сообщениях с базовым форматом. Сообщения плоскости управления LISP с нераспознанным AFI должны отбрасываться и в системных журнал должна вноситься запись об этом.

Плоскость управления LISP описывает, как другие плоскости данных могут кодировать сообщения для поддержки запросов Map-Request, а также процедур RLOC-Probing.

5.2. Формат сообщения Map-Request

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |Type=1 |A|M|P|S|p|s|R|R|  Rsvd   |L|D|   IRC   | Record Count  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Nonce . . .                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         . . . Nonce                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         Source-EID-AFI        |   Source EID Address  ...     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         ITR-RLOC-AFI 1        |    ITR-RLOC Address 1  ...    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                              ...                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         ITR-RLOC-AFI n        |    ITR-RLOC Address n  ...    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     / |   Reserved    | EID mask-len  |        EID-Prefix-AFI         |
   Rec +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     \ |                       EID-Prefix  ...                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                   Map-Reply Record  ...                       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

1 (Map-Request)

A

Бит полномочий (authoritative) устанавливаемый (1), когда ITR хочет, чтобы Map-Reply возвращал сайт получателя, а не база данных. В ином случае бит сбрасывается (0).

M

Бит map-data-present, установка (1) которого показывает, что в Map-Request включён сегмент Map-Reply Record.

P

Бит зондирования (probe-bit ), указывающий, что сообщение Map-Request должно считаться зондом доступности локатора. Получатель должен отвечать сообщением Map-Reply с установленным (1) битом probe-bit, указывающим, что Map-Reply является откликом на зонд доступности локатора, и копией nonce из Map-Request (см. параграф 7.1. Алгоритм зондирования RLOC). Такое сообщение RLOC-Probe Map-Request недопустимо передавать в Mapping System. Если Map-Resolver или Map-Server получает Map-Request с установленным битом probe-bit, он должен отбросить сообщение.

S

Флаг сообщения Solicit-Map-Request (SMR), см. параграф 6.1. Solicit-Map-Request (SMR).

p

Бит Proxy Ingress Tunnel Router (PITR), устанавливаемый (1) при передаче маршрутизатором PITR сообщения Map-Request. Использование этого бита зависит от развёртывания.

s

Бит вызова SMR, устанавливаемый (1) xTR при передаче Map-Request в ответ на Map-Request на основе SMR.

R

Резервный бит, который должен сбрасываться (0) при передаче, а получатель должен игнорировать его.

Rsvd

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

L

Бит local-xtr, используемый xTR на сайте LISP для указания другим xTR того же сайта, что он является частью RLOC-Set для сайта LISP. Бит L устанавливается (1), когда RLOC является IP-адресом отправителя.

D

Бит dont-map-reply, используемый в процедуре SMR, описанной в параграфе 6.1. Когда xTR передаёт сообщение SMR, ему не требуется возврат Map-Reply. При установленном (1) бите получатель Map-Request не передаёт Map-Reply.

IRC

Это 5-битовое поле служит счётчиком ITR-RLOC Count, который указывает число дополнительных полей (ITR-RLOC-AFI, ITR-RLOC Address) в данном сообщении. Должна кодироваться хотя бы 1 пара (ITR-RLOC-AFI, ITR-RLOC Address). Применяется несколько полей ITR-RLOC Address, поэтому передающая Map-Reply сторона может выбрать адрес получателя для указания в Map-Reply. Значение IRC может быть от 0 до 31, 0 указывает наличие одного адреса ITR-RLOC, 1 — 2 ITR-RLOC и т. д. до 31 для указания 32 адресов ITR-RLOC.

Record Count

Число записей в сообщении Map-Request. Запись состоит из части пакета, помеченной на рисунке выше как Rec, которая повторяется Record Count раз. В этой версии протокола получатель должен воспринимать и обрабатывать сообщения Map-Request с одной или несколькими записями, но отправитель должен передавать Map-Request лишь с одной записью.

Nonce

8-октетное случайное значение, создаваемое отправителем Map-Request, которое будет возвращаться в Map-Reply. Значение nonce служит для идентификации соответствующего Map-Request при получении Map-Reply. Значение должно генерироваться генератором псевдослучайных чисел с подобающей затравкой (seed), например, [RFC4086].

Source-EID-AFI

Семейство адресов для поля Source EID Address.

Source EID Address

EID хоста-источника, создавшего пакет, который вызвал Map-Request. При использовании Map-Request для обновления записи Map-Cache или зондирования RLOC-Probing применяется AFI = 0 и это поле имеет размер 0.

ITR-RLOC-AFI

Семейство адресов для поля ITR-RLOC Address, которое следует за этим полем.

ITR-RLOC Address

Служит для предоставления ETR возможности выбора адреса получателя сообщения Map-Reply из любого семейства. Этот адрес должен быть маршрутизируемым адресом RLOC отправителя сообщения Map-Request.

EID mask-len

Размер маски для EID-Prefix.

EID-Prefix-AFI

Семейство адресов EID-Prefix в соответствии с [AFN] и [RFC8060].

EID-Prefix

Префикс адреса размером 4 октета для IPv4 и 16 октетов для IPv6 при EID-Prefix-AFI со значением 1 или 2, соответственно. Для других AFI [AFN] размер адреса меняется и для LCAF AFI формат задан в [RFC8060]. Если Map-Request передаётся ITR в результате приёма пакета данных для адресата, с которым не связана запись отображения, в качестве EID-Prefix устанавливается IP-адрес получателя пакета данных, а в поле EID mask-len — значение 32 для IPv4 или 128 для IPv6. Когда xTR хочет запросить у сайта статус отображения, которое уже кэшировано, EID-Prefix в Map-Request имеет такой же размер маски, что и префикс EID-Prefix, возвращённый сайтом при отправке сообщения Map-Reply.

Map-Reply Record

При установленном (1) бите M это поле содержит размер одной записи (Record) в формате Map-Reply. Эта запись Map-Reply содержить отображение EID на RLOC, связанное с EID источника. Это позволяет ETR, получившему этот Map-Request, кэшировать данные по своему усмотрению. Важно отметить, что это отображение Mapping System не проверяет.

5.3. Сообщение EID-RLOC UDP Map-Request

ITR передаёт Map-Request, когда ему нужно отображение для EID, проверка доступности RLOC или обновление отображения до завершения срока действия (Time to Live или TTL). В первом случае IP-адресрм получателя Map-Request является адрес получателя пакета (EID получателя), который не удалось найти в кэше отображений. В двух других случаях IP-адресом получателя Map-Request является один из адресов RLOC из Locator-Set записи Map-Cache. Адресом отправителя является адрес IPv4 или IPv6 RLOC в зависимости использования в Map-Request заголовка IPv4 или IPv6. Во всех случаях номер порта UDP у источника для сообщения Map-Request является 16-битовым значением, выбранным ITR/PITR, а для порта отправителя UDP устанавливается общеизвестный номер 4342. Получение Map-Reply с nonce, соответствующим nonce в остающемся Map-Request, будет обновлять кэшированный набор RLOC, связанных с EID-Prefix.

ITR должен указать в Map-Request одно или несколько полей (ITR-RLOC-AFI, ITR-RLOC Address). Число полей за вычетом 1 должно указываться в поле IRC. ITR может включить в этот список все локально настроенные локаторы или указать 1 Routing Locator Address для каждого поддерживаемого семейства адресов. Если ITR по ошибке не указал адресов ITR-RLOC, передающая Map-Reply сторона должна отбросить Map-Request.

Сообщения Map-Request можно инкапсулировать в LISP с использованием порта получателя UDP 4342 и LISP Type Encapsulated Control Message при передаче от ITR к Map-Resolver. Точно так же сообщения Map-Request инкапсулируются в LISP при передаче от Map-Server в ETR. Подробности представлены в параграфе 5.8.

Частота передачи Map-Request должна ограничиваться 1 сообщением в секунду на EID-Prefix. После 10 повторов без получения Map-Reply, отправитель должен установить паузу в 30 секунд.

ITR, настроенный со сведениями из базы отображений (т. е., являющийся также ETR), может включать эти отображения в Map-Request. Когда ETR, настроенный на восприятие и проверку таких (piggybacked) данных отображения, получает такой Map-Request и не имеет отого отображения в Map-Cache, он должен инициировать проверочное сообщение Map-Request через базу данных отображений.

5.4. Формат сообщения Map-Reply

        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=2 |P|E|S|          Reserved               | Record Count  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Nonce . . .                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         . . . Nonce                           |
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   |                          Record TTL                           |
   |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
   e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   c   | Rsvd  |  Map-Version Number   |       EID-Prefix-AFI          |
   o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   r   |                          EID-Prefix                           |
   d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
   | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | o |        Unused Flags     |L|p|R|           Loc-AFI             |
   | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  \|                             Locator                           |
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

2 (Map-Reply)

P

Бит зондирования (probe-bit ), указывающий, что сообщение Map-Reply является откликом на Map-Request зондирования доступности локатора должно считаться зондом доступности локатора. Поле Nonce должно отвечать сообщением Map-Reply с установленным (1) битом probe-bit, указывающим, что Map-Reply является содержать копию nonce из исходного Map-Request (см. параграф 7.1. Алгоритм зондирования RLOC). При установленном (1) флаге probe-bit в сообщении Map-Reply бит A в каждой записи EID-Record, включённой в сообщение, должен иметь значение 1, в противном случае сообщение должно просто отбрасываться.

E

Указывает, что ETR, передающий это сообщение Map-Reply, анонсирует поддержку на сайте алгоритма проверки доступности локаторов Echo-Nonce (см. параграф 10.1 в [RFC9300]).

S

Бит защиты (Security), при установке (1) которого добавляется показанные ниже сведения в конце Map-Reply (см. [RFC9303]).
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    AD Type    |       Authentication Data Content . . .       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Reserved

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

Record Count

Число записей в отклике. Запись состоит из части пакета, помеченной на рисунке выше как Record, которая повторяется Record Count раз. Отметим, что число записей в отклике может превышать число записей в запросе, например, при наличии более конкретных префиксов.

Nonce

64-битовое значение из Map-Request, копируемое в Map-Reply.

Record TTL

Число минут, в течение которых получатель Map-Reply может сохранять отображение. Значение 0xffffffff позволяет получателю самому определять срок хранения.

Locator Count

Число записей элементов Locator в данной записи Record. Элемент для локатора представляет собой часть, помеченную на рисунке выше как Loc. Счётчик может иметь значение 0, указывающее отсутствие локаторов для EID-Prefix.

EID mask-len

Размер маски для EID-Prefix.

ACT

3-битовое поле, описывающее действия Negative Map-Reply. В сообщениях иного типа устанавливается 0, а при получении роле игнорируется. Эти биты используются, когда поле Locator Count имеет значение 0. Биты действий указываются в сообщениях Map-Reply и говорят ITR или PITR причину возврата пустого Locator-Set системой отображения и влияние отклика на Map-Cache (см. 12.3. Коды LISP Map-Reply EID-Record Action).
  1. No-Action — Map-Cache сохраняется, инкапсуляции пакета не происходит.
  2. Natively-Forward — пакет не инкапсулируется и не отбрасывается, а пересылается обычным способом.
  3. Send-Map-Request — создаётся запись Map-Cache и помечается так, чтобы любой пакет, который соответствует ей, вызывал отправку Map-Request.
  4. Drop/No-Reason — пакет, соответствующий этой записи Map-Cache, отбрасывается, при этом следует передавать сообщение ICMP Destination Unreachable.
  5. Drop/Policy-Denied — пакет, соответствующий этой записи Map-Cache, отбрасывается. Причина заключается в том, что Map-Request для целевого EID отвергнут правилами xTR или Mapping System.
  6. Drop/Auth-Failure — пакет, соответствующий этой записи Map-Cache, отбрасывается. Причина заключается в том, что запрос Map-Request для целевого EID не прошёл проверку подлинности в xTR или Mapping System.

A

Бит полномочий (authoritative), который может устанавливать (1) только ETR. Серверу Map-Server, создающему сообщения Map-Reply как посреднику, недопустимо устанаваливать A = 1. Этот бит указывает запрашивающим ITR, исходит ли Map-Reply от узла LISP на сайте, владеющем EID-Prefix.

Map-Version Number

12-битовое поле номера версии отображения в EID-Record сообщения Map-Reply (см. [RFC9302]).

EID-Prefix-AFI

Семейство адресов EID-Prefix в соответствии с [AFN] и [RFC8060].

EID-Prefix

4-октетный префикс для семейства адресов IPv4 или 16-октетный для IPv6.

Priority

Для каждого RLOC устанавливается значение Priority, меньшее значение указывает более высокий приоритет. Когда у нескольких RLOC значения Priority совпадают, их можно применять для распределения нагрузки. Значение 255 указывает, что RLOC недопустимо использовать для пересылки индивидуальных пакетов.

Weight

При совпадении приоритета у нескольких RLOC значение Weight задаёт долю индивидуального трафика между ними. Вес кодируется как относительная доля unicast-пакетов, соответствующих записи отображения. Например, при наличии в Locator-Set 4 локаторов с Weight 30, 20, 20 и 10 первый локатор получит 37,5% трафика, второй и третий — по 25%, а четвёртый — 12,5%. Если все значения Weight для Locator-Set совпадают, получатель Map-Reply сам принимает решение о распределении трафика. В разделе 12 [RFC9300] предложен алгоритм хэширования для распределения трафика между локаторами с одинаковыми значениями Priority и Weight.

M Priority

Для каждого RLOC назначается групповой приоритет, используемый ETR на принимающем multicast-трафик сайте для выбора ITR на групповом сайте-источнике при построении деревьев распространения группового трафика. Значение 255 указывает, что RLOC недопустимо использовать для присоединения к multicast-дереву (см. [RFC6831]).

M Weight

При совпадении приоритета у нескольких RLOC значение Weight задаёт распределение трафика при построении multicast-дерева с несколькими ITR. Вес указывает относительную долю (как unicast Weight) от общего числа деревьев, строящихся к сайту-источнику, заданному EID-Prefix. Если все веса в Locator-Set совпадают, получатель Map-Reply будет сам распределять групповой трафик между ITR (см. [RFC6831]).

Unused Flags

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

L

Установка этого бита помечает локатор как локальный для ETR, передающего Map-Reply. Когда Map-Server служит посредником для Map-Reply сайта LISP, бит L сбрасывается (0) для всех локаторов этого Locator-Set.

p

Когда этот бит установлен, ETR информирует маршрутизатор ITR, передающий RLOC-Probe, о том, что адрес локатора маршрутизации, для которого этот бит установлен, является одним из проверяемый с помощью RLOC-Probe и может отличаться от адреса отправителя Map-Reply. ITR, использующий RLOC-Probe для конкретного локатора, должен использовать этот Locator для извлечения структуры данных, служащей для хранения факта достижимости этого локатора. Бит p устанавливается для одного локатора в одном Locator-Set. Если реализация по ошибке установит несколько флагов p, получатель Map-Reply должен выбирать первый локатор с установленным битом p. Флаг p недопустимо устанавливать для записей Locator-Set, передаваемых в сообщениях Map-Request и Map-Register.

R

Устанавливается, когда отправитель Map-Reply имеет маршрут к локатору в записи данных Locator. Этому получателю может быть полезно знать, активен (up) ли локатор, с точки зрения получателя (не обязательно достижим).

Locator

Адрес IPv4 или IPv6 (в соответствии с полем Loc-AFI), назначенный ETR и используемый ITR в качестве RLOC получателя во внешнем заголовке пакета с инкапсуляцией LISP. Отметим, что RLOC получателя в пакете с инкапсуляцией LISP может быть anycast-адресом, равно как RLOC отправителя пакета с инкапсуляцией LISP. В качестве RLOC отправителя или получателя недопустимо применять широковещательный адрес (255.255.255.255 или иной широковещательный адрес подсети, известный маршрутизатору) и ему недопустимо быть групповым адресом link-local. В качестве RLOC отправителя недопустим групповой адрес. Для RLOC получателя следует указывать групповой адрес, если он сопоставлен с групповым EID получателей.

Частота передачи сообщений Map-Reply должна ограничиваться и рекомендуется передавать Map-Reply с одним RLOC получателя не чаще 1 раза за три секунды.

Формат Record, указанный здесь, включая определения всех полей, применяется в сообщениях Map-Reply и Map-Register.

5.5. Сообщение EID-RLOC UDP Map-Reply

Map-Reply возвращает EID-Prefix с размером маски не более запрошенного EID из поля адреса получателя в заголовке IP пакета Data-Probe или EID записи Map-Request. RLOC в Map-Reply являются маршрутизируемыми адресами IP всех ETR для сайта LISP. Каждый RLOC сообщает статус своей доступности, но не сообщает статус доступности пути с точки зрения запрашивающего, поэтому для пути нужна отдельная проверка (см. 7.1. Алгоритм зондирования RLOC).

Отметим, что в Map-Reply может использоваться детализация EID-Prefix (префикс и размер маски), отличающаяся от указанной в вызвавшем отклик сообщении Map-Request. Это может быть обусловлено отправкой Map-Request для префикса, возвращённого в предшествующем Map-Reply. В таком случае запрашивающий обновляет свой кэш новыми сведениями для префикса. Например, запрашивающий с двумя кэшированными EID-Prefix, охватываемыми Map-Reply с менее конкретным префиксом, заменяет свою запись этим менее конкретным EID-Prefix. Отметим, что возможна и обратная ситуация с включением нескольких более конкретных префиксов без удаления менее конкретного, поскольку при поиске возвращается более конкретный префикс.

При переносе EID за пределы сайта LISP [EID-MOBILITY], в базе данных Mapping System могут возникать перекрывающиеся EID-Prefix. Аналогичная ситуация может возникать при настройке на сайте LISP нескольких наборов ETR, поддерживающих различные размеры масок EID-Prefix. При перекрытии EID-Prefix сообщение Map-Request для EID должно возвращать EID-Prefix с максимальным соответствием в сообщении Map-Reply. Например, если ETR имеет записи отображений для EID-Prefix

     2001:db8::/32
     2001:db8:1::/48
     2001:db8:1:1::/64
     2001:db8:1:2::/64

Map-Request для EID 2001:db8:1:1::1 будет приводить к получению Map-Reply с одной записью EID-Prefix 2001:db8:1:1::/64. Map-Request для EID 2001:db8:1:5::5 будет возвращать Map-Reply с 3 записями для EID-Prefix 2001:db8:1::/48, 2001:db8:1:1::/64, 2001:db8:1:2::/64, заполняя /48 более конкретными префиксами из Mapping System.

Отметим, что возвращать требуется не все перекрывающиеся EID-Prefix, а лишь более конкретные (во втором примере выше префикс 2001:db8::/32 не был возвращён для запроса EID 2001:db8:1:5::5) для EID-Prefix из запроса EID. При возврате более одного EID-Prefix для всех следует использовать одно значение TTL, чтобы срок их действия завершался одновременно. При получении позднее более конкретного EID-Prefix его значение TTL в записи Map-Reply может быть сохранено даже при наличии менее конкретных записей. При получении позднее менее конкретного EID-Prefix время завершения Map-Cache следует установить в соответствии с минимальным временем завершения более конкретного EID-Prefix в Map-Cache. Это делается для сохранения целостности набора EID-Prefix, чтобы из Map-Cache не удалялись более конкретные записи при сохранении менее конкретных.

Предполагается, что с точки зрения расширяемости агрегирование адресов EID в префиксы EID-Prefixes позволит одному сообщению Map-Reply соответствовать отображению адресов EID в диапазоне префиксов, снижая число сообщений Map-Request.

Записи Map-Reply могут включать пустой набор Locator-Set. Сообщение Negative Map-Reply — это Map-Reply с пустым Locator-Set. Такие сообщения Map-Reply передают специальные действия отправителя Map-Reply маршрутизаторам ITR и PITR, которые запросили Map-Reply. Имеется два основных применения Negative Map-Reply. Во-первых, Map-Resolver указывает ITR или PITR, когда адресат является сайтом LISP (в отличие от прочих), а во-вторых, для подавления источников Map-Request, передающих невыделенные EID.

Для каждой записи Map-Reply список локаторов в Locator-Set должен сортироваться в порядке роста адресов IP, при этом адреса IPv4 считаются численно меньшими по сравнению с адресами IPv6.

При передаче сообщения Map-Reply адрес получателя копируется из одного из полей ITR-RLOC в Map-Request. ETR может выбрать адрес локатора маршрутизации одного из семейств адресов, которые он поддерживает. Для Data-Probe адрес получателя Map-Reply копируется из поля отправителя сообщения Data-Probe, вызвавшего отклик. Адресом отправителя Map-Reply является один из локальных адресов IP, это позволяет применять индивидуальную проверку пересылки по обратному пути (Unicast Reverse Path Forwarding или uRPF) для восходящего поставщика услуг. Порт получателя Map-Reply копируется из поля порта отправителя сообщения Map-Request или Data-Probe, а для порта отправителя Map-Reply устанавливается стандартное значение UDP 4342.

5.6. Формат сообщения Map-Register

Ф этот параграфе задан формат кодирования сообщений Map-Register. Сообщения передаются в порт UDP 4342 из выбранного случайно порта UDP.

Показанные ниже поля применяются в нескольких типах сообщений и определены для Map-Register, Map-Notify, Map-Notify-Ack.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |Type=3 |P|S|I|        Reserved       |E|T|a|R|M| Record Count  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Nonce . . .                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         . . . Nonce                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |    Key ID     | Algorithm ID  |  Authentication Data Length   |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       ~                     Authentication Data                       ~
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   |                          Record TTL                           |
   |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
   e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   c   | Rsvd  |  Map-Version Number   |        EID-Prefix-AFI         |
   o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   r   |                          EID-Prefix                           |
   d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
   | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | o |        Unused Flags     |L|p|R|           Loc-AFI             |
   | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  \|                             Locator                           |
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

3 (Map-Register)

P

Флаг посредника для Map-Reply. Установка (1) флага показывает, что ETR, передавший Map-Register, запросил у Map-Server посредничество для Map-Reply. Map-Server передаёт неполномочные Map- Reply от имени ETR.

S

Бит поддержки защиты, установка (1) которого включает поддержку процедур [RFC9303].

I

Бит присутствия идентификатор, установка (1) которого показывает наличие 128-битового поля xTR-ID и 64-битового Site-ID в конце сообщения Map-Register. Если xTR настроен с xTR-ID и Site-ID, он должен устанавливать I=1 и включать свои xTR-ID и Site-ID в создаваемые сообщения Map-Register. Комбинация Site-ID и xTR-ID однозначно указывает xTR в домене LISP и служит для отслеживания его последнего nonce.

Reserved

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

E

Бит уведомления EID Map-Register, используемый первым (First-Hop) маршрутизатором, обнаружившим динамический адрес EID. Это сообщение Map-Register на основе EID-notify передаётся первым маршрутизатором xTR того же сайта, распространяющему Map-Register в Mapping System. Сайт xTR сохраняет состояние последнего Map-Notify первого маршрутизатора после удаления EID (см. подробности применения в [EID-MOBILITY]).

T

Флаг использования TTL для тайм-аута. Установка (1) флага указывает, что xTR хочет, чтобы Map-Server прерывал регистрацию на основе значения поля Record TTL в этом сообщении. В ином случае применяется заданный по умолчанию тайм-аут (8.2. Настройка EID-Prefix и регистрация ETR).

a

Бит слияния, установка (1) которого показывает, что xTR запрашивает слияние записей RLOC-Record от разных xTR, регистрирующих одну и ту же запись EID-Record (см. пример использования в [RFC8378]).

R

Резервный бит, который должен сбрасываться (0) при передаче, а получатель должен игнорировать его.

M

Бит want-map-notify, установка (1) которого показывает, что ETR запрашивает возврат сообщения Map-Notify в ответ на Map-Register. Сообщение Map-Notify от Map-Server служит подтверждением приёма Map-Register.

Record Count

Число записей в Map-Register. Запись состоит из части пакета, помеченной на рисунке выше как Record, которая повторяется Record Count раз.

Nonce

Это 8-октетное поле Nonce инкрементируется при каждой отправке сообщения Map-Register. При запросе подтверждения Map-Register значение nonce серверы Map-Server возвращают в сообщениях Map-Notify. Поскольку проверяется подлинность всего сообщения Map-Register, поле Nonce служит для защиты от атак с повторным использованием Map-Register (replay). ETR при регистрации в Mapping System следует сохранять последнее значение nonce в постоянном хранилище, чтобы при перезапуске можно было продолжать использование инкрементируемых nonce. Если ETR не может сохранять nonce, то при перезапуске он должен использовать новый ключ аутентификации для регистрации в Mapping System. Map-Server должен отслеживать и записывать в постоянное хранилище последнее значение nonce, принятое для каждой пары ETR xTR-ID и ключа. При получении Map-Register со значением nonce, которое не превышает сохранённое значение сервер должен отбрасывать сообщение Map-Register и следует записывать это в системный журнал, как возможную replay-атаку.

Key ID

Значение key-id, указывающее заранее распространённый секрет для ETR и Map-Server. Ключи для каждого сообщения выводятся из этого секрета для аутентификации источника и защиты целостности Map-Register. Key ID позволяет менять заранее распространённые секреты без нарушения работы. Секрет должен быть уникальным для каждого LISP Site-ID.

Algorithm ID

Указывает алгоритмы функции вывода ключа (Key Derivation Function и KDF) и кода аутентификации сообщений (Message Authentication Code или MAC), применяемые для создания ключа и расчёта данных аутентификации (Authentication Data) для Map-Register. Это 8-битовое поле указывает пару KDF и алгоритма MAC, возможные значения указаны в параграфе 12.5. Номера LISP Algorithm ID.

Authentication Data Length

Число октетов следующего поля Authentication Data. Размер Authentication Data зависит от применяемого алгоритма MAC. Это поле позволяет корректно анализировать пакет устройству, не знающему алгоритм MAC.

Authentication Data

Вывод алгоритма MAC, помещаемый после расчёта, описанного ниже.
  1. Алгоритм KDF указывается полем Algorithm ID в соответствии с таблицей 5. Реализации этой спецификации должны поддерживать HMAC-SHA-256-128 [RFC4868] и следует поддерживать HMAC-SHA-256-128+HKDF-SHA256 [RFC5869].
  2. Алгоритм MAC указывается полем Algorithm ID в соответствии с таблицей 5.
  3. Выводится ключ для сообщения из заранее распространённого секрета, указанного PSK[Key ID].
  4. Ключ для сообщения выводится как per-msg-key=KDF(nonce+PSK[Key ID],s), где nonce — значение поля Nonce из Map-Register, + означает конкатенацию, а s (salt) указывает строку, соответствующую типу аутентифицируемого сообщения. Для Map-Register это Map-Register Authentication, для Map-Notify и Map-Notify-Ack — Map-Notify Authentication и Map-Notify-Ack Authentication, соответственно. Для Algorithm ID, из таблицы 5, задающих для KDF значение none, ключ сообщения создается как per-msg-key = PSK[Key ID]. Это означает использование одного ключа для разных сообщений протокола.
  5. Вывод MAC рассчитывается с применением алгоритма MAC и ключа для сообщения ко всему содержимому (payload) сообщения Map-Register (начиная с поля типа сообщения LISP до конца последней записи RLOC-Record). Для поля данных аутентификации при расчёте принимается значение 0.

Определения оставшихся полей Map-Register приведены в описании EID-Record (5.4. Формат сообщения Map-Reply). При установленном (1) бите I в конец сообщения Map-Register добавляются указанные ниже поля.

xTR-ID

128-битовое поле в конце сообщения Map-Register вслед за последним полем Record. xTR-ID служит для однозначного указания xTR и недопустимо применять 1 значение для разных xTR в области действия Site-ID.

Site-ID

64-битовое поле в конце сообщения Map-Register вслед за xTR-ID. Site-ID служит для однозначного указания сайта, к которому относится xTR, передающий сообщение. Этот документ не задаёт смысл поля Site-ID строго. Неформально оно указывает группу xTRs, как-то связанных между собой административно, топологически или иначе.

5.7. Формат сообщений Map-Notify и Map-Notify-Ack

This section specifies the encoding format for the Map-Notify and Map-Notify-Ack messages. The messages are sent inside a UDP packet with source and destination UDP ports equal to 4342.

The Map-Notify and Map-Notify-Ack message formats are:

        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=4/5|             Reserved                 | Record Count  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Nonce . . .                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         . . . Nonce                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |    Key ID     | Algorithm ID  |  Authentication Data Length   |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       ~                     Authentication Data                       ~
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   |                          Record TTL                           |
   |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
   e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   c   | Rsvd  |  Map-Version Number   |         EID-Prefix-AFI        |
   o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   r   |                          EID-Prefix                           |
   d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
   | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | o |        Unused Flags     |L|p|R|           Loc-AFI             |
   | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  \|                             Locator                           |
   +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

4/5 (Map-Notify/Map-Notify-Ack)

Сообщения Map-Notify по составу содержимого совпадают с Map-Register. Описания полей приведены в параграфе 5.6. Формат сообщения Map-Register, а описания EID-Record и RLOC-Record — в 5.4. Формат сообщения Map-Reply.

Поля Map-Notify копируются из соответствующего сообщения Map-Register для подтверждения корректной обработки. В Map-Notify поле Authentication Data рассчитывается заново с использованием соответствующего ключа сообщения по процедуре, описанной в предыдущем параграфе. Сообщения Map-Notify могут передаваться без запроса, но это выходит за рамки документа (см. [LISP-PUBSUB]).

Если после отправки Map-Register сообщение Map-Notify не было получено в течение 1 секунды, передающая сторона должна повторять передачу исходного Map-Register с экспоненциально растущим интервалом повтора (с базой 2, т. е. удвоением интервала перед каждым повтором) вплоть до 1 минуты. Сообщения Map-Notify передаются лишь при получении Map-Register с установленным флагом M и не повторяются. Единственным исключением являются незапрошенные сообщения Map-Notify (см. ниже).

Map-Server передаёт незапрошенное сообщение Map-Notify (т. е. не являющееся подтверждением Map-Register) лишь в соответствии с параграфами 3.1 и 3.3 в [RFC8085]. Передача Map-Notify повторяется, пока Map-Server не получит Map-Notify-Ack с тем же nonce, что и в сообщении Map-Notify. Реализациям следует повторять передачу до 3 раз с интервалом 3 секунды, после чего интервал повтора следует экспоненциально увеличивать (вдвое при каждом следующем повторе) до 3 раз. Сообщения Map-Notify-Ack передаются лишь при получении незапрошенного Map-Notify и не повторяются.

Содержимое Map-Notify-Ack совпадает с содержимым Map-Notify. Сообщение служит подтверждением приёма незапрошенного Map-Notify и, поскольку Authentication Data проверяются, позволяет отправителю остановить повтор Map-Notify с теми же nonce и (проверенными) Authentication Data. Поля Map-Notify-Ack копируются из соответствующего Map-Notify для подтверждения корректной обработки. Поле Authentication Data рассчитывается заново с использованием соответствующего ключа сообщения по процедуре, описанной в предыдущем параграфе.

При получении Map-Register, Map-Notify или Map-Notify-Ack получатель проверяет Authentication Data и при отказе отбрасывает сообщение без дальнейшей обработки.

5.8. Формат инкапсулированного управляющего сообщения

Инкапсулированные управляющие сообщения (Encapsulated Control Message или ECM) применяются для инкапсуляции пакетов управления, передаваемых между xTR и системой отображения.

        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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     / |                     Заголовок IPv4 или IPv6                   |
   OH  |                        (с адресами RLOC)                      |
     \ |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     / |       Source Port = xxxx      |       Dest Port = 4342        |
   UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     \ |           UDP Length          |        UDP Checksum           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  LISP |Type=8 |S|D|R|R|            Reserved                           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     / |                     Заголовок IPv4 или IPv6                   |
   IH  |                    (с адресами RLOC или EID)                  |
     \ |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     / |       Source Port = xxxx      |       Dest Port = yyyy        |
   UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     \ |           UDP Length          |        UDP Checksum           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   LCM |                      LISP Control Message                     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

OH

Внешний заголовок IPv4 или IPv6 с адресами RLOC в полях отправителя и получателя.

UDP

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

LISP

Тип 8, определённый для инкапсулированных управляющих сообщений LISP, за которым (в зависимости от 4 битов перед полем Reserved) следует заголовок IPv4/IPv6 или поле Authentication Data [RFC9303], если установлен флаг S (см. ниже).

Type

8 (Encapsulated Control Message (ECM))

S

Бит защиты (Security), установка (1) которого указывает, что поле Reserved имеет показанный ниже формат Authentication Data и следует процедурам [RFC9303].
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    AD Type    |       Authentication Data Content . . .       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

D

Бит DDT, установка (1) которого указывает, что отправитель запрашивает возврат сообщения Map-Referral (см. [RFC8111]).

R

Резервный бит, который должен сбрасываться (0) при передаче, а получатель должен игнорировать его.

IH

Внутренний заголовок IPv4 или IPv6 с адресами RLOC или EID в полях отправителя и получателя. При инкапсуляции в этот формат сообщения Map-Request адресом получателя в этом заголовке является EID.

UDP

Внутренний заголовок UDP, в котором назначение портов зависит от инкапсулируемого пакета управления. Для пакетов Map-Request и Map-Register порт отправителя выбирает ITR/PITR, а порто получателя служит 4342. Для Map-Reply указывается порт отправителя 4342 а порт получателя берётся из вызвавшего сообщение пакета Map-Request. Значение 4341 недопустимо указывать для любого из портов. Поле контрольной суммы должно быть ненулевым.

LCM

Формат одного из управляющих сообщений, описанных в разделе 5. Сообщения Map-Request разрешено инкапсулировать в ECM. При передаче Map-Request как RLOC-Probe (probe-bit установлен) недопустимо помещать сообщение в ECM. Сообщения PIM Join/Prune [RFC6831] можно инкапсулировать в ECM.

6. Изменение содержимого отображений EID-RLOC

В архитектуре LISP маршрутизатор ITR и PITR применяют Map-Cache для хранения отображений EID-RLOC для пересылки. Когда ETR обновляет отображение, нужен механизм информирования ITR и PITR об изменении.

Плоскость данных LISP определяет несколько механизмов для обновления сопоставлений [RFC9300]. Этот документ задаёт механизм плоскости управления Solicit-Map-Request (SMR). Другие механизмы плоскости управления на основе подписки и выталкивания описаны в [LISP-PUBSUB].

6.1. Solicit-Map-Request (SMR)

Запрос сообщений Map-Request обеспечивает ETR селективный способ управлять на сайте скорстью получения запросов на сообщения Map-Reply. SMR также информируют все удалённые ITR для обновления кэшированных записей.

Поскольку ETR не обязаны отслеживать удалённые ITR, которые кэшируют их отображения, они не знают, каким ITR нужно обновлять отображение. Поэтому ETR запрашивает Map-Request у тех сайтов, которым он передавал инкапсулированные в LISP пакеты данных за последнюю минуту. При работе ETR и в качестве ITR он передаёт SMR маршрутизаторам ITR, которым он недавно передавал инкапсулированные данные.

Сообщение SMR является просто Map-Request с установленным флагом S (5.2. Формат сообщения Map-Request). ITR и PITR будут передавать Map-Request (вызванные SMR) при получении SMR. Хотя SMR передаются через плоскость данных, вызванные ими Map-Request должны передаваться через Mapping System (не напрямую).

Отправитель SMR и отвечающая сторона должны ограничивать скорость передачи сообщений. Отправителю SMR рекомендуется ограничивать частоту передачи для одного RLOC получателя 1 пакетом каждые 3 секунды. Отвечающему рекомендуется передавать не более 1 Map-Request за каждые 3 секунды для одного EID-Prefix.

Когда ITR получает сообщение SMR, для которого у него нет кэшированного отображения для EID из SMR, ему не следует передавать вызванное SMR сообщение Map-Request. Это может возникать в случае, когда ETR передаёт SMR всем локаторам из Locator-Set, сохранённого в его Map-Cache, а удалённые ITR, получающие SMR, могут не передавать данных на сайт. Нет смысла обновлять ITR, пока им не нужно ничего передавать, а перед передачей можно отправить Map-Request для получения записи.

7. Доступность локаторов маршрутизации

Этот документ задаёт несколько механизмов плоскости управления для проверки доступности RLOC. В [RFC9300] определены механизмы проверки доступности в плоскости данных.

  1. ITR может получать сообщения ICMP Network Unreachable или Host Unreachable для используемых RLOC, указывающие недоступность адреса. Отметим, что сообщениям ICMP не всегда можно доверять, но игнорировать их полностью не следует. Реализациям рекомендуется следовать основанной на опыте трактовке таких сообщений, описанной в [OPSEC-ICMP-FILTER].

  2. При участии ITR в протоколе маршрутизации базовой сети, он может определить недоступность RLOC по отсутствию в базе маршрутных сведений (Routing Information Base или RIB) записи для IP-адреса RLOC.

  3. ITR может получить от целевого хоста сообщение ICMP Port Unreachable. Это может происходить при использовании ITR взаимодействия [RFC6832] с передачей пакетов LISP сайту, не поддерживающему LISP.

  4. ITR может получить отклик Map-Reply от ETR в ответ на переданое сообщение Map-Request. RLOC источника Map-Reply вероятно будет активен (up), поскольку ETR удалось передать Map-Reply маршрутизатору ITR. Следует отметить, что в некоторых случаях значение RLOC из внешнего заголовка может быть подменено.

  5. Пара ITR — ETR может использовать описанный ниже механизм зондирования RLOC-Probing.

Когда ITR получают сообщения ICMP Network Unreachable или Host Unreachable как метод определения недоступности, они будут воздерживаться от использования локаторов из списков сообщений Map-Reply. Однако такой подход ненадёжен, поскольку многие сетевын оператору отключают генерацию сообщений ICMP Destination Unreachable.

Если ITR получает сообщение ICMP Network Unreachable или Host Unreachable, он может создать своё сообщение ICMP Destination Unreachable для хоста, создавшего пакет данных, инкапсулированный ITR.

Это допущение создаёт зависимость — недоступность локатора обнаруживается получением сообщений ICMP Host Unreachable. Когда Locator считается недоступным, он не используется для активного трафика, как будто был указан в Map-Reply с Priority = 255.

ITR может проверить доступность локатора, периодически отправляя Map-Request. Частота отправки сообщений Map-Request и Map-Reply должна ограничиваться (см. 5.3. Сообщение EID-RLOC UDP Map-Request и 5.4. Формат сообщения Map-Reply). Тестирование доступности локаторов никогда не выполняется с пакетами данных, поскольку это повышает риск потерь для сквозных сессий.

7.1. Алгоритм зондирования RLOC

RLOC-Probing — это метод, который ITR и PITR могут применять для определения статуса доступности одного или нескольких локаторов в записи Map-Cache. Для этого служит флаг probe-bit в сообщениях Map-Request и Map-Reply.

RLOC-Probing выполняется в плоскости управления по таймеру, а ITR или PITR передаёт Map-Request для адреса локатора с одного из свойих адресов RLOC. Map-Request в качестве RLOC-Probe не инкапсулируется и не передаются Map-Server или базе данных отображений как при запросе отображения. EID-Record в Map-Request является EID-Prefix из записи Map-Cache на ITR или PITR. ITR может включить запись данных отображения из своих сведений о сопоставлениях, содержащую локальные EID-Prefix и RLOC для сайта. RLOC-Probe передаются периодически с внесением вариаций в интервал отправки.

Когда ETR получает Map-Request с установленным флагом probe-bit, он возвращает Map-Reply с таким же флагом. В качестве адреса отправителя Map-Reply указывается IP-адрес исходящего интерфейса, на который маршрутизируется адрес получателя Map-Reply. В Map-Reply следует включать данные отображения для EID-Prefix из Map-Request. Это позволяет ITR и PITR передавать RLOC-Probe для получения обновлений отображений, если они возникли с записях базы сопоставлений ETR.

Метод RLOC-Probing имеет преимуществ и недостатки. Основным преимуществом является возможность работы при разных отказах, что позволяет ITR определить, когда путь к конкретному локатороу достпен или стал недоступным, обеспечивая надёжный способ переключения на другой локатор. RLOC-Probing может также давать приблизительную оценку времени кругового обхода (Round-Trip Time или RTT) между парой локаторов, что может быть полезно для функций управления сетью, а также для выбора пути с меньшей задержкой. Основным недостатком RLOC-Probing является большое число управляющих сообщений и расход пропускной способности для получения упомянутых преимущест, особенно при жёстких требованиях в времени обнаружения отказов.

8. Взаимодействие с другими компонентами LISP

8.1. Распознавание отображения ITR EID-RLOC

На ITR настраивается 1 или несколько адресов Map-Resolver, которые служат локаторами (RLOC) и должны быть маршрутизируемыми в базовой сети ядра. Для этих адресов недопустимо требовать распознавания через отображения LISP EID-RLOC, поскольку это будет создавать циклические зависимости. При использовании Map-Resolver маршрутизатору ITR не требуется соединение с другими базами данных Mapping System.

ITR передаёт инкапсулированный Map-Request настроенному Map-Resolver, когда еиу нужно отображение EID-RLOC, отсутствующее в его локальном Map-Cache. Использование Map-Resolver силь сокращает сложности реализации ITR и издержки, связанные с его работой.

В ответ на инкапсулированное сообщение Map-Request маршрутизатор ITR может получить один из указанных ниже вариантов.

  • Незамедлительный отклик Negative Map-Reply (с кодом действия Natively-Forward и 15-минутным TTL) от Map-Resolver, если тот может определить, что запрошенного EID не существует. ITR сохраняет EID-Prefix, возвращённый в Map-Reply в своём кэше, помечает его как не поддерживающий LISP и знает, что не нужно пытаться инкапсулировать в LISP пакеты для этого префикса.

  • Negative Map-Reply (с кодом действия Natively-Forward) от Map-Server, полномочного (внутри развёртывания LISP, см. параграф 1.1. Сфера применимости) для EID-Prefix, соответствующего запрошенному EID, но не имеющего активно зарегистрированного более конкретного EID-Prefix. В этом случае говорят, что запрошенный EID соответствует «дыре» (hole) в полномочном префиксе. Если запрошенный EID соответствует более конкретному EID-Prefix, чем был делегирован серверу Map-Server, для которого не зарегистрировано ETR, возврашается 1-минутное значение TTL. Если запрошенный EID соответствует неделегированной части полномочного EID-Prefix, это не LISP EID и возвращается 15-минутное значение TTL. Подробное обсуждение делегирования EID-Prefix и детали сопоставления префиксов в Map-Server рассмотрены в параграфе 8.2. Настройка EID-Prefix и регистрация ETR.

  • LISP Map-Reply от ETR, владеющего отображением EID-RLOC, или от Map-Server, отвечающего от имени ETR. Более подробно обработка сообщений в Map-Resolver описана в параграфе 8.4. Обработка в Map-Resolver.

Отметим, что ITR можно настроить как на использование Map-Resolver, так и на участие в логической сети LISP-ALT. В такой ситуации ITR следует передавать Map-Request через сеть ALT для любого EID-Prefix, полученного от ALT BGP. Такая конфигурация предполагается очень редкой, так как от применения Map-Resolver мало пользы, если ITR уже применяет LISP-ALT. Например, такому ITR не требуется передавать Map-Request для возможно несуществующего EID (и полагаться на Negative Map-Reply), если он может обратиться к базе данных ALT для проверки наличия EID-Prefix до отправки Map-Request.

8.2. Настройка EID-Prefix и регистрация ETR

ETR публикует свои EID-Prefix на Map-Server, передавая сообщения LISP Map-Register. Сообщения Map-Register включает данные аутентификации (AD), поэтому перед их отправкой ETR и Map-Server должны получить общий секрет, используемый для вывода ключей аутентификации Map-Register. В конфигурацию Map-Server следует также включать список EID-Prefix, для которых ETR имеет полномочия. После получения Map-Register от ETR сервер будет воспринимать лишь настроенные для этого ETR префиксы EID-Prefix. Отказ от реализации такой проверки сделает систему отображения уязвимой для тривиальных атак с захватом EID-Prefix.

В дополнение к набору EID-Prefix для каждого ETR, который может быть зарегистрирован, на Map-Server обычно настраивается один или несколько агрегированных префиксов, указывающих части выделенного ему пространства EID. При использовании базы данных LISP-ALT агрегированные префиксы реализуются как маршруты отбрасывания и анонсируются в ALT BGP. Наличие агрегированных EID-Prefix в базе данных Map-Server означает, что сервер может получать Map-Request для EID-Prefix, которые соответствуют агрегату, но не соответствуют зарегистрированному префиксу. Обработка таких ситуаций описана в параграфе 8.3. Обработка в Map-Server.

Сообщения Map-Register передаются периодически от ETR на Map-Server с рекомендуемым интервалом в 1 минуту. Серверу следует удалять регистрацию ETR по тайм-ауту, если он не получил от него действительного сообщения Map-Register в течение 3 минут. При первом контакте с Map-Server после перезапуска или смене отображений в своей базе данных EID-RLOC маршрутизатор ETR может сначала передавать сообщения Map-Register более часто, вплоть до 1 каждые 20 секунд. Продолжительность интервала «ускоренной регистрации» ограничена 5 минутами.

ETR может запросить у Map-Server явное подтверждение приёма и обработки сообщения Map-Register, установив (1) флаг want-map-notify (M). Map-Server, получивший Map-Register с установленным флагом, будет отвечать сообщением Map-Notify. Обычно ETR будет устанавливать этот флаг в сообщениях Map-Register, передаваемых при начальной ускоренной регистрации на Map-Server, а затем применять его лишь время от времени при наличии установившейся ассоциации с этим Map-Server. Отметим, что сообщение Map-Notify передаётся в порт UDP 4342, а не в порт, из которого передано исходное сообщение Map-Register.

Отметим, что 1-минутный минимальный интервал регистрации при наличии поддержимаемой ассоциации ETR-Map-Server задаёт нижнюю границу скорости и частоты возможных обновления базы отображений. Это может влиять на типы напрямую поддерживаемой системой отображений мобильности — в некоторых случаях могут потребоваться более короткие интервалы или иные механизмы регистрации. Обсуждение способов реализации ускорения мобильности для индивидуальных устройств можно найти в [LISP-MN].

ETR может, устанавливая флаг proxy Map-Reply (P) в сообщении Map-Register, запросить у Map-Server отклики на Map-Request вместо их пересылки ETR. В параграфе 7.1. Алгоритм зондирования RLOC описана установка сервером Map-Server некоторых флагов (таких, как указание полномочности сообщения и как следует трактовать возвращённые локаторы) при передаче Map-Reply от имени ETR. Когда ETR запрашивает услуги посредника для откликов, ему следует включать все RLOC для всех ETR регистрируемого EID-Prefix вместе с установкой флага маршрутизируемости (R) для каждого RLOC. Map-Server включает все эти сведения в сообщения Map-Reply, передаваемые от имени ETR. Это отличается от регистрации без посредника, поскольку та требует лишь предоставить 1 или несколько RLOC для Map-Server, применяемых при пересылке Map-Request, регистрационные сведения не используются в Map-Reply, поэтому неполнота информации не ведёт к ошибке.

ETR, использующему Map-Server для публикации своих отображений EID-RLOC, не требуется дальнейшее участие в протоколах баз данных отображений. При использовании базы отображений LISP-ALT это означает, например, что ETR не нужно реализовать GRE или BGP, что значительно упрощает настройку и эксплуатационные издержки.

Отметим, что использование Map-Server не препятствует подключению ETR к базе данных отображений (т. е. он может подключаться и к сети LISP-ALT), но это не представляется особо полезным, поскольку целью использования Map-Server является избавление от сложностей протоколов баз данных отображения.

8.3. Обработка в Map-Server

Когда Map-Server имеет EID-Prefix, зарегистрированные его клиентами ETR, он может воспринимать и обрабатывать сообщения Map-Request от них. При получении Map-Request сервер Map-Server сначала проверяет соответствие EID получателя настроенному EID-Prefix. Если совпадений не найдено, Map-Server возвращает Negative Map-Reply с кодом действия Natively-Forward и 15-минутным TTL. Это может происходить при получении a Map-Request для настроенного агрегированного EID-Prefix, не имеющего более конкретного EID-Prefix, и указывает наличие «дыры», не поддерживающей LISP в агрегате EID-Prefix. Затем Map-Server проверяет наличие зарегистрированных ETR для соответствующего EID-Prefix. Если ничего не найдено, Map-Server возвращает Negative Map-Reply с кодом действия Natively-Forward и 1-минутным TTL.

Независимо от регистрации EID-Prefix в Mapping System при наличии на Map-Server правила отбрасывания запрашивающим пакетов для соответствующего EID-Prefix возвращается код действия Drop/Policy-Denied. Если возникает отказ при аутентификации (независимо от регистрации EID-Prefix), возвращается код действия Drop/Auth-Failure. Если любое из этих действий создаёт временное состояние политики или аутентификации, может возвращаться код действия Send-Map-Request с 1-минутным TTL, чтобы запрашивающий мог повторить Map-Request.

Если любой из ETR, зарегистрированных для EID-Prefix, запросил посредничество при ответе, Map-Server отвечает на запрос вместо его пересылки. Он возвращает Map-Reply с EID-Prefix, адресами RLOC и другими сведениями, полученными в процессе регистрации.

Если ни один из ETR не запрашивал посреднических услуг, Map-Server заново инкапсулирует и пересылает инкапсулированное сообщение Map-Request одному из зарегистрированных ETR. В остальном Map-Request не меняется, поэтому сообщение Map-Reply, переданное ETR, возвращается по RLOC из Map-Request, а не на Map-Server. Если сервер действует и как Map-Resolver, ему не следует получать сообщения Map-Reply и любое такое сообщение следует просто отбрасывать, возможно указывая это в системном журнале, если частота получения Map-Reply указывает вредоносный трафик.

8.4. Обработка в Map-Resolver

При получении инкапсулированного Map-Request распознаватель Map-Resolver декапсулирует вложенное сообщение и ижет запрошенный EID в локальной базе отображений (статической или полученной от связанных ETR, если Map-Resolver служит также посредничающим Map-Server). При наличии записи распознаватель возвращает LISP Map-Reply с найденным отображением.

Если у Map-Resolver нет записи отображения и распознаватель может определить, что EID нет в базе данных отображений (например, при использовании LISP-ALT у Map-Resolver может быть таблица пересылки ALT, охватывающая все пространство EID), он сразу же возвращает Negative Map-Reply с кодом действия Natively-Forward и 15-минутным TTL. Для минимизации числа кэшированных негативных записей, необходимых для ITR, распознавателю следует возвращать наименее конкретный префикс, соответствующий исходному запросу, но не соответствующий ни одному из EID-Prefix, наличие которых известно поддерживающей LISP инфраструктуре.

Если Map-Resolver не может узнать, существует ли EID, ему нужно переслать Map-Request другому устройству, у которого может быть больше сведений о запрошенном EID. Для этого он пересылает неинкапсулированное сообщение Map-Request с RLOC отправителя исходного ITR в систему баз данных отображений. Используя LISP-ALT, Map-Resolver подключается к сети ALT и передаёт Map-Request следующему узлу (hop) ALT, найденному среди соседей ALT BGP. Map-Resolver не передаёт ITR никакого отклика, поэтому в RLOC источника указывается этот ITR, ETR или Map-Server, получающий Map-Request через ALT и отвечающий напрямую маршрутизатору ITR.

8.4.1. Операции Anycast

Для Map-Resolver можно настроить использование anycast, когда один адрес назначается нескольким Map-Resolver и распространяется через маршрутизацию IGP для упрощения работы каждого ITR с более близким Map-Resolver.

ETR могут иметь anycast-адреса RLOC, зарегистрированные как часть их RLOC-Set в Mapping System. Однако регистрация должна использовать их уникальные адреса RLOC, разные ключи аутентификации или xTR-ID, чтобы различать защищённые связи с Map-Server.

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

Анализ угроз для LISP приведён в [RFC7835]. Здесь рассматриваются вопросы безопасности, связанные с применением LISP в средах, подобных описанным в параграфе 1.1, где соблюдаются указанные ниже допущения.

  1. Mapping System защищена и является доверенной в плане безопасности, поэтому считается доверенным элементом.

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

  3. Должно быть реализовано расширение LISP-SEC [RFC9303]. Сетевым операторам следует внимательно оценить применимость модели угроз LISP-SEC к их варианту применения и развёртыванию. Если оператор решить игнорировать те или иные рекомендации, ему следует убедиться в осознании связанных с этим рисков.

Обмен сообщениями Map-Request/Map-Reply злоумышленник может использовать для организации атак с усилением (amplification) или DoS-атак. Злоумышленники могут передавать Map-Request с высокой скоростью, чтобы перегрузить узлы LISP и увеличить число поддерживаемых узлом состояний или повысить нагрузку на CPU. Такие угрозы можно смягчить применением фильтрой и ограничителей скорости.

Обмен сообщениями Map-Request/Map-Reply для внедрения фиктивных отображений непосредственно в ITR EID-RLOC Map-Cache, что может привести к перенаправлению трафика злоумышленнику (см. [RFC7835]). Кроме того, действительные ETR в системе могут выполнять атаки с перезаявлением (overclaiming). В этом случае злоумышленник может заявить свой EID-Prefix, который больше префикса, принадлежащего ETR. Эту проблему можно решить с помощью протокола LISP-SEC [RFC9303], определяющего механизм аутентификации источников, защиты целостности, а также предотвращение MITM4-атак и перезаявления префиксов при обмене Map-Request/Map-Reply. Кроме того, зотя это и выходит за рамки защиты отдельного Map-Server или Map-Resolver, следует отметить, что LISP-SEC можно дополнить механизмами защиты инфраструктуры Mapping System. Например, LISP-ALT [RFC6836] на основе BGP может применять стандартные средства BGP, а LISP-DDT [RFC8111] задаёт свои механизмы защиты.

Для публикации полномочного отображения EID-RLOC на Map-Server с помощью сообщения Map-Register маршрутизатор ETR включает данные аутентификации AD, которые представляют собой код MAC для всего сообщения с использованием ключа, выведенного из заранее распространённого секрета. Реализациям следует поддерживать алгоритм HMAC-SHA256-128+HKDF-SHA256 [RFC5869]. Сообщение Map-Register защищено от replay-атак с участием человека (MITM). Однако сохраняется возможность атак, в который скомпрометрированный ETR может перезаявить префикс, которым он владеет, и зарегистрировать его на соответствующем Map-Server. Для смягчения таких атак, как отмечено в параграфе 8.2. Настройка EID-Prefix и регистрация ETR, Map-Server должен убедиться, что все EID-Prefix, регистрируемые ETR, соответствуют конфигурации, сохранённой на Map-Server.

Развёртывания, связанные с манипулированием сообщениями Map-Request и Map-Reply, а также перезаявлением EID-Prefix вредоносными ETR, должны отбрасывать сообщения плоскости управления LISP, не включающие материала LISP-SEC (бит S, EID-AD, OTK-AD, PKT-AD, см. раздел 3 в [RFC9303]).

Следует развёртывать механизмы шифрования, защиты приватности и предотвращения перехвата и фальсификации сообщений между маршрутизаторами xTRs, xTRs и Mapping System, а также между узлами, образующими Mapping System. Примерами таких механизмов могут служить DTLS [RFC9147] и lisp-crypto [RFC8061].

10. Вопросы приватности

Как отмечено в [RFC6973], вопросы приватности достаточно сложны и зависят от конкретного варианта применения протокола и развёртывания. В параграфе 1.1 [RFC9300] сказано, что LISP фокусируется на взаимодействии элементов через общедоступную сеть Internet при сохранении независимой адресации и топологии. Здесь рассматриваются угрозы приватности, создаваемые плоскостью управления LISP, на основе рекомендаций приведённых в [RFC6973].

LISP может применять долгоживущие идентификаторы (EID), которые связаны с перемещаемыми узлами. Такие идентификаторы привязываются к RLOC узлов. Адреса RLOC представляют топологическое размещение относительно конкретных развёртываний LISP. Кроме того, сопоставления EID с RLOC обычно считаются общедоступными сведениями внутри развёртывания LISP, где сообщения плоскости управления не шифруются и могут быть перехвачены при отправке сообщений Map-Request соответствующим Map-Resolver или Map-Register соответствующим Map-Server.

В этом контексте злоумышленник может сопоставить EID с RLOC и отслеживать топологическое размещение и перемещения соответствующего пользователя. Это может быть реализовано злоумышленниками вне пути (off-path), если они аутентифицированы, через запросы к Mapping System. Развёртывания, для которых такая угроза значима, могут использовать списки контроля доступа или более строгие механизмы аутентификации [ECDSA-AUTH] в Mapping System, чтобы доступ к сведениям получали лишь уполномоченные пользователи (минимизация данных). Применение эфемерных EID [EID-ANONYMITY] для обеспечения анонимности является другим механизмом предотвращения отслеживания.

11. Отличия от RFC 6830 и RFC 6833

Из соображений реализации в [RFC6830] и [RFC6833] были внесены перечисленные ниже изменения.

  • 16-битовое поле Key ID в сообщениях Map-Register и Map-Notify, определённое в [RFC6830], было разделено на два 8-битовых поля — Key ID и Algorithm ID. Это изменение относится и к сообщению Map-Notify-Ack, заданному в этом документе (5.6. Формат сообщения Map-Register, 5.7. Формат сообщений Map-Notify и Map-Notify-Ack).

  • В этом документе определено сообщение Map-Notify-Ack для обеспечения надёжности доставки Map-Notify. Получатель Map-Notify должен передавать в ответ сообщение Map-Notify-Ack. Серверы Map-Server, являющиеся отправителями Map-Notify, должны держать содержимое Map-Notify в очереди, пока не будет получено сообщение Map-Notify-Ack со значением nonce из этого Map-Notify. Отметим, что реализации Map-Notify-Ack уже имелись до выхода этого документа.

  • В этом документе применяется код для сообщений Map-Referral из спецификации LISP-DDT [RFC8111], указывающий, что Map-Server должен передавать финальное сообщение Map-Referral, когда он участвует в процедурах LISP-DDT Mapping System.

  • Добавлены флаги L и D для сообщений Map-Request (5.3. Сообщение EID-RLOC UDP Map-Request).

  • Добавлены флаги S, I, E, T, a, R, M для сообщений Map-Register (5.6. Формат сообщения Map-Register).

  • Поля nonce и Authentication Data в сообщении Map-Register ведут себя по-разному (5.6. Формат сообщения Map-Register).

  • Этот документ добавляет два кода действий в EID-Record сообщений Map-Reply, Map-Register, Map-Notify и Map-Notify-Ack — Drop/Policy-Denied и Drop/Auth-Failure (5.4. Формат сообщения Map-Reply).

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

В этом разделе приведены рекомендации для IANA по части регистрации значений, связанных с этой спецификацией плоскости управления LISP, в соответствии с BCP 26 [RFC8126].

  • Значения из реестра LISP IANA не следует выделять для целей, не связанных с маршрутизацией и транспортными протоколами LISP.

  • Далее используются заданные в BCP 26 [RFC8126] процедуры Specification Required, IETF Review, Experimental Use, First Come First Served.

В LISP имеется 3 пространства регистрируемых имён (см. ниже) in LISP (см. [RFC9299].

12.1. Номера портов LISP UDP

Агентство IANA выделило номер порта UDP 4342 для плоскости управления LISP и обновило описание этого порта, как показано в таблице 2

Таблица 2.

 

Имя службы

Номер порта

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

Описание

Документ

lisp-control

4342

udp

Пакеты управления LISP

RFC 9301

 

12.2. Коды типа пакетов LISP

Агенство IANA теперь полномочно определять типы пакетов LISP, поэтому в реестре ссылки на [RFC6830] заменены указанием этого документа.

На основе опыта развёртывания, связанного с [RFC6830], в этом документе определено сообщение Map-Notify-Ack (тип 5), включённое в реестр, как показано в таблице 3.

Таблица 3.

 

Сообщение

Код

Документ

LISP Map-Notify-Ack

5

RFC 9301

 

12.3. Коды LISP Map-Reply EID-Record Action

Новые значения ACT могут выделяться по процедуре IETF Review или IESG Approval. Четыре значения уже были выделены в [RFC6830]. Агентство IANA заменило ссылки на [RFC6830] указанием этого документа. Данная спецификация изменила имя для действия с кодом 3 с Drop на Drop/No-Reason. Новые действия и значения ACT указаны в таблице 4.

Таблица 4. Значения LISP Map-Reply Action.

Значение

Действие

Описание

Документ

4

Drop/Policy-Denied

Пакет, соответствующий этой записи Map-Cache отброшен, поскольку целевой EID запрещён правилами xTR или Mapping System.

RFC 9301

5

Drop/Auth-Failure

Пакет, соответствующий этой записи Map-Cache отброшен, поскольку сообщение Map-Request для целевого EID не прошло проверку подлинности в xTR или Mapping System.

RFC 9301

В LISP имеется множество флагов и резервных полей, таких как поля и флаги заголовка LISP [RFC9300]. Новые флаги для этих полей могут быть реализованы по процедуре IETF Review или IESG Approval, но не обязательно будут управляться IANA.

12.4. Коды LISP Address Type

Канонический формат адресов LISP (LISP Canonical Address Format или LCAF) [RFC8060] имеет 8-битовое поле Type, указывающее кодирование LISP для семейства адресов AFI = 16387. Кодирование LCAF применяется в особых случаях, когда нужны разные типы адресов в EID-Record и RLOC-Record.

Для типов LCAF используется реестр LISP Canonical Address Format (LCAF) Types, для которого применяется процедура Specification Required [RFC8126]. Исходные значения и дополнительные сведения даны в [RFC8060].

Реестр LISP Address Type Codes, запрошенный [RFC6830], больше не требуется и этот документ закрывает его.

12.5. Номера LISP Algorithm ID

В [RFC6830] был представлен запрос на реестр LISP Key ID Numbers. В соответствии с этим документом агентство IANA переименовало этот реестр в LISP Algorithm ID Numbers и указало этот документ как ссылку на реестр.

Определённые этой спецификацией значения Algorithm ID, применяемые во всех типах пакетов с полем Algorithm ID, указаны в таблице 5.

Таблица 5.

 

Имя

Номер

MAC

KDF

Нет

0

Нет

none

HMAC-SHA-1-96-None

1

[RFC2404]

none

HMAC-SHA-256-128-None

2

[RFC4868]

none

HMAC-SHA256-128+HKDF-SHA256

3

[RFC4868]

[RFC4868]

 

Номера выделяются из диапазона от 0 до 255 в порядке поступления запросов (First Come First Served).

12.6. Битовые флаги LISP

Этот документ запрашивает у IANA создание реестра для выделения битов в нескольких заголовках сообщений плоскости управления LISP, а именно, Map-Request, Map-Reply, Map-Register, Encapsulated Control, а также записей EID-Record и RLOC-Record. Реестр следует назвать LISP Control Plane Header Bits и создать в нем субреестры для каждого сообщения и записи EID-Record. Имена этих субреестров указаны ниже вместе с форматом и выделенными этим документом битами. Для выделения дополнительных битов требуется спецификация в соответствии с правилами [RFC8126].

Субреестр Map-Request Header Bits (5.2. Формат сообщения Map-Request).

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Type=1 |A|M|P|S|p|s|R|R|  Rsvd   |L|D|   IRC   | Record Count  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 6. Биты заголовка LISP Map-Request.

 

Имя

Имя IANA

Номер бита

Описание

A

Map-Request-A

4

Флаг полномочности

M

Map-Request-M

5

Флаг наличия данных отображения

P

Map-Request-P

6

Флаг запроса RLOC-Probe

S

Map-Request-S

7

Флаг запрошенного Map-Request (SMR)

p

Map-Request-p

8

Флаг Proxy-ITR

s

Map-Request-s

9

Флаг вызванного запрошенного Map-Request

L

Map-Request-L

17

Флаг локального xTR

D

Map-Request-D

18

Флаг отказа от Map-Reply

 

Субреестр Map-Reply Header Bits (5.4. Формат сообщения Map-Reply).

    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=2 |P|E|S|          Reserved               | Record Count  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 7. Биты заголовка LISP Map-Reply.

 

Имя

Имя IANA

Номер бита

Описание

P

Map-Reply-P

4

Флаг RLOC-Probe

E

Map-Reply-E

5

Флаг Echo-Nonce Capable

S

Map-Reply-S

6

Флаг Security

 

Субреестр Map-Register Header Bits (5.6. Формат сообщения Map-Register).

    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=3 |P|S|I|        Reserved       |E|T|a|R|M| Record Count  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 8. Биты заголовка LISP Map-Register.

 

Имя

Имя IANA

Номер бита

Описание

P

Map-Register-P

4

Флаг Proxy Map-Reply

S

Map-Register-S

5

Флаг поддержки LISP-SEC

I

Map-Register-I

6

Флаг наличия xTR-ID

 

Субреестр Encapsulated Control Message (ECM) Header Bits (5.8. Формат инкапсулированного управляющего сообщения).

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Type=8 |S|D|E|M|            Reserved                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 9. Биты заголовка LISP Encapsulated Control Message (ECM).

 

Имя

Имя IANA

Номер бита

Описание

S

ECM-S

4

Флаг Security

D

ECM-D

5

Флаг LISP-DDT

E

ECM-E

6

Флаг пересылки ETR

M

ECM-M

7

Флаг назначения Map-Server

 

Субреестр EID-Record Header Bits (5.4. Формат сообщения Map-Reply).

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 10. Биты заголовка LISP EID-Record.

 

Имя

Имя IANA

Номер бита

Описание

A

EID-Record-A

19

Флаг полномочности

 

Субреестр RLOC-Record Header Bits (5.4. Формат сообщения Map-Reply).

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Unused Flags     |L|p|R|           Loc-AFI             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Таблица 11. Биты заголовка LISP RLOC-Record.

 

Имя

Имя IANA

Номер бита

Описание

L

RLOC-Record-L

13

Флаг локального RLOC

p

RLOC-Record-p

14

Флаг RLOC-Probe Reply

R

RLOC-Record-R

15

Флаг RLOC Reachable

 

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

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

[RFC2404] Madson, C. and R. Glenn, «The Use of HMAC-SHA-1-96 within ESP and AH», RFC 2404, DOI 10.17487/RFC2404, November 1998, <https://www.rfc-editor.org/info/rfc2404>.

[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, «Randomness Requirements for Security», BCP 106, RFC 4086, DOI 10.17487/RFC4086, June 2005, <https://www.rfc-editor.org/info/rfc4086>.

[RFC4868] Kelly, S. and S. Frankel, «Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec», RFC 4868, DOI 10.17487/RFC4868, May 2007, <https://www.rfc-editor.org/info/rfc4868>.

[RFC5869] Krawczyk, H. and P. Eronen, «HMAC-based Extract-and-Expand Key Derivation Function (HKDF)», RFC 5869, DOI 10.17487/RFC5869, May 2010, <https://www.rfc-editor.org/info/rfc5869>.

[RFC6833] Fuller, V. and D. Farinacci, «Locator/ID Separation Protocol (LISP) Map-Server Interface», RFC 6833, DOI 10.17487/RFC6833, January 2013, <https://www.rfc-editor.org/info/rfc6833>.

[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, «UDP Usage Guidelines», BCP 145, RFC 8085, DOI 10.17487/RFC8085, March 2017, <https://www.rfc-editor.org/info/rfc8085>.

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

[RFC9300] Farinacci, D., Fuller, V., Meyer, D., Lewis, D., and A. Cabellos, Ed., «The Locator/ID Separation Protocol (LISP)», RFC 9300, DOI 10.17487/RFC9300, October 2022, <https://www.rfc-editor.org/info/rfc9300>.

[RFC9302] Iannone, L., Saucez, D., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Map-Versioning», RFC 9302, DOI 10.17487/RFC9302, October 2022, <https://www.rfc-editor.org/info/rfc9302>.

[RFC9303] Maino, F., Ermagan, V., Cabellos, A., and D. Saucez, «Locator/ID Separation Protocol Security (LISP-SEC)», RFC 9303, DOI 10.17487/RFC9303, October 2022, <https://www.rfc-editor.org/info/rfc9303>.

[RFC9304] Boucadair, M. and C. Jacquenet, «Locator/ID Separation Protocol (LISP): Shared Extension Message and IANA Registry for Packet Type Allocations», RFC 9304, DOI 10.17487/RFC9304, October 2022, <https://www.rfc-editor.org/info/rfc9304>.

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

[AFN] IANA, «Address Family Numbers», <http://www.iana.org/assignments/address-family-numbers/>.

[ECDSA-AUTH] Farinacci, D. and E. Nordmark, «LISP Control-Plane ECDSA Authentication and Authorization», Work in Progress, Internet-Draft, draft-ietf-lisp-ecdsa-auth-09, 11 September 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-lisp-ecdsa-auth-09>.

[EID-ANONYMITY] Farinacci, D., Pillay-Esnault, P., and W. Haddad, «LISP EID Anonymity», Work in Progress, Internet-Draft, draft-ietf-lisp-eid-anonymity-13, 11 September 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-lisp-eid-anonymity-13>.

[EID-MOBILITY] Portoles, M., Ashtaputre, V., Maino, F., Moreno, V., and D. Farinacci, «LISP L2/L3 EID Mobility Using a Unified Control Plane», Work in Progress, Internet-Draft, draft-ietf-lisp-eid-mobility-10, 10 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-lisp-eid-mobility-10>.

[GTP-3GPP] 3GPP, «General Packet Radio System (GPRS) Tunnelling Protocol User Plane (GTPv1-U)», TS.29.281, June 2022, <https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1699>.

[INTAREA-ILA] Herbert, T. and P. Lapukhov, «Identifier-locator addressing for IPv6», Work in Progress, Internet-Draft, draft-herbert-intarea-ila-01, 5 March 2018, <https://datatracker.ietf.org/doc/html/draft-herbert-intarea-ila-01>.

[LISP-MN] Farinacci, D., Lewis, D., Meyer, D., and C. White, «LISP Mobile Node», Work in Progress, Internet-Draft, draft-ietf-lisp-mn-12, 24 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-lisp-mn-12>.

[LISP-PUBSUB] Rodriguez-Natal, A., Ermagan, V., Cabellos-Aparicio, A., Barkai, S., and M. Boucadair, «Publish/Subscribe Functionality for LISP», Work in Progress, Internet-Draft, draft-ietf-lisp-pubsub-09, 28 June 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-lisp-pubsub-09>.

[NVO3-VXLAN-GPE] Maino, F., Ed., Kreeger, L., Ed., and U. Elzur, Ed., «Generic Protocol Extension for VXLAN (VXLAN-GPE)», Work in Progress, Internet-Draft, draft-ietf-nvo3-vxlan-gpe-12, 22 September 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-nvo3-vxlan-gpe-12>.

[OPSEC-ICMP-FILTER] Gont, F., Gont, G., and C. Pignataro, «Recommendations for filtering ICMP messages», Work in Progress, Internet-Draft, draft-ietf-opsec-icmp-filtering-04, 3 July 2013, <https://datatracker.ietf.org/doc/html/draft-ietf-opsec-icmp-filtering-04>.

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

[RFC1071] Braden, R., Borman, D., and C. Partridge, «Computing the Internet checksum», RFC 1071, DOI 10.17487/RFC1071, September 1988, <https://www.rfc-editor.org/info/rfc1071>.

[RFC2890] Dommety, G., «Key and Sequence Number Extensions to GRE», RFC 2890, DOI 10.17487/RFC2890, September 2000, <https://www.rfc-editor.org/info/rfc2890>.

[RFC4984] Meyer, D., Ed., Zhang, L., Ed., and K. Fall, Ed., «Report from the IAB Workshop on Routing and Addressing», RFC 4984, DOI 10.17487/RFC4984, September 2007, <https://www.rfc-editor.org/info/rfc4984>.

[RFC6830] Farinacci, D., Fuller, V., Meyer, D., and D. Lewis, «The Locator/ID Separation Protocol (LISP)», RFC 6830, DOI 10.17487/RFC6830, January 2013, <https://www.rfc-editor.org/info/rfc6830>.

[RFC6831] Farinacci, D., Meyer, D., Zwiebel, J., and S. Venaas, «The Locator/ID Separation Protocol (LISP) for Multicast Environments», RFC 6831, DOI 10.17487/RFC6831, January 2013, <https://www.rfc-editor.org/info/rfc6831>.

[RFC6832] Lewis, D., Meyer, D., Farinacci, D., and V. Fuller, «Interworking between Locator/ID Separation Protocol (LISP) and Non-LISP Sites», RFC 6832, DOI 10.17487/RFC6832, January 2013, <https://www.rfc-editor.org/info/rfc6832>.

[RFC6836] Fuller, V., Farinacci, D., Meyer, D., and D. Lewis, «Locator/ID Separation Protocol Alternative Logical Topology (LISP+ALT)», RFC 6836, DOI 10.17487/RFC6836, January 2013, <https://www.rfc-editor.org/info/rfc6836>.

[RFC6837] Lear, E., «NERD: A Not-so-novel Endpoint ID (EID) to Routing Locator (RLOC) Database», RFC 6837, DOI 10.17487/RFC6837, January 2013, <https://www.rfc-editor.org/info/rfc6837>.

[RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., Morris, J., Hansen, M., and R. Smith, «Privacy Considerations for Internet Protocols», RFC 6973, DOI 10.17487/RFC6973, July 2013, <https://www.rfc-editor.org/info/rfc6973>.

[RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., and C. Wright, «Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks», RFC 7348, DOI 10.17487/RFC7348, August 2014, <https://www.rfc-editor.org/info/rfc7348>.

[RFC7835] Saucez, D., Iannone, L., and O. Bonaventure, «Locator/ID Separation Protocol (LISP) Threat Analysis», RFC 7835, DOI 10.17487/RFC7835, April 2016, <https://www.rfc-editor.org/info/rfc7835>.

[RFC8060] Farinacci, D., Meyer, D., and J. Snijders, «LISP Canonical Address Format (LCAF)», RFC 8060, DOI 10.17487/RFC8060, February 2017, <https://www.rfc-editor.org/info/rfc8060>.

[RFC8061] Farinacci, D. and B. Weis, «Locator/ID Separation Protocol (LISP) Data-Plane Confidentiality», RFC 8061, DOI 10.17487/RFC8061, February 2017, <https://www.rfc-editor.org/info/rfc8061>.

[RFC8111] Fuller, V., Lewis, D., Ermagan, V., Jain, A., and A. Smirnov, «Locator/ID Separation Protocol Delegated Database Tree (LISP-DDT)», RFC 8111, DOI 10.17487/RFC8111, May 2017, <https://www.rfc-editor.org/info/rfc8111>.

[RFC8378] Moreno, V. and D. Farinacci, «Signal-Free Locator/ID Separation Protocol (LISP) Multicast», RFC 8378, DOI 10.17487/RFC8378, May 2018, <https://www.rfc-editor.org/info/rfc8378>.

[RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., Decraene, B., Litkowski, S., and R. Shakir, «Segment Routing Architecture», RFC 8402, DOI 10.17487/RFC8402, July 2018, <https://www.rfc-editor.org/info/rfc8402>.

[RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, «The Datagram Transport Layer Security (DTLS) Protocol Version 1.3», RFC 9147, DOI 10.17487/RFC9147, April 2022, <https://www.rfc-editor.org/info/rfc9147>.

[RFC9299] Cabellos, A. and D. Saucez, Ed., «An Architectural Introduction to the Locator/ID Separation Protocol (LISP)», RFC 9299, DOI 10.17487/RFC9299, October 2022, <https://www.rfc-editor.org/info/rfc9299>.

[RFC9305] Maino, F., Ed., Lemon, J., Agarwal, P., Lewis, D., and M. Smith, «Locator/ID Separation Protocol (LISP) Generic Protocol Extension», RFC 9305, DOI 10.17487/RFC9305, October 2022, <https://www.rfc-editor.org/info/rfc9305>.

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

Авторы исходного документа благодарны Greg Schudel, Darrel Lewis, John Zwiebel, Andrew Partan, Dave Meyer, Isidor Kouvelas, Jesper Skriver и участникам почтовой конференции lisp@ietf.org за их отклики и полезные предложения.

Отдельная благодарность Noel Chiappa за обширную работу и размышления о кэшировании в Map-Resolver.

Нынешние авторы выражают свою искреннюю благодарность людам, которые помогли провести LISP через процедуры Standards Track в IETF. Это Joel Halpern, Luigi Iannone, Deborah Brungard, Fabio Maino, Scott Bradner, Kyle Rose, Takeshi Takahashi, Sarah Banks, Pete Resnick, Colin Perkins, Mirja Kühlewind, Francis Dupont, Benjamin Kaduk, Eric Rescorla, Alvaro Retana, Alexey Melnikov, Alissa Cooper, Suresh Krishnan, Alberto Rodriguez-Natal, Vina Ermagan, Mohamed Boucadair, Brian Trammell, Sabrina Tanamal, John Drake. Их влад существенно улучшил безопасность, расширяемость и отказоустойчивость архитектуры и протоколов LISP.

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

Dino Farinacci

lispers.net
San Jose, CA
United States of America
Email: farinacci@gmail.com
 
Fabio Maino
Cisco Systems
San Jose, CA
United States of America
Email: fmaino@cisco.com
 
Vince Fuller
vaf.net Internet Consulting
Email: vince.fuller@gmail.com
 
Albert Cabellos (editor)
Universitat Politecnica de Catalunya
c/ Jordi Girona s/n
08034 Barcelona
Spain
Email: acabello@ac.upc.edu

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

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

nmalykh@protokols.ru


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

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

3Generic Routing Encapsulation — базовая инкапсуляция маршрутных данных.

4Man-in-the-middle — перехват и изменение пакетов с участием человека.

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

RFC 9304 Locator/ID Separation Protocol (LISP): Shared Extension Message and IANA Registry for Packet Type Allocations

Internet Engineering Task Force (IETF)                      M. Boucadair
Request for Comments: 9304                                  C. Jacquenet
Obsoletes: 8113                                                   Orange
Category: Standards Track                                   October 2022
ISSN: 2070-1721

Locator/ID Separation Protocol (LISP): Shared Extension Message and IANA Registry for Packet Type Allocations

LISP — общий тип сообщения для расширений и реестр IANA для типов пакетов

PDF

Аннотация

В этом документе определён общий (shared) тип сообщения протокола разделения локаторов и идентификаторов (Locator/ID Separation Protocol или LISP) для будущих расширений и проведения экспериментов без использования кодов типа пакетов LISP в каждом расширении.

Документ отменяет RFC 8113.

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

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

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

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

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

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

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

Реестр IANA LISP Packet Types (5. Взаимодействие с IANA) служит для упрощения отслеживания типов сообщений LISP.

Поскольку пространство типов [RFC9301] ограничено и требуется проводить эксперименты для оценки новых расширений LISP, в этом документе определяется общий тип сообщения для расширений LISP и описана процедура регистрации субтипов расширений LISP (3. Тип общего сообщения для расширений LISP). Для будущих расширений предназначен единственный код типа сообщений LISP, а для однозначной идентификации данного расширения применяется субтип. Идентификаторы субтипов выбирают авторы спецификаций LISP с новыми расширениями.

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

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

3. Тип общего сообщения для расширений LISP

На рисунке 1 показан базовый формат общего сообщения для расширений LISP. Поле типа должно иметь значение 15 (см. 5. Взаимодействие с IANA).

 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=15|        Sub-type       |   extension-specific          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                    extension-specific                       //
//                                                             //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Общий тип сообщения для расширений.


В поле Sub-type указывается уникальный идентификатор, который должен регистрироваться в IANA (5.2. Субтипы).

Структуру extension-specific задаёт спецификация соответствующего расширения.

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

Этот документ не добавляет соображений безопасности к рассмотренным в [RFC9301].

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

5.1. Типы пакетов LISP

Агентство IANA создало реестр LISP Packet Types со значениями от 0 до 15.

Значения могут выделяться по процедуре Standards Action [RFC8126]. Документ с запросом нового LISP Packet Type может указывать предпочтительное значение в соответствующих разделах IANA.

Агентство IANA заменило ссылку на RFC 8113 указанием этого документа с обновлением таблицы, как показано ниже.

Таблица 1. Старая таблица.

 

Сообщение

Код

Документ

LISP Shared Extension Message

15

[RFC8113]

 

Таблица 2. Новая таблица.

 

Сообщение

Код

Документ

LISP Shared Extension Message

15

RFC 9304

 

5.2. Субтипы

Агентство IANA создало реестр LISP Shared Extension Message Type Sub-types. Реестр обновлён заменой ссылки на RFC 8113 указанием номера этого документа.

Значения субтипов из диапазона от 0 до 1023 выделяются по процедуре Standards Action. Эти значения предназначены на случай исчерпания реестра LISP Packet Types.

Значения от 1024 до 4095 выделяются в порядке запросов (First Come, First Served или FCFS). Процедура регистрации заключается в предоставлении IANA желаемого кода и контактных данных, краткого описания (вместе с сокращением, если оно нужно) предполагаемого применения сообщения.

6. Отличия от RFC 8113

  • Статус Experimental заменён на Standards Track.

  • Явно указано, что общее расширение применяется в двумя целями — расширение пространства типов и проведение экспериментов по оценке новых расширений LISP.

  • Удалены указатели на некоторые примеры, иллюстрирующие применение общего сообщения расширений для расширения протокола LISP.

  • Агентство IANA обновило реестры IANA LISP Packet Types и LISP Shared Extension Message Type Sub-types, указав ссылку на этот документ вместо RFC 8113.

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

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

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

[RFC9301] Farinacci, D., Maino, F., Fuller, V., and A. Cabellos, Ed., «Locator/ID Separation Protocol (LISP) Control Plane», RFC 9301, DOI 10.17487/RFC9301, October 2022, <https://www.rfc-editor.org/info/rfc9301>.

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

Эта работа частично финансировалась в рамках проекта ANR LISP-Lab #ANR-13-INFR-009-X.

Большое спавибо Luigi Iannone, Dino Farinacci, Alvaro Retana за рецензию.

Спасибо Geoff Huston, Brian Carpenter, Barry Leiba, Suresh Krishnan за рецензию.

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

Mohamed Boucadair
Orange
35000 Rennes
France
Email: mohamed.boucadair@orange.com
 
Christian Jacquenet
Orange
35000 Rennes
France
Email: christian.jacquenet@orange.com

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

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

nmalykh@protokols.ru


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

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

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