マスタリングTCP/IP入門編の第1章を個人的にまとめてみた

# はじめに
エンジニア1年目の私が基礎からキャッチアップをしていくにあたって、ネットワークという分野には苦手意識がありました。というのも、ネットワークには暗記事項が沢山あるイメージで、暗記することが苦手な私はそれから逃げていたのでした...

しかし、業務でクラウドを触る機会も増え、ネットワークの基礎の学ぶ必要性に迫られた私は、同期の@kotenpan7255 がマスタリングTCP/IP入門編を購入したのをきっかけに輪読会をすることにしました。

いざ、マスタリングTCP/IP入門編を読み始めると、図が多く使われていてわかりやすく、ネットワークプロトコルが必要になった歴史的背景なども詳しく書かれていて、私のネットワークへの苦手意識を少しずつ解いてくれています。

今回はそんなマスタリングTCP/IPの第1章を個人的にまとめたものを共有していきます。

https://www.ohmsha.co.jp/book/9784274224478/

# コンピュータの進化とネットワークの発展
そもそも**昔のコンピュータは単体で使われることが前提**でした。60年代まではコンピュータは非常に大型の機械で、主な用途は大規模計算処理であり、誰もが気軽に扱えるものではありませんでした。

![system360_model20_Japan-768x443.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828633/ea2eaeb1-73d0-5cee-b85c-8231faa9bd26.jpeg)
> IBM Systems Japan blogより引用

70年代に入るとタイムシェアリングシステムの普及やコンピュータの小型化が進み、少しずつ一般企業にもコンピュータが普及しはじめました。この頃になって、**コンピュータの処理したデータを他のコンピュータに共有したいというニーズ**が生まれ、ネットワークという技術の基盤が整備されていきます。

90年代に入るとコンピュータのダウンサイジングが急速に発展し、メインフレームのような大型コンピュータ並みの性能がPC(パーソナルコンピュータ) で実現できるようになります。そうなると、企業でも社員1人に1台のコンピュータを割り当てるという環境が一般的になっていきました。そんな中で、メーカーの異なるコンピュータ同士を接続してシステムを安価に構築するというニーズに答えたのが、**インターネット**という通信技術でした。同時期に電子メールやWWW(World Wide Web)による情報発信のブームが起こり、企業にも一般家庭にもインターネットは爆発的に普及していきました。

現代においては、携帯電話や家電、ゲーム機などでもインターネットに接続できるのは当たり前になりました。ありとあらゆる機器が世界中につながれるインターネットを利用していく中で、個人情報の漏洩や詐欺事件への悪用も多く発生しています。現代ではインターネットに単に接続できるだけでなく、**安全に接続する仕組み**が強く求められており、それに答えるように通信技術のセキュリティ分野が盛んに研究されています。

# なぜプロトコルが必要か
ネットワークの勉強をしていると、IPやHTTP、TCPなどの多くのプロトコルを覚えることになりますが、プロトコルとはいったい何でしょうか。

**プロトコルは異なる機器同士をつなぐ約束事**です。人間の例で言えば、コミュニケーションにおける言語がプロトコルになります。日本語を話すAさんと英語を話すBさんとでは、言語が違うためコミュニケーションをとるのが難しいですが、英語を話すCさんとBさんはスムーズにコミュニケーションをとることができます。これが機器同士ではもっとシビアで、プロトコルが違う機器同士とはそもそも通信が成立しません。

ネットワークの基盤が整っていなかった70年代頃は、通信の約束事であるプロトコルはコンピュータメーカーによって異なっていました。異なるメーカー同士のコンピュータは通信することができず、利用者にとってはとても不便な状況になっていました。

この状況を解決するのに立ち上がったのがISO(国際標準化機構)でした。異なるメーカーの機器同士の接続(マルチベンダ化)を実現するプロトコルの標準化を進めるために設計されたのが、**OSI参照モデル**でした。

## OSI参照モデル
以下にOSI参照モデルの表を示します。
| No. | レイヤー名 | 説明 | 代表的なプロトコル |
|:---:|:---------:|:----:|:----------------:|
| 7 | アプリケーション層 | アプリケーションに関する通信 | HTTP, SMTP |
| 6 | プレゼンテーション層  |  データの表現形式  | ASCII, JPEG |
| 5 | セッション層  | 通信プログラムの管理 | SSL/TLS, SIP |
| 4 | トランスポート層 | ネットワーク間の管理 | TCP, UDP |
| 3 | ネットワーク層 | ネットワークの経路選択 | IP, ICMP |
| 2 | データリンク層  | 直接接続された機器の管理 | Ethernet, PPP|
| 1 | 物理層  | 物理的な接続形式 | 電気信号,コネクタ |

OSI参照モデルは通信のプロトコルを設計する時に指標として、7つのレイヤーに機能が分けられています。機器Aと機器Bが通信をする際に、7つのレイヤーごとにプロトコルを揃えることによって、異なるメーカーの機器でも通信ができるようになります。

なお、あくまでOSI参照モデルはプロトコルをわかりやすく整理するためのモデルであるため、通信プロトコルの全てがOSIの7つのレイヤーに綺麗には当てはまりません。特にインターネットで扱われるプロトコルは、セッション層から上をアプリケーション層とするTCP/IPモデルで標準化されているため、OSIではレイヤーをまたがないと説明できないプロトコルも多いです。

しかしながら、ネットワークの各プロトコルを理解する時に、OSI参照モデルのどこのレイヤーの話をしているのかを意識することで、プロトコルの全体像を掴みやすくなります。最初は覚えるのが大変ですが、ネットワークに対する解像度がぐっと上がるので、覚えてしまうことをおすすめします。

# ネットワーク機器の概要
ここからは代表的なネットワーク機器を紹介していきます。
### ネットワークインターフェース
-  わかりやすい例としては、PCのLANのコネクタ
-  NICやLANカードは有線であるが、無線LANに接続する通信回路などもネットワークインターフェースにあたる
-  OSIの物理層に該当する

### リピーター
- 元々はケーブルを流れてきた電気信号の減衰を復元する機器(物理層)
- 複数の線を収容できるリピーターハブはかつてよく使われていた
- 現在ではスイッチングハブの普及によって、接続された全てに電気信号を送るリピーターハブも使われなくなっている([参考](https://xtech.nikkei.com/it/article/COLUMN/20140131/533782/))

### ブリッジ/レイヤ2スイッチ
- データリンク層で接続しているネットワークの通信を制御する機器
- フレーム(ほぼパケット)という単位で通信を管理しており、FCSを利用してフレームが壊れていないかなどをチェックする機能がついている
- アドレスの学習機能とフィルタリング機能によって無駄なトラフィックが流れないようになっている
- 現在ではネットワーク間の制御をルーターでやることが多く、ブリッジ自体はあまり使われなくなっているが、ハブとブリッジの機能を持ったスイッチ(スイッチングハブ)は今でも使われている([参考](https://xtech.nikkei.com/it/article/COLUMN/20140131/533782/))

### ルーター/レイヤ3スイッチ
- ネットワーク層の処理を行い、ネットワーク同士の接続を行う中継装置
- TCP/IPではIPアドレスを使って、宛先のルートを決定しパケットを送信する
- ルーターは異なるデータリンクに相互接続することが可能で、イーサネットと無線LANといった異なる種類のデータリンクであっても、ルーターを介して接続を行うことができる

### レイヤ4-7スイッチ
- トランスポート層からアプリケーション層の情報に基づいて通信を行う機器
- 代表的なのはロードバランサーでWebサーバーの負荷分散によく利用される
  - ロードバランサーについては[この記事](https://zenn.dev/mi_01_24fu/articles/load-balancer_2024_07_13)がとても詳しいです
- ロードバランサー以外では帯域制御やファイアウォールなどもレイヤ4-7スイッチになる

### ゲートウェイ
- トランスポート層からアプリケーション層の情報に基づいて、データの変換を行う機器
- 異なるプロトコルでもゲートウェイが変換作業をして中継をすることができるようになる
- プロキシサーバーもゲートウェイの一種(アプリケーションゲートウェイ)

# おわりに
今回はマスタリングTCP/IP入門編の第1章で個人的に気になったポイントを自分の言葉でまとめてみました。もし、間違いや意見などがありましたらコメントをしていただけると大変ありがたいです :pray: