Следующая:f Protocol, Следующая:t Protocol, Предыдущая:g Protocol, Вверх:Protocols
f
ProtocolUUCP 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 проверяет возвращенный символ и действует соответствующим образом.