ルーティングテーブル

コンピュータネットワークにおける**ルーティングテーブル**とは、ルーターやネットワーク接続されたコンピュータが持つ、個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造である。また、場合によってはそれらの経路ごとのメトリックも含み、**ルーティング情報ベース** (**RIB**) とも呼ぶ。ルーティングテーブルはそのノード周辺のネットワーク・トポロジーについての情報を含む。ルーティングテーブルの構築はルーティングプロトコルの主要な目的である。ルーティングテーブルには、ネットワーク・トポロジーの探索手続きで自動的に収集した情報から得たものだけではなく、元々固定で入力された静的経路も登録される。

ルーティングテーブルは最近のルーターのアーキテクチャでは、一般に直接パケット転送に使われることはない。その代わりにパケット転送での経路選択を行うルーティングアルゴリズムで使用する経路情報のみを集めた転送情報ベース (FIB) というより小さめのテーブルを生成するのに使われる。FIBはハードウェアが格納・参照しやすい形に圧縮・変換して最適化した上で使用することが多い。本項目ではこのような実装上の詳細には立ち入らず、ルーティングや転送の情報サブシステム全体を「ルーティングテーブル」として参照する。

## 基本
ルーティングテーブルの考え方は、荷物の配送で地図を使うのとよく似ている。あるノードから別のノードにデータを送るとき、まず「どこ」へ送ればよいかを知る必要がある。そのノードが宛先のノードと直接繋がっていない場合、宛先ノードに向かう正しい経路上にある別のノードに送らなければならない。ほとんどのノードは自らどの経路をとればよいかを確認することはせず、自身が属するLANにあるゲートウェイにIPパケットを送り、ゲートウェイがそのデータの「パッケージ」を正しい宛先に送るための経路を判断する。それぞれのゲートウェイは様々なデータのパッケージの送付経路を覚えておく必要があり、そのためにルーティングテーブルを使う。ルーティングテーブルは地図のように経路を保持するためのデータベースであり、ゲートウェイはノードからそういった情報を要求されれば、それを提供できる。

ホップ-バイ-ホップ・ルーティングでは、それぞれのルーティングテーブルが全ての到達可能な宛先について経路上の次の送り先となるデバイスのアドレスを保持している。これを「ネクストホップ (next hop)」と呼ぶ。ルーティングテーブル群が一貫していると仮定すれば、ネクストホップにパケットを送ることでリレー式に送っていけば、必ず宛先ノードに到達できる。このホップ-バイ-ホップはIPネットワーク層およびOSIネットワーク層の基本的特性であり、それとは対照的にIPのエンドツーエンド機能やOSIトランスポート層の機能がある。最近のルーターは、ルーティングテーブルに対応した制御プレーンの機能と転送テーブル (FIB) に対応した転送プレーンの機能を分離したアーキテクチャとなっている。

## 機能
ルーティング処理において、ホストやルーターは判断を下すのにルーティングテーブルと呼ばれる経路に関するデータベースを利用する。ルーティングテーブルはルーターだけが持つとは限らない。ルーティングされるプロトコルによっては、ホストもルーティングテーブルを持つことがあり、個々のパケットの転送先として最もふさわしいルーターを選択するのに使われる。Internet Protocol ではホストがルーティングテーブルを持つことは任意であり、これは古いプロトコルである IPX でも同様である。

ルーティングテーブルのエントリには次の種類がある。

; *Network route*
: インターネットワーク内の特定のネットワークIDへの経路。それがゲートウェイの場合、IPアドレスの次にGフラグが表示される（routeコマンドの表示）
; *Host Route*
: 特定のネットワークアドレス（ネットワークIDとホストID）への経路。個別のネットワークアドレスへの経路を知的に決定でき、特定のトラフィックを最適化できる。ホストに対応している場合、IPアドレスの次にHフラグが表示される。
; *[[デフォルトルート|Default route]]*
: 宛先への経路がルーティングテーブル内に存在しない場合に使われる経路。ルーターやパーソナルコンピュータが宛先への経路を見つけられない場合にこの経路を使う。

## ルーティングテーブルにおける難題
ルーティングテーブル構築における大きな課題として、限られた記憶空間に多数の経路を記録する必要性が挙げられる。インターネットで現在よく使われているアドレス集約テクノロジーとして、Classless Inter-Domain Routing (CIDR) というビット単位のプレフィックス・マッチングを行う方式がある。

ネットワーク内では各ノードがおそらく妥当なルーティングテーブルを持っているので、それらのルーティングテーブル群は一貫していなければならず、さもなくばルーティングループが発生してしまう。これはホップ-バイ-ホップ型のルーティングモデルでは特に問題であり、ルーター間でルーティングテーブルが一貫していないとパケット転送時に無限ループに陥ることがある。ルーティングループはルーティングにおける古くからの問題であり、それを無くすことがルーティングプロトコル設計の大きな目標となっている。転送時にTTLを-1していき、0になったらそのパケットは破棄する手法等が用いられる。

## ルーティングテーブルの内容
ルーティングテーブルには少なくとも次の3つのフィールドが存在する。
# ネットワークID - 宛先のネットワークID
# コスト - その経路にパケットを送る際のコストまたはメトリック
# ネクストホップ - 最終的な宛先にパケットを送るために最初にそのパケットを送る相手。ゲートウェイ。

用途や実装にもよるが、経路選択の妥当性を高めるために次のような値を含むこともある。
# その経路の Quality of Service。例えば、routeコマンドのUフラグは、その経路が有効であることを示している。
# その経路のフィルタリング標準またはアクセスリストへのリンク。
# インタフェース - 例えば1つ目のイーサネットカードを eth0、2つ目のイーサネットカードを eth1 と表すなど。

ルーティングテーブルはまた、*[[Reverse path forwarding|unicast reverse path forwarding]]* (uRPF) などのある種のセキュリティ操作でも重要である。この技法にはいくつかバリエーションがあるが、ルーターがルーティングテーブルを使ってパケットのソースアドレスを参照する。ソースアドレスに戻って行く経路がルーティングテーブルにない場合、そのパケットが何らかの攻撃を意図したものと判断して転送しない。

## 脚注・出典

## 外部リンク
* IP Routing
* [The IP routing table](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc779122(v=ws.10)) - Microsoft TechNet - ネットワークの宛先、ネットマスク、ゲートウェイ、インタフェース、メトリックなどについての解説
* Static Routing Simulation