素朴な疑問
- ちょっと変わったTCP/IP入門の始まり始まり
- これは、ここでもう難しいというあなたへのTCP/IPアレルギー処方せんです
- 早速「telnet」という言葉が出てきました。これは一体どんなものでしょうか?
- 「ネットワークを経由して別のコンピュータに接続する」って?
- コンピュータ同士の通信って目に見えないですよね?
- えっ、目に見えるものもあるんですか?
- 道具としてのtelnet
- 早速試してみたいんですが、何を準備すればいいんでしょうか?
- どうやって接続すればいいのでしょうか? 接続先は?
- TCP/IPをやるなら、まずはこれだけ知っておこう!
- このページは本当にTCP/IP入門なんですか?
- IPアドレスとポート番号って何ですか?
- IPアドレスは数字でしょ? それなのに通信相手を英単語で指定するのはなぜ?
- IPアドレスとポート番号とDNSと……etc. 頭の中が大混
ちょっと変わったTCP/IP入門の始まり始まり
「プロトコル解説は雲をつかむような話で実感実感がわかない」
「細かい説明もいいけど、全体との関係全体との関係がよく見えないんだよね?」
「エッセンスは一体どこ?詳細はいいからミソだけ教えて」
えっ、こんな経験がありますか? であるならば、このドリルがお手伝いします。「手ごわさライオン級のTCP/IPを、押さえて、しかって、なだめて、猫にしちゃう」。筆者は一言でいえばそんな野心を抱いています。
あるいは、解説書を読むためのガイドブックといってもいいかもしれません。「まず分かりやすさを最大限に、でも正確さも最大限に」と欲張ってみました。
TCP/IPの入門書はちょっとという方はもちろん、そうでない方もお付き合いください。
道具としてのtelnet
これは、ここでもう難しいというあなたへのTCP/IPアレルギー処方せんです
「いつも最初でくじけます」。 はい、そういう人は少なくないはず。多くのプロトコルの解説書では冒頭にデーンとIPパケットが取り上げられがちです。もちろんIPパケットが重要だからなのですが、早期挫折者(?)を数多く生み出す原因にもなっています。「分かりやすさを最大限に」とうたう本ドリルとしては、この悲劇を繰り返すわけにはいきません。そこで本ドリルでは、壁になりそうな細かい話はあえて後回しにして、リアリティのある部分から順に説明するスタイルで進めていきます。
この話を何かに例えるなら、個々の部品をずーっと勉強し続けて、最後に自動車の全体像を知るか、先に自動車の機能や乗り心地を知り、少しずつ細かい部分を勉強していき、最後に個々の部品にたどり着くかの違いです。どちらも目的は同じですが、筆者自身は後者が勉強しやすいと思っています。
理由は大きく2つあります。1つは「分かった気になれる」こと。全体像が分かれば、まずちょっと分かった気がします。少し細かい部分が分かってくると、さらに理解が深まった気がして「もっと知りたい!」と思うのが人情でしょう。これを繰り返してゆけば挫折することなく、一定レベルまで知識を得ることができます。
もう1つの理由は、自分に必要な段階で勉強を終え、一休みした後で、勉強を再開するのがたやすいことです。概要を把握して詳細化していく方法なら、ゴールにたどり着く前に勉強をやめても、そこまで勉強したことは無駄になりません。なぜなら概要とはいえ全体像が把握できているからです。逆に詳細から勉強を始めると、ある程度の期間勉強しない限り、全体像が見えてこず、せっかく勉強した詳細な情報も生かすのが難しくなります。そういった面を考えて、本ページでは、概要をまず把握して、その後に詳細化してゆく方法を取っています。
早速“telnet”という言葉が出てきました。これは一体どんなものでしょうか?
もともとtelnetは「ネットワークを経由して別のコンピュータに接続し、そのコンピュータを操作する」ためのプロトコルです。telnetを利用するためのクライアントは、普通のWindows画面での操作とはちょっと違います。絵やアイコンをダブルクリックすればOKといった操作ではなく、ユーザーがキーボードからコマンドを打ち込むなどして、コンピュータにプログラムを実行させる方法「コマンドプロンプト」のようなものと考えると分かりやすいでしょう。
telnetクライアントの操作方法はかなり古典的(原始的?)なものであるため、普段、私たちが使っているWindowsやMacなど、グラフィック表示が当たり前のコンピュータとは異なり、便利とは言い難いものです。キーボードから「コマンド」を入力し、その結果も文字で表示されます。今では、Webやメールを処理するサーバの管理を専門に行う技術者たちが、Windowsマシンからサーバマシンを管理するために一部で利用されている程度です。
ではなぜこのページで最初にtelnetを取り上げたのか? その理由は、telnetの持っている機能の中でも「ネットワークを経由して別のコンピュータに接続する」機能が、これからプロトコルの実像を解き明かすうえでとても便利だからです(図1)。
「ネットワークを経由して別のコンピュータに接続する」って?
「接続する」という言葉もクセモノですね。オフィスなどに設置されたコンピュータを見ると、最初からネットワークのケーブルがコンピュータにつながっています。これも確かに「接続」された状態です。しかし「ネットワークを経由して別のコンピュータに接続する」の「接続」は、これとはちょっと別の接続です。どう違うのでしょうか?
先の「接続」は、本当に線をつなぐ「物理的な接続」です。しかし後の「接続」は線をつなぐのではなく、「これから送りますヨ」「ここ間違ってます」「もう1回送ります」「これで終わりですよ」など、データを送るに当たっての一連のやりとりを「開始する」ことを意味します。
例えば、非常に重要な資料をFAXで送るときには、まず電話をかけて相手がいるかを確認し、その後にFAXを送信して、最後にもう1度電話でちゃんと届いたか、読めないところはないかなどを確認しますよね? それと似たようなものです。この一連のやりとりを開始すること、また場合によっては一連のやりとりそのものを「接続」というわけです(図2)。
せっかくですから、少し技術的な言葉も使って説明してみましょう。接続に相当する言葉としては「セッション」がよく使われます。「セッションを開始する」「セッションを終了する」といった言い方です。
「セッション」という言葉は、実体をとらえにくいのですが、音楽の演奏に関してこの言葉を聞いたことがある方も多いのではないでしょうか? 「セッションをする」といえば、ギタリストやキーボード奏者が集まって、お互いに協力しながらステージですてきな演奏をすることを意味します。コンピュータ同士の場合もこれとよく似ています。
情報のやりとりを素早く正確に行うため、送信者と受信者が協力しながらやりとりを繰り返している状態、これが「セッション」です。この状態を始めることを「セッションを開始する」といい、終わることを「セッションを終了する」といいます。捉えどころのない「セッション」という言葉も、こう考えると分かりやすいと思うのですが、いかがでしょうか?
コンピュータ同士の通信って目に見えないですよね?
そうですね。そのままでは見えませんが、見ようと思えば見えます。でも、見ようとしても見えないものもあります。何やら禅問答みたいになってしまったので、もう少し突っ込んで説明します。
ネットワークを行き交う内容、例えばメール本体やWebページの情報は、当然のことながら電気信号ですから、そのままでは人間の目に見えません。しかし何も見えないのではネットワークの設計、工事、保守にかかわる人が大変ですから、実際にはネットワークの電気信号をモニタする測定器やソフトウェアが市販されています。そして、こういった機器を利用すれば、なんとネットワークを行き交うメールの内容や、Webサイトの情報をそのままのぞき見ることができるのです。こういった機器は一般に「ネットワークモニタ」などと呼ばれています。
こうした機器を使ってみるとすぐ分かるのですが、ネットワーク上にはメールやWebページの内容のほかに、コンピュータ同士がやりとりする情報が流れています。このようにコンピュータ同士がやりとりする情報を、普通「メッセージ」とか「コマンド」などと呼びます。
えっ、目に見えるものもあるんですか?
「メッセージ」とか「コマンド」の中でも、インターネットでよく利用する、メール、Web、ファイル転送などでは、メッセージやコマンドが人間の言葉に近いものになっています。例えばメールを読み出す場合、読み出す側のコンピュータから、メールボックスを管理するサーバに対して“USER fukunaga”“PASS hogehoge”といったコマンドを送ります。サーバはそのコマンドを受け取って、そのユーザーが正しいユーザーであることを確認するわけです(図3)。
このときサーバは、このコマンドを送ってきた相手がコンピュータかどうかは気にしていません。ですので、もし人間が何らかの方法でサーバに接続して、手動でコマンドを打ったとしても、コマンドさえ間違っていなければ、サーバは本来すべき動作をしてくれるはずです。
実は、先に登場したtelnetを使うと、こういったことが実際に体験できます。これはtelnetが「接続」「キー入力」「結果表示」の3つの機能を持っているためです。telnetを使ってコンピュータ同士のやりとりを目に見える形で表し、自分がコンピュータになり切って応答してみることで、つかみどころのないプロトコルの勉強に大きなリアリティが加わります。これはプロトコル理解の大きな助けになります。このページで最初にtelnetを取り上げる理由はここにあります。
またこのほかに、こういった方法でコマンドや通信内容を見ることができない場合もあります。そのほとんどは「暗号化された通信」と呼ばれるタイプのものです。暗号化されている場合、映画に登場するスパイが使う暗号のように、特殊な方法で解読しないと内容を知ることができません。
例えばインターネットで銀行口座の残高照会や振り込みを行うインターネットバンキングなどのサービスでは、その通信内容がほとんどすべて暗号化されていて、たとえネットワークモニタを使ったとしても、その内容を解読することはほぼ不可能です。こういった暗号化技術が普及して、やっとインターネットで重要な情報を取り扱えるようになった、といっていいでしょう。この記事では暗号化に関しては取り扱いませんが、そういった通信が存在することは知っておく必要があります。
telnetを使ってコンピュータのやりとりを体験する
早速試してみたいんですが、何を準備すればいいんでしょうか?
最初にネットワークに接続したコンピュータを用意します。ここではWindowsマシンを使った例で説明しましょう。ちなみに、telnetクライアントをインストールしたMac、またはLinuxでも、telnetで手動接続する実験そのものは可能です。
Windowsには最初からtelnetクライアントが組み込まれているのですが、その使い勝手はあまり良くありません。ここでは別のソフトウェアを組み込んで利用することにします。telnetソフトには多くの種類がありますが、筆者のオススメは「Tera Term Pro ver. 2.3」です。このソフトはhttp://hp.vector.co.jp/authors/VA002416/で手に入ります。このページに接続して、ttermp23.zipをダウンロードしてください。
ダウンロードしたファイルをWinZipなどで解凍すると、Tera Term Proのインストールファイル一式が現れます。その中にあるsetup.exeを実行すると、インストーラが起動しますので指示に従ってインストールしてください。
インストールが完了したら、初めにTera Term Proの設定を変更しておきます。Tera Term Proをインストールしたフォルダを開き、その中からteraterm.iniを探してください。このファイルを適当なテキストエディタ、またはメモ帳で開きます。画面1はそのときの様子です。
次に、このファイルの中から、
TCPLocalEcho=off TCPCRSend=
と書かれた部分を探し出し、それを
TCPLocalEcho=on TCPCRSend=CRLF
上記のように変更したら、このファイルを保存してからテキストエディタまたはメモ帳を終了します。
ではTera Term Proを起動してみましょう。ttermpro.exeをダブルクリックすると起動画面(画面2)が表示されるはずです。これは接続先を入力する画面で、今後も頻繁にお目にかかりますが、ここではひとまず「Cancel」をクリックしてください。その前にもう2つ設定があるので、先にそれをやっておきます。
1.メニューから「Setup」→「TCP/IP」を選んだら(画面3)、「Auto window close」のチェックを外してから「OK」をクリックします。
2.メニューから「Setup」→「Window」を選び(画面4)、「Scroll buffer」の数値を100から1000に変更してから「OK」をクリックします。
この2点を設定したら、最後に「Setup」→「Save Setup」を選びます。ファイル名を入力するファイルダイアログが表示されたら、そのまま「OK」をクリックしてください。以上で準備完了です。ひとまずTera Term Proを終了させておきましょう。
どうやって接続すればいいのでしょうか? 接続先は?
まずTera Term Proを立ち上げます。最初に現れた画面の「Host」に「www.atmarkit.co.jp」と入力し、「Telnet」のチェックを外し、「TCP port#」に80と入力します(画面5)。ちなみに「Host」に入力した値は接続先サーバ名を、また「TCP port#」の80はWebサーバへの接続であることを、それぞれ指定するものです。入力したら「OK」をクリックしてください。
こうすると何も表示されていないウィンドウが開きます。何の変哲もないウィンドウですが、実はこのウィンドウがWebサーバへつながっています。そこで、以下のように入力してからリターンキーを押してみてください。なおキーを打ち間違えた場合には、最初からやり直します。
GET http://www.atmarkit.co.jp/fnetwork/accesstest/at.html
するとどうでしょうか。画面6のような表示になったでしょうか。
これはWebサーバがコマンド「GET http://www.atmarkit.co.jp/fnetwork/accesstest/at.html」を解釈して、その結果としてhttp://www.atmarkit.co.jp/fnetwork/accesstest/at.htmlのHTMLを送り返してきているのです。試しにInternet Explorerでhttp://www.atmarkit.co.jp/fnetwork/accesstest/at.htmlに接続してみると、画面7のような表示になります。HTMLをご存じの方なら、画面6のHTMLがこの表示になることは簡単に理解できますよね。
まとめると、私たちはいま、Internet Explorerが人間の見えないところでやっていること、つまりWebサーバにGETコマンドを送り該当するページのHTMLファイルを得る、という一連の通信を手動で模倣するのに成功したことになります。本来なら、コンピュータ同士で行っている通信を、telnetを使うことで人間が模倣して体験できるわけです。どうでしょうか。実体のつかみづらいプロトコルという代物であっても、これなら楽しく分かりやすく勉強してゆけると思いませんか?
TCP/IPをやるなら、まずはこれだけ知っておこう!
このページは本当にTCP/IP入門なんですか?
「これはTCP/IP入門なのにTCP/IPって言葉が出てこない。なんか変じゃない?」 そう思った方もいらっしゃるでしょうね。でもそんなに焦らないで。イヤでも今後たくさん出てきますヨ。ひとまず今回は、TCP/IPを理解しようとするときに、最低限必要な言葉について説明します。各用語とも、いずれ詳しく説明しますが、ここでは次回からの話を読み進めるのに必要な範囲にとどめ、その言葉が表す意味や使われ方を中心に触れてゆきます。
IPアドレスとポート番号って何ですか?
先に出てきたFAXの例でいうなら、IPアドレスは「会社のFAX番号」、ポート番号は「部署名」に相当します。telnetで接続したときの様子は、
「AtmarkIT商事の代表FAX(www.atmarkit.co.jp)に向けて、広報課(80番)あての『会社案内(http://www.atmarkit.co.jp/ fnetwork /accesstest/at.html)をください(GET)』という依頼と送信したら、会社案内(at.html)がFAXで返送されてきた」
ということができます(図4)。まあ実際のところ、一定以上の規模の企業なら、部署ごとにFAXぐらいあると思われますが、ここでは小規模の企業と考えることにしましょう。
まとめると、IPアドレスは、通信する相手方コンピュータを指定するための情報、そしてポート番号は、相手方が提供しているサービスのうちどのサービスを利用するかを表す番号、ということができます。
ちなみに、このサービスの種類を指定する数値(ポート番号)については、全世界的な取り決めがなされています。ですので、たとえアメリカの会社であっても、80番と指定すれば間違いなく広報課にその情報が届くようになっています。
わたしたちが普段よく使うポート番号と機能の対応を表1に示しました。Web、メール送信、メール受信、ファイル転送など、それぞれ異なるポート番号が決められていることが分かると思います。
ポート番号 | 機能 | 名称 |
---|---|---|
20 | ファイル転送(データ) | ftp-data |
21 | ファイル転送(制御) | ftp |
23 | ネットワークを経由した他コンピュータの操作 | telnet |
25 | メールの送信と転送 | smtp |
53 | コンピュータ名からIPアドレスへの変換 | domain |
80 | Webサーバへのアクセス | http |
110 | メールの読み出し | pop3 |
123 | コンピュータの時計あわせ | ntp |
443 | Webサーバへのアクセス(暗号化あり) | https |
表1 よく登場するポート番号 |
IPアドレスは数字でしょ? それなのに通信相手を英単語で指定するのはなぜ?
そのとおりIPアドレスは数字で書き表します。具体的には0?255の値を、ピリオドで区切って4つ並べたもので、例えば「211.4.250.170」といった感じになります。でもこれを人間が覚えるのは大変だと思いませんか? そこで人間が覚えやすいよう自動的に書き換えてくれる仕組みが用意されているんです。
例えば接続するWebのURLが「http://www.atmarkit.co.jp」だったとすると、このなかの「www.atmarkit.co.jp」が、対応するIPアドレス「211.4.250.170」に自動的に変換されます。そうしてこのIPアドレスを基に、そのコンピュータに接続するようになっています。つまりIPアドレスが最も基本的な相手方指定の方法であり、それを人間向けにカバーする仕組みも用意されている、ということです。実にうまい具合の仕組みです。
このように相手方コンピュータの名前をIPアドレスに変換する仕組みをDNSといいます。DNSについては、後日また詳しく説明しますが、DNSを使えば世界中のどこにあるマシンであっても、コンピュータ名からIPアドレスを知ることができます。もしDNSが利用不可能になれば、Webのアクセスはもちろん、メールの送受信もできなくなるなど、いまやインターネットで最も大切な機能の1つとなっています。
IPアドレスとポート番号とDNSと……etc. 頭の中が大混乱
もう一度、全体を整理しておきましょう。なるべくスッキリ整理できるよう、個条書きで示します。
- コンピュータそのものを指定する番号をIPアドレスと呼び、4つの数値で表す
- そのコンピュータの中のサービスを指定する番号をポート番号と呼ぶ
- IPアドレスは覚えにくいので、その代わりにコンピュータ名でも指定できる
- コンピュータ名をIPアドレスに自動的に変換する仕組みをDNSと呼ぶ
- DNSは世界中のコンピュータ名をIPアドレスに変換してくれる
こういった部分を知ると、最初に登場したtelnetでの接続の意味が、さらにスッキリと理解できます。
連載第2回『HTTP語でWebブラウザとしゃべってみよう』では、いよいよ本格的にプロトコルの説明を始めます。登場するのは、わたしたちに最も身近なプロトコル、Webアクセスに使われるHTTPです。
Copyright © ITmedia, Inc. All Rights Reserved.