何を測っているの?
大手 CDN には数百の拠点(POP、データセンター)があります。どの拠点が応答するかで、その CDN 上のすべてのサイトの速さが決まり、しかも最寄りとは限りません。
ページはブラウザから各 CDN の小さなファイルを、サイトを開くときと同じように取得し、どの拠点が応答したかを読み取ります。そして拠点までの距離、往復時間、その距離で出せる最小値を表示します。
このサイトには何も送りません。リクエストはブラウザから各 CDN へ直接届きます。
拠点はどう読み取るの?
各 CDN は応答に拠点を書き込んでいます。書き方はそれぞれです:
Cloudflare:/cdn-cgi/trace の colo(HKG)。
Amazon CloudFront:Server-Timing の cdn-pop、または X-Amz-Cf-Pop(NRT57-P11)。
Akamai:Akamai-Request-BC、都市名で書かれます(JP_13_TOKYO)。
Fastly:X-Served-By(cache-nrt-…-NRT)。
Azure Front Door:X-Azure-Ref(…C1TYO…)。
Bunny:Server ヘッダー(BunnyCDN-JP1-…)。
Wikimedia:X-Cache。キャッシュサーバーの番号がデータセンターを表します。
ブラウザは応答が許可した場合しかこれらを読めないため、各 CDN は読み取りを許可している公開ファイルで測っています。Google、Alibaba Cloud、Tencent EdgeOne、Wangsu、Gcore、CDN77 は許可していないので、時間だけを測ります。
なぜ遠くの拠点につながるの?
CDN は距離で振り分けているわけではありません。Cloudflare や Akamai は同じアドレスを多くの場所から同時に広告したり(エニーキャスト)、DNS リゾルバーの場所で応答を変えたりしており、実際の経路は回線事業者が選びます。
中国本土ではよくあることで、Cloudflare の無料・低価格プランのサイトは、多くの回線で米国西海岸など遠い拠点に回されます。その経路のほうが安いからです。有料プランと China Network(JD Cloud と運営)は香港や中国本土の拠点が応答します。
プロキシや VPN でも拠点は変わります。CDN にはプロキシのアドレスが見え、その場所で振り分けます。
最小の往復時間とは?
光ファイバーの中で光は 1 ミリ秒に約 200 km 進むので、距離 d の往復は d ÷ 100 ミリ秒より速くなりません。実際の経路は直線の 1.5〜2 倍あります。往復時間がその 2 倍に 40 ms を足した値を大きく超えると「遠回り」と表示します。経路が迂回しているか、混雑した区間で待たされています。
「最寄りではない」とは?
全拠点を公開している CDN(Cloudflare、Bunny、Wikimedia)については、あなたに最も近い拠点を求めます。応答した拠点がそれより 1,000 km 以上、かつ 2 倍以上遠い場合に表示します。故障ではなく、CDN か回線事業者が別の経路を選んだということです。
サイトの調べ方は?
ドメインを入力すると、このサイトの Worker が Cloudflare の DNS で名前解決し(ローカルや改ざんされた応答に左右されません)、CNAME の向き先から CDN を判別します。さらにサイトの /cdn-cgi/trace で Cloudflare かを確かめ、サイトが許可していれば favicon の応答ヘッダーから拠点を読み取ります。最後にサイトまでの時間を測ります。
ドメインはこのサイトの Worker と Cloudflare の DNS に送られますが、どちらも保存しません。
直接接続(D)とプロキシ(P)とは?
ルールで振り分けるプロキシクライアント(Clash、Surge など)を使うと、CDN によって、あなたの回線から直接出るもの(直接接続、D)と、プロキシサーバーを通るもの(プロキシ、P)に分かれます。プロキシ経由では、CDN はプロキシのアドレスで拠点を選び、往復時間にはプロキシまでの区間も含まれるため、両者はそのまま比べられません。
ページはまず出口を調べます。中国本土のサイト(IPIP)から見えるアドレス、このサイトから見えるアドレス、Cloudflare の trace から見えるアドレスを集め、それぞれの位置を調べます。ホスティング事業者のネットワーク上の出口はプロキシとみなします。
次に各 CDN の出口を判定します。Cloudflare の trace にはアドレスが書かれています。拠点が読める CDN は、その拠点がどの出口にずっと近いかで判定します。プロキシ経由で可能な最短時間より往復が短ければ直接接続です。Alibaba Cloud と Tencent のテスト用ドメインは一般的なルールの中国本土直結リストに含まれるため、ルールから推定します(破線で表示)。判定できないものは「?」とし、距離は参考値として結論に含めません。
直接接続だけ、またはプロキシだけで測るには、「直接接続だけ・プロキシだけで測る」のルールを使ってください。
位置はどうやって調べていますか?
IP アドレスから判定します。このサイトから見えるアドレスは Cloudflare が(このサイトは Cloudflare 上で動いています)、ほかの出口は ip.sb が位置を推定します。たいてい市区町村レベルで合っていますが、数百 km ずれることもあります。プロキシのアドレスはずれやすいので、接続先の Cloudflare 拠点の位置を使います。すべてプロキシ経由のときは、「あなた」の位置はプロキシの位置です。「正確な位置を使う」を押すとブラウザーの位置情報を使います(ページ内でのみ使用)。
データは収集されますか?
いいえ。リクエストはブラウザーから各 CDN に直接送られ、CDN にはほかのサイトと同じようにあなたの IP アドレスが見えます。出口を調べるため、IPIP(myip.ipip.net)にもアクセスし、出口の IP アドレスを ip.sb に送って位置を調べます。このサイトは何も保存しません。共有リンクには拠点、往復時間、各行の出口(D・P の文字だけ)が入ります。市区町村、座標(約 10 km 単位)、回線事業者はチェックを入れたときだけ加わり、IP アドレスは決して入りません。コードは GitHub で公開しています。