隠れ端末問題と RTS/CTS による解決
Wi-Fiで「電波は届いているのに速度が出ない」原因の多くは隠れ端末。電波到達範囲の非対称が生む衝突を、RTS/CTSとNAVがどう予約で防ぎ、その代償に何を失うかが腑に落ちる。
- 1.隠れ端末は、互いの電波が届かない2端末が同じ受信側で衝突する現象。キャリアセンスは送信元の電波しか聴かないため原理的に検出できず、受信側でだけ被害が出る。
- 2.RTS/CTSは受信側がCTSを全方位放送し、その所要時間を聞いた周囲がNAV(仮想キャリアセンス)を立てて沈黙する予約方式。見えない相手どうしを、両方から見える受信側が時間調停する。
- 3.代償は往復2フレーム+IFSのオーバーヘッドと、干渉しない端末まで黙らせるさらされ端末問題。短いフレームには損なので、RTSしきい値で長いフレームだけに適用する。
キャリアセンスが前提とする「対称性」が崩れる
CSMA/CA の基本は、送信前に媒体が空いているか電波を聴くキャリアセンスです(/network/wifi-csma-ca/ 参照)。この方式が衝突を防げるのは、ひとつの暗黙の前提に依存しています。すなわち 「ある端末の送信は、その送信と干渉しうるすべての端末から聞こえる」 という到達範囲の対称性です。
有線イーサネットの共有バスではこれが成り立ちます。1本のケーブルに乗った信号は全ノードへ届くため、誰かが送れば全員に聞こえ、キャリアセンスが正しく機能しました(/network/ethernet-switching-internals/ 参照)。ところが無線では、端末ごとに電波の届く円(カバレッジ)が異なり、この前提が崩れます。A の送信が B には聞こえるが C には聞こえないという非対称が常態化するのです。衝突は「電波が重なる場所」で起きるのに、キャリアセンスは「自分の周囲」しか聴けない——この観測点と衝突点のズレが、隠れ端末・さらされ端末という2つの問題の根です。
隠れ端末問題:観測できない衝突
A ●────────● AP ●────────● C
〔Aの到達圏〕 〔Cの到達圏〕
A と C は互いの到達圏の外にいる
端末 A と C はどちらも AP と通信できますが、互いの電波は届きません。A が AP へ送信中でも、C の物理キャリアセンスには A の電波が映らないため、C は「媒体は空き」と誤判断して送信を始めます。結果、AP の位置で A と C のフレームが重なって壊れます。
ここで重要なのは、衝突を観測できる位置と被害が出る位置が一致しないことです。被害は受信側(AP)で生じるのに、送信判断はそれぞれの送信側で下されます。A も C も自分の周囲しか聴いておらず、相手が見えないので、両者にとって自分の送信は常に「正当」に見えます。物理キャリアセンスは送信元の電波しか拾えないため、この衝突は原理的に防げません。端末密度やフレーム長が増えるほど A と C の送信が重なる確率が上がり、再送が増え、実効スループットが崩れていきます。
隠れ端末は特定の不良端末ではなく、2端末の幾何学的な位置関係が生む現象です。A から見て C が隠れ、同時に C から見て A が隠れる、という相互の不可視性が本質です。だからアンテナ感度を上げても、別の隠れペアが現れるだけで根本解決にはなりません。送信側のキャリアセンスだけでは足りず、受信側を巻き込んだ調停が必要になります。
NAV:電波を聴かずに「予約済み」と知る
解決の鍵は、物理キャリアセンス(実際の電波を聴く)に加えて仮想キャリアセンスを導入することです。各 802.11 フレームのヘッダには Duration フィールドがあり、「このやり取りがあと何マイクロ秒続くか」を示します。これを受け取った端末は NAV(Network Allocation Vector) というカウンタにその値を設定し、カウンタが0になるまでは電波を聴かずとも媒体は使用中とみなします。
物理・仮想のどちらか一方でも「使用中」なら送信を控える、という二重チェックになります。NAV の妙は、自分宛てでないフレームの Duration からも予約時間を読み取れることです。傍受したフレームの「あと N マイクロ秒続く」という宣言さえ聞こえれば、中身の送受信端末が見えなくても沈黙できる。この性質が、次の RTS/CTS で隠れ端末を救う土台になります。
RTS/CTS:見えない相手を受信側が時間調停する
RTS/CTS ハンドシェイクは、データ送信の前に短い予約フレームを2往復させ、周囲に NAV を立てさせる仕組みです。
| 手順 | フレーム | 向き | Durationに込める意味 | 効果 |
|---|---|---|---|---|
| 1 | RTS(送信要求) | A → AP | CTS+DATA+ACK+3*SIFS の残り時間 | 送信意図と所要時間を宣言。Aの周囲がNAVを立てる |
| 2 | CTS(送信可) | AP → 全方位 | DATA+ACK+2*SIFS の残り時間 | 許可を放送。APの周囲(=隠れ端末Cを含む)がNAVを立てる |
| 3 | DATA | A → AP | ACK+SIFS の残り時間 | 実データを送信 |
| 4 | ACK | AP → A | 0(やり取り終了) | 受信成功を通知。NAVが解放される |
核心は CTS が受信側(AP)から全方位へ送られることです。隠れ端末 C は A の RTS こそ聞こえませんが、AP からの CTS は届きます。C は CTS の Duration を読んで NAV を設定し、その期間は沈黙します。つまり、互いに見えない A と C を、両方から見える AP が仲介して時間を割り当てるわけです。RTS は A 側の隠れ端末を、CTS は AP 側(C 側)の隠れ端末を、それぞれカバーします。両方を放送して初めて、衝突しうる全端末を NAV で覆えます。
擬似コード:送信側 A の RTS/CTS 付き送信
if フレーム長 <= RTSしきい値:
通常のCSMA/CA手順で直接DATAを送る # 短いので保護不要
else:
DIFS待ち + ランダムバックオフ
RTS送信(Duration = 残り全工程の所要時間)
if SIFS以内にCTS受信:
SIFS待ち → DATA送信
SIFS以内にACK受信できれば成功
else:
# CTSが返らない=予約失敗(衝突 or 競合)
CWを2倍に広げてバックオフし再試行
CTS が返らなければ予約段階で失敗したと分かり、重い DATA を送る前にやり直せます。長いフレームを送って衝突で丸ごと失う代わりに、短い RTS の損失で済ませられる——これが RTS/CTS が「コストに見合う」核心の理屈です。
さらされ端末問題:予約が引き起こす逆の副作用
RTS/CTS は逆向きの非効率も生みます。**さらされ端末問題(exposed terminal problem)**です。
D ●────● B ●────────● AP ●────● C
B が AP へ送信中。Dはその電波を聞いてしまう
B が AP へ送信中、近くの端末 D は B の送信(や CTS)を傍受して NAV を立て、沈黙します。しかし D の通信相手が反対方向にいて B の受信側と干渉しないなら、D は本来 B と同時に送れたはずです。キャリアセンスや NAV は「電波が聞こえる=送ってはいけない」と安全側に倒すため、干渉しない送信機会まで潰してしまうのです。
| 観点 | 隠れ端末問題 | さらされ端末問題 |
|---|---|---|
| 症状 | 送るべきでない端末が送ってしまう | 送れるはずの端末が送らない |
| 結果 | 衝突が起きる(偽陰性) | 帯域が遊ぶ(偽陽性) |
| 損なわれるもの | 信頼性・再送増 | スループット・並列度 |
| RTS/CTSの効果 | 緩和できる | むしろ悪化させうる |
| 観測点と衝突点 | ズレが衝突を見逃させる | ズレが過剰な遠慮を生む |
両者は同じ非対称の裏表です。聞こえない相手を無視すると隠れ端末で衝突し、聞こえる相手に常に遠慮するとさらされ端末で帯域を失う。キャリアセンスという単純な規則が、幾何学的な配置しだいで両極端の誤りに振れるのです。
オーバーヘッドとのトレードオフ
RTS/CTS には往復2フレーム+それぞれの前後の SIFS という固定コストがかかります。短いデータフレームにこれを毎回付ければ、予約のための時間がペイロードの送信時間を上回りかねません。
実装では RTS しきい値(バイト長)を設け、それを超える長いフレームにだけ RTS/CTS を適用します。理由は損得が長さで逆転するからです。短いフレームは衝突しても再送コストが小さく、保護のオーバーヘッドのほうが高くつく。逆に長いフレームは衝突時に失う送信時間が大きく、短い RTS で先に予約する価値が出る。しきい値を最大値に張れば実質「RTS/CTS 無効」、小さくすれば「常時有効」になります。多くの環境では隠れ端末が少なく、既定では無効に近い設定が選ばれます。
判断は端末密度と隠れ端末の有無に依存します。次の系統で整理できます。
- 隠れ端末が少なく低密度 → RTS/CTS のオーバーヘッドが純損失。無効が有利。
- 隠れ端末が多く長フレーム主体(例:障害物の多い屋内、AP を中心に端末が広く散在) → 衝突回避の利得がオーバーヘッドを上回る。しきい値を下げて有効化。
- 超高密度・短フレーム主体(例:IoT 多数) → RTS/CTS 自体が競合資源を食う。フレーム集約やスケジュール送信など、競合そのものを減らす別系統の手法が主役になる。
リンク速度の表示が高くても、隠れ端末が多い環境では AP 上で衝突と再送が積み重なり、実効スループットが大きく削られます。さらに RTS/CTS を有効化すると今度は予約フレームのオーバーヘッドが乗り、さらされ端末で並列送信機会も減ります。帯域(公称速度)と実効スループットが別物である背景は /network/bandwidth-latency/ も併読すると立体的に理解できます。802.11e/WMM の優先制御(/network/qos/ 参照)も、こうした共有媒体上の時間配分の延長にあります。
「隠れ端末はなぜキャリアセンスで防げないか」→ センスは送信元の電波しか聴かず、衝突は受信側で起きるため観測点と衝突点がズレる。「RTS/CTS の核は」→ 受信側が CTS を全方位放送し、周囲が Duration から NAV を立てて沈黙する予約。「NAV とは」→ 自分宛て以外のフレームの Duration から媒体使用中を判断する仮想キャリアセンス。「さらされ端末とは」→ 干渉しないのに NAV で遠慮しスループットを失う逆問題。「RTS しきい値の意義は」→ 長いフレームだけ保護しオーバーヘッドと利得を釣り合わせる。この5点を因果で結べれば上級。
まとめ
隠れ端末・さらされ端末は、無線の電波到達範囲の非対称性という単一の原因から生じる表裏の問題です。キャリアセンスは送信側の周囲しか聴けず、衝突が起きる受信側を観測できないため、聞こえない相手を見逃せば衝突し(隠れ端末)、聞こえる相手に遠慮しすぎれば帯域を失います(さらされ端末)。RTS/CTS は、両方から見える受信側に CTS を全方位放送させ、**NAV(仮想キャリアセンス)**で周囲を時間予約することで、見えない端末どうしを調停します。ただし往復2フレームのオーバーヘッドとさらされ端末という代償を伴うため、RTS しきい値で長いフレームだけに適用し、利得とコストを釣り合わせるのが定石です。共有された空間を、見えない相手まで含めて時間で公平に分け合う——その難しさと工夫が、無線 MAC 設計の核心に凝縮されています。
ネットワーク Article
隠れ端末問題と RTS/CTS による解決を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
Wi-Fi
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
RTS/CTSは受信側がCTSを全方位放送し、その所要時間を聞いた周囲がNAV(仮想キャリアセンス)を立てて沈黙する予約方式。見えない相手どうしを、両方から見える受信側が時間調停する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「Wi-Fi / 隠れ端末」に近いか確認する。
- 強みである「隠れ端末は、互いの電波が届かない2端末が同じ受信側で衝突する現象。キャリアセンスは送信元の電波しか聴かないため原理的に検出できず、受信側でだけ被害が出る。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。