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



UUCP f Protocol

UUCP f протокол

Протокол f является семи битовым протоколом, в котором контрольная сумма подсчитывает для целого файла. При передаче используются символы между символами \040 и \176 (ASCII space и ~) включительно и символ перевода каретки. Данный прокол является эффективным для передачи текстовых файлов, но очень неэффективным для передачи восьми битовых данных (например, сжатых новостей). Отсутствует управление потоком, а контрольная сумма довольно опасна для больших файлов, поэтому использование на нескольких последовательных подключениях требует handshaking (может использоваться XON/XOFF) и модемов с исправлением ошибок. Некоторые люди считают, что данный протокол не должен использоваться даже при этих обстоятельствах. Я (автор) считаю, что протокол f произошел от BSD версий UUCP. Данный протокол был первоначально предназначен для передачи по X.25 PAD.

В протоколе f отсутствует стартовый (startup) протокол или концевой (finish) протокол. Однако обе стороны обычно бездействуют нескольких секунд перед запуском, потому что они переключают терминал в режим XON/XOFF и хотят, чтобы все изменения улеглись перед начинающейся передачей.

Когда пакет UUCP передает команду, он просто отсылает строку, заканчивающуюся переводом каретки.

Когда пакет UUCP передает файл, каждый байт b файла транслируется согласно следующей таблице:

       0 <= b <=  037: 0172, b + 0100 (0100 to 0137)
     040 <= b <= 0171:       b        ( 040 to 0171)
    0172 <= b <= 0177: 0173, b - 0100 ( 072 to  077)
    0200 <= b <= 0237: 0174, b - 0100 (0100 to 0137)
    0240 <= b <= 0371: 0175, b - 0200 ( 040 to 0171)
    0372 <= b <= 0377: 0176, b - 0300 ( 072 to  077)

То есть байты между \040 и \171 включительно передаются, как есть, а все другие байты - префиксируются и модифицируются, как показано.

Когда все данные файла отосланы, отсылается семи байтовая последовательность: два байта \176, затем четырех байтовая ASCII контрольная сумма, по основанию 16 и сопровождаемая переводом каретки. Например, если контрольная сумма составляет 0x1234, будет отослано: \176\1761234\r.

Контрольная сумма инициализируется 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;

Когда получающий UUCP видит контрольную сумму, он сравнивает ее со своей собственной, посчитанной контрольной суммой и отвечает одним символом, за которым следует переводом каретки.

G
Файл получен правильно.
R
Контрольная сумма не соответствует, и файл должен быть снова отослан с начала файла.
Q
Контрольная сумма не соответствует, было предпринято слишком много переповторов, потому сеанс связи должен быть оставлен.

Отправляющий UUCP проверяет возвращенный символ и действует соответствующим образом.