Webブラウザでwww.example.comを入力しWebサイトが表示されるまでの流れを説明する
ブラウザにwww.example.comを打ち込んだとき、裏側では何が行われているか
- クライアントがクライアントPCのWebブラウザにURLを入力する
- URLに含まれるドメインをDNSサーバに問い合わせる
- DNSサーバでドメインからIPアドレスを特定する
- DNSサーバからIPアドレスが送信される
- 取得したIPアドレスのWebサーバにデータを要求
- Webサーバは要求した内容に応じて、保存しているコンテンツ(HTML,CSS,画像など)を返す
- Webサーバから返されたデータをWebブラウザで表示する
ブラウザからDNSサーバに問い合わせる前にやっていること
- クライアントPCがブラウザのキャッシュに「www.example.com」のIPアドレスが残っているか調べに行く
- ブラウザにキャッシュが残っていない場合はhostsファイルを調べにいく
Windows:C:\Windows\System32\drivers\etc\hosts
CentOS:/etc/hosts
DNSサーバに問い合わせてIPアドレスを受け取るまでを深堀する
DNSサーバに問い合わせてwww.example.comのIPアドレスを取得する順番
- クライアントPCがDNSキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
- ブラウザがクライアントPCのOSとして備わっている機能のスタブリゾルバを呼び出す
- スタブリゾルバがDNSのキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
- キャッシュサーバがルートサーバへ「www.example.com」のIPアドレスは何か問い合わせをする
- ルートサーバがキャッシュサーバへ「com」の情報を管理するDNSサーバのいずれか(a.dns.com, b.dns.com, ...)に問い合わせるよう回答する
- キャッシュサーバが回答の中から1つ選んだ「com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
- 「com」のDNSサーバはキャッシュサーバに「example.com」のDNSサーバの情報を回答する
- キャッシュサーバが回答の中から1つ選んだ「example.com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
- 「example.com」のDNSサーバはキャッシュサーバに「www.example.com」のIPアドレスを回答する
- キャッシュサーバはクライアントPCにIPアドレスの情報を回答する
JPNICの記事で紹介している「名前解決の仕組み」が分かりやすい
キャッシュサーバがすでに「www.example.com」のIPアドレスを得ている場合(DNSサーバからIPアドレスを得た場合)
【図解】ドメインとは?をわかりやすく解説します - カゴヤのサーバー研究室
キャッシュを使う
クライアントPCがすでにwww.example.jpのIPアドレス情報を取得している場合、そのIPアドレスを用いてWebサーバにデータを要求する
キャッシュサーバがwww.example.jpのIPアドレス情報を取得している場合、クライアントPCはキャッシュサーバに対して問合せし、IPアドレスを取得する
WebブラウザとWebサーバとのやり取りを深堀する
- WebブラウザがWebサーバに対してTCPのコネクションを確立する
- Webブラウザが該当するIPアドレスのWebサーバにHTTPリクエストを送信してWebページのデータを要求
- Webサーバが受信したHTTPリクエストを解析
- WebサーバがWebブラウザに要求されたデータをHTTPレスポンスとして送信
- Webブラウザが受信したデータを解析してWebページとして表示
TCPのコネクション(3 way handshake)
コネクションを確立する。
- 接続元が接続先へ通信路を確保するために、データ転送の許可要求を出す「SYN(シン):1, ACK(アック):0」のパケット
- 接続先が接続元に許可と許可要求を出す「SYN:1, ACK:1」のパケット
- 接続元が接続先に許可を出す「SYN:0, ACK:1」のパケット
図にすると以下のようになる。
-----
ノード1 ノード2
CLOSED LISTEN
---SYN-->
SYN_SENT
ESTABLISHED <-ACK+SYN--
SYN_RCV
---ACK--> ESTABLISHED
-----
コマンドでTCPコネクションを確立すると以下のようになる。
sudo tcpdump host www.example.com and port 80
このやり取りをすますと、PC上でESTABLISHEDという状態になる。
ネットワークの接続一覧は「netstat」コマンドで表示できる。
https://wa3.i-3-i.info/word15428.html
※終了するときはコネクションを切断する
TCPのフラグ(コントロールフラグ)
URG(Urgent):緊急に処理すべきデータが含まれている
ACK(Acknowledgement):確認応答番号のフィールドが有効であること
PSH(Push):受信したデータをバッファリングせず、アプリケーションに渡す
RST(Reset):コネクションが強制的に切断されること
SYN(Synchronize):コネクションの確立を要求する
FIN(Fin):コネクションの正常終了を要求する
Webサーバとのやりとりを深堀する
TCPコネクションを確立する
通常はHTTPのウェルノウンポートの80番(HTTPSであれば443番)を指定し接続を要求する
HTTP接続が可能になったら、WebサーバはURLで指定されたファイルなどのリソースを取得しクライアントに返信する
メモ
URLとドメイン
ホスト名:www
ドメイン名:example.co.jp
FQDN:www.example.co.jp
jp:トップレベルドメイン
co:セカンドレベルドメイン
example:サードレベルドメイン
ドメイン名はどの部分?|ドメイン基礎知識|Zenlogic - 株式会社IDCフロンティアのレンタルサーバー
ホスト名とIPアドレスの例
ホスト名:www.google.co.jp
IPアドレス:172.217.161.67