おそらく、Linux で route または netstat コマンドを使用して既存のルートを確認する (またはルートを追加/変更する) 方法を知っているでしょう。 IP ルーティングがどのように機能するかについてあまり理解せずに、これを行った可能性があります。
この記事は、IP ルーティングの背後にある原則とその仕組みを理解するのに役立ちます。
これは、一連の IP ルーティングの記事の第 1 部です。
IP ルーティングには、IP データグラムの転送が含まれます。宛先ホストが接続されている場合、ホストが IP データグラムを宛先に直接送信する単純なプロセスです。たとえば、ポイント ツー ポイント リンクまたは共有ネットワークを介して。宛先ホストが直接接続されていない場合、ホストは IP データグラムをデフォルト ルーターに送信し、IP データグラムの送信先をルーターに決定させます。
ルーティングの原則
通常のホストとルーターの基本的な違いは、ルーターがデータグラムを転送できるのに対し、ホストはインターフェイス間でデータグラムを転送しないことです。
現在、ほとんどのマルチユーザー システムは、ルーターとして機能するように構成できます。そのため、ホストだけでなくルーターでも使用できる共通のルーティング アルゴリズムを指定できます。ホストがルーターのように機能する場合、一般的に、ホストにはルーター機能が組み込まれていると言われます。ルーター機能が組み込まれたこのようなホストは、データグラムを転送するように構成されていない限り、つまりルーターのように動作するように構成されていない限り、決してデータグラムを転送するべきではありません。
IP レイヤーは、受信したデータグラムをどう処理するかを決定する際に使用するルーティング テーブルを維持します。データグラムがネットワークから受信されると、IP レイヤーはまずその IP アドレスをチェックして、その IP アドレスが独自のものかどうかを確認します。
データグラムの宛先 IP アドレスが独自の場合、データグラムはトランスポート層の適切なプロトコルに送信されますが、宛先アドレスが独自のものでない場合、ホストがそうでない場合、データグラムは破棄されます。
ルーティング テーブル内のデータは、通常、エントリの形式です。一般的なルーティング テーブル エントリには、次の主要なエントリが含まれます:
- 宛先 IP アドレス :このフィールドは宛先の IP アドレスを表します。この IP アドレスは、単一のホストのアドレスである場合もあれば、ネットワークのアドレスである場合もあります。このエントリにホストの IP アドレスが含まれている場合は、アドレス内のゼロ以外のホスト ID によって示され、エントリにネットワークの IP アドレスが含まれている場合は、ホスト ID 値 0 によって示されます。
- 次のルーターの IP アドレス :「次」という用語を使用した理由は、これが常に最終ルーターではなく、中間ルーターである可能性が非常に高いためです。このエントリは、インターフェイスで受信した IP データグラムをさらに送信する方法を決定する次のルーターの IP アドレスを提供します。
- フラグ :このフィールドは、宛先 IP アドレス (上記で指定) がホスト アドレスまたはネットワーク アドレスであるなど、重要な情報の別のセットを提供します。また、フラグは、次のルーター (上記で指定) が実際に次のルーターであるか、直接接続されたインターフェイスであるかを伝えます。
- ネットワーク インターフェースの仕様 :データグラムをさらに送信するために渡す必要があるネットワーク インターフェイスに関する仕様。
基本的なルーティングの仕組み
ここでルーティング プロセスを簡単に視覚化してみると、ネットワークからのデータグラムがホスト (ルーターのように動作するように構成されている) の IP レイヤーで受信されるとすぐに、宛先 IP がパケット内のアドレスは、このホストのアドレスではありません。ルーティング テーブルが参照されます。
最初のフィールドが宛先 IP アドレスと完全に (ホスト) または部分的に (ネットワーク) 一致するエントリは、次のルーターの IP アドレスを通知します。これは、ホスト (ルーターのように動作する) がパケットを転送するために必要とする重要な情報です。この情報は、データグラムを転送する次のルーターを直接指示するためです。エントリ内の他のすべてのフィールドは、ルーティングに関する詳細情報を提供することで意思決定をサポートします。
上記の段落では、基本的な理解を構築しますが、より深いレベルに到達しようとすると、次のポイントでルーティング テーブル アルゴリズムに関する詳細情報が得られます:
- 最初にルーティング テーブルが検索され、「宛先 IP アドレス」フィールドがデータグラムの宛先 IP アドレスと完全に一致するエントリが検索されます。完全とは、IP アドレスのホスト ID とネットワーク ID が一致することを意味します。見つかった場合、データグラムはそのインターフェイスまたは中間ルーターに送信されます。
- 完全に一致するものが見つからない場合は、一致するネットワーク ID の検索が行われます。見つかった場合、データグラムは指定されたルーターに転送されます。したがって、このネットワーク上のすべてのホストが、ルーティング テーブルのこの 1 つのエントリによって管理されていることがわかります。
- 上記の 2 つに当てはまらない場合、データグラムは「デフォルト ルーター」に転送されます。
- 上記の手順も失敗した場合、つまりデフォルト ルーターがない場合、データグラムは配信不能になります。配信できないデータグラムがあると、ICMP ホスト到達不能が生成されます または ICMP ネットワークに到達できません エラーであり、このデータグラムを生成したアプリケーションにこのエラーが返されます。
ルーティング テーブルに 2 種類のエントリがある理由や、より正確に言えば、ルーターにネットワーク関連のエントリが必要な理由について質問されることがあります。ネットワークに対応するルーティング テーブルにエントリがあることには大きな利点があります。利点は、完全なネットワークに関連するエントリを持つことで、そのネットワーク上の各ホストの膨大な数の個別のエントリを持つ必要がなくなることです。これにより、ルーティング テーブルのサイズが大幅に削減され、常に適切なレベルになります。
ルーティング テーブルを一覧表示するコマンド
以下に示すように、netstat コマンドを使用してルーティング テーブルを一覧表示できます。
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
出力には、宛先 IP アドレスとそのゲートウェイの詳細情報が含まれています。フラグ「U」はルートがアップしていることを示し、フラグ「G」はルーターがゲートウェイ (ルーター) にあることを示します。このフラグが設定されていない場合、宛先が直接接続されていると見なすことができます。