portとIPアドレスの割り振り方について

## はじめに
Aさん：「俺たちは、雰囲気でDokerを触っている～♪」
今回もインフラ関係の記事を書いていきます。
ポートについての理解とVLSMについて理解して頂こうと思います。
＊Dockerの知識が必要になります

## 目次
1. ポートについて
2. IPアドレスの振り分け方を考える

## 1. portについて
皆さんは、portについて理解していますか？
Dockerのportを指定ときに、何気なく:8080を指定していませんか？
portが競合する？なにそれ、美味しいの状態になっていませんか？
今回は、上記のような状態な人達の悩みを解決しようと思います。

#### Docker portを理解しよう
ポートとは、<font color='red'>``` 通信の出入口のことです ```</font>。
「webはポート80」、「メールはポート25」などの言葉を聞いたことあると思います。（知っておいてくれ...）
Apacheは、サーバの決められたポート（ポート80）で、サイトにアクセスしてくるのを待ちます。閲覧者がアクセスしてきたら、要求に従ってwebサイトのページを渡しますが、コンテナの中のApacheは、どれだけ待機しても、直接外部と繋がりません。サイトにアクセスをした閲覧者は、webページにたどり着けません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625910/d0edab3e-a8c9-78a7-9822-b8ce9ab3e7f6.png)


そこで、代わりに母体となる物理的なマシンに、閲覧者からの要求を受け取って貰って、それをApacheに伝えてもらいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625910/71e62761-9737-76cb-ec2a-348d012d52ef.png)


具体的には、ホストのポート8080（他のソフトウェアと競合してなければなんでもいい）と、コンテナのポート80を結びつけます。
複数のwebサーバを並列に動作させたい場合もあると思います。その場合は、ホストのポート番号を同じにしてしまうとどのコンテナと結びついているのわからなくなります。なので、コンテナAとホストのポート8080、コンテナBとホストのポート8081...のようにホストのポート番号をずらします。
もし、ホストのポートを同じ8080で設定するとコンフリクトが起こり、どちらかのコンテナが通信ができなくなります。

## 2. IPアドレスの割り振り方
#### IPアドレスについての復習
前回、サブネットマスクについて学んだと思います。
サブネットマスクを理解することで、サブネットの使用できるIPアドレスの数を理解できたと思います。IPアドレスの構造は、ネットワーク部(どこの)＋サブネット部（サブネットの）＋ホスト部（住所）でしたね。
そして、IPアドレスは、クラスのよって使用できるホストの数が変化しましたね。

ここまで、学習してきた皆さんは、疑問があるはずです。
サブネットを作成するときは、適切な数IPアドレスを持っているサブネットを作成したほうがスマートだよな？（なんとなく理解していてくれ...）
```:条件
例えば、社内ネットワークの設計をするときに、全体でIPアドレス126個確保しています。
財務部では、IPアドレスが6個必要。
開発部では、IPアドレスが14個必要。
法務部では、IPアドレスが30個必要。
経理部では、IPアドレスが62個必要。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625910/ecdeb064-a13e-e545-c812-f1d696da3abd.png)


上記の条件の時に、/28のサブネットを財務部に割り振りのは、非効率ですよね？
なぜなら、/24のサブネットでは、IPアドレスを16個持っているからです。
16-6=10個もIPアドレスが余ってしまいます。

上記に納得した人は、予約アドレスの存在を忘れています。
サブネットには、ホスト部がオール0のネットワークアドレスと、ホストオール１のブロードキャストが存在していましたね。

これらを考慮すると、余っているIPアドレスの数は、
16-6-2=8個になります。

感のいい人は、気づくと思いますが、上記の必要なIPアドレスの数は、すべてサブネットマスクの最大値から予約アドレスを事前に引いています。更にサブネットマスクは、以下のような法則性まであります。
```
財務部では、IPアドレスが6個必要。 /29 -> 8個-2個(予約アドレス)　
　　　　　　　　　　　　　　　　　　　　　　↑ ÷2　↓ x2　
開発部では、IPアドレスが14個必要。/28 -> 16個-2個(予約アドレス)
                      　　　　　　　　　　↑ ÷2　↓ x2
法務部では、IPアドレスが30個必要。/27 -> 32個-2個(予約アドレス)
                      　　　　　　　　　　↑ ÷2　↓ x2
経理部では、IPアドレスが62個必要。/26 -> 64個-2個(予約アドレス)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625910/439d98eb-4c13-660b-9a67-b09247ecaaa7.png)



#### VLSMについて
実は、上記の特性を利用した効率的なIPアドレスの割り振り方が存在します。
それが、VLSM（variable length subnet mask）です。日本語に直すと、可変長サブネットマスクです。
本当に、そのままの意味です。IPアドレスが必要な分だけのサブネットを効率的に割り振ろうという思想です。

例の条件を思い出してください。
```:条件
例えば、社内ネットワークの設計をするときに、全体でIPアドレス126個確保しています。
財務部では、IPアドレスが6個必要。
開発部では、IPアドレスが14個必要。
法務部では、IPアドレスが30個必要。
経理部では、IPアドレスが62個必要。
```
全体で確保しているIPアドレスの数が、126個です。つまり、クラスCのアドレスということになります。
更に、必要なのは、126個のIPアドレスでしたね。
```
/29 -> 8個-2個(予約アドレス)　
　　　↑ ÷2　↓ x2　
/28 -> 16個-2個(予約アドレス)
     ↑ ÷2　↓ x2
/27 -> 32個-2個(予約アドレス)
     ↑ ÷2　↓ x2
/26 -> 64個-2個(予約アドレス)
     ↑ ÷2　↓ x2
/25 -> 128個-2個(予約アドレス)
```

上記からわかることは、一番大きなネットワークは、/25でピッタリです！！
更に、経理部では、IPアドレスが62個必要です。つまり、/25の126個の半分の/26でピッタリですね！！残りもすべて、半分になっています。なので、図で理解すると以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625910/a0cf3204-0058-67ac-6aed-67b509f39fb8.png)

## まとめ
今回学んだ内容を基に、以下のポイントを意識してみましょう。　

Dockerではポート設定を丁寧に管理し、競合を防ぐ。
ネットワーク設計では、必要なIPアドレス数に合わせて効率的にサブネットを割り振る。
VLSMを活用することで、IPアドレスを無駄にせず柔軟なネットワーク設計が可能になります。日常のインフラ構築の場面で、ぜひ実践してみてください！