iPhone 5 の Wi-Fi 通信が頻繁に切れる(調査編)

HARDWARE REPORT


iPhone 5 の Wi-Fi 通信が頻繁に切断される

iPhone 5 を発売日に購入して、そのときから App Store への接続がやけに遅いというか失敗することが多いなとは思っていたのですけど、どうやら iPhone 5 の Wi-Fi 接続が頻繁に切断されている可能性が出てきました。

最初の App Store の遅さは単に iPhone 5 が発売された直後だからだろうと思って、そのままそれが当たり前になっていたのですけど、今でも接続に失敗することが多くて、よく考えたらぜんぜん普通じゃなさそうですね。

 

そもそも Wi-Fi が頻繁に切れるのに気付いたきっかけは、事務所で自宅の電話を受けるのに使っていた自作アプリ EZ-NET IP Phone がどうも最近、音が切れて通話できなくなることが多いと思うことがあって調べていたのが始まりです。

たしか iPhone 5 に機種変更した後でも使えていたので、ルーターか通信の調子が悪いからかと思ってネットワーク周りを調べていたのですけど、探ってみてもどうも原因が掴めなかったのでした。

 

調子の方も良い日と悪い日とがあって、いつからおかしいとかも判断が難しいところでしたが、調査を重ねてようやく原因がつかめてきました。

原因や回避方法については iPhone 5 の Wi-Fi 通信が頻繁に切れる(対処編) の方で記すとして、ここではその経緯から、回避方法に至るまでに調べていたことについて、記してみたいと思います。

 

iPhone 5 のネットワーク通信エラーをよく見る気がする

通信速度の計測で見慣れないエラー

iPhone 5 に機種変更してからというもの、ネットワーク周りの調子がおかしい(重たい)と感じたり、ネットワークに接続できなかったことを知らせメッセージが表示されることが多くなりました。

最初のうちは自宅のルーターの再起動とかネットワーク環境の見直しなどをしていたのですけど、ふと思い立って Speedtest - Xtreme Labs Inc. を使ってネットワークの速度計測をしてみたところ、"Upload speed could not be tested" という見慣れないメッセージが表示されてしまいました。

メッセージには "Your connection may have been lost. Check your connection and try again" と書かれているので、どうも通信が途中で切断されてしまっているようです。

このメッセージは、Speedtest を試す中で 5 回に 4 度は出るくらい、かなり頻繁に表示されます。

ちなみにこのエラーは Wi-Fi を切って計測した時には出ない様子です。

Wi-Fi アクセスポイントは直接の原因ではなさそう

やっぱり、ネットワークまわりのトラブルであることは間違いなさそうです。

そう思って、まずは iPhone 5 を、新しい Wi-Fi アクセスポイント Apple Time Capsule ではなく、以前に使っていた Buffalo WHR-AM54G54 にして試してみたのですけど、相変わらず同じエラーが頻繁に発生します。

 

インターネットで調べてみると、Wi-Fi の暗号化設定が AES になっていると iPhone 5 で通信エラーが起こりやすくなるという情報があったので、暗号化方式を TKIP にしてみましたけど、改善される様子はありません。

 

そこで、手元にあった iPhone 4 (iOS 5.1.1) と iPhone 3GS (iOS 5.1.1) で同様のチェックをしてみたところ、これらはどちらの Wi-Fi アクセスポイントでも、iPhone 5 のようなエラーは発生しませんでした。

もうひとつ iPod touch 4th (iOS 5.1.1) もあったので試してみましたが、こちらも問題ありません。念のため iPod touch 4th の iOS を 6.0.1 にアップデートして試しても問題なしです。

iPhone 5 の ping は散々な結果に

iPhone 5 の Safari で Web サイトを見ているときに調子の悪さを感じたことがなかったので、本当にそんなに通信が不調なのか、今度は Network Ping - MochaSoft を使って通信状態を試してみました。

Ping パケットの送信先は Google の DNS サービス 8.8.8.8 です。

 

その結果は散々なもので、iPhone 5 で試すと頻繁に Request timeout を繰り返します。10 分ほど試してパケットの消失率は実に 69.3 % に上ってしまいました。

それ以外にも iPhone 4S と iPod touch 4th でも同じテストを、同じタイミングで同時平行してみてましたが、パケットの消失率はどちらとも 0.0 % です。

 

選択している Wi-Fi も同じで、3 台同時に ping していて、置いている場所も 3 つ並べてなので、これは iPhone 5 の問題である可能性がかなり高そうになってきました。

翌日は快調に。でもまた不調に。

そんな悪い通信環境ではありましたけど、翌日は打って変わって本来の快適さに戻りました。

日付が変わってその間に自宅に戻ってまた来たただけで、iPhone 5 や、ルーターやサーバーなどは何も再起動していないのですけど、昨日のパケット消失率が嘘のようになくなってしまいました。

とはいえ正常に戻ったわけではなくて、また数日後に再発してしまいましたけれど。

 

ちなみに自宅では Wi-Fi ルーターの WHR-G310N と WHR-HP-G300N の 2 つを使っているのですけど、こちらも正常に通信できたと思えば、翌日には iPhone 5 でパケット消失が頻発したりと、環境が違っても同じ症状が出ました。

こちらも iPhone 4S ならパケット消失は見られません。

ローカルネットワークを探ってみる

再び iPhone 5 が頻繁にパケット消失するようになったので、これまでのパケット送信先の 8.8.8.8 に代えて、ローカルネットワーク内の IP アドレスを使って実験してみることにしました。

 

すると Wi-Fi アクセスポイントとして使用している Time Capsule への ping は失敗しないものの、その LAN ポートに接続されている Windows 7 以上の PC への ping でパケット消失が発生することが判ってきました。

そして、Windows XP や、Mac OS X へのパケットは消失しないようです。

実際、MacBook Air を Bootcamp で構成して、同じコンピューターを同じ LAN ポートで接続テストしてみると、Mac OS X のときには安定するのに、Windows 8 のときにはパケットの消失が絶えなくて、はっきりと明暗が分かれた感じでした。

Windows Vista の PC は、今ここにはないので判りません。

 

自分のネットワーク環境の場合、インターネットへ出るまでに通過するルーターのひとつが Microsoft Hyper-V Server 上の Linux だったのもあって、ひとたび iPhone 5 の調子がおかしくなると Hyper-V との通信が満足にできなくなり、すなわちインターネットへのアクセスも失敗続きになるのが原因になっているようです。

PC を別の LAN ポートに差し替えたときにも影響する

ちなみに iPhone 5 の調子がおかしくなっているときは、LAN ポートを差し替えた PC の発見速度にも影響がでるようです。

これについては Mac OS X も影響を受けるようで、LAN の差込口を変えて 3 分くらいは待たないと ping が復帰しない感じでした。正常であれば瞬間か、せいぜい数秒程度で復帰するはずなのですけれどね。

 

iPhone 5 からの通信が届かない間であっても、その PC がインターネットを使用できたので、移動した PC 自体の通信が復帰していないということではなさそうです。

おかしいのは iPhone 5 の可能性

それなら、iPhone 5 から ping が届かない PC から、iPhone へ ping を送信したらどうなるかテストしてみました。

すると "Host is down" という形で ping が通りませんでした。iPhone 4 への ping はどうなるか調べてみるとちゃんと応答があるようです。

 

iPhone 5 のセキュリティ方針が変わったのかとも思って、念のため iPhone 5 をもうひとつの Wi-Fi ルーターへの接続に変えて試してみようとしたところ、何故かエラーで接続できなくて、再びもとの Time Capsule の Wi-Fi に戻されてしまいました。

すると、さらに何故か、さっきまで "Host is down" で通信できなかった iPhone 5 が、何事もなかった可能様に応答するようになったのでした。

それっきり、iPhone 5 から Windows 7 への通信が届かないときでも、Windows 7 から iPhone 5 への通信が届くようになりました。

明らかに iPhone 5 が何かおかしい感じがしますね。

 

ちなみに繋がらなかったもうひとつの Wi-Fi ルーターは、こちらは Wi-Fi ルーターを再起動することで接続できるようになりました。

こちらはこちらで、調子がおかしくなっていた様子です。

iPhone 5 を再起動すると

iPhone 5 を再起動してみると、それまでの不調が嘘のように消え去りました。

Mac OS X や Windows からの ping に iPhone 5 は正常に応答するようになりましたし、iPhone 5 からそれらへの ping も 10 分間まったく消失しなくなりました。もちろんインターネット上の 8.8.8.8 への通信も正常レベルです。

Mac や Windows の LAN 接続ポートを交換した時に iPhone 5 からの ping 応答が再開されるまでの反応も、これまでの何分もかかる異常な状態から、iPhone 5 の再起動を機に、数秒足らずで正常に検知できるようになりました。

 

その夜にまたパケット消失がひどくなったと思ったら、何もしないでも翌日はまた順調で、iPhone 5 を再起動しなくても直ることはあるようですけど、とりあえずは iPhone 5 の問題でほぼ良さそうな感じですね。

厳密には iPhone 5 と Windows 7 以上(または Vista 以上)との Ethernet の相性といった感じになるかもしれないです。

 

iPhone 5 の再起動で直るあたり、もしかすると、今インストールされている iOS 6.0.1 の不具合ということもあるかもしれないですね。

近々登場すると思われる iOS 6.1 へのバージョンアップで改善されることを期待しつつ、Hyper-V 側のネットワークインターフェイス設定を調整することで解消される方法がないかちょっと考えてみます。

 

原因は iPhone 5 の ARP の可能性

さらに原因を絞り込むために、パケットキャプチャを使って様子を見てみることにしました。

iPhone 5 から Windows 8 へ ping を行って、その Windows 8 上で iPhone 5 から来るパケットをキャプチャしてみます。

IP レベルでのキャプチャ

IP レベルでのキャプチャだと Echo の Request と Reply が拾われている感じでした。

それ以外は稀に mDNS という通信が発生していましたが、正常に動いているようで、今回の問題には特に関与しなさそうです。

 

Echo の方は、正常なときには iPhone 5 からの Echo Request と Windows 8 からの Echo Reply がキャプチャされますが、パケットが消失するときには iPhone 5 からの Echo Request だけしか記録されません。

Windows 8 上でパケットキャプチャしているので、Windows には正常に Echo Request が届いているのに、Windows 8 自身が Echo Reply を返せないという状況に陥っているようです。

 

これだけ見ると Windows の方に問題がありそうですけど、別の Windows 7 や 8 でも同じようにダメなのと、XP や Mac OS X では問題ないこと、そして iPhone 5 を再起動すると数日間は直るところを考えると、iPhone 5 に原因があるはずです。

iPhone 5 から送られてくる Echo Request がおかしいのかとも思ったのですけど、正常に通信できる iPhone 4 の ping パケットの中身と比べてみても、特に何か違ったデータが送信されているような様子はみられませんでした。

Ethernet レベルでのキャプチャ

IP レベルでのパケットキャプチャだとよくわからなかったので、Ethernet レベルでパケットキャプチャしてみることにしました。

すると、Echo 通信を行っている隙間にちょくちょく、MAC アドレスと IP アドレスの対応付けを行う ARP プロトコルの通信が iPhone 5 と Windows 8 の間で行われていることが判りました。

この ARP 自体は、IP アドレスを使って通信する場合にそれに対応する MAC アドレスを探すために行うものです。

 

ARP の流れとしては、まず、ある IP アドレスへ通信を行いたいデバイスが、それに対応する MAC アドレスが設定されている機器を探すために、ARP Request をブロードキャストします。

ブロードキャストはネットワーク全体に届くので、自分の IP アドレスが設定された ARP Request を受け取ったデバイスが、自分の MAC アドレスを ARP Response として、送信元に返します。

これによって、その IP アドレスを持つデバイスの MAC アドレスを取得することができ、これで初めて、その IP アドレスが設定されたデバイスとの通信ができるようになります。

そして、このやり取りを送信の度に毎回やるのは効率が悪いので、システムには ARC で見つけた MAC アドレスのリストを一定時間保存しておく機能が備わっています。

保持される期間は、仕様としては最大 10 分、または取得後 2 分間使用しなかった場合に消去され、再取得が必要になります。

 

そんな感じの ARP ですけど、どうやら今回 iPhone 5 が通信できなくなる原因に関与している様子が見えてきました。

iPhone 5 が通信できなくなったときに Windows 8 から ARP の様子を見てみたところ、Windows 8 が何度も何度も iPhone 5 に設定されているはずの IP を ARP Request で問い合わせていることが判りました。

そして、iPhone 5 から、Windows 8 についての ARP Request が送信されて、それに Windows 8 が答えたのと同じタイミングで ping の通信が復帰しました。

これを機に Windows 8 からの ARP Request もなくなりますが、これは iPhone 5 からの ARP Request によって iPhone 5 の MAC アドレスと IP アドレスが判明するからかもしれません。

ちなみに正常状態が続いている場合には、50 秒に 1 度のタイミングで Windows 8 側から ARP Request が送信されて、iPhone 5 がそれに答えるという動きがとられるようです。

 

それからすぐに通信が終了、その後にまた iPhone 5 から ARP Request が送信されたタイミングで復帰する、の繰り返しです。

通信が途絶えるのは数秒から数分以内程度とまちまちでしたが、復帰はだいたい 40 秒間隔と規則的な感じだったので、何らかのタイマーで ARP 更新のタイミングが計られていて、そのタイミングで正しく更新ができるかどうかが、途絶えた通信が復帰するかどうかの境になっているのかもしれません。

ちなみに、通信が途絶えたときの ARP テーブルを確認してみると、iPhone 5 に対応する記録の「種類」のところが「無効」になっていました。

ARP テーブルに手動で追加すると?

ARP の自動解決に失敗するなら、ARP エントリに初めから iPhone 5 の IP アドレスと Mac アドレスを追加したら直るんじゃないかと思って試してみました。

Windows 8 で追加しようとしたら「ARP エントリを追加できませんでした: アクセスが拒否されました。」と怒られてしまうため、同様の問題が起こる Windows Server 2008 R2 で追加してみます。

 

Windows Server 2008 R2 に iPhone 5 の ARP エントリを追加したところ、確かに ARP にアドレスを追加した直後は復帰するのですが、また数秒から数分程度で通信不能になりました。

その後にまた ARP Request が必要になり得るタイミングで、手動で登録した ARP エントリを参照するため、40 秒以内には必ず通信が復帰するようにだけはなりました。

 

これらの状況から判断すると、iPhone 5 から Windows 8 へ ping で Echo Request を送信し続けたとき、Wi-Fi の不具合が現れるまでの流れは次のような感じになっているのでしょうか。

ただ、ARP の流れを追ったのは今回が初めてで、想像で描いている部分も多いので参考程度にご覧ください。

  1. iPhone 5 が ARP を使って Windows 8 の MAC アドレスを取得し、そこへ Echo Request を送信する。
  2. Windows 8 が、iPhone 5 から ARP 要求があったときに取得した iPhone 5 の情報を使って Echo Reply を送信する。
  3. 以降は Windows 8 側から、50 秒(40 秒?)毎に iPhone 5 についての ARP エントリを更新する。
  4. iPhone 5 の ARP が正しく動作しなくなり、Windows 側からの ARP Request に応答しなくなることが頻繁に起こる。
  5. この間も、iPhone 5 側からの Ping Request は送信され続ける。
  6. Windows 8 は Ping reply の送信先を ARP Request で問い合わせ続けるが、iPhone 5 から返答がないため Ping Reply を返せない。
  7. たまに iPhone 5 側から ARP Request が送信され、Windows 8 がそれに ARP Response を返すことにより、Windows 8 が Ping Reply を iPhone 5 に正しく返せるようになる。
  8. それから、数秒〜1分以内ぐらいのタイミングで、再び Windows 8 から Ping Reply が返せなくなる。このとき、Windows 8 上の ARP エントリでは、iPhone 5 に該当するエントリが「無効」になり、やがて消滅する。

このような感じになっているでしょうか。

ARP 周りの動きに詳しくないのでなかなか判断も難しいところなのですが、とりあえず iPhone 5 側の ARP 周りの動きがおかしい可能性が濃厚なように思います。

 

ちなみに iPhone 5 の現在の OS は iOS 6.0.1 です。

同じ OS でも iPod touch 4th では今のところ同じ症状はたった 1 度も起こりませんけど、いずれにせよ ARP 周りに何か原因があるのだとすれば、もしかすると iOS のアップデートで修正される可能性もあるかもしれません。

 

iOS 6.0.2 リリースでも…

iOS のアップデートは、次の iOS 6.1 まで待たないといけないかもしれないなと思っていた矢先、平成 24 年 12 月 20 日に、iOS 6.0.2 がリリースされました。

修正内容は "Wi-Fi に影響を与える問題を修正" というたった 1 項目になっています。

この遠回しな表現が、もしかすると今回の ARP の動作不良が影響して Wi-Fi 通信に支障をきたすという症状を言い表しているのかもしれないと想像するとなおさら期待が高まりますね。

 

さっそくアップデートして、iPhone 5 は再起動となりました。

iPhone 5 を再起動してからこの症状が再発するまでに数日から 2 週間くらいの時間が必要なので、しばらくは iPhone 5 を再起動しないようにしながら、同じ症状が再発するかどうかをしばらく見守ってみることにします。

iOS 6.0.2 でも直らず

それから 5 日後、再び iPhone 5 が Windows と正しく通信できなくなりました。

どうやら iOS 6.0.2 でもこの問題は直っていない様子です。

 

改めて確認してみると、この問題に関係しそうな材料は次のものに絞られそうです。

  1. iOS デバイスから ping をしたときに、iOS 側から宛先の ARP 問い合わせが発信され、これに対して宛先側の OS が ARP 応答を返すところまでは正常。
  2. 宛先が Mac の場合、それから 20 分後に "Mac 側" から ARP 問い合わせが発信され、これに対して iOS 側が ARP 応答を返す。このとき iPhone 5 も正常に応答する様子。
  3. 宛先が Windows の場合、それから数秒程度で Windows 側から ARP 問い合わせが発信され、これに対して iOS 側が ARP 応答を返せば、Windows との通信が維持される。ここで iPhone 5 は、ARP 応答を返さない場合が頻繁にある。

なんにせよ、Windows の ARP キャッシュがすぐに無効になるのと、iPhone 5 が ARP 応答しなくなるために、Windows が iPhone 5 を見失うというのが、本質的な問題になってくるのかもしれないですね。

そんな Windows と iPhone 5 との相性問題とも呼べるものなのかもしれません。

iPad mini でも同じ現象が

だんだんと状況が判って行くさなか、何気なくわが家を訪れた iPad mini で、同じ症状が発生しました。

iPhone 5 が絶不調な中、iPad mini Wi-Fi モデルも同じパケットロストの問題に遭遇して、標準のメッセージアプリの設定もままならない感じになってしまっていました。

 

これはもしかすると、iPhone 5 と同列の機種で共通する問題なのかもしれません。

iPad mini が Wi-Fi 専用モデルなので、ハードウェア周りの不具合なのであれば Wi-Fi のアンテナ周りになるのでしょうか。そう思うと、3G や LTE のときには不具合がでないのも頷けるような気がします。

それにしても iPad mini でも同じ症状がでるというのは、なかなか厳しい問題ですね。

 

iPhone 5 や iPad mini の Wi-Fi 障害の対処法

ともあれようやくこれくらいの情報が揃って、今回の障害を回避する方法が見えてきました。

あくまでも、根本的な解決策ではなくて回避方法ですけど、それについては iPhone 5 の Wi-Fi 通信が頻繁に切れる(対処編) の方に記しておくことにします。