NetQuickCheck 技術文書

NetQuickCheck で使用されるデータ ソース、計算および監視方法。ワイヤレス分析、アプリ トラフィック、ネットワーク プローブおよびレポートをカバーします。

更新日

データソースとインターフェースの選択

NetQuickCheck は、システム サンプリング、アクティブなネットワーク プローブ、派生統計を組み合わせます。システム サンプリングにより、インターフェイス、ワイヤレス、およびプロセス接続情報が提供されます。アクティブ プローブは、リクエストに対するターゲットの応答をキャプチャします。派生統計は、観測値を率、パーセンタイル、グラフに変換します。

主なデータソース
データ収集方法用途
ネットワークインターフェースmacOS インターフェイスとネットワーク構成、およびルーティング カウンターインターフェイスのステータス、アドレス、ルート、DNS、転送バイト数、エラー数
無線ネットワークCoreWLAN接続の読み取り値とスキャン結果RSSI、ノイズ、チャネル、チャネル幅、アクセスポイントの詳細、および周波数カバレッジ
プロセス接続nettop の統計とプロセス情報所属アプリ、リモートアドレス、接続状態、バイトカウンターとその増分
ターゲットレスポンスICMP、TCP、DNS、HTTP、およびテストデータ転送遅延、DNS 結果、サービス ステータス、ルート、スループット

選択したインターフェイスを持つタスクは、そのインターフェイスにリクエストをバインドします。 TCP、UDP、および直接 HTTP リクエストは Network.framework インターフェイス バインディングを使用します。 ICMP プローブは、システム コマンドのインターフェイス引数を使用します。自動ルーティングにより、macOS がパスを選択できるようになり、自動 HTTP リクエストはシステム セッションとプロキシ ポリシーに従います。選択したインターフェイスは結果とともに保存され、Wi-Fi、イーサネット、その他の利用可能なインターフェイス間の比較をサポートします。

現在のネットワークとクイックチェック

インターフェースの読み取り値と転送速度

現在のネットワークは、接続されている Wi-Fi ネットワークのワイヤレス読み取り値とともに、インターフェイスのステータス、アドレス、ゲートウェイ、DNS を読み取ります。転送されたバイトは、64 ビット システム ルーティング インターフェイス カウンターから取得されます。受信エラー、送信エラー、受信キューのドロップは個別に保持されます。

受信レート (B/s) = サンプル間の受信バイト数の増加 ÷ サンプル間隔 (秒)
送信レート (B/s) = サンプル間の送信バイト数の増加 ÷ サンプル間隔 (秒)
ビットレート (Mbps) = バイトレート × 8 ÷ 1,000,000

レートは、サンプル間隔中の平均転送量を表します。 MiB/s はユニットあたり 1,048,576 バイトを使用します。 Mbps は 1 秒あたり 100 万ビットを使用します。インターフェイス カウンターとアプリごとに集約されたカウンターは、さまざまなトラフィック セットをカバーします。

クイックチェックの流れ

クイックチェックは、ローカル接続、ゲートウェイ、DNS、インターネット接続、HTTPS、外部接続情報の順に確認します。全体の制限時間は8秒です。各ステップには残り時間のうち最大2秒を割り当て、完了したステップから結果を更新します。

ゲートウェイ ステップでは、ゲートウェイ ポート 443 への TCP 接続を試行します。接続の成功と明示的な接続の拒否の両方で、ゲートウェイからの応答が確認されます。元の接続結果も保持されます。 DNS、インターネット、および HTTPS のステップは、接続パスの各部分を調べるのに役立つ独自の応答を記録します。

Wi-Fi スキャンとワイヤレス メトリクス

ワイヤレス スキャンでは、CoreWLAN を使用して、近くのアクセスポイントの SSID、BSSID、プライマリ チャネル、帯域、チャネル幅、受信信号強度を取得します。利用可能なチャネル カタログは、現在のワイヤレス インターフェイスから取得されます。ブロードキャスト情報要素には、セキュリティ機能、Wi-Fi 標準、国コード、その他の詳細が追加されます。 SSID や BSSID などの識別子へのアクセスは、macOS の位置許可ルールに従います。

RSSI、ノイズ、信号対雑音比

RSSI とノイズでは、1 ミリワットを基準とした対数電力測定値である dBm が使用されます。 RSSI 値が 0 に近いほど、受信信号が強いことを意味します。両方の読み取り値が有効な場合、アプリは信号対雑音比を計算します。

SNR (dB) = RSSI (dBm) − ノイズ (dBm)

たとえば、RSSI が −55 dBm、ノイズが −92 dBm の場合、SNR は 37 dB になります。現在の計算では、−127 ~ −1 dBm の読み取り値が受け入れられます。いずれかの読み取り値が欠落している場合、SNR は空のままになります。

ワイヤレス信号モニタリングには 2 つのサンプリング ソースがあります。ローカル モードは、接続されている Wi-Fi ネットワークを定期的に読み取ります。近隣モードでは、選択したアクセスポイントを繰り返しスキャンします。チャートには各読み取り時間が保持され、アクセスポイントの ID によってさまざまな無線信号が区別されます。

ブロードキャストチャンネルの使用率

アクセスポイントが有効な BSS Load情報要素をブロードキャストすると、アプリはそのチャネル使用率フィールドを 0 ~ 255 からパーセンテージ (フィールド値 × 100 ÷ 255) に変換します。これにより、ブロードキャスト値の意味が保持されます。チャネル オーバーラップ チャートは、以下で説明する周波数カバレッジと電力モデルを使用します。

チャネルのカバレッジと評価

チャンネルを周波数範囲に変換する

チャネル評価では、帯域、プライマリ チャネル、チャネル幅から周波数範囲を構築します。 2.4 GHz チャネル 1 ~ 13 の場合、中心周波数 (MHz) は 2407 + 5 × チャネル番号です。チャネル 14 は 2484 MHz に個別にマッピングされます。 5 GHz の場合、5000 + 5 × チャネル番号です。 20 MHz の範囲は、中心の両側に 10 MHz 拡張されます。幅の広いチャネルは、カタログでサポートされているサブチャネル ブロックを結合します。

候補は帯域とチャネル幅によって生成され、候補内のすべてのサブチャネルが現在のカタログに存在する必要があります。このアプリは、2.4 GHz では 20 MHz と 40 MHz の組み合わせを評価し、5 GHz と 6 GHz では 20、40、80、および 160 MHz の組み合わせを評価します。スキャン レコードはバンドと BSSID ごとにマージされます。 BSSID が欠落している場合、スキャン レコード ID がフォールバック ID として機能し、同じアクセスポイントが 2 回カウントされることを回避します。

チャネル幅または方向の情報が不完全な場合、アプリは確認済みのカバレッジと可能なカバレッジを個別に保持します。すべての可能な位置で共有される範囲が確認済みの範囲です。残りは引き続きカバーできる可能性があります。各アクセスポイントは 1 回カウントされます。

対数信号読み取り値からオーバーラップ電力を計算する

信号強度は dBm から相対線形パワーに変換され、周波数の重複部分によって重み付けされます。アクセスポイント i と候補 c の場合:

Pᵢ = 10 ^ ((RSSIᵢ + 100) ÷ 10)
wᵢ,c = オーバーラップ帯域幅の合計 ÷ モデル化されたアクセスポイントの帯域幅の合計
Poverlap,c = Σ (Pᵢ × wᵢ,c)

+100 項は、共有の相対パワー基準を提供します。チャネル幅が不確実で候補範囲と重なる場合、重みは保守的に 1 に設定されます。したがって、信号強度とカバレッジ幅の両方が寄与します。 10 dB RSSI の差は、10 倍の線形電力差に相当します。

候補の順位付け

現在のアクセスポイントが特定できる場合は、周囲の信号を評価するためランキングから除外します。現在のランキングにより、DFS 候補が除外されます。 20 MHz の 2.4 GHz では、1、6、および 11 チャネル グループが優先され、続いて RSSI が欠落しているアクセスポイント、推定干渉電力、総アクセスポイント数、およびチャネル シーケンスが比較されます。

すべての候補のノイズ読み取り値が同等である場合、ノイズも線形パワーに変換されて含まれます。それ以外の場合、候補は重複信号電力のみを使用して比較されます。各候補サブチャネルは、ソートされた有効なノイズ読み取り値の中央を使用します。完全な候補は、これらのノイズ値の高い方を採用します。

同じ帯域とチャネル幅内で、最良候補の優先グループと RSSI が欠落しているアクセスポイントの数を共有し、その推定電力が最良候補の 2 倍以下である場合、現在の設定が優先されます。 2 倍の線形パワーの差は約 3 dB です。これにより、小さな違いによって引き起こされるランキングの変動が軽減されます。

オーバーラップカーブの表示

オーバーラップ カーブは、各チャネル中心の周囲の 20 MHz ウィンドウで加重パワーを計算し、対数圧縮を使用してそれを 0 ~ 1 の相対表示範囲にマッピングします。

表示強度 = min(1, max(0, log₁₀(1 + Poverlap) ÷ 7))

この縦軸は、スキャン読み取り値から導出された相対的なオーバーラップ強度を表します。重複するアクセスポイントに有効な RSSI がない場合、その位置は空のままになり、曲線は分割されます。確認済みのカバー範囲と可能性のあるカバー範囲は分離されたままです。

ローカルネットワークデバイスの検出

デバイス検出は、Bonjour、WS-Discovery、SSDP、および TCP サービス プローブを組み合わせます。 Bonjour は、アドバタイズされたサービス インスタンスを提供します。 WS-Discovery と SSDP は、互換性のあるデバイスからの応答を追加します。 TCP プローブは、現在のスキャン範囲内のアドレスでサービス応答をチェックします。

現在の TCP プローブ ポートは 80、443、445、22、631、および 9100 で、一般的な Web、ファイル共有、リモート アクセス、印刷サービスをカバーしています。リクエストは選択したインターフェイスを使用します。観測では、ソース、アドレス、および実際の応答が保持されます。

デバイス検出では、各ソースの観測結果をまとめ、デバイスのアドレスとサービスの情報を基に名前、種類、サービスを整理します。利用できないインターフェイス、アクセス拒否、タイムアウト、サービス応答は個別に記録します。スキャンを中止または再開始した際は、前回の遅延コールバックを分離し、新しい結果に混入させません。

アプリ通信量と接続の所属先

システム接続テーブルからアプリを検索する

アプリ通信量 は、nettopからプロセス、プロトコル、ローカルおよびリモートのエンドポイント、インターフェイス、接続状態、バイト数を読み取ります。アプリは、実行中のアプリケーション情報、プロセスの親関係、および実行可能パスを組み合わせて、ヘルパー プロセスを所有するアプリに関連付けます。

接続の所属先は、まずプロセス自体を調べ、次に親プロセスを最大16階層までたどって判定します。一致しない場合は、実行ファイルを含むアプリバンドルのパスを使います。PIDの再利用を区別するため、プロセスの識別には起動時刻も含めます。

各接続の変化を計算し、アプリごとに集計する

連続する測定結果を、プロセス、プロトコル、ローカルとリモートのアドレス・ポート、インターフェイスで対応付けます。2つのバイトカウンターが比較可能な同じ接続の値である場合にのみ転送速度を計算し、アプリ別に集計します。

接続ダウンロード速度 = (現在の受信バイト数 − 前回の受信バイト数) ÷ 時間差
接続アップロード速度 = (現在の送信バイト数 − 前回の送信バイト数) ÷ 時間差
アプリレート = アプリとその関連プロセスの有効な接続レートの合計

新しい接続は、最初にベースラインを確立します。カウンタのリセット、インターフェイスの変更、または 15 秒を超えるサンプル ギャップには、新しい同等のサンプルが必要です。システムが一意に一致できない複数の同一の行を返した場合、アプリはそれらの行を保持し、レートを空のままにするため、一致のあいまいさがトラフィックの急増として現れません。

リモート接続と ICMP 監視

アプリの接続監視では、最初と最後に確認された時刻、状態変化、トラフィック デルタが保持され、検出されたリモート IP を ICMP で個別に調査します。トラフィック、接続アクティビティ、および ICMP の結果は時間ごとに調整されます。レイテンシの読み取り値は、ターゲット IP の ICMP 応答から得られます。

Ping および TCP プローブ

ICMP Echo と無応答率

Ping はプローブのターゲットアドレスを名前解決して固定し、IPv4 ICMP エコーまたは IPv6 ICMPv6 エコー要求を送信します。継続的な監視は設定に従って繰り返され、実際の送信、応答、応答の欠落、返された往復時間を記録します。

無応答率 = 無応答プローブ数 ÷ 実際に送信したプローブ数 × 100%

カウントには、システム出力によって確認された送信数が使用されます。解決の失敗、アクセス許可の拒否、および送信できなかったリクエストは、特定のステータスを保持し、送信プローブの分母には入りません。遅延統計では、有効な応答 RTT が使用されます。

TCPポート接続

ターゲットを解決した後、TCP ポート監視は選択されたポートへの接続を試行し、単調クロックを使用して成功またはエラーになるまでの時間を測定します。 DNS 解決が先に終了し、TCP 接続タイミングは別途測定されます。成功、接続拒否、タイムアウト、その他のシステム エラーは、同じサービス ポートが時間の経過とともにどのように動作するかを示すために個別に保持されます。

DNS クエリと応答の検証

DNS モニタリングは、選択したサーバーとレコード タイプ (A、AAAA、CNAME、MX、TXT、NS、SOA、PTR など) をクエリします。システム解決と明示的なサーバー クエリは別のパスをたどります。自動ルーティングでは、要求に応じてシステムの名前解決またはdigが使用されます。選択したインターフェイスにバインドされたクエリは、UDP ポート 53 経由でパケットを交換します。

直接クエリではトランザクション ID が生成され、質問名、タイプ、IN クラスが構築されます。応答は、応答コード、リソース レコード、TTL を解析する前に、パケット長、トランザクション ID、応答フラグ、質問数、名前、タイプ、クラスがチェックされます。パケット パーサーは、圧縮されたドメイン名ポインターを展開します。

選択したタイプのレコードがある NOERROR、それらのレコードがない NOERROR、NXDOMAIN、切り捨てられたパケット、およびトランスポートエラーは個別に記録されます。 PTR クエリは、まず IPv4 または IPv6 アドレスを逆引き名に変換します。タイミングはクエリと応答の解析をカバーし、結果は実際のサーバーとレコードの内容を保持します。

HTTP 応答とステージのタイミング

Web サイト監視では、HTTP または HTTPS HEAD リクエストを送信し、返されたステータス コード、最終 URL、および継続時間を記録します。自動ルーティングでは、URLSession トランザクション メトリックが使用されます。明示的なインターフェイスまたは解決パスを使用する場合、HTTP の直接実装では Network.framework 接続レポートと要求タイムスタンプが使用されます。

リクエスト各段階の所要時間
段階開始終了
DNS対象名の名前解決開始名前解決完了
TCP接続試行開始TCP接続完了。TLSは個別に計測
TLSTLSハンドシェイク開始TLSハンドシェイク完了
リクエスト送信リクエスト送信開始リクエスト送信完了
先頭バイトの待機リクエスト送信完了応答の先頭バイトを受信
応答受信応答の先頭バイトを受信HEADレスポンス受信完了

ステージの継続時間は、終了タイムスタンプと開始タイムスタンプの差です。再利用された接続には、新しい DNS、TCP、または TLS ステージが存在しない場合があります。有効なタイムスタンプのないステージは空のままです。リダイレクトは各リクエストのタイミングを保持します。合計チェック時間は、解決、リダイレクト、スケジュール、その他の実際のオーバーヘッドも含まれるため、個別に測定されます。

HTTPS は、システム証明書の信頼性検証を使用して、有効な証明書からサブジェクト、発行者、有効期間、および SHA-256 フィンガープリントを抽出します。 HTTP ステータス コードはサーバーの応答を表します。トランスポート エラーは接続プロセスを表します。どちらも別々に保管されています。

ネットワークパスとホップバイホッププローブ

ネットワーク パス モニタリングは、ターゲットアドレスを名前解決して固定し、IPv4 TTL または IPv6 ホップ制限を 1 から増やして ICMP プローブを送信します。中間ルーターは時間を超過した応答を返す場合がありますが、宛先はエコー応答を返す場合があります。アプリはこれらの応答を使用して、ホップ アドレスと利用可能なタイミングを整理します。

現在、各ラウンドでは最大 16 ホップがプローブされます。ホップが応答しない場合でも、その後のホップがチェックされます。宛先の応答によりラウンドが終了します。到達不能な応答やポリシーで拒否された応答は、元の結果を保持します。有効な所要時間なしでアドレスが使用可能な場合、アドレスは保持され、タイミングは空のままになります。

負荷時のスループットと応答性

現在のネットワーク: Apple networkQuality

「現在のネットワーク」では macOS networkQuality を実行し、ダウンロード、アップロード、アイドル レイテンシ、RPM での負荷時の応答性などの構造化された結果を解析します。 RPM は、Apple のツールで測定された 1 分あたりの往復回数を意味します。アプリは戻り値を保持します。未処理のダウンロードおよびアップロードのビット レートを 1,000,000 で割って Mbps で表示します。

インターフェイスが選択されると、速度テスト コマンドにはそのインターフェイス引数が含まれ、結果として返されたインターフェイス名がチェックされます。システムが一部のメトリックのみを提供する場合、それらのフィールドは保持され、他のフィールドは空のままになります。

モニター:サーバーとシステムの速度テスト

モニターの各速度テストでは、選択した Cloudflare または LibreSpeed エンドポイントに対してダウンロード テストとアップロード テストを実行し、次に Apple networkQuality を実行します。 2 つの方法では、独自のソース、時間、実際の結果が保持されます。エンドポイントのダウンロードはテスト ペイロードを読み取ります。アップロードでは、アプリによって生成された一時データが使用されます。平均スループットは、実際に転送されたバイト数とそのステージの経過時間から計算されます。

スループット (Mbps) = 実際に転送されたバイト数 × 8 ÷ 経過時間 (秒) ÷ 1,000,000

リクエストでは明示的なテスト ペイロード、タイムアウト、キャッシュ ポリシーが使用され、転送の進行状況、ターゲット バイト数、実際の転送バイト数が個別に保持されます。ステージ結果は、完了した転送、部分的な転送、失敗した転送を区別します。レコードは、同じ条件下での比較をサポートするためにサーバーとインターフェイスを保持します。

継続的なモニタリング、グラフ、統計

共有タイムライン上での独立したサンプリング

モニターには、Ping、TCP、DNS、Web サイト、ネットワーク パス、速度テスト、ワイヤレス信号、インターフェイス トラフィック、アプリ トラフィック、アプリ接続の 10 種類のツールが含まれています。各タスクは、独自のターゲット、パラメータ、サンプル時間を保持します。共有時間ウィンドウにより、観測結果が調整され、遅延、ワイヤレス読み取り値、トラフィック、およびサービス応答が時間の経過とともに比較されます。

アクティブなプローブと帯域幅転送は、個別のリソース クォータを要求します。現在のデフォルトのバジェットでは、8 つの同時プローブ操作と 2 つの同時転送が可能です。予算を超える操作は、クォータが解放されるまで待機します。キャンセルは、実際の操作が終了するのを待ってから、クォータを解放します。クォータは個々のプローブまたは転送に適用されます。繰り返されるタスクは、次のラウンドで再度リクエストされます。

グラフのセグメントと相対的な変化

チャートはサンプル時間とセグメント ID によってポイントを接続し、中断を分離して障害を個別に表示します。ビューポート境界での補間は描画のみに使用されます。統計では実際の観察結果が使用されます。

相対遅延スパイク マーカーが有効になっている場合、アプリは同じセグメント内の先行 5 つのサンプルの中央値 m を取得します。 max(3 × m, m + 5 ms) を超える遅延がマークされます。ワイヤレス信号変化マーカーは、読み取り値を最近の中央値と比較し、少なくとも 8 dB の差をマークします。これらのルールは、最近のベースラインを基準にして変更を特定します。

中央値、P95、変動

時間範囲内の有効な有限値を抽出し、昇順に並べます。個数が奇数なら中央の値、偶数なら中央の2つの値の平均を中央値とします。有効な値がなければ統計値は空欄になります。P95は最近順位法で求めます:

P95 = 昇順サンプルの位置 ceil(0.95 × n) の値
ICMP 無応答率 = 未応答のプローブ数 ÷ 実際に送信されたプローブ数
ICMP 遅延の変動 = 有効な隣接する応答間の絶対 RTT 差の合計 ÷ 有効な隣接ペアの数

アプリ接続のICMPセッションでは、元の履歴の保持期間とは別に、0.1 ms刻みのヒストグラムでパーセンタイルを集計します。0〜2000 msの有効な応答を区間ごとに数え、それを超える値はオーバーフロー件数と最大値に反映します。パーセンタイルがオーバーフロー範囲に入る場合は空欄にします。遅延の変動は、同じデータ区間内で時間差が2.5秒以内の、有効な隣接応答だけを対象にします。

監視記録とレポートのエクスポート

モニタリング記録には、タスクのパラメータ、目標、サンプル時間、実際の結果、および裏付けとなる証拠が保存されます。チャートは時間の経過に伴う変化を示し、レポートは読み取りまたはさらなる処理のために観察を整理します。

HTML
タスクの概要、結果、詳細が記載された読みやすいレポート。
CSV
スプレッドシート分析用に、時間、カテゴリ、オブジェクト、ターゲット、方法、ステータス、値、単位、詳細などの列に整理された証拠。
JSON
さらに処理するための構造化されたレコード、構成、結果。

長時間のアプリ接続セッションでは、セグメント化されたアーカイブが使用されます。エクスポートでは、最初にアーカイブの読み取り範囲が固定され、次にアーカイブされたデータと現在のメモリ内の末尾がストリーミングされるため、1 回のエクスポートで一貫したデータ境界が使用されます。欠損値、失敗、およびキャンセルは、レビュー中に一貫した解釈をサポートするために独自の状態を保持します。