Xerox Network Systems ( XNS ) は、Xerox Network Systems Architecture内でXeroxが開発したコンピュータ ネットワークプロトコル スイートです。汎用ネットワーク通信、インターネットワークルーティングとパケット配信、および信頼性の高いストリームやリモート プロシージャ コールなどの高レベル機能を提供しました。XNS は、 Open Systems Interconnection (OSI) ネットワーク モデルの開発に先行し、影響を与え、1980 年代のローカル エリア ネットワーク設計に大きな影響を与えました。
XNSは、1980年代初頭にゼロックスのシステム開発部門によって開発されました。同部門は、ゼロックスPARCの研究成果を市場に投入する役割を担っていました。XNSは、1970年代後半に開発された(そして同様に影響力のあった)PARCユニバーサルパケット(PUP)スイートをベースとしています。XNSスイートに含まれるプロトコルの中には、PUPスイートのプロトコルをわずかに修正したものもありました。XNSではネットワーク番号の概念が追加され、複数の小規模ネットワークからより大規模なネットワークを構築できるようになり、ルーターがネットワーク間の情報フローを制御します。
XNSのプロトコルスイート仕様は1977年にパブリックドメインに公開されました。これにより、XNSは標準的なローカルエリアネットワークプロトコルとなり、1990年代まで使用されていたほぼすべてのネットワークシステムで様々な程度で模倣されました。XNSは、3Comの3+ShareとUngermann-BassのNet/Oneで変更されずに使用されました。また、 Novell NetWareとBanyan VINESの基盤としても、修正を加えて使用されました。XNSはAppleNetシステムの基盤として使用されましたが、これは商用化されませんでした。XNSの一般的な問題に対する解決策のいくつかは、AppleNetの後継であるAppleTalkで使用されました。
OSIモデルの7層と比較すると、XNSは後のインターネットプロトコルスイートと同様に5層システムである[ 1 ]。
OSI モデルの物理層とデータリンク層は、XNS の物理層 (レイヤー 0) に対応しており、これは基盤となるハードウェアの伝送メカニズムを使用するように設計されており、データリンクを分離していませんでした。具体的には、XNS の物理層は、実際にはゼロックスが同時期に開発していたEthernetローカルエリアネットワークシステムであり、その設計上の決定の多くはその事実を反映しています。 [ 1 ]このシステムは Ethernet を他のシステムに置き換えることができるように設計されていましたが、それはプロトコルで定義されていませんでした (また、定義する必要もありませんでした)。
XNS の主要部分は、OSI のネットワーク層に対応する内部トランスポート層 (レイヤ 1) の定義であり、ここで主要なインターネットワーキング プロトコルである IDP が定義されます。XNS は、OSI のセッション層とトランスポート層を単一のプロセス間通信層 (レイヤ 2) に統合しました。レイヤ 3 は、OSI のプレゼンテーション層に似たリソース制御です。[ 1 ] [ 2 ]
最後に、両方のモデルの最上位にはアプリケーション層がありますが、これらの層はXNS標準では定義されていません。[ 1 ]
主要なインターネットワーク層プロトコルはインターネットデータグラムプロトコル(IDP )です。IDPはPupのインターネットワークプロトコルの近縁であり、インターネットプロトコルスイートのインターネットプロトコル(IP)層にほぼ相当します。[ 1 ]
IDPは、イーサネットの48ビットアドレスを独自のネットワークアドレス指定の基盤として使用し、一般的にマシンのMACアドレスを主要な一意の識別子として使用します。これに、ネットワーク機器によって提供される別の48ビットアドレスセクションが追加されます。32ビットはルーターによって提供され、インターネットワーク内のネットワーク番号を識別し、さらに16ビットは単一ホスト内でのサービス選択のためのソケット番号を定義します。アドレスのネットワーク番号部分には、「このネットワーク」を意味する特別な値も含まれており、ネットワーク番号を(まだ)知らないホストが使用します。[ 2 ]
TCP/IPとは異なり、ソケット番号はIDPヘッダー内の完全なネットワークアドレスの一部であるため、上位層プロトコルはデマルチプレクサを実装する必要がありません。また、IDPはパケットタイプも提供します(これもIPとは異なります)。IDPにはパケット全体をカバーするチェックサムも含まれていますが、これは必須ではなくオプションです。これは、LANのエラー率が一般的に低いという事実を反映しており、XNSはパフォーマンスを向上させるために下位層プロトコルからエラー訂正を削除しました。エラー訂正は、例えばXNS独自のSPPプロトコルなど、プロトコルスタックの上位層でオプションで追加できます。この設計上の注意により、XNSはIPよりも高速であると広く認識されていました。[ 1 ]
XNSは、低遅延LAN接続で動作するため、パケットサイズを小さく設定しており、エラー率が低く、ターンアラウンドタイムが短い場合にパフォーマンスが向上します。IDPパケットは、30バイトのIDPヘッダーを含めて最大576バイトです。[ 2 ]これに対し、IPではすべてのホストが少なくとも576バイトをサポートする必要がありますが、最大65Kバイトのパケットをサポートしています。特定のネットワーク上の個々のXNSホストペアは、より大きなパケットを使用する可能性がありますが、XNSルーターはそれらを処理する必要はなく、中間ルーターがより大きなパケットをサポートしているかどうかを検出するメカニズムも定義されていません。また、IPのようにパケットを断片化することはできません。
ルーティング情報プロトコル(RIP)は、Pupのゲートウェイ情報プロトコルの子孫であり、ルータの情報交換システムとして使用され、(他のプロトコルスイートのアドレスの構文に合わせるために若干修正され)インターネットプロトコルスイートなどの他のプロトコルスイートで今日でも使用されています。[ 2 ]
XNS は、IP のpingに似た、ネットワーク層でのシンプルなエコー プロトコルも実装していますが、ネットワーク スタックのより低いレベルで動作します。ping のように ICMP データを IP パケットのペイロードとして追加する代わりに、XNS のエコーはコマンドを基盤となる IDP パケット内に直接配置します。[ 2 ] IP では、IP ヘッダーのICMPプロトコルフィールドを拡張することで同じことが実現できます。
トランスポート層プロトコルには主に2種類あり、どちらも前身であるPupとは大きく異なります。
XNSはPupと同様に、パケットのドロップなどの問題を報告するシステムとしてEP(エラープロトコル)を使用します。これにより、問題を探すためにフィルタリングできる独自のパケットセットが提供されます。[ 2 ]
当初のゼロックスの構想では、リモート印刷、ファイリング、郵送などのアプリケーション プロトコルは、Courierと呼ばれるリモート プロシージャ コールプロトコルを使用していました。Courier には、ゼロックスのMesa プログラミング言語の関数呼び出しのほとんどの機能を実装するためのプリミティブが含まれていました。アプリケーションは、Courier の関数呼び出しを手動でシリアル化および逆シリアル化する必要がありました。関数アクティベーション フレームを RPC に変換する自動機能はありませんでした (つまり、「RPC コンパイラ」は利用できませんでした)。Courier はすべてのアプリケーションで使用されていたため、XNS アプリケーション プロトコル ドキュメントでは、Courier 関数呼び出しインターフェースとモジュール + 関数バインディング タプルのみが指定されていました。Courier には、関数呼び出しでバルク データを送受信できるようにする特別な機能がありました。[ 2 ]
当初、XNS サービスの場所特定は、一連の拡張リング ブロードキャストを使用してリモート プロシージャ コールをブロードキャストすることによって実行されました (ローカル ルータと協議して、距離が徐々に離れていくネットワークを取得します)。その後、サービスの場所特定を実行するためにクリアリングハウス プロトコル 3 レベルのディレクトリ サービスが作成され、拡張リング ブロードキャストは最初のクリアリング ハウスの場所特定にのみ使用されるようになりました。[ 2 ]
基盤技術としてMesaとの緊密な統合により、従来の高レベルプロトコルの多くはXNSシステム自体には含まれていませんでした。そのため、XNSプロトコルを使用するベンダーは、ファイル共有やプリンタサポートのために独自のソリューションを作成する必要がありました。これらのサードパーティ製品の多くは、理論的にはパケットレベルで相互に通信できますが、互いのアプリケーションサービスを呼び出す機能はほとんど、あるいは全くありませんでした。このため、XNS市場は完全に断片化され、IPが容易にXNSに取って代わった理由の1つとして挙げられています。[ 1 ]
XNS プロトコルには、認証プロトコルとそれをサポートする認証サービスも含まれていました。その「強力な資格情報」は、後にKerberosで使用されたのと同じNeedham–Schroeder プロトコルに基づいていました。このプロトコルは、認証サービスに資格情報を取得した後、Courier プロシージャ呼び出しにデジタル署名するための軽量な方法を提供し、受信者はプロトコル通信セッションの間、認証サービスに再度接続することなく、XNS インターネット上で署名を検証し、送信者を認証することができました。[ 3 ]
ゼロックスの印刷言語であるInterpressは、レーザープリンターを制御するためのバイナリ形式の標準規格でした。この言語の設計者であるジョン・ワーノックとチャック・ゲシュケは、後にゼロックスPARCを離れ、アドビシステムズを設立しました。彼らは退社前に、バイナリ形式の印刷言語の仕様記述の難しさを認識していました。印刷ジョブをシリアル化する関数が煩雑で、エラーが発生した印刷ジョブのデバッグが困難だったのです。プログラム可能でデバッグも容易な印刷ジョブをASCIIで記述することの価値を実現するため、ワーノックとゲシュケはアドビでの最初の製品の一つとしてPostscript言語を開発しました。
ゼロックスの社内イントラネットにある8000台以上のマシンはすべて、バトラー・ランプソンが設計したワイルドフラワー・アーキテクチャを採用していたため、マイクロコードのリモートデバッグプロトコルが存在した。基本的に、PEEKおよびPOKE機能を使用することで、地球上のどこからでもCシリーズまたはDシリーズのマシンのマイクロコードの状態を停止および操作し、その後マシンを再起動することができた。
また、ワールドスワップデバッガ用のリモートデバッグプロトコルも存在した。[ 4 ] このプロトコルは、デバッガの「nub」を介してワークステーションをフリーズさせ、メモリのさまざまな部分を覗き込んだり操作したり、変数を変更したり、実行を継続したりすることができた。デバッグシンボルが利用可能であれば、クラッシュしたマシンを地球上のどこからでもリモートデバッグすることができた。
ハーバード大学での最終学年、ボブ・メトカーフはいくつかの企業で面接を受け始め、ゼロックスPARCのジェリー・エルキンドとボブ・テイラーから温かく迎えられた。彼らは当時、後にゼロックス・アルトとなるネットワーク接続されたコンピュータワークステーションの開発に着手していた。メトカーフは論文審査を終えた後、7月にPARCに入社することに同意した。1970年、会議に出席するためにスティーブ・クロッカーの家でソファーサーフィンをしていたメトカーフは、読みながら眠ろうと思い、テーブルから『秋季合同コンピュータ会議議事録』を手に取った。しかし、彼はそれよりも先に、初期の広域ネットワークシステムであるALOHAnetに関する記事に魅了された。6月までに彼はネットワークに関する独自の理論を構築し、教授陣に発表したが、教授陣はそれを却下し、彼は「尻を蹴られて追い出された」。[ 5 ]
メトカーフは、学位論文が不合格だったにもかかわらずPARCに歓迎され、すぐに当時「ALOHAnet in a wire」と呼ばれていたものの開発に着手した。彼は電子実装を支援するためにデビッド・ボッグスと協力し、1973年末までに3 Mbit/sで動作するハードウェアを構築した。その後、2人はシステム上で動作するシンプルなプロトコルの開発に着手した。これがPARCユニバーサルパケット(Pup)システムの開発につながり、1974年末までに2人はPupをイーサネット上で正常に動作させた。彼らはその概念について特許を出願し、メトカーフは言及に値すると考えた他のいくつかの名前を追加し、その後、その概念に関する論文をCommunications of the ACMに「Ethernet: Distributed Packet Switching for Local Computer Networks」として投稿し、1976年7月に出版された。[ 5 ]
1975年までに、PUPが完成するずっと前から、メトカーフはゼロックスの厳格な経営陣に不満を抱いていた。彼は会社がすぐにイーサネットを生産すべきだと考えていたが、上層部はほとんど関心を示さなかった。 1974年にMITの有名な人工知能研究所の教授たちが、研究所で使用するためにイーサネットを購入する目的でゼロックスに接触してきたことが、重要な出来事となった。ゼロックスの経営陣は、イーサネットは自社製品の販売促進に役立てる方が良いと考え、これを拒否した。その後、AI研究所は独自のイーサネットであるChaosnetを開発した。[ 6 ]
メトカーフは最終的に1975年11月にゼロックスを離れ、シティバンクの先進的な製品開発部門であるトランザクション・テクノロジーに移籍した。しかし、7か月後、PARCのコンセプトを市場に投入するためにゼロックス内にシステム開発部門を新たに設立したばかりのデビッド・リドルに引き抜かれ、ゼロックスに復帰した。メトカーフはすぐにイーサネットを20 Mbit/sで動作するように再設計し 、Pupを製品品質のバージョンに書き直す作業を開始した。Pupの助けを求めて、メトカーフは当時スタンフォード大学でヴィント・サーフの下で博士論文を完成させていたヨーゲン・ダラルに声をかけた。ダラルはボブ・カーンのARPANETチーム(TCP/IPに取り組んでいた)からも熱心に勧誘されていたが、サーフがDARPAに移籍すると、ダラルはPARCに移籍することに同意し、1977年にPARCで働き始めた。[ 7 ]
ダラルはウィリアム・クロウザーやハル・マレーを含むチームを編成し、Pupの徹底的な見直しから始めた。ダラルはまた、DARPAで進行中のTCPの取り組みにも関与し続けようとしたが、最終的には諦めてPupに専念した。ダラルはARPANETでの経験とPupの概念を組み合わせ、1977年末までにゼロックス・ネットワーク・システム仕様の最初の草案を公開した。これは基本的に、絶対48ビットのホストIDと、シーケンスパケットプロトコルにおけるTCPの3ウェイハンドシェイクを備えたPupのバージョンであった。[ 8 ]
1978年初頭には新システムは稼働していたものの、経営陣は依然としてそれを商業化しようとはしていなかった。メトカーフは次のように述べている。
私が1976年にゼロックスに戻ったとき、製品出荷まであと約2年半でした。1978年も製品出荷まであと約2年半でした。[ 7 ]
それ以上の措置が取られなかったため、メトカーフは1978年末に会社を去った。[ 7 ]
XNSは、かつてゼロックスがDocuTech 135パブリッシングシステムとの通信に使用していたもので、IPの普及に伴い現在では使用されなくなっている。しかし、1980年代のネットワーク技術の発展において重要な役割を果たし、ソフトウェアおよびハードウェアベンダーに対し、コンピューティングプラットフォームが複数のネットワークプロトコルスタックを同時にサポートする必要性について真剣に検討するよう促した。
多種多様な独自のネットワークシステムが、XNS を直接ベースにしたり、そのテーマにわずかなバリエーションを加えたりして提供されました。その中には、Net/One、3+ [ 1 ] 、 Banyan VINES [ 9 ]、Novell のIPX/SPX [ 10 ]などがありました。これらのシステムは、XNS のアドレス指定およびルーティング システムの上に独自の概念を追加しました。VINES はディレクトリ サービスなどのサービスを追加し、Novell NetWare は印刷やファイル共有などのユーザー向けサービスを多数追加しました。AppleTalkはXNS に似たルーティングを使用しましたが、より短い番号を使用した互換性のないアドレスを使用していました。
XNS は、インターネット プロトコルとは大きく異なる第 2 のプロトコル スイートを提供することで、4.2BSDネットワーク サブシステムの設計の検証にも役立ちました。バークレーの研究者たちは、両方のスタックを同じカーネルに実装することで、この設計が IP だけでなく、より多くの用途に適していることを実証しました。[ 11 ]最終的には、オープン システム相互接続(OSI) プロトコル の全範囲をサポートするために、BSD の追加変更が必要になりました。
Xerox Network Systems Architecture Xerox Network Systems 入門(XNSG 058504) は、「Xerox Network Systems を使用することで、オフィスワーカーがどのように効率性と生産性を向上させることができるかを知りたい人向けの一般的な解説」である。[ 12 ] : p.5
Xerox Network Systems Architectureの構成要素については、Xerox Network Systems Architecture General Information Manual (XNSG 068504)に簡単に説明されています。[ 13 ]
Xerox Systems Instituteの文献カタログには、16の個別のプロトコル記述が記載されています。[ 12 ]これらの規格のより新しいバージョンは以下のとおりです。