【ネットワーク】IPアドレスについて

# はじめに
業務でインフラ周りを担当するようになり、ネットワークの知識が不足していると感じるため、日頃学習している知識を整理したいと思います。
今回は「IPアドレス」についてまとめます。

## アドレスとは
- アドレス（address）とは直訳すると「住所」とか「宛名」という意味になる。
- ネットワークの世界においては通信相手を特定するための識別情報と考えるとわかりやすい。
### 物理アドレスと論理アドレス
通信で用いられるアドレスは大きく分けて二種類存在する。

### 物理アドレス

- ハードウェアごとに割り当てられたアドレス
- NIC（Network Interface Card）に付与される
- 例）MACアドレス
    - イーサネット用のネットワークカードには、物理アドレスとしてMACアドレスが割り当てられる。

### 論理アドレス

- ハードウェアと無関係に割り当てられたアドレス
- 例）IPアドレス
    - TCP/IPネットワークに繋がったコンピュータに割り当てられる

### 論理アドレスのの必要性

ハードウェアが故障した際、取り替えたハードウェアの物理アドレスが変わってしまうため、新しい物理アドレスを他の人にも周知する必要があり現実的ではない。一方、ハードウェアと関係しない論理アドレスを使えば、外部からみた自分のアドレスは変わらずに済む。

### 論理アドレスでどのようにリソースを特定するのか

通信相手に情報を送りつけるときは、論理アドレスと物理アドレスの対応表を用意しておき、論理アドレスから相手の物理アドレスを取得し、その情報を元に情報を送りつけるようにする。

# IPアドレス

IP（Internet Protocol）と呼ばれるプロトコルを使うネットワークにおいて、各コンピュータを識別するために、付与される番号の列

- OSI参照モデルの「物理層」と「データリンク層」では、コネクタの形状や電気信号の形式を定めたり、データを転送するための手順や転送時のエラー時の対応等、**直接的に繋がった機器への情報の伝達**を実現する。
- IPアドレスはOSI参照モデルの「ネットワーク層」において、直接的に繋がっていない、異なるネットワーク間での通信を実現するためにネットワーク上のリソースに付与される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/e971eb8a-87bb-9c42-1824-130b4f3f5f7b.png)

## IPv4とIPv6

IPというプロトコルにはIPv4とIPv6と二つのバージョンが存在する。

- 現在広く普及しているのはIPv4であるが、IPv4上で割り当てられるIPアドレスの上限は約43億個（2の32乗）しかなく将来不足すると予想されている。
- このIPアドレスの枯渇問題を解決するため、約340澗（かん）個（2の128乗）のIPアドレスを割り当てることができるIPv6への対応が進められている。
- 既に多くのOSやネットワーク機器がIPv6に対応している。
- IPアドレスの枯渇問題に対する解決策を整理すると以下の通り
    - 短期的解決策
        - プライベートIPアドレスとNAT技術の利用
        - CIDR
    - 長期的解決策
        - IPv6
     
## 誰が管理してるのか

* IPアドレスはICANN（The Internet Corporation for Assigned Names and Number）という組織によって管理されている。
* 世界中のIPアドレスを一つの組織で管理するのは大変なので、地域ごとに管理者を設置し管轄範囲を分散している。
* ICANNの下に5つの「地域インターネットレジストリ（RIR）」があり、さらにその下に国別インターネットレジストリ（NIR）があり、さらにその下にローカルインターネットレジストリ（LIR）がある構成になっている。
* 日本のIPアドレスはJPNICがAPNICよりIPアドレスの割り振りを受けそれをLIRにあたる企業やISP（プロバイダ）に貸し出すことでIPの割り振りを行なっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/d1a0fa66-76cc-1c6e-c07f-0e5c70480718.png)

※ 以下はIPv4の説明になります。

## IPアドレスの構成
IPアドレスは32bitの2進数で構成されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/d353e864-ef99-05c4-7a0c-7d6a2aa40d8f.png)
32個の0, 1を書くのは大変なので、10進数での表記が使われる

⇒ 32bitのビット列を8bitごとの4つに区切り、それぞれを10進数の0 ~ 255で表現し、各値をピリオドで繋ぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/133b3b6d-9487-3358-4c54-baea208ff6dd.png)

## ネットワーク部とホスト部

IPアドレスには以下二つの情報が含まれている

- ネットワーク部
    - ネットワークを特定するための情報
- ホスト部
    - ネットワークの中でそのコンピュータを特定するための情報

この二つの情報によって、**あるネットワークの中にあるコンピュータ**を特定することができる

## 予約済みのIPアドレス

IPアドレスにはコンピュータなどのホストに割り当てられない、特別な用途で使用するアドレスがある。

- ネットワークアドレス
    - IPアドレスが属するネットワークのアドレス
    - IPアドレスのホスト部をすべて0にしたもの
    - ルーティングテーブルで宛先ネットワークを指定するときなどに使用する
- ブロードキャストアドレス
    - ホスト部をすべて1にしたアドレス
    - ブロードキャスト（= あるネットワークに所属するすべての機器に向けて一斉に送信する通信方法）を行うときの宛先として使用する
- ループバックアドレス
    - `127.0.0.1`のアドレスのこと
    - 自分自身を表す仮想的なIPアドレス

# 区切り方

### クラスフルアドレッシング

先頭のビットのパターンにより以下のようにクラスを分類する。

|クラス |第1オクテット |アドレス範囲 |ネットワークアドレス長 |ネットワークの数 |1つのネットワークがもつIPアドレスの数（*） |
| --- | --- | --- | --- | --- | --- |
| クラスA | 0XXXXXXX | 0.0.0.0～127.255.255.255 | 8ビット | 128 | 16,777,216 |
| クラスB | 10XXXXXX | 128.0.0.0～191.255.255.255 | 16ビット | 16384 | 65,536 |
| クラスC | 110XXXXX | 192.0.0.0～223.255.255.255 | 24ビット | 2097152 | 256 |
| クラスD | 1110XXXX | 224.0.0.0～239.255.255.255 |  |  |  |
| クラスE | 1111XXXX | 240.0.0.0～255.255.255.255 |  |  |  |

※ 前述したネットワークアドレスとブロードキャストアドレスがあるため、接続可能なホストの数は記載した数から2を引いた数になる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/332c0729-4b2e-bc97-128c-bb7e4e897408.png)

### クラスフルアドレッシングの課題

- 以下のような課題があるため現在では主流ではない
    - 一つのネットワークでたくさんのコンピュータを識別できるクラスではその反面、根ｔっとワークを多く作ることができない
    - ネットワークの大きさの区分が3つしかないため、その区分にぴったり当てはまらないともだが多くなる
    - 例）500個のIPアドレスが必要なネットワークがある場合、クラスCでは上の表で分かるとおり、256個のアドレスしか持つことができないため、必然的にクラスBを採用するしかない。すると65536 - 500 = 65036個のIPアドレスが無駄になってしまう
    - つまり、クラスによる割り振りのせいで、使われていないIPアドレスはあるが、割り当てるIPアドレスがないというもったいない状態になる
        - IPアドレスが不足する

### クラスレスアドレッシング

- クラスフルアドレッシングでの課題を解決するために考えられたIPアドレスの割り振り方法
- サブネットマスク
    - IPアドレスでのネットワーク部とホスト部の区切りがどこにあるかを表す情報
    - 32bitの値で、ネットワーク部にあたる部分のビットを1, ホスト部を0にしたもの.
    - IPアドレスの表記と同様に8bitずつ区切り0 ~ 255の10進数を４つ並べた形式で表現されることが多い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/494d13d3-b869-370a-c25e-be7c94e07d36.png)

* クラスフルアドレッシングでは基本的にIPアドレスを見れば使うべきサブネットマスクがわかるクラスレスアドレッシングではIPアドレスに加えて、サブネットマスクがないとネットワーク部が判断できない。

## CIDR

**Classless InterDomain Routing**

- クラスレスアドレッシングを実現するための仕組み
- サブネットマスクを用いて、ネットワーク部とビット長を指定する

> CIDRによって、ネットワークの規模に応じた適切なIPアドレスを割り当てることができる
> 

## CIDR表記

サブネットマスクを簡潔に表記する方法

- CIDR表記
    - `192.7.29.84/24`
        - `/24`の部分でサブネットマスクを表現する
        - ここでいう24とう数値は以下のように説明できる。
            - サブネットマスクの中にある1の数
            - ネットワーク部の長さ
- CIDR表記を使わない
    - `IPアドレス: 192.7.29.84`
    - `サブネットマスク: 255.255.255.0`

- `/24`の部分はプレフィックスと呼ばれる。


# グローバルIPアドレスとプライベートIPアドレス

## グローバルIPアドレス

- インターネットに接続できるIPアドレス
    - インターネットに参加するために必要なIPアドレス
- グローバルIPアドレスの範囲

| クラス | アドレス範囲 |
| --- | --- |
| クラスA |   1.  0. 0. 0 ~   9.255.255.255<br>11.  0. 0. 0 ~ 126.255.255.255 |
| クラスB | 128.  0. 0. 0 ~ 172. 15.255.255<br>172. 32. 0. 0 ~ 191.255.255.255 |
| クラスC | 192.  0. 0. 0 ~ 192.167.255.255<br>192.169. 0. 0 ~ 223.255.255.255 |

## プライベートIPアドレス

- 会社組織内や家庭内などインターネットからは独立した内部ネットワークで利用される.
- グローバルIPアドレスと異なり、内部のネットワーク内でIPアドレスが重複しなければ他のネットワークないで重複していても問題ない。
- プライベートIPアドレスの範囲

| クラス | アドレス範囲 | CIDR表記 |
| --- | --- | --- |
| クラスA | 10. 0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 |
| クラスB | 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 |
| クラスC | 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 |

- 基本的に全ての機器にグローバルIPアドレスを付与すれば通信においては何ら問題はないのですが、IPアドレスが枯渇しているという背景のもの
- そこで全ての機器がインターネットに参加する必要はないという考えのもと、LAN内の機器には一定の範囲のIPアドレスをプライベートIPアドレスとして割り当てることになり、LANとインターネット（WAN）を接続する機器のみグローバルIPアドレスを割り当てる形が確立された。
- 基本的に普段家で使うパソコンにはこのプライベートIPアドレスが割り振られており、インターネットに接続する際はNATを利用してグロバールIPアドレスに変換されています。
    - ただ、このような手続きが必要となるのはIPv4のアドレスが43億個しかなくすべての機器にグローバルIPアドレスを割り当てるにはすぐに足りなくなるという理由があるから。
    - IPv6では枯渇の心配はないといわれている。
 

## 動的IPアドレスと静的IPアドレス

ISPが利用者に割り当てるIPアドレスには大きく分けて動的IPアドレスと静的IPアドレスの二種類がある

### 動的IPアドレス

- 一定条件のもとで変動するタイプのIPアドレス
- 主に家庭内でプロバイダに接続する際に利用される
- ISPが持っているIPアドレスのうち、空いているIPアドレスが順次割り当てられていくため、接続する度にIPアドレスが変わる（変わらない可能性もある）
- 家庭用に提供されているインターネット接続サービスを利用する場合、特別なオプションサービス等を利用しない限り、一般的には動的なIPアドレスが割り当てられる
- ただ、いつ調べても、グローバルIPアドレスが変わらないのは、プロバイダ側でできるだけ同じIPアドレスが貸し出されれるようにしてあげるという工夫をしてくれているから
    - 実際にはIPアドレスが取り替えられているが、今回も前回接続した時と同じIPアドレスが貸し出されているため、変更されていないように感じるだけ。

### 静的IPアドレス

- 切断、再接続を行っても、常に同じで変更しないIPアドレス
- 一般的に動的IPアドレスに比べて、利用料が高い
- Webサイトの公開サーバやメールサーバなど、IPアドレスが変動すると困るものに利用される

# IPアドレスを調べてみる

### 環境

macOS Catalina（10.15.5）

### ローカルIPアドレス

- `ifconfig`で確認
    - LinuxやmacOSなどUNIX系OSでネットワーク環境の状態を確認できるコマンド

```bash
$ ipconfig
..
en0: 
	..
	inet 192.168.XXX.XXX netmask 0xffffff00 broadcast 192.168.XX.XXX
	..
```

### グローバルIPアドレス

- [こちら](https://www.cman.jp/network/support/go_access.cgi)のサイトで確認できる
- グローバルIPアドレスを返却してくれるサイトに `curl` で問い合わせても確認できる

```bash
$ curl ipecho.net/plain
XXX.XXX.XXX.XXX
```

# 参考
* 書籍:「ネットワークがよくわかる教科書」
* 書籍:「3分間ネットワーク基礎講座」
* 記事: [IPアドレスとは？クラス範囲やサブネットマスク計算などの専門用語の意味を解説 | ITコラム｜アイティーエム株式会社](https://www.itmanage.co.jp/column/about-ip-address/)
* 記事: [IPアドレスとは？をわかりやすく解説します - カゴヤのサーバー研究室](https://www.kagoya.jp/howto/it-glossary/network/ipaddress/#:~:text=%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%88%E9%83%A8-,IPv4%E3%81%A8IPv6%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%EF%BC%9F,-%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7IPv4)
* 記事: [動的IPアドレス・静的IPアドレスって？ | IT情報メディア「LIVRA」](https://livra.geolocation.co.jp/iplearning/230/)