回答:
ルーティングとは、パケットを送信するインターフェイスを決定することです。この決定は、ローカルで作成されたパケットに対しても行う必要があります。ルーティングテーブルには、ネットワークアドレスおよび関連するインターフェイスまたはネクストホップが含まれています。これは(Linuxのコンテキストでは)ip route
およびを参照しip rule
ます。
転送とは、システムに到達したが、このシステム宛ではないパケットを指します。転送はシステムの決定です:「私はパケットを受け取り、それを宛先に向けようとします。」ただそれを落とす代わりに。「転送」は、パケットフィルターのコンテキストでの一般的な用語です。LinuxのNetfilterのベーステーブルには、INPUT、OUTPUT、FORWARDの3つのチェーンがあります。このチェーンは、「このパケットを転送するかドロップするか」という決定を下すだけです。(通常、システムで転送が有効になっている場合。Linuxでも/ proc / sys / net / ipv4 / ip_forward)。
ほとんどのシステム(単一のネットワーク接続を持つシステム)では、それらは同じになります。ただし、ルーターでは、異なる傾向があります。
ルーティングテーブルには、OSPFやBGPなどの動的ルーティングプロトコルを使用して、ルーターがピアおよびネイバーから学習したすべてのルートが保持されます。各ルートは、使用中のルーティングプロトコルのパラメータに基づいてソートおよび評価され、「最適」なルーティングテーブルエントリのサブセットが転送テーブルに入れられます。ルーターは、パケットを受信すると、転送テーブルで宛先アドレスを検索して、パケットを送信するインターフェイスと、次のホップアドレスを決定します。新しいルートが学習されたり、インターフェースがアップまたはダウンしたり、ランキングスキームにポリシーが変更されたりすると、ルーティングテーブルが再評価され、転送テーブルが更新されます。
通常、ルーティングテーブルはRAMに格納されます。高性能ギアの転送テーブルは、ラインカード全体(モジュラーシステム)に分散され、高速TCAMに格納されます。通常、TCAMで保持できるルートの数には限りがあります。転送テーブルがTCAMの容量を超えると、パケットがドロップされるか、ソフトウェアでルーティングされる可能性があります(非常に低速です)。
まず第一に、私の見解では、多くの場合無視されている転送とルーティングの違いを最初に明確に理解する必要があります。Lary L.Peterson著の本のComputer Networks in page 240によると、転送はルーターがパケットを受信すると一連のアクションであり、宛先アドレスの確認、テーブルの参照、およびそのテーブル。ただし、ここでのルーティングとは、転送テーブルが作成されるプロセスを指します。
元の質問に戻ると、転送テーブルとルーティングテーブルを同じ構造に保つことができますが、それらを分離する多くの理由があるという結論を導き出すことができます。転送テーブルは通常、MACアドレスなどの追加情報を保持しているパケットを転送する際にアドレスをルックアップするプロセスを最適化するように構成する必要があります。対照的に、ルーティングテーブルは通常、トポロジの変更の計算に重点を置いており、ルーティングテーブルのエントリは通常、より簡潔で、ネクストホップのIPのみが含まれます。