第5章 アプリケーション層|5-4|コース全体 19回中19本目
Webページが表示されるまで(総合)
ブラウザにURLを入力してからページが表示されるまでを1本の線でたどり、これまで学んだ18回がそれぞれどこで効いているかを確認する、コース最終回です。
新しい知識は、ここではもう出てきません
https://example.com/ のようなURLをブラウザに入力してからページが表示されるまでには、 DNS・ARP・カプセル化・ルーティング・NAT・TCP・TLS・HTTPという、これまでの回で1つずつ学んだ仕組みが、 決まった順番で1回ずつ働いています。
例として、自分のPC(192.168.10.25/24)からhttps://example.com/ を開く場面を、最初から最後まで追いかけます。
宛先を決めるまで
- 1
URLをスキーム・ホスト名・パスに分解する第7層
https://example.com/ の https がスキーム(使う約束事)、example.com がホスト名、/ がパスです。 通信の最終的な宛先を示すURL/ドメイン名は、第7層(アプリケーション層)の宛先にあたります。
- 2
DNSでホスト名をIPアドレスに変える第7層
ホスト名 example.com のままでは通信できません。DNSがキャッシュDNSサーバ→ルート→TLD→権威の順に問い合わせ、 IPアドレス(ここでは 203.0.113.50 とします)を返します。
送り出すまで
宛先IPアドレスが分かったところで、PCはまず1つの判定をします。宛先は自分と同じネットワークか、外かです。
- 3
- 4
デフォルトゲートウェイに預ける第3層
外向けの通信は自分では届けられないので、デフォルトゲートウェイ(192.168.10.1)に中継を任せます。
- 5
ARPで次に渡す相手のMACを調べる第2層
ARPで尋ねるのは、最終的な宛先(サーバ)のMACではなく、同じネットワーク内にいるゲートウェイのMACです。
- 6
カプセル化してフレームを組み立てる第4〜2層
ステップ5で分かった宛先MACを使い、TCPヘッダ→IPヘッダ→Ethernetヘッダの順に包んでいきます。 このときTCPヘッダには送信元ポート番号も書き込まれます。
- 7
ルータが経路を選んで転送する第3・2層
各ルータはルーティングテーブルを見て次のルータへ転送します。 宛先IPは最後まで203.0.113.50のままですが、宛先MACアドレスはホップごとに書き換わります。
- 8
NATでグローバルIPに変換される第3層
プライベート網とインターネットの境目(家庭では自宅ルータ)で、送信元IPアドレスがグローバルIPアドレスに変換されます。 家庭用ルータで使われるNAPTなら、送信元ポート番号もあわせて変換されます。
つながるまで
フレームがサーバに届いても、まだデータのやり取りは始まりません。3つの段階を順番に済ませる必要があります。
- 9
TCPの3ウェイハンドシェイクで接続を確立する第4層
SYN→SYN+ACK→ACKの3回のやり取りで、お互いの開始番号を確認し合います。
- 10
TLSハンドシェイクで暗号化を確立する第6層
証明書を確認し、共通鍵のもとになる情報を交換します。 TCPの接続が確立していなければ、この段階は始まりません。
- 11
HTTPでリクエストとレスポンスをやり取りする第7層
暗号化された通信路の中で、GETリクエストを送り、HTMLを含むレスポンスを受け取ります。
表示するまで
HTMLが届くと、ブラウザはその中身を解釈し、<img>や<link>で指定された 画像・CSS・JavaScriptがあれば、その数だけ追加のリクエストを送ります。追加のリクエストも、宛先が新しいホスト名であれば②のDNSから、 同じホストであれば⑨〜⑪のTCP・TLS・HTTPから、それぞれやり直しになります。1つのページを表示するために、 この往復がリソースの数だけ繰り返されています。すべてのリソースが届き、ブラウザが画面を組み立て終えた時点で、ようやくページが表示されます。
全12段階の早見表
| 段階 | やること | 主な層 | 関連する回 |
|---|---|---|---|
| ① URLを読む | スキーム・ホスト名・パスに分解する | 第7層 | 1-2 |
| ② DNS | ホスト名からIPアドレスを引く | 第7層 | 5-1 |
| ③ 宛先判定 | 自分のIPとマスクで、宛先が同一ネットワークか比べる | 第3層 | 2-2・2-3 |
| ④ ゲートウェイへ | 別ネットワーク宛はデフォルトゲートウェイに預ける | 第3層 | 3-1 |
| ⑤ ARP | 次に渡す相手(宛先かゲートウェイ)のMACを調べる | 第2層 | 3-2 |
| ⑥ カプセル化 | TCP→IP→Ethernetの順にヘッダを足して1枚のフレームにする | 第4〜2層 | 1-4 |
| ⑦ ルーティング | ルータが経路表を見て転送する。宛先MACは毎ホップ書き換わる | 第3・2層 | 3-3・2-1 |
| ⑧ NAT | プライベートIPをグローバルIPに変換する | 第3層 | 2-4 |
| ⑨ TCP | 3ウェイハンドシェイクで接続を確立する | 第4層 | 4-2 |
| ⑩ TLS | ハンドシェイクで暗号化を確立する | 第6層 | 5-3 |
| ⑪ HTTP | リクエストを送り、レスポンスを受け取る | 第7層 | 5-3 |
| ⑫ 描画 | HTMLを解釈し、画像やCSSを追加で取りに行く | 第7層 | ②・⑨〜⑪の繰り返し |
練習問題(総合・全5問)
1つの回だけでは答えられない、複数の回にまたがる問題です。選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:DNS → ARP → TCPハンドシェイク → TLSハンドシェイク
ARPで誰のMACを尋ねるかは宛先IPが分かって初めて決まるので、DNSが先です。TCPの接続がなければTLSは始められないので、TCPハンドシェイクもTLSハンドシェイクより先になります。
正解:ARPで尋ねる相手:デフォルトゲートウェイ/宛先IP:203.0.113.50
別ネットワーク宛なのでARPで尋ねるのはデフォルトゲートウェイのMACです(3-1・3-2)。一方、IPヘッダの宛先IPは中継されても書き換わらないので、最終目的地である203.0.113.50のままです(2-1)。
正解:各ルータはルーティングテーブルの最長一致で次のルータを選び、転送のたびに宛先MACだけを次の相手のものに書き換える
ルータは最長一致で次のルータ(ネクストホップ)を選びます(3-3)。転送のたびに書き換わるのは宛先MACアドレスだけで、宛先IPアドレスは最終目的地のまま変わりません(2-1)。
正解:OSがPCごとに異なる送信元ポート番号を割り当てること、かつNAPTがその対応をグローバル側の変換テーブルにも記録すること
まずOSが接続ごとに異なる送信元ポート番号を割り当てます(4-3)。さらにNAPTが「プライベートIP:ポート」と「グローバルIP:ポート」の対応を変換テーブルに記録し、戻りのパケットをポート番号で正しいPCへ振り分けます(2-4)。MACアドレスは同一ネットワーク内でしか意味を持たず、そのままインターネットには出て行けません。
正解:第6層(プレゼンテーション層)
データの表現形式(文字コードや圧縮、暗号化)を扱うのは第6層(プレゼンテーション層)です。TLSによる暗号化はこの層の仕事に分類されます(1-2)。
これで全19回が終わりです
第1章の「なぜ階層に分けるのか」から始まり、OSI参照モデル、アドレスのしくみ、データが届くしくみ、通信の制御、 アプリケーション層と積み上げてきた知識が、今回の1本の線ですべてつながりました。お疲れさまでした。