(57)【特許請求の範囲】
【請求項１】
上位レイヤにおいてパケット再送制御を行うネットワーク制御ブロックと、
前記上位レイヤよりも下位である下位レイヤにおいて、前記上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うパケット再送制御ブロックと
を備え、
前記ネットワーク制御ブロックは、同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合、パケット再送を行い、
前記パケット再送制御ブロックは、同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われるか否かを判定し、
前記同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われる場合、前記パケット再送制御ブロックは、前記下位レイヤにおける前記同一パケットの再送を禁止し、
前記パケット再送制御ブロックは、
パケット再送用のパケットが格納される再送バッファと、
制御ブロックと、
情報記憶ブロックと
を備え、
前記情報記憶ブロックに格納されている情報は、前記ネットワーク制御ブロックによる前記重複確認応答パケットの受信回数である重複受信回数を含み、
前記パケット再送制御ブロックから前記ネットワーク制御ブロックに転送されるパケットが前記重複確認応答パケットである場合、前記制御ブロックは、前記重複受信回数をインクリメントし、
前記制御ブロックは、所定のトリガに応答して前記重複受信回数を参照し、
前記重複受信回数が前記所定の回数以上の場合、前記制御ブロックは、前記下位レイヤにおける前記同一パケットの再送を行わず、前記再送バッファに格納されている前記同一パケットを解放する
パケット再送制御システム。
【請求項２】
請求項１に記載のパケット再送制御システムであって、
前記情報記憶ブロックに格納されている前記情報は、更に、前記上位レイヤにおいて確認応答済みのシーケンス番号である確認応答済シーケンス番号を含み、
前記パケット再送制御ブロックが前記上位レイヤにおける確認応答パケットを前記ネットワーク制御ブロックに転送する場合、前記制御ブロックは、前記転送される確認応答パケットが確認応答しているシーケンス番号である最新シーケンス番号を、前記確認応答済シーケンス番号と比較し、
前記最新シーケンス番号が前記確認応答済シーケンス番号と同じである場合、前記制御ブロックは、前記転送される確認応答パケットが前記重複確認応答パケットであると判定し、前記重複受信回数をインクリメントし、
前記最新シーケンス番号が前記確認応答済シーケンス番号よりも新しい場合、前記制御ブロックは、前記確認応答済シーケンス番号を前記最新シーケンス番号で更新し、また、前記重複受信回数を初期化する
パケット再送制御システム。
【請求項３】
請求項２に記載のパケット再送制御システムであって、
前記所定のトリガは、前記下位レイヤにおいて前記同一パケットに関する再送タイムアウトが発生することであり、
前記下位レイヤにおいて前記同一パケットに関する再送タイムアウトが発生した場合、前記制御ブロックは、前記重複受信回数を参照する
パケット再送制御システム。
【請求項４】
請求項３に記載のパケット再送制御システムであって、
前記重複受信回数が前記所定の回数未満の場合、前記制御ブロックは、前記下位レイヤにおける前記同一パケットの再送を行う
パケット再送制御システム。
【請求項５】
請求項２に記載のパケット再送制御システムであって、
前記所定のトリガは、前記パケット再送制御ブロックが前記上位レイヤにおける確認応答パケットを前記ネットワーク制御ブロックに転送することであり、
前記上位レイヤにおける確認応答パケットが前記ネットワーク制御ブロックに転送され、前記重複受信回数が更新された後、前記制御ブロックは、前記重複受信回数を参照する
パケット再送制御システム。
【請求項６】
請求項５に記載のパケット再送制御システムであって、
前記下位レイヤにおいて前記同一パケットに関する再送タイムアウトが発生した場合、前記制御ブロックは、前記下位レイヤにおける前記同一パケットの再送を行う
パケット再送制御システム。
【請求項７】
ネットワーク制御ブロックが、上位レイヤにおいてパケット再送制御を行うことと、
パケット再送制御ブロックが、前記上位レイヤよりも下位である下位レイヤにおいて、前記上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うことと
を含み、
前記上位レイヤにおいてパケット再送制御を行うことは、同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合に、パケット再送を行うことを含み、
前記下位レイヤにおいてパケット再送制御を行うことは、
同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われるか否かを判定することと、
前記同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われる場合、前記下位レイヤにおける前記同一パケットの再送を禁止することと
を含み、
前記パケット再送制御ブロックは、
パケット再送用のパケットが格納される再送バッファと、
制御ブロックと、
情報記憶ブロックと
を備え、
前記情報記憶ブロックに格納されている情報は、前記ネットワーク制御ブロックによる前記重複確認応答パケットの受信回数である重複受信回数を含み、
前記下位レイヤにおいてパケット再送制御を行うことは、
前記パケット再送制御ブロックから前記ネットワーク制御ブロックに転送されるパケットが前記重複確認応答パケットである場合、前記制御ブロックが、前記重複受信回数をインクリメントすることと、
前記制御ブロックが、所定のトリガに応答して前記重複受信回数を参照することと、
前記重複受信回数が前記所定の回数以上の場合、前記制御ブロックが、前記下位レイヤにおける前記同一パケットの再送を行わず、前記再送バッファに格納されている前記同一パケットを解放することと
を含む
パケット再送制御方法。
【請求項８】
パケット再送制御処理をコンピュータに実行させるパケット再送制御プログラムが記録された記録媒体であって、
前記パケット再送制御処理は、
ネットワーク制御ブロックが、上位レイヤにおいてパケット再送制御を行うことと、
パケット再送制御ブロックが、前記上位レイヤよりも下位である下位レイヤにおいて、前記上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うことと
を含み、
前記上位レイヤにおいてパケット再送制御を行うことは、同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合に、パケット再送を行うことを含み、
前記下位レイヤにおいてパケット再送制御を行うことは、
同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われるか否かを判定することと、
前記同一パケットの再送が前記上位レイヤにおいて前記下位レイヤよりも早く行われる場合、前記下位レイヤにおける前記同一パケットの再送を禁止することと
を含み、
前記パケット再送制御ブロックは、
パケット再送用のパケットが格納される再送バッファと、
制御ブロックと、
情報記憶ブロックと
を備え、
前記情報記憶ブロックに格納されている情報は、前記ネットワーク制御ブロックによる前記重複確認応答パケットの受信回数である重複受信回数を含み、
前記下位レイヤにおいてパケット再送制御を行うことは、
前記パケット再送制御ブロックから前記ネットワーク制御ブロックに転送されるパケットが前記重複確認応答パケットである場合、前記制御ブロックが、前記重複受信回数をインクリメントすることと、
前記制御ブロックが、所定のトリガに応答して前記重複受信回数を参照することと、
前記重複受信回数が前記所定の回数以上の場合、前記制御ブロックが、前記下位レイヤにおける前記同一パケットの再送を行わず、前記再送バッファに格納されている前記同一パケットを解放することと
を含む
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信におけるパケット再送制御（ｐａｃｋｅｔ  ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ）に関する。特に、本発明は、パケット再送制御機能を有するプロトコルよりも下位レイヤにおいてもパケット再送制御を行う場合の技術に関する。
【背景技術】
【０００２】
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）は、インターネットにおいて広く利用されているプロトコルであり、ＯＳＩ（Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）参照モデルの第四層（トランスポート層）に相当する。ＴＣＰは、端末間でコネクションを確立し、信頼性のある効率的な通信を提供する。これを実現するため、ＴＣＰにはいくつかの機能が備わっている。そのＴＣＰの機能の１つとして、ネットワーク中でパケットロスが発生した場合に、送信端がロスしたパケットを受信端へ再度転送するパケット再送制御機能がある。具体的には、ＴＣＰのパケット再送制御機能としては、（Ａ）高速再転送（Ｆａｓｔ  Ｒｅｔｒａｎｓｍｉｔ）によるパケット再送と、（Ｂ）タイムアウトによるパケット再送がある。【０００３】
ＴＣＰでは、受信端が正しい順序でパケットを受信すると、次に受け取るべきデータのシーケンス番号を送信端に通知する。つまり、正しい順序で受信したパケットのシーケンス番号を確認応答する「ＡＣＫ（ＡＣＫｎｏｗｌｅｄｇｅ）パケット」が送信端に返信される。ここで、同じシーケンス番号を確認応答するＡＣＫパケットは、以下「重複ＡＣＫ（Ｄｕｐｌｉｃａｔｅ  ＡＣＫ）パケット」と参照される。非特許文献１に記載されているように、Ｆａｓｔ  Ｒｅｔｒａｎｓｍｉｔによるパケット再送の場合、送信端は、重複ＡＣＫパケットを一般的には３つ受信すると、そのシーケンス番号から始まるパケットはロスした可能性が高いと判断し、当該パケットを再送する。【０００４】
また、ＴＣＰは、再送タイムアウト（ＲＴＯ：Ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  Ｔｉｍｅｏｕｔ）と呼ばれるパラメータを保持している。非特許文献２に記載されているように、ＲＴＯは、ＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ）を基に算出される。タイムアウトによるパケット再送の場合、送信端は、パケットを転送してからＲＴＯの時間が経過しても受信端からＡＣＫパケットが全く返信されない場合に、対応するパケットを再送する。【０００５】
ここで、例として、データセンターのようなＲＴＴが数１０から数１００マイクロ秒程度の非常に短いネットワークを考える。そのようなネットワークにおいて、ＲＴＯをマイクロ秒単位にまで短縮することができれば、ＡＣＫパケットの返信が無いために新規パケットを転送することができない期間を短縮することができる。これは、通信効率の向上につながる。【０００６】
しかしながら、一般的に、ＴＣＰスタックはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に実装されており、ＯＳはソフトウェアで実装されているため、ＲＴＯを高精度に設定することができない。例えば、Ｌｉｎｕｘの単位時間（Ｊｉｆｆｉｅｓ）は１０ミリ秒単位であるため、Ｌｉｎｕｘの標準的なＴＣＰスタックは、ＲＴＯを１０ミリ秒未満に短縮できない。ＴＣＰのＲＴＯをマイクロ秒レベルまで短縮することができないため、データセンターのようなネットワークにおいて、ＴＣＰのスループットは低下する。【０００７】
これを解決する方法の１つとして、非特許文献３に開示されているように、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）層のような下位レイヤにおいてもパケット再送制御を行うことが提案されている。具体的には、ＴＣＰ層よりも下位のＭＡＣ層において、マイクロ秒レベルのタイムアウト判定を行ってパケット再送制御を行う。これにより、ＯＳやＴＣＰスタックの構成を変えることなく、ＲＴＴの短いネットワークにおいても通信効率を向上させることができる。尚、ＭＡＣ層等の第二層では一般的に、パケットではなくフレームという用語が用いられるが、ここでは両者を区別せずに用いることとする。【０００８】
特許文献１には、無線環境を想定し、ＭＡＣ層においてデータの再送処理の時間を計測し、再送処理時間を超えたパケット破棄して、当該パケットの再送を中止する場合等に、再送パケットを含む送受信パケットを保持するバッファメモリへのアクセスの衝突を避けるためのパケットデータ削除方法が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−１２４４９６号公報
【非特許文献】
【００１０】
【非特許文献１】Ｍ．  Ａｌｌｍａｎ，  Ｖ．  Ｐａｘｓｏｎ  ａｎｄ  Ｅ．  Ｂｌａｎｔｏｎ，  “ＴＣＰ  Ｃｏｎｇｅｓｔｉｏｎ  Ｃｏｎｔｒｏｌ”，  ＩＥＴＦ，  ＲＦＣ５６８１，  ｐｐ．７−９，  Ｓｅｐｔｅｍｂｅｒ  ２００９．
【非特許文献２】Ｖ．  Ｐａｘｓｏｎ  ａｎｄ  Ｍ．  Ａｌｌｍａｎ，  “Ｃｏｍｐｕｔｉｎｇ  ＴＣＰ’ｓ  Ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  Ｔｉｍｅｒ”，  ＩＥＴＦ，  ＲＦＣ２９８８，  Ｎｏｖｅｍｂｅｒ  ２０００．
【非特許文献３】Ｔ．  Ｔａｋａｍｉｃｈｉ  ｅｔ  ａｌ．，“１００Ｇｂｐｓ  Ｕｌｔｒａ−Ｈｉｇｈ  Ｓｐｅｅｄ  ＭＡＣ  Ｔｅｃｈｎｏｌｏｇｙ  −Ａ  Ｓｔｕｄｙ  ｏｎ  ｔｈｅ  Ｔｅｒａｂｉｔ−Ｃｌａｓｓ  ＬＡＮ  ＮＩＣ−”，  ＩＥＩＣＥ  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ，  ＯＳＣ２００８−１１２，  Ｊａｎｕａｒｙ  ２００９．
【発明の概要】
【００１１】
上述の通り、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔの場合、一般的には３つの重複ＡＣＫパケットの受信をトリガとして、パケット再送が行われる。図１Ａは、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔによるパケット再送の一例を示している。図１Ａでは、送信端からパケットＰ１００〜Ｐ１０４が送信され、そのうちパケットＰ１００に続くパケットＰ１０１がネットワーク中でロスしている。正常に受信されたパケットＰ１００に対するＡＣＫパケットは、ＡＣＫ１００で表されている。また、ＡＣＫ１００と同じシーケンス番号を確認応答する３つの重複ＡＣＫパケットは、Ｄｕｐｌｉｃａｔｅ  ＡＣＫ１〜３で表されている。３つ目の重複ＡＣＫパケットに応答して、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動し、送信端は、ＡＣＫ１００が要求するパケットＰ１０１を再送する。
【００１２】
図１Ｂは、ＭＡＣ層のような下位レイヤにおいても、タイムアウトによるパケット再送が行われる場合を示している。図１Ｂ中、実線はＴＣＰパケットを表し、点線は下位レイヤのパケットを表している。ここで、場合によっては、図１Ｂに示されるように、下位レイヤでのタイムアウトによるパケット再送よりも早く、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動する。その場合、ＴＣＰのＦａｓｔ  ＲｅｔｒａｎｓｍｉｔによってパケットＰ１０１が再送された後、下位レイヤにおいてパケットＰ１０１のタイムアウトが発生し、下位レイヤにおいてパケットＰ１０１が再送される。つまり、パケットＰ１０１の再送が重複する。このことは、ネットワーク帯域の浪費につながる。
【００１３】
例として、リンク伝送能力が１０Ｇｂｐｓであり、ＲＴＴが５０マイクロ秒程度である、広帯域、低遅延のネットワークを考える。下位のＭＡＣ層におけるＲＴＯは、ＲＴＴよりも大きな値に設定され、例えば、ＲＴＴの２倍の１００マイクロ秒に設定される。その一方、１５００ｂｙｔｅのＭＡＣフレームの転送間隔は、１．２マイクロ秒程度（＝１５００×８ｂｉｔ／１０Ｇｂｐｓ）である。よって、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔは、６０マイクロ秒程度（≒ＲＴＴ＋３×１．２マイクロ秒）で起動する。この場合、下位レイヤでのタイムアウトによるパケット再送よりも早くＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動し、パケットＰ１０１の再送が重複する。
【００１４】
本発明の１つの目的は、上位レイヤと下位レイヤの双方でパケット再送制御が実行される場合に、同一パケットの再送が重複することを防止する技術を提供することにある。
【００１５】
本発明の１つの観点において、パケット再送制御システムが提供される。そのパケット再送制御システムは、上位レイヤにおいてパケット再送制御を行うネットワーク制御ブロックと、その上位レイヤよりも下位である下位レイヤにおいて、上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うパケット再送制御ブロックと、を備える。ネットワーク制御ブロックは、同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合、パケット再送を行う。パケット再送制御ブロックは、同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われるか否かを判定する。同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われる場合、パケット再送制御ブロックは、下位レイヤにおける同一パケットの再送を禁止する。
【００１６】
本発明の他の観点において、パケット再送制御方法が提供される。そのパケット再送制御方法は、（Ａ）上位レイヤにおいてパケット再送制御を行うことと、（Ｂ）その上位レイヤよりも下位である下位レイヤにおいて、上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うことと、を含む。上記（Ａ）上位レイヤにおいてパケット再送制御を行うことは、（Ａ１）同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合に、パケット再送を行うことを含む。上記（Ｂ）下位レイヤにおいてパケット再送制御を行うことは、（Ｂ１）同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われるか否かを判定することと、（Ｃ）同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われる場合、下位レイヤにおける同一パケットの再送を禁止することと、を含む。
【００１７】
本発明の更に他の観点において、パケット再送制御処理をコンピュータに実行させるパケット再送制御プログラムが提供される。そのパケット再送制御処理は、（Ａ）上位レイヤにおいてパケット再送制御を行うことと、（Ｂ）その上位レイヤよりも下位である下位レイヤにおいて、上位レイヤよりも短い再送タイムアウトでパケット再送制御を行うことと、を含む。上記（Ａ）上位レイヤにおいてパケット再送制御を行うことは、（Ａ１）同一のシーケンス番号を通知する確認応答パケットである重複確認応答パケットを所定の回数受け取った場合に、パケット再送を行うことを含む。上記（Ｂ）下位レイヤにおいてパケット再送制御を行うことは、（Ｂ１）同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われるか否かを判定することと、（Ｃ）同一パケットの再送が上位レイヤにおいて下位レイヤよりも早く行われる場合、下位レイヤにおける同一パケットの再送を禁止することと、を含む。
【００１８】
本発明によれば、上位レイヤと下位レイヤの双方でパケット再送制御が実行される場合に、同一パケットの再送が重複することを防止することが可能となる。
【図面の簡単な説明】
【００１９】
上記及び他の目的、長所、特徴は、次の図面と共に説明される本発明の実施の形態により明らかになるであろう。【００２０】
【図１Ａ】図１Ａは、ＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔによるパケット再送の一例を示している。
【図１Ｂ】図１Ｂは、ＭＡＣ層のような下位レイヤでのタイムアウトよりも早くＴＣＰのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動する場合を示している。
【図２】図２は、本発明の第１の実施の形態に係るパケット再送制御システムの構成を示すブロック図である。
【図３】図３は、第１の実施の形態におけるパケット再送制御ブロックの構成を示すブロック図である。
【図４】図４は、第１の実施の形態におけるフロー情報記憶ブロックの一例を示す概念図である。
【図５】図５は、第１の実施の形態におけるパケット情報記憶ブロックの一例を示す概念図である。
【図６】図６は、第１の実施の形態における再送バッファの一例を示す概念図である。
【図７】図７は、第１の実施の形態におけるパケット送信時の処理を示すフローチャートである。
【図８】図８は、第１の実施の形態におけるパケット受信時の処理を示すフローチャートである。
【図９】図９は、第１の実施の形態におけるパケット解放処理を示すフローチャートである。
【図１０】図１０は、第１の実施の形態におけるタイムアウト発生時の処理を示すフローチャートである。
【図１１】図１１は、本発明の第２の実施の形態におけるパケット受信時の処理を示すフローチャートである。
【図１２】図１２は、第２の実施におけるタイムアウト発生時の処理を示すフローチャートである。
【図１３】図１３は、本発明の第３の実施の形態におけるフロー情報記憶ブロックの一例を示す概念図である。
【図１４】図１４は、第３の実施の形態におけるパケット情報記憶ブロックの一例を示す概念図である。
【図１５】図１５は、第３の実施の形態におけるパケット送信時の処理を示すフローチャートである。
【図１６】図１６は、第３の実施の形態におけるパケット受信時の処理を示すフローチャートである。
【図１７】図１７は、第３の実施の形態におけるパケット解放処理を示すフローチャートである。
【図１８】図１８は、本発明の更に他の実施の形態を示すブロック図である。
【図１９】図１９は、本発明の更に他の実施の形態を示すブロック図である。
【図２０】図２０は、本発明の更に他の実施の形態を示すブロック図である。
【発明を実施するための形態】
【００２１】
添付図面を参照して、本発明の実施の形態を説明する。
【００２２】
１．第１の実施の形態
１−１．構成
図２は、本発明の第１の実施の形態に係るパケット再送制御システムの構成を示すブロック図である。パケット再送制御システムは、ネットワークインタフェース装置１、プログラム処理装置２、及び制御プログラム３を備える。
【００２３】
プログラム処理装置２は、アプリケーションやネットワークプロトコルスタックを処理する。このプログラム処理装置２は、サーバやＰＣをはじめとするホストのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等により実現される。制御プログラム３は、プログラム処理装置２によって実行されるコンピュータプログラムであり、プログラム処理装置２の動作を制御する。
【００２４】
より詳細には、プログラム処理装置２は、制御プログラム３を実行することにより実現されるアプリケーション処理ブロック２０及びネットワーク制御ブロック２１を備えている。アプリケーション処理ブロック２０は、ネットワーク通信を行うユーザーアプリケーションを処理する。アプリケーション処理ブロック２０は、ネットワークデータの送受信の要求をネットワーク制御ブロック２１に対して行う。
【００２５】
ネットワーク制御ブロック２１は、例えば、ホストのＣＰＵで動作するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のカーネルプログラムの一部である。ネットワーク制御ブロック２１は、ＴＣＰ層などの上位レイヤにおけるパケット送受信処理、パケット再送制御、及び順序制御を行う。ここで、ネットワーク制御ブロック２１は、所定の再送タイムアウトに基づくパケット再送だけでなく、高速再転送（Ｆａｓｔ  Ｒｅｔｒａｎｓｍｉｔ）によるパケット再送も行う。すなわち、ネットワーク制御ブロック２１は、重複ＡＣＫパケットを所定の回数（典型的には３回）受け取った場合、パケット再送を行う。
【００２６】
ネットワークインタフェース装置１は、例えば、サーバの拡張カードやオンボードで搭載されるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。ネットワークインタフェース装置１は、下位レイヤにおけるパケット送受信処理及びパケット再送制御を行う。より詳細には、ネットワークインタフェース装置１は、パケット送受信ブロック１１及びパケット再送制御ブロック１０を備えている。
【００２７】
パケット送受信ブロック１１は、物理層やデータリンク層（ＭＡＣ）の機能を持ち、パケット再送制御ブロック１０から受け取ったパケットをネットワーク（出力回線）へ出力する。また、パケット送受信ブロック１１は、ネットワーク（入力回線）からのパケットを受信し、それをパケット再送制御ブロック１０へ出力する。このとき、チェックサムに対する巡回冗長検査（ＣＲＣ：Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）等によりパケットエラーを検知した場合、パケット送受信ブロック１１は、そのパケットエラーをパケット再送制御ブロック１０に通知する。
【００２８】
パケット再送制御ブロック１０は、ネットワーク制御ブロック２１のネットワークプロトコルよりも下位のＭＡＣ層において、パケット再送制御を行う。ここで、下位レイヤであるＭＡＣ層における再送タイムアウトは、上位レイヤであるＴＣＰ層における再送タイムアウトよりも短く設定されている。つまり、パケット再送制御ブロック１０は、ＴＣＰよりも短い再送タイムアウトでパケット再送制御を行う。更に、パケット再送制御ブロック１０は、同一パケットの再送がＴＣＰ層においてＭＡＣ層よりも早く行われるか否かを判定する。同一パケットの再送がＴＣＰ層においてＭＡＣ層よりも早く行われる場合、パケット再送制御ブロック１０は、ＭＡＣ層における当該パケットの再送を禁止する。詳細は後述される。
【００２９】
図３は、パケット再送制御ブロック１０の構成を示すブロック図である。パケット再送制御ブロック１０は、パケット受信ブロック１００、制御ブロック１０１、パケット送信ブロック１０２、フロー情報記憶ブロック１０３、パケット情報記憶ブロック１０４、及び再送バッファ１０５を備える。
【００３０】
パケット再送制御システムがネットワークにパケットを送信する際、パケット送信ブロック１０２は、その送信パケットをネットワーク制御ブロック２１から受け取る。パケット送信ブロック１０２は、受け取った送信パケットに、ＭＡＣ層独自のシーケンス番号等を含む内部ヘッダを付与する。そして、パケット送信ブロック１０２は、送信パケットをパケット送受信ブロック１１に出力すると共に、送信パケットのコピーを制御ブロック１０１に出力する。また、パケット送信ブロック１０２は、制御ブロック１０１から送信パケット（ＭＡＣにおける再送パケットや制御パケット（ＡＣＫ、ＮＡＣＫ））を受け取る場合もある。その場合、パケット送信ブロック１０２は、その送信パケットをパケット送受信ブロック１１に出力する。
【００３１】
パケット再送制御システムがネットワークからパケットを受信すると、パケット受信ブロック１００は、その受信パケットをパケット送受信ブロック１１から受け取る。パケット受信ブロック１００は、受信パケットの内部ヘッダの情報に基づいて、受信パケットの種別を分析する。パケットの種別としては、ＭＡＣにおけるＡＣＫパケット、データが正常に受信できなかったことを示すＮＡＣＫ（Ｎｅｇａｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）パケット、ＴＣＰにおけるＡＣＫパケット、等が挙げられる。パケット受信ブロック１００は、受信パケットの種別を他の必要な情報と共に、制御ブロック１０１に通知する。受信パケットがＭＡＣにおける制御パケット（ＡＣＫ、ＮＡＣＫ）でなければ、パケット受信ブロック１００は、受信パケットから内部ヘッダを取り除いた後、当該受信パケットをネットワーク制御ブロック２１に送る。ＭＡＣにおける制御パケット（ＡＣＫ、ＮＡＣＫ）は、ネットワーク制御ブロック２１には送られない。また、パケット送受信ブロック１１から受信パケットにエラーがあることを通知された場合、パケット受信ブロック１００はその旨を制御ブロック１０１に通知する。
【００３２】
フロー情報記憶ブロック１０３は、再送バッファ１０５に格納されているパケットが属するフローを管理するために用いられる。ここで“フロー”とは、ＴＣＰセッションを意味する。具体的には、フロー情報記憶ブロック１０３には、再送バッファ１０５に格納されているパケットが属するフロー毎の情報が格納されている。図４は、フロー情報記憶ブロック１０３の一例を示す概念図である。フロー情報記憶ブロック１０３に格納されているフロー毎の情報は、フロー識別情報、確認応答済シーケンス番号、重複ＡＣＫ受信カウンタ、保持パケット数を含んでいる。フロー識別情報は、フロー（ＴＣＰセッション）を識別するための情報である。典型的には、フロー識別情報は、上位レイヤのヘッダ情報の一部からなる。例えば、ＩＰヘッダの送信元アドレス、宛先アドレス、及びプロトコル番号、ＴＣＰヘッダの送信元ポート番号及び宛先ポート番号等が、フロー識別情報として用いられる。尚、簡単のため、図中では、フロー識別情報は“Ｆｌｏｗ  ＃１００”のように表記されている。確認応答済シーケンス番号は、ＴＣＰにおけるＡＣＫパケットによって既に確認応答されているシーケンス番号である。重複ＡＣＫ受信カウンタは、上位のネットワーク制御ブロック２１による重複ＡＣＫパケットの受信回数である。ここで、重複ＡＣＫパケットは、確認応答済シーケンス番号と同一のシーケンス番号を確認応答するＡＣＫパケットである。保持パケット数は、再送バッファ１０５に格納されている当該フローのパケット数である。
【００３３】
パケット情報記憶ブロック１０４には、再送バッファ１０５に格納されているパケットを管理するために用いられる。具体的には、パケット情報記憶ブロック１０４には、再送バッファ１０５に格納されているパケット毎の情報が格納されている。図５は、パケット情報記憶ブロック１０４の一例を示す概念図である。パケット情報記憶ブロック１０４に格納されているパケット毎の情報は、フロー識別情報、タイムアウトカウンタ、下位レイヤのシーケンス番号、上位レイヤのシーケンス番号、及び再送バッファポインタを含んでいる。フロー識別情報は、当該パケットが属するフローの識別情報であり、フロー情報記憶ブロック１０３におけるフロー識別情報と同じである。タイムアウトカウンタは、ＭＡＣ層における再送タイムアウトを判定するために用いられるカウント値である。但し、再送タイムアウトの判定手法はカウンタだけに限られず、周知の様々な判定手法が可能である。その判定手法に応じて、タイムアウトカウンタの代わりに他のパラメータ（タイムスタンプ等）が用いられてもよい。下位レイヤのシーケンス番号は、ＭＡＣ層で独自に割り当てられるシーケンス番号である。上位レイヤのシーケンス番号は、ＴＣＰにおけるシーケンス番号である。再送バッファポインタは、当該パケットが格納されている再送バッファ１０５中のアドレス値等のポインタである。
【００３４】
再送バッファ１０５は、下位レイヤにおけるパケット再送のために、送出パケットを一時的に格納するために用いられる。図６は、再送バッファ１０５の一例を示す概念図である。再送バッファ１０５は、既存の手法を用いて構成される。例えば図６では、バッファが固定長の領域に予め区切られ、パケットの先頭が必ず領域の先頭に来るようにパケットが格納される。この場合、パケット長の情報が必要になる。パケット長の情報は、パケット情報記憶ブロック１０４に格納されてもよいし、バッファ格納時に当該パケットの先頭に付与されてもよい。
【００３５】
フロー情報記憶ブロック１０３、パケット情報記憶ブロック１０４、及び再送バッファ１０５は、メモリ等の記憶装置で構成される。ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のような再構成可能なハードウェアデバイスでパケット再送制御ブロック１０が実装される場合、そのデバイスに含まれる内部メモリが用いられてもよい。また、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、連想メモリ（ＣＡＭ：Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）等が用いられてもよい。
【００３６】
制御ブロック１０１は、ＭＡＣ層におけるパケット再送制御を行う。ここで、下位レイヤであるＭＡＣ層における再送タイムアウトは、上位レイヤであるＴＣＰ層における再送タイムアウトよりも短く設定されている。つまり、制御ブロック１０１は、ＴＣＰよりも短い再送タイムアウトでパケット再送制御を行う。更に、制御ブロック１０１は、重複ＡＣＫ受信カウンタ等を参照することによって、同一パケットの再送がＴＣＰ層においてＭＡＣ層よりも早く行われるか否かを判定する。同一パケットの再送がＴＣＰ層においてＭＡＣ層よりも早く行われる場合、制御ブロック１０１は、ＭＡＣ層における当該パケットの再送を禁止し、再送バッファ１０５に格納されている当該パケットを解放する。
【００３７】
より詳細には、制御ブロック１０１は、重複判定ブロック１０１０及びタイムアウト制御ブロック１０１１を備えている。
【００３８】
パケット送信時、タイムアウト制御ブロック１０１１は、パケット送信ブロック１０２から送信パケットのコピーを受け取り、それを再送バッファ１０５に格納する。更に、タイムアウト制御ブロック１０１１は、当該送信パケットが属するフローを識別し、フロー識別情報に基いて、当該フローがフロー情報記憶ブロック１０３で管理されているかを確認する。当該フローが既に管理されている場合、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の該当エントリの保持パケット数を更新する。当該フローが未だ管理されていない場合、タイムアウト制御ブロック１０１１は、当該フローに関する新規エントリをフロー情報記憶ブロック１０３に追加する。更に、タイムアウト制御ブロック１０１１は、再送バッファ１０５中の書き込み先のアドレス値等を用いて、当該パケットに関する新規エントリをパケット情報記憶ブロック１０４に追加する。
【００３９】
パケット受信時、タイムアウト制御ブロック１０１１及び重複判定ブロック１０１０は、受信パケットの種別やフロー識別情報等の情報をパケット受信ブロック１００から受け取る。
【００４０】
受信パケットがＭＡＣ層におけるＡＣＫパケットである場合、タイムアウト制御ブロック１０１１は、そのＡＣＫパケットが確認応答するパケットを、再送バッファ１０５から解放する。更に、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の該当エントリの保持パケット数を更新し、また、パケット情報記憶ブロック１０４中の該当エントリを削除する。
【００４１】
受信パケットがＭＡＣ層におけるＮＡＣＫパケットである場合、タイムアウト制御ブロック１０１１は、再送バッファ１０５から対応するパケットを読み出し、そのパケットをパケット送信ブロック１０２に送る。更に、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中の当該パケットのエントリ情報を更新する。
【００４２】
受信パケットがＭＡＣ層における制御パケット以外である場合、タイムアウト制御ブロック１０１１は、その受信パケットに対するＭＡＣ層におけるＡＣＫパケットを生成し、生成したＡＣＫパケットをパケット送信ブロック１０２に送る。
【００４３】
受信パケットがＴＣＰ層におけるＡＣＫパケットである場合、重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中の該当エントリの確認応答済シーケンス番号あるいは／及び重複ＡＣＫ受信カウンタを更新する。
【００４４】
受信パケットにエラーがあることを通知された場合、タイムアウト制御ブロック１０１１は、その受信パケットに対するＭＡＣ層におけるＮＡＣＫパケットを生成して、生成したＮＡＣＫパケットをパケット送信ブロック１０２に送る。
【００４５】
更に、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中のタイムアウトカウンタを管理し、再送バッファ１０５に格納されているパケット毎にタイムアウトの判定を行う。あるパケットを送信してからＲＴＯで規定される期間中に、ＭＡＣ層におけるＡＣＫパケット又はＮＡＣＫパケットが返信されなければ、タイムアウト制御ブロック１０１１は、当該パケットに関してタイムアウトが発生したと判定し、その旨を重複判定ブロック１０１０に通知する。
【００４６】
タイムアウト発生の通知を受けると、重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中の該当エントリの重複ＡＣＫ受信カウンタを参照する。そして、重複判定ブロック１０１０は、ＭＡＣ層における当該パケットの再送がＴＣＰ層における同一パケットの再送と重複するか否かを判定する。具体的には、重複ＡＣＫ受信カウンタが“所定の回数”以上である場合、重複判定ブロック１０１０は、「パケット再送が重複する」と判定する。ここで、上記“所定の回数”は、ＴＣＰ層におけるＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔを発動させる重複ＡＣＫパケットの受信回数であり、典型的には３回である。一方、重複ＡＣＫ受信カウンタが上記所定の回数未満の場合、重複判定ブロック１０１０は、「パケット再送は重複しない」と判定する。そして、重複判定ブロック１０１０は、判定結果をタイムアウト制御ブロック１０１１に通知する。
【００４７】
タイムアウト制御ブロック１０１１は、重複判定ブロック１０１０から判定結果を受け取る。パケット再送は重複しないと判定された場合、タイムアウト制御ブロック１０１１は、当該パケットの再送を行う。すなわち、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中の該当エントリの再送バッファポインタを参照して、再送バッファ１０５に格納されている当該パケットを読み出し、そのパケットをパケット送信ブロック１０２に送る。
【００４８】
一方、パケット再送が重複すると判定された場合、タイムアウト制御ブロック１０１１は、ＭＡＣ層における当該パケットの再送を中止し、再送バッファ１０５に格納されている当該パケットを解放する。更に、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の該当エントリの保持パケット数を更新し、また、パケット情報記憶ブロック１０４中の該当エントリを削除する。
【００４９】
１−２．処理フロー
１−２−１．パケット送信時の処理
図７は、本実施の形態におけるパケット送信時の処理を示すフローチャートである。アプリケーションがパケットをネットワークに送信する際、その送信パケットは、アプリケーション処理ブロック２０からネットワーク制御ブロック２１を経由してパケット再送制御ブロック１０に送られる。パケット再送制御ブロック１０のパケット送信ブロック１０２は、その送信パケットを受信する（ステップＡ１）。
【００５０】
パケット送信ブロック１０２は、受け取った送信パケットに、ＭＡＣ層における独自の内部ヘッダを付与する。その内部ヘッダは、ＭＡＣ層における再送制御に必要な独自のシーケンス番号等を含み、それら情報は、タイムアウト制御ブロック１０１１から指示される。そして、パケット送信ブロック１０２は、当該送信パケットをパケット送受信ブロック１１に送る。パケット送受信ブロック１１は、当該送信パケットをネットワークに送信する（ステップＡ２）。
【００５１】
また、このときの送信パケットは、ネットワーク制御ブロック２１から受け取ったものである（ステップＡ３；Ｙｅｓ）。この場合、パケット送信ブロック１０２は、送信パケットのコピーを制御ブロック１０１に送る（ステップＡ４）。制御ブロック１０１のタイムアウト制御ブロック１０１１は、パケット送信ブロック１０２から送信パケットのコピーを受け取り、それを再送バッファ１０５に格納する。更に、タイムアウト制御ブロック１０１１は、当該送信パケットのフロー識別情報や再送バッファ１０５中の書き込み先のアドレス値等を用いて、当該パケットに関する新規エントリをパケット情報記憶ブロック１０４に追加する（ステップＡ５）。
【００５２】
更に、タイムアウト制御ブロック１０１１は、当該送信パケットが属するフローに関するエントリがフロー情報記憶ブロック１０３に登録済みかどうかを確認する（ステップＡ６）。登録済みの場合（ステップＡ６；Ｙｅｓ）、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の該当エントリの保持パケット数を１だけ増加させる（ステップＡ７）。一方、未登録の場合（ステップＡ６；Ｎｏ）、タイムアウト制御ブロック１０１１は、当該フローに関する新規エントリをフロー情報記憶ブロック１０３に追加する（ステップＡ８）。
【００５３】
尚、後述される通り、ＭＡＣ層における制御パケット（ＡＣＫ、ＮＡＣＫ）が送信される場合や、パケット再送が行われる場合もある。これらの場合、パケット送信ブロック１０２は、タイムアウト制御ブロック１０１１からパケットを受け取る（ステップＡ１）。パケット送信ブロック１０２は、受け取ったパケットをパケット送受信ブロック１１に送り、パケット送受信ブロック１１は、受け取ったパケットをネットワークに送信する（ステップＡ２）。このときの送信パケットは、ネットワーク制御ブロック２１から受け取ったものではない（ステップＡ３；Ｎｏ）。この場合、パケット送信処理はそのまま終了する。
【００５４】
１−２−２．パケット受信時の処理
図８は、本実施の形態におけるパケット受信時の処理を示すフローチャートである。パケット送受信ブロック１１は、ネットワークからパケットを受信する。パケット送受信ブロック１１は、受信パケットのエラーチェックを行い、受信パケットにエラーが含まれるか否かを示すエラー検出信号と共に、受信パケットをパケット再送制御ブロック１０に出力する。パケット再送制御ブロック１０のパケット受信ブロック１００は、その受信パケットとエラー検出信号を受け取る（ステップＢ１）。
【００５５】
パケット受信ブロック１００は、エラー検出信号を参照し、受信パケットにエラーが含まれているか否かを確認する（ステップＢ２）。受信パケットにエラーが含まれている場合（ステップＢ２；Ｙｅｓ）、パケット受信ブロック１００は、その旨を制御ブロック１０１のタイムアウト制御ブロック１０１１に通知する。タイムアウト制御ブロック１０１１は、その受信パケットに対するＭＡＣ層におけるＮＡＣＫパケットを生成して、生成したＮＡＣＫパケットをパケット送信ブロック１０２に送る（ステップＢ３）。ＮＡＣＫパケットは、パケット送信ブロック１０２からパケット送受信ブロック１１に送られ、パケット送信元に返信される。
【００５６】
受信パケットにエラーが含まれていない場合（ステップＢ２；Ｎｏ）、パケット受信ブロック１００は、受信パケットの内部ヘッダの情報に基づいて、受信パケットの種別を分析する（ステップＢ４）。パケットの種別としては、ＭＡＣ層における制御パケット（ＡＣＫパケット、ＮＡＣＫパケット）、ＴＣＰ層におけるＡＣＫパケット、それ以外の通常のデータパケット、等が挙げられる。パケット受信ブロック１００は、受信パケットの種別を他の必要な情報と共に、制御ブロック１０１に通知する。ここで、必要な情報は、受信パケットのフロー識別情報、及びＭＡＣ層のシーケンス番号を含む。受信パケットがＭＡＣ層における制御パケットである場合、当該必要な情報は更に、当該制御パケットが確認応答又は否定応答しているＭＡＣ層のシーケンス番号を含む。受信パケットがＴＣＰ層におけるＡＣＫパケットである場合、当該必要な情報は更に、当該ＡＣＫパケットが確認応答しているシーケンス番号を含む。あるいは、パケット受信ブロック１００は、受信パケットのヘッダ情報を抽出して、制御ブロック１０１に送ってもよい。
【００５７】
制御ブロック１０１のタイムアウト制御ブロック１０１１及び重複判定ブロック１０１０は、受信パケットの種別やフロー識別情報等の情報を受け取る。受信パケットがＭＡＣ層におけるＡＣＫパケットである場合（ステップＢ５；Ｙｅｓ）、タイムアウト制御ブロック１０１１は、そのＡＣＫパケットが確認応答しているシーケンス番号を取得する（ステップＢ６）。タイムアウト制御ブロック１０１１は、当該ＭＡＣ層におけるシーケンス番号を示すエントリをパケット情報記憶ブロック１０４から検索する（ステップＢ７）。そして、タイムアウト制御ブロック１０１１は、検索の結果ヒットしたヒットエントリを参照して、パケット解放処理を行う（ステップＢ８）。
【００５８】
図９は、本実施の形態におけるパケット解放処理（ステップＢ８）を示すフローチャートである。タイムアウト制御ブロック１０１１は、ヒットエントリで示される再送バッファポインタを参照して、受信ＡＣＫパケットが確認応答しているパケットを再送バッファ１０５から解放する（ステップＣ１）。また、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４から当該ヒットエントリを削除する（ステップＣ２）。
【００５９】
更に、タイムアウト制御ブロック１０１１は、フロー識別情報に基いて、受信ＡＣＫパケットのフローに関するエントリを、フロー情報記憶ブロック１０３から検索する。そして、タイムアウト制御ブロック１０１１は、検索の結果ヒットしたヒットエントリ中の保持パケット数を１だけ減少させる（ステップＣ３）。この結果、保持パケット数が０になった場合（ステップＣ４；Ｙｅｓ）、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３から当該ヒットエントリを削除する（ステップＣ５）。それ以外の場合（ステップＣ４；Ｎｏ）、当該ヒットエントリは残ったままである。以上のようにして、パケット解放処理が行われる。
【００６０】
再度図８を参照して、受信パケットがＭＡＣ層におけるＮＡＣＫパケットである場合（ステップＢ５；Ｎｏ、ステップＢ９；Ｙｅｓ）、タイムアウト制御ブロック１０１１は、そのＮＡＣＫパケットが否定応答しているシーケンス番号を取得する（ステップＢ１０）。更に、タイムアウト制御ブロック１０１１は、当該ＭＡＣ層におけるシーケンス番号を示すエントリをパケット情報記憶ブロック１０４から検索する。そして、タイムアウト制御ブロック１０１１は、ヒットエントリで示される再送バッファポインタを参照して、ＮＡＣＫパケットが否定応答しているパケットを再送バッファ１０５から読み出し、当該パケットをパケット送信ブロック１０２に送る（ステップＢ１１）。このようにして、当該パケットが再送される。タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中のヒットエントリで示されるタイムアウトカウンタを初期化する（ステップＢ１２）。
【００６１】
受信パケットがＭＡＣ層における制御パケット以外である場合（ステップＢ９；Ｎｏ）、パケット受信ブロック１００は、受信パケットから内部ヘッダを取り除いた後、当該受信パケットをネットワーク制御ブロック２１に転送する（ステップＢ１３）。また、タイムアウト制御ブロック１０１１は、その受信パケットに対するＭＡＣ層におけるＡＣＫパケットを生成し、生成したＡＣＫパケットをパケット送信ブロック１０２に送る（ステップＢ１４）。そのＡＣＫパケットは、パケット送信ブロック１０２からパケット送受信ブロック１１に送られ、パケット送信元に返信される。
【００６２】
その一方で、重複判定ブロック１０１０は、受信パケットがＴＣＰ層におけるＡＣＫパケットかどうかを調べる（ステップＢ１５）。受信パケットがＴＣＰ層におけるＡＣＫパケットである場合（ステップＢ１５；Ｙｅｓ）、重複判定ブロック１０１０は、そのＡＣＫパケットが確認応答しているＴＣＰのシーケンス番号（以下、「最新シーケンス番号」と参照される）を取得する（ステップＢ１６）。また、重複判定ブロック１０１０は、フロー識別情報に基いて、受信ＡＣＫパケットのフローに関するエントリを、フロー情報記憶ブロック１０３から検索する。そして、重複判定ブロック１０１０は、検索の結果ヒットしたヒットエントリ中の確認応答済シーケンス番号あるいは／及び重複ＡＣＫ受信カウンタを更新する（ステップＢ１７）。
【００６３】
ステップＢ１７の詳細は、次の通りである。まず、重複判定ブロック１０１０は、上記ステップＢ１６で得られた最新シーケンス番号を、ヒットエントリで示されている確認応答済シーケンス番号と比較する。最新シーケンス番号が確認応答済シーケンス番号と同じである場合、それは、今回の受信ＡＣＫパケットがＴＣＰ層における重複ＡＣＫパケットであり、その重複ＡＣＫパケットがパケット再送制御ブロック１０から上位のネットワーク制御ブロック２１に転送されることを意味する。従って、重複判定ブロック１０１０は、ヒットエントリ中の重複ＡＣＫ受信カウンタを１だけ増加させる（インクリメントする）。一方、最新シーケンス番号が確認応答済シーケンス番号よりも新しい場合、重複判定ブロック１０１０は、ヒットエントリ中の確認応答済シーケンス番号を最新シーケンス番号で更新し、また、ヒットエントリ中の重複ＡＣＫ受信カウンタを０に初期化する。尚、最新シーケンス番号が確認応答済シーケンス番号よりも古い場合、それは、パケットの到着順序が入れ替わったことを意味する。この場合、重複判定ブロック１０１０は、特に何も行わない。
【００６４】
尚、上記ステップＢ１３はパケット受信ブロック１００による処理であり、上記ステップＢ１４はタイムアウト制御ブロック１０１１による処理であるため、これらステップＢ１３とステップＢ１４を並行して行ってもよい。また、上記ステップＢ１４はタイムアウト制御ブロック１０１１による処理であり、上記ステップＢ１５〜Ｂ１７は重複判定ブロック１０１０による処理であるため、ステップＢ１４とステップＢＢ１５〜Ｂ１７を並行して行ってもよい。
【００６５】
１−２−３．タイムアウト発生時の処理
図１０は、ＭＡＣ層においてあるパケットに関してタイムアウトが発生した際の処理を示すフローチャートである。タイムアウトの判定については、当業者にとってよく知られているため、その詳細な説明は省略する。本実施の形態では、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４で管理されているタイムアウトカウンタやタイムスタンプの情報を用いて、再送バッファ１０５に格納されているパケット毎にタイムアウトの判定を行う。あるパケットに関してタイムアウトが検知された際、パケット情報記憶ブロック１０４中の当該パケットに関するエントリ（以下、「再送パケットエントリ」と参照される）へのアドレス値は既知となっている。
【００６６】
ＭＡＣ層においてあるパケット（再送対象パケット）に関してタイムアウトが発生する（ステップＤ１）。タイムアウト制御ブロック１０１１は、タイムアウトの発生を、再送パケットエントリへのアドレス値と共に、重複判定ブロック１０１０に通知する。重複判定ブロック１０１０は、パケット情報記憶ブロック１０４中の再送パケットエントリで示されるフロー識別情報及びＴＣＰ層のシーケンス番号を取得する（ステップＤ２）。更に、重複判定ブロック１０１０は、そのフロー識別情報を示すエントリをフロー情報記憶ブロック１０３から検索し、ヒットエントリで示される確認応答済シーケンス番号及び重複ＡＣＫ受信カウンタを取得する（ステップＤ３）。
【００６７】
重複判定ブロック１０１０は、上記ステップＤ２で得られたシーケンス番号と上記ステップＤ３で得られた確認応答済シーケンス番号とを比較する（ステップＤ４）。シーケンス番号と確認応答済シーケンス番号が同一ではない場合（ステップＤ４；Ｎｏ）、当該再送対象パケットは再送すべきものである。従って、重複判定ブロック１０１０は、「パケット再送」をタイムアウト制御ブロック１０１１に指示する。
【００６８】
一方、シーケンス番号と確認応答済シーケンス番号が同一である場合（ステップＤ４；Ｙｅｓ）、重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中のヒットエントリで示される重複ＡＣＫ受信カウンタを参照する（ステップＤ５）。重複ＡＣＫ受信カウンタが“所定の回数（典型的には３回）”未満の場合（ステップＤ５；Ｎｏ）、重複判定ブロック１０１０は、「パケット再送は重複しない」と判定し、「パケット再送」をタイムアウト制御ブロック１０１１に指示する。一方、重複ＡＣＫ受信カウンタが“所定の回数”以上の場合（ステップＤ５；Ｙｅｓ）、重複判定ブロック１０１０は、「パケット再送が重複する」と判定し、「パケット再送の中止」をタイムアウト制御ブロック１０１１に指示する。
【００６９】
「パケット再送の中止」を指示された場合、タイムアウト制御ブロック１０１１は、ＭＡＣ層における再送対象パケットの再送を中止する（ステップＤ６）。そして、タイムアウト制御ブロック１０１１は、再送対象パケットに対して、図９で示された上述のパケット解放処理（ステップＢ８）を実施する。
【００７０】
一方、「パケット再送」を指示された場合、タイムアウト制御ブロック１０１１は、再送対象パケットの再送を行う（ステップＤ７）。すなわち、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中の再送パケットエントリで示される再送バッファポインタを参照して、再送バッファ１０５に格納されている再送対象パケットを読み出し、そのパケットをパケット送信ブロック１０２に送る。また、タイムアウト制御ブロック１０１１は、再送パケットエントリで示されるタイムアウトカウンタを初期化する（ステップＤ８）。
【００７１】
１−３．効果
以上に説明されたように、本実施の形態によれば、ＭＡＣ層におけるタイムアウト発生に応答して、パケット再送制御ブロック１０が、再送対象パケットが属するフローに関する重複ＡＣＫ受信カウンタを参照する。その重複ＡＣＫ受信カウンタが所定の回数以上である場合、上位のＴＣＰ層において、同一パケットに対するＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動する、あるいは、既に起動していると考えられる。従って、パケット再送制御ブロック１０は、ＭＡＣ層におけるタイムアウトによるパケット再送を中止する。その結果、同一パケットの再送が重複することが防止される。このことは、ネットワーク帯域の浪費の抑制につながる。
【００７２】
また、ＭＡＣ層におけるパケット再送の実行／中止は、ＭＡＣ層におけるパケット再送制御ブロック１０により決定され、その決定処理に必要な情報（例：重複ＡＣＫ受信カウンタ）も全てパケット再送制御ブロック１０において管理されている。従って、ＴＣＰ層のような上位レイヤの機能を変更することなく、上記効果を得ることが可能である。
【００７３】
本実施の形態は、例えば、データセンター内のネットワークのように、広帯域、低遅延なネットワーク環境に適用される。
【００７４】
１−４．変形例
上記説明では、ＭＡＣ層独自の内部ヘッダがパケットに付与されていた。しかしながら、ＭＡＣ層独自の内部ヘッダがパケットに付与されなくてもよい。ＴＣＰヘッダのシーケンス番号等の情報がそのままＭＡＣ層の再送制御に利用されてもよい。
【００７５】
上記説明では、ＭＡＣ層においてＡＣＫパケット及びＮＡＣＫパケットが返信されていた。しかしながら、パケット正常受信時にＡＣＫパケットだけが返信されてもよい。
【００７６】
上記説明では、パケット送受信ブロック１１に、物理層に加えて、ＭＡＣ層のようなデータリンク層の機能が備わっている。しかしながら、ＭＡＣ層のようなデータリンク層の機能は、パケット再送制御ブロック１０に備わっていてもよい。その場合、データリンク層の機能は、パケット受信ブロック１００、制御ブロック１０１、パケット送信ブロック１０２に適宜追加され、パケット送受信ブロック１１には、物理層の機能のみが備わる。
【００７７】
上記説明では、パケット再送制御を行う上位レイヤがＴＣＰ層であり、パケット再送制御を行う下位レイヤがＭＡＣ層であったが、それに限られない。ＴＣＰと同様のパケット再送制御機能をもつプロトコルを上位レイヤプロトコルとし、それよりも下位層においてパケット再送制御を行うプロトコルを対象とすることも可能である。
【００７８】
上記説明では、パケット再送の中止判定の基準となる“所定の回数”は３回であったが、それに限られない。所定の回数は、上位レイヤのプロトコル設定に応じて適宜設定・変更することができる。
【００７９】
上位レイヤにて再送制御を持たないＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）のような場合、フロー情報記憶ブロック１０３の確認応答済シーケンス番号や重複ＡＣＫ受信カウンタ等は、不定値（ｄｏｎ’ｔ  ｃａｒｅ）に設定される。
【００８０】
２．第２の実施の形態
第１の実施の形態では、パケット再送制御ブロック１０が重複ＡＣＫ受信カウンタを参照して必要に応じてパケット解放処理を行うトリガは、「ＭＡＣ層におけるタイムアウト発生」であった。第２の実施の形態では、そのトリガは、「パケット再送制御ブロック１０が、ＴＣＰ層のＡＣＫパケットをネットワーク制御ブロック２１に転送すること」である。つまり、第２の実施の形態では、上位レイヤのＡＣＫパケットが上位レイヤに送られる際に、パケット再送制御ブロック１０は重複ＡＣＫ受信カウンタを参照し、場合によってはパケット解放処理を行う。
【００８１】
第２の実施の形態における構成は、第１の実施の形態における構成（第１−１節、図２〜図６参照）と同様であり、重複する説明は適宜省略される。
【００８２】
パケット送信時の処理は、第１の実施の形態と同じである（第１−２−１節、図７参照）。
【００８３】
図１１は、本実施の形態におけるパケット受信時の処理を示すフローチャートである。ステップＢ１〜Ｂ１２は、第１の実施の形態と同じである。また、受信パケットがＴＣＰ層におけるＡＣＫパケットである場合、第１の実施の形態と同じようにステップＢ１３〜Ｂ１７が実行される。本実施の形態では、ステップＢ１７の後に、更に、次のような処理が実行される。
【００８４】
ステップＢ１７において重複ＡＣＫ受信カウンタが更新された後、重複判定ブロック１０１０は、更新後の重複ＡＣＫ受信カウンタを参照する（ステップＤ５）。更新後の重複ＡＣＫ受信カウンタが“所定の回数（典型的には３回）”未満の場合（ステップＤ５；Ｎｏ）、パケット受信処理はそのまま終了する。
【００８５】
一方、更新後の重複ＡＣＫ受信カウンタが“所定の回数”以上の場合（ステップＤ５；Ｙｅｓ）、重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中のヒットエントリで示される確認応答済シーケンス番号を取得する。そして、重複判定ブロック１０１０は、その確認応答済シーケンス番号と同じ「上位レイヤのシーケンス番号」を示すエントリを、パケット情報記憶部ブロック１０４から検索する。つまり、重複判定ブロック１０１０は、確認応答済シーケンス番号と同じ「上位レイヤのシーケンス番号」を有するパケットが再送バッファ１０５に格納されているか否かを調べる（ステップＢ１８）。
【００８６】
そのようなパケットが再送バッファ１０５に格納されている場合（ステップＢ１８；Ｙｅｓ）、重複判定ブロック１０１０は、「将来、ＭＡＣ層におけるタイムアウト発生時に、パケット再送が重複する」と判定する。従って、重複判定ブロック１０１０は、ＭＡＣ層における当該パケットの再送を禁止する。具体的には、重複判定ブロック１０１０は、ＭＡＣ層における当該パケットの再送が無くなるように、「当該パケットを予め解放すること」をタイムアウト制御ブロック１０１１に指示する。その指示に応答して、タイムアウト制御ブロック１０１１は、当該パケットに対して、図９で示された上述のパケット解放処理（ステップＢ８）を実施する。
【００８７】
一方、そのようなパケットが再送バッファ１０５に格納されていない場合（ステップＢ１８；Ｎｏ）、パケット再送が重複する恐れは無い。従って、パケット受信処理はそのまま終了する。
【００８８】
図１２は、本実施の形態におけるタイムアウト発生時の処理を示すフローチャートである。本実施の形態では、上述の通り、パケット受信時に、必要に応じてパケット解放処理があらかじめ実施されている。従って、ＭＡＣ層におけるタイムアウト発生時にパケット再送を実行するか中止するかを判定し、パケット解放処理を実施する必要はない。図１０で示された第１の実施の形態におけるフローと比較して、ステップＤ２〜Ｄ６及びパケット解放処理（ステップＢ８）が省略されている。その他のステップＤ１、Ｄ７及びＤ８は、第１の実施の形態と同じである。
【００８９】
以上に説明されたように、第２の実施の形態によれば、上位レイヤのＡＣＫパケットの受信時に、更新後の重複ＡＣＫ受信カウンタが参照される。その結果、重複ＡＣＫ受信カウンタが所定の回数（典型的には３回）になっていれば、その時点で、下位レイヤにおいてパケット解放処理が実行される。これによっても、同一パケットの再送が重複することが防止される。このことは、ネットワーク帯域の浪費の抑制につながる。また、第１の実施の形態と同様に、ＴＣＰ層のような上位レイヤの機能を変更する必要はない。
【００９０】
ＭＡＣ層におけるタイムアウトが発生する前にＴＣＰ層のＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動した場合、そのＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔによる再送パケットも、再送バッファ１０５に格納される。既出の第１の実施の形態の場合、ＭＡＣ層におけるタイムアウトが発生する前なので、その再送パケットと同じパケットが再送バッファ１０５に既に格納されており、結果として、同じ２個のパケットが再送バッファ１０５に格納されることになる。このことは、再送バッファ１０５の非効率な使用を意味する。一方、第２の実施の形態の場合、重複ＡＣＫ受信カウンタが３回になった時点で、すなわち、ＴＣＰ層のＦａｓｔ  Ｒｅｔｒａｎｓｍｉｔが起動する時点で、既に格納されている同一パケットは解放される。従って、再送バッファ１０５を有効に活用することができる。
【００９１】
第１の実施の形態で説明されたものと同様な変形例も可能である。
【００９２】
３．第３の実施の形態
３−１．構成
第３の実施の形態では、フロー情報記憶ブロック１０３とパケット情報記憶ブロック１０４の構成が、既出の実施の形態と異なる。既出の実施の形態と重複する説明は適宜省略される。
【００９３】
図１３は、第３の実施の形態におけるフロー情報記憶ブロック１０３の一例を示す概念図である。図１３に示されるように、フロー情報記憶ブロック１０３中の各エントリは、既出の図４で示された情報に加えて、「先頭パケットへのポインタ」と「最後尾パケットへのポインタ」を含んでいる。先頭パケットは、再送バッファ１０５に格納されている該当フローのパケットのうち、最も早く格納されたパケットである。つまり、先頭パケットは、該当フローのパケットのうち、タイムアウトが最も早く起こり得るパケットである。「先頭パケットへのポインタ」は、パケット情報記憶ブロック１０４中の当該先頭パケットに関するパケットエントリへのポインタ（アドレス値等）である。一方、最後尾パケットは、再送バッファ１０５に格納されている該当フローのパケットのうち、最も遅く格納されたパケットである。つまり、最後尾パケットは、該当フローのパケットのうち、タイムアウトが最も遅く起こり得るパケットである。「最後尾パケットへのポインタ」は、パケット情報記憶ブロック１０４中の当該最後尾パケットに関するパケットエントリへのポインタ（アドレス値等）である。
【００９４】
図１４は、第３の実施の形態におけるパケット情報記憶ブロック１０４の一例を示す概念図である。図１４に示されるように、パケット情報記憶ブロック１０４中の各エントリは、既出の図５で示された情報に加えて、「双方向リスト作成ポインタ」を含んでいる。双方向リスト作成ポインタは、当該パケットと同一のフローに属するパケットに対し、先頭パケットから順に双方向リストを作成するためのポインタであり、パケット情報記憶ブロック１０４中の各パケットエントリへのポインタ（アドレス値等）である。先頭パケットから順にした双方向リストとは、上記先頭パケットから早く格納された順に並べた双方向リストを意味する。図１４では、双方向リスト作成ポインタは、（＜双方向リストの前のパケットに関するパケットエントリへのポインタ＞，＜双方向リストの次のパケットに関するパケットエントリへのポインタ＞）のように表記されている。
【００９５】
３−２．処理フロー
３−２−１．パケット送信時の処理
図１５は、本実施の形態におけるパケット送信時の処理を示すフローチャートである。ステップＡ１〜Ａ８は、第１の実施の形態と同じである（第１−２−１節、図７参照）。上述の通り、ステップＡ５において、あるフローに属する送信パケットが、再送バッファ１０５に新たに格納され、また、その送信パケットに関する新規パケットエントリがパケット情報記憶ブロック１０４に追加される。また、ステップＡ７あるいはＡ８において、フロー情報記憶ブロック１０３中の該当フローに関するフローエントリが、更新あるいは新規作成される。その後、更に、次のような処理が実行される。
【００９６】
タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の該当フローに関するフローエントリを参照し、当該フローエントリで示されている「最後尾パケットへのポインタ」を取得する（ステップＡ９）。
【００９７】
次に、タイムアウト制御ブロック１０１１は、パケット情報記憶ブロック１０４中の双方向リスト作成ポインタを更新する（ステップＡ１０）。具体的には、タイムアウト制御ブロック１０１１は、送信パケットに関する新規パケットエントリの双方向リスト作成ポインタを、（＜ステップＡ９で得られた「最後尾パケットへのポインタ」＞，＜ＮＵＬＬ＞）に設定する。また、タイムアウト制御ブロック１０１１は、ステップＡ９で得られた最後尾パケットに関するエントリの双方向リスト作成ポインタを、（＜前回と同じもの＞，＜送信パケットに関する新規パケットエントリへのポインタ＞）に変更する。
【００９８】
その後、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の当該フローエントリで示されている「最後尾パケットへのポインタ」を更新する（ステップＡ１１）。具体的には、「最後尾パケットへのポインタ」を「送信パケットに関する新規パケットエントリへのポインタ」に変更する。
【００９９】
３−２−２．パケット受信時の処理
図１６は、本実施の形態におけるパケット受信時の処理を示すフローチャートである。ステップＢ１〜Ｂ１２は、第１の実施の形態と同じである。また、受信パケットがＴＣＰ層におけるＡＣＫパケットである場合、第１の実施の形態と同じようにステップＢ１３〜Ｂ１７が実行される。本実施の形態では、ステップＢ１７の後に、更に、次のような処理が実行される。
【０１００】
重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中のヒットエントリで示される「先頭パケットへのポインタ」を取得する。そして、重複判定ブロック１０１０は、その「先頭パケットへのポインタ」を用い、パケット情報記憶ブロック１０４中の当該先頭パケットに関するパケットエントリを読み出す（ステップＢ２０）。
【０１０１】
重複判定ブロック１０１０は、読み出したパケットエントリに対応するパケットが既に確認応答されているかどうか調べる（ステップＢ２１）。具体的には、重複判定ブロック１０１０は、読み出したパケットエントリで示される「上位レイヤのシーケンス番号」と、フロー情報記憶ブロック１０３中のヒットエントリで示される「確認応答済シーケンス番号」とを比較し、それにより、確認応答済みか否かを調べる。当該パケットが既に確認応答されている場合（ステップＢ２１；Ｙｅｓ）、当該パケットに対するパケット解放処理（ステップＢ１９）が行われる。
【０１０２】
一方、当該パケットがまだ確認応答されていない場合（ステップＢ２１；Ｎｏ）、重複判定ブロック１０１０は、当該パケットの「上位レイヤのシーケンス番号」が「確認応答済シーケンス番号」と同じかどうか調べる（ステップＤ４）。シーケンス番号と確認応答済シーケンス番号が同一ではない場合（ステップＤ４；Ｎｏ）、処理はステップＢ２２に進む。一方、シーケンス番号と確認応答済シーケンス番号が同一である場合（ステップＤ４；Ｙｅｓ）、重複判定ブロック１０１０は、フロー情報記憶ブロック１０３中のヒットエントリで示される重複ＡＣＫ受信カウンタを参照する（ステップＤ５）。重複ＡＣＫ受信カウンタが“所定の回数（典型的には３回）”未満の場合（ステップＤ５；Ｎｏ）、処理はステップＢ２２に進む。重複ＡＣＫ受信カウンタが“所定の回数”以上の場合（ステップＤ５；Ｙｅｓ）、当該パケットに対するパケット解放処理（ステップＢ１９）が行われる。
【０１０３】
ステップＢ２２では、重複判定ブロック１０１０は、パケット情報記憶ブロック１０３から読み出したパケットエントリ中の＜双方向リストの次のパケットに関するパケットエントリへのポインタ＞を参照する。そのポインタが＜ＮＵＬＬ＞の場合、双方向リストに次パケットは存在しない（ステップＢ２２；Ｎｏ）。この場合、パケット受信処理は終了する。それ以外の場合、双方向リストに次パケットは存在する（ステップＢ２２；Ｙｅｓ）。この場合、重複判定ブロック１０１０は、そのポインタを用い、パケット情報記憶ブロック１０４中の当該次パケットに関するパケットエントリを読み出す。そして、処理は上記ステップＢ２１に戻り、読み出したパケットエントリに関して同様の処理が繰り返される。
【０１０４】
このように、本実施の形態によれば、受信パケットがＴＣＰ層におけるＡＣＫパケットである場合、当該フローの先頭パケットから最後尾パケットまで順番に、パケット解放処理の適否が判定される。パケット解放処理が適切であれば、当該パケットのパケット解放処理が実施される（ステップＢ１９）。
【０１０５】
図１７は、本実施の形態におけるパケット解放処理（ステップＢ１９）を示すフローチャートである。既出の図９で示されたパケット解放処理（ステップＢ８）と比較して、本実施の形態では、ステップＣ１とＣ２の間にステップＣ６が追加され、ステップＣ３とＣ４の間にステップＣ７が追加されている。その他は既出の実施の形態と同じである。
【０１０６】
ステップＣ６では、解放したパケットに関するパケットエントリのパケット情報記憶ブロック１０４からの削除前に、双方向リストが更新される。具体的には、タイムアウト制御ブロック１０１１は、当該パケットエントリの双方向リストポインタを参照して、前のパケットに関するパケットエントリを読み出す。そして、タイムアウト制御ブロック１０１１は、前のパケットに関するパケットエントリ中の双方向リスト作成ポインタを、（＜前回と同じもの＞，＜当該パケットエントリの双方向リストポインタの次パケットへのポインタ＞）に変更する。また、タイムアウト制御ブロック１０１１は、当該パケットエントリの双方向リストポインタを参照して、次のパケットに関するパケットエントリを読み出す。そして、タイムアウト制御ブロック１０１１は、次のパケットに関するパケットエントリ中の双方向リスト作成ポインタを、（＜当該パケットエントリの双方向リストポインタの前パケットへのポインタ＞，＜前回と同じもの＞）に変更する。
【０１０７】
ステップＣ７では、必要に応じて、フロー情報記憶ブロック１０３中の「先頭パケットへのポインタ」あるいは「最後尾パケットへのポインタ」が更新される。具体的には、解放したパケットが先頭パケットであった場合、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の「先頭パケットへのポインタ」を、ステップＣ６で得られた＜当該パケットエントリの双方向リストポインタの次パケットへのポインタ＞に更新する。また、解放したパケットが最後尾パケットであった場合、タイムアウト制御ブロック１０１１は、フロー情報記憶ブロック１０３中の「最後尾パケットへのポインタ」を、ステップＣ６で得られた＜当該パケットエントリの双方向リストポインタの前パケットへのポインタ＞に更新する。
【０１０８】
３−２−３．タイムアウト発生時の処理
タイムアウト発生時の処理は、第２の実施の形態と同じである（図１２参照）。
【０１０９】
３−３．効果
第３の実施の形態によれば、第２の実施の形態と同様の処理が実現され、第２の実施の形態と同じ効果が得られる。更に、次の効果も得られる。
【０１１０】
ＭＡＣ層における制御パケット（ＡＣＫ，ＮＡＣＫ）が、何らかの理由により、ネットワーク中でロスした場合を考える。この場合、受信端がパケットを受信しているにもかかわらず、送信端がＭＡＣ層における制御パケットを受信できず、その結果、タイムアウトによるパケット再送が発生してしまう恐れがある。本実施の形態では、ＴＣＰのＡＣＫパケットが返信されたときに、ＴＣＰにおいて既に確認応答されているパケットの解放も行われる。つまり、ＴＣＰにおける確認応答が確認できた時点で、当該パケットは再送バッファ１０５から解放される。従って、再送バッファ１０５をより効率的に利用することができる。
【０１１１】
３−４．変形例
第１の実施の形態で説明されたものと同様な変形例も可能である。
【０１１２】
上記説明では、フロー情報記憶ブロック１０３では、双方向リストの先頭パケット及び最後尾パケットの両方が管理されている。しかしながら、先頭パケットと最後尾パケットのいずれか一方だけが管理されてもよい。パケットエントリにアクセスする際には、先頭あるいは最後尾から双方向リストを辿っていく。
【０１１３】
また、図１６において「ステップＤ４；Ｎｏ」あるいは「ステップＤ５；Ｎｏ」の場合、ステップＢ２２に進まず、パケット受信処理は終了してもよい。これは、まだ確認応答されていないパケット以降のパケットも確認応答されていない可能性が高いためである。この場合、処理を高速化することができる。
【０１１４】
４．その他の構成例
図１８は、パケット再送制御システムの他の構成例を示している。図１８において、パケット再送制御システムは、ネットワークインタフェース装置４、プログラム処理装置５、及び制御プログラム６を備える。ネットワークインタフェース装置４は、例えば、サーバの拡張カードやオンボードで搭載されるＮＩＣである。プログラム処理装置５は、サーバやＰＣをはじめとするホストのＣＰＵ等により実現される。本例では、ネットワークインタフェース装置４が、パケット送受信ブロック１１を備え、プログラム処理装置５が、パケット再送制御ブロック１０、ネットワーク制御ブロック２１及びアプリケーション処理ブロック２０を備えている。各ブロックの機能は、既出の実施の形態と同じである。
【０１１５】
制御プログラム６は、プログラム処理装置５によって実行されるコンピュータプログラムであり、プログラム処理装置５の動作を制御する。プログラム処理装置５のパケット再送制御ブロック１０、ネットワーク制御ブロック２１及びアプリケーション処理ブロック２０は、プログラム処理装置５が制御プログラム６（パケット再送制御プログラム）を実行することにより実現される。制御プログラム６（パケット再送制御プログラム）は、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
【０１１６】
図１９は、パケット再送制御システムの更に他の構成例を示している。図１９において、パケット再送制御システムは、ネットワーク装置７を備える。本例では、ネットワーク装置７が、パケット送受信ブロック１１、パケット再送制御ブロック１０、ネットワーク制御ブロック２１及びアプリケーション処理ブロック２０を備えている。各ブロックの機能は、既出の実施の形態と同じである。各ブロックは、ネットワーク装置７のハードウェアにより実現される。
【０１１７】
図２０は、パケット再送制御システムの更に他の構成例を示している。図２０において、パケット再送制御システムは、ネットワークインタフェース装置８、プログラム処理装置９、及び制御プログラム１２を備える。ネットワークインタフェース装置８は、例えば、サーバの拡張カードやオンボードで搭載されるＮＩＣである。プログラム処理装置９は、サーバやＰＣをはじめとするホストのＣＰＵ等により実現される。本例では、ネットワークインタフェース装置８が、パケット送受信ブロック１１、パケット再送制御ブロック１０及びネットワーク制御ブロック２１を備え、プログラム処理装置５が、アプリケーション処理ブロック２０を備えている。各ブロックの機能は、既出の実施の形態と同じである。
【０１１８】
制御プログラム１２は、プログラム処理装置９によって実行されるコンピュータプログラムであり、プログラム処理装置９の動作を制御する。プログラム処理装置９のアプリケーション処理ブロック２０は、プログラム処理装置９が制御プログラム１２を実行することにより実現される。ネットワークインタフェース装置８のパケット送受信ブロック１１、パケット再送制御ブロック１０及びネットワーク制御ブロック２１は、ハードウェアにより実現される。
【０１１９】
図１８〜図２０で示された各構成は、既出の第１〜第３の実施の形態のいずれに適用されてもよい。このような構成によっても、既出の実施の形態と同じ効果が得られる。
【０１２０】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１２１】
本出願は、２００９年１２月１４日に出願された日本国特許出願２００９−２８３３５３を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１Ａ】
0005585591.tif 000002
【図１Ｂ】
0005585591.tif 000003
【図２】
0005585591.tif 000004
【図３】
0005585591.tif 000005
【図４】
0005585591.tif 000006
【図５】
0005585591.tif 000007
【図６】
0005585591.tif 000008
【図７】
0005585591.tif 000009
【図８】
0005585591.tif 000010
【図９】
0005585591.tif 000011
【図１０】
0005585591.tif 000012
【図１１】
0005585591.tif 000013
【図１２】
0005585591.tif 000014
【図１３】
0005585591.tif 000015
【図１４】
0005585591.tif 000016
【図１５】
0005585591.tif 000017
【図１６】
0005585591.tif 000018
【図１７】
0005585591.tif 000019
【図１８】
0005585591.tif 000020
【図１９】
0005585591.tif 000021
【図２０】
0005585591.tif 000022