ネットワークの基礎概念を０から理解したい

## はじめに
クラウドサービスのようなITインフラを一から学ぼうとすると、序盤に立ちはだかるのが**ネットワークの知識**だと思います。今日では教材が溢れかえっているほどの内容ですが、初学者からすると専門用語が専門用語で説明されていてイマイチよく分かりません。

というわけで、僕のような初学者でも分かる言葉でネットワークの超基礎を知ろう、というのがこの記事です。

### 対象読者
- ネットワークのネの字を知りたいソフトウェアエンジニア
- さらっとインターネットの概念だけ知りたい非技術者

:::note warn
簡潔さ重視で書いたために、厳密でない言い方や誤解を招く表現があるかもしれません。あくまでふわっとした概念理解にお使いください。
:::


## インターネットとは
そもそも「インターネットってなんやねん」って感じなので、まずは語彙の定義からしていきます。

### ネットワーク
スマートフォン・パソコン・3DSといった**コンピュータ**が互いに**データ**をやり取りする、という状況を考えます。この場合の**データ**は、画像でもExcelファイルでも、何でもいいです。このやり取りを<strong>"通信"</strong>と言うことにします。

そしたら、以下の画像のような「複数のコンピュータが通信によって繋がってできる状態」をイメージします。この通信網が、<strong>"ネットワーク"</strong>です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946195/6a33f2db-d538-dd5d-2ab8-08518b0dc763.jpeg" alt="テックブログ用 - 通信網イメージ.jpg" width="600">

※あくまでイメージ

### プロトコル
通信を行うためには、予めその方法を定めた取り決めが必要です。そのような規格を<strong>"通信プロトコル"</strong>（または単に"プロトコル"）と言います。
例を挙げると、
- HTTP
  ブラウザがサーバーと通信するときに使われる通信プロトコル。今この記事が閲覧できるのはこれのおかげ
- SSL
  暗号化されたセキュア通信に使われる通信プロトコル。これとHTTPの合わせ技がHTTPS

:::note info
USBやBluetoothとかも、それぞれの通信プロトコルに基づいて通信している
:::

### インターネット
そして、<strong>"インターネットプロトコル（IP）"</strong>という通信プロトコルを用いた通信によるネットワークが、<strong>"インターネットワーク"</strong>です。

ここで紛らわしいのが、

「全世界とつながったあのインターネット」=インターネットワーク

では**ない**です。社内VPNのような、外部と通信しないプライベートなインターネットワークもあるからですね。
そういうわけで、パブリックで固有名詞の方は**インターネット**、それ以外は**プライベートなネットワーク**と表記します。

以下は、IPで決まっているルールの例です。
- 通信するコンピュータはIPアドレスで識別
- データをパケットに格納して通信
  - （この記事ではこっちの詳細については触れません）

## インターネットワークの基本概念たち
### IPアドレス
IPの通信では、ネットワークのコンピュータごとに一意の値を割り当てて識別します。この値は<strong>"IPアドレス"</strong>と言われ、名前の通りインターネットワーク上の住所になります。

IPv4アドレス：`198.18.2.0`のような`0.0.0.0`~`255.255.255.255`
IPv6アドレス：`fe80:0000:0000:01d2:0394:1fc0:0020:10ee`のような128ビットの16進数

また、インターネット上のIPアドレスを特に**グローバルIPアドレス**、プライベートなネットワーク上のものを**プライベートIPアドレス**と言ったりします。グローバルIPアドレスは世界に1つしかない唯一の値で、重複しないよう管理されています。逆にプライベートIPアドレスは、そのネットワーク上で一意であれば、この世に同じ値が何個あっても問題ありません。

:::note warn
プライベートIPアドレスが、インターネットと接続する方法は[後述](#nat)
:::

### CIDR
IPアドレスは長いので、管理しやすくするためブロックに分けて、範囲指定できるようにしました。住所でいうところの「市区町村」や「番地」みたいな感じ。
IPアドレスでは<strong>"CIDR（サイダー）"</strong>が使われ、分けられたブロックを<strong>"CIDRブロック"</strong>と言います。

IPアドレスを範囲指定して記述できるCIDR記法の紹介もしておきます。範囲で最初のIPアドレスの後にスラッシュ`/`と、ブロックの範囲を表す数字を書くだけです。
| CIDR記法 | 範囲 | IPアドレスの数 |
|:-:|:-:|:-:|
| `10.0.0.0/8` | `10.0.0.0`~`10.255.255.255` | 256×256×256個 |
| `192.0.2.0/28` | `192.0.2.0`~`192.0.2.15` | 16個 |

`/`の後ろの数字が範囲をどう表しているかは長くなるので略！


### サブネット
1つのインターネットワークは、細分化して2つ以上のより小さなインターネットワークに分割できます。このインターネットワークの中のインターネットワークを<strong>"サブネット"</strong>と、人は呼びます。

各サブネットには、それぞれCIDRブロックが割り当てられ、その範囲内のIPアドレスがそのサブネット内で使用できます。（＝同一のサブネットに属するコンピュータのIPアドレスは、前の部分が共通している。）
異なるサブネットでCIDRの範囲を同じにしたり、被らせたりすることはできません。

:::note
サブネットのIPアドレスの範囲は、**サブネットマスク**というビットマスクでも表されるらしい
:::

同一のサブネット内での通信は可能ですが、異なるサブネットにあるコンピュータとの通信は、直接行うことができません。次のセクションで話す通り、中継地点が必要です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946195/f23f5bfb-2bd8-6468-f911-30382587927c.jpeg" alt="テックブログ用 - サブネット.jpg" width="600">

## ネットワークに存在する中継地点
ネットワーク上には通信するコンピュータ以外にも、通信を成立させるためのネットワーク機器が存在します。

### ゲートウェイ
他のネットワークと通信するには、まず自分のネットワークから出る必要があります。そのための出入り口が、<strong>"ゲートウェイ"</strong>です。
ゲートウェイは、それぞれの宛先に対する通信経路が一覧化された<strong>"ルートテーブル"</strong>を持ちます。コンピュータは、同一のネットワークに通信の宛先となるコンピュータがいない場合、通信をゲートウェイに投げ、それを受けたゲートウェイがルートテーブルを参照して通信経路を判断するのです。
つまり、異なるネットワーク間（サブネット間）での通信は、ゲートウェイを介して行われます。

インターネットワーク上にあり、IPアドレスの通信経路を判断するゲートウェイを、特に**ルーター**と呼びます。

:::note warn
ここでのルーターは、皆さんのご家庭にある物理的なデバイスのことだけを指しているのではなく、ソフトウェアとしての、機能を担っているプログラムのことです。
:::

また、別のネットワークと通信する際に、プロトコルが違うこともあります。その場合は、ゲートウェイがプロトコルの変換をします。

<dl>
  <dt>具体例</dt>
  <dd>家の中のネットワークはIPX/SPXというプロトコルを使用した、<strong>LAN</strong>というネットワーク。そのためIPを用いたインターネットとは、ゲートウェイを通ってプロトコルを変換することで接続している。</dd>
</dl>

### NAT
ゲートウェイには、「プライベートIPアドレスをグローバルIPアドレスに変換する」という機能を持たせることができます。この変換は、<strong>"NAT（ネットワークアドレス変換）"</strong>と呼ばれています。

つまり、プライベートIPアドレスが割り当てられたコンピュータは、ゲートウェイのNATを利用することで、インターネットと通信できるのです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946195/c06bd0c2-3d0d-7ffa-8cc2-f4c80fc1e271.jpeg" alt="テックブログ用 - ゲートウェイ.jpg" width="600">

## おわり
ネットワークの定義からそれらの構成図までを取り上げてみました。本当は1対1の通信にも着目して、OSI参照モデルが〜とか思ってましたが、力尽きたので一旦ここまでにします。

基礎中の基礎しか書きませんでしたが、この記事の内容が、インフラ構築や紹介しなかった他の用語への足掛かりになれば幸いです。

### 参考サイト
https://qiita.com/siberiannhasuki_iijima/items/36502ce387795ad284df

https://qiita.com/siberiannhasuki_iijima/items/f601a620afe92f6c4e23

https://zenn.dev/tigrebiz/articles/ip-address-subnet-mask#ip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E3%83%9E%E3%82%B9%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6chatgpt4%E3%81%95%E3%82%93%E3%81%AB%E8%81%9E%E3%81%8D%E3%81%BE%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F