IP(IPv4 / IPv6)
ネットワーク層 (L3)。世界中のホストを一意に識別するIP アドレスと、 パケットを宛先まで運ぶルーティングの話。
IP の役割
- アドレッシング: ホストに番号を振る
- ルーティング: 宛先まで経路を選ぶ
- パケット転送: ベストエフォート(届く保証なし)
- 信頼性 / 順序保証は上位の TCP に任せる
IPv4 アドレス
32 ビット = 4 バイト。8 ビットずつドットで区切って10 進表記。
192.168.1.10
└─┘ └─┘ └┘ └┘
8b 8b 8b 8b
合計 2^32 ≒ 43 億。これでは足りないので NAT で延命中、根本対策は IPv6。
サブネットマスク / プレフィックス
IP アドレスは「ネットワーク部 + ホスト部」に分けて使う。境界を示すのがサブネットマスク。
IP: 192.168.1.10
Mask: 255.255.255.0 ← 上 24 ビットがネットワーク部
→ 192.168.1.0/24
└────────────┘
ネットワーク (256 アドレス分)
現代はCIDR 表記「/24」が標準。ビット数だけで表せる。
よく使うプレフィックス
| CIDR | マスク | ホスト数(実用) |
|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 |
| /16 | 255.255.0.0 | 65,534 |
| /24 | 255.255.255.0 | 254 |
| /29 | 255.255.255.248 | 6 |
| /30 | 255.255.255.252 | 2 (P2P) |
| /32 | 255.255.255.255 | 1 (単一ホスト) |
ネットワークアドレスとブロードキャスト
- 各サブネットの最小がネットワーク (e.g. 192.168.1.0)
- 各サブネットの最大がブロードキャスト (e.g. 192.168.1.255)
- これら 2 つはホストに割り当てない(だから /24 は 254 ホスト)
プライベート IP / グローバル IP
家庭やオフィスの内部用はプライベートアドレスを使う(RFC 1918)。
| 範囲 | 用途 |
|---|---|
| 10.0.0.0/8 | 大企業 / クラウド VPC |
| 172.16.0.0/12 | 中規模 |
| 192.168.0.0/16 | 家庭・小規模オフィス |
| 100.64.0.0/10 | キャリアグレード NAT (CGN) |
| 169.254.0.0/16 | Link-local(DHCP 失敗時) |
| 127.0.0.0/8 | ループバック (localhost) |
NAT(Network Address Translation)
プライベート IP のホストが、ルーター上で1 つのグローバル IP に変換されてインターネットに出る仕組み。
- NAT: 1:1 変換(ほぼ使わない)
- NAPT (PAT): ポートも変換し、多対 1。家庭用ルーターはこれ
- 外側からは区別がつかないためセキュリティ上の副次効果あり
- NAT 越しの P2P は難しい(→ STUN/TURN、WebRTC)
IPv4 ヘッダ(簡略)
+--------+--------+----+--------+--------+
| Ver | IHL |TOS | Length |
+--------+--------+----+--------+--------+
| ID | Flags | Fragment Offset
+-----------------+-------+----------------
| TTL | Proto | Header Checksum
+--------+--------+-----------------------+
| 送信元 IP (32 bit)
+----------------------------------------
| 宛先 IP (32 bit)
+----------------------------------------
| Options (可変) | Padding
+----------------+-----------------------+
| データ
- TTL: 通過できるルータ数の上限。0 になったら捨てられる(traceroute はこれを使う)
- Protocol: 6=TCP, 17=UDP, 1=ICMP
- Fragment: MTU 超過で分割した断片の管理
ICMP
IP の制御・診断用プロトコル。エラー通知や疎通確認に使う。
- Echo Request / Reply — ping
- Destination Unreachable — 届かない
- Time Exceeded — TTL 切れ(traceroute で使う)
- Redirect — 経路が違う
- Fragmentation Needed — Path MTU Discovery
ルーティング
ルーターはルーティングテーブルを見てパケットの次の行先(ネクストホップ)を決める。 最も長く一致するエントリ(longest prefix match)が選ばれる。
ルーティングテーブル例
Destination Gateway Genmask Iface
0.0.0.0 192.168.1.1 0.0.0.0 eth0 (デフォルト)
192.168.1.0 0.0.0.0 255.255.255.0 eth0 (直接接続)
10.0.0.0 10.1.1.1 255.0.0.0 eth1 (静的)
0.0.0.0/0(デフォルトルート)
どのエントリにも一致しないとき送る先。家庭ではルーター(インターネット側)を指す。
動的ルーティングプロトコル
- RIP: 距離(ホップ数)。古い・小規模
- OSPF: リンク状態。企業内
- EIGRP: Cisco 独自
- BGP: AS 間。インターネット全体の経路はこれで動いている
BGP とインターネット
インターネットはAS (Autonomous System) という単位の組織(ISP / クラウド事業者)が BGP で経路を交換することで全体として繋がっている。
- 各 AS には番号 (ASN) が付与される。例: AWS=16509、Cloudflare=13335
- BGP の誤設定で世界中で障害が起きることがある(経路ハイジャック)
- RPKI / ROA でルート認証が進行中
DHCP
IP アドレス・サブネット・デフォルトゲートウェイ・DNS を自動配布するプロトコル。
- DHCP DISCOVER(クライアントがブロードキャスト)
- DHCP OFFER(サーバが提案)
- DHCP REQUEST(クライアントが要求)
- DHCP ACK(確定)
IPv6
128 ビット = 2^128 ≒ 3.4×10^38 個。アドレス枯渇問題を根本解決。
2001:0db8:85a3:0000:0000:8a2e:0370:7334
└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘
16b 16b 16b 16b 16b 16b 16b 16b = 128b
表記の省略
- 各ブロックの先頭 0 を省略 —
2001:db8:85a3:0:0:8a2e:370:7334 - 連続する 0 ブロックは:: に短縮(1 回だけ)—
2001:db8:85a3::8a2e:370:7334 - ループバックは
::1 - 未指定は
::
IPv6 の主要範囲
- 2000::/3 — グローバルユニキャスト
- fe80::/10 — リンクローカル(同一リンク内)
- fc00::/7 — ユニークローカル(プライベート相当)
- ff00::/8 — マルチキャスト
- ::1/128 — ループバック
IPv6 の特徴
- ヘッダがシンプルになって処理が速い
- NAT 不要が原則(アドレスが余ってる)
- SLAAC(Stateless Address Autoconfiguration)で DHCP なしでもアドレス取れる
- IPsec が組み込み標準
- ARP の代わりに NDP(ICMPv6 上)
- fragmentation は送信元のみ(経路ルータでは行わない)
URL 中の IPv6
コロンと URL の区切り文字が衝突するため角括弧で囲む:
http://[2001:db8::1]:8080/path
Dual Stack / 移行
現代のネットワークは IPv4 と IPv6 が両方動くデュアルスタックが主流。 モバイルキャリアや一部 ISP は IPv6 中心 + IPv4 NAT64 で動かしている。
Happy Eyeballs
ブラウザは IPv6 と IPv4 の両方を並列に試して速い方を採用する仕組み(RFC 8305)。 IPv6 が遅い環境でも体感を悪くしない。
確認コマンド
# 自分の IP
ip a # Linux
ifconfig # 古典版
# ルーティングテーブル
ip route # Linux
netstat -rn # macOS
route print # Windows
# ICMP 疎通
ping 8.8.8.8
ping6 2001:4860:4860::8888
# 経路追跡
traceroute example.com
traceroute6 example.com
よくあるトラブル
| 症状 | 原因 |
|---|---|
| 同一 LAN なのに繋がらない | サブネットマスク不一致 |
| 外には行けるが特定先だけ NG | 経路 / ファイアウォール |
| IP は取れたがネット不可 | デフォルトゲートウェイ未設定 / DNS 不可 |
| IPv6 だけ遅い | ISP 側経路が遅い / Tunnel |
| Path MTU 問題 | ICMP がブロックされて PMTUD 失敗 |
10.0.0.0/8、192.168.1.0/24、10.1.2.0/29 等が即座に読めると
クラウドの VPC 設計や FW ルールが楽になる。/24 = 256 個、/16 = 65536 個、と桁感を覚える。