RFC 4490 Using the GOST 28147-89, GOST R 34.11-94, GOST R 34.10-94, and GOST R 34.10-2001 Algorithms with Cryptographic Message Syntax (CMS)

Network Working Group                                   S. Leontiev, Ed.
Request for Comments: 4490                                G. Chudov, Ed.
Category: Standards Track                                     CRYPTO-PRO
                                                                May 2006

Использование алгоритмов ГОСТ 28147-89, ГОСТ Р R 34.11-94, ГОСТ Р GOST R 34.10-94 и ГОСТ Р 34.10-2001 с синтаксисом криптографический сообщений (CMS)

Using the GOST 28147-89, GOST R 34.11-94,

GOST R 34.10-94, and GOST R 34.10-2001 Algorithms with

Cryptographic Message Syntax (CMS)

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

Данный документ описывает соглашения по использованию криптографических алгоритмов GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001 и GOST R 34.11-94 с синтаксисом криптографических сообщений (CMS1). CMS применяется для цифровых подписей, дайджестов, аутентификации и шифрования произвольного содержимого сообщений.

1. Введение

Синтаксис криптографических сообщений [CMS] используется для цифровых подписей, дайджестов, аутентификации и шифрования произвольного содержимого сообщений. Эта дополняющая спецификация описывает использование криптографических алгоритмов GOST 28147-89 [GOST28147], GOST R 34.10-94 [GOST3431095, GOSTR341094], GOST R 34.10-2001 [GOST3431004, GOSTR341001] и GOST R 34.11-94 [GOST3431195, GOSTR341194] в CMS, предложенное компанией «Крипто-Про» в рамках «Соглашения о совместимости СКЗИ». Данный документ не описывает упомянутые криптографические алгоритмы, которые определены в соответствующих национальных стандартах.

Значения CMS создаются с использованием синтаксиса ASN.1 [X.208-88] и представления BER [X.209-88]. Данный документ задает идентификаторы для каждого алгоритма, включая ASN.1 для идентификаторов объектов и всех связанных параметров.

Определены поля CMS, используемые каждым алгоритмом.

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

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

2. Алгоритмы хеширования сообщений

В этом разделе описаны соглашения для использования алгоритма GOST R 34.11-94 в CMS.

Хэш-значения «отпечатков» (digest) размещаются в поле digest структуры DigestedData и подписанном атрибуте Message Digest. Кроме того, хэш-значения являются входными данными для алгоритмов подписи.

2.1. Алгоритм GOST R 34.11-94

Хэш-функция GOST R 34.11-94 разработана Главным управлением безопасности связи Федерального агентства правительственной связи и информации, а также Всероссийским НИИ Стандартизации. Алгоритм GOST R 34.11-94 дает на выходе 256-битовое хэш-значение для произвольного конечного размера входных данных. Данный документ не включает полной спецификации GOST R 34.11-94, которую можно найти в [GOSTR341194] на русском языке. В работе [Schneier95], параграф 18.11, стр. 454 приведено краткое техническое описание алгоритма на английском языке.

Идентификатор алгоритма хэширования GOST R 34.11-94 приведен ниже.

   id-GostR3411-94 OBJECT IDENTIFIER ::=
         { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) gostr3411(9) }

В структуре AlgorithmIdentifier должно присутствовать поле parameters и это поле должно иметь значение NULL. Реализации могут воспринимать структуры GOST R 34.11-94 AlgorithmIdentifier как без поля parameters так и со полем, имеющим значение NULL.

Эта функция всегда используется с принятым по умолчанию id-GostR3411-94-CryptoProParamSet (см. параграф 8.2 в [CPALGS]).

При наличии подписанного атрибута хэш DigestedData содержит 32-байтовый «отпечаток» (хэш) в представлении little-endian

   GostR3411-94-Digest ::= OCTET STRING (SIZE (32))

3. Алгоритмы подписи

В этом разделе указаны процедуры CMS для алгоритмов цифровой подписи GOST R 34.10-94 и GOST R 34.10-2001.

Идентификаторы алгоритмов размещаются в поле signatureAlgorithm структуры SignerInfo, вложенной в структуру SignedData. Идентификаторы алгоритма указываются также в поле signatureAlgorithm структуры SignerInfo атрибутов удостоверяющей подписи.

Значения подписи размещаются в поле signature структуры SignerInfo, вложенной в SignedData, а также в поле signature структуры SignerInfo атрибутов удостоверяющей подписи.

3.1. Алгоритм GOST R 34.10-94

Алгоритм GOST R 34.10-94 разработан Главным управлением безопасности связи Федерального агентства правительственной связи и информации, а также Всероссийским НИИ Стандартизации. Этот алгоритм подписи должен использоваться совместно с алгоритмом хеширования сообщений GOST R 34.11-94. В данном документе не приводится полной спецификации алгоритма GOST R 34.10-94, которая приведена в [GOSTR341094] на русском языке, а краткое описание на английском языке содержится в работе [Schneier95] (глава 20.3, стр. 495).

Идентификатор алгоритма открытого ключа для алгоритма цифровой подписи GOST R 34.10-94 приведен ниже

   id-GostR3410-94-signature OBJECT IDENTIFIER ::= id-GostR3410-94

Идентификатор id-GostR3410-94 определен в параграфе 2.3.1 [CPPK].

Алгоритм цифровой подписи GOST R 34.10-2001 создает подпись в виде двух 256-битовых чисел r и s. Ее представление в форме строки октетов включает 64, из которых первые 32 содержат представление s в формате big-endian, а вторые 32 — представление r в том же формате.

   GostR3410-94-Signature ::= OCTET STRING (SIZE (64))

3.2. Алгоритм GOST R 34.10-2001

Алгоритм GOST R 34.10-2001 разработан Главным управлением безопасности связи Федерального агентства правительственной связи и информации, а также Всероссийским НИИ Стандартизации. Этот алгоритм должен применяться вместе с GOST R 34.11-94. Данный документ не содержит полной спецификации GOST R 34.10-2001, она приведена в [GOSTR341001].

Идентификатор алгоритма открытого ключа для GOST R 34.10-2001 приведен ниже.

   id-GostR3410-2001-signature OBJECT IDENTIFIER ::= id-GostR3410-2001

Определение id-GostR3410-2001 дано в параграфе 2.3.2 документа [CPPK].

Алгоритм цифровой подписи GOST R 34.10-2001 создает подпись в виде двух 256-битовых чисел r и s. Ее представление в форме строки октетов включает 64 октета, из которых первые 32 содержат представление s в формате big-endian, а вторые 32 — представление r в том же формате.

   GostR3410-2001-Signature ::= OCTET STRING (SIZE (64))

4. Алгоритмы управления ключами

В этом разделе описаны алгоритмы согласования и доставки ключей, основанные на алгоритмах создания производных ключей VKO GOST R 34.10-94 и VKO GOST R 34.10-2001, а также алгоритмах шифрования ключей CryptoPro и GOST 28147-89, описанных в [CPALGS]. Они должны применяться только с алгоритмом шифрования содержимого GOST 28147-89, рассмотренным в разделе 5 данного документа.

4.1. Алгоритмы согласования ключей

В этом параграфе указаны соглашения, применяемые реализациями CMS, которые поддерживают согласование ключей с использованием алгоритмов VKO GOST R 34.10-94 и VKO GOST R 34.10-2001, описанных в [CPALGS].

Идентификаторы алгоритма согласования ключей размещаются в полях EnvelopedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm и AuthenticatedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm.

Зашифрованные ключи шифрования содержимого размещаются в поле EnvelopedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey. Зашифрованные ключи проверки подлинности сообщений размещаются в поле AuthenticatedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey.

4.1.1. Алгоритмы согласования на базе открытых ключей GOST R 34.10-94/2001

Использование поля EnvelopedData RecipientInfos KeyAgreeRecipientInfo описано ниже.

Поле version должно иметь значение 3.

В поле originator должно помещаться значение originatorKey. Поле algorithm в originatorKey должно содержать идентификатор объекта id-GostR3410-94 или id-GostR3410-2001 и соответствующие параметры (определены в параграфах 2.3.1 и 2.3.2 [CPPK]).

В поле originatorKey publicKey должен указываться открытый ключ отправителя.

В поле keyEncryptionAlgorithm должен помещаться идентификатор алгоритма id-GostR3410-94-CryptoPro-ESDH или id-GostR3410-2001-CryptoPro-ESDH в зависимости от алгоритма открытого ключа получателя. Полем идентификатора параметров для этих алгоритмов является KeyWrapAlgorithm и этот параметр должен присутствовать. KeyWrapAlgorithm указывает алгоритм и параметры, применяемые для шифрования ключа шифрования содержимого с помощью парного ключа шифрования ключей, созданного с использованием алгоритма согласования ключей VKO GOST R 34.10-94 или VKO GOST R 34.10-2001.

Синтаксис идентификаторов и параметров алгоритмов показан ниже.

        id-GostR3410-94-CryptoPro-ESDH OBJECT IDENTIFIER ::=
            { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)
              gostR3410-94-CryptoPro-ESDH(97) }

        id-GostR3410-2001-CryptoPro-ESDH OBJECT IDENTIFIER ::=
            { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)
              gostR3410-2001-CryptoPro-ESDH(96) }

        KeyWrapAlgorithm ::= AlgorithmIdentifier

Если keyEncryptionAlgorithm = id-GostR3410-94-CryptoPro-ESDH, в качестве KeyWrapAlgorithm должен указываться идентификатор id-Gost28147-89-CryptoPro-KeyWrap.

        id-Gost28147-89-CryptoPro-KeyWrap OBJECT IDENTIFIER ::=
            { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) keyWrap(13) cryptoPro(1) }

Алгоритм шифрования ключей CryptoPro описан в параграфах 6.3 и 6.4 [CPALGS].

Если keyEncryptionAlgorithm = id-GostR3410-2001-CryptoPro-ESDH, в качестве KeyWrapAlgorithm должен указываться идентификатор алгоритма id-Gost28147-89-CryptoPro-KeyWrap или id-Gost28147-89-None-KeyWrap.

        id-Gost28147-89-None-KeyWrap OBJECT IDENTIFIER ::=
            { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) keyWrap(13) none(0) }

Алгоритм шифрования ключей ГОСТ 28147-89 описан в параграфах 6.1 и 6.2 [CPALGS].

Должны присутствовать параметры алгоритма KeyWrapAlgorithm, синтаксис которых показан ниже.

        Gost28147-89-KeyWrapParameters ::=
          SEQUENCE {
              encryptionParamSet Gost28147-89-ParamSet,
              ukm                OCTET STRING (SIZE (8)) OPTIONAL
          }
          Gost28147-89-ParamSet ::= OBJECT IDENTIFIER

Поле ukm в структуре Gost28147-89-KeyWrapParameters должно отсутствовать.

В структуре KeyAgreeRecipientInfo поле ukm должно присутствовать и включать 8 октетов.

Поле encryptedKey должно инкапсулировать Gost28147-89-EncryptedKey, где поле maskKey должно отсутствовать.

      Gost28147-89-EncryptedKey ::=   SEQUENCE {
        encryptedKey         Gost28147-89-Key,
        maskKey              [0] IMPLICIT Gost28147-89-Key OPTIONAL,
        macKey               Gost28147-89-MAC
      }

Для получения ключа шифрования KEK используется секретный ключ, соответствующий originatorKey publicKey, и открытый ключу получателя с алгоритмом VKO GOST R 34.10-94 или VKO GOST R 34.10-2001 (описаны в [CPALGS]).

Затем применяется алгоритм шифрования ключа, указанный в KeyWrapAlgorithm, для получения CEK_ENC, CEK_MAC, и UKM. Для всех операций шифрования применяется набор параметров encryptionParamSet структуры Gost28147-89-KeyWrapParameters.

Полученный в результате зашифрованный ключ (CEK_ENC) помещается в поле encryptedKey структуры Gost28147-89-EncryptedKey, код mac (CEK_MAC) в поле macKey этой структуры, а UKM в поле ukm структуры KeyAgreeRecipientInfo.

4.2. Алгоритмы доставки ключей

В этом разделе описаны соглашения, используемые реализациями CMS, которые поддерживают доставку ключей с помощью алгоритмов VKO GOST R 34.10-94 и VKO GOST R 34.10-2001, описанных [CPALGS].

Идентификатор алгоритма доставки ключей помещается в поле EnvelopedData RecipientInfos KeyTransRecipientInfo keyEncryptionAlgorithm.

Зашифрованный ключ шифрования содержимого для транспортировки помещается в поле EnvelopedData RecipientInfos KeyTransRecipientInfo encryptedKey.

4.2.1. Доставка на базе открытых ключей GOST R 34.10-94/2001

Использование поля EnvelopedData RecipientInfos KeyTransRecipientInfo рассмотрено ниже.

Поле version должно иметь значение 0 или 3.

keyEncryptionAlgorithm и параметры алгоритма должны совпадать с алгоритмом открытого ключа получателя и параметрами этого алгоритма.

encryptedKey включает в себя структуру GostR3410-KeyTransport, состоящую из зашифрованного ключа шифрования содержимого, значения MAC для него, параметров алгоритма GOST 28147-89, использованных при шифровании ключа, эфемерного открытого ключа отправителя и ключевого материала UKM (UserKeyingMaterial, см параграф 10.2.6 [CMS]).

Поле transportParameters должно присутствовать.

Поле ephemeralPublicKey должно присутствовать, а его параметры (при наличии) должны совпадать с параметрами открытого ключа получателя.

      GostR3410-KeyTransport ::= SEQUENCE {
        sessionEncryptedKey   Gost28147-89-EncryptedKey,
        transportParameters
          [0] IMPLICIT GostR3410-TransportParameters OPTIONAL
      }

      GostR3410-TransportParameters ::= SEQUENCE {
        encryptionParamSet   OBJECT IDENTIFIER,
        ephemeralPublicKey   [0] IMPLICIT SubjectPublicKeyInfo OPTIONAL,
        ukm                  OCTET STRING
      }

Ключ шифрования ключей KEK получается с использованием секретного ключа, соответствующего GostR3410-TransportParameters ephemeralPublicKey и открытому ключу получателя, на основе алгоритма VKO GOST R 34.10-94 или VKO GOST R 34.10-2001 (см. [CPALGS]).

Затем используется алгоритм CryptoPro для создания CEK_ENC, CEK_MAC и UKM с параметрами GostR3410-TransportParameters encryptionParamSet для всех операций шифрования.

Полученный в результате зашифрованный ключ (CEK_ENC) помещается в поле Gost28147-89-EncryptedKey encryptedKey, значение mac для него (CEK_MAC) — в поле Gost28147-89-EncryptedKey macKey, а UKM — в поле GostR3410-TransportParameters ukm.

5. Алгоритм шифрования содержимого

В этом разделе описаны соглашения, используемые реализациями CMS с поддержкой шифрования содержимого на основе алгоритма GOST 28147-89.

Идентификаторы алгоритма шифрования содержимого помещаются в поля EnvelopedData EncryptedContentInfo contentEncryptionAlgorithm и EncryptedData EncryptedContentInfo contentEncryptionAlgorithm.

Алгоритмы шифрования содержимого применяются для шифрования данных в полях EnvelopedData EncryptedContentInfo encryptedContent и EncryptedData EncryptedContentInfo encryptedContent.

5.1. Алгоритм GOST 28147-89

В этом параграфе описано использование алгоритма GOST 28147-89 для шифрования данных.

Алгоритм GOST 28147-89 полностью описан в документе [GOST28147] (на русском языке).

Этот документ задает для алгоритма идентификатор объекта (OID)

   id-Gost28147-89 OBJECT IDENTIFIER ::=
         { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) gost28147-89(21) }

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

     Gost28147-89-Parameters ::=
       SEQUENCE {
         iv                   Gost28147-89-IV,
         encryptionParamSet   OBJECT IDENTIFIER
        }

     Gost28147-89-IV ::= OCTET STRING (SIZE (8))

Набор encryptionParamSet задает соответствующие параметры Gost28147-89-ParamSetParameters (см. параграф 8.1 в [CPALGS]).

6. Алгоритмы MAC

В этом разделе описаны соглашения, используемые реализациями CMS, которые поддерживают коды аутентификации сообщений (MAC1) на основе GOST R 34.11-94.

Идентификатор алгоритма MAC указывается в поле macAlgorithm структуры AuthenticatedData.

Значения кодов MAC помещаются в поле mac структуры AuthenticatedData.

6.1. HMAC с GOST R 34.11-94

Функция HMAC_GOSTR3411(K,text) основана на хэш-функции GOST R 34.11-94, как определено в разделе 3 [CPALGS].

Идентификатор объекта (OID) для этого алгоритма приведен ниже.

   id-HMACGostR3411-94 OBJECT IDENTIFIER ::=
         { iso(1) member-body(2) ru(643) rans(2) cryptopro(2) hmacgostr3411(10) }

Данный алгоритм использует такие же параметры как алгоритм хеширования GOST R 34.11-94 и те же значения OID для их идентификации (см. [CPPK]).

7. Использование с S/MIME

В этом разделе описано применение определенных в данном документе алгоритмов совместно с S/MIME [RFC3851].

7.1. Параметр micalg

При использовании определенных в этом документе алгоритмов для параметра micalg следует устанавливать значение gostr3411-94, в остальных случаях должно указываться значение unknown.

7.2. Атрибут SMIMECapabilities

Значение SMIMECapability, указывающее поддержку алгоритма хэширования GOST R 34.11-94, представляет собой последовательность (SEQUENCE) с полем capabilityID, содержащим идентификатор алгоритма id-GostR3411-94 без параметров. DER-представление имеет вид

     30 08 06 06  2A 85 03 02  02 09

Значение SMIMECapability, указывающее поддержку алгоритма шифрования GOST 28147-89, представляет собой последовательность (SEQUENCE) с полем capabilityID, содержащим идентификатор алгоритма id-Gost28147-89 без параметров. DER-представление имеет вид

     30 08 06 06  2A 85 03 02  02 15

Если отправитель желает указать поддержку конкретного набора параметров, параметры SMIMECapability должны содержать структуру Gost28147-89-Parameters. Получатели должны игнорировать поле iv в структуре Gost28147-89-Parameters и предполагать, что отправитель поддерживает параметры, указанные в поле encryptionParamSet структуры Gost28147-89-Parameters.

DER-представление для SMIMECapability с индикацией поддержки GOST 28147-89 с id-Gost28147-89-CryptoPro-A-ParamSet (см. [CPALGS]) имеет вид

     30 1D 06 06  2A 85 03 02  02 15 30 13  04 08 00 00
     00 00 00 00  00 00 06 07  2A 85 03 02  02 1F 01

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

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

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

Параметры криптографического алгоритма влияют на его стойкость. Использовать параметры, не указанные в [CPALGS] не рекомендуется (см. раздел «Вопросы безопасности» в [CPALGS]).

Использовать один и тот же ключ для подписи и создания ключей не рекомендуется. При использовании подписанных документов CMS в качестве аналога подписанных человеком документов в контексте российского законодательства об электронной подписи [RFEDSL] сертификат подписывающей стороны должен включать расширение keyUsage, которое должно быть критическим, а включение keyEncipherment или keyAgreement в keyUsage недопустимо (см. [PROFILE], параграф 4.2.1.3). Приложение следует подавать на экспертизу в уполномоченную организацию для проверки в соответствии с целью использования и требованиями [RFEDSL], [RFLLIC] и [CRYPTOLIC].

9. Примеры

В приведенных здесь примерах используется тот же формат записи, что и в примерах [RFC4134] и для извлечения кода может применяться та же программа.

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

9.1. Подписанное сообщение

Это сообщение подписано с использованием примера сертификата из параграфа 4.2 [CPPK]. Для проверки подписи сообщения можно использовать открытый ключ key (x,y) из того же параграфа.

   0  296: SEQUENCE {
   4    9:  OBJECT IDENTIFIER signedData
  15  281:  [0] {
  19  277:   SEQUENCE {
  23    1:    INTEGER 1
  26   12:    SET {
  28   10:     SEQUENCE {
  30    6:      OBJECT IDENTIFIER id-GostR3411-94
  38    0:      NULL
         :      }
         :     }
  40   27:    SEQUENCE {
  42    9:     OBJECT IDENTIFIER data
  53   14:     [0] {
  55   12:      OCTET STRING 73 61 6D 70 6C 65 20 74 65 78 74 0A
         :      }
         :     }
  69  228:    SET {
  72  225:     SEQUENCE {
  75    1:      INTEGER 1
  78  129:      SEQUENCE {
  81  109:       SEQUENCE {
  83   31:        SET {
  85   29:         SEQUENCE {
  87    3:          OBJECT IDENTIFIER commonName
  92   22:          UTF8String 'GostR3410-2001 example'
         :          }
         :         }
 116   18:        SET {
 118   16:         SEQUENCE {
 120    3:          OBJECT IDENTIFIER organizationName
 125    9:          UTF8String 'CryptoPro'
         :          }
         :         }
 136   11:        SET {
 138    9:         SEQUENCE {
 140    3:          OBJECT IDENTIFIER countryName
 145    2:          PrintableString 'RU'
         :          }
         :         }
 149   41:        SET {
 151   39:         SEQUENCE {
 153    9:          OBJECT IDENTIFIER emailAddress
 164   26:          IA5String 'GostR3410-2001@example.com'
         :          }
         :         }
         :        }
 192   16:       INTEGER
         :        2B F5 C6 1E C2 11 BD 17 C7 DC D4 62 66 B4 2E 21
         :       }
 210   10:      SEQUENCE {
 212    6:       OBJECT IDENTIFIER id-GostR3411-94
 220    0:       NULL
         :       }
 222   10:      SEQUENCE {
 224    6:       OBJECT IDENTIFIER id-GostR3410-2001
 232    0:       NULL
         :       }
 234   64:      OCTET STRING
         :       C0 C3 42 D9 3F 8F FE 25 11 11 88 77 BF 89 C3 DB
         :       83 42 04 D6 20 F9 68 2A 99 F6 FE 30 3B E4 F4 C8
         :       F8 D5 B4 DA FB E1 C6 91 67 34 1F BC A6 7A 0D 12
         :       7B FD 10 25 C6 51 DB 8D B2 F4 8C 71 7E ED 72 A9
         :      }
         :     }
         :    }
         :   }
         :  }

|>GostR3410-2001-signed.bin
|MIIBKAYJKoZIhvcNAQcCoIIBGTCCARUCAQExDDAKBgYqhQMCAgkFADAbBgkqhkiG
|9w0BBwGgDgQMc2FtcGxlIHRleHQKMYHkMIHhAgEBMIGBMG0xHzAdBgNVBAMMFkdv
|c3RSMzQxMC0yMDAxIGV4YW1wbGUxEjAQBgNVBAoMCUNyeXB0b1BybzELMAkGA1UE
|BhMCUlUxKTAnBgkqhkiG9w0BCQEWGkdvc3RSMzQxMC0yMDAxQGV4YW1wbGUuY29t
|AhAr9cYewhG9F8fc1GJmtC4hMAoGBiqFAwICCQUAMAoGBiqFAwICEwUABEDAw0LZ
|P4/+JRERiHe/icPbg0IE1iD5aCqZ9v4wO+T0yPjVtNr74caRZzQfvKZ6DRJ7/RAl
|xlHbjbL0jHF+7XKp
|<GostR3410-2001-signed.bin

9.2. Упакованное с согласованием ключей сообщение

Это сообщение зашифровано с использованием примера сертификата из параграфа 4.2 [CPPK] в качестве сертификата получателя. Для расшифровки сообщения можно использовать секретный ключ d из того же параграфа.

   0  420: SEQUENCE {
   4    9:  OBJECT IDENTIFIER envelopedData
  15  405:  [0] {
  19  401:   SEQUENCE {
  23    1:    INTEGER 2
  26  336:    SET {
  30  332:     [1] {
  34    1:      INTEGER 3
  37  101:      [0] {
  39   99:       [1] {
  41   28:        SEQUENCE {
  43    6:         OBJECT IDENTIFIER id-GostR3410-2001
  51   18:         SEQUENCE {
  53    7:          OBJECT IDENTIFIER
         :           id-GostR3410-2001-CryptoPro-XchA-ParamSet
  62    7:          OBJECT IDENTIFIER
         :           id-GostR3411-94-CryptoProParamSet
         :          }
         :         }
  71   67:        BIT STRING, encapsulates {
  74   64:         OCTET STRING
         :          B3 55 39 F4 67 81 97 2B A5 C4 D9 84 1F 27 FB 81
         :          ED 08 32 E6 9A D4 F2 00 78 B8 FF 83 64 EA D2 1D
         :          B0 78 3C 7D FE 03 C1 F4 06 E4 3B CC 16 B9 C5 F6
         :          F6 19 37 1C 17 B8 A0 AA C7 D1 A1 94 B3 A5 36 20
         :         }
         :        }
         :       }
 140   10:      [1] {
 142    8:       OCTET STRING 2F F0 F6 D1 86 4B 32 8A
         :       }
 152   30:      SEQUENCE {
 154    6:       OBJECT IDENTIFIER id-GostR3410-2001-CryptoPro-ESDH
 162   20:       SEQUENCE {
 164    7:        OBJECT IDENTIFIER id-Gost28147-89-None-KeyWrap
 173    9:        SEQUENCE {
 175    7:         OBJECT IDENTIFIER
         :          id-Gost28147-89-CryptoPro-A-ParamSet
         :         }
         :        }
         :       }
 184  179:      SEQUENCE {
 187  176:       SEQUENCE {
 190  129:        SEQUENCE {
 193  109:         SEQUENCE {
 195   31:          SET {
 197   29:           SEQUENCE {
 199    3:            OBJECT IDENTIFIER commonName
 204   22:            UTF8String 'GostR3410-2001 example'
         :            }
         :           }
 228   18:          SET {
 230   16:           SEQUENCE {
 232    3:            OBJECT IDENTIFIER organizationName
 237    9:            UTF8String 'CryptoPro'
         :            }
         :           }
 248   11:          SET {
 250    9:           SEQUENCE {
 252    3:            OBJECT IDENTIFIER countryName
 257    2:            PrintableString 'RU'
         :            }
         :           }
 261   41:          SET {
 263   39:           SEQUENCE {
 265    9:            OBJECT IDENTIFIER emailAddress
 276   26:            IA5String 'GostR3410-2001@example.com'
         :            }
         :           }
         :          }
 304   16:         INTEGER
         :          2B F5 C6 1E C2 11 BD 17 C7 DC D4 62 66 B4 2E 21
         :         }
 322   42:        OCTET STRING, encapsulates {
 324   40:         SEQUENCE {
 326   32:          OCTET STRING
         :           16 A3 1C E7 CE 4E E9 0D F1 EC 74 69 04 68 1E C7
         :           9F 3A ED B8 3B 1F 1D 4A 7E F9 A5 D9 CB 19 D5 E8
 360    4:          OCTET STRING
         :           93 FD 86 7E
         :          }
         :         }
         :        }
         :       }
         :      }
         :     }
 366   56:    SEQUENCE {
 368    9:     OBJECT IDENTIFIER data
 379   29:     SEQUENCE {
 381    6:      OBJECT IDENTIFIER id-Gost28147-89
 389   19:      SEQUENCE {
 391    8:       OCTET STRING B7 35 E1 7A 07 35 A2 1D
 401    7:       OBJECT IDENTIFIER id-Gost28147-89-CryptoPro-A-ParamSet
         :       }
         :      }
 410   12:     [0] 39 B1 8A F4 BF A9 E2 65 25 B6 55 C9
         :     }
         :    }
         :   }
         :  }

|>GostR3410-2001-keyagree.bin
|MIIBpAYJKoZIhvcNAQcDoIIBlTCCAZECAQIxggFQoYIBTAIBA6BloWMwHAYGKoUD
|AgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQLNVOfRngZcrpcTZhB8n+4HtCDLm
|mtTyAHi4/4Nk6tIdsHg8ff4DwfQG5DvMFrnF9vYZNxwXuKCqx9GhlLOlNiChCgQI
|L/D20YZLMoowHgYGKoUDAgJgMBQGByqFAwICDQAwCQYHKoUDAgIfATCBszCBsDCB
|gTBtMR8wHQYDVQQDDBZHb3N0UjM0MTAtMjAwMSBleGFtcGxlMRIwEAYDVQQKDAlD
|cnlwdG9Qcm8xCzAJBgNVBAYTAlJVMSkwJwYJKoZIhvcNAQkBFhpHb3N0UjM0MTAt
|MjAwMUBleGFtcGxlLmNvbQIQK/XGHsIRvRfH3NRiZrQuIQQqMCgEIBajHOfOTukN
|8ex0aQRoHsefOu24Ox8dSn75pdnLGdXoBAST/YZ+MDgGCSqGSIb3DQEHATAdBgYq
|hQMCAhUwEwQItzXhegc1oh0GByqFAwICHwGADDmxivS/qeJlJbZVyQ==
|<GostR3410-2001-keyagree.bin

9.3. Упакованное с доставкой ключей сообщение

Это сообщение зашифровано с использованием примера сертификата из параграфа 4.2 [CPPK] в качестве сертификата получателя. Для расшифровки сообщения можно использовать секретный ключ d из того же параграфа.

   0  423: SEQUENCE {
   4    9:  OBJECT IDENTIFIER envelopedData
  15  408:  [0] {
  19  404:   SEQUENCE {
  23    1:    INTEGER 0
  26  339:    SET {
  30  335:     SEQUENCE {
  34    1:      INTEGER 0
  37  129:      SEQUENCE {
  40  109:       SEQUENCE {
  42   31:        SET {
  44   29:         SEQUENCE {
  46    3:          OBJECT IDENTIFIER commonName
  51   22:          UTF8String 'GostR3410-2001 example'
         :          }
         :         }
  75   18:        SET {
  77   16:         SEQUENCE {
  79    3:          OBJECT IDENTIFIER organizationName
  84    9:          UTF8String 'CryptoPro'
         :          }
         :         }
  95   11:        SET {
  97    9:         SEQUENCE {
  99    3:          OBJECT IDENTIFIER countryName
 104    2:          PrintableString 'RU'
         :          }
         :         }
 108   41:        SET {
 110   39:         SEQUENCE {
 112    9:          OBJECT IDENTIFIER emailAddress
 123   26:          IA5String 'GostR3410-2001@example.com'
         :          }
         :         }
         :        }
 151   16:       INTEGER
         :        2B F5 C6 1E C2 11 BD 17 C7 DC D4 62 66 B4 2E 21
         :       }
 169   28:      SEQUENCE {
 171    6:       OBJECT IDENTIFIER id-GostR3410-2001
 179   18:       SEQUENCE {
 181    7:        OBJECT IDENTIFIER
         :         id-GostR3410-2001-CryptoPro-XchA-ParamSet
 190    7:        OBJECT IDENTIFIER
         :         id-GostR3411-94-CryptoProParamSet
         :        }
         :       }
 199  167:      OCTET STRING, encapsulates {
 202  164:       SEQUENCE {
 205   40:        SEQUENCE {
 207   32:         OCTET STRING
         :          6A 2F A8 21 06 95 68 9F 9F E4 47 AA 9E CB 61 15
         :          2B 7E 41 60 BC 5D 8D FB F5 3D 28 1B 18 9A F9 75
 241    4:         OCTET STRING
         :          36 6D 98 B7
         :         }
 247  120:        [0] {
 249    7:         OBJECT IDENTIFIER
         :          id-Gost28147-89-CryptoPro-A-ParamSet
 258   99:         [0] {
 260   28:          SEQUENCE {
 262    6:           OBJECT IDENTIFIER id-GostR3410-2001
 270   18:           SEQUENCE {
 272    7:            OBJECT IDENTIFIER
         :             id-GostR3410-2001-CryptoPro-XchA-ParamSet
 281    7:            OBJECT IDENTIFIER
         :             id-GostR3411-94-CryptoProParamSet
         :            }
         :           }
 290   67:          BIT STRING encapsulates {
 293   64:           OCTET STRING
         :            4D 2B 2F 33 90 E6 DC A3 DD 55 2A CD DF E0 EF FB
         :            31 F7 73 7E 4E FF BF 78 89 8A 2B C3 CD 31 94 04
         :            4B 0E 60 48 96 1F DB C7 5D 12 6F DA B2 40 8A 77
         :            B5 BD EA F2 EC 34 CB 23 9F 9B 8B DD 9E 12 C0 F6
         :           }
         :          }
 359    8:         OCTET STRING
         :          97 95 E3 2C 2B AD 2B 0C
         :         }
         :        }
         :       }
         :      }
         :     }
 369   56:    SEQUENCE {
 371    9:     OBJECT IDENTIFIER data
 382   29:     SEQUENCE {
 384    6:      OBJECT IDENTIFIER id-Gost28147-89
 392   19:      SEQUENCE {
 394    8:       OCTET STRING BC 10 8B 1F 0B FF 34 29
 404    7:       OBJECT IDENTIFIER id-Gost28147-89-CryptoPro-A-ParamSet
         :       }
         :      }
 413   12:     [0] AA 8E 72 1D EE 4F B3 2E E3 0F A1 37
         :     }
         :    }
         :   }
         :  }

|>GostR3410-2001-keytrans.bin
|MIIBpwYJKoZIhvcNAQcDoIIBmDCCAZQCAQAxggFTMIIBTwIBADCBgTBtMR8wHQYD
|VQQDDBZHb3N0UjM0MTAtMjAwMSBleGFtcGxlMRIwEAYDVQQKDAlDcnlwdG9Qcm8x
|CzAJBgNVBAYTAlJVMSkwJwYJKoZIhvcNAQkBFhpHb3N0UjM0MTAtMjAwMUBleGFt
|cGxlLmNvbQIQK/XGHsIRvRfH3NRiZrQuITAcBgYqhQMCAhMwEgYHKoUDAgIkAAYH
|KoUDAgIeAQSBpzCBpDAoBCBqL6ghBpVon5/kR6qey2EVK35BYLxdjfv1PSgbGJr5
|dQQENm2Yt6B4BgcqhQMCAh8BoGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwIC
|HgEDQwAEQE0rLzOQ5tyj3VUqzd/g7/sx93N+Tv+/eImKK8PNMZQESw5gSJYf28dd
|Em/askCKd7W96vLsNMsjn5uL3Z4SwPYECJeV4ywrrSsMMDgGCSqGSIb3DQEHATAd
|BgYqhQMCAhUwEwQIvBCLHwv/NCkGByqFAwICHwGADKqOch3uT7Mu4w+hNw==
|<GostR3410-2001-keytrans.bin

10. Модули ASN.1

Дополнительные модули ASN.1, упомянутые здесь, можно найти в [CPALGS].

10.1. GostR3410-EncryptionSyntax

GostR3410-EncryptionSyntax
    { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)
      other(1) modules(1) gostR3410-EncryptionSyntax(5) 2 }
DEFINITIONS ::=
BEGIN
-- EXPORTS All --
-- The types and values defined in this module are exported for
-- use in the other ASN.1 modules contained within the Russian
-- Cryptography "GOST" & "GOST R" Specifications, and for the use
-- of other applications which will use them to access Russian
-- Cryptography services.  Other applications may use them for
-- their own purposes, but this will not constrain extensions and
-- modifications needed to maintain or improve the Russian
-- Cryptography service.
    IMPORTS
        id-CryptoPro-algorithms,
        gost28147-89-EncryptionSyntax,
        gostR3410-94-PKISyntax,
        gostR3410-2001-PKISyntax,
        ALGORITHM-IDENTIFIER,
        cryptographic-Gost-Useful-Definitions
        FROM Cryptographic-Gost-Useful-Definitions -- in [CPALGS]
            { iso(1) member-body(2) ru(643) rans(2)
              cryptopro(2) other(1) modules(1)
              cryptographic-Gost-Useful-Definitions(0) 1 }
        id-GostR3410-94
        FROM GostR3410-94-PKISyntax -- in [CPALGS]
            gostR3410-94-PKISyntax
        id-GostR3410-2001
        FROM GostR3410-2001-PKISyntax -- in [CPALGS]
            gostR3410-2001-PKISyntax
        Gost28147-89-ParamSet,
        Gost28147-89-EncryptedKey
        FROM Gost28147-89-EncryptionSyntax -- in [CPALGS]
             gost28147-89-EncryptionSyntax
        SubjectPublicKeyInfo
        FROM PKIX1Explicit88 {iso(1) identified-organization(3)
        dod(6) internet(1) security(5) mechanisms(5) pkix(7)
        id-mod(0) id-pkix1-explicit-88(1)}
    ;
  -- CMS/PKCS#7 key agreement algorithms & parameters
    Gost28147-89-KeyWrapParameters ::=
      SEQUENCE {
        encryptionParamSet Gost28147-89-ParamSet,
        ukm                OCTET STRING (SIZE (8)) OPTIONAL
      }
    id-Gost28147-89-CryptoPro-KeyWrap OBJECT IDENTIFIER ::=
      { id-CryptoPro-algorithms keyWrap(13) cryptoPro(1) }
    id-Gost28147-89-None-KeyWrap OBJECT IDENTIFIER ::=
      { id-CryptoPro-algorithms keyWrap(13) none(0) }
    Gost28147-89-KeyWrapAlgorithms  ALGORITHM-IDENTIFIER ::= {
      { Gost28147-89-KeyWrapParameters IDENTIFIED BY
        id-Gost28147-89-CryptoPro-KeyWrap } |
      { Gost28147-89-KeyWrapParameters IDENTIFIED BY
        id-Gost28147-89-None-KeyWrap }
    }
    id-GostR3410-2001-CryptoPro-ESDH OBJECT IDENTIFIER ::=
      { id-CryptoPro-algorithms
        gostR3410-2001-CryptoPro-ESDH(96) }
    id-GostR3410-94-CryptoPro-ESDH OBJECT IDENTIFIER ::=
      { id-CryptoPro-algorithms
        gostR3410-94-CryptoPro-ESDH(97) }
  -- CMS/PKCS#7 key transport algorithms & parameters
    -- OID for CMS/PKCS#7 Key transport is id-GostR3410-94 from
    --      GostR3410-94-PKISyntax or id-GostR3410-2001 from
    --      GostR3410-2001-PKISyntax
    -- Algorithms for CMS/PKCS#7 Key transport are
    --      GostR3410-94-PublicKeyAlgorithms from
    --      GostR3410-94-PKISyntax or
    --      GostR3410-2001-PublicKeyAlgorithms from
    --      GostR3410-2001-PKISyntax
    -- SMIMECapability for CMS/PKCS#7 Key transport are
    --      id-GostR3410-94 from GostR3410-94-PKISyntax or
    --      id-GostR3410-2001 from GostR3410-2001-PKISyntax
    id-GostR3410-94-KeyTransportSMIMECapability
        OBJECT IDENTIFIER ::= id-GostR3410-94
    id-GostR3410-2001-KeyTransportSMIMECapability
        OBJECT IDENTIFIER ::= id-GostR3410-2001
    GostR3410-KeyTransport ::=
        SEQUENCE {
            sessionEncryptedKey Gost28147-89-EncryptedKey,
            transportParameters [0]
                IMPLICIT GostR3410-TransportParameters OPTIONAL
        }
    GostR3410-TransportParameters ::=
        SEQUENCE {
            encryptionParamSet Gost28147-89-ParamSet,
            ephemeralPublicKey [0]
                IMPLICIT SubjectPublicKeyInfo OPTIONAL,
            ukm                OCTET STRING ( SIZE(8) )
        }
END -- GostR3410-EncryptionSyntax

10.2. GostR3410-94-SignatureSyntax

GostR3410-94-SignatureSyntax
    { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)
      other(1) modules(1) gostR3410-94-SignatureSyntax(3) 1 }
DEFINITIONS ::=
BEGIN
-- EXPORTS All --
-- The types and values defined in this module are exported for
-- use in the other ASN.1 modules contained within the Russian
-- Cryptography "GOST" & "GOST R" Specifications, and for the use
-- of other applications which will use them to access Russian
-- Cryptography services.  Other applications may use them for
-- their own purposes, but this will not constrain extensions and
-- modifications needed to maintain or improve the Russian
-- Cryptography service.
    IMPORTS
        gostR3410-94-PKISyntax, ALGORITHM-IDENTIFIER,
        cryptographic-Gost-Useful-Definitions
        FROM Cryptographic-Gost-Useful-Definitions -- in [CPALGS]
            { iso(1) member-body(2) ru(643) rans(2)
              cryptopro(2) other(1) modules(1)
              cryptographic-Gost-Useful-Definitions(0) 1 }
        id-GostR3410-94,
        GostR3410-94-PublicKeyParameters
        FROM GostR3410-94-PKISyntax -- in [CPALGS]
            gostR3410-94-PKISyntax
    ;
  -- GOST R 34.10-94 signature data type
    GostR3410-94-Signature ::=
        OCTET STRING (SIZE (64))
  -- GOST R 34.10-94 signature algorithm & parameters
    GostR3410-94-CMSSignatureAlgorithms  ALGORITHM-IDENTIFIER ::= {
        { GostR3410-94-PublicKeyParameters IDENTIFIED BY
                        id-GostR3410-94 }
    }
END -- GostR3410-94-SignatureSyntax

10.3. GostR3410-2001-SignatureSyntax

GostR3410-2001-SignatureSyntax
    { iso(1) member-body(2) ru(643) rans(2) cryptopro(2)
      other(1) modules(1) gostR3410-2001-SignatureSyntax(10) 1 }
DEFINITIONS ::=
BEGIN
-- EXPORTS All --
-- The types and values defined in this module are exported for
-- use in the other ASN.1 modules contained within the Russian
-- Cryptography "GOST" & "GOST R" Specifications, and for the use
-- of other applications which will use them to access Russian
-- Cryptography services. Other applications may use them for
-- their own purposes, but this will not constrain extensions and
-- modifications needed to maintain or improve the Russian
-- Cryptography service.
    IMPORTS
        gostR3410-2001-PKISyntax, ALGORITHM-IDENTIFIER,
        cryptographic-Gost-Useful-Definitions
        FROM Cryptographic-Gost-Useful-Definitions -- in [CPALGS]
            { iso(1) member-body(2) ru(643) rans(2)
              cryptopro(2) other(1) modules(1)
              cryptographic-Gost-Useful-Definitions(0) 1 }
        id-GostR3410-2001,
        GostR3410-2001-PublicKeyParameters -- in [CPALGS]
        FROM GostR3410-2001-PKISyntax
            gostR3410-2001-PKISyntax
    ;
  -- GOST R 34.10-2001 signature data type
    GostR3410-2001-Signature ::=
        OCTET STRING (SIZE (64))
  -- GOST R 34.10-2001 signature algorithms and parameters
    GostR3410-2001-CMSSignatureAlgorithms

        ALGORITHM-IDENTIFIER ::= {
                { GostR3410-2001-PublicKeyParameters IDENTIFIED BY
                        id-GostR3410-2001 }
        }
END -- GostR3410-2001-SignatureSyntax

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

Этот документ был подготовлен в соответствии с «Соглашением о совместимости СКЗИ», подписанным ФГУП НТЦ «Атлас», ООО «КРИПТО-ПРО», ООО «Фактор-ТС», ЗАО «МО ПНИЭИ», ООО «Инфотекс», ЗАО «СПбРЦЗИ», ООО «Криптоком», ООО «Р-Альфа». Целью этого соглашения является обеспечение взаимной совместимости продукции и решений.

Авторы выражают свою признательность

представительству компании Microsoft в России за предоставление информации о продукции и решениях компании, а также технические консультации в части PKI;

представительству RSA Security в России и компании «Демос» за активное сотрудничество и неоценимую помощь в создании этого документа;

Russ Housley (Vigil Security, LLC, housley@vigilsec.com) и Василию Сахарову (DEMOS Co Ltd, svp@dol.ru) за поощрение авторов к созданию этого документа;

Дмитрию Приходько (VSTU, PrikhodkoDV@volgablob.ru) за неоценимую помощь в корректуре этого документа т проверку формы и содержания структур ASN.1 упомянутых и использованных в этом документе.

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

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

[CMS] Housley, R., «Cryptographic Message Syntax (CMS)», RFC 3852, July 2004.

[CPALGS] Popov, V., Kurepkin, I., and S. Leontiev, «Additional Cryptographic Algorithms for Use with GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms», RFC 4357, January 2006.

[CPPK] Leontiev, S., Ed. and D. Shefanovskij, Ed., «Using the GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms with the Internet X.509 Public Key Infrastructure Certificate and CRL Profile», RFC 4491, May 2006.

[GOST28147] «Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. ГОСТ 28147-89″, Государственный стандарт СССР, Государственный комитет СССР по стандартизации, 1989. (на русском языке)

[GOST3431195] «Информационная технология. Криптографическая защита информации. Функция хэширования.», ГОСТ 34.311-95, Межгосударственный совет по стандартизации, метрологии и сертификации (МГС), Минск, 1995. (на русском языке)

[GOST3431095] «Информационная технология. Криптографическая защита информации. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма.», ГОСТ 34.310-95, Межгосударственный совет по стандартизации, метрологии и сертификации (МГС), Минск, 1995. (на русском языке)

[GOST3431004] «Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.»2, ГОСТ 34.310-2004, Межгосударственный совет по стандартизации, метрологии и сертификации (МГС), Минск, 2004. (на русском языке)

[GOSTR341094] «Информационная технология. Криптографическая защита информации. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма.», ГОСТ Р 34.10-94, Государственный стандарт Российской Федерации, Госстандарт России, 1994. (на русском языке)

[GOSTR341001] «Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.», ГОСТ Р 34.10-2001, Государственный стандарт Российской Федерации, Госстандарт России, 2001. (на русском языке)

[GOSTR341194] «Информационная технология. Криптографическая защита информации. Функция хэширования.», ГОСТ Р 34.11-943, Государственный стандарт Российской Федерации, Госстандарт России, 1994. (на русском языке)

[PROFILE] Housley, R., Polk, W., Ford, W., and D. Solo, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 3280, April 2002.

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

[RFC3851] Ramsdell, B., «Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.1 Message Specification», RFC 3851, July 2004.

[X.208-88] CCITT. Recommendation X.208: Specification of Abstract Syntax Notation One (ASN.1). 1988.

[X.209-88] CCITT. Recommendation X.209: Specification of Basic Encoding Rules for Abstract Syntax Notation One (ASN.1). 1988.

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

[CRYPTOLIC] «Положение о лицензировании деятельности по распространению шифровальных (криптографических) средств», Постановление Правительства РФ от 23.09.2002, N 6914.

[RFC4134] Hoffman, P., «Examples of S/MIME Messages», RFC 4134, July 2005.

[RFEDSL] Федеральный закон «Об электронной цифровой подписи» от 10.01.2002 N 1-ФЗ5

[RFLLIC] Федеральный закон «О лицензировании отдельных видов деятельности» от 08.08.2001 г. N 128-ФЗ

[Schneier95] B. Schneier, Applied Cryptography, Second Edition, John Wiley & Sons, Inc., 1995.


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

Сергей Леонтьев, редактор

CRYPTO-PRO

38, Obraztsova,

Moscow, 127018, Russian Federation

EMail: lse@cryptopro.ru

Григорий Чудов, редактор

CRYPTO-PRO

38, Obraztsova,

Moscow, 127018, Russian Federation

EMail: chudov@cryptopro.ru

Владимир Попов

CRYPTO-PRO

38, Obraztsova,

Moscow, 127018, Russian Federation

EMail: vpopov@cryptopro.ru

Александр Афанасьев

Factor-TS

office 711, 14, Presnenskij val,

Moscow, 123557, Russian Federation

EMail: afa1@factor-ts.ru

Николай Никишин

Infotecs GmbH

p/b 35, 80-5, Leningradskij prospekt,

Moscow, 125315, Russian Federation

EMail: nikishin@infotecs.ru

Болеслав Изотов

FGUE STC «Atlas»

38, Obraztsova,

Moscow, 127018, Russian Federation

EMail: izotov@nii.voskhod.ru

Елена Минаева

MD PREI

build 3, 6A, Vtoroj Troitskij per.,

Moscow, Russian Federation

EMail: evminaeva@mail.ru

Игорь Овчаренок

MD PREI

Office 600, 14, B.Novodmitrovskaya,

Moscow, Russian Federation

EMail: igori@mo.msk.ru

Сергей Муругов

R-Alpha

4/1, Raspletina,

Moscow, 123060, Russian Federation

EMail: msm@top-cross.ru

Игорь Устинов

Cryptocom

office 239, 51, Leninskij prospekt,

Moscow, 119991, Russian Federation

EMail: igus@cryptocom.ru

Анатолий Еркин

SPRCIS (SPbRCZI)

1, Obrucheva,

St.Petersburg, 195220, Russian Federation

EMail: erkin@nevsky.net


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

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

nmalykh@gmail.com

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

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 обеспечено IETF Administrative Support Activity (IASA).


1Message authentication code.

2Название стандарта на английском языке в оригинале указано неверно (см. https://www.rfc-editor.org/errata/eid5099). Прим. перев.

3В оригинале ошибочно указано GOST R 31.10-94 (см. https://www.rfc-editor.org/errata/eid5089). Прим. перев.

4В соответствии с Постановлением Правительства РФ от 29 декабря 2007 г. N 957 данный документ утратил силу. Прим. перев.

5В соответствии с Федеральным законом от 6 апреля 2011 г. N 63-ФЗ утратил силу с 01.07.2013 г. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 4490 Using the GOST 28147-89, GOST R 34.11-94, GOST R 34.10-94, and GOST R 34.10-2001 Algorithms with Cryptographic Message Syntax (CMS) отключены

RFC 4346 The Transport Layer Security (TLS) Protocol Version 1.1

Network Working Group                                          T. Dierks
Request for Comments: 4346                                   Independent
Obsoletes: 2246                                              E. Rescorla
Category: Standards Track                                     RTFM, Inc.
                                                              April 2006

 

Протокол TLS версии 1.1

The Transport Layer Security (TLS) Protocol

Version 1.1

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

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

1. Введение

Основной задачей протокола TLS является обеспечение конфиденциальности и целостности данных, передаваемых между двумя коммуникационными приложениями. Протокол включает два уровня: TLS Record Protocol и TLS Handshake Protocol. Нижний уровень, расположенный поверх того или иного транспортного протокола с гарантией доставки (например, TCP [TCP]), называется протоколом TLS Record. Этот протокол обеспечивает безопасность соединений и обладает двумя основными свойствами.

  • Конфиденциальность соединения. Для шифрования данных используется симметричная схема (например, DES [DES], RC4 [SCH] и т. п.). Уникальные ключи для симметричного шифрования генерируются для каждого соединения на основе секретного ключа, согласованного с помощью другого протокола (например, TLS Handshake). Протокол Record может использоваться и без шифрования.

  • Надежность соединения. Транспортировка сообщений включает проверку целостности с использованием кодов MAC на основе ключей. Для расчета MAC используются защитные хэш-функции (например, SHA, MD5 и т. п.). Протокол Record может работать без MAC, но такой режим обычно применяется только при использовании протокола Record в качестве транспорта для согласования параметров безопасности.

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

  • Идентификация и аутентификация партнера может проводиться с использованием асимметричных (открытых) ключей (например, RSA [RSA], DSS [DSS] и т. п). Такая аутентификация не является обязательной, но в общем случае требуется по крайней мере на одной стороне.

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

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

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

1.1. Отличия от TLS 1.0

Этот документ является пересмотром спецификации TLS 1.0 [TLS1.0] и включает некоторые незначительные усовершенствования защиты, разъяснения и редакторские правки. Основные различия перечислены ниже:

  • неявный вектор инициализации (IV2) заменен явным для защиты от атак CBC [CBCATT];

  • изменена обработка ошибок заполнения с целью использования сигнала bad_record_mac взамен decryption_failed для защиты от атак CBC;

  • определены реестры IANA для параметров протокола;

  • преждевременное закрытие больше не делает сессию не восстанавливаемой;

  • добавления информация о новых атаках на TLS.

Кроме того, добавлено множество разъяснений и редакторских правок.

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

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

2. Назначение протокола

Основными целями протокола TLS (в порядке важности) являются:

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

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

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

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

3. Назначение документа

Протокол TLS и описанная в данном документе спецификация этого протокола основаны на спецификации протокола SSL 3.0, опубликованной компанией Netscape. Различия между SSL 3.0 и TLS не критичны, но достаточно существенны — протоколы TLS 1.1, TLS 1.0 и SSL 3.0 не могут взаимодействовать (хотя каждый включает механизм совместимости с предыдущими версиями). Данный документ адресован прежде всего читателям, планирующим реализовать протокол или выполняющим его криптографический анализ. Спецификация протокола написана с учетом требований этих двух групп. По этой причине многие зависящие от алгоритма структуры данных и правила включены в текст документа (а не в приложения), чтобы упростить доступ к информации об этих структурах и правилах.

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

4. Язык представления

Этот документ имеет дело с форматированием данных для внешнего представления. В документе используется очень простой синтаксис, похожий на синтаксис языка программирования C и синтаксис XDR [XDR]. Используемый в документе язык представления предназначен только для TLS и не имеет применения за пределами этого стандарта.

4.1. Размер базового блока

Представление всех элементов данных описано в явной форме. Базовый блок данных имеет размер 1 байт (8 битов). Многобайтовые элементы данных объединяются (конкатенация) слева направо и сверху вниз. Из байтового потока многобайтовый элемент (например, число) формируется следующим образом (используется нотация языка C):

значение = (байт[0] << 8*(n-1)) | (байт[1] << 8*(n-2)) | ... | байт[n-1];

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

4.2. Различные элементы

Текст комментария начинается с символов /* и заканчивается символами */.

Необязательные компоненты заключены в двойные квадратные скобки [[ ]].

Однобайтовые элементы, содержащие неинтерпретируемые данные, имеют тип opaque5.

4.3. Векторы

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

T T'[n];

Вектор T’ занимает n байтов в потоке данных, где значение n кратно размеру T. Размер вектора не включается в кодированный поток данных.

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

    opaque Datum[3];      /* три неинтерпретируемых байта */
    Datum Data[9];        /* 3 последовательных 3-байтовых вектора */

Векторы переменной длины определяются с указанием допустимого диапазона размеров (включая крайние значения) в форме <floor..ceiling>. При кодировании в поток данных перед самим вектором помещается реальный размер вектора. Размер задается в форме числа, занимающего столько байтов, сколько требуется для хранения максимального (ceiling) размера вектора. Вектор переменной длины, имеющий нулевой размер, указывается как пустой вектор.

    T T'<floor..ceiling>;

В приведенном ниже примере mandatory представляет собой вектор типа opaque размером от 300 до 400 байтов. Такой вектор никогда не может быть пустым. Поле размера занимает два байта (uint16), что достаточно для записи максимальной длины вектора 400 (см. параграф 4.4). Вектор longer может представлять до 800 байтов данных или до 400 элементов uint16 и может быть пустым. Кодирование вектора включает двухбайтовое поле размера, предшествующее вектору. Размер кодированного вектора должен быть кратным размеру одного элемента (например, значение 17 для вектора uint16 будет некорректным).

  opaque mandatory<300..400>; /* поле размера занимает 2 байта, вектор не может быть пустым */
  uint16 longer<0..800>;      /* от 0 до 400 16-битовых беззнаковых целых чисел */

4.4. Числа

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

    uint8 uint16[2];
    uint8 uint24[3];
    uint8 uint32[4];
    uint8 uint64[8];

Все числовые значения, используемые в данной спецификации, сохраняются в так называемом сетевом порядке байтов; число uint32, представленное в шестнадцатеричном формате 01 02 03 04, эквивалентно десятичному значению 16909060.

4.5. Перечисляемые значения

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

    enum { e1(v1), e2(v2), ... , en(vn) [[, (n)]] } Te;

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

    enum { red(3), blue(5), white(7) } Color;

Можно задать значение без связанного с ним тега для расширения размера типа без создания ненужных элементов. В приведенном ниже определении задается тип Taste, элементы которого занимают в потоке по 2 байта и могут принимать только значения только 1, 2 или 4.

    enum { sweet(1), sour(2), bitter(4), (32000) } Taste;

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

    Color color = Color.blue;     /* полная спецификация – корректно всегда */
    Color color = blue;           /* корректно при заданном неявно типе */

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

    enum { low, medium, high } Amount;

4.6. Структурированные типы

Из примитивов могут создаваться структурированные типы. Каждая спецификация структурированного типа задает новый уникальный тип. Синтаксис описания идентичен синтаксису структур языка C.

    struct {
        T1 f1;
        T2 f2;
        ...
        Tn fn;
    } [[T]];

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

4.6.1. Варианты

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

       struct {
           T1 f1;
           T2 f2;
           ....
           Tn fn;
           select (E) {
               case e1: Te1;
               case e2: Te2;
               ....
               case en: Ten;
           } [[fv]];
       } [[Tv]];

Например,

       enum { apple, orange } VariantTag;
       struct {
           uint16 number;
           opaque string<0..10>; /* переменный размер */
       } V1;
       struct {
           uint32 number;
           opaque string[10];    /* фиксированный размер */
       } V2;
       struct {
           select (VariantTag) { /* значение селектора задано неявно */
               case apple: V1;   /* VariantBody, tag = apple         */
               case orange: V2;  /* VariantBody, tag = orange        */
           } variant_body;       /* необязательная метка варианта    */
       } VariantRecord;

Структуры с вариантами можно уточнять (сужать), указывая значение селектора перед типом. Например, запись

    orange VariantRecord

является суженным типом VariantRecord, содержащим вариант типа V2.

4.7. Криптографические атрибуты

Четыре варианта криптографических операций – цифровая подпись (digital signing), потоковое шифрование (stream cipher encryption), блочное шифрование (block cipher encryption) и шифрование с открытым ключом (public key encryption) обозначаются ключевыми словами digitally-signed, stream-ciphered, block-ciphered и public-key-encrypted, соответственно. Поля с криптографической обработкой указываются с предшествующим типу поля ключевым словом, задающим криптографическую операцию. Ключи шифрования определяются текущим состоянием сессии (см. параграф 6.1).

В режиме цифровой подписи для создания сигнатуры используется необратимая хэш-функция. Элемент с цифровой подписью кодируется как opaque-вектор <0..2^16-1>, длина которого определяется алгоритмом цифровой подписи и ключом.

При использовании RSA-подписей подписывается (шифруется с помощью открытого ключа) 36-байтовая структура из двух хэш-значений (SHA и MD5). Сигнатура кодируется с использованием PKCS #1 (блок типа 1, как описано в [PKCS1]).

Примечание. Стандарт PKCS#1 в настоящее время опубликован в RFC 3447 [PKCS1B]. Однако для минимизации отличий от TLS 1.0 используется ссылка на RFC 2313 [PKCS1A].

В DSS 20-байтовое хэш-значение SHA создается напрямую с использованием алгоритма DSA6 без дополнительного хэширования (в результате создаются два значения — r и s). Сигнатура DSS представляет собой opaque-вектор, содержимое которого является DER-представлением структуры

       Dss-Sig-Value  ::=  SEQUENCE  {
            r       INTEGER,
            s       INTEGER
       }

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

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

При шифровании с открытым ключом используется алгоритм, шифрующий данные таким образом, что их можно расшифровать только с использованием соответствующего секретного ключа. Шифрованные элементы представляется, как opaque-векторы <0..216-1>, размер которых определяется алгоритмом шифрования9 и ключом.

Зашифрованные с помощью алгоритма RSA значения кодируются с помощью PKCS #1 (блок типа 2) как описано в [PKCS1A].

В приведенном ниже примере

       stream-ciphered struct {
           uint8 field1;
           uint8 field2;
           digitally-signed opaque hash[20];
       } UserType;

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

4.8. Константы

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

Например,

       struct {
           uint8 f1;
           uint8 f2;
       } Example1;

       Example1 ex1 = {1, 4};  /* присваивание f1 = 1, f2 = 4 */

5. HMAC и псевдослучайная функция

Для многих операций уровней TLS Record и TLS Handshake требуется код MAC – сигнатура неких данных, защищенная ключом. Подмена кода MAC не возможна без знания секретного ключа MAC. Используемая здесь операция создания кода называется HMAC и описана в документе [HMAC].

Процедура HMAC может использовать различные алгоритмы хэширования. TLS применяет эту процедуру в процессе согласования параметров с двумя различными алгоритмами — MD5 и SHA-1. Соответствующие процедуры обозначаются как HMAC_MD5(secret, data) и HMAC_SHA(secret, data). В шифронаборах могут определяться другие алгоритмы хэширования для защиты данных, но алгоритмы MD5 и SHA-1 жестко включены в описание согласования параметров для данной версии протокола.

Кроме того, требуется конструкция для преобразования секретов в блоки данных для генерации или проверки (validation) ключей. Такая псевдослучайная функция (pseudo-random function — PRF) принимает на входе секрет, затравку (seed) и идентифицирующую метку, выдавая результат произвольного размера.

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

Определим сначала функцию преобразования данных P_hash(secret, data), которая использует одну хэш-функцию для создания на базе секрета и затравки блока данных произвольного размера:

       P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
                              HMAC_hash(secret, A(2) + seed) +
                              HMAC_hash(secret, A(3) + seed) + ...

где знак + означает конкатенацию.

Значения A() определяются следующим образом

       A(0) = seed
       A(i) = HMAC_hash(secret, A(i-1))

Функция P_hash может итеративно применяться столько раз, сколько потребуется для генерации нужного объема данных. Например, если будет применяться функция P_SHA-1, для создания 64 байтов данных ее можно вызвать 4 раза (до A(4)), что даст 80 байтов на выходе и последние 16 байтов финальной итерации отбросить для создания выходного блока размером 64 байта.

Для TLS функция PRF создается путем разделения секрета на две половины, из которых одна служит для генерации данных с помощью P_MD5, а другая — для генерации данных с помощью P_SHA-1, после чего к результатам этих функций применяется операция «исключающее-ИЛИ» (XOR) для их объединения.

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

       L_S = размер секрета в байтах;
       L_S1 = L_S2 = ceil(L_S / 2);

Секрет делится пополам (возможно с использованием одного байта в обеих половинах), как описано выше, S1 принимает первые L_S1 байтов, S2 последние L_S2 байтов.

PRF определяется, как результат смешивания двух псевдослучайных потоков с помощью операции «исключающее-ИЛИ» (XOR).

       PRF(secret, label, seed) = P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);

Метка представляет собой строку символов ASCII. Ее следует включать в неизменном виде без байта размера или завершающего null-символа. Например, метка «slithy toves» будет при хэшировании использоваться, как последовательность байтов:

    73 6C 69 74 68 79 20 74 6F 76 65 73

Отметим, что по причине того, что выход функции MD5 имеет размер 16 байтов, а выход SHA-1 — 20 байтов, границы их внутренних итераций не будут совпадать и для создания на выходе 80 байтов P_MD5 будет использоваться 5 раз (до A(5)), а P_SHA-1 — только четыре (до A(4)).

6. Протокол TLS Record

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

В этом документе описаны 4 клиента данного протокола — протокол согласования (handshake), протокол сигнализации (alert), протокол смены шифра (change cipher spec) и прикладной протокол (application data). Для поддержки расширений TLS протоколом Record могут поддерживаться дополнительные типы записей. Для любого нового типа записи следует выделять значение типа непосредственно после значений ContentType для описанных здесь четырех типов записей (см. Приложение A.1). Все такие значения должны определяться в соответствии с RFC 2434 по процедуре Standards Action. Значения ContentType приведены в разделе 1211 «Согласование с IANA».

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

6.1. Состояния соединений

Состояние соединения TLS представляет собой рабочую среду протокола TLS Record. Оно задает алгоритмы сжатия, шифрования и MAC. Кроме того, известны параметры этих алгоритмов — секрет MAC и ключи шифрования больших объемов данных для соединения в направлениях чтения и записи. Логически всегда присутствуют 4 состояния — текущие состояния для чтения и записи, а также состояния для ожидаемых чтения и записи. Все записи (record) обрабатываются в текущих состояниях чтения и записи. Параметры безопасности для ожидающих состояний могут устанавливаться протоколом TLS Handshake, а Change Cipher Spec может избирательно переводить ожидающее состояние в текущее (в этом случае текущее состояние удаляется и заменяется ожидающим, а новое ожидающее состояние инициализируется пустым). Недопустимо делать текущим состояние, которое не было инициализировано с параметрами защиты. Изначальное текущее состояние всегда задает отсутствие шифрования, компрессии и MAC.

Параметры защиты для состояний чтения и записи TLS Connection задаются приведенными ниже значениями.

connection end — конечная точка

Показывает, является ли данная точка «клиентом» или «сервером» в этом соединении.

bulk encryption algorithm — алгоритм шифрования больших объемов данных

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

MAC algorithm — алгоритм MAC

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

compression algorithm — алгоритм сжатия

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

master secret — первичный секрет

48-байтовое секретное значение, известное обеим сторонам соединения.

client random — случайное значение клиента

32-битовое случайное число, предоставляемое клиентом.

server random — случайное значение сервера

32-битовое случайное число, предоставляемое сервером.

Эти параметры определяются на языке представления следующим образом:

       enum { server, client } ConnectionEnd;

       enum { null, rc4, rc2, des, 3des, des40, idea, aes } BulkCipherAlgorithm;

       enum { stream, block } CipherType;

       enum { null, md5, sha } MACAlgorithm;

       enum { null(0), (255) } CompressionMethod;

      /* Могут быть добавлены алгоритмы, указанные в CompressionMethod, 
         BulkCipherAlgorithm и MACAlgorithm. */

       struct {
           ConnectionEnd          entity;
           BulkCipherAlgorithm    bulk_cipher_algorithm;
           CipherType             cipher_type;
           uint8                  key_size;
           uint8                  key_material_length;
           MACAlgorithm           mac_algorithm;
           uint8                  hash_size;
           CompressionMethod      compression_algorithm;
           opaque                 master_secret[48];
           opaque                 client_random[32];
           opaque                 server_random[32];
       } SecurityParameters;

Уровень записей будет использовать параметры безопасности для генерации следующих 4 элементов:

       client write MAC secret
       server write MAC secret
       client write key
       server write key

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

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

compression state — состояние компрессии

Текущее состояние алгоритма сжатия.

cipher state — состояние шифра

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

MAC secret — секрет MAC

Секретное значение MAC для данного соединения (см. выше).

sequence number — порядковый номер

Для каждого соединения поддерживается порядковый номер (раздельно для состояний чтения и записи). Порядковый номер должен устанавливаться в 0 при переходе соединения в активное состояние. Номер представляет собой значение типа uint64 и не может быть больше 264-1. При достижении максимального значения порядковый номер не сбрасывается в 0. Если реализации TLS требуется сбросить номер при достижении максимального значения, она должна заново выполнить согласования. Порядковые номера увеличиваются после каждой записи (первая запись для конкретного соединения должна использовать порядковый номер 0).

6.2. Уровень записи

Уровень TLS Record принимает неинтерпретированные данные от вышележащих уровней в непустых блоках произвольного размера.

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

Уровень записи фрагментирует информационные блоки в записи TLSPlaintext, передающие данные размером до 214 байтов. Границы клиентских сообщений не сохраняются на уровне записи (т. е., множество клиентских сообщений с одним ContentType может быть объединено в одну запись TLSPlaintext или одно сообщение может быть фрагментировано в несколько записей).

       struct {
           uint8 major, minor;
       } ProtocolVersion;

       enum {
           change_cipher_spec(20), alert(21), handshake(22),
           application_data(23), (255)
       } ContentType;

       struct {
           ContentType type;
           ProtocolVersion version;
           uint16 length;
           opaque fragment[TLSPlaintext.length];
       } TLSPlaintext;

type — тип

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

version — версия

Версия протокола, который будет использоваться. Данный документ описывает протокол TLS версии 1.1, для которого номер версии имеет значение { 3, 2 }. Номер версии 3.2 сложился по историческим причинам — TLS v1.1 представляет собой незначительную протокола TLS 1.0, который, в свою очередь, является небольшой модификацией протокола SSL 3.0, для которого номер версии был 3.0. (см. Приложение A.1).

length размер

Размер (в байтах) следующего TLSPlaintext.fragment. Значение поля не должно превышать 214.

fragment фрагмент

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

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

6.2.2. Сжатие и декомпрессия записей

Все записи сжимаются с использованием алгоритма компрессии, определенного для текущего состояния сессии. Во всех случаях имеется один активный алгоритм сжатия, однако в начальный момент используется пустой алгоритм CompressionMethod.null. Алгоритм сжатия преобразует структуру TLSPlaintext в другую структуру TLSCompressed. Функция сжатия инициализируется с принятой по умолчанию информацией о состоянии после того, как состояние соединения становится активным.

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

       struct {
           ContentType type;       /* то же, что TLSPlaintext.type */
           ProtocolVersion version;/* то же, что TLSPlaintext.version */
           uint16 length;
           opaque fragment[TLSCompressed.length];
       } TLSCompressed;

length

Размер (в байтах) следующего фрагмента TLSCompressed.fragment. Размер фрагмента не может превышать 214 + 1024 байтов.

fragment

Сжатое представление TLSPlaintext.fragment.

Примечание. Операция CompressionMethod.null не меняет каких-либо полей.

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

6.2.3. Защита данных записи

Функции шифрования и MAC преобразуют структуру TLSCompressed в другую структуру TLSCiphertext. Функция дешифрования выполняет обратный процесс. Значение MAC для записи включает порядковый номер, позволяющий обнаружить недостающие, лишние или повторные сообщения.

       struct {
           ContentType type;
           ProtocolVersion version;
           uint16 length;
           select (CipherSpec.cipher_type) {
               case stream: GenericStreamCipher;
               case block: GenericBlockCipher;
           } fragment;
       } TLSCiphertext;

type — тип

Поле типа, идентичное TLSCompressed.type.

version — версия

Поле номера версии, идентичное TLSCompressed.version.

length размер

Размер (в байтах) следующего фрагмента TLSCiphertext.fragment. Размер не может превышать 214 + 2048.

fragment фрагмент

Зашифрованная форма TLSCompressed.fragment с кодом MAC.

6.2.3.1. Пустой или стандартный потоковый шифр

Потоковые шифры (включая BulkCipherAlgorithm.null — см. Приложение A.6) преобразуют структуры TLSCompressed.fragment в структуры TLSCiphertext.fragment и обратно.

       stream-ciphered struct {
           opaque content[TLSCompressed.length];
           opaque MAC[CipherSpec.hash_size];
       } GenericStreamCipher;

Значение MAC генерируется, как

       HMAC_hash(MAC_write_secret, seq_num + TLSCompressed.type +
                     TLSCompressed.version + TLSCompressed.length + TLSCompressed.fragment));

где «+» означает конкатенацию.

seq_num

Порядковый номер записи.

hash

Алгоритм хэширования, заданный полем SecurityParameters.mac_algorithm.

Отметим, что значение MAC рассчитывается до шифрования. Потоковый шифр кодирует блок целиком, включая MAC. Для потоковых шифров, не использующих вектор инициализации (таких, как RC4), состояние шифра из конца записи просто используется для следующего пакета. При использовании шифра (CipherSuite) TLS_NULL_WITH_NULL_NULL шифрование не применяется (т. е., данные не шифруются и размер MAC равен 0, что эквивалентно отказу от использования MAC). TLSCiphertext.length = TLSCompressed.length + CipherSpec.hash_size.

6.2.3.2. Блочный шифр CBC

Для блочных шифров (таких, как RC2, DES или AES) функции шифрования и MAC преобразуют структуры TLSCompressed.fragment в другие структуры TLSCiphertext.fragment и обратно.

       block-ciphered struct {
           opaque IV[CipherSpec.block_length];
           opaque content[TLSCompressed.length];
           opaque MAC[CipherSpec.hash_size];
           uint8 padding[GenericBlockCipher.padding_length];
           uint8 padding_length;
       } GenericBlockCipher;

Значение MAC генерируется в соответствии с описанием параграфа 6.2.3.1.

IV — вектор инициализации

В отличие от предыдущих версий SSL и TLS, протокол TLS 1.1 использует явное значение IV для предотвращения атак, описанных в [CBCATT]. Рекомендуется использовать описанную ниже строгую процедуру. Для ясности применяются следующие обозначения:

IV

передаваемое значение поля IV в структуре GenericBlockCipher;

CBC residue

последний шифрованный блок предшествующей записи;

mask

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

В предыдущих версиях TLS не было поля IV, а CBC residue и mask всегда были одинаковы. Подробное описание работы с вектором инициализации в TLS 1.0 приведено в параграфах 6.1, 6.2.3.2 и 6.3 документа [TLS1.0].

Для генерации стартового вектора инициализации (per-record IV) следует использовать один из описанных ниже алгоритмов.

  1. Генерируется криптографически сильная строка случайных значений R размера CipherSpec.block_length и помещается в поле IV. Устанавливается mask = R. Таким образом, первый блок будет шифроваться, как E(R XOR Data).

  2. Генерируется криптографически сильная строка случайных значений R размера CipherSpec.block_length и помещается перед шифруемым тестом. Возможны два случая.

    1. Использование при шифровании фиксированного значения mask (например, 0).

    2. В качестве маски (mask) может применяться значение CBC residue из предыдущей записи. Это обеспечивает максимальную совместимость кода с TLS 1.0 и SSL 3. Преимуществом этого варианта является также то, что не требуется возможность быстрого сброса IV, который в некоторых системах вызывает проблемы.

    В обоих случаях (2)(a) и (2)(b) данные (R || data) передаются процессу шифрования. Первый шифруемый блок (содержащий E(mask XOR R) помещается в поле IV. Первый блок содержимого представляет собой E(IV XOR data).

Может использоваться также описанная ниже дополнительная процедура, однако ее криптостойкость не была проверена, как для двух описанных выше процедур. Отправитель добавляет фиксированный блок F перед шифруемым текстом (этот блок может генерироваться слабым PRNG). После этого выполняется описанный выше вариант (2) с использованием CBC residue из предыдущего блока в качестве маски для добавленного впереди блока. Отметим, что в этом случае значение mask для первой записи, передаваемой приложением (Finished), должно генерироваться с использованием криптографически сильного PRNG.

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

padding — заполнение

Заполнение используется для выравнивания размера нешифрованных данных до значения, кратного размеру блока шифрования. Размер заполнения может быть произвольным (вплоть до 255 байтов), чтобы сделать значение TLSCiphertext.length кратным размеру блока. Для защиты от атак на базе анализа размера сообщений может использоваться дополнительное заполнение (сверх минимального, требуемого для выравнивания по границе блока). Каждое поле uint8 в векторе заполнения должно содержать значение размера заполнения. Получатель должен проверять значение заполнения и при несовпадении ему следует использовать сигнал bad_record_mac для индикации ошибки заполнения.

padding_length — размер заполнения

Размер заполнения должен быть таким, чтобы общий размер структуры GenericBlockCipher был кратным размеру блока шифрования. Поле размера может принимать любые значения в диапазоне от 0 до 255, включительно. Это значение определяет размер поля заполнения без учета самого поля padding_length.

Размер зашифрованных данных (TLSCiphertext.length) на 1 больше суммы значений CipherSpec.block_length, TLSCompressed.length, CipherSpec.hash_size и padding_length.

Пример. Если размер блока составляет 8 байтов, размер содержимого (TLSCompressed.length) — 61 байт, а размер MAC — 20 байтов, общий размер до заполнения составит 82 байта (без учета IV, который может шифроваться или не шифроваться, как описано выше). Таким образом, размер заполнения для модуля 8 должен составить 6 байтов, чтобы сделать общий размер кратным 8 (размер блока). Реальный размер заполнения может составлять 6, 14, 22 и т. д., до 254. Если будет использоваться минимальное заполнение (6 байтов), каждое поле заполнения будет содержать значение 6. Таким образом последние 8 октетов GenericBlockCipher до шифрования блока будут иметь вид xx 06 06 06 06 06 06 06, где xx — последний октет MAC.

Примечание. Для блочных шифров в режиме CBC12 критично чтобы весь шифруемый текст записи был известен до передачи какого-либо шифрованного текста. В противном случае открывается возможность организации атаки, описанной в [CBCATT].

Примечание для разработчиков. Canvel с соавторами [CBCTIME] продемонстрировали атаку на заполнение CBC с синхронизацией на основе определения времени, затрачиваемого на расчет MAC. Для защиты от таких атак реализации должны обеспечить одинаковое время обработки, независимо от корректности заполнения. В общем случае лучше всего добиваться этого, рассчитывая значение MAC даже при некорректном заполнении и отвергая пакет лишь после расчета. Например, если значение заполнителя представляет не корректным, реализация может предположить, нулевой размер заполнения и рассчитать значение MAC. Это сохраняет некоторые возможности для синхронизации, поскольку время расчета MAC зависит от размера фрагмента данных, но воспользоваться такими возможностями будет гораздо сложнее, поскольку значение MAC будет рассчитываться для большого объема данных и для синхросигнала размер будет слишком мал.

6.3. Расчет ключей

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

Первичный секрет хэшируется в последовательность защищенных байтов, которые используются для секретов MAC, ключей и неэкспортируемых IV, требуемых для текущего состояния соединения (см. Приложение A.6). Для CipherSpec требуются секреты записи MAC для клиента и сервера, а также ключи записи для клиента и сервера, которые генерируются из первичного секрета в указанном порядке. Неиспользуемые значения остаются пустыми.

При генерации ключей и секретов MAC первичный секрет служит источником энтропии.

Для генерации ключевого материала выполняется расчет

       key_block = PRF(SecurityParameters.master_secret,
                          "key expansion",
                          SecurityParameters.server_random +
             SecurityParameters.client_random);

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

       client_write_MAC_secret[SecurityParameters.hash_size]
       server_write_MAC_secret[SecurityParameters.hash_size]
       client_write_key[SecurityParameters.key_material_length]
       server_write_key[SecurityParameters.key_material_length]

Примечание для разработчиков. Шифронабором, которому требуется значительный объем материала, является AES_256_CBC_SHA [TLSAES] — ему нужно 2 x 32 байта для ключей, 2 x 20 байтов для секретов MAC и 2 x 16 байтов для IV (всего 136 байтов ключевого материала).

7. Протокол TLS Handshake

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

Протокол Handshake отвечает за согласование сессии, включающей перечисленные ниже элементы.

session identifier — идентификатор сессии

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

peer certificate — сертификат партнера

Сертификат X509v3 [X509] для партнера. Этот элемент состояния может быть пустым.

compression method — метод сжатия

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

cipher spec — спецификация шифра

Задает алгоритм шифрования больших объемов данных (null, DES и т. п.) и MAC (MD5 или SHA). Этот параметр также определяет криптографические атрибуты типа hash_size (см. формальное определение в Приложении A.6).

master secret — первичный секрет

48-байтовое секретное значение, известное клиенту и серверу.

is resumable

Флаг возможности использования сессии для инициирования новых соединений.

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

7.1. Протокол смены шифра

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

       struct {
           enum { change_cipher_spec(1), (255) } type;
       } ChangeCipherSpec;

Сообщения о смене шифра передаются клиентом и сервером для уведомления принимающей стороны о том, что последующие записи будут защищены с применением недавно согласованных CipherSpec и ключей. Прием такого сообщения заставляет получателя передать на уровень Record команду незамедлительного копирования ожидающего состояния чтения в текущее состояние чтения. Сразу же после передачи такого сообщения отправитель должен дать своему уровню записи команду сделать ожидающее состояние записи текущим (см. параграф 6.1). Сообщение о смене шифра передается в процессе согласования после того, как параметры защиты согласованы, но до передачи сообщения о завершении верификации (см. параграф 7.4.9).

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

7.2. Протокол Alert

Одним из типов содержимого, поддерживаемого уровнем TLS Record, является сигнализация (alert). Сигнальные сообщения передают уровень важности и описание сигнала. Сообщения критического (fatal) уровня приводят к незамедлительному разрыву соединения. В этом случае другие соединения, соответствующие данной сессии, могут сохраняться, но идентификатор сессии должен быть объявлен некорректным (invalidated), чтобы предотвратить организацию в этой сессии новых соединений. Подобно остальным сообщениям, сигнальные сообщения шифруются и сжимаются в соответствии с текущим состоянием соединения.

             enum { warning(1), fatal(2), (255) } AlertLevel;

             enum {
                 close_notify(0),
                 unexpected_message(10),
                 bad_record_mac(20),
                 decryption_failed(21),
                 record_overflow(22),
                 decompression_failure(30),
                 handshake_failure(40),
                 no_certificate_RESERVED (41),
                 bad_certificate(42),
                 unsupported_certificate(43),
                 certificate_revoked(44),
                 certificate_expired(45),
                 certificate_unknown(46),
                 illegal_parameter(47),
                 unknown_ca(48),
                 access_denied(49),
                 decode_error(50),
                 decrypt_error(51),
                 export_restriction_RESERVED(60),
                 protocol_version(70),
                 insufficient_security(71),
                 internal_error(80),
                 user_canceled(90),
                 no_renegotiation(100),
                 (255)
             } AlertDescription;

             struct {
                 AlertLevel level;
                 AlertDescription description;
             } Alert;

7.2.1. Сигнал закрытия

Клиент и сервер должны иметь общую информацию о завершении соединения во избежание атак «на отсечение» (truncation attack). Любая из сторон может инициировать обмен сообщениями о закрытии.

close_notify

Это сообщение уведомляет получателя о том, что сервер больше не будет передавать сообщений через данное соединение. Отметим, что в TLS 1.1 сбой при закрытии соединения больше не делает сессию невозобновляемой. Это отличие от TLS 1.0 обусловлено общепринятой практикой.

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

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

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

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

7.2.2. Сигнализация ошибок

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

unexpected_message — неожиданное сообщение

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

bad_record_mac — некорректное значение MAC

Этот сигнал возвращается при получении записи с некорректным значением MAC. Такой сигнал также должен возвращаться при неприемлемой расшифровке TLSCiphertext — размер не кратен размеру блока или не допустимы значения заполнения. Ошибка всегда является критической.

decryption_failed13

Этот сигнал TLS версии 1.0 недопустимо передавать в TLS 1.1.

Примечание. Если сигналы bad_record_mac и decryption_failed различать, может возникнуть возможность атаки на режим CBC, используемый в TLS 1.0 [CBCATT]. Предпочтительно всегда использовать bad_record_mac для сокрытия конкретного типа ошибки.

record_overflow — переполнение записи

Полученная запись TLSCiphertext имеет размер, превышающий 214+2048 байт, или запись была расшифрована в запись TLSCompressed, размер которой превысил 214+1024 байт. Сигнал является критическим.

decompression_failure — отказ при декомпрессии

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

handshake_failure — отказ при согласовании

Получение сигнала handshake_failure говорит о том, что отправитель оказался не способен согласовать приемлемый набор параметров защиты. Ошибка является критической.

no_certificate_RESERVED

Этот сигнал использовался в SSLv3, но не в TLS. Реализациям не следует передавать такие сигналы.

bad_certificate — некорректный сертификат

Сертификат поврежден, содержит подписи, которые не удалось проверить, и т. п.

unsupported_certificate — неподдерживаемый сертификат

Тип сертификата не поддерживается.

certificate_revoked — отозванный сертификат

Сертификат был отозван подписавшей его стороной.

certificate_expired — устаревший сертификат

Срок действия сертификата истек.

certificate_unknown — неизвестный сертификат

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

illegal_parameter — недопустимый параметр

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

unknown_ca — неизвестный удостоверяющий центр

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

access_denied — доступ отвергнут

Был получен корректный сертификат, но при контроле доступа отправитель принял решение об отказе от согласования. Ошибка является критической.

decode_error — ошибка декодирования

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

decrypt_error — ошибка дешифровки

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

export_restriction_RESERVED — экспортные ограничения (резерв)

Этот сигнал использовался в TLS 1.0, но не применяется в TLS 1.1.

protocol_version — версия протокола

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

insufficient_security — недостаточная защита

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

internal_error — внутренняя ошибка

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

user_canceled — отказ пользователя

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

no_renegotiation — отказ от повторного согласования

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

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

Новые значения для сигналов должны определяться по процедуре RFC 2434 Standards Action. Значения приведены в разделе 1214 «Согласование с IANA».

7.3. Обзор протокола Handshake

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

Протокол TLS Handshake включает следующие этапы:

  • обмен сообщениями hello для согласования алгоритмов, обмена случайными значениями и проверки возобновляемости сессии;

  • обмен требуемыми криптографическими параметрами, позволяющими клиенту и серверу согласовать предварительный секрет (premaster secret);

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

  • генерация первичного секрета (master secret) из предварительного (premaster secret) и переданных друг другу случайных значений;

  • предоставление параметров безопасности уровню записи;

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

Отметим, что вышележащим протоколам не следует чересчур доверять TLS в плане согласования сторонами наиболее строго из возможных вариантов — существует множество способов, когда перехват с участием человека (MITM15) может использоваться для снижения уровня защиты вплоть до минимально возможного. Протокол рассчитан на минимизацию риска, но атаки все равно возможны — например, атакующий может блокировать доступ к порту, через который работает служба защиты и попытаться вынудить партнеров организовать соединение без проверки подлинности. Фундаментальным правилом является необходимость понимать на верхних уровнях реальные потребности в защите и никогда не передавать данные через канал, не обеспечивающий требуемого уровня защиты. Протокол TLS является защищенным, поскольку любой из шифров обеспечивает заявленный уровень защиты — если вы согласовали использование алгоритма 3DES с обменом RSA для 1024-битовых ключей с хостом, чей сертификат был подтвержден, вы может быть уверенными в защите.

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

Эти цели могут быть достигнуты с помощью протокола согласования (handshake), работу которого кратко можно описать следующим образом — клиент отправляет приветственное сообщение (hello), на которое сервер отвечает своим приветствием hello или, при возникновении критической ошибки, соединение будет разорвано. Сообщения hello от клиента и сервера служат для организации защищенного соединения между сторонами. При обмене этими сообщениями организуются следующие атрибуты: Protocol Version, Session ID, Cipher Suite, Compression Method. В дополнение к ним происходит генерация случайных значений ClientHello.random и ServerHello.random с обменом ими.

Для реального обмена ключами используется до 4 сообщений — сертификат сервера, серверный обмен ключами, сертификат клиента, клиентский обмен ключами. Может быть создан новый метод обмена ключами путем задания формата для этих сообщений и определения способа использования, который позволит согласовать между клиентом и сервером общий (shared) секрет. Этот секрет должен быть достаточно длинным — определенные к настоящему моменту методы обмена ключами поддерживают секреты размером от 48 до 128 байтов.

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

Клиент                                               Сервер

ClientHello                  -------->
                                                ServerHello
                                               Certificate*
                                         ServerKeyExchange*
                                        CertificateRequest*
                             <--------      ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished                     -------->
                                         [ChangeCipherSpec]
                             <--------             Finished
Данные приложений            <------->    Данные приложений

* необязательное сообщение

Рисунок 1. Поток сообщений при полном согласовании


После этого клиент передает сообщение о смене шифра (change cipher spec) и копирует ожидающее значение Cipher Spec в текущее значение Cipher Spec. Клиент может сразу после этого передавать финальное сообщение с использованием новых алгоритмов, ключей и секретов. В ответ сервер будет передавать свое сообщение о смене шифра (change cipher spec), переносить ожидающее значение Cipher Spec в текущее и передавать сообщение о завершении с использованием нового Cipher Spec. На этом согласование завершается — клиент и сервер могут начать обмен данными приложений (см. Рисунок 1). Данные приложений недопустимо передавать до завершения первого согласования (до выбора шифронабора, отличного от TLS_NULL_WITH_NULL_NULL).

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

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

Клиент передает сообщение ClientHello, используя Session ID возобновляемой сессии. Сервер проверяет соответствие этой сессии своему кэшу. Если в кэше найден соответствующий идентификатор сессии и сервер согласен на ее возобновление в указанном состоянии, он передает сообщение ServerHello с таким же значением Session ID. Далее клиент и сервер должны передать сообщения о смене шифра и сразу же перейти к сообщениям о завершении. На этом восстановление сессии завершается, клиент и сервер могут обмениваться данными прикладных уровней (см. Рисунок 2). Если значение Session ID не найдено, сервер генерирует новый идентификатор, после чего клиент и сервер TLS выполняют полную процедуру согласования.

Клиент                                                Сервер

ClientHello                   -------->
                                                 ServerHello
                                          [ChangeCipherSpec]
                              <--------             Finished
[ChangeCipherSpec]
Finished                      -------->
Данные приложений             <------->    Данные приложений

Рисунок 2. Поток сообщений для сокращенного согласования


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

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

Протокол TLS Handshake является одним из определенных клиентов вышележащего уровня для протокола TLS Record. Этот протокол служит для согласования параметров защиты сессии. Сообщения Handshake передаются уровню TLS Record, где они инкапсулируются в одну или несколько структур TLSPlaintext, обрабатываемых и передаваемых в соответствии с текущим активным состоянием сессии.

      enum {
          hello_request(0), client_hello(1), server_hello(2),
          certificate(11), server_key_exchange (12),
          certificate_request(13), server_hello_done(14),
          certificate_verify(15), client_key_exchange(16),
          finished(20), (255)
      } HandshakeType;

      struct {
          HandshakeType msg_type;    /* тип сообщения */
          uint24 length;             /* число байтов в сообщении */
          select (HandshakeType) {
              case hello_request:       HelloRequest;
              case client_hello:        ClientHello;
              case server_hello:        ServerHello;
              case certificate:         Certificate;
              case server_key_exchange: ServerKeyExchange;
              case certificate_request: CertificateRequest;
              case server_hello_done:   ServerHelloDone;
              case certificate_verify:  CertificateVerify;
              case client_key_exchange: ClientKeyExchange;
              case finished:            Finished;
          } body;
      } Handshake;

Сообщения протокола согласования представлены ниже в том порядке, в котором они должны передаваться; нарушение порядка сообщений считается критической ошибкой. Необязательные сообщения могут быть опущены. Описанный порядок имеет исключение — сообщение Certificate при согласовании используется дважды (одно от сервера клиенту, второе обратно), но описано только для первого случая. Сообщения Hello Request могут передаваться в любой момент, но клиенту следует игнорировать такие сообщения, приходящие посреди согласования.

Значения для новых типов сообщений Handshake должны определяться по процедуре RFC 2434 Standards Action. Значения приведены в разделе 1216 «Согласование с IANA».

7.4.1. Сообщения Hello

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

7.4.1.1. Запрос приветствия

Сообщение с запросом приветствия (hello request) может быть передано сервером в любой момент.

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

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

Структура сообщения

             struct { } HelloRequest;

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

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

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

Клиентское сообщение hello включает случайную структуру, которая будет позднее использоваться протоколом.

      struct {
         uint32 gmt_unix_time;
         opaque random_bytes[28];
      } Random;

gmt_unix_time

Текущее время и дата в 32-битовом формате UNIX (число секунд с полуночи 1 января 1970 по GMT без учета високосных секунд) по внутренним часам отправителя. Для базового протокола TLS корректность хода часов не имеет значения, однако протоколы вышележащих уровней могут вносить дополнительные требования.

random_bytes

28 байтов, создаваемых защищенным генератором случайных чисел.

Клиентское сообщение hello включает идентификатор сессии переменного размера. Если это значение не пусто, оно идентифицирует сессию между этим клиентом и сервером, чьи параметры безопасности клиент желает использовать повторно. Идентификатор сессии может быть взят из прежнего соединения, текущего соединения или другого, активного в данный момент соединения. Второй вариант полезен в тех случаях, когда клиент желает лишь обновить случайные структуры и производные от них значения, а третий вариант позволяет организовать несколько независимых защищенных соединений без полного повтора протокола согласования. Эти независимые соединения могут происходить последовательно или одновременно — значение SessionID становится корректным, когда согласование завершается обменом сообщениями Finished и сохраняет корректность до удаления по сроку или в результате критической ошибки на связанном с сессией соединении. Реальное содержимое SessionID определяется сервером.

      opaque SessionID<0..32>;

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

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

       uint8 CipherSuite[2];    /* селектор шифронабора */

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

      enum { null(0), (255) } CompressionMethod;

      struct {
          ProtocolVersion client_version;
          Random random;
          SessionID session_id;
          CipherSuite cipher_suites<2..2^16-1>;
          CompressionMethod compression_methods<1..2^8-1>;
      } ClientHello;17

client_version

Версия протокола TLS, которую клиент желает использовать для взаимодействия с сервером в этой сессии. Следует использовать последнюю (с максимальным номером) из поддерживаемых клиентом версий. Для данной версии спецификации следует указывать номер версии протокола 3.2 (см. приложение E в части совместимости).

random

Генерируемая клиентом случайная структура.

session_id

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

cipher_suites

Список криптографических опций, поддерживаемых клиентом, с указанием предпочитаемого клиентом варианта первым. Если поле session_id не пусто (запрос на восстановление сессии), этот вектор должен включать по крайней мере cipher_suite для данной сессии. Значения определены в Приложении A.5.

compression_methods

Список методов сжатия, поддерживаемых клиентом и отсортированных в порядке снижения предпочтений клиента. Если поле session_id не пусто (запрос на восстановление сессии), список должен включать по крайней мере compression_method для данной сессии. Этот вектор должен включать, а все реализации должны поддерживать компрессию CompressionMethod.null. Это позволяет клиенту и серверу согласовать сжатие во всех случаях.

После передачи клиентом сообщения hello он ждет от сервера ответного сообщения hello. До этого все прочие согласующие сообщения от сервера трактуются, как критические ошибки.

Примечание по совместимости с новыми версиями.

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

Примечание. Применение дополнительных данных из сообщений ClientHello описано в RFC 3546 [TLSEXT].

7.4.1.3. Приветствие от сервера

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

Структура сообщения

       struct {
           ProtocolVersion server_version;
           Random random;
           SessionID session_id;
           CipherSuite cipher_suite;
           CompressionMethod compression_method;
       } ServerHello;

server_version

Это поле указывает низший из предложенных клиентом и высший из поддерживаемых сервером номер версии протокола. Для данной версии спецификации используется номер 3.2 (см. Приложение E в части совместимости).

random

Эта структура генерируется сервером и должна отличаться и быть независимой от ClientHello.random.

session_id

Идентификатор сессии, соответствующий данному соединению. Если значение ClientHello.session_id было непусто, сервер будет искать соответствие в своем кэше сессий. Если соответствие найдено и сервер желает организовать новое соединение с использованием указанного состояния сессии, он будет возвращать представленный клиентом идентификатор сессии. Это указывает на восстанавливаемый сеанс и требует от сторон перехода непосредственно к сообщениям finished. В остальных случаях данное поле будет содержать значение, идентифицирующее новую сессию. Сервер может возвратить пустое поле session_id, указывая на то, что сессия не была кэширована и, следовательно, не может быть восстановлена. Если сессия восстанавливается, в ней должен использоваться согласованный ранее шифронабор.

cipher_suite

Один шифронабор, выбранный сервером из списка в ClientHello.cipher_suites. Для восстанавливаемых сессий это поле включает значение из состояния восстанавливаемой сессии.

compression_method

Один алгоритм сжатия, выбранный сервером из списка в ClientHello.compression_methods. Для восстанавливаемых сессий это поле включает значение из состояния восстанавливаемой сессии.

7.4.2. Сертификат сервера

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

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

Алгоритм обмена ключами

Тип сертификата ключа

RSA

Открытый ключ RSA; сертификат должен разрешать использование ключа для шифрования.

DHE_DSS

Открытый ключ DSS.

DHE_RSA

Открытый ключ RSA, который может применяться для подписи.

DH_DSS

Ключ Diffie-Hellman. В качестве алгоритма для подписания сертификата должен использоваться DSS.

DH_RSA

Ключ Diffie-Hellman. В качестве алгоритма для подписания сертификата должен использоваться RSA.

Все профили сертификатов, ключей и криптографических форматов определены рабочей группой IETF PKIX [PKIX]. При наличии расширенного использования ключей должен устанавливаться бит digitalSignature для ключа, выбранного для подписи, как описано выше, а бит keyEncipherment должен устанавливаться для разрешения шифрования, как описано выше. Бит keyAgreement должен устанавливаться для сертификатов Diffie-Hellman.

По мере определения CipherSuite с новыми методами обмена ключами для протокола TLS спецификации этих методов будут включать формат и требуемую информацию о ключах.

Структура сообщения

      opaque ASN.1Cert<1..2^24-1>;

      struct {
          ASN.1Cert certificate_list<0..2^24-1>;
      } Certificate;

certificate_list

Последовательность (цепочка — chain) сертификатов X.509v3. Сертификат отправителя должен быть в списке первым. Каждый последующий сертификат должен напрямую сертифицировать своего предшественника в списке. Поскольку проверка сертификатов требует независимого распространения корневых сертификатов, самоподписанный сертификат, задающий коневой удостоверяющий центр, может быть опущен в предположении, что удаленная сторона уже имеет этот сертификат и может выполнить проверку в любом случае.

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

Примечание. PKCS #7 [PKCS7] не используется в качестве формата векторов сертификата, поскольку расширенные сертификаты PKCS #6 [PKCS6] не используются. Кроме того, PKCS #7 определяет SET вместо SEQUENCE, что осложняет задачу разбора.

7.4.3. Серверное сообщение при обмене ключами

Это сообщение передается сразу же вслед за сообщением с сертификатом сервера (или серверным сообщением hello при анонимном согласовании).

Сообщение обмена ключами передается сервером только в тех случаях, когда сообщение с сертификатом сервера (если оно передавалось) не содержит всех данных, позволяющих клиенту обменяться предварительным секретом (premaster secret). Это возникает при перечисленных ниже методах обмена ключами:

DHE_DSS

DHE_RSA

DH_anon

Не допускается передача сервером сообщения обмена ключами для следующих методов обмена ключами:

RSA

DH_DSS

DH_RSA

Это сообщение содержит криптографическую информацию, позволяющую клиенту обменяться предварительным секретом — с шифрованием предварительного секрета с помощью открытого ключа RSA или завершением обмена ключами с помощью открытого ключа Diffie-Hellman (результатом обмена будет предварительный секрет).

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

Структура сообщения

      enum { rsa, diffie_hellman } KeyExchangeAlgorithm;

      struct {
          opaque rsa_modulus<1..2^16-1>;
          opaque rsa_exponent<1..2^16-1>;
      } ServerRSAParams;

rsa_modulus

Модули временного серверного ключа RSA.

rsa_exponent

Открытый показатель (exponent) временного серверного ключа RSA.

       struct {
           opaque dh_p<1..2^16-1>;
           opaque dh_g<1..2^16-1>;
           opaque dh_Ys<1..2^16-1>;
       } ServerDHParams;     /* Эфемерные параметры DH */

dh_p

Основной модуль для операций Diffie-Hellman.

dh_g

Генератор, используемый для операций Diffie-Hellman.

dh_Ys

Открытое значение Diffie-Hellman для сервера (g^X mod p).

      struct {
          select (KeyExchangeAlgorithm) {
              case diffie_hellman:
                  ServerDHParams params;
                  Signature signed_params;
              case rsa:
                  ServerRSAParams params;
                  Signature signed_params;
          };
      } ServerKeyExchange;

      struct {
          select (KeyExchangeAlgorithm) {
              case diffie_hellman:
                  ServerDHParams params;
              case rsa:
                  ServerRSAParams params;
          };
       } ServerParams;

params

Серверные параметры обмена ключами.

signed_params

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

md5_hash

          MD5(ClientHello.random + ServerHello.random + ServerParams);

sha_hash

          SHA(ClientHello.random + ServerHello.random + ServerParams);

      enum { anonymous, rsa, dsa } SignatureAlgorithm;


      struct {
          select (SignatureAlgorithm) {
              case anonymous: struct { };
              case rsa:
                  digitally-signed struct {
                      opaque md5_hash[16];
                      opaque sha_hash[20];
                  };
              case dsa:
                  digitally-signed struct {
                      opaque sha_hash[20];
                  };
              };
          };
      } Signature;

7.4.4. Запрос сертификата

Неанонимный сервер может запросить сертификат у клиента, если это приемлемо для выбранного шифронабора. При передаче этого сообщения оно следует непосредственно за серверным сообщением Key Exchange (или, при его отсутствии, за серверным сообщением Certificate).

Структура сообщения

      enum {
          rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),
          rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6),
          fortezza_dms_RESERVED(20),
          (255)

      } ClientCertificateType;

      opaque DistinguishedName<1..2^16-1>;

      struct {
          ClientCertificateType certificate_types<1..2^8-1>;
          DistinguishedName certificate_authorities<0..2^16-1>;
      } CertificateRequest;

certificate_types

Это поле содержит список типов запрошенных сертификатов, отсортированный в порядке предпочтений сервера.

certificate_authorities

Список различаемых имен подходящих удостоверяющих центров (certificate authority). Эти имена могут задавать желаемое имя корневого CA или подчиненного CA; таким образом, сообщение может использоваться для описания желаемого корневого УЦ и желаемой области проверки (authorization space). Если список certificate_authorities пуст, клиент может передать любой сертификат подходящего типа ClientCertificateType, если нет каких-либо внешних соглашений, препятствующих этому.

Значения ClientCertificateType делятся на три группы:

  1. значения от 0 до 63 (шестнадцатеричное 0x3F), включительно, зарезервированы для протоколов IETF Standards Track;

  2. значения от 64 (шестнадцатеричное 0x40) до 223 (шестнадцатеричное 0xDF), включительно, зарезервированы для протоколов, не относящихся к категории Standards Track;

  3. значения от 224 (шестнадцатеричное 0xE0) до 255 (шестнадцатеричное 0xFF), включительно, зарезервированы для частных применений.

Дополнительная информация о роли IANA в распределении значений ClientCertificateType описана в разделе 1218.

Примечание. Зарезервированные значения (RESERVED) не могут использоваться, они предназначены для SSLv3.

Примечание. DistinguishedName являются производными от [X501] и представляются в формате DER.

Примечание. Анонимному серверу, запрашивающему идентификацию клиента, возвращается критический сигнал handshake_failure.

7.4.5. Серверное сообщение hello done

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

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

При получении от сервера сообщения hello done клиенту следует убедиться в предоставлении сервером корректного сертификата (если это требуется) и проверить приемлемость серверных параметров hello.

Структура сообщения

      struct { } ServerHelloDone;

7.4.6. Сертификат клиента

Это первое сообщение, которое клиент может передать после получения от сервера сообщения hello done. Сообщение передается только в тех случаях, когда сервер запрашивает сертификат. Если подходящий сертификат отсутствует, клиенту следует передать сообщение без сертификата (со структурой certificate_list нулевого размера). Если серверу требуется аутентификация клиента для продолжения процедуры согласования, он может возвратить критический сигнал об отказе согласования. Сертификаты клиента передаются с использованием структуры Certificate, определенной в параграфе 7.4.2.

Примечание. При использовании обмена ключами на основе статического метода Diffie-Hellman (DH_DSS или DH_RSA) и запросе аутентификации клиента, группа и генератор Diffie-Hellman, представленные в сертификате клиента, должны соответствовать заданным сервером параметрам Diffie-Hellman, если клиентские параметры используются для обмена ключами.

7.4.7. Клиентское сообщение при обмене ключами

Это сообщение всегда передается клиентом и должно следовать сразу же за сообщением с сертификатом клиента, если оно передается. Если клиент не передает сертификата, данное сообщение должно быть первым сообщением клиента после получения от сервера сообщения hello done.

С помощью этого сообщения задается предварительный секрет (premaster secret) путем прямой передачи с шифрованием RSA или передачи параметров Diffie-Hellman, позволяющих каждой стороне организовать общий секрет. Когда применяется метод обмена ключами DH_RSA или DH_DSS, запрашивается клиентский сертификат и клиент способен ответить сертификатом, содержащим открытый ключ Diffie-Hellman, параметры которого (группа и генератор) соответствуют заданным в сертификате сервера, это сообщение должно передаваться без каких-либо данных.

Выбор сообщений зависит от используемого метода обмена ключами. Определение KeyExchangeAlgorithm дано в параграфе 7.4.3.

Структура сообщения

      struct {
          select (KeyExchangeAlgorithm) {
              case rsa: EncryptedPreMasterSecret;
              case diffie_hellman: ClientDiffieHellmanPublic;
          } exchange_keys;
      } ClientKeyExchange;
7.4.7.1. Сообщение с зашифрованным (RSA) предварительным секретом

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

Структура сообщения

      struct {
          ProtocolVersion client_version;
          opaque random[46];
      } PreMasterSecret;

client_version

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

random

46 случайных байтов с защищенной генерацией.

      struct {
          public-key-encrypted PreMasterSecret pre_master_secret;
      } EncryptedPreMasterSecret;

pre_master_secret

Случайное значение, генерируемое клиентом и используемое для создания предварительного секрета, как описано в параграфе 8.1.

Примечание. Атака, обнаруженная Daniel Bleichenbacher [BLEI], может быть использована против сервера TLS, использующего RSA с кодированием PKCS#1 v 1.5. Атака основана на том, что разными способами можно вынудить сервер TLS проверять после расшифровки конкретного сообщения имеет ли оно корректный формат PKCS#1 v 1.5.

Лучший способом предотвращения уязвимости к таким атакам состоит в том, чтобы сделать некорректно отформатированные сообщения неотличимыми от блоков RSA с корректным форматом. В результате при получении некорректно форматированного блока RSA серверу следует генерировать случайное 48-байтовое значение и использовать его в качестве предварительного секрета. Таким образом, сервер будет вести себя независимо от корректности представления блока RSA.

[PKCS1B] определяет новый вариант кодирования PKCS#1, который более защищен от атак Bleichenbacher. Однако для максимальной совместимости с TLS 1.0 в спецификации TLS 1.1 сохранено исходное представление. Не известно атак Bleichenbacher, которые были бы возможны при выполнении приведенных выше рекомендаций.

Примечание для разработчиков. Зашифрованные с открытым ключом данные представляются в форме opaque-вектора <0..216-1> (см. параграф 4.7). таким образом, зашифрованному с помощью RSA значению PreMasterSecret в ClientKeyExchange предшествуют два байта размера. Эти байты являются избыточными в случае RSA, поскольку EncryptedPreMasterSecret является единственным элементом данных в ClientKeyExchange и размер их, следовательно, однозначно определен. В спецификации SSLv3 нет четкого описания представления данных, зашифрованных с открытым ключом, и, следовательно, многие реализации SSLv3 не включают байтов размера, помещая зашифрованные с помощью RSA данные напрямую в сообщение ClientKeyExchange.

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

Примечание для разработчиков. Сейчас известно, что возможны удаленные атаки на SSL с использованием временных параметров (time-based) по крайней мере для случаев размещения клиента и сервера в одной ЛВС. По этой причине в реализациях, применяющих статические ключи RSA, следует использовать «ослепление» RSA (blinding) или какой-либо иной метод, как описано в [TIMING].

Примечание. Номер версии в PreMasterSecret должен совпадать с номером версии, предложенной клиентом в ClientHello, а не согласованной для соединения версии. Это сделано для предотвращения атак на снижение номера версии. К сожалению, многие разработчики все-таки используют согласованный номер версии в результате чего проверка номера может приводить к отказам во взаимодействии с такими некорректными реализациями клиентов. Реализации клиентов должны, а реализации серверов могут проверять номер версии. На практике, поскольку при согласовании TLS коды MAC обеспечивают защиту от понижения версии и не известно атак на эти коды MAC, упомянутое несоответствие не рассматривается, как серьезный риск. Отметим, что при проверке сервером номера версии, ему следует выдавать случайное значение PreMasterSecret в случае ошибки вместо генерации сигнала, чтобы предотвратить возможность варианта атаки Bleichenbacher [KPR03].

7.4.7.2. Открытое значение Diffie-Hellman для клиента

Эта структура передает клиентское открытое значение Diffie-Hellman (Yc), если оно уже не было включено в сертификат клиента. Используемое для Yc кодирование определяется перечисляемым значением PublicValueEncoding. Эта структура является вариантом клиентского сообщения обмена ключами, а не сообщением, как таковым.

7.4.7.2. Открытое значение Diffie-Hellman для клиента

Эта структура передает клиентское открытое значение Diffie-Hellman (Yc), если оно уже не было включено в сертификат клиента. Используемое для Yc кодирование определяется перечисляемым значением PublicValueEncoding. Эта структура является вариантом клиентского сообщения обмена ключами, а не сообщением, как таковым.

Структура сообщения

      enum { implicit, explicit } PublicValueEncoding;

implicit

Если сертификат клиента уже содержит подходящий ключ Diffie-Hellman, Yc неявно уже задано и нет необходимости передавать его снова. В этом случае должно передаваться пустое сообщение Client Key Exchange.

explicit

Yc требуется передать явно.

      struct {
          select (PublicValueEncoding) {
              case implicit: struct { };
              case explicit: opaque dh_Yc<1..2^16-1>;
          } dh_public;
      } ClientDiffieHellmanPublic;

dh_Yc

Открытое значение Diffie-Hellman для клиента (Yc).

7.4.8. Проверка сертификата

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

Структура сообщения.

       struct {
            Signature signature;
       } CertificateVerify;

Тип Signature определен в параграфе 7.4.3.

      CertificateVerify.signature.md5_hash
          MD5(handshake_messages);

      CertificateVerify.signature.sha_hash
          SHA(handshake_messages);

Здесь handshake_messages указывает все согласующие сообщения, переданные или принятые, начиная с клиентского hello, вплоть (но не включая) до данного сообщения с учетом полей типа и размера сообщений. Это будет конкатенацией всех структур Handshake, определенных в параграфе 7.4 и использованных в обмене.

7.4.9. Сообщение Finished

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

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

      struct {
          opaque verify_data[12];
      } Finished;

verify_data

PRF(master_secret, finished_label, MD5(handshake_messages) + SHA-1(handshake_messages)) [0..11];

finished_label

Для сообщений Finished, переданных клиентом это строка client finished, а для серверных сообщений Finished — server finished.

handshake_messages

Все данные из всех согласующих сообщений (кроме HelloRequest), не включая текущего. Это только данные, видимые на уровне согласования и не включающие заголовков уровня записи. Это поле является конкатенацией всех структур Handshake, определенных в параграфе 7.4 и использованных при обмене.

Если сообщение Finished не защищено сообщением о смене шифра на соответствующем этапе согласования, возникает критическая ошибка.

Значение handshake_messages включает все согласующие сообщения с клиентского hello до (но не включая) данного сообщения Finished. Оно может отличаться от handshake_messages в параграфе 7.4.8, поскольку будет включать сообщение о проверке сертификата (если оно передавалось). Кроме того, handshake_messages для сообщений Finished от клиента будет отличаться от аналогичного параметра для серверного сообщения, поскольку одно из них передается раньше другого и не будет учитывать более позднее.

Примечание. Сообщения о смене шифра, сигналы и другие типы записей не относятся к согласующим сообщениям и не включаются в расчет хэш-значения. Не учитываются и сообщения Hello Request.

8. Криптографические расчеты

Для того, чтобы начать защиту соединения, протоколу TLS Record требуется спецификация набора алгоритмов, первичный секрет, а также случайные значения от клиента и сервера. Алгоритмы аутентификации, шифрования и MAC определяются значением cipher_suite, выбранным сервером и показанным в серверном сообщении hello. Алгоритм сжатия согласуется в сообщениях hello, они же служат для обмена случайными значениями. Остается лишь рассчитать первичный секрет.

8.1. Расчет первичного секрета

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

       master_secret = PRF(pre_master_secret, "master secret",
                           ClientHello.random + ServerHello.random)
                           [0..47];

Первичный секрет всегда имеет размер 48 байтов. Размер предварительного секрета зависит от метода обмена ключами.

8.1.1. RSA

При использовании RSA для аутентификации сервера и обмена ключами клиент генерирует 48-байтовое значение pre_master_secret, шифрует его с помощью открытого ключа сервера и передает серверу. Сервер использует секретный ключ для расшифровки pre_master_secret. Обе стороны могут преобразовать pre_master_secret в master_secret, как указано выше.

Цифровые подписи RSA вычисляются с использованием блоков PKCS #1 [PKCS1] типа 1. Шифрование RSA с открытым ключом выполняется с использованием блоков PKCS #1 типа 2.

8.1.2. Diffie-Hellman

Выполняется обычный расчет по методу Diffie-Hellman. Согласованный ключ (Z) используется в качестве pre_master_secret и преобразуется в master_secret, как указано выше. Ведущие байты Z, содержащие только нулевые биты, вырезаются до использования ключа Z в качестве pre_master_secret.

Примечание: Параметры Diffie-Hellman задаются сервером и могут быть эфемерными или содержащимися в сертификате сервера.

9. Обязательные шифронаборы

В отсутствие профиля приложения, задающего иное, соответствующее TLS приложение должно реализовать шифронабор TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA.

10. Прикладной протокол

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

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

Вопросы безопасности обсуждаются на протяжении всего документа и, особенно, в Приложениях D, E и F.

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

В этом документе описано множество новых реестров, которые будут созданы агентством IANA. Рекомендуется размещать такие реестры в общей категории TLS.

В параграфе 7.4.3 описан реестр TLS ClientCertificateType, поддерживаемый IANA и определяющий значения кодов. Идентификаторы ClientCertificateType со значениями из диапазона 0-63 (десятичные), включительно, присваиваются по процедуре RFC 2434 Standards Action. Значения из диапазона 64-223 (десятичные), включительно, присваиваются по процедуре [RFC2434] Specification Required. Значения из диапазона 224-255 (десятичные), включительно, резервируются для частных применений (RFC 2434 Private Use). Начальные значения для этих реестров выделяются в соответствии с параграфом 7.4.4 настоящего документа.

Приложение A.5 описывает реестр TLS Cipher Suite Registry, поддерживаемый IANA и определяющий значения идентификаторов шифронаборов. Значения с первым байтом из диапазона 0-191 (десятичные), включительно, присваиваются по процедуре RFC 2434 Standards Action. Значения с первым байтом из диапазона 192-254 (десятичные), включительно, присваиваются по процедуре [RFC2434] Specification Required. Значения с первым байтом 255 (десятичное) резервируются для частных применений (RFC 2434 Private Use). Начальные значения для этих реестров выделяются в соответствии с Приложением A.5 к настоящему документу, [TLSAES] и разделом 3 [TLSKRB].

Раздел 6 требует определять все значения ContentType по процедуре RFC 2434 Standards Action. Агентство IANA создало реестр TLS ContentType, изначально включающий значения из параграфа 6.2.1 настоящего документа. . Будущие значения должны выделяться по процедуре Standards Action, как описано в [RFC2434].

Параграф 7.2 требует выделения всех значений Alert по процедуре RFC 2434 Standards Action. Агентство IANA создало реестр TLS Alert, изначально заполненный значениями из параграфа 7.2 настоящего документа и раздела 4 [TLSEXT]. Будущие значения должны выделяться по процедуре Standards Action, как описано в [RFC2434].

Параграф 7.4 требует выделения всех значений HandshakeType по процедуре RFC 2434 Standards Action. Агентство IANA создало реестр TLS HandshakeType, изначально заполненный значениями из параграфа 7.4 настоящего документа и параграфа 2.4 [TLSEXT]. Будущие значения должны выделяться по процедуре Standards Action, как описано в [RFC2434].

Приложение A. Значения протокольных констант

В этом разделе описаны протокольные типы и константы.

A.1. Уровень Record

   struct {
       uint8 major, minor;
   } ProtocolVersion;

   ProtocolVersion version = { 3, 2 };     /* TLS v1.1 */

   enum { 
       change_cipher_spec(20), alert(21), handshake(22), application_data(23), (255)
   } ContentType;

   struct {
       ContentType type;
       ProtocolVersion version;
       uint16 length;
       opaque fragment[TLSPlaintext.length];
   } TLSPlaintext;

   struct {
       ContentType type;
       ProtocolVersion version;
       uint16 length;
       opaque fragment[TLSCompressed.length];
   } TLSCompressed;

   struct {
       ContentType type;
       ProtocolVersion version;
       uint16 length;
       select (CipherSpec.cipher_type) {
           case stream: GenericStreamCipher;
           case block:  GenericBlockCipher;
       } fragment;
   } TLSCiphertext;

   stream-ciphered struct {
       opaque content[TLSCompressed.length];
       opaque MAC[CipherSpec.hash_size];
   } GenericStreamCipher;

   block-ciphered struct {
       opaque IV[CipherSpec.block_length];
       opaque content[TLSCompressed.length];
       opaque MAC[CipherSpec.hash_size];
       uint8 padding[GenericBlockCipher.padding_length];
       uint8 padding_length;
   } GenericBlockCipher;

A.2. Сообщение о смена шифра

   struct {
       enum { change_cipher_spec(1), (255) } type;
   } ChangeCipherSpec;

A.3. Сообщения Alert

   enum { warning(1), fatal(2), (255) } AlertLevel;

       enum {
           close_notify(0),
           unexpected_message(10),
           bad_record_mac(20),
           decryption_failed(21),
           record_overflow(22),
           decompression_failure(30),
           handshake_failure(40),
           no_certificate_RESERVED (41),
           bad_certificate(42),
           unsupported_certificate(43),
           certificate_revoked(44),
           certificate_expired(45),
           certificate_unknown(46),
           illegal_parameter(47),
           unknown_ca(48),
           access_denied(49),
           decode_error(50),
           decrypt_error(51),
           export_restriction_RESERVED(60),
           protocol_version(70),
           insufficient_security(71),
           internal_error(80),
           user_canceled(90),
           no_renegotiation(100),
           (255)
       } AlertDescription;

   struct {
       AlertLevel level;
       AlertDescription description;
   } Alert;

A.4. Протокол Handshake

   enum {
       hello_request(0), client_hello(1), server_hello(2),
       certificate(11), server_key_exchange (12),
       certificate_request(13), server_hello_done(14),
       certificate_verify(15), client_key_exchange(16),
       finished(20), (255)
   } HandshakeType;

   struct {
       HandshakeType msg_type;
       uint24 length;
       select (HandshakeType) {
           case hello_request:       HelloRequest;
           case client_hello:        ClientHello;
           case server_hello:        ServerHello;
           case certificate:         Certificate;
           case server_key_exchange: ServerKeyExchange;
           case certificate_request: CertificateRequest;
           case server_hello_done:   ServerHelloDone;
           case certificate_verify:  CertificateVerify;
           case client_key_exchange: ClientKeyExchange;
           case finished:            Finished;
       } body;
   } Handshake;

A.4.1. Сообщения Hello

   struct { } HelloRequest;

   struct {
       uint32 gmt_unix_time;
       opaque random_bytes[28];
   } Random;

   opaque SessionID<0..32>;

   uint8 CipherSuite[2];

   enum { null(0), (255) } CompressionMethod;

   struct {
       ProtocolVersion client_version;
       Random random;
       SessionID session_id;
       CipherSuite cipher_suites<2..2^16-1>;
       CompressionMethod compression_methods<1..2^8-1>;
   } ClientHello;19

   struct {
       ProtocolVersion server_version;
       Random random;
       SessionID session_id;
       CipherSuite cipher_suite;
       CompressionMethod compression_method;
   } ServerHello;

A.4.2. Сообщения при аутентификации сервера и обмене ключами

   opaque ASN.1Cert<2^24-1>;

   struct {
       ASN.1Cert certificate_list<0..2^24-1>;
   } Certificate;

   enum { rsa, diffie_hellman } KeyExchangeAlgorithm;

   struct {
       opaque rsa_modulus<1..2^16-1>;
       opaque rsa_exponent<1..2^16-1>;
   } ServerRSAParams;

   struct {
       opaque dh_p<1..2^16-1>;
       opaque dh_g<1..2^16-1>;
       opaque dh_Ys<1..2^16-1>;
   } ServerDHParams;

   struct {
       select (KeyExchangeAlgorithm) {
           case diffie_hellman:
               ServerDHParams params;
               Signature signed_params;
           case rsa:
               ServerRSAParams params;
               Signature signed_params;
       };
   } ServerKeyExchange;

   enum { anonymous, rsa, dsa } SignatureAlgorithm;

   struct {
       select (KeyExchangeAlgorithm) {
           case diffie_hellman:
               ServerDHParams params;
           case rsa:
               ServerRSAParams params;
       };
   } ServerParams;

   struct {
       select (SignatureAlgorithm) {
           case anonymous: struct { };
           case rsa:
               digitally-signed struct {
                   opaque md5_hash[16];
                   opaque sha_hash[20];
               };
           case dsa:
               digitally-signed struct {
                   opaque sha_hash[20];
               };
           };
       };
   } Signature;

   enum {
       rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),
    rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6),
    fortezza_dms_RESERVED(20),
    (255)
   } ClientCertificateType;

   opaque DistinguishedName<1..2^16-1>;

   struct {
       ClientCertificateType certificate_types<1..2^8-1>;
       DistinguishedName certificate_authorities<0..2^16-1>;
   } CertificateRequest;

   struct { } ServerHelloDone;

A.4.3. Сообщения при аутентификации клиента и обмене ключами

   struct {
       select (KeyExchangeAlgorithm) {
           case rsa: EncryptedPreMasterSecret;
           case diffie_hellman: ClientDiffieHellmanPublic;
       } exchange_keys;
   } ClientKeyExchange;

   struct {
       ProtocolVersion client_version;
       opaque random[46];
   }
   PreMasterSecret;

   struct {
       public-key-encrypted PreMasterSecret pre_master_secret;
   } EncryptedPreMasterSecret;

   enum { implicit, explicit } PublicValueEncoding;

   struct {
       select (PublicValueEncoding) {
           case implicit: struct {};
           case explicit: opaque DH_Yc<1..2^16-1>;
       } dh_public;
   } ClientDiffieHellmanPublic;

   struct {
       Signature signature;
   } CertificateVerify;

A.4.4. Сообщение о завершении согласования

   struct {
       opaque verify_data[12];
   } Finished;

A.5. Шифронаборы

Ниже определены коды шифронаборов CipherSuite, используемых в клиентских и серверных сообщениях hello.

Значение CipherSuite определяет спецификацию шифра, поддерживаемого протоколом TLS версии 1.1.

Код TLS_NULL_WITH_NULL_NULL определяет начальное состояние соединения TLS в процессе первого согласования для данного канала, но этот код недопустимо согласовывать, поскольку он не обеспечивает какой-либо защиты.

    CipherSuite TLS_NULL_WITH_NULL_NULL                = { 0x00,0x00 };

Приведенные ниже коды CipherSuite требуют от сервера обеспечения сертификата RSA, который может использоваться при обмене ключами. Сервер может запросить поддерживающий подписи сертификат RSA или DSS в сообщении с запросом сертификата.

    CipherSuite TLS_RSA_WITH_NULL_MD5                  = { 0x00,0x01 };
    CipherSuite TLS_RSA_WITH_NULL_SHA                  = { 0x00,0x02 };
    CipherSuite TLS_RSA_WITH_RC4_128_MD5               = { 0x00,0x04 };
    CipherSuite TLS_RSA_WITH_RC4_128_SHA               = { 0x00,0x05 };
    CipherSuite TLS_RSA_WITH_IDEA_CBC_SHA              = { 0x00,0x07 };
    CipherSuite TLS_RSA_WITH_DES_CBC_SHA               = { 0x00,0x09 };
    CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA          = { 0x00,0x0A };

Приведенные ниже значения CipherSuite используются для аутентифицируемого сервером (опционально, и клиентом) механизма Diffie-Hellman. DH обозначает шифронаборы, в которых сертификат сервера включает параметры Diffie-Hellman, подписанные удостоверяющим центром (CA — УЦ). DHE обозначает эфемерные значения Diffie-Hellman, где параметры Diffie-Hellman подписаны сертификатом DSS или RSA, который, в свою очередь, подписан УЦ. Используемый алгоритм подписи задается после параметра DH или DHE. Сервер может запросить у клиента сертификат RSA или DSS с возможностью подписи для его аутентификации или запросить сертификат Diffie-Hellman. Любые сертификаты Diffie-Hellman, предоставляемые клиентом, должны использовать описанные сервером параметры (группа и генератор).

    CipherSuite TLS_DH_DSS_WITH_DES_CBC_SHA            = { 0x00,0x0C };
    CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA       = { 0x00,0x0D };
    CipherSuite TLS_DH_RSA_WITH_DES_CBC_SHA            = { 0x00,0x0F };
    CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA       = { 0x00,0x10 };
    CipherSuite TLS_DHE_DSS_WITH_DES_CBC_SHA           = { 0x00,0x12 };
    CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x13 };
    CipherSuite TLS_DHE_RSA_WITH_DES_CBC_SHA           = { 0x00,0x15 };
    CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x16 };

Приведенные ниже коды используются для завершения анонимных коммуникаций Diffie-Hellman, в которых аутентификация сторон не выполняется. Отметим, что этот режим уязвим для MITM-атак и, следовательно, его применение настоятельно не рекомендуется.

    CipherSuite TLS_DH_anon_WITH_RC4_128_MD5           = { 0x00,0x18 };
    CipherSuite TLS_DH_anon_WITH_DES_CBC_SHA           = { 0x00,0x1A };
    CipherSuite TLS_DH_anon_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x1B };

На момент разработки SSLv3 и TLS 1.0 законодательство США ограничивало экспорт криптографических программ, поддерживающих некоторые криптостойкие алгоритмы. В соответствии с этими ограничениями была разработана серия шифров для работы с укороченными ключами. С ростом производительности компьютеров такие алгоритмы стали более слабыми и экспортные ограничения были сняты. Реализациям TLS 1.1 недопустимо согласовывать применение алгоритмов с сокращенными ключами для работы в режиме TLS 1.1. Однако для совместимости со старыми версиями такие алгоритмы могут указываться в сообщениях ClientHello для работы с серверами, которые поддерживают только TLS 1.0 или SSLv3. Клиенты TLS 1.1 должны убедиться, что сервер не выбрал один из таких алгоритмов в процессе согласования. Ниже перечислены с информационными целями и для сохранения номеров шифронаборы, использующие укороченные ключи.

    CipherSuite TLS_RSA_EXPORT_WITH_RC4_40_MD5         = { 0x00,0x03 };
    CipherSuite TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5     = { 0x00,0x06 };
    CipherSuite TLS_RSA_EXPORT_WITH_DES40_CBC_SHA      = { 0x00,0x08 };
    CipherSuite TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA   = { 0x00,0x0B };
    CipherSuite TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA   = { 0x00,0x0E };
    CipherSuite TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA  = { 0x00,0x11 };
    CipherSuite TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA  = { 0x00,0x14 };
    CipherSuite TLS_DH_anon_EXPORT_WITH_RC4_40_MD5     = { 0x00,0x17 };
    CipherSuite TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA  = { 0x00,0x19 };

Перечисленные ниже шифронаборы были определены в [TLSKRB] и указаны здесь для полноты.

    CipherSuite    TLS_KRB5_WITH_DES_CBC_SHA           = { 0x00,0x1E }:
    CipherSuite    TLS_KRB5_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x1F };
    CipherSuite    TLS_KRB5_WITH_RC4_128_SHA           = { 0x00,0x20 };
    CipherSuite    TLS_KRB5_WITH_IDEA_CBC_SHA          = { 0x00,0x21 };
    CipherSuite    TLS_KRB5_WITH_DES_CBC_MD5           = { 0x00,0x22 };
    CipherSuite    TLS_KRB5_WITH_3DES_EDE_CBC_MD5      = { 0x00,0x23 };
    CipherSuite    TLS_KRB5_WITH_RC4_128_MD5           = { 0x00,0x24 };
    CipherSuite    TLS_KRB5_WITH_IDEA_CBC_MD5          = { 0x00,0x25 };

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

    CipherSuite  TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA    = { 0x00,0x26};
    CipherSuite  TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA    = { 0x00,0x27};
    CipherSuite  TLS_KRB5_EXPORT_WITH_RC4_40_SHA        = { 0x00,0x28};
    CipherSuite  TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5    = { 0x00,0x29};
    CipherSuite  TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5    = { 0x00,0x2A};
    CipherSuite  TLS_KRB5_EXPORT_WITH_RC4_40_MD5        = { 0x00,0x2B};

Перечисленные ниже экспортируемые шифронаборы были определены в [TLSAES] и указаны здесь для полноты.

         CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA      = { 0x00, 0x2F };
         CipherSuite TLS_DH_DSS_WITH_AES_128_CBC_SHA   = { 0x00, 0x30 };
         CipherSuite TLS_DH_RSA_WITH_AES_128_CBC_SHA   = { 0x00, 0x31 };
         CipherSuite TLS_DHE_DSS_WITH_AES_128_CBC_SHA  = { 0x00, 0x32 };
         CipherSuite TLS_DHE_RSA_WITH_AES_128_CBC_SHA  = { 0x00, 0x33 };
         CipherSuite TLS_DH_anon_WITH_AES_128_CBC_SHA  = { 0x00, 0x34 };
         CipherSuite TLS_RSA_WITH_AES_256_CBC_SHA      = { 0x00, 0x35 };
         CipherSuite TLS_DH_DSS_WITH_AES_256_CBC_SHA   = { 0x00, 0x36 };
         CipherSuite TLS_DH_RSA_WITH_AES_256_CBC_SHA   = { 0x00, 0x37 };
         CipherSuite TLS_DHE_DSS_WITH_AES_256_CBC_SHA  = { 0x00, 0x38 };
         CipherSuite TLS_DHE_RSA_WITH_AES_256_CBC_SHA  = { 0x00, 0x39 };
         CipherSuite TLS_DH_anon_WITH_AES_256_CBC_SHA  = { 0x00, 0x3A };

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

  1. Коды с первым байтом от 0x00 до 191 (шестнадцатеричное 0xBF), включительно, зарезервированы для протоколов IETF Standards Track.

  2. Коды с первым байтом от 192 (шестнадцатеричное 0xC0) до 254 (шестнадцатеричное 0xFE), включительно, зарезервированы для прочих протоколов.

  3. Коды с первым байтом 0xFF зарезервированы для частных применений.

Дополнительная информация о роли IANA в распределении кодов шифронаборов приведена в разделе 12.

Примечание. Значения кодов { 0x00, 0x1C } и { 0x00, 0x1D } зарезервированы для предотвращения конфликтов с шифронаборами на базе Fortezza в SSL3.

A.6. Параметры защиты

Параметры защиты определяются протоколом TLS Handshake и предоставляются протоколу уровню TLS Record для инициализации состояния соединения. Параметры защиты (SecurityParameters) включают:

            enum { null(0), (255) } CompressionMethod;

            enum { server, client } ConnectionEnd;

            enum { null, rc4, rc2, des, 3des, des40, aes, idea }
            BulkCipherAlgorithm;

            enum { stream, block } CipherType;

            enum { null, md5, sha } MACAlgorithm;

            /* К алгоритмам, указанным в CompressionMethod, BulkCipherAlgorithm и
               MACAlgorithm могут быть добавлены другие значения. */

            struct {
                ConnectionEnd entity;
                BulkCipherAlgorithm bulk_cipher_algorithm;
                CipherType cipher_type;
                uint8 key_size;
                uint8 key_material_length;
                MACAlgorithm mac_algorithm;
                uint8 hash_size;
                CompressionMethod compression_algorithm;
                opaque master_secret[48];
                opaque client_random[32];
                opaque server_random[32];
            } SecurityParameters;

Приложение B. Глоссарий

Advanced Encryption Standard (AES) — усовершенствованный стандарт шифрования

AES представляет собой широко распространенный симметричный алгоритм шифрования. Это блочный шифр с ключами размером 128, 192 или 256 битов и размером блока 16 байтов [AES]. TLS в настоящее время поддерживает только ключи размером 128 и 256 битов.

application protocol – прикладной протокол

Протокол, который обычно располагается непосредственно над транспортным уровнем (например, TCP/IP). Примерами прикладных протоколов могут служит HTTP, TELNET, FTP, SMTP.

asymmetric cipher – асимметричный шифр

См. public key cryptography.

authentication — аутентификация

Способность одного объекта проверить подлинность другого объекта.

block cipher – блочный шифр

Блочными шифрами называются алгоритмы шифрования, работающие с текстом, как с группами битов, называемыми блоками. Типичный размер блока составляет 64 бита.

bulk cipher

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

cipher block chaining (CBC) — сцепка шифрованных блоков

В режиме CBC для каждого шифруемого блока сначала применяется логическая операция «Исключающее-ИЛИ» XOR) с предыдущим зашифрованным блоком (или, при шифровании первого блока, с вектором инициализации — IV). При дешифровании блок сначала расшифровывается, затем применяется операция XOR с предыдущим шифрованным блоком (или IV).

certificate — сертификат

Будучи частью протокола X.509 (модель аутентификации ISO), сертификат выделяется удостоверяющим центром (Certificate Authority) и обеспечивает строгую связь между его владельцем или некими иными атрибутами и открытым ключом.

client — клиент

Объект-приложение, инициирующий соединение TLS с сервером. При этом клиент может инициировать организацию нижележащего транспортного соединения. Основное различие между клиентом и сервером заключается в их аутентификации — для сервера она используется всегда, а для клиента — опционально.

client write key — клиентский ключ записи

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

client write MAC secret — клиентский MAC-секрет для записи

Секретное значение, служащее для аутентификации данных, записываемых клиентом.

connection — соединение

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

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

DES является широко распространенным симметричным алгоритмом шифрования. DES представляет собой блочный шифр с 56-битовым ключом и 8-байтовыми блоками. Отметим, что в TLS при генерации ключей размер ключей DES трактуется, как 8 байтов (64 бита), но реально для защиты обеспечивается лишь 56 битов (младший бит каждого байта ключа предполагается установленным для обеспечения нечетности данного байта). DES также может работать в режиме, где для каждого блока данных используется три независимых ключа и 3-кратное шифрование. В этом случае получается размер ключа 168 битов (24 байта при генерации ключей в TLS) и обеспечивается эквивалент защиты с использованием ключей размером 112 битов. [DES], [3DES]

Digital Signature Standard (DSS) – стандарт цифровой подписи

Стандарт для цифровой подписи, включающий алгоритм цифровой подписи (Digital Signing Algorithm), одобренный NIST20 и опубликованный в мае 1994 г. Департаментом торговли США (U.S. Dept. of Commerce) в документе NIST FIPS PUB 186, Digital Signature Standard [DSS].

digital signatures – цифровые подписи

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

handshake — согласование

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

Initialization Vector (IV) – вектор инициализации

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

IDEA

Блочный шифр с размером блока 64 бита, разработанный Xuejia Lai и James Massey [IDEA].

Message Authentication Code (MAC) – код аутентификации сообщения

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

master secret — первичный секрет

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

MD5

Защищенная функция хеширования MD5 позволяет преобразовать поток данных произвольной длины в сигнатуру фиксированного размера (16 байтов) [MD5].

public key cryptography – шифрование с открытым ключом

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

one-way hash function – необратимая хэш-функция

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

RC2

Блочный шифр, разработанный Ron Rivest. Описан в работе [RC2]22.

RC4

Потоковый шифр, разработанный Ron Rivest. Совместимый шифр описан в [SCH].

RSA

Широко используемый алгоритм с открытым ключом, который может служить для шифрования и подписи [RSA].

salt — затравка

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

server — сервер

Прикладной объект, принимающий запросы на соединения от клиентов. См. также client.

session – сессия, сеанс

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

session identifier – идентификатор сессии

Генерируемое сервером значение, которое служит для идентификации конкретной сессии.

server write key — серверный ключ записи

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

server write MAC secret — серверный секрет MAC для записи

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

SHA

Алгоритм защищенного хэширования SHA23, определенный в FIPS PUB 180-2. Выходное значение имеет размер 20 байтов. Отметим, что все ссылки на SHA в реальности относятся к модификации алгоритма SHA-1 [SHA].

SSL

Протокол защищенного сокета SSL24 [SSL3] компании Netscape. Протокол TLS основан на SSL версии 3.0.

stream cipher – потоковый шифр

Алгоритм шифрования, преобразующий ключ в (строго) криптографически защищенный поток, который применяется для логической операции XOR с незашифрованными данными.

symmetric cipher – симметричный шифр

См. bulk cipher на стр. 30.

Transport Layer Security (TLS) — защита транспортного уровня

Данный протокол, а также рабочая группа Transport Layer Security в IETF. См. Комментарии в конце документа.

Приложение C. Определения шифронаборов

CipherSuite

Обмен ключами

Шифр

Хэш

TLS_NULL_WITH_NULL_NULL

NULL

NULL

NULL

TLS_RSA_WITH_NULL_MD5

RSA

NULL

MD5

TLS_RSA_WITH_NULL_SHA

RSA

NULL

SHA

TLS_RSA_WITH_RC4_128_MD5

RSA

RC4_128

MD5

TLS_RSA_WITH_RC4_128_SHA

RSA

RC4_128

SHA

TLS_RSA_WITH_IDEA_CBC_SHA

RSA

IDEA_CBC

SHA

TLS_RSA_WITH_DES_CBC_SHA

RSA

DES_CBC

SHA

TLS_RSA_WITH_3DES_EDE_CBC_SHA

RSA

3DES_EDE_CBC

SHA

TLS_DH_DSS_WITH_DES_CBC_SHA

DH_DSS

DES_CBC

SHA

TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA

DH_DSS

3DES_EDE_CBC

SHA

TLS_DH_RSA_WITH_DES_CBC_SHA

DH_RSA

DES_CBC

SHA

TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA

DH_RSA

3DES_EDE_CBC

SHA

TLS_DHE_DSS_WITH_DES_CBC_SHA

DHE_DSS

DES_CBC

SHA

TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA

DHE_DSS

3DES_EDE_CBC

SHA

TLS_DHE_RSA_WITH_DES_CBC_SHA

DHE_RSA

DES_CBC

SHA

TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA

DHE_RSA

3DES_EDE_CBC

SHA

TLS_DH_anon_WITH_RC4_128_MD5

DH_anon

RC4_128

MD5

TLS_DH_anon_WITH_DES_CBC_SHA

DH_anon

DES_CBC

SHA

TLS_DH_anon_WITH_3DES_EDE_CBC_SHA

DH_anon

3DES_EDE_CBC

SHA

Алгоритм обмена ключами

Описание

Предельные размеры ключей (бит)

DHE_DSS

Эфемерный DH с подписями DSS

нет

DHE_RSA

Эфемерный DH с подписями RSA

нет

DH_anon

Анонимный DH без подписи

нет

DH_DSS

DH с сертификатами на базе DSS

нет

DH_RSA

DH с сертификатами на базе RSA

нет25

NULL

Без обмена ключами

Не применимо

RSA

Обмен ключами RSA

нет

Шифр

Тип

Ключевой материал

Расширенный ключевой материал

IV (бит)

Размер блока

NULL

Поток

0

0

0

IDEA_CBC

Блок

16

16

8

8

RC2_CBC_40

Блок

5

16

8

8

RC4_40

Поток

5

16

0

RC4_128

Поток

16

16

0

DES40_CBC

Блок

5

8

8

8

DES_CBC

Блок

8

8

8

8

3DES_EDE_CBC

Блок

24

24

8

8

Type — тип шифра

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

Key Material — размер ключевого материала

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

Expanded Key Material — расширенный размер ключевого материала

Число байтов, реально поступающих в алгоритм шифрования.

IV Size — размер векторов инициализации

Объем данных, требуемых для генерации вектора инициализации (0 для потоковых шифров, размер блока для блочных).

Block Size — размер блока

Размер данных, шифруемых блочным шифром в один прием (chunk), блочные шифры в режиме CBC могут шифровать только целое количество блоков.

Хэш-функция

Размер хэша

Размер заполнения

NULL

0

0

MD5

16

48

SHA

20

40

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

Протокол TLS не может предотвратить многие ошибки защиты общего плана. В этом приложении приведены некоторые рекомендации для разработчиков.

D.1. Генерация случайных чисел и «затравки»

TLS требует наличия криптографически защищенного генератора псевдослучайных чисел (PRNG26). Следует обращать пристальное внимание на устройство и начальное состояние (seeding) PRNG. Генераторы на основе защищенных хэш-операций (типа MD5 или SHA) являются подходящими, но не могут обеспечить более надежную защиту, чем размер состояния генератора случайных чисел (например, PRNG на базе MD5 обычно имеют 128-битовые состояния).

Для оценки объема создаваемого «затравочного» материала (seed) следует добавить множество битов непредсказуемой информации в каждом «затравочном» байте. Например, моменты нажатия клавиш, взятые от PC-совместимого таймера с частотой 18,2 Гц обеспечивают 1 или 2 защищенных бита каждый, даже если суммарное значение счетчика имеет размер 16 или более битов. Для «затравки» 128-битового PRNG будет требоваться около 100 таких значений.

В документе [RANDOM] приведены рекомендации по генерации случайных значений.

D.2. Сертификаты и аутентификация

Реализации отвечают за проверку целостности сертификатов и в общем случае им следует поддерживать сообщения отзыва сертификатов. Сертификаты всегда следует проверять на предмет наличия подписи доверенного УЦ (CA). Выбор и добавление доверенных удостоверяющих центров следует выполнять с осторожностью. Пользователи должны иметь возможность просмотра информации о сертификате и корневом УЦ.

D.3. Шифронаборы

TLS поддерживает широкий диапазон размеров ключей и уровней защиты, включая некоторые варианты с минимальной защитой или совсем без таковой. Корректная реализация может не поддерживать многие из шифронаборов. Например, 40-битовое шифрование легко раскрывается, поэтому требующие сильной защиты реализации не позволят применять 40-битовые ключи. Точно так же, анонимный механизм Diffie-Hellman настоятельно не рекомендуется использовать, поскольку он неустойчив к MITM-атакам. Приложениям следует также задавать верхнюю и нижнюю границу размера ключей. Например, цепочки сертификатов, содержащие 512-битовые ключи или подписи RSA, не подходят для приложений с требованиями надежной защиты.

Приложение E. Совместимость с протоколом SSL

В силу исторических причин, а также в целях экономии зарезервированных номеров портов прикладные протоколы, защищаемые TLS 1.1, TLS 1.0, SSL 3.0 и SSL 2.0, зачастую используют для соединения общий номер порта, например, протокол https (HTTP, защищенный SSL или TLS) использует порт 443, независимо от применяемого протокола защиты. Таким образом, требуется некий механизм для идентификации и согласования протокола защиты.

Протоколы TLS 1.1, 1.0 и SSL 3.0 очень похожи и поддержка нескольких протоколов сразу не представляет сложности27. Клиентам TLS, желающим получить согласование с сервером SSL 3.0, следует направлять серверу сообщение hello, использующее формат записи SSL 3.0 и структуру клиентского сообщение hello, указывая {3, 2} в поле версии для индикации поддержки TLS 1.1. Если сервер поддерживает только TLS 1.0 или SSL 3.0, он будет отвечать серверным сообщением SSL 3.0 hello, при поддержке TLS 1.1 — серверным сообщением TLS 1.1 hello. Дальнейшее согласование выполняется, как обычно.

Точно так же серверу TLS 1.1, желающему взаимодействовать с клиентами TLS 1.0 или SSL 3.0, следует воспринимать клиентские сообщения SSL 3.0 и отвечать на них серверным сообщением SSL 3.0, если клиент SSL 3.0 в своем сообщении hello указал в поле версии значение {3, 0}, говорящее об отсутствии поддержки TLS 1.1. При получении сообщения hello SSL 3.0 или TLS 1.0 с полем версии {3, 1} серверу следует отвечать сообщением TLS 1.0 hello с полем версии {3, 1}.

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

Клиенты TLS 1.1, поддерживающие работу с серверами SSL 2.0, должны передавать клиентское сообщение SSL 2.0 hello [SSL2]. Серверам TLS следует воспринимать любой формат клиентских сообщений hello, если они хотят поддерживать клиентов SSL 2.0 через тот же порт. Единственным отклонением от спецификации версии 2.0 является возможность задать версию с номером 3 и поддержка дополнительных типов шифрования в CipherSpec.

Предупреждение. Возможность передачи клиентами сообщений hello версии 2.0 будет прекращена в максимально короткие сроки. Разработчикам следует приложить все усилия для скорейшего перехода к новой версии. Версия 3.0 обеспечивает более эффективные механизмы перехода к новым версиям.

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

        V2CipherSpec TLS_RC4_128_WITH_MD5          	= { 0x01,0x00,0x80 };
        V2CipherSpec TLS_RC4_128_EXPORT40_WITH_MD5 	= { 0x02,0x00,0x80 };
        V2CipherSpec TLS_RC2_CBC_128_CBC_WITH_MD5  	= { 0x03,0x00,0x80 };
        V2CipherSpec TLS_RC2_CBC_128_CBC_EXPORT40_WITH_MD5	= { 0x04,0x00,0x80 };
        V2CipherSpec TLS_IDEA_128_CBC_WITH_MD5     	= { 0x05,0x00,0x80 };
        V2CipherSpec TLS_DES_64_CBC_WITH_MD5       	= { 0x06,0x00,0x40 };
        V2CipherSpec TLS_DES_192_EDE3_CBC_WITH_MD5 	= { 0x07,0x00,0xC0 };

Естественные для TLS спецификации шифров могут быть включены в клиентские сообщения hello версии 2.0 с использованием показанного ниже синтаксиса. Любой элемент V2CipherSpec с нулевым значением первого байта будет игнорироваться серверами версии 2.0. Клиентам, передающим любое из приведенных выше значений V2CipherSpec, следует также включать эквивалент TLS (см. Приложение A.5):

        V2CipherSpec (see TLS name) = { 0x00, CipherSuite };

Примечание. Клиенты TLS 1.1 могут указывать шифронаборы SSLv2 EXPORT при согласовании (в целях совместимости), но недопустимо применение таких шифров в режиме TLS 1.1.

E.1. Сообщение hello клиента версии 2

В представленном ниже клиентском сообщении hello версии 2.0 используется принятый в этом документе формат. Настоящее определение приведено в спецификации SSL Version 2.0. Отметим, что это сообщение должно передаваться напрямую в канал без инкапсуляции в запись SSLv3.

     uint8 V2CipherSpec[3];

     struct {
         uint16 msg_length;
         uint8 msg_type;
         Version version;
         uint16 cipher_spec_length;
         uint16 session_id_length;
         uint16 challenge_length;
         V2CipherSpec cipher_specs[V2ClientHello.cipher_spec_length];
         opaque session_id[V2ClientHello.session_id_length];
         opaque challenge[V2ClientHello.challenge_length;
     } V2ClientHello;

msg_length

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

msg_type

Это поле вместе с полем номера версии идентифицирует клиентское сообщение hello версии 2 (следует устанавливать значение 1).

version

Максимальный номер версии протокола, поддерживаемой клиентом (ProtocolVersion.version, см. Приложение A.1).

cipher_spec_length

Это поле указывает общий размер поля cipher_specs. Значение поля не может быть нулевым и должно быть кратно размеру V2CipherSpec (3).

session_id_length

Это поле должно иметь значение 0.

challenge_length

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

cipher_specs

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

session_id

Это поле должно быть пустым.

challenge

Клиентский запрос к серверу для идентификации самого себя представляет собой (почти) произвольное количество случайных данных. Сервер TLS имеет право выровнять данные запроса для преобразования в ClientHello.random (дополнить нулями в начале, при необходимости) в соответствии со спецификацией протокола. Если размер challenge превышает 32 байта, будут использоваться лишь последние 32 байта. Для серверов V3 допустимо (но не требуется) отбрасывать V2 ClientHello, содержащие меньше 16 байтов в поле challenge.

Примечание. В запросах на восстановление сессии TLS должно использоваться клиентское сообщение TLS hello.

Приложение F. Анализ защиты

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

F.1. Протокол согласования

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

F.1.1. Аутентификация и обмен ключами

TLS поддерживает три режима аутентификации — аутентификация обеих сторон, аутентификация только сервера и общая анонимность. При работе с аутентифицированным сервером канал будет защищен от MITM-атак, но анонимные сессии могут быть подвержены таким атакам. Анонимные серверы не могут аутентифицировать клиентов. Если сервер аутентифицирован, его сообщение с сертификатом должно содержать корректную цепочку сертификатов, ведущую к доверенному УЦ. Аналогично, аутентифицированные клиенты должны предоставлять сертификат, приемлемый для сервера. Каждая сторона отвечает за проверку того, что сертификат другой стороны не отозван и срок его действия не завершился.

Общей целью процесса обмена ключами является создание предварительного секрета pre_master_secret, известного сторонам и не доступного для атакующих. Значение pre_master_secret будет использоваться для генерации первичного секрета master_secret (см. параграф 8.1). Значение master_secret требуется для генерации сообщений certificate verify и finished, ключей шифрования и секретов MAC (см. параграфы 7.4.8, 7.4.9 и 6.3). Передачей корректного сообщения finished стороны подтверждают наличие корректного предварительного секрета pre_master_secret.

F.1.1.1. Анонимный обмен ключами

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

Примечание. Анонимные шифронаборы RSA Cipher Suite не определены в данном документе.

При использовании метода Diffie-Hellman открытые параметры сервера содержатся в серверном сообщении обмена ключами, а параметры клиента передаются в клиентском сообщении обмена ключами. Перехватчики данных, которым не известны секретные значения, не смогут получить результат Diffie-Hellman (т. е., pre_master_secret).

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

F.1.1.2. Обмен ключами и аутентификация RSA

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

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

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

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

При использовании RSA для обмена ключами клиенты аутентифицируются с помощью сообщения проверки сертификата (см. параграф 7.4.8). Клиент подписывает значение, полученное из master_secret и предшествующих согласующих сообщений. Согласующие сообщения включают сертификат сервера, который привязан к подписи сервера, и случайное значение ServerHello.random, которое привязывает подпись к текущему процессу согласования.

F.1.1.3. Обмен ключами и аутентификация Diffie-Hellman

При использовании для обмена ключами алгоритма Diffie-Hellman сервер может предоставить сертификат с фиксированными параметрами Diffie-Hellman или использовать серверное сообщение обмена ключами для установки временных параметров Diffie-Hellman, подписанных сертификатом DSS или RSA. Временные параметры хэшируются со значениями hello.random перед созданием подписи для предотвращения возможности использования атакующими старых параметров. В любом случае клиент может проверить сертификат или подпись для обеспечения гарантии того, что параметры принадлежат серверу.

Если у клиента имеется сертификат с фиксированными параметрами Diffie-Hellman, этого сертификата будет достаточно для завершения обмена ключами. Отметим, что в этом случае клиент и сервер будут генерировать одинаковый результат Diffie-Hellman (т. е., pre_master_secret) при каждом взаимодействии. Чтобы предотвратить сохранение в памяти значения pre_master_secret после завершения работы с ним это значение следует как можно скорее преобразовать в master_secret. Клиентские параметры Diffie-Hellman должны быть совместимы с такими же параметрами, представленными сервером, для того, чтобы обмен ключами прошел нормально.

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

Если одна ключевая пара DH будет использоваться для множества согласований по причине наличия у клиента и сервера сертификатов с фиксированной ключевой парой DH или по причине повторного использования сервером ключей DH, следует предпринять меры защиты от атак, связанных с малым размером подгруппы (small subgroup attack). Разработчикам следует воспользоваться рекомендациями [SUBGROUP].

Атак на малые подгруппы можно легко избежать, используя один из шифронаборов DHE и генерируя для каждого согласования свежий секретный ключ DH (X). Если выбрана подходящая база (например, 2), значение g^X mod p можно рассчитать очень быстро и потеря производительности будет минимальной. Кроме того, применение нового ключа для каждого согласования обеспечивает совершенную защиту (Perfect Forward Secrecy). Реализациям следует генерировать новое значение X для каждого согласования с использованием шифронаборов DHE.

F.1.2. Атаки со снижением версии

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

Хотя решение на основе использования неслучайного заполнения в блоках PKCS #1 типа 2 не является элегантным, оно обеспечивает для серверов версии 3.0 безопасный способ детектирования атак. Это решение не обеспечивает защиты от атакующих, которые могут подобрать (brute force) ключ и подменить сообщение ENCRYPTED-KEY-DATA, используя тот же ключ (но обычное заполнение) до того, как заданное приложением время ожидания истечет. Сторонам, озабоченным такими атаками, не следует использовать 40-битовые ключи шифрования. Изменение 8 младших байтов заполнения PKCS не влияет на защиту при размере подписанных хэшей и ключей RSA, используемом в протоколе, поскольку это эквивалентно увеличению размера входного блока на 8 байтов.

F.1.3. Детектирование атак на протокол согласования

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

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

F.1.4. Возобновление сессий

Когда соединение организуется путем возобновления сессии, новые значения ClientHello.random и ServerHello.random хешируются с используем master_secret восстанавливаемой сессии. При условии того, что значение master_secret не было раскрыто, а для создания ключей шифрования и секретов MAC используются защищенные операции хэширования, соединение будет защищено и не зависимо от предыдущих соединений. Атакующий не сможет использовать известные ему ключи шифрования и секреты MAC для раскрытия master_secret без нарушения защищенных хэш-операций (которые используют обе функции SHA и MD5).

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

F.1.5. MD5 и SHA

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

F.2. Защита данных приложений

Значение master_secret хэшируется с ClientHello.random и ServerHello.random для генерации уникальных ключей шифрования данных и секретов MAC в каждом соединении.

Выходные данные до их передачи защищаются с помощью MAC. Для предотвращения атак с изменением или повторным использованием соединений значение MAC рассчитывается из секрета MAC, порядкового номера, размера сообщения и его содержимого, а также двух фиксированных символьных строк. Поле типа сообщения требуется для того, чтобы сообщения, предназначенные одному клиенту уровня TLS Record, не перенаправлялись другим. Порядковые номера позволяют детектировать попытки удаления сообщений или изменения их порядка. Поскольку размер порядковых номеров составляет 64 бита, значение номера никогда не переполняется. Сообщения одной стороны не могут быть помещены в вывод другой, поскольку для них используется независимый секрет MAC. Ключи записи у клиента и сервера также независимы, поэтому ключи потокового шифрования применяются только один раз.

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

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

F.3. Явные IV

В [CBCATT] описана атака на TLS, основанная на знании вектора инициализации (IV) для записи. Предыдущие версии TLS [TLS1.0] использовали в качестве IV остаток цепочки CBC из предыдущей записи и, следовательно, были уязвимы для таких атак. Данная версия использует явные векторы инициализации для предотвращения таких атак.

F.4. Защищенность композитных режимов шифрования

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

В наиболее надежном методе, называемом encrypt-then-authenticate28, данные сначала шифруются, а затем для шифрованного текста используется MAC. Этот метод обеспечивает сохранение целостности и конфиденциальности при использовании любой пары функций шифрования и MAC за счет того, что шифрование защищает от атак типа chosen plaintext, а MAC — от атак типа chosen-message. В TLS используется другой метод, называемый authenticate-then-encrypt29, в котором сначала рассчитывается код MAC для незашифрованных данных, а затем шифруется конкатенация этих данных и кода MAC. Защищенность этого метода проверена для некоторых комбинаций функций шифрования и MAC, но в общем случае защищенность не гарантируется. В частности, показано существование совершенно безопасных функций шифрования (защищенных даже с точки зрения теории информации), которые в комбинации с любой защищенной функцией MAC не обеспечивают защиты от активных атак. Следовательно, новые шифронаборы и режимы работы, адаптируемые в TLS, должны анализироваться с использованием метода authenticate-then-encrypt с целью проверки защиты целостности и конфиденциальности.

К настоящему моменту защищенность метода authenticate-then-encrypt подтверждена для некоторых важных случаев. Одним из них является потоковое шифрование, при котором непредсказуемое вычислительным путем заполнение размера сообщения плюс размер тега MAC создается с использованием генератора псевдослучайных чисел, а затем это случайное заполнение используется в операции XOR с нешифрованными данными и кодом MAC. Другим примером является режим CBC для защищенного блочного шифра. В этом случае защищенность может быть обеспечена, если применяется один проход шифрования CBC к конкатенации нешифрованных данных и кода MAC и для каждой такой пары используется новое, независимое и непредсказуемое значение IV. В предыдущих версиях SSL режим CBC использовался корректно, по применялся предсказуемый вектор инициализации IV в форме последнего блока ранее зашифрованных данных. Это делало TLS открытым для атак типа chosen plaintext. Данная версия протокола устойчива к таким атакам. Подробная информация о защищенности режимов шифрования приведена в [ENCAUTH].

F.5. Атаки на отказ служб

Протокол TLS подвержен множеству атак, нацеленных на отказ служб (DoS30). В частности, атакующий, который инициирует большое число соединений TCP может вызвать на сервере высокую загрузку процессора (CPU) расшифровкой RSA. Однако, благодаря тому, что TLS обычно работает «поверх» TCP, атакующему сложно скрыть себя, если в стеке TCP используется подходящая генерация случайных чисел для пакетов TCP SYN [SEQNUM].

По причине работы протокола TLS на основе TCP, он подвержен также множеству DoS-атак на отдельные соединения. В частности, злоумышленники могут использовать обманные пакеты RST для сброса соединений или обманные неполные записи TLS для «замораживания» соединения. В общем случае нет возможности защититься от таких атак средствами протокола TCP. Озабоченным этим классом атак разработчикам и пользователям следует применять IPsec AH [AH-ESP] или ESP [AH-ESP].

F.6. Заключительные замечания

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

Уровень защиты системы зависит от качества (силы) поддерживаемых алгоритмов обмена ключами и аутентификации, поэтому следует использовать только проверенные криптографические функции. Короткие открытые ключи, 40-битовые ключи шифрования данных и анонимные серверы следует использовать с большой осторожностью. Реализации и пользователи должны быть осторожны с сертификатами и подтверждающими их УЦ, поскольку доверие к обманному сертификату может нанести серьезный ущерб.

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

[AES] National Institute of Standards and Technology, «Specification for the Advanced Encryption Standard (AES)», FIPS 197. November 26, 2001.

[3DES] W. Tuchman, «Hellman Presents No Shortcut Solutions To DES», IEEE Spectrum, v. 16, n. 7, July 1979, pp. 40-41.

[DES] ANSI X3.106, «American National Standard for Information Systems-Data Link Encryption», American National Standards Institute, 1983.

[DSS] NIST FIPS PUB 186-2, «Digital Signature Standard», National Institute of Standards and Technology, U.S. Department of Commerce, 2000.

[HMAC] Krawczyk, H., Bellare, M., and R. Canetti, «HMAC: Keyed-Hashing for Message Authentication», RFC 2104, February 1997.

[IDEA] X. Lai, «On the Design and Security of Block Ciphers,» ETH Series in Information Processing, v. 1, Konstanz: Hartung-Gorre Verlag, 1992.

[MD5] Rivest, R., «The MD5 Message-Digest Algorithm «, RFC 1321, April 1992.

[PKCS1A] B. Kaliski, «Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 1.5», RFC 2313, March 1998.

[PKCS1B] J. Jonsson, B. Kaliski, «Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1», RFC 3447, February 2003.

[PKIX] Housley, R., Polk, W., Ford, W., and D. Solo, «Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile», RFC 3280, April 2002.

[RC2] Rivest, R., «A Description of the RC2(r) Encryption Algorithm», RFC 2268, March 1998.

[SCH] B. Schneier. «Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2ed», Published by John Wiley & Sons, Inc. 1996.

[SHA] NIST FIPS PUB 180-2, «Secure Hash Standard», National Institute of Standards and Technology, U.S. Department of Commerce., August 2001.

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

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[TLSAES] Chown, P., «Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security (TLS)», RFC 3268, June 2002.

[TLSEXT] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., and T. Wright, «Transport Layer Security (TLS) Extensions», RFC 436631, June 2003.

[TLSKRB] Medvinsky, A. and M. Hur, «Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)», RFC 2712, October 1999.

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

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

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

[BLEI] Bleichenbacher D., «Chosen Ciphertext Attacks against Protocols Based on RSA Encryption Standard PKCS #1» in Advances in Cryptology — CRYPTO’98, LNCS vol. 1462, pages: 1-12, 1998.

[CBCATT] Moeller, B., «Security of CBC Ciphersuites in SSL/TLS: Problems and Countermeasures», http://www.openssl.org/~bodo/tls-cbc.txt.

[CBCTIME] Canvel, B., «Password Interception in a SSL/TLS Channel», http://lasecwww.epfl.ch/memo_ssl.shtml, 2003.

[ENCAUTH] Krawczyk, H., «The Order of Encryption and Authentication for Protecting Communications (Or: How Secure is SSL?)», Crypto 2001.

[KPR03] Klima, V., Pokorny, O., Rosa, T., «Attacking RSA-based Sessions in SSL/TLS», http://eprint.iacr.org/2003/052/, March 2003.

[PKCS6] RSA Laboratories, «PKCS #6: RSA Extended Certificate Syntax Standard,» version 1.5, November 1993.

[PKCS7] RSA Laboratories, «PKCS #7: RSA Cryptographic Message Syntax Standard,» version 1.5, November 1993.

[RANDOM] Eastlake, D., 3rd, Schiller, J., and S. Crocker, «Randomness Requirements for Security», BCP 106, RFC 4086, June 2005.

[RSA] R. Rivest, A. Shamir, and L. M. Adleman, «A Method for Obtaining Digital Signatures and Public-Key Cryptosystems», Communications of the ACM, v. 21, n. 2, Feb 1978, pp. 120-126.

[SEQNUM] Bellovin, S., «Defending Against Sequence Number Attacks», RFC 1948, May 1996.

[SSL2] Hickman, Kipp, «The SSL Protocol», Netscape Communications Corp., Feb 9, 1995.

[SSL3] A. Freier, P. Karlton, and P. Kocher, «The SSL 3.0 Protocol», Netscape Communications Corp., Nov 18, 1996.

[SUBGROUP] Zuccherato, R., «Methods for Avoiding the «Small-Subgroup» Attacks on the Diffie-Hellman Key Agreement Method for S/MIME», RFC 2785, March 2000.

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

[TIMING] Boneh, D., Brumley, D., «Remote timing attacks are practical», USENIX Security Symposium 2003.

[TLS1.0] Dierks, T. and C. Allen, «The TLS Protocol Version 1.0», RFC 2246, January 1999.

[X501] ITU-T Recommendation X.501: Information Technology — Open Systems Interconnection — The Directory: Models, 1993.

[X509] ITU-T Recommendation X.509 (1997 E): Information Technology — Open Systems Interconnection — «The Directory — Authentication Framework». 1988.

[XDR] Srinivasan, R., «XDR: External Data Representation Standard», RFC 1832, August 1995.

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

Председатели рабочей группы

Win Treese

EMail: treese@acm.org

Eric Rescorla

EMail: ekr@rtfm.com

Редакторы

Tim Dierks

Independent

EMail: tim@dierks.org

Eric Rescorla

RTFM, Inc.

EMail: ekr@rtfm.com

Другие участники работы

Christopher Allen ( соавтор TLS 1.0)

Alacrity Ventures

EMail: ChristopherA@AlacrityManagement.com

Martin Abadi

University of California, Santa Cruz

EMail: abadi@cs.ucsc.edu

Ran Canetti

IBM

EMail: canetti@watson.ibm.com

Taher Elgamal

Securify

EMail: taher@securify.com

Anil Gangolli

EMail: anil@busybuddha.org

Kipp Hickman

Phil Karlton ( соавтор SSLv3)

Paul Kocher (соавтор SSLv3)

Cryptography Research

EMail: paul@cryptography.com

Hugo Krawczyk

Technion Israel Institute of Technology

EMail: hugo@ee.technion.ac.il

Robert Relyea

Netscape Communications

EMail: relyea@netscape.com

Jim Roskind

Netscape Communications

EMail: jar@netscape.com

Michael Sabin

Dan Simon

Microsoft, Inc.

EMail: dansimon@microsoft.com

Tom Weinstein

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

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

nmalykh@gmail.com

Комментарии

Список рассылки рабочесй группы IETF TLS доступен по адресу <ietf-tls@lists.consensus.com>. Сведения о граппе и способах подписки на рассылку доступны по ссылке <http://lists.consensus.com/>. Архивы группы доступны по ссылке <http://www.imc.org/ietf-tls/mail-archive/>.

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

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 обеспечено IETF Administrative Support Activity (IASA).


1Transport Layer Security — защита на транспортном уровне.

2Initialization Vector.

3В оригинале это предложение содержит ошибку. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

4Network или big endian.

5Неинтерпретируемые данные – Прим. перев.

6Digital Signing Algorithm — алгоритм цифровой подписи

7Исключающее-ИЛИ.

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

9В исходном документе ошибочно сказано «алгоритм подписи». См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

10С помощью MAC. Прим. перев.

11В исходном документе ошибочно указан раздел 11. См. https://www.rfc-editor.org/errata_search.php?eid=116. Прим. перев.

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

13В оригинале описание этого сигнала содержит ошибки. См. https://www.rfc-editor.org/errata_search.php?eid=1896. Прим. перев.

14В оригинале ошибочно указан раздел 11. См. https://www.rfc-editor.org/errata_search.php?eid=116. Прим. перев.

15A man in the middle.

16В исходном документе ошибочно указан раздел 11. См. https://www.rfc-editor.org/errata_search.php?eid=116. Прим. перев.

17В исходном документе эта структура указана с ошибкой. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

18В оригинале ошибочно указан раздел 11. См. https://www.rfc-editor.org/errata_search.php?eid=116. Прим. перев.

19В исходном документе эта структура указана с ошибкой. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

20National Institute of Standards and Technology — Национальный институт стандартов и технологии США.

21Совпадение хэш-значений для разных входных данных. Прим. перев.

22В исходном документе это определение содержит ошибочную ссылку. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

23Secure Hash Algorithm.

24Secure Socket Layer.

25В оригинале за этой строкой ошибочно следовала строка «RSA = none». См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

26Pseudorandom number generator.

27В оригинале это предложение содержит ошибку. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

28Шифровать, потом аутентифицировать.

29Аутентифицировать, затем шифровать.

30Denial of service.

31В исходном документе ошибочно указан RFC 3546. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

32В исходном документе ошибочно дана ссылка на RFC 4103. См. https://www.rfc-editor.org/errata_search.php?eid=117. Прим. перев.

Рубрика: RFC, Безопасность | Комментарии к записи RFC 4346 The Transport Layer Security (TLS) Protocol Version 1.1 отключены

RFC 4446 IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)

Network Working Group                                         L. Martini
Request for Comments: 4446                            Cisco Systems Inc.
BCP: 116                                                      April 2006
Category: Best Current Practice

Значения, выделенные IANA для эмуляции сквозных псевдопроводов (PWE3)

IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)

PDF

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

Этот документ описывает обретенный опыт (Internet Best Current Practices) для сообщества Internet и служит приглашением к дискуссии в целях дальнейшего развития. Документ может распространяться без ограничений.

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

Copyright (C) The Internet Society (2006).

Аннотация

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

1. Введение

В этом документе описаны многие новые реестры IANA и соответствующие процесс IANA для протоколов, определенных рабочей группой PWE3 IETF. Определенные здесь реестры IANA в основном поделены на три диапазона — значения выделяемые с согласия IETF, в соответствии с [RFC2434], значения, выделяемые по решению экспертов (expert review), в соответствии с [RFC2434] и диапазон значений, выделяемых в порядке очередности запросов для распределения производителями. Отметим, что фирменные типы производителей недопустимо регистрировать для стандартов IETF или расширений, независимо от того, находятся они еще в разработке или уже завершены.

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

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

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

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

3.1. Директивы для экспертного обзора

В этом документе указано выделение значений для нескольких реестров по процедуре Expert review (рецензия эксперта) в соответствии с [RFC2434]. Эксперту следует принимать во внимание следующие аспекты:

  • следует избегать дублирования кодовых значений;

  • должно быть представлено краткое и четкое описание запрашиваемых для выделения кодов;

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

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

3.2. Реестр MPLS Pseudowire Type

Агентство IANA организовало реестр типов псевдопроводов MPLS Pseudowire Type. Типы псевдопроводов задаются 15-битовыми значениями. Значения PW Type от 1 до 30 заданы в этом документе, значения 31 — 1024 будут распределяться IANA по процедуре Expert Review, определенной в [RFC2434]. Значения PW Type от 1025 до 4096 и 32767 будут распределяться по с согласия IETF, как описано в [RFC2434]. Типы 4097 — 32766 резервируются для фирменных расширений и будут распределяться IANA по процедуре First Come First Served, определенной в [RFC2434]. При любом распределении значений из этого реестра требуется описание Pseudowire Type. Кроме того, при выделении значений из диапазона фирменных расширений будет требоваться указание компании или человека. Следует также приводить ссылку на документ с описанием типа.

Изначально выделенные значения Pseudowire Type приведены в таблице ниже.

Тип ПП

Описание

Документ

0x0001

Frame Relay DLCI ( Martini Mode )

[FRAME]

0x0002

Транспорт ATM AAL5 SDU VCC

[ATM]

0x0003

Прозрачная транспортировка ячеек ATM

[ATM]

0x0004

Ethernet с тегами

[ATM]

0x0005

Ethernet

[ATM]

0x0006

HDLC

[PPPHDLC]

0x0007

PPP

[PPPHDLC]

0x0008

SONET/SDH Circuit Emulation Service Over MPLS

[CEP]

0x0009

Транспортировка ячеек ATM n-to-one VCC

[ATM]

0x000A

Транспортировка ячеек ATM n-to-one VPC

[ATM]

0x000B

Транспорт IP L2

[RFC3032]

0x000C

Режим ATM one-to-one VCC Cell

[ATM]

0x000D

Режим ATM one-to-one VPC Cell

[ATM]

0x000E

Транспорт ATM AAL5 PDU VCC

[ATM]

0x000F

Режим Frame-Relay Port

[FRAME]

0x0010

SONET/SDH Circuit Emulation over Packet

[CEP]

0x0011

Structure-agnostic E1 over Packet

[SAToP]

0x0012

Structure-agnostic T1 (DS1) over Packet

[SAToP]

0x0013

Structure-agnostic E3 over Packet

[SAToP]

0x0014

Structure-agnostic T3 (DS3) over Packet

[SAToP]

0x0015

Базовый режим CESoPSN

[CESoPSN]

0x0016

Режим TDMoIP AAL1

[TDMoIP]

0x0017

CESoPSN TDM с CAS

[CESoPSN]

0x0018

Режим TDMoIP AAL2

[TDMoIP]

0x0019

Frame Relay DLCI

[FRAME]

3.3. Реестр Interface Parameters Sub-TLV Type

Агентство IANA организовало реестр Pseudowire Interface Parameter Sub-TLV types. Для идентификаторов типов используются 8-битовые значения. Типы 1 — 12 заданы в настоящем документе, типы 13 — 64 распределяются IANA по процедуре Expert Review, описанной в [RFC2434]. Типы 65 — 127 и 255 распределяются по согласованию с IETF, как описано в [RFC2434]. Типы 128 — 254 зарезервированы для фирменных расширений и распределяются IANA по процедуре First Come First Served, описанной в [RFC2434].

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

Для каждого выделяемого значения должно быть указано поле length в одном из приведенных ниже форматов:

  • текст вида: «размером до X», где X — десятичное целое число;

  • до 3 разных десятичных целых.

Текст «размером до X» предполагает включение размера X.

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

Изначально выделенные значения Pseudowire Interface Parameter Sub-TLV type приведены в таблице ниже.


Идентификатор

Размер

Описание

Документ

0x01

4

MTU интерфейса в октетах

[CRTL]

0x02

4

Максимальное число объединяемых ячеек ATM

[ATM]

0x03

До 82

Необязательная строка описания интерфейса

[CRTL] [RFC2277]

0x04

4

Байты данных CEP/TDM

[CEP] [TDMoIP]

0x05

4

Опции CEP

[CEP]

0x06

4

Запрошенный идентификатор VLAN

[ETH]

0x07

6

Битовая скорость CEP/TDM

[CEP] [TDMoIP]

0x08

4

Размер DLCI

[FRAME]

0x09

4

Индикатор фрагментации

[FRAG]

0x0A

4

Индикатор удержания FCS

[FCS]

0x0B

4/08/12

Опции TDM

[TDMoIP]

0x0C

4

Параметр VCCV

[VCCV]

Отметим, что поле Length определяется, как размер Sub-TLV с учетом полей типа и размера этого Sub-TLV.

3.4. Идентификаторы присоединения

3.4.1. Индивидуальный идентификатор подключения (AII)

Агентство IANA организовало реестр Attachment Individual Identifier (AII) Type, содержащий 8-битовые значения. Данный документ определяет значение AII Type = 1. Типы 2 — 64 распределяются IANA по процедуре Expert Review, описанной в [RFC2434], 65 — 127 и 255 выделяются по согласованию с IETF, как описано в [RFC2434]. Типы 128 — 254 резервируются для фирменных расширений и распределяются IANA по процедуре First Come First Served, описанной в [RFC2434].

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

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

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

Текущее распределение Initial Attachment Individual Identifier (AII) Type приведено в таблице ниже.

AII Type

Размер

Описание

Документ

0x01

4

32-битовое целое число без знака, с локальной значимостью

[SIG]

3.4.2. Групповой идентификатор подключения (AGI)

Агентство IANA организовало реестр Attachment Group Identifier (AGI) Type, содержащий 8-битовые значения. Данный документ определяет значение AGI Type = 1. Типы 2 — 64 распределяются IANA по процедуре Expert Review, описанной в [RFC2434], 65 — 127 и 255 выделяются по согласованию с IETF, как описано в [RFC2434]. Типы 128 — 254 резервируются для фирменных расширений и распределяются IANA по процедуре First Come First Served [RFC2434].

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

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

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

Текущее распределение Initial Attachment Group Identifier (AGI) Type приведено в таблице ниже.

AGI Type

Размер

Описание

Документ

0x01

8

Идентификатор AGI в форме Route Distinguisher

[SIG]

3.5. Статус псевдопровода

Агентство IANA организовало реестр Pseudowire Status Codes, содержащий битовые строки размером 32 бита. Биты состояния 0 — 4 определены в данном документе. Статусные биты 5 — 31 будут распределяться IANA по процедуре Expert Review, определенной в [RFC2434].

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

Текущие значения кодов Pseudowire Status приведены в таблице.

Битовая маска

Описание

Документ

0x00000000

Pseudowire forwarding (сброс всех отказов)

[CRTL]

0x00000001

Pseudowire Not Forwarding

[CRTL]

0x00000002

Отказ на приеме в локальном устройстве подключения (вход)

[CRTL]

0x00000004

Отказ при передаче в локальном устройстве подключения (выход)

[CRTL]

0x00000008

Отказ на приеме в локальном PSN-facing PW подключения (вход)

[CRTL]

0x00000010

Отказ при передаче в локальном PSN-facing PW подключения (выход)

[CRTL]

3.6. PW Associated Channel Type

Определение PW Associated Channel Type приведено в [RFC4385].

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

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

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

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

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[RFC2277] Alvestrand, H., «IETF Policy on Character Sets and Languages», BCP 18, RFC 2277, January 1998.

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

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

[CRTL] Martini, L., Ed., Rosen, E., El-Aawar, N., Smith, T., and G. Heron, «Pseudowire Setup and Maintenance Using the Label Distribution Protocol (LDP)», RFC 4447, April 2006.

[VCCV] Nadeau, T. and R. Aggarwal, «Pseudo Wire Virtual Circuit Connectivity Verification (VCCV)», Work in Progress2, August 2005.

[FRAG] Malis, A. and M. Townsley, «PWE3 Fragmentation and Reassembly», Work in Progress3, September 2005.

[FCS] Malis, A., Allan, D., and N. Del Regno, «PWE3 Frame Check Sequence Retention», Work in Progress4, September 2005.

[CEP] Malis, A., Pate, P., Cohen, R., Ed., and D. Zelig, «SONET/SDH Circuit Emulation Service Over Packet (CEP)», Work in Progress5.

[SAToP] Vainshtein, A. Ed. and Y. Stein, Ed. «Structure-Agnostic TDM over Packet (SAToP)», Work in Progress6.

[FRAME] Martini, L., Ed. and C. Kawa, «Encapsulation Methods for Transport of Frame Relay Over MPLS Networks», Work in Progress7.

[ATM] Martini, L., Ed., El-Aawar, N., and M. Bocci, Ed., «Encapsulation Methods for Transport of ATM Over MPLS Networks», Work in Progress8.

[PPPHDLC] Martini, L., Rosen, E., Heron, G. and A. Malis, «Encapsulation Methods for Transport of PPP/HDLC Frames Over MPLS Networks», Work in Progress9.

[ETH] Martini, L., Rosen, E., El-Aawar, N., and G. Heron, «Encapsulation Methods for Transport of Ethernet Frames Over MPLS Networks», RFC 4448, April 2006.

[CESoPSN] Vainshtein, A., Ed., Sasson, I., Metz, E., Frost, T., and P. Pate, «Structure-aware TDM Circuit Emulation Service over Packet Switched Network (CESoPSN)», Work in Progress10.

[TDMoIP] Stein, Y., Shashoua, R., Insler, R., and M. Anavi, «TDM over IP», Work in Progress11, February 2005.

[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, «MPLS Label Stack Encoding», RFC 3032, January 2001.

[SIG] Rosen, E., Luo, W., Davie, B., and V. Radoaca, «Provisioning, Autodiscovery, and Signaling in L2VPNs», Work in Progress12, September 2005.

[RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, «Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN», RFC 4385, February 2006.

Адрес автора

Luca Martini

Cisco Systems, Inc.

9155 East Nichols Avenue, Suite 400

Englewood, CO, 80112

EMail: lmartini@cisco.com

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

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

nmalykh@gmail.com

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

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 обеспечено IETF Administrative Support Activity (IASA).


1Pseudo Wire Edge to Edge — сквозной псевдопровод.

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

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

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

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

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

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

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

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

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

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

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

Рубрика: RFC | Комментарии к записи RFC 4446 IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3) отключены

RFC 4447 Pseudowire Setup and Maintenance Using the Label Distribution Protocol (LDP)

Этот документ заменен RFC 8077.

Рубрика: RFC | Комментарии к записи RFC 4447 Pseudowire Setup and Maintenance Using the Label Distribution Protocol (LDP) отключены

RFC 4293 Management Information Base for the Internet Protocol (IP)

Network Working Group                                   S. Routhier, Ed.
Request for Comments: 4293                                    April 2006
Obsoletes: 2011, 2465, 2466
Category: Standards Track

База MIB для протокола IP

Management Information Base for the Internet Protocol (IP)

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

Этот документ определяет часть базы данных управления (MIB1) для использования протоколами сетевого управления в сообществе Internet. В частности, документ описывает управляемые объекты, используемые для реализаций протокола (IP2), в независимой от версии IP манере. Документ заменяет собой RFC 2011, RFC 2465 и RFC 2466.

1. Модель стандартного управления Internet

Детальный обзор документов, описывающих модель стандартного управления Internet, дан в разделе 7 RFC 3410 [9].

Доступ к управляемым объектам осуществляется через виртуальное хранилище информации, называемое базой данных управления или MIB. К объектам MIB обычно обращаются с использованием простого протокола управления сетью (SNMP3). Объекты MIB определяются с использованием механизмов, описанных в структуре данных управления (SMI4). В этом документе описывается модуль MIB, который соответствует спецификации SMIv2, описанной в STD 58 RFC 2578 [1], STD 58 RFC 2579 [2] и STD 58 RFC 2580 [3].

2. История выпусков

Одной из основных целей этого выпуска IP MIB является создание единого набора объектов для описания и управления модулями IP, независимо от версии протокола IP. В RFC 2465 и RFC 2466 создан набор объектов, независимый от RFC 2011, а данный документ объединяет все три документа в один унифицированный набор объектов. Таблицы ipSystemStatsTable и ipIfStatsTable являются примерами обновленных объектов, которые не зависят от версии IP. Обе эти таблицы включают счетчики статистики IP, которые определены в более ранних MIB, а также тип адресов IP для того, чтобы различать информацию по версии протокола IP.

Другой целью этого документа является повышение уровня управляемости узлов IPv6 за счет добавления новых объектов. Некоторые из таблиц (например, ipDefaultRouterTable) могут быть полезны для IPv4 и IPv6, а другие (например, ipv6RouterAdvertTable) — лишь для одного из протоколов.

3. Обзор

3.1. Реализации для нескольких стеков

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

3.2. Таблицы и группы

Этот модуль MIB состоит из небольшого числа дискретных объектов и наборов таблиц, формирующих основу для управления сущностями IPv4 и IPv6.

Хотя некоторые объекты предназначены для включения во все элементы, другие являются лишь условно обязательными. К таким условно обязательным объектам относится большинство счетчиков статистики IP и ICMP. Условно обязательные объекты относятся к одной из групп — объекты для высокоскоростных элементов, объекты для IPv4, объекты для IPv6 и объекты для маршрутизаторов IPv6. Короче говоря, не предполагается реализация каждой сущностью всех объектов из данного модуля MIB. Читателю следует обращаться к разделам соответствия для определения объектов, подходящих для данного элемента.

3.2.1. Объекты общего назначения

Для обоих протоколов IPv4 и IPv6 имеется лишь небольшое число «кнопок» управления стеком IP в целом. Большинство элементов управления относится к более конкретным настройкам, таким как параметры маршрутизатора или машины TCP.

В этой базе MIB определены три управляющих элемента общего назначения и только 2 из них используются обоими протоколами IPv4 и IPv6.

Общие для обоих протоколов объекты обеспечивают включение и отключение пересылки, а также задают предельный срок жизни пакетов (ttl или hop count).

Третий элемент управления задает тайм-аут для сборки фрагментов и применим лишь для IPv4, поскольку в IPv6 это значение задано напрямую.

Каждая группа объектов требуется при реализации соответствующих протоколов.

3.2.2. Таблицы интерфейсов

Модуль MIB включает пару таблиц для передачи информации о протоколах IPv4 и IPv6, относящейся к интерфейсу.

Следует особо отметить объекты с административным статусом. Они определены для того, чтобы каждый протокол мог селективно включать и отключать интерфейсы. Эти объекты можно использовать совместно с ifAdminStatus для манипуляций с интерфейсами. С помощью этих трех объектов интерфейсы можно полностью включить или отключить, а также подключить к стеку IPv4, IPv6 или обоим. Установка ifAdminStatus = down не должна влиять на связанные с протоколом объекты состояния.

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

3.2.3. Таблицы статистики IP

Таблицы статистики IP (ipSystemStatsTable и ipIfStatsTable) содержат объекты для подсчета числа дейтаграмм и октетов, обработанных данным элементом. В отличие от прежних попыток данный документ использует одну таблицу для разных типов адресов. Обычно представляют интерес лишь два типа — IPv4 и IPv6, однако таблица можжет поддерживать и другие адреса.

Первая таблица ipSystemStatsTable содержит информацию в масштабе системы (т. е. различные счетчики для всех интерфейсов, а не для конкретного их набора). Индекс таблицы формируется одним субидентификатором (sub-id), который представляет тип адресов, для которого ведется статистика.

Вторая таблица ipIfStatsTable содержит информацию для конкретного интерфейса. Индексом служат два субидентификатора, первый из которых задает тип адреса (IPv4 или IPv6), а второй — интерфейс в рамках этого типа.

Таблицы имеют похожие наборы объектов, которые предназначены для учета похожих данных, но различаются детализацией. Идентификатор объекта ipSystemStatsEntry.2 зарезервирован для выравнивания идентификаторов счетчиков в обеих таблицах.

Следует отметить объекты ipSystemStatsDiscontinuityTime, ipIfStatsDiscontinuityTime, ipSystemsStatsRefreshRate и ipIfStatsRefreshRate, которые представляют информацию о строке таблицы, а не о системе в целом.

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

Объекты обновления позволяют элементу управления определить подходящий интервал опроса для прочих объектов.

На приведенном ниже рисунке представлено базовое упорядочение счетчиков пакетов. Чтобы не загромождать рисунок, префиксы ipSystemStats и ipIfStats были исключены из имен счетчиков.

От                                              От верхних
интерфейса                                      уровней
 V                                               V
 |                                               |
 + InReceives (1)                                + OutRequests
 |                                               |
 |                                               |
 +--> InHdrErrors (5)                            +--> OutNoRoutes
 |                                               |
 |                                               |
 +->-+ InMcastPkts (1)                           |
 |   V                                           |
 +-<-+                                           |
 |                                               |
 +->-+ InBcastPkts (1)                           |
 |   V                                           |
 +-<-+                                           |
 |                                               |
 |                                               |
 +--> InTruncatedPkts (5)                        |
 |                                               |
 |                                               |
 +--> InAddrErrors                               |
 |                                               |
 |                                               |
 +--> InDiscards (2)                             |
 |                                               |
 |                                               |
 +--------+------->------+----->-----+----->-----+
 |  InForwDatagrams (6)  |   OutForwDatagrams (6)|
 |                       V                       +->-+ OutFragReqds
 |                   InNoRoutes                  |   | (пакеты)
 / (локальный пакет (3)                          |   |
 |  Интерфейс для данного адреса,                |   +--> OutFragFails
 |  который может не быть приемным)              |   |    (пакеты)
 |                                               |   |
 |                                               |   V OutFragOks
 |                                               |   | (пакеты) (7)
 |                                               |   |
 +->-+ ReasmReqds (фрагменты)                    +-<-+ OutFragCreates
 |   |                                           |       (фрагменты)
 |   |                                           |
 |   +--> ReasmFails ( фрагменты (4))             +->-+ OutMcastPkts (1)
 |   |                                           |   V
 |   |                                           +-<-+
 +-<-+ ReasmOKs (собранные пакеты)               |
 |                                               +->-+ OutBcastPkts (1)
 |                                               |   V
 +--> InUnknownProtos                            +-<-+
 |                                               |
 |                                               |
 +--> InDiscards (2)                             +--> OutDiscards (2)
 |                                               |
 |                                               |
 + InDelivers                                    + OutTransmits (1)
 |                                               |
 V                                               V
На верхние                                      На
уровни                                          интерфейс
  1. Счетчики HC и октетов также присутствуют в этих точках, но опущены для краткости.

  2. Счетчики отбрасывания могут инкрементироваться в лобой момент обработки. Пакеты, отброшенные слева от InNoRoutes, учитываются в InDiscards, отброшенные справа — в OutDiscards.

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

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

  5. InTruncatedPkts следует инкрементировать лишь в тех случаях, когда кадр имеет корректный заголовок, но размер кадра короче требуемого. Кадры, которые слишком коротки для включения корректного заголовка, следует учитывать в InHdrErrors.

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

  7. При фрагментации пакета объекту следует инкрементировать счетчик OutFragFails, а не OutDiscards, чтобы сохранить равенство FragOks + FragFails = FragRqds.

Объекты в таблицах распределены по нескольким группам на основе пропускной способности, при которой счетчик достигает максимального значения в течение 1 часа. Базовая системная группа обязательна для всех элементов. Другие группы определяются пропускной способностью (скоростью). Группы для интерфейсов не обязательны.

3.2.4. Таблица адресных префиксов IP

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

Эта таблица требуется для элементов IPv6.

3.2.5. Таблица адресов IP

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

Таблица нужна для всех объектов IP.

3.2.6. Таблица трансляции адресов IP

Эта таблица содержит информацию о сопоставлении адресов уровня IP и физических адресов, формируемую с помощью протокола сопоставления адресов ARP6 для IPv4 или протокола обнаружения соседей для IPv6.

3.2.7. Таблица индексов зон действия IPv6

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

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

Таблица нужна для всех объектов IPv6.

3.2.8. Таблица используемых по умолчанию маршрутизаторов

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

Таблица нужна для всех объектов.

3.2.9. Таблица анонсирования маршрутизатрра

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

Таблица нужна для всех маршрутизаторов IPv6.

3.2.10. Таблицы статистики ICMP

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

Второй набор включает дополнительные детали статистики обработки сообщений ICMP этим элементом. Индекс формируется из двух субидентификаторов. Первый представляет тип адреса (IPv4 и IPv6), а второй — конкретный тип учитываемых сообщений. Строку не требуется создавать до того, как будет обработано сообщение данного типа, т. е. строка для icmpMsgStatsType=X может быть создана заранее, но должна быть создана после обработки первого принятого или переданного сообщения с Type=X. После приема или передачи следующего сообщения с Type=X соответствующий счетчик должен инкрементироваться.

Обе таблицы нужны для всех объектов.

3.2.11. Соответствие

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

В качестве обстоятельств применения в разделе соответствия служит реализация IPv4, IPv6 или маршрутизатора IPv6 и поддержка пропускной способности до 20 Мбит,с, от 20 до 650 Мбит/с и больше 650 Мбит/с.

3.2.12. Устаревшие объекты

Модуль MIB также включает некоторое число устаревших объектов из предшествующих выпусков. Они включены как часть исторической записи.

4. Обновление реализаций

Есть несколько классов изменений, которые нужно было внести.

Первым и основным изменением является то, что большинство определенных ранее объектов имеет другие идентификаторы и дополнительные индексы для поддержки возможности использования разных типов адресов. Примерами этого могут служить базовые счетчики IP и ICMP, перенесенные в ipSystemStatsTable и icmpMsgStatsTable.

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

Третьим изменением служит добавление нескольких объектов для замены имевшихся таблиц типа ipNetToPhysical.

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

4.1. Обновление реализации модуля IP-MIB для IPv4

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

Некоторые объекты общего назначения (ipForwarding, ipDefaultTTL, ipReasmTimeout) сохранились неизменными.

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

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

Таблица ipAddrTable была преобразована в ipAddressTable. Основная идея сохранилась, но таблица ipAddressTable достаточно сильно отличается и упрощает создание нового кода, а также обновление имеющегося. Основное различие заключается в добавлении нескольких объектов. Кроме того, объект ipAdEntReasmMaxSize был перенесен в другую таблицу — ipv4InterfaceTable. Процедуры SNMP требуется обновить с учетом нового индексирования.

Таблица ipNetToMediaTable была заменена на ipNetToPhysicalTable. Эти таблицы достаточно похожи и обновление кода будет простым. Процедуры SNMP требуется обновить с учетом нового индексирования.

Две новых таблицы ipv4InterfaceTable и ipDefaultRouterTable являются обязательными, как и несколько новых счетчиков ICMP.

Наконец, имеется несколько таблиц, требуемых для IPv6, но не обязательных для IPv4, которые можно реализовать по своему усмотрению.

4.2. Обновление реализации IPv6-MIB

Были внесены некоторые специфицческие обновления, требуемые для IPv6. Следует отметить, что приведенный ниже перечень обновлений не является исчерпывающим, полную информацию можно найти в MIB.

Два объекта общего назначения — ipv6Forwarding и ipv6DefaultHopLimit были переименованы и даны новые идентификаторы в ветви ip без изменения прочих. Новыми именами являются ipv6IpForwarding и ipv6IpDefaultHopLimit.

Хотя ipv6InterfaceTable содержит некоторые части ipv6IfTable, различия между таблицами существенны. Таблица ipv6IfTable была предназначена для репликации ifTable, тогда как ipv6InterfaceTable служит дополнением к ifTable. Поэтому элементы, дублирующиеся в ifTable и ipv6IfTable были удалены, а также были добавлены новые объекты.

Таблица ipv6IfStatsTable близка к ipIfStatsTable, но имеет дополнительный индекс для типа адреса и большую часть инструментария следует использовать многократно. Были добавлены объекты в таблицу ipIfStatsTable. Как и раньше, процедуры SNMP следует обновить для обработки новых индексов. Таблица ipIfStatsTable не является обязательной и ее можно игнорировать.

Таблица ipSystemStatsTable, по сути, является новой но она может использовать большинство инструментов из старой таблицы ipv6IfStatsTable. Как и для IPv4, реализация может учитывать статистику для ipIfStatsTable и затем агрегировать ее при запросе таблицы. Так же, как в IPv4, эта стратегия будет работать лишь в том случае, когда интерфейсы нельзя удалить или статистика удаляемых интерфейсов где-то сохраняется.

Таблица ipv6AddrPrefixTable переименована в ipAddressPrefixTable. Новая таблица содержит дополнительный объект и индекс, требуемый для совместимости с IPv4. Процедуры SNMP нужно обновить для работы с новым индексом.

Таблица ipAddressTable основана на ipv6AddrTable, но существенно изменена с добавлением объектов и удалением одного из индексов.

Маршрутная информация IPv6 (ipv6RouteNumber, ipv6DiscardedRoutes, ipv6RouteTable) была удалена из этого модуля MIB. Замены и обновления для этой информации содержатся в обновлении IP Forwarding Table MIB [16]. Таблица ipv6NetToMediaTable преобразована в ipNetToPhysicalTable. Новая таблица содержит дополнительный объект и индекс, требуемый для совместимости с IPv4. Процедуры SNMP нужно обновить для работы с новым индексом.

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

В дополнение к перечисленному были добавлены несколько новых таблиц. Таблицы ipv6ScopeZoneIndexTable и ipDefaultRouterTable являются обязательными для всех элементов IPv6, таблица ipv6RouterAdvertTable требуется только для маршрутизаторов IPv6.

5. Определения

Приведенный ниже модуль MIB импортирован из IF-MIB [6] и INET-ADDRESS-MIB [7] и ссылается на протоколы Neighbor Discovery [4] и IPv6 Stateless Address Autoconfiguration [5], а также документы Default Router Preferences [8], ARP [10] и IPv6 address architecture [17].

IP-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Integer32, Counter32, IpAddress,
    mib-2, Unsigned32, Counter64,
    zeroDotZero                        FROM SNMPv2-SMI
    PhysAddress, TruthValue,
    TimeStamp, RowPointer,
    TEXTUAL-CONVENTION, TestAndIncr,
    RowStatus, StorageType             FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP    FROM SNMPv2-CONF
    InetAddress, InetAddressType,
    InetAddressPrefixLength,
    InetVersion, InetZoneIndex         FROM INET-ADDRESS-MIB
    InterfaceIndex                     FROM IF-MIB;

ipMIB MODULE-IDENTITY
    LAST-UPDATED "200602020000Z"
    ORGANIZATION "IETF IPv6 MIB Revision Team"
    CONTACT-INFO
           "Editor:
            Shawn A. Routhier
            Interworking Labs
            108 Whispering Pines Dr. Suite 235
            Scotts Valley, CA 95066
            USA
            EMail: <sar@iwl.com>"
    DESCRIPTION
           "Модуль MIB для управления реализациями IP и ICMP, но без 
            управления маршрутами IP.

            Copyright (C) The Internet Society (2006). Эта версия модуля
            MIB является частью RFC 4293, где правовые аспекты описаны
            более подробно."

    REVISION      "200602020000Z"
    DESCRIPTION
           "Нейтральный к версии IP выпуск, в котором добавлены объекты IPv6 
            для ND, маршрутизаторов по умолчанию и анонсов маршрутизаторов.
            Будучи преемником RFC 2011, этот модуль MIB служит также 
            преемником RFC 2465 и RFC 2466. Опубликован в RFC 4293."

    REVISION      "199411010000Z"
    DESCRIPTION
           "Отдельный модуль MIB (IP-MIB) для объектов управления IP и ICMP.
            Опубликован в RFC 2011."

    REVISION      "199103310000Z"
    DESCRIPTION
           "Первоначальный выпуск этого модуля MIB был частью MIB-II,
            опубликованного в RFC 1213."
    ::= { mib-2 48}

--
-- Текстовые соглашения, определенные и используемые в этом модуле MIB.
--

IpAddressOriginTC ::= TEXTUAL-CONVENTION
    STATUS     current
    DESCRIPTION
           "Источник адреса.

            manual(2) показывает, что адрес был настроен вручную
            (например, пользователем).

            dhcp(4) указывает, что адрес был назначен сервером DHCP.

            linklayer(5) указывает, что адрес был создан автоматической 
            настройкой IPv6 без учета состояния.

            random(6) говорит, что адрес был выбран системой случайным
            образом (например, адрес IPv4 из диапазона 169.254/16 или 
            адрес RFC 3041."
    SYNTAX     INTEGER {
        other(1),
        manual(2),
        dhcp(4),
        linklayer(5),
        random(6)
    }

IpAddressStatusTC ::= TEXTUAL-CONVENTION
    STATUS     current
    DESCRIPTION
           "Статус адреса. Большинство состояний соответствует состояниям 
            из протокола IPv6 Stateless Address Autoconfiguration.

            preferred(1) показывает, что это действительный адрес, который
            может служить адресом отправителя или получателя в пакете.

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

            invalid(3) указывает, что адрес не действителен и его не следует
            применять в качестве адреса отправителя или получателя в пакете.

            inaccessible(4) указывает, что адрес не доступен по причине того,
            что интерфейс, которому назначен адрес, не работает.

            unknown(5) показывает, что статус по какой-то причине не определен.

            tentative(6) показывает, что уникальность адреса на канале будет
            проверяться. Такие адреса не следует использовать для общих
            коммуникаций (применять лишь для проверки уникальности).

            duplicate(7) указывает, что адрес был определен как дубликат на
            канале и его использование не допустимо.

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

            По умолчанию для адресов IPv4 предполагается статус preferred(1)."
    REFERENCE "RFC 2462"
    SYNTAX     INTEGER {
        preferred(1),
        deprecated(2),
        invalid(3),
        inaccessible(4),
        unknown(5),
        tentative(6),
        duplicate(7),
        optimistic(8)
    }

IpAddressPrefixOriginTC ::= TEXTUAL-CONVENTION
    STATUS     current
    DESCRIPTION
           "Происхождение данного префикса.

            manual(2) указывает, что префикс был задан вручную.

            wellknown(3) указывает использование общепринятого префикса 
            (например, 169.254/16 для IPv4 или fe80::/10 для IPv6.
            Общеизвестные префиксы могут назначаться IANA, регистраторами
            адресов или RFC со спецификациями стандартов.

            dhcp(4) указывает, что префикс был назначен сервером DHCP.

            routeradv(5) указывает, что префикс получен из анонса маршрутизатора.

            Примечание. Хотя IpAddressOriginTC и IpAddressPrefixOriginTC похожи,
            они не идентичны. Первый определяет способ создания адреса, а второй
            - способ нахождения префикса."
    SYNTAX     INTEGER {
        other(1),
        manual(2),
        wellknown(3),
        dhcp(4),
        routeradv(5)
    }

Ipv6AddressIfIdentifierTC ::= TEXTUAL-CONVENTION
     DISPLAY-HINT "2x:"
     STATUS       current
     DESCRIPTION
       "Этот тип данных служит для моделирования идентификаторов адресов 
       интерфейсов IPv6. Это двоичная строка, содержащая до 8 октетов с
       сетевым порядком байтов."
     SYNTAX      OCTET STRING (SIZE (0..8))

--
-- Общая группа IP
-- Некоторые объекты, влияющие на IPv4 в целом
--

ip       OBJECT IDENTIFIER ::= { mib-2 4 }

ipForwarding OBJECT-TYPE
    SYNTAX     INTEGER {
                    forwarding(1),    -- служит маршрутизатором
                    notForwarding(2)  -- не служит маршрутизатором
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Индикация состояния элемента в плане маршрутизации IPv4
            применительно к пересылке дейтаграмм, полученных элементом, но
            не адресованных ему. Маршрутизаторы IPv4 пересылают дейтаграммы,
            хосты IPv4 не делают этого (за исключением заданного отправителем
            маршрута через хост).

            При записи в этот объект элементу следует сохранять заданное
            состояние в энергонезависимой памяти при перезагрузке системы. 
            Примечание. Более жесткое требование не задано потому, что 
            этот объект был определен ранее."
    ::= { ip 1 }

ipDefaultTTL OBJECT-TYPE
    SYNTAX     Integer32 (1..255)
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Используемое по умолчанию значение поля TTL в заголовках IPv4
            созданных этим элементом дейтаграмм, если значение TTL не
            представлено протоколом транспортного уровня.

            Когда этот объект записывается, элементу следует сохранить
            значение в энергонезависимой памяти и восстановить его после
            перезагрузки системы.  Примечание. Более жесткое требование не 
            задано потому, что этот объект был определен ранее."
    ::= { ip 2 }

ipReasmTimeout OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Максимальное число секунд, в течение которых полученные 
            фрагменты могут ожидать сборки для этого элемента."
    ::= { ip 13 }

--
-- Общая группа IPv6 
-- Некоторые объекты, влияющие на IPv6 в целом
--

ipv6IpForwarding OBJECT-TYPE
    SYNTAX     INTEGER {
                    forwarding(1),    -- служит маршрутизатором
                    notForwarding(2)  -- не служит маршрутизатором
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Показывает является ли данный элемент маршрутизатором IPv6
            для любого интерфейса в плане пересылки дейтаграмм, принятых
            этим элементом, но не адресованных ему. Маршрутизаторы IPv6
            пересылают дейтаграммы, а хосты IPv6 не делают этого (за
            исключением заданной отправителем маршрутизации через хост).

            При записи в этот объект элементу следует сохранять заданное
            состояние в энергонезависимой памяти при перезагрузке системы."
    ::= { ip 25 }

ipv6IpDefaultHopLimit OBJECT-TYPE
    SYNTAX     Integer32 (0..255)
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Принятое по умолчанию значение помещается в поле Hop Limit 
            заголовка IPv6 дейтаграмм, создаваемых этим объектом, если 
            значение Hop Limit не представлено транспортым протоколом.

            При записи в этот объект элементу СЛЕДУЕТ сохранять изменения
            в энерго-независимой памяти и восстанавливать объект при 
            последующей инициализации системы."
    REFERENCE "RFC 2461, параграф 6.3.2"
    ::= { ip 26 }

--
-- Таблица интерфейсов IPv4
--

ipv4InterfaceTableLastChange OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime при последнем добавлении или удалении строки
            в ipv4InterfaceTable was или при последнем изменении объекта
            ipv4InterfaceReasmMaxSize или ipv4InterfaceEnableStatus.

            Если в ipv4InterfaceTable добавляются новые объекты, которые
            требуют обновления ipv4InterfaceTableLastChange при своем
            изменении, они должны задавать это требование в своем описании."
    ::= { ip 27 }

ipv4InterfaceTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Ipv4InterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица, содержащая информацию IPv4 по интерфейсам."
    ::= { ip 28 }

ipv4InterfaceEntry OBJECT-TYPE
    SYNTAX     Ipv4InterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Запись с информацией IPv4 для отдельного интерфейса."
    INDEX { ipv4InterfaceIfIndex }
    ::= { ipv4InterfaceTable 1 }

ipv4InterfaceEntry ::= SEQUENCE {
        ipv4InterfaceIfIndex         InterfaceIndex,
        ipv4InterfaceReasmMaxSize    Integer32,
        ipv4InterfaceEnableStatus    INTEGER,
        ipv4InterfaceRetransmitTime  Unsigned32
    }

ipv4InterfaceIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Значение индекса, однозначно указывающее интерфейс, к которому применима
            эта запись. Интерфейс, указанный конкретным значением этог индекса,
            является тем же, который указат таким же значением ifIndex в IF-MIB."
    ::= { ipv4InterfaceEntry 1 }

ipv4InterfaceReasmMaxSize OBJECT-TYPE
    SYNTAX     Integer32 (0..65535)
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Размер наибольшей дейтаграммы IPv4, которую данный элемент способен
            собрать из входящих фрагментов IPv4, принятых на этом интерфейсе."
    ::= { ipv4InterfaceEntry 2 }

ipv4InterfaceEnableStatus OBJECT-TYPE
    SYNTAX     INTEGER {
                 up(1),
                 down(2)
    }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Индикация включения (up) или отключения (down) IPv4 на этом интерфейсе.
            Этот объект не влияет на состояние самого интерфейса, а лишь показывает
            его соединение со стеком IPv4. Для управления состоянием интерфейса
            следует применять IF-MIB."
    ::= { ipv4InterfaceEntry 3 }

ipv4InterfaceRetransmitTime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "milliseconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Время между повторами запросов ARP к соседу при определении адреса
            или проверке доступности соседа."
    REFERENCE "RFC 1122"
    DEFVAL { 1000 }
    ::= { ipv4InterfaceEntry 4 }

--
-- Таблица интерфейсов IPv6
--
ipv6InterfaceTableLastChange OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime при последнем добавлении или удалении строки
            в ipv6InterfaceTable или последнем изменении объекта 
            ipv6InterfaceReasmMaxSize, ipv6InterfaceIdentifier,
            ipv6InterfaceEnableStatus, ipv6InterfaceReachableTime,
            ipv6InterfaceRetransmitTime или ipv6InterfaceForwarding.

            Если в ipv6InterfaceTable добавляются новые объекты, которые
            требуют обновлять ipv6InterfaceTableLastChange при своем изменении,
            они должны указывать это требование в своем описании."
    ::= { ip 29 }

ipv6InterfaceTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Ipv6InterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица, содержащая информацию IPv6 по интерфейсам."
    ::= { ip 30 }

ipv6InterfaceEntry OBJECT-TYPE
    SYNTAX     Ipv6InterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Запись с информацией IPv6 для данного интерфейса."
    INDEX { ipv6InterfaceIfIndex }
    ::= { ipv6InterfaceTable 1 }

Ipv6InterfaceEntry ::= SEQUENCE {
        ipv6InterfaceIfIndex         InterfaceIndex,
        ipv6InterfaceReasmMaxSize    Unsigned32,
        ipv6InterfaceIdentifier      Ipv6AddressIfIdentifierTC,
        ipv6InterfaceEnableStatus    INTEGER,
        ipv6InterfaceReachableTime   Unsigned32,
        ipv6InterfaceRetransmitTime  Unsigned32,
        ipv6InterfaceForwarding      INTEGER
    }

ipv6InterfaceIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Значение индекса, однозначно указывающее интерфейс, к которому применима
            эта запись. Интерфейс, указанный конкретным значением этого индекса,
            является тем же, который указан таким же значением ifIndex в IF-MIB."
    ::= { ipv6InterfaceEntry 1 }

ipv6InterfaceReasmMaxSize OBJECT-TYPE
    SYNTAX     Unsigned32 (1500..65535)
    UNITS      "octets"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Размер наибольшей дейтаграммы IPv6, которую данный элемент способен
            собрать из входящих фрагментов IPv6, принятых на этом интерфейсе."
    ::= { ipv6InterfaceEntry 2 }

ipv6InterfaceIdentifier OBJECT-TYPE
    SYNTAX     Ipv6AddressIfIdentifierTC
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Interface Identifier для этого интерфейса. Этот идентификатор
            в комбинации с префиксом адреса образует адрес интерфейса.

            По умолчанию Interface Identifier настраивается автоматически в
            соответствии с правилами для типа канала, к которому интерфейс
            подключен.

            Могут использоваться пустые (размера 0) идентификаторы. 
            Одним из примеров являются loopback-интерфейсы."
    ::= { ipv6InterfaceEntry 3 }

-- Это идентификатор объекта зарезервирован, поскольку он применялся в ранних
-- версиях модуля MIB. Теоретически, значения OID не назначаются до выпуска
-- спецификации в виде RFC, однако некоторые компании выпустили код на базе
-- ранних версий MIB, поэтому было лучше зарезервировать это значение OID.
-- ipv6InterfacePhysicalAddress ::= { ipv6InterfaceEntry 4}

ipv6InterfaceEnableStatus OBJECT-TYPE
    SYNTAX     INTEGER {
                 up(1),
                 down(2)
    }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Индикация включения (up) или отключения (down) IPv6 на этом интерфейсе.
            Этот объект не влияет на состояние самого интерфейса, а лишь показывает
            его соединение со стеком IPv6. Для управления состоянием интерфейса
            следует применять IF-MIB."

            Когда этот объект записан, элементу СЛЕДУЕТ сохранить значение в
            энергонезависимой памяти и восстанавливать объект при перезагрузке."
    ::= { ipv6InterfaceEntry 5 }

ipv6InterfaceReachableTime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "milliseconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Время, когда сосед считался доступным после приема подтверждения
            доступности."
    REFERENCE "RFC 2461, параграф 6.3.2"
    ::= { ipv6InterfaceEntry 6 }

ipv6InterfaceRetransmitTime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "milliseconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Время между повторами сообщений Neighbor Solicitation
            соседу при определении адреса или проверке доступности соседа."
    REFERENCE "RFC 2461, параграф 6.3.2"
    ::= { ipv6InterfaceEntry 7 }

ipv6InterfaceForwarding OBJECT-TYPE
    SYNTAX     INTEGER {
                    forwarding(1),    -- acting as a router
                    notForwarding(2)  -- NOT acting as a router
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Индикация работы этого элемента в качестве маршрутизатора IPv6
            на данном интерфейсе в части пересылки полученных дейтаграмм, которые
            не адресованы данному элементу. Маршрутизаторы IPv6 пересылают дейтаграммы,
            хосты IPv6 не делают этого (за исключением дейтаграмм с source-routed 
            через этот хост).

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

            Когда этот объект записан, элементу СЛЕДУЕТ сохранить значение в
            энергонезависимой памяти и восстанавливать объект при перезагрузке."
    ::= { ipv6InterfaceEntry 8 }

--
-- Статистика IP на уровне интерфейсов и системы в целом.
--
-- Две следующих таблицы ipSystemStatsTable и ipIfStatsTable предназначены
-- для предоставления счетчиков с разной дискретностью. ipSystemStatsTable
-- обеспечивает счетчики на уровне системы, агрегирующие счетчики трафика
-- для всех интерфейсов с данным типом адреса. IpIfStatsTable обеспечивает
-- те же счетчики для конкретных интерфейсов без агрегирования.
--
-- Обратите внимание. Если система обеспечивает значения на уровне системы
-- и интерфейсов, системное значение не совпадает с суммой интерфейсных
-- значений для всех интерфейсов по причине, например, динамического
-- создания/удаления интерфейсов.
--
-- Обратите внимание. Обе таблицы содержат некие элементы, представленные
-- двумя объектами — 32 и 64 бита. Для таких объектов 32-битовое значение
-- ДОЛЖНО представлять 32 младших бита 64-битового значения. Отметим также,
-- что 32-битовые счетчики должны включаться при включени 64-битовых.

ipTrafficStats OBJECT IDENTIFIER ::= { ip 31 }

ipSystemStatsTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpSystemStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица, содержащая статистику на уровне системы для версии 
            IP. Эта таблица и ipIfStatsTable содержат похожие объекты,
            которые различаются детализацией. Эта таблица содержит
            статистику трафика в масштабе системы, а ipIfStatsTable - 
            такую же статистику на уровне интерфейса."
    ::= { ipTrafficStats 1 }

ipSystemStatsEntry OBJECT-TYPE
    SYNTAX     IpSystemStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Статистическая запись, содержащая объекты масштаба системы 
            для определенной версии IP."
    INDEX { ipSystemStatsIPVersion }
    ::= { ipSystemStatsTable 1 }

IpSystemStatsEntry ::= SEQUENCE {
        ipSystemStatsIPVersion           InetVersion,
        ipSystemStatsInReceives          Counter32,
        ipSystemStatsHCInReceives        Counter64,
        ipSystemStatsInOctets            Counter32,
        ipSystemStatsHCInOctets          Counter64,
        ipSystemStatsInHdrErrors         Counter32,
        ipSystemStatsInNoRoutes          Counter32,
        ipSystemStatsInAddrErrors        Counter32,
        ipSystemStatsInUnknownProtos     Counter32,
        ipSystemStatsInTruncatedPkts     Counter32,
        ipSystemStatsInForwDatagrams     Counter32,
        ipSystemStatsHCInForwDatagrams   Counter64,
        ipSystemStatsReasmReqds          Counter32,
        ipSystemStatsReasmOKs            Counter32,
        ipSystemStatsReasmFails          Counter32,
        ipSystemStatsInDiscards          Counter32,
        ipSystemStatsInDelivers          Counter32,
        ipSystemStatsHCInDelivers        Counter64,
        ipSystemStatsOutRequests         Counter32,
        ipSystemStatsHCOutRequests       Counter64,
        ipSystemStatsOutNoRoutes         Counter32,
        ipSystemStatsOutForwDatagrams    Counter32,
        ipSystemStatsHCOutForwDatagrams  Counter64,
        ipSystemStatsOutDiscards         Counter32,
        ipSystemStatsOutFragReqds        Counter32,
        ipSystemStatsOutFragOKs          Counter32,
        ipSystemStatsOutFragFails        Counter32,
        ipSystemStatsOutFragCreates      Counter32,
        ipSystemStatsOutTransmits        Counter32,
        ipSystemStatsHCOutTransmits      Counter64,
        ipSystemStatsOutOctets           Counter32,
        ipSystemStatsHCOutOctets         Counter64,
        ipSystemStatsInMcastPkts         Counter32,
        ipSystemStatsHCInMcastPkts       Counter64,
        ipSystemStatsInMcastOctets       Counter32,
        ipSystemStatsHCInMcastOctets     Counter64,
        ipSystemStatsOutMcastPkts        Counter32,
        ipSystemStatsHCOutMcastPkts      Counter64,
        ipSystemStatsOutMcastOctets      Counter32,
        ipSystemStatsHCOutMcastOctets    Counter64,
        ipSystemStatsInBcastPkts         Counter32,
        ipSystemStatsHCInBcastPkts       Counter64,
        ipSystemStatsOutBcastPkts        Counter32,
        ipSystemStatsHCOutBcastPkts      Counter64,
        ipSystemStatsDiscontinuityTime   TimeStamp,
        ipSystemStatsRefreshRate         Unsigned32
    }

ipSystemStatsIPVersion OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Версия IP для этой строки."
    ::= { ipSystemStatsEntry 1 }

-- Этот идентификатор объекта зарезервирован, чтобы позволить 
-- выравнивание объектов этой таблицы с объектами ipIfStatsTable.
-- ::= { ipSystemStatsEntry 2 }

ipSystemStatsInReceives OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число принятых дейтаграмм IP, включая полученные
            с ошибками.

            Значение этого счетчика может изменяться с разрывами в 
            результате повторной инициализации системы управления и 
            в другие моменты, указанные значением 
            ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 3 }

ipSystemStatsHCInReceives OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число принятых дейтаграмм IP, включая полученные
            с ошибками. Здесь учитываются те же дейтаграммы, что и 
            в ipSystemStatsInReceives, но возможны большие значения.

            Значение этого счетчика может изменяться с разрывами в 
            результате повторной инициализации системы управления и 
            в другие моменты, указанные значением 
            ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 4 }

ipSystemStatsInOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, принятых во входных дейтаграммах IP,
            включая полученные с ошибками. Здесь ДОЛЖНЫ учитываться 
            октеты, посчитанные в ipSystemStatsInReceives.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 5 }

ipSystemStatsHCInOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, принятых во входных дейтаграммах IP,
            включая полученные с ошибками. Этот объект учитывает те же
            октеты, которые включаются в ipSystemStatsInOctets, но имеет
            большую разрядность.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 6 }

ipSystemStatsInHdrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных из-за ошибок в 
            заголовке IP, включая несоответствие версии, ошибки формата,
            превышение числа интервалов, ошибки при обработке опций IP и пр.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 7 }

ipSystemStatsInNoRoutes OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           " Число входных дейтаграмм IP, отброшенных из-за 
            отсутствия маршрута к получателю.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 8 }

ipSystemStatsInAddrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных из-за того, что
            адрес получателя в заголовке IP не являет действительным
            адресом этого объекта. Учитываются недействительные адреса
            (например, ::0). Для объектов, не являющихся маршрутизаторами
            IP и не пересылающих дейтаграммы, счетчик учитывает
            дейтаграммы, отброшенные из-за того, что адрес получателя
            не является локальным адресом.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 9 }

ipSystemStatsInUnknownProtos OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число локально адресованных дейтаграмм IP, принятых успешно,
            но отброшенных из-за неизвестного или неподдерживаемого
            протокола.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 10 }

ipSystemStatsInTruncatedPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных из-за недостаточного
            объема данных.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 11 }

ipSystemStatsInForwDatagrams OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, для которых этот объект не
            является конечным получателем и пытался найти маршрут к
            конечному получателю. В объектах, не являющихся
            маршрутизаторами IP, учитываются лишь дейтаграммы с
            Source-Route через этот объект при успешной обработке SR.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 12 }

ipSystemStatsHCInForwDatagrams OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм, для которых этот объект не
            является конечным получателем и пытался найти маршрут к
            конечному получателю. Объект учитывает те же пакеты, что
            ipSystemStatsInForwDatagrams, но разрядность счетчика выше.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 13 }

ipSystemStatsReasmReqds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых фрагментов IP, которые нужно собирать на
            этом интерфейсе.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 14 }

ipSystemStatsReasmOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число успешно собранных дейтаграмм IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 15 }

ipSystemStatsReasmFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число отказов, обнаруженных алгоритмом сборки IP (по любой
            причине - тайм-аут, ошибки и пр.). Отметим, что это не
            обязательно счетчик отброшенных фрагментов IP, поскольку
            некоторые алгоритмы (особенно алгоритмы RFC 815) могут
            терять число фрагментов, учитывая их как уже принятые.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 16 }

ipSystemStatsInDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP, для которых не возникло проблем, 
            препятствующих обработке, но они были отброшены (например,
            в результате нехватки буферов). Этот счетчив не учитывает
            дейтаграммы, отброшенные в ожидании сборки фрагментов.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 17 }

ipSystemStatsInDelivers OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, успешно доставленных пользовательским 
            протоколам IP (квлючая ICMP).
            При отслеживании статистики по интерфесам инкрементируется
            счетчик интерфейса, которому адресована дейтаграмма. Это не
            обязательно принявший пакет интерфейс.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 18 }

ipSystemStatsHCInDelivers OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, успешно доставленных пользовательским 
            протоколам IP (квлючая ICMP). Этот объект учитывает те же 
            пакеты, что и ipSystemStatsInDelivers, но имеет большую
            разрядность.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 19 }

ipSystemStatsOutRequests OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, представленных локальными
            пользовательскими протоколами IP (включая ICMP) уровню IP 
            с запросом на передачу. Счетчик не включает дейтаграмм,
            учтенных в ipSystemStatsOutForwDatagrams.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 20 }

ipSystemStatsHCOutRequests OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, представленных локальными
            пользовательскими протоколами IP (включая ICMP) уровню IP 
            с запросом на передачу. Этот объект учитывает те же 
            пакеты, что и ipSystemStatsOutRequests, но имеет большую
            разрядность.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 21 }

ipSystemStatsOutNoRoutes OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число локально созданных дейтаграмм IP, которые были
            отброшены по причине отсутствия маршрута к адресату.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 22 }

ipSystemStatsOutForwDatagrams OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм, для которых объект не является конечным
            получателем IP и для которых был найден путь к адресату.
            В объектах, не являющихся маршрутизаторами IP, этот 
            счетчик включает лишь дейтаграммы с Source-Routed через
            этот объект, для которых была выполнена маршрутизация SR.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 23 }
ipSystemStatsHCOutForwDatagrams OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм, для которых объект не является конечным
            получателем IP и для которых был найден путь к адресату.
            Этот объект учитывает те же пакеты, что 
            ipSystemStatsOutForwDatagrams, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 24 }

ipSystemStatsOutDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число выходных дейтаграмм IP, для которых не возникло проблем, 
            препятствующих передаче, но они были отброшены (например,
            в результате нехватки буферов). Этот счетчик включает 
            дейтаграммы, учтенные в ipSystemStatsOutForwDatagrams, 
            если такая дейтаграмма соответствует условию отбрасывания.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 25 }

ipSystemStatsOutFragReqds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP, требующих фрагментирования для отправки.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 26 }

ipSystemStatsOutFragOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число успешно фрагментированных дейтаграмм IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 27 }

ipSystemStatsOutFragFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP, которые нужно, но не удалось 
            фрагментировать, включая пакеты IPv4 с флагом DF и пакеты 
            IPv6, размером больше MTU на выходном канале.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 28 }

ipSystemStatsOutFragCreates OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число фрагментов выходных дейтаграмм, созданных в 
            результате фрагментации IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 29 }

ipSystemStatsOutTransmits OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP, переданных нижележащему уровню для
            отправки, включая созданные локально и пересылаемые.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 30 }

ipSystemStatsHCOutTransmits OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP, переданных нижележащему уровню для
            отправки, включая созданные локально и пересылаемые.
            Этот счетчик учитывает те же пакеты, что и 
            ipSystemStatsOutTransmits, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 31 }

ipSystemStatsOutOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в дейтаграммах IP, доставленных
            нижележащему уровню для передачи. Здесь ДОЛЖНЫ учитаваться
            октеты пакетов, включенных в ipSystemStatsOutTransmits.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 32 }

ipSystemStatsHCOutOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в дейтаграммах IP, доставленных
            нижележащему уровню для передачи. Этот объект учитывает те 
            же октеты, что и ipSystemStatsOutOctets, но с большей
            разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 33 }

ipSystemStatsInMcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых групповых дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 34 }

ipSystemStatsHCInMcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых групповых дейтаграмм IP. Этот объект учитывает
            де же дейтаграммы, что и ipSystemStatsInMcastPkts, но с
            большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 35 }

ipSystemStatsInMcastOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, полученных в групповых дейтаграммах 
            IP. Учитываться ДОЛЖНЫ октеты из дейтаграмм, включенных
            в ipSystemStatsInMcastPkts.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 36 }

ipSystemStatsHCInMcastOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, полученных в групповых дейтаграммах 
            IP. Объект уитывает те же октеты, что и 
            ipSystemStatsInMcastOctets, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 37 }

ipSystemStatsOutMcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных групповых дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 38 }

ipSystemStatsHCOutMcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных групповых дейтаграмм IP. Этот объект
            учитывает те же дейтаграммы, что и 
            ipSystemStatsOutMcastPkts, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 39 }

ipSystemStatsOutMcastOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, переданных в групповых дейтаграммах
            IP. Учитываться ДОЖНЫ октеты, включенне в
            ipSystemStatsOutMcastPkts.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 40 }

ipSystemStatsHCOutMcastOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов, переданных в групповых дейтаграммах
            IP. Этот объект учитывает те же дейтаграммы, что и 
            ipSystemStatsOutMcastOctets, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 41 }
ipSystemStatsInBcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых широковещательных дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 42 }

ipSystemStatsHCInBcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых широковещательных дейтаграмм IP. Этот объект
            считает те же дейтаграммы, что и ipSystemStatsInBcastPkts,
            но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 43 }

ipSystemStatsOutBcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных широковещательных дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 44 }

ipSystemStatsHCOutBcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных широковещательных дейтаграмм IP. Этот 
            объект считает те же дейтаграммы, что и 
            ipSystemStatsOutBcastPkts, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipSystemStatsDiscontinuityTime."
    ::= { ipSystemStatsEntry 45 }

ipSystemStatsDiscontinuityTime OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime в последнем случае, когда у одного
            или нескольких счетчиков этого объекта возникли
            разрывы значений.

            Если таких разрывов не было с момента предшествующей 
            инициализации системы управления, объект содержит 0."
    ::= { ipSystemStatsEntry 46 }

ipSystemStatsRefreshRate OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "milli-seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Минимальный интервал опроса, приемлемы для этого объекта.
            Объект указывает здесь минимальное время, требуемое ему 
            для обновления счетчиков."
    ::= { ipSystemStatsEntry 47 }

ipIfStatsTableLastChange OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime в последнем случае добавления или 
            удаления строки в ipIfStatsTable.

            Если в ipIfStatsTable были добавлены объекты, требующие
            обновления ipIfStatsTableLastChange при их изменении,
            они должны указывать это требование в своих описаниях."
    ::= { ipTrafficStats 2 }

ipIfStatsTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpIfStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица статистики трафика по интерфейсам. Эта таблица и
            ipSystemStatsTable содержат похожие объекты, но различаются
            уровнем гранулярности. В данной таблице содержится статистика
            для интерфейсов, а в ipSystemStatsTable - для системы в целом."
    ::= { ipTrafficStats 3 }

ipIfStatsEntry OBJECT-TYPE
    SYNTAX     IpIfStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Запись статистики интерфейса, содержащая объекты для 
            конкретного интерфейса и версии IP."
    INDEX { ipIfStatsIPVersion, ipIfStatsIfIndex }
    ::= { ipIfStatsTable 1 }

IpIfStatsEntry ::= SEQUENCE {
        ipIfStatsIPVersion           InetVersion,
        ipIfStatsIfIndex             InterfaceIndex,
        ipIfStatsInReceives          Counter32,
        ipIfStatsHCInReceives        Counter64,
        ipIfStatsInOctets            Counter32,
        ipIfStatsHCInOctets          Counter64,
        ipIfStatsInHdrErrors         Counter32,
        ipIfStatsInNoRoutes          Counter32,
        ipIfStatsInAddrErrors        Counter32,
        ipIfStatsInUnknownProtos     Counter32,
        ipIfStatsInTruncatedPkts     Counter32,
        ipIfStatsInForwDatagrams     Counter32,
        ipIfStatsHCInForwDatagrams   Counter64,
        ipIfStatsReasmReqds          Counter32,
        ipIfStatsReasmOKs            Counter32,
        ipIfStatsReasmFails          Counter32,
        ipIfStatsInDiscards          Counter32,
        ipIfStatsInDelivers          Counter32,
        ipIfStatsHCInDelivers        Counter64,
        ipIfStatsOutRequests         Counter32,
        ipIfStatsHCOutRequests       Counter64,
        ipIfStatsOutForwDatagrams    Counter32,
        ipIfStatsHCOutForwDatagrams  Counter64,
        ipIfStatsOutDiscards         Counter32,
        ipIfStatsOutFragReqds        Counter32,
        ipIfStatsOutFragOKs          Counter32,
        ipIfStatsOutFragFails        Counter32,
        ipIfStatsOutFragCreates      Counter32,
        ipIfStatsOutTransmits        Counter32,
        ipIfStatsHCOutTransmits      Counter64,
        ipIfStatsOutOctets           Counter32,
        ipIfStatsHCOutOctets         Counter64,
        ipIfStatsInMcastPkts         Counter32,
        ipIfStatsHCInMcastPkts       Counter64,
        ipIfStatsInMcastOctets       Counter32,
        ipIfStatsHCInMcastOctets     Counter64,
        ipIfStatsOutMcastPkts        Counter32,
        ipIfStatsHCOutMcastPkts      Counter64,
        ipIfStatsOutMcastOctets      Counter32,
        ipIfStatsHCOutMcastOctets    Counter64,
        ipIfStatsInBcastPkts         Counter32,
        ipIfStatsHCInBcastPkts       Counter64,
        ipIfStatsOutBcastPkts        Counter32,
        ipIfStatsHCOutBcastPkts      Counter64,
        ipIfStatsDiscontinuityTime   TimeStamp,
        ipIfStatsRefreshRate         Unsigned32
    }

ipIfStatsIPVersion OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Версия протокола IP для данной строки."
    ::= { ipIfStatsEntry 1 }

ipIfStatsIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Значение индекса, однозначно указывающее интерфейс, к
            которому относится запись. Интерфейс с данным индексом
            совпадает с интерфейсом, указанным таким же значением
            ifIndex в IF-MIB."
    ::= { ipIfStatsEntry 2 }

ipIfStatsInReceives OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число входных дейтаграмм IP, включая ошибочные.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 3 }

ipIfStatsHCInReceives OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число входных дейтаграмм IP, включая ошибочные.
            Объект учитывает те же дейтаграммы, что и 
            ipIfStatsInReceives, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 4 }

ipIfStatsInOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов во входных дейтаграммах IP, включая 
            ошибочные. ДОЛЖНЫ учитываться октеты дейтаграмм, 
            включенных в ipIfStatsInReceives.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 5 }

ipIfStatsHCInOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов во входных дейтаграммах IP, включая 
            ошибочные. Объект учитывает те же дейтаграммы, что и 
            ipIfStatsInOctets, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 6 }

ipIfStatsInHdrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных из-за ошибок в
            заголовке IP, включая несоответствие номера версии, 
            ошибки формата, превышение числа интервалов, ошибки при
            обработке опций IP и пр.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 7 }

ipIfStatsInNoRoutes OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных по причине 
            отсутствия маршрута к получателю.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 8 }

ipIfStatsInAddrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных по причине того, 
            что адрес получателя в заголовке IP не является адресом 
            данного объекта. Это включает недействительные адреса
            (например, ::0). Для элементов, не являющихся маршрутизаторами
            IP и не пересылающих дейтаграммы, этот счетчик учитывает
            дейтаграммы, отброшенные по причине того, что адрес получателя
            не является локальным адресом.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 9 }

ipIfStatsInUnknownProtos OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число адресованных данному объекту дейтаграмм IP, которые были
            приняты, но отброшены по причине неизвестного или не 
            поддерживаемого протокола.

            При отслеживании статистики по интерфейсам инкрементируется 
            счетчик интерфейса, которому адресована дейтаграмма. Он может
            не совпадать с принявшим дейтаграмму интерфейсом.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 10 }

ipIfStatsInTruncatedPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, отброшенных по причине 
            недостаточного объема данных в дейтаграмме.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 11 }

ipIfStatsInForwDatagrams OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм, для которых данный объект не
            является конечным получателем и для которых объект 
            пытался найти маршрут к конечному адресату. Для объектов,
            не являющихся маршрутизаторами IP, этот счтечик учитывает
            лишь дейтаграммы с Source-Route через данный объект при
            успешной обработке SR.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 12 }

ipIfStatsHCInForwDatagrams OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм, для которых данный объект не
            является конечным получателем и для которых объект 
            пытался найти маршрут к конечному адресату. Счетчик
            учитывает те же пакеты, что и ipIfStatsInForwDatagrams, 
            но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 13 }
ipIfStatsReasmReqds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых фрагментов IP, которые нужно собрать на
            этом интерфейсе.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 14 }

ipIfStatsReasmOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число успешно собранных из фрагментов дейтаграмм IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 15 }

ipIfStatsReasmFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число отказов, обнаруженным алгоритмом сборки фрагментов IP
            (по любой причине - тайм-аут, ошибки и пр.). Отметим, что
            учет отброшенных фрагментов IP не обязателен, поскольку
            некоторые алгоритмы (в частности RFC 815) могут не 
            отслеживать число принятых фрагментов.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 16 }

ipIfStatsInDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входных дейтаграмм IP, для которых не возникло 
            препятствий при обработке, но они были отброшены (например,
            в результате нехватки буферов). Этот счтечик не включает
            дейтаграммы, отброшенные в результате ожидания сборки фрагментов.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 17 }

ipIfStatsInDelivers OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, доставленных пользовательским 
            протоколам IP (включая ICMP).

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 18 }

ipIfStatsHCInDelivers OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, доставленных пользовательским 
            протоколам IP (включая ICMP). Счетчик учитывает же же 
            дейтаграммы, что и ipIfStatsInDelivers, но с большей
            разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 19 }

ipIfStatsOutRequests OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм IP, представленных для передачи
            локальными пользовательскими протоколами IP (включая ICMP).
            Счетчик не включает дейтаграммы, учтенные в
            ipIfStatsOutForwDatagrams.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 20 }

ipIfStatsHCOutRequests OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм IP, представленных для передачи
            локальными пользовательскими протоколами IP (включая ICMP).
            Объект учитывает те же дейтаграммы, что и 
            ipIfStatsOutRequests, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 21 }

-- Этот идентификатор объекта зарезервирован в данной таблице 
-- для соответствия с таблицей ipSystemStatsTable.
-- ::= {ipIfStatsEntry 22}

ipIfStatsOutForwDatagrams OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм, для которых данный элемент не является
            конечным получателем IP и для которых был найден путь к
            адресату. В элементах, не являющихся маршрутизаторами IP,
            этот счетчик учитывает лишь дейтаграммы в Source-Route
            через данный элемент при успешном выполнении SR.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 23 }

ipIfStatsHCOutForwDatagrams OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм, для которых данный элемент не является
            конечным получателем IP и для которых был найден путь к
            адресату. Объект учитывает те же дейтаграммы, что и
            ipIfStatsOutForwDatagrams, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 24 }

ipIfStatsOutDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число выходных дейтаграмм IP, для которых не возникло
            проблем, препятствующих передаче, но они были отброшены
            (например, в результате нехватки буферов). Этот счетчик
            учитывает дейтаграммы, включенные в ipIfStatsOutForwDatagrams,
            если они соответствуют критерию отбрасывания.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 25 }

ipIfStatsOutFragReqds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм, которые нужно было фрагментировать
            для передачи.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 26 }

ipIfStatsOutFragOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число успешно фрагментированных дейтаграмм IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 27 }

ipIfStatsOutFragFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число дейтаграмм IP отброшенных по причине невозможности
            требуемого фрагментирования. Учитываются пакеты IPv4 с флагом
            DF и пакеты IPv6, пересланные с превышением MTU на канале.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 28 }

ipIfStatsOutFragCreates OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число выходных фрагментов дейтаграмм IP.

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

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 29 }

ipIfStatsOutTransmits OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм IP, представленных объектом протоколу
            нижележащего уровня для передачи, включая созданные локально
            и пересылаемые дейтаграммы.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 30 }

ipIfStatsHCOutTransmits OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число дейтаграмм IP, представленных объектом протоколу
            нижележащего уровня для передачи. Этот объект учитывает те же
            дейтаграммы, что и ipIfStatsOutTransmits, но с большей
            разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 31 }

ipIfStatsOutOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в дейтаграммах IP, представленных
            нижележащему уровню для передачи. Здесь ДОЛЖНЫ учитываться
            дейтаграммы, включенные в ipIfStatsOutTransmits.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 32 }

ipIfStatsHCOutOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в дейтаграммах IP, представленных
            нижележащему уровню для передачи. Этот объект учитывает те же
            дейтаграммы, что и ipIfStatsOutOctets, но с большей
            разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 33 }

ipIfStatsInMcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых групповых дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 34 }

ipIfStatsHCInMcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых групповых дейтаграмм IP. Объект учитывает
            те же дейтаграммы, что и ipIfStatsInMcastPkts, но с
            большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 35 }

ipIfStatsInMcastOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в принятых групповых дейтаграммах IP.
            ДОЛЖНЫ учитываться октеты дейтаграмм, включенных в 
            ipIfStatsInMcastPkts.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 36 }

ipIfStatsHCInMcastOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число октетов в принятых групповых дейтаграммах IP.
            Объект учитывает те же дейтаграммы, что и 
            ipIfStatsInMcastOctets, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 37 }

ipIfStatsOutMcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных групповых дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 38 }

ipIfStatsHCOutMcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных групповых дейтаграмм IP. Объект учитывает
            те же дейтаграммы, что и ipIfStatsOutMcastPkts, но с
            большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 39 }

ipIfStatsOutMcastOctets OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число октетов в переданных групповых дейтаграммах IP. 
            ДОЛЖНЫ учитываться дейтаграммы, включенные в 
            ipIfStatsOutMcastPkts.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 40 }

ipIfStatsHCOutMcastOctets OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число октетов в переданных групповых дейтаграммах IP. 
            Объект очитывает те же октеты, что и 
            ipIfStatsOutMcastOctets, но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 41 }

ipIfStatsInBcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых широковещательных дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 42 }

ipIfStatsHCInBcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число принятых широковещательных дейтаграмм IP. Объект
            counts the same datagrams as ipIfStatsInBcastPkts, but
            allows for larger values.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 43 }

ipIfStatsOutBcastPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных широковещательных дейтаграмм IP.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 44 }

ipIfStatsHCOutBcastPkts OBJECT-TYPE
    SYNTAX     Counter64
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число переданных широковещательных дейтаграмм IP. Объект
            учитывает те же дейтаграммы, что и ipIfStatsOutBcastPkts,
            но с большей разрядностью.

            Разрывы в значениях этого счетчика могут вызываться
            повторной инициализацией системы управления и в другие 
            моменты, указанные в ipIfStatsDiscontinuityTime."
    ::= { ipIfStatsEntry 45 }

ipIfStatsDiscontinuityTime OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime в последнем случае, когда у одного
            или нескольких счетчиков этого объекта возникли
            разрывы значений.

            Если таких разрывов не было с момента предшествующей 
            инициализации системы управления, объект содержит 0."
    ::= { ipIfStatsEntry 46 }

ipIfStatsRefreshRate OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS "milli-seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Минимальный интервал опроса, приемлемы для этого объекта.
            Объект указывает здесь минимальное время, требуемое ему 
            для обновления счетчиков."
    ::= { ipIfStatsEntry 47 }

--
-- Таблица адресных префиксов
--

ipAddressPrefixTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpAddressPrefixEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Эта таблица позволяет пользователю определить источник адреса
            или набора адресов IP, а также позволяет другим таблицам
            совместно использовать информацию по указателю без копирования.

            Например, при настройке на узле индивидуального и anicast-адреса
            для префикса объекты ipAddressPrefix для них будут указывать на
            одну строку в данной таблице.

            Таблица обеспечивает прежде всего поддержку префиксов IPv6 и 
            некоторых менее значимых объектов для IPv4. Адреса IPv4
            включены в таблицу для будущей гибкости. Для сохранения 
            общей конфигурации этот документ предлагает принятые по
            умолчанию значения для префиксов IPv4. Каждое из них узел
            может переопределить для придания значимости.

            Все префиксы, используемые этим элементом, следует включать
            в таблицу независимо от источника сведений о префиксе
            (таблица не ограничивается префиксами из анонсов маршрутизаторов)."
    ::= { ip 32 }

ipAddressPrefixEntry OBJECT-TYPE
    SYNTAX     IpAddressPrefixEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Запись в таблице ipAddressPrefixTable."
    INDEX    { ipAddressPrefixIfIndex, ipAddressPrefixType,
               ipAddressPrefixPrefix, ipAddressPrefixLength }
    ::= { ipAddressPrefixTable 1 }

IpAddressPrefixEntry ::= SEQUENCE {
        ipAddressPrefixIfIndex               InterfaceIndex,
        ipAddressPrefixType                  InetAddressType,
        ipAddressPrefixPrefix                InetAddress,
        ipAddressPrefixLength                InetAddressPrefixLength,
        ipAddressPrefixOrigin                IpAddressPrefixOriginTC,
        ipAddressPrefixOnLinkFlag            TruthValue,
        ipAddressPrefixAutonomousFlag        TruthValue,
        ipAddressPrefixAdvPreferredLifetime  Unsigned32,
        ipAddressPrefixAdvValidLifetime      Unsigned32
    }

ipAddressPrefixIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Значение индекса, однозначно указывающее интерфейс, для 
            которого настроен префикс. Интерфейс, указываемый индексом
            совпадает с интерфейсом, указанным тем же значением ifIndex 
            базы IF-MIB."
    ::= { ipAddressPrefixEntry 1 }

ipAddressPrefixType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Адрес типа ipAddressPrefix."
    ::= { ipAddressPrefixEntry 2 }

ipAddressPrefixPrefix OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Префикс адреса. Тип адреса для объекта задает 
            ipAddressPrefixType. Размером объекта служит стандартный
            размер этого типа (4 или 16 байтов). Все биты после
            ipAddressPrefixLength должны иметь значение 0.

            Разработчикам следует понимать, что при размере 
            ipAddressPrefixPrefix более 114 значения OID в экземплярах
            столбцов этой строки будут иметь более 128 субидентификаторов
            и доступ к ним с помощью SNMPv1, SNMPv2c или SNMPv3
            будет невозможен"
    ::= { ipAddressPrefixEntry 3 }

ipAddressPrefixLength OBJECT-TYPE
    SYNTAX     InetAddressPrefixLength
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Размер префикса.

            Значение 0 не имеет смысла для этого объекта. Оно просто 
            указывает адрес ::/0."
    ::= { ipAddressPrefixEntry 4 }

ipAddressPrefixOrigin OBJECT-TYPE
    SYNTAX     IpAddressPrefixOriginTC
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Источник префикса."
    ::= { ipAddressPrefixEntry 5 }

ipAddressPrefixOnLinkFlag OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Объект имеет значение true(1), если префикс можно использовать
            для определения принадлежности к каналу. Иначе false(2).

            По умолчанию для префиксов IPv4 используется true(1)."
    REFERENCE "Для IPv6 RFC 2461, особенно параграфы 2, 4.6.2 и RFC 2462"
    ::= { ipAddressPrefixEntry 6 }

ipAddressPrefixAutonomousFlag OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Флаг автономной настройки адреса. Значение true(1) указывает,
            что префикс можно использовать для автономной настройки адреса
            (т. е. для формирования локального адреса интерфейса), false(2)
            не позволяет этого.

            По умолчанию для префиксов IPv4 используется false(2)."
    REFERENCE "Для IPv6 RFC 2461, особенно параграфы 2, 4.6.2 и RFC 2462"
    ::= { ipAddressPrefixEntry 7 }

ipAddressPrefixAdvPreferredLifetime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Оставшееся число секунд предпочтительности данного префикса,
            например, число секунд до отмены. Значение 4294967295
            указывает бесконечное время.

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

            По умолчанию для префиксов IPv4 используется 4294967295."
    REFERENCE "Для IPv6 RFC 2461, особенно параграфы 2, 4.6.2 и RFC 2462"
    ::= { ipAddressPrefixEntry 8 }

ipAddressPrefixAdvValidLifetime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS       "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Оставшееся число секунд действительности данного префикса,
            например, до объявления недействительным. Значение 4294967295
            указывает бесконечное время.

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

            По умолчанию для префиксов IPv4 используется 4294967295."
    REFERENCE "Для IPv6 RFC 2461, особенно параграфы 2, 4.6.2 и RFC 2462"
    ::= { ipAddressPrefixEntry 9 }

--
-- Таблица адресов Internet 
--

ipAddressSpinLock OBJECT-TYPE
    SYNTAX     TestAndIncr
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Консультативная блокировка, которая позволяет взаимодействующим 
            менеджерам SNMP координировать операции установки или изменения
            записей в этой таблице.

            Для использования блокировки при координации операций установки
            менеджеру сначала следует получить ipAddressTableSpinLock, затем
            определить строку для создания или изменения. В заключение 
            следует ввести подходящую команду установки (set), включающую
            найденное значение ipAddressSpinLock. Если другой менеджер в то 
            же время изменил таблицу, значение ipAddressSpinLock изменится
            и создание завершится отказом по причине некорректности значения
            ipAddressSpinLock. Предлагается (но не требуется) использовать
            ipAddressSpinLock в качестве первой привязки переменной (var) для
            каждого набора объектов, представляющего «строку» в PDU."
    ::= { ip 33 }

ipAddressTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpAddressEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Строка адресной информации, связанной с интерфейсами элемента.

            Таблица не содержит сведений о групповых адресах, которые 
            хранятся в соответствущих групповых MIB, таких как RFC 3019.

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

            Важно отметить, что при включении адресов IPv6 link-local в
            эту таблицу запись должна использовать InetAddressType ipv6z,
            чтобы различать возможные интерфейсы."
    ::= { ip 34 }

ipAddressEntry OBJECT-TYPE
    SYNTAX     IpAddressEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Отображение адресов для конкретного интерфейса."
    INDEX { ipAddressAddrType, ipAddressAddr }
    ::= { ipAddressTable 1 }

IpAddressEntry ::= SEQUENCE {
        ipAddressAddrType     InetAddressType,
        ipAddressAddr         InetAddress,
        ipAddressIfIndex      InterfaceIndex,
        ipAddressType         INTEGER,
        ipAddressPrefix       RowPointer,
        ipAddressOrigin       IpAddressOriginTC,
        ipAddressStatus       IpAddressStatusTC,
        ipAddressCreated      TimeStamp,
        ipAddressLastChanged  TimeStamp,
        ipAddressRowStatus    RowStatus,
        ipAddressStorageType  StorageType
    }

ipAddressAddrType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Адрес типа ipAddressAddr."
    ::= { ipAddressEntry 1 }

ipAddressAddr OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Адрес IP, к которому относится данная запись. Тип адреса 
            указан в ipAddressAddrType.

            Разработчикам следует понимать, что при размере 
            ipAddressAddr более 116 OID в экземплярах
            столбцов этой строки будут иметь более 128 субидентификаторов
            и доступ к ним с помощью SNMPv1, SNMPv2c или SNMPv3
            будет невозможен"
    ::= { ipAddressEntry 2 }

ipAddressIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Индекс, однозначно указывающий интерфейс, к которому применима
            запись. Интерфейс, указанный индексом совпадает с интерйесом, 
	     заданным этим же значением ifIndex в базе IF-MIB."
    ::= { ipAddressEntry 3 }

ipAddressType OBJECT-TYPE
    SYNTAX     INTEGER {
                 unicast(1),
                 anycast(2),
                 broadcast(3)
    }
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Тип адреса. Значение broadcast(3) недействительно для 
            адресов IPv6 (RFC 3513)."
    DEFVAL { unicast }
    ::= { ipAddressEntry 4 }

ipAddressPrefix OBJECT-TYPE
    SYNTAX     RowPointer
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Указатель на строку таблицы префиксов, к которой относится
            данный адрес. { 0 0 } говорит об отсутствии такой строки."
    DEFVAL { zeroDotZero }
    ::= { ipAddressEntry 5 }

ipAddressOrigin OBJECT-TYPE
    SYNTAX     IpAddressOriginTC
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "источник адреса."
    ::= { ipAddressEntry 6 }

ipAddressStatus OBJECT-TYPE
    SYNTAX     IpAddressStatusTC
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Статус адреса, указывающий возможность использования адреса
            для коммуникаций.

            При отсутствии другой информации адрес IPv4 всегда preferred(1)."
    DEFVAL { preferred }
    ::= { ipAddressEntry 7 }

ipAddressCreated OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime в момент создания записи. Если запись
            создана до последней реинициализации локальной подсистемы
            сетевого управления, объект имеет значение 0."
    ::= { ipAddressEntry 8 }

ipAddressLastChanged OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime при последнем обновлении записи. Если 
            запись обновлена до последней реинициализации локальной 
            подсистемы сетевого управления, объект имеет значение 0."
    ::= { ipAddressEntry 9 }

ipAddressRowStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Статус данной концептуальной строки.

            RowStatus TC требует, чтобы этот раздел DESCRIPTION указывал,
            при каких обстоятельствах можно изменять другие объекты в этой
            строке. Значение этого объекта не влияет на возможность
            изменения других концептуальных объектов в строке.

            Концептуальную строку нельзя сделать активной, пока в 
            ipAddressIfIndex не указан действительный индекс."
    ::= { ipAddressEntry 10 }

ipAddressStorageType OBJECT-TYPE
    SYNTAX     StorageType
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Тип хранилища для этой концептуальной строки. Если объект 
            имеет значение permanent, другие объекты не могут его
            изменять."
    DEFVAL { volatile }
    ::= { ipAddressEntry 11 }

--
-- Таблица трансляции адресов Internet
--

ipNetToPhysicalTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpNetToPhysicalEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица трансляции адресов IP служит для сопоставления 
            адресов IP с физическими адресами.

            Таблицы трансляции адресов содержат сопоставления адресов IP
            с «физическими» эквивалентами. Некоторые интерфейсы не применяют
            таблиц трансляции для определения эквивалентности адресов
            (например, DDN-X.25 использует алгоритмический метод), если все
            интерфейсы относятся к такому типу, таблица будет пустой.

            Для заполнения таблицы служит множество протоколов, но основными 
            являются ARP и Neighbor Discovery."
    REFERENCE "RFC 826 и RFC 2461"
    ::= { ip 35 }

ipNetToPhysicalEntry OBJECT-TYPE
    SYNTAX     IpNetToPhysicalEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Каждая запись содержит сопоставление адреса IP с физическим адресом."
    INDEX       { ipNetToPhysicalIfIndex,
                  ipNetToPhysicalNetAddressType,
                  ipNetToPhysicalNetAddress }
    ::= { ipNetToPhysicalTable 1 }

IpNetToPhysicalEntry ::= SEQUENCE {
        ipNetToPhysicalIfIndex         InterfaceIndex,
        ipNetToPhysicalNetAddressType  InetAddressType,
        ipNetToPhysicalNetAddress      InetAddress,
        ipNetToPhysicalPhysAddress     PhysAddress,
        ipNetToPhysicalLastUpdated     TimeStamp,
        ipNetToPhysicalType            INTEGER,
        ipNetToPhysicalState           INTEGER,
        ipNetToPhysicalRowStatus       RowStatus
    }

ipNetToPhysicalIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Индекс, однозначно указывающей интерфейс, к которому применима 
            запись. Указываемый значением индекса интерфейс совпадает с 
            интерфейсом, заданным таким же ifIndex в базе IF-MIB."
    ::= { ipNetToPhysicalEntry 1 }

ipNetToPhysicalNetAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The type of ipNetToPhysicalNetAddress."
    ::= { ipNetToPhysicalEntry 2 }

ipNetToPhysicalNetAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Адрес IP, соответствующий зависимому от среды «физическому»
            адресу. Тип задает ipNetToPhysicalAddressType.

            Разработчикам следует понимать, что при размере 
            ipAddressAddr более 115 OID в экземплярах
            столбцов этой строки будут иметь более 128 субидентификаторов
            и доступ к ним с помощью SNMPv1, SNMPv2c или SNMPv3
            будет невозможен"
    ::= { ipNetToPhysicalEntry 3 }

ipNetToPhysicalPhysAddress OBJECT-TYPE
    SYNTAX     PhysAddress (SIZE(0..65535))
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Зависящий от среды «физический» адрес.

            Поскольку записи этой таблицы не являются постоянными, при
            записи объекта элементу НЕ СЛЕДУЕТ сохранять изменения в
            энергонезависимом хранилище."
    ::= { ipNetToPhysicalEntry 4 }

ipNetToPhysicalLastUpdated OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Значение sysUpTime при последнем обновлении записи. Если 
            запись обновлена до последней реинициализации локальной
            подсистемы сетевого управления, объект имеет значение 0."
    ::= { ipNetToPhysicalEntry 5 }

ipNetToPhysicalType OBJECT-TYPE
    SYNTAX     INTEGER {
                other(1),        -- ничего из перечисленного ниже
                invalid(2),      -- недействительное отображение
                dynamic(3),
                static(4),
                local(5)         -- локальный интерфейс
            }
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Тип отображения.

            Установка значения invalid(2) делает соответствующую запись
            в ipNetToPhysicalTable недействительной. Т. е. интерфейс по
            сути отвязывается от записи. Удаление недействительной записи
            из таблицы зависит от реализации. Поэтому станции управления
            должны быть готовы к получению табличной информации от агентов,
            которая соответствует не используемым в данный момент записям.
            Подобающая интерпретация таких записей требует проверки
            соответствующего объекта ipNetToPhysicalType.

            Тип dynamic(3) указывает, что IP-адрес, отображаемый на 
            физический адрес, определен динамически, например с помощью
            протокола IPv4 ARP или IPv6 Neighbor Discovery. Тип static(4) 
            указывает, что отображение задано статически. Оба типа 
            обеспечивают отображение для других адресов элемента.

            Тип local(5) указывает, что отображение обеспечено для адреса
            интерфейса данного элемента.

            Поскольку записи этой таблицы обычно не постоянны, при записи
            в этот объект элементу НЕ СЛЕДУЕТ записывать его в 
            энергонезависимое хранилище."
    DEFVAL { static }
    ::= { ipNetToPhysicalEntry 6 }

ipNetToPhysicalState OBJECT-TYPE
    SYNTAX     INTEGER {
                     reachable(1), -- подтвержденная доступность

                     stale(2),     -- неподтвержденная доступность

                     delay(3),     -- ожидание подтверждения 
                                   -- доступности перед переходом
                                   -- в состояние probe

                     probe(4),     -- активная проверка

                     invalid(5),   -- недействительное отображение

                     unknown(6),   -- состояние не определено по 
                                   -- какой-либо причине

                     incomplete(7) -- будет выполнено преобразование
                                   -- адреса.
                    }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Состояние Neighbor Unreachability Detection для интерфейса 
            при использовании этой записи. Если  Neighbor
            Unreachability Detection не используется (например, для
            IPv4), объект имеет значение unknown(6)."
    REFERENCE "RFC 2461"
    ::= { ipNetToPhysicalEntry 7 }

ipNetToPhysicalRowStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Статус этой концептуальной строки.

            RowStatus TC требует, чтобы этот раздел DESCRIPTION указывал,
            при каких обстоятельствах можно изменять другие объекты в этой
            строке. Значение этого объекта не влияет на возможность
            изменения других концептуальных объектов в строке.

            Концептуальная строка не может быть активна, пока не 
            установлен объект ipNetToPhysicalPhysAddress.

            Отметим, что при установке ipNetToPhysicalType invalid,
            управляемый узел может удалить запись независимо от
            состояния этого объекта."
    ::= { ipNetToPhysicalEntry 8 }

--
-- Таблица индексов IPv6 Scope Zone
--

ipv6ScopeZoneIndexTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Ipv6ScopeZoneIndexEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица используется для описания зоны действия групповых 
            и индивидуальных адресов IPv6.

            Для объектов, использующих имена вместо адресов, имена 
            выбраны так, чтобы они совпадали с именами в архитектуре IPv6."
    REFERENCE "Параграф 2.7 в RFC 4291"
    ::= { ip 36 }

ipv6ScopeZoneIndexEntry OBJECT-TYPE
    SYNTAX     Ipv6ScopeZoneIndexEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Каждая запись содержит список идентификаторов областей 
            действия для данного интерфейса."
    INDEX { ipv6ScopeZoneIndexIfIndex }
    ::= { ipv6ScopeZoneIndexTable 1 }

Ipv6ScopeZoneIndexEntry ::= SEQUENCE {
        ipv6ScopeZoneIndexIfIndex            InterfaceIndex,
        ipv6ScopeZoneIndexLinkLocal          InetZoneIndex,
        ipv6ScopeZoneIndex3                  InetZoneIndex,
        ipv6ScopeZoneIndexAdminLocal         InetZoneIndex,
        ipv6ScopeZoneIndexSiteLocal          InetZoneIndex,
        ipv6ScopeZoneIndex6                  InetZoneIndex,
        ipv6ScopeZoneIndex7                  InetZoneIndex,
        ipv6ScopeZoneIndexOrganizationLocal  InetZoneIndex,
        ipv6ScopeZoneIndex9                  InetZoneIndex,
        ipv6ScopeZoneIndexA                  InetZoneIndex,
        ipv6ScopeZoneIndexB                  InetZoneIndex,
        ipv6ScopeZoneIndexC                  InetZoneIndex,
        ipv6ScopeZoneIndexD                  InetZoneIndex
    }

ipv6ScopeZoneIndexIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Значение индекса, однозначно указывающее интерфейс, к
            которому относится область действия. Интерфейс, указанный
            конкретным индексом, совпадает с интерфейсом, указанным
            ifIndex в базе IF-MIB."
    ::= { ipv6ScopeZoneIndexEntry 1 }

ipv6ScopeZoneIndexLinkLocal OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия link-local для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 2 }

ipv6ScopeZoneIndex3 OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия 3 для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 3 }

ipv6ScopeZoneIndexAdminLocal OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия admin-local для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 4 }

ipv6ScopeZoneIndexSiteLocal OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия site-local для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 5 }

ipv6ScopeZoneIndex6 OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия 6 для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 6 }

ipv6ScopeZoneIndex7 OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия 7 для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 7 }

ipv6ScopeZoneIndexOrganizationLocal OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия organization-local 
            для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 8 }

ipv6ScopeZoneIndex9 OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия 9 для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 9 }

ipv6ScopeZoneIndexA OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия A для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 10 }

ipv6ScopeZoneIndexB OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия B для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 11 }

ipv6ScopeZoneIndexC OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия C для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 12 }

ipv6ScopeZoneIndexD OBJECT-TYPE
    SYNTAX     InetZoneIndex
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индекс зоны области действия D для интерфейса."
    ::= { ipv6ScopeZoneIndexEntry 13 }

--
-- Таблица Default Router
-- Таблица указывает принятые по умолчанию маршрутизаторы.
-- Дополнительная информация приведена в MIB маршрутизации
--

ipDefaultRouterTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpDefaultRouterEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица, используемая для описания принятых по умолчанию
            маршрутизаторов, известных данному элементу."
    ::= { ip 37 }

ipDefaultRouterEntry OBJECT-TYPE
    SYNTAX     IpDefaultRouterEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Каждая запись содержит сведения о принятом по умолчанию
            маршрутизаторе, известном данному элементу."
    INDEX {ipDefaultRouterAddressType, ipDefaultRouterAddress,
           ipDefaultRouterIfIndex}
    ::= { ipDefaultRouterTable 1 }

IpDefaultRouterEntry ::= SEQUENCE {
        ipDefaultRouterAddressType  InetAddressType,
        ipDefaultRouterAddress      InetAddress,
        ipDefaultRouterIfIndex      InterfaceIndex,
        ipDefaultRouterLifetime     Unsigned32,
        ipDefaultRouterPreference   INTEGER
    }

ipDefaultRouterAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Тип адреса для строки."
    ::= { ipDefaultRouterEntry 1 }

ipDefaultRouterAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "IP-адрес принятого по умолчанию маршрутизатора, 
            представленного строкой. Тп адреса указан в 
            ipDefaultRouterAddressType.

            Разработчикам следует понимать, что при размере 
            ipAddressAddr более 115 OID в экземплярах
            столбцов этой строки будут иметь более 128 субидентификаторов
            и доступ к ним с помощью SNMPv1, SNMPv2c или SNMPv3
            будет невозможен"
    ::= { ipDefaultRouterEntry 2 }

ipDefaultRouterIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Индекс, однозначно указывающий интерфейс, через который 
            доступен маршрутизатор. Интерфейс, указанный конкретным
            значением индекса совпадает с интерфейсом, указанным
            этим же значением ifIndex в базе IF-MIB."
    ::= { ipDefaultRouterEntry 3 }

ipDefaultRouterLifetime OBJECT-TYPE
    SYNTAX     Unsigned32 (0..65535)
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Оставшееся число секунд применения данного маршрутизатора
            по умолчанию. Нулевое значение говорит, что маршрутизатор
            больше не применяется по умолчанию. Вопрос удаления таких
            записей из таблицы определяет реализация MIB.

            Для IPv6 значение следует извлекать из сообщений с анонсами
            маршрутизаторов."
    REFERENCE "Для IPv6 RFC 2462, параграфы 4.2 и 6.3.4"
    ::= { ipDefaultRouterEntry 4 }

ipDefaultRouterPreference OBJECT-TYPE
    SYNTAX     INTEGER {
                     reserved (-2),
                     low (-1),
                     medium (0),
                     high (1)
                    }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Индикация предпочтения данного маршрутизатора для
            использования по умолчанию в Default Router
            Preferences. Трактовка значения как 2-битового целого
            числа без знака обеспечивает арифметическое сравнение.

            Для маршрутизаторов IPv4 или IPv6, не использующих обновленный
            формате анонсирования маршрутизаторов, объект имеет значение
            medium (0)."
    REFERENCE "RFC 4291, параграф 2.1"
    ::= { ipDefaultRouterEntry 5 }

--
-- Конфигурационные данные для создания анонсов маршрутизаторов
--

ipv6RouterAdvertSpinLock OBJECT-TYPE
    SYNTAX     TestAndIncr
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Консультативная блокировка, которая позволяет взаимодействующим 
            менеджерам SNMP координировать операции установки или изменения
            записей в этой таблице.

            Для использования блокировки при координации операций установки
            менеджеру сначала следует получить ipv6RouterAdvertSpinLock, 
            затемопределить строку для создания или изменения. В заключение 
            следует ввести подходящую команду установки (set), включающую
            найденное значение ipv6RouterAdvertSpinLock. Если другой менеджер 
            в то же время изменил таблицу, значение ipv6RouterAdvertSpinLock 
            изменится и создание завершится отказом по причине некорректности 
            значения ipv6RouterAdvertSpinLock. Предлагается (но не требуется) 
            использовать ipv6RouterAdvertSpinLock в качестве первой привязки 
            переменной (var) для каждого набора объектов, представляющего 
            «строку» в PDU."
    ::= { ip 38 }

ipv6RouterAdvertTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Ipv6RouterAdvertEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица со сведениями для создания анонсов маршрутизаторов."
    ::= { ip 39 }

ipv6RouterAdvertEntry OBJECT-TYPE
    SYNTAX     Ipv6RouterAdvertEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Запись таблицы со сведениями для анонсов маршрутизаторов.

            Информация в таблице является постоянной и при записи объектов
            в таблицу СЛЕДУЕТ сохранять изменения в энергонезависимой
            памяти."
    INDEX { ipv6RouterAdvertIfIndex }
    ::= { ipv6RouterAdvertTable 1 }

Ipv6RouterAdvertEntry ::= SEQUENCE {
        ipv6RouterAdvertIfIndex          InterfaceIndex,
        ipv6RouterAdvertSendAdverts      TruthValue,
        ipv6RouterAdvertMaxInterval      Unsigned32,
        ipv6RouterAdvertMinInterval      Unsigned32,
        ipv6RouterAdvertManagedFlag      TruthValue,
        ipv6RouterAdvertOtherConfigFlag  TruthValue,
        ipv6RouterAdvertLinkMTU          Unsigned32,
        ipv6RouterAdvertReachableTime    Unsigned32,
        ipv6RouterAdvertRetransmitTime   Unsigned32,
        ipv6RouterAdvertCurHopLimit      Unsigned32,
        ipv6RouterAdvertDefaultLifetime  Unsigned32,
        ipv6RouterAdvertRowStatus        RowStatus
    }

ipv6RouterAdvertIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Индекс, однозначно указывающий интерфейс, через который будут
            передаваться анонсы маршрутизаторов на основе этих сведений.
            Указанный конкретным индексом интерфейс совпадает с
            интерфейсом, указанным в ifIndex базы IF-MIB."
    ::= { ipv6RouterAdvertEntry 1 }

ipv6RouterAdvertSendAdverts OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Флаг, управляющий передачей маршрутизатором периодических 
            анонсов и откликами на запрос маршрутизатора на данном
            интерфейсе."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { false }
    ::= { ipv6RouterAdvertEntry 2 }

ipv6RouterAdvertMaxInterval OBJECT-TYPE
    SYNTAX     Unsigned32 (4..1800)
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Максимальное время между передачей незапрошенных анонсов
            маршрутизатора на этом интерфейсе."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { 600 }
    ::= { ipv6RouterAdvertEntry 3 }

ipv6RouterAdvertMinInterval OBJECT-TYPE
    SYNTAX     Unsigned32 (3..1350)
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Минимальное время между передачей незапрошенных анонсов
            маршрутизатора на этом интерфейсе.

            По умолчанию установлено 0,33 * ipv6RouterAdvertMaxInterval, 
            но при малом значении ipv6RouterAdvertMaxInterval,
            значение этого параметра будет не меньше 3."
    REFERENCE "RFC 2461, параграф 6.2.1"
    ::= { ipv6RouterAdvertEntry 4 }

ipv6RouterAdvertManagedFlag OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение true/false для поля флага Managed address
            configuration в анонсах маршрутиазтоа с этого интерфейса."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { false }
    ::= { ipv6RouterAdvertEntry 5 }

ipv6RouterAdvertOtherConfigFlag OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение true/false для поля флага Other stateful
            configuration в анонсах маршрутиазтоа с этого интерфейса."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { false }
    ::= { ipv6RouterAdvertEntry 6 }

ipv6RouterAdvertLinkMTU OBJECT-TYPE
    SYNTAX     Unsigned32
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение, помещаемое в опции MTU, передаваемые маршрутизатором
            через этот интерфейс.

            Нулевое значение указывает отсутствие опций MTU."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { 0 }
    ::= { ipv6RouterAdvertEntry 7 }

ipv6RouterAdvertReachableTime OBJECT-TYPE
    SYNTAX     Unsigned32 (0..3600000)
    UNITS      "milliseconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение, помещаемое в поле Reachable time анонсов 
            маршрутизатора, передаваемых с этого интерфейса.

            Нулевое значение указывает отсутствие значения Reachable
            time в анонсе."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { 0 }
    ::= { ipv6RouterAdvertEntry 8 }

ipv6RouterAdvertRetransmitTime OBJECT-TYPE
    SYNTAX     Unsigned32
    UNITS      "milliseconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение, помещаемое в поле Retransmit time анонсов 
            маршрутизатора с этого интерфейса.

            Нулевое значение указывает отсутствие значения Retransmit
            time в анонсе."
    REFERENCE "RFC 2461, параграф 6.2.1"
    DEFVAL { 0 }
    ::= { ipv6RouterAdvertEntry 9 }

ipv6RouterAdvertCurHopLimit OBJECT-TYPE
    SYNTAX     Unsigned32 (0..255)
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Принятое по умолчанию значение поля curHopLimit в анонсах
            маршрутизатора с этого интерфейса. Здесь следует указывать
            текущий диаметр Internet. Текущий диаметр можно узнать на
            странице IANA (www.iana.org). 

            Нулевое значение указывает отсутствие значения curHopLimit
            в анонсе."
    REFERENCE "RFC 2461, параграф 6.2.1"
    ::= { ipv6RouterAdvertEntry 10 }

ipv6RouterAdvertDefaultLifetime OBJECT-TYPE
    SYNTAX     Unsigned32 (0|4..9000)
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Значение, помещаемое в поле Router lifetime передаваемых
            с интерфейса анонсов маршрутизатора. ДОЛЖНО устанавливаться
            значение 0 или значение из интервала 
            ipv6RouterAdvertMaxInterval - 9000 секунд.

            Нулевое значение говорит, что маршрутизатор не является
            принятым по умолчанию.

            По умолчанию устанавливается 3 * ipv6RouterAdvertMaxInterval."
    REFERENCE "RFC 2461, параграф 6.2.1"
    ::= { ipv6RouterAdvertEntry 11 }

ipv6RouterAdvertRowStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "Статус данной концептуальной строки.

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

            RowStatus TC требует, чтобы этот раздел DESCRIPTION указывал,
            при каких обстоятельствах можно изменять другие объекты в этой
            строке. Значение этого объекта не влияет на возможность
            изменения других концептуальных объектов в строке.
    ::= { ipv6RouterAdvertEntry 12 }

--
-- Раздел ICMP
--

icmp     OBJECT IDENTIFIER ::= { mib-2 5 }

--
-- Счетчики, не связанные с сообщениями ICMP
--

-- Эти идентификаторы объектов являются резервными, поскольку они
-- применялись в ранних версиях модуля MIB. Теоретически OID не
-- выделяются без публикации RFC со спецификацией, однако некоторые
-- компании предоставляют код на основе ранних версий MIB.
-- ::= { icmp 27 }
-- ::= { icmp 28 }

icmpStatsTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IcmpStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица базовых счетчиков ICMP системного уровня."
    ::= { icmp 29 }

icmpStatsEntry OBJECT-TYPE
    SYNTAX     IcmpStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Концептуальная строка в icmpStatsTable."
    INDEX    { icmpStatsIPVersion }
    ::= { icmpStatsTable 1 }

IcmpStatsEntry ::= SEQUENCE {
        icmpStatsIPVersion  InetVersion,
        icmpStatsInMsgs     Counter32,
        icmpStatsInErrors   Counter32,
        icmpStatsOutMsgs    Counter32,
        icmpStatsOutErrors  Counter32
    }

icmpStatsIPVersion OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Статистика версий IP."
    ::= { icmpStatsEntry 1 }

icmpStatsInMsgs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Общее число сообщений ICMP, полученных элементом.
            Счетчик включает все, что учитывается в icmpStatsInErrors."
    ::= { icmpStatsEntry 2 }

icmpStatsInErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число полученных элементом сообщений ICMP, отнесенных 
            к связанным с ICMP ошибкам (неверная контрольная сумма ICMP,
            некорректный размер и т. п.)."
    ::= { icmpStatsEntry 3 }

icmpStatsOutMsgs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число сообщений ICMP, которые элемент пытался передать. 
            Счетчик включает все, что учитывается в icmpStatsOutErrors."
    ::= { icmpStatsEntry 4 }

icmpStatsOutErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число сообщений ICMP, которые элемент не передал по причине
            проблем, обнаруженных в ICMP, таких как нехватка буферов.
            Не следует учитывать здесь ошибки за пределами уровня ICMP,
            такие как отсутствие маршрута на уровне IP. В некоторых
            реализациях может не быть типов ошибок для этого счетчика."
    ::= { icmpStatsEntry 5 }

--
-- Счетчики ICMP по версиям и сообщениям
--

icmpMsgStatsTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IcmpMsgStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Таблица счетчиков ICMP системного уровня по версиям и сообщениям."
    ::= { icmp 30 }

icmpMsgStatsEntry OBJECT-TYPE
    SYNTAX     IcmpMsgStatsEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Концептуальная строка icmpMsgStatsTable.

            Системе следует учитывать все типы ICMP, включая 
            неподдерживаемые. Однако данную строка не требуется 
            создавать, пока не будет обработано собщение 
            соответствующего типа, т. е. строка для icmpMsgStatsType=X 
            МОЖЕТ быть создана раньшеи ДОЛЖНА создаваться после приема
            или передачи сообщения с Type=X. После приема или отправки 
            последующих сообщений с Type=X соответствующая строка 
            должна инкрементироваться."
    INDEX { icmpMsgStatsIPVersion, icmpMsgStatsType }
    ::= { icmpMsgStatsTable 1 }

IcmpMsgStatsEntry ::= SEQUENCE {
        icmpMsgStatsIPVersion  InetVersion,
        icmpMsgStatsType       Integer32,
        icmpMsgStatsInPkts     Counter32,
        icmpMsgStatsOutPkts    Counter32
    }

icmpMsgStatsIPVersion OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Версия IP, к которой относится статистика."
    ::= { icmpMsgStatsEntry 1 }

icmpMsgStatsType OBJECT-TYPE
    SYNTAX     Integer32 (0..255)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Тип ICMP, учитываемый данной строкой.

            Типы ICMP определяются типом адреса."
    REFERENCE "http://www.iana.org/assignments/icmp-parameters  и
               http://www.iana.org/assignments/icmpv6-parameters" 
    ::= { icmpMsgStatsEntry 2 }

icmpMsgStatsInPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число входящих пакетов для данного AF и типа."
    ::= { icmpMsgStatsEntry 3 }

icmpMsgStatsOutPkts OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "Число исходящих пакетов для данного AF и типа ."
    ::= { icmpMsgStatsEntry 4 }
--
-- conformance information
--

ipMIBConformance OBJECT IDENTIFIER ::= { ipMIB 2 }

ipMIBCompliances OBJECT IDENTIFIER ::= { ipMIBConformance 1 }
ipMIBGroups      OBJECT IDENTIFIER ::= { ipMIBConformance 2 }

-- Заявления о соответствии
ipMIBCompliance2 MODULE-COMPLIANCE
    STATUS     current
    DESCRIPTION
            "Заявления о соответствии для систем, реализующих IPv4 или IPv6.

            Имеется множество объектов INDEX, которые не могут бить
            представлены в форме OBJECT в SMIv2, но для которых есть
            приведенные ниже требования к соответствию, выражаемые в
            OBJECT в данном описании:
            -- OBJECT        ipSystemStatsIPVersion
            -- SYNTAX        InetVersion {ipv4(1), ipv6(2)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь IPv4 и IPv6.
            --
            -- OBJECT        ipIfStatsIPVersion
            -- SYNTAX        InetVersion {ipv4(1), ipv6(2)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь IPv4 и IPv6.
            --
            -- OBJECT        icmpStatsIPVersion
            -- SYNTAX        InetVersion {ipv4(1), ipv6(2)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь IPv4 и IPv6.
            --
            -- OBJECT        icmpMsgStatsIPVersion
            -- SYNTAX        InetVersion {ipv4(1), ipv6(2)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь IPv4 и IPv6.
            --
            -- OBJECT        ipAddressPrefixType
            -- SYNTAX        InetAddressType {ipv4(1), ipv6(2)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь IPv4 и IPv6.
            --
            -- OBJECT        ipAddressPrefixPrefix
            -- SYNTAX        InetAddress (Size(4 | 16))
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных 
            --     адресов IPv4 и IPv6 размером 4 или 16 байтов.
            --
            -- OBJECT        ipAddressAddrType
            -- SYNTAX        InetAddressType {ipv4(1), ipv6(2),
            --                                ipv4z(3), ipv6z(4)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6.
            --
            -- OBJECT        ipAddressAddr
            -- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6 размером
            --     4, 8, 16 или 20 байтов.
            --
            -- OBJECT        ipNetToPhysicalNetAddressType
            -- SYNTAX        InetAddressType {ipv4(1), ipv6(2),
            --                                ipv4z(3), ipv6z(4)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6.
            --
            -- OBJECT        ipNetToPhysicalNetAddress
            -- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6 размером
            --     4, 8, 16 или 20 байтов.
            --
            -- OBJECT        ipDefaultRouterAddressType
            -- SYNTAX        InetAddressType {ipv4(1), ipv6(2),
            --                                ipv4z(3), ipv6z(4)}
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6.
            --
            -- OBJECT        ipDefaultRouterAddress
            -- SYNTAX        InetAddress (Size(4 | 8 | 16 | 20))
            -- DESCRIPTION
            --     Эта база MIB требует поддержки лишь глобальных
            --     и неглобальных адресов IPv4 и IPv6 размером
            --     4, 8, 16 или 20 байтов.

    MODULE — данный модуль

    MANDATORY-GROUPS { ipSystemStatsGroup,   ipAddressGroup,
                       ipNetToPhysicalGroup, ipDefaultRouterGroup,
                       icmpStatsGroup }

    GROUP ipSystemStatsHCOctetGroup
    DESCRIPTION
           "Эта группа обязательна для систем с агрегатной пропускной
            способностью выше 20MB. Включение группы не означает отказа
            от 32-битовых вариантов объектов."

    GROUP ipSystemStatsHCPacketGroup
    DESCRIPTION
           "Эта группа обязательна для систем с агрегатной пропускной
            способностью выше 650MB. Включение группы не означает отказа
            от 32-битовых вариантов объектов."

    GROUP ipIfStatsGroup
    DESCRIPTION
           "Эта группа является необязательной для любой системы."

    GROUP ipIfStatsHCOctetGroup
    DESCRIPTION
           "Эта группа обязательна для систем, включающих ipIfStatsGroup
            и каналы с пропускной способностью выше 20MB. Включение группы 
            не означает отказа от 32-битовых вариантов объектов."

    GROUP ipIfStatsHCPacketGroup
    DESCRIPTION
           "Эта группа обязательна для систем, включающих ipIfStatsGroup
            и каналы с пропускной способностью выше 650MB. Включение 
            группы не означает отказа от 32-битовых вариантов объектов."

    GROUP ipv4GeneralGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4."

    GROUP ipv4IfGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4."

    GROUP ipv4SystemStatsGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4."

    GROUP ipv4SystemStatsHCPacketGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4 с 
            агрегатной пропускной  способностью выше 650MB. Включение 
            группы не означает отказа от 32-битовых вариантов объектов."

    GROUP ipv4IfStatsGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4 and
            including the ipIfStatsGroup."

    GROUP ipv4IfStatsHCPacketGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv4 и
            включающих ipIfStatsHCPacketGroup. Включение группы
            не означает отказа от 32-битовых вариантов объектов."

    GROUP ipv6GeneralGroup2
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv6."

    GROUP ipv6IfGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv6."

    GROUP ipAddressPrefixGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv6."

    GROUP ipv6ScopeGroup
    DESCRIPTION
           "Эта группа обязательна для систем, поддерживающих IPv6."

    GROUP ipv6RouterAdvertGroup
    DESCRIPTION
           " Эта группа обязательна для маршрутизаторов IPv6."

    GROUP ipLastChangeGroup
    DESCRIPTION
           "Эта группа обязательна для всех агентов."

    OBJECT     ipv6IpForwarding
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6IpDefaultHopLimit
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv4InterfaceEnableStatus
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6InterfaceEnableStatus
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6InterfaceForwarding
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipAddressSpinLock
    MIN-ACCESS not-accessible
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект, однако при
            поддержке записи для других объектов из ipAddressGroup 
            СЛЕДУЕТ разрешать запись и в этот объект."

    OBJECT     ipAddressIfIndex
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipAddressType
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipAddressStatus
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipAddressRowStatus
    SYNTAX     RowStatus { active(1) }
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipAddressStorageType
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов.

            Если для объекта разрешена запись или создание, от него не
            требуется установка readOnly, permanent или nonVolatile."

    OBJECT     ipNetToPhysicalPhysAddress
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipNetToPhysicalType
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    OBJECT     ipv6RouterAdvertSpinLock
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект, однако при
            поддержке записи для других объектов из ipv6RouterAdvertGroup 
            СЛЕДУЕТ разрешать запись и в этот объект."

    OBJECT     ipv6RouterAdvertSendAdverts
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertMaxInterval
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertMinInterval
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertManagedFlag
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertOtherConfigFlag
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertLinkMTU
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertReachableTime
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertRetransmitTime
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertCurHopLimit
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertDefaultLifetime
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись в этот объект."

    OBJECT     ipv6RouterAdvertRowStatus
    MIN-ACCESS read-only
    DESCRIPTION
           "Агент не обязан разрешать запись или создание таких объектов."

    ::= { ipMIBCompliances 2 }

-- units of conformance

ipv4GeneralGroup OBJECT-GROUP
    OBJECTS   { ipForwarding, ipDefaultTTL, ipReasmTimeout }
    STATUS     current
    DESCRIPTION
           "Группа связанных с IPv4 объектов для базового управления 
            элементами IPv4."
    ::= { ipMIBGroups 3 }

ipv4IfGroup OBJECT-GROUP
    OBJECTS   { ipv4InterfaceReasmMaxSize, ipv4InterfaceEnableStatus,
                ipv4InterfaceRetransmitTime }
    STATUS     current
    DESCRIPTION
           "Группа связанных с IPv4 объектов для базового управления 
            интерфейсами IPv4."
    ::= { ipMIBGroups 4 }

ipv6GeneralGroup2 OBJECT-GROUP
    OBJECTS { ipv6IpForwarding, ipv6IpDefaultHopLimit }
    STATUS     current
    DESCRIPTION
           "Группа связанных с IPv6 объектов для базового управления 
            элементами IPv6."
    ::= { ipMIBGroups 5 }

ipv6IfGroup OBJECT-GROUP
    OBJECTS   { ipv6InterfaceReasmMaxSize,   ipv6InterfaceIdentifier,
                ipv6InterfaceEnableStatus,   ipv6InterfaceReachableTime,
                ipv6InterfaceRetransmitTime, ipv6InterfaceForwarding }
    STATUS     current
    DESCRIPTION
           "Группа связанных с IPv6 объектов для базового управления 
            интерфейсами IPv6."
    ::= { ipMIBGroups 6 }

ipLastChangeGroup OBJECT-GROUP
    OBJECTS   { ipv4InterfaceTableLastChange,
                ipv6InterfaceTableLastChange,
                ipIfStatsTableLastChange }
    STATUS     current
    DESCRIPTION
           "Последние изменения объектов, связанных с этой базой MIB. 
            Объекты являются необязательными для всех агентов. Их СЛЕДУЕТ
            реализовать в агентах, где можно задать подходящие значения.
            Так, где это невозможно, например, при расщеплении таблиц
            между субагентами с использованием AgentX, агенту НЕДОПУСТИМО
            реализовать эти объекты с возвратом некорректных или 
            статических значений."
    ::= { ipMIBGroups 7 }

ipSystemStatsGroup OBJECT-GROUP
    OBJECTS   { ipSystemStatsInReceives,
                ipSystemStatsInOctets,
                ipSystemStatsInHdrErrors,
                ipSystemStatsInNoRoutes,
                ipSystemStatsInAddrErrors,
                ipSystemStatsInUnknownProtos,
                ipSystemStatsInTruncatedPkts,
                ipSystemStatsInForwDatagrams,
                ipSystemStatsReasmReqds,
                ipSystemStatsReasmOKs,
                ipSystemStatsReasmFails,
                ipSystemStatsInDiscards,
                ipSystemStatsInDelivers,
                ipSystemStatsOutRequests,
                ipSystemStatsOutNoRoutes,
                ipSystemStatsOutForwDatagrams,
                ipSystemStatsOutDiscards,
                ipSystemStatsOutFragReqds,
                ipSystemStatsOutFragOKs,
                ipSystemStatsOutFragFails,
                ipSystemStatsOutFragCreates,
                ipSystemStatsOutTransmits,
                ipSystemStatsOutOctets,
                ipSystemStatsInMcastPkts,
                ipSystemStatsInMcastOctets,
                ipSystemStatsOutMcastPkts,
                ipSystemStatsOutMcastOctets,
                ipSystemStatsDiscontinuityTime,
                ipSystemStatsRefreshRate }
    STATUS     current
    DESCRIPTION
           "Статистика IP системного уровня."
    ::= { ipMIBGroups 8 }

ipv4SystemStatsGroup OBJECT-GROUP
    OBJECTS   { ipSystemStatsInBcastPkts, ipSystemStatsOutBcastPkts }
    STATUS     current
    DESCRIPTION
           "Статистика IPv4 системного уровня."
    ::= { ipMIBGroups 9 }

ipSystemStatsHCOctetGroup OBJECT-GROUP
    OBJECTS   { ipSystemStatsHCInOctets,
                ipSystemStatsHCOutOctets,
                ipSystemStatsHCInMcastOctets,
                ipSystemStatsHCOutMcastOctets
}

    STATUS     current
    DESCRIPTION
           "Статистика IP системного уровня для систем, где стандартные
            счетчики октетов могут заполняться в течение 1 часа."
    ::= { ipMIBGroups 10 }

ipSystemStatsHCPacketGroup OBJECT-GROUP
    OBJECTS   { ipSystemStatsHCInReceives,
                ipSystemStatsHCInForwDatagrams,
                ipSystemStatsHCInDelivers,
                ipSystemStatsHCOutRequests,
                ipSystemStatsHCOutForwDatagrams,
                ipSystemStatsHCOutTransmits,
                ipSystemStatsHCInMcastPkts,
                ipSystemStatsHCOutMcastPkts
}
    STATUS     current
    DESCRIPTION
           "Статистика IP системного уровня для систем, где стандартные
            счетчики пакетов могут заполняться в течение 1 часа."
    ::= { ipMIBGroups 11 }

ipv4SystemStatsHCPacketGroup OBJECT-GROUP
    OBJECTS   { ipSystemStatsHCInBcastPkts,
                ipSystemStatsHCOutBcastPkts }
    STATUS     current
    DESCRIPTION
           "Статистика системного уровня для систем IPv4, где стандартные
            счетчики пакетов могут заполняться в течение 1 часа."
    ::= { ipMIBGroups 12 }

ipIfStatsGroup OBJECT-GROUP
    OBJECTS   { ipIfStatsInReceives,        ipIfStatsInOctets,
                ipIfStatsInHdrErrors,       ipIfStatsInNoRoutes,
                ipIfStatsInAddrErrors,      ipIfStatsInUnknownProtos,
                ipIfStatsInTruncatedPkts,   ipIfStatsInForwDatagrams,
                ipIfStatsReasmReqds,        ipIfStatsReasmOKs,
                ipIfStatsReasmFails,        ipIfStatsInDiscards,
                ipIfStatsInDelivers,        ipIfStatsOutRequests,
                ipIfStatsOutForwDatagrams,  ipIfStatsOutDiscards,
                ipIfStatsOutFragReqds,      ipIfStatsOutFragOKs,
                ipIfStatsOutFragFails,      ipIfStatsOutFragCreates,
                ipIfStatsOutTransmits,      ipIfStatsOutOctets,
                ipIfStatsInMcastPkts,       ipIfStatsInMcastOctets,
                ipIfStatsOutMcastPkts,      ipIfStatsOutMcastOctets,
                ipIfStatsDiscontinuityTime, ipIfStatsRefreshRate }
    STATUS     current
    DESCRIPTION
           "Статистика IP на уровне интерфейса."
    ::= { ipMIBGroups 13 }

ipv4IfStatsGroup OBJECT-GROUP
    OBJECTS   { ipIfStatsInBcastPkts, ipIfStatsOutBcastPkts }
    STATUS     current
    DESCRIPTION
           "Статистика IP на уровне интерфейса IPv4."
    ::= { ipMIBGroups 14 }

ipIfStatsHCOctetGroup OBJECT-GROUP
    OBJECTS   { ipIfStatsHCInOctets,      ipIfStatsHCOutOctets,
                ipIfStatsHCInMcastOctets, ipIfStatsHCOutMcastOctets }
    STATUS     current
    DESCRIPTION
           "Статистика IP на уровне интерфейса для системы с интерфейсами
            где стандартные счетчики октетов могут заполняться в течение 
            1 часа."
    ::= { ipMIBGroups 15 }

ipIfStatsHCPacketGroup OBJECT-GROUP
    OBJECTS   { ipIfStatsHCInReceives,       ipIfStatsHCInForwDatagrams,
                ipIfStatsHCInDelivers,       ipIfStatsHCOutRequests,
                ipIfStatsHCOutForwDatagrams, ipIfStatsHCOutTransmits,
                ipIfStatsHCInMcastPkts,      ipIfStatsHCOutMcastPkts }
    STATUS     current
    DESCRIPTION
           "Статистика IP на уровне интерфейса для системы с интерфейсами
            где стандартные счетчики пакетов могут заполняться в течение 
            1 часа."
    ::= { ipMIBGroups 16 }

ipv4IfStatsHCPacketGroup OBJECT-GROUP
    OBJECTS   { ipIfStatsHCInBcastPkts, ipIfStatsHCOutBcastPkts }
    STATUS     current
    DESCRIPTION
           "Статистика IP на уровне интерфейса для системы с интерфейсами
            IPv4 где стандартные счетчики пакетов могут заполняться в 
            течение 1 часа."
    ::= { ipMIBGroups 17 }

ipAddressPrefixGroup OBJECT-GROUP
    OBJECTS   { ipAddressPrefixOrigin,
                ipAddressPrefixOnLinkFlag,
                ipAddressPrefixAutonomousFlag,
                ipAddressPrefixAdvPreferredLifetime,
                ipAddressPrefixAdvValidLifetime }
    STATUS     current
    DESCRIPTION
           "Группа объектов с информацией об адресных префиксах, 
            используемых узлом."
    ::= { ipMIBGroups 18 }

ipAddressGroup OBJECT-GROUP
    OBJECTS   { ipAddressSpinLock,  ipAddressIfIndex,
                ipAddressType,      ipAddressPrefix,
                ipAddressOrigin,    ipAddressStatus,
                ipAddressCreated,   ipAddressLastChanged,
                ipAddressRowStatus, ipAddressStorageType }
    STATUS     current
    DESCRIPTION
           "Группа объектов с информацией об адресах, относящихся
            к интерфейсам данного элемента."
    ::= { ipMIBGroups 19 }

ipNetToPhysicalGroup OBJECT-GROUP
    OBJECTS   { ipNetToPhysicalPhysAddress, ipNetToPhysicalLastUpdated,
                ipNetToPhysicalType,        ipNetToPhysicalState,
                ipNetToPhysicalRowStatus }
    STATUS     current
    DESCRIPTION
           "Группа объектов с информацией о сопоставлении сетевых
            адресов с физическими адресами данного узла."
    ::= { ipMIBGroups 20 }

ipv6ScopeGroup OBJECT-GROUP
    OBJECTS   { ipv6ScopeZoneIndexLinkLocal,
                ipv6ScopeZoneIndex3,
                ipv6ScopeZoneIndexAdminLocal,
                ipv6ScopeZoneIndexSiteLocal,
                ipv6ScopeZoneIndex6,
                ipv6ScopeZoneIndex7,
                ipv6ScopeZoneIndexOrganizationLocal,
                ipv6ScopeZoneIndex9,
                ipv6ScopeZoneIndexA,
                ipv6ScopeZoneIndexB,
                ipv6ScopeZoneIndexC,
                ipv6ScopeZoneIndexD }
    STATUS     current
    DESCRIPTION
           "Группа объектов для управления зонами действия IPv6."
    ::= { ipMIBGroups 21 }

ipDefaultRouterGroup OBJECT-GROUP
    OBJECTS   { ipDefaultRouterLifetime, ipDefaultRouterPreference }
    STATUS     current
    DESCRIPTION
           "Группа объектов с данными о принятых по умолчанию 
            маршрутизаторах, известных данному узлу."
    ::= { ipMIBGroups 22 }

ipv6RouterAdvertGroup OBJECT-GROUP
    OBJECTS   { ipv6RouterAdvertSpinLock,
                ipv6RouterAdvertSendAdverts,
                ipv6RouterAdvertMaxInterval,
                ipv6RouterAdvertMinInterval,
                ipv6RouterAdvertManagedFlag,
                ipv6RouterAdvertOtherConfigFlag,
                ipv6RouterAdvertLinkMTU,
                ipv6RouterAdvertReachableTime,
                ipv6RouterAdvertRetransmitTime,
                ipv6RouterAdvertCurHopLimit,
                ipv6RouterAdvertDefaultLifetime,
                ipv6RouterAdvertRowStatus
}
    STATUS     current
    DESCRIPTION
           "Группа объектов, управляющих информацией, анонсируемой 
            маршрутизаторами IPv6."
    ::= { ipMIBGroups 23 }

icmpStatsGroup OBJECT-GROUP
    OBJECTS   {icmpStatsInMsgs,    icmpStatsInErrors,
               icmpStatsOutMsgs,   icmpStatsOutErrors,
               icmpMsgStatsInPkts, icmpMsgStatsOutPkts }
    STATUS     current
    DESCRIPTION
           "Группа объектов, обеспечивающих статистику ICMP."
    ::= { ipMIBGroups 24 }

--
-- Отмененные объекты
--

ipInReceives OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Общее число полученных от интерфейсов входных дейтаграмм,
            включая содержащие ошибки дейтаграммы.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInRecieves."
    ::= { ip 3 }

ipInHdrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число входящих дейтаграмм, отброшенных из-за ошибок в заголовке
            IPv4, включая контрольную сумму, номер версии, ошибки формата,
            завершение слрока действия (TTL), ошибки при обработке опций и пр.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInHdrErrors."
    ::= { ip 4 }

ipInAddrErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           " Число входящих дейтаграмм, отброшенных из-за несоответствия
            адреса получателя в заголовке IPv4 действительному адресу
            данного элемента. Учитываются недействительные адреса (например,
            0.0.0.0) и адреса неподдерживаемых классов (например, Class E).  
            Для элементов, не являющихся маршрутизаторами IPv4 и не 
            пересылающих дейтаграммы учитываются пакеты, в которых адрес
            получателя не является локальным адресом.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInAddrErrors."
    ::= { ip 5 }

ipForwDatagrams OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число входных дейтаграмм, для которых данный элемент не
            является финальным получателем IPv4 и предпринята попытка
            найти маршрут для пересылки получателю. В элементах, не
            являющихся маршрутизаторами IPv4 этот счетчик включает
            пакеты с Source-Route через данный элемент, для которых
            опция SR была успешно обработана.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInForwDatagrams."
    ::= { ip 6 }

ipInUnknownProtos OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число адресованных данному элементу дейтаграмм, которые были
            приняты, но отброшены из-за неизвестного или неподдерживаемого
            протокола.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInUnknownProtos."
    ::= { ip 7 }

ipInDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число входных дейтаграмм IPv4 для которых не было проблем,
            препятствующих обработке, но они были отброшены (например,
            в результате нехватки буферов). Этот счетчик не включает
            дейтаграммы, отброшенные в ожидании сборки фрагментов.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsInDiscards."
    ::= { ip 8 }

ipInDelivers OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Общее число входных дейтаграмм, доставленных пользовательским
            протоколам IPv4 (включая ICMP).

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsIndelivers."
    ::= { ip 9 }

ipOutRequests OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число дейтаграмм, которые локальные пользовательские протоколы 
            IPv4 (включая ICMP) представили IPv4 с запросом на передачу. 
            Счетчик не включает дейтаграмм, учтенных в ipForwDatagrams.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutRequests."
    ::= { ip 10 }

ipOutDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число входных дейтаграмм IPv4 для которых не было проблем,
            препятствующих передаче, но они были отброшены (например,
            в результате нехватки буферов). Этот счетчик включает
            дейтаграммы, учтенные в ipForwDatagrams, если они 
            соответствуют критериям отбрасывания.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutDiscards."
    ::= { ip 11 }

ipOutNoRoutes OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число дейтаграмм IPv4, отброшенных из-за отсутствия маршрута
            к конечному получателю. Счетчик включает все пакеты, учтенные
            в ipForwDatagrams, которые соответствуют критерию no-route, а
            также дейтаграммы, которые хост не может маршрутизировать из-за
            отказа всех своих маршрутизаторов, принятых по умолчанию.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutNoRoutes."
    ::= { ip 12 }

ipReasmReqds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых фрагментов IPv4, которые нужно собрать в этом
            элементе.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsReasmReqds."
    ::= { ip 14 }

ipReasmOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число успешно собранных дейтаграмм IPv4.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsReasmOKs."
    ::= { ip 15 }

ipReasmFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число отказов алгоритма сборки фрагментов IPv4 (по любой
            причине, включая тайм-аут, ошибки и т. п.). Не обязательно
            учитывать отброшенные фрагменты IPv4, поскольку некоторые
            алгоритмы (в частности, RFC 815) не отслеживают число
            фрагментов, объединяя их при получении.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsReasmFails."
    ::= { ip 16 }

ipFragOKs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число дейтаграмм IPv4, успешно фрагментированных этим элементом.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutFragOKs."
    ::= { ip 17 }

ipFragFails OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число дейтаграмм IPv4, отброшенных в результате того, что 
            их нужно было, но не удалось фрагментировать, например, по
            причине установки флага DF.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutFragFails."
    ::= { ip 18 }

ipFragCreates OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число фрагментов IPv4 созданных в результате фрагментации
            дейтаграмм этим элементом.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipSystemStatsOutFragCreates."
    ::= { ip 19 }

ipRoutingDiscards OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число дейсвительных маршрутных записей, выбранных для
            отбрасывания (например, с целью освобождения буферов).

            Этот объект был определен в IP MIB для предварительных версий 
            IPv6. Он неявно относится лишь к IPv4, но исходные спецификации
            не указывали этого ограничения. Для уточнения спецификаций
            объект был отменен и заменен более четким объектом в 
            IP-FORWARD-MIB."
    ::= { ip 23 }

-- Отмененная таблица адресов IPv4

ipAddrTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpAddrEntry
    MAX-ACCESS not-accessible
    STATUS     deprecated
    DESCRIPTION
           "Таблица адресных данных, относящихся к адресам IPv4 этого объекта.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом ipAddressTable, хотя ряд объектов, 
            не сочтенных полезными, был отброшен, а другие 
            (ipAdEntReasmMaxSize) перенесены в ipv4InterfaceTable."
    ::= { ip 20 }

ipAddrEntry OBJECT-TYPE
    SYNTAX     IpAddrEntry
    MAX-ACCESS not-accessible
    STATUS     deprecated
    DESCRIPTION
           "Адресные данные для одного из адресов IPv4 в этой записи."
    INDEX      { ipAdEntAddr }
    ::= { ipAddrTable 1 }

IpAddrEntry ::= SEQUENCE {
        ipAdEntAddr          IpAddress,
        ipAdEntIfIndex       INTEGER,
        ipAdEntNetMask       IpAddress,
        ipAdEntBcastAddr     INTEGER,
        ipAdEntReasmMaxSize  INTEGER
    }

ipAdEntAddr OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Адрес IPv4, к которому относится информация данной записи."
    ::= { ipAddrEntry 1 }

ipAdEntIfIndex OBJECT-TYPE
    SYNTAX     INTEGER (1..2147483647)
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Индекс, однозначно указывающий интерфейс, к которому применима
            эта запись. Интерфейс, указанный конкретным индексом, совпадает
            с интерфейсом, указанным тем же значением ifIndex в IF-MIB."
    ::= { ipAddrEntry 2 }

ipAdEntNetMask OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Маска подсети, связанная с адресом IPv4 в этой записи. Значение
            маски является адресом IPv4, где все биты номера сети имеют 
            значение 1, а все биты номера хоста - 0."
    ::= { ipAddrEntry 3 }

ipAdEntBcastAddr OBJECT-TYPE
    SYNTAX     INTEGER (0..1)
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Значение младшего бита в широковещательном адресе IPv4,
            применяемом для передачи дейтаграмм в (логический) интерфейс,
            связанный с адресом IPv4 в этой записи. Например, при 
            использовании стандартного широковещательного адреса Internet 
            (только 1) объект имеет значение 1. Это значение применяется
            для широковещания в сети и подсети, используемого элементом
            на этом (логическом) интерфейсе."
    ::= { ipAddrEntry 4 }

ipAdEntReasmMaxSize OBJECT-TYPE
    SYNTAX     INTEGER (0..65535)
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Максимальный размер дейтаграммы IPv4, которую элемент может
            собрать из входящих фрагментов IPv4 на этом интерфейсе."
    ::= { ipAddrEntry 5 }

-- Отмененные таблицы трансляции адресов IPv4 

-- Таблицы Address Translation содержат IpAddress для «физических» 
-- эквивалентов. Некоторые интерфейсы не применяют таблицы трансляции
-- для определения эквивалентов (например, DDN-X.25 использует 
-- алгоритмический метод). Если все интерфейсы относятся к таким типам
-- таблица трансляции будет пустой (0 записей).

ipNetToMediaTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IpNetToMediaEntry
    MAX-ACCESS not-accessible
    STATUS     deprecated
    DESCRIPTION
           "Таблица трансляции IPv4, служащая для сопоставления адресов
            IPv4 с физическими адресами.

            Эта таблица был отменена при добавлении независимой от версии
            таблицы. Заменена таблицей ipNetToPhysicalTable."
    ::= { ip 22 }

ipNetToMediaEntry OBJECT-TYPE
    SYNTAX     IpNetToMediaEntry
    MAX-ACCESS not-accessible
    STATUS     deprecated
    DESCRIPTION
           "Каждая запись сопоставляет одно значение IpAddress с
            «физическим» адресом."
    INDEX       { ipNetToMediaIfIndex,
                  ipNetToMediaNetAddress }
    ::= { ipNetToMediaTable 1 }

IpNetToMediaEntry ::= SEQUENCE {
        ipNetToMediaIfIndex      INTEGER,
        ipNetToMediaPhysAddress  PhysAddress,
        ipNetToMediaNetAddress   IpAddress,
        ipNetToMediaType         INTEGER
    }

ipNetToMediaIfIndex OBJECT-TYPE
    SYNTAX     INTEGER (1..2147483647)
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
           "Интерфейс, с которым связана запись. Интерфейс, указанный
            конкретным индексом, совпадает с интерфейсом, указанным 
            таким же значением ifIndex в IF-MIB.

            Этот объект предшествует правилу, ограничивающему индексы 
            максимальным значением not-accessible, и поэтому продолжает
            использовать значение read-create."
    ::= { ipNetToMediaEntry 1 }

ipNetToMediaPhysAddress OBJECT-TYPE
    SYNTAX     PhysAddress (SIZE(0..65535))
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
           "Зависящий от среды «физический» адрес. Объекту следует 
            возвращать 0 для записей в состоянии incomplete.

            Поскольку записи в этой таблице обычно не являются постоянными,
            при записи в этот объект его не следует сохранять в 
            энергонезависимой памяти. Отметим, что более строгое требование
            не используется, поскольку объект был определен раньше."
    ::= { ipNetToMediaEntry 2 }

ipNetToMediaNetAddress OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
           "IpAddress, соответствующий зависимому от среды адресу.

            Этот объект предшествует правилу, ограничивающему индексы 
            максимальным значением not-accessible, и поэтому продолжает
            использовать значение read-create."
    ::= { ipNetToMediaEntry 3 }

ipNetToMediaType OBJECT-TYPE
    SYNTAX     INTEGER {
                other(1),        -- ничего из нижеперечисленного
                invalid(2),      -- недействительное отображение
                dynamic(3),
                static(4)
            }
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
           "Тип отображения.

            Установка для этого объекта значения invalid(2) делает
            недействительной соответствующую запись ipNetToMediaTable,
            т. е. фактически отвязывает указанный записью интерфейс от
            заданного в ней отображения. Удаление агентом 
            недействительных записей зависит от реализации. Поэтому
            станции управления должны быть готовы к получению табличных
            данных с неиспользуемыми записями. Корректная интерпретация
            таких записей требует проверки соответствующего объекта
            ipNetToMediaType.

            Поскольку записи в этой таблице обычно не являются постоянными,
            при записи в этот объект его не следует сохранять в 
            энергонезависимой памяти. Отметим, что более строгое требование
            не используется, поскольку объект был определен раньше."
    ::= { ipNetToMediaEntry 4 }

-- Отмененная группа ICMP

icmpInMsgs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Общее число сообщений ICMP, полученных элементом. Счетчик
            включается все сообщения, учитываемые в icmpInErrors.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой объектом icmpStatsInMsgs."
    ::= { icmp 1 }

icmpInErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число сообщений ICMP, полученных элементом, которые были
            сочтены ошибками ICMP (контрольная сумма ICMP, размер и пр.).

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой объектом icmpStatsInErrors."
    ::= { icmp 2 }

icmpInDestUnreachs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Destination Unreachable.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 3 }

icmpInTimeExcds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Time Exceeded.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 4 }

icmpInParmProbs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Parameter Problem.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 5 }

icmpInSrcQuenchs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Source Quench.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 6 }

icmpInRedirects OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Redirect.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 7 }

icmpInEchos OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых запросов ICMP Echo.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 8 }

icmpInEchoReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Echo Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 9 }

icmpInTimestamps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых запросов ICMP Timestamp.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 10 }

icmpInTimestampReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Timestamp Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 11 }

icmpInAddrMasks OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Address Mask Request.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 12 }

icmpInAddrMaskReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число принятых сообщений ICMP Address Mask Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 13 }

icmpOutMsgs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Общее число сообщений ICMP, которые этот элемент пытался
            передать. Счетчик включает все сообщения, учитываемые в
            icmpOutErrors.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом icmpStatsOutMsgs."
    ::= { icmp 14 }

icmpOutErrors OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число сообщений ICMP, которые не были переданы элементом по 
            причинам, связанным с проблемами ICMP, таким как нехватка
            буферов. Не следует включать ошибки за пределами уровня ICMP,
            такие как неспособность уровня IP маршрутизировать дейтаграмму.
            В некоторых реализациях может не быть ошибок, учитываемых этим
            счетчиком.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен объектом icmpStatsOutErrors."
    ::= { icmp 15 }

icmpOutDestUnreachs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Destination Unreachable.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 16 }

icmpOutTimeExcds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Time Exceeded.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 17 }

icmpOutParmProbs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Parameter Problem.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 18 }

icmpOutSrcQuenchs OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Source Quench.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 19 }

icmpOutRedirects OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Redirect. Для хоста этот объект
            всегда имеет значение 0, поскольку хосты не передают Redirect.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 20 }

icmpOutEchos OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных запросов ICMP Echo.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 21 }

icmpOutEchoReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Echo Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 22 }

icmpOutTimestamps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных запросов ICMP Timestamp.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 23 }

icmpOutTimestampReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Timestamp Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 24 }

icmpOutAddrMasks OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Address Mask Request.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 25 }

icmpOutAddrMaskReps OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
           "Число переданных сообщений ICMP Address Mask Reply.

            Этот объект был отменен при добавлении независимой от версии
            таблицы. Заменен колонкой в icmpMsgStatsTable."
    ::= { icmp 26 }

-- Отмененная информация о соответствии
-- Отмененные заявления о соответствии

ipMIBCompliance MODULE-COMPLIANCE
    STATUS     deprecated
    DESCRIPTION
           "Заявление о соответствии для систем, реализующих лишь IPv4.
            Для независимости от версии это заявление отменено и 
            применяется ipMIBCompliance2."
    MODULE  -- данный модуль
        MANDATORY-GROUPS { ipGroup,
                           icmpGroup }
    ::= { ipMIBCompliances 1 }

-- Отмененные блоки соответствия

ipGroup OBJECT-GROUP
    OBJECTS   { ipForwarding,           ipDefaultTTL,
                ipInReceives,           ipInHdrErrors,
                ipInAddrErrors,         ipForwDatagrams,
                ipInUnknownProtos,      ipInDiscards,
                ipInDelivers,           ipOutRequests,
                ipOutDiscards,          ipOutNoRoutes,
                ipReasmTimeout,         ipReasmReqds,
                ipReasmOKs,             ipReasmFails,
                ipFragOKs,              ipFragFails,
                ipFragCreates,          ipAdEntAddr,
                ipAdEntIfIndex,         ipAdEntNetMask,
                ipAdEntBcastAddr,       ipAdEntReasmMaxSize,
                ipNetToMediaIfIndex,    ipNetToMediaPhysAddress,
                ipNetToMediaNetAddress, ipNetToMediaType,
                ipRoutingDiscards
}
    STATUS     deprecated
    DESCRIPTION
           "Группа объектов, обеспечивавших базовое управление 
            элементами IP, исключая маршруты IP.

            Группа была отменена для обеспечения незавимисости от версии."
    ::= { ipMIBGroups 1 }

icmpGroup OBJECT-GROUP
    OBJECTS   { icmpInMsgs,          icmpInErrors,
                icmpInDestUnreachs,  icmpInTimeExcds,
                icmpInParmProbs,     icmpInSrcQuenchs,
                icmpInRedirects,     icmpInEchos,
                icmpInEchoReps,      icmpInTimestamps,
                icmpInTimestampReps, icmpInAddrMasks,
                icmpInAddrMaskReps,  icmpOutMsgs,
                icmpOutErrors,       icmpOutDestUnreachs,
                icmpOutTimeExcds,    icmpOutParmProbs,
                icmpOutSrcQuenchs,   icmpOutRedirects,
                icmpOutEchos,        icmpOutEchoReps,
                icmpOutTimestamps,   icmpOutTimestampReps,
                icmpOutAddrMasks,    icmpOutAddrMaskReps }
    STATUS     deprecated
    DESCRIPTION
           "Группа объектов, обеспечивавших статистику ICMP.

            Группа была отменена для обеспечения незавимисости от версии."
    ::= { ipMIBGroups 2 }

END

6. Предшествующие работы

Этот объект содержит измененные объекты из RFC 1213 [11], RFC 2011 [12], RFC 2465 [13] и RFC 2466 [14].

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

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

[1] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Structure of Management Information Version 2 (SMIv2)», STD 58, RFC 2578, April 1999.

[2] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Textual Conventions for SMIv2», STD 58, RFC 2579, April 1999.

[3] McCloghrie, K., Perkins, D., and J. Schoenwaelder, «Conformance Statements for SMIv2», STD 58, RFC 2580, April 1999.

[4] Narten, T., Nordmark, E., and W. Simpson, «Neighbor Discovery for IP Version 6 (IPv6)», RFC 2461, December 1998.

[5] Thomson, S. and T. Narten, «IPv6 Stateless Address Autoconfiguration», RFC 2462, December 1998.

[6] McCloghrie, K. and F. Kastenholz, «The Interfaces Group MIB», RFC 2863, June 2000.

[7] Daniele, M., Haberman, B., Routhier, S., and J. Schoenwaelder, «Textual Conventions for Internet Network Addresses», RFC 4001, February 2005.

[8] Draves, R. and D. Thaler, «Default Router Preferences and More-Specific Routes», RFC 4191, November 2005.

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

[9] Case, J., Mundy, R., Partain, D., and B. Stewart, «Introduction and Applicability Statements for Internet-Standard Management Framework», RFC 3410, December 2002.

[10] Plummer, D., «Ethernet Address Resolution Protocol: Or converting network protocol addresses to 48.bit Ethernet address for transmission on Ethernet hardware», STD 37, RFC 826, November 1982.

[11] McCloghrie, K. and M. Rose, «Management Information Base for Network Management of TCP/IP-based internets:MIB-II», STD 17, RFC 1213, March 1991.

[12] McCloghrie, K., «SNMPv2 Management Information Base for the Internet Protocol using SMIv2», RFC 2011, November 1996.

[13] Haskin, D. and S. Onishi, «Management Information Base for IP Version 6: Textual Conventions and General Group», RFC 2465, December 1998.

[14] Haskin, D. and S. Onishi, «Management Information Base for IP Version 6: ICMPv6 Group», RFC 2466, December 1998.

[15] Narten, T. and R. Draves, «Privacy Extensions for Stateless Address Autoconfiguration in IPv6», RFC 3041, January 2001.

[16] Haberman, B., «IP Forwarding Table MIB», RFC 4292, April 2006. [17] Hinden, R. and S. Deering, «IP Version 6 Addressing Architecture», RFC 4291, February 2006.

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

Многие элементы управления в этом модуле MIB имеют MAX-ACCESS со значением read-write и/или read-create. Такие объекты могут оказаться чувствительными или уязвимыми в некоторых сетевых средах. Пожжержка операций SET в небезопасной среде без подобающей защиты может оказывать негативное влияние на работу сети. Ниже перечислены таблицы и объекты с описанием возможных уязвимостей.

ipForwarding и ipv6IpForwarding

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

ipDefaultTTL и ipv6IpDefaultHopLimit

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

ipv4InterfaceEnableStatus и ipv6InterfaceEnableStatus

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

ipAddressTable

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

ipv6RouterAdvertTable

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

ipNetToPhysicalPhysAddress и ipNetToPhysicalType

Эти объекты задают сведения, используемые для преобразования сетевых адресов (IP) в зависящие от среды адреса. Меняя эти объекты, атакующий может отключить коммуникации с узлом или перенаправить сообщения от одного узла к другому. Однако такие атаки можно реализовать простыми откликами на запросы ARP или ND.

Некоторые из доступных для чтения объектов этого модуля MIB (т. е. объекты с MAX-ACCESS отличным от not-accessible) могут быть конфиденциальными или уязвимыми в некоторых сетевых средах. Важно контролировать для таких объектов даже доступ GET и возможно даже шифровать их при передаче через сеть по протоколу SNMP. Такие объекты и таблицы рассмотрены ниже.

По сути, все объекты этой базы MIB можно считать конфиденциальными, так как они показывают статус модулей IP в системе. Однако ipSystemStatsTable, ipIfStatsTable и ipAddressTable явно наиболее интересны для атакующих. Таблицы статистики содержат данные о типе и объемах трафика для узла и могут считаться конфиденциальными. Таблица адресов включает удобный список всех адресов узла. Каждый адрес по отдельности ничем не примечателен, однако полный список может позволить атакующему сопоставление трафика. Например, можно сопоставить приватный адрес RFC 3041 [15] с известным публичным адресом и обойти защиту RFC 3041.

Протокол SNMP до версии SNMPv3 не обеспечивал адекватной защиты. Даже в защищенной сети (например, IPSec) не было объектов, к которым пользователь из этой сети не мог бы обратиться с помощью операций GET/SET (read/change/create/delete) к объектам модуля MIB.

Разработчикам рекомендуется рассмотреть функции защиты SNMPv3 (раздел 8 в [9]), включая полную поддержку криптографических механизмов SNMPv3 (для проверки подлинности и защиты приватности).

Кроме того, разработки для более ранних версий (до SNMPv3) не рекомендуются. Вместо этого рекомендуется развернуть SNMPv3 и включить криптографическую защиту. После этого пользователи (оператор) отвечает за предоставление доступа элементов SNMP к экземпляру этого модуля MIB и может корректно настроить доступ лишь уполномоченным пользователям (владельцам) для выполнения операций GET или SET (change/create/delete).

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

Рецензентами и другими участниками работ были:

Dario Acornero, Cisco Systems

Mike MacFaden, VMWare

Keith McCloghrie, Cisco Systems

Juergen Schoenwalder, TU Braunschweig

Margaret Wasserman, Devicescape

10. Авторы

Документ подготовлен группой по пересмотру IPv6 MIB:

Bill Fenner, AT&T Labs — Research

EMail: fenner@research.att.com

Brian Haberman

EMail: brian@innovationslab.net

Shawn A. Routhier

EMail: sar@iwl.com

Dave Thaler, Microsoft

EMail: dthaler@microsoft.com

Документ обновляет базы MIB из нескольких других документов. RFC 2011 является предыдущим вариантом IP MIB. RFC 2465 и RFC 2466 содержат первые версии, задающие адреса и информацию IPv6.

RFC 2011:

Keith McCloghrie, Cisco Systems (Editor)

RFC 2465 и RFC 2466:

Dimitry Haskin, Bay Networks

Steve Onishi, Bay Networks

Контактные данные редактора

Shawn A. Routhier

Interworking Labs

108 Whispering Pines Dr. Suite 235

Scotts Valley, CA 95066

USA

EMail: sar@iwl.com


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

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

nmalykh@gmail.com


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

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 обеспечено IETF Administrative Support Activity (IASA).


1Management Information Base.

2Internet Protocol.

3Simple Network Management Protocol.

4Structure of Management Information.

5View-based Access Control Model — модель управления доступом на базе представлений.

6Address Resolution Protocol — протокол сопоставления адресов.

Рубрика: RFC, Мониторинг и управление | Комментарии к записи RFC 4293 Management Information Base for the Internet Protocol (IP) отключены

RFC 4456 BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP)

Network Working Group                                       T. Bates
Request for Comments: 4456                                   E. Chen
Obsoletes: 2796, 1966                                  Cisco Systems
Category: Standards Track                                 R. Chandra
                                                       Sonoa Systems
                                                          April 2006

 

BGP Route Reflection – альтернатива полносвязности IBGP

BGP Route Reflection:

An Alternative to Full Mesh Internal BGP (IBGP)

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

BGP1 [1] представляет собой протокол междоменной маршрутизации, разработанный для сетей TCP/IP. В типовой ситуации все узлы BGP в одной AS должны образовывать полносвязный набор соединений (fully meshed) потому, что любая внешняя маршрутная информация должна передаваться всем остальным маршрутизаторам внутри данной AS. Это порождает серьезные проблемы масштабирования, которые подробно описаны вместе с альтернативными предложениями.

В данном документе описан метод «отражения маршрутов» (Route Reflection) и его использование, ослабляющее требование полносвязности для IBGP.

Этот документ отменяет действие RFC 2796 и RFC 1966.

1. Введение

В типовой ситуации все узлы BGP в одной AS должны образовывать полносвязный набор соединений потому, что любая внешняя маршрутная информация должна передаваться всем остальным маршрутизаторам внутри данной AS. Для n узлов BGP в данной AS требуется организовать n*(n-1)/2 уникальных сессий IBGP. Очевидно, что требование полносвязности становится невыполнимым в системах, где большое число узлов IBGP обменивается значительными объемами маршрутной информации (такая ситуация наблюдается в большинстве современных сетей).

Эта проблема масштабирования и многочисленные предложения по снижению ее остроты подробно описаны в документах [2,3]. Данный документ представляет еще один вариант избавления от проблемы полносвязности, известный как Route Reflection. Этот метод позволяет узлу BGP (называемому Route Reflector) анонсировать полученные от IBGP маршруты некоторым партнерам IBGP. Предложенный метод изменяет общепринятую концепцию работы протокола и добавляет два новых необязательных непереходных2 атрибута BGP для предотвращения петель при обновлении маршрутов.

Этот документ отменяет действие 2796 и RFC 1966.

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

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

3. Базовые требования

Метод Route Reflection удовлетворяет перечисленным ниже критериям.

  • Простота

    Любое дополнение должно быть понятным и простым в настройке.

  • Простота перехода

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

  • Совместимость

    Должна обеспечиваться возможность сохранения не поддерживающих данный метод узлов IBGP как части исходной AS или домена без потери какой-либо маршрутной информации BGP.

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

4. Отражение маршрутов

Основная идея метода отражения (Route Reflection) очень проста. Рассмотрим пример, показанный на рисунке 1.

+-------+        +-------+
|       |  IBGP  |       |
| RTR-A |--------| RTR-B |
|       |        |       |
+-------+        +-------+
      \            /
  IBGP \   ASX    / IBGP
        \        /
         +-------+
         |       |
         | RTR-C |
         |       |
         +-------+

Рисунок 1. Полносвязная система IBGP

В автономной системе ASX имеется три узла IBGP (маршрутизаторы RTR-A, RTR-B, RTR-C). В рамках существующей модели BGP если RTR-A получает внешний маршрут и выбирает этот маршрут в качестве лучшего, он должен анонсировать этот внешний маршрут обоим узлам RTR-B и RTR-C. Узлы RTR-B и RTR-C (как узлы IBGP) не будут заново анонсировать этот полученный от IBGP маршрут другим партнерам IBGP.

Если это правило ослабить и позволить узлу RTR-C анонсировать полученные от IBGP маршруты другим партнерам IBGP, тогда он будет реанонсировать (или отражать) маршруты IBGP, полученные от RTR-A, узлу RTR-B и наоборот. Это позволит отказаться от организации сессии IBGP между узлами RTR-A и RTR-B, как показано на рисунке 2.

                  +-------+        +-------+
                  |       |        |       |
                  | RTR-A |        | RTR-B |
                  |       |        |       |
                  +-------+        +-------+
                        \            /
                    IBGP \   ASX    / IBGP
                          \        /
                           +-------+
                           |       |
                           | RTR-C |
                           |       |
                           +-------+

Рисунок 2. IBGP с отражением маршрутов

Схема метода Route Reflection основана именно на этом принципе.

5. Терминология и концепции

Мы используем термин «отражение маршрутов» для описания действий узла BGP, анонсирующего полученный от IBGP маршрут другому партнеру IBGP. Если об узле BGP говорят как об «отражателе маршрутов» (Route Reflector или RR), это означает, что данный узел «отражает» полученные маршруты своим партнерам.

Внутренние партнеры узла RR делятся на две группы:

  1. Партнеры-клиенты.

  2. Партнеры, не являющиеся клиентами.

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

                 / - - - - - - - - - - - - -  -
                 |           Cluster           |
                   +-------+        +-------+
                 | |       |        |       |  |
                   | RTR-A |        | RTR-B |
                 | |Client |        |Client |  |
                   +-------+        +-------+
                 |       \           /         |
                    IBGP  \         / IBGP
                 |         \       /           |
                           +-------+
                 |         |       |           |
                           | RTR-C |
                 |         |  RR   |           |
                           +-------+
                 |           /   \             |
                  - - - - - /- - -\- - - - - - /
                     IBGP  /       \ IBGP
                  +-------+         +-------+
                  | RTR-D |  IBGP   | RTR-E |
                  |  Non- |---------|  Non- |
                  |Client |         |Client |
                  +-------+         +-------+

Рисунок 3. Компоненты RR

6. Работа метода

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

  1. Маршрут получен от партнера IBGP, не являющегося клиентом.

    Отразить маршрут всем клиентам.

  2. Маршрут получен от клиента.

    Отразить маршрут всем партнерам, не являющимся клиентами, а также партнерам-клиентам (поскольку клиенты могут не иметь полной связности).

Автономная система может включать множество RR. Узел RR трактует остальные рефлекторы RR, как обычные внутренние узлы BGP. Рефлектор RR может быть настроен на присутствие других RR как в числе клиентов, так и среди партнеров, не являющихся клиентами.

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

В автономной системе могут присутствовать узлы BGP, не понимающие концепцию отражения маршрутов (будем называть их обычными узлами BGP). Схема отражения маршрутов допускает сосуществование с обычными узлами BGP. Такие узлы могут относиться к группе клиентов или не являться клиентами RR. Это обеспечивает возможность простого и постепенного перехода от существующей модели работы IBGP к модели с отражением маршрутов (Route Reflection). Можно начать с создания кластера путем настройки одного маршрутизатора в качестве означенного RR и настройки остальных RR и их клиентов как нормальных партнеров IBGP. Постепенно могут создаваться дополнительные кластеры.

7. Избыточные RR

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

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

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

ORIGINATOR_ID

ORIGINATOR_ID – необязательный, непереходный атрибут BGP с кодом типа 9. Этот атрибут имеет размер 4 байта и создается рефлектором RR в отраженном маршруте. Атрибут будет включать значение BGP Identifier источника маршрута (originator) в локальной AS. Узлу BGP не следует создавать атрибут ORIGINATOR_ID, если последний уже присутствует. Маршрутизатору, распознающему атрибут ORIGINATOR_ID, следует игнорировать маршрут, содержащие значение его BGP Identifier в качестве ORIGINATOR_ID.

CLUSTER_LIST

CLUSTER_LIST – необязательный, непереходный атрибут BGP с кодом типа 10. Этот атрибут представляет собой последовательность значений CLUSTER_ID, представляющих путь отражения, по которому передавался маршрут.

Когда рефлектор RR отражает маршрут, он должен добавить локальное значение CLUSTER_ID в начало (prepend) CLUSTER_LIST. Если список CLUSTER_LIST пуст, узел должен создать новый список. Используя этот атрибут, RR может определять возникновение петель (возврат в тот же кластер) при передаче маршрутной информации в результате конфигурационных ошибок. Если локальное значение CLUSTER_ID присутствует в списке кластеров, полученный анонс следует игнорировать.

9. Влияние процесса выбора маршрута

Правила удаления лишнего в процессе выбора маршрута BGP3 (параграф 9.1.2.2 документа [1]) изменяются следующим образом:

Если маршрут содержит атрибут ORIGINATOR_ID, тогда на этапе f) значение ORIGINATOR_ID следует трактовать как значение BGP Identifier узла BGP, анонсирующего маршрут.

Кроме того, между этапами f) и g) следует включить дополнительное правило:

Узлу BGP следует отдавать предпочтение маршруту с более коротким списком CLUSTER_LIST. Размер CLUSTER_LIST считается нулевым, если маршрут не включает атрибут CLUSTER_LIST.

10. Вопросы реализации метода

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

Кроме того, когда RR отражает маршрут, ему не следует изменять в маршруте значения атрибутов NEXT_HOP, AS_PATH, LOCAL_PREF и MED, поскольку это может приводить к возникновению маршрутных петель.

11. Вопросы настройки и развертывания

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

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

На выбор маршрута BGP могут оказывать влияние обе метрики MED и IGP. Поскольку атрибуты MED не всегда совместимы, а метрика IGP может отличаться для каждого маршрутизатора, в некоторых вариантах топологии отражения метод отражения может давать при выборе маршрута результат, отличающийся от случая полносвязной системы IBGP. Для получения совпадающих результатов в случаях использования отражения и полносвязной системы IBGP следует сделать так, чтобы рефлекторы маршрутов никогда не выбирали лучший маршрут BGP на основе метрики IGP, которая существенно отличается от IGP-метрики их клиентов, или на основе несовместимых атрибутов MED. Первый вариант может быть достигнут путем настройки конфигурации таким образом, чтобы внутрикластерная метрика IGP всегда давала преимущество перед межкластерной метрикой IGP, и поддержки полной связности (full mesh) внутри кластера. Для реализации второго варианта можно использовать любой из перечисленных ниже способов:

  • устанавливать на граничном маршрутизаторе уровень локального предпочтения маршрутов в соответствии с MED;

  • обеспечить, чтобы длины AS_PATH для разных AS различались при использовании длины пути в качестве критерия выбора;

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

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

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

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

Это расширение протокола BGP не изменяет состояния безопасности, присущего IBGP [1, 5].

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

Авторы благодарят Dennis Ferguson, John Scudder, Paul Traina и Tony Li за многочисленные дискуссии, результатом которых стал этот документ. Идея метода создана на основе давней дискуссии между Tony Li и Dimitri Haskin.

Кроме того, авторы хотят поблагодарить Yakov Rekhter за просмотр документа и полезные предложения, а также отметить полезные комментарии Tony Li, Rohit Dube и John Scudder и Bruce Cole.

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

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

[1] Rekhter, Y., Li, T., and S. Hares, «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006.

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

[2] Savola, P., «Reclassification of RFC 1863 to Historic», RFC 4223, October 2005.

[3] Traina, P., McPherson, D., and J. Scudder, «Autonomous System Confederations for BGP», RFC 3065, February 2001.

[4] Bates, T. and R. Chandra, «BGP Route Reflection An alternative to full mesh IBGP», RFC 1966, June 1996.

[5] Heffernan, A., «Protection of BGP Sessions via the TCP MD5 Signature Option», RFC 2385, August 1998.

[6] Bates, T., Chandra, R., and E. Chen, «BGP Route Reflection – An Alternative to Full Mesh IBGP», RFC 2796, April 2000.

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

Приложение A: Сравнение с RFC 2796

Добавлен параграф, посвященный влиянию процесса выбора маршрутов BGP.

Удален рисунок, иллюстрирующий формат атрибута CLUSTER_LIST, поскольку он дублировал описание в спецификации протокола BGP и поле размера атрибута по невнимательности было указано как однооктетное.6

Приложение B: Сравнение с RFC 1966

Изменения, перечисленные в Приложении A, а также изменения, перечисленные ниже.

Разъяснены некоторые термины, связанные с отражением маршрутов и исключены упоминания маршрутов и узлов EBGP.

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

Способ добавления атрибута CLUSTER_ID в список CLUSTER_LIST был заменен с «append» на «prepend» в соответствии с реализованным кодом.

В главу «Вопросы настройки и развертывания» добавлено рассмотрение некоторых вопросов развертывания метода.

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

Tony Bates

Cisco Systems, Inc.

170 West Tasman Drive

San Jose, CA 95134

EMail: tbates@cisco.com

Ravi Chandra

Sonoa Systems, Inc.

3255-7 Scott Blvd.

Santa Clara, CA 95054

EMail: rchandra@sonoasystems.com

Enke Chen

Cisco Systems, Inc.

170 West Tasman Drive

San Jose, CA 95134

EMail: enkechen@cisco.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 обеспечено IETF Administrative Support Activity (IASA).


1Border Gateway Protocol – протокол граничного шлюза.

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

3BGP Decision Process Tie Breaking.

4Point of Presence – точка присутствия

6Кроме того в определении атрибута ORIGINATOR_ID была произведена замена ROUTER_ID на BGP Identifier. Прим. перев.

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

RFC 4448 Encapsulation Methods for Transport of Ethernet over MPLS Networks

Network Working Group                                    L. Martini, Ed.
Request for Comments: 4448                                      E. Rosen
Category: Standards Track                            Cisco Systems, Inc.
                                                             N. El-Aawar
                                             Level 3 Communications, LLC
                                                                G. Heron
                                                                 Tellabs
                                                              April 2006

Encapsulation Methods for Transport of Ethernet over MPLS Networks

Методы инкапсуляции для доставки кадров Ethernet через сети MPLS

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

Псевдопровода (PW1) Ethernet применяются для передачи Ethernet/802.3 PDU2 через сети MPLS. Это позволяет сервис-провайдерам предлагать услуги «эмуляции» Ethernet через существующие сети MPLS. Данный документ описывает инкапсуляцию Ethernet/802.3 PDU в псевдопроводе, а также задает процедуры использования PW для организации услуг «point-to-point Ethernet».

1. Введение

Псевдопровод Ethernet позволяет передавать Ethernet/802.3 [802.3] PDU через сеть MPLS1 [MPLS-ARCH]. Для решения вопросов, связанных с передачей Ethernet PDU через сеть с коммутацией пакетов (PSN2) в этом документе предполагается возможность организации псевдопровода (PW) с помощью протоколов управления таких, как описаны в [PWE3-CTRL]. Устройство псевдопровода Ethernet, описанное в этом документе, соответствует архитектуре PW, заданной в [RFC3985]. Предполагается, что читатели знакомы с RFC 3985.

Сквозная эмуляция псевдопровода PWE33 для Ethernet PDU включает поля Destination Address, Source Address, Length/Type, MAC Client Data и заполнение из кадра MAC, как конкатенацию октетов в исходном порядке [PDU].

В дополнение к формату Ethernet PDU, используемому в псевдопроводе, этот документ рассматривает:

  • процедуры применения PW для предоставления паре краевых абонентских маршрутизаторов CE4 эмулируемых услуг Ethernet (точка-точка), включая процедуры обработки PE5-bound и CE-bound Ethernet PDU [RFC3985];

  • относящиеся к Ethernet вопросы качества обслуживания (QoS6) и безопасности;

  • вопросы междоменной транспортировки Ethernet PW.

На рисунках 1 и 2 представлены эталонные модели (взяты из [RFC3985]) поддержки эмулируемых услуг Ethernet PW.

      |<------------- Эмулируемые службы --------------->|
      |                                                  |
      |          |<------ Псевдопровод ------>|          |
      |          |                            |          |
      |          |    |<-- Псевдопровод ->|    |          |
      | PW End   V    V                  V    V  PW End  |
      V Service  +----+                  +----+  Service V
+-----+    |     | PE1|==================| PE2|     |    +-----+
|     |----------|............PW1.............|----------|     |
| CE1 |    |     |    |                  |    |     |    | CE2 |
|     |----------|............PW2.............|----------|     |
+-----+  ^ |     |    |==================|    |     | ^  +-----+
      ^  |       +----+                  +----+     | |  ^
      |  |   Provider Edge 1         Provider Edge 2  |  |
      |  |                                            |  |
Customer |                                            | Customer
Edge 1   |                                            | Edge 2
         |                                            |
         |                                            |
Устройство подключения (AC)                  Устройство подключения (AC)
к естественному сервису Ethernet             к естественному сервису Ethernet

Рисунок 1. Конфигурация эталонного интерфейса PWE3 Ethernet/VLAN.


Показанные на рисунке 1 «эмулируемые службы» строго говоря являются ЛВС на основе мостов — PE имеют MAC-интерфейсы, воспринимают кадры управления MAC и т. п. Однако описываемые здесь процедуры поддерживают лишь ЛВС из двух CE. Поэтому такой сервис называется «emulated point-to-point Ethernet». Спецификация процедур использования псевдопроводов для эмуляции ЛВС с большим числом CE выходит за рамки этого документа.

+---------------+                                +---------------+
|  Эмуляция     |                                |  Эмуляция     |
|  Ethernet     |                                |  Ethernet     |
| (включая      |       Эмулируемые службы       | (включая      |
|  VLAN)        |<==============================>|  VLAN)        |
|               |                                |               |
+---------------+          Псевдопровод          +---------------+
|Демультиплексор|<==============================>|Демультиплексор|
+---------------+                                +---------------+
|    PSN        |          Псевдопровод          |    PSN        |
|   MPLS        |<==============================>|   MPLS        |
+---------------+                                +---------------+
|Физическ. уров.|                                |Физическ. уров.|
+------+--------+                                +------+--------+

Рисунок 2. Эталонная модель стека протоколов Ethernet PWE3.


В этом документе входной маршрутизатор обозначается PE1, выходной — PE2. L2 PDU будут приниматься PE1, инкапсулироваться им, транспортироваться, декапсулироваться PE2 и передаваться подключенному к PE2 устройству.

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

На рисунке 3 представлена эталонная модель точек завершения на каждой стороне PW внутри PE.

PW завершается в логической точке внутри PE, помеченной B на рисунке 3 внизу. Эта точка обеспечивает сервис Ethernet MAC, который будет доставлять каждый кадр Ethernet, полученный в точке A, без изменений в точку A соответствующего PE на другом конце псевдопровода PW.

Функция естественной обработки (NSP7) включает обработку, которая требуется для кадров Ethernet, пересылаемых в точку завершения PW. Это может включать вырезание, переписывание или добавление тегов VLAN, мультиплексирование и демультиплексирование физических портов, функции моста PW-PW, инкапсуляцию L2, формирование, правила и т. п. Эти функции относятся к Ethernet и могут не требоваться для службы эмуляции PW.

        +-----------------------------------+
        |                PE                 |
+---+   +-+  +-----+  +------+  +------+  +-+
|   |   |P|  |     |  |Завер-|  | PSN  |  |P|
|   |<==|h|<=| NSP |<=|шение |<=|Tunnel|<=|h|<== Из PSN
|   |   |y|  |     |  |PW    |  |      |  |y|
| C |   +-+  +-----+  +------+  +------+  +-+
| E |   |                                   |
|   |   +-+  +-----+  +------+  +------+  +-+
|   |   |P|  |     |  |Завер-|  | PSN  |  |P|
|   |==>|h|=>| NSP |=>|шение |=>|Tunnel|=>|h|==> В PSN
|   |   |y|  |     |  | PW    |  |      |  |y|
+---+   +-+  +-----+  +------+  +------+  +-+
        |                                   |
        +-----------------------------------+
                    ^         ^         ^
                    |         |         |
                    A         B         C

Рисунок 3. Эталонная модель PW.


Точки слева от A, включая физический уровень между CE и PE, а также любые функции адаптации (NSP) между этой точкой и завершением PW выходят за рамки PWE3 и не определяются здесь.

«Завершение PW» между A и B представляет операции для организации и поддержки PW, а также для инкапсуляции и декапсуляции кадров Ethernet при передаче через сеть MPLS.

Ethernet PW работает в одном из двух режимов — raw или tagged. В режиме с тегами каждый кадр должен включать хотя бы один тег 802.1Q [802.1Q] VLAN и значение тега важно для NSP в точках завершения PW. Т. е. две точки завершения PW должны иметь некое соглашение (заданное в конфигурации или через сигнализацию) по части обработки тега. В raw-режиме PW кадр может включать тег 802.1Q VLAN, но в этом случае тег не имеет значения для NSP и просто передается между ними.

Дополнительные термины, относящиеся к псевдопроводам и L2 VPN8 приведены в [RFC4026].

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

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

3. Заявление о применимости

Эмуляция Ethernet PW позволяет сервис-провайдерам предлагать связь между портами Ethernet через сети MPLS PSN, а эмуляция Ethernet VLAN PW позволяет организовывать через сети MPLS PSN сервис «Ethernet VLAN to VLAN».

Ethernet PW или Ethernet VLAN PW обладают рядом перечисленных ниже характеристик естественных служб.

  • Ethernet PW соединяет два устройства подключения Ethernet AC9, а Ethernet VLAN PW — два устройства подключения Ethernet VLAN AC с поддержкой двухсторонней доставки кадров Ethernet переменных размеров. Входная функция NSP вырезает преамбулу и контрольную сумму FCS10 из кадра Ethernet и транспортирует кадр целиком через PW. Это выполняется независимо от наличия в кадре тега 802.1Q. Выходная функция NSP принимает кадр Ethernet и PW, а также восстанавливает для него преамбулу и FCS до пересылки кадра в присоединенное устройство. Поскольку значение FCS не передается через (Ethernet и Ethernet VLAN) PW, сквозной контроль целостности теряется. Можно использовать описанный в [FCS] необязательный метод сквозного контроля целостности для (Ethernet и Ethernet VLAN) PW.

  • Для Ethernet VLAN PW тег VLAN может быть изменен NSP выходным PE, но это выходит за рамки документа.

  • (Ethernet или Ethernet VLAN) PW может поддерживать передачу через псевдопровод только однотипных кадров Ethernet — обе стороны PW должны работать в одном из режимов (с тегами или без тегов). Функциональность NSP для поддержки разнотипных кадров выходит за рамки документа.

  • Информация о состоянии порт Ethernet или Ethernet VLAN обеспечивается с использованием PW Status TLV11 в сообщениях LDP12 о состоянии. Потеря связности между PE может быть обнаружена по закрытию сессии LDP или с помощью механизмов [VCCV]. PE может возвращать эту информацию подключенным системам.

  • Максимальный размер поддерживаемых кадров ограничивается PSN MTU за вычетом размера заголовка MPLS, если не применяет фрагментация и сборка [FRAG].

  • В сети с коммутацией пакетов пакеты могут менять порядок, дублироваться, теряться или отбрасываться без уведомления. На (Ethernet или Ethernet VLAN) PW может применяться упорядочение для обнаружения потери, дублирования или нарушения порядка пакетов на уровне PW.

  • Качество услуг (Ethernet или Ethernet VLAN) PW может быть повышено за счет использования функций QoS в PE и базовой PSN (см. параграф 4.7. Вопросы QoS).

4. Детали отдельных эмулируемых служб

4.1. Режим Ethernet Tagged

Кадры Ethernet инкапсулируются в соответствии с определенными ниже процедурами для режима с тегами (tagged). Следует отметить, что при изменении тега VLAN выходным PE, протокол Ethernet STP13 может работать некорректно. Если это важно, идентификатор VLAN должен выбираться так, чтобы он соответствовал присоединенным устройствам на обеих сторонах PW.

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

В этом режиме используются теги разграничения служб (service-delimiting) для сопоставления входящих кадров Ethernet с PW и он соответствует PW типа 0x0004 «Ethernet Tagged Mode» [IANA].

4.2. Режим Ethernet Raw

Кадры Ethernet инкапсулируются в соответствии с определенными ниже процедурами для режима raw. Если PE обнаруживает отказ физического порта Ethernet или порт отключен административно, устройство PE должно передать уведомление о статусе PW соответствующему удаленному PE.

В этом режиме все кадры Ethernet, принимаемые на подключенном устройстве PE1, будут передаваться PE2 по одному псевдопроводу PW. Этот режим соответствует PW типа 0x0005 «Ethernet» [IANA].

4.3. LDP суб-TLV с параметрами интерфейса

Этот LDP суб-TLV [LDP] задает параметры интерфейса. Когда это применимо, параметр должен использоваться для проверки того, что оба PE, а также входной и выходной порт на выходе устройства имеют возможности, требуемые для взаимодействия. TLV параметров интерфейса определен в [PWE3-CTRL], начальные значения для типов суб-TLV указаны в реестре IANA [IANA], а относящиеся к Ethernet параметры интерфейса описаны ниже.

  • 0x06 — суб-TLV для запроса VLAN ID

    Необязательное 16-битовое значение, указывающее запрошенный идентификатор VLAN ID. Этот параметр должен использоваться PE, не способным переписать на выходе тег 802.1Q Ethernet VLAN. Если входной PE получает такой запрос, он должен переписать значение VLAN ID во входящем теге VLAN в соответствии с запрошенным VLAN ID. Если это невозможно и VLAN ID не соответствует настроенному входному VLAN ID, превдопровод PW должен быть отключен. Параметр применим только для PW типа 0x0004.

4.4. Базовые процедуры

Когда NSP/Forwarder передает кадр функции завершения PW, выполняются перечисленные ниже действия.

  • Вырезается преамбула (при наличии) и FCS.

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

  • Перед полученным в результате пакетом помещается метка демультиплексирования псевдопровода.

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

  • Пакет передается.

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

Туннельная инкапсуляция зависит от организации MPLS PSN. Она может выполняться с меткой или без метки, а также с множеством меток. Для демультиплексирования псевдопровода используется метка MPLS, значение которой определяется протоколами организации и поддержки PW.

При поступлении пакета через PW туннельная инкапсуляция и метка демультиплексирования PW вырезаются. При наличии слова управления оно обрабатывается и вырезается. Полученный в результате кадр передается Forwarder/NSP. За регенерацию FCS отвечает NSP.

4.4.1. Режимы Raw и Tagged

Когда PE получает кадр Ethernet с тегом VLAN, возможны два случая, описанных ниже.

  1. Тег указывает сервис (service-delimiting). Это означает, что тег был помещен в кадр неким элементом операторского оборудования и используется сервис-провайдером для того, чтобы различать трафик. Например, ЛВС разных абонентов могут подключаться к одному коммутатору сервис-провайдера, который использует теги VLAN, чтобы различать трафик каждого абонента при пересылке кадров в направлении PE.

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

Является ли тег указывающим сервис, зависит от локальной конфигурации PE.

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

Если Ethernet PW работает а режиме tagged, каждый переданный в PW кадр должен иметь указывающий сервис тег VLAN. Если полученный PE от присоединенного устройства кадр не имеет указывающего сервис тега VLAN, устройство PE должно добавить перед кадром «фиктивный» тег VLAN до отправки кадра в PW. Этот режим применяется по умолчанию и является единственным требуемым режимом.

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

В обоих режимах указывающий сервис тег имеет лишь логическую значимость, т. е. он важен только для конкретного интерфейса PE-CE. В режиме tagged устройство PE, получившее кадр от PW, может изменить значение тега, вырезать тег целиком или сохранить его без изменений, в зависимости от конфигурации. В режиме raw получившее кадр устройство PE может добавить указывающий сервис тег перед отправкой кадра присоединенному устройству, однако оно должно сохранить имеющиеся теги.

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

 

Тег->

Указывает сервис

Не указывает сервис

Режим Raw

Удаляется первый тег VLAN

Режим Tagged

Может добавляться тег

Добавляется тег

 

4.4.2. Управление MTU на каналах PE/CE

Ethernet PW недопустимо включать, пока нет уверенности в том, что значения MTU на каналах CE-PE по обе стороны PW совпадают. Если выходной маршрутизатор получает инкапсулированные L2 PDU, где размер данных (payload), т. е. размер самого PDU без заголовков инкапсуляции, превышает MTU на целевом интерфейсе L2, PDU должен быть отброшен.

4.4.3. Порядок кадров

В общем случае приложения, работающие на базе Ethernet, не требуют строго порядка доставки кадров. Однако определение IEEE 802.3 [802.3] требует соблюдения порядка кадров одного «разговора» в контексте агрегирования каналов (параграф 43). Кроме того, в общем случае PSN не может обеспечивать сохранение порядка доставки кадров. Ethernet PW может за счет применения управляющего слова обеспечить строгое упорядочение кадров. Если эта опция включена, все кадры, доставленные с нарушением порядка в PSN, должны отбрасываться или упорядочиваться заново принимающей стороной PW. Если для конкретного PW нужен строгий порядок, эта опция должны быть включена.

4.4.4. Обработка ошибок в кадрах

Инкапсулированный кадр Ethernet при прохождении через псевдопровод может быть отброшен, поврежден или доставлен с нарушением порядка. Как описано в [PWE3-REQ], потеря, повреждение и нарушение порядка рассматриваются как «обобщенные битовые ошибки» (generalized bit error) в псевдопроводе. Поврежденные кадры PW детектируются на уровне PSN и отбрасываются.

На входе PW должен быть включен естественный механизм обработки ошибок в кадрах Ethernet. Поэтому, если устройство PE получает кадр Ethernet с ошибкой CRC14, ошибкой кадрирования или слишком короткий (runt), кадр должен быть отброшен на входе. Отметим, что определение этой обработки является частью функции NSP и выходит за рамки документа.

4.4.5. Управление потоком IEEE 802.3x между сетями

В стандартной сети Ethernet управление потоком данных не обязательно и обычно настраивается между парой узлов на соединениях «точка-точка» (например, между CE и PE). Кадры IEEE 802.3x PAUSE недопустимо передавать через PW. Управление потоком данных CE-PE описано в Приложении A.

4.5. Управление

Модель управления Ethernet PW следует общей модели управления PW, определенной в [RFC3985] и [PWE3-MIB]. Здесь представлено много общих средств управления PW без учета специфики Ethernet. Относящиеся к Ethernet параметры определены в отдельном модуле MIB [PW-MIB].

4.6. Управляющее слово CW15

Управляющее слово, определенное в этом параграфе, основано на Generic PW MPLS Control Word из [PWE3-CW]. Оно обеспечивает возможность упорядочить отдельные кадры в PW, а также избежать распределения пакетов между равноценными путями (ECMP) [RFC2992] и применения механизмов OAM16, включая VCCV [VCCV].

В [PWE3-CW] сказано «Если PW реагирует на нарушение порядка пакетов и передается через MPLS PSN с использованием содержимого данных MPLS (payload) для выбора пути ECMP, псевдопровод может реализовать механизм предотвращения нарушений порядка пакетов». Это требуется для того, чтобы реализации ECMP могли проверить первый полубайт после стека меток MPLS для определения принадлежности пакета к протоколу IP. Если MAC-адрес отправителя в кадре Ethernet, передаваемом через PW без управляющего слова, начинается с 0x4 или 0x6, он будет ошибочно сочтен пакетом IPv4 или IPv6. В зависимости от конфигурации и топологии сети MPLS это может приводить к ситуации, где пакеты данного PW будут передаваться по разным путям. В результате может возрасти число кадров с нарушением порядка доставки в данном PW или пакеты OAM пойдут по пути, отличающемуся от пути обычного трафика (см. параграф 4.4.3 Порядок кадров).

Функции, предоставляемые управляющим словом, могут не требоваться для данного Ethernet PW. Например, ECMP может не быть или не использоваться в данной сети MPLS, соблюдение порядка кадров может не требоваться и пр. В таких случаях роль слова управления невелика и оно может не использоваться. Ранние реализации Ethernet PW развертывались без CW и возможности обрабатывать слово управления при его наличии. Для совместимости со старыми версиями будущие реализации должны быть способны передавать и принимать кадры без CW.

Во всех случаях выходной PE должен знать, будет ли входной PE передавать слово управления для конкретного PW. Это можно обеспечить с помощью настройки PE или сигнализации, определенной в [PWE3-CTRL].

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

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 0 0|   Reserved            |       Sequence Number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Первые 4 бита должны иметь значение 0 для указания данных PW. Следующие 12 битов зарезервированы на будущее. Они должны устанавливаться в 0 при передаче и должны игнорироваться получателем.

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

Пространство порядковых номеров имеет размер 16 битов, номера не содержат знака и используются в круговом режиме. Номер 0 указывает, что алгоритм проверки порядковых номеров не применяется. Алгоритм обработки номеров описан в [PWE3-CW].

4.7. Вопросы QoS

Входной PE может учитывать поле пользовательского приоритета (PRI) [802.1Q] в теге VLAN при определении значения поля QoS в протоколе инкапсуляции (например, в полях EXP стека меток MPLS). Аналогично, выходной PE может учитывать поле QoS протокола инкапсуляции (например, поля EXP в стеке меток MPLS) при постановке кадра в очередь для передачи CE.

PE должен поддерживать возможность передачи Ethernet PW как сервиса best-effort через сеть MPLS PSN. Биты PRI сохраняются неизменными между устройствами PE, независимо от поддержки QoS в PSN.

Если PE добавляет тег 802.1Q VLAN, должна поддерживаться установка по умолчанию PRI = 0, рекомендуется поддерживать заданное в конфигурации значение или значение может отображаться из поля QoS в PSN, как сказано выше.

PE может обеспечивать дополнительную поддержку QoS с использованием одного или нескольких методов:

  1. один класс обслуживания (CoS17) на PWES18 отображается на один CoS PW в PSN;

  2. множество CoS на PWES отображается на один PW с множеством CoS в PSN;

  3. множество CoS на PWES отображается на PW в PSN.

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

Гарантированная скорость PW на уровне MPLS PSN определяется политикой сервис-провайдера PW на основе соглашения с абонентом и может отличаться от скорости физического порта Ethernet.

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

К псевдопроводам Ethernet применимы общие вопросы безопасности, рассмотренные в [RFC3985] и [PWE3-CTRL].

Псевдопровод Ethernet проходит через MPLS PSN, поэтому безопасность PW будет обеспечиваться лишь при хорошей защите MPLS PSN. Различные методы защиты MPLS PSN описаны в [MPLS-ARCH].

Защита, обеспечиваемая контролем доступа по MAC-адресам, выходит за рамки документа. Дополнительные требования безопасности для использования PW в коммутируемой среде (виртуальные мосты) выходят за рамки документа и не рассматриваются здесь.

6. Требования PSN MTU

Сеть MPLS PSN должна быть настроена с MTU, достаточно большим для доставки кадров Ethernet максимального размера со словом управления, меткой демульиплексирования и туннельной инкапсуляцией. При использовании MPLS в качестве протокола туннелирования, например, к максимальному размеру кадра добавляется не менее 8 байтов. Можно использовать методологию, описанную в [FRAG], для фрагментирования инкапсулированных кадров с учетом PSN MTU. Однако, если [FRAG] не применяется и входной маршрутизатор видит, что инкапсулированные L2 PDU превосходят размер MTU в туннеле PSN, куда они будут переданы, такие PDU должны отбрасываться.

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

[PWE3-CW] Bryant, S., Swallow, G., and D. McPherson, «Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN», RFC 4385, February 2006.

[IANA] Martini, L., «IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)», BCP 116, RFC 4446, April 2006.

[PWE3-CTRL] Martini, L., El-Aawar, N., Heron, G., Rosen, E., Tappan, D., and T. Smith, «Pseudowire Setup and Maintenance using the Label Distribution Protocol (LDP)», RFC 4447, April 2006.

[MPLS-ARCH] Rosen, E., Viswanathan, A., and R. Callon, «Multiprotocol Label Switching Architecture», RFC 3031, January 2001.

[802.3] IEEE802.3-2005, ISO/IEC 8802-3: 2000 (E), «IEEE Standard for Information technology — Telecommunications and information exchange between systems — Local and metropolitan area networks — Specific requirements — Part 3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications», 2005.

[802.1Q] ANSI/IEEE Standard 802.1Q-2005, «IEEE Standards for Local and Metropolitan Area Networks: Virtual Bridged Local Area Networks», 2005.

[PDU] IEEE Std 802.3, 1998 Edition, «Part 3: Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specifications» figure 3.1, 1998

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

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

[RFC3985] Bryant, S. and P. Pate, «Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture», RFC 3985, March 2005.

[PW-MIB] Zelig, D. and T. Nadeau, «Ethernet Pseudo Wire (PW) Management Information Base», Work in Progress19, February 2006.

[PWE3-REQ] Xiao, X., McPherson, D., and P. Pate, «Requirements for Pseudo-Wire Emulation Edge-to-Edge (PWE3)», RFC 3916, September 2004.

[PWE3-MIB] Zelig, D., Ed. and T. Nadeau, Ed., «Pseudo Wire (PW) Management Information Base», Work in Progress20, February 2006.

[LDP] Andersson, L., Doolan, P., Feldman, N., Fredette, A., and B. Thomas, «LDP Specification», RFC 303621, January 2001.

[FRAG] Malis, A. and W. Townsley, «PWE3 Fragmentation and Reassembly», Work in Progress22, February 2005.

[FCS] Malis, A., Allan, D., and N. Del Regno, «PWE3 Frame Check Sequence Retention», Work in Progress23, September 2005.

[VCCV] Nadeau, T., Ed. and R. Aggarwal, Ed., «Pseudo Wire Virtual Circuit Connectivity Verification (VCCV)», Work in Progress, August 2005.

[RFC2992] Hopps, C., «Analysis of an Equal-Cost Multi-Path Algorithm», RFC 2992, November 2000.

[RFC4026] Andersson, L. and T. Madsen, «Provider Provisioned Virtual Private Network (VPN) Terminology», RFC 4026, March 2005.

[L2TPv3] Lau, J., Townsley, M., and I. Goyret, «Layer Two Tunneling Protocol — Version 3 (L2TPv3)», RFC 3931, March 2005.

9. Основные участники работы

Andrew G. Malis

Tellabs

90 Rio Robles Dr.

San Jose, CA 95134

EMail: Andy.Malis@tellabs.com

Dan Tappan

Cisco Systems, Inc.

1414 Massachusetts Avenue

Boxborough, MA 01719

EMail: tappan@cisco.com

Steve Vogelsang

ECI Telecom

Omega Corporate Center

1300 Omega Drive

Pittsburgh, PA 15205

EMail: stephen.vogelsang@ecitele.com

Vinai Sirkay

Reliance Infocomm

Dhirubai Ambani Knowledge City

Navi Mumbai 400 709

India

EMail: vinai@sirkay.com

Vasile Radoaca

Nortel Networks

600 Technology Park

Billerica MA 01821

EMail: vasile@nortelnetworks.com

Chris Liljenstolpe

Alcatel

11600 Sallie Mae Dr.

9th Floor

Reston, VA 20193

EMail: chris.liljenstolpe@alcatel.com

Kireeti Kompella

Juniper Networks

1194 N. Mathilda Ave

Sunnyvale, CA 94089

EMail: kireeti@juniper.net

Tricci So

Nortel Networks 3500 Carling Ave.,

Nepean, Ontario,

Canada, K2H 8E9.

EMail: tso@nortelnetworks.com

XiPeng Xiao

Riverstone Networks

5200 Great America Parkway

Santa Clara, CA 95054

EMail: xxiao@riverstonenet.com

Christopher O. Flores

T-Systems

10700 Parkridge Boulevard

Reston, VA 20191

USA

EMail: christopher.flores@usa.telekom.de

David Zelig

Corrigent Systems

126, Yigal Alon St.

Tel Aviv, ISRAEL

EMail: davidz@corrigent.com

Raj Sharma

Luminous Networks, Inc.

10460 Bubb Road

Cupertino, CA 95014

EMail: raj@luminous.com

Nick Tingle

TiMetra Networks

274 Ferguson Drive

Mountain View, CA 94043

EMail: nick@timetra.com

Sunil Khandekar

TiMetra Networks

274 Ferguson Drive

Mountain View, CA 94043

EMail: sunil@timetra.com

Loa Andersson

TLA-group

EMail: loa@pi.se

Приложение A. Рекомендации по совместимости

A.1. Конфигурационные опции

Ниже приведен список опций конфигурации для Ethernet PW «точка-точка» в опорных точках, показанных на рисунке 3.

Сервис и инкапсуляция A

Инкапсуляция C

Операции B (вход и выход)

Примечания

1) Raw

Raw — как A

2) Tag1

Tag2

Возможно изменение VLAN

VLAN может быть от 0 до 4095. Изменения возможны в обоих направлениях

3) Нет тега

Тег

Добавление/удаление поля Tag

Тег может быть от 0 до 4095

4) Тег

Нет тега

Удаление/добавление поля Tag

Рисунок 4. Опции конфигурации.


Разрешенные комбинации приведены ниже.

Сервис Raw не разрешено использовать вместе с другими услугами на одном виртуальном порту NSP (A). Все другие комбинации разрешены, если нет конфликтов VLAN в точке (A). Отметим, что в большинстве приложений PW «точка-точка» виртуальный порт NSP совпадает с физическим портом.

A.2. Управление потоком данных IEEE 802.3x

Если приемный узел перегружен, он может передать специальный кадр PAUSE узлу-отправителю на противоположной стороне соединения. Реализация должна обеспечивать механизм локальной обработки кадров PAUSE (например, в локальном PE). Это должно происходить так — кадры PAUSE, принятые на локальном порту Ethernet, следует использовать для перевода устройства PE в режим буферизации или отбрасывания последующих кадров Ethernet для этого порта, пока условие PAUSE не будет снято. Опционально PE может просто отбрасывать кадры PAUSE.

Если устройство PE хочет приостановить прием кадров на локальном порту Ethernet (возможно в результате нехватки локальных буферов или уведомления о перегрузке в PSN), оно может передать кадр PAUSE в локальный порт Ethernet, но должно снять это условие, когда сможет продолжить прием данных.

Приложение B. Детали QoS

В параграфе 4.7. Вопросы QoS описаны разные режимы поддержки PW QOS в сети PSN. Примеры для услуг VLAN «точка-точка» приведены ниже.

  • Классификация PW на основе поля VLAN, но с отображением пользовательских битов PRI на другую маркировку CoS (и поведение сети) на уровне PW. Примером служит отображение PW на E-LSP в сети MPLS.

  • Классификация PW на основе поля VLAN и битов PRI, но с отображением кадров с разными битами PRI на разные PW. Примером служит отображение PWES на разные L-LSP в сети MPLS PSN для поддержки множества CoS в сети с поддержкой L-LSP или отображение PWES на множество сессий L2TPv3 [L2TPv3].

    Конкретные значения, выделяемые в PSN для разных CoS, выходят за рамки этого документа.

B.1. Передача 802.1Q CoS в PSN CoS

Не требуется использовать в PSN определение CoS в соответствии с [802.1Q], а отображение 802.1Q CoS на PSN CoS зависит от приложения и соглашения между абонентом и оператором PW. Однако приведенные ниже принципы из таблицы 8-2 в 802.1Q должны соблюдаться при использовании набора PSN CoS на базе пользовательских битов PRI.


Число доступных классов обслуживания

Пользовательский приоритет

1

2

3

4

5

6

7

8

0 Best Effort (по умолчанию)

0

0

0

1

1

1

1

2

1 Background

0

0

0

0

0

0

0

0

2 Spare

0

0

0

0

0

0

0

1

3 Excellent Effort

0

0

0

1

1

2

2

3

4 Controlled Load

0

1

1

2

2

3

3

4

5 Interactive Multimedia

0

1

1

2

3

4

4

5

6 Interactive Voice

0

1

2

3

4

5

5

6

7 Network Control

0

1

2

3

4

5

6

7

Рисунок 5. Отображение IEEE 802.1Q CoS.


B.2. Предпочтение при отбрасывании

Стандарт 802.1P не поддерживает предпочтений при отбрасывании, поэтому с точки зрения PW PE-bound отображения не требуется. Однако иожно пометить разные предпочтения при отбрасывании для разных кадров PW на основе политики оператора и требуемого поведения сети. Эта функциональность здесь не рассматривается.

Поддержка PSN QoS и сигнализации QoS выходят за рамки этого документа.

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

Luca Martini, Editor

Cisco Systems, Inc.

9155 East Nichols Avenue, Suite 400

Englewood, CO, 80112

EMail: lmartini@cisco.com

Nasser El-Aawar

Level 3 Communications, LLC.

1025 Eldorado Blvd.

Broomfield, CO, 80021

EMail: nna@level3.net

Giles Heron

Tellabs

Abbey Place

24-28 Easton Street

High Wycombe

Bucks

HP11 1NT

UK

EMail: giles.heron@tellabs.com

Eric C. Rosen

Cisco Systems, Inc.

1414 Massachusetts Avenue

Boxborough, MA 01719

EMail: erosen@cisco.com

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

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

nmalykh@gmail.com

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

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 обеспечено IETF Administrative Support Activity (IASA).


1Multi-Protocol Label Switched — многопротокольная коммутация по меткам.

2Packet switched network.

3Pseudowire Emulation Edge-to-Edge.

4Customer Edge.

5Provider Edge.

6Quality of service.

7Native Service Processing.

8Virtual Private Network — виртуальная частная сеть.

9Attachment Circuit.

10Frame check sequence — последовательность проверки кадра.

11Type-Length-Value — тип, размер, значение.

12Label Distribution Protocol — протокол распространения меток.

13Spanning tree protocol — протокол связующего дерева.

14Cyclic Redundancy Check — циклическая контрольная сумма.

15В RFC 8469 приведены несколько отличающиеся рекомендации по использованию слова управления. Прим. перев.

16Operations and Management — операции и поддержка.

17Class of service.

18PW End Service — сервис в конце псевдопровода.

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

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

21Этот документ заменен RFC 5036. Прим. перев.

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

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

Рубрика: RFC | Комментарии к записи RFC 4448 Encapsulation Methods for Transport of Ethernet over MPLS Networks отключены

RFC 4443 Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification

Network Working Group                                           A. Conta
Request for Comments: 4443                                    Transwitch
Obsoletes: 2463                                               S. Deering
Updates: 2780                                              Cisco Systems
Category: Standards Track                                  M. Gupta, Ed.
                                                         Tropos Networks
                                                              March 2006

Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification

Спецификация протокола управляющих сообщений (ICMPv6) для IPv6

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

В этом документе описан формат набора управляющих сообщений, используемых в протоколе ICMPv6 (Internet Control Message Protocol), служащем протоколом управляющих сообщений для IPv6.

1. Введение

Протокол Internet версии 6 (IPv6) использует протокол управляющих сообщений (Internet Control Message Protocol или ICMP), определённый для IPv4 [RFC-792], с множеством изменений. Полученный в результате протокол назван ICMPv6 и использует значение IPv6 Next Header 58.

В этом документе описан формат набора управляющих сообщений, применяемых в ICMPv6. Документ не включает процедуры использования сообщений для решения задач, подобных Path MTU, которые описываются в отдельных документах (например, [PMTU]). В других документах могут также добавляться типы сообщений ICMPv6, такие как Neighbor Discovery [IPv6-DISDISC], в соответствии с базовыми правилами для сообщений ICMPv6, приведёнными в разделе 2 этого документа.

В документе используются термины, определённые в спецификации протокола IPv6 [IPv6] и спецификации адресации и маршрутизации IPv6 [IPv6-ADDR].

Этот документ отменяет действие RFC 2463 [RFC-2463] и обновляет RFC 2780 [RFC-2780].

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

2. ICMPv6 (ICMP для IPv6)

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

2.1. Базовый формат сообщения

Каждое сообщение ICMPv6 имеет заголовок IPv6 и может включать заголовки расширения IPv6. Заголовок ICMPv6 указывается значением Next Header = 58 непосредственно перед сообщением (это отличается от значения, используемого в ICMP для IPv4).

Базовый формат сообщения ICMPv6 показан на рисунке.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                        Тело сообщения                         +
|                                                               |

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

Сообщения ICMPv6 делятся на два класса — информационные и сообщения об ошибках. Ошибки указываются значением 0 в первом бите поля Type, т. е. типами от 0 до 127, а информационные сообщениям имеют тип 128 — 255.

В этом документе определены форматы для перечисленных ниже сообщений ICMPv6.

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

1 Destination Unreachable (адресат недоступен, параграф 3.1);

2 Packet Too Big (пакет слишком велик, параграф 3.2);

3 Time Exceeded (срок действия истёк, параграф 3.3);

4 Parameter Problem (проблема с параметрами, параграф 3.4);

100 Private experimentation (частные эксперименты);

101 Private experimentation (частные эксперименты);

127 Резерв для расширения сообщений ICMPv6 об ошибках.

Информационные сообщения ICMPv6:

128 Echo Request (запрос эхо, параграф 4.1);

129 Echo Reply (эхо-отклик, параграф 4.2);

200 Private experimentation(частные эксперименты);

201 Private experimentation (частные эксперименты);

255 Резерв для расширения информационный сообщений ICMPv6.

Типы 100, 101, 200, 201 зарезервированы для частных экспериментов и не могут применяться для общего пользования. Предполагается возможность одновременного проведения множества экспериментов с этими типами. Для любого широкомасштабного или неконтролируемого использования следует получать код в соответствии с разделом 6.

Значения 127 и 255 зарезервированы для будущего расширения диапазонов при возникновении нехватки. Детали расширения оставлены на будущее. Одним из возможных вариантов, не вызывающих проблем с имеющимися реализациями, является использование для нового назначения с типом 127 или 255 поля кода. Имеющиеся реализации будут игнорировать новые назначения, как описано в п. (b) параграфа 2.4. Новые сообщения, использующие эти расширенные типы, могут использовать в качестве кода поля в теле сообщения.

В разделах 3 и 4 описан формат сообщений ICMPv6 об ошибках с типами 1 — 4 и информационных сообщений типов 128 и 129.

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

2.2. Определение адреса отправителя для сообщения

Создающий сообщение ICMPv6 узел определяет адреса отправителя и получателя в заголовке IPv6 до расчёта контрольной суммы. Если у узла более 1 индивидуального адреса, он должен выбирать Source Address в соответствии с приведёнными ниже правилами.

  1. Если сообщение является откликом на сообщение, направленное по индивидуальному адресу узла, поле Source Address в отклике должно содержать этот адрес.

  2. Если сообщение является откликом на сообщение, направленное по любому другому адресу, такому как:

    • групповой адрес (multicast);

    • универсальный адрес (anycast), имеющийся на узле;

    • индивидуальный адрес, не относящийся к узлу,

    поле Source Address в пакете ICMPv6 должно содержать индивидуальный адрес, относящийся к узлу. Этот адрес следует выбирать по правилам, которые применяются для выбора адреса в других пакетах от данного узла с учётом получателя пакета. Однако адрес можно выбрать иным способом, обеспечивающим более информативный выбор адреса, доступного для получателя пакета ICMPv6.

2.3. Расчёт контрольной суммы сообщения

Контрольная сумма представляет собой 16-битовое дополнение до 1 суммы дополнений до 1 всего сообщения ICMPv6, начиная с поля типа ICMPv6, с добавлением перед ним полей псевдозаголовка IPv6 в соответствии с параграфом 8.1 [IPv6]. Используемое в псевдозаголовке поле Next Header имеет значение 58 (включение псевдозаголовка в контрольную сумму ICMPv6 отличается от IPv4, см. обоснование в [IPv6]).

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

2.4. Правила обработки сообщений

При обработке сообщений ICMPv6 реализации должны соблюдать приведённые ниже правила (из [RFC-1122]).

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

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

  3. Каждое сообщение ICMPv6 об ошибке (тип < 128) должно включать как можно большую часть вызвавшего ошибку пакета IPv6 с учётом минимального значения IPv6 MTU [IPv6] на пути передачи.

  4. В случаях, когда от протокола сетевого уровня требуется передать сообщение ICMPv6 об ошибке процессу вышележащего уровня, протокол вышележащего уровня извлекается из исходного пакета (в теле сообщения ICMPv6) и используется для выбора подходящего процесса вышележащего уровня для обработки ошибки.

    Если тип протокола вышележащего уровня невозможно узнать из сообщения ICMPv6, это сообщение отбрасывается после обработки на уровне IPv6. Одним из примеров служит сообщение ICMPv6, включающее слишком много заголовков расширения и не включающее тип вышележащего протокола в соответствии с ограничением IPv6 MTU [IPv6]. Другим примером является сообщение ICMPv6 с расширением ESP, из которого невозможно расшифровать исходный пакет по причине отсечки или недоступности требуемого для расшифровки состояния.

  5. Недопустимо генерировать сообщения ICMPv6 об ошибках в результате получения:

    1. сообщения ICMPv6 об ошибке;

    2. сообщения ICMPv6 Redirect [IPv6-DISC];

    3. пакета, направленного по групповому адресу IPv6 (здесь имеется 2 исключения: (1) сообщение Packet Too Big (параграф 3.2), позволяющее использовать групповые сообщения при определении Path MTU и (2) Parameter Problem с кодом 2 (параграф 3.4), указывающее нераспознанную опцию IPv6 (см. параграф 4.2 в [IPv6]), имеющую в 2 старших битах Option Type значение 10);

    4. пакета, переданного по групповому адресу канального уровня (с исключениями из п. e.3);

    5. пакета, переданного по широковещательному адресу канального уровня (с исключениями из п. e.3);

    6. пакета, в котором адрес отправителя не указывает один узел, например, IPv6 Unspecified Address, групповой адрес IPv6 или адрес, который создатель сообщения ICMP считает универсальным (anycast).

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

    Рекомендуется контроль частоты передачи с помощью «ведра маркеров» (token bucket), ограничивающего среднюю скорость передачи значением N в пакетах за секунду или доле пропускной способности выходного канала, но разрешающего передачу до B сообщений разом при условии соблюдения средней скорости. Механизмы, не способные контролировать пики трафика (например, traceroute), не рекомендуются. Например, неразумно применять простое ограничение по таймеру, разрешающее передавать сообщение об ошибке каждые T мсек (даже при малых значениях T). Параметры ограничения скорости следует делать настраиваемыми. В случае реализации token-bucket принятые по умолчанию значения зависят от места развёртывания реализации (маршрутизатор или хост). Например, для небольшого устройства можно установить B=10, N=10/сек.

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

В следующих параграфах описаны форматы упомянутых выше сообщений ICMPv6.

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

3.1. Destination Unreachable

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Unused                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Как можно большая часть пакета,                 |
+           вызвавшего сообщение, без превышения пакетом        +
|           ICMPv6 минимального IPv6 MTU для пути [IPv6]        |

Поля IPv6.

Destination Address

Копируется из поля Source Address вызвавшего сообщение пакета.

Поля ICMPv6.

Type

1

Code

0 — нет маршрута к получателю;

1 — связь с адресатом административно запрещена;

2 — выход за пределы области действия адреса отправителя;

3 — адрес недоступен;

4 — порт недоступен;

5 — адрес отправителя не соответствует правилам на входе или выходе;

6 — отвергнут маршрут к адресату.

Unused

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

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

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

Если причиной отказа является нахождение получателя за пределами действия адреса отправителя, устанавливается Code = 2. Область действия адреса получателя определяется областью действия адреса и приёмного интерфейса для пакета, как указано в разделе 9 [IPv6-SCOPE]. Область действия адреса отправителя также определяется адресом и интерфейсом. Это условие может возникать, когда передача пакета на выбранный интерфейс next-hop выводит пакет за пределы действия адреса отправителя1.

Если причину отказа невозможно связать ни с одним кодом, устанавливается Code = 3. Примером таких случаев является невозможность преобразовать адрес получателя IPv6 в соответствующий адрес канального уровня или иные проблемы, связанные с каналом. Одной из конкретных ситуаций создания сообщения Destination Unreachable с кодом 3 является отклик на пакет, принятый маршрутизатором из канала «точка-точка» и предназначенный для получателя в подсети, относящейся к тому же каналу, но не приёмному интерфейсу маршрутизатора. В этом случае пакет недопустимо пересылать обратно в канал.

Получателю следует передать сообщение Destination Unreachable с Code = 4 в ответ на пакет, для которого транспортный протокол (например, UDP) не прослушивает заданный порт, если у этого протокола нет иных способов информировать отправителя.

Если причиной отказа является несоответствие адреса отправителя правилам фильтрации на входе или выходе, в сообщении указывается Code = 5. Если причина отказа заключается в том, что маршрут к получателю отвергнут, устанавливается Code = 6. Это может быть результатом ошибочной настройки отклонения маршрутов к определённому префиксу. Коды 5 и 6 являются более конкретными вариантами кода 1.

Из соображений безопасности реализациям следует разрешать отключение отправки сообщение ICMP о недоступности адресата (предпочтительно на уровне интерфейса.

Уведомление вышележащего уровня

Узел, получивший сообщение ICMPv6 Destination Unreachable, должен уведомить процесс вышележащего уровня, если этот процесс можно определить (параграф 2.4, (d)).

3.2. Packet Too Big

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             MTU                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Как можно большая часть пакета,                 |
+           вызвавшего сообщение, без превышения пакетом        +
|           ICMPv6 минимального IPv6 MTU для пути [IPv6]        |

Поля IPv6.

Destination Address

Копируется из поля Source Address вызвавшего сообщение пакета.

Поля ICMPv6.

Type

2

Code

Устанавливает в 0 отправителем и игнорируется получателем.

MTU

Максимальный размер передаваемого блока в канале к следующему узлу пересылки или получателю (next-hop).

Сообщение Packet Too Big должен передавать маршрутизатор в ответ, на пакет который он не может переслать по причине превышения MTU на исходящем канале. Информация из таких сообщений служит для определения MTU на пути (Path MTU Discovery) [PMTU].

Отправка сообщений Packet Too Big является исключением из приведённых выше правил для сообщений ICMPv6 об ошибках. В отличие от других сообщений они передаются для пакетов, направленных по групповым адресам получателей IPv6, а также групповым и широковещательным адресам канального уровня.

Уведомление вышележащего уровня

Входящее сообщение Packet Too Big должно передаваться соответствующему процессу вышележащего уровня, если его можно определить (параграф 2.4, (d)).

3.3. Time Exceeded

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Unused                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Как можно большая часть пакета,                 |
+           вызвавшего сообщение, без превышения пакетом        +
|           ICMPv6 минимального IPv6 MTU для пути [IPv6]        |

Поля IPv6.

Destination Address

Копируется из поля Source Address вызвавшего сообщение пакета.

Поля ICMPv6.

Type

3

Code

0 — достигнут предел узлов пересылки (Hop limit);

1 — превышено время сборки фрагментов.

Unused

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

Если маршрутизатор получает пакет с Hop Limit = 0 или декрементирует это поле до 0, он должен отбросить пакет и передать сообщение ICMPv6 Time Exceeded с Code = 0 для отправителя пакета. Это говорит о петле в маршрутизации или слишком малом значении Hop Limit в исходном пакете.

ICMPv6 Time Exceeded с Code = 1 служит для информирования о тайм-ауте при сборке фрагментов, как указано в параграфе 4.5 [IPv6].

Уведомление вышележащего уровня

Входящее сообщение Time Exceeded должно передаваться соответствующему процессу вышележащего уровня, если его можно определить (параграф 2.4, (d)).

3.4. Parameter Problem

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Pointer                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Как можно большая часть пакета,                 |
+           вызвавшего сообщение, без превышения пакетом        +
|           ICMPv6 минимального IPv6 MTU для пути [IPv6]        |

Поля IPv6.

Destination Address

Копируется из поля Source Address вызвавшего сообщение пакета.

Поля ICMPv6.

Type

4

Code

0 — ошибка в поле заголовка;

1 — нераспознанный тип Next Header;

2 — нераспознанная опция IPv6.

Pointer

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

Если узел IPv6, обрабатывающий пакет, обнаруживает проблему в поле заголовка IPv6 или заголовков расширения, не позволяющую полностью обработать пакет, он должен отбросить пакет, а также следует передать сообщение ICMPv6 Parameter Problem отправителю исходного пакета, указывающее тип и местоположение ошибки.

Коды 1 и 2 являются более информативными вариантами кода 0.

Указатель идентифицирует октет в заголовке исходного пакета, где была обнаружена ошибка. Например, сообщение ICMPv6 с Type = 4, Code = 1 и Pointer = 40 будет говорить о нераспознанном значении поля Next Header в заголовке расширения IPv6, следующем после заголовка IPv6 в исходном пакете.

Уведомление вышележащего уровня

Узел, получивший это сообщение, должен уведомить процесс вышележащего уровня, если этот процесс можно определить (параграф 2.4, (d)).

4. Информационные сообщения ICMPv6

4.1. Echo Request

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |        Sequence Number        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Data ...
+-+-+-+-+-

Поля IPv6.

Destination Address

Любой действительный адрес IPv6.

Поля ICMPv6.

Type

128

Code

0

Identifier

Идентификатор, используемый для сопоставления Echo Reply с данным Echo Request. Может иметь значение 0.

Sequence Number

Порядковый номер для сопоставления Echo Reply с данным Echo Request. Может иметь значение 0.

Data

Необязательные октеты произвольных данных.

Каждый узел должен реализовать функцию ответа на сообщения ICMPv6 Echo Request соответствующими сообщениями Echo Reply. Узлу следует также реализовать интерфейс прикладного уровня для генерации Echo Request и приёма Echo Reply в целях диагностики.

Уведомление вышележащего уровня

Сообщения Echo Request могут передаваться процессам, обрабатывающим сообщения ICMP.

4.2. Echo Reply

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |        Sequence Number        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Data ...
+-+-+-+-+-

Поля IPv6.

Destination Address

Копируется из поля Source Address в соответствующем пакете Echo Request.

Поля ICMPv6.

Type

129

Code

0

Identifier

Идентификатор из соответствующего сообщения Echo Request.

Sequence Number

Порядковый номер из соответствующего сообщения Echo Request.

Data

данные из соответствующего сообщения Echo Request.

Каждый узел должен реализовать функцию ответа на сообщения ICMPv6 Echo Request соответствующими сообщениями Echo Reply. Узлу следует также реализовать интерфейс прикладного уровня для генерации Echo Request и приёма Echo Reply в целях диагностики.

Адрес отправителя Echo Reply в ответ на индивидуальное сообщение Echo Request должен совпадать с адресом получателя в Echo Request.

Echo Reply следует передавать в ответ на сообщение Echo Request по групповому адресу IPv6 или anycast-адресу. В этом случае адресом отправителя в отклике должен быть индивидуальный адрес интерфейса, через который было получено сообщение Echo Request.

Данные, полученные в сообщении ICMPv6 Echo Request, должны полностью возвращаться без изменений в сообщении ICMPv6 Echo Reply.

Уведомление вышележащего уровня

Сообщение Echo Reply должно передаваться процессу, отправившему сообщение Echo Request и может передаваться другим процессам.

Отметим, что объем данных в Echo Request и Echo Reply не ограничивается.

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

5.1. Проверка подлинности и конфиденциальность сообщений ICMP

Подлинность обмена пакетами протокола ICMP можно проверить с помощью заголовка аутентификации IP (Authentication Header) [IPv6-AUTH] или заголовка IP ESP (Encapsulating Security Payload) [IPv6-ESP]. Конфиденциальность обмена пакетами ICMP можно обеспечить с помощью IP ESP [IPv6-ESP]. В [SEC-ARCH] подробно описано использование IPsec для трафика ICMP.

5.2. Атаки на ICMP

Сообщения ICMP могут подвергаться разным атакам. Полное рассмотрение этого вопроса приведено в документе IP Security Architecture [IPv6-SA], а ниже кратко рассмотрены атаки и способы их предотвращения.

  1. Сообщения ICMP могут подвергаться действиям, направленным на то, чтобы получатель принял ложного отправителя за настоящего. Защитой от таких атак может быть применение механизма аутентификации IPv6 Authentication [IPv6-AUTH] для сообщений ICMP.

  2. Сообщения ICMP могут подвергаться действиям, направленным на то, чтобы сообщение или ответ на него было отправлено в другое место. Защиту от таких атак можно обеспечить с помощью заголовков AH [IPv6-AUTH] или ESP [IPv6-ESP]. AH обеспечивает защиту от изменения адресов отправителя и получателя в пакете IP, а ESP не обеспечивает такой защиты, но позволяет включить адреса в контрольную сумму ICMP и защитить её. Поэтому комбинация контрольной суммы ICMP и заголовка ESP также защищает от таких атак. Защита с помощью ESP слабее защиты AH.

  3. Сообщения ICMP могут подвергаться действиям, направленным на изменение полей заголовка или данных. Аутентификация [IPv6-AUTH] или шифрование [IPv6-ESP] сообщений ICMP защитят от таких атак.

  4. Сообщения ICMP могут применяться для атак на службы (denial-of-service или DoS) за счёт возврата ошибочный пакетов IP. Реализация, корректно соблюдающая правило (f) из параграфа 2.4 в данной спецификации, будет защищена механизмом ограничения скорости передачи сообщений ICMP об ошибках.

  5. Второе исключение из правила e.3 в параграфе 2.4 даёт злонамеренному узлу возможность вызвать DoS-атаку на источник групповой рассылки. Такой узел может отправить групповой пакет с неизвестной получателям опцией, помеченной как обязательная, и адресом отправителя IPv6, содержащим действительный групповой адрес. В результате множество получателей отправит сообщение ICMP Parameter Problem групповому источнику, вызывая DoS-атаку. Способ пересылки группового трафика multicast-маршрутизаторами требует для организации такой атаки, чтобы злонамеренный узел находился в корректном пути группового трафика, т. е. вблизи источника. Таких атак можно избежать лишь защитой группового трафика. Источнику такого трафика следует быть осторожным при передаче групповых пакетов с пометкой опций как обязательных, поскольку это может вызвать DoS-атаку, если опцию многие получатели не поймут.

  6. Сообщения ICMP передаются процессам вышележащего уровня и этом можно применить для атак на вышележащий протокол (например, TCP) с помощью ICMP [TCP-attack]. Вышележащим уровням рекомендуется применять ту или иную форму проверки сообщений ICMP (используя информацию из поля данных ICMP) до реагирования на них. Реальная проверка зависит от вышележащего уровня и выходит за рамки этого документа. Защита вышележащего уровня с помощью IPsec ослабляет такие атаки.

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

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

6.1. Процедура выделения новых значений ICMPV6 Type и Code

Определённый в этом документе заголовок IPv6 ICMP содержит поля Type и Code с управляемыми IANA пространствами имён. Значения кодов определяются отдельно для каждого типа.

Значения полей IPv6 ICMP Type выделяются с использованием описанных ниже процедур.

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

  2. Рабочие группы IETF по внутреннему согласования и одобрению руководителя направления могут запрашивать возвращаемые значения для типов ICMPV6, которые IANA помечает как подлежащие возврату в будущем (reclaimable in future). Такая пометка может быть удалена при публикации RFC для протокола, как указано в п. 1, что делает выделение постоянным с обновлением ссылки на web-страницах IANA.

    При заполнении пространства типов ICMPv6 на 85% IETF будет рассматривать назначения с пометкой «reclaimable in the future» и информировать IANA о возможности их возврата и повторного выделения.

  3. Запросы на выделение новых типов ICMPv6 вне процессов IETF выполняются лишь путём публикации документа IETF, как указано в п. 1. Отметим, что документы со статусом RFC Editor contributions [RFC-3978], не считаются документами IETF.

Назначение новых значений Code для значений Type, определённых в этом документе, требует стандартизации и одобрения IESG. Политику назначения Code для новых IPv6 ICMP Type следует задавать в документах, определяющих новый тип.

6.2. Выделенные значения

Обновляемый список выделенных значений доступен по ссылке http://www.iana.org/assignments/icmpv6-parameters. Агентство IANA заново выделило для ICMPv6 типа 1 Destination Unreachable код 2, назначенный в [RFC-2463]:

2 — Beyond scope of source address

Агентство IANA выделило два новых кода для ICMPv6 типа 1 Destination Unreachable:

5 — Source address failed ingress/egress policy

6 — Reject route to destination

Агентство IANA выделило новые значения типов:

100 Private experimentation

101 Private experimentation

127 Reserved for expansion of ICMPv6 error messages

200 Private experimentation

201 Private experimentation

255 Reserved for expansion of ICMPv6 informational messages

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

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

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

[IPv6-DISC] Narten, T., Nordmark, E., and W. Simpson, «Neighbor Discovery for IP Version 6 (IPv6)», RFC 24613, December 1998.

[IPv6-SCOPE]4 Deering, S., Haberman, B., Jinmei, T., Nordmark, E., and B. Zill, «IPv6 Scoped Address Architecture», RFC 4007, March 2005.

[RFC-792] Postel, J., «Internet Control Message Protocol», STD 5, RFC 792, September 1981.

[RFC-2463] Conta, A. and S. Deering, «Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification», RFC 2463, December 1998.

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

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

[RFC-3978] Bradner, S., «IETF Rights in Contributions», BCP 78, RFC 3978, March 2005.

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

[RFC-2780] Bradner, S. and V. Paxson, «IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers», BCP 37, RFC 2780, March 2000.

[IPv6-ADDR] Hinden, R. and S. Deering, «Internet Protocol Version 6 (IPv6) Addressing Architecture», RFC 35135, April 2003.

[PMTU] McCann, J., Deering, S., and J. Mogul, «Path MTU Discovery for IP version 6», RFC 1981, August 1996.

[IPv6-SA] Kent, S. and R. Atkinson, «Security Architecture for the Internet Protocol», RFC 24016, November 1998.

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

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

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

[TCP-attack] Gont, F., «ICMP attacks against TCP», Work in Progress8.

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

Документ основан на прежних публикациях по ICMP рабочих групп SIPP и IPng.

Рабочая группа IPng и, в частности, Robert Elz, Jim Bound, Bill Simpson, Thomas Narten, Charlie Lynn, Bill Fink, Scott Bradner, Dimitri Haskin, Bob Hinden, Jun-ichiro Itojun Hagino, Tatuya Jinmei, Brian Zill, Pekka Savola, Fred Templin, Elwyn Davies (в хронологическом порядке) предоставили обстоятельные рецензии и отклики.

Bob Hinden был редактором этого документа.

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

  • Раздел «Аннотация» стал более подробным.

  • Исправлены опечатки в параграфе 2.4, где ссылки на e.2 заменены ссылками на e.3.

  • Удалены механизмы ограничения скорости передачи сообщений ICMP об ошибках на основе скорости и пропускной способности, а вместо них предложен механизм Token-bucket.

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

  • В описание сообщения Destination Unreachable с кодом Code 3 добавлено правило, запрещающее пересылку пакета обратно в канала «точка-точка», если адресат относится к тому же каналу (предотвращение «пинг-понга»).

  • Добавлено описание Time Exceeded для кода 1 (тайм-аут при сборке фрагментов).

  • Добавлены сообщения «beyond scope of source address», «source address failed ingress/egress policy», «reject route to destination» в группу сообщений о недоступности адресата (параграф 3.1).

  • Зарезервированы типы ICMP для экспериментов.

  • Добавлено примечание в параграфе 2.4, указывающее приоритет правил обработки сообщений ICMP.

  • Добавлено сообщение ICMP REDIRECT в п. (e) параграфа 2.4, для случаев, когда сообщения ICMP об ошибках не создаются.

  • Внесены правки в параграф 2.3 для расчёта контрольной суммы и параграф 5.2.

  • В параграф 4.2 внесены разъяснения для сообщения Echo Reply в части использования индивидуального адреса отправителя откликов на anycast-запросы Echo Request, как в случае multicast.

  • Пересмотрен раздел «Вопросы безопасности». Добавлено использование заголовков ESP для аутентификации. Требование для опции запрета неаутентифицированных сообщений ICMP сменено со следует на можно.

  • Добавлена новая атака в список возможных атак на ICMP параграфа 5.2.

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

  • Добавлена ссылка на RFC 2780 «IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers», а также примечание, что этот документ обновляет RFC 2780.

  • Добавлена процедура выделения новых типов и кодов в раздел «Взаимодействие с IANA».

  • Слово «передать» (send) заменено словом «создать» (originate), чтобы прояснить, что вопросы пересылки пакетов ICMP выходят за рамки спецификации.

  • Изменены ссылки для ESP и AH на обновлённые документы.

  • Добавлена ссылка на обновленный документ IPsec Security Architecture.

  • Добавлено требование следует в части контроля запрета отправки сообщений ICMP о недоступности адресата.

  • Упрощён выбор адреса отправителя для пакетов ICMPv6.

  • Изменён базовый формат сообщений (параграф 2.1).

  • Добавлен текст об атаках на транспортные протоколы, которые можно организовать с помощью ICMP.


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

Alex Conta

Transwitch Corporation

3 Enterprise Drive

Shelton, CT 06484

USA

EMail: aconta@txc.com

Stephen Deering

Cisco Systems, Inc.

170 West Tasman Drive

San Jose, CA 95134-1706

USA

Mukesh Gupta, Ed.

Tropos Networks

555 Del Rey Avenue

Sunnyvale, CA 94085

Phone: +1 408-331-6889

EMail: mukesh.gupta@tropos.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 обеспечено IETF Administrative Support Activity (IASA).


1В оригинале текст этого абзаца содержал неточности. См. https://www.rfc-editor.org/errata/eid6153. Прим. перев.

2Документ заменён RFC 8200. Прим. перев.

3Документ заменён RFC 4861. Прим. перев.

4В оригинале эта ссылка отсутствует. См. https://www.rfc-editor.org/errata/eid6153. Прим. перев.

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

6Заменён RFC 4301. Прим. перев.

7В оригинале ошибочно указано RFC 4203. См. https://www.rfc-editor.org/errata/eid1918. Прим. перев.

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

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

RFC 4341 Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control

Network Working Group                                           S. Floyd
Request for Comments: 4341                                          ICIR
Category: Standards Track                                      E. Kohler
                                                                    UCLA
                                                              March 2006

 

Профиль контроля насыщения CCID 2: TCP-like Congestion Control для протокола DCCP

Profile for Datagram Congestion Control Protocol (DCCP)

Congestion Control ID 2: TCP-like Congestion Control

PDF

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

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

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

Copyright (C) The Internet Society (2006).

Аннотация

Этот документ содержит профиль механизма контроля насыщения CCID 2 (TCP-like Congestion Control1) для протокола DCCP2. Механизм CCID 2 следует использовать отправителям, которые хотят использовать всю доступную полосу в среде с быстро изменяющимися условиями и могут адаптироваться к внезапным изменениям размера окна насыщения, характерным для механизма AIMD3 в TCP.

1. Введение

Этот документ содержит профиль механизма контроля насыщения CCID 2 (TCP-like Congestion Control) для протокола DCCP[RFC4340]. Протокол DCCP использует идентификаторы механизмов контроля насыщения или CCID для того, чтобы указать механизм контроля насыщения, применяемый в полусоединении.

Механизм контроля в стиле TCP передает данные с использованием механизма, близкого к механизму контроля насыщения в TCP и включающего вариант селективных подтверждений (SACK) [RFC2018, RFC3517]. Механизм CCID 2 подходит для отправителей, которые могут адаптироваться к внезапным изменениям размера окна насыщения, типичным для алгоритма AIMD в TCP, и особенно полезен для приложений, которые хотят воспользоваться всей доступной полосой в среде с быстро изменяющимися условиями. Более подробное описание применения механизма содержится в главе 3.

2. Использование терминов

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

Полусоединение DCCP включает данные приложения, передаваемые одной конечной точкой, и соответствующие подтверждения, передаваемые другой конечной точкой. Термины HC-Sender и HC-Receiver обозначают конечные точки, передающие данные приложения и подтверждения, соответственно. Поскольку CCID используется на уровне полусоединения, в этом документе вместо HC-Sender мы будем иногда писать просто «отправитель», а вместо HC-Receiver – «получатель». Более подробную информацию можно найти в [RFC4340].

Для простоты мы будем предполагать, что отправители передают пакеты DCCP-Data, а получатели – пакеты DCCP-Ack. Пакеты DCCP-DataAck относятся к обеим категориям.

Термины «маркированный ECN» и «маркированный» относятся к пакетам, содержащим в себе маркер насыщения ECN Congestion Experienced, если явно не указано иное.

3. Применение

CCID 2 (TCP-like Congestion Control4) подходит для потоков DCCP, которым хочется на продолжительное время получить максимально возможную пропускную способность согласованно со сквозным контролем насыщения. Потоки CCID 2 должны также быть устойчивы к значительным вариациям характеристик скорости передачи контроля насыщения AIMD, включая снижение вдвое окна насыщения по факту возникновения перегрузки.

Приложениям, которым просто нужно передать как можно больше данных за минимально возможное время, следует использовать CCID 2. Этот метод отличается от CCID 3 (TFRC5) [RFC4342], который подходит для потоков, предпочитающих минимизировать скачки скорости передачи. Например, CCID 2 предпочтительней CCID 3 для потоковых приложений, которые буферизуют значительный объем данных на приемной стороне до их реального вывода, что обеспечивает устойчивость к значительным колебаниям скорости передачи. Такие приложения предпочтут DCCP CCID 2 обычному протоколу TCP, возможно с некоторым повышением уровня надежности в самих приложениях. CCID 2 также будет предпочтительней CCID 3 для приложений, вдвое снижающих скорость передачи в ответ на перегрузку, поскольку в этом случае не будет возникать конфликтов на уровне приложения.

Дополнительным преимуществом CCID 2 является то, что похожие на TCP механизмы контроля насыщения достаточно хорошо известны и динамика трафика подобна динамике для TCP. Хотя исследовательское сообщество продолжает изучать динамику TCP после того, как в течение 15 он является доминирующим транспортным протоколом в Internet, для некоторых приложений может оказаться предпочтительной хорошо известная динамика похожего на TCP контроля насыщения по сравнению с более новыми механизмами такого контроля, которые еще не получили широкого распространения в Internet.

3.1. Связь с TCP

Описанные здесь механизмы контроля насыщения весьма похожи на стандартизованные IETF механизмы для использования в TCP на основе SACK и частично опираются на имеющиеся документы TCP [RFC793], [RFC2581], [RFC3465] и [RFC3517]. Контроль насыщения в TCP продолжает развиваться, но реализациям CCID 2 следует ждать явных обновлений CCID 2, а не отслеживать непосредственно развитие TCP.

Различия между CCID 2 и прямым контролем насыщения TCP включают перечисленные ниже аспекты.

  • CCID 2 применяет контроль насыщения к подтверждениям — для использования в TCP такой механизм еще не стандартизован.

  • DCCP представляет собой протокол передачи дейтаграмм, поэтому некоторые параметры, задаваемые для TCP в байтах (например, окно насыщения cwnd), в DCCP задаются числом пакетов.

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

3.2. Пример полусоединения

Этот пример показывает процесс создания полусоединения с использованием похожего на TCP контроля насыщения CCID 2. Пример не является нормативным и служит для иллюстрации.

  1. Отправитель передает пакеты DCCP-Data, при этом число переданных пакетов определяется окном насыщения cwnd, как в TCP. В каждом пакете DCCP-Data используется порядковый номер. Отправитель также передает опцию Ack Ratio, задающую число пакетов данных, «покрываемых» подтверждением Ack от получателя (по умолчанию Ack Ratio = 2). Поле CCVal в заголовке DCCP имеет значение 0.

    Предположим, что полусоединение поддерживает ECN6 (по умолчанию ECN Incapable = 0) и каждый пакет DCCP-Data передается с полем ECN Capable, имеющим значение ECT(0) или ECT(1), как описано в [RFC3540].

  2. Получатель передает пакет DCCP-Ack подтверждающий доставку пакетов данных для каждых Ack Ratio пакетов данных, переданных отправителем. Каждый пакет DCCP-Ack использует порядковый номер и содержит Ack Vector. Порядковый номер, подтверждаемый в DCCP-Ack, является старшим из порядковых номеров в принятых пакетах; это не кумулятивное подтверждение, подобное используемому в TCP.

    Получатель возвращает набор полученных ECN Nonce с помощью опции Ack Vector, позволяя отправителю вероятностно проверить корректность поведения получателя. Пакеты DCCP-Ack от получателя передаются, как поддерживающие ECN (ECN Capable), поскольку отправитель будет контролировать скорость подтверждений подобно TCP, используя опцию Ack Ratio. Получателю нет необходимости проверять значения nonce в своих пакетах DCCP-Ack, поскольку отправитель не сможет получить существенных преимуществ в результате некорректного представления скорости подтверждений.

  3. Отправитель продолжает передачу пакетов DCCP-Data под контролем окна насыщения. При получении пакетов DCCP-Ack отправитель проверяет свои Ack Vector для определения маркированных или отброшенных пакетов данных и соответствующей подстройки своего окна насыщения. Поскольку этот транспорт не обеспечивает гарантий, отправитель не повторяет передачу отброшенных пакетов.

  4. Поскольку в пакетах DCCP-Ack используются порядковые номера, у отправителя есть некоторая информация о потерянных или промаркированных пакетах DCCP-Ack. Отправитель отвечает на потерю или маркировку пакетов DCCP-Ack изменением значения Ack Ratio отправляемого получателю.

  5. Отправитель подтверждает получателю пием подтверждений хотя бы один раз в окне насыщения. Если оба полусоединения активны, подтверждение отправителем приема подтверждений от получателя включается в подтверждение отправителем приема от получателя пакетов данных. Если обратное полусоединение бездействует, отправитель передает по крайней мере один пакет DCCP-DataAck на окно насыщения.

  6. Отправитель оценивает интервалы кругового обхода путем отслеживания времени возврата подтверждений, как это делает TCP, или с помощью явной опции Timestamp и рассчитывает значение TimeOut (TO), как в TCP рассчитывается значение RTO (Retransmit Timeout — тайм-аут повтора). Значение TO определяет, когда может быть передан новый пакет DCCP-Data, если отправитель был ограничен окно насыщения и от получателя не приходило обратной связи.

4. Организация соединения

Использование Ack Vector обязательно на полусоединениях CCID 2, поэтому отправитель должен передать опцию Change R(Send Ack Vector, 1) в процессе организации соединения. Отправителю недопустимо передавать данные, пока он не получит соответствующей опции Confirm L(Send Ack Vector, 1) от получателя. Исключением является возможность передавать пакеты DCCP-Request.

5. Контроль насыщения для пакетов данных

Механизмы контроля насыщения CCID 2 основаны на методах, используемых TCP на основе SACK [RFC3517], поскольку Ack Vector обеспечивает всю информацию, которая может быть передана в опциях SACK.

Отправитель данных CCID 2 поддерживает 3 целочисленных параметра (число пакетов), описанных ниже.

  1. Окно насыщения cwnd задает максимальное число пакетов данных, которые могут находиться в сети в любой момент времени (пакетами данных считаются любые пакеты DCCP, содержащие данные пользователя, — DCCP-Data, DCCP-DataAck, а в некоторых случаях DCCP-Request и DCCP-Response).

  2. Порог замедленного старта (slow-start) ssthresh, определяющий подстройку значения cwnd.

  3. Параметр pipe, показывающий оценку отправителем числа пакетов данных, остающихся в сети.

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

Отправитель может передать пакет данных, когда pipe < cwnd, но передача недопустима, если pipe >= cwnd. Каждый отправленный пакет данных увеличивает значение pipe на 1.

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

  1. Пакет данных подтвержден. Отправитель уменьшает pipe на 1 для каждого пакета данных, недавно подтвержденного в принятом (Ack Vector State 0 или State 1) DCCP-Ack.

  2. Пакет данных отброшен. Отправитель уменьшает pipe на 1 для каждого пакета данных, который он может считать потерянным в соответствии с DCCP-эквивалентом дубликата подтверждения TCP. Это зависит от параметра NUMDUPACK, задающего число дубликатов подтверждений, требуемых для фиксации потери. Для параметра NUMDUPACK устанавливается значение 3, как принято сейчас в TCP. Пакет P считается потерянным, а не задержанным, когда не менее NUMDUPACK пакетов, переданных после P были подтверждены (Ack Vector State 0 или 1) получателем. Отметим, что пакеты подтверждения, следующие за пропуском, могут быть пакетами DCCP-Ack или другими пакетами без данных.

  3. Тайм-аут при передаче. Наконец, отправителю нужны тайм-ауты передачи, обрабатываемые подобно тайм-аутам повтора TCP, когда потеряно целое окно пакетов. Отправитель оценивает время кругового обхода не более одного раза на окно данных и применяет алгоритмы TCP для поддержки среднего значения периода кругового обхода и значения тайм-аута [RFC2988] (если для расчета было использовано более одного измерения за период кругового обхода, нужно будет отрегулировать весовые коэффициенты усреднителей, чтобы обеспечить эффективный вывод среднего времени кругового обхода из множества измерений). Поскольку DCCP не повторяет передачу данных, здесь не требуется рекомендуемого TCP минимального тайм-аута в 1 секунду. Экспоненциальное изменение таймера совпадает с используемым в TCP. При возникновении тайм-аута передачи отправитель устанавливает pipe=0. Настройка cwnd и ssthresh описана ниже.

Отправителю недопустимо декрементировать pipe более одного раза на пакет данных. Например, недопустимо влияние на pipe действительных подтверждений. Отправителю также недопустимо уменьшать pipe при получении подтверждения пакета, который считался потерянным. Кроме того, отправителю недопустимо уменьшать pipe для пакетов, не содержащих данных (таких как DCCP-Ack), даже если Ack Vector содержит информацию о них.

Фауты перегрузки заставляют CCID 2 снижать свое окно насыщения. Событие перегрузки включает хотя бы одну потерю или помеченный пакет. Как и в TCP, две потери или маркировки считаются одним событием, если второй пакет был передан до обнаружения потери или маркировки первого. В качестве аппроксимации отправитель может считать две потери или маркировки частью одного события, если пакеты были переданы в интервале между двумя оценками RTT с использованием текущей оценки RTT в моменты передачи пакетов. Для каждого факта перегрузки, указанного явно как подтверждение Ack Vector State 1 (маркировка ECN) или выведенного из подтверждений дубликатов, значение cwnd делится пополам, а затем для ssthresh устанавливается новое значение cwnd. Значение cwnd никогда не бывает меньше 1. После тайм-аута для порога slow-start устанавливается значение cwnd/2, затем устанавливается cwnd = 1. При делении пополам значения cwnd и ssthresh округляются в сторону уменьшения, если при этом cwnd не становится меньше 1, а ssthresh меньше 2.

Когда cwnd < ssthresh (это означает режим slow-start у отправителя), окно насыщения увеличивается на 1 пакет для каждой пары недавно подтвержденных пакетов данных с Ack Vector State 0 (без маркера ECN) до максимального значения Ack Ratio/2 пакетов на подтверждение. Это измененный вариант Appropriate Byte Counting [RFC3465], соответствующий текущему стандарту TCP (не включает подсчет байтов), но позволяющий CCID 2 увеличиваться так же быстро, как и TCP, когда Ack Ratio в CCID 2 больше принятого по умолчанию значения 2. Когда cwnd >= ssthresh, окно насыщения увеличивается на 1 пакет для каждого окна данных, подтвержденного без потери и маркировки пакетов. Параметр cwnd инициализируется значением не более 4 пакетов для новых соединений в соответствии с правилами [RFC3390], параметр ssthresh инициализируется произвольно высоким значением.

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

5.1. Отклик на периоды бездействия и ограничений от приложения

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

Для периодов бездействия в соответствии с [RFC2581] отправителю TCP следует перейти в состояние slow-start после интервала бездействия, который определяется как интервал, превосходящий значение тайм-аута. [RFC2861]7, имеющий статус Experimental, предлагает более умеренный механизм, где окно насыщения делится пополам за каждый интервал кругового обхода, в течение которого отправитель не передавал данных.

В настоящее время нет стандартов, определяющих использование окна насыщения TCP в периоды ограниченной приложениям передачи данных. В частности, окно насыщения TCP может стать достаточно большим в течение продолжительного интервала без перегрузки, когда отправитель передает данные с малой скоростью. [RFC2861], по сути, предлагает не увеличивать окно насыщения TCP в периоды ограниченной приложением передачи данных, когда окно насыщения не используется полностью.

5.2. Реакция на отбрасывание данных и медленных получателей

Опция Data Dropped в DCCP позволяет получателю сообщить, что пакет данных был отброшен на конечном узле до его передачи приложению (например, по причине повреждения пакета или переполнения приемного буфера). Опция Slow Receiver позволяет получателю сообщить о наличии проблем с пакетами отправителя, хотя ни один из них не был отброшен. Отправители CCID 2 отвечают на эти опции в соответствии с [RFC4340] и приведенными ниже уточнениями.

  • Drop Code 2 (отбрасывание в буфере приема). Окно насыщения cwnd уменьшается на 1 для каждого пакета, вновь подтвержденного как Drop Code 2, но никогда не снижается до значений меньше 1.

  • Отправитель должен выйти из состояния slow-start при получении соответствующей опции Data Dropped или Slow Receiver.

5.3. Размер пакетов

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

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

Реализации CCID 2 могут проверять приложения, которые представляются неправомерно изменяющими размер пакетов. Например, приложение может передавать мелкие пакеты, наращивая их скорость, а затем увеличить размер пакетов для достижения более высокой скорости (предварительное моделирование показывает, что приложения не смогут повысить таким путем общую скорость, поэтому применение таких действий на практике не очевидно [V03]).

6. Подтверждения

Подтверждения CCID 2 обычно передаются отправителем пакетов данных. Каждое требуемое подтверждение должно содержать опции Ack Vector, точно указывающие принятые пакеты и наличие маркеров ECN. Данным подтверждения в опциях Ack Vector обычно следует учитывать все окно подтверждений (Acknowledgement Window, см. параграф 11.4.2 в [RFC4340]. Любым опциям Data Dropped также следует охватывать все окно подтверждений получателя.

Отправители CCID 2 используют функцию Ack Ratio в DCCP для влияния на скорость, с которой получатель генерирует пакеты DCCP-Ack, что позволяет контролировать перегрузку обратного пути. Это отличается от TCP, где в настоящее время нет контроля насыщения для чистого трафика подтверждений. Контроль перегрузки обратного пути в CCID 2 не пытается быть дружественным к TCP, а лишь старается избежать перегрузок и быть несколько лучше TCP при высокой частоте потери или маркировки пакетов на обратном пути. По умолчанию Ack Ratio = 2 и CCID 2 с таким Ack Ratio ведет себя подобно TCP с отложенными подтверждениями. В параграфе 11.3 [RFC4340] приведено более подробное описание Ack Ratio, включая связь с темпом отправки подтверждений и пакетов DCCP-DataAck. В параграфе 6.1.1 этого документа описано, как отправитель CCID 2 детектирует потерю и маркировку подтверждений, а в параграфе 6.1.2 описано изменение Ack Ratio.

6.1. Контроль насыщения для подтверждений

При Ack Ratio = R получатель передает пакет DCCP-Ack на каждые R пакетов данных (более или менее). Поскольку отправитель передает cwnd пакетов данных ха период кругового обхода, скорость подтверждений составляет cwnd/R DCCP-Ack за период кругового обхода. Отправитель поддерживает скорость подтверждений примерно на уровне TCP, выполняя мониторинг потока подтверждений на предмет потери и маркировки пакетов DCCP-Ack и соответственно меняет R. Для каждого RTT с событием перегрузки для DCCP-Ack (потеря или маркировка DCCP-Ack) отправитель снижает вдвое скорость отправки подтверждений путем удваивания Ack Ratio. Для каждого RTT без перегрузки для DCCP-Ack скорость отправки подтверждений увеличивается путем постепенного снижения Ack Ratio.

6.1.1. Детектирование потерянных и помеченных подтверждений

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

Пакеты DCCP-Ack обычно малы, поэтому они могут создавать меньшую нагрузку в насыщенной сети по сравнению с пакетами DCCP-Data и DCCP-DataAck. По этой причине Ack Ratio зависит от частоты потери и маркировки пакетов без данных, а не от суммарной частоты потери и маркировки всех пакетов от получателя. Категория пакетов без данных включает пакеты, которые не могут содержать данных приложений — DCCP-Ack, DCCP-Close, DCCP-CloseReq, DCCP-Reset, DCCP-Sync, DCCP-SyncAck. Отправитель может легко отличит маркировку пакетов без данных от иной маркировки. Для потери это сложней, поскольку отправитель не всегда может знать о наличии или отсутствии данных в потерянном пакете. Если у отправителя нет более надежной информации, ему следует считать для целей расчета Ack Ratio, что каждый потерянный пакет не содержал данных. Более надежную информацию можно получить с помощью опции DCCP NDP Count, если это нужно (в приложении B рассмотрены издержки, связанные с ошибочным учетом потери пакетов с данными как потери пакетов без данных)

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

6.1.2. Изменение Ack Ratio

Ack Ratio всегда следует трем ограничениям: (1) является целым числом, (2) не превышает cwnd/2 с округлением вверх, за исключением то, что Ack Ratio = 2 всегда приемлемо, (3) Ack Ratio имеет значение не меньше 2 для окна насыщения размером не меньше 4 пакетов.

Отправитель меняет Ack Ratio с учетом этих ограничений. Для каждого окна насыщения данных с потерянными или маркированными пакетами DCCP-Ack значение Ack Ratio удваивается, а для каждых последовательных cwnd/(R2 — R) окон насыщения данных без потерь и маркировки DCCP-Ack значение Ack Ratio уменьшается на 1 (приложение A). Изменения Ack Ratio указываются через согласование возможностей (см. параграф 11.3 в [RFC4340]).

При постоянном окне насыщения это дает скорость передачи Ack близкую к TCP. Конечно, cwnd обычно меняется со временем и динамика достаточно сложна, но близка к TCP. Отправителю рекомендуется использовать последнее значение cwnd при решении вопроса об уменьшении Ack Ratio на 1.

Отправитель не обязан постоянно обновлять Ack Ratio. Например, он может ограничить частоту согласования Ack Ratio до одного раза за 4 — 5 периодов кругового обхода или до одного раза за каждые 2 секунды. Отправителю недопустимо пытаться согласовать Ack Ratio больше одного раза за время кругового обхода. Кроме того, он может установить минимальное значение Ack Ratio = 2 или может задать Ack Ratio = 1 для полусоединений с постоянными окнами насыщения в 1 или 2 пакета.

С учетом сказанного, получатель отправляет не менее 1 подтверждения на окно данных при cwnd = 1, и не менее 2 в остальных случаях. Таким образом, получатель может передать 2 подтверждения на окно данных даже при сильном насыщении обратного пути. Отметим, однако, что при достаточно сильной перегрузке все подтверждения будут отбрасываться и отправитель вернется к экспоненциальному снижению тайм-аута как в TCP. Таким образом, при достаточно сильной перегрузке обратного пути отправитель снижает скорость передачи на прямом пути, что ведет к снижению скорости передачи на обратном пути.

6.2. Подтверждения подтверждений

Активный отправитель DCCP A должен время от времени подтверждать подтверждения своего партнера DCCP B, чтобы DCCP B мог высвободить состояние Ack Vector. Когда активны оба полусоединения, подтверждения от A для подтверждения B автоматически включаются в подтверждения A для данных от B. Если соединение от B к A бездействует, DCCP A должен время от времени отправлять подтверждения заблаговременно, например, путем отправки пакета DCCP-DataAck с Acknowledgement Number в заголовке.

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

6.2.1. Определение бездействия

В этом параграфе описано, как получатель CCID 2 определяет, что соответствующий отправитель не передает данные. Общая информация о молчании отправителей приведена в параграфе 11.1 [RFC4340].

Путь T равно большему из значений 0,2 сек. и удвоенное время кругового обхода (получатель может знать это время из своей роли отправителя в другом полусоединении; если это время ему неизвестно, следует использовать принятое по умолчанию RTT = 0,2, как описано в параграфе 3.4 [RFC4340]). Как только отправитель подтверждает Ack Vector от получателя и не передает других данных по меньшей мере T секунд, получатель может сделать вывод о молчании сервера. Более точно, получатель делает вывод о молчании отправителя по прошествии не менее T секунд без передачи им каких-либо данных, когда сервер уже подтвердил Ack Vector для всех данных, принятых получателем.

7. Явное уведомление о насыщении

CCID 2 поддерживает явные уведомления о перегрузке (ECN8) [RFC3168]. Отправитель будет применять ECN Nonce для пакетов данных, а получатель будет возвращать (эхо) эти nonce в Ack Vector, как указано в параграфе 12.2 [RFC4340]. Информация о помеченных пакетах также будет возвращаться в Ack Vector. Поскольку информация Ack Vector передается гарантированно, DCCP флаги TCP в ECN-Echo и Congestion Window Reduced.

Для непомеченных пакетов получатель рассчитывает ECN Nonce Echo как в [RFC3540] и возвращает как часть опций Ack Vector. Получателю следует проверять соответствие ECN Nonce Echoe ожидаемым значениям, что обеспечит защиту от случайного или намеренного сокрытия помеченных пакетов.

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

8. Опции и возможности

Опция DCCP Ack Vector и свойства ECN Capable, Ack Ratio, Send Ack Vector применимы в CCID 2.

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

Вопросы безопасности DCCP рассмотрены в [RFC4340], а для TCP — в [RFC2581].

В [RFC2581] рассмотрены способы, с помощью которых атакующий может снизить производительность соединений TCP за счет отбрасывания пакетов и подделки подтверждений дубликатов или подтверждений новых данных. Авторам не известны какие-либо новые проблемы безопасности, связанные с этим документом при использовании похожего на TCP контроля перегрузок.

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

Эта спецификация определяет значение 2 в пространстве имен DCCP CCID, поддерживаемом IANA. Это назначение указано также в [RFC4340]. CCID 2 также добавляет три набора чисел, значения которых должны выделяться IANA — коды сброса (Reset Code) CCID 2, типы опций и номера свойств. Эти диапазоны будут предотвращать «засорение» соответствующих глобальных пространств имен DCCP будущими значениями для CCID 2 (см. параграф 10.3 в [RFC4340]). Однако этот документ не задает никаких значений из этих диапазонов, кроме тестов и экспериментального применения [RFC3692]. Документ указывает процедуру Standards Action в соответствии с [RFC2434].

10.1. Коды сброса

Каждая запись в реестре кодов сброса DCCP содержит относящееся к CCID 2 значение Reset Code из диапазона 128-255, краткое описание кода и ссылку на RFC с определением кода. Коды 184-190 и 248-254 выделены для тестов и экспериментов. Оставшиеся значения 128-183, 191-247 и 255 являются резервными и распределять их следует по процедуре Standards Action, которая требует рецензии IESG и публикации RFC со статусом standards-track.

10.2. Типы опций

Каждая запись в реестре типов опций DCCP содержит связанный с CCID 2 тип (число из диапазона 128-255), имя опции и ссылку на RFC с определением типа. Типы 184-190 и 248-254 выделены для тестов и экспериментов. Оставшиеся значения 128-183, 191-247 и 255 являются резервными и распределять их следует по процедуре Standards Action, которая требует рецензии IESG и публикации RFC со статусом standards-track.

10.3. Номера свойств

Каждая запись в реестре номеров свойств DCCP содержит связанный с CCID 2 номер свойства (число из диапазона 128-255), имя свойства и ссылку на RFC с определением номера свойства. Номера 184-190 и 248-254 выделены для тестов и экспериментов. Оставшиеся значения 128-183, 191-247 и 255 являются резервными и распределять их следует по процедуре Standards Action, которая требует рецензии IESG и публикации RFC со статусом standards-track.

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

Авторы благодарны Mark Handley и Jitendra Padhye за помощь в определении CCID 2. Спасибо Mark Allman, Aaron Falk, Nils-Erik Mattsson, Greg Minshall, Arun Venkataramani, Magnus Westerlund и членам рабочей группы DCCP за отклики.

Приложение A. Алгоритм снижения Ack Ratio

В этом приложении обоснован алгоритм роста и снижения Ack Ratio, заданного в параграфе 6.1.2.

Фаза предотвращения перегрузки TCP снижает cwnd вдвое на каждое окно с насыщением. Точно так же CCID 2 удваивает Ack Ratio для каждого окна с насыщением на обратном пути, снижая примерно вдвое частоту DCCP-Ack.

Фаза предотвращения перегрузки TCP увеличивает cwnd на значение MSS для каждого окна без насыщения. Когда такое поведение применяется к трафику подтверждений, это будет соответствовать росту числа пакетов DCCP-Ack на 1 после каждого окна без перегрузки для пакетов DCCP-Ack. Это условие не выполняется точно, поскольку Ack Ratio является целым числом. Вместо этого нужно увеличивать Ack Ratio на 1 после каждых K без насыщения на обратном пути, где значение K выбирается так, чтобы долгосрочное число пакетов DCCP-Ack на окно насыщения было близко к значению TCP, задаваемому контролем перегрузки AIMD.

В CCID 2 грубое приближение к TCP для трафика подтверждений может быть достигнуто установкой K = cwnd/(R2 — R), где R — текущее значение Ack Ratio.

Расчет результата показан ниже

         R = Ack Ratio = # число пакетов данных / число пакетов подтверждения
         W = Congestion Window = # число пакетов данных / окно
         W/R = # число пакетов подтверждения / окно

Требование. Нужно увеличивать W/R на 1 для каждого окна без перегрузки. Поскольку R можно снижать лишь на 1, определив K так, что после K окон без перегрузки значение W/R + K будет равно W/(R-1).

         (W/R) + K = W/(R-1)
                 K = W/(R-1) - W/R = W/(R^2 - R)

Приложение B. Влияние неточного учета потерь на Ack Ratio

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

В некоторых случаях проблема слишком большого Ack Ratio и связанного с этим роста пиков трафика данных не возникает. Для получателя DCCP B и отправителя DCCP A эти случаи рассмотрены ниже.

  • Проблема не возникает, пока DCCP B не передает значительного объема данных. Когда полусоединение от B к A бездействует или имеет малую скорость, большинство переданных DCCP B пакетов будут фактически чистыми подтверждениями и оценка узлом DCCP A частоты потери DCCP-Ack будет достаточно точной.

  • Проблема не возникает, если DCCP B обычно «цепляет» подтверждения к своим пакетам данных. Такие подтверждения не ограничиваются значением Ack Ratio, поэтому они приходят достаточно часто и пиков не будет.

  • Проблема не возникает, если скорость передачи DCCP A мала, поскольку пики трафика при малой скорости не создают проблем.

  • Проблема не возникает, если скорость передачи DCCP B достаточно высока по сравнению со скоростью передачи DCCP A, поскольку частота потерь от B к A должна быть низкой для поддержки скорости передачи DCCP B. Это ограничивает Ack Ratio разумными значениями даже в том случае, когда DCCP A связывает каждую потерю с DCCP-Ack.

  • Проблема не возникает, если DCCP B передает опции NDP Count, когда это возможно (Send NDP Count/B имеет значение true). Отправитель в этом случае может использовать опции получателя NDP Count, чтобы корректно отличать потерю пакетов данных от потери DCCP-Ack.

  • Проблема не возникает, если DCCP A ускоряет темп передачи своих пакетов данных.

Остается случай, когда DCCP B передает примерно одинаковой число пакетов с данными и без данных, не используя NDP Count, и вся информация подтверждений содержится в пакетах DCCP-Ack. Оценим возможное влияние слишком высоких значений Ack Ratio в результате учета потерь пакетов с данными как потерь DCCP-Ack. Для простоты предполагается среда крупномасштабного статистического мультиплексирования, где частота отбрасывания пакетов не зависит от скорости передачи в отдельном соединении.

Предположим, что при корректном учете узлом DCCP A потери пакетов без данных значение Ack Ratio устанавливается так, что скорости передачи данных и подтверждений от B к A имеют значение D пакетов в секунду. Тогда при некорректном учете в DCCP A потери пакетов данных как потери пакетов без данных, скорость передачи трафика данных от B к A останется D, а для скорости передачи подтверждений от B к A будет установлено значение f*D (f < 1). Предположим, что частота потери пакетов равна p. Отправитель ошибочно оценивает коэффициент потери пакетов без данных как (pD+pfD)/fD или (эквивалентно) как p(1 + 1/f). Поскольку механизм контроля насыщения для трафика подтверждений приблизительно соответствует TCP и скорости отправки пакетов с данными и без данных будут расти как 1/sqrt(x), где x — частота отбрасывания пакетов, получим

fD/D = sqrt(p)/sqrt(p(1 + 1/f)),

и

f^2 = 1/(1 + 1/f).

Решение дает значение f = 0,62. Если в таком случае отправитель некорректно считает потерю пакетов с данными потерей пакетов без данных, скорость передачи подтверждений снизится до 0,62. Это приведет к некоторому росту всплесков трафика от A к B, которые могут быть ослаблены использованием опций NDP Count, включением подтверждений в пакеты данных или управлением скоростью передачи данных.

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

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

[RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, «TCP Selective Acknowledgement Options», RFC 2018, October 1996.

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

[RFC2434] Narten, T. and H. Alvestrand, «Guidelines for Writing an IANA Considerations Section in RFCs», BCP 26, RFC 2434, October 1998.

[RFC2581] Allman, M., Paxson, V., and W. Stevens, «TCP Congestion Control», RFC 2581, April 1999.

[RFC2988] Paxson, V. and M. Allman, «Computing TCP’s Retransmission Timer», RFC 2988, November 2000.

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

[RFC3390] Allman, M., Floyd, S., and C. Partridge, «Increasing TCP’s Initial Window», RFC 3390, October 2002.

[RFC3517] Blanton, E., Allman, M., Fall, K., and L. Wang, «A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP», RFC 3517, April 2003.

[RFC3692] Narten, T., «Assigning Experimental and Testing Numbers Considered Useful», BCP 82, RFC 3692, January 2004.

[RFC4340] Kohler, E., Handley, M., and S. Floyd, «Datagram Congestion Control Protocol (DCCP)», RFC 4340, March 2006.

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

[RFC2861] Handley, M., Padhye, J., and S. Floyd, «TCP Congestion Window Validation», RFC 28619, June 2000.

[RFC3465] Allman, M., «TCP Congestion Control with Appropriate Byte Counting (ABC)», RFC 3465, February 2003.

[RFC3540] Spring, N., Wetherall, D., and D. Ely, «Robust Explicit Congestion Notification (ECN) Signaling with Nonces», RFC 3540, June 2003.

[RFC4342] Floyd, S., Kohler, E., and J. Padhye, «Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)», RFC 4342, March 2006.

[V03] Arun Venkataramani, August 2003. Citation for acknowledgement purposes only.

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

Sally Floyd

ICSI Center for Internet Research

1947 Center Street, Suite 600

Berkeley, CA 94704

USA

EMail: floyd@icir.org

Eddie Kohler

4531C Boelter Hall

UCLA Computer Science Department

Los Angeles, CA 90095

USA

EMail: kohler@cs.ucla.edu

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

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

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 обеспечено IETF Administrative Support Activity (IASA).


1Контроль насыщения в стиле TCP

2Datagram Congestion Control Protocol

3Additive Increase Multiplicative Decrease – аддитивное увеличение и мультипликативное уменьшение.

4Похожий на TCP контроль насыщения.

5TCP-Friendly Rate Control — дружественный к TCP контроль скорости.

6Explicit Congestion Notification — явный контроль насыщения.

7Заменен RFC 7661, который также имеет статус экспериментального. Прим. перев.

8Explicit Congestion Notification.

9Заменен RFC 7661. Прим. перев.

Рубрика: RFC | Комментарии к записи RFC 4341 Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control отключены

RFC 4451 BGP MULTI_EXIT_DISC (MED) Considerations

Network Working Group                                   D. McPherson
Request for Comments: 4451                      Arbor Networks, Inc.
Category: Informational                                      V. Gill
                                                                 AOL
                                                          March 2006

Вопросы использования атрибута BGP MED

BGP MULTI_EXIT_DISC (MED) Considerations

PDF

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

Этот документ содержит информацию для сообщества Internet. Документ не задает каких-либо стандартов. Допускается свободное распространения документа.

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

Copyright (C) The Internet Society (2006).

Аннотация

Атрибут BGP MULTI_EXIT_DISC (MED) обеспечивает для узлов BGP механизм передачи в соседнюю AS информации об оптимальной точке входа в локальную AS. Хотя использование атрибутов BGP MED возможно в различных сценариях работы, может возникать множество проблем в случаях применения MED в динамических и сложных вариантах топологии.

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

1. Введение

Атрибут BGP MULTI_EXIT_DISC (MED) обеспечивает для узлов BGP механизм передачи в соседнюю AS информации об оптимальной точке входа в локальную AS. Хотя использование атрибутов BGP MED возможно в различных сценариях работы, может возникать множество проблем в случаях применения MED в динамических и сложных вариантах топологии.

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

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

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

2.1. Атрибут MULTI_EXIT_DISC (MED)

Атрибут BGP MULTI_EXIT_DISC (MED), ранее известный как INTER_AS_METRIC, определен в параграфе 5.1.4 документа [BGP4] следующим образом1:

Дополнительный непереходный атрибут MULTI_EXIT_DISC предназначен для использования на внешних (между AS) соединениях для выбора из множества путей в одну смежную AS. Значение атрибута MULTI_EXIT_DISC представляет собой 4-октетное целое число без знака, которое называют метрикой. При прочих равных из нескольких маршрутов следует выбирать тот, у которого меньше значение метрики. При получении через EBGP атрибут MULTI_EXIT_DISC можно распространять через IBGP другим узлам BGP в данной AS (см. также параграф 9.1.2.2). Атрибут MULTI_EXIT_DISC, полученный из соседней AS, недопустимо распространять в другие соседние AS.

Узел BGP должен обеспечивать механизм (в соответствии с локальной конфигурацией), позволяющий удалять из маршрутов атрибут MULTI_EXIT_DISC. Если узел BGP настроен на удаление атрибута MULTI_EXIT_DISC из маршрутов, такое удаление должно выполняться до того, как будет определяться предпочтительный маршрут или происходить выбор маршрута (фазы 1 и 2 Decision Process).

Реализация может также (в соответствии с локальной конфигурацией) изменять значение атрибутов MULTI_EXIT_DISC, полученных через EBGP. Если узел BGP настроен на изменение значений атрибута MULTI_EXIT_DISC, принятых через EBGP, такое изменение должно выполняться до того, как будет определяться предпочтительный маршрут или происходить выбор маршрута (фазы 1 и 2 Decision Process). Некоторые ограничения описаны в параграфе 9.1.2.2.

В параграфе 9.1.2.2 (п. c) документа [BGP4] определяются следующие критерии выбора маршрутов, связанные с MED1:

  1. Исключаются из рассмотрения маршруты с менее предпочтительными атрибутами MULTI_EXIT_DISC. Значения MULTI_EXIT_DISC можно сравнивать только для маршрутов, полученных из одной соседней AS (эта AS определяется из атрибута AS_PATH). Маршруты без атрибута MULTI_EXIT_DISC рассматриваются как маршруты с наименьшим возможным значением MULTI_EXIT_DISC.

Описанный выше алгоритм можно представить в виде следующей процедуры:

for m = число остающихся в рассмотрении маршрутов
   for n = число остающихся в рассмотрении маршрутов
      if (neighborAS(m) == neighborAS(n)) и (MED(n) < MED(m))
         исключить маршрут m из рассмотрения

В приведенном выше псевдокоде функция MED(n) возвращает значение атрибута MULTI_EXIT_DISC для маршрута n. Если маршрут n не имеет атрибута MULTI_EXIT_DISC, функция возвращает минимальное из возможных значения MULTI_EXIT_DISC (т. е., 0).

Функция neighborAS(n) возвращает номер соседней AS, из которой был получен маршрут n. Если маршрут получен через IBGP и другой узел IBGP не является исходной точкой этого маршрута, это будет номер соседней AS, из которой другой узел IBGP получил маршрут. Если маршрут получен через IBGP и другой узел IBGP (a) является исходной точкой маршрута или (b) создал маршрут путем агрегирования и атрибут AS_PATH агрегированного маршрута пуст или начинается с AS_SET, это локальная AS.

Если атрибут MULTI_EXIT_DISC удаляется до повторного анонсирования маршрута в IBGP, можно провести сравнение с использованием через EBGP полученного атрибута MULTI_EXIT_DISC. Если реализация решает удалить MULTI_EXIT_DISC, тогда дополнительное сравнение MULTI_EXIT_DISC, если оно выполняется, должно учитывать только маршруты, полученные через EBGP. Наилучший маршрут от EBGP можно тогда сравнивать с маршрутами от IBGP после удаления атрибута MULTI_EXIT_DISC. Если атрибут MULTI_EXIT_DISC удаляется из подмножества маршрутов от EBGP и из выбранного “лучшего” маршрута от EBGP не будет удален атрибут MULTI_EXIT_DISC, тогда этот атрибут должен использоваться для сравнения с маршрутами от IBGP. Для полученных через IBGP маршрутов атрибут MULTI_EXIT_DISC должен использоваться при сравнении маршрутов, которые не исключены на предыдущих этапах выбора (Decision Process). Включение атрибута MULTI_EXIT_DISC маршрутов от EBGP в сравнение с маршрутами от IBGP с последующим удалением атрибута MULTI_EXIT_DISC и анонсированием маршрута будет предотвращать возникновение маршрутных петель.

2.2. MED и картошка2

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

Первый метод называют hot potato routing (или closest-exit3), поскольку он напоминает быстрое перебрасывание горячей картофелины, удерживаемой голыми руками. Маршрутизация этого типа осуществляется без передачи полученного от EBGP значения MED в IBGP. Это минимизирует транзитный трафик для провайдера, маршрутизирующего трафик. Значительно менее распространенным методом является cold potato routing (или best-exit4), когда транзитный провайдер использует свою транзитную емкость для получения трафика, направляемого смежному транзитному провайдеру, анонсируемому как ближайший к адресату. Этот тип маршрутизации выполняется путем передачи полученного от EBGP значения MED в IBGP.

Если один из транзитных провайдеров использует метод hot potato, а другой — cold potato, трафик между адресатами будет более симметричным. Однако если оба провайдера будут использовать метод “cold potato” или “hot potato” между своими сетями, очевидно, что это приведет к возникновению асимметрии.

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

В некоторых случаях провайдер может использовать метод hot potato для некоторых адресатов в данной партнерской AS и метод cold potato — для других. Разное отношение к коммерческому и исследовательскому трафику в сети NSFNET середины 1990 годов является примером такого решения. Сегодня многие коммерческие сети обмениваются атрибутами MED со своими заказчиками, не делают этого для партнеров (bilateral peer). Однако степень коммерческого применение атрибута MED варьируется в широких пределах – от повсеместного использования до полного отказа.

Кроме того, многие развернутые сегодня системы MED сильно отличаются в своем поведении (например, приводят к недостаточно оптимальной маршрутизации) от того, что ждет оператор и в результате получается маршрутизация не по методу hot potato или cold potato, а нечто среднее, что уместно назвать mashed potato5! Далее в документе приводится дополнительная информация о непредусмотренном поведении систем в результате использования атрибутов MED.

3. Поведение реализаций протокола

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

3.1. MULTI_EXIT_DISC является дополнительным непереходным атрибутом

MULTI_EXIT_DISC представляет собой дополнительный непереходный атрибут, который анонсируется по своему усмотрению как IBGP, так и EBGP-партнерам. В результате некоторые реализации способны передавать атрибуты MED партнерам IBGP по умолчанию, а другие не могут этого. Такое поведение может приводить к выбору неоптимального маршрута внутри AS. Кроме того, некоторые реализации передают атрибуты MED партнерам EBGP по умолчанию, а другие не делают этого. В результате может выбираться неоптимальный путь для междоменной маршрутизации.

3.2. Значение MED и предпочтения

Некоторые реализации трактуют нулевое значение атрибута MED, как более предпочтительное по сравнению с отсутствием этого атрибута. Такое поведение приводит к несогласованности выбора маршрутов внутри AS. Текущая версия спецификации BGP[BGP4] устраняет неоднозначности, существовавшие в [RFC1771], указывая, что для маршрутов, не имеющих атрибута MULTI_EXIT_DISC, следует присваивать этому атрибуту минимальное значение MULTI_EXIT_DISC = 0.

Очевидно, что различные реализации и разные версии спецификации BGP через различные варианты интерпретации отсутствия атрибута MED. Например, в ранних версиях спецификации говорилось, что при отсутствии атрибута MED следует присваивать максимально возможное значение MED (т. е., 232-1).

Кроме того, некоторые реализации показывают использование максимально возможного значения MED (232-1) в качестве «бесконечной» метрики (т. е., значения MED, используемого для недоступных маршрутов). При получении обновления с атрибутом MED = 232-1, такие реализации меняют полученное значение на 232-2. Следовательно, новое значение MED будет распространяться в обновлениях и может приводить к несогласованностям при выборе маршрутов и непредусмотренному выбору пути.

В результате несогласованности реализаций и вариантов спецификации протокола многие сетевые операторы сегодня явно сбрасывают (т. е., устанавливают в 0 или иное “фиксированное” значение) все значения MED на входе в сеть для согласования с внутренней политикой маршрутизации (т. е., для включения правила, по которому значения MED, равные 0 или 232-1, не используются в конфигурациях, где значения MED рассчитываются напрямую или задаются в конфигурации), поскольку не имеют уверенности в том, что все их маршрутизаторы одинаково ведут себя в случаях отсутствия атрибута MED.

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

3.3. Сравнение атрибутов MED из разных AS

Атрибут MED предназначен для использования на внешних (между AS) каналах и позволяет различать разные точки входа или выхода в одной соседней AS. Однако существует множество случаев использования атрибутов MED в целях определения уровня предпочтений для похожих маршрутов, полученных из различных автономных систем.

Большое число реализаций обеспечивает возможность разрешить сравнение атрибутов MED для маршрутов, полученных из разных соседних AS. Хотя такая возможность показала некоторые преимущества (например, описанные в [RFC3345]), операторам следует принимать во внимание побочные эффекты, которые могут возникать в результате такого сравнения. В разделе, посвященном развертыванию, мы приведем некоторые примеры того, как это сравнение может приводить к нежелательному поведению.

3.4. Атрибуты MED, Route Reflection и AS Confederations для BGP

В некоторых вариантах конфигурации механизмы масштабирования BGP, определенные в документах BGP Route Reflection — An Alternative to Full Mesh IBGP [RFC2796] и Autonomous System Confederations for BGP [RFC3065], будут приводить к постоянным осцилляциям маршрутов BGP [RFC3345]. Эта проблема связана с принципами работы BGP – существует конфликт между сокрытием (иерархией) информации и не использующим иерархии процессом выбора, обусловленный недостатком общего упорядочения, вызванным правилами MED. С учетом текущей практики можно сказать, что проблема наиболее часто возникает в контексте использования MED совместно с рефлекторами маршрутов или конфедерациями.

Одним из способов предотвращения этой проблемы является задание для метрики inter-Member-AS или inter-cluster IGP более высоких значений, нежели для IGP-метрики intra-Member-AS и/или использование других правил удаления ненужного (tie-breaking), позволяющих избежать выбора маршрута BGP на основе несравнимых значений MED. Естественно, что искусственное снижение метрики IGP может оказаться слишком затруднительным для некоторых приложений.

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

Несмотря на то, что текущие спецификации разрешают это, изменение атрибутов MED, полученных в сессии IBGP любого типа (например, стандартный IBGP, сессия EBGP между Member-AS конфедерации BGP, отражение маршрутов и т. п.), не рекомендуется.

3.5. Подавление маршрутных осцилляций6 и MED Churn7

Значения MED часто получаются динамически из метрики IGP или аддитивной стоимости, связанной с метрикой IGP для данного BGP NEXT_HOP. Это обычно обеспечивает эффективную модель, гарантирующую, что атрибуты BGP MED, анонсируемые партнерам, используются для представления лучшего пути к данному адресату в сети, который согласован с IGP внутри данной AS.

Следствием динамического задания атрибутов MED на основе IGP является нестабильность, возникающая в AS или даже на отдельном соединении внутри AS, которая может приводить к широкомасштабной нестабильности BGP или мешанине (churn) маршрутных анонсов BGP, распространяемых через множество доменов. Если ваш атрибут MED “переключается” (flap) всякий раз при смене метрики IGP, ваши маршруты явно будут подавляться в результате использования метода BGP Route Flap Damping8 [RFC2439].

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

Многие реализации не имеют на практике проблем с переключениями (flapping) IGP; они захватывают свою метрику IGP по первому анонсу или используют некий внутренний механизм подавления. Некоторые реализации считают изменение атрибутов BGP менее значимым, нежели отзыв или анонсирование маршрута в попытке смягчить воздействие этого типа событий.

3.6. Влияние атрибутов MED на эффективность упаковки обновлений

Множество недоступных маршрутов может анонсироваться в одном сообщении BGP Update. Протокол BGP4 также разрешает анонсировать в одном обновлении множество префиксов с общими атрибутами пути. Это обычно называют упаковкой обновлений (update packing). По возможности рекомендуется использовать упаковку обновлений, так как она обеспечивает механизм более эффективного поведения в целом ряде областей, включая:

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

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

3.7. Временная зависимость выбора маршрутов

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

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

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

Отмечалось, что восприятие атрибутов MED из других автономных систем может вызывать перемешивание (churn) потоков трафика в сети. Некоторые реализации только сбрасывают (ratchet down) MED и никогда не возвращают его для предотвращения чрезмерной мешанины.

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

Как было отмечено выше, многие сетевые операторы сбрасывают значения MED на входе в сеть. В дополнение к этому многие операторы явно не используют для атрибутов MED значений of 0 и 232-1, чтобы избавиться от несогласованности в различных реализациях и вариантах спецификации BGP.

4.1. Сравнение атрибутов MED из разных AS

Хотя атрибут MED был предназначен лишь для сравнения путей, полученных от разных внешних партнеров в одной AS, многие реализации обеспечивают также возможность сравнения атрибутов MED, полученных из разных автономных систем. Операторы AS часто используют атрибут LOCAL_PREF для выбора внешних предпочтений (основное и вторичное восходящее соединение9, партнеры, заказчики и т. п..). Использование MED взамен LOCAL_PREF может приводить к несогласованному распространению лучших маршрутов, поскольку сравнение атрибутов MED происходит только после сравнения длины AS_PATH.

Сравнение атрибутов MED из различных AS может быть весьма продуктивным для некоторых конфигураций, однако в общем случае к таким сравнениям нужно подходить весьма осторожно. Узлы BGP часто задают значения MED на основе метрики IGP, связанной с доступом к данному BGP NEXT_HOP внутри локальной AS. Это позволяет в атрибутах MED отражать топологию IGP при анонсировании маршрутов партнерам. Это может хорошо работать при сравнении атрибутов MED для разных путей из одной AS, но потенциально может приводить к принятию “отягощенных” решений при сравнении атрибутов MED из разных автономных систем. Типичным случаем является использование разными автономными системами различных механизмов установки метрики IGP или атрибутов BGP MED, а также использование различных протоколов IGP с существенно различающимися метрическими пространствами (например, OSPF и традиционная метрика IS-IS).

4.2. Эффекты объединения атрибутов MED

Другим вопросом, связанным с использованием атрибутов MED, является влияние, которое на этот атрибут оказывает агрегирование маршрутной информации BGP. Объединенные маршруты (aggregate) часто генерируются из множества мест в AS для того, чтобы учесть стабильность, резервные каналы и устройство сети. Когда атрибуты MED получаются на основе метрики IGP, связанной с упомянутыми объединенными маршрутами, анонсируемое партнерам значение MED может приводить к далекой от оптимальной маршрутизации.

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

Атрибут MED был предложен как «слабая» метрика, которая будет использоваться лишь в конце процесса выбора лучшего пути. Рабочая группа BGP была заинтересована в том, чтобы любая метрика, указанная удаленным оператором, оказывала влияние на маршрутизацию в локальной AS лишь в тех случаях, когда не указано иных предпочтений. Основной задачей при разработке MED было обеспечение гарантий того, что партнеры не смогут «сливать» или «поглощать» трафик для сетей, которые они анонсируют. Поэтому восприятие атрибутов MED от партнеров может в некотором смысле повышать чувствительность сети к подобным воздействиям со стороны партнеров.

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

Спасибо John Scudder за его зоркий глаз и творческую интуицию. Благодарим также Curtis Villamizar, JR Mitchell и Pekka Savola за их полезные отклики.

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

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

[RFC1771] Rekhter, Y. and T. Li, «A Border Gateway Protocol 4 (BGP-4)», RFC 1771, March 1995.

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

[RFC2796] Bates, T., Chandra, R., and E. Chen, «BGP Route Reflection — An Alternative to Full Mesh IBGP», RFC 2796, April 2000.

[RFC3065] Traina, P., McPherson, D., and J. Scudder, «Autonomous System Confederations for BGP», RFC 3065, February 2001.

[BGP4] Rekhter, Y., Li, T., and S. Hares, «A Border Gateway Protocol 4 (BGP-4)», RFC 4271, January 2006.

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

[RFC2439] Villamizar, C., Chandra, R., and R. Govindan, «BGP Route Flap Damping», RFC 2439, November 1998.

[RFC3345] McPherson, D., Gill, V., Walton, D., and A. Retana, «Border Gateway Protocol (BGP) Persistent Route Oscillation Condition», RFC 3345, August 2002.

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

Danny McPherson

Arbor Networks

EMail: danny@arbor.net

Vijay Gill

AOL

EMail: VijayGill9@aol.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 обеспечено IETF Administrative Support Activity (IASA).


1Приведенный ниже фрагмент спецификации заимствован из перевода RFC 4271. Прим. перев.

2Рекомендуем также прочесть одноименный параграф в RFC 4277. Прим. перев.

3Ближайший выход

4Лучший выход

5Картофельное пюре.

6Route Flap Damping

7Мешанина атрибутов MED.

8Подавление осцилляций маршрутов BGP.

9Upstream.

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