はじめに
「ブラウザにURLを打ち込めばWebページが見られる」——これは当たり前すぎて、普段は裏側を意識することがありません。
しかし実は、PCは電源を入れた直後、自分がどのアドレスを名乗ればいいのかも分からない状態で、
そこからブラウザにURLを打ち込んでページが表示されるまでのたった数秒間に、裏側では複数のプロトコルが連携して動いています。
この記事では、その流れを5つのステップに分けて整理してみました。
自分自身の理解の整理も兼ねているので、間違いがあったらすいません🙏
登場人物
| 登場人物 | 正体 | 役割を一言で言うと |
|---|---|---|
| PC | クライアント | Webページを見たい人 |
| ルータ | ルータ(DHCPサーバ兼デフォルトゲートウェイ) | 家の中でのIPアドレスを配り、外への出入り口も管理してくれる案内係 |
| DNSサーバ | DNSサーバ | 「名前」から「住所(IPアドレス)」を教えてくれる係 |
| Webサーバ | Webサーバ(今回はYahoo!を例に) | Webページのデータを持っている人 |
1. DHCPによる身元確認
PCの電源が入った直後、PCは自分のIPアドレスすら知りません。そこでPCはネットワーク内に向かって「誰か私にIPアドレスを教えて!」とブロードキャスト通信で呼びかけます。
それを受け取ったルータ(家庭用ネットワークではDHCPサーバの役割も兼任していることが多い)が、次のような設定を返します。
- IPアドレスは
192.168.1.10 - 外の世界に出たいときは、デフォルトゲートウェイである
192.168.1.1(ルータ)に聞く
これでPCはネットワークに参加できる状態になりました。
補足: 実際のDHCPは「DISCOVER → OFFER → REQUEST → ACK」という4段階のやり取り(通称DORAプロセス)で行われています。
2. DNSによる名前解決
ブラウザに https://www.yahoo.co.jp と入力しても、PCは「IPアドレス(数字)」でしか通信相手の場所を理解できません。
そこでPCはDNSサーバに「www.yahoo.co.jp のIPアドレスは何番か」を問い合わせます。DNSサーバから 183.79.x.x という回答を受け取ることで、最終的な宛先が判明します。
補足: ブラウザやOSは一度調べた結果をキャッシュするため、毎回問い合わせているわけではないとのこと。
3. ARPによるMACアドレス解決
Yahooのサーバは家の外にあるため、まずはルータにデータを渡す必要があります。
PCはルータのIPアドレス(192.168.1.1)は知っていますが、同じネットワーク内でデータを物理的に届けるために必要なMACアドレスは知りません。そこでARPという仕組みを使い、「192.168.1.1 のMACアドレスを教えて」と問い合わせて解決します。
補足: このARP解決は毎回行われるわけではなく、一度取得したMACアドレスはPC内のARPテーブルに一定時間キャッシュされます。通常は初回のみ発生します。
4. NAT / NAPTによるアドレス変換
データを受け取ったルータは、それをインターネット側へ送り出そうとします。
ただしPCのIP(192.168.1.10)は家の中でしか通用しないプライベートIPアドレスです。このまま外に出ると、返信の宛先が分からなくなってしまいます。
そこでルータはNAT / NAPTという機能を使い、送信元アドレスを「インターネット上で通用するグローバルIPアドレス」に変換してから外へ送信します。
5. TCP・HTTPによる通信
複数のルータによる中継を経て、データは無事Webサーバに到着します。
ここでいきなりHTTPリクエストを送るわけではなく、まずTCPの3ウェイハンドシェイク(SYN → SYN/ACK → ACK)によってサーバとの間にコネクションを確立します。その後にHTTPリクエスト(「このページのデータをください」という要求)を送り、サーバからHTMLなどのレスポンスが返ってきます。
帰り道もルータがNATで宛先をPCのプライベートIPに変換し直し、ブラウザにWebページが表示されます。
補足: 今どきの
https://通信では、TCP接続の後にさらにTLSハンドシェイク(証明書の検証と暗号鍵の交換)が挟まります。
全体の流れ
まとめ
このように、DHCP・DNS・ARP・NAT・TCP・HTTPといった各プロトコルは、それぞれ別々の役割を持ちながらも、すべて「Webページを見る」というひとつの目的のために連携しています。
普段は数秒で終わってしまうこの裏側の流れを、今回は一つずつ言葉にして整理してみました。
同じように「なんとなく分かった気になっていたけど説明できない」という方の理解の助けになれば嬉しいです。
