見出し画像

読書日記「3分間ネットワーク基礎講座」の感想と紹介

はじめに

個人でWebアプリ制作に取り組んでいて、どうも「ネットワークやサーバーの仕組み」「PCが動く仕組み」みたいな基礎的な部分が弱いなー、と思っていました。

コードの書き方などは比較的学びやすいのですが、開発環境を構築したり、作ったものをWeb上に公開(デプロイ)する、という部分に苦労してしまいます。
比較的手軽にアプリを公開できるHerokuやAWSなどのクラウドサービスが色々ありますが、その原理がわからないと上手くいかない時にエラーを解決できない…と、僕はその辺りで壁にぶち当たってしまいました。

Webに限らずプログラミング学習中の皆さんも、この辺りは大きなハードルなんじゃないでしょうか?

「IPアドレス」「ポート番号」とか必要に迫られて調べてみるも、出てくる解説は分かるような分からないような…
他にも「Webサーバー」「データベースサーバー」の正体だったりとか、「プロトコル」「HTTPメソッド」「リクエスト/レスポンス」とかとか…

聞いたことあるけど実態の掴めない用語ばかりで「うがー」ってなってきたので、一度ネットワークについて全体像を学んでおきたい、と思って手に取ったのがこの「3分間ネットワーク基礎講座」という書籍でした。


ざっくり概要と感想

この「3分間ネットワーク基礎講座」ですが、
とある大学の研究室という想定で、博士と生徒が会話形式でネットワークの理解を深めていく、という構成になっています。
コンピュータがどういう仕組みでデータ通信を行っているのかとか、世界中に広がってるインターネットがどういう風にできているのかなど、歴史的な背景も踏まえて大枠を捉えてから具体的な解説に入っていきます。

1冊読み終えた頃にはネットワーク通信のイメージ掴むことができる、そんなわかりやすい内容かと思います。

図解も多く、これまで日常的になんとなく耳にしていた「ルーター」「LAN」「プロパイダ」などの身近なところから、プログラミングに取り組んでいると必ず出てくる「プロトコル」「IP」みたいな用語が、どういう意味なのかがイメージできるようになります。
タイトルに「3分間」とある通り各チャプターは簡潔で短く、チャプター毎にポイントが整理されて書かれているのが嬉しいですね。繰り返し復習しながら読み進めることができて、構成として凄くいいなって思います。

文体は会話形式なので、もしかするとそれが合わない方もいるかもしれません。
また、結構細かい用語もさらっと出てきたりするので、そこで突っかってしまうと厳しいかな、と思います。あまり馴染みのない用語は無視しつつ、まずは1回通しで読んでみて全体のイメージを掴み、またわからない用語が出てきた時に必要に応じてチャプターを読み返す…という読み方が良いのかな、って思いました。

内容的には、コチラで無料で読めるのかな?
書籍版は文章やイラストが充実している感じがします。

こんな人にオススメしたい

・開発環境や本番環境をあまりよく理解していないまま作業している
・サーバーの仕組みやHTTP通信など苦手意識があり、その学習のためのとっかかりが欲しい
・どうやってWebが表示されているのか、メールを送ることができるのか説明できない
・「Webを支える技術」を読もうとして挫折した

いろいろと所感

以下、主観たっぷりですが腑に落ちたことを。僕自身の理解が浅く、間違っていたらすみません。

(1)身近なPC同士の通信

「ネットワーク」とか「インターネット」って言葉はなんとなく普段から使っていますが、良く良く考えると抽象的で掴み所がありません。

ここで「インターネットの仕組み」「Webサイトが表示される仕組み」みたいなところから学習しようとすると、
「HTTPとはプロトコルのことで…」
「WebクライアントとWebサーバーがうんぬんかんぬん」
みたいな話からスタートしてしまうので、入門者はそこで辛くなってしまうのですね。そもそも何故そういうものが必要なのか、が分からない。

この本では、もっと具体的で身近な部分(低レイヤー、とか表現するようです)から段階を追って考えていくのがわかりやすかったです。
最初は「同じ部屋にあるケーブルで繋がった2台のPCが、どうやってデータをやり取りするのか?」を考えるのです。

そもそもネットワークとは「データ通信」のための技術であり、その正体は「PC同士でのデータのやり取り」です。
「データ」と言うと「相手に伝えたい文字列」というのが一番人間がイメージしやすいと思うのですが、もっと噛み砕いていくとその正体は「コンピュータが理解できる電気的な信号」なんですね。
コンピュータ同士がケーブルを介して電気を送り合うことで、データのやり取りを実現しています。

…と、このような狭い範囲でのPC同士のやりとりがネットワークの原点なので、まずはこのあたりの仕組みを学んでいくと、とても腑に落ちます。
それから徐々に範囲を広げて、複数台のコンピュータが「ハブ」で繋がれたデータ通信の仕組みを考え、次に会社や学校などの範囲内での「ルーター」を使ったデータ通信の仕組み(LAN)を考え、そしてその外のネット回線を通じて行うデータ通信(WAN、いわゆる今使っているインターネットなど)を考える…と辿っていくことで、全体像が掴めてきます。


(2)離れたコンピュータ同士が上手くデータをやりとりするために段階とルールが定められている

近い・遠いといった距離に関係なくコンピュータ同士がデータ通信をスムーズに行うために「プロトコル」という通信のルールが定められているのですが、そのルールは用途によって様々です。決して1つのルールでデータ通信の全てをカバーできるわけではありません。

データ通信には段階・手順があります。
書籍に書かれている例なのですが、手紙をポストに投函して送るときに、例えば「手紙を便箋に書く」段階と「郵便局員が仕分けをする」段階と「配達員が配達する」段階とでは、それぞれ全く違う人が全く違うルールに基づいて作業を行なっています。
これらを一緒くたにルール決めするのではなく、段階に分けてルールを決めてあげる必要がありますね。
コンピュータ同士のデータ通信に関しても同じで、データ通信の過程を細かく分解して段階に分けて、それぞれの段階で必要なルールを定めることで、スムーズで安全なネットワークでのデータ通信を可能にしているのです。

この辺りを理解するためのキーとなる考え方が「OSI参照モデル」であり、
現在インターネットで使用されている「TCP/IPプロトコル群」です。
このあたりを理解することで、Webの仕組みを体感的に捉えることができます。

なんぞそれは。と言う感じですが…
インターネットなどの通信を各段階に分けて、それぞれの段階で必要なルールを整理したもの…とでも言えば良いのでしょうか(抽象的ですみません。詳細は調べてみて欲しいと思います)。

最初は用語を覚えたり細かい意味を追うよりも、ネットワークの構造を捉えてみるのが良いかと思います。


インターネットで使われているTCP/IPプロトコル群

(4)アプリケーション層:HTTP(Webページ閲覧)・FTP(ファイル転送)・SMTP(電子メールの送受信)・DNSなど
(3)トランスポート層:TCP、UDP
(2)インターネット層:IP、ARP
(1)インターフェース層:イーサネットなど


このようにインターネットなどのデータ通信は、

・層(=段階)に分かれている
・通信のルール(=プロトコル)は段階と用途により色々ある

という構造になっている、と初めに抑えておきましょう。そのイメージを作ってから、具体的に「IP」「TCP」「HTTP」などのプロトコルの働きを調べてみると、頭に入りやすいかなと思います。

書籍では、まず第1章でこのあたりをわかりやすく解説してくれていて、それから第2章以降で細かく層とプロトコルを見ていく、という構成になっているので、理解が深まりやすいです。


(3)「IPアドレス」と「ポート番号」の意味

Web制作を学んでいると、見よう見まねで開発環境を作る時

「localhost:3000」
「127.0.0.1:3000」
「0.0.0.0:8000」

のような意味不明な英数字の羅列をブラウザのURLバーに入れてアクセスしろ、と言われますよね。「Hello World!」と自分が作った画面が初めて表示されて感動するアレです。

はじめは僕も訳も分からず打ち込んでいたのですが、この英数字にはちゃんとした意味があります。
:よりも「左側がIPアドレス」で:よりも「右側がポート番号」というものを表しています。

「IPアドレス」はコンピュータの場所を特定するためのもの。ネットワーク上の仮想的な住所です。
どこか遠くの人のコンピュータとインターネットを介してメールのやり取りをするときに、この「IPアドレス」を使ってネットワーク上にある相手のコンピュータの居場所を特定する役割です。
このIPアドレスがないと、例えば友人にメールを送ろうとしてもどのコンピュータにメールを送っていいかが指定できず、せっかく一生懸命書いた文章が相手に届くことはありません。WebブラウザにHTMlファイルを表示する際も、そのデータのあるコンピュータを探すことができず、画面に表示することができないのです。

ちなみに上の3つ(localhost:3000とか0.0.0.0:8000とか)は全て「自分のコンピュータのIPアドレス」を意味しています。
「ループバックアドレス」と言うようですね。localhostと言うのも、その通称といったところです。

次に「ポート番号」はWebブラウザなどの「アプリケーション」を特定するための番号です。
メールを相手に送るためには、基本的にはメールアプリから送りますよね。他にもコンピュータにはブラウザソフトなど通信のためのアプリ、ソフトが色々あります。

ちょっと一度整理すると、メールの送受信を例にデータ通信の流れで起こっていることとしては

自分がメールを送る→「自分のメールアプリ」→「自分のコンピュータ」→→(ルーターを介して電話回線に乗って送られる)→→「相手のコンピュータ」→「相手のメールアプリ」→相手がメールを見ることができる!

と言うように、メールを送るという処理を細かく噛み砕くと、コンピュータを介したアプリ同士のやり取りなんですね。これは例えばWebアプリでも一緒で、Webブラウザがアプリにあたります。

先ほどのIPアドレスがあれば、自分と相手のコンピュータ同士の住所は解るので届けることはできるのですが、どのアプリケーションでメールを開けば良いかが分からず、コンピューターが受け取ったデータを処理できないようです。
それがメールだとわかるのは人間が見て理解できるからであって、あくまでコンピュータにとっては単なる「送られてきたデータ」なんですね。

ポート番号は、送信されるデータに「これはメールなので、メールソフトで開いてねー」と言う情報をくっつけてコンピュータに送るもの、と考えると良いのかもしれません。


おわりに

以上、これまでネットワークについて理解できなかった僕が、書籍を読んで腑に落ちたことを書いてみました。

この書籍は初版が2010なのでもう10年ほど前の情報ですが、基礎的な部分は変わらないと思います。
ネットワークに苦手意識のある方にはぜひお勧めしたい書籍です。環境構築に対する恐怖心なんかはだいぶ薄れると思います。

この書籍の内容は、もともとWebで連載されていた内容のためこちらでも読むことができそうです。

この「3分間ネットワーク基礎講座」で全体像を掴んだ後は、さらに細分化された内容を続編の「3分間ルーティング基礎講座」「3分間DNS基礎講座」「3分間HTTP&メールプロトコル基礎講座」で、それぞれ深掘りしていくと良い感じでしょうかね。

これらはどれもネットワークを理解するために必須事項な感じがするので、繰り返し読んでしっかり理解していきたいなって思います。


この記事が気に入ったらサポートをしてみませんか?