繋がらないWiFi

東京Ruby会議に参加して、ネットが繋がらない!と嘆いている人を大勢見ました。 Ruby会議に限らず、最近の勉強会やイベントは公式のハッシュタグがあり、Twitterで感想や突っ込みを入れるのがお約束になっていますが、参加者の多いイベントではネットが繋がりにくくなることが増えています。 なぜ繋がりにくくなるのか、繋がるようにするにはどうすればいいのか、自分の経験を交えて少し考察してみます。 なお、無線通信の専門家ではないので、間違っていることを書いていたら指摘していただけると幸いです。

移動体通信とポータブルルータもかなり普及してきて、エンジニアなら大抵持っているどころか、2つ以上持っているという人も割と多いのではないでしょうか。いわゆるテザリングも原理としては同じです。 こうしたルータとPC等の機器の間は、多くの場合WiFiで接続されます。ほとんどのルータはIEEE802.11g/n規格になっていて、これは2.4GHz〜2.5GHzの帯域を利用します。 WiFiの電波は「チャンネル」という分け方をされていますが、これは周波数帯を20MHzで区切って「ここからここまでの周波数帯は何チャンネル」という意味です。もし、一つのチャンネルをいくつもの無線機器が利用しようとすると、電波がお互いに干渉を起こし、伝送エラーが頻発します。TCP/IPはエラーパケットがあれば再送を要求するため、混雑は爆発的に増大し、やがて輻輳(通信要求が過大になって繋がらなくなること)を起こします。

チャンネルをうまく棲み分けできれば問題は発生しにくくなるように思えますが、実はチャンネル同士は完全に独立しているわけではなく、スペクトラム拡散によって前後のチャンネル(で確保している周波数)にも電波が飛んでいます。 WiFiアナライザーのようなツールを使って調べると、電波が指定したチャンネルを中心に山形になっているのが分かると思います。 隣接するチャンネル同士が混雑すると、やがて同様に輻輳が発生すると思われます。

加えて、多くの人はルータのチャンネル設定を「自動」にしていると思いますが、これが曲者で、「自動」は「ルータを起動した時に空いているチャンネルを探す」ようになっています。家庭やオフィスで固定して使っている場合にはそれでも問題ないことがほとんどですが、ポータブルルータはずっと電源を入れっぱなしということも多く、「起動した時に空いていたチャンネル」を頑なに維持するため、空いているチャンネルを使うとは限りません。と言うかアナライザーで調べてみると分かるのですが、ほとんどのポータブルルータはチャンネル「1」を利用しています。起動した時に周囲にWiFi機器が存在しなかったのでそのままなのでしょう。

全く繋がらなくなっていた東京Ruby会議メインホールのWiFi状況。

また、ここでは詳しく述べませんが、携帯やスマートフォンで利用する3GやLTE回線も大勢の人が集まれば輻輳します。(LTEの方が速度が速い分輻輳しにくいと思われます)

3Gが輻輳すると、携帯は空いている周波数を探し始めるので、電池が急速に消耗するという副次的な問題も発生します。

さて、それではイベント等で大勢の人が集まる時、輻輳を回避するにはどうすればいいかを考えてみます。

まず大原則として、各自が持参するポケットルータの電源は切ってもらいましょう(スマートフォンはテザリングを無効にする)。たまに「回線を使わせて貰うのは申し訳ない」と言ってわざわざ自前の回線を使おうとする人がいますが、百害あって一利なしです。周波数帯は有限の資源ということを忘れないようにしましょう。

次に、なるべく同時接続数の多い無線LANアクセスポイントを用意します。家庭用のブロードバンドルータ等は同時接続数が少なく、チャンネルが輻輳するより遥かに前に接続障害が起きてしまいます。法人向けのモデルでは50〜100クライアントが接続可能なものもあります。接続数の少ないルータを多数持ち寄るなどの場合、チャンネルをうまくずらし、設置する場所を検討するなどして干渉を避けるべきです。後述するRubykaigiの実例が参考になると思います。

複数のアクセスポイントを設置する場合、理想的には使用しているチャンネルの前後2チャンネルずつを空けて、5チャンネルずつ利用するのが最も干渉が少なくなると思われます。すると実質的に利用できるのは1/5/9/13の4チャンネルになります。若干の干渉を許容するなら1/4/7/10/13の5チャンネルでも良いかも知れません。参加者の人数、WiFi利用率、会場の広さなどを検討し、最適な配置を考えると良いかと思います。また、アクセスポイントが均等に利用されるような工夫も必要です。

 

ネットワーク設計を手伝った某イベント会場のWiFi状況。 4つのアクセスポイントを干渉しないように設置。会場収容限度が200人程度なので、この位で十分と判断した。 4つの大きな山以外は近隣のWiFi。

さらに巨大なイベントになると、キャッシュサーバの利用、TCPセッションのタイムアウトを極小にするなどの工夫が必要になります。これについては、素晴らしいネットワーク環境を提供していただいた2011年のRubykaigiについて、構築を担当した小岩さんがるびまに寄稿した記事を読んでいただくのが良いと思います。大変参考になる記事です。