🦁

ウェブサイトが表示されるまでの通信の仕組み[Part1]

2022/08/29に公開

なぜ書くのか

  • ファンダメンタルな技術を理解し言語化できるようにしたいから
  • 普段何気なく使っている技術に対して疑問を持てるようにしたいから
  • ネットワークの基礎やHTTP通信について勉強したくなったから
    ※ 長くなりそうのでパート分けします
    ※ 今回はレンダリングエンジンの処理については記載しません

ブラウザの検索バーにURLを入力してからページが表示されるまでの流れ

  1. URLを解読
  2. HSTSリストを確認
  3. DNSへ問い合わせ ※ 今回はここまで
  4. TLSハンドシェイク
  5. HTTPプロトコル
  6. HTTPサーバー
  7. サーバーレスポンス

1. URLを解読

  • ブラウザはURLをプロトコル、ホスト名、パス名、ポート番号に変換する。

2. HSTSリストを確認

  • HSTSとは、HTTP「レスポンス」ヘッダにHSTSに関する事項を記載することで、指定した有効期間内はブラウザ(ユーザエージェント)が同一ドメインにアクセスする際はTLSによる通信を強制する仕組み。

  • サーバ側からブラウザに対し「Strict-Transport-Security」パラメータを用いて当該ドメインに対してHSTSを有効化させる。

  • そのほかに「pre-loaded list」がブラウザ側にハードコードされておりアクセスしようとしているドメインがそのリストにあればアクセス初回から必ずHTTPSで接続される。

  • HSTSの仕組みがないと中間者攻撃など何らかの理由で「http」での通信を行わされ通信を傍受される恐れがある。

3. DNSへ問い合わせ

  • 最初にブラウザキャッシュを確認する。OSはブラウザにキャッシュの有効期限を表すTTLを伝えないため、TTLにかかわらず20~30分ほどキャッシュは残る。

  • 次にOSのキャッシュを確認する。ブラウザキャッシュが残っていない場合はブラウザはシステムコールを呼び出しOSにDNSの探索を依頼する。OS自体もDNSキャッシュを保持しているため、キャッシュが残っていればブラウザに返す。

  • OSキャッシュがなければ次にルータキャッシュを確認する。ルータにDNSリクエストが送信される。

  • 次にISPのDNSキャッシュサーバにリクエストを送る。
    DNSキャッシュサーバの役割は、「再帰探索」と「キャッシュ」を行うことである。

  • 「キャッシュ」
    過去にあった問い合わせに対してTTLが付与されているレコードを管理している。TTLの時間に基づきキャッシュとしてレスポンスを返すので、応答速度の向上や回線リソースの削減にもつながる。

  • 「再帰探索」
    キャッシュがない場合は再帰探索を行う。
    まず、DNSキャッシュサーバはルートDNSサーバに、TLDの問い合わせを行う。そこからルートDNSサーバが下位のDNSサーバへと順々に問い合わせを行なっていく。

3-2. DNSについて

  • DNSサーバには、「DNSキャッシュサーバ」と「DNSコンテンツサーバ」の大きく2種類がある。

  • DNSキャッシュサーバは、フルサービスリゾルバと呼ばれていて、
    ブラウザからのリクエストによりドメイン名とIPアドレスの対応の問い合わせを行い、その結果をキャッシュする。クライアントPCの代わりに名前解決をおこなう。

  • DNSコンテンツサーバは、ドメイン名とIPアドレスの対応表を「ゾーン」という単位で管理する。こちらがDNSサーバにあたる。

  • この他に、ユーザ側のPCを立ち上げるとDHCPによって設定される、「優先DNS」と「代替DNS」がある。

  • DNSはUDP、TCPプロトコルどちらでも動作するが主にUDPを利用する。UDPを使う理由はコネクションレス型プロトコルであり、TCPに比べてオーバーヘッド(速度優先)が少ないから。また、DNSの通信でやり取りされるデータ(メッセージ)はドメイン名やIPアドレスなど比較的短いものがやりとりされるため、UDPの方が適している。

※ TCPを利用するケースもあるようだが、要調査を行う

今回はここまで。

参考

GitHubで編集を提案

Discussion