はじめに
インターネットは、私たちの生活に欠かせない存在となりました。Web上でショッピングをしたり、サイトのページを見たり、検索したりと、ほぼ毎日のようにブラウザを使用してWebサイトを閲覧しているのではないでしょうか?便利に使用している裏では、実はさまざまなプロセスが動いており、多くの手順を踏んで皆さんの端末にWebサイトのページが表示されています。
今回は、Webサイトが表示されるまでのデータの旅路、「自分のPCからインターネットのWebサイトに繋がるまでのプロセス」を解説します。この記事を通して、Webの基本となるさまざまな知識に触れることができます。ネットワークエンジニアを目指す方にとって必須の基本となる要素が多くありますので、ぜひ一緒に学んでいきましょう!
この記事について
目的
- 自分のPCにWebサイトを表示するまでのプロセスを知る
- 各プロセスにおけるさまざまな技術を理解する
対象者
- 初学者の方
- Webサイトがどのように表示されているか知りたい方
- ネットワークエンジニアを目指している方
WebサイトがPCの画面に表示されるまでの基本情報
まずはじめに、Webサイトを閲覧する際の基本を確認しておきましょう。ここでは、インフラを勉強しているアリスが、初めてエンベーダーのサイトを閲覧するという状況を仮定して説明します。
アリスはインフラの勉強をするために、以前から気になっていたエンベーダーのサイトにアクセスしようとしています。アリスは、エンベーダーサイトのドメイン名をブラウザのURL欄に入力し、エンターを押しました。すると、アリスのPCのブラウザ上で「エンベーダーのサイトを見たい」というリクエストが生成され、エンベーダーのデータを保持しているWebサーバーに送信されます。リクエストを受け取ったWebサーバーは、アリスからのリクエスト内容に基づいてWebページの表示に必要なデータを収集し、インターネットを通じてアリスのPCへデータを返信します。データを受け取ったアリスのPCのブラウザは、データをもとに画面にページを表示し、アリスはエンベーダーのサイトを閲覧できるようになります。
クライアント(この場合、アリス)がリクエストをWebサーバーに送信し、サーバーがそのリクエストに応じてサイトのデータをレスポンスとしてクライアントに返信するというプロセスが行われます。このデータのやり取りは、「クライアントサーバーモデル」と呼ばれています。
Webサーバーについて、その役割や種類については以下の記事で詳しく解説しています。
https://envader.plus/article/69
名前解決とDNSの仕組み
クライアントサーバーモデルについて、もう少し詳しく説明します。クライアントがWebサイト閲覧のリクエストを生成すると、Webサーバーにリクエストを送信する前に、サイトのドメイン名からサーバーのIPアドレスを紐づける「名前解決」が行われます。名前解決とは、DNSサーバーで行われる、ドメイン名をIPアドレスに変換するプロセスです。
通信がWebサーバーへ到達するためには、住所にあたるIPアドレスが必要ですが、このIPアドレスは数字の羅列であり、人が扱いにくいものです。そこで、人が識別しやすい任意の名前(ドメイン名)をIPアドレスに対応付け、ドメイン名で通信先を指定することができます。この仕組みを「DNS(Domain Name System)」と呼びます。
これらを踏まえた上で、名前解決を含むクライアントサーバーモデルのプロセスは以下の通りです。
- クライアントからWebサイト閲覧のリクエストを送信
- クライアントが入力したドメイン名の名前解決を行い、サーバーのIPアドレスに変換
- クライアントが作成したリクエストをWebサーバーへ送信
- WebサーバーがWebサイトのデータをクライアントへ返信
- クライアントのPCのブラウザにWebサイトが表示される
URLの仕組みやドメイン名については以下の記事で詳しく解説しています。
https://envader.plus/article/102
自分のPCからインターネットのWebサイトに繋がるまでのプロセス
では、ここから本題に入っていきます。前のセクションで説明したクライアント(アリス)とWebサーバーとのプロセスを、このセクションではさらに細分化して解説します。プロセスを大きく3つの工程に分け、以下の項目でその流れを確認していきましょう。
-
ブラウザがDNSリクエストを生成して、ルーターを経由しDNSサーバーへ到達するまでのプロセス
1-1. URLを解析し、プロトコル、ドメイン名、パス名に分解
1-2. DNSキャッシュに名前解決の履歴があるか確認
1-3. DNSリクエストの生成とカプセル化
1-4. カプセル化されたデータの送信
-
DNSサーバでの名前解決のプロセス
2-1. DNSサーバーがドメイン名に対応するIPアドレスを検索
2-2. 名前解決のプロセスとIPアドレスの返信
-
クライアントのPCからWebサーバーにリクエストが到達し、レスポンスが返信されるプロセス
3-1. HTTPリクエストを生成しカプセル化
3-2. ルーターからモデムを通過しインターネットへ送信
3-3. WebサーバーでのHTTPリクエストの非カプセル化
3-4. HTTPレスポンスのカプセル化とデータ送信
3-5. HTTPレスポンスの非カプセル化と画面レンダリング処理
1. ブラウザがDNSリクエストを生成して、ルーターを経由しDNSサーバーへ到達するまでのプロセス
このセクションでは、アリスがブラウザのURL欄にエンベーダーのドメイン名を入力し、DNSサーバーへ名前解決のリクエストを送信するまでのプロセスを説明します。リクエストがローカルネットワークのルーターに到達するまでの手順を、「MACアドレス、LAN、カプセル化」の技術と共に確認していきましょう。
1-1. URLを解析し、プロトコル、ドメイン名、パス名に分解
アリスがエンベーダーサイトのドメイン名をブラウザのURL欄に入力して送信すると、ブラウザはURLを解析し、プロトコル、ドメイン名、パス名に分解します。次に、解析したURLからドメイン名を抽出し、そのドメイン名をIPアドレスに変換する「名前解決」を行います。インターネット上のサイトにアクセスするためには、そのサイトがホストされているサーバーの住所(IPアドレス)が必要です。URLからIPアドレスを取得するには、DNSサーバーに問い合わせを行い、ドメイン名に対応するIPアドレスを取得します。
1-2. DNSキャッシュに名前解決の履歴があるか確認
ブラウザはOSに名前解決を依頼します。まず、OSはDNSサーバーに問い合わせる前に以下の工程を行います。
-
DNSキャッシュの確認
目的のドメイン名を問い合わせた履歴があるかを確認します。履歴がある場合、保存されているIPアドレスの情報を使用することでDNSサーバーへの問い合わせが不要となり、目的のWebサーバーにすぐにアクセス可能となります。
-
ARPでLAN内のルーターのMACアドレスを取得
ARPキャッシュを確認し、LAN内のルーターのMACアドレスがキャッシュされている場合は、それを使って直接通信します。キャッシュされていない場合は、ARPリクエストをLAN内でブロードキャストし、ルーターのMACアドレスを取得します。
ARPの仕組みとMacアドレスについては以下の記事で詳しく解説しています。
https://envader.plus/article/205
https://envader.plus/article/96
https://envader.plus/article/92
1-3. DNSリクエストの生成とカプセル化
DNSキャッシュに目的のIPアドレスの履歴がない場合、OSはDNSサーバーに問い合わせをするために、DNSリクエストを生成します。このリクエストはデータ通信のために以下の手順でカプセル化されます。
-
DNSクエリ生成
アプリケーション層でDNSクエリが生成されます。生成されたクエリはトランスポート層に渡されます。
※DNSクエリは通常、UDPで通信します。DNSクエリはシンプルなテキストベースのメッセージであるため、プレゼンテーション層やセッション層での処理はほとんど行われず、省略されることが多いです。
-
トランスポート層でUDPパケットにカプセル化
DNSクエリにUDPヘッダーが追加され、UDPパケットとしてカプセル化されます。
-
ネットワーク層でのIPパケットへのカプセル化
UDPパケットにIPヘッダーが追加され、IPパケットとしてカプセル化されます。このIPヘッダーには、DNSサーバーのIPアドレスが含まれ、パケットが正しくルーティングされるようになります。
-
データリンク層でEthernetフレームへカプセル化
IPパケットはEthernetフレームにカプセル化されます。フレームにはルーターのMACアドレスが含まれ、ネットワーク上で正しく送信されるようになります。
-
物理層でビット配列に変換
Ethernetフレームは物理層でビット配列に変換され、電気信号や光信号としてネットワークを通じて送信されます。
カプセル化はTCP/IP通信において、データの正常な送受信を保証するために必要なプロセスです。TCP/IPモデルやOSI参照モデルは、インターネット上でデータをやり取りする際の通信手段を共通化し、異なるネットワークやデバイス間の通信を可能にします。TCP/IPモデルやOSI参照モデルの各階層で、リクエストデータに通信に必要な情報をヘッダーとして追加し、カプセル化します。
データを手紙に例えると、手紙を各階層の情報メモと一緒に封筒に入れ、それを次の階層へ渡していくイメージです。次の階層でも情報メモと共に、その層専用の封筒に入れることを繰り返します。このプロセスを通じて、異なるプロトコルやネットワーク間でのデータ通信の互換性が確保されます。
TCP/IPモデルのしくみと役割と、OSI参照モデルについては以下の記事で詳しく解説しています。
https://envader.plus/article/295
https://envader.plus/article/38
1-4. カプセル化されたデータの送信
カプセル化されたDNSクエリは、物理層を通じてルーターに送信されます。ルーターは受信したデータを処理し、内部に含まれているIPパケットを取り出してIPヘッダーを確認します。ルーターは、IPヘッダーの宛先IPアドレスと自身のルーティングテーブルを参照し、データを次にどのルーターに転送するかを決定します。ルーティングテーブルには、特定のIPアドレス範囲に対する転送先の情報が記載されています。ルーターによって転送されたデータは、さらにいくつかのルーターを経由して目的地のDNSサーバーに到達します。
2. DNSサーバでの名前解決のプロセス
ここまで、アリスからのリクエストがどのようにカプセル化され、ルーターに到達し、DNSサーバーへ送信されるかを学びました。このセクションでは、DNSサーバーでの名前解決プロセスについて詳しく学びましょう。
2-1. DNSサーバーがドメイン名に対応するIPアドレスを検索
DNSサーバーでは、リクエストとして送られてきたドメイン名をIPアドレスに変換する「名前解決」が行われます。アリスからの通信は、DNSキャッシュサーバーに到達し、そこを起点に他のDNSサーバーへ順次問い合わせることで名前解決のプロセスが実行されます。
具体的には、以下の手順でプロセスが進行します。手順内に出てくるDNSルートサーバーなどの用語については後ほど説明します。
- DNSキャッシュサーバーがDNSルートサーバーへリクエストを送信
- DNSルートサーバーは該当のTLDの情報を持つDNSサーバーの情報をDNSキャッシュサーバーへ返信
- DNSキャッシュサーバーがTLDの情報を持つDNSサーバーへリクエストを送信
- リクエストを受信したTLDの情報を持つDNSサーバーは、該当のSLDの情報を持つDNSサーバーの情報をDNSキャッシュサーバーへ返信
- DNSキャッシュサーバーがSLDの情報を持つDNSサーバーへリクエストを送信
- リクエストを受信したSLDの情報を持つDNSサーバーが適合するIPアドレスを検索し、その情報をDNSキャッシュサーバーへ返信
- IPアドレスの情報を受信したDNSキャッシュサーバーが、問い合わせ元のクライアントへ返信
2-2. 名前解決のプロセスとIPアドレスの返信
アリスからのIPアドレスの問い合わせは、まずDNSキャッシュサーバーに送信されます。DNSキャッシュサーバーは、過去に該当するドメイン名の名前解決を行った履歴がキャッシュに保存されているかを確認します。もしキャッシュ内に該当のIPアドレスが存在しない場合、DNSキャッシュサーバーは次にDNSルートサーバーにリクエストを送信します。
DNSルートサーバーは、トップレベルドメイン(TLD)に関する情報を管理しているサーバーです。例えば、.com
や.jp
といったTLDに対応するDNSサーバーの情報を持っています。DNSルートサーバーはリクエストの内容に基づいて、該当するTLDを管理するDNSサーバーの情報をDNSキャッシュサーバーに返信します。
DNSキャッシュサーバーは、DNSルートサーバーから受け取った情報をもとに、TLDを管理するDNSサーバーにリクエストを送信します。TLDを管理するDNSサーバーは、ドメイン名をさらに詳しく特定するため、セカンドレベルドメイン(SLD)に関する情報を持つDNSサーバーのアドレスをDNSキャッシュサーバーに返します。
DNSキャッシュサーバーは、この情報をもとにSLDを管理するDNSサーバーにリクエストを送信します。SLDを管理するDNSサーバーは、該当するドメイン名に対応するIPアドレスを検索し、その情報をDNSキャッシュサーバーに返信します。最終的に、DNSキャッシュサーバーは取得したIPアドレスをクライアントであるアリスに返信します。
3. クライアントのPCからWebサーバーにリクエストが到達し、レスポンスが返信されるプロセス
アリスがリクエストしたドメイン名がどのようにDNSサーバーで名前解決されるかを学びました。このセクションでは、アリスのリクエストがエンベーダーのWebサーバーに送信されるプロセスを説明します。リクエストがどのようにWebサーバーへ送信され、クライアントであるアリスのもとへレスポンスが返信されるか、「ルーター、ルーティングテーブル、モデム」の技術と共に確認していきましょう。
3-1. HTTPリクエストを生成しカプセル化
名前解決のプロセスが完了し、IPアドレスの情報を受け取ると、クライアント(アリス)はWebページのデータを取得するためにHTTPリクエストを生成します。
このリクエストはアプリケーション層で生成され、その後、データ送信のために各階層で順にカプセル化されます。
-
トランスポート層
アプリケーション層によって生成されたデータは、トランスポート層で処理されます。HTTPリクエストは通常、TCP通信を使用するため、この層でTCPセグメントが生成されます。TCPセグメントには、送信元ポート番号や宛先ポート番号などが含まれており、これらの情報がTCPヘッダーとしてデータに付加されます。
-
ネットワーク層
TCPセグメントはネットワーク層でIPパケットとしてカプセル化されます。この際、名前解決によって取得したWebサーバーのIPアドレスがIPヘッダーに追加されます。
-
データリンク層
IPパケットはデータリンク層でEthernetフレームにカプセル化されます。このフレームには、送信元と宛先のMACアドレスなどが含まれます。
-
物理層
Ethernetフレームは物理層でビット配列に変換され、電気信号や光信号としてネットワークを通じて送信されます。
DNSリクエスト生成時のカプセル化プロセスとほぼ同様ですが、2つの通信方法には違いがあります。ここでは、トランスポート層でTCPヘッダーが追加されます。HTTP送信には、信頼性の高いデータ転送を行うためにTCPが使用されます。これにより、データは正しい順序で、欠落なく安全にWebサーバーへ送信されます。
3-2. ルーターからモデムを通過しインターネットへ送信
物理層でビット配列に変換されたデータは、最初にルーターに到達します。ルーターは、ルーティングテーブルを参照して適切な経路を決定し、データを次のネットワークに送信します。ルーターを通過したデータはモデムに送られ、インターネットに接続されます。モデムはPCなどのデバイスが送信したデジタル信号を、インターネットプロバイダが使用するアナログ信号に変換します。これにより、インターネットプロバイダを介してデータはインターネット上に送信されます。データは複数のルーターやネットワーク機器を経由して、目的のWebサーバーにリクエストが到達します。
3-3. WebサーバーでのHTTPリクエストの非カプセル化
リクエストがWebサーバーに到着すると、まずデータは物理層で受信されます。受信したデータは、サーバー側で非カプセル化され、各階層で元の情報が取り出されます。非カプセル化はカプセル化の逆の手順で行われ、各階層でヘッダー情報を確認しながらヘッダーを取り除き、データを上の階層へ渡します。このプロセスにより、元のアプリケーションデータが復元され、Webサーバーによって正確に処理されます。たとえば、データリンク層ではEthernetフレームのヘッダーが削除され、ネットワーク層ではIPヘッダーが取り除かれます。
こうして非カプセル化されたHTTPリクエストはアプリケーション層に渡され、Webサーバーソフトウェアがリクエストの内容を解析します。
3-4. HTTPレスポンスのカプセル化とデータ送信
非カプセル化のプロセスが完了すると、Webサーバーはリクエストをもとに対応するHTMLファイルやその他のリソースを探し出し、HTTPレスポンスを生成します。このレスポンスには、ステータスコード、レスポンスヘッダー、リクエストされたWebページのHTMLなどのファイルの内容が含まれます。
生成されたHTTPレスポンスは、データ送信のためにカプセル化されます。各階層でカプセル化のプロセスを経て物理層でビット配列に変換されます。その後、データはルーターを通過しモデムへ送られ、インターネット回線へ送信されます。データはいくつかのルーターやネットワーク機器を経由してクライアント(アリス)へ返信されます。
3-5. HTTPレスポンスの非カプセル化と画面レンダリング処理
WebサーバーからのHTTPレスポンスがクライアント(アリス)へ到達すると、クライアント側でデータの非カプセル化が行われます。非カプセル化されたレスポンスはブラウザで解析され、データがレンダリングされた後、アリスのPCの画面にWebページが表示されます。
まとめ
ここまで「自分のPCからインターネットのWebサイトに繋がるまでのプロセス」と、それにかかわるWebの技術について学んできました。
Webサイトが表示されるまでのデータの旅路には、実に多くのプロセスが関与し、さまざまなネットワーク技術が使われていることが分かりました。普段、私たちが便利に利用しているWebの裏側を知ることで、多くの知識を学ぶことができます。ここで、簡単に振り返ってみましょう。
-
クライアントサーバーモデル
クライアントがWebページを閲覧するために、サイトのドメイン名をブラウザのURL欄に入力してエンターを押すと、HTTPリクエストが生成されます。リクエストはWebサーバーに送信され、サーバーがそのリクエストに応じてサイトのデータをレスポンスとしてクライアントに返信します。このデータのやり取りのプロセスを「クライアントサーバーモデル」と呼びます。
-
データのカプセル化
カプセル化はTCP/IP通信において、データの正常な送受信を保証するために必要なプロセスです。インターネット上でデータをやり取りする際の通信手段を共通化し、異なるネットワークやデバイス間の通信を可能にします。TCP/IPモデルやOSI参照モデルの各階層で、リクエストデータに通信に必要な情報をヘッダーとして追加し、カプセル化します。
-
DNSサーバーの名前解決
クライアントがWebサイトを閲覧する際、一般的にはサイトのドメイン名を入力します。通信がWebサーバーに到達するためには、サーバーの住所にあたるIPアドレスが必要ですが、このIPアドレスは数字の羅列であり、人が扱いにくいものです。それを解決するために、DNSサーバーでドメイン名をIPアドレスに変換する「名前解決」が行われます。これにより、クライアントは通信先をドメイン名で指定することが可能となります。
参考資料
以下のリンクは、この記事で説明した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご参照ください。
-
アイティーエム株式会社 - ITコラム
https://www.itmanage.co.jp/column/tcp-ip-protocol/
https://www.itmanage.co.jp/column/http-www-request-response-statuscode/
-
ネットワークエンジニアとして
-
マスタリングTCP/IP 入門編(第6版)
著者:井上 直也 著、村山 公保 著、竹下 隆史 著、荒井 透 著、苅田 幸雄 著
定価:2,420円/400頁/ISBN:978-4-274-22447-8
発売日:2019年12月01日/発行元:オーム社
-
イラスト図解式 この一冊で全部わかるネットワークの基本
著者:福永 勇二
定価:1,848円/192頁/ISBN:978-4-7973-8667-7
発売日:2016年3月29日/発行元:SBクリエイティブ
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.03.04
【疑問解消】ただのサーバー置き場じゃない データセンターって何?クラウドとどう違うの?
この記事では、データセンターについての詳細や似た概念であるクラウドと比較した内容を解説します。
- ネットワーク
2024.03.07
LANとは何か?WANとの違いや構築の仕方もくわしく解説!
同一の敷地・建物など局地的な範囲に構築されたネットワークのことです。
- ネットワーク
2024.03.04
インフラエンジニアに必要な資格(CCNAについて)
こちらはEnvaderの記事になります。
- ネットワーク
- インフラエンジニア