IPv4メモ

IPv4についてメモ書き。

## そもそもIPアドレスとはなんぞや

IPアドレスは`Internet Protocol address`の略。
ネットワーク上の機器を識別するために割り振られる番号。

IPv4以外にもIPv6という方式もありますが、本記事はIPv4のメモ書き。

IPv4は歴史的経緯（IPアドレス不足）から、従来のクラスフル方式からクラスレス方式へ移行しています。
個人的にはこの前提を知らずに色々な説明を読んでしまうと混乱に元になる気がします。

歴史的な流れについてはJPNICの下記の記事が分かりやすい。

[JPNIC - インターネット10分講座：IPv4アドレス](https://www.nic.ad.jp/ja/newsletter/No26/090.html)
[JPNIC - インターネット歴史年表](https://www.nic.ad.jp/timeline/)
[JPNIC - 日本におけるインターネット資源管理の歴史～～](https://www.nic.ad.jp/timeline/20th/)

## IPアドレス概要

IPアドレスは32ビット。8ビットごとにドット区切り10進数で表記が一般的。

`11000000101010000000000000000001` というIPアドレスがあると8ビットごとに区切って10進数に変換。

- `11000000`を10進数変換すると192
- `10101000`を10進数変換すると168
- `00000000`を10進数変換すると0
- `00000001`を10進数変換すると1

192.168.0.1

| 10進数表記  | 2進数表記                           |
| ----------- | ----------------------------------- |
| 192.168.0.1 | 11000000 10101000 00000000 00000001 |

## ドットで区切らない表記

8ビットごとにドット区切り10進数で表記が一般的と記載しましたが、下記のようにドット区切りしない表記も可能ではあります。

```PowerShell
ping 3405803776
```

上記のようにpingを実行すると、`203.0.113.0`と評価されます。

これは　10進数　`3405803776` を　2進数に変換すると `11001011000000000111000100000000`　となり。
これを8ビットごとに区切るってみると

`11001011` -> `203`
`00000000` -> `0`
`01110001` -> `113`
`00000000` -> `0`

となるからです。

## クラスフル方式

1981年9月に　[RFC791](https://datatracker.ietf.org/doc/html/rfc791) としてIPの仕様が策定されているが。
クラスフル方式は初期のインターネットで利用されていた方式。

IPv4アドレスはネットワークの識別（ネットワーク部）とホストの識別部分(ホスト部)に区切られ、昔はこの区切り部分をIPv4アドレスの上位ビットによって決定する方式が採用されていた。

またこの区切りをクラスと呼んでいた。

| クラス | 上位ビット | アドレス範囲                 | ネットワーク部のビット | ホスト部のビット | 各ネットワーク部に割り当てられる最大ホスト数 |
| ------ | ---------- | ---------------------------- | ---------------------- | ---------------- | -------------------------------------------- |
| A      | 0          | 0.0.0.0 ～ 127.255.255.255   | 8ビット                | 24ビット         | 16,777,214                                   |
| B      | 10         | 128.0.0.0 ～ 191.255.255.255 | 16ビット               | 16ビット         | 65,534                                       |
| C      | 110        | 192.0.0.0 ～ 223.255.255.255 | 24ビット               | 8ビット          | 254                                          |
| D      | 1110       | 224.0.0.0 ～ 239.255.255.255 | -                      | -                | -                                            |
| E      | 11110      | 240.0.0.0 ～ 247.255.255.255 | -                      | -                | -                                            |

クラスCをみると4オクテッド目の0~255までがホスト部となるため最大ホスト数は256個になりそうなものだが、実際は254個。
これは

- ホスト部のビットが全部0のアドレス
- ホスト部のビットが全部1のアドレス

上記の２つのアドレスは実際にはホストに割り当てられない特殊なアドレスとなっているため256-2で254個となっている。

- ホスト部が全部0のアドレスはネットワークアドレスと呼ばれ、ネットワーク自体を表す。
- ホスト部が全部1のアドレスはブロードキャストアドレスと呼ばれ、特殊な

ネットワーク部が255のアドレスは

ただし、この区切りだとネットワーク規模が大雑把すぎて無駄が多いので、現在のIPv4ではネットワーク部とホスト部の区切り  位置を任意のビット数で区切れるクラスレス方式へ移行した。

## クラスレス方式

クラスレスでは、ネットワーク部のビット長（プリフィクス長）を明示する必要がある。（サブネットマスク）
アドレスのあとに / で区切って プリフィクス長を表記する。

この表記方法を`CIDR(Classless Inter-Domain Routing)`と呼ぶ。

なおCIDRについては、1993年9月に[RFC1518](https://datatracker.ietf.org/doc/html/rfc1518)として発行されている。

### exsample

ipaddress / 28とか書いてあればipアドレスの先頭から28bitがネットワーク部で残りの4bitがホスト部という意味。

| CIDR表記       | ホスト部                               |
| -------------- | -------------------------------------- |
| 192.168.0.0/28 | 192.168.0.0～192.168.0.15 （16ホスト） |

上記の例だと、19.168.0.0 = 11000000 10101000 00000000 00000000となり先頭から28bitの11000000 10101000 00000000 0000がネットワーク部となり残りの0000がホスト部。

## クラスフル方式からクラスレス方式へ（CIDR導入）

下記、記事にCIDR導入について記載があり、歴史的な流れについてイメージできるかも。

[CIDR時代の到来](https://www.nic.ad.jp/timeline/20th/chapter5.html#_Toc396898369)

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

IPアドレスにはグローバルIPアドレスとプライベートIPアドレスが存在する。

プライベートIPアドレスはインターネットに直接接続されていないネットワークで自由に使っていいアドレス。
グローバルIPアドレスはインターネットに直接接続するためにNIC（Network Information Center）から割り当てられるアドレス。

プライベートIPアドレスは[RFC1918](https://datatracker.ietf.org/doc/html/rfc1918)にて範囲は下記のように決定されている。

[RFC 1918](https://www.nic.ad.jp/ja/translation/rfc/1918.html)

| アドレス範囲                                       |
| -------------------------------------------------- |
| 10.0.0.0 ～ 10.255.255.255 (10/8 prefix)           |
| 172.16.0.0 ～ 172.31.255.255 (172.16/12 prefix)    |
| 192.168.0.0 ～ 192.168.255.255 (192.168/16 prefix) |

| 10.0.0.0 ～ 10.255.255.255 (10/8 prefix)のビット表記 |
| ---------------------------------------------------- |
| 00001010.00000000.00000000.00000000 From             |
| 00001010.11111111.11111111.11111111 To               |
| 11111111.00000000.00000000.00000000 サブネットマスク |

| 172.16.0.0 ～ 172.31.255.255 (172.16/12 prefix)のビット表記 |
| ----------------------------------------------------------- |
| 01111010.00010000.00000000.00000000 From                    |
| 01111010.00011111.11111111.11111111 To                      |
| 11111111.11110000.00000000.00000000 サブネットマスク        |

| 192.168.0.0 ～ 192.168.255.255 (192.168/16 prefix)のビット表記 |
| -------------------------------------------------------------- |
| 11000000.10101000.00000000.00000000 From                       |
| 11000000.10101000.11111111.11111111 To                         |
| 11111111.11111111.00000000.00000000 サブネットマスク           |

上記プライベートIPアドレス以外のアドレスは概ねグローバルIPアドレスと呼ばれる。

実際はRFCで予約されている特別なIPアドレスが規定されているので、プライベートIP以外　イコール　グローバルIPとするのは乱暴で　≒　って感じです。

特殊用途のIPとしては、RFC6890が規定されている。

[RFC6890 - Special-Purpose IP Address Registries](https://datatracker.ietf.org/doc/html/rfc6890)

## 総評

IPアドレスの歴史的経緯やらその時代その時代でどういった背景があったのか等々。
そういうお話を一度まとめて聞いてみたいですね。


あと　[JPNIC: 日本ネットワークインフォメーションセンター](https://www.nic.ad.jp/ja/)のサイトは興味深い記事が多いので、眺めてみると面白いかと思います。