Читаем Операционная система UNIX полностью

Транспортный примитивТип сообщенияЗначение
T_BIND_REQM_PROTOЗапрос на связывание. Этот примитив инициируется пользователем транспортных услуг и запрашивает связывание потока с адресом протокола. Сообщение состоит из одного блока M_PROTO, который содержит значение адреса и заказанное максимальное число запросов, ожидающих обслуживания со стороны пользователя. Последний параметр игнорируется для транспортных услуг без предварительного установления связи. Блок M_PROTO содержит следующие поля:
PRIM typeТип примитива — T_BIND_REQ
ADDR_lengthРазмер адреса протокола
ADDR_offsetСмещение адреса в блоке M_PROTO
CONIND_numberМаксимальное число запросов, ожидающих обслуживания
T_BIND_ACKM_PCPROTOПодтверждение получения запроса на связывание. Этот примитив отправляется пользователю транспортных услуг и означает, что поток был связан с адресом протокола, заказанное максимальное число ожидающих запросов допустимо и поток был активизирован. Сообщение состоит из одного блока M_PCPROTO, содержащего значения указанных параметров. Заметим, что возвращаемый адрес может не совпадать с адресом, указанным в запросе T_BIND_REQ. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_BIND_ACK
ADDR_lengthРазмер адреса протокола
ADDR_offsetСмещение адреса в блоке M_PROTO
CONIND_numberМаксимальное число запросов, ожидающих обслуживания
T_UNBIND_REQM_PROTOЗапрос на уничтожение связывания. Этот примитив инициируется пользователем транспортных услуг и запрашивает у поставщика уничтожение ранее созданного связывания потока с адресом протокола и деактивизацию потока.
T_CONN_REQM_PROTOЗапрос на установление связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи. Он инициируется пользователем транспортных услуг и запрашивает установление связи с указанным адресатом. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Заметим, что протокол TCP не позволяет передавать прикладные данные вместе с запросом. Блок M_PROTO содержит значение адреса получателя и опции, связанные с этим примитивом. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_CONN_REQ
DEST_lengthРазмер адреса протокола
DEST_offsetСмещение адреса получателя в блоке M_PROTO
ОРТ_lengthРазмер опций
ОРТ_offsetСмещение опций в блоке M_PROTO
T_CONN_INDM_PROTOИндикация установления связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи и свидетельствует о том, что удаленным пользователем с указанным адресом был сделан запрос на установление связи. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Блок M_PROTO содержит значение адреса удаленного пользователя, отправившего запрос на установление связи, а также опции, связанные с этим примитивом. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_CONN_IND
SRC_lengthРазмер адреса протокола
SRC_offsetСмещение адреса отправителя в блоке M_PROTO
OPT_lengthРазмер опций
OPT_offsetСмещение опций в блоке M_PROTO
SEQ_numberИдентификатор соединения
T_CONN_RESM_PROTOОтвет на запрос на установление связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи и свидетельствует о том, что поставщик транспортных услуг принимает предшествующий запрос на установление связи. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Блок M_PROTO содержит указатель на очередь чтения потока, который будет обрабатывать запрос. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_CONN_RES
QUEUE_ptrУказатель на очередь потока, который должен быть использован в качестве узла созданного соединения
OPT_lengthРазмер опций
OPT_offsetСмещение опций в блоке M_PROTO
SEQ_numberИдентификатор соединения
T_CONN_CONM_PROTOПодтверждение установления связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи. Он отправляется пользователю транспортных услуг в качестве подтверждения установления связи с удаленным пользователем. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Блок M_PROTO содержит значение размера адреса, сам адрес удаленного пользователя, обслуживающего соединение, а также опции, связанные с этим примитивом. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_CONN_CON
RES_lengthРазмер адреса протокола
RES_ offsetСмещение адреса удаленного узла в блоке M_PROTO
OPT_lengthРазмер опций
ОРТ_offsetСмещение опций в блоке M_PROTO
Т_DISCON_REQM_PROTOЗапрос на разрыв связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи. Он инициируется пользователем транспортных услуг и свидетельствует либо об отказе пользователем в установлении связи, либо о желании пользователя разорвать уже существующее соединение для данного потока. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_DISCON_REQ
SEQ_numberИдентификатор соединения
Т_DISCON_INDM_PROTOИндикация разрыва связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи и свидетельствует о том, что удаленный пользователь либо отказывает в установлении связи, либо желает разорвать существующее соединение. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные, определенные пользователем. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_DISCON_IND
DISCON_reasonПричина разрыва связи
SEQ_numberИдентификатор соединения
Т_ORDREL_REQM_PROTOЗапрос на "аккуратное" прекращение связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи и указывает поставщику транспортных услуг, что пользователь завершил передачу данных. При этом соединение переходит в симплексный режим, позволяя пользователю принимать данные от удаленного узла. Сообщение состоит из одного блока M_PROTO.
Т_ORDREL_INDM_PROTOИндикация "аккуратного" прекращения связи. Этот примитив применим только для транспортных услуг с предварительным установлением связи и отправляется пользователю транспортных услуг, свидетельствуя о том, что удаленный пользователь соединения завершил передачу данных. При этом соединение переходит в симплексный режим, позволяя пользователю передавать данные удаленному узлу. Сообщение состоит из одного блока M_PROTO.
T_UNIDATA_REQM_PROTOЗапрос на передачу данных. Этот примитив применим только для транспортных услуг без предварительного установления связи и отправляется пользователем транспортных услуг в качестве запроса на передачу дата- граммы. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные пользователя. Блок M_PROTO содержит значение размера адреса и сам адрес получателя датаграммы, а также опции, связанные с этим примитивом. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_UNIDATA_REQ
DEST_lengthРазмер адреса протокола
DEST_offsetСмещение адреса получателя в блоке M_PROTO
OPT_lengthРазмер опций
ОРТ_offsetСмещение опций в блоке M_PROTO
Т_UNITDATA_INDM_PROTOИндикация получения данных. Этот примитив применим только для транспортных услуг без предварительного установления связи и указывает пользователю, что поставщиком транспортных услуг получена датаграмма от удаленного узла. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные пользователя. Блок M_PROTO содержит значение адреса отправителя датаграммы, а также опции, связанные с этим примитивом. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_UNIDATA_IND
SRC lengthРазмер адреса протокола
SRC_offsetСмещение адреса отправителя в блоке M_PROTO
OPT_lengthРазмер опций
ОРТ_offsetСмещение опций в блоке M_PROTO
T_UDERROR_INDM_PROTOСообщение об ошибке датаграммы. Этот примитив применим только для транспортных услуг без предварительного установления связи и указывает пользователю, что датаграмма с указанным адресом получателя и опциями вызвала ошибку. Сообщение состоит из одного блока M_PROTO, содержащего размер адреса и сам адрес получателя, опции, а также код ошибки, зависящий от конкретного транспортного протокола. Блок M_PROTO содержит следующие поля:
PRIM_typeТип примитива — T_UDERROR_IND
DEST_lengthРазмер адреса протокола
DEST_offsetСмещение адреса отправителя в блоке M_PROTO
OPT_lengthРазмер опций
OPT_offsetСмещение опций в блоке M_PROTO
ERROR_typeКод ошибки
T_DATA_REQM_PROTOЗапрос на передачу данных. Этот примитив применим только для транспортных услуг без предварительного установления связи и информирует поставщика транспортных услуг, что сообщение содержит пакет данных интерфейса (Transport Interface Data Unit, TIDU). Одно или более таких сообщений формируют пакет данных протокола TSDU. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные пользователя. Блок M_PROTO содержит флаг MORE_flag, указывающий, является ли следующее сообщение T_DATA_REQ частью того же TSDU. На основании этого флага поставщик транспортных услуг компонует транспортные пакеты TSDU. Передача данных с помощью запросов T_DATA_REQ позволяет сохранить границы записи при передаче. Заметим, что протоколом TCP данная возможность не поддерживается.
T_DATA_INDM_PROTOИндикация получения данных. Этот примитив применим только для транспортных услуг без предварительного установления связи и информирует пользователя, что сообщение содержит пакет данных интерфейса TIDU. Сообщение состоит из одного блока M_PROTO, за которым может следовать один или несколько блоков типа M_DATA, содержащих прикладные данные удаленного пользователя. Блок M_PROTO содержит флаг MORE_flag, позволяющий пользователю определить границы TSDU.
Т_EXDATA_REQM_PROTOЗапрос на передачу экстренных данных. Этот примитив аналогичен T_DATA_REQ, но служит для передачи экстренных данных. Протокол TCP поддерживает передачу экстренных данных с помощью функции t_snd(3N) с аргументом flags, содержащим флаг T_EXPEDITED и, возможно, T_MORE.
T_EXDATA_INDM_PROTOИндикация получения экстренных данных. Этот примитив аналогичен T_DATA_IND, но служит для передачи пользователю экстренных данных.
T_OK_ACKM_PCPROTOПоложительное подтверждение. Этот примитив сообщает пользователю транспортных услуг, что предшествующий примитив, инициированный им, был успешно принят поставщиком транспортных услуг. В то же время, получение подтверждения не означает, что поставщиком были совершены какие-либо действия, связанные с предыдущим примитивом. Сообщение состоит из одного блока M_PCPROTO в котором хранится тип подтвержденного примитива CORRECT_prim.
T_ERROR_ACKM_PCPROTOСообщение об ошибке. Этот примитив сообщает пользователю услуг, последний примитив, инициированный им, вызвал ошибку. Получение этого примитива может рассматриваться как отрицательное подтверждение, свидетельствующее, что никаких действий, связанных с ошибочным примитивом, не было предпринято. Сообщение состоит из одного блока M_PCPROTO, содержащего тип примитива, вызвавшего ошибку, код TLI и код системной ошибки UNIX. Блок M_PCPROTO содержит следующие поля:
PRIM_typeТип примитива — T_ERROR_ACK
ERROR_primТип ошибочного примитива
TLI_errorКод ошибки TLI
UNIX_errorКод системной ошибки UNIX
T_INFO_REQM_PCPROTOЗапрос на получение параметров транспортного протокола. Этот примитив служит для запроса пользователем значений размеров различных параметров протокола, а также информации о текущим состоянии поставщика транспортных услуг. Сообщение состоит из одного блока M_PCPROTO.
T_INFO_ACKM_PCPROTOПараметры транспортного протокола. Этот примитив служит для передачи пользователю ранее запрошенных с помощью T_INFO_REQ параметров транспортного протокола. Сообщение состоит из одного блока M_PCPROTO, содержащего информацию, часть из которой возвращается функцией t_open(3N), рассмотренной в разделе "Программный интерфейс сокетов" ранее в этой главе. Блок M_PCPROTO состоит из следующих полей:
PRIM_typeТип примитива — T_INFO_ACK
TSDU_sizeОпределяет максимальный размер пакета данных протокола TSDU
ETSDU_sizeОпределяет максимальный размер пакета экстренных данных протокола ETSDU
CDATA_sizeОпределяет максимальный объем данных, передаваемых при установлении связи. Соответствует полю connect структуры info функции t_open(3N)
DDATA_sizeОпределяет максимальный объем данных, передаваемых при разрыве связи. Соответствует полю discon структуры info функции t_open(3N)
ADDR_sizeОпределяет максимальный объем транспортного протокола. Соответствует полю addr структуры info функции t_open(3N)
OPT_sizeОпределяет размер опций для данного протокола. Соответствует полю options структуры info функции t_open(3N)
TIDU_sizeОпределяет размер пакета данных интерфейса TIDU
SERV_typeОпределяет тип транспортных услуг, предоставляемых поставщиком. Соответствует полю servtype структуры info функции t_open(3N)
CURRENT_stateОпределяет текущее состояние поставщика транспортных услуг
PROVIDER_flagОпределяет дополнительные характеристики поставщика транспортных услуг
T_OPTMGMT_REQM_PROTOУправление опциями протокола. Этот примитив позволяет пользователю получить или установить опции протокола. Сообщение состоит из одного блока M_PROTO, включающего следующие поля:
PRIM_typeТип примитива — T_OPTMGMT_REQ
OPT_lengthРазмер опций
ОРТ_offsetСмещение опций в блоке M_PROTO
MGMT_flagsФлаги, определяющие характер запроса пользователя: T_NEGOTIATE — установить опции, указанные пользователем. В результате опции, установленные поставщиком, могут отличаться от заказанных; T_CHECK — проверить, поддерживаются ли опции, указанные пользователем, поставщиком; T_DEFAULT — возвратить значения опций протокола.
T_OPTMGMT_ACKM_PCPROTOПоложительное подтверждение. Этот примитив подтверждает завершение операции с опциями протокола, заказанными пользователем. Сообщение состоит из одного блока M_PROTO, включающего те же поля, что и T_OPTMGMT_REQ.
Перейти на страницу:

Похожие книги