マスタリングTCP/IP 入門編まとめPart1

# はじめに

新卒で未経験からエンジニアとして就職し、現在はフリーランスのシステムエンジニアとして活動している@rynkd08です。(HP：[XtImmune](https://xtimmune.com/))

恥ずかしいものでエンジニア歴3年目にもなるのですが、ネットワークやインターネットの基礎などを全く勉強してきませんでした...


新卒で入った会社ではDockerなど、割と新しめ？の技術を採用していたのですが、そもそも基礎がないのでDockerを使って環境構築を行うときに、

「環境が立ち上がらない！！！！」

ってことが多々ありました。
その度にググって調べるのですがやはりDockerの内部でネットワークがどう構築されているかわからず...結局先輩に聞いてここがダメだから直さないとねって教えてもらって環境構築をしていました。
どこまでネットワークが構築できていてどこがダメだからここを見ないとねっていう問題の切り分けが自分1人ではできなかったのです。

なのでもう3年目だしこれを期に基礎から勉強しよう！と思いたち、

[マスタリングTCP/IP　入門編（第6版） Kindle版](https://www.amazon.co.jp/dp/B0827QNDNT)

を購入しました。

この本は第9章まであるなかなか読み応えのある本であるので、
1章ずつ読み進めていき、
その中で自分的に大事な部分のみをまとめていきたいと思います。

それではまず第1章からです！

# 第1章 ネットワーク基礎知識
この章では、TCP/IPを理解するために必要なコンピュータとネットワークの歴史や標準化、OSI参照モデル、ネットワークを理解するのに欠かせない概念などを学びます。

## 1.1 コンピュータネットワーク登場の背景
コンピュータが登場した当初、コンピュータは単体で使用されるものであったが、コンピュータの進化に伴い、複数のコンピュータを繋いでネットワークを作るようになる。

コンピュータネットワークは規模によってLANやWANなどに分けられる

`LAN(Local Area Network)` => フロア内や1つの建物の中などの比較的狭い地域でのネットワークのこと
`WAN(Wide Area Network)` => 地理的に離れた広範囲に及ぶネットワークのこと

## 1.2 コンピュータとネットワーク発展の7つの段階
1990年代初めにようやく1人1台コンピューターが割り当てられる。
(そう考えるとめちゃくちゃ最近ですよね！(当たり前のように使っていた...))

1人1人のコンピュータを繋ぐ必要が出てきたため、インターネットが生まれ、インターネットを中心として技術が発展していくことになる。

今ではコンピュータだけでなく、携帯電話やテレビ、家電などもインターネットにつながることになり、工場などではインターネットなどを介して取引先と需要や在庫量の情報を共有するという動きも増えてきている。
(webエンジニアとして工場のシステムとかボイラー室の制御システムとかの案件にも関わることができそうで携われる分野が広がりますね！)

そのようにして全世界の人々が繋がることができて便利になる一方で、インターネットによるトラブルも増えているのが現状である。

インターネット普及期には自由に繋ぐことを目指していたが、現在では**「安全につなぐ」**ことが求められる。

## 1.3 プロトコルとは
プロトコルとは、コンピュータとコンピュータがネットワークを利用して通信するために決められた約束ごとのことである。

メーカーやCPUやOS✴︎が異なっていたとしても、そのプロトコルがあることで通信を行うことができる。

✴︎ `OS(Operating System)` => コンピュータのCPUやメモリの管理、周辺機器や実行プログラムの管理を行うプログラムを集めたもの


この時、コンピュータのCPUは同時に1つの命令しか実行できないが、OSが複数のプログラムを瞬時に切り替えながらCPUに処理させている。

## 1.4 プロトコルは誰が決める
コンピュータが登場した頃、各コンピュータメーカーはそれぞれが独自の仕様でネットワーク製品を作り、コンピュータ通信を実現していた。

しかし、利用者にとっては一度コンピュータネットワークを導入するとずっとその同じメーカーの製品を買わないと使い続けることができなかった。

この問題を解決するため、ネットワーク機構(プロトコル)の標準化が行われた。

そうして、私たちは異なるメーカーのパソコンでも繋がることができているのである。

## 1.5 プロトコルの階層化とOSI参照モデル
プロトコルを標準化する前に、通信プロトコルを設計するときの指標として、`OSI参照モデル`が提唱された。

`OSI参照モデル`では通信に必要な機能を7つの階層に分けることで、複雑なネットワークプロトコルを単純化するモデルである。

各階層では下位層から特定のサービスを受け、上位層に特定のサービスを提供する。

上位層と下位層のやりとりの決まりごとを`インターフェース`、

通信相手の同じ階層とのやりとりの決まりごとを`プロトコル`と呼ぶ。

### OSI参照モデル
|  | 層 | 機能 |
|:-:|:-:|:-:|
| 7  | アプリケーション層  | 利用されるアプリケーションの中で通信に関する部分<br>ファイル転送や電子メールなどを実現するプロトコル  |
| 6  | プレゼンテーション層  | データ形式に関する責任を持つ<br>ex) 機器固有のデータ表現形式(データフォーマット)などをネットワーク共通のデータ形式に変換<br>文字化けしているとこのプレゼンテーション層の設定が問題なことが多い  |
| 5  | セッション層  | コネクション(データの流れる論理的な通信路)の確立や切断、転送するデータの切れ目の設定など、データ転送に関する管理  |
| 4  | トランスポート層  | 宛先のアプリケーションにデータを確実に届ける役目  |
| 3  | ネットワーク層  | 宛先までデータを届ける。経路選択の役目  |
| 2  | データリンク層  | 直接接続されて危機感でのデータフレームの識別と転送  |
| 1  | 物理層  | "0"と"1"を電圧の高低や光の点滅に変換する<br>コネクタやケーブルの形状の規定  |

## 1.7 通信方式の種類
ネットワークの通信方法は以前は回線交換方式が利用されていたが、本書のテーマであるTCP/IPではパケット通信方式を採用している。

パケット通信方式では送信したいデータをパケットとして細分化してデータを送受信している。

## 1.10 現在のネットワークの姿
現在、YoutubeなどのSNSでは1日で何十万というアクセスがあるが、これらのサイトではこのような大量のトラフィックを瞬時に処理するためのたくさんのストレージ機器やサーバーを複数箇所の専用施設に設置している。

しかし、ゲームサイトやコンテンツダウンロードサイトなどでは大量のアクセスがある時間帯にムラがあるので、固定的にサーバーにネットワーク資源を割り当てるのは非効率である。

そこで`仮想化`という技術が登場し、サーバーやストレージ、ネットワークを物理的に増減させるのではなく、ソフトウェアを使って論理的に必要なときに必要なだけ提供できるようになった。

その仕組みのことを`クラウド`と呼び今では色々なクラウドサービスが存在する。

色々なクラウドサービス

`Saas(Software as a Service)` => クラウド上のアプリケーションを利用する形態

`Paas(Platform as a Service)` => 自分でアプリケーションを入れて、計算できる環境だけ欲しいときに利用する形態

`Iaas(Infrastructure as a Service)` => 自分でCPUの能力やメモリの量、ストレージの量などを決めたいときに利用する形態


# おわりに
第1章は歴史や基本的なネットワークの知識の説明でした。

それでも知らないところやあやふやなところはたくさんありましたし、自分のこれからの携わっていく範囲なども確認することができました。

次回は

**第2章 TCP/IP 基礎知識**

についてまとめていきます！お楽しみに！