(57)【特許請求の範囲】
【請求項１】
少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、接続されたネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向の場合、前記パケットのＡＣＫ番号を、前記パケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に書き換えた後に前記サーバへ送信するネットワーク中継装置。
【請求項２】
前記サーバと前記クライアントとの間で音声通信のセッションが行われる場合に、前記音声通信のセッション以外のＴＣＰによる通信のセッションにおいて、前記ＡＣＫ番号の書き換えを行う請求項１に記載のネットワーク中継装置。
【請求項３】
前記ネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向でかつ前記パケット内にＴＣＰデータが格納されていないデータ無しのＡＣＫの場合は、前記ＡＣＫ番号を、前記もっとも古く記憶されたＡＣＫ番号へ書き換えた後に当該パケットを送信する処理と、当該パケットを送信しない処理とを交互に実行する請求項１に記載のネットワーク中継装置。
【請求項４】
少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、接続されたネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向のＡＣＫであって、かつその直前に送信された上り方向のＡＣＫが２度続けて同じＡＣＫ番号の場合は、前記受信したパケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に、元のＡＣＫ番号を書き換えて送信し、前記ネットワーク上より受信したパケットが上り方向のＡＣＫであってかつその直前に送信された２つの上り方向のＡＣＫが同じＡＣＫ番号でない場合は、その直前に前記ネットワーク上へ送信した上り方向のパケットと同じＡＣＫ番号に元のＡＣＫ番号を書き換えた後に前記サーバへ送信するネットワーク中継装置。
【請求項５】
少なくとも１つ以上のサーバと、少なくとも１つ以上のクライアントと、前記サーバと前記クライアントの間の通信をネットワーク上で中継するネットワーク中継装置とを備え、前記ネットワーク中継装置は、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、ネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向の場合、前記パケットのＡＣＫ番号を、前記パケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に書き換えた後に前記サーバへ送信するネットワーク通信システム。
【請求項６】
前記サーバと前記クライアントとの間で音声通信のセッションが行われる場合に、前記ネットワーク中継装置は、前記音声通信のセッション以外のＴＣＰによる通信のセッションにおいて、前記ＡＣＫ番号の書き換えを行う請求項５に記載のネットワーク通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネットなどのパケット通信網に接続された、パケット中継装置に関するものである。
【背景技術】
【０００２】
近年のインターネットの普及によって、さまざまな通信プロトコルが用いられるようになった。トランスポート層と呼ばれるプロトコル層には、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）と、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）がある。ＴＣＰでは信頼性のあるデータ送信を実現する。
【０００３】
図１９はＴＣＰセグメントの構造である。ＴＣＰセグメント１０２はＩＰパケット（以下、単に「パケット」と称す）１０１に内包される。またＴＣＰセグメント１０２は、ＴＣＰヘッダ１０３およびＴＣＰデータ１０４からなる。但し、ＴＣＰデータ１０４には実データが入っていない場合がある。
【０００４】
図２８はＩＰヘッダ１１３の構造である。ＩＰヘッダ１１３内のプロトコル番号フィールド５０１には、パケットが内包しているトランスポート層のプロトコルを識別するための番号が格納されている。例えばＩＰヘッダ１１３を持つパケットが内包しているトランスポート層のプロトコルがＴＣＰであれば、プロトコル番号フィールド５０１に値６が格納される。またＩＰヘッダ１１３が持つパケットが内包しているトランスポート層のプロトコルがＵＤＰであれば、プロトコル番号フィールド５０１に値１７が格納される。送信元ＩＰアドレスフィールド５０２には発信元ＩＰアドレスが格納され、宛先ＩＰアドレスフィールド５０３には宛先ＩＰアドレスが格納されている。
【０００５】
一般にＴＣＰによる通信は、サーバ、クライアントの組によって実現される。ここでクライアントとは接続要求を出すネットワーク端末を指し、サーバとは接続要求を受けるネットワーク端末を指す。クライアントからサーバへの接続要求の後、サーバ、クライアント間では互いにパケットを用いて、ＴＣＰデータの送受信を行う。データ送信を行うサーバもしくはクライアントは、ＴＣＰデータを伴うＴＣＰセグメントを対となるクライアントもしくはサーバに送信する。ＴＣＰデータ１０４に実データを伴うＴＣＰセグメント１０２には、ＴＣＰヘッダ１０３内のシーケンス番号フィールド１１０に、そのＴＣＰデータ１０４の先頭にある１バイトデータが送信すべきデータ全体の何バイト目であるかが記される。
【０００６】
図２０はＴＣＰの基本的なデータ送信についての説明図である。図２０のように、サーバ２０１側からＴＣＰセグメントＸ１、Ｘ３、Ｘ５をクライアント２０２に送信する度に、クライアント２０２からサーバ２０１に確認応答を含むＴＣＰセグメント（以下、ＡＣＫと称す）Ｘ２、Ｘ４、Ｘ６を送信している。クライアント２０２が送信するそれぞれのＡＣＫのＡＣＫ番号フィールドには、クライアント２０２が受信したＴＣＰセグメントが持つシーケンス番号に１を加えた値が格納され、サーバ２０１に送信される。例えばＸ２はＸ１に対する確認応答なので、Ｘ１のシーケンス番号に１を足した値が格納される。Ｘ２を受信したサーバ２０１は、Ｘ２のＡＣＫ番号フィールドの値が、先に送信したＸ1のシーケンス番号に１を足した値になっていることより、Ｘ1が正常にクライアント２０２に送信することができたということを確認でき、以降ＴＣＰセグメントＸ３を送信する。以上より、サーバ２０１はクライアント２０２からＡＣＫを受けとることによって、送信したＴＣＰデータが確実にクライアント２０２に届けられたことを確認できる。
【０００７】
図２１はＴＣＰによる通信中にパケットロスが発生した時の挙動を説明する図である。パケットロスとは、伝送路やパケット中継装置（以下「中継装置」と称す）でパケットを正常に処理できず、送信先に届かない現象のことをいう。図２１は、ＴＣＰセグメントＸ１３に対するＡＣＫがサーバ２０３側に帰って来ない場合の例である。その場合途中の伝送路でパケットロスが発生した可能性が考えられる。そこで、サーバ２０３側からクライアント２０４に対してＴＣＰセグメントＸ１３と同じＴＣＰデータを有するＴＣＰセグメントＸ１４を再度送信する。ここでサーバ２０３側がＴＣＰセグメントＸ１３を送信した後ＴＣＰセグメントＸ１４を送信するまでの時間Ｘ１７をＲＴＯ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅｏｕｔの略）という。またＴＣＰデータを含むＴＣＰセグメントＸ１１を送信した後、それに対するＡＣＫ  Ｘ１２が帰ってくるまでの時間Ｘ１６をＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅの略）という。
【０００８】
しかし前記図２０、図２１の例ではサーバ２０１または２０３は１つのＴＣＰセグメントを送信した後に必ずそのＴＣＰセグメントに対するクライアント２０２または２０４からのＡＣＫを受信しないと次のデータを送信しない。すなわちサーバ２０１または２０３は各送信ＴＣＰセグメントＸ１、Ｘ３、Ｘ５、Ｘ１１、Ｘ１３＝Ｘ１４に対してそれぞれクライアント２０２または２０４からのＡＣＫ  Ｘ２、Ｘ４、Ｘ６、Ｘ１２、Ｘ１５を逐次受信しないと次のデータを送信しないため、転送の効率が悪い。そのためこれらに述べたような転送方法はあまり用いられておらず、多様な拡張によって転送効率の改良が行われている。
【０００９】
図２２および図２３はクライアント側における拡張されたＴＣＰのフロー制御によって転送効率を改良する従来例である。図２２において、サーバ２０５は連続してＴＣＰセグメントＸ２１〜Ｘ２５を高速に送信する。しかしサーバ２０５から送信されたＴＣＰセグメントＸ２１〜Ｘ２５をクライアント２０６が処理しきれない場合があり、例えばＴＣＰセグメントＸ２５のように、クライアント２０６側で受信されたにもかかわらず処理が間に合わないため破棄されてしまい無駄になる場合がある。
【００１０】
そこで「あと何バイト分受信できる」という通知を前記図１９におけるＴＣＰヘッダのウインドウサイズ１１２を使って、図２３のＴＣＰセグメントＸ３１およびＸ３６のようにサーバ２０７へ通知する。これらのようなＡＣＫにより、クライアント２０８でデータを処理しきれずにサーバ２０７からのＴＣＰセグメントが破棄されてしまうことを回避する。サーバ２０７側は、クライアント２０８に対して連続して送信できるＴＣＰセグメントの数を、例えば図１９に示されるＴＣＰヘッダ１０３のウインドウサイズフィールド１１２を元に把握することができる。図２３ではＴＣＰセグメントＸ３１によりクライアント２０８からサーバ２０７へ通知されたウインドウサイズ４０００バイトに対してＸ３２〜Ｘ３５の各１０００バイト、すなわち合計４０００バイトがサーバ２０７からクライアント２０８に送られ、ＴＣＰセグメントＸ３６によりクライアント２０８からサーバ２０７へ通知されたウインドウサイズ４０００バイトに対してＸ３７〜Ｘ４０の各１０００バイト、すなわち合計４０００バイトが同じくサーバ２０７からクライアント２０８に送られている。
【００１１】
図２４はウインドウサイズによるフロー制御をしている際にパケットロスが発生した場合のＴＣＰの挙動を示す図である。サーバ２０９がＴＣＰセグメント（１０００バイト〜２０００バイト）を送信しそれをクライアント２１０が受信完了した場合、クライアント２１０はそのことを示す番号（ＡＣＫ    ２００１）を有するＡＣＫ  Ｘ５４をサーバ２０９へ送信するが、その後においてサーバ２０９からのＴＣＰセグメントＸ５５（２００１バイト〜３０００バイト）でパケットロスが発生した場合におけるＴＣＰの挙動は以下のようになる。クライアント２１０はＡＣＫ  Ｘ５４をサーバ２０９へ送信した後にＴＣＰセグメントＸ５６（３００１バイト〜４０００バイト）やＴＣＰセグメントＸ５８（４００１バイト〜５０００バイト）をサーバ２０９から受け取ったとしても、ＴＣＰセグメントＸ５５（２００１バイト〜３０００バイト）についてはまだ受け取っていないのであるから、サーバ２０９に対してＸ５４と同じＡＣＫ（以下この場合のようなＡＣＫを「デュプリケイトＡＣＫ＝Ｄｕｐｌｉｃａｔｅ  ＡＣＫ」と呼ぶ）Ｘ５７、Ｘ５９をさらに返す。サーバ２０９側はクライアント２１０がＸ５３までを受信出来たことを示す番号（ＡＣＫ    ２００１）を有する同じＡＣＫ  Ｘ５４、Ｘ５７、Ｘ５９を複数回に渡って受信することにより、ＴＣＰセグメントＸ５６（３００１バイト〜４０００バイト）やＴＣＰセグメント  Ｘ５８（４００１バイト〜５０００バイト）をクライアント２１０へ送信しているにも関わらず、少なくともＴＣＰセグメントＸ５５のパケットロスが途中で発生し、クライアント２１０がＴＣＰセグメントＸ５５を受信できていないと認識することができる。この時サーバ２０９側はＴＣＰセグメントＸ５５の再送をＸ６０により行う。
【００１２】
図２５はＡＣＫの効率的な送信を示す従来例である。クライアント２１２は、前記図２４を用いて示したようなＴＣＰセグメント毎に対応するＡＣＫを送信するのではなく、複数のＴＣＰセグメントＸ７１〜Ｘ７３またはＸ７５〜Ｘ７７に対応する確認応答を一つのＡＣＫ Ｘ７４またはＸ７８にまとめてサーバ２１１へ送信する。これによってＡＣＫの効率送信ができる。ただしＡＣＫは通常０．５秒以内に必ず送信される。
【００１３】
図２６および図２７はＴＣＰデータを効率的に送受信する他の従来例である。これはＴＣＰデータの送信側がＴＣＰデータの受信側からのウインドウサイズ（つまりＴＣＰデータの受信側が受け取ったＴＣＰセグメントを処理するまでに一時的に保有できる最大データ量）をベースにＴＣＰデータの受信側へのＴＣＰセグメントの送信をおこなうという方式であり、輻輳ウインドウ（Ｃｏｎｇｅｓｔｉｏｎ  Ｗｉｎｄｏｗ、以下「ＣＷＮＤ」と称す）と呼ばれる概念が用いられる。この方式は、サーバとクライアント間の伝送路の伝送許容量が十分大きい場合は有用である。
【００１４】
しかしながら現実的にはサーバとクライアント間は、さまざまな伝送許容量を有する複数の伝送路によって構成されている。また、近年の計算機の能力向上によりクライアント側は小さなウインドウサイズを広告しない傾向にある。データ送信側は、データ受信側が広告したウインドウサイズ分のＴＣＰデータ分全てを連続して送信した場合、その送信スループットは伝送途中にある複数の伝送路のうち、伝送許容量の小さい一部の伝送路にて、伝送許容量を超えてしまう可能性が出る。そのような状況においては、本方式では、パケットロスが多発し、逆にスループットが下がってしまう。
【００１５】
そこでＴＣＰデータの送信側からもフロー制御を行うようにしたものがＣＷＮＤのしくみである。これはデータ送信側にて利用される。データ送信側はデータ送信開始時にたとえ大きなウインドウサイズをクライアントから受けていても、最初は１つだけしかＴＣＰセグメントを送信しない。つまりＣＷＮＤ＝１で開始する。その後ＣＷＮＤを大きくしていき、最適なＣＷＮＤの値を見つける。
【００１６】
図２６に示す通り、サーバ２１３は自分が送信したＴＣＰデータを含むＴＣＰセグメントに対するＡＣＫをクライアント２１４より受信する毎に、次に送信するＴＣＰセグメントの数、すなわちＣＷＮＤの値を指数関数的に増やしていく。すなわち図２６においてサーバ２１３はまずＣＷＮＤ＝１で送信を開始し、自分の送信したＴＣＰセグメントＸ８１に対するＡＣＫ  Ｘ８２をクライアント２１４より受信したらＣＷＮＤ＝２とし、ＴＣＰセグメントＸ８３およびＸ８４を連続して送信する。それらのＴＣＰセグメントＸ８３およびＸ８４に対するＡＣＫ  Ｘ８５をクライアント２１４より受信したら、サーバ２１３はＣＷＮＤ＝４とし、ＴＣＰセグメントＸ８６〜Ｘ８９を連続して送信する。さらにそれらのＴＣＰセグメントＸ８６〜Ｘ８９に対するＡＣＫ  Ｘ９０をクライアント２１４より受信したら、サーバ２１３はＣＷＮＤ＝８とし、ＴＣＰセグメントＸ９１以下８つのＴＣＰセグメントを連続して送信する、という具合である。
【００１７】
その後、サーバ２１３は輻輳状態（パケットロスによるＴＣＰ再送が発生した時、もしくはＲＴＯオーバーによるＴＣＰの再送が発生した時）の検知があるまで、クライアントから広告されたウインドウサイズの範囲内でＣＷＮＤを増やしていく。
【００１８】
輻輳状態になった場合には、例えばＣＷＮＤの値をその時点の半分にし、その後は図２７に示すように、例えば今度は加算的にＣＷＮＤをクライアントから広告されたウインドウサイズの範囲内で増やしていく。
【００１９】
ここで前記図２７に示すような輻輳状態の後のデータ送信方法のことを「輻輳回避モード」と呼ぶ。逆に、前記図２６に示すような輻輳状態の前の状態を「スロースタートモード」と呼ぶ。スロースタートモードではＣＷＮＤの増加が大きく、輻輳回避モードの状態では小さい。一度輻輳回避モードに切り替わるとその後はスロースタートモードには変わらず、ひとつのセッションが終了するまで輻輳回避モードのままである。
【００２０】
このようして求められた最適なＣＷＮＤの値で、サーバ・クライアント間の通信が行われている。近年のＴＣＰの実装では、このような輻輳ウインドウを用いて送受信を行っているものがほとんどである。
【００２１】
スロースタートモードと輻輳回避モードの切替えは、上に述べたように輻輳やＲＴＯオーバーが発生したか否かに関係なく、スロースタートモードにおいてＣＷＮＤがある閾値（以下「スロースタートスレッシュホルド」と表す）を超えた時に起こるようにしても良い。このスロースタートスレッシュホルドの値をどのように取るかについては実装者が適宜決定する。
【００２２】
以上のことより、ＴＣＰのスループットに係わるパラメタは以下の４つであることがわかる。
【００２３】
Ａ）「ＲＴＴ」。ＲＴＴは大きくするとスループットは下がり、小さくするとスループットは上がる。
【００２４】
Ｂ）「ＣＷＮＤ」。ＣＷＮＤは大きくするとスループットが上がり、小さくするとスループットは下がる。
【００２５】
Ｃ）「ウインドウサイズ」。ウインドウサイズを大きくすると、スループットは上がる可能性がでる（ＣＷＮＤ依存）。小さくするとＣＷＮＤの大きさに関係なくスループットは下がる。
【００２６】
Ｄ）「ＴＣＰの送信モード」。スロースタートモードだと、スループットは急激に上がり、輻輳回避モードだと緩やかにスループットは上がる。送信モードの切替えは、スロースタートモード時に輻輳が発生した場合と、スロースタートモード時にＣＷＮＤがスロースタートスレッシュホルドを超えた場合である。
【００２７】
近年のインターネットの普及により、パケットに音声データを内包し、インターネット端末間で音声通信を行うインターネット電話（ＩＰ以下、「ＩＰ電話」と表す）システムが普及しつつある。ＩＰ電話システムでは、２つ以上のＩＰ電話端末によって構成され、ＩＰ電話端末間で音声通信を行う。この場合、音声通信は通常ＵＤＰにて行われる。
【００２８】
同時にＡＤＳＬ（Ａｓｙｍｍｅｔｒｉｃ  Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅ）やＣＡＴＶ網を用いてインターネットにアクセスする方法が一般家庭に普及してきている。一般家庭からＡＤＳＬやＣＡＴＶ網を用いてインターネットに接続する際、家庭内のインターネット端末からのパケットをＩＳＰ（インターネット・サービスプロバイダ）へ中継する役割や、ＩＳＰからのパケットを家庭内のインターネット端末へ中継する役割を持つ中継装置を用いることが多い。（以下そのような機能を持つ中継装置をアクセスルータと呼ぶ）。またＡＤＳＬやＣＡＴＶによる一般家庭へのアクセス回線の伝送許容量は年々大きくなってきているが、Ｅｔｈｅｒｎｅｔ（登録商標）のような双方向に１０Ｍｂｐｓ以上の伝送許容量を有するアクセス回線は未だ一部である。
【００２９】
さらに近年、上で述べたような家庭内ネットワークへのゲートウェイの役割を担うアクセスルータＤ２にＩＰ電話機能を同時に載せる図２のような試みが盛んに行われている。図２の上位の伝送路Ｄ３には、クライアントＤ１とサーバＤ７との間のＴＣＰセグメントＤ５と、ＩＰ電話Ｄ８とＩＰ電話機能が搭載されたアクセスルータＤ２との間のＵＤＰによる音声通信パケットＤ４とが混在する。また、上位の伝送路Ｄ３の伝送許容量は１Ｍｂｐｓなので、他の伝送路Ｄ９、Ｄ１０より小さく、特にＴＣＰセグメントＤ５と音声通信パケットＤ４を同時に扱う場合は伝送路Ｄ３の伝送許容量を超えてしまう可能性がある。伝送許容量を超えるとアクセスルータＤ２のパケット送信キューや受信キューが最大長まで伸びてしまい、パケットロスが発生する。
【００３０】
特に音声通信パケットＤ４は、ロスが発生すると音声品質に大きな影響を及ぼす。また一般的にＴＣＰセグメントによって上位の伝送路Ｄ３上の伝送量が伝送許容量に近付くにつれ、音声通信パケットのジッター（例えば非特許文献１参照）が大きくなり、これも音声品質に大きな影響を及ぼす。この現象は図２でのアクセスルータＤ２だけでなく、上位の中継装置Ｄ６でも発生する。よって図２のような構成の場合、音声品質を上げる場合は、音声以外の通信パケット、すなわち図２においてはＴＣＰセグメントＤ５のスループットを意図的に下げる必要がある。図２における音声以外のＴＣＰセグメントＤ５の上り方向スループットを下げることは、アクセスルータＤ２が出力パケットを自ら制御することで実現可能である。しかし下り方向はＴＣＰセグメントおよび音声通信パケットを上位の中継装置Ｄ６が送信するため、アクセスルータＤ２による制御は困難である。
【００３１】
一般家庭内で行う音声通信以外の通信の大部分はＴＣＰのような信頼性のある送信方法によって行われているが、このような音声通信以外のＴＣＰ通信の下り方向スループットを意図的に下げ、相対的に音声通信を優先させて音声品質を確保するためには、
「クライアントからのウインドウサイズの値を下げる」（例えば特許文献１参照）
という手法が知られている。
【特許文献１】米国特許第６，０３８，２１６号明細書
【非特許文献１】H. Schulzrinne. "RTP: A Transport Protocol for Real-Time     Applications". RFC number:1889 [online]. January 1996. The Internet Engineering Task Force.  [retrieved on 10 April 2006].  Retrieved from the Internet: <URL:http://www.ietf.org/rfc/rfc1889.txt>
【発明の開示】
【発明が解決しようとする課題】
【００３２】
しかしながらクライアント端末の中には前記ウインドウサイズを無視する実装がなされたものが存在するため、上記特許文献１の技術ではこのようなウインドウサイズを処理できないクライアントに対しては有用でなく、音声通信以外のＴＣＰ通信の下り方向スループットを意図的に下げることが出来ず、結果的に音声品質を確保出来ないという課題があった。
【００３３】
本発明は、このような従来の課題を解決するものであり、ウインドウサイズに依存することなく音声通信以外のＴＣＰ通信の下り方向スループットを下げ、音声品質を確保することを目的とする。
【課題を解決するための手段】
【００３４】
本発明は上記目的を達成するために、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、接続されたネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向の場合、前記パケットのＡＣＫ番号を、前記パケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に書き換えた後に前記サーバへ送信するようにしたものである。
【発明の効果】
【００３５】
本発明によれば、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決することができる。
【発明を実施するための最良の形態】
【００３６】
本発明に係るネットワーク中継装置は、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、接続されたネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向の場合、前記パケットのＡＣＫ番号を、前記パケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に書き換えた後に前記サーバへ送信する構成を採る。
【００３７】
これにより、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。
【００３９】
また、ＡＣＫ番号ができるだけ小さな値に書き換えられ、その結果サーバのＲＴＴがより大きくなりＲＴＯをオーバーしやすくなるので、サーバから見て仮想的な輻輳状態がより起こしやすくなり、その結果下り方向のＴＣＰパケットのスループットがより抑えられる。
【００４０】
また、本発明は、前記サーバと前記クライアントとの間で音声通信のセッションが行われる場合に、前記音声通信のセッション以外のＴＣＰによる通信のセッションにおいて、前記ＡＣＫ番号の書き換えを行う構成を採る。
これにより、音声や音声に加え動画情報も同時に送受信するパケットの通信が優先され、その他の種類のパケットの通信スループットが抑えられるので、デジタル音声または動画の通信品質が保たれ、良好なデジタル音声通話や動画配信が実現される。
また、本発明は、前記ネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向でかつ前記パケット内にＴＣＰデータが格納されていないデータ無しのＡＣＫの場合は、前記ＡＣＫ番号を、前記もっとも古く記憶されたＡＣＫ番号へ書き換えた後に当該パケットを送信する処理と、当該パケットを送信しない処理とを交互に実行する構成を採る。
【００４１】
これにより、ＡＣＫ番号ができるだけ小さな値に書き換えられ、その結果サーバのＲＴＴがより大きくなりＲＴＯをオーバーしやすくなるので、サーバとクライアントとの通信が双方向でない場合に、サーバからのパケット送信モードができるだけ早くスロースタートモードから輻輳回避モードへ切り替わる。
【００４２】
また、本発明に係るネットワーク中継装置は、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、接続されたネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向のＡＣＫであって、かつその直前に送信された上り方向のＡＣＫが２度続けて同じＡＣＫ番号の場合は、前記受信したパケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に、元のＡＣＫ番号を書き換えて送信し、前記ネットワーク上より受信したパケットが上り方向のＡＣＫであってかつその直前に送信された２つの上り方向のＡＣＫが同じＡＣＫ番号でない場合は、その直前に前記ネットワーク上へ送信した上り方向のパケットと同じＡＣＫ番号に元のＡＣＫ番号を書き換えた後に前記サーバへ送信する構成を採る。
【００４３】
これにより、ＡＣＫ番号ができるだけ小さな値に書き換えられ、その結果サーバのＲＴＴがより大きくなりＲＴＯをオーバーしやすくなるので、サーバとクライアントとの通信が双方向の場合に、クライアントからサーバへのデータ送信が補償され、かつサーバからのパケット送信モードをできるだけ早くスロースタートモードから輻輳回避モードへ切り替わる。
【００５０】
また、本発明に係るネットワーク通信システムは、少なくとも１つ以上のサーバと、少なくとも１つ以上のクライアントと、前記サーバと前記クライアントの間の通信をネットワーク上で中継するネットワーク中継装置とを備え、前記ネットワーク中継装置は、前記中継を行うセッション毎に前記クライアントから受信したパケットのＡＣＫ番号を順に複数記憶し、ネットワーク上より受信したパケットが前記クライアントから前記サーバへの上り方向の場合、前記パケットのＡＣＫ番号を、前記パケットが属するセッションに対応して記憶される複数のＡＣＫ番号の中でその時点でもっとも古く記憶されたＡＣＫ番号に書き換えた後に前記サーバへ送信する構成を採る。
【００５１】
これにより、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。
【００５２】
また、本発明は、前記サーバと前記クライアントとの間で音声通信のセッションが行われる場合に、前記ネットワーク中継装置は、前記音声通信のセッション以外のＴＣＰによる通信のセッションにおいて、前記ＡＣＫ番号の書き換えを行う構成を採る。
【００５３】
これにより、音声や音声に加え動画情報も同時に送受信するパケットの通信が優先され、その他の種類のパケットの通信スループットが抑えられるので、デジタル音声または動画の通信品質が保たれ、良好なデジタル音声通話や動画配信が実現される。
【実施例】
【００５４】
以下、本発明の具体的な内容について実施例を用いて説明する。本実施例においては、本発明によって実現される機能を「ＴＣＰシェーパー」と称す。また、一つのパケットの中に含まれるデータ全体のことをパケットデータと称し、特にＴＣＰセグメントを内包するパケットのことをＴＣＰパケットと称す。ＴＣＰセグメントおよびＡＣＫの定義については前記背景技術にて定義したものと同じである。
【００５５】
またＴＣＰによる通信は一組のサーバ・クライアントから成り、クライアントは接続要求をサーバに対して送信する。サーバでクライアントからの接続要求が受理された場合、データ通信のためのチャンネルがサーバ・クライアント間で作られる。このチャンネルは同一のサーバ・クライアント間で複数作ることができ、それぞれクライアントＩＰアドレス・サーバのＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２および宛先ＩＰアドレスフィールド５０３に格納されたデータ）・クライアントの送信元ポート番号（例えば図１９の１１４に格納されたデータ）・サーバへの宛先ポート番号（例えば図１９の１１５に格納されたデータ）によりチャンネルを識別することができる。以下ではこのチャンネルのことを「セッション」と呼ぶ。
【００５６】
（実施の形態１）本実施の形態１においては以下の順序で話を進める。まず図１を用いて本発明の基本的な動作概念について述べる。次に図３〜図５を用いて基本型ＴＣＰシェーパーの構成を説明し、図６〜図９を用いて基本型ＴＣＰシェーパーを構成する各モジュールの処理フローについて述べる。最後に「輻輳回避モード」における基本型ＴＣＰシェーパーの動作例について図１０および図１１を用いて説明し、「スロースタートモード」における基本型ＴＣＰシェーパーの動作例について図１２および図１３を用いて述べる。
【００５７】
図１は本発明の基本的な動作概念を説明したものである。図１におけるＬＡＮ側クライアント３０１とＷＡＮ側サーバ３０２は、互いにＴＣＰを用いて通信を行う。ＬＡＮ側クライアント３０１とＷＡＮ側サーバ３０２間の通信経路の途中にＴＣＰシェーパーを搭載した中継装置３０３が存在するものとする。ここで上り方向はＴＣＰシェーパーを搭載した中継装置３０３からＷＡＮ側サーバへの向きである。さらに、ＴＣＰシェーパーを搭載した中継装置３０３とＷＡＮ側サーバ３０２との間の伝送路は、ＬＡＮ側クライアント３０１とＴＣＰシェーパーを搭載した中継装置３０３との間の伝送路に対して「上位の伝送路」と呼ばれる。
【００５８】
ＬＡＮ側クライアント３０１がＷＡＮ側サーバ３０２に送信するＴＣＰセグメントＧ３を、ＴＣＰシェーパーを搭載した中継装置３０３が転送する際、ＴＣＰシェーパーを搭載した中継装置３０３はＡＣＫ番号フィールドの値（以後、「ＡＣＫ番号」と称す）ｂを、ｎを引いた値ｂ−ｎに更新しＴＣＰセグメントＧ４として転送する。このようにＴＣＰシェーパーを搭載した中継装置３０３によって上り方向ＴＣＰセグメントのＡＣＫ番号がより小さい値に書き換えられることで、ＴＣＰセグメントＧ４はＴＣＰセグメントＧ２に対するＡＣＫではなく、ＴＣＰセグメントＧ２より以前にＷＡＮ側サーバ３０２からＬＡＮ側クライアント３０１に対して送られたＴＣＰセグメントに対するＡＣＫとなる。よってＧ２に対するＡＣＫは、図１よりも後の図示されていないシーケンスにおいてＴＣＰシェーパーを搭載した中継装置３０３から送信されることになる。
【００５９】
するとＴＣＰセグメントの送受信に関するＷＡＮ側サーバ３０２のＲＴＴの値は大きくなり、ＲＴＯの値を容易にオーバーしやすくなる。その結果としてＴＣＰセグメントの送受信の輻輳状態が仮想的に引き起こされ、ＷＡＮ側サーバ３０２からＬＡＮ側クライアント３０１への下り方向ＴＣＰセグメントのスループットが抑えられ、他の種類の通信帯域が確保されやすくなる。
【００６０】
次に図３〜図５を用いて基本型ＴＣＰシェーパーの構成を説明する。図３は基本型ＴＣＰシェーパーの全体構成の例である。基本型ＴＣＰシェーパーＡ１２は例えば図１における中継装置３０３における拡張機能の一つとして実装される。
【００６１】
通常の中継装置は図３のパケット入力部Ａ１、パケット転送部Ａ２、パケット出力部Ａ９のみを有するが、基本型ＴＣＰシェーパーを有する中継装置３０３はこれらに加えてＴＣＰシェ−パー本体Ａ１２をも有する。
【００６２】
ＴＣＰシェ−パー本体Ａ１２は、パケット転送部Ａ２においてＴＣＰパケット（ＴＣＰセグメントを持つパケット）を、経路Ｂ１を介してインターセプトし、インターセプトしたＴＣＰパケットのＡＣＫ番号の変更を行った後、もしくはシーケンス番号を取得した後に経路Ｂ２を介して再度パケット転送部Ａ２に戻す。ＴＣＰパケット以外のパケットについては、ＴＣＰシェ−パー本体Ａ１２はインターセプトしない。従って、ＴＣＰパケット以外のパケットについてはパケット転送部Ａ２がパケット入力部Ａ１から受け取った後、そのままパケット出力部へ転送する。
【００６３】
図３に示すように、本実施の形態１におけるＴＣＰシェーパー本体Ａ１２はパケット傍受部Ａ３、ＡＣＫ番号変更部Ａ４、シーケンス番号取得部Ａ５、セッション管理部Ａ６、セッション情報保持手段Ａ７、パケット数保持手段Ａ８の各モジュールで構成されている。
【００６４】
パケット傍受部Ａ３は、パケット転送部Ａ２からＴＣＰパケットをインターセプトし他のモジュールへ転送したり、他のモジュールで処理の済んだＴＣＰパケットをパケット転送部Ａ２へ戻したりする役割を持つ。また、パケット傍受部Ａ３は、パケットに含まれる発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）によりパケットが上り方向に向かっているのかどうかの判定も行う。
【００６５】
ＡＣＫ番号変更部Ａ４は、パケット傍受部Ａ３がインターセプトしたＴＣＰパケットのうち、例えば後に述べるルールに基づいて抽出した上り方向ＡＣＫのＡＣＫ番号（例えば図１９における１１１）を、セッション情報保持手段Ａ７からセッション管理部Ａ６を介して取得した新たなＡＣＫ番号へ変更する。
【００６６】
シーケンス番号取得部Ａ５は、パケット傍受部Ａ３がインターセプトした下り方向ＴＣＰパケットから、シーケンス番号（例えば図１９における１１０）とＴＣＰデータ（例えば図１９における１０４）のデータ長を抽出する。抽出されたシーケンス番号とＴＣＰデータのデータ長は加算され、その加算された値がセッション管理部Ａ６を介してセッション情報保持手段Ａ７に書き込まれる。
【００６７】
セッション管理部Ａ６は、ＡＣＫ番号変更部Ａ４またはシーケンス番号取得部Ａ５と、セッション情報保持手段Ａ７またはパケット数保持手段Ａ８との各種データ受け渡しの仲介を行う。
【００６８】
セッション情報保持手段Ａ７またはパケット数保持手段Ａ８に保持されるセッションの数が複数存在する場合、セッション管理部Ａ６はさらに、セッション情報保持手段Ａ７またはパケット数保持手段Ａ８と受け渡しする各種データが、セッション情報保持手段Ａ７またはパケット数保持手段Ａ８のどのセッションに属するかの判定を行う。例えばパケットの発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）およびＴＣＰの発信元ポート番号（例えば図１９の１１４に格納されたデータ）・宛先ポート番号（例えば図１９の１１５に格納されたデータ）等、そのＴＣＰパケットが属するセッションを特定する情報を他の情報と併せてＡＣＫ番号変更部Ａ４またはシーケンス番号取得部Ａ５から取得し、それらの情報から例えばセッション情報保持手段Ａ７またはパケット数保持手段Ａ８におけるメモリ空間を特定して、該当するセッションのメモリ空間に保持する。
【００６９】
図４はセッション情報保持手段Ａ７の内部構造の例である。セッション情報保持手段Ａ７はセッション毎にメモリ空間を確保してセッション情報を保持する。例えばセッション１に割り当てられたメモリ空間には、パケットの発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）およびＴＣＰの発信元ポート番号（例えば図１９の１１４に格納されたデータ）・宛先ポート番号（例えば図１９の１１５に格納されたデータ）を格納するＣ２、セッションのモード情報Ｃ３（詳細は後述）、ＡＣＫ番号をアドレスＳ０〜Ｓｎ−１へ格納するためのセッションリストＣ４が保持されている。
【００７０】
セッション情報保持手段Ａ７の内部で管理される各セッションのＡＣＫ番号を保持するセッションリスト（例えば図４のセッション1におけるＣ４）はＦＩＦＯ型の構造を有している。例えば図４のセッション１において、セッション管理部Ａ６がそのセッションリストＣ４に新規のＡＣＫ番号を登録する場合には常に一番上のアドレスＳｎ−１へ格納され、セッションリストＣ４からＡＣＫ番号を取り出す場合には常に一番下のアドレスＳ０に格納されているＡＣＫ番号から取り出されるようになっている。アドレスＳ０にあるＡＣＫ番号が取り出されたら、その上のアドレスＳ１〜Ｓｎ−１に格納されているＡＣＫ番号のデータはそれぞれ１つ下のアドレスへと移動するようになっている。つまり、ある時点でのセッションリストＣ４において、アドレスＳ０に登録されているＡＣＫ番号はその時点で常にもっとも古い時刻に登録されたＡＣＫ番号であるため最初に取り出され、アドレスＳｎ−１に登録されているＡＣＫ番号はその時点のセッションリストＣ４が保持しているＡＣＫ番号の中でもっとも新しい時刻に登録されたＡＣＫ番号であるため最後に取り出されることになる。このようにして、セッション情報保持手段Ａ７からは、該当するセッションリストが保持しているものの中で登録された時刻の最も古いＡＣＫ番号が常に取り出されるようになっている。
【００７１】
セッションリストはセッション毎に保持されるが、通常保持できるセッションの数は有限である。セッション管理部Ａ６がセッション情報保持手段Ａ７に新しいセッションリストを作成しようとした時、もしセッション情報保持手段Ａ７に空いているセッションリストのメモリ空間が無かった場合には、例えばセッション管理部Ａ６はもっとも長時間にわたり更新されていないセッションリストをセッション情報保持手段Ａ７から削除して新しいセッションリストの作成に充てる等のことを行う。
【００７２】
セッションのモード情報（例えば図４のセッション１におけるＣ３）には、該当するセッションのモードの状態、つまりスロースタートモードであるか、輻輳回避モードであるかの情報が格納される。本実施の形態１においてはスロースタートモードを１、輻輳回避モードを０とする。いずれのモードにおいても、後述するある一定のルールに基づいて抽出された上り方向ＡＣＫはそのＡＣＫ番号（例えば図１９における１１１）が書き換えられた後にＷＡＮ側サーバ３０２へと転送されるが、それ以外の上り方向ＡＣＫはＷＡＮ側サーバ３０２へは転送されない。
【００７３】
本実施の形態１においては以下のような一定のルールにより上り方向ＡＣＫの抽出を行うものとする。すなわち、スロースタートモードにおいては上り方向のＴＣＰパケットを必ず１つ置きに抽出してそのＡＣＫ番号を書き換えるものとし、輻輳回避モードにおいては上り方向のＴＣＰパケットのＡＣＫ番号を常に書き換えるものとする。本発明における上り方向ＡＣＫの抽出ルールはこれに限らずどのように定義しても良いが、その抽出頻度についてはスロースタートモードのそれが輻輳回避モードのそれと同等か、もしくはそれよりも低く設定しなければならない。
【００７４】
パケット数保持手段Ａ８は、上り方向に送信したＴＣＰパケットの数をセッション毎に保持する。図５はパケット数保持手段Ａ８の内部構造の例である。各パケットカウンターＪ１、Ｊ３、Ｊ５には、各セッションの上り方向へ転送したＴＣＰパケットの数が格納される。これらのパケットカウンターＪ１、Ｊ３、Ｊ５は、スロースタートモードにおいて、上り方向ＡＣＫを２つに１つの割合でドロップさせるための処理に用いる。
【００７５】
前記セッション情報保持手段Ａ７と同じくパケットカウンターもセッション毎に設けられている。通常保持できるセッション数は有限である。セッション管理部Ａ６がパケット数保持手段Ａ８に新しいセッションに用いるパケットカウンターを作成しようとした時、もしパケット数保持手段Ａ８に空いているパケットカウンターのメモリ空間が無かった場合には、例えばセッション管理部Ａ６はもっとも長時間にわたり更新されていないパケットカウンターをパケット数保持手段Ａ８から削除して新しいセッションに用いるパケットカウンターの作成に充てる等のことを行う。
【００７６】
以上のモジュールを用いて以下のような処理を行うことにより、各セッションに流れるＴＣＰセグメントのスループットを抑える。
【００７７】
これより、図６〜図９を用いて基本型ＴＣＰシェーパーを構成する各モジュールの処理フローについて述べる。なお、前述のようにパケット転送部Ａ２以外のモジュールにおいてはＴＣＰパケットのみが取り扱われる。
【００７８】
図６はパケット転送部Ａ２の処理フローの例である。パケットの入力は、パケット入力部Ａ１からのものとパケット傍受部Ａ３からのものとがある。
【００７９】
パケット転送部Ａ２はまずステップｆ１１において、入力されたパケットがどこのモジュールからのものなのかを調べる。入力されたパケットがパケット入力部Ａ１からの入力であれば、パケット転送部Ａ２はステップｆ１２の処理を行う。入力されたパケットがパケット傍受部Ａ３からの入力であれば、そのパケットはＴＣＰシェーパーの処理が終了したパケットであることを意味する。従ってパケット転送部Ａ２はパケット出力部Ａ９へパケットを渡す。
【００８０】
ステップｆ１２において、パケット転送部Ａ２は入力されたパケットがＴＣＰパケットか否かを判定する。例えば背景技術における図２８のＩＰヘッダ１１３内のプロトコル番号フィールド５０１に記載している番号が６であればそのパケットはＴＣＰパケットであると判定できる。その場合、パケット転送部Ａ２はパケット傍受部Ａ３にパケットデータを渡し、ＴＣＰシェーパーの処理を開始する。入力されたパケットがＴＣＰパケットでない場合、パケット転送部Ａ２は通常の転送処理と同様にパケット出力部Ａ９へパケットを渡す。
【００８１】
図７はパケット転送部Ａ２からの入力パケットに対するパケット傍受部Ａ３の処理フローの例である。
【００８２】
ステップｆ２１において、パケット傍受部Ａ３は入力されたパケットデータから発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）および宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）を取り出す。次にステップｆ２２において、パケット傍受部Ａ３はステップｆ２１で取り出したパケットの発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレスから、上り方向のＴＣＰパケットなのか下り方向のＴＣＰパケットなのかを判別する。
【００８３】
入力されたパケットが上り方向の場合、パケット傍受部Ａ３は図３の経路Ｂ３を介してパケットデータをＡＣＫ番号変更部Ａ４に渡し、下り方向の場合は図３の経路Ｂ５を介してパケットデータをシーケンス番号取得部Ａ５に渡す。
【００８４】
ちなみに、ＡＣＫ番号変更部Ａ４またはシーケンス番号取得部Ａ５からパケット傍受部Ａ３に入力されたパケットデータに対してパケット傍受部Ａ３は何の処理も行わず、パケット転送部Ａ２にパケットデータを渡す。
【００８５】
図８は上り方向ＴＣＰパケットに対するＡＣＫ番号変更部Ａ４の処理フローの例である。
【００８６】
ＡＣＫ番号変更部Ａ４へ入力されるものはパケット傍受部Ａ３から渡される上り方向のＴＣＰパケットのみである（図３の経路Ｂ３）。また、セッション管理部Ａ６との間において、ＡＣＫ番号変更部Ａ４はＴＣＰパケットそのものでなく、パケットの属しているセッションに関する情報のみでのやり取りを行う。
【００８７】
ＡＣＫ番号変更部Ａ４は、ステップｆ４０１において、パケット傍受部Ａ３から入力された上り方向ＴＣＰパケットのＴＣＰデータ部に実データが存在するかどうかを判定する（背景技術の図１９におけるＴＣＰパケット１０２の中にはＴＣＰデータ１０４の部分に実データが存在しないものがある。以下、このような状態を「ＴＣＰデータ無し」と表す。逆にＴＣＰデータ１０４の部分に実データが存在する状態を「ＴＣＰデータ有り」と表す）。上り方向ＴＣＰパケットがＴＣＰデータ無しの場合そのＴＣＰパケットはＡＣＫなので、ＡＣＫ番号変更部Ａ４はステップｆ４０２の処理を行う。
【００８８】
上り方向ＴＣＰパケットがＴＣＰデータ有りの場合、本実施の形態１におけるＡＣＫ番号変更部Ａ４はその上り方向ＴＣＰパケットをドロップする。つまり、図１におけるＬＡＮ側クライアント３０１からのＴＣＰデータ有り上りＴＣＰパケットをＷＡＮ側サーバ３０２へ送らないようにする。その理由としてはＴＣＰデータ有りパケットに対するＡＣＫをＷＡＮ側サーバ３０２へ送らないことでＴＣＰのＲＴＴをより大きくし、輻輳状態を発生しやすくすることが挙げられる。ＴＣＰデータ有りの上り方向ＴＣＰパケットがそれほど多くないことが明らかまたは予測可能な場合、ＡＣＫ番号変更部Ａ４はそれらのパケットをドロップする代わりに、再びパケット転送部Ａ２へ戻した後、パケット出力部Ａ９を介して中継装置Ａ１１より出力するようにしても構わない。しかしながら本実施の形態１においては、ＡＣＫ番号変更部Ａ４がＴＣＰデータ有りの上り方向ＴＣＰパケットをドロップするという前提で話を進める。
【００８９】
ステップｆ４０２において、ＡＣＫ番号変更部Ａ４はセッション管理部Ａ６を経由し、セッション情報保持手段Ａ７から処理中のパケットが属しているセッションのモード情報（例えば図４のセッション１においてはＣ３）を取得する。ステップｆ４０３において、ＡＣＫ番号変更部Ａ４はステップｆ４０２にて取得したモード情報を元に、現在のセッションの動作モードがスロースタートモードか輻輳回避モードかを判定する。
【００９０】
セッションの動作モードが輻輳回避モードである場合、ＡＣＫ番号変更部Ａ４はステップｆ４０４においてセッション情報保持手段Ａ７よりセッション管理部Ａ６経由にて現在処理しているパケットが属するセッションリスト（例えば図４のセッション１であればＣ４）からその時点でもっとも古いＡＣＫ番号（例えば図４のセッション１であればアドレスＳ０に格納されているデータ）を取得し、ステップｆ４０５においてパケット傍受部Ａ３が一時的に保持するＴＣＰパケットのＡＣＫ番号を、先ほど取得したＡＣＫ番号（例えば図４のセッション１であればＳ０）に書き換える。その後、ＡＣＫ番号変更部Ａ４はＡＣＫ番号の書き換えが完了したＴＣＰパケットをパケット傍受部Ａ３へ渡す。もしセッションリストが空の場合は、ＡＣＫ番号変更部Ａ４はそこで一時的に保持するＴＣＰパケットのＡＣＫ番号の書き換えを行わずに、ＴＣＰパケットをパケット傍受部Ａ３へ渡す。
【００９１】
セッションの動作モードがスロースタートモードである場合、ＡＣＫ番号変更部Ａ４はステップｆ４０６においてセッション管理部Ａ６経由にてパケット数保持手段Ａ８から現在処理中のパケットの属するセッションのパケットカウンター（例えば図４のセッション１であればＪ１）の値を取り出し、ステップｆ４０７においてそのパケットカウンターの値が偶数であるか否かを判定する。パケットカウンターの値が偶数の場合にはＡＣＫ番号変更部Ａ４はステップｆ４０８の処理を行い、奇数の場合にはステップｆ４１１の処理を行う。（なお、ステップｆ４０７の分岐は本実施の形態１と逆に設定しても良い。すなわち、奇数の場合にステップｆ４０８の処理を行うという設定でもよい。）
ステップｆ４１１において、ＡＣＫ番号変更部Ａ４はセッション管理部Ａ６経由にてパケット数保持手段Ａ８内の該当するパケットカウンター（例えば図４のセッション１であればＪ１）を１インクリメントした後、ＴＣＰパケットをドロップする。これにより、「上り方向のＴＣＰパケットを必ず１つ置きに抽出してそのＡＣＫ番号を書き換える」という、本実施の形態１におけるスロースタートモードが実現する。
【００９２】
ステップｆ４０８においてＡＣＫ番号変更部Ａ４は、セッション管理部Ａ６経由にてセッション情報保持手段Ａ７のうちＡＣＫ番号変更部Ａ４が一時的に保持しているＴＣＰパケットが属するセッションリスト（例えば図４のセッション１であればＣ４）からその時点でもっとも古いＡＣＫ番号（例えば図４のセッション１であればアドレスＳ０に格納されているデータ）を取得し、ステップｆ４０９にてパケットのＡＣＫ番号を更新する。（ただし、ステップｆ４０９において該当するセッションリスト、例えば図４のセッション１であればＣ４が空の場合、ＡＣＫ番号変更部Ａ４はＡＣＫ番号の更新を行わない。）
その後ステップｆ４１０において、ＡＣＫ番号変更部Ａ４はパケット数保持手段Ａ８に該当するセッションのパケットカウンター（例えば図４のセッション１であればＪ１）を１インクリメントした後、経路Ｂ４を介しパケット傍受部Ａ３に処理が終了したＴＣＰパケットを渡す。
【００９３】
図９はシーケンス番号取得部Ａ５の処理フローの例である。シーケンス番号取得部Ａ５へ入力されるものはパケット傍受部Ａ３から渡される下り方向のＴＣＰパケットのみである（図３の経路Ｂ５）。また、セッション管理部Ａ６との間において、シーケンス番号取得部Ａ５はＴＣＰパケットそのものでなく、パケットの属しているセッションに関する情報のみでのやり取りを行う。
【００９４】
ステップｆ３１において、シーケンス番号取得部Ａ５は入力された下り方向ＴＣＰパケットのＴＣＰデータ部に実データが存在するかどうかを判定する。すなわち、ＴＣＰデータ有りなのかＴＣＰデータ無しなのかを判定する。ＴＣＰデータ無しの場合、シーケンス番号取得部Ａ５はその下り方向ＴＣＰパケットに対して何も処理を行わずにパケット傍受部Ａ３へパケットデータを渡す。ＴＣＰデータ有りの場合、シーケンス番号取得部Ａ５は、ステップｆ３２の処理を実行する。
【００９５】
ステップｆ３２において、シーケンス番号取得部Ａ５は処理中の下り方向ＴＣＰパケットからＴＣＰデータ（例えば背景技術の図１９においてはＴＣＰパケット１０２の中のＴＣＰデータ１０４）のデータ長とシーケンス番号を取得する。ステップｆ３３において、シーケンス番号取得部Ａ５はセッション管理部Ａ６経由でパケットが属しているセッションのリストＣ４を、セッション情報保持手段Ａ７から取得する。
【００９６】
ステップｆ３４において、シーケンス番号取得部Ａ５は処理中の下り方向ＴＣＰパケットに該当するセッションリスト（例えば図４のセッション１であればＣ４）から最新のＡＣＫ番号（例えば図４のセッション１であればアドレスＳｎ−１に格納されているデータ）をセッション情報保持手段Ａ７よりセッション管理部Ａ６経由にて取得する。次に、シーケンス番号取得部Ａ５は先ほどのステップｆ３２において取得したＴＣＰデータ長とシーケンス番号との加算値を算出する。そして、その算出値と、先ほど取得した最新のＡＣＫ番号（例えば図４のセッション１であればアドレスＳｎ−１に格納されているデータ）とを比較する。
【００９７】
ここで最新のＡＣＫ番号（例えば図４のセッション１であればアドレスＳｎ−１に格納されているデータ）がＴＣＰデータ長とシーケンス番号との加算値より大きい場合、シーケンス番号取得部Ａ５は処理中の下り方向ＴＣＰパケットが再送パケットでないと判定する。その後ステップｆ３５において、シーケンス番号取得部Ａ５は先ほどのステップｆ３２において取得した処理中の下り方向ＴＣＰパケットのシーケンス番号とＴＣＰデータ長との加算値をセッション情報保持手段Ａ７に保持された該当するセッションリストに追加登録する。
【００９８】
最新のＡＣＫ番号（例えば図４のセッション１であればＳｎ−１）がＴＣＰデータ長とシーケンス番号との加算値より小さい場合、シーケンス番号取得部Ａ５は処理中の下り方向ＴＣＰパケットが再送パケットであると判定する。この状態は輻輳が発生した（パケットロス、ＲＴＯオーバー）とみなされるので、シーケンス番号取得部Ａ５はステップｆ３６において、セッション情報保持手段Ａ７中に保持された該当セッションのモード情報（例えば図４のセッション１であればＣ３）を輻輳回避モードに設定する。
【００９９】
その後ステップｆ３７にて、シーケンス番号取得部Ａ５はセッション情報保持手段Ａ７からその時点でもっとも古いＡＣＫ番号（例えば図４のセッション１であればアドレスＳ０に格納されているデータ）を取り出し、そのＡＣＫ番号を持つＴＣＰデータ無しの上り方向ＴＣＰパケットを、セッション情報保持手段Ａ７のＣ２に格納されている送信元ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）・送信元ポート番号（例えば図１９の１１４に格納されたデータ）・宛先ポート番号（例えば図１９の１１５に格納されたデータ）を元に新たに構築し、その上り方向ＴＣＰパケットと、処理済みの下り方向ＴＣＰパケットとをＢ６にてパケット傍受部Ａ３に渡す。もし処理中の下り方向ＴＣＰパケットに該当するセッションリストがセッション情報保持手段Ａ７に存在しない場合、つまり新規セッションの場合、シーケンス番号取得部Ａ５はセッション管理部Ａ６を介してセッション情報保持手段Ａ７内に新規のセッションリストを作成する。
【０１００】
以上の構成および処理フローを有する基本型ＴＣＰシェーパーの動作例を説明する。まず、図１０・図１１を用いて輻輳回避モード時の基本型ＴＣＰシェーパーの動作例について述べる。図１０はサーバ４０１・クライアント４０２・ＴＣＰシェーパーを搭載した中継装置（以下、「ＴＣＰシェーパー中継装置」と称す）４０３間での輻輳回避モード時のＴＣＰによる通信の例である。サーバ４０１・クライアント４０２間の通信経路途中にはＴＣＰシェーパー中継装置４０３がある。このＴＣＰシェーパー中継装置４０３の内部構成は図３〜図５に示すものと同一とする。さらに、ＴＣＰシェーパー中継装置４０３がサーバ４０１・クライアント４０２間の通信経路途中で取り扱うパケットは、前述の図６〜図９に示すフロー処理がなされるものとする。サーバ４０１はクライアント４０２に対してＴＣＰで毎回１０００バイトずつＴＣＰデータを含むパケット（Ｋ１０、Ｋ３０、Ｋ４０、Ｋ６０、Ｋ７０、Ｋ９０）を送信する。クライアント４０２はサーバ４０１に対しＴＣＰデータを含まないパケット（Ｍ２、Ｍ５、Ｍ８）、つまりサーバ４０１から送信されたＴＣＰデータを含むパケット（Ｋ１０、Ｋ３０、Ｋ４０、Ｋ６０、Ｋ７０）に対するＡＣＫを送信する。
【０１０１】
図１１は、図１０の通信時におけるセッション情報保持手段Ａ７でのセッションリストの遷移例である。それらのセッションリストの遷移は図４のセッション保持手段Ａ７におけるセッション１上で行われるものとする。すなわち、ＴＣＰシェーパー中継装置４０３のセッション情報保持手段Ａ７のセッションリストＣ４は図１１の状態Ｌ１から開始され、値１１００１と値１０００１がそれぞれ状態Ｌ１におけるセッションリストＣ４のアドレスＳ０およびＳ１にあらかじめ格納されている。値１０００１は値１１００１より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図１０・図１１の通信は輻輳回避モードなので、状態Ｌ１時のセッション１のモード情報Ｃ３には、輻輳回避モードであることを示す値０が格納されているものとする。
【０１０２】
最初に、サーバ４０１がパケットＫ１０を、クライアント４０２に対して送信する。次に、サーバ４０１・クライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＫ１０を受信する。パケットＫ１０は下り方向なので、シーケンス番号取得部Ａ５は前述図９に示すｆ３１からのフローに従い、後述するフローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１０３】
ｆ３１においてパケットＫ１０はＴＣＰデータを含むので、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５はパケットＫ１０のシーケンス番号とＴＣＰデータ長を取得し（図９のｆ３２）、パケットＫ１０が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ａ７に保持されているパケットＫ１０のセッションリストがどれなのかを特定する（図９のｆ３３）。本実施の形態１においては、パケットＫ１０のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ａ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットＫ１０のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０１０４】
その後、シーケンス番号取得部Ａ５はパケットＫ１０が再送ＴＣＰパケットか否かを例えば以下のようにして判断する（図９のｆ３４）。
【０１０５】
図１０においてパケットＫ１０はシーケンス番号＝１１００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＫ１０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１１００１  ＋  １０００  ＝  １２００１と加算する。
【０１０６】
次にＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１２００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ１におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１１００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１２００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＫ１０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値をセッション情報保持手段Ａ７のセッションリストＣ４に追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１２００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ２に格納する。
【０１０７】
その後、シーケンス番号取得部Ａ５はパケットＫ１０をパケットＭ１としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ１はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ１から状態Ｌ２へと遷移する。
【０１０８】
パケットＭ１を受信したクライアント４０２は、パケットＭ１のＡＣＫとして、ＡＣＫ番号１２００１を持ち、かつＴＣＰデータを含まないパケットＭ２をサーバ４０１へ送信する。その途中でサーバ４０１とクライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＭ２を受信する。パケットＭ２は上り方向なので、ＡＣＫ番号変更部Ａ４は図８に示すｆ４０１からのフローに従ってクライアント４０２から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０１へ渡すことによりサーバ４０１からクライアント４０２へのデータ送信の帯域を抑えるための処理を行う。
【０１０９】
ｆ４０１においてパケットＭ２はＴＣＰデータを含まないので、ＴＣＰシェーパー中継装置４０３のＡＣＫ番号変更部Ａ４は、パケットＭ２が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ａ７に保持されているパケットＭ２のセッションリストがどれなのかを特定する（図８のｆ４０２）。本実施の形態１においては、パケットＭ２のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ａ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットＭ２のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０１１０】
その後、ＡＣＫ番号変更部Ａ４は、パケットＭ２のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値０（輻輳回避モードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＭ２に対し、図８に示すｆ４０４からのフローに従って輻輳回避モードにおける処理を行う。
【０１１１】
ｆ４０４においてＴＣＰシェーパー中継装置４０３のＡＣＫ番号変更部Ａ４はその時点でセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｌ２におけるＳ０に格納された値１０００１を取得し（図８のｆ４０４。その結果、セッションリストＣ４のＳ０の値１０００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移る）、その値１０００１をパケットＭ２のＡＣＫ番号に上書きする（図８のｆ４０５）。パケットＭ２のＡＣＫ番号が書き換えられたパケットＫ２０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりサーバ４０１へと転送される（図８のｆ４１２）。このとき、セッションリストＣ４は図１１に示すように状態Ｌ２から状態Ｌ３へと遷移する。
【０１１２】
この時点においてサーバ４０１にとっては既にクライアント４０２へ送信したパケットＫ１０に対するＡＣＫがまだ返信されていないことになるが、本実施の形態１におけるパケットＫ２０を受信したサーバ４０１はまだ輻輳が起きていないと判断し、引き続き次のデータが格納された２つのパケットＫ３０、Ｋ４０を連続してクライアント４０２に送信するものとする。その途中でサーバ４０１・クライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＫ３０およびＫ４０を受信する。パケットＫ３０およびＫ４０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＫ１０の場合と同様に図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１１３】
すなわちパケットＫ３０は前述のパケットＫ１０の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ａ５はパケットＫ３０が再送ＴＣＰパケットか否かを、前述のパケットＫ１０の場合と同様に以下のようにして判断する（図９のｆ３４）。
【０１１４】
図１０においてパケットＫ３０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＫ３０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ３におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１２００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＫ３０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１３００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ２に格納する。その後、シーケンス番号取得部Ａ５はパケットＫ３０をパケットＭ３としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ３はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ３から状態Ｌ４へと遷移する。
【０１１５】
パケットＫ４０に対しても前述のパケットＫ３０の場合と同様な処理が行われる。すなわち、パケットＫ４０がＴＣＰデータを含み、そのセッションリストがセッション１のセッションリストＣ４であると特定されるので（図９のｆ３１〜ｆ３３）、シーケンスＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、パケットＫ４０のシーケンス番号１３００１とＴＣＰデータ長１０００とを加算した値１４００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ４におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１３００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１４００１のほうが大きいので、シーケンス番号取得部Ａ５はＫ４０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１４００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ａ５はパケットＫ４０をパケットＭ４としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ４はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ４から状態Ｌ５へと遷移する。
【０１１６】
パケットＭ３・Ｍ４を受信したクライアント４０２は、このようにパケットＭ３、Ｍ４を短い間隔で受信した場合には、パケットＭ３、Ｍ４に対するＡＣＫをパケットＭ５に一つにまとめてサーバ４０１に送信するものとする。パケットＭ５は、ＡＣＫ番号１４００１を持ち、かつＴＣＰデータを含まない。その途中でサーバ４０１とクライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＭ５を受信する。パケットＭ５は上り方向なので、ＡＣＫ番号変更部Ａ４は前述のＡＣＫパケットＭ２の場合と同様に、再び図８に示すｆ４０１からのフローに従ってクライアント４０２から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０１へ渡すことによりサーバ４０１からクライアント４０２へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＭ５は前述のパケットＭ２の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１１７】
その後、ＡＣＫ番号変更部Ａ４は、パケットＭ５のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値０（輻輳回避モードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＭ５に対し、図８に示すｆ４０４からのフローに従って輻輳回避モードにおける処理を行う。
【０１１８】
ｆ４０４においてＴＣＰシェーパー中継装置４０３のＡＣＫ番号変更部Ａ４はその時点でセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｌ５におけるＳ０に格納された値１１００１を取得し（図８のｆ４０４。その結果、セッションリストＣ４のＳ０の値１１００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移る）、その値１１００１をパケットＭ５のＡＣＫ番号に上書きする（図８のｆ４０５）。パケットＭ５のＡＣＫ番号が書き換えられたパケットＫ５０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりサーバ４０１へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ５から状態Ｌ６へと遷移する。
【０１１９】
この時点においてもサーバ４０１にとっては既にクライアント４０２へ送信したパケットＫ１０・Ｋ３０・Ｋ４０に対するＡＣＫがまだ返信されていないことになるが、本実施の形態１におけるパケットＫ５０を受信したサーバ４０１は未だ輻輳が起きていないと判断し、引き続き次のデータが格納された２つのパケットＫ６０、Ｋ７０を連続してクライアント４０２に送信するものとする。その途中でサーバ４０１・クライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＫ６０およびＫ７０を受信する。パケットＫ６０およびＫ７０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＫ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１２０】
すなわちまずパケットＫ６０は前述のパケットＫ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、パケットＫ６０のシーケンス番号１４００１とＴＣＰデータ長１０００とを加算した値１５００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ６におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１４００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１５００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＫ６０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１５００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ａ５はパケットＫ６０をパケットＭ６としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ６はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ６から状態Ｌ７へと遷移する。
【０１２１】
パケットＫ７０に対しても前述のパケットＫ６０の場合と同様な処理が行われる。すなわち、パケットＫ７０がＴＣＰデータを含み、そのセッションリストがセッション１のセッションリストＣ４であると特定されるので（図９のｆ３１〜ｆ３３）、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、パケットＫ７０のシーケンス番号１５００１とＴＣＰデータ長１０００とを加算した値１６００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ７におけるＳ３に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１５００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１６００１のほうが大きいので、シーケンス番号取得部Ａ５はＫ７０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１６００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ４に格納する。その後、シーケンス番号取得部Ａ５はパケットＫ７０をパケットＭ７としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ７はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ７から状態Ｌ８へと遷移する。
【０１２２】
パケットＭ６・Ｍ７を受信したクライアント４０２は、前述のパケットＭ３およびＭ４の場合と同様にパケットＭ６、Ｍ７を短い間隔で受信したので、パケットＭ６、Ｍ７に対するＡＣＫをパケットＭ８に一つにまとめてサーバ４０１に送信する。パケットＭ８は、ＡＣＫ番号１６００１を持ち、かつＴＣＰデータを含まない。その途中でサーバ４０１とクライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＭ８を受信する。パケットＭ８は上り方向なので、ＡＣＫ番号変更部Ａ４は図８に示すｆ４０１からのフローに従ってクライアント４０２から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０１へ渡すことによりサーバ４０１からクライアント４０２へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＭ８は前述のＡＣＫパケットＭ２等の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１２３】
その後、ＡＣＫ番号変更部Ａ４は、パケットＭ８のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値０（輻輳回避モードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＭ８に対し、図８に示すｆ４０４からのフローに従って輻輳回避モードにおける処理を行う。
【０１２４】
ｆ４０４においてＴＣＰシェーパー中継装置４０３のＡＣＫ番号変更部Ａ４はその時点でセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｌ８におけるＳ０に格納された値１２００１を取得し（図８のｆ４０４。その結果、セッションリストＣ４のＳ０の値１２００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移り、Ｓ４に格納された値がＳ３に移る）、その値１２００１をパケットＭ８のＡＣＫ番号に上書きする（図８のｆ４０５）。パケットＭ８のＡＣＫ番号が書き換えられたパケットＫ８０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりサーバ４０１へと転送される。このとき、セッションリストＣ４は図１１に示すように状態Ｌ８から状態Ｌ９へと遷移する。なお、このときのパケットＫ８０は、サーバ４０１にとって結果的にパケットＫ１０に対するＡＣＫとなっている。
【０１２５】
この時点においてサーバ４０１にとっては既にクライアント４０２へ送信したパケットＫ１０・Ｋ３０・Ｋ４０・Ｋ６０・Ｋ７０のうちパケットＫ１０に対するＡＣＫは返信されてきているが、残りの送信パケットＫ３０・Ｋ４０・Ｋ６０・Ｋ７０に対するＡＣＫがまだ返信されていないことになる。ここに至り本実施の形態１におけるＡＣＫパケットＫ８０を受信したサーバ４０１はパケットＫ３０に対するＡＣＫ（ＡＣＫ番号１３００１を持つパケット）をクライアント４０２から受け取っていないために、サーバ４０１においてパケットＫ３０に対するＲＴＯがオーバーしたものとする。
【０１２６】
そこでサーバ４０１はパケットＫ３０以降の送信パケットにおいて輻輳が発生したと判断し、クライアント４０２に対してパケットＫ３０と同様の内容を持つパケットＫ９０を再送する。その途中でサーバ４０１とクライアント４０２間の通信経路途中にあるＴＣＰシェーパー中継装置４０３が一旦そのパケットＫ９０を受信する。パケットＫ９０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＫ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１２７】
すなわちまずパケットＫ９０は前述のパケットＫ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ａ５はパケットＫ９０が再送ＴＣＰパケットか否かを例えば以下のように
して判断する（図９のｆ３４）。
【０１２８】
図１０においてパケットＫ９０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＫ９０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｌ９におけるＳ３に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１６００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが小さいので、シーケンス番号取得部Ａ５はパケットＫ９０が再送ＴＣＰパケットであると判断し、再送パケット用の処理を行う（図９のｆ３６〜ｆ３７）。この場合シーケンス番号取得部Ａ５は、セッション情報保持手段Ａ７におけるセッション１のモード情報Ｃ３を、輻輳回避モードであることを示す値０に更新する（図９のｆ３６、しかしもともと輻輳回避モードであるためモード情報Ｃ３の値は変化しない）。
【０１２９】
サーバ４０１は輻輳状態の間、ＴＣＰデータを含むパケットをクライアント４０２へ再送のみ行い、新たなＴＣＰデータをクライアント４０２に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ４０１を輻輳状態からなるべく早く復帰させるために、ＴＣＰシェーパー中継装置４０３は例えばサーバ４０１へのＡＣＫを生成し、送信する。
【０１３０】
すなわちＴＣＰシェーパー中継装置４０３のシーケンス番号取得部Ａ５は、セッション情報保持手段Ａ７のＣ２に格納されている送信元ＩＰアドレス（例えば図２８の５０２）・宛先ＩＰアドレス（例えば図２８の５０３）・送信元ポート番号（例えば図１９の１１４）・宛先ポート番号（例えば図１９の１１５）を元に、サーバ４０１を輻輳状態から復帰させるために上り方向のＴＣＰデータ無しパケットＫ９１を生成し、パケット傍受部Ａ３へ渡す。
【０１３１】
その次に、ＴＣＰシェーパー中継装置４０３のＡＣＫ番号変更部Ａ４は、先ほどシーケンス番号取得部Ａ５に置いて生成されたパケットＫ９１をパケット傍受部Ａ３から入力し、その時点でセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｌ９にてＳ０に格納されている値１３００１を取得し（その結果、セッションリストＣ４のＳ０の値１３００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移る。）、その値１３００１をパケットＫ９１のＡＣＫ番号に書き込む（図９のｆ３７）。ＡＣＫ番号１３００１が書き込まれたパケットＫ９１はパケット傍受部Ａ３へと渡され（図９のｆ３８）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりサーバ４０１へと送信される。
【０１３２】
その後、ＴＣＰシェーパー中継装置４０３はセッション情報保持手段Ａ７にＡＣＫ番号を格納せず、パケットＫ９０をパケットＭ９としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＭ９はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０３よりクライアント４０２へと転送される。このとき、セッションリストＣ４は状態Ｌ９から状態Ｌ１０へと遷移する。
【０１３３】
次に、図１２・図１３を用いてスロースタートモード時の基本型ＴＣＰシェーパーの動作例について述べる。図１２はサーバ４０４・クライアント４０５・ＴＣＰシェーパー中継装置４０６間でのスロースタートモード時のＴＣＰによる通信の例である。サーバ４０４・クライアント４０５間の通信経路途中にはＴＣＰシェーパー中継装置４０６がある。このＴＣＰシェーパー中継装置４０６の内部構成は図３〜図５に示すものと同一とする。さらに、ＴＣＰシェーパー中継装置４０６がサーバ４０４・クライアント４０５間の通信経路途中で取り扱うパケットは、前述の図６〜図９に示すフロー処理がなされるものとする。サーバ４０４はクライアント４０５に対してＴＣＰで毎回１０００バイトずつＴＣＰデータを含むパケット（Ｐ１０、Ｐ３０、Ｐ５０、Ｐ７０、Ｐ８０、Ｐ１００、Ｐ１２０）を送信する。クライアント４０５はサーバ４０４に対しＴＣＰデータを含まないパケット（Ｒ２、Ｒ４、Ｒ６、Ｒ９、Ｒ１１）、つまりサーバ４０４から送信されたＴＣＰデータを含むパケット（Ｐ１０、Ｐ３０、Ｐ５０、Ｐ７０、Ｐ８０、Ｐ１００）に対するＡＣＫを送信する。
【０１３４】
図１３は、図１２の通信時におけるセッション情報保持手段Ａ７でのセッションリストの遷移例である。それらのセッションリストの遷移は図４のセッション保持手段Ａ７におけるセッション１上で行われるものとする。すなわち、ＴＣＰシェーパー中継装置４０６のセッション情報保持手段Ａ７のセッションリストＣ４は図１３の状態Ｑ１から開始され、値１１００１と値１０００１がそれぞれ状態Ｑ１におけるセッションリストＣ４のアドレスＳ０およびＳ１にあらかじめ格納されている。値１０００１は値１１００１より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図１２・図１３の通信はスロースタートモードなので、状態Ｑ１時のセッション１のモード情報Ｃ３には、スロースタートモードであることを示す値１が格納されているものとする。さらにパケット数保持手段Ａ８内のセッション１のパケットカウンターＪ１には偶数の値が格納されているものとする。サーバ４０４がスロースタートモードの場合、ＴＣＰシェーパー中継装置４０６は、このパケット数保持手段Ａ８内のパケットカウンターを後述するような形で用いることにより、なるべく早く輻輳状態を引き起こして輻輳回避モードへと切り替えさせる。こうすることによって、ＴＣＰシェーパー中継装置４０６はスロースタートモードにおけるサーバ４０４からクライアント４０５への通信帯域の急激な増大を抑えることが出来る。
【０１３５】
最初に、サーバ４０４がパケットＰ１０を、クライアント４０５に対して送信する。次に、サーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６はパケットＰ１０を受信する。パケットＰ１０は下り方向なので、シーケンス番号取得部Ａ５は前述の輻輳回避モードにおける基本型ＴＣＰシェーパーの動作例の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１３６】
パケットＰ１０は前述の輻輳回避モードにおける基本型ＴＣＰシェーパーの動作例の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ａ５はパケットＰ１０が再送ＴＣＰパケットか否かを例えば以下のようにして判断する（図９のｆ３４）。
【０１３７】
図１２においてパケットＰ１０はシーケンス番号＝１１００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＰ１０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１１００１  ＋  １０００  ＝  １２００１と加算する。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１２００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ１におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１１００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１２００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ１０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値をセッション情報保持手段Ａ７のセッションリストＣ４に追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１２００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ２に格納する。その後、シーケンス番号取得部Ａ５はパケットＰ１０をパケットＲ１としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ１はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される（図９のｆ３８）。このとき、セッションリストＣ４は図１３に示すように状態Ｑ１から状態Ｑ２へと遷移する。
【０１３８】
パケットＲ１を受信したクライアント４０５は、パケットＲ１のＡＣＫとして、ＡＣＫ番号１２００１を持ち、かつＴＣＰデータを含まないパケットＲ２をサーバ４０４へ送信する。その途中でサーバ４０４とクライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＲ２を受信する。パケットＲ２は上り方向なので、ＡＣＫ番号変更部Ａ４は前述の輻輳回避モードにおける基本型ＴＣＰシェーパーの動作例の場合と同様に、図８に示すｆ４０１からのフローに従ってクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡すかあるいはサーバ４０４に対するＡＣＫパケットをドロップすることによりサーバ４０４からクライアント４０５へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＲ２は前述の輻輳回避モードにおける基本型ＴＣＰシェーパーの動作例の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１３９】
その後、ＡＣＫ番号変更部Ａ４は、パケットＲ２のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＲ２に対し、図８に示すｆ４０６からのフローに従ってスロースタートモードにおける処理を行う。
【０１４０】
ｆ４０６においてＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、パケットＲ２が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、パケット数保持手段Ａ８に保持されているパケットＲ２のパケットカウンタがどれなのかを特定し、パケットカウンタの値を取得する。本実施の形態１においては、パケットＲ２のＩＰアドレス情報およびポート番号情報が図５に示すパケット数保持手段Ａ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｊ２と一致し、その結果パケットＲ２のパケットカウンタがセッション１のパケットカウンタＪ１であると特定されるものとする。すなわちｆ４０６ではＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、パケットカウンタＪ１の値を取得する。
【０１４１】
ｆ４０７においてパケットカウンタＪ１には偶数の値が格納されているので、ＡＣＫ番号変更部Ａ４はクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４はセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｑ２におけるＳ０に格納された値１０００１を取得し（図８のｆ４０８。その結果、セッションリストＣ４のＳ０の値１０００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移る）、その値１０００１をパケットＲ２のＡＣＫ番号に上書きし（図８のｆ４０９）、パケットカウンタＪ１の値を１インクリメントして更新する（図８のｆ４１０。その結果、パケットカウンタＪ１の値は奇数になる。）。パケットＲ２のＡＣＫ番号が書き換えられたパケットＰ２０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりサーバ４０４に転送へと転送される（図８のｆ４１２）。このとき、セッションリストＣ４は図１３に示すように状態Ｑ２から状態Ｑ３へと遷移する。
【０１４２】
この時点においてサーバ４０４にとっては既にクライアント４０５へ送信したパケットＰ１０に対するＡＣＫが返信されていないことになるが、本実施の形態１におけるパケットＰ２０を受信したサーバ４０４はまだ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットＰ３０を、クライアント４０５に送信するものとする。その途中でサーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＰ３０を受信する。パケットＰ３０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＰ１０の場合と同様に、再び図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１４３】
すなわちパケットＰ３０は前述のパケットＰ１０の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ａ５はパケットＰ３０が再送ＴＣＰパケットか否かを、前述のパケットＰ１０の場合と同様に以下のようにして判断する（図９のｆ３４）。
【０１４４】
図１２においてパケットＰ３０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＰ３０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ３におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１２００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ３０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１３００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ２に格納する。その後、シーケンス番号取得部Ａ５はパケットＰ３０をパケットＲ３としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ３はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ３から状態Ｑ４へと遷移する。
【０１４５】
パケットＲ３を受信したクライアント４０５は、パケットＲ３のＡＣＫとして、ＡＣＫ番号１３００１を持ち、かつＴＣＰデータを含まないパケットＲ４をサーバ４０４に送信する。その途中でサーバ４０４とクライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＲ４を受信する。パケットＲ４は上り方向なので、ＡＣＫ番号変更部Ａ４は前述のＡＣＫパケットＲ２の場合と同様に、再び図８に示すｆ４０１からのフローに従ってクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡すかあるいはサーバ４０４に対するＡＣＫパケットをドロップすることによりサーバ４０４からクライアント４０５へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＲ４は前述のパケットＲ２の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１４６】
その後、ＡＣＫ番号変更部Ａ４は、パケットＲ４のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＲ４に対し、図８に示すｆ４０６からのフローに従ってスロースタートモードにおける処理を行う。
【０１４７】
ｆ４０６においてＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、前述のＡＣＫパケットＲ２の場合と同様にして、パケットＲ４のパケットカウンタがセッション１のパケットカウンタＪ１であると特定し、そこに格納されている値を取得する。
【０１４８】
ｆ４０７においてパケットカウンタＪ１には奇数の値が格納されているので、ＡＣＫ番号変更部Ａ４はサーバ４０４に対するＡＣＫパケットをドロップする処理を実行する。つまり、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４はパケットカウンタＪ１の値を１インクリメントして更新し（図８のｆ４１１。その結果、パケットカウンタＪ１の値は偶数になる。）、パケットＲ４をドロップする（図８のｆ４１３）。このとき、セッションリストＣ４は図１３に示すように状態Ｑ４から状態Ｑ５へと遷移する。
【０１４９】
この時点においてサーバ４０４にとっては既にクライアント４０５へ送信したパケットＰ１０およびＰ３０に対するＡＣＫが未だ返信されていないことになるが、本実施の形態１におけるサーバ４０４は輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットＰ５０を、クライアント４０５に送信するものとする。その途中でサーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＰ５０を受信する。パケットＰ５０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＰ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１５０】
すなわちまずパケットＰ５０は前述のパケットＰ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、パケットＰ５０のシーケンス番号１３００１とＴＣＰデータ長１０００とを加算した値１４００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ５におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１３００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１４００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ５０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１４００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ａ５はパケットＰ５０をパケットＲ５としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ５はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ５から状態Ｑ６へと遷移する。
【０１５１】
パケットＲ５を受信したクライアント４０５は、パケットＲ５のＡＣＫとして、ＡＣＫ番号１４００１を持ち、かつＴＣＰデータを含まないパケットＲ６をサーバ４０４に送信する。その途中でサーバ４０４とクライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＲ６を受信する。パケットＲ６は上り方向なので、ＡＣＫ番号変更部Ａ４は図８に示すｆ４０１からのフローに従ってクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡すかあるいはサーバ４０４に対するＡＣＫパケットをドロップすることによりサーバ４０４からクライアント４０５へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＲ６は前述のパケットＲ２等の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１５２】
その後、ＡＣＫ番号変更部Ａ４は、パケットＲ６のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＲ６に対し、図８に示すｆ４０６からのフローに従ってスロースタートモードにおける処理を行う。
【０１５３】
ｆ４０６においてＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、前述のパケットＲ２等の場合と同様にして、パケットＲ６のパケットカウンタがセッション１のパケットカウンタＪ１であると特定し、そこに格納されている値を取得する。
【０１５４】
ｆ４０７においてパケットカウンタＪ１には偶数の値が格納されているので、ＡＣＫ番号変更部Ａ４はクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４はセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｑ６におけるＳ０に格納された値１１００１を取得し（図８のｆ４０８。その結果、セッションリストＣ４のＳ０の値１１００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移る。）、その値１１００１をパケットＲ６のＡＣＫ番号に上書きし（図８のｆ４０９）、パケットカウンタＪ１の値を１インクリメントして更新する（図８のｆ４１０。その結果、パケットカウンタＪ１の値は奇数になる。）。パケットＲ６のＡＣＫ番号が書き換えられたパケットＰ６０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりサーバ４０４へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ６から状態Ｑ７へと遷移する。
【０１５５】
この時点においてサーバ４０４にとっては既にクライアント４０５へ送信したパケットＰ１０・Ｐ３０・Ｐ５０に対するＡＣＫがまだ返信されていないことになるが、本実施の形態１におけるパケットＰ６０を受信したサーバ４０４はやはりまだ輻輳が起きていないと判断し、引き続き次のデータが格納された２つのパケットＰ７０・Ｐ８０を連続してクライアント４０５に送信ものとする。その途中でサーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＰ７０およびＰ８０を受信する。パケットＰ７０およびＰ８０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＰ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１５６】
すなわちまずパケットＰ７０は前述のパケットＰ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、パケットＰ７０のシーケンス番号１４００１とＴＣＰデータ長１０００とを加算した値１５００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ７におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１４００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１５００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ７０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１５００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ａ５はパケットＰ７０をパケットＲ７としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ７はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ７から状態Ｑ８へと遷移する。
【０１５７】
パケットＰ８０についても前述のパケットＰ７０の場合と同様な処理が行われる。すなわち、パケットＰ８０がＴＣＰデータを含み、そのセッションリストがセッション１のセッションリストＣ４であると特定されるので（図９のｆ３１〜ｆ３３）、ＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、パケットＰ８０のシーケンス番号１５００１とＴＣＰデータ長１０００とを加算した値１６００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ８におけるＳ３に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１５００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１６００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ８０が再送ＴＣＰパケットではないと判断し、パケットＰ８０のシーケンス番号１６００１とＴＣＰデータ長１０００とを加算した値１６００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ４に格納する（図９のｆ３５）。その後、シーケンス番号取得部Ａ５はパケットＰ８０をパケットＲ８としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ８はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ８から状態Ｑ９へと遷移する。
【０１５８】
パケットＲ７・Ｒ８を受信したクライアント４０５は、このようにパケットＲ７・Ｒ８を短い間隔で受信した場合には、パケットＲ７・Ｒ８に対するＡＣＫとして、ＡＣＫ番号１６００１を持ち、かつＴＣＰデータを含まないパケットＲ９をサーバ４０４に送信するものとする。その途中でサーバ４０４とクライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＲ９を受信する。パケットＲ９は上り方向なので、ＡＣＫ番号変更部Ａ４は前述のＡＣＫパケットＲ２等の場合と同様に、再び図８に示すｆ４０１からのフローに従ってクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡すかあるいはサーバ４０４に対するＡＣＫパケットをドロップすることによりサーバ４０４からクライアント４０５へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＲ９はパケットＲ２等の時と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１５９】
その後、ＡＣＫ番号変更部Ａ４は、パケットＲ９のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＲ９に対し、図８に示すｆ４０６からのフロー従ってスロースタートモードにおける処理を行う。
【０１６０】
ｆ４０６においてＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、パケットＲ２等の場合と同様にして、パケットＲ９のパケットカウンタがセッション１のパケットカウンタＪ１であると特定し、そこに格納されている値を取得する。
【０１６１】
ｆ４０７においてパケットカウンタＪ１には奇数の値が格納されているので、ＡＣＫ番号変更部Ａ４はサーバ４０４に対するＡＣＫパケットをドロップする処理を実行する。つまり、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４はパケットカウンタＪ１の値を１インクリメントして更新し（図８のｆ４１１。その結果、パケットカウンタＪ１の値は偶数になる。）、パケットＲ９をドロップする（図８のｆ４１３）。このとき、セッションリストＣ４は図１３に示すように状態Ｑ９から状態Ｑ１０へと遷移する。
【０１６２】
この時点においてもサーバ４０４にとっては既にクライアント４０５へ送信したパケットＰ１０・Ｐ３０・Ｐ５０・Ｐ７０・Ｐ８０に対するＡＣＫが未だ返信されていないことになるが、本実施の形態１におけるサーバ４０４はやはり未だ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットＰ１００を、クライアント４０５に送信するものとする。その途中でサーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＰ１００を受信する。パケットＰ１００は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＰ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１６３】
すなわちまずパケットＰ１００は前述のパケットＰ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、パケットＰ１００のシーケンス番号１６００１とＴＣＰデータ長１０００とを加算した値１７００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ１０におけるＳ４に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１６００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１７００１のほうが大きいので、シーケンス番号取得部Ａ５はパケットＰ１００が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ａ５はシーケンス番号とＴＣＰデータ長とを加算した値１７００１をセッション情報保持手段Ａ７のセッションリストＣ４のＳ５に格納する。その後、シーケンス番号取得部Ａ５はパケットＰ１００をパケットＲ１０としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ１０はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ１０から状態Ｑ１１へと遷移する。
【０１６４】
パケットＲ１０を受信したクライアント４０５は、パケットＲ１０のＡＣＫとして、ＡＣＫ番号１７００１を持ち、かつＴＣＰデータを含まないパケットＲ１１をサーバ４０４に送信する。その途中でサーバ４０４とクライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６が一旦そのパケットＲ１１を受信する。パケットＲ１１は上り方向なので、ＡＣＫ番号変更部Ａ４は図８に示すｆ４０１からのフローに従ってクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡すかあるいはサーバ４０４に対するＡＣＫパケットをドロップすることによりサーバ４０４からクライアント４０５へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットＲ１１は前述のＡＣＫパケットＲ２等の場合と同様にして、ＴＣＰデータを含まないパケットであると判定され（図８のｆ４０１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図８のｆ４０２）。
【０１６５】
その後、ＡＣＫ番号変更部Ａ４は、パケットＲ１１のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ＡＣＫ番号保持手段Ａ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図８のｆ４０３）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ａ４はパケットＲ１１に対し、図８に示すｆ４０６からのフローに従ってスロースタートモードにおける処理を行う。
【０１６６】
ｆ４０６においてＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、前述のＡＣＫパケットＲ２等の場合と同様にして、パケットＲ１１のパケットカウンタがセッション１のパケットカウンタＪ１であると特定し、そこに格納されている値を取得する。
【０１６７】
ｆ４０７においてパケットカウンタＪ１には偶数の値が格納されているので、ＡＣＫ番号変更部Ａ４はクライアント４０５から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０４へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４はセッション情報保持手段Ａ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態Ｑ１１におけるＳ０に格納された値１２００１を取得し（図８のｆ４０８。その結果、セッションリストＣ４のＳ０の値１２００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移り、Ｓ４に格納された値がＳ３に移り、Ｓ５に格納された値がＳ４に移る。）、その値１２００１をパケットＲ１１のＡＣＫ番号に上書きし（図８のｆ４０９）、パケットカウンタＪ１の値を１インクリメントして更新する（図８のｆ４１０。その結果、パケットカウンタＪ１の値は奇数になる。）。パケットＲ１１のＡＣＫ番号が書き換えられたパケットＰ１１０はパケット傍受部Ａ３へと渡され（図８のｆ４１２）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６より４０４へと転送される。このとき、セッションリストＣ４は図１３に示すように状態Ｑ１１から状態Ｑ１２へと遷移する。なお、このときのパケットＰ１１０は、サーバ４０４にとって結果的にパケットＰ１０に対するＡＣＫとなっている。
【０１６８】
この時点においてサーバ４０４にとっては既にクライアント４０５へ送信したパケットＰ１０・Ｐ３０・Ｐ５０・Ｐ７０・Ｐ８０・Ｐ１００のうちパケットＰ１０に対するＡＣＫは返信されてきているが、残りの送信パケットＰ３０・Ｐ５０・Ｐ７０・Ｐ８０・Ｐ１００に対するＡＣＫがまだ返信されていないことになる。ここに至り本実施の形態１におけるＡＣＫパケットＰ１１０を受信したサーバ４０４はパケットＰ３０に対するＡＣＫ（ＡＣＫ番号１３００１を持つパケット）をクライアント４０５から受け取っていないために、サーバ４０４においてパケットＰ３０に対するＲＴＯがオーバーしたものとする。
【０１６９】
そこでサーバ４０４はパケットＰ３０以降の送信パケットにおいて輻輳が発生したと判断し、クライアント４０５に対してパケットＰ３０と同様の内容を持つパケットＰ１２０を再送する。その途中でサーバ４０４・クライアント４０５間の通信経路途中にあるＴＣＰシェーパー中継装置４０６がそのパケットＰ１２０を一旦受信する。パケットＰ１２０は下り方向なので、シーケンス番号取得部Ａ５は前述のパケットＰ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
【０１７０】
すなわちまずパケットＰ１２０は前述のパケットＰ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ａ５はパケットＰ１２０が再送ＴＣＰパケットか否かを例えば以下のようにして判断する（図９のｆ３４）。
【０１７１】
図１２においてパケットＰ１２０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は図９の処理フローｆ３２において取得したパケットＰ１２０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ａ７のセッションリストＣ４の状態Ｑ１２におけるＳ４に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１７００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが小さいので、シーケンス番号取得部Ａ５はパケットＰ１２０が再送ＴＣＰパケットであると判断し、再送パケット用の処理を行う（図９のｆ３６〜ｆ３７）。この場合シーケンス番号取得部Ａ５は、セッション情報保持手段Ａ７におけるセッション１のモード情報Ｃ３を、輻輳回避モードであることを示す値０に更新する（図９のｆ３６）。
【０１７２】
サーバ４０４は輻輳状態の間、ＴＣＰデータを含むパケットをクライアント４０５へ再送のみ行い、新たなＴＣＰデータをクライアント４０５に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ４０４を輻輳状態からなるべく早く復帰させるために、ＴＣＰシェーパー中継装置４０６は例えばサーバ４０４へのＡＣＫを生成し、送信する。
【０１７３】
すなわちＴＣＰシェーパー中継装置４０６のシーケンス番号取得部Ａ５は、セッション情報保持手段Ａ７のＣ２に格納されている送信元ＩＰアドレス（例えば図２８の５０２）・宛先ＩＰアドレス（例えば図２８の５０３）・送信元ポート番号（例えば図１９の１１４）・宛先ポート番号（例えば図１９の１１５）を元に、輻輳状態から復帰させるために上り方向のＴＣＰデータ無しパケットＰ１２１を生成し、パケット傍受部Ａ３へ渡す。
【０１７４】
その次に、ＴＣＰシェーパー中継装置４０６のＡＣＫ番号変更部Ａ４は、先ほどシーケンス番号取得部Ａ５に置いて生成されたパケットＰ１２１をパケット傍受部Ａ３から入力し、その時点でセッション情報保持手段Ａ７に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合のセッションリストＣ４の状態Ｑ１２にてＳ０に格納されている値１３００１を取得し（その結果、セッションリストＣ４のＳ０の値１３００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移り、Ｓ４に格納された値がＳ３に移る。）、その値１３００１をパケットＰ１２１のＡＣＫ番号に書き込む（図９のｆ３７）。ＡＣＫ番号１３００１が書き込まれたパケットＰ１２１はパケット傍受部Ａ３へと渡され（図９のｆ３８）、そしてパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりサーバ４０４へと送信される。
【０１７５】
その後、ＴＣＰシェーパー中継装置４０６はセッション情報保持手段Ａ７にＡＣＫ番号を格納せず、パケットＰ１２０をパケットＲ１２としてパケット傍受部Ａ３へ渡す（図９のｆ３８）。パケットＲ１２はパケット転送部Ａ２・パケット出力部Ａ９へと順次渡されて、ＴＣＰシェーパー中継装置４０６よりクライアント４０５へと転送される。このとき、セッションリストＣ４は状態Ｑ１２から状態Ｑ１３へと遷移する。
【０１７６】
以上のように本発明によれば、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのＡＣＫ番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
【０１７７】
（実施の形態２）
本実施の形態２においては以下の順序で話を進める。まず実施の形態１との違いを述べる。次に図１４、図１５を用いて拡張版ＴＣＰシェーパーの構成を説明し、更に図１６を用いて拡張版ＴＣＰシェーパーを構成する各モジュールの処理フローについて述べる。最後に拡張版ＴＣＰシェーパーの動作例について図１７および図１８用いて述べる。
【０１７８】
実施の形態１では、例えば図１２においてサーバ４０４・クライアント４０５間のＴＣＰによる通信において、ＴＣＰデータを含むパケットの中継はサーバ４０４からクライアント４０５への方向（下り方向）のみ対応していた。仮にクライアント４０５からサーバ４０４へＴＣＰデータを含むパケットを送信した場合は、ＴＣＰデータを含むパケットはＴＣＰシェーパー中継装置４０６によってドロップされ、サーバへ中継されない。
【０１７９】
近年のインターネットでは、ＴＣＰセッションにおいてサーバ・クライアントが双方向にＴＣＰデータをやり取りすることがある。例えばユーザＰＣ等の情報機器の上のウェブブラウザを用いてウェブサーバ上のコンテンツを見る場合、ウェブサーバはウェブサーバ上のコンテンツがＴＣＰデータに内包されたパケットを、ユーザが利用しているＰＣ等の情報機器へ送信する。ユーザがＰＣ等の情報機器上のブラウザを用いてネットショッピングを行う場合は、ＰＣ等の情報機器はウェブサーバへクレジットカード番号等の情報がＴＣＰデータに内包されたパケットを送信する。この時ウェブサーバを図１２におけるサーバ４０４と見立て、またＰＣ等の情報機器を図１２におけるクライアント４０５と見立てると、サーバ・クライアント間でＴＣＰデータを双方向に送受信していることがわかる。実施の形態１を上記の環境で用いると、ＰＣ等の情報機器からウェブサーバへ向けたＴＣＰパケットがドロップされてしまうため、ユーザはオンラインショッピング等の利用ができなくなる。以上より、実施の形態１のようにＴＣＰデータを含むパケットを片方向のみ中継するという方式は利便性を損なう場合がある。一方本実施の形態２である拡張版ＴＣＰシェーパーはその動作原理自体は実施の形態１と同じであるが、双方向にＴＣＰデータを含むパケットを中継可能にし、尚かつ下り方向のＴＣＰのスループットを下げることができる。
【０１８０】
図１４・図１５を用いて拡張版ＴＣＰシェーパーの構成を説明する。図１４は拡張版ＴＣＰシェーパーの全体構成の例である。拡張版ＴＣＰシェーパーＴ１２は実施の形態１と同じく、例えば図１における中継装置３０３における拡張機能の一つとして実装される。
【０１８１】
通常の中継装置は図１４のパケット入力部Ｔ１、パケット転送部Ｔ２、パケット出力部Ｔ９のみを有するが、拡張版ＴＣＰシェーパーを有する中継装置３０３はこれらに加えてＴＣＰシェ−パー本体Ｔ１２を有する。ＴＣＰシェーパー本体Ｔ１２内の大部分のモジュールは、実施の形態１の時と同じ動作をする。
【０１８２】
パケット入力部Ｔ１、パケット転送部Ｔ２、パケット出力部Ｔ９のパケットに対する処理は、実施の形態１におけるパケット入力部Ａ１、パケット転送部Ａ２、パケット出力部Ａ９の処理と同じである。
【０１８３】
またＴＣＰシェーパー本体Ｔ１２内のパケット傍受部Ｔ３・ＡＣＫ番号変更部Ｔ４・シーケンス番号取得部Ｔ５・セッション情報保持手段Ｔ７は、実施の形態１におけるパケット傍受部Ａ３・ＡＣＫ番号変更部Ａ４・シーケンス番号取得部Ａ５・セッション情報保持手段Ａ７と同じ動作をする。
【０１８４】
ＡＣＫ番号データベースＴ８は、上り方向に送信すべきＴＣＰパケットのＡＣＫ番号を一時的に保持する。図１５はＡＣＫ番号データベースＴ８の内部構造の例である。各ＡＣＫ番号キャッシュＹ１、Ｙ３、Ｙ５には、各セッションの上り方向へ転送したＴＣＰパケットのＡＣＫ番号の値が格納される。これらのＡＣＫ番号キャッシュＹ１、Ｙ３、Ｙ５は、スロースタートモードにおいて、上り方向ＡＣＫの値を２つに１つの割合で増加させるための処理に用いる。前記セッション情報保持手段Ｔ７と同じくＡＣＫ番号キャッシュもセッション毎に設けられている。通常保持できるセッション数は有限である。セッション管理部Ｔ６がＡＣＫ番号データベースＴ８にあいているＡＣＫ番号キャッシュのメモリ空間がなかった場合には、例えばセッション管理部Ｔ６は最も長時間にわたり更新されていないＡＣＫ番号キャッシュをＡＣＫ番号データベースＴ８から削除して新しいセッションに用いるＡＣＫ番号キャッシュの作成に充てる等のことを行う。
【０１８５】
セッション管理部Ｔ６は、ＡＣＫ番号変更部Ｔ４またはシーケンス番号取得部Ｔ５と、セッション情報保持手段Ｔ７またはＡＣＫ番号データベースＴ８との各種データ受け渡しの仲介を行う。実施の形態１ではセッション管理部Ａ６はＡＣＫ番号変更部Ａ４またはシーケンス番号取得部Ａ５と、セッション情報保持手段Ａ７またはパケット数保持手段Ａ８との各種データ受け渡しの仲介を行うが、本実施の形態２ではパケット数保持手段Ａ８の代わりにＡＣＫ番号データベースＴ８のデータ受け渡しの仲介を行う。
セッション情報保持手段Ｔ７またはＡＣＫ番号データベースＴ８に保持されるセッションの数が複数存在する場合、セッション管理部Ｔ６はさらに、セッション情報保持手段Ｔ７またはＡＣＫ番号データベースＴ８と受け渡しする各種データが、セッション情報保持手段Ｔ７またはＡＣＫ番号データベースＴ８のどのセッションに属するかの判定を行う。例えばパケットの発信元ＩＰアドレス（例えば図２８の送信元ＩＰアドレスフィールド５０２に格納されたデータ）・宛先ＩＰアドレス（例えば図２８の宛先ＩＰアドレスフィールド５０３に格納されたデータ）およびＴＣＰの発信元ポート番号（例えば図１９の１１４に格納されたデータ）・宛先ポート番号（例えば図１９の１１５に格納されたデータ）等、そのＴＣＰパケットが属するセッションを特定する情報を他の情報と併せてＡＣＫ番号変更部Ｔ４またはシーケンス番号取得部Ｔ５から取得し、それらの情報から例えばセッション情報保持手段Ｔ７またはＡＣＫ番号データベースＴ８におけるメモリ空間を特定して、該当するセッションのメモリ空間に保持する。
【０１８６】
セッション情報保持手段Ｔ７の内部構造は、実施の形態１のセッション情報保持手段Ａ７の内部構造を表す図４において、Ａ７をＴ７としたものと同じである。以下では図４を、Ａ７をＴ７としたものとして扱う。
【０１８７】
本実施の形態２においては以下のような一定のルールにより上り方向ＡＣＫの抽出を行うものとする。すなわち、輻輳回避モードにおいては上り方向のＴＣＰパケットのＡＣＫ番号を元の値より小さい値に書き換え、必ず新しい時間に送信する上りＴＣＰパケットのＡＣＫ番号はそれ以前に送ったＴＣＰパケットのＡＣＫ番号より大きな値にするものとする。一方スロースタートモードにおいては上り方向のＴＣＰパケットのＡＣＫ番号を書き換え、新しい時間に送信する上りＴＣＰパケットのＡＣＫ番号はそれ以前に送られたＴＣＰパケットのＡＣＫ番号と同じか大きい値にするものとする。すなわち上り方向のＴＣＰパケットは必ず、その前後どちらかの上りＴＣＰパケットと同じ値を取り、そのＡＣＫ番号は２つの上りＴＣＰパケット毎に増加する。
【０１８８】
以上のモジュールを用いて以下のような処理を行うことにより、各セッションに流れるＴＣＰセグメントのスループットを抑える。
【０１８９】
これより、拡張版ＴＣＰシェーパーを構成する各モジュールの処理フローについて述べる。なおＴ１２内部のモジュールのうち、パケット傍受部Ｔ３以外のものにおいてはＴＣＰパケットのみが取り扱われる。
【０１９０】
パケット転送部Ｔ２の処理フローは、実施の形態１のパケット転送部Ａ２のフローを表す図６において、パケット入力部Ａ１の代わりにパケット入力部Ｔ１、パケット傍受部Ａ３の代わりにパケット傍受部Ｔ３、パケット転送部Ａ２の代わりにパケット転送部Ｔ２としたものである。以下では図６を、パケット入力部Ａ１をパケット入力部Ｔ１、パケット傍受部Ａ３をパケット傍受部Ｔ３、パケット転送部Ａ２をパケット転送部Ｔ２としたものとして扱う。
【０１９１】
パケット傍受部Ｔ３の処理フローは、実施の形態１のパケット傍受部Ａ３のフローを表す図７において、パケット転送部Ａ２の代わりにパケット転送部Ｔ２、ＡＣＫ番号変更部Ａ４の代わりにＡＣＫ番号変更部Ｔ４、シーケンス番号取得部Ａ５の代わりにシーケンス番号取得部Ｔ５としたものである。以下では図７を、パケット転送部Ａ２をパケット転送部Ｔ２、ＡＣＫ番号変更部Ａ４をＡＣＫ番号変更部Ｔ４、シーケンス番号取得部Ａ５をシーケンス番号取得部Ｔ５にしたものとして扱う。
【０１９２】
図１６は上り方向ＴＣＰパケットに対するＡＣＫ番号変更部Ｔ４の処理フローの例である。
【０１９３】
ＡＣＫ番号変更部Ｔ４へ入力されるものはパケット傍受部Ｔ３から渡される上り方向のＴＣＰパケットのみである（図１４の経路Ｕ３）。また、セッション管理部Ｔ６との間において、ＡＣＫ番号変更部Ｔ４はＴＣＰパケットそのものでなく、パケットの属しているセッションに関する情報のみのやり取りを行う。実施の形態１のＡＣＫ番号変更部Ａ４ではＴＣＰデータを含むパケットを図８のステップｆ４０１において判定し、ステップｆ４１３においてドロップしていたが、本実施の形態２ではＴＣＰデータ有りパケットとＴＣＰデータ無しパケットを同等に扱う。
【０１９４】
ＡＣＫ番号変更部Ｔ４は、ステップｆ１００１において、セッション情報保持手段Ｔ７から処理中のパケットが属しているセッションのモード情報（例えば図４のセッション１においてはＣ３）を取得する。ステップｆ１００２において、ＡＣＫ番号変更部Ｔ４はｆ１００１で取得したセッションのモード情報を元に、現在のセッションの動作モードがスロースタートか輻輳回避モードかを判定する。
【０１９５】
セッションの動作モードが輻輳回避モードである場合、ＡＣＫ番号変更部Ｔ４はステップｆ１００３においてセッション情報保持手段Ｔ７よりセッション管理部Ｔ６経由において現在処理しているパケットが属するセッションリスト（例えば図４のセッション１であればＣ４）からその時点でもっとも古いＡＣＫ番号（例えば図４のセッション１であればアドレスＳ０に格納されているデータ）を取得し、ステップｆ１００４においてＡＣＫ番号変更部Ｔ４は現在処理中のパケットのＡＣＫ番号フィールド（例えば図１９の１１１）を先ほど取得したＡＣＫ番号に書き換える。その後、ＡＣＫ番号変更部Ｔ４はＡＣＫ番号の書き換えが完了したＴＣＰパケットを、経路Ｕ４を介しパケット傍受部Ｔ３へ渡す。もしセッションリストが空の場合は、ＡＣＫ番号変更部Ｔ４はそこで一時的に保持するＴＣＰパケットのＡＣＫ番号の書き換えを行わずに、経路Ｕ４を介しパケットをパケット傍受部Ｔ３へ渡す。
【０１９６】
セッションの動作モードがスロースタートモードである場合、ＡＣＫ番号変更部Ｔ４はステップｆ１００５においてＡＣＫ番号データベースＴ８の現在処理しているパケットが属するＡＣＫ番号キャッシュ（例えば図１５のセッション１であればＹ１）に値が格納されているか否かを調べる。値が格納されていない場合、ＡＣＫ番号変更部Ｔ４はステップｆ１００６において、セッション情報保持手段Ｔ７よりセッション管理部Ｔ６経由において現在処理しているパケットが属するセッションリスト（例えば図４のセッション１であればＣ４）からその時点でもっとも古いＡＣＫ番号（例えば図４のセッション１であればアドレスＳ０に格納されているデータ）を取得し、ステップｆ１００７において、先程取得したＡＣＫ番号を現在処理中のパケットのＡＣＫ番号フィールドに上書きする。更にＡＣＫ番号変更部Ｔ４はステップｆ１００８において、ステップｆ１００６で取得したＡＣＫ番号をＡＣＫ番号データベースＴ８の現在処理中のパケットが属するＡＣＫ番号キャッシュ（例えば図１５のセッション１であればＹ１）に書き込む。その後、ＡＣＫ番号変更部Ｔ４はＡＣＫ番号の書き換えが完了したパケットを、経路Ｕ４を介しパケット傍受部Ｔ３へ渡す。もしセッションリストが空の場合は、ＡＣＫ番号変更部Ｔ４はそこで一時的に保持するＴＣＰパケットのＡＣＫ番号の書き換えを行わずに、経路Ｕ４を介しＴＣＰパケットをパケット傍受部Ｔ３へ渡す。
【０１９７】
ステップｆ１００５においてＡＣＫ番号データベースＴ８の現在処理しているパケットが属するＡＣＫ番号キャッシュに値が格納されている場合、ＡＣＫ番号変更部Ｔ４はステップｆ１００９において、ＡＣＫ番号データベースＴ８のＡＣＫ番号キャッシュ（例えば図１５のセッション１であればＹ１）からＡＣＫ番号を取得し、ステップｆ１０１０においてＡＣＫ番号変更部Ｔ４は先に取得したＡＣＫ番号（例えば図１５のセッション１であればＹ１）を現在処理中のパケットのＡＣＫ番号フィールドに上書きする。次にステップｆ１０１１においてＡＣＫ番号変更部Ｔ４は、先の処理ｆ１００９において値を取得したＡＣＫ番号キャッシュ（例えば図１５のセッション１であればＹ１）の値を削除し、ＡＣＫ番号キャッシュを空にする。その後、ＡＣＫ番号変更部Ｔ４は経路Ｕ４を介しパケットをパケット傍受部Ｔ３へ渡す。
【０１９８】
最後にＡＣＫ番号変更部Ｔ４はステップｆ１０１２において、パケットデータをパケット傍受部Ｔ３に渡す。
【０１９９】
以上の構成および処理フローを有する拡張版ＴＣＰシェーパーの動作例を説明する。輻輳回避モード時の拡張版ＴＣＰシェーパーの動作は、実施の形態１で示した基本型ＴＣＰシェーパーと同じである。
【０２００】
図１７・図１８を用いてスロースタートモード時の拡張版ＴＣＰシェーパーの動作例について述べる。図１７はサーバ４０７・クライアント４０８・ＴＣＰシェーパーを搭載した中継装置（以下、「ＴＣＰシェーパー中継装置」と称す）４０９間でのスロースタートモード時のＴＣＰによる通信の例である。サーバ４０７・クライアント４０８間の通信経路途中にはＴＣＰシェーパー中継装置４０９がある。このＴＣＰシェーパー中継装置４０９の内部構成は図４、図１４、図１５に示すものと同一とする。さらに、ＴＣＰシェーパー中継装置４０９がサーバ４０７・クライアント４０８間の通信経路途中で取り扱うパケットは、前述の図６、図７、図９、図１６に示すフロー処理がなされるものとする。サーバ４０７はクライアント４０８に対してＴＣＰで毎回１０００バイトずつＴＣＰデータを含むパケット（ｖ１０、ｖ３０、ｖ５０、ｖ７０、ｖ８０、ｖ１００、ｖ１２０）を送信する。クライアント４０８はサーバ４０７に対しパケット（ｅ２、ｅ４、ｅ６、ｅ９、ｅ１１）、つまりサーバ４０７から送信されたＴＣＰデータを含むパケット（ｖ１０、ｖ３０、ｖ５０、ｖ７０、ｖ８０、ｖ１００）に対するＡＣＫを送信する。クライアント４０８がサーバ４０７に対して送信するパケット（ｅ２、ｅ４、ｅ６、ｅ９、ｅ１１）は、ＴＣＰデータ有りであってもＴＣＰデータ無しであってもよい。
【０２０１】
図１８は、図１７の通信時におけるセッション情報保持手段Ｔ７でのセッションリストの遷移例である。それらのセッションリストの遷移は図４のセッション保持手段Ｔ７におけるセッション１上で行われるものとする。すなわち、ＴＣＰシェーパー中継装置４０９のセッション情報保持手段Ｔ７のセッションリストＣ４は図１８の状態ｚ１から開始され、値１１００１と値１０００１がそれぞれ状態ｚ１におけるセッションリストＣ４のアドレスＳ０およびＳ１にあらかじめ格納されている。値１０００１は値１１００１より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図１７・図１８の通信はスロースタートモードなので、状態ｚ１時のセッション１のモード情報Ｃ３には、スロースタートモードであることを示す値１が格納されているものとする。さらに状態ｚ１時のＡＣＫ番号データベースＴ８のＡＣＫ番号キャッシュＹ１は空であるとする。サーバ４０７がスロースタートモードの場合、ＴＣＰシェーパー中継装置４０９は、ＡＣＫ番号データベースＴ８内のＡＣＫ番号キャッシュを後述するような形で用いることにより、なるべく早く輻輳状態を引き起こして輻輳回避モードへと切り替えさせる。こうすることによって、ＴＣＰシェーパー中継装置４０９はスロースタートモードにおけるサーバ４０７からクライアント４０８への通信帯域の急激な増大を抑えることが出来る。
【０２０２】
最初に、サーバ４０７がパケットｖ１０を、クライアント４０８に対して送信する。次に、サーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｖ１０を受信する。パケットｖ１０は下り方向なので、シーケンス番号取得部Ｔ５は前述図９に示すｆ３１からのフローに従い、後述するフローｆ１００２以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２０３】
すなわち、ｆ３１においてパケットｖ１０はＴＣＰデータを含むので、ＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５はパケットｖ１０のシーケンス番号とＴＣＰデータ長を取得し（図９のｆ３２）、パケットｖ１０が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ｔ７に保持されているパケットｖ１０のセッションリストがどれなのかを特定する（図９のｆ３３）。本実施の形態２においては、パケットｖ１０のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ｔ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットｖ１０のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０２０４】
その後、シーケンス番号取得部Ｔ５はパケットｖ１０が再送ＴＣＰパケットか否かを例えば以下のようにして判断する（図９のｆ３４）。
【０２０５】
図１７においてパケットｖ１０はシーケンス番号＝１１００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は図９の処理フローｆ３２において取得したパケットｖ１０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１１００１  ＋  １０００  ＝  １２００１と加算する。
【０２０６】
次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１２００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ１におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１１００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１２００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ１０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値をセッション情報保持手段Ｔ７のセッションリストＣ４に追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ｔ５はシーケンス番号とＴＣＰデータ長とを加算した値１２００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ２に格納する。
【０２０７】
その後、シーケンス番号取得部Ｔ５はパケットｖ１０をパケットｅ１としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ１はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ１から状態ｚ２へと遷移する。
【０２０８】
パケットｅ１を受信したクライアント４０８は、パケットｅ１のＡＣＫとして、ＡＣＫ番号１２００１を持つパケットｅ２をサーバ４０７へ送信する。その途中でサーバ４０７とクライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｅ２を受信する。パケットｅ２は上り方向なので、ＡＣＫ番号変更部Ｔ４は図１６に示すｆ１００１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すことによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。
【０２０９】
ｆ１００１においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ２が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ｔ７に保持されているパケットｅ２のセッションリストがどれなのかを特定する。本実施の形態２においては、パケットｅ２のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ｔ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットｅ２のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０２１０】
その後、ＡＣＫ番号変更部Ｔ４は、パケットｅ２のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段Ｔ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図１６のｆ１００２）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ｔ４はパケットｅ２に対し、図１６に示すｆ１００５からのフローに従ってスロースタートモードにおける処理を行う。
【０２１１】
すなわちｆ１００５においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ２が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、ＡＣＫ番号データベースＴ８に保持されているパケットｅ２に属するＡＣＫ番号キャッシュがどれなのかを特定し、ＡＣＫ番号キャッシュの値を取得する。本実施の形態２においては、パケットｅ２のＩＰアドレス情報およびポート番号情報が図１５に示すＡＣＫ番号データベースＴ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｙ２と一致し、その結果パケットｅ２のＡＣＫ番号キャッシュがセッション１のＡＣＫ番号キャッシュＹ１であると特定されるものとする。状態ｚ２の時ＡＣＫ番号キャッシュＹ１は空なので、ＴＣＰシェーパー中継装置４０９は続いてｆ１００６の処理を行う。
【０２１２】
ｆ１００６においてＡＣＫ番号変更部Ｔ４はクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４はセッション情報保持手段Ｔ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態ｚ２におけるＳ０に格納された値１０００１を取得し（図１６のｆ１００６）。その結果、セッションリストＣ４のＳ０の値１０００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移る）、その値１０００１をパケットｅ２のＡＣＫ番号に上書きし（図１６のｆ１００７）、先のｆ１００６で取得したＡＣＫ番号をＡＣＫ番号キャッシュＹ１書きこむ（図１６のｆ１００８。その結果、ＡＣＫ番号キャッシュＹ１は空でなくなる）。パケットｅ２のＡＣＫ番号が書き換えられたパケットｖ２０はパケット傍受部Ｔ３へと渡され（図１６のｆ１０１２）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７に転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ２から状態ｚ３へと遷移する。
【０２１３】
この時点においてサーバ４０７にとっては既にクライアント４０８へ送信したパケットｖ１０に対するＡＣＫが返信されていないことになるが、本実施の形態２におけるパケットｖ２０を受信したサーバ４０７はまだ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットｖ３０を、クライアント４０８に送信するものとする。その途中でサーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｖ３０を受信する。パケットｖ３０は下り方向なので、シーケンス番号取得部Ｔ５は前述のパケットｖ１０の場合と同様に、再び図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理を行う。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２１４】
すなわちパケットｖ３０は前述のパケットｖ１０の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ｔ５はパケットｖ３０が再送ＴＣＰパケットか否かを、前述のパケットｖ１０の場合と同様に以下のようにして判断する（図９のｆ３４）。
【０２１５】
図１７においてパケットｖ３０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は図９の処理フローｆ３２において取得したパケットｖ３０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ３におけるＳ１に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１２００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ３０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ｔ５はシーケンス番号とＴＣＰデータ長とを加算した値１３００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ２に格納する。その後、シーケンス番号取得部Ｔ５はパケットｖ３０をパケットｅ３としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ３はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ３から状態ｚ４へと遷移する。
【０２１６】
パケットｅ３を受信したクライアント４０８は、パケットｅ３のＡＣＫとして、ＡＣＫ番号１３００１を持つパケットｅ４をサーバ４０７に送信する。その途中でサーバ４０７とクライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｅ４を受信する。パケットｅ４は上り方向なので、ＡＣＫ番号変更部Ｔ４は前述のＡＣＫパケットｅ２の場合と同様に、再び図１６に示すｆ１００１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すことによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットｅ４は前述のパケットｅ２の場合と同様にして、そのセッションリストがセッション１のセッションリストＣ４であると特定され（図１６のｆ１００１）、セッション１のモード情報Ｃ３に格納されていた値よりパケットｅ４のセッションがスロースタートモードであると特定される（図１６のｆ１００５）。その後、ＡＣＫ番号変更部Ｔ４はパケットｅ４に対し、図１６に示すｆ１００５からのフローにしたがってスロースタートモードにおける処理を行う。
【０２１７】
すなわちｆ１００５においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ４が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、ＡＣＫ番号データベースＴ８に保持されているパケットｅ４に属するＡＣＫ番号キャッシュがどれなのかを特定し、ＡＣＫ番号キャッシュの値を取得する。本実施の形態２においては、パケットｅ４のＩＰアドレス情報およびポート番号情報が図１５に示すＡＣＫ番号データベースＴ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｙ２と一致し、その結果パケットｅ４のＡＣＫ番号キャッシュがセッション１のＡＣＫ番号キャッシュＹ１であると特定されるものとする。状態ｚ４の時ＡＣＫ番号キャッシュＹ１は空でないので、ＴＣＰシェーパー中継装置４０９は続いてｆ１００９の処理を行う。
【０２１８】
ｆ１００９においてＡＣＫ番号変更部Ｔ４はクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４はＡＣＫ番号データベースＴ８のＡＣＫ番号キャッシュＹ１に格納されている値１０００１を取得し（図１６のｆ１００９）、その値１０００１をパケットｅ４のＡＣＫ番号に上書きし（図１６のｆ１０１０）、  ＡＣＫ番号キャッシュＹ１に格納されている値１０００１を削除する（図１６のｆ１０１１。その結果、ＡＣＫ番号キャッシュＹ１は空になる。）。パケットｅ４のＡＣＫ番号が書き換えられたパケットｖ４０はパケット傍受部Ｔ３へと渡され（図１６のｆ１０１２）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７に転送へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ４から状態ｚ５へと遷移する。
【０２１９】
この時点においてサーバ４０７にとっては既にクライアント４０８へ送信したパケットｖ１０およびｖ３０に対するＡＣＫが未だ返信されていないことになるが、本実施の形態２におけるサーバ４０７は輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットｖ５０を、クライアント４０８に送信するものとする。その途中でサーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｖ５０を受信する。パケットｖ５０は下り方向なので、シーケンス番号取得部Ｔ５は前述のパケットｖ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理を行う。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２２０】
すなわちまずパケットｖ５０は前述のパケットｖ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、パケットｖ５０のシーケンス番号１３００１とＴＣＰデータ長１０００とを加算した値１４００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ５におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１３００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１４００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ５０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ｔ５はシーケンス番号とＴＣＰデータ長とを加算した値１４００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ｔ５はパケットｖ５０をパケットｅ５としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ５はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ５から状態ｚ６へと遷移する。
【０２２１】
パケットｅ５を受信したクライアント４０８は、パケットｅ５のＡＣＫとして、ＡＣＫ番号１４００１を持つパケットｅ６をサーバ４０７へ送信する。その途中でサーバ４０７とクライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｅ６を受信する。パケットｅ６は上り方向なので、ＡＣＫ番号変更部Ｔ４はパケットｅ２と同じく、図１６に示すｆ１００１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すことによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。
【０２２２】
ｆ１００１においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ６が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ｔ７に保持されているパケットｅ６のセッションリストがどれなのかを特定する。本実施の形態２においては、パケットｅ６のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ｔ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットｅ６のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０２２３】
その後、ＡＣＫ番号変更部Ｔ４は、パケットｅ６のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段Ｔ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図１６のｆ１００２）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ｔ４はパケットｅ６に対し、図１６に示すｆ１００５からのフローに従ってスロースタートモードにおける処理を行う。
【０２２４】
すなわちｆ１００５においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ６が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、ＡＣＫ番号データベースＴ８に保持されているパケットｅ６に属するＡＣＫ番号キャッシュがどれなのかを特定し、ＡＣＫ番号キャッシュの値を取得する。本実施の形態２においては、パケットｅ６のＩＰアドレス情報およびポート番号情報が図１５に示すＡＣＫ番号データベースＴ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｙ２と一致し、その結果パケットｅ６のＡＣＫ番号キャッシュがセッション１のＡＣＫ番号キャッシュＹ１であると特定されるものとする。状態ｚ６の時ＡＣＫ番号キャッシュＹ１は空なので、ＴＣＰシェーパー中継装置４０９はパケットｅ１の処理と同じく、ｆ１００６の処理を行う。
【０２２５】
ｆ１００６においてＡＣＫ番号変更部Ｔ４はクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７
へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４はセッション情報保持手段Ｔ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態ｚ６におけるＳ０に格納された値１１００１を取得し（図１６のｆ１００６）。その結果、セッションリストＣ４のＳ０の値１１００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移る）、その値１１００１をパケットｅ６のＡＣＫ番号に上書きし（図１６のｆ１００７）、先のｆ１００６で取得したＡＣＫ番号をＡＣＫ番号キャッシュＹ１書きこむ（図１６のｆ１００８。その結果、ＡＣＫ番号キャッシュＹ１は空でなくなる。）。パケットｅ６のＡＣＫ番号が書き換えられたパケットｖ６０はパケット傍受部Ｔ３へと渡され（図１６のｆ１０１２）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７に転送へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ６から状態ｚ７へと遷移する。
【０２２６】
この時点においてサーバ４０７にとっては既にクライアント４０８へ送信したパケットｖ１０・ｖ３０・ｖ５０に対するＡＣＫがまだ返信されていないことになるが、本実施の形態２におけるパケッｖＰ６０を受信したサーバ４０７はやはりまだ輻輳が起きていないと判断し、引き続き次のデータが格納された２つのパケットｖ７０・ｖ８０を連続してクライアント４０８に送信するものとする。その途中でサーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｖ７０およびｖ８０を受信する。パケットｖ７０およびｖ８０は下り方向なので、シーケンス番号取得部Ｔ５は前述のパケットｖ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２２７】
すなわちまずパケットｖ７０は前述のパケットｖ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、パケットｖ７０のシーケンス番号１４００１とＴＣＰデータ長１０００とを加算した値１５００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ７におけるＳ２に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１４００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１５００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ７０が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ｔ５はシーケンス番号とＴＣＰデータ長とを加算した値１５００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ３に格納する。その後、シーケンス番号取得部Ｔ５はパケットｖ７０をパケットｅ７としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ７はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ７から状態ｚ８へと遷移する。
【０２２８】
パケットｖ８０についても前述のパケットｖ７０の場合と同様な処理が行われる。すなわち、パケットｖ８０がＴＣＰデータを含み、そのセッションリストがセッション１のセッションリストＣ４であると特定されるので（図９のｆ３１〜ｆ３３）、ＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、パケットｖ８０のシーケンス番号１５００１とＴＣＰデータ長１０００とを加算した値１６００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ８におけるＳ３に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１５００１とを比較する（図９のｆ３４）。シーケンス番号とＴＣＰデータ長とを加算した値１６００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ８０が再送ＴＣＰパケットではないと判断し、パケットｖ８０のシーケンス番号１５００１とＴＣＰデータ長１０００とを加算した値１６００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ４に格納する（図９のｆ３５）。その後、シーケンス番号取得部Ｔ５はパケットｖ８０をパケットｅ８としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ８はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ８から状態ｚ９へと遷移する。
【０２２９】
パケットｅ７・ｅ８を受信したクライアント４０８は、このようにパケットｅ７、ｅ８を短い間隔で受信した場合には、パケットｅ７、ｅ８に対して一つのＡＣＫにまとめて、ＡＣＫ番号１６００１を持つパケットｅ９をサーバ４０７に送信するものとする。その途中でサーバ４０７とクライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｅ９を受信する。パケットｅ９は上り方向なので、ＡＣＫ番号変更部Ｔ４は前述のＡＣＫパケットｅ２等の場合と同様に、再び図１６に示すｆ１００１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すことによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。
【０２３０】
すなわちパケットｅ９は前述のパケットｅ２の場合と同様にして、そのセッションリストがセッション１のセッションリストＣ４であると特定され（図１６のｆ１００１）、セッション１のモード情報Ｃ３に格納されていた値よりパケットｅ９のセッションがスロースタートモードであると特定される（図１６のｆ１００５）。その後、ＡＣＫ番号変更部Ｔ４はパケットｅ９に対し、図１６に示すｆ１００５からのフローにしたがってスロースタートモードにおける処理を行う。
【０２３１】
すなわちｆ１００５においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ９が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、ＡＣＫ番号データベースＴ８に保持されているパケットｅ９に属するＡＣＫ番号キャッシュがどれなのかを特定し、ＡＣＫ番号キャッシュの値を取得する。本実施の形態２においては、パケットｅ９のＩＰアドレス情報およびポート番号情報が図１５に示すＡＣＫ番号データベースＴ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｙ２と一致し、その結果パケットｅ９のＡＣＫ番号キャッシュがセッション１のＡＣＫ番号キャッシュＹ１であると特定されるものとする。状態ｚ９の時ＡＣＫ番号キャッシュＹ１は空でないので、ＴＣＰシェーパー中継装置４０９は続いてｆ１００９の処理を行う。
【０２３２】
ｆ１００９においてＡＣＫ番号変更部Ｔ４はクライアント４０８から受け取ったＡＣＫ
番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４はＡＣＫ番号データベースＴ８のＡＣＫ番号キャッシュＹ１に格納されている値１１００１を取得し（図１６のｆ１００９）、その値１１００１をパケットｅ９のＡＣＫ番号に上書きし（図１６のｆ１０１０）、  ＡＣＫ番号キャッシュＹ１に格納されている値１１００１を削除する（図１６のｆ１０１１。その結果、ＡＣＫ番号キャッシュＹ１は空になる。）。パケットｅ９のＡＣＫ番号が書き換えられたパケットｖ９０はパケット傍受部Ｔ３へと渡され（図１６のｆ１０１２）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７に転送へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ９から状態ｚ１０へと遷移する。
【０２３３】
この時点においてもサーバ４０７にとっては既にクライアント４０８へ送信したパケットｖ１０・ｖ３０・ｖ５０・ｖ７０・ｖ８０に対するＡＣＫが未だ返信されていないことになるが、本実施の形態２におけるサーバ４０７はやはり未だ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットｖ１００を、クライアント４０８に送信するものとする。その途中でサーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｖ１００を受信する。パケットｖ１００は下り方向なので、シーケンス番号取得部Ｔ５は前述のパケットｖ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２３４】
すなわちまずパケットｖ１００は前述のパケットｖ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、パケットｖ１００のシーケンス番号１６００１とＴＣＰデータ長１０００とを加算した値１７００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ１０におけるＳ４に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１６００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１７００１のほうが大きいので、シーケンス番号取得部Ｔ５はパケットｖ１００が再送ＴＣＰパケットではないと判断し、シーケンス番号とＴＣＰデータ長とを加算した値を追加登録する（図９のｆ３５）。この場合シーケンス番号取得部Ｔ５はシーケンス番号とＴＣＰデータ長とを加算した値１７００１をセッション情報保持手段Ｔ７のセッションリストＣ４のＳ５に格納する。その後、シーケンス番号取得部Ｔ５はパケットｖ１００をパケットｅ１０としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ１０はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ１０から状態ｚ１１へと遷移する。
【０２３５】
パケットｅ１０を受信したクライアント４０８は、パケットｅ１０のＡＣＫとして、ＡＣＫ番号１７００１を持つパケットｅ１１をサーバ４０７に送信する。その途中でサーバ４０７とクライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９が一旦そのパケットｅ１１を受信する。パケットｅ１１は上り方向なので、ＡＣＫ番号変更部Ｔ４は図８に示すｆ４０１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すかあるいはサーバ４０７に対するＡＣＫパケットをドロップすることによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットｅ１１は前述のＡＣＫパケットｅ２等の場合と同様にして、図１６に示すｆ１００１からのフローに従ってクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡すことによりサーバ４０７からクライアント４０８へのデータ送信の帯域を抑えるための処理を行う。
【０２３６】
ｆ１００１においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ１１が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、セッション情報保持手段Ｔ７に保持されているパケットｅ１１のセッションリストがどれなのかを特定する。本実施の形態２においては、パケットｅ１１のＩＰアドレス情報およびポート番号情報が図４に示すセッション情報保持手段Ｔ７におけるセッション１のＩＰアドレス情報およびポート番号情報Ｃ２と一致し、その結果パケットｅ１１のセッションリストがセッション１のセッションリストＣ４であると特定されるものとする。
【０２３７】
その後、ＡＣＫ番号変更部Ｔ４は、パケットｅ１１のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段Ｔ７のセッション１のモード情報Ｃ３に格納された値を元に判断する（図１６のｆ１００２）。セッション１のモード情報Ｃ３には値１（スロースタートモードを表す）が格納されているので、ＡＣＫ番号変更部Ｔ４はパケットｅ１１に対し、図１６に示すｆ１００５からのフローに従ってスロースタートモードにおける処理を行う。
【０２３８】
すなわちｆ１００５においてＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、パケットｅ１１が有しているＩＰアドレス情報（例えば図２８の５０２および５０３）およびポート番号情報（例えば図１９の１１４および１１５）により、ＡＣＫ番号データベースＴ８に保持されているパケットｅ１１に属するＡＣＫ番号キャッシュがどれなのかを特定し、ＡＣＫ番号キャッシュの値を取得する。本実施の形態２においては、パケットｅ１１のＩＰアドレス情報およびポート番号情報が図１５に示すＡＣＫ番号データベースＴ８におけるセッション１のＩＰアドレス情報およびポート番号情報Ｙ２と一致し、その結果パケットｅ１１のＡＣＫ番号キャッシュがセッション１のＡＣＫ番号キャッシュＹ１であると特定されるものとする。状態ｚ１１の時ＡＣＫ番号キャッシュＹ１は空なので、ＴＣＰシェーパー中継装置４０９はパケットｅ２の処理と同じく、ｆ１００６の処理を行う。
【０２３９】
ｆ１００６においてＡＣＫ番号変更部Ｔ４はクライアント４０８から受け取ったＡＣＫ番号よりも小さな値のＡＣＫ番号へ書き換えてからサーバ４０７へ渡す処理を実行する。つまり、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４はセッション情報保持手段Ｔ７のセッションリストＣ４に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合の状態ｚ１１におけるＳ０に格納された値１２００１を取得し（図１６のｆ１００６）。その結果、セッションリストＣ４のＳ０の値１２００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移り、Ｓ４に格納された値がＳ３に移り、Ｓ５に格納された値がＳ４に移る）、その値１２００１をパケットｅ１１のＡＣＫ番号に上書きし（図１６のｆ１００７）、先のｆ１００６で取得したＡＣＫ番号をＡＣＫ番号キャッシュＹ１書きこむ（図１６のｆ１００８。その結果、ＡＣＫ番号キャッシュＹ１は空でなくなる。）。パケットｅ１１のＡＣＫ番号が書き換えられたパケットｖ１１０はパケット傍受部Ｔ３へと渡され（図１６のｆ１０１２）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７に転送へと転送される。このとき、セッションリストＣ４は図１８に示すように状態ｚ１１から状態ｚ１２へと遷移する。なお、このときのパケットｖ１１０は、サーバ４０７にとって結果的にパケットｖ１０に対するＡＣＫとなっている。
【０２４０】
この時点においてサーバ４０７にとっては既にクライアント４０８へ送信したパケットｖ１０・ｖ３０・ｖ５０・ｖ７０・ｖ８０・ｖ１００のうちパケットｖ１０に対するＡＣＫは返信されてきているが、残りの送信パケットｖ３０・ｖ５０・ｖ７０・ｖ８０・ｖ１００に対するＡＣＫがまだ返信されていないことになる。ここに至り本実施の形態２におけるＡＣＫパケットｖ１１０を受信したサーバ４０７はパケットｖ３０に対するＡＣＫ（ＡＣＫ番号１３００１を持つパケット）をクライアント４０８から受け取っていないために、サーバ４０７においてパケットｖ３０に対するＲＴＯがオーバーしたものとする。
【０２４１】
そこでサーバ４０７はパケットｖ３０以降の送信パケットにおいて輻輳が発生したと判断し、クライアント４０８に対してパケットｖ３０と同様の内容を持つパケットｖ１２０を再送する。その途中でサーバ４０７・クライアント４０８間の通信経路途中にあるＴＣＰシェーパー中継装置４０９がそのパケットｖ１２０を一旦受信する。パケットｖ１２０は下り方向なので、シーケンス番号取得部Ｔ５は前述のパケットｖ１０等の場合と同様に、図９に示すｆ３１からのフローに従い、フローｆ４０１以降で上り方向のパケットのＡＣＫ番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態１のときと同じである。
【０２４２】
すなわちまずパケットｖ１２０は前述のパケットｖ１０等の場合と同様にして、ＴＣＰデータを含むパケットであると判定され（図９のｆ３１）、そのセッションリストがセッション１のセッションリストＣ４であると特定される（図９のｆ３２〜ｆ３３）。その後、シーケンス番号取得部Ｔ５はパケットｖ１２０が再送ＴＣＰパケットか否かを例えば以下のようにして判断する（図９のｆ３４）。
【０２４３】
図１７においてパケットｖ１２０はシーケンス番号＝１２００１、ＴＣＰデータ長＝１０００バイトであるので、ＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は図９の処理フローｆ３２において取得したパケットｖ１２０のシーケンス番号とＴＣＰデータ長を加算する。すなわち、１２００１  ＋  １０００  ＝  １３００１と加算する。次にＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、このシーケンス番号とＴＣＰデータ長とを加算した値１３００１と、セッション情報保持手段Ｔ７のセッションリストＣ４の状態ｚ１２におけるＳ４に格納された、この時点で最も登録された時刻が新しいＡＣＫ番号の値１７００１とを比較する。シーケンス番号とＴＣＰデータ長とを加算した値１３００１のほうが小さいので、シーケンス番号取得部Ｔ５はパケットｖ１２０が再送ＴＣＰパケットであると判断し、再送パケット用の処理を行う（図９のｆ３６〜ｆ３７）。この場合シーケンス番号取得部Ｔ５は、セッション情報保持手段Ｔ７におけるセッション１のモード情報Ｃ３を、輻輳回避モードであることを示す値０に更新する（図９のｆ３６）。
【０２４４】
サーバ４０７は輻輳状態の間、ＴＣＰデータを含むパケットをクライアント４０８へ再送のみ行い、新たなＴＣＰデータをクライアント４０８に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ４０７を輻輳状態からなるべく早く復帰させるために、ＴＣＰシェーパー中継装置４０９は例えばサーバ４０７へのＡＣＫを生成し、送信する。
【０２４５】
すなわちＴＣＰシェーパー中継装置４０９のシーケンス番号取得部Ｔ５は、セッション情報保持手段Ｔ７のＣ２に格納されている送信元ＩＰアドレス（例えば図２８の５０２）・宛先ＩＰアドレス（例えば図２８の５０３）・送信元ポート番号（例えば図１９の１１４）・宛先ポート番号（例えば図１９の１１５）を元に、輻輳状態から復帰させるために上り方向のＴＣＰデータ無しパケットｖ１２１を生成し、パケット傍受部Ｔ３へ渡す。
【０２４６】
その次に、ＴＣＰシェーパー中継装置４０９のＡＣＫ番号変更部Ｔ４は、先ほどシーケンス番号取得部Ｔ５において生成されたパケットｖ１２１をパケット傍受部Ｔ３から入力し、その時点でセッション情報保持手段Ｔ７に格納されている最も登録時刻の古いＡＣＫ番号、すなわちこの場合のセッションリストＣ４の状態ｚ１２においてＳ０に格納されている値１３００１を取得し（その結果、セッションリストＣ４のＳ０の値１３００１が削除され、Ｓ１に格納された値がＳ０に移り、Ｓ２に格納された値がＳ１に移り、Ｓ３に格納された値がＳ２に移り、Ｓ４に格納された値がＳ３に移る。）、その値１３００１をパケットｖ１２１のＡＣＫ番号に書き込む（図９のｆ３７）。ＡＣＫ番号１３００１が書き込まれたパケットｖ１２１はパケット傍受部Ｔ３へと渡され（図９のｆ３８）、そしてパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりサーバ４０７へと送信される。
【０２４７】
その後、ＴＣＰシェーパー中継装置４０９はセッション情報保持手段Ｔ７にＡＣＫ番号を格納せず、パケットｖ１２０をパケットｅ１２としてパケット傍受部Ｔ３へ渡す（図９のｆ３８）。パケットｅ１２はパケット転送部Ｔ２・パケット出力部Ｔ９へと順次渡されて、ＴＣＰシェーパー中継装置４０９よりクライアント４０８へと転送される。このとき、セッションリストＣ４は状態ｚ１２から状態ｚ１３へと遷移する。
【０２４８】
以上のように本発明によれば、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのＡＣＫ番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
【０２４９】
（実施の形態３）
図２は、ＴＣＰシェ−パーがアクセスルータの一機能として動作する場合の実施例である。
【０２５０】
図２におけるクライアントＤ１は一般家庭内のパソコン等の情報機器を表す。本発明が適用されるアクセスルータＤ２はパケット中継装置であり、クライアントＤ１が送信したパケットを後述する上位の中継装置Ｄ６へ中継し、また上位の中継装置Ｄ６が送信したパケットをクライアントＤ１へ中継する。さらにアクセスルータＤ２はＩＰ電話機能を持ち、音声データを内包するパケット（以下、「音声パケット」と称す）の送受信を行う。アクセスルータＤ２の物理的な設置場所は一般家庭内である。またアクセスルータＤ２はクライアントＤ１に対して、ＤＨＣＰ（Ｄｙｎａｍｉｃ  Ｈｏｓｔ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）を用いてアドレス割り当てを行う。また、ＤＨＣＰで割り当てたＩＰアドレスはアクセスルータＤ２内で保持されるものとする。そのためアクセスルータＤ２はクライアントＤ１が持つＩＰアドレスを常に把握できる。
【０２５１】
クライアントＤ１とアクセスルータＤ２は伝送路Ｄ９によって接続されている。伝送路Ｄ９の伝送許容量は１００Ｍｂｐｓである。
【０２５２】
上位の中継装置Ｄ６は、アクセスルータＤ２から送信されたパケットをインターネット網へと中継する。またインターネット網から中継されてきたパケットをアクセスルータＤ２へと中継する。上位の中継装置Ｄ６の物理的な設置場所は、一般家庭にインターネット接続のサービスを行うインターネットサービスプロバイダの内部である。
【０２５３】
上位の中継装置Ｄ６とアクセスルータＤ２は伝送路Ｄ３によって接続されている。伝送路Ｄ３の伝送許容量は１Ｍｂｐｓである。伝送路Ｄ３において、アクセスルータＤ２から上位の中継装置Ｄ６への方向を「上り方向」とし、上位の中継装置Ｄ６からアクセスルータＤ２への方向を「下り方向」とする。
【０２５４】
また上位の中継装置Ｄ６とインターネット網は伝送路Ｄ１０によって接続されている。伝送路Ｄ１０の伝送許容量は１０００Ｍｂｐｓである。
【０２５５】
インターネット網にはサーバＤ７が接続される。クライアントＤ１とサーバＤ７は経路Ｄ５においてパケットの送受信が可能である。またインターネット網とサーバＤ７間は十分大きな伝送許容量を持つものとする。具体的には伝送路Ｄ１０よりも大きな伝送許容量を持つ。
【０２５６】
またインターネット網にはＩＰ電話Ｄ８が接続される。アクセスルータＤ２とＩＰ電話Ｄ８は経路Ｄ４においてパケットの送受信が可能である。またインターネット網とＩＰ電話Ｄ８間は十分大きな伝送許容量を持つものとする。
【０２５７】
ここでまず本発明をアクセスルータＤ２に適用しない場合における挙動を説明する。例えばクライアントＤ１がサーバＤ７にＴＣＰで接続し、その後サーバＤ７からクライアントＤ１へ９００ｋｂｐｓの帯域でデータの送信を行う。次にＩＰ電話Ｄ８とアクセスルータＤ２が互いに２００ｋｂｐｓの帯域で音声パケットの送受信を開始すると、伝送路Ｄ３に必要な帯域は２００ｋｂｐｓ＋９００ｋｂｐｓ＝１．１Ｍｂｐｓになる。しかしながら伝送路Ｄ３の下り方向の伝送許容量は１Ｍｂｐｓであり、これは下り方向のＴＣＰデータと音声パケットの合計必要帯域である１．１Ｍｂｐｓより小さい。よって伝送路Ｄ３の下り方向の伝送容量が足りなくなり、上位の中継装置Ｄ６にて音声パケットもしくはＴＣＰパケットを送信できず伝送路Ｄ３に送信できなくなり、その結果ＴＣＰパケットと音声パケットの一部にパケットロスが発生する。したがってアクセスルータＤ２のＩＰ電話機能において、音声パケットが内包している音声データを再生できないパケットが存在することになり、音質の低下が発生する。
【０２５８】
一方、例えば本発明の実施の形態１もしくは実施の形態２であるＴＣＰシェーパー機能をアクセスルータＤ２に適用した場合における音質を説明する。この場合、伝送路Ｄ３の下り方向はアクセスルータＤ２のＴＣＰシェーパー機能により帯域制御される。アクセスルータＤ２にて中継するパケットの上り・下り方向を判別する方法は例えば以下のように行う。すなわち、アクセスルータＤ２で中継すべきパケットの宛先ＩＰアドレス（例えば図２８の５０３）がクライアントＤ１のＩＰアドレスと等しい場合は下り方向と判別し、宛先ＩＰアドレスがクライアントＤ１のＩＰアドレスと等しくなければ上り方向と判別する。クライアントＤ１のＩＰアドレスは例えばアクセスルータＤ２内部のＤＨＣＰ機能によって保持することが可能である。その保持されているＩＰアドレスを参照することで、パケットの宛先ＩＰアドレスがクライアントＤ１のＩＰアドレスと等しいかを判定する。
【０２５９】
最初にアクセスルータＤ２のＴＣＰシェーパー機能を無効にし、アクセスルータＤ２を経由する通信を開始する。例えばクライアントＤ１がサーバＤ７にＴＣＰで接続し、その後サーバＤ７からクライアントＤ１へ９００ｋｂｐｓの帯域でデータ送信を行う。その後ＩＰ電話Ｄ８とアクセスルータＤ２が音声パケットを送受信開始する前に、いずれかからのＩＰ電話の接続要求をトリガーとして、ＴＣＰシェーパー機能を有効にする。するとサーバＤ７からクライアントＤ１へ向かうＴＣＰデータの帯域は、アクセスルータＤ２のＴＣＰシェーパー機能によって低く押さえられる。その結果、例えばサーバＤ７からクライアントＤ１へのＴＣＰデータの消費帯域が９００ｋｂｐｓから１００ｋｂｐｓに押さえられたとする。そうすると、ＩＰ電話Ｄ８とアクセスルータＤ２が互いに２００ｋｂｐｓの帯域で音声パケットを送受信しても、伝送路Ｄ３における下り方向のＴＣＰデータと音声パケットの合計帯域は２００ｋｂｐｓ＋１００ｋｂｐｓ＝３００ｋｂｐｓになり、伝送路Ｄ３の下り方向の伝送許容量である１Ｍｂｐｓはそれより十分に大きいため、伝送路Ｄ３の下り方向の伝送容量が足りなくなることはなくなり、上位の中継装置Ｄ６でパケットロスは発生しない。また伝送路Ｄ３の下り方向において伝送許容量の半分以下しか利用していないため、下り方向の音声パケットのジッタも悪化しない。したがってアクセスルータＤ２のＩＰ電話機能において音声の低下が発生しない。
【０２６０】
以上のように本発明によれば、少なくとも１つ以上のサーバと１つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのＡＣＫ番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたＡＣＫ番号を有するＡＣＫパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すＡＣＫ番号を有するＡＣＫパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のＴＣＰスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
【０２６１】
なお、本実施の形態３は音声のみのＩＰ電話を用いて説明したが、例えば音声に加え動画情報も同時に送受信するＩＰ−ＴＶ電話であっても同様である。
【産業上の利用可能性】
【０２６２】
本発明にかかるＡＣＫ番号書き換え方式は、スループットを抑えることが可能であるため、帯域制御機能が期待される組織間のルータや、家庭用ゲートウェイ等としての利用が可能である。
【図面の簡単な説明】
【０２６３】
【図１】本発明が適用されたパケット転送を示すシーケンス図
【図２】アクセスルータを用いたネットワークシステムの構成図
【図３】本発明の実施の形態を持つ中継装置の構成を示す概要ブロック図（基本型ＴＣＰシェーパー）
【図４】本発明の実施の形態を持つ中継装置での、セッション情報保持手段の構成図
【図５】本発明の実施の形態を持つ中継装置での、パケット数保持手段の構成図
【図６】本発明の実施の形態を持つ中継装置における、パケット転送部のフロー図
【図７】本発明の実施の形態を持つ中継装置における、パケット傍受部のフロー図
【図８】本発明の実施の形態を持つ中継装置における、ＡＣＫ番号変更部のフロー図（基本型ＴＣＰシェーパー）
【図９】本発明の実施の形態を持つ中継装置における、シーケンス番号取得部のフロー図
【図１０】本発明の実施の形態を持つ中継装置における、輻輳回避モード時の動作を示すシーケンス図（基本型ＴＣＰシェーパー）
【図１１】本発明の実施の形態を持つ中継装置における、輻輳回避モード時のセッション情報保持手段でのＡＣＫ番号のリストの遷移図（基本型ＴＣＰシェーパー）
【図１２】本発明の実施の形態を持つ中継装置における、スロースタートモード時の動作を示すシーケンス図（基本型ＴＣＰシェーパー）
【図１３】本発明の実施の形態を持つ中継装置における、スロースタートモード時のセッション情報保持手段でのＡＣＫ番号のリストの遷移図（基本型ＴＣＰシェーパー）
【図１４】本発明の実施の形態を持つ中継装置の構成を示す概要ブロック図（拡張版ＴＣＰシェーパー）
【図１５】本発明の実施の形態を持つ中継装置での、ＡＣＫ番号データベースの構成図
【図１６】本発明の実施の形態を持つ中継装置における、ＡＣＫ番号変更部のフロー図（拡張版ＴＣＰシェーパー）
【図１７】本発明の実施の形態を持つ中継装置における、スロースタートモード時の動作を示すシーケンス図（拡張版ＴＣＰシェーパー）
【図１８】本発明の実施の形態を持つ中継装置における、スロースタートモード時のセッション情報保持手段でのＡＣＫ番号のリストの遷移図（拡張版ＴＣＰシェーパー）
【図１９】ＴＣＰヘッダフォーマットを示す構成図
【図２０】ＴＣＰの最も基本的な送信を示すシーケンス図
【図２１】ＴＣＰの最も基本的な送信でのパケットロス発生時の動作を示すシーケンス図
【図２２】ＴＣＰの基本的な送信での、処理能力を超えたデータ送信の動作を示すシーケンス図
【図２３】ウインドウサイズを考慮したＴＣＰの送信を示すシーケンス図
【図２４】ウインドウサイズを考慮したＴＣＰの送信における、パケットロス発生時の動作を示すシーケンス図
【図２５】ＴＣＰの送信における、遅延ＡＣＫを示すシーケンス図
【図２６】ＴＣＰの送信における、輻輳ウインドウを用いた送信を示すシーケンス図（スロースタートモード）
【図２７】ＴＣＰの送信における、輻輳ウインドウを用いた送信を示すシーケンス図（輻輳回避モード）
【図２８】ＩＰヘッダフォーマットを示す構成図
【符号の説明】
【０２６４】
３０１    ＬＡＮ側クライアント
３０２    ＷＡＮ側サーバ
３０３    ＴＣＰシェーパーを搭載した中継装置
Ｄ１    クライアント
Ｄ２    アクセスルータ（ＩＰ電話機能含）
Ｄ３    伝送路
Ｄ４    アクセスルータとＩＰ電話間の通信
Ｄ５    クライアント・サーバ間の通信
Ｄ６    上位の中継装置
Ｄ７    サーバ
Ｄ８    ＩＰ電話
Ｄ９    伝送路
Ｄ１０    伝送路
Ａ１    パケット入力部
Ａ２    パケット転送部
Ａ３    パケット傍受部
Ａ４    ＡＣＫ番号変更部
Ａ５    シーケンス番号取得部
Ａ６    セッション管理部
Ａ７    セッション情報保持手段
Ａ８    パケット数保持手段
Ａ９    パケット出力部
Ａ１１    ＴＣＰシェーパーの機能を持つ中継装置
Ａ１２    ＴＣＰシェーパー本体
４０１、４０４    サーバ
４０２、４０５    クライアント
４０３、４０６    ＴＣＰシェーパーを搭載した中継装置
Ｔ１    パケット入力部
Ｔ２    パケット転送部
Ｔ３    パケット傍受部
Ｔ４    ＡＣＫ番号変更部
Ｔ５    シーケンス番号取得部
Ｔ６    セッション管理部
Ｔ７    セッション情報保持手段
Ｔ８    ＡＣＫ番号データベース
Ｔ９    パケット出力部
Ｔ１１    ＴＣＰシェーパーの機能を持つ中継装置
Ｔ１２    ＴＣＰシェーパー本体
４０７    サーバ
４０８    クライアント
４０９    ＴＣＰシェーパーを搭載した中継装置
１０１    パケット全体
１０２    パケットデータ
１０３    ＴＣＰヘッダ
１０４    ＴＣＰデータ
１１０    シーケンス番号
１１１    ＡＣＫ番号
１１２    ウインドウサイズ
１１４    発信元ポート番号
１１５    宛先ポート番号
２０１、２０３、２０５、２０７、２０９、２１１、２１３、２１５    サーバ
２０２、２０４、２０６、２０８、２１０、２１２、２１４、２１６    クライアント
５００    ＩＰヘッダ
５０１    プロトコル番号
５０２    送信元ＩＰアドレス
５０３    宛先ＩＰアドレス
【図１】
0004702151.tif 000002
【図２】
0004702151.tif 000003
【図３】
0004702151.tif 000004
【図４】
0004702151.tif 000005
【図５】
0004702151.tif 000006
【図６】
0004702151.tif 000007
【図７】
0004702151.tif 000008
【図８】
0004702151.tif 000009
【図９】
0004702151.tif 000010
【図１０】
0004702151.tif 000011
【図１１】
0004702151.tif 000012
【図１２】
0004702151.tif 000013
【図１３】
0004702151.tif 000014
【図１４】
0004702151.tif 000015
【図１５】
0004702151.tif 000016
【図１６】
0004702151.tif 000017
【図１７】
0004702151.tif 000018
【図１８】
0004702151.tif 000019
【図１９】
0004702151.tif 000020
【図２０】
0004702151.tif 000021
【図２１】
0004702151.tif 000022
【図２２】
0004702151.tif 000023
【図２３】
0004702151.tif 000024
【図２４】
0004702151.tif 000025
【図２５】
0004702151.tif 000026
【図２６】
0004702151.tif 000027
【図２７】
0004702151.tif 000028
【図２８】
0004702151.tif 000029