Введение

Комплект компьютерных программ и протоколов

UUCP (Unix to Unix Copy) — это комплект компьютерных программ и протоколов, обеспечивающих удалённое выполнение команд и передачу файлов, электронной почты и netnews между компьютерами. Команда named — одна из программ в комплекте; она предоставляет пользовательский интерфейс для запроса операций копирования файлов. В комплект UUCP также входят (пользовательский интерфейс для удалённого выполнения команд), (программа связи, осуществляющая передачу файлов), (отчёты статистики о недавней активности), (выполнение команд, отправленных с удалённых машин) и (отчёты об UUCP-имени локальной системы). Некоторые версии комплекта включают / (преобразование 8-битных двоичных файлов в 7-битный текстовый формат и обратно). Хотя UUCP был первоначально разработан на Unix в 1970-х и 1980-х годах и наиболее тесно связан с Unix-подобными системами, реализации UUCP существуют для ряда операционных систем, отличных от Unix, включая DOS, OS/2, OpenVMS (только для аппаратной платформы VAX), AmigaOS, классическую Mac OS и даже CP/M.

История

UUCP был первоначально разработан Майком Леском в лабораториях AT&T Bell Laboratories. К 1978 году он использовался на 82 UNIX-машинах внутри системы Bell, главным образом для распространения программного обеспечения. Он был выпущен в 1979 году в составе Unix версии 7. Первые электронные письма UUCP из США поступили в Соединенное Королевство в 1979 году, а обмен электронной почтой между Великобританией, Нидерландами и Данией начался в 1980 году, став регулярной услугой через EUnet в 1982 году. Оригинальный UUCP был переписан исследователями AT&T Питером Ханиманом, Дэвидом А. Новицем и Брайаном Э. Редманом примерно в 1983 году. Эта переработка получила название HDB или HoneyDanBer uucp, которая впоследствии была улучшена, исправлена и переупакована как BNU UUCP ("Basic Network Utilities" – Основные сетевые утилиты). Каждая из этих версий распространялась как проприетарное программное обеспечение, что вдохновило Яна Лэнса Тейлора в 1991 году написать новую версию с открытым исходным кодом с нуля. Taylor UUCP был выпущен под лицензией GNU General Public License. Taylor UUCP устранил уязвимости в системе безопасности, которые позволяли некоторым из оригинальных сетевых червей удаленно выполнять нежелательные команды оболочки. Taylor UUCP также включал в себя функции всех предыдущих версий UUCP, что позволяло ему взаимодействовать с любой другой версией и даже использовать аналогичные форматы файлов конфигурации из других версий. UUCP также был реализован для не-UNIX операционных систем, в частности для DOS. Пакеты, такие как UUSLAVE/GNUUCP (Джон Гилмор, Гарри Паксинос, Тим Позар), UUPC/extended (Дрю Дербишир из Kendra Electronic Wonderworks) и FSUUCP (Кристофер Амблер из IODesign), обеспечили ранний доступ персональных компьютеров к Интернету, расширив сеть за пределы взаимосвязанных университетских систем. FSUUCP послужил основой для многих пакетов систем электронных досок объявлений (BBS), таких как Major BBS от Galacticomm и Wildcat! BBS от Mustang Software, для подключения к сети UUCP и обмена электронной почтой и трафиком Usenet. Например, UFGATE (Джон Галвин, Гарри Паксинос, Тим Позар) был пакетом, который обеспечивал шлюз между сетями, работающими по протоколам Fidonet и UUCP. FSUUCP был единственной другой реализацией расширенного протокола "i" Тейлора, который значительно улучшил стандартный протокол "g", используемый большинством реализаций UUCP.

Технология

До широкого распространения доступа в Интернет компьютеры соединялись только небольшими локальными сетями внутри компании или организации. Они также часто оснащались модемами, чтобы их можно было использовать удалённо с текстовых терминалов через телефонные линии с коммутацией каналов. UUCP использовал модемы компьютеров для установления соединения с другими компьютерами, создавая временные, канальные соединения между ними. Каждая система в сети UUCP имеет список соседних систем, включающий номера телефонов, имена пользователей и пароли и т.д. Когда задача (передача файлов или запрос на выполнение команды) помещается в очередь для соседней системы, программа обычно устанавливает соединение с этой системой для её обработки. Программа также может периодически опрашивать своих соседей, чтобы проверить наличие задач в очереди на их стороне; это позволяет участвовать в сети системам, не имеющим возможности устанавливать исходящие соединения. Со временем соединения с коммутацией каналов были заменены подключением к Интернету, и UUCP добавил ряд новых протоколов канального уровня. Эти новые соединения также снизили потребность в UUCP, поскольку для использования новых сетей были разработаны новые прикладные протоколы. Сегодня UUCP редко используется с соединениями с коммутацией каналов, но иногда применяется через TCP/IP. По состоянию на начало 2006 года количество задействованных систем составляло от 1500 до 2000 узлов в 60 организациях. Долговечность UUCP объясняется его низкой стоимостью, подробным протоколированием, возможностью резервного перехода на соединение с коммутацией каналов и постоянным управлением очередями.

Первоначальное рукопожатие

При запуске uucico ответит, отправив идентификационную строку, \20Shere=hostname\0, где \20 – управляющий символ P, а \0 – завершающий нулевой символ. UUCP вызывающей стороны отвечает строкой \20Scallername options\0, где options – это строка, содержащая ноль или более опций в стиле Unix. Эти опции могут включать размеры пакетов и окон, максимальный поддерживаемый размер файла, параметры отладки и другие. В зависимости от конфигурации обеих систем, соединение может быть завершено на этом этапе. Например, если вызывающая сторона отвечает своим системным именем, вызываемая сторона может опционально разорвать соединение, если не распознает вызывающую сторону, отправив строку ответа RYou are unknown to me\0 и затем отключиться.

Запросы файлов

Если две системы успешно установили соединение, вызывающая сторона начнет отправлять серию запросов на файлы. Существует четыре типа:

S предписывает отправку файла от вызывающей к вызванной системе (загрузка). Указываются имена отправителя и получателя, что позволяет изменить имя файла на стороне получателя. При получении команды S вызванная система отвечает SY, если команда выполнена успешно и она готова принять файл, или SNx, если произошла ошибка, где x – код ошибки. Если вызывающая сторона получает SY, она начинает загрузку файла, используя протокол, выбранный при первоначальном установлении соединения (см. ниже). После завершения передачи вызванная система отвечает CY, если файл был успешно получен, или CN5, если произошла ошибка. R – запрос на отправку файла от вызванной системы вызывающей стороне (скачивание). В остальном он аналогичен S, используя RY и RN для подтверждения принятия команды и начала передачи данных или сообщения об ошибке, и ожидая CY и CN5 от вызывающей стороны по окончании передачи. X загружает команды для выполнения на вызванной системе. Это может быть использовано для инициирования вызова другой системы и передачи ей файлов. Вызванная система отвечает XY в случае успеха или XN в случае ошибки. H (разрыв соединения) указывает, что вызывающая сторона завершила работу. Вызванная система отвечает HY в случае успеха или HN в случае ошибки.

Последнее рукопожатие

После отправки команды H, вызывающая система отправляет завершающий пакет (control P, шесть нулей, нулевой терминатор), а вызываемая система отвечает (control P, семь нулей, нулевой терминатор). Некоторые системы могут просто разорвать соединение после успешного приема команды H, не выполняя окончательное подтверждение связи.

g-протокол

В составе набора протоколов UUCP, базовый g-протокол отвечает за передачу информации без ошибок. Изначально протокол был разработан как универсальная система доставки пакетов и, следовательно, предоставляет ряд функций, которые не используются пакетом UUCP целиком. К ним относятся дополнительный канал, способный передавать командные данные, чередуя их с передачей файлов, и возможность пересмотра размеров пакета и окна во время передачи. Эти дополнительные функции могут отсутствовать в некоторых реализациях стека протоколов UUCP. Формат пакета состоял из 6-байтового заголовка и от 0 до 4096 байт полезной нагрузки. Пакет начинается с одного символа \020 (управляющий символ P). За ним следует один байт, известный как "K", содержащий значение от 1 до 8, указывающее размер пакета от 32 до 4096 байт, или 9, обозначающее контрольный пакет. Многие системы поддерживали только K=2, что соответствовало 64 байтам. Следующие два байта представляли собой 16-битную контрольную сумму полезной нагрузки, не включая заголовок. Следующий байт – это тип данных, и, наконец, последний байт – XOR-сумма заголовка, позволяющая проверять его отдельно от полезной нагрузки. Они широко использовались на хостах UUCP, поскольку позволяли быстро окупить себя за счет снижения платы за междугородние соединения.

Другие протоколы

Реализации UUCP также включают другие протоколы передачи данных для использования по определенным каналам связи. Протокол f разработан для работы по 7-битным каналам с коррекцией ошибок. Изначально он предназначался для использования по каналам X.25, которые были популярны в 1980-х годах. Он не разбивает данные на пакеты, а отправляет весь файл в виде одной длинной строки, за которой следует контрольная сумма всего файла. Аналогичный протокол x, по всей видимости, практически не использовался. Протокол d был похож на x, но предназначался для использования в сетях Datakit, соединявших многие офисы Bell Labs.

Маршрутизация почты

Возможности и могли быть использованы для отправки электронной почты между машинами с использованием подходящих почтовых пользовательских интерфейсов и программ доставки. Простой UUCP-адрес электронной почты формировался из имени соседней машины, восклицательного знака (часто произносимого как "bang"), за которым следовало имя пользователя на соседней машине. Например, адрес barbox!user относился бы к пользователю user на соседней машине barbox. Более того, почта могла маршрутизироваться через сеть, проходя через любое количество промежуточных узлов, прежде чем достичь пункта назначения. Изначально это требовало указания полного пути – списка промежуточных имен хостов, разделенных восклицательными знаками. Например, если машина barbox не подключена к локальной машине, но известно, что barbox подключена к машине foovax, которая взаимодействует с локальной машиной, то правильным адресом для отправки почты был бы foovax!barbox!user. Пользователь barbox!user обычно публиковал свой UUCP-адрес электронной почты в формате !bigsite!foovax!barbox!user. Это указывало людям маршрутизировать свою почту на машину bigsite (предположительно, хорошо известную и широко связанную машину, доступную всем) и оттуда через машину foovax к учетной записи пользователя user на barbox. Публикация полного пути была бы бессмысленной, поскольку он отличался бы в зависимости от местоположения отправителя. (Например, Энн на одном сайте могла бы отправлять через путь gway!tcol!canty!uoh!bigsite!foovax!barbox!user, в то время как Билл из другого места должен был бы отправлять через путь pdp10!router22!bigsite!foovax!barbox!user). Многие пользователи предлагали несколько маршрутов от различных крупных известных сайтов, обеспечивая еще более надежное и, возможно, более быстрое соединение для отправителя почты.

Путь взрыва

Адрес электронной почты такого формата был известен как "путь через bang" (или "bang-путь"). В 1981 году пути через bang, состоящие из восьми-десяти машин (или переходов), были обычным явлением, а ночные соединения UUCP могли приводить к неделям передачи данных. Пути через bang часто выбирались исходя из времени передачи и надежности, поскольку сообщения часто терялись. Некоторые хосты даже пытались "переписать" путь, отправляя почту по "более быстрым" маршрутам – эта практика не одобрялась. "Псевдодомен" с окончанием uucp иногда использовался для обозначения имени хоста, доступного по сети UUCP, хотя он никогда официально не регистрировался в системе доменных имен (DNS) как домен верхнего уровня. Сообщество UUCP самоуправлялось и не соответствовало методам администрирования и правилам, регулирующим DNS; UUCP работает там, где это необходимо. Некоторые хосты перенаправляют почту из очереди SMTP в очереди UUCP на шлюзовых машинах, если адрес UUCP распознается во входящем SMTP-соединении. Трафик Usenet первоначально передавался по протоколу UUCP, используя пути через bang. Они до сих пор используются в формате сообщений Usenet в заголовках Path. Теперь они имеют только информационное назначение и не используются для маршрутизации, хотя могут использоваться для предотвращения петель. В целом, как и другие устаревшие форматы адресов электронной почты, bang-пути были вытеснены обозначением "@", даже на сайтах, которые все еще используют UUCP. Сайт, использующий только UUCP, может зарегистрировать доменное имя DNS, и DNS-сервер, обслуживающий этот домен, может предоставлять MX-записи, которые направляют интернет-почту на этот сайт на UUCP-хост в Интернете, который затем доставит почту на сайт UUCP.

UUCPNET и картографирование

UUCPNET – это название, данное всей сети компьютеров, соединенных посредством UUCP. Эта сеть была крайне неформальной и поддерживалась в духе взаимного сотрудничества между системами, принадлежащими тысячам частных компаний, университетов и других организаций. Зачастую, особенно в частном секторе, соединения UUCP устанавливались без официального одобрения высшего руководства компаний. Сеть UUCP постоянно менялась по мере добавления новых систем и телефонных соединений, удаления существующих и т.д. Проект картографирования UUCP представлял собой добровольную и в значительной степени успешную попытку создать карту соединений между машинами, являвшимися открытыми почтовыми ретрансляторами, и организовать управляемое пространство имен. Каждый системный администратор отправлял по электронной почте список систем, к которым его система подключалась, с указанием рейтинга для каждого соединения. Эти данные о карте обрабатывались автоматической программой, объединявшей их в единый набор файлов, описывающих все соединения в сети. Эти файлы ежемесячно публиковались в специальной новостной группе. Файлы карт UUCP могли использоваться таким программным обеспечением, как "pathalias", для вычисления оптимального маршрута доставки почты между машинами и автоматической настройки этого маршрута. Карты UUCP также содержали контактную информацию о сайтах, что облегчало поиск потенциальных соседей для тех, кто хотел присоединиться к UUCPNET.

Подключение к Интернету

Многие хосты UUCP, особенно в университетах, также были подключены к Интернету на заре его развития, и были разработаны шлюзы электронной почты между почтой, основанной на SMTP в Интернете, и почтой UUCP. Пользователь системы с UUCP-соединениями мог таким образом обмениваться сообщениями с пользователями Интернета, а интернет-соединения могли использоваться для обхода значительных участков медленной сети UUCP. Для упрощения этих интерфейсов в пространстве имен доменов Интернета была определена "зона UUCP". Благодаря этой инфраструктуре, преимуществом UUCP было то, что оно позволяло сайту получить доступ к электронной почте в Интернете и Usenet, используя лишь модемное соединение с другим взаимодействующим компьютером. Это было в то время, когда полноценный доступ в Интернет требовал арендованной линии связи, обеспечивающей подключение к точке присутствия в Интернете, что было и дорогостоящим, и сложным в организации. В отличие от этого, соединение с сетью UUCP обычно можно было установить, совершив несколько телефонных звонков администраторам потенциальных соседних систем. Соседние системы часто находились достаточно близко, чтобы избежать всех, кроме самых минимальных, тарифов за телефонные звонки.

Удаленные команды

uux – это удаленное выполнение команд через UUCP. Команда uux используется для выполнения команды на удаленной системе или для выполнения команды на локальной системе с использованием файлов с удаленных систем. Команда выполняется демоном, который обрабатывает запросы удаленного выполнения как очередной тип файла для пакетной отправки на удаленную систему, когда доступен следующий узел в маршруте. Удаленная система затем выполнит запрошенную команду и вернет результат, когда исходная система снова станет доступна. Оба этих обмена данными могут быть косвенными, через многошаговые маршруты, с произвольными временными окнами доступности. Даже при выполнении команды на постоянно доступном узле, uux не является мгновенным.

Упадок

Использование UUCP начало сокращаться с распространением интернет-провайдеров, предлагающих недорогие услуги SLIP и PPP. Проект картографирования UUCP был официально закрыт в конце 2000 года. В настоящее время протокол UUCP в основном заменен интернет-протоколами TCP/IP, такими как SMTP для электронной почты и NNTP для Usenet-новостей. В июле 2012 года голландский интернет-провайдер XS4ALL закрыл свой UUCP-сервис, заявив, что это "вероятно, один из последних провайдеров в мире, который его еще предоставлял"; на момент закрытия у него оставалось всего 13 пользователей (ранее, в течение нескольких лет, он отказывал в обслуживании новым пользователям).

Текущее использование и наследие

Одной из сохранившихся особенностей UUCP является формат файла чата, во многом унаследованный программным пакетом Expect. UUCP использовался по специализированным и дорогостоящим каналам связи (например, через морские спутниковые каналы) ещё долго после того, как его применение прекратилось в других областях, и до сих пор применяется в устаревших системах. Помимо устаревшего использования, в 2021 году наблюдается рост новых и инновационных способов применения UUCP, особенно в телекоммуникациях в диапазоне высоких частот, например, для сообществ в бассейне реки Амазонки для обмена электронной почтой и других целей. В пакет UUCP Debian Linux был внесён патч к UUCP Иана для адаптации к проекту HERMES (High Frequency Emergency and Rural Multimedia Exchange System), который обеспечивает UUCP-соединение по HF-каналу. В середине 2000-х годов также использовался UUCP через TCP/IP (часто зашифрованный с использованием протокола SSH). Термин "Bang path" также применяется для обозначения любого явно заданного маршрута между сетевыми узлами. Это использование не ограничивается исключительно UUCP, IP-маршрутизацией, электронной почтой или Usenet. Концепция протоколов устойчивой к задержкам передачи данных была вновь рассмотрена в начале 2000-х годов. Подобные методы, используемые в UUCP, могут быть применены и к другим сетям, подверженным задержкам или значительным перебоям в работе.