電子メールに使われるプロトコル
2018-6-19

2-1 SMTP

さっそく電子メールを送信する際のパケットのやり取りを見てみよう。
実際にメーラであるOutlookで電子メールを作成し、電子メールを送信する。
図2のパケットキャプチャ画面を見てみる。
IPアドレス、192.168.0.102は、PC(クライアント)、202.228.236.215は、あらかじめ メーラ(Outlook)に設定しておいたメールサーバである。

図2 メール送信時のパケット
◆パケット1  192.168.0.102(クライアント)→202.228.236.215(メールサーバ) コネクション確立要求(SYN)
◆パケット2  202.228.236.215(メールサーバ)→192.168.0.102(クライアント) コネクション確立要求、応答(SYN、ACK)
◆パケット3  192.168.0.102(クライアント)→202.228.236.215(メールサーバ) コネクション確立応答(ACK)

この3つのパケットで、クライアント(ポート番号:1119)とメールサーバ(ポート番号:25、SMTP)間の TCPのコネクションを確立している(3way handshake)。
そして、次のパケット4からデータのやり取りをしている。

HTTP同様、SMTPもデータの中身や意味にかかわらず、「クライアント」から「サーバ」に向かうデータを   「コマンド」と呼び、「サーバ」から「クライアント」に向かうデータを「レスポンス」または「応答メッセージ」と呼ぶ。
またデータはASCII文字列となっており、1つのデータには、複数の制御情報が含まれている。
制御情報は「CR(改行)」(16進数で“0D”)、「LF(行の先頭に復帰)」(16進数で“0A”)で区切られている。 いわゆる[Enter]キーに相当する。


2-2 レスポンス

◆パケット4  202.228.236.215(メールサーバ)→192.168.0.102(クライアント)

パケットを詳しく見てみよう。

データ部があり、メールサーバからクライアントに向かっているので「レスポンス」である。
SMTPは、いきなりレスポンスから始まるのである。  

220 sv.arkweb.co.jp ESMTP Sendmail 8.11.6/3.7W/POP-auth(00031322); Tue, 18 Nov 2008 07:53:50 +0900..  

ステータスラインは、動作の結果を3桁の数値で示すステータスコードとレスポンスフレーズが記載されている。
[ステータスコード] 220 意味:メールサービス開始
[レスポンスフレーズ] sv.arkweb.co.jp ESMTP Sendmail 8.11.6/3.7W/POP-auth(00031322); Tue, 18 Nov 2008 07:53:50 +0900  

パケット4の最後は“0D0A”で終わっている。0060  30 0D 0A

図3 パケット4の詳細


2-3 コマンド

◆パケット5  192.168.0.102(クライアント)→202.228.236.215(メールサーバ)

パケットを詳しく見てみよう。

HELO Letsnote3
[コマンド] HELO 意味:メール送信開始要求
クライアントはテキストコマンド(パケット5では“HELO”)を用いてメールサーバに要求を出す。
パケット5の最後も“0D0A”で終わっていることに着目しよう。
0040  6F 74 65 33 0D 0A

図4 パケット5の詳細


2-4 SMTPデータ の やりとり

パケット4以降のパケットのデータのやりとりを見てみよう。
メールサーバとクライアント(メーラ)の会話の様子がよくわかる。

表1 パケット4から14までのやりとり

パケット8と10で電子メールの送信者、受信者をメールサーバに通知している。
この場合、送信者<test@arkweb.co.jp>から受信者<test@arkweb.co.jp>に送ろうとしている ことがわかる。すなわち同じメール相手に送っている。
パケット12で、DATAコマンドで、「これから電子メールの本文を送ります」とメールサーバに通知している。
パケット13で、メールサーバから[ステータスコード]354で、電子メールデータ入力開始。 これで、電子メールデータ入力モードに切り替わる。
1つの制御情報の区切りコードである“0D0A”と、電子メール本文中の[Enter]すなわち改行(CR)復帰(LF)16進数で“ 0D0A”とを区別するため、電子メールデータ入力モード中は、“0D0A”を制御情報の区切りとしない。
電子メールデータ入力モード中に限り、ピリオド“.”16進数で“2E”だけの行、すなわち 改行(CR)復帰(LF) “.” 改行(CR)復帰(LF)、16進数で“0D0A2E0D0A”を 制御情報の区切りコードとして判断し、電子メールデータ入力モードを解除する。
パケット14は、実際の電子メールの本文となる。
パケット14の最終が16進数で“0D0A2E0D0A”となっているので、ここで電子メールデータ入力モードが終了となる。

コラム: 嘆きの“ドット・エンター”の時代

ワークステーション時代、電子メールの仕組み(SMTP)は既にあり、コミュニケーションの手段として 活用されていたものの、メーラという便利なものはなく、すべてワークステーションの画面から コマンドを手で打ちこんでいた。
メール本文を書き終わり、“ドット・エンター”と押した瞬間、電子メールは相手方に届いてしまう。
特に焦っている時など、メール本文を読み返すことなく“ドット・エン ター”と押してしまい、何度後悔したことか…。


2-5 POP3

次は、電子メールを受信する際のパケットのやり取りを見てみよう。
前述、SMTPで送信した電子メールは、送信者・受信者が同じなのでメール送信直後すぐに受信している。
パケットキャプチャ画面を見てみよう(図5)。

IPアドレス、192.168.0.102は、PC(クライアント)、202.228.236.215は、あらかじめ
メーラ(Outlook)に設定しておいたメールサーバである。

図5 メール受信時のパケット
◆パケット25  192.168.0.102(クライアント)→202.228.236.215(メールサーバ) コネクション確立要求(SYN)
◆パケット26  202.228.236.215(メールサーバ)→192.168.0.102(クライアント) コネクション確立要求、応答(SYN、ACK)
◆パケット27  192.168.0.102(クライアント)→202.228.236.215(メールサーバ) コネクション確立応答(ACK)

この3つのパケットで、クライアント(ポート番号:1121)とメールサーバ(ポート番号:110、POP3)間の TCPのコネクションを確立している(3way handshake)。
さっそく、次のパケット28からデータのやり取りをしている。

POP3は、メールサーバのメールボックスから電子メールを取り出すときに使用するプロトコルである。
SMTPと同様にデータの中身や意味にかかわらず、「クライアント」から「サーバ」に向かうデータを「コマンド」とよび、 「サーバ」から「クライアント」に向かうデータを「レスポンス」または「応答メッセージ」と呼ぶ。
またデータはASCII文字列となっており、1つのデータには、複数の制御情報が含まれている。
制御情報は「CR(改行)」(16進数で"0D")、「LF(行の先頭に復帰)」(16進数で"0A")で区切られている。 いわゆる[Enter]キーに相当する。  

POP3のレスポンスのステータスコードは、"+OK"正常応答と"-ERR"異常(エラー)応答の2種類しかない。

表2 パケット28から47までのやりとり

パケット29と32で、クライアント(メーラ)はメールサーバに、ユーザ名(アカウント)とパスワードを送信している。
メールサーバにはユーザのメールアカウントごとにメールボックスが用意されている。
他人が自分のメールボックスを勝手に見られないよう、POP3にはユーザ名とパスワードによる認証機能があるが、 特にパケット32は、パスワードを平文 (暗号化されていない文)で送信しているため、通信途中で盗聴される可能性もある。
そのため、認証情報を暗号化するAPOP(Authenticated Post Office Protocol)というプロトコルが用意されている。 ここではあくまでも暗号化されるのは認証情報だけで、電子メール本文自体は暗号化されない。別途手段が必要となる。
パケット36で、クライアント(メーラ)はLISTコマンドを送信し、パケット37でメールサーバから“+OK”正常応答が返信される。
ここで一覧表モードに切り替わり、メールサーバのメールボックスにあるメールの一覧表が送信されてくる。

パケット39のデータ部には“1926”となっている。
意味としてはメールの通番、そのメールの大きさ(バイト) である。
一覧表モードの解除は、電子メールデータ入力モード解除と同様、ピリオド“.”16進数で ”2E”だけの行を 制御情報の区切りコードとして判断し、電子メール一覧表モードを解除する。
パケット39のデータ部の最後を見てみると16進数で“0D0A2E0D0A”となっている(図6参照)。
パケット40で、クライアント(メーラ)はRETRコマンドを送信している。
指定した番号の電子メールの受信要求している。
パケット41でメールサーバから“+OK”正常応答が返信される。
ここでメール受信モードに切り替わり、メールサーバのメールボックスにある指定された番号の 電子メールの本文が送信されてくる。
パケット43でメール本文が送られている。
この時点ではメールサーバからこの電子メールは消去されていない。
パケット44で電子メールの消去要求を送信し、パケット46で通信終了要求を送信している。

図6 パケット39の詳細
コラム: “SMTP”だけでも電子メールは送ることができる!

元々電子メールで用いられるプロトコルは メールを転送するSMTPだけだったが、後に POPやIMAPなどのプロトコルが誕生する。
これにはパソコン普及までの歴史がある。と、いうのも、現在のパソコンが普及するまでは、ネットワークへの 接続は、ワークステーション(UNIXマシン)が主流だった。
ワークステーションはそれ自体がメールサーバ機能を持っているので、相手のメールサーバが電子メールの終点。
また、ファイルサーバなどメールサーバ以外のサーバ機能ももっていて、通常は、24時間電源を入れっぱなし状態で 使用されていた。
そのため、24時間いつでも電子メールを受信することが可能だった。
その後、パソコンが普及し始めた。そうなるとパソコンにメールサーバ機能を持たせればいいのだが、 「パソコンの一般的な使われ方として、必要なときだけ電源を入れる」、「パソコンは、アドレス変換で プライベートアドレスを用いることが多い」などの理由で、電子メールがパソコンまで届かなくなってしまった。
そこで、電子メールはメールサーバに蓄積しておいて、利用者がパソコンを介して必要なときに メールを取り出すことができるプロトコルが必要になったというわけだ。


2-7 履歴

パケット14は、“メール送信”の電子メールの本文であり、パケット43は、“メール受信”の電子メールの本文である。
送信者と受信者が同じで、送信した電子メールをを即座に受信しているのでメール本文の内容は同じはずである。
それでは、パケット14とパケット43を比較してみよう。

図7 パケット14とパケット43の比較
図8 メールヘッダの確認画面 

パケット14に比べてパケット43のメール本文の先頭部、メールヘッダといわれている部分 に 「Return-Path:」や「Received: from」などのフィールドが付加されている。
「Received: from」フィールドは、途中通過したメールサーバの情報である。
(OutlookExpressの場合、電子メールを開いて「表示」→「オプション」で メールヘッダを見ることができる。)

「Received: from」フィールドの数だけメールサーバを通過したことになる。
この情報は、順次メールヘッダの先頭部に付加されるので、上にあるほど受信者に近く、下にあるほど 送信者に近いメールサーバとなる。
迷惑メールの多くは、送信者の操作で送信元メールアドレスを偽っている。
しかし、電子メールが送信者の手元を離れてしまうと、送信者はメールサーバの情報 を偽ることはできない。
迷惑メールの発信元を探る場合、複数の「Received: from」フィールドがあれば、一番下の「Received: from」フィールドが 有力な情報となる。

コラム: SPAMメールと迷惑メール

迷惑メールのことを“SPAM(スパム)メール”とも呼ぶだろう。SPAMメールの語源は諸説あるが、有力説は アメリカHormel Foods社の豚肉の缶詰「SPAM」からだといわれている。
イギリスのコメディ番組「空飛ぶモンティ・パイソン」の「SPAMの多いレストラン」というお話し。
ある夫婦がレストランに入り、メニューを見ると、「SPAMサンド」「SPAMと※※」のようにすべてSPAMがついていたという。
壁にもSPAM SPAM SPAM…の文字、店員からもSPAM SPAM SPAM・・・と連呼され、ついにSPAMを注文してしまうコントに由来するそう。
 Hormel Foods社は、迷惑なメールのことを自社製品である「SPAM」と使用するなと提訴するが、逆に 知名度が広がり、売れ行きが上がったそうで、そのうち日本でも輸入販売されるようになった。
その後Hormel Foods社は、提訴を取り下げたという話しだ。