第5章 アプリケーション層|5-4|コース全体 19本中19本目
Webページが表示されるまでの流れ
URLを
前の記事 ・5-3 HTTPとHTTPS(TLS) ― 何が違うのか
URLを入力してから表示されるまでに働く仕組み
https://example.com/ のようなURLをブラウザに入力してからページが表示されるまでには、DNS・ARP・カプセル化・NAT・ルーティング・TCP・TLS・HTTPが決まった順番で働いています。
入門コースのまとめとして、これまでの18本の記事の内容が、どの段階でどう働いているかを確認します。各段階には、その仕組みを説明した記事へのリンクを置いています。
自分のPCから https://example.com/ を開く場面を例に、最初から最後まで順に説明します。PCのIPアドレスは 192.168.10.25/24 とします。
宛先を決めるまで
- 1
URLを
スキーム・ホスト名・パスに 分解する 第7層 ブラウザは、まずURLを3つの部分に分けます。先頭の https はスキームで、使うプロトコルを表します。続く example.com はホスト名で、接続先のサーバの名前です。最後の / はパスで、サーバの中のどのページかを表します。
URLやドメイン名は、第7層のアプリケーション層で使います。ただし、第7層に層としてのアドレス体系があるわけではありません。実際の宛先は、この後DNSでIPアドレスに変換されて初めて決まります。
- 2
DNSで
ホスト名を IPアドレスに 変える 第7層 ホスト名の example.com のままでは通信できないので、DNSでIPアドレスを調べます。
PCがキャッシュDNSサーバに問い合わせると、キャッシュDNSサーバはルート・TLD・権威の順にDNSサーバをたどります。こうして返ってきたIPアドレスを、ここでは 203.0.113.50 とします。
実は、このDNSの問い合わせ自体も、これから説明する③〜⑧の手順(宛先判定・ゲートウェイ・ARP・カプセル化・NAT・ルーティング)を経て届いています。
DNSサーバへの通信も、HTTPサーバへの通信も、仕組みは同じです。分かりやすくするため、以下はDNSの名前解決が終わった後の話として説明します。
送り出すまで
宛先IPアドレスが分かると、PCはまず宛先が自分と同じネットワークか、外かを判定します。
- 3
- 4
デフォルトゲートウェイに
任せる 第3層 外向けの通信は、PCが自分で届けることはできないので、デフォルトゲートウェイに中継を任せます。この例では、デフォルトゲートウェイのIPアドレスは 192.168.10.1 です。
- 5
ARPで
次に 渡す相手の MACを 調べる 第2〜3層 次に渡す相手のMACアドレスは、ARPで調べます。調べるのは、最終的な宛先であるサーバではなく、同じネットワーク内にあるゲートウェイのMACアドレスです。
- 6
カプセル化して
フレームを 組み立てる 第4〜2層 送るデータを、TCPヘッダ、IPヘッダ、Ethernetヘッダの順に包んでいきます。宛先MACアドレスには、手順5で調べたものを使います。このとき、TCPヘッダには送信元ポート番号も書き込まれます。
- 7
自宅ルータが
NATで グローバルIPに 変換する 第3層 パケットは最初に、プライベート網とインターネットの境目である自宅ルータを通過します。このとき、送信元IPアドレスがグローバルIPアドレスに変換されます。家庭用ルータで使われるNAPTでは、第3層のIPアドレスだけでなく、第4層の送信元ポート番号も変換されます。
- 8
以降の
各ルータが 経路を 選んで 転送する 第3・2層 インターネット上の各ルータは、ルーティングテーブルを見て、変換後のパケットを次のルータへ転送します。宛先IPアドレスは、最後まで 203.0.113.50 のままです。一方、宛先MACアドレスはホップごとに書き換わります。
つながるまで
パケットがサーバに届いても、データのやり取りはまだ始まりません。次の3つの段階を順番に済ませる必要があります。
③〜⑧の処理は、最初に1回だけ行われるものではありません。最初に送られるのは⑨のSYNパケットで、その後のTLSやHTTPの各パケットも、送るたびに同じ経路(③〜⑧)を通ります。
ただし、毎回まったく同じ手順を踏むわけではありません。たとえばARPでは、一度調べた相手のMACアドレスをキャッシュに保存するので、送るたびに問い合わせることは通常ありません。また、NATを行うのはPCではなく、経路上の自宅ルータです。
- 9
TCPの
3ウェイハンドシェイクで 接続を 確立する 第4層 PCとサーバは、SYN、SYN+ACK、ACKの3回のやり取りをします。このやり取りで、お互いの開始番号を確認し合います。
- 10
TLSハンドシェイクで
暗号化を 確立する 第6層 PCとサーバは鍵の材料を交換し、交換した材料から共通鍵を計算します。あわせて、証明書と署名を確認します。TCPの接続が確立していなければ、この段階は始まりません。
- 11
HTTPで
リクエストと レスポンスを やり取りする 第7層 暗号化された通信路の中で、ブラウザはGETリクエストを送ります。サーバからは、HTMLを含むレスポンスが返ってきます。レスポンスの先頭には、結果を表す3桁のステータスコードが入ります。前にこのサイトからCookieを受け取っていれば、ブラウザはそれもリクエストに付けます。その仕組みはCookieの記事で説明しています。
表示するまで
HTMLが届くと、ブラウザはその中身を解釈します。HTMLの中で<img>や<link>により画像・CSS・JavaScriptが指定されていれば、ブラウザはその数だけ追加のリクエストを送ります。
宛先が新しいホスト名なら、②のDNSから⑨〜⑪のTCP・TLS・HTTPまでをやり直します。宛先が同じホストなら、TCPとTLSの接続は再利用するのが基本です。HTTP/1.1では既存の接続を再利用し、HTTP/2では1本の接続にまとめてリクエストを送ります。HTTP/3では、TCPの代わりにQUICの接続を1本使います。
この場合、繰り返すのは⑪のHTTPのリクエストとレスポンスだけです。1つのページを表示するために、この往復がリソースの数だけ繰り返されます。リソースとは、HTMLや画像のように、ページの表示に必要なファイルのことです。
すべてのリソースが届くと、ブラウザは画面を組み立て、ページが表示されます。ブラウザが表示を受け持ち、サーバが処理とデータを受け持つこの分担は、クライアントサーバシステムの記事で説明する3層の形です。
全12段階の早見表
| 段階 | やる | 主な | 関連する |
|---|---|---|---|
| ① URLを読む | スキーム・ホスト名・パスに分解する | 第7層 | 1-2 |
| ② DNS | ホスト名からIPアドレスを調べる | 第7層 | 5-1 |
| ③ 宛先判定 | 自分のIPアドレスとマスクで、宛先が同じネットワークか比べる | 第3層 | 2-2・2-3 |
| ④ ゲートウェイへ | 別のネットワーク宛てはデフォルトゲートウェイに任せる | 第3層 | 3-1 |
| ⑤ ARP | 次に渡す相手(宛先かゲートウェイ)のMACを調べる | 第2〜3層 | 3-2 |
| ⑥ カプセル化 | TCP→IP→Ethernetの順にヘッダを足して1枚のフレームにする | 第4〜2層 | 1-4 |
| ⑦ NAT | 自宅ルータでプライベートIPをグローバルIPに変換する | 第3層(NAPTは第4層も) | 2-4 |
| ⑧ ルーティング | 以降の各ルータが経路表を見て転送する。宛先MACはホップごとに書き換わる | 第3・2層 | 3-3・2-1 |
| ⑨ TCP | 3ウェイハンドシェイクで接続を確立する | 第4層 | 4-2 |
| ⑩ TLS | ハンドシェイクで暗号化を確立する | 第6層 | 5-3 |
| ⑪ HTTP | リクエストを送り、レスポンスを受け取る | 第7層 | 5-3 |
| ⑫ 描画 | HTMLを解釈し、画像やCSSを追加で取得する | 第7層 | 新しいホストは②〜⑪、同じホストは⑪だけを繰り返す |
練習問題(総合・全5問)
複数の記事の内容にまたがる問題です。
正解:DNS → ARP → TCPハンドシェイク → TLSハンドシェイク
サーバ宛ての
正解:ARPで
宛先は
正解:各ルータは
ルータは、
正解:LAN内は
同じ
正解:第6層
文字コードや
選んでから「採点する」を押すと、解説つきで答え合わせができます。
入門コースでは、層に分ける理由とOSI参照モデルから始めて、アドレスの仕組み、データが届く仕組み、通信の制御、アプリケーション層の順に説明してきました。ここで説明した12段階の流れの中で、それらの内容はすべてつながっています。
この先に読むとよいページは、目的によって変わります。目的ごとの順番は、目的別の勉強の順番に並べています。
おすすめの本 PR
この記事の内容を扱っている本です。
