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

The Network Virtual Terminal (ネットワーク仮想端末)

ネットワーク仮想端末 (Network Virtual Terminal, NVT) は双方向文字デバイス (Bi-Directional Character Device) です。NVTにはプリンター (Printer) とキーボード (Keyboard) があります。プリンターは着信データに応答し、キーボードはTELNET接続を介して送信される発信データを生成し、「エコー」(Echoes) が必要な場合はNVTのプリンターにも送信されます。「エコー」はネットワークを横断することは期待されていません (「リモート」エコーモードの動作を有効にするオプションは存在しますが、どのホストもこのオプションを実装する必要はありません)。コードセットは8ビットフィールドの7ビットUSASCIIですが、ここで変更されている場合を除きます。コード変換とタイミングの考慮事項はローカルの問題であり、NVTには影響しません。

TRANSMISSION OF DATA (データ伝送)

ネットワークを介したTELNET接続は本質的に全二重 (Full Duplex) ですが、NVTは行バッファモード (Line-Buffered Mode) で動作する半二重デバイス (Half-Duplex Device) として見なされるべきです。つまり、反対のオプションが交渉されない限り、TELNET接続を介したデータ伝送に関して以下のデフォルト条件が適用されます:

  1. ローカルバッファスペースの可用性が許す限り、完全な1行のデータが伝送の準備ができるまで、または何らかのローカル定義の明示的な伝送信号が発生するまで、データが生成されるホストでデータを蓄積すべきです (SHOULD)。この信号はプロセスまたは人間のユーザーによって生成される可能性があります。

    このルールの動機は、一部のホストにとってネットワーク入力割り込みを処理するコストが高いことと、「エコー」がネットワークを横断しないというデフォルトNVT仕様に結びついています。したがって、ソースで一定量のデータをバッファリングすることは合理的です。多くのシステムは各入力行の終わりに何らかの処理アクションを取ります (ラインプリンターやカードパンチでさえ、しばしばこのように動作する傾向があります)、したがって伝送は行の終わりでトリガーされるべきです (SHOULD)。一方、ユーザーまたはプロセスは、行の終わりで終端しないデータを提供する必要または希望を見出すことがあります。したがって、実装者は、バッファされたすべてのデータを直ちに伝送するローカル信号方法を提供するよう注意する必要があります。

  2. プロセスがNVTプリンターへのデータ送信を完了し、さらなる処理のためにNVTキーボードからキューイングされた入力がない場合 (つまり、TELNET接続の一端のプロセスが他端からの入力なしには進行できない場合)、プロセスはTELNET Go Ahead (GA) コマンドを送信しなければなりません (MUST)。

    このルールは、サーバーホストは通常、処理を開始するために特別な信号 (行末または他のローカル定義の文字に加えて) を必要としないため、端末から各行の終わりにTELNET GAコマンドを送信することを要求することを意図していません。むしろ、TELNET GAは、IBM 2741のような「ロック可能な」キーボードを持つ物理的に半二重の端末をユーザーのローカルホストが操作するのを支援するように設計されています。このタイプの端末の説明は、GAコマンドの適切な使用を説明するのに役立つかもしれません。

    端末とコンピューターの接続は、常にユーザーまたはコンピューターのいずれかの制御下にあります。どちらも一方的に他方から制御を奪うことはできません。むしろ、制御側は明示的にその制御を放棄しなければなりません (MUST)。端末側では、ハードウェアは「行」が終了するたびに (つまり、ユーザーが「New Line」キーを押したときに) 制御を放棄するように構築されています。これが発生すると、接続された (ローカルの) コンピューターが入力データを処理し、出力を生成すべきかどうかを決定し、生成すべきでない場合は端末に制御を返します。出力を生成すべき場合、コンピューターはすべての出力が伝送されるまで制御を保持します。

    ネットワークを介してこのタイプの端末を使用することの困難は明白であるべきです。「ローカル」コンピューターは、行末信号を見た後に制御を保持するかどうかを決定できなくなりました。この決定は、データを処理している「リモート」コンピューターによってのみ行うことができます。したがって、TELNET GAコマンドは、「リモート」(サーバー) コンピューターが「ローカル」(ユーザー) コンピューターに、端末のユーザーに制御を渡す時が来たことを通知できるメカニズムを提供します。ユーザーに端末の制御を与えるべきときに、そのときだけ送信されるべきです (SHOULD)。GAコマンドの早期送信は、ユーザーが伝送システムが一時停止したと仮定し、したがって手動で回線を切り替えることができないため、出力のブロッキングを引き起こす可能性があることに注意してください。

    もちろん、前述の内容はユーザーからサーバーへの通信方向には適用されません。この方向では、GAはいつでも送信できますが、送信する必要はありません。また、TELNET接続がプロセス間通信に使用される場合、GAはどちらの方向にも送信する必要はありません。最後に、端末間通信の場合、GAはどちらの方向、一方の方向、または両方の方向で必要ない可能性があります。ホストが端末間通信をサポートする予定がある場合、ホストはユーザーにTELNET接続を介してGAを送信する時が来たことを手動で通知する手段を提供することが推奨されます (suggested)。ただし、これはTELNETプロセスの実装者への要求ではありません。

    TELNETモデルの対称性により、少なくとも概念的には、TELNET接続の各端にNVTが存在することが要求されることに注意してください。

STANDARD REPRESENTATION OF CONTROL FUNCTIONS (制御機能の標準表現)

このドキュメントの序論で述べたように、TELNETプロトコルの主な目標は、ネットワークを介した端末デバイスと端末指向プロセスの標準インターフェイスを提供することです。このタイプの相互接続の初期の経験により、特定の機能がほとんどのサーバーによって実装されていることが示されましたが、これらの機能を呼び出す方法は大きく異なります。複数のサーバーシステムと対話する人間のユーザーにとって、これらの違いは非常にフラストレーションを引き起こします。したがって、TELNETはこれら5つの機能の標準表現を定義します。これらの標準表現は標準的ですが必須ではない意味を持ちます (ただし、Interrupt Process (IP) 機能はTELNETを使用する他のプロトコルによって必要とされる場合があります)。つまり、ローカルユーザーに機能を提供しないシステムは、ネットワークユーザーに提供する必要はなく、機能の標準表現をNo-operationとして扱うことができます (may)。一方、ローカルユーザーに機能を提供するシステムは、機能の標準表現を送信するネットワークユーザーに同じ機能を提供する義務があります。

Interrupt Process (IP) (プロセス割り込み)

多くのシステムは、ユーザープロセスの動作を一時停止、割り込み、中止、または終了する機能を提供します。この機能は、ユーザーがプロセスが無限ループにあると考えるとき、または不要なプロセスが誤ってアクティブ化されたときによく使用されます。IPはこの機能を呼び出すための標準表現です。実装者は、IPがTELNETを使用する他のプロトコルによって要求される可能性があることに注意すべきであり、したがってこれらの他のプロトコルをサポートする場合は実装されるべきです (should)。

Abort Output (AO) (出力中止)

多くのシステムは、出力を生成しているプロセスが完了まで実行できる (または完了まで実行した場合に到達する同じ停止点に到達する) が、ユーザーの端末に出力を送信しない機能を提供します。さらに、この機能は通常、既に生成されたがユーザーの端末にまだ実際に印刷 (または表示) されていない出力をクリアします。AOはこの機能を呼び出すための標準表現です。たとえば、一部のサブシステムは通常、ユーザーのコマンドを受け入れ、応答としてユーザーの端末に長いテキスト文字列を送信し、最後に「プロンプト」文字 (<CR><LF>が前に付く) をユーザーの端末に送信して次のコマンドを受け入れる準備ができていることを通知します。テキスト文字列の送信中にAOを受信した場合、合理的な実装はテキスト文字列の残りを抑制しますが、プロンプト文字とその前の<CR><LF>を送信することです。(これは、IPを受信した場合に取られるアクションとは異なる可能性があります。IPはテキスト文字列の抑制とサブシステムからの終了を引き起こす可能性があります。)

この機能を提供するサーバーシステムは、システムの外部 (ネットワークおよびユーザーのローカルホスト内) にクリアすべきバッファが存在する可能性があることに注意すべきです。これを行う適切な方法は、「Synch」信号 (以下で説明) をユーザーシステムに送信することです。

Are You There (AYT) (応答確認)

多くのシステムは、システムがまだ稼働していることをユーザーに視覚的な (例えば、印刷可能な) 証拠を提供する機能を提供します。この機能は、計算の予期しない (ユーザーによる) 長さ、異常に重いシステム負荷などのために、システムが予期せず長時間「沈黙」しているときにユーザーによって呼び出される可能性があります。AYTはこの機能を呼び出すための標準表現です。

Erase Character (EC) (文字消去)

多くのシステムは、ユーザーが提供するデータストリームから最後の未削除の文字または「印刷位置」*を削除する機能を提供します。この機能は通常、タイプミスが発生したときにキーボード入力を編集するために使用されます。ECはこの機能を呼び出すための標準表現です。

*注意: 「印刷位置」には、オーバーストライクの結果である複数の文字、または<char1> BS <char2>...のようなシーケンスが含まれる場合があります。

Erase Line (EL) (行消去)

多くのシステムは、現在の入力「行」のすべてのデータを削除する機能を提供します。この機能は通常、キーボード入力を編集するために使用されます。ELはこの機能を呼び出すための標準表現です。

THE TELNET "SYNCH" SIGNAL (TELNET「同期」信号)

ほとんどのタイムシェアリングシステムは、端末ユーザーが「暴走」プロセスの制御を取り戻すことを可能にするメカニズムを提供します。上記のIPおよびAO機能はこれらのメカニズムの例です。これらのシステムは、ローカルで使用される場合、ユーザーが提供するすべての信号にアクセスできます。これらの信号が通常の文字であるか、テレタイプ「BREAK」キーまたはIBM 2741「ATTN」キーによって提供されるような特別な「帯域外」信号であるかは関係ありません。端末がネットワークを介してシステムに接続されている場合、これは必ずしも真実ではありません。ネットワークのフロー制御メカニズムにより、このような信号がユーザーのホストなど、他の場所でバッファリングされる可能性があります。

この問題に対処するために、TELNET「Synch」メカニズムが導入されました。Synch信号は、TCP緊急通知 (TCP Urgent Notification) とTELNETコマンドDATA MARKで構成されます。緊急通知は、TELNET接続に適用されるフロー制御の対象ではなく、それを受信するプロセスによるデータストリームの特別な処理を呼び出すために使用されます。このモードでは、データストリームは以下に定義される「興味深い」信号について直ちにスキャンされ、中間データは破棄されます。TELNETコマンドDATA MARK (DM) は、特別な信号が既に発生したことを示すデータストリーム内の同期マークであり、受信者はデータストリームの通常の処理に戻ることができます。

Synchは、Urgentフラグが設定され、DMが最後の (または唯一の) データオクテットとしてTCP送信操作を介して送信されます。

複数のSynchが急速に連続して送信される場合、緊急通知がマージされる可能性があります。受信された数は送信された数以下であるため、Urgentをカウントすることは不可能です。通常モードでは、DMは無操作です。緊急モードでは、緊急処理の終了を通知します。

TCPがDMが見つかる前に緊急データの終了を示す場合、TELNETはDMが見つかるまでデータストリームの特別な処理を続けるべきです (should)。

TCPがDMが見つかった後にさらに緊急データを示す場合、それは後続のSynchのためにのみ可能です。TELNETは別のDMが見つかるまでデータストリームの特別な処理を続けるべきです (should)。

「興味深い」信号は次のように定義されます: IP、AO、AYTのTELNET標準表現 (ただしECまたはELではない); これらの標準表現のローカルアナログ (存在する場合); 他のすべてのTELNETコマンド; データストリームのスキャンを遅延させることなく動作できる他のサイト定義の信号。

SYNCHメカニズムの1つの効果は、Synchの送信者とその受信者の間の基本的にすべての文字 (TELNETコマンドを除く) を破棄することであるため、このメカニズムは、それが望まれるときにデータパスをクリアする標準的な方法として指定されています。たとえば、端末のユーザーがAOを送信させた場合、AOを受信するサーバー (それが機能を全く提供する場合) はユーザーにSynchを返すべきです (should)。

最後に、TELNETレベルでTCP緊急通知が帯域外信号として必要であるのと同じように、TELNETを使用する他のプロトコルは、異なるレベルでの帯域外信号と見なすことができるTELNETコマンドを必要とする場合があります。

慣例により、シーケンス[IP, Synch]はそのような信号として使用されます。たとえば、TELNETを使用する他のプロトコルが、TELNETコマンドAOに類似した文字列STOPを定義するとします。このプロトコルのユーザーが、サーバーがSTOP文字列を処理することを望んでいるが、サーバーが他のコマンドを処理しているために接続がブロックされていると想像してください。ユーザーは自分のシステムに次のように指示すべきです:

  1. TELNET IP文字を送信する;

  2. TELNET SYNCシーケンスを送信する、すなわち:

    TCP緊急モード送信操作で唯一の文字としてData Mark (DM) を送信する。

  3. 文字列STOPを送信する; および

  4. 他のプロトコルのTELNET DMのアナログを送信する (存在する場合)。

ユーザー (またはユーザーに代わって行動するプロセス) は、TELNET IPがサーバーのTELNETインタープリターに到達することを保証するために、上記のステップ2のTELNET SYNCHシーケンスを送信しなければなりません (must)。

UrgentはTELNETプロセスを起動すべきです。IPは次の上位レベルプロセスを起動すべきです。

THE NVT PRINTER AND KEYBOARD (NVTプリンターとキーボード)

NVTプリンターは、未指定のキャリッジ幅とページ長を持ち、すべての95のUSASCIIグラフィック文字 (コード32から126) の表現を生成できます。33のUSASCII制御コード (0から31および127) と128の未カバーコード (128から255) のうち、以下はNVTプリンターに対して指定された意味を持ちます:

NAME CODE MEANING

NULL (NUL) 0 無操作 Line Feed (LF) 10 プリンターを次の印刷行に移動し、 同じ水平位置を保持します。 Carriage Return (CR) 13 プリンターを現在の行の左マージンに 移動します。

さらに、以下のコードはNVTプリンターに対して定義されているが必須ではない効果を持つべきです (shall)。TELNET接続のどちらの端も、これらを受信または送信したときに、他方が特定のアクションを取るか、または取ったかを仮定することはできません (may not):

BELL (BEL) 7 可聴または可視信号を生成します (印刷ヘッドを移動しません)。 Back Space (BS) 8 印刷ヘッドを左マージンに向かって 1文字位置移動します。 Horizontal Tab (HT) 9 プリンターを次の水平タブ ストップに移動します。どちらの 当事者がこれらのタブストップの 位置を決定または確立するかは 未指定のままです。 Vertical Tab (VT) 11 プリンターを次の垂直タブ ストップに移動します。どちらの 当事者がこれらのタブストップの 位置を決定または確立するかは 未指定のままです。 Form Feed (FF) 12 プリンターを次のページの先頭に 移動し、同じ水平位置を保持します。

残りのすべてのコードは、NVTプリンターにアクションを取らせません。

定義されているように、シーケンス「CR LF」はNVTを次の印刷行の左マージンに配置させます (たとえば、シーケンス「LF CR」も同様です)。しかし、多くのシステムと端末はCRとLFを独立して扱わず、その効果をシミュレートするためにいくらかの努力をする必要があります。(たとえば、一部の端末にはLFから独立したCRがありませんが、そのような端末ではバックスペースによってCRをシミュレートすることが可能かもしれません。) したがって、シーケンス「CR LF」は、それらの組み合わせアクションが意図されているときは単一の「改行」文字として扱われ、使用されなければなりません (must)。キャリッジリターンのみが実際に望まれる場合はシーケンス「CR NUL」が使用されなければなりません (must)。他のコンテキストではCR文字を避けなければなりません (must)。このルールは、「改行」機能を実行するか、または複数のバックスペースを実行するかを決定しなければならないシステムに、TELNETストリームにはCRの後に続く文字が含まれており、合理的な決定を可能にすることを保証します。

「CR LF」または「CR NUL」は両方向で必要であることに注意してください (デフォルトのASCIIモードで)、NVTモデルの対称性を保持するためです。一部の状況では (例えば、リモートエコーと抑制go aheadオプションが有効な場合)、文字が実際のプリンターに送信されていないことが知られている可能性がありますが、それにもかかわらず、一貫性のために、プロトコルは、LFが続かないCRの後にNULをデータストリームに挿入することを要求します。この逆は、CRの後にデータストリームで受信されたNUL (明示的に他を指定するオプション交渉がない場合) は、NVTをローカル文字セットマッピングに適用する前に取り除かれるべきであるということです。

NVTキーボードには、すべての128のUSASCIIコードを生成するためのキー、キーの組み合わせ、またはキーシーケンスがあります。NVTプリンターに効果がないものが多くあっても、NVTキーボードはそれらを生成できることに注意してください。

これらのコードに加えて、NVTキーボードは以下の追加コードを生成できるべきです (shall)。これらは、特に記載されている場合を除き、定義されているが必須ではない意味を持ちます。これらの「文字」の実際のコード割り当ては、TELNETコマンドセクションにあります。なぜなら、これらはある意味で汎用的であると見なされ、データストリームが他の文字セットとして解釈される場合でも利用可能であるべきだからです。

Synch

このキーにより、ユーザーは他方へのデータパスをクリアできます。このキーの起動により、データストリームでDMが送信され (コマンドセクションを参照)、TCP緊急通知が関連付けられます。前述のように、DMとUrgentのペアは必要な意味を持たなければなりません (must)。

Break (BRK)

このコードは、現在多くのシステム内でローカルな意味が与えられているUSASCIIセットの外の信号であるために提供されています。これはBreakキーまたはAttentionキーが押されたことを示すことを意図しています。ただし、これは必要とするシステムに129番目のコードを提供することを意図しており、IP標準表現の同義語としてではないことに注意してください。

Interrupt Process (IP)

NVTが接続されているプロセスを一時停止、割り込み、中止、または終了します。また、TELNETを使用する他のプロトコルの帯域外信号の一部でもあります。

Abort Output (AO)

現在のプロセスを (見かけ上) 完了まで実行させますが、その出力をユーザーに送信しません。また、ユーザーにSynchを送信します。

Are You There (AYT)

AYTが受信されたことの可視的な (すなわち印刷可能な) 証拠をNVTに返送します。

Erase Character (EC)

受信者はデータストリームから最後の未削除の文字または「印刷位置」を削除すべきです (should)。

Erase Line (EL)

受信者は、TELNET接続を介して送信された最後の「CR LF」シーケンスまで (ただし含まない) データストリームから文字を削除すべきです (should)。

これらの「追加」キーとプリンターフォーマット効果器の精神は、これらが既に行われなければならない「NVT」から「ローカル」へのマッピングの自然な拡張を表すべきであるということです。NVTデータバイト68 (104オクタル) が「大文字D」の任意のローカルコードにマッピングされるべきであるのと同じように、EC文字は任意のローカル「文字消去」機能にマッピングされるべきです。さらに、124 (174オクタル) のマッピングが「垂直バー」文字を持たない環境ではやや任意であるのと同じように、ローカル「行消去」機能がない場合、EL文字はやや任意のマッピング (またはまったくマッピングなし) を持つ可能性があります。フォーマット効果器も同様です: 端末が実際に「垂直タブ」を持っている場合、VTのマッピングは明白であり、端末が垂直タブを持たない場合にのみ、VTの効果は予測不可能であるべきです。