シロヤギもクロヤギもいい加減にしろよ手紙を届けるのがどんだけ大変か分かってんのかよ
さすがにそろそろテックネタも書かないと何がしたいのか分からないブログになってしまうので、メールの仕組みについてまとめていこうと思います。
まず概要ですが、基本的に現実の手紙の配達の仕組みを模倣していますので、そことリンクさせるとすんなり理解できるかと思います。
一点少しだけ違うのは、郵便受けという概念がなく、配達されるのは郵便局の各々の私書箱である点ですね。これも後述します。
手紙を書くときのことを思い出してみましょう。
(1)自分が手紙を書きます
(2)ポストへ投函します
(3)投函されたものは地元の郵便局へ集められます
(4)地元の郵便局から、宛先の地域の郵便局へ配達されます
(5)そこで私書箱へ割り振られます
(6)相手が取りにきます
一般的には大体こういう流れだと思います。
メールもやってることは大体同じなので、ここでそれぞれメールでのプロセスと照らし合わせて行きたいと思います。
- (1)自分が手紙を書きます
- これは、MUAと呼ばれる自分のメールクライアント(Outlookなど)での作業ですね。頑張って書いてください。
- (2)ポストへ投函
- 送信ボタンを押すことで、ポストへの投函になります。
- (3)地元の郵便局へ集められます
- ここでいう郵便局がSMTPサーバと呼ばれるものです。送信されたメールは、一旦地元のSMTPサーバへ集約されます。
- (4)郵便局から、宛先の地域の郵便局へ配達されます
- ここではMTAと呼ばれるミドルウェアが宛先のメールアドレスを見て、宛先のSMTPサーバを探してメールをガンガン飛ばします。
- (5)そこで私書箱へ割り振られます
- 宛先SMTPサーバへ届くとMDAによって私書箱に振り分けられ、そこでメールチェックされるまで留まります。
- (6)相手が取りにきます
- 相手がPCをネットワークに繋ぎ、POPやIMAPというプロトコルを使って私書箱からメールを受け取ると無事完了です。
ネットワークが全部ちゃんと繋がっていれば、(2)投函してから(5)私書箱への割り振りまでは一瞬で行われます。
さーそろそろ私みたいな似非エンジニアは
SMTPってなんだっけ?MTA??MDA???的なつまずきをしてるかと思います。
簡単に説明します。
- SMTP(Simple Mail Transfer Protocol)
- メールを送信したり、来たメールを受信するときのプロトコルです。実際の手紙でも様々なルールがあり、宛先がちゃんと書いてなかったりとか、切手が貼ってなかったりとか、そもそも手紙じゃないもの(猫とか)は送れなかったりしますよね。それと同じようにメールにも決まりごとがあり、それに則っていないとメールを送ることはできません。
- SMTPサーバ
- SMTPを使ってメールを送信したり、他のSMTPサーバから送信されたメールを受信するサーバです。受信して送信することができるので、中継(リレー)する役割を担ったりもするんですが、それはおいおいまとめて行きたいと思います。
なぜ私書箱方式なのか?
SMTPは送信も受信もできますので、宛先郵便局から個々の宛先(郵便受け)へ配達することももちろん可能ですが、配信先のPCがネットワークに繋がっていないとエラーになってしまいます。
ちょうどメールが飛んできたタイミングでネットワークに繋がっていないとメールを受信し損ねる、なんてナンセンスなので、一旦宛先サーバに留めておいて、良いときに各々が見に来る仕組みになっています。
なので家の郵便受けに届くというよりは、郵便局の私書箱に配送されるイメージなのです。
その時使われるのがPOPとかIMAPと呼ばれるプロトコルで、
SMTPが「これ来てますよ」「お、あざ〜っす!」っていうやりとりなのに対して
POPとかIMAPは「さ〜せん、何か来てますか?」「あ、これ来てるよ」っていうやりとりになります。
最後に
今日はとりあえずこの辺で。
本当は(1)手紙を書いて(2)ポストに投函する間に、「手紙を封筒に入れる」っていう作業があったり、(4)で郵便局を経由する際に消印が押されたりっていうプロセスがあるんですが、その辺はちょっとだけ複雑で奥深い話になるので、今回は割愛します。
エンジニアであってもなんとなくブラックボックスになっている人も多い、メールの仕組みの精神的なハードルが下げられるように、馴染みのある手紙の大まかなプロセスがリンクできればいいと思います。