PR

 Telnetで通信する場合、最初相手はNVTという仕様を持つ端末であるかのように扱うことができます。このため、転送するコードの意味はすべて定義されています。また、Telnet自体の制御などについては何も考えることなく、NVTとして定義された端末を扱うようにすればいいわけです。

NVT

 NVTには、「文字や特殊コードを送信するためのキーボード」と「相手から受け取った文字を表示するプリンタ」という構成要素があります。キーボードはASCIIで定義された文字や記号、数字(実際には32~126の間の1バイトの数値が送信されます)などを送信できます。このほか、行の終わりを表すような特殊な制御文字(TABやCR、LFなど)を送信するためのキー(31以下の1バイトのコードを送信)、および、相手に特殊な動作を引き起こす特殊キー(たとえばプログラムを止めるためのキーなど)を備えています。

 プリンタは、ASCIIコードによる文字(33~126)を印字でき、32というコードはスペースとして解釈されます。行の終わりは、CRとLFの2つの制御文字の組みで判定されます。

 実際には、キーボードを押すのではなく、アプリケーション・プログラムがTelnetを扱うプログラム・モジュールの機能を呼び出すなどして操作します。プリンタも、プログラムがメモリー中の値を読むことで制御します。

 このNVTは基本的に、あるときに送信できるのはどちらか一方だけで、両方のホストが同時に送信することはできません。この状態を半2重といいます。これは、できるだけプログラムを簡単にするためでもあります。

文字コード

 文字コードは、対応するキーボードを押した場合に送信され、これを相手側が解釈してプリンタに印字するなどなんらかの動作を行うことになります。つまり、文字コードにはそれぞれの意味が定義されています。NVTで扱う文字コードはNVT-ASCIIと呼ばれ、米国で標準的な文字コードの規格であるASCIIコードをベースにしたものです。基本的に、1文字を7ビットで表し、0~31までを制御文字(形としては表示されないが、なんらかの動作が行われる文字)と図形文字(数字や記号、アルファベットなどの形として表示される文字。1文字分の空白を空けるスペースも含まれる)からなっています(図5)。

図5 Telnetは、1つのTCPによる接続でコードをやりとりする。このとき使われるコードをNVT-ASCIIコードという。また、同じ接続を使って、Telnet自体の設定や文字コードではないキーを送信する機能を持つ。