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

HARDWARE REPORT


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

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

発端から原因を追った経過は iPhone 5 の Wi-Fi 通信が頻繁に切れる(調査編) に記した通りですけど、ようやく状況と対処法が見えてきたので、今回はそれについての総まとめとして記したいと思います。

 

また、これについて 2013/02/23 に開催された yidev(横浜 iPhone 開発者勉強会)で発表しました。

その時に使ったスライドや、そこで教えて貰った新しい事実は iPhone 5 の Wi-Fi 不具合について yidev で発表しました の方で記してあります。

 

なお、この問題はどうやら 2013/01/29 にリリースされた iOS 6.1 で解消されている様子です。

以下で語られていることは、それ以前の対処法のお話なので、そんな時に公式対応がされない中で、どのような暫定対応を取って行くかの参考に等してもらえればと思います。

 

症状

まず、確認された症状は、次の通りでした。

iPhone 5 と iPad mini の Wi-Fi 通信で、Wi-Fi に繋がっているにもかかわらず、iOS と Windows 7 以上(Vista は未確認)との間の通信が、頻繁に繋がらなくなることがある。

ちなみに iPhone 3GS, iPhone 4, iPhone 4S, iPad 1 では Windows との通信は正常に行えます。iPhone 5 でも Windows XP や Mac OS との通信は正常でした。

 

これがどういうときに影響するかというと、Wi-Fi を使って Windows と通信するようなアプリで、通信エラーが多発する可能性が考えられます。

そして、例えば Microsoft Hyper-V Server を使った仮想サーバー上で Linux によるゲートウェイ(ルーター)を運用している場合にもどうやら、ホスト OS の Windows が足を引っ張るのか、ゲートウェイが iOS を見失ってルーティングできなくなったりもします。

もしかすると Linux との相性もあるのかもしれないですけど、手元の Linux マシンは Hyper-V 上で稼働しているものしかないため、その辺りの判断はできませんでした。

原因

原因は、どうやら次のもので間違いなさそうな様子です。

iPhone 5 の Wi-Fi インターフェイス上で ARP が応答しなくなることがあるため、Ethernet レベルで Windows が iOS を見つけられなくなる。

ちなみに ARP というのは、通信先の IP アドレスがどの Ethernet アドレスに紐づけられているかを調べるための仕組みです。

紐づけられている Ethernet アドレスを知ることで、目的の IP アドレスがネットワークのどこに接続されているかが判り、それによって機器間での通信が行えるようになります。

 

今回のケースでは、最初に iOS が通信を開始するために送信する ARP リクエストが、iOS の IP アドレスと Ethernet アドレスの対を送信元として、ブロードキャストで送信されます。

それを送信先のパソコンが拾ったとき、その IP アドレスと Ethernet アドレスの対が ARP エントリのキャッシュに記録されるのですが、この ARP エントリの有効期限に見られる期限の差で、通信障害の明暗が分かれる様子でした。

 

Windows 7 や 8 だと、それから数秒程度のうちにいったんそのエントリが無効になって、今度は Windows 側が、送信先の IP アドレスに紐づけられている Ethernet アドレスを探し始めます。

ここで iOS で ARP が応答しない障害が発生しているときには、紐づけられている Ethernet アドレスが見つけられなくなるため、この時点で通信が途絶えてしまいます。

 

ちなみに、相手が Mac OS X や Windows XP だと、iOS が発信したブロードキャストから拾った紐づけが無効になるのが 20 分だったり 10 分だったりするようで、その後 ARP エントリの有効期限が切れてパソコン側から ARP リクエストが送信されます。

これらの OS が相手のときには今回の障害が出たことがないので、ちゃんと iOS がその ARP リクエストにきっと応答しているのでしょう。Windows 7 相手などで iOS が ARP 応答しなくなる理由はよく判りませんが、ARP エントリ更新サイクルの違いとかが関係してたりするのでしょうか。

 

iOS と Windows との通信不良を解消するための対処:2013 年 1 月 29 日まで

対処法 1 : iOS を再起動する

一時的にしのげれば良い場合や、ネットワークを調整する権限がない場合は、iOS を再起動することで対処するのが簡単です。

iOS を再起動してしまえば、ほとんどの場合、数日間は Windows との通信が問題なくできるようになります。

 

対処法 2 : iOS の IP と Ethernet アドレスの対を手作業で設定する

iPhone 5 や iPad mini と通信するネットワーク機器の設定を調整する権限がある場合には、iPhone 5 や iPad mini に設定されている IP アドレスと Ethernet アドレスの対を、通信先のパソコンの ARP エントリに手作業で登録する方法もあります。

 

たとえば、Microsoft Hyper-V 上で動作している Linux を NAPT ルーターとして使用している場合のような場合です。

このとき、ネットワーク設定を調整しなければいけない場所は、どうやら Hyper-V サーバーではなく、NAPT ルーターを構成する Linux になるようです。もしかすると Windows だけでなく Linux とも同じ相性問題があったりするかもしれません。

 

ともあれ、NAPT を通過して通信を行う場合は、ARP で iOS を探すのはこの NAPT ルーターが終端になるので、ここで iOS の存在を正しく認識できれば、それ以降の通信が阻害されることはなくなります。

Linux での ARP エントリの設定は、"/etc/ethers" ファイルに、iPhone 5 や iPad mini の Mac アドレスと IP アドレスの対を記述する方法で行います。

68:96:7b:00:00:00 192.168.11.3

このように、iPhone 5 に設定されている Mac アドレスと IP アドレスとを、空白またはタブで区切って 1 行で指定します。

ここで指定する Mac アドレスは、iPhone 5 の「設定」→「一般」→「情報」と辿って、そこにある「Wi-Fi アドレス」に記載されているものを指定します。

IP アドレスは、iPhone 5 の Wi-Fi 設定画面で、接続中の Wi-Fi のところの青色矢印をタップすることで確認できます。

 

設定できたら、次のコマンドを実行して、"/etc/ethers" の内容を Linux に取り込みます。

arp -f

これで、少なくともこの Linux と iPhone 5 との通信が安定する様子でした。

ここさえ安定してくれれば、この Linux が NAPT ルーターになっている場合は、それ以降の通信はこの Linux が肩代わりしてくれるので、iPhone 5 の Wi-Fi 不調に影響されることなく、Windows との通信が行えるようになります。

 

対処法 3 : NAPT ルーターを挟む

先ほどの対処法の中でも触れましたが、iPhone 5 と Windows 7 とを直接通信させなければ、今回の iPhone 5 の Wi-Fi 不良を回避することができそうです。

そこで、もう一つの対処方法として、iPhone 5 が使用する無線 LAN アクセスポイントを「ルーターモード」で用意する方法が考えられます。

 

市販ルーターの「ルーターモード」というのは、一般に NAPT によるネットワーク構成が採用されているので、ルーター以降の通信は全てルーターが変わってやってくれるので、iPhone 5 が Windows と直接通信しなくてよくなります。

ただし、iPhone 5 と NAPT ルーターは直接通信することになるので、この間で Wi-Fi の不具合が発生するなら、それ以降の通信も結局不安定になってしまいます。

 

手持ちの機器で試してみたところ、Hyper-V Server 上の CentOS 6.2 を使って構築した NAPT ルーターは「対処法 2」を実施していない限り、iPhone 5 の不具合の影響を受けて Wi-Fi 通信が不安定になりました。

PCI 社の MZK-RP150N というルーターも、内部が Windows システムのようなせいか、NAPT モードでも iPhone 5 の不具合の影響を受けて不安定なままです。

また、BUFFALO 社の AirStation AG54 という機種も、これは Windows システムではなさそうな気がするのですけど、こちらでも NAPT モードでも iPhone 5 の影響を受けてダメでした。

手持ちの機種では、唯一、内部システムが Mac OS と思われる を NAPT モードで動かしたときだけ、iPhone 5 の不具合に左右されずに Windows と通信できている様子でした。

 

iOS と Windows との通信不良を解消するための対処:2013 年 1 月 29 日以降

2013/01/29 にリリースされた iOS 6.1 にアップデートすることで、iPhone 5 の Wi-Fi でパケット消失が多発する不具合が解消される様子です。

そのため、特に難しい対処をしなくても iOS のアップデートだけで直せるようになりました。