言葉や仕組みは知っていても,自分の手で試したことがない技術ってありますか? もしあるなら,物づくりのスペシャリストであるプログラマとして失格です。プロのプログラマなら,ふだんの開発業務で使わない技術であっても,一度は試しておいたほうがいいでしょう。

 今回は,Telnetを使って,電子メールのプロトコルであるSMTPとPOP3を題材に,簡単な実験をしてみます。どうぞお試しください。

実験の目的

 実験の目的は,メールの送信で使われるプロトコルのSMTP(Simple Mail Transfer Protocol)と,メールの受信でよく使われるプロトコルのPOP3(Post Office Protocol version 3)が,どのように実現されているかを知ることです。これらのプロトコルが動作する様子を,実験を通して知ることで,自分でプログラミングするときや,トラブルが起きたときに,役立つ経験となることを狙います。

実験の準備

 この実験を試すために必要なものは,インターネットに接続されたWindowsパソコン一つだけです。このパソコンで,まず「Telnet」と呼ぶコマンドの起動と設定をします。Telnetは本来,サーバーを遠隔操作するためのツールです。クライアントがキー入力したテキスト形式の要求をサーバーに送信し,サーバーからの応答をテキスト形式でクライアントの画面に表示します。

 このTelnetコマンドは,ポート番号を指定することで,メール・サーバーに接続することもできます。さらに,SMTPやPOP3のプロトコルに含まれるコマンドを直接入力することも可能です。この仕組みで,プロトコルの真の姿を理解しようというわけです。

 Telnetは,Windowsに標準添付されています。Windowsのコマンドプロンプトで「telnet」と入力してEnterキーを押せば,Telnetが起動します。Telnetのデフォルトの設定では,サーバーに接続された状態になると,クライアントがキー入力した文字が画面に表示されない場合があります。この場合は,Telnet起動後に「set localecho」と入力すれば,入力した文字が表示されるようになります。

実験の方法

 ふだんメールの送受信に利用しているプロバイダーのメール・サーバーに接続して,メールを送信する実験をします。ここでは,SMTPサーバー名を「smtp.jikken.ne.jp」,POPサーバー名を「pop3.jikken.ne.jp」,ユーザー・アカウントを「myname」,パスワードを「mypassword」,メールアドレスを「myname@jikken.ne.jp」として実験手順を示します。これらは,どれも架空のものです。実験を試す場合は,皆さんの環境に合わせて以降の説明を読み替えてください。なんらかのメールソフトを起動している場合は,いったん終了させておきます。また,他人に迷惑をかけないように,自分宛にメールを送ることにします。

 はじめに,SMTPサーバーに接続して,メールを送信します。Telnetを起動し,そのプロンプトで

 open smtp.jikken.ne.jp 25

と入力すると,SMTPサーバーに接続できます。ここでは,openコマンドに続けて,サーバー名とポート番号を指定しています。ポート番号は,プロトコルを識別するための数字で,SMTPのポート番号は25です。

 無事にSMTPサーバーと接続できたら,図1に示した手順で入力して,メールを送信します。「MAIL FROM:」と「RCPT TO:」以降に,メールアドレスを指定します。「From:」と「To:」以降に,メールソフトの差出人欄と宛先欄に表示される名前を指定します。ここでは,「From:」と「To:」以降にもメールアドレスを指定しました。

図1●メール送信の実験
図1●メール送信の実験  [画像のクリックで拡大表示]

 次に,POP3サーバーに接続して,先ほど送信したメールを受信します。POP3のポート番号は110なので,Telnetのプロンプトで「open pop3.jikken.ne.jp」と入力すると,クライアントとPOP3サーバーを接続できます。無事に接続できたら,図2に示した手順で入力してメールを受信します。内容を確認したら,「q」と入力してTelnetを終了します。

図2●メール受信の実験
図2●メール受信の実験  [画像のクリックで拡大表示]

実験の結果と考察

 実際に試していただければ,図1と図2に示した手順で,メールを送受信できることを確認できるかと思います。

 続いてこの実験を考察してみます。SMTPとPOP3のプロトコルを直接キーボードから入力して,メールを送受信する手順は簡単でした。わずかな情報を与えるだけで,メールを送受信できました。それには二つの理由があります。一つは,SMTPとPOP3のプロトコルはどちらも,とてもシンプルに作られていること。もう一つは,これらのプロトコルの土台としてTCP/IPというプロトコルがあることです。

 情報を,どんな経路で,誤りなく確実に届けるかという仕組みは,TCP/IPなどのプロトコル群によって実現されています。TCP/IPでは,IPアドレスで送受信者を識別します。ところが,SMTPとPOP3では,IPアドレスを指定する必要がありません。SMTPとPOP3は,TCP/IPで接続されたクライアントとサーバーがあることを前提としたプロトコルだからです。SMTPとPOP3で取り決められているのは,メールの送受信に必要とされる情報とその順序だけです。

 ネットワークは,階層的に考えるとわかりやすいと言われます。ネットワークの階層は,プロトコルの階層であり,プロトコルスタックとも呼ばれます。TCP/IPという汎用的なプロトコルの上に,特定の用途専用のSMTPやPOP3というプロトコルが乗っているイメージです。Webページを閲覧するHTTP,ファイルを転送するFTPも,特定用途のプロトコルの一種です。オリジナルのプロトコルを取り決めて通信を行う場合も,TCP/IPの上で機能するものとすれば,難しいことではなさそうです。

 セキュリティ上の問題にも,いくつか気がついたことでしょう。メールの内容は,暗号化されていません。盗聴されたら,情報を盗まれてしまいます。送信者の名前を偽ることも,容易にできてしまいそうです。

矢沢 久雄(やざわ ひさお)
グレープシティ
アドバイザリースタッフ