私はサポートエンジニアになりたい

元教師・現開発エンジニアの挑戦

Webブラウザでwww.example.comを入力しWebサイトが表示されるまでの流れを説明する

ブラウザにwww.example.comを打ち込んだとき、裏側では何が行われているか

  1. クライアントがクライアントPCのWebブラウザにURLを入力する
  2. URLに含まれるドメインDNSサーバに問い合わせる
  3. DNSサーバでドメインからIPアドレスを特定する
  4. DNSサーバからIPアドレスが送信される
  5. 取得したIPアドレスのWebサーバにデータを要求
  6. Webサーバは要求した内容に応じて、保存しているコンテンツ(HTML,CSS,画像など)を返す
  7. Webサーバから返されたデータをWebブラウザで表示する

www.rworks.jp

ブラウザからDNSサーバに問い合わせる前にやっていること

  1. クライアントPCがブラウザのキャッシュに「www.example.com」のIPアドレスが残っているか調べに行く
  2. ブラウザにキャッシュが残っていない場合はhostsファイルを調べにいく
    Windows:C:\Windows\System32\drivers\etc\hosts
    CentOS:/etc/hosts

Webページがブラウザに表示されるまでに何が起こるのか?

DNSサーバに問い合わせてIPアドレスを受け取るまでを深堀する

DNSサーバに問い合わせてwww.example.comIPアドレスを取得する順番

  1. クライアントPCDNSキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
    1. ブラウザがクライアントPCのOSとして備わっている機能のスタブリゾルバを呼び出す
    2. スタブリゾルDNSキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  2.  キャッシュサーバルートサーバへ「www.example.com」のIPアドレスは何か問い合わせをする
  3. ルートサーバキャッシュサーバへ「com」の情報を管理するDNSサーバのいずれか(a.dns.com, b.dns.com, ...)に問い合わせるよう回答する
  4. キャッシュサーバが回答の中から1つ選んだ「com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  5. 「com」のDNSサーバキャッシュサーバに「example.com」のDNSサーバの情報を回答する
  6. キャッシュサーバが回答の中から1つ選んだexample.com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  7. example.com」のDNSサーバキャッシュサーバに「www.example.com」のIPアドレスを回答する
  8. キャッシュサーバクライアントPCIPアドレスの情報を回答する

JPNICの記事で紹介している「名前解決の仕組み」が分かりやすい

www.nic.ad.jp

キャッシュサーバがすでに「www.example.com」のIPアドレスを得ている場合(DNSサーバからIPアドレスを得た場合)

  1. キャッシュサーバタブブラウザに問い合わせの結果を返す
  2. スタブリゾルが受け取ったIPアドレスを取り出し、ブラウザから指定されているメモリ領域に書き込む

 

インターネット10分講座:DNSキャッシュ - JPNIC

【図解】ドメインとは?をわかりやすく解説します - カゴヤのサーバー研究室

キャッシュを使う

クライアントPCがすでにwww.example.jpのIPアドレス情報を取得している場合、そのIPアドレスを用いてWebサーバにデータを要求する

 

キャッシュサーバがwww.example.jpのIPアドレス情報を取得している場合、クライアントPCはキャッシュサーバに対して問合せし、IPアドレスを取得する

WebブラウザとWebサーバとのやり取りを深堀する

  1. WebブラウザWebサーバに対してTCPのコネクションを確立する
  2. Webブラウザが該当するIPアドレスWebサーバにHTTPリクエストを送信してWebページのデータを要求
  3. Webサーバが受信したHTTPリクエストを解析
  4. WebサーバWebブラウザに要求されたデータをHTTPレスポンスとして送信
  5. Webブラウザが受信したデータを解析してWebページとして表示

Webサーバとは、Webアクセスの仕組み

TCPのコネクション(3 way handshake)

コネクションを確立する。

  1. 接続元接続先へ通信路を確保するために、データ転送の許可要求を出す「SYN(シン):1, ACK(アック):0」のパケット
  2. 接続先接続元に許可と許可要求を出す「SYN:1, ACK:1」のパケット
  3. 接続元接続先に許可を出す「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】コネクションの確立までの道のり - Qiita

※終了するときはコネクションを切断する

TCPのフラグ(コントロールフラグ)

URG(Urgent):緊急に処理すべきデータが含まれている

ACK(Acknowledgement):確認応答番号のフィールドが有効であること

PSH(Push):受信したデータをバッファリングせず、アプリケーションに渡す

RST(Reset):コネクションが強制的に切断されること

SYN(Synchronize):コネクションの確立を要求する

FIN(Fin):コネクションの正常終了を要求する

TCP/IP - TCPとは - TCPヘッダ

Webサーバとのやりとりを深堀する

TCPコネクションを確立する

通常はHTTPのウェルノウンポートの80番(HTTPSであれば443番)を指定し接続を要求する

HTTP接続が可能になったら、WebサーバはURLで指定されたファイルなどのリソースを取得しクライアントに返信する

メモ

URLとドメイン

http://www.example.co.jp

ホスト名:www

ドメイン名:example.co.jp

FQDN:www.example.co.jp

jp:トップレベルドメイン

co:セカンドレベルドメイン

example:サードレベルドメイン

ドメイン名はどの部分?|ドメイン基礎知識|Zenlogic - 株式会社IDCフロンティアのレンタルサーバー

ホスト名とIPアドレスの例

ホスト名:www.google.co.jp

IPアドレス:172.217.161.67