Документ утратил силу или отменен. Подробнее см. Справку

3. Сеансовый уровень (протокол NPL)

На сеансовом уровне осуществляется шифрование и маршрутизация пакетов.

Пакета NPL, протокола нижнего уровня (NPL) имеет следующий формат:

┌──────────┬───────────────┬───────┬─────────┬────────────────────────┬──────────────┐

│ │ Поле │ Длина │ Тип │ Описание │ Может ли │

│ │ │ │ │ │ данное поле │

│ │ │ │ │ │ (значение) │

│ │ │ │ │ │ изменяться │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│заголовок │ <signature> │ 2 │ int16 │ Сигнатура - │ Нет. В поле │

│ пакета │ │ │ │ предопределенное поле │ всегда │

│ NPL │ │ │ │данных в начале пакета, │ должно быть │

│ │ │ │ │ предназначенное для │ установлено │

│ │ │ │ │проверки на принимающей │значение 7E7E │

│ │ │ │ │ стороне того, что по │ │

│ │ │ │ │данному адресу в памяти │ │

│ │ │ │ │ находятся данные │ │

│ │ │ │ │ соответствующего │ │

│ │ │ │ │ пакета. Наличие │ │

│ │ │ │ │ сигнатуры является │ │

│ │ │ │ │ обязательным. │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <data_size> │ 2 │unsigned │ Определяет размер │ Нет. В поле │

│ │ │ │ int16 │ данных, находящихся │ всегда │

│ │ │ │ │ в поле <data>. Для │ должно быть │

│ │ │ │ │ незашифрованных и │ установлено │

│ │ │ │ │ зашифрованных пакетов │ значение 0 - │

│ │ │ │ │ <data_size> всегда │дополнительных│

│ │ │ │ │ равно размеру NPH │ данных в │

│ │ │ │ │ данных. │ пакете не │

│ │ │ │ │ Если данные передаются │ содержится │

│ │ │ │ │ в зашифрованном виде, │ │

│ │ │ │ │ размер поля <data> │ │

│ │ │ │ │ равен длине данных, │ │

│ │ │ │ │ выровненной по границе │ │

│ │ │ │ │ 8 байт (требования │ │

│ │ │ │ │ алгоритма Blowfish). │ │

│ │ │ │ │При этом дополнительные │ │

│ │ │ │ │ байты в расшифрованном │ │

│ │ │ │ │пакете не используются. │ │

│ │ │ │ │ Пример: если длина NPH │ │

│ │ │ │ │ пакета равна 18, │ │

│ │ │ │ │ то <data_size> = 18, │ │

│ │ │ │ │ а длина поля <data> │ │

│ │ │ │ │ равна 24. │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <flags> │ 2 │ int16 │ NPL_FLAG_CRC - │ Нет. В поле │

│ │ │ │ │ определяет расчет │ всегда │

│ │ │ │ │ контрольной суммы │ должно быть │

│ │ │ │ │ пакета (CRC) для │ установлено │

│ │ │ │ │обеспечения возможности │ значение 1 │

│ │ │ │ │ проверки валидности │ │

│ │ │ │ │ пакета получателем. │ │

│ │ │ │ │ Принимает значения: │ │

│ │ │ │ │ 0 - нет, 1 - да. │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <crc> │ 2 │unsigned │ Значение контрольной │ │

│ │ │ │ int16 │суммы поля <data>, либо │ │

│ │ │ │ │ 0x0000, если флаг │ │

│ │ │ │ │ NPL_FLAG_CRC │ │

│ │ │ │ │ не установлен. │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <type> │ 1 │ Byte │ Указывает тип │ Да │

│ │ │ │ │ передаваемых данных. │ │

│ │ │ │ │NPL_TYPE_ERROR - ошибка │ │

│ │ │ │ │ протокола NPL │ │

│ │ │ │ │ NPL_TYPE_NPH - пакет │ │

│ │ │ │ │ данных NPH │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │<peer_address> │ 4 │unsigned │ Определяет адрес │ Да │

│ │ │ │ int32 │ участника соединения: │ │

│ │ │ │ │ NPL_ADDRESS_SERVER - │ │

│ │ │ │ │сервер. Другие значения │ │

│ │ │ │ │ - мобильные устройства.│ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <request_id> │ 2 │unsigned │ Идентификатор пакета │ Да │

│ │ │ │ int16 │ (ID) рекомендуется │ │

│ │ │ │ │ делать уникальным хотя │ │

│ │ │ │ │ бы в рамках одной │ │

│ │ │ │ │сессии передачи данных. │ │

│ │ │ │ │ Например, выбрать │ │

│ │ │ │ │ некоторое значение │ │

│ │ │ │ │ ID при установке │ │

│ │ │ │ │ соединения и для │ │

│ │ │ │ │ каждого последующего │ │

│ │ │ │ │ пакета увеличивать │ │

│ │ │ │ │ его ID на единицу. │ │

│ │ │ │ │ При достижении │ │

│ │ │ │ │ 0 x FFFFFFFF следующее │ │

│ │ │ │ │значение ID будет равно │ │

│ │ │ │ │ 0 x 00000000 и т.д. │ │

├──────────┼───────────────┼───────┼─────────┼────────────────────────┼──────────────┤

│ │ <data> │ Var │ │ │ │

└──────────┴───────────────┴───────┴─────────┴────────────────────────┴──────────────┘

Пакеты протокола NPL однонаправленные, подтверждения не требуют.

<peer_address> входящего пакета указывает адрес отправителя пакета. В данном поле может передаваться либо адрес ССД (для пакетов, приходящих со стороны ССД на СТС), либо адрес СТС (для пакетов, приходящих со стороны СТС на ССД).