ロンゲストマッチ
ルータが経路表から転送先を選ぶときの規則。宛先アドレスに一致する経路が複数あれば、プレフィックス長が最も長い(最も詳しい)経路を選ぶ。
イマシルちゃんの解説
ロンゲストマッチは、ルータが宛先IPアドレスに合う経路を選ぶための規則だよ。
経路表には、宛先となるネットワークの範囲と送り先が記録されているんだ。
IPアドレスの先頭何ビットをネットワークとして照合するかを表すのがプレフィックス長だよ。
宛先に当てはまる経路が複数あるときは、プレフィックス長が最も長い経路を使うんだ。
これなら広い範囲をまとめた経路を用意しつつ、一部の宛先だけ別の送り先にできるよ。
この解説はわかりやすかったですか?
より深い解説
一致する宛先の範囲を比べる
ロンゲストマッチでは、パケットの宛先IPアドレスが含まれる経路のうち、プレフィックス長が最も長いものを選ぶ。各ビットが0か1かを比べる範囲が長いほど、宛先を細かく指定した経路になる。
独自の例として、宛先10.1.2.3を次の経路表と照合する。
| 登録されている宛先 | 照合結果 |
|---|---|
| 0.0.0.0/0 | 一致する |
| 10.0.0.0/8 | 一致する |
| 10.1.0.0/16 | 一致する |
| 10.1.2.0/24 | 一致する範囲の中で最も詳しい |
| 10.2.0.0/16 | 一致しない |
この場合は10.1.2.0/24の経路を使う。選んだ経路に記録された次の転送先をネクストホップという。表の上から最初に一致した行を選ぶ方法でも、IPアドレスの数値が大きい行を選ぶ方法でもない。
すべてのIPv4アドレスに一致する0.0.0.0/0はデフォルトルートである。より詳しい一致がない場合に使う。利用できる一致経路が一つもなければ、パケットを破棄する。
一つのIPアドレスだけを指定する経路をホストルートという。IPv4ならプレフィックス長は32、IPv6なら128であり、そのアドレスに対する最も細かい指定となる。
経路表へ採用する判断と分ける
ルータは、静的な設定やOSPF、BGPなどから経路の候補を得る。候補から経路表を作る処理と、採用済みの経路を使ってパケットを転送する処理を分けて考える。
| 場面 | 比較するもの |
|---|---|
| 経路表へ採用する | 同じネットワークアドレスとプレフィックス長への候補を、情報源の優先順位や各プロトコルの選択規則で比べる |
| パケットを転送する | 採用済みの経路から、宛先に最も詳しく一致する経路を選ぶ |
Ciscoのアドミニストレーティブディスタンスは、異なる情報源から得た同一プレフィックスへの候補を比較する値である。OSPFのコストなどのメトリックも、経路の選択に使われる。これらをパケットが到着するたびに順番に計算し直すわけではない。
例えば、静的に設定した10.1.0.0/16と、OSPFで学習した10.1.2.0/24が両方採用されているとする。宛先10.1.2.3は後者へ送る。静的経路の情報源としての優先順位が高くても、広い範囲の/16が詳しい/24を押しのけることはない。
一方、静的経路とOSPF経路の両方が10.1.2.0/24なら、同じ宛先範囲への候補なので情報源の優先順位で選別する。値の設定と予備経路の使い方は、静的ルーティングの記事で扱う。
集約した範囲の一部を別に扱う
大きな宛先範囲をまとめる経路集約と、その一部を指定する詳しい経路は併存できる。例えばIPv6で2001:db8:abcd::/48をまとめて扱い、実際に使う2001:db8:abcd:3::/64への経路も用意する。
| パケットの宛先 | 一致する最も詳しい経路 |
|---|---|
| 2001:db8:abcd:3::1 | 2001:db8:abcd:3::/64 |
| 2001:db8:abcd:5::1 | 2001:db8:abcd::/48 |
この表では、ほかに詳しい経路がないものとする。/48をNullルートにしておけば、実在する/64宛てはその経路へ転送し、集約範囲の中で行き先を持たないパケットは破棄できる。/48のNullルートは、さらに広いデフォルトルート::/0よりも優先して選ばれる。
ただし、細かい経路が存在するだけで通信の成功が保証されるわけではない。選んだネクストホップが使えることと、相手側から戻る経路も確認する。誤った詳細経路を採用すると、正しい集約経路より先に選ばれてしまうため、広告する宛先の範囲を検証する必要がある。