本ページはプロモーションが含まれています

ギャラリー

URLの旅|URLを打ってから画面が出るまでを、パケットの動きで見る

CATEGORY
REV.
DRAWN BY
TOM
SHEETS
0枚
URL(URLの旅)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

CODE GALLERY No.24

URLの旅

URL を打ってから画面が出るまでの0.2秒に起きていることを、パケットの動きで1つずつ見せます。

アドレスバーに URL を打って Enter を押すと、ページはほとんど一瞬で出てきます。けれどその間に、パケットは家のルーターを抜け、名前を調べるために何台ものサーバーをめぐり、Web サーバーと何度もあいさつを交わしています。

このページでは、その旅を地図の上で再生します。封筒を押すと、送り元と宛先のアドレスや中身も見られます。「2回目」や「HTTP/3」、スマホの回線に切り替えると、同じページでも表示までの時間が大きく変わることが分かります。

HOW TO USE使い方

  • URL を入れて「旅に出す」を押すと、再生が始まります。例のボタンからも始められます
  • 「止める」「次へ」で1場面ずつ進められます。「結果」を押すと最後まで飛ばして、かかった時間だけを見られます
  • 青い封筒は PC から出ていくパケット、赤い封筒は PC に戻ってくるパケットです。押すと中身のカードが出ます。届いたパケットは下の「記録」からも開けます
  • 「初めて/2回目」「回線」「HTTP/2/HTTP/3」を切り替えて最後まで流すと、「かかった時間」に4つまで並んで比べられます

THE JOURNEY旅の6つの場面

  1. キャッシュを探す:ブラウザと OS は、前に調べた名前と IP アドレスの組をしばらく覚えています
  2. DNS で名前を調べる:リゾルバが、ルートサーバー → TLD サーバー → 権威 DNS サーバーの順にたどり、名前を IP アドレスに変えます
  3. TCP でつなぐ:SYN・SYN-ACK・ACK の3ウェイハンドシェイクで、通り道を作ります
  4. TLS で暗号化の準備:ClientHello と ServerHello で鍵の材料を交換し、証明書でサーバーが本物かを確かめます
  5. HTTP でページを頼む:GET / を送り、200 OK と HTML を受け取ります
  6. 描画:HTML を読み、CSS・JavaScript・画像を取りに行ってから、画面に描きます

途中の家のルーターでは、送り元のアドレスが家の中だけで使うアドレス(192.168.1.10)から、インターネットで使うアドレス(203.0.113.5)に書き換えられます。これが NAT です。帰りのパケットは、ルーターが覚えておいた対応を見て、逆に書き換えてから PC に届けます。

HOW IT WORKS時間の決め方

線ごとに片道の時間を決めておき、パケットの時間は通る線の時間を足して出しています。光回線では、PC から Web サーバーまでの片道を 9.5 ms(往復 19 ms)、サーバーがページを用意するのを 30 ms にしました。

// パケットが着くまでの時間 = 通る線の片道の時間の合計
const dur = path => path.slice(1).reduce((s, n, i) => s + lat(path[i], n), 0);

こうすると、表示までの時間はほとんど「往復の回数 × 往復の時間」で決まることが分かります。光回線で初めて開くときの 227 ms のうち、DNS が 87 ms、TCP と TLS がそれぞれ1往復ずつです。海外のサーバーにすると往復が 153 ms になるので、同じ手順でも 870 ms かかります。

ここから、表示を速くする工夫の多くが「往復を減らす」ことだと分かります。

  • 2回目:DNS の答えと CSS・JS・画像がキャッシュに残っているので、その往復がまるごとなくなります。TLS も前回の「切符」で再開でき、証明書を送り直さずに済みます
  • HTTP/3:TCP の代わりに UDP の上の QUIC を使い、つなぐ相談と暗号化の相談を1往復にまとめます。TCP の SYN と SYN-ACK の分だけ速くなります
  • CDN:サーバーを利用者の近くに置いて、往復の時間そのものを短くします。「海外のサーバー」を選ぶと、近くにないときの遅さが分かります

TLS のハンドシェイクで鍵がどう作られるかは、ギャラリーのTLS の仕組みで1手ずつ追えます。最後に返ってくる「200 OK」以外の番号は、HTTP ステータスコード一覧にまとめています。

NOTES注意

  • このページは実際には通信しません。時間は、ふつうの回線の往復時間から作った目安です。実際の時間は、回線の混み具合やサーバーの場所で大きく変わります
  • IP アドレスは、説明に使うために用意されている範囲(192.0.2.0/24 など)と、家の中で使うアドレスだけを使っています
  • 話を分かりやすくするため、実際より省いているところがあります。リゾルバはふだん .com などの場所を覚えていて毎回ルートサーバーまでは行かないこと、HTML が何個ものパケットに分かれて届くこと、IPv6 のアドレスを調べる問い合わせ(AAAA)も同時に出ることなどです
  • 初めてのサイトでは、ブラウザはまず HTTP/2 でつなぎ、サーバーが HTTP/3 に対応していると知ってから切り替えることが多いです。DNS の HTTPS レコードで、最初から HTTP/3 を使えることもあります

※ URL はこのブラウザの中で読み取るだけで、どこにも送りません。

NEXT READ本棚から1本

AIで開発を組み直すなら、まずこの5冊から

入門・実践・設計まで、Claude Codeの本をレベル別に5冊選んで比べました。

→ おすすめ5冊を見る

  • この記事を書いた人
  • 最新記事

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

ギャラリー