Internet Protocol (IP) #
Internet Protocol (IP) は、ネットワーク上のホストにアドレスを与え、パケットを宛先まで転送するための通信プロトコルである。TCP/IP スタックの中核を担い、Web、メール、API、ストリーミング、ゲーム — インターネットを流れるあらゆる通信は最終的に IP パケットとしてルーティングされる。OSI 参照モデルでは 第 3 層 (ネットワーク層) に位置し、コネクションレス・ベストエフォート (best-effort) の単方向データグラム配送を提供する。
1. IP の歴史 #
1.1 ARPANET 時代の限界 #
1969 年に登場した ARPANET は、当初 NCP (Network Control Program) という独自プロトコルで動いていた。NCP は「同質のネットワーク内」での通信を前提にしており、異なるネットワーク間 (例えば衛星通信網と有線網) を相互接続する設計にはなっていなかった。1970 年代に研究ネットワークが多様化するにつれ、異種ネットワーク同士をつなぐ共通プロトコルが必要になっていく。
1.2 TCP/IP の設計 (1974) #
1974 年、ヴィント・サーフ (Vint Cerf) と ボブ・カーン (Bob Kahn) が論文 "A Protocol for Packet Network Intercommunication" で TCP の原型を発表 (RFC 675)。当初は TCP に「アドレス指定 + 信頼性のある配送」両方を持たせる設計だったが、後に アドレス指定とルーティングは IP に分離、信頼性は TCP に残す 二層分離が採用された。これが現在まで続く TCP/IP の基本設計である。
1.3 IPv4 の標準化 (RFC 791, 1981) #
1981 年に RFC 791 で IPv4 が正式標準化。32 bit アドレス (約 43 億通り) を持ち、当時としては事実上無限のアドレス空間とみなされていた。1983 年 1 月 1 日、ARPANET は NCP から TCP/IP に「フラグデー」で全面切替し、現代インターネットの基盤が確定した。
1.4 アドレス枯渇と IPv6 の登場 #
1990 年代に入り、商用インターネットの爆発的拡大で IPv4 アドレス枯渇が現実の問題になる。短期対策として CIDR (RFC 1519, 1993) によるアドレスの効率割当、NAT (RFC 1631, 1994) によるプライベート IP の共有が導入された。長期対策として 1998 年に IPv6 (RFC 2460) が標準化、現行は 2017 年の RFC 8200。128 bit アドレスで「事実上枯渇しない」(2^128 ≈ 3.4×10^38) アドレス空間と、ヘッダの簡素化を実現した。
1.5 アドレス枯渇の現実 #
IANA の IPv4 中央在庫は 2011 年に枯渇。各地域インターネットレジストリ (RIR) も順次枯渇し、現在は使用済みアドレスの売買・再配布で凌ぐ状態。IPv6 への移行が長期的な解決策で、Google の統計では 2026 年時点で全世界クライアントの 約 45% が IPv6 で接続している。
2. IP の役割と OSI 上の位置 #
+----------------------+
| Application 層 | HTTP / SSH / DNS / SMTP ...
+----------------------+
| Transport 層 | TCP / UDP / QUIC
+----------------------+
| Network 層 | ★ IP (本記事) / ICMP
+----------------------+
| Data Link 層 | Ethernet / Wi-Fi / PPP
+----------------------+
| Physical 層 | 銅線 / 光ファイバ / 電波
+----------------------+
IP の特徴は次の 3 点。
- コネクションレス: 事前のセッション確立なしにパケットを送る。各パケットは独立して扱われる。
- ベストエフォート: 配送・順序・重複なしの保証はしない。これらは上位の TCP が担う (UDP は何も保証しない)。
- ルーティング: 宛先 IP アドレスを基に、ホップごとのルータが最適経路を選択して中継する。
つまり IP は「封筒に住所を書いて、各郵便局がリレー配送する仕組み」に近い。確実に届く保証はないが、シンプルで拡張しやすく、世界規模で動く。
3. IPv4 #
3.1 アドレス構造 #
IPv4 アドレスは 32 bit (4 オクテット = 4 byte)。慣習的に ドット区切りの 10 進数 で表記する。
3.2 アドレスの種類とプライベート IP (RFC 1918) #
実用上、IPv4 アドレスは複数の用途別に予約された範囲を持つ。
| 範囲 | 用途 | 例 |
|---|---|---|
0.0.0.0/8 |
「このホスト/このネットワーク」予約 | 0.0.0.0 |
10.0.0.0/8 |
プライベート IP (RFC 1918) | 大規模社内 LAN |
127.0.0.0/8 |
ループバック | 127.0.0.1 |
169.254.0.0/16 |
リンクローカル (DHCP 失敗時の自動割当) | APIPA |
172.16.0.0/12 |
プライベート IP (RFC 1918) | 中規模社内 LAN |
192.168.0.0/16 |
プライベート IP (RFC 1918) | 家庭・SOHO |
224.0.0.0/4 |
マルチキャスト | RIP / OSPF / mDNS |
255.255.255.255 |
リミテッド・ブロードキャスト | DHCP DISCOVER |
プライベート IP は RFC 1918 で定義された「インターネット上では使われない」範囲で、社内 LAN・家庭ルータの内側で自由に割り当てられる。インターネットへ出るときは NAT がプライベート IP をルータの公開 IP に書き換える。
3.3 サブネットマスクと CIDR #
IPv4 アドレスは 「ネットワーク部 + ホスト部」 に分かれる。境界を示すのが サブネットマスク。
192.168.1.10 / 24
↓
ネットワーク部 = 192.168.1.0/24 (上位 24 bit)
ホスト部 = .10 (下位 8 bit、最大 254 ホスト)
/24 のような表記が CIDR (Classless Inter-Domain Routing, RFC 1519)。元々は IP アドレスを A (8 bit), B (16 bit), C (24 bit) という固定クラスで割り当てていたが、1993 年の CIDR 導入で任意のビット長で分割できるようになり、アドレスを大幅に効率化した。
主な CIDR 表記とホスト数:
| CIDR | サブネットマスク | ホスト数 (使用可) | 用途 |
|---|---|---|---|
| /8 | 255.0.0.0 | 1,677万 | 大規模ネットワーク |
| /16 | 255.255.0.0 | 65,534 | 中規模 |
| /24 | 255.255.255.0 | 254 | 一般的な LAN |
| /28 | 255.255.255.240 | 14 | 小規模 |
| /30 | 255.255.255.252 | 2 | ルータ間 P2P |
| /32 | 255.255.255.255 | 1 | 単一ホスト |
3.4 IPv4 ヘッダ構造 #
IPv4 パケットは固定 20 byte ヘッダ (オプションありなら最大 60 byte) + データで構成される。
3.5 フラグメント化と TTL #
IP パケットの長さは経路上の MTU (Maximum Transmission Unit、Ethernet なら 1500 byte) を超えられない。それより大きいパケットは送信元か中継ルータがフラグメント化 (分割) して送り、宛先で再構成される。ただし現代では:
- Path MTU Discovery (PMTUD) で送信元が事前に最小 MTU を知り、最初から分割して送る
- フラグメントは攻撃に悪用されやすいので、Don't Fragment (DF) フラグを立て、超過時は ICMP "Fragmentation Needed" で送り直す方式が主流
TTL (Time To Live) はパケットが転送されるたびにルータが 1 ずつ減らす値。0 になったルータはパケットを破棄して送信元へ ICMP Time Exceeded を返す (traceroute はこれを利用)。経路ループの暴走を防ぐ安全装置。
3.6 NAT (Network Address Translation) #
家庭やオフィスのプライベート IP (192.168.x.x など) はインターネットに直接出られない。ルータが内側のパケットを通すとき、送信元 IP/ポートを「自分の公開 IP + 動的ポート」に書き換えて中継する仕組みが NAT (RFC 1631)。応答は逆変換で内側ホストに戻す。
NAT のおかげで 1 つの公開 IP で何百ものデバイスをぶら下げられる、IPv4 アドレス枯渇への決定的な延命策となった。一方でピアツーピア通信を阻害する(STUN/TURN/ICE が回避策)、エンドツーエンド原則を破る、といった副作用もある。
4. IPv6 #
4.1 アドレス構造 (128 bit) #
128 bit = 16 byte のアドレス。16 進数を 4 桁ずつコロン区切り (8 グループ) で表記する。
2001:0db8:85a3:0000:0000:8a2e:0370:7334
圧縮表記:
- 各グループの先頭の 0 は省略可:
2001:db8:85a3:0:0:8a2e:370:7334 - 連続する全ゼロは
::で 1 回だけ省略可:2001:db8:85a3::8a2e:370:7334
総アドレス数は 2^128 ≈ 3.4×10^38 (=340 澗)。地球上の全砂粒に IP を割り当ててもなお余る。
主なアドレス種別:
- Global Unicast (
2000::/3): インターネット上で一意な公開アドレス - Link-Local (
fe80::/10): 同一リンク内のみ有効、SLAAC 等で自動付与 - Unique Local (
fc00::/7): IPv4 のプライベート IP に相当 (RFC 4193) - Multicast (
ff00::/8): 複数受信者へ - Loopback (
::1): IPv4 の 127.0.0.1 に相当
4.2 IPv6 ヘッダ構造 #
IPv4 と比べてヘッダは 大幅に簡素化 され、固定 40 byte。可変長フィールドや checksum を排除し、ルータの処理を高速化した。
| フィールド | サイズ | 役割 |
|---|---|---|
| Version | 4 bits | 6 |
| Traffic Class | 8 bits | QoS (DSCP / ECN) |
| Flow Label | 20 bits | 同一フローを識別 |
| Payload Length | 16 bits | ペイロード長 |
| Next Header | 8 bits | 次ヘッダの種類 (上位プロトコル / 拡張ヘッダ) |
| Hop Limit | 8 bits | IPv4 の TTL に相当 |
| Source Address | 128 bits | 送信元 |
| Destination Address | 128 bits | 宛先 |
IPv4 から消えたもの:
- Header Checksum — Ethernet と TCP/UDP が誤り検出を担うので冗長
- Identification / Flags / Fragment Offset — 中継ルータでの分割を禁止し、PMTUD で送信元側の責任に
- Options — 拡張が必要なら別途「拡張ヘッダ」を Next Header で繋ぐ
4.3 SLAAC とアドレス自動設定 #
IPv6 では DHCP 不要でアドレスを自動取得 できる仕組み (Stateless Address Autoconfiguration, SLAAC) が標準。
- ホストはリンク参加時に Router Solicitation (RS) を送信
- ルータが Router Advertisement (RA) で「このリンクのプレフィックスは
2001:db8:abcd::/64」と告知 - ホストはプレフィックス + 自分の MAC ベースの Interface ID (EUI-64) または乱数 (Privacy Extension) で 128 bit アドレスを組み立てる
これらは ICMPv6 で実装されており、IPv6 が「IP + ICMPv6」と一体である理由。
4.4 IPv4 との共存 #
完全な IPv6 移行はまだ途上で、当面は両方を併用する。
- Dual-Stack: ホスト・ルータが IPv4 と IPv6 両方を持ち、宛先に応じて使い分ける (最も主流)
- NAT64 / DNS64: IPv6 のみホストから IPv4 のみサーバへ通信させるため、ルータが IPv6→IPv4 変換、DNS が IPv4 アドレスを
64:ff9b::xxxx形式の IPv6 にラップする - 6to4 / Teredo: IPv4 ネットワーク経由で IPv6 通信をトンネリングする旧方式 (現在は非推奨)
5. ルーティング #
5.1 ルーティングテーブル #
すべてのホスト・ルータは「この宛先範囲はこのインターフェースから出す」を決めるルーティングテーブルを持つ。最長プレフィックスマッチで宛先 IP に最も合致するエントリを選択する。
$ ip route
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50
10.0.0.0/8 via 192.168.1.254 dev eth0
default (= 0.0.0.0/0) は「他に該当しない宛先のデフォルトゲートウェイ」。
5.2 主要ルーティングプロトコル #
| プロトコル | 用途 | スコープ |
|---|---|---|
| RIP (Routing Information Protocol) | 古典的、ホップ数で経路選択 | 小規模社内 (ほぼ廃止) |
| OSPF (Open Shortest Path First) | リンクステート、Dijkstra で最短経路 | 中〜大規模社内 (IGP) |
| IS-IS | OSPF と同じくリンクステート | ISP / キャリア内 |
| BGP (Border Gateway Protocol) | パスベクトル、AS 間の唯一の標準 | インターネット全体 (EGP) |
インターネットそのものは BGP が支えている。世界中の AS (Autonomous System、ISP や大企業の単位) が BGP で経路を交換し、グローバルなルーティングテーブル (現在 100 万経路以上) を構築している。
6. 主要コマンドと使用例 #
6.1 ip — モダンなネットワーク設定 (Linux) #
ifconfig の置き換え。iproute2 パッケージ。
# インターフェースとアドレス
ip addr show
ip -br addr # 簡易表示
ip addr add 192.168.1.50/24 dev eth0
ip addr del 192.168.1.50/24 dev eth0
# リンク (NIC) の上下
ip link set eth0 up
ip link set eth0 down
# ルーティングテーブル
ip route show
ip route add 10.0.0.0/8 via 192.168.1.254
ip route del 10.0.0.0/8
# ARP / NDP テーブル
ip neigh show
# 統計
ip -s link show eth0
6.2 ping / traceroute / mtr #
ICMP を利用した疎通・経路確認 (詳細は ICMP 記事参照)。
ping -c 4 example.com
traceroute example.com
mtr example.com
6.3 netstat / ss — ソケット一覧 #
ss は netstat の高速・モダンな置き換え。
ss -tunlp # TCP/UDP listen 中のポート + プロセス
ss -tan # 全 TCP 接続
ss -an state established # 確立済み接続のみ
6.4 nmap — IP スキャン #
# ホスト発見
nmap -sn 192.168.1.0/24
# TCP SYN スキャン
nmap -sS -p 1-1000 192.168.1.50
# OS フィンガープリント
nmap -O 192.168.1.50
# IPv6
nmap -6 2001:db8::1
6.5 tcpdump — パケットキャプチャ #
# eth0 で IP パケットを観察
sudo tcpdump -i eth0 -nn ip
# 特定ホスト宛
sudo tcpdump -i eth0 host 192.168.1.50
# ポート絞り込み
sudo tcpdump -i eth0 'tcp port 80'
# IPv6
sudo tcpdump -i eth0 ip6
6.6 whois — IP アドレスの登録情報 #
whois 8.8.8.8 # → Google LLC
whois 93.184.216.34 # → Edgecast / Verizon
7. セキュリティ — 主な攻撃と防御 #
7.1 IP Spoofing #
送信元 IP を偽装して攻撃元を隠したり、信頼関係を悪用する。
- DDoS 増幅攻撃: 被害者 IP を送信元に偽装し、DNS / NTP / Memcached 等のリフレクタへ問い合わせ → 大量応答で被害者を圧迫
- TCP Sequence Number 攻撃: かつての rlogin / rsh のホストベース信頼を悪用 (現代ではほぼ使われない)
対策: BCP 38 (RFC 2827) に従って ISP が送信元アドレス検証を行う (自分の AS から出るパケットは正しい送信元のみ通す)。
7.2 DDoS #
大量の IP パケットでサービスを飽和させる。代表的な手法:
- Volumetric: 帯域を埋める (UDP flood, ICMP flood, amplification)
- Protocol: TCP/UDP のステートを枯渇 (SYN flood, ack flood)
- Application: HTTP リクエストでアプリを過負荷に
対策: 上流 ISP のスクラビング / Cloudflare・Akamai 等の DDoS 保護 / Anycast による負荷分散。
7.3 IPsec — IP レイヤの暗号化 #
IPsec (RFC 4301-4309) は IP パケット自体を暗号化・認証する仕組み。VPN の事実上の標準。
- AH (Authentication Header): 認証のみ
- ESP (Encapsulating Security Payload): 暗号化 + 認証
- IKE (Internet Key Exchange): 鍵交換
トランスポートモード (ペイロードのみ暗号化) とトンネルモード (パケット全体を暗号化して新しい IP ヘッダで包む) がある。
7.4 IP-based Access Control #
ファイアウォールやサーバが「特定の IP / サブネットからのアクセスのみ許可」する制御。家庭の最初のセキュリティ層は事実上この iptables / nftables / Windows Defender Firewall。
# iptables の例 — 22/tcp は社内 LAN のみ
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
IP は地味で、誰もが当たり前のように使う。しかし「どのパケットがどの経路でどう届くか」を理解しておかないと、ネットワークトラブルの原因究明も、セキュリティ設計も、根本のところで詰む。インターネットすべての土台として、IPv4 のヘッダ構造と IPv6 への移行 (§3〜§4)、ルーティングプロトコルの違い (§5)、そして spoofing / DDoS / IPsec を含むセキュリティ層 (§7) の 3 つを地続きで掴んでおくと、ネットワークの問題に向き合うときの解像度が一段変わる。