JP2004274237A - 情報処理装置および方法、記録媒体、並びにプログラム - Google Patents
情報処理装置および方法、記録媒体、並びにプログラム Download PDFInfo
- Publication number
- JP2004274237A JP2004274237A JP2003060043A JP2003060043A JP2004274237A JP 2004274237 A JP2004274237 A JP 2004274237A JP 2003060043 A JP2003060043 A JP 2003060043A JP 2003060043 A JP2003060043 A JP 2003060043A JP 2004274237 A JP2004274237 A JP 2004274237A
- Authority
- JP
- Japan
- Prior art keywords
- data
- segment
- received
- transmitted
- information processing
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title description 58
- 230000010365 information processing Effects 0.000 claims abstract description 44
- 230000005540 biological transmission Effects 0.000 claims description 104
- 238000003672 processing method Methods 0.000 claims 1
- 239000000872 buffer Substances 0.000 description 28
- 238000010586 diagram Methods 0.000 description 11
- 238000004088 simulation Methods 0.000 description 10
- 230000007423 decrease Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 102100036409 Activated CDC42 kinase 1 Human genes 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 101000741965 Homo sapiens Inactive tyrosine-protein kinase PRAG1 Proteins 0.000 description 1
- 102100038659 Inactive tyrosine-protein kinase PRAG1 Human genes 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Landscapes
- Detection And Prevention Of Errors In Transmission (AREA)
- Communication Control (AREA)
Abstract
【課題】重度の輻輳時に、効率的にデータを送信することができるようにする。
【解決手段】送信側のPC1−1は、TCPウインドウ内のデータセグメントD1乃至D4を送信してから所定の時間が経過してもACKセグメントが受信されない場合、前回送信したデータセグメントD1乃至D4の次のデータセグメントD5を受信側のPC1−2に送信する。ネットワーク3を介して、受信側のPC1−2に送信する。なお、このとき、送信側のPC1−1は、TCB記憶部のLeap_seqno変数に、飛躍セグメントのシーケンス番号を格納し、飛躍セグメントを送信中であるということを示すために、TCB記憶部のLeap_flg変数をオン状態に設定する。本発明は、TCPプロトコルを用いて、ネットワークを介して、データ送受信を行う情報処理システムに適用することができる。
【選択図】 図8
【解決手段】送信側のPC1−1は、TCPウインドウ内のデータセグメントD1乃至D4を送信してから所定の時間が経過してもACKセグメントが受信されない場合、前回送信したデータセグメントD1乃至D4の次のデータセグメントD5を受信側のPC1−2に送信する。ネットワーク3を介して、受信側のPC1−2に送信する。なお、このとき、送信側のPC1−1は、TCB記憶部のLeap_seqno変数に、飛躍セグメントのシーケンス番号を格納し、飛躍セグメントを送信中であるということを示すために、TCB記憶部のLeap_flg変数をオン状態に設定する。本発明は、TCPプロトコルを用いて、ネットワークを介して、データ送受信を行う情報処理システムに適用することができる。
【選択図】 図8
Description
【0001】
【発明の属する技術分野】
本発明は、情報処理装置および方法、記録媒体、並びにプログラムに関し、特に、重度の輻輳時に、効率的にデータを送信することができるようにした情報処理装置および方法、記録媒体、並びにプログラムに関する。
【0002】
【従来の技術】
インターネットに用いられるトランスポート層のプロトコルとしては、例えば、コネクションレスのUDP(User Datagram Protocol)と、コネクションを行うことにより信頼性を確保するTCP(Transmission Control Protocol)が存在する。
【0003】
インターネットを利用するユーザの多くは、各自のネットワークインフラ(Infrastructure)を最大限に利用したいと考えている。そこで、UDPにおいては、特許文献1に示されるように、NACK(Negative acknowledgement)を用いて、欠損要求があったデータのみを送ることにより、多数のユーザに対して、データを効率的、かつ高い信頼性で配信することができるようにした送受信装置が提案されている。
【0004】
一方、TCPは、上位アプリケーションから受け取ったデータを、100%確実に送信することを保証するプロトコルである。TCPで送受信される情報は、セグメントと呼ばれる単位で送受信される。セグメントには、データセグメントとACK(acknowledgement:確認応答)セグメントの2種類が存在する。TCPは、この2種類のセグメントを利用して、次のような輻輳制御により通信の信頼性を確保する。
【0005】
まず、送信側のTCPは、データセグメントを受信側に送信する。このデータセグメントを受信すると、受信側のTCPは、受信したデータセグメントに対応するACKセグメントを送信側に送信する。送信側のTCPは、ACKセグメントを受信することで、データセグメントの送信が成功したことを確認する。したがって、ACKセグメントが受信されなかったデータセグメントは、送信側のTCPにより再度送信されることになる。しかしながら、この場合、送信側のTCPでは、図1に示されるように、送信側のTCPからのデータセグメントが欠損したのか、あるいは、図2に示されるように、受信側のTCPからのACKセグメントが欠損したのかの判断が行われていない。したがって、送信側のTCPは、データセグメント、ACKセグメントのどちらが欠損してもデータセグメントの再送処理を実行する。
【0006】
図1および図2は、送信側のTCPによるデータセグメントの再送処理の例を示している。送信側と受信側は、図示せぬネットワークを介してセグメントを通信する。図1の例においては、送信側のTCPから送信されたデータセグメントD1は、受信側に到着する前のネットワーク上で欠損する。したがって、受信側のTCPからデータセグメントD1に対応するACKセグメントは送信されず、送信側のTCPはACKセグメントを受信することができない。送信側のTCPは、データセグメントD1を送信してから、再送タイマを起動し、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過したか否かを判断し、所定の時間が経過してもACKセグメントA1が受信されない場合、データセグメントD1を再送セグメントとして受信側に送信する。これにより、受信側のTCPは、データセグメントD1を受信することができる。
【0007】
一方、図2の例においては、送信側のTCPから送信されたデータセグメントD2は、受信側に無事到着する。受信側のTCPは、受信したデータセグメントD2に対応するACKセグメントA2を送信側に送信する。しかしながら、ACKセグメントA2は、送信側に到着する前のネットワーク上において欠損し、送信側のTCPは、それを受信することができない。受信側のTCPは、データセグメントD2を送信してから、再送タイマを起動させ、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過したか否かを判断し、所定の時間が経過してもACKセグメントA2が受信されない場合、データセグメントD2を再送セグメントとして受信側に送信する。しかしながら、受信側では、前回の送信により、すでにデータセグメントD2が受信されている。したがって、受信側のTCPは、データセグメントD2を重複して受信することになる。
【0008】
以上のように、ACKセグメントの欠損によるデータセグメントの再送は、受信側に到着しているデータセグメントを再度送信することになるため、無駄な処理になってしまう。
【0009】
なお、TCPの確認応答の方法においては、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかをACKセグメントが通知する累積確認応答が行われる。したがって、ACKセグメントが欠損したとしても、それ以降に連続して受信側から送信されるACKセグメントが送信側に到達する。受信側においては、それらのACKセグメントにより、どのデータセグメントが届いているかの状況が把握できるので、欠損したACKセグメントかあっても再送処理に関して影響を与えない。
【0010】
しかしながら、これは、データセグメントが円滑に送信され、TCPの送信ウインドウが拡張しているような場合、すなわち、受信側で送信されるACKセグメントの数が十分多く存在するような場合に限られる。例えば、頻繁な輻輳制御により、TCPの送信ウインドウが収縮している場合、受信側のTCPで送信されるACKセグメントの数も少なくなる。このような場合に、ACKセグメントが欠損した場合、それ以降に連続して受信側から送信されるACKセグメントが少ないため、送信側に到達するACKセグメントはさらに少ない。したがって、TCPの送信ウインドウが収縮している場合において、ACKセグメントの欠損により、データセグメントの再送が実行され、その結果、データセグメントが重複してしまう確率は、TCPの送信ウインドウが拡張しているような場合の確率よりも高くなる。
【0011】
次に、図3および図4のグラフを参照して、3台のノードが1台のノードを経由して接続しているネットワーク環境において実行されたデータ転送のシミュレーション結果を説明する。このシミュレーションは、3台のノードが1台のノードを経由して接続しているネットワーク環境において、100個のデータを送出するFTP(File Transfer Protocol)のコネクション(データ転送)を指数分布の間隔に従ってランダムに発生させ、1秒間に発生するコネクションの数の平均値を、0.25コネクション刻みで、1コネクションから3.5コネクションまで変更させて、3000秒間実行されたものである。なお、このシミュレーションにおいては、現在のTCPの事実上の標準とされているReno方式、TCPウインドウ(TCPにおいて用いられるバッファ量)内で複数のデータセグメントの欠損が起こった場合のReno方式のFast Recoveryを改良したNewReno方式、および、ACKパケットにセグメントの欠損情報を格納することを可能としたSack方式の3種類のTCPの方式が用いられている。
【0012】
図3は、シミュミレーション時間内に終了したコネクション(データ転送)の数を示すグラフである。図3の例においては、横軸は、1秒間に発生するコネクションの数の平均値(すなわち、トラフィック負荷度)を示しており、トラフィックの負荷は、右に行くに従って高くなる。縦軸は、Reno方式、NewReno方式、およびSack方式を用いてデータ転送が終了したコネクション数(終了コネクション数)を示しており、終了コネクション数は、上に行くに従って多くなる。
【0013】
図3のグラフの横軸に注目すると、TCPのどの方式においても、終了コネクション数は、図中矢印に示される2.5コネクション数/秒まで直線的に増加しているが、2.75コネクション数/秒を過ぎたころから明らかに減少していることがわかる。これにより、このネットワークの許容量は、1秒間に2.5コネクション乃至2.75コネクションを転送するあたりのトラフィック負荷度であり、この許容量を越えると、セグメント(データセグメントおよびACKセグメント)の欠損によりTCPの輻輳制御(再送処理)が行われていることが予測される。
【0014】
図4は、1コネクションにおける平均送受信パケット数を示すグラフである。図4の例においては、横軸は、1秒間に発生するコネクションの数の平均値(トラフィック負荷度)を示しており、トラフィックの負荷度は、右に行くに従って高くなる。縦軸は、Reno方式、NewReno方式、およびSack方式を用いた場合の送信パケット数(s)と受信パケット数(r)を示しており、送受信パケット数は、上に行くに従って多くなる。
【0015】
図4のグラフにおいて、送信パケット数(矢印P1)と受信パケット数(矢印P2)の差は、ネットワーク内で実際に欠損したパケット数(矢印P3)である。ここで注意すべき点は、FTPのコネクション(データ転送)は、100個のパケットを送受信するように設定されているにもかかわらず、ネットワークのトラフィックの負荷が高くなるにつれて、矢印P2に示されるように受信パケット数も増加していることである。これは、すなわち、受信側に重複したパケットが到着していることを示している。
【0016】
なお、Reno方式、NewReno方式、およびSack方式において性能差がほとんど見られなかったのは、NewReno方式、およびSack方式は、TCPウインドウ内での複数のデータセグメントの欠損に対して有効であるが、いまの場合のように、トラフィックの負荷が高いときは、TCPウインドウの大きさが小さく収縮されているため、有効になる機会が少なかったといえる。
【0017】
【特許文献1】
特開平11−17737号公報
【0018】
【発明が解決しようとする課題】
以上のように、ネットワーク上において、トラフィックの負荷が高くなると、ACKセグメントの欠損が多くなり、結果的に、受信側に重複したデータセグメントが無駄に受信されてしまう課題があった。これにより、再送されるデータセグメントが増加してしまい、ますますトラフィックの負荷がかかってしまう課題があった。
【0019】
本発明はこのような状況に鑑みてなされたものであり、重度の輻輳時に、効率的にデータを送信することができるようにするものである。
【0020】
【課題を解決するための手段】
本発明の情報処理装置は、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信手段と、送信手段によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACK(acknowledgement)を受信したか否かを判断する受信判断手段とを備え、受信判断手段により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信手段は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0021】
所定のプロトコルは、TCP(Transmission Control Protocol)であるようにすることができる。
【0022】
受信判断手段によりデータに対応するACKが受信されていないと判断された場合に、送信手段により送信された次のデータのシーケンス番号を記憶する記憶手段と、受信判断手段によりデータに対応するACKが受信されていないと判断され、送信手段により次のデータが送信された場合に、そのことを示すフラグを保持する保持手段とをさらに備えるようにすることができる。
【0023】
保持手段によりフラグが保持されているか否かを判断するフラグ判断手段をさらに備え、受信判断手段によりデータに対応するACKが受信されていないと判断され、かつ、フラグ判断手段によりフラグが保持されていると判断された場合、送信手段は、受信判断手段によりACKが受信されていないと判断されたデータを再度送信するようにすることができる。
【0024】
受信判断手段によりデータに対応するACKが受信されたと判断され、かつ、フラグ判断手段によりフラグが保持されていると判断された場合、保持手段は、フラグの保持を解除するようにすることができる。
【0025】
受信判断手段によりデータに対応するACKが受信されたと判断された場合、次に送信する送信データのシーケンス番号が、記憶手段に記憶されているシーケンス番号と同じであるか否かを判断するデータ判断手段をさらに備え、データ判断手段により送信データのシーケンス番号が、記憶手段に記憶されているシーケンス番号と同じであると判断された場合、送信手段は、送信データの送信をスキップし、送信データの次のデータを送信するようにすることができる。
【0026】
本発明の情報処理装置は、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0027】
本発明の記録媒体のプログラムは、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0028】
本発明のプログラムは、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0029】
本発明においては、ネットワークを介して、所定のプロトコルでデータが他の情報処理装置に送信され、データが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かが判断される。そして、他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、前回送信されたデータに続く次のデータが送信される。
【0030】
ネットワークとは、少なくとも2つの装置が接続され、ある装置から、他の装置に対して、情報の伝達をできるようにした仕組みをいう。ネットワークを介して通信する装置は、独立した装置どうしであってもよいし、1つの装置を構成している内部ブロックどうしであってもよい。
【0031】
【発明の実施の形態】
以下、図を参照して本発明の実施の形態について説明する。
【0032】
図5は、本発明を適用した情報処理システムの構成例を表している。LAN(Local Area Network)などで構成されるネットワーク3には、パーソナルコンピュータ(以下、PCと称する)1−1乃至1−3が、ルータ2を介して接続される。なお、ネットワーク3は、LANにより構成されるようにしたが、インターネットなどで構成されるようにしてもよく、接続される装置の台数も限定されない。
【0033】
各PC1−1乃至1−3とルータ2間の帯域幅は、500kbpsで、遅延は50msに設定される。また、また、各PC1−1乃至1−3のキューは、100パケット分でドロップテイル方式を用いて、FIFO(First In First Out)によりパケットを扱う。
【0034】
PC1−1乃至1−3は、TCP(Transmission Control Protocol)プロトコルのLEAP方式(図8を参照して後述する)を用いて、ルータ2を介してお互いにデータ送受信(コネクション)を実行する。
【0035】
図6は、PC1−1乃至1−3(個々に区別する必要がない場合、単にPC1と称する)の構成を表している。図6において、CPU(Central Processing Unit)11は、ROM(Read Only Memory)12に記憶されているプログラム、または記憶部18からRAM(Random Access Memory)13にロードされたプログラムに従って各種の処理を実行する。RAM13にはまた、CPU11が各種の処理を実行する上において必要なデータなども適宜記憶される。
【0036】
CPU11、ROM12およびRAM13は、バス14を介して相互に接続されている。このバス14にはまた、入出力インタフェース15も接続されている。
【0037】
入出力インタフェース15には、キーボード、マウスなどよりなる入力部16、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部17、ハードディスクなどより構成される記憶部18、モデム、ターミナルアダプタなどより構成される通信部19が接続されている。通信部19は、ネットワーク3を介しての通信処理を行う。
【0038】
入出力インタフェース15にはまた、必要に応じてドライブ20が接続され、磁気ディスク21、光ディスク22、光磁気ディスク23、或いは半導体メモリ24などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部18にインストールされる。
【0039】
なお、ルータ3も、PC1と基本的に同様に構成されている。したがって、以下の説明においては、図6のPC1の構成は、必要に応じて、ルータ3の構成としても引用する。
【0040】
図7は、PC1のデータ送受信処理における機能構成例を示すブロック図である。図7に示される機能ブロックは、PC1の図6のCPU11により所定の制御プログラムが実行されることで実現される。
【0041】
データ制御部31は、PC1のデータ送受信処理において、ユーザ側のインタフェース部分を提供する。データ制御部31は、ユーザの操作により、図6の入力部16を介して入力される指示に基づいて、記憶部19に記憶されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。また、データ制御部31は、受信バッファ37のデータを読み込み、入力部16を介して入力されるユーザの指示のもと、記憶部19に書き込んだり、そのままプログラムで使用する。
【0042】
TCP制御部32は、図8を参照して詳しく後述するTCPプロトコルのLEAP方式に基づいて、TCB(TCP Control Block)記憶部33にネットワーク3を介して実行されるコネクションの状態を保持しながら、送信バッファ34、送信部35、受信部36および受信バッファ37を制御し、データ送受信処理を実行する。
【0043】
TCP制御部32は、データ制御部31により書き込まれた送信バッファ34内のデータをTCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。TCPウインドウの値は、送信されるデータセグメント量を示しており、ネットワーク3において、セグメントの損失がなければ、徐々に大きくなる。しかしながら、セグメントが欠損すると、TCPウインドウの値は、1セグメントに戻る。TCP制御部32は、このようなTCPウインドウの値を用いて、送信するデータセグメントの量を調整する。
【0044】
また、TCP制御部32は、送信部35からデータセグメントが送信されると、内蔵する再送タイマを起動させる。再送タイマは、受信部36に、他のPCから、前回送信されたデータセグメントを受信したことを通知するACK(acknowledgement:確認応答)セグメントが受信されると停止する。再送タイマは、所定の時間(再送タイマ動作時間)が経過しても、受信部36にACKセグメントが受信されない場合、タイムアウトする。なお、ACKセグメントは、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかを確認し、届いていないシーケンス番号の最小のデータセグメントを送信側のPCに要求する機能を有する。
【0045】
TCP制御部32は、再送タイマにより計時動作を行い、受信部36を監視しており、他のPCから前回送信されたデータセグメントに対応するACKセグメントが所定の時間(再送タイマ動作時間)内に受信されたか否かを判断し、その判断に基づいて、どのデータセグメントを送信部35に供給するかを制御する。
【0046】
具体的には、受信部36が前回送信されたデータセグメントに対応するACKセグメントを受信した場合、TCP制御部32は、TCPウインドウの値を拡張し、受信したACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。例えば、TCPウインドウの値が5であれば、受信したACKセグメントが要求するデータセグメントから、5個のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。
【0047】
一方、受信部36が前回送信されたデータセグメントに対応するACKを受信しなかった場合、TCP制御部32は、ネットワーク3上でのセグメント(ACKセグメントまたはデータセグメント)の欠損があったとして、TCPウインドウの値を1に収縮し、前回送信したデータセグメントのうち、シーケンス番号の最小のデータセグメントである再送セグメントを、TCPウインドウとして設定するが、その再送セグメントは送信せずに、前回送信したデータセグメント(すなわち、前回のTCPウインドウ)の次のデータセグメントを飛躍セグメントとして送信部35に供給する。
【0048】
また、TCP制御部32は、受信部36を監視しており、受信部36が他のPCからネットワーク3を介して、データセグメントを受信した場合、受信したデータセグメントに対応するACKセグメントを送信部35に供給する。
【0049】
送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたデータセグメントまたはACKセグメントを、ネットワーク3を介して、他のPCに送信する。
【0050】
TCB記憶部33は、メモリなどにより構成され、TCP制御部32により書き込まれたTCPウインドウの値、再送タイマ動作時間、飛躍セグメントのシーケンス番号を格納するleap_seqno変数、および、飛躍セグメントがネットワーク3上にあるか否か(すなわち、送信されていて、まだ、飛躍セグメントに対応するACKセグメントを受信していない状態であるか否か)を判断するためのフラグであるleap_flg変数などのコネクション(データ転送)の状態を保持している。送信バッファ34は、32kbyteのバッファにより構成され、他のPCに送信するデータセグメントが一旦蓄積され、蓄積されたデータセグメントは、送信部35により送信されると消去される。これにより、データ制御部31は、送信バッファ34の空き領域に、新たにデータを書き込むことができる。
【0051】
受信部36は、他のPCから送信されたACKセグメントを、ネットワーク3を介して受信する。また、受信部36は、他のPCから送信されたデータセグメントを、ネットワーク3を介して受信し、受信したデータセグメントを順序どおりに並べ替えて、受信バッファ37に書き込む。受信バッファ37は、32kbyteのバッファにより構成され、受信部36より書き込まれたデータが一旦蓄積される。蓄積されたデータは、データ制御部31により読み込まれる。
【0052】
次に、図5の情報処理システムの動作について説明する。
【0053】
PC1−1のデータ制御部31は、記憶部19に記憶されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。TCP制御部32は、データ制御部31により書き込まれた送信バッファ34内のデータをTCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたデータセグメントを、ネットワーク3およびルータ2を介して、PC1−2に送信する。
【0054】
PC1−2の受信部36は、PC1−1から送信されたデータセグメントを、ネットワーク3およびルータ2を介して受信し、受信したデータセグメントを順序どおりに並べ替えて、受信バッファ37に書き込む。TCP制御部32は、受信部36を監視しており、受信部36がPC1−1からデータセグメントを受信した場合、受信したデータセグメントに対応するACKセグメントを送信部35に供給する。送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたACKセグメントを、ネットワーク3およびルータ2を介して、PC1−1に送信する。
【0055】
PC1−1の受信部36は、PC1−2から送信されたACKセグメントを、ネットワーク3を介して受信する。TCP制御部32は、受信部36を監視しており、再送タイマにより計時動作を行い、他のPCからACKセグメントが所定の時間(再送タイマ動作時間)内に受信されたか否かを判断し、受信部36がACKセグメントを受信したと判断した場合、TCPウインドウの値を拡張し、受信したACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。
【0056】
以上のようにして、ネットワーク3上において、セグメントの欠損がない場合のPC1−1およびPC1−2間のデータ送受信処理が実行される。
【0057】
次に、図8および図9を参照して、本発明のLEAP方式と従来のReno方式におけるセグメントが欠損した場合のデータセグメントの再送処理を比較して説明する。図8および図9の例においては、送信側のPC1−1が、ネットワーク3を介して、受信側のPC1−2にデータを送信する例について説明する。なお、図8は、本発明のLEAP方式によるデータセグメントの再送処理を説明する図であり、図9は、従来のReno方式によるデータセグメントの再送処理を説明する図である。また、以下のデータセグメントの再送処理は、PC1−1およびPC1−2のTCP制御部32が制御する処理であるが、それぞれ、PC1−1およびPC1−2を主語として説明する。
【0058】
図8の例において、「wnd=4」、「wnd=1」および「wnd=2」は、送信側のPC1−1におけるTCPウインドウの値が「4」、「1」および「2」であることを示している。また、送信側PC1−1において、点線の四角は、TCPウインドウのデータセグメントを示しており、実線の四角は、実際に送信されるデータセグメントを示している。
【0059】
図中左側において、送信側のPC1−1は、TCPウインドウの値が「4」であるので、4つのデータセグメントD1乃至D4をTCPウインドウとして設定し、TCPウインドウ内のデータセグメントを、ネットワーク3を介して、受信側のPC1−2に送信する。このとき、データセグメントD4は、輻輳Eが生じているネットワーク3上で欠損する。したがって、受信側のPC1−2は、ネットワーク3を介して、データセグメントD1乃至D3だけを受信する。
【0060】
そこで、受信側のPC1−2は、データセグメントD1乃至D3を受信したことを通知するACKセグメントA1乃至A3を、ネットワーク3を介して、送信側のPC1−1に送信する。しかしながら、ネットワーク3上の輻輳Eにより、ACKセグメントA1乃至A3は、ネットワーク3上で欠損する。
【0061】
したがって、いまの場合、送信側のPC1−1は、データセグメントD1乃至D4に対応するACKセグメントを、1つも受信することができない。送信側のPC1−1は、データセグメントD1乃至D4を送信したとき、再送タイマを起動する。送信側のPC1−1は、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過しても、データセグメントD1乃至D4に対応するACKセグメントを受信しない場合、再送タイマをタイムアウトし、TCPウインドウの値を1に収縮する。
【0062】
このとき、従来のReno方式であれば、図9に示されるように、送信側のPC1−1は、前回送信されたデータセグメントのうち、シーケンス番号の最小のデータセグメントであるデータセグメントD1を、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントD1を再送セグメントとして送信する。データセグメントD1は、再送タイマがタイムアウトした時点のTCPウインドウ内のデータセグメントD1乃至D4のうち、シーケンス番号が最小のデータセグメントである。しかしながら、データセグメントD1は、受信側のPC1−2により既に受信されているデータセグメントであるため、受信側のPC1−2により破棄されてしまう。その後、受信側のPC1−2は、データセグメントD1に対応するACKセグメントA1をネットワーク3を介して送信側のPC1−1に送信する。
【0063】
ACKセグメントは、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかを確認し、届いていないシーケンス番号の最小のデータセグメントを要求する機能を有する。したがって、ACKセグメントA1は、受信側のPCにおいて受信されているデータセグメントD3の次のシーケンス番号のデータセグメントであるデータセグメントD4を要求する。ACKセグメントA1を受信した送信側のPC1−1は、再送タイマを停止し、TCPウインドウを1つ拡張させて、TCPウインドウの値を「2」とし、要求されたデータセグメントD4とその次のデータセグメントD5を、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントD4およびD5を、ネットワーク3を介して受信側のPC1−2に送信する。
【0064】
一方、図8のLEAP方式においては、送信側のPC1−1は、TCPウインドウ内のデータセグメントD1(再送セグメント)ではなく、前回送信したデータセグメント(再送タイマがタイムアウトした時点のTCPウインドウ内のデータセグメント)D1乃至D4の次のデータセグメントD5を受信側のPC1−2に送信する。すなわち、いまの場合、TCPウインドウは、データセグメントD1が設定されており、データセグメントD5は、TCPウインドウ内にはないため、送信側のPC1−1は、データセグメントD5を飛躍セグメントとしてネットワーク3を介して、受信側のPC1−2に送信する。なお、このとき、送信側のPC1−1は、TCB記憶部33のLeap_seqno変数に、飛躍セグメントのシーケンス番号を格納し、飛躍セグメントを送信中であるということを示すために、TCB記憶部33のLeap_flg変数をオン状態に設定する。
【0065】
受信側のPC1−2は、ネットワーク3を介してデータセグメントD5を受信し、データセグメントD5に対応するACKセグメントA5を、ネットワーク3を介して送信側のPCに送信する。このACKセグメントA5は、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントであるデータセグメントD4を要求する。
【0066】
これに対応して、送信側のPC1−1は、ACKセグメントA5を受信すると、再送タイマを停止させる。そして、送信側のPC1−1は、TCB記憶部33のLeap_flg変数をオフ状態に設定し、TCPウインドウを1つ拡張させて、TCPウインドウの値を「2」とし、要求されたデータセグメントD4とその次のデータセグメントD5を、TCPウインドウとして設定する。しかしながら、データセグメントD4に続くデータセグメントD5は、飛躍セグメントとして、すでに受信側のPC1−2に送信され、受信されている。したがって、送信側のPC1−1は、TCB記憶部33のLeap_seqno変数のシーケンス番号に基づいて、TCPウインドウ内のセグメントであっても、飛躍セグメントであるデータセグメントD5は送信せず、TCPウインドウ内のデータセグメントD4と、飛躍セグメントの次のデータセグメントD6を、ネットワーク3を介して、受信側のPC1−2に送信する。
【0067】
以上により、送信側のPC1−1においては、重複したデータセグメントD1を送信することが抑制される。これにより、図8のLEAP方式のデータセグメント再送処理においては、図9の従来のReno方式のデータセグメント再送処理よりも1つ先のデータセグメントD6が送信されるので、効率的にデータの送受信処理が実行される。
【0068】
次に、図10乃至図12のフローチャートを参照して、ネットワーク3を介してPC1−2へデータを送信するPC1−1のデータ送信処理を説明する。
【0069】
データ制御部31は、ユーザの操作により、入力部16を介して入力される指示に基づいて、記憶部19に記録されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。
【0070】
TCP制御部32は、ステップS1において、送信バッファ34を監視しており、送信バッファ34に送信する送信データセグメントがあるか否かを判断し、送信バッファ34に送信データセグメントがあると判断した場合、TCP制御部32は、送信バッファ34に書き込まれたデータを、TCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、ステップS2に進む。
【0071】
ステップS2において、TCP制御部32は、送信データセグメントがTCPウインドウ内にあるか否かを判断する。このとき、データセグメントの初めての送信の場合、または、前回のTCPウインドウとして設定したデータセグメントに対応するACKセグメントが受信された場合、送信データセグメントは、TCPウインドウとして設定されるため、送信データセグメントがTCPウインドウ内にあると判断される。一方、前回のTCPウインドウとして設定したデータセグメントが送信され、そのデータセグメントに対応するACKセグメントが受信されていない場合、また、TCPウインドウは、前回の送信されたデータセグメントに設定されているため、送信されるデータセグメントは、TCPウインドウ内にないと判断される。
【0072】
ステップS2において、送信データセグメントがTCPウインドウ内にはないと判断された場合、ステップS3に進み、TCP制御部32は、受信部36が、PC1−2から、前回送信されたデータセグメントに対応するACKセグメントを受信したか否かを判断し、前回送信されたデータセグメントに対応するACKセグメントを受信していないと判断した場合、ステップS4に進む。TCP制御部32は、前回のデータセグメントを送信してから再送タイマを起動させ、計時動作を行っている。ステップS4において、TCP制御部32は、再送タイマにより計時動作を行い、前回のデータセグメントを送信してから所定の時間が経過したか否かを判断する。ステップS4において、前回のデータセグメントを送信してから所定の時間が経過していないと判断された場合、処理は、ステップS3に戻り、それ以降の処理を繰り返す。
【0073】
ステップS3において、前回のデータセグメントに対応するACKセグメントを受信したと判断された場合、TCP制御部32は、再送タイマを停止し、ステップS5において、TCB記憶部33のleap_flgがオン状態であるか否かを判断する。TCP制御部32は、ステップS5において、TCB記憶部33のleap_flgがオン状態であると判断した場合、ステップS6に進み、TCB記憶部33のleap_flgをオフ状態に設定し、ステップS7に進む。ステップS5において、TCB記憶部33のleap_flgがオン状態ではないと判断された場合、TCP制御部32は、ステップS6をスキップし、ステップS7に進む。ステップS7において、TCP制御部32は、TCPウインドウの値を拡張し、ステップS3において受信されたACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、ステップS2に戻り、それ以降の処理を繰り返す。
【0074】
ステップS2において、送信データセグメントがTCPウインドウ内にあると判断された場合、処理は、図11のステップS8に進み、TCP制御部32は、TCB記憶部33のleap_seq変数の飛躍セグメントのシーケンス番号に基づいて、送信する送信データセグメントが飛躍セグメントであるか否かを判断する。ステップS8において、送信データセグメントが飛躍セグメントであると判断された場合(例えば、図8におけるデータセグメントD5)、送信データセグメントが飛躍セグメントとしてすでにPC1−2に送信されていることになるので、ステップS9において、TCP制御部32は、TCPウインドウ内の送信データセグメントは送信せず、TCPウインドウ内の他のデータセグメント(ある場合)と、送信データセグメントの次のデータセグメント(例えば、図8におけるデータセグメントD6)を、ネットワーク3を介して、PC1−2に送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0075】
ステップS8において、送信データセグメントが飛躍セグメントではないと判断された場合(例えば、図8のデータセグメントD4)、ステップS9において、TCP制御部32は、送信データセグメントを、ネットワーク3を介して、PC1−2に送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0076】
一方、TCP制御部32は、図10のステップS4において、前回のデータセグメントを送信してから所定の時間が経過したと判断した場合、再送タイマをタイムアウトし、図12のステップS11に進み、TCB記憶部33のleap_flgがオン状態であるか否かを判断する。ステップS11において、TCB記憶部33のleap_flgがオン状態であると判断された場合、TCP制御部32は、ステップS12に進み、TCB記憶部33のleap_seq変数の飛躍セグメントのシーケンス番号に基づいて、飛躍セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。ここで、TCB記憶部33のleap_flgがオン状態であるということは、すでに飛躍セグメントがPC1−2に送信されているが、送信された飛躍セグメントに対応するACKセグメントがPC1−2から受信されていないということである。したがって、ステップS12において、飛躍セグメントは、PC1−2に再送されていることになる。
【0077】
このようにして、PC1−1は、飛躍セグメントに対応するACKセグメントが受信されるまで飛躍セグメントをPC1−2に再送し続ける。なお、従来のTCPのReno方式においては、同一データセグメントを13回送信してもACKセグメントが受信されない場合、そのデータセグメントは、コネクションを諦めて破棄されるようになっている。LEAP方式の場合、飛躍セグメントの1回目の送信が、従来のデータセグメントの1回目の再送(2回目の送信)である。そこで、従来のTCPとの整合性を保つため、飛躍セグメントの送信が12回目になってもACKセグメントが受信されない場合、飛躍セグメントは、従来のTCPと同様にコネクションを諦めて破棄される。また、上述したように、飛躍セグメントに対応するACKが欠損する場合もあるので、飛躍セグメントを複数保持するようにしてもよい。
【0078】
なお、実際には、PC1−1は、受信したACKセグメントが飛躍セグメントに対応するものであるか否かは判断できないので、以前に送信したデータセグメントに対応するACKセグメントが遅延して到着し、leap_flgをオフ状態にしてしまう場合もある。しかしながら、再送タイマのタイムアウトの値(再送タイマ動作時間)は、ネットワークの遅延を基準としてその数倍の時間が設定されるため、このようなACKセグメントの遅延が起こり、同時に飛躍セグメントが欠損している状況はまれであるといえる。
【0079】
ステップS11において、TCB記憶部33のleap_flgがオフ状態である(ネットワーク3上に飛躍セグメントは存在しない)と判断された場合、TCP制御部32は、ステップS13に進み、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントである、再送セグメント(例えば、図8のデータセグメントD1)に対する重複ACKを受信したか否かを判断し、再送セグメントに対する重複ACKを受信したと判断した場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0080】
このステップS13の処理について、図13を参照して説明する。図13の例の場合、送信側PC1−1は、TCPウインドウの値が「4」であるので、4つのデータセグメントD1乃至D4をTCPウインドウとして設定し、TCPウインドウ内のデータセグメントを、ネットワーク3を介して、受信側のPC1−2に送信する。しかしながら、データセグメントD1は、ネットワーク3上で欠損してしまう。この場合、受信側PC1−2は、データセグメントD2乃至D4を受信し、各データセグメントに対応するACKセグメントA2乃至A4を、ネットワーク3を介して、送信側のPC1−1に送信する。ACKセグメントA2乃至A4は、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントであるデータセグメントD1を要求する。
【0081】
この場合、ACKセグメントA2と同一のデータセグメントD1(再送セグメント)を要求しているACKセグメントA3およびA4は、再送セグメントに対する重複ACKとされる。このように、送信側のPC1−1において、重複ACKが受信された場合、送信側のPC1−2に、再送セグメントであるデータセグメントD1が受信されていないことが可能性が高いといえる(なお、データセグメントD1だけが遅延してデータセグメントD2、D3またはD4の後に到着することもあるが、非常に低い確率である)。したがって、再送セグメントに対する重複ACKが受信されている場合は、再送セグメントであるデータセグメントD1が送信側のPC1−2に受信され、それに対応するACKセグメントがネットワーク3上で損失された可能性がないに等しいので、この場合には、飛躍セグメントではなく、TCP制御部32は、重複ACKが要求する再送セグメントを送信するように制御する。
【0082】
ステップS13において、再送セグメントに対する重複ACKを受信していないと判断された場合、TCP制御部32は、ステップS14に進み、TCPのヘッダのフラグ領域に基づいて、再送セグメントに特殊ビットが設定されているか否かを判断する。ステップS14において、再送セグメントに特殊ビットが設定されていると判断された場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0083】
このステップS14の処理について具体的に説明すると、TCPのデータセグメントには、順序を入れ換えて送信しても意味があるデータセグメントと、順序を入れ換えて送信してしまうと、そのデータセグメントが持つ意味がなくなってしまうデータセグメントが存在する。後者のデータセグメントとしては、例えば、コネクション(データ転送)開始時に送信されるSYNセグメントがある。SYNセグメントがネットワーク3上で欠損し、PC1−2に受信されていない場合に、飛躍セグメントとして新しいデータセグメントが受信側のPC1−2に送信されたとしても、受信側のPC1−2は受け取ることができない。したがって、このような場合には、TCP制御部32は、飛躍セグメントではなく、再送セグメント(SYNセグメント)を送信するように制御する。
【0084】
このようなセグメントは、SYNセグメントの他にコネクション終了時に送信されるFINセグメント、コネクション強制終了時に送信されるRSTセグメント、および、一連のセグメントをデータ制御部31に渡すためのトリガとなるPUSHセグメントがある。
【0085】
ステップS14において、再送セグメントに特殊ビットが設定されていないと判断された場合、TCP制御部32は、ステップS15に進み、直前に受信したACKセグメントに基づいて、受信側のPC1−2の受信バッファ37が送信データセグメントを受信可能であるか否かを判断する。ステップS15において、受信側のPC1−2の受信バッファ37が、送信データセグメントを受信可能ではないと判断された場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0086】
このステップS14の処理について具体的に説明する。TCPウインドウの値は、送信側PC1−1のTCP制御部32が保持する輻輳ウインドウの値と、受信側PC1−2からACKセグメントにより告知される広告ウインドウの値の小さい方が設定される。広告ウインドウの値は、受信側のPC1−2の受信バッファ37の空き容量であるため、広告ウインドウの値を越えたデータセグメントはバッファされずに破棄される。極度の輻輳時には、データセグメントの欠損により輻輳ウインドウが収縮しているため、TCPウインドウは、受信側からの広告ウインドウではなく輻輳ウインドウで制限されることが多い。しかしながら、輻輳時以外にも、ACKセグメントの欠損は発生することがあるため、飛躍セグメントが広告ウインドウ(受信バッファ37)の大きさを越えている場合、TCP制御部32は、飛躍セグメントではなく、再送セグメントを送信するように制御する。
【0087】
ステップS15において、受信側のPC1−2の受信バッファ37が、送信データセグメントを受信可能であると判断された場合、TCP制御部32は、ステップS17において、TCB記憶部33のleap_flgをオン状態に設定し、ステップS18に進む。TCP制御部32は、ステップS18において、送信データセグメントのシーケンス番号をleap_seq変数に保持し、送信データセグメントを飛躍セグメントとし、ステップS19に進む。TCP制御部32は、ステップS19において、送信部35を制御し、飛躍セグメントを、ネットワーク3を介して、受信側のPC1−2に送信し、図10のステップS1に戻り、以降の処理を繰り返す。
【0088】
図10のステップS1において、TCP制御部32は、送信データセグメントが送信バッファ34にないと判断した場合、データ送信処理を終了させる。
【0089】
次に、図14および図15を参照して、図5の情報処理システムにおいて実行されたデータ転送のシミュレーション結果を説明する。このシミュレーションは、3台のPC1−1乃至1−3が1台のルータ2を経由して接続しているネットワーク3のネットワーク環境において、100個のデータを送出するFTPのコネクション(データ転送)を指数分布の間隔に従ってランダムに発生させ、1秒間に発生するコネクションの数の平均値を、0.25コネクション刻みで、1コネクションから3.5コネクションまで変更させて、3000秒間実行されたものである。なお、このシミュレーションにおいては、図8を参照して上述したLEAP方式および図9を参照して上述した従来のTCPの方式としてReno方式が用いられている。
【0090】
図14は、1コネクションにおける平均送受信パケット数を示すグラフである。図14の例においては、横軸は、1秒間に発生するコネクションの数の平均値(トラフィック負荷度)を示しており、トラフィックの負荷度は、右に行くに従って高くなる。縦軸は、LEAP方式、および従来のReno方式を用いた場合の送信パケット数(s)と受信パケット数(r)を示しており、送受信パケット数は、上に行くに従って多くなる。
【0091】
図14の例の場合、LEAP方式においては、トラフィック負荷度が1コネクション数/秒のとき、送信パケット数は、100.013パケットであり、受信パケット数は、100.001パケットであり、トラフィック負荷度が1.25コネクション数/秒のとき、送信パケット数は、100.07パケットであり、受信パケット数は、100.017パケットである。トラフィック負荷度が1.5コネクション数/秒のとき、送信パケット数は、100.23パケットであり、受信パケット数は、100.043パケットであり、トラフィック負荷度が1.75コネクション数/秒のとき、送信パケット数は、100.665パケットであり、受信パケット数は、100.126パケットである。トラフィック負荷度が2コネクション数/秒のとき、送信パケット数は、100.924パケットであり、受信パケット数は、100.182パケットであり、トラフィック負荷度が2.25コネクション数/秒のとき、送信パケット数は、102.003パケットであり、受信パケット数は、100.506パケットである。
【0092】
また、トラフィック負荷度が2.5コネクション数/秒のとき、送信パケット数は、103.66パケットであり、受信パケット数は、100.899パケットであり、トラフィック負荷度が2.75コネクション数/秒のとき、送信パケット数は、105.096パケットであり、受信パケット数は、101.335パケットである。また、トラフィック負荷度が3コネクション数/秒のとき、送信パケット数は、106.989パケットであり、受信パケット数は、101.646パケットであり、トラフィック負荷度が3.25コネクション数/秒のとき、送信パケット数は、110.177パケットであり、受信パケット数は、101.783パケットであり、トラフィック負荷度が3.5コネクション数/秒のとき、送信パケット数は、113.99パケットであり、受信パケット数は、101.59パケットである。
【0093】
一方、従来のReno方式においては、トラフィック負荷度が1コネクション数/秒のとき、送信パケット数は、100.001パケットであり、受信パケット数は、100.001パケットであり、トラフィック負荷度が1.25コネクション数/秒のとき、送信パケット数は、100.073パケットであり、受信パケット数は、100.022パケットである。トラフィック負荷度が1.5コネクション数/秒のとき、送信パケット数は、100.213パケットであり、受信パケット数は、100.045パケットであり、トラフィック負荷度が1.75コネクション数/秒のとき、送信パケット数は、100.689パケットであり、受信パケット数は、100.168パケットである。トラフィック負荷度が2コネクション数/秒のとき、送信パケット数は、101.485パケットであり、受信パケット数は、100.448パケットであり、トラフィック負荷度が2.25コネクション数/秒のとき、送信パケット数は、102.721パケットであり、受信パケット数は、100.814パケットである。
【0094】
また、トラフィック負荷度が2.5コネクション数/秒のとき、送信パケット数は、106.696パケットであり、受信パケット数は、103.147パケットであり、トラフィック負荷度が2.75コネクション数/秒のとき、送信パケット数は、128.853パケットであり、受信パケット数は、109.061パケットである。また、トラフィック負荷度が3コネクション数/秒のとき、送信パケット数は、185.727パケットであり、受信パケット数は、120.394パケットであり、トラフィック負荷度が3.25コネクション数/秒のとき、送信パケット数は、194.298パケットであり、受信パケット数は、123.37パケットであり、トラフィック負荷度が3.5コネクション数/秒のとき、送信パケット数は、209.268パケットであり、受信パケット数は、130.056パケットである。
【0095】
図14のグラフにおいて、例えば、トラフィック負荷度が3.25コネクション数/秒のとき、Reno方式の送信パケット数は、194.298パケットであり、LEAP方式の送信パケット数は、110.177パケットである。すなわち、LEAP方式を用いることにより、矢印Q1に示されるように、およそ80パケットの無駄な送信パケットが減少する。また、例えば、トラフィック負荷度が3.5コネクション数/秒のとき、Reno方式の受信パケット数は、130.056パケットであり、LEAP方式の受信パケット数は、101.59パケットである。すなわち、LEAP方式を用いることにより、矢印Q2に示されるように、およそ30パケットの無駄な受信パケットが減少する。
【0096】
さらに、LEAP方式においては、受信パケット数は、ほぼ100パケットに近づいている。これにより、図14においては、1コネクションが転送するセグメント数は、100パケットであるため、LEAP方式においては、無駄のないデータ転送が実現されていることがわかる。なお、100パケットちょうどにならないのは、SYNセグメントまたはFINセグメントなどの特殊セグメントが再送される場合、もしくは、飛躍セグメントのACKセグメントが欠損してしまい、到着したはずの飛躍セグメントが再送される場合があるためである。
【0097】
また、受信パケット数が減少するということは、すなわち、送信パケット数が減少することにも関係する。したがって、コネクション全体で送信するパケット数が減少するため、ネットワーク3全体でのトラフィックの負荷度が抑制される。このため、パケット欠損率も抑制され、その結果、送信パケット数は、さらに減少する。
【0098】
図15は、シミュミレーション時間内に終了したデータ転送の数を示すグラフである。図15の例においては、横軸は、1秒間に発生するコネクションの数の平均値(すなわち、トラフィック負荷度)を示しており、トラフィックの負荷は、右に行くに従って高くなる。縦軸は、LEAP方式および従来のReno方式を用いてデータ転送が終了したコネクション数(終了コネクション数)を示しており、終了コネクション数は、上に行くに従って多くなる。
【0099】
図15のグラフの場合、LEAP方式においては、トラフィック負荷度が1コネクション数/秒のとき、2997コネクションが終了し、トラフィック負荷度が1.25コネクション数/秒のとき、3694コネクションが終了し、トラフィック負荷度が1.5コネクション数/秒のとき、4425コネクションが終了している。また、トラフィック負荷度が1.75コネクション数/秒のとき、5122コネクションが終了し、トラフィック負荷度が2コネクション数/秒のとき、5912コネクションが終了し、トラフィック負荷度が2.25コネクション数/秒のとき、6725コネクションが終了している。トラフィック負荷度が2.5コネクション数/秒のとき、7387コネクションが終了し、トラフィック負荷度が2.75コネクション数/秒のとき、8070コネクションが終了し、トラフィック負荷度が3コネクション数/秒のとき、8342コネクションが終了している。また、トラフィック負荷度が3.25コネクション数/秒のとき、8370コネクションが終了し、トラフィック負荷度が3.5コネクション数/秒のとき、7772コネクションが終了している。
【0100】
一方、従来のReno方式においては、トラフィック負荷度が1コネクション数/秒のとき、2932コネクションが終了し、トラフィック負荷度が1.25コネクション数/秒のとき、3679コネクションが終了し、トラフィック負荷度が1.5コネクション数/秒のとき、4453コネクションが終了している。また、トラフィック負荷度が1.75コネクション数/秒のとき、5214コネクションが終了し、トラフィック負荷度が2コネクション数/秒のとき、5848コネクションが終了し、トラフィック負荷度が2.25コネクション数/秒のとき、6667コネクションが終了している。トラフィック負荷度が2.5コネクション数/秒のとき、7450コネクションが終了し、トラフィック負荷度が2.75コネクション数/秒のとき、7928コネクションが終了し、トラフィック負荷度が3コネクション数/秒のとき、6701コネクションが終了している。また、トラフィック負荷度が3.25コネクション数/秒のとき、6080コネクションが終了し、トラフィック負荷度が3.5コネクション数/秒のとき、4508コネクションが終了している。
【0101】
図15のグラフの横軸に注目すると、従来のReno方式の場合、2.5コネクション数/秒までは直線的に終了コネクション数が直線的に増加している。しかしながら、トラフィック負荷度が2.75コネクション数/秒のとき、7928コネクションであった終了コネクション数が、トラフィック負荷度が3コネクション数/秒のとき、6701コネクションに減少していることに示されるように、トラフィック負荷度が2.75コネクション数/秒を越えたあたりから、終了コネクション数は、急激に減少している。
【0102】
一方、LEAP方式を用いた場合には、トラフィック負荷度が3.25コネクション数/秒のとき、8370コネクションであった終了コネクション数が、トラフィック負荷度が3.5コネクション数/秒のとき、7772コネクションに減少していることに示されるように、トラフィック負荷度が3.25コネクション数/秒を越えたあたりから、終了コネクション数は、徐々に減少している。
【0103】
また、図中の矢印に示されるように、トラフィック負荷度が3.5コネクション数/秒のあたりにおいては、Reno方式では、4508コネクションしか終了していないのに対して、LEAP方式では、Reno方式の倍近くの7772コネクションが終了している。以上のように、LEAP方式を用いることにより、図5のネットワーク3全体の資源利用効率も大幅に上昇させることができる。
【0104】
以上のように、LEAP方式を用いることにより、輻輳時のネットワーク状態において、重複したセグメントの送信を回避し、無駄のない、効率的なデータ転送をすることができる。
【0105】
また、LEAP方式においては、送信側の機能を追加しただけであり、実装が容易にできる。さらに、従来のTCPのReno方式などとも整合性をとるようにしたので、輻輳していない通常のネットワーク状態におけるTCPの性能を劣化させることもない。
【0106】
なお、上記説明においては、TCPプロトコルを用いてデータ送信処理を実行したが、確認応答のACKを用いるものであれば、他のプロトコルを用いるようにしてもよい。
【0107】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
【0108】
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図6に示されるように、磁気ディスク21(フレキシブルディスクを含む)、光ディスク22(CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク23(MD(Mini−Disc)(商標)を含む)、もしくは半導体メモリ24などよりなるパッケージメディア、または、プログラムが一時的もしくは永続的に格納されるROM12や、記憶部18などにより構成される。
【0109】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【0110】
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【0111】
【発明の効果】
以上の如く、本発明によれば、通常時のデータ転送の性能を劣化させることなく、重度の輻輳時に、効率的にデータを送信することができる。
【図面の簡単な説明】
【図1】従来のデータ再送処理について説明する図である。
【図2】従来のデータ再送処理の他の例について説明する図である。
【図3】従来のTCPの方式において、シミュミレーション時間内に終了したコネクションの数を示すグラフである。
【図4】従来のTCPの方式において、1コネクションにおける平均送受信パケット数を示すグラフである。
【図5】本発明を適用した情報処理システムの構成例を示す図である。
【図6】図5のパーソナルコンピュータの構成例を示すブロック図である。
【図7】図5のパーソナルコンピュータの機能構成例を示すブロック図である。
【図8】図5の情報処理システムにおけるLEAP方式のデータ再送処理について説明する図である。
【図9】図8のLEAP方式と比較するための従来のReno方式のデータ再送処理について説明する図である。
【図10】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図11】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図12】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図13】再送セグメントの重複ACKを説明する図である。
【図14】図8のLEAP方式と従来のReno方式の1コネクションにおける平均送受信パケット数を示すグラフである。
【図15】図8のLEAP方式と従来のReno方式のシミュミレーション時間内に終了したコネクションの数を示すグラフである。
【符号の説明】
1−1乃至1−3 パーソナルコンピュータ,2 ルータ,3 ネットワーク,11 CPU,31 データ制御部,32 TCP制御部,33 TCB記憶部,34 送信バッファ,35 送信部,36 受信部,37 受信バッファ
【発明の属する技術分野】
本発明は、情報処理装置および方法、記録媒体、並びにプログラムに関し、特に、重度の輻輳時に、効率的にデータを送信することができるようにした情報処理装置および方法、記録媒体、並びにプログラムに関する。
【0002】
【従来の技術】
インターネットに用いられるトランスポート層のプロトコルとしては、例えば、コネクションレスのUDP(User Datagram Protocol)と、コネクションを行うことにより信頼性を確保するTCP(Transmission Control Protocol)が存在する。
【0003】
インターネットを利用するユーザの多くは、各自のネットワークインフラ(Infrastructure)を最大限に利用したいと考えている。そこで、UDPにおいては、特許文献1に示されるように、NACK(Negative acknowledgement)を用いて、欠損要求があったデータのみを送ることにより、多数のユーザに対して、データを効率的、かつ高い信頼性で配信することができるようにした送受信装置が提案されている。
【0004】
一方、TCPは、上位アプリケーションから受け取ったデータを、100%確実に送信することを保証するプロトコルである。TCPで送受信される情報は、セグメントと呼ばれる単位で送受信される。セグメントには、データセグメントとACK(acknowledgement:確認応答)セグメントの2種類が存在する。TCPは、この2種類のセグメントを利用して、次のような輻輳制御により通信の信頼性を確保する。
【0005】
まず、送信側のTCPは、データセグメントを受信側に送信する。このデータセグメントを受信すると、受信側のTCPは、受信したデータセグメントに対応するACKセグメントを送信側に送信する。送信側のTCPは、ACKセグメントを受信することで、データセグメントの送信が成功したことを確認する。したがって、ACKセグメントが受信されなかったデータセグメントは、送信側のTCPにより再度送信されることになる。しかしながら、この場合、送信側のTCPでは、図1に示されるように、送信側のTCPからのデータセグメントが欠損したのか、あるいは、図2に示されるように、受信側のTCPからのACKセグメントが欠損したのかの判断が行われていない。したがって、送信側のTCPは、データセグメント、ACKセグメントのどちらが欠損してもデータセグメントの再送処理を実行する。
【0006】
図1および図2は、送信側のTCPによるデータセグメントの再送処理の例を示している。送信側と受信側は、図示せぬネットワークを介してセグメントを通信する。図1の例においては、送信側のTCPから送信されたデータセグメントD1は、受信側に到着する前のネットワーク上で欠損する。したがって、受信側のTCPからデータセグメントD1に対応するACKセグメントは送信されず、送信側のTCPはACKセグメントを受信することができない。送信側のTCPは、データセグメントD1を送信してから、再送タイマを起動し、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過したか否かを判断し、所定の時間が経過してもACKセグメントA1が受信されない場合、データセグメントD1を再送セグメントとして受信側に送信する。これにより、受信側のTCPは、データセグメントD1を受信することができる。
【0007】
一方、図2の例においては、送信側のTCPから送信されたデータセグメントD2は、受信側に無事到着する。受信側のTCPは、受信したデータセグメントD2に対応するACKセグメントA2を送信側に送信する。しかしながら、ACKセグメントA2は、送信側に到着する前のネットワーク上において欠損し、送信側のTCPは、それを受信することができない。受信側のTCPは、データセグメントD2を送信してから、再送タイマを起動させ、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過したか否かを判断し、所定の時間が経過してもACKセグメントA2が受信されない場合、データセグメントD2を再送セグメントとして受信側に送信する。しかしながら、受信側では、前回の送信により、すでにデータセグメントD2が受信されている。したがって、受信側のTCPは、データセグメントD2を重複して受信することになる。
【0008】
以上のように、ACKセグメントの欠損によるデータセグメントの再送は、受信側に到着しているデータセグメントを再度送信することになるため、無駄な処理になってしまう。
【0009】
なお、TCPの確認応答の方法においては、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかをACKセグメントが通知する累積確認応答が行われる。したがって、ACKセグメントが欠損したとしても、それ以降に連続して受信側から送信されるACKセグメントが送信側に到達する。受信側においては、それらのACKセグメントにより、どのデータセグメントが届いているかの状況が把握できるので、欠損したACKセグメントかあっても再送処理に関して影響を与えない。
【0010】
しかしながら、これは、データセグメントが円滑に送信され、TCPの送信ウインドウが拡張しているような場合、すなわち、受信側で送信されるACKセグメントの数が十分多く存在するような場合に限られる。例えば、頻繁な輻輳制御により、TCPの送信ウインドウが収縮している場合、受信側のTCPで送信されるACKセグメントの数も少なくなる。このような場合に、ACKセグメントが欠損した場合、それ以降に連続して受信側から送信されるACKセグメントが少ないため、送信側に到達するACKセグメントはさらに少ない。したがって、TCPの送信ウインドウが収縮している場合において、ACKセグメントの欠損により、データセグメントの再送が実行され、その結果、データセグメントが重複してしまう確率は、TCPの送信ウインドウが拡張しているような場合の確率よりも高くなる。
【0011】
次に、図3および図4のグラフを参照して、3台のノードが1台のノードを経由して接続しているネットワーク環境において実行されたデータ転送のシミュレーション結果を説明する。このシミュレーションは、3台のノードが1台のノードを経由して接続しているネットワーク環境において、100個のデータを送出するFTP(File Transfer Protocol)のコネクション(データ転送)を指数分布の間隔に従ってランダムに発生させ、1秒間に発生するコネクションの数の平均値を、0.25コネクション刻みで、1コネクションから3.5コネクションまで変更させて、3000秒間実行されたものである。なお、このシミュレーションにおいては、現在のTCPの事実上の標準とされているReno方式、TCPウインドウ(TCPにおいて用いられるバッファ量)内で複数のデータセグメントの欠損が起こった場合のReno方式のFast Recoveryを改良したNewReno方式、および、ACKパケットにセグメントの欠損情報を格納することを可能としたSack方式の3種類のTCPの方式が用いられている。
【0012】
図3は、シミュミレーション時間内に終了したコネクション(データ転送)の数を示すグラフである。図3の例においては、横軸は、1秒間に発生するコネクションの数の平均値(すなわち、トラフィック負荷度)を示しており、トラフィックの負荷は、右に行くに従って高くなる。縦軸は、Reno方式、NewReno方式、およびSack方式を用いてデータ転送が終了したコネクション数(終了コネクション数)を示しており、終了コネクション数は、上に行くに従って多くなる。
【0013】
図3のグラフの横軸に注目すると、TCPのどの方式においても、終了コネクション数は、図中矢印に示される2.5コネクション数/秒まで直線的に増加しているが、2.75コネクション数/秒を過ぎたころから明らかに減少していることがわかる。これにより、このネットワークの許容量は、1秒間に2.5コネクション乃至2.75コネクションを転送するあたりのトラフィック負荷度であり、この許容量を越えると、セグメント(データセグメントおよびACKセグメント)の欠損によりTCPの輻輳制御(再送処理)が行われていることが予測される。
【0014】
図4は、1コネクションにおける平均送受信パケット数を示すグラフである。図4の例においては、横軸は、1秒間に発生するコネクションの数の平均値(トラフィック負荷度)を示しており、トラフィックの負荷度は、右に行くに従って高くなる。縦軸は、Reno方式、NewReno方式、およびSack方式を用いた場合の送信パケット数(s)と受信パケット数(r)を示しており、送受信パケット数は、上に行くに従って多くなる。
【0015】
図4のグラフにおいて、送信パケット数(矢印P1)と受信パケット数(矢印P2)の差は、ネットワーク内で実際に欠損したパケット数(矢印P3)である。ここで注意すべき点は、FTPのコネクション(データ転送)は、100個のパケットを送受信するように設定されているにもかかわらず、ネットワークのトラフィックの負荷が高くなるにつれて、矢印P2に示されるように受信パケット数も増加していることである。これは、すなわち、受信側に重複したパケットが到着していることを示している。
【0016】
なお、Reno方式、NewReno方式、およびSack方式において性能差がほとんど見られなかったのは、NewReno方式、およびSack方式は、TCPウインドウ内での複数のデータセグメントの欠損に対して有効であるが、いまの場合のように、トラフィックの負荷が高いときは、TCPウインドウの大きさが小さく収縮されているため、有効になる機会が少なかったといえる。
【0017】
【特許文献1】
特開平11−17737号公報
【0018】
【発明が解決しようとする課題】
以上のように、ネットワーク上において、トラフィックの負荷が高くなると、ACKセグメントの欠損が多くなり、結果的に、受信側に重複したデータセグメントが無駄に受信されてしまう課題があった。これにより、再送されるデータセグメントが増加してしまい、ますますトラフィックの負荷がかかってしまう課題があった。
【0019】
本発明はこのような状況に鑑みてなされたものであり、重度の輻輳時に、効率的にデータを送信することができるようにするものである。
【0020】
【課題を解決するための手段】
本発明の情報処理装置は、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信手段と、送信手段によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACK(acknowledgement)を受信したか否かを判断する受信判断手段とを備え、受信判断手段により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信手段は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0021】
所定のプロトコルは、TCP(Transmission Control Protocol)であるようにすることができる。
【0022】
受信判断手段によりデータに対応するACKが受信されていないと判断された場合に、送信手段により送信された次のデータのシーケンス番号を記憶する記憶手段と、受信判断手段によりデータに対応するACKが受信されていないと判断され、送信手段により次のデータが送信された場合に、そのことを示すフラグを保持する保持手段とをさらに備えるようにすることができる。
【0023】
保持手段によりフラグが保持されているか否かを判断するフラグ判断手段をさらに備え、受信判断手段によりデータに対応するACKが受信されていないと判断され、かつ、フラグ判断手段によりフラグが保持されていると判断された場合、送信手段は、受信判断手段によりACKが受信されていないと判断されたデータを再度送信するようにすることができる。
【0024】
受信判断手段によりデータに対応するACKが受信されたと判断され、かつ、フラグ判断手段によりフラグが保持されていると判断された場合、保持手段は、フラグの保持を解除するようにすることができる。
【0025】
受信判断手段によりデータに対応するACKが受信されたと判断された場合、次に送信する送信データのシーケンス番号が、記憶手段に記憶されているシーケンス番号と同じであるか否かを判断するデータ判断手段をさらに備え、データ判断手段により送信データのシーケンス番号が、記憶手段に記憶されているシーケンス番号と同じであると判断された場合、送信手段は、送信データの送信をスキップし、送信データの次のデータを送信するようにすることができる。
【0026】
本発明の情報処理装置は、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0027】
本発明の記録媒体のプログラムは、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0028】
本発明のプログラムは、ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、送信ステップの処理によりデータが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かを判断する受信判断ステップとを含み、受信判断ステップの処理により他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、送信ステップの処理は、前回送信されたデータに続く次のデータを送信することを特徴とする。
【0029】
本発明においては、ネットワークを介して、所定のプロトコルでデータが他の情報処理装置に送信され、データが送信されてから所定の時間内に、他の情報処理装置からデータに対応するACKを受信したか否かが判断される。そして、他の情報処理装置からデータに対応するACKが受信されていないと判断された場合、前回送信されたデータに続く次のデータが送信される。
【0030】
ネットワークとは、少なくとも2つの装置が接続され、ある装置から、他の装置に対して、情報の伝達をできるようにした仕組みをいう。ネットワークを介して通信する装置は、独立した装置どうしであってもよいし、1つの装置を構成している内部ブロックどうしであってもよい。
【0031】
【発明の実施の形態】
以下、図を参照して本発明の実施の形態について説明する。
【0032】
図5は、本発明を適用した情報処理システムの構成例を表している。LAN(Local Area Network)などで構成されるネットワーク3には、パーソナルコンピュータ(以下、PCと称する)1−1乃至1−3が、ルータ2を介して接続される。なお、ネットワーク3は、LANにより構成されるようにしたが、インターネットなどで構成されるようにしてもよく、接続される装置の台数も限定されない。
【0033】
各PC1−1乃至1−3とルータ2間の帯域幅は、500kbpsで、遅延は50msに設定される。また、また、各PC1−1乃至1−3のキューは、100パケット分でドロップテイル方式を用いて、FIFO(First In First Out)によりパケットを扱う。
【0034】
PC1−1乃至1−3は、TCP(Transmission Control Protocol)プロトコルのLEAP方式(図8を参照して後述する)を用いて、ルータ2を介してお互いにデータ送受信(コネクション)を実行する。
【0035】
図6は、PC1−1乃至1−3(個々に区別する必要がない場合、単にPC1と称する)の構成を表している。図6において、CPU(Central Processing Unit)11は、ROM(Read Only Memory)12に記憶されているプログラム、または記憶部18からRAM(Random Access Memory)13にロードされたプログラムに従って各種の処理を実行する。RAM13にはまた、CPU11が各種の処理を実行する上において必要なデータなども適宜記憶される。
【0036】
CPU11、ROM12およびRAM13は、バス14を介して相互に接続されている。このバス14にはまた、入出力インタフェース15も接続されている。
【0037】
入出力インタフェース15には、キーボード、マウスなどよりなる入力部16、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部17、ハードディスクなどより構成される記憶部18、モデム、ターミナルアダプタなどより構成される通信部19が接続されている。通信部19は、ネットワーク3を介しての通信処理を行う。
【0038】
入出力インタフェース15にはまた、必要に応じてドライブ20が接続され、磁気ディスク21、光ディスク22、光磁気ディスク23、或いは半導体メモリ24などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部18にインストールされる。
【0039】
なお、ルータ3も、PC1と基本的に同様に構成されている。したがって、以下の説明においては、図6のPC1の構成は、必要に応じて、ルータ3の構成としても引用する。
【0040】
図7は、PC1のデータ送受信処理における機能構成例を示すブロック図である。図7に示される機能ブロックは、PC1の図6のCPU11により所定の制御プログラムが実行されることで実現される。
【0041】
データ制御部31は、PC1のデータ送受信処理において、ユーザ側のインタフェース部分を提供する。データ制御部31は、ユーザの操作により、図6の入力部16を介して入力される指示に基づいて、記憶部19に記憶されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。また、データ制御部31は、受信バッファ37のデータを読み込み、入力部16を介して入力されるユーザの指示のもと、記憶部19に書き込んだり、そのままプログラムで使用する。
【0042】
TCP制御部32は、図8を参照して詳しく後述するTCPプロトコルのLEAP方式に基づいて、TCB(TCP Control Block)記憶部33にネットワーク3を介して実行されるコネクションの状態を保持しながら、送信バッファ34、送信部35、受信部36および受信バッファ37を制御し、データ送受信処理を実行する。
【0043】
TCP制御部32は、データ制御部31により書き込まれた送信バッファ34内のデータをTCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。TCPウインドウの値は、送信されるデータセグメント量を示しており、ネットワーク3において、セグメントの損失がなければ、徐々に大きくなる。しかしながら、セグメントが欠損すると、TCPウインドウの値は、1セグメントに戻る。TCP制御部32は、このようなTCPウインドウの値を用いて、送信するデータセグメントの量を調整する。
【0044】
また、TCP制御部32は、送信部35からデータセグメントが送信されると、内蔵する再送タイマを起動させる。再送タイマは、受信部36に、他のPCから、前回送信されたデータセグメントを受信したことを通知するACK(acknowledgement:確認応答)セグメントが受信されると停止する。再送タイマは、所定の時間(再送タイマ動作時間)が経過しても、受信部36にACKセグメントが受信されない場合、タイムアウトする。なお、ACKセグメントは、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかを確認し、届いていないシーケンス番号の最小のデータセグメントを送信側のPCに要求する機能を有する。
【0045】
TCP制御部32は、再送タイマにより計時動作を行い、受信部36を監視しており、他のPCから前回送信されたデータセグメントに対応するACKセグメントが所定の時間(再送タイマ動作時間)内に受信されたか否かを判断し、その判断に基づいて、どのデータセグメントを送信部35に供給するかを制御する。
【0046】
具体的には、受信部36が前回送信されたデータセグメントに対応するACKセグメントを受信した場合、TCP制御部32は、TCPウインドウの値を拡張し、受信したACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。例えば、TCPウインドウの値が5であれば、受信したACKセグメントが要求するデータセグメントから、5個のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。
【0047】
一方、受信部36が前回送信されたデータセグメントに対応するACKを受信しなかった場合、TCP制御部32は、ネットワーク3上でのセグメント(ACKセグメントまたはデータセグメント)の欠損があったとして、TCPウインドウの値を1に収縮し、前回送信したデータセグメントのうち、シーケンス番号の最小のデータセグメントである再送セグメントを、TCPウインドウとして設定するが、その再送セグメントは送信せずに、前回送信したデータセグメント(すなわち、前回のTCPウインドウ)の次のデータセグメントを飛躍セグメントとして送信部35に供給する。
【0048】
また、TCP制御部32は、受信部36を監視しており、受信部36が他のPCからネットワーク3を介して、データセグメントを受信した場合、受信したデータセグメントに対応するACKセグメントを送信部35に供給する。
【0049】
送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたデータセグメントまたはACKセグメントを、ネットワーク3を介して、他のPCに送信する。
【0050】
TCB記憶部33は、メモリなどにより構成され、TCP制御部32により書き込まれたTCPウインドウの値、再送タイマ動作時間、飛躍セグメントのシーケンス番号を格納するleap_seqno変数、および、飛躍セグメントがネットワーク3上にあるか否か(すなわち、送信されていて、まだ、飛躍セグメントに対応するACKセグメントを受信していない状態であるか否か)を判断するためのフラグであるleap_flg変数などのコネクション(データ転送)の状態を保持している。送信バッファ34は、32kbyteのバッファにより構成され、他のPCに送信するデータセグメントが一旦蓄積され、蓄積されたデータセグメントは、送信部35により送信されると消去される。これにより、データ制御部31は、送信バッファ34の空き領域に、新たにデータを書き込むことができる。
【0051】
受信部36は、他のPCから送信されたACKセグメントを、ネットワーク3を介して受信する。また、受信部36は、他のPCから送信されたデータセグメントを、ネットワーク3を介して受信し、受信したデータセグメントを順序どおりに並べ替えて、受信バッファ37に書き込む。受信バッファ37は、32kbyteのバッファにより構成され、受信部36より書き込まれたデータが一旦蓄積される。蓄積されたデータは、データ制御部31により読み込まれる。
【0052】
次に、図5の情報処理システムの動作について説明する。
【0053】
PC1−1のデータ制御部31は、記憶部19に記憶されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。TCP制御部32は、データ制御部31により書き込まれた送信バッファ34内のデータをTCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたデータセグメントを、ネットワーク3およびルータ2を介して、PC1−2に送信する。
【0054】
PC1−2の受信部36は、PC1−1から送信されたデータセグメントを、ネットワーク3およびルータ2を介して受信し、受信したデータセグメントを順序どおりに並べ替えて、受信バッファ37に書き込む。TCP制御部32は、受信部36を監視しており、受信部36がPC1−1からデータセグメントを受信した場合、受信したデータセグメントに対応するACKセグメントを送信部35に供給する。送信部35は、TCP制御部32の制御のもと、TCP制御部32より供給されたACKセグメントを、ネットワーク3およびルータ2を介して、PC1−1に送信する。
【0055】
PC1−1の受信部36は、PC1−2から送信されたACKセグメントを、ネットワーク3を介して受信する。TCP制御部32は、受信部36を監視しており、再送タイマにより計時動作を行い、他のPCからACKセグメントが所定の時間(再送タイマ動作時間)内に受信されたか否かを判断し、受信部36がACKセグメントを受信したと判断した場合、TCPウインドウの値を拡張し、受信したACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントを送信部35に供給する。
【0056】
以上のようにして、ネットワーク3上において、セグメントの欠損がない場合のPC1−1およびPC1−2間のデータ送受信処理が実行される。
【0057】
次に、図8および図9を参照して、本発明のLEAP方式と従来のReno方式におけるセグメントが欠損した場合のデータセグメントの再送処理を比較して説明する。図8および図9の例においては、送信側のPC1−1が、ネットワーク3を介して、受信側のPC1−2にデータを送信する例について説明する。なお、図8は、本発明のLEAP方式によるデータセグメントの再送処理を説明する図であり、図9は、従来のReno方式によるデータセグメントの再送処理を説明する図である。また、以下のデータセグメントの再送処理は、PC1−1およびPC1−2のTCP制御部32が制御する処理であるが、それぞれ、PC1−1およびPC1−2を主語として説明する。
【0058】
図8の例において、「wnd=4」、「wnd=1」および「wnd=2」は、送信側のPC1−1におけるTCPウインドウの値が「4」、「1」および「2」であることを示している。また、送信側PC1−1において、点線の四角は、TCPウインドウのデータセグメントを示しており、実線の四角は、実際に送信されるデータセグメントを示している。
【0059】
図中左側において、送信側のPC1−1は、TCPウインドウの値が「4」であるので、4つのデータセグメントD1乃至D4をTCPウインドウとして設定し、TCPウインドウ内のデータセグメントを、ネットワーク3を介して、受信側のPC1−2に送信する。このとき、データセグメントD4は、輻輳Eが生じているネットワーク3上で欠損する。したがって、受信側のPC1−2は、ネットワーク3を介して、データセグメントD1乃至D3だけを受信する。
【0060】
そこで、受信側のPC1−2は、データセグメントD1乃至D3を受信したことを通知するACKセグメントA1乃至A3を、ネットワーク3を介して、送信側のPC1−1に送信する。しかしながら、ネットワーク3上の輻輳Eにより、ACKセグメントA1乃至A3は、ネットワーク3上で欠損する。
【0061】
したがって、いまの場合、送信側のPC1−1は、データセグメントD1乃至D4に対応するACKセグメントを、1つも受信することができない。送信側のPC1−1は、データセグメントD1乃至D4を送信したとき、再送タイマを起動する。送信側のPC1−1は、再送タイマにより計時動作を行い、所定の時間(再送タイマ動作時間)が経過しても、データセグメントD1乃至D4に対応するACKセグメントを受信しない場合、再送タイマをタイムアウトし、TCPウインドウの値を1に収縮する。
【0062】
このとき、従来のReno方式であれば、図9に示されるように、送信側のPC1−1は、前回送信されたデータセグメントのうち、シーケンス番号の最小のデータセグメントであるデータセグメントD1を、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントD1を再送セグメントとして送信する。データセグメントD1は、再送タイマがタイムアウトした時点のTCPウインドウ内のデータセグメントD1乃至D4のうち、シーケンス番号が最小のデータセグメントである。しかしながら、データセグメントD1は、受信側のPC1−2により既に受信されているデータセグメントであるため、受信側のPC1−2により破棄されてしまう。その後、受信側のPC1−2は、データセグメントD1に対応するACKセグメントA1をネットワーク3を介して送信側のPC1−1に送信する。
【0063】
ACKセグメントは、シーケンス番号が割り振られたデータセグメントがどこまで届いたのかを確認し、届いていないシーケンス番号の最小のデータセグメントを要求する機能を有する。したがって、ACKセグメントA1は、受信側のPCにおいて受信されているデータセグメントD3の次のシーケンス番号のデータセグメントであるデータセグメントD4を要求する。ACKセグメントA1を受信した送信側のPC1−1は、再送タイマを停止し、TCPウインドウを1つ拡張させて、TCPウインドウの値を「2」とし、要求されたデータセグメントD4とその次のデータセグメントD5を、TCPウインドウとして設定し、TCPウインドウ内のデータセグメントD4およびD5を、ネットワーク3を介して受信側のPC1−2に送信する。
【0064】
一方、図8のLEAP方式においては、送信側のPC1−1は、TCPウインドウ内のデータセグメントD1(再送セグメント)ではなく、前回送信したデータセグメント(再送タイマがタイムアウトした時点のTCPウインドウ内のデータセグメント)D1乃至D4の次のデータセグメントD5を受信側のPC1−2に送信する。すなわち、いまの場合、TCPウインドウは、データセグメントD1が設定されており、データセグメントD5は、TCPウインドウ内にはないため、送信側のPC1−1は、データセグメントD5を飛躍セグメントとしてネットワーク3を介して、受信側のPC1−2に送信する。なお、このとき、送信側のPC1−1は、TCB記憶部33のLeap_seqno変数に、飛躍セグメントのシーケンス番号を格納し、飛躍セグメントを送信中であるということを示すために、TCB記憶部33のLeap_flg変数をオン状態に設定する。
【0065】
受信側のPC1−2は、ネットワーク3を介してデータセグメントD5を受信し、データセグメントD5に対応するACKセグメントA5を、ネットワーク3を介して送信側のPCに送信する。このACKセグメントA5は、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントであるデータセグメントD4を要求する。
【0066】
これに対応して、送信側のPC1−1は、ACKセグメントA5を受信すると、再送タイマを停止させる。そして、送信側のPC1−1は、TCB記憶部33のLeap_flg変数をオフ状態に設定し、TCPウインドウを1つ拡張させて、TCPウインドウの値を「2」とし、要求されたデータセグメントD4とその次のデータセグメントD5を、TCPウインドウとして設定する。しかしながら、データセグメントD4に続くデータセグメントD5は、飛躍セグメントとして、すでに受信側のPC1−2に送信され、受信されている。したがって、送信側のPC1−1は、TCB記憶部33のLeap_seqno変数のシーケンス番号に基づいて、TCPウインドウ内のセグメントであっても、飛躍セグメントであるデータセグメントD5は送信せず、TCPウインドウ内のデータセグメントD4と、飛躍セグメントの次のデータセグメントD6を、ネットワーク3を介して、受信側のPC1−2に送信する。
【0067】
以上により、送信側のPC1−1においては、重複したデータセグメントD1を送信することが抑制される。これにより、図8のLEAP方式のデータセグメント再送処理においては、図9の従来のReno方式のデータセグメント再送処理よりも1つ先のデータセグメントD6が送信されるので、効率的にデータの送受信処理が実行される。
【0068】
次に、図10乃至図12のフローチャートを参照して、ネットワーク3を介してPC1−2へデータを送信するPC1−1のデータ送信処理を説明する。
【0069】
データ制御部31は、ユーザの操作により、入力部16を介して入力される指示に基づいて、記憶部19に記録されているデータを一旦読み込み、読み込んだデータを送信バッファ34に書き込む。
【0070】
TCP制御部32は、ステップS1において、送信バッファ34を監視しており、送信バッファ34に送信する送信データセグメントがあるか否かを判断し、送信バッファ34に送信データセグメントがあると判断した場合、TCP制御部32は、送信バッファ34に書き込まれたデータを、TCPセグメントの大きさに区切り、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、ステップS2に進む。
【0071】
ステップS2において、TCP制御部32は、送信データセグメントがTCPウインドウ内にあるか否かを判断する。このとき、データセグメントの初めての送信の場合、または、前回のTCPウインドウとして設定したデータセグメントに対応するACKセグメントが受信された場合、送信データセグメントは、TCPウインドウとして設定されるため、送信データセグメントがTCPウインドウ内にあると判断される。一方、前回のTCPウインドウとして設定したデータセグメントが送信され、そのデータセグメントに対応するACKセグメントが受信されていない場合、また、TCPウインドウは、前回の送信されたデータセグメントに設定されているため、送信されるデータセグメントは、TCPウインドウ内にないと判断される。
【0072】
ステップS2において、送信データセグメントがTCPウインドウ内にはないと判断された場合、ステップS3に進み、TCP制御部32は、受信部36が、PC1−2から、前回送信されたデータセグメントに対応するACKセグメントを受信したか否かを判断し、前回送信されたデータセグメントに対応するACKセグメントを受信していないと判断した場合、ステップS4に進む。TCP制御部32は、前回のデータセグメントを送信してから再送タイマを起動させ、計時動作を行っている。ステップS4において、TCP制御部32は、再送タイマにより計時動作を行い、前回のデータセグメントを送信してから所定の時間が経過したか否かを判断する。ステップS4において、前回のデータセグメントを送信してから所定の時間が経過していないと判断された場合、処理は、ステップS3に戻り、それ以降の処理を繰り返す。
【0073】
ステップS3において、前回のデータセグメントに対応するACKセグメントを受信したと判断された場合、TCP制御部32は、再送タイマを停止し、ステップS5において、TCB記憶部33のleap_flgがオン状態であるか否かを判断する。TCP制御部32は、ステップS5において、TCB記憶部33のleap_flgがオン状態であると判断した場合、ステップS6に進み、TCB記憶部33のleap_flgをオフ状態に設定し、ステップS7に進む。ステップS5において、TCB記憶部33のleap_flgがオン状態ではないと判断された場合、TCP制御部32は、ステップS6をスキップし、ステップS7に進む。ステップS7において、TCP制御部32は、TCPウインドウの値を拡張し、ステップS3において受信されたACKセグメントが要求するデータセグメントから、TCPウインドウの値の数のデータセグメントを、TCPウインドウとして設定し、ステップS2に戻り、それ以降の処理を繰り返す。
【0074】
ステップS2において、送信データセグメントがTCPウインドウ内にあると判断された場合、処理は、図11のステップS8に進み、TCP制御部32は、TCB記憶部33のleap_seq変数の飛躍セグメントのシーケンス番号に基づいて、送信する送信データセグメントが飛躍セグメントであるか否かを判断する。ステップS8において、送信データセグメントが飛躍セグメントであると判断された場合(例えば、図8におけるデータセグメントD5)、送信データセグメントが飛躍セグメントとしてすでにPC1−2に送信されていることになるので、ステップS9において、TCP制御部32は、TCPウインドウ内の送信データセグメントは送信せず、TCPウインドウ内の他のデータセグメント(ある場合)と、送信データセグメントの次のデータセグメント(例えば、図8におけるデータセグメントD6)を、ネットワーク3を介して、PC1−2に送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0075】
ステップS8において、送信データセグメントが飛躍セグメントではないと判断された場合(例えば、図8のデータセグメントD4)、ステップS9において、TCP制御部32は、送信データセグメントを、ネットワーク3を介して、PC1−2に送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0076】
一方、TCP制御部32は、図10のステップS4において、前回のデータセグメントを送信してから所定の時間が経過したと判断した場合、再送タイマをタイムアウトし、図12のステップS11に進み、TCB記憶部33のleap_flgがオン状態であるか否かを判断する。ステップS11において、TCB記憶部33のleap_flgがオン状態であると判断された場合、TCP制御部32は、ステップS12に進み、TCB記憶部33のleap_seq変数の飛躍セグメントのシーケンス番号に基づいて、飛躍セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。ここで、TCB記憶部33のleap_flgがオン状態であるということは、すでに飛躍セグメントがPC1−2に送信されているが、送信された飛躍セグメントに対応するACKセグメントがPC1−2から受信されていないということである。したがって、ステップS12において、飛躍セグメントは、PC1−2に再送されていることになる。
【0077】
このようにして、PC1−1は、飛躍セグメントに対応するACKセグメントが受信されるまで飛躍セグメントをPC1−2に再送し続ける。なお、従来のTCPのReno方式においては、同一データセグメントを13回送信してもACKセグメントが受信されない場合、そのデータセグメントは、コネクションを諦めて破棄されるようになっている。LEAP方式の場合、飛躍セグメントの1回目の送信が、従来のデータセグメントの1回目の再送(2回目の送信)である。そこで、従来のTCPとの整合性を保つため、飛躍セグメントの送信が12回目になってもACKセグメントが受信されない場合、飛躍セグメントは、従来のTCPと同様にコネクションを諦めて破棄される。また、上述したように、飛躍セグメントに対応するACKが欠損する場合もあるので、飛躍セグメントを複数保持するようにしてもよい。
【0078】
なお、実際には、PC1−1は、受信したACKセグメントが飛躍セグメントに対応するものであるか否かは判断できないので、以前に送信したデータセグメントに対応するACKセグメントが遅延して到着し、leap_flgをオフ状態にしてしまう場合もある。しかしながら、再送タイマのタイムアウトの値(再送タイマ動作時間)は、ネットワークの遅延を基準としてその数倍の時間が設定されるため、このようなACKセグメントの遅延が起こり、同時に飛躍セグメントが欠損している状況はまれであるといえる。
【0079】
ステップS11において、TCB記憶部33のleap_flgがオフ状態である(ネットワーク3上に飛躍セグメントは存在しない)と判断された場合、TCP制御部32は、ステップS13に進み、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントである、再送セグメント(例えば、図8のデータセグメントD1)に対する重複ACKを受信したか否かを判断し、再送セグメントに対する重複ACKを受信したと判断した場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0080】
このステップS13の処理について、図13を参照して説明する。図13の例の場合、送信側PC1−1は、TCPウインドウの値が「4」であるので、4つのデータセグメントD1乃至D4をTCPウインドウとして設定し、TCPウインドウ内のデータセグメントを、ネットワーク3を介して、受信側のPC1−2に送信する。しかしながら、データセグメントD1は、ネットワーク3上で欠損してしまう。この場合、受信側PC1−2は、データセグメントD2乃至D4を受信し、各データセグメントに対応するACKセグメントA2乃至A4を、ネットワーク3を介して、送信側のPC1−1に送信する。ACKセグメントA2乃至A4は、受信側のPC1−2において受信されていない最小のシーケンス番号のデータセグメントであるデータセグメントD1を要求する。
【0081】
この場合、ACKセグメントA2と同一のデータセグメントD1(再送セグメント)を要求しているACKセグメントA3およびA4は、再送セグメントに対する重複ACKとされる。このように、送信側のPC1−1において、重複ACKが受信された場合、送信側のPC1−2に、再送セグメントであるデータセグメントD1が受信されていないことが可能性が高いといえる(なお、データセグメントD1だけが遅延してデータセグメントD2、D3またはD4の後に到着することもあるが、非常に低い確率である)。したがって、再送セグメントに対する重複ACKが受信されている場合は、再送セグメントであるデータセグメントD1が送信側のPC1−2に受信され、それに対応するACKセグメントがネットワーク3上で損失された可能性がないに等しいので、この場合には、飛躍セグメントではなく、TCP制御部32は、重複ACKが要求する再送セグメントを送信するように制御する。
【0082】
ステップS13において、再送セグメントに対する重複ACKを受信していないと判断された場合、TCP制御部32は、ステップS14に進み、TCPのヘッダのフラグ領域に基づいて、再送セグメントに特殊ビットが設定されているか否かを判断する。ステップS14において、再送セグメントに特殊ビットが設定されていると判断された場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0083】
このステップS14の処理について具体的に説明すると、TCPのデータセグメントには、順序を入れ換えて送信しても意味があるデータセグメントと、順序を入れ換えて送信してしまうと、そのデータセグメントが持つ意味がなくなってしまうデータセグメントが存在する。後者のデータセグメントとしては、例えば、コネクション(データ転送)開始時に送信されるSYNセグメントがある。SYNセグメントがネットワーク3上で欠損し、PC1−2に受信されていない場合に、飛躍セグメントとして新しいデータセグメントが受信側のPC1−2に送信されたとしても、受信側のPC1−2は受け取ることができない。したがって、このような場合には、TCP制御部32は、飛躍セグメントではなく、再送セグメント(SYNセグメント)を送信するように制御する。
【0084】
このようなセグメントは、SYNセグメントの他にコネクション終了時に送信されるFINセグメント、コネクション強制終了時に送信されるRSTセグメント、および、一連のセグメントをデータ制御部31に渡すためのトリガとなるPUSHセグメントがある。
【0085】
ステップS14において、再送セグメントに特殊ビットが設定されていないと判断された場合、TCP制御部32は、ステップS15に進み、直前に受信したACKセグメントに基づいて、受信側のPC1−2の受信バッファ37が送信データセグメントを受信可能であるか否かを判断する。ステップS15において、受信側のPC1−2の受信バッファ37が、送信データセグメントを受信可能ではないと判断された場合、ステップS16に進み、ネットワーク3を介してPC1−2に、再送セグメントを送信し、図10のステップS1に戻り、それ以降の処理を繰り返す。
【0086】
このステップS14の処理について具体的に説明する。TCPウインドウの値は、送信側PC1−1のTCP制御部32が保持する輻輳ウインドウの値と、受信側PC1−2からACKセグメントにより告知される広告ウインドウの値の小さい方が設定される。広告ウインドウの値は、受信側のPC1−2の受信バッファ37の空き容量であるため、広告ウインドウの値を越えたデータセグメントはバッファされずに破棄される。極度の輻輳時には、データセグメントの欠損により輻輳ウインドウが収縮しているため、TCPウインドウは、受信側からの広告ウインドウではなく輻輳ウインドウで制限されることが多い。しかしながら、輻輳時以外にも、ACKセグメントの欠損は発生することがあるため、飛躍セグメントが広告ウインドウ(受信バッファ37)の大きさを越えている場合、TCP制御部32は、飛躍セグメントではなく、再送セグメントを送信するように制御する。
【0087】
ステップS15において、受信側のPC1−2の受信バッファ37が、送信データセグメントを受信可能であると判断された場合、TCP制御部32は、ステップS17において、TCB記憶部33のleap_flgをオン状態に設定し、ステップS18に進む。TCP制御部32は、ステップS18において、送信データセグメントのシーケンス番号をleap_seq変数に保持し、送信データセグメントを飛躍セグメントとし、ステップS19に進む。TCP制御部32は、ステップS19において、送信部35を制御し、飛躍セグメントを、ネットワーク3を介して、受信側のPC1−2に送信し、図10のステップS1に戻り、以降の処理を繰り返す。
【0088】
図10のステップS1において、TCP制御部32は、送信データセグメントが送信バッファ34にないと判断した場合、データ送信処理を終了させる。
【0089】
次に、図14および図15を参照して、図5の情報処理システムにおいて実行されたデータ転送のシミュレーション結果を説明する。このシミュレーションは、3台のPC1−1乃至1−3が1台のルータ2を経由して接続しているネットワーク3のネットワーク環境において、100個のデータを送出するFTPのコネクション(データ転送)を指数分布の間隔に従ってランダムに発生させ、1秒間に発生するコネクションの数の平均値を、0.25コネクション刻みで、1コネクションから3.5コネクションまで変更させて、3000秒間実行されたものである。なお、このシミュレーションにおいては、図8を参照して上述したLEAP方式および図9を参照して上述した従来のTCPの方式としてReno方式が用いられている。
【0090】
図14は、1コネクションにおける平均送受信パケット数を示すグラフである。図14の例においては、横軸は、1秒間に発生するコネクションの数の平均値(トラフィック負荷度)を示しており、トラフィックの負荷度は、右に行くに従って高くなる。縦軸は、LEAP方式、および従来のReno方式を用いた場合の送信パケット数(s)と受信パケット数(r)を示しており、送受信パケット数は、上に行くに従って多くなる。
【0091】
図14の例の場合、LEAP方式においては、トラフィック負荷度が1コネクション数/秒のとき、送信パケット数は、100.013パケットであり、受信パケット数は、100.001パケットであり、トラフィック負荷度が1.25コネクション数/秒のとき、送信パケット数は、100.07パケットであり、受信パケット数は、100.017パケットである。トラフィック負荷度が1.5コネクション数/秒のとき、送信パケット数は、100.23パケットであり、受信パケット数は、100.043パケットであり、トラフィック負荷度が1.75コネクション数/秒のとき、送信パケット数は、100.665パケットであり、受信パケット数は、100.126パケットである。トラフィック負荷度が2コネクション数/秒のとき、送信パケット数は、100.924パケットであり、受信パケット数は、100.182パケットであり、トラフィック負荷度が2.25コネクション数/秒のとき、送信パケット数は、102.003パケットであり、受信パケット数は、100.506パケットである。
【0092】
また、トラフィック負荷度が2.5コネクション数/秒のとき、送信パケット数は、103.66パケットであり、受信パケット数は、100.899パケットであり、トラフィック負荷度が2.75コネクション数/秒のとき、送信パケット数は、105.096パケットであり、受信パケット数は、101.335パケットである。また、トラフィック負荷度が3コネクション数/秒のとき、送信パケット数は、106.989パケットであり、受信パケット数は、101.646パケットであり、トラフィック負荷度が3.25コネクション数/秒のとき、送信パケット数は、110.177パケットであり、受信パケット数は、101.783パケットであり、トラフィック負荷度が3.5コネクション数/秒のとき、送信パケット数は、113.99パケットであり、受信パケット数は、101.59パケットである。
【0093】
一方、従来のReno方式においては、トラフィック負荷度が1コネクション数/秒のとき、送信パケット数は、100.001パケットであり、受信パケット数は、100.001パケットであり、トラフィック負荷度が1.25コネクション数/秒のとき、送信パケット数は、100.073パケットであり、受信パケット数は、100.022パケットである。トラフィック負荷度が1.5コネクション数/秒のとき、送信パケット数は、100.213パケットであり、受信パケット数は、100.045パケットであり、トラフィック負荷度が1.75コネクション数/秒のとき、送信パケット数は、100.689パケットであり、受信パケット数は、100.168パケットである。トラフィック負荷度が2コネクション数/秒のとき、送信パケット数は、101.485パケットであり、受信パケット数は、100.448パケットであり、トラフィック負荷度が2.25コネクション数/秒のとき、送信パケット数は、102.721パケットであり、受信パケット数は、100.814パケットである。
【0094】
また、トラフィック負荷度が2.5コネクション数/秒のとき、送信パケット数は、106.696パケットであり、受信パケット数は、103.147パケットであり、トラフィック負荷度が2.75コネクション数/秒のとき、送信パケット数は、128.853パケットであり、受信パケット数は、109.061パケットである。また、トラフィック負荷度が3コネクション数/秒のとき、送信パケット数は、185.727パケットであり、受信パケット数は、120.394パケットであり、トラフィック負荷度が3.25コネクション数/秒のとき、送信パケット数は、194.298パケットであり、受信パケット数は、123.37パケットであり、トラフィック負荷度が3.5コネクション数/秒のとき、送信パケット数は、209.268パケットであり、受信パケット数は、130.056パケットである。
【0095】
図14のグラフにおいて、例えば、トラフィック負荷度が3.25コネクション数/秒のとき、Reno方式の送信パケット数は、194.298パケットであり、LEAP方式の送信パケット数は、110.177パケットである。すなわち、LEAP方式を用いることにより、矢印Q1に示されるように、およそ80パケットの無駄な送信パケットが減少する。また、例えば、トラフィック負荷度が3.5コネクション数/秒のとき、Reno方式の受信パケット数は、130.056パケットであり、LEAP方式の受信パケット数は、101.59パケットである。すなわち、LEAP方式を用いることにより、矢印Q2に示されるように、およそ30パケットの無駄な受信パケットが減少する。
【0096】
さらに、LEAP方式においては、受信パケット数は、ほぼ100パケットに近づいている。これにより、図14においては、1コネクションが転送するセグメント数は、100パケットであるため、LEAP方式においては、無駄のないデータ転送が実現されていることがわかる。なお、100パケットちょうどにならないのは、SYNセグメントまたはFINセグメントなどの特殊セグメントが再送される場合、もしくは、飛躍セグメントのACKセグメントが欠損してしまい、到着したはずの飛躍セグメントが再送される場合があるためである。
【0097】
また、受信パケット数が減少するということは、すなわち、送信パケット数が減少することにも関係する。したがって、コネクション全体で送信するパケット数が減少するため、ネットワーク3全体でのトラフィックの負荷度が抑制される。このため、パケット欠損率も抑制され、その結果、送信パケット数は、さらに減少する。
【0098】
図15は、シミュミレーション時間内に終了したデータ転送の数を示すグラフである。図15の例においては、横軸は、1秒間に発生するコネクションの数の平均値(すなわち、トラフィック負荷度)を示しており、トラフィックの負荷は、右に行くに従って高くなる。縦軸は、LEAP方式および従来のReno方式を用いてデータ転送が終了したコネクション数(終了コネクション数)を示しており、終了コネクション数は、上に行くに従って多くなる。
【0099】
図15のグラフの場合、LEAP方式においては、トラフィック負荷度が1コネクション数/秒のとき、2997コネクションが終了し、トラフィック負荷度が1.25コネクション数/秒のとき、3694コネクションが終了し、トラフィック負荷度が1.5コネクション数/秒のとき、4425コネクションが終了している。また、トラフィック負荷度が1.75コネクション数/秒のとき、5122コネクションが終了し、トラフィック負荷度が2コネクション数/秒のとき、5912コネクションが終了し、トラフィック負荷度が2.25コネクション数/秒のとき、6725コネクションが終了している。トラフィック負荷度が2.5コネクション数/秒のとき、7387コネクションが終了し、トラフィック負荷度が2.75コネクション数/秒のとき、8070コネクションが終了し、トラフィック負荷度が3コネクション数/秒のとき、8342コネクションが終了している。また、トラフィック負荷度が3.25コネクション数/秒のとき、8370コネクションが終了し、トラフィック負荷度が3.5コネクション数/秒のとき、7772コネクションが終了している。
【0100】
一方、従来のReno方式においては、トラフィック負荷度が1コネクション数/秒のとき、2932コネクションが終了し、トラフィック負荷度が1.25コネクション数/秒のとき、3679コネクションが終了し、トラフィック負荷度が1.5コネクション数/秒のとき、4453コネクションが終了している。また、トラフィック負荷度が1.75コネクション数/秒のとき、5214コネクションが終了し、トラフィック負荷度が2コネクション数/秒のとき、5848コネクションが終了し、トラフィック負荷度が2.25コネクション数/秒のとき、6667コネクションが終了している。トラフィック負荷度が2.5コネクション数/秒のとき、7450コネクションが終了し、トラフィック負荷度が2.75コネクション数/秒のとき、7928コネクションが終了し、トラフィック負荷度が3コネクション数/秒のとき、6701コネクションが終了している。また、トラフィック負荷度が3.25コネクション数/秒のとき、6080コネクションが終了し、トラフィック負荷度が3.5コネクション数/秒のとき、4508コネクションが終了している。
【0101】
図15のグラフの横軸に注目すると、従来のReno方式の場合、2.5コネクション数/秒までは直線的に終了コネクション数が直線的に増加している。しかしながら、トラフィック負荷度が2.75コネクション数/秒のとき、7928コネクションであった終了コネクション数が、トラフィック負荷度が3コネクション数/秒のとき、6701コネクションに減少していることに示されるように、トラフィック負荷度が2.75コネクション数/秒を越えたあたりから、終了コネクション数は、急激に減少している。
【0102】
一方、LEAP方式を用いた場合には、トラフィック負荷度が3.25コネクション数/秒のとき、8370コネクションであった終了コネクション数が、トラフィック負荷度が3.5コネクション数/秒のとき、7772コネクションに減少していることに示されるように、トラフィック負荷度が3.25コネクション数/秒を越えたあたりから、終了コネクション数は、徐々に減少している。
【0103】
また、図中の矢印に示されるように、トラフィック負荷度が3.5コネクション数/秒のあたりにおいては、Reno方式では、4508コネクションしか終了していないのに対して、LEAP方式では、Reno方式の倍近くの7772コネクションが終了している。以上のように、LEAP方式を用いることにより、図5のネットワーク3全体の資源利用効率も大幅に上昇させることができる。
【0104】
以上のように、LEAP方式を用いることにより、輻輳時のネットワーク状態において、重複したセグメントの送信を回避し、無駄のない、効率的なデータ転送をすることができる。
【0105】
また、LEAP方式においては、送信側の機能を追加しただけであり、実装が容易にできる。さらに、従来のTCPのReno方式などとも整合性をとるようにしたので、輻輳していない通常のネットワーク状態におけるTCPの性能を劣化させることもない。
【0106】
なお、上記説明においては、TCPプロトコルを用いてデータ送信処理を実行したが、確認応答のACKを用いるものであれば、他のプロトコルを用いるようにしてもよい。
【0107】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
【0108】
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図6に示されるように、磁気ディスク21(フレキシブルディスクを含む)、光ディスク22(CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク23(MD(Mini−Disc)(商標)を含む)、もしくは半導体メモリ24などよりなるパッケージメディア、または、プログラムが一時的もしくは永続的に格納されるROM12や、記憶部18などにより構成される。
【0109】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【0110】
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【0111】
【発明の効果】
以上の如く、本発明によれば、通常時のデータ転送の性能を劣化させることなく、重度の輻輳時に、効率的にデータを送信することができる。
【図面の簡単な説明】
【図1】従来のデータ再送処理について説明する図である。
【図2】従来のデータ再送処理の他の例について説明する図である。
【図3】従来のTCPの方式において、シミュミレーション時間内に終了したコネクションの数を示すグラフである。
【図4】従来のTCPの方式において、1コネクションにおける平均送受信パケット数を示すグラフである。
【図5】本発明を適用した情報処理システムの構成例を示す図である。
【図6】図5のパーソナルコンピュータの構成例を示すブロック図である。
【図7】図5のパーソナルコンピュータの機能構成例を示すブロック図である。
【図8】図5の情報処理システムにおけるLEAP方式のデータ再送処理について説明する図である。
【図9】図8のLEAP方式と比較するための従来のReno方式のデータ再送処理について説明する図である。
【図10】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図11】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図12】図5のパーソナルコンピュータのデータ送信処理を説明するフローチャートである。
【図13】再送セグメントの重複ACKを説明する図である。
【図14】図8のLEAP方式と従来のReno方式の1コネクションにおける平均送受信パケット数を示すグラフである。
【図15】図8のLEAP方式と従来のReno方式のシミュミレーション時間内に終了したコネクションの数を示すグラフである。
【符号の説明】
1−1乃至1−3 パーソナルコンピュータ,2 ルータ,3 ネットワーク,11 CPU,31 データ制御部,32 TCP制御部,33 TCB記憶部,34 送信バッファ,35 送信部,36 受信部,37 受信バッファ
Claims (9)
- ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信手段と、
前記送信手段により前記データが送信されてから所定の時間内に、前記他の情報処理装置から前記データに対応するACK(acknowledgement)を受信したか否かを判断する受信判断手段と
を備え、
前記受信判断手段により前記他の情報処理装置から前記データに対応するACKが受信されていないと判断された場合、前記送信手段は、前回送信された前記データに続く次のデータを送信する
ことを特徴とする情報処理装置。 - 前記所定のプロトコルは、TCP(Transmission Control Protocol)である
ことを特徴とする請求項1に記載の情報処理装置。 - 前記受信判断手段により前記データに対応するACKが受信されていないと判断された場合に、前記送信手段により送信された前記次のデータのシーケンス番号を記憶する記憶手段と、
前記受信判断手段により前記データに対応するACKが受信されていないと判断され、前記送信手段により前記次のデータが送信された場合に、そのことを示すフラグを保持する保持手段と
をさらに備えることを特徴とする請求項1に記載の情報処理装置。 - 前記保持手段により前記フラグが保持されているか否かを判断するフラグ判断手段をさらに備え、
前記受信判断手段により前記データに対応するACKが受信されていないと判断され、かつ、前記フラグ判断手段により前記フラグが保持されていると判断された場合、前記送信手段は、前記受信判断手段により前記ACKが受信されていないと判断された前記データを再度送信する
ことを特徴とする請求項3に記載の情報処理装置。 - 前記受信判断手段により前記データに対応するACKが受信されたと判断され、かつ、前記フラグ判断手段により前記フラグが保持されていると判断された場合、前記保持手段は、前記フラグの保持を解除する
ことを特徴とする請求項4に記載の情報処理装置。 - 前記受信判断手段により前記データに対応するACKが受信されたと判断された場合、次に送信する送信データのシーケンス番号が、前記記憶手段に記憶されている前記シーケンス番号と同じであるか否かを判断するデータ判断手段をさらに備え、
前記データ判断手段により前記送信データのシーケンス番号が、前記記憶手段に記憶されている前記シーケンス番号と同じであると判断された場合、前記送信手段は、前記送信データの送信をスキップし、前記送信データの次のデータを送信する
ことを特徴とする請求項3に記載の情報処理装置。 - ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、
前記送信ステップの処理により前記データが送信されてから所定の時間内に、前記他の情報処理装置から前記データに対応するACKを受信したか否かを判断する受信判断ステップと
を含み、
前記受信判断ステップの処理により前記他の情報処理装置から前記データに対応するACKが受信されていないと判断された場合、前記送信ステップの処理は、前回送信された前記データに続く次のデータを送信する
ことを特徴とする情報処理方法。 - ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、
前記送信ステップの処理により前記データが送信されてから所定の時間内に、前記他の情報処理装置から前記データに対応するACKを受信したか否かを判断する受信判断ステップと
を含み、
前記受信判断ステップの処理により前記他の情報処理装置から前記データに対応するACKが受信されていないと判断された場合、前記送信ステップの処理は、前回送信された前記データに続く次のデータを送信する
ことを特徴とするコンピュータが読み取り可能なプログラムが記録されている記録媒体。 - ネットワークを介して、所定のプロトコルでデータを他の情報処理装置に送信する送信ステップと、
前記送信ステップの処理により前記データが送信されてから所定の時間内に、前記他の情報処理装置から前記データに対応するACKを受信したか否かを判断する受信判断ステップと
を含む処理をコンピュータに実行させ、
前記受信判断ステップの処理により前記他の情報処理装置から前記データに対応するACKが受信されていないと判断された場合、前記送信ステップの処理は、前回送信された前記データに続く次のデータを送信する
ことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003060043A JP2004274237A (ja) | 2003-03-06 | 2003-03-06 | 情報処理装置および方法、記録媒体、並びにプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003060043A JP2004274237A (ja) | 2003-03-06 | 2003-03-06 | 情報処理装置および方法、記録媒体、並びにプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004274237A true JP2004274237A (ja) | 2004-09-30 |
Family
ID=33122707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003060043A Withdrawn JP2004274237A (ja) | 2003-03-06 | 2003-03-06 | 情報処理装置および方法、記録媒体、並びにプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004274237A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009194565A (ja) * | 2008-02-13 | 2009-08-27 | Fujitsu Ltd | データ送信装置、コンピュータプログラム及びデータ送信方法 |
JP2013015643A (ja) * | 2011-07-01 | 2013-01-24 | Yamaha Corp | 演奏データ送信装置及び演奏データ受信装置 |
-
2003
- 2003-03-06 JP JP2003060043A patent/JP2004274237A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009194565A (ja) * | 2008-02-13 | 2009-08-27 | Fujitsu Ltd | データ送信装置、コンピュータプログラム及びデータ送信方法 |
JP2013015643A (ja) * | 2011-07-01 | 2013-01-24 | Yamaha Corp | 演奏データ送信装置及び演奏データ受信装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7720063B2 (en) | Method apparatus and system for accelerated communication | |
JP4504977B2 (ja) | オフロードユニットを使用したtcp接続のためのデータ処理 | |
US8259728B2 (en) | Method and system for a fast drop recovery for a TCP connection | |
JP4283589B2 (ja) | 通信装置、通信制御方法及びプログラム | |
US8174975B2 (en) | Network adapter with TCP support | |
JP4511174B2 (ja) | Tcp/ipを使用した高速度データ送信システムおよび方法 | |
JP4886685B2 (ja) | ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法 | |
JP4791322B2 (ja) | 帯域幅保証を伴う適応性帯域幅制御のための方法及び装置 | |
JP5020076B2 (ja) | 低頻度ackのシステムに適した高性能tcp | |
WO2013012604A1 (en) | System and method for reliable virtual bi-directional data stream communications with single socket point-to-multipoint capability | |
EP1701506B1 (en) | Method and system for transmission control protocol (TCP) traffic smoothing | |
JP4128198B2 (ja) | 帯域制御装置 | |
EP1889421B1 (en) | Multi-stream acknowledgement scheduling | |
US20120054362A1 (en) | Mechanism for autotuning mass data transfer from a sender to a receiver over parallel connections | |
JP2006236391A (ja) | パケットベースの通信ネットワークにおけるメッセージ受信の肯定応答システム及び方法 | |
US20070291782A1 (en) | Acknowledgement filtering | |
WO2017097201A1 (zh) | 一种数据传输方法、发送装置及接收装置 | |
JP2007013449A (ja) | シェーパー制御方法、データ通信システム、ネットワークインタフェース装置及びネットワーク中継装置 | |
US20050038899A1 (en) | Method, system and article for client application control of network transmission loss tolerance | |
JP2007110680A (ja) | 通信装置、通信プログラム、通信制御方法および記録媒体 | |
JP2004274237A (ja) | 情報処理装置および方法、記録媒体、並びにプログラム | |
WO2006058255A2 (en) | Methods and apparatus for optimizing a tcp session for a wireless network | |
EP1744495A1 (en) | Round trip time estimation | |
JP7427464B2 (ja) | 通信装置、通信方法およびプログラム | |
WO2006058211A2 (en) | Methods and apparatus for optimizing a tcp session for a wireless network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060509 |