My Day One

毎日東京の隅っこでコードを書いているエンジニアのブログです。

【ネットワークの基礎】インターネットの仕組み

はじめに

この記事はネットワークの基礎的な知識を勉強した私が、頭の中を整理するために書いたものです。 対象読者は、これからプログラミングを勉強する方や、最近Webエンジニアになった方など、実務においてはネットワークをそこまで意識していない方となります。

今回は、インターネットがどうやって動いているかをざっくりと理解をするために、細かい部分や難しい部分はあまり触れずに、大まかな流れを理解できることを目指します。

この記事で出てくる用語

以下は、この記事に出てくる用語です。どれか1つでも知らない場合は、この記事は読む意味があるかもしれません。

インターネットとは?

空気と同じように存在するのが当たり前になったインターネットですが、これはそもそもなんなのでしょうか?

一言で言えば、パソコンやスマホから流れるデータを、目的地まで運んでくれる便利な仕組みです。 これのおかげで我々はWebサイトを閲覧してイベントに申し込んだり、ECサイトでものを買ったり、SNSで有名人の投稿にコメントをできるようになっているのです。

申込ボタンを押したら申込が完了しますし、ECサイトで購入したら物が届きますし、(運が良ければ)有名人からコメントが返ってきたりするわけで、とても便利ですよね。

インターネットの中を流れるもの

色々なことができるインターネットですが、インターネットの中は、どんなものが流れているのでしょうか? 例えばWebサイトを閲覧しようとしたときには、「こんにちは!」といった文字列や、犬の画像が流れてやってくるのでしょうか? 実はそんなことはなく、流れてくるものは単なるビットと呼ばれるものです。

そもそも、コンピューターは文字列や画像をそのまま扱えるわけではなく、ビット、という0か1かで判別できる単位でしか物事を扱えません。 「A」という文字列は 100 0001 という、はたから見たら全くもって意味不明なデータでしかやりとりができないのです。

だからその形でやりとりをするしかないわけで、ビットを使って文字列や画像を表現していくことになります。

とはいえ、ビットを1つずつしか送れないとそれはそれで大変なので、データがインターネット上を流れる際には、ビットの集合体である「パケット」と呼ばれる状態にして文字列や画像などのデータをやりとりします。

厳密にいうと文字列や画像のデータも1つのパケットに全て詰め込まれているわけではなく、分割されてパケット同士を後でくっつけたりするわけですが、その辺りの話はまたの機会に。

インターネットは「パケット」をやりとりするための仕組みなわけで、このパケットに注目して考えると、インターネットやネットワークのことが理解しやすくなると思います。

パケットはどこに送られる?

さて、先ほど出てきたパケットですが、これはそもそも、どこに送られるのでしょうか?

ここで、Webサイトを閲覧する場合を考えてみましょう。

Webサイトを閲覧する際には大きく括ると、以下の2つのことをしています。

① Webサイトの内容をください!と要求する

② Webサイトの内容を送り返す

このやりとりにパケットというビットの集合体を使い、データをやりとりしているわけです。

しかし、ここで1つ疑問が浮かびます。ください!と要求する(あるいは内容を送り返す)のはどこに対してするのでしょうか? 全世界に向かってするのでしょうか?それは非効率極まりないですし、仮に正しいところが見つけられてもすぐに返答が来ることはまずないでしょう。データを特定のところに送りたいわけですが、これでは目的地がわからない状態です。

つまりデータは、ちゃんと目的地を知らないと、どこにいったら良いかわからないのです。なんだか人間みたいですね。

なので、まずはデータの最終的な目的地をまずは決めなくてはいけません。 データの最終的な目的地はIPアドレスと呼ばれるものです。

IPアドレスというのはインターネット上の住所で、192.168.0.1 のような表記をします。細かい話はあるのですが、今は「そういう風に表記するんだな」くらいの理解で十分です。

例えば、先ほどの「Webサイトの内容をください!」と要求するにもパケットを送って要求するのですが、そのパケットはインターネットに出ていく前に、最終目的地(=IPアドレス)を知ることになります。それがあって初めて、パケット自身がどこにいくかがわかるようになるのです。

では、そのIPアドレスはどのように見つけてくるのでしょうか?

それを見つけてくる仕組みがDNS(Domain Name System)です。

DNSとは?

DNS(Domain Name System)とは何でしょうか?

これは一言でいうと、IPアドレスドメイン名を紐付けるための仕組みです。

イメージとしては以下のような表と同じような感じです。

id 名前
1 AAA
2 BBB
3 CCC

idがIPアドレスに変わり、名前がドメイン名に変わるというふうに考えると、以下のような対応表が存在していると理解できるかと思います。

IPアドレス 名前
192.168.0.1 aaa.com
192.168.0.2 bbb.com
192.168.0.3 ccc.com

ドメイン名というのは、「人間が識別しやすいようにしたインターネット上の住所」 だと考えればよく、それは blog.hatena.ne.jp のようなものです。

つまり、 blog.hatena.ne.jp のような人間が理解できる文字列と 192.168.0.1 のような数字の羅列が対応していることが示されている上記のような表があるのです。

これによって、IPアドレスを知ることができ、我々はインターネットでデータをやりとりすることができるようになっています。

さて、ここでもう一度、Webサイトを閲覧する例を考えてみましょう。

私たちはWebサイトを閲覧する際に、必ずURLを打ち込んでいますが、それはhttps://blog.hatena.ne.jp のようなものですよね。これの、blog.hatena.ne.jp の部分を見て、パソコンやスマホ(のOS)はIPアドレスを探しにいきます。

図で示すとこんな感じです。

DNS

DNSゾルバという難しそうなワードが出てきましたが、これはざっくりいうと、DNSを使ってIPアドレスを知るためのソフトウェアなので、それによってIPアドレスをゲットできるもの、くらいの理解でいいと思います。

さて、IPアドレスを無事に入手できたら、次にやることは「どのように最終目的地までいくか」を決めることです。

実はIPアドレスを知っていても、パケットはそこまで勝手に動いてくれるわけではありません。

人間は、もしかしたら最終目的地を伝えたら、勝手に電車や車でいくかもしれないですが、パケットはそうではありません。どこを経由するのか、次の目的地はどこか、などを都度決めてあげないと動くことができないのです。

では、パケットはどのように動いていくのでしょうか?

パケットの旅の様子

いままでの話の中で、

  • パケットは最終的な目的地(=IPアドレス)をDNSのおかげで知ることができる

ということまでは理解できたかと思います。

しかし、ここまでの話だけでは、パケットは実は全く動くことができません。

最終目的地は分かったけれど、まずはじめどこに行ったらいいか、パケットは知らないのです。

なので、最初の行き先を教えてあげます。

基本的には、パケットの最初の行き先はPCと繋がっているブロードバンドルーター(多くの人の家の中にある、縦長の箱みたいなやつ)になるので、そのブロードバンドルーターの住所を教えてあげる必要があります。

ちなみに、ブロードバンドルーターの住所というのは、IPアドレスではなく、MACアドレスというものになるので、IPアドレスと混同しないように注意が必要です。

IPアドレスMACアドレスの違いは、ざっくり以下の通りです。

いまの話の中では、パケットが「次にどこに行くか」を教えてあげる必要があるので、IPアドレスではなく、ブロードバンドルーターのMACアドレスを知る必要があります。

そのためにはARPというプロトコルを使ってMACアドレスを知ることになるのですが、細かい話を書くとわかりにくくなってしまうので、「パケットが次の目的地を知るためにARPというプロトコルを使うんだな」くらいの理解でOKです。

ARPのおかげでブロードバンドルーターのMACアドレスを知ったら、パケットはブロードバンドルーターまで移動ができるようになります。

そして次に、インターネットプロバイダー@niftyとかso-netとか)が持っているルーターに向けて、移動をします。 このタイミングでは、インターネットプロバイダーが持っているユーザーデータベースとの照合を行って、問題なければインターネットプロバイダールーターに対してパケットが到達します。

ここまできて、ようやくインターネット(世界中のネットワークにつながったシステム)にデータを流すことができるようになりました。

インターネットそのものは、ASと呼ばれる自律システムの集合で成り立っていて、そこの中では、IPアドレスを元に、どのルートを通って最終目的地(=IPアドレス)に辿り着くかを決定した上でパケットを運びます。(これをルーティングといいます)

パケットが目的地に届いたら

この仕組みのおかげで、パケットは最終目的地であるIPアドレスに到達することができます。

今回の話の前提としては、Webサイトのデータを閲覧するための要求を送って、 Webサイトのデータを送り返す、というものなので、その最終目的地のIPアドレスまで到達した後は、最終目的地のIPアドレスが割り振られているWebサーバーに要求が届きます。

それに応じて、今度はWebサイト側が必要なファイルを送信元(要求をしてきた送信元)に対して送り返します。

送り返す際の仕組みはパケットを送った際と同じなので割愛しますが、そのデータを受け取った送信元は、Webブラウザを使って、HTMLとかCSSとかを解析してWebサイトを閲覧することになります。

終わりに

いかがだったでしょうか? 今回は、極力難しい話を省いて、インターネット上をどうやってデータが流れて、どのようにやりとりされているのかを知ることができたと思います。もう少し細かい話はまた今後書くとして、少しでもインターネットの仕組みについて理解を深めていただけたのであれば幸いです!

ネットワークの分野はとっつきづらい部分もありますが、理解できると面白いので、これからも少しずつアウトプットを進めていければと思っています。