このドキュメントでは、パケットの一生について説明します。
このドキュメントに特有の要件はありません。
このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
このマニュアルの情報は、特定のラボ環境に置かれたデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。実稼動中のネットワークで作業をしている場合、実際にコマンドを使用する前に、その潜在的な影響について理解しておく必要があります。
ドキュメントの表記法の詳細は、「シスコ テクニカル ティップスの表記法」を参照してください。
シスコのローエンド ルータには、1xxx、25xx、26xx、3600、3800、4000、4500、および4700シリーズがあります。これらのルータでは、送信したメッセージは、別のシステムのコントローラで受信されます。このコントローラは、ほとんどのシステムで、受信したパケットをバッファ メモリに直接保管します。メッセージを完全に受信すると、コントローラは入力側ドライバがそのメッセージを見つけられるように、何らかのポインタ情報を保管してから、受信割り込みを生成します。
注:コントローラにメッセージを格納するバッファがない場合、この時点で「無視」が記録され、メッセージは受信されません。
その後、(通常、ミリ秒で計測される)ある一定の時点で、ドライバがアクティブになります。ドライバは最初に送信キューをチェックし、次に受信キューをチェックします。ここでは、受信キューの処理に限って説明します。ドライバはキューに関する必要なチェックを行い、メッセージがあると判断し、キューからそのメッセージを取り出したあと、コントローラの受信キュー リストを補充します。次に、IPやInternet Packet Exchange(IPX)などのフォワーダがメッセージを渡すことを決定します。
以下の説明では、メッセージがIPメッセージであると想定します。ドライバは、このIPメッセージを設定済みのIPファスト パスに渡さなければなりません。まず、メッセージからリンク レイヤ ヘッダーを取り除き、入力インターフェイスにファスト パスが設定されているかどうかを調べます。設定されていない場合、パケットは" input hold queue "に入れられ(マークされ)、カウンタが調べられます。カウンタがゼロであれば、"input hold queue"は使い尽くされているので、パケットはドロップされます。カウンタがゼロ以外であれば、カウンタが減分され、メッセージはプロセス パスのキューに入れられます。
注:「input hold queue」は文字通りキューではありません。インターフェイスで受信され、(出力インターフェイスへのメッセージの転送、またはバッファの解放によって)完全には処理されていないパケットの集合です。 ただし、設定済みのファスト パスがあれば(通常はあります)、そのメッセージはファスト パスに渡されます。
次にファスト パスがメッセージの有効性をチェックし、まだルーティングされていないメッセージに対して何らかの機能を適用します。このステップには、暗号解除または圧縮解除(必要な場合、その両方)、Network Addresses Translation (NAT;ネットワーク アドレス変換)、入力Committed Access Rate(CAR)テストの適用、ポリシー ルーティング テストの適用などがあります。
ポリシー ルーティングを使用する場合、それによって実際の出力インターフェイスが選択されます。ポリシー ルーティングを使用しない場合、次のステップとして、ルート キャッシュ内の宛先アドレスが検索されます(「パケット スイッチング」と呼ばれるプロセスです)。 このキャッシュの構造および内容は、ファスト スイッチング モードによって異なります。標準のファスト スイッチングでは、このキャッシュには、最近使用された宛先プレフィクス ルートまたは宛先ホスト ルートが含まれていますが、キャッシュ エントリが含まれていない場合もあります。後者の場合、メッセージはプロセス レベルに押し戻され、再び"input hold queue"としてマークされます。 Cisco Express Forwarding(CEF)スイッチングでは、このキャッシュ(Forwarding Information Base [FIB;転送情報ベース]と呼ばれる)は完全なルート テーブルであるため、このプロセスは発生しません。
ルートが見つかった場合、ルート キャッシュ エントリ(CEFでは「隣接関係」)によって、ソフトウェア、 もしくはハードウェア出力インターフェイス、およびメッセージに付けるヘッダー(該当するネクスト ホップ)が示されます。 多重化されたインターフェイスの場合、これは該当する次の仮想回線または仮想チャネルです。
このソフトウェア インターフェイス上では、いくつかの問題が関与する場合があります。たとえば、メッセージのサイズよりも小さい最大伝送ユニット(MTU)をインターフェイスに設定したとします。高速パスにはフラグメントがないため、この特定のイベントはプロセスレベルに「バンプ」する理由になります。さらに、インターフェイスにNAT処理、出力CARなどが設定されている場合があります。こういった機能は、メッセージ処理のこの段階で適用されます。そして最後に、出力インターフェイスのリンク レイヤ ヘッダーがメッセージに付加され、メッセージが出力ドライバに渡されます。
メッセージがドライバのファスト送信ルーチンに渡されると、次の処理が行われます。
ドライバは、いくつかの判断(たとえば、「メッセージを新しいバッファにコピーしてから送信する必要があるか?」)を行います。
ドライバは、トラフィック シェーピングがアクティブかどうかを判別します。トラフィック シェーピングがアクティブであれば、指定されたクラスのメッセージについて、メッセージの着信レートと送信レートを比較します。サブインターフェイスにシェーピング キューが形成されている場合、またはキューは存在しないがレートを超過している場合には、ソフトウェア インターフェイスのキューにメッセージを入れます。
トラフィック シェーピングがアクティブでない場合や このメッセージにはトラフィック シェーピングが適用外である場合、またはレートが超過していない場合には、ドライバは、出力コントローラの送信キューの深さがtx-queue-limit値未満であるかどうかを判別します。この値未満であれば、ドライバはメッセージを送信のためにキューイングします。このパスをたどったメッセージは、入力側でファスト スイッチングされ、出力側でファスト スイッチングされたものと見なされます。
ファスト スイッチングが不可能な場合、ドライバはメッセージをソフトウェア キュー(一般に"output hold queue"と呼ばれる)に転送します。 このようなホールド キューの例としては、First In, First Out(FIFO)キューイング、プライオリティ キューイング、カスタム キューイング、およびWeighted Fair Queuing(WFQ;均等化キューイング)があります。
プロセス パスが使用するメッセージの宛先と同じ なので、このようなメッセージは、入力側でファスト スイッチングされ、出力側ではプロセス スイッチングされたものと見なされます。しかしこれらのメッセージは、実際にはプロセス スイッチングされているわけではありません。スイッチングの決定は、パケットがファスト パスでスイッチングされる際に行われます。ただし、メッセージはプロセス パスと共有のキューに転送されています。その後メッセージがホールド キューから取り除かれ、送信コントローラのキューに入れられる時点で、メッセージはプロセス スイッチングされたものと見なされます。
プロセス スイッチングは、メッセージをファスト パスで送信できない場合に発生します。これは、メッセージがこのシステムに送信され、最終的(理想的)にルーティング プロセス、リンク メンテナンス プロセス、ネットワーク管理プロセスなどで消費されることを意味します。ただし、Link Fragmentation and Interleaving(LFI)を使用してジャンボグラムのセグメント間で音声をインターリーブするトラフィック、X.25トラフィック、フラグメンテーションが必要なトラフィック、ファストパスルートエントリが存在しないトラフィックなど、一部のトラフィックは実際にプロセスパスです。プロセス パス上での処理は、概念的にはファスト パスと同じですが、さまざまな理由で実装が異なります。相違点の1つは、出力側で"input hold queue"フラグがクリアされ、入力インターフェイスのカウンタが増分され(input hold queueからのメッセージの削除)、メッセージがoutput hold queueに入れられる点です。そのあと、割り込みがシミュレートされ、それによって出力インターフェイスでのメッセージ送信がトリガされる場合があります。プロセスオーバーヘッドが原因で、ファーストスイッチングよりも低速になります。このようなメッセージを受信すると、他のプロセスが実行される可能性があり、さらに複雑なデータ構造を処理する必要があります。