静的ルーティングテーブル

Linuxでは、フォワーディングインフォメーションベース(fib)という名前が付けられている。

大きなルーティング情報を高速に検索できるよう下図のような構成になっている。ルーティング情報は、各ネットマスク毎にゾーンに分割され管理される(fn_zone構造体)。各ゾーンでは、ルーティング情報(fib_node)がハッシュ管理される。

ルーティング情報検索時(fn_hash_lookup関数)にはネットマスクの大きい方(fn_zone_listに継っているfn_zone)から順に検索を開始する。各ゾーン毎にhash管理されているfib_nodeに目的とするものがないかチェックを行い、目的のものが見つかった場合その情報を返却する。

img91.gif

更にこのテーブルは、処理効率化のため二つのグループに分割して管理されている。一つは、ユニキャスト(あるホストへの直接送信)とgateway経由の送信の経路情報を管理するmain_tableである。もう一つはローカルマシン上の転送経路、ブロードキャスト、マルチキャストを管理するlocal_tableである。(コンフィギュレーションにより、更に複数のテーブルに分割して 管理することも可能)

関数説明

ルーティング情報の追加削除は、明示的に行わねばならない。ネットワークインターフェイスのUP/DOWNもしくは、routeコマンドによる操作である。最終的には下記関数が呼び出され、ルーティング情報の更新が行われる。

  • fib_lookup(), fn_hash_lookup()
    • 目的とするアドレスへ到達するためのルーティング情報を検索する。
  • fn_hash_insert()
    • ルーティング情報を追加する。ip_rt_ioctl関数から呼び出される。
  • fn_hash_delete()
    • ルーティング情報を削除する。ip_rt_ioctl関数から呼び出される。

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1