Shadowrocket の Data ページで通信量を確認する方法:サーバー別・アプリ別の数値の意味

Shadowrocket の Data ページは通信量を 2 つのグループに分けて表示します。1 つはサーバー別、もう 1 つはアプリ別です。両者の集計範囲は異なるため、合計が一致しないのは正常です。以下では、それぞれが何を集計しているのか、単位の読み方、iOS の統計と一致しない理由、そして繰り返し実行できる調査手順を説明します。

この記事の要点

すでに自分のサーバーに接続しているのに、Data ページのサーバー別とアプリ別の数字が一致しない、あるいは iOS の設定にある使用量統計と差がある、という場合のために、この記事では「入口 → 単位 → 2 つの集計範囲 → 差異の原因 → 調査手順」の順に、各数値の意味を整理し、再現可能な切り分け手順を示します。サブスクリプションの読み込みが済んでいて、数値から通信の行き先を判断したい読者向けです。全文は、すでに自分のサービス提供者とサブスクリプションがあることを前提とし、文中のサーバー名と数字は配置の説明用です。

Data ページの場所と、2 つの数値グループがそれぞれ集計するもの

Shadowrocket を開くと、画面下部のタブバーにある Data が通信量統計ページです。ページ上部にはこの期間の合計が表示され、アップロードとダウンロードは別々に表示されます。その下にグループごとの明細が並び、ページ上部でグループを切り替えると「サーバー別」と「アプリ別」の 2 つの表示を切り替えられます。接続スイッチがオフのときは通信がトンネルを通らないため、ページの数字は増えません。数値が動かないときは、まず Home に戻って上部の接続スイッチの状態を確認してください。

2 つの数値グループは集計対象が異なります。「サーバー別」は特定のサーバー項目に紐づく接続のバイト数を集計し、実際にそのサーバーを経由して転送された接続だけがこの列に現れます。「アプリ別」は接続を開始した App を集計し、接続がトンネルを通っていれば、最終的にプロキシ経由でも DIRECT でも、対応する項目に記録されます。そのため同じ期間でも 2 つの合計は通常一致せず、差額は DIRECT に一致した接続、DNS クエリ、REJECT された接続によるものです。

2 グループ
数値グループ:サーバー別 / アプリ別
1024 進法
単位換算:B → KB → MB → GB
アップロード / ダウンロード
各数値は送信バイトと受信バイトを分けて表示
スイッチ 1 つ
Home 上部の接続スイッチが累積の有無を決める

どちらを先に見るかは、知りたい内容によって変わります。通信がどのサーバーに流れたかを知りたいならサーバー別、誰が通信を開始したかを知りたいならアプリ別です。2 つを組み合わせて初めて、「特定の App」と「特定のサーバー」を対応づけられます。

単位と読み方:アップロード・ダウンロード・合計の対応関係

各数値はアップロードとダウンロードに分かれます。アップロードは端末が送信したバイト、ダウンロードは端末が受信したバイトで、両者が 1 つの数字にまとめられることはありません。調査上の意味が異なるからです。ダウンロードの異常は通常、何かのダウンロードや同期を示し、アップロードの異常はアップロード、バックアップ、キープアライブ要求などに関係している可能性が高いです。

単位は 1024 進法で B、KB、MB、GB と順に換算され、表示時に適切な単位が自動で選ばれるため、同じ行が時間によって MB で表示されたり GB で表示されたりします。数値の基準はトンネル内のバイト数で、暗号化とカプセル化のオーバーヘッドを含むため、実際のコンテンツ量よりやや大きくなります。1 MB のファイルをダウンロードして 1.0x MB と表示されるのは正常です。

概要       ↑ 15.6 MB     ↓ 412.3 MB
サーバー別   Server A      ↑ 12.4 MB     ↓ 386.2 MB
サーバー別   Server B      ↑ 1.8 MB      ↓ 24.9 MB
アプリ別     Safari        ↑ 3.1 MB      ↓ 208.7 MB

上の配置はあくまで例で、数字は実測値ではありません。実際のリストでは各行に合計に対する割合も表示されるため、どれが最大かすばやく判断できます。割合と絶対値をあわせて見ると、合計だけを見るより異常に気づきやすくなります。

サーバー別の数値:通信がどのサーバーに流れているか

「サーバー別」リストの各行は、Home ページのサーバーリストの 1 項目に対応し、名前も Home の表示と一致します。サーバーを切り替えると、新しい通信は新しい項目に記録され、古い項目の履歴値は自動ではクリアされません。Data ページで手動でリセットするか、該当項目を削除した場合にのみクリアされます。

このグループの数値は 2 つの問いに直接答えます。現在の通信が想定どおりのサーバーに流れているか、そして操作していないのに特定のサーバーが通信を発生させ続けていないか。前者は Global Routing と Config のルールが想定どおり機能しているかの確認に、後者は設定に残ったままの項目の発見に役立ちます。

数値グループ集計対象含む含まない
サーバー別特定のサーバー項目に紐づく接続そのサーバーを経由して転送された送受信バイトDIRECT に一致した接続、DNS クエリ、REJECT された接続
アプリ別接続を開始した Appその App がトンネル経由で処理したすべての接続(DIRECT に一致した分を含む)接続スイッチがオフの間に発生した通信

リストに見覚えのない項目が現れた場合は、まず Home に戻ってサーバーリストを確認してください。項目名は Home と一致し、通常は自分で読み込んだ設定か手動で追加したサーバーによるもので、勝手に項目が増えることはありません。

アプリ別の数値:どの App から通信が出ているか

「アプリ別」リストは通信を接続の開始元プロセスに割り当てます。同じドメインへのリクエストでも、送信元の App が異なれば別々に記録されるため、「誰が通信を走らせているか」を答えられます。これはシステム全体の統計ではできません。システムの使用量統計はネットワークインターフェース単位で集計するだけで、バイト数を特定の App に割り当てることはできません。

Global Routing のモードは 2 つの数値の分布を直接変えます。Config モードでは、ルールに一致した接続は対応するサーバーに計上され、DIRECT に一致した接続はアプリ別リストにのみ現れます。Proxy モードでは、すべての接続が現在選択中のサーバーに集中し、サーバー別リストはほぼ 1 行だけが増加します。Direct モードでは、サーバー別の数値はほぼ増加せず、アプリ別の数値は累積を続けます。

コンフィグ(Config)

おすすめ

ルールに従って振り分け:ルールに一致した接続は対応するサーバーを経由し、そのサーバーに計上されます。DIRECT に一致した接続はアプリ別リストにのみ表示されます。

向いている用途:日常のメイン設定。どの種類の通信がプロキシ経由かを見極めたい場合

プロキシ(Proxy)

すべての接続が現在選択中のサーバーに送られ、サーバー別リストは 1 行に集中するため、合計とトンネルのオーバーヘッドの確認が容易です。

向いている用途:一時的な全通信プロキシ、数値の合計の確認

ダイレクト(Direct)

すべての接続が直接接続となり、サーバー別の数値は増加しなくなり、アプリ別の数値は累積を続けるため、2 つの数値の差が最も分かりやすくなります。

向いている用途:ルールの誤一致の検証、一時的な比較

ルールの誤一致を調べるとき、Direct モードはきれいな対照群になります。Direct に切り替えてから同じ操作をもう一度行い、アプリ別の数値の増分が以前と同じであれば、その通信はもともと直接接続であり、ルールとは関係ないと分かります。

iOS のシステム統計と一致しない理由

iOS の「設定 → モバイル通信」では、この請求期間のモバイルデータ通信量を確認できます。これはモバイルインターフェース上のすべてのバイトを集計したもので、トンネルを通ったかどうかに関係なくすべての App の接続を含みます。一方 Shadowrocket の Data ページはトンネルを通ったバイトを集計し、Wi-Fi とモバイルの両方を含みます。両者は計測位置も対象範囲も異なるため、数字が一致しないのは当然です。

差異の主な原因は次のとおりです。

結論:Data ページは相対比較に使う

Data ページの絶対値をシステムの統計と一致させる必要はありません。価値があるのは、同じ期間内の相対的な分布です。異常を判断するときは、合計がシステムの数字と等しいかではなく、ある行の増分が自分の操作と対応しているかを見ます。

Data ページで異常な通信を特定する手順

以下の手順は「特定の App が知らないうちに通信していないか」を確かめるためのものです。前提は 2 つあります。まずクリーンなベースラインを作り、次に操作を 1 つだけ行い、複数の変数が混ざらないようにします。

  1. 接続がオンになっていることを確認

    Home の上部で接続スイッチがオンになっていることを確認します。オフの状態では通信がトンネルを通らず、Data ページに新しい数値は現れないため、以降の手順は意味をなしません。

  2. ベースラインをリセット

    Data ページで 2 つの数値をリセットし、システムの使用量と照合できるようリセットした時刻を控えておきます。

  3. 操作は 1 つだけ行う

    観察したい App に戻り、たとえばページを 1 つ開いて読み込みが完了するまで待つなど、はっきりした操作を 1 回だけ行います。ほかの App は操作しません。

  4. まずアプリ別を見る

    アプリ別グループに切り替え、どの行の増分が最も大きいかを確認します。その行が今回の操作の送信元です。

  5. 次にサーバー別を見る

    サーバー別グループに切り替え、増分が想定どおりのサーバーに計上されているか確認します。まったく増えていなければ、この接続は DIRECT に一致したことになります。

  6. ルーティングモードと照合

    想定外のサーバーに増分が現れた場合は、Home に戻って Global Routing のモードと Config のルールを確認し、先に一致してしまうルールがないか調べます。

手順 3 から 5 を 2〜3 回繰り返します。毎回の増分が同じ行に現れれば、通信の発生元はほぼ特定できます。増分が大きくなったり小さくなったりする場合は、App のバックグラウンド更新やプッシュ通知が同時に接続を開始している可能性があるため、App をバックグラウンドに回してもう一度観察します。

結論:まず規模で分類し、それから調べる対象を決める

2 つの数値が一致しないときは、まず差額の規模を見ます。差が数 MB 程度なら、通常は DNS クエリと REJECT された接続によるものです。差が数百 MB に達する場合は、特定の App の通信が DIRECT に一致している可能性が高くなります。まず分類してから対処しないと、順序を誤って正常な現象を故障とみなしてしまいます。

よくある質問

サーバー別の合計が全体より少ないのは、データが失われているのでしょうか?

いいえ。合計はトンネル内のすべてのバイトを集計し、サーバー別は特定のサーバーに紐づく部分だけを集計します。DIRECT に一致した接続、DNS クエリ、REJECT された接続はアプリ別側にのみ現れます。アプリ別の合計と全体を比べたほうが、通常は近い値になります。

Data ページの数字がずっと 0 のままです。動かすにはどうすればよいですか?

まず Home に戻って接続スイッチがオンになっているか確認し、次に Global Routing が Direct のままになっていないか確認します。どちらも問題なければ、任意の Web ページを開いて接続を 1 回発生させると、数値が表示されます。

サーバーを切り替えたあと、以前のサーバーの数値は自動でリセットされますか?

いいえ。数値はサーバー項目ごとに個別に累積され、サーバーを切り替えても新しい通信が新しい項目に記録されるだけです。リセットするには Data ページで手動でリセットするか、該当項目を削除する必要があります。

アプリ別リストに見覚えのない項目があるのはなぜですか?

一部の接続はシステムサービスやバックグラウンドプロセスが開始しており、割り当て可能な前面の App がないため、システムまたは不明な項目として表示されます。こうした項目は通常ごくわずかです。特定の項目が増え続ける場合は、Home に戻ってサーバーリストと Config のルールを確認してください。

App Store 正規版の確認