メインコンテンツまでスキップ

設計概念

ネットワークに参加する計算機は、2つの重要な点で似ています。それぞれがネットワークとは独立に研究を支援しており、それぞれがタイムシェアリングシステムの規律の下にあります。これらの事実が、以下の設計哲学に寄与しました。

第一に、ネットワーク内の計算機はそれぞれ独立した目的を持っているため、各計算機の管理上の制御を分散したまま維持する必要があります。すべてのタイムシェアリングスーパーバイザーは、精巧かつ明確な会計機構と資源配分機構を備えているため、私たちは、これらの機構がローカルで生成された負荷を制御するのと同じ方法でネットワークによる負荷を制御するように取り計らいました。

第二に、計算機はすべてタイムシェアリングの規律の下で運用されているため、基本的な対話機構を容易にすることが望ましいと考えました。

第三に、このネットワークは経験豊富なプログラマーによって使用されるため、ネットワークの使用に最大限の自由度を与えることが不可欠でした。文字セットやプログラミング言語などに関する制限は容認されないため、私たちはそのような制限を避けました。

第四に、これもまたネットワークが経験豊富なプログラマーによって使用されるため、設計を開かれたものにしておくことが必要であると感じました。経験を積むにつれて時折慣習が生まれることを私たちは予想していますが、それらを恣意的に押し付けることは控えるべきだと感じました。

第五に、ネットワークへの参加を快適に、あるいは場合によっては実行可能にするために、ネットワークへのソフトウェアインターフェースはホストのオペレーティングシステムに対する最小限の手術しか要求しないものであるべきです。

最後に、ネットワークの使用は一度きりの要求ではなく長時間の会話からなるという、上で述べた前提を受け入れます。

これらの考慮事項は、接続、ネットワーク制御プログラム、制御リンク、制御コマンド、socket、仮想ネットという概念へと導きました。

接続はリンクの拡張です。接続は2つのプロセスを結び、一方のプロセスの出力が他方の入力となるようにします。接続は単方向であるため、2つのプロセスが双方向に会話するには2つの接続が必要です。

ホスト内のプロセスは、ネットワーク制御プログラム (NCP) を通じてネットワークと通信します。ほとんどのホストでは、NCP はエグゼクティブの一部となるため、プロセスはシステムコールを用いて NCP と通信します。NCP の主要な機能は、接続の確立、接続の切断、接続の切り替え、およびフロー制御です。

NCP がその任務を果たすには、あるホストの NCP が別のホストの NCP と通信しなければなりません。この目的のために、各ホストのペア間の特定のリンクが制御リンクとして指定されています。制御リンク上で受信されたメッセージは、常に NCP によって1つ以上の制御コマンドの並びとして解釈されます。例として、制御コマンドの一種はリンクを割り当てて接続を開始するために用いられ、別の種類は接続が終了したという通知を運びます。制御コマンドの構文と意味論の部分的な概略を次の節で示します。

大きな問題は、外部ホスト内のプロセスをどのように参照するかです。各ホストは何らかの内部的な命名方式を持っていますが、これらのさまざまな方式はしばしば互換性がありません。共通の内部プロセス命名方式を押し付けることは実用的ではないため、名前空間に各ホストへ別々の部分を割り当てた中間的な名前空間が作られました。内部プロセス識別子を自分の名前空間へ対応付けることは各ホストに委ねられます。

名前空間の要素は socket と呼ばれます。socket は接続の一端をなし、接続は socket のペアによって完全に指定されます。socket は3つの数の連結によって指定されます:

  • (a) ユーザー番号 (24 ビット)
  • (b) ホスト番号 (8 ビット)
  • (c) AEN (8 ビット)

典型的な socket を図 3 に示します。

各ホストには、フィールド (b) がそのホスト自身の識別子に等しい名前空間内のすべての socket が割り当てられます。

socket は受信 socket か送信 socket のいずれかであり、AEN の下位ビットによってそのようにマークされます (0 = 受信、1 = 送信)。AEN の残りの7ビットは、各ホストの各使用済み番号に対して相当数の socket の集まりを提供するだけです。(AEN は "another eight-bit number" の略です)

各ユーザーには、ネットワーク全体を通じてそのユーザーを一意に識別する 24 ビットのユーザー番号が割り当てられます。一般にこれは、そのユーザーのホームホストの 8 ビットのホスト番号と、それに続くそのホストにおいてユーザーを一意に識別する 16 ビットからなります。特定のホストに結び付けられていないユーザー番号をユーザーが持つことを可能にする取り決めも設けることができ、これはホームホストを持たない、あるいは複数のホームホストを持つ可能性のある移動ユーザーにとって望ましいものです。この 24 ビットのユーザー番号は、次のように使用されます。ユーザーがあるホストにサインオンすると、そのユーザー番号が調べられます。その後、ユーザーが作成する各プロセスには、そのユーザー番号が付されます。ユーザーがネットワークを介して外部ホストにサインオンすると、そのホスト内で作成するプロセスに同じユーザー番号が付けられます。外部ホストは、ホームホストと同様にログイン時に表を参照するか、呼び出し元の識別情報に注目することによって、ユーザー番号を取得します。ユーザー番号を伝播させる効果は、各ユーザーが、自分が作成したプロセスからなる自分自身の仮想ネットを作り出すことです。この仮想ネットは任意の数のホストにまたがることがあります。したがって、ユーザーは自分のプロセスを任意の方法で接続することが容易になり、同時に、自分のプロセスを他の仮想ネット内のプロセスと接続することも可能になります。

socket とプロセスの関係がこれで記述できるようになりました (図 4 参照)。各ホストの各ユーザー番号について、128 個の送信 socket と 128 個の受信 socket があります。プロセスは、同じユーザー番号を持つ socket のうち任意の1つを使用することをローカル NCP に要求できます。その socket が他で使用されていなければ、要求は認められます。ここでの重要な観察は、プロセスによって要求された socket は、同じ仮想ネット内の他のプロセスによって使用されている場合を除き、すでに使用中であることはありえない、ということです。そしてそのようなプロセスは同じユーザーによって制御されています。

HOST-HOST プロトコルの珍しい側面は、プロセスが接続の自分の端をある socket から別の socket へ切り替えられることです。新しい socket は任意の仮想ネット内、任意のホストにあってよく、プロセスは接続が確立されつつある時点でも、その後でも切り替えを開始できます。切り替えの最も一般的な形態はかなり複雑な実装を伴い、本論文の残りの部分とは関係がないため、限定的な形態だけを説明します。この限定的な形態の切り替えは、プロセスが接続を確立する際に1つの socket を別の socket で置き換えられるようにするだけです。新しい socket は同じユーザー番号と同じホスト番号を持たなければならず、接続は依然として同じプロセスに対して確立されます。したがってこの形態の切り替えは socket に再びラベルを付ける方法にすぎず、メッセージの経路指定に変更は生じません。次の節ではシステムコールと制御コマンドを記述し、その次の節ではログインがどのように実装されうるかを検討します。