「2013/09/11-01」の編集履歴(バックアップ)一覧に戻る
2013/09/11-01 - (2013/09/12 (木) 01:48:53) のソース
**WifiとPingのお話 iPhone5の発表あたりでしょうか、いつのまにやらWifiなる単語が一気に一般化致しました。 LTEにテザリングを利用してタブレットを接続するケースや、 スマートフォンを自宅のAPにする形態などなど。 地球上どこへ言ってもIEEE802.11準拠の電波が飛び交っています。 ちなみに昔は無線Lanと呼んでいましたが... ---- [[HighPing無害説 0>>http://www45.atwiki.jp/goodgames/pages/845.html]]の記述後、数件お問い合わせを頂きました。 前回の書き方があまりよろしくなかったのか、無線Lanに関する内容が多かったため、改めて無線LAN(Wifi)接続について書いてみたいと思います。 ---- (頂きましたメールよりお問い合わせの趣旨を利用頂きました) Q.&color(red){「無線LANは遅い」と聞くが、例えばPing10の有線LANとPing10の無線LANは同じ性能と考えてよいのか?} A. &b(){同じです} 但し、Ping10で安定するかしないかの差があるはずです。 これだけじゃつまらないので下記の通り、もう少し詳細を記載致します。 さて参りましょう。 ---- ***■もう一度原則論 (有線/無線を問わず) &b(){・理論値、実測ともに通信速度は問題にならない} 少なくともBF3では1Mbpsの回線でも帯域を使い切ることはありません &b(){・応答性能が重要} 「よーいドン」の一歩目が重要。 長短距離(例えば1m)を何度も走るイメージ。トップスピードは無意味。 &b(){・安定性重視} 出来るだけ変動を少なく。極論すればPingは最大値で評価すべき。 &b(){「やや高めでも安定している方が安心」の図} &image(ping_chart_20130911.png) &b(){・最適値は0ms} あくまでも理論値。0msはあり得ませんが短い方が良いのは事実。 前回の記事で、1Sec / 60FPS = 16.666ms を連発したためか、 16.666ms未満なら全員平等と思われた方が多かったようですので、この点については近日中に再度解説致します。 ---- &b(){■実測しました} &b(){いつも通りの超手抜きグラフ} &image(Wifi_20130911.png) ゲームに使っている環境ではありませんが、参考までに自宅で30分間連続測定してみました。 802.11nを使用しAPまでの距離は約5mで途中に障害物の無い環境で測定しています。 &b(){&color(red){自分で見てびっくり。}} 大凡3分周期で異常にPingが悪化しています... AP設定を確認して納得。 セキュリティ設定により一定周期で暗号化用の内部キー(セキュリティトークン)を変更しているため、回線が瞬断しています。 概ね3分周期で数秒間、Pingが350弱まで悪化していました。 試していませんが、これは確実に体感出来ます。 &b(){心当たりのある方は確認されることをお勧め致します} ---- ***皆さんも測定してみましょう コマンドプロンプトを起動し下記のコマンドを実行してみて下さい。 但し、IPアドレスについては接続中のAPに割り当てられたIPアドレスに適宜変更して下さい。 &b(){今回の測定目的はあくまでも無線LAN部分のPingを測定することですのでPCからAPまでの時間を測定します。} そのためpingの送信先IPアドレスは接続先APになります。 "1800"とは1秒周期で1800回測定することを指示するパラメータですが、もっと長くしても良いかもしれません。 例えばゴールデンタイムがまるまる収まるよう、21時に測定を開始し、10800を指定すると3時間になりますので24時まで測定されます。 出来るだけ実際にプレイする時間帯に測定する事をお勧め致します。 C:\>ping 192.168.20.254 -n 1800 > ping.txt 測定が完了するとコマンドプロンプトに戻って来ますので、ping.txtをメモ帳などのテキストエディタで開いてみましょう。 192.168.20.254 に ping を送信しています 32 バイトのデータ: 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =5ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =8ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =13ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =15ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =11ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =10ms TTL=255 要求がタイムアウトしました。 192.168.20.254 からの応答: バイト数 =32 時間 =22ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =15ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =5ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =4ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 (中略) 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.20.254 の ping 統計: パケット数: 送信 = 1800、受信 = 1799、損失 = 1 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 133ms、平均 = 5ms これはあくまでも参考用に作った試験結果ですが &b(){&color(red){要求がタイムアウトしました。}}が一回でも出るなら環境構成の変更を検討する価値がありそうです。 &b(){試験期間内に1秒間以上、通信が途絶えた時間帯があることを意味します。} WebBrowserでそこらのHPを見ている時なら1秒通信出来なくても困ることは無いでしょう。 しかし、リアルタイムで戦闘を行うゲームで1秒は致命的です。 &b(){善し悪しの基準ですが、PCからAPまでですのでほとんどの環境にて最速は1msになるはずです。} &b(){従って最大値がポイントになりますが、15ms以内が一つの目安でしょうか。} &b(){また長時間に渡り測定結果が安定していることが望ましいと言えます。} ---- ***無線LANのPingが安定しない原因 &b(){・近隣で利用されている無線Lanの電波との干渉} 冒頭で述べました通り、猫も杓子もWifiのこの時代、どこへ逃げても電波は追ってきます。 しかも高性能APのおかげで強固な壁も貫通して電波が飛び交っています。 もちろん家庭内の壁だけでなく、外壁をも貫通しますので 近所の家で稼働しているAPや端末からの電波も皆さんの家の中まで飛んできます。 広く普及しているIEEE802.11b/g(2.4GHz帯)の場合、 &b(){&color(red){同一チャネルやチャネルの番号差が5ch分無いと}} &b(){&color(red){電波干渉が発生し応答性能の劣化や回線断が発生する恐れがあります。}} 「近所と違う番号ならOK」と考えている方が多そうですが、近いチャネルなだけでも電波干渉は発生します。 この辺りの話は様々なサイトで語られているので一度覗いてみることをお勧め致します。 ちなみに下記「電子レンジ」の話と重複しますが5GHz帯の電波を利用する、 IEEE802.11aを使うとこの問題は大きく改善してしまいます。 &b(){・電波強度境界付近での利用} 大昔から使われているIEEE802.11bから実装されていた技術の一つに 「もっとも効率の良い速度に自動で変更する機能」があります。 (この機能の名前を失念致しましたが) 無線LANはユーザからは見えない(いちいち見せない)レイヤーで常に通信エラーが発生しています。 広帯域(高速度)で通信するほどエラー発生率が高くなり、 エラーが発生すれば再度送信する必要があるため、 &b(){エラー発生率の高い高速度より、エラー発生率の低い低速度の方が効率がよい}ことが多いためです。 そのため無線LANでは多くのディフォルト設定にて、 エラー発生率により自動で通信速度を切り替える機能が有効になっています。 &b(){自宅以外のある環境で取得したScreenShot} &image(WifiLineSpeed_20130911.png) 1分50秒後には通信速度が自動的に切り替わっています。 ちなみに私にはアインシュタインなどとおしゃれな名前を付けるセンスはありません。 &b(){この通信速度が切り替わる瞬間も上記「セキュリティトークンの切替」と同様に} &b(){一瞬の回線断が発生するため、そのタイミングのPingは悪化してしまいます。} &b(){またいくつかのパケットが消滅(パケットロス)してしまうことも十分に考えられます。} &b(){&color(red){従って、ゲーム用と割り切って考えるなら最初から低速度に固定してしまうのがお勧めです。}} 大きなファイルのダウンロードを行う場合などには若干の差は出るかもしれませんが、 自動で設定された速度より1ランク遅くする程度ならほとんど実効速度に差が出ないことも多いようです。 ちなみに本件の根本的な対策は「APの側でPCを使用する」ことになります。 と言ってもAPの目の前に置いても下記「電子レンジ問題」などは解決しないこともありますが... &b(){・電子レンジ} 無線LAN最大の敵、電子レンジ。 いいえ、冗談ではなく超強力な電磁ノイズの発生源です。 電子レンジが発する電磁波は水の共振周波数に一致しています。(ウソ) これについては、学校で習った方も多いと思いますが&b(){先生も良くウソを教えます。} 電子レンジは水分(水蒸気)が超高周波で振動することによって発熱する原理を利用していることは事実ですが、 こんなこの程度の周波数では共振しません。本当に共振を起こすためには桁違いの超高周波が必要です。 脱線しました。 共振を起こすほどの周波数を作り出すことは極めて困難なため、 共振周波数には達しなくとも高効率で水分子を振動させれる周波数を偉い人が探しました。 その結果が2.45Ghz。 上で軽く触れましたが、IEEE802.11b/gの周波数帯域に直撃します。 理論的には&b(){&color(red){7ch~12chまでは直撃}}します。 「直撃と言っても電子レンジは近くに置いて無いし」などと言わないで下さい。 &b(){無線LANの電波出力はわずか0.1mwですが電子レンジの出力は1,000w超が当たり前。} つまり10,000倍にも達します。 対策は... ・少なくともゲームをプレイ中は電子レンジを使わない →これは無理がある。隣家の電子レンジからも電波は飛んできます。 ・直撃を回避出来るチャネルを利用する →完全に回避するのは困難とも言われているようですが効果はあるはず &b(){&color(red){・5GHz帯(IEEE802.11a)に切り替える}} →はい。これが特効薬です。 元々無線LANは802.11bから普及が始まりましたが、この周波数が2.4GHzでした。 そのため802.11gでも2.4GHzが利用されたことにより、 5GHz帯を利用する802.11aは異端児と受け止められることも多いようですが、 各チャネルが利用する周波数帯域のオーパラップが無いことなどから、 非常に干渉に強く、また現時点では利用者も少ないため狙い目と言われています。 但し、高周波になるほど直進性が高まり、壁などを越えることが困難になるため、 APまでの距離が遠い場合や多くの壁やドアを超える必要がある場合には向かないかもしれません。 (参考サイト。いくらでもあるでしょうが...) [[電子レンジ利用中に無線LANの接続ができなくなったり遅くなったりする問題の解決方法>>http://canalize.jp/archives/011781.php]] [[電子レンジのノイズで無線LANが遅くなる!? (電子レンジの上にノートPCを置いて実験)>>http://allabout.co.jp/gm/gc/60659/]] 尚、2.4GHz帯を利用している無線機器は他にも多数存在しており、 近年急激に普及しているBluetoothも2.4GHz帯を利用しているため、 電波干渉の原因となります。 ---- ***やっと結論 とにかく前述の&b(){ping aaa.bbb.ccc.ddd}を長時間実行し、 常に15ms程度に収まっていれば問題なしと判断しましょう。 たまにこの範囲から逸脱してしまう(Pingが悪化する)ようなケースでは、 周期性の有無や特定の時間帯に集中しているか否かなどを調査すれば、 解決策が見えてくるはずです。 &b(){Laggyな時間帯ではないのにLagを感じる場合、無線LANを利用しているなら疑ってみる価値はあると思います。} (&Counter())