Введение
Набор компьютерных сетевых протоколов, разработанный компанией Xerox.
Xerox Network Systems (XNS) — это набор компьютерных сетевых протоколов, разработанный компанией Xerox в рамках архитектуры сетевых систем Xerox. Он обеспечивал сетевые коммуникации общего назначения, межсетевую маршрутизацию и доставку пакетов, а также функции более высокого уровня, такие как надежный поток данных и удаленный вызов процедур. XNS предшествовал и оказал влияние на разработку сетевой модели Open Systems Interconnection (OSI) и был весьма влиятельным в проектах локальных сетей в 1980-х годах. XNS был разработан отделом разработки систем Xerox в начале 1980-х годов с целью коммерциализации исследований, проводимых в Xerox PARC. XNS базировался на более раннем (и не менее влиятельном) наборе протоколов PARC Universal Packet (PUP) конца 1970-х годов. Некоторые протоколы в наборе XNS были незначительно модифицированными версиями протоколов из набора PUP. XNS ввел понятие сетевого номера, что позволило создавать более крупные сети из нескольких меньших, используя маршрутизаторы для управления потоком информации между ними. Спецификации набора протоколов XNS были опубликованы в общественном достоянии в 1977 году. Это способствовало тому, что XNS стал каноническим протоколом для локальных сетей, и его принципы в той или иной степени были заимствованы практически всеми сетевыми системами, использовавшимися в 1990-х годах. XNS использовался без изменений в системах 3Com's 3+Share и Ungermann Bass's Net/One. Он также использовался с модификациями в качестве основы для Novell NetWare и Banyan VINES. XNS послужил основой для системы AppleNet, однако она так и не была коммерциализирована; ряд решений XNS для распространенных проблем были использованы в замене AppleNet – AppleTalk.
Общая конструкция
По сравнению с 7 уровнями модели OSI, XNS является пятиуровневой системой, как и более поздний интернет-протокольный стек. Физический и канальный уровни модели OSI соответствуют физическому уровню (уровень 0) в XNS, который был разработан для использования транспортных возможностей базового оборудования и не разделял канальный уровень. В частности, физический уровень XNS фактически представляет собой систему локальной сети Ethernet, которая также разрабатывалась компанией Xerox в то же время, и ряд его конструктивных решений отражает этот факт. Система была спроектирована таким образом, чтобы позволить заменить Ethernet другой системой, но это не было определено протоколом (и не требовалось). Основной частью XNS является определение внутреннего транспортного уровня (уровень 1), который соответствует сетевому уровню OSI, и именно здесь определяется основной протокол межсетевого взаимодействия – IDP. XNS объединила сеансовый и транспортный уровни OSI в единый уровень межпроцессных коммуникаций (уровень 2). Уровень 3 – управление ресурсами, аналогично презентационному уровню OSI. Наконец, над обеими моделями находится прикладной уровень, хотя эти уровни не были определены в стандарте XNS.
Базовый протокол сети Интернет
Основным протоколом межсетевого уровня является протокол интернет-датаграмм (IDP). IDP является прямым потомком межсетевого протокола Pup и приблизительно соответствует уровню протокола Интернет (IP) в наборе протоколов Интернет. IDP использует 48-битный адрес Ethernet в качестве основы для собственной сетевой адресации, обычно используя MAC-адрес машины в качестве основного уникального идентификатора. К этому добавляется еще 48-битный раздел адреса, предоставляемый сетевым оборудованием: 32 бита предоставляются маршрутизаторами для идентификации сетевого номера в межсети, а остальные 16 битов определяют номер сокета для выбора службы внутри одного хоста. Часть сетевого номера адреса также включает специальное значение, означающее "эта сеть", для использования хостами, которые (пока) не знают свой сетевой номер. В отличие от TCP/IP, номера сокетов являются частью полного сетевого адреса в заголовке IDP, поэтому протоколам верхнего уровня не требуется реализовывать мультиплексирование; IDP также предоставляет типы пакетов (опять же, в отличие от IP). IDP также содержит контрольную сумму, охватывающую весь пакет, но она является необязательной, а не обязательной. Это отражает тот факт, что локальные сети обычно имеют низкий уровень ошибок, поэтому XNS исключил коррекцию ошибок из протоколов нижнего уровня для повышения производительности. Коррекцию ошибок можно было опционально добавить на более высоких уровнях стека протоколов, например, в собственном протоколе SPP XNS. XNS широко считался более быстрым, чем IP, благодаря этой особенности конструкции. В соответствии с низкими задержками в LAN-соединениях, для которых он предназначен, XNS использует небольшой размер пакета, что повышает производительность при низком уровне ошибок и коротком времени отклика. Пакеты IDP имеют длину до 576 байт, включая 30-байтовый заголовок IDP. Для сравнения, IP требует, чтобы все хосты поддерживали как минимум 576 байт, но поддерживает пакеты размером до 65 КБ. Отдельные пары хостов XNS в конкретной сети могут использовать большие пакеты, но маршрутизатор XNS не обязан их обрабатывать, и не определен механизм для определения, поддерживают ли промежуточные маршрутизаторы большие пакеты. Кроме того, пакеты не могут быть фрагментированы, как это возможно в IP. Протокол маршрутной информации (RIP), потомок протокола Gateway Information Protocol от Pup, используется в качестве системы обмена информацией между маршрутизаторами и (немного модифицированный для соответствия синтаксису адресов других наборов протоколов) до сих пор используется в других наборах протоколов, таких как набор протоколов Интернет. XNS также реализует простой протокол эхо на межсетевом уровне, аналогичный ping в IP, но работающий на более низком уровне в стеке сетевых протоколов. Вместо добавления данных ICMP в качестве полезной нагрузки в IP-пакете, как в ping, XNS's echo помещал команду непосредственно в базовый пакет IDP. Того же можно достичь в IP, расширив поле протокола ICMP в заголовке IP.
Курьер РПК
В оригинальной концепции Xerox протоколы приложений, такие как удаленная печать, хранение файлов и рассылка сообщений, использовали протокол удаленного вызова процедур под названием Courier. Courier содержал примитивы для реализации большинства функций вызовов функций языка программирования Mesa от Xerox. Приложениям приходилось вручную сериализовать и десериализовать вызовы функций в Courier; не было автоматического механизма для преобразования стека активации функции в RPC (то есть не было "компилятора RPC"). Поскольку Courier использовался всеми приложениями, в документации по протоколам приложений XNS указывались только интерфейсы вызовов функций Courier и пары "модуль+функция". В Courier была предусмотрена специальная возможность для отправки и получения больших объемов данных при вызове функции. Изначально поиск служб XNS осуществлялся посредством широковещательных удаленных вызовов процедур с использованием серии расширяющихся кольцевых трансляций (в консультации с локальным маршрутизатором для получения информации о сетях на возрастающих расстояниях). Позже была создана служба каталогов уровня 3 протокола Clearinghouse для поиска служб, а расширяющиеся кольцевые трансляции использовались только для обнаружения первоначального Clearinghouse. Из-за тесной интеграции с Mesa как базовой технологии, многие традиционные протоколы более высокого уровня не входили в состав самой системы XNS. Это означало, что все поставщики, использующие протоколы XNS, разрабатывали собственные решения для обмена файлами и поддержки принтеров. Хотя многие из этих сторонних продуктов теоретически могли взаимодействовать друг с другом на уровне пакетов, возможности вызова сервисов друг друга были ограничены или отсутствовали. Это привело к полной фрагментации рынка XNS, и это было названо одной из причин, по которой IP легко его вытеснил.
Аутентификация
Протоколы XNS также включали протокол аутентификации и службу аутентификации для его поддержки. Его "Надежные учетные данные" были основаны на том же протоколе Needham–Schroeder, который позже использовался Kerberos. После обращения к службе аутентификации за учетными данными, этот протокол предоставлял простой способ цифровой подписи вызовов процедур Courier, позволяя получателям проверять подпись и аутентифицировать отправителей в сети XNS, не обращаясь повторно к службе аутентификации на протяжении всего сеанса связи. Этот протокол, с помощью отладчика "nub", мог заморозить рабочую станцию, а затем просматривать и изменять различные области памяти, менять переменные и возобновлять выполнение. Если были доступны символы отладки, вышедшую из строя машину можно было удаленно отладить из любой точки мира.
Истоки Ethernet и PUP
В последний год обучения в Гарвардском университете Боб Меткалф начал проходить собеседования в нескольких компаниях и был тепло встречен Джерри Элкиндом и Бобом Тейлором в Xerox PARC, которые только начинали работу над сетевыми компьютерными рабочими станциями, впоследствии ставшими Xerox Alto. Он согласился присоединиться к PARC в июле, после защиты диссертации. В 1970 году, во время пребывания на конференции в доме Стива Крокера, Меткалф взял со стола экземпляр "Процессов объединенной осенней компьютерной конференции" с намерением заснуть во время чтения. Вместо этого он увлекся статьей об ALOHAnet – более ранней системе широкозонной сети. К июню он разработал собственные теории сетевого взаимодействия и представил их своим профессорам, которые отвергли их, и его, как он выразился, "выставили за дверь". Несмотря на неудачную диссертацию, Меткалфа приняли в PARC, и он вскоре приступил к разработке того, что тогда называлось "ALOHAnet по проводам". Он объединился с Дэвидом Боггсом для помощи в электронной реализации, и к концу 1973 года они создавали рабочее оборудование со скоростью 3 Мбит/с. Затем они начали работу над простым протоколом для этой системы. Это привело к разработке системы PARC Universal Packet (Pup), и к концу 1974 года Pup успешно работал на Ethernet. Они подали заявку на патент на эту концепцию, добавив по инициативе Меткалфа имена других разработчиков, которых он считал достойными упоминания, а затем представили статью в Communications of the ACM под названием "Ethernet: Distributed Packet Switching for Local Computer Networks", опубликованную в июле 1976 года.
PUP к XNS
К 1975 году, задолго до завершения PUP, Меткалф уже испытывал раздражение от жесткого управления Xerox. Он считал, что компания должна немедленно запустить Ethernet в производство, но не встретил должного интереса со стороны высшего руководства. Важным событием стало обращение профессоров из знаменитой Лаборатории искусственного интеллекта MIT к Xerox в 1974 году с намерением приобрести Ethernet для использования в их лаборатории. Руководство Xerox отказало, полагая, что Ethernet лучше использовать для продвижения собственного оборудования. В ответ Лаборатория ИИ создала собственную версию Ethernet – Chaosnet. В конечном итоге Меткалф покинул Xerox в ноябре 1975 года, перейдя в Transaction Technology, подразделение Citibank, занимавшееся разработкой передовых продуктов. Однако, через семь месяцев Дэвид Лиддл, недавно организовавший Отдел разработки систем в Xerox специально для вывода на рынок разработок PARC, переманил его обратно. Меткалф немедленно приступил к перепроектированию Ethernet для работы на скорости 20 Мбит/с и начал работу над переписыванием Pup в версии, пригодной для промышленного производства. В поисках помощи с Pup, Меткалф обратился к Йогену Далалу, который в то время завершал докторскую диссертацию под руководством Винта Серфа в Стэнфордском университете. Далалом также активно интересовалась команда ARPANET Боба Кана (работающая над TCP/IP), но после ухода Серфа в DARPA, Далал согласился перейти в PARC и начал работу там в 1977 году. Далал сформировал команду, в которую вошли Уильям Кроутер и Хэл Мюррей, и начал с тщательного анализа Pup. Далал также пытался продолжать участвовать в разработке TCP в DARPA, но в итоге отказался от этого и полностью сосредоточился на Pup. Он объединил свой опыт работы с ARPANET с концепциями Pup, и к концу 1977 года они опубликовали первый проект спецификации сетевой системы Xerox. По сути, это была версия Pup с абсолютными 48-битными идентификаторами узлов и трехсторонним обменом (handshake) TCP в протоколе последовательных пакетов. К началу 1978 года новая система заработала, но руководство по-прежнему не предпринимало никаких шагов для ее коммерциализации. Как выразился Меткалф:
Когда я вернулся в Xerox в 1976 году, до начала отгрузки продукта оставалось примерно два с половиной года, а в 1978 году – все те же два с половиной года. Когда дальнейших действий не последовало, Меткалф покинул компанию в конце 1978 года.
Влияние
В последний раз использовалась Xerox для связи с издательской системой DocuTech 135, XNS больше не используется из-за повсеместного распространения IP. Однако она сыграла важную роль в развитии сетевых технологий в 1980-х годах, побудив производителей программного и аппаратного обеспечения всерьез задуматься о необходимости поддержки вычислительными платформами нескольких стеков сетевых протоколов одновременно. Множество проприетарных сетевых систем были напрямую основаны на XNS или предлагали незначительные вариации этой концепции. Среди них – Net/One, 3+, Banyan VINES и IPX/SPX от Novell. Эти системы добавляли собственные функции поверх системы адресации и маршрутизации XNS; VINES, например, добавил службу каталогов и другие сервисы, а Novell NetWare – ряд пользовательских сервисов, таких как печать и файловый обмен. AppleTalk использовал аналогичную XNS маршрутизацию, но применял несовместимые, более короткие адреса. XNS также помогла подтвердить правильность архитектуры сетевой подсистемы 4.2BSD, предоставив второй набор протоколов, существенно отличавшийся от интернет-протоколов; реализовав оба стека в одном ядре, исследователи из Беркли продемонстрировали, что эта архитектура подходит не только для IP. Впоследствии потребовались дополнительные модификации BSD для поддержки полного спектра протоколов Open Systems Interconnection (OSI).