【初心者向け】ちゃんと理解するIPアドレス

## この記事に書いてあること
理解しておきたいIPアドレスの基礎的なことについてまとめました。

## 記事を書いた経緯
クラウド関連のことを学習していたらネットワークやらIPアドレスやら出てきて、理解ができなかったので改めて基礎的なところを理解するために調べました。

## IPアドレスとはなにか？
わたしたちは普段、ネットをする際にパソコンからブラウザでURLなどを叩き、必要な情報を手に入れています。

これは自分のパソコンと必要な情報が保存されているサーバーという機器がネットワーク経由で繋がっていないと実現できません。

では繋がるためには何が必要でしょうか？

物理的な各機器や光ファイバー、海底ケーブルなどはもちろんですが、通信する機器同士が「**どこ**」にあるのかわからないと繋げることはできません。

この「**どこ**」の役割をするものが**IPアドレス**です。

パソコンでもルータでもサーバーでも、それぞれの機器にIPアドレスが割り当てることでネットワーク通信ができるようになります。

![img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/9c0cc1e3-3bfe-6357-1231-5a497b5bc06c.jpeg)


つまり、機器同士がネットワーク通信を行う場合は、通信元の機器（クライアント）が通信先の機器（サーバー）のIPアドレスを指定し、それを受けたサーバーが同じようにクライアントのIPアドレス宛に情報を返すことになります。

![グループ 4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/7881cede-d2b3-2078-ed96-31c050035d14.jpeg)


なお、ネットワーク通信をするための主要な規約を「インターネットプロトコル」といいます。IPアドレスのIPは「インターネットプロトコル」の意味です。

ここまでの話をまとめると、

**IPアドレスとはインターネットプロトコルで通信をするときに各機器に割り当てられる住所のようなもの**

と押さえておけば大丈夫かと思います。

## IPアドレスはどうやって表現される？
IPアドレスは0から255までの数値を4つ組み合わせて表現されます。
例えば下記のような感じです。

```
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
```

なお、この規約はIPv4と言います。
**IPv4の組み合わせは43億通りほどとなり、無限ではありません。**

## IPv4の枯渇について
まず前提としてIPアドレスは「アドレスポリシー」と呼ばれる管理方針に基づき、世界的に管理が行われています。

「世界的に」というと抽象的ですが、**管理組織はいくつかの階層になっていて、地域毎にIPアドレスを管理・分配**しています。

![ccbce6e6-8db1-42aa-83c4-c62fa5acb4ce.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/5fd3c0d2-b01a-57dd-e0a1-b4b45be70ce1.jpeg)

>IPアドレスの管理の構造図
引用元：一般社団法人ネットワークインフォメーションセンター
[https://www.nic.ad.jp/ja/ip/admin-basic.html](https://www.nic.ad.jp/ja/ip/admin-basic.html)

1番トップの階層に位置するのがIANAという組織で、アジア太平洋地域・日本国内の管理を行なっているのがAPNIC/JPNICという組織です。

**IANA (ICANN)の持つIPv4アドレスは2011年2月3日に、 APNIC/JPNICにおいては2011年4月15日に新規在庫が無くなりました。**

IPv4アドレスの在庫が無くなっても、 現在利用しているインターネットが利用できなくなるわけではありませんが、新しいIPv4アドレスの分配ができなくなるため、 今後もさまざまな局面でインターネットを活用しようとする人々が世界中に大勢いるにも関わらず、 「IPv4」というプロトコルでのインターネットの拡大・発展ができなくなります。

この問題に対応するための解決策として以下の3つがあるとされています。

1. 分配済みのIPv4アドレスについて、効率的な利用をさらに進める
2. NAT技術を利用し、グローバルアドレスを使わずに新たなホストを収容する
3. IPv6を導入し、新たなホストを収容する

1と2については例えば、使わなくなった返却されたIPアドレスを再割当などで使い回したり、特に利用が増えているスマホなどにはキャリアから払い出されているIPをプライベートアドレスにして、NATを利かせたりなどがあります。
※NATについては後述

では3のIPv6はどうでしょうか？

## IPv6について
IPv4と比較したIPv6の特徴は**ほぼ無限大のIPアドレス数**にあります。（ほかにもセキュリティ面などで違いあるようですが割愛）

IPv4（32ビット/ 2^32通り）とは異なる方法（128ビット / 2^128通り）でIPアドレスを表すため、実際の数値に置き換えると、、、

『340,282,366,920,938,463,463,374,607,431,768,211,456』

約340澗（かん）通りとなるので、もうよくわからないくらい多いわけです。

IPv6への移行は、コストや運用ノウハウの観点が問題点とされていたようですが、例えばフレッツのサービスなどでも利用されていて、IPv6 PPPoE とか IPv6 IPoE とかで使われてたりすることがあります。

IPv4 の接続網が混んでいることで遅いところを、IPv6の接続網を使うことでネットワークを高速提供できたりするわけです。

https://flets.com/next/ipv6/

また、ISP側だけでなく、いわゆる個人宅に置くブロードバンドルーター側の対応とかも必要ですが、現在販売されているほとんどのブロードバンドルーターでは対応しているので、普通に使える状態です。

さらに、いわゆる Web サーバ側についてもそのまま IPv6で接続できるようになって来ており、例えばさくらインターネットなどのレンタルサーバは IPv6で接続できます。

https://help.sakura.ad.jp/domain/2142/

このように、わたしたちのIPアドレス環境は直実に新しいものへと変化していっています。

## ドメインとDNS
いままでIPアドレスとはなにかという説明を読んできて

**「ネットする時に、数字を羅列したIPアドレスなんてものは指定したことがないんだけど…」**

と疑問を持つ人もいると思います。

実際にわたしたちが使っているのは、アルファベットのURLである「ドメイン」と呼ばれるものです。

**このドメインをDNSという技術を使って、人間が使いやすいものからコンピュータが使いやすいIPアドレスに変換しているわけです。**

だから、私たちはIPアドレスを指定するといったことはしなくても良いことになります。

なお、DNSの詳しい仕組みは記事の中核からずれるので割愛します。
DNSについて興味がある方は下記の記事がわかりやすかったのでおすすめです。

https://zenn.dev/naoki_mochizuki/articles/d0d9fd2459250baeb37d

## グローバルIPアドレスとローカルIPアドレス
IPアドレスはグローバルIPアドレスとローカルIPアドレスにわけることができます。

グローバルIPアドレスとは、**インターネットで使用されるIPアドレス**のことで、プロバイダーから付与されるのが一般的です。

一方で、ローカルIPアドレスは**LAN内で使用するIPアドレス**のことで、LANの管理者が自由に設定可能です。（といっても普通は自動的に割り当てられることが多いです）


> ・インターネットは世界中の機器が繋がっているネットワーク網
> ・LANとは家庭内とか会社内だけでつながっているネットワーク網

![36215803-2ce2-4555-8f4a-3d0ce93ec61c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/02db836e-2807-c710-3068-7d640a15a2a1.png)

あくまで上記はイメージ図ですが、家の中がLANというネットワーク。LANはルータやモデムという機器を通して、インターネットに繋がっています。

## LANが違えばIPアドレスを重複して使うことができる
IPアドレスは基本的に世界に一つでないといけません。
同じIPアドレスが複数存在していたら、欲しい情報に辿り着けなくなるからです。

しかしこれはあくまで、同じネットワーク内で重複して使うことができないという意味です。

**両方のLANが、例えインターネットを介して接続していても、LANが別ネットワークであれば、ローカルIPアドレスの重複は問題ありません。**

## なぜならインターネットに直接接続する機器（ルータ）にはグローバルIPアドレスを割り当てられるから
インターネットと繋がっているルータにはグローバルIPアドレスが割り当てられています。

と同時にルータはローカルIPアドレスも割り当てられていて、**内部でグローバルIPアドレスとローカルIPアドレスの変換を行なっています**。

![3762b27a-ea34-4bd5-ac86-1e31c5885d59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/437f9374-41cc-68d7-aeb2-f126a021c50a.png)


この変換を行うことで、インターネットとはグローバルIPアドレスで通信を行い、LAN内ではローカルIPアドレスで通信を行うことができるようになっています。

具体的な流れを表すと下記のようになります。（ほんとはもっと複雑です）

- LAN内のパソコンからブラウザでYahooのURL入力
- パソコンのローカルIPアドレスをルータへ転送
- ルータは受け取ったらパソコンのローカルIPアドレスをグローバルIPアドレスに変換
- YahooのグローバルIPと通信
- Yahooは受け取った情報をもとに処理を行い結果をルータのグローバルIPアドレス宛に返信
- ルータは情報を受け取ったら、グローバルIPアドレスをローカルIPアドレスに変換
- パソコンへ結果を渡す

ちなみにIPアドレスの変換をする技術をNATといい、それをベースにした1つのグローバルIPアドレスと複数のローカルIPアドレス変換を行う技術をNAPTといいます。

## ローカルIPアドレスを自由に決められることの問題点
先ほど、ローカルIPアドレスは管理者が自由に設定できると説明しました。

しかし、ローカルIPアドレスを自由に決められるとなると、LANの中からみた時にIPアドレスの重複が起こる場合があります。

![9afa38dd-8737-4dfc-ad2b-15c4cad47e07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/69975629-efbc-a256-0eed-f415c0f9dac7.png)


これを解決するため、グローバルIPアドレスとして使ってよいIPアドレスと、ローカルIPアドレスとして使って良いIPアドレスの範囲がそれぞれ決まっています。

範囲は[**こちら**](https://www.infraexpert.com/study/ip5.html)で確認できます。

なので、LANの中ではローカルIPアドレスの範囲内でIPアドレスを使うことが必要になりますが、これはDHCPという技術が自動でやってくれることが多いようです。

## おわりに
IPアドレスひとつとっても、なかなかのボリュームある学習範囲だなぁと。

しかしながら、サーバー通信やクラウドなどを理解するうえでは、あらためてIPアドレスの基礎理解があったほうが学習が捗るなと思います。

また、[日本ネットワークインフォメーションセンター - JPNIC](https://www.nic.ad.jp/ja/)など信頼度の高い情報源に触れることも重要だと感じました。

わたし自身、まだまだ未熟なエンジニアですので記事内容でご指摘箇所などあればぜひご連絡ください。

## 参考サイト
- [ドキュメントで例に使えるIPアドレスまとめ【IPv4編】](https://linuxfan.info/document-ipv4-address)
- [IP address - Global IP address / Private IP address](https://www.infraexpert.com/study/ip5.html)
- [日本ネットワークインフォメーションセンター - JPNIC](https://www.nic.ad.jp/ja/)