概要

IEEE802.11無線LAN(Wi-Fi)のアクセス制御であるCSMA/CAは、コリジョンを回避するためにまず電波が利用中かを確認するキャリアセンスを行います。電波が空いていればデータを送信できるのですが、コリジョンを回避するためにランダムな時間待機します。データを送信する前に待機する時間を決める疑似ランダムバックオフアルゴリズムについて解説します。

バックオフ(back off)は、「身を引く」とか「引き下がる」といった意味です。

同時に電波が空いていると判断してしまったら?

CSMA/CAでは、キャリアセンスで電波が利用中であるかを確認して、コリジョンを回避しようとしています。でも、複数のステーションが同時に電波は空いていると判断してしまいデータを送信すると、コリジョンが発生する可能性があります。

そこで、さらにコリジョンを回避するために、電波が空いていると判断してすぐにデータを送信するのではなくランダム時間待機します。もし、同時に複数のステーションが同時に電波は空いていると判断したとしても、データの送信を開始するタイミングがずれます。データ送信を開始するタイミングをずらすことで、コリジョンを回避する仕組みです。

データ送信を開始する前に待機するランダムな時間を決めるアルゴリズムを擬似ランダムバックオフアルゴリズム(Pseudo-Random Back off Algorithm)と呼びます。

スロットタイムとコンテンションウィンドウ(Contention Window : CW)

疑似ランダムバックオフアルゴリズムで、データ送信前の待機時間を決めるためには、コンテンションウィンドウとスロットタイムという値を利用します。

コンテンションウィンドウ : ある決まった範囲から選択するランダムな数値
スロットタイム : 物理層の仕様(PHY)によって規定されている時間間隔

待機時間、すなわちバックオフタイマは、以下のようにコンテンションウィンドウとスロットタイムから計算します。

バックオフタイマ = コンテンションウィンドウ * スロットタイム

スロットタイムの間、電波が空いていればスロットタイム分だけバックオフタイマをデクリメントします。もし、キャリアセンスによって電波が利用中だと判断したら、バックオフタイマのデクリメントは中断します。そのときのバックオフタイマの値は維持しています。そして、DIFS/AIFS/EIFSの間、電波がアイドル状態であればバックオフタイマのデクリメントを再開します。バックオフタイマがゼロになると、データの送信を開始します。

疑似ランダムバックオフアルゴリズムの例

簡単な疑似ランダムバックオフアルゴリズムの例を考えます。802.11nのOFDMの変調方式を利用しているとスロットタイムは9マイクロ秒です。そして、コンテンションウィンドウは0から15の範囲とします。

Wi-Fiステーション1と2が同じタイミングでデータの送信を開始しようとします。Wi-Fiステーション1はコンテンションウィンドウとして4を選択して、Wi-Fiステーション2はコンテンションウィンドウ6を選択したとします。コンテンションウィンドウが小さいWi-Fiステーション1のバックオフタイマが早くゼロになるので、先にデータの送信を開始します。

その間、Wi-Fiステーション2はキャリアセンス(物理/バーチャル)で電波が利用中(ビジー)であることがわかるので、バックオフタイマのデクリメントは中断しています。そして、Wi-Fiステーション1から送信したデータに対して、SIFSの間隔でAPステーションからACKが返ってきます。ACKが返ってくるまでの間もWi-Fiステーション2のバックオフタイマのデクリメントは中断しています。

ACKのあと、DIFSの間、電波がアイドル状態であればWi-Fiステーション2のバックオフタイマのデクリメントが再開します。Wi-Fiステーション2のバックオフタイマがゼロになれば、Wi-Fiステーション2はデータの送信を開始します。このときWi-Fiステーション1から別のデータを続けて送信しようとしても、Wi-Fiステーション2の方が優先される可能性が高くなります。Wi-Fiステーション2のバックオフタイマの値が維持されているからです。特定のWi-Fiステーションだけが連続して、電波を利用してデータを送信する可能性が小さくなるようにしています。つまり、できるだけフェアにWi-Fiステーションがデータを送信できるように制御しています。

図 疑似ランダムバックオフアルゴリズムの例
図 疑似ランダムバックオフアルゴリズムの例

まとめ

ポイント

  • CSMA/CAの制御では、キャリアセンスに加えてさらにコリジョンを回避するために疑似ランダムバックオフアルゴリズムを利用します。
  • データ送信を開始するときに疑似ランダムバックオフアルゴリズムによって、バックオフタイマを決めてランダム時間待機します。
  • バックオフタイマ = コンテンションウィンドウ * スロットタイム
  • 同時に複数のステーションが電波は空いているとしてデータを送信しようとしても、送信を開始するタイミングをずらしてコリジョンを回避します。