![見出し画像](https://assets.st-note.com/production/uploads/images/100431520/rectangle_large_type_2_345a084f8c1be51474247171754979c1.png?width=800)
URLを打ち込んでEnterを押した時に何が起きているか_DNSによる名前解決 #361
以下のようなURLが存在したとして、これをブラウザのアドレスバーに打ち込んでEnterを押した時、何が起こっているかを整理します。
https://sample.example.com/
すごくざっくり言うと、
・ドメイン名と対応しているIPアドレスを取得するため、
・URLを解析して、
・いくつかのキャッシュを調べて、
・キャッシュに無ければサーバーに問い合わせる
という流れです。
この一連の流れを「名前解決」と呼びます。
URLを解読する
まず、ブラウザはURLの解読を始めます。URLを分解して「プロトコル」「ドメイン名」「パス名」が何かを調べます。
上記のURLの場合、httpsがプロトコル、sample.example.comがドメイン名、/がパス名となります。
例えばアドレスバーに検索したいテキストを入力した場合など、もしここでプロトコルの記述がなかったり、ドメイン名が有効でない場合、ブラウザは入力されたテキストをデフォルトの検索エンジンに渡します。
HSTSプリロードリストを調べる
少し脱線しつつも重要な処理です。
HSTS(HTTP Strict Transport Security)とはWebブラウザに対してHTTPSでの通信を強制するもので、HSTSプリロードとは初回アクセス時からHTTPS接続させるようにブラウザに通知する仕組みです。
プリロードリストはGoogleによってまとめられている、HSTS対応のWebサイトをリスト化したもので、ブラウザはこのリストを見て登録されていればHTTPSで通信を行うようになります。
主に以下3点を確認しています。
・SSL証明書が有効かどうか
・同一ホストでHTTP→HTTPSへリダイレクトしているか
・常時SSL化が行われているか
要約すると、HTTPでアクセスしてきたユーザーを中間攻撃者から守るための仕組みです。
DNSでIPアドレスを取得する
ここからが名前解決のメインどころです。
DNS (Domain Name System)という、IPアドレスとドメイン名の対応づけを行うシステムの仕組みを整理します。
IPアドレス
インターネットに接続されている機器の1つ1つに振られている固有の番号です。電話番号や住所のようなイメージになります。特徴として「127.0.0.1」のような、人間に理解しにくいドット区切りの数字になっています。
ドメイン名
IPアドレスを人間に扱いやすい文字列に変換したものです。IPアドレスと対応関係にあります。
人間が扱いやすいドメイン名からIPアドレスを取得するためのシステムがDNSです。以下の手順で処理が進んでいきます。
ブラウザのキャッシュを調べる
まずブラウザは自身キャッシュを確認し、既にIPアドレスを知っているかどうかを調べます。ここでIPアドレスが見つかれば名前解決のプロセスは終了です。
hostsファイルを調べる
ブラウザにキャッシュが残っていなければhostsファイルを調べます。
これはインターネット黎明期の名残で、元々IPアドレスとドメイン名の対応表は「HOSTS.TXT」というたった1つのファイルに記載されていて、名前解決のプロセスはこれだけで行われていました。
しかもこのファイル、OSの設定ファイルの一つで、つまり自分のPC内に入っているものです。最初はこれで処理できていたそうですが、IPアドレスが加速度的に増えていくにつれて対応できなくなり、今のようなDNSサーバーを設置して名前解決する仕組みになったそうです。
もしこのファイル内に対象のホスト名があれば、名前解決のプロセスは終了です。
スタブリゾルバを呼び出してキャッシュDNSサーバーを調べる
ブラウザは次に、スタブリゾルバというDNSサーバーに問い合わせをするプログラムを呼び出します。これはクライアントPCにOSとして備わっている機能です。
キャッシュDNSサーバーはスタブリゾルバからの問い合わせ結果を一定期間キャッシュに保存しておいて、後で同じ問い合わせが来たらその結果を再利用して返してくれるものです。
ここにキャッシュがあれば、スタブリゾルバは受け取った結果からIPアドレスを取り出し、ブラウザから指定されているメモリ領域に書き込み、名前解決のプロセスは終了します。
キャッシュDNSサーバーが各サーバーに問い合わせる
どのキャッシュにも残っていなければ、キャッシュDNSサーバーは以下の各サーバーに順番に問い合わせて、IPアドレスを取得します。
①ルートサーバー
インターネット上の全てのドメイン名を管理しているデータベースにアクセスし、該当するトップレベルドメイン(TLD)サーバーの情報を返します。
今回の場合は「.comのTLDサーバーに聞いて」と返答があります。
②TLDサーバー
トップレベルドメイン(com, org, jpなど)を管理しており、要求されたドメイン名が含まれるネームサーバーの情報を返します。
今回の場合は「example.comのネームサーバーに聞いて」と返答があります。
③ネームサーバー
このサーバーがドメイン名とIPアドレスの対応表を持っており、要求されたIPアドレスを返します。
これで名前解決のプロセスは終了となります。
参考ブログにわかりやすい図がありました↓
![](https://assets.st-note.com/img/1678974610516-QX0FMgBcpH.png?width=800)
ここまでお読みいただきありがとうございました!
参考
この記事が気に入ったらサポートをしてみませんか?