このシリーズの前回の記事では、IP ルーティングの基本原則と、IP ルーティングに関連する手順について説明しました。
この記事では、IP ルーティングに関連するその他の側面について少し詳しく見ていきます。
Linux IP ルーティング シリーズ:パート 1、パート 2、パート 3 (この記事)。
ルーティング テーブル エントリのフラグの説明から議論を始めましょう。
フラグ
以下は、ルーティング テーブルでのフラグとその意味のリストです:
- U :このフラグは、ルートが稼働中であることを示します
- G :このフラグは、ルートがゲートウェイへのものであることを示します。このフラグが存在しない場合、ルートは直接接続された目的地にあると言えます
- H :このフラグは、ルートがホストへのものであることを示します。これは、宛先が完全なホスト アドレスであることを意味します。このフラグが存在しない場合、ルートはネットワークへのものであり、宛先はネットワーク アドレスであると見なすことができます。
- D :このフラグは、このルートがリダイレクトによって作成されたことを示します。
- M :このフラグは、このルートがリダイレクトによって変更されたことを示します。
直接ルート、間接ルート、および「G」フラグ
- 直接ルートは宛先が転送ホストに直接接続されているルートですが、間接ルートの場合は宛先ホストが転送ホストに直接接続されていません.
- 直接ルートでは、データグラム内の宛先 IP アドレスとリンク層アドレスは宛先ホストのものですが、間接ルートの場合、データグラム内の宛先 IP は変更されませんが、リンク層アドレスは次のアドレスに変更されます。このデータグラムが配信される次のルーター
- ここで「G」フラグが役に立ちます。上記の「G」フラグは、これが間接ルートであることを示します。直接ルートの場合、「G」フラグは設定されません。
「G」フラグと「H」フラグ
「G」フラグがルートを示すことは誰もが知っていることです。上記で説明したように、ルートは直接的または間接的である可能性があります。
ただし、「G」フラグを「H」フラグと混同しないでください。このフラグは、エントリ内の宛先アドレスがホスト アドレスまたはネットワーク アドレスであることを示します。
この記事シリーズの前の部分で既に説明したように、受信したデータグラムの宛先 IP アドレスがルーティング テーブルで検索されると、最初に完全なアドレスが一致します。
完全なアドレス照合が失敗した場合、ネットワーク ID が照合され、データグラムの宛先 IP アドレスが属するネットワークのエントリがルーティング テーブルにあるかどうかが確認されます。
したがって、IP アドレスが完全に一致する場合、エントリには「H」フラグが含まれますが、ネットワーク ID が一致する場合、エントリには「H」フラグが含まれないことがわかります。
ルーティング テーブルの複雑さ
ルーティング テーブルは非常に単純な場合もあれば、非常に複雑な場合もあります。ルーティング テーブルの複雑さは、ホストが通信するネットワークのトポロジによって異なります。いくつかの実際的なケースを考えて、それらがホストのルーティング テーブルにどのように影響するかを見てみましょう。
- 非常に基本的なケースは、ネットワークにまったく接続されていないスタンドアロン ホストの場合です。この場合、ホストは TCP/IP スタックを引き続き使用できますが、それ自体との通信のみです。したがって、この場合、ルーティング テーブルには単一のエントリが含まれ、それがループ バック インターフェイスになります。
- 単一の LAN に接続されたホストの場合、ルーティング テーブルにはいくつかのエントリが含まれます。 1 つのエントリ (前述のとおり) はループ バック インターフェースであり、もう 1 つのエントリは LAN です。
- ここで、ホストがインターネットに接続されているとします。この場合、ルーター テーブルには、(ループ バック エントリの他に) ホストがインターネットに接続するためのデフォルト ルーターのエントリが含まれます。
- ホストが異なるインターフェイスを介してさまざまなネットワークに接続されている場合、ルーティング テーブルには、ホストが接続されているすべての異なるネットワークの個別のエントリが含まれます。さらに、ループ バック エントリがあり、デフォルト ルーター エントリが存在する可能性があります。
ルーティング テーブルの初期化
これまで、ルーティング テーブル エントリ、その内容、複雑さなどについて説明してきました。次に、これらのエントリの作成について簡単に説明しましょう。
- インターフェイスが初期化されると、そのインターフェイスに対応するルーティング テーブルに直接ルートのエントリが作成されます。
- 直接接続されていないネットワークおよびホストへのルートは、コマンドを使用して追加できます。
- この目的のために「route」コマンドが使用されます。
- たとえば、基本的なルート コマンドは次のようになります。 route add
- 「メトリック」がゼロ以外の場合、「G」フラグが設定されます。それ以外の場合は設定されません。
このルート コマンドは、システムの起動時に初期化ファイルからトリガーできます。ここでの問題は、route コマンドを含むすべての OS で使用される 1 つの標準ファイルがないことです。 4.4BSD および BSD/386 では /etc/netstart、SVR4 では /etc/inet/rc.inet、Solaris 2.x では /etc/rc2.d/S69inet、SunOS 4.1.x では /etc を使用します。 /rc.local、および AIX 3.2.2 は /etc/rc.net を使用します。
ルーティング テーブルを初期化する方法は他にもいくつかあります。ルーティング デーモンの実行やルーター検出プロトコルの使用と同様ですが、この記事では詳しく説明しません。
注:route コマンドを効果的に使用する方法も理解する必要があります。
ICMP ホストまたは ICMP ネットワーク到達不能エラー
これらのエラーは、ホストまたはネットワーク (IP データグラムの送信先) がダウンしている場合に発生します。たとえば、ホスト A がホスト B に接続されていて、ホスト B へのリンクがダウンしているとします。
次に、この場合、ホスト A がホスト B の IP データグラムを受信すると、ホスト A は、この IP データグラムの発信元のホストに「ホスト到達不能」エラーを返します。
このケースは、ホスト A にデフォルト ルーター エントリが存在しないことを前提としています。「ネットワークに到達できません」エラーについても同様です。