Следующая:y Protocol, Следующая:d Protocol, Предыдущая:x Protocol, Вверх:Protocols
y
ProtocolПротокол y
был первоначально разработан Jorge Cwik для
использования в FX UUCICO, PC UUCICO программе. Он предназначен для
линий связи, которые поддерживают исправление ошибок и управление
потоком данных. Для работы протокола требуется чистое восьми битовое
соединение. Осуществляет обнаружение ошибок, но не поддерживает
исправление ошибок: когда ошибка обнаружена, линия просто
сбрасывается. Данный протокол ориентирован на потоки, подобно
протоколу f
; подтверждения пакетов отсутствуют, поэтому протокол
является эффективным для полудуплексных коммуникационных линий связи
типа PEP.
Каждый пакет содержит шести байтовый заголовок:
В поле длины может устанавливаться старший бит пакета управления. Определены следующие типы управляющих пакетов:
YPKT_ACK
YPKT_ERR
YPKT_BAD
Если принимается управляющий пакет, отличный от YPKT_ACK
то
соединение сбрасывается. Если обнаружена ошибка контрольной суммы для
полученного пакета, то отсылается пакет управления YPKT_ERR
, а
соединение сбрасывается. Если принимается пакет с недопустимым номером
последовательности (sequence number), то отсылается управляющий пакет
YPKT_BAD
, а соединение сбрасывается.
Контрольная сумма инициализируется значением 0xffff. Каждый байт данных пакета модифицируется эту контрольную сумму следующим образом (где b - байт данных):
/* Rotate the checksum left. */ if ((ichk & 0x8000) == 0) ichk <<= 1; else { ichk <<= 1; ++ichk; } /* Add the next byte into the checksum. */ ichk += b;
Это тот же самый алгоритм, который используется протоколом f
.
Команда отсылается как заканчивающаяся нулевым байтом последовательность пакетов данных. Обычно, команда помещается в единственный пакет. Длина пакет должна быть равна длине команды плюс нулевой завершающий байт. Если команда слишком длинная, то отсылается большее количество пакетов.
Файл отсылается как последовательность пакетов данных, заканчивающихся пакетом нулевой длины. Пакеты данных могут иметь любую длину большую, чем ноль и меньше или равную максимально разрешенной длине пакета, указанной в стартовом SYNC пакете.
После того, как отсылается финальный пакет нулевой длины, приемная
сторона отсылает управляющий пакет YPKT_ACK
. Сторона, которая
отправляет файл, ожидает данный управляющий пакет YPKT_ACK
перед
продолжением работы; при этом делается достаточно большой временной
таймаут, так как по коммуникационному пути может быть буферизировано
достаточно большое количество данных.