Справочник по сетевым протоколам

       

Команда на посылку данных


Формат

SEND (местное название соединения, адрес буфера, количество байтов с данными, флаг проталкивания, флаг срочности [контрольное время])

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

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

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

От шлюза приходит сообщение с кодом 0 ,а от хост-компьютера - сообщение с кодом 1.



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
Формат сообщения об ошибках с параметрами
Тип Код Контрольная сумма
указатель не используется
Internet заголовок + 64 бита данных из исходной датаграммы

Поля IP протокола:

Адрес получателя

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


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

В простейших реализациях команда SEND не предает управление обратно вызвавшей ее программе, пока не будет завершена передача или пока не будет превышено контрольное время. Однако, такой простой метод может приводить к блокировке (на пример, когда обе стороны на концах соединения пытаются сперва выполнить команду SEND, а лишь потом - RECEIVE) и плохим эксплуатационным характеристикам. Поэтому такой подход не рекомендуется использовать. В более сложной реализации возврат из функции SEND осуществляется незамедлительно, что позволяет процессу выполняться параллельно с вводом/выводом в компьютерную сеть. И даже более того - позволяет выполнять одновременно несколько команд SEND. Множественные команды SEND обрабатываются по принципу "первый пришел первый обслужен", поэтому протокол TCP будет иметь очередь, которая не может быть обслужена мгновенно.

Косвенным образом мы предположили асинхронность интерфейса с клиентом, при которой команда SEND вызывает появление особого рода сигнала или псевдо-прерывания из обслуживающей программы TCP. Альтернатива состоит в немедленном возврате из команды. Например, команды SEND могут возвращать немедленно подтверждение от местной системы, даже если посланный сегмент не получил подтверждения от чужой программы TCP. Мы оптимистически относимся к возможному успеху этой операции. Если мы ошибаемся, то соединение в любом случае будет разорвано по истечении контрольного времени. В реализациях протокола TCP такого типа (синхронных) будет все равно оставаться некоторые асинхронные сигналы, однако они будут относиться к самому соединению, а не к конкретным сегментам или буферам.

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


Содержание раздела