インターネット通信のしくみ ③ リクエストとレスポンス 1/2

インターネット通信のしくみ ③ リクエストとレスポンス 1/2

WAN(World Area Network) を踏まえ、これから2回に分けてリクエストとレスポンスをもう少し詳しくみていきます。
前回はインターネットのネットワークはサブネットで構築されてるっていう話をしてきました。

このサイトは福岡県北九州市小倉北区のセントシティにある PC のディレクトリにあります。
マイクさんはニューヨークから光ファイバーケーブルを経由してこのサーバーにアクセスすることでこのサイトを閲覧します。

アクセスしているページの URL は
https://hekatimebox.main.jp/wordpress/2024/02/network-1/
です。これでこのページにアクセスできます。

ですが、この URL に福岡や北九州市、小倉北区、セントシティの単語はでてきません。
URL の文字列に PC の場所を示す情報は入っておらず、これだけでは送信先の PC がどこにあるかがわかりません。

https://hekatimebox.main.jp/wordpress/2024/02/network-1/

文字列の中に.jp があるので送信先の国が日本だということはわかります。
ですが、例えば下記のように 〇〇〇.com のような URL の場合は国名さえも判別できません。
https://kakaku.com

実はリクエストは URL を元に送られていません。IP アドレスを元に送られています。

名前解決

送信先の PC は IP アドレスで判別し、IP アドレスは URL から割り出せます。
この URL から IP アドレスへ変換は DNS サーバーと呼ばれるところで行います。
DNS サーバーは WAN の中にあり、DNS サーバーへ IP アドレスを問い合わせることを名前解決と呼びます。

いきなりでてきた DNS サーバーですが、詳しい説明は別の記事に回したいと思います。
何で DNS サーバーの場所をマイクさんの PC が知ってるの?とか、何で DNS サーバーはこのサイトを知ってるの?
とかの話をそこでします。長いので。

ここでは一旦、DNS サーバーはドメインと IP アドレスの対応を知っていて、
それを教えてくれるサーバー、ということで進めていきます。

IP アドレス / ドメイン / パス

URL は下図のように3つに分けられます。

そしてDNS サーバーにドメインと IP アドレスの対応が記録されています。
このサイトの IP アドレスは 118.27.125.236

名前解決の全体像としては下記のようになります。

この名前解決を行うことでリクエスト先のドメインから IP アドレスを知ることができます。

ネットワークアドレス(サブネットアドレス)

これまでサブネットを画像で説明する際に注意書きを添えていました。赤枠の部分です。

実際のサブネットは地図上の住所ではなくネットワークアドレスで区分けされています。
このサーバーの IP アドレスは118.27.125.236
ネットワークアドレスが118.27.125です。
これはこのサーバーが118.27.236のサブネットに所属していることを指します。

ネットワークアドレスが実際の住所のどこの範囲を指すかは正確には特定できません。
地図上の地名とネットワークアドレスは何の関係もありません。
例えば国を跨いで同じネットワークアドレスの場合もあります。

ただ、118.27.125.236という IP アドレスの PC が
福岡県北九州市小倉北区京町 3-1-1 セントシティで管理されていることは公開されています。
これはロリポップが IP アドレスを DNS サーバーに登録する際に必要な情報です。
118.27.125.236はそのまま地図上の PC の住所に対応しているわけではありません。
あくまで管理上の住所がセントシティという情報が登録されているだけです。

リクエストとレスポンスの全体像

名前解決を行わないと送信先の IP アドレスはわかりません。
そのため、リクエストは名前解決を行った後に行われます。
リクエストとレスポンスの流れは下記のようになります。

また、 IP アドレスは TCP/IP に振られています。
そのためソフトウェアの変更などの影響を受けません。
TCP/IP が持てる IP アドレスは基本的にひとつです。

また、簡略化していますが DNS サーバーもホストと同じ仕組みの PC で、
同じようにサーバーソフトウェアや TCP/IP が入っています。
名前解決もひとつのリクエストとレスポンスです。
DNS サーバー側でも TCP/IP がデータの送受信を行います。

URL を廃止して IP アドレスに統一すればいいやんって思うかもしれませんが、
そうするとホスティングっていう仕組みが使えなくなります。(後述します。)

リクエストの送信

URI とメソッド

リクエストの文面は URI とメソッドに分かれます。
なにをどうして欲しいかをサーバーに伝えるのがリクエストで、
「なに」の部分が URI、
「どうして欲しいか」の部分がメソッドです。

メソッドには何種類かあり、今回のようにファイルの中身を問い合わせることを GET メソッドと呼びます。

一般的によく使われるのは今回の GET と POST です。
POST はクライアントからデータを送ることです。フォームの送信で利用しています。
住所やメールアドレスの登録、クレジットカードの利用時などで POST を行っています。

URI は URL だけでなく IP アドレスも指定できます。
できるんですが、最近は多くの場合で無効化されています。
後述するホスティングを利用している場合がほとんどのためです。
また、IP アドレスでアクセスした場合はリクエストやレスポンスの情報を暗号化できない場合がほとんどです。
このため、現在では IP アドレスで直接アクセスできる WEB サイトは限られます。

ファイル名は省略できる

パス は
/wordpress/2024/02/network-1/
となっていますが、実はこれはファイル名が省略されています。
URL は特定の名前のファイルであれば省略できるようになっています。

このページのファイル名はindex.phpです。

つまり、URL を正確に書くと
https://hekatimebox.main.jp/wordpress/2024/02/network-1/index.php
です。このフルパスを入力してもちゃんと表示されるはずです。

ブラウザでよく見るエラーたち

リクエストを送る際によく出るエラーとその理由をまとめてみました。

404 エラー

これはページが見つからない場合のエラーです。
下記はこのサイトの 404 エラーページ。

ホストの PC には入れてるんだけどディレクトリやファイルが見つからない場合のエラーです。
例えば下記のような URL。
https://hekatimebox.main.jp/wordpress/2024/02/network-1/hoge.php

ちなみに下記のページはロリポップ側で用意してくれている 404 エラーのページ。
https://hekatimebox.main.jp/404.php
私が用意したサイトの 404 ページは下記。
https://hekatimebox.main.jp/wordpress/404.php

ホストのどのディレクトリに入ったかで対応が変わります。

DNS_PROBE_FINISHED_NXDOMAIN エラー

下記は DNS_PROBE_FINISHED_NXDOMAIN エラー。
http://hoge12345.jp/
などでリクエストを送ると発生します。

これは名前解決ができなかった時のエラーです。
DNS サーバーでドメインから IP アドレスへの変換ができなかったことを示しています。

403 エラー

このサイトの IP アドレスの118.27.125.236をブラウザに入力してアクセスすると 403 エラーが表示されます。

これはサーバー側でアクセスを禁止している際に出されるエラーです。
サーバーが許可しない限りそのリクエスト方法ではアクセスできません。

このサイトの場合はサーバーがホスティングと呼ばれる仕組みを採用しているため
IP アドレスでのアクセスを禁止しています。(ホスティングは次回)
他にも様々な理由でアクセスを禁止しているファイルやディレクトリ、方法があります。