iPhone 5 の Wi-Fi 不具合について yidev で発表しました

HARDWARE REPORT


iPhone 5 の Wi-Fi 通信が頻繁に切断されていた問題

iPhone 5 を発売日に購入してからというもの、Wi-Fi 接続が不調で使い物にならない日々が続いていましたけど、3か月かけてようやくほぼ原因を断定、それを 2013 年 2 月 23 日の 第 13 回 yidev(横浜 iPhone 開発者勉強会) でお話してきました。

 

これまでの苦悩と経緯は iPhone 5 の Wi-Fi 通信が頻繁に切れる(調査編)iPhone 5 の Wi-Fi 通信が頻繁に切れる(対処編) で記してきましたが、yidev ではこの内容を噛み砕いて整理してスライドを発表させて頂きました。

せっかく開発者のみなさんが集まる場なので、スライドの後半では、今回の問題解決に役立ったネットワークの基礎についても紹介しつつ。

 

 

slideshare だとスライドが上手く再現されなかったので、PDF にした資料もここに 用意しておきました。

PDF のファイルサイズは 3MB です。

 

そして、遂に完結へ

そんな yidev での発表が功を奏して、おかげさまで iPhone 5 の Wi-Fi 問題もついに全てが完結です。

今回のこのスライドを受けて、yidev に参加されていた @integra さんから推論としてほぼ確実と思われる知恵を頂いて、5 か月にも及んだ iPhone 5 の Wi-Fi 問題は完全に、自分の中で終焉を迎えました。

 

詳細はまだ理解できていないのですけど、どうやら Windows Vista から TCP/IP スタックの実装が RFC4861 準拠に変わったらしく、ARP キャッシュというものが廃止されたそうです。

そして iPhone 5 では Wi-Fi チップが省電力のものに変わったらしいです。

これらのちょうど災いして、これまでであればアドレスを取得したらしばらく再問い合わせをしなかった Windows が直ぐに再問い合わせを試みて、返答をすればしばらく再問い合わせがこないはずだからと iPhone がそこで休息を取るようになったのかも、そんな相性問題が発生しているのではないかとのこと。

 

たしかにこの考察が、自分がこれまで見てきた状況をとても見事に説明しています。

なぜ Windows 7 で ARP キャッシュが直ぐに「無効」になるのか不思議でしたけど、そもそも ARC キャッシュが廃止になったというなら合点が行きます。

そして何故 iPhone 5 が ARP 問い合わせに応答しなくなるのか、しかもそれが ARP キャッシュが切れるタイミングとだいたい似た周期で復活することがあり、そのまますぐにまた沈黙というのも、省電力のために敢えてそうしていたと言われれば、たしかに不思議はありません。

ping パケットの内容は Windows と全く変わらないのに Mac 同士なら正常に通信できている不思議も、Mac の場合は ARP キャッシュが効いているので、iPhone 5 が返事をする気になってから Mac が ARP 再問い合わしていると考えれば自然ですね。

 

そんな感じから、自分の域ではこの問題はほぼ解決です。

iOS 6.1 へアップデートしてから再現することがなくなったのもあって、これでようやくこの問題で悩まされることは無くなりそうで、ようやくこれですっきりです。