👏

webサービスが動く仕組みまとめ ~第1章 URLを入力~

2024/02/20に公開

「ネットワークはなぜつながるのか」学習メモ。

この本を読むことで、どんな知識がつくのか?

  • WebブラウザにURLを入力してから、ページが表示されるまでの流れを把握できる。
  • ネットワーク機器やソフトウェアがどのように動いているのかを把握できる。
    ネットワークに関する各々の技術を詳しく見るよりも、そのネットワークのコンポーネントが実際にどのように使われているのかに焦点を当てている。

キーワード

  • TCP/IP
  • イーサネット
  • DNSサーバー
  • IPアドレス
  • プロトコルスタック
  • パケット
  • UDP
  • ルーター
  • ファイアウォール

今回は、WebブラウザにURLを入力してから、メッセージをサーバーに送信するまでのフェーズを紹介します。

リクエストを生成

ユーザーがブラウザにURLを入力してから最初に行うのが、リクエストの生成です。
URLとは、下記のようなhttpsから始まる文字列のことですね。

// 東京ディズニーランドのホームページ
https://www.tokyodisneyresort.jp/tdl

まずはURLを解読していくのですが、以下のように分割していきます。

構成要素
通信プロトコル https:
webサーバー名(ドメイン) www.tokyodisneyresort
パス tdl

URLを解読することで、どのWebサーバーから何の情報を取得すれば良いかが分かりました。

HTTPとは?

通信プロトコルと呼ばれるもの。
クライアントがサーバーに向かって、何を、どうして欲しいのかを通信するための手順を定めたもの。
HTTPリクエストのうち、
「何を」に相当するものがURI。
「どうして欲しい」に相当するものがメソッド。
データを取得したいのか、操作したいのかなどを示す情報だ。
以下が主なメソッドである。

メソッド名 意味
GET URIで指定したファイルをサーバーから取得する
POST サーバーへデータを送信する
PUT URIで指定したファイルを更新する
DELETE URIで指定したファイルを削除する

// POSTやPUT, DELETEで操作するデータは、HTTPリクエストのヘッダ

リクエストがwebサーバーに届いたら、リクエスト内容を確認し、要求に従って処理が走る。
その結果をレスポンスに格納して返送する。
レスポンスの先頭には処理が正常に終了したのか、異常終了したのかを示すステータスコードが格納される。
テキトーなURLを入力したときに表示される404エラーはその一例。

クライアントはレスポンスデータを受け取り、ブラウザに画面を表示していく。

ここからHTTPメッセージを作っていきます。
リクエストのフォーマットは以下の通りです。

// 1行目がリクエストライン。この1行でどんなリクエストの内容が概ね分かる
<メソッド> <URI> <HTTPバージョン>

// 2行目以降の塊がメッセージヘッダ。リクエストの付加的な情報が格納されている
<フィールド名>:<フィールド値>
...
...

// それ以降の塊がメッセージボディ。サーバーに送信したいデータなどが格納されている
// ex) フォームの入力内容など
<メッセージボディ>

webサーバーから返送されるレスポンスのフォーマットは以下の通りです。

// リクエストライン
// レスポンスフレーズとは、ステータスコードの内容を表す説明文
<HTTPバージョン> <ステータスコード> <レスポンスフレーズ>

// メッセージヘッダ
<フィールド名>:<フィールド値>
...
...

// リクエストボディ
// サーバーから返送されたデータやファイルが格納される
<メッセージボディ>

なぜIPアドレスとドメイン名を使い分けるのか?

それは、以下の要素を両立したいからです。

  • わかりやすさ
  • 実行効率

わかりやすさは、数字の羅列だけで何のアドレスなのかが分からないという問題を解決するため、英数字で表現できるドメイン名を使うようにしています。
では、IPアドレスなんか使わずにドメイン名だけでコンピュータのアドレスを管理すれば良いのではないかって?
それは野暮ってもんです。

  • IPアドレス: 4バイト
  • ドメイン: 最大255バイト
    数十倍以上のデータを使ったまま通信を行うと、速度の大幅低下が起こります。
    なので、通信前にIPアドレスを調べててから通信するという手順が必要になり、結果的にドメインとIPアドレスが使い分けられているのです。

IPアドレスはパソコンのどこで問い合わせる?

Webサーバーへリクエストを送信する前にDNSサーバーへ問い合わせてIPアドレスを調べるのですが、パソコンのどこでDNSサーバーとやり取りしているのでしょうか?
それは、ブラウザが機能として提供しています。
DNSリゾルバという箇所でIPアドレスを調べています。
DNSリゾルバにて、ドメインからIPアドレスを調べる一連の流れを名前解決と呼びます。

DNSサーバーへIPアドレスを問い合わせ

作成したリクエストをPCのOSに依頼してWebサーバーへ送信してもらいましょう!
リクエストを送信するためには、URLのドメインを元にWebサーバーのIPアドレスを調べる必要があります。

IPアドレスとは?

TCP/IPネットワークにおいて、PCがネットワークのどこを指すのかを示す番号。
ネットワーク上での住所と言える。
ex) 10.11.12.13

DNSサーバーへようこそ

プロトコル・スタックにメッセージを送信を依頼

Discussion