RFC 4305 Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)

Network Working Group                                D. Eastlake 3rd
Request for Comments: 4305                     Motorola Laboratories
Obsoletes: 2404, 2406                                  December 2005
Category: Standards Track

Требования к реализациям криптографических алгоритмов для ESP и AH

Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

В серии протоколов IPsec используются различные криптографические алгоритмы для защиты передаваемых через сеть данных. Протоколы ESP2 и AH3 обеспечивают два механизма защиты данных при передаче через защищенные связи IPsec SA4. Для обеспечения совместимости разнородных реализаций требуется задать набор обязательных для реализации алгоритмов, чтобы всем реализациям был доступен по крайней мере один алгоритм. В этом документе определен текущий вариант набора обязательных для реализаций ESP и AH алгоритмов, а также указаны алгоритмы, которые следует реализовать, поскольку они могут стать обязательными в будущем.

1. Введение

Протоколы ESP и AH обеспечивают два механизма защиты данных при передаче через защищенные связи IPsec SA [IPsec, ESP, AH]. Для обеспечения совместимости разнородных реализаций требуется задать набор обязательных для реализации алгоритмов, чтобы всем реализациям был доступен по крайней мере один алгоритм. В этом документе определен текущий вариант набора обязательных для реализаций ESP и AH алгоритмов, а также указаны алгоритмы, которые следует реализовать, поскольку они могут стать обязательными в будущем.

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

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

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

2. Обозначения уровня требований

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

В этом документе определены также дополнительные уровни требований:

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

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

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

3. Выбор алгоритма

Для обеспечения совместимости реализаций IPsec требуется поддержка по крайней мере одного общего алгоритма защиты. В этом разделе приведены требования по реализации алгоритмов защиты для соответствующих спецификации реализаций протоколов ESP и AH. Алгоритмы защиты, реально используемые любой конкретной защищенной связью ESP или AH, определяются механизмом согласования (таким, как IKE5 [RFC2409, IKEv2]) или задаются при организации соединения.

Естественно, допускается реализация дополнительных (стандартных или фирменных) алгоритмов, не упомянутых в этом документе.

3.1. Протокол ESP

Требования в поддержке алгоритмов защиты для соответствующих спецификации реализаций протокола ESP приведены ниже. Определения уровней требований содержатся в разделе 2.

3.1.1. Алгоритмы шифрования и аутентификации для ESP

В приведенных ниже таблицах указаны требования к алгоритмам шифрования и аутентификации для протокола IPsec ESP.

Требования Алгоритм шифрования
MUST — обязательно NULL6
MUST- — обязательно, но может утратить статус TripleDES-CBC [RFC2451]
SHOULD+ — следует, но может стать обязательным AES-CBC с ключами размером 128 битов [RFC3602]
SHOULD — следует AES-CTR [RFC3686]
SHOULD NOT — не следует DES-CBC [RFC2405]7
Требования Алгоритм аутентификации
MUST — обязательно HMAC-SHA1-96 [RFC2404]
MUST — обязательно NULL2
SHOULD+ — следует, но может стать обязательным AES-XCBC-MAC-96 [RFC3566]
MAY — возможно HMAC-MD5-96 [RFC2403]8

3.1.2. Комбинированные алгоритмы для ESP

Как указано в [ESP], протокол поддерживает использование комбинированных алгоритмов, которые обеспечивают услуги конфиденциальности и аутентификации. Поддержка таких алгоритмов требует соответствующего структурирования реализации ESP. Во многих ситуациях комбинированные алгоритмы обеспечивают значительные преимущества в части эффективности и пропускной способности. Хотя в настоящее время не указывается предлагаемых или обязательных к реализации комбинированных алгоритмов, предполагается, что в ближайшем будущем представит интерес алгоритм AES-CCM [CCM], адаптированный в качестве предпочтительного для IEEE 802.11 [802.11i].

3.2. Протокол AH

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

Требования Алгоритм аутентификации
MUST — обязательно HMAC-SHA1-96 [RFC2404]
SHOULD+ — следует, но может стать обязательным AES-XCBC-MAC-96 [RFC3566]
MAY — возможно HMAC-MD5-96 [RFC2403]9

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

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

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

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

Значительная часть приведенного здесь текста была заимствована из RFC 4307, Cryptographic Algorithms for Use in the Internet Key Exchange Version 2, автором которого является Jeffrey I. Schiller.

6. Отличия от RFC 2402 и 2406

[RFC2402] и [RFC2406] определяли протоколы IPsec AH и IPsec ESP. Каждый из этих документов содержал требования к криптографическим алгоритмам для соответствующего протокола. В настоящее время эти спецификации заменены документами [AH] и [ESP], которые не содержат требований к реализации криптографических алгоритмов. В данном документе указаны такие требования для обоих протоколов — [AH] и [ESP].

Сравнение требований приведено ниже.

Старое требование Старый RFC Новое требование Алгоритм
MUST — требуется 2406 SHOULD NOT — не следует DES-CBC [RFC2405]10
MUST — требуется 2402, 2406 MAY — возможно HMAC-MD5-96 [RFC2403]
MUST — требуется 2402, 2406 MUST — требуется HMAC-SHA1-96 [RFC2404]

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

[AH] Kent, S., «IP Authentication Header», RFC 4302, December 2005.

[ESP] Kent, S., «IP Encapsulating Security Payload (ESP)», RFC 4303, December 2005.

[IPsec] Kent, S., «Security Architecture for the Internet Protocol», RFC 4301, December 2005.

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

[RFC2403] Madson, C. and R. Glenn, «The Use of HMAC-MD5-96 within ESP and AH», RFC 2403, November 1998.

[RFC2404] Madson, C. and R. Glenn, «The Use of HMAC-SHA-1-96 within ESP and AH», RFC 2404, November 1998.

[RFC2405] Madson, C. and N. Doraswamy, «The ESP DES-CBC Cipher Algorithm With Explicit IV», RFC 2405, November 1998.

[RFC3566] Frankel, S. and H. Herbert, «The AES-XCBC-MAC-96 Algorithm and Its Use With IPsec», RFC 3566, September 2003.

[RFC3602] Frankel, S., Glenn, R., and S. Kelly, «The AES-CBC Cipher Algorithm and Its Use with IPsec», RFC 3602, September 2003.

[RFC3686] Housley, R., «Using Advanced Encryption Standard (AES) Counter Mode With IPsec Encapsulating Security Payload (ESP)», RFC 3686, January 2004.

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

[802.11i] LAN/MAN Specific Requirements Part 11: Wireless Medium Access Control (MAC) and physical layer (PHY) specifications: Medium Access Control (MAC) Security Enhancements, IEEE Std 802.11i, June 2004.

[JIS] Schiller, J., «Cryptographic Algorithms for Use in the Internet Key Exchange Version 2 (IKEv2)», RFC 4307, December 2005.

[CCM] Housley, R., «Using Advanced Encryption Standard (AES) Counter Mode With IPsec Encapsulating Security Payload (ESP)», RFC 3686, January 2004.

[IKEv2] Kaufman, C., Ed., «Internet Key Exchange (IKEv2) Protocol», RFC 4306, December 2005.

[RFC791] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[RFC2402] Kent, S. and R. Atkinson, «IP Authentication Header», RFC 2402, November 1998.

[RFC2406] Kent, S. and R. Atkinson, «IP Encapsulating Security Payload (ESP)», RFC 2406, November 1998.

[RFC2407] Piper, D., «The Internet IP Security Domain of Interpretation for ISAKMP», RFC 2407, November 1998.

[RFC2409] Harkins, D. and D. Carrel, «The Internet Key Exchange (IKE)», RFC 2409, November 1998.

Адрес автора

Donald E. Eastlake 3rd

Motorola Laboratories

155 Beaver Street

Milford, MA 01757 USA

Phone: +1-508-786-7554 (w)

+1-508-634-2066 (h)

EMail: Donald.Eastlake@Motorola.com


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1В настоящее время этот документ заменен RFC 4835, перевод которого доступен на сайте www.protokols.ru. Прим. перев.

2Encapsulating Security Payload — инкапсуляция защищенных данных.

3Authentication Header — заголовок аутентификации.

4Security Association — защищенная связь.

5Internet Key Exchange — обмен ключами в Internet.

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

7Алгоритм DES с его малым размером ключей и публично показанной открытой аппаратурой для взлома, является сомнительным средством защиты общего пользования.

8Алгоритм MD5 достаточно слаб, однако эта слабость не проявляется при использовании MD5 с HMAC.

9Алгоритм MD5 достаточно слаб, однако эта слабость не проявляется при использовании MD5 с HMAC.

10IETF запрещает самостоятельное использование DES уже много лет и не включает этот алгоритм в новые стандарты в течение достаточного времени (см. комментарий IESG на первой странице [RFC2407]). Но этот документ является первым проектом стандарта, в котором указано, что реализациям не следует использовать алгоритм DES самостоятельно (не в комбинации с другими, прим. перев.). Институт стандартов и технологий США (NIST) формально признал слабость DES при самостоятельном использовании в документе, опубликованном 26 июля 2004 в Федеральном правительственном реестре США (Docket No. 040602169-4169-01), призывая прекратить использование этого алгоритма в качестве Государственного стандарта США. Алгоритм Triple DES по прежнему признается как IETF, так и NIST.

13Этот документ признан устаревшим и заменен RFC 5996, а затем RFC 7296. Прим. перев.

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

RFC 4304 Extended Sequence Number (ESN) Addendum to IPsec Domain of Interpretation (DOI) for Internet Security Association and Key Management Protocol (ISAKMP)

Network Working Group                                        S. Kent
Request for Comments: 4304                          BBN Technologies
Category: Standards Track                              December 2005

Добавление расширенных порядковых номеров (ESN) в области интерпретации IPsec (DOI) для протокола управления защитными связями и ключами (ISAKMP)

Extended Sequence Number (ESN) Addendum to IPsec Domain of Interpretation (DOI) for Internet Security Association and Key Management Protocol (ISAKMP)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Протоколы AH1 и ESP2 используют порядковые номера для детектирования попыток повторного использования пакетов. В этом документе описано расширение области интерпретации (DOI3) для протокола управления защищенными связями и ключами (ISAKMP4). Это расширение поддерживает согласование использования традиционных 32-битовых порядковых номеров или расширенных (64 бита) порядковых номеров (ESN5) для конкретной защищенной связи AH или ESP.

1. Введение

Спецификации протоколов AH [AH] и ESP [ESP] описывают опцию использования расширенных (64 бита) порядковых номеров. Эта опция обеспечивает возможность передачи очень больших объемов данных с высокмими скоростями через защищенные связи (SA) без сменя ключей, связанной с исчерпанием пространства порядковых номеров. В этом документе описано дополнение к IPsec DOI для ISAKMP [DOI], которое требуется для поддержки согласования опции ESN.

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

2. Атрибут SA

Описанный здесь атрибут SA используется во второй фазе (Phase II) согласования протокола IKE6. Атрибут относится к базовому типу — Basic (B). Кодирование этого атрибута определено в базовой спецификации ISAKMP [ISAKMP]. Атрибуты, описанные в качестве базовых, недопустимо кодировать, как переменные. Более подробное описание кодирования атрибута в IPsec DOI приведено в документе [IKE]. Все ограничения, перечисленные в [IKE], применимы к IPsec DOI и настоящему дополнению.

Тип атрибута

Класс Значение Тип
Extended (64-bit) Sequence Number 11 B

Значения класса

Этот класс показывает, что защищенная связь SA будет использовать 64-битовые порядковые номера (описание расширенных порядковых номеров содержится в документах [AH] и [ESP]).

Резерв 0

64-битовый порядковый номер 1

3. Согласование атрибута

Если реализация получает определенный атрибут IPsec DOI (или значение атрибута), который не поддерживается, следует передать сигнал ATTRIBUTES-NOT-SUPPORT, а организация защищенной связи должна быть прервана.

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

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

Этот документ связан с протоколом обмена ключами [IKE], который объединяет ISAKMP [ISAKMP] и Окли [OAKLEY] для распространения криптографических ключей с обеспечением защиты и идентификации сторон. Обсуждение различных протоколов защиты и преобразований, описанных в этом документе, можно найти в упомянутых ниже базовых документах и документах по шифрованию.

Добавление атрибута ESN не меняет параметров безопасности IKE. При использовании ESN с протоколом ESP важно выбрать режим шифрования, который обеспечит достаточную защиту при шифровании очень большого объема данных с использованием одного ключа. В этом смысле такие алгоритмы, как DES7 в режиме CBC8 не подходит для использования с ESN, поскольку с использованием одного ключа DES не следует шифровать более 232 блоков в таком режиме. Аналогично, с протоколами ESP и AH следует использовать алгоритмы контроля целостности, обеспечивающие должную защиту при больших объемах передаваемой информации. Во избежание возможных проблем с защитой, порождаемых ограничениями алгоритмов, время жизни SA можно ограничивать по объему информации, защищаемой с использованием одного ключа, до того, как будет достигнут предел ESN в 264 пакетов.

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

В этом документе задано «магическое» число, поддерживаемое IANA. Для этого атрибута не выделяется дополнительных значений. Агентство IANA выделило значение IPsec Security Attribute для Attribute Type (тип атрибута). Это значение указано в колонке «Значение» таблицы раздела 2.

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

Автор благодарит членов рабочей группы IPsec. Автор также признателен Karen Seo за помощь при редактировании этой спецификации.

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

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

[AH] Kent, S., «IP Authentication Header», RFC 4302, December 2005.

[DOI] Piper, D., «The Internet IP Security Domain of Interpretation for ISAKMP», RFC 240710, November 1998.

[ESP] Kent, S., «IP Encapsulating Security Payload (ESP)», RFC 4303, December 2005.

[IKE] Harkins, D. and D. Carrel, «The Internet Key Exchange (IKE)», RFC 24094, November 1998.

[ISAKMP] Maughan, D., Schertler, M., Schneider, M., and J. Turner, «Internet Security Association and Key Management Protocol (ISAKMP)», RFC 24084, November 1998.

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

[OAKLEY] Orman, H., «The OAKLEY Key Determination Protocol», RFC 2412, November 1998.

Адрес автора

Stephen Kent

BBN Technologies

10 Moulton Street

Cambridge, MA 02138

USA

Phone: +1 (617) 873-3988

EMail: kent@bbn.com


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Authentication Header — заголовок идентификации.

2Encapsulating Security Payload — инкапсуляция защищенных данных.

3Internet IP Security Domain of Interpretation — область интерпретации защиты IP.

4Internet Security Association and Key Management Protocol — протокол управления защищенными связями и ключами в Internet.

5Extended Sequence Number.

6Internet Key Exchange — протокол обмена ключами.

7Data Encryption Standard — стандарт шифрования данных.

8Cipher Block Chaining — сцепка шифрованных блоков.

10В настоящее время этот документ утратил силу и заменен RFC 4306. Прим. перев.

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

RFC 4303 IP Encapsulating Security Payload (ESP)

Network Working Group                                        S. Kent
Request for Comments: 4303                          BBN Technologies
Obsoletes: 2406                                        December 2005
Category: Standards Track

Инкапсуляция защищенных данных IP (ESP)

IP Encapsulating Security Payload (ESP)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Этот документ описывает обновленную версию протокола ESP1, разработанного для обеспечения различных услуг защиты в среде IPv4 и IPv6. Протокол ESP используется для обеспечения конфиденциальности, аутентификации источника данных, контроля целостности без организации специальных соединений, предотвращения повторного использования пакетов (форма контроля порядковых номеров) и ограниченной конфиденциальности потоков трафика. Данный документ отменяет действие RFC 2406 (ноябрь 1998).

Оглавление

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

1. Введение

В документе предполагается, что читатель достаточно знаком с терминами и концепциями, изложенными в документе «Архитектура защиты для протокола IP» [Ken-Arch], далее называемом для краткости описанием архитектуры. В частности, читателю следует понимать определения услуг по защите, обеспечиваемых ESP1 [Ken-ESP] и AH, концепцию защищенных связей, способы использования ESP вместе с аутентификационным заголовком AH, а также различные опции управления ключами, поддерживаемые для ESP и AH.

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

Заголовок ESP разработан для обеспечения смешанных услуг по защите информации в среде IPv4 и IPv6 [DH98]. ESP может использоваться автономно, в комбинации с AH [Ken-AH] или в режиме вложенности (см. документ по архитектуре защиты [Ken-Arch]). Услуги по защите могут обеспечиваться между парой взаимодействующих хостов, парой защитных шлюзов, а также между защитным шлюзом и хостом. Более детальная информация об использовании ESP и AH в различных сетевых средах приведена в документе по архитектуре защиты [Ken-Arch].

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

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

В ESP допускается использование только функций шифрования для обеспечения конфиденциальности. Однако следует отметить, что в общем случае шифрование будет обеспечивать лишь защиту от пассивных атак. Использование шифрования без строгого контроля целостности (в ESP или с помощью AH) может сделать шифрованные услуги уязвимыми для некоторых форм активных атак [Bel96, Kra01]. Более того, нижележащие службы контроля целостности (такие, как AH), использованные до шифрования, не обеспечивают достаточной защиты конфиденциальных данных от активных атак при использовании только шифрования [Kra01]. ESP позволяет использовать SA только с шифрованием, поскольку в этом случае обеспечивается более высокая производительность в сочетании с адекватной защитой (например, при независимой реализации услуг проверки аутентификации и целостности данных). Однако стандарт не требует от реализаций ESP предлагать лишь услуги шифрования.

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

Хотя конфиденциальность и целостность могут обеспечиваться независимо, ESP обычно поддерживает оба типа услуг (т. е., пакеты будут защищаться как в части конфиденциальности, так и в части целостности). Таким образом, существует три варианта услуг ESP:

  • только конфиденциальность (может поддерживаться);

  • только целостность (должна поддерживаться);

  • конфиденциальность и целостность (должна поддерживаться)

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

Услуги по обеспечению конфиденциальности потоков трафика (TFC4) в общем случае эффективны только при таком развертывании ESP, когда обеспечивается сокрытие адресов исходных отправителей и получателей (например, в туннеле между защитными шлюзами) и только при потоке трафика между партнерами IPsec (естественного или генерируемого в целях маскировки), достаточном для сокрытия конкретного потока индивидуальных абонентов5. Новые функции TFC, включенные в ESP, облегчают генерацию и отбрасывание маскирующего трафика и обеспечивают более эффективное заполнение для реального трафика. При этом обеспечивается совместимость с более ранними версиями.

В разделе 7 кратко перечислены отличия данной спецификации от RFC 2406.

2. Формат пакетов ESP

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
|               Security Parameters Index (SPI)                 | ^Int.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|                      Sequence Number                          | |ered
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
|                    Payload Data* (переменное)                 | |   ^
~                                                               ~ |   |
|                                                               | |Conf.
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|               |     Padding (0-255 байтов)                    | |ered*
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
|                               |  Pad Length   | Next Header   | v   v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
|         Integrity Check Value-ICV   (переменное)              |
~                                                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

* При наличии в поле Payload данных криптографической синхронизации (например, вектора инициализации — IV, описанного в параграфе 2.3) эти данные обычно не шифруются, хотя о них зачастую говорят, как о части шифрованных данных.

Рисунок 1. Формат пакета ESP на верхнем уровне.


В заголовок (внешний) протокола (IPv4, IPv6, Extension), непосредственно предшествующий заголовку ESP, следует включать значение 506 в поле Protocol (IPv4) или Next Header (IPv6, Extension). Рисунок 1 показывает верхний уровень формата пакетов ESP. Пакет начинается с двух 4-байтовых полей (SPI 7 и Sequence Number8). Вслед за ними размещается поле данных Payload Data, структура которого зависит от выбора алгоритма шифрования и режима, а также заполнения TFC, детально описанного ниже. Вслед за полем Payload Data размещается поле запол-нения (Padding), поле размера заполнения (Pad Length) и поле Next Header (следующий заголовок). Дополнительно в конце пакета может помещаться значение ICV9.

Трейлер (передаваемый) ESP содержит поля Padding, Pad Length и Next Header. В дополнение к этим полям включаются неявные данные трейлера ESP (не передаются), используемые для контроля целостности, как описано ниже.

  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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Security Parameters Index (SPI)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Sequence Number                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
|                    IV (optional)                              | ^ p
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
|                    Rest of Payload Data  (переменное)         | | y
~                                                               ~ | l
|                                                               | | o
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
|               |  TFC Padding * (необязательно, переменное)    | v d
+-+-+-+-+-+-+-+-+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
|                         |        Padding (0-255 байтов)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |  Pad Length   | Next Header   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Integrity Check Value-ICV   (переменное)              |
~                                                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

* При использовании туннельного режима реализация IPsec может добавлять заполнение TFC (см. параграф 2.4) после поля Payload Data и перед полем Padding.

Рисунок 2. Субструктура данных (Payload Data).


При выборе контроля целостности контрольная сумма дополняет поля SPI, Sequence Number, Payload Data и трейлер ESP (явный и неявный).

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

Как отмечено выше, поле Payload Data может иметь дополнительную структуру. Алгоритмы шифрования, кото-рым требуется явный вектор инициализации IV10 (например, CBC11), часто используют эти данные в качестве префикса защищаемых данных (Payload Data). Некоторые алгоритмы объединяют шифрование и контроль целостности в одну операцию — здесь такие алгоритмы будут называться комбинированными. Приспособление таких алгоритмов требует от алгоритма явного описания структуры Payload Data, используемой для передачи данных контроля целостности.

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

При использовании комбинированного алгоритма предполагается, что этот алгоритм сам по себе будет возвращать шифрованные данные и результат проверки целостности. Для комбинированных алгоритмов значение ICVЭ обычно находящее в конце пакета ESP (когда выбран контроль целостности), можно опустить. Когда выбран контроль целостности и ICV опускается, ответственность за кодирование эквивалента ICV в поле Payload Data и проверку целостности пакета ложится на комбинированный алгоритм.

Если комбинированный алгоритм обеспечивает только целостность данных, которые уже зашифрованы, необходимо реплицировать значения полей SPI и Sequence Number, как часть Payload Data.

В заключение добавляются байты заполнения для сохранения конфиденциальности потоков трафика после поля Payload Data и перед трейлером ESP. Рисунок 2 показывает структуру поля Payload Data для таких случаев12.

При использовании комбинированного алгоритма явное поле ICV, показанное на рисунках 1 и 2, может отсутствовать (см. параграф 3.3.2.2). Поскольку алгоритмы и режимы задаются при организации SA, формат пакетов ESP для данной SA (включая структуру Payload Data) фиксирован для всего трафика данной SA.

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

Таблица 1. Раздельные алгоритмы шифрования и контроля целостности.

Число байтов

Требуется13

Шифруется

Учитывается в ICV

Передается

SPI

4

M

+

Без шифрования

Seq# (младшие биты)

4

M

+

Без шифрования

IV

переменное

O

+

cipher14

Payload

IP datagram15

переменное

M или D

+

+

cipher5

TFC padding

переменное

O

+

+

cipher5

Padding

0 — 255

M

+

+

cipher5

Pad Length

1

M

+

+

cipher5

Next Header

1

M

+

+

cipher5

Seq# (старшие биты)

4

При ESN16

+

Не передается

ICV Padding

переменное

Если используется

+

Не передается

ICV

переменное

M17

Без шифрования

Таблица 2. Комбинированные алгоритмы шифрования и контроля целостности.

Число байтов

Требуется18

Шифруется

Учитывается в ICV

Передается

SPI

4

M

+

Без шифрования

Seq# (младшие биты)

4

M

+

Без шифрования

IV

переменное

O

+

cipher

Payload

IP datagram19

переменное

M или D

+

+

cipher

TFC padding20

переменное

O

+

+

cipher

Padding

0 — 255

M

+

+

cipher

Pad Length

1

M

+

+

cipher

Next Header

1

M

+

+

cipher

Seq# (старшие биты)

4

При ESN21

+

22

ICV Padding

переменное

Если используется

+

7

ICV

переменное

O23

Без шифрования

В последующих параграфах рассматриваются поля заголовка. Необязательные поля могут быть опущены (т. е., отсутствуют как при передаче, так и при расчете ICV — см. параграф 2.7), если соответствующая опция не выбрана. Обязательные поля присутствуют в пакетах ESP всегда для каждой SA. Формат пакетов ESP для данной SA фиксирован на протяжении всего срока существования данной SA.

Примечание. Все криптографические алгоритмы, используемые в IPsec, предполагают на входе канонический сетевой порядок байтов (см. Приложение к RFC 791 [Pos81]) и генерируют результаты с использованием этого же порядка.

ESP не включает номера версии, следовательно при возникновении вопросов о совместимости с предыдущими версиями, эти вопросы должны решаться с использованием механизмов сигнализации (например, IKEv2) [Kau05] или настройка конфигурации по отдельному каналу) между партнерами IPsec, обеспечивающих совместимость версий ESP.

2.1. Security Parameters Index (SPI) — список параметров защиты

SPI представляет собой произвольное 32-битовое значение, используемое получателем для идентификации SA, с которой связан входящий пакет. Поле SPI является обязательным.

Для индивидуальных SA, значение SPI может само по себе идентифицировать SA или использоваться в комбинации с типом протокола IPsec (в данном случае ESP). Поскольку для индивидуальных SA значение SPI генерируется получателем, решение вопроса о достаточности этого значения для идентификации SA или необходимости использования в комбинации с типом протокола IPsec определяется локальными условиями. Этот механизм отображения входящего трафика на индивидуальные SA должен поддерживаться всеми реализациями ESP.

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

Во многих защищенных multicast-архитектурах (например, [RFC3740]) центральный контроллер группы/сервер ключей сам выделяет для группы значение SPI. Выделение SPI не согласуется и не координируется с подсистемами управления ключами (например, IKE) на конечных узлах группы. Следовательно, возникает возможность совпадения значений SPI для групповой и индивидуальной SA. Поддерживающие групповую адресацию реализации IPsec должны корректно демультиплексировать входящий трафик даже в случаях совпадения значений SPI.

Каждая запись в базе данных защищенных связей (SAD24) [Ken-Arch] должна указывать, по каким критериям в дополнение к SPI отыскивается SA – получатель, получатель и отправитель. Для групповых SA поле протокола не используется при поиске SA. Для каждого входящего пакета с защитой IPsec реализация должна произвести поиск в SAD и найти запись, наиболее точно соответствующую идентификатору SA. Если обнаруживается более одной записи SAD, соответствующей значению SPI, выбирается запись по наиболее точному соответствию получателя или получателя и отправителя (как указано в записи SAD). Таким образом, логический порядок поиска в SAD имеет вид:

  1. Поиск в базе SAD соответствия {SPI, адрес получателя, адрес отправителя}. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае выполняется п. 2.

  2. Поиск в базе SAD соответствия {SPI, адрес получателя}. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае выполняется п. 3.

  3. Поиск в базе SAD соответствия {SPI}, если получатель выбрал поддержку одного пространства SPI для AH и ESP, или {SPI, протокол} в противном случае. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае пакет отбрасывается с записью в журнал аудита.

На практике реализация может выбрать любой метод ускорения поиска, но наблюдаемое извне поведение должно соответствовать описанному выше поиску в SAD. Например, программные реализации могут индексировать хэш-таблицу SPI. Записи SAD в хэш-таблице сортируются в связный список, в котором записи для SA с большим соответствием располагаются ближе к началу, а с меньшим соответствием — ближе к концу списка. В аппаратных реализациях поиск максимального соответствия может ускоряться встроенными средствами с использованием общедоступной технологии TCAM25.

Индикация использования адресов отправителя и получателя при поиске соответствия для отображения входящего трафика IPsec на SA должна выполняться при настройке конфигурации SA вручную или путем согласования параметров с использованием протокола управления SA (например, IKE или GDOI26 [RFC3547]). Обычно группы SSM27 [HC03] используют трехкомпонентный идентификатор SA, включающий SPI, групповой адрес получателей и адрес отправителя. SA группы Any-Source Multicast требует в качестве идентификатора только SPI и групповой адрес получателей.

Значения SPI в диапазоне от 1 до 255 зарезервированы IANA для использования в будущем. Эти значения не будут распределяться агентством IANA, пока их использование не будет оговорено в специальном RFC. Значение SPI = 0 зарезервировано для локального, связанного с реализацией, применения и его недопустимо передавать в сеть. Например, реализация управления ключами может использовать SPI=0 для идентификации отсутствия защищенных связей28 в период, когда реализация IPsec запрашивает новую SA для объекта управления ключами, но данная SA еще не организована.

2.2. Sequence Number — порядковый номер

Это 32-битовое поле, трактуемое, как целое число без знака, содержит значение счетчика пакетов, которое увеличивается на 1 для каждого переданного пакета (счетчик пакетов для SA). Для индивидуальных SA и групповых SA с одним отправителем, последний должен инкрементировать данное поле для каждого переданного пакета. Использование одной SA множеством отправителей допустимо, хотя в общем случае не рекомендуется. ESP не предоставляет возможностей синхронизации порядковых номеров между множеством отправителей или осмысленного счетчика пакетов на стороне получателя и не обеспечивает окна в контексте множества отправителей. Таким образом, для SA с множеством отправителей функции предотвращения повторного использования пакетов ESP становятся недоступными (см. параграфы 3.3.2 и 3.4.3).

Это поле является обязательным и должно присутствовать даже в тех случаях, когда получатель не пользуется услугами по предотвращению повторного использования пакетов для конкретной SA. Обработка поля Sequence Number осуществляется по усмотрению получателя, но все реализации ESP должны обеспечивать возможность обработки, описанной в параграфах 3.3.3. Генерация порядковых номеров и 3.4.3. Проверка порядковых номеров. Таким образом, отправитель должен передавать это поле, но получатель не обязан принимать его во внимание (см. обсуждение проверки порядковых номеров в параграфе 3.4.3. Проверка порядковых номеров.

Счетчики на стороне отправителя и получателя инициализируются нулевым значением при создании SA (первый пакет, переданный с использованием данной SA будет иметь порядковый номер 1; генерация порядковых номеров более подробно описана в параграфе 3.3.3). Если предотвращение повторного использования пакетов включено (используется по умолчанию), передаваемые порядковые номера никогда не должны повторяться. Таким образом, счетчики пакетов на стороне отправителя и получателя должны сбрасываться (путем создания новой SA и нового ключа) до передачи пакета с порядковым номером 2^32 в каждой SA.

2.2.1. Extended Sequence Number — расширенный порядковый номер (64 бита)

В высокоскоростных реализациях IPsec следует предлагать новую опцию для расширения 32-битового поля порядкового номера. Использование поля ESN29 должно согласовываться протоколом управления SA. Отметим, что в IKEv2 это согласование происходит неявно — использование ESN включено по умолчанию, пока явно не выбраны 32-битовые порядковые номера. Поддержка ESN возможна как для индивидуальных, так и для групповых SA.

ESN позволяет использовать для SA 64-битовые порядковые номера (см. Приложение A: Расширенные порядковые номера (64 бита) ). В заголовке ESP каждого пакета для минимизации издержек передаются только младшие 32 бита расширенного порядкового номера, а старшие 32 бита учитываются, как часть порядкового номера, отправителем и получателем и включаются в расчет ICV (если контроль целостности используется). Если реализован отдельный алгоритм контроля целостности, старшие биты включаются в неявный трейлер ESP, но не передаются по аналогии с битами заполнения алгоритма контроля четности. При использовании комбинированного алгоритма, последний определяет судьбу старших битов ESN — передавать или неявно включать в расчет. Детали обработки рассматриваются в параграфе 3.3.2.2.

2.3. Payload Data — данные

Поле переменного размера Payload Data содержит данные (из исходного пакета IP), указываемые полем Next Header. Поле Payload Data является обязательным и размер его составляет целое число байтов. Если алгоритм, используемый для шифрования данных, требует данных криптографической синхронизации (например, вектор инициализации IV), эти данные явно передаются в поле Payload, но не рассматриваются в качестве отдельного поля в ESP (т. е., передача явного IV невидима для ESP — см. Рисунок 2). Любой алгоритм шифрования, требующий таких явных данных синхронизации для каждого пакета, должен указывать размер и структуру таких данных, а также их местоположение в RFC, содержащем спецификацию использования алгоритма с ESP. Обычно IV помещается непосредственно перед зашифрованным текстом (см. Рисунок 2). Если данные синхронизации передаются неявно, алгоритм их выделения должен быть описан в RFC с определением алгоритма шифрования. Если неявные данные криптографической синхронизации (например, вектор инициализации — IV) включаются в поле Payload, обычно эти данные не шифруются (см. таблицы 1 и 2), хотя в некоторых случаях о них говорят, как о части шифрованных данных.

Отметим, что начало заголовка протокола следующего уровня должно быть выровнено относительно заголовка ESP — для IPv4 выравнивание выполняется по 4-байтовой границе, для IPv6 — по 8-байтовой.

В части выравнивания (действительно) зашифрованных данных при наличии IV отметим следующее:

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

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

2.4. Padding — заполнение (для шифрования)

Использование поля Padding обусловлено двумя основными факторами:

  • Если алгоритм шифрования требует, чтобы размер шифруемых данных был кратен некоторому целому числу байтов (например, размер блока при блочном шифровании), поле Padding используется для требуемого алгоритмом выравнивания нешифрованных данных (поля Payload Data, Padding, Pad Length и Next Header) до требуемого алгоритмом размера.

  • Заполнение может потребоваться и без связи с алгоритмом шифрования для обеспечения выравнивания зашифрованных данных по 4-байтовой границе. В частности, поля Pad Length и Next Header должны быть выравниваться по 4-байтовой границе, как показано выше на рисунке, описывающем формат пакетов ESP, для обеспечения выравнивания поля ICV (если оно используется) по 4-байтовой границе.

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

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

  • При использовании заполнения для выравнивания размера шифрованных данных в соответствии с требованиями алгоритма к размеру блока (первое требование выше) при расчете заполнения принимается во внимание поле Payload Data без IV, но со включением всех трейлерных полей ESP. Если комбинированный алгоритм требует передачи SPI и Sequence Number для контроля целостности (например, репликации SPI и Sequence Number в поле Payload Data), тогда реплицированные версии этих полей, а также все связанные данные эквивалента ICV включаются в расчет размера заполнения. Если выбрана опция ESN, старшие 32 бита ESN также учитываются при расчете заполнения, если комбинированный алгоритм требует их передачи для контроля целостности.

  • Для выравнивания поля ICV по 4-байтовой границе (второе требование выше) при расчете заполнения учитывается поле Payload Data, включая IV, Pad Length и Next Header. При использовании комбинированного алгоритма все реплицируемые данные и эквивалент ICV учитываются в Payload Data для расчета заполнения.

Если поле Padding требуется, но алгоритм шифрования не задает содержимого заполнения, должна использоваться описанная ниже обработка, принятая по умолчанию. Байты Padding инициализируются последовательностями целочисленных значений (1 байт, без знака). Первый байт заполнения, добавляемый в конце шифрованных данных, имеет номер 1, а номера последующих байтов монотонно возрастают на единицу, образуя последовательность 1, 2, 3, …. При использовании такой схемы заполнения получателю следует проверять поле Padding (эта схема была выбрана за ее относительную простоту, возможность аппаратной реализации и наличие некоторой защиты от ряда форм атак «cut and paste» в отсутствии механизмов контроля целостности, если получатель проверяет заполнение до расшифровки).

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

2.5. Pad Length — размер заполнения

Поле Pad Length показывает число байтов заполнения, непосредственно предшествующих данному полю в поле Padding. Значение поля лежит в диапазоне от 0 до 255, где нулевое значение говорит об отсутствии байтов заполнения. Как было отмечено выше, в этом поле не учитываются байты заполнения TFC. Поле Pad Length является обязательным.

2.6. Next Header — следующий заголовок

Восьмибитовое обязательное поле Next Header показывает тип данных, содержащихся в поле Payload Data (например, пакет IPv4 или IPv6, заголовок и данные следующего уровня). Значения этого поля выбираются из списка номеров протоколов IP30, представленного на сайте IANA31. Например, значение 4 показывает протокол IPv4, значение 41 — IPv6, а 6 — протокол TCP.

Для упрощения быстрой генерации и отбрасывания трафика заполнения, используемого для обеспечения конфиденциальности потока (см. параграф 2.4), в «бутафорских» пакетах должен указываться идентификатор протокола 59 (нет следующего заголовка). Передающая сторона должна обеспечивать возможность генерации «бутафорских» пакетов с указанным значением поля, а получатель должен быть готов к отбрасыванию таких пакетов, без индикации ошибки. Все остальные заголовки и трейлерные поля ESP (SPI, Sequence Number, Padding, Pad Length, Next Header, ICV) должны присутствовать в «бутафорских» пакетах, но нешифрованную часть данных (кроме поля Next Header), следует делать бессмысленной (например, включать в эту часть поля Payload Data случайные байты). «Бутафорские» пакеты отбрасываются без какого-либо ущерба.

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

Обсуждение. «бутафорские» пакеты могут помещаться в поток со случайными интервалами для маскировки отсутствия реального трафика. Они могут также «формовать» реальный трафик в соответствии с некоторым распределением. Наибольший уровень защиты потоков трафика (TFS32) будет обеспечивать генерация «бутафорских» пакетов со скоростью, обеспечивающей постоянную скорость передачи данных для SA. Если все пакеты имеют одинаковый размер, SA показывает постоянную скорость потока данных, аналогично средствам шифрования каналов на уровне 1 или 2. Однако, неочевидно, что такой подход будет подходить во всех случаях (например, при наличии множества активных SA такое решение будет приводить к неоправданному расходу полосы, сводящему на нет преимущества использования коммутации пакетов вместо коммутации каналов). Разработчикам следует обеспечивать средства управления, позволяющие локальному администратору управлять генерацией «бутафорских» пакетов для целей TFC.

2.7.Заполнение TFC

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

Реализациям IPsec следует обеспечивать возможность заполнения трафика путем добавления байтов после поля Payload Data, но до начала поля Padding. Однако такое заполнение (его часто называют заполнением TFC) может добавляться только в тех случаях, когда поле Payload Data содержит размер дейтаграммы IP. Это требование всегда выполняется в туннельном режиме и может выполняться в транспортном, если протокол следующего уровня (например, IP, UDP, ICMP) содержит точное значение размера. Информация о размере позволяет получателю пакета отбросить заполнение TFC, поскольку известен истинный размер поля Payload Data (поля трейлера ESP находятся путем отсчета от конца пакета ESP). Соответственно, при добавлении заполнения TFC значение поля, содержащего размер дейтаграммы IP недопустимо менять с учетом этого заполнения. Данный стандарт не включает требований к содержимому заполнения.

В принципе, существующие реализации IPsec могли использовать такую возможность и ранее с сохранением прозрачности. Однако по причине того, что получатели не были готовы к работе с таким заполнением, протокол управления SA должен был согласовывать такую возможность до того, как отправитель начнет ее применять, поскольку нужно было обеспечить совместимость с более ранними реализациями. В комбинации с описанным в параграфе 2.6 соглашением об использовании ID 59 реализация ESP может генерировать «пустышки» (dummy) и реальные пакеты с большее широкими пределами изменения размеров в целях поддержки TFC.

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

2.8. ICV — контроль целостности

Поле переменного размера ICV34 вычисляется для заголовка ESP, поля Payload и трейлерных полей ESP. Неявные поля трейлера ESP (заполнение и старшие биты ESN) принимаются во внимание при расчете ICV. Поле ICV является необязательным. Оно присутствует лишь в тех случаях, когда контроль целостности включен и обеспечивается с использованием отдельного алгоритма или комбинированного алгоритма с поддержкой ICV. Размер поля определяется выбранным алгоритмом контроля целостности и связывается с SA. Спецификация алгоритма контроля целостности должна задавать размер ICV, а также правила сравнения и порядок проверки корректности значений.

3. Обработка ESP

3.1. Расположение заголовка ESP

ESP может работать в двух режимах — транспортном и туннельном.

3.1.1. Транспортный режим

           До применения ESP
      -------------------------------
IPv4  |исх. загол. IP|     |        |
      | (любые опции)| TCP | Данные |
      -------------------------------

           После применения ESP
      -----------------------------------------------------
IPv4  |исх. загол. IP| заг. |     |        | Трейлер | ESP|
      | (любые опции)| ESP  | TCP | Данные |   ESP   | ICV|
      -----------------------------------------------------
                              |<---- шифрование ---->|
                        |<------- целостность ------>|


В транспортном режиме35 ESP помещается после заголовка IP и перед заголовком следующего уровня (например, TCP, UDP, ICMP и т. п.). В контексте IPv4 это означает размещениеESP после заголовка IP (и всех опций), но перед протоколом следующего уровня (если для пакета используется также AH, заголовок аутентификации применяется к заголовку ESP, полю Payload, трейлеру ESP и ICV). На рисунке показано расположение ESP в типичном заголовке IPv4 (на этом и следующих рисунках данного параграфа показано поле ICV, реальное наличие которого связано с функциями защиты и выбранными алгоритмом и режимом).

               До применения ESP
      ---------------------------------------
IPv6  | Исходный    |расш. заг.|     |      |
      | заголовок IP|если есть | TCP |Данные|
      ---------------------------------------

               После применения ESP
      -----------------------------------------------------------
IPv6  | исход|hop-by-hop,dest*,|   |dest|   |      |Трейлер| ESP|
      |заг IP|routing,fragment.|ESP|opt*|TCP|Данные|  ESP  | ICV|
      -----------------------------------------------------------
                                   |<---- шифрование ----->|
                               |<------ целостность ------>|

* — при наличии может размещаться до или после ESP или в обоих местах


В контексте IPv6 заголовок ESP представляется как передаваемые «насквозь» данные и ему, таким образом, следует размещаться после заголовков расширения hop-by-hop, routing и fragmentation. Заголовки расширения опций адресата могут размещаться до, после и по обе стороны от заголовка ESP, в зависимости от требуемой семантики. Однако, поскольку ESP защищает только поля, расположенные после заголовка ESP, в общем случае желательно помещать опции адресата после заголовка ESP. На рисунке справа показан заголовок ESP для типичного пакета IPv6 при использовании транспортного режима.

Отметим, что в транспортном режиме для реализаций bump-in-the-stack и bump-in-the-wire, как указано в описании архитектуры защиты, входящие и исходящие фрагменты IP могут требовать от реализации IPsec выполнения дополнительных операций сборки/фрагментации в соответствии с данной спецификацией и для обеспечения прозрачной поддержки IPsec. При выполнении таких операций требуются особые меры осторожности в тех случаях, когда используется множество интерфейсов.

3.1.2. Туннельный режим

           До применения ESP
      ----------------------------
IPv4  |Исходный     |     |      |
      |заголовок IP | TCP |Данные|
      ----------------------------

           После применения ESP
      -------------------------------------------------------------
IPv4  | Новый       |     | Исходный      |   |      |Трейлер| ESP|
      |заголовок IP*| ESP | заголовок IP  |TCP|Данные| ESP   | ICV|
      -------------------------------------------------------------
                          |<---------- Шифрование ---------->|
                    |<------------- Целостность ------------>|
                До применения ESP
      ---------------------------------------
IPv6  | Исходный    |расш загол|     |      |
      | заголовок IP|если есть | TCP |Данные|
      ---------------------------------------

               После применения ESP
      ---------------------------------------------------------------
IPv6  |новый*|нов загол|   |исход*|исх загол|   |      |Трейлер| ESP|
      |заг IP|расшир*  |ESP|заг IP| расшир* |TCP|Данные|ESP    | ICV|
      ---------------------------------------------------------------
                           |<---------- Шифрование ----------->|
                       |<------------ Целостность ------------>|

*Конструкция внешнего заголовка/расширения и изменение внутреннего обсуждаются в документе по архитектуре защиты. Эти элементы не обязательны.


В туннельном режиме «внутренний» заголовок IP указывает исходные (IP) адреса отправителя и получателя, а «внешний» заголовок IP содержит адреса «партнеров» IPsec (защитных шлюзов). Допускается различие версий внутреннего и внешнего заголовков IP (т. е., возможна передача IPv6 по протоколу IPv4 и IPv4 по IPv6). В туннельном режиме ESP защищает вложенный пакет IP целиком, включая внутренний заголовок IP. Положение ESP в туннельном режиме относительно внешнего заголовка IP совпадает с положением ESP в транспортном режиме. На рисунке показано положение ESP для туннельного режима в заголовках типичных пакетов IPv4 и IPv6.

3.2. Алгоритмы

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

3.2.1. Алгоритмы шифрования

Алгоритм шифрования, используемый для защиты пакета ESP задается на уровне SA в которой пакет передается/принимается. Поскольку пакеты IP могут доставляться с нарушением порядка и потерей части пакетов, в каждом пакете должны содержаться все данные, требуемые получателю для выполнения криптографической синхронизации при расшифровке. Эти данные могут передаваться явно в поле payload (например, как описанный выше вектор инициализации IV ) или выделяться из незашифрованной части36 заголовка пакета (внешнего заголовка IP или заголовка ESP). Поскольку ESP использует заполнение незашифрованной части, используемый ESP алгоритм шифрования может демонстрировать характеристики блочного или потокового режима. Поскольку шифрование (конфиденциальность) может быть опциональной услугой (например, в ESP с обеспечением только контроля целостности), этот алгоритм может быть пустым (NULL) [Ken-Arch].

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

3.2.2. Алгоритмы контроля целостности

Алгоритм контроля целостности, применяемый для расчета ICV, задается в SA, используемой для передачи/приема пакетов. Как и алгоритм шифрования, алгоритм контроля целостности, используемый с ESP, должен обеспечивать обработку пакетов, доставленных с нарушением порядка, и быть устойчивым к потере пакетов. Приведенные выше замечания по поводу использования незашифрованных данных для синхронизации получателя применимы и к алгоритму контроля целостности. По причине необязательности использования алгоритма, для него может быть установлено значение NULL.

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

3.2.3. Комбинированные алгоритмы

При использовании комбинированного алгоритма предоставляются услуги обеспечения конфиденциальности и целостности. Как и алгоритм шифрования, комбинированный алгоритм должен обеспечивать обработку пакетов, доставленных с нарушением порядка, и быть устойчивым к потере пакетов. Способы обеспечения комбинированным алгоритмом целостности данных, а также полей SPI и (Extended) Sequence Number, могут меняться в зависимости от алгоритма. Для обеспечения однородного и независимого от алгоритма решения по использованию комбинированных алгоритмов, дополнительная структура полей данных не определяется. Например, поля SPI и Sequence Number могут реплицироваться в шифрованный «конверт», ICV может добавляться после трейлера ESP. Эти детали не видны снаружи.

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

3.3. Обработка исходящих пакетов

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

3.3.1. Нахождение SA

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

3.3.2. Шифрование пакетов и расчет ICV

В этом параграфе мы говорим, что шифрование используется всегда, поскольку оно оказывает влияние на форматирование. Следует понимать, что возможна работа «без шифрования» при использовании пустого (NULL) алгоритма шифрования (RFC 2410). Существует несколько вариантов алгоритмов.

3.3.2.1. Раздельные алгоритмы конфиденциальности и целостности

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

  • Инкапсуляция (в поле ESP Payload Data):

    • для транспортного режима — исходная информация протокола следующего уровня;

    • для туннельного режима — исходная дейтаграмма IP.

  • Добавление требуемого заполнения — необязательное заполнение TFC и заполнение для шифрования.

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

  • Если указаны явные данные криптографической синхронизации (например, IV), они являются входной информацией для алгоритма шифрования в соответствии с его спецификацией и помещаются в поле Payload.

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

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

  • Расчет ICV для пакета ESP без учета самого поля ICV. Таким образом, при вычислении ICV принимаются во внимание поля SPI, Sequence Number, Payload Data, Padding (если используется), Pad Length и Next Header37. Если для SA выбрана опция ESN, старшие 32 бита порядкового номера добавляются при расчете после поля Next Header, но не передаются в пакете.

Для некоторых алгоритмов контроля целостности строка, для которой выполняется расчет ICV, должна иметь размер, кратный значению, задаваемому алгоритмом. Если размер пакета ESP (перечисленные выше поля) не соответствует размеру блока, в конце пакета ESP должно добавляться неявное заполнение (после поля Next Header или после старших 32 битов порядкового номера, если используется ESN). Размер блока и, следовательно, величина заполнения задается спецификацией алгоритма контроля целостности. Заполнение не передается в пакете. Для определения необходимости использования неявного заполнения требуется обращаться к документу, определяющему алгоритм контроля целостности. Если этот документ не дает ответа на вопрос, по умолчанию используется неявное заполнение в соответствии с принятым для алгоритма размером блока (размер пакета делается кратным размеру блока). Если заполнение требуется, но алгоритм не задает его содержимого, для заполнения должны использоваться октеты заполнения с нулевым значением.

3.3.2.2. Комбинированные алгоритмы конфиденциальности и целостности

При использовании комбинированных алгоритмов шифрования/контроля целостности отправитель выполняет перечисленные ниже операции.

  • Инкапсуляция (в поле ESP Payload Data):

  • для транспортного режима — исходная информация протокола следующего уровня;

  • для туннельного режима — исходная дейтаграмма IP.

  • Добавление требуемого заполнения, включая необязательное заполнение TFC и заполнение для шифрования.

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

  • Если указаны явные данные криптографической синхронизации (например, IV), они являются входной информацией для комбинированного алгоритма в соответствии с его спецификацией и помещаются в поле Payload.

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

  • Поля Sequence Number (или Extended Sequence Number) и SPI являются входной информацией для алгоритма, поскольку эти поля используются для контроля целостности. Это означает, что способ включения этих полей зависит от используемого комбинированного алгоритма и не включается в данный стандарт.

  • Явное поле ICV может быть частью пакета ESP при использовании комбинированных алгоритмов. Если оно не используется, обычно в шифрованных данных имеется аналогичное поле. Расположение полей контроля целостности и способ включения полей Sequence Number и SPI в расчет контрольной суммы должны определяться в RFC, содержащих спецификацию комбинированных алгоритмов, используемых с ESP.

3.3.3. Генерация порядковых номеров

Счетчик отправителя инициализируется нулевым значением при организации SA. Отправитель инкрементирует счетчик порядковых номеров (или ESN) для данной SA и помещает младшие 32 бита номера в поле Sequence Number. Таким образом, первый пакет для данной SA получает порядковый номер 1.

Если включена функция предотвращения повторного использования пакетов (включена по умолчанию), отправитель проверяет, не повторяется ли порядковый номер перед вставкой значения в поле Sequence Number. Иными словами, для отправителя недопустимо передавать пакет в SA, если эта передача будет приводить к повторному использованию порядкового номера. Попытка передачи пакета, которая будет вызывать переполнение (переход на новый цикл отсчета) счетчика порядковых номеров приводит к внесению записи в журнал аудита. В эту запись следует включать значение SPI, текущую дату и время, адреса отправителя и получателя, а для IPv6 еще и нешифрованное представление Flow ID.

Отправитель предполагает, что предотвращение повторного использования включено по умолчанию, пока получатель однозначно не укажет обратное (см. параграф 3.4.3) или эта функция была отключена вручную при выборе конфигурации SA. Таким образом, в типичном случае реализация ESP говорит отправителю о необходимости организации новой SA, когда значение Sequence Number (или ESN) достигает максимума и должно вернуться к нулю.

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

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

Если выбрано использование ESN (см. Приложение), в поле Sequence Number передаются только 32 младших бита расширенного порядкового номера, хотя отправитель и получатель поддерживают полные 64-битовые счетчики ESN. При этом старшие 32 бита порядкового номера учитываются алгоритмом контроля четности (например, эти 32 бита могут добавляться при расчете контрольной суммы после поля Next Header, если реализован отдельный алгоритм контроля целостности).

Примечание. Если отправитель отказался от использования функции предотвращения повторов для SA, ему не следует согласовывать использование ESN в протоколе управления SA. Использование ESN вызывает у получателя необходимость поддержки окна anti-replay (для определения корректного значения старших битов ESN, которые используются при расчете ICV), что вступает в противоречие с отказом от предотвращения повторов для SA.

3.3.4. Фрагментация

Если требуется фрагментация IP, она выполняется после обработки ESP в реализации IPsec. Таким образом, в транспортном режиме ESP применяется только к целым дейтаграммам IP38 (не фрагментам). Пакет IPv4, к которому применили ESP, может быть фрагментирован маршрутизаторами на пути и в таком случае фрагменты должны быть собраны до обработки ESP на приемной стороне (этого не возникает для IPv6, где фрагментация по инициативе маршрутизаторов невозможна). В туннельном режиме ESP применяется к пакетам IP, содержимое которых может представлять собой фрагменты пакетов IP. Например, шлюз или реализация IPsec bump-in-the-stack или bump-in-the-wire (см. документ по архитектуре защиты) может использовать ESP для таких фрагментов в туннельном режиме.

Фрагментация, выполняемая реализацией IPsec или маршрутизаторами на пути доставки между партнерами IPsec, существенно снижает производительность. Более того, необходимость сборки фрагментов на приемной стороне до выполнения операций ESP, порождает возможность организации атак на отказ служб. Таким образом, реализация ESP может выбрать отказ от поддержки фрагментации и маркировать передаваемые пакеты флагом DF39 для облегчения определения PMTU40. В любом случае, реализация ESP должна поддерживать генерацию сообщений ICMP PMTU (или использование эквивалентной внутренней сигнализации) для минимизации издержек на фрагментирование. Детали требований, связанных с фрагментацией рассматриваются в документе по архитектуре защиты.

3.4. Обработка входящих пакетов

3.4.1. Сборка фрагментов

Если нужна сборка фрагментов41, она выполняется до обработки AH. Если переданный на обработку AH пакет оказывается фрагментом IP (т. е., поле Offset имеет ненулевое значение или установлен флаг More Fragments), получатель должен отбрасывать такой пакет и делать запись в журнале аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6.

3.4.2. Нахождение SA

При получении пакета, содержащего заголовок ESP, получатель определяет подходящую (одностороннюю) SA путем просмотра SAD. Для индивидуальных SA определение основано на значении SPI, в дополнение к которому может использоваться поле протокола, как описано в параграфе 2.1. Если реализация поддерживает групповой трафик, при определении SA используется также адрес получателя (в дополнение к SPI) и может применяться адрес отправителя, как описано в параграфе 2.1 (более подробно этот процесс описан в документе по архитектуре защиты). Запись SAD для SA показывает также использование поля Sequence Number и его размер (32 или 64 бита) для данной SA. Кроме того, запись SAD для SA задает алгоритм(ы), используемый для расчета ICV и показывает, нужно ли проверять значения ICV.

Если для пакета не найдено защищенной связи, получатель должен отбросить пакет с записью в журнал аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6.

Отметим, что трафик управления SA (такой, как пакеты IKE) не требуется обрабатывать на базе SPI, т. е., этот трафик может демультиплексироваться отдельно (например, на основе полей Next Protocol и Port).

3.4.3. Проверка порядковых номеров

Все реализации ESP должны поддерживать предотвращение повторного использования пакетов42, хотя использование этой функции может быть включено или отключено получателем на уровне SA. Этот сервис недопустимо включать, пока не включены услуги контроля целостности ESP для данной SA, поскольку без этого не обеспечивается защита целостности поля Sequence Number. Функции предотвращения повторного использования применимы как к индивидуальным, так и к групповым SA. Однако данный стандарт не задает механизмов защиты от повторного использования пакетов для SA со множеством отправителей (групповых или индивидуальных). При отсутствии согласования (или настройки вручную) механизма предотвращения повторного использования для таких SA отправителю и получателю рекомендуется проверить запрет использования поля Sequence Number для таких SA (запрет организуется путем согласования или вручную), как описано ниже.

Если получатель не включил предотвращение повторного использования для SA, на входе не проверяются значения поля Sequence Number. Однако с точки зрения отправителя предотвращение повторного использования по умолчанию включено. Чтобы избавить отправителя от ненужной передачи и мониторинга порядковых номеров (см. параграф 3.3.3), получателю следует уведомить отправителя об отказе от поддержки предотвращения повторного использования на этапе организации SA, если применяется протокол организации SA.

Если получатель включил предотвращение повторного использования для SA, он должен установить значение счетчика пакетов для данной SA нулевым на момент организации SA. Для каждого принятого пакета получатель должен проверять, что поле Sequence Number в пакете не совпадает с порядковым номером ни одного из пакетов, полученных в данной SA. Эту проверку следует проводить до выполнения каких-либо операций ESP по отношению к данному пакету сразу после проверки принадлежности пакета к SA для ускорения отбрасывания дубликатов.

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

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

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

«Правый» край окна представляет наибольшее проверенное значение поля Sequence Number для данной SA. Пакеты с номерами, выходящими за «левый» край окна, отбрасываются. Попадающие в окно пакеты проверяются на предмет совпадения порядковых номеров с номерами принятых пакетов для окна. При использовании опции ESN для SA явно передаются только младшие 32 бита расширенного порядкового номера, но получатель использует и старшие 32 бита номера для SA (от локального счетчика) при проверке порядковых номеров. При восстановлении полного порядкового номера, если значение младших 32 битов порядкового номера из принятого пакета меньше младших 32 битов значения счетчика порядковых номеров на стороне получателя, последний предполагает, что значение старших 32 битов номера было инкрементировано, т. е., перемещает номер в новое «подпространство». Этот алгоритм допускает интервал приема для отдельной SA до 232-1 пакетов. Если интервал становится больше, могут использоваться эвристические проверки для ресинхронизации порядковых номеров на приемной стороне, как описано в Приложении).

Если полученный пакет попадает в окно и не является дубликатом или пакет относится к правому краю окна и применяется отдельный алгоритм контроля целостности, получатель выполняет проверку целостности. Если используется комбинированный алгоритм, проверка целостности выполняется вместе с дешифрованием. При отрицательном результате проверки целостности получатель должен отбросить полученную дейтаграмму IP, как некорректную, с записью в журнал аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6. Окно приема обновляется только при положительном результате проверки целостности (при использовании комбинированного алгоритма защищенное значение поля Sequence Number должно также совпадать с порядковым номером защиты от повторного использования пакетов).

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

3.4.4. Проверка ICV

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

3.4.4.1. Раздельные алгоритмы конфиденциальности и целостности

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

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

    Если рассчитанное значение ICV совпадает с полученным в пакете, это говорит о корректности дейтаграммы и она принимается. При отрицательном результате проверки получатель должен отбросить полученную дейтаграмму IP, как некорректную, и внести запись в журнал аудита. В запись следует включать значение SPI, дату и время получения пакета, адреса получателя и отправителя, порядковый номер и незашифрованное значение Flow ID (для IPv6).

Примечание для разработчиков.

Разработчики могут использовать любую последовательность действий, которая дает такой же результат, как перечисленные здесь операции. Сначала значение ICV из принятого пакета сохраняется и заменяется нулем. После этого проверяется общий размер пакета ESP без учета ICV. Если требуется неявное заполнение по размеру блока алгоритма контроля целостности, добавляются нулевые43 байты в конце пакета ESP сразу же вслед за полем Next Header или после старших 32 битов порядкового номера в случае использования ESN. Выполняется расчет ICV и полученный результат сравнивается с сохраненным значением. Правила сравнения задаются спецификацией алгоритма контроля целостности.

  1. Получатель дешифрует в пакете ESP поля Payload Data, Padding, Pad Length и Next Header, используя ключ, алгоритм, режим и данные криптографической синхронизации (если они нужны) в соответствии с SA. Как и в параграфе 3.3.2, мы говорим о том, что шифрование применяется всегда, поскольку оно влияет на формат. При этом предполагается, что может использоваться режим «без шифрования» с пустым (NULL) алгоритмом шифрования (RFC 2410).

    • Если явно указаны данные криптографической синхронизации (например, IV), эти данные берутся из поля Payload и передаются на вход алгоритма дешифровки в соответствии со спецификацией алгоритма.

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

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

  2. Получатель проверяет поле Next Header. Если значение поля равно 59 (нет следующего заголовка), (фиктивный) пакет отбрасывается без дальнейшей обработки.

  3. Получатель восстанавливает исходную дейтаграмму IP:

    • для транспортного режима — внешний заголовок IP плюс исходная информация протокола следующего уровня в поле ESP Payload;

    • для туннельного режима — вся дейтаграмма IP в поле ESP Payload.

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

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

3.4.4.2. Комбинированные алгоритмы конфиденциальности и целостности

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

  1. Дешифровка и проверка целостности полей ESP Payload Data, Padding, Pad Length, Next Header с использованием ключа, алгоритма, режима и данных криптографической синхронизации (если они нужны), указанных SA. Значение SPI из заголовка ESP и значения счетчика пакетов на стороне получателя (преобразованное в соответствии с требованиями параграфа 3.4.3) являются входными данными для этого алгоритма, поскольку нужны для проверки целостности.

    • Если явно указаны данные криптографической синхронизации (например, IV), эти данные берутся из поля Payload и передаются на вход алгоритма дешифровки в соответствии со спецификацией алгоритма.

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

  1. При отрицательном результате проверки целостности, проведенной комбинированным алгоритмом получатель должен отбросить полученную дейтаграмму IP, как некорректную, внеся запись в журнал аудита. В журнальную запись следует включать значение SPI, дату и время приема дейтаграммы, адреса отправителя и получателя, порядковый номер, а также нешифрованное значение Flow ID для IPv6.

  2. Обработка поля заполнения (Padding) в соответствии со спецификацией алгоритма шифрования, если алгоритм уже не выполнил эту операцию.

  3. Проверка поля Next Header. Если значение поля равно 59 (нет следующего заголовка), (фиктивный) пакет отбрасывается без дальнейшей обработки.

  4. Восстановление исходной дейтаграммы IP (туннельный режим) или кадра транспортного уровня (транспортный режим) из поля ESP Payload Data. При этой операции неявно отбрасывается любое (необязательное2) заполнение, используемое для защиты конфиденциальности потока трафика.

4. Аудит

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

  • Для сессии нет корректной защищенной связи (SA). В журнал аудита следует включать значение SPI, дату и время приема дейтаграммы, адреса отправителя и получателя, порядковый номер, а также нешифрованное значение Flow ID для IPv6.

  • Пакет, предложенный для обработки ESP, представляется фрагментом IP (отличное от нуля значение поля OFFSET или установлен флаг MORE FRAGMENTS). В журнал аудита следует включать значение SPI, дату и время приема дейтаграммы, адреса отправителя и получателя, порядковый номер, а также нешифрованное значение Flow ID для IPv6.

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

  • Полученный пакет не прошел проверки на повторное использование. В журнал аудита следует включать значение SPI, дату и время приема дейтаграммы, адреса отправителя и получателя, порядковый номер, а также нешифрованное значение Flow ID для IPv6.

  • Не прошла проверка целостности. В журнал аудита следует включать значение SPI, дату и время приема дейтаграммы, адреса отправителя и получателя, порядковый номер, а также нешифрованное значение Flow ID для IPv6.

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

5. Соответствие требованиям

Реализации, которые заявляют о своем соответствии или совместимости с данной спецификацией, должны полностью реализовать синтаксис и обработку ESP, описанные здесь, для индивидуального трафика, а также должны полностью выполнять все требования документа по архитектуре защиты [Ken-Arch]. В дополнение к этому, реализации, заявляющие поддержку группового трафика, должны соответствовать всем дополнительным требованиям, заданным для такого трафика. При ручном распределении ключей, используемых для расчета ICV, корректная работа системы предотвращения повторного использования пакетов требует аккуратной поддержки состояния счетчика на передающей стороне при замене ключа, поскольку в этом случае невозможно восстановить работу после переполнения счетчика. Таким образом, совместимым со спецификацией реализациям не следует предоставлять такой сервис для SA с распространением ключей вручную.

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

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

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

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

7. Отличия от RFC 2406

Этот документ имеет несколько существенных отличий от RFC 2406.

  • Предоставление только услуг защиты конфиденциальности — в данном документе возможно, а не обязательно.

  • Изменено определение SPI для обеспечения возможности однотипного поиска в SAD для индивидуальных и групповых SA, совместимого со многими технологиями групповой передачи. Для выбора индивидуальных SA значение SPI может использоваться само по себе или в комбинации с протоколом по усмотрению получателя. Для выбора групповых SA значение SPI объединяется с адресом отправителя (и, опционально, с адресом получателя).

  • Добавлены расширенные порядковые номера (ESN) для обеспечения 64-битовой нумерации на высокоскоростных соединениях. Разъяснены требования к отправителю и получателю для групповых SA и защищенных связей с множеством отправителей.

  • Поле Payload — расширена модель для использования комбинированных алгоритмов.

  • Заполнение для повышения конфиденциальности потока трафика — добавлено требование обеспечения возможности добавления байтов после завершения данных IP Payload и до начала поля Padding.

  • Next Header – добавлено требование по обеспечению возможности генерации и отбрасывания фиктивных пакетов заполнения (Next Header = 59).

  • ICV — расширена модель с учетом использования комбинированных алгоритмов.

  • Алгоритмы — добавлена поддержка комбинированных алгоритмов защиты конфиденциальности.

  • Ссылки на обязательные алгоритмы вынесены в отдельный документ.

  • Обработки исходящих и входящих пакетов — сейчас существуют два варианта: (1) с раздельными алгоритмами защиты конфиденциальности и целостности и (2) с комбинированным алгоритмом. Добавление комбинированных алгоритмов привело к созданию разделов шифрования/дешифровки и контроля целостности для обработки как входящих, так и исходящих пакетов.

8. Совместимость с ранними версиями

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

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

Согласование расширенных порядковых номеров (ESN) поддерживается IKE v2 и может быть решено для IKE v1 за счет добавления ESN Addendum к IKE v1 DOI46.

В новом ESP (v3) появились два новых метода повышения уровня конфиденциальности потоков трафика (TFC):

  • произвольное заполнение после окончания пакета IP;

  • условное отбрасывание с использованием Next Header = 59.

Первая возможность относится к тем, которые могут вызывать проблемы на приемной стороне, поскольку поле общего размера пакета IP будет говорить о завершении пакета. Таким образом, все байты заполнения TFC после завершения пакета следует удалять в той же точке при обработке пакета IP после выполнения операций ESP, даже если программы IPsec не удалили это заполнение. Таким образом, эту возможность ESP v3 отправитель может применять независимо от того, использует получатель ESP v2 или ESP v3.

Вторая возможность позволяет отправителю передавать в данных произвольные строки байтов, которые не обязаны быть корректно сформированными пакетами IP (внутри туннеля для целей TFC). Возникает вопрос, что будет делать получатель ESP v2, когда поле Next Header в заголовке пакета ESP будет иметь значение 59. Он может отбросить пакет, обнаружив некорректный заголовок IP, и внести запись в журнал аудита и может продолжить нормальную работу, поскольку иное поведение создавало бы уязвимость к DoS-атакам с использованием трафика от аутентифицированных узлов. Таким образом, эта возможность является оптимизацией, которую отправитель ESP v3 может использовать независимо от того, какая версия реализована на приемной стороне — ESP v2 или ESP v3.

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

Автор благодарит Ran Atkinson, чей вклад был очень важен на начальных этапах разработки IPsec, а также разработчиков первой серии стандартов IPsec RFC 1825 — 1827. Karen Seo заслуживает особой благодарности за помощь при редактировании этой и предыдущей версии спецификации. Автор также благодарит членов рабочих групп IPSEC и MSEC, которые внесли свой вклад в развитие спецификации протокола.

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

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

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

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

[Eas04] 3rd Eastlake, D., «Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)», RFC 4305, December 2005.

[Ken-Arch] Kent, S. and K. Seo, «Security Architecture for the Internet Protocol», RFC 4301, December 2005.

[Pos81] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

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

[Bel96] Steven M. Bellovin, «Problem Areas for the IP Security Protocols», Proceedings of the Sixth Usenix Unix Security Symposium, July, 1996.

[HC03] Holbrook, H. and B. Cain, «Source-Specific Multicast for IP», Work in Progress47, November 3, 2002.

[Kau05] Kaufman, C., Ed., «The Internet Key Exchange (IKEv2) Protocol», RFC 4306, December 2005.

[Ken-AH] Kent, S., «IP Authentication Header», RFC 4302, December 2005.

[Kra01] Krawczyk, H., «The Order of Encryption and Authentication for Protecting Communications (Or: How Secure Is SSL?)», CRYPTO’ 2001.

[NIST01] Federal Information Processing Standards Publication 140-2 (FIPS PUB 140-2), «Security Requirements for Cryptographic Modules», Information Technology Laboratory, National Institute of Standards and Technology, May 25, 2001.

[RFC3547] Baugher, M., Weis, B., Hardjono, T., and H. Harney, «The Group Domain of Interpretation», RFC 3547, July 2003.

[RFC3740] Hardjono, T. and B. Weis, «The Multicast Group Security Architecture», RFC 3740, March 2004.

[Syverson] P. Syverson, D. Goldschlag, and M. Reed, «Anonymous Connections and Onion Routing», Proceedings of the Symposium on Security and Privacy, Oakland, CA, May 1997, pages 44-54.

Приложение A: Расширенные порядковые номера (64 бита)

A1. Обзор

В этом приложении описана схема расширенной порядковой нумерации (ESN) для IPsec (ESP и AH), где используются 64-битовые порядковые номера, но в каждом пакете передаются только младшие 32 бита номера. Описана схема окна, используемого для обнаружения повторно используемых пакетов, а также механизм определения старших битов порядкового номера, используемых для отбрасывания пакетов и расчета ICV. Описан также механизм обработки случаев потери синхронизации для старших (не передаваемых в пакетах) битов порядкового номера.

A2. Окно Anti-Replay

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

Имя

Размер в битах

Значение

W

32

Размер окна

T

64

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

Tl

32

32 младших бита T

Th

32

32 старших бита T

B

64

Нижняя граница окна

Bl

32

32 младших бита B

Bh

32

32 старших бита B

Seq

64

Порядковый номер полученного пакета

Seql

32

32 младших бита Seq

Seqh

32

32 старших бита Seq

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

  • Случай A: Tl >= (W — 1) все окно находится в одном подпространстве порядковых номеров (Рисунок 3)

  • Th+1                         *********
    
    Th               =======*****
    
          --0--------+-----+-----0--------+-----------0--
                     Bl    Tl            Bl
                                    (Bl+2^32) mod 2^32

    Рисунок 3. Случай A.


    Случай B: Tl < (W — 1) окно захватывает части двух смежных подпространств порядковых номеров (Рисунок 4).

Th                           ====**************

Th-1                      ===

      --0-----------------+--0--+--------------+--0--
                          Bl    Tl            Bl
                                         (Bl+2^32) mod 2^32

Рисунок 4. Случай B.


На рисунках нижняя линия —- показывает смежные подпространства порядковых номеров, а 0 указывает начало каждого подпространства. Короткая двойная линия === показывает применимые старшие биты, а ==== представляет окно. Звездочки **** обозначают грядущие номера, т. е., номера номера, превышающие максимальный аутентифицируемый в данный момент номер (ThTl).

A2.1. Использование окна Anti-Replay и управление им

Окно предотвращения повторов можно рассматривать как строку битов размером W (W = T — B + 1 и не может превышать 232 — 1). Младший бит строки соответствует B, а старший — T и каждый порядковый номер от Bl до Tl представлен соответствующим битом. Значение бита показывает, был ли пакет с соответствующим номером принят и аутентифицирован, что позволяет обнаружить и отбросить повторные пакеты.

При получении и проверке корректности пакета с 64-битовым порядковым номером (Seq), превышающим T:

  • B увеличивается на (Seq — T);

  • отбрасываются (Seq — T) битов в левой части окна;

  • добавляются (Seq — T) битов в правой части окна;

  • устанавливается «верхний» бит для индикации приема и аутентификации пакета с данным порядковым номером;

  • сбрасываются новые биты между T и «верхним» битом для индикации отсутствия принятых пакетов с соответствующими порядковыми номерами;

  • для T устанавливается значение нового порядкового номера.

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

  • Случай A: Если Seql >= Bl (где Bl = Tl — W + 1) И Seql <= Tl, проверяется соответствующий бит окна. Если пакет с номером Seql уже был принят (бит окна установлен), он отбрасывается. В противном случае проверяется целостность пакета. Проверка старших битов номера (Seqh) описана в параграфе A2.2.

Случай B: Если Seql >= Bl ( где Bl = Tl — W + 1) ИЛИ Seql <= Tl, проверяется соответствующий бит окна. Если пакет с номером Seql уже был принят (бит окна установлен), он отбрасывается. В противном случае проверяется целостность пакета. Проверка старших битов номера (Seqh) описана в параграфе A2.2.

A2.2. Определение старших битов (Seqh) порядкового номера

+ Для случая A (Рисунок 3):
  Если Seql >= Bl (где Bl = Tl - W + 1), то Seqh = Th
  Если Seql <  Bl ( где Bl = Tl - W + 1), то Seqh = Th + 1

+ Для случая B (Рисунок 4):
  Если Seql >= Bl ( где Bl = Tl - W + 1), то Seqh = Th - 1
  Если Seql <  Bl ( где Bl = Tl - W + 1), то Seqh = Th


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

A2.3. Пример псевдокода

Приведенный ниже псевдокод иллюстрирует описанные выше алгоритмы предотвращения повторного использования и контроля целостности пакетов. Значения Seql, Tl, Th и W являются 32-битовыми целыми числами без знака. Используется арифметика по модулю 232.

        Если (Tl >= W - 1)                        Случай A
            Если (Seql >= Tl - W + 1)
                Seqh = Th
                Если (Seql <= Tl)
                    Если (проверка на предмет повтора прошла)
                        Если (проверка целостности прошла)
                            Установить бит, соответствующий Seql
                            Принять пакет
                        Иначе отбросить пакет
                    Иначе отбросить пакет
                Иначе
                    Если (проверка целостности прошла)
                        Tl = Seql (shift bits)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет
            Иначе
                Seqh = Th + 1
                Если (проверка целостности прошла)
                    Tl = Seql (shift bits)
                    Th = Th + 1
                    Установить бит, соответствующий Seql
                    Принять пакет
                Иначе отбросить пакет
        Иначе                                    Случай B
            Если (Seql >= Tl - W + 1)
                Seqh = Th - 1
                Если (проверка на предмет повтора прошла)
                    Если (pass integrity check)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет
                Иначе отбросить пакет
            Иначе
                Seqh = Th
                Если (Seql <= Tl)
                    Если (проверка на предмет повтора прошла)
                        Если (проверка целостности прошла)
                            Установить бит, соответствующий Seql
                            Принять пакет
                        Иначе отбросить пакет
                    Иначе отбросить пакет
                Иначе
                    Если (проверка целостности прошла)
                        Tl = Seql (shift bits)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет

A3. Обработка потери синхронизации в результате больших потерь пакетов

При потере 232 или более пакетов подряд для одной SA отправитель и получатель теряют синхронизацию старших битов порядкового номера, т. е., уравнения параграфа B2.2 не будут давать корректного значения. Пока эта проблема не будет обнаружена и разрешена, последующие пакеты для данной SA не могут быть аутентифицированы и будут отбрасываться. Описанную ниже процедуру восстановления синхронизации следует поддерживать во всех реализациях IPsec (ESP или AH), которые работают с ESN.

Отметим, что описанный вариант экстремальных потерь представляется маловероятным для SA, использующих протокол TCP, поскольку отправитель, не получающий пакетов ACK в ответ на переданные пакеты, будет останавливать передачу до того, как будут потеряны 232. И другие приложения с двухсторонним обменом данными (даже работающие по протоколу UDP) при таких экстремальных потерях будут включать тот или иной тайм-аут. Однако приложения с односторонним потоком трафика, работающие по протоколу UDP, могут не поддерживать средств автоматического детектирования экстремальных потерь пакетов и, следовательно, требуется обеспечить метод восстановления для таких ситуаций.

Предлагаемое решение призвано:

  • минимизировать влияние на обработку нормального трафика;

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

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

A3.1. Включение ресинхронизации

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

A3.2. Процесс ресинхронизации

Когда значение счетчика некорректных пакетов достигает заданного порога, выбирается «плохой» пакет, для которого процедура аутентификации повторяется с использованием следующего большего значения для старшей части расширенного порядкового номера (Seqh). Значение старшей части номера увеличивается на 1 при каждой проверке. Число попыток проверки следует ограничивать на случай того, что выбранный для проверки пакет оказался «из прошлого» или является поддельным. Максимальное число попыток задается локальным параметром. Поскольку значение Seqh неявно помещается после данных AH (или ESP), может оказаться возможной оптимизация процедуры восстановления за счет выполнения процедуры контроля целостности пакета с использованием нарастающих значений Seqh для расчета ICV. При успешной аутентификации пакета с помощью описанной процедуры значение счетчика некорректных пакетов сбрасывается и устанавливается значение T, определенное по прошедшему проверку пакету.

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

Адрес автора

Stephen Kent

BBN Technologies

10 Moulton Street

Cambridge, MA 02138

USA

Phone: +1 (617) 873-3988

EMail: kent@bbn.com

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Encapsulating Security Payload — инкапсулированные защищенные данные.

2Security Association.

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

4Traffic flow confidentiality.

5Система ESP может быть развернута, как часть системы TFC более высокого уровня (например, Onion Routing [Syverson]), но такие системы выходят за пределы настоящего стандарта.

6Значения идентификаторов протоколов приведены на странице http://www.iana.org/assignments/protocol-numbers.

7Security Parameters Index — список параметров защиты.

8Sequence Number — порядковый номер.

9Integrity Check Value — контрольная сумма для проверки целостности.

10Initialization Vector.

11Cipher Block Chaining — сцепка шифрованных блоков.

12На рисунке показаны «биты в среде передачи» — даже при использовании расширенных порядковых номеров передаваемые пакеты включают только младшие 32 бита порядкового номера (см. параграф 2.2.1).

13M = обязательно; O = опция; D = фикция.

14Ciphertext, если выбрано шифрование.

15В туннельном режиме дейтаграмма IP, в транспортном — следующий заголовок и данные.

16См. параграф 2.1.1

17Обязательно при использовании отдельного механизма контроля целостности.

18M = обязательно; O = опция; D = фикция

19В туннельном режиме дейтаграмма IP, в транспортном — следующий заголовок и данные.

20Может использоваться только при указании реального размера данных (payload).

21См. параграф 2.1.1

22Передача этого поля определяется алгоритмом, но в любом случае поле является «невидимым» для ESP.

23Присутствие этого поля определяется спецификацией алгоритма.

24Security Association Database.

25Ternary Content-Addressable Memory — ассоциативная память.

26Group Domain of Interpretation.

27Source-Specific Multicast.

28No Security Association Exists.

29Extended Sequence Number — расширенный порядковый номер.

30Реестр «IP Protocol Numbers».

31В настоящее время этот список доступен по ссылке http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml. Прим. перев.

32Traffic Flow Security — защита потока трафика.

33Traffic Flow Confidentiality — конфиденциальность потока трафика.

34Integrity Check Value — значение контроля целостности.

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

36Отметим, что при использовании незашифрованной части заголовка для создания IV, эта информация может стать критичной для защиты и, таким образом, граница защиты, связанная с процессом шифрования, может расширяться. Например, при использовании ESP Sequence Number для определения IV логика генерации значения Sequence Number (программная или аппаратная) будет оцениваться, как часть реализации алгоритма. В случае FIPS 140-2 [NIST01] это будет существенно расширять границы оценки криптографического модуля.

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

38Как отмечено в конце параграфа 3.1.1, реализации bump-in-the-stack и bump-in-the-wire могут сначала выполнять сборку фрагментов, созданных локальным уровнем IP, потом выполнять обработку IPsec и снова фрагментировать полученный в результате пакет.

В случае IPv6 реализации bump-in-the-stack и bump-in-the-wire должны проверять все расширенные заголовки, а также значения флага More и поля Fragment Offset для обнаружения фрагментирования. Если фрагментирование используется, пакеты должны быть собраны до выполнения операций IPsec.

39Не фрагментировать. Прим. перев.

40Path MTU — размер максимального передаваемого блока для пути.

41При сборке пакетов текущая спецификация IPv4 не требует обнуления поля Offset и сброса флага More Fragments. Для корректной обработки собранных из фрагментов пакетов IPsec (вместо отбрасывания, принятого для фрагментов) реализация IP должна выполнять обе указанные операции после сборки пакета из фрагментов.

42Anti-replay service.

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

44Если это заполнение используется, оно размещено после дейтаграммы IP (или кадра транспортного уровня) и перед полем Padding (см. параграф 2.4).

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

46Domain of Interpretation — область интерпретации.

47Работа завершена и опубликована в RFC 4607. Прим. перев.

48Для окна при расширенной нумерации не вводится дополнительных требований по поддержке минимального или рекомендуемого размера окна, сверх тех требований (32 и 64 пакета, соответственно), которые уже заданы для окна при 32-битовой нумерации. Однако разработчикам предлагается масштабировать размер окна в соответствии со скоростью интерфейсов, поддерживаемых реализацией, использующей опцию ESN. Описанный ниже механизм предполагает, что размер окна не превышает 231 пакета.

 

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

RFC 4302 IP Authentication Header

Network Working Group                                        S. Kent
Request for Comments: 4302                          BBN Technologies
Obsoletes: 2402                                        December 2005
Category: Standards Track

Идентификационный заголовок IP

IP Authentication Header

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

В этом документе описана обновленная версия аутентификационного заголовка IP (AH), который разработан для обеспечения услуг проверки подлинности (аутентификации) в IPv4 и IPv6. Этот документ отменяет действие RFC 2402 (ноябрь 1998).

1. Введение

В документе предполагается, что читатель достаточно знаком с терминами и концепциями, изложенными в документе «Архитектура защиты для протокола IP» [Ken-Arch], далее называемом для краткости описанием архитектуры. В частности, читателю следует понимать определения услуг по защите, обеспечиваемых ESP1 [Ken-ESP] и AH, концепцию защищенных связей, способы использования ESP вместе с аутентификационным заголовком AH, а также различные опции управления ключами, поддерживаемые для ESP и AH.

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

Аутентификационный заголовок IP (AH) используется для обеспечения целостности и аутентификации источника данных для дейтаграмм IP (далее для краткости будет использоваться термин «целостность») без организации специальных соединений и защиты против повторного использования пакетов. Второй, необязательный, сервис может выбираться получателем при создании защищенной связи (SA2). Протокол по умолчанию требует от отправителя увеличивать порядковые номера для предотвращения повторного использования пакетов, но этот механизм работает только при проверке порядковых номеров на приемной стороне. Для использования расширенных возможностей порядковой нумерации AH вносит требование к протоколу управления SA по обеспечению возможности согласования этой новой функции (см. параграф 2.5.1).

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

AH может использоваться в комбинации с ESP [Ken-ESP] или путем вложения [Ken-Arch]. Услуги по защите могут обеспечиваться между парой взаимодействующих хостов, парой защитных шлюзов, а также между защитным шлюзом и хостом. ESP может использоваться для обеспечения такой же защиты от повторного использования пакетов и аналогичной защиты целостности, а также обеспечивает дополнительную защиту конфиденциальности (шифрование). Основным различием между защитой целостности, обеспечиваемой ESP и AH является расширение покрытия. В частности, ESP не защищает никаких полей заголовка IP, пока эти поля не инкапсулируются ESP (например, за счет использования туннеля). Более детальное описание использования AH и ESP в разных сетевых средах приводится в документе, посвященном архитектуре защиты [Ken-Arch].

В разделе 7 кратко рассмотрены отличия этого документа от RFC 2402 [RFC2402].

2. Формат заголовка аутентификации

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   |  Payload Len  |          RESERVED             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Security Parameters Index (SPI)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Sequence Number                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                Integrity Check Value-ICV (перемен.)           |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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


В протокольный заголовок (IPv4, IPv6 или расширение IPv6), непосредственно предшествующий заголовку AH, следует помещать значение 51 в поле Protocol (IPv4) или Next Header (IPv6, включая расширение) [DH98]. Рисунок 1 показывает формат заголовка AH.

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

Число битов

Когда требуется3

Покрывается

Передается

IP Header

переменное

M

4

да

Next Header

1

M

да

да

Payload Len

1

M

да

да

RESERVED

2

M

да

да

SPI

4

M

да

да

Seq# (младшие 32 бита)

4

M

да

да

ICV

переменное

M

да5

да

IP datagram6

переменное

M

да

да

Seq# (старшие 32 бита)

4

При поддержке ESN7

да

нет

ICV Padding

переменное

Если нужно

нет

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

Примечание. Предполагается, что все криптографические алгоритмы IPsec используют на входе канонический сетевой порядок байтов (см. Приложение к RFC 791 [RFC791]) и на выходе дают результат также в каноническом сетевом порядке байтов.

При передаче пакетов IP также используется сетевой порядок байтов.

AH не содержит номера версии, следовательно для обеспечения совместимости со старыми версиями информация о версии аутентификационного заголовка должна передаваться с помощью механизмов сигнализации между партнерами IPsec (например, IKE [IKEv2] или настройка по отдельному каналу).

2.1. Next Header — следующий заголовок

Восьмибитовое поле Next Header показывает тип информации, расположенной после аутентификационного заголовка AH. Значения этого поля выбираются из списка номеров протоколов IP9, представленного на сайте IANA10. Например, значение 4 показывает протокол IPv4, значение 41 — IPv6, а 6 — протокол TCP.

2.2. Payload Length — размер данных

Это 8-битовое поле указывает размер заголовка AH в 32-битовых словах (4-байтовых блоках) минус 2. Например, если алгоритм проверки целостности использует 96-битовое аутентификационное значение, поле длины будет иметь значение 4 (3 слова полей фиксированной длины и 3 слова для ICV минус 2). Для IPv6 общий размер заголовка должен быть кратным 8 октетам (отметим, что хотя IPv6 [DH98] характеризует AH как внешний заголовок, его размер измеряется в 32-битовых словах, а не 64-битовых, как в заголовках расширения IPv6). Комментарии по учету байтов заполнения приведены в параграфах 2.6 и 3.3.3.2.1.

2.3. Reserved — резерв

Это 16-битовое поле зарезервировано для использования в будущем. Отправитель должен устанавливать для этого поля нулевое значение, а получателю следует игнорировать значение этого поля. Отметим, что значение этого поля (0) учитывается при вычислении ICV, но игнорируется получателем.

2.4. Security Parameters Index (SPI) — список параметров защиты

SPI представляет собой произвольное 32-битовое значение, используемое получателем для аутентификации SA, с которой связан входящий пакет. Для индивидуальных SA, значение SPI может само по себе аутентифицировать SA или использоваться в комбинации с типом протокола IPsec (в данном случае AH). Поскольку для индивидуальных SA значение SPI генерируется получателем, решение вопроса о достаточности этого значения для аутентификации SA или необходимости использования в комбинации с типом протокола IPsec определяется локальными условиями. Поле SPI является обязательным и упомянутый выше механизм отображения входящего трафика на индивидуальные SA должен поддерживаться всеми реализациями AH.

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

Во многих защищенных multicast-архитектурах (например, [RFC3740]) центральный контроллер группы/сервер ключей сам выделяет для группы значение SPI. Выделение SPI не согласуется и не координируется с подсистемами управления ключами (например, IKE) на конечных узлах группы. Следовательно, возникает возможность совпадения значений SPI для групповой и индивидуальной SA. Поддерживающие групповую адресацию реализации IPsec должны корректно демультиплексировать входящий трафик даже в случаях совпадения значений SPI.

Каждая запись в базе данных защищенных связей (SAD11) [Ken-Arch] должна указывать, по каким критериям в дополнение к SPI отыскивается SA – получатель, получатель и отправитель. Для групповых SA поле протокола не используется при поиске SA. Для каждого входящего пакета с защитой IPsec реализация должна произвести поиск в SAD и найти запись, наиболее точно соответствующую идентификатору SA. Если обнаруживается более одной записи SAD, соответствующей значению SPI, выбирается запись по наиболее точному соответствию получателя или получателя и отправителя (как указано в записи SAD). Таким образом, логический порядок поиска в SAD имеет вид:

  1. Поиск в базе SAD соответствия {SPI, адрес получателя, адрес отправителя}. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае выполняется п. 2.

  2. Поиск в базе SAD соответствия {SPI, адрес получателя}. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае выполняется п. 3.

  3. Поиск в базе SAD соответствия {SPI}, если получатель выбрал поддержку одного пространства SPI для AH и ESP, или {SPI, протокол} в противном случае. Если запись SAD найдена, входящий пакет AH обрабатывается с найденной записью SAD. В противном случае пакет отбрасывается с записью в журнал аудита.

На практике реализация может выбрать любой метод ускорения поиска, но наблюдаемое извне поведение должно соответствовать описанному выше поиску в SAD. Например, программные реализации могут индексировать хэш-таблицу SPI. Записи SAD в хэш-таблице сортируются в связный список, в котором записи для SA с большим соответствием располагаются ближе к началу, а с меньшим соответствием — ближе к концу списка. В аппаратных реализациях поиск максимального соответствия может ускоряться встроенными средствами с использованием общедоступной технологии TCAM12.

Индикация использования адресов отправителя и получателя при поиске соответствия для отображения входящего трафика IPsec на SA должна выполняться при настройке конфигурации SA вручную или путем согласования параметров с использованием протокола управления SA (например, IKE или GDOI13 [RFC3547]). Обычно группы SSM14 [HC03] используют трехкомпонентный идентификатор SA, включающий SPI, групповой адрес получателей и адрес отправителя. SA группы Any-Source Multicast требует в качестве идентификатора только SPI и групповой адрес получателей.

Значения SPI в диапазоне от 1 до 255 зерезервированы IANA для использования в будущем. Эти значения не будут распределяться агентством IANA, пока их использование не будет оговорено в специальном RFC. Значение SPI = 0 зарезервировано для локального, связанного с реализацией, применения и его недопустимо передавать в сеть. Например, реализация управления ключами может использовать SPI=0 для идентификации отсутствия защищенных связей15 в период, когда реализация IPsec запрашивает новую SA для объекта управления ключами, но данная SA еще не организована.

2.5. Sequence Number — порядковый номер

Это 32-битовое поле, трактуемое, как целое число без знака, содержит значение счетчика пакетов, которое увеличивается на 1 для каждого переданного пакета (счетчик пакетов для SA). Для индивидуальных SA и групповых SA с одним отправителем, последний должен инкрементировать данное поле для каждого переданного пакета. Использование одной SA множеством отправителей допустимо, хотя в общем случае не рекомендуется. AH не предоставляет возможностей синхронизации порядковых номеров между множеством отправителей или осмысленного счетчика пакетов на стороне получателя и не обеспечивает окна в контексте множества отправителей. Таким образом, для SA с множеством отправителей функции предотвращения повторного использования пакетов AH становятся недоступными (см. параграфы 3.3.2 и 3.4.3).

Это поле является обязательным и должно присутствовать даже в тех случаях, когда получатель не пользуется услугами по предотвращению повторного использования пакетов для конкретной SA. Обработка поля Sequence Number осуществляется по усмотрению получателя, но все реализации AH должны обеспечивать возможность обработки, описанной в параграфах 3.3.2. Генерация порядковых номеров и 3.4.3. Проверка порядковых номеров. Таким образом, отправитель должен передавать это поле, но получатель не обязан принимать его во внимание.

Счетчики на стороне отправителя и получателя инициализируются нулевым значением при создании SA (первый пакет, переданный с использованием данной SA будет иметь порядковый номер 1; генерация порядковых номеров более подробно описана в параграфе 3.3.2). Если предотвращение повторного использования пакетов включено (используется по умолчанию), передаваемые порядковые номера никогда не должны повторяться. Таким образом, счетчики пакетов на стороне отправителя и получателя должны сбрасываться (путем создания новой SA и нового ключа) до передачи пакета с порядковым номером 2^32 в каждой SA.

2.5.1. Extended Sequence Number — расширенный порядковый номер (64 бита)

В высокоскоростных реализациях IPsec следует предлагать новую опцию для расширения 32-битового поля порядкового номера. Использование поля ESN16 должно согласовываться протоколом управления SA. Отметим, что в IKEv2 это согласование происходит неявно — использование ESN включено по умолчанию, пока явно не выбраны 32-битовые порядковые номера. Поддержка ESN возможна как для индивидуальных, так и для групповых SA.

ESN позволяет использовать для SA 64-битовые порядковые номера (см. Приложение B: Расширенные порядковые номера (64 бита) ). В заголовке AH каждого пакета передаются только младшие 32 бита расширенного порядкового номера, а старшие 32 бита учитываются, как часть порядкового номера, отправителем и получателем и включаются в расчет ICV, но не передаются.

2.6. Integrity Check Value (ICV) — контроль целостности

Это поле переменной длины содержит значение контрольной суммы ICV17 для данного пакета. Размер поля должен быть кратным 32 битам как для IPv4, так и для IPv6. Обработка ICV рассматривается в параграфах 3.3.3. Расчет ICV и 3.4.4. Проверка ICV. Это поле может включать явное заполнение для обеспечения кратности размера заголовка AH в целом 32 (IPv4) или 64 (IPv6) битам. Заполнение должны поддерживать все реализации и размер заполнения должен быть минимально достаточным для выравнивания заголовков в соответствии с требованиями IPv4/IPv6. Подробное описание расчета размера области заполнения приведено в параграфе 3.3.3.2. Заполнение и расширенные порядковые номера. Спецификация алгоритма контроля целостности должна включать размер ICV, а также правила сравнения и этапы обработки при проверке целостности.

3. Обработка аутентификационного заголовка AH

3.1. Местоположение AH

AH может работать в двух режимах — транспортном и туннельном. Более подробное описание этих режимов и рекомендации по выбору приводится в документе, посвященном архитектуре защиты.

3.1.1. Транспортный режим

            До применения AH
      ----------------------------
IPv4  |Исх. заг. IP |     |      |
      |   (опции)   | TCP | Data |
      ----------------------------

             После применения AH
      -------------------------------------------------------
IPv4  |Исходный заголовок IP (опции) | AH | TCP |    Data   |
      -------------------------------------------------------
      |<- Обраб. переменного поля  ->|<-  неизменые поля  ->|
      |<----- аутентифицировано кроме перемен. полей  ----->|


В транспортном режиме18 AH помещается между заголовком IP и заголовком протокола следующего уровня (например, TCP, UDP, ICMP и т. п.) или перед другими заголовками IPsec, если они имеются. В контексте IPv4 это говорит о размещении AH после заголовка IP (и всех опций этого заголовка), но перед заголовком протокола следующего уровня. На рисунке справа показан заголовок типичного пакета IPv4 до защиты и положение заголовка AH при работе в транспортном режиме.

В контексте IPv6 заголовок AH представляется, как передаваемые «насквозь» данные и, следовательно, ему надлежит размещаться после заголовков расширения (hop-by-hop, routing, fragmentation). Опции получателя в расширенном заголовке могут располагаться перед заголовком AH, после него или по обе стороны, в зависимости от желаемой семантики. На приведенном ниже рисунке показано размещение AH для транспортного режима в типичном пакете IPv6.

                 До применения AH
      -----------------------------------------
IPv6  |             | расш. заг|     |        |
      | Исх. заг. IP|если есть | TCP | Данные |
      -----------------------------------------

                 После применения AH
      ------------------------------------------------------------
IPv6  |             |hop-by-hop, dest*, |    | dest |     |      |
      | Исх. заг. IP|routing, fragment. | AH | opt* | TCP | Data |
      ------------------------------------------------------------
      |<--- Обраб. переменного поля  -->|<--  неизменые поля  -->|
      |<---- аутентифицировано кроме перемен. полей  ----------->|

* при наличии может располагаться перед AH, после AH или в обоих местах


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

Отметим, что в транспортном режиме для реализаций bump-in-the-stack и bump-in-the-wire, как определено в архитектуре защиты, входящие и исходящие фрагменты IP могут потребовать от реализации IPsec выполнения дополнительных операций фрагментации/сборки дейтаграмм IP для выполнения требования данной спецификации и обеспечения прозрачной поддержки IPsec. Особое внимание следует обращать на выполнение таких операций при использовании множества интерфейсов.

3.1.2. Туннельный режим

     ----------------------------------------------------------------
IPv4 |                              |    | Исх. заг. IP* |   |      |
     |Новый заголовок IP*  (опции)  | AH |    (опции)    |TCP| Data |
     ----------------------------------------------------------------
     |<-  обработка измен. полей  ->|<------ неизменные поля  ----->|
     |<-  аутентифицировано кроме изменяемых полей в новом загол. ->|

     --------------------------------------------------------------
IPv6 |           |расширен. |    |            |расширен. |   |    |
     |Нов. загол*|заголовки*| AH |Исх. заг.IP*|заголовки*|TCP|Data|
     --------------------------------------------------------------
     |<-- Обр перем поля -->|<---------  неизменые поля  -------->|
     |<--аутентифицировано кроме изменяемых полей в новом загол.->|

* при использовании создается внешний заголовок IP и меняется внутренний, как описано в документе, посвященном архитектуре защиты. Расширенные заголовки могут отсутствовать.


В туннельном режиме «внутренний» заголовок IP содержит исходные адреса получателя и отправителя, а «внешний» заголовок IP — адреса «партнеров IPsec (например, защитных шлюзов). Во внутреннем и внешнем заголовках могут использоваться разные версии IP (например, IPv6 через туннель IPv4 или IPv4 через туннель IPv6). В туннельном режиме заголовок AH защищает внутренний пакет целиком (включая его заголовок). Положение AH в туннельном режиме относительно внешнего заголовка IP совпадает с положением AH в транспортном режиме. На рисунке справа показано размещение AH в типичных пакетах IPv4 и IPv6 для туннельного режима.

3.2. Контроль целостности

Алгоритм контроля целостности, используемый для расчета ICV, задается SA. Для связи «точка-точка» к числу подходящих алгоритмов контроля целостности относится MAC19 с использованием симметричных алгоритмов шифрования (например, AES [AES]) или необратимые хэш-функции типа MD5, SHA-1, SHA-256 и т. п.). Для групповых приложений разработан большой набор криптографических стратегий и продолжаются исследования в этой области.

3.3. Обработка исходящих пакетов

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

3.3.1. Нахождение SA

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

3.3.2. Генерация порядковых номеров

Счетчик отправителя инициализуируется нулевым значением при организации SA. Отправитель инкрементирует счетчик порядковых номеров (или ESN) для данной SA и помещает младшие 32 бита номера в поле Sequence Number. Таким образом, первый пакет для данной SA получает порядковый номер 1.

Если включена функция предотвращения повторного использования пакетов (включена по умолчанию), отправитель проверяет, не повторяется ли порядковый номер перед вставкой значения в поле Sequence Number. Иными словами, для отправителя недопустимо передавать пакет в SA, если эта передача будет приводить к повторному использованию порядкового номера. Попытка передачи пакета, которая будет вызывать переполнение (переход на новый цикл отсчета) счетчика порядковых номеров приводит к внесению записи в журнал аудита. В эту запись следует включать значение SPI, текущую дату и время, адреса отправителя и получателя, а для IPv6 еще и нешифрованное представление Flow ID.

Отправитель предполагает, что предотвращение повторного использования включено по умолчанию, пока получатель однозначно не укажет обратное (см. параграф 3.4.3) или эта функция была отключена вручную при выборе конфигурации SA. Таким образом, в типичном случае реализация AH говорит отправителю о необходимости организации новой SA, когда значение Sequence Number (или ESN) достигает максимума и должно вернуться к нулю.

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

Если выбрано использование ESN (см. Приложение B), в поле Sequence Number передаются только 32 младших бита расширенного порядкового номера, хотя отправитель и получатель поддерживают полные 64-битовые счетчики ESN. При этом старшие 32 бита порядкового номера учитываются в контрольной сумме ICV.

Примечание. Если отправитель отказался от использования функции предотвращения повторов для SA, ему не следует согласовывать использование ESN в протоколе управления SA. Использование ESN вызывает у получателя необходимость поддержки окна anti-replay (для определения корректного значения старших битов ESN, которые используются при расчете ICV), что вступает в противоречие с отказом от предотвращения повторов для SA.

3.3.3. Расчет ICV

При расчете ICV в AH учитываются следующие поля:

  • Поля заголовка IP или расширения перед заголовком AH, которые не изменяются при передаче или предсказуемы на момент прибытия в конечную точку SA;

  • заголовок AH (поля Next Header, Payload Len, Reserved, SPI, Sequence Number — младшие 32 бита), поле ICV, значение которого на момент расчета принимается нулевым, и явные байты заполнения (если они есть);

  • все данные после заголовка AH предполагаются неизменными при передаче и учитываются в расчете;

  • старшие биты ESN (если расширенная нумерация используется) и все байты неявного заполнения, требуемые алгоритмом контроля целостности.

3.3.3.1. Обработка изменяемых полей

Если поле меняется в процессе передачи, при расчете ICV значение этого поля принимается нулевым. Если поле изменчиво, но его значение на уровне получателя IPsec предсказуемо, это значение может использоваться при расчете ICV. Значение поля Integrity Check Value при расчете также принимается нулевым. Отметим, что использование нулевого значения поля вместо пропуска этого поля при расчете сохраняет выравнивание для расчета ICV. Кроме того, заполнение неучитываемых полей нулями предотвращает их изменение в процессе передачи, хотя содержимое этих полей и не покрывается явно ICV.

При создании нового расширения заголовка или опции IPv4 они определяются в соответствующем RFC и в сецификацию (раздел «Вопросы безопасности») следует включать инструкции по учету полей при расчете ICV для AH. Если реализация IP (v4 или v6) встречается с нераспознанным расширением заголовка, она должна отбросить такой пакет и передать отправителю сообщение ICMP. IPsec просто не увидит такого пакета. Если реализация IPsec сталкивается с нераспознанной опцией IPv4, эту опцию следует целиком обнулить, используя второй байт опции в качестве ее размера. Опции IPv6 (в заголовках Destination Extension или заголовке Hop-by-Hop Extension) содержат флаг изменчивости, который определяет порядок обработки такой опции.

3.3.3.1.1. Расчет ICV для IPv4

3.3.3.1.1.1. Поля основного заголовка

Базовые поля заголовка IPv4 характеризуются следующим образом:

Неизменные

Version

Internet Header Length

Total Length

Identification

Protocol (здесь должно быть значение для AH)

Source Address

Destination Address (без строгой или нестрогой маршрутизации, заданной отправителем)

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

Destination Address (со строгой или нестрогой маршрутизацией, заданной отправителем)

Изменяемые (0 перед расчетом ICV)

Differentiated Services Code Point (DSCP) (6 битов, см. RFC 2474 [NBBB98])

Explicit Congestion Notification (ECN) (2 бита, см. RFC 3168 [RFB01])

Flags

Fragment Offset

Time to Live (TTL)

Header Checksum

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

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

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

Fragment Offset — поскольку AH применяется только к нефрагментированным пакетам IP, значение этого поля всегда должно быть нулевым, поэтому оно исключено из расчета (несмотря на предсказуемость).

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

Header Checksum — это поле меняется при изменении любого флага, поэтому отправитель не может предсказать значение поля на момент доставки пакета.

3.3.3.1.1.2. Опции

Для IPv4 (в отличие от IPv6) не существует механизма маркировки опций, изменяющихся при передаче. По этой причине опции IPv4 перечислены в Приложении A и явно классифицированы, как неизменные, изменяющиеся предсказуемо и переменчивые. Для IPv4 опция рассматривается как неделимый объект, поэтому, несмотря на неизменность типа и размера некоторых опций при передаче, изменение значения опции делает все поле данной опции изменяемым и опция целиком учитывается как нулевые значения при расчете ICV.

3.3.3.1.2. Расчет ICV для IPv6

3.3.3.1.2.1. Поля основного заголовка

Поля заголовков IPv6 классифицируются следующим образом:

Неизменные

Version

Payload Length

Next Header

Source Address

Destination Address (без заголовка Routing Extension)

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

Destination Address (с заголовком Routing Extension)

Изменяемые (0 перед расчетом ICV)

DSCP (6 битов, см. RFC2474 [NBBB98])

ECN (2 бита, см. RFC3168 [RFB01])

Flow Label20

Hop Limit

3.3.3.1.2.2. Расширенные заголовки с опциями

Опции IPv6 в расширенных заголовках Hop-by-Hop и Destination содержат бит, указывающий, что опция может измениться (непредсказуемо) в процессе передачи. Для любой опции, которая может измениться на маршруте, все поле Option Data должно трактоваться как нулевые октеты при вычислении и проверке ICV. Поля Option Type и Opt Data Len включаются в расчет ICV. Все опции, для которых упомянутый бит показывает неизменность, включаются в расчет ICV. Дополнительную информацию о заголовках IPv6 можно найти в спецификации протокола [DH98].

3.3.3.1.2.3. Расширенные заголовки без опций

Расширенные заголовки IPv6, не содержащие опций, явно перечислены в Приложении A и классифицированы, как неизменные, изменяемые предсказуемо или изменяемые.

3.3.3.2. Заполнение и расширенные порядковые номера
3.3.3.2.1. Заполнение ICV

Как указано в параграфе 2.6, поле ICV может включать явное заполнение, если это требуется для выравнивания заголовка AH по границе 32 (IPv4) или 64 (IPv6) бита. Если заполнение требуется, его размер определяют два фактора:

  • размер ICV;

  • версия протокола IP (v4 или v6)

Например, если выбранный алгоритм дает 96 контрольную сумму, заполнения не требуется для обеих версий IP. Однако, если другой алгоритм расчета ICV дает сумму иного размера, может потребоваться заполнение в зависимости от размера результата и версии протокола IP. Содержимое поля заполнения выбирается по усмотрению отправителя (заполнение произвольно, но использования случайных значений в целях защиты не требуется). Эти байты заполнения включаются в расчет ICV, учитываются, как часть Payload Length, и передаются в конце поля ICV, чтобы позволить получателю повторно выполнить расчет ICV для проверки. Заполнение, превышающее по размеру количество, требуемое для выравнивания заголовков Ipv4/IPv6, не допускается.

3.3.3.2.2. Неявное заполнение и ESN

Если для SA выбрано использование ESN, старшие 32 бита расширенного порядкового номера должны включаться в расчет ICV. При расчете эти биты (неявно) добавляются непосредественно после данных и перед любым неявным заполнением в пакете.

Для некоторых алгоритмов контроля целостности строка байтов, по отношению к которой выполняются операции расчета ICV, должна иметь размер, кратный заданному алгоритмом размеру блока. Если размера пакета IP (включая AH и 32 старших бита ESN при использовании расширенной нумерации) не соответствует этим требованиям, в конец пакета перед расчетом ICV должны добавляться байты неявного заполнения. Октеты заполнения должны иметь нулевое значение. Для решения вопроса об использовании такого неявного заполнения необходимо обратиться к документу, определяющему алгоритм контроля целостности. Если в документе нет ответа на данный вопрос, по умолчанию предполагается необходимость использования неявного заполнения (для выравнивания размера пакета в соответствии с размером блока, требуемого алгоритмом). Если байты заполнения требуются, но алгоритм не задает значения этих байтов, должны использоваться нулевые значения байтов заполнения.

3.3.4. Фрагментация

Если требуется фрагментация IP, она выполняется после обработки AH в реализации IPsec. Таким образом, в транспортном режиме AH применяется только к целым дейтаграммам IP21 (не фрагментам). Пакет IPv4, к которому применили AH, может быть фрагментирован маршрутизаторами на пути и в таком случае фрагменты должны быть собраны до обработки AH на приемной стороне (этого не возникает для IPv6, где фрагментация по инициативе маршрутизаторов невозможна). В туннельном режиме AH применяется к пакетам IP, содержимое которых может представлять собой фрагменты пакетов IP. Например, шлюз или реализация IPsec bump-in-the-stack или bump-in-the-wire (см. документ по архитектуре защиты) может использовать AH для таких фрагментов в туннельном режиме.

Фрагментация, выполняемая реализацией IPsec или маршрутаторами на пути доставки между партнерами IPsec, существенно снижает производительность. Более того, необходимость сборки фрагментов на приемной стороне до выполнения операций AH, порождает возможность организации атак на отказ служб. Таким образом, реализация AH может выбрать отказ от поддержки фрагментации и маркировать передаваемые пакеты флагом DF22 для облегчения определения PMTU23. В любом случае, реализация AH должна поддерживать генерацию сообщений ICMP PMTU (или использование эквивалентной внутренней сигнализации) для минимизации издержек на фрагментирование. Детали требований, связанных с фрагментацией рассматриваются в документе по архитектуре защиты.

3.4. Обработка входящих пакетов

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

3.4.1. Сборка фрагментов

Если нужна сборка фрагментов24, она выполняется до обработки AH. Если переданный на обработку AH пакет оказывается фрагментом IP (т. е., поле Offset имеет ненулевое значение или установлен флаг More Fragments), получатель должен отбрасывать такой пакет и делать запись в журнале аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6.

3.4.2. Нахождение SA

При получении пакета, содержащего аутентификационный заголовок IP (AH), получатель определяет подходящую (одностороннюю) SA путем просмотра SAD. Для индивидуальных SA определение основано на значении SPI, в дополнение к которому может использоваться поле протокола, как описано в параграфе 2.4. Если реализация поддерживает групповой трафик, при определении SA используется также адрес получателя (в дополнение к SPI) и может применяться адрес отправителя, как описано в параграфе 2.4 (более подробно этот процесс описан в документе по архитектуре защиты). Запись SAD для SA показывает также использование поля Sequence Number и его размер (32 или 64 бита) для данной SA. Кроме того, запись SAD для SA задает алгоритм(ы), используемый для расчета ICV и показывает, нужно ли проверять значения ICV.

Если для пакета не найдено защищенной связи, получатель должен отбросить пакет с записью в журнал аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6.

Отметим, что трафик управления SA (такой, как пакеты IKE) не требуется обрабатывать на базе SPI, т. е., этот трафик может демультиплексироваться отдельно (например, на основе полей Next Protocol и Port).

3.4.3. Проверка порядковых номеров

Все реализации AH должны поддерживать предотвращение повторного использования пакетов25, хотя использование этой функции может быть включено или отключено получателем на уровне SA. Функции предотвращения повторного использования применимы как к индивидуальным, так и к групповым SA. Однако данный стандарт не задает механизмов защиты от повторного использования пакетов для SA со множеством отправителей (групповых или индивидуальных). При отсутствии согласования (или настройки вручную) механизма предотвращения повторного использования для таких SA отправителю и получателю рекомендуется проверить запрет использования поля Sequence Number для таких SA (запрет организуется путем согласования или вручную), как описано ниже.

Если получатель не включил предотвращение повторного использования для SA, на входе не проверяются значения поля Sequence Number. Однако с точки зрения отправителя предотвращение повторного использования по умолчанию включено. Чтобы избавить отправителя от ненужной передачи и мониторинга порядковых номеров (см. параграф 3.3.2. Генерация порядковых номеров), получателю следует уведомить отправителя об отказе от поддержки предотвращения повторного использования на этапе организации SA с помощью протокола организации SA (например, IKE).

Если получатель включил предотвращение повторного использования для SA, он должен установить значение счетчика пакетов для данной SA нулевым на момент организации SA. Для каждого принятого пакета получатель должен проверять, что поле Sequence Number в пакете не совпадает с порядковым номером ни одного из пакетов, полученных в данной SA. Эту проверку следует проводить до выполнения каких-либо операций AH по отношению к данному пакету сразу после проверки принадлежности пакета к SA для ускорения отбрасывания дубликатов.

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

«Правый» край окна представляет наибольшее проверенное значение поля Sequence Number для данной SA. Пакеты с номерами, выходящими за «левый» край окна, отбрасываются. Попадающие в окно пакеты проверяются на предмет совпадения порядковых номеров с номерами принятых пакетов для окна.

При использовании опции ESN для SA явно передаются только младшие 32 бита расширенного порядкового номера, но получатель использует и старшие 32 бита номера для SA (от локального счетчика) при проверке порядковых номеров. При восстановлении полного порядкового номера, если значение младших 32 битов порядкового номера из принятого пакета меньше младших 32 битов значения счетчика порядковых номеров на стороне получателя, последний предполагает, что значение старших 32 битов номера было инкрементировано, т. е., перемещает номер в новое «подпространство». Этот алгоритм допускает интервал приема для отдельной SA до 232-1 пакетов. Если интервал становится больше, могут использоваться эвристические проверки для ресинхронизации порядковых номеров на приемной стороне, как описано в Приложении B.

Если полученный пакет попадает в окно и не является дубликатом, получатель выполняет проверку ICV. При отрицательном результате проверки ICV получатель должен отбросить полученную дейтаграмму IP, как некорректную, с записью в журнал аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6. Окно приема обновляется только при положительном результате проверки ICV.

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

3.4.4. Проверка ICV

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

Если рассчитанное значение ICV совпадает с полученным в пакете, дейтаграмма считается корректной. Если значения не совпадают, получатель должен отбросить полученную дейтаграмму IP, как некорректную с записью информации об этом факте в журнал аудита. В запись следует включать значение SPI, дату и время, адреса отправителя и получателя, а также Flow ID для IPv6.

Примечание для разработчиков.

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

Сначала значение ICV из принятого пакета сохраняется и заменяется нулем. Значения поля заполнения ICV при этом не изменяются. Далее обнуляются все остальные поля, которые могли измениться в процессе передачи пакета (поля, которые следует обнулять при расчете ICV, перечислены в параграфе 3.3.3.1. Обработка изменяемых полей). Если для данной SA выбрано использование ESN, добавляются старшие 32 бита ESN в конце пакета. Проверяется общий размер пакета (как описано выше) и при необходимости в конец пакета (после старших битов ESN, если они используются) добавляются нулевые байты неявного заполнения с учетом требований алгоритма контроля целостности.

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

4. Аудит

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

5. Соответствие требованиям

Реализации, которые заявляют о своем соответствии или совместимости с данной спецификацией, должны полностью реализовать синтаксис и обработку AH, описанные здесь, для индивидуального трафика, а также должны полностью выполнять все требования документа по архитектуре защиты [Ken-Arch]. В дополнение к этому, реализации, заявляющие поддержку группового трафика, должны соответствовать всем дополнительным требованиям, заданным для такого трафика. При ручном распределении ключей, используемых для расчета ICV, корректная работа системы предотвращения повторного использования пакетов требует аккуратной поддержки состояния счетчика на передающей стороне при замене ключа, поскольку в этом случае невозможно восстановить работу после переполнения счетчика. Таким образом, совместимым со спецификацией реализациям не следует предоставлять такой сервис для SA с распространением ключей вручную.

Обязательные для реализации алгоритмы, используемые с AH, описаны в отдельном RFC [Eas04], для обеспечения возможности обновления алгоритмов независимо от протокола. Кроме обязательных для AH алгоритмов могут поддерживаться дополнительные алгоритмы.

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

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

7. Отличия от RFC 2402

В этом документе имеется ряд перечисленных ниже отличий от RFC 2402 [RFC2402].

  • Изменено определение SPI для обеспечения возможности однотипного поиска в SAD для индивидуальных и групповых SA, совместимого со многими технологиями групповой передачи. Для выбора индивидуальных SA значение SPI может использоваться само по себе или в комбинации с протоколом по усмотрению получателя. Для выбора групповых SA значение SPI объединяется с адресом отправителя (и, опционально, с адресом получателя).

  • Добавлены расширенные порядковые номера (ESN) для обеспечения 64-битовой нумерации на высокоскоростных соединениях. Разъяснены требования к отправителю и получателю для групповых SA и защищенных связей с множеством отправителей.

  • Спецификации обязательных алгоритмов вынесены в отдельный документ [Eas04].

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

Автор выражает свою благодарность Ran Atkinson, за его критически важную роль на начальном этапе создания IPsec и всем авторам первой серии стандартов IPsec — RFC 1825-1827. Отдельная благодарность Karen Seo за помощь в редактировании этой и предыдущей версии данной спецификации. Автор также благодарит членов рабочих групп IPsec и MSEC, которые внесли свой вклад в разработку спецификации протокола.

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

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

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

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

[Eas04] 3rd Eastlake, D., «Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)», RFC 4305, December 2005.

[Ken-Arch] Kent, S. and K. Seo, «Security Architecture for the Internet Protocol», RFC 4301, December 2005.

[RFC791] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[RFC1108] Kent, S., «U.S. Department of Defense Security Options for the Internet Protocol», RFC 1108, November 1991.

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

[AES] Advanced Encryption Standard (AES), Federal Information Processing Standard 197, National Institutes of Standards and Technology, November 26, 2001.

[HC03] Holbrook, H. and B. Cain, «Source Specific Multicast for IP», Work in Progress26, November 3, 2002.

[IKEv2] Kaufman, C., Ed., «Internet Key Exchange (IKEv2) Protocol», RFC 4306, December 2005.

[Ken-ESP] Kent, S., «IP Encapsulating Security Payload (ESP)», RFC 4303, December 2005.

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

[RFB01] Ramakrishnan, K., Floyd, S., and D. Black, «The Addition of Explicit Congestion Notification (ECN) to IP», RFC 3168, September 2001.

[RFC1063] Mogul, J., Kent, C., Partridge, C., and K. McCloghrie, «IP MTU discovery options», RFC 1063, July 1988.

[RFC1122] Braden, R., «Requirements for Internet Hosts-Communication Layers», STD 3, RFC 1122, October 1989.

[RFC1191] Mogul, J. and S. Deering, «Path MTU discovery», RFC 1191, November 1990.

[RFC1385] Wang, Z., «EIP: The Extended Internet Protocol», RFC 1385, November 1992.

[RFC1393] Malkin, G., «Traceroute Using an IP Option», RFC 1393, January 1993.

[RFC1770] Graff, C., «IPv4 Option for Sender Directed Multi-Destination Delivery», RFC 1770, March 1995.

[RFC2113] Katz, D., «IP Router Alert Option», RFC 2113, February 1997.

[RFC2402] Kent, S. and R. Atkinson, «IP Authentication Header», RFC 2402, November 1998.

[RFC3547] Baugher, M., Weis, B., Hardjono, T., and H. Harney, «The Group Domain of Interpretation», RFC 3547, July 2003.

[RFC3740] Hardjono, T. and B. Weis, «The Multicast Group Security Architecture», RFC 3740, March 2004.

Приложение A: Изменяемые опции и расширения заголовков IP

A1. Опции IPv4

В таблице показаны опции IPv4 с классификацией их по «изменяемости». Если в колонке «Документ» указаны две ссылки, второй документ имеет более высокий приоритет. Таблица основана на информации, представленной в RFC 1700, «ASSIGNED NUMBERS»27, (октябрь 1994).

Копия

Класс

Номер опции

Имя

Документ

Неизменные — учитываются в ICV

0

0

0

End of Options List28конец списка опций

[RFC791]

0

0

1

No Operation — нет операции

[RFC791]

1

0

2

Security29 — защита

[RFC1108]30

1

0

5

Extended Security3 — расширенная защита

[RFC1108]4

1

0

6

Commercial Security3 — коммерческая защита

[RFC2113]

1

0

20

Router Alert — сигнал маршрутизатора

[RFC1770]

1

0

21

Sender Directed Multi-Destination Delivery — направленная отправителем доставка по множеству адресов

Изменяемые — должны иметь нулевое значение

1

0

3

Loose Source Route — нежестко заданный отправителем маршрут

[RFC791]

0

2

4

Time Stamp — временная метка

[RFC791]

0

0

7

Record Route31 — запись маршрута

[RFC791]

1

0

9

Strict Source Route — жестко заданный отправителем маршрут

[RFC791]

0

2

18

Traceroute — трассировка пути

[RFC1393]

Экспериментальные и переопределенные — должны иметь нулевое значение

1

0

8

Stream ID — идентификатор потока

[RFC791], [RFC1122]

0

0

11

MTU Probe – проба MTU

[RFC1063], [RFC1191]

0

0

12

MTU Reply – отклик MTU

[RFC1063], [RFC1191]

1

0

17

Extended Internet Protocol — расширенный протокол IP

[RFC1385], [DH98]

0

0

10

Experimental Measurement – экспериментальные измерения

1

2

13

Experimental Flow Control — экспериментальное управление потоком данных

1

0

14

Experimental Access Ctl — экспериментальный контроль доступа

0

0

15

???

1

0

16

IMI Traffic Descriptor — дескриптор трафика IMI

1

0

19

Address Extension — расширение адреса

A2. Заголовки расширения IPv6

В таблице показаны расширения заголовков IPv6 и дана их классификация в плане «изменчивости».

Название опции или расширения

Ссылка

Предсказуемо изменяемыевключаются в расчет ICV

Routing (Type 0)

[DH98]

Биты, показывающие изменяется ли опция (изменения при передаче непредсказуемы)

Опция Hop-by-Hop

[DH98]

Опция Destination

[DH98]

Неприменимо

Fragmentation

[DH98]

Опции IPv6 в расширенных заголовках Hop-by-Hop и Destination содержат бит, который показывает возможность (непредсказуемого) изменения опции в процессе доставки пакета. Для лобой опции, содержимое которое может меняться на пути, все поле Option Data должно трактоваться, как нулевые октеты при расчете и проверке ICV. Поля Option Type и Opt Data Len включаются в расчет ICV. Все опции, для которых флаг показывает неизменность, включаются в расчет ICV. Дополнительная информация по опциям IPv6 приведена в [DH98].

Routing (Type 0) — этот заголовок IPv6 будет приводить к реорганизации адресных полей в пакете на пути доставки. Однако содержимое пакета на момент доставки известно отправителю и всем промежуточным узлам. Следовательно, это поле включается в расчет ICV, поскольку его изменения предсказуемы. Отправитель должен перед расчетом ICV включить в это поле то значение, которое увидит получатель.

Fragmentation — фрагментация происходит после выходной обработки IPsec (параграф 3.3), а сборка — перед входной обработкой IPsec (параграф 3.4). По этой причине расширенный заголовок Fragmentation (если он имеется) не виден для IPsec.

Отметим, что на приемной стороне реализация IP может сохранить расширенный заголовок Fragmentation после сборки фрагментов. В таком случае реализация AH при получении пакета должна «удалить» (или пропустить) этот заголовок до обработки ICV и заменить значение предыдущего поля Next Header на значение Next Header из заголовка Fragmentation.

Отметим, что на стороне отправителя реализация IP может передавать IPsec пакет с расширенным заголовком Fragmentation, где Offset = 0 (первый фрагмент) и флаг More Fragments = 0 (последний фрагмент). В таких случаях до обработки ICV реализация AH должна «удалить» (или пропустить) этот заголовок и заменить значение предыдущего Next Header на значение Next Header из заголовка Fragmentation.

Приложение B: Расширенные порядковые номера (64 бита)

B1. Обзор

В этом приложении описана схема расширенной порядковой нумерации (ESN) для IPsec (ESP и AH), где используются 64-битовые порядковые номера, но в каждом пакете передаются только младшие 32 бита номера. Описана схема окна, используемого для обнаружения повтрно используемых пакетов, а также механизм определения старших битов порядкового номера, используемых для отбрасывания пакетов и расчета ICV. Описан также механизм обработки случаев потери синхронизации для старших (не передаваемых в пакетах) битов порядкового номера.

B2. Окно Anti-Replay

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

Имя

Размер в битах

Значение

W

32

Размер окна

T

64

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

Tl

32

32 младших бита T

Th

32

32 старших бита T

B

64

Нижняя граница окна

Bl

32

32 младших бита B

Bh

32

32 старших бита B

Seq

64

Порядковый номер полученного пакета

Seql

32

32 младших бита Seq

Seqh

32

32 старших бита Seq

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

  • Th+1                         *********
    
    Th               =======*****
    
          --0--------+-----+-----0--------+-----------0--
                     Bl    Tl            Bl
                                    (Bl+2^32) mod 2^32

    Рисунок 2. Случай A.


    Случай A: Tl >= (W — 1) все окно находится в одном подпространстве порядковых номеров (Рисунок 2)

  • Случай B: Tl < (W — 1) окно захватывает части двух смежных подпространств порядковых номеров (Рисунок 3).

Th                           ====**************

Th-1                      ===

      --0-----------------+--0--+--------------+--0--
                          Bl    Tl            Bl
                                         (Bl+2^32) mod 2^32

Рисунок 3. Случай B.


На рисунках нижняя линия —- показывает смежные подпространства порядковых номеров, а 0 указывает начало каждого подпространства. Короткая двойная линия === показывает применимые старшие биты, а ==== представляет окно. Звездочки **** обозначают грядущие номера, т. е., номера номера, превышающие максимальный аутентифицируемый в данный момент номер (ThTl).

B2.1. Использование окна Anti-Replay и управление им

Окно предотвращения повторов можно рассматривать как строку битов размером W (W = T — B + 1 и не может превышать 232 — 1). Младший бит строки соответствует B, а старший — T и каждый порядковый номер от Bl до Tl представлен соответствующим битом. Значение бита показывает, был ли пакет с соответствующим номером принят и аутентифицирован, что позволяет обнаружить и отбросить повторные пакеты.

При получении и проверке корректности пакета с 64-битовым порядковым номером (Seq), превышающим T:

  • B увеличивается на (Seq — T);

  • отбрасываются (Seq — T) битов в левой части окна;

  • добавляются (Seq — T) битов в правой части окна;

  • устанавливается «верхний» бит для индикации приема и аутентификации пакета с данным порядковым номером;

  • сбрасываются новые биты между T и «верхним» битом для индикации отсутствия принятых пакетов с соответствующими порядковыми номерами;

  • для T устанавливается значение нового порядкового нгомера.

Проверка пакетов на предмет повторного использования:

  • Случай A: Если Seql >= Bl (где Bl = Tl — W + 1) И Seql <= Tl, проверяется соответствующий бит окна. Если пакет с номером Seql уже был принят (бит окна установлен), он отбрасывается. В противном случае проверяется целостность пакета. Проверка старших битов номера (Seqh) описана в параграфе B2.2.

  • Случай B: Если Seql >= Bl ( где Bl = Tl — W + 1) ИЛИ Seql <= Tl, проверяется соответствую щий бит окна. Если пакет с номером Seql уже был принят (бит окна установлен), он отбрасывается. В противном случае проверяется целостность пакета. Проверка старших битов номера (Seqh) описана в параграфе B2.2.

B2.2. Определение старших битов (Seqh) порядкового номера

+ Для случая A (Рисунок 2):
  Если Seql >= Bl (где Bl = Tl - W + 1), то Seqh = Th
  Если Seql <  Bl ( где Bl = Tl - W + 1), то Seqh = Th + 1

+ Для случая B (Рисунок 3):
  Если Seql >= Bl ( где Bl = Tl - W + 1), то Seqh = Th - 1
  Если Seql <  Bl ( где Bl = Tl - W + 1), то Seqh = Th


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

B2.3. Пример псевдокода

Приведенный ниже псевдокод иллюстрирует описанные выше алгоритмы предотвращения повторного использования и контроля целостности пакетов. Значения Seql, Tl, Th и W являются 32-битовыми целыми числами без знака. Используется арифметика по модулю 232.

        Если (Tl >= W - 1)                        Случай A
            Если (Seql >= Tl - W + 1)
                Seqh = Th
                Если (Seql <= Tl)
                    Если (проверка на предмет повтора прошла)
                        Если (проверка целостности прошла)
                            Установить бит, соответствующий Seql
                            Принять пакет
                        Иначе отбросить пакет
                    Иначе отбросить пакет
                Иначе
                    Если (проверка целостности прошла)
                        Tl = Seql (shift bits)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет
            Иначе
                Seqh = Th + 1
                Если (проверка целостности прошла)
                    Tl = Seql (shift bits)
                    Th = Th + 1
                    Установить бит, соответствующий Seql
                    Принять пакет
                Иначе отбросить пакет
        Иначе                                    Случай B
            Если (Seql >= Tl - W + 1)
                Seqh = Th - 1
                Если (проверка на предмет повтора прошла)
                    Если (pass integrity check)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет
                Иначе отбросить пакет
            Иначе
                Seqh = Th
                Если (Seql <= Tl)
                    Если (проверка на предмет повтора прошла)
                        Если (проверка целостности прошла)
                            Установить бит, соответствующий Seql
                            Принять пакет
                        Иначе отбросить пакет
                    Иначе отбросить пакет
                Иначе
                    Если (проверка целостности прошла)
                        Tl = Seql (shift bits)
                        Установить бит, соответствующий Seql
                        Принять пакет
                    Иначе отбросить пакет

B3. Обработка потери синхронизации в результате больших потерь пакетов

При потере 232 или более пакетов подряд для одной SA отправитель и получатель теряют синхронизацию старших битов порядкового номера, т. е., уравнения параграфа B2.2 не будут давать корректного значения. Пока эта проблема не будет обнаружена и разрешена, последующие пакеты для данной SA не могут быть аутентифицированы и будут отбрасываться. Описанную ниже процедуру восстановления синхронизации следует поддерживать во всех реализациях IPsec (ESP или AH), которые работают с ESN.

Отметим, что описанный вариант экстремальных потерь представляется маловероятным для SA, использующих протокол TCP, поскольку отправитель, не получающий пакетов ACK в ответ на переданные пакеты, будет останавливать передачу до того, как будут потеряны 232. И другие приложения с двухсторонним обменом данными (даже работающие по протоколу UDP) при таких экстремальных потерях будут включать тот или иной тайм-аут. Однако приложения с односторонним потоком трафика, работающие по протоколу UDP, могут не поддерживать средств автоматического детектирования экстремальных потерь пакетов и, следовательно, требуется обеспечить метод восстановления для таких ситуаций.

Предлагаемое решение призвано:

  • минимизировать влияние на обработку нормального трафика;

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

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

B3.1. Включение ресинхронизации

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

B3.2. Процесс ресинхронизации

Когда значение счетчика некорректных пакетов достигает заданного порога, выбирается «плохой» пакет, для которого процедура аутентификации повторяется с использованием следующего большего значения для старшей части расширенного порядкового номера (Seqh). Значение старшей части номера увеличивается на 1 при каждой проверке. Число попыток проверки следует ограничивать на случай того, что выбранный для проверки пакет оказался «из прошлого» или является поддельным. Максимальное число попыток задается локальным параметром. Поскольку значение Seqh неявно помещается после данных AH (или ESP), может оказаться возможной оптимизация процедуры восстановления за счет выполнения процедуры контроля целостности пакета с использованием нарастающих значений Seqh для расчета ICV. При успешной аутентификации пакета с помощью описанной процедуры значение счетчика некорректных пакетов сбрасывается и устанавливается значение T, определенное по прошедшему проверку пакету.

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

Адрес автора

Stephen Kent

BBN Technologies

10 Moulton Street

Cambridge, MA 02138

USA

Phone: +1 (617) 873-3988

EMail: kent@bbn.com

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Encapsulating Security Payload — инкапсуляция защищенных данных.

2Security Association.

3M = mandatory — обязательно.

4Информация о покрываемых полях заголовка IP приведена в параграфе 3.3.3.

5Обнуляется перед расчетом ICV и результат расчета помещается в это поле.

6В туннельном режиме — дейтаграмма IP, в транспортном — следующий заголовок и данные.

7Extended Sequence Number — расширенный порядковый номер.

8Integrity Check Value — значение проверки целостности.

9Реестр IP Protocol Numbers.

10В настоящее время этот список доступен по ссылке http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml. Прим. перев.

11Security Association Database.

12Ternary Content-Addressable Memory — ассоциативная память.

13Group Domain of Interpretation.

14Source-Specific Multicast.

15No Security Association Exists.

16Extended Sequence Number — расширенный порядковый номер.

17Integrity Check Value — значение для проверки целостности.

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

19Message Authentication Code — код аутентфикации сообщения.

20Метки потока, описанные в Ahv1, были изменяемыми и в RFC 2460 [DH98] сохранили потенциальную изменчивость. Для совместимости с существующими реализациями AH метки потоков не вкалючаются в расчет ICV для AHv2.

21Как отмечено в конце параграфа 3.1.1, реализации bump-in-the-stack и bump-in-the-wire могут сначала выполнять сборку фрагментов, созданных локальным уровнем IP, потом выполнять обработку IPsec и снова фрагментировать полученный в результате пакет.

В случае IPv6 реализации bump-in-the-stack и bump-in-the-wire должны проверять все расширенные заголовки, а также значения флага More и поля Fragment Offset для обнаружения фрагментирования. Если фрагментирование используется, пакеты должны быть собраны до выполнения операций IPsec.

22Не фрагментировать. Прим. перев.

23Path MTU — размер максимального передаваемого блока для пути.

24При сборке пакетов текущая спецификация IPv4 не требует обнуления поля Offset и сброса флага More Fragments. Для корректной обработки собранных из фрагментов пакетов IPsec (вместо отбрасывания, принятого для фрагментов) реализация IP должна выполнять обе указанные операции после сборки пакета из фрагментов.

25Anti-replay service.

26Работа завершена и опубликована в RFC 4607. Прим. перев.

27В настоящее время документ «Assigned Numbers» утратил силу. Реестры выделенных значений публикуются на сайте http://www.iana.org/numbers/. Прим. перев.

28Опции End of Options List следует повторять при необходимости для выравнивания заголовка IP по 4-байтовой границе, чтобы предотвратить появление байтов, которые могли бы использоваться для организации скрытых каналов.

29Добавление или удаление защитных меток (например, Basic Security Option — BSO, Extended Security Option — ESO или Commercial Internet Protocol Security Option -CIPSO) системами на пути доставки пакета вступает в конфликт с данной классификацией, считающей эти опции IP неизменными, и, следовательно, несовместимо с использованием IPsec.

30Устарел, но продолжает использоваться.

31Использование опции Router Alert потенциально несовместимо с IPsec. Хотя эта опция является неизменной, ее использование ведет к тому, что все маршрутизаторы на пути будут «обрабатывать» пакет и, следовательно, могут менять его. Это может происходить поэтапно на пути от одного маршрутизатора к другому. До обработки приложениями, которым эта опция адресуется (например, протокол RSVP или IGMP) пакет следует подвергнуть обработке AH. Однако эта обработка требует, чтобы каждый маршрутизатор на пути был членом групповой SA, определяемой SPI. Это может вызывать проблемы с нестрого заданной отправителем маршрутизацией и требует методов поддержки группового трафика, которые в настоящее время недоступны.

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

 

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

RFC 4301 Security Architecture for the Internet Protocol

Network Working Group                                            S. Kent
Request for Comments: 4301                                        K. Seo
Obsoletes: 2401                                         BBN Technologies
Category: Standards Track                                  December 2005

Архитектура защиты для протокола IP

Security Architecture for the Internet Protocol

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

Документ является обновлённой версией Security Architecture for IP и посвящён способам защиты трафика на уровне IP. Данный документ заменяет собой RFC 2401 (ноябрь 1998).

Посвящение

Этот документ посвящён памяти Charlie Lynn, который долгие годы работал в BBN и внёс важный вклад в подготовку документов по IPsec.

1. Введение

1.1. Обзор содержимого документа

Этот документ описывает базовую архитектуру IPsec-совместимых систем. Здесь описано, как обеспечить службы защиты трафика на уровне IP, как в среде IPv4 [Pos81a], так и для IPv6 [DH98]. Документ описывает требования к системам, реализующим IPsec, фундаментальные элементы таких систем и объединение таких элементов в среде IP. Документ также описывает средства защиты, обеспечиваемые протоколами IPsec, и способы развёртывания соответствующих служб в среде IP. Документ не рассматривает всех аспектов архитектуры IPsec. Имеются другие документы, посвящённые дополнительным деталям архитектуры при использовании в специализированных средах (например, использование IPsec с среде NAT1 или более полная поддержка групповой адресации IP). Фундаментальные компоненты архитектуры защиты IPsec обсуждаются в терминах обеспечиваемой ими требуемой функциональности. Имеются дополнительные документы RFC (см. параграф 1.3, где указаны ссылки на эти документы) для протоколов (a), (c) и (d).

  1. протоколы защиты — AH2 и ESP3;

  2. защищённые связи (Security Association) — что это, как они работают, как управляются, связанные с ними операции;

  3. управление ключами — ручное или автоматизированное (IKE4);

  4. криптографические алгоритмы для аутентификации и шифрования.

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

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

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

1.2. Аудитория

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

1.3. Связанные документы

Как было отмечено выше, существует ещё ряд документов, содержащих детальное определение некоторых компонент IPsec и отношений между компонентами. К таким документам относятся RFC по следующим темам:

  1. протоколы защиты — RFC, описывающие протокол Authentication Header (AH) [Ken05b] и Encapsulating Security Payload (ESP) [Ken05a];

  2. криптографические алгоритмы для шифрования и обеспечения целостности — один документ RFC, который определяет обязательный, используемый по умолчанию с AH и ESP алгоритм [Eas05], аналогичный документ RFC, определяющий обязательные алгоритмы для использования с IKEv2 [Sch05] и отдельные документы RFC для каждого криптографического алгоритма.

  3. автоматическое управление ключами — документы RFC по протоколу IKEv2 [Kau05] и Cryptographic Algorithms for Use in the Internet Key Exchange Version 2 (IKEv2) [Sch05].

2. Задачи протокола

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

Задачей IPsec является создание интероперабельной, высококачественной, основанной на криптографии системы защиты для IPv4 и IPv6. Набор обеспечиваемых услуг защиты включает контроль доступа, обеспечение целостности без организации прямых соединений (connectionless integrity), аутентификацию источника данных (data origin authentication), детектирование и отклонение попыток повторного использования сохранённой информации (replay), как форма сохранения целостности порядка, обеспечение сохранности тайны (confidentiality) путём шифрования, а также ограниченное сохранение конфиденциальности потоков трафика (limited traffic flow confidentiality). Эти услуги предоставляются на уровне IP, обеспечивая стандартные способы защиты для всех протоколов, которые могут передаваться через IP (включая и сам протокол IP).

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

Большинство механизмов защиты обеспечивается за счёт использования двух протоколов защиты трафика — Authentication Header (AH) и Encapsulating Security Payload (ESP), а также криптографических процедур и протоколов управления ключами. Протоколы IPsec развёртываются в определённой среде (контексте) и способы использования протоколов определяются администраторами/пользователями в этом же контексте. Задачей архитектуры IPsec является обеспечение совместимых реализаций, включающих службы и интерфейсы управления, требуемые для удовлетворения потребностей в обеспечении безопасности большого числа пользователей.

При корректной реализации и развёртывании IPsec не оказывает негативного воздействия на работу пользователей, хостов и других компонент Internet, которые не используют IPsec для защиты трафика. Протоколы защиты IPsec (AH и ESP, а также в несколько меньшей степени IKE) разработаны так, чтобы обеспечивалась независимость от криптографических алгоритмов. Модульная структура позволяет выбирать различные наборы криптоалгоритмов в соответствии с реальными потребностями и независимо от других частей реализации. Например, различные группы пользователей могут выбрать разные наборы криптоалгоритмов, если это нужно.

Для повышения глобального уровня взаимодействия Internet задан набор криптоалгоритмов, используемых по умолчанию с AH и ESP [Eas05], а также набор обязательных к реализации алгоритмов для IKEv2 [Sch05]. Документы [Eas05] и [Sch05] будут периодически обновляться с учётом роста вычислительных мощностей и разработок в области криптографии. Задание этих алгоритмов в документах, отдельных от спецификаций AH, ESP и IKEv2, позволяет заменять эти алгоритмы без влияния на процесс стандартизации остального набора документов IPsec. Использование этих криптоалгоритмов в комбинации со средствами защиты трафика IPsec и протоколами управления ключами предназначено для обеспечения разработчикам систем и приложений развёртывать высококачественную технологию криптографической защиты на уровне Internet.

2.2. Допущения и предостережения

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

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

3. Обзор системы

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

Реализация IPsec работает на хосте, используемом как защитный шлюз (SG7), или на отдельном устройстве, обеспечивая защиту трафика IP. Более подробное описание этих классов реализации приводится ниже, в параграфе 3.3. Обеспечиваемая IPsec защита основывается на требованиях базы правил безопасности (SPD8), разработанной и поддерживаемой пользователем, системным администратором приложением, работающим по заданной пользователем или администратором схеме. В общем случае для пакетов выбирается один из трёх вариантов обработки в зависимости от информации в заголовке IP и следующего уровня («Селекторы», параграф 4.4.1.1) в соответствии с правилами SPD. Каждый пакет защищается (PROTECT) с использованием IPsec, отбрасывается (DISCARD) или пропускается в обход (BYPASS) защиты IPsec, в зависимости от правил SPD, определяемых селекторами.

3.1. Что делает IPsec

                Не защищено 
                ^       ^
                |       |
  +-------------|-------|-------+
  | +-------+   |       |       |
  | | DROP  |<--|       V       |
  | +-------+   |B  +--------+  |
................|Y..| AH/ESP |..... Граница IPsec 
  |   +---+     |P  +--------+  |
  |   |IKE|<----|A      ^       |
  |   +---+     |S      |       |
  | +-------+   |S      |       |
  | | DROP  |<--|       |       |
  | +-------+   |       |       |
  +-------------|-------|-------+
                |       |
                V       V
                Защищено

Рисунок 1. Верхний уровень рабочей модели IPsec.


IPsec создаёт границу между защищённым и незащищённым интерфейсами для хоста или сети (см. рисунок 1). К проходящему через границу трафику применяются правила контроля доступа, заданные пользователем или администратором, отвечающим за конфигурацию. Эти правила контроля определяют проходит пакет через границу беспрепятственно, к нему применяются механизмы защиты на основе AH или ESP или пакет отбрасывается.

Механизмы защиты IPsec предоставляются на уровне IP путём выбора подходящих протоколов защиты, криптографических алгоритмов и ключей. IPsec можно использовать для защиты одного или множества “путей” между (a) парой хостов, (b) парой шлюзов безопасности или (c) хостом и шлюзом безопасности. Соответствующая требованиям реализация для хоста должна поддерживать (a) и (c), а реализация для шлюза безопасности — все три варианта соединений, поскольку при определённых обстоятельствах шлюз безопасности действует как хост.

Незащищённый (unprotected) интерфейс называют также «чёрным» (black) или зашифрованным (ciphertext). Защищённый (protected) интерфейс называют ещё красным (red) или текстовым (plaintext). Защищённый интерфейс может быть внутренним (например, в реализации IPsec для хоста) или может быть соединён с интерфейсом уровня сокетов, предоставленным OS. В этом документе термин «входящий» (inbound) относится к трафику, входящему в реализацию IPsec через незащищённый интерфейс, или выдаваемому реализацией на незащищённую сторону границы и направленному в сторону защищённого интерфейса. Термин «исходящий» (outbound) относится к трафику, входящему в реализацию через защищённый интерфейс, или выдаваемому реализацией на защищённую сторону границы и направленному в сторону незащищённого интерфейса. Реализация IPsec может поддерживать более одного интерфейса по одну или обе сторону границы.

Обратите внимание на средства отбрасывания трафика (DROP) по обе стороны границы IPsec, средства обхода (BYPASS), позволяющие пропускать трафик через границу без криптозащиты и IKE, как средство управления ключами на защищённой стороне и управления защитой.

IPsec может также поддерживать согласование компрессии IP [SMPT01] — это обусловлено тем, что используемое в IPsec шифрование препятствует сжатию данных протоколами нижележащих уровней.

3.2. Как работает IPsec

IPsec использует два протокола для обеспечения защиты — Authentication Header (AH) и Encapsulating Security Payload (ESP). Оба протокола подробно описаны в соответствующих RFC [Ken05b, Ken05a]. Реализация IPsec должна поддерживать ESP и может поддерживать AH9.

  • Протокол AH [Ken05b] обеспечивает защиту целостности и аутентификацию источника данных, а также может (по усмотрению получателя) выполнять функции предотвращения повторного использования пакетов (anti-replay).

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

  • Оба протокола AH и ESP обеспечивают контроль доступа, реализуемый путём распределения криптоключей и управления потоками трафика в соответствии с базой правил SPD2 (см. параграф 4.4.1).

Эти протоколы могут использоваться вместе или по отдельности для обеспечения защиты IPv4 и IPv6. Однако большинство требований защиты можно выполнить при использовании одного протокола ESP. Каждый из протоколов поддерживает два режима работы — транспортный и туннельный. В транспортном режиме AH и ESP обеспечивают защиту прежде всего для протоколов следующего уровня, а в туннельном режиме AH и ESP применяются к туннелируемым пакетам IP. Различия между этими режимами обсуждаются в параграфе 4.1.

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

  • используемого протокола (AH или ESP), режима (транспортный или туннельный), опций защиты, используемых криптоалгоритмов, а также комбинаций протоколов и служб;

  • гранулярности применения защиты.

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

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

3.3. Где можно реализовать IPsec

Существует множество вариантов реализации IPsec на хостах, в комбинации с маршрутизаторами или межсетевыми экранами для создания защитных шлюзов, а также на независимых устройствах защиты.

  1. IPsec можно интегрировать непосредственно в стек IP. Это требует доступа к исходному коду IP и может применяться как для хостов, так и для защитных шлюзов, хотя хостовые реализации более подходят для этой стратегии, как показано ниже (параграф 4.4.1, глава 6, последний абзац параграфа 4.4.1.1).

  2. В BITS10-варианте IPsec реализуется “ниже” имеющейся реализации стека IP между исходным IP и драйверами сетевых устройств. Доступ к исходному коду стека IP не требуется в таком контексте и делает данный вариант подходящим для реализации в старых системах. Обычно такие варианты реализуются на хостах.

  3. Использование выделенного специализированного процессора для протоколов защиты широко распространено в военных системах, а также в некоторых коммерческих системах. Этот вариант иногда называют BITW11-реализацией. Такие реализации могут разрабатываться для хостов или шлюзов. Обычно устройство BITW само по себе имеет адрес IP. При поддержке одного хоста такой вариант похож на BITS-реализацию, но на маршрутизаторах и межсетевых экранах он действует подобно защитному шлюзу.

В этом документе часто говорится о реализации IPsec на хостах или защитных шлюзах без конкретизации варианта (в стеке, BITS или BITW). В тех случаях, когда такое различие имеет существенное значение, в документе указывается конкретный вариант реализации.

Хостовые реализации IPsec могут встречаться в устройствах, которые не совсем похожи на хост. Например, маршрутизатор может использовать IPsec для защиты протоколов маршрутизации (скажем, BGP) и функций управления (типа, Telnet), не воздействуя на проходящий через маршрутизатор пользовательский трафик. Защитный шлюз может использовать раздельные реализации IPsec для защиты пользовательского трафика и управляющей информации. Описанная в этом документе архитектура является очень гибкой. Например, компьютер с полнофункциональной, соответствующей спецификации реализацией IPsec в OS должен настраиваться на защиту работающих на нем приложений (хост) и защиту проходящего через этот компьютер трафика (защитный шлюз). Такая конфигурация будет использовать таблицы пересылки и функции SPD, описанные в параграфах 5.1 и 5.2.

4. Защищённые связи (SA)

В этой главе описываются требования к управлению защищёнными связями для всех реализаций IPv6 и тех реализаций IPv4, которые поддерживают протокол AH, ESP или оба. Концепция защищённых связей (Security Association или SA) является фундаментальной для IPsec. Оба протокола AH и ESP используют SA, а основной функцией IKE является организация и поддержка SA. Все реализации AH и ESP должны поддерживать концепцию SA в соответствии с приведённым ниже описанием. Остальная часть этой главы описывает различные аспекты управления SA, определения требуемых характеристик для управления политикой SA и методов управления SA.

4.1. Определение и сфера применения

SA представляет собой симплексное соединение, которое обеспечивает защиту для передаваемого через него трафика. Предоставляемая SA защита основана на использовании протокола AH, ESP или обоих. Если к потоку трафика применяются оба протокола AH и ESP, должны создаваться две связи SA, которые координируются для обеспечения пошагового (согласованного) применения протоколов защиты. Для защиты типового двухстороннего соединения между двумя поддерживающими IPsec системами требуется пара SA (по одной связи для каждого направления). Протокол IKE явно создаёт пары SA, учитывая общность этого требования.

Для SA, используемых для передачи unicast-трафика, достаточно индекса SPI12 для указания SA. Однако реализация может локально выбрать вариант использования SPI в комбинации с типом протокола IPsec (AH или ESP) для аутентификации SA. Если реализация IPsec поддерживает групповую адресацию (multicast), она должна поддерживать групповые (multicast) SA, используя описанный ниже алгоритм для отображения входящих дейтаграмм IPsec на связи SA. Реализация, поддерживающая только индивидуальный (unicast) трафик, не обязана реализовать этот алгоритм демультиплексирования.

Во многих архитектурах защиты с групповой адресацией (например, [RFC3740]) центральный контроллер группы/сервер обмена ключами (Group Controller/Key Server) обязательно привязывается к GSA13 SPI. Этот индекс SPI не согласуется и не координируется с системой управления ключами (например, IKE), которая остаётся на отдельных конечных системах, формирующих группу. Следовательно, возможно одновременное использование одного индекса SPI для индивидуальной (unicast) связи SA и групповой связи GSA. Поддерживающие групповую адресацию реализации IPsec должны корректно демультиплексировать входящий трафик даже при возникновении конфликта SPI.

Каждая запись в базе данных SA (SAD14, см. параграф 4.4.2) должна показывать используется ли при поиске SA IP-адрес получателя или адреса отправителя и получателя в дополнение к SPI. Для групповых SA, поле протокола не используется для поиска SA. Для каждого входящего пакета, защищённого с помощью IPsec, реализация должна проводить поиск в SAD так, чтобы найденный результат соответствовал «наиболее длинному» идентификатору SA. В этом контексте при соответствии двух и более записей SAD значению SPI для определения более длинного соответствия проводится также сравнение адреса получателя или адресов отправителя и получателя (как указано в записи SAD). Это определяет логический порядок поиска в SAD:

  1. В базе SAD ищется соответствие для SPI и адресов получателя и отправителя. При нахождении записи, входящий пакет обрабатывается в соответствии с ней. Если запись не найдена, выполняется п. 2.

  2. В базе SAD ищется соответствие для SPI и адреса получателя. При нахождении записи входящий пакет обрабатывается в соответствии с ней. Если запись не найдена, выполняется п. 3.

  3. В базе SAD ведётся поиск только по одному значению SPI, если получатель выбрал поддержку единого пространства SPI для AH и ESP, или по обоим SPI и протоколу, в противном случае. Если запись найдена, входящий пакет обрабатывается в соответствии в ней. В противном случае пакет отбрасывается, а в системный журнал вносится запись об этом.

На практике реализация может выбрать любой метод (или не использовать никакого) ускорения этого поиска, хотя видимое извне поведение поиска должно быть функционально эквивалентным поиску по SAD в рассмотренном выше порядке. Например, программная реализация может помещать SPI в хэш-таблицы. Записи SAD в связном списке каждой хэш-таблицы могут сохраняться отсортированными так, чтобы записи SAD с наиболее длинными идентификаторами SA находились ближе к началу связанных списков. Записи SAD с самыми короткими идентификаторами SA могут сортироваться так, чтобы они были последними записями в связанном списке. Аппаратные реализации могут могут находить самый длинный идентификатор с помощью общедоступного механизма TCAM15.

Индикация того, какой адрес (отправителя или получателя) используется для отображения входящего трафика IPsec на связи SA, должна устанавливаться при настройке конфигурации SA вручную или путём согласования использования протокола управления SA (например, IKE или GDOI16 [RFC3547]). Обычно группы SSM17 [HC03] используют 3-компонентный идентификатор SA, включающий SPI, групповой адрес получателя и адрес отправителя. Для групп Any-Source Multicast требуется только SPI и групповой адрес получателя.

Если при передаче различных классов трафика (отличаются битами DSCP18) [NiBlBaBL98], [Gro02]) в одну SA получатель использует необязательную функцию anti-replay19, поддерживаемую AH и ESP, это может приводить к недопустимому отбрасыванию пакетов с низким приоритетом, обусловленному используемым этой функцией оконным механизмом. Поэтому отправителю следует помещать трафик разных классов с одинаковым значением селектора в разные SA для поддержки различных уровней качества обслуживания (QoS20). Для решения этой задачи реализация IPsec должна обеспечивать возможность организации и поддержки множества SA с одинаковым селектором между данным отправителем и получателем. Распределение трафика между этими параллельными SA для поддержки QoS задаётся локально отправителем и не согласуется через IKE. Получатель должен беспристрастно обрабатывать пакеты из разных SA. Эти требования применимы как к транспортным, так и к туннельным SA. Для SA в туннельном режиме нужные значения DSCP находятся во внутренних заголовках IP. Для транспортного режима значение DSCP может измениться по пути, но это не должно вызывать проблем при обработке IPsec, поскольку это значение не используется для выбора SA и недопустимо проверять это значение в процессе проверки пакетов и SA. Однако, если происходит существенное нарушение порядка доставки пакетов (например, в результате изменения значений DSCP в пути), это может включать на приёмной стороне механизм отбрасывания пакетов в результате применения механизма предотвращения повторного использования пакетов (anti-replay).

Обсуждение: Хотя поля DSCP [NiBlBaBL98, Gro02] и ECN21 [RaFlBl01] не являются “селекторами” в понимании описываемой архитектуры, на передающей стороне требуется механизм, позволяющий направлять пакеты с данным значением (набором значений) DSCP в подходящую SA. Этот механизм можно назвать классификатором (classifier).

Как было отмечено выше, определены два типа SA — транспортный режим и туннельный режим. IKE создаёт пары SA, поэтому для простоты мы будем требовать, чтобы обе связи SA в паре были однотипными (транспортными или туннельными).

Транспортный режим SA обычно используется при связи между парой хостов для обеспечения сквозной защиты. Когда нужно обеспечение защиты между парой промежуточных систем на пути (в отличие от сквозного использования IPsec), можно использовать транспортный режим между защитными шлюзами или между хостом и защитным шлюзом. В тех случаях, когда используется транспортный режим между парой защитных шлюзов или шлюзом и хостом, транспортный режим можно использовать для поддержки туннелирования в IP (например, IP-in-IP [Per96], GRE22 [FaLiHaMeTr00] или динамическая маршрутизация [ToEgWa04]) через транспортные SA. Для большей ясности отметим, что использование транспортного режима промежуточными системами (например, защитными шлюзами) допустимо лишь применительно к пакетам, в которых адреса отправителей (для исходящих пакетов) или получателей (для входящих пакетов) относятся к самой промежуточной системе. Функции контроля доступа, являющиеся важной частью IPsec, существенно ограничены в таком контексте, поскольку они не могут применяться к “сквозным” заголовкам пакетов, проходящим через SA в транспортном режиме. Таким образом, использование транспортного режима следует аккуратно оценивать с учётом конкретного контекста.

Для IPv4 заголовок протокола защиты в транспортном режиме располагается сразу же после заголовка и опций IP перед заголовком протокола следующего уровня (например, TCP или UDP). Для IPv6 заголовок протокола защиты появляется после основного заголовка IP и выбранных расширенных заголовков, но он может помещаться до опций получателя (destination options) или перед ними; этот заголовок должен располагаться до заголовка протоколов следующего уровня (например, TCP, UDP, SCTP23). В случае ESP связи SA транспортного режима обеспечивают защиту только для протоколов следующего уровня, но не для заголовков IP или любых расширенных заголовков, появляющихся перед заголовком ESP. В случае AH защита обеспечивается также для выбранной части предшествующего заголовка, выбранных частей расширенных заголовков и выбранных опций (содержащихся в заголовке IPv4, расширенных заголовках IPv6 Hop-by-Hop или IPv6 Destination). Более детальное описание защищаемых AH областей приведено в спецификации AH [Ken05b].

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

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

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

Существует несколько причин использования туннельного режима для SA, включающих защитные шлюзы. Например, если имеется множество путей (скажем, через различные защитные шлюзы) к одному адресату, находящемуся за защитным шлюзом, важно чтобы пакеты IPsec передавались тому шлюзу, с которым была согласована связь SA. Аналогичная ситуация возникает и для фрагментов — если на пути возможна фрагментация пакетов, все фрагменты должны доставляться одному экземпляру IPsec для их сборки до выполнения криптографических операций. К тому же, когда фрагмент обработан IPsec, передан и подвергнут дополнительной фрагментации, очень важно иметь внешний и внутренний заголовки, чтобы сохранить состояние фрагментации для пакетов до и после операций IPsec. Следовательно, имеется множество причин использования туннельного режима SA в тех случаях, когда любая из конечных точек является защитным шлюзом. (Использование туннеля IP-in-IP в комбинации с транспортным режимом позволяет решить проблему фрагментации. Однако такая конфигурация ограничивает возможности использования IPsec для реализации политики контроля доступа.)

Примечание: Протоколы AH и ESP не могут применяться в транспортном режиме к пакетам IPv4, являющимся фрагментами. В таких случаях можно использовать только туннельный режим. Для IPv6 можно передавать незашифрованные (plaintext0 фрагменты в транспортном режиме SA; однако для простоты упомянутое ограничение сохраняется и для пакетов IPv6. Более детальное описание работы с незашифрованными фрагментами на защищённой стороне границы IPsec приведено в главе 7.

Для туннельного режима SA существует “внешний” заголовок IP, указывающий отправителя и получателя IPsec, и “внутренний” заголовок IP, который (явно) задаёт первичного отправителя и получателя для пакета. Заголовки протокола защиты размещаются после внешнего заголовка IP, не перед внутренним заголовком IP. Если в туннельном режиме используется протокол AH, некоторые части внешнего заголовка IP также защищаются (как было отмечено выше) вместе с туннелируемым пакетом IP (т. е., внутренний заголовок IP, а также протоколы следующих уровней защищены полностью). При использовании ESP защита обеспечивается только для туннелируемых пакетов, но не для внешнего заголовка.

Требования к поддержке режимов можно резюмировать следующим образом:

  1. Хостовая реализация IPsec должна поддерживать транспортный и туннельный режим. Это требование относится к реализации в стеке (native), а также к вариантам BITS и BITW.

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

4.2. Функциональность SA

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

Например, оба протокола AH и ESP обеспечивают аутентификацию и защиту целостности, но набор функций для этих протоколов отличается и зависит от выбранного режима. Если требуется защита опций IPv4 или расширенных заголовков IPv6 на пути между отправителем и получателем, протокол AH может обеспечить такой сервис за исключением того, что заголовок IP или расширенный заголовок может быть изменён непредсказуемо для отправителя.

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

Гранулярность обеспечиваемого контроля доступа определяется выбором селекторов, которые определяют каждую связь SA. Более того, способы аутентификации, задействованные партнёрами IPsec (например, IKE SA) также воздействуют на гранулярность контроля доступа.

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

Примечание: Для соответствующих спецификациям реализаций недопустимо разрешать организацию ESP SA без шифрования (NULL encryption0 и проверки целостности одновременно. Попытка организации такой связи SA проверяема как со стороны инициатора, так и с отвечающей стороны. В запись журнала системного аудита следует включать текущей значения времени и даты, а также локальный и удалённый IP-адреса IKE. Инициатору следует включать в журнал соответствующую запись SPD.

4.3. Комбинированные связи SA

Данный документ не требует поддержки вложенных защищённых связей или пакетов SA26, определённых в RFC 2401 [RFC2401]. На эти возможности по-прежнему оказывает влияние конфигурация SPD и локальных функций пересылки (для входящего и исходящего трафика), но они находятся за пределами модуля IPsec и поэтому не включены в данную спецификацию. Управление вложенными и сгруппированными (nested/bundled) связями SA потенциально более сложно и менее надёжно, нежели модель, предполагаемая RFC 2401 [RFC2401]. Реализации, поддерживающей вложенные связи SA, следует обеспечивать интерфейс управления, который позволяет пользователю или администратору выражать требование вложенности и тогда создавать подходящие записи SPD и таблицы пересылки для обеспечения требуемой обработки (пример конфигурации вложенных SA см. в Приложении E).

4.4. Основные базы данных IPsec

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

В этой модели существует три номинальных базы данных — SPD, SAD и PAD27. Первая база задаёт правила для входящего и исходящего трафика хоста или защитного шлюза (параграф 4.4.1). Вторая база содержит параметры, относящиеся к каждой действующей связи SA (параграф 4.4.2). Третья база (PAD) обеспечивает связь между протоколом управления SA (таким, как IKE) и базой правил SPD (параграф 4.4.3).

Множество раздельных вариантов контекста IPsec

Если реализация IPsec используется в качестве защитного шлюза для множества абонентов, она может поддерживать множество раздельных вариантов контекст IPsec. Каждый контекст может иметь и использовать множество полностью независимых идентификаторов, правил, связей управления28 SA и/или IPsec SA. По большей части это определяется реализацией, однако требуется способ связывания входящих вызовов (SA) с локальным контекстом. Если поддерживается использование протокола управления ключами, идентификаторы контекста могут передаваться от инициатора отвечающей стороне в сигнальных сообщениях. В результате этого создаются IPsec SA с привязкой к определённому контексту. Например, защитный шлюз, предоставляющий VPN-сервис множеству пользователей, будет способен связать трафик каждого пользователя с корректной VPN.

Решения о пересылке и безопасности

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

Локальные и удалённые адреса и порты

В этом документе применительно к адресам IP и номерам портов используются термины “локальный” и “удалённый” для выражения правил защиты. Локальными называются адреса и номера портов для объектов, защищённых реализацией IPsec (т. е., адреса и номера портов отправителей для исходящих пакетов и получателей для входящих). Удалёнными будут называться адреса и номера портов на противоположной стороне. Термины отправитель (source) и получатель (destination) используются для полей заголовков пакетов.

Начальные фрагменты

В этом документе фраза «отличный от начального фрагмент29» используется для обозначения фрагментов, не содержащих всех значений селекторов, которые могут потребоваться для контроля доступа (например, фрагмент может не содержать поля указания следующего уровня30, номеров порта для отправителя и получателя, типа или кода ICMP, типа Mobility Header). Термин «начальный фрагмент31» используется для обозначения фрагментов, содержащий все значения селекторов, которые могут потребоваться для контроля доступа. Однако следует отметить, что для IPv6 фрагмент, содержащий идентификатор протокола следующего уровня и номера портов (тип/код ICMP или тип Mobility Header [Mobip]) может определяться типом и числом присутствующих расширений заголовка. Поэтому в таком контексте начальный фрагмент может быть не первым.

4.4.1. База правил защиты (SPD)

SA представляет собой управляющую конструкцию, используемую для применения правил защиты к трафику, проходящему через границу IPsec. Таким образом, существенным элементом обработки SA является лежащая в основе база правил защиты SPD, которая задаёт типы сервиса, обеспечиваемого для дейтаграмм IP, и способ реализации защиты. Формат базы данных и её интерфейс выходят за пределы данной спецификации. Однако в данном параграфе определена минимальная функциональность, которая должна обеспечиваться для того, чтобы позволить системному администратору или пользователю определять какие функции IPsec и каким способом применяются к трафику, передаваемому или принимаемому хостом, или проходящему через защитный шлюз. База данных SPD (или соответствующий кэш этой базы) должна использоваться при обработке всего (входящего и исходящего) трафика (включая трафик, для которого не используется защита IPsec), проходящего через границу IPsec. Сюда включается и трафик управления IPsec (такой, как IKE). реализация IPsec должна иметь по крайней мере одну базу SPD и может поддерживать множество SPD, если это подходит для контекста применения реализации IPsec. Не вводится требования поддержки SPD для каждого интерфейса, как было задано в RFC 2401 [RFC2401]. Однако, если реализация поддерживает множество SPD, она должна включать функцию явного выбора SPD, которая служит для указания конкретной базы SPD, используемой для обработки исходящего трафика. Аргументами этой функции могут являться параметры исходящих пакетов и любые локальные метаданные (например, интерфейс, через который получен пакет), требуемые для выбора подходящей базы SPD. Выходными данными функции является идентификатор SPD (SPD-ID).

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

Варианты обработки — DISCARD, BYPASS, PROTECT

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

SPD-S, SPD-I, SPD-O

База SPD логически делится на три части. SPD-S (защищённый трафик) содержит записи для всего трафика, которому обеспечивается защита IPsec. SPD-O (исходящий трафик) содержит записи для всего исходящего трафика, который передаётся в обход или отбрасывается. SPD-I (входящий трафик) применяется к входящему трафику, который отбрасывается или передаётся в обход. Все три части базы могут быть декоррелированы (за упомянутым выше исключением для реализации IPsec в стеке хоста) для облегчения кэширования. Если реализация IPsec поддерживает только одну базу SPD, эта SPD включает все три части. При поддержке множества SPD некоторые из баз могут быть неполными. Например, некоторые SPD могут включать только SPD-I для независимого контроля за передаваемым в обход входящим трафиком на каждом интерфейсе. Расщепление позволяет использовать SPD-I для входящего трафика без обращений к базе SPD-S для такого трафика. Поскольку SPD-I является лишь частью SPD, если пакет не соответствует ни одной из записей SPD-I, такой пакет должен отбрасываться. Отметим, что для исходящего трафика отсутствие записи в SPD-S ведёт к проверке SPD-O для аутентификации трафика, передаваемого в обход. Если же сначала проверяется SPD-O, то при отсутствии соответствий должна потом просматриваться база SPD-S. В упорядоченных SPD без декорреляции записи для SPD-S, SPD-I и SPD-O чередуются, поэтому возможен однократный поиск в SPD.

Записи SPD

Каждая запись SPD задаёт судьбу пакета — BYPASS, DISCARD или PROTECT. Запись снабжается списком из одного или множества селекторов. База SPD содержит упорядоченный набор таких записей. Обязательные типы селекторов определены в параграфе 4.4.1.1. Эти селекторы служат для задания гранулярности SA, создаваемых в ответ на исходящий пакет или по запросу от партнёра. Детальное описание структуры записей SPD приведено в параграфе 4.4.1.2. Каждой базе SPD следует иметь номинальную конечную запись, которая соответствует всему, что не нашло соответствия в предыдущих записях, и обеспечивает отбрасывание таких пакетов. База SPD должна обеспечивать пользователю или администратору возможность задания политики записей, как показано ниже:

  • SPD-I: для входящего трафика, который передаётся в обход или отбрасывается; запись содержит значения селекторов, определяющих трафик для обхода или отбрасывания;

  • SPD-O: для исходящего трафика, который передаётся в обход или отбрасывается; запись содержит значения селекторов, определяющих трафик для обхода или отбрасывания;

  • SPD-S: для трафика, защищаемого с использованием IPsec; запись содержит значения селекторов, определяющих трафик для защиты с использованием AH или ESP, контролирует создание SA на основе этих селекторов и параметры, требуемые для обеспечения защиты (например, алгоритмы, режимы и т. п.). Отметим, что записи SPD-S содержат такую информацию, как флаг PFP33 (см. ниже параграф «Как получить значения для записи SAD«) и биты, показывающие используются ли при поиске SA локальные и удалённые адреса IP в дополнение к SPI (см. спецификации AH [Ken05b] и ESP [Ken05a]).

Задание направления в записях SPD

Для трафика, защищаемого IPsec, локальные и удалённые адреса и номера портов меняются местами в записи SPD для задания направления в соответствии с соглашениями IKE. В общем случае протоколы, с которыми имеет дело IPsec, требуют организации симметричных SA с поменянными местами локальными и удалёнными адресами IP. Однако для ICMP зачастую не требуется авторизация в обоих направлениях. Несмотря на это, из соображений однородности и простоты записи SPD для ICMP задаются так же, как и для остальных протоколов. Отметим также, что для ICMP, Mobility Header и фрагментов, отличных от начального, в пакетах не содержатся номера портов. ICMP использует тип и код сообщения, а Mobility Header — тип заголовка. Поэтому записи SPD выражают правила контроля доступа для этих протоколов с использованием соответствующих полей вместо номеров портов. Для передаваемого в обход или отбрасываемого трафика поддерживаются раздельные записи для каждого направления, чтобы обеспечить возможность независимого контроля в обоих направлениях.

OPAQUE и ANY

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

Как получить значения для записи SAD

Для каждого селектора в записи SPD эта запись задаёт как получаются соответствующие значения для новой базы данных SA (SAD, см. параграф 4.4.2) из записей SPD и пакета. Задача состоит в том, чтобы обеспечить создание записи SAD и кэшированной записи SPD на основе значений указанного селектора из пакета или соответствующей записи SPD. Для исходящего трафика имеются кэшированные записи SPD-S и SPD-O. Для входящего трафика, не защищаемого IPsec, имеются кэшированные записи SPD-I и SAD, которая представляет кэш для входящего трафика, защищаемого IPsec (см. параграф 4.4.2). Если для записи задана обработка IPsec, может устанавливаться флаг PFP для одного или множества селекторов в записи SPD (локальный адрес IP, удалённый адрес IP, протокол следующего уровня и, в зависимости от протокола следующего уровня, локальный и удалённый порт, тип и код ICMP или тип Mobility Header). Установленный для данного селектора X флаг показывает, что для создаваемой связи SA следует брать значение X из пакета. При отсутствии флага SA следует брать значение для X из записи SPD.
Примечание: В случае отсутствия флага PFP значение селектора, согласуемое протоколом управления SA (например, IKEv2), может быть подмножеством значений в записи SPD, в зависимости от заданной партнёром политики SPD. Вопрос использования одного флага для всех селекторов (например, порт отправителя, тип/код ICMP или тип заголовка MH34) или отдельного флага для каждого селектора решается локально.

Приведённый ниже пример иллюстрирует использование флага PFP в контексте защитного шлюза или реализации BITS/BITW. Рассмотрим запись SPD, где разрешён диапазон удалённых адресов IPv4 от 192.0.2.1 до 192.0.2.10. Предположим, что исходящий пакет приходит с адресом получателя 192.0.2.3 и пока не существует SA для доставки этого пакета. Значение, используемое при создании SA для передачи этого пакета может быть одним из двух, показанных ниже в зависимости от того, что запись SPD для этого селектора задаёт в качестве источника значений для селектора:

Значение флага PPF для селектора удалённого адреса

Пример значения селектора удалённого адреса для новой SAD

a. PFP TRUE

192.0.2.3 (один хост)

b. PFP FALSE

192.0.2.1 — 192.0.2.10 (группа хостов)

Отметим, что если показанная выше запись SPD имеет значение ANY для удалённого (Remote) адреса, для значения селектора SAD будет выбрано ANY в случае (b), но сохранится показанное в примере значение для случая (a). Таким образом, флаг PFP можно использовать для запрета совместного использования SA даже среди пакетов, соответствующих одной записи SPD.

Интерфейс управления

Для каждой реализации IPsec должен поддерживаться интерфейс управления, обеспечивающий пользователю или системному администратору возможность управления SPD. Интерфейс должен позволять пользователю (или администратору) задавать режим обработки для каждого пакета, проходящего через границу IPsec35. Интерфейс управления для SPD должен позволять создание записей, совместимых с селекторами, определёнными в параграфе 4.4.1.1, а также должен поддерживать (полное) упорядочивание записей, видимых через этот интерфейс. Селекторы записей SPD аналогичны спискам контроля доступа ACL или пакетным фильтрам, которые повсеместно используются в МСЭ без учёта состояний (stateless firewall) или маршрутизаторах с фильтрацией пакетов и управляются аналогичным путём. На хостовых системах приложениям может быть разрешено создание записей SPD36. Однако системному администратору должна предоставляться возможность разрешать или запрещать пользователям или приложениям переписывать (принятые по умолчанию) системные правила. Форма интерфейса управления не задаётся данным документом и может различаться для хостов и защитных шлюзов, а также для хостов, использующих интерфейс сокетов, и реализаций BITS. Тем не менее данный документ задаёт стандартный набор элементов SPD, который должны поддерживать все реализации IPsec.

Декорреляция

Описываемая в этом документе модель обработки предполагает возможность декорреляции перекрывающихся записей SPD для обеспечения возможности кэширования, которое повышает эффективность обработки исходящего трафика в защитных шлюзах и реализациях BITS/BITW. Декорреляция [CoSa04] является лишь способом повышения производительности и упрощения описания обработки. Данный документ не требует от соответствующих спецификации реализаций обязательно использовать декорреляцию. Например, реализации в стеке протоколов хоста обычно используют косвенное кэширование (caching implicitly), поскольку они связывают SA с интерфейсами сокетов и в результате такого связывания в таких реализациях не требуется декоррелировать записи SPD.

Примечание: Если явно не указано иное, термин SPD относится к информации о политике как в упорядоченном, так и в декоррелированном (неупорядоченном) состоянии. Приложение B описывает алгоритм, который можно использовать для декоррелирования записей SPD. На практике можно использовать любой алгоритм, который даёт эквивалентный описанному в приложении результат. Отметим, что после декорреляции записей SPD все полученные в результате записи должны быть связаны воедино, чтобы все члены группы, полученной из одной (до декорреляции) записи SPD, могли быть одновременно помещены в кэш и SAD. Для примера предположим, что запись A (из упорядоченной базы SPD) после декорреляции даёт записи A1, A2 и A3. Когда приходящий пакет соответствует, например, записи A2 и вызывает создание SA, протокол управления SA (например, IKEv2) согласует A. Все три декоррелированные записи A1, A2, A3 помещаются в подходящий кэш SPD-S и связываются с SA. Смысл этого состоит в том, чтобы использование декоррелированных SPD не приводило к созданию большего числа SA, нежели было бы создано при использовании SPD без декорреляции.

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

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

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

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

Обработка изменений в SPD во время работы системы

Если вносятся изменения в SPD во время работы системы, следует проверить воздействие этих изменений на существующие связи SA. Реализации следует проверить влияние изменений в SPD на существующие связи SA, а также следует предоставить пользователю/администратору механизм выбора предпринимаемых действий (например, удалить SA, на которые воздействуют внесённые изменения, позволить SA продолжать работу без изменений и т. п.).

4.4.1.1. Селекторы

Связи SA могут быть “крупнозернистыми” или “мелкозернистыми” в зависимости от селекторов, используемых при определении трафика для SA. Например, весь трафик между парой хостов может передаваться через одну связь SA с применением одного набора средств защиты. И напротив, трафик между парой хостов может передаваться с использованием множества SA, определяемых используемыми приложениями (задаются протоколом следующего уровня и связанными полями — например, номерами портов), с различными наборами средств защиты для разных SA. Подобно этому весь трафик между парой хостов может передаваться через одну SA или одна связь SA может выделяться для каждой пары обменивающихся данными хостов. Перечисленные ниже параметры селекторов должны поддерживаться всеми реализациями IPsec для облегчения контроля гранулярности SA. Отметим, что оба адреса — локальный и удалённый — должны быть IPv4 или IPv6, но не различных типов. Отметим также, что селекторы локального и удалённого портов (а также тип и код сообщений ICMP и тип Mobility Header) могут помечаться как OPAQUE для использования в тех ситуациях, когда эти поля становятся недоступными в результате фрагментации пакетов.

  • Remote IP Addresses — удалённые адреса — (IPv4 или IPv6): Список диапазонов адресов IP (индивидуальных — unicast, широковещательных — broadcast (только IPv4)). Данная структура позволяет указать один адрес IP (вырожденный диапазон), список отдельных адресов (каждый адрес в виде вырожденного диапазона) или диапазон адресов (верхняя и нижняя граница, включительно), а также наиболее общую (most generic) форму списка диапазонов. Диапазоны адресов задаются для поддержки множества удалённых систем, использующих одну SA (например, после защитного шлюза).

  • Local IP Addresses — локальные адреса — (IPv4 или IPv6): Список диапазонов адресов IP (индивидуальных — unicast, широковещательных — broadcast (только IPv4)). Данная структура позволяет указать один адрес IP (вырожденный диапазон), список отдельных адресов (каждый адрес в виде вырожденного диапазона) или диапазон адресов (верхняя и нижняя граница, включительно), а также наиболее общую (most generic) форму списка диапазонов. Диапазоны адресов задаются для поддержки множества удалённых систем, использующих одну SA (например, после защитного шлюза). Термин “локальный” обозначает, что эти адреса защищаются данной реализацией (или записью политики).

Примечание: SPD не включает поддержку записей для групповых (multicast) адресов. Для поддержки групповых SA реализации следует использовать Group SPD (GSPD), как определено в [RFC3740]. Записи GSPD требуют иной структуры, т. е. Они не могут использовать симметричных отношений, связанных локальными или удалёнными адресами индивидуальных SA в multicast-контексте. В частности, исходящий трафик, направленный по групповому адресу в SA, не будет получен парной входной связью SA с групповым адресом в поле отправителя.

  • Next Layer Protocol — протокол следующего уровня: Это значение берётся из поля IPv4 «Protocol» или IPv6 «Next Header». Это может быть номер конкретного протокола, значение ANY (все) или (только для IPv6) — OPAQUE. Значение Next Layer Protocol размещается после всех расширений заголовков. Для упрощения поиска Next Layer Protocol следует поддерживать механизм, который позволяет задать пропускаемые расширения заголовков IPv6. По умолчанию следует пропускать протоколы 0 (опции Hop-by-hop), 43 (Routing Header), 44 (Fragmentation Header) и 60 (Destination Options). Отметим, что этот список не включает значений 51 (AH) и 50 (ESP). С точки зрения поиска селекторов IPsec трактует AH и ESP как протоколы следующего уровня.

    Несколько дополнительных селекторов используются в зависимости от значение Next Layer Protocol:

    • Если протокол следующего уровня использует два порта (как это делают TCP, UDP, SCTP и др.), тогда существуют селекторы для локального и удалённого портов. Каждый из этих селекторов представляет собой список диапазонов значений. Отметим, что номера портов Local и Remote могут оказаться недоступными в случаях прихода фрагментов или при защите этих полей с помощью IPsec (шифрованные поля); таким образом, должно поддерживаться значение OPAQUE. Отметим, что в отличных от начального фрагментах номера портов недоступны. Если селектор портов задаёт значение, отличное от ANY или OPAQUE, ему не будут соответствовать никакие фрагменты, кроме начальных. Если SA требует для порта значение, отличное от ANY или OPAQUE, прибывающие фрагменты без номеров портов должны отбрасываться (см. главу 7, «Обработка фрагментов».)

    • Если протоколом следующего уровня является Mobility Header, существует селектор типа сообщения IPv6 Mobility Header (тип MH) [Mobip]. Это 8-битовое значение идентифицирует отдельное сообщение. Отметим, что тип MH может быть недоступен при получении фрагмента (см. главу 7). Для IKE тип MH помещается в 8 старших битов 16-битового селектора локального “порта”.

    • Если протоколом следующего уровня является ICMP, существует 16-битовый селектор типа и кода сообщения ICMP. Тип сообщения представляет собой одно 8-битовое значение, которое определяет тип сообщения ICMP или ANY. Код ICMP представляет собой одно 8-битовое значение, которое определяет специфический подтип для сообщения ICMP. Для IKE тип сообщения указывается в 8 старших битах 16-битового селектора, а код — в 8 младших битах этого селектора. Этот 16-битовый селектор может содержать один тип и диапазон кодов, один тип и любой (ANY) код, а также любой (ANY) тип с любым (ANY) кодом. Для правила с диапазоном типов от T-start до T-end и кодов от C-start до C-end и пакета ICMP с типом t и кодом c реализация должна проверять выполнение условий

(T-start*256) + C-start <= (t*256) + c <= (T-end*256) + C-end

Отметим, что тип и код сообщения ICMP могут быть недоступны в случаях получения фрагментов (см. главу 7).

  • Name — имя. Этот селектор не похож на перечисленные выше. Он не извлекается из пакета. Имя может использоваться как символьный идентификатор для локального или удалённого адреса IPsec. Именованные записи SPD используются двумя способами:

  1. Именованные записи SPD используются отвечающей стороной (responder) для поддержки контроля доступа в тех случаях, когда для IP-адреса нет подходящего селектора Remote IP (например, для мобильного пользователя). Имя, используемое для сравнения с этим полем, передаётся в процессе согласования IKE в поле ID payload. В этом контексте адрес инициатора Source IP (внутренний заголовок IP в туннельном режиме) связан с адресом Remote IP в записи SAD, создаваемой при согласовании IKE. Этот адрес заменяется в SPD значением Remote IP, при выборе записи SPD означенным способом. Все реализации IPsec должны поддерживать такое использование имён.

  2. Именованная запись SPD может использоваться инициатором для аутентификации пользователя, для которого будет создаваться IPsec SA (или чей трафик будет передаваться в обход). Для замены перечисленных ниже параметров используется IP-адрес инициатора (из внутреннего заголовка IP в туннельном режиме):

  • локальный адрес в кэшированной записи SPD;

  • локальный адрес в исходящей записи SAD;

  • удалённый адрес во входящей записи SAD.

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

Запись SPD может содержать имя (или список имён.), а также значения локального и удалённого адресов IP.

Для случая 1 (responder) идентификаторы, используемые в именованных записях SPD относятся к одному из перечисленных типов:

  1. полный адрес электронной почты пользователя — например, mozart@foo.example.com (соответствует ID_RFC822_ADDR в IKEv2)

  2. полное доменное имя DNS — например, foo.example.com (соответствует ID_FQDN в IKEv2)

  3. имя37 X.500 — например, [WaKiHo97], CN = Stephen T. Kent, O = BBN Technologies, SP = MA, C = US (соответствует ID_DER_ASN1_DN в IKEv2 после декодирования)

  4. строка байтов (соответствует Key_ID в IKEv2)

Для случая 2 (initiator) идентификаторы, используемые в именованных записях SPD представляют собой строки байтов. Ясно, что это могут быть идентификаторы пользователей Unix (UID), идентификаторы защиты Windows (security ID) или что-то в этом же роде, но могут также использоваться имена пользователей или учётных записей. В любом случае этот идентификатор имеет лишь локальное значение и не передаётся.

Контекст реализации IPsec определяет использование селекторов. Например, естественная реализация для хоста обычно использует интерфейс сокетов. При создании нового соединения может делаться запрос к SPD с привязкой SA к сокету. Таким образом трафик, передаваемый через сокет, не будет требовать дополнительного просмотра кэша SPD (SPD-O и SPD-S). Напротив, реализации BITS, BITW или защитных шлюзов должны выполнять просмотр для каждого пакета, выполняя поиск в кэше SPD-O/SPD-S на основе селекторов.

4.4.1.2. Структура записи SPD

В этом параграфе приводится описание структуры записей SPD. Приложение C содержит пример определения ASN.1 для записи SPD.

Описание SPD построено так, чтобы дать прямое отображение на данные IKE — это позволит согласовывать правила, требуемые SPD через IKE. К сожалению семантика IKEv2 [Kau05] была опубликована одновременно с этим документом, что не позволило обеспечить точное соответствие определений для SPD. В частности, IKEv2 не разрешает согласования для одной SA, которая связывает множество пар локальных и удалённых адресов и портов с одной SA. Вместо этого, при согласовании множества локальных и удалённых адресов и портов для SA, IKEv2 трактует их не как пары, а как (неупорядоченные) наборы локальных и удалённых значений, которые можно произвольно спаривать. Пока IKE не обеспечивает средства переноса семантики, выражаемой в SPD через наборы селекторов (как описано ниже), пользователям недопустимо включать множество наборов селекторов в одну запись SPD, если смысл контроля доступа не согласован с семантикой IKE «mix and match». Реализация может предупреждать пользователей для предотвращения проблем, если пользователь создаёт записи SPD со множеством наборов селекторов; синтаксис предупреждения показывает возможные конфликты с семантикой IKE.

Графический интерфейс (GUI) управления может предлагать пользователю другие формы записей (например, опцию использования адресных префиксов и диапазонов адресов, символьные имена38 протоколов и портов и т. п.). Отметим, что опции Remote/Local (удалённый/локальный) применяются только к адресам IP и портам, но не типам/кодам ICMP или типам Mobility Header. Если зарезервированы символьные значения OPAQUE или ANY, они используются для данного типа селектора — только данное значение может появляться в списке для этого селектора и должно присутствовать в списке только один раз. Отметим, что для ANY и OPAQUE используются локальные синтаксические соглашения IKEv2 согласует эти значения с использованием показанных ниже диапазонов.

ANY:     start = 0        end = <max>
OPAQUE:  start = <max>    end = 0

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

  • Name — список идентификаторов. Этот квазиселектор является необязательным. Формы, которые должны поддерживаться, описаны выше в параграфе 4.4.1.1 (Name).

  • PFP flags — флаги PPP (одно значение на селектор). Данный флаг (например, Next Layer Protocol — протокол следующего уровня) применяется к подходящим селекторам всех наборов селекторов (см. ниже), содержащихся в элементе SPD. При создании SA каждый флаг задаёт для соответствующего селектора трафика, создаётся селектор из соответствующего поля в пакете, вызвавшем создание SA, или из значения(й) в соответствующей записи SPD (см. параграф 4.4.1 «Как получить значения для записи SAD»). Использование одного флага для множества элементов (например, порта отправителя, типа/кода ICMP, типа MH) или раздельных флагов для каждого элемента определяется локально. Имеются флаги PFP для следующих элементов:

    • локальный адрес;

    • удалённый адрес;

    • протокол следующего уровня;

    • локальный порт, тип/код сообщения ICMP или тип заголовка Mobility (в зависимости от протокола следующего уровня);

    • удалённый порт, тип/код сообщения ICMP или тип заголовка Mobility (в зависимости от протокола следующего уровня).

  • От 1 до N наборов селекторов, соответствующих «условию» применения определённых действий IPsec. Каждый набор селекторов содержит:

  • локальный адрес;

  • удалённый адрес;

  • протокол следующего уровня;

  • локальный порт, тип/код сообщения ICMP или тип заголовка Mobility (в зависимости от протокола следующего уровня);

  • удалённый порт, тип/код сообщения ICMP или тип заголовка Mobility (в зависимости от протокола следующего уровня).

Примечание. Селектор next protocol имеет индивидуальное значение (в отличие от локальных и удалённых адресов IP) в записи набора селекторов. Это согласуется с принятым в IKEv2 согласованием значений TS (селектор трафика) для SA. Это осмысленно ещё и потому, что может возникнуть необходимость связать различные поля портов с различными протоколами. Можно связать множество протоколов (и портов) в одной SA путём задания множества наборов селекторов для этой SA.

  • Processing info информация о требуемых действиях (PROTECT — защита, BYPASS — обход или DISCARD — отбрасывание). Это просто одно действие, относящееся ко всем наборам селекторов, а не отдельные действия для каждого набора. Если требуемой обработкой является защита (PROTECT) запись содержит перечисленную ниже информацию.

  • Режим IPsec — туннельный или транспортный.

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

  • (в туннельном режиме) удалённый адрес туннеля — для определения этого адреса не существует стандартных путей (см. параграф 4.5.3. Нахождение защитного шлюза).

  • расширенный порядковый номер (ESN) — использует ли данная SA расширенные номера?

  • проверка фрагментов с учётом состояния — выполняет ли данная SA такую проверку (см. раздел 7).

  • обход бита DF (T/F) — применимо к SA в туннельном режиме.

  • обход DSCP (T/F) или отображение на незащищённые значения DSCP (массив), если требуется ограничить обход значений DSCP — применимо к SA в туннельном режиме.

  • протокол IPsec protocol — AH или ESP.

  • Алгоритмы — используемые для AH, для ESP, для комбинированного режима в порядке убывания приоритета.

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

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

С полями в заголовке Next Layer Protocol часто связываются дополнительные селекторы. Конкретный заголовок Next Layer Protocol может иметь до 2 селекторов. Возможны ситуации, когда отсутствуют локальные и удалённые селекторы для полей, зависящих от Next Layer Protocol. Заголовок IPv6 Mobility имеет тип сообщения только Mobility Header. AH и ESP не имеют добавочных полей селекторов. Система может пожелать передать тип и код сообщений ICMP, которые она не хочет получать. В приведённых ниже описаниях термин «port» служит для обозначения поля, зависящего от Next Layer Protocol.

  1. Если Next Layer Protocol не имеет селекторов «port», для локального и удалённого селекторов «port» у соответствующей записи SPD указываются значения OPAQUE.

    Локальный next layer protocol = AH

    "port" selector     = OPAQUE

    Удалённый next layer protocol = AH

"port" selector     = OPAQUE
  1. Даже если Next Layer Protocol имеет единственный селектор (например, тип Mobility Header), селекторы локального и удалённого «портов» используются для индикации желания системы передавать и/или принимать трафик с заданными значениями «портов». Например, если разрешено передавать и принимать заголовки Mobility заданного типа через SA, соответствующая запись SPD будет иметь вид:

    Локальный next layer protocol = Mobility Header

    "port" selector     = тип сообщения Mobility Header

    Удалённый next layer protocol = Mobility Header

"port" selector     = тип сообщения Mobility Header

Если указанный тип заголовков Mobility разрешён для передачи, но не принимается через SA, соответствующая запись SPD имеет вид:

Локальный next layer protocol = Mobility Header

"port" selector     = тип сообщения Mobility Header

Удалённый next layer protocol = Mobility Header

"port" selector     = OPAQUE

Если указанный тип заголовков Mobility разрешён для приёма, но не разрешён для передачи, соответствующая запись SPD будет иметь вид:

Локальный next layer protocol = Mobility Header

"port" selector     = OPAQUE

Удалённый next layer protocol = Mobility Header

"port" selector     = тип сообщения Mobility Header
  1. Если система желает передавать трафик с определенным значением «порта», но не желает принимать трафик с таким значением, в соответствующей записи SPD системные селекторы трафика имеют вид:

    Локальный next layer protocol = ICMP

    "port" selector     = <указанный тип и код ICMP>

    Удалённый next layer protocol = ICMP

"port" selector     = OPAQUE
  1. Для индикации желания системы принимать трафик с определенным «портом», но не передавать такого трафика в соответствующей записи SPD системные селекторы трафика имеют вид:

    Локальный next layer protocol = ICMP

    "port" selector     = OPAQUE

    Удалённый next layer protocol = ICMP

"port" selector     = <указанный тип и код ICMP>

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

Локальный next layer protocol = 1 (ICMPv4)

"port" selector     = 30 (traceroute)

Удалённый next layer protocol = 1 (ICMPv4)

"port" selector     = OPAQUE

4.4.2. База защищённых связей (SAD)

В каждой реализации IPsec существует номинальная база данных о защищённых связях (SAD), каждая запись которой определяет параметры, связанные с одной SA. Каждая SA имеет запись в SAD. Для обработки исходящего трафика каждая запись SAD указывается записями в части SPD-S кэша SPD. При обработке входящего трафика для SA с индивидуальной адресацией, SPI используется для поиска SA самостоятельно или в комбинации с типом протокола IPsec. Если реализация IPsec поддерживает групповую адресацию, для поиска SA используется SPI и адрес получателя или SPI в комбинации с адресами отправителя и получателя (в параграфе 4.1 подробно описаны алгоритмы, которые должны использоваться для отображения входящих дейтаграмм IPsec на SA). Описанные далее параметры связаны с каждой записью в SAD. Этим параметрам следует присутствовать всегда, если явно не указано иное (например, алгоритм аутентификации AH). Это описание не является MIB39 и задаёт лишь минимальный набор данных, требуемых для поддержки SA в реализации IPsec.

Для каждого из селекторов, определённых в параграфе 4.4.1.1, запись SAD для входящей SA должна быть изначально заполнена значением или значениями, согласованными при создании SA (см. параграф 4.4.1 «Обработка изменений в SPD во время работы системы», где рассмотрено влияние изменений в SPD на остающиеся SA). Для получателя эти значения используются при проверке соответствия полей входящих пакетов (после обработки IPsec) значениям селекторов, согласованным для SA. Таким образом, SAD действует, как кэш для проверки селекторов входящего трафика, поступающего в SA. Для получателя это является частью проверки того, что приходящий в SA пакет согласуется с политикой для данной SA (см. раздел 6, содержащий правила для сообщений ICMP). Эти поля могут иметь форму отдельных значений или диапазонов, а также ANY или OPAQUE, как описано в параграфе 4.4.1.1. Селекторы. Отметим также, что существуют ситуации, когда в SAD имеются записи для SA, которые не имеют соответствующих записей в SPD. Поскольку этот документ не задаётся обязательной селективной очистки SAD при изменении SPD, записи SAD могут оставаться в то время, как создавшие их записи SPD будут изменены или удалены. Также при ручном создании SA для них могут быть записи SAD, которые не соответствуют записям SPD.

Примечание. SAD может поддерживать SA с групповой адресацией, если это задано вручную. На исходящих SA с групповой адресацией структура совпадает с обычной SA. В качестве адреса отправителя указывается адрес передающего хоста, а в качестве адреса получателя — адрес группы. Для входящего трафика SA с групповой адресацией должны включать в качестве адресов отправителей адреса всех партнёров, которые уполномочены передавать в данную SA трафик в групповыми адресами. Значение SPI для групповой SA обеспечивается контроллером группы, а не получателем, как для обычных SA. Поскольку для записей SAD может требоваться включение множества индивидуальных IP-адресов отправителей, которые были частью записи SPD (для обычных SA), требуемое для входящих групповых SA свойство уже присутствует в реализации IPsec. Однако, поскольку SPD не имеет средств для аккомодации групповых записей, этот документ не задаёт способа автоматического создания записей SAD для входящих SA с групповой адресацией. Для аккомодации входящего трафика с групповой адресацией записи SAD могут создаваться лишь вручную.

Рекомендации для разработчиков. Этот документ не задаёт, как запись SPD-S ссылается на соответствующую запись SAD, поскольку это зависит от реализации. Однако известно, что некоторые реализации (основанные на опыте из RFC 2401) имеют проблемы в этой части. В частности, простого сохранения пары (IP-адрес заголовка удалённого туннеля, удалённый SPI) в кэше SPD недостаточно, поскольку такая пара не всегда позволяет однозначно идентифицировать одну запись SAD. Например, два хоста за одним устройством NAT могут выбрать одинаковое значение SPI. Аналогичная ситуация может возникать, когда хост получает адрес IP (например, от DHCP), который раньше использовался другим хостом и SA, связанные с тем хостом ещё не были удалены механизмом обнаружения «умерших» хостов. Это может приводить к тому, что пакеты будут передаваться через некорректную SA или, если управления ключами обеспечивает уникальность пары, отказу от создания корректных SA. Таким образом, реализациям следует поддерживать связь между кэшем SPD и SAD таким образом, чтобы не возникало упомянутых проблем.

4.4.2.1. Элементы данных в SAD

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

  • Список параметров защиты (SPI) — 32-битовое значение, выбираемое передающей стороной SA для уникальной идентификации SA. В записи SAD для исходящей SA значение SPI используется для создания заголовков пакетов AH и ESP. В записи SAD для входящей SA значение SPI используется для отображения трафика на соответствующую SA (см. параграф 4.1).

  • Счётчик порядковых номеров — 64-битовое значение, используемое для генерации поля Sequence Number в заголовках пакетов AH и ESP. По умолчанию используются 64-битовые номера, но по согласованию могут использоваться и 32-битовые порядковые номера.

  • Переполнение порядкового номера — флаг, показывающий нужно ли при переполнении счётчика порядковых номеров вносить запись в журнал аудита и прекращать дальнейшую передачу пакетов в SA или можно начинать отсчёт номеров заново. В журнальную запись о переполнении счётчика следует включать значение SPI, текущую дату и время, локальный и удалённый адрес, а также селекторы для соответствующей записи SAD.

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

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

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

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

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

  • Время жизни данной SA — интервал, по завершении которого данная SA должна быть заменена новой SA (с новым SPI) или прервана, с индикацией какое из двух означенных действий следует выполнять. Срок жизни может определяться временем или количеством байтов, а также обоими параметрами (прерывание по первому порогу). Соответствующие спецификации реализации должны поддерживать оба типа и возможность одновременного задания двух порогов. Если задан временной порог и IKE использует сертификаты X.509 для организации SA, время жизни SA должно быть ограничено периодом действия сертификатов, а также значениями NextIssueDate из списков CRL41, использованных в обмене IKE для данной SA. В этом варианте обе стороны соединения (вызывающая и отвечающая) несут ответственность за ограничение времени жизни SA.

Примечание. Детали обновления ключей при завершении срока жизни SA определяются локально. Ниже перечислено несколько подходящих вариантов.

  1. Если используется счётчик байтов, реализации следует подсчитывать число байтов, к которым применяется криптографический алгоритм IPsec. Для ESP это алгоритм шифрования (включая алгоритм Null), а для AH — алгоритм аутентификации. При подсчёте принимаются во внимание байты заполнения и т. п. Отметим, что реализации должны быть способны работать при потере синхронизации на концах SA (например, в результате потери пакетов или по причине использования разных механизмов по разные стороны SA).

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

  3. Если пакет целиком не укладывается в срок жизни SA, этот пакет следует отбрасывать.

  • Режим протокола IPsec — туннельный или транспортный. Показывает какой режим AH или ESP применяется к трафику данной SA.

  • Флаг проверки фрагментов с учётом состояния. Показывает, применяется ли проверка фрагментов с учётом состояния для данной SA.

  • Флаг обхода DF (T/F) — применяется к туннельным SA, когда внутренние и внешние заголовки относятся к IPv4.

  • Значения DSCP — набор значений DSCP, разрешённых для пакетов через данную SA. Если значений не задано, фильтрации DSCP не происходит. Если задано одно или множество значений, они используются для выбора одной из нескольких SA, соответствующих селекторам трафика для исходящего пакета. Отметим, что фильтрация по этим значениям не применяется для входящих пакетов SA.

  • Обход DSCP (T/F) или отображение на незащищённые значения DSCP (массив), если необходимо ограничить обход значений DSCP — применяется к туннельным SA. Это служит для отображения значений DSCP из внутренних заголовков в значения во внешних заголовках (например, для сокрытия канальной сигнализации).

  • MTU для пути — любые переменные MTU и старения.

  • Адреса отправителя и получателя из заголовка туннеля — оба адреса должны быть однотипными (IPv4 или IPv6). Версия определяет тип используемого заголовка. Используется только в туннельном режиме IPsec.

4.4.2.2. Соотношения между SPD, флагом PFP, пакетом и SAD

Приведённые ниже таблицы показывают для каждого селектора связи между значением SPD, флагом PFP, значением в триггерном пакете и результирующее значение в SAD. Отметим, что административный интерфейс для IPsec может использовать разные синтаксические опции для упрощения работы администратора по вводу правил. Например, хотя IKEv2 передаёт списки диапазонов, для пользователя может оказаться проще и удобней вводить адрес или префикс IP. Такой подход позволяет также снизить число ошибок.

 

Селектор

Запись SPD

PFP

Значение в триггерном пакете

Результирующая запись SAD

loc addr

список диапазонов

0

IP-адрес «S»

список диапазонов

ANY

0

IP-адрес «S»

ANY

список диапазонов

1

IP-адрес «S»

«S»

ANY

1

IP-адрес «S»

«S»

rem addr

список диапазонов

0

IP-адрес «D»

список диапазонов

ANY

0

IP-адрес «D»

ANY

список диапазонов

1

IP-адрес «D»

«D»

ANY

1

IP-адрес «D»

«D»

protocol

список протоколов42

0

протокол «P»

список протоколов1

ANY43

0

протокол «P»

ANY

OPAQUE44

0

протокол «P»

OPAQUE

список протоколов1

0

нет

отбросить пакет

ANY2

0

нет

ANY

OPAQUE3

0

нет

OPAQUE

список протоколов45

1

протокол «P»

«P»

ANY46

1

протокол «P»

«P»

OPAQUE47

1

протокол «P»

48

список протоколов4

1

нет

отбросить пакет

ANY5

1

нет

отбросить пакет

OPAQUE6

1

нет

7

 

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

 

Селектор

Запись SPD

PFP

Значение в триггерном пакете

Результирующая запись SAD

loc port

список диапазонов

0

порт-источник «s»

список диапазонов

ANY

0

порт-источник «s»

ANY

OPAQUE

0

порт-источник «s»

OPAQUE

список диапазонов

0

нет

отбросить пакет

ANY

0

нет

ANY

OPAQUE

0

нет

OPAQUE

список диапазонов

1

порт-источник «s»

отбросить пакет

ANY

1

порт-источник «s»

отбросить пакет

OPAQUE

1

порт-источник «s»

7

список диапазонов

1

нет

отбросить пакет

ANY

1

нет

отбросить пакет

OPAQUE

1

нет

7

rem port

список диапазонов

0

порт-получатель «d»

список диапазонов

ANY

0

порт-получатель «d»

ANY

OPAQUE

0

порт-получатель «d»

OPAQUE

список диапазонов

0

нет

отбросить пакет

ANY

0

нет

ANY

OPAQUE

0

нет

OPAQUE

список диапазонов

1

порт-получатель «d»

«d»

ANY

1

порт-получатель «d»

«d»

OPAQUE

1

порт-получатель «d»

7

список диапазонов

1

нет

отбросить пакет

ANY

1

нет

отбросить пакет

OPAQUE

1

нет

7

 

Для протокола Mobility Header будет использоваться селектор для типа MH.

 

Селектор

Запись SPD

PFP

Значение в триггерном пакете

Результирующая запись SAD

mh type

список диапазонов

0

mh типа «T»

список диапазонов

ANY

0

mh типа «T»

ANY

OPAQUE

0

mh типа «T»

OPAQUE

список диапазонов

0

нет

отбросить пакет

ANY

0

нет

ANY

OPAQUE

0

нет

OPAQUE

список диапазонов

1

mh типа «T»

«T»

ANY

1

mh типа «T»

«T»

OPAQUE

1

mh типа «T»

7

список диапазонов

1

нет

отбросить пакет

ANY

1

нет

отбросить пакет

OPAQUE

1

нет

7

 

Для протокола ICMP будет использоваться 16-битовый селектор типа и кода ICMP. Отметим, что тип и код связаны между собой, т. е., коды относятся к определённому типу. 16-битовый селектор может содержать один тип и диапазон кодов, один тип и любой код (ANY), любой (ANY) тип и любой (ANY) код.

 

Селектор

Запись SPD

PFP

Значение в триггерном пакете

Результирующая запись SAD

Тип и код ICMP

Один тип и диапазон кодов

0

тип «t» и код «c»

Один тип и диапазон кодов

Один тип и код ANY

0

тип «t» и код «c»

Один тип и код ANY

Код ANY и тип ANY

0

тип «t» и код «c»

Код ANY и тип ANY

OPAQUE

0

тип «t» и код «c»

OPAQUE

Один тип и диапазон кодов

0

нет

отбросить пакет

Один тип и код ANY

0

нет

отбросить пакет

Код ANY и тип ANY

0

нет

Код ANY и тип ANY

OPAQUE

0

нет

OPAQUE

Один тип и диапазон кодов

1

тип «t» и код «c»

«t» и «c»

Один тип и код ANY

1

тип «t» и код «c»

«t» и «c»

Код ANY и тип ANY

1

тип «t» и код «c»

«t» и «c»

OPAQUE

1

тип «t» и код «c»

49

Один тип и диапазон кодов

1

нет

отбросить пакет

Один тип и код ANY

1

нет

отбросить пакет

Код ANY и тип ANY

1

нет

отбросить пакет

OPAQUE

1

нет

1

 

При использовании селектора name:

 

Селектор

Запись SPD

PFP

Значение в триггерном пакете

Результирующая запись SAD

name

Список пользоват. или сист. имён.

нет

нет

нет

 

4.4.3. База проверки полномочий партнёров (PAD)

База проверки полномочий партнёров (PAD) обеспечивает связь между SPD и протоколом управления SA (таким, как IKE). Она может реализовать несколько важных функций:

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

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

  • предоставление аутентификационных данных для каждого партнёра.;

  • ограничение типов и значений идентификаторов, которые могут заявляться партнёром при создании дочерних SA, чтобы партнёр не мог заявлять для поиска в SPD аутентификационные данные, которые не разрешено представлять;

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

PAD обеспечивает эти функции для партнёра. IKE, когда тот действует в качестве инициатора или ответчика.

Для выполнения этих функций PAD содержит запись для каждого партнёра. или группы партнёров, с которыми объект IPsec будет взаимодействовать. Запись именует отдельного партнёра. (пользователя, конечную систему или защитный шлюз) или задаёт группу партнёров (используя правила соответствия идентификаторов, определённые ниже). Запись задаёт протокол аутентификации (например, IKEv1, IKEv2, KINK), используемый метод (например, сертификаты или разделяемые секреты), а также аутентификационные данные (например, разделяемый секрет или доверенную привязку, с помощью которой можно проверить сертификат партнёра.). Для аутентификации на основе сертификатов запись также может предоставлять информацию, помогающую проверить состояние отзыва сертификата для партнёра. (например, указатель на хранилище CRL, имя сервера OCSP50, связанного с партнёром, или доверенную привязку для этого партнёра.).

Каждая запись также показывает, будет ли при создании дочерних SA использоваться элемент данных IKE ID в качестве символьного имени при просмотре SPD или для этого будет служить удалённый адрес IP из селекторов трафика.

Отметим, что информация PAD может использоваться для поддержки создания нескольких туннельных SA между парой партнёров (т. е., два туннеля для защиты тех же адресов/хостов, но с разными конечными точками туннелей).

4.4.3.1. Идентификаторы записей PAD и правила соответствия

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

Для записей в PAD поддерживается шесть типов идентификаторов, согласующихся с символьными именами и адресами IP, которые служат для идентификации записей SPD. Идентификатор для каждой записи может действовать для PAD, подобно индексу, т. е, его значение может служить для выбора записи. Все эти типы ID могут сопоставляться с типами элементов данных IKE ID. Типы идентификаторов включают:

  • имя DNS (полное или частичное);

  • DN51 (полное имя или содержащее его субдерево);

  • почтовый адрес RFC 822 (полный или частичный);

  • адрес IPv4 (диапазон);

  • адрес IPv6 (диапазон);

  • Key ID (только точное соответствие).

Первые три типа могут поддерживать как полное, так и частичное (субдерево) соответствие. Имя DNS может быть FQDN52 и соответствовать в точности одному имени (например, foo.example.com). Возможно и задание с помощью этого имени группы партнёров — например, строка «.example.com» будет соответствовать всем доменным именам домена example.com.

Аналогично, тип Distinguished Name может задавать полное имя для точного соответствия (например,CN = Stephen, O = BBN Technologies, SP = MA, C = US) или указывать группу партнёров путём задания субдерева (например, запись вида «C = US, SP = MA» может служить для выбора всех DN, содержащих эти два атрибута, как верхушку двух RDN53.

Для почтовых адресов RFC 822 существует аналогичная возможность. Полный адрес типа foo@example.com соответствует только одному объекту, но субдерево типа @example.com будет соответствовать всем почтовым адресам домена (любой префикс слева от @).

Конкретный синтаксис соответствия части доменного имени, DN или почтового адреса RFC 822 определяется локальной реализацией. Однако должно поддерживаться по крайней мере соответствие субдереву, описанное выше. Соответствие подстрокам DN, имени DNS или адресе RFC 822 возможно, но не требуется.

Для адресов IPv4 и IPv6 должен поддерживаться такой же синтаксис адресных диапазонов, который используется для записей SPD. Это позволяет задавать отдельные адреса (вырожденный диапазон), префиксы (путём выбора диапазонов, соответствующих префиксам в стиле CIDR54) или произвольные диапазоны адресов.

Поле Key ID определено в IKE, как строка октетов. Для этого типа имён. должно поддерживаться только точное соответствие, поскольку этот тип идентификатора не имеет явной структуры. Для этого типа могут поддерживаться дополнительные функции соответствия.

4.4.3.2. Аутентификационные данные партнёра. IKE

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

  • сертификаты X.509;

  • разделяемые (pre-shared) секреты.

Для аутентификации на основе сертификата X.509 запись PAD содержит доверенную привязку, посредством которой может быть проверен (напрямую или через путь сертификата) сертификат конечного элемента (EE55) для партнёра., которого требуется проверить. Определение доверенной привязки дано в RFC. Запись, используемая с аутентификацией на базе сертификата, может включать дополнительные данные для упрощения проверки состояния отзыва сертификата (например, список подходящих ответчиков OCSP или хранилищ CRL) и связанные аутентификационные данные. Для аутентификации на основе разделяемого ключа PAD содержит pre-shared-секрет, который будет использоваться IKE.

Этот документ не требует от элементов IKE ID, представляемых партнёром, синтаксической связи с конкретным полем конечного элемента сертификата, которые предназначен для аутентификации данного партнёра. Однако зачастую такое требование является целесообразным (например, когда одна запись представляет набор партнёров, каждый из которых может иметь свою запись SPD). Таким образом, реализация должна обеспечивать администратору возможность потребовать соответствия между представленным IKE ID и именем субъекта или его дополнительным именем (alt name) в сертификате. Первый вариант применим к IKE ID выражаемым через DN, а второй подходит для выражения через имена DNS, почтовые адреса RFC 822 и адреса IP. Поскольку значение KEY ID предназначено для аутентификации партнёров с использованием разделяемого секрета, не возникает требования соответствия между идентификаторами этого типа и полями сертификатов.

Подробное описание аутентификации партнёров в IKE с использованием сертификатов и разделяемых секретов приведено в документах IKEv1 [HarCar98] и IKEv2 [Kau05].

Этот документ не требует поддержки других методов аутентификации, хотя они могут быть развёрнуты.

4.4.3.3. Аутентификационные данные дочерних SA

После аутентификации партнёра. IKE можно создавать дочерние SA. Каждая запись PAD содержит данные для ограничения набора идентификаторов, которые могут представляться партнёром IKE для поиска соответствия в SPD. Каждая запись PAD показывает, какие IKE ID будут использоваться в качестве символических имён. для поиска в SPD или какие адреса IP из селекторов трафика будут использоваться.

Если запись показывает использование IKE ID, поле ID записи PAD определяет уполномоченный набор ID. Если запись показывает, что будут использоваться селекторы трафика дочерней SA, требуется дополнительный элемент данных в форме диапазона адресов IPv4 и/или IPv6 (партнёр может быть уполномочен на использование обоих типов адресов, следовательно должны указываться диапазоны для обоих типов).

4.4.3.4. Использование PAD

При начальном обмене IKE инициатор и ответчик должны представить свои аутентификационные данные в элементах IKE ID и передать элементы данных AUTH для проверки представленной информации. Может передаваться один или несколько элементов CERT для упрощения проверки представленных аутентификационных данных.

Когда объект IKE получает элемент данных IKE ID, он использует представленный ID для поиска записи в PAD с использованием описанных выше правил соответствия. Запись PAD задаёт метод аутентификации, используемый для партнёра. Это обеспечивает выбор правильного метода для каждого партнёра. и применение различных методов для разных партнёров. Запись также задаёт аутентификационные данные, которые будут использоваться при проверке представленной информации. Эти данные вместе с указанным методом применяются для того, чтобы аутентифицировать партнёра до создания какой-либо дочерней CHILD SA.

Дочерние SA создаются на базе обмена селекторами трафика в конце начального обмена IKE или в последующих обменах CREATE_CHILD_SA. Запись PAD для (уже аутентифицированного) партнёра. IKE используется для ограничения создания дочерних SA. В частности, запись PAD задаёт, способ поиска в SPD с использованием селектора трафика от партнёра. Здесь имеется два варианта — либо используется значение IKE ID, представленное партнёром, для поиска записи SPD по символьному имени, либо используется IP-адрес партнёра., представленный в селекторе трафика, для поиска в SPD по хранящейся там части поля с удаленным адресом IP. Требуется вносить некоторые ограничения на создание дочерних SA, чтобы обезопасить аутентифицированного партнёра. от обманных ID, связанных с другими легитимными партнёрами.

Отметим, что в результате проверки PAD до поиска записи SPD обеспечивается прочная защита инициатора от атак с использованием обманных пакетов (spoofing). Предположим в качестве примера, что IKE A получает исходящий пакет, направленный по IP-адресу X (хост, обслуживаемый защитным шлюзом). RFC 2401 [RFC2401] и данный документ не задают, как A определяет адрес партнёра. IKE, обслуживающего X. Однако любой партнёр, с которым контактирует A, как с возможным представителем X, должен быть зарегистрирован в PAD для того, чтобы позволить аутентификацию обмена IKE. Более того, когда аутентифицированный партнёр заявляет, что он представляет X в своём обмене селекторами трафика, будет запрашиваться PAD для проверки полномочий этого партнёра. в части представления X. Таким образом, PAD обеспечивает связывание диапазонов адресов (или подпространств имён.) с партнёрами для противодействия таким атакам.

4.5. Управление SA и ключами

Все реализации IPsec должны поддерживать ручное и автоматическое управление SA и криптографическими ключами. Протоколы IPsec (AH и ESP) в значительной степени независимы от методов управления SA, хотя эти методы оказывают влияние на некоторые защитные службы, предлагаемые протоколами. Например, необязательный сервис предотвращения повторного использования пакетов, доступный для AH и ESP, требует автоматического управления SA. Более того, гранулярность распространения ключей в IPsec определяет гранулярность обеспечиваемой аутентификации. В общем случае аутентификация источника данных в AH и ESP ограничивается сферой распространения секретов, используемый с механизмами защиты целостности (или с протоколом управления ключами, используемым для генерации таких секретов).

Далее описываются минимальные требования для обоих типов управления SA.

4.5.1. Управление SA вручную

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

4.5.2. Автоматизированное управление SA и ключами

Широкое распространение и использование IPsec требует стандарта Internet для масштабируемого, автоматизированного протокола управления SA. Такой протокол нужен для облегчения использования возможностей предотвращения повторов в AH и ESP, а также для создания SA по запросам (например, для ориентированных на сеансы и пользователей ключей). Отметим, что термин «смена ключей» (rekeying) SA на деле означает создание новой SA с новым SPI — этот процесс в общем случае предполагает использование протокола автоматизированного управления SA и ключами.

По умолчанию протоколом автоматизированного управления ключами в IPsec является IKEv2 [Kau05]. В этом документе предполагается доступность некоторых функций протокола управления ключами, которые не поддерживаются в IKEv1. Могут развёртываться и другие протоколы автоматизированного управления ключами.

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

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

4.5.3. Нахождение защитного шлюза

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

Далее системы, на которых используется IPsec, обозначаются S* (например, SH1 и SG2 ниже).

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

  1. Как SH1 узнает о существовании защитного шлюза SG2?

  2. Как он аутентифицирует SG2 и как после аутентификации SG2 он сможет узнать о том, что SG2 уполномочен представлять H2?

  3. Как SG2 аутентифицирует SH1 и проверяет, что SH1 имеет полномочия для доступа к H2?

  4. Как SH1 может узнать о дополнительных шлюзах, которые обеспечивают альтернативный доступ к H2?

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

4.6. SA и групповая адресация

Ориентированная на получателя SA предполагает, что в случае индивидуального трафика система-адресат будет выбирать значение SPI. С учётом выбора значения SPI адресатом не возникает конфликтов между SA с ручной и автоматической (например, с помощью протокола управления ключами) настройкой или между SA из разных источников. Для группового трафика множество адресатов связывается с одной SA. Поэтому некоторым системам или лицам может потребоваться координация множества multicast-групп, чтобы выбрать SPI для каждой группы и после этого обмениваться групповыми данными IPsec со всеми членами группы с использованием механизмов, не определяемых здесь.

Множеству отправителей в multicast-группу следует использовать одну SA (и, следовательно, один SPI) для всего трафика в данную группу, когда развернут алгоритм шифрования или защиты целостности с симметричными ключами. В таких обстоятельствах получатель знает лишь, что сообщение пришло от системы, владеющей ключом для данной группы. В этом случае получатель обычно не способен аутентифицировать систему, передающую групповой трафик. Спецификации более сложных моделей использования групповой адресации разрабатываются рабочей группой IETF Multicast Security.

5. Обработка трафика IP

Как отмечено в параграфе 4.4.1. База правил защиты (SPD), необходимо обращаться к SPD (или кэшированным данным) до начала обработки любого трафика, пересекающего границу защиты IPsec, включая управляющий трафик IPsec. Если в SPD не найдено правила, которому соответствует пакет (входящий или исходящий), пакет должен отбрасываться. Для упрощения обработки и ускорения поиска SA (для SG/BITS/BITW) в этом документе вводится понятие кэша SPD для всего исходящего трафика (SPD-O плюс SPD-S) и кэша для входящего трафика без защиты IPsec57 (SPD-I). Номинально существует один кэш на SPD. Для целей данной спецификации предполагается, что каждая кэшированная запись будет отображать единственную SA. Отметим, однако, что возникают исключения, когда используется множество SA для передачи трафика с различными приоритетами (например, заданными разными значениями DSCP) но одинаковыми селекторами. Отметим также, что существуют ситуации, когда SAD может иметь записи для SA, у которых нет соответствующих записей в SPD. Поскольку этот документ не требует селективной очистки SAD при изменении SPD, записи SAD могут сохраняться, хотя создавшие их записи SPD изменены или удалены. Также при создании SA с заданием ключей вручную могут существовать записи SAD для SA, не имеющих записей в SPD.

Поскольку записи SPD могут перекрываться, в общем случае кэширование таких записей не вполне безопасно. Простое кэширование может приводить к соответствию кэшированной записи, тогда как упорядоченный поиск в SPD может показывать соответствие другой записи. Если записи SPD сначала декоррелируются, результаты такой операции можно кэшировать без опаски. Каждая кэшированная запись будет показывать, что соответствующий ей трафик следует передать в обход или отбросить58. Если явно не указано иное, ниже все упоминания «SPD», «кэша SPD» или «кэша» относятся к декоррелированной SPD (SPD-I, SPD-O, SPD-S) или кэшу SPD, содержащему записи из декоррелированной SPD.

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

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

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

5.1. Обработка исходящего трафика IP59

                    Незащищённый интерфейс
                               ^
                               |
        (вложенные SA)     +---------+
       --------------------|Пересылка|<-----+
       |                   +---------+      |
       |                        ^           |
       |                        | BYPASS    |
       V                     +-----+        |
   +-------+                 | Кэш |     +---------+
...| SPD-I |.................| SPD |.....|Обработка|...Граница
   |  (*)  |                 | (*) |---->|(AH/ESP) |   IPsec
   +-------+                 +-----+     +---------+
       |    +-----------+     /  ^
       |    |Отбрасыв.  | <--/   |
       |    +-----------+        |
       |                         |
       |                 +-------------+
       |---------------->|  Выбор SPD  |
                         +-------------+
                                ^
                                |     +------+
                                |  -->| ICMP |
                                | /   +------+
                                |/
                                |
                                |
                       Защищённый интерфейс

(*) На рисунке показан кэш SPD. При отсутствии этого кэша проверяется непосредственно SPD. Реализация не обязаны буферизовать пакет при отсутствии кэша.

Рисунок 2. Модель обработки исходящего трафика.


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

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

  1. Когда пакет приходит с абонентского (защищённого) интерфейса, вызывается функция выбора SPD для получения SPD-ID, нужного при выборе подходящей SPD (если используется только одна SPD, этот этап становится пустым — no-op).

  2. Заголовки пакета сравниваются с кэшем для SPD, заданной SPD-ID на этапе 1. Отметим, что этот кэш содержит записи из SPD-O и SPD-S.

  3. a. При совпадении пакет обрабатывается, как задано соответствующей записью (т. е., BYPASS, DISCARD или PROTECT с использованием AH или ESP). Если обработка IPsec выполнена, имеется связь между кэш-записью SPD и соответствующей записью SAD (задаёт режим, криптографические алгоритмы, ключи, SPI, PMTU и пр.). Обработка IPsec определяется ранее для туннельного или транспортного режима и протокола AH или ESP, как задано в соответствующих RFC [Ken05b, Ken05a]. Отметим, что значение SA PMTU вкупе со значением флага проверки фрагментов с учётом состояния (а также бита DF в заголовке IP исходящего пакета) определяют возможность (необходимость) фрагментирования пакета до обработки IPsec или его отбрасывания с передачей сообщения ICMP PMTU.

    b. Если в кэше не найдено соответствия, осуществляется поиск в SPD (части SPD-S и SPD-O), заданной SPD-ID. Если запись SPD задаёт BYPASS или DISCARD, создаётся одна или несколько новых исходящих кэш-записей SPD, а для BYPASS создаётся одна или несколько входящих кэш-записей SPD. Множество записей может создаваться в результате того, что декоррелированная запись SPD может быть связана с другими такими же записями (побочный эффект процесса декорреляции). Если запись SPD задаёт PROTECT (т. е., создание новой SA), вызывается механизм управления ключами (например, IKEv2) для создания SA. При успешном создании SA создаётся новая исходящая (SPD-S) кэш-запись вместе с входящей и исходящей записью SAD. В противном случае пакет отбрасывается (пакет, вызвавший просмотр SPD, может быть отброшен реализацией или обработан в соответствии с вновь созданной кэш-записью). Поскольку SA создаются попарно, создаётся также запись SAD для соответствующей входящей SA, содержащая значения селекторов, определённые из записи SPD (и пакета, если установлен флаг PFP), использованной для создания входящей SA. Эта запись служит для проверки трафика, входящего через SA.

  4. Пакет передаётся выходной функции пересылки (за пределы реализации IPsec) для выбора интерфейса, через который следует передать пакет. Эта функция может вернуть пакет через границу IPsec для дополнительной обработки IPsec (например, при поддержке вложенных SA). В таких случаях должна присутствовать дополнительная запись в базе SPD-I, которая разрешает такой обход, поскольку в противном случае пакет будет отброшен. При необходимости (т. е., при наличии множества SPD-I) завёрнутый назад трафик может быть помечен, как исходящий с внутреннего интерфейса. Это позволяет при необходимости использовать разные SPD-I для действительно внешнего трафика и «завёрнутого назад» трафика.

Примечание. За исключением транспортного режима IPv4 и IPv6, реализации SG, BITS или BITW могут фрагментировать пакеты до выполнения функций IPsec60. Устройству следует иметь конфигурационные параметры для запрета такого фрагментирования. Фрагменты обычным способом сравниваются с SPD. Таким образом фрагменты без номеров портов (сообщения ICMP без типа и кода или Mobility Header без типа) будут соответствовать лишь правилам, в которых селекторы для порта (типа и кода ICMP или типа MH) имеют значение OPAQUE или ANY (см. раздел 7).

Примечание. В части определения и реализации PMTU для SA системы IPsec должны следовать действиям, описанным в параграфе 8.2.

5.1.1. Обработка исходящих пакетов, которые должны быть отброшены

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

a. Селекторы в пакете соответствуют записи SPD, требующей отбрасывания пакета.

IPv4 Type = 3 (адресат недоступен) Code = 13 (связь запрещена административно)

IPv6 Type = 1 (адресат недоступен) Code = 1 (связь с адресатом запрещена административно)

b1. Для системы IPsec удалённый партнёр доступен, но с ним не удаётся согласовать SA, требуемую запись SPD, которой соответствует пакет (например, удалённому партнёру административно запрещена связь с инициатором, инициатор не может аутентифицировать себя удалённому партнёру или SPD на удалённой стороне не имеет подходящей записи).

IPv4 Type = 3 (адресат недоступен) Code = 13 (связь запрещена административно)

IPv6 Type = 1 (адресат недоступен) Code = 1 (связь с адресатом запрещена административно)

b2. Система IPsec не способна организовать SA, требуемую запись SPD, которой соответствует пакет, поскольку не удалось связаться с партнёром IPsec на другой стороне.

IPv4 Type = 3 (адресат недоступен) Code = 1 (хост недоступен)

IPv6 Type = 1 (адресат недоступен) Code = 3 (адрес недоступен)

Отметим, что атакующий за защитным шлюзом может передавать пакеты с обманным адресом отправителя W.X.Y.Z объекту IPsec, заставляя того передавать сообщения ICMP по адресу W.X.Y.Z. Это открывает возможность организации атак на службы (DoS61) хостов, находящихся за защитным шлюзом. Для устранения такой возможности в защитные шлюзы следует включать средства управления, позволяющие администратору включать или отключать для реализации IPsec передачу сообщений ICMP в таких обстоятельствах и при включённой передаче сообщений ICMP ограничивать скорость такой передачи.

5.1.2. Создание заголовка для туннельного режима

В этом параграфе описывается обработка внутренних и внешних заголовков IP, расширений заголовков, а также опций туннелей AH и ESP для исходящего трафика. Обсуждается создание инкапсулирующего (внешнего) заголовка IP, обработка полей внутреннего заголовка и другие операции, которые следует применять к исходящему трафику в туннельном режиме. Обработка, описанная здесь, основана на модели RFC 2003, «Инкапсуляция IP в IP» [Per96]:

  • Поля Source Address и Destination Address внешнего заголовка IP идентифицируют «конечные точки» туннеля (инкапсулятор и декапсулятор). Эти же поля внутреннего заголовка идентифицируют исходного отправителя и конечного получателя дейтаграмм (с точки зрения данного туннеля), соответственно (см. примечание 3 к таблице в параграфе 5.1.2.1 с комментариями по поводу инкапсуляции адреса отправителя).

  • Внутренний заголовок IP не меняется за исключением поля TTL (или Hop Limit) и полей DS/ECN. В процессе доставки пакета к выходной точке туннеля внутренний заголовок сохраняется неизменным.

  • Опции IP и расширения для внутреннего заголовка не меняются в процессе доставки инкапсулированной дейтаграммы через туннель.

Туннелирование IPsec имеет некоторые отличия от туннелирования IP-in-IP (RFC 2003 [Per96]):

  • IPsec поддерживает средства, позволяющие администратору управлять скрытыми каналами (которые обычно не туннелируются) и обеспечить проверку получателем полученных пакетов в плане контроля доступа. Реализация IPsec может быть настраиваемой в плане обработки внешнего поля DS при передаче пакетов в туннельном режиме. Для исходящего трафика одна конфигурационная установка для внешнего поля DS будет действовать, как описано ниже, на обработку заголовков IPv4 и IPv6 для туннелей IPsec. Другая будет позволять отображение внешнего поля DS на фиксированное значение, которое может быть настраиваемым на уровне SA62. Эти конфигурационные опции позволяют локальному администратору решить, будет ли скрытый канал, обеспечиваемый копированием этих битов, перевешивать преимущества копирования.

  • IPsec описывает обработку ECN и DS, а также обеспечивает возможность контроля за распространением изменений этих полей между защищёнными и открытыми доменами. В общем случае распространение из защищённой области в открытую представляет собой скрытый канал и для полосы этого канала поддерживаются средства управления. Распространение значений ECN в другом направлении контролируется так, что передаются только легитимные изменения ECN (показывающие насыщение между конечными точками туннеля). По умолчанию распространение DS из защищённой области в открытую запрещено. Однако, если отправитель и получатель не используют единое пространство кодов DS и получатель не может узнать способ отображения одного пространства на другое, распространение может быть разрешено. В частности, реализации IPsec могут настраиваться в части обработки внешнего поля DS для принятых пакетов (в туннельном режиме). Они могут быть настроены на отбрасывание внешнего значения DS (по умолчанию) или переписывание значения внутреннего поля DS в соответствии со значением внешнего. Выбор отбрасывания или изменения DS может быть задан на уровне SA. Эта опция позволяет локальному администратору самому выбрать между возникновением уязвимости при копировании поля DS и обеспечиваемыми таким копированием преимуществами. Описание каждого из этих вариантов дано в [RFC2983] вместе с описанием кондиционирования трафика до или после обработки IPsec (включая декапсуляцию).

  • IPsec позволяет использовать разные версии протокола IP во внутреннем и внешнем заголовке.

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

5.1.2.1. IPv4: создание заголовка для туннельного режима

 

<— Связь внешнего заголовка с внутренним —>

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

Внешний заголовок на инкапсуляторе

Внутренний заголовок на декапсуляторе

Version

4 (1)

без изменения

Header length

создаётся

без изменения

DS

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

без изменения

ECN

копируется из внутреннего заголовка

создаётся (6)

Total length

создаётся

без изменения

ID

создаётся

без изменения

Flags (DF, MF)

создаётся, DF (4)

без изменения

Fragment offset

создаётся

без изменения

TTL

создаётся (2)

уменьшается на 1 (2)

Protocol

AH, ESP

без изменения

Checksum

создаётся

создаётся (2)(6)

Src address

создаётся (3)

без изменения

Dest address

создаётся (3)

без изменения

Options

никогда не копируются

без изменения

 

Примечания:

  1. Версия IP в инкапсулирующем заголовке может отличаться от версии протокола во внутреннем заголовке.

  2. Значение TTL декрементируется инкапсулятором перед пересылкой пакета и декапсулятором — при пересылке63 (контрольная сумма заголовка IPv4 меняется при изменении TTL).

  3. Локальные и удалённые адреса зависят от SA, которая служит для определения удалённого адреса, а тот, в свою очередь, определяет локальный адрес (сетевой интерфейс), используемый для пересылки пакета64.

  4. Для поля DS копирование из внутреннего заголовка (IPv4), сброс или создание определяется настройкой.

  5. Если пакет будет непосредственно попадать в домен, где значение DSCP во внешнем заголовке неприемлемо, значение должно быть отображено на приемлемое для домена [NiBlBaBL98] (см. RFC 2475 [BBCDWW98]).

  6. Если поле ECN внутреннего заголовка имеет значение ECT(0)65 или ECT(1) и внешнее поле ECN включает флаг CE (перегрузка), в поле ECN внутреннего заголовка устанавливается флаг CE; в остальных случаях значение внутреннего поля ECN не меняется (при изменении ECN меняется контрольная сумма заголовка IPv4).

Примечание. IPsec не копирует опции из внутреннего заголовка во внешний и не создаёт опций для внешнего заголовка. Однако после IPsec опции внешнего заголовка могут добавляться и изменяться.

5.1.2.2. IPv6: создание заголовка для туннельного режима

 

<— Связь внешнего заголовка с внутренним —>

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

Внешний заголовок на инкапсуляторе

Внутренний заголовок на декапсуляторе

Version

6 (1)

без изменения

DS

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

без изменения (9)

ECN

копируется из внутреннего заголовка

создаётся (6)

Flow label

копируется или настраивается (8)

без изменения

Payload length

создаётся

без изменения

Next header

AH, ESP, routing hdr

без изменения

Hop limit

создаётся (2)

уменьшается на 1 (2)

Src address

создаётся (3)

без изменения

Dest address

создаётся (3)

без изменения

Extension headers

никогда не копируется (7)

без изменения

 

Примечания:

  1. — (3), (5), (6) см. параграф 5.1.2.1.

  1. IPsec не копирует расширения заголовка из внутреннего пакета во внешний и не создаёт расширений во внешнем заголовке. Однако после IPsec возможна вставка и создание расширений для внешнего заголовка.

  2. См. [RaCoCaDe04]. Копирование допустимо только для конечных систем, но не для защитных шлюзов. Если шлюз копирует метки защиты из внутреннего заголовка во внешний, могут возникать конфликты.

  3. Реализация может выбрать способ передачи значения DS из внешнего заголовка во внутренний на уровне SA для принятых в туннельном режиме пакетов. Мотивацией для такого решения служит приспособление к ситуациям, когда пространство кодов DS на приёмной стороне отличается от пространства кодов передающей стороны и нет информации о способе трансляции из пространства отправителя. Копирование значения DS из внешнего заголовка во внутренний представляет опасность, поскольку у атакующего появляется возможность влияния на трафик за счёт изменения значений DSCP во внешнем заголовке. Следовательно, по умолчанию реализации IPsec не разрешают такое копирование.

5.2. Обработка входящего трафика IP66

Обработка входящего трафика несколько отличается от обработки исходящего, по причине использования SPI для отображения трафика IPsec на SA. Входной кэш SPD (SPD-I) применяется только для передаваемого в обход или отбрасываемого трафика. Если прибывающий с незащищённого интерфейса пакет выглядит, как фрагмент IPsec, сборка осуществляется до выполнения обработки IPsec. Смысл каждого кэша SPD заключается в том, что пакет, не соответствующий ни одной записи в кэше, относится к соответствующей SPD. Каждой SPD следует иметь номинальную, завершающую запись, которая «захватывает» все, что не соответствует другим записям и отбрасывает пакеты. Это обеспечивает отбрасывание всех входящих пакетов, которые не защищены IPsec и не соответствуют ни одной записи SPD-I.

До обработки AH или ESP все фрагменты IP, приходящие через незащищённый интерфейс собираются (средствами IP). Каждая входящая дейтаграмма IP, к которой будет применяться обработка IPsec, аутентифицируется наличием значений AH или ESP в поле IP Next Protocol (или AH/ESP в качестве протокола следующего уровня в контексте IPv6).

IPsec необходимо выполнить следующие действия:

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

  2. Пакет проверяется и демультиплексируется в одну из двух категорий:

  • Если пакет представляется защищённым с помощью IPsec и адресован данному устройству, предпринимается попытка отобразить этот пакет на активную SA через SAD. Отметим, что устройство может иметь множество адресов IP, которые могут служить для поиска в SAD (например, в случае использования протоколов типа SCTP).

                       Незащищённый интерфейс
                                  |
                                  V
                       +---------------------+ Защита IPsec
           ----------->|Демультиплексирование|-----------+
           |           +---------------------+           |
           |                      |                      |
           |             Не IPsec |                      |
           |                      |                      |
           |                      V                      |
           |   +---------+    +---------+                |
           |   |Отбросить|<---|SPD-I (*)|                |
           |   +---------+    +---------+                |
           |                   |                         |
           |                   |-----+                   |
           |                   |     |                   |
           |                   |     V                   |
           |                   |  +------+               |
           |                   |  | ICMP |               |
           |                   |  +------+               |
           |                   |                         V
        +---------+            |               +---------------+
    ....|SPD-O (*)|............|...............|Обработать (**)|...Граница
        +---------+            |               |   (AH/ESP)    |   IPsec
           ^                   |               +---------------+
           |                   |       +---+             |
           |            Обход  |   +-->|IKE|             |
           |                   |   |   +---+             |
           |                   V   |                     V
           |               +---------+           +---------+   +----+
           |--------<------|Пересылка|<----------|SAD Check|-->|ICMP|
             вложенные SA  +---------+           | (***)   |   +----+
                                 |               +---------+
                                 V
                        Защищенный интерфейс

    (*) = На рисунке показаны кэшированные записи. Если кэш отсутствует, проверяется SPD. Требования буферизации пакета при отсутствии кэша не предъявляется к реализациям.

    (**) = Эта обработка включает использование SPI и других параметров пакета для поиска SA в SAD, которая формирует кэш SPD для входящих пакетов (за исключением случаев, отмеченных в параграфах 4.4.2 и 5). См. п. 3a ниже.

    (***) = Эта проверка SAD выполняется на этапе 4 (см. ниже).

    Рисунок 3. Модель обработки входящего трафика.

  • Трафик не адресованный данному устройству или адресованный устройству, но не относящийся к AH или ESP, направляется на просмотр SPD-I (это означает, что для трафик IKE в SPD должна присутствовать явная запись BYPASS). При наличии множества SPD для выбора SPD-I (и кэша) используется присвоенный на этапе 1 тег. Поиск в SPD-I определяет для пакета действие DISCARD (отбросить) или BYPASS (передать в обход IPsec).

  1. a. Если пакет адресован устройству IPsec и в качестве протокола указан AH или ESP, выполняется поиск в SAD. Для индивидуального трафика используется только SPI (или SPI и протокол). Для группового трафика используется SPI в комбинации с адресом получателя или адресами отправителя и получателя, как указано в параграфе 4.1. В любом случае (групповой или индивидуальный трафик) при отсутствии соответствия пакеты отбрасываются с внесением записи в журнал аудита. В запись следует включать текущую дату и время, SPI, отправителя и получателя пакета, протокол IPsec и все прочие доступные из пакета селекторы. Если пакет найден в SAD, выполняется п. 4.

    b. Если пакет не адресован устройству или не относится к AH или ESP, просматривается соответствующий кэш SPD-I. Если соответствие найдено и пакет следует отбросить или передать в обход, выполняется нужная операция. Если в кэше не обнаружено соответствия, просматривается подходящая SPD-I и создаётся запись в кэше (не создаётся SA в ответ на получение пакета, требующего защиты IPsec; таким путём в кэше могут создаваться только записи BYPASS или DISCARD). Если соответствия не найдено, трафик отбрасывается с внесением записи в журнал аудита. В запись следует включать текущую дату и время, SPI, отправителя и получателя пакета, протокол IPsec и все прочие доступные из пакета селекторы.

    c. Предполагается, что обработка сообщений ICMP выполняется на незащищённой стороне границы IPsec. Незащищённые сообщения ICMP проверяются и к ним применяется локальная политика для определения дальнейших действий (принять или отбросить), а также действий при восприятии сообщения. Например, при получении сообщения ICMP unreachable реализация должна решить, что делать — отбросить сообщение или обработать его с учётом ограничений (см. раздел 6).

  2. Выполняется обработка AH или ESP с использованием записи SAD, выбранной на этапе 3a. Затем проверяется соответствие пакета входным селекторам, определяемым записью SAD, чтобы убедиться в принадлежности пакета SA, через которую он был получен.

  3. Если реализация IPsec получает пакет через SA и поля в заголовке пакета не согласуются с селекторами для SA, пакет должен отбрасываться с записью в журнал аудита. В запись следует включать текущую дату и время, SPI, отправителя и получателя пакета, протокол IPsec и все прочие доступные из пакета селекторы, а также значение селекторов для соответствующей записи SAD. Системе следует также поддерживать возможность генерации и передачи отправителю (партнёру IPsec) уведомления IKE INVALID_SELECTORS, показывающего, что принятый пакет был отброшен в результате несоответствия при проверке селекторов.

Для минимизации влияния DoS-атак и некорректно настроенных партнёров системам IPsec следует включать средства управления, позволяющие администратору настроить для реализации IPsec режим уведомлений IKE (передавать или не передавать) и ограничение частоты передачи таких уведомлений.

После того, как трафик передан в обход или обработан IPsec, он передаётся входной функции пересылки для его дальнейшей передачи. Эта функция может вызывать передачу пакета через границу IPsec (исходящий трафик) для дополнительной входной обработки IPsec (например, при использовании вложенных SA). В таких случаях, как для всего исходящего трафика, передаваемого в обход, должно проверяться соответствие пакета записи в SPD-O. В конечном итоге пакет следует переслать хосту-адресату или обработать пересылки дальше.

6. Обработка ICMP

В этом разделе описана обработка в IPsec трафика ICMP, который делится на две категории — сообщения об ошибках (например, type = destination unreachable) и прочие сообщения (например, type = echo). Данный раздел посвящён исключительно сообщениям об ошибках. Обработка остальных сообщений ICMP, которые не адресованы самой реализации IPsec, должна явно учитываться в плане использования записей SPD.

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

6.1. Обработка сообщений ICMP об ошибках, направленных реализации IPsec

6.1.1. Сообщения ICMP об ошибках на незащищённой стороне границы

Рисунок 3 в параграфе 5.2 показывает отдельный обработки ICMP на незащищённой стороне границы IPsec, предназначенный для обработки сообщений ICMP (ошибки и другие сообщения), адресованных устройству IPsec и не защищённых AH или ESP. Сообщения ICMP этого сорта являются неаутентифицированными и их обработка может приводить к отказу или снижению производительности сервиса. По этой причине в общем случае желательно игнорировать такие сообщения. Однако хосты и защитные шлюзы получают много сообщений ICMP из неаутентифицированных источников (например, маршрутизаторов в открытой сети Internet. Игнорирование этих сообщений сообщений PMTU или перенаправлений). Таким образом, нужна мотивация для восприятия и выполняемых действий в случаях получения неаутентифицированных сообщений ICMP.

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

Если сообщение ICMP PMTU проходит указанную выше проверку и система настроена на восприятие такого сообщения, возникают две возможности. Если реализация использует фрагментацию на шифрованной стороне границы, принятая информация PMTU передаётся модулю пересылки (не относится к реализации IPsec), который использует её при фрагментации исходящих пакетов. Если реализация настроена на фрагментацию нешифрованного трафика, информация PMTU передаётся на защищённую (нешифрованную) сторону и обрабатывается, как описано в параграфе 8.2.

6.1.2. Сообщения ICMP об ошибках, принимаемые на защищённой стороне

Эти сообщения ICMP не аутентифицированы, но они приходят с защищённой стороны границы IPsec. Таким образом, эти сообщения в общем случае рассматриваются, как более «доверенные» по сравнению с описанными выше сообщениями с незащищённой стороны. Основная проблема безопасности для таких сообщений связана с тем, что скомпрометированный хост или маршрутизатор может генерировать не соответствующие действительности сообщения ICMP об ошибках, которые могут снижать производительность сервиса для других устройств, находящихся «за шлюзом», и даже приводить к нарушению конфиденциальности. Например, если ложные сообщения ICMP redirect будут восприниматься защитным шлюзом, это может приводить к изменению таблицы пересылки на защищённой стороне, в результате чего трафик будет попадать неприемлемому получателю «за шлюзом». Таким образом, реализации должны обеспечивать средства контроля, позволяющие локальному администратору ограничить обработку сообщений ICMP об ошибках, полученных с защищённой стороны границы и направленных реализации IPsec. Эти средства контроля имеют тот же тип, который описан для незащищённой стороны в параграфе 6.1.1.

6.2. Обработка защищённых транзитных сообщений ICMP об ошибках

Когда сообщение ICMP об ошибке передаётся через SA устройству, находящемуся за реализацией IPsec, требуется проверять заголовок и содержимое сообщения ICMP с точки зрения контроля доступа. Если одно из таких сообщений пересылается хосту за защитным шлюзом, реализация принимающего хоста будет принимать решение на основе содержимого сообщения (т. е., заголовка пакета, вызвавшего передачу сообщения об ошибке). Таким образом, реализация IPsec должна обеспечивать возможность настройки на проверку соответствия этого заголовка SA, через которую был получен пакет (это означает, что заголовок с обращёнными адресами о номерами портов отправителя и получателя должен соответствовать селекторам трафика для SA). Если такую проверку не проводить, тогда любой, с кем принимающая система IPsec (A) имеет активную SA, сможет передать сообщение ICMP Destination Unreachable, указывающее на недоступность хоста/сети, с которым A взаимодействует, что создаёт возможность организации очень эффективных DoS-атак на соединения. Обычный получатель IPsec, обрабатывающий трафик, недостаточно защищён от таких атак. Однако упомянутая выше проверка требуется не в каждом контексте, поэтому необходимо предоставить локальному администратору возможность отказа от такой проверки.

Для обеспечения обеих возможностей принимается описанное далее соглашение. Если администратор разрешит передачу сообщений ICMP об ошибках через SA без проверки содержимого, создаётся запись SPD, которая явно позволяет передавать такой трафик. Если администратор решит проверять содержимое сообщений ICMP об ошибках на предмет соответствия SA, записи SPD для восприятия такого трафика на основе заголовка пакета ICMP не создаётся. Это соглашение служит мотивацией для описанной далее обработки.

Отправители и получатели IPsec должны поддерживать описанную ниже обработку сообщений ICMP об ошибках, передаваемых и принимаемых через SA.

Если существует SA, которая принимает исходящее сообщении ICMP об ошибке, сообщение отображается на эту SA и при получении проверяются только заголовки IP и ICMP, как для других типов трафика. Если не существует SA, соответствующей селекторам трафика, связанным с сообщением ICMP об ошибке, просматривается SPD для определения возможности создания такой SA. При положительном результате создаётся SA и сообщение ICMP передаётся через неё. При получении к такому сообщению применяется обычная проверка селекторов. Такая обработка ничем не отличается от обработки обычного трафика и не включает каких-либо специальных действий применительно к обработке сообщений ICMP об ошибках.

Если нет SA, которая будет использоваться для передачи исходящих сообщений ICMP, о которых идёт речь, и нет записи SPD, которая позволяет передавать исходящие сообщения ICMP об ошибках, реализация IPsec должна отобразить сообщение на SA, которая будет передавать трафик, связанных с пакетом, вызвавшим сообщение ICMP об ошибке. Это требует от реализации IPsec детектировать исходящие сообщения ICMP об ошибках, которые отображаются на несуществующую SA или запись SPD и специальным образом обрабатывать их в плане поиска и создания SA. Реализация просматривает заголовок пакета для определения информации о пакете, вызвавшем ошибку (из поля данных сообщения ICMP), меняет местами адреса отправителя и получателя, выделяет поле протокола и меняет местами номера портов отправителя и получателя (если они доступны). Полученная информация служит для определения подходящей активной исходящей SA и передачи сообщения об ошибке через эту SA. Если SA не существует, новая SA не создаётся и в журнал аудита вносится запись об этом факте.

Если реализация IPsec получает входящее сообщение ICMP об ошибке на SA, f заголовки IP и ICMP в этом сообщении не соответствуют селекторам трафика для SA, получатель должен обрабатывать полученное сообщение особо. В частности, получатель должен выделить заголовок вызвавшего ошибку пакета из сообщения ICMP и выполнить обращение полей, как описано выше, для определения соответствия пакета SA, через которую было получено сообщение ICMP. При несоответствии реализации IPsec недопустимо пересылать сообщение ICMP об ошибке указанному в нем адресату. Информация о таких событиях заносится в журнал аудита.

7. Обработка фрагментов на защищённой стороне границы IPsec

В предыдущих разделах документа описаны механизмы для (a) фрагментации исходящих пакетов после обработки IPsec и сборки фрагментов на приёмной стороне до обработки IPsec и (b) механизмы обработки входящих фрагментов, полученных с незащищённой стороны границы IPsec. В этом разделе рассматривается, как реализации следует выполнять обработку исходящих незашифрованных фрагментов на защищённой стороне границы IPsec (см. Приложение D: Обоснование обработки фрагментов) В частности, здесь рассматривается:

  • отображение исходящих фрагментов, не являющихся первыми на корректную SA (или поиск записи SPD);

  • проверка полномочности передачи фрагмента, отличного от первого, через SA, в которой он был получен;

  • отображение исходящих и входящих фрагментов, не являющихся первыми, на корректную запись SPD-O/SPD-I или подходящую запись в кэше для трафика BYPASS/DISCARD.

Примечание. В параграфе 4.1 SA транспортного режима определены, как не передающие фрагменты (IPv4 или IPv6). Отметим также, что в параграфе 4.4.1, были определены два специальных случая селекторов — ANY и OPAQUE, причём ANY включает в себя OPAQUE. Для селекторов, отличных от OPAQUE и ANY используется термин «нетривиальный».

Примечание. Термин «фрагмент, отличный от первого» используется для индикации фрагментов, не содержащих значения всех селекторов, которые могут потребоваться для контроля доступа. Как отмечено в параграфе 4.4.1, в зависимости от значения Next Layer Protocol, кроме номеров порта в таких фрагментах может отсутствовать тип/код ICMP или тип Mobility Header. Для IPv6 даже первый фрагмент может не включать значений Next Layer Protocol или Port (тип/код ICMP или тип Mobility Header) в зависимости от числа и типа имеющихся расширений заголовка. Если отличный от первого фрагмент содержит Port (тип и код ICMP или тип Mobility Header), но не включает Next Layer Protocol, тогда при отсутствии записи SPD для подходящих адресов Local/Remote с ANY в полях Next Layer Protocol и Port (тип и код ICMP или тип Mobility Header) фрагмент не будет включать полного набора информации, требуемой для контроля доступа.

Для решения этих вопросов определены три модели:

  • SA туннельного режима, передающие отличные от первых фрагменты (параграф 7.1.);

  • отдельные SA туннельного режима для фрагментов, отличных от первых (параграф 7.2.);

  • контроль фрагментов с учётом состояний ( параграф 7.3.).

7.1. SA туннельного режима, передающие любые фрагменты

Все реализации должны поддерживать SA туннельного режима, которые настраиваются на передачу трафика вне зависимости от номера порта (типа/кода ICMP или типа Mobility Header type). Если SA будет передавать трафик для заданных протоколов, набор селекторов для SA должен задавать поля портов (типа/кода ICMP или типа Mobility Header), как ANY. Определённые таким способом SA будут передавать весь трафик, включая первые и последующие фрагменты для указанных адресов Local/Remote и заданного протокола (протоколов) следующего уровня. Если SA будет передавать трафик независимо от протокола (т. е, Next Layer = ANY), значения портов не определены и должны быть указаны, как ANY (как отмечено в параграфе 4.4.1, значение ANY включает OPAQUE и все конкретные номера).

7.2. Отдельные туннельные SA для фрагментов, отличных от первых

Реализация может поддерживать SA туннельного режима, через которые будут передаваться только нефрагментированные пакеты и первые фрагменты. Для задания поля порта (типа/кода ICMP или типа Mobility Header) селекторов таких SA будет использоваться значение OPAQUE. Получатели должны проверять минимальное смещение в (отличных от первого) фрагментах IPv4 для защиты от атак с перекрывающимися фрагментами, когда используются SA такого типа. Поскольку такие проверки не могут осуществляться для (отличных от первого) фрагментов IPv6, пользователям и администраторам следует принимать во внимание опасность, связанную с передачей таких фрагментов и реализации могут отказываться от поддержки таких SA для трафика IPv6. SA этого типа также будут передавать все отличные от первых фрагменты, которые соответствуют заданной паре адресов Local/Remote и значению протокола (т. е., фрагменты, передаваемые в таких SA, относятся к пакетам, которые не будучи фрагментированными, могли бы передаваться через другие SA с иной защитой). Следовательно, пользователям и администраторам нужно защищать такой трафик с использованием ESP (с защитой целостности) и «самыми строгими» алгоритмами шифрования и защиты целостности для данной пары партнёров (определение «самого строгого» алгоритма требует упорядочивания доступных алгоритмов со стороны инициатора данной SA).

Значения селекторов порта (типа/кода ICMP или типа Mobility Header) будут использоваться для определения SA, передающих нефрагментированные пакеты и первые фрагменты. Такая модель может использоваться, если пользователь или администратор хочет создать одну или более SA туннельного режима между одной парой адресов Local/Remote и эти связи разделяются по полям портов (типов/кодов ICMP или типов Mobility Header). Эти SA должны иметь нетривиальные значения селекторов протокола, иначе должен использоваться описанный выше вариант #1.

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

7.3. Проверка фрагментов с учётом состояния

Реализация может поддерживать ту или иную форму проверки фрагментов с учётом состояния для SA туннельного режима с нетривиальным (отличным от ANY и OPAQUE) значением поля порта (типа/кода ICMP или типа MH). Реализации, которые будут передавать отличные от первых фрагменты в SA туннельного режима, использующие нетривиальные селекторы порта (типа/кода ICMP или типа MH), должны уведомлять партнёра. с помощью элемента данных IKE NOTIFY NON_FIRST_FRAGMENTS_ALSO.

Партнёр должен отвергать такие предложения, если он не будет принимать отличные от начального фрагменты в таком контексте. Если реализация не согласовала передачу фрагментов, отличных от первого, для такой SA, ей недопустимо передавать эти фрагменты через SA. Этот стандарт не задаёт для партнёров способа обработки фрагментов (например, сборки или иные операции на стороне отправителя или получателя). Однако получатель должен отбрасывать отличные от первого фрагменты, которые приходят через SA с нетривиальным селектором порта (типа/кода ICMP или типа MH), если приём таких фрагментов не был согласован. Получатель также должен отбрасывать отличные от первого фрагменты, которые не соответствуют политике защиты для полного пакета. Записи о таких событиях заносятся в журнал аудита. Отметим, что в сетевых конфигурациях, где фрагменты пакетов могут передаваться и приниматься через разные защитные шлюзы или реализации BITW, стратегии отслеживания состояния фрагментации могут давать отказы.

7.4. Операции BYPASS/DISCARD для трафика

Все реализации должны поддерживать отбрасывание фрагментов с использованием нормальных механизмов классификации SPD. Все реализации должны поддерживать проверку фрагментов с учётом состояния, чтобы принимать передаваемый в обход (BYPASS) трафик, для которого задан нетривиальный диапазон портов. Дело в том, что передаваемый в обход трафик представляет собой нешифрованные фрагменты, отличные от первого и прибывающие в реализацию IPsec, могут подрывать защиту, обеспечиваемую для трафика IPsec, направленного тому же получателю. Рассмотрим в качестве примера реализацию IPsec с записью SPD, которая обеспечивает защиту трафика между парой адресов (отправитель-получатель) для заданного протокола и порта получателя (например, трафик TCP в порт 23 — Telnet). Предположим, что реализация также разрешает передавать в обход трафик между той же парой хостов для того же протокола, но с другим номером порта (например, порт 119 — NNTP). Атакующий может передать отличный от первого фрагмент (с обманным адресом отправителя), который при передаче в обход может перекрываться с трафиком IPsec с того же адреса и, таким образом, нарушать целостность трафика IPsec. Требование проверки с учётом состояния для отличных от первого фрагментов с нетривиальными значениями портов, направляемых в обход, позволяет предотвратить такие атаки. Как отмечено выше, в сетях, где фрагменты могут передаваться и приниматься через разные защитные шлюзы или реализации BITW, могут возникать проблемы с проверкой фрагментов с учётом состояния.

8. Обработка Path MTU и DF

Операции AH и ESP, применяемые к исходящим пакетам, увеличивают размер пакетов и могут в результате приводить к тому, что размер пакета превысит значение PMTU для SA, через которую пакет будет передаваться. Реализация IPsec может также получить незащищённое сообщение ICMP PMTU, реакция на которое будет воздействовать на обработку исходящего трафика. В этом разделе описаны операции, которые реализация IPsec должна выполнять в упомянутых ситуациях.

8.1. Бит DF

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

8.2. Определение PMTU

В этом параграфе рассматривается обработка IPsec для незащищённых сообщений Path MTU Discovery. Обозначение ICMP PMTU67 используется здесь для сообщений ICMP в:

IPv4 (RFC 792 [Pos81b]):

  • Type = 3 (Адресат недоступен)

  • Code = 4 (Нужна фрагментация, но установлен флаг DF)

  • Next-Hop MTU в младших 16 второго слова заголовка ICMP (указаны в RFC 792, как неиспользуемые) с нулевым значением старших 16 битов.

IPv6 (RFC 2463 [CD98]):

  • Type = 2 (Пакет слишком велик)

  • Code = 0 (Нужна фрагментация)

  • Next-Hop MTU в 32-битовом поле MTU сообщения ICMP6.

8.2.1. Распространение PMTU

Когда реализация IPsec получает неаутентифицированное сообщение PMTU, будучи настроенной на обработку (вместо игнорирования) таких сообщений, она отображает это сообщение на SA, которой оно соответствует. Отображение осуществляется с использованием информации из заголовка в поле данных сообщения PMTU по процедуре, описанной в параграфе 5.2. Определяемое таким сообщением значение PMTU используется для обновления поля SAD PMTU с учётом размера заголовка AH или ESP, который будет использован, всех данных криптографической синхронизации, а также издержек, связанных с дополнительным заголовком IP для туннельных SA.

В естественной реализации хоста возможно поддерживать данные PMTU с такой же гранулярностью, как для незащищённых коммуникаций, т. е., без потери функциональности. Сигнализация для данных PMTU является внутренним делом хоста. Для остальных реализаций IPsec данные PMTU должны распространяться с использованием синтезированного сообщения ICMP PMTU. В таких случаях реализации IPsec следует дождаться отображения исходящего трафика на запись SAD. При поступлении такого трафика с превосходящим PMTU размером пакетов должна выполняться следующая обработка:

Случай 1 — исходный (нешифрованный) пакет относится к IPv4 и имеет флаг DF. Реализации следует отбросить пакет и передать сообщение PMTU ICMP.

Случай 2 — исходный (нешифрованный) пакет относится к IPv4 и не имеет флага DF. Реализации следует фрагментировать пакет (до шифрования или после него в зависимости от настроек) и переслать фрагменты. Сообщение PMTU ICMP передавать не следует.

Случай 3 — исходный (нешифрованный) пакет относится к IPv6. Реализации следует отбросить пакет и передать сообщение PMTU ICMP.

8.2.2. Старение PMTU

Во всех реализациях IPsec значение PMTU, связанное с SA должно «стареть» с использованием того или иного механизма для своевременного обновления PMTU, особенно с целью проверки того, что найденное значение PMTU не меньше требуемого текущими условиями в сети. Данное значение PMTU сохраняется достаточно долго, чтобы доставить пакет от источника SA до партнёра. и передать сообщение ICMP, если текущее значение PMTU слишком велико.

Реализациям следует использовать модель, описанную с документе Path MTU Discovery (RFC 1191 [MD90], параграф 6.3), которая предлагает периодически сбрасывать PMTU для значения MTU канала данных на первом интервале, а потом обновлять его при необходимости с помощью обычного процесса PMTU Discovery. Период следует делать настраиваемым.

9. Проведение проверок

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

10. Соответствие требованиям

Все реализации IPv4 IPsec должны удовлетворять всем требованиям, приведённым в данном документе. Все реализации IPv6 IPsec должны удовлетворять всем требованиям, приведённым в данном документе.

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

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

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

Если реализация IPsec настроена на пропускание сообщений ICMP об ошибках через SA по значениям заголовков ICMP без проверки данных из заголовков, содержащихся в поле данных ICMP, может возникнуть серьёзная уязвимость. Рассмотрим сценарий с несколькими сайтами (A, B, C), соединёнными между собой туннелями ESP ((A-B, A-C, B-C). Предположим также, что селекторы трафика для каждого туннеля содержат значение ANY в полях протокола и порта, а адреса IP для отправителя и получателя содержат диапазоны, охватывающие блоки адресов, находящиеся за защитными шлюзами каждого из сайтов. Это позволяет хосту сайта B передавать любому хосту сайта A сообщения ICMP Destination Unreachable, которые говорят о недоступности всех хостов сети на сайте C. В результате возникает возможность организации очень эффективной DoS-атаки, которая могла бы быть предотвращена, если бы в сообщениях ICMP не только проверялись заголовки, но и выполнялись бы другие проверки, обеспечиваемые IPsec (если SPD подобающим образом настроена, как описано в параграфе 6.2).

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

Агентство IANA выделило значение (3) для реестра asn1-modules и идентификатор объекта 1.3.6.1.5.5.8.3.168 для модуля SPD (см. Приложение C, «ASN.1 для записи SPD»).

13. Отличия от RFC 2401

Этот документ, посвящённый архитектуре защиты, существенно отличается от RFC 2401 [RFC2401] в деталях и организации самого документа, но основы архитектуры остались неизменными.

  • Модель обработки была пересмотрена для реализации новых сценариев IPsec, повышения производительности и упрощения реализации. Изменения включают разделение пересылки (маршрутизации) и выбора SPD, раздельное изменение SPD, добавление исходящего кэша SPD и входящего кэша SPD для передаваемого в обход и отбрасываемого трафика. Добавлена также база данных аутентификации партнёров (PAD). Это обеспечило связь между протоколом управления SA (таким, как IKE) и SPD.

  • Снято требование поддержки вложенных SA или «связок SA». Соответствующая функциональность может быть достигнута за счёт SPD и таблицы пересылки. Пример конфигурации приведён в Приложении E.

  • Переопределены записи SPD для повышения уровня гибкости. Каждая запись SPD сейчас включает от 1 до N наборов селекторов, каждый из которых содержит один протокол, а список диапазонов может включать адреса Local IP, Remote IP и другие поля (если они есть), связанные с протоколом следующего уровня (локальный порт, удалённый порт, тип и код сообщения ICMP, тип Mobility Header). Отдельные значения представляются тривиальным (вырожденным) диапазоном, а значение ANY представляется диапазоном, который включает все значения селектора. Пример описания ASN.1 включён в Приложение C.

  • TOS (IPv4) и Traffic Class (IPv6) были заменены на DSCP и ECN. Обновлён раздел, посвящённый туннелям, в плане обработки битов DSCP и ECN.

  • Для SA туннельного режима реализациям SG, BITS и BITW сейчас разрешено фрагментировать пакеты до обработки IPsec. Это относится только к IPv4, а пакеты IPv6 разрешается фрагментировать только их источнику.

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

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

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

  • Добавлено определение резервных SPI.

  • Расширено объяснение необходимости проверки всех пакетов IP — IPsec включает минимальную функциональность межсетевого экрана для контроля доступа на уровне IP.

  • В разделе, посвящённом туннелям, разъяснена обработка поля опций IP и расширенных заголовков IPv6 при создании внешнего заголовка.

  • Обновлено отображение SA для входящего трафика с целью обеспечения согласованности с изменениями, внесёнными в AH и ESP для поддержки индивидуальных и групповых SA.

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

  • Отменено требование поддержки AH для IPv4 и IPv6 одновременно.

  • Обновлена обработка PMTU. Приложение, посвящённое обработке PMTU/DF/Fragmentation удалено.

  • Добавлены три модели обработки нешифрованных фрагментов на защищённой стороне границы IPsec. В Приложении D приведено обоснование работы с фрагментами.

  • Добавлено описание процесса создания значений селекторов для SA из записей SPD, полей пакета и т. п.

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

  • Добавлено Приложение B, описывающее декорреляцию.

  • Добавлен текст, описывающий обработку исходящих пакетов, которые должны быть отброшены.

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

  • Добавлен заголовок IPv6 Mobility Header в качестве возможного значения Next Layer Protocol. Тип IPv6 Mobility Header добавлен в качестве селектора.

  • Тип и код сообщения ICMP добавлены в качестве селектора.

  • В целях упрощения удалён селектор «data sensitivity level».

  • Обновлён текст, описывающий обработку сообщений ICMP об ошибках. Приложение «Categorization of ICMP Messages» было удалено.

  • Обновлён и прояснён текст для имён. селекторов.

  • Приведены дополнительные разъяснения для Next Layer Protocol (протокол следующего уровня) и добавлен принятый по умолчанию список протоколов, пропускаемых при поиске протокола следующего уровня.

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

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

  • Удалёно приложение Sequence Space Window Code Example.

  • Применительно к адресам IP и портам в правилах политики используются термины «локальный» и «удалённый» (взамен отправителя и получателя). Локальный относится к объекту, защищённому реализацией IPsec (т. е., отправителю исходящих пакетов или получателю входящих), а удалённый — к его партнёру. Термины «отправитель» и «получатель» по-прежнему используются применительно к полям заголовков.

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

Авторы отмечают значительный вклад Ran Atkinson в работы на начальном этапе IPsec и подготовку первых вариантов стандарта IPsec — RFC 1825-1827, а также существенный вклад Charlie Lynn в подготовку второй версии стандарта IPsec — RFC 2401, 2402, 2406 и текущей версии (в части IPv6). Авторы также благодарят членов рабочих групп IPsec и MSEC, внёсших важный вклад в разработку спецификации протокола.

Приложение A: Глоссарий

В этом разделе даны определения ключевых терминов, используемых в этом документе. Дополнительные определения и базовая информация содержатся также в ряде дополнительных документов, посвящённых этой технологии (например, [Shi00], [VK83], [HA94]). В этот глоссарий включены базовые термины, связанные с вопросами защиты, и термины IPsec.

Access Control — контроль доступа

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

  • вычислительные ресурсы и данные на хостах;

  • защищаемые шлюзами сети и полоса сетевых соединений.

Anti-replay — предотвращение повторного использования пакетов

См. Integrity ниже.

Authentication — проверка подлинности

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

Availability — доступность

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

Confidentiality — конфиденциальность

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

Data Origin Authentication — аутентификация источника данных

Услуга защиты, обеспечивающая проверку подлинности заявленного источника данных. Эта услуга обычно объединяется с защитой целостности (без привязки к соединению).

Encryption — шифрование

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

Integrity — целостность

Услуга защиты, обеспечивающая детектирование внесённых в данные изменений. Защита целостности может обеспечиваться в различных формах в зависимости от потребностей приложений. IPsec поддерживает две формы защиты целостности — не связанную с соединениями (connectionless) и частичную защиту порядка (partial sequence integrity). Защита целостности, не связанная с соединениями, представляет собой услугу по обнаружению изменения отдельных дейтаграмм IP без связи с порядком их следования в потоке трафика. Частичная защита порядка, предлагаемая в IPsec, называется также предотвращением повторного использования пакетов, и обеспечивает детектирование дубликатов дейтаграмм IP (в пределах ограниченного окна). Этим она отличается от защиты целостности соединений, которая обеспечивает более жёсткий контроль упорядоченности трафика (например, может детектировать потерю или нарушение порядка доставки сообщений). Хотя услуги аутентификации и защиты целостности часто рассматривают отдельно, на практике они обычно тесно связаны и почти всегда предоставляются в тандеме.

Protected vs. Unprotected — защищённый и незащищённый

«Защищённой» называют систему или интерфейс, находящиеся внутри защитной границы IPsec, а «незащищённой» — систему или интерфейс, находящиеся за пределами защитной границы. IPsec обеспечивает границу, через которую проходит трафик. На границе имеется асимметрия, которая отражена в модели обработки. Исходящие данные, если они не передаются в обход и не отбрасываются, будут защищены с использованием AH или ESP и добавлением соответствующих заголовков. Входящие данные, если они не передаются в обход и не отбрасываются, будут обрабатываться путём удаления заголовков AH или ESP. В этом документе входящим считается трафик, который приходит реализации IPsec от «незащищённого» интерфейса. Исходящий трафик поступает с «защищённого» интерфейса или генерируется самой реализацией на «защищённой» стороне границы и направляется в сторону «незащищённого» интерфейса. Реализация IPsec может поддерживать более одного интерфейса с каждой стороны границы. Защищённый интерфейс может быть внутренним (например, для реализации IPsec на хосте). Защищённый интерфейс может быть связан с интерфейсом уровня сокета, обеспечиваемым операционной системой (OS).

Security Association (SA) — защищённая связь

Симплексное (одностороннее) логическое соединение, создаваемое в целях защиты. Для всего трафика, проходящего через SA обеспечивается одинаковая защитная обработка. В IPsec защищённая связь (SA) представляет собой абстракцию уровня Internet, реализуемую за счёт использования AH или ESP. Данные о состоянии, связанные с SA представляются в базе данных SA (SAD).

Security Gateway (SG) — защитный шлюз

Промежуточная система, выполняющая функции коммуникационного интерфейса между двумя сетями. Хосты (сети), расположенные с внешней стороны защитного шлюза, называют незащищёнными (они в любом случае менее защищены, чем те, которые находятся «за шлюзом»), а сети и хосты с внутренней стороны шлюза называют защищёнными. Внутренние подсети и хосты, обслуживаемые защитным шлюзом, будут доверенными в силу использования общего, локального администрирования защиты. В контексте IPsec защитный шлюз является точкой, в которой реализуются AH и/или ESP для обслуживания внутренних хостов с целью предоставления им услуг защиты при обмене информацией с внешними хостами, которые также используют IPsec (непосредственно или через другой защитный шлюз).

Security Parameters Index (SPI) — список параметров защиты

Произвольное 32-битовое значение, используемое получателем для аутентификации SA, с которой следует связать входящий поток. Для индивидуальных SA значение SPI можно использовать для указания SA само по себе или в комбинации с типом протокола IPsec. Для аутентификации групповых SA дополнительно используются адреса IP. Значения SPI передаются в протоколах AH и ESP для того, чтобы принимающая система могла выбрать SA, в которой будут обрабатываться принимаемые пакеты. SPI имеет только локальную значимость, как определяется создателем SA (обычно, получатель пакета, содержащего SPI), поэтому в общем случае SPI представляется неформатированной строкой битов. Однако создатель SA может выбрать интерпретацию битов SPI для упрощения локальной обработки.

Traffic Analysis — анализ трафика

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

Приложение B: Декорреляция

Это приложение основано на работах по кэшированию правил, выполненных Luis Sanchez, Matt Condell и John Zao в рамках рабочей группы IP Security Policy.

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

B.1. Алгоритм декорреляции

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

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

C набор упорядоченных, коррелирующих записей (коррелирующая SPD).

Ci i-ая запись в C.

U набор декоррелированных записей, созданный из C.

Ui i-ая запись в U.

Sik k-ый выбор для правила Ci.

Ai действие для правила Ci.

Правило (запись SPD) P можно выразить, как последовательность значений селекторов и действие(BYPASS — обход, DISCARD — отбрасывание, PROTECT — защита):

           Ci = Si1 x Si2 x ... x Sik -> Ai
  1. Поместим C1 в набор U, как U1

    Для каждого правила Cj (j > 1) в наборе C

  2. Если Cj декоррелирована с каждой записью в U, Cj добавляется в U.

  3. Если Cj коррелирует с одной или множеством записей в U, создаётся дерево с корнем у Cj, которое делит Cj на множество декоррелированных записей. Алгоритм начинает работу с корневого узла, где ещё не были выбраны селекторы.

    1. Выбирается селектор Sjn в Cj, который ещё не был выбран при прохождении от корня дерева к данному узлу. Если ни одного селектора ещё не было использовано, продолжается работа со следующей незавершённой ветвью, пока все ветви не будут завершены. При завершении дерева переход к п. D.

      T представляет собой набор записей в U, коррелирующих с записью для данного узла.

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

    2. К дереву добавляется ветвь для каждого значения селектора Sjn, которое появляется в любой из записей в T (если значение представляет собой надмножество значения Sjn в Cj, используется значение в Cj, поскольку это значение представляет универсальный набор). Добавляется также ветвь для дополнения к объединению значений селектора Sjn в T. При создании дополнения следует помнить, что универсальный набор является значением Sjn в Cj. Для пустых наборов ветви не создаются.

    3. П. A и B повторяются до завершения дерева.

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

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

  1. Переход к следующей Cj и п. 2.

  2. При завершении обработки всех записей C набор U будет представлять собой декоррелированную версию C.

Этот алгоритм можно оптимизировать и некоторые из вариантов оптимизации представлены ниже.

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

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

Дополнительная оптимизация обеспечивается проверкой перекрытия ветви одной из коррелированных записей в наборе C, которые уже были декоррелированы. Т. е., если ветвь является частью декоррелированной Cj, проверяется перекрытие этой ветви записью Cm (m < j). Такая проверка корректна, поскольку все записи Cm уже выражены в U.

Вместе с проверкой того, что запись уже была декоррелирована на этапе 2, проверяется перекрытие Cj любой записью в U. Если такое перекрытие присутствует, запись пропускается, поскольку она не имеет отношения к делу. Запись x перекрывается другой записью y, если селектор в x совпадает с соответствующим селектором в y или является его подмножеством.

Приложение C: ASN.1 для записи SPD

Это приложение включено в качестве дополнительного способа описания записей SPD, определённых в параграфе 4.4.1. Здесь используется синтаксис ASN.1, который был успешно скомпилирован. Синтаксис служит исключительно для иллюстрации и его не требуется воплощать в реализациях для обеспечения совместимости. Описание SPD в параграфе 4.4.1 является нормативным.

SPDModule
    {iso(1) org (3) dod (6) internet (1) security (5) mechanisms (5)
     ipsec (8) asn1-modules (3) spd-module (1) }

       DEFINITIONS IMPLICIT TAGS ::=

       BEGIN

       IMPORTS
           RDNSequence FROM PKIX1Explicit88
             { iso(1) identified-organization(3)
               dod(6) internet(1) security(5) mechanisms(5) pkix(7)
               id-mod(0) id-pkix1-explicit(18) } ;

       -- SPD представляет собой список правил в порядке убывания предпочтений
       SPD ::= SEQUENCE OF SPDEntry

       SPDEntry ::= CHOICE {
           iPsecEntry       IPsecEntry,                -- PROTECT (защита трафика)
           bypassOrDiscard  [0] BypassOrDiscardEntry } -- DISCARD/BYPASS (обход/отбрасывание)

       IPsecEntry ::= SEQUENCE {       -- Каждая запись включает
           name        NameSets OPTIONAL,
           pFPs        PacketFlags,    -- Заполняется в соответствии с флагами в пакете
                              -- Применяется ко всем соответствующим селекторам трафика
                              -- из SelectorLists
           condition   SelectorLists,  -- Правило "condition" - условие
           processing  Processing      -- Правило "action" - действие
           }

       BypassOrDiscardEntry ::= SEQUENCE {
           bypass      BOOLEAN,        -- TRUE BYPASS (обход), FALSE DISCARD (отбрасывание)
           condition   InOutBound }

       InOutBound ::= CHOICE {
           outbound    [0] SelectorLists,
           inbound     [1] SelectorLists,
           bothways    [2] BothWays }

       BothWays ::= SEQUENCE {
           inbound     SelectorLists,
           outbound    SelectorLists }

       NameSets ::= SEQUENCE {
           passed      SET OF Names-R,  -- Соответствует IKE ID
           local       SET OF Names-I } -- Используется инициатором IKE

       Names-R ::= CHOICE {                   -- IKEv2 IDs
           dName       RDNSequence,           -- ID_DER_ASN1_DN
           fqdn        FQDN,                  -- ID_FQDN
           rfc822      [0] RFC822Name,        -- ID_RFC822_ADDR
           keyID       OCTET STRING }         -- KEY_ID

       Names-I ::= OCTET STRING       -- Используется инициатором IKE

       FQDN ::= IA5String

       RFC822Name ::= IA5String

       PacketFlags ::= BIT STRING {
                   -- при установленном флаге берётся значение селектора из пакета, 
                   -- создающего SA, иначе используется значение из записи SPD
           localAddr  (0),
           remoteAddr (1),
           protocol   (2),
           localPort  (3),
           remotePort (4)  }

       SelectorLists ::= SET OF SelectorList

       SelectorList ::= SEQUENCE {
           localAddr   AddrList,
           remoteAddr  AddrList,
           protocol    ProtocolChoice }

       Processing ::= SEQUENCE {
           extSeqNum   BOOLEAN, -- TRUE 64-битовый счётчик, FALSE - 32-битовый
           seqOverflow BOOLEAN, -- TRUE смена ключа, FALSE прерывание с записью в журнал
           fragCheck   BOOLEAN, -- TRUE проверка фрагментов с учётом состояния,
                                -- FALSE без проверки фрагментов с учётом состояния
           lifetime    SALifetime,
           spi         ManualSPI,
           algorithms  ProcessingAlgs,
           tunnel      TunnelOptions OPTIONAL } -- при отсутствии использ. транспортный режим

       SALifetime ::= SEQUENCE {
           seconds   [0] INTEGER OPTIONAL,
           bytes     [1] INTEGER OPTIONAL }

       ManualSPI ::= SEQUENCE {
           spi     INTEGER,
           keys    KeyIDs }

       KeyIDs ::= SEQUENCE OF OCTET STRING

       ProcessingAlgs ::= CHOICE {
           ah          [0] IntegrityAlgs,  -- AH
           esp         [1] ESPAlgs}        -- ESP

       ESPAlgs ::= CHOICE {
           integrity       [0] IntegrityAlgs,       -- только защита целостности
           confidentiality [1] ConfidentialityAlgs, -- только защита конфиденциальности
           both            [2] IntegrityConfidentialityAlgs,
           combined        [3] CombinedModeAlgs }

       IntegrityConfidentialityAlgs ::= SEQUENCE {
           integrity       IntegrityAlgs,
           confidentiality ConfidentialityAlgs }

       -- Алгоритмы защиты целостности в порядке снижения предпочтений
       IntegrityAlgs ::= SEQUENCE OF IntegrityAlg

       -- Алгоритмы защиты конфиденциальности в порядке снижения предпочтений
       ConfidentialityAlgs ::= SEQUENCE OF ConfidentialityAlg

       --  Алгоритмы защиты целостности
       IntegrityAlg ::= SEQUENCE {
           algorithm   IntegrityAlgType,
           parameters  ANY -- Определяются алгоритмом -- OPTIONAL }

       IntegrityAlgType ::= INTEGER {
           none              (0),
           auth-HMAC-MD5-96  (1),
           auth-HMAC-SHA1-96 (2),
           auth-DES-MAC      (3),
           auth-KPDK-MD5     (4),
           auth-AES-XCBC-96  (5)
       --  tbd (6..65535)
           }

       -- Алгоритмы защиты конфиденциальности
       ConfidentialityAlg ::= SEQUENCE {
           algorithm   ConfidentialityAlgType,
           parameters  ANY -- Определяются алгоритмом -- OPTIONAL }

       ConfidentialityAlgType ::= INTEGER {
           encr-DES-IV64   (1),
           encr-DES        (2),
           encr-3DES       (3),
           encr-RC5        (4),
           encr-IDEA       (5),
           encr-CAST       (6),
           encr-BLOWFISH   (7),
           encr-3IDEA      (8),
           encr-DES-IV32   (9),
           encr-RC4       (10),
           encr-NULL      (11),
           encr-AES-CBC   (12),
           encr-AES-CTR   (13)
       --  tbd (14..65535)
           }

       CombinedModeAlgs ::= SEQUENCE OF CombinedModeAlg

       CombinedModeAlg ::= SEQUENCE {
           algorithm   CombinedModeType,
           parameters  ANY -- Определяются алгоритмом} -- определены в других документах 
                                                       -- для режимов AES.

       CombinedModeType ::= INTEGER {
           comb-AES-CCM    (1),
           comb-AES-GCM    (2)
       --  будут определены впоследствии (3..65535)
           }

       TunnelOptions ::= SEQUENCE {
           dscp        DSCP,
           ecn         BOOLEAN,    -- TRUE копировать CE во внутренний заголовок
           df          DF,
           addresses   TunnelAddresses }

       TunnelAddresses ::= CHOICE {
           ipv4        IPv4Pair,
           ipv6        [0] IPv6Pair }

       IPv4Pair ::= SEQUENCE {
           local       OCTET STRING (SIZE(4)),
           remote      OCTET STRING (SIZE(4)) }

       IPv6Pair ::= SEQUENCE {
           local       OCTET STRING (SIZE(16)),
           remote      OCTET STRING (SIZE(16)) }

       DSCP ::= SEQUENCE {
           copy      BOOLEAN, -- TRUE копировать из внутреннего заголовка
                              -- FALSE не  копировать
           mapping   OCTET STRING OPTIONAL} -- указывает на таблицу, если копирования нет

       DF ::= INTEGER {
           clear   (0),
           set     (1),
           copy    (2) }

       ProtocolChoice::= CHOICE {
           anyProt  AnyProtocol,              -- для протокола ANY (любой)
           noNext   [0] NoNextLayerProtocol,  -- нет элементов следующего уровня
           oneNext  [1] OneNextLayerProtocol, -- имеется 1 элемент следующего уровня
           twoNext  [2] TwoNextLayerProtocol, -- имеется 2 элемента следующего уровня
           fragment FragmentNoNext }          -- нет информации следующего уровня

       AnyProtocol ::= SEQUENCE {
           id          INTEGER (0),    -- протокол ANY (любой)
           nextLayer   AnyNextLayers }

       AnyNextLayers ::= SEQUENCE {      -- с любым из
           first       AnyNextLayer,     -- ANY - селектор следующего уровня
           second      AnyNextLayer }    -- ANY - селектор следующего уровня

       NoNextLayerProtocol ::= INTEGER (2..254)

       FragmentNoNext ::= INTEGER (44)   -- Идентификатор фрагмента

       OneNextLayerProtocol ::= SEQUENCE {
           id          INTEGER (1..254),   -- ICMP, MH, ICMPv6
           nextLayer   NextLayerChoice }   -- ICMP Type*256+Code
                                           -- MH   Type*256

       TwoNextLayerProtocol ::= SEQUENCE {
           id          INTEGER (2..254),   -- Протокол
           local       NextLayerChoice,    -- Локальный и
           remote      NextLayerChoice }   -- удалённый порт

       NextLayerChoice ::= CHOICE {
           any         AnyNextLayer,
           opaque      [0] OpaqueNextLayer,
           range       [1] NextLayerRange }

       -- представление ANY в поле следующего уровня
       AnyNextLayer ::= SEQUENCE {
           start       INTEGER (0),
           end         INTEGER (65535) }

       -- представление OPAQUE в поле следующего уровня
       -- соответствует соглашениям IKE
       OpaqueNextLayer ::= SEQUENCE {
           start       INTEGER (65535),
           end         INTEGER (0) }

       -- диапазон для поля следующего уровня
       NextLayerRange ::= SEQUENCE {
           start       INTEGER (0..65535),
           end         INTEGER (0..65535) }

       -- список адресов IP
       AddrList ::= SEQUENCE {
           v4List      IPv4List OPTIONAL,
           v6List      [0] IPv6List OPTIONAL }

       -- представление адреса IPv4
       IPv4List ::= SEQUENCE OF IPv4Range

       IPv4Range ::= SEQUENCE {    -- закрыто, но не вполне корректно ...
           ipv4Start   OCTET STRING (SIZE (4)),
           ipv4End     OCTET STRING (SIZE (4)) }

       -- представление адреса IPv6
       IPv6List ::= SEQUENCE OF IPv6Range

       IPv6Range ::= SEQUENCE {    -- закрыто, но не вполне корректно ...
           ipv6Start   OCTET STRING (SIZE (16)),
           ipv6End     OCTET STRING (SIZE (16)) }

       END

Приложение D: Обоснование обработки фрагментов

Имеется три вопроса, связанных с обработкой (нешифрованных) фрагментов в IPsec и требующих решения:

  • отображение отличных от первого исходящих фрагментов на нужную SA (или привязка к нужной записи SPD);

  • проверка полномочности принятого фрагмента, отличного от первого, по отношению к SA, через которую он был получен;

  • отображений отличных от первого входящих и исходящих фрагментов на нужную запись в SPD/кэше для трафика BYPASS/DISCARD.

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

D.1. Транспортный режим и фрагменты

Сначала отметим, что SA транспортного режима по определению не могут передавать фрагменты. Это перенесено из RFC 2401, в соответствии с которым SA транспортного режима всегда завершаются на конечных точках69. Данное требование имеет фундаментальный характер, поскольку (в наихудшем случае) фрагмент IPv4, обработанный IPsec, может быть снова фрагментирован (в зашифрованном виде) на пути к адресату. Процедура сборки фрагментов IP на приёмной стороне IPsec не сможет отличить фрагменты, созданные до обработки IPsec от фрагментов обработанных IPsec дейтаграмм.

В IPv6 фрагментировать пакеты может только отправитель. Как и для IPv4, реализации IPsec разрешено фрагментировать пакеты туннельного режима после обработки IPsec, поскольку именно реализация IPsec является отправителем с точки зрения (внешнего) заголовка пакета. Однако, в отличие от IPv4, в этом случае можно передавать нешифрованные фрагменты через транспортные SA, поскольку заголовок фрагмента IPv6 размещается после заголовка AH или ESP, что позволяет избавиться от конфликтов при сборке на приёмной стороне. В частности, получатель не будет пытаться собирать фрагменты до выполнения обработки IPsec. Для упрощения данная спецификация запрещает передавать фрагменты через транспортные SA (в том числе и) для трафика IPv6.

Когда транспортные SA используются только конечными системами, проблем с передачей фрагментов не возникает, поскольку предполагается, что конечная система может быть настроена на отказ от фрагментирования IPsec. Для естественной реализации на хосте и представляется оправданным и, как уже было отмечено, RFC 2401 предупреждает, что реализации BITS могут собирать фрагменты до просмотра SA (они в таких случаях будут применять AH или ESP и могут заново фрагментировать пакет после обработки IPsec). Поскольку предполагается, что реализации BITS способны иметь доступ ко всему трафику, исходящему с хоста, даже при наличии множества интерфейсов, данное требование представляется разумным.

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

D.2. Туннельный режим и фрагменты

Для туннельных SA исходящие фрагменты могут в любой момент поступать для обработки в реализацию IPsec. Необходимость обработки фрагментированных исходящих пакетов может вызывать проблемы, поскольку фрагменты, отличные от первого, не будут содержать полей портов, связанных с протоколом следующего уровня (таким, как TCP, UDP, SCTP). Таким образом, в зависимости от конфигурации SPD для данной реализации IPsec, нешифрованные фрагменты могут вызывать или не вызывать проблемы.

Например, если SPD требует, чтобы для всего трафика между парой диапазонов адресов обеспечивалась защита IPsec (для этого диапазона адресов не применяются записи SPD BYPASS или DISCARD), передавать отличные от первого фрагменты достаточно просто для через SA, определённых для этого диапазона адресов, поскольку запись SPD предназначена для передачи всего трафика между диапазонами адресов. Однако при наличии множества записей SPD, которым может соответствовать фрагмент, указывающих на разные подмножества поля портов (в отличие от ANY), невозможно однозначно отобразить отличные от первого входящие фрагменты на корректную запись. Если разрешена передача фрагментов через транспортные SA для IPv6, описанная проблема будет наблюдаться и в этом контексте.

Эта проблема в значительной мере обусловила определение в RFC 2401 OPAQUE в качестве значения для поля портов. Другой причиной ввода значения OPAQUE послужило тот факт, что поля портов могут быть недоступны до применения IPsec. Например, если хост использует IPsec для своего трафика при поступлении этого трафика на SG поля портов будут зашифрованы. Описанный в RFC 2401 алгоритма нахождения поля next layer protocol также является мотивом использования OPAQUE для восприятия в таких ситуациях зашифрованного поля протокола следующего уровня. Тем не менее, основным назначением OPAQUE является использование этого значения в качестве селектора, соответствующего пакетам, не содержащим поля портов (отличные от первого фрагменты), и пакетам, в которых поля портов уже зашифрованы (в результате использования IPsec). В RFC 2401 содержались неоднозначности в плане использования OPAQUE и ANY (отмечалось, что в некоторых случаях ANY может служить альтернативой OPAQUE).

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

Поскольку мы принимаем приведённые выше определения ANY и OPAQUE, нужно разъяснить использование этих значений в тех случаях, когда указанный протокол не использует поля портов, а в качестве селектора протокола указано значение ANY. Соответственно, если указанное значение протокола используется в качестве селектора и этот протокол не имеет поля портов, селекторы поля порта игнорируются и в качестве значения полей портов должно использоваться ANY. В этом контексте значения типа и кода ICMP указываются совместно в одном поле порта (для согласования IKEv2), как и значение типа IPv6 Mobility Header. Если селектор протокола имеет значение ANY, его следует трактовать, как эквивалент задания протокола, для которого не определено поле порта (селекторы портов в этом случае игнорируются и должны иметь значение ANY).

D.3. Проблема фрагментов, не являющихся начальными

Для реализаций SG обычной картиной является получение фрагментов от конечных систем, расположенных за SG. Реализации BITW могут сталкиваться с фрагментами от расположенных за ними хостов или шлюзов (как было отмечено выше, реализации хостов и BITS могут не сталкиваться с описанными ниже проблемами). В наихудшем случае фрагменты пакета могут приходить на разные BITW или SG, что не позволяет воспользоваться сборкой фрагментов на таких устройствах. Поэтому в RFC 2401 были описаны общие требования по обработке фрагментов в туннельном режиме для всех реализаций. Однако RFC 2401 не обеспечивает решения для всех случаев. Использование значения OPAQUE в качестве селектора для полей портов (уровень требований следует в RFC 2401) разрешается для SA, передающих фрагменты, отличные от первых.

При использовании определённых в RFC 2401 возможностей для SA между двумя реализациями IPsec (SG или BITW), указывающими значение OPAQUE в полях портов все отличные от первых фрагменты, соответствующие по адресам отправителя/получателя (S/D) и протоколам, будут отображаться на такие SA. Начальные фрагменты не будут отображаться на эти SA, если мы примем строгое определение OPAQUE. Однако в RFC 2401 не дано детального руководства для таких случаев и, следовательно, может показаться не очевидным, что использование этих возможностей позволяет создавать SA только для фрагментов, не являющихся первыми.

При обсуждении модели SA «только для фрагментов» было отмечено наличие трудно уловимых проблем, которые не были рассмотрены в RFC 2401, — этих проблем удаётся избежать. Например, SA такого типа должны настраиваться так, чтобы обеспечивалось «высшее качество» услуг защиты для любого трафика между указанными адресами S/D (для заданного протокола). Это требуется для того, чтобы для трафика, проходящего через SA «только для фрагментов», не снижался уровень защиты по сравнению с пакетами, для которых не требуется фрагментирования. Возможная проблема заключается в том, что не удастся идентифицировать «высшее качество» услуг защиты, которые могут обеспечиваться между двумя реализациями IPsec, поскольку выбор протоколов, опций и алгоритмов защиты осуществляется из неупорядоченного линейно множества (можно сказать, что BYPASS < AH < ESP с контролем целостности, но ситуация усложнится, если используется множество алгоритмов шифрования или контроля целостности ESP). Поэтому упорядочение таких параметров защиты может иметь лишь локальную значимость.

Однако такая консервативная стратегия может приводить к снижению производительности. Если большая часть трафика, проходящего через реализацию IPsec для данной пары адресов S/D и заданного протокола будет передаваться в обход (bypass), SA «только для фрагментов» для данной паря адресов может вызывать существенный рост объёма трафика, требующего криптографической обработки. Если реализация криптографических механизмов не способна обрабатывать такой объем трафика, могут возникнуть проблемы70.

Другим предметом для беспокойства являются то, что отличные от первого фрагменты, передаваемые через выделенную SA, могут использоваться для организации атак (перекрытие фрагментов при сборке), когда они будут объединяться с явно допустимыми первыми фрагментами71. Этот вопрос легко решается в IPv4 путём проверки величины смещения фрагмента с целью убедиться, что смещение отличных от первого фрагментов не было настолько мало, чтобы в такие фрагменты попадали поля с номерами портов, которые должны находиться в первом фрагменте. Поскольку, что минимальный размер MTU для IPv4 составляет 576 байтов, а размер заголовка IP не может превышать 60 байтов, номера портов в любом случае должны оказаться в первом фрагменте. Если мы потребуем, чтобы все отличные от первого фрагменты имели смещение не менее 128, это позволит предотвратить атаки данного типа. Если задача состоит лишь в защите от атак на процесс сборки, проверку достаточно обеспечить лишь на приёмной стороне.

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

Другим поводом для беспокойства является то, что для некоторых топологий и конфигураций SPD эта модель может приводить к неожиданностям в плане контроля доступа. Дело в том, что при создании SA для передачи всех (ALL) отличных от начальных фрагментов такие SA могут передавать некий трафик, который в противном случае приходил бы по иному пути (например, через межсетевой экран-посредник72) в незашифрованном виде. Но эта проблема возникает только в тех случаях, когда альтернативный путь пропускает отличные от первого фрагменты без промежуточной сборки, что является заведомо неправильным для межсетевых экранов-посредников. Тем не менее, это может вызывать проблемы в некоторых топологиях при определённых условиях для правил SPD и межсетевого экранирования, поэтому администраторам нужно принимать во внимание такую возможность.

Менее серьёзная проблема связана с тем, что отличные от начальных фрагменты, передаваемые через предназначенные только для них SA могут открывать возможность для DoS-атак за счёт использования некорректных первых фрагментов. Это может использоваться для организации атак на хосты, расположенные за устройствами SG или BITW. Однако дополнительный риск от атак этого типа, которые могут быть направлен лишь на хосты, расположенные за устройствами SG или BITW, представляется достаточно малым.

Если мы интерпретируем значение селектора ANY, как включающее в себя значение OPAQUE, одна связь SA со значениями ANY для обоих полей портов будет способна принимать весь трафик, соответствующих селекторам адресов S/D и протокола, — это будет альтернативой использованию значения OPAQUE. Однако использование ANY препятствует созданию множества разных SA между одинаковыми реализациями IPsec для одного набора адресов и протокола. Поэтому описанные варианты не совсем эквивалентны.

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

D.4. Обход/отбрасывание трафика

Рассмотрим также вопрос обработки отличных от начального фрагментов для записей BYPASS/DISCARD, независимо от обработки SA. Эта задача решается в значительной степени локально по двум причинам:

  1. нет возможности координации записей SPD для такого трафика между разными реализациями IPsec, поскольку IKE не используется;

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

Однако этот документ должен обеспечить руководство, в котором в соответствии с провозглашёнными целями, должны быть описаны функции контроля доступа для всего трафика на границах IPsec. Поэтому в документе сказано, что реализации должны поддерживать сборку фрагментов трафика BYPASS/DISCARD, когда задано значение поля порта. Реализация также должна предоставлять пользователю или администратору возможность принять или отвергнуть такой трафик с использованием соглашений SPD, описанных в разделе 4.4.1. Дело в том, что передача в обход (BYPASS) нешифрованных фрагментов, отличных от начального, которые приходят реализации IPsec, может снижать уровень защиты для трафика IPsec, поступающего по тому же адресу. В качестве примера рассмотрим реализацию IPsec записью SPD, которая обеспечивает защиту IPsec для всего трафика между заданной парой отправитель-получатель с указанным протоколом и номером порта (например, TCP через порт 23 — Telnet). Предположим, что реализация также разрешает обход (BYPASS) для трафика той же пары отправитель-получатель и протокола, но с другим номером порта (например, 119 — NNTP). Атакующий может передать отличный от начального фрагмент (с подставным адресом отправителя), который, будучи переданным в обход, сможет перекрыться с защищённым IPsec трафиком от корректного отправителя с тем же адресом и это приведёт к нарушению целостности защищённого IPsec трафика. Требование проверки передаваемого в обход (BYPASS) трафика с учётом состояния для отличных от начального фрагментов позволяет предотвратить атаки этого типа.

D.5. Просто запретить использование портов?

Предлагалось решение рассмотренной выше проблемы путём запрета использования селекторов порта в туннельном режиме. Однако обсуждение этого вопроса показало, что такой запрет будет слишком жёсткой мерой, поскольку для реализаций в OS и BITS описанной проблемы не возникает. Более того, некоторые члены рабочей группы описали сценарии, в которых использование туннельных SA со значимыми номерами порта в заголовках отличных от начального фрагментов вполне допустимо. Таким образом, задача состоит в определении стратегии решения этой проблемы в контексте BITW и SG. Отметим также, что записи BYPASS/DISCARD в SPD, для которых допускается использование портов, вызывают одинаковые проблемы как в транспортном, так и в туннельном режиме.

Существуют предложения сохранить для межсетевых экранов, находящихся за SG или BITW, возможность контроля доступа на уровне портов для фрагментов. Однако это такой подход представляется неуместным, поскольку в IPsec (например, для данных IKE) имеются ситуации, когда межсетевые экраны отбрасывают все фрагменты. Если многие межсетевые экраны совсем не будут пропускать фрагменты, почему мы должны поступать по-иному в данном случае? Поэтому приведённый здесь анализ отвергает предложение запрета на использование селекторов портов в туннельных SA.

D.6. Другие решения

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

Более изощренным вариантом является организация и поддержка минимальной информации о состоянии для каждого начального фрагмента, которая позволила бы сопоставить отличные от начального фрагменты с корректной SA или записью SPD/кэша. Этот вариант предполагает расширение современной (и предшествующей) модели обработки. Реализация IPsec будет перехватывать все фрагменты, считывать поля IPадресов отправителя и получателя, протокола, идентификатора пакета и номеров портов, а потом использовать эти данные для отображения отличных от начального фрагментов на SA, которые задают поля портов. При реализации этой модели получатель должен будет поддерживать эквивалентную схему, поскольку он тоже должен будет убедиться, что полученные фрагменты согласуются со значениями селекторов SA. Отличный от начального фрагмент, полученный раньше начального, может быть кэширован или отброшен.

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

Рабочая группа отказалась от прежнего соглашения в части создания SA для передачи отличных от начального фрагментов, которое неявно поддерживалось в модели RFC 2401 за счёт использования значения OPAQUE в поле порта, но не было указано в RFC 2401 явно. (Отвергнутое) соглашение предлагает каждый фрагмент, отличный от начального, трактовать, как протокол 44 (идентификатор протокола в заголовке IPv6) на передающей и приёмной стороне. Это позволяет унифицировать обработку фрагментов IPv4 и IPv6, но не даёт полного решения проблемы и даже не решает вопроса обработки фрагментов для отбрасываемого и передаваемого в обход (BYPASS/DISCARD) трафика. С учётом проблемы атак перекрывающимися фрагментами в IPv6 эта стратегия не представляется эффективной.

D.7. Согласованность

Ранее рабочая группа согласилась с разрешением реализациям IPsec для BITS, BITW или SG выполнять фрагментацию до обработки IPsec. Если такая фрагментация выполняется после поиска SA на стороне отправителя, проблемы отображения на корректную SA не возникает. Но для получателя сохраняется необходимость проверки соответствия отличных от начального фрагментов связи SA, через которую они были получены. Поскольку начальный фрагмент может быть потерян в пути, у получателя могут возникать все перечисленные выше проблемы. Таким образом, если мы будем поддерживать принятое ранее решение, нужно будет сказать, как вести себя получателю отличных от начального фрагментов.

D.8. Заключение

Не существует простого, однотипного решения для всех случаев. Разные варианты по-разному работают в различных контекстах. Этот документ предлагает 3 варианта — один обязательный и два возможных. В будущем, если сообщество наберет достаточно опыта использования возможных вариантов, их статус может быть повышен до следует или должно, а также могут быть предложены другие решения.

Приложение E: Пример поддержки вложенных SA через записи SPD и таблицы пересылки

В этом приложении даётся пример настройки SPD и таблиц пересылки для поддержки вложенной пары SA в соответствии с новой моделью обработки. Для простоты в этом примере предполагается лишь одна SPD-I.

+---+     +---+  +---+
| A |=====| B |  | C |
|   |------------|   |
|   |=====|   |  |   |
+---+     +---+  +---+


Задачей является поддержка транспортной SA от A к C, передаваемой через туннельную SA от A к B. В качестве A может использоваться, например, переносный компьютер, подключенный к сети Internet, B может быть межсетевым экраном, защищающим корпоративную сеть, а C — сервером в корпоративной сети, которому требуется сквозная проверка подлинности трафика от A.

SPD содержит записи в форме, показанное в таблице.

 

Правило

Локальн.

Удалён.

Протокол следующего уровня

Действие

1

C

A

ESP

BYPASS

2

A

C

ICMP,ESP

PROTECT(ESP, туннель, целостность и конфиденциальность)

3

A

C

ANY

PROTECT(ESP, транспорт, только целостность)

4

A

B

ICMP,IKE

BYPASS

 

На незащищённой стороне A таблица пересылки организована так, что исходящие пакеты, адресованные C возвращаются на защищённую сторону. Таблица пересылки на защищённой стороне A организована так, что входящие пакеты ESP возвращаются на незащищённую сторону. Таблицы пересылки A показаны ниже.

Таблица пересылки на незащищённой стороне.

 

Правило

Локальн.

Удалён.

Протокол следующего уровня

Действие

1

A

C

ANY

Петля с возвратом на защищённую сторону

2

A

B

ANY

Пересылка B

 

Таблица пересылки на защищённой стороне.

 

Правило

Локальн.

Удалён.

Протокол следующего уровня

Действие

1

A

C

ESP

Петля с возвратом на незащищённую сторону

 

Пакет TCP идущий от A к C будет соответствовать правилу 3 в SPD и к нему будет применяться ESP транспортного режима. Таблица пересылки на незащищённой стороне будет возвращать пакет назад. Пакет сравнивается с SPD-I (см. Рисунок 2), констатируется соответствие правилу 1 и пакет передаётся в обход (BYPASS). Пакет трактуется, как исходящий и сравнивается с SPD в третий раз. Сейчас он будет соответствовать правиле 2 и к нему будет применяться ESP туннельного режима. В этом случае таблица пересылки уже не будет возвращать пакет, поскольку его получателем указан B, следовательно, пакет отправится в сеть.

Входящий пакет TCP от C к A будет «завернут» в два заголовка ESP — внутренний (ESP туннельного режима) будет указывать в качестве отправителя B, а внешний (ESP транспортного режима) — C. По прибытии на A пакет будет отображён на SA на основе значения SPI, после чего внешний заголовок будет удалён, а пакет — расшифрован и проверен на целостность. Далее пакет будет проверен на соответствие селекторам SAD для этой SA, которые будут указывать C в качестве отправителя пакета, A — в качестве получателя (правила 2 в SPD). Таблица пересылки на защищённой стороне будет возвращать пакет на незащищённую сторону на основе адресов и протокола следующего уровня (ESP), показывающих вложенность. Пакет сравнивается с SPD-O (см. Рисунок 3) и обнаруживается соответствие правилу 1 в SPD, поэтому пакет передаётся в обход (BYPASS). Пакет отображается на SA на основе значения SPI, выполняется проверка целостности и сравнение с селекторами SAD полученными из правила 3 в SPD. После этого функция пересылки передаст пакет на следующий уровень, поскольку он не является пакетом ESP.

Литература

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

[BBCDWW98] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and W. Weiss, «An Architecture for Differentiated Service», RFC 247573, December 1998.

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

[CD98] Conta, A. and S. Deering, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 2463, December 1998.

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

[Eas05] 3rd Eastlake, D., «Cryptographic Algorithm Implementation Requirements For Encapsulating Security Payload (ESP) and Authentication Header (AH)», RFC 4305, December 2005.

[HarCar98] Harkins, D. and D. Carrel, «The Internet Key Exchange (IKE)», RFC 2409, November 1998.

[Kau05] Kaufman, C., Ed., «The Internet Key Exchange (IKEv2) Protocol», RFC 4306, December 2005.

[Ken05a] Kent, S., «IP Encapsulating Security Payload (ESP)», RFC 4303, December 2005.

[Ken05b] Kent, S., «IP Authentication Header», RFC 4302, December 2005.

[MD90] Mogul, J. and S. Deering, «Path MTU discovery», RFC 1191, November 1990.

[Mobip] Johnson, D., Perkins, C., and J. Arkko, «Mobility Support in IPv6», RFC 3775, June 2004.

[Pos81a] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[Pos81b] Postel, J., «Internet Control Message Protocol», RFC 792, September 1981.

[Sch05] Schiller, J., «Cryptographic Algorithms for use in the Internet Key Exchange Version 2 (IKEv2)», RFC 4307, December 2005.

[WaKiHo97] Wahl, M., Kille, S., and T. Howes, «Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names», RFC 2253, December 1997.

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

[CoSa04] Condell, M., and L. Sanchez, «On the Deterministic Enforcement of Un-ordered Security Policies», BBN Technical Memo 1346, March 2004.

[FaLiHaMeTr00] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P. Traina, «Generic Routing Encapsulation (GRE)», RFC 2784, March 2000.

[Gro02] Grossman, D., «New Terminology and Clarifications for Diffserv», RFC 3260, April 2002.

[HC03] Holbrook, H. and B. Cain, «Source Specific Multicast for IP», Work in Progress, November 3, 2002.

[HA94] Haller, N. and R. Atkinson, «On Internet Authentication», RFC 1704, October 1994.

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

[Per96] Perkins, C., «IP Encapsulation within IP», RFC 2003, October 1996.

[RaFlBl01] Ramakrishnan, K., Floyd, S., and D. Black, «The Addition of Explicit Congestion Notification (ECN) to IP», RFC 3168, September 2001.

[RFC2401] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 2401, November 1998.

[RFC2983] Black, D., «Differentiated Services and Tunnels», RFC 2983, October 2000.

[RFC3547] Baugher, M., Weis, B., Hardjono, T., and H. Harney, «The Group Domain of Interpretation», RFC 3547, July 2003.

[RFC3740] Hardjono, T. and B. Weis, «The Multicast Group Security Architecture», RFC 3740, March 2004.

[RaCoCaDe04] Rajahalme, J., Conta, A., Carpenter, B., and S. Deering, «IPv6 Flow Label Specification», RFC 3697, March 2004.

[Sch94] Schneier, B., Applied Cryptography, Section 8.6, John Wiley & Sons, New York, NY, 1994.

[Shi00] Shirey, R., «Internet Security Glossary», RFC 2828, May 2000.

[SMPT01] Shacham, A., Monsour, B., Pereira, R., and M. Thomas, «IP Payload Compression Protocol (IPComp)», RFC 3173, September 2001.

[ToEgWa04] Touch, J., Eggert, L., and Y. Wang, «Use of IPsec Transport Mode for Dynamic Routing», RFC 3884, September 2004.

[VK83] V.L. Voydock & S.T. Kent, «Security Mechanisms in High-level Networks», ACM Computing Surveys, Vol. 15, No. 2, June 1983.

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

Stephen Kent

BBN Technologies

10 Moulton Street

Cambridge, MA 02138

USA

Phone: +1 (617) 873-3988

EMail: kent@bbn.com

Karen Seo

BBN Technologies

10 Moulton Street

Cambridge, MA 02138

USA

Phone: +1 (617) 873-3152

EMail: kseo@bbn.com

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2006).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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

1Network Address Translation — трансляция сетевых адресов.

2Authentication Header — аутентификационный заголовок.

3Encapsulating Security Payload — инкапсуляция защищённых данных.

4Internet Key Exchange — обмен ключами в Internet.

5Security Architecture — архитектура защиты.

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

7Security gateway — защитный шлюз — промежуточная система, реализующая IPsec (например, межсетевой экран или маршрутизатор с поддержкой IPsec).

8Security Policy Database — база правил (политики) безопасности.

9Уровень требования по поддержке AH был снижен до “может” потому, что опыт показывает, что существует весьма незначительное число ситуаций, в которых ESP не может обеспечить требуемой защиты. Отметим, что протокол ESP можно использовать в режиме защиты только целостности данных (integrity) без обеспечения сохранности тайны (confidentiality), что делает его сравнимым в AH в большинстве контекстов.

10Bump-in-the-stack утолщение в стеке.

11Bump-in-the-wire — утолщение в проводе.

12Security Parameters Index — индекс параметров безопасности. Информация о SPI содержится в Приложении A и спецификациях протоколов AH и ESP [Ken05b, Ken05a].

13Group Security Association — групповая защищённая связь.

14SA Database — база данных о защищённых связях (SA).

15Ternary Content-Addressable Memory — триадная память с адресацией по содержимому.

16Group Domain of Interpretation.

17Source-Specific Multicast — заданная отправителем групповая адресация.

18Differentiated Services Code Point.

19Предотвращение повторного использования собранных ранее пакетов.

20Quality of Service.

21Explicit Congestion Notification — явное уведомление о насыщении.

22Generic Routing Encapsulation — базовая инкапсуляция маршрутных данных.

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

24Simple Network Management Protocol — простой протокол управления сетью.

25Межсетевой экран. Прим. перев.

26SA bundle.

27Peer Authorization Database — база данных о проверке полномочий партнёров.

28Key management SA.

29Non-initial fragment.

30Next Layer Protocol.

31Initial fragment.

32Access Control List.

33Populate from packet — заполнить из пакета.

34Mobility Header.

35При реализации IPsec непосредственно в стеке протоколов хоста с использованием интерфейса сокетов может не потребоваться обращений к SPD для каждого пакета, как отмечено в конце параграфа 4.4.1.1 и параграфа 5.

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

37В оригинале — distinguished name. Прим. перев.

38Не следует путать символьные имена в интерфейсе управления с селектором SPD «Name».

39Management Information Base — база данных управления. Прим. перев.

40Если предотвращение повторного использования пакетов отключено получателем для SA (например, в SA с задаваемыми вручную ключами), значение Anti-Replay Window игнорируется для этой SA. По умолчанию используются 64-битовые порядковые номера, но размер счётчика позволяет использовать и 32-битовые номера.

41Certificate Revocation List — список отзыва сертификатов.

42«Список протоколов» — это информация, а не способ представления этой информации в SPD, SAD или IKEv2.

430 (нуль) используется IKE в качестве значения ANY для протокола.

44Поле протокола на может принимать значение OPAQUE для IPv4. Эта запись применима только к IPv6.

45«Список протоколов» — это информация, а не способ представления этой информации в SPD, SAD или IKEv2.

460 (нуль) используется IKE в качестве значения ANY для протокола.

47Поле протокола на может принимать значение OPAQUE для IPv4. Эта запись применима только к IPv6.

48Использование PFP=1 с OPAQUE является ошибкой и его следует запрещать в реализации IPsec.

49Использование PFP=1 с OPAQUE является ошибкой и его следует запрещать в реализации IPsec.

50Online Certificate Status Protocol — протокол проверки состояния сертификатов.

51Distinguished Name.

52Full Qualified Domain Name — полное доменное имя. Прим. перев.

53Relative Distinguished Name.

54Classless Inter-Domain Routing — бесклассовая междоменная маршрутизация. Схема задания блоков адресов IP без использования классов адресов. Прим. перев.

55The end entity.

56Virtual private network.

57Как было отмечено выше, SAD действует как кэш для проверки селекторов входящего трафика с защитой IPsec, поступающего в SA

58Исходная запись SPD может давать в результате множество SA (например, по причине наличия флага PFP).

59С защищённой стороны на незащищённую.

60Это применимо только к IPv4. Для пакетов IPv6 фрагментация разрешена только их исходному источнику.

61Denial of service — отказ в обслуживании.

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

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

64Для группового трафика может потребоваться демультиплексирование адреса получателя или адресов получателя и отправителя. В этом случае важно обеспечить согласованность в течение всего срока жизни SA (гарантия совпадения адреса отправителя в инкапсулирующем заголовке с адресом, согласованным при создании SA). Из этого правила есть исключение — мобильные реализации IPsec будут менять адрес отправителя при перемещениях.

65ECN-Capable Transport — транспорт, поддерживающий ECN.

66С незащищённой стороны на защищённую.

67Path MTU — MTU для пути.

68В оригинале ошибочно указан идентификатор 1.3.6.1.5.8.3.1. Прим. перев.

69Не на защитных шлюзах, в отличие от туннельных SA. Прим. перев.

70Реализации IPsec, работающие со скоростью среды (или близкой), не подвержены влиянию выбора такой конфигурации SA. Снижение производительности может сильно зависеть от возможностей конкретной реализации.

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

72В оригинале «proxy firewall». Прим. перев.

73Этот документ частично изменён RFC 3260. Прим. перев.

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

RFC 4264 BGP Wedgies

Network Working Group                                     T. Griffin
Request for Comments: 4264                   University of Cambridge
Category: Informational                                    G. Huston
                                                               APNIC
                                                       November 2005

BGP Wedgies

PDF

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

В этом документе содержится информация, адресованная сообществу Internet. Документ не содержит спецификаций каких-либо стандартов Internet. Допускается свободное распространение документа.

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

Copyright (C) The Internet Society (2005).

Аннотация

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

1. Введение

Принято считать, что протокол BGP [RFC1771] является средством распространения информации о доступности сетей, обеспечивающим создание детерминированных путей пересылки трафика. В этом документе (problem statement – констатация проблемы) описывается класс конфигураций BGP, для которых может существовать более одного стабильного состояния пересылки. Одним из таких стабильных является предусмотренное (intended) состояние, а остальные стабильные состояния являются непредусмотренными (unintended). Процесс схождения BGP может приводить к недетерминированному выбору стабильного состояния пересылки.

Такие стабильные, но непреднамеренные состояния BGP обозначаются в этом документе термином BGP Wedgies2.

2. Описание политики маршрутизации BGP

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

В части оптимизации расходов принятая по умолчанию локальная политика маршрутизации часто отдает предпочтение маршрутам, полученным от заказчиков по отношению к маршрутам, полученным от центров обмена трафиком. По тем же причинам локальная сеть зачастую настраивается так, чтобы отдавалось предпочтение маршрутам, полученным от заказчиков или партнеров (peer), перед маршрутами, полученными от транзитных upstream-провайдеров. Эти предпочтения могут выражаться через локальные настройки конфигурации, где локальные предпочтения (local preference) имеют более высокий приоритет по сравнению с метрикой AS path length, принятой в BGP.

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

В таких ситуациях для множества upstream-провайдеров также устанавливаются уровни предпочтения так, что одно из соединений является предпочтительным или основным (primary), а остальные рассматриваются как менее предпочтительные или резервные (backup). Смысл этого состоит в том, что резервные соединения используются для передачи трафика только при повреждении основного канала.

Политику “основной-резервный” можно задать с использованием локальных настроек AS path prepending, когда пути (AS path) искусственно удлиняется для резервных провайдеров путем вставки дополнительных значений local AS. Этот алгоритм выбора не является детерминированным, поскольку выбранный в качестве первичного провайдер также может использовать искусственное удлинение пути для своего резервного upstream-провайдера и это может приводить к тому, что в некоторых случаях путь через резервного провайдера может оказаться самым коротким (shortest AS path).

В качестве другого варианта управления политикой маршрутизации используются группы BGP (BGP community) [RFC1997]. В этом случае провайдер публикует набор значений community, который позволяет клиентам выбрать для провайдера локальные параметры предпочтения. Клиент может использовать группу (community) для маркировки как качестве резервного (backup only) маршрута в направлении резервного провайдера и установить primary preferred (предпочтительный) для маршрута в направлении основного провайдера. В этом случае локальные предпочтения будут иметь более высокий приоритет по сравнению с метрикой AS path, поэтому маршрут, помеченный как backup only, будет использоваться только в тех случаях, когда другие маршруты недоступны.

3. BGP Wedgies

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

       +----+peer                peer+----+
       |AS 3|------------------------|AS 4|
       +----+                        +----+
         |provider             provider|
         |                             |
         |                             |
         |customer                     |
       +----+                          |
       |AS 2|                          |
       +----+                          |
         |provider                     |
         |                             |
         |                             |
         |customer             customer|
         +---------------+  +----------+
           backup service|  |primary service
                        +----+
                        |AS 1|
                        +----+

Рисунок 1

В этом случае AS1 помечает свои анонсы префиксов в AS2 как backup only, а анонсы префиксов в AS4, как primary. AS4 будет анонсировать префиксы AS1 в автономную систему AS3, которая будет видеть анонсы AS4 через партнерское соединение (peering link) и выбирать префиксы AS1 с путем «AS4, AS1». Эти префиксы AS3 будет анонсировать в автономную систему AS2, которая будет видеть два пути к префиксам AS1. Первый путь будет проходить через прямое соединение с AS1, а второй через «AS3, AS4, AS1». AS2 будет выбирать более длинный путь, поскольку маршруты через прямое подключение помечены как резервные, и локальная политика AS2 будет предпочитать анонсы от AS3 перед анонсами от AS1.

Здесь существует преднамеренный результат политики AS1, когда в “нормальном” состоянии трафик совсем не передается из AS2 в AS1 через резервный канал и AS2 обменивается данными с AS1 через путь, включающий AS3 и AS4 и являющийся основным каналом в AS1.

Этот преднамеренный результат достигается когда AS1 анонсирует свои маршруты в основной путь через AS4 до анонсирования резервных маршрутов в AS2.

Если путь AS1 — AS4 обрывается, разрывая сессию BGP между AS1 и AS4, автономная система AS4 будет аннулировать свои анонсы маршрутов AS1 в AS3, которая, в свою очередь, будет аннулировать анонсы маршрутов в AS2. В этом случае AS2 будет выбирать резервный путь в AS1. Этот путь AS2 будет анонсировать в AS3, а AS3 будет анонсировать его далее в AS4. Этот процесс является частью преднамеренной политики резервирования каналов и весь трафик в AS1 пойдет по резервному пути.

При восстановлении канала между AS4 и AS1 состояние BGP не вернется к первоначальному. AS4 получит основной путь в AS1 и анонсирует его в AS3, используя «AS4, AS1». Автономная система AS3, используя принятые по умолчанию предпочтения для анонсируемых заказчиками маршрутов по отношению peer-маршрутам, будет по-прежнему выбирать путь «AS2, AS1» и в результате AS3 не будет передавать никаких обновлений в AS2. После восстановления канала между AS4 и AS1 трафик из AS3 и AS2 в AS1 будет передаваться в результате через резервный канал, несмотря на нормальную работу основного пути через AS4.

Предусмотренное состояние пересылки может быть восстановлено AS1 путем преднамеренного разрыва сессии eBGP с AS2, несмотря на наличие трафика. В результате такого разрыва будет восстановлено предусмотренная конфигурация BGP.

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

       +----+peer                  peer+----+
       |AS 3|--------------------------|AS 4|
       +----+                          +----+
         |provider               provider|
         |                               |
         |                       customer|
         |customer                       |
       +----+                          +----+
       |AS 2|                          |AS 5|
       +----+                          +----+
         |provider               provider|
         |                               |
         |                               |
         |customer               customer|
         +-----------------+  +----------+
                           |  |
    backup (192.0.2.0/25)  |  |primary service (192.0.2.0/25)
   primary (192.0.2.128/25)|  |backup service (192.0.2.128/25)
                          +----+
                          |AS 1|
                          +----+

Рисунок 2

В преднамеренной конфигурации весь входящий трафик для блока адресов 192.0.2.0/25 приходит по каналу из AS5, а трафик для блока 192.0.2.128/25 – из AS2.

В данном случае при разрыве канала между AS3 и AS4 автономная система AS3 будет получать оба маршрута от AS2, а AS4 – от AS5. Поскольку маршруты от заказчиков являются предпочтительными по сравнению с маршрутами от партнеров (peer route), при восстановлении связи между AS3 и AS4 ни AS3, ни AS4 не будут менять свое поведение относительно маршрутов AS1. В данном случае описанным выше способом не удастся восстановить преднамеренное состояние, поскольку здесь нет eBGP-партнера для разрыва сессии, способного восстановить состояние. Это один из примеров BGP Wedgie.

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

4. Multi-Party BGP Wedgies

Описанная выше ситуация может быть усложнена, если количество транзитных upstream-провайдеров для AS составляет 3 или более. Пример такой ситуации показан на рисунке 3.

       +----+ peer              peer +----+
       |AS 3|------------------------|AS 4|
       +----+                        +----+
        ||provider             provider|
        |+----------------+            |
        |                 |            |
        |customer         |customer    |
       +----+peer   peer+----+         |
       |AS 2|-----------|AS 5|         |
       +----+           +----+         |
         |provider  provider|          |
         |                  |          |
         |                  |          |
         |customer  customer|  customer|
         +---------------+  |+---------+
           backup service|  ||primary service
                        +----+
                        |AS 1|
                        +----+

Рисунок 3

В показанном на рисунке примере предусмотренное состояние заключается в том, что AS2 и AS5 являются резервными, а AS4 – основным провайдером для AS1. При разрыве и последующем восстановлении канала между AS1 и AS4 автономная система AS3 будет по-прежнему направлять трафик в AS1 через AS2 или AS5. В такой ситуации однократный разрыв канала между AS2 и AS1 не будет обеспечивать восстановление предусмотренного состояния BGP, поскольку выбранный BGP лучший маршрут в AS1 будет меняться на AS5, а AS2 и AS3 будут узнавать путь в AS1 через AS5.

Предположим, что AS1 получает входящий трафик через резервный канал из AS2. Разрыв этого соединения не будет приводить к восстановлению передачи трафика через основной путь. Вместо этого разрыв лишь приведет к тому, что входящий трафик пойдет через AS5. Для изменения ситуации требуется одновременно разорвать соединения с AS2 и AS5. Это решение может показаться неочевидным, поскольку в любой момент в качестве резервного используется только один канал. Тем не менее требуется разорвать оба сеанса BGP одновременно для того, чтобы восстановить предусмотренное состояние соединений.

5. BGP и детерминированность

Протокол BGP является детерминированным не во всех случаях, следовательно, существуют предусмотренные и непредусмотренные недетерминированные состояния BGP. Например, используемая по умолчанию схема разрыва петель в некоторых реализациях BGP отдает предпочтение наиболее давнему (longest-lived) маршруту. Для получения определенного результата на последнем этапе в таких случаях необходимо использовать оператор сравнения с предсказуемым результатом (например, сравнение идентификаторов в маршрутизаторах). Такой тип недетерминированного поведения называют предусмотренной индетерминированностью3, и результаты с той или иной достоверностью могут быть предсказаны администратором сети.

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

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

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

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

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

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

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

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

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

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

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

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

[RFC1771] Rekhter, Y. and T. Li, «A Border Gateway Protocol 4 (BGP-4)», RFC 1771, March 1995.

7.2. Информационные ссылки

[RFC1997] Chandrasekeran, R., Traina, P., and T. Li, «BGP Communities Attribute», RFC 19976, August 1996.

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

Tim G. Griffin

Computer Laboratory

University of Cambridge

EMail: Timothy.Griffin@cl.cam.ac.uk

Geoff Huston

Asia Pacific Network Information Centre

EMail: gih@apnic.net


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Border Gateway Protocol – протокол граничного шлюза.

2По-русски это лучше всего будет назвать “расколом BGP”. Прим. перев.

3«Intended» non-determinism

4Unintended non-determinism

5Этот документ устарел и заменен RFC 4271Прим. перев.

6RFC 4360, расширяуе возможности использования групп в BGP. Прим. перев.

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

RFC 4234 Augmented BNF for Syntax Specifications: ABNF

Network Working Group                                D. Crocker, Ed.
Request for Comments: 4234               Brandenburg InternetWorking
Obsoletes: 2234                                           P. Overell
Category: Standards Track                                  THUS plc.
                                                        October 2005

Расширенная спецификация синтаксиса Бэкуса-Наура (ABNF)

Augmented BNF for Syntax Specifications: ABNF

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Технические спецификации Internet зачастую требуют использования формального синтаксиса. За долгие годы модифицированная версия формы Бэкуса-Наура (BNF2), названная (ABNF3) приобрела популярность во множестве спецификаций Internet. В данном документе содержится спецификация ABNF. Эта форма сочетает компактность и простоту с достаточно мощными средствами представления. Различия между стандартной формой BNF и ABNF включают правила именования, повторения, варианты, независимость от порядка (order-independence) и диапазоны значений. Данная спецификация также включает дополнительные определения правил и кодирования для основы лексического анализатора типов, используемого в нескольких спецификациях Internet.

1. Введение

В технических спецификациях Internet часто требуется определять формальный синтаксис и можно выбирать ту или иную нотацию, которую авторы считают полезной. За долгие годы модифицированная версия формы Бэкуса-Наура (BNF), названная (ABNF) приобрела популярность во множестве спецификаций Internet. Эта форма сочетает компактность и простоту с достаточно мощными средствами представления. В раннюю эпоху Arpanet каждая спецификация использовала свое определение ABNF. К таким определениям относится спецификация электронной почты [RFC733] и более поздний документ [RFC822], которые стали основой для последующих определений ABNF. Текущий документ разделяет эти определения для того, чтобы можно было независимо ссылаться на них. Кроме того в этом документе внесены некоторые изменения и усовершенствования.

Различия между стандартной формой BNF и ABNF включают правила именования, повторения, варианты, независимость от порядка (order-independence) и диапазоны значений. В Приложении B даются определения правил и кодирования для основы лексического анализатора типа, используемого в нескольких спецификациях Internet. Они приводятся для удобства и отделения от метаязыка, определенного в основной части данного документа, и его формального статуса.

Отличия от [RFC2234]:

В параграфе 3.7 фраза : «Т. е., в точности <N> включений <element>» была заменена фразой: «Т. е., в точности <n> включений <element>.»

В некоторые продолжающиеся строки комментариев включены символы «;» в начале строк.

2. Определения правил

2.1 Именование правил

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

Примечание: строчные и прописные буквы в именах правил не различаются.

Имена <rulename>, <Rulename>, <RULENAME> <rUlENamE> указывают на одно правило.

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

2.2. Форма правил

Правила определяются следующим способом:

name = elements crlf

где <name> — имя правила, <elements> — одно или множество имен правила или терминальных спецификаций, а <crlf> — индикатор завершения строки (возврат каретки с последующим переводом строки). Знак равенства отделяет имя от определения правила. Элементы формируют последовательность из одного или множества имен правил и/или определений значений, объединенных с помощью различных операторов, определяемых в данном документе, таких, как повторы или варианты.

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

2.3. Терминальные значения

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

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

b = binary (двоичное)
d = decimal (десятичное)
x = hexadecimal (шестнадцатеричное)

Следовательно, записи:

CR = %d13
CR = %x0D

задают, соответственно, десятичное и шестнадцатеричное представление символа возврата каретки [US-ASCII].

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

CRLF = %d13.10

ABNF разрешает указывать текстовые строки непосредственно, помещая текст в двойные кавычки.

command = "command string"

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

Примечание: регистр букв текстовых строках ABNF не принимается во внимание, а в качестве набора символов используется us-ascii.

Следовательно,

rulename = "abc"

и

rulename = "aBc"

будут соответствовать «abc», «Abc», «aBc», «abC», «ABc», «aBC», «AbC» и «ABC».

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

Например,

rulename = %d97 %d98 %d99

или

rulename = %d97.98.99

будут соответствовать только строкам, содержащим лишь строчные буквы abc.

2.4. Внешнее кодирование

Внешнее представление символов терминальных значений будет меняться в соответствии с условиями среды хранения и передачи. Следовательно, одна и та же грамматическая конструкция ABNF может иметь различное внешнее кодирование (например, одно представление для 7-битовой среды US-ASCII, другое для двоичной среды на базе октетов, третье для 16-битовой среды Unicode). Детали кодирования выходят за пределы ABNF, хотя в Приложении В5 приводятся определения для 7-битовой среды US-ASCII, как наиболее распространенной в Internet.

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

3. Операторы

3.1. Конкатенация: Rule1 Rule2

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

foo = %x61 ; a
bar = %x62 ; b
mumble = foo bar foo

В результате правило <mumble> будет соответствовать строке строчных букв «aba».

Пробельные символы: Конкатенация является основой модели разбора ABNF. Строка непрерывных символов (значений) разбирается согласно правилам, определенным в ABNF. Для спецификаций Internet в силу исторических причин допускается свободное «рассеяние» символов пробела и горизонтальной табуляции вокруг основных конструкций (таких, как специальные разделители или строки-атомы).

Примечание:

В данной спецификации ABNF не предполагается неявно такого «рассеяния» пробельных символов.

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

3.2. Варианты: Rule1 / Rule2

Элементы, разделенные символом дробной черты (/), задают варианты. Следовательно,

foo / bar

будет принимать значение <foo> или <bar>.

Примечание:

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

3.3. Дополнительные варианты: Rule1 =/ Rule2

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

oldrule =/ дополнительные-варианты

Таким образом, набор правил

ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5

представляет собой то же самое, что

ruleset = alt1 / alt2 / alt3 / alt4 / alt5

3.4. Диапазоны вариантов: %c##-##

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

DIGIT = %x30-39

является эквивалентом:

DIGIT = «0» / «1» / «2» / «3» / «4» / «5» / «6» / «7» / «8» / «9»

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

char-line = %x0D.0A %x20-7E %x0D.0A

3.5. Упорядоченная группа: (Rule1 Rule2)

Элементы, заключенные в круглые скобки, трактуются как один элемент со строгим упорядочением. Таким образом,

elem (foo / bar) blat

соответствует (elem foo blat) или (elem bar blat), а

elem foo / bar blat

соответствует (elem foo) или (bar blat).

Примечание:

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

Следовательно, рекомендуется использовать приведенную ниже форму:

(elem foo) / (bar blat)

Это позволит предотвратить ошибочную интерпретацию при невнимательном чтении.

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

3.6. Переменное число повторов: *Rule

Оператор *, предшествующий элементу, указывает на повторение. Полная форма имеет вид:

<a>*<b>element

где <a> и <b> — необязательные десятичные значения, показывающие минимальное (<a>) и максимальное (<b>) число повторов элемента.

По умолчанию для верхнего и нижнего порога используются значения 0 и “бесконечность”, поэтому *<element> позволяет любое число элементов (включая 0), 1*<element> требует по крайней мере один элемент, 3*3<element> разрешает в точности три повтора, а 1*2<element> разрешает 1 или 2 повтора.

3.7. Заданное число повторов: nRule

Правило вида:

<n>element

эквивалентно правилу

<n>*<n>element

Т. е., допускается в точности <n> включений <element>. Таким образом 2DIGIT представляет собой двухзначное число, а 3ALPHA – строку из трех букв.

3.8. Необязательная последовательность: [RULE]

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

[foo bar]

эквивалентно

*1(foo bar).

3.9. Комментарий: ; Comment

Точка с запятой (;) служит началом комментария, который продолжается до конца строки. Это обеспечивает простой способ включения в спецификацию полезных примечаний.

3.10. Старшинство операторов

Описанные выше операторы имеют разный уровень старшинства (порядок применения). Далее операторы перечислены в соответствии со старшинством – сначала указаны операторы с высшим приоритетом, а последним указан оператор с низшим уровнем старшинства:

Строки, имена (Strings, Names formation)

Комментарий (Comment)

Диапазон значений (Value range)

Повтор (Repetition)

Группировка, необязательные последовательности (Grouping, Optional)

Конкатенация (Concatenation)

Варианты (Alternative)

Использование вариантов, произвольно перемешанных с операторами конкатенации, может привести к путанице.

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

4. ABNF-определение для ABNF

Примечания:

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

  2. Синтаксис использует правила, приведенные в Приложении B (Основы ABNF для ABNF).

         rulelist       =  1*( rule / (*c-wsp c-nl) )
         rule           =  rulename defined-as elements c-nl
                                ; продолжение, если следующая строка начинается с пробела
         rulename       =  ALPHA *(ALPHA / DIGIT / "-")
         defined-as     =  *c-wsp ("=" / "=/") *c-wsp
                                ; определение базовых правил и дополнительных вариантов
         elements       =  alternation *c-wsp
         c-wsp          =  WSP / (c-nl WSP)
         c-nl           =  comment / CRLF
                                ; комментарий или новая строка
         comment        =  ";" *(WSP / VCHAR) CRLF
         alternation    =  concatenation *(*c-wsp "/" *c-wsp concatenation)
         concatenation  =  repetition *(1*c-wsp repetition)
         repetition     =  [repeat] element
         repeat         =  1*DIGIT / (*DIGIT "*" *DIGIT)
         element        =  rulename / group / option / char-val / num-val / prose-val
         group          =  "(" *c-wsp alternation *c-wsp ")"
         option         =  "[" *c-wsp alternation *c-wsp "]"
         char-val       =  DQUOTE *(%x20-21 / %x23-7E) DQUOTE
                                ; заключенная в кавычки строка SP и VCHAR без DQUOTE
         num-val        =  "%" (bin-val / dec-val / hex-val)
         bin-val        =  "b" 1*BIT [ 1*("." 1*BIT) / ("-" 1*BIT) ]
                                ; последовательность объединенных битовых 
                                ; значений или один диапазон ONEOF
         dec-val        =  "d" 1*DIGIT [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ]
         hex-val        =  "x" 1*HEXDIG [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ]
         prose-val      =  "<" *(%x20-3D / %x3F-7E) ">"
                                ; заключенная в угловые скобки последовательность SP и VCHAR
                                ; за исключением правых угловых скобок будет использоваться
                                ; как последний шанс

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

Искренне надеемся, что вопросы безопасности не имеют отношения к этому документу.

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

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

[US-ASCII] American National Standards Institute, «Coded Character Set — 7-bit American Standard Code for Information Interchange», ANSI X3.4, 1986.

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

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

[RFC733] Crocker, D., Vittal, J., Pogran, K., and D. Henderson, «Standard for the format of ARPA network text messages», RFC 733, November 1977.

[RFC822] Crocker, D., «Standard for the format of ARPA Internet text messages», STD 11, RFC 8227, August 1982.

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

Изначальная спецификация синтаксиса ABNF была приведена в RFC 733. Ken L. Harrenstien из SRI International выполнил работу по кодированию для расширенного BNF, позволившему сделать представление более компактным и ясным.

Этот недавний проект начался как простая работа по выделению части документа RFC 822, который неоднократно использовался в спецификациях, не связанных с электронной почтой, и являлся описанием расширенного варианта BNF. Вместо простого копирования имеющегося текста в отдельный документ, рабочая группа предпочла внимательное рассмотрение преимуществ и недостатков существующей спецификации и других спецификаций, выпущенных за последние 15 лет. Это сделало проект более амбициозным, нежели предполагалось в начале. Интересно отметить, что полученный результат не слишком значительно отличается от оригинала, хотя некоторые решения (типа удаления списков — list notation) стали сюрпризом.

Эта «отдельная» версия спецификации была частью работы группы DRUMS, значительный вклад в которую внесли Jerome Abela, Harald Alvestrand, Robert Elz, Roger Fajman, Aviva Garrett, Tom Harsch, Dan Kohn, Bill McQuillan, Keith Moore, Chris Newman, Pete Resnick и Henning Schulzrinne.

Julian Reschke заслуживает отдельной благодарности за преобразование чернового варианта в формат XML.

Приложение B. Основы ABNF для ABNF

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

B.1. Базовые правила

Для некоторых базовых правил (таких, как SP, HTAB, CRLF, DIGIT, ALPHA и т. п.) используются заглавные буквы.

         ALPHA          =  %x41-5A / %x61-7A   ; A-Z / a-z
         BIT            =  "0" / "1"
         CHAR           =  %x01-7F
                                ; любой 7-битовый символ US-ASCII, за исключением NUL
         CR             =  %x0D
                                ; возврат каретки

         CRLF           =  CR LF
                                ; стандартная в Internet последовательность для новой строки
         CTL            =  %x00-1F / %x7F
                                ; коды управления
         DIGIT          =  %x30-39
                                ; цифры 0-9
         DQUOTE         =  %x22
                                ; " (двойные кавычки)
         HEXDIG         =  DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
         HTAB           =  %x09
                                ; символ горизонтальной табуляции
         LF             =  %x0A
                                ; перевод строки
         LWSP           =  *(WSP / CRLF WSP)
                                ; linear white space (после новой строки)
         OCTET          =  %x00-FF
                                ; 8 битов данных
         SP             =  %x20
         VCHAR          =  %x21-7E
                                ; видимые (печатные) символы
         WSP            =  SP / HTAB
                                ; пробельные символы

 

B.2. Общие правила кодирования

Для внешнего представления данных используется 7-битовая кодировка US-ASCII с нулевым значением старшего бита. Строки значений используют «сетевой порядок байтов», при котором старший (наиболее значимый байт) указывается слева и передается через сеть первым.

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

Dave Crocker (редактор)

Brandenburg InternetWorking

675 Spruce Dr.

Sunnyvale, CA 94086

US

Phone: +1.408.246.8253

EMail: dcrocker@bbiw.net

Paul Overell

THUS plc.

1/2 Berkeley Square

99 Berkeley Street

Glasgow

G3 7HR

UK

EMail: paul.overell@thus.net


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Этот документ признан устаревшим и земенен RFC 5234. Прим. перев.

2Backus-Naur Form

3Augmented BNF – расширенная форма Бэкуса-Наура. Прим. перев.

4Здесь и далее в тексте документа термин “буква” означает буквы латинского алфавита. Прим. перев.

5В оригинале ошибочно указано Приложение A. Прим. перев.

7Этот документ признан устаревшим и заменен RFC 2822, а тот, в свою очередь, — RFC 5322. Прим. перев.

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

RFC 4213 Basic Transition Mechanisms for IPv6 Hosts and Routers

Network Working Group                                    E. Nordmark
Request for Comments: 4213                    Sun Microsystems, Inc.
Obsoletes: 2893                                          R. Gilligan
Category: Standards Track                             Intransa, Inc.
                                                        October 2005

 

Базовые механизмы перехода для хостов и маршрутизаторов IPv6

Basic Transition Mechanisms for IPv6 Hosts and Routers

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

Этот документ задает механизмы совместимости с IPv4, которые могут быть развернуты на хостах и маршрутизаторах IPv6. Приведены спецификации двух механизмов — двойной стек и настраиваемое туннелирование. Механизм с двойным стеком протоколов предполагает полную реализацию обеих версий протокола IP (IPv4 b IPv6), а механизм настраиваемого туннелирования позволяет передавать пакеты IPv6 через инфраструктуру маршрутизации IPv4 без ее изменения.

Этот документ служит заменой RFC 2893.

1. Введение

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

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

Предлагаемые здесь механизмы включают:

  • Dual IP (двойной стек IP) — метод обеспечения полной поддержки обеих версий протокола IP (IPv4 и IPv6) на хостах и маршрутизаторах.
  • Настраиваемое туннелирование IPv6 через IPv4 — метод организации туннелей «точка-точка» за счет инкапсуляции пакетов IPv6 с заголовками IPv4 для передачи через маршрутную инфраструктуру IPv4.

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

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

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

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

Типы узлов

IPv4-only node (только IPv4)

Хост или маршрутизатор, на котором развернут только протокол IPv4. Такие узлы не понимают протокол IPv6. Установленная база хостов и маршрутизаторов IPv4, существовавших до начала перехода относится к этому типу узлов.

IPv6/IPv4 node (IPv6 и IPv4)

Хосты и маршрутизаторы, поддерживающие протоколы IPv4 b IPv6.

IPv6-only node (только IPv6)

Хост или маршрутизатор, который поддерживает IPv6, но не поддерживает IPv4. Работа узлов этого типа в данном документе не рассматривается.

IPv6 node (узел IPv6)

Любой хост или маршрутизатор, поддерживающий IPv6. Узлы типа IPv6/IPv4 и IPv6-only относятся к узлам IPv6.

IPv4 node (узел IPv4)

Любой хост или маршрутизатор, поддерживающий IPv4. Узлы типа IPv6/IPv4 и IPv4-only относятся к узлам IPv4.

Методы, используемые при переходе

IPv6-over-IPv4 tunneling (туннелирование IPv6 через IPv4)

Метод инкапсуляции пакетов IPv6 в пакеты IPv4, которые могут передаваться через инфраструктуру маршрутизации IPv4.

Configured tunneling (настраиваемое туннелирование)

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

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

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

2. Работа Dual IP

Наиболее простым способом обеспечения совместимости узлов IPv6 с узлами, поддерживающими только IPv4, является полная реализация протокола IPv4. Узлы, полностью поддерживающие оба протокола IPv4 и IPv6, называют узлами IPv6/IPv4. Такие узлы способными передавать и принимать как пакеты IPv4, так и пакеты IPv6. Они могут напрямую взаимодействовать с узлами IPv4, используя пакеты IPv4, и с узлами IPv6, используя пакеты IPv6.

Даже на узлах, способных поддерживать обе версии протокола, тот или иной из двух стеков может быть отключен. Включенный стек имеет выделенный ему адрес IP, но доступность для стеков тех или иных приложений явно не определена. Таким образом, узлы IPv6/IPv4 могут работать в одном из трех режимов:

  • стек IPv4 включен, а IPv6 отключен;
  • стек IPv6 включен, а IPv4 отключен;
  • оба стека протоколов включены.

Узлы IPv6/IPv4 с отключенным стеком IPv6 будут работать, как узлы IPv4-only. Аналогично, узлы IPv6/IPv4 с отключенным стеком IPv4 будут работать, как IPv6-only. Узлы IPv6/IPv4 могут поддерживать конфигурационные параметры для включения и отключения их стеков IPv4 или IPv6.

Метод настраиваемого туннелирования, описанный в разделе 3, может использоваться в дополнение к методу Dual IP.

2.1. Настройка адресов

Поскольку узлы IPv6/IPv4 поддерживают обе версии протокола, для них в конфигурации могут задаваться адреса как IPv4, так и IPv6. Узлы IPv6/IPv4 используют механизмы IPv4 (например, DHCP) для получения адресов IPv4 и механизмы IPv6 (например, автоматическая настройка конфигурации [RFC2462] и/или DHCPv6) для получения адресов IPv6.

2.2. DNS

Система доменных имен (DNS1) используется как в IPv4, так и в IPv6 для отображения имен хостов на адреса IP и обратно. Для адресов IPv6 в документе [RFC3596] определен новый тип записей о ресурсах — AAAA. Поскольку узлы IPv6/IPv4 должны обеспечивать взаимодействие с узлами Ipv4и IPv6, они должны поддерживать библиотеки преобразования, способные работать как с записями IPv4 типа A, так и с записями IPv6 типа AAAA. Отметим, что поиск записей A и AAAA не зависит от протокола, используемого для передачи пакетов DNS (IPv4 или IPv6), поэтому не делается допущения о том, что серверы DNS знают о возможностях поддержки IPv4/IPv6 на запрашивающих узлах.

Вопросы использования IPv6 с DNS и рабочие рекомендации более подробно рассмотрены в других документах (например, [DNSOPV6]).

Библиотеки преобразования DNS (resolver) на узлах IPv6/IPv4 должны поддерживать обработку записей обоих типов AAAA и A. Однако, если запросы возвращают записи AAAA с адресом IPv6 и записи A с адресом IPv4, библиотека преобразования может упорядочивать возвращаемые приложению результаты с учетом версии пакетов IP, используемых в коммуникациях с конкретным узлом — сначала IPv6 или сначала IPv4.

Приложениям следует поддерживать возможность задания желаемых типов записей (IPv4, IPv6 или оба типа [RFC3493]). Это определяет, какие семейства адресов преобразователь будет искать. Если приложение не указывает своего выбора или запрашивает оба типа, для библиотек преобразования недопустима фильтрация записей.

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

Реальные механизмы упорядочения выходят за пределы этого документа. Более подробно выбор адресов рассмотрен в [RFC3484].

3. Механизмы настраиваемого туннелирования

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

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

  • Router-to-Router. Маршрутизаторы IPv6/IPv4, соединенные через инфраструктуру IPv4, могут туннелировать между собой пакеты IPv6. В этом случае туннель представляет собой один сегмент сквозного пути пакетов IPv6.
  • Host-to-Router. Хосты IPv6/IPv4 могут туннелировать пакеты IPv6 на промежуточные маршрутизаторы IPv6/IPv4, доступные через инфраструктуру IPv4. Этот тип туннеля представляет собой первый сегмент сквозного пути доставки пакетов.
  • Host-to-Host. Хосты IPv6/IPv4, связанные через инфраструктуру IPv4 могут туннелировать пакеты IPv6 между собой. В этом случае туннель будет представлять собой весь сквозной путь доставки пакетов.
  • Router-to-Host. Маршрутизаторы IPv6/IPv4 могут туннелировать пакеты IPv6 конечным получателям IPv6/IPv4. В этом случае туннель представляет собой последний сегмент сквозного пути доставки пакетов.

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

Основными элементами туннелирования являются:

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

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

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

Декапсулятор проверяет соответствие пакетов с номером протокола 41 настроенным на нем туннелям и принимает только пакеты, в которых адрес отправителя IPv4 соответствует настроенному на декапсуляторе туннелю. Следовательно, оператор должен гарантировать, что конфигурация адресов IPv4 для туннелей совпадает на стороне инкапсулятора и декапсулятора.

3.1. Инкапсуляция

Инкапсуляция дейтаграмм IPv6 в пакеты IPv4 показана на рисунке.

Инкапсуляция IPv6 в IPv4.

Кроме добавления заголовка IPv4 инкапсулятор решает некоторые более сложные вопросы:

  • определяет необходимость фрагментирования и передачи сообщений ICMPv6 packet too big2 отправителям пакетов;
  • способ передачи сообщений ICMPv4 от маршрутизаторов вдоль туннеля отправителю исходных пакетов, как сообщений ICMPv6.

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

3.2. MTU для туннеля и фрагментация

В примитивном варианте инкапсулятор может рассматривать процесс инкапсуляции, как IPv6, использующий протокол IPv4 в качестве канального уровня с очень большим значением MTU (до 65535-20 байтов; 20 байтов расходуются на инкапсулирующий заголовок IPv4). Инкапсулятору нужно лишь передавать сообщения ICMPv6 packet too big отправителям пакетов, размер которых превышает это значение MTU. Однако такая схема не будет эффективной и не обеспечит взаимодействия по перечисленным ниже трем причинам. Следовательно, недопустимо использовать такую примитивную схему.

  1. Возникает избыточная фрагментация. Фрагментации на уровне IPv4 следует избегать, поскольку могут возникать проблемы с производительностью в результате потери блоков данных, размер которых меньше размера при повторе передачи [KM97].
  2. Любая фрагментация IPv4 внутри туннеля (между инкапсулятором и декапсулятором) будет приводить к сборке фрагментов в конечной точке туннеля. Для туннелей, завершающихся на маршрутизаторах, потребуется дополнительный расход памяти и других ресурсов на сборку фрагментов IPv4 в полный пакет IPv6 до его пересылки.
  3. У инкапсулятора может не быть возможности узнать о способности декапсулятора дефрагментировать такие пакеты IPv4 (см. параграф 3.6) и способности декапсулятора обрабатывать столь большие блоки IPv6 MRU3.

Следовательно, инкапсулятору недопустимо трактовать туннель, как интерфейс с MTU = 64 кбайт, а взамен этого следует использовать статически заданное фиксированное значение MTU или необязательный механизм динамического определения MTU на основе MTU на пути IPv4 к конечной точке туннеля.

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

3.2.1. Статическое значение MTU для туннеля

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

Узел должен быть способен воспринимать фрагментированные пакеты IPv6, размер которых после сборки не превышает 1500 октетов [RFC2460]. Этот документ также включает требования (см. параграф 3.6) для количества сборок фрагментов IPv4 и IPv6 MRU, которые должны поддерживаться всеми декапсуляторами. Это гарантирует взаимодействие при всех фиксированных значениях MTU из диапазона 1280 — 1480 байтов.

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

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

  • когда пакеты IPv4 с номером протокола 41 будут передаваться через среду, которая может иметь меньшее значение path MTU (например, IPv4 VPN4), выбор большого значения может привести к излишней фрагментации IPv4;
  • при использовании туннеля для транспортировки туннелированных пакетов IPv6 (например, мобильный узел с настраиваемым туннелем IPv6-in-IPv4 и туннельный интерфейс Ipv6-in-IPv6), выбор слишком малого значения может приводить к излишней фрагментации IPv6.

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

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

3.2.2. Динамическое значение MTU для туннеля

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

Фрагментация внутри туннеля может быть сведена к минимуму за счет определения инкапсулятором значений IPv4 MTU в туннеле с помощью протокола IPv4 Path MTU Discovery Protocol [RFC1191] и записи результирующего значения MTU для всего пути. Уровень IPv6 в инкапсуляторе может в этом случае рассматривать туннель, как канальный уровень со значением MTU, равным IPv4 MTU для пути за вычетом размера инкапсулирующего заголовка IPv4.

Отметим, что это не предотвращает фрагментации IPv4 в тех случаях, когда значение MTU для пути IPv4 будет давать для IPv6 MTU значение менее 1280 байтов (любой канальный уровень, используемый IPv6, должен иметь значение MTU не менее 1280 байтов [RFC2460]). В этом случае уровень IPv6 «видит» канальный уровень с MTU = 1280, а инкапсулятор использует фрагментацию IPv4 для пересылки 1280-байтовых пакетов IPv6.

Инкапсулятору следует реализовать приведенный ниже алгоритм для решения вопроса об использовании фрагментации IPv4 при пересылке через туннель пакетов IPv6, размер которых превышает MTU для пути через туннель, и возврате отправителю сообщений ICMPv6 о недопустимом размере пакетов [RFC1981]:

if (IPv4 path MTU - 20) < 1280
   if размер пакета > 1280 байтов
      Передать сообщение ICMPv6 packet too big с MTU = 1280 и отбросить пакет else
      Инкапсулировать пакет без установки флага DF в заголовке IPv4. Полученный
      пакет IPv4 может быть фрагментирован уровнем IPv4 на инкапсуляторе или
      другом маршрутизаторе по пути IPv4.
   endif
else
   if размер пакета > (IPv4 path MTU - 20)
      Передать сообщение ICMPv6 «packet too big» с MTU = (IPv4 path MTU — 20) и
      отбросить пакет.
   else
      Инкапсулировать и установить флаг DF в заголовке IPv4.
   endif
endif

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

Отметим, что при использовании динамических значений MTU для туннелей могут возникать «черные дыры» IPv4 MTU, когда сообщения ICMPv4 о недопустимом размере пакетов будут отбрасываться межсетевыми экранами или не будут генерироваться маршрутизаторами [RFC1435, RFC2923].

3.3. Hop Limit

Туннели IPv6-over-IPv4 моделируются с точки зрения IPv6, как «один интервал». Туннель является «черным ящиком» для пользователей и не детектируется средствами диагностики сетей типа traceroute.

Модель на базе «одного интервала» реализуется реализуется за счет процессов инкапсуляции/декапсуляции, которые устанавливают значение поля IPv6 hop limit, как при пересылке через любой другой канал данных (т. е., они уменьшают значение поля hop limit на 1 при пересылке пакета IPv6). Исходный и конечный узлы не меняют значение этого поля.

Значение TTL в инкапсулирующем заголовке IPv4 выбирается по усмотрению реализации протокола. Предлагаемые в настоящее время значения опубликованы в документе Assigned Numbers [RFC3232][ASSIGNED]. Разработчики могут обеспечивать механизмы, позволяющие администратору задавать значение IPv4 TTL, как IP Tunnel MIB [RFC4087].

3.4. Обработка сообщений ICMPv4 об ошибках

       +--------------+
       |Заголовок IPv4|
       |  dst = узел  |
       | инкапсуляции |
       +--------------+
       |  Заголовок   |
       |    ICMPv4    |
- -    +--------------+
       |Заголовок IPv4|
       |  src = узел  |
Пакет  | инкапсуляции |
       +--------------+   - -
IPv4   |  Заголовок   |
       |     IPv6     |   Исходный пакет 
с      +--------------+   IPv6 - может
       | Транспортный |   использоваться
ошибкой|  заголовок   |   для генерации
       +--------------+   сообщения ICMPv6
       |              |   передаваемого
       ~    Данные    ~   отправителю.
       |              |
- -    +--------------+   - -

 

Сообщение ICMPv4, возвращаемое инкапсулятору

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

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

Сообщения ICMPv4 о недопустимо большом размере пакетов обрабатываются в соответствии с механизмом IPv4 Path MTU Discovery [RFC1191] и полученное в результате значение MTU для пути записывается уровнем IPv4. Это значение MTU для пути используется IPv6 для решения вопроса о генерации сообщений ICMPv6 packet too big, как описано в параграфе 3.2.2.

Обработка других типов сообщений ICMPv4 зависит от доступности информации из инкапсулированного пакета, вызвавшего ошибку.

Многие старые маршрутизаторы IPv4 возвращают лишь 8 байтов данных после заголовка IPv4 в вызвавшем ошибку пакете. Этой информации недостаточно для включения адресных полей заголовка IPv6. Более современные маршрутизаторы IPv4 могут возвращать количество данных после заголовка IPv4, достаточное для включения полного заголовка IPv6 и, возможно, некоторого объема данных (см. [RFC1812]).

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

При получении сообщений ICMPv4, отличных от packet too big, полезно записывать эти события в системный журнал, как ошибки, связанные с туннелем. При достаточно объеме данных узел может передавать сообщения ICMPv6 типа unreachable6 с кодом address unreachable7 отправителю IPv6 (код address unreachable подходит, поскольку с точки зрения IPv6 туннель является каналом, а этот код служит для связанных с каналами ошибок [RFC2463]).

Отметим, что в случаях превышения MTU для пути IPv4, если данных, связанных с сообщением ICMPv4 об ошибке, недостаточно или сообщение ICMPv4 не вызывает генерации сообщения ICMPv6 при достаточном объеме данных, будет отбрасываться не менее двух пакетов (взамен отбрасывания не менее одного для случая одноуровневого определения MTU). Рассмотрим случай, когда хост IPv6 подключен к маршрутизатору IPv4/IPv6, который соединен с сетью, где генерируется сообщение ICMPv4 об избыточном размере пакета. Сначала маршрутизатору нужно определить значение MTU (IPv4) для туннеля, что вызовет потерю по крайней мере одного пакета, а потом хосту нужно узнать значение MTU (IPv6) от маршрутизатора, что приведет к потере еще по крайней мере одного пакета. Тем не менее во всех случаях может теряться более одного пакета, если одновременно приходит множество избыточно больших пакетов.

3.5. Создание заголовка IPv4

При инкапсуляции пакета IPv6 в дейтаграмму IPv4 поля заголовка IPv4 устанавливаются следующим образом:

Version

4

IP Header Length (в 32-битовых словах)

5 (в инкапсулирующем заголовке нет опций IPv4).

Type of Service

0, если явно не задано иное (см. [RFC2983] и параграф 9.1 [RFC3168], где рассматривается использование поля ToS и туннелирование).

Total Length

Размер данных из заголовка IPv6 плюс размер заголовков IPv6 и IPv4 (т. е., размер данных IPv6 + 60 байтов).

Identification

Генерируется, как для прочих пакетов IPv4, передаваемых системой.

Flags

Флаг DF устанавливается в соответствии с параграфом 3.2. При фрагментировании в пакетах, не содержащих последний фрагмент устанавливается флаг MF8.

Fragment Offset

Устанавливается в соответствии с фрагментированием.

Time to Live

Устанавливается реализацией, как описано в параграфе 3.3.

Protocol

41 (номер протокола для IPv6).

Header Checksum

Контрольная сумма заголовка IPv4 [RFC791].

Source Address

Адрес IPv4 для инкапсулятора (адрес, заданный администратором, или адрес выходного интерфейса).

Destination Address

Адрес IPv4 для конечной точки туннеля.

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

3.6. Декапсуляция

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

Декапсулятор должен убедиться в корректности адреса источника туннеля до начала обработки пакета, чтобы предотвратить проблемы, связанные с подменой адресов (см. раздел 4). Такая проверка выполняется также для пакетов, доставленных транспортным протоколам на декапсуляторе. Проверка выполняется путем сравнения адреса отправителя IPv4 с адресом инкапсулятора, заданном на декапсуляторе. Пакеты, для которых адреса не соответствуют, должны отбрасываться; сообщения ICMP при этом генерировать не следует. Однако, если реализация обычно передает сообщения ICMP при получении пакетов неизвестных протоколов, она может передать сообщение (например, ICMPv4 Protocol 41 Unreachable).

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

Независимо от других форм входной фильтрации IPv4, которые администратор может задать, реализация может выполнять фильтрацию входящих пакетов (т. е., проверять, что пакеты, приходят с интерфейса в направлении маршрута пересылки к конечной точке туннеля, подобно проверке RPF9 [RFC3704]). Поскольку такая проверка может создавать проблемы в туннелях, маршрутизируемых по нескольким каналам, рекомендуется по умолчанию отключать эту проверку. Пакеты, не прошедшие проверку, следует отбрасывать; генерировать сообщения ICMP при этом не следует.

Декапсулятор должен быть способен поддерживать на туннельных интерфейсах значение IPv6 MRU не менее 1500 байтов и не менее самого большого из значений MTU (IPv6) на этом декапсуляторе.

Декапсулятор должен быть способен собирать фрагменты IPv4 пакетов размером (после сборки) до 1500 байтов и не менее наибольшего значения MTU (IPv4) для интерфейсов декапсулятора. Значение 1500 байтов обусловлено результатом инкапсуляции с использованием статического MTU (параграф 3.2.1), тогда, как инкапсуляторы с динамическим выбором (параграф 3.2.2) могут создавать пакеты размер которых определяется наибольшим значением MTU на декапсуляторе (отметим, что это значение строго совпадает с MTU интерфейса последнего маршрутизатора IPv4 перед данным декапсулятором, но для большинства каналов значения MTU одинаковы для всех соседей).

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

+-------------+
|  Заголовок  |
|    IPv4     |
+-------------+                 +-------------+
|  Заголовок  |                 |  Заголовок  |
|    IPv6     |                 |    IPv6     |
+-------------+                 +-------------+
|  Заголовок  |                 |  Заголовок  |
|транспортного|      ===>       |транспортного|
|   уровня    |                 |   уровня    |
+-------------+                 +-------------+
|             |                 |             |
~   Данные    ~                 ~   Данные    ~
|             |                 |             |
+-------------+                 +-------------+

 

Декапсуляция IPv6 из IPv4

Декапсуляция показана на рисунке справа.

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

При декапсуляции пакета заголовок IPv6 не меняется (см. [RFC2983] и параграф 9.1 [RFC3168] в части поля ToS и туннелирования). Если пакет будет пересылаться дальше, значение hop limit уменьшается на 1.

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

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

  • все групповые адреса (FF00::/8);
  • все loopback-адреса (::1);
  • все совместимые с IPv4 адреса IPv6 [RFC3513] (::/96), исключая незаданный адрес для детектирования дубликатов10 (::/128);
  • все отображаемые на IPv4 адреса IPv6 (::ffff:0:0/96).

В дополнение к этому на узле следует настроить входную фильтрацию [RFC2827][RFC3704] по адресам отправителей IPv6, подобным адресам любого из интерфейсов узла. Например,

  1. если туннель направлен в Internet, узел следует настроить на проверку того, что его префиксы не используются в адресах отправителей;
  2. если туннель направлен в периферийную сеть, на узле следует настроить проверку того, что адреса отправителей относятся к данной периферийной сети.

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

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

3.7. Адреса Link-Local

Настраиваемые туннели имеют интерфейсы IPv6 (через «канальный уровень» IPv4) и поэтому должны иметь адреса link-local. Эти адреса используются, например, протоколами маршрутизации, работающими через туннели.

Идентификатор интерфейса [RFC3513] в таких случаях может быть основан на 32-битовом адресе IPv4 соответствующего интерфейса или сформирован иным способом, обеспечивающим разумную вероятность уникальности идентификаторов на разных концах туннеля.

Отметим, что может оказаться желательным формирование адреса link-local так, чтобы минимизировать вероятность и влияние смены этого адреса при изменении топологии или замене оборудования.

Если для формирования адреса IPv6 link-local используется адрес IPv4, идентификатором интерфейса будет адрес IPv4, дополненный слева нулями (prepend). Отметим, что бит Universal/Local имеет значение 0, показывающее, что идентификатор интерфейса не является уникальным в глобальном масштабе. Адрес link-local формируется путем добавления идентификатора интерфейса в конец адресного префикса FE80::/64.

+-------+-------+-------+-------+-------+-------+------+------+
|  FE      80      00      00      00      00      00     00  |
+-------+-------+-------+-------+-------+-------+------+------+
|  00      00      00      00   |         Адрес IPv4          |
+-------+-------+-------+-------+-------+-------+------+------+

 

Когда хост имеет более одного адреса IPv4 на рассматриваемом физическом интерфейсе, выбор одного из этих адресов IPv4 для формирования адреса link-local осуществляется администратором или разработчиком.

3.8. Обнаружение соседей через туннели

Реализации с настраиваемыми туннелями должны по крайней мере воспринимать (и отвечать на них) пакеты зондирования, используемые для определения недоступности соседа (NUD11) [RFC2461]. Реализациям следует также передавать тестовые пакеты NUD для обнаружения отказов в сконфигурированных туннелях, чтобы можно было перейти на использование другого пути к адресату. Отметим, что механизм Neighbor Discovery позволяет отказаться от передачи пакетов NUD на каналах между маршрутизаторами, если протокол маршрутизации отслеживает доступность в обоих направлениях.

Предполагается, что настраиваемые туннели не имеют адресов link-layer для обнаружения соседей даже при наличии адреса link-layer (IPv4). Это означает, что:

  • отправителям пакетов Neighbor Discovery не следует включать опцию Source Link Layer Address или Target Link Layer Address на туннельном канале;
  • получатель должен в любом случае обрабатывать пакет Neighbor Discovery, отбрасывая без уведомления опции Source Link Layer Address и Target Link Layer Address, полученные в туннельном канале.

Отказ от использования опций адресов link-layer согласуется с практикой использования механизма Neighbor Discovery на других каналах «точка-точка».

4. Угрозы, связанные с подменой адресов отправителей

Приведенная выше спецификация включает правила проверки адресов отправителя для туннелей (в частности входная фильтрация [RFC2827][RFC3704]), выполняемой в общем случае до декапсуляции пакетов. При использовании туннелей IP-in-IP (независимо от версии IP) важно, чтобы это не использовалось для обхода любых входных фильтров, применяемых для пакетов, не относящихся к туннелям. Таким образом, приведенные в этом документе правила построены таким образом, чтобы использование входной фильтрации для IPv4 и IPv6 не давало простого пути обхода фильтров.

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

  • внешний адрес отправителя IPv4 — реальный адрес IPv4 атакующего;
  • внешний адрес получателя IPv4 — адрес IPv4 декапсулятора;
  • внутренний адрес отправителя IPv6 — Alice (декапсулятор или узел вблизи его);
  • внутренний адрес получателя IPv6 — Bob.

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

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

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

Базовые вопросы безопасности при использовании протокола IPv6 рассмотрены в работе [V6SEC].

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

Некоторые механизмы (например, Neighbor Discovery) опираются на значение Hop Count = 255 и/или адреса link-local, как некую гарантию происхождения пакета на другой стороне канала в полудоверенной среде. Туннели более уязвимы к нарушению таких допущений, нежели физические каналы, поскольку атакующий из любой точки Internet может отправлять пакеты IPv6-in-IPv4 декапсулятору туннеля, что приведет к попаданию подставных инкапсулированных пакетов IPv6 на интерфейс настраиваемого туннеля, если проверки при декапсуляции не способны обнаруживать такие подставные пакеты.

По этой причине в данном документе указывается, что декапсуляторы выполняют перечисленные ниже проверки (см. также параграф 3.6) для снижения уровня угроз:

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

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

Если остаточные угрозы после проверки адресов отправителей в туннеле представляются значимыми, следует использовать туннелирование с аутентификацией, например, IPsec [RFC2401] (предпочтительно) или GRE12 с заранее созданным секретным ключом [RFC2890]. Поскольку настраиваемые туннели организуются в той или иной степени вручную, организация ключей не должна создать существенных проблем. Организация защищенных IPsec туннелей IPv6-in-IPv4 описана в отдельном документе [V64IPSEC].

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

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

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

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

Авторы благодарят членов рабочих групп IPv6, ngtrans13 и v6ops за их предложения и рецензирование этого документа. Особо следует отметить (в алфавитном порядке) Jim Bound, Ross Callon, Tim Chown, Alex Conta, Bob Hinden, Bill Manning, John Moy, Mohan Parthasarathy, Chirayu Patel, Pekka Savola и Fred Templin за множество полезных предложений. Pekka Savola помог при редактировании окончательной версии спецификации.

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

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

[RFC791] Postel, J., «Internet Protocol», STD 5, RFC 791, September 1981.

[RFC1191] Mogul, J. and S. Deering, «Path MTU discovery», RFC 1191, November 1990.

[RFC1981] McCann, J., Deering, S., and J. Mogul, «Path MTU Discovery for IP version 6», RFC 1981, August 1996.

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

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

[RFC2463] Conta, A. and S. Deering, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 2463, December 1998.

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

[ASSIGNED] IANA, «Assigned numbers online database», http://www.iana.org/numbers.html

[DNSOPV6] Durand, A., Ihren, J., and Savola P., «Operational Considerations and Issues with IPv6 DNS», Work in Progress15, October 2004.

[KM97] Kent, C., and J. Mogul, «Fragmentation Considered Harmful». In Proc. SIGCOMM ’87 Workshop on Frontiers in Computer Communications Technology. August 1987.

[V6SEC] Savola, P., «IPv6 Transition/Co-existence Security Considerations», Work in Progress16, October 2004.

[V64IPSEC] Graveman, R., et al., «Using IPsec to Secure IPv6-over-IPv4 Tunnels», Work in Progress17, December 2004.

[RFC1435] Knowles, S., «IESG Advice from Experience with Path MTU Discovery», RFC 1435, March 1993.

[RFC1812] Baker, F., «Requirements for IP Version 4 Routers», RFC 1812, June 1995.

[RFC2401] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 240118, November 1998.

[RFC2461] Narten, T., Nordmark, E., and W. Simpson, «Neighbor Discovery for IP Version 6 (IPv6)», RFC 2461, December 1998.

[RFC2462] Thomson, S. and T. Narten, «IPv6 Stateless Address Autoconfiguration», RFC 2462, December 1998.

[RFC2827] Ferguson, P. and D. Senie, «Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing», BCP 38, RFC 2827, May 2000.

[RFC2890] Dommety, G., «Key and Sequence Number Extensions to GRE», RFC 2890, September 2000.

[RFC2923] Lahey, K., «TCP Problems with Path MTU Discovery», RFC 2923, September 2000.

[RFC2983] Black, D., «Differentiated Services and Tunnels», RFC 2983, October 2000.

[RFC3056] Carpenter, B. and K. Moore, «Connection of IPv6 Domains via IPv4 Clouds», RFC 3056, February 2001.

[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, «The Addition of Explicit Congestion Notification (ECN) to IP», RFC 3168, September 2001.

[RFC3232] Reynolds, J., «Assigned Numbers: RFC 1700 is Replaced by an On-line Database», RFC 3232, January 2002.

[RFC3484] Draves, R., «Default Address Selection for Internet Protocol version 6 (IPv6)», RFC 3484, February 2003.

[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. Stevens, «Basic Socket Interface Extensions for IPv6», RFC 3493, February 2003.

[RFC3513] Hinden, R. and S. Deering, «Internet Protocol Version 6 (IPv6) Addressing Architecture», RFC 3513, April 2003.

[RFC3596] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, «DNS Extensions to Support IP Version 6», RFC 3596, October 2003.

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

[RFC4087] Thaler, D., «IP Tunnel MIB», RFC 4087, June 2005.

8. Отличия от RFC 2893

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

RFC 2893 описывает механизм автоматического туннелирования. Однако в RFC 3056 [RFC3056] описан механизм более общего назначения, который дает каждому узлу с (глобальным) адресом IPv4 префикс /48 IPv6, которого достаточно для всего сайта.

Ниже перечислены отличия от RFC 2893:

  • удалены ссылки на записи A6 и сохранены ссылки на AAAA;
  • удалено автоматическое туннелирование и совместимые с IPv4 адреса;
  • удален используемый по умолчанию настраиваемый туннель с адресом IPv4 Anycast Address;
  • удален раздел Source Address Selection20, поскольку он был включен в другой документ ([RFC3484]);
  • удалено упоминание 6over4;
  • список литературы разделен на две части (нормативные документы и дополнительная литература);
  • удалены слова «or equal» в выражении «if (IPv4 path MTU — 20) is less than or equal to 1280»21;
  • Удален текст: «However, IPv6 may be used in some environments where interoperability with IPv4 is not required. IPv6 nodes that are designed to be used in such environments need not use or even implement these mechanisms.»22
  • Раздельно описаны классы со статическим (Static MTU) и динамическим (Dynamic MTU) определением MTU; указано, что динамический механизм является необязательным, но при его реализации следует выполнять правила параграфа 3.2.2;
  • Указано, что по умолчанию статическое значение MTU лежит в диапазоне от 1280 до 1480 байтов и может быть настраиваемым; рассмотрено использование больших значений для Static MTU;
  • заданы минимальные правила сборки фрагментом IPv4 и IPv6 MRU для повышения уровня взаимодействия и минимизации «черных дыр»;
  • явно указаны ссылки на [RFC2983] и [RFC3168] в описании поля ToS;
  • исправлена ссылка на реестр Assigned Numbers (online-версия) с указанием RFC23 Assigned Numbers is obsolete;
  • исправлен текст о входной фильтрации; в частности, указано, что фильтрация применима к пакетам, доставленным транспортным протоколам на декапсуляторе, а также к пересылаемым декапсулятором пакетам, а также указано, как проверка на декапсуляторах помогает при наличии входной фильтрации IPv4 и IPv6;
  • удалено одностороннее туннелирование; предполагается, что все туннели являются двухсторонними и организуются между адресами конечных точек (а не узлами);
  • удалены рекомендации по анонсированию адресов в DNS, поскольку они не относятся к данной спецификации, и даны ссылки на соответствующие документы;
  • удалено требование следует (SHOULD) для формирования адресов link-local на базе адресов IPv4;
  • добавлено требование следует для реализации опции установки адреса отправителя в туннеле, а также обсуждена польза этой опции;
  • добавлено более строгое описание проверки адреса отправителя — оба адреса (IPv4 и IPv6) должны проверяться, а фильтрация типа RPF является опциональной;
  • переписан раздел «Вопросы безопасности» с уточнением угроз при туннелировании;
  • добавлено примечание об использовании TTL=255 при инкапсуляции;
  • в параграфе 3.2 расширено обсуждение использования «бесконечного» значения IPv6 MTU, явно ведущего к проблемам взаимодействия;
  • добавлено явное требование при использовании обоих методов определения MTU выбирать один метод для каждого канала независимо;
  • отмечено, что обработка сообщений ICMPv4 об ошибках применима только при динамическом определении MTU;
  • разъяснено описание фильтрации записей DNS; API следует использовать и при его отсутствии фильтрация недопустима; упорядочение выходит за пределы спецификации и описано в RFC3484;
  • отмечено, что адрес получателя IPv4 может быть групповым;
  • рекомендовано обеспечивать опцию включения строгой фильтрации на входе для каждого интерфейса;
  • обобщен текст о данных в сообщениях ICMPv4;
  • внесено множество редакционных правок.

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

Erik Nordmark

Sun Microsystems

17 Network Circle

Menlo Park, CA 94025

USA

Phone: +1 650 786 2921

EMail: erik.nordmark@sun.com

Robert E. Gilligan

Intransa, Inc.

2870 Zanker Rd., Suite 100

San Jose, CA 95134 USA

Phone : +1 408 678 8600

Fax : +1 408 678 8800

EMail: bob.gilligan@acm.org


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

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

nmalykh@gmail.com

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Domain Naming System.

2Слишком большой пакет.

3Maximum Receive Unit — максимальный принимаемый блок.

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

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

6Недоступен.

7Адрес недоступен.

8More Fragments — есть еще фрагменты.

9Strict Reverse Path Forwarding — строгая проверка обратного пути пересылки.

10The unspecified address for Duplicate Address Detection.

11Neighbor Unreachability Detection.

12Generic Routing Encapsulation — базовая инкапсуляция маршрутных данных.

13Next Generation Transition — переход к следующему поколению (IP).

15Работа завершена и опубликована в RFC 4472. Прим. перев.

16Работа завершена и опубликована в RFC 4942. Прим. перев.

17Работа завершена и опубликована в RFC 4891. Прим. перев.

18Документ признан устаревшим и заменен RFC 4301. Прим. перев.

20Выбор адреса отправителя.

21< вместо . Прим. перев.

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

23RFC3232. Прим. перев.

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

RFC 4197 Requirements for Edge-to-Edge Emulation of Time Division Multiplexed (TDM) Circuits over Packet Switching Networks

Network Working Group                                      M. Riegel
Request for Comments: 4197                                Siemens AG
Category: Informational                                 October 2005

Требования к сквозной эмуляции каналов TDM через сети пакетной коммутации

Requirements for Edge-to-Edge Emulation of

Time Division Multiplexed (TDM) Circuits over Packet Switching Networks

PDF

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

Документ содержит информацию, адресованную сообществу Internet. В документе не содержится каких-либо стандартов Internet. Допускается свободное распространение документа.

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

Copyright (C) The Internet Society (2005).

Аннотация

В данном документе определены специфические требования к сквозной эмуляции устройств, передающих цифровые сигналы TDM1 (как PDH2, так и SONET/SDH3) в сетях пакетной коммутации. Документ использует архитектуру общего назначения PWE34. Описанные требования основаны на базовых требованиях PWE3 (там, где эти требования применимы), к которым добавлены специфические требования для устройств TDM.

Оглавление

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

1. Введение

В этом документе рассматриваются требования для сквозной эмуляции каналов передачи цифровых сигналов TDM (PDH и SONET/SDH) через сети с коммутацией пакетов (PSN5). Эти требования основаны на архитектуре эмуляции прямых соединений PWE3, описанной в [RFC3985]. Документ опирается на применимые требования [RFC3916] и дополняет этот документ определением специфических требований для устройств TDM. Термин TDM в данном документе используется для обозначения синхронных битовых потоков PDH и SONET/SDH.

1.1. Устройства TDM в иерархии PDH

Битовые потоки, традиционно используемые в различных регионах, описаны в спецификации [G.702]. Например, в Северной Америке используются битовые потоки T1 (1,544 Мбит/с) и T3 (44,736 Мбит/с), а в Европе — E1 (2,048 Мбит/с) и E3 (34,368 Мбит/с). Хотя TDM можно использовать для передачи неструктурированных битовых потоков со скоростями, определенными в [G.702], существуют стандартизованные методы передачи битовых потоков в форме блоков, называемых кадрами (frame), каждый из которых содержит одинаковое число битов.

В связи с частотой выборки для голосового (телефонного) трафика скорости битовых потоков всегда кратны 8000, следовательно кадр T1 содержит 193 бита, а кадр E1 — 256 битов. Число битов в кадре называют размером кадра.

Кадрирование осуществляется путем периодической вставки в битовый поток определенных последовательностей битов, позволяющих определять границы кадров (например, 1 бит кадрирования на кадр T1 или 8-битовая последовательность на каждый кадр E1). Детали генерации и использования битов кадрирования рассмотрены в документах [G.704], [G.706] и [G.751]. В бесструктурных потоках TDM все биты могут использоваться для передачи информации.

Кадрированные потоки TDM зачастую используются для мультиплексирования множества каналов (например, телефонных соединений, каждое из которых включает 8000 восьмибитовых выборок в секунду) в последовательность временных интервалов6, занимающих одинаковые позиции в каждом кадре. Такое мультиплексирование называют «channelized TDM7» и оно вносит в поток дополнительную структуру.

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

1.1.1. Структура и транспортные режимы TDM

Unstructured TDM – бесструктурный поток TDM

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

Structured TDM – структурированный поток TDM

Поток TDM с одним или несколькими уровнями структурирования, включая кадрирование, канализацию и мультикадры (в соответствии со спецификациями [G.704], [G.751] и [T1.107]).

Structure-Agnostic Transport – структурно-независимый транспорт

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

Structure-Aware Transport – структурированный транспорт

Транспорт TDM является структурированным, когда принимается во внимание по крайней мере один из уровней структуры. При структурированном транспорте не существует гарантии передачи всех битов потока TDM через сеть PSN (в частности, биты синхронизации могут вырезаться из потока на входе в сеть пакетной коммутации и обычно восстанавливаются на выходе) и соблюдения порядка следования битов в потоке (порядок битов обычно восстанавливается на выходе из PSN), однако известно по крайней мере одно исключение из этого правила – потеря мультикадровой синхронизации между данными TDM и битами CAS, создаваемой цифровыми кросс-коннекторами, используемыми как NSP9; этот случай описан в документе [TR-NWT-170]).

1.2. Устройства SONET/SDH

Термин SONET обозначает используемые в Северной Америке синхронные оптические сети, описанные в документе [T1.105]. Работа таких сетей основана на концепции передачи блоков Nx783 байтов10 с периодом 125 мксек. Такие блоки информации называют STS-1 SPE11 и они могут объединяться для повышения эффективности использования полосы (например, STS-N) или делиться на более мелкие блоки (Virtual Tributary12). Объединенные блоки13 могут использоваться для передачи любого трафика от пакетов IP до ячеек ATM и сигналов DVS14. Отдельные блоки STS-1 SPE зачастую используются для передачи индивидуальных каналов TDM (DS3 или E3). Когда 783-байтовые контейнеры делятся на части, они обычно используются для передачи отдельных потоков TDM T1 или E1.

SDH представляет собой международный аналог и расширение SONET, описанное в [G.707].

Как SONET, так и SDH добавляют достаточно большой объем служебной информации (transport overhead), используемой для мониторинга, детектирования отказов и других функций обслуживания на различных типах оптических и электрических соединений. В дополнение к этому информационные блоки (payload area) также включают служебную информацию для сквозного мониторинга, детектирования отказов и обслуживания. Если блоки данных делятся на узкополосные каналы (например, T1/E1), добавляется служебная информация для сквозного мониторинга отдельных каналов T1/E1.

В этом документе обсуждаются требования для случаев эмуляции сервиса SONET/SDH. Такие службы включают сквозную эмуляцию информационных блоков SONET (STS-1 SPE), эмуляцию объединенных блоков (STS-N SPE), а также эмуляцию дробных каналов (sub-STS-1). Дробные каналы, равно как их аналоги для случая SDH, обозначаются термином VT15).

2. Предпосылки

В [RFC3916] заданы общие требования к сквозной эмуляции устройств различных типов. Однако эти требования, равно как и требования [RFC3985], не учитывают специфику устройств TDM.

Необходимость создания документа, дополняющего требования [RFC3916] в части сквозной эмуляции устройств TDM, обусловлены множеством причин:

  • Специфика устройств TDM; в частности:

  • необходимость согласования синхронизации входящих и исходящих сигналов для каждого направления PW16;

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

  • Специфика приложений, использующих устройства TDM (например, телефонная связь):

  • необходимость принятия мер по минимизации сквозной задержки;

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

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

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

  • чувствительность к возникающим при передаче ошибкам.

  • Специфика ожиданий потребителя относительно сквозных характеристик сервиса, который основан на эмуляции устройств TDM. Например, опыт реализации таких соединений через сети SONET/SDH показывает:

  • необходимость изоляции проблем, вносимых PSN, от проблем, возникающих за пределами пакетных сетей;

  • чувствительность к ошибочным соединениям;

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

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

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

Термины, определенные в параграфе 1.4 документа [RFC3985], используются в соответствии с этими определениями. Однако ряд терминов используется в специфической для TDM трактовке.

Сети TDM используют сигнализацию CAS18 или CCS19 для управления и анонсирования состояния телефонных приложений, передачи сигналов таким приложениям и маршрутизации (адресации) соединений. Такие сигналы должны гарантированно передаваться через сети PSN для обеспечения корректной работы оконечного телефонного оборудования.

CAS (Channel-Associated Signaling)

Сигналы CAS передаются в том же кадре T1 или E1, что и телефонные разговоры, но используют отдельную от голосового канала полосу. Поскольку сигнализация CAS может передаваться при более низких скоростях, нежели TDM-трафик во временных интервалах, не возникает необходимости обновления всех битов CAS в каждом кадре TDM. Следовательно, цикл прохода всех сигнальных битов CAS завершается только после передачи некоторого количества кадров TDM – это количество определяет новую структуру, называемую мультикадром (multiframe) или суперкадром (superframe). Общеприняты мультикадры размером в 12, 16 или 24 кадра, продолжительность которых составляет 1,5, 2 и 3 мсек., соответственно.

CCS (Common Channel Signaling)

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

CCS обычно работает на основе HDLC с использованием кодов бездействия (idle code) или сообщений keep-alive, передаваемых в отсутствие сигнальных событий (например, снятия трубки). Примерами основанных на HDLC систем CCS являются SS7 [Q.700] и ISDN PRI [Q.931].

Примечание: Для сетей TDM будут использоваться термины «jitter» и «wander» в соответствии с определениями [G.810] для описания кратковременных и долгосрочных вариаций значимых цифровых сигналов. Для сетей PSN эти характеристики будем обозначать термином PDV20 (см. [RFC3393]).

4. Эталонные модели

4.1. Базовые модели PWE3

Базовые модели определены в [RFC3985]

  • 4.1 (Network Reference Model – сетевая эталонная модель),

  • 4.2 (PWE3 Pre-processing – предварительная обработка PWE3),

  • 4.3 (Maintenance Reference Model – эталонная модель обслуживания),

  • 4.4 (Protocol Stack Reference Model – эталонная модель стека протоколов),

  • 4.5 (Pre-processing Extension to Protocol Stack Reference Model — расширение предварительной обработки для эталонной модели стека протоколов).

Эти модели полностью применимы к настоящему документу без каких-либо изменений.

Все рассматриваемые в этом документе типы сервиса являются специальными случаями битовых потоков (Bit-stream) и структурированных битовых потоков (Structured bit-stream), определенными в параграфе 3.3 документа [RFC3985].

4.2. Восстановление синхронизации

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

4.3. Эталонная модель сетевой синхронизации

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

          +---------------+               +---------------+
          |      PE1      |               |      PE2      |
       K  |   +--+        |               |        +--+   |  G
       |  |   | J|        |               |        | H|   |  |
       v  |   v  |        |               |        v  |   |  v
   +---+  | +-+  +-+  +-+ |  +--+   +--+  | +-+  +-+  +-+ |  +---+
   |   |  | |P|  |D|  |P| |  |  |   |  |  | |P|  |E|  |P| |  |   |
   |   |<===|h|<:|e|<:|h|<:::|  |<::|  |<:::|h|<:|n|<=|h|<===|   |
   |   |  | |y|  |c|  |y| |  |  |   |  |  | |y|  |c|  |y| |  |   |
   | C |  | +-+  +-+  +-+ |  |  |   |  |  | +-+  +-+  +-+ |  | C |
   | E |  |               |  |S1|   |S2|  |               |  | E |
   | 1 |  | +-+  +-+  +-+ |  |  |   |  |  | +-+  +-+  +-+ |  | 2 |
   |   |  | |P|  |E|  |P| |  |  |   |  |  | |P|  |D|  |P| |  |   |
   |   |===>|h|=>|n|:>|h|:::>|  |::>|  |:::>|h|:>|e|=>|h|===>|   |
   |   |  | |y|  |c|  |y| |  |  |   |  |  | |y|  |c|  |y| |  |   |
   +---+  | +-+  +-+  +-+ |  +--+   +--+  | +-+  +-+  +-+ |  +---+
    ^  ^  |   |  ^        |               |        |  ^   |  ^  ^
    |  |  |   |B |        |<------+------>|        |  |   |  |  |
    |  A  |   +--+        |       |       |        +--+-E |  F  |
    |     +---------------+      +-+      +---------------+     |
    |             ^              |I|               ^            |
    |             |              +-+               |            |
    |             C                                D            |
    +-----------------------------L-----------------------------+

Рисунок 1: Эталонная модель сетевой синхронизации

CE1, CE2

Пользовательские оконечные устрой­ства, завершающие эмулируемые соединения TDM.

PE1, PE2

Краевые устройства сетевых операторов, адаптирующие сервис для PW.

S1, S2

Магистральные маршрутизаторы операторов.

Phy

Физический интерфейс, завершающий соединение TDM.

Enc

Интерфейс PW на границе PSN, где происходит инкапсуляция.

Dec

Связанный с CE интерфейс PW, где происходит декапсуляция. Этот интерфейс содержит компенсацион-ный буфер (jitter buffer) ограниченного размера.

«==>»

Устройства с TDM-подключением.

«::>»

PW, обеспечивающие сквозную эмуляцию соединений TDM.

Символы A — L обозначают варианты синхронизации:

A

Синхронизация, используемая CE1 для передачи от устройства с TDM-подключением в направлении CE1.

B

Синхронизация, восстановленная PE1 из входящего потока TDM. A и B имеют одинаковую частоту.

G

Синхронизация, используемая CE2 для передачи от устройства с TDM-подключением в направлении CE2.

H

Синхронизация, восстановленная PE2 из входящего потока TDM. G и H имеют одинаковую частоту.

C, D

Локальные генераторы синхросигналов, доступные PE1 и PE2, соответственно.

E

Синхронизация, используемая PE2 для передачи сигналов от устройства с TDM-подключением устройству CE2 (восстановленная синхронизация).

F

Синхронизация, восстановленная CE2 из входящего потока TDM (E и F имеют одинаковую частоту).

I

Если этот сигнал существует, он является общим источником синхронизации для PE1 и PE2.

J

Синхронизация, используемая PE1 для передачи от устройства с TDM-подключением устройству CE1 (восстановленная синхронизация).

K

Синхронизация, восстановленная CE1 из входящего потока TDM (J и K имеют одинаковую частоту).

L

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

Требование сквозной эмуляции соединений TDM заключается в том, чтобы сигналы B и E, а также H и J имели одинаковые частоты. Подходящий метод синхронизации будет определяться схемой сетевой синхронизации.

Ниже рассмотрены варианты сценариев синхронизации.

4.3.1. Сценарии с сетью синхронизации

                    +-----+                 +-----+
   +-----+    |     |- - -|=================|- - -|     |    +-----+
   | /-- |<---------|............PW1..............|<---------| <-\ |
   || CE |    |     | PE1 |                 | PE2 |     |    |CE2 ||
   | \-> |--------->|............PW2..............|--------->| --/ |
   +-----+    |     |- - -|=================|- - -|     |    +-----+
                    +-----+                 +-----+
                       ^                       ^
                       |C                      |D
                       +-----------+-----------+
                                   |
                                  +-+
                                  |I|
                                  +-+

 

Рисунок 2: Сценарий синхронизации PE

В зависимости от того, какая часть сети имеет общий источник синхронизации, возможны два варианта сценария:

  • Сценарий синхронизации PE:

Рисунок 2 показывает адап­тированный вариант эталонной сетевой модели и представляет сценарий PE-синхронизации.

Общий источник сигналов I доступен всем устройствам PE, а локальные источники C и D привязаны к I:

  • Сигналы E и J совпадают с D и C, соответственно.

  • Сигналы A и G совпадают с сигналами K и F, соответственно (т. е., устройства CE1 и CE2 используют шлейфовую синхронизацию).

  •                   +-----+                 +-----+
     +-----+    |     |- - -|=================|- - -|     |    +-----+
     |     |<---------|............PW1..............|<---------|     |
     | CE1 |    |     | PE1 |                 | PE2 |     |    | CE2 |
     |     |--------->|............PW2..............|--------->|     |
     +-----+    |     |- - -|=================|- - -|     |    +-----+
       ^              +-----+                 +-----+              ^
       |A                                                         G|
       +----------------------------+------------------------------+
                                    |
                                   +-+
                                   |L|
                                   +-+
    

    Рисунок 3: Сценарий синхронизации CEСценарий синхронизации CE:

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

Общим опорным источником является сигнал L, доступный всем устройствам CE, а локальные источники A и G привязаны к L:

  • Сигналы E и J совпадают с G и A, соответственно (т. е., PE1 и PE2 используют шлейфовую синхронизацию).

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

4.3.2. Сценарий с синхронизацией через сеть PSN

В этом случае каждое устройство CE использует свой источник для синхронизации передачи — сигналы этого источника должны передаваться через сеть PSN и восстанавливаться соответствующим удаленным устройством PE. При восстановлении может использоваться общий для PE источник сигналов I.

На рисунке 4 показан сценарий синхронизации через сеть.

Общий источник синхросигналов I доступен всем устройствам PE, а локальные генераторы C и D привязаны к I:

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

  • Сигналы E и J генерируются в соответствии с общим источником синхронизации, доступным всем устройствам PE.

                                                              |G
                    +-----+                 +-----+           v
   +-----+    |     |- - -|=================|- - -|     |    +-----+
   |     |<---------|............PW1..............|<---------|     |
   | CE1 |    |     | PE1 |                 | PE2 |     |    | CE2 |
   |     |--------->|............PW2..............|--------->|     |
   +-----+    |     |- - -|=================|- - -|     |    +-----+
        ^           +-----+<-------+------->+-----+
        |A                         |
                                  +-+
                                  |I|
                                  +-+

Рисунок 4: Сценарий с синхронизацией через сеть PSN

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

В этом случае синхросигналы (различие между опорным сигналом I и входящей синхронизацией A) должны явно передаваться от устройства PE на входе21 устройству PE на выходе22.

4.3.3. Сценарий адаптивной синхронизации

                     |J                                       |G
                     v                                        |
                    +-----+                 +-----+           v
   +-----+    |     |- - -|=================|- - -|     |    +-----+
   |     |<---------|............PW1..............|<---------|     |
   | CE1 |    |     | PE1 |                 | PE2 |     |    | CE2 |
   |     |--------->|............PW2..............|--------->|     |
   +-----+    |     |- - -|=================|- - -|     |    +-----+
        ^           +-----+                 +-----+
        |                                        ^
       A|                                       E|

 

Рисунок 5: Сценарий адаптивной синхронизации

Сценарий адаптивной синхронизации характеризуется 2 особенностями:

  • отсутствует общий источник сигна­лов I, доступный устройствам PE1 и PE2.

  • Отсутствует общий источник сигна­лов L, доступный устройствам CE1 и CE2.

На рисунке 5 показан сценарий адап­тивной синхронизации.

Синхронизация сигналов A и E в этом сценарии сложнее, нежели в других сценариях синхронизации.

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

В этом сценарии синхросигналы могут явно передаваться PE на входе устройству PE на выходе (например, с помощью RTP).

5. Эмулируемые службы

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

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

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

5.1. Структурно-независимая передача сигналов за пределами PDH

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

  • E1 в соответствии с [G.704];

  • T1 (DS1) в соответствии с [G.704];

  • E3 в соответствии с [G.751];

  • T3 (DS3) в соответствии с [T1.107].

5.2. Передача структурированных потоков за пределами PDH

Структурированный транспорт рассматривается для сигналов:

  • E1/T1 с одним уровнем структурирования, вносимым кадрами [G.704];

  • NxDS0 с использованием CAS или без CAS.

5.3. Структурированный транспорт для устройств SONET/SDH

Структурированный транспорт рассматривается для следующих каналов SONET/SDH:

  • SONET STS-1 SPE/SDH VC-3;

  • SONET STS-Nc SPE (N = 3, 12, 48, 192)/SDH VC-4, VC-4-4c, VC-4-16c, VC-4-64c;

  • SONET VT-N (N = 1.5, 2, 3, 6)/SDH VC-11, VC-12, VC-2;

  • SONET NxVT-N / SDH NxVC-11/VC-12/VC-2/VC-3.

Отметим, что не существует независимого от структуры транспорта для SONET/SDH. Для этого типа структура должна приниматься во внимание всегда.

6. Базовые требования

6.1. Общие требования к PW

Уровни инкапсуляции и информации должны удовлетворять общим требованиям к PW, определенным в [RFC3916].

  1. Доставка необходимой информации из заголовков:

  1. для структурно-независимого транспорта эти функции могут обеспечиваться информационным уровнем;

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

  3. структурированный транспорт для устройств SONET/SDH должен сохранять информацию о пути (path overhead) как часть передаваемых данных (payload); соответствующие компоненты транспортной служебной информации (transport overhead) могут передаваться на уровне инкапсуляции.

  1. Поддержка мультиплексирования и демультиплексирования, если таковые поддерживаются эмулируемыми устройствами. Это относится к соединениям NxDS0 (с сигнализацией или без нее) и NxVT-x в одном STS-1 SPE или VC-4:

  1. для таких соединений уровни информации и инкапсуляции должны совместно обеспечивать раздельную трактовку каждого субканала (sub-circuit);

  2. PW следует обеспечивать достаточный объем информации для мультиплексирования и демультиплексирования в NSP; снижение сложности эмуляции PW за счет использования схем NSP для мультиплексирования и демультиплексирования может служить предпочтительным решением.

  1. Посредничество или прозрачная передача служебных сообщений (Maintenance Message) эмулируемых служб в зависимости от используемого сценария.

  2. Рассмотрение вопроса о зависимости объема служебной информации от PSN (см. параграф 7.5).

  3. Детектирование и обработка отказов PW. Список таких отказов приведен в параграфе 7.9.

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

Приведенное ниже требование [RFC3916] неприменимо для эмуляции устройств TDM:

  • поддержка различных размеров PDU.

6.2. Общие требованиями в части передаваемых данных

Структурно-независимый транспорт трактует соединения TDM, как битовые потоки данных, определенные в [RFC3985].

Структурированный транспорт трактует такие соединения, как структурированные битовые потоки, определенные в [RFC3985].

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

Примечание: Уровень инкапсуляции может поддерживать Length-сервис25, но это не является обязательным.

6.3. Вопросы архитектуры

Уровни информации и инкапсуляции следует реализовать на основе единых архитектурных принципов, как описано в главе 3 [RFC1958] и [RFC3985].

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

7. Зависящие от сервиса требования

7.1. Связность

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

  2. Уровню инкапсуляции следует сохранять независимость от специфических характеристик соединения между устройствами AC и PE на разных сторонах PW.

7.2. Синхронизация

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

  1. согласовать входящую и исходящую синхронизацию, независимо от используемого сценария сетевой синхронизации;

  2. сохранять флуктуации (jitter и wander) исходящей синхронизации в определяемых типом сервиса пределах, заданных соответствующими нормативными документами.

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

7.3. Устойчивость к ошибкам

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

7.3.1. Потеря пакетов

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

Для минимизации воздействия потери пакетов на принимающее устройство уровню инкапсуляции следует:

  1. Разрешить принимающему устройству PE независимую интерпретацию данных TDM в каждом пакете (см. [RFC2736]). Это требование может не соблюдаться в тех случаях, когда приемному устройству PE приходиться интерпретировать структуры, размер которых превышает MTU для пути между парой PE.

  2. Разрешить надежное детектирование потери пакетов (см. следующий параграф). В частности, следует разрешить оценку времени доставки следующего пакета и констатацию потери пакета на основе такой оценки.

  3. Минимизировать влияние потери пакетов на восстановление синхронизации в приемном устройстве PE.

  4. Повысить устойчивость TDM-интерфейса CE к потере пакетов путем подстановки устройством PE недостающих данных.

7.3.2. Нарушение порядка доставки

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

  1. должны детектироваться;

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

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

7.4. Сигнализация CE

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

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

Уровню инкапсуляции следует поддерживать сигнальную информацию о состоянии приложений CE для соответствующих устройств, обеспечивая:

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

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

  4. вероятностное восстановление при возможных потерях пакетов в сети PSN;

  5. детерминированное восстановление состояния приложения CE после организации PW и отказа в сети.

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

7.5. Использование полосы PSN

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

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

  2. Незначительная сквозная задержка. Малые значения задержки являются основным требованием для голосовых приложений TDM. Задержка на пакетирование является одной из компонент общей задержки и растет при увеличении размера пакетов.

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

2. Уровень инкапсуляции может обеспечивать экономию полосы PSN за счет отказа от передачи поврежденных данных TDM через сеть PSN.
3. Уровень инкапсуляции может обеспечивать возможность экономии полосы PSN для случая структурированного транспорта за счет отказа от передачи неактивных каналов.
4. Уровень инкапсуляции может обеспечивать динамическое отключение временно бездействующих каналов в случае использования структурированного транспорта.
Если динамическое исключение каналов используется, по умолчанию недопустимо нарушение целостности структур, передаваемых через PW.
5. Для NxDS0 уровень инкапсуляции должен обеспечивать возможность сохранять сквозную задержку независимо от скорости.

7.6. Вариации задержки пакетов

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

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

7.7. Совместимость с инфраструктурой сетей пакетной коммутации (PSN)

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

7.8. Контроль насыщения

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

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

Следует принимать меры по предотвращению ситуаций, когда множество TDM PW одновременно отключается (shut down) и восстанавливается, поскольку это приводит к нестабильности работы PSN.

Дополнительные сведения о контроле насыщения можно найти в параграфе 6.5 документа [RFC3985].

7.9. Детектирование отказов

Уровню инкапсуляции для сквозной эмуляции сервиса TDM следует независимо или совместно с нижележащим уровнем стека PWE3 обеспечивать детектирование, обработку и генерацию отчетов для следующих ситуаций:

  1. Ошибочные соединение или заблудившиеся пакеты. Важность этого требования обусловлена ожиданиями пользователей, основанными на надежном детектировании ошибочных соединений в сетях SONET/SDH.

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

  3. Пакеты с некорректным форматом.

7.10. Мониторинг работы

Уровню инкапсуляции для сквозной эмуляции сервиса TDM следует обеспечивать сбор данных мониторинга работы (PM27), совместимых с параметрами, определенными для «классических» служб на базе TDM. Применимость [G.826] требует дополнительного изучения.

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

Рассмотрение вопросов безопасности в [RFC3916] полностью применимо для случая эмуляции служб TDM. Кроме того, службы TDM чувствительны к вариациям задержки пакетов [параграф 7.6] и требуется защита от такого типа атак.

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

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

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

9.2. Информационные ресурсы

[RFC3916] Xiao, X., McPherson, D., and P. Pate, «Requirements for Pseudo-Wire Emulation Edge-to-Edge (PWE3)», RFC 3916, September 2004.

[RFC3985] Bryant, S. and P. Pate, «Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture», RFC 3985, March 2005.

[G.702] ITU-T Recommendation G.702 (11/88) — Digital hierarchy bit rates

[G.704] ITU-T Recommendation G.704 (10/98) — Synchronous frame structures used at 1544, 6312, 2048, 8448 and 44 736 Kbit/s hierarchical levels

[G.706] ITU-T Recommendation G.706 (04/91) — Frame alignment and cyclic redundancy check (CRC) procedures relating to basic frame structures defined in Recommendation G.704

[G.707] ITU-T Recommendation G.707 (10/00) — Network node interface for the synchronous digital hierarchy (SDH)

[G.751] ITU-T Recommendation G.751 (11/88) — Digital multiplex equipments operating at the third order bit rate of 34 368 Kbit/s and the fourth order bit rate of 139 264 Kbit/s and using positive justification

[G.810] ITU-T Recommendation G.810 (08/96) — Definitions and terminology for synchronization networks

[G.826] ITU-T Recommendation G.826 (02/99) — Error performance parameters and objectives for international, constant bit rate digital paths at or above the primary rate

[Q.700] ITU-T Recommendation Q.700 (03/93) — Introduction to CCITT Signalling System No. 7

[Q.931] ITU-T Recommendation Q.931 (05/98) — ISDN user-network interface layer 3 specification for basic call control

[RFC1958] Carpenter, B., «Architectural Principles of the Internet», RFC 1958, June 1996.

[RFC2736] Handley, M. and C. Perkins, «Guidelines for Writers of RTP Payload Format Specifications», BCP 36, RFC 2736, December 1999.

[RFC3393] Demichelis, C. and P. Chimento, «IP Packet Delay Variation Metric for IP Performance Metrics (IPPM)», RFC 3393, November 2002.

[T1.105] ANSI T1.105 — 2001 Synchronous Optical Network (SONET) — Basic Description including Multiplex Structure, Rates, and Formats, May 2001

[T1.107] ANSI T1.107 — 1995. Digital Hierarchy – Format Specification

[TR-NWT-170] Digital Cross Connect Systems — Generic Requirements and Objectives, Bellcore, TR-NWT-170, January 1993

10. Разработчики документа

В разработку этого документа внесли свой вклад:

Sasha Vainshtein

Axerra Networks

EMail: sasha@axerra.com

Yaakov Stein

RAD Data Communication

EMail: yaakov_s@rad.com

Prayson Pate

Overture Networks, Inc.

EMail: prayson.pate@overturenetworks.com

Ron Cohen

Lycium Networks

EMail: ronc@lyciumnetworks.com

Tim Frost

Zarlink Semiconductor

EMail: tim.frost@zarlink.com

Адрес автора

Maximilian Riegel

Siemens AG

St-Martin-Str 76

Munich 81541

Germany

Phone: +49-89-636-75194

EMail: maximilian.riegel@siemens.com


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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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

1Time Division Multiplexed – мультиплексирование с разделением во времени.

2Plesiochronous Digital Hierarchy – плезиохронная цифровая иерархия.

3Synchronous Optical NETwork – цифровая оптическая сеть (используется в основном на американском континенте), Synchronous Digital Hierarchy – синхронная цифровая иерархия (используется в основном в Европе). Прим. перев.

4Pseudo Wire Emulation Edge-to-Edge – эмуляция прямых соединений.

5Packet-Switched Networks/

6Timeslot — тайм-слот, временной интервал.

7Канализированный поток TDM.

8Multiframe.

9Native Service Processing

10Payload container.

11Synchronous payload envelope.

12Виртуальный поток.

13Concatenated circuits.

14Digital Video Signals — сигналы цифрового видео.

15Virtual Tributaries – виртуальные разветвления .

16Pseudo Wire – псевдо-провод.

17В оригинале используются термины jitter (дрожь) и wander (отклонение). Прим. перев.

18Channel-Associated Signaling – поканальная сигнализация.

19Common Channel Signaling – сигнализация с общим сигнальным каналом.

20packet delay variation – вариации задержки пакетов.

21Ingress PE.

22Egress PE.

23Jitter buffer overflow/underflow.

24Далее в переводе этот уровень будет для краткости называться информационным. Прим. перев.

25Размер пользовательских данных.

26Attachment Circuit – соединительное устройство, устройство подключения.

27Performance monitoring.

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

RFC 4204 Link Management Protocol (LMP)

Network Working Group                                       J. Lang, Ed.
Request for Comments: 4204                                   Sonos, Inc.
Category: Standards Track                                   October 2005

Протокол управления каналом (LMP)

Link Management Protocol (LMP)

PDF

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

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

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

Copyright (C) The Internet Society (2005).

Аннотация

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

1. Введение

Разрабатывают сети с маршрутизаторами, коммутаторами, кросс-коннекторами, системами DWDM3 и мультиплексорами ADM4, использующими общий уровень управления (common control plane), например, GMPLS5 для динамического распределения ресурсов и обеспечения жизнестойкости сети с использованием средств защиты и восстановления. Пара узлов может иметь тысячи соединений между собой и каждое такое соединение может включать множество каналов передачи данных с использованием мультиплексирования (например, Frame Relay DLCI на уровне 2 или временные интервалы TDM6, длины волн WDM7 на уровне 1). В целях масштабирования множество каналов данных может объединяться в один канал TE.

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

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

К выполняемым протоколом LMP задачам относится проверка группировки каналов в соединения TE, а также проверка совпадения свойств этих каналов на обеих сторонах соединения — это называется корреляцией свойств каналов (link property correlation). Кроме того, LMP может обмениваться этими свойствами с модулем IGP, который, в свою очередь, может анонсировать их другим узлам сети. LMP может также сообщать модулю сигнализации отображения между соединениями TE и каналами управления. Таким образом, LMP исполняет функции «склеивания» на уровне управления.

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

Для целей этого документа канал данных может рассматриваться каждым узлом, как завершающийся на порту или компонентном соединении, в зависимости от возможностей мультиплексирования конечной точки данного канала — компонентное соединение поддерживает мультиплексирование, порт не поддерживает. Это различие важно, поскольку управление такими каналами (включая, например, выделение ресурсов, присвоение меток и из физическую верификацию) зависит от возможностей мультиплексирования. Например, коммутатор Frame Relay может демультиплексировать интерфейс по виртуальным устройствам на основе значений DLCI, кросс-коннектор SONET с интерфейсами OC-192 может демультиплексировать поток OC-192 в 4 потока OC-48. Если множество интерфейсов группируется в один канал TE с использованием связывания (link bundling) [RFC4201], ресурсы канала должны идентифицироваться с использованием трех уровней — Link_Id, идентификатор компонентного соединения и метка, указывающая виртуальное устройство, временной интервал и т. п. Выделение ресурсов происходит на нижнем уровне (метки), а физические соединения выполняются на уровне компонентного канала. В качестве другого примера рассмотрим оптический коммутатор (например, PXC) прозрачно коммутирующий оптические пути OC-192. Если множество интерфейсов снова группируется в один канал TE, связывания каналов [RFC4201] не требуется и нужны только два уровня идентификации — Link_Id и Port_Id. В этом случае выделение ресурсов и физическое подключение выполняются на нижнем уровне (порт).

Для обеспечения взаимодействия между устройствами с разными возможностями мультиплексирования поддерживающим LMP устройствам следует разрешать локальную настройку субканалов на компонентных соединениях, как (логических) каналов данных. Например, если маршрутизатор с интерфейсами 4 OC-48 подключен через мультиплексор 4:1 MUX к кросс-коннектору с интерфейсами OC-192, кросс-коннектору следует обеспечивать возможность настройки каждого субканала (например, STS-48c SPE, если 4:1 MUX является мультиплексором SONET), как канала данных.

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

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

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

Предполагается, что читатель знаком с терминологией [RFC3471], [RFC4202] и [RFC4201].

Bundled Link — составной канал

В соответствии с [RFC4201] составной канал является каналом TE и по этом причине для целей сигнализации GMPLS комбинации <link identifier, label> не достаточно для однозначной идентификации соответствующих ресурсов, используемых LSP. Составной канал включает два или более компонентных соединения.

Control Channel — канал управления

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

Component Link — композитный канал

В соответствии с [RFC4201] компонентное соединение представляет собой подмножество ресурсов канала TE, такое, что (a) отделение от других минимально и (b) в каждом подмножестве метки достаточно для однозначной идентификации соответствующих ресурсов, используемых LSP.

Data Link — канал передачи данных

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

Link Property Correlation — корреляция свойств канала

Процедура организации связи (корреляции) между локальными и удаленными свойствами канала TE.

Multiplex Capability — возможности мультиплексирования

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

Node_Id — идентификатор узла

Для узла OSPF идентификатор LMP Node_Id совпадает с адресом, содержащимся в OSPF Router Address TLV. Для узла IS-IS при анонсировании TE Router ID TLV идентификатор Node_Id совпадает с анонсируемым Router ID.

Port — порт

Интерфейс, завершающий канал данных.

TE Link — канал TE

В соответствии с [RFC4202] канал TE является логической конструкцией, представляющей способ группировки/отображения информации о неких физических ресурсах (и их свойствах), соединяющих маршрутизаторы LSR, в данные, используемые CSPF для расчета пути и сигнализации GMPLS.

Transparent — прозрачный

Устройство называется X-прозрачным, если оно пересылает входящие сигналы со входа на выход без проверки и изменения X-компоненты этих сигналов. Например, коммутатор Frame Relay прозрачен на сетевом уровне, а оптические коммутаторы прозрачны для электрических сигналов.

2. Обзор LMP

Двумя основными процедурами LMP являются поддержка канала управления и корреляция свойств канала. Поддержка канала управления служит для организации и обслуживания каналов управления между смежными узлами. Это выполняется с использованием сообщений Config и механизма ускоренного обмена сообщениями keep-alive, который нужен в тех случаях, когда не доступны механизмы нижележащих уровней для обнаружения отказов в канале управления. Корреляция свойств канала используется для синхронизации свойств канала TE и проверки его конфигурации.

LMP требует, чтобы между парой узлов имелся хотя бы один активный двухсторонний канал управления. Каждое направление канала управления идентифицируется значением CC_Id9 и два направления связываются между собой с помощью обмена сообщениями LMP Config. За исключением сообщений Test, которые могут применяться транспортным механизмом для обмена в основной полосе, все пакеты LMP передаются по протоколу UDP через порт LMP. Кодирование для канала управления на уровне логического канала (L2) выходит за рамки этого документа.

LMP-смежность между парой узлов возникает при наличии хотя бы одного двухстороннего канала управления между ними. Для каждой смежности может существовать множество одновременно действующих каналов управления, однако характеристики должны согласовываться для каждого канала индивидуально. При использовании LMP fast keep-alive не канале управления обмен сообщениями LMP Hello должен выполняться через канал управления. Другие сообщения LMP могут передаваться через любой активный канал управления между парой смежных узлов. Активные каналы управления могут группироваться в логический канал управления для сигнализации маршрутизации и сопоставления свойств.

Функция сопоставления свойств канала LMP предназначена для агрегирования множества каналов данных (порты или компонентные соединения) в канал TE и синхронизации свойств канала TE. Частью этой функции является обмен сообщениями LinkSummary. Такие сообщения включают локальный и удаленный идентификатор Link_Id, список всех каналов данные в составе канала TE и различные свойства канала. Сообщения LinkSummaryAck или LinkSummaryNack должны передаваться в ответ на сообщение LinkSummary, указывающее согласование свойств канала или отмену такого согласования.

Сообщения LMP передаются с гарантией доставки, основанной на использовании Message_Id и повторов передачи. Идентификаторы сообщений передаются в объектах MESSAGE_ID. В сообщении LMP можно включать не более одного объекта MESSAGE_ID. Для сообщений, относящихся к каналам управления, Message_Id находятся в области действия канала управления, через который сообщение передается. Для сообщений, относящихся к каналам TE, значения Message_Id находятся в области действия смежности LMP. Значения Message_Id монотонно увеличиваются с возвратом в 0 при достижении максимума.

В этом документе определены две дополнительных процедуры LMP — проверка связности канала и контроль отказов. Эти процедуры полезны, в частности, когда каналы управления физически отделены от каналов данных. Проверка связности канала используется для обнаружения уровня данных (data plane discovery), обмена Interface_Id (эти идентификаторы применяются в сигнализации GMPLS в качестве меток порта или идентификатора композитного соединения, в зависимости от конфигурации), а также проверки физической связности. Проверка выполняется путем передачи сообщений Test через каналы данных и возврата в ответ на них сообщений TestStatus через канал управления. Отметим, что сообщение Test является единственным сообщением LMP, передаваемым по каналам данных. Обмен сообщениями ChannelStatus между применяется смежными узлами для подавления нисходящих сигналов и локализации отказов в целях защиты и восстановления.

Для проверки связности канала LMP сообщение Test передается по каналам данных. Для X-прозрачных устройств это требует проверки и изменения аспекта X в сигналах. Процедура проверки связности канала LMP координируется с помощью обмена сообщениями BeginVerify через канал управления. Для поддержки разных аспектов прозрачности в сообщения BeginVerify и BeginVerifyAck включен механизм VTM10. Отметим, что не вводится требования одновременной потери прозрачности всеми каналами данных — считается возможной потеря прозрачности, как минимум, на одном канале. Также не требуется использовать одну физическую среду для канала управления и канала TE, однако канал управления должен завершаться на тех же двух элементах управления, которые служат для управления каналом TE. Поскольку обмен сообщениями BeginVerify координирует процедуру Test, он естественным образом координирует режим прозрачности каналов данных.

Процедура контроля отказов LMP основана на обмене сообщениями ChannelStatus, включающем ChannelStatus, ChannelStatusAck, ChannelStatusRequest и ChannelStatusResponse. Сообщение ChannelStatus передается без запроса и служит для уведомления соседа LMP о состоянии одного или множества каналов данных в канале TE. Сообщение ChannelStatusAck служит для подтверждения приема ChannelStatus. Сообщение ChannelStatusRequest используется для запроса у соседа LMP данных о состоянии одного или множества каналов данных в канале TE. Сообщение ChannelStatusResponse служит для подтверждения приема ChannelStatusRequest и содержит запрошенные данные.

3. Поддержка канала управления

Для организации смежности LMP между двумя узлами должен быть активирован хотя бы один двухсторонний канал управления. Каналы управления могут применяться для обмена управляющей информацией типа данных о поддержке канала или контроле отказов (с использованием протокола сообщений типа описанного здесь LMP), данных управления путями или распространением меток (с использованием сигнального протокола типа RSVP-TE [RFC3209]) и данных о сетевой топологии и распространении сведений о состояниях (с использованием расширений для организации трафика в протоколах типа OSPF [RFC3630] или IS-IS [RFC3784]).

Для целей LMP точная реализация канала управления не задается — это может быть, например, отдельная длина волны или волокно, соединение Ethernet, туннель IP через отдельную сеть управления или просто дополнительные байты в канале данных. Каждый узел задает для канала управления уникальный (для себя) 32-битовый целочисленный идентификатор, отличный от 0, CC_Id. Значения идентификаторов берутся из одного пространства с идентификаторами безадресных интерфейсов. Пакеты LMP передаются по протоколу UDP с использованием порта LMP. Таким образом, канальное представление управляющего канала не является частью спецификации LMP.

Для организации канала управления нужно знать IP-адрес, которому будут приниматься пакеты на удаленной стороне. Этот адрес можно задать в конфигурации вручную или определить автоматически. Отметим, что для сигнализации по основному каналу (in-band signaling) канал управления можно явно задать в конфигурации конкретного канала данных. В этом случае можно использовать обмен сообщениями Config для динамического определения адреса IP на удаленном конце канала управления. Это выполняется путем передачи сообщения Config с индивидуальным адресом отправителя по групповому адресу IP (224.0.0.1 или ff02::1). В ответ должны передаваться сообщения ConfigAck и ConfigNack по адресу IP из поля отправителя в заголовке пакета с сообщением Config.

Каналы управления существуют независимо от каналов TE и между парой узлом может быть организовано множество одновременных каналов управления. Отдельные каналы управления могут быть реализованы разными способами, например, один может быть создан в оптическом волокне, а другой вне волокна. В любом случае параметры должны согласовываться через каждый канал управления для поддержки связности LMP, если иные механизмы не доступны. Поскольку каналы управления электрически завершаются на каждом узле, можно детектировать отказы каналов управления с использованием нижележащих уровней (например, SONET/SDH).

Имеется четыре сообщения LMP, которые применяются для управления отдельными каналами — Config, ConfigAck, ConfigNack и Hello. Эти сообщения должны передаваться через канал, к которому они относятся. Все прочие сообщения LMP можно передавать через любой активный канал управления между парой смежных узлов LMP.

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

3.1. Согласование параметров

Активизация канала управления начинается с обмена для согласования параметров, использующего сообщения Config, ConfigAck и ConfigNack. Содержимое этих сообщений создается на основе объектов LMP, которые могут быть согласуемыми или несогласуемыми (указываются битом N в заголовке объектов). Согласуемые объекты могут применяться для согласования партнерами LMP неких значений. Несогласуемые объекты служат для анонсирования конкретных значений, которые не нужно или невозможно согласовать.

Для активизации канала управления удаленному партнеру должно быть передано сообщение Config и от него локальный узел должен получить сообщение ConfigAck. В сообщении Config содержится локальный идентификатор канала управления (CC_Id), идентификатор узла-отправителя (Node_Id), идентификатор сообщения Message_Id для обеспечения гарантированной доставки, а также объект CONFIG. Возможно одновременное начало процедуры активизации канала управления с обеих сторон. Для предотвращения неоднозначностей в таких случаях «выигрывает» узел с большим значением Node_Id, а узел с меньшим Node_Id должен прекратить передачу сообщения Config и ответить на принятое сообщение Config. Если значения Node_Id совпадают, это говорит о некорректной настройке конфигурации одного или обоих узлов. В этом случае узлы могут продолжить повторы передачи сообщений Config, надеясь на устранение конфигурационных ошибок. Отметим, что эту проблему может решить оператор, сменив значение Node_Id на одной или обеих сторонах.

Сообщения ConfigAck служат для подтверждения приема сообщений Config и выражения согласия со всеми конфигурационными параметрами (согласуемыми и несогласуемыми).

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

Если узел получает сообщение ConfigNack с устраивающими его дополнительными значениями для согласуемых параметров, ему следует передать в ответ сообщение Config с соответствующими значениями параметров.

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

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

3.2. Протокол Hello

Как только будет активизирован канал управления между парой смежных узлов, через него можно начинать использование протокола LMP Hello для организации связности между узлами и детектирования отказов в канале управления. Протокол LMP Hello используется в качестве облегченного механизма проверки «живучести» канала (keep-alive) для быстрого реагирования на отказы, чтобы не терялись сообщения IGP Hello и соответствующие отношения смежности (link-state adjacency) без необходимости не удалялись.

3.2.1. Согласование параметров Hello

До отправки сообщений Hello должны быть согласованы параметры HelloInterval и HelloDeadInterval на локальном и удаленном узлах. Обмен этими параметрами выполняется в сообщении Config. Параметр HelloInterval задает частоту передачи сообщений LMP Hello в миллисекундах (мсек). Например, при значении параметра 150 передающий узел будет отправлять сообщения Hello хотя бы один раз за каждые 150 мсек. HelloDeadInterval указывает интервал (в мсек), в течение которого устройство будет ожидать сообщения Hello, пока не сочтет канал управления «умершим».

Значение HelloDeadInterval должно быть больше HelloInterval и следует делать его по крайней мере втрое больше HelloInterval. Если не используется механизм ускоренной проверки живучести (fast keep-alive) LMP, для параметров HelloInterval и HelloDeadInterval должно устанавливаться значение 0.

Значения HelloInterval и HelloDeadInterval следует выбирать аккуратно для обеспечения быстрого отклика на отказы канала управления и отсутствия перегрузок. В силу этого очевидно использование различных значений параметров в разных реализациях каналов управления. Для каналов управления, организованных через прямое соединение, предлагается по умолчанию использовать значения HelloInterval = 150 и HelloDeadInterval = 500 мсек.

Когда узел передал или получил сообщение ConfigAck, он может начинать отправку сообщений Hello. После отправки сообщения Hello и получения приемлемого Hello (т. е., с ожидаемым порядковым номером — см. параграф 3.2.2) канал управления переходит в активное состояние (up) (возможен переход в состояние up без отправки сообщений Hello, если для индикации двухсторонней связности канала управления применяются другие методы; например, данные о связности канала управления могут быть получены от транспортного уровня). Однако, если узел получает сообщение ConfigNack взамен ConfigAck, он должен отказаться от передачи сообщения Hello, а канал управления не следует переводить в состояние up. Машина конечный состояний (FSM) для канала управления описана в параграфе 11.1.

3.2.2. Ускоренная проверка жизнеспособности

Каждое сообщение Hello содержит два порядковых номера — первый (TxSeqNum) указывает номер сообщения Hello, которое будет передаваться, а второй (RcvSeqNum) – номер последнего сообщения Hello, полученного от смежного узла через данный канал управления.

Для порядковых номеров имеется два специальных значения. Для TxSeqNum недопустимо использовать значение 0. TxSeqNum = 1 используется для индикации того, что отправитель только начал работу и еще не знает номера последнего переданного сообщения. Таким образом, первое сообщение Hello передается с TxSeqNum = 1 и RxSeqNum = 0. Когда TxSeqNum достигает значения 232-1, следующим номером будет 2, а не 0 или 1, поскольку эти номера имеют особое значение.

При нормальной работе разница между RcvSeqNum в полученном сообщении Hello и локальным номером TxSeqNum для генерируемого сообщений в большинстве случаев будет составлять 1. Эта разность может становиться больше 1 только при перезапуске управляющего канала или достижении максимального номера.

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

   if ((int) old_id - (int) new_id > 0) {
      новое значение меньше старого;
   }

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

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

  1. После завершения конфигурационного этапа узел A передает сообщения Hello узлу B с {TxSeqNum=1;RcvSeqNum=0}.

  2. Узел A получает Hello от узла B с {TxSeqNum=1;RcvSeqNum=1}. По истечении интервала HelloInterval узел A передает узлу B сообщения Hello {TxSeqNum=2;RcvSeqNum=1}.

  3. Узел A получает Hello от узла B с {TxSeqNum=2;RcvSeqNum=2}. По истечении интервала HelloInterval узел A передает узлу B сообщения Hello {TxSeqNum=3;RcvSeqNum=2}.

3.2.3. Отключение канала управления

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

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

Узлу, получившему пакет LMP с установленным флагом ControlChannelDown, следует передать сообщение Hello с установленным флагом ControlChannelDown и перевести канал управления в отключенное состояние (down).

3.2.4. Вырожденное состояние

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

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

4. Сопоставление свойств каналов

В рамках LMP для каналов TE определен обмен для сопоставления свойств каналов с помощью сообщений LinkSummary, LinkSummaryAck и LinkSummaryNack. Содержимое этих сообщений создается с использованием объектов LMP, которые могут быть согласуемыми или несогласуемыми (указывается флагом N в заголовке объекта). Согласуемые объекты служат для того, чтобы стороны могли совместно выбирать значения некоторых параметров канала. Несогласуемые объекты служат для анонсирования конкретных значений, которые не нужно или невозможно согласовать.

Каждый канал TE имеет идентификатор (Link_Id), выделенный на каждой стороне соединения. Эти идентификаторы должны быть одного типа (т. е., IPv4, IPv6 или безадресный) на обеих сторонах. Если принимается сообщение LinkSummary с разными типами канала TE на локальной и удаленной стороне, в ответ должно передаваться сообщение LinkSummaryNack с кодом ошибки Bad TE Link Object. Аналогично, на каждой стороне канала присваивается идентификатор интерфейса (Interface_Id). Эти идентификаторы также должны иметь одинаковый тип на обеих сторонах. При получении LinkSummary с разнотипными Interface_Id на локальной и удаленной стороне в ответ должно передаваться сообщение LinkSummaryNack с кодом ошибки Bad Data Link Object.

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

Сообщения LinkSummary служат для проверки согласованности информации о канале данных и TE на обеих сторонах, а также для (1) агрегирования множества каналов данных (портов или компонентных каналов) в один канал TE, (2) обмена, сопоставления (для обнаружения несогласованности) или изменения параметров канала TE и (3) обмена, сопоставления (для обнаружения несогласованности) или изменения значений Interface_Id (Port_Id или идентификаторы компонентных каналов).

Сообщение LinkSummary включает объект TE_LINK, за которым следует один или множество объектов DATA_LINK. Объект TE_LINK указывает идентификаторы Link_Id на локальной и удаленной стороне канала TE, а также поддержку процедур контроля отказов и верификации для канала TE. Объекты DATA_LINK служат для указания характеристик каналов данных, образующих канал TE. Эти объекты включают локальный и удаленный идентификатор Interface_Id и могут включать один или множество субобъектов с дополнительным описанием свойств каналов данных.

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

Сообщение LinkSummaryAck служит для сигнализации о согласовании отображений Interface_Id и определений свойств каналов. В остальных случаях должно передаваться сообщение LinkSummaryNack, показывающее интерфейсы с некорректным отображением и/или неприемлемые свойства канала. Если сообщение LinkSummaryNack показывает, что отображение Interface_Id некорректно, а процедура проверки включена, процесс проверки канала следует повторить для всех несоответствующих свободных каналов данных. Если сообщение LinkSummaryNack включает согласуемые параметры, должны быть указаны приемлемые значения этих параметров. Если полученное сообщение LinkSummaryNack включает согласуемые параметры, инициатору сообщения LinkSummary следует отправить новое сообщение LinkSummary. В это новое сообщение LinkSummary следует включить новые значения для согласуемых параметров. В этих значениях следует принимать во внимание приемлемые значения параметров из сообщения LinkSummaryNack.

Сообщение LinkSummary может стать довольно большим по причине большого числа объектов DATA LINK. Реализациям LMP следует поддерживать возможность фрагментации при передаче сообщений LMP и они должны поддерживать сборку фрагментов IP при получении сообщений LMP.

5. Проверка связности для канала

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

Поддержка этой процедуры указывается флагом Link Verification Supported в объекте TE_LINK сообщений LinkSummary.

Если получено сообщение BeginVerify, а проверка каналов не поддерживается для соединений TE, в ответ должно передаваться сообщение BeginVerifyNack с кодом ошибки (Error Code), показывающим, что проверка для этого канала TE не поддерживается (Link Verification Procedure not supported for this TE Link).

Уникальной характеристикой прозрачных устройств является то, что данные не изменяются и не проверяются в процессе нормальной работы. Это создает сложности при проверке связности каналов данных и организации отображения меток. Поэтому для обеспечения подобающей проверки связности канала данных требуется непрозрачность таких каналов до того момента, как они будут выделены для пользовательского трафика. Для поддержки той или иной степени непрозрачности (например, проверка служебных байтов, и терминирование полезной нагрузки IP и т. п.) и, следовательно, поддержки различных механизмов транспортировки сообщений Test в сообщения BeginVerify и BeginVerifyAck включается поле Verify Transport Mechanism.

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

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

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

Для начала процедуры проверки канала локальный узел должен отправить через канал управления сообщение BeginVerify. Для ограничения процедуры Link Verification конкретным каналом TE, локальное значение Link_Id должно отличаться от 0. Если это поле равно 0, канал данных может охватывать множество каналов TE и/или в число проверяемых каналов TE могут попасть еще не настроенные. Для случаев локального Link_Id = 0 используется флаг Verify all Links в объекте BEGIN_VERIFY, позволяющий различать каналы данных, охватывающие множество каналов TE и каналы данных, еще не связанные с каналом TE. В частности, проверка каналов данных, охватывающих множество каналов TE, указывается локальным полем Link_Id = 0 и установкой флага Verify all Links. Проверка каналов данных, которые еще не привязаны к каналам TE, указывается установкой локального поля Link_Id = 0 и сбросом флага Verify all Links.

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

Если удаленный узел получил сообщение BeginVerify и готов обрабатывать сообщения Test, он должен передать в ответ сообщение BeginVerifyAck, указывающее желаемый для сообщений TEST транспортный механизм. Удаленный узел включает в это сообщение 32-битовое значение Verify_Id, уникальное в масштабах данного узла. Значение Verify_Id может выбираться случайно, однако недопустимо его совпадение с любым Verify_Id, используемым в это же время выбравшим значение узлом. Verify_Id после этого используется во всех проверочных сообщениях для того, чтобы различать разных партнеров LMP и/или параллельные процедуры Test. Когда локальный узел получит сообщение BeginVerifyAck от удаленного узла, он может начать тестирование каналов данных путем периодической отправки сообщений Test в каждый канал. Сообщение Test включает Verify_и локальное значение Interface_Id для соответствующего канала данных. Удаленный узел должен передавать в ответ сообщение TestStatusSuccess или TestStatusFailure для каждого проверяемого канала. Для подтверждения приема TestStatusSuccess и TestStatusFailure должно передаваться сообщение TestStatusAck. Неподтвержденные сообщения TestStatusSuccess и TestStatusFailure следует повторять по получения подтверждения или достижения предельного числа повторов (см. также раздел 10).

Для отправителя допустимо прерывание процедуры Test в любой момент после отправки сообщения BeginVerify. Для этого следует передать сообщение EndVerify.

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

При получении сообщения Test идентификатор интерфейса Interface_Id из этого сообщения (используется в GMPLS как метка порта или идентификатор компонентного канала в зависимости от конфигурации) записывается и отображается на локальный идентификатор Interface_Id для принявшего сообщение канала данных, а в ответ должно передаваться сообщение TestStatusSuccess, включающее локальное значение Interface_Id, а также значения Interface_Id и Verify_Id из принятого сообщения Test. Получение TestStatusSuccess показывает, что сообщение Test было обнаружено удаленным узлом и физическая связность канала данных была подтверждена. При получении TestStatusSuccess локальному узлу следует пометить канал данных как активный и отправить удаленному узлу сообщение TestStatusAck. Однако, если сообщение Test не было обнаружено на удаленной стороне в течение периода наблюдения (задается значением VerifyDeadInterval), удаленный узел должен передать через канал управления сообщение TestStatusFailure, показывающее неудачу при проверке физической связности канала данных. Локальному узлу, получившему сообщение TestStatusFailure, следует пометить канал данных как сбойный (FAILED) и передать удаленному узлу сообщение TestStatusAck. После проверки всех каналов данных локальному узлу следует передать сообщение EndVerify для индикации завершения тестирования на данном канале.

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

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

5.1. Пример проверки связности для канала

На рисунке 1 показан пример проверки связности, которая выполняется при добавлении канала между узлами A и B. В этом примере канал TE состоит из трех свободных портов (каждый из которых использует свое волокно) и связан с двухсторонним каналом управления (отмечен буквой c). Процесс проверки связности поэтапно описан ниже.

  • Узлу B через канал управления передается сообщение BeginVerify, говорящее о начале проверки портов, образующих канал TE. Объект LOCAL_LINK_ID в сообщении BeginVerify содержит идентификатор (адрес IP или индекс интерфейса), присвоенный каналу узлом A.

  • Получив сообщение BeginVerify, узел B создает идентификатор Verify_Id и привязывает его к каналу TE от A. Эта привязка используется при получении узлом B сообщений Test от узла A, содержащих Verify_Id. Узел B определяет идентификатор (адрес IP или индекс интерфейса), который узел A присвоил каналу TE, просматривая объект LOCAL_LINK_ID из полученного сообщения BeginVerify (если порты данных еще не выделены для TE Link, привязка ограничена Node_Id для узла A). В ответ на сообщение BeginVerify узел B передает сообщение BeginVerifyAck узлу A. Объект LOCAL_LINK_ID в сообщении BeginVerifyAck служит для передачи идентификатора (адрес IP или индекс интерфейса), который узел B присвоил каналу TE. Объект REMOTE_LINK_ID в сообщении BeginVerifyAck служит для привязки идентификаторов Link_Id, выделенных узлами A и B. Значение Verify_Id возвращается узлу A в сообщении BeginVerifyAck по каналу управления.

  • Когда узел A получает сообщение BeginVerifyAck, он начинает периодическую отправку сообщений Test через первый порт (Interface Id=1). Сообщение Test включает Interface_Id для порта и значение Verify_Id, присвоенное злом B.

  • При получении узлом B сообщений Test он отображает полученный идентификатор Interface_Id на свой локальный идентификатор Interface_Id = 10 и передает сообщение TestStatusSuccess узлу A через канал управления. Сообщение TestStatusSuccess включает локальное и принятое значения Interface_Id для портов, а также Verify_Id. Идентификатор Verify_Id используется для определения локального и удаленного идентификаторов канала TE (адреса IP или индексы интерфейсов), к которым относятся каналы данных.

  • Узел A будет передавать через канал управления узлу B сообщение TestStatusAck, показывающее, что он получил сообщение TestStatusSuccess.

  • Процесс повторяется до завершения проверки всех портов.

  • После этого узел A передает через канал управления сообщение EndVerify, говорящее узлу B о завершении проверки.

  • B отвечает на это сообщение отправкой через канал управления узлу A сообщения EndVerifyAck.

    Отметим, что эта процедура может применяться для «обнаружения» связности между портами данных.

+---------------------+                      +---------------------+
+                     +                      +                     +
+      Узел A         +<-------- c --------->+        Узел B       +
+                     +                      +                     +
+                     +                      +                     +
+                   1 +--------------------->+ 10                  +
+                     +                      +                     +
+                     +                      +                     +
+                   2 +                /---->+ 11                  +
+                     +          /----/      +                     +
+                     +     /---/            +                     +
+                   3 +----/                 + 12                  +
+                     +                      +                     +
+                     +                      +                     +
+                   4 +--------------------->+ 14                  +
+                     +                      +                     +
+---------------------+                      +---------------------+

Рисунок 1. Пример проверки связности между узлами A и B


6. Обработка отказов

В этом разделе описана необязательная процедура LMP, служащая для обработки отказов путем быстрого уведомления о состоянии одного или множества каналов данных в канале TE. Областью действия этой процедуры является канал TE и поэтому применение этой процедуры согласуется в процессе обмена LinkSummary. Процедура может служить для быстрой изоляции отказов каналов данных и канала TE и предназначена для использования как на односторонних, так и на двухсторонних LSP.

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

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

6.1. Детектирование отказов

Детектирование отказов должно происходить на ближайшем к отказу уровне — для оптических сетей это физический (оптический) уровень. Одним из способов обнаружения отказов на физическом уровне является детектирование «потери света» (LOL11). Другие методы мониторинга оптических сигналов пока находятся в стадии разработки и не рассматриваются в этом документе. Однако следует понимать, что механизм, используемый для уведомлений об отказах в LMP, не зависит от способа детектирования отказов и основан просто на фактах обнаружения отказа.

6.2. Процедура локализации отказа

В некоторых ситуациях отказ канала данных между двумя узлами распространяется в нисходящем направлении так, что все нисходящие узлы обнаруживают отказ без его локализации. Для предотвращения множественных уведомлений об одном отказе LMP обеспечивает уведомление об отказах с помощью сообщений ChannelStatus. Это сообщение можно использовать для индикации отказа одного или многих каналов данных, а также всего канала TE. Сопоставление отказов выполняется локально на каждом узле, получившем уведомление об отказе.

Для связывания отказа с конкретным каналом между смежными узлами нисходящий (в смысле потока данных) узел , обнаруживший отказ канала данных будет передавать своему соседу в восходящем направлении сообщение ChannelStatus, показывающее, что обнаружен отказ (уведомления для всех каналов с отказами объединяются). Получивший сообщение ChannelStatus восходящий узел должен передать в ответ сообщение ChannelStatusAck, подтверждающее прием ChannelStatus. Восходящему узлу следует провести сопоставление с целью определить, обнаружен ли этот отказ локально для соответствующих LSP. Если, например, будет ясно, что отказ наблюдается на входе восходящего узла или внутри него, восходящий узел будет знать точку отказа. После сопоставления информации об отказах восходящему узлу следует передать нисходящему узлу сообщение ChannelStatus, которое показывает наличие или отсутствие отказа в канале. Если сообщение ChannelStatus не будет получено нисходящим узлом, тому следует передать сообщение ChannelStatusRequest для соответствующего канала. После определения точки отказа можно использовать сигнальный протокол для инициирования процедур защиты или восстановления интервала (span) или пути.

Если отказ произошел на всех каналах данных соединения TE, восходящий узел может быть уведомлен об отказе канала TE без указания конкретных каналов данных. Это выполняется путем отправки уведомления в сообщении ChannelStatus, идентифицирующем канал TE без указания Interface_Id в объекте CHANNEL_STATUS.

6.3. Примеры локализации отказов

На рисунке 2 приведен пример сети, где 4 узла соединены в линейный массив. Каналы управления являются двухсторонними и помечены буквой c. Все LSP также являются двухсторонними.

В первом случае [(a) на рисунке] возникает отказ на одном из направлений двухстороннего LSP. Узел 4 обнаружит этот отказ и передаст узлу 3 сообщение ChannelStatus, сообщающее об отказе (например, LOL) соответствующему восходящему узлу. Узел 3, получив сообщение ChannelStatus от узла 4, вернет тому сообщение ChannelStatusAck и выполнит для него локальное сопоставление. Когда узел 3 выполнит сопоставление для этого отказа и проверит его, он свяжет отказ с каналом данных между узлами 3 и 4. В этот момент узлу 3 следует отправить на узел 4 сообщение ChannelStatus, говорящее о локализации отказа.

Во втором случае [(b) на рисунке] один отказ (например, повреждение волокна) воздействует на оба направления двухстороннего LSP. Узел 2 (узел 3) обнаружит отказ в восходящем (нисходящем) направлении и отправит восходящему (относительно потока данных) узлу сообщение ChannelStatus, говорящее об отказе (например, LOL). Одновременно (не учитывая задержек при распространении) узел 1 (узел 4) обнаружит отказ на восходящем (нисходящем) направлении и будет передавать соответствующему восходящему (относительно потока данных) узлу сообщение ChannelStatus, говорящее об отказе. Узлы 2 и 3 будут локализовать отказ в двух направлениях.

    +-------+        +-------+        +-------+        +-------+
    + Узел1 +        + Узел2 +        + Узел3 +        + Узел4 +
    +       +-- c ---+       +-- c ---+       +-- c ---+       +
----+---\   +        +       +        +       +        +       +
<---+---\\--+--------+-------+---\    +       +        +    /--+--->
    +    \--+--------+-------+---\\---+-------+---##---+---//--+----
    +       +        +       +    \---+-------+--------+---/   +
    +       +        +       +        +       +  (a)   +       +
----+-------+--------+---\   +        +       +        +       +
<---+-------+--------+---\\--+---##---+--\    +        +       +
    +       +        +    \--+---##---+--\\   +        +       +
    +       +        +       +  (b)   +   \\--+--------+-------+--->
    +       +        +       +        +    \--+--------+-------+----
    +       +        +       +        +       +        +       +
    +-------+        +-------+        +-------+        +-------+

Рисунок 2. Показаны 2 типа отказов на каналах данных (символы ##):
(A) канал данных нисходящего направления в двухстороннем LSP,
(B) два канала данных, соответствующих разным направлениям двухстороннего LSP. Каналы управления между узлами помечены буквой c.


6.4. Индикация активации канала

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

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

6.5. Индикация деактивации канала

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

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

7. Использование идентификаторов сообщений

Объекты MESSAGE_ID и MESSAGE_ID_ACK включаются в сообщения LMP для обеспечения гарантированной доставки сообщений. Применение таких объектов рассматривается в данном разделе. Объекты MESSAGE_ID и MESSAGE_ID_ACK содержат поле Message_Id.

В любом сообщении LMP может присутствовать лишь один объект MESSAGE_ID/MESSAGE_ID_ACK.

Для сообщений, связанных с каналами управления, поле Message_Id относится к области CC_Id, для сообщений, относящихся к каналу TE, Message_Id относится к области смежности LMP.

Поле Message_Id в объекте MESSAGE_ID содержит выбранное генератором значение. Эти значения должны монотонно возрастать. Значение считается ранее использованным, если оно было передано в сообщении LMP с таким же CC_Id (для относящихся к каналу управления сообщений) или смежностью LMP (для сообщения, относящихся к TE Link). Поле Message_Id в сообщении MESSAGE_ID_ACK содержит значение Message_Id из подтверждаемого сообщения.

Неподтвержденные сообщения с объектом MESSAGE_ID следует передавать повторно, пока оно не будет подтверждено, если число повторов не будет исчерпано раньше (см. раздел 10).

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

   Если ((int) old_id - (int) new_id > 0) {
      Новое значение меньше предыдущего;
   }

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

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

Если получено сообщение LinkSummary и значение Message_Id в нем меньше наибольшего значения Message_Id, принятого от того же отправителя для TE Link, это сообщение следует считать нарушающим порядок.

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

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

8. Аккуратный перезапуск

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

Предполагается, что значения Node_Id и Local Interface_Id сохраняются при перезапуске уровня управления.

После перезапуска уровня управления на узле требуется заново организовать канал(ы) управления с использованием процедур из параграфа 3.1. При повторной организации каналов управления следует передавать сообщение Config с использованием индивидуальных (unicast) адресов IP для отправителя и получателя.

Если отказ уровня управления был результатом отказа узла, при котором состояние управления LMP было потеряно, в сообщениях LMP должен устанавливаться флаг LMP Restart, пока не будет получено сообщение Hello с RcvSeqNum = TxSeqNum (локальное значение). Это показывает активизацию канала управления и обнаружение перезапуска соседа LMP.

Далее предполагается, что перезапуск компоненты LMP происходит только на одной стороне канала TE. При перезапуске компоненты LMP на обеих сторонах TE Link следует использовать обычную процедуру LinkSummary, как описано в разделе 4.

После активизации канала управления сосед LMP должен передать сообщение LinkSummary для каждого TE Link через смежность. Для всех объектов в сообщении LinkSummary бит N должен быть сброшен (0) для индикации того, что параметры не согласуются. Это обеспечивает отображения между локальными/удаленными Link_Id и Interface_Id, параметры соответствующих каналов данных и индикацию каналов данных, выделенных для пользовательского трафика. Когда узел получает сообщение LinkSummary, он проверяет локальную конфигурацию. Если узел способен сохранить информацию о канале LMP при перезапуске, он должен обработать сообщение LinkSummary в соответствии с разделом 4, но флаг выделения (allocated/de-allocated) в объекте DATA_LINK из принятого сообщения LinkSummary должен получать предпочтение по сравнению с любым локальным значением. Однако, если узел не способен сохранить информацию канала LMP при перезапуске, он должен воспринять параметры каналов данных из сообщения LinkSummary и ответить сообщением LinkSummaryAck.

По завершении обмена LinkSummary узлу, выполнявшему перезапуск управления, следует отправить сообщение ChannelStatusRequest для канала TE. Узлу следует также проверить связность всех не выделенных каналов.

9. Адресация

Все сообщения LMP передаются по протоколу UDP через порт LMP (за исключением в некоторых случаях сообщений Test, которые могут быть ограничены транспортным механизмом для передачи сообщений в основной полосе — in-band). Адресом получателя пакета IP может быть адрес, полученный в процедуре Configuration (т. е., адрес отправителя из заголовка пакета с сообщением Config), адрес IP, заданный в конфигурации удаленного узла или Node_Id. Сообщение Config является исключением, как отмечено выше.

Манера адресации для сообщений Config может зависеть от транспортного механизма сигнализации. При использовании канала «точка-точка» сообщения Config следует направлять по групповому адресу (224.0.0.1 или ff02::1). В остальных случаях сообщения Config должны направляться по IP-адресу соседнего узла. Этот адрес может задаваться в конфигурации на обеих сторонах канала управления или определяться автоматически.

10. Процедуры экспоненциального роста интервалов повтора

Этот раздел основан на [RFC2961] и описывает процедуры экспоненциального роста интервалов повторной передачи. Реализации должны использовать описанные процедуры или их эквивалент.

10.1. Работа

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

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

Интервал ускоренного повтора — Ri

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

Предел ускоренного повтора — Rl

Rl определяет максимальное число повторов передачи неподтвержденного сообщения.

Увеличение интервала повтора Delta

Параметр Delta задает скорость, с которой отправитель увеличивает интервал повтора передачи. Отношение между двумя последовательными интервалами определяется значением (1 + Delta).

По умолчанию предлагается использовать начальный интервал (Ri) в 500 мсек с удвоением каждого следующего интервала (Delta = 1) и максимальным числом повторов 3.

10.2. Алгоритм повтора передачи

После передачи узлом сообщения, которое требует подтверждения, ему незамедлительно следует запланировать повтор передачи через интервал Ri. Если соответствующее подтверждение придет раньше, повтор передачи следует отменить. В противном случае сообщение передается заново по истечении интервала (1+Delta)*Ri12. Повтор передачи следует продолжать, пока не будет получено подтверждение или достигнуто предельное число повторов Rl.

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

      Перед исходной передачей устанавливаются значения Rk = Ri и Rn = 0.
      пока (Rn++ < Rl) {
        передать сообщение;
        выждать Rk мсек;
        Rk = Rk * (1 + Delta);
      }
      /* подтверждение или отсутствие отклика от получателя за время Rl */
      выполнить всю требуемую очистку;
      выход;

Асинхронно, когда отправитель получает соответствующее подтверждение, он меняет значения счетчика повторов Rn на Rl.

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

11. Конечные автоматы LMP

11.1. FSM управляющего канала

Конечный автомат (FSM) канала управления определяет состояния и логику работы канала управления LMP.

11.1.1. Состояния управляющего канала

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

Down

Это начальное состояние канала управления. В этом состоянии не предпринимается попыток активизации канала управления и передачи сообщений. Для параметров канала управления следует установить начальные значения.

ConfSnd

Канал находится в состоянии согласования параметров. В этом состоянии узел периодически отправляет сообщения Config, ожидая от удаленной стороны ответа в форме сообщения ConfigAck или ConfigNack. FSM не переходит в активное (Active) состояние, пока удаленная сторона не подтвердит параметры.

ConfRcv

Канал находится в состоянии согласования параметров. В этом состоянии узел ждет подходящих конфигурационных параметров от удаленной стороны. После получения и подтверждения этих параметров FSM может переходить в состояние Active.

Active

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

Up

Канал управления находится в рабочем состоянии. Узел получает приемлемые сообщения Hello и передает свои сообщения Hello.

GoingDown

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

11.1.2. События канала управления

Работа канала управления LMP описывается состояниями и событиями FSM. События порождаются нижележащими протоколами и программными модулями, а также процедурами обработки пакетов и FSM соответствующих каналов TE. Каждое событие имеет номер и символьное имя. Описания событий канала управления приведены ниже.

  1. evBringUp — вызванное внешними обстоятельствами событие, показывающее, что следует начать согласование канала управления. Это событие может быть вызвано, например, успешным завершением процедуры организации (bootstrap) или настройкой конфигурации канала управления. В зависимости от конфигурации это будет вызывать одно из указанных ниже действий:

    1. передача сообщения Config;

    2. ожидание приема сообщения Config от удаленного узла.

  2. EvCCDn — это событие возникает при наличии индикации недоступности канала управления.

  3. EvConfDone — это событие показывает прием сообщения ConfigAck, подтверждающего параметры из Config.

  4. EvConfErr — это событие показывает прием сообщения ConfigNack, отвергающего параметры из Config.

  5. EvNewConfOK — новое сообщение Config было принято от соседа и подтверждено ConfigAck.

  6. evNewConfErr — новое сообщение Config было принято от соседа и отвергнуто с передачей ConfigNack.

  7. evContenWin — новое сообщение Config было принято от соседа и в тот же момент соседу было передано сообщение Config. Локальный узел «выиграл состязание» и принятое сообщение Config игнорируется.

  8. evContenLost — новое сообщение Config было принято от соседа и в тот же момент этому соседу было передано сообщение Config. Локальный узел «проиграл состязание».

      1. Сообщение Config подтверждено ConfigAck;

      2. Сообщение Config отвергнуто ConfigNack.

  9. EvAdminDown администратор запросил отключить канал управления административно.

  10. EvNbrGoesDn — от соседа получен пакет с флагом ControlChannelDown.

  11. EvHelloRcvd — получен пакет Hello с ожидаемым значением SeqNum.

  12. EvHoldTimer — завершился отсчет таймера HelloDeadInterval при отсутствии пакетов Hello, что переводит канал управления назад в состояние Negotiation и инициирует один из вариантов (в зависимости от конфигурации)

        1. периодическая отправка сообщений Config;

        2. ожидание сообщений Config от удаленного узла.

  13. EvSeqNumErr — получено сообщение Hello с неожиданным SeqNum, сообщение отброшено.

  14. EvReconfig — параметры канала управления были изменены и требуется новое согласование.

  15. EvConfRet — завершился отсчет таймера повтора и сообщение Config передано снова.

  16. evHelloRet — завершился отсчет таймера HelloInterval и сообщение Hello передано снова.

  17. evDownTimer — завершился отсчет таймера, но не было получено ни одного сообщения с флагом ControlChannelDown.

11.1.3. Описание FSM канала управления

На рисунке 3 показана работа FSM канала управления в форме диаграммы состояний FSM.

                               +--------+
            +----------------->|        |<--------------+
            |       +--------->|  Down  |<----------+   | 
            |       |+---------|        |<-------+  |   |
            |       ||         +--------+        |  |   |
            |       ||           |    ^       2,9| 2|  2|
            |       ||1b       1a|    |          |  |   |
            |       ||           v    |2,9       |  |   |
            |       ||         +--------+        |  |   |
            |       ||      +->|        |<------+|  |   | 
            |       ||  4,7,|  |ConfSnd |       ||  |   | 
            |       || 14,15+--|        |<----+ ||  |   |
            |       ||         +--------+     | ||  |   |
            |       ||       3,8a| |          | ||  |   |
            |       || +---------+ |8b  14,12a| ||  |   |
            |       || |           v          | ||  |   |
            |       |+-|------>+--------+     | ||  |   | 
            |       |  |    +->|        |-----|-|+  |   | 
            |       |  |6,14|  |ConfRcv |     | |   |   | 
            |       |  |    +--|        |<--+ | |   |   | 
            |       |  |       +--------+   | | |   |   |
            |       |  |          5| ^      | | |   |   |
            |       |  +---------+ | |      | | |   |   |
            |       |            | | |      | | |   |   |
            |       |            v v |6,12b | | |   |   |
            |       |10        +--------+   | | |   |   |
            |       +----------|        |   | | |   |   |
            |       |       +--| Active |---|-+ |   |   |
       10,17|       |   5,16|  |        |-------|---+   |
        +-------+ 9 |   13  +->|        |   |   |       | 
        | Going |<--|----------+--------+   |   |       | 
        | Down  |   |           11| ^       |   |       | 
        +-------+   |             | |5      |   |       | 
            ^       |             v |  6,12b|   |       | 
            |9      |10        +--------+   |   |12a,14 | 
            |       +----------|        |---+   |       | 
            |                  |   Up   |-------+       | 
            +------------------|        |---------------+ 
                               +--------+ 
                                 |   ^ 
                                 |   | 
                                 +---+ 
                                11,13,16 

Рисунок 3. Диаграмма состояний FSM канала управления.

 

Событие evCCDn всегда переводит FSM в состояние Down, события evHoldTimer и evReconfig всегда переводят FSM в состояние Negotiation (ConfSnd или ConfRcv).

11.2. FSM канала TE

Машина конечных состояний TE Link FSM определяет состояния и логику работы LMP TE Link.

11.2.1. Состояния канала TE

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

Down

Для канала TE еще не выделено каналов данных.

Init

Для канала TE выделены каналы данных, но конфигурация еще не синхронизирована с соседом LMP. Соседу LMP периодически отправляются сообщения LinkSummary.

Up

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

Degraded

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

11.2.2. События каналов TE

Работа канала LMP TE описывается состояниями и событиями FSM. События канала TE порождаются программами обработки пакетов и машинами FSM соответствующих каналов управления и каналов данных. Каждое событие имеет номер и символьное имя, приведенные ниже.

  1. EvDCUp — один или множество каналов данных включены и связаны с каналом TE.

  2. EvSumAck — получено и подтверждено сообщение LinkSummary.

  3. EvSumNack — получено и отвергнуто сообщение LinkSummary.

  4. evRcvAck — получено сообщение LinkSummaryAck, подтверждающее конфигурацию TE Link.

  5. evRcvNack — получено сообщение LinkSummaryNack.

  6. evSumRet — завершился отсчет таймера повтора и сообщение LinkSummary передано снова.

  7. evCCUp — включен первый активный канал управления.

  8. evCCDown — отключен последний активный канал управления.

  9. evDCDown — удален последний канал данных TE Link.

11.2.3. Описание машины конечных состояний канала TE

На рисунке 4 показана работа машины конечных состояний LMP TE Link в форме диаграммы смены состояний FSM.

                                  3,7,8
                                   +--+
                                   |  |
                                   |  v
                                +--------+
                                |        |
                  +------------>|  Down  |<---------+
                  |             |        |          |
                  |             +--------+          |
                  |                |  ^             |
                  |               1|  |9            |
                  |                v  |             |
                  |             +--------+          |
                  |             |        |<-+       |
                  |             |  Init  |  |3,5,6  |9
                  |             |        |--+ 7,8   |
                 9|             +--------+          |
                  |                  |              |
                  |               2,4|              |
                  |                  v              |
               +--------+   7   +--------+          |
               |        |------>|        |----------+
               |  Deg   |       |   Up   |
               |        |<------|        |
               +--------+   8   +--------+
                                   |  ^
                                   |  |
                                   +--+
                                 2,3,4,5,6

Рисунок 4. Диаграмма состояний FSM канала LMP TE.


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

11.3. FSM канала данных

FSM определяет состояния и логику работы канала данных в рамках канала LMP TE. Работа канала данных описывается состояниями и событиями FSM. Каналы данных могут находиться в активном (передача), когда через них передаются сообщения Test, или в пассивном (прием), когда сообщения Test передаются через них. Для обеспечения ясности приведены две FSM для активного и пассивного режима, а набор состояний и событий определен один.

11.3.1. Состояния канала данных

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

Down

Канал данных не включен в пул ресурсов (т. е., канал не обслуживается).

Test

Канал данных тестируется и через него периодически передаются сообщения LMP Test.

PasvTest

Канал данных был проверен входящими тестовыми сообщениями.

Up/Free

Канал данных успешно протестирован и сейчас включен в пул ресурсов (обслуживается). Однако канал еще не выделен для передачи трафика.

Up/Alloc

Канал выделен для передачи трафика.

11.3.2. События канала данных

События канала данных создаются программами обработки пакетов и FSM связанного канала управления и канала TE.

Каждое событие имеет номер и символьное имя, представленные ниже.

  1. evCCUp — поднят (up) первый активный канал управления.

  2. evCCDown — потеряна связность с соседом LMP. Это говорит об отказе на последнем канале управления LMP между соседними узлами.

  3. evStartTst — внешнее событие, включающее передачу сообщений Test через канал данных.

  4. evStartPsv — внешнее событие, включающее прослушивание (прием) сообщений Test через канал данных.

  5. evTestOK — проверка канала завершилась успехом и этот канал может использоваться для организации пути.

    1. Это событие говорит об успешном завершении процедуры Link Verification (раздел 5) для данного канала и получении через канал управления сообщения TestStatusSuccess.

    2. Это событие показывает готовность канала для организации пути, но процедура Link Verification не использовалась. Для сигнализации в основной полосе канала управления организации этого канала может быть достаточно для проверки канала.

  6. evTestRcv — было получено сообщение Test через порт данных и передано сообщение TestStatusSuccess в канал управления.

  7. evTestFail — отрицательный результат процедуры проверки канала, который мог быть обусловлен (a) получением сообщения TestStatusFailure или (b) завершением процедуры проверки без приема сообщения TestStatusSuccess или TestStatusFailure для канала данных.

  8. evPsvTestFail — отрицательный результат процедуры проверки канала, который показывает, что сообщение Test не было обнаружено и (a) время VerifyDeadInterval истекло или (b) процедура проверки завершилась до истечения времени VerifyDeadInterval.

  9. evLnkAlloc — канал данных выделен.

  10. evLnkDealloc — выделение канала данных отменено.

  11. evTestRet — завершился отсчет таймера повтора и сообщение Test передано заново.

  12. evSummaryFail — LinkSummary не соответствует порту данных.

  13. evLocalizeFail — для этого канала данных был обнаружен (локализован) отказ.

  14. evdcDown — канал данных больше не доступен.

11.3.3. Описание FSM активного канала данных

На рисунке 5 показана работа FSM активного канала данных LMP в форме диаграммы смены состояний FSM.

           +------+
           |      |<-------+
+--------->| Down |        |
|     +----|      |<-----+ |
|     |    +------+      | |
|     |5b   3|  ^        | |
|     |      |  |7       | |
|     |      v  |        | |
|     |    +------+      | |
|     |    |      |<-+   | |
|     |    | Test |  |11 | |
|     |    |      |--+   | |
|     |    +------+      | |
|     |     5a| 3^       | |
|     |       |  |       | |
|     |       v  |       | |
|12   |   +---------+    | |
|     +-->|         |14  | |
|         | Up/Free |----+ |
+---------|         |      |
          +---------+      |
             9| ^          |
              | |          |
              v |10        |
          +---------+      |
          |         |13    |
          |Up/Alloc |------+
          |         |
          +---------+

Рисунок 5. FSM активного канала данных.


11.3.4. Описание FSM пассивного канала данных

На рисунке 6 показана работа FSM пассивного канала данных LMP в форме диаграммы смены состояний FSM.

            +------+
            |      |<------+
+---------->| Down |       |
|     +-----|      |<----+ |
|     |     +------+     | |
|     |5b    4|  ^       | |
|     |       |  |8      | |
|     |       v  |       | |
|     |    +----------+  | |
|     |    | PasvTest |  | |
|     |    +----------+  | |
|     |       6|  4^     | |
|     |        |   |     | |
|     |        v   |     | |
|12   |    +---------+   | |
|     +--->| Up/Free |14 | |
|          |         |---+ |
+----------|         |     |
           +---------+     |
               9| ^        |
                | |        |
                v |10      |
           +---------+     |
           |         |13   |
           |Up/Alloc |-----+
           |         |
           +---------+

Рисунок 6. FSM пассивного канала данных.


12. Форматы сообщений LMP

Все сообщения LMP (за исключением в некоторых случаях сообщений Test, которые могут быть ограничены транспортным механизмом передачи сообщений по основному каналу) передаются по протоколу UDP через порт LMP (701).

12.1. Общий заголовок

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

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers  |      (резерв)         |    Flags      |    Msg Type   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          LMP Length           |          (резерв)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Все резервные (Reserved) поля следует устанавливать в 0 при передаче и игнорировать на приемной стороне.

Все значения указаны в сетевом порядке байтов (big-endian — сначала старший байт).

Vers (4 бита)

Номер версии протокола (1 для текущей версии).

Flags (8 битов)

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

0x01: ControlChannelDown

0x02: LMP Restart

Этот бит устанавливается для индикации отказа на узле и потери состояния управления LMP. Флаг может быть сброшен в 0 при получении сообщения Hello со значением RcvSeqNum, равным локальному TxSeqNum.

Msg Type (8 битов)

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

1 = Config

2 = ConfigAck

3 = ConfigNack

4 = Hello

5 = BeginVerify

6 = BeginVerifyAck

7 = BeginVerifyNack

8 = EndVerify

9 = EndVerifyAck

10 = Test

11 = TestStatusSuccess

12 = TestStatusFailure

13 = TestStatusAck

14 = LinkSummary

15 = LinkSummaryAck

16 = LinkSummaryNack

17 = ChannelStatus

18 = ChannelStatusAck

19 = ChannelStatusRequest

20 = ChannelStatusResponse

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

LMP Length (16 битов)

Общий размер данного сообщения LMP в байтах с учетом общего заголовка и последующих объектов переменного размера.

12.2. Формат объекта LMP

Сообщения LMP создаются с использованием объектов, каждый из которых идентифицируется классом (Object Class) и типом (Class-type). Каждый объект имеет имя, которое в данном документе всегда указывается заглавными буквами. Объекты LMP могут быть согласуемыми или несогласуемыми (указывается битом N в заголовке объекта). Согласуемые объекты могут использоваться для того, чтобы устройства могли согласовать некие значения. Несогласуемые объекты служат для анонсирования конкретных значений, которые не нужно или невозможно согласовать.

Все значения указываются в сетевом порядке байтов (т. е., big-endian).

Формат объекта LMP показан ниже.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|   C-Type    |     Class     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
//                     (содержимое объекта)                    //
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

N (1 бит)

Флаг N указывает возможность согласования объекта (N=1).

C-Type (7 битов)

Значение Class-type, уникальное в данном Object Class. Значения типов определены в разделе 13.

Class (8 битов)

Поле Class указывает тип объекта. Каждый объект имеет имя, которое в данном документе всегда указывается заглавными буквами.

Length (16 битов)

Указывает размер объекта в байтах с учетом полей N, C-Type, Class и Length.

12.3. Сообщения при согласовании параметров

12.3.1. Сообщение Config (Msg Type = 1)

Сообщения Config используются в фазе согласования канала управления LMP. Содержимое сообщений Config создается с использованием объектов LMP. Формат сообщения Config показан ниже.

   <Config Message> ::= <Common Header> <LOCAL_CCID> <MESSAGE_ID> <LOCAL_NODE_ID> <CONFIG>

Указанный выше порядок объектов следует соблюдать.

Объект MESSAGE_ID находится с зоне действия объекта LOCAL_CCID.

Сообщения Config должны передаваться периодически, пока не будет (1) получено сообщение ConfigAck или ConfigNack, (2) достигнуто предельное число повторов при отсутствии ConfigAck или ConfigNack или (3) получено сообщение Config от удаленного узла и «состязание» было проиграно (например, Node_Id удаленного узла больше локального Node_Id). Интервал повтора и предельное число попыток задаются в локальной конфигурации.

12.3.2. Сообщение ConfigAck (Msg Type = 2)

Сообщения ConfigAck служат для подтверждения приема сообщений Config и говорят о согласии со всеми предложенными в них параметрами.

   <ConfigAck Message> ::= <Common Header> <LOCAL_CCID> <LOCAL_NODE_ID>
                           <REMOTE_CCID> <MESSAGE_ID_ACK> <REMOTE_NODE_ID>

Указанный выше порядок объектов следует соблюдать.

Содержимое объектов REMOTE_CCID, MESSAGE_ID_ACK и REMOTE_NODE_ID должно копироваться из подтверждаемого сообщения Config.

12.3.3. Сообщение ConfigNack (Msg Type = 3)

Сообщения ConfigNack служат для подтверждения приема сообщений Config и говорят о несогласии с предложенными (несогласуемыми) параметрами или предлагают другие значения для согласуемых параметров. Параметры, по которым имеется согласие, недопустимо включать в сообщение ConfigNack Message. Формат сообщения ConfigNack показан ниже.

   <ConfigNack Message> ::= <Common Header> <LOCAL_CCID> <LOCAL_NODE_ID> <REMOTE_CCID>
                            <MESSAGE_ID_ACK> <REMOTE_NODE_ID> <CONFIG>

Указанный выше порядок объектов следует соблюдать.

Содержимое объектов REMOTE_CCID, MESSAGE_ID_ACK и REMOTE_NODE_ID должно копироваться из отвергаемого сообщения Config.

В сообщении Config может оказаться множество неприемлемых параметров.

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

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

Если полученное сообщение ConfigNack включает только согласуемые объекты CONFIG, в ответ следует передать новое сообщение SHOULD. В значениях объекта CONFIG в этом новом сообщении Config следует принимать во внимание приемлемые значения параметров из сообщения ConfigNack.

Если узел получает сообщение Config и распознает в нем объект CONFIG, но не распознает C-Type, в ответ должно быть передано сообщение ConfigNack, включающее неизвестный объект CONFIG.

12.4. Сообщение Hello (Msg Type = 4)

Формат сообщения Hello показан ниже.

   <Hello Message> ::= <Common Header> <LOCAL_CCID> <HELLO>

Указанный выше порядок объектов следует соблюдать.

Сообщения Hello должны передаваться периодически, хотя бы 1 раз каждые HelloInterval мсек. Если в течение интервала HelloDeadInterval не было получено ни одного сообщения Hello, предполагается отказ канала управления.

12.5. Сообщения для проверки канала

12.5.1. Сообщение BeginVerify (Msg Type = 5)

Сообщение BeginVerify передается через канал управления и служит для инициирования процесса проверки канала. Формат сообщения показан ниже.

   <BeginVerify Message> ::= <Common Header> <LOCAL_LINK_ID>
                             <MESSAGE_ID> [<REMOTE_LINK_ID>] <BEGIN_VERIFY>

Указанный выше порядок объектов следует соблюдать.

Для ограничения области действия Link Verification конкретным каналом TE Link поле Link_Id в объекте LOCAL_LINK_ID должно иметь ненулевое значение. Если это поле равно 0, каналы данных будут охватывать множество каналов TE и/или могут включать еще не организованный канал TE. В специальном случае установки локального значения Link_Id = 0 используется флаг Verify all Links объекта BEGIN_VERIFY для того, чтобы различить каналы данных, входящие во множество каналов TE, от тех каналов, которые еще не выделены для канала TE (см. раздел 5).

Если известно отображение между локальным и удаленным Link_Id, может включаться объект REMOTE_LINK_ID.

При включении объекта REMOTE_LINK_ID поле Link_Id в нем должно быть отлично от 0.

Сообщения BeginVerify должны передаваться периодически, пока (1) узел не получит сообщения BeginVerifyAck или BeginVerifyNack о восприятии или отказе от проверки или (2) не будет достигнуто предельное число повторов без BeginVerifyAck или BeginVerifyNack. Интервал и число повторов являются параметрами локальной конфигурации.

12.5.2. Сообщение BeginVerifyAck (Msg Type = 6)

При наличии готовности обрабатывать сообщения Test в ответ на прием сообщения BeginVerify должно передаваться сообщение BeginVerifyAck.

   <BeginVerifyAck Message> ::= <Common Header> [<LOCAL_LINK_ID>]
                                <MESSAGE_ID_ACK> <BEGIN_VERIFY_ACK> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

Если отображение между локальным и удаленным Link_Id известно или может быть определено из сообщения BeginVerify, может включаться объект LOCAL_LINK_ID.

При включении объекта LOCAL_LINK_ID поле Link_Id в нем должно быть отлично от 0.

Содержимое объекта MESSAGE_ID_ACK должно копироваться из подтверждаемого сообщения BeginVerify.

Объект VERIFY_ID содержит уникальное в рамках узла значение, выделяемое создателем сообщения BeginVerifyAck. Это значение служит для уникальной идентификации проверочных процессов (Verification) от множества соседей LMP и/или параллельных процедур Test между парой соседей LMP.

12.5.3. Сообщение BeginVerifyNack (Msg Type = 7)

При отсутствии готовности или желания обрабатывать сообщения Test в ответ на прием сообщения BeginVerify должно передаваться сообщение BeginVerifyNack.

<BeginVerifyNack Message> ::= <Common Header> [<LOCAL_LINK_ID>] <MESSAGE_ID_ACK> <ERROR_CODE>

Указанный выше порядок объектов следует соблюдать.

Содержимое объекта MESSAGE_ID_ACK должно копироваться из отвергаемого сообщения BeginVerify.

Если процесс проверки не поддерживается, поле ERROR_CODE должно указывать, что процедура Link Verification не поддерживается.

Если процесс проверки поддерживается, но узел не способен начать процедуру, поле ERROR_CODE должно указывать Unwilling to verify. При получении BeginVerifyNack с таким значением ERROR_CODE узлу, инициировавшему BeginVerify, следует запланировать повтор BeginVerify по истечении Rf секунд (Rf задается локальным параметром).

Если механизм Verification Transport не поддерживается, поле ERROR_CODE должно указывать Unsupported verification transport mechanism.

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

Если узел, получивший сообщение BeginVerify, распознает объект BEGIN_VERIFY, но не распознает C-Type, поле ERROR_CODE должно указывать Unknown object C-Type.

12.5.4. Сообщение EndVerify (Msg Type = 8)

Сообщение EndVerify передается через канал управления и служит для прерывания процесса тестирования канала. Сообщение EndVerify может передаваться в любой момент узлом, желающим прервать процедуру Verify. Формат сообщения показан ниже.

   <EndVerify Message> ::=<Common Header> <MESSAGE_ID> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

Сообщения EndVerify передаются периодически, пока не будет (1) получено сообщение EndVerifyAck или (2) исчерпано число повторов без получения EndVerifyAck. Интервал повтора и число попыток задаются параметрами локальной конфигурации.

12.5.5. Сообщение EndVerifyAck (Msg Type = 9)

Сообщение EndVerifyAck передается через канал управления и служит для подтверждения окончания процесса проверки. Формат сообщения показан ниже.

   <EndVerifyAck Message> ::= <Common Header> <MESSAGE_ID_ACK> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

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

12.5.6. Сообщение Test (Msg Type = 10)

Сообщение Test передается через канал данных и служит для проверки физической связности канала. Если явно не указано иное, эти сообщения должны передаваться по протоколу UDP, как и все остальные сообщения LMP. Формат сообщения Test показан ниже.

   <Test Message> ::= <Common Header> <LOCAL_INTERFACE_ID> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

Отметим, что эти сообщения передаются через канал данных, а не канал управления. Механизм транспортировки сообщений Test согласуется с помощью поля Verify Transport Mechanism в объекте BEGIN_VERIFY и поля Verify Transport Response в объекте BEGIN_VERIFY_ACK (см. параграфы 13.8 и 13.9).

Локальный (передающий) узел передает данное сообщение Test периодически (по крайней мере один раз за каждые VerifyInterval мсек) в соответствующий канал данных, пока (1) не получит ответное сообщение TestStatusSuccess или TestStatusFailure по каналу управления от удаленного (отвечающего) узла или (2) не произойдет отказ на всех активных каналах управления между этими узлами. Удаленный узел будет передавать данное сообщение TestStatus через канал управления периодически, пока не получит соответствующее сообщение TestStatusAck или EndVerify.

12.5.7. Сообщение TestStatusSuccess (Msg Type = 11)

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

   <TestStatusSuccess Message> ::= <Common Header> <LOCAL_LINK_ID> <MESSAGE_ID>
                                   <LOCAL_INTERFACE_ID> <REMOTE_INTERFACE_ID> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

Содержимое объекта REMOTE_INTERFACE_ID должно браться из подтверждаемого сообщения Test.

12.5.8. Сообщение TestStatusFailure (Msg Type = 12)

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

   <TestStatusFailure Message> ::= <Common Header> <MESSAGE_ID> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

12.5.9. Сообщение TestStatusAck (Msg Type = 13)

Сообщение TestStatusAck служит для подтверждения приема сообщения TestStatusSuccess или TestStatusFailure.

   <TestStatusAck Message> ::= <Common Header> <MESSAGE_ID_ACK> <VERIFY_ID>

Указанный выше порядок объектов следует соблюдать.

Содержимое объекта MESSAGE_ID_ACK должно браться из подтверждаемого сообщения TestStatusSuccess или TestStatusFailure.

12.6. Сообщения о состоянии канала

12.6.1. Сообщение LinkSummary (Msg Type = 14)

Сообщения LinkSummary служат для синхронизации Interface_Id и сопоставления свойств каналов TE. Формат LinkSummary показан ниже.

<LinkSummary Message> ::= <Common Header> <MESSAGE_ID> <TE_LINK> <DATA_LINK> [<DATA_LINK>...]

Указанный выше порядок объектов следует соблюдать.

Обмен сообщениями LinkSummary может происходить в любой момент, когда на канале не выполняется процесс Verification. Сообщения LinkSummary должны передаваться периодически, пока (1) узел не получит ответного сообщения LinkSummaryAck или LinkSummaryNack или (2) не будет достигнуто предел повторов без получения LinkSummaryAck или LinkSummaryNack. Интервал передачи и число повторов задаются в локальной конфигурации.

12.6.2. Сообщение LinkSummaryAck (Msg Type = 15)

Сообщение LinkSummaryAck служит для индикации согласия на синхронизацию Interface_Id и восприятия/согласия всех параметров канала. Именно при получении этого сообщения локальный узел создает привязки Link_Id.

   <LinkSummaryAck Message> ::=  <Common Header> <MESSAGE_ID_ACK>

Указанный выше порядок объектов следует соблюдать.

12.6.3. Сообщение LinkSummaryNack (Msg Type = 16)

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

<LinkSummaryNack Message> ::= <Common Header> <MESSAGE_ID_ACK> <ERROR_CODE> [<DATA_LINK>...]

Указанный выше порядок объектов следует соблюдать.

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

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

Если получено сообщение LinkSummary с неприемлемыми несогласуемыми параметрами, поле ERROR_CODE должно указывать Unacceptable non-negotiable LINK_SUMMARY parameters.

Если получено сообщение LinkSummary с неприемлемыми согласуемыми параметрами, поле ERROR_CODE должно указывать Renegotiate LINK_SUMMARY parameters.

Если получено сообщение LinkSummary с непригодным объектом TE_LINK, поле ERROR_CODE должно указывать Invalid TE_LINK object.

Если получено сообщение LinkSummary с непригодным объектом DATA_LINK, поле ERROR_CODE должно указывать Invalid DATA_LINK object.»

Если получено сообщение LinkSummary с объектом TE_LINK, но тип C-Type не известен, поле ERROR_CODE должно указывать Unknown TE_LINK object C-Type.

Если получено сообщение LinkSummary с объектом DATA_LINK, но тип C-Type не известен, поле ERROR_CODE должно указывать Unknown DATA_LINK object C-Type.

12.7. Сообщения контроля отказов

12.7.1. Сообщение ChannelStatus (Msg Type = 17)

Сообщение ChannelStatus передается через канал управления и служит для уведомления соседа LMP о состоянии канала данных. Получивший ChannelStatus узел должен ответить сообщением ChannelStatusAck. Формат ChannelStatus показан ниже.

   <ChannelStatus Message> ::= <Common Header> <LOCAL_LINK_ID> <MESSAGE_ID> <CHANNEL_STATUS>

Указанный выше порядок объектов следует соблюдать.

Если объект CHANNEL_STATUS не содержит ни одного Interface_Id, это говорит об отказе канала TE целиком.

12.7.2. Сообщение ChannelStatusAck (Msg Type = 18)

Сообщение ChannelStatusAck служит для подтверждения приема ChannelStatus. Формат сообщения показан ниже.

   <ChannelStatusAck Message> ::= <Common Header> <MESSAGE_ID_ACK>

Указанный выше порядок объектов следует соблюдать.

Содержимое объекта MESSAGE_ID_ACK должно копироваться из подтверждаемого сообщения ChannelStatus.

12.7.3. Сообщение ChannelStatusRequest (Msg Type = 19)

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

   <ChannelStatusRequest Message> ::= <Common Header> <LOCAL_LINK_ID>
                                      <MESSAGE_ID> [<CHANNEL_STATUS_REQUEST>]

Указанный выше порядок объектов следует соблюдать.

Если объект CHANNEL_STATUS_REQUEST не включен в сообщение, ChannelStatusRequest будет служить запросом состояния всех каналов данных в TE Link.

12.7.4. Сообщение ChannelStatusResponse (Msg Type = 20)

Сообщение ChannelStatusResponse служит для подтверждения приема ChannelStatusRequest и уведомления соседа LMP о состоянии каналов данных. Формат сообщения показан ниже.

   <ChannelStatusResponse Message> ::= <Common Header> <MESSAGE_ID_ACK> <CHANNEL_STATUS>

Указанный выше порядок объектов следует соблюдать.

Содержимое объекта MESSAGE_ID_ACK должно копироваться из подтверждаемого сообщения ChannelStatusRequest.

13. Определения объектов LMP

13.1. Класс CCID (Control Channel ID)

Class = 1
C-Type = 1, LOCAL_CCID
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            CC_Id                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

CC_Id 32 бита

Это значение должно отличаться от 0 и быть уникальным в масштабе узла. CC_Id указывает канал управления, который отправитель связывает с сообщением.

Объект не согласуется.

C-Type = 2, REMOTE_CCID
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             CC_Id                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

CC_Id 32 бита

Это значение указывает CC_Id удаленного узла и должен отличаться от 0.

Объект не согласуется.

13.2. Класс NODE_ID

Class = 2
C-Type = 1, LOCAL_NODE_ID
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Node_Id (4 байта)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Node_Id

Это значение указывает узел, создавший пакет LMP.

Объект не согласуется.

C-Type = 2, REMOTE_NODE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Node_Id (4 байта)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Node_Id

Это значение указывает удаленный узел.

Объект не согласуется.

13.3. Класс LINK_ID

Class = 3
C-Type = 1, IPv4 LOCAL_LINK_ID
C-Type = 2, IPv4 REMOTE_LINK_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Link_Id (4 байта)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C-Type = 3, IPv6 LOCAL_LINK_ID
C-Type = 4, IPv6 REMOTE_LINK_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                        Link_Id (16 байтов)                    +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 5, Unnumbered LOCAL_LINK_ID
C-Type = 6, Unnumbered REMOTE_LINK_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Link_Id (4 байта)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Link_Id

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

Для REMOTE_LINK_ID указывает Link_Id удаленного узла и должно быть отлично от 0.

Объект не согласуется.

13.4. Класс INTERFACE_ID

Class = 4
C-Type = 1, IPv4 LOCAL_INTERFACE_ID
C-Type = 2, IPv4 REMOTE_INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Interface_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 3, IPv6 LOCAL_INTERFACE_ID
C-Type = 4, IPv6 REMOTE_INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                       Interface_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 5, Unnumbered LOCAL_INTERFACE_ID
C-Type = 6, Unnumbered REMOTE_INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Interface_Id (4 байта)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Interface_Id

Для LOCAL_INTERFACE_ID это значение указывает канал данных, оно должно отличаться от 0 и быть уникальным в масштабе узла.

Для REMOTE_INTERFACE_ID это значение указывает канал данных на удаленном узле и должно отличаться от 0.

Объект не согласуется.

13.5. Класс MESSAGE_ID

Class = 5
C-Type=1, MessageId
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Message_Id                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Message_Id

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

Объект не согласуется.

C-Type = 2, MessageIdAck
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Message_Id                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Message_Id

Поле Message_Id служит для идентификации подтверждаемого сообщения и копируется из объекта MESSAGE_ID в этом сообщении.

Объект не согласуется.

13.6. Класс CONFIG

Class = 6.
C-Type = 1, HelloConfig
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         HelloInterval         |      HelloDeadInterval        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

HelloInterval 16 битов

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

HelloDeadInterval 16 битов

Если в течение интервала HelloDeadInterval не было принято пакетов Hello, предполагается отказ канала управления. Значение HelloDeadInterval указывается в миллисекундах. Значение HelloDeadInterval должно быть больше HelloInterval и его следует делать не меньше 3 * HelloInterval.

Если в LMP не применяется ускоренный механизм keep-alive, в полях HelloInterval и HelloDeadInterval должно быть установлено значение 0.

13.7. Класс HELLO

Class = 7
C-Type = 1, Hello
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           TxSeqNum                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           RcvSeqNum                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

TxSeqNum 32 бита

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

Значение TxSeqNum=0 не разрешается, TxSeqNum=1 служит для обозначения первого сообщения Hello, передаваемого через канал управления.

RcvSeqNum 32 бита

Указывает порядковый номер последнего сообщения Hello, принятого через канал управления. Значение RcvSeqNum=0 служит для обозначения того, что сообщений Hello еще не было получено.

Объект не согласуется.

13.8. Класс BEGIN_VERIFY

Class = 8
C-Type = 1
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Flags                      |         VerifyInterval        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Number of Data Links                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    EncType    |   (резерв)    |  Verify Transport Mechanism   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       TransmissionRate                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Wavelength                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Flags 16 битов

Определенные в настоящее время флаги перечислены ниже.

0x0001 Verify all Links — проверить все каналы

Установленный флаг задает проверку всех не распределенных каналов, при сброшенном флаге проверяются лишь новые порты и компонентные соединения, добавленные в этот TE link.

0x0002 Data Link Type — тип канала данных

При установленном флаге будут проверяться порты, при сброшенном — компонентные соединения.

VerifyInterval 16 битов

Указывает интервал между последовательными сообщениями Test в миллисекундах.

Number of Data Links 32 бита

Указывает число проверяемых каналов данных.

EncType — 8 битов

Указывает тип кодирования для канала данных. Определенные значения EncType согласованы со значениями LSP Encoding Type из [RFC3471].

Verify Transport Mechanism 16 битов

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

Ниже приведен флаг, определенный для всех типов кодирования, все остальные флаги зависят от Encoding Type.

0x8000 — Payload (тестовое сообщение будет передаваться в поле данных — payload)

Возможна передача сообщений Test в поле данных (payload). Сообщение Test передается в форме пакета IP, как описано выше.

TransmissionRate 32 бита

Указывает скорость передачи канала данных, через который будут отправляться сообщения Test. Скорость указывается в бит/с с использованием формата IEEE floating-point.

Wavelength 32 бита

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

13.9. Класс BEGIN_VERIFY_ACK

Class = 9
C-Type = 1
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      VerifyDeadInterval       |   Verify_Transport_Response   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

VerifyDeadInterval 16 битов

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

Verify_Transport_Response 16 битов

Получатель сообщения BeginVerify (и будущий получатель сообщений TEST) выбирает транспортный механизм из числа предложенных отправителем сообщений Test. В отклике для проверки транспорта должен устанавливаться один и только один бит.

Объект не согласуется.

13.10. Класс VERIFY_ID

Class = 10
C-Type = 1
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Verify_Id                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Verify_Id 32 бита

Это значение служит для того, чтобы отделить сообщения Test разных каналов TE и/или партнеров LMP. Значение уникально в масштабе узла и выделяется получателем сообщения BeginVerify.

Объект не согласуется.

13.11. Класс TE_LINK

Class = 11
C-Type = 1, IPv4 TE_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Local_Link_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Remote_Link_Id (4 байта)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C-Type = 2, IPv6 TE_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Local_Link_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Remote_Link_Id (16 байтов)               +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 3, Unnumbered TE_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Local_Link_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Remote_Link_Id (4 байта)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Flags 8 битов

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

0x01 — поддерживается контроль отказов:

0x02 — поддерживается проверка канала.

Local_Link_Id

Указывает Link_Id для локального узла и должен отличаться от 0.

Remote_Link_Id

Указывает Link_Id для удаленного узла и должен отличаться от 0.

13.12. Класс DATA_LINK

Class = 12
C-Type = 1, IPv4 DATA_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Local_Interface_Id (4 байта)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Remote_Interface_Id (4 байта)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   //                        (Subobjects)                         //
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C-Type = 2, IPv6 DATA_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                   Local_Interface_Id (16 байтов)              +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                   Remote_Interface_Id (16 байтов)             +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   //                        (Subobjects)                         //
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 3, Unnumbered DATA_LINK
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |                    (резерв)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Local_Interface_Id (4 байта)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Remote_Interface_Id (4 байта)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   //                        (Subobjects)                         //
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Flags 8 битов

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

0x01 — тип интерфейса; флаг устанавливается для порта и сбрасывается для компонентного канала;

0x02 — распределенный канал; установленный флаг говорит о выделении канала для пользовательского трафика; при использовании одного Interface_Id для приемного и передающего каналов данных этот бит относится лишь к передающему интерфейсу;

0x04 — отказавший канал; установленный флаг говорит об отказе канала и его непригодности для пользовательского трафика.

Local_Interface_Id

Локальный идентификатор канала данных. Должен быть уникальным в масштабе узла и отличным от 0.

Remote_Interface_Id

Удаленный идентификатор канала данных. Должен быть отличным от 0.

Subobjects

Содержимое объекта DATA_LINK включает последовательность элементов данных переменного размера, называемых субобъектами (определены ниже в параграфе 13.12.1).

Объект DATA_LINK может включать более одного субобъекта. Может присутствовать несколько субобъектов одного типа, если для канала поддерживается множество свойств (capability).

13.12.1. Субобъекты канала данных

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

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------//--------------+
   |    Type       |    Length     |    (содержимое субобъекта)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--------------//---------------+

Type 8 битов

Поле Type указывает тип содержимого субобъекта. В настоящее время определены:

Type = 1, тип коммутации интерфейса;

Type = 2, длина волны.

Length 8 битов

Поле Length указывает размер субобъекта в байтах с учетом полей Type и Length. Значение поля Length должно быть кратно 4.

13.12.1.1. Субобъект типа 1 — тип коммутации интерфейса
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Type       |    Length     | Switching Type|   EncType     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Minimum Reservable Bandwidth                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Maximum Reservable Bandwidth                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Switching Type 8 битов

Служит для указания локального Interface Switching Type канала TE в соответствии с определением [RFC3471].

EncType 8 битов

Тип кодирования канала данных. Определенные значения EncType совместимы с LSP Encoding Type [RFC3471].

Minimum Reservable Bandwidth 32 бита

Максимальная резервируемая пропускная способность в бит/сек, указанная в формате IEEE floating point.

Maximum Reservable Bandwidth 32 бита

Минимальная резервируемая пропускная способность в бит/сек, указанная в формате IEEE floating point.

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

13.12.1.2. Субобъект типа 2 — длина волны
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Type       |    Length     |          (резерв)             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Wavelength                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

Wavelength 32 бита

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

13.13. Класс CHANNEL_STATUS

Class = 13
C-Type = 1, IPv4 INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Interface_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Interface_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C-Type = 2, IPv6 INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                       Interface_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                       Interface_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C-Type = 3, Unnumbered INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Interface_Id (4 байта)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Interface_Id (4 байта)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |A|D|                     Channel_Status                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Active (A) — 1 бит

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

Direction (D) 1 бит

Указывает направление (передача или прием) канала данных, заданного в объекте CHANNEL_STATUS. Установленный флаг говорит об использовании канала данных для передачи.

Channel_Status — 30 битов

Указывает состояние канала данных. Определенные значения приведены ниже, все прочие остаются в резерве.

1 Signal Okay (OK) — канал в рабочем состоянии.

2 Signal Degrade (SD) — некритичная ошибка, вызванная превышением порога BER, заданного конфигурацией.

3 Signal Fail (SF) — серьезные ошибки, включая (но не ограничиваясь) потерю сигнала (LOS13) или кадра (LOF14) и Line AIS.

Этот объект содержит один или множество идентификаторов Interface_Id, за которыми следует поле Channel_Status.

Для индикации состояния TE Link в целом должно указываться единственное значение Interface_Id = 0.

13.14. Класс CHANNEL_STATUS_REQUEST

Class = 14
C-Type = 1, IPv4 INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Interface_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Interface_Id (4 байта)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Этот объект содержит один или множество идентификаторов Interface_Id.

Поле Length этого объекта содержит значение 4 + 4N (в байтах), где N — число идентификаторов Interface_Id.

C-Type = 2, IPv6 INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                       Interface_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                       Interface_Id (16 байтов)                +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Этот объект содержит один или множество идентификаторов Interface_Id.

Поле Length этого объекта содержит значение 4 + 16N (в байтах), где N — число идентификаторов Interface_Id.

C-Type = 3, Unnumbered INTERFACE_ID
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Interface_Id (4 байта)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              :                                |
   //                             :                               //
   |                              :                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Interface_Id (4 байта)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Этот объект содержит один или множество идентификаторов Interface_Id.

Поле Length этого объекта содержит значение 4 + 4N (в байтах), где N — число идентификаторов Interface_Id.

Объект не согласуется.

13.15. Класс ERROR_CODE

Class = 20
C-Type = 1, BEGIN_VERIFY_ERROR
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          ERROR CODE                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Приведенные ниже битовые значения определены для сетевого порядка байтов (big-endian):

0x01 = процедура Link Verification не поддерживается;

0x02 = нежелание проверять;

0x04 = не поддерживается транспортный механизм проверки;

0x08 = ошибка конфигурации Link_Id;

0x10 = неизвестный объект C-Type.

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

Для индикации множества ошибок может быть установлено соответствующее множество битов.

Объект не согласуется.

Если сообщение BeginVerifyNack получено с Error Code 2, узлу-инициатору BeginVerify следует запланировать повторную передачу BeginVerify по истечении Rf (Rf является параметром локальной конфигурации).

C-Type = 2, LINK_SUMMARY_ERROR
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          ERROR CODE                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Приведенные ниже битовые значения определены для сетевого порядка байтов (big-endian):

0x01 = неприемлемые несогласуемые параметры LINK_SUMMARY;

0x02 =повторное согласование параметров LINK_SUMMARY;

0x04 = непригодный объект TE_LINK;

0x08 = непригодный объект DATA_LINK;

0x10 = неизвестный объект TE_LINK C-Type;

0x20 = неизвестный объект DATA_LINK C-Type.

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

Для индикации множества ошибок может быть установлено соответствующее множество битов.

Объект не согласуется.

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

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

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

[RFC4201] Kompella, K., Rekhter, Y., and L. Berger, «Link Bundling in MPLS Traffic Engineering (TE)», RFC 4201, October 2005.

[RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., «Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)», RFC 4202, October 2005.

[RFC2961] Berger, L., Gan, D., Swallow, G., Pan, P., Tommasi, F., and S. Molendini, «RSVP Refresh Overhead Reduction Extensions», RFC 2961, April 2001.

[RFC2402] Kent, S. and R. Atkinson, «IP Authentication Header», RFC 2402, November 1998.

[RFC2406] Kent, S. and R. Atkinson, «IP Encapsulating Security Payload (ESP)», RFC 2406, November 1998.

[RFC2407] Piper, D., «The Internet IP Security Domain of Interpretation for ISAKMP», RFC 2407, November 1998.

[RFC2409] Harkins, D. and D. Carrel, «The Internet Key Exchange (IKE)», RFC 2409, November 1998.

[RFC3471] Berger, L., Ed., «Generalized MPLS — Signaling Functional Description», RFC 3471, January 2003.

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

[RFC3630] Katz, D., Kompella, K., and D. Yeung, «Traffic Engineering (TE) Extensions to OSPF Version 2», RFC 3630, September 2003.

[RFC3784] Smit, H. and T. Li, «Intermediate System to Intermediate System (IS-IS) Extensions for Traffic Engineering (TE)», RFC 3784, June 2004.

[RFC2401] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 2401, November 1998.

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, «RSVP-TE: Extensions to RSVP for LSP Tunnels», RFC 3209, December 2001.

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

Существует множество атак, с которыми могут столкнуться протокольные сессии LMP. Ниже приведены несколько примеров:

  • злоумышленник может использовать подставные пакеты управления;

  • злоумышленник может изменить пакеты управления в пути передачи;

  • злоумышленник может повторно использовать собранные пакеты управления;

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

В этом разделе описан механизм защиты LMP на основе IPsec.

15.1. Требования безопасности

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

  • Защита LMP должна обеспечивать проверку подлинности, целостность и предотвращение повторного использования пакетов (replay).

  • Для трафика LMP защита конфиденциальности не требуется. Нужна лишь проверка подлинности для обеспечения уверенности в том, что пакеты управления (пакеты, переданные через LMP Control Channel) исходили от нужного источника и не были изменены в процессе передачи. Для пакетов LMP Test, передаваемых через каналы данных, защита не требуется.

  • Для трафика LMP защита отождествления конечных точек LMP в общем случае не требуется.

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

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

15.2. Механизмы защиты

Стек протоколов IPsec служит для защиты коммуникаций между парой партнеров на сетевом уровне. Этот стек протоколов описан в документах по архитектуре IP Security [RFC2401], IKE [RFC2409], IPsec AH [RFC2402] и IPsec ESP [RFC2406]. Протокол IKE обеспечивает управления ключами в сетях IP, а протоколы AH и ESP служат для защиты трафика IP. IKE определен применительно к протоколу IP.

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

  1. Реализациям LMP на основе протоколов IPsec следует поддерживать режим ручной установки ключей.

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

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

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

  2. Должен поддерживаться протокол IPsec ESP с трейлерной аутентификацией в туннельном режиме.

  3. Реализации должны поддерживать протоколы аутентифицированного обмена ключами. Должен применяться протокол IKE [RFC2409] в качестве протокола обмена ключами, если партнеры согласовали динамическую установку ключей.

  4. Реализации должны использовать IPsec DOI [RFC2407].

  5. Для протокола IKE идентификаторы SA, согласованные в Quick Mode, представляют трафик, для которого партнеры согласовали защиту, и включают информацию о пространстве адресов, протоколе и портах.

    При работе LMP на основе IPsec рекомендуется включать в поля данных идентификаторов для режима Quick перечисленную ниже информацию.

    Идентификаторы должны иметь тип адресов IP, а в качестве значений идентификаторов следует указывать IP-адреса коммуникационных партнеров.

    В поле протокола должно быть указано UDP. В поле порта следует указывать значение 0 для индикации того, что номера портов следует игнорировать. Это подразумевает, что весь трафик UDP между партнерами будет передаваться через туннель IPsec. Если реализация поддерживает селекторы по номерам портов, это позволяет сделать селектор более точным, указав поле порта LMP. Однако, если партнер не использует селекторов по номерам портов, реализация должна вернуться к использованию в поле порта значения 0.

  6. Должен поддерживаться «агрессивный» режим согласования IKE.

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

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

    Через один криптоканал может быть организовано множество каналов управления. При использовании сообщений LMP Hello для контроля состояния канала управления важно принимать во внимание, что отказ keep-alive в канале управления может быть следствием отказа в криптоканале. Ниже описан метод, рекомендуемый для обеспечения корректной работы коммуникационного пути LMP.

    • Если LMP Hello говорит об отказе в канале управления, переключитесь на другой канал и/или попытайтесь организовать новый канал управления.

    • Обеспечьте работоспособность каналов управления с помощью сообщений LMP Hello. Если на всех каналах управления зафиксированы отказы и нет возможности создать новый канал управления, отключите (удалите) все имеющиеся каналы управления, а также криптоканал (IKE SA и все IPsec SA).

    • Организуйте криптоканал заново. Отказ при организации криптоканала служит индикатором невозможности коммуникаций LMP.

    • Активизируйте канал управления. Отказ при организации канала управления служит индикатором невозможности коммуникаций LMP.

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

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

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

Однако следует отметить уязвимость агрессивного режима к пассивным атакам на службы. Использование общего секрета (групповой секрет) множеством партнеров настоятельно не рекомендуется, поскольку это открывает возможность для организации MITM19атак.

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

Если требуется проверка подлинности на основе заранее распространенного общего ключа (pre-shared key), следует применять агрессивный режим. Значения общих заранее распространенных ключей аутентификации IKE следует защищать, подобно паролям учетных записей пользователей.

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

Агентство IANA выделило номер 701 для порта LMP.

Ниже приведены рекомендации для IANA в части распределения значения в каждом пространстве имен LMP. Диапазоны распределяемых значений поделены на Private Use, Expert Review и Standards Action (в соответствии с [RFC2434]).

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

Распределение значений из пространств LMP по процедуре Expert Review осуществляется экспертами, назначенными IESG. Данный документ предполагает использование значений из этих диапазонов лишь для экспериментальных расширений и выделение значений должно сопровождаться RFC со статусом Experimental. Если такие расширения будут сочтены полезными для развертывания, их следует описать в RFC со статусом Standards Track и им должны быть выделены значения из диапазонов Standards Action.

Выделение значений из диапазонов LMP по процедуре Standards Action должно документироваться в Standards Track RFC, которые обычно подаются рабочими группами IETF и в любом случае должны соответствовать обычным процедурам IETF для документов со статусом Proposed Standards.

Резервные биты LMP Common Header следует распределять по процедуре Standards Action, в соответствии с правилами, описанными в [RFC2434].

LMP определяет несколько пространств имен, для которых требуется управление:

  • LMP Message Type (тип сообщения);

  • LMP Object Class (класс объекта);

  • LMP Object Class type (C-Type) (тип класса объектов, который уникален в рамках Object Class);

  • LMP Sub-object Class type (Type) (тип класса субобъектов, который уникален в рамках Object Class).

Пространство LMP Message Type следует распределять в соответствии с правилами, заданными в [RFC2434], — значения 0 — 127 распределяются по процедуре Standards Action, 128 — 240 по процедуре Expert Review, а 241 — 255 резервируются для Private Use.

Пространство LMP Object Class следует распределять в соответствии с правилами, заданными в [RFC2434], — значения 0 — 127 распределяются по процедуре Standards Action, 128 — 247 по процедуре Expert Review, а 248 — 255 резервируются для Private Use.

Правила распределения значений LMP Object Class являются частью определения конкретного класса. Определение Class должно включать описание правил выделения значений Object Class.

Правила распределения значений LMP Sub-object Class являются частью определения конкретного класса. Определение Class должно включать описание правил выделения значений для субобъектов.

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

Пространство имен LMP Message Type.

Сообщение

Тип

Config

1

ConfigAck

2

ConfigNack

3

Hello

4

BeginVerify

5

BeginVerifyAck

6

BeginVerifyNack

7

EndVerify

8

EndVerifyAck

9

Test

10

TestStatusSuccess

11

TestStatusFailure

12

TestStatusAck

13

LinkSummary

14

LinkSummaryAck

15

LinkSummaryNack

16

ChannelStatus

17

ChannelStatusAck

18

ChannelStatusRequest

19

ChannelStatusResponse

20

Пространства имен LMP Object Class и Class type (C-Type)

CCID Class name (1)

Пространство типов CCID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • LOCAL_CCID (C-Type = 1)

  • REMOTE_CCID (C-Type = 2)

NODE_ID Class name (2)

Пространство типов NODE ID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • LOCAL_NODE_ID (C-Type = 1)

  • REMOTE_NODE_ID (C-Type = 2)

LINK_ID Class name (3)

Пространство типов LINK_ID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 LOCAL_LINK_ID (C-Type = 1)

  • IPv4 REMOTE_LINK_ID (C-Type = 2)

  • IPv6 LOCAL_LINK_ID (C-Type = 3)

  • IPv6 REMOTE_LINK_ID (C-Type = 4)

  • Unnumbered LOCAL_LINK_ID (C-Type = 5)

  • Unnumbered REMOTE_LINK_ID (C-Type = 6)

INTERFACE_ID Class name (4)

Пространство типов INTERFACE_ID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 LOCAL_INTERFACE_ID (C-Type = 1)

  • IPv4 REMOTE_INTERFACE_ID (C-Type = 2)

  • IPv6 LOCAL_INTERFACE_ID (C-Type = 3)

  • IPv6 REMOTE_INTERFACE_ID (C-Type = 4)

  • Unnumbered LOCAL_INTERFACE_ID (C-Type = 5)

  • Unnumbered REMOTE_INTERFACE_ID (C-Type = 6)

MESSAGE_ID Class name (5)

Пространство типов MESSAGE_ID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • MESSAGE_ID (C-Type = 1)

  • MESSAGE_ID_ACK (C-Type = 2)

CONFIG Class name (6)

Пространство типов CONFIG Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • HELLO_CONFIG (C-Type = 1)

HELLO Class name (7)

Пространство типов HELLO Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • HELLO (C-Type = 1)

BEGIN_VERIFY Class name (8)

Пространство типов BEGIN_VERIFY Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • Type 1 (C-Type = 1)

BEGIN_VERIFY_ACK Class name (9)

Пространство типов BEGIN_VERIFY_ACK Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • Type 1 (C-Type = 1)

VERIFY_ID Class name (10)

Пространство типов VERIFY_ID Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • Type 1 (C-Type = 1)

TE_LINK Class name (11)

Пространство типов TE_LINK Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 TE_LINK (C-Type = 1)

  • IPv6 TE_LINK (C-Type = 2)

  • Unnumbered TE_LINK (C-Type = 3)

DATA_LINK Class name (12)

Пространство типов DATA_LINK Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 DATA_LINK (C-Type = 1)

  • IPv6 DATA_LINK (C-Type = 2)

  • Unnumbered DATA_LINK (C-Type = 3)

Пространство имен DATA_LINK Sub-object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 127 выделяются по процедуре Standards Action, 128 — 247 по процедуре Expert Review, а 248 — 255 резервируются для Private Use.

  • Interface Switching Type (sub-object Type = 1)

  • Wavelength (sub-object Type = 2)

CHANNEL_STATUS Class name (13)

Пространство типов CHANNEL_STATUS Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 INTERFACE_ID (C-Type = 1)

  • IPv6 INTERFACE_ID (C-Type = 2)

  • Unnumbered INTERFACE_ID (C-Type = 3)

CHANNEL_STATUS_REQUESTClass name (14)

Пространство типов CHANNEL_STATUS_REQUEST Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • IPv4 INTERFACE_ID (C-Type = 1)

  • IPv6 INTERFACE_ID (C-Type = 2)

  • Unnumbered INTERFACE_ID (C-Type = 3)

ERROR_CODE Class name (20)

Пространство типов ERROR_CODE Object Class следует распределять в соответствии с правилами [RFC2434] — значения 0 — 111 выделяются по процедуре Standards Action, 112 — 119 по процедуре Expert Review, а 120 — 127 резервируются для Private Use.

  • BEGIN_VERIFY_ERROR (C-Type = 1)

  • LINK_SUMMARY_ERROR (C-Type = 2)

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

Авторы благодарны Andre Fredette за большой вклад в этот документ. Спасибо также Ayan Banerjee, George Swallow, Adrian Farrel, Dimitri Papadimitriou, Vinay Ravuri и David Drysdale за их значимые комментарии и предложения. Спасибо John Yu, Suresh Katukam и Greg Bernstein за их полезные предложения в части применимости канала управления в основной полосе (in-band).

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

Jonathan P. Lang

Sonos, Inc.

223 E. De La Guerra St.

Santa Barbara, CA 93101

EMail: jplang@ieee.org

Krishna Mitra

Independent Consultant

EMail: kmitra@earthlink.net

John Drake

Calient Networks

5853 Rue Ferrari

San Jose, CA 95138

EMail: jdrake@calient.net

Kireeti Kompella

Juniper Networks, Inc.

1194 North Mathilda Avenue

Sunnyvale, CA 94089

EMail: kireeti@juniper.net

Yakov Rekhter

Juniper Networks, Inc.

1194 North Mathilda Avenue

Sunnyvale, CA 94089

EMail: yakov@juniper.net

Lou Berger

Movaz Networks

EMail: lberger@movaz.com

Debanjan Saha

IBM Watson Research Center

EMail: dsaha@us.ibm.com

Debashis Basak

Accelight Networks

70 Abele Road, Suite 1201

Bridgeville, PA 15017-3470

EMail: dbasak@accelight.com

Hal Sandick

Shepard M.S.

2401 Dakota Street

Durham, NC 27705

EMail: sandick@nc.rr.com

Alex Zinin

Alcatel

EMail: alex.zinin@alcatel.com

Bala Rajagopalan

Intel Corp.

2111 NE 25th Ave

Hillsboro, OR 97123

EMail: bala.rajagopalan@intel.com

Sankar Ramamoorthi

Juniper Networks, Inc.

1194 North Mathilda Avenue

Sunnyvale, CA 94089

EMail: sankarr@juniper.net

Информация для контактов

Jonathan P. Lang

Sonos, Inc.

829 De La Vina, Suite 220

Santa Barbara, CA 93101

EMail: jplang@ieee.org

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

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

nmalykh@protokols.ru

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

Copyright (C) The Internet Society (2005).

К этому документу применимы права, лицензии и ограничения, указанные в BCP 78, и, за исключением указанного там, авторы сохраняют свои права.

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

Интеллектуальная собственность

IETF не принимает какой-либо позиции в отношении действительности или объема каких-либо прав интеллектуальной собственности (Intellectual Property Rights или IPR) или иных прав, которые, как может быть заявлено, относятся к реализации или использованию описанной в этом документе технологии, или степени, в которой любая лицензия, по которой права могут или не могут быть доступны, не заявляется также применение каких-либо усилий для определения таких прав. Сведения о процедурах IETF в отношении прав в документах RFC можно найти в BCP 78 и BCP 79.

Копии раскрытия IPR, предоставленные секретариату IETF, и любые гарантии доступности лицензий, а также результаты попыток получить общую лицензию или право на использование таких прав собственности разработчиками или пользователями этой спецификации, можно получить из сетевого репозитория IETF IPR по ссылке http://www.ietf.org/ipr.

IETF предлагает любой заинтересованной стороне обратить внимание на авторские права, патенты или использование патентов, а также иные права собственности, которые могут потребоваться для реализации этого стандарта. Информацию следует направлять в IETF по адресу ietf-ipr@ietf.org.

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

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


1Traffic engineering — организация (построения) трафика.

2Link management protocol — протокол управления каналом.

3Dense wavelength division multiplexed — мультиплексирование по длине волны с высокой плотностью.

4Add-drop multiplexor — мультиплексор с ответвлением.

5Generalized MPLS — обобщенная коммутация по меткам.

6Time division multiplexed — мультиплексирование с разделением по времени.

7Wavelength division multiplexed — мультиплексирование с разделением по длине волны.

8Constrained SPF — поиск кратчайшего пути с учетом ограничений.

9Control Channel Id — идентификатор канала управления.

10Verify Transport Mechanism — механизм проверки транспорта.

11Loss of light.

12Так написано в оригинале, хотя это явно противоречит началу данного абзаца и приведенному ниже алгоритму. Указанное значение относится ко второму повтору, а не к первому, как написано в тексте. Прим. перев.

13Loss of signal.

14Loss of frame.

15Этот документ признан устаревшим и заменен RFC 4302 и RFC 4305. Прим. перев.

16Этот документ признан устаревшим и заменен RFC 4303 и RFC 4305. Прим. перев.

17Этот документ признан устаревшим и заменен RFC 4306. Прим. перев.

18Этот документ признан устаревшим и заменен RFC 4301. Прим. перев.

19Man-in-the-middle — атака с перехватом и изменением данных в пути при участии человека.

Рубрика: RFC | Комментарии к записи RFC 4204 Link Management Protocol (LMP) отключены