IPアドレスの考え方

#手始めに




```
ipアドレス 192.168.0.1
```

```
サブネットマスク 255.255.255.0
```

の場合192.168.0までがネットワーク部、1がホスト部となる
同じネットワークに属している端末は相互に通信が出来る(192.168.0まで同じ為)

```
192.168.0.1　<=> 192.168.0.2
```

ここで注意しないといけないのは
ipアドレスは8it 

```
11111111
```

である場合10進数では255になる
(0カウントスタートの為１から数えた場合は256)その為256台第繋げれると思ってしまうが

>>パソコンには割り当てられない特殊なＩＰアドレスがあるんだ。そのＩＰアドレスは、２５６通りある中の最初と最後の数の『０』と『２５５』なんだ。このホスト部が『０』のＩＰアドレスの事を『ネットワークアドレス』と呼ぶんだ。次にホスト部が『２５５』のＩＰアドレスのことを『ブロードキャストアドレス』と呼ぶんだ。この２つのＩＰアドレスは特殊なＩＰアドレスで、別な役割があるんで、パソコンには割り当てることのできないＩＰアドレス

その為254台になる
さらにそこからインターネットにつながるルータのipアドレス
(デフォルトゲートウェイ)が必要となってくる

>（*実際には、末尾が0と255のものは一般的に予約番号として押さえられているのでホストを割り当てられません。AWSの場合は、末尾が0, 1, 2, 3, 255が使用できません。ここでは計算の簡略化のため予約番号やサブネットワークの計算は無視します。）


##サブネットマスク
例として3000台繋げようとした場合
サブネットマスクを下記のようにする計算としては
ネットワーク部は**256*256*240 = 15,728,640通り**
余った部分はホスト部として
256-240 = 16 256をかけることで**16*256 = 4096**となる 

```
サブネットマスク(要するに20bit分がネットワーク部)
*.*.*.* / 20
2進数
111111111.11111111.111100000.00000000
10進数
255.255.240.0

// 240の計算方法
1 * 2^7 = 1 * 128 = 128
1 * 2^6 = 1 * 64  = 64
1 * 2^5 = 1 * 32  = 32
1 * 2^4 = 1 * 16  = 16
0 * 2^3 = 0 * 8   = 0
0 * 2^2 = 0 * 4   = 0
0 * 2^1 = 0 * 2   = 0
0 * 2^0 = 0 * 1   = 0

// 計算結果を足し合わせる
128 + 64 + 32 + 16 + 0 + 0 + 0 + 0
-> 合計：240 
```


##ネットワーク部とホスト部
AWSのVPC（10.0.0.0/16）というプライベート空間の内部をさらに4分割して、
4つの独立したサブネットワークを作成したいという場合
まず/16でサブネットを区切っているので下記のようになります。

```
ネットワーク部は256*256= 65,536通り
ホスト部も256*256= 65,536

10.0.0.0/16の場合下記のようになる
00001010 00000000 ~ ~ 00000000 00000000 : VPCのネットワークアドレス
11111111 11111111 ~ ~ 00000000 00000000 : VPCのサブネットマスク
```


上記からホスト部を2ビット犠牲にすることで/18にするとサブネットワークでさらに
4分割できるようになる。
**0カウントを忘れないで**
ネットワーク部は256*256= 65,536通り
サブネットワーク部は2*2= 4通り
ホスト部も2^6 * 2^8 = 64*256 = 16,384

```
10.0.0.0/18は
00001010 00000000 ~ ~ 00 ~ 000000 00000000 : VPC内のサブネットワーク1のネットワークアドレス
00001010 00000000 ~ ~ 01 ~ 000000 00000000 : VPC内のサブネットワーク2のネットワークアドレス
00001010 00000000 ~ ~ 10 ~ 000000 00000000 : VPC内のサブネットワーク3のネットワークアドレス
00001010 00000000 ~ ~ 11 ~ 000000 00000000 : VPC内のサブネットワーク4のネットワークアドレス


1 * 2^7 = 1 * 128 = 128
1 * 2^6 = 1 * 64  = 64
1 * 2^5 = 1 * 32  = 32
1 * 2^4 = 1 * 16  = 16
0 * 2^3 = 0 * 8   = 0
0 * 2^2 = 0 * 4   = 0
0 * 2^1 = 0 * 2   = 0
0 * 2^0 = 0 * 1   = 0
```


##自由に使用してもよいプライベートIPアドレス
社内LANやネットワークの実験で使われる

```
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
```

```
このように分けた場合ネットワーク部は65536で区切った事になる
２の16乗　又は　256 * 256
192.168.0.0 ~ 192.168.255.255
```


##表記方法
下記は同じ内容を表す

```
CIDR表記
192.168.1.0/24　左記の状態をプレフィックスが２４bitともいう

サブネットマスク表記
192.168.1.0/255.255.255.0
```

AMAZON VPCではプレフィックは１６以上と決まっているため
10.0.0.0/16 = 10.0.0.0 ~  10.0.255.255
もしくは
192.168.0.0/16 = 192.168.0.0 ~ 192.168.255.255

##サブネットをさらに分けるという考え方
例：10.0.0.0/16 = 10.0.0.0 ~ 10.0.255.255
で作成した場合上記をさらに10.0.0.0/24で分ける,左から三つ目までをネットワーク部とする

```
10.0.0.0/24 = 10.0.0.0 ~ 10.0.0.255
10.0.1.0/24 = 10.0.1.0 ~ 10.0.1.255
10.0.2.0/24 = 10.0.2.0 ~ 10.0.2.255
:
:
10.0.254.0/24 = 10.0.254.0 ~ 10.0.254.255
10.0.255.0/24 = 10.0.255.0 ~ 10.0.255.255
```

##サブネット分割
例:
10.0.0.0/22とした場合サブネットマスクは下記のようになる
11111111.11111111.11111100.00000000
11111100は１０進数で表すと２５２となるので255-252 = 3
となるので10.0.0.0/22はで表現できるネットワーク部は下記になる

```
10.0.0.0/22
10.0.1.0/22
10.0.2.0/22

1 * 2^7 = 1 * 128 = 128
1 * 2^6 = 1 * 64  = 64
1 * 2^5 = 1 * 32  = 32
1 * 2^4 = 1 * 16  = 16
0 * 2^3 = 0 * 8   = 0
0 * 2^2 = 0 * 4   = 0
0 * 2^1 = 0 * 2   = 0
0 * 2^0 = 0 * 1   = 0
```


＊間違い等あればコメントにてご指摘頂けると幸いです。

>10.0.0.0/16 の CIDR 表記はネットワークアドレス空間が 10.0.0.0 から 10.0.255.255 までとなります。そして、そのネットワーク空間内で更に /24 のサブネットを作成すると、そのサブネットは 10.0.x.0 の形式をとります。ここで、xは0から255までの任意の値を取りうるので、最大で256個（0から255）の異なる /24 サブネットを作成することが可能です。

>したがって、10.0.1.0/24、10.0.2.0/24、10.0.3.0/24、・・・ 10.0.255.0/24 といった形で、最大256個のサブネットを作成することが可能となります。それぞれのサブネットは、それぞれ独自のホストIP範囲を持ちます。例えば、「10.0.0.0/24」では「10.0.0.0～10.0.0.255」、「10.0.1.0/24」では「10.0.1.0～10.0.1.255」、といった具体的なホストアドレス範囲を持つことになります。