Следующая:y Protocol, Следующая:, Предыдущая:x Protocol, Вверх:Protocols



UUCP y Protocol

Протокол y был первоначально разработан Jorge Cwik для использования в FX UUCICO, PC UUCICO программе. Он предназначен для линий связи, которые поддерживают исправление ошибок и управление потоком данных. Для работы протокола требуется чистое восьми битовое соединение. Осуществляет обнаружение ошибок, но не поддерживает исправление ошибок: когда ошибка обнаружена, линия просто сбрасывается. Данный протокол ориентирован на потоки, подобно протоколу f; подтверждения пакетов отсутствуют, поэтому протокол является эффективным для полудуплексных коммуникационных линий связи типа PEP.

Каждый пакет содержит шести байтовый заголовок:

sequence low byte
sequence high byte
Двухбайтовый последовательный номер, в порядке little endian. Первый номер в последовательности составляет 0. Так как первый пакет - это всегда sync пакет (описанный ниже) то номер последовательности (sequence number) для первого пакета данных всегда составляет 1. Каждая система посчитывает номера независимо.
length low byte
length high byte
Двухбайтовая длина данных, в порядке little-endian. Если старший бит шестнадцати битового поля сброшен, то это количество байт данных, которые следуют за шести байтовым заголовком. Если старший бит установлен, то данные отсутствуют, а поле длины является полем типа пакета управления.
checksum low byte
checksum high byte
Двухбайтовая контрольная сумма, порядок байт little endian. Контрольная сумма вычисляется для всех байт данных. Алгоритм подсчета контрольной суммы описан ниже. Если байты данных отсутствуют, то контрольная сумма отсылается как 0.
Когда протокол стартует, каждая сторона отсылает sync пакет. Это пакет содержит нормальный шести байтовый заголовок, за которым следуют данные. Последовательный номер (sequence number) sync пакета должен быть равен 0. В настоящее время, отсылается четыре байты данных с помощью sync пакета. Дополнительные байты должны просто игнорироваться. Байты данных определяются следующим образом:
version
Номер версии протокола. В настоящее время составляет 1. Большие номера должны игнорироваться; ответственность за поддержку младших версий лежит на старших версиях.
packet size
Максимальная используемая длина данных, деленная на 256. Отсылается как один байт. Максимальная разрешенная длина данных составляет - 32768, которая отсылается как 128. Обычно две взаимодействующие системы используют ту же самую максимальную длину данных, причем более низкую из двух запрошенных длин.
flags low byte
flags high byte
Двух байтовый флаг. В настоящее время значения флагов не определены. Данные байты должны отсылаться как 0, и игнорироваться приемником.

В поле длины может устанавливаться старший бит пакета управления. Определены следующие типы управляющих пакетов:

0xfffe YPKT_ACK
Подтверждает правильный прием файла.
0xfffd YPKT_ERR
Указывает на неправильную контрольную сумму.
0xfffc YPKT_BAD
Указывает на плохой последовательный номер (sequence number), недопустимую длину, или на некоторую другую ошибку.

Если принимается управляющий пакет, отличный от 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 перед продолжением работы; при этом делается достаточно большой временной таймаут, так как по коммуникационному пути может быть буферизировано достаточно большое количество данных.