なぜIPアドレスとMACアドレスの両方が必要なのか？


今回は、なぜIPアドレスとMACアドレスの両方が通信において必要なのかについて、
以下の手順で詳細に説明していきたいと思います！
1. IPアドレスとMACアドレスとは何か？
1. IPアドレスしかなかったら何が困るのか？
1. MACアドレスしかなかったら何が困るのか？


# 1. IPアドレスとMACアドレスとは何か？
## IPアドレスとは？
IPアドレスとは、通信を行う際の住所を表すもので、機器が持つNIC(Network Interface Card)が持っているアドレスのことを言います。
OSI参照モデルでいうと、第３層にあたるネットワーク層で扱われます。
ネットワーク層では、送信元の場所から宛先まで(endtoend)の通信で使用されます。

IPアドレスの構成としては、以下のような第1～第4オクテットまでで表されています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/6b1fcc68-f5a8-2e1f-8479-a61a093a1c42.png)


IPアドレスは、32bitで定義されているもののため、世界に約42億個しかありません。現状の世界人口、スマホやその他インターネット製品の数を計算すればまったくもって足りないことが分かると思います。

そこで考え出されたのが、**グローバルIPアドレス**と**プライベートIPアドレス**と呼ばれるものになります。

### グローバルIPアドレスとは
グローバルIPアドレスとは、インターネットに接続する際には必要で、インターネット上で唯一(一意)であるIPアドレスのことを言います。

グローバルIPアドレスは、ISP(Internet Service Provider)から借りているもので、ほとんどが**動的IPアドレス**と呼ばれる割り当てられるIPアドレスがちょくちょく変わるものとなります。

理由は簡単で、以下の点を考慮した結果として基本的には動的なIPアドレスが割り当てられています。
・管理が簡単
・グローバルIPアドレスは枯渇しているため、使っていないときには別の人に割り当てたい

### プライベートIPアドレス
プライベートIPアドレスとは、会社内や家庭内のような、ある場所で限定的に使うネットワークに繋がらないIPアドレスのことを言います。
例えば、LAN(Local Area Network)のような話が出た場合は、間違いなくプライベートIPアドレスの話をしています。

グローバルIPアドレスとの大きな違いとしては、IPアドレスが**一意でなくてもいい**ということです。
例えば、別の会社とのネットワークとは、ネットワークを介して繋がることはないため、重複しても問題ないということです。

このプライベートIPアドレスですが、IPアドレスの中でも範囲が指定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/7b9ced5e-36c1-a03c-328a-173631e3cd35.png)


この範囲で定められた場所がプライベートIPアドレスとして扱うことのできる
範囲となります。
もしこの範囲以外をローカルIPアドレスとして使おうとしても使えないので注意が必要です。



## IPアドレスのクラス
上記表で、クラスというものが出てきましたね。
ではクラスを説明するためにもIPアドレスの構成から説明していきたいと思います！

### IPアドレスの構成とクラス
IPアドレスは、「どのネットワークに所属している」、「どのホスト」かという2つの情報を表しています。
例えば、192.168.8.81であれば、「192.168.8というネットワークに所属している」「81番のホスト」ということになります。
この時、「192.168.8」をIPアドレスの**ネットワーク部**、「81」をIPアドレスの**ホスト部**と呼びます。
では、このネットワーク部とホスト部の境目はどうやって決めているんだ？っという当然の疑問が生まれると思います！

ここでようやく出てくるのが**クラス**という概念です。
クラスとは、IPアドレスをネットワークとホストの数で分けたときにどこまでがネットワークでどこからがホストにあたる場所なのかを分けるために存在するもので、以下のような分け方をしています。

クラスA：第1オクテットがネットワーク部、第2~第4オクテットがホスト部
クラスB：第1~第2オクテットがネットワーク部、第3~第4オクテットがホスト部
クラスC：第1~第3オクテットがネットワーク部、第4オクテットがホスト部

〇グローバルIPアドレスのクラス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/91da340c-f55f-b501-015f-aa2e4ea1dcc6.png)


〇プライベートIPアドレスのクラス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/59e4ba41-9c87-47ab-c657-9a4d133eeaac.png)

これらのクラスで表されるIPアドレスを**クラスフルアドレス**と言います。


上記図を見ていただければわかる通り、
クラスAは分割できるネットワーク数は少ないが、1ネットワークに所属するホストの数は多くなります。
逆にクラスCは分割できるネットワーク数は多いですが、1ネットワークに所属できるホスト数は少なくなります。

### クラスフルアドレスの問題点とサブネット
クラスフルアドレスでは、ネットワークとホストで切り分けを行っていますが、皆さん思ったと思います。
切り分け雑過ぎないか？と
クラスAではホストの数が約1600万台つなげられるのに対し、クラスBでは、約65000台接続できるという状態です。
もっと細かく分けたいよねってなりますよね。

そこで考え出されたのが、**サブネット**や**CIDR表記**という考え方です。

サブネットは、クラスの上にできた概念で、IPアドレスを2進数表記として、ネットワーク部＋サブネット部として定義するネットワーク部のことです。
例えばクラスAのIPアドレスのネットワークをもっと切り分けたいという風に考えた場合に
以下のようにネットワークを分割します。
※ネットマスク(サブネットマスク)は、1の場所がネットワーク部で0がホスト部を表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/5ae6bf15-5390-e2db-990b-b46a6d3e58c4.png)


ただし、上記図のような書き方だと見にくいため以下のような左から何ビットがネットワーク部かを10進数で表すCIDR表記が使われています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/291c0f55-3c06-3c3e-2a74-a38fb8bd88aa.png)



以上がIPアドレスの基礎知識となります。
次にMACアドレスについて説明します。

## MACアドレスとは
MACアドレスは、TCP/IPにおけるデータリンク層での通信で、物理的に隣接するノードと正確に通信するためのものです。
つまり、物理的につながっている者同士の中でどの宛先に送るのかを識別し、正確に通信するために必要なものがMACアドレスとなります。
MACアドレスは以下のように構成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2005551/a09a92cc-6dae-94c8-6129-c94337e691e2.png)

ここまででIPアドレスとMACアドレスとは何かについては終了です。
次からは、それぞれの技術がなかった場合に何が困るのかについて説明していきたいと思います。

# 2. IPアドレスしか無かったら何が困るのか？
IPアドレスしかない場合は簡単です。
IPアドレスはendtoendの通信であり、どの経路を通って通信をするのかを論理的に決めているだけなんですね。
実際に通信しているわけではないわけです。つまり、物理的には通信ができなくなります。


# 3. MACアドレスしか無かったら何が困るのか？
MACアドレスのみで通信を行う場合は、ネットワークを成立させることが困難になります。

### MACアドレスで間接的につながったサーバーにアクセスするのは困難
まず、MACアドレスを扱うデータリンク層ですが、これは物理的に隣接するノードと正確に通信するためのもので、その際に指定するのがMACアドレスです。
ただ、これが、物理的につながっていない別ネットワークにあるサーバーに接続する場合には、**間接的にしか繋がっていません**よね？

すると、データリンク層では、**どういう経路で通信すれば目的のサーバーにたどり着けるのかわからない**し、物理的につながったもの同士(LAN内)しか考えられていないので、通信できません。

もし無理やり通信させようとするなら、すべてのノードにすべてのMACアドレスを登録する必要があるので、現実的に不可能です。

また、MACアドレスでは、IPアドレスのようにネットワーク部やホスト部といった概念が存在しません。つまり、**ネットワークの分割やそこに繋がるホストの識別などができない**わけです。

### ネットワーク分割がないとセキュリティとトラブルシューティングの面で厳しい
ネットワークの分割はいらないのでは？という疑問が出たかもしれません。

ネットワークを分割しなかった場合、どのアクセスを拒否してどのアクセスを許可するなどのセキュリティを機器ごとに行わなければならなくなります。

とても手間ですよね...

さらに、ネットワークで問題が発生した際のトラブルシューティングもネットワークがグループ化されていないため、どこで発生した問題か整理できず、原因究明が困難になります。

### LAN、WANという考え方がなくなり、セキュリティ的に厳しい
LAN、WANという考え方はIPアドレスがあるから生まれたものです。
グローバルIPアドレスとプライベートIPアドレスがある理由は、IPアドレスの枯渇もですが、セキュリティ上、ネットに直接つながっているとグローバルIPアドレスあてに攻撃される可能性がある。

しかも、MACアドレスは、製造時に割り当てるものかつ、今回のようなネットワークの分割ができない場合、可変というわけにもいきません。



上記3点の結果、IPアドレスとMACアドレスは両者必要という結論に至ることができると思います！