<IPアドレス入門>IPv4とIPv6の違いについて

#はじめに
「IPアドレスなんて、とりあえず、インターネット上の住所みたいなもんでしょー！？ 指定すれば繋がるやん！！」

・・・って、
題名にある通り、
私自身、恥ずかしながら、
大分、大〜分、知ったかしていたクズ人間です。

IPアドレスさん、ごめんなさい。

傲慢でした。許してください。上辺だけの関係はやめましょう。

しっかりと勉強してまいりたいと存じまする。




#IPとは

`IP`とは、**インターネットプロトコルの略**です。

ふむふむ、
インターネットはもちろんいつも使ってるし、
ブラウザを使ってみんなと繋がれるネットワーク環境だよね？
って印象ですが、

まず、**プロトコル**とか文言が理解し難いですねぇ。

プロトコルって日常生活で一回も発したことがないし。

「お宅のプロトコル、どないまんねん！！！！」
みたいな、わけわからんですね。

とりあえず、前置き長くなりましたが、
プロトコルっていうのは、`お約束事`ってことです。

つまり、**`インターネット通信におけるお約束事の一つ`**ってことで、

これはもう決められている以上は、拒否とかできませんし、素直に受け入れるしかありません。




#IP(インターネットプロトコル)って、どう決められたの？
[RFC 791](https://tools.ietf.org/html/rfc791)に、定められていて、
みんなこの定義書を元に、
インターネットプロトコルを使用して、アプリケーションやシステム開発等をしてきましたね。

少し歴史も振り返りたいと思います。
>RFCは、1968年ごろ、スティーブ・クロッカー が考案したと言われており、はじめのRFCは1969年4月7日の日付となっている (RFC 1) 。その後情報科学研究所 (ISI) のジョン・ポステルにより管理される。RFCの歴史についてはRFC 2555に30 Years of RFCsとしてまとめられている。
引用：[wikipedia](https://ja.wikipedia.org/wiki/Request_for_Comments)

また、
>RFC（Request for Comments）は、現在はインターネットで用いられるさまざまな技術の標準化や運用に関する事項など幅広い情報共有を行うために公開される文書シリーズ
引用：[日本ネットワークインフォーメーションセンター](https://www.nic.ad.jp/ja/newsletter/No24/090.html)

とのことです。
なるほど、これは、決められたレールの上で、踊るしかありません。

#IPv4とは
やっと本題に入りますが、
実は最初に提唱されたインターネットプロトコルが、`IPv4`です。
上述した、[RFC 791](https://tools.ietf.org/html/rfc791) です。
正式名称は、`インターネットプロトコルバージョン4`

####最初にバージョン４?!
自分も疑問です。
えと、、バージョン1~3もあるんじゃないの？って思いますよね。

→**ないです。**

諸説あると思いますが、

IPv4のIPアドレスは、`32ビット`の数字を変換して**4つに区切られていて`（4オクテット）`**、
**区切りが4つだから**、名前が`IPv4`になった
ということらしいです。

突然の、**4!!**（~~心の声：粗品風に言いたい~~）

###アドレスの表記方法

`32ビット`の**固定長**として表現され、

```
1100000101010000000000100000001
```
8ビットのまとまりに区切り、

```
1100000.10101000.00000001.00000001
```
これを10進数で表すと、

```
192.168.1.1
```
となります。

```
<第1オクテット>.<第2オクテット>.<第3オクテット>.<第4オクテット>
```
8ビットを**オクテット**と呼びますが、
なんだかあの妖艶なドラマ「カルテット」を思い出しますねえ〜



###IPv4にはネットワーク部とホスト部がある
`IPv4アドレス` = `ネットワーク部` + `ホスト部`
![スクリーンショット 2021-02-05 16.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075243/805d822a-f843-eff7-9861-7f2aa272b277.png)

- `ネットワーク部`：各ホスト(コンピューターとか)が属するネットワークの範囲を表す
- `ホスト部`：そのネットワーク内でコンピューターを識別するための部分になる

ふむ、別れていることはわかったけど、いまいちピンとこない。。。

例えば、
超ピンポイントに、野村不動産の高級建売住宅の[プラウド](https://www.proud-web.jp/)に置き換えてみると、
あの高級感漂う、~~平民は足を踏み入れてはいけない禁止区域みたいな~~プラウドの敷地エリアが、`ネットワーク部`で
一つ一つの建売戸建てが、`ホスト部`の一つ一つを表す。

みたいな、、、
おっつ、なんかピンときました。（自己解決）


要するに、
ネットワーク部ってのが、**`ネットワークの範囲指定をして、ホスト部の番号を使って、コンピューターなり、ルーターなり、をホストする`**
ってことですな。
ネットワーク部ってのは、**グループを形成している感覚に近い**んだろうな。


###IPv4には、ネットワーク部とホスト部を区切り方が結構ある
結構ある、ってざっくり言っちゃいましたけど、
代表的なものを軽く触れたいと思います。

####クラス
ちょい、「古き良き日本」みたいなレトロなやり方？ 流行りトレンディではなさそう。
ただ知っておくのは大事◎

クラスには**A~Eが存在**しています。
実際にネットワーク部とホスト部を区切れるのは、**クラスA~C**。

| クラス | 第1オクテットの先頭ビット列 | アドレス範囲 | 割当可能ホスト数 |用途|
|:-:|:-:|:-:|:-:|:--|
| A | 0 | 0.0.0.0 ～ 127.255.255.255 | 16,777,214 |任意|
| B | 10 | 128.0.0.0 ～ 191.255.255.255 | 65,534 |任意|
| C | 110 | 192.0.0.0 ～ 223.255.255.255 | 254 |任意|
| D | 1110 | 224.0.0.0 ～ 239.255.255.255 | - | IPマルチキャスト用<br>※ホストアドレス部分なし |
| E | 1111 | 240.0.0.0 ～ 255.255.255.255  | - | TCP/IP（IPv4）の開発当初から予約された実験用<br>※実際に使われることはありません。 |

#####ちなみに、
クラスAでは、
`0.0.0.0` は全てのネットワークを表すアドレスですので使用不可
`127.0.0.1` は**`ループバックアドレス`**と呼ばれ、**自分を示す特殊なIPアドレス**

よくmacのパソコンとかで、
localhostを確認すると`127.0.0.1`と指定されていますが、
そういったことだったんですねえ

クラスDでは、
1対N（グループ宛て）の通信に利用されます。なお、`224.0.0.0 〜 224.0.0.255` の範囲のアドレスは、
同一ネットワーク上でのみ送信されルーターによる転送はない、とのこと。


#####プライベートアドレスはクラスA、B、Cで、それぞれ範囲が決められている
社内や、組織内、家庭内で使う内部ネットワークでのみ利用可能なIPアドレス。
つまり、インターネット上には出ていくことはありません。

| クラス | アドレス範囲 |
|:-:|:-:|
| A | 10.0.0.0 〜 10.255.255.255 |
| B | 172.16.0.0 〜 172.31.255.255 |
| C | 192.168.0.0 〜 192.168.255.255 |



####CIDR（サイダー）
~~※三ツ矢サイダーではありません。~~

CIDR(サイダー)です。
流行ってます。はい。こっちがモダンな匂いがプンプンします。

「いやいや、クラスってめちゃめちゃ範囲、縛られてんじゃん、うまくホストできなかったら、アドレスちょー無駄になっちゃうじゃん。めちゃめちゃ箱入息子やんっ」

って嘆きを解消するために、生まれたと言っても過言ではないと思います。

本名も `Classless Inter-Domain Routing`ってなってて、

実際に、ネットワーク部とホスト部の区切りが自由だぁぁぁぁあああああ！！！！！！！！！！


#####CIDR（サイダー）の~~飲み方~~ 書き方

```
192.168.1.0/24
```
シンプルに美しい。

範囲としては、
`192.168.1.0 - 192.168.1.255`
を指します。

ネットワーク部：`192.168.1.`
ホスト部：`0~255`
を指します。

すげええ簡略貸されて、自由度MAXですねぇ！！！
ちなみに、`/.24`の部分を`プレフィックス`と呼ぶようです。


#####余談だけど、サブネットで表記することもできるよ
もうお腹いっぱいなんだけど、サブネットって突然、何！？ってなると思いますが、簡単です。

プレフィックスの部分を
`/255.255.255.0`
と表したものが**サブネット**です。

`32ビット`で表記すると

```
1111111.1111111.1111111.00000000
```
を指して、**`1`の部分が、ネットワーク部ね！！**と宣言できます。

これが`サブネット`。

`クラス`ちゃんは束縛激しいし、`サブネット`くんは鬱陶しいな〜って思った人たちの発明が、**サイダー表記**ですなあ！

みんな賢い！！！！！！！！！！！！




#もう全部IPv4でいいじゃん。なんでIPv6が生まれたの？
それは、単刀直入に、
**IPv4アドレスの枯渇**
です。

石油などの天然資源も有限で、いつ枯渇してもおかしくないと言われていますが、
`IPv4`もその危機にあります。

単純に、256の4乗してみましょう。
` 256^4 = 4,294,967,296 `
つまり、**約43億個のユニークなグローバルIPアドレスしか用意できません。**

「いやいや"しか"って、、、43億って十分じゃね？」
と思うかもしれませんが、そんなことはありません。

地球上の人口を見ても2021年2月現在76億近いですから、
明らかにたりないですね、こりゃ。

まあ、おそらく、1981年当時は、十分だったんですねえ。
みんながみんなスマホを手に取り、こんなネットビジネスやらインターネットが爆発的に利用されるとか
あんまり未来人のことなんか想像しないですからねぇ。


###その背景として、生まれたのが、IPv6。
`インターネットプロトコルバージョン6`
おおお、ver.5 すらも超えて飛び級のバーションみたいな印象です。

初版は、1995年に[RFC1883](https://tools.ietf.org/html/rfc2460) で定義され、
1998年に第二版として、[RFC2460](https://tools.ietf.org/html/rfc2460)
そして、最近2017年に最新版として、[RFC8200](https://tools.ietf.org/html/rfc8200)
と2回、改訂されていますね！

2017年の改訂とのことですから、ついに、`IPv6`が本領発揮する時代に突入したんじゃないでしょうか！！




#IPv6とは
これはIPv4が32ビットでしたが、IPv6は128ビットデータとして表現します、と。

つまり、アドレス総数は `2^128 = 約340澗（かん）個` 
聞いたことない単位出てきたYO!!

これは**事実上無限**。神の領域ですね。。

例えば、`IPv4`の

```
 192.0.2.1
```

を`IPv6`に変換して、実際に見てみると、こんな感じ。

```
0000:0000:0000:0000:0000:ffff:c000:0201
```
IPv4と同様の表記では**冗長になりすぎる**ため、
アドレスの値を**`16ビット単位`で`コロン（:）`で区切り、`十六進法`で表記**するのだそう。
※`16進数`:`1~9` `a~f`で表す。`f = 15, 10 = 16` みたいな感じです。

ただ、上記の`0000:`ってこれまた冗長すぎるので、
あるセクションが `0` で始まる場合は、先行する `0` を省略できるルールがあって、

```
0:0:0:0:0:ffff:c000:0201
```

とできる。
さらに、一箇所だけ、`0000:0000:0000:0000:0000`と連続するときは、`::`で省略できる。
つまり、こう。

```
::ffff:c000:201
```

もし、

```
0000:0000:0000:ffff:0000:0000:c000:0201
```
こうなっていた場合は、

```
::ffff:0:0:c000:0201
0:0:0:ffff::c000:0201
```
とどちらかで、できる。

もうわけわからんすね、

IPv6アドレス、怖ひ、、、、、





#なんでIPv5じゃなかったの？
うーむ。
`IPv6`とか突然、バージョン飛んだし、`IPv4`を踏襲して、**第四オクテット**の考え方を取り入れているなら、
IPv6のアドレス自体が、８分割されてるから、潔く`IPv8`とかでもよかったのにな〜〜

実は、
`IANA（Internet Assigned Numbers Authority）`という、
IPアドレスとかの、インターネットにまつわる番号を管理する本気の組織があって、

その組織の管理表的には、
本当は、IPv4とIPv6の間に、幻の**5番目のプロトコル**が存在している、みたい。

その名も`「ST-II」`。

[RFC1190](https://tools.ietf.org/html/rfc1190)に定められていますが、
目的としては、次世代IPとして開発されたものではなく、
**飽くまでストリーム指向の実験的なプロトコルで、一般が利用するものではなかった**
らしいです。
ST-IIは1990年にRFC化されていて、ちょうどIPv4とIPv6の間に挟まれた格好なので、飛び番になってしまった

というお話でした。

ちゃんちゃん♪



#最後に、次世代の通信方法は、`IPoE IPv4 over IPv6`
ざっくりですが、
ID・パスワードを用いて、認証を挟んでインターネットに接続する従来のやり方を
`PPPoE(Point-to-Point Protocol over Ethernet)`
といって、（ﾎﾟﾎﾟﾎﾟ-ｴって聞こえるのは何故・・・）

これは **認証で渋滞しちゃうので、遅い**と言うわけですねえ。
で、`IPv4`は、結局のところ、`PPPoE`にしか対応していない。

そこで、もっと速い違う新方式のプロトコル
`IPoE(IP over Ethernet)`
が登場し、従来の認証のところを省いて、
直接インターネットに接続しちゃおうっていうのが、`IPoE`で、速い。

いま、`IPoE`は`IPv6`に対応している。


つまり、
`IPv4 over IPv6`は、
いいとこ取りしちゃえばいいじゃん〜ってお話で、

基本的には、`IPv6`環境で通信を行いながらも、
従来の`IPv4`アドレスでの通信もできるようにしちゃうよってこと。

なんとも次世代の技術でしたね。



#まとめ


奥が深すぎて、溺れた、、、
IPアドレスさん、ありがとう。


以上、
ありがとうございました！！！！！！！！！