(57)【特許請求の範囲】
【請求項１】
ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理部と、
ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御部と、
前記再送制御部より受け取るＴＣＰパケットを前記ＴＣＰ／ＩＰ処理部に転送するレート維持部と
を備え、
前記再送制御部は、前記ＴＣＰ／ＩＰ処理部から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、前記受け取ったＴＣＰ−ＡＣＫパケットを前記レート維持部に転送し、
前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、
前記フローエントリは、前記再送制御部から前回受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号である受信ＡＣＫ番号を含み、
前記レート維持部は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ／ＩＰ処理部に転送されないように、書き換え前のＡＣＫ番号が前記受信ＡＣＫ番号以上である場合に、前記再送制御部から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ／ＩＰ処理部に転送する
通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記レート維持部は、前記ＴＣＰ／ＩＰ処理部に転送されるＴＣＰ−ＡＣＫパケットのＡＣＫ番号が単調増加するように前記書き換えを行う
通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記フローエントリは、前記ＴＣＰ／ＩＰ処理部に転送済みの最新のＴＣＰ−ＡＣＫパケットのＡＣＫ番号である送信ＡＣＫ番号をさらに含み、
新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記送信ＡＣＫ番号を参照し、前記新たなＴＣＰ−ＡＣＫパケットのＡＣＫ番号が前記送信ＡＣＫ番号よりも大きくなるように前記書き換えを行い、更に、前記送信ＡＣＫ番号を更新する
通信装置。
【請求項４】
請求項３に記載の通信装置であって、
前記レート維持部は、前記新たなＴＣＰ−ＡＣＫパケットに関して、前記書き換え後のＡＣＫ番号が前記書き換え前のＡＣＫ番号を超えないように前記書き換えを行う
通信装置。
【請求項５】
請求項４に記載の通信装置であって、
前記フローエントリは、更に、後に受信することが期待されるＴＣＰ−ＡＣＫパケットのＡＣＫ番号である期待ＡＣＫ番号を含み、
前記レート維持部は、前記ＴＣＰ／ＩＰ処理部から送信された前記ＴＣＰパケットに基づいて、前記フローテーブル中の該当フローエントリの前記期待ＡＣＫ番号を更新し、
前記新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記期待ＡＣＫ番号を参照し、
前記新たなＴＣＰ−ＡＣＫパケットのＡＣＫ番号が前記期待ＡＣＫ番号以上の場合、前記レート維持部は前記書き換えを行わない
通信装置。
【請求項６】
請求項１乃至５のいずれか一項に記載の通信装置であって、
前記フローエントリは、重複ＡＣＫ回数
をさらに含み、
新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記受信ＡＣＫ番号を参照し、
前記新たなＴＣＰ−ＡＣＫパケットのＡＣＫ番号が前記受信ＡＣＫ番号よりも大きい場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ＡＣＫ回数を初期化し、
前記新たなＴＣＰ−ＡＣＫパケットのＡＣＫ番号が前記受信ＡＣＫ番号と同じである場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ＡＣＫ回数をインクリメントし、
前記重複ＡＣＫ回数が所定の条件を満たした場合、前記レート維持部は、前記新たなＴＣＰ−ＡＣＫパケットのＡＣＫ番号に対応する前記送信パケットの再送を前記再送制御部に対して指示する
通信装置。
【請求項７】
通信装置におけるパケット再送制御方法であって、
ＴＣＰ層から送信されたＴＣＰパケットに関して、再送制御部が、前記ＴＣＰ層よりも下位の下位層でパケット再送制御を行うステップと、
前記再送制御部が、前記ＴＣＰパケットの送信先から、前記ＴＣＰパケットに応答するＴＣＰ−ＡＣＫパケットを受け取るステップと、
前記再送制御部が、前記受け取ったＴＣＰ−ＡＣＫパケットを前記下位層から前記ＴＣＰ層のレート維持部に転送するステップと
を含み、
前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、
前記フローエントリは、前記再送制御部から前回受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号である受信ＡＣＫ番号を含み、
前記転送するステップは、
同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ層に転送されないように、書き換え前のＡＣＫ番号が前記受信ＡＣＫ番号以上である場合に、前記受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行うステップと、
前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ層に転送するステップと
を含む
パケット再送制御方法。
【請求項８】
コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムであって、
前記パケット再送制御機能は、
ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理機能と、
ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御機能と、
前記再送制御機能より受け取るＴＣＰパケットを前記ＴＣＰ／ＩＰ処理機能に転送するレート維持機能と
を備え、
前記再送制御機能は、前記ＴＣＰ／ＩＰ処理機能から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、前記受け取ったＴＣＰ−ＡＣＫパケットを前記レート維持機能に転送し、
前記レート維持機能は、フロー毎のフローエントリを有するフローテーブルを備え、
前記フローエントリは、前記再送制御機能から前回受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号である受信ＡＣＫ番号を含み、
前記レート維持機能は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ／ＩＰ処理機能に転送されないように、書き換え前のＡＣＫ番号が前記受信ＡＣＫ番号以上である場合に、前記再送制御機能から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ／ＩＰ処理機能に転送する
パケット再送制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信におけるパケット再送制御（ｐａｃｋｅｔ  ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ）に関する。
【背景技術】
【０００２】
パケット通信ネットワークでは、伝送中のパケットの廃棄や破壊が発生する可能性がある。これは、パケットを転送するルータやスイッチにおける輻輳の発生や信号受信感度の低下、あるいは外部からの電磁ノイズ等に起因する。一般的に、廃棄や破壊によるパケットの消失は、アプリケーション層あるいはトランスポート層で動作するプロトコルによって検知される。そして、そのようなプロトコルの制御により、消失したパケットの再送（ｒｅｔｒａｎｓｍｉｓｓｉｏｎ）が行われ、送信されるべきデータの完全性が保証される。
【０００３】
具体的には、送信装置は受信装置にパケットを送信し、受信装置はパケットの受信を契機に確認応答（ＡＣＫ：ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）パケットを送信装置に返信する。このＡＣＫパケットの受信をもって、送信装置は、送出パケットが受信装置に無事到達したことを認識する。一方、送信装置と受信装置との間のネットワーク上でパケットが消失した場合、送信装置は、当該パケットに応答するＡＣＫパケットを受け取らない。送信装置は、パケット送出後、所定の待ち時間以内にＡＣＫパケットを受け取らない場合、当該パケットを受信装置に再送する。尚、上記所定の待ち時間は、「再送タイムアウト（ＲＴＯ：Ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  Ｔｉｍｅ  Ｏｕｔ）」と呼ばれている。また、このようなパケット再送制御を実施する送信装置は、ＡＣＫパケットを受け取るまで送出パケットを一時的に保管するための記憶領域を備えており、この記憶領域は、以下「再送バッファ」と参照される。
【０００４】
インターネットで用いられるＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）は、このようなパケット再送制御を行う代表的なトランスポート層のプロトコルである。
【０００５】
このようなパケット再送制御に関連する技術が、非特許文献１に記載されている。当該関連技術によれば、ＴＣＰ層よりも下位のＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）層において、パケット再送制御が実施される。その理由は次の通りである。
【０００６】
例として、データセンタ内のネットワークのような、往復遅延時間（ＲＴＴ：Ｒｏｕｎｄ−Ｔｒｉｐ  ｄｅｌａｙ  Ｔｉｍｅ）が非常に短いネットワークを考える。このようなネットワークでは、再送タイムアウトをマイクロ秒レベルにまで短縮することによって、パケット再送までの待ち時間を減少させ、通信効率を向上させることができる。しかしながら、一般的にＴＣＰはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に実装されているため、ＴＣＰの再送タイムアウトをマイクロ秒レベルまで短縮することは困難である。例えば、Ｌｉｎｕｘにおける単位時間（Ｊｉｆｆｉｅｓ）の精度は高々ミリ秒であり、マイクロ秒単位の時間計測には不十分である。そこで非特許文献１は、ＯＳより下位のＭＡＣ層においてパケット再送制御を実施し、再送タイムアウトをマイクロ秒レベルにまで短縮することで、このような問題を解決する。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】高道  透  他、“Ｕｌｔｒａ−Ｈｉｇｈ  Ｓｐｅｅｄ  ＭＡＣ  Ｔｅｃｈｎｏｌｏｇｙ  ｆｏｒ  Ｔｅｒａｂｉｔ−Ｃｌａｓｓ  ＬＡＮ”、電子情報通信学会  通信ソサイエティ大会、２００８．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本願発明者は、上記関連技術のようにＴＣＰ層より下位の層においてもパケット再送制御が実施される場合に関して、次のような問題点を認識した。それは、あるパケットがネットワーク上で消失した場合に、当該同一パケットに対して、下位層とＴＣＰ層の両方によるパケット再送が発生してしまう可能性があることである。図１を参照して、このような状況を説明する。
【０００９】
図１において、２台の通信装置がネットワークを介して互いに接続されている。各通信装置において、「ＴＣＰ／ＩＰ処理部」がＴＣＰ／ＩＰ処理を行い、「再送制御部」がＴＣＰ層よりも下位の層でのパケット再送制御を実施する。実線の矢印は、第１の通信装置から第２の通信装置に送られる、ＴＣＰデータを含むＴＣＰパケットを表す。各ＴＣＰパケットは、１００バイトのＴＣＰデータを含み、また、単一のフローに属するとする。また、破線の矢印は、第２の通信装置から第１の通信装置へ返送される、ＴＣＰによるＡＣＫパケット（以下、「ＴＣＰ−ＡＣＫパケット」と参照される）を表す。実線の矢印に付された一重円の中の数字は、ＴＣＰパケットのシーケンス番号を示し、破線の矢印に付された二重円の中の数字は、ＴＣＰ−ＡＣＫパケットのＴＣＰのＡＣＫ番号を示す。尚、簡単のため、下位層によるＡＣＫパケットの送受信は図示されていない。また、ＴＣＰの一般的な実装では、複数のＡＣＫパケットを１つに集約する遅延ＡＣＫ（Ｄｅｌａｙｅｄ  ＡＣＫ）機能が有効になっているが、本例では遅延ＡＣＫを考慮しない。これらの簡略化によって一般性が失われることはない。
【００１０】
図１に示される例において、第１の通信装置のＴＣＰ／ＩＰ処理部は、６つのＴＣＰパケットを第２の通信装置に向けて連続して送出する（時系列順に、時刻Ｔ１、Ｔ２、Ｔ３、Ｔ５、Ｔ６、Ｔ７）。ここで、時刻Ｔ３に送出された、シーケンス番号“３００”のＴＣＰパケットが、ネットワーク内で廃棄された場合を考える。第１の通信装置の再送制御部は、時刻Ｔ４において当該ＴＣＰパケット（シーケンス番号“３００”）を送出し、再送タイムアウト経過後の時刻Ｔ８において当該ＴＣＰパケット（シーケンス番号“３００”）を再送する。
【００１１】
その後、時刻Ｔ９〜Ｔ１３にかけて、廃棄されなかった５つのＴＣＰパケットのそれぞれに応答する５つのＴＣＰ−ＡＣＫパケットが第１の通信装置に順番に到着する。これら５つのＴＣＰ−ＡＣＫパケットのそれぞれのＡＣＫ番号は、到着順に２００、３００、３００、３００、３００である。ＡＣＫ番号“３００”のＴＣＰ−ＡＣＫパケットが連続する理由は、第２の通信装置のＴＣＰ／ＩＰ処理部が、シーケンス番号“３００”のＴＣＰパケットを受理していないからである。尚、同じＡＣＫ番号を持つ２回目以降のＴＣＰ−ＡＣＫパケットは、「重複ＡＣＫパケット」と呼ばれる。
【００１２】
ここで、第１の通信装置のＴＣＰ／ＩＰ処理部は、重複ＡＣＫパケットを３回連続で受信すると高速再送（Ｆａｓｔ  Ｒｅｔｒａｎｓｍｉｔ）を起動するとする。この場合、第１の通信装置のＴＣＰ／ＩＰ処理部は、ＡＣＫ番号“３００”の４回目のＴＣＰ−ＡＣＫパケットを受信した時点（時刻Ｔ１３）で、シーケンス番号“３００”のＴＣＰパケットを再送する。
【００１３】
時刻Ｔ８で再送制御部によって再送されたＴＣＰパケット（シーケンス番号“３００”）に応答するＴＣＰ−ＡＣＫパケットは、時刻Ｔ１４においてようやく第１の通信装置に到着する。しかしながら、この時点では、ＴＣＰ／ＩＰ処理部によるＴＣＰパケット（シーケンス番号“３００”）の再送が既に行われてしまっている。すなわち、再送制御部による再送が結果的に間に合っていない。
【００１４】
このように、シーケンス番号“３００”のＴＣＰパケットに関して、下位層での再送制御部による再送に加えてＴＣＰによる高速再送も実施されてしまう。下位層にて再送が行われる以上、ＴＣＰによる再送は不要な処理である。また、ＴＣＰ／ＩＰ処理部は、高速再送に伴って輻輳ウィンドウを縮小させる。すなわち、ＴＣＰによる高速再送がいたずらに引き起こされることは、ネットワークの帯域を圧迫するだけでなく、ＴＣＰのスループットを減少させ、通信効率を大幅に低下させる。
【００１５】
以下、図１で示された例において、ＴＣＰによる不要な高速再送の発生を回避するための条件について考察する。
【００１６】
まず、再送制御部の再送タイムアウトは、次の条件を満たす必要がある：「ＴＣＰ／ＩＰ処理部がシーケンス番号“６００”のＴＣＰパケットを送信する時刻Ｔ７より前に、再送制御部による再送が開始されること」。この条件をより一般化すれば、次の通りである：「廃棄されるＴＣＰパケット（シーケンス番号“３００”）の３つあとのＴＣＰパケット（シーケンス番号“６００”）が送信される前に、再送制御部による再送が開始されること」。ここで、「３つあと」の根拠は、図１の例においてＴＣＰ／ＩＰ処理部が重複ＡＣＫパケットを３回連続で受信すると高速再送を起動することである。この条件は、次の関係式（１）で表される。
【００１７】
関係式（１）：
｛再送制御部の再送タイムアウト｝＜｛３つのＴＣＰパケットの送信に要する時間｝
【００１８】
また、再送タイムアウトをネットワークのＲＴＴよりも短く設定することはできない。従って、次の関係式（２）も満たされる必要がある。
【００１９】
関係式（２）：
｛再送制御部の再送タイムアウト｝≧｛ネットワークのＲＴＴ｝
【００２０】
関係式（１）と関係式（２）から、次の関係式（３）が得られる。
【００２１】
関係式（３）：
｛ネットワークのＲＴＴ｝＜｛３つのＴＣＰパケットの送信に要する時間｝
【００２２】
ＴＣＰによる不要な高速再送の発生を回避するためには、上記関係式（３）が満たされる必要がある。しかしながら、実際のネットワークにおいて関係式（３）を成立させることは極めて困難である。例えば、ネットワークがイーサネットである場合、最小のフレーム長は６４バイトであり、最小のフレーム間ギャップ（Ｉｎｔｅｒ−Ｆｒａｍｅ  Ｇａｐ）は２０バイトである。この場合、関係式（３）の右辺は、３×（６４＋２０）×８／｛ネットワークの回線速度［ビット／秒］｝、となる。例えば、ネットワークの回線速度が１０ギガビット／秒の場合、関係式（３）は次の関係式（４）となる。
【００２３】
関係式（４）：
｛ネットワークのＲＴＴ｝＜０．２０１６マイクロ秒
【００２４】
一般的なデータセンタのネットワークのＲＴＴは数十〜数百マイクロ秒と言われており、上記の０．２０１６マイクロ秒とは甚だしく乖離している。従って、実際のネットワークにおいて関係式（３）、（４）を成立させることは容易ではない。また、今後、回線速度の主流が４０ギガビット／秒や１００ギガビット／秒に移行するに従って、条件は更に厳しくなる。
【００２５】
以上に説明されたように、関連技術によれば、下位層でパケット再送制御を行う場合に、通信効率の低下が発生する恐れがある。
【００２６】
本発明の１つの目的は、下位層でパケット再送制御を行う場合の通信効率の低下を未然に防止することができる技術を提供することにある。
【課題を解決するための手段】
【００２７】
本発明の１つの観点において通信装置が提供される。その通信装置は、ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理部と、ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御部と、再送制御部より受け取るＴＣＰパケットをＴＣＰ／ＩＰ処理部に転送するレート維持部と、を備える。再送制御部は、ＴＣＰ／ＩＰ処理部から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、送信先から送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、受け取ったＴＣＰ−ＡＣＫパケットをレート維持部に転送する。レート維持部は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続してＴＣＰ／ＩＰ処理部に転送されないように、再送制御部から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、書き換え後のＴＣＰ−ＡＣＫパケットをＴＣＰ／ＩＰ処理部に転送する。
【００２８】
本発明の他の観点において、通信装置におけるパケット再送制御方法が提供される。そのパケット再送制御方法は、（Ａ）ＴＣＰ層から送信されたＴＣＰパケットに関して、ＴＣＰ層よりも下位の下位層でパケット再送制御を行うステップと、（Ｂ）ＴＣＰパケットの送信先から、ＴＣＰパケットに応答するＴＣＰ−ＡＣＫパケットを受け取るステップと、（Ｃ）受け取ったＴＣＰ−ＡＣＫパケットを下位層からＴＣＰ層に転送するステップと、を含む。上記（Ｃ）転送するステップは、（Ｃ１）同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続してＴＣＰ層に転送されないように、受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行うステップと、（Ｃ２）書き換え後のＴＣＰ−ＡＣＫパケットをＴＣＰ層に転送するステップと、を含む。
【００２９】
本発明の更に他の観点において、コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムが提供される。そのパケット再送制御機能は、ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理機能と、ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御機能と、再送制御機能より受け取るＴＣＰパケットをＴＣＰ／ＩＰ処理機能に転送するレート維持機能と、を備える。再送制御機能は、ＴＣＰ／ＩＰ処理機能から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、送信先から送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、受け取ったＴＣＰ−ＡＣＫパケットをレート維持機能に転送する。レート維持機能は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続してＴＣＰ／ＩＰ処理機能に転送されないように、再送制御機能から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、書き換え後のＴＣＰ−ＡＣＫパケットをＴＣＰ／ＩＰ処理機能に転送する。
【発明の効果】
【００３０】
本発明によれば、下位層でパケット再送制御を行う場合の通信効率の低下を未然に防止することが可能となる。
【図面の簡単な説明】
【００３１】
【図１】図１は、課題を説明するためのシーケンス図である。
【図２】図２は、本発明の実施の形態に係る通信装置の構成を示すブロック図である。
【図３】図３は、本発明の実施の形態における再送制御部の構成を示すブロック図である。
【図４】図４は、再送バッファの構成を示す概念図である。
【図５】図５は、本発明の実施の形態におけるレート維持部の構成を示すブロック図である。
【図６】図６は、本発明の実施の形態におけるフローテーブルの構成を示す概念図である。
【図７】図７は、本発明の実施の形態における登録部の処理を示すフローチャートである。
【図８Ａ】図８Ａは、本発明の実施の形態における書き換え部の処理を示すフローチャートである。
【図８Ｂ】図８Ｂは、本発明の実施の形態における書き換え部の処理を示すフローチャートである。
【図９】図９は、本発明の実施の形態に係る通信装置の動作の例を示すシーケンス図である。
【図１０】図１０は、本発明の実施の形態におけるフローテーブルの内容の例を示す表である。
【図１１】図１１は、本発明の実施の形態に係る通信装置を情報処理装置に適用した場合の構成を示す図である。
【発明を実施するための形態】
【００３２】
添付図面を参照して、本発明の実施の形態を説明する。
【００３３】
１．構成
１−１．全体構成
図２は、本発明の実施の形態に係る通信装置１の構成を示すブロック図である。本実施の形態に係る通信装置１は、アプリケーション処理部１０、ＴＣＰ／ＩＰ処理部１１、レート維持部１２、再送制御部１３、及び下位レイヤ処理部１４を備えている。
【００３４】
アプリケーション処理部１０は、Ｗｅｂサーバやメールサーバなどの通信アプリケーションを動作させる。
【００３５】
ＴＣＰ／ＩＰ処理部１１は、ＴＣＰ層及びＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）層の処理を行う。このＴＣＰ／ＩＰ処理部１１は、ＴＣＰによる一般的なパケット再送制御機能を有している。ＴＣＰ／ＩＰ処理部１１とアプリケーション処理部１０の間は、一般的にはソケットを介して接続される。
【００３６】
下位レイヤ処理部１４は、物理層とリンク層の処理を行う。物理層とリンク層のプロトコルは、イーサネット（登録商標）などである。下位レイヤ処理部１４は、再送制御部１３から入力された送信パケット２２を、所定の手順に従ってネットワーク２に送信する。また、下位レイヤ処理部１４は、ネットワーク２から受信した受信パケット２３を再送制御部１３に出力する。
【００３７】
再送制御部１３は、ＴＣＰ／ＩＰ処理部１１と下位レイヤ処理部１４との間に設けられている。この再送制御部１３は、ＴＣＰ層（ＴＣＰ／ＩＰ処理部１１）よりも下位の層でパケット再送制御を行う機能を有している。具体的には、再送制御部１３は、ＴＣＰ／ＩＰ処理部１１から送信されたＴＣＰパケット２０を受け取る。再送制御部１３は、受け取ったＴＣＰパケット２０に再送制御処理を施し、それを送信パケット２２として下位レイヤ処理部１４に送信する。また、再送制御部１３は、下位レイヤ処理部１４から受信パケット２３を受け取る。その受信パケット２３が下位層のＡＣＫパケットである場合、再送制御部１３は、その下位層のＡＣＫパケットを終端する。また、その受信パケット２３がＴＣＰパケット２０を含んでいる場合、再送制御部１３は、当該ＴＣＰパケット２０をレート維持部１２に転送するとともに、下位層のＡＣＫパケットを生成してそれを送信元に返信する。尚、下位レイヤ処理部１４から受け取るＴＣＰパケット２０は、送信先に送信された送信パケット２２に応答するＴＣＰ−ＡＣＫパケット（ＴＣＰによるＡＣＫパケットであり、ＡＣＫ番号を有するＴＣＰパケット）である場合もある。更に、再送制御部１３は、レート維持部１２から再送指示２１を受け取ると、その再送指示２１に従って該当ＴＣＰパケット２０の再送を行う。再送制御部１３については、後に詳細に説明する。
【００３８】
レート維持部１２は、ＴＣＰ／ＩＰ処理部１１と再送制御部１３との間に設けられている。レート維持部１２は、ＴＣＰ／ＩＰ処理部１１から送信されたＴＣＰパケット２０を受け取り、受け取ったＴＣＰパケット２０に関する情報を適宜記憶する。また、レート維持部１２は、再送制御部１３からＴＣＰパケット２０を受け取る。再送制御部１３から受け取るＴＣＰパケット２０には、送信先に送信された送信パケット２２に応答するＴＣＰ−ＡＣＫパケットも含まれる。レート維持部１２は、再送制御部１３から受け取ったＴＣＰパケット２０をＴＣＰ／ＩＰ処理部１１に転送する。但し、この時、レート維持部１２は、ＴＣＰ／ＩＰ処理部１１において高速再送が起動しないように、ＴＣＰ−ＡＣＫパケットのＡＣＫ番号を必要に応じて書き換える。具体的には、レート維持部１２は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続してＴＣＰ／ＩＰ処理部１１に転送されないように、すなわち、ＴＣＰ／ＩＰ処理部１１において重複ＡＣＫパケットが発生しないように、ＴＣＰ−ＡＣＫパケットのＡＣＫ番号を書き換える。そして、レート維持部１２は、書き換え後のＴＣＰ−ＡＣＫパケットをＴＣＰ／ＩＰ処理部１１に転送する。更に、レート維持部１２は、必要に応じて、再送指示２１を再送制御部１３に向けて発行する。レート維持部１２については、後に詳細に説明する。
【００３９】
ネットワーク２は、予め定められた転送経路に沿って、あるいはＴＣＰパケット２０に含まれる宛先情報に従って、ＴＣＰパケット２０を適切な宛先に転送する。ネットワーク２では、ルータやスイッチに例示される複数の伝送装置が伝送線路によって相互に接続されている。ネットワーク２では、電磁ノイズやトラヒックの輻輳などの要因により、転送中のＴＣＰパケット２０の消失が発生する可能性がある。
【００４０】
１−２．再送制御部１３
図３は、通信装置１の再送制御部１３の構成例を示している。再送制御部１３は、送信部３０、再送バッファ３１、受信部３２、及び多重部３３を備えている。
【００４１】
再送バッファ３１は、送信済みのＴＣＰパケット２０を一時的に保持しておくために用いられる。その保持期間は、ＴＣＰパケット２０の送信時から、当該ＴＣＰパケット２０に応答する下位層のＡＣＫパケットを受け取るまでである。図４は、再送バッファ３１の構成例を示している。再送バッファ３１は、０個以上のキューエントリ６１を有するＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）型のキューである。各キューエントリ６１は、ＴＣＰ／ＩＰ処理部１１から再送制御部１３に入力されたＴＣＰパケット２０のひとつひとつに対応しており、対応するＴＣＰパケット２０に関する情報を含んでいる。具体的には、各キューエントリ６１は、ＴＣＰパケット６２とタイムスタンプ６３を含んでいる。ＴＣＰパケット６２は、再送バッファ３１に書き込まれたＴＣＰパケット２０である。タイムスタンプ６３は、当該ＴＣＰパケット２０が再送バッファ３１に書き込まれた時刻であり、再送タイムアウトの判定に用いられる。
【００４２】
再度図３を参照して、送信部３０は、ＴＣＰ／ＩＰ処理部１１から送信されたＴＣＰパケット２０を受け取る。送信部３０は、そのＴＣＰパケット２０を再送バッファ３１に書き込むととともに、多重部３３に出力する。また、送信部３０は、再送タイムアウトが経過したキューエントリ６１のＴＣＰパケット６２を再送バッファ３１から読み出し、それを多重部３３に出力する。更に、送信部３０は、レート維持部１２から、パケット識別子を含む再送指示２１を受け取る場合がある。「パケット識別子」は、例えば、パケットヘッダに含まれる、ＭＡＣ層の宛先／送信元アドレス・ＶＬＡＮタグや、ＩＰ層の送信元／宛先アドレス、ＴＣＰ層の送信元／宛先ポート番号・ＡＣＫ番号、などの一部または全てである。送信部３０は、受け取った再送指示２１からパケット識別子を抽出し、そのパケット識別子に該当するＴＣＰパケット６２を再送バッファ３１の中から検索し、見つかったＴＣＰパケット６２を再送バッファ３１から読み出し、それを多重部３３に出力する。
【００４３】
受信部３２は、下位レイヤ処理部１４から受信パケット２３を受け取る。その受信パケット２３がＴＣＰパケット２０である場合、受信部３２は、そのＴＣＰパケット２０をレート維持部１２に転送する。更に、受信部３２は、そのＴＣＰパケット２０の送信元を宛先とする下位層ＡＣＫパケット３９を生成し、その下位層ＡＣＫパケット３９を多重部３３に出力する。この際、受信部３２は、当該ＴＣＰパケット２０からパケット識別子を抽出し、抽出したパケット識別子を下位層ＡＣＫパケット３９に付与する。一方、受信パケット２３が下位層ＡＣＫパケット３９である場合、受信部３２は、その下位層ＡＣＫパケット３９を終端する。更に、受信部３２は、その下位層ＡＣＫパケット３９からパケット識別子を抽出し、そのパケット識別子に該当するＴＣＰパケット６２を持つキューエントリ６１を再送バッファ３１の中から検索し、見つかったキューエントリ６１を削除する。
【００４４】
多重部３３は、送信部３０から受け取ったＴＣＰパケット２０、及び、受信部３２から受け取った下位層ＡＣＫパケット３９をパケット単位に多重し、それらを下位レイヤ処理部１４に送信パケット２２として出力する。
【００４５】
１−３．レート維持部１２
図５は、通信装置１のレート維持部１２の構成例を示している。レート維持部１２は、登録部４０、フローテーブル４１、及び書き換え部４２を備えている。
【００４６】
フローテーブル４１は、レート維持部１２がＴＣＰ−ＡＣＫパケットのＡＣＫ番号を適切に書き換えるために利用する情報を保持する。図６は、フローテーブル４１の構成例を示している。フローテーブル４１は、通信装置１が通信中のフロー毎にフローエントリ５０を有している。各フローエントリ５０は、フロー識別子５１、期待ＡＣＫ番号５２、受信フラグ５３、受信ＡＣＫ番号５４、送信ＡＣＫ番号５５、及び重複ＡＣＫ回数５６を含んでいる。
【００４７】
フロー識別子５１は、当該フローエントリ５０に対応付けられたフローの識別子である。「フロー識別子」は、例えば、パケットヘッダに含まれる、ＭＡＣ層の宛先／送信元アドレス・ＶＬＡＮタグや、ＩＰ層の送信元／宛先アドレス、ＴＣＰ層の送信元／宛先ポート番号、などの一部または全てである。
【００４８】
期待ＡＣＫ番号５２は、ＴＣＰ／ＩＰ処理部１１が受信することを期待するＴＣＰ−ＡＣＫパケットの最後のＡＣＫ番号である。
【００４９】
受信フラグ５３は、レート維持部１２が再送制御部１３からＴＣＰ−ＡＣＫパケットを受け取ったか否かを示すフラグである。当該フローに関して、ＴＣＰ−ＡＣＫパケットを一度でも受け取っていれば受信フラグ５３は「真」になり、一度も受け取っていなければ受信フラグ５３は「偽」になる。
【００５０】
受信ＡＣＫ番号５４は、レート維持部１２が再送制御部１３から前回受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号である。当該フローに関してＴＣＰ−ＡＣＫパケットを一度も受け取っていなければ、受信ＡＣＫ番号５４は不定になる。
【００５１】
送信ＡＣＫ番号５５は、レート維持部１２からＴＣＰ／ＩＰ処理部１１に転送済みの最新のＴＣＰ−ＡＣＫパケットのＡＣＫ番号である。当該フローに関してＴＣＰ−ＡＣＫパケットを一度も転送していなければ、送信ＡＣＫ番号５５は不定になる。
【００５２】
重複ＡＣＫ回数５６は、レート維持部１２が再送制御部１３から連続して受け取った重複ＡＣＫパケットの個数を示す。つまり、重複ＡＣＫ回数５６は、再送制御部１３から受け取るＴＣＰ−ＡＣＫパケットのＡＣＫ番号が連続して同一値を取った場合に、その連続回数を示す。重複ＡＣＫパケットの受信が途切れた場合、重複ＡＣＫ回数５６はリセットされる。例えば、レート維持部１２が再送制御部１３から受け取った、過去３つのＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号が時系列順に１００、２００、２００であった場合、重複ＡＣＫ回数５６は１になる。また、例えば、過去３つのＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号が時系列順に３００、３００、４００であった場合、重複ＡＣＫ回数５６は０になる。
【００５３】
再度図５を参照して、登録部４０は、ＴＣＰ／ＩＰ処理部１１から送信されたＴＣＰパケット２０を受け取る。登録部４０は、受け取ったＴＣＰパケット２０からフロー識別子７１を抽出する。また、登録部４０は、受け取ったＴＣＰパケット２０のＴＣＰシーケンス番号とＴＣＰデータ長を加算することにより、期待ＡＣＫ番号７０を算出する。更に、登録部４０は、フローテーブル４１を検索し、上記抽出されたフロー識別子７１と同一のフロー識別子５１を有するフローエントリ５０（ヒットエントリ）が存在するか否かを調べる。
【００５４】
フローテーブル４１にヒットエントリ５０が存在しない場合、登録部４０は、フロー識別子７１に対応する新たなフローエントリ５０をフローテーブル４１に作成する。新たなフローエントリ５０において、フロー識別子５１及び期待ＡＣＫ番号５２は、それぞれ、フロー識別子７１及び期待ＡＣＫ番号７０に設定される。受信フラグ５３は「偽」に設定される。受信ＡＣＫ番号５４、送信ＡＣＫ番号５５及び重複ＡＣＫ回数５６は、不定のままである。
【００５５】
一方、フローテーブル４１にヒットエントリ５０が存在する場合、登録部４０は、当該ヒットエントリ５０に含まれる期待ＡＣＫ番号５２と期待ＡＣＫ番号７０とを比較する。期待ＡＣＫ番号７０が期待ＡＣＫ番号５２よりも大きい場合、登録部４０は、当該ヒットエントリ５０の期待ＡＣＫ番号５２を期待ＡＣＫ番号７０で更新する。尚、登録部４０の動作については、後に詳細に説明する。
【００５６】
書き換え部４２は、再送制御部１３からＴＣＰパケット２０を受け取る。受け取ったＴＣＰパケット２０がＴＣＰ−ＡＣＫパケットではない場合、書き換え部４２は、そのＴＣＰパケット２０をＴＣＰ／ＩＰ処理部１１に転送する。
【００５７】
一方、受け取ったＴＣＰパケット２０がＴＣＰ−ＡＣＫパケットである場合、書き換え部４２は、そのＴＣＰ−ＡＣＫパケット２０からフロー識別子７１を抽出する。そして、書き換え部４２は、フローテーブル４１を検索し、上記抽出されたフロー識別子７１と同一のフロー識別子５１を有するフローエントリ５０（ヒットエントリ）を抽出する。
【００５８】
書き換え部４２は、当該ヒットエントリ５０の内容に基づいて、受け取ったＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号の“書き換え”を実行するか否かを決定する。“書き換え”を行う場合、書き換え部４２は、所定の計算式に従ってＡＣＫ番号を書き換え、書き換え後のＴＣＰ−ＡＣＫパケット２０をＴＣＰ／ＩＰ処理部１１に転送する。一方、“書き換え”を行わない場合、書き換え部４２は、受け取ったＴＣＰ−ＡＣＫパケット２０をそのままＴＣＰ／ＩＰ処理部１１に転送する。
【００５９】
ＡＣＫ番号の“書き換え”について更に説明する。本実施の形態によれば、書き換え部４２は、ＴＣＰ／ＩＰ処理部１１において高速再送が起動しないように、ＡＣＫ番号の書き換えを行う。そのために、書き換え部４２は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケット２０が連続してＴＣＰ／ＩＰ処理部１１に転送されないように、すなわち、ＴＣＰ／ＩＰ処理部１１において重複ＡＣＫパケットが発生しないように、ＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号を書き換える。例えば、書き換え部４２は、ＴＣＰ／ＩＰ処理部１１に転送されるＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号が単調増加するように、書き換えを行う。より詳細には、書き換え部４２は、ヒットエントリ５０の送信ＡＣＫ番号を参照し、最新のＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号が当該送信ＡＣＫ番号よりも大きくなるように、書き換えを行う。但し、書き換え部４２は、書き換え後のＡＣＫ番号が書き換え前のＡＣＫ番号を超えないように、書き換えを行う。
【００６０】
また、書き換え部４２は、ヒットエントリ５０の受信ＡＣＫ番号を参照し、受け取ったＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号と当該受信ＡＣＫ番号５４とを比較する。そのＡＣＫ番号が受信ＡＣＫ番号５４（前回のＡＣＫ番号）と一致している場合、当該ＴＣＰ−ＡＣＫパケット２０は重複ＡＣＫパケットである。この場合、書き換え部４２は、ヒットエントリ５０の重複ＡＣＫ回数５６を１だけインクリメントする。一方、ＡＣＫ番号が受信ＡＣＫ番号５４より大きい場合、書き換え部４２は、ヒットエントリ５０の重複ＡＣＫ回数５６を０にリセット（初期化）する。
【００６１】
更に、書き換え部４２は、重複ＡＣＫ回数５６を参照し、重複ＡＣＫ回数５６が所定の高速再送条件を満たしているか否かを判定する。重複ＡＣＫ回数５６が所定の高速再送条件を満たしている場合、書き換え部４２は、受け取ったＴＣＰ−ＡＣＫパケット２０からパケット識別子を抽出する。そして、書き換え部４２は、抽出したパケット識別子を含む再送指示２１を、再送制御部１３に向けて発行する。すなわち、書き換え部４２は、ＴＣＰ／ＩＰ処理部１１の代わりに再送制御部１３に、高速再送処理を実行させる。
【００６２】
また、ＴＣＰ−ＡＣＫパケット２０をＴＣＰ／ＩＰ処理部１１に転送する場合、書き換え部４２は、ヒットエントリ５０の受信ＡＣＫ番号５４及び送信ＡＣＫ番号５５を適宜更新する。尚、書き換え部４２の動作については、後に詳細に説明する。
【００６３】
２．処理フロー
２−１．登録部４０の処理
図７は、レート維持部１２の登録部４０の処理を示すフローチャートである。
【００６４】
ステップＳ１００において、登録部４０は、ＴＣＰ／ＩＰ処理部１１からのＴＣＰパケット２０の入力を待つ。
【００６５】
ステップＳ１０１において、登録部４０は、入力されたＴＣＰパケット２０のヘッダ情報に基づいて、期待ＡＣＫ番号７０を算出する。期待ＡＣＫ番号７０は、ＴＣＰパケット２０のＴＣＰシーケンス番号とＴＣＰデータ長の和である。
【００６６】
ステップＳ１０２において、登録部４０は、入力されたＴＣＰパケット２０からフロー識別子７１を抽出する。
【００６７】
ステップＳ１０３において、登録部４０は、フローテーブル４１を検索し、抽出したフロー識別子７１と同一のフロー識別子５１を持つフローエントリ５０（ヒットエントリ）が、フローテーブル４１に存在するか否かを調べる。
【００６８】
ヒットエントリ５０の検索に成功した場合（ステップＳ１０４；Ｙｅｓ）、処理はステップＳ１０６に進む。一方、検索に失敗した場合（ステップＳ１０４；Ｎｏ）、処理はステップＳ１０５に進む。
【００６９】
ステップＳ１０５において、登録部４０は、ステップＳ１０２で抽出したフロー識別子７１に対応する新たなフローエントリ５０を、フローテーブル４１に作成する。ここで、登録部４０は、新たなフローエントリ５０の各フィールドを次のように初期化する。すなわち、登録部４０は、フロー識別子５１をステップＳ１０２で抽出したフロー識別子７１に、期待ＡＣＫ番号５２をステップＳ１０１で算出した期待ＡＣＫ番号７０に、受信フラグ５３を「偽」に、それぞれ初期化する。尚、受信ＡＣＫ番号５４、送信ＡＣＫ番号５５、重複ＡＣＫ回数５６を初期化する必要はない。ステップＳ１０５は最終ステップの１つである。
【００７０】
ステップＳ１０６において、登録部４０は、ステップＳ１０３で検索されたヒットエントリ５０の期待ＡＣＫ番号５２と、ステップＳ１０１で算出した期待ＡＣＫ番号７０とを比較する。期待ＡＣＫ番号７０が期待ＡＣＫ番号５２より大きければ、登録部４０は、当該ヒットエントリ５０の期待ＡＣＫ番号５２を期待ＡＣＫ番号７０で更新する。ステップＳ１０６は最終ステップの１つである。
【００７１】
２−２．書き換え部４２の処理
図８Ａ及び図８Ｂは、レート維持部１２の書き換え部４２の処理を示すフローチャートである。
【００７２】
ステップＳ２００において、書き換え部４２は、再送制御部１３からのＴＣＰパケット２０の入力を待つ。
【００７３】
ステップＳ２０１において、書き換え部４２は、入力されたＴＣＰパケット２０のＴＣＰヘッダ中のＡＣＫフラグをチェックする。ＡＣＫフラグがセットされている場合、書き換え部４２は、有効なＡＣＫ番号がＴＣＰパケット２０に含まれていると判断し、処理はステップＳ２０２に進む。一方、ＡＣＫフラグがセットされていない場合、処理はステップＳ２２１に進む。
【００７４】
ステップＳ２０２において、書き換え部４２は、入力されたＴＣＰパケット２０（ＴＣＰ−ＡＣＫパケット）のＴＣＰヘッダ中のＡＣＫ番号を、元ＡＣＫ番号７２に代入する。ここで、元ＡＣＫ番号７２は、本フローチャートのみで参照・更新される一時的な変数である。
【００７５】
ステップＳ２０３において、書き換え部４２は、入力されたＴＣＰパケット２０からフロー識別子７１を抽出する。
【００７６】
ステップＳ２０４において、書き換え部４２は、フローテーブル４１を検索し、ステップＳ２０３で抽出したフロー識別子７１と同一のフロー識別子５１を持つフローエントリ５０（ヒットエントリ）が、フローテーブル４１に存在するか否かを調べる。
【００７７】
ヒットエントリ５０の検索に成功した場合（ステップＳ２０５；Ｙｅｓ）、処理はステップＳ２０６に進む。一方、検索に失敗した場合（ステップＳ２０５；Ｎｏ）、処理はステップＳ２２１に進む。
【００７８】
ステップＳ２０６において、書き換え部４２は、ヒットエントリ５０から、期待ＡＣＫ番号５２、受信フラグ５３、受信ＡＣＫ番号５４、送信ＡＣＫ番号５５、及び重複ＡＣＫ回数５６、をそれぞれ取得する。
【００７９】
ステップＳ２０７において、書き換え部４２は、取得した受信フラグ５３をチェックする。受信フラグ５３が「真」である場合、処理はステップＳ２１０に進む。受信フラグ５３が「偽」である場合、処理はステップＳ２０８に進む。
【００８０】
ステップＳ２１０において、書き換え部４２は、元ＡＣＫ番号７２と、ステップＳ２０６で取得した期待ＡＣＫ番号５２とを比較する。元ＡＣＫ番号７２が期待ＡＣＫ番号５２以上の場合（ステップ２１０；Ｙｅｓ）、処理はステップＳ２０９に進む。一方、元ＡＣＫ番号７２が期待ＡＣＫ番号５２より小さい場合（ステップ２１０；Ｎｏ）、処理はステップＳ２１１に進む。
【００８１】
ステップＳ２０８において、書き換え部４２は、ヒットエントリ５０の受信フラグ５３を「真」に書き換える。
【００８２】
ステップＳ２０９において、書き換え部４２は、ヒットエントリ５０の受信ＡＣＫ番号５４と送信ＡＣＫ番号５５の双方に、元ＡＣＫ番号７２を代入する。また、書き換え部４２は、ヒットエントリ５０の重複ＡＣＫ回数５６を０にリセットする。その後、処理はステップＳ２２１に進む。
【００８３】
ステップＳ２１１において、書き換え部４２は、元ＡＣＫ番号７２と、ステップＳ２０６で取得した受信ＡＣＫ番号５４とを比較する。元ＡＣＫ番号７２が受信ＡＣＫ番号５４より大きい場合、処理はステップＳ２１３に進む。元ＡＣＫ番号７２と受信ＡＣＫ番号５４が等しい場合、処理はステップＳ２１５に進む。元ＡＣＫ番号７２が受信ＡＣＫ番号５４より小さい場合、処理はステップＳ２２１に進む。
【００８４】
ステップＳ２１３において、書き換え部４２は、受信ＡＣＫ番号５４に所定の正数Δ（例えば１）を加算した値と、元ＡＣＫ番号７２との最小値を、新ＡＣＫ番号７３に代入する。ここで、新ＡＣＫ番号７３は、本フローチャートのみで参照・更新される一時的な変数である。
【００８５】
ステップＳ２１４において、書き換え部４２は、ヒットエントリ５０の受信ＡＣＫ番号５４に元ＡＣＫ番号７２を代入する。更に、書き換え部４２は、ヒットエントリ５０の重複ＡＣＫ回数５６を０にリセットする。その後、処理はステップＳ２１９に進む。
【００８６】
ステップＳ２１５において、書き換え部４２は、送信ＡＣＫ番号５５に所定の正数Δ（例えば１）を加算した値と、元ＡＣＫ番号７２との最小値を、新ＡＣＫ番号７３に代入する。
【００８７】
ステップＳ２１６において、書き換え部４２は、ヒットエントリ５０の重複ＡＣＫ回数５６を１だけインクリメントする。
【００８８】
ステップＳ２１７において、書き換え部４２は、ステップＳ２１６の後の重複ＡＣＫ回数５６が、所定の高速再送条件を満たしているか否かを判定する。ここで、高速再送条件は、「重複ＡＣＫ回数５６が５以上」などである。重複ＡＣＫ回数５６が高速再送条件を満たしている場合（ステップＳ２１７；Ｙｅｓ）、処理はステップＳ２１８に進む。一方、重複ＡＣＫ回数５６が高速再送条件を満たしていない場合（ステップＳ２１７；Ｎｏ）、処理はステップＳ２１９に進む。
【００８９】
ステップＳ２１８において、書き換え部４２は、ステップＳ２００で入力されたＴＣＰパケット２０からパケット識別子を抽出する。そして、書き換え部４２は、そのパケット識別子を含む再送指示２１を再送制御部１３に発行する。その後、処理はステップＳ２１９に進む。
【００９０】
ステップＳ２１９において、書き換え部４２は、ヒットエントリ５０の送信ＡＣＫ番号５５に、新ＡＣＫ番号７３を代入する。つまり、書き換え部４２は、ヒットエントリ５０の送信ＡＣＫ番号５５を更新する。
【００９１】
ステップＳ２２０において、書き換え部４２は、ステップＳ２００で入力されたＴＣＰパケット２０のＴＣＰヘッダ中のＡＣＫ番号に、新ＡＣＫ番号７３を代入する。すなわち、書き換え部４２は、ＡＣＫ番号の“書き換え”を実行する。その後、処理はステップＳ２２１に進む。
【００９２】
ステップＳ２２１において、書き換え部４２は、ステップＳ２００で入力されたＴＣＰパケット２０、または、ステップＳ２２０で“書き換え”が実施されたＴＣＰ−ＡＣＫパケット２０を、ＴＣＰ／ＩＰ処理部１１に出力する。ステップＳ２２１は最終ステップである。
【００９３】
２−３．処理例
次に、図９及び図１０を参照して、本実施の形態に係る処理の一例を説明する。
【００９４】
図９において、２台の通信装置１−１及び１−２がネットワーク２を介して互いに接続されている。通信装置１−１がＴＣＰデータを送信し、通信装置１−２がそれを受信する。実線の矢印は、通信装置１−１から通信装置１−２に送られる、ＴＣＰデータを含むＴＣＰパケット２０を表す。各ＴＣＰパケット２０は、１００バイトのＴＣＰデータを含み、また、単一のフローに属するとする。また、破線の矢印は、通信装置１−２から通信装置１−１へ返送される、ＴＣＰ−ＡＣＫパケット２０を表す。実線の矢印に付された一重円の中の数字は、ＴＣＰパケット２０のシーケンス番号を示し、破線の矢印に付された二重円の中の数字は、ＴＣＰ−ＡＣＫパケット２０のＴＣＰのＡＣＫ番号を示す。尚、簡単のため、下位層ＡＣＫパケット３９の送受信は図示されていない。また、本例では遅延ＡＣＫを考慮しない。これらの簡略化によって一般性が失われることはない。
【００９５】
図１０は、図９のシーケンス図中の時刻Ｔ１〜Ｔ１４における、通信装置１−１のフローテーブル４１のフローエントリ５０の内容を示している。
【００９６】
通信装置１−１のＴＣＰ／ＩＰ処理部１１は、６つのＴＣＰパケット２０を通信装置１−２に向けて連続して送出する（時系列順に、時刻Ｔ１、Ｔ２、Ｔ３、Ｔ５、Ｔ６、Ｔ７）。ここで、時刻Ｔ３で送出された、シーケンス番号“３００”のＴＣＰパケット２０が、ネットワーク２内で廃棄されたとする。通信装置１−１の再送制御部１３は、時刻Ｔ４において当該ＴＣＰパケット２０（シーケンス番号“３００”）を送出し、再送タイムアウト経過後の時刻Ｔ８において当該ＴＣＰパケット２０（シーケンス番号“３００”）を再送する。
【００９７】
通信装置１−１のフローテーブル４１に着目する。時刻Ｔ１では、通信装置１−１のレート維持部１２にＴＣＰパケット２０がまだ１つも到着していない。従って、フローテーブル４１の内容は空であり、有効なフローエントリ５０は存在しない。
【００９８】
時刻Ｔ１からＴ２にかけて、通信装置１−１のレート維持部１２の登録部４０に、ＴＣＰシーケンス番号が“１００”である、長さ１００バイトのＴＣＰパケット２０が入力される。ステップＳ１０１において、期待ＡＣＫ番号７０は“２００（＝１００＋１００）”と算出される。ステップＳ１０２において、フロー識別子７１は“フローＡ”となる。この時点ではフローテーブル４１は空であり、“フローＡ”に対応するフローエントリ５０は存在していない（ステップＳ１０４；Ｎｏ）。従って、ステップＳ１０５において、新たなフローエントリ５０がフローテーブル４１に追加される。その結果、フローテーブル４１の内容は、図１０の時刻Ｔ２の行の内容に変化する。
【００９９】
時刻Ｔ２からＴ３にかけて、通信装置１−１のレート維持部１２の登録部４０に、ＴＣＰシーケンス番号が“２００”である、長さ１００バイトのＴＣＰパケット２０が入力される。ステップＳ１０１において、期待ＡＣＫ番号７０は“３００（＝２００＋１００）”と算出される。ステップＳ１０２において、フロー識別子７１は“フローＡ”となる。この時点で、“フローＡ”に対応するフローエントリ５０（ヒットエントリ）がフローテーブル４１に既に存在している（ステップＳ１０４；Ｙｅｓ）。従って、ステップＳ１０６において、当該ヒットエントリ５０の期待ＡＣＫ番号５２が２００から３００に更新される。
【０１００】
時刻Ｔ３〜Ｔ４の間と、時刻Ｔ５〜Ｔ６の間、時刻Ｔ６〜Ｔ７の間、時刻Ｔ７〜Ｔ８の間についても、通信装置１−１のレート維持部１２の登録部４０は、上記と同様に動作する。
【０１０１】
その後、時刻Ｔ９〜Ｔ１３にかけて、廃棄されなかった５つのＴＣＰパケット２０のそれぞれに応答する５つのＴＣＰ−ＡＣＫパケット２０が通信装置１−１に順番に到着する。これら５つのＴＣＰ−ＡＣＫパケット２０のそれぞれのＡＣＫ番号は、到着順に２００、３００、３００、３００、３００である。ＡＣＫ番号“３００”のＴＣＰ−ＡＣＫパケット２０が連続する理由は、通信装置１−２のＴＣＰ／ＩＰ処理部１１が、シーケンス番号“３００”のＴＣＰパケット２０を受理していないからである。
【０１０２】
再度、通信装置１−１のフローテーブル４１に着目する。時刻Ｔ８からＴ９にかけて、通信装置１−１のレート維持部１２の書き換え部４２に、ＡＣＫ番号が“２００”であるＴＣＰ−ＡＣＫパケット２０が入力される。ステップＳ２０２において、元ＡＣＫ番号７２は“２００”になる。ステップＳ２０３において、フロー識別子７１は“フローＡ”となる。この時点で、“フローＡ”に対応するフローエントリ５０（ヒットエントリ）がフローテーブル４１に既に存在している（ステップＳ２０５；Ｙｅｓ）。また、この時点で、ヒットエントリ５０の受信フラグ５３は「偽」である。従って、ステップＳ２０８とステップＳ２０９が実施され、結果として、フローテーブル４１の内容は、図１０の時刻Ｔ９の行の内容に変化する。今回はＡＣＫ番号の書き換えは実施されず、ステップＳ２２１において、ＡＣＫ番号が“２００”であるＴＣＰ−ＡＣＫパケット２０がそのままＴＣＰ／ＩＰ処理部１１に転送される。
【０１０３】
時刻Ｔ９からＴ１０にかけて、通信装置１−１のレート維持部１２の書き換え部４２に、ＡＣＫ番号が“３００”であるＴＣＰ−ＡＣＫパケット２０が入力される。ステップＳ２０２において、元ＡＣＫ番号７２は“３００”になる。ステップＳ２０３において、フロー識別子７１は“フローＡ”となる。この時点で、“フローＡ”に対応するフローエントリ５０（ヒットエントリ）がフローテーブル４１に既に存在している（ステップＳ２０５；Ｙｅｓ）。また、ヒットエントリ５０の受信フラグ５３は「真」であるため、処理はステップＳ２１０に進む。元ＡＣＫ番号７２＝“３００”は期待ＡＣＫ番号５２＝“７００”より小さいため（ステップＳ２１０；Ｎｏ）、処理はステップＳ２１１に進む。ステップＳ２１１において、元ＡＣＫ番号７２＝“３００”は受信ＡＣＫ番号５４＝“２００”より大きい。従って、ステップＳ２１３が実施され、新ＡＣＫ番号７３は“２０１＝（受信ＡＣＫ番号５４＋“１”）”となる。その後、ステップＳ２１４、Ｓ２１９が実行され、結果として、受信ＡＣＫ番号５４は“３００”となり、送信ＡＣＫ番号５５は“２０１”に更新される。つまり、送信ＡＣＫ番号５５は、更新前の送信ＡＣＫ番号５５＝“２００”より大きく、元ＡＣＫ番号７２＝“３００”を超えない値に更新される。ステップＳ２２０において、ＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号は、“３００”から“２０１”に書き換えられる。ステップＳ２２１において、ＡＣＫ番号が“２０１”であるＴＣＰ−ＡＣＫパケット２０がＴＣＰ／ＩＰ処理部１１に転送される。
【０１０４】
時刻Ｔ１０からＴ１１にかけて、通信装置１−１のレート維持部１２の書き換え部４２に、ＡＣＫ番号が“３００”であるＴＣＰ−ＡＣＫパケット２０が入力される。ステップＳ２１１の直前までの処理は前回と同じであるので、説明を省略する。ステップＳ２１１において、元ＡＣＫ番号７２＝“３００”は受信ＡＣＫ番号５４＝“３００”と同じである。従って、ステップＳ２１５が実施され、新ＡＣＫ番号７３は“２０２＝（送信ＡＣＫ番号５５＋“１”）”となる。ステップＳ２１６において、当該ヒットエントリ５０の重複ＡＣＫ回数５６はインクリメントされ、“０”から“１”に変化する。本例において、高速再送条件は「重複ＡＣＫ回数５６が５以上」であるとする。この場合、重複ＡＣＫ回数５６は高速再送条件を満たさない（ステップＳ２１７；Ｎｏ）ため、処理はステップＳ２１９に進む。その結果、送信ＡＣＫ番号５５は“２０２”に更新される。つまり、送信ＡＣＫ番号５５は、更新前の送信ＡＣＫ番号５５＝“２０１”より大きく、元ＡＣＫ番号７２＝“３００”を超えない値に更新される。ステップＳ２２０において、ＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号は、“３００”から“２０２”に書き換えられる。ステップＳ２２１において、ＡＣＫ番号が“２０２”であるＴＣＰ−ＡＣＫパケット２０がＴＣＰ／ＩＰ処理部１１に転送される。
【０１０５】
時刻Ｔ１１からＴ１２の間と、時刻Ｔ１２からＴ１３の間にも、通信装置１−１のレート維持部１２の書き換え部４２に、ＡＣＫ番号が“３００”であるＴＣＰ−ＡＣＫパケット２０が入力される。このときの動作は、前回と同様であるので、説明を省略する。
【０１０６】
時刻Ｔ１３からＴ１４にかけて、通信装置１−１のレート維持部１２の書き換え部４２に、ＡＣＫ番号が“７００”であるＴＣＰ−ＡＣＫパケット２０が入力される。このＴＣＰ−ＡＣＫパケット２０は、時刻Ｔ８で再送制御部１３によって再送されたＴＣＰパケット２０に応答するものである。ステップＳ２０２において、元ＡＣＫ番号７２は“７００”になる。ステップＳ２０３〜Ｓ２０７は、前回と同様である。ステップＳ２１０において、元ＡＣＫ番号７２＝“７００”は期待ＡＣＫ番号５２＝“７００”以上である（ステップＳ２１０；Ｙｅｓ）。従って、ステップＳ２０９が実施され、フローテーブル４１の内容は、図１０の時刻Ｔ１４の行の内容に変化する。今回はＡＣＫ番号の書き換えは実施されず、ステップＳ２２１において、ＡＣＫ番号が“７００”であるＴＣＰ−ＡＣＫパケット２０がそのままＴＣＰ／ＩＰ処理部１１に転送される。
【０１０７】
以上をまとめると、通信装置１−１のＴＣＰ／ＩＰ処理部１１がレート維持部１２を経由して受け取るＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号は、時系列順に、２００、２０１、２０２、２０３、２０４、７００、と変わる。同一のＡＣＫ番号が連続しないため、ＴＣＰ／ＩＰ処理部１１において高速再送が起動することが未然に防止される。
【０１０８】
３．効果
以上に説明されたように、本実施の形態によれば、たとえ重複ＡＣＫパケットが通信装置１に入力されたとしても、その通信装置１のレート維持部１２が、同一のＡＣＫ番号が連続しないように“書き換え”を行い、書き換え後のＴＣＰ−ＡＣＫパケットをＴＣＰ／ＩＰ処理部１１に転送する。従って、ＴＣＰ／ＩＰ処理部１１は、重複ＡＣＫパケットの到着を検知しない。言い換えれば、パケットの消失は、上位層のＴＣＰ／ＩＰ処理部１１から隠蔽される。その結果、ＴＣＰ／ＩＰ処理部１１による不要な高速再送が未然に防止され、輻輳ウィンドウの縮小も発生しない。従って、ネットワークの帯域の圧迫、ＴＣＰスループットの減少、通信効率の低下といった事態が防止される。
【０１０９】
また、レート維持部１２によるＡＣＫ番号の“書き換え”は、ＴＣＰが誤動作しないように行われる。具体的には、書き換え後のＡＣＫ番号（新ＡＣＫ番号７３）は、書き換え前のＡＣＫ番号（元ＡＣＫ番号７２）を超えない。また、ＡＣＫ番号（新ＡＣＫ番号７３）は狭義単調増加する。これらの条件が満たされないとき、レート維持部１２は、安全のため、ＡＣＫ番号の“書き換え”を実施しない。
【０１１０】
更に、レート維持部１２は、元ＡＣＫ番号７２（受信したＴＣＰ−ＡＣＫパケット２０のＡＣＫ番号）が期待ＡＣＫ番号５２以上である場合（ステップＳ２１０；Ｙｅｓ）、ＡＣＫ番号の“書き換え”を実施しない。その理由は次の通りである。もし、元ＡＣＫ番号７２が期待ＡＣＫ番号５２と同じ場合にも“書き換え”が実施されるとすると、書き換え後のＡＣＫ番号（新ＡＣＫ番号７３）が期待ＡＣＫ番号５２より小さくなる可能性がある。そうなると、ＴＣＰ／ＩＰ処理部１１は、期待するＡＣＫ番号のＴＣＰ−ＡＣＫパケット２０を受信できず、ＴＣＰ通信を完了することができなくなる。そこで、レート維持部１２の登録部４０により、期待ＡＣＫ番号７０を予め算出しておき、その期待ＡＣＫ番号７０をフローテーブル４１に記録するようにしている。
【０１１１】
４．ハードウェア構成
本実施の形態に係る通信装置１は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報処理装置に適用可能である。図１１は、通信装置１が情報処理装置に適用された場合の構成を示している。図１１に示されるように、通信装置１（情報処理装置）は、データ処理装置２００と記憶装置２０１を備えている。
【０１１２】
記憶装置２０１として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）が例示される。記憶装置２０１には、再送バッファ３１、フローテーブル４１、ワークメモリ２０２、２０３、２０４、などが格納される。
【０１１３】
データ処理装置２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含む。データ処理装置２００は、アプリケーション処理部２１０、ＴＣＰ／ＩＰ処理部２１１、レート維持部２１２、再送制御部２１３、及び下位レイヤ処理部２１４を備えている。アプリケーション処理部２１０、ＴＣＰ／ＩＰ処理部２１１、及び下位レイヤ処理部２１４は、それぞれ、前述のアプリケーション処理部１０、ＴＣＰ／ＩＰ処理部１１、及び下位レイヤ処理部１４と同様である。但し、アプリケーション処理部２１０、ＴＣＰ／ＩＰ処理部２１１、及び下位レイヤ処理部２１４は、動作に必要な記憶領域として記憶装置２０１内のワークメモリ２０２、２０３、２０４を使用する。レート維持部２１２は、記憶装置２０１内のフローテーブル４１を使用する点を除けば、前述のレート維持部１２と同様である。再送制御部２１３は、記憶装置２０１内の再送バッファ３１を使用する点を除けば、前述の再送制御部１３と同様である。
【０１１４】
尚、データ処理装置２００が備えるこれら機能ブロックは、データ処理装置２００がパケット再送制御プログラムを実行することによって実現される。パケット再送制御プログラムは、データ処理装置２００によって実行されるコンピュータプログラムであり、記憶装置２０１に格納される。パケット再送制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
【０１１５】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１１６】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１１７】
（付記１）
ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理部と、
ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御部と、
前記再送制御部より受け取るＴＣＰパケットを前記ＴＣＰ／ＩＰ処理部に転送するレート維持部と
を備え、
前記再送制御部は、前記ＴＣＰ／ＩＰ処理部から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、前記受け取ったＴＣＰ−ＡＣＫパケットを前記レート維持部に転送し、
前記レート維持部は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ／ＩＰ処理部に転送されないように、前記再送制御部から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ／ＩＰ処理部に転送する
通信装置。
【０１１８】
（付記２）
付記１に記載の通信装置であって、
前記レート維持部は、前記ＴＣＰ／ＩＰ処理部に転送されるＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号が単調増加するように前記書き換えを行う
通信装置。
【０１１９】
（付記３）
付記２に記載の通信装置であって、
前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、
前記フローエントリは、前記ＴＣＰ／ＩＰ処理部に転送済みの最新のＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号である送信ＡＣＫ番号を含み、
新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記送信ＡＣＫ番号を参照し、前記新たなＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号が前記送信ＡＣＫ番号よりも大きくなるように前記書き換えを行い、更に、前記送信ＡＣＫ番号を更新する
通信装置。
【０１２０】
（付記４）
付記３に記載の通信装置であって、
前記レート維持部は、前記新たなＴＣＰ−ＡＣＫパケットに関して、前記書き換え後の前記ＡＣＫ番号が前記書き換え前の前記ＡＣＫ番号を超えないように前記書き換えを行う
通信装置。
【０１２１】
（付記５）
付記４に記載の通信装置であって、
前記フローエントリは、更に、後に受信することが期待されるＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号である期待ＡＣＫ番号を含み、
前記レート維持部は、前記ＴＣＰ／ＩＰ処理部から送信された前記ＴＣＰパケットに基づいて、前記フローテーブル中の該当フローエントリの前記期待ＡＣＫ番号を更新し、
前記新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記期待ＡＣＫ番号を参照し、
前記新たなＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号が前記期待ＡＣＫ番号以上の場合、前記レート維持部は前記書き換えを行わない
通信装置。
【０１２２】
（付記６）
付記１乃至５のいずれか一項に記載の通信装置であって、
前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、
前記フローエントリは、
前記再送制御部から前回受け取ったＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号である受信ＡＣＫ番号と、
重複ＡＣＫ回数と
を含み、
新たなＴＣＰ−ＡＣＫパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記受信ＡＣＫ番号を参照し、
前記新たなＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号が前記受信ＡＣＫ番号よりも大きい場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ＡＣＫ回数を初期化し、
前記新たなＴＣＰ−ＡＣＫパケットの前記ＡＣＫ番号が前記受信ＡＣＫ番号と同じである場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ＡＣＫ回数をインクリメントし、
前記重複ＡＣＫ回数が所定の条件を満たした場合、前記レート維持部は、前記ＡＣＫ番号に対応する前記送信パケットの再送を前記再送制御部に対して指示する
通信装置。
【０１２３】
（付記７）
通信装置におけるパケット再送制御方法であって、
ＴＣＰ層から送信されたＴＣＰパケットに関して、前記ＴＣＰ層よりも下位の下位層でパケット再送制御を行うステップと、
前記ＴＣＰパケットの送信先から、前記ＴＣＰパケットに応答するＴＣＰ−ＡＣＫパケットを受け取るステップと、
前記受け取ったＴＣＰ−ＡＣＫパケットを前記下位層から前記ＴＣＰ層に転送するステップと
を含み、
前記転送するステップは、
同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ層に転送されないように、前記受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行うステップと、
前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ層に転送するステップと
を含む
パケット再送制御方法。
【０１２４】
（付記８）
コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムであって、
前記パケット再送制御機能は、
ＴＣＰ／ＩＰ処理を行うＴＣＰ／ＩＰ処理機能と、
ＴＣＰ層よりも下位の層でパケット再送制御を行う再送制御機能と、
前記再送制御機能より受け取るＴＣＰパケットを前記ＴＣＰ／ＩＰ処理機能に転送するレート維持機能と
を備え、
前記再送制御機能は、前記ＴＣＰ／ＩＰ処理機能から送信されたＴＣＰパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するＴＣＰ−ＡＣＫパケットを受け取り、前記受け取ったＴＣＰ−ＡＣＫパケットを前記レート維持機能に転送し、
前記レート維持機能は、同一のＡＣＫ番号を有するＴＣＰ−ＡＣＫパケットが連続して前記ＴＣＰ／ＩＰ処理機能に転送されないように、前記再送制御機能から受け取ったＴＣＰ−ＡＣＫパケットのＡＣＫ番号の書き換えを行い、前記書き換え後の前記ＴＣＰ−ＡＣＫパケットを前記ＴＣＰ／ＩＰ処理機能に転送する
パケット再送制御プログラム。
【０１２５】
本出願は、２０１１年１月１２日に出願された日本国特許出願２０１１−００３８９４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１２６】
１    通信装置
２    ネットワーク
１０    アプリケーション処理部
１１    ＴＣＰ／ＩＰ処理部
１２    レート維持部
１３    再送制御部
１４    下位レイヤ処理部
２０    ＴＣＰパケット
２１    再送指示
２２    送信パケット
２３    受信パケット
３０    送信部
３１    再送バッファ
３２    受信部
３３    多重部
３９    下位層ＡＣＫパケット
４０    登録部
４１    フローテーブル
４２    書き換え部
５０    フローエントリ
５１    フロー識別子
５２    期待ＡＣＫ番号
５３    受信フラグ
５４    受信ＡＣＫ番号
５５    送信ＡＣＫ番号
５６    重複ＡＣＫ回数
６１    キューエントリ
６２    ＴＣＰパケット
６３    タイムスタンプ
７０    期待ＡＣＫ番号
７１    フロー識別子
７２    元ＡＣＫ番号
７３    新ＡＣＫ番号
２００    データ処理装置
２０１    記憶装置
２０２    ワークメモリ
２０３    ワークメモリ
２０４    ワークメモリ
２１０    アプリケーション処理部
２１１    ＴＣＰ／ＩＰ処理部
２１２    レート維持部
２１３    再送制御部
２１４    下位レイヤ処理部
【図１】
0005854044.tif 000002
【図２】
0005854044.tif 000003
【図３】
0005854044.tif 000004
【図４】
0005854044.tif 000005
【図５】
0005854044.tif 000006
【図６】
0005854044.tif 000007
【図７】
0005854044.tif 000008
【図８Ａ】
0005854044.tif 000009
【図８Ｂ】
0005854044.tif 000010
【図９】
0005854044.tif 000011
【図１０】
0005854044.tif 000012
【図１１】
0005854044.tif 000013