TCP/IP処理を行うTCP/IP処理部と、TCP層よりも下位の層でパケット再送制御を行う再送制御部と、前記再送制御部より受け取るTCPパケットを前記TCP/IP処理部に転送するレート維持部とを備え、前記再送制御部は、前記TCP/IP処理部から送信されたTCPパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するTCP-ACKパケットを受け取り、前記受け取ったTCP-ACKパケットを前記レート維持部に転送し、前記レート維持部は、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP/IP処理部に転送されないように、前記再送制御部から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、前記書き換え後の前記TCP-ACKパケットを前記TCP/IP処理部に転送する通信装置。請求項1に記載の通信装置であって、前記レート維持部は、前記TCP/IP処理部に転送されるTCP-ACKパケットの前記ACK番号が単調増加するように前記書き換えを行う通信装置。請求項2に記載の通信装置であって、前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、前記フローエントリは、前記TCP/IP処理部に転送済みの最新のTCP-ACKパケットの前記ACK番号である送信ACK番号を含み、新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記送信ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記送信ACK番号よりも大きくなるように前記書き換えを行い、更に、前記送信ACK番号を更新する通信装置。請求項3に記載の通信装置であって、前記レート維持部は、前記新たなTCP-ACKパケットに関して、前記書き換え後の前記ACK番号が前記書き換え前の前記ACK番号を超えないように前記書き換えを行う通信装置。請求項4に記載の通信装置であって、前記フローエントリは、更に、後に受信することが期待されるTCP-ACKパケットの前記ACK番号である期待ACK番号を含み、前記レート維持部は、前記TCP/IP処理部から送信された前記TCPパケットに基づいて、前記フローテーブル中の該当フローエントリの前記期待ACK番号を更新し、前記新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記期待ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記期待ACK番号以上の場合、前記レート維持部は前記書き換えを行わない通信装置。請求項1乃至5のいずれか一項に記載の通信装置であって、前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、前記フローエントリは、前記再送制御部から前回受け取ったTCP-ACKパケットの前記ACK番号である受信ACK番号と、重複ACK回数とを含み、新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記受信ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記受信ACK番号よりも大きい場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ACK回数を初期化し、前記新たなTCP-ACKパケットの前記ACK番号が前記受信ACK番号と同じである場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ACK回数をインクリメントし、前記重複ACK回数が所定の条件を満たした場合、前記レート維持部は、前記ACK番号に対応する前記送信パケットの再送を前記再送制御部に対して指示する通信装置。通信装置におけるパケット再送制御方法であって、TCP層から送信されたTCPパケットに関して、前記TCP層よりも下位の下位層でパケット再送制御を行うステップと、前記TCPパケットの送信先から、前記TCPパケットに応答するTCP-ACKパケットを受け取るステップと、前記受け取ったTCP-ACKパケットを前記下位層から前記TCP層に転送するステップとを含み、前記転送するステップは、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP層に転送されないように、前記受け取ったTCP-ACKパケットのACK番号の書き換えを行うステップと、前記書き換え後の前記TCP-ACKパケットを前記TCP層に転送するステップとを含むパケット再送制御方法。コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムであって、前記パケット再送制御機能は、TCP/IP処理を行うTCP/IP処理機能と、TCP層よりも下位の層でパケット再送制御を行う再送制御機能と、前記再送制御機能より受け取るTCPパケットを前記TCP/IP処理機能に転送するレート維持機能とを備え、前記再送制御機能は、前記TCP/IP処理機能から送信されたTCPパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するTCP-ACKパケットを受け取り、前記受け取ったTCP-ACKパケットを前記レート維持機能に転送し、前記レート維持機能は、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP/IP処理機能に転送されないように、前記再送制御機能から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、前記書き換え後の前記TCP-ACKパケットを前記TCP/IP処理機能に転送するパケット再送制御プログラム。本願発明者は、上記関連技術のようにTCP層より下位の層においてもパケット再送制御が実施される場合に関して、次のような問題点を認識した。それは、あるパケットがネットワーク上で消失した場合に、当該同一パケットに対して、下位層とTCP層の両方によるパケット再送が発生してしまう可能性があることである。図1を参照して、このような状況を説明する。図1において、2台の通信装置がネットワークを介して互いに接続されている。各通信装置において、TCP/IP処理部がTCP/IP処理を行い、再送制御部がTCP層よりも下位の層でのパケット再送制御を実施する。実線の矢印は、第1の通信装置から第2の通信装置に送られる、TCPデータを含むTCPパケットを表す。各TCPパケットは、100バイトのTCPデータを含み、また、単一のフローに属するとする。また、破線の矢印は、第2の通信装置から第1の通信装置へ返送される、TCPによるACKパケット以下、TCP-ACKパケットと参照されるを表す。実線の矢印に付された一重円の中の数字は、TCPパケットのシーケンス番号を示し、破線の矢印に付された二重円の中の数字は、TCP-ACKパケットのTCPのACK番号を示す。尚、簡単のため、下位層によるACKパケットの送受信は図示されていない。また、TCPの一般的な実装では、複数のACKパケットを1つに集約する遅延ACKDelayedACK機能が有効になっているが、本例では遅延ACKを考慮しない。これらの簡略化によって一般性が失われることはない。図1に示される例において、第1の通信装置のTCP/IP処理部は、6つのTCPパケットを第2の通信装置に向けて連続して送出する時系列順に、時刻T1、T2、T3、T5、T6、T7。ここで、時刻T3に送出された、シーケンス番号300のTCPパケットが、ネットワーク内で廃棄された場合を考える。第1の通信装置の再送制御部は、時刻T4において当該TCPパケットシーケンス番号300を送出し、再送タイムアウト経過後の時刻T8において当該TCPパケットシーケンス番号300を再送する。その後、時刻T9~T13にかけて、廃棄されなかった5つのTCPパケットのそれぞれに応答する5つのTCP-ACKパケットが第1の通信装置に順番に到着する。これら5つのTCP-ACKパケットのそれぞれのACK番号は、到着順に200、300、300、300、300である。ACK番号300のTCP-ACKパケットが連続する理由は、第2の通信装置のTCP/IP処理部が、シーケンス番号300のTCPパケットを受理していないからである。尚、同じACK番号を持つ2回目以降のTCP-ACKパケットは、重複ACKパケットと呼ばれる。ここで、第1の通信装置のTCP/IP処理部は、重複ACKパケットを3回連続で受信すると高速再送FastRetransmitを起動するとする。この場合、第1の通信装置のTCP/IP処理部は、ACK番号300の4回目のTCP-ACKパケットを受信した時点時刻T13で、シーケンス番号300のTCPパケットを再送する。時刻T8で再送制御部によって再送されたTCPパケットシーケンス番号300に応答するTCP-ACKパケットは、時刻T14においてようやく第1の通信装置に到着する。しかしながら、この時点では、TCP/IP処理部によるTCPパケットシーケンス番号300の再送が既に行われてしまっている。すなわち、再送制御部による再送が結果的に間に合っていない。このように、シーケンス番号300のTCPパケットに関して、下位層での再送制御部による再送に加えてTCPによる高速再送も実施されてしまう。下位層にて再送が行われる以上、TCPによる再送は不要な処理である。また、TCP/IP処理部は、高速再送に伴って輻輳ウィンドウを縮小させる。すなわち、TCPによる高速再送がいたずらに引き起こされることは、ネットワークの帯域を圧迫するだけでなく、TCPのスループットを減少させ、通信効率を大幅に低下させる。以下、図1で示された例において、TCPによる不要な高速再送の発生を回避するための条件について考察する。まず、再送制御部の再送タイムアウトは、次の条件を満たす必要がある:TCP/IP処理部がシーケンス番号600のTCPパケットを送信する時刻T7より前に、再送制御部による再送が開始されること。この条件をより一般化すれば、次の通りである:廃棄されるTCPパケットシーケンス番号300の3つあとのTCPパケットシーケンス番号600が送信される前に、再送制御部による再送が開始されること。ここで、3つあとの根拠は、図1の例においてTCP/IP処理部が重複ACKパケットを3回連続で受信すると高速再送を起動することである。この条件は、次の関係式1で表される。関係式1:{再送制御部の再送タイムアウト}<{3つのTCPパケットの送信に要する時間}また、再送タイムアウトをネットワークのRTTよりも短く設定することはできない。従って、次の関係式2も満たされる必要がある。関係式2:{再送制御部の再送タイムアウト}≧{ネットワークのRTT}関係式1と関係式2から、次の関係式3が得られる。関係式3:{ネットワークのRTT}<{3つのTCPパケットの送信に要する時間}TCPによる不要な高速再送の発生を回避するためには、上記関係式3が満たされる必要がある。しかしながら、実際のネットワークにおいて関係式3を成立させることは極めて困難である。例えば、ネットワークがイーサネットである場合、最小のフレーム長は64バイトであり、最小のフレーム間ギャップInter-FrameGapは20バイトである。この場合、関係式3の右辺は、3×6420×8/{ネットワークの回線速度[ビット/秒]}、となる。例えば、ネットワークの回線速度が10ギガビット/秒の場合、関係式3は次の関係式4となる。関係式4:{ネットワークのRTT}<0.2016マイクロ秒一般的なデータセンタのネットワークのRTTは数十~数百マイクロ秒と言われており、上記の0.2016マイクロ秒とは甚だしく乖離している。従って、実際のネットワークにおいて関係式3、4を成立させることは容易ではない。また、今後、回線速度の主流が40ギガビット/秒や100ギガビット/秒に移行するに従って、条件は更に厳しくなる。以上に説明されたように、関連技術によれば、下位層でパケット再送制御を行う場合に、通信効率の低下が発生する恐れがある。本発明の1つの目的は、下位層でパケット再送制御を行う場合の通信効率の低下を未然に防止することができる技術を提供することにある。本発明の1つの観点において通信装置が提供される。その通信装置は、TCP/IP処理を行うTCP/IP処理部と、TCP層よりも下位の層でパケット再送制御を行う再送制御部と、再送制御部より受け取るTCPパケットをTCP/IP処理部に転送するレート維持部と、を備える。再送制御部は、TCP/IP処理部から送信されたTCPパケットを送信パケットとして送信先に送信し、送信先から送信パケットに応答するTCP-ACKパケットを受け取り、受け取ったTCP-ACKパケットをレート維持部に転送する。レート維持部は、同一のACK番号を有するTCP-ACKパケットが連続してTCP/IP処理部に転送されないように、再送制御部から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、書き換え後のTCP-ACKパケットをTCP/IP処理部に転送する。本発明の他の観点において、通信装置におけるパケット再送制御方法が提供される。そのパケット再送制御方法は、ATCP層から送信されたTCPパケットに関して、TCP層よりも下位の下位層でパケット再送制御を行うステップと、BTCPパケットの送信先から、TCPパケットに応答するTCP-ACKパケットを受け取るステップと、C受け取ったTCP-ACKパケットを下位層からTCP層に転送するステップと、を含む。上記C転送するステップは、C1同一のACK番号を有するTCP-ACKパケットが連続してTCP層に転送されないように、受け取ったTCP-ACKパケットのACK番号の書き換えを行うステップと、C2書き換え後のTCP-ACKパケットをTCP層に転送するステップと、を含む。本発明の更に他の観点において、コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムが提供される。そのパケット再送制御機能は、TCP/IP処理を行うTCP/IP処理機能と、TCP層よりも下位の層でパケット再送制御を行う再送制御機能と、再送制御機能より受け取るTCPパケットをTCP/IP処理機能に転送するレート維持機能と、を備える。再送制御機能は、TCP/IP処理機能から送信されたTCPパケットを送信パケットとして送信先に送信し、送信先から送信パケットに応答するTCP-ACKパケットを受け取り、受け取ったTCP-ACKパケットをレート維持機能に転送する。レート維持機能は、同一のACK番号を有するTCP-ACKパケットが連続してTCP/IP処理機能に転送されないように、再送制御機能から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、書き換え後のTCP-ACKパケットをTCP/IP処理機能に転送する。本発明によれば、下位層でパケット再送制御を行う場合の通信効率の低下を未然に防止することが可能となる。添付図面を参照して、本発明の実施の形態を説明する。1.構成1-1.全体構成図2は、本発明の実施の形態に係る通信装置1の構成を示すブロック図である。本実施の形態に係る通信装置1は、アプリケーション処理部10、TCP/IP処理部11、レート維持部12、再送制御部13、及び下位レイヤ処理部14を備えている。アプリケーション処理部10は、Webサーバやメールサーバなどの通信アプリケーションを動作させる。TCP/IP処理部11は、TCP層及びIPInternetProtocol層の処理を行う。このTCP/IP処理部11は、TCPによる一般的なパケット再送制御機能を有している。TCP/IP処理部11とアプリケーション処理部10の間は、一般的にはソケットを介して接続される。下位レイヤ処理部14は、物理層とリンク層の処理を行う。物理層とリンク層のプロトコルは、イーサネット登録商標などである。下位レイヤ処理部14は、再送制御部13から入力された送信パケット22を、所定の手順に従ってネットワーク2に送信する。また、下位レイヤ処理部14は、ネットワーク2から受信した受信パケット23を再送制御部13に出力する。再送制御部13は、TCP/IP処理部11と下位レイヤ処理部14との間に設けられている。この再送制御部13は、TCP層TCP/IP処理部11よりも下位の層でパケット再送制御を行う機能を有している。具体的には、再送制御部13は、TCP/IP処理部11から送信されたTCPパケット20を受け取る。再送制御部13は、受け取ったTCPパケット20に再送制御処理を施し、それを送信パケット22として下位レイヤ処理部14に送信する。また、再送制御部13は、下位レイヤ処理部14から受信パケット23を受け取る。その受信パケット23が下位層のACKパケットである場合、再送制御部13は、その下位層のACKパケットを終端する。また、その受信パケット23がTCPパケット20を含んでいる場合、再送制御部13は、当該TCPパケット20をレート維持部12に転送するとともに、下位層のACKパケットを生成してそれを送信元に返信する。尚、下位レイヤ処理部14から受け取るTCPパケット20は、送信先に送信された送信パケット22に応答するTCP-ACKパケットTCPによるACKパケットであり、ACK番号を有するTCPパケットである場合もある。更に、再送制御部13は、レート維持部12から再送指示21を受け取ると、その再送指示21に従って該当TCPパケット20の再送を行う。再送制御部13については、後に詳細に説明する。レート維持部12は、TCP/IP処理部11と再送制御部13との間に設けられている。レート維持部12は、TCP/IP処理部11から送信されたTCPパケット20を受け取り、受け取ったTCPパケット20に関する情報を適宜記憶する。また、レート維持部12は、再送制御部13からTCPパケット20を受け取る。再送制御部13から受け取るTCPパケット20には、送信先に送信された送信パケット22に応答するTCP-ACKパケットも含まれる。レート維持部12は、再送制御部13から受け取ったTCPパケット20をTCP/IP処理部11に転送する。但し、この時、レート維持部12は、TCP/IP処理部11において高速再送が起動しないように、TCP-ACKパケットのACK番号を必要に応じて書き換える。具体的には、レート維持部12は、同一のACK番号を有するTCP-ACKパケットが連続してTCP/IP処理部11に転送されないように、すなわち、TCP/IP処理部11において重複ACKパケットが発生しないように、TCP-ACKパケットのACK番号を書き換える。そして、レート維持部12は、書き換え後のTCP-ACKパケットをTCP/IP処理部11に転送する。更に、レート維持部12は、必要に応じて、再送指示21を再送制御部13に向けて発行する。レート維持部12については、後に詳細に説明する。ネットワーク2は、予め定められた転送経路に沿って、あるいはTCPパケット20に含まれる宛先情報に従って、TCPパケット20を適切な宛先に転送する。ネットワーク2では、ルータやスイッチに例示される複数の伝送装置が伝送線路によって相互に接続されている。ネットワーク2では、電磁ノイズやトラヒックの輻輳などの要因により、転送中のTCPパケット20の消失が発生する可能性がある。1-2.再送制御部13図3は、通信装置1の再送制御部13の構成例を示している。再送制御部13は、送信部30、再送バッファ31、受信部32、及び多重部33を備えている。再送バッファ31は、送信済みのTCPパケット20を一時的に保持しておくために用いられる。その保持期間は、TCPパケット20の送信時から、当該TCPパケット20に応答する下位層のACKパケットを受け取るまでである。図4は、再送バッファ31の構成例を示している。再送バッファ31は、0個以上のキューエントリ61を有するFIFOFirst-InFirst-Out型のキューである。各キューエントリ61は、TCP/IP処理部11から再送制御部13に入力されたTCPパケット20のひとつひとつに対応しており、対応するTCPパケット20に関する情報を含んでいる。具体的には、各キューエントリ61は、TCPパケット62とタイムスタンプ63を含んでいる。TCPパケット62は、再送バッファ31に書き込まれたTCPパケット20である。タイムスタンプ63は、当該TCPパケット20が再送バッファ31に書き込まれた時刻であり、再送タイムアウトの判定に用いられる。再度図3を参照して、送信部30は、TCP/IP処理部11から送信されたTCPパケット20を受け取る。送信部30は、そのTCPパケット20を再送バッファ31に書き込むととともに、多重部33に出力する。また、送信部30は、再送タイムアウトが経過したキューエントリ61のTCPパケット62を再送バッファ31から読み出し、それを多重部33に出力する。更に、送信部30は、レート維持部12から、パケット識別子を含む再送指示21を受け取る場合がある。パケット識別子は、例えば、パケットヘッダに含まれる、MAC層の宛先/送信元アドレスVLANタグや、IP層の送信元/宛先アドレス、TCP層の送信元/宛先ポート番号ACK番号、などの一部または全てである。送信部30は、受け取った再送指示21からパケット識別子を抽出し、そのパケット識別子に該当するTCPパケット62を再送バッファ31の中から検索し、見つかったTCPパケット62を再送バッファ31から読み出し、それを多重部33に出力する。受信部32は、下位レイヤ処理部14から受信パケット23を受け取る。その受信パケット23がTCPパケット20である場合、受信部32は、そのTCPパケット20をレート維持部12に転送する。更に、受信部32は、そのTCPパケット20の送信元を宛先とする下位層ACKパケット39を生成し、その下位層ACKパケット39を多重部33に出力する。この際、受信部32は、当該TCPパケット20からパケット識別子を抽出し、抽出したパケット識別子を下位層ACKパケット39に付与する。一方、受信パケット23が下位層ACKパケット39である場合、受信部32は、その下位層ACKパケット39を終端する。更に、受信部32は、その下位層ACKパケット39からパケット識別子を抽出し、そのパケット識別子に該当するTCPパケット62を持つキューエントリ61を再送バッファ31の中から検索し、見つかったキューエントリ61を削除する。多重部33は、送信部30から受け取ったTCPパケット20、及び、受信部32から受け取った下位層ACKパケット39をパケット単位に多重し、それらを下位レイヤ処理部14に送信パケット22として出力する。1-3.レート維持部12図5は、通信装置1のレート維持部12の構成例を示している。レート維持部12は、登録部40、フローテーブル41、及び書き換え部42を備えている。フローテーブル41は、レート維持部12がTCP-ACKパケットのACK番号を適切に書き換えるために利用する情報を保持する。図6は、フローテーブル41の構成例を示している。フローテーブル41は、通信装置1が通信中のフロー毎にフローエントリ50を有している。各フローエントリ50は、フロー識別子51、期待ACK番号52、受信フラグ53、受信ACK番号54、送信ACK番号55、及び重複ACK回数56を含んでいる。フロー識別子51は、当該フローエントリ50に対応付けられたフローの識別子である。フロー識別子は、例えば、パケットヘッダに含まれる、MAC層の宛先/送信元アドレスVLANタグや、IP層の送信元/宛先アドレス、TCP層の送信元/宛先ポート番号、などの一部または全てである。期待ACK番号52は、TCP/IP処理部11が受信することを期待するTCP-ACKパケットの最後のACK番号である。受信フラグ53は、レート維持部12が再送制御部13からTCP-ACKパケットを受け取ったか否かを示すフラグである。当該フローに関して、TCP-ACKパケットを一度でも受け取っていれば受信フラグ53は真になり、一度も受け取っていなければ受信フラグ53は偽になる。受信ACK番号54は、レート維持部12が再送制御部13から前回受け取ったTCP-ACKパケットのACK番号である。当該フローに関してTCP-ACKパケットを一度も受け取っていなければ、受信ACK番号54は不定になる。送信ACK番号55は、レート維持部12からTCP/IP処理部11に転送済みの最新のTCP-ACKパケットのACK番号である。当該フローに関してTCP-ACKパケットを一度も転送していなければ、送信ACK番号55は不定になる。重複ACK回数56は、レート維持部12が再送制御部13から連続して受け取った重複ACKパケットの個数を示す。つまり、重複ACK回数56は、再送制御部13から受け取るTCP-ACKパケットのACK番号が連続して同一値を取った場合に、その連続回数を示す。重複ACKパケットの受信が途切れた場合、重複ACK回数56はリセットされる。例えば、レート維持部12が再送制御部13から受け取った、過去3つのTCP-ACKパケット20のACK番号が時系列順に100、200、200であった場合、重複ACK回数56は1になる。また、例えば、過去3つのTCP-ACKパケット20のACK番号が時系列順に300、300、400であった場合、重複ACK回数56は0になる。再度図5を参照して、登録部40は、TCP/IP処理部11から送信されたTCPパケット20を受け取る。登録部40は、受け取ったTCPパケット20からフロー識別子71を抽出する。また、登録部40は、受け取ったTCPパケット20のTCPシーケンス番号とTCPデータ長を加算することにより、期待ACK番号70を算出する。更に、登録部40は、フローテーブル41を検索し、上記抽出されたフロー識別子71と同一のフロー識別子51を有するフローエントリ50ヒットエントリが存在するか否かを調べる。フローテーブル41にヒットエントリ50が存在しない場合、登録部40は、フロー識別子71に対応する新たなフローエントリ50をフローテーブル41に作成する。新たなフローエントリ50において、フロー識別子51及び期待ACK番号52は、それぞれ、フロー識別子71及び期待ACK番号70に設定される。受信フラグ53は偽に設定される。受信ACK番号54、送信ACK番号55及び重複ACK回数56は、不定のままである。一方、フローテーブル41にヒットエントリ50が存在する場合、登録部40は、当該ヒットエントリ50に含まれる期待ACK番号52と期待ACK番号70とを比較する。期待ACK番号70が期待ACK番号52よりも大きい場合、登録部40は、当該ヒットエントリ50の期待ACK番号52を期待ACK番号70で更新する。尚、登録部40の動作については、後に詳細に説明する。書き換え部42は、再送制御部13からTCPパケット20を受け取る。受け取ったTCPパケット20がTCP-ACKパケットではない場合、書き換え部42は、そのTCPパケット20をTCP/IP処理部11に転送する。一方、受け取ったTCPパケット20がTCP-ACKパケットである場合、書き換え部42は、そのTCP-ACKパケット20からフロー識別子71を抽出する。そして、書き換え部42は、フローテーブル41を検索し、上記抽出されたフロー識別子71と同一のフロー識別子51を有するフローエントリ50ヒットエントリを抽出する。書き換え部42は、当該ヒットエントリ50の内容に基づいて、受け取ったTCP-ACKパケット20のACK番号の書き換えを実行するか否かを決定する。書き換えを行う場合、書き換え部42は、所定の計算式に従ってACK番号を書き換え、書き換え後のTCP-ACKパケット20をTCP/IP処理部11に転送する。一方、書き換えを行わない場合、書き換え部42は、受け取ったTCP-ACKパケット20をそのままTCP/IP処理部11に転送する。ACK番号の書き換えについて更に説明する。本実施の形態によれば、書き換え部42は、TCP/IP処理部11において高速再送が起動しないように、ACK番号の書き換えを行う。そのために、書き換え部42は、同一のACK番号を有するTCP-ACKパケット20が連続してTCP/IP処理部11に転送されないように、すなわち、TCP/IP処理部11において重複ACKパケットが発生しないように、TCP-ACKパケット20のACK番号を書き換える。例えば、書き換え部42は、TCP/IP処理部11に転送されるTCP-ACKパケット20のACK番号が単調増加するように、書き換えを行う。より詳細には、書き換え部42は、ヒットエントリ50の送信ACK番号を参照し、最新のTCP-ACKパケット20のACK番号が当該送信ACK番号よりも大きくなるように、書き換えを行う。但し、書き換え部42は、書き換え後のACK番号が書き換え前のACK番号を超えないように、書き換えを行う。また、書き換え部42は、ヒットエントリ50の受信ACK番号を参照し、受け取ったTCP-ACKパケット20のACK番号と当該受信ACK番号54とを比較する。そのACK番号が受信ACK番号54前回のACK番号と一致している場合、当該TCP-ACKパケット20は重複ACKパケットである。この場合、書き換え部42は、ヒットエントリ50の重複ACK回数56を1だけインクリメントする。一方、ACK番号が受信ACK番号54より大きい場合、書き換え部42は、ヒットエントリ50の重複ACK回数56を0にリセット初期化する。更に、書き換え部42は、重複ACK回数56を参照し、重複ACK回数56が所定の高速再送条件を満たしているか否かを判定する。重複ACK回数56が所定の高速再送条件を満たしている場合、書き換え部42は、受け取ったTCP-ACKパケット20からパケット識別子を抽出する。そして、書き換え部42は、抽出したパケット識別子を含む再送指示21を、再送制御部13に向けて発行する。すなわち、書き換え部42は、TCP/IP処理部11の代わりに再送制御部13に、高速再送処理を実行させる。また、TCP-ACKパケット20をTCP/IP処理部11に転送する場合、書き換え部42は、ヒットエントリ50の受信ACK番号54及び送信ACK番号55を適宜更新する。尚、書き換え部42の動作については、後に詳細に説明する。2.処理フロー2-1.登録部40の処理図7は、レート維持部12の登録部40の処理を示すフローチャートである。ステップS100において、登録部40は、TCP/IP処理部11からのTCPパケット20の入力を待つ。ステップS101において、登録部40は、入力されたTCPパケット20のヘッダ情報に基づいて、期待ACK番号70を算出する。期待ACK番号70は、TCPパケット20のTCPシーケンス番号とTCPデータ長の和である。ステップS102において、登録部40は、入力されたTCPパケット20からフロー識別子71を抽出する。ステップS103において、登録部40は、フローテーブル41を検索し、抽出したフロー識別子71と同一のフロー識別子51を持つフローエントリ50ヒットエントリが、フローテーブル41に存在するか否かを調べる。ヒットエントリ50の検索に成功した場合ステップS104;Yes、処理はステップS106に進む。一方、検索に失敗した場合ステップS104;No、処理はステップS105に進む。ステップS105において、登録部40は、ステップS102で抽出したフロー識別子71に対応する新たなフローエントリ50を、フローテーブル41に作成する。ここで、登録部40は、新たなフローエントリ50の各フィールドを次のように初期化する。すなわち、登録部40は、フロー識別子51をステップS102で抽出したフロー識別子71に、期待ACK番号52をステップS101で算出した期待ACK番号70に、受信フラグ53を偽に、それぞれ初期化する。尚、受信ACK番号54、送信ACK番号55、重複ACK回数56を初期化する必要はない。ステップS105は最終ステップの1つである。ステップS106において、登録部40は、ステップS103で検索されたヒットエントリ50の期待ACK番号52と、ステップS101で算出した期待ACK番号70とを比較する。期待ACK番号70が期待ACK番号52より大きければ、登録部40は、当該ヒットエントリ50の期待ACK番号52を期待ACK番号70で更新する。ステップS106は最終ステップの1つである。2-2.書き換え部42の処理図8A及び図8Bは、レート維持部12の書き換え部42の処理を示すフローチャートである。ステップS200において、書き換え部42は、再送制御部13からのTCPパケット20の入力を待つ。ステップS201において、書き換え部42は、入力されたTCPパケット20のTCPヘッダ中のACKフラグをチェックする。ACKフラグがセットされている場合、書き換え部42は、有効なACK番号がTCPパケット20に含まれていると判断し、処理はステップS202に進む。一方、ACKフラグがセットされていない場合、処理はステップS221に進む。ステップS202において、書き換え部42は、入力されたTCPパケット20TCP-ACKパケットのTCPヘッダ中のACK番号を、元ACK番号72に代入する。ここで、元ACK番号72は、本フローチャートのみで参照更新される一時的な変数である。ステップS203において、書き換え部42は、入力されたTCPパケット20からフロー識別子71を抽出する。ステップS204において、書き換え部42は、フローテーブル41を検索し、ステップS203で抽出したフロー識別子71と同一のフロー識別子51を持つフローエントリ50ヒットエントリが、フローテーブル41に存在するか否かを調べる。ヒットエントリ50の検索に成功した場合ステップS205;Yes、処理はステップS206に進む。一方、検索に失敗した場合ステップS205;No、処理はステップS221に進む。ステップS206において、書き換え部42は、ヒットエントリ50から、期待ACK番号52、受信フラグ53、受信ACK番号54、送信ACK番号55、及び重複ACK回数56、をそれぞれ取得する。ステップS207において、書き換え部42は、取得した受信フラグ53をチェックする。受信フラグ53が真である場合、処理はステップS210に進む。受信フラグ53が偽である場合、処理はステップS208に進む。ステップS210において、書き換え部42は、元ACK番号72と、ステップS206で取得した期待ACK番号52とを比較する。元ACK番号72が期待ACK番号52以上の場合ステップ210;Yes、処理はステップS209に進む。一方、元ACK番号72が期待ACK番号52より小さい場合ステップ210;No、処理はステップS211に進む。ステップS208において、書き換え部42は、ヒットエントリ50の受信フラグ53を真に書き換える。ステップS209において、書き換え部42は、ヒットエントリ50の受信ACK番号54と送信ACK番号55の双方に、元ACK番号72を代入する。また、書き換え部42は、ヒットエントリ50の重複ACK回数56を0にリセットする。その後、処理はステップS221に進む。ステップS211において、書き換え部42は、元ACK番号72と、ステップS206で取得した受信ACK番号54とを比較する。元ACK番号72が受信ACK番号54より大きい場合、処理はステップS213に進む。元ACK番号72と受信ACK番号54が等しい場合、処理はステップS215に進む。元ACK番号72が受信ACK番号54より小さい場合、処理はステップS221に進む。ステップS213において、書き換え部42は、受信ACK番号54に所定の正数Δ例えば1を加算した値と、元ACK番号72との最小値を、新ACK番号73に代入する。ここで、新ACK番号73は、本フローチャートのみで参照更新される一時的な変数である。ステップS214において、書き換え部42は、ヒットエントリ50の受信ACK番号54に元ACK番号72を代入する。更に、書き換え部42は、ヒットエントリ50の重複ACK回数56を0にリセットする。その後、処理はステップS219に進む。ステップS215において、書き換え部42は、送信ACK番号55に所定の正数Δ例えば1を加算した値と、元ACK番号72との最小値を、新ACK番号73に代入する。ステップS216において、書き換え部42は、ヒットエントリ50の重複ACK回数56を1だけインクリメントする。ステップS217において、書き換え部42は、ステップS216の後の重複ACK回数56が、所定の高速再送条件を満たしているか否かを判定する。ここで、高速再送条件は、重複ACK回数56が5以上などである。重複ACK回数56が高速再送条件を満たしている場合ステップS217;Yes、処理はステップS218に進む。一方、重複ACK回数56が高速再送条件を満たしていない場合ステップS217;No、処理はステップS219に進む。ステップS218において、書き換え部42は、ステップS200で入力されたTCPパケット20からパケット識別子を抽出する。そして、書き換え部42は、そのパケット識別子を含む再送指示21を再送制御部13に発行する。その後、処理はステップS219に進む。ステップS219において、書き換え部42は、ヒットエントリ50の送信ACK番号55に、新ACK番号73を代入する。つまり、書き換え部42は、ヒットエントリ50の送信ACK番号55を更新する。ステップS220において、書き換え部42は、ステップS200で入力されたTCPパケット20のTCPヘッダ中のACK番号に、新ACK番号73を代入する。すなわち、書き換え部42は、ACK番号の書き換えを実行する。その後、処理はステップS221に進む。ステップS221において、書き換え部42は、ステップS200で入力されたTCPパケット20、または、ステップS220で書き換えが実施されたTCP-ACKパケット20を、TCP/IP処理部11に出力する。ステップS221は最終ステップである。2-3.処理例次に、図9及び図10を参照して、本実施の形態に係る処理の一例を説明する。図9において、2台の通信装置1-1及び1-2がネットワーク2を介して互いに接続されている。通信装置1-1がTCPデータを送信し、通信装置1-2がそれを受信する。実線の矢印は、通信装置1-1から通信装置1-2に送られる、TCPデータを含むTCPパケット20を表す。各TCPパケット20は、100バイトのTCPデータを含み、また、単一のフローに属するとする。また、破線の矢印は、通信装置1-2から通信装置1-1へ返送される、TCP-ACKパケット20を表す。実線の矢印に付された一重円の中の数字は、TCPパケット20のシーケンス番号を示し、破線の矢印に付された二重円の中の数字は、TCP-ACKパケット20のTCPのACK番号を示す。尚、簡単のため、下位層ACKパケット39の送受信は図示されていない。また、本例では遅延ACKを考慮しない。これらの簡略化によって一般性が失われることはない。図10は、図9のシーケンス図中の時刻T1~T14における、通信装置1-1のフローテーブル41のフローエントリ50の内容を示している。通信装置1-1のTCP/IP処理部11は、6つのTCPパケット20を通信装置1-2に向けて連続して送出する時系列順に、時刻T1、T2、T3、T5、T6、T7。ここで、時刻T3で送出された、シーケンス番号300のTCPパケット20が、ネットワーク2内で廃棄されたとする。通信装置1-1の再送制御部13は、時刻T4において当該TCPパケット20シーケンス番号300を送出し、再送タイムアウト経過後の時刻T8において当該TCPパケット20シーケンス番号300を再送する。通信装置1-1のフローテーブル41に着目する。時刻T1では、通信装置1-1のレート維持部12にTCPパケット20がまだ1つも到着していない。従って、フローテーブル41の内容は空であり、有効なフローエントリ50は存在しない。時刻T1からT2にかけて、通信装置1-1のレート維持部12の登録部40に、TCPシーケンス番号が100である、長さ100バイトのTCPパケット20が入力される。ステップS101において、期待ACK番号70は200=100100と算出される。ステップS102において、フロー識別子71はフローAとなる。この時点ではフローテーブル41は空であり、フローAに対応するフローエントリ50は存在していないステップS104;No。従って、ステップS105において、新たなフローエントリ50がフローテーブル41に追加される。その結果、フローテーブル41の内容は、図10の時刻T2の行の内容に変化する。時刻T2からT3にかけて、通信装置1-1のレート維持部12の登録部40に、TCPシーケンス番号が200である、長さ100バイトのTCPパケット20が入力される。ステップS101において、期待ACK番号70は300=200100と算出される。ステップS102において、フロー識別子71はフローAとなる。この時点で、フローAに対応するフローエントリ50ヒットエントリがフローテーブル41に既に存在しているステップS104;Yes。従って、ステップS106において、当該ヒットエントリ50の期待ACK番号52が200から300に更新される。時刻T3~T4の間と、時刻T5~T6の間、時刻T6~T7の間、時刻T7~T8の間についても、通信装置1-1のレート維持部12の登録部40は、上記と同様に動作する。その後、時刻T9~T13にかけて、廃棄されなかった5つのTCPパケット20のそれぞれに応答する5つのTCP-ACKパケット20が通信装置1-1に順番に到着する。これら5つのTCP-ACKパケット20のそれぞれのACK番号は、到着順に200、300、300、300、300である。ACK番号300のTCP-ACKパケット20が連続する理由は、通信装置1-2のTCP/IP処理部11が、シーケンス番号300のTCPパケット20を受理していないからである。再度、通信装置1-1のフローテーブル41に着目する。時刻T8からT9にかけて、通信装置1-1のレート維持部12の書き換え部42に、ACK番号が200であるTCP-ACKパケット20が入力される。ステップS202において、元ACK番号72は200になる。ステップS203において、フロー識別子71はフローAとなる。この時点で、フローAに対応するフローエントリ50ヒットエントリがフローテーブル41に既に存在しているステップS205;Yes。また、この時点で、ヒットエントリ50の受信フラグ53は偽である。従って、ステップS208とステップS209が実施され、結果として、フローテーブル41の内容は、図10の時刻T9の行の内容に変化する。今回はACK番号の書き換えは実施されず、ステップS221において、ACK番号が200であるTCP-ACKパケット20がそのままTCP/IP処理部11に転送される。時刻T9からT10にかけて、通信装置1-1のレート維持部12の書き換え部42に、ACK番号が300であるTCP-ACKパケット20が入力される。ステップS202において、元ACK番号72は300になる。ステップS203において、フロー識別子71はフローAとなる。この時点で、フローAに対応するフローエントリ50ヒットエントリがフローテーブル41に既に存在しているステップS205;Yes。また、ヒットエントリ50の受信フラグ53は真であるため、処理はステップS210に進む。元ACK番号72=300は期待ACK番号52=700より小さいためステップS210;No、処理はステップS211に進む。ステップS211において、元ACK番号72=300は受信ACK番号54=200より大きい。従って、ステップS213が実施され、新ACK番号73は201=受信ACK番号541となる。その後、ステップS214、S219が実行され、結果として、受信ACK番号54は300となり、送信ACK番号55は201に更新される。つまり、送信ACK番号55は、更新前の送信ACK番号55=200より大きく、元ACK番号72=300を超えない値に更新される。ステップS220において、TCP-ACKパケット20のACK番号は、300から201に書き換えられる。ステップS221において、ACK番号が201であるTCP-ACKパケット20がTCP/IP処理部11に転送される。時刻T10からT11にかけて、通信装置1-1のレート維持部12の書き換え部42に、ACK番号が300であるTCP-ACKパケット20が入力される。ステップS211の直前までの処理は前回と同じであるので、説明を省略する。ステップS211において、元ACK番号72=300は受信ACK番号54=300と同じである。従って、ステップS215が実施され、新ACK番号73は202=送信ACK番号551となる。ステップS216において、当該ヒットエントリ50の重複ACK回数56はインクリメントされ、0から1に変化する。本例において、高速再送条件は重複ACK回数56が5以上であるとする。この場合、重複ACK回数56は高速再送条件を満たさないステップS217;Noため、処理はステップS219に進む。その結果、送信ACK番号55は202に更新される。つまり、送信ACK番号55は、更新前の送信ACK番号55=201より大きく、元ACK番号72=300を超えない値に更新される。ステップS220において、TCP-ACKパケット20のACK番号は、300から202に書き換えられる。ステップS221において、ACK番号が202であるTCP-ACKパケット20がTCP/IP処理部11に転送される。時刻T11からT12の間と、時刻T12からT13の間にも、通信装置1-1のレート維持部12の書き換え部42に、ACK番号が300であるTCP-ACKパケット20が入力される。このときの動作は、前回と同様であるので、説明を省略する。時刻T13からT14にかけて、通信装置1-1のレート維持部12の書き換え部42に、ACK番号が700であるTCP-ACKパケット20が入力される。このTCP-ACKパケット20は、時刻T8で再送制御部13によって再送されたTCPパケット20に応答するものである。ステップS202において、元ACK番号72は700になる。ステップS203~S207は、前回と同様である。ステップS210において、元ACK番号72=700は期待ACK番号52=700以上であるステップS210;Yes。従って、ステップS209が実施され、フローテーブル41の内容は、図10の時刻T14の行の内容に変化する。今回はACK番号の書き換えは実施されず、ステップS221において、ACK番号が700であるTCP-ACKパケット20がそのままTCP/IP処理部11に転送される。以上をまとめると、通信装置1-1のTCP/IP処理部11がレート維持部12を経由して受け取るTCP-ACKパケット20のACK番号は、時系列順に、200、201、202、203、204、700、と変わる。同一のACK番号が連続しないため、TCP/IP処理部11において高速再送が起動することが未然に防止される。3.効果以上に説明されたように、本実施の形態によれば、たとえ重複ACKパケットが通信装置1に入力されたとしても、その通信装置1のレート維持部12が、同一のACK番号が連続しないように書き換えを行い、書き換え後のTCP-ACKパケットをTCP/IP処理部11に転送する。従って、TCP/IP処理部11は、重複ACKパケットの到着を検知しない。言い換えれば、パケットの消失は、上位層のTCP/IP処理部11から隠蔽される。その結果、TCP/IP処理部11による不要な高速再送が未然に防止され、輻輳ウィンドウの縮小も発生しない。従って、ネットワークの帯域の圧迫、TCPスループットの減少、通信効率の低下といった事態が防止される。また、レート維持部12によるACK番号の書き換えは、TCPが誤動作しないように行われる。具体的には、書き換え後のACK番号新ACK番号73は、書き換え前のACK番号元ACK番号72を超えない。また、ACK番号新ACK番号73は狭義単調増加する。これらの条件が満たされないとき、レート維持部12は、安全のため、ACK番号の書き換えを実施しない。更に、レート維持部12は、元ACK番号72受信したTCP-ACKパケット20のACK番号が期待ACK番号52以上である場合ステップS210;Yes、ACK番号の書き換えを実施しない。その理由は次の通りである。もし、元ACK番号72が期待ACK番号52と同じ場合にも書き換えが実施されるとすると、書き換え後のACK番号新ACK番号73が期待ACK番号52より小さくなる可能性がある。そうなると、TCP/IP処理部11は、期待するACK番号のTCP-ACKパケット20を受信できず、TCP通信を完了することができなくなる。そこで、レート維持部12の登録部40により、期待ACK番号70を予め算出しておき、その期待ACK番号70をフローテーブル41に記録するようにしている。4.ハードウェア構成本実施の形態に係る通信装置1は、PCPersonalComputer等の情報処理装置に適用可能である。図11は、通信装置1が情報処理装置に適用された場合の構成を示している。図11に示されるように、通信装置1情報処理装置は、データ処理装置200と記憶装置201を備えている。記憶装置201として、RAMRandomAccessMemoryやHDDHardDiskDriveが例示される。記憶装置201には、再送バッファ31、フローテーブル41、ワークメモリ202、203、204、などが格納される。データ処理装置200は、CPUCentralProcessingUnitを含む。データ処理装置200は、アプリケーション処理部210、TCP/IP処理部211、レート維持部212、再送制御部213、及び下位レイヤ処理部214を備えている。アプリケーション処理部210、TCP/IP処理部211、及び下位レイヤ処理部214は、それぞれ、前述のアプリケーション処理部10、TCP/IP処理部11、及び下位レイヤ処理部14と同様である。但し、アプリケーション処理部210、TCP/IP処理部211、及び下位レイヤ処理部214は、動作に必要な記憶領域として記憶装置201内のワークメモリ202、203、204を使用する。レート維持部212は、記憶装置201内のフローテーブル41を使用する点を除けば、前述のレート維持部12と同様である。再送制御部213は、記憶装置201内の再送バッファ31を使用する点を除けば、前述の再送制御部13と同様である。尚、データ処理装置200が備えるこれら機能ブロックは、データ処理装置200がパケット再送制御プログラムを実行することによって実現される。パケット再送制御プログラムは、データ処理装置200によって実行されるコンピュータプログラムであり、記憶装置201に格納される。パケット再送制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。付記1TCP/IP処理を行うTCP/IP処理部と、TCP層よりも下位の層でパケット再送制御を行う再送制御部と、前記再送制御部より受け取るTCPパケットを前記TCP/IP処理部に転送するレート維持部とを備え、前記再送制御部は、前記TCP/IP処理部から送信されたTCPパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するTCP-ACKパケットを受け取り、前記受け取ったTCP-ACKパケットを前記レート維持部に転送し、前記レート維持部は、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP/IP処理部に転送されないように、前記再送制御部から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、前記書き換え後の前記TCP-ACKパケットを前記TCP/IP処理部に転送する通信装置。付記2付記1に記載の通信装置であって、前記レート維持部は、前記TCP/IP処理部に転送されるTCP-ACKパケットの前記ACK番号が単調増加するように前記書き換えを行う通信装置。付記3付記2に記載の通信装置であって、前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、前記フローエントリは、前記TCP/IP処理部に転送済みの最新のTCP-ACKパケットの前記ACK番号である送信ACK番号を含み、新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記送信ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記送信ACK番号よりも大きくなるように前記書き換えを行い、更に、前記送信ACK番号を更新する通信装置。付記4付記3に記載の通信装置であって、前記レート維持部は、前記新たなTCP-ACKパケットに関して、前記書き換え後の前記ACK番号が前記書き換え前の前記ACK番号を超えないように前記書き換えを行う通信装置。付記5付記4に記載の通信装置であって、前記フローエントリは、更に、後に受信することが期待されるTCP-ACKパケットの前記ACK番号である期待ACK番号を含み、前記レート維持部は、前記TCP/IP処理部から送信された前記TCPパケットに基づいて、前記フローテーブル中の該当フローエントリの前記期待ACK番号を更新し、前記新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記期待ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記期待ACK番号以上の場合、前記レート維持部は前記書き換えを行わない通信装置。付記6付記1乃至5のいずれか一項に記載の通信装置であって、前記レート維持部は、フロー毎のフローエントリを有するフローテーブルを備え、前記フローエントリは、前記再送制御部から前回受け取ったTCP-ACKパケットの前記ACK番号である受信ACK番号と、重複ACK回数とを含み、新たなTCP-ACKパケットを前記再送制御部から受け取った場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記受信ACK番号を参照し、前記新たなTCP-ACKパケットの前記ACK番号が前記受信ACK番号よりも大きい場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ACK回数を初期化し、前記新たなTCP-ACKパケットの前記ACK番号が前記受信ACK番号と同じである場合、前記レート維持部は、前記フローテーブル中の該当フローエントリの前記重複ACK回数をインクリメントし、前記重複ACK回数が所定の条件を満たした場合、前記レート維持部は、前記ACK番号に対応する前記送信パケットの再送を前記再送制御部に対して指示する通信装置。付記7通信装置におけるパケット再送制御方法であって、TCP層から送信されたTCPパケットに関して、前記TCP層よりも下位の下位層でパケット再送制御を行うステップと、前記TCPパケットの送信先から、前記TCPパケットに応答するTCP-ACKパケットを受け取るステップと、前記受け取ったTCP-ACKパケットを前記下位層から前記TCP層に転送するステップとを含み、前記転送するステップは、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP層に転送されないように、前記受け取ったTCP-ACKパケットのACK番号の書き換えを行うステップと、前記書き換え後の前記TCP-ACKパケットを前記TCP層に転送するステップとを含むパケット再送制御方法。付記8コンピュータにパケット再送制御機能を実現させるためのパケット再送制御プログラムであって、前記パケット再送制御機能は、TCP/IP処理を行うTCP/IP処理機能と、TCP層よりも下位の層でパケット再送制御を行う再送制御機能と、前記再送制御機能より受け取るTCPパケットを前記TCP/IP処理機能に転送するレート維持機能とを備え、前記再送制御機能は、前記TCP/IP処理機能から送信されたTCPパケットを送信パケットとして送信先に送信し、前記送信先から前記送信パケットに応答するTCP-ACKパケットを受け取り、前記受け取ったTCP-ACKパケットを前記レート維持機能に転送し、前記レート維持機能は、同一のACK番号を有するTCP-ACKパケットが連続して前記TCP/IP処理機能に転送されないように、前記再送制御機能から受け取ったTCP-ACKパケットのACK番号の書き換えを行い、前記書き換え後の前記TCP-ACKパケットを前記TCP/IP処理機能に転送するパケット再送制御プログラム。本出願は、2011年1月12日に出願された日本国特許出願2011-003894を基礎とする優先権を主張し、その開示の全てをここに取り込む。