来し方、行く末

思ったことを徒然なるままに記すブログです。

iPhoneのプッシュ通知のモバイルデータ通信とWiFiの関係

モバイルデータ通信時にプッシュ通知がしばらくすると遅延するというトラブルについて、幾つかわかった事があるので、忘れないように書いておきます。

モバイル回線で遅延し始めると、何故かWiFiでの接続時までおかしくなる件ですが、以下のような状況と推測しています。

モバイル回線とWiFiの両方でネットに接続している時、アップル側のサーバにはプッシュ通知用の通知アドレスとしては最初に接続した方のアドレスのみが登録されているようです。あるいは二つが登録されていて最初のアドレスを使っているのかもしれません。

サーバとデバイスはこのアドレスで、TCPセッションを張り、デバイス側からはサーバ側にだいたい15分おきくらいにキープアライブの通知を出しているようです。

サーバ側からデバイス側に、例えばメッセージなどの通知をする場合、サーバ側は定期的にデバイスからこのキープアライブが届いていれば生きていると判断し、通知します。

バイス側がグローバルアドレスであれば、そのまま通知はデバイスに届き、何の問題もありません。ここで、デバイス側がプライベートアドレスの場合、間にある、NATテーブルでアドレス、ポートが変換され、デバイスに届きますが、NAT テーブルが5分程度で破棄されていると、届かないことになります。


モバイルデータ通信時に5分くらいでプッシュ通知が届かなくなるのはこれが原因と推測しています。

さらにWiFiに接続していても、生きているモバイル回線があればそっち経由で通知されるようです。そのためWiFiにモバイルデータ通信の状態が影響しているのだと思われます。

DTI sim も使っているのですが、こちらもプライベートアドレスでデータ通信回線時は5分ほどでプッシュ通知が届かなくなります。これをWiFiに繋いでも状況は変わらないのですが、ここでデータ通信をオフにすると遅延が発生しなくなります。また、この状態で再びデータ通信をオンにしても遅延が発生しないことから、データ通信をオフにした段階で、サーバ側のデバイス向けのプッシュ通知アドレスが、WiFiのアドレスに変更されるためだと、考えられます。

ネットワーク設定のリセットや、機内モード、再起動などを行うと、割り当てられるプライベートアドレスが、変更されることがあり、その場合に正常に復帰するように見えるのでしょう。

唯一、これで説明できないのが、iijmioを使っている際、データ通信回線で遅延が発生しても、WiFiに接続すると遅延がなくなるという現象です。これも、1,2日経過すると、WiFiでも遅延するようになるのですが。

これについては単純なNATテーブルのタイムアウト時間の設定だけではなく、グローバルアドレスを共有するデバイスの数の問題でテーブル溢れを起こしている、などの複数の要因が絡んでいるように思われます。