IPv4(Internet Protocol version 4)
概要
IPv4(Internet Protocol version 4) は、ネットワーク上の機器にアドレスを割り当てるための 32 ビットのプロトコルです。RFC 791(1981 年)で定義され、192.168.1.1 のようにドット区切りの 10 進数 4 組(オクテット)で表記します。32 ビットのアドレス空間は 約 43 億個(2^32 = 4,294,967,296)のアドレスを提供しますが、インターネット接続機器の爆発的な増加により、2011 年 2 月に IANA(Internet Assigned Numbers Authority)の未割り当てアドレスプールが枯渇しました。
現在も IPv4 はインターネットトラフィックの大半を占めています。IPv6(RFC 8200)への移行は進んでいますが、NAT(Network Address Translation)やプライベートアドレスの活用により、IPv4 は引き続き広く使われています。DNS の A レコードは IPv4 アドレスを格納するレコードタイプであり、AAAA レコードが IPv6 に対応します。
仕組み
IPv4 は 32 ビットのアドレスをネットワーク部とホスト部に分割し、CIDR とサブネットマスクでネットワーク範囲を定義します。
アドレスの構造
IPv4 アドレスは 32 ビットの数値を 8 ビットずつ 4 つのオクテットに分割し、各オクテットを 10 進数で表記してドットで区切ります。各オクテットの値は 0 から 255 の範囲です。
192.168.1.1
この表記を 2 進数に変換すると次のようになります。
11000000.10101000.00000001.00000001
アドレスはネットワーク部とホスト部に分かれます。ネットワーク部はどのネットワークに属するかを示し、ホスト部はそのネットワーク内の個々の機器を識別します。この分割はサブネットマスクで定義され、CIDR 表記(例: /24)で表現するのが一般的です。
CIDR とサブネットマスク
CIDR(Classless Inter-Domain Routing、RFC 4632)は、ネットワーク部のビット数をスラッシュの後に記述する表記法です。
192.168.1.0/24
/24 はネットワーク部が先頭 24 ビット、ホスト部が残り 8 ビットであることを表します。この場合、254 台のホストにアドレスを割り当てられます(2^8 - 2。ネットワークアドレスとブロードキャストアドレスを除く)。
| CIDR | サブネットマスク | ホスト数 |
|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 |
| /16 | 255.255.0.0 | 65,534 |
| /24 | 255.255.255.0 | 254 |
| /32 | 255.255.255.255 | 1 |
かつてはクラス A(/8)、クラス B(/16)、クラス C(/24)の固定的なクラス分けが使われていましたが、アドレスの利用効率が悪いため、1993 年の RFC 1519 で CIDR に置き換えられました。
プライベートアドレスとパブリックアドレス
RFC 1918 は、組織内ネットワーク向けにプライベートアドレスとして 3 つの範囲を予約しています。
| 範囲 | CIDR | アドレス数 |
|---|---|---|
| 10.0.0.0 〜 10.255.255.255 | 10.0.0.0/8 | 16,777,216 |
| 172.16.0.0 〜 172.31.255.255 | 172.16.0.0/12 | 1,048,576 |
| 192.168.0.0 〜 192.168.255.255 | 192.168.0.0/16 | 65,536 |
プライベートアドレスはインターネット上でルーティングされません。外部と通信するには NAT を使ってパブリックアドレスに変換します。家庭のルーターが 1 つのパブリック IPv4 アドレスを共有して複数の機器を接続できるのは、この NAT の仕組みがあるからです。
特殊なアドレス範囲
プライベートアドレス以外にも、特定の用途に予約された範囲があります。
| 範囲 | 用途 | RFC |
|---|---|---|
| 127.0.0.0/8 | ループバック(自分自身) | RFC 1122 |
| 169.254.0.0/16 | リンクローカル(DHCP 失敗時の自動設定) | RFC 3927 |
| 0.0.0.0/8 | 「このネットワーク」 | RFC 1122 |
| 255.255.255.255 | リミテッドブロードキャスト | RFC 919 |
| 100.64.0.0/10 | キャリアグレード NAT(CGN) | RFC 6598 |
パケットヘッダー
IPv4 パケットのヘッダーは最小 20 バイト、オプションを含めると最大 60 バイトです。主要なフィールドには、送信元アドレス、宛先アドレス、TTL(Time To Live)、プロトコル番号(TCP: 6、UDP: 17)、ヘッダーチェックサムが含まれます。
TTL はパケットが通過できるルーターの最大数を制限します。ルーターを 1 つ通過するたびに TTL が 1 減り、0 になるとパケットは破棄されます。この仕組みにより、ルーティングループが発生しても無限に循環することを防いでいます。
具体例
IPv4 アドレスの表記パターンと、代表的なパブリック DNS サーバーのアドレスを示します。
IPv4 アドレスの表記
# 標準的な表記
192.168.1.1
# CIDR 表記(ネットワーク指定)
10.0.0.0/8
# サブネットマスクとの組み合わせ
IP: 192.168.1.100
Mask: 255.255.255.0
Network: 192.168.1.0
Broadcast: 192.168.1.255
よく使われるパブリック DNS サーバー
# Google Public DNS
8.8.8.8
8.8.4.4
# Cloudflare DNS
1.1.1.1
1.0.0.1
確認方法
自分の端末に割り当てられている IPv4 アドレスを確認するには、OS に応じたコマンドを使います。
# macOS / Linux
ip addr show
# または
ifconfig
# Windows
ipconfig
外部から見たパブリック IPv4 アドレスを確認するには、次のコマンドが使えます。
curl -4 ifconfig.me
外部の視点からも確認したい場合は、Labee Dev Toolbox の IP API を使うと、外部の視点から見た結果を取得できます。
curl "https://labee.dev/api/ip?ip=8.8.8.8"
レスポンスは次の形式で返ります。
{
"success": true,
"data": {
"ip": "8.8.8.8",
"type": "IPv4",
"isPrivate": false,
"ptr": "dns.google"
},
"error": null,
"meta": { "responseTime": 42 }
}
type フィールドが "IPv4" または "IPv6" を返し、isPrivate でプライベートアドレスかどうかを判定します。ip パラメーターを省略すると、リクエスト元のクライアント IP が使われます。
よくある問題
IPv4 の運用上の課題は、アドレス枯渇に伴う NAT の制約、IPv6 とのデュアルスタック運用、プライベートアドレスの誤公開に集約されます。
アドレス枯渇と NAT の制約
IPv4 の 32 ビットアドレス空間は 約 43 億個しかなく、IANA のプールは 2011 年 2 月に枯渇しました。各地域インターネットレジストリ(RIR)の在庫も順次枯渇し、APNIC(アジア太平洋地域)は 2011 年 4 月、RIPE NCC(ヨーロッパ)は 2012 年 9 月、ARIN(北米)は 2015 年 9 月に通常の割り当てを終了しています。
NAT で 1 つのパブリックアドレスを複数機器で共有することで延命していますが、NAT 環境では P2P 通信やサーバー公開が複雑になります。キャリアグレード NAT(RFC 6598)を使う ISP も増えており、二重 NAT によるポートマッピングの制約が発生することがあります。
IPv4 と IPv6 のデュアルスタック
IPv6 への移行期間中、多くのサーバーは IPv4 と IPv6 の両方で通信を受け付けるデュアルスタック構成を採用しています。DNS で A レコード(IPv4)と AAAA レコード(IPv6)を両方設定し、クライアント側が接続可能なプロトコルを選択します。
IPv6 対応のクライアントは RFC 8305(Happy Eyeballs v2)に従い、IPv6 と IPv4 の接続を並行して試みます。IPv6 接続が一定時間(通常 250 ミリ秒)以内に確立できなければ IPv4 にフォールバックするため、IPv6 の設定ミスがあっても通信自体は成立することが多いです。ただし、この動作はクライアント実装に依存するため、AAAA レコードを設定する場合は IPv6 の疎通確認も行います。
プライベートアドレスの誤った公開
DNS の A レコードに 192.168.1.1 や 10.0.0.1 などのプライベートアドレスを設定してしまうと、インターネット経由でそのドメインにアクセスした場合に接続できません。プライベートアドレスはインターネット上でルーティングされないためです。開発環境の設定が本番に混入するケースや、ロードバランサーの内部 IP を誤って公開するケースが原因となります。
不正な IPv4 アドレス形式
IPv4 アドレスの各オクテットは 0 から 255 の範囲です。256.1.1.1 や 192.168.1.999 のように範囲外の値が含まれると不正なアドレスとなり、通信先として使えません。設定ファイルへの手入力ミスや、DHCP サーバーの設定誤りで発生します。