【ルーティング③】転送先の決定とルーティングテーブル

routing-part3

何となくルーティングの動きは分かって来たんだけど、そもそもルータは転送先をどうやって決めてるの?勘で決めてるの?

チャーチルさん

ポン先生

もちろん勘で決めてる・・・訳じゃないよ。ちゃんと設定に基づいて決めているよ。

ルーティングの要はネクストホップの決定、つまり次の転送先を決める事です。しかし一般的にネクストホップの候補は複数あります。それらの候補からどのように決定しているのでしょうか?本記事はルーティングの基本的な内容になるので最低限マスターしましょう。

ルーティングの転送ルール

ルートは複数ある

ネクストホップを決めると言っても一般的な企業のネットワークであれば通常候補は1つ、冗長化していれば2つレベルです。なのでそこまで迷う要素が無いのは感覚的には分かるでしょうか。

ネクストホップの選択

一方、インターネットのような巨大なネットワークにもなれば多数のルートから選ぶ必要があります。例えばルートの候補が10個あれば10個を比較して最良ルートを選択する必要があります。

複数ルートから一つ選ぶ必要がある

ポン先生

ルートの候補が1個なのか10個なのかというのは単純に規模の違いだけだね。環境によって捌くルートの数は違うけど“ルーティング”という同じ仕組みの中でルートを選ぶ事に変わりは無いよ。

ネクストホップの決まり方

では複数のルートがある場合、どのようにネクストホップは決まるのでしょうか?結論としてはルータのルーティングテーブルに採用されれば決まります。ルーティングテーブルとは宛先セグメント⇔ネクストホップがセットになったリストの事です。例えばCiscoルータの場合、下記のようなルーティングテーブルを持っています。

ルーティングテーブル例(Cisco)

上記の例だと『172.16.4.0/24宛に送りたいときはネクストホップ172.16.1.2に転送すれば良い』ということが分かります。ルータは宛先毎に毎回ネクストホップを一から考えるのではなく既に持っているルーティングテーブルを参照して決定しています。ルーティングの設計とはどのようなルーティングテーブルにするかを考える事、と言っても良いでしょう。

複数の候補(ルート)があってもルーティングテーブル上でビシッと道が決まってればルータは迷わず転送できるって事なんだね。

チャーチルさん

ポン先生

逆にルーティングテーブルに無い宛先IPの通信が来たら、ルータも転送先が分からないのでその通信は破棄されちゃうよ。

ルーティングテーブルの設定

ではルーティングテーブルはどのように設定すれば良いのでしょうか?ルーティングには大きく分けてスタティックルーティングダイナミックルーティングがあります。それぞれの特徴を見ていきましょう。

スタティックルーティング

スタティックルーティングとはルータ一台ずつ手動で設定され動作するルーティングの事です。例えば『10.0.0.0/24宛の通信はネクストホップ172.16.20.2に送れ』と言うような内容のルーティング設定をルータに設定します。

スタティックルーティング

後述するダイナミックルーティングと比較すると、ルータは設定された通りに転送するだけなので安定して動作し、CPUなどのリソース消費も少なくなります。

一方、管理者は全てのセグメント情報を把握した上でルータを設定する必要があります。例えばセグメントが増えた場合はその都度対向側のルータにルートを追加する必要があります。また、セグメント削除時に対向ルータのルート削除が必要、障害発生時の自動切り替わり不可、等々メンテナンスの手間・冗長性という意味でのデメリットもあります。

ダイナミックルーティング

ダイナミックルーティングとはルータ間での動的な情報交換によって動作するルーティングの事です。各ルータにはダイナミックルーティングの設定を適応します。隣のルータとダイナミックルーティングの設定が合えば、その後は動的にルート情報を交換します。

ダイナミックルーティング

特徴はスタティックルーティングの逆です。定期的に隣接ルータとの情報やり取りやルーティングテーブルの更新があるので(スタティックルーティングと比較すると)CPU等のリソース消費が多くなります。

一方、別の場所でセグメントが追加された際のメンテナンスは不要です。スタティックルーティング構成であれば各ルータに設定追加が必要ですが、ダイナミックルーティング構成では動的にルーティングテーブルに追加されるため管理者の負担は減ります。

また、障害等であるセグメントがダウンした場合も同様にルーティングテーブルから消えますし、バックアップルートがあれば自動的に切り替わります(ルーティングの冗長化)。

スタティックルーティング or ダイナミックルーティングの比較と選択

単純に機能としてはダイナミックルーティングの方ができることが多く、複雑な事もできます。なのでダイナミックルーティングの方が完全上位互換で通常はダイナミックで構築する・・・と思いきやそうでもありません。

スタティックorダイナミックは一長一短で適材適所です。場合によっては併用する事もあります。それぞれの特徴と使い所を改めてまとめると下記の通りです。

■スタティック/ダイナミックルーティングの比較
項目スタティックルーティングダイナミックルーティング
設定方法ルートごとに手動で設定ダイナミックルーティングの設定
(ルート情報は自動更新)
メンテナンス
(セグメント追加時)
全ルータで手動追加自動追加
メンテナンス
(セグメント削除時)
全ルータで手動削除自動削除
障害発生時の動作設定通りにそのまま転送
(障害を検知できない)
・ルーティングテーブル自動更新
・(冗長構成の場合)切り替わり
ルータのリソース負荷(スタティックと比較すれば)
設計の難易度
適した利用環境小規模環境/シングル構成大規模環境/冗長構成

つまり、小規模環境・シングル環境であればスタティックルーティングでも十分構築は可能であり、逆に大規模環境・冗長構成であればダイナミックルーティングが必要と言えるでしょう。あくまで『構築する環境に合わせて使い分けるものだ』という認識は持っておきましょう。

まとめ

ポイント
  • ルータは複数のルートの中からネクストホップ(転送先)決める
  • ネクストホップはルーティングテーブルに載っている情報で決まる
  • ルーティングテーブルは宛先セグメントとネクストホップの組み合わせリスト
  • ルーティングテーブルはスタティックルート or ダイナミックルートで作られている
  • スタティックルーティング:手動で設定、リソース消費低、メンテナンス必要、冗長化不可
  • ダイナミックルーティング:動的な更新、リソース消費高、メンテナンス不要、冗長化可
  • スタティック or ダイナミックは適材適所で使い分ける

ルーティングテーブルはルータの命とも言える情報です。データを転送する事がルータの一番の仕事なのでここをいかに正確に設計できるかがエンジニアの腕の見せ所です。冗長化まで考えると本当に奥が深い世界ですが、まずは基本中の基本ルーティングテーブルとは何かを理解する所から始めましょう。