IPアドレス（ネットワーク部/ホスト部）について

# はじめに
IPアドレスは身近にあるものの、なんとなくコンピュータに割り当てられている重複しない数値という認識で、詳しいことがわからなかったため自分なりにまとめてみる。
※間違えている可能性があるため、必ず他の情報も参考にしてください

# IPアドレスについておさらい
以前まとめた記事より [DNSについて](https://qiita.com/sasao3/items/57f3f11cdedabd02d31e)

IPアドレス（Internet Protocol Address）は、ネットワーク機器を識別するための番号。識別するため、もちろん重複してはいけない。

IPアドレスには、IPv4やIPv6といった通信する際のプロトコル（規約）がある。
(Internet Protocol version4/Internet Protocol version6)
これらには様々な違いがある。例えば、ビット数の違いがある。

IPv4では、32ビット。IPv6では128ビット。
IPV4では、
`11000000.10101000.00000001.00000011`という32ビット(2進数32桁)で表されていてこれを8ビットずつ区切り10進数、`192.168.1.3`という風に表記している。
2の32乗で約43億通り表現できる。

IPv6では、128ビット(2進数128桁)を16ビットごとに区切り、16進数で表記している。
2の128乗は、約43億×43億×43億×43億通り(ざっくり)表現できる。

上記のようにビット数が異なるため、IPv6のほうがより多くのIPアドレスを割り当てることが出来る。

IPv4が普及していく中で、42.9億とかなり多く表現できるように思われるが、実際世界中の機器に重複しないように割り当てる必要があることから、IPv4によるIPアドレスの枯渇問題が起こっている。

こうした背景からもより多く表現できるIPv6が登場した。
ただ、IPv4とIPv6に互換性がないことからも、IPv6へすぐに移行されることもなくどちらも使用されている。

## ネットワーク部とホスト部
IPアドレスは、ネットワーク部とホスト部の2つから成り立っている。
ネットワーク部は、そのIPアドレスが所属するネットワークを識別するアドレス部分で
ホスト部は、そのネットワーク内の機器を識別するためのアドレス部分のこと。

以下の図のようにして識別をしている。

![スクリーンショット 2021-11-22 18.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381376/1c5ce771-d014-a47b-0e83-d411f948e9ec.png)


そのため、このホスト部の値によってネットワーク内で割り当てることができるホストの数が決まる。

IPv4の場合32bitでIPアドレスを表しているが、そのうちどこまでがネットワーク部でどこからがホスト部であると決めるのか。それを決める仕組みとして、***「クラスフル」***と***「サブネットマスク」***がある。


## クラスフルとサブネットマスク
### クラスフル
IT用語辞典を見てみると、以下のように説明されている。

> クラスフルとは、IPアドレス（IPv4アドレス）の割り当てや運用、経路選択の方式の一つで、あらかじめアドレスの範囲や数の定められた「クラス」と呼ばれる単位によってアドレス空間を分割し、各組織に割り当てる方式。
引用：[IT用語辞典 クラスフル](https://e-words.jp/w/%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%95%E3%83%AB.html)

ようは、IPアドレスの範囲によってネットワーク部の構成が決まるということ。
32bitのIPアドレスを5つのクラス（クラスA~クラスE）に分けて使用している。ただ、クラスDはIPマルチキャスト用、クラスEは予約済み、未使用のもので通常用いられるクラスはA,B,Cの3クラスである。

> IPマルチキャストとは、IP（Internet Protocol）で制御されるネットワーク上で、特定の複数の相手に同じデータをいっぺんに送信すること。送信側はデータを一度送信するだけで、経路途上の通信機器が受信者のいる経路にだけデータを複製して送り届ける。一対多の放送型のデータ配信を効率的に行うことができる。
引用：[IT用語辞典 IPマルチキャスト](https://e-words.jp/w/IP%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88.html)

クラスA,B,Cの違いは以下のとおりである。

***・クラスA（大規模ネットワーク用）***
32bitのうち先頭の8bitがネットワーク部、24bitがホスト部となっている。
2進数表記の場合、先頭が0ではじまる。アドレスの範囲は`0.0.0.0~127.255.255.255`となる。
ホスト部が24bitとなっているため、それぞれのネットワークに対して2の24乗（約1600万）のコンピュータにIPアドレスを割り当てることができる。そのため大規模ネットワーク用となっている。


***・クラスB（中規模ネットワーク用）***
32bitのうち先頭の16bitがネットワーク部、もう16bitがホスト部となっている。
２進数表記の場合、先頭が１０ではじまる。アドレスの範囲は`128.0.0.0~191.255.2555.255`となる。
それぞれのネットワークに対して、２の16乗（約6万）割り当てることができる。


***・クラスC（小規模ネットワーク用）***
32bitのうち先頭の24bitがネットワーク部、8bitがホスト部となっている。
２進数表記の場合、先頭が１1０ではじまる。アドレスの範囲は`192.0.0.0~191.223.255.255.255`となる。
それぞれのネットワークに対して、254割り当てることができる。


このように、先頭のビット数を見たり、アドレスの範囲を見ることでどのクラスなのかわかる。


### クラスフルの問題点
このアドレスの割り振りは、インターネットの初期に用いられた方法。
しかしクラスAの場合、１つのネットワークに対して約1600万ものホスト、クラスBだと約6万ものホストを割り当てることができるがこれが大雑把であり、***使われないアドレスがたくさん生じてしまった***。

IPアドレスにも限りがあるため、こうした無駄をできるだけ減らすべくより柔軟に割当することができる***サブネットマスク（クラスレス）***方式が今使われている。


## サブネットマスク
サブネットマスクとは、サブネットと呼ばれるネットワークを小さな単位に分割したものを表現するための値。

IPアドレスは、上記で説明したようにネットワーク部とホスト部で分けられていて、このホスト部の数bitをネットワーク部として定義し直すことで、ネットワークの配下にネットワーク（サブネット）として更に区切ることができる。

クラスフルだと決められた範囲でしかネットワーク部を設定できなかったところを、サブネットマスクを用いることでより細かくネットワークを設定できる。

サブネットマスクは、32bitの値によって構成されていて、この値でネットワーク部とホスト部を再定義することができる
（１がネットワークアドレス、０がホストアドレス）

```
サブネットマスク（2進数表記）
 11111111.11111111.11111111.00000000
|--------ネットワーク部--------|-ホスト部-|

サブネットマスク（10進数表記）
255.255.255.0
```

例えば、クラスB（先頭16bitがネットワーク部）の場合、サブネットマスクを適用すると下記のようにネットワークを256個に分割することができる。

```
　11111111.11111111.00000000.00000000  (172.16.0.0) IPアドレス範囲
　11111111.11111111.11111111.00000000  (255.255.255.0) サブネットマスク
|---ネットワーク部---|サブネット部|-ホスト部-|
```



# まとめ
今回はIPアドレスの中でもネットワーク部、ホスト部についてまとめました。
ここらへんの知識はまだまだ理解が不十分であるため、少しずつ理解を深めていきたい。



# 参考

https://livra.geolocation.co.jp/iplearning/173/

https://milestone-of-se.nesuke.com/nw-basic/ip/ip-address/

https://e-words.jp/w/%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%95%E3%83%AB.html

https://livra.geolocation.co.jp/iplearning/181/

https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6

図解でよくわかるネットワークの重要語解説 改訂5版