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

I - はじめに

本稿で MIT Project MAC のネットワークワーキンググループは、Carr、Crocker、Cerf が 1970 年の SJCC 論文のプレプリントで規定し、Crocker が NWG/RFC 36 で拡張したプロトコルに対する修正と拡張を提案する。本稿は我々の提案を大まかに概説するものであり、完全な仕様であろうとするものではない。当初実装すべきと我々が考えるプロトコルの種類と範囲を示すことを意図している。

我々は、一意な識別子を持つ socket 間の単方向通信という基本概念に同意する。我々は、NWG/RFC36 で規定されたネットワークコマンドのわずかに修正した部分集合に、Harslem と Heafner が NWG/RFC 40 で規定した ERR コマンドを加えたものを実装することを提案する。

すべての ARPA 請負業者をできるだけ早くネットワークに接続し互いに通信させるという基本目標を考えると、ネットワークの主要な初期用途を満たしつつ、ほどよく単純でしかも拡張可能な初期プロトコルを実装することが重要であると我々は考える。できるだけ広範な支持を得るため、またあらゆるサイトで最小限の追加ソフトウェアで容易に実装できるように、単純なプロトコルであるべきである。

プロトコルは進化してゆくが、すべてのサイトに受け入れられ実装されたプロトコルの基本部分は、変更に対して非常に強い抵抗を示すものと考えられる。したがって、初期プロトコルを開放的で柔軟なものにすることが非常に重要である。単純な基本プロトコルの方が複雑なものよりこの点で成功しやすい。これは、基本プロトコルが支持され続ける限り、複数のサイト間に追加のプロトコル層が存在することを妨げるものではない。

初期プロトコルには 3 つの機能が備わっていなければならないと我々は考える:

  1. 互いに接続する方法を知っている 2 つの既存プロセス間の多重経路通信。

  2. プロセスが外部ホストのロガー (ホストにおけるログインプロセス) に接続し、ユーザープロセスの作成を要求するための標準的な方法。(ログイン儀式は標準化されてもされなくてもよい。)

  3. 新しく作成されたプロセスが、その作成を要求した外部プロセスとの疑似タイプライタ通信を開始するための標準的な方法。

Carr、Crocker、Cerf が提案したプロトコルと本提案との主な相違点は次のとおりである:

  1. Crocker が NWG/RFC 36 で規定した動的再接続戦略は将来の実装に留保される。これを含めるとプロトコルの初期実装が不必要に複雑になると我々は考える。我々は、動的再接続を必要としない外部プロセス作成の戦略を概説する。本提案のいかなる部分も、後日における動的再接続の実装を妨げるものではない。

  2. 同一ホストに共存する同一ユーザーの異なるプロセスに属する socket を区別するために、socket 識別子に "インスタンスタグ" を追加することを提案する。

  3. 次の NCP コマンドが追加された:

    1. NWG/RFC 40 で規定された ERR コマンドが含まれる。

    2. BLK および RSM コマンドを、NWG/RFC 36 に示された "cease on link" IMP コマンドならびに SPD および RSM コマンドの代替案として提示する。これらのコマンドはリンク番号ではなく socket 接続に対して動作するため、単一のリンク番号上での socket 接続多重化の実装を妨げることはない —— それが後に望ましいと判明した場合でも。

    3. プロセスを中断する INT コマンドが規定される。望ましくない計算や出力に従事している可能性のあるプロセスを中断できることは極めて重要だと我々は考える。通常のメッセージ内の特殊な形式として中断を実装すると重大な困難が生じる: 中断が必要なときに接続がブロックされている可能性があり、また NCP は到着する各メッセージを走査して中断信号を探さなければならない。

    4. NCP 間の通信を試験するための ECO エコーコマンドが含まれる。

  4. socket はいくつかの状態を持つものとして概念化され、それらの状態はネットワーク要求が待ち行列に入れられ得る条件に関連している。これは無制限の待ち行列という機能とは異なり、後者には実装上の困難が伴う。

  5. 外部プロセスの作成およびそれとの通信に関するプロトコルは、独立したユーザー制御通信 (UCC) プロトコルレベルへ移され、より完全に規定される。