CSMA/CA の仕組み、CDとの違い
無線クライアントはコリジョンを極力回避するために、自分と同一チャネル、かつ自分以外の無線通信を検知すると、自身を『ビジー』状態にし、他の無線通信が終わるのを待ちます。
そして通信が終わったらランダムな時間を待って送信を開始します。(ランダムにしないと他のクライアントが一斉に繋ぎにいってコリジョンになる。)
この仕組みを『CA : コリジョン回避 (Collision Avoidance)』と言います。
有線 LAN (10/100Base-T まで) では『CD : コリジョン検知 (Collision Detect)』の仕組みにより、送信者は受信者がコリジョンしたことを検知できました。(実際にコリジョンが発生するのは 10Base-2 等の同軸ケーブルの時代であり、ツイストペアケーブル時代の 10/100Base-T は下位互換のためにコリジョン検知を実装していました。が、1000Base-T からは廃止となっています。)
ですが無線 LAN においては、無線の送信者は、相手方にコリジョンが発生したことを知ることができません。
そのため、受信者は無線でデータを受信した後は必ず ACK を返し (TCP の ACK ではなく L2 無線 の ACK)、送信者は ACK が返って来なかった場合に『コリジョンした』と判断し、ランダムな時間を待って再送を試みます。
ランダムな時間を待つことにより、コリジョンを回避するのです。
また、コリジョンは検知できませんが、近くの無線クライアントの電波は検知 (観測) できますので、その電波を観測したらさらにランダムな時間を待ちます。
このような仕組みからも分かる通り、無線 AP に接続するクライアント台数が増えるほど待ち時間も増えますし、1 台の PC が小さなフレームを送るときも他の PC は待たなければなりません。
隠れ端末問題 (Hidden Node Problem)
無線クライアントが別の無線クライアントの電波を常に検知できるとは限りません。これが『隠れ端末問題 (Hidden Node Problem)』です。
例えば無線クライアント間に金属製の扉など電波を通さない壁がある場合です。
この状況下では、コリジョンが大量に発生してしまいます。コリジョンが発生すると送信者には ACK が戻ってこないので、ACK の検知できない状態が続くと送信者は『隠れ端末がいる』と判断し、RTS/CTS という仕組みでコリジョンを回避しようとします。
これは無線クライアントが通信を開始したいときにまず RTS (Request To Send) を送信します。そして無線 AP は RTS のうち 1 台のみを CTS (Clear To Send) で指名します。
指名された PC はデータ送信を開始します。指名されなかった PC は ACK が完了するまでデータ送信を抑制します。
なお、RTS は短いフレームであるためコリジョンの発生確率は低いですし、万が一コリジョンしても通常のデータ送信時よりは無効な時間が短くて済みます。
この CTS/RTS は隠れ端末のコリジョン回避には効果的なのですが、通信効率はとても悪くなります。なので一般的な実装としては、ある程度 ACK が戻ってこない場合に RTS/CTS を投げるようになっています。
さらし端末問題 (Exposed Node Problem)
隠れ端末と逆の問題もあります。
コリジョン回避の仕組みでは無線クライアントは無線 AP を識別しません。なので別の無線 AP に接続中であったとしても、隣に別の同一チャネルの無線 AP/無線クライアントがあり、そこからの電波をキャッチすると『ビジー』状態になり、通信を抑制してしまいます。
これを『さらし端末問題 (Exposed Terminal Problem)』と呼びます。
無線コントローラで一元管理している場合であっても、無線 AP 同士で電波が届かない場合はチャネルの干渉を検知できず、チャネルの自動制御が働きません。その間に無線クライアントがある場合、無線クライアント同士が干渉し合う可能性があるのです。
WiFi-6 (IEEE802.11ax) による改善
隠れ端末問題は近くにいて電波が届かないと発生し、さらし端末問題は近くにいて電波が届くと発生します。
つまり無線はそもそもの仕組みとしてクライアントが密集して使うことには弱いのです。
ですが無線 (Wi-Fi) が当たり前になった現代において、密集して Wi-Fi を使うケースは非常に増えてきています。このことからも、高密度の複数クライアントからの同時接続性向上が強く望まれ始めました。
この期待に応えるべく、WiFi-6 (IEEE802.11ax) では今までの無線の仕組みでの命題であった『コリジョンをどう回避するか』という観点に加え、『そもそもコリジョンをせずにどう同時接続するか』という観点も取り込まれました。
詳細については以下のページをご参照下さい。
コメント