【実務・中級編】 Wi-Fi 6/7におけるガードインターバル(GI)の調整 – 家庭用ネットワーク・IoT・モバイル通信実践ガイド

こんにちは。日夜、パケットの荒波と格闘しているネットワークエンジニアの皆さん、お疲れ様です。

現代のインフラ構築やWebアプリケーションの開発において、クラウドの可用性やデータベースのチューニングに頭を悩ませることは日常茶飯事ですが、その大元を支える「ラスト1マイル」の物理層・MAC層の挙動にまで目を向けていますか?

「APIのレスポンスタイムがなぜか不規則に数秒跳ねる」
「オフィスの高密度環境で、特定のIoTゲートウェイからの死活監視がプチプチ途切れる」

こうした現場の泥臭いトラブルに直面したとき、クラウド側のログをいくら眺めても答えは見つかりません。原因は、オフィスの天井裏を飛び交う電波の「マルチパス干渉」、そしてそれを制御するWi-Fiの隠れたパラメータ――ガードインターバル(Guard Interval: GI)にあるかもしれません。

今回は、Wi-Fi 6(802.11ax)およびWi-Fi 7(802.11be)の時代において、このGIがどのように通信の安定性とスループットを左右しているのか、シニアエンジニアの視点から実務的なチューニングの勘所を徹底解説します。教科書には載っていない、現場のリアルな知見を共有しましょう。

—

1. ガードインターバル(GI)とは何か? なぜ今、見直されているのか

私たちの身の回りにある空間は、ルーターから発せられた電波が壁や床、天井、さらにはデスクのパーテーションに反射して届く「マルチパス」の迷宮です。送信された電波は、それぞれ異なる経路(距離)を通るため、受信側にはわずかな時間差(遅延時間)を持って到達します。

この時間差が前のシンボル(データのかたまり)と次のシンボルの境界を曖昧にし、シンボル間干渉(ISI: Inter-Symbol Interference)を引き起こします。これが、パケットロスや再送多発の元凶です。

GIという名の「安全地帯」

このISIを防ぐために、OFDM(直交周波数分割多重)やOFDMAのシンボルとシンボルの間に意図的に挿入される無音の「余白(ガードタイム)」がガードインターバル(GI)です。

  • GIを長くする(保守的): マルチパスの遅延広がり(Delay Spread)を吸収しやすくなり、パケットエラー率は下がりますが、余白の分だけ純粋なデータ転送速度(スループット)が低下します。
  • GIを短くする(攻撃的): 余白を削ることで単位時間あたりのデータ量を増やし、理論上の最大スループットを押し上げますが、少しの反射波の遅延でISIが発生し、リンクが不安定になります。

Wi-Fi 6/7におけるパラメータの進化

従来のWi-Fi 5(802.11ac)までは、主に 800ns のGIが標準でした。しかし、Wi-Fi 6(802.11ax)および最新のWi-Fi 7(802.11be)では、高密度化と超高速化の両立のため、より細やかなGIの選択肢(3.2us の長大なシンボル長に対するバリエーション)が導入されました。

具体的には、以下のパターンのGIが規定されています。

| GI設定モード | ガードインターバル時間 | 特徴・ユースケース |
| :— | :— | :— |
| Normal GI | 800ns | 従来のWi-Fiに近い標準的な設定。一般的なオフィス環境向け。 |
| Short GI | 400ns | スループット優先。見通しが良く、マルチパスが少ない環境向け。 |
| HE/EHT Long GI | 1600ns / 3200ns | 高マルチパス環境(工場、コンクリート造、倉庫など)や長距離通信向け。エラー耐性が極めて高い。 |

Wi-Fi 6/7のエンコーディング(最大4096-QAMなど)を極限まで活かすには、このGIを環境に合わせて正しくハンドリング、あるいは自動追従させることがインフラエンジニアの腕の見せ所となります。

—

2. 通信の裏側:GI調整とAMC(適応変調符号化)のシーケンス

無線区間(Wi-Fi)におけるクライアント(STA)とアクセスポイント(AP)の間では、電波状態(RSSIやSNR、遅延広がり)をリアルタイムで監視し、動的にMCS(Modulation and Coding Scheme)やGIの長さを変更する仕組みが働いています。

現場でトラブルシューティングを行う際、以下のシーケンスが頭に入っていると、パケットキャプチャ(Wireshark等)を見たときの解像度が劇的に変わります。

[クライアント (STA)]                     [アクセスポイント (AP)]
        │                                         │
        │── 1. プローブ要求 / 接続リクエスト ───────▶│
        │◀── 2. アソシエーション応答(機能通知) ───│ (HE/EHT能力、サポートGIの交換)
        │                                         │
        │── 3. データフレーム送信(初期MCS/GI) ──▶│
        │                                         │ (ここでマルチパスや減衰を測定)
        │◀── 4. Block Ack (BA) / SNRフィードバック─│
        │                                         │
        │   [電波環境が悪化・遅延広がりを検出]     │
        │                                         │
        │◀── 5. Actionフレーム(RTS/CTS or 制御)──│ (AP側からGIを 800ns から 1600ns へ変更指示)
        │                                         │
        │── 6. レート適応(GI=1600nsで再送・継続)─▶│

実務上、クライアント端末(特に安価なIoTモジュールや古いNIC)がAPからのGI変更要求を正しく処理できず、固定レートのままでリンク切れを起こすケースが後を絶ちません。ここが、インフラ設計時の落とし穴になります。

—

3. 実務での設定・運用:Linux環境およびAPコントローラーにおけるチューニング

ここからは、実務で直面するシチュエーションを想定した具体的な設定とデバッグ手法を見ていきましょう。

例えば、Linuxベースのルーターや組み込みAP(OpenWrtやホストapd等)を運用している場合、hostapd.conf などの設定ファイルで無線パラメータを厳密に制御する必要があります。

設定ファイル例: hostapd.conf (Wi-Fi 6/7のGI・HE設定)

高密度オフィスや、金属ラックが多いデータセンター併設の監視ルームなどで、あえて保守的なGIを選択し、パケットロスを防ぐための設定例です。

# ==========================================
# Wi-Fi 6 (802.11ax) アクセスポイント設定例
# ==========================================
interface=wlan0
driver=nl80211
ssid=Corporate-IoT-Net
hw_mode=a
channel=36
op_class=128
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
vht_capab=[VHT-CAPAB]

# HE (High Efficiency / 802.11ax) の有効化
he_oper_chwidth=1
he_oper_centr_freq_seg0_idx=42

# ガードインターバルの固定・ポリシー設定
# 1 = 0.8us (Normal GI), 2 = 1.6us (Long GI), 3 = 3.2us
# 悪環境(マルチパス多発)が想定される現場では 1.6us 以上を強制することが有効
he_gi_setting=2 

# ビーコン送信間隔とDTIM
beacon_int=100
dtim_period=2

デバッグ手法:CLIを使った無線リンク状態の確認

現場で「なぜかスループットが出ない」「特定端末だけ頻繁にリンクが落ちる」という場合、Linuxホスト側から iw コマンドを用いて、現在どのGIやMCSでリンクしているかをリアルタイムに覗き見ることができます。

以下のコマンドをSSH経由で実行し、現在の物理層ステータスを確認します。

# 現在接続している無線インターフェースのリンク統計を詳細表示
iw dev wlan0 link

実行結果の読み方(出力例):

Connected to 00:11:22:33:44:55 (on wlan0)
	SSID: Corporate-IoT-Net
	freq: 5180
	RX: bytes=104857600 (104.8 MB), packets=72100
	TX: bytes=20971520 (21.0 MB), packets=15200
	signal: -55 dBm
	rx bitrate: 1201.0 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 1 HE-DCM 0
	tx bitrate: 866.7 MBit/s 80MHz HE-MCS 9 HE-NSS 2 HE-GI 2 HE-DCM 0

上記の出力に注目してください。

  • HE-GI 1: 受信(RX)側は 800ns(Short/Normal)で軽快に通信していますが、
  • HE-GI 2: 送信(TX)側は 1600ns(Long GI)にフォールバックしています。

これは、「APから端末への下り方向において、何らかのマルチパス干渉や反射波の影響があり、AP側が自動的に安全なLong GIに落としてパケットロスを防いでいる」という極めて健全、かつ重要なサインです。これを無理やり HE-GI 1 に固定(ハードニング)してしまうと、見かけ上のリンク速度は上がりますが、CRCエラーが急増し、TCPの再送制御によってアプリケーション層の体感速度(Web APIのレスポンスなど)は逆に悪化することになります。

—

4. 自動化スクリプトによるネットワーク死活・品質モニタリング

インフラ運用者として、こうした無線層の揺らぎが上位のWeb APIやHTTPリクエストにどのような影響を与えているかを検知するため、Pythonを用いた簡易的なヘルスチェック・モニタリングスクリプトを常駐させると非常に効果的です。

以下のスクリプトは、ローカルのWi-Fi経由で特定のエンドポイントに対してリクエストを送り、応答速度(Latency)とステータスをロギングするものです。無線がGIのフォールバックや再送多発を起こしている瞬間は、レイテンシのスパイク(P99の悪化)として現れます。

import time
import requests
from requests.exceptions import RequestException

# 監視対象の内部APIエンドポイント
TARGET_API_URL = "http://192.168.1.100/api/v1/health"
CHECK_INTERVAL_SEC = 5
TIMEOUT_SEC = 2.0

def monitor_network_performance():
    print(f"[*] Starting wireless path health check for: {TARGET_API_URL}")
    print(f"[*] Press Ctrl+C to stop.\n")

    try:
        while True:
            start_time = time.time()
            try:
                # APIリクエストの送信(タイムアウトを短めに設定し、無線遅延をあぶり出す)
                response = requests.get(TARGET_API_URL, timeout=TIMEOUT_SEC)
                latency = (time.time() - start_time) * 1000  # ミリ秒換算

                if response.status_code == 200:
                    print(f"[OK] Status: {response.status_code} | Latency: {latency:.2f}ms")
                else:
                    print(f"[WARN] Status: {response.status_code} | Latency: {latency:.2f}ms")

            except RequestException as e:
                elapsed = (time.time() - start_time) * 1000
                print(f"[ERROR] Connection failed or timed out after {elapsed:.2f}ms. Reason: {e}")

            time.sleep(CHECK_INTERVAL_SEC)

    except KeyboardInterrupt:
        print("\n[*] Monitoring stopped by user.")

if __name__ == "__main__":
    monitor_network_performance()

このスクリプトの実行ログと、先ほど紹介した iw dev wlan0 link の変化を突き合わせることで、「GIの自動調整(レイトレーティング)が走った瞬間にレイテンシがどう動くか」という現場の生きた相関関係が見えてきます。

—

5. シニアエンジニアからの現場の教訓(まとめ)

Wi-Fi 6やWi-Fi 7の登場により、私たちは「理論値としての超高速通信」を手に入れました。しかし、電波が飛び交う物理空間は、ホワイトボードの数式通りには動いてくれません。

  • スペックシートの最大値を追いかけない: マルチパスが多い環境であえて Short GI (400ns) を強制すると、一見速そうに見えてパケットロスと再送の嵐になり、TCPのウィンドウ制御を圧迫します。
  • 自動追従(Rate Adaptation)を信用する: 基本的にはAPとクライアントのネゴシエーション(アルゴリズム)に任せ、ログ(iw やコントローラーのメトリクス)で異常なフォールバック頻発がないかを監視する体制を作りましょう。
  • 上位レイヤーから疑わない: 「APIが遅い」「IoTデバイスのデータが欠損する」というチケットを受け取ったとき、アプリケーションコードをいじる前に、一度Wi-Fiの物理層(GIやMCS、RSSI)に目を向けてみてください。そこにすべての答えが落ちていることが、現場ではよくあります。

ネットワークのパケットは、今日もあなたのオフィスの壁や天井を反射しながら、寸分の狂いもなく目的地を目指して駆け抜けています。その挙動を解像度高く想像できるエンジニアこそが、真に信頼されるインフラ・アプリケーションの守り手です。

それでは、次のトラブルシューティングの現場でお会いしましょう。パケットに祝福を!

コメント

タイトルとURLをコピーしました