ネットワーク・ソフトウェアのインプリメンテーションについて解説することです。一環として行われています。他のコンピューターと通信する能力を提供することです。ホストとのコミュニケーションを許します。ために設計されています。このバージョンは仮想ページの能力を持っています。Corporation.†VAXはデジタル・イクイップメントの商標です。level.‡UNIXはベル研究所の商標です。この情況では、より低いレベル・ネットワーキング・サービスのユーザであるすべてのソフトウェアを指します(適用、ユーザという)。したがって、TCPレベルから見られた時、FTPとTELNETのようなプログラムは適用と考えることができます。TCPはそれ自身IPレベルから適用として見られるかもしれません。organization.次のパラグラフでは、私たちが、インプリメンテーションおよびその構成のいくつかの特徴および設計ゴールについて議論するでしょう。processing.私たちがVAXのために開発しているTCPソフトウェアはいくつかの重要な特徴を組込みます。最初に、様々な適用がそれらに独立してアクセスすることができるように、そのインプリメンテーションは、様々なプロトコル層の分離に備えます。したがって、TCPレベルへのアクセスに対する適応性(それは完全で信頼できて、多重化され、ホストホストコミュニケーション接続を提供するだろう)があります。IPレベルは、さらに、TCP以外の?K用(それらはそのインターネット・アドレシングおよびデータ分割/リアセンブリサービスを要求する)にはアクセス可能です。最後に、インプリメンテーションは、さらにローカル・ネットワーク上のホストと通信したく行い?スいソフトウェアのために、「生の」方法の中でローカル・ネットワーク・インターフェース(ARPANET(BBN報告書1822番の中でそのホスト・インターフェースは定義される)に、この場合[2])への独立したアクセスを許可します、その、自分自身のもの、より高いレベル・プロトコル処理。debugged.それらの仕様書に記述されるように、インプリメンテーションの別の特徴はプロトコル(TCPとIP)の各レベルの十分な機能性を提供することです[3、4].したがって、TCPレベルで、フロー制御メカニズム(ウィンドウ)、先行およびセキュリティ・レベルのような特徴は支援されるでしょう。IPレベルで、データグラム分割およびリアセンブリは、IPオプション処理(ゲートウェイ・ホストフロー制御およびルーティング・アップデート(出所焼入れ))と同様に支援されるでしょう。基礎的な特徴(TCPフロー制御およびIP分割/リアセンブリのような)がデバッグされた後、これらの特徴(IPゲートウェイ・ホスト・ルーティング・アップデートを扱い、IPオプション処理ように)のうちのいくつかが、開発の後の段階の中でインプリメントされるだろうことは予想されます。process.オペレーティング・システムであるインプリメンテーションのいくつかの特徴があります、依存する最も重要なもの(これらに)は交換することができるユーザ・レベル・プロセスではなく、永久に駐在のシステムプロセスとしてUNIXカーネル中でネットワークのソフトウェアがインプリメントされているという事実です。use.この構成は、実行に影響するいくつかの意味合いを持ちます。最多の明白な結果は、ネットワークのソフトウェアが常に駐在である(以来)ということです。それはより効率的にネットワークに応答することができます。そのような出来事をサービスすることが常に利用可能なように、ユーザは出来事を始めて、交換される必要がありません。ネットワークとユーザープロセスの間のデータを送信するために全体的に利用可能なキューのようなより単純なデータ構造を使用することができるので、核の中の住宅は、笛とポートのような潜在的に非能率的な相互プロセスコミュニケーション・メカニズムの使用の負担を削除します。核はサービス(例えばタイマーおよびメモリ割付け)を提供しました、さらに使用することがはるかに容易でより効率的になります。11/70のようにNCP分裂核/ユーザープロセスインプリメンテーション(それは、制限のあるアドレス空間を備えた機械上の前のUNIXネットワーキング・ソフトウェアにおいて必要だった)のように手段の回避を許可します。核居住者アプローチがこのTCPの速度および効率に寄与するだろうことが望まれます。connection.(UNIX)ファイル指向の「従来の」ユーザ・インターフェースの使用はこのイ?塔vリメンテーションの別のオペレーティング・システム依存する特徴です。ユーザは、本位制度ファイルI/O呼び出しによってネットワーク・ソフトウェアにアクセスするでしょう:開いて、閉じて、読み書きしてください。これは、接続を開始し維持するために必要とされる余分な情報を提供するというこれらの要求にあることの修正を要します。本位制度呼び出しの拡張も、ユーザ(倒れている外国のホストのような)への例外的な条件のコミュニケーションもを提供しなければなりません。場合には、例えば、開く、呼び出しのモード・フィールドに使用する、パラメーター構造にポインターを適応させるために拡張されるでしょう。例外的な条件の場合には、読み取りのためのリターン・コード、また書く、例外的な条件の存在を示すために非常にエラーのように使用されるでしょう。補足ステータス呼び出し(ioctl)はユーザが条件の性質に関する詳細な情報および接続の一般的なステータスを決定するために提供されるでしょう。mechanism.このように、必要な付加的な情報は、パイプ・メカニズムのように、UNIXファイル・インターフェースが提供する機能性の使用をまだ認めている間、ネットワーク・コミュニケーションが支援されるだろうと主張する必要がありました。restriction.初期のバージョンでは、このインターフェースが標準のUNIXブロッキングI/Oメカニズムになるでしょう。したがって、接続のバッファーを用いた資源を超過する、外国のホストから受理されておらず書くデータのための顕著な読み取りは閉鎖するでしょう。近い将来にVM/UNIX核にawait/キャパシティーメカニズム(バージョン6システムに現在利用可能)が加えられるだろうことが期待されます。これらの非ブロッキングI/O修正はブロッキング制限を取り除いて、ネットワーク・ソフトウェアに支援されるでしょう。overhead.いくつかの設計ゴールはこのインプリメンテーションのために公式化されました。これらのゴールの中には、効率および低いオペレーティング・システム・オーバーヘッドが、カーネル居住者ネットワーク・プロセス(それは縮小されたプロセスおよび相互プロセスコミュニケーション・オーバーヘッドを考慮に入れる)によって促進されてあります。manipulations.インプリメンテーションの別のゴールはネットワーク交通を扱う際に外来のデータ複写の量を減らすことです。これを達成するために、次の特性を持っているバッファー・データ構造は採用されました:中間のサイズ(128バイト);低いオーバーヘッド(1つのバッファー当たり制御情報の10バイト);またデータ・オフセットおよび長さフィールドの使用によるデータ取り扱いでの柔軟性、それはIPフラグメントリアセンブリおよびTCPシーケンス・スペース操作のようなオペレーションのために必要になったデータ複写の量を減らします。network.様々なソフトウェア・レベル間にキューにする使用は、最も高いできるだけ早く可能なレベルへの入って来るネットワーク・データの処理により、インプリメンテーションで制限されています。したがって、ただメッセージがネットワークから完全に読まれるまで、ネットワークから来る破砕していないメッセージは、デバイス・ドライバのキューにするとる場所と共にIPとTCPのレベルに渡されます。同様に、出力側で、データがネットワークによって受理されるとソフトウェアが合理的に確信する場合、データ送信は単に試みられます。mechanisms.最後に、ネットワーク・ソフトウェアの包含?ェバークレーによって提供されるその向こうの基礎的な核コードの比較的小さな修正を要するだろうことは計画されます。外部の核コードへのただ一つの修正、ネットワーク・ソフトウェアは上に記述されたユーザ・インターフェースを支援するファイルI/Oシステムコールへの少しの変更になるでしょう。低い芯の中の事実上のページ地図データ構造に対する拡張は、メモリ割付けスキーム(それは核のページ構造割付けメカニズムを利用する)を支援するのに必要になります。1.ネットワーク・ソフトウェアは、非常にバークレーVM/UNIXのスケジューラおよびページ悪魔のように核居住者システムプロセスとして見ることができます。このプロセスはネットワーク初期化の一部として始められます。そのコントロールおよびデータ・フローの図形は図1の中で示されます。directly.コントロールのその主要なフローは入って来るメッセージがネットワークから完全に読まれた場合、ネットワークインターフェイス・デバイス・ドライバによって活性化される(wakeupによって)入力されたループです。(さらに、TCPユーザかタイマー出来事はそれを下に記述されて起こすことができます。)その後、メッセージは入力キューから得られ、ローカル・ネットワーク・フォーマット(例えば1822のリーダー・リンク番号)に急送されます。ARPANET悪魔の子ホスト・メッセージ(RFNM、incompletes、悪魔の子/ホストステータス)は、このレベルに扱われます。他のタイプのメッセージについては、ローカル・ネットワーク・レベル入力取扱い人がより高いレベルを「メッセージ取扱い人」と呼びます。「標準のメッセージ取扱い人」はIP入力ルーチンです。NCPのような)に他のプロトコル用の取扱い人は、2つの方法のどちらかに泊まるかもしれません。最初に、ローカル・ネットワークへの/指定されたリンク上のデータを単にキューにする「生のメッセージ」サービスは利用可能です。読書か記述によってこのサービスのために開かれた接続においては、ユーザープロセスが扱うかもしれません、その、自分自身のもの、より高いレベル・プロトコル・コミュニケーション。二者択一で、頻繁に用いられているプロトコルについては、新しい取扱い人は核に定義され、直接呼ばれるかもしれません。messages.IPレベルでは、破片リアセンブリ・アルゴリズムが実行されます。有効なIPリーダーとの破砕していないメッセージは、より低いレベル急送に似ているやり方で、より高いレベル・プロトコル取扱い人に、だがIPプロトコル番号に基づいて渡されます。「標準の取扱い人」はTCPです。別のプロトコル取扱い人はIPゲートウェイ・ホスト・フロー制御およびルーティング・アップデート・メッセージを解釈します。level.入って来る破片が、出所および終点アドレス、プロトコル番号およびIP識別フィールドによって分離される場合、破片にされたメッセージは破片リアセンブリ・キューに置かれます。各「接続」(これらのフィールドによって定義されたとともに)については、破片のリンクしたリストが、札が、破片オフセット・スタートおよび終了バイト番号によって付けられて維持されます。破片が受け取られるとともに、適切なリストは見つかります(あるいは、新しいものは作成されます)。新しい破片は、既にリスト上の破片のものとスタートと終了のバイト番号を比較することにより、合併されます。複製のデータが投げ捨てられます。タイマーはこのキューに関係しています。タイムアウトの後に残る不完全なメッセージは落とされます。それらの記憶装置が解放されます。完成したメッセージは、次のレベルに渡されます。queue.TCPレベルでは、入って来るデータグラムが、「TCP機械」への呼び出しによって処理されます。これはTCP自体(それはその状態が荒く[4]の中で定義されるようなプロトコルの様々な状態で、その入力が、ネットワークからの入って来るデータを含んでいる有限状態機械として組織される)です、ユーザ/終了/読み取り/書き込みを開く、要求する、またタイマー出来事。ネットワークからの入力は上記の記述されたレベルを通り抜けて、直接扱われます。タイマー出来事は仕事キューによって扱われます。requests.ユーザープロセスがシステムコールによってネットワーク・リクエストを実行する場合、適切なデータ(読み取りか書き込みの上の)は、ユーザから核ス?yース(あるいは逆に)にコピーされます。仕事エントリーはキューに入れられます。ネットワーク・プロセスが起こされます。同様に、TCP(再送信タイマーのような)に関連したタイマーが出る場合、タイマー仕事リクエストはキューに入れられます。ネットワーク入力プロセスが起こされます。以前起こされた、それはネットワークインターフェイスからの完成したメッセージの存在をチェックし、それらを処理します。これらの入力が処理された後、TCP機械は仕事キューに関するどんな顕著なリクエストも扱うために呼ばれます。その後、ネットワーク・プロセスはより多くのネットワーク入力あるいは仕事リクエストを待って眠ります。したがって、TCP機械は、ネットワーク入力で直接呼ばれるかもしれないか、あるいはユーザとタイマーのリクエストを待つその仕事列をチェックするために間接的に起きました。queue.リセットされた処理およびシーケンスおよび認識数確認の後に、受理可能な受信データは順番に並べられ、受理キューに置かれます。この配列プロセスは、上に記述されたIPフラグメントリアセンブリ・アルゴリズムに似ています。このキューに置かれたデータは、外国のホストに認められます。そのシーケンス番号が現在の受理ウィンドウの外部で位置する、受信データは処理されないが、不認可のメッセージキューに置かれます。広告された受理ウィンドウは、接続に分配されたバッファーする(残りの量の)方式で決定されます(以下を参照)。その後、バッファーが利用可能になる場合、不認可のメッセージキュー上のデータは処理され、受理データ・キューに置かれます。network.出力側で、データ送信のTCP要請は、IPレベル出力ルーチンへの呼び出しに帰着します。必要ならば、このルーチンは分割を行い、ローカル・ネットワーク出力ルーチン上の呼び出しを行います。その後、出発のメッセージは、デバイス・ドライバによるネットワークインターフェイスへの送信のためにバッファーを用いたキューに置かれます。データ送信では、最も高いレベル(TCP)から移動するそのデータを保証する試みがなされます、もしネットワークへの送信のためのメッセージを受理するために、より低いレベルが必要な資源を持つだろうという合理的な確実性がなければ、送られないでしょう。advance.送られるデータはすべて維持されます、1つの、単一、データがユーザに加えられる場合、キューを送る、書く、また適切な認識が受け取られるとき、削除されました。TCP機械がデータを送る場合は常に、再送信タイマーはセットされます。キュー上の第1のデータ・バイトのシーケンス番号が保存されます。初期の送信の後に、送る次のデータのシーケンス番号は、最初に送られたものを越えて進められます。そのデータが認められる前に、再送信タイマーが出る場合、送る次のデータのシーケンス番号はバックアップされます、そしてsendバッファー(流れによって決定された長さのための、ウィンドウを送る)の内容、適切にセットされたACKとウィンドウのフィールドと共に再?嵐Bされます。保存されたシーケンス番号が進まない場合、再送信タイマーは、3から30秒に対するますますより高い値で飾られます。TCP.データが送られる場合、固執タイマーもセットされます。これは、外国のプロセスが0長さウィンドウを広告する場合コミュニケーションが維持されることを可能にします。固執タイマーが出る場合、データの1バイトはTCPから強要されます。sequencing.以前に言及されるように、データはすべて中間の分類された(128、バイト)バッファー中のネットワークから様々なプロトコル・ソフトウェア層まで渡されます。バッファーは2つのチェーン・ポインター、データ・オフセットおよびデータ長さフィールドを持っています(図2を参照)。データがネットワークから読まれるか、ユーザからコピーされるとともに、多数のバッファーはともにつながれます。プロトコル・ヘッダーもこれらのバッファーの中に保持されます。メッセージが様々なソフトウェア・レベル間で渡されるとともに、オフセットは適切なヘッダーを指すために修正されます。長さフィールドは、特別のバッファー中のデータの終了を与えます。このオフセット/長さペアはIPフラグメントリアセンブリおよびTCP配列でメッセージを融合することを促進します。recycled.これらのバッファーの割付けはネットワーク・ソフトウェアによって扱われます。バッファーは、核の無料のメモリ地図(CMAP)からページ・フレームを「盗む」ことにより得られます。VM/UNIXでは、これらのページ・フレームが長さ1024バイトで、8つの128バイトのバッファーの余地がこのようにあります。ネットワーク・バッファーの源としてメモリにページをつける核を使用するという利点は、全面的なシステムのオペレーションに対するわずかな影響を、それらの割付けが全くダイナミックにやめることができるということです。バッファーは、ネットワーク・メモリ・アロケーターによって循環的な免税品目表上で維持されて、自由なページ・フレームの貯蔵所から割り付けられます。バッファー増加の需要として、新しいページ・フレームはページをつける免税品目表から盗まれ、ネットワーク・バッファー貯蔵所を増しました。同様に、ページ減少の必要として、自由なページはシステムに返されます。ページ・フレーム内のバッファー割付けの中の分割を最小限にするために、免税品目表はソートされます。これ以上のページが割付けに利用可能でない場合、IPリアセンブリおよびTCPの不認可のデータ・キュー上のデータは落とされます。それらのバッファーが再利用されます。buffering.システムから盗むことができるページの数は、適度な数(特別のシステムでのネットワーク利用に依存する実行64-256中の)に制限されています。接続間のネットワーク資源利用の公平を強化するために、特別の接続にいつでも専心的になりうるバッファーの数は制限されています。接続が開かれる場合、ユーザはこの限界をある小さな程度に変えることができます。したがって、TELNETユーザは、最小の1Kバイトとの接続を開始してもよい、バ?bファーして、送り受け取る;より大きなトランスファーを予想するFTPユーザが4Kまでのバッファーを望んでいるかもしれない一方。(割付け)バッファーを用いたこの接続の影響は、TCPがブロッキングの前に送るためにユーザから受理するかもしれないデータの量、およびTCPが認めるかもしれないネットワークからの入力の量に制限を設けることです。受理では、入って来るデータにネットワーク・ソフトウェアがユーザの接続限界の向こうの利用可能なバッファーを分配するかもしれないことに注意してください。このデータは、揮発性であると考えられ、バッファー要求がより高くなる場??a場合落とされるかもしれません。ユーザの接続バッファー限界が使い尽くされるまで、入って来るデータはTCPによって認められます。接続用の広告されたTCPフロー制御ウィンドウは、残りの量のバッファーに基づいてセットされます。connections.したがって、ネットワーク・ソフトウェアは、それが、IPとローカル・ネットワークのレベルでデータを処理する際に1)それ自身の内部使用用の十分にバッファーすることを持っていると保証するに違いありません;2)ユーザ・スペースにコピーされていない定評あるTCPデータを保持すること;そして3)、外国のホストTCPによってまだ認められていない送信用のTCPによって容認されたデータを保持すること。他のデータ、不認可のTCPのように、ネットワークからの入力およびIPリアセンブリ・キュー上の破片は、より多くのバッファーの需要がこれらのキュー上のバッファーの再利用を必要にする場合に、落とされることに弱い。ページをつけるシステムから盗まれるかもしれないページ・フレームの数に絶対的な制限があり、従って、ものの合計が利用可能なバッファーに番号を付けるので、同時の接続の総数に合成の制限があります。1931-1946.。