SPモードメールの仕組み(妄想)
いろんな記事を読んでの個人的憶測をまとめておく。
ただしまだドコモのソースは読んでない。今度読む。ソース確認しないで、あーでもねーこーでもねーというエントリー。
こっから妄想
例えば次のような流れ?
なんでこんな面倒なことまでしてIPアドレスとの紐付けを行うのか?
- たぶん、プッシュメール送信をIPレイヤで実現しようとしているからか?
- POPだけによるメールリアルタイム取得するには、端末側がPOPサーバーを常に監視、ポーリングするしかない。でもこれでは、オーバーヘッドが大きい。端末も大変だし、POPサーバーも悲鳴をあげる。
- そこで、サーバーにメールが届いたら、そのメールアカウントに紐付いたIPアドレスにパケットを飛ばすようにしたと。このパケットを端末が受信したら、POPでメールを取得しにいくと。
- まさにIPレイヤでのメールプッシュ配信。
妄想は以上。
でもなんか無駄があるかもな。
IPアドレス割り振るたびにメールアカウントの設定を端末がする必要あるのか?
聞いた話では、おかしな状態になると、本来のメールアカウントとは異なるメールアカウントが端末に設定されるのだそうな。
その端末のSIMの入れ換え、電話番号が変わったタイミングで、最初に一度メールアカウント設定すればいいのになぁ。
もしくはそんな無駄なことはしてなくて、端末のメールアカウント設定は変わらず、ただ単純にSPモードサーバーが混乱したってこと?
そうだと仮定すると、SPモードサーバーでのIPアドレスとメールアカウントの紐付け誤り で、SPモードサーバーからのプッシュパケットが本来の端末とは別の端末に誤って届く、ということになる。
でも結局端末に設定されているメールアカウント設定が正しければ、そんな問題が発生したとしても、誤ってプッシュパケットを受け取った端末は、無駄にPOP見に行って終わりだし、本来届くべき端末にはリアルタイムには届かないってだけの話で、全く別のメールアカウントで送受信するなんて致命的なことには陥らないはず。
つまり
- なんで、IPアドレス払い出すタイミングで端末側のメールアカウント設定までするのか。
- 端末のメールアカウント設定はSIM交換のタイミングでやればいいのではないか。
- そうすれば、仮にSPモードサーバーのメールアカウント紐付けミスがあったとしても、大きな問題にはならないんじゃないか。
とか思った。
SIMの抜き指しのタイミングって、アプリからわからないのかな?電話番号変わるんだしそののタイミングでオンラインサインアップすればいいのに。ウィルコム方式ね。
うーでもなんか俺勘違いしてるような気がする。妄想に妄想を重ねてるから、今度ソース当たってみる。
【追記】妄想じゃないほう
@TakagiHiromitsu先生のツイートの中に、妄想じゃないほうのSPモードメールの仕組みの資料のURLがリツイートされてました。
http://www.nttdocomo.co.jp/binary/pdf/corporate/technology/rd/technical_journal/bn/vol18_3/vol18_3_045jp.pdf
なるほどー。
やはり妄想とソースは違うな。
ここからまた妄想
基本的に「端末側の設定を信用しない」というポリシーに立ってメールアカウントの設定を行っているような印象。
root化された端末のクラックが頻繁に行われるAndroidの脅威のようなものを感じながらシステム設計したよう。
だから、
- 期限到来→再度メールアカウント情報設定
- IPアドレス変更のタイミング→再度メールアカウント情報設定
とかしてるのかな?
そうなると図の「認証サーバー」:随時メールアカウント情報を払い出すサーバーの役割はとんでもなく重要だなぁ。
【追記その2】SPモードメールで払い出されるメールアカウント情報
ツイート追いかけただけですが、どうも、IPアドレスが払い出されるときに、一緒に払い出されるメールアカウント情報って、IPアドレスから生成されたハッシュ値みたいなもんらしいですね。
無線APからSPモードメールにアクセスしたログを解析された方がいらっしゃったようで、中身を見ると、無線APからSPモードメールの認証にこのハッシュ値みたいなもの(セッションIDみたいなやつ)とIPアドレスを使うと。
でそこから、POPサーバーにアクセスするんだけど、ID/PWなしでいきなりアクセスするようなかんじだったなぁ。
このハッシュ値でユーザーは特定できるから、ID/PWなしのPOPアクセスしても問題ない、って理屈だな。
今回の問題では、払い出されたハッシュ値みたいなものが、サーバー側で誤って別のユーザーひもづけてしまったということか。
こりゃまずいな。
払い出したセッションIDと他人を誤ってひもづけてしちゃったときの対策がないのか。エラー時の対策が必要だなぁ。