【テクニカル・上級編】 モバイル網におけるパケットロス・Jitter・遅延(RTT)の測定手法と影響 – 家庭用ネットワーク・IoT・モバイル通信実践ガイド

モバイル網のパケット揺らぎとトランスポート層の限界:Sub6/ミリ波時代のパケット解析とカーネルチューニング

現代のモバイルネットワークは、4GのLTEから5G(Sub6およびミリ波)へと移行し、理論値ではGbpsを超えるスループットを叩き出すようになりました。しかし、インフラエンジニアやテックリードである私たちにとって、この「圧倒的な高速化」が必ずしもアプリケーションの快適性に直結しないことは、現場のメトリクスを見れば痛いほど分かっているはずです。

無線区間(Air Interface)という本質的に不安定な媒体を挟むモバイル網では、電波干渉、ビル陰への回り込み、そして基地局間のハンドオーバー(HO)によって、パケットロス、Jitter(遅延揺らぎ)、RTT(Round Trip Time)の急激な悪化が常態的に発生します。

今回は、この目に見えない無線空間のゆらぎが、TCP/UDPのトランスポート層、さらにはTLSハンドシェイクや上位アプリケーションにどのような絶望をもたらすのか。そして、Linuxカーネルチューニングや最新のプロトコルスタックを用いて、この物理的なハンデをどこまで克服できるのかを、パケットレベルの挙動から徹底的に紐解いていきます。

—

1. 無線区間のダークサイド:パケットロス、Jitter、遅延の正体

有線LANやデータセンター内の閉じたネットワークであれば、遅延はほぼ光速とキューイング遅延(Bufferbloat)の関数として綺麗にモデル化できます。しかし、モバイル網、特に5GのSub6やミリ波の領域に入った瞬間、パケットの運命は劇的に変化します。

ミリ波・Sub6特有の動的変動とハンドオーバー

ミリ波(28GHz帯など)は直進性が異常に高く、木の葉が揺れたり、ユーザーが身体の向きを変えたりしただけで、瞬間的な減衰(パスロス)が発生します。これに伴い、物理層(PHY)およびMAC層では、MCS(Modulation and Coding Scheme:変調符号化方式)が急速に低次(例:64QAMからQPSKへ)へとフォールバックします。

このとき、無線リソース制御(RRC)層やRLC(Radio Link Control)層では、再送制御(ARQ / HARQ)が発動します。

  • HARQ(Hybrid ARQ): 物理・MAC層でミリ秒単位の再送を行い、誤り訂正を行います。これによりパケットロスは隠蔽されますが、一時的な遅延(Spike)として観測されます。
  • RLC AM(Acknowledge Mode): 無線区間での確実性を担保するため、ここでパケットが滞留します。結果として、上位のIP層から見ると「パケットが突然消えたように遅延し、その後ドバッとまとめて届く」という、極端なJitterとして現れます。

また、セル境界でのハンドオーバー時には、X2/Xnインターフェイス経由でのパケット転送(Forwarding)が発生するため、数十ミリ秒から数百ミリ秒の通信断(ブラックアウト)が発生します。

—

2. トランスポート層とTLSへの致命的な影響

この無線特有の挙動は、TCPおよびTLSのステートマシンに強烈な負荷をかけます。

TCPの輻輳制御アルゴリズムの誤認

従来のCUBICなどの損失ベースの輻輳制御(Loss-based Congestion Control)は、「パケットロス = ネットワークの混雑(Congestion)」と仮定して設計されています。
しかし、モバイル網でのパケットロスは、多くの場合「電波状態の悪化による無線区間のエラー」です。ルーターや基地局のキューがあふれているわけではないのに、TCPがこれを混雑と誤認し、混信ウィンドウ(cwnd)を不必要に縮小させてしまいます。これが、5Gエリア内であるにもかかわらず「なぜかウェブの読み込みがもたつく」という現象の正体です。

TLSハンドシェイクのRTTペナルティ

TLS 1.3により、ハンドシェイクは1-RTT(早期データがあれば0-RTT)まで短縮されました。しかし、モバイル網でこれが持つ意味は重い。
もしハンドシェイクのパケットがハンドオーバー直後のJitterスパイクに重なると、SYNパケットやClient Helloがロストし、RTO(Retransmission Timeout)のタイマー(通常初期値は1秒)が満了するまでセッションが完全にフリーズします。ユーザー体験(UX)の観点から、この1秒の遅延は致命傷です。

—

3. 実践:パケットロス・Jitter・RTTの正確な測定手法

感覚的な「遅い」を排除し、定量的なボトルネックを特定するためには、適切なツールでレイヤーごとのメトリクスを収集する必要があります。

iperf3によるスループットとJitterの分離計測

UDPを用いた計測では、ロス率とJitterを正確に切り分けることができます。

# サーバー側(クラウド上の踏み台等)で待受
iperf3 -s

# クライアント側(モバイル回線接続端末)からUDPで帯域・Jitterを測定
# -b で帯域を固定し、無線区間への負荷と応答を検証する
iperf3 -c <サーバーのIPアドレス> -u -b 10M -t 30 --json > mobile_iperf_result.json

ss および iproute2 によるカーネル内TCPメトリクスのリアルタイム監視

OSのトランスポート層が現在どのようにパケットロスやRTTを認識しているかは、ssコマンドの拡張出力から詳細に読み取れます。

# 接続中のTCPソケットのRTT、輻輳ウィンドウ(cwnd)、再送状況をリアルタイムに確認
ss -i 'sport = :https'

*出力例の読み方:*
cong_alg cubic rtt:45.2/12.8 ato:40 mss:1440 rcvspace:14600 ssthresh:10 cwnd:15
ここで rtt の後ろの数値(平均RTT / 揺らぎ)や cwnd の値をモニタリングすることで、無線区間によるカーネルの挙動不審をあぶり出すことができます。

—

4. 極限のパフォーマンスを引き出すLinuxカーネルチューニング

モバイル網の理不尽なJitterやロスに対抗するためには、Linuxのネットワークスタックを「モバイルファースト」に調律する必要があります。

BBR(Bottleneck Bandwidth and Round-trip propagation time)の導入

前述の通り、損失ベースのCUBICはモバイル網と相性が最悪です。Googleが開発したBBRは、パケットロスではなく「帯域と伝搬遅延」をベースに輻輳制御を行うため、無線区間の誤ったロスに惑わされず、利用可能な最大の帯域を維持します。

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

# 一時的にBBRへ切り替え
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 永続化設定 (/etc/sysctl.conf に追記)
echo "net.core.default_qdisc = fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.conf

*解説:* BBRを有効化する際は、公平なキューイングを行う fq(Fair Queue)スケジューラを同時に有効化することが必須です。これにより、バッファーブロット(Bufferbloat)による遅延増大を防ぎます。

TCPバッファサイズと初期ウィンドウ(IW10/IW20)の最適化

モバイル回線では、変動するBandwidth-Delay Product (BDP) に素早く追従できるよう、初期輻輳ウィンドウ(Initial Window)を広めに設定することが有効です。

# /etc/sysctl.conf でのネットワークバッファと初期ウィンドウのチューニング例

# TCP送受信バッファの最大値・デフォルト値の調整 (動的メモリ割り当てを有効化)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 初期輻輳ウィンドウを広げ、ハンドシェイク直後の転送量を最大化
# (※カーネルバージョンによりルーティングメトリクス側で制御する場合あり)

—

5. セキュリティとパフォーマンスの両立:TLS / QUIC の選択

パケットロスと遅延のコンボに対する究極の回答が、UDPベースのトランスポートプロトコルであるQUIC(およびその上に構築されるHTTP/3)です。

TCPの「ヘッドオブライン(Head-of-Line)ブロック」の呪縛

通常のTCPは、1つのパケットがロストすると、その後に届いた正しいパケットも含めて、失われたパケットが再送されて順序が復元されるまでアプリケーション層へ渡せません(TCPのヘッドオブライン・ブロック)。モバイル網でこれが起きると、わずか1つの無線パケットのドロップが、Webページ全体の描画停止を引き起こします。

QUICがモバイル網にもたらす救済

QUICはUDP上で動作し、ストリームごとに独立した多重化を行います。

  • ストリーム単位の孤立化: 仮にストリームAのパケットがロストしても、ストリームBのデータは影響を受けずに処理を続行できます。
  • 接続マイグレーション(Connection Migration): モバイル端末がWi-Fiから5Gへ、あるいは基地局Aから基地局Bへハンドオーバーし、IPアドレスやポートが変化しても、CID(Connection ID)によってTCPのようなハンドシェイクをやり直すことなく、セッションをシームレスに維持します。

—

まとめ:インフラエンジニアが取るべきアプローチ

モバイル網におけるパケットロス・Jitter・RTTの制御は、単に「回線が太くなったから解決する」という単純な話ではありません。電波という物理的揺らぎの上で動く以上、トランスポート層やカーネルの挙動を深く理解し、プロトコルレベルで最適化を行うことが不可欠です。

1. 損失ベース(CUBIC)から遅延・帯域ベース(BBR)への移行で、無線起因の誤認ロスによるスループット低下を防ぐ。
2. QUIC / HTTP/3 の積極的な採用により、ハンドオーバーや軽微なパケットロスによるヘッドオブライン・ブロックを回避する。
3. 継続的なメトリクス監視(iperf3, ss等)を行い、自社サービスがどのようなネットワーク特性のユーザーに利用されているかをデータで把握する。

パケットの挙動に目を凝らし、カーネルからアプリケーション層までを貫く一気通貫のチューニングを行うことこそが、次世代のモバイル環境において最高のUXを提供するための唯一の道筋なのです。

コメント

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