グローバルアドレスはネットワーク部とホスト部に分かれているの?
はじめに
- 先生: 今日はインターネットで使われるグローバルIPアドレスについて学びましょう。テーマはずばり「グローバルアドレスはネットワーク部とホスト部に分かれているの?」です。
- 生徒: よろしくお願いします!
シーン1:最初の疑問
生徒の質問
- 生徒: 先生、グローバルアドレスって本当にネットワーク部とホスト部に分かれているんですか?
先生の回答
- 先生: 結論から言うと「はい、分かれています」。どこがネットワーク部なのか、どこがホスト部なのかは サブネットマスク(CIDR) が決め手になります。
シーン2:ユニーク性の疑問
生徒の質問
- 生徒: でもグローバルアドレスは世界でユニークですよね? ネットワーク部とホスト部に分けたら、ホスト部がかぶってユニークじゃなくなりませんか?
先生の回答
- 先生: ポイントは「ネットワーク部+ホスト部=IPアドレス全体」でユニークということです。ネットワーク部が違えばホスト部が重複しても問題ありません。
シーン3:階層化は本当に必要?
生徒の質問
- 生徒: でもユニークなら階層化しなくても直接見つけられるのでは?
先生の回答
-
先生: 理論上は可能です。しかし 実際には以下の理由で非現実的 です。
-
経路表の爆発的増大
- インターネットには 40 億(IPv4)以上、IPv6 では天文学的な数のアドレスがあります。もしルーターが 個別 IP ごとに 経路を持てば、経路表は数十億~数兆エントリに膨れ上がります。これは現在のハードウェア容量をはるかに超えます。
-
経路探索の遅延
- ルーターはパケット転送のたびに経路表検索を行います。エントリ数が膨大だと、検索時間が増え、スループットが落ちます。階層化(ネットワーク部単位で経路をまとめる)ことで、検索対象が数十万行程度に抑えられ、実用的なスピードが出せます。
-
経路収束時間の短縮
- BGP などの動的ルーティングでは経路変化を隣接ルーターに伝播します。膨大な経路を広告すると、障害時の収束(コンバージェンス)に時間がかかり、通信断が長引きます。プレフィックス集約があるからこそ、影響範囲と収束時間を最小化できます。
-
運用コストの削減
- メモリ・CPU・電力コストが指数関数的に増大します。ISP や IX(インターネット交換ポイント)のインフラコストを抑えるためにも階層化は不可欠です。
-
-
先生: まとめると、階層化=住所の“県・市・番地”のような整理です。県(ネットワーク部)までわかれば、その県内の番地(ホスト部)の詳細はローカルの郵便局(ローカルルーター)が把握します。世界中の郵便局がすべての番地を覚える必要がないのと同じで、インターネットもネットワーク部で経路を集約することでスケーラブルに動いています。
シーン4:サブネットマスクの存在
生徒の質問
- 生徒: ということは、グローバルアドレスにも必ずサブネットマスクが付いているんですか?
先生の回答
- 先生: その通りです! グローバルIPは必ず CIDR 表記(例: /24, /16) のブロックで割り当てられます。ルーターはこれを手がかりにネットワーク部を判断します。
シーン5:IPv6ではどう?
生徒の質問
- 生徒: IPv6でも同じ考え方なんでしょうか?
先生の回答
- 先生: IPv6でも前半の プレフィックス(通常 /64) をネットワーク部、後半の インターフェースID をホスト部として使います。
シーン6:具体的なユースケース
生徒の質問
- 生徒: 実際にネットワーク部とホスト部が分かれていることが役立つ場面にはどんなものがありますか?
先生の回答
-
ISP のアドレス再配布
- ISP は
/16
や/24
のブロックを RIR から受け取り、顧客ごとにさらに細かいサブネットを配布。上位ルーターは ISP 単位の 1 行だけで経路を学習できる。
- ISP は
-
企業ネットワークのセグメント化
- 企業は拠点や部署ごとに
/24
のサブネットを割り当て、VLAN と組み合わせてトラフィックを分離。ホスト部はセグメント内でのみユニークなら OK。
- 企業は拠点や部署ごとに
-
クラウド VPC/サブネット設計
- AWS VPC では
/16
を VPC に割り当て、その中で/24
をサブネットとして切る。EC2 の IP はホスト部で管理され、ルートテーブルはサブネット単位でシンプルに。
- AWS VPC では
シーン7:ルーターはネットワーク部とホスト部をどう使う?
生徒の質問
- 生徒: ルーターがIPパケットの宛先を調べるときって、「ネットワーク部を先に見て、それがあったらホスト部を照会する」みたいな2段階の処理なんですか?
先生の回答
-
先生: とても良い質問です。実はルーターは、ホスト部は一切見ません。ルーターが見るのは 宛先IPアドレスのネットワーク部(=プレフィックス)だけ です。
-
先生: IPパケットの転送処理の流れはこうです:
- 宛先IPアドレスを受け取る(例:203.0.113.42)
- ルーティングテーブルの中から「最長一致(Longest Prefix Match)」するネットワークプレフィックスを探す(例:203.0.113.0/24)
- そのプレフィックスに対応する「次のルーター(ネクストホップ)」にパケットを送る
-
先生: このとき、ホスト部の値(例:.42)には全く注目していません。あくまで「どのネットワークに属するか」だけで転送先を決定します。
-
先生: そして、パケットが最終ネットワークに到達したときに、**そのネットワーク内の最終ルーター(ゲートウェイ)**がホスト部を見て、ARPなどでMACアドレスを解決してから目的の機器に届けるのです。
生徒のコメント
- 生徒: なるほど、途中のルーターはネットワーク部だけ見て転送するんですね。ホスト部を使うのは最後の段階だけなんだ!
シーン8:サブネットマスクは宛先に近づくと細かくなる?
生徒の質問
- 生徒: 送信先から受信先までの道のりで、中間ルーターはサブネットマスクが小さい値から、宛先に近づくにつれてサブネットマスクの値が大きくなっていくイメージで合ってますか?
先生の回答
-
先生: いい視点ですね。概念的には「だいたい合っている」と言えます。
- 通常、最初のルーターは大きなネットワーク(例:/8 や /16)単位でルーティングし、
- 宛先に近づくにつれて、より細かいネットワーク(例:/24 や /30)単位で詳細なルーティングを行う
という 階層的な設計 がなされています。
-
先生: ただし、これはあくまで 経路設計上の傾向であって、ルーターが「マスクの小さい順から順にたどっていく」わけではありません。実際には次のようなアルゴリズムで一発で判断されます。
シーン9:最長一致プレフィックスのアルゴリズム
生徒の質問
- 生徒: 宛先IPと一致する中で最も長いプレフィックス(Longest Prefix Match)って、どうやって探すんですか? 何かアルゴリズムがあるんですか?
先生の回答
- 先生: はい、ルーターでは高速なプレフィックス照合アルゴリズムが使われています。いくつか代表的な方法を紹介します:
-
トライ木(Trie)
IPアドレスを1ビットずつたどる木構造です。階層構造の中で最も長く一致するプレフィックスを見つけます。 -
Patricia Trie(圧縮トライ木)
同じビット列が続く部分をまとめて圧縮した構造。より高速で省メモリです。 -
Binary Search on Prefix Length
プレフィックス長を基準にバイナリサーチで照合する方法。実装がシンプルな代わりに規模が大きいと非効率です。 -
TCAM(Ternary Content Addressable Memory)
ハードウェアルーターが使用する専用メモリ。1クロックで複数のプレフィックスを並列比較できます。
- 先生: 特にインターネットルーターでは経路数が数十万以上になるため、これらの効率的なアルゴリズムが不可欠です。
まとめ
-
先生: ここまでのポイントを整理します。
- グローバルIPもネットワーク部とホスト部に分かれる。
- 階層化によりルーティング表を集約し、ネットワークをスケーラブルかつ高速に保てる。
- サブネットマスク (CIDR) が“どこまでがネットワーク部か”を決定する。
- IPv6 でも同じ構造。
結論
- 先生: したがって、グローバルアドレスはネットワーク部とホスト部に分かれていると言えます。そしてその仕組みこそが、インターネット全体のルーティングを効率化し、アドレスを重複なく管理できる鍵なのです。