サブネットマスクの計算


# 192.168.0.1/22

「/22」は　左から22個目までが2進数の「1」

11111111.11111111.11111100.00000000

IPアドレスはネットワーク部とホスト部から構成される
**IPアドレスのネットワーク部を表すビット部分が1になり、ホスト部を表すビット部分が0になる。**

192.168.0.1を２進数で表すと

11000000.10101000.00000000.00000001

## 開始IPを求める

開始IPを求めるときは上記2つをANDで計算します。
論理積(AND)　0&0=0，0&1=0，1&0=0，1&1=1

```
11000000.10101000.00000000.00000001 <-- 192.168.0.1
11111111.11111111.11111100.00000000 <-- /22
------------------------------------
11000000.10101000.00000000.00000000 --> 192.168.0.0
```

11000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+0+0+0+0+0+0=192
10101000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+32+0+8+0+0+0=168
00000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+0+0+0+0+0+0=0
00000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+0+0+0+0+0+0=0

## 終了IPを求める

終了IPを求めるときは上記2つをORで計算します。
論理和(OR) 0|0=0，0|1=1，1|0=1，1|1=1
ただし、サブネットマスクを反転させてから計算する必要があります。

```
11111111.11111111.11111100.00000000
↓
00000000.00000000.00000011.11111111
```

```
11000000.10101000.00000000.00000001 <-- 192.168.0.1
00000000.00000000.00000011.11111111 <-- /22の反転
------------------------------------
11000000.10101000.00000011.11111111　--> 192.168.3.255
```

11000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+0+0+0+0+0+0=192
10101000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+32+0+8+0+0+0=168
00000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+0+0+0+0+2+1=3
00000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+32+16+8+4+2+1=255

(開始IP)192.168.0.0～(終了IP)192.168.3.255
IPアドレス数は256×4=1024個となります。

# 210.171.136.0/26

開始IPを求めるときは上記2つをANDで計算します。
論理積(AND)　0&0=0，0&1=0，1&0=0，1&1=1

```
11010010.10101011.10001000.00000000 <-- 210.171.136.0
11111111.11111111.11111111.11000000 <-- /26
------------------------------------
11010010.10101011.10001000.00000000 --> 210.171.136.0
```

11010010 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+0+16+0+0+2+0=210
10101011 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+32+0+8+0+2+1=171
10001000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+0+0+8+0+0+0=136
00000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+0+0+0+0+0+0=0


終了IPを求めるときは上記2つをORで計算します。
論理和(OR) 0|0=0，0|1=1，1|0=1，1|1=1
ただし、サブネットマスクを反転させてから計算する必要があります。

```
11010010.10101011.10001000.00000000 <-- 210.171.136.0
00000000.00000000.00000000.00111111 <-- /26の反転
------------------------------------
11010010.10101011.10001000.00111111 --> 210.171.136.0
```

11010010 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+0+16+0+0+2+0=210
10101011 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+32+0+8+0+2+1=171
10001000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+0+0+0+8+0+0+0=136
00111111 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+32+16+8+4+2+1=63

(開始IP)210.171.136.0～(終了IP)210.171.136.63
IPアドレス数は64個となります。

# ネットワークアドレスを求る。

```
IPアドレス：199.32.10.85
サブネットマスク：255.255.255.192
```

まずそれぞれを2進数に変換する。

```
IPアドレス：11000111 00100000 00001010 01010101
サブネットマスク：11111111 11111111 11111111 11000000
```

そしてこれらをAND演算する。
論理積(AND)　0&0=0，0&1=0，1&0=0，1&1=1

```
11000111 00100000 00001010 01010101 <-- 199.32.10.85
11111111 11111111 11111111 11000000 <-- 255.255.255.192
-------------------------------------
11000111 00100000 00001010 01000000 --> 192.32.10.64/26(ネットワークアドレス)
```

11000111 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 128+64+0+0+0+4+2+1=199
00100000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+32+0+0+0+0+0=32
00001010 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+0+0+0+8+0+2+0=10
01000000 --> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 --> 0+64+0+0+0+0+0+0=64


ちなみに、クラスフルアドレスの場合は計算不要で簡単に求めることができる。
例えば、192.168.33.10というIPアドレスがあったとする。
192から始まるので、クラスCのIPアドレスということがわかり、ネットワーク部が24ビット分ということもわかる。ネットワークアドレスはホスト部のビットが全て0になるアドレスなので、192.168.33.0がネットワークアドレスになる。

```
11000000.10101000.00100001.00001010 <-- 192.168.33.10
11111111 11111111 11111111 00000000 <-- 255.255.255.0
-------------------------------------
11000000 10101000 00100001 00000000 --> 192.168.33.0/24(ネットワークアドレス)
```


# クラス

|クラス	|先頭ビット列|アドレス範囲（10進数）|ネットワークアドレス長|ホストアドレス長|割り当て可能なホスト数|補足|
|:------|:----------|:-------------------|:-------------------|:--------------|:------------------|:---|
|クラスA	|0	|0.0.0.0 ~ 127.255.255.255	|8ビット|	24ビット|	16777214個|	-|
|クラスB	|10	|128.0.0.0 ~ 191.255.255.255|16ビット|	16ビット|	65534個|	-|
|クラスC	|110|192.0.0.0 ~ 223.255.255.255|24ビット|	8ビット|	254個|	-|
|クラスD	|1110|224.0.0.0 ~ 239.255.255.255|-	|-	|-	|IPマルチキャスト用途|
|クラスE	|1111|240.0.0.0 ~ 255.255.255.255|-	|-	|-	|研究用途|

クラスA

|  |サブネットマスク|IP数 |
|:-|:--------|---------:|
|/8|255.0.0.0|16,777,216|
|/9|255.128.0.0|8,388,608|
|/10|255.192.0.0|4,194,304|
|/11|255.224.0.0|2,097,152|
|/12|255.240.0.0|1,048,576|
|/13|255.248.0.0|524,288|
|/14|255.252.0.0|262,144|
|/15|255.254.0.0|131,072|

クラスB

|  |サブネットマスク|IP数 |
|:-|:--------|---------:|
|/16|255.255.0.0|65,536|
|/17|255.255.128.0|32,768|
|/18|255.255.192.0|16,384|
|/19|255.255.224.0|8,192|
|/20|255.255.240.0|4,096|
|/21|255.255.248.0|2,048|
|/22|255.255.252.0|1,024|
|/23|255.255.254.0|512|

クラスC

|  |サブネットマスク|IP数 |
|:-|:--------|---------:|
|/24|255.255.255.0|256|
|/25|255.255.255.128|128|
|/26|255.255.255.192|64|
|/27|255.255.255.224|32|
|/28|255.255.255.240|16|
|/29|255.255.255.248|8|
|/30|255.255.255.252|4|
|/31|255.255.255.254|2|
|/32|255.255.255.255|1|

#　参考資料

[2進数・10進数・16進数の変換早見表](https://www.xn--2-g90b954airby76h.net/hayamihyo-2shinsu.php)

[サブネットマスクの計算ってどうやるんだっけな？](https://www.dcom-web.co.jp/lab/etc/how_do_i_calculate_the_subnet_mask)

[IPアドレスの基礎知識](https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6)

[IPアドレスサブネットマスク早見表](https://www.ahref.org/doc/ipsubnet.html)