データのアクセス制御
次に,実際にデータを送受信する場合の制御方法に話しを移そう。無線LANの場合,端末Aが端末Bにデータを送るときには,まずネットワークを監視し,データが流れていないことを確認する。別の端末がデータを送っていれば,それが終わるまで待つ。これが基本動作である。
ただ,互いの無線LAN端末がたまたま同じタイミングでネットワークが空いていると判断してしまうことがあり得る。この場合,それぞれの端末が送信したデータがネットワーク上で衝突してしまう。
イーサネットでは,ネットワーク上で衝突が発生するとデータフレームが壊れる。あて先アドレスが壊れたフレームはネットワーク上をさまよい,だれかがそのフレームを受け取る。壊れたフレームを受け取った端末は,(すでに送信元が誰かもわからないため)ネットワーク全体にジャムと呼ぶ信号を送出する。本来の送信元だった端末は,このジャム信号を受信することで自分のデータが衝突し,送信に失敗したことを知る。これがイーサネットの衝突検出である。
ところが無線の場合,電波の信号レベルの変動が激しいため,衝突により信号そのものが消失してしまうことがある。このため衝突を検出できるとは限らない。
そこで802.11で採用したのは,衝突を検出する代わりにデータ送受信の成功を通知する方法である(図9[拡大表示])。送信された電波(データ)は,電波が届く範囲にいる端末すべてが受信する。この電波を受信した端末は,自分たちは待つ必要があると判断でき,データ送信を控える。
データの受け手であるアクセスポイントは,正常に受信し終わったところでACK(Acknowledge)を送出する。送信元端末にとってはACKが送信成功を示すサインとなる。他の端末はACKでネットワークが使用可能になったと判断できる。この方法を,CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance:キャリア検知多重アクセス/衝突回避)方式と呼ぶ。失敗を通知するイーサネットに対し,無線LANでは成功を通知するという方法を採る。
効率の良い制御と隠れ端末問題
とはいえ,衝突の可能性はゼロではない。実際に衝突が起こった場合はどうなるかを示したのが図10[拡大表示]である。衝突を検出する機構がないため,衝突が発生しても受け手であるアクセスポイントは送られたフレームを無視するだけだ。一方,データを送信した端末A,端末Bは一定時間待ってもACKが返って来ないため,送信に失敗したと判断する。それぞれの端末は,ランダムな時間待って再び送信する。図9の(1)に戻るわけだ。
ただし,端末数が増えてトラフィックが増大してくると,この方式では効率が悪い。失敗した場合に一定時間待ってリトライするためだ。そこで,もっと明示的に送信の成否を判断できるようにしたのがRTS(Request to Send)/CTS(Clear to Send)と呼ぶ方式である(図11[拡大表示])。
これは図9のプロセス,つまりデータを送信する前に行われる。データを送ってよいかをあて先に問い合わせ(RTS),許可を得て(CTS)からデータフレームを送る方式だ。他の端末は,別の端末あてのCTSを受け取ってから,次にACKが送られてくるまでの間は確実に送信できないとわかり,衝突の危険性を軽減できる。
RTS/CTS方式は,単に衝突を回避するためだけのものではない。無線LAN特有の隠れ端末問題に対する有効な解でもある(図12[拡大表示])。インフラストラクチャ・モードでは,同じアクセスポイントを利用する無線LAN端末が互いの電波が届く範囲に設置されなくてもよい。アクセスポイントとの間で電波が届けばよい。このため,アクセスポイントの電波は受け取れるが,他の端末の電波は受け取れないケースが考えられる。これが隠れ端末問題だ。図9の(1)の端末Bのように,端末Aが送信中であることを検知できるとは限らない。そこで,すべての端末と交信できるアクセスポイントがCTSを送ることで送信の成否を確実に通知する。
しかし,短いデータを送受信する場合,RTS/CTSはオーバーヘッドにもなり得る。直接データを送ってしまった方がネットワークの占有時間が短くなるケースもある。多くの無線LAN機器はデータの大きさでRTSを先に送るか,データをいきなり送信するかを使い分けている。