【図解/wifi】初心者向け CSMA/CA と CTS/RTS の仕組み ~隠れ端末問題とさらし端末問題~
有線 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 は待たなければなりません。
無線は電磁波であり、光の速度と同じです。光ファイバ等のガラスの中での光の速度は 190,000 km/s ですが、空気中の電磁波の速度は 299,792 km/s です。無線は近距離しか届きませんが、伝搬遅延は有線よりも小さいのです。ただし、コリジョンによる遅延のほうが優位のため、一般に (コリジョンが発生しない) 有線より無線のほうが遅延は大きいです。
隠れ端末問題 (Hidden Node Problem)
無線クライアントが別の無線クライアントの電波を常に検知できるとは限りません。これが『 隠れ端末問題 (Hidden Node Problem)』です。
この状況下では、コリジョンが大量に発生してしまいます。コリジョンが発生すると送信者には ACK が戻ってこないので、ACK の検知できない状態が続くと送信者は『 隠れ端末がいる 』と判断し、 RTS/CTS という仕組みでコリジョンを回避しようとします。
これは無線クライアントが通信を開始したいときにまず RTS (Request To Send) を送信します。そして無線 AP は RTS のうち 1 台のみを CTS (Clear To Send) で指名します。
指名された PC はデータ送信を開始します。指名されなかった PC は ACK が完了するまでデータ送信を抑制します。
この 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) では今までの無線の仕組みでの命題であった『コリジョンをどう回避するか』という観点に加え、『 そもそもコリジョンをせずにどう同時接続するか 』という観点も取り込まれました。