RFC 2673 Binary Labels in the Domain Name System

Network Working Group                             M. Crawford
Request for Comments: 2673                           Fermilab
Updates: 1035                                     August 1999
Category: Standards Track

Двоичные метки в DNS

Binary Labels in the Domain Name System

PDF

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

В этом документе описан предлагаемый стандарт протокола для сообщества Internet; документ служит приглашением к дискуссии в целях развития протокола. Информацию о текущем состоянии стандартизации протокола можно найти в документе Internet Official Protocol Standards (STD 1). Данный документ может распространяться свободно.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

1. Введение и терминология

В этом документе определены метки, представляющие собой строку битов (Bit-String Label), которые могут появляться в доменных именах. Новый тип меток компактно представляет последовательность однобитовых меток (One-Bit Label) и позволяет сохранять записи о ресурсах в любых битах раздела binary-named в дереве доменных имен.

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

2. Мотивация

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

3. Формат меток

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

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

3.1. Представление

 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 . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-//+-+-+-+-+-+-+
|0 1|    ELT    |     Count     |           Label …         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+//-+-+-+-+-+-+-+

(каждая «клеточка» представляет 1 бит)

ELT — двоичное значение 000001 — шестибитовое значение расширенного типа метки [EDNS0], выделенное для Bit-String Label.

Count — число значимых битов в поле Label. Нулевое значение поля Count говорит о размере метки 256 битов (таким образом, пустая метка, обозначающая корень DNS, не может быть представлена в формате Bit-String).

Label — строка битов, представляющая собой последовательность однобитовых меток, в которой старший бит указывается первым (т. е., однобитовая метка в позиции 17 на рисунке представляет субдомен домена, представленного однобитовой меткой в позиции 16 и т. д.).

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

Последовательность битов может быть расщеплена на две или более метки Bit-String, но точка раздела не имеет значения и ее не требуется сохранять. Изощренные реализации серверов могут делить метки Bit-String для повышения эффективности сжатия сообщений [DNSIS]. Более простые серверы могут делить метки Bit-String по границам зон, если какая-нибудь из таких границ попадает между однобитовыми метками.

3.2. Текстовое представление

Метки в форме битовых строк представляются в текстовом формате (например, в файлах зон), как <bit-spec>, окруженные в качестве граничных маркеров символами \[ и ]. <bit-spec> представляет собой квартет с разделением точки или индикатор базы и последовательность цифр, подходящих для этой базы, за которыми может следовать символ дробной черты и поле размера. В качестве индикаторов базы используются символы b, o и x для обозначения базы 2, 8 и 16, соответственно. Поле размера учитывает значимые биты и должно иметь значение от 1 до 32, включительно, для разделенных точками квартетов или от 1 до 256, включительно, для других форм. Если размер опущен, используется неявное значение 32 для квартетов с точками или 1-, 3- или 4-кратное число двоичных, восьмеричных или шестнадцатеричных цифр в остальных вариантах представления.

Расширенная форма Бэкуса-Наура [ABNF] имеет вид

bit-string-label = «\[» bit-spec «]»
bit-spec         = bit-data [ «/» length ]
                 / dotted-quad [ «/» slength ]
bit-data         = «x» 1*64HEXDIG
                 / «o» 1*86OCTDIG
                 / «b» 1*256BIT
dotted-quad      = decbyte «.» decbyte «.» decbyte «.» decbyte
decbyte          = 1*3DIGIT
length           = NZDIGIT *2DIGIT
slength          = NZDIGIT [ DIGIT ]
OCTDIG           = %x30-37
NZDIGIT          = %x31-39

При наличии поля <length>, числа цифр в <bit-data> должно быть достаточно для размещения количества битов, заданного полем <length>. При наличии неиспользуемых битов в шестнадцатеричной или восьмеричной цифре эти биты должны иметь значение 0. Поле <dotted-quad> всегда имеет все 4 части, даже если связанное с ним значение <slength> меньше 24. Подобно другим формам неиспользуемые биты должны иметь значение 0.

Каждое число, представляемое <decbyte> должно иметь значение от 0 до 255, включительно.

Число, представленное полем <length> должно иметь значение от 1 до 256, включительно.

Число, представленное полем <slength> должно иметь значение от 1 до 32, включительно.

Когда текстовое представление метки Bit-String генерируется машиной, размер следует указывать явно, не основываясь на принятых по умолчанию значениях.

3.2.1. Примеры

Ниже показаны 4 варианта текстового представления одной метки Bit-String.

\[b11010000011101]
\[o64072/14]
\[xd074/14]
\[208.116.0.0/14]

Ниже представлены две последовательные метки Bit-String, которые обозначают ту же относительную точку в дереве DNS, что и показанные выше одиночные метки Bit-String.

\[b11101].\[o640]

3.3. Каноническое представление и порядок сортировки

Как для сигнальной (передаваемой), так и для текстовой формы представления двоичных меток обеспечивается уровень гибкости, достаточный для для их группировки в последовательность меток Bit-String. Для генерации и проверки подписей DNS [DNSSEC] двоичные метки должны иметь предсказуемую форму. Эта каноническая форма определяется, как минимальная возможная последовательность меток Bit-String, в которой все метки, за возможным исключением первой, имеют максимальный размер.

Например, каноническая форма любой последовательности, содержащей до 256 однобитовых меток имеет одну метку Bit-String, а каноническая форма последовательности из 513 — 768 однобитовых меток имеет три метки Bit-String, из которых вторая и третья содержат по 256 битов.

Канонический порядок сортировки доменных имен [DNSSEC] расширяется с учетом применения двоичных меток. Сортировка продолжает осуществляться пометочно (label-by-label), от наименее значимой метки (метка может быть однобитовой или стандартной — код 00). Любая однобитовая метка помещается при сортировке перед всеми стандартными метками, а значение 0 — впереди значения 1. Отсутствующая метка при сортировке помещается впереди всех меток, как указано в [DNSSEC].

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

foo.example
\[b1].foo.example
\[b100].foo.example
\[b101].foo.example
bravo.\[b10].foo.example
alpha.foo.example

4. Правила обработки

Однобитовая метка никогда не соответствует какой-либо метке иного типа. В частности метки DNS, представленные символами ASCII 0 и 1 не соответствуют однобитовым меткам со значениями 0 и 1.

5. Обсуждение

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

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

В этом документе определяется расширенный тип метки (Extended Label Type) под названием Bit-String Label и запрашивается регистрация двоичного кода 000001 в пространстве имен, определенном [EDNS0].

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

Все вопросы безопасности, относящиеся к традиционным ASCII-меткам DNS, в такой же мере применимы и к двоичным меткам. Правила канонизации и сортировка (параграф 3.3) позволяют решать эти вопросы с помощью DNS Security [DNSSEC].

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

[ABNF] Crocker, D. and P. Overell, «Augmented BNF for Syntax Specifications: ABNF», RFC 2234, November 1997.

[DNSIS] Mockapetris, P., «Domain names — implementation and specification», STD 13, RFC 1035, November 1987.

[DNSSEC] Eastlake, D., 3rd, C. Kaufman, «Domain Name System Security Extensions», RFC 2065, January 1997

[EDNS0] Vixie, P., «Extension mechanisms for DNS (EDNS0)», RFC 2671, August 1999.

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

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

Matt Crawford

Fermilab MS 368

PO Box 500

Batavia, IL 60510

USA

Phone: +1 630 840-3461

EMail: crawdad@fnal.gov

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

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

nmalykh@protokols.ru

10. Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

Рубрика: RFC | Комментарии к записи RFC 2673 Binary Labels in the Domain Name System отключены

RFC 2675 IPv6 Jumbograms

Network Working Group                                          D. Borman
Request for Comments: 2675                      Berkeley Software Design
Obsoletes: 2147                                               S. Deering
Category: Standards Track                                          Cisco
                                                               R. Hinden
                                                                   Nokia
                                                             August 1999

IPv6 Jumbograms

Джамбограммы IPv6

PDF

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

Этот документ задаёт проект стандарта Internet для сообщества Internet и служит приглашением к дискуссии с целью ращвития протокола. Текущее состояние стандартизации и статус протокола отражены в документе Internet Official Protocol Standards (STD 1). Документ может распространяться без ограничений.

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

Copyright (C) The Internet Society (1999). Все права защищены.

Аннотация

Джамбограммой (jumbogram) называют пакет IPv6, в котором размер содержимого (payload) превышает 65 535 октетов. Этот документ описывает опцию IPv6 Jumbo Payload, обеспечивающую возможность указать столь большой размер содержимого. Документ также описывает изменения, которые нужно внести в TCP и UDP для применения джамбограмм.

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

1. Введение

      jumbo (jum'bO),

          n., pl. -bos, adj.
          -n.
          1. a person, animal, or thing very large of its kind.
          -adj.
          2. very large: the jumbo box of cereal.

          [1800-10; orig. uncert.; popularized as the name of a large
           elephant purchased and exhibited by P.T. Barnum in 1882]

                                              -- www.infoplease.com

Заголовок IPv6 [IPv6] имеет 16-битовое поле Payload Length, позволяющее указать размер содержимого до 65 535 октетов. Этот документ задаёт поэтапную (hop-by-hop) опцию IPv6, называемую Jumbo Payload, которая включает 32-битовое поле размера, позволяющее передавать пакеты IPv6 с размером содержимого от 65 536 до 4 294 967 295 октетов. Пакеты с таким размером содержимого называют джамбограммами.

Опция Jumbo Payload относится лишь к узлам IPv6, которые могут быть подключены к каналам с MTU более 65 575 октетов (65 535 + 40, где 40 — размер заголовка IPv6). Опцию Jumbo Payload не требуется реализовать или понимать на узлах IPv6, которые не поддерживают подключение к каналам с MTU больше 65 575.

На каналах с настраиваемым MTU, недопустимо устанавливать MTU больше 65 575 октетов, если на канале имеются узлы, не поддерживающие опцию Jumbo Payload, и нет гарантии, что пакеты с опцией Jumbo Payload не будут передаваться таким узлам.

Заголовок UDP [UDP] имеет 16-битовое поле Length, препятствующее использованию дейтаграмм. В заголовке TCP [TCP] нет поля Length, однако опция TCP MSS и поле TCP Urgent имеют размер 16 битов. Этот документ задаёт простые улучшения для TCP и UDP, позволяющие использовать джамбограммы. Реализация TCP или UDP на узле IPv6, поддерживающем опцию Jumbo Payload, должна включать описанные здесь улучшения.

Примечание. 16-битовые контрольные суммы UDP и TCP становятся менее эффективными по мере роста числа учитываемых в них данных. Разработчики приложений могут учитывать это обстоятельство.

1.1 История документа

Этот документ объединяет и обновляет материалы, опубликованные ранее в двух отдельных документах.

  • Спецификация опции Jumbo ранее была представлена как часть спецификации IPv6 в RFC 1883, которые был заменён RFC 2460, где опция Jumbo Payload отсутствовала.

  • Спецификация усовершенствований TCP и UDP для поддержки джамбограмм была ранее задана в RFC 2147, отмененном данным документом.

2. Формат опции Jumbo Payload

Опция Jumbo Payload передаётся в заголовке IPv6 Hop-by-Hop Options, следующем сразу после заголовка IPv6. Для этой опции требуется выравнивание 4n + 2 (см. [IPv6], параграф 4.2). Формат опции показан на рисунке.

                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  |  Opt Data Len |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Jumbo Payload Length                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type

8-битовое значение C2 (шестнадцатеричное).

Opt Data Len

8-битовое значение 4.

Jumbo Payload Length

32-битовое целое число без знака, указывающее размер пакета IPv6 в октетах без учёта заголовка IPv6, но с включением заголовка Hop-by-Hop Options и всех прочих заголовков расширения. Должно быть больше 65 535.

3. Использование опции Jumbo Payload

Поле Payload Length в заголовке IPv6 должно иметь значение 0 в каждом пакете с опцией Jumbo Payload.

Если узел, понимаюший опцию Jumbo Payload, получает пакет IPv6 с Payload Length = 0 и Next Header = 0 (указывает заголовок Hop-by-Hop Options), для которого кадрирование канального уровня указывает наличие октетов после заголовка IPv6, узел должен обработать заголовок Hop-by-Hop Options для определения фактического размера содержимого (payload) из опции Jumbo Payload.

Опцию Jumbo Payload недопустимо использовать в пакетах с заголовком Fragment.

Протокол вышележащего уровня, использующий поле IPv6 Payload Length для расчёта значения поля размера пакета вышележащего уровня в псевдозаголовке контрольной суммы, описанном в параграфе 8.1 [IPv6], должен вместо этого применять в расчёте значение поля Jumbo Payload Length для пакетов с опцией Jumbo Payload.

Узлы, понимающие опцию Jumbo Payload, должны обнаруживать ряд возможных ошибок формата и, если пакет не отправлен по групповому адресу, указывать эти ошибки, передавая отправителю пакета сообщение ICMP Parameter Problem [ICMPv6]. Ниже указаны ошибки и значения полей Code и Pointer в сообщении Parameter Problem.

     Ошибка: IPv6 Payload Length = 0 и
             IPv6 Next Header = Hop-by-Hop Options, 
             но опции Jumbo Payload нет.

             Code: 0
             Pointer: старший октет поля IPv6 Payload Length.

     Ошибка: IPv6 Payload Length != 0, 
             но имеется опция Jumbo Payload.

             Code: 0
             Pointer: поле Option Type в опции Jumbo Payload.

     Ошибка: Jumbo Payload присутствует, но 
             Jumbo Payload Length < 65 536.

             Code: 0
             Pointer: старший октет поля Jumbo Payload Length.

     Ошибка: Jumbo Payload присутствует
             вместе с заголовком Fragment.

             Code: 0
             Pointer: старший октет заголовка Fragment.

От узла, не понимающего опцию Jumbo Payload, ожидаются указанные ниже отклики на приём джамбограммы.

     Ошибка: IPv6 Payload Length = 0 и
             IPv6 Next Header = Hop-by-Hop Options

             Code: 0
             Pointer: старший октет поля IPv6 Payload Length.

     Ошибка: IPv6 Payload Length != 0 и
             присутствует опция Jumbo Payload.

             Code: 2
             Pointer: поле Option Type опции Jumbo Payload.

4. Джамбограммы UDP

16-битовое поле Length в заголовке UDP ограничивает общий размер пакета UDP (заголовко UDP и данные) значением 65 535 октетов. Этот документ задаёт изменение UDP для ослабления этого ограничения. Пакеты UDP размером больше 65 535 октетов можно передавать с UDP Length = 0, разрешая получателю определить фактический размер пакета UDP из Jumbo Payload Length1. Отметим, что ранее значение UDP Length = 0 считалость недействительным, поскольку размер пакета UDP учитывает заголовок UDP и должен быть не меньше 8.

Конкретные требования для отправки джамбограмм UDP приведены ниже.

Значение Length = 0 в заголовке пакета UDP устанавливается тогда и только тогда, когда суммарный размер заголовка и данных UDP превышает 65 535 октетов.

Пакет IPv6 с таким большим пакетом UDP будет обязательно включать опцию Jumbo Payload в заголовке Hop-by-Hop Options и поле Jumbo Payload Length в этой опции должно указывать сумму фактического размера заголовка и данных UDP и размера всех заголовков расширения IPv6 между заголовками IPv6 и UDP.

При расчёте контрольной суммы UDP для псевдозаголовка [IPv6] (параграф 8.1) используется фактический размер заголовка и данных UDP, а не 0.

Конкретные требования для приема джамбограмм UDP приведены ниже.

При получении пакета UDP фактический размер заголовка и данных UDP определяется из поля IPv6 Jumbo Payload Length вычитанием размера всех заголовков расширения между заголовками IPv6 и UDP тогда и только тогда, когда указано Length = 0 в заголовке UDP.

При получении пакета с UDP Length = 0, но без опции (пакет IPv6 не является джамбограммой) для указанного выше расчёта используется поле Payload Length в заголовке IPv6 вместо поля Jumbo Payload Length.

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

5. Джамбограммы TCP

Поскольку в заголовке TCP нет поля размера, величина отдельного пакета TCP не ограничивается. Однако значение MSS, согласуемое при организации соединения, ограничивает максимальный размер передаваемого пакета TCP, а поле Urgent Pointer не позволяет указать данные сверх 65 535 байтов.

5.1 TCP MSS

При определении значения MSS для передачи устанавливается MSS = 65 535, если MTU непосредственно подключённого интерфейса за вычетом 60 [IPv6] (параграф 8.3) составляет не меньше 65 535.

При получении MSS = 65 535 оно трактуется как бесконечность и фактическое значение MSS определяется вычитанием 60 из значения, полученного с помощтю Path MTU Discovery [MTU-DISC] для пути к партнёру TCP.

5.2 TCP Urgent Pointer

Проблему Urgent Pointer можно решить добавлением опции TCP Urgent Pointer Option. Однако одновременное использование приложениями джамбограмм и Urgent Pointer, поэтому достаточно будет менее жёсткого изменения, подобного MSS.

Когда пакет TCP передаётся с Urgent Pointer (установлен бит URG), сначала рассчитывается смещение от Sequence Number до Urgent Pointer. Если смещение меньше 65 535, оно указывается в поле Urgent и продолжается обычная обработка TCP. Если смещение больше 65 535 и не меньше размера данных TCP, в поле Urgent Pointer указывается значение 65 535 и продолжается обычная обработка TCP. В противном случае пакет TCP требуется разделить на два. Первый пакет будет содержать данные вплоть (но не включая) до значения Urgent Pointer, а в поле Urgent устанавливается значение 65 535 для индикации выхода Urgent Pointer за пределы этого пакета. Вторая часть пакета может передаваться с обычной установкой поля Urgent.

Примечание. Первая часть пакета не обязательно включает все данные до Urgent Pointer и может быть короче, заканчиваясь в интервале 65 534 байта от Urgent Pointer, чтобы смещение Urgent Pointer во второй части было меньше 65 535 байтов.

Для входной обработки TCP при получении пакета TCP с флагом URG и полем Urgent = 65 535, значение Urgent Pointer рассчитывается с использованием смещения, равного размеру данных TCP, а не смещению в поле Urgent.

Следует также отметить возможность использования больших окон TCP с помощью опции TCP Window Scale [TCP-EXT], несмотря на 16-битовый размер обычного окна TCP.

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

Опция Jumbo Payload и джамбограммы TCP/UDP не создают новых проблем безопасности.

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

David A. Borman

Berkeley Software Design, Inc.

4719 Weston Hills Drive

Eagan, MN 55123

USA

Phone: +1 612 405 8194

EMail: dab@bsdi.com

Stephen E. Deering

Cisco Systems, Inc.

170 West Tasman Drive

San Jose, CA 95134-1706

USA

Phone: +1 408 527 8213

EMail: deering@cisco.com

Robert M. Hinden

Nokia

313 Fairchild Drive

Mountain View, CA 94043

USA

Phone: +1 650 625 2004

EMail: hinden@iprg.nokia.com


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

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

nmalykh@protokols.ru

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

[ICMPv6] Conta, A. and S. Deering, «ICMP for the Internet Protocol Version 6 (IPv6)», RFC 24632, December 1998.

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

[MTU-DISC] McCann, J., Deering, S. and J. Mogul, «Path MTU Discovery for IP Version 6», RFC 19814, August 1986.

[TCP] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981.

[TCP-EXT] Jacobson, V., Braden, R. and D. Borman, «TCP Extensions for High Performance», RFC 1323, May 1992.

[UDP] Postel, J., «User Datagram Protocol», STD 6, RFC 768, August 1980.

9. Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.


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

2Заменён RFC 4443. Прим. перев.

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

4Заменён RFC 8201. Прим. перев.

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

RFC 2661 Layer Two Tunneling Protocol «L2TP»

Network Working Group                                        W. Townsley
Request for Comments: 2661                                   A. Valencia
Category: Standards Track                                  cisco Systems
                                                               A. Rubens
                                                   Ascend Communications
                                                                 G. Pall
                                                                 G. Zorn
                                                   Microsoft Corporation
                                                               B. Palter
                                                        Redback Networks
                                                             August 1999

 

Протокол туннелирования на уровне 2 — L2TP

Layer Two Tunneling Protocol «L2TP»

PDF

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

Этот документ задает проект стандартного протокола Internet для сообщества Internet и служит приглашением к дискуссии в целях развития и совершенствования. Текущее состояние стандартизации и статус протокола можно узнать из документа Internet Official Protocol Standards (STD 1). Документ может распространяться без ограничений.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

Аннотация

В этом документе описан протокол туннелирования на уровне 2 (L2TP1). Документ STD 51, RFC 1661 определяет мультипротокольный доступ по протоколу PPP [RFC1661]. L2TP обеспечивает возможности туннелирования пакетов PPP через промежуточную сеть максимально прозрачным для приложений и конечных пользователей способом.

Оглавление

Ислючено в версии HTML.

1.0 Введение

PPP [RFC1661] определяет механизм инкапсуляции для доставки пакетов разных протоколов через соединения уровня 2 (L2) типа «точка-точка». Обычно пользователь организует соединение L2 с сервером доступа (NAS2), используя подходящий метод связи (например, модемное соединение через телефонную линию, ISDN, ADSL и т. п.) и протокол PPP «поверх» физического соединения. В такой конфигурации терминальные точки L2 и PPP размещаются на одном физическом устройстве (т. е., NAS).

L2TP расширяет модель PPP, позволяя разносить терминальные точки L2 и PPP на разные устройства, соединенные через сеть с коммутацией пакетов. С помощью L2TP пользователь организует соединение L2 с концентратором доступа (например, модемный пул, ADSL DSLAM и т. п.), а концентратор туннелирует кадры PPP в NAS. Это позволяет перенести реальную обработку пакетов PPP с терминального устройства L2.

Одним из очевидных преимуществ такого разделения является то, что взамен требования завершать соединения L2 на NAS (это может потребовать оплаты междугородных соединений) они могут заканчиваться на (локальном) концентраторе, который распространит сессию PPP через сетевую инфраструктуру совместного использования (например, Frame Relay или Internet). С точки зрения пользователя функциональных различий между этими вариантами просто не будет.

L2TP позволяет также решить проблему расщепления групп (multilink hunt-group splitting). Расширение Multilink PPP [RFC1990] требует, чтобы все каналы, образующие композитное соединение, были связаны с одним сервером NAS. Благодаря возможности расширения сессий PPP за пределы точки физического завершения, протокол L2TP может использоваться для организации завершения всех каналов на одном устройстве NAS. Это позволяет организовать многоканальные соединения даже в тех случаях, когда используется множество физических устройств NAS.

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

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

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

1.2 Термины

Analog Channel — аналоговый канал

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

Attribute Value Pair (AVP) — пара «атрибут-значение»

Объединение переменного размера с уникальным атрибутом (Attribute), представленным целым числом и значением (Value), содержащим реальные данные, идентифицируемые атрибутом. Множество AVP образуют управляющие сообщения (Control Message), служащие для организации, поддержки и удаления туннелей.

Call — вызов

Соединение (или попытка такового) между удаленной системой (Remote System) и LAC. Примером может служить телефонный звонок через сеть PSTN. Соединение (входящее или исходящее) между Remote System и LAC приводит к созданию сессии L2TP в ранее созданном туннеле между LAC и LNS. (см. также Session, Incoming Call, Outgoing Call).

Called Number — вызываемый номер

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

Calling Number — вызывающий номер

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

CHAP

Challenge Handshake Authentication Protocol [RFC1994] — протокол криптографически защищенной аутентификации PPP, в котором по линии не передается паролей в открытом виде.

Control Connection — управляющее соединение

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

Control Messages — управляющие сообщения

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

Digital Channel — цифровой канал

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

DSLAM

Модуль доступа по цифровым абонентским линиям (DSL3) — сетевое устройство, используемое для реализации сервиса DSL. Обычно представляет собой концентратор линий DSL в центральном офисе (CO) или местной станции.

Incoming Call — входящий вызов

Вызов, полученный LAC и туннелируемый на LNS (см. Call, Outgoing Call).

L2TP Access Concentrator (LAC) — концентратор доступа L2TP

Узел, который на одной стороне имеет конечные точки туннелей L2TP, а на другой стороне является партнером сетевого сервера L2TP (LNS). LAC размещается между LNS и удаленной системой, пересылая пакеты между ними. Пакеты от LAC к LNS требуют туннелирования L2TP в соответствии с данным документом. Соединение LAC с удаленной системой является локальным (см. Client LAC) или PPP-каналом.

L2TP Network Server (LNS) — сетевой сервер L2TP

Узел, который является конечной точкой туннеля L2TP и партнером LAC. LNS является логической точкой завершения сессии PPP, которая будет туннелироваться от удаленной системы через LAC.

Management Domain (MD) — домен управления

Сеть или сети, находящиеся под единым администрированием. Например, доменом управления для LNS может быть обслуживаемая им корпоративная сеть, а доменом управления LAC — ISP, который владеет управляет им.

Network Access Server (NAS) — сервер доступа в сеть

Устройство, обеспечивающее локальный сетевой доступ для пользователей через сеть удаленного доступа (например, PSTN). NAS может также служить в качестве LAC и/или LNS.

Outgoing Call — исходящий вызов

Вызов, организуемый LAC от имени LNS (см. Call, Incoming Call).

Peer — партнер

В контексте L2TP партнерами являются LAC или LNS. Партнером LAC является LNS и наоборот. В контексте PPP партнерами являются обе стороны соединения PPP.

POTS — телефонная сеть

Телефонная сеть общего пользования.

Remote System — удаленная система

Конечная система или маршрутизатор, подключенный к уделенной сети доступа (например, PSTN) и являющийся инициатором или адресатом вызова. Для обозначения удаленной системы используются также термины dial-up client или virtual dial-up client.

Session — сессия

Протокол L2TP ориентирован на соединения. LNS и LAC поддерживают состояние для каждого инициированного или принятого LAC вызова (Call). Сессия L2TP создается между LAC и LNS при организации сквозного соединения PPP между удаленной системой и LNS. Дейтаграммы, относящиеся к соединению PPP, передаются через туннель между LAC и LNS. Организованные сессии L2TP однозначно связаны с соответствующими вызовами (см. Call).

Tunnel — туннель

Туннели организуются между LAC и LNS. Туннель включает управляющее соединение и может также включать одну или множество сессий L2TP. Через туннель между LAC и LNS передаются инкапсулированные дейтаграммы PPP и управляющие сообщения.

Zero-Length Body (ZLB) Message — сообщение нулевого размера

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

2.0 Топология

На рисунке показан типовой случай использования L2TP. Целью является организация туннеля для кадров PPP между удаленной системой или клиентом LAC и LNS в домашней ЛВС.

                                                  [Домашняя ЛВС]
            [Клиент LAC]----------+                     |
                              ____|_____                +--[Хост]
                             |          |               |
               [LAC]---------| Internet |-----[LNS]-----+
                 |           |__________|               |
            _____|_____                                 :
           |           |
           |  PSTN     |
[Удален.]--|  Cloud    |
[система]  |           |                          [Домашняя ЛВС]
           |___________|                                |
                 |          ______________              +---[Хост]
                 |         |              |             |
               [LAC]-------| Frame Relay  |---[LNS]-----+
                           | или ATM      |             |
                           |______________|             :

Удаленная система инициирует организацию соединения PPP через телефонную сеть (PSTN Cloud) с LAC. После этого LAC туннелирует соединение PPP через Internet, Frame Relay или ATM Cloud до LNS, что обеспечивает доступ в домашнюю ЛВС. Удаленной системе предоставляется адрес из домашней ЛВС в результате согласования PPP NCP. Процедуры AAA4 доменом управления домашней ЛВС как для случая прямого подключения клиента к серверу доступа NAS.

Клиент LAC (хост с поддержкой L2TP) может также участвовать в создании туннеля в домашнюю ЛВС без привлечения отдельного LAC. В этом случае хост с программным клиентом LAC уже имеет соединение с публичной сетью Internet. Создается «виртуальное» соединение PPP и локальный клиент L2TP LAC создает туннель до LNS. Как и в предыдущем случае функции AAA будут обеспечиваться доменом управления домашней ЛВС.

3.0 Обзор протокола

L2TP использует два типа сообщений — управление и данные. Управляющие сообщения служат для организации, поддержки и удаления туннелей и вызовов. Сообщения с данными служат для инкапсуляции кадров PPP, передаваемых через туннель. Для управляющих сообщений используется надежный канал управления (Control Channel) в L2TP, обеспечивающий гарантированную доставку (см. параграф 5.1). При возникновении потери пакетов повторной передачи пакетов данных не производится.

+-------------------+
| Кадры PPP         |
+-------------------+    +-----------------------+
| Данные L2TP       |    | Управление L2TP       |
+-------------------+    +-----------------------+
| Канал данных L2TP |    | Канал управления L2TP |
| (без гарантий)    |    | (гарантиров. доставка)|
+------------------------------------------------+
|      Транспорт (UDP, FR, ATM и т. п.)          |
+------------------------------------------------+

Рисунок 3.0. Структура протокола L2TP.

На рисунке 3.0 показана передача кадров PPP и управляющих сообщений через каналы данных и управления L2TP. Кадры PPP передаются без гарантий доставки через канал данных с инкапсуляций сначала в L2TP, а затем в пакетный транспорт (UDP, Frame Relay, ATM и т. п.) Управляющие сообщения передаются через надежный канал управления L2TP в основной полосе того же пакетного транспорта.

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

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

3.1 Формат заголовка L2TP

Пакеты L2TP для управления и данных используют общий формат заголовков. Для необязательных полей пространство в пакете не используется при отсутствии поля. Отметим, что необязательные для пакетов данных поля Length, Ns и Nr являются обязательными в управляющих сообщениях.

Формат заголовков показан на рисунке.

 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|L|x|x|S|x|O|P|x|x|x|x|  Ver  |          Length (opt)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tunnel ID           |           Session ID          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Ns (opt)          |             Nr (opt)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Offset Size (opt)        |    Offset pad... (opt)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3.1. Формат заголовков L2TP.

Флаг типа (T) указывает тип сообщения (0 для данных, 1 для управляющих сообщений).

Установленный флаг размера (L) говорит о присутствии поля Length. В управляющих сообщениях этот бит должен быть установлен.

Флаги x зарезервированы для будущих расширений. Соответствующие биты должны устанавливаться в 0 при передаче и игнорироваться на приемной стороне.

Установленный флаг S говорит о наличии полей Ns и Nr. В управляющих сообщениях этот бит должен быть установлен.

Установленный флаг смещения (O) говорит о наличии поля Offset Size. В управляющих сообщениях этот бит должен быть сброшен (0).

Установленный флаг приоритета (P) означает, что этому сообщению с данными следует предоставить преимущество в локальных очередях и при передаче. Например, эхо-запросы LCP, используемые для сохранения живучести канала, следует передавать с установленным флагом приоритета. Если флаг не используется то при наличии локальной перегрузки сообщения keepalive могут теряться. Этот флаг используется только для сообщений с данными, а в управляющих сообщениях должно устанавливаться P = 0.

Поле Ver должно иметь значение 2, соответствующее версии сообщений с данными протокола L2TP, описанных в этом документе. Значение 1 зарезервировано для возможности детектирования пакетов L2F [RFC2341], которые могут приходить вперемешку с пакетами L2TP. Пакеты с неизвестным значением поля Ver должны отбрасываться.

Поле Length показывает общий размер сообщения в октетах.

Поле Tunnel ID служит идентификатором управляющего соединения. Туннели L2TP обозначаются идентификаторы с локальной значимостью. По этой причине один и тот же туннель может иметь на каждой стороне разные значения Tunnel ID. Поле Tunnel ID в сообщении предназначено для получателя, а не для отправителя. Значения Tunnel ID выбираются и информация о них передается в Assigned Tunnel ID AVP при создании туннеля.

Поле Session ID указывает идентификатор сессии в туннеле. Сессии L2TP обозначаются идентификаторами локальной значимости. Это означает, что одна и та же сессия может иметь разные значения Session ID на разных концах. Значение Session ID в каждом сообщении предназначено для получателя, а не отправителя. Значения Session ID выбираются и передаются в Assigned Session ID AVP при организации сессии.

Ns указывает порядковый номер передаваемого сообщения. Отсчет начинается с 0 и номер увеличивается на 1 для каждого последующего сообщения (модуль для нумерации 216). Дополнительная информация об использовании этого поля приводится в параграфах 5.8 и 5.4.

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

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

3.2 Типы управляющих сообщений

Message Type AVP (см. параграф 4.4.1) определяет конкретный тип передаваемого сообщения. Напомним (параграф 3.1), что это относится только к управляющим сообщениям (сообщениям с T = 1).

Данный документ определяет перечисленные ниже типы сообщений (описание и применение сообщений в параграфах 6.1 — 6.14).

Поддержка управляющих соединений

0 (резерв)

1 (SCCRQ) Start-Control-Connection-Request

2 (SCCRP) Start-Control-Connection-Reply

3 (SCCCN) Start-Control-Connection-Connected

4 (StopCCN) Stop-Control-Connection-Notification

5 (резерв)

6 (HELLO) Hello

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

7 (OCRQ) Outgoing-Call-Request

8 (OCRP) Outgoing-Call-Reply

9 (OCCN) Outgoing-Call-Connected

10 (ICRQ) Incoming-Call-Request

11 (ICRP) Incoming-Call-Reply

12 (ICCN) Incoming-Call-Connected

13 (резерв)

14 (CDN) Call-Disconnect-Notify

Сообщения об ошибках

15 (WEN) WAN-Error-Notify

Управление сеансами PPP

16 (SLI) Set-Link-Info

4.0 AVP для управляющих сообщений

Для обеспечения максимальной расширяемости с сохранением интероперабельности в L2TP используется однотипное представление типов и сообщений. Это представление называется AVP5 и используется в оставшейся части документа.

4.1 Формат AVP

Каждая пара AVP представляется в виде:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|H| rsvd  |      Length       |           Vendor ID           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Attribute Type        |        Attribute Value...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                  [до размера, заданного Length]...                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Первые 6 битов задают маску, описывающую общие атрибуты AVP.

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

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

Бит H7. Указывает на сокрытие данных в поле Attribute Value пары AVP. Это свойство может использоваться для предотвращения данных, которые не следует раскрывать (например, пользовательских паролей) в открытом виде внутри AVP. Процедура сокрытия AVP описана в параграфе 4.3.

Length. Задает число октетов (включая поле Overall Length и маску) в данной AVP. Значение Length можно рассчитать, добавив 6 к размеру поля Attribute Value в октетах. Само поле имеет размер 10 битов, что позволяет представлять поля размером до 1023 октетов в одной AVP. Минимальное значение поля Length для AVP составляет 6. В этом случае поле Attribute Value отсутствует.

Vendor ID. Значение из выделенного агентством IANA реестра SMI Network Management Private Enterprise Codes [RFC1700]. Значение 0, соответствующее принятым IETF атрибутам, используется для всех AVP, определенных в данном документе. Любой производитель, желающий реализовать свои расширения L2TP, может использовать свое значение Vendor ID вместе с приватными значениями Attribute, что гарантирует отсутствие конфликтов с расширениями других производителей и будущими расширениями IETF. Отметим, что 16 битов поля Vendor ID ограничивают число идентификаторов значением 65 535.

Attribute Type. Двухоктетное значение с уникальной интерпретацией среди всех AVP для данного Vendor ID.

Attribute Value. Реальное значение атрибута, заданного полями Vendor ID и Attribute Type. Это поле следует непосредственно за полем Attribute Type и включает число октетов до смещения, заданного полем Length (т. е., Length — 6 октетов заголовка). При Length = 6 это поле отсутствует.

4.2 Обязательные AVP

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

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

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

4.3 Сокрытие значений атрибутов AVP

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

Флаг H должен устанавливаться только в тех случаях, когда LAC и LNS известен общий секрет. Это тот же секрет, который служит для аутентификации туннеля (параграф 5.1.1). Если бит H установлен в любом из AVP данного управляющего сообщения, в этом сообщении должна также присутствовать Random Vector AVP и эта пара должна размещаться перед первым AVP с H = 1.

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

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Length of Original Value    |   Original Attribute Value ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ...                          |             Padding ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length of Original Attribute Value — это поле указывает размер исходного значения скрываемого атрибута в октетах. Это значение требуется сохранять, поскольку размер меняется в результате заполнения Padding.

Original Attribute Value — исходное значение скрываемого атрибута.

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

Для маскировки размера скрываемых данных в субформате может использоваться показанное выше заполнение. Поле Padding не учитывается в Length of Original Attribute Value, но меняет размер получаемой в результате AVP. Например, если скрывается 4-октетное значение атрибута, поле размера нескрытой AVP будет иметь значение 10 (6 + 4). После сокрытия размер AVP будет равен 6 + размер Attribute Value + размер Length of Original Attribute Value + Padding. Таким образом при 12 октетах заполнения размер AVP будет 6 + 4 + 2 + 12 = 24 октета.

После этого определяется хэш MD5 для конкатенации:

2 октета номера атрибута из AVP;

разделяемый секрет;

случайный вектор произвольной длины.

Используемый в этом хэше случайный вектор передается в поле Random Vector AVP. Эта пара Random Vector AVP должна помещаться отправителем в сообщение впереди всех скрываемых AVP. Один и тот же случайный вектор может использоваться для множества AVP в одном сообщении. При использовании разных векторов для сокрытия последовательных AVP новый Random Vector AVP должен помещаться перед первой AVP, к которой он будет применяться.

Хэш MD5 используется в операции XOR применительно к первым 16 (или меньше) октетам Hidden AVP Subformat и результат помещается в поле Attribute Value скрываемой пары Hidden AVP. Если размер Hidden AVP Subformat меньше 16 октетов, субформат преобразуется, как будто поле Attribute Value дополнено до 16 октетов перед операцией XOR, но меняются только октеты, реально присутствующие в Subformat , а размер AVP не меняется.

Если размер Subformat превышает 16 октетов, рассчитывается второе значение MD5 для потока октетов, состоящего из разделяемого секрета, за которым следует результат первой операции XOR. Полученное значение используется для операции XOR с вторым сегментом из 16 (или меньше) октетов Subformat и помещается в соответствующие октеты поля Value пары Hidden AVP.

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

Метод сокрытия был взят из RFC 2138 [RFC2138], заимствовавшего его, в свою очередь из раздела Mixing in the Plaintext книги Network Security, авторами которой являются Kaufman, Perlman и Speciner [KPS]. Ниже приведено подробное разъяснение этого метода.

Возьмем разделяемый секрет S, случайный вектор RV и значение атрибута AV. Разделим поле значения на 16-октетные блоки p1, p2 и т. д., дополнив при необходимости последний блок случайными данными до размера 16 октетов. Возьмем шифрованные блоки c(1), c(2) и т. д. Определим также промежуточные значения b1, b2 и т. д.

          b1 = MD5(AV + S + RV)   c(1) = p1 xor b1
          b2 = MD5(S  + c(1))     c(2) = p2 xor b2
                      .                       .
                      .                       .
                      .                       .
          bi = MD5(S  + c(i-1))   c(i) = pi xor bi

String будет содержать c(1)+c(2)+…+c(i), где + обозначает конкатенацию.

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

4.4 Описание AVP

В последующих параграфах рассматриваются все L2TP AVP, определяемые в данном документе.

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

4.4.1 AVP, применимые для всех управляющих сообщений

Message Type (все сообщения)

Message Type AVP (Attribute Type 0) идентифицирует управляющее сообщение и определяет контекст, в котором будет определяться точный смысл последующих AVP.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Message Type          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Message Type представляет собой 2-октетное целое число без знака.

Message Type AVP должна быть первой AVP в сообщении, следуя непосредственно после заголовка управляющего сообщения (определен в параграфе 3.1). Список определенных типов управляющих сообщений и их идентификаторы приведены в параграфе 3.2.

Бит обязательности (M) в Message Type AVP имеет специальное значение. Он относится не к данной AVP, как обычно, а ко всему управляющему сообщению. Таким образом, если в Message Type AVP установлен бит M а тип сообщения не известен реализации, туннель должен закрываться. Если бит M сброшен, реализация может игнорировать сообщение неизвестного типа. Флаг M должен устанавливаться для всех типов сообщений, определенных в этом документе. Эта AVP не может быть скрыта (бит H должен быть сброшен). Поле Length для этой AVP имеет значение 8.

Random Vector (все сообщения)

Random Vector AVP (Attribute Type 36) используется для того, чтобы разрешить сокрытие Attribute Value в AVP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Random Octet String ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Random Octet String может иметь произвольный размер, хотя рекомендуется использовать случайные векторы не короче 16 октетов. Строка содержит случайный вектор, используемый при расчете значения MD5 для извлечения или сокрытия значения Attribute Value в AVP (см. параграф 4.2).

В сообщении может присутствовать несколько Random Vector AVP. В этом случае для скрытых AVP используется ближайшая предшествующая пара Random Vector AVP. Данная AVP должна предшествовать первой AVP с установленным битом H.

Бит M для данной AVP должен иметь значение 1. Такую AVP недопустимо скрывать (бит H должен иметь значение 0). Поле Length в данной AVP имеет значение размера Random Octet String + 6.

4.4.2 Коды результатов и ошибок

Result Code (CDN, StopCCN)

Result Code AVP (Attribute Type 1) указывает причину разрыва управляющего канала или сессии.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Result Code          |        Error Code (opt)       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Error Message (opt) ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Result Code представляет собой 2-октетное целое число без знака. Необязательное поле Error Code также является 2-октетным целым числом без знака. За полем Error Code может следовать необязательное поле Error Message. Присутствие полей Error Code и Error Message указывается полем AVP Length. Поле Error Message содержит произвольную строку, обеспечивающую дополнительный (понятный человеку) текст, связанный с ошибкой. Текст для человека во всех сообщениях об ошибках должен задаваться в кодировке UTF-8 с использованием принятого по умолчанию языка (Default Language) [RFC2277].

Такие AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для таких AVP должен иметь значение 1. Поле Length имеет значение 8 при отсутствии Error Code и Error Message, 10 при наличии Error Code без Error Message и 10 + размер Error Message, если присутствуют код и сообщение об ошибке.

Определенные для сообщений StopCCN значения Result Code включают:

0 — резерв

1 — запрос общего типа для сброса управляющего соединения;

2 — типовая ошибка, проблему указывает Error Code;

3 — управляющий канал уже существует;

4 — запрашивающий не имеет полномочий на организацию управляющего канала;

5 — версия протокола у запрашивающего не поддерживает значение Error Code более новой версии;

6 — запрашивающий будет отключен (shut down);

7 — ошибка машины конечных состояний.

Определенные для сообщений CDN значения Result Code включают:

0 — резерв

1 — соединение разорвано в результате потери несущей;

2 — соединение разорвано по причине, указанной кодом ошибки;

3 — соединение разорвано административными мерами;

4 — отказ при соединении по причине недоступности (временно);

5 — отказ при соединении по причине недоступности (постоянная ошибка);

6 — некорректный адресат;

7 — отказ в соединении по причине отсутствия несущей;

8 — отказ в соединении по причине занятости линии;

9 — отказ в соединении по причине слабого сигнала вызова (dial tone);

10 — соединение не было организовано в течение интервала, отведенного устройством LAC;

11 — соединение организовано, но не найдено подходящего кадрирования.

Значения Error Code, определенные ниже, относятся не к каким-либо ошибкам для конкретных запросов L2TP, а к ошибкам протокола или формата сообщений. Если отклик L2TP указывает в своем Result Code ошибку общего типа, следует проверить значение кода General Error для определения причины ошибки. Ниже перечислены определенные в настоящее время значения кодов General Error и краткие описания.

0 — нет ошибок;

1 — нет управляющего соединения для данной пары LAC — LNS;

2 — некорректный размер;

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

4 — в настоящее время недостаточно ресурсов для обработки операции;

5 — значение Session ID некорректно в данном контексте;

6 — ошибка общего типа, специфическая для производителя LAC;

7 — повторите попытку; если устройству LAC известны другие возможные адресаты LNS, ему следует пытаться использовать один из них; это может служить руководством для LAC, работающего на основе политики LNS (например, наличие множества групп multilink PPP);

8 — сессия или туннель разорваны по причине получения неизвестной AVP с установленным флагом M (см. параграф 4.2). В сообщение об ошибке следует включать атрибут вызвавшей проблему AVP в (понятном человеку) текстовом формате.

При использовании кода General Error 6 следует включать дополнительную информацию об ошибке в поле Error Message.

4.4.3 AVP для контроля управляющих сообщений

Protocol Version (SCCRP, SCCRQ)

Protocol Version AVP (Attribute Type 2) показывает версию протокола L2TP у отправителя.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Ver      |     Rev       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Ver размером 1 октет содержит целое число без знака 1. Поле Rev имеет размер 1 октет и содержит целое число без знака 0. Это указывает протокол L2TP версии 1, вариант 0. Отметим, что это не то же самое, что номер версии, указываемый в заголовке каждого сообщения.

Данную AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для данной AVP должен иметь значение 1. Поле Length в данной AVP имеет значение 8.

Framing Capabilities (SCCRP, SCCRQ)

Framing Capabilities AVP (Attribute Type 3) показывает партнеру типы кадрирования, поддерживаемые или запрашиваемые отправителем.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Резерв для будущих типов кадрирования              |A|S|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Attribute Value является 32-битовой маской, в которой определены 2 бита. Бит A указывает поддержку асинхронного кадрирования, бит S — поддержку синхронного.

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

Данная AVP может быть скрытой (H = 1). Бит M в данной AVP должен быть установлен (1). Поле Length (без сокрытия) имеет значение 10.

Bearer Capabilities (SCCRP, SCCRQ)

Bearer Capabilities AVP (Attribute Type 4) показывает партнеру типы устройств, поддерживаемых аппаратными интерфейсами отправителя для исходящих вызовов.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                Резерв для будущих типов                   |A|D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Attribute Value является 32-битовой маской, в которой определены 2 бита. Бит A указывает поддержку аналогового доступа, бит D — поддержку цифрового доступа.

Устройствам LNS не следует запрашивать исходящих вызовов, которые задают Bearer Type AVP для типов устройств, не анонсированных в Bearer Capabilities AVP, полученных от LAC при организации управляющего соединения. При возникновении такой попытки она будет завершаться отказом.

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

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

Данная AVP может быть скрытой (бит H может быть установлен). Бит M для этой AVP должен иметь значение 1. Поле Length (до сокрытия) имеет значение 10.

Tie Breaker (SCCRQ)

Tie Breaker AVP (Attribute Type 5) показывает желание отправителя использовать только один туннель между данными LAC и LNS.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Tie Break Value...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                                 ...(64 бита)         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Tie Breaker Value представляет собой 8-октетное значение, которое служит для выбора одного туннеля, когда оба устройства LAC и LNS запрашивают туннельные соединения. Получатель SCCRQ должен проверить свою передачу SCCRQ отправителю и, при наличии таковой, сравнить значения Tie Breaker. По результатам сравнения выбирается меньшее из двух значений и соответствующий ему туннель должен быть сброшен без уведомления. Если значения совпадают, обе стороны должны сбросить свои туннели.

Если на получившей SCCRQ стороне нет значения Tie Breaker, «выигрывает» инициатор отправки Tie Breaker AVP. Если ни одна из сторон не использовала SCCRQ, организуются два раздельных туннеля.

Данную AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для данной AVP должен быть сброшен (0). Поле Length в данной AVP имеет значение 14.

Firmware Revision (SCCRP, SCCRQ)

Firmware Revision AVP (Attribute Type 6) показывает версию программного кода на устройстве.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Firmware Revision       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Firmware Revision представляет собой 2-октетное целое число без знака, формат представления версии определяется производителем.

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

Данная AVP может быть скрытой (бит H может быть установлен). Бит M для этой AVP должен иметь значение 0. Поле Length (до сокрытия) имеет значение 8.

Host Name (SCCRP, SCCRQ)

Host Name AVP (Attribute Type 7) указывает имя передавшего атрибут устройства LAC или LNS.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Host Name ... (произвольное число октетов)
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Host Name может иметь произвольный размер, но должно быть не короче 1 октета.

Следует использовать в этом поле по возможности уникальное имя. Для хостов, участвующих в DNS [RFC1034], подойдет полное доменное имя хоста.

Эту AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для данной AVP должен быть установлен (1). Поле Length в этой AVP равно размеру Host Name + 6.

Vendor Name (SCCRP, SCCRQ)

Vendor Name AVP (Attribute Type 8) указывает имя производителя (возможно, для человека), описывающее тип используемого устройства LAC или LNS.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Vendor Name ...(произвольное число октетов)
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Vendor Name представляет имя производителя в строке символов. Предназначенный для людей текст должен использовать кодировку UTF-8 для принятого по умолчанию языка (Default Language [RFC2277]).

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length в этой AVP равно размеру Vendor Name + 6.

Assigned Tunnel ID (SCCRP, SCCRQ, StopCCN)

Assigned Tunnel ID AVP (Attribute Type 9) представляет идентификатор, который будет присвоен данному туннелю отправителем.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Assigned Tunnel ID       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Assigned Tunnel ID представляет собой 2-октетное целое число без знака, отличное от 0.

Assigned Tunnel ID AVP организует значение, используемое для мультиплексирования и демультиплексирования туннелей между LNS и LAC. Партнер L2TP должен помещать это значение в поле заголовка Tunnel ID всех сообщений, передаваемых через данный туннель. До получения от партнера Assigned Tunnel ID AVP управляющие сообщения должны передаваться в туннель с Tunnel ID = 0 в заголовках.

В управляющем сообщении StopCCN пара Assigned Tunnel ID AVP должна совпадать с Assigned Tunnel ID AVP, переданной изначально принимающему партнеру, что позволяет идентифицировать туннель даже при получении StopCCN раньше, чем Assigned Tunnel ID AVP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length в этой AVP (до сокрытия) имеет значение 8.

Receive Window Size (SCCRQ, SCCRP)

Receive Window Size AVP (Attribute Type 10) указывает размер приемного окна, предлагаемый удаленным партнером.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Window Size           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Window Size представляет собой 2-октетное целое число без знака.

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

Эту AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для данной AVP должен быть установлен (1). Length = 8.

Challenge (SCCRP, SCCRQ)

Challenge AVP (Attribute Type 11) показывает желание партнера аутентифицировать конечные точки туннеля с использованием механизма в стиле CHAP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Challenge ... (произвольное число октетов)
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Challenge представляет собой один или множество октетов случайных денных.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP равно размеру Challenge + 6.

Challenge Response (SCCCN, SCCRP)

Response AVP (Attribute Type 13) предоставляет отклик на полученный вызов.

Формат поля Attribute Value для данной AVP показан ниже.

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

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                              ... (16 октетов)        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Response имеет размер 16 октетов и представляет собой отклик на вызов в стиле CHAP [RFC1994].

Данная AVP должна присутствовать в SCCRP или SCCCN, если в предшествующем SCCRQ или SCCRP был получен вызов. В качестве значения ID при расчете отклика CHAP используется значение Message Type AVP для данного сообщения (2 для SCCRP или 3 для SCCCN).

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 22.

4.4.4 AVP для управления вызовами

Q.931 Cause Code (CDN)

Q.931 Cause Code AVP (Attribute Type 12) используется для предоставления дополнительной информации в случаях незапрошенного разрыва соединений.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Cause Code           |   Cause Msg   | Advisory Msg...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

В поле Cause Code возвращается код Q.931 Cause, а в Cause Msg код сообщения Q.931 (например, DISCONNECT), связанного с Cause Code. Оба значения представляются в естественной кодировке ITU [DSS1]. Дополнительный ASCII-текст в поле Advisory Message (его присутствие указывается значением поля AVP Length) служит для дополнительного разъяснения причины разрыва соединения.

Эту AVP недопустимо скрывать (бит H должен иметь значение 0). Бит M для данной AVP должен быть установлен (1). Поле Length в этой AVP равно размеру Advisory Message + 9.

Assigned Session ID (CDN, ICRP, ICRQ, OCRP, OCRQ)

Assigned Session ID AVP (Attribute Type 14) представляет идентификатор, выделяемый для данной сессии отправителем.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Assigned Session ID       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Assigned Session ID представляет собой 2-октетное целое число без знака, отличное от 0.

Assigned Session ID AVP обеспечивает идентификатор, служащий для мультиплексирования и демультиплексирования данных, направляемых через туннель между LNS и LAC. Партнер L2TP должен помещать это значение в поле заголовка Session ID всех сообщений, которые будут передаваться через туннель во время существования данной сессии. До получения от партнера Assigned Session ID AVP, все управляющие сообщения должны передаваться ему с Session ID = 0 в заголовках.

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

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 8.

Call Serial Number (ICRQ, OCRQ)

Call Serial Number AVP (Attribute Type 15) показывает идентификатор, присвоенный соединению LAC или LNS.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Call Serial Number                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Call Serial Number имеет размер 32 бита.

Значение Call Serial Number предназначено для администраторов на обеих сторонах туннеля и позволяет идентифицировать соединения при поиске неисправностей. Значения Call Serial Number следует устанавливать в порядке возрастания и обеспечивать долговременную уникальность нумерации для всех связанных между собой устройств LNS и LAC.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Minimum BPS (OCRQ)

Minimum BPS AVP (Attribute Type 16) показывает минимально допустимую скорость в линии для данного вызова.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Minimum BPS                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Minimum BPS представляет собой 32-битовое значение, указывающее скорость в бит/сек.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Maximum BPS (OCRQ)

Maximum BPS AVP (Attribute Type 17) показывает максимально допустимую скорость в линии для этого вызова.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Maximum BPS                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Minimum BPS представляет собой 32-битовое значение, указывающее скорость в бит/сек.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Bearer Type (ICRQ, OCRQ)

Bearer Type AVP (Attribute Type 18) представляет тип входящего или исходящего вызова.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           резерв для будущих типов вызовов                |A|D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Bearer Type представляет собой 32-битовую маску, которая показывает свойства (ICRQ) или требования (OCRQ) для вызова. Установленный бит A показывает, что вызов относится к аналоговым каналам, бит D — к цифровым. Установка обоих флагов сразу показывает, что вызовы не различаются или могут размещаться на обоих типах каналов.

Биты поля Value данной AVP должны устанавливаться устройством LNS для OCRQ только в тех случаях, когда они были установлены в Bearer Capabilities AVP, полученной от LAC при организации управляющего соединения.

В ICRQ можно не устанавливать ни один из битов A и D. Это будет говорить о том, что вызов принимается не по физическому каналу (например, если LAC и PPP размещаются в одной подсистеме).

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Framing Type (ICCN, OCCN, OCRQ)

Framing Type AVP (Attribute Type 19) представляет тип кадрирования для входящих или исходящих вызовов.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           резерв для будущих типов кадрирования           |A|S|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Framing Type представляет собой 32-битовую маску, которая показывает тип кадрирования PPP, запрашиваемый для OCRQ, или согласованный тип кадрирования PPP для OCCN или ICCN. Тип кадрирования может служить модулю PPP на устройстве LNS индикацией опций для использования при согласовании LCP [RFC1662].

Бит A показывает асинхронное кадрирование, бит S — синхронное. Для OCRQ могут устанавливаться оба бита, указывая возможность использования любого типа кадрирования.

Биты поля Value данной AVP должны устанавливаться устройством LNS для OCRQ только в тех случаях, когда они были установлены в Framing Capabilities AVP, полученной от LAC при организации управляющего соединения.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Called Number (ICRQ, OCRQ)

Called Number AVP (Attribute Type 21) показывает телефонный номер для звонка в OCRQ или номер звонящего в ICRQ.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Called Number... (произвольное число октетов)                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Called Number представляет собой строку ASCII. Для согласования интерпретации значений может потребоваться контакт между администраторами LAC и LNS.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Called Number.

Calling Number (ICRQ)

Calling Number AVP (Attribute Type 22) показывает телефонный номер вызывающей стороны при входящем звонке.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Calling Number... (произвольное число октетов)                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Calling Number представляет собой строку ASCII. Для согласования интерпретации значений может потребоваться контакт между администраторами LAC и LNS.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Calling Number.

Sub-Address (ICRQ, OCRQ)

Sub-Address AVP (Attribute Type 23) представляет дополнительные сведения о звонящем.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Sub-Address ... (произвольное число октетов)                  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Sub-Address представляет собой строку ASCII. Для согласования интерпретации значений может потребоваться контакт между администраторами LAC и LNS.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Sub-Address.

(Tx) Connect Speed (ICCN, OCCN)

(Tx) Connect Speed BPS AVP (Attribute Type 24) показывает скорость среды, выбранной для попытки соединения.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             BPS                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле BPS представляет собой 4-октетное значение, задающее скорость в бит/сек.

При наличии необязательной Rx Connect Speed AVP значение данной AVP представляет скорость передачи с точки зрения LAC (т. е.. потока данных от LAC к удаленной системе). При отсутствии Rx Connect Speed скорость соединения между удаленной системой и LAC предполагается одинаковой для обоих направлений и представленной данной AVP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Rx Connect Speed (ICCN, OCCN)

Rx Connect Speed AVP (Attribute Type 38) представляет скорость соединения с точки зрения LAC (поток данных от удаленной системы к LAC).

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           BPS (H)             |            BPS (L)            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле BPS представляет собой 4-октетное значение, задающее скорость в бит/сек.

Наличие данной AVP предполагает возможную асимметрию соединения в части скорости.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Physical Channel ID (ICRQ, OCRP)

Physical Channel ID AVP (Attribute Type 25) представляет номер физического канала, используемого для вызова (зависит от производителя).

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Physical Channel ID                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Physical Channel ID представляет собой 4-октетное значение, которое может использоваться только в целях протоколирования.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 10.

Private Group ID (ICCN)

Private Group ID AVP (Attribute Type 37) используется LAC для индикации связи данного вызова с конкретной группой заказчиков.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Private Group ID ... (произвольное число октетов)          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Private Group ID представляет собой строку октетов произвольной длины.

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

Private Group ID представляет собой строку, соответствующую таблице в LNS, определяющей характеристики указанной группы. LAC может определить Private Group ID из отклика RADIUS, локальной конфигурации или иных источников.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Private Group ID.

Sequencing Required (ICCN, OCCN)

Sequencing Required AVP (Attribute Type 39) показывает устройству LNS, что в канале данных всегда должны присутствовать порядковые номера.

Данная AVP не имеет поля Attribute Value.

Сокрытие данной AVP недопустимо (H = 0). Бит M для данной AVP должен быть установлен (1), Length = 6.

4.4.5 AVP для Proxy LCP и аутентификации

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

Initial Received LCP CONFREQ (ICCN)

Initial Received LCP CONFREQ AVP (Attribute Type 26) предоставляет LNS значение Initial CONFREQ, полученное LAC от партнера PPP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | LCP CONFREQ... (произвольное число октетов)                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле LCP CONFREQ содержит копию тела первого CONFREQ, начиная с первой опции в теле сообщения LCP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер CONFREQ.

Last Sent LCP CONFREQ (ICCN)

Last Sent LCP CONFREQ AVP (Attribute Type 27) предоставляет LNS значение Last CONFREQ, переданное LAC партнеру PPP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | LCP CONFREQ... (произвольное число октетов)                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле LCP CONFREQ содержит копию тела последнего CONFREQ, переданного клиенту для завершения согласования LCP, начиная с первой опции в теле сообщения LCP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер CONFREQ.

Last Received LCP CONFREQ (ICCN)

Last Received LCP CONFREQ AVP (Attribute Type 28) предоставляет LNS значение Last CONFREQ, полученное LAC от партнера PPP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | LCP CONFREQ... (произвольное число октетов)                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле LCP CONFREQ содержит копию тела последнего CONFREQ, полученного от клиента для завершения согласования LCP, начиная с первой опции в теле сообщения LCP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер CONFREQ.

Proxy Authen Type (ICCN)

Proxy Authen Type AVP (Attribute Type 29) определяет, следует ли пользоваться прокси-аутентификацией.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Authen Type          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Authen Type представляет собой 2-октетное целое число без знака.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 8.

Определены следующие значения Authen Type:

0 — резерв;

1 — обмен username/password в форме текста;

2 — PPP CHAP;

3 — PPP PAP;

4 — без аутентификации;

5 — Microsoft CHAP версии 1 (MSCHAPv1).

Данная AVP должна присутствовать, если используется прокси-аутентификация. При отсутствии данной пары предполагается, что данный партнер не может выполнять прокси-аутентификацию — это требует перезапуска фазы аутентификации на устройстве LNS, если клиент уже вошел в эту фазу взаимодействия с LAC (может определяться Proxy LCP AVP при ее наличии).

Для каждого типа аутентификации далее следуют соответствующие AVP.

Proxy Authen Name (ICCN)

Proxy Authen Name AVP (Attribute Type 30) указывает имя аутентифицирующего клиента при использовании прокси-аутентификации.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Authen Name... (произвольное число октетов)                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Данная AVP должна присутствовать в сообщениях, включающих Proxy Authen Type AVP со значениями 1, 2, 3, 5. Может оказаться желательным сокрытие данной AVP, поскольку имя указывается открытым текстом.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер текстовой строки с именем.

Proxy Authen Challenge (ICCN)

Proxy Authen Challenge AVP (Attribute Type 31) указывает запрос (challenge), переданный LAC партнеру PPP при использовании прокси-аутентификации.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Challenge... (произвольное число октетов)                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Challenge представляет собой строку из одного или множества октетов.

Данная AVP должна присутствовать для Proxy Authen типов 2 и 5. Поле Challenge содержит значение CHAP challenge, представленное клиенту устройством LAC.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Challenge.

Proxy Authen ID (ICCN)

Proxy Authen ID AVP (Attribute Type 32) указывает идентификатор для аутентификации PPP, которая была начата между LAC и партнером PPP при использовании прокси-аутентификации.

Формат поля Attribute Value для данной AVP показан ниже.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    резерв     |      ID       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

ID представляет собой 2-октетное целое число без знака; старший октет должен иметь значение 0.

Proxy Authen ID AVP должна присутствовать для Proxy Authen типов 2, 3 и 5. Для типов 2 и 5 поле ID содержит значение ID, представленное клиенту LAC в своем Challenge, для типа 3 — значение Identifier в Authenticate-Request.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0).

Proxy Authen Response (ICCN)

Proxy Authen Response AVP (Attribute Type 33) указывает отклик PPP Authentication, полученный LAC от партнера PPP при использовании прокси-аутентификации.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Response... (произвольное число октетов)                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поле Response представляет собой строку октетов.

Данная AVP должна присутствовать для Proxy Authen типов 1, 2, 3, 5. Поле Response содержит клиентский отклик на вызов (challenge). Для типов 2 и 5 это поле указывает значение отклика, полученное LAC, для типов 1 и 3 — пароль (в открытом виде), полученный LAC от клиента. При использовании текстовых паролей рекомендуется скрывать данную AVP.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть сброшен (0). Поле Length (до сокрытия) в этой AVP имеет значение 6 + размер Response.

4.4.6 AVP для статуса вызовов

Call Errors (WEN)

Call Errors AVP (Attribute Type 34) используется LAC для передачи информации об ошибках устройству LNS.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Reserved              |        CRC Errors (H)         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         CRC Errors (L)        |        Framing Errors (H)     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Framing Errors (L)    |        Hardware Overruns (H)  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Hardware Overruns (L) |        Buffer Overruns (H)    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Buffer Overruns  (L)  |        Time-out Errors (H)    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Time-out Errors (L)   |        Alignment Errors (H)   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Alignment Errors (L)  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Reserved — не используется и должно иметь значение 0;

CRC Errors — число кадров PPP с ошибками CRC, принятых с момента организации соединения;

Framing Errors — число принятых пакетов PPP с недопустимым кадрированием;

Hardware Overruns — число фактов переполнения приемного буфера с момента организации соединения;

Buffer Overruns — число фактов переполнения буфера с момента организации соединения;

Time-out Errors — число тайм-аутов с момента организации соединения;

Alignment Errors — число ошибок выравнивания с момента организации соединения.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 32.

ACCM (SLI)

ACCM AVP (Attribute Type 35) используется LNS для информирования LAC о параметрах ACCM согласованных с партнером PPP.

Формат поля Attribute Value для данной AVP показан ниже.

       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Reserved             |    Send ACCM (H)              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Send ACCM   (L)      |    Receive ACCM (H)           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Receive ACCM  (L)    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поля Send ACCM и Receive ACCM имеют размер 4 октета каждое, а перед ними размещается 2-октетное резервное поле. Значение Send ACCM устройству LAC следует использовать для обработки пакетов, передаваемых в соединение. Значение Receive ACCM устройству LAC следует использовать для обработки пакетов, принимаемых из соединения. По умолчанию LAC для обоих полей использует значение 0xFFFFFFFF. Устройствам LAC следует пользоваться значениями этих полей, если у них нет конкретной конфигурационной информации, указывающей, что запрошенную маску требуется изменить для выполнения операции.

Эта AVP может быть скрытой (бит H может быть установлен). Бит M для данной AVP должен быть установлен (1). Поле Length (до сокрытия) в этой AVP имеет значение 16.

5.0 Работа протокола

Действия по организации туннелирования сессии PPP с использованием L2TP включают два этапа: (1) организация управляющего соединения (Control Connection) для туннеля и (2) организация сессии по входящему или исходящему запросу на соединение. Туннель и соответствующее управляющее соединение должны быть организованы до того, как будет инициирован входящий или исходящий вызов. Сессия L2TP должна быть организована до того, как L2TP начнет туннелировать кадры PP. В одном туннеле может быть организовано множество сессий, а между парой LAC и LNS может существовать множество туннелей.

                          +-----+                               +-----+
                          |     |~~~~~~~~~~Туннель L2TP~~~~~~~~~|     |
                          | LAC |                               | LNS |
                          |     #####Управляющее соединение######     |
 [Удален.]                |     |                               |     |
 [система]-----Вызов---------*============Сессия L2TP==============*  |
   PPP +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  |
                          |     |                               |     |
 [Удален.]                |     |                               |     |
 [система]-----Вызов---------*============Сессия L2TP==============*  |
   PPP +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  |
                          |     |                               |     |
                          |     |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|     |
                          +-----+                               +-----+

Рисунок 5.1. Туннелирование PPP

5.1 Организация управляющего соединения

Control Connection представляет собой начальное соединение, которое должно быть организовано между LAC и LNS до того, как можно будет организовать какие-либо сессии. Организация управляющего соединения включает обеспечение идентификации партнера, определение версии L2TP у него, кадрирование, согласование возможностей и т. п.

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

      LAC или LNS  LAC или LNS
      -----------  ----------
      SCCRQ -> 
                   <- SCCRP
      SCCCN ->
                   <- ZLB ACK

Сообщение ZLB ACK передается в тех случаях, когда в очереди для данного партнера нет других сообщений.

5.1.1 Аутентификация туннеля

L2TP включает простой, необязательный механизм (похожий на CHAP [RFC1994]) аутентификации туннеля в процессе организации управляющего соединения. Если LAC или LNS желает проверить идентичность контактирующего с ним партнера в сообщение SCCRQ или SCCRP включается Challenge AVP. При получении Challenge AVP в SCCRQ или SCCRP, должна быть передана Challenge Response AVP в SCCRP или SCCCN, соответственно. Если полученный отклик не соответствует ожидаемому от партнера, организация туннеля должна блокироваться.

Для участия в аутентификации туннеля устройства LAC и LNS должны знать общий секрет. Это тот же секрет, который применяется для сокрытия AVP (см. параграф 4.3). Описание AVP для запросов и откликов дано в параграфе 4.4.3.

5.2 Организация сессии

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

5.2.1 Организация входящего вызова

Организация сессии состоит из обмена тремя сообщениями, как показано ниже.

      LAC         LNS
      ---         ---
      (Обнаружен вызов)

      ICRQ ->
               <- ICRP
      ICCN ->
               <- ZLB ACK

Сообщение ZLB ACK передается в тех случаях, когда в очереди для данного партнера нет других сообщений.

5.2.2 Организация исходящего вызова

Организация сессии состоит из обмена тремя сообщениями, как показано ниже.

      LAC         LNS
      ---         ---
               <- OCRQ
      OCRP ->

      (Выполнена обработка вызова)

      OCCN ->
               <- ZLB ACK

Сообщение ZLB ACK передается в тех случаях, когда в очереди для данного партнера нет других сообщений.

5.3 Пересылка кадров PPP

По завершении организации туннеля из кадров PPP от удаленной системы, принимаемых LAC, вырезается CRC, байты канального кадрирования и «прозрачности», после чего выполняется инкапсуляция в L2TP и пересылка через подходящий туннель. LNS получает пакеты L2TP и обрабатывает инкапсулированные кадры PPP, как будто они были получены от локального интерфейса PPP.

Отправитель сообщения, связанного с конкретной сессией и туннелем, помещает идентификаторы Session ID и Tunnel ID (задается его партнером) в одноименные поля заголовков всех исходящих сообщений. С помощью этих полей кадры PPP мультиплексируются и демультиплексируются через один туннель между парой устройств LNS и LAC. Между конкретной парой устройств LNS и LAC может существовать множество туннелей, в каждом из которых быть организовано множество сессий.

Нулевые значения идентификаторов сессии и туннеля имеют специальное значение и недопустимо применять их в качестве Assigned Session ID или Assigned Tunnel ID. Для случаев когда значение Session ID еще не присвоено партнером (т. е., в процессе организации новой сессии или туннеля), в поле Session ID должно помещаться значение 0, а в сообщении должна использоваться Assigned Session ID AVP для идентификации сессии. Аналогично, для случаев когда значение Tunnel ID еще не было присвоено партнером, в поле Tunnel ID должно помещаться значение 0 с использованием для идентификации туннеля Assigned Tunnel ID AVP.

5.4 Использование порядковых номеров в канале данных

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

В отличии от канала управления L2TP, канал данных не использует порядковые номера для повтора передачи утерянных сообщений с данными. Порядковые номера в сообщениях с данными могут использоваться для обнаружения потери пактов и/или восстановления порядка, нарушенного при транспортировке. LAC может запросить включение порядковых номеров в сообщения сданными с помощью Sequencing Required AVP (см. параграф 4.4.6). Если данная AVP присутствует при организации сессии, порядковые номера должны включаться во все кадры. При отсутствии данной AVP использование порядковых номеров определяет LNS. Устройство LNS может включить или отключить использование порядковых номеров в сообщениях в любой момент, просто добавляя или исключая эти номера для передаваемых им пакетов. Таким образом, если устройство LAC получает сообщение с данными, включающее порядковый номер, оно должно начать использование порядковых номеров в передаваемых после этого сообщениях с данными. Если LNS возобновляет использование порядковых номеров после отказа, нумерация продолжается с того значения, на котором она была прервана ранее.

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

5.5 Keepalive (Hello)

Механизм keepalive используется в L2TP для того, чтобы отличить отказы в туннеле от продолжительных интервалов бездействия. Для этого используются управляющие сообщения Hello (см. параграф 6.5), передаваемые по истечении заданного интервала с момента приема последнего сообщения (данные или управление) из туннеля. Как и для прочих управляющих сообщений, если сообщение Hello не было доставлено, считается, что туннель не работоспособен и выполняется его сброс. Механизм сброса на транспортном уровне вкупе с сообщениями Hello обеспечивает обнаружение отказов в туннеле между LNS и LAC с любой стороны туннеля.

5.6 Разрыв сессии

Разрыв сессии может быть инициирован LAC или LNS и реализуется путем отправки управляющего сообщения CDN. После завершения последней сессии может быть разорвано и управляющее соединение (обычно так и происходит). Ниже приведен пример обмена управляющими соединениями для этого случая:

      LAC или LNS  LAC или LNS

      CDN ->
      (Очистка)

                   <- ZLB ACK
                     (Очистка)

 

5.7 Разрыв управляющего соединения

Разрыв управляющего соединения может быть инициирован LAC или LNS и выполняется путем передачи одного управляющего сообщения StopCCN. Получатель сообщения StopCCN должен передать ZLB ACK для подтверждения приема и поддерживать состояние управляющего соединения для корректного восприятия повторов StopCCN в течение по крайней мере интервала полного цикла повтора передачи (на случай потери ZLB). Рекомендуемая продолжительность полного цикла повтора передачи составляет 31 сек. (см. параграф 5.8). Ниже приведен пример обмена управляющими сообщениями.

      LAC или LNS  LAC или LNS

      StopCCN ->
      (Очистка)

                   <- ZLB ACK
                      (Ожидание)
                      (Очистка)

Реализация может «погасить» туннель целиком вместе с организованными в нем сессиями, передав StopCCN. Таким образом, не требуется разрывать каждую сессию отдельно при полном разрыве туннеля.

5.8 Гарантированная доставка управляющих сообщений

L2TP обеспечивает гарантированный транспорт для всех управляющих сообщений. Поля Nr и Ns в заголовке управляющего сообщения (см. параграф 3.1) относятся к этому транспорту. Функции верхнего уровня L2TP не связаны с повтором передачи и соблюдением порядка доставки управляющих сообщений. Использование скользящего окна порядковых номеров обеспечивает контроль перегрузок и повтор передачи управляющих сообщений. Каждый из партнеров поддерживает свое состояние для порядковых номеров передаваемых через туннель сообщений.

Порядковые номера передаваемых сообщений Ns начинаются с 0. В каждом следующем передаваемом сообщении порядковый номер увеличивается на 1. Модуль счетчика порядковых номеров составляет 65536. Порядковый номер в заголовке принятого сообщения рассматривается, как не превышающий последний принятый номер, если его значение попадает в диапазон, включающий 32767 предшествующих номеров и последний принятый номер. Например, если последний принятый номер равен 15, сообщения с номерами от 0 до 15 и от 32784 до 65535 будут рассматриваться, как сообщения с номерами меньше последнего. Такие сообщения трактуются, как дубликаты ранее принятых сообщений и при обработке игнорируются. Однако для обеспечения корректного подтверждения всех сообщений (на случай потери ZLB ACK) полученные дубликаты должны подтверждаться с применением надежного транспорта. Для этого подтверждение может «прицепляться» к сообщению из очереди или передаваться в виде отдельного ZLB ACK.

Передача всех сообщений, кроме подтверждений ZLB, увеличивает порядковый на 1. После передачи сообщения ZLB порядковый номер Ns не увеличивается.

Номер последнего принятого сообщения Nr используется для подтверждения полученных партнером L2TP сообщений. Это поле указывает порядковый номер, который партнер ожидает получить в следующем сообщении (например, Ns из последнего сообщения не ZLB + 1 по модулю 65536). Хотя значение Nr из полученного сообщения ZLB применяется для исключения сообщений из локальной очереди на повторную передачу (см. ниже), значение Nr для следующего сообщения не обновляется значением Ns из принятого ZLB.

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

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

При передаче каждого последующего сообщения интервал должен экспоненциально возрастать. Таким образом, если первый повтор был сделан через 1 секунду, второй следует делать по истечении 2 секунд, третий — после 4 и т. д. Реализация может ограничивать максимальный интервал между повторами. Это ограничение должно быть не меньше 8 секунд. Если после нескольких (по умолчанию рекомендуется 5, но это значение следует делать настраиваемым) повторов отклик от партнера не был получен, туннель и все сессии в нем должны быть сброшены.

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

Для управления передачей сообщений используется механизм скользящего окна. Рассмотрим двух партнеров — A и B. Предположим, что A задает Receive Window Size AVP со значением N в сообщении SCCRQ или SCCRP. Это позволяет B передать до N управляющих сообщений, не получив подтверждения доставки. После передачи N сообщений требуется ждать подтверждения, которое позволит сдвинуть окно и передать новое управляющее сообщение. Реализация может поддерживать приемное окно размером 1 (передав Receive Window Size AVP со значением 1), но должна воспринимать от партнера окна размером до 4 (т. е., возможность отправить до 4 сообщений без ожидания подтверждений). Значение 0 для Receive Window Size AVP является неприемлемым.

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

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

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

6.0 Спецификация протокола управляющего соединения

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

6.1 Запрос SCCRQ

Управляющее сообщение SCCRQ8 служит для инициализации туннеля между LNS и LAC. Сообщение передается устройством LAC или LNS для инициирования процесса организации туннеля.

В сообщении SCCRQ должны присутствовать перечисленные ниже AVP:

Message Type AVP;

Protocol Version;

Host Name;

Framing Capabilities;

Assigned Tunnel ID.

Перечисленные ниже AVP также могут присутствовать в сообщениях SCCRQ:

Bearer Capabilities;

Receive Window Size;

Challenge;

Tie Breaker;

Firmware Revision;

Vendor Name.

6.2 Отклик SCCRP

Управляющие сообщения SCCRP9 передаются в ответ на получение сообщения SCCRQ. Отклик SCCRP служит для индикации восприятия запроса SCCRQ и показывает, что организацию туннеля следует продолжать.

В сообщении SCCRP должны присутствовать перечисленные ниже AVP:

Message Type;

Protocol Version;

Framing Capabilities;

Host Name;

Assigned Tunnel ID.

Перечисленные ниже AVP также могут присутствовать в сообщениях SCCRP:

Bearer Capabilities;

Firmware Revision;

Vendor Name;

Receive Window Size;

Challenge;

Challenge Response.

6.3 Отклик SCCCN

Сообщения SCCCN10 передаются в ответ на SCCRP. Сообщение SCCCN показывает завершение процесса организации туннеля.

В сообщении SCCCN должна присутствовать Message Type AVP.

Кроме того, в SCCCN может включаться Challenge Response AVP.

6.4 Уведомление StopCCN

Уведомление о разрыве управляющего соединения (StopCCN11) представляет собой управляющее сообщение, передаваемое LAC или LNS для информирования своего партнера о предстоящем разрыве туннеля и необходимости закрытия управляющего соединения. Кроме управляющего соединения неявно (без передачи каких-либо явных уведомлений) завершаются все активные сессии через этот туннель. Причина отправки такого запроса указывается в Result Code AVP. На это сообщение нет явного отклика и используется только неявное подтверждение ACK, передаваемое через гарантированный транспорт управляющих сообщений.

В StopCCN должны присутствовать следующие AVP:

Message Type;

Assigned Tunnel ID;

Result Code.

6.5 Сообщение HELLO

Управляющие сообщения HELLO в протоколе L2TP могут передаваться любым из партнеров в соединении LAC-LNS и служат для сохранения жизнеспособности туннеля (keepalive).

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

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

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

Сообщения HELLO являются «глобальными» для туннеля. Поле Session ID в сообщении HELLO должно иметь значение 0.

В сообщении HELLO должна присутствовать Message Type AVP.

6.6 Запрос для входящего вызова (ICRQ)

Управляющее сообщение ICRQ12 передается LAC для LNS при обнаружении входящего вызова. Оно является первым из трех сообщений, используемых для организации сессии в туннеле L2TP.

ICRQ служит для индикации того, что для этого вызова будет организована сессия между LAC и LNS, а также предоставления устройству LNS информации о параметра сессии. LAC может задержать ответ на вызов, пока не получит от LNS сообщения ICRP, показывающего, что сессию следует организовать. Это механизм позволяет LNS получить информацию, позволяющую принять об ответе на вызов или отказе от него. Кроме того, LAC может ответить на вызов, согласовать LCP и аутентификацию PPP, а потом использовать полученную информацию для выбора LNS. В этом случае на момент получения ICRP ответ на вызов уже произошел и LAC просто имитирует этапы «индикация вызова» и «ответ на вызов»..

В сообщении ICRQ должны присутствовать перечисленные ниже AVP:

Message Type;

Assigned Session ID;

Call Serial Number.

Перечисленные ниже AVP также могут присутствовать в сообщениях ICRQ:

Bearer Type;

Physical Channel ID;

Calling Number;

Called Number;

Sub-Address.

6.7 Ответ на входящий вызов (ICRP)

Управляющее сообщение ICRP13 передается LNS устройству LAC в ответ на принятое от того сообщение ICRQ. Это второе из трех сообщений, используемых для организации сессии в туннеле L2TP.

ICRP служит для индикации получения и обработки ICRQ, указывая устройству LAC, что следует ответить на вызов, если это не было сделано ранее. Сообщение также позволяет указать параметры, требуемые для сессии L2TP.

В сообщениях ICRP должны присутствовать AVP Message Type и Assigned Session ID.

6.8 Входящий вызов принят (ICCN)

Управляющее сообщение ICCN14 передаются LAC устройству LNS в ответ на получение ICRP. Это сообщение является последним из трех сообщений, используемых для организации сессии в туннеле L2TP.

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

В сообщении ICCN должны присутствовать перечисленные ниже AVP.

Message Type;

(Tx) Connect Speed;

Framing Type.

Перечисленные ниже AVP также могут присутствовать в сообщениях ICCN.

Initial Received LCP CONFREQ;

Last Sent LCP CONFREQ;

Last Received LCP CONFREQ;

Proxy Authen Type;

Proxy Authen Name;

Proxy Authen Challenge;

Proxy Authen ID;

Proxy Authen Response;

Private Group ID;

Rx Connect Speed;

Sequencing Required.

6.9 Запрос для исходящего вызова (OCRQ)

Управляющее сообщение OCRQ15 передаются от LNS устройству LAC для индикации исходящего вызова со стороны LAC. Это первое из трех сообщений при организации сессии в туннеле L2TP.

OCRQ показывает, что между LNS и LAC для этого вызова будет организована сессия и предоставляет устройству LAC информацию о параметрах для сессии L2TP и организованного соединения.

Устройство LNS должно иметь Bearer Capabilities AVP, принятую от LAC в процессе организации туннеля, для запроса исходящего вызова у этого устройства LAC.

В сообщении OCRQ должны присутствовать перечисленные ниже AVP.

Message Type;

Assigned Session ID;

Call Serial Number;

Minimum BPS;

Maximum BPS;

Bearer Type;

Framing Type;

Called Number.

Кроме того, в OCRQ может включаться Sub-Address AVP.

6.10 Отклик для исходящего вызова (OCRP)

Управляющее сообщение OCRP16 передается от LAC к устройству LNS в ответ на полученное сообщение OCRQ. Это второе из трех сообщений, используемых для организации сессии в туннеле L2TP.

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

В сообщении OCRP должны присутствовать перечисленные ниже AVP.

Message Type;

Assigned Session ID.

Кроме того, в OCRP может включаться Physical Channel ID AVP.

6.11 Исходящее соединение организовано (OCCN)

Управляющее сообщение OCCN17 передается LAC устройству LNS вслед за сообщением OCRP после организации исходящего соединения. Это сообщение является последним из трех сообщений, используемых для организации сессии в туннеле L2TP.

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

В сообщении OCCN должны присутствовать перечисленные ниже AVP.

Message Type;

(Tx) Connect Speed;

Framing Type.

Перечисленные ниже AVP также могут присутствовать в сообщениях OCCN.

Rx Connect Speed;

Sequencing Required.

6.12 Уведомление о разрыве соединения (CDN)

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

В сообщении CDN должны присутствовать перечисленные ниже AVP.

Message Type;

Result Code;

Assigned Session ID.

Кроме того, в CDN может включаться Q.931 Cause Code AVP.

6.13 Уведомление об ошибке в сети WAN (WEN)

Управляющее сообщение WEN19 передается LAC устройству LNS для индикации ошибки в сети WAN (ошибка на интерфейсе, поддерживающем PPP). Счетчики для таких сообщений являются кумулятивными. Сообщения этого типа следует передавать лишь при возникновении ошибок, но не чаще 1 раза в течение 60 секунд. При организации нового соединения счетчики ошибок сбрасываются.

В сообщении WEN должны присутствовать перечисленные ниже AVP.

Message Type;

Call Errors.

6.14 Установка параметров канала (SLI)

Управляющее сообщение SLI20 передается LNS устройству LAC для установки опций, согласуемых PPP. Эти опции могут меняться в течение действия соединения и устройство LAC должно обеспечивать возможность изменения своей внутренней информации о соединении и поведения для активной сессии PPP.

В сообщении SLI должны присутствовать перечисленные ниже AVP.

Message Type;

ACCM.

7.0 Машина состояний управляющего соединения

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

7.1 Операции протокола управляющего соединения

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

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

Неприемлемым считается управляющее сообщение, которое относится к обязательным типам (см. параграф 4.4.1), но этот тип не известен реализации, или получено с нарушением порядка (например, SCCCN в ответ на SCCRQ).

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

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

Недопустимо рассматривать сказанное выше, как разрешение на отправку некорректно сформированных AVP, это лишь рекомендации по обработке полученных сообщений с некорректным форматом. Невозможно перечислить все возможные ошибки формата того или иного сообщения и дать рекомендации на каждый случай. Тем не менее, рассмотрим один из примеров искаженной, но исправимой AVP, когда Rx Connect Speed AVP (атрибут 38) принимается со значением поля размера 8 вместо 10, а BPS указана в двух октетах вместо четырех. Поскольку Rx Connect Speed AVP не является обязательной, описанную ситуацию не следует считать критической. В этом случае управляющее сообщение следует воспринять, как будто данная AVP отсутствует (тем не менее, протоколируя этот факт).

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

Этапы организации туннеля рассмотрены в Приложении B.1.

7.2 Состояния управляющего соединения

Протокол управляющих соединений L2TP не различается для LNS и LAC, но различается для инициатора и получателя. Инициатором считается тот партнер, который начал организацию туннеля (при возникновении конфликта — победитель). Поскольку LAC и LNS могут быть инициаторами, возможно возникновение конфликтов. Для разрешения конфликтов используется Tie Breaker AVP, описанная в параграфе 4.4.3.

7.2.1 Организация управляющего соединения

Состояние

Событие

Действие

Новое состояние

idle

Локальный запрос Open

Передача SCCRQ

wait-ctl-reply

idle

Получение приемлемого SCCRQ

Передача SCCRP

wait-ctl-conn

idle

Получение неприемлемого SCCRQ

Очистка

idle

idle

Получение SCCRP

Передача StopCCN, очистка

idle

idle

Получение SCCCN

Очистка

idle

wait-ctl-reply

Получение приемлемого SCCRP

Передача SCCCN и события tunnel-open для ожидания сессий

established

wait-ctl-reply

Получение неприемлемого SCCRP

Передача StopCCN, очистка

idle

wait-ctl-reply

Получение SCCRQ, потеря tie-breaker

Очистка, переустановка SCCRQ в очередь для состояния idle

idle

wait-ctl-reply

Получение SCCCN

Передача StopCCN, очистка

idle

wait-ctl-conn

Получение приемлемого SCCCN

Передача события tunnel-open для ожидания сессий

established

wait-ctl-conn

Получение неприемлемого SCCCN

Передача StopCCN, очистка

idle

wait-ctl-conn

Получение SCCRP, SCCRQ

Передача StopCCN, очистка

idle

established

Локальный запрос Open (новый вызов)

Передача события tunnel-open для ожидания сессий

established

established

Административное закрытие туннеля

Передача StopCCN, очистка

idle

established

Получение SCCRQ, SCCRP, SCCCN

Передача StopCCN, очистка

idle

Idle,
wait-ctl-reply,
wait-ctl-conn,
established

Получение StopCCN

Очистка

idle

Состояния, связанные с LNS и LAC при организации управляющего соединения перечислены ниже.

idle

Как инициатор, так и получатель начинают с этого состояния. Инициатор передает сообщение SCCRQ из этого состояния, а получатель сохраняет такое состояние до получения SCCRQ.

wait-ctl-reply

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

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

wait-ctl-conn

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

established

Организованное соединение может быть разорвано по местным условиям или в ответ на получение Stop-Control-Connection-Notification. При разрыве соединения по местным условиям инициатор должен передать Stop-Control-Connection-Notification и очистить туннель.

Если инициатор получает Stop-Control-Connection-Notification, он также должен очистить туннель.

7.3 Синхронизация

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

7.4 Входящие вызовы

Сообщение Incoming-Call-Request генерируется LAC при обнаружении входящего вызова (например, звонок по телефонной линии). LAC выбирает Session ID и порядковый номер, а также указывает тип подателя вызова. Для модемов всегда следует указывать аналоговый тип. Для вызовов ISDN следует указывать цифровой тип, если используется неограниченное цифровое обслуживание или адаптация скорости, и аналоговый тип при вовлечении модемов. Параметры Calling Number, Called Number и Subaddress могут включаться в сообщение, если они доступны из телефонной сети.

После того, как устройство LAC передаст Incoming-Call-Request, оно ждет отклика от LNS, но это не обязательно будет вызов из телефонной сети. LNS может отвергнуть вызов по причине:

  • отсутствия ресурсов для обслуживания дополнительной сессии;

  • поля dialed, dialing или subaddress не соответствуют имеющему полномочия пользователю;

  • тип вызова не поддерживается или для него нет разрешения.

Если устройство LNS воспринимает вызов, оно возвращает сообщение Incoming-Call-Reply. Получив такое сообщение, LAC пытается организовать соединение. Финальное при организации соединения сообщение от LAC к LNS показывает, что на обеих сторонах следует установить для вызова состояние established (соединение организовано). Если вызов был прерван до того, как устройство LNS восприняло его, LAC будет предавать сообщение Call-Disconnect-Notify для индикации этого.

Когда телефонный клиент «кладет трубку» соединение разрывается обычным способом и LAC передает сообщение Call-Disconnect-Notify. Если устройство LNS хочет сбросить (очистить) соединение, оно передает сообщение Call-Disconnect-Notify и сбрасывает свою сессию.

7.4.1 Состояния LAC для входящих вызовов

Состояние

Событие

Действие

Новое состояние

idle

Звонок или Ready с индикацией входящего вызова

Инициирование локального создания туннеля

wait-tunnel

idle

Получение ICCN, ICRP, CDN

Очистка

idle

wait-tunnel

Отключение со стороны вызывающего или локальный запрос на закрытие

Очистка

idle

wait-tunnel

Создание туннеля

Передача ICRQ

wait-reply

wait-reply

Получение приемлемого ICRP

Передача ICCN

established

wait-reply

Получение неприемлемого ICRP

Передача CDN, очистка

idle

wait-reply

Получение ICRQ

Передача CDN, очистка

idle

wait-reply

Получение CDN, ICCN

Очистка

idle

wait-reply

Отключение со стороны вызывающего или локальный запрос на закрытие

Передача CDN, очистка

idle

established

Получение CDN

Очистка

idle

established

Получение ICRQ, ICRP, ICCN

Передача CDN, очистка

idle

established

Отключение со стороны вызывающего или локальный запрос на закрытие

Передача CDN, очистка

idle

Состояния LAC для входящих вызовов перечислены ниже.

idle

Устройство LAC обнаружило входящий вызов на одном из своих интерфейсов. Обычно это звонок по аналоговой линии или входящее сообщение Q.931 SETUP, полученное ISDN TE. LAC инициирует свою машину организации туннеля и переходит в состояние ожидания подтверждения существования туннеля.

wait-tunnel

В этом состоянии сессия ожидает открытия управляющего соединения или проверки факта существования туннеля. После того, как туннель создан/обнаружен может быть выполнен обмен управляющими сессией сообщениями, первым из которых является Incoming-Call-Request.

wait-reply

Устройство LAC получило сообщение CDN, показывающее, что LNS не желает принимать вызов (общая ошибка или отказ в восприятии), и возвращается в состояние idle или получило сообщение Incoming-Call-Reply, показывающее, что вызов воспринят, после чего LAC передает сообщение Incoming-Call-Connected и переходит в состояние established.

established

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

  • событие на связанном с соединением интерфейсе — LAC передает сообщение Call-Disconnect-Notify;

  • прием сообщения Call-Disconnect-Notify — LAC очищает состояние и разрывает соединение;

  • локальная причина — LAC передает сообщение Call-Disconnect-Notify.

7.4.2 Состояния LNS для входящих вызовов

Состояние

Событие

Действие

Новое состояние

idle

Получение приемлемого ICRQ

Передача ICRP

wait-connect

idle

Получение неприемлемого ICRQ

Передача CDN, очистка

idle

idle

Получение ICRP

Передача CDN, очистка

idle

idle

Получение ICCN

Очистка

idle

wait-connect

Получение приемлемого ICCN

Подготовка для данных

established

wait-connect

Получение неприемлемого ICCN

Передача CDN, очистка

idle

wait-connect

Получение ICRQ, ICRP

Передача CDN, очистка

idle

idle,
wait-connect,
established

Получение CDN

Очистка

idle

wait-connect,
established

Локальный запрос закрытия

Передача CDN, очистка

idle

established

Получение ICRQ, ICRP, ICCN

Передача CDN, очистка

idle

Состояния LNS для входящих вызовов перечислены ниже.

idle

Принято сообщение Incoming-Call-Request. Если запрос не воспринимается, в ответ передается сообщение Call-Disconnect-Notify и устройство LNS сохраняет состояние idle. Если сообщение Incoming-Call-Request воспринято, в ответ передается Incoming-Call-Reply и сессия переводится в состояние wait-connect.

wait-connect

Если соединение на устройстве LAC продолжает существовать, LAC передает сообщение Incoming-Call-Connected устройству LNS, которое после этого переходит в состояние established. LAC может передать сообщение Call-Disconnect-Notify для индикации того, что для исходящего вызова соединение не организовано. Это может происходить, например, в тех случаях, когда инициатор звонка случайно соединился с LAC вместо номера для голосовой связи и модем не смог согласовать соединение.

established

Сессия может быть прервана по приему сообщения Call-Disconnect-Notify от LAC или передачей тому сообщения Call-Disconnect-Notify. Далее происходит сброс соединения на обеих сторонах независимо от того, кто был инициатором разрыва.

7.5 Исходящие вызовы

Исходящие соединения инициируются устройством LNS, которое инструктирует LAC по организации вызова. С исходящими вызовами используются три соединения: Outgoing-Call-Request, Outgoing-Call-Reply и Outgoing-Call-Connected. LNS передает сообщение Outgoing-Call-Request, указывающее телефонный номер вызываемого, субадрес и другие параметры. Устройство LAC должно ответить на Outgoing-Call-Request сообщением Outgoing-Call-Reply после того, как определит наличие требуемых для вызова компонент и административного разрешения на вызов (например, разрешение данному LNS использовать международные звонки). После организации исходящего соединения LAC передает LNS сообщение Outgoing-Call-Connected с результатом организации соединения.

7.5.1 Состояния LAC для исходящих вызовов

Состояние

Событие

Действие

Новое состояние

idle

Получение приемлемого ICRQ

Передача OCRP, звонок

wait-cs-answer

idle

Получение неприемлемого ICRQ

Передача CDN, очистка

idle

idle

Получение OCRP

Передача CDN, очистка

idle

idle

Получение OCCN, CDN

Очистка

idle

wait-cs-answer

Ответ, обнаружено кадрирование

Передача OCCN

established

wait-cs-answer

Отказ

Передача CDN, очистка

idle

wait-cs-answer

Получение OCRQ, OCRP, OCCN

Передача CDN, очистка

idle

established

Получение OCRQ, OCRP, OCCN

Передача CDN, очистка

idle

wait-cs-answer, established

Получение CDN

Очистка

idle

established

Разрыв соединения, локальный запрос закрытия

Передача CDN, очистка

idle

Состояния LAC для исходящих вызовов перечислены ниже.

idle

Если сообщение Outgoing-Call-Request принято с ошибкой, следует ответить сообщением Call-Disconnect-Notify. В остальных случаях выделяется физический канал и передается сообщение Outgoing-Call-Reply. Организуется исходящее соединение и выполняется переход в состояние wait-cs-answer.

wait-cs-answer

Если вызов не был завершен или закончился отсчет таймера ожидания завершения соединения, передается сообщение Call-Disconnect-Notify с подходящим кодом ошибки и происходит переход в состояние idle. Если коммутируемое соединение организовано и обнаружено кадрирование, передается сообщение Outgoing-Call-Connected, показывающее успех, и выполняется переход в состояние established.

established

Если устройство LAC получает сообщение Call-Disconnect-Notify, телефонное соединение должно быть разорвано с использованием подходящего механизма, а сессия сброшена (очищена). Если соединение было разорвано клиентом или вызываемым интерфейсом, устройству LNS должно быть передано сообщение Call-Disconnect-Notify. Отправитель Call-Disconnect-Notify возвращается в состояние idle после завершения отправки сообщения.

7.5.2 Состояния LNS для исходящих вызовов

Состояние

Событие

Действие

Новое состояние

idle

Локальный запрос

Инициирование локального tunnel-open

wait-tunnel

idle

Получение OCCN, OCRP, CDN

Очистка

idle

wait-tunnel

tunnel-open

Передача OCRQ

wait-reply

wait-reply

Получение приемлемого OCRP

нет

wait-connect

wait-reply

Получение неприемлемого OCRP

Передача CDN, очистка

idle

wait-reply

Получение OCCN, OCRQ

Передача CDN, очистка

idle

wait-connect

Получение OCCN

нет

established

wait-connect

Получение OCRQ, OCRP

Передача CDN, очистка

idle

idle,
wait-reply,
wait-connect,
established

Получение CDN

Очистка

idle

established

Получение OCRQ, OCRP, OCCN

Передача CDN, очистка

idle

wait-reply,
wait-connect,
established

Локальный запрос на разрыв

Передача CDN, очистка

idle

wait-tunnel

Локальный запрос на разрыв

Очистка

idle

Состояния LNS для исходящих вызовов перечислены ниже.

idle, wait-tunnel

При инициировании исходящего соединения сначала организуется туннель, как в состояниях idle и wait-tunnel для входящего вызова на LAC. После организации туннеля устройству LAC передается сообщение Outgoing-Call-Request и сессия переходит в состояние wait-reply.

wait-reply

При получении сообщения Call-Disconnect-Notify это рассматривается, как ошибка, сессия очищается и возвращается в состояние idle. При получении Outgoing-Call-Reply вызов обрабатывается и сессия переходит в состояние wait-connect.

wait-connect

При получении сообщения Call-Disconnect-Notify это рассматривается, как ошибка, сессия очищается и возвращается в состояние idle. При получении Outgoing-Call-Connected организация соединения завершается и через него может начинаться передача данных.

established

При получении сообщения Call-Disconnect-Notify соединение разрывается по причине, указанной в Result и Cause Code; сессия переходит в состояние idle. Если устройство LNS решает прервать сессию, оно передает Call-Disconnect-Notify устройству LAC, после чего очищает сессию и переводит ее в состояние idle.

7.6 Разрыв туннеля

Разрыв туннеля может быть инициирован любым из партнеров путем передачи сообщения Stop-Control-Connection-Notification. Отправителю этого уведомления следует дождаться (ограниченное время) получения подтверждения доставки данного сообщения прежде, чем сбрасывать связанные с туннелем данные управления. Получателю такого уведомления следует отправить подтверждение приема отправителю и после этого сбросить связанные с туннелем данные управления.

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

8.0 L2TP в разных средах

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

8.1 L2TP через UDP/IP

L2TP использует зарегистрированный порт UDP 1701 [RFC1700]. Весь пакет L2TP, включая данные и заголовок L2TP, передается в виде дейтаграммы UDP. Инициатор туннеля L2TP выбирает доступный выходной порт UDP (не обязательно 1701) и передает пакет в порт 1701 по желаемому адресу. Получатель этого пакета выделяет доступный порт в своей системе (не обязательно 1701) и передает через него отклик, используя номер порта UDP и адрес инициатора, указывая в качестве порта отправителя выбранный в своей системе свободный порт. После выбора портов для отправки и получения пакетов, номера этих портов должны сохраняться в течение срока использования туннеля.

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

При прохождении пакетов L2TP через инфраструктуру IP возможна их фрагментация. В L2TP не используется специальных мер оптимизации для таких случаев. Реализация LAC может заставить свой LCP согласовать конкретное значение MRU, оптимизированное для среды LAC, в которой MTU на пути прохождения пакетов L2TP можно предположить согласованным.

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

Порт 1701 применяется как для пакетов L2F [RFC2341], так и для пакетов L2TP. Поле Version в заголовке может применяться для того, чтобы различать эти два типа пакетов (L2F использует значение 1, а L2TP, описанный в данном документе, — 2). Реализации L2TP в системах, не поддерживающих L2F, должны отбрасывать пакеты L2F без уведомления.

Для клиентов PPP, использующих L2TP через туннель UDP/IP, канальные характеристики PPP могут приводить к смене порядка и отбрасыванию пакетов без уведомления. Изменение порядка может нарушать работу не относящихся к IP протоколов, передаваемых через PPP, особенно протоколов ЛВС (например, протоколов мостов). Отбрасывание пакетов может нарушать работу протоколов, которые используют попакетную индикацию ошибок (например, протоколы сжатия заголовков TCP). Сохранение порядка можно обеспечить с помощью порядковых номеров в пакетах данных L2TP, если передаваемые через PPP чувствительны к нарушению порядка доставки. Требования отдельных протоколов к упорядоченной доставке выходят за рамки данного документа.

Вопрос с отбрасыванием пакетов без уведомления более сложен для некоторых протоколов. Если включена гарантированная доставка PPP [RFC1663], протокол не будет сталкиваться с потерей пакетов. При использовании порядковых номеров L2TP сам протокол L2TP сможет обнаруживать потерю пакетов. Для случая LNS в устройстве присутствуют стеки протоколов PPP и L2TP, поэтому сигнализация о потере пакетов может быть очень точной, как при получении пакетов с ошибками CRC. Если LAC и стек PPP используются совместно, этот метод также можно применить. Если же LAC и клиент PPP физически разделены, похожую сигнализацию можно обеспечить путем передачи клиенту PPP пакетов с ошибкой CRC. Отметим, что это будет сильно осложнять решение клиентских проблем с линией, поскольку статистика клиента не сможет различить ошибки в среде от имитированных устройством LAC ошибок. Кроме того, использование этого метода возможно не на всем оборудовании.

При использовании компрессии VJ и отсутствии гарантированной доставки PPP и порядковых номеров каждая потеря пакета будет приводить к вероятности пересылки сегмента TCP с некорректным содержимым 2-16 [RFC1144]. В тех случаях, когда комбинация частоты потери пакетов с указанной вероятностью некорректной пересылки не приемлема, сжатие заголовков TCP не следует использовать.

В общем случае следует помнить, что транспорт L2TP/UDP/IP не является надежным. Как и для любой среды PPP с возможными потерями следует принимать соответствующие меры для протоколов, чувствительных к потерям. К таким протоколам относятся протоколы сжатия заголовков и шифрования, которые в своей работе опираются на предыдущие пакеты.

8.2 IP

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

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

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

9.1 Безопасность конечных точек туннеля

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

Для выполнения аутентификации устройства LAC и LNS должны использовать общий секрет. Каждая из сторон туннеля использует один и тот же секрет, выступая как в качестве аутентифицируемой, так и в качестве аутентифицирующей стороны. По причине использования одного секрета AVP для аутентификации туннеля включают дифференцирующие значения в полях CHAP ID для каждого расчета цифровой подписи сообщения (с целью предотвращения повторного использования перехваченных пакетов).

Значения Assigned Tunnel ID и Assigned Session ID (см. параграф 4.4.3) следует выбирать непредсказуемым способом, а не перебирать последовательно или по иному алгоритму. Это поможет предотвратить захват сессии злоумышленниками, не имеющими доступа к пакетам между устройствами LAC и LNS.

9.2 Защита на уровне пакетов

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

9.3 Сквозная защита

Защита потока пакетов L2TP на уровне транспорта обеспечивает и защиту данных в туннелируемых пакетах PPP при их транспортировке от LAC к LNS. Такую защиту не следует рассматривать, как замену сквозной защиты между взаимодействующими хостами или приложениями.

9.4 L2TP и IPsec

При работе с IP протокол IPsec обеспечивает защиту на уровне пакетов с использованием ESP и/или AH. Все пакеты управления и данных L2TP для конкретного туннеля воспринимаются системой IPsec, как однотипные пакеты данных UDP/IP.

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

IPsec также поддерживает функции контроля доступа, которые являются обязательными для реализаций IPsec. Эти функции позволяют фильтровать пакеты по параметрам сетевого и транспортного уровня (таким, как адреса IP, номера портов и т. п.). В модели туннелирования L2TP аналогичные функции выполняются на уровне PPP или сетевом уровне над L2TP. Эти функции контроля доступа на сетевом уровне могут реализоваться на LNS с помощью фирменных функций проверки полномочий на базе аутентификации пользователей PPP или непосредственно на сетевом уровне при сквозном использовании транспортного режима IPsec между взаимодействующими хостами. Требования к механизмам контроля доступа не являются частью спецификации L2TP и выходят за рамки этого документа.

9.5 Аутентификация PPP

L2TP определяет AVP, которые могут передаваться в процессе организации сеанса для обеспечения пересылки управляющей информации PPP, имеющейся на LAC устройству LNS для ее проверки (см. параграф 4.4.5). Это предполагает доверительные отношения на устройстве LAC от имени LNS. Если устройство LNS использует proxy-аутентификацию, оно должно обеспечивать возможность ее отключения для выполнения нового раунда аутентификации PPP по инициативе LNS (может включать новый раунд согласования LCP).

10.0 Согласование с IANA

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

10.1 Атрибуты AVP

Как указано в параграфе 4.1, AVP включают поля Vendor ID, Attribute и Value. Для Vendor ID = 0 IANA будет поддерживать реестр выделенных значений Attribute, а в некоторых случаях и сами значения. Распределение атрибутов 0 — 39 описано в параграфе 4.4. Остальные значения доступны для распределения через процедуру IETF Consensus [RFC 2434].

10.2 Значения Message Type AVP

Как указано в параграфе 4.4.1, Message Type AVP (Attribute Type 0) имеет значение, распределяемое IANA. Значения 0 — 16 описаны в параграфе 3.2, остальные значения доступны для распределения по процедуре IETF Consensus [RFC 2434]

10.3 Значения Result Code AVP

Как указано в параграфе 4.4.2, Result Code AVP (Attribute Type 1) содержит три поля. Два из этих полей (Result Code и Error Code) используют значения, распределяемые IANA.

10.3.1 Значения поля Result Code

Result Code AVP может включаться в сообщения CDN и StopCCN. Допустимые значения поля Result Code данной AVP зависят от Message Type AVP. Для сообщений StopCCN значения 0 — 7 определены в параграфе 4.4.2; для сообщений StopCCN в том же параграфе определены значения 0 — 11. Остальные значения поля Result Code для обоих типов сообщений доступны для распределения по процедуре IETF Consensus [RFC 2434].

10.3.2 Значения поля Error Code

Значения 0 — 7 определены в параграфе 4.4.2. Значения 8 — 32767 доступны для распределения по процедуре IETF Consensus [RFC 2434]. Оставшиеся значения поля Error Code доступны для распределения по процедуре First Come First Served [RFC 2434].

10.4 Framing Capabilities и Bearer Capabilities

Framing Capabilities AVP и Bearer Capabilities AVP (см. параграф 4.4.3) содержат 32-битовые маски. Использование битов этих масок определяется по процедуре Standards Action [RFC 2434].

10.5 Значения Proxy Authen Type AVP

Proxy Authen Type AVP (Attribute Type 29) использует значения, распределяемые IANA. Значения 0 — 5 определены в параграфе 4.4.5, оставшиеся значения доступны для распределения по процедуре First Come First Served [RFC 2434].

10.6 Биты заголовка AVP

В заголовке AVP имеется четыре резервных поля. Использование этих полей возможно только в соответствии с процедурой Standards Action [RFC 2434].

11.0 Литература

[DSS1] ITU-T Recommendation, «Digital subscriber Signaling System No. 1 (DSS 1) — ISDN user-network interface layer 3 specification for basic call control», Rec. Q.931(I.451), May 1998

[KPS] Kaufman, C., Perlman, R., and Speciner, M., «Network Security: Private Communications in a Public World», Prentice Hall, March 1995, ISBN 0-13-061466-1

[RFC791] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[RFC1034] Mockapetris, P., «Domain Names — Concepts and Facilities», STD 13, RFC 1034, November 1987.

[RFC1144] Jacobson, V., «Compressing TCP/IP Headers for Low-Speed Serial Links», RFC 1144, February 1990.

[RFC1661] Simpson, W., «The Point-to-Point Protocol (PPP)», STD 51, RFC 1661, July 1994.

[RFC1662] Simpson, W., «PPP in HDLC-like Framing», STD 51, RFC 1662, July 1994.

[RFC1663] Rand, D., «PPP Reliable Transmission», RFC 1663, July 1994.

[RFC1700] Reynolds, J. and J. Postel, «Assigned Numbers», STD 2, RFC 170021, October 1994. См. также: http://www.iana.org/numbers.html

[RFC1990] Sklower, K., Lloyd, B., McGregor, G., Carr, D. and T. Coradetti, «The PPP Multilink Protocol (MP)», RFC 1990, August 1996.

[RFC1994] Simpson, W., «PPP Challenge Handshake Authentication Protocol (CHAP)», RFC 1994, August 1996.

[RFC1918] Rekhter, Y., Moskowitz, B., 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.

[RFC2138] Rigney, C., Rubens, A., Simpson, W. and S. Willens, «Remote Authentication Dial In User Service (RADIUS)», RFC 213822, April 1997.

[RFC2277] Alvestrand, H., «IETF Policy on Character Sets and Languages», BCP 18, RFC 2277, January 1998.

[RFC2341] Valencia, A., Littlewood, M. and T. Kolar, «Cisco Layer Two Forwarding (Protocol) L2F», RFC 2341, May 1998.

[RFC2401] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 240123, November 1998.

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[RFC2637] Hamzeh, K., Pall, G., Verthein, W., Taarud, J., Little, W. and G. Zorn, «Point-to-Point Tunneling Protocol (PPTP)», RFC 2637, July 1999.

[STEVENS] Stevens, W. Richard, «TCP/IP Illustrated, Volume I The Protocols», Addison-Wesley Publishing Company, Inc., March 1996, ISBN 0-201-63346-9

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

Базовые концепции и многие из протокольных конструкций L2TP заимствованы из L2F [RFC2341] и PPTP [PPTP], авторами которых являются A. Valencia, M. Littlewood, T. Kolar, K. Hamzeh, G. Pall, W. Verthein, J. Taarud, W. Little, G. Zorn.

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

Steve Cobb и Evan Caves переработали таблицы машины состояний.

Barney Wolff внес много предложений по механизму аутентификации конечных точек.

John Bray, Greg Burns, Rich Garrett, Don Grosser, Matt Holdrege, Terry Johnson, Dory Leifer и Rich Shea внесли существенные предложения и сделали обзор на 43-й конференции IETF в Orlando, FL., что существенно повысило уровень ясности данного документа и сделало его более читаемым.

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

Gurdeep Singh Pall

Microsoft Corporation

Redmond, WA

EMail: gurdeep@microsoft.com

Bill Palter

RedBack Networks, Inc

1389 Moffett Park Drive

Sunnyvale, CA 94089

EMail: palter@zev.net

Allan Rubens

Ascend Communications

1701 Harbor Bay Parkway

Alameda, CA 94502

EMail: acr@del.com

W. Mark Townsley

cisco Systems

7025 Kit Creek Road

PO Box 14987

Research Triangle Park, NC 27709

EMail: townsley@cisco.com

Andrew J. Valencia

cisco Systems

170 West Tasman Drive

San Jose CA 95134-1706

EMail: vandys@cisco.com

Glen Zorn

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052

EMail: gwz@acm.org

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

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

nmalykh@gmail.com

Приложение A. Slow Start и Congestion Avoidance на канале управления

Хотя каждая из сторон указывает максимальный размер приемного окна, рекомендуется использовать для передачи пакетов управления механизмы замедленного старта и предотвращения перегрузок. Описанные здесь методы основаны на алгоритме предотвращения перегрузок TCP, описанном в параграфе 21.6 книги W. Richard Stevens TCP/IP Illustrated, Volume I [STEVENS].

Упомянутые механизмы используют несколько переменных. Размер окна насыщения (CWND) определяет число пакетов, которые отправитель может предать до получения подтверждения. Значение CWND может изменяться, как описано ниже. Однако следует отметить, что CWND ни в коем случае не может превосходить размер анонсируемый окна, полученный из Receive Window AVP (в последующем тексте предполагается, что увеличение ограничено значением Receive Window Size). Переменная SSTHRESH24 определяет переключение из режима замедленного старта в режим предотвращения перегрузки. Механизм замедленного старта используется до тех пор, пока CWND < SSTHRESH.

Отправитель начинает с фазы замедленного старта. Для CWND устанавливается начальное значение в 1 пакет, а для SSTHRESH — размер анонсированного окна (берется из Receive Window AVP). После этого отправитель передает один пакет и ждет подтверждения его доставки (явного или прицепленного к данным). При получении подтверждения размер окна насыщения увеличивается с 1 до 2. В процессе замедленного старта значение CWND увеличивается на 1 при получении каждого ACK (явно в ZLB или с данными). Увеличение CWND на 1 при каждом ACK ведет к удвоению CWND за каждый период кругового обхода, что ведет к экспоненциальному росту размера окна. Когда значение CWND достигает SSTHRESH, фаза замедленного старта завершается и начинается фаза предотвращения перегрузок.

В фазе предотвращения перегрузок рост CWND замедляется. Более конкретно, размер окна увеличивается на 1/CWND при получении каждого нового ACK. Т. е., значение CWND увеличивается не 1 после приема CWND новых пакетов ACK. Увеличение размера окна в фазе предотвращения перегрузок эффективно является линейным — CWND увеличивается на 1 за каждый период кругового обхода.

При возникновении перегрузки (указывается включением повтора передачи) для SSTHRESH устанавливается значение ½ CWND, а для окна насыщения (CWND) устанавливается значение 1. После этого отправитель возвращается в фазу замедленного старта.

Приложение B. Примеры управляющих сообщений

B.1. Этапы организации туннеля

В этом примере LAC организует туннель, при организации которого обе стороны поочередно передают сообщения. Этот пример показывает финальное подтверждение, явно передаваемое в сообщении ZLB ACK. Другим вариантом может служить добавление подтверждения в сообщение, передаваемое в ответ на ICRQ или OCRQ, которое явно передаст сторона-инициатор.

          LAC или LNS              LNS или LAC
          -----------              -----------
          SCCRQ     ->
          Nr: 0, Ns: 0
                                   <-     SCCRP
                                   Nr: 1, Ns: 0
          SCCCN     ->
          Nr: 1, Ns: 1
                                   <-       ZLB
                                   Nr: 2, Ns: 1

 

B.2. Потеря пакета с повторной передачей

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

            LAC                               LNS
            ---                               ---
        ICRQ      ->
        Nr: 1, Ns: 2

                         (потеря пакета) <-      ICRP
                                         Nr: 3, Ns: 1

      (пауза; таймер LAC запускается первым и первым завершает отсчет)

       ICRQ      ->
       Nr: 1, Ns: 2

       (Понимая, что этот пакет уже был передан, LNS отбрасывает его и передает ZLB)
                                         <-       ZLB
                                         Nr: 3, Ns: 2

                       (завершается отсчет таймера повтора передачи в LNS)

                                         <-      ICRP
                                         Nr: 3, Ns: 1
       ICCN      ->
       Nr: 2, Ns: 3

                                         <-       ZLB
                                         Nr: 4, Ns: 2

 

Приложение C. Интеллектуальная собственность

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

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

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

Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

1Layer Two Tunneling Protocol.

2Network Access Server — сервер доступа в сеть.

3Digital Subscriber Line.

4Authentication, Authorization and Accounting — аутентификация, проверка полномочий и учет.

5Attribute-Value Pair — пара «атрибут-значение».

6Mandatory — обязательный.

7Hidden — скрытый.

8Start-Control-Connection-Request — запрос на организацию управляющего соединения.

9Start-Control-Connection-Reply — отклик на запрос организации управляющего соединения.

10Start-Control-Connection-Connected — управляющее соединение организовано.

11Stop-Control-Connection-Notification.

12Incoming-Call-Request.

13Incoming-Call-Reply.

14Incoming-Call-Connected.

15Outgoing-Call-Request.

16Outgoing-Call-Reply

17Outgoing-Call-Connected.

18Call-Disconnect-Notify.

19WAN-Error-Notify.

20Set-Link-Info.

21В соответствии с RFC 3232 этот документ утратил силу. Данные доступны по ссылке. Прим. перев.

22Документ признан устаревшим и заменен RFC 2865. Прим. перев.

23Документ признан устаревшим и заменен RFC 4301. Прим. перев.

24В оригинале ошибочно указано SSHTRESH. См. https://www.rfc-editor.org/errata_search.php?eid=401. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 2661 Layer Two Tunneling Protocol «L2TP» отключены

RFC 2637 Point-to-Point Tunneling Protocol (PPTP)

Network Working Group                                          K. Hamzeh
Request for Comments: 2637                         Ascend Communications
Category: Informational                                          G. Pall
                                                   Microsoft Corporation
                                                             W. Verthein
                                                                    3Com
                                                               J. Taarud
                                                Copper Mountain Networks
                                                               W. Little
                                                          ECI Telematics
                                                                 G. Zorn
                                                   Microsoft Corporation
                                                               July 1999

PDF

Туннельный протокол PPTP

Point-to-Point Tunneling Protocol (PPTP)

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

Этот документ содержит информацию для сообщества Internet и не задает каких-либо стандартов Internet. Документ может распространяться свободно.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

Замечание IESG

Протокол PPTP был разработан консорциумом производителей. Документация по протоколу PPTP представляется в качестве информации для сообщества Internet. Рабочая группа PPP WG в настоящее время готовит проект стандарта протокола L2TP для туннелирования PPP через сети с коммутацией пакетов.

Аннотация

В этом документе приведена спецификация протокола, позволяющего туннелировать трафик PPP1 через сети IP. PPTP не вносит каких-либо изменений в протокол PPP, а вместо этого описывает новый транспорт для доставки PPP. Определена архитектура «клиент-сервер» для развязки с функциями, существующими в современных серверах доступа в сеть (NAS2) и поддерживающими VPN3. Для работы под управлением операционных систем общего назначения предусматривается сервер PNS4, а клиенты (PAC5) работают на серверах доступа по коммутируемым линиям. PPTP задает протокол управления вызовами и протокол управления, которые позволяют серверу контролировать доступ по коммутируемым линиям из сетей PSTN и ISDN или инициировать исходящие коммутируемые соединения. PPTP использует расширенный механизм GRE6 для предоставления услуг по доставке дейтаграмм с контролем потоков и перегрузок для пакетов PPP.

Спецификация требований

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

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

Оглавление

Исключено в версии HTML.

1. Введение

PPTP позволяет разделить функции имеющихся серверов доступа (NAS7) с использованием архитектуры «клиент-сервер». Традиционно в устройствах NAS реализуются перечисленные ниже функции:

  1. Естественное взаимодействие на физическом уровне с сетями PSTN и ISDN, а также управление внешними модемами и терминальными адаптерами.

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

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

  2. Логическое завершение сессий PPP8 LCP9.

  3. Участие в протоколе аутентификации PPP [3,9,10].

  4. Агрегирование каналов и управление канальными группами PPP Multilink Protocol.

  5. Логическое завершение различных протоколов управления сетью PPP NCP10.

  6. Мультипротокольная маршрутизация и мосты между интерфейсами NAS.

PPTP распределяет перечисленные функции между PAC и PNS. Устройства PAC отвечают за функции 1, 2 и, возможно, 3. Устройства PNS могут отвечать за функцию 3 и отвечают за функции 4, 5 и 6. Протокол обмена PPP PDU11 между устройствами PAC и PNS, а также управления вызовами обеспечивается PPTP.

Разделение функций NAS обеспечивает ряд преимуществ.

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

Поддержка отличных от IP протоколов для доступа в сети. Это позволяет организовать соединения Appletalk или IPX с туннелированием через сети, поддерживающие только IP. Устройство PAC должно поддерживать такие протоколы.

Решение проблемы multilink hunt-group splitting. Протокол Multilink PPP, обычно используемый для объединения каналов ISDN B, требует, чтобы все каналы группы приходили на одно устройство NAS. Поскольку группа каналов PPP может обслуживаться одним устройством PNS, включенные в эту группу каналы могут приходить на разные устройства PAC.

1.1. Цели и допущения

Для реализации протокола PPTP нужны лишь устройства PAC и PNS. Никакие другие системы не требуются для работы PPTP. Коммутируемые линии могут подключаться к PAC, ничего не зная о PPTP. Стандартные клиентские программы PPP продолжают работать по туннелируемым каналам PPP.

PPTP можно также применять для туннелирования сессий PPP через сети IP. В этом случае туннель PPTP и сессия PPP организуются между одной парой машин и вызывающая сторона действует, как PNS.

Предполагается возможность мгогосвязных взаимодействий между устройствами PAC и PNS. Концентратор PAC может обслуживать множество серверов PNS. Например, Internet-провайдеры могут поддерживать услуги PPTP для множества клиентов частной сети и создавать для них соединения VPN. Каждая частная сеть при этом может использовать один или множество серверов PNS. Один сервер PNS можно связать с множеством PAC для концентрации трафика из большого числа географически распределенных сайтов.

Протокол PPTP использует расширенную версию GRE для переноса пользовательских пакетов PPP. Это обеспечивает возможность контроля насыщения и управления потоком данных на нижних уровнях туннелей, применяемых для переноса пользовательских данных между устройствами PAC и PNS. Этот механизм обеспечивает эффективное использование доступной для туннелей полосы и позволяет предотвратить ненужные повторы передачи и переполнение буферов. PPTP не задает конкретных алгоритмов контроля для нижних уровней, но определяет параметры, обмен которыми требуется для обеспечения работы таких алгоритмов. Возможные алгоритмы рассмотрены в разделе 4.

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

Analog Channel — аналоговый канал

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

Digital Channel — цифровой канал

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

Call — вызов

Соединение или попытка соединения между двумя оконечными точками телефонной сети PSTN или ISDN (например, для соединения между двумя модемами).

Control Connection — управляющее соединение

Управляющее соединение организуется для каждой пары PAC — PNS и работает по протоколу TCP [4]. Соединение служит для управления туннелем и связанными с ним сессиями.

Dial User — пользователь коммутируемого соединения

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

Network Access Server (NAS) — сервер доступа в сеть

Устройство, обеспечиваемое временный (по запросу) доступ в сеть для пользователей. Доступ осуществляется в режиме «точка-точка» с использованием телефонных линий PSTN или ISDN.

PPTP Access Concentrator (PAC) — концентратор доступа

Устройство, подключенное к одной или множеству линий PSTN или ISDN, поддерживающее протокол PPP и обслуживающее протокол PPTP. От устройств PAC поддержка стека TCP/IP требуется только для передачи трафика одному или множеству устройств PNS. Концентратор может также туннелировать протоколы, не относящиеся к IP.

PPTP Network Server (PNS) — сетевой сервер PPTP

Предполагается, что PNS будут разворачиваться на компьютерных (серверных) платформах общего назначения. PNS реализует серверную часть протокола PPTP. Поскольку PPTP работает на основе стека TCP/IP и не зависит от интерфейсного оборудования, PNS может работать с любыми комбинациями интерфейсов IP, включая устройства LAN и WAN.

Session — сессия

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

Tunnel — туннель

Туннель определяется парой PNS — PAC. Туннельный протокол определяется модифицированной версией GRE [1, 2]. Туннель служит для передачи дейтаграмм PPP между устройствами PAC и PNS. В одном туннеле может мультиплексироваться множество сессий. Управляющее соединение на основе протокола TCP служит для организации, поддержки и завершения сессий и самого туннеля.

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

Протокол PPTP включает две работающих параллельно компоненты — 1) управляющее соединение между каждой парой PAC — PNS, работающее по протоколу TCP и 2) туннель IP между той же парой устройств PAC — PNS, служащий для транспортировки инкапсулированных с помощью GRE пакетов PPP в пользовательских сессиях между парой устройств.

1.3.1. Управляющее соединение

Для создания туннеля PPP между PAC и PNS, требуется сначала организовать между этими устройствами управляющее соединение. Это соединение представляет собой обычную сессию TCP, через которую передается информация управления вызовами и соединением PPTP. Сеанс управления логически связан с сессиями, организуемыми через туннель PPTP, но отделен от этих сессий. Для каждой пары PAC — PNS имеется управляющее соединение и туннель. Управляющее соединение отвечает за организацию, поддержку и завершение сессий, организуемых через туннель. Оно обеспечивает средства, с помощью которых PNS уведомляется о входящих вызовах на PAC, а также способов уведомления PAC о необходимости организации исходящего вызова.

Инициатором организации управляющего соединения может выступать PNS или PAC. После организации требуемого для работы соединения TCP устройства PNS и PAC организуют между собой управляющее соединение, используя сообщения Start-Control-Connection-Request и Start-Control-Connection-Reply. Эти сообщения служат также для обмена информацией о базовых возможностях PAC и PNS. После организации управляющего соединения PAC или PNS может инициировать сессии, запрашивая исходящие соединения или отвечая на входящие. Через управляющее соединение может выполняться обмен информацией о рабочих параметрах отдельных пользовательских сессий с помощью сообщений Set-Link-Info. Пользовательские сессии могут освобождаться (разрываться) устройством PAC или PNS с помощью сообщений управления соединениями (Control Connection).

Для поддержки самого управляющего соединения используются сообщения keep-alive. Это обеспечивает своевременное обнаружение разрывов соединения между PNS и PAC. О других отказах информация передается через управляющее соединение в сообщениях Wan-Error-Notify.

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

1.3.2. Протокол туннелирования

PPTP требует организации туннеля для каждой взаимодействующей пары PNS — PAC. Этот туннель служит для передачи пакетов PPP всех пользовательских сессий, проходящих через данную пару PNS — PAC. Ключ в заголовке GRE указывает к какой из сессий относится конкретный пакет PPP.

Такой способ обеспечивает мультиплексирование и демультиплексирование пакетов PPP через один туннель между парой устройств PNS — PAC. Используемое в качестве ключа значение задается процедурой организации вызова через управляющее соединение.

Заголовок GRE содержит также информацию о подтверждениях и порядковых номерах, которая позволяет организовать некий контроль насыщения и детектирование ошибок на уровне туннеля. Управляющее соединение используется для задания скорости и параметров буферизации, которые будут служить для управления потоком пакетов PPP отдельной сессии в данном туннеле. PPTP не задает конкретных алгоритмов контроля насыщения и управления потоком данных. Предлагаются алгоритмы определения адаптивных тайм-аутов для восстановления в случаях потери данных или подтверждений в туннеле (см. параграф 4.4).

1.4. Формат сообщений и расширяемость протокола

PPTP определяет набор сообщений, передаваемых через управляющее соединение TCP между устройствами PNS и PAC. Сессия TCP для управляющего соединения организуется инициатором соединения TCP через порт 1723 [6]. Порт-источник выбирается отправителем из числа свободных.

Каждое управляющее соединение PPTP Control Connection начинается с 8-октетного заголовка, включающего общий размер сообщения, индикатор типа сообщения PPTP и Magic Cookie.

Поле PPTP Message Type может указывать два типа сообщений Control Connection:

1 — Control Message (управление);

2 — Management Message (поддержка).

Сообщения типа Management в настоящее время не определены.

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

Для ясности все шаблоны сообщений Control Connection в следующем разделе указаны с полными заголовками PPTP Control Connection. Числовые значения с префиксом 0x обозначают шестнадцатеричные числа.

Определенные в настоящее время управляющие сообщения перечислены в таблице.

Управляющее сообщение

Код

Поддержка управляющего соединения

Start-Control-Connection-Request

1

Start-Control-Connection-Reply

2

Stop-Control-Connection-Request

3

Stop-Control-Connection-Reply

4

Echo-Request

5

Echo-Reply

6

Управление вызовами

Outgoing-Call-Request

7

Outgoing-Call-Reply

8

Incoming-Call-Request

9

Incoming-Call-Reply

10

Incoming-Call-Connected

11

Call-Clear-Request

12

Call-Disconnect-Notify

13

Сообщения об ошибках

WAN-Error-Notify

14

Управление сессией PPP

Set-Link-Info

15

Сообщения Start-Control-Connection-Request и Start-Control-Connection-Reply определяют используемую версию протокола Control Connection. Поле номера версии, передаваемое в таких сообщениях содержит номер версии в старшем октете и номер ревизии в младшем. Обработка номеров версий описана в разделе 2. В текущей версии протокола поле имеет значение 0x0100 — версия 1, ревизия 0.

Использование заголовков в стиле GRE для инкапсуляции пользовательских пакетов PPP описано в параграфе 4.1.

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

2. Спецификация протокола управления соединениями

Сообщения Control Connection служат для организации и разрыва пользовательских сессий. Первый набор сообщений Control Connection используется для организации управляющего соединения. Это соединение инициируется устройством PNS или PAC после того, как между ними будет создано транспортное соединение TCP. Процедуры и конфигурационные параметры организуемого соединения TCP не задаются данным протоколом.

Последующие сообщения Control Connection передаются, как пользовательские данные через организованное соединение TCP между данной парой устройств PNS — PAC. Следует обращать внимание на то, чтобы все 2-х (word) и 4-октетные (longword) значения выравнивались по соответствующим границам. Все данные передаются с использованием сетевого порядка (сначала старший октет). Все резервные поля должны при передаче устанавливаться в 0 для обеспечения совместимости с будущими версиями протокола.

2.1. Start-Control-Connection-Request

Start-Control-Connection-Request представляет собой управляющее сообщение PPTP, используемое для организации управляющего соединения между PNS и PAC. Для каждой пары PNS — PAC требуется выделенное управляющее соединение, которое должно быть организовано до того, как начнется обмен другими сообщениями PPTP. Организации управляющего соединения может быть инициирована PNS или PAC. Процедура обработки конфликтов между PNS и PAC при обработке сообщений Start-Control-Connection-Requests описана в параграфе 3.1.3.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Protocol Version        |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Framing Capabilities                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Bearer Capabilities                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Maximum Channels        |       Firmware Revision       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                     Host Name (64 октета)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Vendor String (64 октета)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D. Эта константа используется для проверки корректности принимаемых сообщений (см. параграф 1.4).

Control Message Type

1 для Start-Control-Connection-Request.

Reserved0

Должно иметь значение 0.

Protocol Version

Версия протокола PPTP, которую хочет применять отправитель.

Reserved1

Должно иметь значение 0.

Framing Capabilities

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

1 — асинхронное кадрирование;

2 — синхронное кадрирование.

Bearer Capabilities

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

1 — поддержка аналогового доступа;

2 — поддержка цифрового доступа.

Maximum Channels

Общее число сессий PPP, которые может поддерживать данное устройство PAC. В сообщениях Start-Control-Connection-Request от PNS для этого поля следует указывать 0. Такие значения должны игнорироваться PAC.

Firmware Revision

Это поле указывает номер версии ПО PAC для сообщений от устройства PAC или версии драйвера PNS PPTP для сообщений от устройства PNS.

Host Name

64-октетное поле, содержащее доменное имя передающего сообщение устройства PAC или PNS. Для имен размером менее 64 октетов неиспользуемые октеты следует заполнять нулями.

Vendor Name

64-октетное поле, содержащее строку описания типа устройства PAC (для сообщений от PAC) или типа программ, используемых PNS (для сообщений от PNS). Для строк размером менее 64 октетов неиспользуемые октеты следует заполнять нулями.

2.2. Start-Control-Connection-Reply

Start-Control-Connection-Reply представляет собой управляющее сообщение PPTP, которое передается в ответ на Start-Control-Connection-Request. Это сообщение включает код результата попытки организации соединения.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Protocol Version        |  Result Code  |  Error Code   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Framing Capability                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Bearer Capability                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Maximum Channels        |       Firmware Revision       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                     Host Name (64 октета)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Vendor String (64 октета)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

2 для Start-Control-Connection-Reply.

Reserved0

Должно иметь значение 0.

Protocol Version

Версия протокола PPTP, которую хочет применять отправитель.

Result Code

Показывает результат попытки организации командного канала:

1 — успешная организация соединения;

2 — ошибка общего типа, значение Error Code более точно указывает проблему;

3 — командный канал уже организован;

4 — запрашивающая сторона не уполномочена создавать командный канал;

5 — запрошенная версия протокола не поддерживается.

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1612.

Framing Capabilities

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

1 — асинхронное кадрирование;

2 — синхронное кадрирование.

Bearer Capabilities

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

1 — поддержка аналогового доступа;

2 — поддержка цифрового доступа.

Maximum Channels

Общее число сессий PPP, которые может поддерживать данное устройство PAC. В сообщениях Start-Control-Connection-Reply от PNS для этого поля следует указывать 0. Такие значения должны игнорироваться PAC. Устройствам PNS недопустимо использовать значение этого поля для попыток определения число сессий PPP, которое устройство PAC еще позволит добавить.

Firmware Revision

Это поле указывает номер версии ПО PAC для сообщений от устройства PAC или версии драйвера PNS PPTP для сообщений от устройства PNS.

Host Name

64-октетное поле, содержащее доменное имя передающего сообщение устройства PAC или PNS. Для имен размером менее 64 октетов неиспользуемые октеты следует заполнять нулями.

Vendor Name

64-октетное поле, содержащее строку описания типа устройства PAC (для сообщений от PAC) или типа программ, используемых PNS (для сообщений от PNS). Для строк размером менее 64 октетов неиспользуемые октеты следует заполнять нулями.

2.3. Stop-Control-Connection-Request

Stop-Control-Connection-Request представляет собой управляющее сообщение PPTP, передаваемое одним из устройств пары PAC — PNS своему партнеру для информирования о потребности в закрытии управляющего соединения. При разрыве управляющего соединения неявно разрываются и все связанные с ним сессии пользователей. Причина разрыва соединение указывается в поле Reason.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             Length            |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Reason     |   Reserved1   |           Reserved2           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

3 для Stop-Control-Connection-Request.

Reserved0

Должно иметь значение 0.

Reason

Указывает причину разрыва управляющего соединения:

1 (None) — обычный запрос на разрыв соединения;

2 (Stop-Protocol) — не поддерживается используемая партнером версия протокола;

3 (Stop-Local-Shutdown) — запрашивающая сторона будет выключена (shut down).

Reserved1, Reserved2

Должны иметь значение 0.

2.4. Stop-Control-Connection-Reply

Stop-Control-Connection-Reply представляет собой управляющее сообщение PPTP, передаваемое устройством пары PAC — PNS своему партнеру при получении от того сообщения Stop-Control-Connection-Request.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |   Error Code  |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

4 для Stop-Control-Connection-Reply.

Reserved0

Должно иметь значение 0.

Result Code

Указывает результат попытки закрыть соединение:

1 (OK) — управляющее соединение закрыто;

2 (General Error) — соединение не удалось закрыть, причина указана в Error Code

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1613.

Reserved1

Должно иметь значение 0.

2.5. Echo-Request

Сообщения Echo-Request может передавать любой из участников пары PAC — PNS. Эти сообщения служат для поддержки существования управляющего соединения (keep-alive). Принимающая сторона отвечает сообщением Echo-Reply на каждое полученное сообщение Echo-Request. Как отмечено в параграфе 3.1.4, если отправитель эхо-запроса не получает в ответ сообщения Echo-Reply, он будет в конечном итоге разрывать управляющее соединение.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Identifier                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

5 для Echo-Request.

Reserved0

Должно иметь значение 0.

Identifier

Значение устанавливается отправителем Echo-Request для того, чтобы сопоставить отклики с запросами.

2.6. Echo-Reply

Сообщения Echo-Reply может передавать любой из участников пары PAC — PNS в ответ на Echo-Request от партнера.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Identifier                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |   Error Code  |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

6 для Echo-Reply.

Reserved0

Должно иметь значение 0.

Identifier

Значение этого поля копируется из соответствующего сообщения Echo-Request.

Result Code

Показывает результат обработки запроса Echo-Request:

1 (OK) — сообщение Echo-Reply корректно;

2 (General Error) — сообщение Echo-Request не воспринято по причине, указанной полем Error Code

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1614.

Reserved1

Должно иметь значение 0.

2.7. Outgoing-Call-Request

Сообщения Outgoing-Call-Request передаются устройством PNS своему партнеру PAC для обозначения потребности в организации исходящего с PAC вызова. Этот запрос предоставляет устройству PAC информацию, требуемую для исходящего вызова, а также сведения, используемые PAC для управления данными, которые будут передаваться PNS в результате организации сессии.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |      Call Serial Number       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Minimum BPS                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Maximum BPS                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Bearer Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Framing Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |    Packet Processing Delay    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Phone Number Length      |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Phone Number (64 октета)                    +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                    Subaddress (64 октета)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

7 для Outgoing-Call-Request.

Reserved0

Должно иметь значение 0.

Call ID

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

Call Serial Number

Идентификатор, выделенный устройством PNS для данной сессии с целью ее обозначения в системных журналах устройства. В отличие от Call ID, оба устройства PNS и PAC связывают с данной сессией одно значение Call Serial Number. Следует обеспечивать уникальность для комбинации адреса IP и порядкового номера вызова.

Minimum BPS

Минимальная приемлемая скорость (в бит/с) в линии для данной сессии.

Maximum BPS

Максимальная приемлемая скорость (в бит/с) в линии для данной сессии.

Bearer Type

Значение, указывающее возможности, требуемые для исходящего вызова:

1 — вызов может быть организован по аналоговому каналу;

2 — вызов может быть организован по цифровому каналу;

3 — вызов может быть организован по аналоговому или цифровому каналу.

Framing Type

Значение, указывающее тип кадрирования PPP для использования с данным исходящим вызовом:

1 — асинхронное кадрирование;

2 — синхронное кадрирование;

3 — асинхронное или синхронное кадрирование.

Packet Recv. Window Size

Число принятых пакетов данных, которые PNS будет буферизовать для данной сессии.

Packet Processing Delay

Мера задержки, которая может возникать при передаче данных от PAC к PNS, в десятых долях секунды (1/10 с). Для PNS это значение следует делать очень малым. Рекомендации по выбору значения даны в параграфе 4.4.

Phone Number Length

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

Reserved1

Должно иметь значение 0.

Phone Number

Телефонный номер, который будет применяться для исходящего вызова. Для ISDN и аналоговых линий это поле является строкой ASCII. Если размер строки номера меньше 64 октетов, свободные октеты заполняются нулями.

Subaddress

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

2.8. Outgoing-Call-Reply

Сообщения Outgoing-Call-Reply устройство PAC передает PNS в ответ на Outgoing-Call-Request. Этот отклик показывает результат попытки исходящего вызова и предоставляет PNS дополнительные данные о параметрах вызова. Полученная информация позволяет PNS регулировать в этой сессии передачу данных PAC.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |       Peer's Call ID          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |  Error Code   |          Cause Code           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Connect Speed                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |    Packet Processing Delay    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Physical Channel ID                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

8 для Outgoing-Call-Reply.

Reserved0

Должно иметь значение 0.

Call ID

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

Peer’s Call ID

В это поле копируется значение Call ID из соответствующего запроса Outgoing-Call-Request. Поле используется PNS для сопоставления Outgoing-Call-Reply с переданным ранее Outgoing-Call-Request, а также включается в заголовок GRE для мультиплексирования и демультиплексирования.

Result Code

Это значение показывает результат обработки Outgoing-Call-Request:

1 (Connected) — вызов выполнен без ошибок;

2 (General Error) — исходящий вызов не удался, код ошибки указан в Error Code;

3 (No Carrier) — отсутствие сигнала несущей в линии;

4 (Busy) — линия занята;

5 (No Dial Tone) — отсутствие сигнала вызова в линии;

6 (Time-out) — вызов не удалось организовать в течение времени, отведенного устройством PAC;

7 (Do Not Accept) — исходящий вызов запрещен административно.

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1615.

Cause Code

Это поле содержит дополнительную информацию о причине отказа. Значение поля может меняться в зависимости от типа вызова. Для вызовов ISDN используются коды причин Q.931.

Connect Speed

Установленная скорость соединения (бит/с).

Packet Recv. Window Size

Число принятых пакетов данных, которые PAC будет буферизовать для этой сессии.

Packet Processing Delay

Мера задержки, которая может возникать при передаче данных от PNS к PAC, в десятых долях секунды (1/10 с). Для PAC это значение связано с размером буфера, используемого для передаваемых клиенту пакетов и скорости в соединяющей с клиентом линии. Следует устанавливать максимальное значение задержки, которая обычно возникает между получением пакета устройством PAC и его отправкой клиенту. Рекомендации по выбору значения даны в параграфе 4.4.

Physical Channel ID

Это поле устанавливается устройством PAC и выбор значений зависит от производителя оборудования. Значение применяется лишь для протоколирования работы.

2.9. Incoming-Call-Request

Сообщения Incoming-Call-Request передаются устройством PAC устройству PNS для индикации входящего вызова, принятого PAC. Запрос передает устройству PNS параметры, связанные с этим входящим вызовом.

Это сообщение является первым в трехэтапном согласовании (three-way handshake), используемом протоколом PPTP для входящих вызовов. PAC может отложить восприятие вызова до момента получения Incoming-Call-Reply от устройства PNS, показывающего согласие на организацию соединения. Этот механизм позволяет PNS получить до организации соединения информацию, которая позволяет принять решение о восприятии вызова или отказе от него.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |      Call Serial Number       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Call Bearer Type                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Physical Channel ID                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Dialed Number Length      |     Dialing Number Length     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                   Dialed Number (64 октета)                   +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                  Dialing Number (64 октета)                   +
      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                    Subaddress (64 октета)                     +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

9 для Incoming-Call-Request.

Reserved0

Должно иметь значение 0.

Call ID

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

Call Serial Number

Идентификатор, выбранный устройством PAC для этой сессии с целью ее обозначения при записи информации в системный журнал. В отличие от Call ID, оба устройства PNS и PAC связывают с данной сессией одно значение Call Serial Number. Следует обеспечивать уникальность для комбинации адреса IP и порядкового номера вызова.

Bearer Type

Значение, указывающее тип входящего вызова:

1 — вызов по аналоговому каналу;

2 — вызов по цифровому каналу.

Physical Channel ID

Это поле устанавливается PAC для нумерации физического канала, принявшего вызов.

Dialed Number Length

Актуальное число цифр, которые могут указываться в поле телефонного номера (Dialed Number.

Dialing Number Length

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

Dialed Number

Номер, набранный вызывающей стороной. Для аналоговых линий и ISDN это поле представляет собой строку ASCII. Если размер строки Dialed Number менее 64 октетов, неиспользуемые октеты заполняются нулями.

Dialing Number

Номер, с которого был организован входящий вызов. Для аналоговых линий и ISDN это поле представляет собой строку ASCII. Если размер строки Dialing Number менее 64 октетов, неиспользуемые октеты заполняются нулями.

Subaddress

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

2.10. Incoming-Call-Reply

Сообщение Incoming-Call-Reply передается устройством PNS концентратору PAC в ответ на полученное от того сообщение Incoming-Call-Request. Отклик показывает результат попытки организации соединения и содержит дополнительную информацию, позволяющую устройству PAC управлять для этой сессии передачей данных в PNS.

Это сообщение является вторым в трехэтапном согласовании при обработке входящих вызовов PPTP. Оно показывает устройству PAC следует ли принять или отвергнуть входящий вызов.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |       PPTP Message Type       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |       Peer's Call ID          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Result Code  |  Error Code   |   Packet Recv. Window Size    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Packet Transmit Delay     |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

10 для Incoming-Call-Reply.

Reserved0

Должно иметь значение 0.

Call ID

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

Peer’s Call ID

В это поле копируется значение Call ID из соответствующего запроса Incoming-Call-Request. Поле используется PAC для сопоставления Incoming-Call-Reply с переданным ранее Incoming-Call-Request, а также включается в заголовок GRE для мультиплексирования и демультиплексирования.

Result Code

Значение, показывающее результат обработки Incoming-Call-Request:

1 (Connect) — устройству PAC следует принять входящий вызов;

2 (General Error) — соединение для входящего вызова не следует организовывать по причине, указанной Error Code;

3 (Do Not Accept) — PAC не следует принимать входящий вызов («положить трубку» или передать сигнал «занято»).

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1616.

Packet Recv. Window Size

Число принимаемых пакетов, которые PAC будет буферизовать для данной сессии.

Packet Transmit Delay

Мера задержки, которая может возникать при передаче данных от PAC к PNS, в десятых долях секунды (1/10 с).

Reserved1

Должно иметь значение 0.

2.11. Incoming-Call-Connected

Сообщение Incoming-Call-Connected концентратор PAC передает серверу PNS в ответ на полученное от того сообщение Incoming-Call-Reply. Данное сообщение обеспечивает PNS информацию о конкретных параметрах вызова, а также сведения, позволяющие серверу PNS регулировать передачу данных концентратору PAC.

Это сообщение является третьим в трехэтапном согласовании, используемом PPTP для входящих вызовов. Оно обеспечивает механизм предоставления серверу PNS дополнительной информации, которую в общем случае невозможно получить в момент передачи концентратором PAC сообщения Incoming-Call-Request.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Peer's Call ID          |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Connect Speed                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Packet Recv. Window Size    |     Packet Transmit Delay     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Framing Type                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

11 для Incoming-Call-Connected.

Reserved0

Должно иметь значение 0.

Peer’s Call ID

В это поле копируется значение Call ID из соответствующего запроса Incoming-Call-Reply. Поле используется PNS для сопоставления Incoming-Call-Connected с переданным ранее Incoming-Call-Reply.

Connect Speed

Реально используемая для соединения скорость (бит/с)

Packet Recv. Window Size

Число принимаемых пакетов, которые PAC будет буферизовать для данной сессии.

Packet Transmit Delay

Мера задержки, которая может возникать при передаче данных от PAC к PNS, в десятых долях секунды (1/10 с).

Framing Type

Значение, указывающее тип кадрирования PPP для исходящего вызова:

1 — асинхронное кадрирование;

2 — синхронное кадрирование.

2.12. Call-Clear-Request

Сообщение Call-Clear-Request передается сервером PNS концентратору PAC для индикации планируемого разрыва отдельной сессии. Разрываемое по этому сообщению соединение может быть как входящим, так и исходящим. PAC в ответ на это сообщение передает Call-Disconnect-Notify.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

12 для Call-Clear-Request.

Reserved0

Должно иметь значение 0.

Call ID

Идентификатор Call ID выделенный сервером PNS для этого вызова. Это значение используется взамен Peer’s Call ID, поскольку PNS может не знать этого идентификатора, если соединение разрывается на этапе его организации.

Reserved1

Должно иметь значение 0.

2.13. Call-Disconnect-Notify

Сообщения Call-Disconnect-Notify передаются концентратором PAC серверу PNS. Такое сообщение говорит о разрыве соединения в результате получения концентратором PAC запроса Call-Clear-Request или по иной причине. Задачей сообщения является информирование сервера PNS о разрыве соединения и причине такого разрыва.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message Type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Call ID            |  Result Code  |  Error Code   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Cause Code           |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +              Call Statistics (128 октетов)                    +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

13 для Call-Disconnect-Notify.

Reserved0

Должно иметь значение 0.

Call ID

Идентификатор Call ID, выделенный PAC для этого вызова. Это значение используется взамен Peer’s Call ID, поскольку PNS может не знать этого идентификатора, если соединение разрывается на этапе его организации.

Result Code

Это значение указывает причину разрыва соединения:

1 (Lost Carrier) — потеря сигнала несущей в линии;

2 (General Error) — разрыв соединения по причине, указанной Error Code;

3 (Admin Shutdown) — разрыв соединения по административным причинам;

4 (Request) — разрыв в результате приема сообщения Call-Clear-Request.

Error Code

Это поле имеет значение 0, если не возникла ошибка общего типа (Result Code = 2). В последнем случае данное поле содержит один из кодов ошибок общего типа, описанных в параграфе 2.1617.

Cause Code

Это поле содержит дополнительную информацию о причине отказа. Значение поля может меняться в зависимости от типа вызова. Для вызовов ISDN используются коды причин Q.931.

Call Statistics

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

2.14. WAN-Error-Notify

Сообщения WAN-Error-Notify передаются концентраторами PAC серверам PNS для индикации ошибок WAN (ошибочная ситуация на интерфейсе, поддерживающем PPP). Для таких сообщений используются накопительные счетчики. Сообщения этого типа следует передавать только при возникновении реальных ошибок и не чаще одного раза в течение 60 секунд. Счетчики сбрасываются при организации нового вызова.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Peer's Call ID         |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          CRC Errors                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Framing Errors                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Hardware Overruns                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Buffer Overruns                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Time-out Errors                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Alignment Errors                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

14 для WAN-Error-Notify.

Reserved0

Должно иметь значение 0.

Peer’s Call ID

Значение Call ID, выделенное сервером PNS для этого вызова.

CRC Errors

Число кадров PPP, принятых с ошибками четности (CRC) с момента организации сессии.

Framing Errors

Число принятых кадров PPP с ошибками кадрирования.

Hardware Overruns

Число случаев переполнения приемных буферов с момента организации сессии.

Buffer Overruns

Число случаев переполнения буферов с момента организации сессии.

Time-out Errors

Число тайм-аутов с момента организации сессии.

Alignment Errors

Число ошибок выравнивания с момента организации сессии.

2.15. Set-Link-Info

Сообщения Set-Link-Info передаются серверами PNS концентраторами PAC для установки согласованных протоколом PPP опций. Поскольку эти опции могут меняться во время сессии, устройства PAC должны обеспечивать возможность динамического изменения своей информации о соединениях и выполнения согласований PPP для активных сессий.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Length             |      PPTP Message Type        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Magic Cookie                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Control Message type      |           Reserved0           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Peer's Call ID         |           Reserved1           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Send ACCM                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Receive ACCM                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Length

Общий размер сообщения PPTP в октетах с учетом всего заголовка PPTP.

PPTP Message Type

1 для управляющего сообщения.

Magic Cookie

0x1A2B3C4D.

Control Message Type

15 для Set-Link-Info.

Reserved0

Должно иметь значение 0.

Peer’s Call ID

Идентификатор Call ID, выделенный PAC для этого вызова.

Reserved1

Должно иметь значение 0.

Send ACCM

Значение Send ACCM, которое клиенту следует использовать для обработки исходящих пакетов PPP. До получения сообщений этого типа клиенты используют принятое по умолчанию значение 0XFFFFFFFF [7].

Receive ACCM

Значение Receive ACCM, которое клиенту следует использовать для обработки входящих пакетов PPP. До получения сообщений этого типа клиенты используют принятое по умолчанию значение 0XFFFFFFFF [7].

2.16. Коды ошибок общего типа

Коды ошибок общего типа не относятся к каким-либо специфическим запросам PPTP и служат для указания протокольных ошибок и ошибок, связанных с форматом сообщений. Если отклик PPTP указывает в поле Result Code возникновение ошибки общего типа, для определения конкретной ошибки следует обращаться к полю General Error. Определенные в настоящее время коды General Error перечислены ниже:

0 (None)

Нет ошибок.

1 (Not-Connected)

Нет управляющего соединения для данной пары PAC — PNS.

2 (Bad-Format)

Некорректный размер сообщения или значение Magic Cookie.

3 (Bad-Value)

Значение одного из полей выходит за допустимые пределы или резервное поле отлично от 0.

4 (No-Resource)

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

5 (Bad-Call ID)

Значение Call ID некорректно в данном контексте.

6 (PAC-Error)

Специфическая ошибка оборудования в устройстве PAC.

3. Работа протокола управления соединением

В этом разделе описана работа различных функций управления соединениями PPTP и используемые при этом сообщения Control Connection. Протокольные операции управления соединениями упрощаются за счет применения надежного транспорта TCP. На уровне протокола не нужно контролировать порядок доставки и повторную передачу пакетов. Однако само соединение TCP может быть разорвано в любой момент и для таких ситуаций нужен соответствующий механизм восстановления.

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

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

3.1. Состояния управляющего соединения

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

3.1.1. Инициатор управляющего соединения (PAC или PNS)

                Индикация TCP Open 
                /Передача Start-Control-
                 Connection-Request        +-----------------+
     +------------------------------------>|  wait_ctl_reply |
     |                                     +-----------------+
     |      Конфликт/См. (4.1.3) Close TCP   V  V  V   Прием Start-Ctl-
     |       +-------------------------------+  |  |   Connection-Reply
     |       |                                  |  |   Верная версия
     ^       V                                  |  V
+-----------------+          Прием Start-Ctl-   | +-----------------+
|      idle       |          Connection-Reply   | |   established   |
+-----------------+          Неверная версия    | +-----------------+
     ^                                          |  V   Локальный разрыв
     |         Прием Stop-Control-              |  |   /Передача Stop-
     |         Connection-Request               |  |    Control-Request
     |         /Передача Stop-Control-Reply     V  V
     |          Close TCP                  +-----------------+
     +-------------------------------------| wait_stop_reply |
                                           +-----------------+

idle

В этом состоянии инициатор управляющего соединения пытается организовать соединение TCP с партнером. После создания транспортного соединения TCP инициатор передает сообщение Start-Control-Connection-Request и переходит в состояние wait_ctl_reply.

wait_ctl_reply

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

При получении Start-Control-Connection-Reply это сообщение проверяется на предмет совместимости версий. Если версия в отклике ниже версии в запросе, следует использовать меньшую (более старую) версию, если она поддерживается обеими сторонами. Если в отклике указана более старая версия и она поддерживается инициатором, тот переходит в состояние established. Если в отклике указана более старая и не поддерживаемая версия, инициатору следует передать партнеру сообщение Stop-Control-Connection-Request, а потом перейти в состояние wait_stop_reply.

established

Организованное соединение может быть разорвано по локальным условиям или в результате получения от партнера запроса Stop-Control-Connection-Request. При разрыве по локальным причинам инициатор должен передать сообщение Stop-Control-Connection-Request и перейти в состояние wait_stop_reply.

Если инициатор получает запрос Stop-Control-Connection-Request, ему следует передать ответное сообщение Stop-Control-Connection-Reply и закрыть сообщение TCP, убедившись с том, что финальные данные TCP отправлены.

wait_stop_reply

При получении отклика Stop-Control-Connection-Reply соединение TCP следует закрывать и управляющее соединение переходит в состояние idle.

3.1.2. Ответчик управляющего соединения (PAC или PNS)

Прием Start-Control-Connection-Request
Версия не верна/Передача Start-Control-Connection-
Reply с кодом ошибки
  +--------+
  |        |         Прием Control-Connection-Request, версия верна
  |        |         /Передача Start-Control-Connection-Reply
  |        |   +----------------------------------------+
  ^        V   ^                                        V
+-----------------+             Прием Start-Ctl-     +-----------------+
|      Idle       |             Connection-Request   |   Established   |
+-----------------+             /Передача Stop-Reply-+-----------------+
        ^      ^                 Close TCP           V  V Локальный разрыв
        |      +-------------------------------------+  | /Передача Stop-
        |                                               |  Control-Conn.-
        |                                               V  Request
        |                                     +-----------------+
        +-------------------------------------| Wait-Stop-Reply |
                 Прием Stop-Control-          +-----------------+
                 Connection-Reply
                 /Close TCP

idle

Получатель в управляющем соединении ждет организации управляющего соединения TCP через порт 1723. После уведомления о создании такого соединения TCP ему следует приготовиться к получению сообщений PPTP. При получении запроса Start-Control-Connection-Request следует проверить номер версии. Если в сообщении указана версия более ранняя, чем версия у получателя, и эта версия поддерживается получателем, тому следует передать сообщение Start-Control-Connection-Reply. Если в сообщении указана более ранняя, но не поддерживаемая версия, получателю следует передать сообщение Start-Connection-Reply, закрыть соединение TCP и перейти в состояние idle. Если версия получателя совпадает с версией в сообщении или старее той, получателю следует передать сообщение Start-Control-Connection-Reply со своим номером версии и перейти в состояние established.

established

Организованное соединение может быть разорвано по локальным условиям или в результате получения от партнера запроса Stop-Control-Connection-Request. При разрыве по локальным причинам инициатор должен передать сообщение Stop-Control-Connection-Request и перейти в состояние wait_stop_reply.

Если инициатор получает запрос Stop-Control-Connection-Request, ему следует передать ответное сообщение Stop-Control-Connection-Reply и закрыть сообщение TCP, убедившись с том, что финальные данные TCP отправлены.

wait_stop_reply

При получении отклика Stop-Control-Connection-Reply следует закрыть соединение TCP, а управляющее соединение переходит в состояние idle.

3.1.3. Конфликты при организации управляющего соединения

Между устройствами PAC и PNS должно быть организовано единственное управляющее соединение. Однако возможны случаи, когда PNS и PAC одновременно попытаются организовать управляющие соединения между собой. При получении запроса Start-Control-Connection-Request через соединение TCP, когда уже был отправлен другой запрос Start-Control-Connection-Request тому же партнеру через другое соединение TCP, возникает конфликт.

В качестве «победителя» при таком конфликте выбирается инициатор с большим значением адреса IP (сравниваются, как 32-битовые целые числа без знака с номером сети в качестве старшего байта). Например, если партнеры используют адреса 192.33.45.17 и 192.33.45.89, при возникновении конфликта «победителем» станет второй. «Проигравший» будет незамедлительно закрывать соединение TCP без передачи каких-либо управляющих сообщений PPTP, а после этого отвечать «победителю» сообщением Start-Control-Connection-Reply. «Победитель» будет ждать отклика Start-Control-Connection-Reply через организованное соединение, а также индикации разрыва открытого «проигравшим» соединения TCP. «Победителю» недопустимо передавать какие-либо сообщения в инициированное «проигравшим» соединение.

3.1.4. Сообщения Keep Alive и таймеры

Управляющее соединение следует закрывать путем разрыва транспортного соединения TCP в следующих случаях:

  1. Если управляющее соединение не находится в состоянии established (т. е., не был выполнен обмен сообщениями Start-Control-Connection-Request и Start-Control-Connection-Reply), его следует закрывать по истечении 60 секунд ожидания приема от партнера сообщения Start-Control-Connection-Request или Start-Control-Connection-Reply.

  2. Если управляющее соединение находится в состоянии established и от партнера не получено ни одного управляющего сообщения в течение 60 секунд, следует отправить сообщение Echo-Request. Если в течение 60 секунд после этого не будет получен отклик Echo-Reply, управляющее соединение следует закрыть.

3.2. Состояния вызовов

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

Поскольку телефонная сигнализация происходит в реальном масштабе времени, устройствам PNS и PAC следует поддерживать многопотоковую архитектуру, позволяющую обрабатывать сообщения в разных соединениях без очередей и блокировок. Задержка при передаче между PAC и PNS должна быть не более 1 секунды. На диаграммах вызовов и состояний соединений не показаны исключения, вызываемые таймерами. Неявно предполагается, что управляющее соединение TCP поддерживается транспортными сообщениями keep-alive, обеспечивает возможность работы без строго контроля таймеров для управляющих сообщений.

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

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

3.2.2. Значения Call ID

Каждая пара PAC – PNS выделяет значение Call ID для каждой пользовательской сессии, которую она запрашивает или воспринимает. Эти значения Call ID должны быть уникальными для туннеля между PNS и PAC, к которому относятся сессии. В туннелях к другим партнерам могут использоваться такие же значения Call ID, поэтому получателю пакетов из туннеля следует связывать пользовательскую сессию с туннелем и Call ID. Предполагается, что число возможных значений Call ID для каждого туннеля по крайней мере вдвое превышает максимальное число вызовов, ожидаемое для данного туннеля.

Сессия определяется тремя значениями (PAC, PNS, Call ID).

3.2.3. Входящие вызовы

Сообщения Incoming-Call-Request генерируются концентратором PAC при получении вызовов по соответствующим телефонным линиям. PAC выбирает значение Call ID и порядковый номер, а также указывает тип вызова18. Для модемов всегда следует указывать аналоговый вызов. Для вызовов ISDN следует указывать цифровой тип при использовании неограниченного цифрового обслуживания или адаптации скорости и аналоговый тип при использовании «цифровых модемов». Номер вызывающего, номер для вызова и субадрес также могут включаться в сообщение, если эти значения можно получить из телефонной сети.

После того, как концентратор PAC передаст сообщение Incoming-Call-Request, он ждет отклика от сервера PNS, не отвечая на вызов из телефонной сети. PNS может отказаться от приема вызова в случаях:

  • нехватки ресурсов для обслуживания дополнительной сессии;

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

  • заданный тип вызова не поддерживается или запрещен для использования.

Если сервер PNS принимает решение о восприятии вызова, он передает сообщение Incoming-Call-Reply, которое указывает также размеры окон (см. параграф 4.2). Когда концентратор PAC получает сообщение Outgoing-Call-Reply, он пытается принять вызов, если вызывающая сторона еще не прекратила попытку. Финальное сообщение о соединении от PAC к PNS показывает, что для обоих устройств состояние соединения нужно перевести в established.

Когда пользователь коммутируемой линии «кладет трубку», вызов сбрасывается и концентратор PAC передает сообщение Call-Disconnect-Notify. Если сервер PNS сам желает разорвать соединение, он передает сообщение Call-Clear-Request и ждет для него отклика Call-Disconnect-Notify.

3.2.3.1. Состояния PAC для входящих вызовов
    Звонок/Передача Incoming-Call-Request    +-----------------+
  +----------------------------------------->|    wait_reply   |
  |                                          +-----------------+
  |           Прием Incoming-Call-Reply      V  V  V
  |           Не принимается                 |  |  |   Прием Incoming-
  |         +--------------------------------+  |  |   Call-Reply, принимается
  |         |    +------------------------------+  |   /ответ на вызов;
  |         |    |     Прерыван./Передача Call-    |   Передача Call-
  ^         V    V     Disconnect-Notify           V   Connected
+-----------------+                              +-----------------+
|      idle       |<-----------------------------|   established   |
+-----------------+  Прием Clear-Call-Request,   +-----------------+
                     разрыв соединения в линии
                     или локальное отключение
                     /Передача Call-Disconnect-Notify

По отношению к входящим вызовам концентратор PAC может находиться в состояниях:

idle

Концентратор PAC детектирует вызов на одном из своих интерфейсов в телефонные сети. Обычно это звонок по аналоговой линии или входящее сообщение Q.931 SETUP на ISDN TE. PAC передает сообщение Incoming-Call-Request и переходит в состояние wait_reply.

wait_reply

PAC получает сообщение Incoming-Call-Reply с указанием неготовности принять вызов (общая ошибка или неприемлемость вызова) и возвращается в состояние idle. Если отклик указывает приемлемость вызова, PAC передает сообщение Incoming-Call-Connected и переходит в состояние established.

established

Обмен данными через туннель. Соединение может быть разорвано в результате:

    • события в телефонной сети (PAC передает сообщение Call-Disconnect-Notify);

    • приема сообщения Call-Clear-Request (PAC передает сообщение Call-Disconnect-Notify);

    • локальных причин (PAC передает сообщение Call-Disconnect-Notify).

3.2.3.2. Состояния PNS для входящих вызовов
  Прием Incoming-Call-Request
  /Передача Incoming-Call-Reply              +-----------------+
   Не принимается при ошибке                 |   Wait-Connect  |
  +-----+                                    +-----------------+
  |     |     Прием Incoming-Call-Req.       ^  V  V
  |     |     /Передача Incom.-Call-Reply OK |  |  |   Прием Incoming-
  |     |   +--------------------------------+  |  |   Call-Connect
  ^     V   ^    V------------------------------+  V
+-----------------+  Прием Call-Disconnect-      +-----------------+
|      Idle       |  Notify                   +- |   Established   |
+-----------------+                           |  +-----------------+
        ^        ^                            |   V   Локальный разрыв
        |        +----------------------------+   |   /Передача Call-Clear-
        |            Прием Call-Disconnect-       |    Request
        |            Notify                       V
        |                                      +-----------------+
        +--------------------------------------| Wait-Disconnect |
                     Прием Call-Disconnect-    +-----------------+
                     Notify

По отношению к входящим вызовам сервер PNS может находиться в состояниях:

idle

Принимается сообщение Incoming-Call-Request. Если запрос не приемлем, в ответ на него концентратору PAC возвращается сообщение Incoming-Call-Reply и сервер PNS остается в состоянии idle. Если запрос Incoming-Call-Request приемлем, передается сообщение Incoming-Call-Reply, указывающее возможность приема вызова в коде результат. Сессия переводится в состояние wait_connect.

wait_connect

Если сессия подключена на концентраторе PAC, он передает сообщение Incoming-Call-Connect серверу PNS и тот переходит в состояние established. PAC может передать сообщение Call-Disconnect-Notify для индикации того, что входящий вызов не может быть принят. Это может происходить, например, в результате обычного голосового вызова на номер концентратора PAC с соответствующим отказом процедуры согласования в модеме.

established

Сессия разрывается приемом сообщения Call-Disconnect-Notify от устройства PAC или передачей запроса Call-Clear-Request. После отправки сообщения Call-Clear-Request сессия переходит в состояние wait_disconnect.

wait_disconnect

После приема сообщения Call-Disconnect-Notify сессия возвращается в состояние idle.

3.2.4. Исходящие вызовы

Исходящие сообщения инициируются PNS и запрашивают у концентратора PAC организацию вызова через интерфейс в телефонную сеть. Имеется только два сообщения для работы с исходящими вызовами — Outgoing-Call-Request и Outgoing-Call-Reply. PNS передает запрос Outgoing-Call-Request, указывающий номер вызываемого абонента и его субадрес, а также значения скорости и параметров окна. Концентратор PAC должен ответить на Outgoing-Call-Request своим сообщением Outgoing-Call-Reply после того, как:

  • соединение будет организовано;

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

3.2.4.1. Состояния PAC для исходящих вызовов
Прием Outgoing-Call-Request при ошибке
/Передача Outgoing-Call-Reply с Error Code
  |--------+
  |        |         Прием Outgoing-Call-Request без ошибок
  |        |         /Подъем трубки; Набор номера
  |        |   +-----------------------------------------
  ^        V   ^                                        V
+-----------------+           Незавершенный вызов    +-----------------+
|      idle       |           /Перед. Outgoing-Call- |   wait_cs_ans   |
+-----------------+            Reply с Error Code    +-----------------+
        ^      ^    или Прием Recv.-Call-Clear-Req.  V  V Ответ из телефонной линии
        |      |              /Send Disconnect Notify|  | /Передача Outgoing-
        |      +-------------------------------------+  |  Call-Reply.
        |                                               V
        |                                     +-----------------+
        +-------------------------------------|   established   |
                 Прием Call-Clear-Request,    +-----------------+
                 локальный разрыв,
                 или разрыв в линии
                 /Положить трубку и предать
                 Call-Disconnect-Notify

По отношению к исходящим вызовам концентратор PAC может находиться в состояниях:

idle

Принят запрос Outgoing-Call-Request. Если при его выполнении возникает ошибка, возвращается сообщение Outgoing-Call-Reply с указанием кода ошибки. В остальных случаях для звонка выделяется канал. После организации вызова концентратор ждет ответа удаленной стороны и переходит в состояние wait_cs_ans.

wait_cs_ans

Если вызов остается не завершенным, передается сообщение Outgoing-Call-Reply с отличным от нуля полем Error Code. Если истекло время ожидания для исходящего вызова, возвращается сообщение Outgoing-Call-Reply с отличным от нуля полем Error Code. Если коммутируемое соединение организовано, возвращается сообщение Outgoing-Call-Reply с индикацией успеха.

established

При получении запроса Call-Clear-Request телефонный вызов следует сбросить с помощью подходящего механизма, а серверу PNS следует направить сообщение Call-Disconnect-Notify. Если соединение было разорвано клиентом или интерфейсом в телефонную сеть, следует передать серверу PNS сообщение Call-Disconnect-Notify.

3.2.4.2. Состояния PNS для исходящих вызовов
                Индикация Open                                Прерывание/передача
                /Передача Outgoing-Call-                      Call-Clear-
                 Request                  +-----------------+ Request
        +-------------------------------->|    Wait-Reply   |----------+
        |                                 +-----------------+          |
        |     Прием Outgoing-Call-Reply     V     V   Прием Outgoing-  |
        |     с Error Code                  |     |   Call-Reply       |
        |   +-------------------------------+     |   нет ошибок       |
        ^   V                                     V                    |
+-----------------+                              +-----------------+   |
|      Idle       |<-----------------------------|   Established   |   |
+-----------------+    Прием Call-Disconnect-    +-----------------+   |
        ^              Notify                     V   Локальный разрыв |
        |                                         | /Перед. Call-Clear-|
        |                                         |    Request         |
        |     Прием Call-Disconnect-              V                    |
        |     Notify                      +-----------------+          |
        +---------------------------------| Wait-Disconnect |<---------+
                                          +-----------------+

По отношению к исходящим вызовам сервер PNS может находиться в состояниях:

idle

Передается сообщение Outgoing-Call-Request концентратору PAC и сессия переходит в состояние wait_reply.

wait_reply

Принимается сообщение Outgoing-Call-Reply с индикацией ошибки и сессия возвращается в состояние idle. Нет активного соединения с телефонной сетью. Если сообщение Outgoing-Call-Reply не говорит об ошибке, организуется телефонное соединение и сессия переходит в состояние established.

established

Сообщение Call-Disconnect-Notify говорит о неудаче телефонного вызова по причине, указанной полями Result Code и Cause Code. Сессия возвращается в состояние idle. Если сервер PNS решает прервать сессию, он передает сообщение Call-Clear-Request концентратору PAC и переходит в состояние wait_disconnect.

wait_disconnect

Ожидание подтверждения разрыва сессии от концентратора PAC. Когда PNS получает сообщение Call-Disconnect-Notify, сессия переходит в состояние idle.

4. Работа туннельного протокола

Пользовательские данные передаются протоколом PPTP в форме пакетов данных PPP. Передаваемые между устройствами PAC и PNS пакеты PPP инкапсулируются с использованием пакетов GRE, которые, в свою очередь, передаются по протоколу IP. Инкапсулированные пакеты PPP являются преимущественно пакетами данных PPP за исключением незначительного числа специфических для среды элементов кадрирования. Не используется флагов HDLC, вставки битов, управляющих символов. Контрольные суммы CRC не передаются через туннель. Пакеты IP, передаваемые через туннели между PAC и PNS имеют структуру, показанную на рисунке.

      +--------------------------------+
      |        Заголовок среды         |
      +--------------------------------+
      |          Заголовок IP          |
      +--------------------------------+
      |         Заголовок GRE          |
      +--------------------------------+
      |           Пакет PPP            |
      +--------------------------------+

 

4.1. Заголовок Enhanced GRE

Заголовок GRE, используемый в PPTP, незначительно отличается от заданного в текущей спецификации протокола GRE [1, 2]. Основное отличие заключается в добавлении поля Acknowledgment Number, используемого для уведомления о доставке конкретного пакета GRE или группы пакетов на удаленную сторону туннеля. Этот механизм подтверждения не используется совместно с каким-либо повтором передачи пользовательских данных. Он просто служит для определения скорости, с которой передаются через туннель данные конкретной пользовательской сессии. Формат расширенного заголовка GRE показан на рисунке.

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |C|R|K|S|s|Recur|A| Flags | Ver |         Protocol Type         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Key (HW) Payload Length    |       Key (LW) Call ID        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Sequence Number (необязат.)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Acknowledgment Number (необязат.)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C

(Бит 0) Присутствует контрольная сумма. Устанавливается в 0.

R

(Бит 1) Присутствует маршрутизация. Устанавливается в 0.

K

(Бит 2) Присутствует ключ. Устанавливается значение 1.

S

(Бит 3) Присутствует порядковый номер. Устанавливается 1 при наличии пользовательских данных и 0, если таких данных нет (пакет GRE содержит только подтверждение — Acknowledgment).

s

(Бит 4) Присутствует строго заданный отправителем маршрут. Устанавливается в 0.

Recur

(Биты 5-7) Управление рекурсией. Устанавливается в 0.

A

(Бит 8) Присутствует порядковый номер подтверждения. Устанавливается в 1, если пакет содержит Acknowledgment Number для подтверждения ранее переданных данных.

Flags

( Биты 9-12) Должны устанавливаться в 0.

Ver

( Биты 13-15) Должны устанавливаться в 1 (Enhanced GRE).

Protocol Type

Шестнадцатеричное значение 880B [8].

Key

Применение поля Key определяется реализацией. В PPTP поле ключа используется, как показано ниже:

Payload Length

(2 старших октета поля Key) Размер данных без учета заголовка GRE.

Call ID

(Два младших октета) Содержит значение Peer’s Call ID для сессии, к которой относится пакет.

Sequence Number

Содержит порядковый номер данных, используется при установленном (1) флаге S (бит 3).

Acknowledgment Number

Содержит наибольший порядковый номер пакета GRE, полученного передающим партнером в этой пользовательской сессии. Присутствует при установленном (1) флаге A (бит 8).

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

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

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

4.2. Протокол скользящего окна

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

4.2.1. Начальный размер окна

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

4.2.2. Сужение окна

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

4.2.3. Расширение окна

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

4.2.4. Переполнение окна

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

4.2.5. Подтверждение множества пакетов

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

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

4.3. Нарушение порядка пакетов

Иногда при доставке пакетов через сложную межсетевую среду может меняться порядок их доставки. Рассмотрим в качестве примера случай, когда PNS передает пакеты 0 — 5 концентратору PAC. В результате изменения маршрута пакет 4 приходит в PAC до пакета 3. PAC подтверждает пакет 4 и может предположить потерю пакета 3. Такое подтверждение позволяет переместить окно за пределы пакета 4.

Когда концентратор PAC получит пакет 3, он должен отказаться от его передачи соответствующему клиенту PPP. Такая передача может вызвать проблемы, поскольку протокол PPP предполагает упорядоченную доставку пакетов. PPP корректно обрабатывает ситуации с потерей пакетов, но не с нарушением порядка их доставки, поэтому пакеты с нарушением порядка доставки между устройствами PNS и PAC должны отбрасываться без изменения, если получатель не может сам восстановить корректный порядок. При получении пакета 5 концентратор PAC подтверждает его, поскольку порядковый номер превышает ранее подтвержденный номер 4. Пакеты с дубликатами порядковых номеров не должны появляться, поскольку устройства PAC и PNS никогда не передают повторно пакеты GRE. Отказоустойчивым реализациям следует отбрасывать без уведомления дубликаты пакетов GRE при их получении.

4.4. Тайм-ауты подтверждений

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

  • Независимые значения тайм-аута для каждой сессии. Устройство (PAC или PNS) будет поддерживать и рассчитывать значения тайм-аута для каждой активной сессии.

  • Устанавливаемое администратором максимальное значение тайм-аута (MaxTimeOut) уникальное для каждого устройства.

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

  • Таймер отсрочки тайм-аута для снижения перегрузок. Значение отсрочки ограничивается настраиваемым максимум для тайм-аута. Таймер отсрочки запускается при каждом тайм-ауте для подтверждения.

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

Ниже приведены некоторые определения.

  • Задержка при обработке пакетов (PPD19) — интервал времени, требуемого для каждой из сторон на обработку максимального объема данных в их скользящем окне приема. При организации вызова выполняется обмен значениями PPD между устройствами PAC и PNS. Для PNS это значение должно быть малым, а для PAC, организующих модемные соединения, задержка может быть достаточно большой.

  • Выборка (Sample) — фактическое время, прошедшее до получения подтверждения пакета. Значение Sample измеряется, а не рассчитывается.

  • Время кругового обхода (RTT20) — оценочное значение интервала времени, в течение которого приходит подтверждение (Acknowledgment) для данного отправленного пакета. Когда соединение организовано через локальную сеть, этот интервал очень мал (если не 0). Когда канал организуется через Internet, эта задержка может быть достаточно велика и меняться в широких пределах. Значение RTT является адаптивным — оно будет изменяться с учетом PPD и изменения задержек в сети.

  • Адаптивный тайм-аут (ATO21) — время, которое должно пройти до того, как подтверждение станет считаться потерянным. После возникновения тайм-аута скользящее окно уменьшается и значение ATO снижается.

Параметр PPD представляет собой 16-битовое слово, представляющее задержку в десятых долях секунды 64 соответствует 6,4 сек.). Обмен значениями выполняется на этапе Call Control. Протокол задает лишь обмен значениями параметров, не указывая способа расчета значений, который определяется реализацией. Значение параметра может быть статическим. Обмен параметрами PPD должен выполняться на этапе организации соединения даже в случае использования стационарных значений. Один из способов расчета PPD показан ниже.

PPD' = ((PPP_MAX_DATA_MTU - Header) * WindowSize * 8) / ConnectRate
PPD = PPD' + PACFudge

Параметр Header задает общий размер заголовков IP и GRE (36 байт). Параметр MTU задает значение MTU для всего пути между устройствами PAC и PNS. Параметр WindowSize представляет число пакетов в скользящем окне, которое зависит от реализации. Задержка в межсетевой среде может использоваться для выбора размера окна, достаточного для эффективного заполнение сеансового «канала». Константа 8 служит для пересчета октетов в биты (в предположении задания ConnectRate в бит/сек). Если ConnectRate задается в байт/сек, число 8 следует опустить. Параметр PACFudge не требуется, но может быть использован для учета суммарных издержек на обработку в устройстве PAC.

Значение PPD используется в качестве «затравки» адаптивного алгоритма с начальным значением RTT[n-1].

4.4.1. Расчет тайм-аута адаптивных подтверждений

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

Приведенный ниже алгоритм основан на реализации TCP 1989 года и описан в [11]. Параметр n указывает номер итерации, а n-1 указывает значения из предыдущего расчета.

DIFF[n] = SAMPLE[n] - RTT[n-1]
DEV[n] = DEV[n-1] + (beta * (|DIFF[n]| - DEV[n-1]))
RTT[n] = RTT[n-1] + (alpha * DIFF[n])
ATO[n] = MAX (MinTimeOut, MIN (RTT[n] + (chi * DEV[n]), MaxTimeOut))

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

DEV представляет оценку среднего отклонения (mean deviation) и является аппроксимацией стандартного отклонения. Значение DEV рассчитывается при каждой итерации и сохраняется для использования в следующей итерации. Изначально устанавливается нулевое отклонение.

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

ATO представляет адаптивный тайм-аут для следующего передаваемого пакета. Значение ATO вычисляется при каждой итерации и ограничено снизу функцией MIN, а сверху — конфигурационным параметром MaxTimeOut.

Alpha представляет коэффициент для среднего значения и обычно имеет значение 1/8 (0,125).

Beta представляет коэффициент для отклонения и обычно имеет значение 1/4 (0.250).

Chi представляет коэффициент для тайм-аута и обычно имеет значение 4.

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

4.4.2. Контроль насыщения — подбор тайм-аута

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

RTT[n] = delta * RTT[n-1]
DEV[n] = DEV[n-1]
ATO[n] = MAX (MinTimeOut, MIN (RTT[n] + (chi * DEV[n]), MaxTimeOut))

В этом расчете ATO только два значения, вносящих вклад в ATO сохраняются для следующей итерации и рассчитываются. Значение RTT меняется коэффициентом delta, значение DEV остается неизменным. Параметр DIFF не используется в этом расчете. Для коэффициента Delta, на который умножается параметр RTT, предлагается значение 2.

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

Безопасность пользовательских данных при передаче через туннель PPP обеспечивается протоколом PPP, как и аутентификация партнеров PPP.

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

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

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

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

Kory Hamzeh

Ascend Communications

1275 Harbor Bay Parkway

Alameda, CA 94502

EMail: kory@ascend.com

Gurdeep Singh Pall

Microsoft Corporation

Redmond, WA

EMail: gurdeep@microsoft.com

William Verthein

U.S. Robotics/3Com

Jeff Taarud

Copper Mountain Networks

W. Andrew Little

ECI Telematics

Glen Zorn

Microsoft Corporation

Redmond, WA

EMail: glennz@microsoft.com

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

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

nmalykh@gmail.com

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

[1] Hanks, S., Li, T., Farinacci, D. and P. Traina, «Generic Routing Encapsulation (GRE)», RFC 1701, October 1994.

[2] Hanks, S., Li, T., Farinacci, D. and P. Traina, «Generic Routing Encapsulation (GRE) over IPv4 Networks», RFC 1702, October 1994.

[3] Lloyd, B. and W. Simpson, «PPP Authentication Protocols», RFC 1334, October 1992.

[4] Postel, J., «Transmission Control Protocol», STD 7, RFC 793, September 1981.

[5] Postel, J., «User Data Protocol», STD 6, RFC 768, August 1980.

[6] Reynolds, J. and J. Postel, «Assigned Numbers», STD 2, RFC 1700, October 1994. См. также http://www.iana.org/numbers.html

[7] Simpson, W., editor, «The Point-to-Point Protocol (PPP)», STD 51, RFC 1661, July 1994.

[8] Ethertype for PPP, Reserved with Xerox Corporation.

[9] Simpson, W., «PPP Challenge Handshake Authentication Protocol (CHAP)», RFC 1994, August 1996.

[10] Blunk, L. and J Vollbrecht, «PPP Extensible Authentication Protocol (EAP)», RFC 2284, March 1998.

[11] Stevens, R., «TCP/IP Illustrated, Volume 1», p. 300, Addison-Wesley, 1994.

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

8. Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

1Point to Point Protocol.

2Network Access Server.

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

4PPTP Network Server — сетевой сервер PPTP.

5PPTP Access Concentrator — концентратор доступа PPTP.

6Generic Routing Encapsulation — базовая инкапсуляция маршрутизации.

7Network Access Server.

8Point-to-Point-Protocol.

9Link Control Protocol — протокол управления каналом.

10Network Control Protocol.

11Protocol Data Unit – модуль данных протокола.

12В оригинале ошибочно указан параграф 2.2. См. http://www.rfc-editor.org/errata_search.php?rfc=2637&eid=4790. Прим. перев.

13В оригинале ошибочно указан параграф 2.2. См. http://www.rfc-editor.org/errata_search.php?rfc=2637&eid=4791. Прим. перев.

14В оригинале ошибочно указан параграф 2.2. См. http://www.rfc-editor.org/errata_search.php?rfc=2637&eid=4792. Прим. перев.

15В оригинале ошибочно указан параграф 2.2. См. http://www.rfc-editor.org/errata_search.php?rfc=2637&eid=4793. Прим. перев.

16В оригинале ошибочно указан параграф 2.2. Прим. перев.

17В оригинале ошибочно указан параграф 2.2. Прим. перев.

18Аналоговый или цифровой. Прим. перев.

19Packet Processing Delay.

20Round-Trip Time.

21Adaptive Time-Out.

Рубрика: RFC | Комментарии к записи RFC 2637 Point-to-Point Tunneling Protocol (PPTP) отключены

RFC 2622 Routing Policy Specification Language (RPSL)

Network Working Group                                C. Alaettinoglu
Request for Comments: 2622        USC/Information Sciences Institute
Obsoletes: 2280                                        C. Villamizar
Category: Standards Track                              Avici Systems
                                                           E. Gerich
                                                     At Home Network
                                                          D. Kessens
                                                Qwest Communications
                                                            D. Meyer
                                                University of Oregon
                                                            T. Bates
                                                       Cisco Systems
                                                       D. Karrenberg
                                                            RIPE NCC
                                                         M. Terpstra
                                                        Bay Networks
                                                           June 1999

Язык описания политики маршрутизации (RPSL)

Routing Policy Specification Language (RPSL)

PDF

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

В этом документе содержится спецификация протокола, предложенного сообществу Internet. Документ служит приглашением к дискуссии в целях развития и совершенствования протокола. Текущее состояние стандартизации протокола вы можете узнать из документа «Internet Official Protocol Standards» (STD 1). Документ может распространяться без ограничений.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

Аннотация

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

Оглавление

Исключено из версии HTML

1 Введение

Этот документ является справочником по языку описания правил маршрутизации RPSL1. Язык RPSL позволяет сетевым операторам задавать правила маршрутизации на различных уровнях иерархии Internet (например, на уровне автономной системы — AS2). В то же время правила в RPSL могут задаваться достаточно детально, что обеспечивает возможность генерации на базе этих правил конфигурационных параметров маршрутизаторов. Язык RPSL является расширяемым — новые протоколы маршрутизации и новые возможности протоколов могут добавляться в язык в любой момент.

RPSL предназначен для замены используемого в Internet языка описания правил, известного как RIPE-181 [6] или RFC-1786 [7]. RIPE-81 [8] был первым языком, использованным в Internet, для описания политики маршрутизации. Позднее ему на смену пришел язык RIPE-181 [6]. В процессе работы с языком RIPE-181 стало ясно, что некоторые правила не могут быть выражены в рамках этого языка и требуется расширенный и более обобщенный язык. RPSL свободен от ограничений, присущих RIPE-181.

Язык RPSL был спроектирован так, чтобы представление глобальной политики маршрутизации могло содержаться в одной коллективно поддерживаемой распределенной базе данных для обеспечения целостности картины маршрутизации Internet. RPSL не предназначен для использования в качестве языка настройки конфигурации маршрутизаторов. Однако RPSL позволяет генерировать конфигурационные параметры маршрутизаторов из описания политики автономной системы (класс aut-num), вкупе с описанием маршрутизатора (класс inet-rtr), представленным значением router ID, номером автономной системы, указанием интерфейсов и партнеров маршрутизатора, а также с глобальными отображениями наборов AS в номера AS (класс as-set) и отображениями исходных AS и наборов маршрутов в маршрутные префиксы (классы route и route-set). Аккуратное заполнение базы данных RPSL может помочь в решении таких задач, как создание конфигурации маршрутизатора, которая защитит от случайного или преднамеренного распространения неточных маршрутных данных, верификация картины маршрутизации в Internet и границ агрегирования за пределами одной AS.

RPSL является объектно-ориентированным языком; т. е., объекты содержать компоненты политики и административных данных. Эти объекты регистрируются в реестре маршрутизации Internet (IRR3) уполномоченными на то организациями. Процесс регистрации выходит за рамки данного документа. Дополнительную информацию о реестре маршрутизации IRR вы найдете в [1, 17, 4] .

В следующих параграфах рассматриваются классы, используемые для определения различных объектов политики и администрирования. Класс mntner определяет объекты, уполномоченные добавлять, удалять или изменять набор объектов. Классы person и role описывают контакты с техническим и административным персоналом. Автономные системы задаются с использованием класса aut-num. Для задания маршрутизаторов служит класс route. Наборы объектов могут определяться с использованием классов as-set, route-set, filter-set, peering-set и rtr-set. Класс dictionary обеспечивает расширяемость языка. Класс inet-rtr служит для указания маршрутизаторов. Многие из этих классов были изначально определены в ранних документах [6, 13, 16, 12, 5] и впоследствии расширены.

Этот документ является самодостаточным. Однако читателям рекомендуется ознакомиться с RIPE-181 [7] и связанными с ним документами [13, 16, 12, 5], поскольку они обеспечивают понимание мотивации и основополагающих принципов RIPE-181 и RPSL. В качестве учебного пособия по языку RPSL рекомендуется прочесть документ по применению языка RPSL [4].

2 Имена RPSL, зарезервированные слова и представление

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

Значение атрибута имеет тип. Наиболее распространенные типы перечислены ниже. Отметим, что в языке RPSL могут использоваться только символы набора ASCII; регистр символов значения не имеет.

<object-name>

Многие объекты в RPSL имеют имя. Значение <object-name> может включать буквы, цифры, символ подчеркивания «_» и дефис «-»; первым символом имени должна быть буква, а последним — буква или цифра. Перечисленные ниже слова зарезервированы в RPSL и не могут служить именами:

any as-any rs-any peeras
and or not
atomic from to at action accept announce except refine
networks into inbound outbound

Имена, начинающиеся с некоторых префиксов, зарезервированы для отдельных типов объектов — префикс «as-» служит для имен наборов автономных систем, «rs-» — для наборов маршрутов, «rtrs-» — для наборов маршрутизаторов, «fltr-» — для наборов фильтров и «prng-» — для наборов партнеров (peering).

<as-number>

Автономная система (AS) с номером x представляется, как Asx (т. е., AS 226 представляется в виде AS226).

<ipv4-address>

Адрес IPv4 представляется в форме четырех целых чисел (от 0 до 255), разделенных точками. Например, 128.9.128.5 является корректной записью адреса IPv4. В оставшейся части документа адреса IPv4 будут называться просто адресами IP.

<address-prefix>

Адресный префикс представляется в виде адреса IPv4, за которым следует символ дробной черты «/» и целое число от 0 до 32. Записи 128.9.128.5/32, 128.9.0.0/16, 0.0.0.0/0 являются корректным представлением префиксов, а 0/0, 128.9/16 — некорректны, поскольку 0 и 128.9 не являются строками из 4 целых чисел.

<address-prefix-range>

Диапазон префиксов задается адресным префиксом, за которым может следовать оператор диапазона. Операторы диапазона включают:

^-

оператор специфичности с исключением, которому соответствуют все более специфичные (длинные) префиксы, за исключением заданного (например, 128.9.0.0/16^ соответствуют все более длинные префиксы из 128.9.0.0/16, за исключением 128.9.0.0/16);

^+

оператор специфичности с включением, которому соответствуют все более специфичные (длинные) префиксы, включая заданный (например, 5.0.0.0/8^+ соответствуют все более специфичные префиксы из 5.0.0.0/8, включая 5.0.0.0/8);

^n

оператор заданной специфичности (n — целое число), которому соответствуют все префиксы, размером n в указанном префиксе (например, 30.0.0.0/8^16 соответствуют все префиксы длиной 16 из 30.0.0.0/8, такие, как 30.9.0.0/16);

^n-m

оператор заданного диапазона специфичности (n и m — целые числа), которому соответствуют все префиксы длиной от n до m в указанном префиксе (например, 30.0.0.0/8^24-32 соответствуют все префиксы длиной от 24 до 32 из префикса 30.0.0.0/8, такие, как 30.9.9.96/28).

Операторы диапазона применимы и для множеств префиксов. В этом случае они относятся ко всем префиксам множества. Например, для множества маршрутов (route-set) rs-foo, запись rs-foo^+ будет обозначать все префиксы из множества rs-foo и все более длинные префиксы, соответствующие им.

Операторы диапазона не могут следовать один за другим It (например, 30.0.0.0/8^24-28^+ является ошибочной записью). Однако оператор диапазона может быть применен к множеству адресных префиксов, члены которого имеют операторы диапазона (например, запись {30.0.0.0/8^24-28}^27-30 будет корректной). В таких случаях внешний оператор (^n-m) распространяет свое действие на внутренний (^k-l) и результат принимает форму ^max(n,k)-m, если m max(n,k), а в противном случае префикс удаляется из набора. Отметим, что оператор ^n эквивалентен to ^n-n, prefix/l^+ будет эквивалентом prefix/l^l-32, prefix/l^- будет эквивалентом prefix/l^(l+1)-32, {prefix/l^n-m}^+ — эквивалентом {prefix/l^n-32}, а {prefix/l^n-m}^- будет эквивалентом {prefix/l^(n+1)-32}. Например,

{128.9.0.0/16^+}^- == {128.9.0.0/16^-}
{128.9.0.0/16^-}^+ == {128.9.0.0/16^-}
{128.9.0.0/16^17}^24 == {128.9.0.0/16^24}
{128.9.0.0/16^20-24}^26-28 == {128.9.0.0/16^26-28}
{128.9.0.0/16^20-24}^22-28 == {128.9.0.0/16^22-28}
{128.9.0.0/16^20-24}^18-28 == {128.9.0.0/16^20-28}
{128.9.0.0/16^20-24}^18-22 == {128.9.0.0/16^20-22}
{128.9.0.0/16^20-24}^18-19 == {}

<date>

Дата, представленная 8-значным целым числом в форме YYYYMMDD, где YYYY представляет год, MM — месяц (01 — 12), а DD — число месяца (01 — 31). Все даты отсчитываются от UTC, если явно не указано иное. Например, 24 июня 1996 года будет представляться в виде 19960624.

<email-address>

Адрес электронной почты в соответствии с RFC 822 [10].

<dns-name>

Доменное имя в соответствии с RFC1034 [17].

<nic-handle>

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

<free-form>

Последовательность символов ASCII.

<X-name>

Имя объекта типа X (т. е., <mntner-name> задает имя объекта класса mntner).

<registry-name>

Имя реестра IRR (реестры маршрутизации перечислены в Приложении A.

Значение атрибута может также быть списком элементов одного из перечисленных типов. Список содержит набор элементов, разделенных запятыми. Например, «AS1, AS2, AS3, AS4» задает список номеров AS. Отметим, что списки и множественные значения являются ортогональными. Атрибут со множеством значений может иметь несколько значений, являющихся или не являющихся списками. С другой стороны, атрибут с одним значением, может быть представлен списком.

Объекты RPSL представляются в форме пар «атрибут-значение». Каждая такая пара записывается в отдельной строке. В начале строки (позиция 0) указывается имя атрибута, затем символ двоеточия «:», после которого указывается значение атрибута. Атрибуты, имена которых совпадают с именем класса объектов, следует указывать первыми. Представление объектов завершается пустой строкой. Если значения атрибута на помещаются в одной строке, каждая новая строка начинается с символа пробела « », табуляции или знака «+», которые обозначают конкатенацию строк. Знак «+» позволяет включать в значения атрибутов пустые строки. Для улучшения восприятия текста в начале каждой строки многострочных значений могут помещаться дополнительные символы пробела. Порядок размещения пар «attribute-value» имеет значение.

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

Целые числа задаются (1) с использованием нотации языка C (например, 1, 12345); (2) в виде четырех 1-октетных значения (от 0 до 255), разделенных точками (например, 1.1.1.1, 255.255.0.0) — в этом случае 4-октетное целое число образуется путем конкатенации однооктетных компонент от старшего октета к младшему; (3) в форме двух 2-октетных целых чисел (от 0 до 65535), разделенных двоеточием «:» (например, 3561:70, 3582:10) — в этом случае 4-октетное целое число образуется за счет конкатенации 2-октетных компонент от старшего к младшему.

3 Контактная информация

Классы mntner, person и role вместе с атрибутами admin-c, tech-c, mnt-by, changed и source всех классов задают контактную информацию. Класс mntner задает также идентификационные данные, требуемые для создания, удаления и изменения других объектов. Перечисленные классы не задают правил маршрутизации и в каждом реестре к этим класса могут предъявляться разные требования. Здесь для полноты картины приведены требования к этим классам, принятые в базе данных RIPE [16]. Получить текущую версию спецификации этих классов вы можете в своем реестре маршрутизации. В документе Routing Policy System Security [20] более подробно описаны требования по идентификации и аутентификации.

Атрибут Значение Тип
mntner <object-name> Обязательный, одно значение, ключ класса
descr <free-form> Обязательный, одно значение
auth см. ниже Обязательный, много значений
upd-to <email-address> Обязательный, много значений
mnt-nfy <email-address> Необязательный, много значений
tech-c <nic-handle> Обязательный, много значений
admin-c <nic-handle> Необязательный, много значений
remarks <free-form> Необязательный, много значений
notify <email-address> Необязательный, много значений
mnt-by Список <mntner-name> Обязательный, много значений
changed <email-address> <date> Обязательный, много значений
source <registry-name> Обязательный, одно значение

 Рисунок 1 Атрибуты класса mntner

3.1 Класс mntner

Класс mntner задает идентификационную информацию, требуемую для создания, удаления или изменения объектов RPSL. Прежде, чем провайдер сможет создать тот или иной объект RPSL, он должен создать объект mntner. Атрибуты класса mntner показаны на рисунке 1. Класс mntner изначально был описан в документе [13].

Атрибут mntner является обязательным и является ключом класса. Значение этого атрибута является именем RPSL. Атрибут auth задает схему, используемую для идентификации и аутентификации запросов на обновление от держателя (maintainer). Этот атрибут использует синтаксис:

auth: <scheme-id> <auth-info>

Например,

auth: NONE
auth: CRYPT-PW dhjsdfhruewf
auth: MAIL-FROM .*@ripe\.net

В качестве вариантов аутентификации <scheme-id> определены: NONE, MAIL-FROM, PGP-KEY и CRYPT-PW. <auth-info> содержит дополнительную информацию, требуемую для конкретной схемы. В случае MAIL-FROM это регулярное выражение, соответствующее корректным почтовым адресам, для CRYPT-PW это пароль в формате UNIX crypt, для PGP-KEY — указатель на объект key-certif [22], содержащий открытый ключ PGP пользователя. Если задано множество атрибутов auth, запрос на обновление выполняется с любой из указанных форм аутентификации.

Атрибут upd-to представляет собой адрес электронной почты. При попытке несанкционированного изменения объекта по этому адресу отправляется соответствующее сообщение. По адресу, заданному атрибутом mnt-nfy пересылаются сообщения в тех случаях, когда поддерживаемый объект добавляется, удаляется или изменяется.

Атрибут descr содержит короткое текстовое описание объекта (в произвольной форме). Атрибут tech-c содержит NIC-идентификатор лица, отвечающего за технические вопросы. С этим человеком контактируют при возникновении технических проблем (например, некорректная конфигурация). Атрибут admin-c указывает NIC-идентификатор администратора. В атрибуте remarks содержится текстовое разъяснение в произвольной форме. Атрибут notify указывает адрес электронной почты, по которому отправляются уведомления об изменении объекта. Атрибут mnt-by содержит список имен объектов типа mntner. Полномочия по изменению данного объекта предоставляются всем указанным в списке держателям. В атрибуте changed указываются два последних изменения объекта с датами внесения изменений. Этот атрибут использует синтаксис:

mntner: RIPE-NCC-MNT
descr: RIPE-NCC Maintainer
admin-c: DK58
tech-c: OPS4-RIPE
upd-to: ops@ripe.net
mnt-nfy: ops-fyi@ripe.net
auth: CRYPT-PW lz1A7/JnfkTtI
mnt-by: RIPE-NCC-MNT
changed: ripe-dbm@ripe.net 19970820
source: RIPE

Рисунок 2 Пример объекта mntner

changed: <email-address> <YYYYMMDD>

Например,

changed: johndoe@terabit-labs.nn 19900401

Адрес <email-address> идентифицирует человека, внесшего последнее изменение, <YYYYMMDD> указывает дату изменения. Атрибут source указывает реестр, в котором зарегистрирован объект. Пример объекта mntner показан на рисунке 2 для случая использования аутентификации по паролю в формате UNIX crypt.

Атрибуты descr, tech-c, admin-c, remarks, notify, mnt-by, changed и source используются для всех классов RPSL. Их синтаксис, семантика, обязательность или необязательность, однозначность или многозначность для всех классов RPSL одинаковы. Единственным исключением является атрибут admin-c, который является обязательным для класса aut-num и необязательным для остальных. Упомянутые атрибуты уже не будут рассматриваться в соответствующих классам параграфах.

Атрибут Значение Тип
person <free-form> Обязательный, одно значение
nic-hdl <nic-handle> Обязательный, одно значение, ключ класса
address <free-form> Обязательный, много значений
phone см. ниже Обязательный, много значений
fax-no см. ниже Необязательный, много значений
e-mail <email-address> Обязательный, много значений

 Рисунок 3 Атрибуты класса person

3.2 Класс person

Класс person служит для описания информации о людях. Хотя эта информация не относится напрямую к политике маршрутизации, мы кратко рассмотрим ее здесь, поскольку многие объекты политики содержат ссылки на объекты класса person. Класс person был введен и описан в документе [15].

Атрибуты класса person показаны на рисунке 3. Атрибут person указывает полное имя человека. Атрибуты phone и fax-no используют синтаксис

phone: +<country-code> <city> <subscriber> [ext. <extension>]

Например,

person: Daniel Karrenberg
address: RIPE Network Coordination Centre (NCC)
address: Singel 258
address: NL-1016 AB Amsterdam
address: Netherlands
phone: +31 20 535 4444
fax-no: +31 20 535 4445
e-mail: Daniel.Karrenberg@ripe.net
nic-hdl: DK58
changed: Daniel.Karrenberg@ripe.net 19970616
source: RIPE

Рисунок 4 Пример объекта person

phone: +31 20 12334676
phone: +44 123 987654 ext. 4711

На рисунке 4 показан пример объекта person.

3.3 Класс role

Класс role похож на класс person, но вместо контактных данных описывает роль одного или нескольких человек. Примерами ролей являются службы поддержки (help desk), центры мониторинга сетей (network monitoring center), системные администраторы (system administrator) и т. п. Объекты role весьма полезны, поскольку исполняющий роль человек может смениться, а сама роль останется.

Атрибут Значение Тип
role <free-form> Обязательный, одно значение
nic-hdl <nic-handle> Обязательный, одно значение, ключ класса
trouble <free-form> Необязательный, много значений
address <free-form> Обязательный, много значений
phone см. ниже Обязательный, много значений
fax-no см. ниже Необязательный, много значений
e-mail <email-address> Обязательный, много значений

 Рисунок 5 Атрибуты класса person

role: RIPE NCC Operations
trouble:
address: Singel 258
address: 1016 AB Amsterdam
address: The Netherlands
phone: +31 20 535 4444
fax-no: +31 20 545 4445
e-mail: ops@ripe.net
admin-c: CO19-RIPE
tech-c: RW488-RIPE
tech-c: JLSD1-RIPE
nic-hdl: OPS4-RIPE
notify: ops@ripe.net
changed: roderik@ripe.net 19970926
source: RIPE

Рисунок 6 Пример объекта role

Атрибуты класса role показаны на рисунке 5. Атрибуты nic-hdl для классов person и role используют общее пространство имен. Атрибут trouble объекта role может содержать дополнительную контактную информацию, которая может использоваться при возникновении проблем на любом из объектов, ссылающихся на данный объект role. Пример объекта role показан на рисунке 6.

4 Класс route

Каждый маршрут между автономными системами (interAS4), порожденный AS, задается с использованием объекта route. Атрибуты класса route показаны на рисунке 7. Атрибут route представляется адресным префиксом маршрута, а атрибут origin указывает номер автономной системы, которая порождает маршрут и передает в систему междоменной маршрутизации. Пара атрибутов route и origin определяет ключ класса.

На рисунке 8 показан пример с 4 объектами класса route (контактные атрибуты типа admin-c и tech-c для краткости опущены). Отметим, что два последних объекта route имеют одинаковый адресный префикс 128.8.0.0/16. Однако эти объекты различаются, поскольку они происходят из разных AS (т. е., имеют разные ключи).

Атрибут Значение Тип
route <address-prefix> Обязательный, одно значение, ключ класса
origin <as-number> Обязательный, одно значение, ключ класса
member-of Список <route-set-names> Необязательный, много значений (см. раздел 5)
inject см. раздел 8 Необязательный, много значений
components см. раздел 8 Необязательный, одно значение
aggr-bndry см. раздел 8 Необязательный, одно значение
aggr-mtd см. раздел 8 Необязательный, одно значение
export-comps см. раздел 8 Необязательный, одно значение
holes см. раздел 8 Необязательный, много значений

 Рисунок 7 Атрибуты класса person

5 Классы множеств

route: 128.9.0.0/16
origin: AS226
route: 128.99.0.0/16
origin: AS226
route: 128.8.0.0/16
origin: AS1
route: 128.8.0.0/16
origin: AS2

Рисунок 8 Объекты класса route

При задании правил часто бывает работать с наборами (множествами) объектов. Для этого определены классы as-set, route-set, rtr-set, filter-set и peering-set, как именованные множества. Компоненты каждого множества могут быть заданы напрямую, путем перечисления в определении множества, опосредованно, за счет ссылки на множество в объектах-компонентах, или с помощью комбинации обоих методов.

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

  • имена наборов AS — «as-»;
  • имена наборов маршрутов — «rs-»;
  • имена наборов маршрутизаторов — «rtrs-»;
  • имена наборов фильтров — «fltr-»;
  • имена наборов партнеров — «prng-».

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

Имена множеств могут иметь иерархическую структуру. Иерархическое имя представляет собой последовательность имен множеств и номеров AS, разделенных двоеточием «:». По крайней мере одна компонента иерархического имени должна быть именем реального множества (т. е., начинаться с одного из перечисленных выше префиксов). Все имена множеств в иерархическом имени должны относиться к одному типу. Например, имена AS1:AS-CUSTOMERS, AS1:RS-EXPORT:AS2, RS-EXCEPTIONS:RS-BOGUS являются корректными иерархическими именами.

Цель введения иерархических имен заключается в разделении пространства имен множеств таким образом, чтобы держатель набора X1 контролировал все пространство производных имен (т. е., X1:…:Xn-1). Таким образом, объект-множество с именем X1:…:Xn-1:Xn может создать только держатель объекта с именем X1:…:Xn-1. Только держатель AS1 сможет создать множество с именем AS1:AS-FOO, а создание множества с именем AS1:AS-FOO:AS-BAR доступно будет только держателю объекта AS1:AS-FOO. Более подробно этот вопрос рассмотрен в документе [20].

5.1 Класс as-set

Атрибут Значение Тип
as-set <object-name> Обязательный, одно значение, ключ класса
members Список <as-numbers> и <as-set-names> Необязательный, много значений
mbrs-by-ref Список <mntner-names> Необязательный, много значений

 Рисунок 9 Атрибуты класса as-set

Атрибуты класса as-set показаны на рисунке 9. Атрибут as-set определяет имя множества (имя RPSL, начинающееся префиксом «as-»). Атрибут members задает список элементов множества и может включать номера AS и имена других множеств класса as-set.

as-set: as-foo as-set: as-bar as-set: as-empty
members: AS1, AS2 members: AS3, as-foo

Рисунок 10 Объекты класса as-set

На рисунке 10 показаны два объекта класса as-set. Множество as-foo включает две AS (AS1 и AS2), множество as-bar включает в себя множество as-foo и автономную систему AS3 (таким образом, в состав as-foo входят AS1, AS2, AS3), множество as-empty не включает ни одного элемента.

as-set: as-foo
members: AS1, AS2
mbrs-by-ref: MNTR-ME
aut-num: AS3 aut-num: AS4
member-of: as-foo member-of: as-foo
mnt-by: MNTR-ME mnt-by: MNTR-OTHER

Рисунок 11 Объект класса as-set

Атрибут mbrs-by-ref содержит список имен держателей или ключевое слово ANY. При использовании этого атрибута во множество AS включаются также автономные системы, чьи объекты aut-num зарегистрированы одним из указанных в списке держателей, а атрибуты member-of содержат имя данного множества AS. Если mbrs-by-ref имеет значение ANY, все объекты AS, ссылающиеся на это множество, являются членами множества. Если атрибут mbrs-by-ref отсутствует, во множество входят только автономные системы, перечисленные в атрибуте members.

На рисунке 11 приведен пример объекта as-set с атрибутом mbrs-by-ref. Множество as-foo содержит AS1, AS2 и AS3. AS4 не входит во множество as-foo, несмотря на то, что объект aut-num ссылается на as-foo. Это обусловлено тем, что MNTR-OTHER не включен в атрибут mbrs-by-ref множества as-foo.

5.2 Класс route-set

Атрибут Значение Тип
route-set <object-name> Обязательный, одно значение, ключ класса
members Список <address-prefix-range>, <route-set-name> и <route-set-name><range-operator> Необязательный, много значений
mbrs-by-ref Список <mntner-names> Необязательный, много значений

Рисунок 12 Атрибуты класса route-set

Атрибуты класса route-set показаны на рисунке 12. Атрибут route-set задает имя множества (имя RPSL с префиксом «rs-»). Атрибут members содержит список элементов множества и может включать адресные префиксы и имена других множеств класса route-set. Отметим, что класс route-set определяет множество префиксов маршрутов, а не объектов route.

route-set: rs-foo
members: 128.9.0.0/16, 128.9.0.0/24
route-set: rs-bar
members: 128.7.0.0/16, rs-foo

Рисунок 13 Объекты класса route-set

На рисунке 13 показан пример объектов route-set. Множество rs-foo содержит два адресных префикса 128.9.0.0/16 и 128.9.0.0/24. Множество rs-bar включает элементы множества rs-foo и префикс 128.7.0.0/16.

За адресным префиксом или именем route-set в атрибуте может следовать оператор диапазона. Например, множество

route-set: rs-bar
members: 5.0.0.0/8^+, 30.0.0.0/8^24-32, rs-foo^+

содержит все префиксы, более специфичные, чем 5.0.0.0/8 и сам префикс 5.0.0.0/8, все более специфичные префиксы в 30.0.0.0/8, размер которых составляет от 24 до 32 (такие, как 30.9.9.96/28), а также все более специфичные префиксы для списка из множества rs-foo.

route-set: rs-foo
mbrs-by-ref: MNTR-ME, MNTR-YOU
route-set: rs-bar
members: 128.7.0.0/16
mbrs-by-ref: MNTR-YOU
route: 128.9.0.0/16
origin: AS1
member-of: rs-foo
mnt-by: MNTR-ME
route: 128.8.0.0/16
origin: AS2
member-of: rs-foo, rs-bar
mnt-by: MNTR-YOU

Рисунок 14 Объекты класса route-set

Атрибут mbrs-by-ref содержит список имен держателей или ключевое слово ANY. При использовании этого атрибута множество будет включать все адресные префиксы, чьи объекты route зарегистрированы указанными в списке держателями, а атрибут member-of содержит имя этого множества. Если атрибут mbrs-by-ref содержит значение ANY, во множество включаются все объекты route, ссылающиеся на данное множество. Если атрибут mbrs-by-ref отсутствует, во множество включаются только префиксы, перечисленные в списке атрибута members.

На рисунке 14 показан пример объектов route-set с атрибутом mbrs-by-ref. Множество rs-foo содержит два адресных префикса 128.8.0.0/16 b 128.9.0.0/16, поскольку объекты route для 128.8.0.0/16 и 128.9.0.0/16 указывают на имя rs-foo в своем атрибуте member-of. Множество rs-bar содержит префиксы 128.7.0.0/16 и 128.8.0.0/16. Маршрут 128.7.0.0/16 явно указан в атрибуте members записи rs-bar, а объект route для 128.8.0.0/16 указывает на множество с именем rs-bar в своем атрибуте member-of.

Отметим, что для случаев, когда адресный префикс указан в атрибуте members множества route, он является членом данного множества маршрутов. Объект route, соответствующий этому префиксу, не обязан включать атрибут member-of, указывающий на имя множества. Атрибут member-of класса route является дополнительным механизмом для неявного указания членов класса.

5.3 Предопределенные объекты-множества

route-set: rs-special
members: 128.9.0.0/16, AS1, AS2, AS-FOO

Рисунок 15 Использование номеров AS и наборов AS в наборе маршрутов

В контексте, который предполагает множество маршрутов (например, атрибут members в классе route-set), автономная система ASx определяет множество маршрутов, исходящих из ASx, а множество (as-set) AS-X определяет набор маршрутов, исходящих из автономных систем в составе AS-X. О маршруте p говорят, что он исходит из ASx, если существует объект класса route для p с ASx в качестве значения атрибута origin. Например, множество маршрутов rs-special на рисунке 15 содержит префикс 128.9.0.0/16, маршруты AS1 и AS2, а также маршруты автономных систем из множества AS-FOO.

Предопределенное множество rs-any содержит все маршруты, зарегистрированные в IRR, а множество as-any — все автономные системы, зарегистрированные в IRR.

Атрибут Значение Тип
filter-set <object-name> Обязательный, одно значение, ключ класса
filter <filter> Обязательный, одно значение

Рисунок 16 Атрибуты класса filter-set

5.4 Фильтры и класс filter-set

Атрибуты класса filter-set показаны на рисунке 16. Объект filter-set определяет множество маршрутов, которые соответствуют фильтрам данного объекта. Атрибут filter-set определяет имя фильтра (имя RPSL с префиксом «fltr-»).

filter-set: fltr-foo
filter: { 5.0.0.0/8, 6.0.0.0/8 }
filter-set: fltr-bar
filter: (AS1 or fltr-foo) and <AS2>

Рисунок 17 Объекты класса filter-set

Атрибут filter определяет политику фильтрации для множества. Фильтр представляет собой логическое выражение, которое применяется к набору маршрутов для выделения из него подмножества маршрутов, соответствующих политике фильтрации. В фильтрах может проверяться соответствие любых атрибутов пути BGP (таких, префикс адресата или NLRI, AS-path, атрибуты группы — community).

Фильтры политики могут объединяться с помощью логических операторов AND (и), OR (или), NOT (не). Для выбора подмножества маршрутов могут использоваться перечисленные ниже фильтры.

ANY

Ключевому слову ANY соответствует любой маршрут.

Address-Prefix Set

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

{ 0.0.0.0/0 }
{ 128.9.0.0/16, 128.8.0.0/16, 128.7.128.0/17, 5.0.0.0/8 }
{ }

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

{ 5.0.0.0/8^+, 128.9.0.0/16^-, 30.0.0.0/8^16, 30.0.0.0/8^24-32 }

содержит все префиксы, более специфичные, чем 5.0.0.0/8, и сам префикс 5.0.0.0/8, все префиксы, более специфичные, чем 128.9.0.0/16, без включения 128.9.0.0/16, все префиксы, более специфичные, чем 30.0.0.0/8, размер которых равен 16 (скажем, 30.9.0.0/16), а также все префиксы, более специфичные, чем 30.0.0.0/8, с размером от 24 до 32 (например, 30.9.9.96/28).

Route Set Name

Имени набора маршрутов соответствует множество маршрутов, являющихся членами этого набора. Имя набора маршрутов может быть именем объекта route-set, номером AS или именем объекта as-set (номера AS и имена as-set неявно определяют наборы маршрутов — см. параграф 5.3). Например,

aut-num: AS1
import: from AS2 accept AS2
import: from AS2 accept AS-FOO
import: from AS2 accept RS-FOO

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

as-set: AS-FOO
members: AS2, AS3
aut-num: AS1
import: from AS-FOO accept PeerAS

эквивалентно записи

aut-num: AS1
import: from AS2 accept AS2
import: from AS3 accept AS3

За именем набора маршрутов может указываться один из операторов «^-» или «^+» (например, { 5.0.0.0/8, 6.0.0.0/8 }^+ эквивалентно { 5.0.0.0/8^+, 6.0.0.0/8^+ }, а AS1^- эквивалентно всем более специфичным маршрутам, исходящим из AS1).

AS Path Regular Expression

Регулярные выражения AS-path могут использоваться в качестве фильтров политики путем заключения выражения в угловые скобки «<» и «>». Фильтру AS-path соответствует набор маршрутов, проходящих через последовательность AS, соответствующих регулярному выражения AS-path. Маршрутизатор может проверить соответствие, используя атрибут AS_PATH протокола BGP5 [19] или атрибут RD_PATH протокола IDRP6 [18].

Регулярные выражения AS-path соответствуют стандарту POSIX для регулярных выражений в «алфавите» номеров AS. Регулярные выражения могут включать перечисленные ниже элементы.

ASN

Номер автономной системы. ASN соответствует AS-path размером 1, содержащий указанный номер AS (например, регулярному выражению AS-path вида AS1 соответствует AS-path «1»).

Вместо номера партнерской AS может использоваться ключевое слово PeerAS.

AS-set

Имя набора AS. Значению AS-set соответствуют все AS-path, соответствующие одной из AS в AS-set.

.

Соответствует путям AS-path, которые соответствуют любому номеру AS.

[…]

Набор номеров AS. Такому набору соответствуют пути AS-path, соответствующие номерам AS, указанным в скобках. Номера AS в наборе разделяются символами пробела. Символ «-» между двумя номерами AS в этом списке указывает, что все номера интервала включены в набор. Имя as-set задает включение всех AS из as-set.

[^…]

Дополнение к набору номеров AS. Ему соответствует любой AS-path, не соответствующих номерам AS в наборе.

^

Соответствует пустой строке в начале AS-path.

$

Соответствует пустой строке в конце AS-path.

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

Унарные суффиксы * + ? {m} {m,n} {m,}

Для регулярного выражения A, A* будет соответствовать 0 или более вхождений A; A+ — 1 или более вхождений A; A? — 0 или 1 вхождение A; A{m} — m вхождений A; A{m,n} — от m до n вхождений A; A{m,} — m или более вхождений A. Например, выражению [AS1 AS2]{2} соответствуют AS1 AS1, AS1 AS2, AS2 AS1 и AS2 AS2.

Унарные суффиксы ~* ~+ ~{m} ~{m,n} ~{m,}

Эти операторы похожи по функциональности на перечисленные выше, но все вхождения регулярного выражения соответствуют одному шаблону. Например, выражению [AS1 AS2]~{2} соответствуют AS1 AS1 и AS2 AS2, но не соответствуют AS1 AS2 и AS2 AS1.

Бинарный оператор конкатенации

Этот неявный оператор существует между двумя регулярными выражениями A и B, когда не задано явно других операторов. Результирующему регулярному выражению A B соответствует путь AS-path, если некая часть этого пути соответствует A, а оставшаяся часть AS-path соответствует B.

Бинарный оператор «или» |

Для регулярных выражений A и B, записи A | B будет соответствовать любой путь AS-path, который соответствует A или B.

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

Ниже приведены примеры фильтров AS-path:

<AS3>
<^AS1>
<AS2$>
<^AS1 AS2 AS3$>
<^AS1 .* AS2$>.

Первому выражению соответствуют все маршруты, в которых AS-path включает AS3, второму соответствуют маршруты, в которых AS-path начинается с AS1, третьему — маршруты, в которых AS-path заканчивается в AS2, четвертому — маршруты с AS-path «1 2 3», а пятому — маршруты, в которых AS-path начинается с AS1 и заканчивается в AS2, включая между ними произвольные AS.

Композитные фильтры политики

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

NOT

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

AND

Для данных фильтров x и y, выражению x AND y будет соответствовать пересечение маршрутов, соответствующих фильтрам x и y.

OR

Для данных фильтров x и y, выражению x OR y будет соответствовать объединение маршрутов, соответствующих фильтрам x и y.

Отметим, что оператор OR может использоваться в неявном виде («x y» взамен «x OR y»).

Например,

NOT {128.9.0.0/16, 128.8.0.0/16}
AS226 AS227 OR AS228
AS226 AND NOT {128.9.0.0/16}
AS226 AND {0.0.0.0/0^0-18}

Первому выражению будут соответствовать все маршруты, за исключением 128.9.0.0/16 и 128.8.0.0/16. Второму выражению будут соответствовать маршруты AS226, AS227 и AS228. Третьему выражению будут соответствовать маршруты AS226, за исключением 128.9.0.0/16. Четвертому выражению будут соответствовать маршруты AS226, длина которых не превышает 18.

Атрибуты политики маршрутизации

В фильтрах политики для сравнения могут использоваться также значения других атрибутов. Атрибуты, значения которых могут использоваться для сравнения, указаны в словаре RPSL (см. раздел 7). Пример использования атрибута BGP community показан ниже:

aut-num: AS1
export: to AS2 announce AS1 AND NOT community(NO_EXPORT)

Фильтры, использующие атрибуты политики маршрутизации, которые определены в словаре, применяются до выполнения операторов AND, OR и NOT.

Имена наборов фильтров

Имени набора фильтров соответствует набор маршрутов, соответствующих атрибутам фильтров. Отметим, что атрибут фильтра из набора фильтров может рекурсивно использовать имена других наборов фильтров. Например, на рисунке 17 набору fltr-foo соответствует { 5.0.0.0/8, 6.0.0.0/8 }, а набору fltr-bar соответствуют маршруты AS1 или { 5.0.0.0/8, 6.0.0.0/8 }, если для них AS-path включает AS2.

5.5 Класс rtr-set

Атрибут Значение Тип
rtr-set <object-name> Обязательный, одно значение, ключ класса
members список <inet-rtr-name>, <rtr-set-name> или <ipv4_address> Необязательный, много значений
mbrs-by-ref

список <mntner-name>

Необязательный, много значений

 Рисунок 18 Атрибуты класса rtr-set

Атрибуты класса rtr-set показаны на рисунке 18. Атрибут rtr-set определяет имя набора — имя RPSL, начинающееся с «rtrs-». Атрибут members содержит список элементов набора, которые указываются в виде списка имен inet-rtr, адресов ipv4_address или имен других наборов rtr-set.

На рисунке 19 показаны два объекта rtr-set. Набор rtrs-foo включает два маршрутизатора — rtr1.isp.net и rtr2.isp.net. Набор rtrs-bar содержит объекты набора rtrs-foo и маршрутизатор rtr3.isp.net (т. е., маршрутизаторы rtr1.isp.net, rtr2.isp.net, rtr3.isp.net).

rtr-set: rtrs-foo rtr-set: rtrs-bar
members: rtr1.isp.net, rtr2.isp.net members: rtr3.isp.net, rtrs-foo

Рисунок 19 Объекты rtr-set

Атрибут mbrs-by-ref содержит список имен держателей или ключевое слово ANY. При использовании этого атрибута набор маршрутизаторов включает также маршрутизаторы, для которых объекты inet-rtr зарегистрированы одним из указанных держателей, а атрибут member-of указывает на данный набор маршрутизаторов. Если mbrs-by-ref = ANY, любой объект inet-rtr, ссылающийся на данный набор маршрутизаторов, является элементом набора. Если атрибут mbrs-by-ref отсутствует, в набор входят только маршрутизаторы, указанные в списке атрибута members.

rtr-set: rtrs-foo
members: rtr1.isp.net, rtr2.isp.net
mbrs-by-ref: MNTR-ME
inet-rtr: rtr3.isp.net
local-as: as1
ifaddr: 1.1.1.1 masklen 30
member-of: rtrs-foo
mnt-by: MNTR-ME

Рисунок 20 Объекты rtr-set

На рисунке 20 показан объект rtr-set, использующий атрибут mbrs-by-ref. Набор rtrs-foo включает маршрутизаторы rtr1.isp.net, rtr2.isp.net и rtr3.isp.net.

5.6 Партнерство и класс peering-set

Атрибуты класса peering-set показаны на рисунке 21. Объект peering-set определяет множество партнеров, которые перечислены в его атрибутах, а также имя множества (имя RPSL, начинающееся с «prng-»).

Атрибут Значение Тип
peering-set <object-name> Обязательный, одно значение, ключ класса
peering <peering> Обязательный, много значений

 Рисунок 21 Атрибуты класса filter

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

При описании партнерских отношений здесь используется топология, показанная на рисунке 22. В этом примере используется три AS (AS1, AS2, AS3), две точки обмена (EX1, EX2) и 6 маршрутизаторов. Маршрутизаторы, подключенные к одной точке обмена, соединены между собой (каждый с каждым) и обмениваются маршрутной информацией. Т. е., маршрутизаторы 7.7.7.1, 7.7.7.2 и 7.7.7.3 соединены между собой, а маршрутизаторы 9.9.9.1, 9.9.9.2 и 9.9.9.3 — между собой.

Синтаксис спецификации партнерских отношений имеет вид:

<as-expression> [<router-expression-1>] [at <router-expression-2>] | <peering-set-name>
     ----------------------                   ----------------------
     |            7.7.7.1 |-------|   |-------| 7.7.7.2            |
     |                    |     ========      |                    |
     |   AS1              |      EX1  |-------| 7.7.7.3     AS2    |
     |                    |                   |                    |
     |            9.9.9.1 |------       ------| 9.9.9.2            |
     ----------------------     |       |     ----------------------
                               ===========
                                   |    EX2
     ----------------------        |
     |            9.9.9.3 |---------
     |                    |
     |   AS3              |
     ----------------------

Рисунок 22 Пример топологии с тремя AS — AS1, AS2 и AS3, двумя точками обмена и шестью маршрутизаторами

где <as-expression> — выражение на основе номеров AS и наборов AS с использованием операторов AND, OR и EXCEPT, а <router-expression-1> и <router-expression-2> — выражения на основе IP-адресов маршрутизаторов, имен inet-rtr и rtr-set с использованием операторов AND, OR и EXCEPT. Бинарный оператор EXCEPT задает вычитание (исключение) множества и имеет такой же приоритет, как оператор AND (семантически он эквивалентен комбинации AND NOT). Т. е., (AS1 OR AS2) EXCEPT AS2 = AS1.

Такая запись идентифицирует все партнерские отношения между любым локальным маршрутизатором из <router-expression-2> и всеми его партнерами в <router-expression-1>, относящимися к AS из <as-expression>. Если выражение <router-expression-2> не указано, по умолчанию это будет указывать на все маршрутизаторы локальной AS, которые имеют партнеров в AS из <as-expression>. Если не задано выражение <router-expression-1>, по умолчанию это будет указывать на все маршрутизаторы партнерских AS из <as-expression>, которые имеют партнерские отношения с локальной AS.

Если используется <peering-set-name>, партнерские отношения перечисляются в соответствующем объекте peering-set. Отметим, что объекты peering-set могут быть рекурсивными.

Возможно множество специальных форм указания партнерских отношений. Приведенные ниже примеры показывают наиболее распространенные варианты, использующие атрибут import класса aut-num. В первом примере 7.7.7.1 импортирует маршрут 128.9.0.0/16 от 7.7.7.2.

(1) aut-num: AS1

import: from AS2 7.7.7.2 at 7.7.7.1 accept { 128.9.0.0/16 }

В следующем примере маршрутизатор 7.7.7.1 импортирует 128.9.0.0/16 от 7.7.7.2 и 7.7.7.3.

(2) aut-num: AS1

import: from AS2 at 7.7.7.1 accept { 128.9.0.0/16 }

В примере 3 маршрутизатор 7.7.7.1 импортирует 128.9.0.0/16 от 7.7.7.2 и 7.7.7.3, а 9.9.9.1 — 128.9.0.0/16 от 9.9.9.2.

(3) aut-num: AS1

import: from AS2 accept { 128.9.0.0/16 }

В следующем примере 9.9.9.1 импортирует маршрут 128.9.0.0/16 от 9.9.9.2 и 9.9.9.3.

(4) as-set: AS-FOO

members: AS2, AS3
aut-num: AS1
import: from AS-FOO at 9.9.9.1 accept { 128.9.0.0/16 }

В примере 5 маршрутизатор 9.9.9.1 импортирует 128.9.0.0/16 от 9.9.9.2 и 9.9.9.3, а 7.7.7.1 — маршрут 128.9.0.0/16 от 7.7.7.2 и 7.7.7.3.

(5) aut-num: AS1

import: from AS-FOO accept { 128.9.0.0/16 }

В следующем примере AS1 импортирует маршрут 128.9.0.0/16 от AS3 на маршрутизаторе 9.9.9.1

(6) aut-num: AS1

import: from AS-FOO and not AS2 at not 7.7.7.1
accept { 128.9.0.0/16 }

Выражение «AS-FOO and not AS2» эквивалентно «AS3», а «not 7.7.7.1» = 9.9.9.1.

В примере 7 маршрутизатор 9.9.9.1 импортирует 128.9.0.0/16 от 9.9.9.2 и 9.9.9.3.

(7) peering-set: prng-bar

peering: AS1 at 9.9.9.1
peering-set: prng-foo
peering: prng-bar
peering: AS2 at 9.9.9.1
aut-num: AS1
import: from prng-foo accept { 128.9.0.0/16 }
Атрибут Значение Тип
aut-num <as-number> Обязательный, одно значение, ключ класса
as-name <object-name> Обязательный, одно значение
member-of список <as-set-name> Необязательный, много значений
import см. параграф 6.1 Необязательный, много значений
export см. параграф 6.2 Необязательный, много значений
default см. параграф 6.5 Необязательный, много значений

 Рисунок 23 Атрибуты класса aut-num

6 Класс aut-num

Правила маршрутизации задаются с использованием класса aut-num, атрибуты которого показаны на рисунке 23. Значением атрибута aut-num является номер AS, описываемой данным объектом. Атрибут as-name показывает символьное имя AS (с использованием синтаксиса имен RPSL). Правила импорта, экспорта и маршрутизации по умолчанию для AS описываются атрибутами import, export и default, соответственно.

6.1 Атрибут import — спецификация правил импорта

В RPSL политика импорта определяется выражениями правил импорта, каждое из которых задается с использованием атрибута import. Синтаксис атрибута import показан ниже и более подробно описан в параграфах 6.3 и 6.6.

import: from <peering-1> [action <action-1>]
. . .
from <peering-N> [action <action-N>]
accept <filter>

Указание действия (action) является необязательным. Семантика атрибута import следующая: набор маршрутов, соответствующих фильтру <filter>, импортируется от всех партнеров из <peerings>, а импортируемые маршруты из <peering-M>, <action-M> «выполняются».

Например, запись

aut-num: AS1
import: from AS2 action pref = 1; accept { 128.9.0.0/16 }

говорит о том, что маршрут 128.9.0.0/16 принимается от AS2 с приоритетом 1. Спецификации партнерских отношений и фильтров были описаны ранее (см. параграфы 5.6 и 5.4, соответственно). Далее описана спецификация действий.

6.1.1 Спецификация действий

Действиями правил в RPSL являются установка или изменение атрибутов маршрута (например, задание приоритета, добавление группы BGP в атрибут пути BGP community или установка атрибута MULTI-EXIT-DISCRIMINATOR). Действия правил могут включать также инструкции маршрутизатору для выполнения специальных операций (например, подавления осцилляций маршрутов — route flap damping).

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

aut-num: AS1
import: from AS2
action pref = 10; med = 0; community.append(10250, 3561:10);
accept { 128.9.0.0/16 }

будет задавать установку pref = 10, med = 0, а также добавления 10250 и 3561:10 в конец атрибута пути BGP community. Атрибут pref является инверсией атрибута local-pref (т. е., local-pref = 65535 — pref). Маршрут с атрибутом local-pref всегда является более предпочтительным, чем маршрут без такого атрибута.

aut-num: AS1
import: from AS2 action pref = 1;
from AS3 action pref = 2;
accept AS4

приведенный выше пример показывает, что маршруты AS4 воспринимаются от AS2 с приоритетом 1, а от AS3 — с приоритетом 2 (маршруты с меньшим значением приоритета являются более предпочтительными).

aut-num: AS1
import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 1;
from AS2 action pref = 2;
accept AS4

Пример выше показывает, что маршруты AS4 принимаются от AS2 через партнерскую связь 7.7.7.1-7.7.7.2 с приоритетом 1, а от других партнеров из AS2 — с приоритетом 2.

6.2 Атрибут export — спецификация политики экспорта

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

export: to <peering-1> [action <action-1>]
. . .
to <peering-N> [action <action-N>]
announce <filter>

Задание действия (action) является необязательным. Атрибут export имеет следующую семантику: набор маршрутов, соответствующих фильтру <filter>, экспортируется всем партнерам, заданным в <peerings>, маршруты в <peering-M>, <action-M> «выполняются».

Например, запись

aut-num: AS1
export: to AS2 action med = 5; community .= { 70 };
announce AS4

показывает, что маршруты AS4 анонсируются в AS2 с med = 5 и добавлением группы 70 в список community.

Пример

aut-num: AS1
export: to AS-FOO announce ANY

показывает, что AS1 анонсирует все свои маршруты в набор AS с именем AS-FOO.

6.3 Другие протоколы маршрутизации, многопротокольной маршрутизации и вставки маршрутов

Более полный синтаксис атрибутов import и export показан ниже.

import: [protocol <protocol-1>] [into <protocol-2>]
from <peering-1> [action <action-1>]
. . .
from <peering-N> [action <action-N>]
accept <filter>
export: [protocol <protocol-1>] [into <protocol-2>]
to <peering-1> [action <action-1>]
. . .
to <peering-N> [action <action-N>]
announce <filter>

Необязательные спецификации протокола могут использоваться при задании правил для других протоколов маршрутизации, для вставки маршрутов одного протокола в маршруты другого протокола или политики многопротокольной маршрутизации. Поле <protocol-1> задает имя протокола, маршруты которого будут передаваться другим протоколам. Поле <protocol-2> указывает имя протокола, который будет принимать маршруты от другого протокола. По умолчанию для полей <protocol-1> и <protocol-2> используется протокол внешней маршрутизации Internet, которым в настоящее время является BGP.

В приведенном ниже примере все маршруты interAS передаются протоколу RIP.

aut-num: AS1
import: from AS2 accept AS2
export: protocol BGP4 into RIP
to AS1 announce ANY

В следующем примере AS1 принимает маршруты AS2, включая все более специфичные маршруты AS2, но не вставляет эти более специфичные маршруты в таблицы маршрутизации OSPF.

aut-num: AS1
import: from AS2 accept AS2^+
export: protocol BGP4 into OSPF
to AS1 announce AS2

В следующем примере AS1 вставляет свои статические маршруты (маршруты из набора AS1:RS-STATIC-ROUTES) в протокол маршрутизации interAS и дважды добавляет AS1 в конец своих путей AS.

aut-num: AS1
import: protocol STATIC into BGP4
from AS1 action aspath.prepend(AS1, AS1);
accept AS1:RS-STATIC-ROUTES

В заключительном примере AS1 импортирует другой набор unicast-маршрутов для обратного пути пересылаемых пакетов multicast от AS2:

aut-num: AS1
import: from AS2 accept AS2
import: protocol IDMR
from AS2 accept AS2:RS-RPF-ROUTES

6.4 Устранение неоднозначностей

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

aut-num: AS1
import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 2;
from AS2 7.7.7.2 at 7.7.7.1 action pref = 1;
accept AS4

Такая ситуация не является ошибкой, хотя, определенно, нежелательна. Для устранения неоднозначности используется действие, соответствующее первой спецификации партнерства. В примере это маршруты, принятые с приоритетом 2. Это правило будем называть specification-order7.

Рассмотрим пример:

aut-num: AS1
import: from AS2 action pref = 2;
from AS2 7.7.7.2 at 7.7.7.1 action pref = 1; dpa = 5;
accept AS4

где обе спецификации покрывают партнерство 7.7.7.1-7.7.7.2, хотя вторая спецификация является более узкой (специфичной). Правило порядка спецификаций остается применимым и выполняется только действие pref = 2. Фактически, вторая пара peering-action не используется, поскольку первая пара peering-action всегда перекрывает ее. Если целью правила является восприятие маршрутов с приоритетом 1 для данных партнерских отношений и с приоритетом 2 от всех других партнеров, следует задать спецификацию:

aut-num: AS1
import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 1; dpa = 5;
from AS2 action pref = 2;
accept AS4

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

aut-num: AS1
import: from AS2 action pref = 2; accept AS4
import: from AS2 action pref = 1; accept AS4

В этом случае правило specification-order также действует. Т. е., маршруты AS4 будут восприниматься от AS2 с приоритетом 2. Если фильтры перекрываются, но не совпадают:

aut-num: AS1
import: from AS2 action pref = 2; accept AS4
import: from AS2 action pref = 1; accept AS4 OR AS5

маршруты AS4 воспринимаются от AS2 с приоритетом 2, однако маршруты AS5 тоже будут приниматься, но с приоритетом 1.

Ниже приводится в общем виде спецификация правила порядка для удобства реализации RPSL. Рассмотрим два выражения политики:

aut-num: AS1
import: from peerings-1 action action-1 accept filter-1
import: from peerings-2 action action-2 accept filter-2

Приведенные выше выражения эквиваленты следующему однозначному набору выражений:

aut-num: AS1
import: from peerings-1 action action-1 accept filter-1
import: from peerings-3 action action-2 accept filter-2 AND NOT filter-1
import: from peerings-4 action action-2 accept filter-2

где отношения peerings-3 покрываются одновременно peerings-1 и peerings-2, а peerings-4 — перекрывается peerings-2, но не перекрывается peerings-1 (filter-2 AND NOT filter-1 соответствует маршрутам, которые соответствуют filter-2, но не соответствуют filter-1).

Пример:

aut-num: AS1
import: from AS2 7.7.7.2 at 7.7.7.1
action pref = 2;
accept {128.9.0.0/16}
import: from AS2
action pref = 1;
accept {128.9.0.0/16, 75.0.0.0/8}

Рассмотрим два партнерства с AS2 — 7.7.7.1-7.7.7.2 и 9.9.9.1-9.9.9.2. Оба выражения правил покрывают 7.7.7.1-7.7.7.2. В этом партнерстве маршрут 128.9.0.0/16 воспринимается с приоритетом 2, а маршрут 75.0.0.0/8 — с приоритетом 1. Партнерство 9.9.9.1-9.9.9.2 покрывается только вторым выражением. Следовательно, оба маршрута 128.9.0.0/16 и 75.0.0.0/8 будут приниматься с приоритетом 1 через партнерские отношения 9.9.9.1-9.9.9.2.

Отметим, что такие же правила устранения неоднозначностей применимы к выражениям правил для export и default.

6.5 Атрибут default — задание политики, используемой по умолчанию

Используемые по умолчанию правила маршрутизации задают с помощью атрибута default, синтаксис которого показан ниже:

default: to <peering> [action <action>] [networks <filter>]

Поля <action> и <filter> являются необязательными. Атрибут имеет следующую семантику: спецификация <peering> показывает AS (и маршрутизатор, если он указан) для маршрута по умолчанию; спецификация <action> (при ее наличии) указывает различные атрибуты для маршрутизации по умолчанию (например, относительные предпочтения разных маршрутов, используемых по умолчанию), а спецификация <filter> (при ее наличии) указывает правила фильтрации. Маршрутизатор использует политику маршрутизации по умолчанию только при получении от данного партнера маршрутов, соответствующих заданному фильтру <filter>.

В приведенном ниже примере AS1 использует по умолчанию AS2 для маршрутизации.

aut-num: AS1
default: to AS2

В следующем примере маршрутизатор 7.7.7.1 в AS1 использует по умолчанию маршрутизатор 7.7.7.2 из AS2.

aut-num: AS1
default: to AS2 7.7.7.2 at 7.7.7.1

В приведенном ниже примере AS1 использует по умолчанию AS2 и AS3, предпочитая AS2.

aut-num: AS1
default: to AS2 action pref = 1;
default: to AS3 action pref = 2;

В следующем примере AS1 использует по умолчанию AS2, применяя 128.9.0.0/16 в качестве заданной по умолчанию сети.

aut-num: AS1
default: to AS2 networks { 128.9.0.0/16 }

6.6 Структурированная спецификация политики

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

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

<import-factor> ::= from <peering-1> [action <action-1>]
. . .
from <peering-N> [action <action-N>]
accept <filter>;
<import-term> ::= <import-factor> |
LEFT-BRACE
<import-factor>
. . .
<import-factor>
RIGHT-BRACE
<import-expression> ::= <import-term> |
<import-term> EXCEPT <import-expression> |
<import-term> REFINE <import-expression>
import: [protocol <protocol1>] [into <protocol2>]
<import-expression>

Следует отметить точку с запятой в конце <import-factor>. Если спецификация политики не структурирована (как во всех примерах других параграфов), этот знак является необязательным (синтаксис и семантика <import-factor> определены в параграфе 6.1).

Поле <import-term> содержит последовательность значений <import-factor>, заключенных в фигурные скобки ({ }) или просто <import-factor>. Семантика <import-term> заключается в объединении <import-factor> с использованием правила порядка спецификаций. Поле <import-expression> представляет собой <import-term> или <import-term>, за которым следует одно из ключевых слов except или refine и другое выражение <import-expression>. Отметим, что наше определение допускает вложенные выражения. Следовательно, возможны «исключения из исключений», «уточнение уточненного» и даже «уточнение исключений» и т. п.

Оператор исключения (except) имеет следующую семантику: результатом использования операции except является другое значение <import-term>. Результирующий набор правил содержит правила правой части, но фильтры правил изменяются так, чтобы включались только маршруты, соответствующие левой части. После этого включаются правила левой части, а их фильтры изменяются для исключения маршрутов, соответствующих правой части. Обратите внимание на то, что в процессе обработки фильтры изменяются, но действия копируются без изменений. При наличии множества вложенных уровней операции (как except, так и refine) выполняются справа налево.

Рассмотрим пример.

import: from AS1 action pref = 1; accept as-foo;
except {
   from AS2 action pref = 2; accept AS226;
   except {
      from AS3 action pref = 3; accept {128.9.0.0/16};
   }
}

где маршрут 128.9.0.0/16 исходит из AS226, являющейся элементом набора as-foo. В этом примере маршрут 128.9.0.0/16 воспринимается от AS3, все прочие маршруты (не 128.9.0.0/16), порожденные AS226, воспринимаются от AS2, а маршруты из других AS в as-foo воспринимаются от AS1.

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

from AS2 action pref = 2; accept AS226;
except {
   from AS3 action pref = 3; accept {128.9.0.0/16};
}

ее эквивалентом является

{
   from AS3 action pref = 3; accept AS226 AND {128.9.0.0/16};
   from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
}

Следовательно, исходное выражение эквивалентно:

import: from AS1 action pref = 1; accept as-foo;
except {
   from AS3 action pref = 3; accept AS226 AND {128.9.0.0/16};
   from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
}

которое, в свою очередь, эквивалентно

import: {
   from AS3 action pref = 3;
   accept as-foo AND AS226 AND {128.9.0.0/16};
   from AS2 action pref = 2;
   accept as-foo AND AS226 AND NOT {128.9.0.0/16};
   from AS1 action pref = 1;
   accept as-foo AND NOT
   (AS226 AND NOT {128.9.0.0/16} OR AS226 AND {128.9.0.0/16});
}

Поскольку AS226 входит в as-foo и 128.9.0.0/16 относится к AS226, выражение можно упростить до:

import: {
   from AS3 action pref = 3; accept {128.9.0.0/16};
   from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
   from AS1 action pref = 1; accept as-foo AND NOT AS226;
}

Для оператора refine результирующий набор конструируется путем выполнения декартова перемножения сторон: для каждого правила l в левой части и каждого правила r в правой части партнерство в результирующей политики будет представлять собой партнерство, общее для r и l, фильтр результирующей политики будет определяться пересечением фильтров l и r, а действие результирующей политики будет определяться последовательным выполнением действий l и r в указанном порядке. Если общего партнерства нет или пересечение фильтров пусто, результирующее правило не создается.

Рассмотрим пример

import: { from AS-ANY action pref = 1; accept community(3560:10);
   from AS-ANY action pref = 2; accept community(3560:20);
} refine {
   from AS1 accept AS1;
   from AS2 accept AS2;
   from AS3 accept AS3;
}

Здесь любой маршрут с 3560:10 получает приоритет 1, а любой маршрут с 3560:20 — приоритет 2, независимо от источника импорта. Однако из AS1 импортируются только маршруты AS1, из AS2 — только маршруты AS2, из AS3 — только маршруты AS3, а из других AS маршруты не импортируются. Мы можем достичь такого же результата, используя описанную выше «алгебру». Приведенный выше пример эквивалентен:

import: {
   from AS1 action pref = 1; accept community(3560:10) AND AS1;
   from AS1 action pref = 2; accept community(3560:20) AND AS1;
   from AS2 action pref = 1; accept community(3560:10) AND AS2;
   from AS2 action pref = 2; accept community(3560:20) AND AS2;
   from AS3 action pref = 1; accept community(3560:10) AND AS3;
   from AS3 action pref = 2; accept community(3560:20) AND AS3;
}

Отметим, что общее партнерство между «from AS1» и «from AS-ANY» совпадает с партнерством «from AS1». Хотя понятие «общего партнерства» (common peerings), формально не было определено, такое определение можно получить дедукцией определенного в параграфе 5.6 понятия партнерства.

Рассмотрим пример

import: {
   from AS-ANY action med = 0; accept {0.0.0.0/0^0-18};
} refine {
   from AS1 at 7.7.7.1 action pref = 1; accept AS1;
   from AS1 action pref = 2; accept AS1;
}

где воспринимаются только маршруты, длиной от 0 до 18 и устанавливается значение med = 0 для предотвращения влияния атрибута med на партнерские отношения. В дополнение к этому из AS1 импортируются только маршруты AS1 и маршруты, импортированные из AS1 в 7.7.7.1 являются предпочтительными по сравнению с маршрутами от других партнеров. Это эквивалентно выражению:

import: {
   from AS1 at 7.7.7.1 action med=0; pref=1; accept {0.0.0.0/0^0-18} AND AS1;
   from AS1 action med=0; pref=2; accept {0.0.0.0/0^0-18} AND AS1;
}

Описанные выше синтаксис и семантика применимы также к структурированной политики экспорта при замене from на to и accept на announce.

7 Класс dictionary

Класс dictionary обеспечивает расширяемость RPSL. Объекты словаря определяют атрибуты типы и протоколы маршрутизации для политики маршрутизации. Атрибуты политики маршрутизации (далее rp-attribute) могут соответствовать реальным атрибутам протоколов, таким, как атрибуты пути BGP (например, community, dpa, AS-path), или свойствам маршрутизаторов (например, подавление осцилляций маршрутов BGP). По мере внедрения новых протоколов, протокольных атрибутов или новых возможностей маршрутизаторов объект dictionary обновляется для включения соответствующих определений rp-attribute и протоколов.

Класс rp-attribute является абстрактным (т. е., представление данных для него невозможно). Вместо этого используются различные методы доступа. Например, атрибут rp-attribute для атрибута BGP AS-path называется aspath и имеет метод доступа, называемый prepend (добавление в начало), который служит для добавления номеров AS в атрибуты AS-path. Методы доступа могут использовать аргументы, которые являются строго типизованными. Например, упомянутый выше метод prepend использует в качестве аргументов номера AS.

Как только атрибут rp-attribute определен в словаре, его можно использовать для описания фильтров и действий политики маршрутизации. Для привлечения новых объектов словаря и распознавания вновь определенных атрибутов rp-attribute, типов и протоколов требуются средства анализа политики. Такие средства позволят аппроксимировать анализ политики с атрибутами rp-attribute, которых они еще не понимают: метод filter может всегда возвращать соответствие, а метод action — не выполнять никаких действий. Средства анализа могут даже загрузить код для выполнения подходящих операций с использованием механизмов, выходящих за пределы RPSL.

Далее будет описан синтаксис и семантика класса dictionary. Это описание не столь важно для понимания объектов класса dictionary (но существенно для их создания). Вы можете пропустить текст до начала параграфа 7.1 Исходный словарь RPSL, примеры действий и фильтров политики.

 

Атрибут Значение Тип
dictionary <object-name> Обязательный, одно значение, ключ класса
rp-attribute <object-name> Необязательный, много значений
typedef список <as-set-name> Необязательный, много значений
protocol см. параграф 6.1 Необязательный, много значений

 Рисунок 24 Атрибуты класса dictionary

Атрибуты класса dictionary показаны на рисунке 24. Атрибут dictionary указывает имя объекта dictionary в соответствии с правилами именования RPSL. Может существовать множество объектов dictionary, однако есть один общеизвестный объект словаря по имени RPSL. Все средства по умолчанию используют этот словарь.

Атрибут rp-attribute использует синтаксис:

rp-attribute: <name>
<method-1>(<type-1-1>, ..., <type-1-N1> [, "..."])
...
<method-M>(<type-M-1>, ..., <type-M-NM> [, "..."]) 

operator= operator==
operator<<= operator<
operator>>= operator>
operator+= operator>=
operator-= operator<=
operator*= operator!=
operator/= operator()
operator.= operator[]

Рисунок 25 Операторы

где поле <name> указывает имя rp-attribute, <method-i> задает имя метода доступа для rp-attribute, принимающего Ni аргументов (j-й аргумент имеет тип <type-i-j>). В качестве имени метода может служить имя RPSL или один из операторов, указанных на рисунке 25. Операторные методы, за исключением operator() и operator[], могут принимать только по 1 аргументу.

Атрибут rp-attribute может иметь множество определенных для него методов. Некоторые методы могут даже совпадать по именам, если они различаются по типам принимаемых атрибутов. Если за списком атрибутов следует многоточие «…», это говорит о переменном числе аргументов данного метода. В таких случаях реальные аргументы после N-го имеют тип <type-N>.

integer[lower, upper] ipv4_address
real[lower, upper] address_prefix
enum[name, name, ...] address_prefix_range
string dns_name
boolean filter
rpsl_word as_set_name
free_text route_set_name
email rtr_set_name
as_number filter_set_name
peering_set_name

Рисунок 26 Предопределенные типы

Аргументы строго типизованы. Тип <type> в RPSL является предопределенным, объединением (union), списком (list) или определенным в словаре типом. Предопределенные типы указаны на рисунке 26.

Предопределенные типы integer (целое число) и real (действительное число) могут иметь верхнюю и нижнюю границу диапазона допустимых значений аргумента. Задание диапазона является опциональным. Для представления значений типов integer, real и string здесь используются правила языка ANSI C. Для типа enum указывается список имен RPSL, которые являются корректными значениями типа. Тип boolean может принимать значения true (истина) и false (ложь). Типы as_number, ipv4_address, address_prefix и dns_name описаны в разделе 2. Тип filter представляет собой фильтр политики, описанный в разделе 6. Предполагается, что значение типа filter заключается в круглые скобки.

Тип union использует синтаксис:

union <type-1>, ... , <type-N>

где <type-i> — тип RPSL. Тип union является одним из типов <type-1> — <type-N> (аналогично типу union в C[14]).

Тип list использует синтаксис:

list [<min_elems>:<max_elems>] of <type>

В этом случае список элементов относится к типу <type> и содержит не менее <min_elems> и не более <max_elems> элементов. Спецификация размера является опциональной. Если размер не задан, число элементов списка не ограничивается. Значение типа list представляется в форме последовательности элементов, разделенных запятыми, и помещается в фигурные скобки ({ }).

Атрибут typedef в словаре определяет именованные типы:

typedef: <name> <type>

где <name> — имя типа для <type>. Атрибут typedef особенно полезен для определения типов, не относящихся к предопределенным (например, список union, список list и т. п.).

Атрибут protocol класса dictionary определяет протокол и набор параметров партнерства для этого протокола (параметры используются в классе inet-rtr, как показано в разделе 9). Атрибут использует синтаксис:

protocol: <name>
MANDATORY | OPTIONAL <parameter-1>(<type-1-1>,...,<type-1-N1> [,"..."])
...
MANDATORY | OPTIONAL <parameter-M>(<type-M-1>,...,<type-M-NM> [,"..."])

где <name> — имя протокола, MANDATORY (обязательный) или OPTIONAL (необязательный) — ключевые слова, а <parameter-i> — параметр партнерства для этого протокола, принимающий Ni аргументов. Синтаксис и семантика аргументов такие же, как для атрибута rp-attribute. При использовании ключевого слова MANDATORY параметр является обязательным и должен быть задан для каждого партнерства данного протокола. При использовании ключевого слова OPTIONAL параметр может быть пропущен.

7.1 Исходный словарь RPSL, примеры действий и фильтров политики

dictionary: RPSL
rp-attribute: # приоритет, меньшее значение говорит о предпочтительности
pref
operator=(integer[0, 65535])
rp-attribute: # атрибут BGP multi_exit_discriminator
med
# для установки med = 10: med = 10;
# для установки в качестве med значения метрики IGP: med = igp_cost;
operator=(union integer[0, 65535], enum[igp_cost])
rp-attribute: # атрибут BGP для предпочтения адресатов (dpa)
dpa
operator=(integer[0, 65535])
rp-attribute: # атрибут BGP AS-path
aspath
# добавление номеров AS в начало (prepend) в порядке от последнего к первому
prepend(as_number, ...)
typedef: # значение community в RPSL может быть
# - 4-байтовым целым числом (корректная нотация 3561:70)
# - internet, no_export, no_advertise (см. RFC 1997)
community_elm union
integer[1, 4294967295],
enum[internet, no_export, no_advertise],
typedef: # список значений community { 40, no_export, 3561:70 }
community_list list of community_elm
rp-attribute: # атрибут BGP community
community
# задание списка community
operator=(community_list)
# добавить значения community в конец
operator.=(community_list)
append(community_elm, ...)
# удалить значения community
delete(community_elm, ...)
# фильтр: true, если содержится одно из значений community
contains(community_elm, ...)
# сокращенная форма от community(no_export, 3561:70)
operator()(community_elm, ...)
# порядок независимого сравнения
operator==(community_list)
rp-attribute: # следующий маршрутизатор на статическом маршруте
next-hop
# для задания маршрутизатора 7.7.7.7: next-hop = 7.7.7.7;
# для установки адреса самомго маршрутизатора: next-hop = self;
operator=(union ipv4_address, enum[self])
rp-attribute: # стоимость статического маршрута
cost
operator=(integer[0, 65535])
protocol: BGP4
# номер AS партнерского маршрутизатора
MANDATORY asno(as_number)
# разрешить подавление осцилляций (flap damping)
OPTIONAL flap_damp()
OPTIONAL flap_damp(integer[0,65535],
# наказание за факт осцилляции (per flap)
integer[0,65535],
# размер наказания для подавления осцилляций
integer[0,65535],
# размер наказания для повторного использования
integer[0,65535],
# время «полужизни» в секундах для активизации (up)
integer[0,65535],
# время «полужизни» в секундах для деактивации (down)
integer[0,65535])
# максимальное наказание
protocol: OSPF
protocol: RIP
protocol: IGRP
protocol: IS-IS
protocol: STATIC
protocol: RIPng
protocol: DVMRP
protocol: PIM-DM
protocol: PIM-SM
protocol: CBT
protocol: MOSPF

Рисунок 27 Словарь RPSL

На рисунке 27 показан исходный словарь RPSL. Он включает 7 атрибутов rp-attribute: pref для установки локального предпочтения воспринятых маршрутов, med для присваивания значения атрибуту BGP MULTI_EXIT_DISCRIMINATOR, dpa для присваивания значения атрибуту BGP DPA, aspath для добавления значений в начало атрибута BGP AS_PATH, community для присваивания или проверки значения атрибута BGP community, next-hop для задания следующего маршрутизатора на статических маршрутах и cost для задания стоимости статических маршрутов. Словарь определяет два типа: community_elm и community_list. Тип community_elm type задается 4-байтовым целым числом без знака или содержит ключевое слово internet, no_export или no_advertise (определены в [9]). Целочисленное значение можно задавать с использованием 2-байтовых целых чисел, разделенных двоеточием, для формирования пространства номеров групп (community) так, чтобы провайдер мог использовать свой номер AS в качестве двух первых байтов, а два оставшихся выделять в соответствии с семантикой своих групп.

Исходный словарь (рисунок 27) определяет только две опции для протокола BGP: asno и flap_damp. Обязательная опция asno указывает номер AS партнерского маршрутизатора. Необязательная опция flap_damp рекомендует маршрутизатору подавлять осцилляции маршрутов (damp route flap) [21] при импорте маршрутов от партнера.

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

flap_damp(1000, 2000, 750, 900, 900, 20000)

Т. е., для каждой осцилляции устанавливается наказание 1000, маршрут «подавляется», когда суммарное значение «штрафа» достигает 2000. Значение штрафа снижается вдвое после каждых 15 минут (900 секунд) стабильности, независимо от того, подавлен маршрут или активен. Отключенный маршрут снова начинает использоваться, когда уровень штрафа опускается ниже 750. Максимальный уровень штрафа для маршрута составляет 20 000 (т. е., максимальное время подавления маршрута после установки стабильного состояния составит примерно 75 минут). Эти параметры согласуются с принятыми по умолчанию параметрами подавления осцилляций в некоторых маршрутизаторах.

Действия и фильтры политики, использующие RP-Attribute

Действия политики или фильтры, использующие rp-attribute x имеют синтаксис:

x.method(arguments)
x "op" argument

где method задает используемый метод, а «op» указывает операцию атрибута rp-attribute x. Если операция используется в спецификации композитного фильтра политики, она проверяется до выполнения операторов композитного фильтра (т. е., AND, OR, NOT и неявного оператора «ИЛИ»).

В качестве значения pref атрибута rp-attribute может использоваться положительное целое число:

pref = 10;

В качестве значения med атрибута rp-attribute может использоваться положительное целое число или слово «igp_cost»:

med = 0;
med = igp_cost;

В качестве значения dpa атрибута rp-attribute может использоваться положительное целое число:

dpa = 100;

Атрибут BGP community имеет форму списка 4-байтовых целых чисел, каждое из которых представляет группу (community). В приведенном ниже примере показаны варианты добавления групп в атрибут rp-attribute.

community .= { 100 };
community .= { NO_EXPORT };
community .= { 3561:10 };

В последнем случае 4-байтовое целое число представлено в форме двух 2-байтовых значений, из которых старшее равно 3561, а два младших байта задают значение 10. Следующий пример показывает, как удалить группы из атрибута rp-attribute:

community.delete(100, NO_EXPORT, 3561:10);

Фильтры, использующие community атрибута rp-attribute, можно определить, как показано в следующих примерах:

community.contains(100, NO_EXPORT, 3561:10);
community(100, NO_EXPORT, 3561:10); # краткая форма

Значение community атрибута rp-attribute можно задать в виде списка групп, как показано ниже:

community = {100, NO_EXPORT, 3561:10, 200};
community = {};

В первом случае значение community атрибута rp-attribute содержит группы 100, NO_EXPORT, 3561:10 и 200. Во втором атрибут community в rp-attribute сброшен. Значения community атрибута rp-attribute можно сравнивать со списком групп, как показано ниже:

community == {100, NO_EXPORT, 3561:10, 200}; # точное соответствие

Для влияния на выбор пути BGP можно удлинять значение as_path атрибута rp-attribute путем добавления в начало номеров AS, как показано ниже:

aspath.prepend(AS1);
aspath.prepend(AS1, AS1, AS1);

Далее приведено несколько примеров некорректных записей:

med = -50; # значение -50 выходит за пределы допустимого диапазона
med = igp; # igp не входит в число перечисляемых значений
med.assign(10); # метод assign не определен
community.append(AS3561:20); # первый аргумент должен иметь значение 3561 (целое число)

aut-num: AS1
export: to AS2 action community.={3561:90};
to AS3 action community.={3561:80};
announce AS1
as-set: AS3561:AS-PEERS
members: AS2, AS3
aut-num: AS3561
import: from AS3561:AS-PEERS
action pref = 10;
accept community(3561:90)
import: from AS3561:AS-PEERS
action pref = 20;
accept community(3561:80)
import: from AS3561:AS-PEERS
action pref = 20;
accept community(3561:70)
import: from AS3561:AS-PEERS
action pref = 0;
accept ANY

Рисунок 28 Пример политики с использованием группы rp-attribute

На рисунке 28 показан расширенный пример использования rp-attribute community. В этом примере выбор маршрутов в AS3561 основывается на сравнении значений атрибута community. Остальные AS могут опосредованно влиять на выбор маршрута в AS3561 путем включения соответствующих групп в свои маршрутные анонсы.

8 Класс Advanced route

8.1 Задание маршрутных агрегатов

Для задания агрегированных маршрутов могут использоваться атрибуты components, aggr-bndry, aggr-mtd, export-comps, inject и holes [11]. Объект route задает агрегированный маршрут, если указан любой из перечисленных атрибутов (за исключением inject). В качестве атрибута origin для агрегированного маршрута указывается номер AS, выполнившей агрегирование. В этом разделе термин «агрегат» или «агрегированный маршрут» используется для сгенерированных маршрутов, термин «компонента» — для маршрутов, использованных при генерации агрегата, а термин «более специфичный» относится к более специфичному маршруту, нежели агрегат, независимо от его использования при формировании атрибутов пути.

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

components: [ATOMIC] [[<filter>] [protocol <protocol> <filter> ...]]

где <protocol> указывает протокол маршрутизации (например, BGP4, OSPF или RIP — допустимые имена определяются в словаре), а <filter> является выражением политики. Маршруты, соответствующие одному из таких фильтров и полученные от указанного протокола, служат для формирования агрегированного маршрута. Если поле <protocol> отсутствует, по умолчанию используются все протоколы. Поле <filter> неявно содержит операцию AND с наиболее специфичным маршрутом агрегата, поэтому выбирается только одна компонента. При использовании ключевого слова ATOMIC агрегирование осуществляется на «атомарном уровне» [11]. Если поле <filter> не задано, по умолчанию используется более специфичный маршрут. Если отсутствуют атрибуты компонент, используются все более специфичные без ключевого слова ATOMIC.

route: 128.8.0.0/15
origin: AS1
components: <^AS2>
route: 128.8.0.0/15
origin: AS1
components: protocol BGP4 {128.8.0.0/16^+}
protocol OSPF {128.9.0.0/16^+}

Рисунок 29 Два объекта агрегированных маршрутов

На рисунке 29 показаны два объекта route. В первом примере агрегируется более специфичный маршрут 128.8.0.0/15 с путем, начинающимся в AS2. Во втором примере агрегируются некоторые маршруты, полученные от BGP, и некоторые маршруты от OSPF.

Атрибут aggr-bndry представляет собой выражение AS через номера AS и наборы (см. параграф 5.6). Результат определяет набор AS, которые формируют границу агрегирования. Если атрибут aggr-bndry отсутствует, границу агрегирования определяет исходная (origin) AS. За пределы границы агрегирования экспортируется только агрегированный маршрут, а более специфичные маршруты «подавляются». Однако в обмене информацией внутри границы агрегирования участвуют и более специфичные маршруты.

Атрибут aggr-mtd задает способ генерации агрегата и использует синтаксис:

aggr-mtd: inbound
| outbound [<as-expression>]

где <as-expression> задается с использованием номеров AS и наборов (см. параграф 5.6). Если <as-expression> отсутствует, по умолчанию используется значение AS-ANY. Если задано исходящее агрегирование, внутри AS будут сохраняться более специфичные маршруты, а агрегат будет формироваться перед экспортом на всех границах между данной AS и AS из <as-expression>, исключая AS, находящиеся внутри границы агрегирования (т. е., aggr-bndry применяется независимо от <as-expression>). Если задано входное агрегирование, агрегат формируется на всех границах между AS перед импортом маршрута в агрегирующую AS. Отметим, что для входного агрегирования <as-expression> не может использоваться. Если параметр aggr-mtd отсутствует, используется значение outbound AS-ANY.

route: 128.8.0.0/15 route: 128.8.0.0/15
origin: AS1 origin: AS2
components: {128.8.0.0/15^-} components: {128.8.0.0/15^-}
aggr-bndry: AS1 OR AS2 aggr-bndry: AS1 OR AS2
aggr-mtd: outbound AS-ANY aggr-mtd: outbound AS-ANY

Рисунок 30 Пример выходного агрегирования multi-AS

На рисунке 30 показан пример исходящего агрегирования. В этом примере AS1 и AS2 координируют агрегирование и анонсируют во внешний мир только менее специфичный маршрут 128.8.0.0/15, но обмениваются между собой более специфичными маршрутами. Такая форма агрегирования полезна в тех случаях, когда часть компонент относится к AS1, а другая часть — к AS2.

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

route: 128.8.0.0/15
origin: AS1
components: {128.8.0.0/15^-}
aggr-mtd: outbound AS-ANY
export-comps: {128.8.8.0/24}

Рисунок 31 Выходное агрегирование с исключением экспорта

На рисунке 31 показан пример исходящего агрегирования. В этом примере более специфичный маршрут 128.8.8.0/24 экспортируется за пределы AS1 в дополнение к агрегату. Такое решение полезно для случаев, когда сайт 128.8.8.0/24 является многодомным (подключен к AS1 и неким другим AS).

Атрибут inject указывает, какой из маршрутизаторов и в какой момент выполняет агрегирование. Синтаксис атрибута показан ниже.

inject: [at <router-expression>] ...
[action <action>]
[upon <condition>]

где <action> — спецификация действия (см. параграф 6.1.1), <condition> — логическое выражение, описанное ниже, а <router-expression> — выражение, описанное в параграфе 5.6.

Все маршрутизаторы из <router-expression> и в агрегирующей AS участвуют в агрегировании. Если <router-expression> отсутствует, агрегирование выполняют все маршрутизаторы внутри агрегирующей AS. Спецификация действия <action> может задавать атрибуты пути для агрегата (например, задание предпочтений).

Опишем приведенное выше логическое выражение. Агрегат генерируется тогда и только тогда, когда это выражение дает результат true. Параметр <condition> представляет собой логическое выражение с использованием операций AND и OR (операция NOT не разрешается) для:

HAVE-COMPONENTS { list of prefixes }
EXCLUDE { list of prefixes }
STATIC

Список префиксов (list of prefixes) в HAVE-COMPONENTS (компоненты присутствуют) может быть только более специфичным по сравнению с агрегатом. Параметр имеет значение true, когда все префиксы из списка присутствуют в таблице агрегирующего маршрутизатора. Список может включать также диапазоны префиксов (т. е., могут использоваться операторы ^-, ^+, ^n, ^n-m). В этом случае по крайней мере один префикс из каждого диапазона в списке должен присутствовать в таблице агрегирующего маршрутизатора, чтобы выражение имело значение true. Список префиксов в параметре EXCLUDE (исключить) может быть произвольным. Параметр имеет значение true, если ни одного из перечисленных в списке префиксов нет в таблице агрегирующего маршрутизатора. Этот список также может включать диапазоны префиксов и ни одного из префиксов указанных в списке диапазонов не должно быть в таблице маршрутизации. Ключевое слово STATIC всегда дает значение true. Если условия агрегирования (см. выше) не заданы, агрегат генерируется тогда и только тогда, когда есть компонента в таблице маршрутизации (т. е., более специфичный маршрут, нежели соответствующий фильтру в атрибуте components).

route: 128.8.0.0/15
origin: AS1
components: {128.8.0.0/15^-}
aggr-mtd: outbound AS-ANY
inject: at 1.1.1.1 action dpa = 100;
inject: at 1.1.1.2 action dpa = 110;
route: 128.8.0.0/15
origin: AS1
components: {128.8.0.0/15^-}
aggr-mtd: outbound AS-ANY
inject: upon HAVE-COMPONENTS {128.8.0.0/16, 128.9.0.0/16}
holes: 128.8.8.0/24

Рисунок 32 Пример вставки

На рисунке 32 показаны два примера. В первом примере агрегат помещается в анонсы на 2 маршрутизаторах, каждый из которых устанавливает свое значение атрибута пути dpa. Во втором случае агрегат генерируется только в тех случаях, когда в таблице маршрутизации имеются префиксы 128.8.0.0/16 и 128.9.0.0/16, в отличие от первого случае, где для генерации агрегата достаточно присутствия в таблице одного из этих префиксов.

Атрибут holes содержит список адресных префиксов компонент, которые не достижимы через агрегированный маршрут (возможно по причине того, что часть адресов префикса агрегата просто не распределена). Атрибут holes полезен при диагностике. Во втором примере на рисунке 32 имеется «дыра» 128.8.8.0/24. Наличие ее может быть результатом смены провайдера и утраты части адресного пространства.

8.1.1 Взаимодействие с правилами в классе aut-num

route: 128.8.0.0/16
origin: AS1
route: 128.9.0.0/16
origin: AS1
route: 128.8.0.0/15
origin: AS1
aggr-bndry: AS1 or AS2 or AS3
aggr-mtd: outbound AS3 or AS4 or AS5
components: {128.8.0.0/16, 128.9.0.0/16}
inject: upon HAVE-COMPONENTS {128.9.0.0/16, 128.8.0.0/16}
aut-num: AS1
export: to AS2 announce AS1
export: to AS3 announce AS1 and not {128.9.0.0/16}
export: to AS4 announce AS1
export: to AS5 announce AS1
export: to AS6 announce AS1

Рисунок 33 Взаимодействие с правилами в классе aut-num

Сформированный агрегат анонсируется в другие AS только в тех случаях, когда политика экспорта AS разрешает экспортировать его. Когда агрегат сформирован, более специфичные маршруты подавляются при экспорте (за исключением AS из aggr-bndry и компонент, исключенных в export-comps). При наличии таких исключений в политику экспорта AS следует явно включать экспорт исключений.

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

На рисунке 33 показан пример взаимодействия. Проверка объектов route покажет, что более специфичные маршруты 128.8.0.0/16 и 128.9.0.0/16 следует передавать между sAS1, AS2 b AS3 (т. е., внутри границы агрегирования). Исходящее агрегирование выполняется для AS4 и AS5, но не для AS3, поскольку та находится внутри границы агрегирования AS3. Объект aut-num позволяет экспортировать обе компоненты в AS2 и только компоненту 128.8.0.0/16 в AS3. Агрегат может быть сформирован только при доступности обеих компонент. В этом случае агрегат анонсируется только в AS4 и AS5. Однако при недоступности одной из компонент агрегат формироваться не будет и все доступные компоненты и более специфичные маршруты будут экспортироваться в AS4 и AS5. Независимо от выполнения агрегирования в AS6 будут экспортироваться только более специфичные маршруты (эта AS не указана в списке атрибута aggr-mtd).

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

8.1.2 Устранение неоднозначностей при перекрывающихся агрегатах

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

route: 128.8.0.0/15
origin: AS1
aggr-bndry: AS1 or AS2
aggr-mtd: outbound
inject: upon HAVE-COMPONENTS {128.8.0.0/16, 128.9.0.0/16}
route: 128.10.0.0/15
origin: AS1
aggr-bndry: AS1 or AS3
aggr-mtd: outbound
inject: upon HAVE-COMPONENTS {128.10.0.0/16, 128.11.0.0/16}
export-comps: {128.11.0.0/16}
route: 128.8.0.0/14
origin: AS1
aggr-bndry: AS1 or AS2 or AS3
aggr-mtd: outbound
inject: upon HAVE-COMPONENTS {128.8.0.0/15, 128.10.0.0/15}
export-comps: {128.10.0.0/15}

Рисунок 34 Агрегирование с перекрытием

На рисунке 34 AS1 совместно с AS2 агрегирует префиксы 128.8.0.0/16 и 128.9.0.0/16 в 128.8.0.0/15. AS3 и AS1 вместе агрегирует 128.10.0.0/16 и 128.11.0.0/16 в 128.10.0.0/15. Все эти AS совместно могут агрегировать 4 маршрута в 128.8.0.0/14. Предполагая доступность всех четырех компонент, маршрутизатор в AS1 для внешних AS (например, AS4) будет сначала генерировать 128.8.0.0/15 и 128.10.0.0/15. Это сделает маршруты 128.8.0.0/15, 128.10.0.0/15 и исключение 128.11.0.0/16 доступными для генерации 128.8.0.0/14. Маршрутизатор тогда будет генерировать 128.8.0.0/14 из этих трех маршрутов. Следовательно, для AS4 маршрут 128.8.0.0/14 и его исключение 128.10.0.0/15 вместе с его исключением 128.11.0.0/16 будут экспортируемыми.

Для AS2 маршрутизатор в AS1 будет генерировать только 128.10.0.0/15. Следовательно, 128.10.0.0/15 и его исключение 128.11.0.0/16 будут экспортируемыми. Отметим, что 128.8.0.0/16 и 128.9.0.0/16 также являются экспортируемыми, поскольку они не участвуют в агрегировании экспорта для AS2.

Аналогично, для AS3 маршрутизатор в AS1 будет генерировать только 128.8.0.0/15. В этом случае экспортируемыми маршрутами будут 128.8.0.0/15, 128.10.0.0/16 и 128.11.0.0/16.

8.2 Задание статических маршрутов

Атрибут inject можно использовать для задания статических маршрутов с помощью условия upon static:

inject: [at <router-expression>] ...
[action <action>]
upon static

В этом случае маршрутизаторы из <router-expression> выполняют действие <action> и вставляют маршрут в систему маршрутизации interAS статически. Действие <action> может устанавливать некоторые атрибуты маршрута (например, адрес следующего маршрутизатора или стоимость).

В приведенном ниже примере маршрутизатор 7.7.7.1 вставляет маршрут 128.7.0.0/16. Маршрутизаторами следующего интервала (в этом примере два таких маршрутизатора) для этого маршрута являются 7.7.7.2 и 7.7.7.3, стоимость маршрута составляет 10 через маршрутизатор 7.7.7.2 и 20 — через 7.7.7.3.

route: 128.7.0.0/16
origin: AS1
inject: at 7.7.7.1 action next-hop = 7.7.7.2; cost = 10; upon static
inject: at 7.7.7.1 action next-hop = 7.7.7.3; cost = 20; upon static
Атрибут Значение Тип
inet-rtr <dns-name> Обязательный, одно значение, ключ класса
alias <dns-name> Необязательный, много значений
local-as <as-number> Обязательный, одно значение
ifaddr см. ниже Обязательный, много значений
peer см. ниже Необязательный, много значений
member-of список <rtr-set-name> Необязательный, много значений

 Рисунок 35 Атрибуты класса inet-rtr

9 Класс inet-rtr

Маршрутизаторы указываются с помощью класса inet-rtr, атрибуты которого показаны на рисунке 35. Атрибут inet-rtr содержит доменное имя (DNS) описываемого маршрутизатора. Каждый атрибут alias, при его наличии, представляет собой каноническое DNS-имя маршрутизатора. Атрибут local-as указывает номер AS, которая владеет/управляет этим маршрутизатором.

Атрибут ifaddr использует синтаксис:

<ipv4-address> masklen <integer> [action <action>]

Адрес IP и размер маски обязательно задавать для каждого интерфейса. Дополнительно могут быть указаны значения action для установки других параметров интерфейса.

inet-rtr: Amsterdam.ripe.net
alias: amsterdam1.ripe.net
local-as: AS3333
ifaddr: 192.87.45.190 masklen 24
ifaddr: 192.87.4.28 masklen 24
ifaddr: 193.0.0.222 masklen 27
ifaddr: 193.0.0.158 masklen 27
peer: BGP4 192.87.45.195 asno(AS3334), flap_damp()

Рисунок 36 Объекты inet-rtr

На рисунке 36 приведен пример объекта inet-rtr. Имя маршрутизатора amsterdam.ripe.net, а каноническим именем для него является amsterdam1.ripe.net. Маршрутизатор подключен к 4 сетям. IP-адреса интерфейсов в эти сети и размеры масок указаны в атрибутах ifaddr.

Каждый атрибут peer (при его наличии) задает протокольное партнерство с другим маршрутизатором. Атрибут peer использует синтаксис:

<protocol> <ipv4-address> <options>
| <protocol> <inet-rtr-name> <options>
| <protocol> <rtr-set-name> <options>
| <protocol> <peering-set-name> <options>

где <protocol> — имя протокола, <ipv4-address> — адрес IP партнерского маршрутизатора, а <options> содержит список разделенных запятыми опций партнерства для протокола <protocol>. Взамен IP-адресов партнеров могут использоваться их имена inet-rtr-name. Возможные имена и атрибуты протоколов определены в словаре (см. раздел 7). В приведенном выше примере маршрутизатор имеет партнерские отношения BGP с маршрутизатором 192.87.45.195 в AS3334 и поддерживает подавление осцилляций при импорте маршрутов от этого партнера.

rtr-set: rtrs-ibgp-peers
members: 1.1.1.1, 2.2.2.2, 3.3.3.3
peering-set: prng-ebgp-peers
peering: AS3334 192.87.45.195
peering: AS3335 192.87.45.196
inet-rtr: Amsterdam.ripe.net
alias: amsterdam1.ripe.net
local-as: AS3333
ifaddr: 192.87.45.190 masklen 24
ifaddr: 192.87.4.28 masklen 24
ifaddr: 193.0.0.222 masklen 27
ifaddr: 193.0.0.158 masklen 27
peer: BGP4 rtrs-ibgp-peers asno(AS3333), flap_damp()
peer: BGP4 prng-ebgp-peers asno(PeerAS), flap_damp()

Рисунок 37 Объект inet-rtr с группой партнеров

Вместо одного партнера можно задать группу, используя формы <rtr-set-name> и <peering-set-name>. При использовании формы <peering-set-name> включаются только партнеры маршрутизатора из указанного набора. На рисунке 37 показан пример объекта inet-rtr с группой партнеров.

10 Расширение RPSL

Опыт использования предыдущих версий языка и форматов данных описания политики маршрутизации (PRDB [2], RIPE-81 [8], RIPE-181 [7]) показывает потребность в расширении RPSL. С учетом этого расширяемость была одной из основных целей при разработке RPSL. Новые протоколы маршрутизации или новые возможности существующих протоколов могут быть без значительных усилий адаптированы с использованием класса dictionary в языке RPSL. Можно также добавлять новые классы или новые атрибуты к имеющимся классам.

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

10.1 Расширение путем замены класса dictionary

Класс dictionary является основным механизмом возможного расширения RPSL. Объекты dictionary определяют атрибуты и типы политики маршрутизации, а также протоколы маршрутизации.

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

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

10.2 Расширение за счет добавления атрибутов существующих классов

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

Рекомендуется добавлять атрибуты к существующим классам при обнаружении новых аспектов данного класса. Например, класс route в RPSL является расширением своего предшественника из RIPE-181, обеспеченным за счет включения новых атрибутов, позволяющих задавать агрегированные и статические маршруты.

10.3 Расширение путем добавления классов

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

Перед добавлением класса следует получить ответ на вопрос — даст ли информация, содержащаяся в объектах этого класса, что-то новое и полезное по сравнению с существующими классами. Например, если в IRR нужно сохранить географическое положение маршрутизатора, можно добавить новый класс (скажем, router-location). Однако лучше будет сохранить эту информацию в классе inet-rtr, добавив к нему атрибут location.

10.4 Расширение путем изменения синтаксиса существующих атрибутов RPSL

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

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

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

Конкретные протоколы, используемые IRR для связи с объектами RPSL, выходят за пределы этого документа, но предполагается использование разных методов, от интерактивных протоколов «запрос-отклик» для сохранения объектов до протоколов пересылки (типа электронной почты и даже обычного телефона). Независимо от используемых в конкретной ситуации протоколов, предполагается наличие подходящих средств и методов защиты (таких, как IPSEC, TLS или PGP/MIME.

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

Авторы благодарят Jessica Yu, Randy Bush, Alan Barrett, Bill Manning, Sue Hares, Ramesh Govindan, Kannan Varadhan, Satish Kumar, Craig Labovitz, Rusty Eddy, David J. LeRoy, David Whipple, Jon Postel, Deborah Estrin, Elliot Schwartz, Joachim Schmitz, Mark Prior, Tony Przygienda, David Woodgate, Rob Coltun, Sanjay Wadhwa, Ardas Cilingiroglu, а также членов рабочей группы IETF RPS за их комментарии и предложения.

Литература

[1] Реестр маршрутизации Internet. Процедуры. http://www.ra.net/RADB.tools.docs/, http://www.ripe.net/db/doc.html.

[2] Nsfnet policy routing database (prdb). Maintained by MERIT Network Inc., Ann Arbor, Michigan. Contents available from nic.merit.edu.:/nsfnet/announced.networks/nets.tag.now by anonymous ftp8.

[3] Alaettinouglu, C., Bates, T., Gerich, E., Karrenberg, D., Meyer, D., Terpstra, M. and C. Villamizer, «Routing Policy Specification Language (RPSL)», RFC 2280, January 1998.

[4] C. Alaettinouglu, D. Meyer, and J. Schmitz. Application of routing policy specification language (rpsl) on the internet. Work in Progress9.

[5] T. Bates. Specifying an `internet router’ in the routing registry. Technical Report RIPE-12210, RIPE, RIPE NCC, Amsterdam, Netherlands, October 1994.

[6] T. Bates, E. Gerich, L. Joncheray, J-M. Jouanigot, D. Karrenberg, M. Terpstra, and J. Yu. Representation of ip routing policies in a routing registry. Technical Report ripe-18111, RIPE, RIPE NCC, Amsterdam, Netherlands, October 1994.

[7] Bates, T., Gerich, E., Joncheray, L., Jouanigot, J-M., Karrenberg, D., Terpstra, M. and J. Yu, «Representation of IP Routing Policies in a Routing Registry», RFC 1786, March 1995.

[8] T. Bates, J-M. Jouanigot, D. Karrenberg, P. Lothberg, and M. Terpstra. Representation of ip routing policies in the ripe database. Technical Report ripe-8112, RIPE, RIPE NCC, Amsterdam, Netherlands, February 1993.

[9] Chandra, R., Traina, P. and T. Li, «BGP Communities Attribute», RFC 1997, August 1996.

[10] Crocker, D., «Standard for ARPA Internet Text Messages», STD 11, RFC 822, August 1982.

[11] Fuller, V., Li, T., Yu, J. and K. Varadhan, «Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy», RFC 1519, September 1993.

[12] D. Karrenberg and T. Bates. Description of inter-as networks in the ripe routing registry. Technical Report RIPE-104, RIPE, RIPE NCC, Amsterdam, Netherlands, December 1993.

[13] D. Karrenberg and M. Terpstra. Authorisation and notification of changes in the ripe database. Technical Report ripe-120, RIPE, RIPE NCC, Amsterdam, Netherlands, October 1994.

[14] B. W. Kernighan and D. M. Ritchie. The C Programming Language. Prentice-Hall, 1978.

[15] A. Lord and M. Terpstra. Ripe database template for networks and persons. Technical Report ripe-119, RIPE, RIPE NCC, Amsterdam, Netherlands, October 1994.

[16] A. M. R. Magee. Ripe ncc database documentation. Technical Report RIPE-157, RIPE, RIPE NCC, Amsterdam, Netherlands, May 1997.

[17] Mockapetris, P., «Domain names — concepts and facilities», STD 13, RFC 1034, November 1987.

[18] Y. Rekhter. Inter-domain routing protocol (idrp). Journal of Internetworking Research and Experience, 4:61—80, 1993.

[19] Rekhter Y. and T. Li, «A Border Gateway Protocol 4 (BGP-4)», RFC 1771, March 1995.

[20] C. Villamizar, C. Alaettinouglu, D. Meyer, S. Murphy, and C. Orange, «Routing policy system security», Work in Progress14.

[21] Villamizar, C., Chandra, R. and R. Govindan, «BGP Route Flap Damping», RFC 2439, November 1998.

[22] J. Zsako, «PGP authentication for ripe database updates», Work in Progress15.

A Сайты с реестрами маршрутизации

В ноябре 1996 набор реестров маршрутизации включал RIPE, RADB, CANet, MCI и ANS. Для получения информации о действующих реестрах вы можете обратиться в один из указанных в списке.

B Правила грамматики

В этом разделе приведены формальные грамматические правила RPSL. Основные типы данных определены в разделе 2. Для атрибутов, значения которых относятся к базовым типам или содержат списки значений базовых типов, формальные правила грамматики здесь не определены. Приведенные правила описаны на входном языке GNU Bison. Следовательно, правила можно копировать и помещать в программы GNU Bison.

//**** Базовые атрибуты ************************************************
changed_attribute: ATTR_CHANGED TKN_EMAIL TKN_INT
//**** класс aut-num ***************************************************
//// as_expression /////////////////////////////////////////////////////
opt_as_expression:
| as_expression
as_expression: as_expression OP_OR as_expression_term
| as_expression_term
as_expression_term: as_expression_term OP_AND as_expression_factor
| as_expression_term KEYW_EXCEPT as_expression_factor
| as_expression_factor
as_expression_factor: '(' as_expression ')'
| as_expression_operand
as_expression_operand: TKN_ASNO
| TKN_ASNAME
//// router_expression /////////////////////////////////////////////////
opt_router_expression:
| router_expression
opt_router_expression_with_at:
| KEYW_AT router_expression
router_expression: router_expression OP_OR router_expression_term
| router_expression_term
router_expression_term: router_expression_term OP_AND
router_expression_factor
| router_expression_term KEYW_EXCEPT router_expression_factor
| router_expression_factor
router_expression_factor: '(' router_expression ')'
| router_expression_operand
router_expression_operand: TKN_IPV4
| TKN_DNS
| TKN_RTRSNAME
//// партнерство ///////////////////////////////////////////////////////
peering: as_expression opt_router_expression opt_router_expression_with_at
| TKN_PRNGNAME
//// действие //////////////////////////////////////////////////////////
opt_action:
| KEYW_ACTION action
action: single_action
| action single_action
single_action: TKN_RP_ATTR '.' TKN_WORD '(' generic_list ')' ';'
| TKN_RP_ATTR TKN_OPERATOR list_item ';'
| TKN_RP_ATTR '(' generic_list ')' ';'
| TKN_RP_ATTR '[' generic_list ']' ';'
| ';'
//// фильтр ////////////////////////////////////////////////////////////
filter: filter OP_OR filter_term
| filter filter_term %prec OP_OR
| filter_term
filter_term : filter_term OP_AND filter_factor
| filter_factor
filter_factor : OP_NOT filter_factor
| '(' filter ')'
| filter_operand
filter_operand: KEYW_ANY
| '<' filter_aspath '>'
| filter_rp_attribute
| TKN_FLTRNAME
| filter_prefix
filter_prefix: filter_prefix_operand OP_MS
| filter_prefix_operand
filter_prefix_operand: TKN_ASNO
| KEYW_PEERAS
| TKN_ASNAME
| TKN_RSNAME
| '{' opt_filter_prefix_list '}'
opt_filter_prefix_list:
| filter_prefix_list
filter_prefix_list: filter_prefix_list_prefix
| filter_prefix_list ',' filter_prefix_list_prefix
filter_prefix_list_prefix: TKN_PRFXV4
| TKN_PRFXV4RNG
filter_aspath: filter_aspath '|' filter_aspath_term
| filter_aspath_term
filter_aspath_term: filter_aspath_term filter_aspath_closure
| filter_aspath_closure
filter_aspath_closure: filter_aspath_closure '*'
| filter_aspath_closure '?'
| filter_aspath_closure '+'
| filter_aspath_factor
filter_aspath_factor: '^'
| '$'
| '(' filter_aspath ')'
| filter_aspath_no
filter_aspath_no: TKN_ASNO
| KEYW_PEERAS
| TKN_ASNAME
| '.'
| '[' filter_aspath_range ']'
| '[' '^' filter_aspath_range ']'
filter_aspath_range:
| filter_aspath_range TKN_ASNO
| filter_aspath_range KEYW_PEERAS
| filter_aspath_range '.'
| filter_aspath_range TKN_ASNO '-' TKN_ASNO
| filter_aspath_range TKN_ASNAME
filter_rp_attribute: TKN_RP_ATTR '.' TKN_WORD '(' generic_list ')'
| TKN_RP_ATTR TKN_OPERATOR list_item
| TKN_RP_ATTR '(' generic_list ')'
| TKN_RP_ATTR '[' generic_list ']'
//// пара «партнерство - действие» /////////////////////////////////////
import_peering_action_list: KEYW_FROM peering opt_action
| import_peering_action_list KEYW_FROM peering opt_action
export_peering_action_list: KEYW_TO peering opt_action
| export_peering_action_list KEYW_TO peering opt_action
//// фактор import/export //////////////////////////////////////////////
import_factor: import_peering_action_list KEYW_ACCEPT filter
import_factor_list: import_factor ';'
| import_factor_list import_factor ';'
export_factor: export_peering_action_list KEYW_ANNOUNCE filter
export_factor_list: export_factor ';'
| export_factor_list export_factor ';'
//// элемент import/export /////////////////////////////////////////////
import_term: import_factor ';'
| '{' import_factor_list '}'
export_term: export_factor ';'
| '{' export_factor_list '}'
//// выражение import/export ////////////////////////////////////////////
import_expression: import_term
| import_term KEYW_REFINE import_expression
| import_term KEYW_EXCEPT import_expression
export_expression: export_term
| export_term KEYW_REFINE export_expression
| export_term KEYW_EXCEPT export_expression
//// протокол ///////////////////////////////////////////////////////////
opt_protocol_from:
| KEYW_PROTOCOL tkn_word
opt_protocol_into:
| KEYW_INTO tkn_word
//**** атрибуты import/export *******************************************
import_attribute: ATTR_IMPORT
| ATTR_IMPORT opt_protocol_from opt_protocol_into import_factor
export_attribute: ATTR_EXPORT
| ATTR_EXPORT opt_protocol_from opt_protocol_into export_factor
opt_default_filter:
| KEYW_NETWORKS filter
default_attribute: ATTR_DEFAULT KEYW_TO peering
filter_attribute: ATTR_FILTER filter
peering_attribute: ATTR_PEERING peering
//**** класс inet-rtr **************************************************
ifaddr_attribute: ATTR_IFADDR TKN_IPV4 KEYW_MASKLEN TKN_INT opt_action
//// атрибут peer //////////////////////////////////////////////////////
opt_peer_options:
| peer_options
peer_options: peer_option
| peer_options ',' peer_option
peer_option: tkn_word '(' generic_list ')'
peer_id: TKN_IPV4
| TKN_DNS
| TKN_RTRSNAME
| TKN_PRNGNAME
peer_attribute: ATTR_PEER tkn_word peer_id opt_peer_options
//**** класс route *****************************************************
aggr_bndry_attribute: ATTR_AGGR_BNDRY as_expression
aggr_mtd_attribute: ATTR_AGGR_MTD KEYW_INBOUND
| ATTR_AGGR_MTD KEYW_OUTBOUND opt_as_expression
//// атрибут inject ////////////////////////////////////////////////////
opt_inject_expression:
| KEYW_UPON inject_expression
inject_expression: inject_expression OP_OR inject_expression_term
| inject_expression_term
inject_expression_term: inject_expression_term OP_AND
inject_expression_factor
| inject_expression_factor
inject_expression_factor: '(' inject_expression ')'
| inject_expression_operand
inject_expression_operand: KEYW_STATIC
| KEYW_HAVE_COMPONENTS '{' opt_filter_prefix_list '}'
| KEYW_EXCLUDE '{' opt_filter_prefix_list '}'
inject_attribute: ATTR_INJECT opt_router_expression_with_at opt_action
opt_inject_expression
//// атрибут components ////////////////////////////////////////////////
opt_atomic:
| KEYW_ATOMIC
components_list:
| filter
| components_list KEYW_PROTOCOL tkn_word filter
components_attribute: ATTR_COMPONENTS opt_atomic components_list
//**** route-set *******************************************************
opt_rs_members_list: /* empty list */
| rs_members_list
rs_members_list: rs_member
| rs_members_list ',' rs_member
rs_member: TKN_ASNO
| TKN_ASNO OP_MS
| TKN_ASNAME
| TKN_ASNAME OP_MS
| TKN_RSNAME
| TKN_RSNAME OP_MS
| TKN_PRFXV4
| TKN_PRFXV4RNG
rs_members_attribute: ATTR_RS_MEMBERS opt_rs_members_list
//**** dictionary ******************************************************
rpattr_attribute: ATTR_RP_ATTR TKN_WORD methods
| ATTR_RP_ATTR TKN_RP_ATTR methods
methods: method
| methods method
method: TKN_WORD '(' ')'
| TKN_WORD '(' typedef_type_list ')'
| TKN_WORD '(' typedef_type_list ',' TKN_3DOTS ')'
| KEYW_OPERATOR TKN_OPERATOR '(' typedef_type_list ')'
| KEYW_OPERATOR TKN_OPERATOR '(' typedef_type_list ',' TKN_3DOTS ')'
//// атрибут typedef //////////////////////////////////////////////////
typedef_attribute: ATTR_TYPEDEF TKN_WORD typedef_type
typedef_type_list: typedef_type
| typedef_type_list ',' typedef_type
typedef_type: KEYW_UNION typedef_type_list
| KEYW_RANGE KEYW_OF typedef_type
| TKN_WORD
| TKN_WORD '[' TKN_INT ',' TKN_INT ']'
| TKN_WORD '[' TKN_REAL ',' TKN_REAL ']'
| TKN_WORD '[' enum_list ']'
| KEYW_LIST '[' TKN_INT ':' TKN_INT ']' KEYW_OF typedef_type
| KEYW_LIST KEYW_OF typedef_type
enum_list: tkn_word
| enum_list ',' tkn_word
//// атрибут protocol //////////////////////////////////////////////////
protocol_attribute: ATTR_PROTOCOL tkn_word protocol_options
protocol_options:
| protocol_options protocol_option
protocol_option: KEYW_MANDATORY method
| KEYW_OPTIONAL method
//**** определения маркеров ********************************************
//// макросы flex, используемые в определениях /////////////////////////
INT [[:digit:]]+
SINT [+-]?{INT}
REAL [+-]?{INT}?\.{INT}({WS}*E{WS}*[+-]?{INT})?
NAME [[:alpha:]]([[:alnum:]_-]*[[:alnum:]])?
ASNO AS{INT}
ASNAME AS-[[:alnum:]_-]*[[:alnum:]]
RSNAME RS-[[:alnum:]_-]*[[:alnum:]]
RTRSNAME RTRS-[[:alnum:]_-]*[[:alnum:]]
PRNGNAME PRNG-[[:alnum:]_-]*[[:alnum:]]
FLTRNAME FLTR-[[:alnum:]_-]*[[:alnum:]]
IPV4 [0-9]+(\.[0-9]+){3,3}
PRFXV4 {IPV4}\/[0-9]+
PRFXV4RNG {PRFXV4}("^+"|"^-"|"^"{INT}|"^"{INT}-{INT})
ENAMECHAR [^()<>,;:\\\"\.[\] \t\r]
ENAME ({ENAMECHAR}+(\.{ENAMECHAR}+)*\.?)|(\"[^\"@\\\r\n]+\")
DNAME [[:alnum:]_-]+
//// определения маркеров /////////////////////////////////////////////
TKN_INT {SINT}
TKN_INT {INT}:{INT} если каждое значение {INT} содержит 2 октета
TKN_INT {INT}.{INT}.{INT}.{INT} если каждое значение {INT} содержит 1 октет
TKN_REAL {REAL}
TKN_STRING Как в языке программирования C
TKN_IPV4 {IPV4}
TKN_PRFXV4 {PRFXV4}
TKN_PRFXV4RNG {PRFXV4RNG}
TKN_ASNO {ASNO}
TKN_ASNAME (({ASNO}|peeras|{ASNAME}):)*{ASNAME}\
(:({ASNO}|peeras|{ASNAME}))*
TKN_RSNAME (({ASNO}|peeras|{RSNAME}):)*{RSNAME}\
(:({ASNO}|peeras|{RSNAME}))*
TKN_RTRSNAME (({ASNO}|peeras|{RTRSNAME}):)*{RTRSNAME}\
(:({ASNO}|peeras|{RTRSNAME}))*
TKN_PRNGNAME (({ASNO}|peeras|{PRNGNAME}):)*{PRNGNAME}\
(:({ASNO}|peeras|{PRNGNAME}))*
TKN_FLTRNAME (({ASNO}|peeras|{FLTRNAME}):)*{FLTRNAME}\
(:({ASNO}|peeras|{FLTRNAME}))*
TKN_BOOLEAN true|false
TKN_RP_ATTR {NAME} если определено в словаре
TKN_WORD {NAME}
TKN_DNS {DNAME}("."{DNAME})+
TKN_EMAIL {ENAME}@({DNAME}("."{DNAME})+|{IPV4})

C Отличия от RFC 2280

RFC 2280 [3] содержит предыдущую версию языка RPSL. В этом приложении перечислены основные отличия современной версии от прежней.

  • В новой версии можно задавать целые числа в форме 1-октетных целочисленных значений, разделенных точками (например, 1.1.1.1) или двух 2-октетных целочисленных значений, разделенных двоеточием (например, 3561:70). См. раздел 2.
  • Определение диапазона адресных префиксов расширено так, что префикс можно рассматривать, как вырожденный диапазон (см. раздел 2).
  • Определена семантика оператора диапазона, применимая к множеству, содержащему диапазон адресных префиксов (например, {30.0.0.0/8^24-28}^27-30). См. раздел 2.
  • Все даты указываются в формате UTC (см. раздел 2).
  • Добавлен знак сложения (+) к символам пробела и табуляции для обеспечения возможности записи значения атрибута в несколько строк (например, каждая новая строка может начинаться с пробела, символа табуляции или знака +). См. раздел 2.
  • Из языка удален атрибут withdrawn (отзыв) класса route.
  • Добавлен класс filter-set (см. параграф 5.4).
  • Добавлен класс rtr-set (см. параграф 5.5).
  • Добавлен класс peering-set (см. параграф 5.6).
  • Фильтры можно указывать по именам filter-set (см. параграф 5.4).
  • Партнерство можно задавать по именам peering-set и rtr-set. Как локальный, так и удаленный маршрутизаторы-партнеры можно задать с использованием выражений router (см. параграф 5.6).
  • Атрибут peer класса inet-rtr можно указывать по именам peering-set и rtr-set (см. раздел 9).
  • Изменены синтаксис и сементика типов union и list, а также атрибута typedef (см. раздел 7).
  • В исходном словаре изменен атрибут typedef, определяющий community_elm и rp-attribute в определении атрибута community (см. раздел 7).
  • Добавлены рекомендации по расширению RPSL (см. раздел 10).
  • Добавлены формальные парвила грамматики (см. Приложение B).

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

Cengiz Alaettinoglu

USC/Information Sciences Institute

EMail: cengiz@isi.edu

Curtis Villamizar

Avici Systems

EMail: curtis@avici.com

Elise Gerich

At Home Network

EMail: epg@home.net

David Kessens

Qwest Communications

EMail: David.Kessens@qwest.net

David Meyer

University of Oregon

EMail: meyer@antc.uoregon.edu

Tony Bates

Cisco Systems, Inc.

EMail: tbates@cisco.com

Daniel Karrenberg

RIPE NCC

EMail: dfk@ripe.net

Marten Terpstra

c/o Bay Networks, Inc.

EMail: marten@BayNetworks.com


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

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

nmalykh@gmail.com

 

Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

1Routing Policy Specification Language.

2Autonomous System.

3Internet Routing Registry.

4Их называют также междоменными маршрутами (interdomain route)

5Border Gateway Protocol.

6Inter-Domain Routing Protocol.

7Порядок спецификаций.

8В настоящее время недоступна. Прим. перев.

9Работа была опубликована в RFC 2650. Прим. перев.

10Доступен по ссылке ftp://ftp.ripe.net/ripe/docs/ripe-122.txt. Прим. перев.

11Доступен по ссылке http://www.ripe.net/ripe/docs/ripe-181 в формате ASCII и PDF. Прим. перев.

12Доступен по ссылке ftp://ftp.ripe.net/ripe/docs/ripe-081.txt. Прим. перев.

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

15Работа была опубликована в RFC 2726. Прим. перев.

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

RFC 2598 An Expedited Forwarding PHB

Network Working Group                                    V. Jacobson
Request for Comments: 2598                                K. Nichols
Category: Standards Track                              Cisco Systems
                                                           K. Poduri
                                                        Bay Networks
                                                           June 1999

PHB для ускоренной пересылки

An Expedited Forwarding PHB

PDF

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

В этом документе содержится проект стандартного протокола, предложенного сообществу Internet. Документ служит приглашением к дискуссии в целях развития и совершенствования протокола. Текущее состояние стандартизации протокола вы можете узнать из документа «Internet Official Protocol Standards» (STD 1). Документ может распространяться без ограничений.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

Аннотация

Определение поэтапного режима пересылки (PHB1) является важнейшей частью работы группы Diffserv. В этом документе описан PHB для ускоренной пересылки (EF2). Мы покажем общность этого PHB демонстрацией возможности его реализации с использованием разных механизмов и дадим пример использования для создания по крайней мере одного сервиса — VLL3. Приведен код, рекомендуемый для этого PHB.

Документ в формате pdf (на английском языке) доступен по ссылке ftp://ftp.ee.lbl.gov/papers/ef_phb.pdf

1. Введение

Сетевые узлы, поддерживающие дифференцированное обслуживание для IP, используют код в заголовке IP для выбора поэтапного поведения (PHB), как специфического режима режима пересылки данного пакета [RFC2474, RFC2475]. В этом документе описан PHB для ускоренной пересылки (EF). EF PHB может использоваться для построения услуг с малыми задержками и их вариациями, а также с незначительной потерей пакетов в сквозном режиме через домены DS. Со стороны конечных точек такой сервис выглядит подобно соединению «точка-точка» или «виртуальной арендованной линии». Этот вид сервиса был также описан, как «надежное обслуживание» (Premium service) в [2BIT]. Потери, задержки и их вариации возникают при размещении трафика в очередях на пути через сеть. Следовательно, обеспечения малых потерь, задержек и их вариаций для некого агрегата трафика означает, что этот трафик не простаивает в очередях или находится там очень короткое время. Очереди возникают, когда скорость поступления трафика на узле (кратковременно) превышает скорость его дальнейшей отправки. Таким образом, сервис, который гарантирует отсутствие очередей для некого агрегата, эквивалентен такому ограничению скорости, при котором на каждом транзитном узле максимальная скорость прибытия пакетов данного агрегата будет меньше минимальной скорости их дальнейшей отправки.

Создание такого сервиса включает две части:

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

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

EF PHB обеспечивает первую часть сервиса. Для обеспечения второй части служат кондиционеры трафика на границе сети, описанные в [RFC2475].

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

В следующих параграфах приведено подробное описание EF PHB и даны примеры возможных реализаций. Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), следует (SHOULD), не следует (SHOULD NOT), возможно (MAY), в данном документе должны интерпретироваться в соответствии с [Bradner97].

2. Описание поэтапного режима ускоренной пересылки

EF PHB определяется, как трактовка пересылки для отдельного агрегата diffserv4, при которой скорость отправки пакетов данного агрегата с любого узла diffserv не меньше заданного значения. Следует обеспечивать гарантию заданной скорости отправки независимо от интенсивности остального трафика, пытающегося проходить через узел. Следует обеспечивать среднее значение скорости5 отправки не менее заданного значения (поведение в течение более коротких интервалов не задается осознанно). Заданное минимальное значение скорости должно быть настраиваемым сетевым администратором (с использованием любого, поддерживаемого узлом, механизма).

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

В Приложении описано возможное применение данного PHB для организации сквозного сервиса.

2.2 Примеры механизмов для реализации EF PHB

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

Можно также использовать одну очередь из группы очередей, обслуживаемых планировщиком со взвешенным круговым обходом, где часть выходной полосы, отдаваемая для очереди EF, эквивалентна заданной скорости. Это можно реализовать, к примеру, с использованием одного PHB или совместимого с селекторами классов набора PHB [RFC2474].

Другой возможной реализацией является планировщик CBQ [CBQ], который отдает очереди EF приоритет вплоть до заданной скорости.

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

2.3 Рекомендуемый код для данного PHB

Для EF PHB рекомендуется код 101110.

2.4 Изменяемость

Пакеты, маркированные для EF PHB, могут быть перемаркированы на границе домена DS только с использованием других кодов, удовлетворяющих EF PHB. Пакеты, маркированные для EF PHB, домену DS не следует перемещать (поднимать или опускать) в другие PHB.

2.5 Туннелирование

При туннелировании пакетов EF туннелирующие пакеты должны маркироваться, как EF.

2.6 Взаимодействие с другими PHB

При выполнении требований параграфа 2.1 на узле или в домене DS могут развертываться другие PHB или группы PHB.

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

Для защиты себя от атак на отказ служб (DoS6) периметр домена DS должен строго проверять для всех пакетов с маркировкой EF соответствие скорости согласованному со смежным восходящим доменом значению (скорость должна быть не больше значения, заданного для EF PHB). Пакеты, вызывающие превышение согласованной скорости должны отбрасываться. Если смежные домены не согласовали скорость EF, нисходящий домен должен использовать нулевое значение скорости (т. е., отбрасывать все пакеты с маркировкой EF)7.

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

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

В этом документе выделяется один код 101110 из пула 1 (Pool 1) пространства кодов, определенного в [RFC2474].

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

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

[RFC2474] Nichols, K., Blake, S., Baker, F. and D. Black, «Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers», RFC 2474, December 1998.

[RFC2475] Black, D., Blake, S., Carlson, M., Davies, E., Wang, Z. and W. Weiss, «An Architecture for Differentiated Services», RFC 2475, December 1998.

[2BIT] K. Nichols, V. Jacobson, and L. Zhang, «A Two-bit Differentiated Services Architecture for the Internet», Work in Progress8, ftp://ftp.ee.lbl.gov/papers/dsarch.pdf

[CBQ] S. Floyd and V. Jacobson, «Link-sharing and Resource Management Models for Packet Networks», IEEE/ACM Transactions on Networking, Vol. 3 no. 4, pp. 365-386, August 1995.

[RFC2415] Poduri, K. and K. Nichols, «Simulation Studies of Increased Initial TCP Window Size», RFC 2415, September 1998.

[LCN] K. Nichols, «Improving Network Simulation with Feedback», Proceedings of LCN ’98, October 1998.

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

Van Jacobson

Cisco Systems, Inc

170 W. Tasman Drive

San Jose, CA 95134-1706

EMail: van@cisco.com

Kathleen Nichols

Cisco Systems, Inc

170 W. Tasman Drive

San Jose, CA 95134-1706

EMail: kmn@cisco.com

Kedarnath Poduri

Bay Networks, Inc.

4401 Great America Parkway

Santa Clara, CA 95052-8185

EMail: kpoduri@baynetworks.com

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

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

nmalykh@gmail.com

Приложение A: Пример использования и опыт работы с EF PHB

A.1 Услуги VLL

Услуги VLL, называемые также приоритетным обслуживанием (Premium service) [2BIT] характеризуются пиковой полосой пропускания.

A.2 Опыт использования в ESNET

Прототип услуг VLL был развернут в опорной сети DOE ESNet с использованием очередей со взвешенным круговым обходом на базе маршрутизаторов Cisco серии 75xx для реализации EF PHB. Первые тесты были весьма успешными и продолжается работа по выводу сервиса на коммерческую эксплуатацию (см. ftp://ftp.ee.lbl.gov/talks/vj-doeqos.pdf и ftp://ftp.ee.lbl.gov/talks/vj-i2qos-may98.pdf).

A.3 Результаты моделирования

A.3.1 Вариации задержки

В параграфе 2.2 было отмечено, что для реализации EF PHB может использоваться множество механизмов. Простейшим вариантом является PQ9, где скорость поступления пакетов в очередь строго меньше скорости услуги10. Поскольку задержки в очередях на пути доставки приводят к вариациям скорости, особенностью данного варианта является то, что микропотоки с маркировкой EF будут сталкиваться с незначительными вариациями скорости обслуживания. EF PHB не содержит явных требований к вариациям, но из определения ясно, что ожидаемые вариации для потока пакетов сервиса на основе EF PHB при использовании PQ будут меньше, нежели при обычной доставке11. Были проведены эксперименты на макете для сравнения взвешенных очередей с циклической обработкой (WRR12) и PQ в плане вариаций. Эти два варианта были выбраны потому, что они представляют худший и лучший13 случай, соответственно, в плане возникновения вариаций и мы хотели предоставить разработчикам EF некие рекомендации по использованию WRR или аналогичных механизмов.

Рисунок 1.

Экспериментальная сеть представляла собой модифицированный вариант стенда ns-2, описанного в [RFC2415] и [LCN]. Модули CBQ из состава ns-2 использовались в качестве базы для реализации приоритетной очереди м WRR. Топология модели включала шесть интервалов маршрутизации (hop) с уменьшающейся пропускной способностью в направлении одного узкого канала 1,5 Мбит/с (см. рисунок 6). Отправители передают пакеты с маркировкой EF со средней скоростью, равной скорости услуги для них. Пакеты генерируются с разбросом ±10% в межпакетных интервалах относительно номинального значения для скорости услуги. Потоки отдельных источников объединялись в агрегат со скоростью 30% от полосы самого узкого канала (450 кбит/с). Для заполнения канала использовалась смесь пакетов FTP и HTTP. Каждый из источников пакетов EF генерировал пакеты одного размера 160 или 1500 байтов.

Хотя статистика представлена для потоков с одним размером пакетов, во всех экспериментах использовалась смесь коротких и длинных пакетов EF, поэтому очереди EF включали пакетов обоих размеров.

Рисунок 2.

Определим вариации (jitter) как абсолютное значение разности между интервалами от поступления до отправки двух смежных пакетов (|(aj-dj) — (ai-di)|14). Для целевого потока в каждом эксперименте записывались значения вариаций для 50 и 90% пакетов, выраженные в процентах от скорости услуги EF, представленные в таблицах. Документ в формате pdf содержит также графики для вариаций.

Таблица 1: Зависимость вариаций от числа потоков EF

1500 байтов

160 байтов

Число потоков EF

50%

90%

50%

90%

PQ (24)

1

5

17

43

2

11

47

96

513

4

12

35

100

278

8

10

25

96

126

24

18

47

96

143

В экспериментах сравнивались вариации для реализаций EF PHB на основе WRR и PQ. Оценивалось влияние различного выбора веса очередей WRR и числа очередей на вариации. Для WRR определено отношение скоростей обработка/прибытие как отношение скорости обслуживания для очереди EF (или минимальный расход очереди выходного канала) к пиковой скорости прибытия в очередь пакетов с маркировкой EF. Результат не будет стабильным, если вес WRR выбран для точного балансирования скоростей прибытия и отправки, поэтому используется минимальное отношение обслуживание/прибытие 1,03. В проведенных экспериментах это означает, что очередь EF получает не менее 31% выходных каналов. В экспериментах с WRR канал заполнялся до конца другим трафиком, как описано выше, с разделением трафика без маркировки EF между очередями, не относящимися к EF (из описания эксперимента должно быть ясно, что была предпринята попытка внести наибольшие вариации и не делается предположений, что такие установки и трафик отражают нормальную ситуацию).

Таблица 2: Зависимость вариаций от отношения скорости обработки и прибытия.

WRR

1500 байтов

160 байтов

Обработка/прибытие

50%

90%

50%

90%

PQ

1

3

17

43

1.03

14

27

100

178

1.30

7

21

65

113

1.50

5

13

57

104

1.70

5

13

57

100

2.00

5

13

57

104

3.00

5

13

57

100

В первой серии экспериментов использовалось минимальное отношение скоростей обслуживания/прибытия 1,06 и менялось число отдельных микропотоков, составляющих агрегат EF, от 2 до 36. Проведено сравнение полученных данных с результатами для PQ при 24 потоках. Сначала проверялся микропоток 1500-байтовых пакетов, передаваемых со скоростью услуги 56 кбит/с, а затем эксперимент повторялся для пакетов размером 160 байтов. Таблица 1 показывает значения вариаций для 50 и 90% пакетов (в процентах от времени передачи пакета при скорости услуги). Рисунок 1 показывает график для потока пакетов размером 1500 байтов, а рисунок 2 — для пакетов размером 160 байтов. Отметим, что «время пакета» размером 1500 байтов при скорости 56 кбит/с составляет 214 мсек, а для пакета в 160 байтов — 23 мсек. Вариации для больших пакетов редко превышают половину времени передачи пакета, хотя для мелких пакетов в большинстве случаев вариации не меньше времени передачи одного пакета. Следует принимать во внимание, что агрегат EF представляет собой смесь больших и мелких пакетов, поэтому короткие пакеты могут ожидать обработки длинных пакетов в очереди EF. PQ обеспечивает существенно меньшие вариации.

Рисунок 3. Вариации задержки для 8 потоков EF с пакетами по 1500 байтов

Далее исследовалось влияние роста отношения скоростей обслуживание/прибытие. Такой рост означает сокращение времени пребывания пакетов EF в очереди при сохранении полосы, доступной для других очередей. В этих экспериментах число потоков в агрегате EF было равно восьми, а общее число очередей — 5 (4 очереди для потоков без EF). Таблица 2 показывает результаты для потоков с размером пакетов 1500 и 160 байтов. Рисунок 3 показывает графики для пакетов размером 1500 байтов, а рисунок 4 для пакетов размером 160 байтов. Повышение производительности наблюдается до отношения обработка/прибытие равного 1,5. Отметим, что большие значения отношения скоростей обработки/прибытия не дают такой же производительности, как PQ, но в этом случае для 90% пакетов вариации не превышают время доставки даже для мелких пакетов.

Рисунок 4. Вариации задержки для 8 потоков EF с пакетами по 160 байтов

Таблица 3: Зависимость вариаций от числа очередей на выходном интерфейсе

1500 байтов

Число потоков EF

50%

90%

PQ (8)

1

3

2

7

21

4

7

21

6

8

22

8

10

23

Увеличение числа очередей на выходных интерфейсах может привести к росту вариаций времени обслуживания для пакетов EF, поэтому были проведены эксперименты с разным числом очередей на каждом выходном порту. Число потоков в агрегате было равно 8 и использовалось минимальное отношение скоростей обработки/прибытия 1,03. Результаты показаны на рисунке 5 и в таблице 3. Рисунок 5 включает также график для PQ с 8 потоками.

Рисунок 5. Вариации задержки при множестве очередей (8 потоков EF с пакетами по 1500 байтов)


Видно, что в большинстве случаев вариации для WRR достаточно малы и могут быть дополнительно снижены выбором корректного соотношения между полосой очереди WRR на выходном канале и скоростью сервиса EF. Как было отмечено, WRR представляет собой худший случай, а PQ — лучший. Другие возможности включают WFQ или CBQ с фиксированным пределом скорости для очереди EF и предоставлением этой очереди приоритета по сравнению с другими очередями. Мы предполагаем, что это обеспечит производительность, близкую к PQ, хотя для проверки этого утверждения потребуются дополнительные эксперименты. Мы пока не исследовали систематически влияние числа интервалов маршрутизации, выделения для EF другой (не 30%) доли полосы канала и более сложной топологии. Приведенная здесь информация не является частью спецификации EF PHB и дана просто в качестве рекомендаций для разработчиков.

A.3.2 Сервис VLL

Таблица 4: Производительность FTP с использованием сервиса VLL

Средняя скорость доставки (кбит/с)

Доля канала для EF (%)

Услуга

Арендованная линия

VLL

20

100

90

90

40

150

143

143

60

225

213

215

Мы использовали имитацию для проверки организации сервиса VLL на основе EF PHB. Проверялось сходство такого сервиса с арендованной линией, имеющей идентичную скорость. В этом эксперименте ни один пакет EF не был отброшен в сети и всегда достигалась нужная скорость для источников CBR15. Однако мы хотели увидеть, будет ли VLL вести себя «подобно проводам» для использующего сервис трафика TCP. Поэтому использовались долговременные соединения FTP на базе сервиса VLL. Таблица 4 показывает долю каждого канала, отданную для трафика EF (на каналах с меньшим числом микропотоков EF полоса была уже), скорость услуги VLL, средняя скорость для однотипной пары отправитель получатель, подключенной к полнодуплексному выделенному каналу со скоростью услуги и средняя скорость потоков VLL для каждого теста. Потери пакетов происходили только во входном буфере формовщика, но не в сети. Максимальная скорость не была достигнута в силу особенностей протокола TCP.

Рисунок 6. Топология модели.


Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечивается Internet Society.

1Per-hop forwarding behavior — поэтапный режим пересылки.

2Expedited Forwarding.

3Virtual Leased Line — виртуальная арендованная (выделенная) линия.

4Differentiated Service — дифференцированное обслуживание. Прим. перев.

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

6Denial of service attack.

7См. обсуждение в разделе 6 RFC 3260. Прим. перев.

8Работа завершена и опубликована в RFC 2638. Прим. перев.

9Priority queue — очередь с приоритетом.

10Subscribed rate.

11Best-effort delivery — доставка по мере возможности.

12Weighted round-robin.

13В оригинале ошибочно указано наоборот. Прим. перев.

14a – время прибытия, d – время отправки пакетов. Прим. перев.

15Committed Bit Rate – согласованная скорость. Прим. перев.

 

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

RFC 2631 Diffie-Hellman Key Agreement Method

Network Working Group                                       E. Rescorla
Request for Comments: 2631                                    RTFM Inc.
Category: Standards Track                                     June 1999

Метод согласования ключей Diffie-Hellman

Diffie-Hellman Key Agreement Method

PDF

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

Этот документ содержит спецификацию протокола Internet, предлагаемого сообществу Internet в качестве стандартного, и служит приглашением к дискуссии в целях совершенствования протокола. Текущее состояние стандартизации и статус протокола можно узнать из документа Internet Official Protocol Standards (STD 1). Документ может распространяться свободно.

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

Copyright (C) The Internet Society (1999). All Rights Reserved.

Аннотация

Этот документ стандартизует один из вариантов метода Диффи-Хеллмана (Diffie-Hellman или DH), основанный на предварительном стандарте ANSI X9.42, разработанном группой ANSI X9F1. Метод DH представляет собой алгоритм согласования ключей, используемых двумя сторонами для согласования общего секрета. Обеспечивается также алгоритм преобразования общего секрета в произвольный объем ключевого материала. Полученный в результате ключевой материал применяется в качестве симметричного ключа шифрования. Описанный здесь вариант DH требует наличия сертификата у получателя, а отправитель может пользоваться статической (открытый ключ помещается в сертификат) или эфемерной парой ключей.

Оглавление

Исключено в версии HTML.

1. Введение

В работе [DH76] Диффи (Diffie) и Хеллман (Hellman) описали метод, с помощью которого две стороны могут согласовать общий секрет, недоступный для перехвата. Этот секрет можно преобразовать в криптографический ключевой материал для других (симметричных) алгоритмов. Существует множество слегка различающихся вариантов этого метода. Данный документ описывает вариант, основанный на спецификации ANSI X9.42.

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

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

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

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

2.1. Согласование ключей

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

2.1.1. Генерация ZZ

X9.42 определяет, что общий секрет ZZ генерируется по формуле

     ZZ = g ^ (xb * xa) mod p

Отметим, что стороны выполняют на практике несколько отличающиеся расчеты с одинаковыми результатами

     ZZ = (yb ^ xa)  mod p = (ya ^ xb)  mod p

где ^ означает возведение в степень,

ya — открытый ключ стороны a и

     ya = g ^ xa mod p

yb — открытый ключ стороны b и

     yb = g ^ xb mod p

xa — секретный ключ стороны a

xb — секретный ключ стороны b

p — большое простое число

q — большое простое число

     g = h^{(p-1)/q} mod p

где

h — любое целое число 1 < h < p-1, такое что

          h{(p-1)/q} mod p > 1

(g имеет порядок q mod p; т. е., g^q mod p = 1, если g != 1)

j — большое простое число, такое что p = qj + 1

(см. параграф 2.2, где описаны критерии для ключей и параметров).

В [CMS] ключ получателя идентифицируется с помощью CMS RecipientIdentifier, указывающего сертификат получателя. Открытый ключ отправителя идентифицируется полем OriginatorIdentifierOrKey, которое указывает сертификат получателя или просто включает его открытый ключ.

2.1.2. Генерация ключевого материала

X9.42 определяет алгоритм генерации произвольного объема ключевого материала из ZZ. Здесь предлагается другой алгоритм, основанный на X9.42, но добавляющий отдельные необязательные поля и опускающий некоторые поля X9.42.

     KM = H ( ZZ || OtherInfo)

H представляет собой функцию хеширования сообщений SHA-1 [FIPS-180], а ZZ — общий секрет, рассчитанный в соответствии с параграфом 2.1.1. Ведущие нули ZZ сохраняются, поэтому размер ZZ в октетах совпадает с размером p. Например, если p имеет 1024 бита, размер ZZ будет равен 128 байтам. Значение OtherInfo является DER-представлением приведенной ниже структуры.

     OtherInfo ::= SEQUENCE {
       keyInfo KeySpecificInfo,
       partyAInfo [0] OCTET STRING OPTIONAL,
       suppPubInfo [2] OCTET STRING
     }

     KeySpecificInfo ::= SEQUENCE {
       algorithm OBJECT IDENTIFIER,
       counter OCTET STRING SIZE (4..4) }

Отметим, что в этих определениях ASN.1 используются явные теги (в ASN.1 используется явное тегирование, если явно не задано неявное).

algorithm

Идентификатор объекта ASN.1 (OID) для алгоритма CEK, с которым данный ключ KEK будет использоваться. Отметим, что это не AlgorithmIdentifier, а просто идентификатор объекта. Параметры не используются.

counter

32-битовое целое число с сетевым порядком байтов. Начальное значение счетчика равно 1 для любого ZZ (шестнадцатеричное представление — 00 00 00 01) и увеличивается на единицу при каждом использовании указанной выше функции генерации ключа для данного KEK.

partyAInfo

Случайная строка, предоставляемая отправителем. В CMS эта строка представляется, как параметр в поле UserKeyingMaterial (в формате OCTET STRING). При наличии поля partyAInfo его размер должен быть равен 512 батам.

suppPubInfo

Размер создаваемого ключа KEK (в битах), представленный 32-битовым целым числом с сетевым порядком байтов. Например, для алгоритма 3DES он будет представляться последовательностью байтов 00 00 00 C0.

Для создания KEK генерируется один или множество блоков KM (с соответствующим увеличением счетчика), пока не будет получен достаточный объем материала. Блоки KM объединяются слева направо — KM(counter=1) || KM(counter=2)…

Отметим, что единственным источником энтропии для секрета является этот расчет ZZ. Даже при генерации строки длиннее ZZ эффективное пространство ключей KEK ограничено размером ZZ в дополнение к любым, связанным с безопасностью вопросам, вносимым значениями параметров p и q. Однако, если partyAInfo различается для каждого сообщения, для этих сообщений будут генерироваться и разные ключи KEK. Отметим, что параметр partyAInfo должен использоваться в режиме Static-Static и может применяться в режиме Ephemeral-Static.

2.1.3. Расчет KEK

Для каждого алгоритма шифрования требуется ключ определенного размера (n). Ключ KEK создается путем отображения n старших (слева) байтов KM на ключ. Для алгоритма 3DES, требующего 192 бита ключевого материала, алгоритм должен применяться дважды — один раз со значением счетчика 1 (для генерации K1′, K2′ и первых 32 битов K3′), а второй раз — 2 (для генерации оставшихся 32 битов K3′3). Затем для K1′,K2′ и K3′ устанавливается четность для генерации 3 ключей DES — K1, K2 и K3. Для алгоритма RC2-128, требующего 128 битов ключевого материала, алгоритм применяется один раз со значением счетчика 1 и 128 битов слева напрямую преобразуются в ключ RC2. Аналогично для RC2-40, которому нужно 40 битов ключевого материала, алгоритм применяется один раз с counter=1 и 40 битов слева используются в качестве ключа.

2.1.4. Размеры ключей

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

3 ключа 3DES 192 бита

RC2-128 128 битов

RC2-40 40 битов

Эффективный размер ключей RC2 совпадает с реальным размером этих ключей.

2.1.5. Проверка открытого ключа

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

  1. значение y должно лежать в интервале [2,p-1];

  2. должно выполняться условие (y^q mod p) == 1.

Основной целью проверки открытых ключей является предотвращение атаки small subgroup (небольшая подгруппа) [LAW98] на ключевую пару отправителя. В режиме Ephemeral-Static проверка может не требоваться. Дополнительную информацию о проверке открытых ключей можно найти в [P1363].

Отметим, что эта процедура может быть запатентована.

2.1.6. Пример 1

ZZ размером 20 байтов

    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13

Для шифрования ключей (key wrap) применяется алгоритм 3DES-EDE.

Параметр partyAInfo не используется.

При первом вызове SHA-1 входные данные (ZZ) имеют вид

   00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 ; ZZ

   30 1d
      30 13
         06 0b 2a 86 48 86 f7 0d 01 09 10 03 06          ; OID алгоритма 3DES
         04 04
            00 00 00 01                                  ; счетчик
      a2 06
         04 04
         00 00 00 c0                                     ; размер ключа

На выходе будет 20-байтовая последовательность

   a0 96 61 39 23 76 f7 04 4d 90 52 a3 97 88 32 46 b6 7f 5f 1e

При втором вызове SHA-1 входные данные (ZZ) имеют вид

   00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 ; ZZ
   30 1d
      30 13
         06 0b 2a 86 48 86 f7 0d 01 09 10 03 06             ; OID алгоритма 3DES
         04 04
            00 00 00 02                                     ; счетчик
      a2 06
         04 04
         00 00 00 c0                                        ; размер ключа

На выходе будет 20-байтовая последовательность

   f6 3e b5 fb 5f 56 d9 b6 a8 34 03 91 c2 d3 45 34 93 2e 11 30

В результате получим

   K1'=a0 96 61 39 23 76 f7 04
   K2'=4d 90 52 a3 97 88 32 46
   K3'=b6 7f 5f 1e f6 3e b5 fb

Примечание. Четность для этих ключей не устанавливалась.

2.1.7. Пример 2

ZZ размером 20 байтов

    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13

Для шифрования ключей (key wrap) применяется алгоритм RC2-128, которому нужно 128 битов (16 байтов) ключевого материала.

Параметр partyAInfo имеет размер 64 байта

   01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
   01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
   01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
   01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01

При вызове SHA-1 входные данные (ZZ) имеют вид

   00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 ; ZZ
   30 61
      30 13
         06 0b 2a 86 48 86 f7 0d 01 09 10 03 07             ; OID алгоритма RC2
         04 04
            00 00 00 01                                     ; счетчик
      a0 42
         04 40
            01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01 ; partyAInfo
            01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
            01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
            01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 01
      a2 06
         04 04
            00 00 00 80                                     ; размер ключа

На выходе будет 20-байтовая последовательность

   48 95 0c 46 e0 53 00 75 40 3c ce 72 88 96 04 e0 3e 7b 5d e9

В результате получим

   K=48 95 0c 46 e0 53 00 75 40 3c ce 72 88 96 04 e0

2.2. Требования к ключу и параметрам

X9.42 требует, чтобы группа параметров была связана уравнением p=jq + 1, где q — большое простое число размера m, а j >= 2. Алгоритм генерации простых чисел, удовлетворяющих этому уравнению (основан на алгоритмах FIPS PUB 186-1 [FIPS-186] и [X942]), показан в параграфе 2.2.15.

X9.42 требует принадлежности секретного ключа интервалу [2, (q — 2)]. Значение x следует выбирать из этого интервала случайным образом. После этого y рассчитывается, как (g^x mod p). В соответствии с требованиями этого документа параметр m должен быть менее 160 битов6 (следовательно, и размер q должен быть по меньшей мере 160 битов). При использовании симметричных шифров, более строгих по сравнению с DES, могут быть желательные большие значения m2. Размер параметра p должен быть не менее 512 битов.

2.2.1. Генерация группы параметров

Агентам следует генерировать параметры домена (g,p,q), используя описанный ниже алгоритм, созданный на основе [FIPS-186] и [X942]. Корректность созданных с помощью этого алгоритма параметров можно проверить с помощью алгоритма, описанного в параграфе 2.2.2.

2.2.1.1. Генерация p, q

Этот алгоритм создает пару параметров p и q, где q имеет размер m, а p — размер L.

  1. Устанавливается m’ = m/160, где знак / означает целочисленное деление с округлением вверх (например, 200/160 = 2).

  2. Устанавливается L’ = L/160.

  3. Устанавливается N’ = L/1024.

  4. Выбирается произвольная битовая строка seed (затравка), размером не менее m.

  5. Устанавливается U = 0.

  6. В цикле по i от 0 до m’ — 1 выполняется расчет

        U = U + [SHA1(seed + i) XOR SHA1((seed + m' + i) mod 2^{seedlen})] * 2^{160 * i}7

    Отметим, что для m = 160, это выражение сводится к алгоритму [FIPS-186]

    U = [SHA1(seed) XOR SHA1((seed + 1) mod 2^{seedlen})]

    где seedlen указывает двоичный размер затравки seed.

  7. Формируется значение q на основе U путем расчета (U mod (2^m)) и установки для младшего и старшего (2^(m-1)-й) битов результата значения 1. В терминах логических операций q = U OR 2^(m-1) OR 1. Отметим, что 2^(m-1) < q < 2^m8.

  8. С помощью надежного алгоритма проверяется принадлежность q к простым числам.

  9. Если q не является простым числом процедура повторяется с п 49.

  10. Устанавливается counter = 0.

  11. Устанавливается R = seed + 2*m’ + (L’ * counter).

  12. Устанавливается V = 0.

  13. В цикле по i от 0 до L’-1 выполняется расчет

        V = V + SHA1(R + i) * 2^(160 * i)
  14. Устанавливается W = V mod 2^L.

  15. Устанавливается X = W OR 2^(L-1).

    Отметим, что 0 <= W < 2^(L-1) и, следовательно, X >= 2^(L-1).

  16. Устанавливается p = X — (X mod (2*q)) + 1.

  17. Если p > 2^(L-1), с помощью надежного алгоритма проверяется принадлежность p к простым числам.

  18. Если p является простым числом, возвращаются значения p, q, seed, counter и процедура завершается.

  19. Значение счетчика увеличивается на 1 (counter = counter + 1).

  20. Если counter < (4096 * N), процедура повторяется с п 1110.

  21. Возвращается «отказ» (failure).

Примечание. К надежным относятся алгоритмы проверки простых чисел, которые обеспечивают вероятность ошибки не более 2^-80. Подходящие алгоритмы приведены в [FIPS-186] и [X942].

2.2.1.2. Генерация g

Ниже описан алгоритм генерации значений g, созданный на основе [FIPS-186]).

  1. Пусть j = (p — 1)/q.

  2. В качестве h выбирается любое целое число из диапазона 1 < h < p — 1, отличающееся от использованных в предыдущих попытках.

  3. Устанавливается g = h^j mod p.

  4. Если g = 1, процедура повторяется с п. 2.

2.2.2. Проверка группы параметров

Представление ASN.1 для ключей DH в [PKIX] содержит элементы j и validation-Parms, которые могут быть использованы получателями ключей для проверки корректности генерации параметров. Возможны две проверки, перечисленные ниже.

  1. Проверка выполнения условия p = qj + 1 показывает, соответствуют ли параметры критериям X9.42.

  2. Проверка того, что для генерации значений p и q использовалась процедура из Приложения 2 к [FIPS-186] с затравкой seed и значение p было получено при counter = pgenCounter.

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

2.3. Режим «эфемерный-статический»

В режиме Ephemeral-Static получатель имеет статическую (и сертифицированную) пару ключей, а отправитель генерирует новую пару для каждого передаваемого сообщения с использованием originatorKey. Если отправитель генерирует новый ключ для каждого сообщения, общие секреты ZZ также будут различаться для каждого сообщения и параметр partyAInfo можно опустить, поскольку он служит исключительно для «развязки» множества ключей KEK, генерируемых с одним набором парных ключей. Однако при использовании одного эфемерного ключа для множества сообщений (например, при кэшировании для повышения производительности) должны применяться разные значения partyAInfo для каждого сообщения. Все реализации данного стандарта должны поддерживать режим Ephemeral-Static.

Для обеспечения устойчивости к атакам small subgroup получателю следует выполнять проверку, описанную в параграфе 2.1.5. если друга сторона не может определить результат (успех или неудача) операции расшифровки у получателя, последний может опустить такую проверку. Метод генерации ключей, не подверженный атакам small subgroup, описан в [LL97].

2.4. Режим «статический-статический»

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

Для предотвращения атак small subgroup отправителю и получателю следует выполнять проверку, описанную в параграфе 2.1.5, или проверять достоверность ключа в удостоверяющем центре CA. Метод генерации ключей, не подверженный атакам small subgroup, описан в [LL97].

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

Описанный здесь метод согласования ключей (Key Agreement) основан на результатах работы группы ANSI X9F1. Автор выражает им свою признательность.

Автор также хочет поблагодарить Stephen Henson, Paul Hoffman, Russ Housley, Burt Kaliski, Brian Korver, John Linn, Jim Schaad, Mark Schertler, Peter Yee и Robert Zuccherato за консультации и отзывы.

Литература

[CMS] Housley, R., «Cryptographic Message Syntax», RFC 2630, June 1999.

[FIPS-46-1] Federal Information Processing Standards Publication (FIPS PUB) 46-1, Data Encryption Standard, Reaffirmed 1988 January 22 (supersedes FIPS PUB 46, 1977 January 15).

[FIPS-81] Federal Information Processing Standards Publication (FIPS PUB) 81, DES Modes of Operation, 1980 December 2.

[FIPS-180] Federal Information Processing Standards Publication (FIPS PUB) 180-1, «Secure Hash Standard», 1995 April 17.

[FIPS-186] Federal Information Processing Standards Publication (FIPS PUB) 186, «Digital Signature Standard», 1994 May 19.

[P1363] «Standard Specifications for Public Key Cryptography», IEEE P1363 working group draft, 1998, Annex D.

[PKIX] Housley, R., Ford, W., Polk, W. and D. Solo, «Internet X.509 Public Key Infrastructure Certificate and CRL Profile», RFC 2459, January 1999.

[LAW98] L. Law, A. Menezes, M. Qu, J. Solinas and S. Vanstone, «An efficient protocol for authenticated key agreement», Technical report CORR 98-05, University of Waterloo, 1998.

[LL97] C.H. Lim and P.J. Lee, «A key recovery attack on discrete log-based schemes using a prime order subgroup», B.S. Kaliski, Jr., editor, Advances in Cryptology — Crypto ’97, Lecture Notes in Computer Science, vol. 1295, 1997, Springer-Verlag, pp. 249-263.

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

[X942] «Agreement Of Symmetric Keys Using Diffie-Hellman and MQV Algorithms», ANSI draft, 1998.

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

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

Статические ключи Diffie-Hellman уязвимы для атак на небольшие подгруппы (small subgroup), описанных в [LAW98]. На практике проблемы могут возникать на обеих сторонах для режима Static-Static и на стороне получателя в режиме Ephemeral-Static. В параграфах 2.3 и 2.4 указаны меры по предотвращению таких атак. Дополнительную защиту может обеспечить генерация ключей с использованием устойчивого к таким атакам метода, как описано в [LL97].

Уровень защиты, обеспечиваемой этими методами, зависит от нескольких факторов. Защита зависит от размера симметричных ключей (уровень защиты 2^l для ключа размером l битов), размера простого числа q (уровень 2^{m/2}) и простого числа p (уровень защиты экспоненциально увеличивается с ростом размера числа в битах). Хорошим практическим решением будет сбалансированная система, где все три упомянутых уровня защиты будут иметь близкие значения. Если из одной пары простых чисел p и q создается множество ключей, имеет смысл повысить уровень защиты этих чисел. В любом случае общий уровень защиты определяется слабейшим из трех упомянутых.

Адрес автора

Eric Rescorla

RTFM Inc.

30 Newell Road, #16

East Palo Alto, CA 94303

EMail: ekr@rtfm.com


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

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

nmalykh@gmail.com

Полное заявление авторских прав

Copyright (C) The Internet Society (1999). Все права защищены.

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

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

Этот документ и содержащаяся в нем информация представлены «как есть» и автор, организация, которую он/она представляет или которая выступает спонсором (если таковой имеется), Internet Society и IETF отказываются от каких-либо гарантий (явных или подразумеваемых), включая (но не ограничиваясь) любые гарантии того, что использование представленной здесь информации не будет нарушать чьих-либо прав, и любые предполагаемые гарантии коммерческого использования или применимости для тех или иных задач.

Подтверждение

Финансирование функций RFC Editor обеспечено Internet Society.

1Key-encryption key.

2Content-encryption key.

3В оригинале ошибочно указано K3. Прим. перев.

4В оригинале алгоритм проверки описан не вполне однозначно. Прим. перев.

5В оригинале ошибочно указано «Приложение A». Прим. перев.

6В оригинале ошибочно говорится о размере, а не о значении m, хотя из первого абзаца этого параграфа явно следует иное. Прим. перев.

7В оригинале это и следующее выражение содержали ошибки. См. https://www.rfc-editor.org/errata_search.php?eid=2506. Прим. перев.

8В оригинале этот пункт имеет номер 5 и далее продолжается ошибочная нумерация до конца списка. Прим. перев.

9Со сменой затравки. Прим. перев.

10В оригинале ошибочно указан переход к п. 8 — должен быть указан п. 9 в ошибочной нумерации оригинала или п. 11 в исправленной нумерации перевода. См. также ftp://ftp.iks-jena.de/mitarb/lutz/standards/ansi/X9/x942-05-21-98.pdf (стр. 25). Прим. перев.

11Этот документ признан устаревшим и заменен RFC 3369 (заменен RFC 3852) и RFC 3370. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 2631 Diffie-Hellman Key Agreement Method отключены

RFC 2630 Cryptographic Message Syntax

Документ признан устаревшим и заменен RFC 3369 и RFC 3370.

Рубрика: RFC | Комментарии к записи RFC 2630 Cryptographic Message Syntax отключены

RFC 2617 HTTP Authentication: Basic and Digest Access Authentication

Отменен RFC 7235.

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

RFC 2616 Hypertext Transfer Protocol — HTTP/1.1

Отменен RFC 7231, RFC 7232, RFC 7233, RFC 7234, RFC 7235.

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