ブラウザからのリクエストにWebサーバーがレスポンスするまでのデータの流れを調べてみた

プログラミング

ブラウザからのリクエストにWebサーバーがレスポンスするまでのデータの流れを調べてみた
データってどうやって流れていくのだろう

おはようございます。てーやまです。
2021年になりました。今年もよろしくお願いいたします。

自分の私生活はと言うと、『インフラ』を勉強しています。

インフラは会社によってはインフラエンジニアが専任しているかと思います。
うちの場合もそうですが、アプリケーションエンジニアがインフラを学ぶと、以下のようなメリットがあるのではないかと思います。

  • 障害発生時の判断材料が増える
  • 好きな環境を作成して自由に使える
  • 誰かが作った環境を使うだけといったモヤモヤが無くなる
  • システム全体を俯瞰して見れる

ただ、インフラはとても難しく、一長一短には理解できません…。
(自分が頭悪いだけかもしれませんが)
ですので、テーマを絞って少しずつ理解できていけばと思っています。

そこで今回は『ネットワーク』をテーマに勉強しました。
『ブラウザからリクエストした時』と『Webサーバがレスポンスした時』のデータの流れについて調べてみたので、備忘録として残しておきます。

【前提】ブラウザからのリクエストとレスポンスとは

以下のような状態を指しています。
クライアント側を主観に置いており、サーバー側はブラックボックスとします。

  1. ブラウザからURLをクリック
  2. ページが表示される

上記の1を『ブラウザからのリクエスト』、2を『Webサーバからのレスポンス』と呼ぶことにします。

【データの流れ】ブラウザからインターネットに繋がるまで

クライアント側PCの話です。
例えば、家庭で特定のWebページ内のリンクをクリックしたと仮定します。

ブラウザがページを要求するデータを作る

リクエストしたページが表示されるということは、Webサーバからページをダウンロードしている事になります。

ですので、まず、ブラウザから『どのWebサーバに対してリクエストを送るのか』といった要求データが作られる事になります。

その際に『ポート番号』が決定されます。
ポート番号は、そのブラウザからどのWebサーバ宛に通信を行うかを設定した『宛先』と『送信元』を持った番号のことです。

この際宛先のポート番号は通常80番、送信元のポート番号は、その時に使用していない番号がランダムで割り当たります。

そして、実際にそのWebサーバの場所を『IPアドレス』として取得して、要求データに付け加えます。

IPアドレスは、リンク先のURLを『DNS』が読み替えることで取得されています。

要求データがインターネットに乗るまで

家庭内の『LAN』からインターネットに接続するためには、データが『ルーター』を通らなくてはなりません。

しかし、この時点で要求データは『Webサーバの場所をIPアドレスとして知っているだけ』であり、『LAN内のルーターの場所』を知りません。

そこで、『MACアドレス』の登場です。
MACアドレスはLAN内の宛先、送信元を指定するためのアドレスです。
この場合は『DNS』ではなく『ARP』という通信を使って、MACアドレスを取得します。

【データの流れ】インターネットからWebサーバに到達するまで

家庭内LANのルーターは、契約先のプロバイダのルーターに要求データを送信します。

この際、プロバイダのルータが、最終的なWebサーバの宛先までの通信経路を作ります(ルーティング)

インターネットは複数のLAN環境がルーターを通じて蜘蛛の巣のように張り巡らされたイメージなので、家庭内LANから最終的な目的地まで、数々のルーターを経由する事になり、それをルーティングするわけです。

インターネットからWebサーバ側に到達するまで

前述のように、ルーティングによって作られた経路を要求データが通り、Webサーバ側のプロバイダのルータに到着します。

Webサーバ側のLANに入るために、『ファイアウォール』がデータの中身をチェックします。ファイアウォールは不適切なデータはその場で破棄してくれます。

Webサーバ側は『そのページを閲覧したい人のために、要求に応える経路』を用意してあり、要求データはそのための専用ネットワーク(DMZ)を通る事になります。

これはファイアウォールがすべてのデータを遮断してしまうのを防ぐために、インターネットから要求データを受け取れる場所をイメージすれば良いと思います。

Webサーバ側LANからWebサーバまで

Webサーバ側のLAN内に入った要求データは、家庭内LANと同様にMACアドレスを取得して、Webサーバの場所を特定します。

こうして、無事にWebサーバまで辿り着く事ができました!!

【データの流れ】Webサーバからのレスポンス

Webサーバは要求データをアプリケーションサーバに渡して、業務処理が行われます。

そして往路と同様に、返却対象のIPアドレスやポート番号を付与して返却データを送信します。つまり、往路と復路は同様のことをやっているわけです。

このようにして、私たちはページの閲覧ができているのですね。