JP2007282009A - Ack番号書き換えによる帯域制御方式 - Google Patents

Ack番号書き換えによる帯域制御方式 Download PDF

Info

Publication number
JP2007282009A
JP2007282009A JP2006107369A JP2006107369A JP2007282009A JP 2007282009 A JP2007282009 A JP 2007282009A JP 2006107369 A JP2006107369 A JP 2006107369A JP 2006107369 A JP2006107369 A JP 2006107369A JP 2007282009 A JP2007282009 A JP 2007282009A
Authority
JP
Japan
Prior art keywords
packet
tcp
ack
session
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006107369A
Other languages
English (en)
Other versions
JP4702151B2 (ja
JP2007282009A5 (ja
Inventor
Hiroshi Mochida
啓 持田
Hideki Honma
秀樹 本間
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2006107369A priority Critical patent/JP4702151B2/ja
Priority to US11/692,281 priority patent/US7676593B2/en
Publication of JP2007282009A publication Critical patent/JP2007282009A/ja
Publication of JP2007282009A5 publication Critical patent/JP2007282009A5/ja
Application granted granted Critical
Publication of JP4702151B2 publication Critical patent/JP4702151B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/163In-band adaptation of TCP data exchange; In-band control procedures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】少なくとも一つ以上のサーバと一つ以上のクライアントとの間の通信をネットワーク上でパケットを中継するネットワーク中継装置において、下り方向のスループットを下げる。
【解決手段】TCPシェーパーを搭載したネットワーク中継装置は、WAN側ホストから送信した下り向きデータに対する確認応答パケットG3のACK番号を、転送時に少ない値に変更するパケット変換手段を備える。
【選択図】図1

Description

本発明は、インターネットなどのパケット通信網に接続された、パケット中継装置に関するものである。
近年のインターネットの普及によって、さまざまな通信プロトコルが用いられるようになった。トランスポート層と呼ばれるプロトコル層には、TCP(Transmission Control Protocol)と、UDP(User Datagram Protocol)がある。TCPでは信頼性のあるデータ送信を実現する。
図19はTCPセグメントの構造である。TCPセグメント102はIPパケット(以下、単に「パケット」と称す)101に内包される。またTCPセグメント102は、TCPヘッダ103およびTCPデータ104からなる。但し、TCPデータ104には実データが入っていない場合がある。
図28はIPヘッダ113の構造である。IPヘッダ113内のプロトコル番号フィールド501には、パケットが内包しているトランスポート層のプロトコルを識別するための番号が格納されている。例えばIPヘッダ113を持つパケットが内包しているトランスポート層のプロトコルがTCPであれば、プロトコル番号フィールド501に値6が格納される。またIPヘッダ113が持つパケットが内包しているトランスポート層のプロトコルがUDPであれば、プロトコル番号フィールド501に値17が格納される。送信元IPアドレスフィールド502には発信元IPアドレスが格納され、宛先IPアドレスフィールド503には宛先IPアドレスが格納されている。
一般にTCPによる通信は、サーバ、クライアントの組によって実現される。ここでクライアントとは接続要求を出すネットワーク端末を指し、サーバとは接続要求を受けるネットワーク端末を指す。クライアントからサーバへの接続要求の後、サーバ、クライアント間では互いにパケットを用いて、TCPデータの送受信を行う。データ送信を行うサーバもしくはクライアントは、TCPデータを伴うTCPセグメントを対となるクライアントもしくはサーバに送信する。TCPデータ104に実データを伴うTCPセグメント102には、TCPヘッダ103内のシーケンス番号フィールド101に、そのTCPデータ104の先頭にある1バイトデータが送信すべきデータ全体の何バイト目であるかが記される。
図20はTCPの基本的なデータ送信についての説明図である。図20のように、サーバ201側からTCPセグメントX1、X3、X5をクライアント202に送信する度に、クライアント202からサーバ201に確認応答を含むTCPセグメント(以下、ACKと称す)X2、X4、X6送信している。クライアント202が送信するそれぞれのACKのACK番号フィールドには、クライアント202が受信したTCPセグメントが持つシーケンス番号に1を加えた値が格納され、サーバ201に送信される。例えばX2はX1に対する確認応答なので、X1のシーケンス番号に1を足した値が格納される。X2を受信したサーバ201は、X2のACK番号フィールドの値が、先に送信したX1のシーケンス番号に1を足した値になっていることより、X1が正常にクライアント202に送信することができたということを確認でき、以降TCPセグメントX3を送信する。以上より、サーバ201はクライアント202からACKを受けとることによって、送信したTCPデータが確実にクライアント202に届けられたことを確認できる。
図21はTCPによる通信中にパケットロスが発生した時の挙動を説明する図である。パケットロスとは、伝送路やパケット中継装置(以下「中継装置」と称す)でパケットを正常に処理できず、送信先に届かない現象のことをいう。図21は、TCPセグメントX13に対するACKがサーバ203側に帰って来ない場合の例である。その場合途中の伝送路でパケットロスが発生した可能性が考えられる。そこで、サーバ203側からクライアント204に対してTCPセグメントX13と同じTCPデータを有するTCPセグメントX14を再度送信する。ここでサーバ203側がTCPセグメントX13を送信した後TCPセグメントX14を送信するまでの時間X17をRTO(Round Trip Timeoutの略)という。またTCPデータを含むTCPセグメントX11を送信した後、それに対するACK X12が帰ってくるまでの時間X16をRTT(Round Trip Timeの略)という。
しかし前記図20、図21の例ではサーバ201または203は1つのTCPセグメントを送信した後に必ずそのTCPセグメントに対するクライアント202または204からのACKを受信しないと次のデータを送信しない。すなわちサーバ201または203は各送信TCPセグメントX1、X3、X5、X11、X13=X14に対してそれぞれクライアント202または204からのACK X2、X4、X6、X12、X15を逐次受信しないと次のデータを送信しないため、転送の効率が悪い。そのためこれらに述べたような転送方法はあまり用いられておらず、多様な拡張によって転送効率の改良が行われている。
図22および図23はクライアント側における拡張されたTCPのフロー制御によって転送効率を改良する従来例である。図22において、サーバ205は連続してTCPセグメントX21〜X25を高速に送信する。しかしサーバ205から送信されたTCPセグメントX21〜X25をクライアント206が処理しきれない場合があり、例えばTCPセグメントX25のように、クライアント206側で受信されたにもかかわらず処理が間に合わないため破棄されてしまい無駄になる場合がある。
そこで「あと何バイト分受信できる」という通知を前記図19におけるTCPヘッダのウインドウサイズ112を使って、図23のTCPセグメントX31およびX36のようにサーバ207へ通知する。これらのようなACKにより、クライアント208でデータを処理しきれずにサーバ207からのTCPセグメントが破棄されてしまうことを回避する。サーバ207側は、クライアント208に対して連続して送信できるTCPセグメントの数を、例えば図19に示されるTCPヘッダ103のウインドウサイズフィールド112を元に把握することができる。図23ではTCPセグメントX31によりクライアント208からサーバ207へ通知されたウインドウサイズ4000バイトに対してX32〜X35の各1000バイト、すなわち合計4000バイトがサーバ207からクライアント208に送られ、TCPセグメントX36によりクライアント208からサーバ207へ通知されたウインドウサイズ4000バイトに対してX37〜X40の各1000バイト、すなわち合計4000バイトが同じくサーバ207からクライアント208に送られている。
図24はウインドウサイズによるフロー制御をしている際にパケットロスが発生した場合のTCPの挙動を示す図である。サーバ209がTCPセグメント(1000バイト〜2000バイト)を送信しそれをクライアント210が受信完了した場合、クライアント210はそのことを示す番号(ACK 2001)を有するACK X54をサーバ209へ送信するが、その後においてサーバ209からのTCPセグメントX55(2001バイト〜3000バイト)でパケットロスが発生した場合におけるTCPの挙動は以下のようになる。クライアント210はACK X54をサーバ209へ送信した後にTCPセグメントX56(3001バイト〜4000バイト)やTCPセグメントX58(4001バイト〜5000バイト)をサーバ209から受け取ったとしても、TCPセグメントX55(2001バイト〜3000バイト)についてはまだ受け取っていないのであるから、サーバ209に対してX54と同じACK(以下この場合のようなACKを「デュプリケイトACK=Duplicate ACK」と呼ぶ)X57、X59をさらに返す。サーバ209側はクライアント210がX53までを受信出来たことを示す番号(ACK 2001)を有する同じACK X54、X57、X59を複数回に渡って受信することにより、TCPセグメントX56(3001バイト〜4000バイト)やTCPセグメント X58(4001バイト〜5000バイト)をクライアント210へ送信しているにも関わらず、少なくともTCPセグメントX55のパケットロスが途中で発生し、クライアント210がTCPセグメントX55を受信できていないと認識することができる。この時サーバ209側はTCPセグメントX55の再送をX60により行う。
図25はACKの効率的な送信を示す従来例である。クライアント212は、前記図24を用いて示したようなTCPセグメント毎に対応するACKを送信するのではなく、複数のTCPセグメントX71〜X73またはX75〜X77に対応する確認応答を一つのACK X74またはX78にまとめてサーバ211へ送信する。これによってACKの効率送信ができる。ただしACKは通常0.5秒以内に必ず送信される。
図26および図27はTCPデータを効率的に送受信する他の従来例である。これはTCPデータの送信側がTCPデータの受信側からのウインドウサイズ(つまりTCPデータの受信側が受け取ったTCPセグメントを処理するまでに一時的に保有できる最大データ量)をベースにTCPデータの受信側へのTCPセグメントの送信をおこなうという方式であり、輻輳ウインドウ(Congestion Window、以下「CWND」と称す)と呼ばれる概念が用いられる。この方式は、サーバとクライアント間の伝送路の伝送許容量が十分大きい場合は有用である。
しかしながら現実的にはサーバとクライアント間は、さまざまな伝送許容量を有する複数の伝送路によって構成されている。また、近年の計算機の能力向上によりクライアント側は小さなウインドウサイズを広告しない傾向にある。データ送信側は、データ受信側が広告したウインドウサイズ分のTCPデータ分全てを連続して送信した場合、その送信スループットは伝送途中にある複数の伝送路のうち、伝送許容量の小さい一部の伝送路にて、伝送許容量を超えてしまう可能性が出る。そのような状況においては、本方式では、パケットロスが多発し、逆にスループットが下がってしまう。
そこでTCPデータの送信側からもフロー制御を行うようにしたものがCWNDのしくみである。これはデータ送信側にて利用される。データ送信側はデータ送信開始時にたとえ大きなウインドウサイズをクライアントから受けていても、最初は1つだけしかTCPセグメントを送信しない。つまりCWND=1で開始する。その後CWNDを大きくしていき、最適なCWNDの値を見つける。
図26に示す通り、サーバ213は自分が送信したTCPデータを含むTCPセグメントに対するACKをクライアント214より受信する毎に、次に送信するTCPセグメントの数、すなわちCWNDの値を指数関数的に増やしていく。すなわち図26においてサーバ213はまずCWND=1で送信を開始し、自分の送信したTCPセグメントX81に対するACK X82をクライアント214より受信したらCWND=2とし、TCPセグメントX83およびX84を連続して送信する。それらのTCPセグメントX83およびX84に対するACK X85をクライアント214より受信したら、サーバ213はCWND=4とし、TCPセグメントX86〜X89を連続して送信する。さらにそれらのTCPセグメントX86〜X89に対するACK X90をクライアント214より受信したら、サーバ213はCWND=8とし、TCPセグメントX91以下8つのTCPセグメントを連続して送信する、という具合である。
その後、サーバ213は輻輳状態(パケットロスによるTCP再送が発生した時、もしくはRTOオーバーによるTCPの再送が発生した時)の検知があるまで、クライアントから広告されたウインドウサイズの範囲内でCWNDを増やしていく。
輻輳状態になった場合には、例えばCWNDの値をその時点の半分にし、その後は図27に示すように、例えば今度は加算的にCWNDをクライアントから広告されたウインドウサイズの範囲内で増やしていく。
ここで前記図27に示すような輻輳状態の後のデータ送信方法のことを「輻輳回避モード」と呼ぶ。逆に、前記図26に示すような輻輳状態の前の状態を「スロースタートモード」と呼ぶ。スロースタートモードではCWNDの増加が大きく、輻輳回避モードの状態では小さい。一度輻輳回避モードに切り替わるとその後はスロースタートモードには変わらず、ひとつのセッションが終了するまで輻輳回避モードのままである。
このようして求められた最適なCWNDの値で、サーバ・クライアント間の通信が行われている。近年のTCPの実装では、このような輻輳ウインドウを用いて送受信を行っているものがほとんどである。
スロースタートモードと輻輳回避モードの切替えは、上に述べたように輻輳やRTOオーバーが発生したか否かに関係なく、スロースタートモードにおいてCWNDがある閾値(以下「スロースタートスレッシュホルド」と表す)を超えた時に起こるようにしても良い。このスロースタートスレッシュホルドの値をどのように取るかについては実装者が適宜決定する。
以上のことより、TCPのスループットに係わるパラメタは以下の4つであることがわかる。
A)「RTT」。RTTは大きくするとスループットは下がり、小さくするとスループットは上がる。
B)「CWND」。CWNDは大きくするとスループットが上がり、小さくするとスループットは下がる。
C)「ウインドウサイズ」。ウインドウサイズを大きくすると、スループットは上がる可能性がでる(CWND依存)。小さくするとCWNDの大きさに関係なくスループットは下がる。
D)「TCPの送信モード」。スロースタートモードだと、スループットは急激に上がり、輻輳制御モードだと緩やかにスループットは上がる。送信モードの切替えは、スロースタートモード時に輻輳が発生した場合と、スロースタートモード時にCWNDがスロースタートスレッシュホルドを超えた場合である。
近年のインターネットの普及により、パケットに音声データを内包し、インターネット端末間で音声通信を行うインターネット電話(IP以下、「IP電話」と表す)システムが普及しつつある。IP電話システムでは、2つ以上のIP電話端末によって構成され、IP電話端末間で音声通信を行う。この場合、音声通信は通常UDPにて行われる。
同時にADSL(Asymmetric Digital Subscriber Line)やCATV網を用いてインターネットにアクセスする方法が一般家庭に普及してきている。一般家庭からADSLやCATV網を用いてインターネットに接続する際、家庭内のインターネット端末からのパケットをISP(インターネット・サービスプロバイダ)へ中継する役割や、ISPからのパケットを家庭内のインターネット端末へ中継する役割を持つ中継装置を用いることが多い。(以下そのような機能を持つ中継装置をアクセスルータと呼ぶ)。またADSLやCATVによる一般家庭へのアクセス回線の伝送許容量は年々大きくなってきているが、Ethernet(登録商標)のような双方向に10Mbps以上の伝送許容量を有するアクセス回線は未だ一部である。
さらに近年、上で述べたような家庭内ネットワークへのゲートウェイの役割を担うアクセスルータD2にIP電話機能を同時に載せる図2のような試みが盛んに行われている。図2の上位の伝送路D3には、クライアントD1とサーバD7との間のTCPセグメントD5と、IP電話D8とIP電話機能が搭載されたアクセスルータD2との間のUDPによる音声通信パケットD4とが混在する。また、上位の伝送路D3の伝送許容量は1Mbpsなので、他の伝送路D9、D10より小さく、特にTCPセグメントD5と音声通信パケットD4を同時に扱う場合は伝送路D3の伝送許容量を超えてしまう可能性がある。伝送許容量を超えるとアクセスルータD2のパケット送信キューや受信キューが最大長まで伸びてしまい、パケットロスが発生する。
特に音声通信パケットD4は、ロスが発生すると音声品質に大きな影響を及ぼす。また一般的にTCPセグメントによって上位の伝送路D3上の伝送量が伝送許容量に近付くにつれ、音声通信パケットのジッター(例えば非特許文献1参照)が大きくなり、これも音声品質に大きな影響を及ぼす。この現象は図2でのアクセスルータD2だけでなく、上位の中継装置D6でも発生する。よって図2のような構成の場合、音声品質を上げる場合は、音声以外の通信パケット、すなわち図2においてはTCPセグメントD5のスループットを意図的に下げる必要がある。図2における音声以外のTCPセグメントD5の上り方向スループットを下げることは、アクセスルータD2が出力パケットを自ら制御することで実現可能である。しかし下り方向はTCPセグメントおよび音声通信パケットを上位の中継装置D6が送信するため、アクセスルータD2による制御は困難である。
一般家庭内で行う音声通信以外の通信の大部分はTCPのような信頼性のある送信方法によって行われているが、このような音声通信以外のTCP通信の下り方向スループットを意図的に下げ、相対的に音声通信を優先させて音声品質を確保するためには、
「クライアントからのウインドウサイズの値を下げる」(例えば特許文献1参照)
という手法が知られている。
米国特許第6,038,216号明細書 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の技術ではこのようなウインドウサイズを処理できないクライアントに対しては有用でなく、音声通信以外のTCP通信の下り方向スループットを意図的に下げることが出来ず、結果的に音声品質を確保出来ないという課題があった。
本発明は、このような従来の課題を解決するものであり、ウインドウサイズに依存することなく音声通信以外のTCP通信の下り方向スループットを下げ、音声品質を確保することを目的とする。
本発明は上記目的を達成するために、少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法を設けたものである。この構成により、下り方向のTCPパケットのスループットがネットワークの許容範囲を超えず、その結果音声通信パケットなどを同時に流した時それらのパケットロスが低減される。
本発明の、少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたACK番号を有するACKパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のTCPスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決することができる。
少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法を設けている。
これにより、元の番号より小さな値へ書き換えられたACK番号を有するACKパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のTCPスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。
また、内部に保持しかつ前記パケットに関連する最も小さいシーケンス番号を前記パケットのACK番号として元のACK番号を置き換えた後前記ネットワーク上へ送信する請求項1に記載のネットワーク中継装置を設けてもよい。
これにより、TCPが輻輳回避モード時に、ACK番号ができるだけ小さな値に書き換えられ、その結果サーバのRTTがより大きくなりRTOをオーバーしやすくなるので、サーバから見て仮想的な輻輳状態がより起こしやすくなり、その結果下り方向のTCPパケットのスループットがより抑えられる。
また、前記ネットワーク上より受信したパケットが上り方向のデータ無しのACKの場合は内部に保持された前記パケットに関連する最も小さいシーケンス番号を前記パケットの新しいACK番号として元のACK番号を書き換えたパケットの前記ネットワーク上への送信および非送信を交互に実行する請求項1に記載のネットワーク中継装置を設けてもよい。
これにより、ACK番号ができるだけ小さな値に書き換えられ、その結果サーバのRTTがより大きくなりRTOをオーバーしやすくなるので、サーバとクライアントとの通信が双方向でない場合に、サーバからのパケット送信モードができるだけ早くスロースタートモードから輻輳回避モードへ切り替わる。
また、前記ネットワーク上より受信したパケットが上り方向のACKであって、かつその直前に送信された上り方向のACKが2度続けて同じACK番号の場合は、内部に保持された前記パケットに関連する最も小さいシーケンス番号を、前記パケットの新しいACK番号として書き換えた後前記ネットワーク上へ送信し、前記ネットワーク上より受信したパケットが上り方向のACKであってかつその直前に送信された2つの上り方向のACKが同じACK番号でない場合は、その直前に前記ネットワーク上へ送信した上り方向のパケットと同じACK番号を前記パケットの新しいACK番号として元のACK番号を書き換えた後前記ネットワーク上へ送信する請求項1に記載のネットワーク中継装置を設けてもよい。
これにより、ACK番号ができるだけ小さな値に書き換えられ、その結果サーバのRTTがより大きくなりRTOをオーバーしやすくなるので、サーバとクライアントとの通信が双方向の場合に、クライアントからサーバへのデータ送信が補償され、かつサーバからのパケット送信モードをできるだけ早くスロースタートモードから輻輳回避モードへ切り替わる。
また、前記上り方向パケットのACK番号を書き換えるためのACK番号変更部を有する請求項1に記載のネットワーク中継装置を設けてもよい。
これにより、上り方向のパケットのACK番号が元の番号より小さな値へ書き換えられているので、サーバは、自分がそれにより前にクライアントへ送ったパケットが全て届いているわけではないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなる。
また、前記シーケンス 番号を前記パケットより取得するためのシーケンス番号取得部と、取得したシーケンス番号を保持するためのセッション情報保持手段と、上り方向へ転送したパケット数を保持するパケット数保持手段と、前記シーケンス番号取得部と前記セッション情報保持手段と前記ACK番号変更部間におけるシーケンス番号の受渡しを制御する前記セッション管理部を有する請求項2または請求項3に記載のネットワーク中継装置を設けてもよい。
これにより、シーケンス番号が装置内部に保持され、上り方向のパケットのACK番号は2回に1回の割合で、保持している最も小さいシーケンス番号へ書き換えられるので、ACK番号がより小さな値に書き換えられるので、その結果サーバのRTTがより大きくなりRTOをオーバーしやすくなる。
また、前記シーケンス番号を前記パケットより取得するためのシーケンス番号取得部と、取得したシーケンス番号を保持するためのセッション情報保持手段とACK番号データベースを有し、前記シーケンス番号取得部と前記セッション情報保持手段と前記ACK番号変更部と前記ACK番号データベースとの間におけるシーケンス番号の受渡しを制御するセッション管理部を有する請求項2または請求項4に記載のネットワーク中継装置を設けてもよい。
これにより、シーケンス番号が装置内部に保持され、上り方向のパケットのACK番号は2回に1回の割合で、保持している最も小さいシーケンス番号へ書き換えられるので、ACK番号がより小さな値に書き換えられるので、その結果サーバのRTTがより大きくなりRTOをオーバーしやすくなる。
また、請求項1に記載のネットワーク中継装置が接続され、かつ少なくとも2つ以上のサーバとクライアントとが前記ネットワーク中継装置を解して接続され通信可能な状態にあるネットワーク通信システムを設けてもよい。
これにより、少なくとも2つ以上のサーバのうち、少なくとも1つ以上で全てのサーバの数より1つ少ない数のサーバからクライアントへの通信を他より優先させることができる。
また、前記サーバおよびクライアントのうち、少なくとも1組のサーバとクライアントは音声または動画情報を含むパケットを送受信できる請求項1に記載のネットワーク通信システムを設けてもよい。
これにより、音声や動画情報を含むパケットの通信が優先され、その他の種類のパケットの通信スループットが抑えられるので、デジタル音声または動画の通信品質が保たれ、良好なデジタル音声通話や動画配信が実現される。
以下、本発明の具体的な内容について実施例を用いて説明する。本実施例においては、本発明によって実現される機能を「TCPシェーパー」と称す。また、一つのパケットの中に含まれるデータ全体のことをパケットデータと称し、特にTCPセグメントを内包するパケットのことをTCPパケットと称す。TCPセグメントおよびACKの定義については前記背景技術にて定義したものと同じである。
またTCPによる通信は一組のサーバ・クライアントから成り、クライアントは接続要求をサーバに対して送信する。サーバでクライアントからの接続要求が受理された場合、データ通信のためのチャンネルがサーバ・クライアント間で作られる。このチャンネルは同一のサーバ・クライアント間で複数作ることができ、それぞれクライアントIPアドレス・サーバのIPアドレス(例えば図28の送信元IPアドレスフィールド502および宛先IPアドレスフィールド503に格納されたデータ)・クライアントの送信元ポート番号(例えば図19の114に格納されたデータ)・サーバへの宛先ポート番号(例えば図19の115に格納されたデータ)によりチャンネルを識別することができる。以下ではこのチャンネルのことを「セッション」と呼ぶ。
(実施の形態1)本実施の形態1においては以下の順序で話を進める。まず図1を用いて本発明の基本的な動作概念について述べる。次に図3〜図5を用いて基本型TCPシェーパーの構成を説明し、図6〜図9を用いて基本型TCPシェーパーを構成する各モジュールの処理フローについて述べる。最後に「輻輳回避モード」における基本型TCPシェーパーの動作例について図10および図11を用いて説明し、「スロースタートモード」における基本型TCPシェーパーの動作例について図12および図13を用いて述べる。
図1は本発明の基本的な動作概念を説明したものである。図1におけるLAN側クライアント301とWAN側サーバ302は、互いにTCPを用いて通信を行う。LAN側クライアント301とWAN側サーバ302間の通信経路の途中にTCPシェーパーを搭載した中継装置303が存在するものとする。ここで上り方向はTCPシェーパーを搭載した中継装置303からWAN側サーバへの向きである。さらに、TCPシェーパーを搭載した中継装置303とWAN側サーバ302との間の伝送路は、LAN側クライアント301とTCPシェーパーを搭載した中継装置303との間の伝送路に対して「上位の伝送路」と呼ばれる。
LAN側クライアント301がWAN側サーバ302に送信するTCPセグメントG3を、TCPシェーパーを搭載した中継装置303が転送する際、TCPシェーパーを搭載した中継装置303はACK番号フィールドの値(以後、「ACK番号」と称す)bを、nを引いた値b−nに更新しTCPセグメントG4として転送する。このようにTCPシェーパーを搭載した中継装置303によって上り方向TCPセグメントのACK番号がより小さい値に書き換えられることで、TCPセグメントG4はTCPセグメントG2に対するACKではなく、TCPセグメントG2より以前にWAN側サーバ302からLAN側クライアント301に対して送られたTCPセグメントに対するACKとなる。よってG2に対するACKは、図1よりも後の図示されていないシーケンスにおいてTCPシェーパーを搭載した中継装置303から送信されることになる。
するとTCPセグメントの送受信に関するWAN側サーバ302のRTTの値は大きくなり、RTOの値を容易にオーバーしやすくなる。その結果としてTCPセグメントの送受信の輻輳状態が仮想的に引き起こされ、WAN側サーバ302からLAN側クライアント301への下り方向TCPセグメントのスループットが抑えられ、他の種類の通信帯域が確保されやすくなる。
次に図3〜図5を用いて基本型TCPシェーパーの構成を説明する。図3は基本型TCPシェーパーの全体構成の例である。基本型TCPシェーパーA12は例えば図1における中継装置303における拡張機能の一つとして実装される。
通常の中継装置は図3のパケット入力部A1、パケット転送部A2、パケット出力部A9のみを有するが、基本型TCPシェーパーを有する中継装置303はこれらに加えてTCPシェ−パー本体A12をも有する。
TCPシェ−パー本体A12は、パケット転送部A2においてTCPパケット(TCPセグメントを持つパケット)を、経路B1を介してインターセプトし、インターセプトしたTCPパケットのACK番号の変更を行った後、もしくはシーケンス番号を取得した後に経路B2を介して再度パケット転送部A2に戻す。TCPパケット以外のパケットについては、TCPシェ−パー本体A12はインターセプトしない。従って、TCPパケット以外のパケットについてはパケット転送部A2が経路B21を介してパケット入力部A1から受け取った後、そのまま経路B22を介してパケット出力部へ転送する。
図3に示すように、本実施の形態1におけるTCPシェーパー本体A12はパケット傍受部A3、ACK番号変更部A4、シーケンス番号変更部A5、セッション管理部A6、セッション情報保持手段A7、パケット数保持手段A8の各モジュールで構成されている。
パケット傍受部A3は、パケット転送部A2からTCPパケットをインターセプトし他のモジュールへ転送したり、他のモジュールで処理の済んだTCPパケットをパケット転送部A2へ戻したりする役割を持つ。また、パケット傍受部A3は、パケットに含まれる発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)・宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)によりパケットが上り方向に向かっているのかどうかの判定も行う。
ACK番号変更部A4は、パケット傍受部A3がインターセプトしたTCPパケットのうち、例えば後に述べるルールに基づいて抽出した上り方向ACKのACK番号(例えば図19における111)を、セッション情報保持手段A7からセッション管理部A6を介して取得した新たなACK番号へ変更する。
シーケンス番号取得部A5は、パケット傍受部A3がインターセプトした下り方向TCPパケットから、シーケンス番号(例えば図19における110)とTCPデータ(例えば図19における104)のデータ長を抽出する。抽出されたシーケンス番号とTCPデータのデータ長は加算され、その加算された値がセッション管理部A6を介してセッション情報保持手段A7に書き込まれる。
セッション管理部A6は、ACK番号変更部A4またはシーケンス番号取得部A5と、セッション情報保持手段A7またはパケット数保持手段A8との各種データ受け渡しの仲介を行う。
セッション情報保持手段A7またはパケット数保持手段A8に保持されるセッションの数が複数存在する場合、セッション管理部A6はさらに、セッション情報保持手段A7またはパケット数保持手段A8と受け渡しする各種データが、セッション情報保持手段A7またはパケット数保持手段A8のどのセッションに属するかの判定を行う。例えばパケットの発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)・宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)およびTCPの発信元ポート番号(例えば図19の114に格納されたデータ)・宛先ポート番号(例えば図19の115に格納されたデータ)等、そのTCPパケットが属するセッションを特定する情報を他の情報と併せてACK番号変更部A4またはシーケンス番号取得部A5から取得し、それらの情報から例えばセッション情報保持手段A7またはパケット数保持手段A8におけるメモリ空間を特定して、該当するセッションのメモリ空間に保持する。
図4はセッション情報保持手段A7の内部構造の例である。セッション情報保持手段A7はセッション毎にメモリ空間を確保してセッション情報を保持する。例えばセッション1に割り当てられたメモリ空間には、パケットの発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)・宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)およびTCPの発信元ポート番号(例えば図19の114に格納されたデータ)・宛先ポート番号(例えば図19の115に格納されたデータ)を格納するC2、セッションのモード情報C3(詳細は後述)、ACK番号をアドレスS0〜Sn−1へ格納するためのセッションリストC4が保持されている。
セッション情報保持手段A7の内部で管理される各セッションのACK番号を保持するセッションリスト(例えば図4のセッション1におけるC4)はFIFO型の構造を有している。例えば図4のセッション1において、セッション管理部A6がそのセッションリストC4に新規のACK番号を登録する場合には常に一番上のアドレスSn−1へ格納され、セッションリストC4からACK番号を取り出す場合には常に一番下のアドレスS0に格納されているACK番号から取り出されるようになっている。アドレスS0にあるACK番号が取り出されたら、その上のアドレスS1〜Sn−1に格納されているACK番号のデータはそれぞれ1つ下のアドレスへと移動するようになっている。つまり、ある時点でのセッションリストC4において、アドレスS0に登録されているACK番号はその時点で常にもっとも古い時刻に登録されたACK番号であるため最初に取り出され、アドレスSn−1に登録されているACK番号はその時点のセッションリストC4が保持しているACK番号の中でもっとも新しい時刻に登録されたACK番号であるため最後に取り出されることになる。このようにして、セッション情報保持手段A7からは、該当するセッションリストが保持しているものの中で登録された時刻の最も古いACK番号が常に取り出されるようになっている。
セッションリストはセッション毎に保持されるが、通常保持できるセッションの数は有限である。セッション管理部A6がセッション情報保持手段A7に新しいセッションリストを作成しようとした時、もしセッション情報保持手段A7に空いているセッションリストのメモリ空間が無かった場合には、例えばセッション管理部A6はもっとも長時間にわたり更新されていないセッションリストをセッション情報保持手段A7から削除して新しいセッションリストの作成に充てる等のことを行う。
セッションのモード情報(例えば図4のセッション1におけるC3)には、該当するセッションのモードの状態、つまりスロースタートモードであるか、輻輳回避モードであるかの情報が格納される。本実施の形態1においてはスロースタートモードを1、輻輳回避モードを0とする。いずれのモードにおいても、後述するある一定のルールに基づいて抽出された上り方向ACKはそのACK番号(例えば図19・BR>ノおける111)が書き換えられた後にWAN側サーバ302へと転送されるが、それ以外の上り方向ACKはWAN側サーバ302へは転送されない。
本実施の形態1においては以下のような一定のルールにより上り方向ACKの抽出を行うものとする。すなわち、スロースタートモードにおいては上り方向のTCPパケットを必ず1つ置きに抽出してそのACK番号を書き換えるものとし、輻輳回避モードにおいては上り方向のTCPパケットのACK番号を常に書き換えるものとする。本発明における上り方向ACKの抽出ルールはこれに限らずどのように定義しても良いが、その抽出頻度についてはスロースタートモードのそれが輻輳回避モードのそれと同等か、もしくはそれよりも低く設定しなければならない。
パケット数保持手段A8は、上り方向に送信したTCPパケットの数をセッション毎に保持する。図5はパケット数保持手段A8の内部構造の例である。各パケットカウンターJ1、J3、J5には、各セッションの上り方向へ転送したTCPパケットの数が格納される。これらのパケットカウンターJ1、J3、J5は、スロースタートモードにおいて、上り方向ACKを2つに1つの割合でドロップさせるための処理に用いる。
前記セッション情報保持手段A7と同じくパケットカウンターもセッション毎に設けられている。通常保持できるセッション数は有限である。セッション管理部A6がパケット数保持手段A8に新しいセッションに用いるパケットカウンターを作成しようとした時、もしパケット数保持手段A8に空いているパケットカウンターのメモリ空間が無かった場合には、例えばセッション管理部A6はもっとも長時間にわたり更新されていないパケットカウンターをパケット数保持手段A8から削除して新しいセッションに用いるパケットカウンターの作成に充てる等のことを行う。
以上のモジュールを用いて以下のような処理を行うことにより、各セッションに流れるTCPセグメントのスループットを抑える。
これより、図6〜図9を用いて基本型TCPシェーパーを構成する各モジュールの処理フローについて述べる。なお、前述のようにパケット転送部A2以外のモジュールにおいてはTCPパケットのみが取り扱われる。
図6はパケット転送部A2の処理フローの例である。パケットの入力は、パケット入力部A1からのものとパケット傍受部A3からのものとがある。
パケット転送部A2はまずステップf11において、入力されたパケットがどこのモジュールからのものなのかを調べる。入力されたパケットがパケット入力部A1からの入力であれば、パケット転送部A2はステップf12の処理を行う。入力されたパケットがパケット傍受部A3からの入力であれば、そのパケットはTCPシェーパーの処理が終了したパケットであることを意味する。従ってパケット転送部A2はパケット出力部A9へパケットを渡す。
ステップf12において、パケット転送部A2は入力されたパケットがTCPパケットか否かを判定する。例えば背景技術における図28のIPヘッダ113内のプロトコル番号フィールド501に記載している番号が6であればそのパケットはTCPパケットであると判定できる。その場合、パケット転送部A2はパケット傍受部A3にパケットデータを渡し、TCPシェーパーの処理を開始する。入力されたパケットがTCPパケットでない場合、パケット転送部A2は通常の転送処理と同様にパケット出力部A9へパケットを渡す。
図7はパケット転送部A2からの入力パケットに対するパケット傍受部A3の処理フローの例である。
ステップf21において、パケット傍受部A3は入力されたパケットデータから発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)および宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)を取り出す。次にステップf22において、パケット傍受部A3はステップf21で取り出したパケットの発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)・宛先IPアドレスから、上り方向のTCPパケットなのか下り方向のTCPパケットなのかを判別する。
入力されたパケットが上り方向の場合、パケット傍受部A3は図3の経路B3を介してパケットデータをACK番号変更部A4に渡し、下り方向の場合は図3の経路B5を介してパケットデータをシーケンス番号取得部A5に渡す。
ちなみに、ACK番号変更部A4またはシーケンス番号取得部A5からパケット傍受部A3に入力されたパケットデータに対してパケット傍受部A3は何の処理も行わず、パケット転送部A2にパケットデータを渡す。
図8は上り方向TCPパケットに対するACK番号変更部A4の処理フローの例である。
ACK番号変更部A4へ入力されるものはパケット傍受部A3から渡される上り方向のTCPパケットのみである(図3の経路B3)。また、セッション管理部A6との間において、ACK番号変更部A4はTCPパケットそのものでなく、パケットの属しているセッションに関する情報のみでのやり取りを行う。
ACK番号変更部A4は、ステップf401において、パケット傍受部A3から入力された上り方向TCPパケットのTCPデータ部に実データが存在するかどうかを判定する(背景技術の図19におけるTCPパケット102の中にはTCPデータ104の部分に実データが存在しないものがある。以下、このような状態を「TCPデータ無し」と表す。逆にTCPデータ104の部分に実データが存在する状態を「TCPデータ有り」と表す)。上り方向TCPパケットがTCPデータ無しの場合そのTCPパケットはACKなので、ACK番号変更部A4はステップf402の処理を行う。
上り方向TCPパケットがTCPデータ有りの場合、本実施の形態1におけるACK番号変更部A4はその上り方向TCPパケットをドロップする。つまり、図1におけるLAN側クライアント301からのTCPデータ有り上りTCPパケットをWAN側サーバ302へ送らないようにする。その理由としてはTCPデータ有りパケットに対するACKをWAN側サーバ302へ送らないことでTCPのRTTをより大きくし、輻輳状態を発生しやすくすることが挙げられる。TCPデータ有りの上り方向TCPパケットがそれほど多くないことが明らかまたは予測可能な場合、ACK番号変更部A4はそれらのパケットをドロップする代わりに、再びパケット転送部A2へ戻した後、パケット出力部A9を介して中継装置A11より出力するようにしても構わない。しかしながら本実施の形態1においては、ACK番号変更部A4がTCPデータ有りの上り方向TCPパケットをドロップするという前提で話を進める。
ステップf402において、ACK番号変更部A4はセッション管理部A6を経由し、セッション情報保持手段A7から処理中のパケットが属しているセッションのモード情報(例えば図4のセッション1においてはC3)を取得する。ステップf403において、ACK番号変更部A4はステップf402にて取得したモード情報を元に、現在のセッションの動作モードがスロースタートモードか輻輳回避モードかを判定する。
セッションの動作モードが輻輳回避モードである場合、ACK番号変更部A4はステップf404においてセッション情報保持手段A7よりセッション管理部A6経由にて現在処理しているパケットが属するセッションリスト(例えば図4のセッション1であればC4)からその時点でもっとも古いACK番号(例えば図4のセッション1であればアドレスS0に格納されているデータ)を取得し、ステップf405においてパケット傍受部A3が一時的に保持するTCPパケットのACK番号を、先ほど取得したACK番号(例えば図4のセッション1であればS0)に書き換える。その後、ACK番号変更部A4はACK番号の書き換えが完了したTCPパケットをパケット傍受部A3へ渡す。もしセッションリストが空の場合は、ACK番号変更部A4はそこで一時的に保持するTCPパケットのACK番号の書き換えを行わずに、TCPパケットをパケット傍受部A3へ渡す。
セッションの動作モードがスロースタートモードである場合、ACK番号変更部A4はステップf406においてセッション管理部A6経由にてパケット数保持手段A8から現在処理中のパケットの属するセッションのパケットカウンター(例えば図4のセッション1であればJ1)の値を取り出し、ステップf407においてそのパケットカウンターの値が偶数であるか否かを判定する。パケットカウンターの値が偶数の場合にはACK番号変更部A4はステップf408の処理を行い、奇数の場合にはステップf411の処理を行う。(なお、ステップf407の分岐は本実施の形態1と逆に設定しても良い。すなわち、奇数の場合にステップf408の処理を行うという設定でもよい。)
ステップf411において、ACK番号変更部A4はセッション管理部A6経由にてパケット数保持手段A8内の該当するパケットカウンター(例えば図4のセッション1であればJ1)を1インクリメントした後、TCPパケットをドロップする。これにより、「上り方向のTCPパケットを必ず1つ置きに抽出してそのACK番号を書き換える」という、本実施の形態1におけるスロースタートモードが実現する。
ステップf408においてACK番号変更部A4は、セッション管理部A6経由にてセッション情報保持手段A7のうちACK番号変更部A4が一時的に保持しているTCPパケットが属するセッションリスト(例えば図4のセッション1であればC4)からその時点でもっとも古いACK番号(例えば図4のセッション1であればアドレスS0に格納されているデータ)を取得し、ステップf409にてパケットのACK番号を更新する。(ただし、ステップf409において該当するセッションリスト、例えば図4のセッション1であればC4が空の場合、ACK番号変更部A4はACK番号の更新を行わない。)
その後ステップf410において、ACK番号変更部A4はパケット数保持手段A8に該当するセッションのパケットカウンター(例えば図4のセッション1であればJ1)を1インクリメントした後、経路B4を介しパケット傍受部A3に処理が終了したTCPパケットを渡す。
図9はシーケンス番号取得部A5の処理フローの例である。シーケンス番号取得部A5へ入力されるものはパケット傍受部A3から渡される下り方向のTCPパケットのみである(図3の経路B5)。また、セッション管理部A6との間において、シーケンス番号取得部A5はTCPパケットそのものでなく、パケットの属しているセッションに関する情報のみでのやり取りを行う。
ステップf31において、シーケンス番号取得部A5は入力された下り方向TCPパケットのTCPデータ部に実データが存在するかどうかを判定する。すなわち、TCPデータ有りなのかTCPデータ無しなのかを判定する。TCPデータ無しの場合、シーケンス番号取得部A5はその下り方向TCPパケットに対して何も処理を行わずにパケット傍受部A3へパケットデータを渡す。TCPデータ有りの場合、シーケンス番号取得部A5は、ステップf32の処理を実行する。
ステップf32において、シーケンス番号取得部A5は処理中の下り方向TCPパケットからTCPデータ(例えば背景技術の図19においてはTCPパケット102の中のTCPデータ104)のデータ長とシーケンス番号を取得する。ステップf33において、シーケンス番号取得部A5はセッション管理部A6経由でパケットが属しているセッションのリストC4を、セッション情報保持手段A7から取得する。
ステップf34において、シーケンス番号取得部A5は処理中の下り方向TCPパケットに該当するセッションリスト(例えば図4のセッション1であればC4)から最新のACK番号(例えば図4のセッション1であればアドレスSn−1に格納されているデータ)をセッション情報保持手段A7よりセッション管理部A6経由にて取得する。次に、シーケンス番号取得部A5は先ほどのステップf32において取得したTCPデータ長とシーケンス番号との加算値を算出する。そして、その算出値と、先ほど取得した最新のACK番号(例えば図4のセッション1であればアドレスSn−1に格納されているデータ)とを比較する。
ここで最新のACK番号(例えば図4のセッション1であればアドレスSn−1に格納されているデータ)がTCPデータ長とシーケンス番号との加算値より大きい場合、シーケンス番号取得部A5は処理中の下り方向TCPパケットが再送パケットでないと判定する。その後ステップf35において、シーケンス番号取得部A5は先ほどのステップf32において取得した処理中の下り方向TCPパケットのシーケンス番号とTCPデータ長との加算値をセッション情報保持手段A7に保持された該当するセッションリストに追加登録する。
最新のACK番号(例えば図4のセッション1であればSn−1)がTCPデータ長とシーケンス番号との加算値より小さい場合、シーケンス番号取得部A5は処理中の下り方向TCPパケットが再送パケットであると判定する。この状態は輻輳が発生した(パケットロス、RTOオーバー)とみなされるので、シーケンス番号取得部A5はステップf36において、セッション情報保持手段A7中に保持された該当セッションのモード情報(例えば図4のセッション1であればC3)を輻輳回避モードに設定する。
その後ステップf37にて、シーケンス番号取得部A5はセッション情報保持手段A7からその時点でもっとも古いACK番号(例えば図4のセッション1であればアドレスS0に格納されているデータ)を取り出し、そのACK番号を持つTCPデータ無しの上り方向TCPパケットを、セッション情報保持手段A7のC2に格納されている送信元IPアドレス(例えば図28の宛先IPアドレスフィールド502に格納されたデータ)・宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)・送信元ポート番号(例えば図19の114に格納されたデータ)・宛先ポート番号(例えば図19の115に格納されたデータ)を元に新たに構築し、その上り方向TCPパケットと、処理済みの下り方向TCPパケットとをB6にてパケット傍受部A3に渡す。もし処理中の下り方向TCPパケットに該当するセッションリストがセッション情報保持手段A7に存在しない場合、つまり新規セッションの場合、シーケンス番号取得部A5はセッション管理部A6を介してセッション情報保持手段A7内に新規のセッションリストを作成する。
以上の構成および処理フローを有する基本型TCPシェーパーの動作例を説明する。まず、図10・図11を用いて輻輳回避モード時の基本型TCPシェーパーの動作例について述べる。図10はサーバ401・クライアント402・TCPシェーパーを搭載した中継装置(以下、「TCPシェーパー中継装置」と称す)403間での輻輳回避モード時のTCPによる通信の例である。サーバ401・クライアント402間の通信経路途中にはTCPシェーパー中継装置403がある。このTCPシェーパー中継装置403の内部構成は図3〜図5に示すものと同一とする。さらに、TCPシェーパー中継装置403がサーバ401・クライアント402間の通信経路途中で取り扱うパケットは、前述の図6〜図9に示すフロー処理がなされるものとする。サーバ401はクライアント402に対してTCPで毎回1000バイトずつTCPデータを含むパケット(K10、K30、K40、K60、K70、K90)を送信する。クライアント402はサーバ401に対しTCPデータを含まないパケット(M2、M5、M8)、つまりサーバ401から送信されたTCPデータを含むパケット(K10、K30、K40、K60、K70)に対するACKを送信する。
図11は、図10の通信時におけるセッション情報保持手段A7でのセッションリストの遷移例である。それらのセッションリストの遷移は図4のセッション保持手段A7におけるセッション1上で行われるものとする。すなわち、TCPシェーパー中継装置403のセッション情報保持手段A7のセッションリストC4は図11の状態L1から開始され、値11001と値10001がそれぞれ状態L1におけるセッションリストC4のアドレスS0およびS1にあらかじめ格納されている。値10001は値11001より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図10・図11の通信は輻輳回避モードなので、状態L1時のセッション1のモード情報C3には、輻輳回避モードであることを示す値0が格納されているものとする。
最初に、サーバ401がパケットK10を、クライアント402に対して送信する。次に、サーバ401・クライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットK10を受信する。パケットK10は下り方向なので、シーケンス番号取得部A5は前述図9に示すf31からのフローに従い、後述するフローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
f31においてパケットK10はTCPデータを含むので、TCPシェーパー中継装置403のシーケンス番号取得部A5はパケットK10のシーケンス番号とTCPデータ長を取得し(図9のf32)、パケットK10が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段A7に保持されているパケットK10のセッションリストがどれなのかを特定する(図9のf33)。本実施の形態1においては、パケットK10のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段A7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットK10のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、シーケンス番号取得部A5はパケットK10が再送TCPパケットか否かを例えば以下のようにして判断する(図9のf34)。
図10においてパケットK10はシーケンス番号=11001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置403のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットK10のシーケンス番号とTCPデータ長を加算する。すなわち、11001 + 1000 = 12001と加算する。
次にTCPシェーパー中継装置403のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値12001と、セッション情報保持手段A7のセッションリストC4の状態L1におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値11001とを比較する。シーケンス番号とTCPデータ長とを加算した値12001のほうが大きいので、シーケンス番号取得部A5はパケットK10が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値をセッション情報保持手段A7のセッションリストC4に追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値12001をセッション情報保持手段A7のセッションリストC4のS2に格納する。
その後、シーケンス番号取得部A5はパケットK10をパケットM1としてパケット傍受部A3へ渡す(図9のf38)。パケットM1はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は図11に示すように状態L1から状態L2へと遷移する。
パケットM1を受信したクライアント402は、パケットM1のACKとして、ACK番号12001を持ち、かつTCPデータを含まないパケットM2をサーバ401へ送信する。その途中でサーバ401とクライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットM2を受信する。パケットM2は上り方向なので、ACK番号変更部A4は図8に示すf401からのフローに従ってクライアント402から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ401へ渡すことによりサーバ401からクライアント402へのデータ送信の帯域を抑えるための処理を行う。
f401においてパケットM2はTCPデータを含まないので、TCPシェーパー中継装置403のACK番号変更部A4は、パケットM2が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段A7に保持されているパケットM2のセッションリストがどれなのかを特定する(図8のf402)。本実施の形態1においては、パケットM2のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段A7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットM2のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、ACK番号変更部A4は、パケットM2のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値0(輻輳回避モードを表す)が格納されているので、ACK番号変更部A4はパケットM2に対し、図8に示すf404からのフローに従って輻輳回避モードにおける処理を行う。
f404においてTCPシェーパー中継装置403のACK番号変更部A4はその時点でセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態L2におけるS0に格納された値10001を取得し(図8のf404。その結果、セッションリストC4のS0の値10001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移る)、その値10001をパケットM2のACK番号に上書きする(図8のf405)。パケットM2のACK番号が書き換えられたパケットK20はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりサーバ401へと転送される(図8のf412)。このとき、セッションリストC4は図11に示すように状態L2から状態L3へと遷移する。
この時点においてサーバ401にとっては既にクライアント402へ送信したパケットK10に対するACKがまだ返信されていないことになるが、本実施の形態1におけるパケットK20を受信したサーバ401はまだ輻輳が起きていないと判断し、引き続き次のデータが格納された2つのパケットK30、K40を連続してクライアント402に送信するものとする。その途中でサーバ401・クライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットK30およびK40を受信する。パケットK30およびK40は下り方向なので、シーケンス番号取得部A5は前述のパケットK10の場合と同様に図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちパケットK30は前述のパケットK10の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部A5はパケットK30が再送TCPパケットか否かを、前述のパケットK10の場合と同様に以下のようにして判断する(図9のf34)。
図10においてパケットK30はシーケンス番号=12001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置403のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットK30のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置403のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段A7のセッションリストC4の状態L3におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値12001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが大きいので、シーケンス番号取得部A5はパケットK30が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値13001をセッション情報保持手段A7のセッションリストC4のS2に格納する。その後、シーケンス番号取得部A5はパケットK30をパケットM3としてパケット傍受部A3へ渡す(図9のf38)。パケットM3はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は図11に示すように状態L3から状態L4へと遷移する。
パケットK40に対しても前述のパケットK30の場合と同様な処理が行われる。すなわち、パケットK40がTCPデータを含み、そのセッションリストがセッション1のセッションリストC4であると特定されるので(図9のf31〜f33)、シーケンスTCPシェーパー中継装置403のシーケンス番号取得部A5は、パケットK40のシーケンス番号13001とTCPデータ長1000とを加算した値14001と、セッション情報保持手段A7のセッションリストC4の状態L4におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値13001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値14001のほうが大きいので、シーケンス番号取得部A5はK40が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値13001をセッション情報保持手段A7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部A5はパケットK40をパケットM4としてパケット傍受部A3へ渡す(図9のf38)。パケットM4はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は図11に示すように状態L4から状態L5へと遷移する。
パケットM3・M4を受信したクライアント402は、このようにパケットM3、M4を短い間隔で受信した場合には、パケットM3、M4に対するACKをパケットM5に一つにまとめてサーバ401に送信するものとする。パケットM5は、ACK番号14001を持ち、かつTCPデータを含まない。その途中でサーバ401とクライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットM5を受信する。パケットM5は上り方向なので、ACK番号変更部A4は前述のACKパケットM2の場合と同様に、再び図8に示すf401からのフローに従ってクライアント402から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ401へ渡すことによりサーバ401からクライアント402へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットM5は前述のパケットM2の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットM5のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値0(輻輳回避モードを表す)が格納されているので、ACK番号変更部A4はパケットM5に対し、図8に示すf404からのフローに従って輻輳回避モードにおける処理を行う。
f404においてTCPシェーパー中継装置403のACK番号変更部A4はその時点でセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態L5におけるS0に格納された値11001を取得し(図8のf404。その結果、セッションリストC4のS0の値11001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移る)、その値11001をパケットM5のACK番号に上書きする(図8のf405)。パケットM5のACK番号が書き換えられたパケットK50はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりサーバ401へと転送される。このとき、セッションリストC4は図11に示すように状態L5から状態L6へと遷移する。
この時点においてもサーバ401にとっては既にクライアント402へ送信したパケットK10・K30・K40に対するACKがまだ返信されていないことになるが、本実施の形態1におけるパケットK50を受信したサーバ401は未だ輻輳が起きていないと判断し、引き続き次のデータが格納された2つのパケットK60、K70を連続してクライアント402に送信するものとする。その途中でサーバ401・クライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットK60およびK70を受信する。パケットK60およびK70は下り方向なので、シーケンス番号取得部A5は前述のパケットK10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットK60は前述のパケットK10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、TCPシェーパー中継装置403のシーケンス番号取得部A5は、パケットK60のシーケンス番号14001とTCPデータ長1000とを加算した値15001と、セッション情報保持手段A7のセッションリストC4の状態L6におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値14001とを比較する。シーケンス番号とTCPデータ長とを加算した値15001のほうが大きいので、シーケンス番号取得部A5はパケットK60が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値15001をセッション情報保持手段A7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部A5はパケットK60をパケットM6としてパケット傍受部A3へ渡す(図9のf38)。パケットM7はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は図11に示すように状態L6から状態L7へと遷移する。
パケットK70に対しても前述のパケットK60の場合と同様な処理が行われる。すなわち、パケットK70がTCPデータを含み、そのセッションリストがセッション1のセッションリストC4であると特定されるので(図9のf31〜f33)、TCPシェーパー中継装置403のシーケンス番号取得部A5は、パケットK70のシーケンス番号15001とTCPデータ長1000とを加算した値16001と、セッション情報保持手段A7のセッションリストC4の状態L7におけるS3に格納された、この時点で最も登録された時刻が新しいACK番号の値15001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値16001のほうが大きいので、シーケンス番号取得部A5はK40が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値16001をセッション情報保持手段A7のセッションリストC4のS4に格納する。その後、シーケンス番号取得部A5はパケットK70をパケットM7としてパケット傍受部A3へ渡す(図9のf38)。パケットM7はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は図11に示すように状態L7から状態L8へと遷移する。
パケットM6・M7を受信したクライアント402は、前述のパケットM3およびM4の場合と同様にパケットM6、M7を短い間隔で受信したので、パケットM6、M7に対するACKをパケットM8に一つにまとめてサーバ401に送信する。パケットM8は、ACK番号16001を持ち、かつTCPデータを含まない。その途中でサーバ401とクライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットM8を受信する。パケットM8は上り方向なので、ACK番号変更部A4は図8に示すf401からのフローに従ってクライアント402から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ401へ渡すことによりサーバ401からクライアント402へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットM8は前述のACKパケットM2等の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットM8のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値0(輻輳回避モードを表す)が格納されているので、ACK番号変更部A4はパケットM8に対し、図8に示すf404からのフローに従って輻輳回避モードにおける処理を行う。
f404においてTCPシェーパー中継装置403のACK番号変更部A4はその時点でセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態L8におけるS0に格納された値12001を取得し(図8のf404。その結果、セッションリストC4のS0の値12001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移り、S4に格納された値がS3に移る)、その値12001をパケットM8のACK番号に上書きする(図8のf405)。パケットM8のACK番号が書き換えられたパケットK80はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりサーバ401へと転送される。このとき、セッションリストC4は図11に示すように状態L8から状態L9へと遷移する。なお、このときのパケットK80は、サーバ401にとって結果的にパケットK10に対するACKとなっている。
この時点においてサーバ401にとっては既にクライアント402へ送信したパケットK10・K30・K40・K60・K70のうちパケットK10に対するACKは返信されてきているが、残りの送信パケットK30・K40・K60・K70に対するACKがまだ返信されていないことになる。ここに至り本実施の形態1におけるACKパケットK80を受信したサーバ401はパケットK30に対するACK(ACK番号13001を持つパケット)をクライアント402から受け取っていないために、サーバ401においてパケットK30に対するRTOがオーバーしたものとする。
そこでサーバ401はパケットK30以降の送信パケットにおいて輻輳が発生したと判断し、クライアント402に対してパケットK30と同様の内容を持つパケットK90を再送する。その途中でサーバ401とクライアント402間の通信経路途中にあるTCPシェーパー中継装置403が一旦そのパケットK90を受信する。パケットK90は下り方向なので、シーケンス番号取得部A5は前述のパケットK10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットK90は前述のパケットK10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部A5はパケットK90が再送TCPパケットか否かを例えば以下のように
して判断する(図9のf34)。
図10においてパケットK90はシーケンス番号=15001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置403のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットK90のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置403のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段A7のセッションリストC4の状態L9におけるS3に格納された、この時点で最も登録された時刻が新しいACK番号の値16001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが小さいので、シーケンス番号取得部A5はパケットK90が再送TCPパケットであると判断し、再送パケット用の処理を行う(図9のf36〜f37)。この場合シーケンス番号取得部A5は、セッション情報保持手段A7におけるセッション1のモード情報C3を、輻輳回避モードであることを示す値0に更新する(図9のf36、しかしもともと輻輳回避モードであるためモード情報C3の値は変化しない。)。
サーバ401は輻輳状態の間、TCPデータを含むパケットをクライアント402へ再送のみ行い、新たなTCPデータをクライアント402に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ403を輻輳状態からなるべく早く復帰させるために、TCPシェーパー中継装置403は例えばサーバ401へのACKを生成し、送信する。
すなわちTCPシェーパー中継装置403のシーケンス番号取得部A5は、セッション情報保持手段A7のC2に格納されている送信元IPアドレス(例えば図28の502)・宛先IPアドレス(例えば図28の503)・送信元ポート番号(例えば図19の114)・宛先ポート番号(例えば図19の115)を元に、サーバ401を輻輳状態から復帰させるために上り方向のTCPデータ無しパケットK91を生成し、パケット傍受部A3へ渡す。
その次に、TCPシェーパー中継装置403のACK番号変更部A4は、先ほどシーケンス番号取得部A5に置いて生成されたパケットK91をパケット傍受部A3から入力し、その時点でセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態L9にてS0に格納されている値13001を取得し(その結果、セッションリストC4のS0の値13001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移る。)、その値13001をパケットK91のACK番号に書き込む(図9のf37)。ACK番号13001が書き込まれたパケットK91はパケット傍受部A3へと渡され(図9のf38)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりサーバ401へと送信される。
その後、TCPシェーパー中継装置403はセッション情報保持手段A7にACK番号を格納せず、パケットK90をパケットM9としてパケット傍受部A3へ渡す(図9のf38)。パケットM9はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置403よりクライアント402へと転送される。このとき、セッションリストC4は状態L9から状態L10へと遷移する。
次に、図12・図13を用いてスロースタートモード時の基本型TCPシェーパーの動作例について述べる。図12はサーバ404・クライアント405・TCPシェーパー中継装置406間でのスロースタートモード時のTCPによる通信の例である。サーバ404・クライアント405間の通信経路途中にはTCPシェーパー中継装置406がある。このTCPシェーパー中継装置406の内部構成は図3〜図5に示すものと同一とする。さらに、TCPシェーパー中継装置406がサーバ404・クライアント405間の通信経路途中で取り扱うパケットは、前述の図6〜図9に示すフロー処理がなされるものとする。サーバ404はクライアント405に対してTCPで毎回1000バイトずつTCPデータを含むパケット(P10、P30、P50、P70、P80、P100、P120)を送信する。クライアント405はサーバ404に対しTCPデータを含まないパケット(R2、R4、R6、R9、R11)、つまりサーバ404から送信されたTCPデータを含むパケット(P10、P30、P50、P70、P80、P100)に対するACKを送信する。
図13は、図12の通信時におけるセッション情報保持手段A7でのセッションリストの遷移例である。それらのセッションリストの遷移は図4のセッション保持手段A7におけるセッション1上で行われるものとする。すなわち、TCPシェーパー中継装置406のセッション情報保持手段A7のセッションリストC4は図13の状態Q1から開始され、値11001と値10001がそれぞれ状態Q1におけるセッションリストC4のアドレスS0およびS1にあらかじめ格納されている。値10001は値11001より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図12・図13の通信はスロースタートモードなので、状態Q1時のセッション1のモード情報C3には、スロースタートモードであることを示す値1が格納されているものとする。さらにパケット数保持手段A8内のセッション1のパケットカウンターJ1には偶数の値が格納されているものとする。サーバ404がスロースタートモードの場合、TCPシェーパー中継装置406は、このパケット数保持手段A8内のパケットカウンターを後述するような形で用いることにより、なるべく早く輻輳状態を引き起こして輻輳回避モードへと切り替えさせる。こうすることによって、TCPシェーパー中継装置406はスロースタートモードにおけるサーバ404からクライアント405への通信帯域の急激な増大を抑えることが出来る。
最初に、サーバ404がパケットP10を、クライアント405に対して送信する。次に、サーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406はパケットP10を受信する。パケットP10は下り方向なので、シーケンス番号取得部A5は前述の輻輳回避モードにおける基本型TCPシェーパーの動作例の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
パケットP10は前述の輻輳回避モードにおける基本型TCPシェーパーの動作例の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部A5はパケットP10が再送TCPパケットか否かを例えば以下のようにして判断する(図9のf34)。
図10においてパケットP10はシーケンス番号=11001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置406のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットP10のシーケンス番号とTCPデータ長を加算する。すなわち、11001 + 1000 = 12001と加算する。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値12001と、セッション情報保持手段A7のセッションリストC4の状態Q1におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値11001とを比較する。シーケンス番号とTCPデータ長とを加算した値12001のほうが大きいので、シーケンス番号取得部A5はパケットP10が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値をセッション情報保持手段A7のセッションリストC4に追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値12001をセッション情報保持手段A7のセッションリストC4のS2に格納する。その後、シーケンス番号取得部A5はパケットP10をパケットR1としてパケット傍受部A3へ渡す(図9のf38)。パケットR1はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される(図9のf38)。このとき、セッションリストC4は図13に示すように状態Q1から状態Q2へと遷移する。
パケットR1を受信したクライアント405は、パケットR1のACKとして、ACK番号12001を持ち、かつTCPデータを含まないパケットR2をサーバ404へ送信する。その途中でサーバ404とクライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットR2を受信する。パケットR2は上り方向なので、ACK番号変更部A4は前述の輻輳回避モードにおける基本型TCPシェーパーの動作例の場合と同様に、図8に示すf401からのフローに従ってクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡すかあるいはサーバ404に対するACKパケットをドロップすることによりサーバ404からクライアント405へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットR2は前述の輻輳回避モードにおける基本型TCPシェーパーの動作例の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットR2のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部A4はパケットR2に対し、図8に示すf406からのフローに従ってスロースタートモードにおける処理を行う。
f406においてTCPシェーパー中継装置406のACK番号変更部A4は、パケットR2が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、パケット数保持手段A8に保持されているパケットR2のパケットカウンタがどれなのかを特定し、パケットカウンタの値を取得する。本実施の形態1においては、パケットR2のIPアドレス情報およびポート番号情報が図5に示すパケット数保持手段A8におけるセッション1のIPアドレス情報およびポート番号情報J2と一致し、その結果パケットR2のパケットカウンタがセッション1のパケットカウンタJ1であると特定されるものとする。すなわちf406ではTCPシェーパー中継装置406のACK番号変更部A4は、パケットカウンタJ1の値を取得する。
f407においてパケットカウンタJ1には偶数の値が格納されているので、ACK番号変更部A4はクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡す処理を実行する。つまり、TCPシェーパー中継装置406のACK番号変更部A4はセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態Q2におけるS0に格納された値10001を取得し(図8のf408。その結果、セッションリストC4のS0の値10001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移る)、その値10001をパケットR2のACK番号に上書きし(図8のf409)、パケットカウンタJ1の値を1インクリメントして更新する(図8のf410。その結果、パケットカウンタJ1の値は奇数になる。)。パケットR2のACK番号が書き換えられたパケットP20はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりサーバ404に転送へと転送される(図8のf412)。このとき、セッションリストC4は図13に示すように状態Q2から状態Q3へと遷移する。
この時点においてサーバ404にとっては既にクライアント405へ送信したパケットP10に対するACKが返信されていないことになるが、本実施の形態1におけるパケットP20を受信したサーバ404はまだ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットP30を、クライアント405に送信するものとする。その途中でサーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットP30を受信する。パケットP30は下り方向なので、シーケンス番号取得部A5は前述のパケットP10の場合と同様に、再び図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちパケットP30は前述のパケットP10の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部A5はパケットP30が再送TCPパケットか否かを、前述のパケットP10の場合と同様に以下のようにして判断する(図9のf34)。
図10においてパケットP30はシーケンス番号=12001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置406のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットP30のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段A7のセッションリストC4の状態Q3におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値12001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが大きいので、シーケンス番号取得部A5はパケットP30が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値13001をセッション情報保持手段A7のセッションリストC4のS2に格納する。その後、シーケンス番号取得部A5はパケットP30をパケットR3としてパケット傍受部A3へ渡す(図9のf38)。パケットR3はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は図13に示すように状態Q3から状態Q4へと遷移する。
パケットR3を受信したクライアント405は、パケットR3のACKとして、ACK番号13001を持ち、かつTCPデータを含まないパケットR4をサーバ404に送信する。その途中でサーバ404とクライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットR4を受信する。パケットR4は上り方向なので、ACK番号変更部A4は前述のACKパケットR2の場合と同様に、再び図8に示すf401からのフローに従ってクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡すかあるいはサーバ404に対するACKパケットをドロップすることによりサーバ404からクライアント405へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットR4は前述のパケットR2の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットR4のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部A4はパケットR4に対し、図8に示すf406からのフローに従ってスロースタートモードにおける処理を行う。
f406においてTCPシェーパー中継装置406のACK番号変更部A4は、前述のACKパケットR2の場合と同様にして、パケットR4のパケットカウンタがセッション1のパケットカウンタJ1であると特定し、そこに格納されている値を取得する。
f407においてパケットカウンタJ1には奇数の値が格納されているので、ACK番号変更部A4はサーバ404に対するACKパケットをドロップする処理を実行する。つまり、TCPシェーパー中継装置406のACK番号変更部A4はパケットカウンタJ1の値を1インクリメントして更新し(図8のf411。その結果、パケットカウンタJ1の値は偶数になる。)、パケットR4をドロップする(図8のf413)。このとき、セッションリストC4は図13に示すように状態Q4から状態Q5へと遷移する。
この時点においてサーバ404にとっては既にクライアント405へ送信したパケットP10およびP30に対するACKが未だ返信されていないことになるが、本実施の形態1におけるサーバ404は輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットP50を、クライアント405に送信するものとする。その途中でサーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットP50を受信する。パケットP50は下り方向なので、シーケンス番号取得部A5は前述のパケットP10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットP50は前述のパケットP10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、パケットP50のシーケンス番号13001とTCPデータ長1000とを加算した値14001と、セッション情報保持手段A7のセッションリストC4の状態Q5におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値13001とを比較する。シーケンス番号とTCPデータ長とを加算した値14001のほうが大きいので、シーケンス番号取得部A5はパケットP50が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値14001をセッション情報保持手段A7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部A5はパケットP50をパケットR5としてパケット傍受部A3へ渡す(図9のf38)。パケットR5はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は図13に示すように状態Q5から状態Q6へと遷移する。
パケットR5を受信したクライアント405は、パケットR5のACKとして、ACK番号14001を持ち、かつTCPデータを含まないパケットR6をサーバ404に送信する。その途中でサーバ404とクライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットR6を受信する。パケットR6は上り方向なので、ACK番号変更部A4は図8に示すf401からのフローに従ってクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡すかあるいはサーバ404に対するACKパケットをドロップすることによりサーバ404からクライアント405へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットR6は前述のパケットR2等の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットR6のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部A4はパケットR6に対し、図8に示すf406からのフローに従ってスロースタートモードにおける処理を行う。
f406においてTCPシェーパー中継装置406のACK番号変更部A4は、前述のパケットR2等の場合と同様にして、パケットR6のパケットカウンタがセッション1のパケットカウンタJ1であると特定し、そこに格納されている値を取得する。
f407においてパケットカウンタJ1には偶数の値が格納されているので、ACK番号変更部A4はクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡す処理を実行する。つまり、TCPシェーパー中継装置406のACK番号変更部A4はセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態Q6におけるS0に格納された値11001を取得し(図8のf408。その結果、セッションリストC4のS0の値11001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移る。)、その値11001をパケットR6のACK番号に上書きし(図8のf409)、パケットカウンタJ1の値を1インクリメントして更新する(図8のf410。その結果、パケットカウンタJ1の値は奇数になる。)。パケットR6のACK番号が書き換えられたパケットP60はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりサーバ404へと転送される。このとき、セッションリストC4は図13に示すように状態Q6から状態Q7へと遷移する。
この時点においてサーバ404にとっては既にクライアント405へ送信したパケットP10・P30・P50に対するACKがまだ返信されていないことになるが、本実施の形態1におけるパケットP60を受信したサーバ404はやはりまだ輻輳が起きていないと判断し、引き続き次のデータが格納された2つのパケットP70・P80を連続してクライアント405に送信ものとする。その途中でサーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットP70およびP80を受信する。パケットP70およびP80は下り方向なので、シーケンス番号取得部A5は前述のパケットP10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットP70は前述のパケットP10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、パケットP70のシーケンス番号14001とTCPデータ長1000とを加算した値15001と、セッション情報保持手段A7のセッションリストC4の状態Q7におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値14001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値15001のほうが大きいので、シーケンス番号取得部A5はパケットP70が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値15001をセッション情報保持手段A7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部A5はパケットP70をパケットR7としてパケット傍受部A3へ渡す(図9のf38)。パケットR7はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は図13に示すように状態Q7から状態Q8へと遷移する。
パケットP80についても前述のパケットP70の場合と同様な処理が行われる。すなわち、パケットP80がTCPデータを含み、そのセッションリストがセッション1のセッションリストC4であると特定されるので(図9のf31〜f33)、TCPシェーパー中継装置406のシーケンス番号取得部A5は、パケットP80のシーケンス番号15001とTCPデータ長1000とを加算した値16001と、セッション情報保持手段A7のセッションリストC4の状態Q8におけるS3に格納された、この時点で最も登録された時刻が新しいACK番号の値15001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値16001のほうが大きいので、シーケンス番号取得部A5はパケットP80が再送TCPパケットではないと判断し、パケットP80のシーケンス番号16001とTCPデータ長1000とを加算した値16001をセッション情報保持手段A7のセッションリストC4のS4に格納する(図9のf35)。その後、シーケンス番号取得部A5はパケットP80をパケットR8としてパケット傍受部A3へ渡す(図9のf38)。パケットR8はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は図13に示すように状態Q8から状態Q9へと遷移する。
パケットP70・P80を受信したクライアント405は、このようにパケットP70、P80を短い間隔で受信した場合には、パケットP70、P80に対するACKとして、ACK番号16001を持ち、かつTCPデータを含まないパケットR9をサーバ404に送信するものとする。その途中でサーバ404とクライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットR9を受信する。パケットR9は上り方向なので、ACK番号変更部A4は前述のACKパケットR2等の場合と同様に、再び図8に示すf401からのフローに従ってクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡すかあるいはサーバ404に対するACKパケットをドロップすることによりサーバ404からクライアント405へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットR9はパケットR2等の時と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットR9のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部A4はパケットR9に対し、図8に示すf406からのフロー従ってスロースタートモードにおける処理を行う。
f406においてTCPシェーパー中継装置406のACK番号変更部A4は、パケットR2等の場合と同様にして、パケットR9のパケットカウンタがセッション1のパケットカウンタJ1であると特定し、そこに格納されている値を取得する。
f407においてパケットカウンタJ1には奇数の値が格納されているので、ACK番号変更部A4はサーバ404に対するACKパケットをドロップする処理を実行する。つまり、TCPシェーパー中継装置406のACK番号変更部A4はパケットカウンタJ1の値を1インクリメントして更新し(図8のf411。その結果、パケットカウンタJ1の値は偶数になる。)、パケットR9をドロップする(図8のf413)。このとき、セッションリストC4は図13に示すように状態Q9から状態Q10へと遷移する。
この時点においてもサーバ404にとっては既にクライアント405へ送信したパケットP10・P30・P50・P70・P80に対するACKが未だ返信されていないことになるが、本実施の形態1におけるサーバ404はやはり未だ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットP100を、クライアント405に送信するものとする。その途中でサーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットP100を受信する。パケットP100は下り方向なので、シーケンス番号取得部A5は前述のパケットP10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットP100は前述のパケットP10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、パケットP100のシーケンス番号16001とTCPデータ長1000とを加算した値17001と、セッション情報保持手段A7のセッションリストC4の状態Q10におけるS4に格納された、この時点で最も登録された時刻が新しいACK番号の値16001とを比較する。シーケンス番号とTCPデータ長とを加算した値17001のほうが大きいので、シーケンス番号取得部A5はパケットP100が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部A5はシーケンス番号とTCPデータ長とを加算した値17001をセッション情報保持手段A7のセッションリストC4のS5に格納する。その後、シーケンス番号取得部A5はパケットP100をパケットR10としてパケット傍受部A3へ渡す(図9のf38)。パケットR10はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は図13に示すように状態Q10から状態Q11へと遷移する。
パケットR10を受信したクライアント405は、パケットR10のACKとして、ACK番号17001を持ち、かつTCPデータを含まないパケットR11をサーバ404に送信する。その途中でサーバ404とクライアント405間の通信経路途中にあるTCPシェーパー中継装置406が一旦そのパケットR11を受信する。パケットR11は上り方向なので、ACK番号変更部A4は図8に示すf401からのフローに従ってクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡すかあるいはサーバ404に対するACKパケットをドロップすることによりサーバ404からクライアント405へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットR11は前述のACKパケットR2等の場合と同様にして、TCPデータを含まないパケットであると判定され(図8のf401)、そのセッションリストがセッション1のセッションリストC4であると特定される(図8のf402)。
その後、ACK番号変更部A4は、パケットR11のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、ACK番号保持手段A7のセッション1のモード情報C3に格納された値を元に判断する(図8のf403)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部A4はパケットR11に対し、図8に示すf406からのフローに従ってスロースタートモードにおける処理を行う。
f406においてTCPシェーパー中継装置406のACK番号変更部A4は、前述のACKパケットR2等の場合と同様にして、パケットR11のパケットカウンタがセッション1のパケットカウンタJ1であると特定し、そこに格納されている値を取得する。
f407においてパケットカウンタJ1には偶数の値が格納されているので、ACK番号変更部A4はクライアント405から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ404へ渡す処理を実行する。つまり、TCPシェーパー中継装置406のACK番号変更部A4はセッション情報保持手段A7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態Q11におけるS0に格納された値12001を取得し(図8のf408。その結果、セッションリストC4のS0の値12001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移り、S4に格納された値がS3に移り、S5に格納された値がS4に移る。)、その値12001をパケットR11のACK番号に上書きし(図8のf409)、パケットカウンタJ1の値を1インクリメントして更新する(図8のf410。その結果、パケットカウンタJ1の値は奇数になる。)。パケットR11のACK番号が書き換えられたパケットP110はパケット傍受部A3へと渡され(図8のf412)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406より404へと転送される。このとき、セッションリストC4は図13に示すように状態Q11から状態Q12へと遷移する。なお、このときのパケットP110は、サーバ404にとって結果的にパケットP10に対するACKとなっている。
この時点においてサーバ404にとっては既にクライアント405へ送信したパケットP10・P30・P50・P70・P80・P100のうちパケットP10に対するACKは返信されてきているが、残りの送信パケットP30・P50・P70・P80・P100に対するACKがまだ返信されていないことになる。ここに至り本実施の形態1におけるACKパケットP110を受信したサーバ404はパケットP30に対するACK(ACK番号13001を持つパケット)をクライアント405から受け取っていないために、サーバ404においてパケットP30に対するRTOがオーバーしたものとする。
そこでサーバ404はパケットP30以降の送信パケットにおいて輻輳が発生したと判断し、クライアント405に対してパケットP30と同様の内容を持つパケットP120を再送する。その途中でサーバ404・クライアント405間の通信経路途中にあるTCPシェーパー中継装置406がそのパケットP120を一旦受信する。パケットP120は下り方向なので、シーケンス番号取得部A5は前述のパケットP10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。
すなわちまずパケットP120は前述のパケットP10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部A5はパケットP120が再送TCPパケットか否かを例えば以下のようにして判断する(図9のf34)。
図10においてパケットP120はシーケンス番号=12001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置406のシーケンス番号取得部A5は図9の処理フローf32において取得したパケットP120のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置406のシーケンス番号取得部A5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段A7のセッションリストC4の状態Q12におけるS4に格納された、この時点で最も登録された時刻が新しいACK番号の値17001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが小さいので、シーケンス番号取得部A5はパケットK90が再送TCPパケットであると判断し、再送パケット用の処理を行う(図9のf36〜f37)。この場合シーケンス番号取得部A5は、セッション情報保持手段A7にお
けるセッション1のモード情報C3を、輻輳回避モードであることを示す値0に更新する(図9のf36)。
サーバ404は輻輳状態の間、TCPデータを含むパケットをクライアント405へ再送のみ行い、新たなTCPデータをクライアント405に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ404を輻輳状態からなるべく早く復帰させるために、TCPシェーパー中継装置406は例えばサーバ404へのACKを生成し、送信する。
すなわちTCPシェーパー中継装置406のシーケンス番号取得部A5は、セッション情報保持手段A7のC2に格納されている送信元IPアドレス(例えば図28の502)・宛先IPアドレス(例えば図28の503)・送信元ポート番号(例えば図19の114)・宛先ポート番号(例えば図19の115)を元に、輻輳状態から復帰させるために上り方向のTCPデータ無しパケットP121を生成し、パケット傍受部A3へ渡す。
その次に、TCPシェーパー中継装置406のACK番号変更部A4は、先ほどシーケンス番号取得部A5に置いて生成されたパケットP121をパケット傍受部A3から入力し、その時点でセッション情報保持手段A7に格納されている最も登録時刻の古いACK番号、すなわちこの場合のセッションリストC4の状態Q12にてS0に格納されている値13001を取得し(その結果、セッションリストC4のS0の値13001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移り、S4に格納された値がS3に移る。)、その値13001をパケットP121のACK番号に書き込む(図9のf37)。ACK番号13001が書き込まれたパケットP121はパケット傍受部A3へと渡され(図9のf38)、そしてパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりサーバ404へと送信される。
その後、TCPシェーパー中継装置406はセッション情報保持手段A7にACK番号を格納せず、パケットP120をパケットR12としてパケット傍受部A3へ渡す(図9のf38)。パケットR12はパケット転送部A2・パケット出力部A9へと順次渡されて、TCPシェーパー中継装置406よりクライアント405へと転送される。このとき、セッションリストC4は状態Q12から状態Q13へと遷移する。
以上のように本発明によれば、少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたACK番号を有するACKパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のTCPスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
(実施の形態2)
本実施の形態2においては以下の順序で話を進める。まず実施の形態1との違いを述べる。次に図14、図15を用いて拡張版TCPシェーパーの構成を説明し、更に図16を用いて拡張版TCPシェーパーを構成する各モジュールの処理フローについて述べる。最後に拡張版TCPシェーパーの動作例について図17および図18用いて述べる。
実施の形態1では、例えば図12においてサーバ404・クライアント405間のTCPによる通信において、TCPデータを含むパケットの中継はサーバ404からクライアント405への方向(下り方向)のみ対応していた。仮にクライアント405からサーバ404へTCPデータを含むパケットを送信した場合は、TCPデータを含むパケットはTCPシェーパー中継装置406によってドロップされ、サーバへ中継されない。
近年のインターネットでは、TCPセッションにおいてサーバ・クライアントが双方向にTCPデータをやり取りすることがある。例えばユーザPC等の情報機器の上のウェブブラウザを用いてウェブサーバ上のコンテンツを見る場合、ウェブサーバはウェブサーバ上のコンテンツがTCPデータに内包されたパケットを、ユーザが利用しているPC等の情報機器へ送信する。ユーザがPC等の情報機器上のブラウザを用いてネットショッピングを行う場合は、PC等の情報機器はウェブサーバへクレジットカード番号等の情報がTCPデータに内包されたパケットを送信する。この時ウェブサーバを図12におけるサーバ404と見立て、またPC等の情報機器を図12におけるクライアント405と見立てると、サーバ・クライアント間でTCPデータを双方向に送受信していることがわかる。実施の形態1を上記の環境で用いると、PC等の情報機器からウェブサーバへ向けたTCPパケットがドロップされてしまうため、ユーザはオンラインショッピング等の利用ができなくなる。以上より、実施の形態1のようにTCPデータを含むパケットを片方向のみ中継するという方式は利便性を損なう場合がある。一方本実施の形態2である拡張版TCPシェーパーはその動作原理自体は実施の形態1と同じであるが、双方向にTCPデータを含むパケットを中継可能にし、尚かつ下り方向のTCPのスループットを下げることができる。
図14・図15を用いて拡張版TCPシェーパーの構成を説明する。図14は拡張版TCPシェーパーの全体構成の例である。拡張版TCPシェーパーT12は実施の形態1と同じく、例えば図1における中継装置303における拡張機能の一つとして実装される。
通常の中継装置は図14のパケット入力部T1、パケット転送部T2、パケット出力部T9のみを有するが、拡張版TCPシェーパーを有する中継装置303はこれらに加えてTCPシェ−パー本体T12を有する。TCPシェーパー本体T12内の大部分のモジュールは、実施の形態1の時と同じ動作をする。
パケット入力部T1、パケット転送部T2、パケット出力部T9のパケットに対する処理は、実施の形態1におけるパケット入力部A1、パケット転送部A2、パケット出力部A9の処理と同じである。
またTCPシェーパー本体T12内のパケット傍受部T3・ACK番号変更部T4・シーケンス番号取得部T5・セッション情報保持手段T7は、実施の形態1におけるパケット傍受部T3・ACK番号変更部T4・シーケンス番号取得部T5・セッション情報保持手段T7と同じ動作をする。
ACK番号データベースT8は、上り方向に送信すべきTCPパケットのACK番号を一時的に保持する。図15はACK番号データベースT8の内部構造の例である。各ACK番号キャッシュY1、Y3、Y5には、各セッションの上り方向へ転送したTCPパケットのACK番号の値が格納される。これらのACK番号キャッシュY1、Y3、Y5は、スロースタートモードにおいて、上り方向ACKの値を2つに1つの割合で増加させるための処理に用いる。前記セッション情報保持手段T7と同じくACK番号キャッシュもセッション毎に設けられている。通常保持できるセッション数は有限である。セッション管理部T6がACK番号データベースT8にあいているACK番号キャッシュのメモリ空間がなかった場合には、例えばセッション管理部T6は最も長時間にわたり更新されていないACK番号キャッシュをACK番号データベースT8から削除して新しいセッションに用いるACK番号キャッシュの作成に充てる等のことを行う。
セッション管理部T6は、ACK番号変更部T4またはシーケンス番号取得部T5と、セッション情報保持手段T7またはACK番号データベースT8との各種データ受け渡しの仲介を行う。実施の形態1ではセッション管理部A6はACK番号変更部A4またはシーケンス番号取得部A5と、セッション情報保持手段A7またはパケット数保持手段A8との各種データ受け渡しの仲介を行うが、本実施の形態2ではパケット数保持手段A8の代わりにACK番号データベースT8のデータ受け渡しの仲介を行う。
セッション情報保持手段T7またはACK番号データベースT8に保持されるセッションの数が複数存在する場合、セッション管理部T6はさらに、セッション情報保持手段T7またはACK番号データベースT8と受け渡しする各種データが、セッション情報保持手段T7またはACK番号データベースT8のどのセッションに属するかの判定を行う。例えばパケットの発信元IPアドレス(例えば図28の送信元IPアドレスフィールド502に格納されたデータ)・宛先IPアドレス(例えば図28の宛先IPアドレスフィールド503に格納されたデータ)およびTCPの発信元ポート番号(例えば図19の114に格納されたデータ)・宛先ポート番号(例えば図19の115に格納されたデータ)等、そのTCPパケットが属するセッションを特定する情報を他の情報と併せてACK番号変更部T4またはシーケンス番号取得部T5から取得し、それらの情報から例えばセッション情報保持手段T7またはACK番号データベースT8におけるメモリ空間を特定して、該当するセッションのメモリ空間に保持する。
セッション情報保持手段T7の内部構造は、実施の形態1のセッション情報保持手段A7の内部構造を表す図4において、A7をT7としたものと同じである。以下では図4を、A7をT7としたものとして扱う。
本実施の形態2においては以下のような一定のルールにより上り方向ACKの抽出を行うものとする。すなわち、輻輳回避モードにおいては上り方向のTCPパケットのACK番号を元の値より小さい値に書き換え、必ず新しい時間に送信する上りTCPパケットのACK番号はそれ以前に送ったTCPパケットのACK番号より大きな値にするものとする。一方スロースタートモードにおいては上り方向のTCPパケットのACK番号を書き換え、新しい時間に送信する上りTCPパケットのACK番号はそれ以前に送られたTCPパケットのACK番号と同じか大きい値にするものとする。すなわち上り方向のTCPパケットは必ず、その前後どちらかの上りTCPパケットと同じ値を取り、そのACK番号は2つの上りTCPパケット毎に増加する。
以上のモジュールを用いて以下のような処理を行うことにより、各セッションに流れるTCPセグメントのスループットを抑える。
これより、拡張版TCPシェーパーを構成する各モジュールの処理フローについて述べる。なおT12内部のモジュールのうち、パケット傍受部T3以外のものにおいてはTCPパケットのみが取り扱われる。
パケット転送部T2の処理フローは、実施の形態1のパケット転送部A2のフローを表す図6において、パケット入力部A1の代わりにパケット入力部T1、パケット傍受部A3の代わりにパケット傍受部T3、パケット転送部A3の代わりにパケット転送部T3としたものである。以下では図6を、パケット入力部A1をパケット入力部T1、パケット傍受部A3をパケット傍受部T3、パケット転送部A3をパケット転送部T3としたものとして扱う。
パケット傍受部T3の処理フローは、実施の形態1のパケット傍受部A3のフローを表す図7において、パケット転送部A2の代わりにパケット転送部T2、ACK番号変更部A4の代わりにACK番号変更部T4、シーケンス番号取得部A5の代わりにシーケンス番号取得部T5としたものである。以下では図7を、パケット転送部A2をパケット転送部T2、ACK番号変更部A4をACK番号変更部T4、シーケンス番号取得部A5をシーケンス番号取得部T5にしたものとして扱う。
図16は上り方向TCPパケットに対するACK番号変更部T4の処理フローの例である。
ACK番号変更部T4へ入力されるものはパケット傍受部T3から渡される上り方向のTCPパケットのみである(図14の経路U3)。また、セッション管理部T6との間において、ACK番号変更部T4はTCPパケットそのものでなく、パケットの属しているセッションに関する情報のみのやり取りを行う。実施の形態1のACK番号変更部A4ではTCPデータを含むパケットを図8のステップf401において判定し、ステップf413においてドロップしていたが、本実施の形態2ではTCPデータ有りパケットとTCPデータ無しパケットを同等に扱う。
ACK番号変更部T4は、ステップf1001において、セッション情報保持手段T7から処理中のパケットが属しているセッションのモード情報(例えば図4のセッション1においてはC3)を取得する。ステップf1002において、ACK番号変更部T4はf1001で取得したセッションのモード情報を元に、現在のセッションの動作モードがスロースタートか輻輳回避モードかを判定する。
セッションの動作モードが輻輳回避モードである場合、ACK番号変更部T4はステップf1003においてセッション情報保持手段T7よりセッション管理部T6経由において現在処理しているパケットが属するセッションリスト(例えば図4のセッション1であればC4)からその時点でもっとも古いACK番号(例えば図4のセッション1であればアドレスS0に格納されているデータ)を取得し、ステップf1004においてACK番号変更部T4は現在処理中のパケットのACK番号フィールド(例えば図19の111)を先ほど取得したACK番号に書き換える。その後、ACK番号変更部T4はACK番号の書き換えが完了したTCPパケットを、経路U4を介しパケット傍受部T3へ渡す。もしセッションリストが空の場合は、ACK番号変更部T4はそこで一時的に保持するTCPパケットのACK番号の書き換えを行わずに、経路U4を介しパケットをパケット傍受部T3へ渡す。
セッションの動作モードがスロースタートモードである場合、ACK番号変更部T4はステップf1005においてACK番号データベースT8の現在処理しているパケットが属するACK番号キャッシュ(例えば図15のセッション1であればY1)に値が格納されているか否かを調べる。値が格納されていない場合、ACK番号変更部T4はステップf1006において、セッション情報保持手段T7よりセッション管理部T6経由において現在処理しているパケットが属するセッションリスト(例えば図4のセッション1であればC4)からその時点でもっとも古いACK番号(例えば図4のセッション1であればアドレスS0に格納されているデータ)を取得し、ステップf1007において、先程取得したACK番号を現在処理中のパケットのACK番号フィールドに上書きする。更にACK番号変更部T4はステップf1008において、ステップf1006で取得したACK番号をACK番号データベースT8の現在処理中のパケットが属するACK番号キャッシュ(例えば図15のセッション1であればY1)に書き込む。その後、ACK番号変更部T4はACK番号の書き換えが完了したパケットを、経路U4を介しパケット傍受部T3へ渡す。もしセッションリストが空の場合は、ACK番号変更部T4はそこで一時的に保持するTCPパケットのACK番号の書き換えを行わずに、経路U4を介しTCPパケットをパケット傍受部T3へ渡す。
ステップf1005においてACK番号データベースT8の現在処理しているパケットが属するACK番号キャッシュに値が格納されている場合、ACK番号変更部T4はステップf1009において、ACK番号データベースT8のACK番号キャッシュ(例えば図15のセッション1であればY1)からACK番号を取得し、ステップf1010においてACK番号変更部T4は先に取得したACK番号(例えば図15のセッション1であればY1)を現在処理中のパケットのACK番号フィールドに上書きする。次にステップf1011においてACK番号変更部T4は、先の処理f1009において値を取得したACK番号キャッシュ(例えば図15のセッション1であればY1)の値を削除し、ACK番号キャッシュを空にする。その後、ACK番号変更部T4は経路U4を介しパケットをパケット傍受部T3へ渡す。
最後にACK番号変更部T4はステップf1012において、パケットデータをパケット傍受部T3に渡す。
以上の構成および処理フローを有する基本型TCPシェーパーの動作例を説明する。輻輳回避モード時の拡張版TCPシェーパーの動作は、実施の形態1で示した基本型TCPシェーパーと同じである。
図17・図18を用いてスロースタートモード時の拡張版TCPシェーパーの動作例について述べる。図17はサーバ407・クライアント408・TCPシェーパーを搭載した中継装置(以下、「TCPシェーパー中継装置」と称す)409間でのスロースタートモード時のTCPによる通信の例である。サーバ407・クライアント408間の通信経路途中にはTCPシェーパー中継装置409がある。このTCPシェーパー中継装置409の内部構成は図4、図14、図15に示すものと同一とする。さらに、TCPシェーパー中継装置409がサーバ407・クライアント408間の通信経路途中で取り扱うパケットは、前述の図6、図7、図9、図16に示すフロー処理がなされるものとする。サーバ407はクライアント408に対してTCPで毎回1000バイトずつTCPデータを含むパケット(v10、v30、v50、v70、v80、v100、v120)を送信する。クライアント408はサーバ407に対しパケット(e2、e4、e6、e9、e11)、つまりサーバ407から送信されたTCPデータを含むパケット(v10、v30、v50、v70、v80、v100)に対するACKを送信する。クライアント408がサーバ407に対して送信するパケット(e2、e4、e6、e9、e11)は、TCPデータ有りであってもTCPデータ無しであってもよい。
図18は、図17の通信時におけるセッション情報保持手段T7でのセッションリストの遷移例である。それらのセッションリストの遷移は図4のセッション保持手段T7におけるセッション1上で行われるものとする。すなわち、TCPシェーパー中継装置409のセッション情報保持手段T7のセッションリストC4は図18の状態z1から開始され、値11001と値10001がそれぞれ状態z1におけるセッションリストC4のアドレスS0およびS1にあらかじめ格納されている。値10001は値11001より古い時刻に登録されたものである。この時点において輻輳はまだ発生していないものとする
また、図17・図18の通信はスロースタートモードなので、状態z1時のセッション1のモード情報C3には、スロースタートモードであることを示す値1が格納されているものとする。さらに状態z1時のACK番号データベースT8のACK番号キャッシュY1は空であるとする。サーバ407がスロースタートモードの場合、TCPシェーパー中継装置409は、ACK番号データベースT8内のACK番号キャッシュを後述するような形で用いることにより、なるべく早く輻輳状態を引き起こして輻輳回避モードへと切り替えさせる。こうすることによって、TCPシェーパー中継装置409はスロースタートモードにおけるサーバ407からクライアント408への通信帯域の急激な増大を抑えることが出来る。
最初に、サーバ407がパケットv10を、クライアント408に対して送信する。次に、サーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットv10を受信する。パケットv10は下り方向なので、シーケンス番号取得部T5は前述図9に示すf31からのフローに従い、後述するフローf1002以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわち、f31においてパケットv10はTCPデータを含むので、TCPシェーパー中継装置409のシーケンス番号取得部T5はパケットv10のシーケンス番号とTCPデータ長を取得し(図9のf32)、パケットv10が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段T7に保持されているパケットv10のセッションリストがどれなのかを特定する(図9のf33)。本実施の形態2においては、パケットv10のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段T7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットv10のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、シーケンス番号取得部T5はパケットv10が再送TCPパケットか否かを例えば以下のようにして判断する(図9のf34)。
図10においてパケットv10はシーケンス番号=11001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置409のシーケンス番号取得部T5は図9の処理フローf32において取得したパケットv10のシーケンス番号とTCPデータ長を加算する。すなわち、11001 + 1000 = 12001と加算する。
次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、このシーケンス番号とTCPデータ長とを加算した値12001と、セッション情報保持手段T7のセッションリストC4の状態z1におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値11001とを比較する。シーケンス番号とTCPデータ長とを加算した値12001のほうが大きいので、シーケンス番号取得部T5はパケットv10が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値をセッション情報保持手段T7のセッションリストC4に追加登録する(図9のf35)。この場合シーケンス番号取得部T5はシーケンス番号とTCPデータ長とを加算した値12001をセッション情報保持手段T7のセッションリストC4のS2に格納する。
その後、シーケンス番号取得部T5はパケットv10をパケットe1としてパケット傍受部T3へ渡す(図9のf38)。パケットe1はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図18に示すように状態z1から状態z2へと遷移する。
パケットe1を受信したクライアント408は、パケットe1のACKとして、ACK番号12001を持つパケットe2をサーバ407へ送信する。その途中でサーバ407とクライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットe2を受信する。パケットe2は上り方向なので、ACK番号変更部T4は図16に示すf1001からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すことによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。
f1001においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe2が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段T7に保持されているパケットe2のセッションリストがどれなのかを特定する。本実施の形態2においては、パケットe2のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段T7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットe2のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、ACK番号変更部T4は、パケットe2のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段T7のセッション1のモード情報C3に格納された値を元に判断する(図16のf1002)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部T4はパケットe2に対し、図16に示すf1005からのフローに従ってスロースタートモードにおける処理を行う。
すなわちf1005においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe2が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、ACK番号データベースT8に保持されているパケットe2に属するACK番号キャッシュがどれなのかを特定し、ACK番号キャッシュの値を取得する。本実施の形態2においては、パケットe2のIPアドレス情報およびポート番号情報が図15に示すACK番号データベースT8におけるセッション1のIPアドレス情報およびポート番号情報Y2と一致し、その結果パケットe2のACK番号キャッシュがセッション1のACK番号キャッシュY1であると特定されるものとする。状態z2の時ACK番号キャッシュY1は空なので、TCPシェーパー中継装置409は続いてf1006の処理を行う。
f1006においてACK番号変更部T4はクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡す処理を実行する。つまり、TCPシェーパー中継装置409のACK番号変更部T4はセッション情報保持手段T7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態z2におけるS0に格納された値10001を取得し(図16のf1006)。その結果、セッションリストC4のS0の値10001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移る)、その値10001をパケットe2のACK番号に上書きし(図16のf1007)、先のf1006で取得したACK番号をACK番号キャッシュY1書きこむ(図16のf1008。その結果、ACK番号キャッシュY1は空でなくなる)。パケットe2のACK番号が書き換えられたパケットv20はパケット傍受部T3へと渡され(図16のf1012)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407に転送へと転送される。このとき、セッションリストC4は図18に示すように状態z2から状態z3へと遷移する。
この時点においてサーバ407にとっては既にクライアント408へ送信したパケットv10に対するACKが返信されていないことになるが、本実施の形態2におけるパケットv20を受信したサーバ407はまだ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットv30を、クライアント408に送信するものとする。その途中でサーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットv30を受信する。パケットv30は下り方向なので、シーケンス番号取得部T5は前述のパケットv10の場合と同様に、再び図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理を行う。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわちパケットv30は前述のパケットv10の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部T5はパケットv30が再送TCPパケットか否かを、前述のパケットv10の場合と同様に以下のようにして判断する(図9のf34)。
図17においてパケットv30はシーケンス番号=12001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置409のシーケンス番号取得部T5は図9の処理フローf32において取得したパケットv30のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段T7のセッションリストC4の状態z3におけるS1に格納された、この時点で最も登録された時刻が新しいACK番号の値12001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが大きいので、シーケンス番号取得部T5はパケットv30が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部T5はシーケンス番号とTCPデータ長とを加算した値13001をセッション情報保持手段T7のセッションリストC4のS2に格納する。その後、シーケンス番号取得部T5はパケットv30をパケットe3としてパケット傍受部T3へ渡す(図9のf38)。パケットe3はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図13に示すように状態z3から状態z4へと遷移する。
パケットe3を受信したクライアント408は、パケットe3のACKとして、ACK番号13001を持つパケットe4をサーバ407に送信する。その途中でサーバ407とクライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットe4を受信する。パケットe4は上り方向なので、ACK番号変更部T4は前述のACKパケットe2の場合と同様に、再び図16に示すf1001からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すことによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットe4は前述のパケットe2の場合と同様にして、そのセッションリストがセッション1のセッションリストC4であると特定され(図16のf1001)、セッション1のモード情報C3に格納されていた値よりパケットe4のセッションがスロースタートモードであると特定される(図16のf1005)。その後、ACK番号変更部T4はパケットe4に対し、図16に示すf1005からのフローにしたがってスロースタートモードにおける処理を行う。
すなわちf1005においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe4が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、ACK番号データベースT8に保持されているパケットe4に属するACK番号キャッシュがどれなのかを特定し、ACK番号キャッシュの値を取得する。本実施の形態2においては、パケットe4のIPアドレス情報およびポート番号情報が図15に示すACK番号データベースT8におけるセッション1のIPアドレス情報およびポート番号情報Y2と一致し、その結果パケットe4のACK番号キャッシュがセッション1のACK番号キャッシュY1であると特定されるものとする。状態z4の時ACK番号キャッシュY1は空でないので、TCPシェーパー中継装置409は続いてf1009の処理を行う。
f1009においてACK番号変更部T4はクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡す処理を実行する。つまり、TCPシェーパー中継装置409のACK番号変更部T4はACK番号データベースT8のACK番号キャッシュY1に格納されている値10001を取得し(図16のf1009)、その値10001をパケットe4のACK番号に上書きし(図16のf1010)、 ACK番号キャッシュY1に格納されている値10001を削除する(図16のf1011。その結果、ACK番号キャッシュY1は空になる。)。パケットe4のACK番号が書き換えられたパケットv40はパケット傍受部T3へと渡され(図16のf1012)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407に転送へと転送される。このとき、セッションリストC4は図18に示すように状態z4から状態z5へと遷移する。
この時点においてサーバ407にとっては既にクライアント408へ送信したパケットv10およびv30に対するACKが未だ返信されていないことになるが、本実施の形態2におけるサーバ407は輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットv50を、クライアント408に送信するものとする。その途中でサーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットv50を受信する。パケットv50は下り方向なので、シーケンス番号取得部T5は前述のパケットv10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理を行う。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわちまずパケットv50は前述のパケットv10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、パケットv50のシーケンス番号13001とTCPデータ長1000とを加算した値14001と、セッション情報保持手段T7のセッションリストC4の状態z5におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値13001とを比較する。シーケンス番号とTCPデータ長とを加算した値14001のほうが大きいので、シーケンス番号取得部T5はパケットv50が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部T5はシーケンス番号とTCPデータ長とを加算した値14001をセッション情報保持手段T7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部T5はパケットv50をパケットe5としてパケット傍受部T3へ渡す(図9のf38)。パケットe5はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図18に示すように状態z5から状態z6へと遷移する。
パケットe5を受信したクライアント408は、パケットe5のACKとして、ACK番号14001を持つパケットe6をサーバ407へ送信する。その途中でサーバ407とクライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットe6を受信する。パケットe6は上り方向なので、ACK番号変更部T4はパケットe2と同じく、図16に示すf1001からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すことによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。
f1001においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe6が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段T7に保持されているパケットe6のセッションリストがどれなのかを特定する。本実施の形態2においては、パケットe6のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段T7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットe6のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、ACK番号変更部T4は、パケットe6のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段T7のセッション1のモード情報C3に格納された値を元に判断する(図16のf1002)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部T4はパケットe6に対し、図16に示すf1005からのフローに従ってスロースタートモードにおける処理を行う。
すなわちf1005においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe6が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、ACK番号データベースT8に保持されているパケットe6に属するACK番号キャッシュがどれなのかを特定し、ACK番号キャッシュの値を取得する。本実施の形態2においては、パケットe6のIPアドレス情報およびポート番号情報が図15に示すACK番号データベースT8におけるセッション1のIPアドレス情報およびポート番号情報Y2と一致し、その結果パケットe6のACK番号キャッシュがセッション1のACK番号キャッシュY1であると特定されるものとする。状態z6の時ACK番号キャッシュY1は空なので、TCPシェーパー中継装置409はパケットe1の処理と同じく、f1006の処理を行う。
f1006においてACK番号変更部T4はクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407
へ渡す処理を実行する。つまり、TCPシェーパー中継装置409のACK番号変更部T4はセッション情報保持手段T7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態z6におけるS0に格納された値11001を取得し(図16のf1006)。その結果、セッションリストC4のS0の値11001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移る)、その値11001をパケットe6のACK番号に上書きし(図16のf1007)、先のf1006で取得したACK番号をACK番号キャッシュY1書きこむ(図16のf1008。その結果、ACK番号キャッシュY1は空でなくなる。)。パケットe6のACK番号が書き換えられたパケットv60はパケット傍受部T3へと渡され(図16のf1012)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407に転送へと転送される。このとき、セッションリストC4は図18に示すように状態z6から状態z7へと遷移する。
この時点においてサーバ407にとっては既にクライアント408へ送信したパケットv10・v30・v50に対するACKがまだ返信されていないことになるが、本実施の形態2におけるパケッvP60を受信したサーバ407はやはりまだ輻輳が起きていないと判断し、引き続き次のデータが格納された2つのパケットv70・v80を連続してクライアント408に送信するものとする。その途中でサーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットv70およびv80を受信する。パケットv70およびv80は下り方向なので、シーケンス番号取得部T5は前述のパケットv10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわちまずパケットv70は前述のパケットv10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、パケットv70のシーケンス番号14001とTCPデータ長1000とを加算した値15001と、セッション情報保持手段T7のセッションリストC4の状態z7におけるS2に格納された、この時点で最も登録された時刻が新しいACK番号の値14001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値15001のほうが大きいので、シーケンス番号取得部T5はパケットv30が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部T5はシーケンス番号とTCPデータ長とを加算した値15001をセッション情報保持手段T7のセッションリストC4のS3に格納する。その後、シーケンス番号取得部T5はパケットv70をパケットe7としてパケット傍受部T3へ渡す(図9のf38)。パケットe7はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図18に示すように状態z7から状態z8へと遷移する。
パケットv80についても前述のパケットv70の場合と同様な処理が行われる。すなわち、パケットv80がTCPデータを含み、そのセッションリストがセッション1のセッションリストC4であると特定されるので(図9のf31〜f33)、TCPシェーパー中継装置409のシーケンス番号取得部T5は、パケットv80のシーケンス番号15001とTCPデータ長1000とを加算した値16001と、セッション情報保持手段T7のセッションリストC4の状態z8におけるS3に格納された、この時点で最も登録された時刻が新しいACK番号の値15001とを比較する(図9のf34)。シーケンス番号とTCPデータ長とを加算した値16001のほうが大きいので、シーケンス番号取得部T5はパケットv80が再送TCPパケットではないと判断し、パケットv80のシーケンス番号16001とTCPデータ長1000とを加算した値16001をセッション情報保持手段T7のセッションリストC4のS4に格納する(図9のf35)。その後、シーケンス番号取得部T5はパケットv80をパケットe8としてパケット傍受部T3へ渡す(図9のf38)。パケットe8はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図18に示すように状態z8から状態z9へと遷移する。
パケットe7・e8を受信したクライアント408は、このようにパケットe7、e8を短い間隔で受信した場合には、パケットe7、e8に対して一つのACKにまとめて、ACK番号16001を持つパケットe9をサーバ407に送信するものとする。その途中でサーバ407とクライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットe9を受信する。パケットe9は上り方向なので、ACK番号変更部T4は前述のACKパケットe2等の場合と同様に、再び図16に示すf1001からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すことによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。
すなわちパケットe9は前述のパケットe2の場合と同様にして、そのセッションリストがセッション1のセッションリストC4であると特定され(図16のf1001)、セッション1のモード情報C3に格納されていた値よりパケットe9のセッションがスロースタートモードであると特定される(図16のf1005)。その後、ACK番号変更部T4はパケットe9に対し、図16に示すf1005からのフローにしたがってスロースタートモードにおける処理を行う。
すなわちf1005においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe9が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、ACK番号データベースT8に保持されているパケットe9に属するACK番号キャッシュがどれなのかを特定し、ACK番号キャッシュの値を取得する。本実施の形態2においては、パケットe9のIPアドレス情報およびポート番号情報が図15に示すACK番号データベースT8におけるセッション1のIPアドレス情報およびポート番号情報Y2と一致し、その結果パケットe9のACK番号キャッシュがセッション1のACK番号キャッシュY1であると特定されるものとする。状態z9の時ACK番号キャッシュY1は空でないので、TCPシェーパー中継装置409は続いてf1009の処理を行う。
f1009においてACK番号変更部T4はクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡す処理を実行する。つまり、TCPシェーパー中継装置409のACK番号変更部T4はACK番号データベースT8のACK番号キャッシュY1に格納されている値11001を取得し(図16のf1009)、その値11001をパケットe9のACK番号に上書きし(図16のf1010)、 ACK番号キャッシュY1に格納されている値10001を削除する(図16のf1011。その結果、ACK番号キャッシュY1は空になる。)。パケットe9のACK番号が書き換えられたパケットv90はパケット傍受部T3へと渡され(図16のf1012)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407に転送へと転送される。このとき、セッションリストC4は図18に示すように状態z9から状態z10へと遷移する。
この時点においてもサーバ407にとっては既にクライアント408へ送信したパケットv10・v30・v50・v70・v80に対するACKが未だ返信されていないことになるが、本実施の形態2におけるサーバ407はやはり未だ輻輳が起きていないと判断し、引き続き次のデータが格納されたパケットv100を、クライアント408に送信するものとする。その途中でサーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットv100を受信する。パケットv100は下り方向なので、シーケンス番号取得部T5は前述のパケットv10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわちまずパケットv100は前述のパケットv10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、パケットv100のシーケンス番号16001とTCPデータ長1000とを加算した値17001と、セッション情報保持手段T7のセッションリストC4の状態z10におけるS4に格納された、この時点で最も登録された時刻が新しいACK番号の値16001とを比較する。シーケンス番号とTCPデータ長とを加算した値17001のほうが大きいので、シーケンス番号取得部T5はパケットv100が再送TCPパケットではないと判断し、シーケンス番号とTCPデータ長とを加算した値を追加登録する(図9のf35)。この場合シーケンス番号取得部T5はシーケンス番号とTCPデータ長とを加算した値17001をセッション情報保持手段T7のセッションリストC4のS5に格納する。その後、シーケンス番号取得部T5はパケットv100をパケットe10としてパケット傍受部T3へ渡す(図9のf38)。パケットe10はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は図13に示すように状態z10から状態z11へと遷移する。
パケットe10を受信したクライアント408は、パケットe10のACKとして、ACK番号17001を持つパケットe11をサーバ407に送信する。その途中でサーバ407とクライアント408間の通信経路途中にあるTCPシェーパー中継装置409が一旦そのパケットe11を受信する。パケットe11は上り方向なので、ACK番号変更部T4は図8に示すf401からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すかあるいはサーバ407に対するACKパケットをドロップすることによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。すなわちパケットe11は前述のACKパケットe2等の場合と同様にして、図16に示すf1001からのフローに従ってクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡すことによりサーバ407からクライアント408へのデータ送信の帯域を抑えるための処理を行う。
f1001においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe11が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、セッション情報保持手段T7に保持されているパケットe11のセッションリストがどれなのかを特定する。本実施の形態2においては、パケットe11のIPアドレス情報およびポート番号情報が図4に示すセッション情報保持手段T7におけるセッション1のIPアドレス情報およびポート番号情報C2と一致し、その結果パケットe11のセッションリストがセッション1のセッションリストC4であると特定されるものとする。
その後、ACK番号変更部T4は、パケットe11のセッションが輻輳回避モード・スロースタートモードのいずれなのかを、セッション情報保持手段T7のセッション1のモード情報C3に格納された値を元に判断する(図16のf1002)。セッション1のモード情報C3には値1(スロースタートモードを表す)が格納されているので、ACK番号変更部T4はパケットe11に対し、図16に示すf1005からのフローに従ってスロースタートモードにおける処理を行う。
すなわちf1005においてTCPシェーパー中継装置409のACK番号変更部T4は、パケットe11が有しているIPアドレス情報(例えば図28の502および503)およびポート番号情報(例えば図19の114および115)により、ACK番号データベースT8に保持されているパケットe11に属するACK番号キャッシュがどれなのかを特定し、ACK番号キャッシュの値を取得する。本実施の形態2においては、パケットe11のIPアドレス情報およびポート番号情報が図15に示すACK番号データベースT8におけるセッション1のIPアドレス情報およびポート番号情報Y2と一致し、その結果パケットe11のACK番号キャッシュがセッション1のACK番号キャッシュY1であると特定されるものとする。状態z11の時ACK番号キャッシュY1は空なので、TCPシェーパー中継装置409はパケットe2の処理と同じく、f1006の処理を行う。
f1006においてACK番号変更部T4はクライアント408から受け取ったACK番号よりも小さな値のACK番号へ書き換えてからサーバ407へ渡す処理を実行する。つまり、TCPシェーパー中継装置409のACK番号変更部T4はセッション情報保持手段T7のセッションリストC4に格納されている最も登録時刻の古いACK番号、すなわちこの場合の状態z11におけるS0に格納された値12001を取得し(図16のf1006)。その結果、セッションリストC4のS0の値12001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移り、S4に格納された値がS3に移り、S5に格納された値がS4に移る)、その値12001をパケットe11のACK番号に上書きし(図16のf1007)、先のf1006で取得したACK番号をACK番号キャッシュY1書きこむ(図16のf1008。その結果、ACK番号キャッシュY1は空でなくなる。)。パケットe11のACK番号が書き換えられたパケットv110はパケット傍受部T3へと渡され(図16のf1012)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407に転送へと転送される。このとき、セッションリストC4は図18に示すように状態z11から状態z12へと遷移する。なお、このときのパケットv110は、サーバ407にとって結果的にパケットv10に対するACKとなっている。
この時点においてサーバ407にとっては既にクライアント408へ送信したパケットv10・v30・v50・v70・v80・v100のうちパケットv10に対するACKは返信されてきているが、残りの送信パケットv30・v50・v70・v80・v100に対するACKがまだ返信されていないことになる。ここに至り本実施の形態2におけるACKパケットv110を受信したサーバ407はパケットv30に対するACK(ACK番号13001を持つパケット)をクライアント408から受け取っていないために、サーバ407においてパケットv30に対するRTOがオーバーしたものとする。
そこでサーバ407はパケットv30以降の送信パケットにおいて輻輳が発生したと判断し、クライアント408に対してパケットv30と同様の内容を持つパケットv120を再送する。その途中でサーバ407・クライアント408間の通信経路途中にあるTCPシェーパー中継装置409がそのパケットv120を一旦受信する。パケットv120は下り方向なので、シーケンス番号取得部T5は前述のパケットv10等の場合と同様に、図9に示すf31からのフローに従い、フローf401以降で上り方向のパケットのACK番号を書き換えるのに必要となるシーケンス番号を、取得・保持するための処理が行われる。シーケンス番号を取得・保持するための処理は実施の形態1のときと同じである。
すなわちまずパケットv120は前述のパケットv10等の場合と同様にして、TCPデータを含むパケットであると判定され(図9のf31)、そのセッションリストがセッション1のセッションリストC4であると特定される(図9のf32〜f33)。その後、シーケンス番号取得部T5はパケットv120が再送TCPパケットか否かを例えば以下のようにして判断する(図9のf34)。
図10においてパケットv120はシーケンス番号=12001、TCPデータ長=1000バイトであるので、TCPシェーパー中継装置409のシーケンス番号取得部T5は図9の処理フローf32において取得したパケットv120のシーケンス番号とTCPデータ長を加算する。すなわち、12001 + 1000 = 13001と加算する。次にTCPシェーパー中継装置409のシーケンス番号取得部T5は、このシーケンス番号とTCPデータ長とを加算した値13001と、セッション情報保持手段T7のセッションリストC4の状態z12におけるS4に格納された、この時点で最も登録された時刻が新しいACK番号の値17001とを比較する。シーケンス番号とTCPデータ長とを加算した値13001のほうが小さいので、シーケンス番号取得部T5はパケットv120が再送TCPパケットであると判断し、再送パケット用の処理を行う(図9のf36〜f37)。この場合シーケンス番号取得部T5は、セッション情報保持手段T7におけるセッション1のモード情報C3を、輻輳回避モードであることを示す値0に更新する(図9のf36)。
サーバ407は輻輳状態の間、TCPデータを含むパケットをクライアント408へ再送のみ行い、新たなTCPデータをクライアント408に送信しないため、輻輳状態が長く続くと転送効率が悪くなる。そこでサーバ407を輻輳状態からなるべく早く復帰させるために、TCPシェーパー中継装置409は例えばサーバ407へのACKを生成し、送信する。
すなわちTCPシェーパー中継装置409のシーケンス番号取得部T5は、セッション情報保持手段T7のC2に格納されている送信元IPアドレス(例えば図28の502)・宛先IPアドレス(例えば図28の503)・送信元ポート番号(例えば図19の114)・宛先ポート番号(例えば図19の115)を元に、輻輳状態から復帰させるために上り方向のTCPデータ無しパケットv121を生成し、パケット傍受部T3へ渡す。
その次に、TCPシェーパー中継装置409のACK番号変更部T4は、先ほどシーケンス番号取得部T5において生成されたパケットv121をパケット傍受部T3から入力し、その時点でセッション情報保持手段T7に格納されている最も登録時刻の古いACK番号、すなわちこの場合のセッションリストC4の状態z12においてS0に格納されている値13001を取得し(その結果、セッションリストC4のS0の値13001が削除され、S1に格納された値がS0に移り、S2に格納された値がS1に移り、S3に格納された値がS2に移り、S4に格納された値がS3に移る。)、その値13001をパケットv121のACK番号に書き込む(図9のf37)。ACK番号13001が書き込まれたパケットv121はパケット傍受部T3へと渡され(図9のf38)、そしてパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりサーバ407へと送信される。
その後、TCPシェーパー中継装置409はセッション情報保持手段T7にACK番号を格納せず、パケットv120をパケットe12としてパケット傍受部T3へ渡す(図9のf38)。パケットe12はパケット転送部T2・パケット出力部T9へと順次渡されて、TCPシェーパー中継装置409よりクライアント408へと転送される。このとき、セッションリストC4は状態z12から状態z13へと遷移する。
以上のように本発明によれば、少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたACK番号を有するACKパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のTCPスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
(実施の形態3)
図2は、TCPシェ−パーがアクセスルータの一機能として動作する場合の実施例である。
図2におけるクライアントD1は一般家庭内のパソコン等の情報機器を表す。本発明が適用されるアクセスルータD2はパケット中継装置であり、クライアントD1が送信したパケットを後述する上位の中継装置D6へ中継し、また上位の中継装置D6が送信したパケットをクライアントD1へ中継する。さらにアクセスルータD2はIP電話機能を持ち、音声データを内包するパケット(以下、「音声パケット」と称す)の送受信を行う。アクセスルータD2の物理的な設置場所は一般家庭内である。またアクセスルータD2はクライアントD1に対して、DHCP(Dynamic Host Configuration Protocol)を用いてアドレス割り当てを行う。また、DHCPで割り当てたIPアドレスはアクセスルータD2内で保持されるものとする。そのためアクセスルータD2はクライアントD1が持つIPアドレスを常に把握できる。
クライアントD1とアクセスルータD2は伝送路D9によって接続されている。伝送路D9の伝送許容量は100Mbpsである。
上位の中継装置D6は、アクセスルータD2から送信されたパケットをインターネット網へと中継する。またインターネット網から中継されてきたパケットをアクセスルータD2へと中継する。上位の中継装置D6の物理的な設置場所は、一般家庭にインターネット接続のサービスを行うインターネットサービスプロバイダの内部である。
上位の中継装置D6とアクセスルータD2は伝送路D3によって接続されている。伝送路D3の伝送許容量は1Mbpsである。伝送路D3において、アクセスルータD2から上位の中継装置D6への方向を「上り方向」とし、上位の中継装置D6からアクセスルータD2への方向を「下り方向」とする。
また上位の中継装置D6とインターネット網は伝送路D10によって接続されている。伝送路D10の伝送許容量は1000Mbpsである。
インターネット網にはサーバD7が接続される。クライアントD1とサーバD7は経路D5においてパケットの送受信が可能である。またインターネット網とサーバD7間は十分大きな伝送許容量を持つものとする。具体的には伝送路D10よりも大きな伝送許容量を持つ。
またインターネット網にはIP電話D8が接続される。アクセスルータD2とIP電話D8は経路D4においてパケットの送受信が可能である。またインターネット網とIP電話D8間は十分大きな伝送許容量を持つものとする。
ここでまず本発明をアクセスルータD2に適用しない場合における挙動を説明する。例えばクライアントD1がサーバD7にTCPで接続し、その後サーバD7からクライアントD1へ900kbpsの帯域でデータの送信を行う。次にIP電話D8とアクセスルータD2が互いに200kbpsの帯域で音声パケットの送受信を開始すると、伝送路D3に必要な帯域は200kbps+900kbps=1.1Mbpsになる。しかしながら伝送路D3の下り方向の伝送許容量は1Mbpsであり、これは下り方向のTCPデータと音声パケットの合計必要帯域である1.1Mbpsより小さい。よって伝送路D3の下り方向の伝送容量が足りなくなり、上位の中継装置D6にて音声パケットもしくはTCPパケットを送信できず伝送路D3に送信できなくなり、その結果TCPパケットと音声パケットの一部にパケットロスが発生する。したがってアクセスルータD2のIP電話機能において、音声パケットが内包している音声データを再生できないパケットが存在することになり、音質の低下が発生する。
一方、例えば本発明の実施の形態1もしくは実施の形態2であるTCPシェーパー機能をアクセスルータD2に適用した場合における音質を説明する。この場合、伝送路D3の下り方向はアクセスルータD2のTCPシェーパー機能により帯域制御される。アクセスルータD2にて中継するパケットの上り・下り方向を判別する方法は例えば以下のように行う。すなわち、アクセスルータD2で中継すべきパケットの宛先IPアドレス(例えば図28の503)がクライアントD1のIPアドレスと等しい場合は下り方向と判別し、宛先IPアドレスがクライアントD1のIPアドレスと等しくなければ上り方向と判別する。クライアントD1のIPアドレスは例えばアクセスルータD2内部のDHCP機能によって保持することが可能である。その保持されているIPアドレスを参照することで、パケットの宛先IPアドレスがクライアントD1のIPアドレスと等しいかを判定する。
最初にアクセスルータD2のTCPシェーパー機能を無効にし、アクセスルータD2を経由する通信を開始する。例えばクライアントD1がサーバD7にTCPで接続し、その後サーバD7からクライアントD1へ900kbpsの帯域でデータ送信を行う。その後IP電話D8とアクセスルータD2が音声パケットを送受信開始する前に、いずれかからのIP電話の接続要求をトリガーとして、TCPシェーパー機能を有効にする。するとサーバD7からクライアントD1へ向かうTCPデータの帯域は、アクセスルータD2のTCPシェーパー機能によって低く押さえられる。その結果、例えばサーバD7からクライアントD1へのTCPデータの消費帯域が900kbpsから100kbpsに押さえられたとする。そうすると、IP電話D8とアクセスルータD2が互いに200kbpsの帯域で音声パケットを送受信しても、伝送路D3における下り方向のTCPデータと音声パケットの合計帯域は200kbps+100kbps=300kbpsになり、伝送路D3の下り方向の伝送許容量である1Mbpsはそれより十分に大きいため、伝送路D3の下り方向の伝送容量が足りなくなることはなくなり、上位の中継装置D6でパケットロスは発生しない。また伝送路D3の下り方向において伝送許容量の半分以下しか利用していないため、下り方向の音声パケットのジッタも悪化しない。したがってアクセスルータD2のIP電話機能において音声の低下が発生しない。
以上のように本発明によれば、少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法によれば、元の番号より小さな値へ書き換えられたACK番号を有するACKパケットを受け取ったサーバは、自分がそれより前にクライアントに送ったパケットが全て届いているわけでないと判断し、クライアントへ送ったパケットの全てが届くことを示すACK番号を有するACKパケットをクライアントから受け取るまでクライアントへの新たなパケット送信を行わなくなるので、下り方向のTCPスループットがネットワークの許容範囲を超えず、その結果同時に流した音声通信パケットなどのパケットロスを低減することができる。またウインドウサイズを使わないので、ウインドウサイズを処理しない端末を用いた通信でスループットが下がらない等の問題を解決するという効果が得られる。
なお、本実施の形態3は音声のみのIP電話を用いて説明したが、例えば音声に加え動画情報も同時に送受信するIP−TV電話であっても同様である。
本発明にかかるACK番号書き換え方式は、スループットを抑えることが可能であるため、帯域制御機能が期待される組織間のルータや、家庭用ゲートウェイ等としての利用が可能である。
本発明が適用されたパケット転送を示すシーケンス図 アクセスルータを用いたネットワークシステムの構成図 本発明の実施の形態を持つ中継装置の構成を示す概要ブロック図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置での、セッション情報保持手段の構成図 本発明の実施の形態を持つ中継装置での、パケット数保持手段の構成図 本発明の実施の形態を持つ中継装置における、パケット転送部のフロー図 本発明の実施の形態を持つ中継装置における、パケット傍受部のフロー図 本発明の実施の形態を持つ中継装置における、ACK番号変更部のフロー図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置における、シーケンス番号取得部のフロー図 本発明の実施の形態を持つ中継装置における、輻輳回避モード時の動作を示すシーケンス図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置における、輻輳回避モード時のセッション情報保持手段でのACK番号のリストの遷移図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置における、スロースタートモード時の動作を示すシーケンス図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置における、スロースタートモード時のセッション情報保持手段でのACK番号のリストの遷移図(基本型TCPシェーパー) 本発明の実施の形態を持つ中継装置の構成を示す概要ブロック図(拡張版TCPシェーパー) 本発明の実施の形態を持つ中継装置での、ACK番号データベースの構成図 本発明の実施の形態を持つ中継装置における、ACK番号変更部のフロー図(拡張版TCPシェーパー) 本発明の実施の形態を持つ中継装置における、スロースタートモード時の動作を示すシーケンス図(拡張版TCPシェーパー) 本発明の実施の形態を持つ中継装置における、スロースタートモード時のセッション情報保持手段でのACK番号のリストの遷移図(拡張版TCPシェーパー) TCPヘッダフォーマットを示す構成図 TCPの最も基本的な送信を示すシーケンス図 TCPの最も基本的な送信でのパケットロス発生時の動作を示すシーケンス図 TCPの基本的な送信での、処理能力を超えたデータ送信の動作を示すシーケンス図 ウインドウサイズを考慮したTCPの送信を示すシーケンス図 ウインドウサイズを考慮したTCPの送信における、パケットロス発生時の動作を示すシーケンス図 TCPの送信における、遅延ACKを示すシーケンス図 TCPの送信における、輻輳ウインドウを用いた送信を示すシーケンス図(スロースタートモード) TCPの送信における、輻輳ウインドウを用いた送信を示すシーケンス図(輻輳回避モード) IPヘッダフォーマットを示す構成図
符号の説明
G1 下り方向のパケット
G2 下り方向のパケット
G3 上り方向のパケット
G4 上り方向のパケット
301 LAN側クライアント
302 WAN側サーバ
303 TCPシェーパーを搭載した中継装置
D1 クライアント
D2 アクセスルータ(IP電話機能含)
D3 伝送路
D4 アクセスルータとIP電話間の通信
D5 クライアント・サーバ間の通信
D6 上位の中継装置
D7 サーバ
D8 IP電話
D9 伝送路
D10 伝送路
A1 パケット入力部
A2 パケット転送部
A3 パケット傍受部
A4 ACK番号変更部
A5 シーケンス番号取得部
A6 セッション管理部
A7 セッション情報保持手段
A8 パケット数保持手段
A9 パケット出力部
A11 TCPシェーパーの機能を持つ中継装置
A12 TCPシェーパー本体
B1 パケット転送部からパケット傍受部へのデータの流れ
B2 パケット傍受部からパケット転送部へのデータの流れ
B3 パケット傍受部からACK番号変更部へのデータの流れ
B4 ACK番号変更部からパケット傍受部へのデータの流れ
B5 パケット傍受部からシーケンス番号取得部へのデータの流れ
B6 シーケンス番号取得部からパケット傍受部へのデータの流れ
B7 ACK番号変更部からセッション管理部へのデータの流れ
B8 セッション管理部からACK番号変更部へのデータの流れ
B9 シーケンス番号取得部からセッション管理部へのデータの流れ
B10 セッション管理部からシーケンス番号取得部へのデータの流れ
B11 セッション管理部からセッション情報保持手段へのデータの流れ
B12 セッション情報保持手段からセッション管理部へのデータの流れ
B13 セッション管理部からパケット数保持手段へのデータの流れ
B14 パケット数保持手段からセッション管理部へのデータの流れ
C1 最も新しい時刻に登録されたACK番号
C2 セッション1の送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号が格納されたセッション識別子
C3 セッション1のモード情報
C4 セッション1のセッションリスト
J1 セッション1のパケットカウンター
J2 セッション1のセッション識別子
J3 セッション2のパケットカウンター
J4 セッション2のセッション識別子
J5 セッション3のパケットカウンター
J6 セッション3のセッション識別子
f11 パケット入力部A1から入力されたパケットであるか調べるフロー
f12 TCPパケットか調べるフロー
f14 パケット傍受部A3にパケットデータを渡すフロー
f13 パケット転送部A2で処理を続けるフロー
f21 パケットの送信元IPアドレスと宛先アドレスを取り出すフロー
f22 上り方向のパケットか調べるフロー
f401 TCPデータがあるか調べるフロー
f402 本パケットが属しているセッションの情報を、セッション情報保持手段A7から見つけるフロー
f403 輻輳回避モードが調べるフロー
f404 セッション情報保持手段A7からACK番号を取得するフロー
f405 パケットのACK番号を取得した値に更新するフロー
f406 パケット数保持手段A8からパケットカウンターの値を取り出すフロー
f407 パケットカウンターの値が偶数かどうか調べるフロー
f408 セッション情報保持手段A7からACK番号を取得するフロー
f409 パケットのACK番号を取得した値に更新するフロー
f410 パケットカウンターを1インクリメントして更新するフロー
f411 パケットカウンターを1インクリメントして更新するフロー
f31 TCPデータがあるか調べるフロー
f32 パケットのTCPデータ長とシーケンス番号を取得するフロー
f33 本パケットが属しているセッションの情報を、セッション情報保持手段A7からみつけるフロー
f34 再送TCPパケットか調べるフロー
f35 セッション情報保持手段A7にシーケンス番号+TCPデータ長の値を追加登録するフロー
f36 セッション情報保持手段A7にて、セッションの状態を輻輳回避モードに更新するフロー
f37 セッション情報保持手段A7のリストからACK番号を取り出し、上り方向のACKパケットを生成するフロー
K10 データ全体の11001byte目から12000byte目までを含むパケット
K20 ACK番号10001を含むパケット
K30 データ全体の12001byte目から13000byte目までを含むパケット
K40 データ全体の13001byte目から14000byte目までを含むパケット
K50 ACK番号11001を含むパケット
K60 データ全体の14001byte目から15000byte目までを含むパケット
K70 データ全体の15001byte目から16000byte目までを含むパケット
K80 ACK番号12001を含むパケット
K90 データ全体の12001byte目から13000byte目までを含むパケット
K91 ACK番号13001を含むパケット
L1 パケットK10を受信する前の状態
L2 パケットM1を転送し、パケットM2を受信する前の状態
L3 パケットK20を転送し、パケットK30を受信する前の状態
L4 パケットM3を転送し、パケットK40を受信する前の状態
L5 パケットM4を転送し、パケットM5を受信する前の状態
L6 パケットK50を転送し、パケットK60を受信する前の状態
L7 パケットM6を転送し、パケットK70を受信する前の状態
L8 パケットM7を転送し、パケットM8を受信する前の状態
L9 パケットK80を転送し、パケットK90を受信する前の状態
L10 パケットM9を転送し、パケットK91を送信した後の状態
M1 データ全体の11001byte目から12000byte目までを含むパケット
M2 ACK番号12001を含むパケット
M3 データ全体の12001byte目から13000byte目までを含むパケット
M4 データ全体の13001byte目から14000byte目までを含むパケット
M5 ACK番号14001を含むパケット
M6 データ全体の14001byte目から15000byte目までを含むパケット
M7 データ全体の15001byte目から16000byte目までを含むパケット
M8 ACK番号16001を含むパケット
M9 データ全体の12001byte目から13000byte目までを含むパケット
401 サーバ
402 クライアント
403 TCPシェーパーを搭載した中継装置
404 サーバ
405 クライアント
406 TCPシェーパーを搭載した中継装置
P10 データ全体の11001byte目から12000byte目までを含むパケット
P20 ACK番号10001を含むパケット
P30 データ全体の12001byte目から13000byte目までを含むパケット
P50 データ全体の13001byte目から14000byte目までを含むパケット
P60 ACK番号11001を含むパケット
P70 データ全体の14001byte目から15000byte目までを含むパケット
P80 データ全体の15001byte目から16000byte目までを含むパケット
P100 データ全体の16001byte目から17000byte目までを含むパケット
P110 ACK番号12001を含むパケット
P120 データ全体の12001byte目から13000byte目までを含むパケット
P121 ACK番号13001を含むパケット
R1 データ全体の11001byte目から12000byte目までを含むパケット
R2 ACK番号12001を含むパケット
R3 データ全体の12001byte目から13000byte目までを含むパケット
R4 ACK番号13001を含むパケット
R5 データ全体の13001byte目から14000byte目までを含むパケット
R6 ACK番号14001を含むパケット
R7 データ全体の14001byte目から15000byte目までを含むパケット
R8 データ全体の15001byte目から16000byte目までを含むパケット
R9 ACK番号16001を含むパケット
R10 データ全体の16001byte目から17000byte目までを含むパケット
R11 ACK番号17001を含むパケット
R12 データ全体の12001byte目から13000byte目までを含むパケット
Q1 パケットP10を受信する前の状態
Q2 パケットR1を転送し、パケットR2を受信する前の状態
Q3 パケットP20を転送し、パケットP30を受信する前の状態
Q4 パケットR3を転送し、パケットR4を受信する前の状態
Q5 パケットR4を受信し、パケットP50を受信する前の状態
Q6 パケットR5を転送し、パケットR6を受信する前の状態
Q7 パケットP60を転送し、パケットP70を受信する前の状態
Q8 パケットR7を転送し、パケットP80を受信する前の状態
Q9 パケットR8を転送し、パケットR9を受信する前の状態、
Q10 パケットR9を受信し、パケットP100を受信する前の状態
Q11 パケットR10を転送し、パケットR11を受信する前の状態
Q12 パケットP110を転送し、パケットP120を受信する前の状態
Q13 パケットR12を転送し、パケットP121を送信した後の状態
T1 パケット入力部
T2 パケット転送部
T3 パケット傍受部
T4 ACK番号変更部
T5 シーケンス番号取得部
T6 セッション管理部
T7 セッション情報保持手段
T8 ACK番号データベース
T9 パケット出力部
T11 TCPシェーパーの機能を持つ中継装置
T12 TCPシェーパー本体
U1 パケット転送部からパケット傍受部へのデータの流れ
U2 パケット傍受部からパケット転送部へのデータの流れ
U3 パケット傍受部からACK番号変更部へのデータの流れ
U4 ACK番号変更部からパケット傍受部へのデータの流れ
U5 パケット傍受部からシーケンス番号取得部へのデータの流れ
U6 シーケンス番号取得部からパケット傍受部へのデータの流れ
U7 ACK番号変更部からセッション管理部へのデータの流れ
U8 セッション管理部からACK番号変更部へのデータの流れ
U9 シーケンス番号取得部からセッション管理部へのデータの流れ
U10 セッション管理部からシーケンス番号取得部へのデータの流れ
U11 セッション管理部からセッション情報保持手段へのデータの流れ
U12 セッション情報保持手段からセッション管理部へのデータの流れ
U13 セッション管理部からACK番号データベースへのデータの流れ
U14 ACK番号データベースからセッション管理部へのデータの流れ
Y1 セッション1のACK番号キャッシュ
Y2 セッション1のセッション識別子
Y3 セッション2のACK番号キャッシュ
Y4 セッション2のセッション識別子
Y5 セッション3のACK番号キャッシュ
Y6 セッション3のセッション識別子
f1001 本パケットが属しているセッションの情報を、セッション情報保持手段T7から見つけるフロー
f1002 輻輳回避モードか調べるフロー
f1003 セッション情報保持手段T7からACK番号を取得するフロー
f1004 パケットのACK番号を取得した値に更新するフロー
f1005 ACK番号データベースT8内のACk番号キャッシュが空か調べるフロー
f1006 セッション情報保持手段T7からACK番号を取得するフロー
f1007 パケットのACK番号を取得した値に更新するフロー
f1008 取得したACK番号をACK番号データベースT8のACK番号キャッシュに書き込むフロー
f1009 ACK番号データベースT8のACK番号キャッシュからACK番号を取得するフロー
f1010 パケットのACK番号を取得した値に更新するフロー
f1011 ACK番号データベースT8内のACK番号キャッシュを削除し、空にするフロー
v10 データ全体の11001byte目から12000byte目までを含むパケット
v20 ACK番号10001を含むパケット
v30 データ全体の12001byte目から13000byte目までを含むパケット
v40 ACK番号10001を含むパケット
v50 データ全体の13001byte目から14000byte目までを含むパケット
v60 ACK番号11001を含むパケット
v70 データ全体の14001byte目から15000byte目までを含むパケット
v80 データ全体の15001byte目から16000byte目までを含むパケット
v90 ACK番号11001を含むパケット
v100 データ全体の16001byte目から17000byte目までを含むパケット
v110 ACK番号12001を含むパケット
v120 データ全体の17001byte目から18000byte目までを含むパケット
v121 ACK番号13001を含むパケット
e1 データ全体の11001byte目から12000byte目までを含むパケット
e2 ACK番号12001を含むパケット
e3 データ全体の12001byte目から13000byte目までを含むパケット
e4 ACK番号13001を含むパケット
e5 データ全体の13001byte目から14000byte目までを含むパケット
e6 ACK番号14001を含むパケット
e7 データ全体の14001byte目から15000byte目までを含むパケット
e8 データ全体の15001byte目から16000byte目までを含むパケット
e9 ACK番号16001を含むパケット
e10 データ全体の16001byte目から17000byte目までを含むパケット
e11 ACK番号17001を含むパケット
e12 データ全体の17001byte目から18000byte目までを含むパケット
z1 パケットv10を受信する前の状態
z2 パケットe1を転送し、パケットe2を受信する前の状態
z3 パケットv20を転送し、パケットv30を受信する前の状態
z4 パケットe3を転送し、パケットe4を受信する前の状態
z5 パケットv40を転送し、パケットv50を受信する前の状態
z6 パケットe5を転送し、パケットe6を受信する前の状態
z7 パケットv60を転送し、パケットv70を受信する前の状態
z8 パケットe7を転送し、パケットv80を受信する前の状態
z9 パケットe8を転送し、パケットe9を受信する前の状態
z10 パケットv90を転送し、パケットv100を受信する前の状態
z11 パケットe10を転送し、パケットe11を受信する前の状態
z12 パケットv110を転送し、パケットv120を受信する前の状態
z13 パケットe12を転送し、パケットv121を送信した後の状態
407 サーバ
408 クライアント
409 TCPシェーパーを搭載した中継装置
101 パケット全体
102 パケットデータ
103 TCPヘッダ
104 TCPデータ
110 シーケンス番号
111 ACK番号
112 ウインドウサイズ
114 発信元ポート番号
115 宛先ポート番号
201 サーバ
202 クライアント
X1 データ全体の1byte目から1000byte目までを含むパケット
X2 ACK番号1001を含むパケット
X3 データ全体の1001byte目から2000byte目までを含むパケット
X4 ACK番号2001を含むパケット
X5 データ全体の2001byte目から3000byte目までを含むパケット
X6 ACK番号3001を含むパケット
201 サーバ
202 クライアント
X16 RTT(ROUND TRIP TIME)
X17 RTO(ROUND TRIP TIMEOUT)
X11 データ全体の1byte目から1000byte目までを含むパケット
X12 ACK番号1001を含むパケット
X13 データ全体の1001byte目から2000byte目までを含むパケット
X14 データ全体の1001byte目から2000byte目までを含むパケット
X15 ACK番号2001を含むパケット
203 サーバ
204 クライアント
X21 データ全体の1001byte目から2000byte目までを含むパケット
X22 データ全体の2001byte目から3000byte目までを含むパケット
X23 データ全体の3001byte目から4000byte目までを含むパケット
X24 データ全体の4001byte目から5000byte目までを含むパケット
X25 データ全体の5001byte目から6000byte目までを含むパケット
X26 ACK番号5001を含むパケット
205 サーバ
206 クライアント
X31 ACK番号1001を含み、ウインドウサイズ4000byteを広告するパケット
X32 データ全体の1001byte目から2000byte目までを含むパケット
X33 データ全体の2001byte目から3000byte目までを含むパケット
X34 データ全体の3001byte目から4000byte目までを含むパケット
X35 データ全体の4001byte目から5000byte目までを含むパケット
X36 ACK番号5001を含み、ウインドウサイズ4000byteを広告するパケット
X37 データ全体の5001byte目から6000byte目までを含むパケット
X38 データ全体の6001byte目から7000byte目までを含むパケット
X39 データ全体の7001byte目から8000byte目までを含むパケット
X40 データ全体の8001byte目から9000byte目までを含むパケット
X41 ACK番号9001を含み、ウインドウサイズ4000byteを広告するパケット
207 サーバ
208 クライアント
X51 データ全体の1byte目から1000byte目までを含むパケット
X52 ACK番号1001を含むパケット
X53 データ全体の1001byte目から2000byte目までを含むパケット
X54 ACK番号2001を含むパケット
X55 データ全体の2001byte目から3000byte目までを含むパケット
X56 データ全体の3001byte目から4000byte目までを含むパケット
X57 ACK番号2001を含むパケット
X58 データ全体の4001byte目から5000byte目までを含むパケット
X59 ACK番号2001を含むパケット
X60 データ全体の2001byte目から3000byte目までを含むパケット
X61 ACK番号3001を含むパケット
209 サーバ
210 クライアント
X71 データ全体の1byte目から1000byte目までを含むパケット
X72 データ全体の1001byte目から2000byte目までを含むパケット
X73 データ全体の2001byte目から3000byte目までを含むパケット
X74 ACK番号3001を含むパケット
X75 データ全体の3001byte目から4000byte目までを含むパケット
X76 データ全体の4001byte目から5000byte目までを含むパケット
X77 データ全体の5001byte目から6000byte目までを含むパケット
X78 ACK番号6001を含むパケット
211 サーバ
212 クライアント
X81 データ全体の1byte目から1000byte目までを含むパケット
X82 ACK番号1001を含むパケット
X83 データ全体の1001byte目から2000byte目までを含むパケット
X84 データ全体の2001byte目から3000byte目までを含むパケット
X85 ACK番号3001を含むパケット
X86 データ全体の3001byte目から4000byte目までを含むパケット
X87 データ全体の4001byte目から5000byte目までを含むパケット
X88 データ全体の5001byte目から6000byte目までを含むパケット
X89 データ全体の6001byte目から7000byte目までを含むパケット
X90 ACK番号7001を含むパケット
X91 データ全体の7001byte目以降を含むパケット
213 サーバ
214 クライアント
X101 データ全体の1byte目から1000byte目までを含むパケット
X102 ACK番号1001を含むパケット
X103 データ全体の1001byte目から2000byte目までを含むパケット
X104 データ全体の2001byte目から3000byte目までを含むパケット
X105 ACK番号3001を含むパケット
X106 データ全体の3001byte目から4000byte目までを含むパケット
X107 データ全体の4001byte目から5000byte目までを含むパケット
X108 データ全体の5001byte目から6000byte目までを含むパケット
X109 ACK番号6001を含むパケット
X111 データ全体の6001byte目以降を含むパケット
215 サーバ
216 クライアント
500 IPヘッダ
501 プロトコル番号
502 送信元IPアドレス
503 宛先IPアドレス

Claims (9)

  1. 少なくとも1つ以上のサーバと1つ以上のクライアントの間の通信をネットワーク上で中継するネットワーク中継装置であって、接続されたネットワーク上より受信したパケットが上り方向の場合、前記パケットのACK番号を元の番号より小さい値へ書き換えた後前記ネットワーク上へ送信するネットワーク中継装置およびネットワーク中継制御方法。
  2. 内部に保持しかつ前記パケットに関連する最も小さいシーケンス番号を前記パケットのACK番号として元のACK番号を置き換えた後前記ネットワーク上へ送信する請求項1に記載のネットワーク中継装置。
  3. 前記ネットワーク上より受信したパケットが上り方向のデータ無しのACKの場合は内部に保持された前記パケットに関連する最も小さいシーケンス番号を前記パケットの新しいACK番号として元のACK番号を書き換えたパケットの前記ネットワーク上への送信および非送信を交互に実行する請求項1に記載のネットワーク中継装置。
  4. 前記ネットワーク上より受信したパケットが上り方向のACKであって、かつその直前に送信された上り方向のACKが2度続けて同じACK番号の場合は、内部に保持された前記パケットに関連する最も小さいシーケンス番号を、前記パケットの新しいACK番号として書き換えた後前記ネットワーク上へ送信し、前記ネットワーク上より受信したパケットが上り方向のACKであってかつその直前に送信された2つの上り方向のACKが同じACK番号でない場合は、その直前に前記ネットワーク上へ送信した上り方向のパケットと同じACK番号を前記パケットの新しいACK番号として元のACK番号を書き換えた後前記ネットワーク上へ送信する請求項1に記載のネットワーク中継装置。
  5. 前記上り方向パケットのACK番号を書き換えるためのACK番号変更部を有する請求項1に記載のネットワーク中継装置。
  6. 前記シーケンス番号を前記パケットより取得するためのシーケンス番号取得部と、取得したシーケンス番号を保持するためのセッション情報保持手段と、上り方向へ転送したパケット数を保持するパケット数保持手段と、前記シーケンス番号取得部と前記セッション情報保持手段と前記ACK番号変更部間におけるシーケンス番号の受渡しを制御する前記セッション管理部を有する請求項2または請求項3に記載のネットワーク中継装置。
  7. 前記シーケンス番号を前記パケットより取得するためのシーケンス番号取得部と、取得したシーケンス番号を保持するためのセッション情報保持手段とACK番号データベースを有し、前記シーケンス番号取得部と前記セッション情報保持手段と前記ACK番号変更部と前記ACK番号データベースとの間におけるシーケンス番号の受渡しを制御するセッション管理部を有する請求項2または請求項4に記載のネットワーク中継装置。
  8. 請求項1に記載のネットワーク中継装置が接続され、かつ少なくとも2組以上のサーバとクライアントとが前記ネットワーク中継装置を解して接続され通信可能な状態にあるネットワーク通信システム。
  9. 前記サーバおよびクライアントのうち、少なくとも1組のサーバとクライアントは音声または動画情報を含むパケットを送受信できる請求項1に記載のネットワーク通信システム。
JP2006107369A 2006-04-10 2006-04-10 ネットワーク中継装置およびネットワーク通信システム Expired - Fee Related JP4702151B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006107369A JP4702151B2 (ja) 2006-04-10 2006-04-10 ネットワーク中継装置およびネットワーク通信システム
US11/692,281 US7676593B2 (en) 2006-04-10 2007-03-28 Method of bandwidth control by rewriting ACK number

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006107369A JP4702151B2 (ja) 2006-04-10 2006-04-10 ネットワーク中継装置およびネットワーク通信システム

Publications (3)

Publication Number Publication Date
JP2007282009A true JP2007282009A (ja) 2007-10-25
JP2007282009A5 JP2007282009A5 (ja) 2009-05-21
JP4702151B2 JP4702151B2 (ja) 2011-06-15

Family

ID=38576880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006107369A Expired - Fee Related JP4702151B2 (ja) 2006-04-10 2006-04-10 ネットワーク中継装置およびネットワーク通信システム

Country Status (2)

Country Link
US (1) US7676593B2 (ja)
JP (1) JP4702151B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009206734A (ja) * 2008-02-27 2009-09-10 Nippon Telegr & Teleph Corp <Ntt> Tcpフローレート制御エッジノードにおけるフローレート制御方法及びエッジノード

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008306551A (ja) * 2007-06-08 2008-12-18 Sanden Corp 通信機器用の接続装置
JP5348138B2 (ja) * 2008-10-24 2013-11-20 日本電気株式会社 パケットロス頻度計測システム、パケットロス頻度計測方法およびプログラム
CA2749826A1 (en) * 2009-01-16 2010-07-22 Mainline Net Holdings Limited Maximizing bandwidth utilization in networks with high latencies and packet drops using transmission control protocol
EP2354941B1 (en) * 2010-01-13 2020-06-10 Software AG Mainframe injection component and method for manipulating data packets communicated between emulators and mainframes
JP5445271B2 (ja) * 2010-03-30 2014-03-19 富士通株式会社 帯域制御装置,帯域制御方法,及びプログラム
US8576711B1 (en) 2010-09-28 2013-11-05 Google Inc. System and method for reducing latency via client side dynamic acknowledgements
WO2012095169A1 (en) * 2011-01-12 2012-07-19 Telefonaktiebolaget L M Ericsson (Publ) Adaptive relative bitrate manager for tcp depending flow control
JP5258938B2 (ja) * 2011-07-26 2013-08-07 株式会社日立製作所 通信装置
US20130155938A1 (en) * 2011-12-16 2013-06-20 Belair Networks Tcp-relay for wireless applications
US9461905B2 (en) * 2013-05-02 2016-10-04 Raytheon Company Method for indirect link characterization and quality measurement of a digital network
US10630749B2 (en) 2015-08-14 2020-04-21 Cisco Technology, Inc. Timely delivery of real-time media problem when TCP must be used

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH021665A (ja) * 1988-02-19 1990-01-05 Nec Corp 輻輳制御装置
JP2002261792A (ja) * 2000-12-28 2002-09-13 Nec Corp 通信システムとそのパケット交換方法、及び交換プログラムを記録した記録媒体
JP2003078550A (ja) * 2001-08-31 2003-03-14 Hitachi Ltd Tcp/ip通信中継装置およびtcp/ip通信の中継方法
JP2005102340A (ja) * 2004-12-27 2005-04-14 Oki Electric Ind Co Ltd ゲートウェイ装置
JP2006339726A (ja) * 2005-05-31 2006-12-14 Nippon Telegr & Teleph Corp <Ntt> 中継装置およびデータ中継方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182139B1 (en) * 1996-08-05 2001-01-30 Resonate Inc. Client-side resource-based load-balancing with delayed-resource-binding using TCP state migration to WWW server farm
US6038216A (en) 1996-11-01 2000-03-14 Packeteer, Inc. Method for explicit data rate control in a packet communication environment without data rate supervision
US6389462B1 (en) * 1998-12-16 2002-05-14 Lucent Technologies Inc. Method and apparatus for transparently directing requests for web objects to proxy caches
US7139268B1 (en) * 1999-01-29 2006-11-21 Pravin Bhagwat Performance of intermediate nodes with flow splicing
US6976085B1 (en) * 2001-11-20 2005-12-13 Cisco Technology, Inc. Methods and apparatus for inserting data into a communications session
US7277963B2 (en) * 2002-06-26 2007-10-02 Sandvine Incorporated TCP proxy providing application layer modifications
US8230106B2 (en) * 2003-03-31 2012-07-24 Alcatel Lucent Methods and apparatus for improved transmission control protocol transmission over a wireless channel exhibiting rate and delay variations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH021665A (ja) * 1988-02-19 1990-01-05 Nec Corp 輻輳制御装置
JP2002261792A (ja) * 2000-12-28 2002-09-13 Nec Corp 通信システムとそのパケット交換方法、及び交換プログラムを記録した記録媒体
JP2003078550A (ja) * 2001-08-31 2003-03-14 Hitachi Ltd Tcp/ip通信中継装置およびtcp/ip通信の中継方法
JP2005102340A (ja) * 2004-12-27 2005-04-14 Oki Electric Ind Co Ltd ゲートウェイ装置
JP2006339726A (ja) * 2005-05-31 2006-12-14 Nippon Telegr & Teleph Corp <Ntt> 中継装置およびデータ中継方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009206734A (ja) * 2008-02-27 2009-09-10 Nippon Telegr & Teleph Corp <Ntt> Tcpフローレート制御エッジノードにおけるフローレート制御方法及びエッジノード

Also Published As

Publication number Publication date
US7676593B2 (en) 2010-03-09
US20070239889A1 (en) 2007-10-11
JP4702151B2 (ja) 2011-06-15

Similar Documents

Publication Publication Date Title
JP4702151B2 (ja) ネットワーク中継装置およびネットワーク通信システム
US20230283662A1 (en) Optimizing Data Transmission between a First Endpoint and a Second Endpoint in a Computer Network
US8379515B1 (en) TCP throughput control by imposing temporal delay
JP5651805B2 (ja) 通信装置
KR100785293B1 (ko) 다중 tcp확인응답을 이용한 tcp 혼잡 제어 시스템및 그 방법
TWI530123B (zh) Communication devices and communication methods
EP3780542B1 (en) Data transmission method and device
JP5258938B2 (ja) 通信装置
US20060002301A1 (en) Transferring transmission control protocol packets
JP2004297742A (ja) 通信装置、通信制御方法及びプログラム
JP2010504672A (ja) パケット遠隔通信ネットワークにおけるトラフィックの制御の最適化プロセス
Yilmaz et al. Throughput analysis of non-renegable selective acknowledgments (NR-SACKs) for SCTP
US20090316719A1 (en) Method for managing mechanisms to enhance transmission of data streams in a tunnel, corresponding computer program product, storage medium and tunnel end-point
Scharf et al. MCTCP: A multipath transport shim layer
JP2005520374A (ja) Tcp/ipに対する変更
JP4506430B2 (ja) アプリケーションモニタ装置
Altahir et al. Performance evaluation of TCP congestion control mechanisms using NS-2
Bisio et al. Performance enhanced proxy solutions for satellite networks: state of the art, protocol stack and possible interfaces
JP5992348B2 (ja) 負荷分散システム、負荷分散方法
Natarajan Leveraging Innovative Transport Layer Services for Improved Application Performance
KADHUM et al. A new congestion management mechanism for next generation routers
Liu et al. Mpmtp-ar: Multipath message transport protocol based on application-level relay
Hong et al. A performance improvement scheme of stream control transmission protocol over wireless networks
Van Beijnum One-ended multipath TCP
Sullivan et al. A protocol for simultaneous real time playback and full quality storage of streaming media

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090407

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090407

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20090513

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101130

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110113

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110221

LAPS Cancellation because of no payment of annual fees