(57)【要約】  ネットワーク設備のメモリが複数の第１ブロックに区分され、各第１ブロックが複数の第２ブロックに区分され、各第２ブロックが何れも第１記憶空間および第２記憶空間を含む。パケットを記憶するとき、パケットの長さと第１記憶空間の長さとに基づいて、パケットによって占められるべき第２ブロックを特定し、前記パケットを特定された第２ブロックの第１記憶空間に記憶する。特定された各第２ブロックについて、当該第２ブロックに対応するＰＤを生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶する。パケットを読み取るとき、読み取るべきパケットの開始アドレスに基づいて、読み取るべき第２ブロックを特定し、特定された第２ブロックの第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケットに組み立て、組み立てられたパケットを送信する。
2020529166.tif 000002
【特許請求の範囲】
【請求項１】
パケット処理方法であって、
メモリが複数の第１ブロックに区分され、前記各第１ブロックが複数の第２ブロックに区分され、前記各第２ブロックが何れも第１記憶空間および第２記憶空間を含み、
前記パケット処理方法は、
記憶すべき第１パケットを取得することと、
前記第１パケットの長さと前記第１記憶空間の長さとに基づいて、前記第１パケットによって占められるべき１つまたは複数の第２ブロックを特定することと、
前記第１パケットを前記特定された各第２ブロックの第１記憶空間に記憶することと、
前記特定された各第２ブロックについて、当該第２ブロックに対応するパケット記述子（ＰＤ）を生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶することと、
読み取るべき第２パケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定することと、
前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取ることと、
読み取られたＰＤを利用して、読み取られたパケットセグメンを前記第２パケットに組み立て、前記第２パケットを送信することと、を含むことを特徴とするパケット処理方法。
【請求項２】
前記第１パケットによって占められるべき１つまたは複数の第２ブロックを特定することは、
前記第１パケットに対応するキューを特定することと、
前記キューがテールポインタを有する場合、前記テールポインタで指される第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定することと、
前記キューがテールポインタを有さない場合、空き第１ブロックを選択し、選択された空き第１ブロックにおける最初の第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定することと、を含むことを特徴とする請求項１に記載のパケット処理方法。
【請求項３】
当該第２ブロックに対応するＰＤを生成することは、
当該第２ブロックが前記第１パケットによって占められるべき最初の第２ブロックである場合、前記第１パケットの長さを当該第２ブロックに対応するＰＤ内に記録し、且つ、当該第２ブロックが前記第１パケットを記憶する最初の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第１フラグを有効にセットすることと、
当該第２ブロックが前記第１パケットによって占められるべき最後の第２ブロックである場合、当該第２ブロックが前記第１パケットを記憶する最後の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第２フラグを有効にセットすることと、を含むことを特徴とする請求項１に記載のパケット処理方法。
【請求項４】
当該第２ブロックに対応するＰＤを生成することは、
当該第２ブロックが現在の第１ブロックの最後の第２ブロックであるが、前記第１パケットによって占められるべき最後の第２ブロックではない場合、前記第１パケットによって占められるべき次の第１ブロックを指すポインタを、当該第２ブロックに対応するＰＤ内に記録し、前記次の第１ブロックにおける、前記第１パケットによって占められるべき第２ブロックの数を当該第２ブロックに対応するＰＤ内に記録することを含むことを特徴とする請求項１に記載のパケット処理方法。
【請求項５】
当該第２ブロックに対応するＰＤを生成することは、
当該第２ブロックの所属する第１ブロックの現在の反転フラグを取得し、前記第１ブロックを２回連続して使用する場合、それぞれの反転フラグは異なることと、
当該第２ブロックに対応するＰＤが前記第１ブロックの現在の反転フラグを含むと特定することと、を含むことを特徴とする請求項１に記載のパケット処理方法。
【請求項６】
前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取ることは、
前記読み取るべき第２ブロックの所属する現在の第１ブロックの各第２ブロックの第２記憶空間からＰＤを読み取り、第１フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最初の第２ブロックとして特定することと、
第２フラグが有効であるＰＤを前記現在の第１ブロックから読み取った場合、第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定することと、
第２フラグが有効であるＰＤを前記現在の第１ブロックから読み取っていない場合、
前記現在の第１ブロックの最後の第２ブロックの第２記憶空間からＰＤを読み取ることで、次の第１ブロックを指すポインタを当該ＰＤから取得し、
前記次の第１ブロックにおける、前記第２パケットによって占められる第２ブロックの数を当該ＰＤから取得し、
前記ポインタと前記第２ブロックとの数に基づいて前記次の第１ブロックの第２ブロックの第２記憶空間からＰＤを読み取り、
第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定することと、
前記特定された最初の第２ブロックと前記特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取ることと、を含むことを特徴とする請求項１に記載のパケット処理方法。
【請求項７】
読み取られたパケットセグメントによって占められた第１記憶空間を解放することと、
前記現在の第１ブロックにおける各第２ブロックの第１記憶空間が何れも解放されたとき、前記現在の第１ブロックを空き第１ブロックとして回収し、且つ、前記現在の第１ブロックにおける各第２ブロックの第２記憶空間を解放する、または、前記現在の第１ブロックの反転フラグを調整することと、を更に含むことを特徴とする請求項６に記載のパケット処理方法。
【請求項８】
パケット処理装置であって、
メモリが複数の第１ブロックに区分され、前記各第１ブロックが複数の第２ブロックに区分され、前記各第２ブロックが何れも第１記憶空間および第２記憶空間を含み、
前記パケット処理装置は、
記憶すべき第１パケットを取得し、前記第１パケットの長さと前記第１記憶空間の長さとに基づいて、前記第１パケットによって占められるべき１つまたは複数の第２ブロックを特定し、前記第１パケットを前記特定された各第２ブロックの第１記憶空間に記憶し、前記特定された各第２ブロックについて、当該第２ブロックに対応するパケット記述子（ＰＤ）を生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶するための書込モジュールと、
読み取るべき第２パケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定し、前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取り、読み取られたＰＤを利用して、読み取られたパケットセグメントを前記第２パケットに組み立て、組み立てられた前記第２パケットを送信するための読取モジュールと、を備えることを特徴とするパケット処理装置。
【請求項９】
前記書込モジュールは、具体的に、
前記第１パケットに対応するキューを特定し、
前記キューがテールポインタを有する場合、前記テールポインタで指される第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定し、
前記キューがテールポインタを有さない場合、空き第１ブロックを選択し、選択された空き第１ブロックにおける最初の第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定することを特徴とする請求項８に記載のパケット処理装置。
【請求項１０】
前記書込モジュールは、具体的に、
当該第２ブロックが前記第１パケットによって占められるべき最初の第２ブロックである場合、前記第１パケットの長さを当該第２ブロックに対応するＰＤ内に記録し、且つ、当該第２ブロックが前記第１パケットを記憶する最初の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第１フラグを有効にセットし、
当該第２ブロックが前記第１パケットによって占められるべき最後の第２ブロックである場合、当該第２ブロックが前記第１パケットを記憶する最後の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第２フラグを有効にセットすることを特徴とする請求項８に記載のパケット処理装置。
【請求項１１】
前記書込モジュールは、具体的に、
当該第２ブロックが現在の第１ブロックの最後の第２ブロックであるが、前記第１パケットによって占められるべき最後の第２ブロックではない場合、前記第１パケットによって占められるべき次の第１ブロックを指すポインタを、当該第２ブロックに対応するＰＤ内に記録し、前記次の第１ブロックにおける、前記第１パケットによって占められるべき第２ブロックの数を当該第２ブロックに対応するＰＤ内に記録することを特徴とする請求項８に記載のパケット処理装置。
【請求項１２】
前記書込モジュールは、具体的に、
当該第２ブロックの所属する第１ブロックの現在の反転フラグを取得し、前記第１ブロックを２回連続して使用する場合、それぞれの反転フラグは異なり、
当該第２ブロックに対応するＰＤが前記第１ブロックの現在の反転フラグを含むと特定することを特徴とする請求項８に記載のパケット処理装置。
【請求項１３】
前記読取モジュールは、具体的に、
前記読み取るべき第２ブロックの所属する現在の第１ブロックの各第２ブロックの第２記憶空間からＰＤを読み取り、第１フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最初の第２ブロックとして特定し、
第２フラグが有効であるＰＤを前記現在の第１ブロックから読み取った場合、第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定し、
第２フラグが有効であるＰＤを前記現在の第１ブロックから読み取っていない場合、
前記現在の第１ブロックの最後の第２ブロックの第２記憶空間からＰＤを読み取ることで、次の第１ブロックを指すポインタを当該ＰＤから取得し、
前記次の第１ブロックにおける、前記第２パケットによって占められる第２ブロックの数を当該ＰＤから取得し、
前記ポインタと前記第２ブロックとの数に基づいて前記次の第１ブロックの第２ブロックの第２記憶空間からＰＤを読み取り、
第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定し、
前記特定された最初の第２ブロックと前記特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取ることを特徴とする請求項８に記載のパケット処理装置。
【請求項１４】
前記読取モジュールは、更に、
読み取られたパケットセグメントによって占められた第１記憶空間を解放し、
前記現在の第１ブロックにおける各第２ブロックの第１記憶空間が何れも解放されたとき、前記現在の第１ブロックを空き第１ブロックとして回収し、且つ、前記現在の第１ブロックにおける各第２ブロックの第２記憶空間を解放する、または、前記現在の第１ブロックの反転フラグを調整することを特徴とする請求項１３に記載のパケット処理装置。
【請求項１５】
ネットワーク設備であって、
記憶手段と、転送チップとを備え、
前記記憶手段のメモリが複数の第１ブロックに区分され、前記各第１ブロックが複数の第２ブロックに区分され、前記各第２ブロックが何れも第１記憶空間および第２記憶空間を含み、
前記転送チップは、
記憶すべき第１パケットを取得し、
前記第１パケットの長さと前記第１記憶空間の長さとに基づいて、前記第１パケットによって占められるべき１つまたは複数の第２ブロックを特定し、
前記第１パケットを前記記憶手段における前記特定された各第２ブロックの第１記憶空間に記憶し、
前記特定された各第２ブロックについて、当該第２ブロックに対応するパケット記述子（ＰＤ）を生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶し、
読み取るべき第２パケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定し、
前記記憶手段における前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、前記記憶手段における前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取り、
読み取られたＰＤを利用して、読み取られたパケットセグメントを前記第２パケットに組み立て、組み立てられた前記第２パケットを送信することを特徴とするネットワーク設備。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互引用
本願は、出願日が２０１７年７月３１日であり、出願番号が２０１７１０６３８４０１．３であり、発明名称が「パケット処理方法、装置およびネットワーク設備」である中国特許出願の優先権を主張し、当該出願の全文が引用により本願に組み込まれる。
【０００２】
背景技術
ネットワーク設備は、パケットを受信した場合、パケットの所属するキューに基づいて、パケットを外部の記憶手段にキャッシュしてもよい。ネットワーク設備は、パケットを送信する場合も、パケットの所属するキューに基づいて、パケットを外部の記憶手段から読み取って送信してもよい。パケットのキャッシュ・読取の過程に２つの肝心な要素が存在し、それぞれはＰＫＴ（ＰＡＣＫＥＴ、パケットエンティティ）およびＰＤ（Ｐａｃｋｅｔ Ｄｅｓｃｒｉｐｔｉｏｎ、パケット記述子）である。
【０００３】
ネットワーク設備は、ＰＫＴをＤＤＲ ＳＤＲＡＭ（Ｄｕａｌ Ｄａｔａ Ｒａｔｅ Ｓｙｎｃｈｒｏｎｏｕｓ Ｄｙｎａｍｉｃ Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ、後でＤＤＲと略称する）に記憶し、ＰＤをＱＤＲ ＳＲＡＭ（Ｑｕａｄ Ｄａｔａ Ｒａｔｅ Ｓｔａｔｉｃ Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ、後でＱＤＲと略称する）に記憶してもよい。ＱＤＲを用いてＰＤを記憶するため、シングルボード設計のコストがアップし、配線の負担も増える。また、パケットを送信する際、ネットワーク設備は、まず、ＱＤＲからＰＤを読み取り、次に、ＰＤを用いてＤＤＲからＰＫＴを読み取る。二つのステップでＰＤおよびＰＫＴを別々読み取るため、読取効率が低い。
【図面の簡単な説明】
【０００４】
【図１Ａ】本発明の一実施形態における応用場面の模式図である。
【図１Ｂ】本発明の一実施形態における応用場面の模式図である。
【図１Ｃ】本発明の一実施形態における応用場面の模式図である。
【図２Ａ】本発明の一実施形態におけるパケットを記憶する模式的なフローチャートである。
【図２Ｂ】本発明の一実施形態における特定パケットによって占められるべき第２ブロックの模式的なフローチャートである。
【図２Ｃ】本発明の一実施形態におけるパケットを読み取る模式的なフローチャートである。
【図３Ａ】本発明の別の実施形態における応用場面の模式図である。
【図３Ｂ】本発明の別の実施形態における応用場面の模式図である。
【図３Ｃ】本発明の別の実施形態における応用場面の模式図である。
【図３Ｄ】本発明の別の実施形態における応用場面の模式図である。
【図３Ｅ】本発明の別の実施形態における応用場面の模式図である。
【図４】本発明の一実施形態におけるパケット処理装置の構造図である。
【図５Ａ】本発明の一実施形態におけるネットワーク設備のハードウェア構造図である。
【図５Ｂ】本発明の一実施形態におけるネットワーク設備のハードウェア構造図である。
【発明を実施するための形態】
【０００５】
本発明の実施例で使用される用語は、単に特定の実施例を記述する目的であり、本発明を制限するためのものではない。本発明及び添付する特許請求の範囲で使用される単数形式の「一種」、「前記」及び「当該」も、文脈から他の意味を明瞭で分かる場合でなければ、複数の形式を含むことを意図する。理解すべきことは、本文で使用される用語「および／または」が、１つまたは複数の関連する列挙項目を含む如何なる或いは全ての可能な組み合わせを指す。
【０００６】
理解すべきことは、本発明において第１、第２、第３等という用語を用いて各種の情報を記述するが、これらの情報は、これらの用語に限定されるものではない。これらの用語は、単に同一のタイプの情報同士を区分するために用いられる。例えば、本発明の範囲を逸脱しない限り、第１情報が第２情報と呼称されてもよく、類似的に、第２情報が第１情報と呼称されてもよい。これは、コンテキストに依存する。例えば、ここで使用される言葉「場合」は、「…とき」や「…ときに」あるいは「特定の状況に応じて」として解釈されてもよい。
【０００７】
本発明の実施例は、パケット処理方法を提供し、当該方法はネットワーク設備に適用可能である。ネットワーク設備は、パケットを処理する際、パケットの記憶・読取の過程に係る。パケットの記憶・読取の過程に、２つの肝心な要素が存在し、それぞれは記憶すべきパケット自身およびＰＤである。記憶すべきパケット自身は、ＰＫＴとも呼称されてもよく、以下ではパケットと略称されてもよい。ＰＤは、パケットの肝心な情報、例えば、パケットの長さ、キュー情報、記憶アドレス等を格納するために用いられる。ＰＤの長さは、パケットの長さより遥かに小さくなり、ＰＤの情報量は比較的に小さい。
【０００８】
本発明の実施例では、パケットおよびＰＤを同一のメモリ、例えばＤＤＲメモリに記憶することで、ＤＤＲメモリリソースを十分に利用し、シングルボード設計のコストを有効的に低減し、配線の負担を軽減する。また、パケットおよびＰＤが同一のメモリに記憶されるため、パケットを送信する必要があるとき、同一のメモリからパケットおよびＰＤを読み取ることができ、読取効率が相対的に高くなる。
【０００９】
本発明の実施例では、メモリ（例えば、ＤＤＲメモリ）が複数の第１ブロックに区分され、各第１ブロックが更に複数の第２ブロックに区分され、各第２ブロックが１つのｂｕｒｓｔであってもよい。各第２ブロックが、更に、大きさが異なる２つの記憶空間、即ち、第１記憶空間および第２記憶空間に区分される。第１記憶空間は、第２記憶空間よりも大きくなってもよい。これを基に、パケットを第１記憶空間に記憶し、ＰＤを第２記憶空間に記憶可能である。このように、パケットおよびＰＤは、同一のメモリに記憶される。
【００１０】
一例では、図１Ａに示すように、ＤＤＲメモリは、複数の第１ブロックに区分されてもよく、各第１ブロックは、２Ｋバイトの大きなメモリである。また、各第１ブロックは、３２個の第２ブロックに区分されてもよく、各第２ブロックは、６４バイトの小さなメモリである。即ち、各２Ｋバイトの第１ブロックは、３２個の６４バイトの第２ブロックに区分され、各第２ブロックは、１つのｂｕｒｓｔである。
【００１１】
上記２Ｋバイト、３２個、６４バイト等は、単に本発明の１つの例示に過ぎず、この数値について制限しない。例えば、第１ブロックが２Ｋバイトで、第２ブロックが１２８バイトであれば、第１ブロックは、１６個の第２ブロックに区分される。更に例えば、第１ブロックが４Ｋバイトで、第２ブロックが６４バイトであれば、第１ブロックは、６４個の第２ブロックに区分される。これをもって類推する。記述の便宜上、後は、２Ｋバイトの第１ブロックを３２個の６４バイトの第２ブロックに区分することを例とする。
【００１２】
第１ブロックを３２個の第２ブロックに区分した後、各第２ブロックを大きさの異なる２つの記憶空間に区分してもよい。大きな第１記憶空間は、例えば５６バイトであり、第１記憶空間は、パケットを記憶するために用いられる。小さな第２記憶空間は、例えば８バイトであり、第２記憶空間は、ＰＤを記憶するために用いられる。図１Ｂに示すように、第２ブロックは、パケットおよびＰＤを同時に記憶できる。例えば、４つのパケット（例えば、パケット０、パケット１、パケット２、パケット３）を記憶する必要があり、且つ４つのパケットの大きさが何れも９６バイトである場合、パケット０は、第２ブロック０および第２ブロック１に記憶され、パケット０は、第２ブロック０の第１記憶空間の５６バイトを占め、第２ブロック１の第１記憶空間内の４０バイトを占める。第２ブロック０の前８バイトの第２記憶空間にＰＤが記憶され、第２ブロック１の前８バイトの第２記憶空間にもＰＤが記憶されている。これをもって類推する。
【００１３】
表１は、ＰＤに含まれる情報フィールドの一例示である。
【００１４】
【表１】
2020529166.tif 000003
【００１５】
図１Ｃは、ＰＤの一例示である。ビューの簡素化のために、図１Ｃは、ＰＤに有効値が存在する部分的な情報フィールドのみを示す。異なる第２ブロックに記憶されたＰＤが同じである可能性があるし、異なる可能性もある。例えば、一つのパケットが１つまたは複数の第２ブロックを占めるとき、占められた全ての第２ブロックのうちの最初の第２ブロックについて、当該第２ブロックにおけるＰＤ内の情報フィールドＬＥＮおよびＳＯＰに対して、値を付与する必要がある。例えば、ある第２ブロックに記憶されたＰＤ内の情報フィールドＳＯＰの値が０であるとき、これは、当該第２ブロックがパケットを記憶する最初の第２ブロックであることを示す。情報フィールドＳＯＰ（後文では、第１フラグとも呼称されてもよい）の値が１であるとき、これは、当該第２ブロックがパケットを記憶する最初の第２ブロックではないことを示す。情報フィールドＬＥＮの値は、当該ＰＤに対応する第２ブロックに記憶されるパケットの長さである。
【００１６】
パケットによって占められるべき全ての第２ブロックのうちの最後の第２ブロックについて、当該第２ブロックにおけるＰＤ内の情報フィールドＥＯＰ（後文では、第２フラグとも呼称されてもよい）に対して値を付与する。例えば、ある第２ブロックに記憶されたＰＤ内の情報フィールドＥＯＰの値が０であるとき、これは、当該第２ブロックがパケットを記憶する最後の第２ブロックであることを示す。情報フィールドＥＯＰの値が１であるとき、これは、当該第２ブロックがパケットを記憶する最後の第２ブロックではないことを示す。
【００１７】
パケットによって占められるべき何れか１つの第２ブロックについて、当該第２ブロックにおけるＰＤ内の情報フィールドＢＶの値を有効にセットする必要がある。例えば、ある第２ブロックに記憶されたＰＤ内の情報フィールドＢＶの値が０であるとき、これは、当該第２ブロックが有効であることを示す。しかし、当情報フィールドＢＶの値が１であるとき、これは、当該第２ブロックが無効であると示すことを示す。
【００１８】
また、一つのパケットによって占められるべき複数の第２ブロックが少なくとも２つの第１ブロックに属するとき、第２ブロックが当該パケットによって占められるべき現在の第１ブロックにおける最後の第２ブロックであるが、当該パケットによって占められるべき最後の第２ブロックではない場合には、当該第２ブロックにおけるＰＤ内の情報フィールドＶＡＬ、ＮＢＡおよびＮＢＮについて値を付与する。情報フィールドＶＡＬは、情報フィールドＮＢＡが有効であるか否かを示してもよい。例えば、ある第２ブロックに記憶されたＰＤ内の情報フィールドＶＡＬの値が０であるとき、これは、当該ＰＤ内の情報フィールドＮＢＡが有効であることを示す。しかし、当該ＰＤ内の情報フィールドＶＡＬの値が１であるとき、これは、当該ＰＤ内の情報フィールドＮＢＡが無効であることを示す。情報フィールドＮＢＡ（Ｎｅｘｔ Ｂｌｏｃｋ Ａｄｄｒｅｓｓ、次のグロックのアドレス）の値は、当該パケットが占めるべき次の第１ブロックの、ポインタアドレスである。情報フィールドＮＢＮ（Ｎｅｘｔ Ｂｌｏｃｋ Ｎｕｍｂｅｒ、次のグロックの数）の値は、当該パケットが次の第１ブロックに占める第２ブロックの数である。
【００１９】
例えば、図１Ｃにおいて、パケット１が第２ブロック２、第２ブロック３および第２ブロック４を占める。パケット１によって占められるべき全ての第２ブロックのうち、最初の第２ブロックは、第２ブロック２であり、当該第２ブロック２に対応するＰＤ内の情報フィールドＬＥＮの値は、例えば１２０である。このように、パケット１の全長が１２０バイトであることは、示される。当該第２ブロック２におけるＰＤ内の情報フィールドＳＯＰの値は、０であり、これは、当該第２ブロック２がパケット１によって占められる最初の第２ブロックであることを示す。パケット１によって占められるべき何れか１つの第２ブロック（例えば、第２ブロック２、第２ブロック３および第２ブロック４、図１Ｃに、ビューの簡素化のために、単に第２ブロック３を例としてＢＶを示す）について、当該第２ブロック３に対応するＰＤ内の情報フィールドＢＶの値は、０であり、これは、当該第２ブロック３が有効であることを示す。パケット１によって占められるべき全ての第２ブロックのうち、最後の第２ブロックは、第２ブロック４であり、当該第２ブロック４におけるＰＤ内の情報フィールドＥＯＰの値は、０であり、これは、当該第２ブロック４がパケット１によって占められる最後の第２ブロックであることを示す。
【００２０】
この例示では、第２ブロック２におけるＰＤには、ＬＥＮ＝１２０、ＳＯＰ＝０、ＢＶ＝０が記録されてもよく、第２ブロック４におけるＰＤには、ＥＯＰ＝０、ＢＶ＝０が記録されてもよく、第２ブロック３におけるＰＤには、ＢＶ＝０が記録されてもよい。
【００２１】
更に例えば、パケット２は、第１ブロック０における第２ブロック５〜第２ブロック３１、および、第１ブロック１における第２ブロック０、第２ブロック１を占める。パケット２によって占められるべき全ての第２ブロックのうち、最初の第２ブロックは、第１ブロック０における第２ブロック５であり、当該第１ブロック０における第２ブロック５に対応するＰＤ内の情報フィールドＬＥＮの値は、例えば１５６０であり、パケット２の全長が１５６０バイトであることは示される。当該第１ブロック０における第２ブロック５におけるＰＤ内の情報フィールドＳＯＰの値は、０であり、当該第２ブロック５がパケット２によって占められる最初の第２ブロックであることは、示される。パケット２によって占められるべき何れか１つの第２ブロック（例えば、第１ブロック０における第２ブロック５〜第２ブロック３１、および、第１ブロック１における第２ブロック０および第２ブロック１）について、これらの第２ブロックに対応するＰＤ内の情報フィールドＢＶの値は、何れも０であり、これらの第２ブロックが有効であることは、示される。パケット２によって占められる第１ブロック０における第２ブロック３１は、第１ブロック０における最後の第２ブロックであり、当該第１ブロック０における第２ブロック３１に対応するＰＤ内の情報フィールドＮＢＡには、パケット２によって占められる次の第１ブロック、即ち、第１ブロック１のポインタ（例えば、第１ブロック１の第２ブロック０のアドレス）が記録されている。第１ブロック０における第２ブロック３１に対応するＰＤ内の情報フィールドＮＢＮの値は、２であり、これは、パケット２によって占められる、第１ブロック１における第２ブロックの数を記録する。第１ブロック０における第２ブロック３１に対応するＰＤ内の情報フィールドＶＡＬの値は、０であり、これは、情報フィールドＮＢＡが有効であることを示す。パケット２によって占められるべき全ての第２ブロックのうち、最後の第２ブロックは、第１ブロック１における第２ブロック１であり、当該第１ブロック１における第２ブロック１に対応するＰＤ内の情報フィールドＥＯＰ値は、０であり、これは、当該第１ブロック１における第２ブロック１がパケット２によって占められる最後の第２ブロックであることを示す。
【００２２】
この例示では、第１ブロック０における第２ブロック５のＰＤには、ＬＥＮ＝１５６０、ＳＯＰ＝０、ＢＶ＝０が記録されてもよく、第１ブロック０における第２ブロック３１のＰＤには、ＢＶ＝０、ＮＢＡ＝０ｘ８０４９３２４（占められる次の第１ブロックのポインタアドレスを示す）、ＮＢＮ＝２、ＶＡＬ＝０が記録されてもよく、他の第２ブロックのＰＤについては、ここで繰り返し説明しない。
【００２３】
上記応用場面において、図２Ａは、パケットを記憶する模式的なフローチャートである。
【００２４】
ステップ２０１では、記憶すべきパケットを取得する。
ステップ２０２では、当該パケットの長さと第１記憶空間の長さとに基づいて、当該パケットによって占められるべき１つまたは複数の第２ブロックを特定する。
【００２５】
ステップ２０３では、当該パケットを特定された第２ブロックの第１記憶空間に記憶する。
【００２６】
ステップ２０４では、特定された各第２ブロックについて、当該第２ブロックに対応するＰＤを生成し、当該ＰＤを当該第２ブロックの第２記憶空間に記憶する。
【００２７】
一例では、図２Ｂに示すように、ステップ２０２「当該パケットによって占められるべき１つまたは複数の第２ブロックを特定する」は、以下の方式を含むが、それに限定されない。
【００２８】
ステップ２０２１では、当該パケットに対応するキューを特定する。
ステップ２０２２では、当該キューが対応するテールポインタを有するか否かを判断する。そうであれば、ステップ２０２３へ進行し、そうでなければ、ステップ２０２４へ進行する。
【００２９】
ステップ２０２３では、当該キューが対応するテールポインタを有する場合、当該テールポインタで指される第２ブロックから、当該パケットによって占められるべき第２ブロックを特定する。
【００３０】
ステップ２０２４では、当該キューが対応するテールポインタを有さない場合、空き第１ブロックを選択し、選択された空き第１ブロックにおける最初の第２ブロックから、当該パケットによって占められるべき第２ブロックを特定する。
【００３１】
まず、当該パケットの長さと第１記憶空間の長さとに基づいて、当該パケットによって占められるべき第２ブロックの数Ｎを特定する。その後、当該テールポインタで指される第２ブロックから、または選択された空き第１ブロックにおける最初の第２ブロックから、当該パケットによって占められるべきＮ個の第２ブロックを特定する。第２ブロックのそれぞれは、当該パケットの一つのパケットセグメントを記憶する。例えば、パケットが３つの第２ブロックを占めるべき場合、パケットが３つのパケットセグメントに区分され、各パケットセグメントが１つの第２ブロックを占めさせる。
【００３２】
ネットワーク設備は、キューを用いてパケットを記憶してもよく、各キューは、唯一のキュー識別子を有する。無論、キューを用いてパケットを記憶する方式は、単に１つの例示に過ぎず、ネットワーク設備は、他の方式でパケットを記憶してもよい。キューでパケットを記憶することにより、異なるタイプのパケットを異なるキューに有効的に記憶することができる。例えば、ネットワーク設備は、３つのキュー（例えば、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ Ｆｉｒｓｔ−Ｏｕｔ、先入れ先出し）キュー）を含み、この３つのキューのキュー識別子は、それぞれキューＡ、キューＢおよびキューＣである。キューＡは、特徴Ａ（例えば、出力インターフェースがインターフェースＡである）を有するパケットを記憶し、キューＢは、特徴Ｂ（例えば、出力インターフェースがインターフェースＢである）を有するパケットを記憶し、キューＣは、特徴Ｃ（例えば、出力インターフェースがインターフェースＣである）を有するパケットを記憶する。
【００３３】
ネットワーク設備は、記憶すべきパケットを取得した後、先に当該パケットに対応するキューを特定してもよい。当該パケットが当該キューに対応する最初のパケットである場合、当該キューは、テールポインタおよびヘッドポインタを対応的に有していない。当該パケットが当該キューに対応する最初のパケットではない場合、当該キューは、テールポインタおよびヘッドポインタを対応的に有する。
【００３４】
ヘッドポインタは、キューに対応する最初のパケットのヘッダ部を指すポインタを示し、例えば、キューにおける最初のパケットの開始アドレスまたは開始位置を指す。テールポインタは、キューに対応する最後のパケットのテール部を指すポインタを示し、例えば、キューにおける最後のパケットの終了アドレスまたは終了位置を指す。
【００３５】
例えば、キューが空きである場合、記憶すべきパケット１を取得すれば、キューにパケット１を記憶し、当該キューのヘッドポインタがパケット１の開始アドレスを指すように更新し、当該キューのテールポインタがパケット１の終了アドレスを指すように更新する。その後、当該キューに記憶されるべきパケット２を取得すれば、当該キューにパケット２を記憶し、当該キューのテールポインタがパケット２の終了アドレスを指すように更新する。これをもって類推し、当該キューのパケットを受信する度に、当該キューのテールポインタを更新する。
【００３６】
キューにおけるパケットを読み取る必要がある場合、キューのヘッドポインタから読み取り始める。例えば、パケット１の読取が完了した後、当該キューからパケット１を削除し、当該キューのヘッドポインタがパケット２の開始アドレスを指すように更新する。これをもって類推し、一つのパケットをキューから読み取って削除する度に、当該キューのヘッドポインタを更新する。このように、パケットを記憶する過程は、キューのテールポインタから、パケットを順次記憶して読み取る過程であり、キューのヘッドポインタから、パケットを順次読み取る。
【００３７】
ステップ２０２３は、当該テールポインタで指される第２ブロックの次の第２ブロックから、Ｎ個の第２ブロックを選択することを含んでもよく、前記Ｎは、パケットの長さと第１記憶空間の長さとに基づいて特定されるものである。例えば、テールポインタが第１ブロック１における第２ブロック１０を指し、且つパケットの長さ１００バイト、第１記憶空間の長さ５６バイトに基づいて当該パケットが２つの第２ブロックを占めるべきであると特定される。このように、当該パケットによって占められる第２ブロックは、第１ブロック１における第２ブロック１１および第２ブロック１２である。更に例えば、テールポインタが第１ブロック１における第２ブロック３０を指し、且つパケットの長さ１００バイト、第１記憶空間の長さ５６バイトに基づいて当該パケットが２つの第２ブロックを占めるべきであると特定される。第１ブロック１に２つの空き第２ブロックが存在しないため、空き第１ブロック（例えば、第１ブロック３）を再度申請する。これを基に、当該パケットによって占められる第２ブロックは、第１ブロック１における第２ブロック３１および第１ブロック３における第２ブロック０である。
【００３８】
また、ステップ２０２３では、パケットによって占められるべき第２ブロックが特定された後、キューのテールポインタが当該パケットによって占められた最後の第２ブロックの終了アドレスを指すように更新してもよく、例えば、第２ブロック１２の終了アドレスを指す。
【００３９】
ステップ２０２４は、選択された空き第１ブロックにおける最初の第２ブロックから、Ｎ個の第２ブロックを選択することを含んでもよく、前記Ｎは、パケットの長さと第１記憶空間の長さとに基づいて特定されるものである。例えば、空き第１ブロック２が選択されれば、パケットの長さ１００バイト、第１記憶空間の長さ５６バイトに基づいて、当該パケットが２つの第２ブロックを占めるべきであると特定し、当該パケットによって占められる第２ブロックは、第１ブロック２における第２ブロック０および第２ブロック１である。
【００４０】
また、ステップ２０２４では、当該パケットによって占められるべき第２ブロックが特定された後、更に、キューのヘッドポインタが当該パケットによって占められる最初の第２ブロックの開始アドレスを指すように更新し、且つ、キューのテールポインタが当該パケットによって占められる最後の第２ブロックの終了アドレスを指すように更新してもよい。
【００４１】
ネットワーク設備は、空きアドレスプールをメンテナンスしてもよい。当該空きアドレスプールは、全ての空き第１ブロックを記憶する。空きブロックを申し込むとき、第１ブロックを単位として空きアドレスプールから当該空きブロックを選択してもよい。即ち、１つまたは複数の第２ブロックを直接申請することではなく、毎回１つまたは複数の第１ブロックを申請する必要がある。メモリの回収時も、第１ブロック単位で回収する。即ち、１つまたは複数の第２ブロックを空きアドレスプールに回収することではなく、１つまたは複数の第１ブロックを空きアドレスプールに回収する。
【００４２】
一例では、ステップ２０３「パケットを特定された第２ブロックの第１記憶空間に記憶する」とき、パケットがＮ個の第２ブロックを占めるべき場合、パケットをＮ個のパケットセグメントに区分し、このＮ個のパケットセグメントをＮ個の第２ブロックの第１記憶空間にそれぞれ記憶する。例えば、パケットの長さが１００バイトであり、パケットが第２ブロック１１および第２ブロック１２を占めるべきことを例とすると、当該パケットの前５６個のバイトをパケットセグメント１に振り分け、当該パケットセグメント１を当該第２ブロック１１の第１記憶空間に記憶し、当該パケットの後４４個のバイトをパケットセグメント２に振り分け、当該パケットセグメント２を当該第２ブロック１２の第１記憶空間に記憶する。
【００４３】
一例では、パケットが１つまたは複数の第２ブロックを占めるべきとき、ステップ２０４「当該第２ブロックに対応するＰＤを生成する」は、下記のことを含んでもよいが、それらに限定されない。当該第２ブロックがパケットによって占められるべき全ての第２ブロックのうちの最初の第２ブロックである場合、当該第２ブロックのＰＤに当該パケットの長さを記録し、且つ、当該第２ブロックがパケットによって占められる最初の第２ブロックであることを示すように、当該第２ブロックのＰＤ内の第１フラグを有効にセットすることが必要である。当該第２ブロックがパケットによって占められるべき全ての第２ブロックのうちの最後の第２ブロックである場合、当該第２ブロックがパケットによって占められる最後の第２ブロックであることを示すように、当該第２ブロックのＰＤ内の第２フラグを有効にセットすることが必要である。第２ブロックがパケットによって占められるべき何れか１つの第２ブロックである場合、当該第２ブロックのＰＤ内の、現在のブロックが占められているか否かを指示するフラグを有効にセットすることが必要である。本発明の例示では、ＰＤ内の何れかのフラグも値を付与するという形式で設定できる。例えば、情報フィールドＳＯＰ、情報フィールドＥＯＰ、情報フィールドＢＶは、それぞれ値を付与することが行われる。
【００４４】
また、パケットによって占められるべき全ての第２ブロックが少なくとも２つの第１ブロックに属するとき、当該第２ブロックがパケットによって占められた第１ブロックにおける最後の第２ブロックである場合、当該第２ブロックのＰＤ内の情報フィールドＮＢＡ値を、パケットによって占められるべき次の第１ブロックを指すポインタとして付与し、情報フィールドＮＢＮ値をパケットによって占められるべき次の第１ブロックにおける第２ブロックの数として付与し、情報フィールドＶＡＬ値を有効として付与することが必要である。
【００４５】
上記ＰＤの生成過程は、図１Ｃを参照すればよい。ここで繰り返し説明しない。
一例では、ステップ２０４「当該ＰＤを当該第２ブロックの第２記憶空間に記憶する」とき、パケットが第２ブロック１１および第２ブロック１２を占めるべきであれば、パケットの長さを第２ブロック１１の第２記憶空間におけるＰＤに対応する情報フィールドＬＥＮの位置に記憶することを特定し、第２ブロック１１がパケットによって占められる最初の第２ブロックであることを示すように、第２ブロック１１の第２記憶空間におけるＰＤに対応する情報フィールドＳＯＰへ値を付与し、第２ブロック１１がパケットによって占められることを示すように、第２ブロック１１の第２記憶空間におけるＰＤに対応する情報フィールドＢＶへ値を付与する。第２ブロック１２がパケットによって占められる最後の第２ブロックであることを示すように、第２ブロック１２の第２記憶空間におけるＰＤに対応する情報フィールドＥＯＰへ値を付与することを特定し、第２ブロック１２がパケットによって占められることを示すように、第２ブロック１２の第２記憶空間におけるＰＤに対応する情報フィールドＢＶへ値を付与する。
【００４６】
上記技術案によると、ＤＤＲメモリを複数の第１ブロックに区分し、各第１ブロックを複数の第２ブロックに区分し、各第２ブロックが第１記憶空間および第２記憶空間を含むことにより、パケットを第１記憶空間に記憶し、ＰＤを第２記憶空間に記憶することができる。これにより、パケットおよびＰＤが同一のメモリに記憶でき、ＤＤＲリソースが十分に利用できるとともに、シングルボード設計のコストが有効に低減され、配線の負担も軽減される。
【００４７】
それ相応に、図２Ｃは、パケットを読み取る模式的なフローチャートを示し、以下のステップを含む。
【００４８】
ステップ２１０では、読み取るべきパケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定する。
【００４９】
ステップ２１１では、読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取る。
【００５０】
ステップ２１２では、当該第２ブロックの第２記憶空間からＰＤを読み取る。
ステップ２１３では、読み取られたＰＤを利用して、読み取られたパケットセグメントをパケットに組み立てる。
【００５１】
ステップ２１４では、組み立てられたパケットを送信する。
図２Ｃに示すステップ２１０〜ステップ２１４は、パケットの読取過程、およびパケットの送信過程である。
【００５２】
具体的に、読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取り、情報フィールドＳＯＰが有効であるＰＤに対応する第２ブロックを最初の第２ブロックとして特定し、情報フィールドＥＯＰが有効であるＰＤに対応する第２ブロックを最後の第２ブロックとして特定する。現在の第１ブロックから情報フィールドＥＯＰが有効であるＰＤが読み取られていない場合、前記第１ブロックにおける最後の第２ブロックの第２記憶空間からＰＤを読み取ることにより、当該ＰＤにおける情報フィールドＮＢＡに基づいて次の第１ブロックを指すポインタを取得し、当該ＰＤにおける情報フィールドＮＢＮに基づいて、次の第１ブロックにおける、パケットによって占められる第２ブロックの数を取得し、前記ポインタと前記第２ブロックとの数に基づいて、次の第１ブロックにおける第２ブロックの第２記憶空間からＰＤを読み取る。情報フィールドＥＯＰが有効であるＰＤが読み取られるまでこれをもって類推し、情報フィールドＥＯＰが有効であるＰＤに対応する第２ブロックを最後の第２ブロックとして特定する。特定された最初の第２ブロックと特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケットに組み立て、組み立てられたパケットを送信する。
【００５３】
あるキューにおけるパケットを送信する必要があるとき、当該キューのヘッドポインタを検索し、このヘッドポインタは、当該キューにおける最初のパケットのヘッダ（例えば、最初のパケットの開始アドレス）を指す。この開始アドレスは、第２ブロックのアドレスであってもよい。その後、当該第２ブロックの所属する第１ブロックを特定し、当該第１ブロックの当該第２ブロックの第２記憶空間からＰＤを読み取る。
【００５４】
図１Ｃに示すように、第１ブロック０における第２ブロック０のＰＤ内の情報フィールドＳＯＰが有効であり、第１ブロック０における第２ブロック１のＰＤ内の情報フィールドＥＯＰが有効であるため、第１ブロック０における第２ブロック０を最初の第２ブロックとして特定し、第１ブロック０における第２ブロック１を最後の第２ブロックとして特定する。それ相応に、第１ブロック０における第２ブロック０、第２ブロック１の第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット０に組み立て、当該パケット０を送信する。
【００５５】
第１ブロック０における第２ブロック２のＰＤ内の情報フィールドＳＯＰが有効であり、第１ブロック０における第２ブロック４のＰＤ内の情報フィールドＥＯＰが有効であるため、第１ブロック０における第２ブロック２を最初の第２ブロックとして特定し、第１ブロック０における第２ブロック４を最後の第２ブロックとして特定する。それ相応に、第１ブロック０における第２ブロック２、第２ブロック３、第２ブロック４の第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット１に組み立て、当該パケット１を送信する。
【００５６】
更に例えば、第１ブロック０における第２ブロック５のＰＤ内の情報フィールドＳＯＰが有効であるため、第１ブロック０における第２ブロック５を最初の第２ブロックとして特定する。第１ブロック０において、第２ブロック５の後の各第２ブロック６−３１のＰＤ内の情報フィールドＥＯＰが何れも有効ではないため、次の第１ブロックを指すポインタを、第２ブロック３１のＰＤ中の情報フィールドＮＢＡから取得し、次の第１ブロックにおける、パケットによって占められる第２ブロックの数Ｍを第２ブロック３１のＰＤ中の情報フィールドＮＢＮから取得し、取得されたポインタに基づいて次の第１ブロックのアドレス（図では、第１ブロック１と例示）を特定し、第１ブロック１における前Ｍ個の第２ブロック（図では、第２ブロック０および第２ブロック１と例示）の第２記憶空間からＰＤを読み取る。第１ブロック１における第２ブロック１のＰＤ内の情報フィールドＥＯＰが有効であるため、第１ブロック１における第２ブロック１を最後の第２ブロックとして特定する。その後、第１ブロック０における第２ブロック５−第２ブロック３１、第１ブロック１における第２ブロック０および第２ブロック１の第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット２に組み立て、当該パケット２を送信する。
【００５７】
一例では、「特定された最初の第２ブロックと特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取る」ことの後、更に、読み取られたパケットセグメントによって占められた第１記憶空間を解放する。ある第１ブロックにおける各第２ブロックの第１記憶空間が何れも解放されたとき、前記第１ブロックを空き第１ブロックとして回収する。例えば、この第１ブロックを空きアドレスプールへ回収する。その後、ネットワーク設備は、この第１ブロックを用いて新たなパケットセグメントを記憶してもよい。また、ネットワーク設備は、当該第１ブロックで指される次の第１ブロックのアドレスに基づいて、キューのヘッドポインタを更新してもよい。
【００５８】
一例では、前記第１ブロックを空き第１ブロックとして回収した後、前記第１ブロックにおける各第２ブロックの第２記憶空間を解放する。
【００５９】
または、前記第１ブロックを空き第１ブロックとして回収した後、前記第１ブロックにおける各第２ブロックの第２記憶空間を解放せず、前記第１ブロックの反転フラグを調整してもよい。例えば、ネットワーク設備は、第２ブロックに対応するＰＤを生成する度に、当該第２ブロックの所属する第１ブロックの現在の反転フラグを取得し、当該第２ブロックに対応するＰＤが当該反転フラグを含むと特定する。第１ブロックを２回連続して使用する場合、それぞれの反転フラグが異なる。例えば、第１ブロックを１回目に使用するとき、対応する反転フラグが０であり、空き第１ブロックとして回収された後、２回目に使用するとき、対応する反転フラグが０と異なる（例えば、１であってもよい）ように変更され、再び空き第１ブロックとして回収された後、３回目に使用するとき、対応する反転フラグが１と異なる（例えば、０または２であってもよい）ように変更され、これをもって類推する。
【００６０】
例えば、１回目に第１ブロック１を用いてパケットを記憶するとき、第１ブロック１における各第２ブロックの第２記憶空間にＰＤを書き込む。図３Ａは、第２記憶空間にＰＤを書き込む例示である。第１ブロック１に対する読み操作が完了した後、これらのＰＤを処理しないと、エラーが出てしまう。２回目に第１ブロック１を用いてパケットを記憶するとき、第１ブロック１における第２ブロック０、第２ブロック１、第２ブロック２のみにパケットセグメントおよびＰＤを書き込み、第１ブロック１における他の第２ブロックにパケットセグメントおよびＰＤを書き込まないと仮定する。このように、第１ブロック１に対して読み操作を再度行う際、第２ブロック０、第２ブロック１、第２ブロック２からしかパケットセグメントを読み取ることができない。しかし、第２ブロック０〜第２ブロック３１からＰＤを読み取ることができる。そのため、これらのＰＤを用いて読み取られたパケットセグメントをパケットに組み立てるとき、エラーが出てしまう。
【００６１】
上記発見について、一例では、第１ブロック１に対する読み操作が完了した後、第１ブロック１における各第２ブロックの第２記憶空間のＰＤを削除する。しかし、当該方式では、毎回第１ブロック１に対する読み操作が完了した後、第１ブロック１の各第２ブロックの第２記憶空間のＰＤを削除する必要があり、第２ブロックの繰り返し操作が引き起こされ、ネットワーク設備の処理性能が低減される。
【００６２】
別の例では、各第１ブロックに対して反転フラグをセットし、当該反転フラグが第１数値（例えば、０）であってもよく、第２数値（例えば、１）であってもよい。これを基に、毎回第１ブロックに対する読み操作が完了した後で当該第１ブロックを空き第１ブロックとして回収したとき、当該第１ブロックの前回反転フラグが第１数値であれば、当該第１ブロックの現在反転フラグを第２数値として変更する。逆に言えば、当該第１ブロックの前回反転フラグが第２数値であれば、当該第１ブロックの現在反転フラグを第１数値に変更する。
【００６３】
これを基に、第１ブロックにおける第２ブロックの第２記憶空間にＰＤを記憶する度に、前記ＰＤは、当該第１ブロックの現在反転フラグを更に含んでもよい。例えば、図３Ｂおよび３Ｄに示すように、第２ブロックの第２記憶空間におけるＰＤは、上記情報フィールドＬＥＮ、ＳＯＰ、ＥＯＰ、ＢＶ、ＶＡＬ、ＮＢＡ、ＮＢＮを含む以外、対応する第１ブロックの現在反転フラグを記録するように、情報フィールドＳＥＬを含む。または、図３Ｃおよび３Ｅに示すように、第２ブロックの第２記憶空間におけるＰＤは、２セットの情報フィールドＬＥＮ、ＳＯＰ、ＥＯＰ、ＢＶ、ＶＡＬ、ＮＢＡ、ＮＢＮを含む。情報フィールドＬＥＮ０、ＳＯＰ０、ＥＯＰ０、ＢＶ０、ＶＡＬ０、ＮＢＡ０、ＮＢＮ０が有効であるとき、これは、第１ブロックに対応する現在反転フラグが第１数値であることを意味し、情報フィールドＬＥＮ１、ＳＯＰ１、ＥＯＰ１、ＢＶ１、ＶＡＬ１、ＮＢＡ１、ＮＢＮ１が有効であるとき、これは、第１ブロックに対応する現在反転フラグが第２数値であることを意味する。
【００６４】
このように、第１ブロックの現在反転フラグが０である場合、図３Ａについて、対応するＰＤ内の情報フィールドＳＥＬは、図３Ｂに示すように値が０であってもよい。図３Ｂに「ＳＥＬ０」と簡素化で記し、第１ブロックの現在の反転フラグが０であることを示す。または、図３Ｃに示すように、対応するＰＤ内の情報フィールドＳＯＰ０、ＥＯＰ０、ＮＢＮ０、ＮＢＡ０は、有効である。情報フィールドＳＯＰ０、ＥＯＰ０、ＮＢＮ０、ＮＢＡ０における「０」は、第１ブロックの現在の反転フラグが０であることを示す。
【００６５】
その後、第１ブロックを空き第１ブロックとして回収したとき、第１ブロックに対応する前回反転フラグが０であるため、当該第１ブロックの現在反転フラグを１に変更する。再度当該第１ブロックを用いてパケットを記憶する際、第２ブロック０、第２ブロック１、第２ブロック２のみにパケットおよびＰＤを書き込む場合、対応するＰＤ内の情報フィールドＳＥＬは、図３Ｄに示すように値が１であってもよい。図３Ｄに「ＳＥＬ１」と簡素化で記し、第１ブロックの現在の反転フラグが１であることを示す。または、図３Ｅに示すように、対応するＰＤ内の情報フィールドＳＯＰ１、ＥＯＰ１は、有効である。情報フィールドＳＯＰ１、ＥＯＰ１における「１」は、第１ブロックの現在の反転フラグが１であることを示す。
【００６６】
図３Ｄおよび図３Ｂを比較すると、第１ブロックに対して読み操作を行う際、第２ブロック０〜第２ブロック３１からＰＤを読み取ることができるが、第２ブロック０、第２ブロック１、第２ブロック２に対応するＰＤ内の情報フィールドＳＥＬの値のみは、１である。つまり、第２ブロック０、第２ブロック１、第２ブロック２のみは、第１ブロックの現在の反転フラグ１で使用される。そのため、第２ブロック０、第２ブロック１、第２ブロック２の第２記憶空間におけるＰＤのみを用いて、読み取られたパケットセグメントをパケットに組み立て、エラーが発生することはない。同様な理由で、図３Ｃおよび図３Ｅを比較すると、第２ブロック０、第２ブロック１、第２ブロック２の第２記憶空間におけるＰＤのみを用いて、読み取られたパケットセグメントをパケットに組み立てる。
【００６７】
上記方法と同様な出願思想に基づき、本発明の実施例は、パケット処理装置を更に提供する。メモリが複数の第１ブロックに区分され、各第１ブロックが複数の第２ブロックに区分され、各第２ブロックが何れも第１記憶空間および第２記憶空間を含む。図４に示すように、前記装置、下記のモジュールを備える。
【００６８】
書込モジュール４０１は、記憶すべき第１パケットを取得し、前記第１パケットの長さと前記第１記憶空間の長さとに基づいて、前記第１パケットによって占められるべき１つまたは複数の第２ブロックを特定し、前記第１パケットを前記特定された各第２ブロックの第１記憶空間に記憶し、前記特定された各第２ブロックについて、当該第２ブロックに対応するパケット記述子（ＰＤ）を生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶する。
【００６９】
読取モジュール４０２は、読み取るべき第２パケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定し、前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取る、読み取られたＰＤを利用して、読み取られたパケットセグメントを前記第２パケットに組み立てる。１つの例示によると、読取モジュール４０２は、更に、前記第２パケットを送信するように構成される。説明すべきことは、記憶すべき第１パケットと読み取るべき第２パケットとが同一のパケットであってもよく、異なるパケットであってもよい。本発明ではそれについて限定しない。
【００７０】
一例では、前記書込モジュール４０１は、前記第１パケットによって占められるべき第２ブロックを特定する過程において、具体的に、前記第１パケットに対応するキューを特定し、前記キューが対応するテールポインタを有する場合、前記テールポインタで指される第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定し、前記キューが対応するテールポインタを有さない場合、空き第１ブロックを選択し、選択された空き第１ブロックにおける最初の第２ブロックから、前記第１パケットによって占められるべき第２ブロックを特定する。
【００７１】
一例では、前記書込モジュール４０１は、当該第２ブロックに対応するＰＤを生成する過程において、具体的に、当該第２ブロックが前記第１パケットによって占められるべき最初の第２ブロックである場合、前記第１パケットの長さを当該第２ブロックに対応するＰＤ内に記録し、且つ、当該第２ブロックが前記第１パケットを記憶する最初の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第１フラグを有効にセットし、当該第２ブロックが前記第１パケットによって占められるべき最後の第２ブロックである場合、当該第２ブロックが前記第１パケットを記憶する最後の第２ブロックであることを示すように、当該第２ブロックに対応するＰＤ内の第２フラグを有効にセットする。
【００７２】
一例では、前記第１パケットによって占められるべき全ての第２ブロックが少なくとも２つの異なる第１ブロックに属するとき、前記書込モジュール４０１は、当該第２ブロックに対応するＰＤを生成する過程において、具体的に、当該第２ブロックが現在の第１ブロックの最後の第２ブロックであるが、前記第１パケットによって占められるべき最後の第２ブロックではない場合、前記第１パケットによって占められるべき次の第１ブロックを指すポインタを、当該第２ブロックに対応するＰＤ内に記録し、前記次の第１ブロックにおける、前記第１パケットによって占められるべき第２ブロックの数を当該第２ブロックに対応するＰＤ内に記録する。
【００７３】
一例では、前記書込モジュール４０１は、当該第２ブロックに対応するＰＤを生成する過程において、具体的に、当該第２ブロックの所属する第１ブロックの現在の反転フラグを取得し、当該第２ブロックに対応するＰＤに前記第１ブロックの現在の反転フラグを含ませる。第１ブロックを２回連続して使用する場合、それぞれの反転フラグが異なる。
【００７４】
前記読取モジュール４０２は、具体的に、前記読み取るべき第２ブロックの所属する現在の第１ブロックの各第２ブロックの第２記憶空間からＰＤを読み取り、第１フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最初の第２ブロックとして特定し、第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定し、第２フラグが有効であるＰＤを前記現在の第１ブロックから読み取っていない場合、前記現在の第１ブロックにおける最後の第２ブロックの第２記憶空間からＰＤを読み取り、次の第１ブロックを指すポインタを当該ＰＤから取得し、前記次の第１ブロックにおける、前記第２パケットによって占められる第２ブロックの数を取得し、前記ポインタと前記第２ブロックとの数に基づいて、前記次の第１ブロックにおける第２ブロックの第２記憶空間からＰＤを読み取る。第２フラグが有効であるＰＤを読み取るまでこれをもって類推し、第２フラグが有効であるＰＤに対応する第２ブロックを、前記第２パケットを記憶する最後の第２ブロックとして特定し、特定された最初の第２ブロックと特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントを前記第２パケットに組み立て、組み立てられた前記第２パケットを送信する。
【００７５】
前記読取モジュール４０２は、更に、特定された最初の第２ブロックと特定された最後の第２ブロックの間の各第２ブロックの第１記憶空間からパケットセグメントを読み取った後、読み取られたパケットセグメントによって占められた第１記憶空間を解放し、ある第１ブロックの各第２ブロックの第１記憶空間が何れも解放されたとき、前記第１ブロックを空き第１ブロックとして回収し、前記第１ブロックが空き第１ブロックとして回収された後、前記第１ブロックの各第２ブロックの第２記憶空間を解放する、または、前記第１ブロックの現在の反転フラグを調整する。
【００７６】
上記方法と同様な出願思想に基づき、本発明の実施例は、ネットワーク設備を更に提供する。本発明の実施例に係るネットワーク設備は、ハードウェア実装から言うと、ハードウェアアーキテクチャの模式図が具体的に図５Ａに示される。前記ネットワーク設備は、転送チップ５１０および記憶手段５２０を備え、前記記憶手段５２０は、前記転送チップ５１０と別個に配置される。例えば、前記記憶手段５２０は、ＤＤＲメモリであってもよく、無論、前記記憶手段５２０は、他のタイプの記憶手段であってもよい。これについて制限しない。
【００７７】
前記記憶手段５２０のメモリが複数の第１ブロックに区分され、各第１ブロックが複数の第２ブロックに区分され、各第２ブロックが何れも第１記憶空間および第２記憶空間を含む。
【００７８】
前記転送チップ５１０は、記憶すべき第１パケットを取得し、前記第１パケットの長さと前記第１記憶空間の長さとに基づいて、前記第１パケットによって占められるべき第２ブロックを特定し、前記第１パケットを記憶手段５２０における前記特定された各第２ブロックの第１記憶空間に記憶し、前記特定された各第２ブロックについて、当該第２ブロックに対応するパケット記述子（ＰＤ）を生成し、前記ＰＤを当該第２ブロックの第２記憶空間に記憶し、且つ、読み取るべき第２パケットの開始アドレスに基づいて、読み取るべき１つまたは複数の第２ブロックを特定し、記憶手段５２０における前記読み取るべき各第２ブロックの第１記憶空間からパケットセグメントを読み取り、記憶手段５２０における前記読み取るべき各第２ブロックの第２記憶空間からＰＤを読み取り、読み取られたＰＤを利用して、読み取られたパケットセグメントを第２パケットに組み立て、組み立てられた第２パケットを送信する。
【００７９】
転送チップ５１０は、上記パケット処理方法を実施することができ、具体的に、上記パケット処理方法の各操作を含む。例えば、転送チップ５１０が上記パケット処理方法の各操作を実行できるように、上記パケット処理方法を実施するためのフローを転送チップ５１０に書き込む。ここで繰り返し説明しない。
【００８０】
転送チップ５１０は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ Ｇａｔｅ Ａｒｒａｙ、フィールドプログラマブルゲートアレイ）、ＣＰＬＤ（Ｃｏｍｐｌｅｘ Ｐｒｏｇｒａｍｍａｂｌｅ Ｌｏｇｉｃ Ｄｅｖｉｃｅ、複雑なプログラマブルロジックデバイス）等を含むが、それらに限定されるものではない。この転送チップ５１０のタイプについて制限せず、上記機能を実現すればよい。
【００８１】
一例では、記憶手段５２０が転送チップ５１０のチップ外メモリ、例えばＤＤＲであるため、パケットおよびＰＤを同一のメモリに記憶することにより、転送チップ５１０が記憶手段５２０の同一のメモリからパケットおよびＰＤを読み取ることができ、読取効率が相対的に高くなる。
【００８２】
別の例では、図５Ｂに示すように、上記転送チップ５１０は、転送エンジン５１１およびＴＭ（Ｔｒａｆｆｉｃ Ｍａｎａｇｅ、トラフィック管理）モジュール５１２を更に備えてもよい。転送エンジン５１１は、パケットを受信した後、パケットに対してフロー分類５１１−１およびトラフィック監視（例えば、ＣＡＲ（Ｃｏｍｍｉｔｔｅｄ Ａｃｃｅｓｓ Ｒａｔｅ、専用アクセスレート）レート制限操作等）５１１−２を行い、パケットをＴＭモジュール５１２へ出力する。
【００８３】
ＴＭモジュール５１２は、パケットを受信した後、パケットに対して輻輳回避５１２−１、輻輳管理５１２−２、トラフィック整形５１２−３等の操作を行ってもよい。輻輳回避５１２−１は、ＷＲＥＤ（Ｗｅｉｇｈｔｅｄ Ｒａｎｄｏｍ Ｅａｒｌｙ Ｄｅｔｅｃｔｉｏｎ、重み付けランダム早期検出）、テール廃棄等を含んでもよく、輻輳管理５１２−２は、ＰＱ（Ｐｒｉｏｒｉｔｙ Ｑｕｅｕｅ、優先度キュー）スケジューリング、ＷＦＱ（Ｗｅｉｇｈｔｅｄ Ｆａｉｒ Ｑｕｅｕｉｎｇ、重み付け均等化キューイング）スケジューリング等を含んでもよい。また、ＴＭモジュール５１２は、パケットを受信したとき、パケットの所属するキューに基づいて、パケットを記憶手段５２０にキャッシュしてもよい。ＴＭモジュール５１２は、パケットを送信する必要があるとき、パケットの所属するキューに基づいて、パケットを記憶手段５２０から読み出して送信する。
【００８４】
ＴＭモジュール５１２がパケットを記憶手段５２０にキャッシュし、ＴＭモジュール５１２がパケットを記憶手段５２０から読み出して送信する過程、つまり、上記パケット処理方法は、ここで繰り返し説明しない。
【００８５】
上述したのは、本発明の実施例に過ぎず、本発明を制限するためのものではない。当業者にとって、本発明は、各種の変更および変化があり得る。本発明の精神及び原則内でなされた如何なる変更、均等物による置換、改良等も、本発明の保護範囲内に含まれる。
【図１Ａ】
2020529166.tif 000004
【図１Ｂ】
2020529166.tif 000005
【図１Ｃ】
2020529166.tif 000006
【図２Ａ】
2020529166.tif 000007
【図２Ｂ】
2020529166.tif 000008
【図２Ｃ】
2020529166.tif 000009
【図３Ａ】
2020529166.tif 000010
【図３Ｂ】
2020529166.tif 000011
【図３Ｃ】
2020529166.tif 000012
【図３Ｄ】
2020529166.tif 000013
【図３Ｅ】
2020529166.tif 000014
【図４】
2020529166.tif 000015
【図５Ａ】
2020529166.tif 000016
【図５Ｂ】
2020529166.tif 000017
【国際調査報告】
2020529166.tif 000018
2020529166.tif 000019
2020529166.tif 000020
2020529166.tif 000021