インターネット通信の仕組み

インターネット通信に流れについて学習したのでまとめる。
自分自身が初学者のため、同じような初学者でも分かるように書きたいと思う。


# リクエストからブラウザにコンテンツが表示されるまで
例えばこの記事を読んでいただく場合、何がどうなってブラウザ上に表示されているのか？
突き詰めればいくらでも書けてしまいそうなので、自身が学んだ大まかな流れを順に追っていく。

この記事を読む上で最初の動作を考えると、この記事のURLにアクセスする必要がありそうだ。
URLにアクセスすると、それに該当するページがサーバーから引っ張られるというのは勉強する前の自分にも理解できることではある。

では、URLにアクセスするとこの記事がブラウザに表示されるのはなぜだろうか？
URLとWEBサーバーを紐付けてるんでしょと言われてしまえばそれまでだが、ここで流れを紐解いていこうと思う。

まずブラウザからURLにアクセスすると、そのURLに該当するページを探しに行く。
が、そもそもPCは<b>2進数の数値のみ取り扱う</b>ため、英語などを含んでいるURLをPCは認識できない。
では認識できないはずのURLからどうやって該当のサーバーにアクセスしているのか。

答えは、<b>IPアドレス</b>に基づき該当のサーバーを探し当てていたのである。
IPアドレスというの多分誰しも聞いたことはあると思うが、一体何を示しているのかというと、<b>スマホやPCなど、ネットワーク上の機器に割り当てられるインターネット上の住所</b>のことである。
このIPアドレスを頼りにリクエスト⇔レスポンスのやりとりをしていたのだ。

ちなみにIPアドレスは「192.0.2.100」のような数字の羅列になっている。
自分が使用しているデバイスにも必ずIPアドレスが存在するため、一度<a href="https://www.cman.jp/network/support/go_access.cgi">確認</a>してみてはいかがだろうか。

# URLとIPアドレス

前述のとおり、PCはURLを認識することができず、IPアドレスによって通信のやりとりをしていた。
では、<b>①なぜURLが必要で　②どのようにしてURLからIPアドレスを探し当てていたのか</b>

①に関しては、無作為に羅列された数字では何の意味も読み取れないという点が挙げられる。
例えばQiitaの記事一覧ページの1ページ目が「https\://qiita.com/index/1」というURLだとする。
では2ページ目にアクセスしたい場合はどうであろうか？
おそらくURLを知らなくても「https\://qiita.com/index/2」にアクセスすれば良いような予想がつくはずだ。

また、プロトコルはhttpsであるということや、qiita.comというドメインであるということもわかる。
このように、IPアドレスとは違い読み取れる情報がたくさんあるため、URLが使われているのである。

<b>※プロトコル</b>
インターネット通信をする際の通信ルールのこと。
デバイスのメーカーやOSによって通信ルールが異なると、同じメーカー・同じOS間でしかやりとりができなくなってしまうため、共通ルールを決めることで通信を可能にしている。

では続いて②について。
これはIPアドレスをURLに置き換えているということである。
つまり、<b>IPアドレスを直接打ち込んでも同じくアクセスが可能である。</b>
例えばGoogleのトップページのIPアドレスは「172.217.26.35」となるので、一度ブラウザでこのIPアドレスを叩いてみると良いかもしれない。

ここで気になるであろうポイントが、<b>「PCは2進数の数値のみ取り扱う」</b>ということだ。
上述のIPアドレスは10進数となっており、英語を含むURLと同じく認識できないのでは？という疑問が生まれる。

実はこれも同様に、2進数だと読みにくいという点で10進数に置き換えられている。
例に挙げたGoogleのトップページのIPアドレスを2進数に戻してみると「10101100 11011001 00011010 00100011」となる。
つまり正式なIPアドレスは2進数32桁の数値である。
しかしこれではとんでもなく読みにくいため、8ビットごとに分けてドットで区切り、10進数で表示したものが実際に使われているIPアドレスなのである。

ここまででURLとIPアドレスの関係について見てきたが、次の段で10進数に変換されたIPアドレスをどうやってURLに紐付けているのかについて記述する。

# DNS（Domail Name System）
前段の内容を整理すると、以下3ステップとなる。
①URLにアクセスすると、該当のIPアドレスにアクセスする
②IPアドレスは2進数32桁の数値であるが、判別を容易にするため、8ビットごとに分けてドットで区切り10進数で表示している
③無作為に羅列された10進数では何の意味も持たないため、利便性を考慮し任意のURLに紐付けている

では次に、<b>10進数に変換されたIPアドレスをどうやってURLに紐付けているのか</b>について考える。
答えは、表題にある<b>DNSによって名前解決</b>されることで実現していたのである。
ここで見慣れない単語が２つ出てきたが、<b>DNS</b>と<b>名前解決</b>について一つずつ見ていく。

まずDNSについて。新出の単語が出てくるため順を追って記載していく。
その名の通りドメイン名の管理システムのことで、ドメイン名をIPアドレスに変換する役割を持つ。
<b>ネームサーバー</b>と<b>フルリゾルバ</b>という２つから構成されている。

ネームサーバーというのは、<b>ドメイン名とそれに紐づくIPアドレスが登録されているサーバー</b>のことである。
ネームサーバーは<b>階層ごとに配置</b>されており、複数のステップを経てIPアドレスにたどり着く。
どういうことかというと、例えば「www.example.com 」へのアクセスがあった場合、「www.example.com」に紐付いたIPアドレスはこれです。と一発で引っ張れるわけではない。

図を見たほうがイメージが湧くと思うので添付する。
![スクリーンショット 2021-10-17 13.46.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1131391/21b9c683-be45-ee0c-5c12-ae100f979fe7.png)

まずドメイン全体を管理するルートネームサーバーに対し、「www.example.com」に紐付いたIPアドレスを問い合わせる。
すると、「com」を管理しているサーバーを教えてくれる。

次に「com」というドメインを管理するサーバーに対し、「www.example.com」に紐付いたIPアドレスを問い合わせる。
すると「com」を管理するサーバーは、「example.com」を管理しているサーバーを教えてくれる。

そして「example.com」を管理するサーバーに対し、「www.example.com」に紐付いたIPアドレスを問い合わせる。
するとそこで初めてIPアドレスが返される。
これが<b>ネームサーバーは階層ごとに配置されている</b>ということである。

では続いてフルリゾルバについて。
これは、URLにアクセスしたデバイスと各階層のネームサーバーとの仲介役のことである。
デバイスからの最初のアクセスを受け、アクセスのあったドメインを管理するネームサーバーとやりとりをし、該当のIPアドレスをブラウザに返すことで期待した結果が得られるのである。
これらのフルリゾルバとネームサーバーの反復処理のことを<b>名前解決</b>という。

以上で、IPアドレスとは何か、URLにアクセスするとなぜ期待した結果を得られるのかについて学ぶことができた。
エンジニアとして仕事を始めてから、プログラミングだけでなくもっと幅広く学習する必要性を感じた。
自分と同じような初学者の方の役に立てれば嬉しい限りです。