(57)【特許請求の範囲】
【請求項１】
送信したデータパケットに対する応答パケットが受信装置から返送されると、送信装置による次のデータパケットの送信が可能となるデータ転送方法において、
データパケットを分割単位に応じて複数のサブデータパケットに分割するステップと、
複数の前記サブデータパケットそれぞれに分割後の順序を示す識別子を付加するステップと、
複数の前記サブデータパケットを送信するステップと、
前記受信側から、複数の前記サブデータパケットそれぞれについて、正常に受信したかどうかを示す情報を付加した応答パケットを受信するステップと、
正常に受信できなかったことを示す情報が付加された応答パケットに対応する前記サブデータパケットのみ再送するステップと、を備え、
前記分割単位は、送信先毎に設定されており、前記送信装置は前記データパケットのデータ送信毎に通信環境の状態を示すパラメタに応じて決定することを特徴とするデータ転送方法。
【請求項２】
請求項１記載のデータ転送方法であって、
複数の前記サブデータパケット全てに対して正常に受信できたことを示す情報が付加された前記応答パケットを受信した場合、前記応答パケットを１つの応答パケットに統合し、統合された応答パケットを前記データパケットの転送要求元に返送するステップを備えることを特徴とする、データ転送方法。
【請求項３】
請求項１記載のデータ転送方法であって、
前記通信環境状態を示すパラメータは、前記データパケットの転送に要した転送時間であることを特徴とする、データ転送方法。
【請求項４】
請求項１記載のデータ転送方法であって、
前記通信環境状態を示すパラメータは、通信負荷であることを特徴とする、データ転送方法。
【請求項５】
請求項１記載のデータ転送方法であって、
前記通信環境状態を示すパラメータは、前記データパケットの転送に要した転送時間及び通信負荷であることを特徴とする、データ転送方法。
【請求項６】
請求項５記載のデータ転送方法であって、
前記転送時間が所定値よりも小さく、前記通信負荷が所定値よりも大きい場合には、前記分割単位を大きくし、前記転送時間が所定値よりも大きく、前記通信負荷が所定値よりも小さい場合には、前記分割単位を小さくすることを特徴とする、データ転送方法。
【請求項７】
請求項１記載のデータ転送方法であって、
前記通信環境状態を示すパラメータは、前記サブデータパケットの再送回数であることを特徴とする、データ転送方法。
【請求項８】
請求項７記載のデータ転送方法であって、
前記再送回数が所定値を超えた場合には前記分割単位を小さくすることを特徴とする、データ転送方法。
【請求項９】
請求項１記載のデータ転送方法であって、
前記データパケットをメモリに書き込むステップと、
前記データパケットの転送が完了する前に転送要求元に終了通知を送信し、転送が失敗した場合、前記メモリに書き込まれた前記データパケットを使用して再送するステップを備えることを特徴とする、データ転送方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ネットワークを介した高速なデータ転送方法に関し、特に遠距離における大規模データの転送に好適なネットワークデータ転送方法に関する。
【０００２】
【従来の技術】
複数の計算機が物理的に離れた場所で相互にデータ転送を可能にすることで、データの共有といったメリットを得ることができる。計算機間だけではなく、ファイルサーバでは複数の計算機が一つのあるいは複数のファイルを共有することが可能である。これらは全て、計算機間または計算機とファイルサーバ間でデータ転送が可能なことにより達成できる機能である。
【０００３】
データ転送は、一般的にネットワークを介して行なわれる。ネットワークは通信制御装置に接続されている。通常、その通信制御装置は一枚の基板に構成されている。通信制御装置はホストコンピュータからのデータ送信要求またはデータ受信要求を受け付け、パケットと呼ばれる単位で通信相手とデータ転送を相互に行なう機能を持っている。パケット内には通信先等の情報が格納された制御情報やユーザデータが格納されており、このパケットが通信の単位を構成する。通信制御装置はホストコンピュータ内に内蔵され、ホストコンピュータ内の内部バスに直結される形態で使用される。ホストコンピュータでは、オペレーティング・システムと呼ばれるソフトウェアが稼働しており、オペレーティング・システム内の通信制御ソフトウェアにより通信制御装置がコントロールされる。
【０００４】
通信制御ソフトウェアは機能別に大きく２つの階層に分けることができる。一つの階層はプロトコル処理プログラムであり、ユーザプログラムからデータ通信要求を受け付け、送信時にはネットワーク固有の通信プロトコルに従ってユーザデータをパケット化し、受信時には転送されたパケットからユーザデータを取りだす処理を行なう。第二の階層であるデバイス制御プログラムは、通信制御装置に対してパケット転送処理を要求するプログラムであり、主に通信制御装置のハードウェアを制御する処理を行なう。データを送信する場合、デバイス制御プログラムは以下のような命令列を実行する。
【０００５】
(1) get_register(STATUS)
(2) set_register(buf_addr)
(3) set_register(pkt_length)
(4) set_register(IN,DMA_GO)
(1)は通信制御装置の状態を読み取り正常であることを確認する。(2)はホストコンピュータ上のデータ位置を通信制御装置に転送する。(3)は送信するパケットの長さを通信制御装置に転送する。(4)では通信制御装置に対してホストコンピュータ上のデータを転送するハードウェアを起動する。以上の処理により、通信制御装置はパケット内に格納されている制御情報を解析し通信相手に対してデータを転送する。この処理の後、プロトコル処理プログラムは送信相手から正常にデータが転送されたかどうかacknowledgement(以下ACKと呼ぶ)が転送されるまで待つ。(1)から(4)の処理は通信制御装置内の制御レジスタに対して情報を読み書きすることで処理が実行される。同様にデータ受信の場合は以下の命令列を実行する。
【０００６】
(1) get_register(STATUS)
(2) set_register(buf_addr)
(3) set_register(pkt_length)
(4) set_register(OUT,DMA_GO)
(1)は通信制御装置の状態を読み取り正常であることを確認する。(2)はホストコンピュータ上のデータ位置を通信制御装置に転送する。(3)は送信するパケットの長さを通信制御装置に転送する。(4)では通信制御装置に対してホストコンピュータ上にデータを転送するハードウェアを起動する。この処理の後、プロトコル処理プログラムは送信相手に対して正常にデータが転送された通知のためACKを生成し転送する。以上の処理により、通信制御装置はパケット内に格納されている制御情報を解析し通信相手に対してデータを転送する。
【０００７】
この通信において特徴的な部分は、パケットの転送毎にデータが正常に転送されたかどうかACKを送受信することである。一般的なネットワークでは1Kバイトから4Kバイト程度の大きさに設定されている。パケット長を越えるデータを転送する場合には、複数のパケットに分割して転送する必要があり複数の一つのユーザデータに対し複数のACKを送受信することになる。この時、あるパケットを送信した場合、そのパケットに対するACKが返送されるまで後続パケットを送信することはできない。これは、エラー処理に依存するためである。データ通信ではパケット送信が正常に行なわれなかった場合、再度同一パケットを送信しなければならない。そのために、送信側のメモリにデータを残しておく必要がある。このデータをいつの時点まで残しておくかをACKにより判断している。つまり、送信相手から正常に受信されたことを示すACKが返送されれば、送信側に残されているパケットを破棄することができる。
【０００８】
しかし、上記データ転送方法ではデータの転送に時間を要することになる。これは、前パケットのACKが返送されるまで次のパケットが転送できないためである。これを改善する方法として、"UNIX 4.3BSDの設計と実装", 385頁〜393頁、丸善株式会社、1991年発行（以下、参考文献と呼ぶ）に複数パケットを連続して転送する方法が述べられている。参考文献は、プロトコル処理プログラムにACKの送受信の単位としてパケットサイズのn倍と規定し、その範囲内では連続してパケットを送受信することができる。例えば、パケットサイズが１ＫＢでACKの単位が１０ＫＢとする。ユーザデータとして２０ＫＢを転送する場合を想定する。データ送信側のプロトコル処理プログラムはユーザから、まずデータ１０ＫＢを受け取る。プロトコル処理プログラムは１０ＫＢを１ＫＢづつのパケットに分ける。各１ＫＢは送信先に連続して１０パケット転送する。送信側は１０パケットを送信し終えると、受信側からACKが返送されるのを待つ。受信側では、連続して転送された１ＫＢのパケットを結合し、最後の１ＫＢのパケットが到達すると、送信側に１つのACKを返送する。そのACKを受けた送信側では、全てが正常に転送されたかどうかを確認し、正常であれば次の１０ＫＢに対して同様の処理を行なう。もし、１０パケットが正常に転送できなかった場合、再度１０パケットを送信する。この処理により、１０パケット以内であれば連続してパケットが転送可能になるため、前述の転送方法に比べ転送性能を向上させることができる。
【０００９】
【発明が解決しようとする課題】
従来技術では単一データを転送する場合、データをパケットに分割し、パケット毎にACKを返送する。ACKが返送されなければ、次のパケットを送信することができない。このACKは、データを転送する距離に大きく依存する。遠距離になればなるほどACKが返送される時間は長くなり、それに伴いパケットを連続して転送できなくなる。パケットを送信してからACKを待ち、その後後続のパケットを送信可能になるためである。転送距離が長くなれば、ACK待ちのためにネットワーク上にデータが流れる割合が極めて小さくなり、ネットワークを有効に使用することができなくなる。光ケーブル等の高速な転送メディアでは、この問題はさらに大きくなる。高速なメディアを使用してデータを転送しているにもかかわらずACKを待つ時間が大きくなり、光ケーブルの効果が小さくなる。
【００１０】
参考文献では、この問題を解決する一つの方法が述べられている。この方法は、ACKの単位を大きくすることでできるだけ高速にデータを転送する方法である。具体的には、ACKの単位を大きくし、ACKの単位より小さい単位では連続したデータ転送を可能にするものである。ACKの単位を大きくすることで、前述の方法に比べ高速性を得ることができる。ACK単位を大きくすればそれだけ効率的にデータを転送することが可能となる。しかし、これはデータが正常に転送される場合に限られる。遠距離における通信では通信相手に正常にデータが転送される確率が低くなる。ケーブルへのノイズや、ネットワーク中継用計算機でのデータ損失等が主な要因である。ネットワーク中継用計算機では、他のネットワークが複数接続されている場合がほとんどである。この場合、中継用計算機内のメモリ量の問題で受けたデータを損失してしまうことがある。遠距離になるほど中継計算機の数も多くなり、より損失の確率が高くなる。参考文献の方式では、ACK単位内のいづれかのデータが損失すると、ACK単位の全てを転送し直さなければならない（再送）。従って、損失の確率が高い環境では再送のオーバヘッドを考慮するとかえって性能が低下する場合がある。
【００１１】
【課題を解決するための手段】
本発明では送信側において、一つのACK単位を複数のサブACK単位のパケットに分割し、分割したパケットに対しタグを付加し、それぞれのパケットを連続して転送する。受信側において、転送されたパケットはパケット毎に送信側に対し受信結果を含むサブACKを送る。全てのパケットを受信した受信側では、タグの内容からパケットの順番を判別しデータ部分をマージする。サブACKを受信した送信側では、受信結果を元に再送が必要なパケットがあれば、そのパケットのみ再送する。全てのサブACKを正常に受信した送信側は、サブACKを一つのACKに統合し要求元に通知する。
【００１２】
【作用】
サブACK単位を設け、パケットを分割し連続して転送することで転送性能を高めることができ、サブACK単位にパケット再送要求を発行することができるため、遠距離の通信においても転送性能の低下を少なくすることができる。
【００１３】
【実施例】
（実施例１）
以下、本発明に係るネットワークデータ転送方法を図面に示し実施例を参照してさらに詳細に説明する。
【００１４】
図１は、本発明によるネットワークデータ転送方法を適用する計算機システムの概略構成図を示したものである。１０１はホストであり、１０５は通信制御装置である。ホスト１０１内はユーザプログラム等を実行するプロセッサ１０２，ユーザプログラムやユーザデータ等を格納するホストメモリ１０３，バス１０４から構成されている。バス１０４にはプロセッサ１０２やホストメモリ１０３や外部とデータ転送を行なうための通信制御装置１０５等が接続される。通信制御装置１０５は、ホスト１０１内のバスとの通信を行なうバスインタフェース(以下I/F)１０６，通信制御装置１０５内のハードウェアをコントロールする制御プロセッサ１０７，制御プロセッサ１０７で実行する制御ソフトウェアを格納する制御メモリ１０８，データメモリ１２１と外部に接続された装置と通信を行なう通信I/F１１９，通信制御装置１０５が接続されているネットワークの負荷を計測する通信負荷計測機構１２０，データメモリ１２１，データ転送用のDATAバス１１７，制御情報転送用のCTLバス１１８，データメモリの内容を保存するためのバックアップ機構１２２，送信機構１２６，受信機構１２５で構成される。送信機構１２６，受信機構１２５は外部のネットワークに接続される。バスI/Fは、ホストメモリ１０３と通信制御装置１０５間の転送データを一時的に格納するバッファ１１５，ホストメモリ１０３と通信制御装置１０５間のデータ転送を行なうDMAC１１６から構成される。通信I/Fは、データメモリ１２１と外部に接続された装置との転送データを一時的に格納するバッファ１２４，データメモリ１２１と外部に接続された装置との転送データを行なうDMAC１２３から構成される。また、制御メモリ１０９内には制御プロセッサ１０７にて実行される制御ソフトウェアが格納されている。１０９はパケット送信，１１２はパケット受信を処理する制御ソフトウェアである。パケット送信プログラム１０９は、パケット分割プログラム１１０，タグ付加プログラム１１１等から構成される。パケット受信プログラム１１２はパケットマージプログラム１１３，タグ削除プログラム１１４等から構成される。
【００１５】
図１に示す本発明の動作例を、図２を用いて説明する。図２はネットワーク２１６に接続された計算機２０１と計算機２０２との間で、計算機２０１からホスト１０１のACK単位であるデータ２０３を送信し、計算機２０２で受信（２０４）する処理を示している。ACK単位とは、そのACKが返送されるまで次のパケットを送出できないデータの単位を示す。計算機２０１には通信制御装置２０５が接続されており、計算機２０２には通信制御装置２０６が接続されている。計算機２０１から送信されたデータ２０３は通信制御装置２０５内で３つのサブACK単位であるパケット２０８に分割される。各パケット２０８にはユーザデータ２０９以外に送信先の識別子２１０，分割していることを示すフラグ２１１，パケットの識別子２１２，分割した数２１３，分割後の順序を示す分割識別子２１４，パケットを送信した時間２１５といったタグを付加する。それを受けた通信制御装置２０６は各パケットからタグを外し元のデータ２０４を組み立てる。この際、分割フラグ２１１，パケットの識別子２１２，分割した数２１３，分割後の順序を示す分割識別子２１４を参照する。通信制御装置２０６は各パケット毎に送信完了を示すACK２０７を返送する。この時、もし、送信した３つのパケットの内、いずれかが送信不良を起こした場合、その内容をACK２０７に書き込むことで、通信制御装置２０５はそのACKに対応するパケットのみを再送する。これにより、分割後のパケットに送信不良が発生した場合に、全てのパケット２０８を再送する必要がなくなる。全てのACKが正常に返送されると、３つのサブACKを一つのACKに統合し、ホスト１０１へ送信完了を通知する。サブACK単位を設け、分割フラグ２１１，パケットの識別子２１２，分割した数２１３，分割後の順序を示す分割識別子２１４をユーザデータに付加することで、まったく独立したパケットとして送受信できるようになるため、パケットを並列に転送することができるようになる。また、サブACK単位を設け、要求元へはACKをマージして転送することで、従来の通信プロトコルと同等になりホスト上のソフトウェアの変更量を少なくすることが可能である。この機構のハードウェアとソフトウェアの詳細は後で述べる。
【００１６】
図３は、本発明の効果を図示したものである。図２で示した例と同様に、ACK単位であるユーザデータを３つのサブACK単位に分割し（３１９）、それぞれ連続してパケット転送を行なう例を示している。通信制御装置３０２からユーザデータ３０１を転送し、通信制御装置３１７で受信する例を示している。データ３０１は通信制御装置３０２内で３つのパケットに分割され、各パケットにタグが付加される。このパケットは送信経路３０６に連続して送出される（３０８から３１０）。パケット３１１から３１３は、ユーザデータ３０１に先だって送出されたデータを示している。先だって送出されたユーザデータは通信制御装置３１７内でタグが外され元のデータに復元される（３１８）。パケット３１１から３１３に対して、それぞれ３１４から３１６のACKが返送される。全てのサブACK単位が返送されるとそれぞれのACKをマージし（３２０）、要求元へ通知する。各パケット毎のACKが返送されないと次のパケットを送出できない場合と比較し、本発明ではパケット３０８から３１０とパケット３１１から３１３の間でACK待ちが生じるのみであり、データ転送を高速に行なうことができる。また、この時、送信した経路とは異なる経路でACKを返送することで、データとACKの衝突が起こらないため、より本発明の効果が向上する。
【００１７】
図４は時間に対応した制御フローを示している。この図は、ホスト４０１がホスト４０４に対してデータ４０５を転送する例を示している。ホスト４０１から通信制御装置４０２に転送されたユーザデータ４０５は、通信制御装置４０２内で複数のサブACK単位に分割され（４０８から４１１）、送信先に連続して転送される。それを受けた通信制御装置４０３は、サブACK単位に分割されたパケット毎にサブACKを返送する（４１２から４１４）。通信制御装置４０３は分割されたパケットをマージしホストへデータを転送する（４０７）。一方、サブACKを受けた通信制御装置４０２は、複数のサブACKを一つにマージし、ホストへ一つのACＫを返送する。これにより、サブACK単位は独立にデータが転送でき性能を向上させることができる。
【００１８】
次に、本発明と従来の通信方法と比較する。従来方法の動作を図４と同じように、図５と図６に示す。図５はホスト５０１が転送するパケット毎（５０５，５０７）にACKを返送する方法である。図５の方法では、ホスト５０１，５０４あるいは通信制御装置５０２と５０３はユーザのデータ転送要求と同期してデータ転送，ACKの転送を行なう。そのため、ACKの返送には時間がかかるため、後続のパケットを送るまでに時間を要する。これに対し、図６は一つのユーザデータをACKのない複数のパケットに分割し連続して転送することで転送性能を向上させる方式である。図６の方式では一つのユーザデータ（６０５，６０７）に対し、データを受信する通信制御ボード６０３は一つのACKしか返送しない。従って、分割された複数のパケットの内一つでも送信不良が発生すると、全てのパケットを再送しなければならない。特に、通信距離が長いほどデータが損失する確率は高くなるためかえって性能が低下してしまうことがある。それに対し、本発明ではこういった問題を解決するためにサブACK単位を設け、どのパケットが損失したかをサブACKにて判定することが可能になる。そのため、遠距離時のデータ転送でも再送するデータ量を少なくすることができ高速なデータ転送が可能になる。
【００１９】
次に本発明の詳細な説明を図７から説明する。図７はユーザプログラムの例を示している。送信側のユーザプログラム（７０１から７０３）と受信側のユーザプログラム（７０４から７０６）との間でデータ通信を行なう場合を示す。ステップ７０１，７０４は通信のための環境を設定する。この時点では、まだお互いのプログラムは通信を行なっていない。ステップ７０２，７０５は通信相手が存在し、通信可能な状態にあるかどうかをチェックする。ステップ７０３は、ステップ７０２でチェックした送信相手に対しユーザデータを転送する。ユーザにはパケットサイズは意識する必要がない。従って、この時点ではパケットサイズやACK単位の概念はない。パケットサイズやACK単位は次に説明するオペレーティング・システム２４０３が設けた概念である。
【００２０】
図８はホストメモリ２４０１上のプログラム構造を示している。ユーザプログラム２４０２が通信要求を発行すると、オペレーティング・システム２４０３に処理要求が渡る。通信処理は、オペレーティング・システム２４０３内の、パケット送信プログラム２４０４とパケット受信プログラム２４０５により処理される。パケット送信プログラム２４０４とパケット受信プログラム２４０５は既存のプログラムであり、このプログラムによりACK単位が設けられる。現状のシステムでは、パケット送信プログラム２４０４とパケット受信プログラム２４０５は直接通信制御装置２４０８をコントロールするが、本実施例では、パケット送信プログラム２４０４に連続送信プログラム２４０６と送信未完バッファ２４０７を設けている。連続送信プログラム２４０６はパケット送信プログラム２４０４のACK単位を拡大する機能を有する。連続送信プログラム２４０６と送信未完バッファ２４０７の詳細は次に述べる。
【００２１】
図９は連続送信プログラム２４０６のデータ送信時のフローを示した図である。図８のパケット送信プログラム２４０４から呼び出される。ステップ２５０１はパケット送信プログラム２４０４から送信要求のあったデータを送信未完バッファ２４０７に一時的に格納する。ステップ２５０２は通信制御装置２４０８へ送信要求を発行する。この処理の詳細は後で述べる。連続送信プログラム２４０６はこの時点で、ステップ２５０３の処理によりパケット送信プログラム２４０４へ送信が完了したことを伝える。これにより、パケット送信プログラム２４０４は送信データ対するACKが返送されたものとして、次のデータの送信を要求するようになる。後続のデータが存在すればステップ２５０４により再度ステップ２５０１から繰り返す。送信未完バッファ２４０７はパケット転送が失敗した時のために転送が正常に終了するまで保存される。本来は、パケット送信プログラム２４０４が行なう処理であるが、パケット送信プログラム２４０４はステップ２５０３により処理が正常に終了したものとしてデータは破棄されている。
【００２２】
図１０は、連続送信プログラム２４０６のACK受信時のフローを示した図である。ステップ２６０１にて送信先からACKを受取りを行なう。ユーザデータの全てを転送し終わったかどうかステップ２６０２にて判定し、正常に送信できたならステップ２６０３にて送信未完バッファ２４０７の該当データを削除する。図９，図１０の処理により、既存のプログラムを変更することなくACK単位を拡大することができ、本発明による効果をさらに向上させることができるようになる。
【００２３】
図１１は、ホスト８０１から通信制御装置８０２へデータを転送する処理を示している。連続送信プログラム２４０６のステップ２５０２の詳細処理を８０３に示している。
【００２４】
(1) get_register(STATUS)
本処理では、通信制御装置８０２の状態を取得する。もし、状態が正常であれば、送信処理を続行する。
【００２５】
(2) set_register(buf_addr)
本処理では、通信制御装置８０２の制御レジスタ群（８０７から８１０）に対してホスト８０１上の転送データの先頭アドレスを書き込む。
【００２６】
(3) set_register(pkt_length)
本処理では、通信制御装置８０２の制御レジスタ群（８０７から８１０）に対してホスト８０１上の転送データの長さを書き込む。
【００２７】
(4) set_register(IN,DMA_GO)
本処理は、図１のDMAC１１６に対して、制御レジスタに格納されたデータの先頭アドレスから同様に制御レジスタに格納された長さのデータを、バッファ８１１に転送する命令を示している。ホスト上のデータは、パケット形式であり、ユーザのデータ８０５以外に転送先識別子等が格納された制御情報８０４も格納されている。
【００２８】
図１２は、パケット送信プログラム１０９のフローを示している。ステップ９０１は、図１１にてバッファ８１１に格納されたデータをデータメモリ１２１へ転送する。この処理により通信制御装置１０７はデータを制御可能になる。ステップ９０２はパケットをサブACK単位に分割する。この処理の詳細は図１４で述べる。サブACK単位に分割されたパケットに対しステップ９０３は、図２の２０９から２１５に示すタグを付加する。ステップ９０４では送信先に対してサブACK単位のパケットを転送する。この転送では、通信I/F(図１の１１９）に対して制御プロセッサ１０７がデータ転送機構（図１の１２３）を使用してバッファ（図１の１２４）に転送する。それを受けた送信機構１２６は、所定のプロトコルに従ってパケットを送信する。ステップ９０５は全てのサブACK単位を送信し終わったかどうか判定する。もし、未送のサブACK単位が存在すれば再度ステップ９０４を実行する。ステップ９０６，９０７では送信した全てのサブACKを待つ。この処理により、サブACKをマージすることが可能になる。この時、いずれかのサブACKに正常送信できなかったパケットが存在すれば、そのパケットのみ再送する。全てのサブACKをマージし終わった時点で、ステップ９０８によりホストへデータ転送が完了したことを通知する。
【００２９】
次に図１３と図１４を用いて、図１２のステップ９０２のパケット分割処理を説明する。図１３は通信制御装置１０５が管理する通信先テーブルを示しており、パケット分割時に使用する情報が格納されている。カラム１００１は送信先識別子を格納する。これは、既にアクセスされた送信先が格納されており、このテーブルに含まれていない場合は新規に追加する。カラム１００２は分割単位が格納されている。送信先毎に距離も異なるため、最適な分割単位を送信先毎に設ける必要がある。カラム１００３は前回アクセス時のレスポンスを示している。このレスポンスは、特定の長さのデータを送るのに要した時間である。カラム１００４は、通信負荷が格納されている。カラム１００５は、分割の方向が格納されている。分割の方向は、現状の分割単位に対して、さらに分割を行なうか否かを示している。＋１は、分割単位を大きくする方向であることを意味しており、−１は分割単位を小さくする方向であることを意味している。データを転送するたびにレスポンス１００３および通信負荷１００４を参照し、分割単位を性能が向上する値に更新する。この処理は図１４で述べる。このように分割単位は、アクセスするたびにダイナミックに変化させることで徐々に最適な分割単位に設定する制御を行なう。なおこのテーブルはデータメモリ１２１内に格納されており、バックアップ機構１２２により内容は保存されるため、ユーザが強制的にリセットを行なわないかぎり保存される。これにより、常に最適な性能でデータ転送を行なうことができるようになる。
【００３０】
図１４はパケット分割９０２のフローを示している。ステップ１１０１は図１３で述べた通信先テーブルを参照する。通信制御装置１０５にデータが転送されるとき、ホスト１０１はユーザデータと共に転送先識別子（図１１の８０４）を付加する。この転送先識別子が、既にテーブルに登録済かどうかステップ１１０２にて判定する。もし、登録されていなければステップ１１０４に進み、通信先テーブルに送信先を新規に追加する。また、ステップ１１０５では、新規に登録した送信先の分割単位を最小分割単位に設定する。ステップ１１０３は、送信先テーブルに送信先が登録されていた場合の処理であり、所定の送信先識別子の行から分割単位を取得する。つまり、既に通信先テーブルに送信先が登録されていた場合は、登録内容を分割の単位とし、そうでない場合は最小分割単位を設定する。
【００３１】
図１５は、図１２のステップ９０４の詳細動作を示している。通信制御装置１０５から外部のネットワークへデータを転送する処理を示している。
【００３２】
(1) get_register(STATUS)
本処理では、通信I/F１１９の状態を取得する。もし、状態が正常であれば、送信処理を続行する。
【００３３】
(2) set_register(buf_addr)
本処理では、通信I/F１１９の制御レジスタ群（１２０７）に対してデータメモリ１２１上の転送データ１２０６の先頭アドレスを書き込む。
【００３４】
(3) set_register(pkt_length)
本処理では、通信I/F１１９の制御レジスタ群（１２０７）に対してデータメモリ１２１上の転送データ１２０６の長さを書き込む。
【００３５】
(4) set_register(OUT,DMA_GO)
本処理は、図１のDMAC１２３に対して、制御レジスタに格納されたデータの先頭アドレスから同様に制御レジスタに格納された長さのデータを、バッファ１２４に転送する命令を示している。以上の処理により、データメモリ１２１上のデータ１２０６がバッファ１２４へ転送される。これにより、通信I/F１１９は送信機構１２６にデータを渡すことでネットワークに対してパケットを送信する。
【００３６】
図１６は、ACKの内容を示している。送信結果１３０１，送信先の識別子１３０２，分割していることを示すフラグ１３０３，パケットの識別子１３０４，分割した数１３０５，分割後の順序を示す分割識別子１３０６，パケットを送信した時間１３０７が格納されている。送信結果１３０１には、正常に受信されたかどうかが格納されており、この内容により送信側はパケットを再送するかどうかを決定する。
【００３７】
図１７は、図１６のACKを受けたパケット送信側のACK受け付けフローを示している。ステップ１４０１は、ACKの１３０１を参照しパケットの送信が正常に終了したかどうかを判定する。正常に終了していればステップ１４０２に進み、そうでなければステップ１４０６に進む。ステップ１４０６では、送信が失敗したために再送要求を発行する。ステップ１４０２は送信に要した時間を計算する。これは、最適な分割単位を決定するためのパラメタとなる。計算には、図１６の送信時間１３０７と現在の時間との差を求めることで計算可能である。ステップ１４０３は現状のネットワークの負荷を、図１の通信負荷計測機構１２０より求める。通信負荷計測機構１２０は、通信制御装置１０５が接続されているネットワークの現状の負荷を求める機構である。ネットワーク負荷は、受信機構１２５が単位時間内にどのくらいのパケットを受け付けたかを調べることで達成可能である。この負荷の最適な分割単位を決定するためのパラメタとなる。ステップ１４０４は現状の送信先テーブル（図１３）内に格納されている分割単位１００２が適切かどうかを判断する。この判定には、送信先テーブル（図１３）内のレスポンス１００３および通信負荷１００４とを現状のレスポンスと通信負荷とを比較する。判定において、少なくとも現状の通信負荷が送信先テーブル（図１３）内の通信負荷１００４よりも大きく、レスポンスが小さいか、現状の通信負荷が送信先テーブル（図１３）内の通信負荷１００４よりも小さく、レスポンスが大きい場合は更新が必要である。前者は分割単位を現状の方向で更新し、後者は分割を現状と反対の方向に更新を行なう。この処理をステップ１４０５にて行なう。分割が現状の方向で＋であれば分割単位を大きくする。例えば現状２ＫＢであれば４ＫＢに変更する。逆に分割が現状の方向で−であれば分割単位を小さくする。例えば現状４ＫＢであれば２ＫＢに変更する。分割単位を上記処理のように変更することで、遠距離の場合は分割単位を小さくし、近距離の場合は分割単位を大きくする制御が可能になる。これは、遠距離の場合はACKが返送される時間が長いためなるべく小さな単位に分割した方がレスポンスが良くなることを意味している。
【００３８】
また、図１８で述べる再送回数をパケット分割のパラメタにすることで、より転送性能を向上させることが可能になる。特定ホストとデータ通信する場合はエラーが多く発生する時などに有効である。再送回数が増加する場合は、分割単位を小さくすることで再送時間を短縮することが可能となる。例えば８ＫＢの分割単位で再送要求が多発した場合は、それ以下の例えば４ＫＢ等の設定することで再送オーバヘッドを小さくできる。再送時の動作は図１９で詳細に述べる。次にネットワークの負荷について説明する。ネットワークは１対１でのみ使用されるわけではない。複数のユーザが同時にデータを転送する場合が考えられ、この場合はネットワークの負荷が上がるためデータ転送のレスポンスは劣化する。このレスポンスの劣化は、通信距離とは関係がない。従って、本実施例のように負荷を読み取り分割単位を決定するパラメタにすることで、距離には関係のない要因でのレスポンスの変動を見分けることができるようになる。なお、本実施例では送信先テーブル（図１３）内に通信負荷１００４の項目を設けたが、この項目の代わりに通信距離を登録することでより正確に分割単位１００２を求めることができるようになる。通信距離はあらかじめユーザが設定し、必要に応じ送信先を追加することで充分な効果を得ることができる。
【００３９】
図１８を用いて次に複数のサブACK待ちについて説明する。図２のステップ９０６，９０７を実現する方法である。この２つのステップは、分割した複数のサブACKの待ち合わせを行なっている。いづれのサブACKが完了したかを知る必要があるため、図１８のサブACK管理テーブルを、データメモリ１２１内に設ける。カラム１５０１は識別子を示し、図２のパケット２０８内に格納されている識別子２１２の内容が格納される。カラム１５０２は分割識別子であり、同様に分割ID２１４が格納される。分割識別子１５０２はサブACKに対応しており、このカラムの分割識別子１５０２に対するACKの返答が完了したかどうかをカラム１５０３に格納する。全てのサブACKの返答があれば、データ転送が完了したことを意味し、ステップ９０６の判定が可能になる。なお、サブACK管理テーブルはパケット分割時（図１２のステップ９０２）に生成される。
【００４０】
図１９は、再送時に分割単位が小さいことが高速に転送可能であることを示している。１６０４は大きな単位でデータを転送することを示しており、１６０５はその再送パケットを示している。１６０６から１６０９は小さな単位でデータを転送することを示しており、１６１０はその再送パケットを示している。再送が必要な場合、多くの場合その一部分に障害が発生する。この時、パケットが大きいと（１６０４）、全てを再送しなくてはならない（１６０５）。しかし、分割単位が小さいと、送信に要する時間が大きくなるが、再送時は、少ないデータ量で済むため結果的に早くデータ転送を終了することができる。
【００４１】
図２０はパケット受信プログラム１１２のフローを示している。ステップ１７０１は通信I/F１１９を介してパケットを受信する。ステップ１７０２は正常に受信されたかどうかチェックし正常に受信できればステップ１７０３に進み、そうでなければステップ１７０４に進む。ステップ１７０３では正常にデータが受信できたことを示すサブACKを送信側に返送する。ステップ１７０４では、正常に受信できなかったことを示すサブACKを送信側に返送する。ステップ１７０５では全てのサブACK単位を受信したかどうかを判定する。この判定は、図２の分割フラグ２１１，識別子２１２，分割数２１３，分割ID２１４を参照することで判定可能である。ステップ１７０６は、図２の２１０から２１５のタグを削除しデータ部分のみ取りだす。ステップ１７０７は分割ID２１４を元にデータをマージする。ステップ１７０８ではホストへマージデータを転送し終了する。
【００４２】
図２１はデータをマージする動作を示している。パケット１８０２からパケット１８０４の３つのパケットをマージする例を示している。この３つのパケットのうちデータ部分のみを取りだし、結合する（１８０５，１８０６，１８０７）。結合時には分割ID１８０８の順にマージすることで元のデータに回復することが可能である。
【００４３】
図２２は、本発明をディスク装置に適用した例を示す。これまでは、ホストどうしのデータ通信について説明してきたが、本発明はデータ通信の高速化を目的としておりデータ通信一般に適用可能である。図２２はネットワーク１９０９に接続された計算機１９０１とディスク装置１９０４との間で、計算機１９０１からACK単位であるデータ１９０２を送信し、ディスク制御装置１９０５で受信（１９０６）する処理を示している。計算機１９０１には通信制御装置１９０３が接続されており、ディスク制御装置１９０５には通信制御装置１９０７が接続されている。計算機１９０１から送信されたデータ１９０２は通信制御装置１９０３内で３つのサブACK単位であるパケット１９１０に分割される。各パケット１９１０には図２と同様にユーザデータ，送信先の識別子，分割していることを示すフラグ，パケットの識別子，分割した数，分割後の順序を示す分割ID，パケットを送信した時間といったタグが付加される。それを受けた通信制御装置１９０７は各パケットからタグを外し元のデータ１９０６を組み立てる。この際、図２と同様に分割フラグ，パケットの識別子，分割した数，分割後の順序を示す分割IDを参照する。通信制御装置１９０７は各パケット毎に送信完了を示すACK１９０８を返送する。この時、もし、送信した３つのパケットの内、いずれかが送信不良を起こした場合、その内容をACK１９０８に書き込むことで、通信制御装置１９０３はそのACKに対応するパケットのみを再送する。これにより、分割後のパケットに送信不良が発生した場合に、全てのパケット１９０２を再送する必要がなくなる。全てのACKが正常に返送されると、３つのサブACKを一つのACKに統合し、ホスト１９０１へ送信完了を通知する。サブACK単位を設け、分割フラグ，パケットの識別子，分割した数，分割後の順序を示す分割識別子をユーザデータに付加することで、まったく独立したパケットとして送受信できるようになるため、パケットを並列に転送することができるようになる。ディスク制御装置１９０５に複数のディスク装置１９０４が接続されている場合、ディスク制御装置１９０５は複数のディスク入出力要求を同時に処理可能であり、ホスト１９０１から高速にデータを転送できる本発明において大きな性能向上効果が期待できる。また、サブACK単位を設け、要求元へはACKをマージして転送することで、従来の通信プロトコルと同等になりホスト上のソフトウェアの変更量を少なくすることが可能である。また、本実施例によればデータの送信時および受信時共に、転送データが大きい方が並列制を出しやすいため、より効率的にデータを転送することが可能となる。
【００４４】
（実施例２）
図２３は、本発明をソフトウェアにより実施した構成を示す。２００１はホストであり、２０１１は通信制御装置である。ホスト２００１内には、プログラムとしてユーザプログラム２００２，オペレーティング・システム２００３が稼働している。オペレーティング・システム２００３内では、通信制御プログラム２００４が稼働しており、その中で分割制御プログラム２０１２，パケット送信プログラム２００５，パケット受信プログラム２００８が稼働する。分割制御プログラム２０１２内は、パケット分割送信プログラム２００７，パケット分割受信プログラム２００９が稼働する。ユーザプログラム２００２から発行されたネットワークに対する通信要求は、まず通信制御プログラム２００４が受取り、その後、分割制御プログラム２０１２に処理が渡される。分割制御プログラム２０１２の詳細動作は後で説明する。パケット送信プログラム２００５，パケット受信プログラム２００８，通信制御装置２０１１は既存のプログラムおよび装置である。
【００４５】
本実施例では、既存のシステムを利用して発明を実施している。既存のパケット送信プログラム２００５，パケット受信プログラム２００８は、図２４に示すように大きくデータ部２１０１とパケットヘッダ部２１０２に分けられる。実施例１では、パケットヘッダ部に独自のタグを付加したが、実施例２では既存のシステムを使用するためにパケットヘッダを変更することはできない。そこで、データ部２１０１の中にパケット分割に必要なタグ（２１０４から２１０９）を付加する。各パケットにはユーザデータ２１０３以外に分割していることを示すフラグ２１０４，分割した数２１０５，分割後の順序を示す分割識別子２１０６，パケットを送信した時間２１０７といったタグを付加する。
【００４６】
図２５は、パケット分割送信プログラム２００７のフローを示している。ステップ２２０１は、パケットをサブACK単位に分割する。この処理の詳細は実施例１の図１４と同じである。サブACK単位に分割されたパケットに対しステップ２２０２は、図３の２１０３から２１０７に示すタグを付加する。ステップ２２０３では送信先に対してサブACK単位のパケットを転送する。ステップ２２０４は全てのサブACK単位を送信し終わったかどうか判定する。もし、未送信のサブACK単位が存在すれば再度ステップ２２０３を実行する。ステップ２２０５，２２０６では送信した全てのサブACKを待つ。この処理により、サブACKをマージすることが可能になりユーザプログラム２００２に対して分割を意識させなくすることができる。この時、いずれかのサブACKに正常送信できなかったパケットが存在すれば、そのパケットのみ再送する。全てのサブACKをマージし終わった時点で、ステップ２２０７によりユーザプログラム２２０７へデータ転送が完了したことを通知する。
【００４７】
図２６はパケット分割受信プログラム２００９のフローを示している。ステップ２３０１はパケット受信プログラム２００６を介してパケットを受信する。ステップ２３０２は正常に受信されたかどうかチェックし正常に受信できればステップ２３０３に進み、そうでなければステップ２３０４に進む。ステップ２３０３では正常にデータが受信できたことを示すサブACKを送信側に返送する。ステップ２３０４では、正常に受信できなかったことを示すサブACKを送信側に返送する。ステップ２３０５では全てのサブACK単位を受信したかどうかを判定する。この判定は、図２４の分割フラグ２１０４，分割数２１０５，分割ID２１０６を参照することで判定可能である。ステップ２３０６は、図２４の２１０４から２１０７のタグを削除しデータ部分のみ取りだす。ステップ２３０７は分割ID２１０６を元にデータをマージする。ステップ２３０８ではユーザプログラム２００２へマージデータを転送し終了する。
【００４８】
図２７は、分割の動作原理を示している。既存のパケット送信プログラム２００５，パケット受信プログラム２００６は、ポートと呼ばれる通信の入出力口を設け、割り当てられたポートは通信相手と１対１に対応している。同一ポート内では、ACKが返送されるまで次のパケットが送信できないため、同一ポートを使用して本発明の分割を実施することはできない。そこで、本実施例では一つのユーザデータに対し、送信側の通信制御プログラム２７０１と受信側の通信制御プログラム２７０２にそれぞれ２つ以上のポートを割り当て（２７０５，２７０６，２７１６，２７１７）る。これにより、パケットを独立に転送することが可能となる。分割制御プログラム（２７０４，２７１９）はユーザデータ（２７０３，２７１８）をポート毎に独立に転送する（２７１１，２７１２）。また、サブACK（２７１３，２７１４）もポート毎に独立に返送することが可能となる。通信制御装置（２７２０，２７１９）は、本実施例２では既存の動作を行なうだけでよい。その他の詳細な処理やテーブルは実施例１と同等である。本実施例では、ハードウェアや既存のオペレーティング・システム２００３の変更は必要ない利点がある。
【００４９】
【発明の効果】
本発明によれば、遠距離時の通信においても転送性能の低下を防止することができる。
【図面の簡単な説明】
【図１】本発明によるネットワークデータ転送方式の全体構成ブロック図。
【図２】本発明によるネットワークデータ転送方式の概略ブロック図。
【図３】本発明によるネットワークデータ転送方式の概略ブロック図。
【図４】本発明によるネットワークデータ転送方式のタイムチャート。
【図５】従来方式によるネットワークデータ転送方式のタイムチャート１。
【図６】従来方式によるネットワークデータ転送方式のタイムチャート２。
【図７】ユーザプログラムのフローチャート。
【図８】オペレーティング・システムの構造ブロック図。
【図９】連続送信制御プログラムのフローチャート。
【図１０】連続送信制御プログラムのフローチャート。
【図１１】ホストから通信制御装置へのデータ転送を示すブロック図。
【図１２】パケット送信プログラムのフローチャート。
【図１３】送信先テーブルの構造を示す構成図。
【図１４】パケット分割プログラムのフローチャート。
【図１５】通信制御装置からネットワークへのデータ転送を示す概念図。
【図１６】  ACKパケットの構造を示す概念図。
【図１７】  ACK待ちのフローチャート。
【図１８】  ACKテーブルの構造を示す概念図。
【図１９】本発明における実施例の効果を示す概念図。
【図２０】パケット受信プログラムのフローチャート。
【図２１】タグの削除とデータマージを示す概念図。
【図２２】ディスク装置への適用例を示す概念図。
【図２３】本発明の実施例２の全体構成ブロック図。
【図２４】パケットの構造を示す概念図。
【図２５】パケット送信プログラムのフローチャート。
【図２６】パケット受信プログラムのフローチャート。
【図２７】マルチポートによるパケット連続転送を示す概念図。
【図１】
0004160642.tif 000002
【図２】
0004160642.tif 000003
【図３】
0004160642.tif 000004
【図４】
0004160642.tif 000005
【図５】
0004160642.tif 000006
【図６】
0004160642.tif 000007
【図７】
0004160642.tif 000008
【図８】
0004160642.tif 000009
【図９】
0004160642.tif 000010
【図１０】
0004160642.tif 000011
【図１１】
0004160642.tif 000012
【図１２】
0004160642.tif 000013
【図１３】
0004160642.tif 000014
【図１４】
0004160642.tif 000015
【図１５】
0004160642.tif 000016
【図１６】
0004160642.tif 000017
【図１７】
0004160642.tif 000018
【図１８】
0004160642.tif 000019
【図１９】
0004160642.tif 000020
【図２０】
0004160642.tif 000021
【図２１】
0004160642.tif 000022
【図２２】
0004160642.tif 000023
【図２３】
0004160642.tif 000024
【図２４】
0004160642.tif 000025
【図２５】
0004160642.tif 000026
【図２６】
0004160642.tif 000027
【図２７】
0004160642.tif 000028