7.1.1 Введение
Транспортный уровень интерфейса команд работает поверх физического уровня - уровня канала, определяемого используемой физической реализацией. Для базовых физических реализаций карт стандарта ПК интерфейс - на уровне канала в соответствии с приложением А. Транспортный протокол предполагает, что уровень канала надежен: данные передаются в правильном порядке, без удаления или повторения данных.
Транспортный протокол является протоколом типа "команда-ответ": узел отправляет модулю команду, используя Блок данных команды транспортного протокола (Command Transport Protocol Data Unit; C_TPDU), и ожидает ответа от модуля в Блоке данных ответа транспортного протокола (Response Transport Protocol Data Unit; R_TPDU). Модуль не может инициировать обмен данными. Он должен ожидать запрос от узла или сначала отправить этому узлу данные. Протокол поддерживается одиннадцатью объектами транспортного уровня. Часть объектов появляется только в блоках C_TPDU от узла, некоторые только в блоках R_TPDU от модуля, и некоторые могут появиться в обоих перечисленных блоках. Функции объектов транспортного уровня:
- Create_T_C, C_T_C_Reply создают новые транспортные соединения;
- Delete_T_C, D_T_C_Reply удаляют транспортные соединения;
- Request_T_C, New_T_C позволяют модулю запрашивать узел о создании нового транспортного соединения;
- T_C_Error сигнализирует о состоянии ошибки;
- T_SB переносит информацию о состоянии модуля к узлу;
- T_RCV запрашивает ожидаемые данные от модуля;
- T_Data_More, T_Data_Last передают данные между узлом и модулем от более высоких уровней. T_Data_Last с пустым полем данных используется узлом для регулярного опроса данных от модуля, когда у узла нет данных для передачи.
C_TPDU от узла содержит только один объект транспортного протокола. R_TPDU может переносить от модуля один или два объекта транспортного протокола. Единственный объект или второй объект из двух объектов в блоке R_TPDU всегда является объектом блока T_SB.
7.1.2 Объекты транспортного протокола
Все объекты транспортного уровня содержат идентификатор транспортного соединения ИТС (transport connection identifier; TCI). ИТС представляет собой поле в 1 байт. ИТС позволяет установить одновременно до 255 активных соединений транспортного уровня на узел. Значение ИТС всегда устанавливает узел. Значение ИТС, равное 0, зарезервировано. В настоящем стандарте протокол описывается в подробностях, касающихся общей части для всех физических реализаций, параметры объектов описываются только в общих чертах. Подробности кодирования объектов определяются используемым физическим уровнем. Параметры кодирования для физической реализации стандартных карт ПК в соответствии с приложением А.
Узел должен обеспечивать создание не менее 16 транспортных соединений на поддерживаемый сокет модуля. Рекомендуется обеспечивать создание и распределение 255 соединений среди сокетов модуля.
Функции объектов транспортного уровня:
- Create_T_C создает транспортное соединение. Create_T_C выпускается узлом и переносит значение ИТС для соединения, которое будет установлено;
- C_T_C_Reply является ответом целевого модуля на Create_T_C, он переносит ИТС для создаваемого соединения;
- Delete_T_C удаляет существующее транспортное соединение. В качестве параметра используется значение ИТС соединения, которое будет удалено. Блок может быть выпущен узлом или модулем. Модуль выпускает Delete_T_C в ответ на запрос или в ответ на данные от узла;
- D_T_C_Reply является ответом на удаление. При некоторых обстоятельствах этот ответ может не достигнуть своего места назначения в связи с этим объект Delete_T_C связан с временем ожидания (тайм-аутом). Если ситуация тайм-аута назревает до получения ответа, то все меры, которые были бы предприняты для получения ответа, могут быть предприняты на интервале тайм-аута;
- Request_T_C модуль запрашивает узел о создании нового транспортного соединения. Он отправляется от модуля на существующем транспортном соединении в ответ на запрос или на данные от узла;
- New_T_C является ответом на Request_T_C. Он отправляется на том же самом транспортном соединении, как и объект Request_T_C, он переносит ИТС нового соединения. New_T_C сопровождается объектом Create_T_C для нового соединения, которое устанавливает надлежащее транспортное соединение;
- T_C_Error сигнализирует о состоянии ошибки и переносит код ошибки, определяющий ошибку, в поле размером 1 байт. В данной версии этот блок отправляется в ответ на Request_T_C;
- T_SB отправляется модулем как ответ на все объекты, полученные от узла, или добавляется к другим объектам протокола, или пересылается как собственное, в зависимости от обстоятельств. Переносится в 1 байте;
- T_RCV отправляется узлом для запроса тех данных, которые модуль хочет отправить (запрос содержится в предыдущем TSB от модуля) к узлу;
- T_Data_More и T_Data_Last передают данные между узлом и модулем и могут быть в любом блоке C_TPDU или R_TPDU. От модуля они отправляются только в ответ на явный запрос T_RCV от узла. T_Data_More используется, если Модуль данных протокола (Protocol Data Unit, PDU) от более высокого уровня должен быть разделен на фрагменты для передачи из-за внешних ограничений на размер передаваемых данных. Он указывает на то, что после него будет отправлено не менее еще одного фрагмента PDU верхнего уровня. T_Data_Last указывает на последний или единственный фрагмент PDU верхнего уровня.
7.1.3 Транспортный протокол
На рисунках 5 и 6 показаны диаграммы изменения состояний для установления соединения и разрыва соединения на стороне узла и стороне модуля соответственно.