【実務・中級編】 5G ミリ波(FR2: 24.25GHz〜52.6GHz)の物理特性と直進性 – 家庭用ネットワーク・IoT・モバイル通信実践ガイド

5Gミリ波の「光のような通信」をどう御するか──インフラエンジニアのための物理層からの実装戦略

「5Gに繋いでいるはずなのに、なぜかAPIのレスポンスが極端に不安定になる」。現場でそんな相談を受けるたび、私は決まって「それ、ミリ波の壁にぶつかってるんじゃないか?」と聞き返します。

スペックシート上の「下り最大数Gbps」という甘い数字に踊らされてはいけません。ミリ波(FR2帯域)は、我々が長年付き合ってきたSub6やLTEとは、もはや別世界の物理法則で動いています。今回は、この「扱いづらくも強力な帯域」を、Web API設計やインフラ運用の視点からどう手懐けるべきか、泥臭い知見を共有しましょう。

—

1. ミリ波の正体:空気中を走る「光」に近い電波

ミリ波(24.25GHz〜52.6GHz)の本質は、その圧倒的な直進性と引き換えに失った「回折性」にあります。

  • 直進性の強さ: 障害物を回り込む能力は皆無に等しい。
  • 遮蔽物による減衰: 手で覆う、あるいは窓ガラス一枚挟むだけで、RSSI(受信信号強度)は劇的に落ちます。
  • 大気吸収: 雨粒や湿度ですら、この高い周波数の波長にとっては立ちはだかる壁となります。

インフラエンジニアとして理解すべきは、「ミリ波は電波というより、指向性の強い光ビームに近い」という点です。基地局(gNB)と端末(UE)の間で精密なビームフォーミングが行われていますが、ユーザーが少し動くだけで通信経路は瞬時に切り替わり、TCPの再送制御が追いつかないほどのジッターが発生します。

—

2. API設計とインフラ側で考慮すべき「再送」の哲学

ミリ波環境下では、パケットロスが「日常」です。もしあなたのAPIが、レイテンシの揺らぎに弱い設計であれば、即座に見直す必要があります。

タイムアウトとリトライ戦略の最適化

ミリ波特有の「瞬断」を考慮し、アプリケーション層では以下のような対策が必須です。

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# ミリ波のジッター(瞬断)を考慮したリトライ戦略
# 接続エラーや5xxエラーに対し、指数バックオフで再試行する
retry_strategy = Retry(
    total=5,  # 合計リトライ回数
    backoff_factor=0.5,  # 待機時間を段階的に増やす(0.5s, 1s, 2s...)
    status_forcelist=[500, 502, 503, 504],
    allowed_methods=["HEAD", "GET", "OPTIONS"]
)

adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)

# タイムアウト値は少し広めに設定(ミリ波の再送待ちを考慮)
try:
    response = http.get("https://api.example.com/data", timeout=(3.0, 10.0))
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"ミリ波環境での接続エラーを検知: {e}")

—

3. 実践:デバッグ時の指標と curl による疎通確認

トラブルシューティングの際、単に ping を打ってもミリ波の不安定さは見えません。HTTPヘッダーの情報を詳細に見ることで、どこで詰まっているかを特定します。

# ヘッダー情報の詳細を表示し、TCP/TLSハンドシェイクの時間を確認
# --trace-time で各処理に何ミリ秒かかったかを可視化する
curl -Iv https://api.example.com/v1/resource \
  --trace-time \
  --connect-timeout 5 \
  --max-time 15

ここで注目すべきは、Connection #0 left intact に至るまでの時間です。ミリ波環境では、SSL handshake に時間がかかるケースが散見されます。これは、最初のハンドシェイク中にビームフォーミングの切り替え(ハンドオーバー)が発生し、パケットが迷子になっているサインです。

—

4. なぜ「ミリ波のパケット」は届きにくいのか(パケットフローの視点)

ミリ波の通信フローにおいて、物理層(L1)では Beam Management というプロセスが常に走っています。

1. Beam Sweeping: 基地局が全方位に電波を走査し、最適な経路を探す。
2. Beam Tracking: 端末の移動に合わせてビームを追従させる。

この Beam Tracking が追いつかないとき、TCPの Congestion Window (CWND) は容赦なく縮小されます。インフラ側で BBR (Bottleneck Bandwidth and Round-trip propagation time) プロトコルを採用しているサーバーであれば、ジッターに対する耐性は向上しますが、それでも「ミリ波の壁」は厚い。

LinuxサーバーでのBBR有効化(推奨設定)

インフラ構築時に、TCPの輻輳制御を bbr に設定しておくことを強く推奨します。

# 現在の輻輳制御アルゴリズムを確認
sysctl net.ipv4.tcp_congestion_control

# BBRを有効にする設定
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 設定の適用
sysctl -p

—

最後に:ミリ波を「あてにしすぎない」勇気

ミリ波は魔法の杖ではありません。設計の基本は「ミリ波が切れても、Sub6やLTEにシームレスに切り替わる前提で、いかにサービスを継続させるか」です。

  • オフラインファースト: アプリ側でデータをローカルキャッシュする。
  • 非同期処理: 通信断を前提としたメッセージキューイングの導入。
  • CDNの活用: エッジサーバーに近い場所でレスポンスを返し、往復時間を最小化する。

物理的な制約を技術で捻じ伏せるのではなく、その制約を前提とした「しなやかなインフラ」こそが、これからの5G時代のスタンダードです。現場でのトラブル対応に悩んだときは、ぜひ一度「物理層の挙動」に立ち返ってみてください。そこには必ず、解決へのヒントが隠されています。

コメント

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