RFC 6598 IANA-Reserved IPv4 Prefix for Shared Address Space

Internet Engineering Task Force (IETF)                       J. Weil
Request for Comments: 6598                         Time Warner Cable
BCP: 153                                                V. Kuarsingh
Updates: 5735                                  Rogers Communications
Category: Best Current Practice                            C. Donley
ISSN: 2070-1721                                            CableLabs
                                                     C. Liljenstolpe
                                                       Telstra Corp.
                                                          M. Azinger
                                             Frontier Communications
                                                          April 2012

Резерв IANA для совместно используемого префикса IPv4

IANA-Reserved IPv4 Prefix for Shared Address Space

PDF

Аннотация

Этот документ служит запросом на выделение блока адресов IPv4 /10 для совместного использования (Shared Address Space1 — SAS) с целью удовлетворения потребностей устройств CGN2. Предполагается, что сервис-провайдеры будут использовать SAS для адресации интерфейсов, соединяющих устройства CGN с пользовательским оборудованием (CPE3).

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

Этот документ детализирует выделение дополнительного блока адресов IPv4 для специального применения и служит обновлением RFC 5735.

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

Этот документ относится к категории обмена опытом (Internet Best Current Practice — BCP).

Документ является результатом работы IETF4. Документ представляет согласованное мнение сообщества IETF. Документ был вынесен на публичное обсуждение и одобрен для публикации IESG5. Дополнительную информацию о серии документов BCP можно найти в разделе 2 RFC 5741.

Информацию о текущем статусе документа и способы передачи откликов на него можно найти по ссылке http://www.rfc-editor.org/info/rfc6598.

Примечание IESG

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

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

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

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

Адресное пространство IPv4 близко к полному исчерпанию. Однако ISP продолжают расширение использования IPv4, пока протокол IPv6 не развернут полностью. Для этого многие ISP разворачивают устройства трансляции адресов CGN, как описано в [RFC6264]. Поскольку устройства CGN используются в сетях, где предполагаются публичные адреса, а доступные в настоящее время приватные адреса вызывают проблемы при использовании в таком контексте, сервис-провайдерам требуется новый блок адресов IPv4 с маской /10. Этот блок будет называться «пространством для совместного использования» (Shared Address Space) и послужит для адресации интерфейсов, соединяющих устройства CGN с пользовательским оборудованием (CPE).

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

В этом документе запрашивается выделение блока адресов IPv4 /10 для использования в качестве SAS. По мнению многих ISP размер /10 является минимумом, который позволит развернуть устройства CGN на региональной основе без необходимости организации вложенных CGN. Например, как описано в [ISP-SHARED-ADDR], маски /10 достаточно для обслуживания точек присутствия в регионе Токио.

В этом документе детализировано выделение блока адресов IPv4 специального назначения. Документ также является обновлением [RFC5735].

2. Описание уровня требований

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

3. Альтернативы SAS

Интерфейсы, соединяющие устройства CGN с оборудованием CPE, предположительно могут адресоваться с использованием любого из перечисленных адресных пространств:

  • легитимно выделенные адреса из глобально маршрутизируемого пространства (уникальные);

  • узурпированные адреса из глобально маршрутизируемого пространства (т. е., захват адресов);

  • адреса [RFC1918];

  • разделяемое адресное пространство SAS.

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

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

Сервис-провайдер может использовать для адресации рассматриваемых интерфейсов пространство [RFC1918], если выполняется хотя бы одно из перечисленных ниже условий:

  • сервис-провайдер знает, что CPE/NAT работают корректно при использовании адресов из блока [RFC1918] на внешнем и внутреннем интерфейсах;

  • сервис-провайдер знает, что блок адресов [RFC1918], используемый на интерфейсах между CGN и CPE, не применяется на пользовательской стороне CPE.

Пока у сервис-провайдера нет уверенности в выполнении хотя бы одного из приведенных условий, он не может без опаски использовать адреса [RFC1918] и вынужден прибегать к пространству SAS. Обычно это возникает в случаях неуправляемого сервиса, когда пользователи предоставляют свои устройства CPE и сами выбирают адресацию для внутренней сети.

4. Использование разделяемого пространства CGN

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

Устройства должны быть способны выполнять трансляцию адресов при использовании двух идентичных диапазонов SAS на двух разных интерфейсах.

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

При использовании одной инфраструктуры DNS2 сервис-провайдерам недопустимо включать адреса из блока SAS в файлы зон. При использовании расщепленной инфраструктуры DNS сервис-провайдерам недопустимо включать адреса SAS в файлы доступных извне зон.

Реверсивные запросы DNS для адресов SAS недопустимо пересылать в глобальную инфраструктуру DNS. Провайдерам DNS следует отфильтровывать запросы на реверсивное преобразование DNS для адресов SAS на серверах с поддержкой рекурсии. Это делается для предотвращения организации чего-либо типа AS112.net для приватного блока адресов [RFC1918], чей хост некорректно передает запросы реверсивного преобразования DNS в публичную сеть [RFC6304].

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

5. Риски

5.1. Анализ

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

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

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

5.2. Эмпирические данные

Основным мотивом выделения блока SAS является потребность в адресном пространстве для CGN. Применение и влияние CGN ранее было описано в документах [RFC6269] и [NAT444-IMPACTS]. Ниже перечислены некоторые службы, на которые CGN оказывают негативное влияние:

  1. Консольные игры — некоторые игровые приложения сталкиваются с проблемами в случае попыток соединения между собой двух игроков с одинаковыми внешними публичными адресами IPv4.

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

  3. Одноранговые (Peer-to-peer) приложения — некоторые одноранговые приложения не могут нормально работать по причине невозможности открыть входные порты через CGN. Кроме того, некоторые клиенты SIP не могут получать входящие вызовы, пока не будет инициирован исходящий трафик или открыт входной порт через CGN using с использованием протокола PCP3 [PCP-BASE] или аналогичного механизма.

  4. Геолокация — системы геолокации идентифицируют местоположение сервера CGN, а не конечного хоста.

  5. Одновременный вход в систему (login) — некоторые web-сайты (особенно банковские системы и сайты социальных сетей) ограничивают число одновременных входов в систему с одного публичного адреса IPv4.

  6. 6to4 — системы 6to4 требуют глобально доступных адресов и не будут работать в сетях, где используются адреса с ограниченной топологический доступностью (такие, как адреса за CGN).

На основе тестов, описанных в [NAT444-IMPACTS], можно сделать вывод, что влияние CGN на приведенные выше приложения 1-5 не зависит от использования публичных адресов, блока SAS или приватных адресов [RFC1918]. Однако для систем 6to4 эти три варианта дают разные результаты.

Как описано в документе [RFC6343], маршрутизаторы CPE не пытаются инициализировать туннели 6to4, когда на их WAN-интерфейсах заданы адреса [RFC1918] или [RFC5735]. При использовании уникальных в глобальном масштабе адресов или адресов SAS такие устройства могут пытаться инициализировать туннель 6to4, но не достигнут успеха в этом. Сервис-провайдеры могут снизить остроту проблемы за счет использования управляемых провайдером туннелей 6to4 [6to4-PMT] или блокирования маршрута к 192.88.99.1 и генерации сообщение IPv4 о недоступности адресата4 [RFC6343]. Когда диапазон адресов является общеизвестным (как в случае SAS), производители маршрутизаторов CPE могут включить соответствующий блок адресов в свой список адресов специального назначения (например, [RFC5735]) и трактовать блок SAS аналогично адресам [RFC1918]. Когда адрес CGN-CPE не является общеизвестным, как при использовании уникальных публичных адресов, производителям маршрутизаторов CPE значительно сложнее решить эту проблему.

Таким образом, сравнение адресов [RFC1918] и SAS показывает, что SAS оказывает дополнительное влияние на связность 6to4, которое может быть ослаблено за счет действий сервис-провайдеров или производителей маршрутизаторов CPE. С другой стороны, использование адресного пространства [RFC1918] создает больше проблем по сравнению с SAS в тех случаях, когда абоненты и сервис-провайдер используют перекрывающееся пространство адресов [RFC1918], которое выходит из под контроля сервис-провайдера для случая предоставления неуправляемого обслуживания. Сервис-провайдеры указали, что решение проблем, связанных с перекрытием адресов [RFC1918] по разные стороны маршрутизатора CPE, сложнее, нежели снижение влияния использования SAS на системы 6to4.

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

Подобно другим адресам специального назначения IPv4 [RFC5735], адреса SAS не порождают напрямую дополнительных проблем безопасности. Тем не менее, в сети Internet нет средств защиты от злоупотреблений такими адресами. Могут быть организованы атаки на основе неожиданного использования похожих адресов специального назначения. Операторам следует рассмотреть этот документ и определить связанные с выделяемым адресным блоком проблемы безопасности, которые могут возникать в конкретных операционных средах. Им следует также рассмотреть вопрос о включении блока адресов SAS в свои списки фильтрации на входе (Ingress Filter) [RFC3704], если их Internet-услуги включают CGN.

Для снижения влияния возможного злоупотребления адресами SAS (использование, отличное от CGN или аналогичных услуг) следует соблюдать перечисленные ниже ограничения:

  • маршрутную информацию о сетях SAS недопустимо анонсировать через границы сервис-провайдеров; провайдеры должны отфильтровывать входящие анонсы в части адресов SAS;

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

  • сервис-провайдерам недопустимо включать адреса SAS в доступные извне зоны DNS;

  • реверсивные запросы DNS для адресов SAS недопустимо пересылать в глобальную инфраструктуру DNS;

  • провайдерам DNS следует отфильтровывать реверсивные запросы DNS для адресов SAS на рекурсивных серверах имен.

7. Согласование с IANA

Агентство IANA зафиксировало выделение блока адресов IPv4 /10 для использования в качестве SAS.

Для адресов совместного использования (SAS) выделен блок 100.64.0.0/10.

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

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

[RFC1918] Rekhter, Y., Moskowitz, R., Karrenberg, D., de Groot, G., and E. Lear, «Address Allocation for Private Internets», BCP 5, RFC 1918, February 1996.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC5735] Cotton, M. and L. Vegoda, «Special Use IPv4 Addresses», BCP 153, RFC 5735, January 2010.

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

[6to4-PMT] Kuarsingh, V., Ed., Lee, Y., and O. Vautrin, «6to4 Provider Managed Tunnels», Work in Progress5, February 2012.

[ISP-SHARED-ADDR] Yamagata, I., Miyakawa, S., Nakagawa, A., Yamaguchi, J., and H. Ashida, «ISP Shared Address», Work in Progress, January 2012.

[NAT444-IMPACTS] Donley, C., Howard, L., Kuarsingh, V., Berg, J., and J. Doshi, «Assessing the Impact of Carrier-Grade NAT on Network Applications», Work in Progress6, November 2011.

[PCP-BASE] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and P. Selkirk, «Port Control Protocol (PCP)», Work in Progress7, March 2012.

[RFC3704] Baker, F. and P. Savola, «Ingress Filtering for Multihomed Networks», BCP 84, RFC 3704, March 2004.

[RFC6264] Jiang, S., Guo, D., and B. Carpenter, «An Incremental Carrier-Grade NAT (CGN) for IPv6 Transition», RFC 6264, June 2011.

[RFC6269] Ford, M., Ed., Boucadair, M., Durand, A., Levis, P., and P. Roberts, «Issues with IP Address Sharing», RFC 6269, June 2011.

[RFC6304] Abley, J. and W. Maton, «AS112 Nameserver Operations», RFC 6304, July 2011.

[RFC6343] Carpenter, B., «Advisory Guidelines for 6to4 Deployment», RFC 6343, August 2011.

Приложение A. Благодарности

Ниже приведен алфавитный список людей, внесших свой вклад в подготовку документа или приславших отклики на него. Спасибо им.

Stan Barber

John Brzozowski

Isaiah Connell

Greg Davies

Owen DeLong

Kirk Erichsen

Wes George

Chris Grundemann

Tony Hain

Philip Matthews

John Pomeroy

Barbara Stark

Jean-Francois Tremblay

Leo Vegoda

Steven Wright

Ikuhei Yamagata

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

Jason Weil

Time Warner Cable

13820 Sunrise Valley Drive

Herndon, VA 20171

USA

EMail: jason.weil@twcable.com

Victor Kuarsingh

Rogers Communications

8200 Dixie Road

Brampton, ON L6T 0C1

Canada

EMail: victor.kuarsingh@gmail.com

Chris Donley

CableLabs

858 Coal Creek Circle

Louisville, CO 80027

USA

EMail: c.donley@cablelabs.com

Christopher Liljenstolpe

Telstra Corp.

7/242 Exhibition Street

Melbourne, VIC 316

Australia

Phone: +61 3 8647 6389

EMail: cdl@asgaard.org

Marla Azinger

Frontier Communications

Vancouver, WA

USA

Phone: +1.360.513.2293

EMail: marla.azinger@frontiercorp.com

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

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

nmalykh@gmail.com

1Regional Internet Registry.

2Общей для внешнего мира и клиентов сервис-провайдера. Прим. перев.

3Port Control Protocol.

4ICMP destination unreachable.

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

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

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

 

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

RFC 6554 An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)

Internet Engineering Task Force (IETF)                            J. Hui
Request for Comments: 6554                                   JP. Vasseur
Category: Standards Track                                  Cisco Systems
ISSN: 2070-1721                                                D. Culler
                                                             UC Berkeley
                                                               V. Manral
                                                     Hewlett Packard Co.
                                                              March 2012

An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)

Заголовок IPv6 Routing для заданных отправителем маршрутов с протоколом RPL

PDF

Аннотация

В сетях LLN1 ограничения памяти в маршрутизаторах могут снижать число поддерживаемых ими маршрутов. В некоторых конфигурациях необходимо использовать маршрутизаторы с ограниченной памятью для доставки дейтаграмм узлам сетей LLN. Протокол RPL2 может служить в некоторых сетях для хранения большинства (если не всех) маршрутов в одном (например, корень DAG3) или нескольких маршрутизаторах и пересылки дейтаграмм IPv6 с использованием заданного отправителем маршрута для отказа от больших таблиц маршрутизации на устройствах с ограниченной памятью. В этом документе определён новый тип заголовка IPv6 Routing для доставки дейтаграмм в домене маршрутизации RPL.

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

Этот документ содержит проект стандарта Internet (Internet Standards Track).

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

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

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

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

RPL является протоколом маршрутизации IPv6 на основе вектора удалённости, предназначенным для сетей LLN [RFC6550]. Ресурсы таких сетей (скорость передачи, производительность процессоров, потребляемая мощность, память) обычно ограничены. В частности, некоторые сети LLN могут использовать маршрутизаторы, где нехватка памяти позволяет узлам поддерживать лишь небольшое число принятых по умолчанию маршрутов. Однако такие маршрутизаторы с ограниченной памятью приходится использовать для пересылки дейтаграмм и поддержки доступности в LLN.

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

В этом документе описан заголовок заданной источником маршрутизации (Source Routing Header или SRH) для использования строго между маршрутизаторами RPL в маршрутном домене RPL, который представляет собой набор маршрутизаторов RPL с общим администрированием. Границы маршрутных доменов определяются системой сетевого управления путём назначения некоторых каналов внешними (междоменными).

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

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

2. Обзор

Формат SRH основан на формате заголовка маршрутизации типа 0 (RH0) [RFC2460]. Однако SRH добавляет механизм сжатия записей source route при использовании всеми записями одного префикса с передачей адреса получателя IPv6 в пакете с опцией SRH — этот типовой вариант работы в LLN с заданной отправителем маршрутизацией. Механизм сжатия снижает расход дефицитных ресурсов, таких как пропускная способность канала.

SRH отличается от RH0 также правилами обработки для смягчения проблем безопасности, которые привели к отказу от RH0 [RFC5095]. Во-первых, маршрутизаторы RPL реализуют строгую политику маршрутизации от источника, где каждый узел пересылки IPv6 между отправителей и получателем указывается в SRH. Отметим, что source route может быть подмножеством пути между фактическим отправителем и получателем, как описано ниже. Во-вторых, SRH применяется лишь между маршрутизаторами RPL в одном домене маршрутизации RPL. Граничные маршрутизаторы RPL, отвечающие за соединение доменов маршрутизации RPL и доменов IP с другими протоколами маршрутизации, не пропускают дейтаграммы с заголовком SRH через границу домена маршрутизации RPL. В-третьих, маршрутизатор RPL для предотвращения петель отбрасывает дейтаграммы, включающие несколько адресов, назначенных интерфейсам данного маршрутизатора.

Имеется 2 случая, определяющие способ включения SRH, когда маршрутизатору RPL нужен заголовок SRH для доставки дейтаграмм адресату.

  1. Если SRH задаёт полный путь от источника к получателю, маршрутизатор помещает SRH непосредственно в дейтаграмму.

  2. Если SRH задаёт лишь часть пути от источника к адресату, маршрутизатор использует туннель IPv6-in-IPv6 [RFC2473] и помещает SRH во внешний заголовок IPv6. Использование туннеля гарантирует неизменность дейтаграммы при доставке и отправку сообщений ICMP об ошибках источнику заголовка SRH, а не исходной дейтаграммы.

В сети RPL вариант 1 возникает при размещении источника и получателя в одном маршрутном домене RPL и применяется один заголовок SRH для задания всего пути от источника к получателю, как показано на рисунке 1.

+--------------------+
|                    |
|  (S) -------> (D)  |
|                    |
+--------------------+

Рисунок 1. Домен маршрутизации RPL.


В этом примере дейтаграммы от источника S к адресату D имеет вид, показанный на рисунке 2.

+---------+---------+-------------//-+
|Заголовок|Заголовок| Данные         |
|  IPv6   |   SRH   | IPv6           |
+---------+---------+-------------//-+

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


Адрес S передаётся в поле Source Address заголовка IPv6, адрес D — в последней записи SRH на всех интервалах пересылки, кроме последнего, где он переносится в поле Destination Address заголовка IPv6 в пакете с SRH.

Вариант 2 возникает в сети RPL для всех дейтаграмм, отправитель и/или получатель которых находится за пределами домена маршрутизации RPL, как показано на рисунке 3.

               +-----------------+
               |                 |
               |  (S) --------> (R) --------> (D)
               |                 |
               +-----------------+
               Маршрутный домен RPL

               +-----------------+
               |                 |
(S) --------> (R) --------> (D)  |
               |                 |
               +-----------------+
               Маршрутный домен RPL

               +-----------------+
               |                 |
(S) --------> (R) ------------> (R) --------> (D)
               |                 |
               +-----------------+
               Маршрутный домен RPL

Рисунок 3. Взаимодействие с внешним доменом.

На рисунке 3 R указывает граничный маршрутизатор RPL (соединение с другими доменами маршрутизации) или обычный маршрутизатор RPL (подключение хоста). Структура дейтаграмм в домене маршрутизации RPL показана на рисунке 4.

+---------+---------+----------+-------------//-+
| Внешний |Заголовок|Внутренний| IPv6           |
|заголовок|   SRH   |заголовок | Payload        |
|  IPv6   |         |   IPv6   |                |
+---------+---------+----------+-------------//-+
                     <---  Исходный пакет   --->
 <---           Туннельный пакет            --->

Рисунок 4. Структура дейтаграммы в RPL.


Отметим, что внешний заголовок (с SRH) добавляют и удаляют маршрутизаторы RPL.

Вариант 2 возникает также в случае, когда маршрутизатору RPL нужно вставить заданный источником маршрут при пересылке дейтаграммы. Один из таких вариантов использования в сети RPL возникает, когда весь поток трафика RPL идёт через граничный маршрутизатор и тот использует заданные источником маршруты для доставки дейтаграмм адресатам. При включении SRH с использованием туннеля граничный маршрутизатор инкапсулирует полученную дейтаграмму в исходной форме с использованием IPv6-in-IPv6 и включает SRH во внешний заголовок IPv6.

+-----------------+
|                 |
|  (S) -------\   |
|              \  |
|               (LBR)
|              /  |
|  (D) <------/   |
|                 |
+-----------------+
Маршрутный домен RPL

Рисунок 5. Граничный маршрутизатор.


В примере на рисунке 5 дейтаграммы от S к D проходят через граничный маршрутизатор сети LLN (LBR). Между S и LBR дейтаграммы маршрутизируются с использованием графа DAG, построенного RPL и не включают SRH. Маршрутизатор LBR инкапсулирует полученные дейтаграммы с использованием IPv6-in-IPv6 и SRH во внешнем заголовке IPv6.

3. Формат заголовка RPL Routing

Формат заголовка Source Routing Header показан ниже.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  |  Hdr Ext Len  | Routing Type  | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CmprI | CmprE |  Pad  |               Reserved                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Addresses[1..n]                        .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Next Header

8-битовый селектор, указывающий тип заголовка сразу после заголовка Routing. Применяются те же значения, что и в поле IPv6 Next Header [RFC2460].

Hdr Ext Len

8-битовое целое число без знака, указывающее размер заголовка Routing в 8-октетных словах без учёта первых 8 октетов. Отметим, что при сжатии Addresses[1..n] (CmprI или CmprE отлично от 0) значение Hdr Ext Len не равно удвоенному числу адресов.

Routing Type

8-битовый селектор, указывающий вариант заголовка Routing. Для SRH нужно устанавливать Routing Type = 3.

Segments Left

8-битовое целое число без знака, указывающее количество оставшихся сегментов маршрута, т. е. явно заданных промежуточных узлов, которые нужно пройти до попадания к адресату. Источник SRH устанавливает в этом поле значение n, равное числу адресов в Addresses[1..n].

CmprI

4-битовое целое число без знака, указывающее количество опущенных октетов префикса для каждого сегмента, кроме последнего (т. е. сегментов 1 — n-1). Например, SRH с полными адресами IPv6 в Addresses[1..n-1] устанавливает CmprI = 0.

CmprE

4-битовое целое число без знака, указывающее количество опущенных октетов префикса для последнего сегмента (т. е. сегмента n). Например, SRH с полными адресами IPv6 в Addresses[1..n-1] устанавливает CmprE = 0.

Pad

4-битовое целое число без знака, указывающее количество октетов, используемых для заполнения после Address[n] в конце SRH.

Reserved

Резервное поле, которое должно устанавливаться в 0 при передаче, а получатель должен игнорировать его.

Address[1..n]

Вектор адресов с номерами 1 — n. Каждый элемент [1..n-1] имеет размер (16 — CmprI), а элемент [n] — (16-CmprE). Создатель SRH помещает адрес IPv6 следующего (первого) узла пересылки в поле Destination Address заголовка IPv6, а адрес IPv6 второго интервала пересылки в первый элемент Address[1..n] (т. е. Address[1]).

SRH использует такой же базовый формат как заголовок 0 типа 0 [RFC2460]. При передаче полных адресов IPv6 поля CmprI, CmprE, Pad имеют значение 0 и единственным различием между SRH и Type 0 является кодирование поля Routing Type.

В базовой конфигурации маршрутного домена RPL все маршрутизаторы домена используют общий префикс. Поля CmprI, CmprE и Pad позволяют сжать вектор Address[1..n] при использовании одного префикса во всех записях, совпадающего с префиксом поля IPv6 Destination Address в заголовке пакета с SRH. Поля CmprI и CmprE указывают число октетов префикса, совпадающих с IPv6 Destination Address в пакете с SRH. Общие октеты не передаются в заголовке Routing и каждая запись Address[1..n-1] имеет размер (16 — CmprI), а Address[n] — (16 — CmprE) октетов. При отличном от 0 CmprI или CmprE между последней записью Address[n] и концом заголовка Routing могут остаться неиспользуемые октеты. Поле Pad указывает число таких октетов, для которых применяется заполнение. Если оба поля CmprI и CmprE имеют значение 0, поле Pad должно содержать 0.

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

Групповые адреса недопустимо указывать в SRH или поле IPv6 Destination Address дейтаграммы с SRH.

4. Поведение маршрутизатора RPL

4.1. Генерация заголовков Source Route

Для доставки дейтаграммы IPv6 адресату маршрутизатору может потребоваться создать новый заголовок SRH и строго задать source route. Когда маршрутизатор является источником исходного пакета и известно, что адресат находится в том же маршрутном домене RPL, маршрутизатору следует включать SRH напрямую в исходный пакет. В иных случаях маршрутизатор должен использовать туннель IPv6-in-IPv6 [RFC2473] и помещать SRH в заголовок туннеля. Использование туннеля IPv6-in-IPv6 обеспечивает неизменность доставляемой дейтаграммы и доставку сообщений ICMPv6 об ошибках, связанных с SRH, создавшему заголовок SRH маршрутизатору.

При использовании туннеля IPv6-in-IPv6 для соблюдения IPv6 Hop Limit в исходной дейтаграмме маршрутизатор RPL, создающий SRH должен установить Segments Left меньше значения IPv6 Hop Limit в исходной дейтаграмме при пересылке. Если source route длиннее чем IPv6 Hop Limit в исходной дейтаграмме, в SRH следует включать лишь начальные узлы пересылки (определяется IPv6 Hop Limit в исходной дейтаграмме). Если маршрутизатор RPL не является источником исходной дейтаграммы, значение поля IPv6 Hop Limit в ней уменьшается до создания SRH. После генерации SRH маршрутизатор RPL уменьшает IPv6 Hop Limit исходной дейтаграммы на SRH Segments Left. Обработка SRH Segments Left и IPv6 Hop Limit исходной дейтаграммы обеспечивает возникновение ошибок ICMPv6 Time Exceeded как в обычных сетях IPv6 без туннелирования дейтаграмм.

Для предотвращения фрагментации желательно использовать MTU, позволяющие дополнительно расширять заголовок по меньшей мере до 1280 + 40 (внешний заголовок IP) + SRH_MAX_SIZE, где SRH_MAX_SIZE — максимальная длина пути в данной сети RPL. Однако для этого взаимодействующие конечные точки должны знать MTU на пути (например, от Path MTU Discovery). К сожалению большие значения MTU могут быть недоступны на некоторых каналах (например, 1280 октетов для каналов 6LoWPAN4). Однако предполагается, что большая часть трафика в сетях этого типа состоит из пакетов размером меньше MTU и фрагментация не вызовет проблем.

4.2. Обработка заголовков Source Route

Как указано в [RFC2460], заголовок маршрутизации не рассматривается и не обрабатывается, пока пакет не достигнет узла, указанного в поле Destination Address заголовка IPv6, где диспетчеризация по полю Next Header непосредственно предшествующего заголовка приводит к вызову модуля заголовка Routing.

Назначение SRH очень похоже на функции заголовка Routing типа 0, определённого в [RFC2460]. После обработки заголовка маршрутизации и представления дейтаграммы IPv6 модулю IPv6 для дальнейшей обработки поле IPv6 Destination Address содержит адрес следующего узла пересылки. Если пересылаемая дейтаграмма IPv6 содержит заголовок SRH с отличным от 0 полем Segments Left и IPv6 Destination Address не относится к тому же каналу, маршрутизатор должен отбросить дейтаграмму и ему следует передать сообщение ICMP Destination Unreachable (ICMPv6 Type 1) с ICMPv6 Code = 7 по адресу отправителя в пакете. Этот код ICMPv6 указывает, что IPv6 Destination Address не относится к тому же каналу и маршрутизатор не может выполнить требование строгой маршрутизации, заданной источником. При генерации сообщения ICMPv6 об ошибке должны соблюдаться правила параграфа 2.4 в [RFC4443].

Для обнаружения петель в SRH маршрутизатор должен проверить наличие в заголовке нескольких адресов своих интерфейсов. Если какой-либо адрес указан более 1 раза с разделением по меньшей мере одним адресом другого маршрутизатора, пакет должен отбрасываться и маршрутизатору следует передать сообщение ICMP Parameter Problem с кодом 0 по адресу отправителя. Хотя такая проверка существенно увеличивает издержки при обработке пакетов, она нужна для смягчения поглощающих пропускную способность атак, которые привели в своё время к отказу от заголовка RH0 [RFC5095].

Ниже приведён псевдо-код алгоритма обработки SRH.

   if Segments Left = 0 {
      обрабатывается следующий заголовок в пакете, тип которого
      указывает поле Next Header в заголовке Routing
   }
   else {
      рассчитывается число адресов в заголовке Routing
      n = (((Hdr Ext Len * 8) - Pad - (16 - CmprE)) / (16 - CmprI)) + 1

      if Segments Left > n {
         передаётся сообщение ICMP Parameter Problem с Code = 0, по Source
         Address с указанием Segments Left и пакет отбрасывается
      }
      else {
         Segments Left уменьшается на 1

         рассчитывается индекс следующего адреса (i) в векторе адресов как
         n - Segments Left

         if Address[i] или IPv6 Destination Address является групповым {
            пакет отбрасывается
         }
         else if 2 или более записи в Address[1..n] относятся к локальному
                 интерфейсу и разделены хотя бы 1 адресом, не назначенным
                 локальному интерфейсу {
            передаётся ICMP Parameter Problem (Code 0) и пакет отбрасывается
         }
         else {
            меняются местами IPv6 Destination Address и Address[i]

            if IPv6 Hop Limit ≤ 1 {
               передаётся ICMP Time Exceeded, Hop Limit Exceeded в сообщении
               Transit по Source Address и пакет отбрасывается
            }
            else {
               Hop Limit уменьшается на 1

               пакет заново представляется модулю IPv6 для передачи новому
               получателю
            }
         }
      }
   }

Маршрутизаторы RPL отвечают за вставку SRH лишь при передаче между собой.

  1. Для дейтаграмм, адресованных маршрутизатору RPL, он выполняет обработку обычным способом. Например, при включении SRH с использованием туннеля, для которого маршрутизатор служит конечной точкой, он удаляет внешний заголовок IPv6 вместе с SRH.

  2. Дейтаграммы, адресованные другим узлам домена маршрутизации RPL, пересылаются в нужный интерфейс.

  3. Дейтаграммы для узлов за пределами маршрутного домена RPL отбрасываются, если внешний заголовок IPv6 содержит заголовок SRH, созданный не маршрутизатором RPL, который пересылает дейтаграмму.

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

5.1. Атаки на заданную отправителем маршрутизацию

Механизмы защиты сообщений RPL, определённые в [RFC6550], не применимы к заголовкам RPL SRH. Данная спецификация не обеспечивает механизмов защиты целостности, конфиденциальности и аутентификации SRH.

В [RFC5095] заголовок Routing типа 0 был отменен из-за возможности атак, указанных в этом документе. Такие атаки включают обход устройств фильтрации, доступ в недостижимые иными путями системы Internet, раскрытие топологии сетей, истощение пропускной способности и нарушение anycast-адресации.

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

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

Атаки указанных типов и другие (например, нарушение anycast-адресации и раскрытие топологии сети) возможны в домене RPL при использовании этой спецификации.

5.2. Атаки ICMPv6

Создание сообщений ICMPv6 об ошибках может использоваться для организации атак на службы путём отправки вызывающих ошибки SRH в последовательных дейтаграммах. Реализация, корректно следующая параграфу 2.4 в [RFC4443], будет защищена механизмом ограничения частоты ICMPv6.

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

В этом документе определён новый тип заголовка IPv6 Routing «RPL Source Route Header», которому агентство IANA выделило значение 3. Документ определяет также новый код ICMPv6 Destination Unreachable «Error in Source Routing Header», для которого агентство IANA выделило значение 7.

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

Авторы благодарны Jari Arkko, Ralph Droms, Adrian Farrel, Stephen Farrell, Richard Kelsey, Suresh Krishnan, Erik Nordmark, Pascal Thubert, Sean Turner и Tim Winter за комментарии и предложения, которые помогли создать документ.

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 24605, December 1998.

[RFC2473] Conta, A. and S. Deering, «Generic Packet Tunneling in IPv6 Specification», RFC 2473, December 1998.

[RFC4443] Conta, A., Deering, S., and M. Gupta, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 4443, March 2006.

[RFC5095] Abley, J., Savola, P., and G. Neville-Neil, «Deprecation of Type 0 Routing Headers in IPv6», RFC 5095, December 2007.

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

[RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, «RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks», RFC 6550, March 2012.

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

Jonathan W. Hui

Cisco Systems

170 West Tasman Drive

San Jose, California 95134

USA

Phone: +408 424 1547

EMail: jonhui@cisco.com

JP. Vasseur

Cisco Systems

11, Rue Camille Desmoulins

Issy Les Moulineaux 92782

France

EMail: jpv@cisco.com

David E. Culler

UC Berkeley

465 Soda Hall

Berkeley, California 94720

USA

Phone: +510 643 7572

EMail: culler@cs.berkeley.edu

Vishwas Manral

Hewlett Packard Co.

19111 Pruneridge Ave.

Cupertino, California 95014

USA

EMail: vishwas.manral@hp.com


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

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

nmalykh@protokols.ru

1Low-Power and Lossy Network — сеть со слабым питанием и потерями.

2Routing Protocol for Low-Power and Lossy Networks — протокол маршрутизации для сетей LLN.

3Directed Acyclic Graph — направленный ациклический граф.

4IPv6 Low-Power Wireless Personal Area Network — персональная беспроводная сеть IPv6 со слабым питанием.

5Заменен RFC 8200. Прим. перев.

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

RFC 6550 RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks

Internet Engineering Task Force (IETF)                    T. Winter, Ed.
Request for Comments: 6550
Category: Standards Track                                P. Thubert, Ed.
ISSN: 2070-1721                                            Cisco Systems
                                                               A. Brandt
                                                           Sigma Designs
                                                                  J. Hui
                                                   Arch Rock Corporation
                                                               R. Kelsey
                                                       Ember Corporation
                                                                P. Levis
                                                     Stanford University
                                                               K. Pister
                                                           Dust Networks
                                                               R. Struik
                                             Struik Security Consultancy
                                                             JP. Vasseur
                                                           Cisco Systems
                                                            R. Alexander
                                                    Cooper Power Systems
                                                              March 2012

RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks

RPL — протокол маршрутизации IPv6 для сетей с недостаточным электропитанием и высокими потерями

PDF

Аннотация

Сети LLN1 являются классом сетей, где маршрутизаторы и соединения между ними имеют определённые ограничения. Маршрутизаторы LLN обычно имеют ограниченную производительность, память и питание (батареи). Для соединений характерны высокие потери, малая скорость и нестабильность. При этом сети LLN могут включать от десятков до тысяч маршрутизаторов. Поддерживаемые потоки трафика включают соединения «точка-точка» (между устройствами внутри LLN), «один со многими» (point-to-multipoint — от центральной точки управления к подмножеству устройств внутри LLN) и «многие с одним» (multipoint-to-point — от устройств внутри LLN к центральной точке управления). Этот документ задаёт протокол маршрутизации IPv6 для сетей LLN (RPL2), обеспечивающий механизм поддержки многоточечных соединений между устройствами LLN и центральной точкой управления в обоих направлениях. Доступна также поддержка соединений «точка-точка».

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

Этот документ содержит проект стандарта Internet (Internet Standards Track).

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

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

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

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

Сети LLN в основном состоят из узлов с ограничениями (производительность обработки, память, а иногда батарейное питание). Эти маршрутизаторы соединены каналами с потерями, которые обычно имеют малую скорость и часто нестабильны. Другой характеристикой таких сетей является картина трафика — соединения в сетях часто организуются по схеме «один со многими» (point-to-multipoint) или «множество с одним» (multipoint-to-point). Такие сети могут включать тысячи узлов. Указанные характеристики предъявляют серьёзные требования к маршрутизации, которые рабочая группа IETF ROLL определила для протокола маршрутизации в сетях LLN в документах [RFC5867], [RFC5826], [RFC5673], [RFC5548]. Этот документ задаёт протокол маршрутизации RPL3. Следует подчеркнуть, что протокол RPL, разработанный в соответствии с указанными документами, может иметь более широкое применение.

1.1. Принципы работы

Протокол RPL был разработан с целью выполнения требований [RFC5867], [RFC5826], [RFC5673], [RFC5548].

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

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

Для работы RPL нужны двухсторонние каналы. В некоторых вариантах LLN эти каналы могут быть асимметричными. Нужна проверка доступности маршрутизатора до того, как его можно будет применять в качестве родителя. В RPL предполагается включение внешнего механизма в фазе выбора родителя для проверки свойств канала и доступности соседа. Детектирование недоступности соседей (Neighbor Unreachability Detection или NUD) обеспечивает такой механизм, но возможны и другие варианты, включая обнаружение двухсторонней пересылки (Bidirectional Forwarding Detection или BFD) [RFC5881], а также рекомендации нижележащих уровней через триггеры L2, подобные описанным в [RFC5184]. В общем случае механизм, реагирующий на трафик, является более предпочтительным за счёт минимизации издержек на отслеживание неиспользуемых каналов.

RPL также предполагает внешний механизм для доступа к управляющей информации и её доставки (называется RPL Packet Information — информация пакета RPL) в пакетах данных. Определение RPL Packet Information дано в параграфе 11.2 и эти сведения позволяют связать пакет данных с RPL Instance и проверить состояние маршрутизации RPL. Примером такого механизма является опция RPL [RFC6553]. Механизм нужен для всех пакетов, за исключением случая использования строгой маршрутизации, заданной отправителем (т. е. пакетов нисходящего направления в режиме Non-Storing, как описано в разделе 9), когда сама природа маршрутизации предотвращает петли и смягчает необходимость передачи RPL Packet Information. В сопровождающих спецификациях могут быть заданы дополнительные способы передачи RPL Packet Information в пакетах IPv6, а также расширен состав RPL Packet Information для поддержки дополнительных функций.

RPL поддерживает механизм распространения информации по формируемой динамически топологии сети. Это распространение обеспечивает минимальную конфигурацию узлов, позволяющую им работать по большей части автономно. Механизм использует Trickle [RFC6206] для оптимизации распространения, как описано в параграфе 8.3.

В некоторых вариантах применения RPL собирает топологии маршрутизаторов, владеющих независимыми префиксами, которые могут (не обязательно) быть агрегируемыми в зависимости от их происхождения. Принадлежащий маршрутизатору префикс анонсируется как относящийся к каналу (on-link).

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

В частности, RPL может распространять информацию IPv6 ND4, такую как PIO5 [RFC4861] и RIO6 [RFC4191]. Данные ND, распространяемые RPL, сохраняют свою исходную семантику при передаче от маршрутизатора к хосту с ограниченными расширениями при передаче между маршрутизаторами, хотя их не следует путать с маршрутными анонсами и никогда не следует распространять напрямую в другие протоколы маршрутизации. Узлы RPL часто объединяют в себе характеристики поведения хоста и маршрутизатора. Как хост, узел обрабатывает опции в соответствии с [RFC4191], [RFC4861], [RFC4862] и [RFC6275], а как маршрутизатор, может анонсировать информацию из опций, нужную для конкретного канала, например в сообщениях RA7. Описание этого выходит за рамки документа.

Набор сопровождающих эту спецификацию документов содержит рекомендации в форме заявлений о применимости, определяющих вопросы функционирования для автоматизации зданий (Building Automation), домашней автоматизации (Home Automation), а также промышленных и городских приложений.

1.2. Взаимодействие с канальным уровнем

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

Разработчики могут найти в [RFC3819] полезные ссылки для создания интерфейсов канального уровня между RPL и конкретными технологиями канального уровня.

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

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

В документе применяется терминология [ROLL-TERMS], а также перечисленные ниже термины.

DAG (Directed Acyclic Graph) — направленный ациклический граф

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

DAG root — корень DAG

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

Destination-Oriented DAG (DODAG) — ориентированный на адресата граф DAG

DAG с корнем у одного адресата, т. е. в одном корне DAG (DODAG root) без выходных рёбер.

DODAG root — корень DODAG

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

Virtual DODAG root — виртуальный корень DODAG

Виртуальный корень DODAG создаётся в результате скоординированной работы двух и более маршрутизаторов RPL (например, 6LBR9) с синхронизацией состояний DODAG, как единого корня DODAG (со множеством интерфейсов) в сети LLN. Координация скорей всего происходит между устройствами по надёжному транзитному каналу, а детали этой схемы выходят за рамки спецификации (определены в сопроводительных документах).

Up — вверх

Указывает направление от узлов-листьев к корню DODAG по рёбрам дерева DODAG. Это общепринято при рассмотрении графов, где более удалённые от корня вершины графа считаются более глубокими или низкими.

Down — вниз

Указывает направление от корня DODAG к узлам-листьям по рёбрам DODAG.

Rank — ранг

Ранг узла определяет его позицию относительно корня DODAG. Ранг строго возрастает в направлении Down и уменьшается в направлении Up. Точное значение Rank зависит от применяемой предметной функции DAG (OF). Ранг может просто соответствовать топологической дистанции, быть функцией метрики каналов, а также учитывать иные свойства (например, ограничения).

Objective Function (OF) — предметная функция

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

Objective Code Point (OCP) — код предметной функции

Идентификатор, указывающий предметную функцию OF, используемую DODAG.

RPLInstanceID — идентификатор экземпляра RPL

Уникальный в масштабе сети идентификатор экземпляра протокола. Графы DODAG с общим RPLInstanceID используют одну предметную функцию OF.

RPL Instance — экземпляр RPL

RPL Instance — это один или множество графов DODAG с общим RPLInstanceID. В большинстве случаев узел RPL может относиться к одному графу DODAG экземпляра RPL. Каждый экземпляр RPL работает независимо от других RPL Instance. Данный документ описывает операции в рамках одного RPL Instance.

DODAGID

Идентификатор корня DODAG, который должен быть достижимым адресом IPv6 для корневого узла10. Граф DODAG должен быть уникальным в рамках RPL Instance в сети LLN. Для указания DODAG служит пара (RPLInstanceID, DODAGID).

DODAG Version — версия DODAG

Конкретная итерация (версия) DODAG с данным DODAGID.

DODAGVersionNumber — номер версии DODAG

Счётчик, инкрементируемый корнем для формирования новой версии графа DODAG, однозначно указываемой триплетом (RPLInstanceID, DODAGID, DODAGVersionNumber).

Goal — цель

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

Grounded — приземленный (граф)

Граф DODAG считается «приземленным» (grounded), если корень DODAG может удовлетворять цели (Goal).

Floating — плавайющий (граф)

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

DODAG parent — родитель DODAG

Родителем узла в DODAG является один из смежных узлов на пути к корню DODAG. Ранг родителя DODAG всегда меньше ранга данного узла (3.5.1. Сравнение ранга).

Sub-DODAG — субграф DODAG

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

Local DODAG

Локальные графы DODAG содержат единственный корневой узел и позволяют ему выделять RPL Instance, указываемый локальным RPLInstanceID, и управлять этим экземпляром без координации с другими узлами. Обычно это делается для оптимизации маршрутов к получателю внутри LLN (5. Экземпляр RPL).

Global DODAG

Global DODAG использует глобальный идентификатор RPLInstanceID, который может координироваться с другими узлами (5. Экземпляр RPL).

DIO

DODAG Information Object (6.3. Информационный объект DODAG)

DAO

Destination Advertisement Object (6.4. Сообщение DAO)

DIS

DODAG Information Solicitation (6.2. Сообщение DIS)

CC

Consistency Check (6.6. Проверка согласованности)

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

3. Обзор протокола

В этом разделе описывается протокол RPL в стиле [RFC4101]. Детали протокола описаны в других разделах.

3.1. Топология

Здесь описаны базовые варианты топологии RPL и правила формирования топологии, т. е. графа DODAG.

3.1.1. Создание топологии

Сети LLN, такие как радиосети (Radio Network), обычно не имеют предопределённой топологии, обеспечиваемой, например, кабельными соединениями «точка-точка». Поэтому протоколу RPL нужно обнаруживать каналы, а затем экономно выбирать партнёров.

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

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

3.1.2. Идентификаторы RPL

В RPL используется 4 значения для идентификации и поддержки топологии.

RPLInstanceID

RPLInstanceID указывает один или несколько графов DODAG. Сеть может иметь множество RPLInstanceID, каждый из которых определяет независимый набор DODAG, который можно оптимизировать для разных предметных функций (OF) и/или приложений. Набор DODAG, указанный RPLInstanceID, называется RPL Instance. Все DODAG одного экземпляра RPL используют одну функцию OF.

DODAGID

Областью действия DODAGID является экземпляр RPL. Комбинация RPLInstanceID и DODAGID однозначно указывает граф DODAG в сети. RPL Instance может включать множество DODAG с уникальными DODAGID.

DODAGVersionNumber

Областью действия DODAGVersionNumber является DODAG. Графы DODAG иногда реконструируются из корня DODAG путём инкрементирования DODAGVersionNumber. Комбинация RPLInstanceID, DODAGID и DODAGVersionNumber однозначно указывает DODAG Version.

Rank

Областью действия Rank является DODAG Version. Ранг задаёт частичное упорядочение в DODAG Version, задавая позиции отдельных узлов относительно корня DODAG.

3.1.3. Экземпляры RPL, графы DODAG и версии DODAG

Экземпляр RPL содержит один или несколько корней DODAG. RPL Instance может обеспечивать маршруты к некоторым целевым префиксам, достижимым через корни DODAG или по другим путям внутри графа DODAG. Корни могут работать независимо или координироваться через сеть, которая не обязательно является LLN.

Ниже перечислены возможные варианты RPL Instance.

  • Один граф DODAG с одним корнем.

    Например, граф DODAG, оптимизированный для минимизации задержки, с корнем в виде централизованного контроллера освещения в системе домашней автоматизации.

  • Множество некоординированных DODAG с независимыми корнями (разные DODAGID).

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

  • Один граф DODAG с виртуальным корнем, координирующим приёмники LLN (с одним DODAGID) через опорную сеть.

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

  • Комбинация перечисленных ниже вариантов, подходящая для определённого приложения.

Каждый пакет RPL связывается с конкретным RPLInstanceID (см. параграф 11.2) и, следовательно, RPL Instance (раздел 5). Предоставление или автоматическое обнаружение сопоставлений RPLInstanceID с типом или службой трафика приложений выходит за рамки спецификации (определяется в сопровождающих документах).

На рисунке 1 показан пример экземпляра RPL, содержащего три DODAG с корнями R1, R2, R3, каждый из которых анонсирует одно значение RPLInstanceID. Линии указывают соединения между родителями и потомками.

+----------------------------------------------------------------+
|                                                                |
| +--------------+                                               |
| |              |                                               |
| |     (R1)     |            (R2)                   (R3)        |
| |     /  \     |            /| \                  / |  \       |
| |    /    \    |           / |  \                /  |   \      |
| |  (A)    (B)  |         (C) |  (D)     ...    (F) (G)  (H)    |
| |  /|\     |\  |         /   | / |\             |\  |    |     |
| | : : :    : : |        :   (E)  : :            :  `:    :     |
| |              |            / \                                |
| +--------------+           :   :                               |
|      DODAG                                                     |
|                                                                |
+----------------------------------------------------------------+

Рисунок 1. Экземпляр RPL.


На рисунке 2 показано, как инкрементирование DODAGVersionNumber ведёт к появлению новой версии DODAG и новой топологии DODAG. Отметим, что новое значение DODAG Version не всегда предполагает другую топологию DODAG. Для восприятия некоторых топологических изменёний требуется новая версия DODAG, как описано ниже.

+----------------+                +----------------+
|                |                |                |
|      (R1)      |                |      (R1)      |
|      /  \      |                |      /         |
|     /    \     |                |     /          |
|   (A)    (B)   |         \      |   (A)          |
|   /|\   / |\   |    ------\     |   /|\          |
|  : : (C)  : :  |           \    |  : : (C)       |
|                |           /    |        \       |
|                |    ------/     |         \      |
|                |         /      |         (B)    |
|                |                |          |\    |
|                |                |          : :   |
|                |                |                |
+----------------+                +----------------+
    Версия N                         Версия N+1

Рисунок 2. Версия DODAG.


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

3.2. Восходящие маршруты и создание DODAG

RPL предоставляет восходящие (Up) маршруты в направлении корней DODAG, формирующие оптимизированный граф DODAG в соответствии с предметной функцией (OF). Узлы RPL поддерживают графы DODAG с помощью сообщений DIO (6.3. Информационный объект DODAG).

3.2.1. Предметная функция

Предметная функция (Objective Function или OF) определяет для узлов RPL способ выбора и оптимизации маршрутов в рамках экземпляра RPL. OF указывается целевым кодом OCP в опции DIO Configuration и определяет, как узлы транслируют метрику и ограничения, определённые в [RFC6551], в ранг (Rank), аппроксимирующий удалённость от корня DODAG. OF также определяет способ выбора родителей. Дополнительные сведения о предметных функциях приведены в разделе 14, а также в [RFC6551], [RFC6552] и сопроводительных спецификациях.

3.2.2. Восстановление DODAG

Корень DODAG запускает глобальную операцию восстановления, увеличивая DODAGVersionNumber, что ведёт к созданию новой версии DODAG. Узлы в новой DODAG Version могут выбирать новую позицию, ранг которой не привязан к значению Rank в прежней DODAG Version.

RPL также поддерживает механизмы, которые могут применяться для локального восстановления в рамках DODAG Version. Сообщение DIO задаёт параметры, настраиваемые и контролируемые политикой в корне DODAG.

3.2.3. Защита

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

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

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

Третий режим называется authenticated и использует заранее установленные ключи, как в режиме preinstalled, но узлы могут подключаться к RPL Instance лишь в качестве листьев. Для подключения аутентифицированного экземпляра RPL Instance как маршрутизатора требуется получение ключа от удостоверяющего центра, но спецификация не задаёт процесс получения ключа. Отметим, что сама спецификация не задаёт деталей реализации RPL для защищённой работы в режиме authenticated. Для безопасной работы реализации RPL в аутентифицированном режиме нужны дополнительные спецификации, задающие детали запроса и получения аутентификационного материала (ключи, сертификаты) и его источники (см. 10.3. Установка ключей).

3.2.4. «Приземлённые» и «плавающие» DODAG

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

3.2.5. Локальные DODAG

Узлы RPL могут оптимизировать маршруты к адресатам внутри LLN, формируя Local DODAG, где корнем DODAG является желаемый получатель. В отличие от глобальных DAG, которые могут содержать множество DODAG, локальные DAG имеют лишь один граф DODAG и, следовательно, — один корень DODAG. Локальные DODAG создаются по запросу.

3.2.6. Административные предпочтения

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

3.2.7. Проверка пути данных и обнаружение петель

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

Опция RPL Packet Information в пакетах данных включает ранг передающего узла. Несоответствие маршрута для пакета (Upward или Downward) и значений Rank для двух узлов говорит о возможной петле. При получении такого пакета узел инициирует локальную операцию восстановления. Например, если узел получает пакет, помеченный для передачи в восходящем направлении, а запись для пакета указывает, что передающий узел имеет меньший ранг, нежели принимающий, тогда принимающий узел может сделать вывод о том, что пакет не нужно передавать «наверх» (Upward) и граф DODAG не согласован.

3.2.8. Работа распределенного алгоритма

Высокоуровневый алгоритм построения графа DODAG приведён ниже.

  • Некоторые узлы настраиваются как корни DODAG с соответствующей конфигурацией DODAG.

  • Узлы анонсируют своё присутствие, принадлежность к DODAG, стоимость маршрутизации и метрику, передавая групповые для локального канала сообщения DIO всем узлам RPL.

  • Узлы прослушивают сообщения DIO и используют сведения из них для присоединения к новому графу DODAG (выбор родителей DODAG) или поддержки имеющегося DODAG в соответствии с заданной предметной функцией (OF) и рангом их соседей.

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

3.3. Нисходящие маршруты и анонсирование адресатов

RPL использует сообщения DAO для организации нисходящих (Downward) маршрутов. Сообщения DAO являются необязательным свойством приложений, которым нужен трафик point-to-multipoint (P2MP) или point-to-point (P2P). RPL поддерживает для трафика Downward два режима — Storing (с поддержкой состояний) и Non-Storing (маршрутизация, заданная отправителем — source route), описанные в разделе 9, и каждый RPL Instance работает в одном из этих режимов. В обоих случаях пакеты P2P передаются в восходящем направлении к корню DODAG, затем в нисходящем к конечному получателю (если получатель не находится на маршруте Upward). В режиме Non-Storing пакет будет проходить весь путь до корня DODAG и только потом пойдёт вниз (Down). В режиме Storing пакет может быть развернут вниз общим предком отправителя и получателя, не дойдя до корня DODAG.

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

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

3.4. Обнаружение маршрутов локальных DODAG

Сеть RPL может также поддерживать по запросу обнаружение DODAG для конкретных адресатов в LLN. Такие Local DODAG ведут себя несколько иначе, чем Global DODAG, однако они однозначно определяются парой DODAGID и RPLInstanceID. Идентификатор RPLInstanceID указывает, является ли DODAG локальным графом DODAG.

3.5. Свойства Rank

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

Детали расчёта Rank предметной функцией OF выходят за рамки спецификации. Расчёт может зависеть, например, от родителей, метрики узлов, а также их конфигурации и правил (14. Рекомендации для предметных функций).

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

Тип

Rank является абстрактным числовым значением.

Назначение

Rank указывает позицию в DODAG Version относительно соседей и не обязательно служит надёжной индикацией или подходящим выражением дистанции от корня или стоимости пути к нему.

Стабильность

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

Свойства

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

Абстракция

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

Значение Rank передаётся в процедуру выбора родителей DODAG в соответствии со стратегией предотвращения петель в RPL. Когда родитель добавлен и значение Rank для узла в DODAG анонсировано, дальнейший выбор узлом родителей DODAG и перемещение внутри DODAG ограничиваются в пользу предотвращения петель.

3.5.1. Сравнение ранга

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

Когда предметная функция OF вычисляет ранг, она работает с полным (16 битов) значением Rank. При сравнении рангов, например, для определения родительских отношений или обнаружения петель, применяется лишь целая часть Rank, которую определяет макрос DAGRank(), где floor(x) возвращает наибольшее целое число, не превышающее x.

              DAGRank(rank) = floor(rank/MinHopRankIncrease)

Например, если 16-битовое значение Rank задаёт десятичное число 27, а MinHopRankIncrease имеет десятичное значение 16, DAGRank(27) = floor(1.6875) = 1. Целая часть Rank будет иметь значение 1, а дробная — 11/16.

В соответствии с соглашениями этого документа использование макроса DAGRank(node) можно интерпретировать как DAGRank(node.rank), где node.rank указывает значение Rank, поддерживаемое узлом.

Узел A имеет Rank меньше ранга узла B, если DAGRank(A) < DAGRank(B), ранг узлов одинаков, если DAGRank(A) = DAGRank(B) и ранг узла A больше ранга узла B, если DAGRank(A) > DAGRank(B).

3.5.2. Отношения между рангами

При расчёте рангов для соседних узлов M и N в LLN поддерживаются указанные ниже свойства.

DAGRank(M) < DAGRank(N)

Узел M ближе к корню DODAG, нежели узел N. Узел M может быть родителем DODAG для узла N без риска возникновения петли. Кроме того, все родители N в наборе родителей DODAG должны иметь ранг меньше DAGRank(N). Иными словами, ранг, представленный узлом Node N, должен быть больше ранга, представленного любым из его родителей.

DAGRank(M) = DAGRank(N)

Позиции узлов M и N относительно корня DODAG похожи или идентичны. Маршрутизация через узел с тем же Rank может создавать петлю (если этот узел выберет маршрут с таким же Rank).

DAGRank(M) > DAGRank(N)

Узел M расположен дальше от корня DODAG, чем узел N. Кроме того, узел M может фактически входить в суб-DODAG узла N. Если N выберет M в качестве родителя DODAG, возникает риск создания петли.

Например, значение Rank можно рассчитать так, чтобы точно отслеживать ETX12, когда минимизируемой функцией OF метрикой является ETX, задержка или иной параметр в зависимости от функции OF, применяемой в DODAG.

3.6. Метрика маршрутов и ограничения в RPL

Метрика маршрутов используется протоколами маршрутизации для расчёта кратчайшего пути. Протоколы внутренней маршрутизации (Interior Gateway Protocol или IGP), такие как IS-IS [RFC5120] и OSPF [RFC4915], используют статическую метрику каналов. Эта метрика может просто отражать пропускную способность или полиномиальную функцию нескольких параметров, определяющих характеристики каналов. Некоторые протоколы маршрутизации поддерживают не одну метрику, но в подавляющем большинстве случаев для каждой (суб)топологии применяется одна метрика. Реже может использоваться вторая метрика для выбора при наличии нескольких равноценных путей (Equal Cost Multiple Path или ECMP). Оптимизацию нескольких метрик называют проблемой NP-complete и она иногда поддерживается централизованными машинами расчёта путей.

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

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

Функция OF отделена от метрики и ограничений, используемых RPL. С учётом диктуемых функцией OF правил ограничения выбора родителей DODAG, балансировки нагрузки, а также набора метрик и/или ограничений и т. п., выбор предпочтительного пути основывается на данных, передаваемых в опции контейнера DAG в сообщениях DIO. Набор поддерживаемых ограничений и метрик для узлов и каналов задан в [RFC6551]. Примерами могут служит путь с минимальной сквозной задержкой или путь, не проходящий через устройства с батарейным питанием.

3.7. Предотвращение петель

RPL пытается предотвратить возникновение петель при изменёнии базовой топологии и включает механизмы проверки путей на основе ранга для обнаружения петель (11. Пересылка пакетов, обнаружение и предотвращение петель). На практике это не гарантирует ни отсутствия петель, ни жёсткого ограничения времени сходимости, но может обнаруживать и устранять петлю, как только она будет использована. RPL применяет детектирование петель для продвижения пакетов в DODAG Version и запуске восстановления при необходимости.

3.7.1. «Жадность» и нестабильность

Узел считается «жадным», если он пытается переместиться вглубь (рост Rank) DODAG Version для расширения своего набора родителей или улучшения иной метрики. После присоединения узла к DODAG Version протокол RPL запрещает некоторые черты поведения (включая жадность) для предотвращения нестабильности DODAG Version.

Предположим, что узел желает получить и обработать сообщение DIO от узла в своём суб-DODAG, который обычно расположен глубже. В этом случае имеется вероятность наличия петли обратной связи, когда два или более узла продолжают попытки перемещения в DODAG Version, пытаясь оптимизировать друг друга. Такое поведение создаёт нестабильность. По этой причине RPL ограничивает случаи, когда узел может обрабатывать сообщения DIO от более глубоких узлов, некоторыми формами локального восстановления. Такой подход создаёт «горизонт событий», при котором на узел нет возможности влиять за пределами некого вклада в нестабильность, вносимого действиями узлов, которые могут находиться в его суб-DODAG.

3.7.1.1. Пример нестабильности при «жадном» выборе родителей
(A)                    (A)                    (A)
 |\                     |\                     |\
 | `-----.              | `-----.              | `-----.
 |        \             |        \             |        \
(B)       (C)          (B)        \            |        (C)
                         \        |            |        /
                          `-----. |            | .-----'
                                 \|            |/
                                 (C)          (B)

     -1-                    -2-                    -3-

Рисунок 3. «Жадный» выбор родителей DODAG.

На рисунке 3 показаны три конфигурации DODAG, где имеется пригодный для использования канал между (B) и (C). Слева (1) узел (A) является родителем DODAG для (B) и (C), посредине (A) является родителем DODAG для (B) и (C), а (B) также служит родителем (C). Справа узел (A) служит родителем DODAG для (B) и (C), а (C) — родителем для (B).

Если узел RPL слишком жаден и пытается выполнить оптимизацию для дополнительных родителей сверх наиболее предпочтительных, может возникать нестабильность. В примере на рисунке 3-1 узлы (B) и (C) могут предпочесть (A) как родителя DODAG, но мы рассмотрим вариант «жадности» с попыткой выполнить оптимизацию для двух родителей.

  • Пусть рисунок 3-1 задаёт начальные условия.

  • Предположим, что (C) может выйти из DODAG и вернуться с меньшим Rank, делая узлы (A) и (B) родителями DODAG, как показано на рисунке 3-2. Узел (C) в этом случае глубже (A) и (B) и имеет 2 родителей DODAG.

  • Предположим, что узел (B) жаден и хочет получать и обрабатывать сообщения DIO от (C), вопреки правилам RPL. Для этого (B) покидает DODAG и возвращается с меньшим Rank, принимая (A) и (C) как родителей DODAG. Сейчас узел (B) глубже (A) и (C) и имеет 2 родителей DODAG.

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

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

  • Узел (C) также повторяет выход и более глубокое возвращение.

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

  • Этот цикл можно разорвать с помощью механизмов RPL:

    • узлы (B) и (C) оставляют Rank достаточным для присоединения к предпочтительному родителю (A) и не пытаются присоединиться к более глубоким родителям (узлы не жадные);

    • узлы (B) и (C) не обрабатывают DIO от узлов глубже себя (эти узлы могут быть в их суб-DODAG).

Эти механизмы дополнительно рассматриваются в параграфе 8.2.2.4. Ранг и перемещение внутри версии DODAG.

3.7.2. Петли DODAG

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

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

3.7.3. Петли DAO

Петля DAO может возникать при наличии у родителя маршрута, установленного в результате приёма и обработки сообщения DAO от дочернего узла, если тот позднее сбросил соответствующее состояние DAO. Такая петля возникает при пропуске No-Path (сообщение DAO, аннулирующее ранее анонсированный префикс, см. параграф 6.4.3. Опции DAO) и сохраняется до полной очистки состояния. RPL включает необязательный механизм подтверждения DAO, который может ослабить влияние потери одного сообщения DAO. В RPL имеются механизмы обнаружения петель, снижающие влияние петель DAO и вызывающие их устранение (см. параграф 11.2.2.3).

4. Поддерживаемые RPL потоки трафика

RPL поддерживает три базовых типа потоков трафика «множество с одним», «один со многими» и «точка-точка».

4.1. Трафик Multipoint-to-Point

Трафик MP2P доминирует во многих приложениях LLN ([RFC5867], [RFC5826], [RFC5673], [RFC5548]). Адресатами потоков MP2P являются узлы, имеющие определённое значение для приложений, например, обеспечивающие связность с Internet или ядром частной сети IP. RPL поддерживает трафик MP2P, обеспечивая доступ к получателям MP2P через корни DODAG.

4.2. Трафик Point-to-Multipoint

Трафик P2MP требуется для некоторых приложений LLN ([RFC5867], [RFC5826], [RFC5673], [RFC5548]). RPL поддерживает трафик P2MP с использованием механизма анонсирования получателей, обеспечивающего нисходящие маршруты к адресатам (префиксы, адреса, multicast-группы) и от них. Анонсирование получателей может обновлять таблицы маршрутизации при изменёнии базовой топологии DODAG.

4.3. Трафик Point-to-Point

RPL DODAG обеспечивают базовую структуру для трафика P2P. Для поддержки в сети RPL трафика P2P корень должен быть способен маршрутизировать пакеты к адресатам. Узлы сети также могут иметь таблицы маршрутов к адресатам. Пакеты перемещаются в направлении корня, пока не достигнут узла-предка, знающего путь к адресату. Как будет указано ниже, в наиболее ограниченном случае (узлы не могут хранить маршруты) общим предком может быть корень DODAG. В иных случаях это может быть узел, расположенный ближе к отправителю и получателю. RPL также поддерживает случай, когда получателем P2P является непосредственный сосед (one-hop).

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

5. Экземпляр RPL

В данной сети LLN может быть множество логически независимых экземпляров RPL. Узел RPL может относиться к нескольким RPL Instance, действуя в одних как маршрутизатор, в других — как лист. Этот документ описывает поведение одного экземпляра.

Имеется два типа RPL Instance — локальные и глобальные. RPL делит пространство RPLInstanceID между экземплярами Global и Local для согласованного и одностороннего выделения RPLInstanceID. Глобальные экземпляры RPL скоординированы, имеют не менее 2 DODAG и обычно применяются долго. Локальные экземпляры всегда имеют один граф DODAG, единственный корень которого владеет соответствующим DODAGID и выделяет локальное значение RPLInstanceID в одностороннем порядке. Локальные экземпляры RPL могут применяться, например, для создания DODAG в поддержку будущей маршрутизации по запросам. Режим работы локальных экземпляров RPL выходит за рамки спецификации и будет описан в сопровождающих документах.

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

Пакеты данных и управления в сети RPL помечаются для однозначного указания экземпляра RPL Instance, к которому относится пакет. Каждое управляющее сообщение RPL имеет поле RPLInstanceID. Некоторые управляющие сообщения RPL при обращении к локальному RPLInstanceID (см. ниже) могут включать также DODAGID.

Пакеты данных в сети RPL раскрывают RPLInstanceID как часть RPL Packet Information, требуемой RPL (11.2.2.1. Пересылка пакетов экземпляром). Для приходящих извне сети RPL пакетов входной маршрутизатор определяет RPLInstanceID и помещает этот идентификатор в результирующий пакет для сети RPL.

5.1. RPLInstanceID

Значение глобального RPLInstanceID должно быть уникальным в масштабе всей сети LLN. Механизмы выделения значений глобальных RPLInstanceID выходят за рамки этой спецификации. В сети может быть до 128 глобальных экземпляров. Локальные экземпляры всегда применяются с DODAGID (задаётся явно или неявно) и поддерживается до 64 локальных экземпляров на DODAGID. Локальные экземпляры выделяются и поддерживаются узлом, владеющим DODAGID, без явной координации с другими узлами, как отмечено ниже.

Глобальное значение RPLInstanceID представляется в одноимённом поле, как показано на рисунке 4.

 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|0|     ID      | Глобальный RPLInstanceID из диапазона 0-127
+-+-+-+-+-+-+-+-+

Рисунок 4. Формат поля RPLInstanceID для глобального экземпляра.


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

 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1|D|   ID      | Локальный RPLInstanceID из диапазона 0-63
+-+-+-+-+-+-+-+-+

Рисунок 5. Формат поля RPLInstanceID для локального экземпляра.


Флаг D в локальных RPLInstanceID всегда имеет значение 0 в управляющих сообщениях RPL. В пакетах данных он применяется для указанию DODAGID как источника или получателя пакета — при установленном (1) флаге D адресом получателя IPv6 должно быть значение DODAGID, а при сброшенном флаге значение DODAGID должно быть адресом отправителя IPv6.

Рассмотрим, например, узел A, являющийся корнем DODAG для Local RPL Instance и имеющий локальное значение RPLInstanceID. По определению весь трафик, проходящий через этот локальный экземпляр RPL, будет исходить от узла A или завершаться на нем. В этом случае DODAGID будет доступным адресом IPv6 узла A. Весь трафик, будет содержать адрес узла A (т. е. DODAGID) в поле отправителя или получателя. Таким образом, локальное значение RPLInstanceID может указывать, что DODAGID является эквивалентом адреса отправителя или получателя путём установки или сброса флага D.

6. Сообщения ICMPv6 RPL Control

Этот документ определяет управляющие сообщение RPL как новое сообщение ICMPv6 [RFC4443]. Управляющие сообщения RPL указываются кодом, который определяет формат базового сообщения и включение в него опций. Областью действия большинства управляющих сообщений RPL является канал. Исключением являются лишь сообщения DAO и DAO-ACK в режиме Non-Storing, которые передаются по индивидуальному адресу через несколько интервалов пересылки (hop) и используют глобальные или уникальные в локальном масштабе адреса отправителей и получателей. Для прочих управляющих сообщений RPL адресом источника служит link-local, а адресом получателя —групповой адрес all-RPL-nodes или индивидуальный адрес link-local для получателя. Групповой адрес all-RPL-nodes является новым multicast-адресом и имеет значение ff02::1a.

В соответствии с [RFC4443] сообщение RPL Control состоит из заголовка ICMPv6, за которым следует тело сообщения, состоящее из базы и необязательного набора опций, как показано на рисунке 6.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                             Base                              .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                             Опции                             .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 6. Сообщение RPL Control.


Сообщение RPL Control является информационным сообщением ICMPv6 с Type = 155. Поле Code указывает тип сообщения RPL Control. Определяемые эти документом типы перечислены ниже.

  • 0x00: DODAG Information Solicitation (6.2. Сообщение DIS)

  • 0x01: DODAG Information Object (6.3. Информационный объект DODAG)

  • 0x02: Destination Advertisement Object (6.4. Сообщение DAO)

  • 0x03: Destination Advertisement Object Acknowledgment (6.5. Подтверждение DAO)

  • 0x80: Secure DODAG Information Solicitation (6.2.2. Secure DIS)

  • 0x81: Secure DODAG Information Object (6.3.2. Secure DIO)

  • 0x82: Secure Destination Advertisement Object (6.4.2. Secure DAO)

  • 0x83: Secure Destination Advertisement Object Acknowledgment (6.5.2. Secure DAO-ACK)

  • 0x8A: Consistency Check (6.6. Проверка согласованности)

Узел, получивший сообщение RPL Control с неизвестным значением Code, должен отбросить сообщение без обработки, может создать сигнал для системы управления, но передача ответных сообщений недопустима.

Контрольная сумма рассчитывается в соответствии с [RFC4443]. В поле устанавливается значение 0 для описанных ниже операций защиты RPL, а после установки всех полей сообщения RPL, включая защитные, рассчитывается контрольная сумма и помещается в поле Checksum.

Старший бит кода (0x80) показывает использование защиты для сообщения RPL. Формат сообщений RPL с защитой целостности и конфиденциальности показан на рисунке 7.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                           Security                            .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                             Base                              .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                             Опции                             .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 7. Управляющее сообщение Secure RPL.


Далее в этом разделе описаны базовые форматы определённых в настоящее время управляющих сообщений RPL и опций RPL Control Message.

6.1. Поля RPL Security

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

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

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|  Reserved   |   Algorithm   |KIM|Resvd| LVL |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Counter                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                        Key Identifier                         .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 8. Раздел Security.


Коды аутентификации сообщений (MAC14) и подписи обеспечивают проверку подлинности всего сообщения ICMPv6 RPL, включая раздел Security со всеми полями, но с временной установкой в поле контрольной суммы ICMPv6 значения 0. Шифрование обеспечивает конфиденциальность защищённого сообщения RPL ICMPv6 с первого байта после раздела Security до последнего байта в пакете. Защитное преобразование даёт защищённое сообщение ICMPv6 RPL с включением криптографических полей (MAC, подпись и т. п.). Иными словами, способ встраивания криптографических полей (например, используемые Signature и/или Algorithm) определяет само защитное преобразование определяет. Раздел Security не включает явно эти криптографические поля. Подробное описание применения полей Security приведено в разделах 19 и 10.

Counter is Time (T)

Установка флага T говорит о том, что поле Counter содержит временную метку. При сброшенном флаге это поле содержит инкрементируемый счётчик. Подробное описание флага T и поля Counter дано в параграфе 10.5.

Reserved

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

Security Algorithm (Algorithm)

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

Алгоритм

Шифрование/MAC

Подпись

0

CCM с AES-128

RSA с SHA-256

1-255

Не заданы

Не заданы

Рисунок 9. Кодирование алгоритмов защиты.


Key Identifier Mode (KIM)

2-битовое поле, указывающее способ задания ключа, применяемого для защиты пакета (явно или неявно), а также конкретное представление поля Key Identifier. Возможные значения поля KIM показаны ниже.

Режим

KIM

Значение

Число октетов идентификатора

0

00

Использование группового ключа, определяемого полем Key Index. Key Source отсутствует, Key Index имеется.

1

1

01

Использование ключа пары, определяемого отправителем и получателем пакета. Поля Key Source и Key Index отсутствуют.

0

2

10

Использование группового ключа, определяемого полями Key Index и Key Source. Поля Key Source и Key Index присутствуют.

9

3

11

Использование ключа подписи узла. Если пакет шифруется, применяется ключ группы, заданный полями Key Index и Key Source. Поля Key Source и Key Index могут присутствовать.

0/9

Рисунок 10. Кодирование KIM.

В режиме 3 (KIM=11) наличие Key Source и Key Identifier зависит от описанного ниже уровня защиты (LVL). Если уровень задаёт шифрование, эти поля присутствуют, в режиме без шифрования их нет.

Resvd

3-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Security Level (LVL)

3-битовое поле уровня защиты указывает обеспечиваемую пакету защиту. Значение может задаваться на уровне пакета и позволяет обеспечивать разные уровни защиты целостности и конфиденциальности данных. Поле KIM определяет применение подписей и смысл поля Level. Отметим, что значения Security Level не упорядочены и большее значение LVL не обязательно задаёт более сильную защиту. Значения LVL показаны на рисунке 11.

KIM=0,1,2

LVL

Атрибуты

Размер MAC

0

MAC-32

4

1

ENC-MAC-32

4

2

MAC-64

8

3

ENC-MAC-64

8

4-7

Не выделены


KIM=3

LVL

Атрибуты

Размер подписи

0

Sign-3072

384

1

ENC-Sign-3072

384

2

Sign-2048

256

3

ENC-Sign-2048

256

4-7

Не выделены

Рисунок 11. Кодирование уровней защиты (LVL).

Атрибут MAC указывает, сто сообщение имеет код MAC указанного размера. Атрибут ENC указывает шифрование сообщения, Sign — наличие подписи указанного размера.

Flags

8-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Counter

Указывает не повторяющееся 4-октетное значение, служащее для создания криптографического механизма, реализующего защиту пакета и позволяющего обеспечить семантическую защиту (10.9.1. CCM Nonce).

Key Identifier

Поле, указывающее ключ, применяемый для защиты пакета. Поле обеспечивает разные уровни детализации защиты, включая парные (peer-to-peer) и групповые ключи, а также ключи подписи. Формат показан на рисунке 12.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                          Key Source                           .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                           Key Index                           .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 12. Идентификатор ключа.


Key Source

Необязательное 8-битовое поле, показывающее источник группового ключа.

Key Index

Необязательное 1-байтовое поле, однозначно указывающее разные ключи из одного источника. Создатель каждого ключа должен гарантировать, что выпущенные им активные ключи имеют разные индексы, отличные от 0x00. Значение 0x00 зарезервировано для предустановленного общего ключа.

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

6.2. Сообщение DIS

Сообщение запроса информации DODAG (DIS) может служить для запроса информационного объекта DODAG у узла RPL. Это аналогично Router Solicitation в IPv6 Neighbor Discovery и узел может применять DIS для проверки соседства в DODAG. Отклики на сообщения DIS описаны в параграфе 8.3. Передача DIO.

6.2.1. Формат базового объекта DIS

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Flags     |   Reserved    |   Опции...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 13. Базовый объект DIS.


Flags

8-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Reserved

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

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

6.2.2. Secure DIS

Сообщение Secure DIS имеет формат, показанный на рисунке 7, а базовый формат DIS показан на рисунке 13.

6.2.3. Опции DIS

Сообщение DIS может включать действительные опции и данная спецификация разрешает опции:

0x00 Pad1;

0x01 PadN;

0x07 Solicited Information.

6.3. Информационный объект DODAG

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

6.3.1. Формат базового объекта DIO

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |Version Number |             Rank              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|G|0| MOP | Prf |     DTSN      |     Flags     |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            DODAGID                            +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Опции...
+-+-+-+-+-+-+-+-+

Рисунок 14. Базовый объект DIO.


Grounded (G)

Флаг G указывает соответствие анонсированного графа DODAG заданным приложением целям. Установленный флаг показывает «приземлённый» граф DODAG, сброшенный — «плавающий» граф.

Mode of Operation (MOP)

Поле MOP указывает режим работы RPL Instance, заданный административно и распространяемый корнем DODAG. Все присоединяющиеся к DODAG узлы должны быть способны поддерживать MOP для полноценной работы в качестве маршрутизаторов, а в противном случае могут служить лишь листьями графа. Кодирование режимов работы представлено на рисунке 15.

MOP

Описание

0

RPL не поддерживает нисходящих (Downward) маршрутов.

1

Режим работы без хранения маршрутов (Non-Storing).

2

Режим работы с хранением маршрутов (Storing) без поддержки групповой адресации.

3

Режим работы с хранением маршрутов и поддержкой групповой адресации.

Рисунок 15. Кодирование режимов работы (MOP).

Значение 0 указывает запрет сообщений с анонсами адресатов и поддержку в DODAG лишь восходящих (Upward) маршрутов. Не указанные на рисунке 15 значения не выделены.

DODAGPreference (Prf)

3-битовое целое число без знака, определяющее сравнение предпочтительного корня этого графа DODAG с другими корнями DODAG внутри экземпляра. DAGPreference принимает значения от 0x00 (наименьший приоритет) до 0x07 (наибольший приоритет). По умолчанию задано значение 0. Влияние DAGPreference на обработку DIO описано в параграфе 8.2. Обнаружение и поддержка восходящего маршрута.

Version Number

8-битовое целое число без знака, устанавливаемое корнем DODAG в соответствии с DODAGVersionNumber. Правила для DODAGVersionNumber и влияние на обработку сообщений DIO приведены в параграфе 8.2.

Rank

16-битовое целое число без знака, указывающее DODAG Rank узла, передающего сообщение DIO. Установка ранга и его влияние на обработку сообщений DIO описаны в параграфе 8.2.

RPLInstanceID

8-битовое поле, устанавливаемое корнем DODAG и указывающее экземпляр RPL для графа DODAG.

Destination Advertisement Trigger Sequence Number (DTSN)

8-битовое целое число без знака, устанавливаемое узлом, создавшим сообщение DIO. Поле DTSN является частью процедуры поддержки нисходящих маршрутов (см. раздел 9. Нисходящие маршруты).

Flags

8-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Reserved

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

DODAGID

128-битовый адрес IPv6, устанавливаемый корнем DODAG и однозначно указывающий граф DODAG. Поле DODAGID должно содержать маршрутизируемый адрес IPv6, относящийся к корню DODAG.

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

6.3.2. Secure DIO

Сообщение Secure DIO имеет формат, показанный на рисунке 7, а базовый формат DIO показан на рисунке 14.

6.3.3. Опции DIO

Сообщение DIO может включать действительные опции и данная спецификация разрешает опции:

0x00 Pad1;

0x01 PadN;

0x02 DAG Metric Container;

0x03 Routing Information;

0x04 DODAG Configuration;

0x08 Prefix Information.

6.4. Сообщение DAO

Объект анонсирования получателя (DAO) служит для распространения сведений о получателе в восходящем направлении по графу DODAG. В режиме Storing сообщения DAO передаются дочерним узлом по индивидуальным адресам выбранных родителей, в режиме Non-Storing — по индивидуальному адресу корня DODAG. Сообщения DAO могут подтверждаться (по запросу или при ошибке) получателем в сообщении DAO-ACK.

6.4.1. Формат базового объекта DAO

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |K|D|   Flags   |   Reserved    | DAOSequence   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            DODAGID*                           +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Опции...
+-+-+-+-+-+-+-+-+

* указывает необязательность поля DODAGID, как описано ниже.

Рисунок 16. Базовый объект DAO.


RPLInstanceID

8-битовое поле, указывающее экземпляр топологии, связанный с DODAG и определённый из DIO.

K

Флаг K указывает, что от получателя ожидается подтверждение DAO-ACK (см. 9.3. Базовые правила DAO).

D

Флаг D указывает наличие поля DODAGID и должен устанавливаться в случае локального RPLInstanceID.

Flags

6-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Reserved

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

DAOSequence

Инкрементируется для каждого уникального сообщения DAO от узла и возвращается в DAO-ACK.

DODAGID

128-битовый адрес IPv6, устанавливаемый корнем DODAG и однозначно указывающий граф DODAG. Поле присутствует лишь при установленном флаге D. Обычно это связано с использованием локального RPLInstanceID и служит для указания DODAGID, связанного с RPLInstanceID. При глобальном RPLInstanceID поле не требуется.

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

6.4.2. Secure DAO

Сообщение Secure DAO имеет формат, показанный на рисунке 7, а базовый формат DAO показан на рисунке 16.

6.4.3. Опции DAO

Сообщение DAO может включать действительные опции и данная спецификация разрешает опции:

0x00 Pad1;

0x01 PadN;

0x05 RPL Target;

0x06 Transit Information;

0x09 RPL Target Descriptor.

Особым случаем является сообщение DAO, называемое No-Path и применяемое в режиме Storing для очистки состояния маршрутизации Downward, полученного с помощью операции DAO. Сообщение No-Path содержит опцию Target и связанную с ней опцию Transit Information со сроком действия 0x000015 для индикации потери связности с данной целью Target.

6.5. Подтверждение DAO

Сообщение DAO-ACK передаётся в индивидуальном пакете получателем DAO (родитель DAO или корень DODAG) в ответ на индивидуальное сообщение DAO.

6.5.1. Формат базового объекта DAO-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |D|  Reserved   |  DAOSequence  |    Status     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            DODAGID*                           +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Опции...
+-+-+-+-+-+-+-+-+

* указывает необязательность поля DODAGID, как описано ниже.

Рисунок 17. Базовый объект DAO-ACK.


RPLInstanceID

8-битовое поле, указывающее экземпляр топологии, связанный с DODAG и определённый из DIO.

D

Флаг D указывает наличие поля DODAGID и должен устанавливаться в случае локального RPLInstanceID.

Reserved

7 резервных битов для флагов.

DAOSequence

Инкрементируется для каждого уникального сообщения DAO от узла и возвращается в DAO-ACK. Поле служит для сопоставления DAO с DAO ACK и его не следует путать с Path Sequence в опции Transit Information, связанным с Target Down в DODAG.

Status

Указывает статус завершения. Значение 0 данная спецификация задаёт как безоговорочное восприятие, а все остальные значения служат для указания причины отказа. Спецификация не задаёт кодов отказа, их следует выделять в соответствии с приведёнными ниже рекомендациями:

0

Безусловное восприятие (т. е. узел, получивший DAO-ACK, не отвергается).

1-127

Неполный отказ — узел, передавший DAO-ACK, готов служить родителем, но принимающему узлу предлагается найти и применять другого родителя.

12816-255

Отказ — узел, передавший DAO-ACK, не готов служить родителем.

DODAGID

128-битовый адрес IPv6, устанавливаемый корнем DODAG и однозначно указывающий граф DODAG. Поле присутствует лишь при установленном флаге D. Обычно это связано с использованием локального RPLInstanceID и служит для указания DODAGID, связанного с RPLInstanceID. При использовании глобального RPLInstanceID это поле не требуется.

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

6.5.2. Secure DAO-ACK

Формат сообщения Secure DAO-ACK показан на рисунке 7, а базовый формат DAO-ACK — на рисунке 17.

6.5.3. Опции DAO-ACK

Эта спецификация не задаёт опций, передаваемых в сообщении DAO-ACK.

6.6. Проверка согласованности

Сообщение CC17 служит для проверки счётчиков защищённых соединений и возврата откликов. Сообщение CC должно передаваться как защищённое сообщение RPL.

6.6.1. Формат базового объекта CC

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RPLInstanceID |R|    Flags    |           CC Nonce            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            DODAGID                            +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Destination Counter                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Опции...
+-+-+-+-+-+-+-+-+

Рисунок 18. Базовый объект CC.


RPLInstanceID

8-битовое поле, указывающее экземпляр топологии, связанный с DODAG и определённый из DIO.

R

Флаг R указывает, что сообщение CC является откликом. В запросах этот флаг сбрасывается (0).

Flags

7-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

CC Nonce

16-битовое целое число без знака, устанавливаемое запросом CC и включаемое в соответствующий отклик.

DODAGID

128-битовое поле с идентификатором корня DODAG.

Destination Counter

32-битовое целое число без знака, указывающее оценку отправителем текущего значения счётчика защиту у получателя. Если у отправителя нет такой оценки следует устанавливать значение 0.

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

Значение Destination Counter позволяет новым или восстановленным узлам ресинхронизировать обмен сообщениями CC. Это важно для того, чтобы значение счётчика не повторялось для данного ключа защиты при восстановлении устройств после отказа с потерей состояния счётчика. Например, когда запрос CC или иное сообщение RPL принято с инициализированным счётчиком в разделе Security, предоставление входящего значения счётчика в отклике CC позволяет запрашивающему узлу установить для исходящего счётчика значение, превышающее последнее значение, полученное от отвечающего узла. Входящий счётчик также будет обновлён из полученного отклика CC.

6.6.2. Опции CC

Эта спецификация позволяет передавать в сообщениях CC опции:

0x00 Pad1;

0x01 PadN.

6.7. Опции управляющих сообщений RPL

6.7.1. Базовый формат опций

Формат опций управляющего сообщения RPL показан на рисунке 19.

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
|  Option Type  | Option Length | Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

Рисунок 19. Базовый формат опций RPL.


Option Type

8-битовый идентификатор типа опции. Значения Option Type выделяются IANA (см. параграф 20.4).

Option Length

8-битовое целое число без знака, указывающее размер опции в октетах без полей Option Type и Option Length.

Option Data

Поле переменного размера, содержащее данные опции.

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

В опциях сообщений RPL может применяться различное выравнивание. В соответствии с соглашениями IPv6 опции с требованиями к выравниванию размещаются в пакете так, что многооктетные значения в поле Option Data каждой опции выравниваются по естественной границе (т. е. поле размером n октетов размещается с кратным n смещением от начала заголовка, n может принимать значения 1, 2, 4, 8).

6.7.2. Pad1

Опция Pad1 может включаться в сообщения DIS, DIO, DAO, DAO-ACK, CC и имеет показанный на рисунке 20 формат.

 0
 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|   Type = 0x00 |
+-+-+-+-+-+-+-+-+

Рисунок 20. Опция Pad1.


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

Важно подчеркнуть, что эта опция отличается от прочих отсутствием полей Option Length и Option Data.

6.7.3. PadN

Опция PadN может включаться в сообщения DIS, DIO, DAO, DAO-ACK, CC и имеет показанный на рисунке 21 формат.

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
|   Type = 0x01 | Option Length | 0x00 Padding...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

Рисунок 21. Опция PadN.


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

Type

0x01.

Option Length

Для N октетов заполнения (2 <= N <= 7) поле Option Length содержит значение N-2. Нулевое значение Option Length указывает 2 октета заполнения, значение 5 указывает максимальное заполнение в 7 октетов.

Option Data

Для N октетов заполнения (N > 1) поле Option Data содержит N-2 октетов со значением 0.

6.7.4. Контейнер метрики DAG

Опция DAG Metric Container может применяться в сообщениях DIO18, а её формат показан на рисунке 22

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
|   Type = 0x02 | Option Length | Metric Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -

Рисунок 22. Опция DAG Metric Container.


DAG Metric Container служит для передачи метрики по графу DODAG и может содержать множество дискретных параметров узлов, каналов, агрегированных путей и ограничений, заданных в [RFC6551], по выбору разработчиков.

Опция DAG Metric Container может указываться неоднократно в одном сообщении RPL Control, например, для случаев, когда размер Metric Data превышает 256 байтов. Дополнительные сведения приведены в [RFC6551].

Обработка и распространение DAG Metric Container определяются зависящими от реализации функциями.

Option Type

0x02

Option Length

Размер Metric Data в октетах.

Metric Data

Порядок, содержимое и кодирование данных DAG Metric Container заданы в [RFC6551].

6.7.5. Route Information

Опция Route Information (RIO) может использоваться в сообщениях DIO и содержит такие же сведения, как IPv6 Neighbor Discovery (ND) RIO [RFC4191]. Информацию может устанавливать корень DODAG и она не меняется при распространении вниз по графу DODAG. Маршрутизатор RPL легко может преобразовать эти данные в опцию ND для анонсирования своих RA, поэтому подключенный к маршрутизатору RPL узел будет в конечном итоге использовать граф DODAG, корень которого является наиболее предпочтительным для адресата пакета. В дополнение к имеющейся семантике ND предметная функция OF может использовать эту информацию для предпочтения графа DODAG, корень которого лучше всего подходит для конкретного адресата. Формат опции слегка изменён (Type, Length, Prefix) для передачи в качестве опции RPL, как показано на рисунке 23.

 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 = 0x03 | Option Length | Prefix Length |Resvd|Prf|Resvd|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Route Lifetime                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                 Prefix (переменный размер)                    .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 23. Опция Route Information.


Опция RIO служит для индикации связности с конкретным адресным префиксом из корня DODAG. Если в сообщении RPL Control нужно указать связность с множеством адресатов, опцию RIO можно использовать неоднократно. Следует использовать [RFC4191] как источник полномочных сведений о RIO. Поля опции представлены ниже.

Type

0x03

Option Length

Размер опции в октетах без учёта полей Type и Length (отметим, что в IPv6 ND размер указывается иначе).

Prefix Length

8-битовое целое число без знака, указывающее число действительных начальных биток префикса (0 — 128). Поле Prefix включает число битов, выводимое из поля Option Length, которое должно быть не меньше Prefix Length. В RPL это означает, что размер поля Prefix может отличаться от 0, 8, 16.

Prf

2-битовое целое число со знаком, указывающее предпочтительность маршрутизатора, связанного с данным префиксом, перед другими маршрутами при получении нескольких идентичных префиксов (для разных маршрутизаторов). При установке значения Reserved (10) опция RIO должна игнорироваться. В соответствии с [RFC4191] передача значения Reserved (10) недопустима (в [RFC4191] используется лишь 3 значения поля).

Resvd

Два 3-битовых резервных поля. Отравитель должен устанавливать 0, а получатель должен игнорировать поля.

Route Lifetime

32-битовое целое число без знака, указывающее интервал времени (в секундах с момента отправки пакета), в течение которого префикс действителен для определения маршрута. 0xFFFFFFFF задаёт неограниченное время.

Prefix

Поле переменного размера с IP-адресом или префиксом IPv6. Число действительных начальных битов префикса указывает поле Prefix Length. Биты префикса после указанного размера (при наличии) являются резервными и должны устанавливаться отправителем в 0, а получатель должен игнорировать их. В RPL размер поля Prefix может отличаться от 0, 8, 16.

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

6.7.6. Конфигурация DODAG

Опция DODAG Configuration может применяться в сообщениях DIO. Формат опции показан на рисунке 24.

 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 = 0x04 |Opt Length = 14| Flags |A| PCS | DIOIntDoubl.  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  DIOIntMin.   |   DIORedun.   |        MaxRankIncrease        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      MinHopRankIncrease       |              OCP              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Reserved    | Def. Lifetime |      Lifetime Unit            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 24. Опция DODAG Configuration.


Опция DODAG Configuration служит для распространения конфигурации DODAG Operation по графу DODAG. Эта опция обычно содержит статические сведения, которые не меняются внутри DODAG, поэтому её не требуется включать в каждое сообщение DIO. Информация задаётся в корне DODAG и распространяется в DODAG через опцию DODAG Configuration. Узлам, не являющимся корнем DODAG, недопустимо менять эту информацию при распространении опции DODAG Configuration. Опцию может время от времени включать корень DODAG (по своему усмотрению) и она должна включаться в отклики на индивидуальные запросы (например, индивидуальные сообщения DIS.

Type

0x04

Option Length

14

Flags

4-битовое резервное поле. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Authentication Enabled (A)

Флаг режима защиты в сети, указывающий, должен ли узел аутентифицироваться в удостоверяющем центре перед подключением к сети в качестве маршрутизатора. Если сообщение DIO не является защищённым, бит A должен быть сброшен (0).

Path Control Size (PCS)

3-битовое целое число без знака, используемое для указания числа битов, которые могут быть выделены для поля Path Control (9.9. Управление путями). При определении размера поля к значению PCS добавляется 1, т. е. PCS = 0 задаёт 1 активный бит в поле Path Control. По умолчанию PCS = DEFAULT_PATH_CONTROL_SIZE.

DIOIntervalDoublings

8-битовое целое число без знака, служащее для настройки Imax таймера DIO Trickle (8.3.1. Параметры Trickle). По умолчанию DIOIntervalDoublings = DEFAULT_DIO_INTERVAL_DOUBLINGS.

DIOIntervalMin

8-битовое целое число без знака, служащее для настройки Imin таймера DIO Trickle (8.3.1. Параметры Trickle). По умолчанию DIOIntervalMin = DEFAULT_DIO_INTERVAL_MIN.

DIORedundancyConstant

8-битовое целое число без знака, служащее для настройки k таймера DIO Trickle (8.3.1. Параметры Trickle). По умолчанию DIORedundancyConstant = DEFAULT_DIO_REDUNDANCY_CONSTANT.

MaxRankIncrease

16-битовое целое число без знака, служащее для настройки DAGMaxRankIncrease, определяющего разрешённое увеличение Rank в поддержку локального восстановления. DAGMaxRankIncrease = 0 отключает механизм.

MinHopRankIncrease

16-битовое целое число без знака, служащее для настройки MinHopRankIncrease, как описано в параграфе 3.5.1. Сравнение ранга. По умолчанию MinHopRankInc = DEFAULT_MIN_HOP_RANK_INCREASE.

Objective Code Point (OCP)

16-битовое целое число без знака, указывающее OF (поддерживается IANA).

Reserved

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

Default Lifetime

8-битовое целое число без знака, задающее используемый по умолчанию срок действия маршрутов RPL в единицах Lifetime Unit.

Lifetime Unit

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

6.7.7. RPL Target

Опция RPL Target может присутствовать в сообщениях DAO. Формат опции показан на рисунке 25.

 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 = 0x05 | Option Length |     Flags     | Prefix Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|               Target Prefix (переменный размер)               |
.                                                               .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 25. Опция RPL Target.


Опция RPL Target служит для указания адреса или префикса Target IPv6 или группы, доступной или запрашиваемой с DODAG. В сообщениях DAO опция RPL Target указывает доступность. Опция может сопровождаться опцией RPL Target Descriptor (рисунок 30), определяющей цель.

Одна или несколько опций Transit Information (параграф 6.7.8) могут следовать непосредственно за опциями Target в сообщении DAO (каждая такая опция Target может иметь парную опцию RPL Target Descriptor). Структура сообщения DAO, определяющая использование опций Target и Transit Information, описана в параграфе 9.4.

Опция RPL Target может повторяться для указания нескольких целей.

Type

0x05.

Option Length

Размер опции в октетах без учёта полей Type и Option Length.

Flags

8-битовое поле, зарезервированное для флагов. Отправитель должен устанавливать значение 0, а получатель должен игнорировать поле.

Prefix Length

8-битовое целое число без знака, указывающее число действительных начальных битов в IPv6 Prefix.

Target Prefix

Поле переменного размера, указывающее адрес получателя IPv6, префикс или multicast-группу. Поле Prefix Length указывает число действительных начальных битов префикса. Биты префикса с большими номерами (при наличии) должны устанавливаться отправителем в 0, а получатель должен игнорировать их.

6.7.8. Transit Information

Опция Transit Information (рисунок 26) может присутствовать в сообщениях DAO.

 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 = 0x06 | Option Length |E|    Flags    | Path Control  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Path Sequence | Path Lifetime |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+                                                               +
|                                                               |
+                        Parent Address*                        +
|                                                               |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

* указывает, что поле DODAG Parent Address присутствует не всегда (см. ниже).

Рисунок 26. Опция Transit Information.


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

Опция может применяться узлом с целью указания его родителей DODAG предку, собирающему маршрутные данные DODAG (обычно для создания задаваемых источником маршрутов). В режиме Non-Storing предком будет корень DODAG и опция передаётся в сообщении DAO. В режиме Storing поле Parent Address не нужно, поскольку сообщение DAO передаётся родителю напрямую. Поле Option Length позволяет определить наличие поля Parent Address.

Узел без хранения, имеющий несколько родителей DAO, может включать опцию Transit Information для каждого родителя DAO как часть операции анонсирования получателя без сохранения. Узел может распространять биты поля Path Control в разные группы родителей DAO для указания своих предпочтений. Эти предпочтения могут влиять на выбор корня DODAG среди родителей и путей при создании нисходящего маршрута (Downward).

Одна или несколько опций Transit Information должны присутствовать перед опциями RPL Target, при этом опция RPL Target указывает дочерний узел, а Transit Information — родителей DODAG. В параграфе 9.4, описывающем структуру сообщения DAO, приведены дополнительные детали об использовании опции Target вместе с Transit Information.

Типичный узел без хранения будет применять несколько опций Transit Information и передавать сформированное таким способом сообщение DAO напрямую корневому узлу. Типичный узел с хранением будет использовать одну опцию Transit Information без поля родителя и передавать сообщение DAO с дополнительными аргументами в Path Control, как описано ниже, для одного или нескольких родителей.

Например, для режима Non-Storing предположим, что Tgt(T) обозначает опцию Target для Target T, а Trnst(P) — опцию Transit Information, содержащую адрес родителя P. Рассмотрим случай, когда узел N без хранения анонсирует принадлежащие ему цели N1 и N2 и имеет родителей P1, P2, P3. В этом случае предполагается, что сообщение DAO содержит последовательность ((Tgt(N1), Tgt(N2)), (Trnst(P1), Trnst(P2), Trnst(P3))) и группа опций Target {N1, N2} описывается опциями Transit Information, как имеющая родителей {P1, P2, P3}. Узел без сохранения будет адресовать это сообщение DAO напрямую корню DODAG и пересылать сообщение DAO через одного из родителей (P1, P2, P3).

Type

0x06.

Option Length

Определяет наличие или отсутствие поля DODAG Parent Address.

External (E)

Флаг E индикации того, что родительский маршрутизатор распространяет внешние цели в сеть RPL. Внешней считается цель, полученная от другого протокола. Внешние цели указываются в опциях Target, которые непосредственно предшествуют опции Transit Information. Для внешних целей не предполагается поддержка сообщений и опций RPL.

Flags

7-битовое поле для флагов. Отправитель должен устанавливать 0, а получатель должен игнорировать поле.

Path Control

 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|PC1|PC2|PC3|PC4|
+-+-+-+-+-+-+-+-+

Рисунок 27. Поле Path Control.

8-битовое поле, ограничивающее число родителей DAO, которым передаётся сообщение DAO, анонсирующее связность с конкретным адресатом, а также обеспечивается та или иная индикация относительных предпочтений. Это поле задаёт некоторое ограничение общего числа сообщений DAO в сети LLN. Назначение и порядок битов Path Control служат также для передачи предпочтений. Не все эти биты могут быть активированы в соответствии с PCS в DODAG Configuration. Поле Path Control делится на 4 части по два бита в каждой (PC1, PC2, PC3, PC4), как показано на рисунке 27. Субполя упорядочиваются по уровню предпочтения, начиная с более предпочтительного (PC1). В субполях порядок предпочтения отсутствует. Утем группировки (как в ECMP) и упорядочения родителей можно связать их в конкретными битами поля Path Control для указания предпочтений.

Path Sequence

8-битовое целое число без знака. Когда опция RPL Target вводится узлом, владеющим префиксом Target (т. е. в сообщении DAO), этот узел устанавливает Path Sequence и инкрементирует поле каждый раз при внесении опции RPL Target с обновлённой информацией.

Path Lifetime

8-битовое целое число без знака, указывающее срок действия определения маршрута в Lifetime Unit (из опции Configuration). Отсчёт начинается с получения нового значения Path Sequence. Поле, включающее только 1 (0xFF), указывает неограниченный срок, а заполнение поля нулями (0x00) говорит о потере связности. Сообщение DAO с опцией Transit Information, включающей Path Lifetime = 0x00 для цели Target, в этом документе называется No-Path (нет пути к Target).

Parent Address

Необязательное поле с адресом IPv6 родителя DODAG для узла, изначально внесшего опцию Transit Information. Наличие этого поля зависит от режима работы DODAG (Storing или Non-Storing) и указывается полем размера опции Transit Information.

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

6.7.9. Solicited Information

Опция Solicited Information (рисунок 28) может включаться в сообщения DIS.

 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 = 0x07 |Opt Length = 19| RPLInstanceID |V|I|D|  Flags  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            DODAGID                            +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version Number |
+-+-+-+-+-+-+-+-+

Рисунок 28. Опция Solicited Information.


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

Опция Solicited Information содержит флаги, указывающие, что следует проверять узлу при решении вопроса о сбросе таймера Trickle. Таймер сбрасывается узлом при выполнении всех условий. При установленном флаге узел RPL должен проверить соответствующий предикат. Если флаг сброшен, узлу RPL недопустимо проверять условие (предполагается, что оно выполнено).

Type

0x07

Option Length

19

V

Флаг V является предикатом версии. Условие выполняется, если значение DODAGVersionNumber у получателя совпадает с запрошенным Version Number. При сброшенном флаге V поле Version недействительно, должно быть сброшено в 0 при передаче и игнорироваться при получении.

I

Флаг I является предикатом InstanceID. Условие выполняется, если текущее значение RPLInstanceID для узла RPL совпадает с запрошенным RPLInstanceID. При сброшенном флаге I поле RPLInstanceID недействительно, должно быть сброшено в 0 при передаче и игнорироваться при получении.

D

Флаг D является предикатом DODAGID. Условие выполняется, если текущее значение DODAGID для набора родителей узла RPL совпадает с полем DODAGID. При сброшенном флаге D поле DODAGID недействительно, должно быть сброшено в 0 при передаче и игнорироваться при получении.

Flags

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

Version Number

8-битовое целое число без знака с запрошенным значением DODAGVersionNumber, если оно действительно.

RPLInstanceID

8-битовое целое число без знака с запрошенным значением RPLInstanceID, если оно действительно.

DODAGID

128-битовое целое число без знака с запрошенным значением DODAGID, если оно действительно.

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

6.7.10. Prefix Information

Опция Prefix Information Option (PIO) может применяться в сообщениях DIO и передаёт сведения, заданные для опции IPv6 ND Prefix Information в [RFC4861], [RFC4862], [RFC6275], используемые узлами RPL и хостами IPv6. В частности, узел RPL может применять эту опцию для автоматической настройки адресов без учёта состояния (Stateless Address Autoconfiguration или SLAAC) по анонсированному родителем префиксу, как указано в [RFC4862], и анонсировать свой адрес в соответствии с [RFC6275]. Устанавливать эту опцию может корень DODAG. Данные распространяются в нисходящем направлении DODAG без изменения, за исключением того, что маршрутизатор RPL может изменить Interface ID (если установлен флаг R) для указания его полного адреса в PIO. Формат опции изменён (Type, Length, Prefix) для передачи в RPL, как показано на рисунке 29.

Если в результате получения PIO в сообщении DIO нужно лишь представить глобальный адрес родителя принимающему узлу, отправитель сбрасывает (0) флаги A и L, а флаг R устанавливает (1). При получении RPL на будет автоматически настраивать адрес или присоединённый маршрут по полученному префиксу [RFC4862]. Во всех случаях при сброшенном флаге L узел RPL может включать префикс в передаваемые своим потомкам опции PIO.

 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 = 0x08 |Opt Length = 30| Prefix Length |L|A|R|Reserved1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Valid Lifetime                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Preferred Lifetime                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved2                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            Prefix                             +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 29. Опция Prefix Information.


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

Документы [RFC4861] и [RFC6275] содержат полномочные сведения о PIO. Поля опции представлены ниже.

Type

0x08

Option Length

30. В отличии от IPv6 ND размер указывается в октетах.

Prefix Length

8-битовое целое число без знака, указывающее число действительных начальных битов в поле Prefix (0 — 128). Поле обеспечивает сведения для определения принадлежности к каналу (вместе с флагом L), а также помогает при автоматической настройке адресов [RFC4862], для которой могут быть заданы дополнительные ограничения.

L

Флаг принадлежности к каналу (on-link), установка которого показывает, что этот префикс можно использовать для определения принадлежности к каналу. При сброшенном флаге анонс ничего не говорит о принадлежности префикса к каналу. Иными словами, при сброшенном флаге L узлу RPL недопустимо считать, что полученный из префикса адрес не относится к каналу (off-link), т. е. узлу недопустимо обновлять прежнюю индикацию принадлежности адреса к каналу. Узлу RPL, действующему как маршрутизатор, недопустимо распространять PIO с установленным флагом L, но можно распространять PIO со сброшенным флагом L.

A

Флаг автономной настройки адреса, установка которого показывает, что префикс можно применять для автоматической настройки адресов без учёта состояния, как задано в [RFC4862]. При использовании обоих протоколов (ND RA и RPL DIO) для передачи PIO на одном канале, узлу RPL можно применять любой из них для SLAAC. Любой из протоколов можно также задать нежелательным применять для работы SLAAC сбросив (0) флаг A в опциях PIO этого протокола.

R

Флаг, установка которого указывает, что поле Prefix содержит полный адрес IPv6, присвоенный передающему маршрутизатору, который может указывать родителя в опции Transit20. Указанный префикс содержится в первых Prefix Length битах поля Prefix. Адрес маршрутизатор IPv6 имеет те же область и срок действия, что и анонсируемый префикс. Такое использование поля Prefix совместимо с применением для анонсирования самого префикса, где тоже применяются лишь старшие биты. Таким образом, интерпретация флага не зависит от обработки, требуемой для флагов L и A.

Reserved1

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

Valid Lifetime

8-битовое целое число без знака, указывающее срок действия префикса (в секундах с момента передачи пакета) для определения принадлежности к каналу. Значение 0xFFFFFFFF указывает неограниченный срок. Значение Valid Lifetime применяется также в [RFC4862].

Preferred Lifetime

8-битовое целое число без знака, указывающее срок (в секундах с момента передачи пакета), в течение которого адрес, созданный из префикса автоматической настройкой без учёта состояния, остаётся предпочтительным [RFC4862]. Значение 0xFFFFFFFF указывает неограниченный срок. Отметим, что в этом поле недопустимо указывать значение больше Valid Lifetime во избежание предпочтительности недействительного адреса.

Reserved2

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

Prefix

Адрес или префикс IPv6, число действительных старших битов которого указывает поле Prefix Length. Остальные биты должны устанавливаться в 0 отправителем и игнорироваться получателем. Маршрутизаторам не следует передавать опцию для префиксов link-local, а хостам следует игнорировать такие опции. В режиме без хранения следует воздерживаться от анонсирования не принадлежащих узлу префиксов, а для тех следует анонсировать в этом поле полный адрес с установкой флага R. Потомки узла, анонсирующего полный адрес с флагом R, могут применять этот адрес для определения содержимого поля DODAG Parent Address в опции Transit Information.

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

6.7.11. RPL Target Descriptor

За опцией RPL Target может сразу же следовать неанализируемый (opaque) дескриптор, указывающий цель.

 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 = 0x09 |Opt Length = 4 |           Descriptor
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    Descriptor (продолжение)    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 30. Опция RPL Target Descriptor.


Опция RPL Target Descriptor служит для указания цели и это иногда называют «тегированием» (tagging).

В большинстве случаев используется один дескриптор на цель. Дескриптор устанавливается узлом, вводящим Target в сеть RPL. Он должен копироваться без изменения маршрутизаторами, которые распространяют Target Up DODAG в сообщениях DAO.

Type

0x09

Option Length

4

Descriptor

32-битовое целое число без знака. Не анализируется (opaque).

7. Счётчики

В этом разделе описана схема инициализации и работы счётчиков последовательностей в RPL, таких как DODAGVersionNumber в сообщении DIO, DAOSequence в сообщении DAO, Path Sequence в опции Transit Information.

7.1. Обзор счётчиков

В этой спецификации применяется 3 порядковых номера для обеспечения свежести и синхронизации данных.

DODAGVersionNumber

Этот счётчик применяется в базовых сообщениях DIO для указания версии формируемого графа DODAG. Значение DODAGVersionNumber монотонно увеличивается корневым узлом каждый раз, когда он принимает решение о создании новой версии DODAG для повторной проверки целостности и обеспечения возможности глобального восстановления. DODAGVersionNumber распространяется без изменения в нисходящем направлении графа DODAG по мере присоединения маршрутизаторов к новой DODAG Version. DODAGVersionNumber имеет глобальную значимость в DODAG и указывает версию графа DODAG, с которой работает маршрутизатор. Более старое (меньшее) значение говорит о том, что маршрутизатор не перешёл к новой версии DODAG Version и не может служить родителем для узлов, перешедших к более новой версии DODAG.

DAOSequence

Этот счётчик применяется в базовых сообщениях DAO для сопоставления сообщений DAO с DAO-ACK. DAOSequence имеет локальную значимость (узел) и служит для обнаружения потери и повтора DAO.

Path Sequence

Этот счётчик применяется в опции Transit Information сообщений DAO и служит для того, чтобы различать ситуации замены устаревшего маршрута новым и наличия нескольких (избыточных) маршрутов к одному адресату. Path Sequence имеет глобальную значимость в DODAG и показывает свежесть маршрута к адресату. Более старое (меньшее) значение, полученное от маршрутизатора, говорит о том, что он сохраняет устаревший маршрут, который больше не может служить следующим интервалом пересылки для адресата. Значение Path Sequence рассчитывается узлом, анонсирующим адресата, т. е. Target или маршрутизатором, анонсирующим Target от имени хоста, и не меняется при распространении содержимого DAO родительскими маршрутизаторами в направлении корня. Если хост не передаёт маршрутизатору значение счётчика, маршрутизатор сам рассчитывает Path Sequence от имени хоста и хост может регистрировать для этого лишь один маршрутизатор. Если сообщения DAO включают одно значение Target, заданное для нескольких родителей одновременно с целью создания избыточных маршрутов, значение Path Sequence будет одинаковым во всех сообщениях DAO для этого адресата.

7.2. Работа счётчиков

Счётчики порядковых номеров RPL делятся в стиле lollipop21 [Perlman83], где значения 128 и выше служат линейной последовательностью для счётчика перезапусков и загрузок, а значения от 0 до 127 образуют циклическое пространство порядковых номеров как в [RFC1982]. При этом учитывается переход между линейной и циклической областью. Если в циклической области обнаруживается слишком большой зазор между номерами, эти номера считаются не сравнимыми, как описано ниже.

Окно сравнения SEQUENCE_WINDOW = 16 настраивается на основе значения 2N и данная спецификация задаёт N = 4. Для данного счётчика операции сравнения следуют приведённым ниже правилам.

  1. Счётчик номеров следует инициализировать заданным реализацией значением не меньше 128. Рекомендуется использовать значение 240 (256 — SEQUENCE_WINDOW).

  2. Когда инкрементирование ведёт к переходу через максимальное значение, счётчик должен сбрасываться в 0. Для линейного (128 и больше) счётчика максимальным значением является 255, для циклического (меньше 128) — 127.

  3. При сравнении значений счётчиков должны применяться приведённые ниже правила.

    1. Если первый счётчик A относится к интервалу [128-255], а второй счётчик B — к интервалу [0..127]:

      1. если (256 + B — A) не больше SEQUENCE_WINDOW, значение B считается большим, нежели A, A меньше B и счётчики не равны;

      2. если (256 + B — A) больше SEQUENCE_WINDOW, значение A считается большим, нежели B, B меньше A и счётчики не равны.

      Например, при A = 240 и B = 5 выражение (256 + 5 — 240) даёт значение 21, которое превышает SEQUENCE_WINDOW (16). Таким образом, 240 больше чем 5. Если A = 250, а B = 5, выражение (256 + 5 — 250) даёт значение 11, которое меньше SEQUENCE_WINDOW (16). В результате получаем, что 250 меньше чем 5.

    2. Если оба сравниваемых значения не превышают 127 или оба не меньше 128:

      1. применяется сравнение [RFC1982], если абсолютное значение разницы между счётчиками не превышает SEQUENCE_WINDOW, ;

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

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

8. Восходящие маршруты

В этом разделе описано, как RPL обнаруживает и поддерживает восходящие (Upward) маршруты. Описано использование объектов DIO, которые служат сообщениями для обнаружения и поддержки таких маршрутов. Описано, как RPL генерирует DIO и отвечает на них. Рассматриваются также сообщения DIS, которые служат для инициирования передачи DIO.

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

Сообщение DIO может также включать явную маршрутную информацию.

DODAGID

DODAGID — это глобальный или уникальный в локальном масштабе адрес IPv6 для корня. Присоединяющемуся к DODAG узлу следует обеспечивать маршрут (host route) через родителя DODAG к адресу, используемому корнем как DODAGID.

RIO Prefix

Корень может включить одну или несколько опций Route Information в сообщение DIO. Опции RIO служат для анонсирования внешних маршрутов, доступных через корень и связанных с ними предпочтений, как указано в параграфе 6.7.5, заимствующем RIO из [RFC4191]. Это считается возможностью корня, а не анонсом маршрута и такие опции недопустимо распространять в другие протоколы маршрутизации, хотя их следует использовать на входных маршрутизаторах RPL для выбора DODAG при внесении в домен RPL пакетов от узла, подключённого к этому маршрутизатору RPL. Предметная функция OF может использовать анонсированные в RIO маршруты или предпочтения для них при выборе DODAG среди прочих для того же экземпляра.

8.1. Базовые правила DIO

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

    1. Grounded (G).

    2. Mode of Operation (MOP).

    3. DAGPreference (Prf).

    4. Version.

    5. RPLInstanceID.

    6. DODAGID.

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

    1. Rank;

    2. DTSN.

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

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

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

8.2.1. Соседи и родители внутри версии DODAG

Алгоритмы обнаружения и обработки восходящих маршрутов RPL основаны на использовании трёх наборов локального канала. Набор кандидатов в соседи является подмножеством узлов, доступных по групповому адресу link-local. Выбор узлов зависит от реализации и функции OF. Набор родителей является частью набора кандидатов в соседи. Предпочтительными родителями являются узлы из набора родителей, являющиеся предпочтительными интервалами пересылки для маршрутов Upward. Концептуально предпочтительным является один родитель, но их может быть несколько, если предпочтения и Rank для них идентичны. Требования к родительским узлам даны ниже.

  1. Набор родителей DODAG должен быть подмножеством набора кандидатов в соседи.

  2. Корень DODAG должен иметь пустой набор родителей DODAG.

  3. Не являющийся корнем DODAG узел может поддерживать непустой набор родителей DODAG.

  4. Предпочтительный родитель DODAG для узла должен входить в его набор родителей DODAG.

  5. Ранг узла должен быть больше рангов каждого из его родителей DODAG.

  6. Когда механизм обнаружения недоступности соседа (Neighbor Unreachability Detection или NUD) [RFC4861] или его эквивалент определяет утрату доступности соседа, узлу RPL недопустимо включать такой узел в число кандидатов в соседи при расчёте и анонсировании маршрутов, пока узел снова не станет доступным. Маршруты через недоступных соседей должны удаляться из таблицы маршрутизации.

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

Функция OF может управлять набором кандидатов в соседи и выбором набора родителей, как описано в [RFC6552].

8.2.2. Соседи и родители в разных версиях DODAG

Приведённые выше правила работают в одной версии DODAG, а ниже описана работа RPL при наличии разных DODAG Version.

8.2.2.1. DODAG Version
  1. Триплет (RPLInstanceID, DODAGID, DODAGVersionNumber) однозначно указывает DODAG Version. Каждый элемент в наборе родителей узла, как указано в последнем полученном сообщении DIO от каждого из родителей DODAG, должен относиться к одной версии DODAG. Элементы набора кандидатов в соседи узла могут относиться к разным DODAG Version.

  2. Узел относится к версии DODAG, если каждый элемент его набора родителей DODAG относится к этой версии DODAG или этот узел является корнем соответствующего графа DODAG.

  3. Узлу недопустимо передавать сообщения DIO для версий DODAG, в которые он не входит.

  4. Корни DODAG могут инкрементировать анонсируемое значение DODAGVersionNumber, переходя таким образом к новой версии DODAG. При увеличении корнем DODAG значения DODAGVersionNumber он должен следовать правилам раздела 7. Счётчики. События, вызывающие инкрементирование DODAGVersionNumber, описаны ниже в этом разделе и разделе 18. Вопросы управляемости.

  5. В данном графе DODAG узлу, не являющемуся корнем, недопустимо анонсировать DODAGVersionNumber, значение которого превышает максимальное полученное узлом значение DODAGVersionNumber. Сравнение значений рассмотрено в разделе 7. Счётчики.

  6. Когда узел анонсировал DODAG Version, отправив сообщение DIO, ему недопустимо быть членом предыдущей версии DODAG в том же графе DODAG (с теми же RPLInstanceID, DODAGID и меньшим DODAGVersionNumber). Сравнение значений рассмотрено в разделе 7. Счётчики.

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

Предположим, например, что узел покинул DODAG с DODAGVersionNumber = N. Предположим, что узел имел суб-DODAG и пытается «отравить» этот субграф, анонсируя Rank = INFINITE_RANK, но эти анонсы могут теряться в LLN. Если узел наблюдал кандидата в соседи, анонсирующего позицию в исходном DODAG с DODAGVersionNumber = N, этот кандидат мог быть в прежнем суб-DODAG узла и возможен случай, когда добавление кандидата в соседи как родителя приведёт к созданию петли. В этом случае кандидат в соседи, анонсирующий DODAGVersionNumber N+1, безопасен, поскольку он не входит в исходный субграф DODAG узла, о чем говорит увеличение DODAGVersionNumber, переданное из корня DODAG, тогда как исходный узел был отсоединён. Поэтому для отсоединённого узла полезно помнить исходные сведения DODAG, включая DODAGVersionNumber = N.

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

После перехода узла и анонсирования новой версии DODAG приведённые выше правила не позволяют узлу анонсировать прежнюю версию DODAG (с меньшим DODAGVersionNumber).

8.2.2.2. Корни DODAG
  1. Корню DODAG, не имеющему возможности достичь заданной приложением цели, недопустимо устанавливать флаг Grounded.

  2. Корень DODAG должен анонсировать Rank = ROOT_RANK.

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

С системах, использующих каналы, не относящиеся к LLN, для объединения нескольких корней LLN, можно запустить RPL на чужих (не RPL) каналах и использовать один маршрутизатор как «корень магистрали». Этот корень будет виртуальным корнем DODAG с Rank = BASE_RANK, предоставляемым через магистраль. Все корни LLN, для которых магистральных корень является родителем, включая этот корень, если он является корнем LLN, показывают для LLN значение Rank = ROOT_RANK. Эти виртуальные корни являются частью одного графа DODAG и анонсируют одно значение DODAGID, координируя DODAGVersionNumber и другие параметры DODAG с виртуальным корнем через магистраль. Метод координации выходит за рамки спецификации (будет определён в сопровождающих документах).

8.2.2.3. Выбор DODAG

Предметная функция OF, а также набор анонсируемой маршрутной метрики и ограничений DAG определяют способ выбора узлом соседей и родителей, а также предпочтительных родителей. Этот выбор также неявно задаёт граф DODAG в DAG. Выбор может учитывать административные предпочтения (Prf), метрику и другие параметры.

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

8.2.2.4. Ранг и перемещение внутри версии DODAG
  1. Узлу недопустимо анонсировать Rank, не превышающий ранг любого из его родителей в DODAG Version.

  2. Узел может анонсировать Rank меньше ранее анонсированного значения в DODAG Version.

  3. Пусть L — наименьший ранг в DODAG Version, анонсированный данным узлом. В той же версии DODAG этому узлу недопустимо анонсировать эффективный Rank выше L + DAGMaxRankIncrease. Значение INFINITE_RANK является исключением и узел может анонсировать его в DODAG Version без ограничений. Если нужен ранг узла выше разрешённого L + DAGMaxRankIncrease, должно анонсироваться значение INFINITE_RANK.

  4. Узел может в любой момент принять решение о присоединении к другому графу DODAG внутри RPL Instance. Для такого присоединения Rank не ограничивается, если граф DODAG не относится к DODAG Version, куда данный узел был присоединён ранее. В последнем случае должно выполняться правило 3. Пока узел не передал сообщение DIO с новым графом DODAG, он должен пересылать пакеты по прежнему DODAG.

  5. После получения следующего DODAGVersionNumber от подходящего родителя DODAG узел может в любой момент перейти к следующей версии DODAG внутри графа DODAG.

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

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

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

Узлу разрешается присоединение к любой версии DODAG, в которую он не входил ранее, но если узел входил в DODAG Version, он должен продолжать соблюдение правила, запрещающего анонсировать Rank выше L+DAGMaxRankIncrease в течение всего срока действия DODAG Version. Это требуется для предотвращения лазеек, позволяющим узлам повышать свой ранг до INFINITE_RANK, что может влиять на другие узлы и поглощать ресурсы.

8.2.2.5. «Порча» маршрутов
  1. Узел «портит» (poison) свои маршруты, анонсируя Rank = INFINITE_RANK.

  2. Узлу недопустимо иметь в своём наборе родителей узлы с Rank = INFINITE_RANK.

Хотя реализация может анонсировать INFINITE_RANK для «порчи» маршрутов, это отличается от установки Rank = INFINITE_RANK. Например, узел может продолжать передачу пакетов данных, где опция RPL Packet Information включает ранг, отличный от INFINITE_RANK, анонсируя INFINITE_RANK в своих сообщениях DIO.

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

8.2.2.6. Отсоединение

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

8.2.2.7. Следование за родителем

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

8.2.3. Обмен сообщениями DIO

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

  1. Если сообщение DIO имеет некорректный формат, узел должен отбросить его, записав ошибку (раздел 18).

  2. Если отправитель DIO является кандидатом в соседи, и формат сообщения корректен, узел должен обработать DIO.

8.2.3.1. Обработка сообщения DIO

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

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

8.3. Передача DIO

Узлы RPL передают сообщения DIO, используя таймер Trickle [RFC6206]. Сообщение DIO от отправителя с меньшим DAGRank, не вызывающее изменений в наборе родителей получателя, предпочтительного родителя или Rank, следует считать согласованным с таймером Trickle.

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

  • Узел обнаруживает несогласованность при пересылке пакета, как указано в 11.2. Обнаружение и предотвращение петель.

  • Узел получает групповое сообщение DIS без опции Solicited Information, пока флаг DIS не ограничивает это.

  • Узел получает групповое сообщение DIS с опцией Solicited Information и соответствует всем предикатам в ней, пока флаг DIS не ограничивает это.

  • Узел присоединяется к новой версии DODAG (например, обновляя DODAGVersionNumber, входя в новый экземпляр RPL и т. п.).

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

Узлу не следует сбрасывать таймер DIO Trickle в ответ на индивидуальное сообщение DIS. При получении такого сообщения без опции Solicited Information узел должен передать в ответ индивидуальное сообщение DIO, которое должно включать опцию DODAG Configuration. При получении индивидуального DIS с опцией Solicited Information и соответствии всем предикатам в этой опции узел должен передать в ответ индивидуальное сообщение DIO, которое должно включать опцию DODAG Configuration. Таким образом, узел может передать индивидуальное сообщение DIS потенциальному родителю DODAG для проверки DODAG Configuration и других параметров.

8.3.1. Параметры Trickle

Конфигурационные параметры таймера Trickle включают:

Imin

извлекается из сообщения DIO как 2DIOIntervalMin мсек (по умолчанию DIOIntervalMin = DEFAULT_DIO_INTERVAL_MIN);

Imax

значение DIOIntervalDoublings в DIO (по умолчанию DIOIntervalDoublings = DEFAULT_DIO_INTERVAL_DOUBLINGS);

k

значение DIORedundancyConstant в DIO (по умолчанию DEFAULT_DIO_REDUNDANCY_CONSTANT). В RPL значение k = 0x00 считается бесконечностью, т. е. таймер Trickle не будет подавлять сообщения.

8.4. Выбор DODAG

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

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

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

8.5. Работа листа

В некоторых случаях узел RPL может подключать граф DODAG лишь в качестве листа. Такой случай возникает, например, когда узел не понимает или не поддерживает правила OF экземпляра RPL или анонсированную метрику или ограничения. Как отмечено в параграфе 18.6 применительно к функции правил, узел может присоединиться к DODAG как лист или отказаться от присоединения к DODAG. Как отмечено в параграфе 18.5, такие события рекомендуется записывать в журнал как отказы.

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

  1. Недопустима передача листом сообщений DIO с DAG Metric Container.

  2. Сообщения DIO от листа должны анонсировать DAGRank = INFINITE_RANK.

  3. Лист может подавлять отправку сообщений DIO, если передача не вызвана обнаружением несогласованности при пересылке пакета или индивидуальным сообщением DIS, когда подавлять отправку DIO недопустимо.

  4. Лист может передавать индивидуальные сообщения DAO, как указано в параграфе 9.2.

  5. Лист может передавать групповые сообщения DAO соседям 1-hop, как описано в параграфе 9.10.

Конкретная необходимость отправки сообщений DIO листом возникает в случае, когда этот лист прежде входил в другой граф DODAG, а другой узел пересылает сообщение на основе прежней топологии, что вызывает несогласованность. Следует отметить, что сетям LLN присущи потери пакетов и даже при возможности листа «испортить» свои маршруты путём анонсирования Rank = INFINITE_RANK в старом графе DODAG до перехода в статус листа эти анонсы могут быть потеряны и лист должен иметь возможность отправить сообщение DIO для устранения несогласованности.

В общем случае листу недопустимо анонсировать себя в качестве маршрутизатора (т. е. передавать сообщения DIO).

8.6. Административный ранг

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

9. Нисходящие маршруты

В этом разделе описано, как RPL обнаруживает и поддерживает нисходящие (Downward) маршруты с помощью сообщений DAO. Нисходящие маршруты поддерживают потоки P2MP от корня DODAG к листьям. Для таких маршрутов поддерживаются также потоки P2P и сообщения P2P могут передаваться в направлении корня DODAG (или общего предка) через восходящие маршруты, затем от корня DODAG к адресату через маршрут Downward.

Данная спецификация описывает для RPL Instance два режима поддержки нисходящих маршрутов. В первом режиме, называемом Storing (сохранение) узлы хранят таблицы нисходящих маршрутов для своих суб-DODAG. Каждый интервал (hop) нисходящего маршрута в сохраняющей сети просматривает свою таблицу для выбора следующего интервала. Во втором режиме, называемом Non-Storing, узлы не хранят таблицы нисходящих маршрутов. Пакеты в нисходящем направлении маршрутизируются с помощью source route, задаваемых корнем DODAG [RFC6554].

RPL поддерживает простую одноинтервальную (one-hop) оптимизацию P2P для сетей с хранением и без него. Узел может передавать пакеты P2P, напрямую адресованные соседу (one-hop neighbor).

9.1. Родители для анонсов получателей

Для организации нисходящих маршрутов узлы RPL передают сообщения DAO в восходящем направлении (Upward). Узлы next-hop этих сообщений DAO называются родителями DAO (DAO parent). Набор родителей DAO для узла называется DAO parent set.

  1. Узел может передавать сообщения DAO по групповому адресу all-RPL-nodes, что является оптимизацией для маршрутизации «в один этап» (one-hop routing). При передаче групповых DAO бит K должен быть сброшен.

  2. Набор родителей DAO для узла должен быть подмножеством его набора родителей DODAG.

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

  4. В режиме Storing адреса IPv6 для отправителя и получателя сообщения DAO должны быть link-local.

  5. В режиме Non-Storing узлу недопустимо адресовать индивидуальные сообщения DAO, узлам, не являющимся корнем DODAG.

  6. В режиме Non-Storing адреса IPv6 для отправителя и получателя сообщения DAO должны уникальными в локальном масштабе (unique-local) или глобальными.

Выбор родителей DAO зависит от реализации и предметной функции OF.

9.2. Обнаружение и поддержка нисходящих маршрутов

Для DAO можно настроить полный запрет, а также работу в одном из режимов (Storing или Non-Storing), как указано в поле MOP сообщения DIO.

  1. Все присоединяющиеся к DODAG узлы должны соблюдать режим MOP, заданный корнем. Узлы, не способные быть маршрутизаторами (например, не соответствующие анонсированному MOP), могут присоединяться к графу DODAG как листья.

  2. Если MOP = 0 (указывает маршрутизацию Downward), узлам недопустимо передавать сообщения DAO и они могут игнорировать DAO.

  3. В режиме Non-Storing корню DODAG следует сохранять записи таблицы source-route для адресатов, определённых из DAO. Корень DODAG должен быть способен генерировать маршруты source-route для полученных из DAOадресатов, которые были сохранены.

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

DODAG может работать в одном из возможных режимов, указанном полем MOP, поддерживая нисходящие маршруты (Downward) через source-route из корней DODAG, либо через таблицы маршрутизации в сети.

Когда маршруты Downward поддерживаются за счёт source-route от корней DODAG, обычно предполагается, что корень DODAG хранит данные source-route, полученные из DAO, для создания маршрутов. Если корень DODAG не может сохранить ту или иную информацию, некоторые адресаты могут стать недоступными.

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

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

9.2.1. Поддержка Path Sequence

Для каждой цели Target, связанной с узлом (принадлежащей ему), этот узел отвечает за отправку сообщений DAO для обеспечения нисходящих маршрутов. Опции Target и Transit information в сообщениях DAO распространяют восходящий маршрут DODAG. Счётчик Path в опции Transit information служит для указания свежести и обновления устаревшей информации о нисходящих маршрутах, как описано в разделе 7.

Для связанной с узлом (принадлежащей ему) цели Target этот узел должен инкрементировать счётчик Path Sequence и создавать новой сообщение DAO, когда:

  1. значение Path Lifetime обновлено (например, refresh или no-Path);

  2. список в поле DODAG Parent Address изменён.

Для связанной с узлом (принадлежащей ему) цели Target этот узел может инкрементировать счётчик Path Sequence и создавать время от времени новое сообщение DAO для обновления информации о нисходящих маршрутах. В режиме Storing узел генерирует такое сообщение DAO для каждого из своих родителей DAO с целью поддержки множества путей. Все DAO, созданные одновременно для одной цели Target, должны передаваться с одним значением Path Sequence в опции Transit Information.

9.2.2. Генерация сообщений DAO

Узел может передавать сообщения DAO при получении DAO в результате изменения набора родителей DAO или иного события, такого как завершение срока действия префикса. В случае получения DAO важно, является это сообщение «новым» или содержит новую информацию. В режиме Non-Storing каждое принятое узлом сообщение DAO является «новым», а в режиме Storing «новыми» будут лишь сообщения DAO, соответствующие любому из приведённых ниже критериев для содержащегося в нем значения Target.

  1. Новый номер Path Sequence.

  2. Дополнительные биты Path Control.

  3. Сообщение No-Path DAO, удаляющее последний маршрут Downward к префиксу.

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

9.3. Базовые правила DAO

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

  2. Поля RPLInstanceID и DODAGID в DAO должны иметь те же значения, что и элементы набора родителей узла и передаваемые им DIO.

  3. Узел может установить флаг K в индивидуальном сообщении DAO для запроса индивидуального отклика DAO-ACK с подтверждением попытки.

  4. Узлу, получившему DAO с установленным флагом K, следует отвечать сообщением DAO-ACK. При сброшенном в DAO флаге K узел может передать DAO-ACK, особенно при возникновении ошибки.

  5. Узел, установивший флаг K в индивидуальном сообщении DAO, но не получивший в ответ DAO-ACK, может запланировать повторную передачу DAO (число попыток определяет реализация).

  6. Узлам следует игнорировать DAO без новых порядковых номеров и недопустимо обрабатывать такие сообщения.

В отличие от поля Version в DIO, инкрементируемого лишь корнем DODAG и передаваемого другими узлами без изменения, значения DAOSequence уникальны для каждого узла. Пространства номеров для индивидуальных и групповых DAO могут быть раздельными или общим. Рекомендуется применять общее пространство номеров.

9.4. Структура сообщений DAO

Структура DAO одинакова в сетях Storing и Non-Storing. В наиболее общей форме сообщение DAO может включать несколько групп опций, каждая из которых включает одну или несколько опций Target, за которыми следует одна или несколько опций Transit Information. Вся группа опций Transit Information применяется ко всей группе опций Target. Ниже описаны детали каждого режима работы.

  1. Узлы RPL должны включать одну или несколько опций RPL Target в каждое передаваемое сообщение DAO. Одна опция RPL Target должна иметь префикс, включающий адрес узла IPv6, если узлу нужен граф DODAG для предоставления нисходящего маршрута к себе. Сразу за RPL Target может следовать опция RPL Target Descriptor.

  2. Когда узел обновляет данные в Transit Information для опции Target, охватывающей один из его адресов, узел должен инкрементировать номер Path Sequence в Transit Information. Номер Path Sequence можно увеличивать время от времени, чтобы вызвать обновление маршрутов Downward.

  3. За опциями RPL Target в индивидуальном сообщении DAO должна следовать одна или несколько опций Transit Information, которые применяются к непосредственно предшествующим опциям Target.

  4. В групповые DAO недопустимо включать поле DODAG Parent Address (в опциях Transit Information).

  5. Узел, получивший и обрабатывающий сообщение DAO с информацией для конкретной цели Target, о которой у него есть прежняя информация, должен использовать номер Path Sequence из опции Transit Information, связанной с этой целью, для определения наличия в сообщении DAO обновлённой информации в соответствии с разделом 7.

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

В режиме Non-Storing корень создаёт строгий заголовок strict source по этапам пересылки путём рекурсивного поиска информации о каждом интервале, которая связывает цель Target (адрес или префикс) с транзитным адресом. В некоторых случаях, когда адрес потомка выводится из префикса, который принадлежит или анонсируется родителем, связь родителя с потомком может быть выведена корнем для создания заголовка source routing. В остальных случаях требуется информировать корень связки транзит-Target со стороны доступной цели, для последующего рекурсивного создания заголовка маршрутизации. Адрес, анонсированный как Target в сообщении DAO, должен размещаться на том же маршрутизаторе или быть доступен на канале для маршрутизатора, которому принадлежит адрес, указанный в Transit Information. Ниже приведены правила для обеспечения сквозной непрерывности маршрута source-route.

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

  2. PIO с флагом A указывает, что дочерний узел RPL может использовать префикс для автоматической настройки адресов. Родитель, анонсирующий префикс в PIO с флагом A, должен гарантировать, что адрес или весь префикс из PIO доступен из корня путём его анонсирования как цели DAO. Если родитель установил также флаг L, указывающий, что префикс относится к каналу, он должен анонсировать весь префикс как Target в сообщении DAO. Если флаг L сброшен, а R установлен, это говорит, что родитель представляет свой адрес в PIO, и тогда этот родитель должен анонсировать данный адрес как цель DAO.

  3. Адрес, анонсируемый как Target в сообщении DAO, должен размещаться на том же маршрутизаторе или быть доступен на канале для маршрутизатора, которому принадлежит адрес, указанный в Transit Information.

  4. Для обеспечения возможности оптимального сжатия заголовка маршрутизации родителю следует устанавливать флаг R во всех PIO с установленным флагом A и сброшенным флагом L, а потомку следует предпочитать использование в качестве транзитного адреса родителя из сообщения PIO, которое служит для автоматической настройки адреса, анонсируемого как Target в сообщении DAO.

  5. Маршрутизатор может иметь цели, для которых неизвестно о нахождении на одном канале с родителем, поскольку они имеют адреса, размещённые на другом интерфейсе, или относятся к внешним по отношению к RPL узлам (например, к подключённым хостам). Для внедрения таких целей (Target) в сеть RPL маршрутизатор должен анонсировать себя в поле DODAG Parent Address опции Transit Information для этой цели, указывая адрес на канале с узлом родителя DAO. Если Target относится к внешнему узлу, маршрутизатор должен установить флаг E в Transit Information.

Дочернему узлу, автоматически настраивающему адрес из родительской опции PIO с флагом L, не нужно анонсировать этот адрес как DAO Target, поскольку родитель гарантирует, что весь префикс доступен из корня. Если флаг L не установлен, тогда в режиме Non-Storing потомок должен информировать корень о связке «родитель-потомок», используя доступный адрес родителя, чтобы обеспечить рекурсивное создание заголовка маршрутизации. Это делается путём связывания адреса родителя (как транзитного) с адресом потомка как Target в сообщении DAO.

9.5. Планирование передачи DAO

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

  1. При получении индивидуального сообщения DAO с обновлённой информацией (такой как опция Transit Information с новым полем Path Sequence) узлу следует передать DAO. Это сообщение DAO не следует передавать сразу же, а следует задержать передачу DAO для агрегирования сведений DAO от других узлов, для которых этот узел является родителем.

  2. Узлу следует задержать отправку DAO по таймеру DelayDAO, запускаемому приёмом сообщения DAO. Сообщения DAO, полученные в интервале DelayDAO, не сбрасывают таймер. По завершении отсчёта DelayDAO узел передаёт сообщение DAO.

  3. При добавлении узлом другого узла в свой набор родителей DAO ему следует запланировать передачу DAO.

Значение и расчёт DelayDAO зависят от реализации. Данная спецификация определяет принятое по умолчанию значение DEFAULT_DAO_DELAY.

9.6. Инициирование сообщений DAO

Узлы могут инициировать отправку сообщений DAO в своих субграфах DODAG. Каждый узел поддерживает порядковый номер триггера DAO (DAO Trigger Sequence Number или DTSN), передаваемый в сообщениях DIO.

  1. Если узел видит увеличение DTSN в DAO одного из своих родителей, он должен запланировать передачу сообщения DAO в соответствии с правилами параграфов 9.3 и 9.5.

  2. В режиме Non-Storing при увеличении DTSN одним из родителей DAO узел должен инкрементировать DTSN.

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

В режиме Non-Storing обновление DTSN будет также заставлять непосредственных потомков узла инкрементировать свои DTSN, запуская набор обновлений DAO от всего субграфа DODAG. Обычно в режиме Non-Storing только корень непосредственно инкрементирует DTSN при необходимость обновления DAO без глобального восстановления (как при инкрементировании DODAGVersionNumber). Обычно в режиме Non-Storing некорневые узлы обновляют DTSN после того, как это сделают их родители.

В общем случае узел может запускать обновления DAO в соответствии с логикой реализации, например при обнаружении несогласованности маршрута Downward или по внутреннему таймеру.

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

9.7. Режим без хранения

В режиме Non-Storing протокол RPL маршрутизирует сообщения в нисходящем направлении с помощью IP source-route. Ниже приведены правила для узлов, работающих в режиме Non-Storing (для режима Storing см. параграф 9.)8.

  1. Поле DODAG Parent Address в опции Transit Information должно содержать один или несколько адресов, которые должны быть адресами родителей DAO для отправителя.

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

  3. При удалении узлом одного из своих родителей он может создать сообщение DAO с обновлённой опцией Transit Information.

В режиме Non-Storing узлы используют сообщения DAO для указания своих родителей DAO корню DODAG, который может собирать нисходящий маршрут к узлу, используя наборы родителей DAO от каждого узла на этом маршруте. Данные Path Sequence позволяют обнаруживать устаревшую информацию DAO. Цель такого поэтапного расчёта маршрутов является минимизация трафика при смене родителей DAO. Если узел сообщает полные маршруты source- route, при изменении родителя DAO весь субграф DODAG будет передавать новые DAO корню DODAG. Поэтому в режиме Non-Storing узел может передать одно сообщение DAO, хотя ничто не препятствует отправке по одному DAO каждому из родителей DAO.

Узлы упаковывают DAO, передавая одно сообщение с несколькими опциями RPL Target, за каждой из которых следуют опции Transit Information.

9.8. Режим с хранением

В режиме Storing протокол RPL маршрутизирует сообщения вниз (Downward) по адресу получателя IPv6. Ниже приведены правила для узлов, работающих в режиме с хранением.

  1. Поле DODAG Parent Address в опции Transmit Information должно быть пустым.

  2. При получении индивидуального сообщения DAO узел должен вычислить, изменит ли DAO набор префиксов, анонсируемых узлом. В этот расчёт следует включать данные Path Sequence из опций Transit Information, связанных с DAO, для проверки наличия в сообщении DAO более свежей информации, заменяющей хранящиеся на узле сведения. При наличии таких данных узел должен создать новое сообщение DAO и передать его в соответствии с правилами параграфа 9.5. Такие изменения включают получение No-Path DAO.

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

  4. При удалении узлом другого узла из числа родителей DAO ему следует передать сообщение No-Path DAO (параграф 6.4.3) этому удаляемому родителю DAO для аннулирования имеющегося маршрута.

  5. Если сообщения по анонсируемому нисходящему адресу сталкиваются с ошибкой пересылки, NUD или похожим отказом, узел может пометить адрес как недоступный и создать сообщение No-Path DAO.

Сообщения DAO анонсируют адреса и префиксы, к которым у узла есть маршруты. В отличие от режима Non-Storing, DAO не содержат сведений о самом маршруте, эта информация хранится в сети и неявно выводится по адресу отправителя IPv6. Когда хранящий узел создаёт DAO, он использует сохранённое состояние полученных DAO для создания набора опций RPL Target и связанных с ними опций Transit22 Information. Поскольку информация хранится на каждом узле (в таблицах маршрутизации), DAO передаются на прямую хранящим информацию родителям DAO.

9.9. Управление путями

Сообщение DAO от узла содержит одну или несколько опций Target, каждая из которых задаёт префикс, анонсируемый узлом, префикс адреса за пределами LLN, адрес получателя с суб-DODAG узла или multicast-группу, которую слушает узел в суб-DODAG. Поле Path Control в опции Transit Information позволяет узлам запрашивать или разрешать множество маршрутов Downward. Узел создаёт поле Path Control в опции Transit Information, как описано ниже.

  1. Размер поля Path Control в битах должен составлять (PCS + 1), где значение PCS задано в поле управления опции DODAG Configuration. Биты сверх (PCS + 1) должны сбрасываться (0) при передаче и должны игнорироваться при получении. Биты в переделах (PCS + 1) считаются активными.

  2. Узел должен логически группировать своих родителей DAO при заполнении поля Path Control, включая в каждую группу родителей с одинаковым уровнем предпочтения. Группы должны быть упорядочены про предпочтительности, что позволит логически сопоставить родителей DAO с субполями Path Control (Рисунок 27). Группы могут повторяться для использования всего пространства поля Path Control, но порядок, включая повторяющиеся группы, должен сохраняться для корректной передачи предпочтений.

  3. Для опции RPL Target, описывающей собственный адрес узла или префикс вне LLN, должен быть установлен хотя бы один активный бит поля Path Control и может быть установлено большее число активных битов.

  4. Если узел получает множество DAO с одинаковой опцией RPL Target, он должен использовать побитовую операцию ИЛИ (OR) для полученных полей Path Control, в результате которой будет получено число маршрутов Downward для префикса.

  5. При передаче узлом сообщения DAO одному из родителей он должен выбрать в субполе один или несколько активных битов, отображённых на группу этого родителя, в поле Path Control. Данный бит может быть активным лишь для одного родителя. Передаваемое этому родителю сообщение DAO должно иметь эти активные биты установленные, а прочие активные биты — сброшенными.

  6. Для опции RPL Target и номера DAOSequence в DAO узел, передающий сообщения разным родителям DAO, должен иметь развязанные (disjoint) наборы активных битов Path Control. Узлу недопустимо передавать один и тот же активный бит в сообщениях DAO для разных родителей DAO.

  7. Биты Path Control следует выделять в соответствии с отображением предпочтительности родителей DAO на субполя Path Control так, чтобы активные биты или группы битов Path Control, относящиеся к конкретному субполю Path Control выделялись родителям DAO из сопоставленной с этим субполем группы.

  8. В режиме Non-Storing узел может «пропускать» DAO через себя без обработки поля Path Control.

  9. Узлу недопустимо передавать сообщения DAO без активных битов в поле Path Control. Возможно, что для данной опции Target у узла не будет достаточно числа агрегированных битов Path Control для передачи сообщения DAO с этой опцией Target каждому из родителей DAO, и в этом случае наименее предпочтительные родитель DAO могут не получить сообщение DAO для этой цели Target.

Поле Path Control позволяет узлу ограничить число генерируемых для него маршрутов Downward. Узел устанавливает в Path Control число битов, равное предпочитаемому им числу маршрутов Downward. Каждый бит отправляется единственному родителю DAO и возможна передача одному родителю кластера битов для распределения между его родителями DAO.

Узлу, предоставляющему маршрут DAO для цели Target, которая имеет связанное поле Path Control, следует использовать содержимое этого поля Path Control для задания предпочтительности разных маршрутов DAO для Target. Назначение поля Path Control выводится из предпочтений (родителей DAO), определённых на основе знания этим узлом лучшей «сквозной» метрики нисходящих маршрутов в соответствии с предметной функцией OF. В режиме Non-Storing корень может определить маршрут Downward объединяя сведения из каждого полученного DAO, включающие указание в Path Control предпочтительных родителей DAO.

9.9.1. Пример Path Control

Представим сеть LLN в режиме Storing, содержащую узел N с родителями P1, P2, P3, P4 и потомками C1, C2, C3 в его суб-DODAG. Пусть PCS = 7, что указывает 8 активных битов Path Control: 11111111b. Поле Path Control делится на 4 субполя PC1 (11000000b), PC2 (00110000b), PC3 (00001100b), PC4 (00000011b), которые представляют 4 разных уровня предпочтения, как показано на рисунке 27. Реализация на узле N в этом примере создаёт группу {P1, P2} с одинаковым предпочтением, которая предпочтительней {P3}, а {P3} предпочтительней {P4}. Узел N создаёт в Path Control отображение, показанное ниже.

              {P1, P2} -> PC1 (11000000b) в поле Path Control
              {P3}     -> PC2 (00110000b) в поле Path Control
              {P4}     -> PC3 (00001100b) в поле Path Control
              {P4}     -> PC4 (00000011b) в поле Path Control

Отметим повторение {P4} для заполнение поля Path Control.

  1. Пусть C1 передаёт DAO для Target T с Path Control 10000000b. N сохраняет запись, связывающую 10000000b с полем Path Control для C1 и Target T.

  2. Пусть C2 передаёт DAO для Target T с Path Control 00010000b. N сохраняет запись, связывающую 00010000b с полем Path Control для C223 Target T.

  3. Пусть C3 передаёт DAO для Target T с Path Control 00001100b. N сохраняет запись, связывающую 00001100b с полем Path Control для C31 и Target T.

  4. Позднее N генерирует DAO для Target T. N создаёт поле Path Control, объединяя операцией ИЛИ (OR) вклады всех своих потомков из DAO для Target T. В результате поле Path Control имеет активные биты 10011100b.

  5. N распространяет биты Path Control своим родителям P1, P2, P3, P4 для подготовки сообщений DAO.

  6. P1 и P2 подходят для получения активных битов из наиболее предпочтительного субполя (11000000b) со значением 10000000b в агрегированном поле Path Control. Узел N должен установить бит лишь для одного из двух родителей. В данном случае бит выделен узлу P1 и он получает поле Path Control = 10000000b в DAO. Для узла P2 битов не выделено, он получает Path Control = 00000000b и DAO не может создаваться для P2 по причине отсутствия активных битов.

  7. Второе по предпочтительности субполе (00110000b) имеет биты 00010000b. N сопоставляет это поле с P3 и может выделить активный бит узлу P3, создавая для него DAO с Target T и Path Control = 00010000b.

  8. Третьим по предпочтительности является субполе (00001100b) с активными битами 00001100b, сопоставленное в N с узлом P4. N может выделить оба бита узлу P4, создав DAO для P4 с Target T и Path Control = 00001100b.

  9. Наименее предпочтительное субполе (00000011b) не имеет активных битов. Если бы эти биты были, их следовало бы добавлять в поле Path Control сообщения DAO для P4.

  10. Процесс заполнения сообщений DAO для P1, P2, P3, P4 с другими целями (не T) продолжается в соответствии с агрегированными полями Path Control для этих целей.

9.10. Сообщения с анонсами групповых адресатов

Особым случаем работы DAO, отличающимся от передачи индивидуальных DAO, является групповая передача DAO для заполнения таблицы маршрутизации записями с одним интервалом пересылки (1-hop).

  1. Узел может передать групповое сообщение DAO в локальный канал по групповому адресу all-RPL-nodes.

  2. Групповые сообщения DAO должны применяться лишь для анонсирования сведений о самом узле, т. е. префиксов, принадлежащих узлу или напрямую соединённых с ним, таких как multicast-группы, на которые узел подписан, или принадлежащий узлу глобальный адрес.

  3. Групповые сообщения DAO недопустимо использовать для ретрансляции сведений о связности, полученных от другого узла (например, в индивидуальных DAO).

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

Групповые сообщения DAO могут применяться для поддержки прямого взаимодействия P2P без использования DODAG для ретрансляции пакетов.

10. Механизмы защиты

В этом разделе описана генерация и обработка защищённых сообщений RPL. Старший бит кода сообщения RPL указывает состояние защищенности сообщения. В дополнение к защищённым вариантам базовых управляющих сообщений (DIS, DIO, DAO, DAO-ACK) RPL включает несколько сообщений, которые актуальны лишь в сетях со включённой защитой.

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

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

10.1. Обзор защиты

RPL поддерживает три режима защиты, описанных ниже.

Unsecured — без защиты

В этом режиме RPL использует базовые сообщения DIS, DIO, DAO, DAO-ACK без разделов Security. Поскольку в сети могут применяться иные методы защиты (например, защита на канальном уровне), использование этого режима не означает полного отсутствия защиты сообщений.

Preinstalled — с предустановленным ключом

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

Authenticated — с проверкой подлинности

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

Этот режим не поддерживает симметричные алгоритмы шифрования. На момент создания этого документа протокол RPL поддерживал лишь симметричные алгоритмы и данный режим включён с учётом возможной в будущем поддержки других криптографических примитивов (см. 10.3. Установка ключей).

Независимо от использования защиты экземпляром RPL он указывает применение защищённых сообщений RPL с помощью бита A в опции DAG Configuration.

Данная спецификация задаёт режим CCM (Counter с цепочками шифрованных блоков и кодом аутентификации сообщений) в качестве криптографической основы защиты RPL [RFC3610]. В этой спецификации CCM использует алгоритм шифрования AES-128. В разделе Security зарезервированы биты для задания в будущем иных алгоритмов.

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

10.2. Присоединение к защищённой сети

Защита RPL предполагает, что желающий присоединиться к защищённой сети узел имеет заранее созданный общий ключ для коммуникаций с соседями и корнем RPL. Для присоединения к защищённой сети RPL узел прослушивает защищённые DIO или инициирует их, отправляя защищённое сообщение DIS. В дополнение к правилам для DIO и DIS из раздела 8, защищённые сообщения DIO и DIS следуют приведённым ниже правилам.

  1. При отправке начального защищённого сообщения DIS в поле Key Identifier Mode должно устанавливаться значение 0 (00), а в Security Level должно устанавливаться значение 1 (001). Используемый ключ должен быть заранее заданным ключом группы (Key Index 0x00).

  2. При сбросе узлом таймера Trickle в ответ на защищённое сообщение DIS (параграф 8.3) следующее передаваемое им сообщение DIO должно быть защищённым DIO с такими же настройками защиты как в DIS. Если узел получает множество защищённых DIS до того, как передаст DIO, защищённое сообщение DIO должно иметь такие же параметры защиты, как последнее сообщение DIS, на которое узел отвечает.

  3. При передаче узлом DIO в ответ на индивидуальное защищённое сообщение DIS (параграф 8.3), сообщение DIO должно быть защищённым.

Приведённые выше правила позволяют узлу присоединиться к защищённому экземпляру RPL с использованием заранее настроенного общего ключа. Когда узел присоединён с помощью такого ключа к DODAG, его возможности определяет бит A в опции Configuration. При сброшенном флаге A узел может использовать предустановленный общий ключ обычным способом и может вводить сообщения DIO, DAO и т. п. Если бит A в опции Configuration установлен и RPL Instance работает в режиме authenticated, выполняются приведённые ниже правила.

  1. Узлу недопустимо анонсировать ранг, отличающийся от INFINITE_RANK, в DIO, защищённых с Key Index 0x00. При обработке DIO, защищённых с Key Index 0x00, обрабатывающий узел должен считать, что Rank = INFINITE_RANK. Все прочие значения ведут к отбрасыванию сообщения.

  2. Защищённым с Key Index 0x00 сообщениям DAO недопустимо иметь опцию RPL Target с префиксом, отличающимся от адреса узла. Если узел получает сообщение DAO, защищённое с использованием предустановленного общего ключа, где опция RPL Target не совпадает с адресом отправителя IPv6, он должен отбросить защищённое сообщение DAO без дальнейшей обработки.

Приведённые выше правила означают, что для экземпляров RPL с установленным битом A, использующих Key Index 0x00, узел может присоединиться к RPL Instance как хост, но не маршрутизатор. Узел должен взаимодействовать с удостоверяющим центром для получения возможности действовать как маршрутизатор.

10.3. Установка ключей

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

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

10.4. Проверка согласованности

Узлы RPL передают сообщения CC для синхронизации счётчиков и защиты от атак с повтором сообщений.

  1. Если узел получает индивидуальное сообщение CC со сброшенным битом R входит или находится в процессе присоединения к связанному графу DODAG, ему следует отвечать отправителю индивидуальным сообщением CC. Отклик должен иметь установленный флаг R, а также должен включать значения полей CC nonce, RPLInstanceID и DODAGID из полученного сообщения.

  2. При получении группового сообщения CC узел должен отбросить его без обработки.

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

10.5. Счётчики

В простейшем случае значение счётчика является целым числом без знака, которое узел увеличивает на 1 или больше при каждой защищённой транзакции RPL. Счётчик может быть временной меткой с указанными ниже свойствами.

  1. Временная метка должна быть размером не менее 6 октетов.

  2. Временная метка должна иметь точность 1024 Гц (двоичная миллисекунда).

  3. Началом отсчёта временных меток должно быть 1 января 1970 г, 12:00:00AM UTC.

  4. Если счётчик представляет временную метку, его значение должно вычисляться в соответствии с приведённым далее правилом. Пусть T обозначает метку, S — время начала использования ключа, E — время завершения использования ключа. Значения S и E представляются по трём описанным выше правилам. Если E > T < S, счётчик является недействительным и узлу недопустимо создавать пакет. В ином случае значение счётчика равно T-S.

  5. Если счётчик представляет такую временную метку, узел может установить флаг T в разделе Security защищённых пакетов RPL.

  6. Если поле Counter не представляет такую метку, узлу недопустимо устанавливать флаг T.

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

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

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

10.6. Исходящие пакеты

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

Требования к защите и её уровню для исходящих пакетов RPL определяются базой данных узла о правилах защиты, конфигурация которой зависит от реализации. При передаче защищённых сообщений узел RPL должен включать раздел Security (T, Sec, KIM, LVL) в исходящие пакеты RPL для описания уровня и параметров применяемой защиты (параграф 6.1). Флаг Security в поле RPL Message Code должен быть установлен в защищённых сообщениях RPL.

Значение счётчика, применяемое при создании AES-128 CCM nonce (Рисунок 31) для защиты исходящих пакетов, должно увеличиваться по сравнению с последним значением, переданным по конкретному адресу получателя.

Если правила безопасности требуют применения защиты от задержки, счётчик Timestamp, используемый при создании CCM nonce для защиты исходящих пакетов, должен инкрементироваться в соответствии с правилами параграфа 10.5. Если применяется счётчик Timestamp (установлен флаг T), значение поддерживаемого локально счётчика Timestamp должно включаться как часть передаваемого защищённого сообщения RPL.

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

Правила защиты исходящих пакетов должны определять KIM и Key Identifier, задающие ключ, используемый для криптографической защиты, включая необязательное использование ключей подписи (параграф 6.1). Правила защиты могут также задавать алгоритм (Algorithm) и уровень (Level) защиты в форме аутентификации или аутентификации и шифрования, а также возможное использование подписей в исходящих пакетах.

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

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

10.7. Входящие пакеты

В этом параграфе рассматривается приём и обработка защищённых пакетов RPL. С учётом флага Security в поле RPL Message Code входящего защищённого пакета описана расшифровка пакета RPL и проверка его целостности.

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

Если Security Level (LVL) в сообщении RPL указывает шифрование, узел использует сведения о ключе из поля KIM, а также CCM nonce в качестве входных данных для процесса расшифровки содержимого сообщения. Значение CCM nonce нужно выводить поля Counter в сообщении и других принятых и поддерживаемых локально сведений (см. параграф 10.9.1). Содержимое расшифрованного сообщения извлекается путём вызова режима, обратного криптографической операции, заданной полем Sec в принятом пакете.

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

Если полученное сообщение содержит неинициализированное (0) значение счётчика, а у получателя имеется счётчик входящих сообщений от инициатора сообщения, получатель должен инициировать повторную синхронизацию счётчиков путём передачи отклика CC (параграф 6.6), который должен быть защищён с использованием полного текущего значения счётчика, поддерживаемого для конкретного узла. Значение исходящего счётчика включается в раздел Security, а значение входящего — в данные сообщения CC.

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

Если указана защита от задержки как часть правил, применяется счётчик Timestamp для контроля своевременности полученного сообщения RPL. Если значение Timestamp в принятом сообщении указывает время передачи до поддерживаемого локально времени для инициатора сообщения, это считается попыткой повторного использования и узел должен отбросить пакет. Если принятое значение Timestamp указывает время передачи раньше разности текущего времени за вычетом допустимой задержки при передаче, это считается нарушением задержки и узел должен отбросить пакет.

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

10.7.1. Проверка временной метки ключа

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

10.8. Область защиты целостности и конфиденциальности

Для сообщений RPL ICMPv6 защита RPL целиком охватывает пакет.

Коды MAC и подписи рассчитываются для всего незащищённого пакета IPv6, при этом изменяемые поля IPv6 считаются заполненными нулями в соответствии с правилами 3.3.3.1 [RFC4302] (IPsec AH). Расчёт MAC и подписи происходит до сжатия, которое может применяться нижележащими уровнями.

Шифрование сообщения RPL ICMPv6 начинается с первого байта после раздела Security и продолжается до последнего байта пакета. Заголовки IPv6 и ICMPv6, а также часть сообщения RPL до конца раздела Security не шифруются, поскольку они нужны для корректной расшифровки пакета.

Например, узел, передающий сообщение с LVL=1, KIM=0 и Algorithm=0, использует алгоритм CCM [RFC3610] для создания пакета с атрибутами ENC-MAC-32 — пакет шифруется и к нему добавляется 32-битовый код MAC. Ключ блочного шифра определяет Key Index. Значение CCM nonce рассчитывается в соответствии с параграфом 10.9.1, шифруемым и аутентифицируемым сообщением является часть сообщения RPL с первого байта после раздела Security и до конца пакета. Дополнительные данные проверки подлинности начинаются с заголовка IPv6 и завершаются последним байтом раздела RPL Security.

10.9. Криптографический режим работы

Криптографический режим, описанный в этой спецификации (Algorithm = 0), основан на CCM и блочном шифре AES-128 [RFC3610]. Режим широко поддерживается имеющимися реализациями. Для режима CCM требуется CCM nonce.

10.9.1. CCM Nonce

Узел RPL создаёт CCM nonce с показанным на рисунке 31 форматом.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       Source Identifier                       +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Counter                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|KIM|Resvd| LVL |
+-+-+-+-+-+-+-+-+

Рисунок 31. CCM Nonce.


Source Identifier

8-битовый логический идентификатор отправителя защищённого пакета.

Counter

4-битовое поле, содержащее (несжатое) значение соответствующего поля в опции Security управляющего сообщения RPL.

Key Identifier Mode (KIM)

2-битовое поле, содержащее значение соответствующего поля в опции Security управляющего сообщения RPL.

Security Level (LVL)

3-битовое поле, содержащее значение соответствующего поля в опции Security управляющего сообщения RPL.

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

Все поля CCM nonce представляются с порядком битов и байтов от старшего к младшему.

10.9.2. Подписи

Если KIM (3) указывает применение подписи, узел добавляет к содержимому пакета подпись, размер которой определяет поле Security Level (LVL). Схема подписи в RPL для режима защиты 3 использует экземпляр алгоритма RSA (RSASSA-PSS), как задано в параграфе 8.1 [RFC3447]. Открытым ключом служит пара (n,e), где n — 2048- 3072-битовый модуль RSA, а e=2^{16}+1. В качестве схемы шифрования применяется режим CCM [RFC3610] с M=0 (как потоковый шифр). Отметим, что [RFC3610] не разрешает режим CCM с M=0, однако в RPL явно разрешён такой режим при использовании с подписью, поскольку та обеспечивает достаточную аутентификацию данных. Здесь режим CCM с M=0 применяется как указано в [RFC3610], но поле M’ в параграфе 2.2 должно иметь значение 0. Применяется хэш-функция SHA-256, заданная в параграфе 6.2 [FIPS180], с правилами кодирования из параграфа 8.1 в [RFC3447].

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

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

Реализации, поддерживающей подписи RSA размером 2048 или 3072 бита, следует поддерживать проверку для обоих размеров подписи RSA (2048 и 3072). Это позволит обновлять развёртывание RPL.

11. Пересылка пакетов, обнаружение и предотвращение петель

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

Этот документ задаёт протокол маршрутизации. Ниже представлены не являющиеся нормативными предложения, способные помочь при разработке реализации пересылки, которая сможет работать с RPL. При пересылке пакетов адресату выбор преемника (next-hop) происходит в указанном порядке.

  1. Эта спецификация описывает лишь выбор преемника из DODAG Version, соответствующей RPLInstanceID, отмеченному в заголовке IPv6 пересылаемого пакета. Маршрутизация вне экземпляра может быть выполнена путём установки дополнительных правил, таких как строгое упорядочение экземпляров и протоколов маршрутизации для защиты от петель. Такие правила могут быть заданы отдельным документом.

  2. Если локальные административные предпочтения задают выбор маршрута, полученного от другого (не RPL) протокола, используется этот преемник.

  3. Если заголовок пакета содержит заданный источником маршрут путём включения заголовка RH4 в соответствии с [RFC6554], применяется этот маршрут. Если узел не может переслать пакет по заданному отправителем маршруту, пакет следует отбросить. Узел может записать это в системный журнал и может передать ошибку ICMPv6 в сообщении Source Routing Header для отправителя пакета (см. параграф 20.18).

  4. Если в таблице маршрутов имеется соответствующая адресату запись, полученная из анонса multicast-получателя (например, получателем является one-hop-сосед), используется этот преемник.

  5. Если в таблице маршрутизации для адресата имеется запись, полученная из анонса индивидуального получателя (например, он расположен ниже в субграфе DODAG), используется этот преемник. При наличии битов DAO Path Control, связанный с несколькими преемниками эти биты служат для упорядочения преемников при выборе. Если для данного бита DAO Path Control имеется несколько преемников, предпочтение отдаётся подтвердившему этот бит последним.

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

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

  8. Если преемник не найден, пакет отбрасывается и может быть передано сообщение ICMP Destination Unreachable (обнаружено несоответствия).

При пересылке значение Hop Limit должно быть уменьшено в соответствии с [RFC2460].

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

11.2. Обнаружение и предотвращение петель

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

Для обнаружения петель RPL использует сведения о пакете (RPL Packet Information), передаваемые в пакетах данных на основе внешних механизмов, таких как [RFC6553], которые помещают RPL Packet Information в заголовок опции IPv6 Hop-by-Hop. Содержимое RPL Packet Information описано ниже.

Down ‘O’

Флаг, указывающий продвижение пакета вверх (Up) или вниз (Down). Маршрутизатор устанавливает флаг O, когда предполагается перемещение пакета вниз (по маршрутам DAO), и сбрасывает его для пакетов, пересылаемых в направлении корня DODAG (к узлу с меньшим рангом). Хост или лист RPL должен сбрасывать (0) флаг O.

Rank-Error ‘R’

Флаг, указывающий обнаружение ошибки ранга (Rank). Ошибкой считается несоответствие относительных рангов и направления, указанного битом O. Хост или лист RPL должен сбрасывать (0) флаг R.

Forwarding-Error ‘F’

Флаг невозможности пересылки узлом пакета в направлении адресата. Флаг может устанавливать дочерний узел, у которого нет маршрута к получателю пакета с флагом O. Хост или лист RPL должен сбрасывать (0) флаг F.

RPLInstanceID

8-битовое поле, указывающее экземпляр DODAG, по которому передаётся пакет.

SenderRank

16-битовое поле, где отправитель устанавливает 0, а маршрутизатор, пересылающий пакет в сети RPL, — DAGRank(rank).

11.2.1. Работа узла-источника

Если источнику известно предпочтительное значение RPLInstanceID для пакета, он должен установить его в связанном с пакетом поле RPLInstanceID. В противном случае должно устанавливаться значение RPL_DEFAULT_INSTANCE.

11.2.2. Работа маршрутизатора

11.2.2.1. Пересылка пакетов экземпляром

Отправитель связывает с пакетом значение RPLInstanceID, которое должно соответствовать экземпляру RPL, куда пакет помещается узлом (хостом или маршрутизатором). RPLInstanceID является частью RPL Packet Information.

Маршрутизатор RPL, пересылающий пакет в сеть RPL, должен проверить наличие в пакете RPL Packet Information и должен вставить RPL Packet Information, если этих данных нет. Если маршрутизатор является входом в сеть RPL, он должен установить поле RPLInstanceID в RPL Packet Information. Детали выбора маршрутизатором значения RPLInstanceID выходят за рамки этой спецификации и оставлены на будущее.

Маршрутизатор, пересылающий пакет за пределы сети RPL, должен удалить RPL Packet Information.

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

11.2.2.2. Обнаружение петель несогласованности DAG

Граф DODAG не согласован, если направление пакета не соответствует соотношению Rank. Несоответствием считается получение пакета с установленным битом O (Down) от узла с большим Rank или со сброшенным флагом O (Up) от узла с меньшим рангом.

Когда корень DODAG инкрементирует DODAGVersionNumber, может образоваться временный разрыв Rank между следующей и прежней версией DODAG, в частности, если узлы корректируют свой ранг в следующей DODAG Version и откладывают переход к новой версии DODAG. Маршрутизатор, остающийся в прежней DODAG Version, может переслать пакет (будущему) родителю, который относится к новой версии DODAG. В некоторых случаях это может приводить к обнаружению родителем несогласованности, поскольку ранжирование в прежней DODAG Version не обязательно совпадает с текущей версией DODAG и пакет может быть сочтён не продвигающимся вперёд. Если передающий маршрутизатор знает, что выбранный потомок уже присоединён к новой версии DODAG, он должен установить SenderRank = INFINITE_RANK, поскольку пересылает пакет через разрыв в следующую версию DODAG, чтобы предотвратить ложное детектирование несогласованности рангов.

Одна несогласованность на пути не считается критической ошибкой и обработка пакета может продолжаться. Однако обнаружение второй несогласованности на пути того же пакета является ошибкой и пакет должен быть отброшен. Этот процесс управляется битом Rank-Error, связанным с пакетом. При обнаружении несогласованности для пакета, где бит Rank-Error не установлен, флаг Rank-Error устанавливается, а если он уже установлен, пакет должен отбрасываться, а таймер Trickle должен сбрасываться.

11.2.2.3. Обнаружение и исправление несогласованности DAO

Механизм устранения несогласованности DAO применяется только в режиме Storing. В режиме Non-Storing маршрут пакетов задаётся отправителем и несогласованность DAO не корректируется локально. Вместо этого в корень передаётся сообщение ICMP с новым кодом ошибки в заголовке заданной источником маршрутизации (Error in Source Routing Header), которое имеет тот же формат, что и сообщение Destination Unreachable, определённое в [RFC4443]. Возвращаемая часть вызвавшего сообщение ICMP пакета должна включать содержимое пакета по меньшей мере до заголовка маршрутизации, а сам этот заголовок должен использоваться узлом, чтобы получателем в заголовке IPv6 был следующий интервал, который оказался недоступным для этого узла.

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

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

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

12. Групповой трафик

В этом разделе описана групповая маршрутизация в сети IPv6 RPL и, в частности, применение индивидуальных DAO для ретрансляции регистрации групп. Маршрутизация индивидуального и группового трафика может применять общий граф DODAG. Рассматривается способ расширения регистрации групп и работа инфраструктуры пересылки без полного описания группового трафика в LLN и без описания построения DODAG специально для групповой пересылки и детали групповой адресации в RPL. Это будет предметом других спецификаций.

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

Узлам, поддерживающим режим RPL Storing, следует поддерживать групповые операции DAO, как описано ниже. От узлов, поддерживающих лишь режим Non-Storing, такая поддержка не ожидается. Групповые операции управляются полем MOP в DIO.

  • Если поле MOP требует поддержки групповых операций, узел, присоединяющийся к сети RPL как маршрутизатор, должен выполнять описанные в этом разделе операции групповой сигнализации и пересылки в сети RPL. Узел, не поддерживаемых групповых операций, заданных полем MOP, может быть только листом.

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

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

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

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

13. Поддержка маршрутной смежности

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

В протоколах IGP, таких как OSPF [RFC4915] или IS-IS [RFC5120], поддержка маршрутной смежности включает использование механизмов keepalive (Hello) или других протоколов, таких как двухстороннее обнаружение пересылки (Bidirectional Forwarding Detection или BFD) [RFC5881] и обнаружение соседства в MANET (MANET Neighborhood Discovery Protocol или NHDP) [RFC6130]. К сожалению такой проактивный подход часто нежелателен в средах с ограничениями, где он будет создавать избыточный трафик, негативно влияющий на загрузку каналов и ресурсы узлов.

В отличие от таких протоколов, RPL не применяет механизмов keepalive для обнаружения отказов маршрутной смежности, поскольку такие механизмы в большинстве случаев слишком накладны в плане пропускной способности и, ещё важнее, потребляемой мощности (устройства с батарейным питанием не могут позволить себе периодическую отправку сообщений keepalive). Тем не менее, для RPL нужны внешние механизмы обнаружения недоступности соседей. Для таких механизмов предпочтительна реакция на трафик, чтобы минимизировать издержки на поддержание маршрутной смежности сосредоточится на реально используемых каналах. Примерами реактивных механизмов могут быть обнаружение недоступности соседей (Neighbor Unreachability Detection) [RFC4861] и триггеры канального уровня [RFC5184] на основе таких событий, как состояния ассоциаций и подтверждения L2.

14. Рекомендации для предметных функций

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

Функция OF указывается в сообщении DIO с использованием кода OCP и задаёт метод, который должен применяться для создания графа DODAG. Коды OCP заданы в [RFC6552] и сопровождающих спецификациях.

14.1. Поведение предметной функции

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

  • Выбор родителя запускается всякий раз, когда событие указывает обновление сведений о потенциальном next-hop. Это может быть результатом приёма сообщения DIO, завершением отсчёта таймера, недоступности всех родителей DODAG или срабатывания триггера, указывающего смену состояния кандидата в соседи.

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

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

  • OF рассчитывает Rank узла для сравнения путём добавления к рангу кандидата значения, представляющего относительное положение узла и кандидата в DODAG Version.

    • Увеличение ранга должно быть не меньше MinHopRankIncrease.

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

    • Кандидаты в соседи, вызывающие рост Rank для узла, не учитываются при выборе родителей.

  • Кандидаты в соседи, анонсирующие функцию OF, несовместимую с набором OF, указанных функциями политики, игнорируются.

  • При сканировании всех кандидатов в соседи OF сохраняет текущего лучшего родителя и сравнивает его возможности с текущим кандидатом в соседи. OF определяет число тестов, которые имеют решающее значение для достижения цели. Тесты для маршрутизаторов определяют их упорядочение:

    • если результаты для маршрутизаторов совпадают, для них выполняется следующий тест;

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

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

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

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

    • кандидаты в соседи из других DODAG игнорируются;

    • кандидаты в соседи, чей Rank больше ранга узла, игнорируются;

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

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

15.Предложения по взаимодействию с ND

Эта спецификация заимствует опции информации о префиксе (Prefix Information Option или PIO) и маршруте (Route Information Option или RIO) напрямую из IPv6 ND. Предполагается, что в будущих спецификациях, основанных на этой, могут возникнуть дополнительные причины использования IPv6 ND. В этом разделе приведены некоторые предложения для таких спецификаций.

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

  • Коды RPL Type должны выделяться из реестра RPL Control Message Options.

  • Поля RPL Length должны указывать размер в октетах в отличие от ND Length с 8-октетными словами.

  • Опции RPL обычно не требуют выравнивания по 8-октетным границам.

  • При отображении или транспонировании опции IPv6 ND для распространения в качестве опции RPL октеты заполнения следует по возможности удалять. Например, поля Prefix Length в PIO достаточно для указания размера поля Prefix. При отображении или транспонировании опции RPL для распространения как опции IPv6 ND октеты заполнения следует восстанавливать. Эта процедура должна быть однозначной.

16. Требования к взаимодействию

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

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

16.1. Общие требования

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

Все реализации RPL должны поддерживать использование опций RPL Packet Information, передаваемых в пакетах данных (параграф 11.2). Один из таких механизмов описан в [RFC6553].

Реализации RPL должны поддерживать обнаружение недоступности соседей (Neighbor Unreachability Detection или NUD) или эквивалентный механизм для контроля доступности соседних узлов RPL (параграф 8.2.1). Могут оптимизироваться дополнительные механизмы для реализаций с ограниченными возможностями, такие как рекомендации с канального уровня.

Данная спецификация предоставляет способы получения PIO и формирования таким образом адреса IPv6. При использовании этого механизма может потребоваться распознавание адресов и обнаружение дубликатов с помощью внешних процессов, таких как IPv6 ND [RFC4861] или 6LoWPAN ND [6LOWPAN-ND].

16.2. Работа в качестве листа RPL

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

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

  • Поддержка конкретной функции OF не требуется.

  • Лист обычно не выдаёт сообщений DIO и может выдавать сообщения DAO и DIS. Узел воспринимает сообщения DIO, хотя обычно игнорирует сообщения DAO и DIS.

16.3. Работа в качестве маршрутизатора RPL

При отсутствии дополнительных рекомендаций реализация маршрутизатора RPL должна поддерживать предметную функцию OF0 без метрики [RFC6552].

Для согласованной работы реализация маршрутизатора RPL должна поддерживать MOP, используемый в DODAG.

Все маршрутизаторы RPL должны реализовать механизм Trickle [RFC6206].

16.3.1. Поддержка лишь восходящих маршрутов

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

  • Поддержка маршрутов Upward (8. Восходящие маршруты).

  • Поддержка MOP = 0 (20.3. Новый реестр для режимов работы (MOP)).

  • Выдаются сообщения DIO и DIS, но не DAO. Сообщения DIO и DIS воспринимаются, DAO игнорируются.

16.3.2. Поддержка маршрутов Upward и Downward в режиме Non-Storing

Требования к реализации маршрутизатора RPL, поддерживающего восходящие и нисходящие маршруты в режиме Non-Storing, приведены ниже.

  • Поддержка маршрутов Upward (8. Восходящие маршруты).

  • Поддержка маршрутов Downward в режиме Non-Storing (9. Нисходящие маршруты).

  • Поддержка MOP = 1 (20.3. Новый реестр для режимов работы (MOP)).

  • Заданные отправителем маршруты для трафика Downward ([RFC6554]).

  • Выдаются сообщения DIO и DIS, а также сообщения DAO для корня DODAG. Сообщения DIO и DIS воспринимаются, а сообщения DAO игнорируются узлами, не служащими корнем DODAG. Групповой трафик не поддерживается описанными этой спецификацией способами, но может поддерживаться иным путём.

16.3.3. Поддержка маршрутов Upward и Downward в режиме Storing

Требования к реализации маршрутизатора RPL, поддерживающего восходящие и нисходящие маршруты в режиме Storing, приведены ниже.

  • Поддержка маршрутов Upward (8. Восходящие маршруты).

  • Поддержка маршрутов Downward в режиме Non-Storing (9. Нисходящие маршруты).

  • Поддержка MOP = 2 (20.3. Новый реестр для режимов работы (MOP)).

  • Выдаются и воспринимаются сообщения DIO, DIS, DAO. Групповой трафик не поддерживается описанными этой спецификацией способами, но может поддерживаться иным путём.

16.3.3.1. Необязательная поддержка Basic Multicast Scheme

В режиме Storing может быть реализована базовая поддержка группового трафика:

  • Basic Multicast Support (12. Групповой трафик).

  • MOP = 3 (20.3. Новый реестр для режимов работы (MOP))

16.4. Вопросы для будущих спецификаций

Ниже перечислен ряд вопросов, оставленных для будущих спецификаций.

  • Подключение других (не RPL) узлов, таких как хосты IPv6, например, для согласованного распространения им по меньшей мере данных PIO.

  • Получение данных аутентификации для поддержки режима с проверкой подлинности (10.3. Установка ключей).

  • Детали одновременной работы с несколькими экземплярами.

  • Расширенные механизмы настройки, такие как предоставление RPLInstanceID, параметризация функций OF, параметры управления защитой. Предполагается расширение сообщений DIO для этих механизмом как средства распространения через DODAG.

17. Константы и переменные RPL

BASE_RANK = 0

Ранг виртуального корня, который может служить для координации множества корней.

ROOT_RANK

Ранг для корня DODAG, имеющий значение MinHopRankIncrease (анонсированное корнем DODAG), поэтому DAGRank(ROOT_RANK) = 1.

INFINITE_RANK = 0xFFFF

Константа, ограничивающая максимальное значение Rank.

RPL_DEFAULT_INSTANCE = 0

Значение RPLInstanceID, применяемое протоколом на узлах без политики переопределения.

DEFAULT_PATH_CONTROL_SIZE = 0

Принятое по умолчанию значение для поля PCS в опции DODAG Configuration, указывающего число значимых битов поля Path Control в опции Transit Information. Это задаёт простейший случай, ограничивая разветвление до 1 и позволяя узлу отправлять сообщения DAO лишь одному родителю.

DEFAULT_DIO_INTERVAL_MIN = 3

Принятое по умолчанию значение, используемое при настройке Imin для таймера DIO Trickle. Это значение задаёт Imin = 8 мсек.

DEFAULT_DIO_INTERVAL_DOUBLINGS = 20

Принятое по умолчанию значение, используемое при настройке Imax для таймера DIO Trickle. Это значение задаёт максимальный интервал 2,3 часа.

DEFAULT_DIO_REDUNDANCY_CONSTANT = 10

Принятое по умолчанию значение, используемое при настройке k для таймера DIO Trickle. Это значение задаёт консервативный механизм подавления Trickle.

DEFAULT_MIN_HOP_RANK_INCREASE = 256

Принятое по умолчанию значение MinHopRankIncrease. Это задаёт 8-битовую целую часть Rank.

DEFAULT_DAO_DELAY = 1 секунда

Принятое по умолчанию значение для таймера DelayDAO (9.5. Планирование передачи DAO).

Таймер DIO

Один экземпляр на граф DODAG, в который узел входит. Завершение отсчёта вызывает передачу сообщения DIO. Таймер Trickle имеет переменный интервал [0, DIOIntervalMin..2DIOIntervalDoublings] (8.3.1. Параметры Trickle).

таймер увеличения версии DAG

До одного экземпляра на граф DODAG, в котором узел служит корнем DODAG. Может не поддерживаться в некоторых реализациях. Завершение отсчёта вызывает увеличение DODAGVersionNumber, приводящее к отправке новой серии обновлённых DIO. Интервал следует выбирать в соответствии со временем распространения DODAG и требованиями приложения (например, время отклика в сравнении с издержками).

Таймер DelayDAO

До одного таймера на родителя DAO (подмножество родителей DODAG, выбранных для получения анонсов адресатов) в DODAG. Завершение отсчёта вызывает отправку DAO родителю DAO (см. параграф 9.5).

RemoveTimer

До одного таймера на запись DAO для соседа, передавшего данное сообщение DAO этому узлу как родителю DODAG. Завершение отсчёта вызывает анонс No-Path или немедленное удаление записи DAO, если нет родителей DAO.

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

В этом разделе рассматриваются вопросы управляемости RPL и работы протокола RPL в сети LLN, включая настройку, мониторинг, контроль отказов, учёт и производительность протокола в свете рекомендаций [RFC5706].

18.1. Введение

Большинство имеющихся стандартов IETF для управления — это модули MIB (модели данных на основе SMI24) для мониторинга и управления сетевыми устройствами. Для многих протоколов сообщество IETF использовало стандартную схему управления IETF (Standard Management Framework), включающую простой протокол управления сетью (Simple Network Management Protocol или SNMP) [RFC3410], SMI [RFC2578] и модели данных MIB для управления новыми протоколами.

Как указано в [RFC5706], общая политика в части операций и управления была преобразована в политику, более открытую для набора инструментов и протоколов управления, а не полагающуюся на единственный протокол, такой как SNMP. В 2003 Совет по архитектуре Internet (Internet Architecture Board или IAB) провёл семинар по управлению сетью [RFC3535], где обсуждались сильные и слабые стороны некоторых протоколов IETF для управления сетями и применительно к операционным потребностям, особенно к настройке. Одной из рассмотренных проблем является неудобство для пользователей двоичного формата SNMP [RFC3410]. В случае LLN следует отметить, что на момент подготовки документов рабочая группа CoRE активно занималась вопросами управления ресурсами устройств в LLN. Тем не менее, считается, что этот раздел содержит важные рекомендации в части развёртывания., эксплуатации и управления RPL. В [RFC5706] отмечено:

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

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

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

18.2. Управление конфигурацией

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

18.2.1. Режим инициализации

В параграфе 3.8 «Architectural Principles of the Internet» [RFC1958] сказано: «По возможности избегайте опций и параметров. Любые опции и параметры следует делать настраиваемыми или согласуемыми динамически, а не вручную». Это особенно важно в LLN, где число устройств может быть большим и настройка вручную нежелательна. Это было учтено при разработке RPL с помощью предоставления корнем DODAG множества параметров для устройств, присоединяющихся к DODAG, что позволяет избавиться от громоздкой настройки маршрутизаторов и возможных ошибок в конфигурации (например, в значениях таймеров Trickle и т. п.). Тем не менее, имеются параметры RPL, для которых реализации следует обеспечивать настройку, как описано ниже.

18.2.1.1. Режим работы DIS при загрузке

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

  1. Узел может «хранить молчание», ожидая сообщений DIO от интересующего графа DODAG (анонсы поддерживаемых OF, метрики, ограничений) и не передавая групповых DIO до вхождения в DODAG.

  2. Узел может передать одно или несколько сообщений DIS (возможно с запросом DIO для конкретного DODAG) в качестве начального зондирования ближайших DODAG и при отсутствии ответных сообщений DIO в течение настраиваемого интервала может принять себя роль корня плавающего DODAG и начать отправку групповых сообщения DIO.

Реализации RPL следует разрешать настройку предпочтительного режима из числа перечисленных выше с указанием требуемых параметров (для второго варианта — число сообщений DIS и значение таймера ожидания).

18.2.2. Базовые сообщения DIO и DAO, настройка опций

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

18.2.3. Параметры протокола, настраиваемые на каждом маршрутизаторе в LLN

Реализация RPL должна обеспечивать возможность перечисленных ниже параметров RPL.

  • RPLInstanceID [сообщение DIO, в DIO Base]. Хотя значение RPLInstanceID должен задавать корень DODAG, оно может определяться правилами каждого узла для решения вопроса о присоединении узла к конкретному графу DODAG. На узле может быть задано второе значение RPLInstanceID, если он становится корнем плавающего DODAG.

  • Список поддерживаемых кодов OCP.

  • Список поддерживаемых метрик. В [RFC6551] задано множество метрик и ограничений, применяемых при формировании DODAG. Поэтому реализация RPL должна разрешать настройку списка метрик, которые узел может воспринимать и понимать. При получении DIO и непонятной или неподдерживаемой метрикой или ограничением, как указано в параграфе 8.5, узел будет подключаться в качестве листа.

  • Информация о префиксе с действительным и предпочтительным сроком действия, а также флаги L и A. [сообщения DIO, опция PIO]. Реализации RPL следует разрешать настройку, если опция Prefix Information должна передаваться с сообщением DIO для распространения сведений о префиксе с целью автоматической настройки. В этом случае реализация RPL должна разрешать анонсирование списка префиксов в PIO с соответствующими флагами.

  • Запрашиваемая информация [сообщение DIS, опция Solicited Information]. Реализации RPL следует разрешать настройку условий, когда такие сообщения следует передавать вместе с RPLInstanceID и флагами V, I, D.

  • Условия установки флага K в сообщении DAO [сообщение DAO, в DAO Base].

  • Режим MOP[сообщение DIO, в DIO Base].

  • Route Information (и предпочтение) [сообщение DIO, опция Route Information].

18.2.4. Параметры настройки маршрутизаторов, не являющихся корнем DODAG

Реализация RPL должна разрешать настройку префикса Target [сообщение DAO, опция RPL Target].

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

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

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

  • «порча» оборванных путей (8.2.2.5. «Порча» маршрутов);

  • инициирование локального восстановления.

18.2.5. Параметры для настройки в DODAG Root

Некоторые параметры настраиваются лишь в корне DODAG и анонсируются в опциях сообщений DIO. Как указано в параграфе 8.3, реализация RPL применяет таймеры Trickle для управления отправкой DIO. Работа алгоритма Trickle определяется набором параметров, которые должны быть настраиваемыми и анонсируются корнем DODAG по графу DODAG в сообщениях DIO:

  • DIOIntervalDoublings [сообщение DIO, опция DODAG Configuration];

  • DIOIntervalMin [сообщение DIO, опция DODAG Configuration];

  • DIORedundancyConstant [сообщение DIO, опция DODAG Configuration].

Кроме того, реализации RPL следует разрешать настройку параметров RPL:

  • Path Control Size [сообщение DIO, опция DODAG Configuration];

  • MinHopRankIncrease [сообщение DIO, опция DODAG Configuration];

  • поле DODAGPreference [сообщение DIO, объект DIO Base];

  • DODAGID [сообщение DIO, опция DIO Base] и [сообщение DAO при установленном флаге D].

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

Увеличение DAG Version Number. Реализация RPL может разрешать (через настройку в корне DODAG) обновление состояний DODAG путём изменения DODAGVersionNumber. Реализации RPL следует разрешать настройку периодического или вызываемого событиями механизма, позволяющего корню DODAG управлять сменой DODAGVersionNumber (запускающей глобальное восстановление, как описано в параграфе 3.2.2).

18.2.6. Параметры настройки RPL для механизмов на основе DAO

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

Как указано в параграфе 9.5, рекомендуется задерживать передачу DAO родителям DAO для повышения шансов агрегирования маршрутов. При получении сообщения DAO узлу следует запускать таймер DelayDAO, для которого по умолчанию установлено значение DEFAULT_DAO_DELAY. Реализация RPL может разрешать настройку DelayDAO.

В режиме Storing сохраняющий узел может увеличивать номер DTSN для надёжного вызова обновлений DAO от непосредственного потомка как части поддержки и обновления таблицы маршрутизации. Реализация RPL может разрешать настройку набора правил, задающих триггеры для инкрементирования DTSN (вручную или по событиям).

При завершении срока действия или аннулировании записи DAO узлу следует предпринимать разумные попытки передать No-Path каждому из родителей DAO. Число таких попыток может быть настраиваемым.

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

18.2.7. Настройка параметров RPL, связанных с защитой

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

  • воспринимаемые режимы защиты [Unsecured, Preinstalled, Authenticated];

  • воспринимаемые значения KIM [управляющие сообщения Secure RPL, раздел Security];

  • воспринимаемые значения Level [управляющие сообщения Secure RPL, раздел Security];

  • воспринимаемые значения Algorithm [управляющие сообщения Secure RPL, раздел Security];

  • ключевой материал для поддержки режимов Authenticated и Preinstalled.

Кроме того, реализации RPL следует разрешать настройку в корне DODAG подмножества параметров:

  • воспринимаемые значения KIM [сообщения Secure DIO, раздел Security];

  • воспринимаемые значения KIM [сообщения Secure DIO, раздел Security];

  • воспринимаемые значения Algorithm [сообщения Secure DIO, раздел Security].

18.2.8. Заданные по умолчанию значения

Этот документ задаёт принятые по умолчанию значения для перечисленных ниже переменных RPL:

DEFAULT_PATH_CONTROL_SIZE;

DEFAULT_DIO_INTERVAL_MIN;

DEFAULT_DIO_INTERVAL_DOUBLINGS;

DEFAULT_DIO_REDUNDANCY_CONSTANT;

DEFAULT_MIN_HOP_RANK_INCREASE;

DEFAULT_DAO_DELAY.

В протоколах рекомендуется указывать принятые по умолчанию значения, при этом, как отмечено в [RFC5706], такие значения имеют все меньше смысла. RPL является протоколом маршрутизации, применение которого предполагается в контексте, где характеристики сети, такие как число узлов и каналов, типы узлов, могут существенно меняться. Таким образом, принятые по умолчанию значения будут, вероятно, меняться в зависимости от контекста и развития технологий. Действительно, связанные с LLN технологии (например, оборудование, канальные уровни) за последние несколько лет существенно изменились и предполагается значительное развитие технологий в будущем.

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

18.3. Отслеживание работы RPL

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

18.3.1. Параметры DODAG

Реализации RPL следует предоставлять информацию о перечисленных ниже параметрах

  • DODAG Version [сообщение DIO, в DIO Base].

  • Флаг G [сообщение DIO, в DIO Base].

  • Поле MOP [сообщение DIO, в DIO Base].

  • Значение DTSN [сообщение DIO, в DIO Base].

  • Значение Rank [сообщение DIO, в DIO Base].

  • Номер DAOSequence, увеличиваемый в каждом уникальном сообщении DAO и возвращаемый в DAO-ACK [DAO и DAO-ACK].

  • Route Information [сообщение DIO, опция Route Information] (список префиксов IPv6 для родителя со сроком действия и предпочтением].

  • Параметры Trickle:

    • DIOIntervalDoublings [сообщение DIO, в опции DODAG Configuration];

    • DIOIntervalMin [сообщение DIO, в опции DODAG Configuration];

    • DIORedundancyConstant [сообщение DIO, в опции DODAG Configuration];

  • Path Control Size [сообщение DIO, в опции DODAG Configuration];

  • MinHopRankIncrease [сообщение DIO, в опции DODAG Configuration].

Некоторые значения могут отслеживаться лишь в корне DODAG.

  • Transit Information [DAO, опция Transit Information]. Реализации RPL следует разрешать настройку отображения набора полученных опций Transit Information в корне DODAG. При включённом отображении в базу данных RPL с полученными Transit Information следует также включать Path Sequence, Path Control, Path Lifetime и Parent Address.

18.3.2. Отслеживание несогласованности DODAG и обнаружение петель

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

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

  • пакеты с установленным флагом O (Down) от узла с более высоким рангом;

  • пакеты со сброшенным флагом O (Up) от узла с меньшим рангом;

  • пакеты с установленным флагом F;

  • пакеты с установленным флагом R.

18.4. Отслеживание структур данных

18.4.1. Структура данных кандидатов в соседи

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

18.4.2. Таблица DODAG

Для каждого графа DODAG от реализации RPL ожидается отслеживание указанных ниже значений в таблице DODAG:

  • RPLInstanceID;

  • DODAGID;

  • DODAGVersionNumber;

  • Rank;

  • OCP;

  • набор родителей DODAG;

  • набор префиксов, предлагаемых вверх по графу DODAG;

  • таймеры Trickle, используемые при отправке сообщений DIO для DODAG;

  • список родителей DAO;

  • DTSN;

  • статус узла (маршрутизатор или лист).

Реализации RPL следует разрешать отслеживание перечисленных выше параметров.

18.4.3. Таблица маршрутизации и маршрутные записи DAO

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

Реализации RPL следует обеспечивать возможность мониторинга:

  • Next Hop (родитель DODAG);

  • интерфейс Next Hop;

  • метрика пути для каждого родителя DODAG.

Запись в таблице маршрутизации DAO концептуально содержит (только для узлов с хранением):

  • информацию об анонсирующем соседе;

  • адрес IPv6;

  • идентификатор интерфейса, на который была отправлена эта запись родителей DAO;

  • счётчик повторов;

  • логический эквивалент содержимого DAO:

    • DAO-Sequence;

    • Path Sequence;

    • DAO Lifetime;

    • DAO Path Control;

  • префикс адресата (или адрес multicast-группы).

Реализации RPL следует предоставлять сведения о состоянии каждой записи в DAO Routing Table.

18.5. Обработка отказов

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

  • переполнение памяти с указанием причины (например, переполнение таблиц маршрутизации);

  • число случаев невозможности передачи пакета родителю DODAG, указанному действующим;

  • число случаев получения пакетов для которых у маршрутизатора нет соответствующего RPLInstanceID;

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

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

  • число полученных сообщений с некорректным форматом;

  • число секунд, когда были пакеты для пересылки и отсутствовал next hop (родитель DODAG);

  • число секунд, когда отсутствовал next hop (родитель DODAG);

  • число случаев присоединения узла к DODAG в качестве листа в результате получения DIO с непонятной метрикой или ограничением, когда это задано в конфигурации (18.6. Правила).

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

18.6. Правила

Реализация RPL может использовать правила для определения возможности присоединения узла к конкретному графу DODAG, анонсированному соседом в сообщениях DIO.

Этот документ описывает работу в одном графе DODAG, характеризуемом парой (RPLInstanceID, DODAGID). Как было отмечено выше, сообщения DIO содержат анонсы других характеристик DODAG, таких как метрика маршрутов и ограничения, служащие для создания DODAG, и используемая предметная функция OF (задаётся в OCP).

Первые правила политик задают условия, которым должен удовлетворять узел RPL для присоединения к DODAG:

  • RPLInstanceID;

  • список поддерживаемых метрик маршрутов и ограничений;

  • предметная функция OF (значения OCP).

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

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

  • узел присоединяется к DODAG как лист (8.5. Работа листа);

  • узел не присоединяется к DODAG.

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

Внутренние структуры данных. Некоторые реализации RPL могут ограничивать размер списка кандидатов в соседи и в этом случае некоторые подходящие кандидаты могут не рассматриваться или исключаться из списка. Реализация RPL может указывать размер списка кандидатов в соседи.

18.7. Изоляция отказов

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

18.8. Влияние на другие протоколы

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

В части влияния на сетевой трафик протокол RPL был разработан с учётом ограничения трафика управления простыми механизмами, такими как таймеры Trickle (8.3. Передача DIO). Поэтому влияние RPL на другие протоколы очень ограничено.

18.9. Управление производительностью

Контроль производительности всегда важен для протоколов и RPL не является исключением. Рабочая группа по мониторингу производительности IP (IP Performance Monitoring или IPPM) отметила несколько представляющих интерес параметров, однако они вряд ли будут применены в LLN с учётом ресурсов устройств и требуемой пропускной способности. Тем не менее, реализации RPL могут поддерживать некоторые из параметров, перечисленных ниже:

  • число операций восстановления и время выполнения одной операции в секундах (среднее, вариации);

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

  • отслеживание расхода ресурсов протоколом RPL (пропускная способность и память);

  • число переданных и принятых управляющих сообщений RPL.

18.10. Диагностика

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

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

19.1. Обзор

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

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

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

Ниже перечислены механизмы защиты, обеспечивающие безопасность протокола.

Конфиденциальность данных

Сокрытие передаваемой информации от сторон, которым она не предназначена.

Подлинность данных

Подтверждение подлинности источника информации (и неизменности данных в процессе передачи).

Защита от повторного использования

Гарантированное обнаружение дубликатов переданной информации.

Своевременность (защита от задержек)

Обеспечение своевременной доставки переданной информации.

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

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

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

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

20.1. Сообщение RPL Control

Сообщение RPL Control является информационным сообщением ICMP, используемым для передачи сообщений DIO, DIS и DAO при работе RPL. IANA поддерживает реестр ICMPv6 Type Number, где для сообщений RPL Control выделено значение 155.

20.2. Новый реестр для кодов RPL Control

Агентство IANA создало реестр RPL Control Codes для поля Code в сообщениях ICMPv6 RPL Control. Новые коды выделяются по процедуре IETF Review и в каждой записи указывается код, описание и RFC с определением. Определённые в настоящее время коды приведены ниже.

Коды RPL Control.

Код

Описание

Документ

0x00

DODAG Information Solicitation

Данный документ

0x01

DODAG Information Object

Данный документ

0x02

Destination Advertisement Object

Данный документ

0x03

Destination Advertisement Object

Данный документ

0x80

Secure DODAG Information Solicitation

Данный документ

0x81

Secure DODAG Information Object

Данный документ

0x82

Secure Destination Advertisement Object

Данный документ

0x83

Secure Destination Advertisement Object

Данный документ

0x8A

Consistency Check

Данный документ

20.3. Новый реестр для режимов работы (MOP)

Агентство IANA создало реестр 3-битовых кодов Mode of Operation (MOP), указываемых в DIO Base. Новые коды выделяются по процедуре IETF Review и в каждой записи указывается режим работы, описание возможности, RFC с определением. Включённые в реестр 4 значения приведены ниже.

Режимы работы DIO.

MOP

Описание

Документ

0

RPL не поддерживает маршрутов Downward

Данный документ

1

Режим Non-Storing

Данный документ

2

Режим Storing без поддержки группового трафика

Данный документ

3

Режим Storing с поддержкой группового трафика

Данный документ

Значения 4 — 7 пока не выделены.

20.4. Опции сообщения RPL Control

Агентство IANA создало реестр RPL Control Message Options. Новые значения выделяются по процедуре IETF Review и в каждой записи указывается код, назначение, RFC с определением.

Опции сообщения RPL Control.

Значение

Описание

Документ

0x00

Pad1

Данный документ

0x01

PadN

Данный документ

0x02

DAG Metric Container

Данный документ

0x03

Routing Information

Данный документ

0x04

DODAG Configuration

Данный документ

0x05

RPL Target

Данный документ

0x06

Transit Information

Данный документ

0x07

Solicited Information

Данный документ

0x08

Prefix Information

Данный документ

0x09

Target Descriptor

Данный документ

20.5. Реестр OCP

Агентство IANA создало реестр Objective Code Point (OCP).

Новые коды выделяются по процедуре IETF Review и в каждой записи указывается код, описание, RFC с определением. Значения пока не заданы.

20.6. Новый реестр для алгоритма раздела Security

Агентство IANA создало реестр 8-битовых значений поля Algorithm в разделе Security. Новые коды выделяются по процедуре IETF Review и в каждой записи указывается значение, роль (шифрование или MAC), подпись, RFC. Определённое в настоящее время значение приведено ниже.

Алгоритм раздела Security.

Значение

Шифрование/MAC

Подпись

Документ

0

CCM с AES-128

RSA с SHA-256

Данный документ

20.7. Новый реестр для флагов раздела Security

Агентство IANA создало реестр флагов Security Section. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (0 для старшего бита), описание, RFC с определением. Флаги пока не заданы.

20.8. Новый реестр для уровней защиты

Агентство IANA создало реестр значения Security Level (LVL) для выделенных значений KIM. Новые уровни выделяются по процедуре IETF Review и в каждой записи указывается уровень, значение KIM, описание, RFC с определением. Выделенные в настоящее время уровни показаны в таблице.

Уровни защиты для разных KIM.

Уровень

Значение KIM

Описание

Документ

0

0

Рисунок 11

Данный документ

1

0

Рисунок 11

Данный документ

2

0

Рисунок 11

Данный документ

3

0

Рисунок 11

Данный документ

0

1

Рисунок 11

Данный документ

1

1

Рисунок 11

Данный документ

2

1

Рисунок 11

Данный документ

3

1

Рисунок 11

Данный документ

0

2

Рисунок 11

Данный документ

1

2

Рисунок 11

Данный документ

2

2

Рисунок 11

Данный документ

3

2

Рисунок 11

Данный документ

0

3

Рисунок 11

Данный документ

1

3

Рисунок 11

Данный документ

2

3

Рисунок 11

Данный документ

3

3

Рисунок 11

Данный документ

20.9. Новый реестр для флагов DIS

Агентство IANA создало реестр флагов DIS. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. Флаги пока не заданы.

20.10. Новый реестр для флагов DIO

Агентство IANA создало реестр флагов DIO. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. Флаги DIO25 пока не заданы.

20.11. Новый реестр для флагов DAO

Агентство IANA создало реестр флагов DAO. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (0 для старшего бита), описание, RFC с определением. Выделенные флаги указаны в таблице.

Флаги DAO.

Номер бита

Описание

Документ

0

Запрос DAO-ACK (K)

Данный документ

1

Присутствует поле DODAGID (D)

Данный документ

20.12. Новый реестр для флагов DAO Acknowledgement

Агентство IANA создало реестр флагов DAO. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (0 для старшего бита), описание, RFC с определением. Выделенный флаг указан в таблице.

Флаги DAO-ACK.

Номер бита

Описание

Документ

0

DODAGID field is present (D)

Данный документ

20.13. Новый реестр для флагов CC

Агентство IANA создало реестр флагов CC. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (0 для старшего бита), описание, RFC с определением. Выделенный флаг указан в таблице.

Флаг CC.

Номер бита

Описание

Документ

0

CC Response (R)

Данный документ

20.14. Новый реестр для флагов опции DODAG Configuration

Агентство IANA создало реестр флагов опции DODAG Configuration. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. Определённые в настоящее время флаги указаны в таблице.

Флаги опции DODAG Configuration.

Номер бита

Описание

Документ

4

Authentication Enabled (A)

Данный документ

5-7

Path Control Size (PCS)

Данный документ

20.15. Новый реестр для флагов опции RPL Target

Агентство IANA создало реестр флагов опции RPL Target. Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. В настоящее время биты флагов не заданы.

20.16. Новый реестр для флагов опции Transit Information

Агентство IANA создало реестр флагов опции Transit Information (TIO). Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. Определённые в настоящее время флаги указаны в таблице.

Флаг опции Transit Information.

Номер бита

Описание

Документ

0

External (E)

Данный документ

20.17. Новый реестр для флагов опции Solicited Information

Агентство IANA создало реестр флагов опции Solicited Information (SIO). Новые флаги выделяются по процедуре IETF Review и в каждой записи указывается номер бита (отсчёт с 0 для старшего бита), описание, RFC с определением. Определённые в настоящее время флаги указаны в таблице.

Флаги опции Solicited Information.

Номер бита

Описание

Документ

0

Сопоставление Version (V)

Данный документ

1

Сопоставление InstanceID (I)

Данный документ

2

Сопоставление DODAGID (D)

Данный документ

20.18. ICMPv6 — ошибки в заголовке Source Routing

В некоторых случаях RPL может возвращать сообщения ICMPv6 об ошибке, если сообщение не может быть доставлено по заданному источником заголовку маршрутизации. Такие сообщения ICMPv6 называются «Ошибка в заголовке SRH» (Error in Source Routing Header).

Агентство IANA поддерживает реестр значений поля Code для типов сообщений ICMPv6. Сообщение ICMPv6 типа 1 описывает коды недоступности адресата (Destination Unreachable). Для сообщения «Error in Source Routing Header» был выделен код 7 в реестре ICMPv6 Code Fields Registry for ICMPv6 Message Type 1.

20.19. Область действия группового адреса Link-Local

Правила назначения групповых адресов IPv6 определены в [RFC3307]. Данная спецификация требует выделить новый постоянный групповой адрес с областью действия на локальном канале (link-local) для узлов RPL, названный all-RPL-nodes (все узлы RPL), со значением ff02::1a.

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

Авторы признательны Emmanuel Baccelli, Dominique Barthel, Yusuf Bashir, Yoav Ben-Yehezkel, Phoebus Chen, Quynh Dang, Mischa Dohler, Mathilde Durvy, Joakim Eriksson, Omprakash Gnawali, Manhar Goindi, Mukul Goyal, Ulrich Herberg, Anders Jagd, JeongGil (John) Ko, Ajay Kumar, Quentin Lampin, Jerry Martocci, Matteo Paris, Alexandru Petrescu, Joseph Reddy, Michael Richardson, Don Sturek, Joydeep Tripathi, Nicolas Tsiftes за рецензии, отклики и комментарии.

Спасибо руководителям ROLL Chairs, David Culler и JP. Vasseur, а также руководителю направления Adrian Farrel за руководство и вклад в работу. Спасибо за ранний вклад в работу Robert Assimiti, Mischa Dohler, Julien Abeille, Ryuji Wakikawa, Teco Boot, Patrick Wetterwald, Bryan Mclaughlin, Carlos J. Bernardos, Thomas Watteyne, Zach Shelby, Caroline Bontoux, Marco Molteni, Billy Moon, Jim Bound, Yanick Pouffary, Henning Rogge, Arsalan Tavakoli, предоставившим полезные соображения по устройству RPL.

Защита RPL, описанная в разделах 10, 19 и других местах документа, основана в основном на вкладе команды Security Design: Tzeta Tsao, Roger Alexander, Dave Ward, Philip Levis, Kris Pister, Rene Struik, Adrian Farrel.

Спасибо также Jari Arkko и Ralph Droms за внимательное рецензирование, особенно по вопросам взаимодействия и интеграфии с другими спецификациями IETF.

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

Stephen Dawson-Haggerty

UC Berkeley

Soda Hall

Berkeley, CA 94720

USA

EMail: stevedh@cs.berkeley.edu

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 246026, December 1998.

[RFC3447] Jonsson, J. and B. Kaliski, «Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1», RFC 3447, February 2003.

[RFC4191] Draves, R. and D. Thaler, «Default Router Preferences and More-Specific Routes», RFC 4191, November 2005.

[RFC4302] Kent, S., «IP Authentication Header», RFC 4302, December 2005.

[RFC4443] Conta, A., Deering, S., and M. Gupta, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 4443, March 2006.

[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, «Neighbor Discovery for IP version 6 (IPv6)», RFC 4861, September 2007.

[RFC4862] Thomson, S., Narten, T., and T. Jinmei, «IPv6 Stateless Address Autoconfiguration», RFC 4862, September 2007.

[RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, «The Trickle Algorithm», RFC 6206, March 2011.

[RFC6275] Perkins, C., Johnson, D., and J. Arkko, «Mobility Support in IPv6», RFC 6275, July 2011.

[RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N., and D. Barthel, «Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks», RFC 6551, March 2012.

[RFC6552] Thubert, P., Ed., «Objective Function Zero for the Routing Protocol for Low-Power and Lossy Networks (RPL)», RFC 6552, March 2012.

[RFC6553] Hui, J. and JP. Vasseur, «The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-Plane Datagrams», RFC 6553, March 2012.

[RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, «An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)», RFC 6554, March 2012.

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

[6LOWPAN-ND] Shelby, Z., Ed., Chakrabarti, S., and E. Nordmark, «Neighbor Discovery Optimization for Low Power and Lossy Networks (6LoWPAN)», Work in Progress27, October 2011.

[FIPS180] National Institute of Standards and Technology, «FIPS Pub 180-3, Secure Hash Standard (SHS)», US Department of Commerce , February 2008, <http://www.nist.gov/itl/upload/fips180-3_final.pdf>.

[Perlman83] Perlman, R., «Fault-Tolerant Broadcast of Routing Information», North-Holland Computer Networks, Vol.7: p. 395-405, December 1983.

[RFC1958] Carpenter, B., «Architectural Principles of the Internet», RFC 1958, June 1996.

[RFC1982] Elz, R. and R. Bush, «Serial Number Arithmetic», RFC 1982, August 1996.

[RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., «Structure of Management Information Version 2 (SMIv2)», STD 58, RFC 2578, April 1999.

[RFC3307] Haberman, B., «Allocation Guidelines for IPv6 Multicast Addresses», RFC 3307, August 2002.

[RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, «Introduction and Applicability Statements for Internet-Standard Management Framework», RFC 3410, December 2002.

[RFC3535] Schoenwaelder, J., «Overview of the 2002 IAB Network Management Workshop», RFC 3535, May 2003.

[RFC3610] Whiting, D., Housley, R., and N. Ferguson, «Counter with CBC-MAC (CCM)», RFC 3610, September 2003.

[RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood, «Advice for Internet Subnetwork Designers», BCP 89, RFC 3819, July 2004.

[RFC4101] Rescorla, E. and IAB, «Writing Protocol Models», RFC 4101, June 2005.

[RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. Pillay-Esnault, «Multi-Topology (MT) Routing in OSPF», RFC 4915, June 2007.

[RFC5120] Przygienda, T., Shen, N., and N. Sheth, «M-ISIS: Multi Topology (MT) Routing in Intermediate System to Intermediate Systems (IS-ISs)», RFC 5120, February 2008.

[RFC5184] Teraoka, F., Gogo, K., Mitsuya, K., Shibui, R., and K. Mitani, «Unified Layer 2 (L2) Abstractions for Layer 3 (L3)-Driven Fast Handover», RFC 5184, May 2008.

[RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, «Routing Requirements for Urban Low-Power and Lossy Networks», RFC 5548, May 2009.

[RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, «Industrial Routing Requirements in Low-Power and Lossy Networks», RFC 5673, October 2009.

[RFC5706] Harrington, D., «Guidelines for Considering Operations and Management of New Protocols and Protocol Extensions», RFC 5706, November 2009.

[RFC5826] Brandt, A., Buron, J., and G. Porcu, «Home Automation Routing Requirements in Low-Power and Lossy Networks», RFC 5826, April 2010.

[RFC5867] Martocci, J., De Mil, P., Riou, N., and W. Vermeylen, «Building Automation Routing Requirements in Low-Power and Lossy Networks», RFC 5867, June 2010.

[RFC5881] Katz, D. and D. Ward, «Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)», RFC 5881, June 2010.

[RFC6130] Clausen, T., Dearlove, C., and J. Dean, «Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)», RFC 6130, April 2011.

[ROLL-TERMS] Vasseur, J., «Terminology in Low power And Lossy Networks», Work in Progress28, September 2011.

Приложение A. Примеры операций

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

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

A.1. Пример работы в режиме Storing с префиксами узла

                  +-------------+
                  |    Root     |
                  |             |
                  |   Node A    |
                  |             |
                  |    A::A     |
                  +------+------+
                         |
                  +------+------+
                  |    A::B     |
                  |             |
                  |   Node B    |
                  |             |
                  |    B::B     |
                  +------+------+
                         |
          .--------------+--------------.
         /                               \
        /                                 \
+------+------+                     +------+------+
|    B::C     |                     |    B::D     |
|             |                     |             |
|   Node C    |                     |   Node D    |
|             |                     |             |
|    C::C     |                     |    D::D     |
+-------------+                     +-------------+

Рисунок 32. Работа в режиме Storing с чужими префиксами.


На рисунке 32 показана логическая архитектура адресации простой сети RPL, работающей в режиме Storing. Узлы A, B, C, D владеют своими префиксами и делают эти префиксы доступными для автоматической настройки адресов устройств на канале (путём установки флагов A и L в опции PIO сообщений DIO). Узел A владеет префиксом A::/64, B — B::/64 и т. д. Узел B автоматически настраивает адреса узлов на канале к узлу A — A::B. Узлы C и D аналогично настраивают адреса из префикса B — B::C и B::D. Узлы могут установить флаг R и опубликовать свои адреса в поле Prefix опции PIO.

A.1.1. Сообщения DIO и PIO

Узел A, например, будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L установлен

флаг R сброшен

размер префикса 64

префикс A::

Узел B будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L установлен

флаг R установлен

размер префикса 64

префикс B::B

Узел C будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L установлен

флаг R сброшен

размер префикса 64

префикс C::

Узел D будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L установлен

флаг R установлен

размер префикса 64

префикс D::D

A.1.2. Сообщения DAO

Узел B передаёт узлу A сообщения DAO, содержащие:

Target B::/64

Target C::/64

Target D::/64

Узел C передаёт узлу B сообщения DAO, содержащие:

Target C::/64

Узел D передаёт узлу B сообщения DAO, содержащие:

Target D::/64

A.1.3. База маршрутных данных

Узел A будет собирать в свою базу маршрутной информации (Routing Information Base или RIB) следующие сведения:

A::/64 подключён

B::/64 через link-local узла B

C::/64 через link-local узла B

D::/64 через link-local узла B

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла A

B::/64 подключён

C::/64 через link-local узла C

D::/64 через link-local узла D

Узел C будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

C::/64 подключён

Узел D будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

D::/64 подключён

A.2. Пример работы в режиме Storing в префиксом подсети

                  +-------------+
                  |    Root     |
                  |             |
                  |   Node A    |
                  |    A::A     |
                  |             |
                  +------+------+
                         |
                  +------+------+
                  |             |
                  |   Node B    |
                  |    A::B     |
                  |             |
                  +------+------+
                         |
          .--------------+--------------.
         /                               \
        /                                 \
+------+------+                     +------+------+
|             |                     |             |
|   Node C    |                     |   Node D    |
|    A::C     |                     |    A::D     |
|             |                     |             |
+-------------+                     +-------------+

Рисунок 33. Режим Storing с префиксом Subnet-Wide.


На рисунке 33 показана логическая архитектура адресации простой сети RPL, работающей в режиме Storing. В этом примере корневой узел A является источником префикса, используемого для автоматической настройки адресов во всей подсети RPL (это выполняется путём установки флага A и сброса флага L в опции PIO сообщений DIO). Узлы A, B, C, D автоматически получают адреса из префикса A::/64. Узлы могут установить флаг R и опубликовать свои адреса в поле Prefix опции PIO.

A.2.1. Сообщения DIO и PIO

Узел A будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R сброшен

размер префикса 64

префикс A::

Узел B будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::B

Узел C будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R сброшен

размер префикса 64

префикс A::

Узел D будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::D

A.2.2. Сообщения DAO

Узел B передаёт узлу A сообщения DAO, содержащие:

Target A::B/128

Target A::C/128

Target A::D/128

Узел C передаёт узлу B сообщения DAO, содержащие:

Target A::C/128

Узел D передаёт узлу B сообщения DAO, содержащие:

Target A::D/128

A.2.3. База маршрутных данных

Узел A будет собирать в свою базу RIB следующие сведения:

A::A/128 подключён

A::B/128 через link-local узла B

A::C/128 через link-local узла B

A::D/128 через link-local узла B

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла A

A::B/128 подключён

A::C/128 через link-local узла C

A::D/128 через link-local узла D

Узел C будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

A::C/128 подключён

Узел D будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

A::D/128 подключён

A.3. Пример работы в режиме Non-Storing с префиксами узла

На рисунке 34 показана логическая архитектура адресации простой сети RPL, работающей в режиме Non-Storing. Узлы A, B, C, D владеют своими префиксами и делают эти префиксы доступными для автоматической настройки адресов устройств на канале (путём установки флагов A и L в опции PIO сообщений DIO). Узел A владеет префиксом A::/64, B — B::/64 и т. д. Узел B автоматически настраивает адреса узлов на канале к узлу A — A::B. Узлы C и D аналогично настраивают адреса из префикса B — B::C и B::D. Узлы могут установить флаг R и опубликовать свои адреса в поле Prefix опции PIO.

                  +-------------+
                  |    Root     |
                  |             |
                  |   Node A    |
                  |             |
                  |    A::A     |
                  +------+------+
                         |
                  +------+------+
                  |    A::B     |
                  |             |
                  |   Node B    |
                  |             |
                  |    B::B     |
                  +------+------+
                         |
          .--------------+--------------.
         /                               \
        /                                 \
+------+------+                     +------+------+
|    B::C     |                     |    B::D     |
|             |                     |             |
|   Node C    |                     |   Node D    |
|             |                     |             |
|    C::C     |                     |    D::D     |
+-------------+                     +-------------+

Рисунок 34. Режим Non-Storing с префиксами узлов.


A.3.1. Сообщения DIO и PIO

Опцию PIO в сообщениях DIO режима Non-Storing с принадлежащими узлу префиксами можно считать идентичной опции в режиме Storing (Приложение A.1.1).

A.3.2. Сообщения DAO

Узел B передаёт узлу A сообщения DAO, содержащие:

Target B::/64, Transit A::B

Узел C передаёт узлу A сообщения DAO, содержащие:

Target C::/64, Transit B::C

Узел D передаёт узлу A сообщения DAO, содержащие:

Target D::/64, Transit B::D

A.3.3. База маршрутной информации

Узел A собирает в свою базу RIB ниже сведения, позволяющие создать source route путём рекурсивного поиска в RIB:

A::/64 подключён

B::/64 через A::B

C::/64 через B::C

D::/64 через B::D

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла A

B::/64 подключён

Узел C будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

C::/64 подключён

Узел D будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

D::/64 подключён

A.4. Пример работы в режиме Non-Storing с префиксом масштаба подсети

На рисунке 35 показана логическая архитектура адресации простой сети RPL, работающей в режиме Non-Storing. Корневой узел A является источником префикса, используемого для автоматической настройки адресов во всей подсети RPL (это выполняется путём установки флага A и сброса флага L в опции PIO сообщений DIO). Узлы A, B, C, D автоматически получают адреса из префикса A::/64. Узлы могут установить флаг R и опубликовать свои адреса в поле Prefix опции PIO.

                  +-------------+
                  |    Root     |
                  |             |
                  |   Node A    |
                  |    A::A     |
                  |             |
                  +------+------+
                         |
                  +------+------+
                  |             |
                  |   Node B    |
                  |    A::B     |
                  |             |
                  +------+------+
                         |
          .--------------+--------------.
         /                               \
        /                                 \
+------+------+                     +------+------+
|             |                     |             |
|   Node C    |                     |   Node D    |
|    A::C     |                     |    A::D     |
|             |                     |             |
+-------------+                     +-------------+

Рисунок 35. Режим Non-Storing с префиксом подсети.


A.4.1. Сообщения DIO и PIO

Узел A будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::A

Узел B будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::B

Узел C будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::C

Узел D будет передавать сообщения DIO с опцией PIO вида:

флаг A установлен

флаг L сброшен

флаг R установлен

размер префикса 64

префикс A::D

A.4.2. Сообщения DAO

Узел B передаёт узлу A сообщения DAO, содержащие:

Target A::B/128, Transit A::A

Узел C передаёт узлу A сообщения DAO, содержащие:

Target A::C/128, Transit A::B

Узел D передаёт узлу A сообщения DAO, содержащие:

Target A::D/128, Transit A::B

A.4.3. База маршрутных данных

Узел A собирает в свою базу RIB ниже сведения, позволяющие создать source route путём рекурсивного поиска в RIB:

A::A/128 подключён

A::B/128 через A::A

A::C/128 через A::B

A::D/128 через A::B

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла A

A::B/128 подключён

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

A::C/128 подключён

Узел B будет собирать в свою базу RIB следующие сведения:

::/0 через link-local узла B

A::D/128 подключён

A.5. Пример с внешними префиксами

Рассмотрим простой пример, показанный на рисунке 60, с группой маршрутизаторов, участвующих в сети RPL: корень DODAG, узлы A, О, Z. Корень DODAG и узел Z подключены также к внешним доменам (по отношению к сети RPL), которые могут быть сетями RPL или иного типа.

             Сеть RPL          +-------------------+
             RPL::/64          |                   |
                               |     Внешний       |
[RPL::Root]    (Корень)--------+     префикс       |
                 |             |    EXT_1::/64     |
                 |             |                   |
                 |             +-------------------+
   [RPL::A]     (A)
                 :
                 :
                 :
   [RPL::Y]     (Y)
                 |             +-------------------+
                 |             |                   |
                 |             |     Внешний       |
   [RPL::Z]     (Z)------------+     префикс       |
                 :             |    EXT_2::/64     |
                 :             |                   |
                 :             +-------------------+

Рисунок 36. Пример простой сети.


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

Корень DODAG подключён ко внешнему (относительно RPL) префиксу EXT_1::/64 и может узнать об этом префиксе, например, через явную настройку или IPv6 ND на внешнем (не RPL) интерфейсе. Корень DODAG настроен на анонсирование сведений о подключении к этому префиксу. Аналогично, узел Z имеет подключение к внешнему префиксу EXT_2::/64. Кроме того, под узлом Z размещается субграф DODAG.

  1. Корень DODAG добавляет в свои сообщения DIO опцию RIO, содержащую внешний префикс EXT_1::/64. Эта информация может повторятся в сообщениях DIO, выдаваемых другими узлами DODAG. Таким способом сведения о доступности префикса EXT_1::/64 распространяются вниз по DODAG.

  2. Узел Z может анонсировать доступность Target-сети EXT_2::/64, передавая сообщения DAO с EXT_2::/64 в качестве Target в одноименной опции и себя (узел Z) как родителя в опции Transit Information (в режиме Storing эта опция Transit Information может не включать адрес узла Z). Корень сети Non-Storing узнает о канале 1-hop (Node Z — EXT_2::/64) и может включать его в задаваемый источником маршрут. Дополнительно узел Z может анонсировать доступность EXT_2::/64 узлам субграфа DODAG, передавая сообщения DIO, где в опции PIO, флаг A сброшен.

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

Tim Winter (редактор)

EMail: wintert@acm.org

Pascal Thubert (редактор)

Cisco Systems

Village d’Entreprises Green Side

400, Avenue de Roumanille

Batiment T3

Biot — Sophia Antipolis 06410

France

Phone: +33 497 23 26 34

EMail: pthubert@cisco.com

Anders Brandt

Sigma Designs

Emdrupvej 26A, 1.

Copenhagen DK-2100

Denmark

EMail: abr@sdesigns.dk

Jonathan W. Hui

Arch Rock Corporation

501 2nd St., Suite 410

San Francisco, CA 94107

USA

EMail: jhui@archrock.com

Richard Kelsey

Ember Corporation

Boston, MA

USA

Phone: +1 617 951 1225

EMail: kelsey@ember.com

Philip Levis

Stanford University

358 Gates Hall, Stanford University

Stanford, CA 94305-9030

USA

EMail: pal@cs.stanford.edu

Kris Pister

Dust Networks

30695 Huntwood Ave.

Hayward, CA 94544

USA

EMail: kpister@dustnetworks.com

Rene Struik

Struik Security Consultancy

EMail: rstruik.ext@gmail.com

JP. Vasseur

Cisco Systems

11, Rue Camille Desmoulins

Issy Les Moulineaux 92782

France

EMail: jpv@cisco.com

Roger K. Alexander

Cooper Power Systems

20201 Century Blvd., Suite 250

Germantown, MD 20874

USA

Phone: +1 240 454 9817

EMail: roger.alexander@cooperindustries.com


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

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

nmalykh@protokols.ru

1Low-Power and Lossy Network — сеть с низким электропитанием и потерями.

2Routing Protocol for Low-Power and Lossy Networks.

3Произносится как ripple. См. также https://www.rfc-editor.org/errata/eid4219. Прим. перев.

4Neighbor Discovery — обнаружение соседей.

5Prefix Information Option — опция сведений о префиксе.

6Route Information Option — опция сведений о маршруте.

7ND Router Advertisement — анонс маршрутизатора.

8Power Line Communication — коммуникации по сети электропитания.

96LoWPAN Border Router — граничный маршрутизатор 6LoWPAN (IPv6 Low-Power Wireless Personal Area Network).

10См. https://www.rfc-editor.org/errata/eid4654. Прим. перев.

11Non-Broadcast Multi-Access — множественный доступ без широковещания.

12Expected transmission count — ожидаемое число передач (беспристрастная метрика LLN, определенная в [RFC6551]).

13Родителем DAO является узел, которому передается индивидуальное сообщение DAO.

14Message Authentication Code — код проверки подлинности сообщения.

15В оригинале ошибочно указано 0x00000000, см. https://www.rfc-editor.org/errata/eid3581. Прим. перев.

16В оригинале ошибочно указано 127, см. https://www.rfc-editor.org/errata/eid3287. Прим. перев.

17Consistency Check.

18В оригинале ошибочно сказано «DIO or DAO», см. https://www.rfc-editor.org/errata/eid5160. Прим. перев.

19В оригинале ошибочно сказано 7, см. https://www.rfc-editor.org/errata/eid4618. Прим. перев.

20В оригинале ошибочно сказано target, см. https://www.rfc-editor.org/errata/eid3311. Прим. перев.

21Леденец на палочке.

22В оригинале ошибочно сказано Transmit, см. https://www.rfc-editor.org/errata/eid3895. Прим. перев.

23В оригинале ошибочно указано C1, см. https://www.rfc-editor.org/errata/eid3580. Прим. перев.

24Structure of Management Information — структура управляющей информации.

25В оригинале ошибочно указано DIS, см. https://www.rfc-editor.org/errata/eid4458. Прим. перев.

26Этот документ отменен RFC 8200. Прим. перев.

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

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

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

RFC 6553 The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-Plane Datagrams

Internet Engineering Task Force (IETF)                            J. Hui
Request for Comments: 6553                                   JP. Vasseur
Category: Standards Track                                  Cisco Systems
ISSN: 2070-1721                                               March 2012

The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-Plane Datagrams

PDF

Аннотация

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

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

Этот документ содержит проект стандарта Internet (Internet Standards Track).

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

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

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

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

RPL представляет собой протокол маршрутизации IPv6 на основе векторов удалённости, разработанный для сетей LLN2 [RFC6550]. Такие сети обычно имеют ограничения по питанию и/или производительности каналов. Для экономии дефицитных ресурсов протокол должен экономно генерировать управляющий трафик. Однако это противоречит потребности в быстром распространении маршрутов для своевременного устранения несогласованностей в них.

Для минимизации расхода ресурсов в RPL применяется медленный проактивный процесс построение и поддержки маршрутной топологии вкупе с реактивным и динамичным процессом устранения несогласованности маршрутов. В установившемся состоянии RPL поддерживает топологию маршрутов с помощью низкоскоростной передачи специальных сигналов (beacon — маячок). Однако при обнаружении несогласованности, которая может препятствовать доставке дейтаграмм, RPL временно повышает скорость передачи сигналов для быстрого устранения несогласованности. Эта операция динамического управления скоростью контролируется динамическими таймерами (Trickle), определёнными в [RFC6206]. В отличие от других протоколов маршрутизации (например, OSPF [RFC2328]), RPL обнаруживает несогласованности за счёт проверки путей данных путём включения маршрутных данных в передаваемые дейтаграммы. Благодаря этому, механизмы восстановления включаются лишь при необходимости, позволяя плоскостям управления и данных работать в близком масштабе времени. Основным мотивом проверки путей данных в LLN служит аккуратная привязка управляющего трафика к трафику данных. Интуитивно понятно, что не требуется решать проблемы маршрутизации (они могут быть временными) при отсутствии трафика данных.

RPL создаёт направленный ациклический граф (Directed Acyclic Graph или DAG), который пытается минимизировать стоимость пути к корню DAG на основании набора параметров метрики и предметных функций (Objective Function или OF). В некоторых случаях могут возникать петли и в RPL применяется метод обнаружения петель в пути данных. Это одно из требований RPL и в будущем может быть задано другое использование пути данных.

Для решения задачи в этом документе определена новая опция IPv6 (RPL Option), передаваемая в заголовке IPv6 Hop-by-Hop. Опция RPL передаётся лишь между маршрутизаторами RPL, участвующими в одном экземпляре RPL Instance.

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

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

2. Обзор

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

Каждый маршрутизатор RPL на пути доставки пакета обрабатывает и обновляет RPL Option. Если в принятом пакет опции RPL ещё нет, маршрутизатор RPL должен вставить RPL Option в заголовок до пересылки пакета другому маршрутизатору RPL. Этот документ задаёт также применение туннелей IPv6-in-IPv6 [RFC2473] при добавлении в пакет опции RPL, гарантирующее неизменность исходного пакета и возврат сообщений ICMP при возникновении ошибки источнику опции RPL, а не отправителю исходного пакета.

3. Формат опции RPL

RPL Option передаётся в заголовке IPv6 Hop-by-Hop Options, следующем сразу после заголовка IPv6, и выравнивается по границе 2n. Формат опции показан на рисунке 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
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |  Option Type  |  Opt Data Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|O|R|F|0|0|0|0|0| RPLInstanceID |          SenderRank           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          (суб-TLV)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. RPL Option.


Option Type

0x63

Opt Data Len

8-битовое поле указывающее размер опции в октетах без учёта полей Option Type и Opt Data Len.

O (Down)

Флаг, определённый в параграфе 11.2 [RFC6550], который нужно обрабатывать в соответствии с указанным параграфом в [RFC6550].

R (Rank-Error)

Флаг, определённый в параграфе 11.2 [RFC6550], который нужно обрабатывать в соответствии с указанным параграфом в [RFC6550].

F (Forwarding-Error)

Флаг, определённый в параграфе 11.2 [RFC6550], который нужно обрабатывать в соответствии с указанным параграфом в [RFC6550].

RPLInstanceID

8-битовое поле, определённое в параграфе 11.2 [RFC6550], которое нужно обрабатывать в соответствии с указанным параграфом в [RFC6550].

SenderRank

16-битовое поле, определённое в параграфе 11.2 [RFC6550], которое нужно обрабатывать в соответствии с указанным параграфом в [RFC6550].

Два старших бита поля Option Type должны иметь значения 01, а третий — 1. На основании этих битов в соответствии с [RFC2460] узлы, не понимающие опцию, должны отбрасывать пакет. В соответствии с [RFC2460] значения опции RPL Option предполагаются изменяющимися в пути. Размер данных RPL Option является переменным.

Действия, выполняемые при использовании RPL Option, и возможный набор TLV внутри опции RPL, должны задаваться в RFC для использующего опцию протокола. Этот документ не определяет TLV. Устройство RPL должно пропускать непонятные TLV и пытаться обработать последующие TLV.

4. Поведение маршрутизатора RPL

Дейтаграммы, передаваемые между маршрутизаторами RPL, должны включать RPL Option или RPL Source Route Header ([RFC6554]) и могут включать то и другое. В дейтаграммы с заголовком Source Routing (SRH) не обязательно включать RPL Option, поскольку источник и промежуточные маршрутизаторы обеспечивают отсутствие петель в SRH.

Когда маршрутизатор является источником исходного пакета, а получатель заведомо относится к тому же экземпляру RPL, маршрутизатору следует включать RPL Option непосредственно в исходный пакет. В иных случаях маршрутизаторы должны использовать туннели IPv6-in-IPv6 [RFC2473] и помещать RPL Option в заголовок туннеля. Использование туннеля IPv6-in-IPv6 обеспечивает неизменность исходной дейтаграммы в пути и доставку сообщений ICMPv6 при ошибках, связанных с RPL Option, маршрутизатору, создавшему эту опцию.

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

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

Маршрутизатор RPL, получивший адресованный ему пакет IPv6-in-IPv6, обрабатывает туннельный пакет в соответствии и разделом 3 в [RFC2473]. Перед декапсуляцией IPv6 маршрутизатор RPL должен обработать опцию RPL, если она имеется. Если после декапсуляции IPv6 маршрутизатор определит, что следует переслать исходный пакет другому маршрутизатору RPL, он должен снова инкапсулировать пакет в туннель IPv6-in-IPv6 для включения RPL Option. Поля в опции RPL, которые не меняются на этапах пересылки, должны совпадать с полученными из предыдущего туннеля.

Маршрутизаторы RPL отвечают за использование RPL Option только между собой.

  1. Адресованные маршрутизатору RPL дейтаграммы тот обрабатывает обычным способом. Например, при включении RPL Option с использованием туннеля, конечной точкой которого является маршрутизатор RPL, этот маршрутизатор удаляет внешний заголовок IPv6, одновременно удаляя и RPL Option.

  2. Дейтаграммы, адресованные в другие точки того же экземпляра RPL, пересылаются в нужный интерфейс.

  3. Дейтаграммы, адресованные узлам за пределами RPL Instance, отбрасываются, если их внешний заголовок IPv6 содержит опцию RPL, не созданную переславшим дейтаграмму маршрутизатором RPL.

Для предотвращения фрагментации желательно применять значения MTU, допускающие расширение заголовка, например, не меньше 1280 + 40 (внешний заголовок IP) + RPL_OPTION_MAX_SIZE, где RPL_OPTION_MAX_SIZE — максимальный размер заголовка RPL Option для данной сети RPL. Однако для этого взаимодействующие конечные точки должны знать MTU на пути (например, от Path MTU Discovery). К сожалению большие значения MTU могут быть доступны не на всех каналах (например, на каналах 6LoWPAN5 MTU = 1280 октетов). Однако предполагается, что большая часть трафика в таких сетях передаётся в пакетах размером меньше MTU, поэтому снижение производительности из-за фрагментации не будет значительным.

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

Опция RPL помогает маршрутизаторам RPL обнаруживать несогласованность маршрутизации. Механизмы защиты сообщений RPL, заданные в [RFC6550], не применяются для RPL Option.

5.1. Атаки на согласованность DAG

Используя флаг O и поле SenderRank, атакующий может убедить маршрутизаторы RPL в наличии несогласованности DAG внутри экземпляра RPL, указанного в поле RPLInstanceID. Это заставит маршрутизатор RPL сбросить таймер DIO6 Trickle и начать более частую передачу сообщений DIO.

Для предотвращения неприемлемого влияния на работу сети реализация может ограничить частоту сброса таймера Trickle при получении RPL Option значением MAX_RPL_OPTION_RANK_ERRORS в течение часа. В качестве значения MAX_RPL_OPTION_RANK_ERRORS рекомендуется 20.

5.2. Атаки на согласованность DAO

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

Для предотвращения неприемлемого влияния на работу сети реализация может ограничить частоту отбрасывания состояний маршрутизации Downward при получении RPL Option значением MAX_RPL_OPTION_FORWARD_ERRORS в течение часа. В качестве значения MAX_RPL_OPTION_FORWARD_ERRORS рекомендуется 20.

В режиме Non-Storing состояние Downward поддерживают лишь граничные маршрутизаторы LBR7. Поскольку маршрутизаторы RPL не поддерживают состояние нисходящей маршрутизации, опцию RPL в этом режиме невозможно использовать для организации атак.

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

Агентство IANA выделило новое значение в реестре Destination Options and Hop-by-Hop Options, как показано в таблице.

Шестнадцатеричное значение

Двоичное значение

Описание

Документ

act

chg

rest

0x63

01

1

00011

RPL Option

[RFC6553]

Как сказано в [RFC2460], первые 2 бита указывают, что узел IPv6 должен отбрасывать пакет с неизвестным типом опции, а третий говорит, что данные опции могут меняться на маршруте. Остальные биты задают тип опции .

Агентство IANA создало реестр RPL-option-TLV для TLV, передаваемых в заголовке RPL Option, с выделением новых кодов по процедуре IETF Review [RFC5226]. Поле типа имеет размер 8 битов и может содержать значения от 0 до 255.

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

Авторы благодарны Jari Arkko, Ralph Droms, Adrian Farrel, Stephen Farrell, Richard Kelsey, Suresh Krishnan, Vishwas Manral, Erik Nordmark, Pascal Thubert, Sean Turner, Tim Winter за комментарии и предложения, которые помогли оформить этот документ.

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2328] Moy, J., «OSPF Version 2», STD 54, RFC 2328, April 1998.

[RFC2460] Deering, S. and R. Hinden, «Internet Protocol, Version 6 (IPv6) Specification», RFC 24608, December 1998.

[RFC2473] Conta, A. and S. Deering, «Generic Packet Tunneling in IPv6 Specification», RFC 2473, December 1998.

[RFC5226] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 5226, May 2008.

[RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, «The Trickle Algorithm», RFC 6206, March 2011.

[RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, «RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks», RFC 6550, March 2012.

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

[RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, «An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)», RFC 6554, March 2012.


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

Jonathan W. Hui

Cisco Systems

170 West Tasman Drive

San Jose, California 95134

USA

Phone: +408 424 1547

EMail: jonhui@cisco.com

JP. Vasseur

Cisco Systems

11, Rue Camille Desmoulins

Issy Les Moulineaux 92782

France

EMail: jpv@cisco.com


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

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

nmalykh@protokols.ru

1Routing Protocol for Low-Power and Lossy Networks — протокол маршрутизации для сетей LLN.

2Low-Power and Lossy Networks — сети со слабым питанием и потерями.

3Экземпляру RPL, к которому относится отправитель исходного пакета. Прим. перев.

4Destination-Oriented DAG — ориентированный на адресата направленный ациклический граф (DAG).

5IPv6 Low-Power Wireless Personal Area Network — персональная беспроводная сеть IPv6 со слабым питанием.

6DODAG Information Object — объект информации DODAG.

7Low-Power and Lossy Network Border Router — гнаничный маршрутизатор сети LLN.

8Документ земенён RFC 8200. Прим. перев.

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

RFC 6552 Objective Function Zero for the Routing Protocol for Low-Power and Lossy Networks (RPL)

Internet Engineering Task Force (IETF)                   P. Thubert, Ed.
Request for Comments: 6552                                 Cisco Systems
Category: Standards Track                                     March 2012
ISSN: 2070-1721

Objective Function Zero for the Routing Protocol for Low-Power and Lossy Networks (RPL)

Базовая предметная функция OF для протокола маршрутизации RPL

PDF

Аннотация

Спецификация протокола RPL1 определяет базовый протокол на основе вектора удалённости (Distance Vector), адаптированный для разных типов сетей и приложений за счёт применения специализированных предметных функций (Objective Function или OF). OF определяет результат процесса, применяемого узлом RPL для выбора и оптимизации маршрутов в рамках экземпляра RPL на основе информационных объектов. OF не является алгоритмом.

Документ задаёт базовую функцию OF, основанную на объектах, определённых в RPL, и не использующую расширений протокола.

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

Этот документ содержит проект стандарта Internet (Internet Standards Track).

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

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

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

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

Спецификация протокола RPL [RFC6550] определяет базовый протокол на основе вектора удалённости, адаптируемый для разных типов сетей LLN2 путём использования конкретных предметных функций (OF).

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

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

RPL создаёт ациклические направленные графы (Directed Acyclic Graph или DAG) как наборы ориентированных на адресатов DAG (Destination-Oriented DAG или DODAG) в экземплярах протокола, с каждым из которых связана предметная функция OF. Графы DODAG периодически создаются заново с новой версией DODAG для повторения глобальной оптимизации графа.

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

RPL Instance использует OF для расчёта ранга устройства, представляющего абстрактное расстояние от корня DODAG в DODAG Version. Значения Rank передаются между узлами, использующими RPL и позволяют другим узлам RPL избегать потерь и проверять выполнение пересылки в направлении адресата, как указано в [RFC6550]. Независимо от применяемой узлом функции OF значение Rank будет всегда возрастать и таким образом после схождения всегда формируется путь без петель.

Базовая целевая функция (Objective Function Zero или OF0) работает с параметрами, получаемыми при инициализации, в опции RPL DODAG Configuration и базовом контейнере RPL DODAG Information Object (DIO) [RFC6550].

Ранг узла получается сложением строго положительного, косвенно нормализованного скаляра rank_increase (параграф 6.1) со значением Rank выбранного предпочтительного родителя. Значение rank_increase основано на нормализованном скаляре step_of_rank (параграф 6.1), который может меняться от 1 (отлично) до 9 (наименее приемлемо) для представления свойств канала. Значение step_of_rank может умножаться на настраиваемый коэффициент rank_factor (параграф 6.2), увеличивающий rank_increase для отражения относительной предпочтительности разных типов каналов, применяемых в одном RPL Instance. Дополнительная адаптация rank_increase рассмотрена в параграфе 4.1. По умолчанию OF0 позволяет представить значения Rank от 28 (наименее приемлемо) до 255 (отлично) интервалов пересылки.

Спецификация RPL [RFC6550] требует использования всеми узлами сети одной функции OF. Вопрос использования нескольких OF требует дальнейшего изучения.

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

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

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

Используемая в документе терминология соответствует документу «Terminology in Low power And Lossy Networks» [ROLL-TERMS] и [RFC6550].

Термин «возможный преемник» (feasible successor) обозначает соседа, который может служить следующим интервалом пересылки для восходящего трафика в соответствии с правилами пересылки и предотвращения петель, реализуемыми узлом и заданными спецификацией RPL [RFC6550].

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

3. Обзор функции OF0

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

Цель OF0 состоит в присоединении узла версии DODAG, предоставляющей достаточно хорошую связность с конкретным набором узлов или более крупной инфраструктурой маршрутизации, хотя нет гарантии, что путь будет оптимизирован в соответствии с конкретной метрикой. Процесс проверки связности зависит от реализации и типа канала и выходит за рамки документа. Проверка включает применение параграфа 3.2.3 и раздела 13 [RFC6550] в зависимости от ситуации и может включать специфические для реализации правила. Таким образом, для целей OF0 приземленность корня DODAG [RFC6550] означает, что он обеспечивает такую связность. Однако утверждение и поддержка этой связности выходят за рамки документа.

Функция OF0 предназначена для поиска ближайшего приземлённого корня. Этого можно достичь, если Rank узла очень близок к абстрактной функции его удалённости от корня. Эта потребность уравновешивается необходимостью поддержки некоторого разнообразия путей, что можно обеспечить повышением ранга. При отсутствии приземлённого корня связность внутри LLN по-прежнему желательна и формируются плавающие DAG с корнями в узлах с наивысшим административным предпочтением.

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

Узел RPL отслеживает каналы к ряду соседних узлов и может применять OF0 для назначения каждому каналу значения rank_increase. Хотя точный метод расчёта rank_increase зависит от реализации, должны выполняться правила, указанные в параграфе 4.1. Расчёт ранга.

4. Операции OF0

4.1. Расчёт ранга

Реализация OF0 сначала рассчитывает переменную step_of_rank (параграф 6.1), связанную с данным родителем, по соответствующим свойствам и метрике канала. Значение step_of_rank применяется для расчёта приращения ранга на конкретном канале, как описано ниже.

Расчёт step_of_rank на основе статической метике, такой как административная стоимость, предполагает, что реализация OF0 учитывает лишь родителей с достаточно хорошей связью, и даёт в результате значение Rank аналогичное hop-count. В большинстве сетей LLN это отдаёт предпочтение путям с меньшим числом более длинных интервалов пересылки в случаях плохой связи. Таким образом, рекомендуется основывать расчёт step_of_rank на динамических свойствах каналов, таких как ожидаемое число передач (ETX), введённое в [DeCouto03] и рассмотренное в [RFC6551]. В работе «Minimum Rank Objective Function with Hysteresis» [HYSTERESIS] даны рекомендации по расчёту стоимости каналов и повышению стабильности ранга за счёт гистерезиса.

OF0 позволяет реализации «растянуть» step_of_rank для обеспечения возможности выбора хотя бы одного возможного преемника и, таким образом, поддержки разнесения путей. Растягивание step_of_rank не рекомендуется, поскольку оно увеличивает видимое расстояние от узла до корня, искажает граф DODAG и может вызывать нестабильность из-за «жадности» узлов увеличивающих в цикле свой ранг для использования каждого другого узла как родителя. Тем не менее, реализация может «растягивать» step_of_rank с помощью настраиваемого параметра stretch_of_rank (параграф 6.2), принимающего значение от 0 (без растягивания) до константы MAXIMUM_RANK_STRETCH (параграф 6.3).

Реализация должна поддерживать растяжение step_of_rank в диапазоне от MINIMUM_STEP_OF_RANK до MAXIMUM_STEP_OF_RANK (параграф 6.3), что позволяет учесть широкий диапазон качества каналов.

Интервал MINIMUM_STEP_OF_RANK — MAXIMUM_RANK_STRETCH может оказаться недостаточным для всех случаев при сильно различающихся каналах разных типов и категорий, чтобы предпочесть, например, каналы с питанием от сеть по отношению к батарейным или высокоскоростные (кабельные) каналы по отношению к низкоскоростным (беспроводным) в одном DAG. реализации следует разрешать оператору настройку коэффициента rank_factor (параграф 6.2) и применять его для всех каналов и партнёров с целью усиления влияния растянутого step_of_rank при расчёте rank_increase, как описано ниже.

В дополнение реализация может распознавать категории партнёров и каналов, такие как разные типы каналов, и в этом случае следует обеспечивать возможность дополнительной настройки коэффициента rank_factor для таких категорий. Значение rank_factor должно лежать в диапазоне MINIMUM_RANK_FACTOR — MAXIMUM_RANK_FACTOR (параграф 6.3).

Переменная rank_increase указывается в единицах, заданных переменной MinHopRankIncrease, которая по умолчанию имеет значение DEFAULT_MIN_HOP_RANK_INCREASE ([RFC6550]), при такой установке младший октет поля RPL Rank в DIO Base Object не используется.

Значение step_of_rank Sp, рассчитанное для данного канала, умножается на rank_factor Rf и может растягиваться в Sr раз (не более stretch_of_rank). Полученное значение rank_increase добавляется к рангу предпочтительного родителя R(P) для получения ранга данного узла, при этом rank_increase рассчитывается как

   rank_increase = (Rf*Sp + Sr) * MinHopRankIncrease

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

4.2. Выбор родителей

4.2.1. Выбор предпочтительного родителя

При сканировании кандидатов в соседи OF0 сохраняет родителей, которые являются лучшими в соответствии с приведёнными ниже критериями (по порядку).

  1. В разделе 8 [RFC6550] указаны общие правила для узлов при повторном выборе родителя и, в частности, границы роста Rank в рамках DODAG Version. Кандидатов, не соответствующих этим правилам, рассматривать недопустимо.

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

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

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

  4. Если задано административное предпочтение корня для замены цели присоединения к Grounded DODAG, следует предпочитать маршрутизатор подключение к более предпочтительному корню.

  5. Следует предпочитать маршрутизатор, предлагающий соединение с приземлённой версией DODAG.

  6. Следует предпочитать маршрутизатор, предлагающий соединение с более предпочтительным корнем.

  7. При сравнении двух родителей из одного DODAG следует предпочитать маршрутизатор, обеспечивающий связь с более новой версией DODAG.

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

  9. Следует предпочитать версию DODAG, для которой имеется дополнительный родитель. Эта проверка необязательна и выполняется путём вычисления резервного возможного преемника в предположении, что используемый в настоящее время маршрутизатор окончательно выбран предпочтительным родителем.

  10. Следует предпочитать родителя, который уже был предпочтительным.

  11. Следует предпочитать маршрутизатор, анонсировавший более свежее сообщение DIO.

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

4.2.2. Выбор резервного преемника

При выборе резервного возможного преемника OF выполняет проверки в указанном ниже порядке.

  1. Резервному преемнику недопустимо быть предпочтительным родителем.

  2. Резервный преемник должен быть в той же или последующей версии DODAG, что и данный узел.

  3. Наряду с правилами RPL недопустимо выбирать маршрутизатор с той же версией DODAG, как у данного узла, и рангом выше Rank, рассчитанного для данного узла.

  4. Следует предпочитать маршрутизатор с меньшим рангом.

  5. Следует предпочитать маршрутизатор, проверенный на пригодность зависимым от реализации процессом.

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

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

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

5. Абстрактный интерфейс OF0

Функция OF0 взаимодействует с операциями и системой управления, как показано ниже.

Обработка DIO

При получении нового сообщения DIO функция OF, соответствующая коду цели (Objective Code Point или OCP) в the DIO вызывается с содержимым DIO. OF0 идентифицируется OCP 0 (8. Взаимодействие с IANA).

Предоставление информации DAG

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

Предоставление списка родителей

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

Триггерные обновления

Поддержка OF0 обеспечивает события для информирования об изменении в DAG information или Parent List. Это может быть вызвано взаимодействием с другими компонентами системы, такими как настройка конфигурации, таймеры, драйверы устройств, и эти изменения могут приводить к созданию ядром RPL нового сообщения DIO или сбросу таймеров Trickle.

6. Операнды OF0

В дополнение к переменным и константам [RFC6550] данная спецификация определяет ряд переменных и констант.

6.1. Переменные

step_of_rank

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

rank_increase (strictly positive integer)

Положительное целочисленное значение приращения ранга относительно предпочтительного родителя.

6.2. Настраиваемые параметры

OF0 может использовать приведённые ниже настраиваемые значения в качестве параметров расчёта rank_increase.

stretch_of_rank

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

rank_factor

Положительное целое число (настраиваемое), используемое для умножения свойств канала при расчёте rank_increase. По умолчанию используется rank_factor = 1.

6.3. Константы

В разделе 17 [RFC6550] определены константы RPL. OF0 использует несколько дополнительных констант:

DEFAULT_STEP_OF_RANK = 3;

MINIMUM_STEP_OF_RANK = 1;

MAXIMUM_STEP_OF_RANK = 9;

DEFAULT_RANK_STRETCH = 0;

MAXIMUM_RANK_STRETCH = 5;

DEFAULT_RANK_FACTOR = 1;

MINIMUM_RANK_FACTOR = 1;

MAXIMUM_RANK_FACTOR = 4.

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

В разделе 18 [RFC6550] описано управление протоколом. Данная спецификация наследует этот раздел за исключением того, что заданная в [RFC6551] метрика не применяется и не требует управления.

7.1. Конфигурация устройства

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

Реализация может разрешать настройку максимального значения stretch_of_rank, которое должно быть не больше MAXIMUM_RANK_STRETCH, как отмечено в параграфе 4.1. По умолчанию принято значение 0 и step_of_rank не растягивается.

Реализации OF0 следует поддерживать опцию DODAG Configuration, как описано в параграфе 6.7.6 [RFC6550] и применять содержащиеся в опции параметры. Как отмечено в разделе 16 [RFC6550], это требование может быть переопределено дополнительными рекомендациями для некоторых вариантов развёртывания. При использовании опции параметры настраиваются для узлов, которые могут стать корнями DODAG, а узлы настраиваются на распространение информации с использованием опции DODAG Configuration. В частности, в этой опции может распространяться значение MinHopRankIncrease для переопределения заданной в разделе 17 [RFC6550] константы DEFAULT_MIN_HOP_RANK_INCREASE = 256.

На момент выпуска с производства следует использовать принятые по молчанию значения констант:

  • rank_factor = DEFAULT_RANK_FACTOR (параграф 6.3).

  • максимальное значение stretch_of_rank = DEFAULT_RANK_STRETCH (параграф 6.3).

  • MinHopRankIncrease = DEFAULT_MIN_HOP_RANK_INCREASE ([RFC6550]).

Значения могут быть переопределены в любой момент и применены в следующей версии DODAG. Как указано в разделе 16 [RFC6550], это требование может быть изменено дополнительными рекомендациями для конкретного развёртывания.

7.2. Мониторинг устройств

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

  • Информация DAG, указанная в параграфе 6.3.1 [RFC6550] и включающая DODAGID, RPLInstanceID, MOP, Rank данного узла, текущее значение Version Number и значение флага Grounded.

  • Список соседей с указанием предпочтительного родителя и возможного преемника (при наличии). Для каждого соседа следует указывать Rank, текущее значение Version Number и значение флага Grounded.

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

В соответствии с этой спецификацией выделен код OCP (Objective Code Point) для функции OF0 в реестре Objective Code Point, как указано в параграфе 20.5 [RFC6550].

Код OCP

0

Описание

Базовая предметная функция OF, основанная лишь на объектах, определённых в [RFC6550].

RFC с определением

RFC 6552

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

Эта спецификация добавляет простые расширения RPL, поэтому для неё сохраняются уязвимости и проблемы безопасности, описанные в [RFC6550] и [ROLL-SECURITY]. Этот документ не добавляет потоков или сообщений, поэтому не требуется дополнительного смягчения угроз.

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

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

Спасибо Philip Levis и Phoebus Chen за помощь в доработке документа.

Большое спасибо также Adrian Farrel, Tim Winter, JP. Vasseur, Julien Abeille, Mathilde Durvy, Teco Boot, Navneet Agarwal, Meral Shirazipour, Henning Rogge за глубокий анализ и отзывы от разработчиков.

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, «RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks», RFC 6550, March 2012.

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

[DeCouto03] De Couto, D., Aguayo, D., Bicket, J., and R. Morris, «A High-Throughput Path Metric for Multi-Hop Wireless Routing», MobiCom ’03, The 9th ACM International Conference on Mobile Computing and Networking, San Diego, California, 2003, <http://pdos.csail.mit.edu/papers/grid:mobicom03/paper.pdf>.

[HYSTERESIS] Gnawali, O. and P. Levis, «The Minimum Rank Objective Function with Hysteresis», Work in Progress4, May 2011.

[RFC6551] Vasseur, J., Ed., Kim, M., Ed., Pister, K., Dejean, N., and D. Barthel, «Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks», RFC 6551, March 2012.

[ROLL-SECURITY] Tsao, T., Alexander, R., Dohler, M., Daza, V., and A. Lozano, «A Security Framework for Routing over Low Power and Lossy Networks», Work in Progress5, March 2012.

[ROLL-TERMS] Vasseur, JP., «Terminology in Low power And Lossy Networks», Work in Progress6, September 2011.

Адрес автора

Pascal Thubert (editor)

Cisco Systems

Village d’Entreprises Green Side

400, Avenue de Roumanille

Batiment T3

Biot — Sophia Antipolis 06410

FRANCE

Phone: +33 497 23 26 34

EMail: pthubert@cisco.com


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

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

nmalykh@protokols.ru

1Routing Protocol for Low-Power and Lossy Networks — протокол маршрутизации для сетей с низким питанием и потерями.

2Low-Power and Lossy Network — сеть с ограниченным питанием и потерями.

3Shortest path first — сначала кратчайший путь.

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

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

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

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

RFC 6551 Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks

Internet Engineering Task Force (IETF)                  JP. Vasseur, Ed.
Request for Comments: 6551                                 Cisco Systems
Category: Standards Track                                    M. Kim, Ed.
ISSN: 2070-1721                           Corporate Technology Group, KT
                                                               K. Pister
                                                           Dust Networks
                                                               N. Dejean
                                                              Elster SAS
                                                              D. Barthel
                                                   France Telecom Orange
                                                              March 2012

Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks

Метрика маршрутов для расчёта путей в сети LLN

PDF

Аннотация

Сети LLN1 отличаются от традиционных кабельных и специализированных (ad hoc) сетей и требуют спецификации новой метрики маршрутов и ограничения. В отличие от типичных протоколов IGP2, где метрикой служит число интервалов пересылки или метрика каналов, этот документ задаёт набор параметров маршрутной метрики узлов и каналов, а также ограничений, подходящих для сетей LLN, использующих протокол маршрутизации RPL3.

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

Этот документ содержит проект стандарта Internet (Internet Standards Track).

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

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

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

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

В этом документе используется терминология, определённая в [ROLL-TERMS].

Сети со слабым электропитанием и потерями (LLN) отличаются по характеристикам маршрутизации от традиционных кабельных и специализированных сетей, описанных в [RFC5548], [RFC5673], [RFC5826], [RFC5867].

Протоколы IGP, такие как OSPF ([RFC2328]) и IS-IS ([RFC1195]), используют статические количественные параметры каналов в качестве метрики маршрутов. Другие механизмы, подобные MPLS TE4 (см. [RFC2702] и [RFC3209]), применяют иные атрибуты соединений, такие как доступная для резервирования пропускная способность (динамический параметр) или близость (по большей части статичный параметр) для расчёта кратчайших путей с учётом ограничений TE LSP5.

В этом документе заданы метрики маршрутов и ограничения для использования при расчёте путей протоколом маршрутизации RPL, заданным в [RFC6550].

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

Определённые здесь метрики и ограничения передаются в объектах, которые необязательны с точки зрения реализации RPL. Это позволяет реализациям включать произвольный набор функций (метрик, ограничений), заданных в этом документе. Конкретные наборы метрик, ограничений и других необязательных параметров RPL для применения в ключевых средах будут задаваться в форме профилей применимости, разрабатываемых рабочей группой ROLL. Отметим, что RPL может совсем не использовать метрику, обходясь предметной функцией OF, заданной в [RFC6552].

RPL является протоколом на основе векторов удалённости, который создаёт направленные ациклические графы (Directed Acyclic Graph или DAG) на основе маршрутной метрики и ограничений. Правила создания DAG заданы в [RFC6550]

  • Корень ориентированного на адресата графа (Destination-Oriented Directed Acyclic Graph или DODAG) в соответствии с [RFC6550] может анонсировать маршрутные ограничения, служащие «фильтрами» для исключения каналов и узлов, не соответствующих конкретным требованиям. Например, может требоваться прохождение пути лишь через устройства с питанием от сети или каналы, обеспечивающие определённую надёжность или имеющие конкретный «цвет», отражающий заданные пользователем характеристики (скажем, поддержка шифрования на канале).

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

Лучшим считается путь, соответствующий всем ограничениям (при наличии) и имеющий наименьшую стоимость в части заданной метрики. Его также называют кратчайшим путём с ограничениями (при их наличии). Метрики маршрута можно характеризовать по трём категориям:

  • метрика каналов и метрика узлов;

  • количественная и качественная метрика;

  • динамическая и статическая метрика.

В документах с требованиями к маршрутизации ([RFC5673], [RFC5826], [RFC5548], [RFC5867]) отмечено, что при расчёте пути должна обеспечиваться возможность учёта множества ограничений и параметров метрики узла.

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

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

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

Следует отметить, что использование динамической метрики не является новинкой и было опробовано в ARPANET 2 (см. [Zinky1989]). Применение динамической метрики нетривиально и требует уделять внимание изменению параметров, поскольку оно может вести к нестабильности маршрутизации. За прошедшие годы накоплен большой опыт работы с динамической метрикой маршрутов, которая была развёрнута в ряде сетей (не IP).

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

Набор метрик и ограничений, используемых при развёртывании RPL, передаётся по графу DAG, создаваемому в соответствии с предметной функцией OF (правила построения DAG), а метрика и ограничения анонсируются в информационном объекте DIO (DODAG Information Object), заданном в [RFC6550]. RPL можно использовать для построения графов DAG с разными характеристиками. Например, можно создать DAG с максимальной надёжностью, используя метрику надёжности каналов для выбора пути. Другим примером может служит учёт ограничений по питанию узлов (например, предпочтение узлов с питанием от сети) при построении DAG для исключения узлов с батарейным питанием при оптимизации по пропускной способности.

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

Некоторые типы метрики агрегируются или записываются. Агрегируемая метрика корректируется по мере прохождения DIO через граф DAG. Например, если метрикой служит число интервалов пересылки (hop), каждый узел обновляет стоимость пути, отражая общее число пересылок в DAG. Для записываемой метрики каждый узел добавляет субобъект, отражающий локальную оценку метрики, записывая локальный уровень качества канала. Для ограничения числа субобъектов может оказаться желательным использование счётчиков (например, число каналов с неким уровнем качества), позволяющее сократить размер сообщения. При получении сообщения DIO от набора родителей узел может в соответствии с предметной функцией OF и локальными правилами принять решение о выборе родительского узла (например, по наибольшему числу каналов с заданным уровнем надёжности.

Отметим, что метрика маршрутов и ограничения, заданные в документе, не связаны с каким-либо конкретным канальным уровнем. Для точного учёта значения метрики каналов (кабельных, беспроводных, PLC) может применяться внутренний API между уровнем контроля доступа к среде (Medium Access Control или MAC) и RPL.

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

Имеются различные варианты опций, которые могут применяться в разных развёртываниях. Реализации должны чётко указывать включаемые опции и принятые по умолчанию параметры, а также настраиваемые опции. Рабочая группа ROLL будет выпускать заявления о применимости для разъяснения опций, применимых к конкретным вариантам развёртывания, описанным в [RFC5673], [RFC5826], [RFC5548] и [RFC5867].

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

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

2. Формат объектов

2.1. Контейнер метрики DAG

Метрика маршрутов и ограничения передаются в объектах DAG Metric Container [RFC6550]. Если в DAG Metric Container имеется несколько метрик и/или ограничений, выбор «лучшего» может задаваться функцией OF.

Объекты Routing Metric/Constraint представляют метрику или ограничения определённого типа. Они могут указываться в любом порядке внутри DAG Metric Container (определён в [RFC6550]). Контейнер содержит один или несколько байтов с общим заголовком.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Routing-MC-Type|Res Flags|P|C|O|R| A   |  Prec |    Length     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
//                        (тело объекта)                       //
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Базовый объект маршрутной метрики или ограничений.


Тело объекта содержит один или несколько субобъектов, определённых в этом документе. Объект может включать TLV7, которые сами содержат TLV.

Routing-MC-Type (Routing Metric/Constraint Type — 8 битов)

Поле типа метрики или ограничений однозначно указывает объект Routing Metric/Constraint из реестра IANA.

Length (8 битов)

Размер тела объекта в байтах (0 — 255).

Res Flags (16 битов)

Флаги объекта Routing Metric/Constraint поддерживаются IANA. Не выделенные биты считаются резервными (отправитель должен устанавливать 0, а получатель должен игнорировать их).

Ниже перечислены определённые в настоящее время биты поля Routing Metric/Constraint Flag.

P

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

C

Установленный флаг указывает, что объект Routing Metric/Constraint задаёт к ограничение (иначе метрику).

O

Служит лишь для маршрутных ограничений (C = 1). Установленный флаг указывает необязательность указанных в теле объекта ограничения. В противном случае они обязательны. При C = 0 флаг O должен сбрасываться при передаче и игнорироваться при получении.

R

Относится лишь к метрике маршрутов (C=0) и должен сбрасываться при C=1. Установка флага указывает, что метрика маршрута записывается на пути, а при сброшенном флаге метрика агрегируется.

A (3 бита)

Поле A относится лишь к метрике и служит для указания типа агрегирования метрики:

  • A=0 — аддитивная метрика;

  • A=1 — максимальное значение;

  • A=2 — минимальное значение;

  • A=3 — мультипликативная метрика.

Поле A не имеет смысла при установленном флаге C (объект Routing Metric/Constraint задаёт ограничения) и действительно лишь при сброшенном флаге R. В иных случаях поле A должно сбрасываться (0) при передаче, а получатель должен игнорировать его.

Prec (4 бита)

Поле Prec указывает приоритет данного объекта Routing Metric/Constraint по отношению к другим объектам в контейнере при наличии их в DAG Metric Container. Поле может иметь значение от 0 (высший приоритет) до 15.

Пример 1

DAG формируется RPL, где все узлы имеют питание от сети, а лучшим является путь с наименьшим ожидаемым совокупным числом передач (expected transmission count или ETX). В этом случае DAG Metric Container содержит два объекта Routing Metric/Constraint, один из которых указывает метрику ETX и имеет заголовок (C=0, O=0, A=00, R=0), а другой — ограничение Node Energy и имеет заголовок (C=1, O=0, A=00, R=0). RPL Instance может использовать объект метрики для указания максимума (A=1) или минимума (A=2). Например, если лучший путь выбирается по отсутствию соединений с низким качеством, метрика указывает максимум (A=1) (большее значение ETX говорит о меньшем качестве канала) — когда сообщение DIO с метрикой качества канала (ETX) обрабатывается узлом, каждый узел, выбравший анонсирующий узел в качестве родителя, обновляет значение в объекте метрики, помещая туда своё локальное значение ETX, если оно выше имеющегося. Что касается указанного ограничения, тело объекта сдержит ограничение Node Energy, определённое в параграфе 3.1 и задающее требование питания узла от сети, — если это ограничение, заданное в сообщении DIO, не выполняется, анонсирующий узел просто не выбирается в качестве родителя, обрабатывающего сообщение DIO.

Пример 2

DAG формируется RPL, где метрикой служит уровень качества канала (раздел 4) и эти уровни должны записываться в пути. DAG Metric Container содержит объект Routing Metric/Constraint с заголовком (C=0, O=0, A=00, R=1) и множеством субобъектов.

Объект Routing Metric/Constraint может также включать один или несколько объектов TLV с наборами данных. Все Routing Metric/Constraint TLV имеют структуру:

Type: 1 байт;

Length: 1 байт;

Value: переменный размер.

Routing Metric/Constraint TLV содержит 1-байтовое поле типа, 1-байтовое поле размера и поле значения. Поле TLV указывает размер значения в байтах (0 — 255). Нераспознанные TLV должны игнорироваться без прерывания распространения в DIO, созданных принимающим узлом.

Агентство IANA поддерживает коды для всех TLV, передаваемых в объектах метрики и ограничений. Пространство кодов объектов Routing Metric/Constraint описано в разделе 6.

2.2. Использование нескольких контейнеров DAG Metric

Поскольку размер опций RPL задаётся одним октетом, он не может быть больше 255 байтов, что применимо и для DAG Metric Container. В подавляющем большинстве случаев анонсируемые метрики маршрутов и ограничения не требуют большего размера, однако иногда возникают обстоятельства, требующие большего пространства. В таких случаях для предотвращения переполнения, как указано в [RFC6550], маршрутная метрика может передаваться в нескольких объектах DAG Metric Container. Далее в этом документе использование нескольких объектов DAG Metric Container рассматривается как один большой объект DAG Metric Container.

2.3. Применение метрики

Когда DAG Metric Container содержит одну агрегированную метрику (скаляр), порядок при выборе лучшего пути неявно выводится из типа метрики. Например, более низкое значение лучше для типов Hop Count, Link Latency, ETX, а более высокое — для Node Energy и Throughput. Примером использования простой агрегированной метрики является оптимизация маршрутов по энергетическим возможностям узлов. Метрика Node Energy (поле E_E), определённая в параграфе 3.2, агрегируется на пути явной функцией min (поле A), а лучший путь выбирается предполагаемой функцией Max, поскольку метрикой служит Energy.

Когда DAG Metric Container содержит несколько агрегированных метрик, конфликты разрешаются в соответствии с приоритетом в полях Prec. Примером использования нескольких агрегированных метрик является выбор Hop Count как основного критерия, Link Quality Level (LQL) — как вторичного и Node Energy — в качестве окончательного. В таком случае в полях Prec объектов Hop Count, LQL, Node Energy следует указывать строго возрастающие значения, например, 0, 1, 2. Если несколько агрегированных метрик имеют одинаковые значения Prec, поведение зависит от реализации.

3. Объекты метрики и ограничений для узла

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

3.1. Объект состояния и атрибутов узла

Объект состояния и атрибутов узла (Node State and Attribute или NSA) содержит сведения о характеристиках узла. Объекты NSA могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта NSA в качестве ограничения и недопустимо включать более одного объекта NSA в качестве метрики. Объект NSA может включать набор TLV с различными характеристиками узла. TLV пока не определены.

Для типа NSA выделено значение 1 в реестре IANA, формат объекта показан на рисунке 2.

 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
|     Res       |  Flags    |A|O|Необязательные TLV
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 2. Тело объекта NSA.


Res (8 битов)

Резервное поле, которое должно содержать 0 при передаче и должно игнорироваться при получении.

Flags (8 битов)

В настоящее время определены два флага для объектов NSA.

A

Атрибут агрегирования (Aggregation Attribute). Агрегирование указано как требование в параграфе 6.2 [RFC5548]. Некоторые приложения могут использовать атрибут агрегирования узла при выборе маршрута для минимизации объёма трафика в сети, что может увеличить срок работы устройств с батарейным питанием. Приложения, в которых регулярно ожидается высокий трафик, могут получить преимущество в результате маршрутизации с агрегированием данных. Установка флага говорит, что узел может агрегировать трафик. В других документах могут определяться дополнительные TLV для описания функциональности агрегатора.

O

Нагрузку на узел может быть трудно определить и выразить в скалярной форме, однако она может быть полезной метрикой при расчёте пути, в частности, при необходимости минимизировать задержки в очередях для чувствительного к ним трафика с учётом задержки на уровне MAC. Флаг можно устанавливать для узла по перегрузке CPU, нехватке памяти или иным похожим условиям. Использование простого 1-битового флага обеспечивает достаточный уровень детализации, подобно биту перегрузки в протоколах маршрутизации, таких как IS-IS. Алгоритмы установки бита и расчёта путей, узлы которых не содержат этого бита, выходит за рамки спецификации но рекомендуется избегать частой смены состояния флага для предотвращения осцилляций маршрутов. Установка флага говорит о перегрузке узла и его неспособности обработать трафик.

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

Значения Flags в объектах NSA Routing Metric/Constraint выделяются IANA, невыделенные биты остаются в резерве.

3.2. Объект Energy для узла

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

Электропитание явно является важным ресурсом в большинстве LLN. Пока не предложено простой абстракции, адекватно описывающей широкий спектр источников питания и аккумуляторов в узлах LLN, включающий сетевое и батарейное питание, преобразователи (scavenger) и множество вторичных накопительных механизмов. Преобразователи могут надёжно обеспечивать невысокий уровень мощности, например, контур с током 4-20 мА, надёжный но непостоянный поток энергии, например, от солнечной батареи или предсказуемый уровень, например, от вибрационного преобразователя на насосе. Маршруты, работающие при солнце, могут пропадать ночью, включение насоса может соединить две ранее разделённых части сети. Аккумуляторы часто теряют свойства при регулярном полном разряде, что ведёт к разному уровню остаточной энергии для аварийного и обычного режима. Маршрут для аварийных ситуаций может отличаться от оптимального маршрута в обычных условиях.

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

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

С учётом сложности попыток сократить набор ограничений в документе предлагается два уровня точности решения. Простейшее решение основано на 2-битовом поле, задающем 3 типа источников питания powered, battery, scavenger. Такого подхода может быть достаточно для многих приложений.

Решение средней сложности заключается в использовании одного параметра, позволяющего представить энергетические возможности для устройств с питанием от батарей и преобразователей. Для узлов с преобразователями 8-битовое значение задаёт мощность, обеспечиваемую источником, поделённую на потребляемую приложением мощность (E_E=P_in/P_out) и выраженную в процентах. Узлы, собирающие больше энергии, нежели потребляется будут давать значения больше 100. Подходящий интервал усреднения для расчёта может быть связан со временем разряда имеющегося на узле аккумулятора, но задание этого параметра выходит за рамки спецификации. Для устройств с батарейным питанием E_E представляет текущий ожидаемый срок службы, поделённый на желаемый минимальный срок и выраженный в процентах. Оценка остающейся в батарее энергии и расчёт реального потребления могут быть сложны и выходят за рамки документа, однако здесь представлены два примера. Если узел может измерить свою среднюю потребляемую мощность, E_E можно рассчитать как отношение желаемой максимальной мощности (исходная энергия E_0, поделённая на желаемый срок службы T) на реальную мощность E_E=P_max/P_now. В качестве другого варианта при возможности оценки энергии в батарее E_bat и знании прошедшего времени t можно рассчитать E_E как отношение оставшейся сохранённой энергии к целевой оставшейся энергии E_E= E_bat/[E_0 (T-t)/T].

Примером оптимизированного маршрута является max(min(E_E)) для набора узлов с батарейным питанием по маршруту с ограничением E_E>=100 для всех преобразователей на пути.

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

Объект Node Energy (NE) служит для предоставления информации, относящейся к питанию узла и способной служить параметром метрики или ограничений. Объект NE может присутствовать в DAG Metric Container, однако недопустимо включать более одного объекта NE в качестве ограничения и недопустимо включать более одного NE в качестве метрики.

Для объекта NE выделено значение Type = 2 в реестре IANA. Формат объекта показан на рисунке 3.

 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
|     Субобъекты NE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 3. Формат объекта NE.


Формат тела субобъекта NE показан на рисунке 4.

 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
| Flags |I| T |E|      E_E      |Необязательные TLV
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 4. Формат субобъекта NE.


Субобъект NE может включать набор TLV с различными характеристиками узла.

Flags (8 битов)

Определённые в настоящее время флаги перечислены ниже.

I (Included)

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

T (node Type)

2-битовое поле, указывающее тип узла — T=0 для устройств с питанием от сети, T=1 — с батарейным питанием, T=2 — с питанием от преобразователей (scavenger).

E (Estimation)

При установленном флаге для метрики оценка доли оставшейся на узле энергии указывается 8-битовым полем E_E, при сброшенном эта оценка не предоставляется. Если флаг E установлен для ограничения, поле E_E указывает порог включения/исключения. Если указано включение, превышение порога задаёт включение узла, если указано исключение, значение ниже порога задаёт исключение узла.

E_E (Estimated-Energy)

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

Если объект NE содержит несколько субобъектов и служит ограничением, каждый субобъект добавляет иди исключает подмножество узлов по мере упорядоченного анализа субобъектов. Начальный набор определяется флагом I в первом субобъекте и будет полным, если флаг I задаёт исключение, и пустым, если флаг I задаёт включение.

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

3.3. Объект Hop Count

Объект Hop Count (HP) служит для указания числа узлов на пути. Объекты HP могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта HP в качестве ограничения и недопустимо включать более одного объекта HP в качестве метрики. Объект HP может включать набор TLV с различными характеристиками узла. TLV пока не определены.

Для объекта HP выделено значение Type = 3 в реестре IANA. Формат объекта Count показан на рисунке 5.


 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
|  Res  | Flags |   Hop Count   |  Необязательные TLV
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 5. Формат тела объекта Hop Count.

Res (4 бита)

Резервное поле, которое должно содержать 0 при передаче и должно игнорироваться получателем.

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

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

Первый узел пути, включающий объект метрики HC, должен установить в поле Hop Count значение 1.

4. Объекты метрики и ограничений для канала

4.1. Объект Throughput

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

Объекты Throughput могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта Throughput в качестве ограничения и недопустимо включать более одного объекта Throughput в качестве метрики.

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

Субобъект Throughput имеет фиксированный размер 4 байта. Объект Throughput не включает дополнительных TLV. Для объектов Throughput выделено значение Type = 4 в реестре IANA, формат объекта показан на рисунке 6.


 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  (субобъекты) .....
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 6. Тело объекта Throughput.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Throughput                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 7. Формат субобъекта Throughput.


Throughput (32 бита)

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

4.2. Объект Latency

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

Объекты Latency могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта Latency в качестве ограничения и недопустимо включать более одного объекта Latency в качестве метрики.

Объект Latency состоит из одноимённых субобъектов и должен включать по меньшей мере один субобъект Latency.

Субобъект Latency имеет фиксированный размер 4 байта. Объект Latency не включает дополнительных TLV. Для объектов Latency выделено значение Type = 5 в реестре IANA, формат объекта показан на рисунке 8. Объект Latency может указывать метрику или ограничение.


 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  (субобъект) .....
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 8. Тело объекта Latency.

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Latency                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 9. Формат субобъекта Latency.


Latency (32 бита)

Задержка в микросекундах, указанная 32-битовым целым числом без знака.

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

4.3. Надёжность канала

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

Изменение качества каналов может влиять на сетевую связность, поэтому качество соединения может применяться в качестве важной метрики маршрутизации. Можно определить множество параметров надёжности, отражающих разные аспекты. Данный документ задаёт два параметра — уровень качества канала (Link Quality Level или LQL) и ETX Metric. Реализация RPL может использовать LQL, ETX или оба параметра.

4.3.1. Объект LQL

Объект LQL служит для указания качества канала дискретным значением от 0 до 7 (0 — неопределённое качество, 1 — высший уровень). Механизмы и алгоритмы расчёта LQL зависят от реализации и выходят за рамки документа. LQL может служить метрикой или ограничением. При использовании в качестве метрики значение LQL может только записываться. Например, объект DAG Metric может запрашивать у всех проходимых узлов запись LQL на их входящем канале в объект LQL. Затем каждый узел может применять запись LQL для выбора родителей на основе заданных пользователем правил (например, выбор пути, где большинство узлов указывает значение LQL не более 3). Для сжатия данных применяются счётчики и записывается лишь число каналов для каждого встретившегося значения LQL.

Объекты LQL могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта LQL в качестве ограничения и недопустимо включать более одного объекта LQL в качестве метрики.

Объект LQL должен включать один или несколько субобъектов, служащих для указания числа каналов с данным LQL. Для объектов LQL выделено значение Type = 6 в реестре IANA, формат объекта показан на рисунке 10

 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
|       Res     | LQL sub-object
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 10. Тело объекта LQL.


Res (8 битов)

Резервное поле, которое должно устанавливаться в 0 при передаче, а получатель должен его игнорировать.

При записи метрики LQL тело объекта LQL содержит один или несколько субобъектов LQL типа 1 (рисунок 11).

 0
 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| Val | Counter |
+-+-+-+-+-+-+-+-+

Рисунок 11. Субоъект LQL типа 1.


Val

Значение LQL от 0 до 7, где 0 указывает неопределённое, а 1 — наивысшее качество соединения.

Counter

Число каналов с данным уровнем качества.

4.3.2. Объект ETX

Метрика ETX указывает число передач, ожидаемых узлом для доставки пакета адресату. В отличие от метрики LQL, ETX задаёт дискретное значение (не обязательно целое), которое рассчитывается по заданной формуле. Например, реализация может использовать расчёт ETX= 1/(Df*Dr), где Df указывает измеренную вероятность получения пакета соседом, а Dr — измеренную вероятность приёма пакета подтверждения. Документ не задаёт формулу расчёта ETX.

Объекты ETX могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта ETX в качестве ограничения и недопустимо включать более одного объекта ETX в качестве метрики.

Объект ETX состоит из одноимённых субобъектов и должен включать по меньшей мере один субобъект ETX. Субобъект ETX имеет фиксированный размер 16 байтов. Объект ETX не включает дополнительных TLV. Для объектов Latency выделено значение Type = 7 в реестре IANA, формат объекта показан на рисунке 12.


 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  (субобъекты) .....
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 12. Тело объекта ETX.

 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              ETX              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 13. Субобъект ETX.


ETX (16 битов)

Значение ETX*128 в форме целого числа без знака с округлением. Например, для ETX = 3,569 объект будет иметь значение 457. Для ETX > 511,9921875 объект принимает максимальное значение 65535.

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

4.4. Объект LC

4.4.1. Описание объекта

Объект Link Color (LC) задаёт административное 10-битовое значение (статическое или динамическое), применяемое для исключения или предпочтения определённых каналов для определённых типов трафика. Объект LC может указывать метрику или ограничение. При использовании в качестве метрики значение LC может только записываться. Например, DAG может требовать записи LC для всех пройденных каналов. Цвет определяется как конкретный набор битов, т. е. 10-битовое поле содержит флаги, а не скалярное значение. Каждый узел может применять LC для выбора родителя на основе правил (например, выбирать путь с максимальным числом каналов, где установлен бит 1). При использовании в качестве записываемой метрики для сжатия данных применяются счётчики, указывающие число каналов для каждого указанного LC.

Объекты LC могут присутствовать в DAG Metric Container, но недопустимо включать в контейнер более одного объекта LC в качестве ограничения и недопустимо включать более одного объекта LC в качестве метрики.

Объект LC должен включать по меньшей мере один субобъект LC и не включает дополнительных TLV. Для объектов LC выделено значение Type = 8 в реестре IANA, формат объекта показан на рисунке 14.

 0                   1                   2
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...
|      Res      | субобъекты LC
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ...

Рисунок 14. Формат объекта LC.


Res (8 битов)

Резервное поле, которое должно устанавливаться в 0 при передаче, а получатель должен его игнорировать.

При использовании объекта LC как записываемой метрики тело LC содержит один или несколько субобъектов LC типа 1 (рисунок 15).

 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Link Color     |  Counter  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 15. Субобъект LC типа 1.


При использовании объекта LC как ограничения тело LC содержит один или несколько субобъектов LC типа 2 (рисунок 16)

 0                   1
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Link Color    |Reserved |I|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 16. Субобъект LC типа 2.


Reserved (5 битов)

Резервное поле, которое должно устанавливаться в 0 при передаче, а получатель должен его игнорировать.

I

Флаг, действительный лишь при использовании LC в качестве ограничения. Установленный флаг задаёт включения каналов с заданным цветом, сброшенный — исключение.

Назначение каждого бита поля Link Color определяется реализацией.

4.4.2. Режим работы

Цвет канала может служит ограничением или метрикой.

  • В качестве ограничения объект LC может помещаться в DAG Metric Container для включения или исключения из пути каналов соответствующего цвета.

  • При использовании в качестве записываемой метрики каждый узел на пути может помещать объект LC в DAG Metric Container для указания цвета локального канала. Если объект LC уже указывает такой цвет, узлу недопустимо добавлять идентичный субобъект LC и он должен лишь увеличивать значение счётчика.

5. Расчёт динамической метрики и атрибутов

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

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

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

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

Агентство IANA создало новый реестр верхнего уровня RPL Routing Metric/Constraint для включения всех кодов объектов и субреестров. Для каждого из новых реестров применяется процедура IETF review [RFC5226]. В частности, новые значения выделяются через RFC, одобренные IESG. Как правило, IESG запрашивает сведения о предполагаемом назначении у соответствующих лиц (например, в рабочей группе при её наличии).

Новые номера ботов выделяются только по процедуре IETF Review и отслеживаются по 3 параметрам:

  • номер бита;

  • описание возможности;

  • RFC с определением.

6.1. Типы метрики и ограничений

Агентство IANA создало субреестр Routing Metric/Constraint Type для типа объектов Routing Metric/Constraint со значениями от 0 до 255. Значение 0 не выделено.

Значение

Описание

Документ

1

Состояние и атрибут узла

Данный документ

2

Питание узла

Данный документ

3

Счётчик интервалов пересылки

Данный документ

4

Пропускная способность канала

Данный документ

5

Задержка в канале

Данный документ

6

Уровень качества канала

Данный документ

7

ETX для канала

Данный документ

8

Цвет канала

Данный документ

6.2. TLV для метрики и ограничений

Агентство IANA создало субреестр Routing Metric/Constraint TLVs для всех TLV, передаваемых в объектах Routing Metric/Constraint. Поле Type имеет размер 8 битов и может включать значения от 0 до 255. Значение 0 не выделено. 8-битовое поле Length может содержать значения от 0 до 255. Размер и назначение поля Value зависит от типа и здесь не определено, поскольку типы пока не зарегистрированы.

6.3. Поле Routing Metric/Constraint Common Header Flag

Агентство IANA создало субреестр Routing Metric/Constraint Common Header Flag field для поддержки значений 9-битового поля Flag в базовом заголовке Routing Metric/Constraint. Этот документ определяет несколько битов поля Flag, как показано ниже.

Биты поля Flag в базовом заголовке Routing Metric/Constraint.

Бит

Описание

Документ

8

Запись/агрегирование

Данный документ

7

Необязательное ограничение

Данный документ

6

Ограничение/метрика

Данный документ

5

P (неполное)

Данный документ

Биты 0-4 не пока выделены.

6.4. Поле Routing Metric/Constraint Common Header A

Агентство IANA создало субреестр Routing Metric/Constraint Common Header A field для значения поля A в базовом заголовке Routing Metric/Constraint. 3-битовое поле A может содержать значение от 0 до 7.

Значения поля A в базовом заголовке Routing Metric/Constraint.

Значение

Описание

Документ

0

Метрика является аддитивной

Данный документ

1

Метрика указывает максимум

Данный документ

2

Метрика указывает минимум

Данный документ

3

Метрика является мультипликативной

Данный документ

6.5. Поле флагов объекта NSA

Агентство IANA создало субреестр NSA Object Flag field для значений поля Flag в объекте NSA.

Этот документ определяет несколько битов поля NSA Object Flag, показанных в таблице.

Биты поля Flag в объекте NSA.

Бит

Описание

Документ

6

Агрегатор

Данный документ

7

Перегрузка

Данный документ

Биты 0-5 не пока выделены.

6.6. Поле флагов объекта Hop-Count

Агентство IANA создало субреестр Hop-Count Object Flag field для битов поля Flag в объекте Hop Count. Флаги пока не заданы.

6.7. Поле типа узла

Агентство IANA создало субреестр Node Type Field для кодов типа узла в базовом заголовке Routing Metric/Constraint. Поле T имеет размер 2 бита и может иметь значение от 0 до 3.

Значения поля T в базовом заголовке Routing Metric/Constraint.

Значение

Описание

Документ

0

Узел с питанием от сети

Данный документ

1

Узел с батарейным питанием

Данный документ

2

Узел с питанием от преобразователя

Данный документ

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

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

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

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

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

Авторы признательны Young Jae Kim, Hakjin Chong, David Meyer, Mischa Dohler, Anders Brandt, Philip Levis, Pascal Thubert, Richard Kelsey, Jonathan Hui, Alexandru Petrescu, Richard Kelsey, Mathilde Durvy, Phoebus Chen, Tim Winter, Yoav Ben-Yehezkel, Matteo Paris, Omprakash Gnawali, Mads Westergreen, Mukul Goyal, Joseph Saloway, David Culler, Jari Arkko за вклад в работу, рецензии и ценные замечания. Отдельная благодарность Adrian Farrel за внимательное рецензирование.

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC5226] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 5226, May 2008.

[RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. Alexander, «RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks», RFC 6550, March 2012.

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

[RFC1195] Callon, R., «Use of OSI IS-IS for routing in TCP/IP and dual environments», RFC 1195, December 1990.

[RFC2328] Moy, J., «OSPF Version 2», STD 54, RFC 2328, April 1998.

[RFC2702] Awduche, D., Malcolm, J., Agogbua, J., O’Dell, M., and J. McManus, «Requirements for Traffic Engineering Over MPLS», RFC 2702, September 1999.

[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, «RSVP-TE: Extensions to RSVP for LSP Tunnels», RFC 3209, December 2001.

[RFC5548] Dohler, M., Watteyne, T., Winter, T., and D. Barthel, «Routing Requirements for Urban Low-Power and Lossy Networks», RFC 5548, May 2009.

[RFC5673] Pister, K., Thubert, P., Dwars, S., and T. Phinney, «Industrial Routing Requirements in Low-Power and Lossy Networks», RFC 5673, October 2009.

[RFC5826] Brandt, A., Buron, J., and G. Porcu, «Home Automation Routing Requirements in Low-Power and Lossy Networks», RFC 5826, April 2010.

[RFC5867] Martocci, J., De Mil, P., Riou, N., and W. Vermeylen, «Building Automation Routing Requirements in Low-Power and Lossy Networks», RFC 5867, June 2010.

[RFC6552] Thubert, P., Ed., «Objective Function Zero for the Routing Protocol for Low-Power and Lossy Networks (RPL)», RFC 6552, March 2012.

[ROLL-TERMS] Vasseur, JP., «Terminology in Low power And Lossy Networks», Work in Progress8, September 2011.

[Zinky1989] Zinky, J., Vichniac, G., and A. Khanna, «Performance of the Revised Routing Metric for ARPANET and MILNET», Military Communications Conference, MILCOM ’89, March 1989.

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

JP. Vasseur (editor)

Cisco Systems

11, Rue Camille Desmoulins

Issy Les Moulineaux 92782

France

EMail: jpv@cisco.com

Mijeom Kim (editor)

Corporate Technology Group, KT

17 Woomyeon-dong, Seocho-gu

Seoul 137-792

Korea

EMail: mjkim@kt.com

Kris Pister

Dust Networks

30695 Huntwood Ave.

Hayward, CA 95544

USA

EMail: kpister@dustnetworks.com

Nicolas Dejean

Elster SAS

Espace Concorde, 120 impasse JB Say

Perols 34470

France

EMail: nicolas.dejean@coronis.com

Dominique Barthel

France Telecom Orange

28 chemin du Vieux Chene, BP 98

Meylan 38243

France

EMail: dominique.barthel@orange.com


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

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

nmalykh@protokols.ru

1Low-Power and Lossy Network — сеть с низким электропитанием и потерями.

2Interior Gateway Protocol — протокол внутренней маршрутизации.

3Routing Protocol for Low-Power and Lossy Networks — протокол маршрутизации для сетей LLN.

4Multiprotocol Label Switching Traffic Engineering — организация трафика с коммутацией по меткам.

5Traffic Engineering Label Switched Path — путь с коммутацией по меткам для организации трафика.

6Power Line Communication — связь через сеть электропитания.

7Type-length-value — тип, размер, значение.

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

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

RFC 6536 Network Configuration Protocol (NETCONF) Access Control Model

Этот документ заменен RFC 8341.

Рубрика: RFC | Комментарии к записи RFC 6536 Network Configuration Protocol (NETCONF) Access Control Model отключены

RFC 6487 A Profile for X.509 PKIX Resource Certificates

Internet Engineering Task Force (IETF)                         G. Huston
Request for Comments: 6487                                 G. Michaelson
Category: Standards Track                                     R. Loomans
ISSN: 2070-1721                                                    APNIC
                                                           February 2012

Профиль для сертификатов ресурсов X.509 PKIX

A Profile for X.509 PKIX Resource Certificates

PDF

Аннотация

Этот документ определяет стандартный профиль сертификатов X.509, используемых для проверки заявлений о «праве использования» (right-of-use) ресурсов INR1. Сертификаты, выпускаемые с этим профилем, служат для передачи от эмитента подтверждения владения полномочиями на использование INR, описанных в сертификате. Этот документ содержит нормативную спецификацию синтаксиса сертификатов и списков отзыва (CRL2) в инфраструктуре открытых ключей ресурсов (RPKI3). Документ также задает профили для формата запросов сертификатов и процедуру проверки сертификаттранов пути Relying Party RPKI.

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

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

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

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

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

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

Этот документ определяет стандартный профиль сертификатов X.509, используемых для проверки заявлений о «праве использования» (right-of-use) ресурсов INR, т. е. адресов IP и номеров автономных систем (AS6). Такие сертификаты называют «сертификатами ресурсов» (resource certificate). Сертификатами ресурсов являются сертификаты, соответствующие профилю PKIX [RFC5280], а также ограничениям, заданным в этом профиле. Сертификат ресурса свидетельствует о том, эмитент предоставил субъекту «право использования» перечисленного множества адресов IP и/или номеров AS.

Этот документ ссылается на раздел 7 документа «Certificate Policy (CP) for the Resource Public Key Infrastructure (RPKI)» [RFC6484]. Это неотъемлемая часть политики и нормативная спецификация для синтаксиса сертификатов и списков отзыва (CRL), используемых в RPKI. Документ также задает профили для формата запросов сертификатов и процедуры проверки пригодности пути сертификации зависимыми сторонами (RP7) RPKI.

Сертификаты ресурсов будут применяться в соответствии с политикой сертификации RPKI (CP8) [RFC6484]. Они выпускаются организациями, которые назначают и/или выделяют значения INR, и, таким образом RPKI согласуется в функцией распределения INR общего пользования. При выделении или присваивании INR регистратором некому объекту это выделение может быть описано связанным с ним сертификатом ресурса. Этот сертификат выпускается регистратором и ключ сертификата субъекта привязывается к INR, указанным в сертификате. Одно или два нормативных расширения (IP Address Delegation или AS Identifier Delegation Extensions [RFC3779]) перечисляют значения INR, выделенные или назначенные этому субъекту эмитентом.

Проверка пригодности сертификата ресурса в RP (RP) выполняется в соответствии с описанием в параграфе 7.1. Эта процедура отличается от описанной в разделе 6 [RFC5280]:

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

  • требуется подтверждение соответствия открытого ключа между эмитентами CRL и сертификата ресурса;

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

Этот профиль определяет поля сертификата ресурса, которые должны присутствовать, чтобы сертификат считался пригодным. Любые расширения, не указанные явно, должны отсутствовать. Такие же правила применяются для CRL, используемых в RPKI, которые тоже «профилируются» данным документом. Удостоверяющие центры (CA9), выполняющие правила RPKI CP, должны выпускать сертификаты и CRL, соответствующие данному профилю.

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

Предполагается знакомство читателя с концепциями и терминами, описанными в документах «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile» [RFC5280] и «X.509 Extensions for IP Addresses and AS Identifiers» [RFC3779].

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

2. Описание ресурсов в сертификатах

Схема для описания связи между субъектом сертификата и INR, контролируемым в настоящее время этим субъектом, приведена в [RFC3779]. Данный профиль вносит дополнительные требования:

  • каждый сертификат ресурса должен содержать расширение IP Address Delegation или Autonomous System Identifier Delegation (возможно, оба);

  • эти расширения должны быть помечены как критические;

  • для поля расширения должен использоваться канонический формат описания INR с сортировкой, максимально охватываемым диапазоном и максимальной маской префикса в соответствии с определением [RFC3779] (за исключением случаев использования конструкции inherit).

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

3. Сертификаты конечных элементов и функции подписи в RPKI

Как отмечено в [RFC6480], основным назначением сертификатов конечных элементов (EE10) в RPKI является проверка пригодности подписанных объектов, относящихся к использованию INR, описанных в сертификате (например, ROA11 и манифестов).

Секретный ключ, связанный с EE, используется для подписывания одного объекта RPKI (т. е. сертификат EE используется для проверки пригодности единственного объекта). Сертификат EE встраивается в объект как часть структуры CMS signed-data [RFC6488]. Поскольку имеется взаимно однозначное соответствие между сертификатом EE и подписанным объектом, отзыв сертификаты фактически отзывает подписанный объект.

Сертификат EE может использоваться для проверки пригодности последовательности подписанных объектов, где каждый подписанный объект переписывает предыдущий экземпляр подписанного объекта в репозитории точки публикации так, что публикуется только один экземпляр подписанного объекта в любой момент времени (например, сертификат EE может быть использован для подписывания последовательности манифестов [RFC6486]). Такие сертификаты EE называют сертификатами «последовательного использования» (sequential use).

Сертификаты EE, используемые для проверки пригодности единственного экземпляра подписанного объекта и не применяемые в дальнейшем или в другом контексте, называют одноразовыми сертификатами (one-time-use).

4. Сертификаты ресурсов

Сертификат ресурса является пригодным к применению сертификатом открытого ключа X.509, совместимым с профилем PKIX [RFC5280] и содержащим поля, перечисленные в этом разделе. Отличия от [RFC5280] отмечены ниже.

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

4.1. Версия

Поскольку сертификаты ресурсов являются сертификатами X.509 версии 3, поле version должно указывать версию 3 (т. е. поле должно иметь значение 2).

RP должны отказываться от обработки сертификатов версий 1 или 2 (в отличие от [RFC5280]).

4.2. Порядковый номер

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

4.3. Алгоритм подписи

Алгоритм, используемый в этом профиле, задан в [RFC6485].

4.4. Эмитент

В этом поле указывается пригодное к использованию отличительное имя X.501.

Имя эмитента должно содержать один экземпляр атрибута CommonName и может также включать один экземпляр атрибута serialNumber. При наличии обоих атрибутов рекомендуется представлять их в форме множества (set). Атрибут CommonName должен кодироваться с использованием типа ASN.1 PrintableString [X.680]. Имя эмитента не предназначено описывать отождествление эмитента.

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

4.5. Субъект

Значением этого поля является пригодное для использования отличительное имя X.501 [RFC4514], для которого действуют ограничения, указанные для имени эмитента.

В RPKI имя субъекта определяется эмитентом, а не предлагается субъектом [RFC6481]. Каждый различающийся подчиненный CA и EE, сертифицируемые данным эмитентом, должны идентифицироваться с использованием имени субъекта, которое уникально в рамках эмитента. В этом контексте «различающийся» определяется, как элемент и данный открытый ключ. Эмитентам следует использовать другое имя субъекта, если ключевая пара для него меняется (т. е. когда CA выпускает сертификат в процессе замены ключа субъекта). Имя субъекта не предназначено описывать отождествление этого субъекта.

4.6. Срок действия

Срок действия субъекта представляется последовательностью (SEQUENCE) двух дат — начала (notBefore) и завершения (notAfter) срока действия сертификата.

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

4.6.1. notBefore

В качестве значения notBefore следует указывать время не раньше момента создания сертификата.

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

4.6.2. notAfter

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

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

4.7. Информация об открытом ключе субъекта

Используемый в этом профиле алгоритм указан в [RFC6485].

4.8. Расширения сертификатов ресурса

Описанные ниже расширения X.509 v3 должны присутствовать в соответствующих этой спецификации сертификатах ресурсов, если явно не указано иное. Использующая сертификаты система должна отвергать сертификаты с неопознанным критическим расширением, не опознанные некритические расширения можно игнорировать [RFC5280].

4.8.1. Базовые ограничения

Поле расширения Basic Constraints является критическим в данном профиле и должно присутствовать в сертификатах, где субъектом является CA. В сертификатах других субъектов это расширение недопустимо.

Установка логического значения cA определяется эмитентом сертификата.

Поле Path Length Constraint не задано для сертификатов RPKI и его присутствие недопустимо.

4.8.2. Идентификатор ключа субъекта

Это расширение должно присутствовать во всех сертификатах ресурсов. Расширение не является критическим.

Key Identifier в сертификатах ресурсов представляет собой 160-битовых хэш SHA-1 для DER-представления ASN.1 битовой строки Subject Public Key, как описано в параграфе 4.2.1.2 [RFC5280].

4.8.3. Идентификатор ключа УЦ

Это расширение должно присутствовать во всех сертификатах ресурсов, за исключением CA, выпускающих «самоподписанные» (self-signed) сертификаты. При подписывании своих (self-signed) сертификатов CA может включить это расширение и установить для него значение, эквивалентное Subject Key Identifier. Включение полей authorityCertIssuer и authorityCertSerialNumber недопустимо. Расширение не является критическим.

Key Identifier в сертификатах ресурсов представляет собой 160-битовых хэш SHA-1 для DER-представления ASN.1 битовой строки открытого ключа эмитента, как описано в параграфе 4.2.1.1 [RFC5280].

4.8.4. Применение ключа

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

В сертификатах, выпускаемых только для УЦ, биты keyCertSign и CRLSign устанавливаются (TRUE), а прочие биты должны отличаться от TRUE.

В сертификатах EE бит digitalSignature должен быть установлен (TRUE) и это должен быть единственный бит со значением TRUE.

4.8.5. Расширенное применение ключа

Расширение EKU12 недопустимо включать в сертификаты CA в RPKI. Это расширение недопустимо также включать в сертификаты EE, используемые для проверки пригодности объектов RPKI (например, ROA или манифестов). Расширение недопустимо указывать критическим.

Расширение EKU может присутствовать в сертификатах EE, выпущенных для маршрутизаторов и других устройств. Разрешенные значения идентификаторов EKU OID будут заданы в документах Standards Track RFC, выпускаемых другими рабочими группами IETF, которые принимают профиль RPKI и указывают требования конкретных приложений, связанные с использованием таких EKU.

4.8.6. Точки распространения CRL

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

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

Расширение CRLDP13 указывает места размещения CRL, связанных с выпущенными эмитентом сертификатами. RPKI использует для идентификации объекта форму URI [RFC3986]. Предпочтительным механизмом доступа к URI является одиночный идентификатор rsync URI («rsync://») [RFC5781], который указывает единый (включительный) CRL для каждого эмитента.

В этом профиле издатель сертификатов является также эмитентом CRL, поэтому поле CRLIssuer должно опускаться, а поле distributionPoint должно присутствовать. Поле Reasons должно опускаться.

В distributionPoint должно включаться поле fullName, а включение поля nameRelativeToCRLIssuer недопустимо. Поле generalName должно иметь тип URI.

Последовательность значений distributionPoint должна включать единственное поле DistributionPoint, которое может содержать более одного значения URI. Идентификатор rsync URI [RFC5781] должен присутствовать в DistributionPoint и должен указывать самый «свежий» экземпляр CRL данного эмитента. Другие формы URI могут использоваться в дополнение к rsync URI, представляя дополнительные механизмы доступа к этому CRL.

4.8.7. Доступ к информации об УЦ

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

Данный профиль использует для идентификации объектов форму URI. Предпочтительным механизмом доступа к URI является rsync и идентификатор rsync URI [RFC5781] должен задаваться с accessMethod = id-ad-caIssuers. Значение URI должно указывать точку публикации сертификата, в котором эмитент (Issuer) является субъектом (непосредственный «вышестоящий» сертификат для эмитента). Другие accessMethod URI, указывающие на этот же объект, могут включаться в последовательность значений данного расширения.

CA должен использовать постоянную схему URL для выпускаемых им сертификатов CA [RFC6481]. Это предполагает замену вновь выпущенным сертификатом ранее имевшейся версии сертификата (для того же объекта) в репозитории. Таким образом, сертификаты, «подчиненные» выпущенному заново сертификату (CA), могут поддерживать постоянный указатель на расширение AIA14 и, следовательно, их не требуется выпускать заново при смене сертификата.

4.8.8. Доступ к информации о субъекте

В контексте RPKI расширение SIA15 указывает точку публикации продукции, подписанной субъектом сертификата.

4.8.8.1. SIA для сертификатов CA

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

Это расширение должно использовать accessMethod = id-ad-caRepository с accessLocation в форме URI, который должен указывать rsync URI [RFC5781]. Этот идентификатор URI указывает на каталог, содержащий все опубликованные материалы, выпущенные данным CA, т. е. все пригодные сертификаты CA, опубликованные сертификаты EE, текущий список CRL, манифест и подписанные объекты, пригодность которых была проверена с использованием сертификатов EE, выпущенных данным CA [RFC6481]. Могут присутствовать другие элементы accessDescription с accessMethod = id-ad-caRepository. В таких случаях значения accessLocation описывают поддерживаемые URI дополнительных механизмов доступа к тому же каталогу. Порядок URI в этой последовательности accessDescription отражает относительные предпочтения CA в части методов доступа, которые могут использоваться RP (первый элемент является наиболее предпочтительным для CA).

Это расширение должно иметь экземпляр AccessDescription с accessMethod = id-ad-rpkiManifest,

         id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
         id-ad-rpkiManifest OBJECT IDENTIFIER ::= { id-ad 10 }

и формой rsync URI [RFC5781] для accessLocation. Идентификатор URI указывает на манифест CA для опубликованных объектов [RFC6486] как URL объекта. Могут существовать другие элементы accessDescription для id-ad-rpkiManifest accessMethod, где значение accessLocation указывает дополнительные механизмы доступа к тому же манифесту.

4.8.8.2. SIA для сертификатов EE

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

Это расширение должно иметь экземпляр accessMethod = id-ad-signedObject,

         id-ad-signedObject OBJECT IDENTIFIER ::= { id-ad 11 }

с accessLocation в форме URI, который должен включать rsync URI [RFC5781]. Этот идентификатор URI указывает на подписанный объект, пригодность которого проверена с использованием сертификата EE [RFC6481]. Могут существовать другие элементы accessDescription для id-ad-signedObject accessMethod, где значение accessLocation указывает URI дополнительного механизма доступа к тому же объекту с упорядочением по относительным предпочтениям EE в части выбора механизмов доступа.

Другие accessMethod недопустимо использовать для SIA сертификатов EE.

4.8.9. Политика сертификации

Это расширение должно присутствовать и должно помечаться как критическое. Расширение должно включать в точности одно правило, как указано в RPKI CP [RFC6484]

4.8.10. Ресурсы IP

Одно или оба расширения IP Resources и AS Resources должны присутствовать во всех сертификатах RPKI. Включенное расширение должно быть помечено как критическое.

Это расширение содержит список адресных ресурсов IP [RFC3779]. Значение может указывать наследуемый (inherit) элемент для конкретного значения AFI16. В контексте сертификатов ресурсов, описывающих числовые ресурсы для использования в публичной сети Internet, недопустимо использование значение SAFI17.

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

4.8.11. Ресурсы AS

Одно или оба расширения IP Resources и AS Resources должны присутствовать во всех сертификатах RPKI. Включенное расширение должно быть помечено как критическое.

Это расширение содержит список номеров AS [RFC3779] или может задавать наследуемый элемент. Идентификаторы RDI18 не поддерживаются этим профилем и использование их недопустимо.

Это расширение должно задавать непустое множество номеров AS или использовать значение inherit для индикации того, что набор номеров AS для этого сертификата наследуется от эмитента сертификата.

5. Списки отозванных сертификатов ресурсов

Каждый CA должен выпускать CRL версии 2, соответствующие [RFC5280]. От RP не требуется обрабатывать CRL версии 1 (в отличие от [RFC5280]). Эмитентом CRL является CA. В CRL, соответствующие данному профилю, недопустимо включать непрямые ((Indirect) или инкрементные (Delta) CRL. Областью действия каждого CRL должны быть все сертификаты, выпущенные данным CA.

Имя эмитента указывается в соответствии с параграфом 4.4.

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

Алгоритм, используемый в CRL, выпускаемых в соответствии с данным профилем, описан в [RFC6485].

Содержимое CRL представляет собой список сертификатов с незавершенным сроком действия, которые были отозваны CA.

RPKI CA должны включать два расширения — Authority Key Identifier и CRL Number — в каждый выпускаемый список CRL. RP должны быть готовы обрабатывать CRL с этими расширениями. Другие расширения CRL не разрешаются. Каждое из упомянутых выше расширений недопустимо включать более одного раза19.

Для каждого отозванного сертификата ресурсов должны присутствовать только поле Serial Number и Revocation Date, использование других полей недопустимо. В этом профиле не поддерживаются расширения CRL и включение таких расширений недопустимо.

6. Запросы сертификата ресурса

Для запроса сертификата может использоваться формат PKCS#10 или CRMF20. CA должны поддерживать выпуск сертификатов по запросам PKCS#10 и могут поддерживать запросы CRMF.

Отметим, что для этого профиля не определяется отклик на запрос сертификата. Для запросов сертификатов CA удостоверяющий центр (CA) помещает сертификат ресурса в репозиторий, как указано в [RFC6484]. Для запроса сертификатов EE отклик не определен.

6.1. Профиль PCKS#10

Этот профиль уточняет спецификацию [RFC2986] в части сертификатов ресурсов. Объект Certificate Request Message, отформатированный в соответствии с PKCS#10, передается CA в качестве первого шага по выпуску сертификата.

CA при выпуске сертификата может изменить любое поле запроса за исключением SubjectPublicKeyinfo и запроса расширения SIA.

6.1.1. Поля шаблона запроса сертификата ресурса PKCS#10

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

Version

Это поле является обязательным и должно иметь значение 0.

Subject

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

SubjectPublicKeyInfo

Это поле задает открытый ключ субъекта и алгоритм, который используется с этим ключом. Используемый данным профилем алгоритм задан в [RFC6485].

Attributes

[RFC2986] определяет поле атрибутов, как пары «ключ-значение», где ключом служит идентификатор объекта (OID), а структура значения определяется этим ключом.

Единственным атрибутом в этом профиле является атрибут extensionRequest, определенный в [RFC2985]. Этот атрибут содержит расширения сертификата. Профиль для расширения в запросах сертификатов указан в параграфе 6.3.

Этот профиль задает дополнительное ограничение на поля, которые могут присутствовать в объекте CertificationRequest:

signatureAlgorithm

Значение signatureAlgorithm задано в [RFC6485].

6.2. Профиль CRMF

Этот профиль уточняет спецификацию CRMF [RFC4211] в части сертификатов ресурсов. Объект Certificate Request Message в формате CRMF передается CA в качестве первого шага по выпуску сертификата.

CA при выпуске сертификата может изменить любое поле запроса за исключением SubjectPublicKeyinfo и запроса расширения SIA.

6.2.1. Поля шаблона запроса сертификата CRMF

Этот профиль определяет приведенные ниже дополнительные ограничения на поля, которые могут включаться в Certificate Request Template.

version

Это поле следует опускать. При наличии этого поля оно должно указывать запрос сертификата версии 3.

serialNumber

Это поле должно быть опущено.

signingAlgorithm

Это поле должно быть опущено.

issuer

Это поле должно быть опущено в данном профиле.

Validity

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

Subject

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

PublicKey

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

extensions

Профиль для расширений в запросах сертификатов описан в параграфе 6.3.

6.2.2. Управляющие поля запросов сертификата ресурса

Данный профиль поддерживает дополнительное управляющее поле, приведенное ниже.

Authenticator Control

Предполагаемая модель аутентификации субъекта является «долгосрочной» (long term) и рекомендации [RFC4211] предлагают использовать поле Authenticator Control.

6.3. Атрибуты расширения сертификата в запросах сертификатов

Ниже перечислены расширения, которые могут присутствовать в запросах сертификатов PKCS#10 или CRMF. Появление каких-либо иных расширений в Certificate Request недопустимо. Этот профиль накладывает на расширения некоторые дополнительные ограничения, перечисленные ниже.

BasicConstraints

При отсутствии этого расширения CA будет выпускать сертификат EE (и тоже без расширения BasicConstraints).

Поле pathLengthConstraint не поддерживается данным профилем и должно быть опущено.

CA может следовать установленному биту cA = TRUE (CA Certificate Request). Установленный бит показывает, что субъект запрашивает сертификат CA.

CA должен следовать сброшенному биту cA = FALSE (EE Certificate Request) и в этом случае соответствующий сертификат EE не будет включать расширения Basic Constraints.

KeyUsage

CA может следовать расширениям KeyUsage со значениями keyCertSign и cRLSign, если они указаны и согласуются с полем BasicConstraints SubjectType, когда оно задано.

ExtendedKeyUsage

CA может следовать расширениям ExtendedKeyUsage в запросах сертификатов EE, выпускаемых для маршрутизаторов и других устройств, которые согласуются со значениями, заданными в документах Standards Track RFC, принимающих этот профиль и указывающих специфические для приложения требования, служащие мотивом использования таких EKU.23

SubjectInformationAccess

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

7. Проверка пригодности сертификата ресурса

В этом разделе описана процедура проверки пригодности сертификата ресурсов, уточняющая базовую процедуру, которая описана в разделе 6 [RFC5280].

7.1. Проверка пригодности расширения

Расширения IP Resources и AS Resources [RFC3779] являются критическими для INR. Они используют представление ASN.1 для адресных диапазонов IPv4 и IPv6 а также номеров AS.

Пригодные для использования сертификаты ресурсов должны иметь расширение с корректными адресами IP и/или номерами AS. Для проверки пригодности сертификата ресурса пригодность расширения также должна проверяться. Процедура проверки основана на приведенных ниже правилах сравнения наборов ресурсов.

more specific — более специфический (узкий)

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

equal — равный

Два заданных непрерывных диапазона адресов IP или номеров AS, обозначенные A и B, считаются равными (equal), если диапазон A включает в точности такой же набор адресов IP или номеров AS, что и диапазон B. Определение наследования (inheritance) в [RFC3779] эквивалентно данному определению равенства.

encompass — включающий

Для двух данных наборов адресов IP или номеров AS, обозначенных X и Y, X «включает» в себя (encompasses) Y, если каждый непрерывный диапазон адресов IP или номеров AS в наборе Y, является более узким или равным непрерывному диапазону в наборе X.24

Проверка пригодности расширения сертификата ресурса в контексте пути сертификации (см. параграф 7.2) означает, что для каждой пары сертификатов в пути сертификации (сертификаты x и x + 1) числовые ресурсы, описанные в сертификате x, включают числовые ресурсы, описанные в сертификате x + 1, а ресурсы, описанные в информации о доверенной точке привязки включают ресурсы, описанные в первом сертификате пути сертификации.

7.2. Проверка пригодности пути сертификации ресурса

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

  1. для всех x в {1, …, n-1} субъект сертификата x является эмитентом сертификата x+1;

  2. сертификат 1 выпущен доверенной привязкой (trust anchor);

  3. сертификат n является проверяемым на пригодность сертификатом;

  4. для всех x в {1, …, n} сертификат x является пригодным для применения (корректным).

Проверка пригодности сертификата включает проверку выполнения всех перечисленных ниже условий в дополнение к критериям проверки пригодности пути сертификации из раздела 6 [RFC5280].

  1. Сертификат может быть проверен с использованием открытого ключа эмитента и алгоритма подписи.

  2. Текущее время попадает в интервал действия сертификата.

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

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

  5. Эмитент не отозвал сертификат. Отозванные сертификаты идентифицируются порядковыми номерами в текущем CRL эмитента, как определено в CRLDP сертификата. Сам CRL пригоден для использования и открытый ключ, используемый для проверки подписи в CRL, совпадает с открытым ключом, используемым для проверки самого сертификата.

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

  7. Путь сертификации начинается с сертификата, выпущенного доверенной привязкой (trust anchor) и имеется цепочка подписей по пути сертификации, где субъект сертификата x на этом пути соответствует эмитенту сертификата x+1 этого же пути, а открытый ключ в сертификате x позволяет проверить значение подписи в сертификате x+1.

Алгоритм проверки пригодности сертификата может выполнять приведенные выше тесты в любом порядке.

Сертификаты и CRL, используемые в этом процессе, могут быть найдены в поддерживаемом локально кэше, который регулярно синхронизируется со структурой распределенных репозиториев публикации [RFC6481].

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

8. Замечания по устройству

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

Расширения в сертификатах

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

Удостоверяющие центры (CA) и значения ключей

Данный профиль использует определение экземпляра CA, как комбинацию именованного объекта (сущности) и пары ключей. В рамках этого определения экземпляр CA не может сменить свою ключевую пару. Однако объект может создать новый экземпляр CA с новой парой ключей и перенести всю подписанную подчиненную продукцию в этот новый CA [RFC6489].

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

Область действия CRL и значения ключей

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

Точки публикации репозиториев

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

Имена субъектов

Этот профиль задает уникальность имен субъектов в рамках каждого эмитента и не требует уникальности имен в глобальном масштабе (в части гарантии уникальности). Это обусловлено самой природой RPKI, которая представляет собой распределенную систему PKI, предполагающую отсутствие у удостоверяющих центров возможностей координации простого пространства имен с уникальностью в масштабе всей RPKI без применения каких-либо внешних зависимостей, оказывающих критическое влияние на работу системы в целом. УЦ предлагается использовать процедуры генерации имен субъектов, минимизирующие вероятность совпадения имен.

Одним из способов решения этой задачи является использование CA практики именования субъектов с включением компоненты CommonName отличительного имени (DistinguishedName) в качестве постоянного значения для данного элемента, который является субъектом выпускаемых CA сертификатом, и установки для компоненты serialNumber отличительного имения значения, получаемого из хешированного значения открытого ключа данного субъекта.

Если CA выбирает отказ от использования компоненты serialNumber в DistinguishedName, ему следует рассмотреть вариант создания имен CommonName, содержащих в себе случайную компоненту со значительным (более 40 битов) объемом энтропии. Ниже приведены некоторые не нормативные рекомендации.

  1. Хэш открытого ключа субъекта (представленного в формате ASCII HEX).

    Пример: cn="999d99d564de366a29cd8468c45ede1848e2cc14"
  2. Универсальный уникальный идентификатор (UUID27) [RFC4122].

    Пример: cn="6437d442-6fb5-49ba-bbdb-19c260652098"
  3. Случайная строка в формате ASCII HEX размером не менее 20 символов.

    Пример: cn="0f8fcc28e3be4869bc5f8fa114db05e1"

    (строка из 20 символов ASCII HEX будет содержать 80 битов энтропии).

  4. Ключ внутренней базы данных или идентификатор абонента в комбинации с одним из перечисленных выше вариантов.

    Пример: cn="<DBkey1> (6437d442-6fb5-49ba-bbdb-19c2606520980)"

    CA может захотеть обеспечить себе возможность извлекать ключ базы данных или идентификатор абонента из commonName. Поскольку возможность разбора commonName нужна только эмитенту, ключ базы данных и источник энтропии (например, UUID) могут быть разделены тем или иным способом без нарушения требований для PrintableString. Разделителем может служить пробел, скобки, дефис, дробная черта, кавычки и т. п.

9. Вопросы, связанные со сменой профиля

Этот профиль требует от RP отвергать сертификаты и CRL, которые не соответствуют данному профилю (в оставшейся части этого раздела термин сертификат будет использоваться для обозначения как самих сертификатов, так и списков CRL). В число отвергаемых входят сертификаты с недозволенными расширениями, который в остальном пригодны для использования [RFC5280]. Это означает, что любое изменение профиля (например, расширения, дозволенные атрибуты или необязательные поля, представление полей) для сертификатов, используемых в RPKI не будет совместимо с прежними версиями. В обычном контексте PKI такое ограничение будет вызывать серьезные проблемы. В RPKI существует несколько факторов, которые минимизируют сложности этого типа.

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

Можно предположить, что флаг критичности (critical flag) в расширениях сертификатов X.509 может использоваться для смягчения этой проблемы. Однако такое решение не будет полным и не избавит от проблем при добавлении новых критичных расширений, связанных с безопасностью (это обусловлено тем, что расширения должны поддерживаться повсеместно, всеми CA и RP). Кроме того, хотя некоторые стандартные расширения можно помечать как критические или некритические по усмотрению эмитента, такое свойство присуще не всем расширениям и некоторые стандартные расширения никогда не бывают критическими. Таким образом, флаг критичности не обеспечивает решения проблемы.

В типичных системах PKI имеется несколько CA и много RP. Однако в RPKI каждый CA является одновременно и RP. Таким образом, набор объектов, которые потребуется изменить для выпуска сертификатов в новом формате, совпадает с набором объектов, которые потребуется изменить для восприятия этих новых сертификатов. Это говорит о том, что при внесении изменений требуется тесная координация CA/RP. На практике для этого наблюдения имеется важное исключение. Предполагается, что небольшие ISP28 и владельцы провайдеро-независимых адресов используют услуги CA, предлагаемые региональными регистраторами (RIR29) и возможно крупными ISP. Это снижает число разных реализаций CA и упрощает внесение изменений в систему выдачи сертификатов. Представляется очевидным, что на этих объектах будут также использоваться программы RP, предоставляемые их поставщиком услуг CA, и это снижает число разных реализаций RP. Отметим также, что многие мелкие ISP (и владельцы провайдеро-независимых адресов) используют принятый по умолчанию маршрут и им не требуется выполнять проверку RP для данных RPKI (т. е. эти объекты не являются RP).

Широкодоступные программы PKI RP не кэшируют большое число сертификатов, что важно для стратегии RPKI. Они не обрабатывают манифесты и структуры данных ROA, являющиеся важными элементами системы репозиториев RPKI. Опыт показывает, что такие программы плохо работают с данными о статусе отзыва. По этой причине имеющиеся программы RP не подходят для RPKI, хотя некоторые открытые программные средства (например, OpenSSL и cryptlib) можно использовать в качестве компонент реализации RPKI RP. Таким образом, предполагается, что RP будут использовать программы, разработанные специально для среды RPKI и доступные из небольшого числа открытых источников. Такие программы уже предлагают несколько RIR и две компании. Таким образом, вполне возможна координация действий небольшого числа разработчиков программ.

Если профиль сертификата ресурсов будет измене (например, путем добавления новых расширений, изменения разрешенного набора атрибутов имен или представления этих атрибутов), для изменения развернутой системы RPKI будет применяться описанная ниже процедура. Эта модель аналогична описанной в [RPKI-ALG], но проще ее.

Новый документ будет выпускаться как обновление данного RFC. Политика CP для RPKI [RFC6484] будет обновлена в соответствии с новым профилем сертификата. Новая CP будет определять новый идентификатор политики (OID) для сертификатов, выпущенных с использованием нового профиля. Обновленная CP также будет определять расписание перехода на новых формат сертификатов и CRL. Этот расписание будет определять 3 фазы и связанные с ними даты.

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

  2. В течение фазы 2 CA должны выпускать сертификаты с новым профилем и эти сертификаты должны сосуществовать с сертификатами старого формата (CA будут пока продолжать выпуск сертификатом со старым форматом и OID). Старые и новые сертификаты должны быть идентичными, за исключением OID политики, а также новых расширений, представлений и т. п. Новые сертификаты и связанные с ними подписанные объекты будут сосуществовать со старыми в системе репозиториев RPKI на этой фазе аналогично тому, как это описано для смены алгоритма RPKI в [RPKI-ALG]. RP могут применять старые или новые сертификаты при обработке подписанных объектов, получаемых из репозиториев RPKI. В этой фазе RP, решившие обрабатывать оба формата, будут получать одинаковые значения для всех полей сертификатов, которые присутствуют в старом и новом формате. Таким образом, если любой из форматов сертификата может быть проверен, RP будет воспринимать данные из этого сертификата. Это позволяет CA начать выпуск сертификатов нового формата до того, как все RP будут готовы его обрабатывать.

  3. В начале фазы 3 все RP должны обеспечивать возможность обработки сертификатов нового формата. В этой фазе CA будут выпускать новые сертификаты с использованием только нового формата. Сертификаты, выпущенные со старым OID будут заменены сертификатами с OID новой политики. От системы репозиториев больше не требуется обеспечивать соответствие старых и новых сертификатов.

В конце фазы 3 все сертификаты со старыми OID будут заменены. RFC с профилем сертификата ресурсов будет заменен для прекращения поддержки старого формата сертификатов, а политика CP будет заменена для удаления ссылки на OID старой политики и RFC со старым профилем сертификатов. Система перейдет в новое стабильное состояние.

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

Разделы «Вопросы безопасности» в [RFC5280] и [RFC3779] применимы к сертификатам ресурсов. Разделы «Вопросы безопасности» в [RFC2986] и [RFC4211] применимы к запросам сертификатов ресурсов.

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

Этот профиль требует совпадения ключа, использованного для подписи при выпуске сертификата, с ключом, используемым для подписи CRL с отзывами сертификатов. Это предполагает, что путь сертификации, используемый для проверки пригодности подписи сертификата совпадает с путем, используемым для проверки пригодности подписи CRL, который может отозвать сертификат. Отмечено, что это ограничение жестче требуемого в X.509 PKI и может возникать риск появления реализации проверки пути, которая сможет использовать разные пути для проверки сертификата и соответствующего CRL. Если в RPKI возникает конфликт имен субъектов в результате отступления CA от приведенных здесь рекомендаций по обеспечению достаточной энтропии в именах субъектов и это происходит в ситуации, когда RP использует реализацию, в которой создание пути проверки также не соответствует данному профилю RPKI, конфликт имен субъектов может привести RP в ложному заключению об отзыве сертификата.

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

Авторы хотели бы отметить особо ценный вклад Stephen Kent в рецензирование этого документа и подготовку множества включенных в документ фрагментов текста. Авторы также благодарят Sandy Murphy, Robert Kisteleki, Randy Bush, Russ Housley, Ricardo Patara и Rob Austein за подготовку и последующее рецензирование документа. В документе также отражены комментарии, полученные от Roque Gagliano, Sean Turner и David Cooper.

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

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

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2986] Nystrom, M. and B. Kaliski, «PKCS #10: Certification Request Syntax Specification Version 1.7», RFC 2986, November 2000.

[RFC3779] Lynn, C., Kent, S., and K. Seo, «X.509 Extensions for IP Addresses and AS Identifiers», RFC 3779, June 2004.

[RFC4211] Schaad, J., «Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)», RFC 4211, September 2005.

[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 5280, May 2008.

[RFC5781] Weiler, S., Ward, D., and R. Housley, «The rsync URI Scheme», RFC 5781, February 2010.

[RFC6484] Kent, S., Kong, D., Seo, K., and R. Watro, «Certificate Policy (CP) for the Resource Public Key Infrastructure (RPKI)», BCP 173, RFC 6484, February 2012.

[RFC6485] Huston, G., «The Profile for Algorithms and Key Sizes for Use in the Resource Public Key Infrastructure (RPKI)», RFC 6485, February 2012.

[X.509] ITU-T, «Recommendation X.509: The Directory — Authentication Framework», 2000.

[X.680] ITU-T, «Recommendation X.680 (2002) | ISO/IEC 8824-1:2002, Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation», 2002.

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

[RFC2985] Nystrom, M. and B. Kaliski, «PKCS #9: Selected Object Classes and Attribute Types Version 2.0», RFC 2985, November 2000.

[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, «Uniform Resource Identifier (URI): Generic Syntax», STD 66, RFC 3986, January 2005.

[RFC4122] Leach, P., Mealling, M., and R. Salz, «A Universally Unique IDentifier (UUID) URN Namespace», RFC 4122, July 2005.

[RFC4514] Zeilenga, K., «Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names», RFC 4514, June 2006.

[RFC6480] Lepinski, M. and S. Kent, «An Infrastructure to Support Secure Internet Routing», RFC 6480, February 2012.

[RFC6481] Huston, G., Loomans, R., and G. Michaelson, «A Profile for Resource Certificate Repository Structure», RFC 6481, February 2012.

[RFC6486] Austein, R., Huston, G., Kent, S., and M. Lepinski, «Manifests for the Resource Public Key Infrastructure (RPKI)», RFC 6486, February 2012.

[RFC6488] Lepinski, M., Chi, A., and S. Kent, «Signed Object Template for the Resource Public Key Infrastructure (RPKI)», RFC 6488, February 2012.

[RFC6489] Huston, G., Michaelson, G., and S. Kent, «Certification Authority (CA) Key Rollover in the Resource Public Key Infrastructure (RPKI)», BCP 174, RFC 6489, February 2012.

[RPKI-ALG] Gagliano, R., Kent, S., and S. Turner, «Algorithm Agility Procedure for RPKI», Work in Progress30, November 2011.

Приложение A. Пример сертификата ресурса

Ниже приведен пример сертификата ресурса.

   Certificate Name: 9JfgAEcq7Q-47IwMC5CJIJr6EJs.cer
   Data:
     Version: 3 (0x2)
     Serial: 1500 (0x5dc)
     Signature Algorithm: SHA256WithRSAEncryption
     Issuer: CN=APNIC Production-CVPQSgUkLy7pOXdNeVWGvnFX_0s
     Validity
      Not Before: Oct 25 12:50:00 2008 GMT
       Not After : Jan 31 00:00:00 2010 GMT
     Subject: CN=A91872ED
     Subject Public Key Info:
       Public Key Algorithm: rsaEncryption
       RSA Public Key: (2048 bit)
       Modulus (2048 bit):
         00:bb:fb:4a:af:a4:b9:dc:d0:fa:6f:67:cc:27:39:
         34:d1:80:40:37:de:88:d1:64:a2:f1:b3:fa:c6:7f:
         bb:51:df:e1:c7:13:92:c3:c8:a2:aa:8c:d1:11:b3:
         aa:99:c0:ac:54:d3:65:83:c6:13:bf:0d:9f:33:2d:
         39:9f:ab:5f:cd:a3:e9:a1:fb:80:7d:1d:d0:2b:48:
         a5:55:e6:24:1f:06:41:35:1d:00:da:1f:99:85:13:
         26:39:24:c5:9a:81:15:98:fb:5f:f9:84:38:e5:d6:
         70:ce:5a:02:ca:dd:61:85:b3:43:2d:0b:35:d5:91:
         98:9d:da:1e:0f:c2:f6:97:b7:97:3e:e6:fc:c1:c4:
         3f:30:c4:81:03:25:99:09:4c:e2:4a:85:e7:46:4b:
         60:63:02:43:46:51:4d:ed:fd:a1:06:84:f1:4e:98:
         32:da:27:ee:80:82:d4:6b:cf:31:ea:21:af:6f:bd:
         70:34:e9:3f:d7:e4:24:cd:b8:e0:0f:8e:80:eb:11:
         1f:bc:c5:7e:05:8e:5c:7b:96:26:f8:2c:17:30:7d:
         08:9e:a4:72:66:f5:ca:23:2b:f2:ce:54:ec:4d:d9:
         d9:81:72:80:19:95:57:da:91:00:d9:b1:e8:8c:33:
         4a:9d:3c:4a:94:bf:74:4c:30:72:9b:1e:f5:8b:00:
         4d:e3
       Exponent: 65537 (0x10001)
     X509v3 extensions:
       X509v3 Subject Key Identifier:
         F4:97:E0:00:47:2A:ED:0F:B8:EC:8C:0C:0B:90:89:
         20:9A:FA:10:9B
       X509v3 Authority Key Identifier:
         keyid:09:53:D0:4A:05:24:2F:2E:E9:39:77:4D:79:
         55:86:BE:71:57:FF:4B
       X509v3 Key Usage: critical
         Certificate Sign, CRL Sign
       X509v3 Basic Constraints: critical
         CA:TRUE
       X509v3 CRL Distribution Points:
         URI:rsync://rpki.apnic.net/repository/A3C38A24
             D60311DCAB08F31979BDBE39/CVPQSgUkLy7pOXdNe
             VWGvnFX_0s.crl
       Authority Information Access:
          CA Issuers - URI:rsync://rpki.apnic.net/repos
             itory/8BDFC7DED5FD11DCB14CF4B1A703F9B7/CVP
             QSgUkLy7pOXdNeVWGvnFX_0s.cer
       X509v3 Certificate Policies: critical
          Policy: 1.3.6.1.5.5.7.14.2
       Subject Information Access:
          CA Repository - URI:rsync://rpki.apnic.net/mem
              ber_repository/A91872ED/06A83982887911DD81
              3F432B2086D636/
          Manifest - URI:rsync://rpki.apnic.net/member_r
              epository/A91872ED/06A83982887911DD813F432
              B2086D636/9JfgAEcq7Q-47IwMC5CJIJr6EJs.mft
        sbgp-autonomousSysNum: critical
          Autonomous System Numbers:
            24021
            38610
            131072
            131074
        sbgp-ipAddrBlock: critical
          IPv4:
            203.133.248.0/22
            203.147.108.0/23
   Signature Algorithm: sha256WithRSAEncryption
       51:4c:77:e4:21:64:80:e9:35:30:20:9f:d8:4b:88:60:b8:1f:
       73:24:9d:b5:17:60:65:6a:28:cc:43:4b:68:97:ca:76:07:eb:
       dc:bd:a2:08:3c:8c:56:38:c6:0a:1e:a8:af:f5:b9:42:02:6b:
       77:e0:b1:1c:4a:88:e6:6f:b6:17:d3:59:41:d7:a0:62:86:59:
       29:79:26:76:34:d1:16:2d:75:05:cb:b2:99:bf:ca:c6:68:1b:
       b6:a9:b0:f4:43:2e:df:e3:7f:3c:b3:72:1a:99:fa:5d:94:a1:
       eb:57:9c:9a:2c:87:d6:40:32:c9:ff:a6:54:b8:91:87:fd:90:
       55:ef:12:3e:1e:2e:cf:c5:ea:c3:4c:09:62:4f:88:00:a0:7f:
       cd:67:83:bc:27:e1:74:2c:18:4e:3f:12:1d:ef:29:0f:e3:27:
       00:ce:14:eb:f0:01:f0:36:25:a2:33:a8:c6:2f:31:18:22:30:
       cf:ca:97:43:ed:84:75:53:ab:b7:6c:75:f7:2f:55:5c:2e:82:
       0a:be:91:59:bf:c9:06:ef:bb:b4:a2:71:9e:03:b1:25:8e:29:
       7a:30:88:66:b4:f2:16:6e:df:ad:78:ff:d3:b2:9c:29:48:e3:
       be:87:5c:fc:20:2b:df:da:ca:30:58:c3:04:c9:63:72:48:8c:
       0a:5f:97:71

Приложение B. Пример списка отозванных сертификатов

Ниже приведен пример списка отозванных сертификатов (CRL).

   CRL Name: q66IrWSGuBE7jqx8PAUHAlHCqRw.crl
   Data:
     Version: 2
     Signature Algorithm:
       Hash: SHA256, Encryption: RSA
     Issuer: CN=Demo Production APNIC CA - Not for real use,
       E=ca@apnic.net
     This Update: Thu Jul 27 06:30:34 2006 GMT
     Next Update: Fri Jul 28 06:30:34 2006 GMT
     Authority Key Identifier: Key Identifier:
       ab:ae:88:ad:64:86:b8:11:3b:8e:ac:7c:3c:05:
       07:02:51:c2:a9:1c
     CRLNumber: 4
     Revoked Certificates: 1
       Serial Number: 1
       Revocation Date: Mon Jul 17 05:10:19 2006 GMT
       Serial Number: 2
       Revocation Date: Mon Jul 17 05:12:25 2006 GMT
       Serial Number: 4
       Revocation Date: Mon Jul 17 05:40:39 2006 GMT
     Signature:
       b2:5a:e8:7c:bd:a8:00:0f:03:1a:17:fd:40:2c:46:
       0e:d5:64:87:e7:e7:bc:10:7d:b6:3e:39:21:a9:12:
       f4:5a:d8:b8:d4:bd:57:1a:7d:2f:7c:0d:c6:4f:27:
       17:c8:0e:ae:8c:89:ff:00:f7:81:97:c3:a1:6a:0a:
       f7:d2:46:06:9a:d1:d5:4d:78:e1:b7:b0:58:4d:09:
       d6:7c:1e:a0:40:af:86:5d:8c:c9:48:f6:e6:20:2e:
       b9:b6:81:03:0b:51:ac:23:db:9f:c1:8e:d6:94:54:
       66:a5:68:52:ee:dd:0f:10:5d:21:b8:b8:19:ff:29:
       6f:51:2e:c8:74:5c:2a:d2:c5:fa:99:eb:c5:c2:a2:
       d0:96:fc:54:b3:ba:80:4b:92:7f:85:54:76:c9:12:
       cb:32:ea:1d:12:7b:f8:f9:a2:5c:a1:b1:06:8e:d8:
       c5:42:61:00:8c:f6:33:11:29:df:6e:b2:cc:c3:7c:
       d3:f3:0c:8d:5c:49:a5:fb:49:fd:e7:c4:73:68:0a:
       09:0e:6d:68:a9:06:52:3a:36:4f:19:47:83:59:da:
       02:5b:2a:d0:8a:7a:33:0a:d5:ce:be:b5:a2:7d:8d:
       59:a1:9d:ee:60:ce:77:3d:e1:86:9a:84:93:90:9f:
       34:a7:02:40:59:3a:a5:d1:18:fb:6f:fc:af:d4:02:
       d9

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

Geoff Huston

APNIC

EMail: gih@apnic.net

URI: http://www.apnic.net

George Michaelson

APNIC

EMail: ggm@apnic.net

URI: http://www.apnic.net

Robert Loomans

APNIC

EMail: robertl@apnic.net

URI: http://www.apnic.net

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

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

nmalykh@gmail.com


 

1Internet Number Resource — числовой ресурс (номер) Internet.

2Certificate Revocation List.

3Resource Public Key Infrastructure.

4Internet Engineering Task Force.

5Internet Engineering Steering Group.

6Autonomous System.

7Relying party.

8Certificate Policy.

9Certification Authority — агентство по выдаче сертификатов.

10End-entity.

11Route Origin Authorization — полномочия на порождение маршрута.

12Extended Key Usage — расширенное использование ключа.

13CRL Distribution Points — точки распространения списков отзыва.

14Authority Information Access — доступ к информации об УЦ.

15Subject Information Access — доступ к информации о субъекте.

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

17Subsequent AFI.

18Routing Domain Identifier — идентификатор домена маршрутизации.

19В оригинале это предложение отсутствует, см. https://www.rfc-editor.org/errata/eid3205. Прим. перев.

20Certificate Request Message Format — формат сообщения с запросом сертификата.

21Certificate Practice Statement — заявление о практике сертификации.

22В оригинале текст этого абзаца содержал ошибку, см. https://www.rfc-editor.org/errata/eid4080. Прим. перев.

23В оригинале это предложение ошибочно было копией предыдущего, см. https://www.rfc-editor.org/errata/eid3228. Прим. перев.

24В оригинале это предложение содержало ошибку, см. https://www.rfc-editor.org/errata/eid5187. Прим. перев.

25Denial-of-service — атака, нацеленная на отказ в обслуживании.

26Кроме явно указанных в этой спецификации. Прим. перев.

27Universally Unique Identifier.

28Internet Service Provider — поставщик услуг Internet, провайдер.

29Regional Internet Registry региональный регистратор Internet.

30Работа завершена и опубликована в RFC 6916. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 6487 A Profile for X.509 PKIX Resource Certificates отключены

RFC 6492 A Protocol for Provisioning Resource Certificates

Internet Engineering Task Force (IETF)                         G. Huston
Request for Comments: 6492                                    R. Loomans
Category: Standards Track                                    B. Ellacott
ISSN: 2070-1721                                                    APNIC
                                                              R. Austein
                                                                     ISC
                                                           February 2012

Протокол обеспечения сертификатами ресурсов

A Protocol for Provisioning Resource Certificates

PDF

Аннотация

Этот документ определяет модель взаимодействий при управлении сертификатами между эмитентом ресурса INR1 (issuer) и получателем INR (subject) путем задания спецификации протокола взаимодействия между этими сторонами. Протокол поддерживает передачу запросов от субъекта и соответствующих откликов от эмитента, относящихся к выпуску сертификатов, их отзыву и отчетам о статусе сертификатов. Протокол предназначен лишь для использования приложениями для управления сертификатами INR и не рассчитан на применение в более общих моделях управления сертификатами.

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

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

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

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

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

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

Этот документ определяет модель взаимодействий при управлении сертификатами между эмитентом ресурса INR (issuer) и получателем INR (subject) путем задания спецификации протокола взаимодействия между этими сторонами. Протокол поддерживает передачу запросов от субъекта и соответствующих откликов от эмитента, относящихся к выпуску сертификатов, их отзыву и отчетам о статусе сертификатов. Протокол предназначен лишь для использования приложениями для управления сертификатами INR и не рассчитан на применение в более общих моделях управления сертификатами.

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

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

Internet Number Resource (или resource) -числовой ресурс Internet (ресурс)

В контексте этого документа обозначает номера автономных систем (AS4), адреса IP версии 4 и IP версии 6.

issuer — эмитент

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

Subject — субъект

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

resource class — класс ресурса

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

Server — сервер

В контексте данной спецификации протокола «клиент-сервер» роль сервера возлагается на эмитентов.

client

В контексте данной спецификации протокола «клиент-сервер» роль клиента возлагается на субъектов.

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

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

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

Получатель ресурса (субъект) может также играть роль издателя ресурсов (эмитент).

Данная спецификация не охватывает:

  • подписывание объектов с использованием ключей, сертифицированных сертификатами объектов, а также выпуск сертификатов конечных элементов;

  • взаимодействие с базой данных эмитента о выделении ресурсов, а также протокол поддержки репозитория публикаций;

  • взаимодействие между клиентом и сервером, обеспечивающее отождествление сторон, или обмен сертификатами и контекстом проверки пригодности PKI7, используемым в синтаксисе обмена криптографическими сообщениями (CMS8) [RFC5652];

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

3. Спецификация протокола

Данный протокол обеспечения сертификатов RPKI заключается в простом взаимодействии «запрос-отклик», где клиент передает запросы серверу, а тот генерирует соответствующие отклики.

Протокол реализуется в форме обмена сообщениями.

Сообщения передаются через сквозное соединение HTTP [RFC2616]. Обмен сообщениями начинается с того, что клиент инициирует HTTP POST с типом содержимого «application/rpki-updown» и объектом message в теле. Отклик сервера похож на отклик HTTP — объект message содержится в теле сообщения, а тип содержимого отклика указан «application/rpki-updown». Содержимое запроса POST и отклика сервера является «хорошо сформированным» объектом CMS [RFC5652], представленным с использованием правил DER9 для ASN.1 [X.509-88] и отформатированным в соответствии с профилем CMS, заданным в следующем параграфе. CMS используется в качестве формата подписи для подписывания объекта сообщения. Сообщение CMS включает сертификат конечного элемента (EE10), который используется для проверки пригодности цифровой подписи CMS (см. параграф 3.1.1.4); цепочка сертификации, используемая для проверки пригодности сертификата EE, может включаться в сообщение CMS, а при ее отсутствии предполагается, что коммуникации между двумя элементами осуществляются и с использованием механизмов, не определенных в данной спецификации.

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

3.1. Профиль CMS

Ниже показан формат объекта CMS.

         ContentInfo ::= SEQUENCE {
           contentType ContentType,
           content [0] EXPLICIT ANY DEFINED BY contentType }

         ContentType ::= OBJECT IDENTIFIER

Поле content-type представляет собой signed-data типа id-data, а именно id-signedData, OID = 1.2.840.113549.1.7.2. [RFC5652]

3.1.1. Тип SignedData

В соответствии со стандартом CMS [RFC5652] типом содержимого signed-data является ASN.1 типа SignedData.

    SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }

      DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
      SignerInfos ::= SET OF SignerInfo

Кроме того, поле SignerInfos должно включать только один объект SignerInfo.

3.1.1.1. version

Поле version указывает номер версии синтаксиса. Оно должно иметь значение 3, соответствующее структуре signerInfo, имеющей номер версии 3.

3.1.1.2. digestAlgorithms

Множество digestAlgorithms содержит идентификаторы объектов (OID11) для алгоритмов подписи, используемых при подписывании инкапсулированного содержимого. Это множество должно включать в точности один идентификатор алгоритма подписи и значение OID должно выбираться из числа указанных в [RFC6485].

3.1.1.3. encapContentInfo

Поле encapContentInfo представляет собой подписанное содержимое, состоящее из идентификатора типа и самого содержимого. encapContentInfo содержит информацию (payload) протокола обеспечения сертификатами RPKI.

   EncapsulatedContentInfo ::= SEQUENCE {
      eContentType ContentType,
      eContent [0] EXPLICIT OCTET STRING OPTIONAL }

   ContentType ::= OBJECT IDENTIFIER
3.1.1.3.1. eContentType

Поле eContentType для объекта RPKI Protocol Message определено как id-ct-xml и имеет числовое значение 1.2.840.113549.1.9.16.1.28.

      id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
                                rsadsi(113549) pkcs(1) pkcs9(9) 16 }

      id-ct OBJECT IDENTIFIER ::= { id-smime 1 }

      id-ct-xml OBJECT IDENTIFIER ::= { id-ct 28 }
3.1.1.3.2. eContent

Содержимое RPKI XML Protocol Object включает одно протокольное сообщение, структурированное в соответствии с определенной схемой XML, как определено в последующих параграфах. Поле eContent объекта CMS формально определяется с использованием ASN.1 как

      RPKIXMLProtocolObject ::= OCTET STRING -- сообщение в формате XML
3.1.1.4. certificates

Это поле должно присутствовать и должно содержать один сертификат EE для пары ключей, секретный ключ из которой был использован для подписи CMS. В это поле недопустимо помещать сертификат RPKI, ему следует содержать сертификат, который признан отождествляющим сторону, которая создала объект CMS.

Это поле может содержать сертификаты CA, которые зависимая сторона может использовать для проверки пригодности сертификата EE.

3.1.1.5. crls

Это поле должно присутствовать. Содержимое поля задано в [RFC5652]. В этом поле должен быть указан текущий список отзыва (CRL12), выпущенный тем же CA, который выпустил сертификат EE для ключевой пары, чей секретный ключ был использован для подписи CMS. Поле может содержать списки CRL, выпущенные другими CA и покрывающие сертификаты CA, включенные в поле certificates объекта CMS (см. параграф 3.1.1.4). Включение каких-либо иных CRL в это поле недопустимо.

3.1.1.6. SignerInfo

Структура SignerInfo определена в CMS как показано ниже.

   SignerInfo ::= SEQUENCE {
     version CMSVersion,
     sid SignerIdentifier,
     digestAlgorithm DigestAlgorithmIdentifier,
     signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
     signatureAlgorithm SignatureAlgorithmIdentifier,
     signature SignatureValue,
     unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }
3.1.1.6.1. version

Поле version должно иметь значение 3, соответствующее выбору SubjectKeyIdentifier для sid.

3.1.1.6.2. sid

Определение поля sid приведено ниже.

   SignerIdentifier ::= CHOICE {
     issuerAndSerialNumber IssuerAndSerialNumber,
     subjectKeyIdentifier [0] SubjectKeyIdentifier }

В данном профиле поле sid должно иметь значение SubjectKeyIdentifier, присутствующее в сертификате EE, содержащемся в поле certificates сообщения CMS.

3.1.1.6.3. digestAlgorithm

Поле digestAlgorithm должно содержать идентификатор OID алгоритма хэширования (digest), который соответствует спецификации профиля RPKI для алгоритмов и размеров ключей [RFC6485].

3.1.1.6.4. signedAttrs

Определение поля signedAttrs приведено ниже.

      SignedAttributes ::= SET SIZE (1..MAX) OF Attribute

      UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute

      Attribute ::= SEQUENCE {
        attrType OBJECT IDENTIFIER,
        attrValues SET OF AttributeValue }

      AttributeValue ::= ANY

Элемент signedAttr должен присутствовать и должен включать атрибуты content-type и message-digest [RFC5652]. Если присутствует один из двух или оба атрибута signing-time [RFC5652] и binary-signing-time [RFC6019], они также должны включаться в SignedAttributes. Включение других подписанных атрибутов недопустимо.

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

3.1.1.6.4.1. Атрибут Content-Type

Атрибут content-type должен присутствовать. Идентификатор attrType OID для атрибута content-type имеет значение 1.2.840.113549.1.9.3.

      id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 }

      ContentType ::= OBJECT IDENTIFIER

Поле attrValues для атрибута content-type должно соответствовать eContentType в EncapsulatedContentInfo. Это значение OID определяется как id-ct-xml и имеет числовое представление 1.2.840.113549.1.9.16.1.28.

3.1.1.6.4.2. Атрибут Message-Digest

Атрибут message-digest должен присутствовать. Идентификатор attrType OID для атрибута message-digest имеет значение 1.2.840.113549.1.9.4.

      id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 }

      MessageDigest ::= OCTET STRING

Поле attrValues для атрибута message-digest содержит выход алгоритма хэширования, примененного к подписываемому содержимому, как указано в параграфе 5.4 [RFC5652].

3.1.1.6.4.3. Атрибут Signing-Time

Атрибут signing-time может присутствовать. Идентификатор attrType OID для атрибута signing-time имеет значение 1.2.840.113549.1.9.5.

      id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 }

      SigningTime ::= Time

      Time ::= CHOICE {
        utcTime UTCTime,
        generalizedTime GeneralizedTime }

Атрибут signing-time указывает время (по локальным часам), когда для содержимого была создана цифровая подпись.

Рекомендации по использованию UTCTime и GeneralizedTime в атрибуте signing-time даны в параграфе 11.3 [RFC5652].

Один или оба атрибута signing-time и binary-signing-time должны присутствовать. При наличии обоих атрибутов они должны указывать одинаковое время.

3.1.1.6.4.4. Атрибут Binary-Signing-Time

Атрибут binary-signing-time может присутствовать. Идентификатор attrType OID для атрибута binary-signing-time имеет значение 1.2.840.113549.1.9.16.2.46.

      id-aa-binarySigningTime OBJECT IDENTIFIER ::= { iso(1)
          member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
          smime(16) aa(2) 46 }

      BinarySigningTime ::= BinaryTime

      BinaryTime ::= INTEGER (0..MAX)

Атрибут binary-signing-time указывает время (по локальным часам), когда для содержимого была создана цифровая подпись. Определение точности для атрибута binary-signing-time приведено в [RFC6019].

Один или оба атрибута signing-time и binary-signing-time должны присутствовать. При наличии обоих атрибутов они должны указывать одинаковое время.

3.1.1.6.5. Атрибут signatureAlgorithm

Поле signatureAlgorithm должно соответствовать спецификации профиля алгоритмов и размеров ключей RPKI [RFC6485].

3.1.1.6.6. Атрибут signature

Определение значения подписи приведено ниже.

       SignatureValue ::= OCTET STRING

Характеристики подписи определяются алгоритмами хэширования и подписи.

3.1.1.6.7. Неподписанные атрибуты

Поле unsignedAttrs должно быть опущено.

3.1.2. Проверка пригодности объекта CMS

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

  1. Объект CMS имеет корректный формат и синтаксис подписанных объектов соответствует данной спецификации. В частности выполняются все приведенные ниже условия.

    1. Типом содержимого (content-type) в объекте CMS является объект SignedData (OID 1.2.840.113549.1.7.2).

    2. Поле version для объекта SignedData имеет значение 3.

    3. Поле certificates присутствует в объекте SignedData и содержит один сертификат EE, поле SubjectKeyIdentifier в котором соответствует полю sid объекта SignerInfo.

    4. Поле crls присутствует в объекте SignedData.

    5. Поле version в SignerInfo имеет значение 3.

    6. Поле signedAttrs присутствует в объекте SignerInfo и содержит по одному атрибуту content-type (OID 1.2.840.113549.1.9.3) и message-digest (OID 1.2.840.113549.1.9.4), а также один или оба атрибута signing-time (OID 1.2.840.113549.1.9.5) и binary-signing-time (OID 1.2.840.113549.1.9.16.2.46) с одним значением времени. Других атрибутов присутствовать не должно.

    7. Поле eContentType в EncapsulatedContentInfo представляет собой идентификатор OID, который соответствует attrValue в атрибуте content-type и имеет attrValue id-ct-xml.

    8. Поле unsignedAttrs в объекте SignerInfo опущено.

    9. При наличии обоих атрибутов signing-time и binary-signing-time их значения представляют одно время.

    10. Поля digestAlgorithm в объектах SignedData и SignerInfo соответствуют профилю алгоритмов и размеров ключей [RFC6485].

    11. Поле signatureAlgorithm в объекте SignerInfo соответствует профилю алгоритмов и размеров ключей [RFC6485].

    12. Подписанный объект использует DER-представление.

  2. Открытый ключ сертификата EE (содержащийся внутри объекта CMS signed-data) может быть использован для успешной проверки подписи в подписанном объекте.

  3. Сертификат EE (содержащийся внутри объекта CMS signed-data) является пригодным к использованию сертификатом EE. В частности, существует пригодный путь сертификации от доверенной привязки, выбранной получателем, до данного сертификата EE.

  4. В текущий момент сертификат EE не отозван. Это можно определить, подтвердив, что список CRL, содержащийся в поле crls подписанного объекта данных CMS, является текущим пригодным к использованию списком CRL, выпущенным тем же CA, который выпустил сертификат EE, и этот CRL не включает порядкового номера сертификата EE.

  5. Время, представленное атрибутом signing-time или binary-signing-time, не меньше значения времени, указанного в предыдущем пригодном объекте CMS, который был передан данному получателю от того же источника. Это значение времени подписи может лежать в интервале Validity Time сертификата EE, но сертификат EE не следует считать непригодным, если это не выполняется, а все остальные перечисленные выше проверки завершились успешно.

3.1.3. Спецификация ASN.1 для подписанного объекта CMS

Ниже приведена спецификация ASN.1 для подписанного объекта данных CMS, используемого протоколом обеспечения RPKI.

      ContentInfo ::= SEQUENCE {
        contentType ContentType,
        content [0] EXPLICIT ANY DEFINED BY contentType }

      ContentType ::= OBJECT IDENTIFIER

      id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
                                rsadsi(113549) pkcs(1) pkcs9(9) 16 }
      id-ct OBJECT IDENTIFIER ::= { id-smime 1 }

      id-ct-xml OBJECT IDENTIFIER ::= { id-ct 28 }

      RPKIXMLProtocolObject ::= OCTET STRING -- XML encoded message

      id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
                         us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }

      SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }

      DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier

      SignerInfos ::= SET OF SignerInfo

      SignerInfo ::= SEQUENCE {
        version CMSVersion,
        sid SignerIdentifier,
        digestAlgorithm DigestAlgorithmIdentifier,
        signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
        signatureAlgorithm SignatureAlgorithmIdentifier,
        signature SignatureValue,
        unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }

      SignerIdentifier ::= CHOICE {
        issuerAndSerialNumber IssuerAndSerialNumber,
        subjectKeyIdentifier [0] SubjectKeyIdentifier }

      SignedAttributes ::= SET SIZE (1..MAX) OF Attribute

      Attribute ::= SEQUENCE {
      attrType OBJECT IDENTIFIER,
      attrValues SET OF AttributeValue }

      AttributeValue ::= ANY

      SignatureValue ::= OCTET STRING

      id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 }

      ContentType ::= OBJECT IDENTIFIER

      id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 }

      MessageDigest ::= OCTET STRING

      id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
          us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 }

      SigningTime ::= Time

      Time ::= CHOICE {
        utcTime UTCTime,
        generalizedTime GeneralizedTime }

      id-aa-binarySigningTime OBJECT IDENTIFIER ::= { iso(1)
          member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
          smime(16) aa(2) 46 }

      BinarySigningTime ::= BinaryTime

      BinaryTime ::= INTEGER (0..MAX)

3.2. Общий формат сообщений

Неформальное описание шаблона XML приведено ниже (компактная форма RELAX NG, формально описывающая объекты протокольных сообщений, приведена в параграфе 3.7).

   ---------------------------------------------------------------
   <?xml version="1.0" encoding="UTF-8"?>
   <message xmlns="http://www.apnic.net/specs/rescerts/up-down/"
            version="1"
            sender="sender name"
            recipient="recipient name"
            type="message type">
   [payload]
   </message>
   ---------------------------------------------------------------

version

Значение этого атрибута указывает версию данного протокола. Этот документ описывает версию 1.

sender

Значением этого атрибута является согласованное ранее между клиентом и сервером имя отправителя сообщения.

recipient

Значением этого атрибута является согласованное ранее между клиентом и сервером имя получателя сообщения.

type

Возможными значениями этого атрибута являются list, list_response, issue, issue_response, revoke, revoke_response и error_response.

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

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

Сообщение проверяется в соответствии с приведенным ниже списком.

  1. Проверяется корректность формата CMS (см. п. 1 в параграфе 3.1.2).

  2. Проверяется корректность формата XML.

  3. Проверяется соответствие атрибутов XML sender и recipient известному клиенту и данному серверу для запросов и ранее адресованному серверу и данному клиенту для откликов.

  4. Проверяется цифровая подпись с использованием открытого ключа, содержащегося в сертификате внутри CMS (см. п. 2 в параграфе 3.1.2).

  5. Проверяется пригодность сертификата, представленного CMS, с использованием инфраструктуры PKI, которая может быть определена предшествующим соглашением между клиентом и сервером (см. п. 3 в параграфе 3.1.2).

  6. Проверяется что время подписи CMS не раньше времени подписи предыдущего сообщения, принятого данным получателем от того же отправителя (см. п. 4 в параграфе 3.1.2).

  7. Проверяется значение номера версии сообщение (должно быть 1).

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

Любые ошибки при проверках 1 — 7 должны вызывать на сервере генерацию отклика «HTTP 400 Bad Request» на запрос HTTP POST. Ошибка при проверке 7 должна заставлять сервер генерировать отклик «Request-Not-Performed». При возникновении у клиента любой ошибки при проверках 1 — 7 ему следует генерировать сигнал ошибки.

Сервер может использовать управление потоком данных для контроля скорости обработки запросов. Если запрос не обрабатывается в результате ограничений такого контроля, сервер может генерировать отклик «HTTP 503 Service Unavailable». Отклик HTTP 503 может включать заголовок HTTP Retry-After: в качестве совета клиенту.

3.3. Управление — запрос класса ресурса

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

3.3.1. Запрос класса ресурсов

Запросное сообщение имеет вид:

    type="list"
    ---------------------------------------------------------------
    Payload:
    [для этого типа запросов данных не определено]
    ---------------------------------------------------------------

3.3.2. Отклик для класса ресурсов

Сообщение с откликом имеет вид:

      type="list_response"
   ---------------------------------------------------------------
   Payload:
    <class class_name="class name"
        cert_url="url"
        resource_set_as="as resource set"
        resource_set_ipv4="ipv4 resource set"
        resource_set_ipv6="ipv6 resource set"
        resource_set_notafter="datetime"
        suggested_sia_head="[directory uri]" >
        <certificate cert_url="url"
            req_resource_set_as="as resource set"
            req_resource_set_ipv4="ipv4 resource set"
            req_resource_set_ipv6="ipv6 resource set" >
        [certificate]
        </certificate>
        ...
        (повторяется для всех действующих сертификатов, где клиент указан субъектом)
        <issuer>[сертификат эмитента]</issuer>
        </class>
    ...
    (повторяется для всех классов ресурсов эмитента, которые были выделены клиенту)
   ---------------------------------------------------------------

Если клиенту выделены ресурсы из нескольких классов, отклик должен содержать множество элементов class, соответствующее полному набору классов ресурсов эмитента, в которых клиенту были выделены ресурсы. Классы ресурсов эмитента, в которых клиенту не были выделены ресурсы, недопустимо включать в отклик.

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

Каждый элемент class описывает набор ресурсов, которые сертифицированы в области действия одного сертификата и относятся к одному классу с общим путем проверки пригодности.

class_name

Этот атрибут содержит выделенное эмитентом имя его класса ресурсов.

cert_url

В контексте элемента класса этот атрибут является указателем на сертификат CA для эмитента (т. е. указателем на непосредственный вышестоящий сертификат, в котором эмитент является субъектом). Это значение представляет собой разделенный запятыми список URI, в котором по крайней мере один должен быть rsync URI [RFC5781]. Символы запятой в URI должны представляться escape-последовательностями %2C. Список может рассматриваться клиентом как упорядоченный издателем этого сертификата по уровню предпочтения набор вариантов доступа.

resource_set_as

В контексте элемента класса этот атрибут является множеством номеров и диапазонов номеров AS, которые эмитент выделил клиенту в области действия этого класса ресурсов, представленных в форме списка разделенных запятыми строк ASCII. Элементы списка являются десятичными целыми числами или диапазонами, заданными нижним и верхним значением с символом дефиса в качестве разделителя, с использованием канонического порядка, описанного в [RFC3779], без ведущих нулей и символов пробела или знаков препинания, отличающихся от запятой и дефиса (например, resource_set_as=»123,456-789,123456″). Если в этом классе ресурсов нет номеров AS, указывается пустой набор AS в виде «».

resource_set_ipv4

В контексте элемента класса этот атрибут является множеством адресов IPv4, которые эмитент выделил клиенту в области действия этого класса ресурсов. Значение представляется в форме списка строк ASCII, разделенных запятыми. Каждый элемент списка представляет собой адресный префикс в формате <адрес с разделением точками>/размер маски или диапазон, заданный младшим и старшим значением в формате десятичных чисел с разделением точками и символом дефиса между границами диапазона. Список представляется в каноническом порядке, описанном в [RFC3779]. Компоненты адреса, разделяемые точками, указываются без ведущих нулей. Кроме того, в списке не должны присутствовать пробелы и знаки препинания, отличающиеся от запятой, точки, дробной черты и дефиса (например, resource_set_ipv4=»192.0.2.0/26,192.0.2.66-192.0.2.76″). Если в этом классе ресурсов нет адресов IPv4, атрибут представляется пустым адресом IPv4 в форме «».

resource_set_ipv6

В контексте элемента класса этот атрибут является множеством адресов IPv6, которые эмитент выделил клиенту в области действия этого класса ресурсов. Значение представляется в форме списка строк ASCII, разделенных запятыми. Каждый элемент списка представляет собой адресный префикс в формате <последовательность шестнадцатеричных полубайтов>/размер маски, или диапазон, заданный младшим и старшим адресом с разделением символом дефиса. Нули в конце адресов опускаются и представляются двумя символами двоеточия (::). Список представляется в каноническом порядке, описанном в [RFC3779]. Последовательность шестнадцатеричных полубайтов указывается без ведущих нулей и в списке не должно присутствовать пробелов и знаков препинания, отличающихся запятой, точки, дробной черты и дефиса, а формат списка должен соответствовать [RFC5952] (например, resource_set_ipv6=»2001:db8::/48,2001:db8:2::-2001:db8:5::»). Тип данных XML Schema описан по ссылке http://www.w3.org/TR/xmlschema-2/#hexBinary, регистр символов не принимается во внимание, но канонический формат использует нижний регистр. Если в этом классе ресурсов нет адресов IPv6, атрибут представляется пустым адресом IPv6 в форме «».

resource_set_notafter

Значение этого атрибута задает дату и время, которые будут установлены в поле Validity notAfter любого нового сертификата, выпускаемого для данного клиента в области действия класса ресурсов при запросе клиентом нового сертификата. Время указывается в формате ISO 8601 [ISO.8601:2004] и должно использовать время часового пояса UTC, представленное как YYYY-MM-DDThh:mm:ssZ (например, 2007-11-29T04:40:00Z). Если в сертификате клиента указано другое значение notAfter, этому клиенту следует запросить выпуск нового сертификата для этого класса ресурсов.

suggested_sia_head (не обязательно)

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

[issuer’s certificate]

Значение этого поля содержит представление Base64 для DER-кодированного сертификата CA для эмитента (сертификат с поддержкой CA, в котором эмитент является субъектом).

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

cert_url

В контексте элемента с сертификатом это поле указывает место, в котором эмитент опубликовал данный сертификат. Это поле является предложением издателя в части значения поля AIA13 для субъекта с целью использования в подчиненных сертификатах, выпускаемых этим субъектом. Согласно профилю сертификатов ресурсов [RFC6487] поле AIA является непустым списком (содержит хотя бы 1 элемент) URI, один из которых должен быть rsync URI [RFC5781]. Порядок URI в поле AIA может интерпретироваться как относительные предпочтения издателя в части методов доступа к этому сертификату. Поле cert_url соответствует этой спецификации AIA. Значение поля представляет собой список разделенных запятыми URI, один из которых должен быть rsync URI. Запятые внутри URI должны заменяться escape-последовательностью %2C.

req_resource_set_as

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

req_resource_set_ipv4

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

req_resource_set_ipv6

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

[certificate]

Значение в формате Base64 для DER-представления сертификата.

3.4. CA — выпуск сертификата

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

3.4.1. Запрос на выпуск сертификата

Сообщение с запросом имеет вид:

      type="issue"
   ---------------------------------------------------------------
   Payload:
   <request
           class_name="class name"
           req_resource_set_as="as resource set"
           req_resource_set_ipv4="ipv4 resource set"
           req_resource_set_ipv6="ipv6 resource set">
           [Certificate request]
            </request>
   ---------------------------------------------------------------

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

Атрибуты req_resource_set в запросе не обязательны.

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

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

Если значение любого из включенных атрибутов req_resource_set пусто («»), это указывает, что ресурсы соответствующего типа не нужно включать в запрошенный сертификат.

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

class_name

Серверный идентификатор класса ресурсов.

req_resource_set_as (OPTIONAL)

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

req_resource_set_ipv4 (OPTIONAL)

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

req_resource_set_ipv6 (OPTIONAL)

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

[Certificate request]

Запрос сертификата в формате Base64 для DER-версии запроса, отформатированной с использованием PKCS#10 [RFC2986]. Запрос сертификата подписывается с использованием секретного ключа из пары, открытая часть которой служит значением ключа субъекта в запросе сертификации. Алгоритм подписи задан в [RFC6485] (эта подпись предназначена для подтверждения прав владения секретным ключом).

Ответом на этот запрос является Certificate Issuance Response, если запрос может быть выполнен в интерактивном режиме. Если запрос не может быть обработан сразу же, сервер должен ответить сообщением Request-Not-Performed с использованием подходящего кода ошибки (см. ниже).

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

  • Если клиенту не выделено ресурсов данного класса, сервер должен вернуть код ошибки 1202 и не обрабатывать запрос.

  • Если информационные поля (payload) запроса имеют некорректный формат, сервер должен вернуть код ошибки 1203.

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

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

Отметим, что клиент, получивший на запрос сертификата отклик с кодом 1104, может периодически повторять свой запрос и в таких случаях клиент должен получать отклики с кодом 1101, пока обрабатывается запрос и сообщение Certificate Issuance Response по завершении процесса выпуска сертификата. В таких обстоятельствах клиенту следует ограничивать частоту повторов (не более 1 запроса в течение 24 часов).

3.4.2. Отклик на запрос выпуска сертификата

Сообщение с откликом имеет вид:

      type="issue_response"
   ---------------------------------------------------------------
      Payload:
       <class class_name="class name"
              cert_url="url"
              resource_set_as="as resource set"
              resource_set_ipv4="ipv4 resource set"
              resource_set_ipv6="ipv6 resource set" >
               <certificate cert_url="url"
                     req_resource_set_as="as resource set"
                     req_resource_set_ipv4="ipv4 resource set"
                     req_resource_set_ipv6="ipv6 resource set" >
               [certificate]
               </certificate>
               <issuer>[issuer's certificate]</issuer>
             </class>
      ---------------------------------------------------------------

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

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

3.5. Отзыв сертификата

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

3.5.1. Запрос на отзыв сертификата

Сообщение с запросом отзыва имеет вид:

      type="revoke"
   ---------------------------------------------------------------
     Payload:
     <key class_name="class name"
          ski="[encoded hash of the subject public key]" />
   ---------------------------------------------------------------

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

class_name

Выделенное эмитентом имя класса ресурсов.

ski

Кодированное хэш-значение открытого ключа клиента, который будет отозван. Кодирование представляет собой создание 160-битового хэша SHA-1 открытого ключа клиента, в соответствии с методом (1) из параграфа 4.2.1.2 в [RFC5280] и кодирование результата с использованием представления Base 64 с URL and Filename Safe Alphabet в соответствии с определением раздела 5 в [RFC4648].

3.5.2. Отклик на отзыв сертификата

Сообщение с откликом на запрос отзыва имеет вид:

      type="revoke_response"
   ---------------------------------------------------------------
      Payload:
      <key class_name="class name"
        ski="[encoded hash of the subject public key]" />
   ---------------------------------------------------------------

class_name

Выделенное эмитентом имя класса ресурсов.

ski

Кодированное хэш-значение открытого ключа клиента, который будет отозван. Кодирование представляет собой создание 160-битового хэша SHA-1 открытого ключа клиента, в соответствии с методом (1) из параграфа 4.2.1.2 в [RFC5280] и кодирование результата с использованием представления Base 64 с URL and Filename Safe Alphabet в соответствии с определением раздела 5 в [RFC4648].

3.6. Отклик Request-Not-Performed

Сообщение об отказе от выполнения запроса имеет вид:

      type="error_response"
   ---------------------------------------------------------------
      Payload:
      <status>[Code]</status>
      <description xml:lang="en-US">[Readable text]</description>
   ---------------------------------------------------------------

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

description

Текстовое поле, которое можно включать в отклик. В рамках данного протокола трактовка значения этого поля не определяется и реализации могут предполагать наличие в нем некой информации, предназначенной для человека. Если запрос HTTP, вызвавший генерацию этого отклика, включал заголовок Accept-Language, как определено в параграфе 14.4 спецификации HTTP/1.1 [RFC2616], сервер может включить второй описательный элемент с использованием самого предпочтительного из указанных клиентом языков. Описание с использованием языка en-US должно включаться в текст, если он присутствует.

Коды ошибок приведены в таблице.

Код

Описание

1101

Уже обработанный запрос

1102

Ошибка в номере версии

1103

Не распознанный тип запроса

1104

Запрос запланирован для обработки

1201

Запрос — нет такого класса ресурсов

1202

Запрос — не выделено ресурсов этого класса

1203

Запрос — некорректно сформированный запрос сертификата

1204

Запрос — ключ уже используется

1301

Отзыв — нет такого класса ресурсов

1302

Отзыв — нет такого ключа

2001

Внутренняя ошибка сервера, запрос не выполнен

3.7. Схема XML

Ниже приведена компактная форма RELAX NG, описывающая версию 1 этого протокола.

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

   default namespace = "http://www.apnic.net/specs/rescerts/up-down/"

   grammar {
      resource_set_as = xsd:string { maxLength="512000" pattern="[\-,0-9]*" }
      resource_set_ip4 = xsd:string { maxLength="512000" pattern="[\-,/.0-9]*" }
      resource_set_ip6 = xsd:string { maxLength="512000" pattern="[\-,/:0-9a-fA-F]*" }

      class_name = xsd:token { minLength="1" maxLength="1024" }
      ski = xsd:token { minLength="27" maxLength="1024" }

      label = xsd:token { minLength="1" maxLength="1024" }
      cert_url = xsd:string { minLength="10" maxLength="4096" }
      base64_binary = xsd:base64Binary { minLength="4" maxLength="512000" }

      start = element message {
        attribute version { xsd:positiveInteger { maxInclusive="1" } },
        attribute sender { label },
        attribute recipient { label },
        payload
      }

      payload |= attribute type { "list" }, list_request
      payload |= attribute type { "list_response"}, list_response
      payload |= attribute type { "issue" }, issue_request
      payload |= attribute type { "issue_response"}, issue_response
      payload |= attribute type { "revoke" }, revoke_request
      payload |= attribute type { "revoke_response"}, revoke_response
      payload |= attribute type { "error_response"}, error_response

      list_request = empty
      list_response = class*

      class = element class {
        attribute class_name { class_name },
        attribute cert_url { cert_url },
        attribute resource_set_as { resource_set_as },
        attribute resource_set_ipv4 { resource_set_ip4 },
        attribute resource_set_ipv6 { resource_set_ip6 },
        attribute resource_set_notafter { xsd:dateTime },
        attribute suggested_sia_head { xsd:anyURI { maxLength="1024" pattern="rsync://.+"} }?,
        element certificate {
          attribute cert_url { cert_url },
          attribute req_resource_set_as { resource_set_as }?,
          attribute req_resource_set_ipv4 { resource_set_ip4 }?,
          attribute req_resource_set_ipv6 { resource_set_ip6 }?,
          base64_binary
        }*,
        element issuer { base64_binary }
      }

      issue_request = element request {
        attribute class_name { class_name },
        attribute req_resource_set_as { resource_set_as }?,
        attribute req_resource_set_ipv4 { resource_set_ip4 }?,
        attribute req_resource_set_ipv6 { resource_set_ip6 }?,
        base64_binary
      }
      issue_response = class

      revoke_request = revocation
      revoke_response = revocation

      revocation = element key {
        attribute class_name { class_name },
        attribute ski { ski }
      }

      error_response =
        element status { xsd:positiveInteger { maxInclusive="9999" } },
        element description { attribute xml:lang { xsd:language },
                                  xsd:string { maxLength="1024" } }*
      }

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

Этот протокол поддерживает обслуживание сертификатов ресурсов, которые эмитент выпускает для субъекта при сертификации ресурсов, которые были выделены или назначены эмитентом для данного субъекта [RFC6480]. Протокол предполагает, что эмитент и субъект известны один другому и обменялись представлениями для взаимного признания цифровых подписей, используемых в сообщениях CMS. Механизмы обмена такими представлениями не описаны в данной спецификации.

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

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

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

Агентство IANA зарегистрировало приведенный ниже тип среды (media type).

   application/rpki-updown

5.1. application/rpki-updown

Type name:  application
Subtype name:  rpki-updown
Required parameters:  None
Optional parameters:  None
Encoding considerations:  binary
Security considerations:  Carries an RPKI Provisioning Protocol Message, as defined in this 
   document.
Interoperability considerations:  None
Published specification:  This document
Applications that use this media type:  HTTP [RFC5652]
Additional information:
   Magic number(s):  None
   File extension(s):
   Macintosh File Type Code(s):
Person & email address to contact for further information: Geoff Huston <gih@apnic.net>
Intended usage:  COMMON
Restrictions on usage:  Only to be used as an RPKI Provisioning Protocol message object type, 
   as defined in this document.
Author:  Geoff Huston <gih@apnic.net>
Change controller:  Geoff Huston <gih@apnic.net>

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

Авторы отмечают с признательностью существенный вклад Russ Housley, Steve Kent, Randy Bush, George Michaelson, Robert Kisteleki, Tim Bruijnzeels и Carsten Bormann в подготовку протокола, описанного в этом документе.

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

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

[ISO.8601:2004] ISO, «ISO 8601:2004 Representation of dates and Times», 2004.

[RFC2119] Bradner, S., «Key words for use in RFCs to Indicate Requirement Levels», BCP 14, RFC 2119, March 1997.

[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, «Hypertext Transfer Protocol — HTTP/1.1», RFC 2616, June 1999.

[RFC2986] Nystrom, M. and B. Kaliski, «PKCS #10: Certification Request Syntax Specification Version 1.7», RFC 2986, November 2000.

[RFC3779] Lynn, C., Kent, S., and K. Seo, «X.509 Extensions for IP Addresses and AS Identifiers», RFC 3779, June 2004.

[RFC4648] Josefsson, S., «The Base16, Base32, and Base64 Data Encodings», RFC 4648, October 2006.

[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 5280, May 2008.

[RFC5652] Housley, R., «Cryptographic Message Syntax (CMS)», STD 70, RFC 5652, September 2009.

[RFC5781] Weiler, S., Ward, D., and R. Housley, «The rsync URI Scheme», RFC 5781, February 2010.

[RFC5952] Kawamura, S. and M. Kawashima, «A Recommendation for IPv6 Address Text Representation», RFC 5952, August 2010.

[RFC6019] Housley, R., «BinaryTime: An Alternate Format for Representing Date and Time in ASN.1», RFC 6019, September 2010.

[RFC6485] Huston, G., «The Profile for Algorithms and Key Sizes for Use in the Resource Public Key Infrastructure (RPKI)», RFC 6485, February 2012.

[X.509-88] CCITT, «Recommendation X.509: The Directory-Authentication Framework», 1988.

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

[RFC6480] Lepinski, M. and S. Kent, «An Infrastructure to Support Secure Internet Routing», RFC 6480, February 2012.

[RFC6487] Huston, G., Michaelson, G., and R. Loomans, «A Profile for X.509 PKIX Resource Certificates», RFC 6487, February 2012.

[XML] Bray, T., Hollander, D., Layman, A., Tobin, R., and H. Thompson, «Namespaces in XML 1.0 (Third Edition)», World Wide Web Consortium Recommendation REC-xml-names-20091208, December 2009, <http://www.w3.org/TR/2009/REC-xml-names-20091208/>.

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

Geoff Huston

APNIC

EMail: gih@apnic.net

URI: http://www.apnic.net

Robert Loomans

APNIC

EMail: robertl@apnic.net

URI: http://www.apnic.net

Byron Ellacott

APNIC

EMail: bje@apnic.net

URI: http://www.apnic.net

Rob Austein

Internet Systems Consortium

EMail: sra@hactrn.net


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

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

nmalykh@gmail.com

1Internet Number Resource — числовые ресурсы (номера) Internet.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

4Autonomous System.

5Certification Authority — агентство по выдаче сертификатов.

6Resource Public Key Infrastructure.

7Public Key Infrastructure — инфраструктура открытых ключей.

8Cryptographic Message Syntax — синтаксис криптографических сообщений.

9Distinguished Encoding Rules — правила отличительного кодирования.

10End-entity.

11Object Identifier.

12Certificate Revocation List — список отозванных сертификатов.

13Authority Information Access — доступ к информации об УЦ (агентстве)

Рубрика: RFC | Комментарии к записи RFC 6492 A Protocol for Provisioning Resource Certificates отключены

RFC 6483 Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs)

Internet Engineering Task Force (IETF)                         G. Huston
Request for Comments: 6483                                 G. Michaelson
Category: Informational                                            APNIC
ISSN: 2070-1721                                            February 2012

Проверка пригодности источника маршрута с использованием RPKI и ROA

Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs)

PDF

Аннотация

Этот документ определяет семантику полномочий создания маршрутов (ROA1) в контексте использования инфраструктуры открытых ключей ресурсов (RPKI2) для проверки пригодности маршрутных анонсов протокола BGP3.

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

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

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

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

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

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

Этот документ определяет семантику полномочий создания маршрутов (ROA) в контексте использования инфраструктуры открытых ключей ресурсов (RPKI) [RFC6480] для проверки пригодности маршрутных анонсов протокола BGP. [RFC4271].

RPKI основана на иерархии сертификатов ресурсов, которые согласованы со структурой выделения INR6. Сертификаты ресурсов являются сертификатами X.509, которые соответствуют профилю PKIX [RFC5280] и расширениями для адресов IP и идентификаторов AS [RFC3779]. Сертификат ресурса описывает действие эмитента, который привязывает список адресных блоков IP и номеров автономных систем (AS7) к субъекту сертификата, идентифицируемому уникальной связью секретного ключа субъекта с открытым ключом в сертификате ресурса. RPKI структурирована так, что каждый текущий сертификат ресурса соответствует текущему выделению или назначению ресурса. Это подробно описано в [RFC6480].

ROA являются объектами с цифровой подписью, которые связывают адреса с номером AS и подписываются владельцем адресов. ROA обеспечивают способ проверки того, что держатель блока адресов IP предоставил конкретной AS полномочия на создание в среде междоменной маршрутизации маршрута к этому блоку адресов. ROA описаны в [RFC6482] и служат для выполнения требований повышения уровня защиты междоменной маршрутизации.

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

2. Результаты проверки ROA для маршрута

«Маршрут» (route) представляет собой блок информации, который связывает множество адресатов, описываемых префиксом IP, с набором атрибутов пути к этим адресатам, как определено в параграфе 1.1 [RFC4271].

«AS-источник» (origin AS) для маршрута определяется следующим образом. Если финальный сегмент пути в AS_PATH имеет тип AS_SEQUENCE, источником является первый элемент этой последовательности (т. е. AS в самой правой позиции протокольного сообщения). Если AS_PATH содержит сегмент пути типа AS_SET, показывающий агрегатный характер маршрута, AS-источник определить невозможно. Применительно к проверке пригодности маршрута в контексте среды маршрутизации значение адресного префикса и исходная AS используются при проверке пригодности ROA.

Здесь предполагается, что зависимые от инфраструктуры стороны (RP8) имеют доступ к локальному кэшу полного набора пригодных ROA в процессе проверки пригодности маршрута (пригодными считаются ROA, которые корректны синтаксически и содержат подпись, проверяемую средствами RPKI, как описано в [RFC6482]). Для RP требуется соответствие маршрута одному или множеству пригодных полномочий ROA для получения результата проверки, который, в свою очередь, может применяться для определения подходящих локальных действий по отношению к этому маршруту.

Такой подход к проверке пригодности источника маршрута использует общую модель «положительного» подтверждения, где маршруты, которые невозможно проверить в RPKI, считаются RP «непригодными». Однако с учетом наличия сред с неполным использованием ROA, где лишь часть корректно анонсируемых адресных префиксов имеет связанные с ними и опубликованные ROA в структуре RPKI, эта модель положительного подтверждения несколько изменяется. В контексте проверки пригодности маршрутов предполагается, что наличие адресного префикса в ROA означает действие данного полномочия ROA для всех более конкретных префиксов, которые также охватываются этим ROA. Таким образом, маршрут с более конкретным, чем описано в любом пригодном ROA, адресным префиксом, но не имеющий сам по себе пригодного ROA, может считаться «непригодным». Однако маршруты для адресных префиксов, которые не описаны полностью каким-либо отдельным ROA (т. е. маршруты, чьи префиксы могут быть агрегатами адресных префиксов, описанных в пригодных ROA, или имеют адресные префиксы, которые не пересекаются ни с одним пригодным ROA) и не соответствуют какому-либо пригодному ROA, а также не имеют префикса, который является более конкретным по сравнению с описанным в каком-либо пригодном ROA, не могут быть надежно сочтены «непригодными» при частичном развертывании системы. Для таких маршрутов проверка пригодности дает неопределенный результат (unknown).

Можно определить абстрактный атрибут маршрута, являющийся результатом проверки пригодности, «состояние пригодности» (validity state) [BGP-PFX]. Состояния пригодности маршрутов с определенными выше префиксом и AS-источником при использовании для проверки пригодности одного ROA показаны в таблице.

  Маршрут    соответст. не соотв.
Prefix   AS->   AS         AS
 V           +---------+---------+
Нет пересеч. |неизвест.|неизвест.|
             |         |         |
             +---------+---------+
Покрывающий  |неизвест.|неизвест.|
  агрегат    |         |         |
             +---------+---------+
Соответствует| пригоден|непригод.|
префиксу ROA |         |         |
             +---------+---------+
Конкретней   |непригод.|непригод.|
чем ROA      |         |         |
             +---------+---------+

Состояние пригодности маршрута.


В среде с набором действующих ROA маршрут считается «пригодным», если для любой ROA проверка дает результат «пригоден». Маршрут считается «непригодным», если результат проверки для одного (или нескольких) ROA дает значение «не пригоден» и нет результата «пригоден» для каких-либо ROA. Состояние считается «не определенным» (unknown или not found [BGP-PFX]), если нет пригодных ROA, дающих после проверки состояние «пригоден» или «не пригоден».

Процедура определения состояния пригодности маршрута приведена ниже.

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

  2. Если множество кандидатов пусто, процедура завершается с возвратом значения unknown (или not found, как принято в [BGP-PFX]).

  3. Если создавшую маршрут AS можно определить и любой элемент множества ROA-кандидатов имеет значение asID, которое соответствует AS в маршруте, а префикс адреса соответствует ROAIPAddress в ROA (соответствие означает точное совпадение с ROAIPAddress или наличие в ROAIPAddress элемента maxLength, значение которого не меньше размера адресного префикса в маршруте а сам префикс является более конкретным, нежели ROAIPAddress), процедура завершается с возвратом значения valid.

  4. В остальных случаях процедура завершается с возвратом значения invalid.

3. Применение результатов проверки при выборе маршрутов

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

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

      "пригоден" предпочтительней чем 
      "не определен", что предпочтительней чем 
      "не пригоден".

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

Вопрос использования маршрутов с состоянием пригодности invalid или отказа от их рассмотрения в процессе выбора маршрута решается на основе локальной политики. Здесь возможно возникновение циклической зависимости — если полномочная точка публикации репозитория ROA или каких-то иных сертификатов, относящихся к адресному префиксу, размещается по адресу, относящемуся к описанному в ROA префиксу, этот репозиторий будет доступен для RP лишь после того, как маршрут к этому префиксу будет воспринят локальным доменом маршрутизации RP. Отмечено также, что время распространения объектов RPKI может отличаться от времени распространения маршрутов и система маршрутизации RP может узнать о маршрутах до того, как локальный кэш репозитория RPKI в данной RP получит соответствующие ROA и сочтет их пригодными (valid) в рамках RPKI.

4. Отказ от создания маршрутов

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

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

Процедура проверки пригодности маршрута, описанная в разделе 2, будет давать на выходе valid (пригоден), если какое-либо любое полномочие ROA соответствует адресному префиксу и AS, даже если другие действующие ROA будут указывать на непригодность (invalid) в случае их «изолированного» использования. Следовательно, AS 0 ROA имеет наиболее низкий уровень предпочтения по сравнению с любыми другими ROA, в которых указана маршрутизируемая AS. Это позволяет держателям префиксов использовать AS 0 ROA задать по умолчанию, что любой маршрут с таким же или более конкретным префиксом будет считаться «непригодным» (invalid), позволяя в то же время другим ROA описывать действующие полномочия для более конкретных префиксов.

По соглашению в AS 0 ROA следует указывать maxLength = 32 для IPv4 и maxlength = 128 для IPv6, хотя при проверке пригодности маршрутов результат будет неизменным для любого значения maxLength и даже при отсутствии maxLength в ROA.

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

5. Срок пригодности маршрута

«Срок действия» результата проверки пригодности указывает интервал времени, в течение которого результат процесса проверки остается применимым. Здесь присутствует неявное допущение о том, что по завершении срока действия маршрут следует заново проверить на пригодность.

Срок действия ROA определяется значениями Valid в сертификате конечного элемента (EE9), использованном для подписи ROA, и времени действия сертификатов на пути сертификации, используемом для проверки пригодности сертификата EE. Срок действия ROA завершается в момент наступления времени notAfter в сертификате EE или в момент «исчезновения» пути сертификации, позволяющего проверить пригодность ROA. Эмитент ROA может заранее прервать действие ROA путем отзыва сертификата EE, который был использован для подписи ROA.

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

Эмитентам ROA следует принимать во внимание воздействие проверки пригодности на выпуск ROA в том смысле, что ROA неявно объявляет непригодными все маршруты, которые имеют более конкретные префиксы с размером префикса больше maxLength, а AS-источник отличается от AS указанных в наборе ROA для этого префикса.

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

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

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

Авторы хотели бы отметить вклад в подготовку этого документа John Scudder и Stephen Kent, а также отклики многочисленных участников рабочей группы SIDR в ответ на представление материалов на сессиях SIDR WG. Авторы также отмечают предварительную работу Tony Bates, Randy Bush, Tony Li и Yakov Rekhter в части описанной здесь проверки пригодности и семантики проверки AS-источников, описанную в [NLRI-ORIG]. Многие концепции проверки пригодности маршрутов, представленные в [BGP-PFX] под редакцией Pradosh Mohapatra и др., были использованы в этом документе.

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

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

[RFC3779] Lynn, C., Kent, S., and K. Seo, «X.509 Extensions for IP Addresses and AS Identifiers», RFC 3779, June 2004.

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006.

[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 5280, May 2008.

[RFC6480] Lepinski, M. and S. Kent, «An Infrastructure to Support Secure Internet Routing», RFC 6480, February 2012.

[RFC6482] Lepinski, M., Kent, S., and D. Kong, «A Profile for Route Origin Authorizations (ROAs)», RFC 6482, February 2012.

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

[BGP-PFX] Mohapatra, P., Ed., Scudder, J., Ed., Ward, D., Ed., Bush, R., Ed., and R. Austein, Ed., «BGP Prefix Origin Validation», Work in Progress10, October 2011.

[IANA-AS] IANA, «Autonomous System (AS) Numbers», http://http://www.iana.org/assignments/as-numbers

[NLRI-ORIG] Bates, T., Bush, R., Li, T., and Y. Rekhter, «DNS-based NLRI origin AS verification in BGP», Work in Progress, January 1998.

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

Geoff Huston

APNIC

EMail: gih@apnic.net

George Michaelson

APNIC

EMail: ggm@apnic.net


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

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

nmalykh@gmail.com

1Route Origin Authorization.

2Resource Public Key Infrastructure.

3Border Gateway Protocol — протокол граничного шлюза.

4Internet Engineering Task Force.

5Internet Engineering Steering Group.

6Internet Number Resource — числовые ресурсы Internet.

7Autonomous System.

8Relying party.

9End-entity.

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

Рубрика: RFC | Комментарии к записи RFC 6483 Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs) отключены