00 学習目標
01 ネットワーク層の役割
02 IPv4 ヘッダ
03 断片化とTTL
04 クラス→CIDR
05 サブネット計算
06 プライベートIP
07 NAT / NAPT
08 ICMP
09 IPv6 概要
10 まとめ
11 確認問題
学習目標
本講を終えると、以下の問いに学術的な言葉で答えられるようになります。
ネットワーク層が担う フォワーディング と ルーチング の役割を区別できる
IPv4 ヘッダ の主要フィールド(バージョン/IHL/ToS/Total Length/Identification/Flags/Fragment Offset/TTL/Protocol/Header Checksum/送信元・宛先 IP)それぞれの目的を説明できる
断片化(フラグメンテーション) と TTL の役割を、ホップ間の MTU やルーティングループとの関係で説明できる
歴史的な クラスフルアドレス から現代の CIDR への移行理由を説明できる
サブネットマスクと IP アドレスの論理積から ネットワークアドレス ・ブロードキャストアドレス ・ホスト範囲 を二進演算で求められる
RFC 1918 のプライベート IP アドレス範囲と、家庭ルータが行う NAT/NAPT(IP マスカレード) の動作を説明できる
ICMP の代表的なメッセージ種別(Echo Request/Reply、Destination Unreachable、Time Exceeded、Redirect)と、ping・traceroute の動作原理を結びつけて理解する
本講は基礎の
第4回 IPアドレスとドメイン名(基礎) で扱った「ネット上の住所」「グローバルとプライベート」の概念を前提に、
ヘッダの中身 と
サブネットの数学 を導入します。次回の
標準 編では本講で出てこなかった
DHCP による動的アドレス配布と、本講で学ぶ NAT を組み合わせた家庭ネットワークの全景を扱います。
このレッスンの目次
ネットワーク層の役割 ─ 「届ける」と「経路を決める」
ネットワーク層(TCP/IP モデルではインターネット層と同義)の使命は、世界中の任意の送信ホストから任意の受信ホストへ パケットを届ける ことです。これを実現するために、ネットワーク層には2つの異なる仕事が同居しています。
POINT
ネットワーク層の2大機能:
1. フォワーディング(forwarding) ─ ルータに届いた1つのパケットを、宛先 IP を見て適切な出力リンクへ転送 する(高速・データプレーン)
2. ルーチング(routing) ─ 経路全体を 事前に計算 してフォワーディング表(ルーチングテーブル)を作る(コントロールプレーン)
本講では主に フォワーディング の前提となるアドレス体系と IP ヘッダを扱います。ルーチングプロトコル(RIP/OSPF/BGP) で経路をどう計算するかは 標準 ルーティング(準備中) で扱います。
IP の設計思想 ─ ベストエフォート
IP は ベストエフォート(best-effort) 型のサービスです。「届くように最善を尽くしますが、配送完了・順序・遅延の上限は保証しません」というスタンス。確実な配送が必要であれば、上層の TCP が再送と順序整列で責任を持つ、という分担です。これにより、ネットワーク層はシンプルで高速 に保たれ、世界中の異なる物理網を横断して動作できます。
サブネット A
192.168.10.0/24
.2
.3
.4
サブネット B
192.168.20.0/24
サブネット C
203.0.113.0/24
ルータ R1
ルータ R2
同じサブネット内 = リンク層スイッチで届く / 別サブネットへ = ネットワーク層のルータが必要
図の見方:サブネット はルータで区切られた1つの IP ネットワーク。サブネット内通信はリンク層(MAC アドレス)で完結し、別サブネットへは必ず ルータ を経由します。インターネットとは「サブネットを相互接続したもの」と言えます。
フラグメンテーションと TTL
リンク層プロトコルが1フレームで運べるバイト数の上限を MTU(Maximum Transmission Unit) と呼びます。Ethernet なら標準 1,500 バイト。IP データグラムが MTU を超えると、ルータは 断片化(fragmentation) を行い、複数の小さな断片に分けてから次リンクへ送出します。
POINT
断片化は 送信時にルータが行い、受信ホストで組み立て直す 。各断片は 同じ Identification を持ち、Fragment Offset で元データ内の位置を、MF フラグ で「まだ後続あり」を示す。
断片化の流れ(MTU 1,500 のリンクから MTU 620 のリンクへ)
元データグラム
Total Length = 1500
ID = 7777, MF=0, Offset=0
ルータ
次リンク MTU=620
断片 1 (0-599)
ID=7777, MF=1, Off=0
断片 2 (600-1199)
ID=7777, MF=1, Off=75
断片 3 (1200-1479)
ID=7777, MF=0, Off=150
受信ホスト
同じ ID で再構成
図の見方:1 つの 1,500 バイトデータグラムが、MTU 620 のリンク用に 3 つの断片に分割される。Offset は 8 バイト単位なので、600 バイト目を示す値は 600/8 = 75 。受信側で組み立てが完了するまで、ルータは(IPv4 では)転送のみ。
TTL ─ ループでパケットを永遠にさまよわせない
TTL(Time to Live) は本来「秒数」として設計されましたが、実装上は ルータを通るたびに 1 減るホップカウンタ として運用されています。0 になったパケットはルータに 破棄 され、その時点でルータは送信元に ICMP Time Exceeded を返します(後述)。これにより、ルーチング異常で循環してしまったパケットが網内を永久にさまようのを防げます。
Linux の標準値は通常 64 、Windows は 128 、古い Solaris は 255 。OS によって異なるため、ping の TTL 値を見れば相手 OS をある程度推測できます(ネットワーク機器のフィンガープリンティングでも利用される)。
近年は断片化を避ける ─ Path MTU Discovery
断片化はルータの負荷・パケットロス時の再送効率の悪さなどから、現代では避けられる傾向にあります。Path MTU Discovery(PMTUD) は、送信ホストが DF フラグを立てた パケットを送り、途中のルータで「これは通せない」と ICMP Fragmentation Needed が返れば、その情報からパス全体の最小 MTU を学習して、自身でサイズを抑える仕組みです。IPv6 ではルータが断片化できなくなり 、PMTUD が必須化されました。
もっと詳しく:断片化が嫌われる理由
再送効率が悪い :1 つの断片を失うだけで、データグラム全体が無効になり、再送ではすべての断片を送り直すことになる
ファイアウォールとの相性 :ヘッダだけ持つ断片はトランスポート層情報を含まず、ステートフル検査が難しい
ルータの CPU コスト :断片化は ASIC ではなくソフト処理になることが多く、性能劣化要因
アドレスクラスから CIDR へ ─ 歴史と現代
32 ビットの IPv4 アドレスをどう「ネットワーク部」と「ホスト部」に区切るか。1980 年代の クラスフルアドレス から、現代の CIDR(Classless Inter-Domain Routing) へ進化した経緯を押さえます。
クラスフルアドレス(1981〜)
RFC 791 当時、ネットワーク部の境界は IP アドレスの先頭ビットパターンで 固定的に決まって いました。先頭が 0 ならクラス A、10 ならクラス B、110 ならクラス C、と判定する方式です。
クラス 先頭ビット 範囲 NW部 / ホスト部 NW数 ホスト/NW
A 0 0.0.0.0 〜 127.255.255.255 8 / 24 bit 128 約 1,677 万
B 10 128.0.0.0 〜 191.255.255.255 16 / 16 bit 16,384 65,536
C 110 192.0.0.0 〜 223.255.255.255 24 / 8 bit 2,097,152 256
D 1110 224.0.0.0 〜 239.255.255.255 マルチキャスト用
E 1111 240.0.0.0 〜 255.255.255.255 実験/予約
クラスフルの問題 :中規模組織(例:1,000 台規模)が必要なとき、クラス C(256 個)では足りずクラス B(65,536 個)を取らざるを得ず、大量のホスト部が無駄になる (アドレス枯渇の主因)。
CIDR(RFC 1518/1519、1993〜)
クラスの枠を取り払い、ネットワーク部の長さを 1 ビット単位で自由に 指定できるようにしたのが CIDR です。表記は IPアドレスの末尾に スラッシュ + プレフィクス長 を添えます(例:192.168.10.0/24 )。プレフィクス長は「上位何ビットがネットワーク部か」を意味します。
/24 = 上位 24 ビットがネットワーク部 → ホスト部 8 ビット → 256 個のアドレス
/26 = 上位 26 ビット → ホスト部 6 ビット → 64 個
/30 = 上位 30 ビット → ホスト部 2 ビット → 4 個(P2P リンクでよく使う)
/16 = ホスト 16 ビット → 65,536 個
CIDR は サブネッティング(細分割) と スーパーネッティング(集約) の両方を可能にし、必要なサイズに合わせてアドレスを割り当てられます。さらに ルーチングテーブルの集約 によりルータの負荷も軽減されました。
BGP で配るインターネット経路の単位もすべて CIDR 表記です。たとえば「203.0.113.0/24 はうちが管理しています」と AS 同士でやり取りします。
プライベート IP アドレス(RFC 1918)
インターネットに直接出ない、組織内部だけで使えるアドレス帯が RFC 1918 で予約されています。このアドレス帯はインターネット上のルータが破棄するため、異なる組織で同じアドレスを自由に使える のが特徴です。
クラス相当 CIDR 表記 範囲 個数
A 10.0.0.0/8 10.0.0.0 〜 10.255.255.255 約 1,677 万
B 172.16.0.0/12 172.16.0.0 〜 172.31.255.255 約 104 万
C 192.168.0.0/16 192.168.0.0 〜 192.168.255.255 65,536
家庭ルータの LAN 側はほぼ 192.168.0.0/24 または 192.168.1.0/24 。多くの大学・企業の内部 LAN は 10.0.0.0/8 。これらのアドレスは NAT によってグローバル IP に変換されてからインターネットに出ます(後述)。
その他の特殊アドレス
127.0.0.0/8 (ループバック ):自ホストを指す。127.0.0.1 = localhost
169.254.0.0/16 (リンクローカル ):DHCP で IP を取得できなかった時の自動割り当て(APIPA)
255.255.255.255 (限定ブロードキャスト ):同一サブネット内全員宛て
224.0.0.0/4 (マルチキャスト ):特定グループ宛て
Q. 「サブネットマスクは何のためにあるのか?」を、同じサブネットかどうかをホストが判定する場面 を例に挙げて説明してみてください。
解答を見る
サブネットマスクは 「IP アドレスのうち、どこまでがネットワーク部か」 を示す 32 ビットのビットマスクです。ホストがパケットを送るとき、宛先 IP と自分の IP のそれぞれにサブネットマスクで論理積を取り、得られた ネットワークアドレスが一致すれば「同じサブネット」 と判定します。同じサブネットなら ARP でリンク層直送、違うサブネットなら デフォルトゲートウェイ(ルータ) 宛にフレームを送ります。つまりサブネットマスクは 「ルータを通すかどうか」を毎回判定するための物差し です。これがなければホストはどこへフレームを出していいか分からなくなります。
サブネット計算 ─ 二進数で「自分の手で」求める
与えられた IP アドレスとプレフィクス長から、ネットワークアドレス ・ブロードキャストアドレス ・ホスト範囲 を求める。これは大学の試験や基本情報技術者試験で頻出の計算です。コツは 二進数で考える こと。
サブネットマスクの読み方
プレフィクス長 /n は「上位 n ビットがネットワーク部」を意味します。同じことを 32 ビットの サブネットマスク (上位 n ビットが 1、残り 32-n ビットが 0)で表すこともできます。
プレフィクス 10進サブネットマスク 二進(下位 8 bit のみ抜粋) ホスト数 使えるホスト数
/24 255.255.255.0 … 00000000 256 254
/25 255.255.255.128 … 10000000 128 126
/26 255.255.255.192 … 11000000 64 62
/27 255.255.255.224 … 11100000 32 30
/28 255.255.255.240 … 11110000 16 14
/30 255.255.255.252 … 11111100 4 2
「使えるホスト数」が −2 されている理由: ホスト部全 0 は ネットワークアドレス (サブネット自体を指す)、ホスト部全 1 は ブロードキャストアドレス (同サブネット全員宛て)として予約されているため、実際にホストに割り振れるのは 2 引いた数になります。
例題:192.168.10.0/24 を /26 で 4 分割する
もとのサブネット 192.168.10.0/24 (256 個)を、/26 (64 個)で 4 つに区切ってみます。第 4 オクテットの上位 2 ビットが「サブネット番号」になります。
サブネット
第4オクテット(2進)
ネットワーク
ホスト範囲
ブロードキャスト
サブネット1
00 000000
192.168.10.0/26
.1 〜 .62
192.168.10.63
サブネット2
01 000000
192.168.10.64/26
.65 〜 .126
192.168.10.127
サブネット3
10 000000
192.168.10.128/26
.129 〜 .190
192.168.10.191
サブネット4
11 000000
192.168.10.192/26
.193 〜 .254
192.168.10.255
赤色の上位 2 ビットがサブネット識別子。これが 00/01/10/11 の 4 通りで 4 サブネットになる。
図の見方:第 4 オクテットの上位 2 ビット(赤)が「どのサブネットか」を表し、下位 6 ビットが「サブネット内のホスト番号」。各サブネットの最初(全 0)と最後(全 1)はネットワーク・ブロードキャスト用に予約。
計算手順:任意の IP/プレフィクスからネットワークアドレスを求める
例として、192.168.1.100/26 の所属サブネットを求めてみましょう。
手順
1. IP アドレスを 2 進数に変換
192.168.1.100 = 11000000.10101000.00000001.01 100100
2. プレフィクス /26 のサブネットマスク = 11111111.11111111.11111111.11 000000
3. 桁ごとに 論理積 を取る → ホスト部(下位 6 bit)が 0 になる
= 11000000.10101000.00000001.01 000000
4. 10 進に戻す → 192.168.1.64/26 がネットワークアドレス
5. ホスト部を全 1 にしたものがブロードキャスト → 192.168.1.127
6. ホスト範囲は 192.168.1.65 〜 192.168.1.126 (62 個)
速算のコツ: /26 は第 4 オクテットを 64 刻みで区切るので、100 が含まれるブロックは 64 〜 127 。先頭 64 がネットワーク、末尾 127 がブロードキャスト、と即答できます。/27 なら 32 刻み、/28 なら 16 刻み。「ブロックサイズ = 256 - 該当オクテットのマスク値」 と覚えると速いです。
小問:192.168.1.100/26 のネットワークアドレスは次のうちどれ?
A. 192.168.1.0
B. 192.168.1.64
C. 192.168.1.96
D. 192.168.1.128
正解:B 。/26 はブロックサイズ 64 なので、第 4 オクテットは 0/64/128/192 で区切られる。100 は 64 〜 127 のブロックに入るため、ネットワークアドレスは 192.168.1.64 、ブロードキャストは 192.168.1.127、ホスト範囲は .65〜.126(62 個)。A は /24、C は /27 の境界、D は次のブロック。
もっと詳しく:CIDR 表記の便利さ
CIDR 表記はサブネット計算と 経路集約 の両方で威力を発揮します。たとえば 192.0.2.0/24 と 192.0.3.0/24 は隣接する 2 つの /24 ですが、これらの上位 23 ビットは同一なので、ルータのテーブルでは 192.0.2.0/23 という 1 行に 集約(supernetting) できます。世界中の経路を運ぶ BGP ルータでは、この集約により内部テーブルを 数万 〜 数十万行のオーダに抑えています。さらに、最長一致(Longest Prefix Match) 原則によって、より具体的な経路(より長いプレフィクス)を優先するため、集約しつつ細かい例外も同時に表現できます。
プライベート IP の使いどころ
プライベート IP は組織内部だけで通用する「合言葉」のようなアドレスです。インターネット側に出るときは必ず グローバル IP に変換 される必要があり、その役を担うのが次節の NAT です。
家庭(典型)
192.168.1.0/24
192.168.1.10
192.168.1.11
192.168.1.1
(GW)
大学・大企業
10.0.0.0/8
10.20.5.32
10.20.5.99
10.30.1.5
中規模オフィス
172.16.0.0/12
172.16.3.20
172.20.4.5
172.31.7.1
3 つの組織は同じ「10.x.x.x」「192.168.x.x」を自由に使っても、外には出ないので衝突しない。
図の見方:左から「家庭(192.168/16)」「大学・大企業(10/8)」「中規模(172.16/12)」が典型的な使い分け。これらの内部アドレスはインターネット上のルータに来ても そのまま破棄 されるため、世界中で重複していて構いません。
NAT / NAPT ─ 1 つのグローバル IP を共有する仕組み
家庭の Wi-Fi ルータには「PC・スマホ・テレビ・スマートスピーカ…」と多数の機器がぶら下がりますが、ISP から割り当てられたグローバル IP は通常 たった 1 つ 。それでも全機器が同時にネットを使えるのは、NAT(Network Address Translation) ─ 厳密には NAPT(Network Address Port Translation、別名 IP マスカレード) ─ のおかげです。
POINT
NAT = ルータが 送信元 IP を書き換える 仕組み
NAPT(PAT) = それに加え 送信元ポート番号も書き換える 。これにより 1 つのグローバル IP で複数台 が同時にインターネットに出られる(現代の家庭ルータはほぼ全てこちら)
3 つの NAT 種別
種類 変換規則 用途
静的 NAT (1:1)内部 IP ↔ 外部 IP を 固定 で対応 社内サーバを外部公開する DMZ など
動的 NAT (N:M)複数の外部 IP プールから その都度割り当て 外部 IP をある程度確保している中規模組織
NAPT / PAT(過負荷) 1 つの外部 IP に ポート番号で多重化 家庭・小規模オフィスの 事実上の標準
NAPT の動作 ─ 4 ステップで追う
プライベートネットワーク
192.168.1.0/24
192.168.1.2
192.168.1.4
NAT ルータ
外: 133.71.102.193
インターネット
162.21.35.100
Web サーバ:80
送信元: 192.168.1.2:17463
宛先: 162.21.35.100:80
変換テーブルに登録
192.168.1.2:17463
⇔ 133.71.102.193:38261
送信元: 133.71.102.193:38261
宛先: 162.21.35.100:80
宛先: 133.71.102.193:38261
→ テーブル参照 → .1.2:17463 へ復元
ステップ 1:内部から発信。 192.168.1.2 のホストが、Web サーバ 162.21.35.100:80 に対して 送信元ポート 17463 (OS が動的に選んだエフェメラルポート)でリクエストを送ります。この時点でパケットの送信元は プライベート IP なので、そのままインターネットには出せません。
ステップ 2:NAT ルータがエントリを作成。 ルータは「192.168.1.2:17463 ⇔ 133.71.102.193:38261 」という変換対を内部の NAT テーブル に登録します。外部側のポート 38261 は重複しないようルータが動的に選びます。これで「戻り便のラベル」が用意できました。
ステップ 3:書き換えて転送。 ルータは送信元 IP・送信元ポートを 133.71.102.193:38261 に書き換えてからインターネット側へ送出します。Web サーバから見ると、リクエストはルータから来たように見えます(内部 PC の存在は隠蔽されている)。
ステップ 4:戻り便を逆変換。 Web サーバは 133.71.102.193:38261 宛てに応答します。ルータはこの宛先ポート 38261 で NAT テーブルを引き、192.168.1.2:17463 に戻して内部へ届けます。同時に別の PC(192.168.1.4) が同じサーバへアクセスしていても、ポートが違えば別エントリになるため混ざりません。
◀ 戻る
次へ ▶
⟳ 最初に戻る
1 / 4
図の見方:NAT ルータは 外向きパケットでテーブルを作り 、戻り便はテーブルを引いて逆変換 します。鍵は「送信元ポート番号」を多重化に使うこと。これが NAPT(=現代の NAT) の本質です。
NAT のアニメーション(IP/ポート書き換え)
パケットがどこで書き換わるかを、循環アニメーションで観察します。再生・一時停止・巻き戻しで、送信元の IP/ポートが変わる瞬間 に注目してください。
192.168.1.2
NAT ルータ
送信元書き換え
.1.2:17463 → .102.193:38261
162.21.35.100:80
送:192.168.1.2:17463
宛:162.21.35.100:80
送:133.71.102.193:38261
宛:162.21.35.100:80
▶ 再生
⏸ 一時停止
⟳ 最初から
図の見方:左半分(青パケット)は内部 IP/ポートのまま、NAT ルータを通過すると右半分(ピンクパケット)に書き換わります。宛先 IP/ポートは変わらず、送信元側だけが書き換わるのがポイント。
NAT の問題点
NAT は IPv4 の延命策として偉大ですが、副作用も多くあります。
外側から内側へ 能動的に 接続できない ─ 戻り便の逆変換は外向き発信で作ったテーブルが頼りなので、外部からいきなり「192.168.1.2 のサーバへ」とは届かない(別途 ポートフォワーディング 設定が必要)
エンドツーエンド原則の違反 ─ 中間装置がパケット中身を書き換える設計は、IP の本来の哲学(両端だけが意味を持つ)に反する
セッション保持タイマ ─ NAT テーブルは無通信が一定時間続くとエントリが消える。長時間アイドルの TCP 接続が切られる原因になる
P2P・VoIP・オンラインゲームでの困難 ─ 双方が NAT 内にいると直接接続できず、STUN/TURN/ICE や UDP ホールパンチング といった迂回テクニックが必要
IPsec などの一部プロトコルが壊れる ─ ヘッダの書き換えが完全性検査に引っかかる(NAT トラバーサル拡張で対応)
こうした問題こそが、根本的な解(=IPv6 でアドレス枯渇を本当の意味で解消する) を進める動機になっています。
ICMP ─ ネットワーク層の「お知らせ係」
ICMP(Internet Control Message Protocol、RFC 792) は、IP の補助として エラー通知や診断 を担うネットワーク層プロトコルです。「届かなかった」「TTL が切れた」「もっと良い経路がある」など、ホスト・ルータ間の連絡係を担当します。IPv4 ヘッダの Protocol = 1 で識別されます。
POINT
ICMP は 独立したプロトコルでありながら IP の上で動く (IP データグラムのペイロードに ICMP メッセージを格納する)。アプリ層に位置するわけではなく、ネットワーク層の補助 と理解する。
主要な ICMP メッセージ種別
Type 名称 用途
0 Echo Reply ping の応答
3 Destination Unreachable 宛先到達不能(Code でさらに細分:Network/Host/Port Unreachable、Fragmentation Needed 等)
5 Redirect 「もっと良いゲートウェイがあるよ」とホストに通知
8 Echo Request ping の問い合わせ
11 Time Exceeded TTL が 0 で破棄(traceroute の動作原理)
12 Parameter Problem ヘッダに不正なフィールドあり
ping の仕組み
ping は最も使われる ICMP 利用ツールです。指定ホストへ Echo Request(Type 8) を送り、相手が Echo Reply(Type 0) を返してくるかを確認することで、到達性と RTT(Round Trip Time)を測定します。
クライアント
サーバ
ICMP Echo Request(Type 8)
ICMP Echo Reply(Type 0)
RTT = Echo Reply の到着時刻 − Echo Request の送信時刻
図の見方:ping は ICMP Type 8 を投げて Type 0 の応答を待つだけ、というシンプルなプロトコル。RTT が分かるので、ネットワーク遅延の概算も測れます。
traceroute の仕組み ─ TTL の絶妙な利用
traceroute (Windows では tracert )は、宛先までの経路上の各ルータを 1 つずつ「炙り出す」ツールです。仕組みは TTL を巧みに使ったハックそのものです。
TTL=1 でパケットを送る → 1 台目のルータで TTL が 0 になり破棄。そのルータが ICMP Time Exceeded(Type 11) を返す → 1 ホップ目のルータ IP が判明
次に TTL=2 で送る → 2 台目のルータで破棄 → そこから ICMP が返る → 2 ホップ目が判明
これを TTL=3, 4, 5… と増やしながら繰り返し、最終的に 宛先ホスト到達(Echo Reply または Port Unreachable) まで進める
結果として 送信元から宛先までの経路上のすべてのルータ がリストアップできる
実装によって、UNIX 系の traceroute は UDP の高ポート番号 を使い、宛先到達時は ICMP Port Unreachable を引き出します。Windows の tracert は ICMP Echo Request を使うので動作が少し異なります。いずれも TTL 操作 + ICMP Time Exceeded が核となる発想です。
ICMP がブロックされると?
もっと詳しく:ICMP がブロックされると何が困る
セキュリティ上の理由で ICMP をすべてフィルタリングする組織がありますが、過度なブロックは副作用が大きいです。
Path MTU Discovery が壊れる :途中ルータからの ICMP Fragmentation Needed が届かないと、送信側はパケットサイズを学習できず、通信が「謎の沈黙」で停止する(PMTUD ブラックホール )。HTTPS で「最初は応答するが途中で止まる」典型的症状の原因になる
traceroute 不能 :Time Exceeded が返らないと経路追跡できず、障害切り分けが困難になる
ping 不能 :単純な到達性確認すらできず、運用監視に支障が出る
到達不能エラーの早期通知が止まる :存在しないポートに接続したとき、本来は ICMP Port Unreachable で即時に「失敗」と分かるが、これが返らないとアプリ側がタイムアウトまで待つことになる
実務上は 「全ブロック」ではなく Type ごとに選別」 (例えば Type 3 と Type 11 は通す、Type 8/0 は内→外のみ許可、など)が推奨されます。
IPv6 の基本ヘッダとできること
IPv4 の 32 ビット(約 43 億個) では世界の機器を到底まかないきれない、というのは 1990 年代から自明でした。NAT は時間稼ぎの応急処置で、本質的な解決は IPv6 へのアップグレードです。ここでは、IPv6 の 基本ヘッダ を読み、どんな通信サービスを作りやすくなるのかを考えます。
IPv6 基本ヘッダフォーマット
IPv6 基本ヘッダ = 固定 40 バイト
32 bit 幅の行を 10 行並べる。オプションは基本ヘッダの外に「拡張ヘッダ」としてつなぐ
0
4
12
31 bit
Version
4 bit
Traffic Class
DSCP / ECN
Flow Label
同じ通信の流れを識別するヒント
Payload Length
Next Header
TCP / UDP / 拡張
Hop Limit
IPv4 の TTL 相当
Source Address
送信元 IPv6 アドレス(128 bit)
例: 2001:db8:1234::10
Destination Address
宛先 IPv6 アドレス(128 bit)
例: 2001:db8:abcd::80
拡張ヘッダへつなげる
ヘッダチェックサムなし
ルータは断片化しない
基本ヘッダは固定長
図の見方:IPv6 は基本ヘッダを 固定 40 バイト にし、ルータが毎回処理する部分を単純化している。IPv4 の Header Checksum はなく、TTL は Hop Limit に変わる。TCP/UDP なのか、IPv6 の拡張ヘッダが続くのかは Next Header で示す。
IPv4 と IPv6 の違い
項目 IPv4 IPv6
アドレス長 32 bit(約 43 億) 128 bit(約 3.4×1038 )
ヘッダ長 20 バイト(可変・チェックサムあり) 40 バイト(固定・チェックサム廃止)
表記 10 進・ドット区切り(192.0.2.10 ) 16 進・コロン区切り(2001:db8::1 、連続する 0 は :: に省略)
断片化 ルータが行える ルータは行わない(送信元のみ)→ PMTUD 必須
NAT の必要性 事実上必須 本来不要(全機器がグローバル IP を持てる)
近隣探索 ARP(リンク層) NDP(ICMPv6 で実装)
次のプロトコル Protocol フィールド Next Header フィールド。TCP/UDP/ICMPv6 や拡張ヘッダを順につなぐ
IPv6 アドレスは 16 ビットずつ 8 つのフィールド をコロンで区切って表記します。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334 。各フィールド先頭の 0 は省略でき、連続する 0 のフィールドは :: 1 回だけ使ってまとめて省略できます(2001:db8:85a3::8a2e:370:7334 )。
どんなサービス設計につながるか
IPv6 の価値は「アドレスが長い」だけではありません。ヘッダを見ると、IPv6 がどんなサービスを作りやすくしようとしているかが見えてきます。
IPv6 で作りやすくなるサービスの例
一意なグローバルアドレス :家庭内の機器、センサ、カメラ、サーバに直接到達する設計がしやすい。NAT 越えやポート転送に頼りすぎない遠隔監視・P2P・オンラインゲームなどにつながる
Traffic Class / Flow Label :同じ映像通話、ゲーム通信、音声通信などを「1 つの流れ」として識別するヒントを持てる。QoS や混雑制御と組み合わせると、リアルタイム通信を扱いやすくなる
Next Header / 拡張ヘッダ :基本ヘッダを固定長のまま保ち、追加機能は後ろにつなぐ。ルータの通常転送は軽くしつつ、必要な機能を拡張できる
NDP / ICMPv6 :ルータ広告(RA)や SLAAC により、端末が自分で IPv6 アドレスを構成できる。多数の端末が出入りするネットワークで扱いやすい
注意: IPv6 にすると自動的に安全・高速になるわけではありません。外から到達しやすくなるぶん、実際のサービスでは ファイアウォール、認証、暗号化、DNS、運用監視 が必要です。IPv6 は「直接つなぎやすい土台」を提供し、どこまで公開するかはネットワーク設計で決めます。
まとめと用語チェック
SUMMARY
1. ネットワーク層は フォワーディング(高速転送) と ルーチング(経路計算) の 2 機能を担う
2. IPv4 ヘッダは基本 20 バイト。Version/IHL/ToS/Total Length/Identification/Flags/Fragment Offset/TTL/Protocol/Header Checksum/送信元・宛先 IP の 11 フィールド
3. 断片化 は MTU 超過時のルータでの分割。TTL は無限ループ防止の残ホップカウンタ
4. アドレス割り当ては クラスフル(歴史) から CIDR(現代) へ。プレフィクス長 /n で柔軟に区切れる
5. サブネット計算 = IP と マスク の論理積 でネットワークアドレス、ホスト部全 1 でブロードキャスト
6. RFC 1918 プライベート IP:10/8 、172.16/12 、192.168/16
7. 家庭ルータの NAT は実は NAPT 。送信元 IP+ポート を書き換えて 1 つのグローバル IP で多重化
8. ICMP は IP の補助。Echo(ping) 、Destination Unreachable 、Time Exceeded(traceroute) 、Redirect が代表
9. IPv6 は 128 bit アドレスと固定 40 バイトの基本ヘッダを持つ。Traffic Class / Flow Label / Next Header により、流れの識別・拡張・上位プロトコルの受け渡しを表せる
用語チェック
用語 1行説明
データグラム ネットワーク層のパケット。IP では IP データグラム
サブネット ルータで区切られた1つの IP ネットワーク。同じネットワーク部を共有
IHL(Internet Header Length) IP ヘッダ長を 4 バイト単位で表すフィールド
TTL(Time to Live) ホップごとに減るカウンタ。0 で破棄、ループ防止
MTU リンク層で運べる最大バイト数(Ethernet 標準 1500)
断片化(フラグメンテーション) MTU 超過時にデータグラムを分割する処理
Path MTU Discovery パス全体の最小 MTU を学習し断片化を回避する仕組み
クラスフルアドレス 1981〜のアドレス分類(A/B/C/D/E)。現在は廃止
CIDR クラスを廃止し、プレフィクス長を可変にした現代のアドレス方式
サブネットマスク ネットワーク部を 1、ホスト部を 0 で表す 32 ビットマスク
ネットワークアドレス サブネットの先頭(ホスト部全 0)。サブネット自体の識別
ブロードキャストアドレス サブネットの末尾(ホスト部全 1)。同サブネット全員宛
最長一致(Longest Prefix Match) ルータが複数経路から最もプレフィクスが長いものを選ぶ規則
RFC 1918 プライベート IP アドレス範囲の規定文書
NAT / NAPT(IP マスカレード) 内部 IP を外部 IP に変換する仕組み。NAPT はポートも多重化
ICMP IP の補助で動くエラー通知・診断プロトコル(Protocol=1)
Echo Request / Reply ping で使う ICMP メッセージ(Type 8 / 0)
Time Exceeded TTL 切れで返る ICMP(Type 11)。traceroute の核
Destination Unreachable 宛先到達不能を通知する ICMP(Type 3)
ループバック(127.0.0.1) 自ホスト宛て。ネットワークに出ない
IPv6 基本ヘッダ 固定 40 バイト。Version、Traffic Class、Flow Label、Payload Length、Next Header、Hop Limit、送信元/宛先アドレスを持つ
Flow Label IPv6 で同じ通信の流れを識別するためのフィールド。リアルタイム通信や QoS 設計のヒントになる
Next Header IPv6 で次に続く TCP/UDP/ICMPv6 や拡張ヘッダの種類を示すフィールド
NDP(Neighbor Discovery Protocol) IPv6 で ARP 相当やルータ広告、アドレス自動設定に関わる ICMPv6 ベースの仕組み
NEXT: 次回の
標準 編では、本講で軽く触れた
NAT の動的補助となる
DHCP(IP アドレスの自動配布) を扱い、家庭・組織ネットワークの実運用を完成させます。さらに
標準 編のルーティング ではルーチングテーブルが
RIP/OSPF/BGP によってどう作られるかに進みます。
確認問題
問1. IPv4 ヘッダの TTL フィールドの主目的として、最も適切なものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. パケットの優先度を示し、QoS 制御に用いる
B. パケットを暗号化する鍵を識別する
C. ルータを通るたびに減算され、0 になったら破棄することでループを防ぐ
D. パケットの本文の長さをバイト単位で示す
正解:C
TTL(Time to Live)は本来「秒数」として設計されたが、実際にはホップカウンタとして運用されている。各ルータで 1 ずつ減算され、0 になったルータがパケットを破棄して送信元に ICMP Time Exceeded を返す。これによりルーチング異常で循環するパケットが網内を永遠にさまようのを防ぐ。A は ToS(DSCP) の役割、B は IP には存在しない、D は Total Length の役割。
問2. 192.168.10.130/26 のホストが所属するサブネットのネットワークアドレスとして正しいものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. 192.168.10.64
B. 192.168.10.128
C. 192.168.10.192
D. 192.168.10.0
正解:B
/26 はホスト部 6 ビット、ブロックサイズ 64。第 4 オクテットは 0 / 64 / 128 / 192 で区切られる。130 は 128 〜 191 のブロックに入るため、ネットワークアドレスは 192.168.10.128 、ブロードキャストは 192.168.10.191、ホスト範囲は .129〜.190。A は前のブロック、C は次のブロック、D は /24 の場合の答え。
問3. 家庭用ルータが行う NAPT(IP マスカレード) に関する記述として、最も適切なものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. パケットの本文を暗号化することで、外部から内部の通信を保護する仕組み
B. 内部 IP と外部 IP を 1:1 で固定的に対応付ける仕組み
C. ドメイン名から IP アドレスを引く名前解決の仕組み
D. 送信元 IP に加えて送信元ポート番号も書き換えることで、1 つのグローバル IP に複数台が同時に出られるようにする仕組み
正解:D
NAPT(Network Address Port Translation、別名 IP マスカレード)は、内部 PC ごとに送信元ポートを書き換えて多重化することで、1 つのグローバル IP で複数台のインターネット接続を実現する。A は VPN/IPsec の話、B は静的 NAT(1:1)で NAPT とは別、C は DNS の話で全く別。
問4. traceroute が経路上の各ルータを特定するために利用する ICMP メッセージは、主にどれか。
次の選択肢から最も適切なものを選択してください。
A. Time Exceeded(Type 11)
B. Echo Reply(Type 0)
C. Redirect(Type 5)
D. Source Quench(Type 4)
正解:A
traceroute は TTL を 1 から順に増やしながら送信し、各ホップのルータが「TTL が 0 になりました」と返す ICMP Time Exceeded(Type 11) の送信元 IP を集めることで経路を特定する。B は ping の応答、C は経路変更案内、D は古い輻輳通知(現在は廃止) であり、いずれも traceroute の主役ではない。
問5. RFC 1918 で プライベート IP アドレス として定義されている範囲の組み合わせとして、正しいものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. 10.0.0.0/8 / 169.254.0.0/16 / 192.168.0.0/16
B. 10.0.0.0/8 / 127.0.0.0/8 / 192.168.0.0/16
C. 10.0.0.0/8 / 172.16.0.0/12 / 192.168.0.0/16
D. 10.0.0.0/8 / 172.16.0.0/16 / 192.168.0.0/24
正解:C
RFC 1918 のプライベート IP は 10.0.0.0/8(クラス A 相当・1 個) 、172.16.0.0/12(クラス B 相当・16 個) 、192.168.0.0/16(クラス C 相当・256 個) の 3 つ。A の 169.254/16 はリンクローカル(APIPA)で別物、B の 127/8 はループバック、D は 172.16/12 を /16 と誤記している。「テン・ヒトナナサンジュウニ・ヒトキュウニ 」のように覚えると忘れにくい。