3 Minutes NetWorking
No.54

3Minutes NetWorking

第54回telnet(2) データ転送と制御文字

■ telnetの基本

インター博士

前回に引き続き、今回もtelnetの話だ。

ネット助手

はい。
リモート接続して相手を操作するためのプロトコルですよね。

インター博士

うむ。
仮想端末となるためのプロトコルだ。

ネット助手

でした。

インター博士

くどいようだが、telnetは多くのプロトコルの原型ともなった、最も古いTCP/IPアプリケーション・プロトコルだ。
その特徴は、何も足さないことにある。

ネット助手

何も足さない?
なんかウィスキーのCMみたいですね。

インター博士

ウィスキーはシングルモルトが好みだな。
ともかく、例えば「d」という文字を送信したい場合は、以下のようなパケットを送ることになる。

telnetデータ

[Figure53-01:telnetデータ]

ネット助手

L2ヘッダって、レイヤ2ですからイーサネットの場合イーサネットヘッダですよね。
あとはIPヘッダとTCPヘッダと…。

インター博士

「d」という文字、そのものだ。
もちろん、ビットで送るから「d」というビット列ということになる。

ネット助手

ははぁ。
「d」という文字以外何も送らないから、何も足さないってことですね。

インター博士

そういうことだ。ちなみにtelnetではASCIIを使う
普通、他のプロトコルは必ず送りたいデータ以外に制御用のヘッダをつけることが多い。

ネット助手

TCPヘッダやIPヘッダのようにですか?

インター博士

そうだ。
軽いと言われるDNSでさえ、以下のようなヘッダをDNS要求や応答には必ずつける。

DNSヘッダ

[Figure53-02:DNSヘッダ]

インター博士

一列32ビットなので、32 × 3 で 96ビット(12バイト)は必要なわけだ。

ネット助手

でも、telnetは何もつけない、本当にそのまま送りたいデータを送るってことですね。

インター博士

そういうことだ。
前回使ったムービーだが、こういう動きをするということだな。

[Figure53-11:Telnetでのデータの転送]

ネット助手

なるほど。

■ 1文字づつ送るということ

インター博士

telnetは1文字づつ送るのだが。
1文字づつ送るといろいろと困ったことが起きる。

ネット助手

困った事?

インター博士

例えば、ネット君が使うと、必ずコマンドをスペルミスするとかだ。

ネット助手

うわ、いきなり名指しで決め付けられてる。
必ずって博士。

インター博士

必ずだ。
春の次には夏が、夏の次には秋がくるように。大自然の理だ。

ネット助手

だいしぜんのことわり、とか言われても。
で、スペルミスが困ったことなんですか? いやまぁ、確かに困ったことですけど。

インター博士

うむ、つまりスペルミスをするということは。
1文字づつ送るのだから、間違ったスペルも送ってしまう、ということだ。

[Figure53-03:スペルミスをした場合]

ネット助手

あ〜、そういえばそうですよね。
でも、それなら間違った部分を消して、打ち直せばいいじゃないですか。

インター博士

ふむ、つまりこういうことか?

[Figure53-04:スペルミスをした場合・2]

ネット助手

あれ?

インター博士

「dier」とは聞いた事のないコマンドだな。
さて、何が原因だ?

ネット助手

何がって。
消したことをリモートにも伝えないといけないってことですか?

インター博士

うむ、いいぞネット君。
その通り、文字を消すためにバックスペースを押したならば、バックスペースを押したことを伝えなければならない。

ネット助手

なるほど。そう言われればそうですね。

インター博士

うむ。なのでtelnetではいくつかの制御機能標準NVT文字が使われる。

ネット助手

制御機能と標準NVT文字?

■ 標準NVT文字

インター博士

まず、標準NVT文字から話そう。
キーボードには文字・数字・記号以外のキーが存在するな。

ネット助手

えぇ、Backspaceとか、TABとかSHIFTとか。

インター博士

うむ。これらのキーを押したことをリモート側に伝えなければならない

ネット助手

あ、はい。さっきの話ですよね。

インター博士

ASCIIには、通常の95文字・数字・記号以外にも他の制御文字が用意されている。
ASCIIコード表を見てくれると嬉しい。 ▼ link

ネット助手

ははぁ。e-Wordsのコード表ですと、赤い文字のやつですか。

インター博士

そうだ。特にtelnetでは8つの制御文字が使えるようになっている。

文字10進コード16進コード意味
NUL00x00ヌル文字
BEL70x07Bell文字
BS80x08バックスペース文字
HT90x09水平タブ
LF100x0A改行
VT110x0B垂直タブ
FF120x0Cフォームフィード
CR130x0D復帰

[Table53-01:制御文字]

インター博士

まぁ、実際使われないものもあるが。これらの文字が仮想端末用に用意されているということだ。

ネット助手

ははぁ。
改行とかタブとかしたい場合は、ASCIIコードがもとから持っている制御文字を送ればいいってことですね。

インター博士

うむ、その通り。
覚えておいて欲しいのは、改行だな。

ネット助手

改行? 「LF」ですよね。

インター博士

うむ、ややこしいのだが。
これはOSによって扱いが違うのだよ。

ネット助手

というと?

インター博士

UNIXでは「LF」、MacOSでは「CR」が使われる。
Windowsでは「LF」と「CR」を両方使うと改行になる。

ネット助手


なんでそんなややこしいことに。大体「CR」の「復帰」ってどういう意味ですか?

インター博士

うむ。「CR」は「行頭復帰」、つまり「行の先頭へカーソルを移動」という意味なのだ。なのでMacOSではこれで改行される。
だが、Windowsだと「LF」は「カーソル位置は変わらす改行」、「CR」は「行は変わらず先頭へ」という意味になる。

LFとCR

[Figure53-05:LFとCR]

インター博士

なので、「LF」+「CR」で改行となる。
これは改行キーを押したらどの文字を送るかということをtelnetクライアントを使うときに必ず設定する必要がある。

ネット助手

UNIXなら「LF」、Macなら「CR」、Windowsなら「LF+CR」…。

インター博士

まぁ、多くの場合は「LF + CR」に設定しておけば問題ないといえば問題ない。

ネット助手

なんだ、そうなんですか。

■ 制御機能

インター博士

他にもtelnetはいくつかの制御機能を持っている。
ほとんどのtelnetクライアントが持つ主要な機能は以下の通り。

制御意味役割
AYT[Are You There] 相手確認相手が動作しているかどうか確認する
EC[Erase Character] 文字消去最後の文字を消去する
EL[Erase Line] 行消去最後の行をすべて消去する
IP[Interrupt Process] プロセス中断操作の一時中断・割り込み・停止
AO[Abort Output] 出力中止出力を抑止する
Synch[Data Mark] データマークデータ削除・リセット

[Table53-02:制御機能]

インター博士

EC、ELはそのままの意味だ。

[Figure53-06:EC・EL]

インター博士

これらの制御機能は、ASCIIにないのでtelnetコマンドとして送る

ネット助手

コマンド?
先ほどのNVT標準文字は、ASCIIコードにあったからそれを使えばよかったわけですよね。コマンドってのはどうやって送るんです?

インター博士

それは次回の話だな。オプションとコマンドの話を次回はする。
ともかく、制御コマンドを送ることによって、いくつかの制御機能を実現している、ということだ。

ネット助手

ははぁ。次回ですね。

インター博士

うむ。
さてEC、EL以外は説明が必要だろう。まずAYT。

ネット助手

Are You There?
そこであなたです?

インター博士

ナイスな訳だ、ネット君。「あなたはそこにいますか?」だろう、普通。
送られてきたAYTを受け取ったホストは音声か視覚情報を返す

ネット助手

AYTを受け取ったら、音声か視覚情報を返す?
……なんか、pingのEchoみたいですね。

インター博士

というか、pingのEchoそのものだな。
相手がダウンしていないかどうか確認するために使うものだ。

ネット助手

う〜、ますますpingだ。

インター博士

例えば、telnetクライアントでメジャーなフリーソフト「Tera Term Pro」の場合、以下のようにAYTを送ることができる。 ▼ link

AYT

[Figure53-07:AYT]

インター博士

AYTを送ると、telnetサーバは自分の存在を通知する。

AYTに対する返答

[Figure53-08:AYT]

ネット助手

「Are You There?」「Yes」
ははぁ、なるほど。「そこにいますか?」「はい」で相手の存在を確認したわけですね。

インター博士

そういうことだ。相手がいきなりダウンしても、反応が返ってこないだけで本当にダウンしているのかどうかtelnetではわかりづらいから、AYTを使うのだ。

ネット助手

ふむふむ。

インター博士

次はAOとIP、Synchだ。
AOは「出力抑制」。IPは「割り込み」。つまり何かしらの不具合などが起きたときに、結果を出力させないようにしたり、割り込んだりするわけだが、これには問題がある。

ネット助手

問題?

インター博士

うむ。それはTelnetがTCPで動いているから起こる問題だ。

ネット助手

…TCPだから問題?
TCPって、優等生じゃないんですか?

インター博士

ネット君もそれにこだわるな。
ともかく、こういう場合だ。

[Figure53-09:TCPによるIPの問題点]

ネット助手

あ〜、TCPフロー制御。
いったんバッファに溜められて、そこからシーケンス順に処理、でしたっけ。

インター博士

うむ。順番に、正確に処理を行う方式としてTCPはフロー制御を行うのだが、こういう場合はそれがアダになる。

ネット助手

そうですね、ちっとも割り込んでませんものね。

インター博士

うむ、この問題を解決するために使うのが、Synch。Data Markだ。

[Figure53-10:Synch]

ネット助手

TCP緊急ビット

インター博士

うむ。TCP緊急ビットがONのセグメントは他を差し置いて処理される。それを使って、割り込んだり、出力させないようにするわけだ。

ネット助手

ははぁ、なるほどです。

インター博士

Synchは送信側・受信側双方とも現在バッファ中のデータを破棄する。
Synchは[synchronous]で「同期」という意味だから、双方ともリセットしてまたやり直しましょう、という意味があるとでも考えてくれたまえ。

ネット助手

同期、ですか?
データを破棄して、双方ともやり直し、と。

インター博士

うむ。

ネット助手

なんとなく、納得です。

インター博士

つまり、だ。telnetでは文字を1つ1つ送るのだが、それ以外の制御用の文字も送ることができる、ということだな。それを使ってローカルで使用可能な制御を実現するのだ。

ネット助手

ローカルで使用可能な制御を実現する…。
文字を消したり、割り込んだり、強制終了したりするってことですね。

インター博士

うむ、リモートホストにそれを伝えることがちゃんとできる、ということだな。

ネット助手

ふむふむ。了解です。

インター博士

さて、telnetのコマンドとオプションについて話さなければならないが。
長くなったのでまた次回。

ネット助手

いぇっさ〜。
3分間ネットワーキングでした〜♪

ASCII
[American Standard Code for Information Interchange]
情報交換用米国標準符号。US-ASCIIとも言う。
7ビット+パリティ1ビットの8ビットで使用され、95種類の文字がある。
制御文字
通常のASCIIで使われる文字は、32〜126のコード(10進)ですが、制御文字は0〜31で定義されています。
仮想端末用
仮想端末[Network Virtual Terminal]なので、NVT。
つまり、NVT文字、ということです。
16進コード
16進数を表記するには先頭に「0x」をつけます。
ネット助手ネット君の今日のポイント
  • telnetはヘッダをつけずに1文字づつ送信する。
  • telnetはASCIIを使う。
    • ASCIIで定義されている制御文字(NVT文字)も使うことができる。
  • ASCIIで定義されていない制御も可能である。
  • telnetコマンドを使って、ローカルで使用可能な機能をリモートに実現する。

3 Minutes NetWorking No.54

管理人:aji-ssz(at)selene.is.dream.jp