IP(IPv4 / IPv6)

ネットワーク層 (L3)。世界中のホストを一意に識別するIP アドレスと、 パケットを宛先まで運ぶルーティングの話。

IP の役割

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マスクホスト数(実用)
/8255.0.0.016,777,214
/16255.255.0.065,534
/24255.255.255.0254
/29255.255.255.2486
/30255.255.255.2522 (P2P)
/32255.255.255.2551 (単一ホスト)

ネットワークアドレスとブロードキャスト

プライベート 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/16Link-local(DHCP 失敗時)
127.0.0.0/8ループバック (localhost)

NAT(Network Address Translation)

プライベート IP のホストが、ルーター上で1 つのグローバル IP に変換されてインターネットに出る仕組み。

IPv4 ヘッダ(簡略)

+--------+--------+----+--------+--------+
| Ver    | IHL    |TOS | Length |
+--------+--------+----+--------+--------+
| ID              | Flags | Fragment Offset
+-----------------+-------+----------------
| TTL    | Proto  | Header Checksum
+--------+--------+-----------------------+
| 送信元 IP (32 bit)
+----------------------------------------
| 宛先 IP (32 bit)
+----------------------------------------
| Options (可変) | Padding
+----------------+-----------------------+
| データ
      

ICMP

IP の制御・診断用プロトコル。エラー通知や疎通確認に使う。

ルーティング

ルーターはルーティングテーブルを見てパケットの次の行先(ネクストホップ)を決める。 最も長く一致するエントリ(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(デフォルトルート)

どのエントリにも一致しないとき送る先。家庭ではルーター(インターネット側)を指す。

動的ルーティングプロトコル

BGP とインターネット

インターネットはAS (Autonomous System) という単位の組織(ISP / クラウド事業者)が BGP で経路を交換することで全体として繋がっている。

DHCP

IP アドレス・サブネット・デフォルトゲートウェイ・DNS を自動配布するプロトコル。

  1. DHCP DISCOVER(クライアントがブロードキャスト)
  2. DHCP OFFER(サーバが提案)
  3. DHCP REQUEST(クライアントが要求)
  4. 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
      

表記の省略

IPv6 の主要範囲

IPv6 の特徴

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 失敗
CIDR を読めるように

10.0.0.0/8192.168.1.0/2410.1.2.0/29 等が即座に読めると クラウドの VPC 設計や FW ルールが楽になる。/24 = 256 個、/16 = 65536 個、と桁感を覚える。