RTS/CTSと隠れ端末問題(★★)

無線LANには有名な「隠れ端末問題」というものが存在します。これは、ランダム・アクセスで無線通信しようとするネットワークでは必ず生じる問題です。
下記の図のように、アクセスポイントにステーションAとステーションBが接続されている状態を想定します。さらに、位置関係が次のようになっているとします。

  • ステーションAは、アクセスポイントとは通信可能です。しかし、ステーションBとは距離が遠いため通信ができません。
  • 同様に、ステーションBは、アクセスポイントとは通信可能です。しかし、ステーションAとは距離が遠いため通信ができません。

wlan_hidden

このとき、ステーションAとステーションBは、距離が遠く、相手がデータを出していることが検知できないため、どちらかが通信中であっても、誰もデータを出してないと思い込んで、自分のデータを送信しはじめてしまいます。そうなると、アクセスポイントでは、両方のデータが混信してしまい、データが壊れて入ってきてしまいます。


このような「隠れ端末問題」はめったに起こらないと思われるかもしれませんが、実はしょっちゅう発生します。上記のような配置でなくとも、例えば、ステーションAとステーションBの間を人間が通った場合など、アクセスポイントからはステーションは見えてますが、お互いのステーションどうしが見えない状態になります。


この「隠れ端末問題」を解決する方法が、RTS/CTSです。

  1. まず、ステーションAがデータを送信する前に、RTSというフレームをアクセスポイントに送ります。これにはこれから送るデータの長さ情報が入ってます。
  2. 次に、それを受信したアクセスポイントは、CTSというフレームをネットワーク内の全員に送ります。これにはステーションAがこれから送るデータの長さ情報が入ってます。
  3. このCTSフレームを受信したステーションBは、これから他のステーションが指定されたデータ長の送信を開始するとわかります。その期間は、ステーションBは送信をしないようにすることで、この「隠れ端末問題」を解決できました。

隠れ端末問題の考察(★★★)

では、どのようにして、この「隠れ端末問題」が発生したかをネットワークのメンバーはわかるのでしょうか?実は、誰もわかりません。全員がどのように行動しているかは神様しかわからないため、普通にフレームがノイズで壊れたのか、距離が遠くなってフレームが届かなくなったのか、「隠れ端末問題」で混信して壊れたのかがわからないのです。そこで、通常の製品の実装では、アクセスポイントやステーションが自分の送ったデータに対して、確認フレーム(Ack)が戻ってこないことが何回か発生すると、RTSを出し始めるのです。


ここで、こんなことがあるなら、最初からRTS/CTSフレームをつけて送ればいいではないかという疑問も生じます。しかし、このRTS/CTSのやり取りを行うと、時間がかかり、通信速度が非常に低下してしまうので、通常の製品の実装ではそういうことはしていません。


ちなみに、このRTS/CTSは他の通信方式(例えばBluetoothなど)には理解ができないため、Bluetoothなどとの衝突によりフレームが壊れている場合は、どうにもできません。しかも、無線LAN機器は「隠れ端末問題」が発生していると勘違いして、RTSを出し始めてしまい、さらに、速度低下が起こってしまいます。



なお、違う無線LANネットワークに属している場合であっても、RTS/CTSは受け取れるので、無線LANを使う限りにおいては、RTS/CTSにて「隠れ端末問題」を回避できます。