5. Структуры данных

5. Структуры данных

5.1. Состав пакета протокола Транспортного уровня представлен на Рисунке N 1.

┌──────────────────────┬───────────────────┬──────────────────────────────┐
│  Заголовок Протокола │   Данные Уровня   │   Контрольная Сумма Данных   │
│ Транспортного Уровня │  Поддержки Услуг  │    Уровня Поддержки Услуг    │
└──────────────────────┴───────────────────┴──────────────────────────────┘

Рисунок N 1. Состав пакета протокола Транспортного уровня

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

5.3. Общая длина пакета протокола Транспортного уровня не превышает значения 65535 байт, что соответствует максимальному значению параметра Window Size (максимальный размер целого пакета, принимаемый на стороне приемника) заголовка протокола TCP. Таблица N 3 определяет состав пакета протокола Транспортного уровня.

Таблица N 3. Состав пакета протокола Транспортного уровня

┌─────┬─────┬─────┬─────┬──────┬─────┬───┬────┬─────┬────────┬────────────┐
│Бит 7│Бит 6│Бит 5│Бит 4│Бит 3 │Бит 2│Бит│Бит │ Тип │  Тип   │  Размер,   │
│     │     │     │     │      │     │ 1 │ 0  │     │ данных │    байт    │
├─────┴─────┴─────┴─────┴──────┴─────┴───┴────┼─────┼────────┼────────────┤
│           PRV (Protocol Version)            │  M  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│           SKID (Security Key ID)            │  M  │  BYTE  │     1      │
├────────────┬────┬────────────┬─────┬────────┼─────┼────────┼────────────┤
│    PRF     │RTE │    ENA     │ CMP │   PR   │  M  │  BYTE  │     1      │
│  (Prefix)  │    │            │     │        │     │        │            │
├────────────┴────┴────────────┴─────┴────────┼─────┼────────┼────────────┤
│             HL (Header Length)              │  M  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│            HE (Header Encoding)             │  M  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│           FDL (Frame Data Length)           │  M  │ USHORT │     2      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│           PID (Packet Identifier)           │  M  │ USHORT │     2      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│              PT (Packet Type)               │  M  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│             PRA (Peer Address)              │  O  │ USHORT │     2      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│           RCA (Recipient Address)           │  O  │ USHORT │     2      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│             TTL (Time To Live)              │  O  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│           HCS (Header Check Sum)            │  M  │  BYTE  │     1      │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│         SFRD (Services Frame Data)          │  O  │ BINARY │0 ... 65517 │
├─────────────────────────────────────────────┼─────┼────────┼────────────┤
│    SFRCS (Services Frame Data Check Sum)    │  O  │ USHORT │    0,2     │
└─────────────────────────────────────────────┴─────┴────────┴────────────┘

5.4. Заголовок протокола Транспортного уровня состоит из следующих полей: PRV, PRF, PR, CMP, ENA, RTE, HL, HE, FDL, PID, PT, PRA, RCA, TTL, HCS. Протокол Уровня поддержки услуг представлен полем SFRD, контрольная сумма поля Уровня поддержки услуг содержится в поле SFRCS.

5.5. Параметр PRV содержит значение 0x01. Значение данного параметра инкрементируется каждый раз при внесении изменений в структуру заголовка.

5.6. Параметр SKID определяет идентификатор ключа, используемого при шифровании.

5.7. Параметр PRF определяет префикс заголовка Транспортного уровня и содержит значение 00.

5.8. Поле RTE (Route) определяет необходимость дальнейшей маршрутизации данного пакета на удаленный аппаратно-программный комплекс, а также наличие опциональных параметров PRA, RCA, TTL, необходимых для маршрутизации данного пакета. Если поле имеет значение 1, то необходима маршрутизация и поля PRA, RCA, TTL присутствуют в пакете. Данное поле устанавливает Диспетчер того аппаратно-программного комплекса, на котором сгенерирован пакет, или абонентский терминал, сгенерировавший пакет для отправки на аппаратно-программный комплекс, в случае установки в нем параметра "HOME_DISPATCHER_ID", определяющего адрес аппаратно-программного комплекса, на котором данный абонентский терминал зарегистрирован.

5.9. Поле ENA (Encryption Algorithm) определяет код алгоритма, используемый для шифрования данных из поля SFRD. Если поле имеет значение 00, то данные в поле SFRD не шифруются.

5.10. Поле CMP (Compressed) определяет, используется ли сжатие данных из поля SFRD. Если поле имеет значение 1, то данные в поле SFRD считаются сжатыми.

5.11. Поле PR (Priority) определяет приоритет маршрутизации данного пакета и может принимать следующие значения:

00 - наивысший

01 - высокий

10 - средний

11 - низкий

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

5.12. Поле HL - длина заголовка Транспортного уровня в байтах с учетом байта контрольной суммы (поля HCS).

5.13. Поле HE определяет применяемый метод кодирования следующей за данным параметром части заголовка Транспортного уровня.

5.14. Поле FDL определяет размер в байтах поля данных SFRD, содержащего информацию протокола Уровня поддержки услуг.

5.15. Поле PID содержит номер пакета Транспортного уровня, увеличивающийся на 1 при отправке каждого нового пакета на стороне отправителя. Значения в данном поле изменяются по правилам циклического счетчика в диапазоне от 0 до 65535, т.е. при достижении значения 65535 следующее значение 0.

5.16. Поле PT - тип пакета Транспортного уровня. Поле PT может принимать следующие значения.

0 - EGTS_PT_RESPONSE (подтверждение на пакет Транспортного уровня);

1 - EGTS_PT_APPDATA (пакет, содержащий данные протокола Уровня поддержки услуг);

2 - EGTS_PT_SIGNED_APPDATA (пакет, содержащий данные протокола Уровня поддержки услуг с цифровой подписью).

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

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

5.19. Поле TTL - время жизни пакета при его маршрутизации между аппаратно-программными комплексами. Использование данного параметра предотвращает зацикливание пакета при ретрансляции в системах со сложной топологией адресных пунктов. Первоначально TTL устанавливается аппаратно-программным комплексом, сгенерировавшим данный пакет. Значение TTL устанавливается равным максимально допустимому числу аппаратно-программных комплексов между отправляющим и принимающим аппаратно-программным комплексом. Значение TTL уменьшается на единицу при трансляции пакета через каждый аппаратно-программный комплекс, при этом пересчитывается контрольная сумма заголовка Транспортного уровня. При достижении данным параметром значения 0 и при обнаружении необходимости дальнейшей маршрутизации пакета происходит уничтожение пакета и выдача подтверждения с соответствующим кодом PC_TTLEXPIRED, описанным в Таблице N 14.

5.20. Поле HCS - контрольная сумма заголовка Транспортного уровня (начиная с поля "PRV" до поля "HCS", не включая поле "HCS"). Для подсчета значения поля HCS ко всем байтам указанной последовательности применяется алгоритм CRC-8.

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

5.22. Поле SFRCS - контрольная сумма поля уровня Протокола поддержки услуг. Для подсчета контрольной суммы по данным из поля SFRD используется алгоритм CRC-16. Данное поле присутствует только в том случае, если есть поле SFRD.

5.23. Блок-схема алгоритма обработки пакета данных протокола Транспортного уровня при приеме представлена на Рисунке N 2.

                                      (────────────)
                                      (   НАЧАЛО   )
                                      (─────┬──────)
                                            │
                                            \/
                                  ┌─┬────────────────┬─┐
                                  │ │Чтение заголовка│ │
                                  └─┴───────┬────────┴─┘
                                            │            ┌─────┐
                                            \/           │     │
    ┌─┬────────────────────────┬─┐ -┌───────/\───────┐ + │     │
  ┌─┤ │           Код          │ │<─<Версия PRV И PRF>───┘     \/
  │ │ │  EGTS_PC_UNS_PROTOCOL  │ │  │ поддерживается?│     ┌───/\───┐
  │ └─┴────────────────────────┴─┘  └───────\/───────┘   - │ HL==11 │
  │                                                     ┌──<   или  >
  \/┌─┬────────────────────────┬─┐                      │  │ HL==16 │
  ├─┤ │           Код          │ │                      │  └───\/───┘
  │ │ │ EGTS_PC_INC_HEADERFORM │ │<─────────────────────┘      │
  │ └─┴────────────────────────┴─┘                             │ +
  │                                                            \/
  \/┌─┬────────────────────────┬─┐                      - ┌────/\───┐
  ├─┤ │          Код           │ │<───────────────────────
  │ │ │EGTS_PC_HEADERCRC_ERROR │ │                        └────\/───┘
  │ └─┴────────────────────────┴─┘                             │
  │                                                            │
  │ ┌─┬────────────────────────┬─┐                             │ +
  ├─┤ │           Код          │ │              ┌───────┐      │
  │ │ │   EGTS_PC_TTLEXPIRED   │ │              \/      │ -    \/
  │ └─┴────────────────────────┴─┘       - ┌────/\────┐ │  ┌───/\───┐
  │             /\                       ┌─ └──< RTE==0 >
  │             └──────────────────┐     │ │текущей ТП│    └───\/───┘
  │     ┌─┬──────────────┬─┐       │ -   │ └────\/────┘        │
  │ ─   │ │TTL = TTL - 1,│ │ + ┌───/\──┐ │      │ +            │ +
  │(A)<─┤ │ Пересчет HCS,│ │<── 0><┘      └─────────────>│
  │ ─   │ │  Отправка на │ │   └───\/──┘                       │
  │     │ │   другую ТП  │ │                                   │
  \/    └─┴──────────────┴─┘                                   \/
  │                                                      - ┌───/\──┐
  \/      ┌─┬───────────────────────┬─┐              ┌───── 0>
  ├───────┤ │          Код          │ │<─────────────┘     └───\/──┘
  │       │ │      EGTS_PC_OK       │ │                        │
  │       └─┴───────────────────────┴─┘                        │ +
  │                                                            \/
  \/      ┌─┬───────────────────────┬─┐         ┌─┬───────────────────────┬─┐
  ├───────┤ │          Код          │ │<───┐    │ │  Чтение данных SFRD,  │ │
  │       │ │ EGTS_PC_DATACRC_ERROR │ │    │    │ │   Вычисление CRC16    │ │
  │       └─┴───────────────────────┴─┘    │    └─┴───────────┬───────────┴─┘
  │                                        │                  │
  \/      ┌─┬───────────────────────┬─┐    │                  \/
  ├───────┤ │          Код          │ │    │         - ┌──────/\──────┐
  │       │ │ EGTS_PC_DECRYPT_ERROR │ │<┐  └───────────< CRC16==SFRCS >
  │       └─┴───────────────────────┴─┘ │ -            └──────\/──────┘
  │           /\    /\                  │                   + │
  │      ┌────┘     │                   │                     │
  │      │          │ -       + ┌───────/\──────┐             \/
  │      │  ┌───────/\─────┐ ┌──<      ENA      ><──┐  - ┌────/\───┐
  │      │  < SKID найден? ><┘  │поддерживается?│   └────< ENA==00 >
  │      │  └───────\/─────┘    └───────\/──────┘        └────\/───┘
  │      │          │                                       + │
  │      │        + \/                                        │
  │      │ ┌─┬─────────────┬─┐ ┌─────────────┬<───────────────┘
  │      │ │ │Декодирование│ │ │             │
  │      │ │ │  поля SFRD  │ │ │             │
  │      │ └─┴──────┬──────┴─┘ │             \/           ──────────────
  │      │          \/         │         ┌───/\───┐ +    / Данные     /
  │      │  - ┌─────/\─────┐ + │         < CMP==0 >────>/  уровня    /
  │      └────<Декодировано>───┘         └───\/───┘    /  Поддержки /──┐
  │           │  успешно?  │               - │        /   Сервисов /   │
  │           └─────\/─────┘                 │       ──────────────    │
  │                                          \/             /\         │
  │                                   ┌─┬────────────┬─┐    │          │
  │                                   │ │ Распаковка │ │    │          │
  │                                   │ │   данных   │ │    │          │
  │                                   └─┴────┬───────┴─┘    │          │
  │                                          │              │          │
  │                                          │              │          │
  │                                          │              │          │
  │     ┌─┬────────────────────┬─┐           \/             │          │
  │<────┤ │         Код        │ │<─┐ - ┌────/\─────┐ +     │          \/
  │     │ │EGTS_PC_INC_DATAFORM│ │  └───<Распаковано>───────┘  ┌─┬────────────┬─┐
  │     └─┴────────────────────┴─┘      │ успешно?  │          │ │     Код    │ │
  │                                     └────\/─────┘          │ │ EGTS_PC_OK │ │
  \/                                                           └─┴─────┬──────┴─┘
┌─┬──────────────────┬─┐                                               \/
│ │     Отправка     │ │                                               ─
│ │ EGTS_PT_RESPONSE │ │                                              (B)
└─┴────────┬─────────┴─┘                                               ─
           │
           \/
        (─────)             A - маршрутизация и отправка пакета  на  другой
        (КОНЕЦ)             аппаратно-программный комплекс
        (─────)             B - обработка данных Протокола Уровня Поддержки
                            Услуг

Рисунок 2. Блок-схема алгоритма обработки пакета данных
протокола Транспортного уровня при приеме