ネットワーク・インターフェースの理解：ループバック、ローカルIP、パブリックIP

[![表紙](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/cae3dc6e-4eb0-f1bc-0fcd-b3b19af651cc.png)](https://leapcell.io/?lc_t=q_netinterface)

多くのコンピュータユーザーは、`localhost` や `127.0.0.1`、または直接ローカル IP を入力して使用する場面に遭遇したことがあるでしょう。一見すると、これらはすべてローカルマシンにアクセスできるように見えますが、なぜ 3 種類の形式が存在するのでしょうか？また、それぞれにどのような違いがあるのでしょうか？見た目は単純ですが、実際には大きな違いがあります。

さらに、公的ネットワーク（インターネット）とプライベートネットワーク（ローカルネットワーク）、ネットワークインターフェースカード（NIC）と IP アドレスの関係についても混乱することがあるかもしれません。以下で、それらの疑問を一つずつ解説します。

## ローカル IP アドレス

コンピュータのマザーボードには複数のネットワークインターフェースカード（NIC）が組み込まれており、一般的に以下の種類が存在します。

### 仮想ネットワークインターフェース（ループバック）

注意：これは物理的なネットワークカードではなく、仮想的なものです。これはローカルループバックアドレス（またはインターフェース）と呼ばれ、通常 `127.0.0.1` がループバックアドレスとして設定されています。

### 有線ネットワークインターフェース（イーサネット）

これはイーサネット（LAN）で使用されるもので、一般的に「ネットワークカード」と言えばこれを指します。有線接続で、LAN ケーブルを挿入することで使用します。

### 無線ネットワークインターフェース（WLAN）

無線 LAN（Wi-Fi）を使用するためのネットワークカードで、ノート PC には通常これが内蔵されています。イーサネットのように物理的なケーブルを必要とせず、無線技術を利用して通信を行います。

これらのネットワークインターフェースにはそれぞれローカル IP アドレスが割り当てられます。

## `localhost` は特別なドメイン名

まず `localhost` は IP アドレスではなく、特別なドメイン名（サフィックスなし）です。デフォルトではローカル IP（すなわち `127.0.0.1`）に解決され、本機の `hosts` ファイルによって管理されています。もし希望するなら、`localhost` を任意のパブリック IP アドレスにマッピングすることも可能です。

デフォルトでは、以下のように設定されています。

- **IPv4:** `127.0.0.1`
- **IPv6:** `[::1]`

`hosts` ファイルの場所:

```
C:\Windows\System32\drivers\etc
```

## `127.0.0.1` はローカル専用のプライベート IP

`127.0.0.1` はプライベート IP の一種で、ローカルループバックアドレス（loopback address）として使用されます。本質的には仮想ネットワークインターフェース（ループバックインターフェース）にバインドされた IP アドレスです。

### ループバックアドレスとは？

ループバックアドレスとは、ホストが自分自身に対して通信を行うための特別なアドレスです。たとえば、同じホスト内で動作する 2 つのサービスが通信する場合、ループバックアドレスを使用すると、TCP/IP スタックの下層（リンク層や物理層、イーサネット）を経由せず、直接ネットワーク層とトランスポート層で処理されます。

IP ネットワークの `127.x.x.x` は、ネットワークアドレスではなく、すべてループバック用に予約されているため、生成された IP パケットは外部のネットワークインターフェースに到達することはなく、ホスト内で処理されます。

したがって、`127.0.0.1` は一般的にローカルの TCP/IP プロトコルスタックをテストするために使用されます。もし `ping 127.0.0.1` が成功すれば、ネットワークカードや IP プロトコルのインストールに問題がないことを確認できます（このテストはインターネット接続の有無とは無関係です）。

実際には、IPv4 では `127.0.0.0/8` の範囲全体がループバック用に予約されています。つまり、`127.0.0.1` 以外のアドレスも同様にループバック通信に利用できます。また、`0.0.0.0` というアドレスもよく混同されますが、`0.0.0.0` は厳密にはローカルアドレスを指し、`127.0.0.1` とは用途が異なります。

例えば、ある PC に 2 枚のネットワークカードがあり、一方がパブリック IP を使用してインターネットに接続し、もう一方がプライベート IP でローカルネットワークに接続しているとします。この PC で Web サーバーを稼働させ、どちらのネットワークからもアクセス可能にしたい場合、サーバーのバインドアドレスを `0.0.0.0` に設定すれば、すべての利用可能なネットワークインターフェースでリクエストを受け付けることができます。

## `localhost`、ローカル IP、`127.0.0.1` の違い

- **ネットワーク要件の違い**

  - `localhost` と `127.0.0.1` は、ネットワーク接続がなくても使用できます。インターネットに接続されていない環境でも、これらにアクセスすればローカルマシンを見つけることができます。
  - ローカル IP のうち、有線ネットワーク IP や無線ネットワーク IP は、ネットワークに接続されている場合にのみ割り当てられ、アクセス可能になります。これらは、外部に公開される IP アドレスです。

- **アクセス対象の違い**

  - `localhost` はローカルマシンへのアクセス
  - `127.0.0.1` もローカルマシンへのアクセス
  - **ローカル IP** は、ローカルマシンまたは外部のデバイスからのアクセスが可能

- **ドメインと IP アドレスの違い**

  - `localhost` はドメイン名であり、デフォルトで `127.0.0.1` に解決されます。
  - ローカル IP は、ネットワークインターフェース（物理 NIC）にバインドされ、外部デバイスからのアクセスを許可します。

- **LAN 内でのアクセス**
  - **同じサブネット（LAN 内の同じネットワークセグメント）** にある他の PC は、ローカル IP を使用して対象の PC にアクセスできます（プライベート IP については後述します）。

## ネットワークインターフェースのアドレス & IP アドレス

### ネットワークインターフェースのアドレス（MAC アドレス）

ネットワークインターフェースのアドレス（MAC アドレス）は、**メディアアクセス制御（Media Access Control）** の略で、物理アドレスまたはハードウェアアドレスとも呼ばれます。これは、ネットワークデバイスの識別のために使用されます。

OSI 参照モデルにおいて、

- 第 3 層（ネットワーク層）が **IP アドレス** を担当し、
- 第 2 層（データリンク層）が **MAC アドレス** を担当します。

したがって、1 つのネットワークインターフェースには 1 つの MAC アドレスが割り当てられますが、ネットワークの接続先ごとに異なる **IP アドレス** が設定されることがあります。

MAC アドレスはネットワークカードに組み込まれており、通常変更できず、グローバルに一意であることが保証されています。これを人間の身分証明書の番号のように考えることもできます。

### IP アドレス

**IP アドレス（Internet Protocol Address）** は、インターネット上のデバイスを識別するためのアドレスです。これは、インターネット上のネットワークとホストに一意のロジカルアドレスを割り当て、物理アドレス（MAC アドレス）の違いを抽象化するために使用されます。

### まとめ

簡単に言えば、

- **MAC アドレス** はネットワークインターフェースに固有の物理アドレスであり、通常変更できない。
- **IP アドレス** は、ネットワークによって割り当てられるソフトアドレスであり、変更が可能。

補足：Windows では、`ipconfig /all` コマンドを使用して、IP アドレスと MAC アドレスを確認できます。

## パブリック IP（公的 IP）とプライベート IP（私的 IP）

私たちは、`127.0.0.1` を使用してローカルマシンにアクセスし、プライベート IP を使用して LAN 内の他のデバイスにアクセスし、パブリック IP を使用してインターネット上の他のデバイスにアクセスします。

### パブリック IP アドレス（公的 IP）

企業レベルのネットワークを構築する際、インターネットサービスプロバイダー（ISP）からインターネット接続（ブロードバンド）を申請します。ISP は、私たちに 1 つまたは複数の IP アドレスを割り当てます。これらの IP アドレスは、企業内のデバイスがインターネットにアクセスするために使用されます。

**パブリックアドレス（Public Address）** は、**Internet Network Information Center（INIC、インターネット情報センター）** によって管理されています。これらの IP アドレスは、INIC に登録された組織に割り当てられ、インターネット上で直接アクセスできます。

### プライベート IP アドレス（私的 IP）

企業や家庭内でローカルネットワーク（LAN）を構築する際、プライベート IP が使用されます。

**プライベートアドレス（Private Address）** は、非登録アドレスであり、組織内でのみ使用されるため、インターネット上には表示されません。プライベート IP からのトラフィックは、ISP のルーターでブロックされるため、直接インターネットに接続することはできません。

企業内の PC がインターネットにアクセスするためには、**NAT（Network Address Translation）** を使用して、プライベート IP をパブリック IP に変換する必要があります。

### パブリックネットワークとプライベートネットワークのアクセス関係

- プライベートネットワークからパブリックネットワーク（インターネット）へアクセスする場合、**SNAT（Source Network Address Translation）** を適用する必要があります。
- パブリックネットワークからプライベートネットワークへのアクセスは、**DNAT（Destination Network Address Translation）** や **VPN（Virtual Private Network）** などの技術を利用する必要があります。
- 2 つの異なるプライベートネットワーク間で通信する場合も、VPN を利用することで接続が可能になります。

### インターネット（外部ネットワーク）とプライベートネットワーク（内部ネットワーク）

企業内部のネットワークは一般に「プライベートネットワーク」と呼ばれ、企業外部のネットワークを「外部ネットワーク」と呼びます。しかし、外部ネットワークには ISP が提供するパブリックネットワーク（インターネット）だけでなく、他の企業や家庭のネットワーク（プライベートネットワーク）も含まれる場合があります。

そのため、「外部ネットワーク」と「パブリックネットワーク（インターネット）」は完全に同じ意味ではありませんが、一般的には区別せずに使われることが多いです。

## すべての IP アドレスの範囲

IP アドレスは 5 つのクラスに分けられており、それぞれの範囲は以下のとおりです：

- **A クラス IP:** `1.0.0.1 ～ 127.255.255.254`
- **B クラス IP:** `128.0.0.1 ～ 191.255.255.254`
- **C クラス IP:** `192.0.0.1 ～ 223.255.255.254`
- **D クラス IP:** `224.0.0.0 ～ 239.255.255.255`（マルチキャスト用）
- **E クラス IP:** `240.0.0.0 ～ 255.255.255.255`（将来の用途のために予約）

このうち、**A・B・C クラスの IP アドレス** はインターネットやユーザーで使用可能ですが、**D クラス** はマルチキャスト通信に使用され、**E クラス** は将来の用途のために予約されています。

### 特殊な IP アドレス

- **`0.0.0.0`** → 現在のホストを指す
- **`255.255.255.255`** → 現在のサブネットのブロードキャストアドレス
- **`127.0.0.1 ～ 127.255.255.255`** → ループバックテスト専用
- **E クラス IP (`11110` で始まるアドレス)** → 研究・将来用途のために予約
- **`ネットワークIDの最初の6ビットがすべて0`** → ローカルネットワークを表す

### パブリック IP アドレスの範囲

IP アドレスの A・B・C クラスのうち、以下の範囲は**パブリック IP** として利用可能です。

#### A クラスのパブリック IP

- `1.0.0.0 ～ 9.255.255.255`
- `11.0.0.0 ～ 126.255.255.255`

#### B クラスのパブリック IP

- `128.0.0.0 ～ 172.15.255.255`
- `172.32.0.0 ～ 191.255.255.255`

#### C クラスのパブリック IP

- `192.0.0.0 ～ 192.168.255.255`
- `192.169.0.0 ～ 223.255.255.255`

### プライベート IP アドレスの範囲

プライベート IP アドレスとして予約されている範囲は以下のとおりです。

- **A クラス:** `10.0.0.0 ～ 10.255.255.255`（`10.0.0.0/8`）
- **B クラス:** `172.16.0.0 ～ 172.31.255.255`（`172.16.0.0/12`）
- **C クラス:** `192.168.0.0 ～ 192.168.255.255`（`192.168.0.0/16`）

これらのアドレスは、インターネット上ではルーティングされず、ISP はプライベート IP アドレスのトラフィックをブロックします。そのため、直接インターネットに接続することはできません。しかし、**NAT 技術** を利用すれば、プライベート IP アドレスをパブリック IP アドレスに変換してインターネットと通信することが可能です。

また、プリンターや管理用ハブなど、インターネット接続を必要としないデバイスは、プライベート IP を使用することで IP アドレスの節約が可能です。

## ネットワークセグメント（サブネット）とローカルネットワーク（LAN）

### ネットワークセグメント（サブネット）とは？

**ネットワークセグメント（サブネット）** とは、同じ物理層のネットワークデバイス（例：ハブ、スイッチ）によって直接通信可能な範囲のことを指します。つまり、同じネットワークセグメント内のコンピュータは、ルーターを介さずに直接通信することができます。

### ローカルネットワーク（LAN）とは？

**LAN（Local Area Network）** は、スイッチなどのネットワーク機器を使用して構成されるネットワーク全体を指します。通常、LAN 内のすべてのデバイスは同じサブネット内にあり、直接通信できます。しかし、**VLAN（仮想 LAN）** を利用すれば、1 つの LAN を複数のネットワークセグメントに分割することも可能です。

### 同じサブネット内のデバイスのみが直接通信可能

ネットワーク内のデバイスが同じサブネットに属している場合、直接通信が可能です。したがって、1 つの LAN 内にネットワークセグメントが 1 つしかない場合、**LAN ＝ ネットワークセグメント** となります。

## 異なるネットワークセグメントの判別方法

### IP アドレスとサブネットマスクを使用した判別

サブネットマスクを利用すると、2 つの IP アドレスが同じネットワークセグメントに属しているかどうかを判別できます。

#### 例 1

以下の 2 つの IP アドレスを考えます。

- **IP アドレス 1:** `192.168.1.1`（サブネットマスク：`255.255.255.0`）
- **IP アドレス 2:** `192.168.1.2`（サブネットマスク：`255.255.255.0`）

サブネットマスク `255.255.255.0` を適用すると、**両方とも `192.168.1.0/24` のネットワークセグメントに属している** ため、直接通信できます。

#### 例 2

- **IP アドレス 1:** `192.168.1.1`（サブネットマスク：`255.255.255.0`）
- **IP アドレス 2:** `192.168.1.2`（サブネットマスク：`255.255.0.0`）

一見すると似ていますが、サブネットマスクが異なるため、同じネットワークセグメントには属していません。

- `192.168.1.1 & 255.255.255.0` → **`192.168.1.0/24`**
- `192.168.1.2 & 255.255.0.0` → **`192.168.0.0/16`**

このため、異なるネットワークセグメントに属していると判断できます。

#### 例 3

- **IP アドレス 1:** `192.168.1.1`（サブネットマスク：`255.255.252.0`）
- **IP アドレス 2:** `192.168.2.1`（サブネットマスク：`255.255.252.0`）

サブネットマスク `255.255.252.0` を適用すると、どちらも **`192.168.0.0/22` のネットワークセグメントに属している** ため、同じネットワークセグメント内で直接通信が可能です。

---

### [私たちはLeapcell、バックエンド・プロジェクトのホスティングの最適解です。](https://leapcell.io/?lc_t=q_netinterface)

[![Leapcell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/29d2572e-18d2-cb49-f55b-0b00e387cf4b.png)](https://leapcell.io/?lc_t=q_netinterface)

[Leapcell](https://leapcell.io/?lc_t=q_netinterface)は、Webホスティング、非同期タスク、Redis向けの次世代サーバーレスプラットフォームです：

**複数言語サポート**

- Node.js、Python、Go、Rustで開発できます。

**無制限のプロジェクトデプロイ**

- 使用量に応じて料金を支払い、リクエストがなければ料金は発生しません。

**比類のないコスト効率**

- 使用量に応じた支払い、アイドル時間は課金されません。
- 例: $25で6.94Mリクエスト、平均応答時間60ms。

**洗練された開発者体験**

- 直感的なUIで簡単に設定できます。
- 完全自動化されたCI/CDパイプラインとGitOps統合。
- 実行可能なインサイトのためのリアルタイムのメトリクスとログ。

**簡単なスケーラビリティと高パフォーマンス**

- 高い同時実行性を容易に処理するためのオートスケーリング。
- ゼロ運用オーバーヘッド — 構築に集中できます。

[ドキュメントで詳細を確認！](https://docs.leapcell.io/)

[![Try Leapcell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/56fadb8f-bd3a-da8e-5b2f-802ec724a43a.png)](https://leapcell.io/?lc_t=q_netinterface)

Xでフォローする：[@LeapcellHQ](https://x.com/LeapcellHQ)

---

[ブログでこの記事を読む](https://leapcell.io/blog/a-deep-dive-into-network-interfaces)