こんにちは!ネットワークの世界へようこそ。インフラエンジニアとして日々ルーターやスイッチと格闘している私ですが、ネットワークの勉強を始めたばかりの頃は、「ルーターって、どうやってパケットの行き先を瞬時に判断しているんだろう?」と不思議に思ったものです。
たくさんの道(経路)がある中で、ルーターは迷うことなく目的地へパケットを送り届けてくれますよね。今回は、その魔法のような仕組みの裏側にある「最長一致マッチング(Longest Prefix Match)」について、郵便配達の例えを交えながら、一緒に優しく紐解いていきましょう!一歩ずつ理解していけば、決して難しくありませんよ。
—
1. 宛先不明のパケットを救え!ルーターの迷わない仕組み
私たちが普段何気なく見ているWebサイトの閲覧も、動画の視聴も、すべては「パケット」という小さなデータの小包に分解され、ネットワークの海を旅しています。このパケットの切手代わりのようなものとして貼られているのが、おなじみの IPアドレス ですよね。
ネットワークの世界に飛び込んだばかりの頃は、「ルーターはIPアドレスを見て転送している」と聞いて、「じゃあ、ルーターの中には世界中のすべての住所録が詰まっているの?」と驚いたものです。でも、考えてみてください。インターネット上には何十億ものデバイスが存在します。そんな膨大なリストを一件ずつ探していたら、パケットが届く前にコーヒーが何杯も冷めてしまいますよね。
そこでルーターが使っているのが、「ルーティングテーブル(経路制御表)」という、いわば道路の案内板です。この案内板には、「このあたりの住所の荷物は、あっちの方向へ投げろ」という大まかなルールが書かれています。
そして、そのルールが何重にも重なっているときに、ルーターが「どれを一番信用すべきか」を決める最強の判断基準こそが、今回学ぶ 「最長一致マッチング」 なんです!
—
2. 郵便配達員に学ぶ「最長一致マッチング」の正体
この仕組みを一番直感的に理解できるのが、私たちの身近にある「郵便配達」の例えです。
想像してみてください。あなたが東京の「東京都港区六本木 1-2-3」という住所宛てに手紙を出したとします。
地方の大きな配送センター(ルーター)の仕分け棚には、次のようなルール(案内板)が貼られていました。
1. ルールA: 「東京都」宛ての荷物は、「東日本行き」のトラックへ!
2. ルールB: 「東京都港区」宛ての荷物は、「港区エリア担当の支店行き」のトラックへ!
3. ルールC: 「東京都港区六本木 1-2-3」宛ての荷物は、「六本木一丁目担当の郵便屋さんのカバン」へ!
さあ、この手紙を受け取った配達員さんは、どのルールに従うでしょうか?
「東京都」だからルールA? いやいや、それだと大ざっぱすぎて港区までしか届きませんよね。そう、配達員さんは「より詳細に、より具体的に場所を指定しているルール」を本能的に選びますよね。この場合、一番宛先を細かく(長く)特定している「ルールC」を選ぶはずです。
ネットワークの世界でも全く同じことが起きているんです。これを専門用語で、一致するプレフィックス(ネットワーク部を表すビット)の長さが一番長いものを選ぶ、という意味で 「最長一致マッチング」 と呼んでいます。
—
3. ネットワークの世界でどう動く?CIDRとサブネットマスクの魔法
実際のルーターの設定を覗いてみながら、もう少し技術的な側面も見ていきましょう。「一歩ずつ理解していきましょう!」と言ったので、難しいビット計算の前に、まずは見慣れたIPアドレスとマスクの形で見てみますね。
例えば、ルーターのルーティングテーブルに以下のようなエントリが登録されていたとします。
# ルーティングテーブルのイメージ
宛先ネットワーク (プレフィックス) / マスク長 -> 次の転送先 (Next Hop)
--------------------------------------------------------------------------------
192.168.0.0 / 16 -> 経路A(大きなエリア用)
192.168.1.0 / 24 -> 経路B(中くらいのエリア用)
192.168.1.128 / 25 -> 経路C(ピンポイントのエリア用)
ここで、192.168.1.150 というIPアドレスを持ったパケットがルーターに到着したとします。
このパケットの宛先は、先ほどのテーブルのどのルールに当てはまるでしょうか?
実は、上から順に見ていくと……
192.168.0.0 / 16に……当てはまる!(上位16ビットが一致)192.168.1.0 / 24に……これも当てはまる!(上位24ビットが一致)192.168.1.128 / 25に……なんと、これも当てはまる!(上位25ビットが一致)
すべての条件にヒットしてしまいました。ここでルーターが迷子になるかというと、そんなことはありません。ルーターはここで「最長一致マッチング」のルールを思い出します。
- マスク長が一番長い(=より細かく絞り込まれている)のはどれだ?
/16より/24、/24より/25だ!
したがって、ルーターは最もマスク長が長い 経路C を採用し、パケットを迷うことなくその方向へ送り出すのです。これが、インターネット全体の効率的な経路選択(CIDR:クラスレスIPアドレス運用の根幹)を支えている美しい仕組みなんです。
—
4. 実務で確認!Linuxルーターでのルーティングテーブル設定例
「理屈は分かったけれど、実際の現場ではどう設定して、どう確認するの?」という声が聞こえてきそうですね。
それでは、実務の現場やクラウド(AWSやGCPなど)の仮想ルーター、あるいはLinuxサーバーでよく使われる ip コマンドを使って、実際のルーティングテーブルを覗いてみましょう。
ターミナルを開いて、以下のコマンドを叩いたと仮定してください。
# 現在のルーティングテーブル(経路情報)を表示するコマンド
$ ip route show
# 【実行結果の例】
default via 192.168.1.1 dev eth0 proto dhcp metric 100
10.0.0.0/8 dev eth1 proto kernel scope link src 10.1.1.50
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
192.168.1.128/28 dev eth0 proto static metric 50
ここで注目してほしいのは、/8、/24、/28 という「プレフィックス長(マスクの長さ)」です。
もしあなたが 192.168.1.140 当てに通信を行おうとしたとき、OSやルーターのカーネルは、手元の 192.168.1.0/24 と 192.168.1.128/28 の両方にマッチすることに気づきます。
しかし、OSは最長一致マッチングの原則に従い、よりプレフィックス長が長い(具体的である) 192.168.1.128/28 の経路を優先してパケットを送り出します。
トラブルシューティングの現場で、「あれ、意図したルートを通らずに変なところへパケットが飛んでいくぞ?」というときは、このルーティングテーブルのマスク長を見落としていることが原因だったりするんです。「あ、ここに長いマスクのエントリが隠れていたのか!」と気づけたときの快感は、インフラエンジニアの醍醐味の一つですね。
—
5. おわりに:日々のネットワークを支える「優しさ」のアルゴリズム
今回は、ルーティングの根幹を支える「最長一致マッチング」について紐解いてきました。
一見すると難解なアルゴリズムの名前も、私たちの身近にある「郵便配達の仕組み」や「より細かい条件を優先する」という日常の感覚に置き換えてみると、とても自然で理にかなった仕組みであることが分かりますよね。
ゼロトラストやクラウド全盛の現代であっても、パケットが物理的・論理的なルーターを飛び交い、宛先を求めて進むというネットワークの基本原則は変わりません。日々のインフラ運用やトラブルシューティングでルーティングテーブルと向き合うとき、この記事の「郵便配達の例え」を少しだけ思い出していただけたら、これほど嬉しいことはありません。
それでは、また次回の技術解説でお会いしましょう!快適なネットワークライフを!
コメント