UUCP ( Unix-to-Unix Copy ) [1] — это набор компьютерных программ и протоколов, позволяющих удаленно выполнять команды и передавать файлы , электронную почту и сетевые новости между компьютерами .
Команда с именем uucp
— одна из программ в наборе; она предоставляет пользовательский интерфейс для запроса операций копирования файлов. Набор UUCP также включает uux
(пользовательский интерфейс для удаленного выполнения команд), uucico
(программу связи, которая выполняет передачу файлов), uustat
(сообщает статистику недавней активности), uuxqt
(выполняет команды, отправленные с удаленных машин) и uuname
(сообщает имя UUCP локальной системы). Некоторые версии набора включают uuencode
/ uudecode
(преобразование 8-битных двоичных файлов в 7-битный текстовый формат и наоборот).
Хотя UUCP изначально был разработан для Unix в 1970-х и 1980-х годах и наиболее тесно связан с Unix-подобными системами, существуют реализации UUCP для нескольких не-Unix-подобных операционных систем, включая DOS , OS/2 , OpenVMS (только для оборудования VAX), AmigaOS , [2] классическую Mac OS и даже CP/M .
UUCP был первоначально написан в AT&T Bell Laboratories Майком Леском . [3] К 1978 году он использовался на 82 машинах UNIX внутри системы Bell, в основном для распространения программного обеспечения. Он был выпущен в 1979 году как часть Version 7 Unix . [4]
Первые электронные письма UUCP из США прибыли в Соединенное Королевство в 1979 году, а электронная почта между Великобританией, Нидерландами и Данией началась в 1980 году, став регулярной услугой через EUnet в 1982 году. [5] [6]
Первоначальный UUCP был переписан исследователями AT&T Питером Ханиманом, Дэвидом А. Новицем и Брайаном Э. Редманом примерно в 1983 году. Переписанный вариант называется HDB или HoneyDanBer uucp, который позже был улучшен, исправлены ошибки и переупакован как BNU UUCP («Basic Network Utilities»). [7]
Каждая из этих версий распространялась как проприетарное программное обеспечение, что вдохновило Яна Лэнса Тейлора написать новую версию свободного программного обеспечения с нуля в 1991 году. [8] 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 имеет список соседних систем с телефонными номерами, именами входа и паролями и т. д. Когда работа (передача файлов или запросы на выполнение команд) ставится в очередь для соседней системы, uucico
программа обычно вызывает эту систему для обработки работы. Программа uucico
также может периодически опрашивать своих соседей, чтобы проверять, есть ли работа в очереди на их стороне; это позволяет соседям без возможности дозвона участвовать.
Со временем коммутируемые соединения были заменены интернет-соединениями, и UUCP добавил ряд новых протоколов канального уровня . Эти новые соединения также снизили необходимость в UUCP вообще, поскольку новые прикладные протоколы были разработаны для использования преимуществ новых сетей. Сегодня UUCP редко используется в коммутируемых соединениях, но иногда используется в TCP/IP . [9] [10] Количество задействованных систем по состоянию на начало 2006 года составляло от 1500 до 2000 сайтов на 60 предприятиях. Долговечность UUCP можно объяснить его низкой стоимостью, обширным журналированием, собственным переключением на коммутируемый доступ и постоянным управлением очередями.
UUCP обычно запускается, когда пользователь входит в целевую систему и затем запускает программу UUCP. В большинстве случаев это автоматизировано путем входа в известную учетную запись пользователя, используемую для передач, оболочка которой установлена на uucico
. Таким образом, для автоматизированных передач другой машине просто нужно открыть модемное соединение с вызываемой машиной и войти в известную учетную запись.
Когда uucico запускается, он ожидает получить команды от другой программы UUCP на машине вызывающего и начать сеанс. Сеанс состоит из трех отдельных стадий:
При запуске uucico ответит отправкой строки идентификации, , где \20 — это символ control-P, а \0 — это завершающий ноль. UUCP вызывающего отвечает , где options — это строка, содержащая ноль или более Unix-подобных переключателей опций. Они могут включать размеры пакетов и окон, максимальный поддерживаемый размер файла, параметры отладки и другие.\20Shere=hostname\0
\20Scallername options\0
В зависимости от настройки двух систем, вызов может завершиться здесь. Например, когда вызывающий абонент отвечает именем своей системы, вызываемая система может опционально повесить трубку, если она не распознает вызывающего абонента, отправив RYou are unknown to me\0
строку ответа и затем отключившись.
Если две системы успешно установили связь, вызывающий абонент теперь начнет отправлять серию файловых запросов. Существует четыре типа:
После отправки команды H вызывающая система отправляет последний пакет \20OOOOOO\0
(control-P, шесть ohs, нуль-терминатор), а вызываемая система отвечает \20OOOOOO\0
(control-P, семь ohs, нуль-терминатор). Некоторые системы просто вешают трубку при успешном приеме команды H и не беспокоятся о последнем рукопожатии.
В наборе протоколов UUCP базовый g-протокол отвечает за передачу информации в безошибочной форме. Протокол возник как универсальная система для доставки пакетов и, таким образом, предлагает ряд функций, которые не используются пакетом UUCP в целом. К ним относятся вторичный канал, который может отправлять командные данные вперемешку с передачей файлов, и возможность пересогласовывать размеры пакетов и окон во время передачи. Эти дополнительные функции могут быть недоступны в некоторых реализациях стека UUCP. [11]
Формат пакета состоял из 6-байтового заголовка, а затем от нуля до 4096 байтов в полезной нагрузке. Пакет начинается с одного \020 (control-P). За ним следует один байт, известный как «K», содержащий значение от 1 до 8, указывающее размер пакета от 32 до 4096 байт, или 9, указывающий на управляющий пакет. Многие системы поддерживали только K=2, что означает 64 байта. Следующие два байта были 16-битной контрольной суммой полезной нагрузки, не включая заголовок. Следующий байт — тип данных, и, наконец, последний байт — XOR заголовка, что позволяет проверять его отдельно от полезной нагрузки. [11]
Управляющий байт состоит из трех битовых полей в формате TTXXXYYY. TT — тип пакета, 0 — управляющие пакеты (которые также требуют K=9 для корректности), 1 — альтернативные данные (не используются в UUCP), 2 — данные, а 3 — короткий пакет, который переопределяет значение K. В пакете данных XXX — номер пакета для этого пакета от 0 до 7, а YYY — последний, который был получен правильно. Это обеспечивает до 8 пакетов в окне. В управляющем пакете XXX указывает команду, а YYY используется для различных параметров. Например, передачи начинаются с отправки короткого управляющего пакета с TT=0 (управление), XXX=7 и YYY — количеством пакетов в окне, затем отправляется другой пакет с XXX=6 и YYY в качестве длины пакета (закодированный так, как это было бы в K), а затем третий пакет, который идентичен первому, но XXX=5. [11]
g-protocol использует простую систему скользящих окон для работы с потенциально длинными задержками между конечными точками. Протокол позволяет пакетам иметь размер от 64 до 4096 8-битных байтов и окна, включающие от 1 до 7 пакетов. Теоретически система, использующая пакеты 4k и 7 пакетных окон (4096x7), могла бы обеспечить производительность, соответствующую или превосходящую лучшие протоколы передачи файлов, такие как ZMODEM . На практике многие реализации поддерживали только одну настройку 64x3. В результате g-protocol имеет незаслуженную репутацию из-за низкой производительности. Путаница с размерами пакетов и окон привела к появлению G-протокола, отличающегося только тем, что он всегда использовал 4096x3. Taylor UUCP не поддерживал G, но поддерживал любой допустимый запрошенный размер окна или пакета, поэтому удаленные системы, запускающие G, будут нормально работать с g Тейлора, в то время как две системы Тейлора могли бы согласовывать даже более быстрые соединения. [11]
Модемы Telebit использовали подмену протокола для повышения производительности передач g-protocol, замечая маркеры конца пакета, отправляемые на удаленную систему, и немедленно отправляя ответ ACK
локальному хосту, делая вид, что удаленная система уже получила пакет и правильно его декодировала. Это запускало программный стек для отправки следующего пакета, так быстро, что передача становилась почти непрерывной. Данные между двумя модемами исправлялись с помощью фирменного протокола на основе MNP , который работал через полудуплексные соединения Telebit намного лучше, чем обычно g-protocol, [11] потому что в обычном случае 64x3 удаленная система отправляла бы постоянный поток ACK
s, который переполнял бы низкоскоростной обратный канал. В сочетании с естественно более высокой скоростью передачи данных модема они значительно улучшали общую пропускную способность и в целом работали примерно в семь раз быстрее модема 2400 бит/с. [12] Они широко использовались на хостах UUCP, поскольку могли быстро окупиться за счет снижения расходов на междугороднюю связь.
Реализации UUCP также включают другие протоколы передачи для использования по определенным каналам.
f-протокол разработан для работы по 7-битным исправленным ошибкам. Первоначально он предназначался для использования в соединениях X.25 , которые были популярны в течение некоторого времени в 1980-х годах. Он не пакетирует данные, вместо этого весь файл отправляется как одна длинная строка, за которой следует контрольная сумма всего файла. Похожий x-протокол , похоже, не использовался вообще. d-протокол был похож на x, но предназначался для использования в сетях Datakit , которые соединяли многие офисы Bell Labs . [11]
t-протокол возник в версиях UUCP для BSD и, как и некоторые подобные, разработан для работы по 8-битным безошибочным TCP/IP- линкам. Он вообще не имеет коррекции ошибок, а протокол состоит просто из разбиения команд и файловых данных на пакеты по 512 или 1024 байта, чтобы легко вписаться в типичные TCP-кадры.
e-протокол («e» для Ethernet) был разработан Клемом Коулом в MASSCOMP и широко выпущен Брайаном Редманом в более поздних версиях HoneyDanBer. Он был разработан и выпущен до t-протокола, но t-протокол использовался чаще, поскольку версия BSD UUCP была доминирующей реализацией. E-протокол отличается от t-протокола только тем, что команды не пакетируются, а вместо этого отправляются как обычные строки, в то время как файлы дополняются до ближайших 20 байт. [11] [13]
Возможности uucp
и uuxqt
могли использоваться для отправки электронной почты между машинами с подходящими пользовательскими интерфейсами почты и программами-агентами доставки. Простой почтовый адрес UUCP формировался из имени соседней машины, восклицательного знака (часто произносимого как bang ), за которым следовало имя пользователя на соседней машине. Например, адрес barbox!user будет ссылаться на пользователя user на соседней машине barbox . [14]
Почта могла бы также маршрутизироваться через сеть, проходя через любое количество промежуточных узлов, прежде чем прибыть к месту назначения. Первоначально это должно было быть сделано путем указания полного пути со списком имен промежуточных хостов, разделенных восклицательными знаками. Например, если машина 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 path . Bang paths из восьми-десяти машин (или переходов ) не были редкостью в 1981 году, и ночные коммутируемые соединения UUCP могли привести к недельному времени передачи. Bang paths часто выбирались как по времени передачи, так и по надежности, поскольку сообщения часто терялись. Некоторые хосты заходили так далеко, что пытались « переписать » путь, отправляя почту по «более быстрым» маршрутам — эта практика, как правило, не одобрялась.
Окончание «псевдодомена» .uucp иногда использовалось для обозначения имени хоста, доступного через сеть UUCP, хотя это никогда официально не регистрировалось в системе доменных имен (DNS) как домен верхнего уровня . Сообщество uucp само администрировало себя и не очень хорошо вписывалось в методы администрирования и правила, регулирующие DNS; .uucp работает там, где ему нужно [ где? ] ; некоторые хосты [ какие? ] выталкивают почту из очереди SMTP в очереди uucp на шлюзовых машинах, если адрес .uucp распознается во входящем соединении SMTP. [ требуется ссылка ]
Трафик Usenet изначально передавался по протоколу UUCP с использованием bang-путей. Они все еще используются в строках заголовка Path формата сообщений Usenet . Теперь они имеют только информационную цель и не используются для маршрутизации, хотя их можно использовать для предотвращения возникновения петель.
В целом, как и другие старые форматы адресов электронной почты , bang-пути теперь заменены на " @ notation ", даже сайтами, все еще использующими UUCP. Сайт, работающий только с UUCP, может зарегистрировать доменное имя DNS и заставить DNS-сервер, который обрабатывает этот домен, предоставить записи MX , которые заставляют интернет-почту на этот сайт доставляться на хост UUCP в Интернете, который затем может доставлять почту на сайт UUCP.
UUCPNET было названием для всей сети компьютеров, соединенных через UUCP. Эта сеть была очень неформальной, поддерживалась в духе взаимного сотрудничества между системами, принадлежащими тысячам частных компаний, университетов и т. д. Часто, особенно в частном секторе, связи UUCP устанавливались без официального одобрения высшего руководства компаний. Сеть UUCP постоянно менялась, поскольку добавлялись новые системы и коммутируемые связи, удалялись другие и т. д.
Проект картирования UUCP был добровольным, в значительной степени успешным усилием по созданию карты соединений между машинами, которые были открытыми почтовыми ретрансляторами , и созданию управляемого пространства имен. Каждый системный администратор отправлял по электронной почте список систем, к которым они могли бы подключиться, вместе с рейтингом для каждого такого соединения. Эти отправленные записи карты обрабатывались автоматической программой, которая объединяла их в один набор файлов, описывающих все соединения в сети. Затем эти файлы ежемесячно публиковались в группе новостей , предназначенной для этой цели. Файлы карты UUCP затем могли использоваться программным обеспечением, таким как «pathalias», для вычисления наилучшего маршрута от одной машины к другой для почты и для автоматического предоставления этого маршрута. Карты UUCP также содержали контактную информацию для сайтов, и таким образом давали сайтам, желающим присоединиться к UUCPNET, простой способ найти потенциальных соседей.
Многие хосты UUCP, особенно в университетах, также были подключены к Интернету в его ранние годы, и были разработаны шлюзы электронной почты между почтой на основе SMTP в Интернете и почтой UUCP. Пользователь в системе с соединениями UUCP мог таким образом обмениваться почтой с пользователями Интернета, а интернет-соединения могли использоваться для обхода больших участков медленной сети UUCP. Для упрощения этих интерфейсов была определена «зона UUCP» в пространстве имен доменов Интернета.
При наличии этой инфраструктуры преимущество UUCP заключалось в том, что он позволял сайту получать доступ к электронной почте и Usenet через Интернет, используя только модемное соединение с другим сотрудничающим компьютером. Это было в то время, когда для настоящего доступа в Интернет требовалась арендованная линия передачи данных , обеспечивающая подключение к точке присутствия в Интернете , и то, и другое было дорогим и сложным в организации. Напротив, связь с сетью UUCP обычно можно было установить с помощью нескольких телефонных звонков администраторам предполагаемых соседних систем. Соседние системы часто находились достаточно близко, чтобы избежать всех, кроме самых основных расходов на телефонные звонки.
uux — это удаленное выполнение команд через UUCP. Команда uux используется для выполнения команды на удаленной системе или для выполнения команды на локальной системе с использованием файлов из удаленных систем. Команда запускается демоном uucico
, который обрабатывает запросы на удаленное выполнение как просто другой тип файла для пакетной отправки на удаленную систему всякий раз, когда доступен узел следующего перехода. Затем удаленная система выполнит запрошенную команду и вернет результат, когда исходная система будет доступна. Обе эти передачи могут быть косвенными, через многоадресные пути, с произвольными окнами доступности. Даже при выполнении команды на всегда доступном соседе uux не является мгновенным.
Использование UUCP начало исчезать с появлением интернет-провайдеров, предлагающих недорогие услуги SLIP и PPP . Проект UUCP Mapping был официально закрыт в конце 2000 года.
В настоящее время протокол UUCP в основном заменен интернет-протоколами на основе TCP/IP: SMTP для почты и NNTP для новостей Usenet.
В июле 2012 года голландский интернет-провайдер XS4ALL закрыл свой сервис UUCP, заявив, что он «вероятно один из последних провайдеров в мире, который все еще его предлагал»; на тот момент у него было всего 13 пользователей (до своего закрытия он отклонял запросы от новых пользователей в течение нескольких лет). [15]
Одной из сохранившихся особенностей UUCP является формат файла чата, во многом унаследованный от программного пакета Expect .
UUCP использовался в специальных дорогостоящих каналах связи (например, морских спутниковых каналах связи) долгое время после его исчезновения в других местах [16] и до сих пор остается в устаревшем использовании. [ необходима цитата ] В дополнение к устаревшему использованию в 2021 году растут новые и инновационные применения UUCP, особенно для телекоммуникаций в диапазоне HF , например, для сообществ в тропических лесах Амазонки для обмена электронной почтой и других целей. Патч для UUCP Яна был внесен в пакет UUCP Debian Linux [17] для адаптации к проекту HERMES (High-Frequency Emergency and Rural Multimedia Exchange System), который обеспечивает подключение UUCP HF. [18]
В середине 2000-х годов был предложен протокол UUCP поверх TCP/IP (часто зашифрованный с использованием протокола SSH [10] ) [ по мнению кого? ] для использования в случаях, когда компьютер не имеет фиксированных IP-адресов , но все равно готов запустить стандартный агент передачи почты (MTA), такой как Sendmail или Postfix .
Bang-подобные пути все еще используются в сети Usenet , хотя и не для маршрутизации; они используются для записи в заголовке сообщения узлов, через которые прошло это сообщение, а не для указания, куда оно пойдет дальше. [19] «Bang path» также используется как выражение для любого явно указанного пути маршрутизации между сетевыми хостами. Такое использование не обязательно ограничивается UUCP, IP-маршрутизацией, сообщениями электронной почты или Usenet.
Концепция сетевых протоколов, устойчивых к задержкам, была пересмотрена в начале 2000-х годов. [20] Аналогичные методы, используемые UUCP, могут применяться и в других сетях, в которых наблюдаются задержки или значительные сбои.
пропускная способность составляет около 14400 бит/с.