■ 昔話
昔々のその昔?
なんですか、それ?
まぁ、ちょっと黙って聞け。
昔々のその昔。まだまだ「コンピュータ」というものが、それほど容易に手に入らなかった時代。例えばハードディスクは1バイト= 1円なんていう時代。
1バイト=1円?
ってことは、例えば20GBのハードディスクだと200億円!?
今だと20GBなんて売ってないからな。そのころは20GBなんて集積できないから、メガ単位だな。それでもウン百万円とかいう時代だ。
はわ〜。
そういう時代だから、普通のオペレータが使用するコンピュータに大量の記憶容量は持たすことができない。高すぎるからな。
さらに言えば、CPUもあまりスペックのいいものをつけることもできない。もちろん高いからだ。
今だと3GHzのCPUまでコンシューマ向けに販売されていますよね。
はわわ〜。なんかすごい時代だなぁ。
さて、そういう時代だとあまりハイスペックでないマシン、はっきりいえば大して能力のないマシンを使って業務をこなす。
ただそれではもちろん能力不足すぎるので、中央にハイスペックのマシンを置いて、それの力を借りて業務をこなすわけだ。
ハイスペックのマシンの力を借りる?
自分のロースペックのマシンの補助をしてもらうんですか?
そうだな、モニタとキーボード以外ロクなものがない状態のマシンから、中央のハイスペックマシンに接続する、という形態と言ってもいい。つまり文字通り端末だ。
端末?
そうだ。
直接接続されていない端末だ。このような端末のことを仮想端末という。
[Figure53-01:仮想端末]
へへぇ。なんていうか、一昔前のスーパーコンピューターな感じですね。
うむ。簡単な処理は周辺のコンピュータで行うが、ちょっと大きめのデータの処理や、複雑な計算はすべて中央のコンピュータに命令を送り、処理を行ってもらい結果を送ってもらうという形になる。
なるほど。
つまり、ネットワーク上の違う場所に存在するコンピュータから、そのコンピュータを操作する必要があるわけだな。
コンピュータを操作する?
え〜っと、そうなりますかね。このデータを処理しなさい、と命令を下す必要があるわけですから。
つまり、「他のコンピュータを操作する」=「他のコンピュータの資源を使う」。
これは何だ? ネット君。
資源…資源…、リソース!!
他のコンピュータのリソースを使えるってことは、リソースを共有しているということですね?
うむうむ。
リソースの共有こそがネットワークの利点だよな。
えぇ。第一回でそのように説明されました。
つまりネットワーク上の他コンピュータを操作可能にする、これがネットワークの基本中の基本ということだ。
リソースを共有することがネットワークの利点、で。
他コンピュータを操作して使うことができる。確かにそう言われればそうかも。
うむ。
つまり、このネットワーク上の他のホストから特定のホストにログインすることこそが、最も基本のネットワーキングとわかってもらえたと思う。
なるほどです。
うむ。その「他コンピュータを操作可能にする」ためのプロトコルを今回は説明しよう。
[Figure53-02:telnet]
てるねっと?
■ リモート
telnetを始める前に、わざわざ昔話をしたのはtelnetが由緒あるプロトコルだ、ということを説明したかったからだ。
由緒ある…。RFC854の日付は…1983年5月。
20年以上前ですね。
他ホストへのログインという概念自体はネットワーク初期のころからあるから20年ではすまない。
ただ、その頃のプロトコルは汎用化されていないがな。
ん〜っと。
つまり、「他ホストへのログイン」という昔からある概念を、TCP/IPで行うのがtelnet、ってことですか?
うむ。その通り。
telnetはTCP/IPプロトコルスイートの最初期から存在するプロトコルなのだよ。
「他ホストへのログイン」はネットワーキングの基本、でしたよね。
うむ。よって、telnetはHTTPやメールやその他もろもろのTCP/IPプロトコルの原型とも言えるプロトコルなのだ。
ははぁ。
さて、telnetで実現される「直接に接続されていない他ホスト」への「接続(ログイン)」のことをリモート接続という。
リモート。
もしかして、「リモコン」の「リモ」ですか?
「リモ」ってなんか変な言葉だが、「リモコン=リモートコントロール」だからその通りだ。「遠隔操作」の意味だな。
リモート接続することによって、実際は違う場所にありながらあたかも直接接続しているかのように使用することが可能になるなわけだ。
[Figure53-03:リモート接続]
リモート接続をして自分が操作する側のホストをローカルホスト、遠隔地にあって操作される側のホストをリモートホストという。
[Figure53-04:ローカルとリモート]
僕がいる側のホストで命令をして、反対側のホストを操作するんですね。
実際自分が触るのがローカルホストで、操作される側がリモートホスト、と。
うむ。一般的には、ローカルホストがクライアントアプリケーション。リモートホストがサーバアプリケーションになる。
クライアントってことは要求を出す側だから、要求をして、応答しろと命令を出すって意味になるからですか。
うむうむ。そうだ。
ははぁ。なるほどです。
■ ネットワーク仮想端末
さて、ちょっとややこしいのだが、telnetサーバとtelnetクライアントにはネットワーク仮想端末という考え方がある。
ねっとわーくかそうたんまつ?
うむ。
図で示した方がいいな。
[Figure53-05:ネットワーク仮想端末]
telnetのクライアントやサーバアプリケーションの中に、ネットワーク仮想端末がある?
そうだ。ネットワーク仮想端末はコンピュータとは別の専用の仕様を持つ端末だ。擬似的に作られたソフトウェア的な端末だな。
ネットワーク仮想端末同士はその仕様に基づいてデータ転送を行う。
はぁ。
telnetアプリケーションはネットワーク仮想端末の仕様に基づいてデータの変換を行う。
それはつまり…。
つまり?
コンピュータの仕様がどうあれ、telnetがあれば通信が可能になるということだ。
通信自体はネットワーク仮想端末の仕様に基づいて行われるからな。
コンピュータはどうあれ、telnetによって通信が可能?
なんか、レイヤ6で出てきたデータフォーマットの変換みたいですね。
うむ、レイヤ6の役割も担う端末だ。
これにより、OSやアプリケーションが異なるコンピュータ間でも通信を可能とする。
[Figure53-06:ネットワーク仮想端末・2]
ルータやネットワークプリンタのような、まったく環境もOSも異なるものが相手でも、telnetアプリケーションがインストールされているならば、操作可能になるわけだ。
ははぁ、ネットワーク仮想端末がその差異をなくしちゃうわけですね。
Javaで使われるJava仮想マシンと同じ考え方だな。
なるほど。
■ telnetの接続
さて、そのデータ転送だが。
まず知っておいて欲しいことは、telnetはCUIである、ということだ。
しーゆーあい、っていうと。
コマンドプロンプトとかのアレですよね。わかりづらくって苦手ッス。
うむ。GUIと違って知らないと使いづらいな、確かに。
とりあえず、Windowsの標準telnetクライアントの画面を見てもらおうか。
- c:\> telnet
[Figure53-07:Windws telnetクライアント]
ははぁ。なんというかシンプルな画面ですねぇ。
まぁ、CUIだからな。
これでリモートホストに接続するわけだ。通常接続にはユーザIDとパスワードが必要だ。
ふむふむ。接続してもいいユーザかどうか判断するんですね。
[Figure53-08:ユーザ認証]
telnetでのユーザIDとパスワードの送信はクリアテキストで送信される。
くりあてきすと?
うむ。暗号化されていないため、盗聴の危険性があるということだ。
ははぁ。セキュリティ面で弱いんですね。
うむ。なのでSSLなどと組み合わせた方法も考え出されている。
ともかく、ユーザIDとパスワードが一致すれば、リモート接続完了で、リモートホストにログインされる。
[Figure53-09:ログイン]
え〜っと。「Welcome to Microsoft Telnet Server.」と出てますが。
こっからどうすればいいんです?
どうするもなにも、すでにリモートホストへログインしたんだ。
この場合、リモートホスト側はWindowsだから、普通にWindowsを操作すればいい。
[Figure53-10:リモートでのWindowsの操作]
ちょっとモザイクで隠させてもらったが、このようにMS-DOSコマンドにちゃんと反応する。
ほわっ、すごい。
なんか普通にdirコマンドを実行していますよッ!!
当たり前だ。
リモート接続後は、ネットワークを使っている・いないは関係なく端末となると先ほど話しただろう。
あ〜、なるほど。
まさしく仮想的な端末になるわけですね。
このように、telnetは直接リモートホストを操作可能にするプロトコルだ。
直接操作可能…。
Windows上でDOSコマンドが入力できるってことは大半の事ができるってことですもんね。
■ telnetのデータ転送
では、telnetがどのようにデータを送っているかという話だが。
telnetはTCPを使う。ポート番号は…、以前覚えろという話をしたな?
はわっ!!
…。
ネット君?
…は、博士。
その温和な顔での握りこぶしはやめてください。
ちっ。
ともかく、ポート番号は23番をデフォルトでは使用する。もちろん変更も可能だがな。
TCPで23番、と。
うむ。
TCPなので、スリーウェイハンドシェイクから始まり、データを転送するわけだが…。
わけだが?
telnetでは入力したコマンドが1文字1文字送信される。
1文字ずつですか?
[Figure53-11:Telnetでのデータの転送]
うむ。基本的には上のように本当に1文字ずつだ。
ははぁ、なんというか面倒な形ですね。
うむ、確かにそうかもしれん。
ここで重要なのはどんな命令でも1文字ずつ送ることが出来るという点だ。
どんな命令でも送ることができる?
そうだ。
つまりtelnetの仕組みを使えば、HTTPやメールなども可能なのだよ。
?
例えば、Webサーバのポート80番にtelnetクライアントで接続する。
そこで、通常ならばブラウザが送る要求(命令)を、telnetクライアントで1文字ずつ送ることが出来るのだよ。
そうなんですか?
うむ。HTTPのところで説明するが、HTTPでは「GET」というコマンドをWebサーバに送ることによって、ページを送ってもらう。
それをtelnetクライアントで1文字1文字送るだけだ。
[Figure53-12:telnetクライアントでのWebブラウズ]
そうすると、Webサーバはブラウザからでもtelnetクライアントからでも「GET」という命令を受け取ったら、その命令に応じた応答を返す。
結果、Webページが送られてくるわけだ。
[Figure53-13:telnetクライアントでのWebブラウズ・結果]
telnetクライアントはCUIなのでグラフィカルに見ることは出来ないが、HTMLソースがちゃんと送られてくる。
ははぁ、なんかすごい。
つまり、ブラウザのHTTPや、メーラのSMTPなどは、より効率的・効果的に行うだけで、データ転送の基本はtelnetと同じなのだよ。
リモート接続して相手に要求(命令)を送るって形なんですね。
そうだ。telnetが原型と言った意味がわかるだろう?
なるほどです。
さて、telnetにはまだまだ話すことがある。
だが今回は長くなったのでこの辺にしておこう。
はい。
なんか今回はtelnetの話というよりも、データ転送の基本の話になってしまったな。
そうですね。
多くの通信は、リモート接続して相手に命令を送るってことなんですよね。
うむ、そうだ。それを忘れないよう。
了解です。
次回もtelnetだ。
いぇっさ〜。
3分間ネットワーキングでした〜♪
- 端末
- [terminal]
- 仮想端末
- [virtual terminal]
- ログイン
-
[login]
ユーザがコンピュータを操作可能(アクセス可能)な状態にすること。
通常はユーザアカウントとパスワードが必要。
ログオン[logon]とも言う。
- telnet
- RFC854で定義。
- リモート接続
-
[remote access]
リモートログイン[remote rogin]とも言う。
remoteは遠隔の、遠いの意味。
- CUI
-
[Character User Interface]
アプリケーションやOSの操作方法として、キーボードから文字を入力して操作するタイプのこと。出力(画面表示)も文字だけとなる。
UNIXやMS-DOSのCLI(Command Line Interface)がコレに当てはまる。
反概念はアイコンやウィンドウを使ったGUI(Graphical User Interface)。
- 通常接続には
-
Windows2000でtelnetを試した場合、デフォルトでは下のユーザIDとパスワード入力画面は表示されません。
NTLM認証というWindowsドメインを使った認証がデフォルトで使用されています。これをはずさないと出てきません。
- クリアテキスト
-
[clear text]
暗号化されていないそのままの文字列の意。
- SSL
-
[Secure Socket Layer]
サーバとクライアント間のデータ通信を暗号化して行うプロトコル。
- dirコマンド
-
ディレクトリ表示のコマンド。
そのディレクトリにあるフォルダ・ファイルが表示される。
- ネットワーク仮想端末
-
[Network Virtial Terminal]
NVTと略される。
- Java仮想マシン
-
[Java Virtual Machine]
Javaのソースコードをそのコンピュータにあったコードに変換するソフトウェア。
Java VMとも呼ばれ、Javaを実行するためには必要。
- ネット君の今日のポイント
-
- ネットワーク経由で他のホストに接続することをリモート接続という。
- リモート接続をする側をローカルホスト、される側をリモートホストという。
- telnetはダイレクトに他のコンピュータを操作できる。
- NVTを使うことによって、ハードウェアの差異をなくすことができる。
- telnetはTCP・ポート23番を使う。
- telnetクライアントは1文字1文字コマンドを送信する。
- 多くのアプリケーションプロトコルはリモート接続をするためのプロトコルであり、telnetが原型となっている。