VLSM備忘録

##経緯
VLSMの授業を受けたのですが、VSLMとは何なのか理解したものの、「さぁじゃあ実際にVLSMを使ってIPアドレスを割り当てて行こう！」となった途端に追いつけなくなり、数日かけてやっと何をどうしたら良いのか分かってきたので、忘れないようにメモしておきたいと思います。

##原因
そもそも、何がわからないのかよくわからなかったので、方法論を調べてみてもよくわかりませんでした。で、授業中に取ったノートと写真に撮った黒板を使って、もうとりあえずやってみようと思ったら、何が原因かよくわかったんですけど、**10進数と2進数の変換**で手こずってたんです。授業で行った所与のIPアドレスとサブネットマスクを表に書き直す方法をしっかりやってなかったんですよね。三桁のかけ算を暗算でしようと思ったら詰まってしまうに決まってるんですよね。

##予備知識
1. サブネット
 * 分割されたネットワークのこと
 * ネットワーク一つだけでは効率的な運用が出来ないので必要
 * 分割されたネットワークに個別のルールを設定したりするのに便利
2. サブネットマスク
 * IPアドレスのどこまでがネットワークを指定し、どこまでがホストを指定しているか識別するための指標
 * 例えば255.255.255.0とあれば、192.168.0.0の”192.168.0”の部分がネットワークであり、残りの"0"から"255"までがホストを指定する
3. ネットワークポーションとは
  * IPアドレスがどのネットワークに所属しているか識別する部分
  * 例えば192.168.0.0の"192.168.0"の部分（サブネットマスク255.255.255.0の場合）
4. ホストポーション
 * IPアドレスがどのホストを指定しているか識別する部分
 * 例えば192.168.0.0の"0"の部分であり、"255"まで割り当てできる（サブネットマスク255.255.255.0の場合）
5. 2進数と10進数のテーブル

| ポジション | 2^n ビット | IPアドレス数 |
|:---------|:----:|:----------:|
| 1        | 2^0 | 1          |
| 2        | 2^1 | 2          |
| 3        | 2^2 | 4          |
| 4        | 2^3 | 8          |
| 5        | 2^4 | 16         |
| 6        | 2^5 | 32         |
| 7        | 2^6 | 64         |
| 8        | 2^7 | 128        |

##方法
128.153.0.0/22のネットワークアドレスを、四つのサブネットに分割する課題がありました。

A = 54ホスト
B = 66ホスト
C = 127ホスト
D = 30ホスト

###1. まず始めにホスト数の大きい順に並び替えて、それぞれ必要なビット数を考えていきます。

| ネットワーク名 | ホスト数    | 必要ビット    |
|:-----------|-----------:|:------------:|
| C          |        127 |     8     |
| B          |         66 |    7    |
| A          |         54 |     6     |
| D          |         30 |      5      |

Cのネットワークは127ホストありますが、最初と最後のIPアドレスはホストに使用出来ないので、7ビットをホストに割り当ててしまうと、割り当てられるIPアドレスの数が一つ足りなくなってしまうので、8ビットをホストに割り当てる必要がありました。

####2． 次にビット数やネットワーク部とホスト部の区別をわかりやすくするために、表を作っていきます。
IPアドレスを計算する筆算みたいなものだと考えています。

| ネットワーク名 | ネットワーク部   | ホスト部    | IPアドレス    | サブネットマスク |
|:-----------|---------------:|----------:|------------:|-------------:|
| C          | 128.153.000000 |           |             |              |
| B          | 128.153.000000 |           |             |              |
| A          | 128.153.000000 |           |             |              |
| D          | 128.153.000000 |           |             |              |

所与のIPアドレスの22ビットまではネットワーク部とのことで、それ以降の10ビットをホスト部に使用出来ます。ビット数がわかりやすいように、128.153以降のアドレスを2進数表記しています。

###3. IPアドレスの範囲を決めていきます。
最もホスト数の多いCのIPアドレスから考えていきます。

| ネットワーク名 | ネットワーク部   | ホスト部          | IPアドレス       | サブネットマスク      |
|:-----------|---------------:|----------------:|:--------------:|:------------------:|
| C          | 128.153.000000 | 00.**00000000** | 128.153.0.0    | /24　255.255.255.0 |
|            | 128.153.000000 | 00.**11111111** | 128.153.0.255  |                    |
| B          | 128.153.000000 |                 |                |                    |
| A          | 128.153.000000 |                 |                |                    |
| D          | 128.153.000000 |                 |                |                    |
* ホスト部とIPアドレス
 * ホスト部を指定する際に必要な8ビットを太文字表記しています。
 * 必要なビット数は8なので、ホスト部ですが"00."をネットワーク部に含めます。
 * "00000000"から"11111111"までがホスト部になり、そこから10進数表記にすると普段見るIPアドレスの形になります。
 * ちなみに、予備知識に記載した表を使うと、2進数から10進数への変換がやりやすいです。

* サブネットマスク
 * 所与のサブネットマスクは/22なので、本来のホスト部は10ビットですが、8ビットしか必要としていません。
 * 残りの2ビットをサブネットに割り当てるので、Cのサブネットマスクは/24になります。

こんな感じで他三つのIPアドレスの範囲も考えていきます。

| ネットワーク名 | ネットワーク部   | ホスト部           | IPアドレス       | サブネットマスク       |
|:-----------|:---------------:|:-----------------:|:--------------:|:---------------------:|
| C          | 128.153.000000 | 00. **00000000** | 128.153.0.0      | /24 - 255.255.255.0   |
|            | "              | 00. **11111111** | 128.153.0.255    | "                     |
| B          | 128.153.000000 | 01.0 **0000000** | 128.153.1.0      | /25 - 255.255.255.128 |
|            | "              | 01.0 **1111111** | 128.153.1.127    | "                     |
| A          | 128.153.000000 | 01.10 **000000** | 128.153.1.128    | /26 - 255.255.255.192 |
|            | "              | 01.10 **000000** | 128.153.1.191    | "                     |
| D          | 128.153.000000 | 01.110 **00000** | 128.153.1.192    | /27 - 255.255.255.224 |
|            | "              | 01.110 **11111** | 128.153.1.223    | "                     | 
* ホスト部とIPアドレス
 * Bのホスト部は7ビットのみ必要です。
 * Cのサブネットに"00."が使われたので、"01."に変更して、余ったホスト部を含めたら、"01.0"もネットワーク部になります。

* サブネットマスク
 * ネットワーク部のビット数が1ビット増えたので、サブネットマスクは/25になります。

ネットワーク部を繰り上げるコツとして、前回決めたネットワーク部の最後の桁が0だった場合、次のネットワークはその部分を1に変更すれば繰り上げることができます。

###終わり
もっと効率が良い方法があったり、間違えがあったりしたら是非、指摘してほしいです。