(57)【特許請求の範囲】
【請求項１】
送信装置からのデータを受信する受信装置において、
複数のデータブロックと前記複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、前記データグループに基づいて算出された第２チェック符号とを前記送信装置から受信すると、前記第２チェック符号に基づいて前記データグループが異常であるかを判定し、異常である場合、前記複数の第１チェック符号に基づいて前記複数のデータブロックの中から異常なデータブロックを特定する判定部と、
前記異常なデータブロックの再送を前記送信装置に要求する再送要求部と、
を有する受信装置。
【請求項２】
前記データグループは、前記複数のデータブロックのそれぞれに対応する複数の判定情報をさらに含み、各判定情報は、対応するデータブロックのアドレスが示す送信元記憶領域が未書き込み領域であるかを示し、
前記判定部は、前記異常なデータブロックのうち、前記判定情報が前記未書き込み領域であることを示す一のデータブロックを、前記再送要求部が再送を要求する対象から除外する、
請求項１記載の受信装置。
【請求項３】
前記判定部は、前記一のデータブロックを、前記未書き込み領域から読み出されたことを示す値に変換する、
請求項２記載の受信装置。
【請求項４】
データ受信を制御する受信制御方法において、
受信装置が、
複数のデータブロックと前記複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、前記データグループに基づいて算出された第２チェック符号とを送信装置から受信し、
前記第２チェック符号に基づいて前記データグループが異常であるかを判定し、
前記データグループが異常である場合、前記複数の第１チェック符号に基づいて前記複数のデータブロックの中から異常なデータブロックを特定し、
前記異常なデータブロックの再送を前記送信装置に要求する、
受信制御方法。
【請求項５】
データ受信を制御する受信制御プログラムにおいて、
コンピュータに、
複数のデータブロックと前記複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、前記データグループに基づいて算出された第２チェック符号とを送信装置から受信し、
前記第２チェック符号に基づいて前記データグループが異常であるかを判定し、
前記データグループが異常である場合、前記複数の第１チェック符号に基づいて前記複数のデータブロックの中から異常なデータブロックを特定し、
前記異常なデータブロックの再送を前記送信装置に要求する、
処理を実行させる受信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は受信装置、受信制御方法および受信制御プログラムに関する。
【背景技術】
【０００２】
複数の装置間で送受信されるデータに誤りがあるかを検出するための技術が知られている。例えば、パリティビットやＣＲＣ（Cyclic Redundancy Check）などのチェック符号を用いることで、データに誤りがあるか否かを検出できる。
【０００３】
また、誤り検出に関する次のような技術が提案されている。例えば、ホストからＨＤＤ（Hard Disk Drive）に転送されるデータにＣＲＣが付加され、ＨＤＤが、転送されたデータのエラーを、ＣＲＣを用いて検出する技術が提案されている。また、ディスク装置が、ディスクアレイ装置から転送されたデータを基に生成したチェックコードと当該転送されたデータに付随するチェックコードとを比較する技術が提案されている。
【０００４】
また、送信されたパケットを消失した場合、消失したパケットのみを再送信する技術が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−４５１５７号公報
【特許文献２】特開２０００−１０５６７５号公報
【特許文献３】特表２００５−５２９５２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、データがパケット単位で送信される際には、パケット内のデータ領域に、当該データ領域のデータに基づくチェック符号が付加されることが多い。このような場合、受信装置は、チェック符号を用いてデータ領域のデータに異常がないかをチェックし、異常がある場合には、データ領域のデータの再送を送信装置に要求することができる。
【０００７】
しかし、チェック符号に基づいてデータ領域のデータに異常があると判定された場合でも、データ領域のデータ全体に異常があるとは限らず、そのデータの一部は正常であることもあり得る。このため、パケット単位でデータの再送を要求した場合には、データ領域のデータのうち、異常がある部分だけでなく正常な部分も再送されてしまい、その分だけ再送時間が長くなる。その結果、受信すべきデータ全体の受信が完了するまでの時間が長くなるという問題がある。
【０００８】
１つの側面では、本発明は、データの受信時間を短縮可能な受信装置、受信制御方法および受信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、送信装置からのデータを受信する受信装置が提供される。この受信装置は判定部と再送要求部とを有する。判定部は、複数のデータブロックと複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、データグループに基づいて算出された第２チェック符号とを送信装置から受信すると、第２チェック符号に基づいてデータグループが異常であるかを判定し、異常である場合、複数の第１チェック符号に基づいて複数のデータブロックの中から異常なデータブロックを特定する。再送要求部は、異常なデータブロックの再送を送信装置に要求する。
【００１０】
また、１つの態様では、受信制御方法が提供される。この受信制御方法は、受信装置が、複数のデータブロックと複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、データグループに基づいて算出された第２チェック符号とを送信装置から受信し、第２チェック符号に基づいてデータグループが異常であるかを判定し、データグループが異常である場合、複数の第１チェック符号に基づいて複数のデータブロックの中から異常なデータブロックを特定し、異常なデータブロックの再送を送信装置に要求する。
【００１１】
また、１つの態様では、受信制御プログラムが提供される。この受信制御プログラムは、コンピュータに、複数のデータブロックと複数のデータブロックのそれぞれに基づいて算出された複数の第１チェック符号とを含むデータグループと、データグループに基づいて算出された第２チェック符号とを送信装置から受信し、第２チェック符号に基づいてデータグループが異常であるかを判定し、データグループが異常である場合、複数の第１チェック符号に基づいて複数のデータブロックの中から異常なデータブロックを特定し、異常なデータブロックの再送を送信装置に要求する、処理を実行させる。
【発明の効果】
【００１２】
１つの側面では、データの受信時間を短縮できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の通信システムを示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ＣＭのハードウェア例を示す図である。
【図４】ＣＡのハードウェア例を示す図である。
【図５】ＦＣフレームを示す図である。
【図６】ＰＩのフォーマットを示す図である。
【図７】ＣＭの機能例を示す図である。
【図８】コピー元のデータ送信処理の例を示すフローチャートである。
【図９】コピー先のデータ受信処理の例（その１）を示すフローチャートである。
【図１０】コピー先のデータ受信処理の例（その２）を示すフローチャートである。
【図１１】コピー先のデータ受信処理の例（その３）を示すフローチャートである。
【図１２】データチェック処理の例を示すフローチャートである。
【図１３】バックアップ処理の例（その１）を示すシーケンス図である。
【図１４】バックアップ処理の例（その２）を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の通信システムを示す図である。第１の実施の形態の通信システムは、送信装置１と受信装置２とを有する。送信装置１と受信装置２とは、ネットワーク３を介して接続される。例えば、送信装置１に格納されているデータを受信装置２にコピーしたい場合に、ネットワーク３を介して通信が行われる。
【００１５】
送信装置１は、データグループ４ａと、このデータグループ４ａに基づいて算出されたチェック符号４ｂとを受信装置２に送信する。チェック符号４ｂは、例えば、データグループ４ａに付加されて送信される。チェック符号４ｂは、例えばＣＲＣである。
【００１６】
データグループ４ａには、送信装置１から受信装置２に送信すべき実データが、データブロック毎に分割されて記録される。図１の例では、データグループ４ａはデータブロック５ａ，５ｂを含む。また、送信装置１は、データブロック５ａに基づいて算出されたチェック符号６ａと、データブロック５ｂに基づいて算出されたチェック符号６ｂとを、データグループ４ａに含めて送信する。チェック符号６ａ，６ｂは、例えば、それぞれデータブロック５ａ，５ｂに付加される。チェック符号６ａ，６ｂは、例えばＣＲＣである。
【００１７】
受信装置２は、判定部２ａおよび再送要求部２ｂを有する。判定部２ａおよび再送要求部２ｂは、例えば、プロセッサである。プロセッサには、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。また、判定部２ａおよび再送要求部２ｂは、マルチプロセッサであってもよい。
【００１８】
判定部２ａは、データグループ４ａとチェック符号４ｂとを送信装置１から受信する（ステップＳ１）。すると、判定部２ａは、まず、チェック符号４ｂに基づいてデータグループ４ａが異常であるかを判定する（ステップＳ２）。
【００１９】
ここで、データグループ４ａが異常であると判定した場合、判定部２ａは、チェック符号６ａ，６ｂに基づいて、データブロック５ａ，５ｂの中から異常なデータブロックを特定する（ステップＳ３）。すなわち、判定部２ａは、チェック符号６ａに基づいてデータブロック５ａが異常であるかを判定し、チェック符号６ｂに基づいてデータブロック５ｂが異常であるかを判定する。
【００２０】
ここで、データブロック５ｂが異常なデータブロックと特定されたとする。すると、再送要求部２ｂは、データブロック５ｂの再送を送信装置１に要求する（ステップＳ４）。図１では、データブロック５ｂの再送要求を再送要求７で表している。図示しないが、この再送要求に応じて、送信装置１は、データブロック５ｂを受信装置２に再送する。
【００２１】
以上の処理によれば、受信装置２は、チェック符号４ｂを用いた異常判定結果だけに基づいて異常なデータの再送を要求する場合と比較して、データの再送にかかる時間を短縮することができる。すなわち、チェック符号４ｂを用いた異常判定結果だけに基づいて再送を行う場合、受信装置２は、データグループ４ａ内のどの部分が異常であるかを判別できないので、データグループ４ａ全体の再送を送信装置１に要求する。この場合、データグループ４ａに含まれるデータブロック５ａは、受信装置２が正常に受信できているにもかかわらず、送信装置１から再度送信されてしまい、その分だけ再送に余計な時間がかかる。
【００２２】
これに対して、受信装置２は、データグループ４ａに含まれるデータブロック５ａ，５ｂ毎に異常判定を行い、異常があるデータブロック５ｂのみを再送要求することで、再送されるデータ量を削減し、再送時間を短縮することができる。その結果、受信装置２は、送信装置１から受信すべきデータ全体の受信を完了するまでにかかる時間を短縮することができる。
【００２３】
［第２の実施の形態］
次に、送信装置から受信装置へのデータ送信の一例として、ストレージ装置間でのデータコピーを適用した実施の形態について説明する。
【００２４】
図２は、第２の実施の形態のストレージシステムを示す図である。第２の実施の形態のストレージシステムは、ストレージ装置１０およびストレージ装置２０を含む。
ストレージ装置１０は、ストレージシステムのプライマリとして機能する。ストレージ装置２０は、ストレージシステムのセカンダリとして機能する。このストレージシステムでは、予期せぬ災害などに備えて、プライマリのストレージ装置１０に格納されるデータを遠隔地に配置されているセカンダリのストレージ装置２０にバックアップさせることができる。以下、プライマリのストレージ装置１０をコピー元のストレージ装置、セカンダリのストレージ装置２０をコピー先のストレージ装置という場合がある。
【００２５】
ストレージ装置１０は、ＣＭ（Controller Module）１００とＤＥ（Drive Enclosure）２００とを有する。ストレージ装置２０は、ＣＭ３００とＤＥ４００とを有する。ＤＥ２００，４００は、複数のＨＤＤを搭載する。
【００２６】
ＣＭ１００とＣＭ３００との間は、例えば、ファイバチャネル（ＦＣ：Fibre Channel）などを用いたＳＡＮ（Storage Area Network）を介して接続されている。
ＣＭ１００には、ホスト装置５００が接続されている。ＣＭ１００とホスト装置５００との間は、例えば、ＦＣを用いたＳＡＮを介して接続されている。ＣＭ１００は、ホスト装置５００からの要求に応じたＤＥ２００に対するデータアクセスを制御する。例えば、ＣＭ１００は、論理ボリュームを作成し、ホスト装置５００から論理ボリュームに対するアクセスを受け付ける。ＣＭ１００は、論理ボリュームに対応する物理記憶領域をＤＥ２００内に確保し、ホスト装置５００から論理ボリュームに対して書き込みが要求されたデータを、ＤＥ２００における対応する記憶領域に書き込む。論理ボリュームのデータは、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）によってＤＥ２００内の記憶領域への書き込みが制御されてもよい。
【００２７】
また、ＣＭ１００は、ＤＥ２００に記憶されたデータをＣＭ３００に送信してバックアップさせる。ＣＭ３００は、ＣＭ１００から送信されたデータを、ＤＥ４００にバックアップする。例えば、ＣＭ３００は、ＣＭ１００に作成された論理ボリュームの記憶領域を指定した読み出し要求をＣＭ１００に送信する。ＣＭ１００から読み出し要求に応じたデータが送信され、ＣＭ３００は、送信されたデータを、その論理ボリュームに対応付けてＤＥ４００に確保した記憶領域に書き込む。これにより、論理ボリュームのリモートコピーが実現される。
【００２８】
図３は、ＣＭのハードウェア例を示す図である。ＣＭ１００は、プロセッサ１０１、ＲＡＭ（Random Access Memory）１０２、ＳＳＤ（Solid State Drive）１０３、ＤＩ（Drive Interface）１０４、ＣＡ（Channel Adapter）１０５、ＣＡ１０６および読み取り装置１０７を有する。
【００２９】
プロセッサ１０１は、ＣＭ１００の情報処理を制御する。プロセッサ１０１は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。
ＲＡＭ１０２は、ＣＭ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００３０】
ＳＳＤ１０３は、ＣＭ１００の補助記憶装置である。ＳＳＤ１０３は、不揮発性の半導体メモリである。ＳＳＤ１０３には、プロセッサ１０１に実行させるプログラムや各種データなどが格納される。
【００３１】
ＤＩ１０４は、ＤＥ２００と通信するためのインタフェースである。ＣＡ１０５は、ホスト装置５００と通信するためのインタフェースである。ＣＡ１０６は、ＣＭ３００と通信するためのインタフェースである。
【００３２】
読み取り装置１０７は、可搬型の記録媒体１０７ａに記録されたプログラムやデータを読み取る装置である。記録媒体１０７ａとして、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１０７ａとして、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置１０７は、例えば、プロセッサ１０１からの命令に従って、記録媒体１０７ａから読み取ったプログラムやデータをプロセッサ１０１に送信する。
【００３３】
なお、ＣＭ３００もＣＭ１００と同様のハードウェアにより実現できる。
図４は、ＣＡのハードウェア例を示す図である。図４は、ＣＭ１００が有するＣＡ１０６とＣＭ３００が有するＣＡ３０６のハードウェア例を示している。なお、図４では、ＣＭ１００，３００が有する他のハードウェアの図示を省略している。
【００３４】
ＣＡ１０６は、プロセッサ１０６ａおよびメモリ１０６ｂを有する。プロセッサ１０６ａは、ファームウェアプログラムを実行することでＣＡ１０６を統括的に制御する。また、プロセッサ１０６ａは、後述するＦＣフレームを生成し、ＦＣフレームを用いてＣＭ３００と通信する。メモリ１０６ｂは、揮発性の半導体メモリである。例えば、メモリ１０６ｂは、ＲＡＭである。メモリ１０６ｂは、プロセッサ１０６ａによる処理に用いる各種データを記憶する。
【００３５】
ＣＡ３０６は、ＣＡ１０６と同様のハードウェアにより実現できる。すなわち、ＣＡ３０６は、プロセッサ３０６ａおよびメモリ３０６ｂを有する。プロセッサ３０６ａは、ＦＣフレームを生成し、ＦＣフレームを用いてＣＭ１００と通知する。
【００３６】
なお、ＣＭ１００は、第１の実施の形態の送信装置１の一例であり、ＣＭ３００は、第１の実施の形態の受信装置２の一例である。また、ＣＡ１０６またはストレージ装置１０が送信装置１の一例であってもよいし、ＣＡ３０６またはストレージ装置２０が受信装置２の一例であってもよい。
【００３７】
図５は、ＦＣフレームを示す図である。図５は、プロセッサ１０６ａ，３０６ａが生成するＦＣフレームを示す図である。ＣＭ１００とＣＭ３００との間の通信は、ＦＣフレームが用いられる。
【００３８】
ＦＣフレームは、先頭側から、ＳＯＦ（Start Of Frame，４ｂｙｔｅｓ）、フレームヘッダ（２４ｂｙｔｅｓ）、ペイロード（２１１２ｂｙｔｅｓ）、ＣＲＣ（４ｂｙｔｅｓ）およびＥＯＦ（End Of Frame，４ｂｙｔｅｓ）を有する。また、ペイロードは、オプション（６４ｂｙｔｅｓ）およびデータ部（２０４８ｂｙｔｅｓ）を有する。
【００３９】
ＳＯＦには、ＦＣフレームの始まりを示す情報が記録される。フレームヘッダには、送信元および送信先のアドレスや、ＦＣフレームの種類を示す情報などが記録される。ペイロードには、主にＳＣＳＩ（Small Computer System Interface）コマンドに関する情報が記録される。ＣＲＣには、データ部のデータに誤りがあるかを検出するためのチェック符号が記録される。例えば、データ部のデータを所定の定数で割った余りがＣＲＣに記録される。ＥＯＦには、ＦＣフレームの終わりを示す情報が記録される。
【００４０】
ＦＣフレームの種類の例として、コマンドフレーム、データフレーム、レスポンスフレームなどがある。コマンドフレームにおけるペイロードのデータ部には、ＲＥＡＤコマンドやＷＲＩＴＥコマンドなどのＳＣＳＩコマンドが記録される。データフレームにおけるペイロードのデータ部には、ＳＣＳＩコマンドによって読み出しや書き込みが要求された実データが記録される。レスポンスフレームにおけるペイロードのデータ部には、ＳＣＳＩコマンドによって要求された処理を正常に完了したかを示す情報が記録される。
【００４１】
ここで、ＣＭ１００からＣＭ３００に対してデータフレームを用いて送信される実データは、複数のデータブロックに分割される。データブロックの１つの大きさは、５１２ｂｙｔｅｓである。本実施の形態では、データブロックに、Ｔ１０−ＤＩＦ（Data Integrity Field）で規定されたＰＩ（Protection Information）が付加される。ＰＩは、８ｂｙｔｅｓの保護情報である。データブロックとＰＩとを合わせた容量が５２０ｂｙｔｅｓなので、図５の下側に示すように、ＰＩが付加されたデータブロックを、データフレームにおけるペイロードのデータ部に３つまで記録することができる。
【００４２】
なお、データフレームにおけるペイロードのデータ部の大きさは、２０４８ｂｙｔｅｓを上限として可変となっている。そして、ＲＥＡＤコマンドを送信するコマンドフレームにおいては、対応するデータフレームにおけるペイロードのデータ部に格納させるデータブロック数を指定することが可能となっている。例えば、データブロック数が「１」に指定された場合、データフレームにおけるペイロードのデータ部は５２０ｂｙｔｅｓに縮小される。
【００４３】
図６は、ＰＩのフォーマットを示す図である。データブロックに付加されるＰＩは、ＣＲＣ（２ｂｙｔｅｓ）、ＡＰＰ（Application tag）（２ｂｙｔｅｓ）、ＬＢＡ（Logical Block Address，４ｂｙｔｅｓ）を有する。ＣＲＣには、データブロックに誤りがあるかを検出するためのチェック符号が記録される。例えば、データブロックを所定の定数で割った余りがＣＲＣに記録される。ＡＰＰには、任意の情報が登録される。ＬＢＡには、データブロックの位置を示すＬＢＡが登録される。
【００４４】
本実施の形態では、ＡＰＰに、１ビットのＵｎｗｒｉｔｅ  Ｆｌａｇが記録される。Ｕｎｗｒｉｔｅ  Ｆｌａｇは、データブロックのアドレスが示す読み出し元記憶領域が未書き込み領域であるか否かを示す。Ｕｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅ（例えば１）の場合、データブロックが未書き込み領域のデータ（０データ）であり、有効なデータが含まれていないことを示す。Ｕｎｗｒｉｔｅ  Ｆｌａｇがｆａｌｓｅ（例えば０）の場合、データブロックが未書き込み領域のデータでないことを示す。なお、本実施の形態では、データブロックの読み出し元領域は論理ボリュームの記憶領域であり、Ｕｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅの場合、データブロックは論理ボリュームにおける未書き込み領域から読み出されたデータである。
【００４５】
図７は、ＣＭの機能例を示す図である。図７では、ＣＭ１００とＣＭ３００の機能例を説明する。
ＣＭ１００は、ボリューム管理部１１１、送受信制御部１１２および記憶部１１３を有する。
【００４６】
ボリューム管理部１１１の処理は、例えば、ＣＭ１００のプロセッサ１０１が所定のアプリケーションプログラムを実行することで実現される。ボリューム管理部１１１は、ホスト装置５００からの論理ボリュームに対するアクセスを制御する。例えば、ボリューム管理部１１１は、論理ボリュームに対応する物理記憶領域をＤＥ２００内に確保し、ホスト装置５００から論理ボリュームに対して書き込みが要求されたデータを、ＤＥ２００における対応する記憶領域に書き込む。また、ボリューム管理部１１１は、ＲＡＭ１０２をキャッシュメモリとして用いてホスト装置５００からの論理ボリュームに対するアクセスを制御してもよい。さらに、ボリューム管理部１１１は、論理ボリュームに含まれるデータのうち、ＣＭ３００からＣＡ１０６を介してコピー（読み出し）が要求されたデータを、ＤＥ２００（またはキャッシュメモリ）から読み出してＣＡ１０６に転送する。
【００４７】
送受信制御部１１２の処理は、例えば、ＣＡ１０６のプロセッサ１０６ａが所定のファームウェアプログラムを実行することで実現される。送受信制御部１１２は、ＣＭ３００からコピーのために読み出しが要求されたデータをボリューム管理部１１１から取得し、ＦＣフレームを用いてＣＭ３００に送信する。送受信制御部１１２は、読み出しが要求されたデータをデータブロックに分割し、各データブロックにＰＩを付加してＦＣフレームに格納する。
【００４８】
記憶部１１３は、例えば、ＣＡ１０６のメモリ１０６ｂに確保された記憶領域として実装される。記憶部１１３は、送受信制御部１１２がＣＭ３００に送信するデータを一時的に記憶する。
【００４９】
ＣＭ３００は、コピー制御部３１１、送受信制御部３１２、チェック処理部３１３および記憶部３１４を有する。
コピー制御部３１１の処理は、例えば、ＣＭ３００のメインプロセッサが所定のアプリケーションプログラムを実行することで実現される。コピー制御部３１１は、ＣＭ１００に作成された論理ボリュームのデータをバックアップするためのコピー処理を実行する。コピー制御部３１１は、論理ボリュームにおけるコピーすべき領域のアドレスを送受信制御部３１２に通知して、その領域のデータをＣＭ１００から読み出すように指示する。コピー制御部３１１は、指示に応じてＣＭ１００から読み出されて送信されたデータを、ＤＥ４００に書き込む。
【００５０】
送受信制御部３１２およびチェック処理部３１３の処理は、例えば、ＣＡ３０６のプロセッサ３０６ａが所定のファームウェアプログラムを実行することで実現される。送受信制御部３１２は、コピー制御部３１１からの指示に応じて、ＣＭ１００に対してＲＥＡＤコマンドを送信する。送受信制御部３１２は、ＲＥＡＤコマンドに応じてＣＭ１００から送信されたＦＣフレーム（データフレーム）について、チェック処理部３１３に異常がないかをチェックさせる。送受信制御部３１２は、異常がないと判定されたデータブロックをコピー制御部３１１に受け渡す。また、送受信制御部３１２は、異常があると判定されたデータブロックの再送を、ＣＭ１００に対して要求する。
【００５１】
チェック処理部３１３は、送受信制御部３１２がＣＭ１００から受信したデータについて、異常がないかをチェックする。具体的には、チェック処理部３１３は、ＣＭ１００から受信したＦＣフレームのＣＲＣを用いて、ＦＣフレームのペイロードに記録されたデータが異常であるか否かを判定する。ＦＣフレームのペイロードに記録されたデータを異常と判定した場合、チェック処理部３１３は、データブロックに付加されているＰＩのＣＲＣを用いて、当該データブロックが異常であるか否かを判定する。データブロックを異常と判定した場合、チェック処理部３１３は、データブロックに付加されているＰＩのＵｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅであるか否かを判定する。Ｕｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅの場合、チェック処理部３１３は、データブロックを０データとして修復する。Ｕｎｗｒｉｔｅ  Ｆｌａｇがｆａｌｓｅの場合、チェック処理部３１３は、データブロックを異常なデータブロックと判定する。
【００５２】
記憶部３１４は、例えば、ＣＡ３０６のメモリ３０６ｂに確保された記憶領域として実装される。記憶部３１４は、送受信制御部３１２がＣＭ１００から受信したデータを一時的に記憶する。
【００５３】
次に、論理ボリュームのデータをＣＭ３００がバックアップするためのＣＭ１００からＣＭ３００へのコピー処理について、フローチャートを用いて説明する。
図８は、コピー元のデータ送信処理の例を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。
【００５４】
（Ｓ１１）送受信制御部１１２は、コピー先のＣＭ３００からＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を受信する。ＲＥＡＤコマンドには、論理ボリュームを指定するＬＵＮ（Logical Unit Number）と、読み出し領域を示す先頭ＬＢＡおよびデータ長が含まれている。
【００５５】
（Ｓ１２）送受信制御部１１２は、ＲＥＡＤコマンドによって示される読み出し領域をボリューム管理部１１１に通知する。ボリューム管理部１１１は、通知された読み出し領域に記録されたデータをＤＥ２００（またはキャッシュメモリ）から読み出し、送受信制御部１１２に送信する。送受信制御部１１２は、読み出されたデータを取得して、記憶部１１３に格納する。
【００５６】
（Ｓ１３）送受信制御部１１２は、ステップＳ１１で受信したＦＣフレームのデータ部を参照して、データフレームのデータ部に格納するデータブロック数を判別する。送受信制御部１１２は、ステップＳ１１で読み出しが要求されたデータのうち、未送信のデータブロックを、判別したデータブロック数の分だけ先頭側から選択する。
【００５７】
通常は、ステップＳ１１で受信したＦＣフレームのデータ部には、データブロック数として最大の「３」が記録されている。この場合、送受信制御部１１２は、未送信のデータブロックを先頭側から３つ選択する。ただし、未送信のデータブロックが３つ未満の場合には、それらが全て選択され、選択されるデータブロックは３つ未満となる。一方、ステップＳ１１で受信したＲＥＡＤコマンドが再送を要求するものである場合、データブロック数として「２」または「１」が記録されている場合がある。
【００５８】
送受信制御部１１２は、選択した各データブロックにＰＩを付加する。具体的には、送受信制御部１１２は、データブロックを所定の定数で割った余りをＰＩのＣＲＣに記録する。送受信制御部１１２は、データブロックを参照し、ＰＩのＵｎｗｒｉｔｅ  Ｆｌａｇにデータブロックが０データであるか否かを示す情報を記録する。送受信制御部１１２は、データブロックの位置を示すＬＢＡをＰＩのＬＢＡに記録する。
【００５９】
送受信制御部１１２は、ＰＩが付加されたデータブロックを含むＦＣフレーム（データフレーム）を生成する。このとき、送受信制御部１１２は、ＰＩが付加されたデータブロックを含むペイロードのデータを所定の定数で割った余りを、ＦＣフレームのＣＲＣに記録する。また、送受信制御部１１２は、生成するＦＣフレームにおけるデータ部の長さを、ステップＳ１１で受信したＦＣフレームのデータ部に記録されたデータブロック数に応じて可変する。例えば、データブロック数が「１」である場合、送受信制御部１１２は、データ部の長さをデータブロックおよびＰＩが１組だけ記録される長さに設定する。
【００６０】
（Ｓ１４）送受信制御部１１２は、ＦＣフレームをＣＭ３００に送信する。
（Ｓ１５）送受信制御部１１２は、コピー先のＣＭ３００からステップＳ１４で送信したＦＣフレームに対する送信結果を受信する。
【００６１】
（Ｓ１６）送受信制御部１１２は、送信結果が正常か否かを判定する。正常の場合、処理をステップＳ１８に進める。異常の場合、処理をステップＳ１７に進める。
（Ｓ１７）送受信制御部１１２は、ステップＳ１１で受信したＲＥＡＤコマンドに応じたデータ送信処理を中断する。これにより、図８の処理は終了し、ＣＭ３００から新たなＲＥＡＤコマンドが送信されると、図８の処理が実行される。
【００６２】
（Ｓ１８）送受信制御部１１２は、ステップＳ１１で受信したＲＥＡＤコマンドによって読み出しが要求されたデータのデータブロックを全て送信済みであるか否かを判定する。送信済みの場合、処理を終了する。送信済みでない場合、処理をステップＳ１３に進める。
【００６３】
図９は、コピー先のデータ受信処理の例（その１）を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
（Ｓ２１）コピー制御部３１１は、論理ボリュームにおけるコピーすべき領域のアドレスを送受信制御部３１２に通知して、その領域のデータをＣＭ１００から読み出すように指示する。送受信制御部３１２は、コピー制御部３１１からの読み出し指示を受信する。
【００６４】
（Ｓ２２）送受信制御部３１２は、コピー元のＣＭ１００にＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）送信する。コマンドフレームには、コピー制御部３１１から指定されたＬＵＮ、先頭ＬＢＡおよびデータ長が含まれる。また、データフレームのデータ部に格納するデータブロック数として、最大の「３」が指定される。
【００６５】
（Ｓ２３）送受信制御部３１２は、コピー元のＣＭ１００からＦＣフレーム（データフレーム）を受信する。送受信制御部３１２は、受信したＦＣフレームを記憶部３１４に格納する。なお、このステップＳ２３で受信されるＦＣフレームは、ステップＳ２２または後述する図１１のステップＳ４４において送信されたＲＥＡＤコマンドに応じてＣＭ１００から送信されたものである。
【００６６】
（Ｓ２４）チェック処理部３１３は、ステップＳ２３で受信されたＦＣフレームに含まれるデータブロックに異常があるか否かを判定する。この判定処理の詳細については、図１２において説明する。チェック処理部３１３は、判定結果を送受信制御部３１２に通知する。
【００６７】
（Ｓ２５）送受信制御部３１２は、チェック処理部３１３から通知された判定結果に基づいて、ステップＳ２３で受信したＦＣフレームの中に異常と判定されたデータブロックが存在するかを判定する。存在する場合、処理を図１０のステップＳ３１に進める。存在しない場合、処理をステップＳ２６に進める。
【００６８】
（Ｓ２６）送受信制御部３１２は、ＦＣフレームが正常である旨をＣＭ１００に通知する。
（Ｓ２７）送受信制御部３１２は、記憶部３１４に格納されている正常なデータブロックをコピー制御部３１１に送信し、書き込みを指示する。コピー制御部３１１は、受信したデータブロックを、ＤＥ４００の所定領域に書き込む。これにより、受信したデータブロックに対応する論理ボリュームのデータがバックアップされる。なお、コピー制御部３１１は、受信したデータブロックをＣＭ３００のＲＡＭのキャッシュ領域に一旦書き込んだ後、これらのデータブロックをＤＥ４００に書き込んでもよい。
【００６９】
（Ｓ２８）送受信制御部３１２は、ステップＳ２２または後述する図１１のステップＳ４４において送信したＲＥＡＤコマンドによって読み出しを要求したデータのデータブロックを、全て受信済みであるか否かを判定する。全て受信済みの場合、処理を終了する。受信済みでないデータブロックがある場合、処理をステップＳ２３に進める。
【００７０】
図１０は、コピー先のデータ受信処理の例（その２）を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
（Ｓ３１）送受信制御部３１２は、ＦＣフレームが異常である旨をＣＭ１００に通知する。
【００７１】
（Ｓ３２）送受信制御部３１２は、ステップＳ２４で異常と判定されたデータブロックに付加されているＰＩのＬＢＡを確認する。
（Ｓ３３）送受信制御部３１２は、ＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を生成する。このＦＣフレームは、コピー元のＣＭ１００に対して、異常と判定されたデータブロックの再送要求を行うためのものである。ＦＣフレームのデータ部には、読み出し要求先のアドレスとして、ステップＳ２４で異常と判定されたデータブロックのＬＢＡが記録される。送受信制御部３１２は、生成したＦＣフレームをコピー元のＣＭ１００に送信する。これにより、異常が検出されたデータブロックの再送が要求される。また、送受信制御部３１２は、ステップＳ２４で異常と判定されたデータブロックを記憶部３１４から削除する。
【００７２】
ここで、例えば、ステップＳ２４で異常と判定されたデータブロックが１つのみの場合、生成されるＦＣフレームのデータ部には、そのデータブロックの先頭ＬＢＡと、１データブロック分のデータ長とが記録される。また、データブロックのデータ部に格納するデータブロック数として、「１」が記録される。
【００７３】
また、ステップＳ２４で異常と判定されたデータブロックが複数ある場合には、それらのデータブロックごとにＲＥＡＤコマンドが送信されてもよい。しかしながら、次のような処理を実行することで、ＲＥＡＤコマンドの発行数を抑制し、再送にかかる時間を短縮することができる。
【００７４】
ステップＳ２４で異常と判定されたデータブロックが２つ以上であり、かつ連続している場合、生成されるＦＣフレームのデータ部には、それらのデータブロックのうち先頭側のデータブロックの先頭ＬＢＡと、それらのデータブロック全体の長さを示すデータ長とが記録される。また、データブロックのデータ部に格納するデータブロック数としては、異常と判定されたデータブロックの数が記録される。
【００７５】
また、ステップＳ２４で異常と判定されたデータブロックが２つ以上であり、かつ、連続していない場合、送受信制御部３１２は、ステップＳ２３で受信したＦＣフレームに含まれるデータブロック全体の再送を要求する。すなわち、生成されるＦＣフレームのデータ部には、ステップＳ２３で受信したＦＣフレームに含まれるデータブロックのうち先頭側のデータブロックの先頭ＬＢＡと、それらのデータブロック全体の長さを示すデータ長とが記録される。また、データブロックのデータ部に格納するデータブロック数としては、ステップＳ２３で受信したＦＣフレームに含まれるデータブロックの数が記録される。
【００７６】
（Ｓ３４）送受信制御部３１２は、ＣＭ１００からＦＣフレーム（データフレーム）を受信する。受信したＦＣフレームには、再送要求したデータブロックが含まれている。また、再送されたデータブロックにはＰＩが付加されている。送受信制御部３１２は、受信したＦＣフレームを記憶部３１４に格納する。
【００７７】
（Ｓ３５）チェック処理部３１３は、ステップＳ３４で受信されたＦＣフレームに含まれるデータブロックに異常があるか否かを判定する。この判定処理の詳細については、図１２において説明する。チェック処理部３１３は、判定結果を送受信制御部３１２に通知する。
【００７８】
（Ｓ３６）送受信制御部３１２は、チェック処理部３１３から通知された判定結果に基づいて、ステップＳ３４で受信したＦＣフレームの中に異常と判定されたデータブロックが存在するかを判定する。存在する場合、処理をステップＳ３７に進める。存在しない場合、処理を図１１のステップＳ４１に進める。
【００７９】
（Ｓ３７）送受信制御部３１２は、ＦＣフレームが異常である旨をＣＭ１００に通知する。
（Ｓ３８）送受信制御部３１２は、データの受信に異常が発生した旨をコピー制御部３１１に通知し、処理を終了する。
【００８０】
以上の図１０の処理では、ステップＳ３３において、受信したＦＣフレームに含まれるデータブロックのうち異常のデータブロックのみが再送要求され、ステップＳ３４において、再送を要求した異常のデータブロックのみが受信される。これにより、ＦＣフレーム単位で再送を要求する場合より再送にかかる時間を短縮することができる。したがって、コピー制御部３１１から読み出しが要求されたデータ全体の受信にかかる時間を短縮することができる。
【００８１】
また、ステップＳ３３では、返信されるデータフレームのデータ部に含まれるデータブロック数として、読み出しを要求するデータブロック数と同じ数が指定される。これにより、ステップＳ３４で受信するＦＣフレームのデータ部の長さが必要最小限の長さに短縮される。したがって、再送にかかる時間を確実に短縮することができる。
【００８２】
なお、図１０の処理では、再送要求に応じて受信したＦＣフレームに異常のデータブロックが含まれる場合、送受信制御部３１２は、コピー制御部３１１にデータ異常を通知して処理を終了するものとした。しかし、例えば、再送要求に応じて受信したＦＣフレームに異常のデータブロックが含まれる場合、送受信制御部３１２は、正常なデータブロックを受信するまで所定回数だけ再送要求を送信してもよい。また、送受信制御部３１２は、ステップＳ３８でコピー制御部３１１に受信データの異常を通知した後、処理を終了せずに後述する図１１のステップＳ４３に進み、受信済みでない残りのデータの読み出し要求処理を実行してもよい。
【００８３】
図１１は、コピー先のデータ受信処理の例（その３）を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（Ｓ４１）送受信制御部３１２は、ＦＣフレームが正常である旨をＣＭ１００に通知する。
【００８４】
（Ｓ４２）送受信制御部３１２は、ステップＳ２３で受信したＦＣフレーム内のデータブロックのうち、ステップＳ２４で正常と判定されたデータブロックと、ステップＳ３４で受信したＦＣフレーム内のデータブロックとを記憶部３１４から読み出す。読み出されるデータブロック群は、ステップＳ２３で受信したＦＣフレーム内のデータブロックのうち正常に受信されなかったデータブロックを、再送されたデータブロックによってリカバリしたものとなる。送受信制御部３１２は、読み出したデータブロック群をコピー制御部３１１に送信し、書き込みを指示する。コピー制御部３１１は、受信したデータブロック群を、ＤＥ４００の所定領域に書き込む。これにより、読み出したデータブロック群に対応する論理ボリュームのデータがバックアップされる。
【００８５】
（Ｓ４３）送受信制御部３１２は、ステップＳ２１でコピー制御部３１１から読み出しが指示されたデータのデータブロックを、全て受信済みであるか否かを判定する。全て受信済みの場合、処理を終了する。受信済みでないデータブロックがある場合、処理をステップＳ４４に進める。
【００８６】
（Ｓ４４）送受信制御部３１２は、ステップＳ２１でコピー制御部３１１から読み出しが指示されたデータのデータブロックのうち、受信済みでない残りのデータブロックの読み出しを要求するためのＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を、ＣＭ１００に送信する。コマンドフレームには、受信済みでない残りのデータブロックが含まれるＬＵＮと、これらのデータブロックのうちの先頭ＬＢＡと、これらのデータブロック全体のデータ長とが含まれる。また、データフレームのデータ部に格納するデータブロック数として、最大の「３」が指定される。この後、処理を図９のステップＳ２３に進める。
【００８７】
図１２は、データチェック処理の例を示すフローチャートである。この図１２の処理は、図９のステップＳ２４および図１０のステップＳ３５の処理に対応する。以下、図１２に示す処理をステップ番号に沿って説明する。
【００８８】
（Ｓ５１）チェック処理部３１３は、受信したＦＣフレームのＣＲＣを用いて、ＦＣフレームのデータ部のデータが異常であるか否かを判定する。図１２の処理がステップＳ２４に対応する場合、ステップＳ２３で受信したＦＣフレームが判定処理の対象となる。図１２の処理がステップＳ３５に対応する場合、ステップＳ３４で受信したＦＣフレームが判定処理の対象となる。
【００８９】
チェック処理部３１３は、具体的には、ＦＣフレームのデータ部のデータを所定の定数で割った余りとＦＣフレームのＣＲＣが同じであるか否かにより、データ部のデータが異常であるかを判定する。当該余りとＣＲＣとが異なる場合はデータ部のデータが異常と判定し、処理をステップＳ５２に進める。当該余りとＣＲＣとが同じ場合はデータ部のデータが正常と判定し、図１２の処理を終了する。
【００９０】
（Ｓ５２）チェック処理部３１３は、Ｎに１を代入する。なお、Ｎは、データ部に含まれるデータブロックを指定するための変数である。
（Ｓ５３）チェック処理部３１３は、Ｎ番目のデータブロックに付加されているＰＩのＣＲＣを用いて、当該データブロックが異常であるか否かを判定する。詳細には、チェック処理部３１３は、データブロックを所定の定数で割った余りとＰＩのＣＲＣが同じであるか否かにより、データブロックが異常であるかを判定する。当該余りとＣＲＣとが異なる場合はデータブロックが異常と判定し、処理をステップＳ５４に進める。当該余りとＣＲＣとが同じ場合はデータブロックが正常と判定し、処理をステップＳ５７に進める。
【００９１】
（Ｓ５４）チェック処理部３１３は、Ｎ番目のデータブロックに付加されているＰＩのＵｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅであるか否かを判定する。ｔｒｕｅの場合、処理をステップＳ５５に進める。ｆａｌｓｅの場合、処理をステップＳ５６に進める。
【００９２】
（Ｓ５５）チェック処理部３１３は、記憶部３１４に記憶されているＮ番目のデータブロックを、未書き込み領域から読み出されたことを示すように修復する。例えば、チェック処理部３１３は、記憶部３１４に記憶されているＮ番目のデータブロックを、全ビットが０である０データに変換する。そして、処理をステップＳ５７に進める。
【００９３】
（Ｓ５６）チェック処理部３１３は、Ｎ番目のデータブロックを異常なデータブロックと判定する。
（Ｓ５７）チェック処理部３１３は、Ｎ番目のデータブロックがデータ部に含まれる最後のデータブロックであるか否かを判定する。最後のデータブロックの場合、図１２の処理を終了する。最後のデータブロックでない場合、処理をステップＳ５８に進める。
【００９４】
（Ｓ５８）チェック処理部３１３は、Ｎをインクリメントする。そして、処理をステップＳ５３に進める。
以上の図１２の処理では、ステップＳ５３でＰＩのＣＲＣを用いてデータブロックが異常と判定された場合でも、ステップＳ５４でＵｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅである場合には、異常なデータブロックと判定しないようにした。これにより、ＣＲＣを用いて異常と判定されたがそのビット内容がわかっているデータブロックを再送させずに済むため、再送させるデータ量を削減し、再送時間を短縮することができる。また、Ｕｎｗｒｉｔｅ  Ｆｌａｇがｔｒｕｅであるデータブロックを未書き込み領域から読み出されたことを示すように修復することで、コピー制御部３１１に正しいデータブロックを受け渡すことができる。
【００９５】
次に、ＣＭ３００とＣＭ１００との間の通信処理の例について、シーケンス図を用いて説明する。
図１３は、バックアップ処理の例（その１）を示すシーケンス図である。以下、図１３に示す処理をステップ番号に沿って説明する。
【００９６】
（ＳＴ１０１）ＣＭ３００は、データブロックＸ１〜Ｘ５の読み出しを要求するためのＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を、ＣＭ１００に送信する。なお、データブロックＸ１〜Ｘ５は、ある論理ボリューム上の連続したアドレス領域に記録されている。
【００９７】
（ＳＴ１０２）ＣＭ１００は、データブロックＸ１，Ｘ２，Ｘ３それぞれにＰＩを付加する。ＣＭ１００は、ＰＩが付加されたデータブロックＸ１，Ｘ２，Ｘ３を含むＦＣフレーム（データフレーム）を生成する。
【００９８】
（ＳＴ１０３）ＣＭ１００は、ＦＣフレームをＣＭ３００に送信する。
（ＳＴ１０４）ＣＭ３００は、受信したＦＣフレームのＣＲＣを用いて、ＦＣフレームのデータ部のデータが異常であるかをチェックする。ここでは、データ部のデータが異常であると判定されたとする。
【００９９】
（ＳＴ１０５）ＣＭ３００は、データブロックＸ１に付加されているＰＩのＣＲＣを用いて、データブロックＸ１が異常であるかをチェックする。ここでは、データブロックＸ１は異常でないと判定されたとする。
【０１００】
（ＳＴ１０６）ＣＭ３００は、データブロックＸ２に付加されているＰＩのＣＲＣを用いて、データブロックＸ２が異常であるかをチェックする。ここでは、データブロックＸ２は異常であると判定されたとする。この場合、次のステップＳＴ１０７の処理が実行される。
【０１０１】
（ＳＴ１０７）ＣＭ３００は、データブロックＸ２に付加されているＰＩのＵｎｗｒｉｔｅ  Ｆｌａｇを確認する。ここでは、Ｕｎｗｒｉｔｅ  Ｆｌａｇがｆａｌｓｅであったとする。
【０１０２】
（ＳＴ１０８）ステップＳＴ１０７の確認の結果から、ＣＭ３００は、データブロックＸ２を異常なデータブロックと判定する。
（ＳＴ１０９）ＣＭ３００は、データブロックＸ３に付加されているＰＩのＣＲＣを用いて、データブロックＸ３が異常であるかをチェックする。ここでは、データブロックＸ３は異常でないと判定されたとする。
【０１０３】
図１４は、バックアップ処理の例（その２）を示すシーケンス図である。以下、図１４に示す処理をステップ番号に沿って説明する。
（ＳＴ１１１）ＣＭ３００は、ＦＣフレームが異常である旨をＣＭ１００に通知する。
【０１０４】
（ＳＴ１１２）ＣＭ３００は、異常と判定されたデータブロックＸ２の再送を要求するためのＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を、ＣＭ１００に送信する。
【０１０５】
（ＳＴ１１３）ＣＭ１００は、データブロックＸ２にＰＩを付加する。ＣＭ１００は、ＰＩが付加されたデータブロックＸ２を含むＦＣフレーム（データフレーム）を生成する。
【０１０６】
（ＳＴ１１４）ＣＭ１００は、ＦＣフレームをＣＭ３００に送信する。
（ＳＴ１１５）ＣＭ３００は、受信したＦＣフレームのＣＲＣを用いて、ＦＣフレームのデータ部のデータが異常であるかをチェックする。ここでは、データ部のデータが異常でないと判定されたとする。
【０１０７】
（ＳＴ１１６）ＣＭ３００は、ＦＣフレームが正常である旨をＣＭ１００に通知する。
（ＳＴ１１７）ＣＭ３００は、ステップＳＴ１０１で読み出しを要求したデータブロックのうち、受信済みでないデータブロックＸ４，Ｘ５の読み出しを要求するためのＲＥＡＤコマンドを含むＦＣフレーム（コマンドフレーム）を、ＣＭ１００に送信する。
【０１０８】
（ＳＴ１１８）ＣＭ１００は、データブロックＸ４，Ｘ５それぞれにＰＩを付加する。ＣＭ１００は、ＰＩが付加されたデータブロックＸ４，Ｘ５を含むＦＣフレーム（データフレーム）を生成する。
【０１０９】
（ＳＴ１１９）ＣＭ１００は、ＦＣフレームをＣＭ３００に送信する。
（ＳＴ１２０）ＣＭ３００は、ＦＣフレームのＣＲＣを用いて、ＦＣフレームのデータ部のデータが異常であるかをチェックする。ここでは、データ部のデータが異常でないと判定されたとする。
【０１１０】
（ＳＴ１２１）ＣＭ３００は、ＦＣフレームが正常である旨をＣＭ１００に通知する。
以上説明した第２の実施の形態によれば、ＦＣフレームを用いてＣＭ３００に送信される読み出しデータにおいて、データブロック毎にＣＲＣを含むＰＩが付加される。ＣＭ３００は、受信したＦＣフレームのデータ部のデータについて異常を検出した場合、ＰＩのＣＲＣを用いて異常なデータブロックを検出する。ＣＭ３００は、異常と検出したデータブロックのみをＣＭ１００に再送要求する。
【０１１１】
これにより、ＦＣフレームのＣＲＣだけに基づいて再送要求を行う場合と比較して、再送にかかる時間を短縮することができる。すなわち、ＦＣフレームのＣＲＣだけに基づく場合、ＦＣフレーム単位で再送要求が行われる。この場合、ＦＣフレームに含まれるデータブロックの中に正常なデータブロックが含まれていても、ＦＣフレーム内の全てのデータブロックについて再送が要求される。これにより、正常に受信できたデータブロックについても再送されることから、再送に余計な時間がかかる。これに対して、第２の実施の形態によれば、異常と判定されたデータブロックのみをＣＭ１００に再送要求するので、再送されるデータ量が削減され、再送時間を短くできる。その結果、コピー制御部３１１から読み出しが要求されたデータ全体の受信にかかる時間を短縮することができる。
【０１１２】
なお、第２の実施の形態では、送受信制御部３１２およびチェック処理部３１３の処理がＣＡ３０６によって実現される例について説明した。しかし、これに限らず、例えば、送受信制御部３１２およびチェック処理部３１３の処理は、ＣＭ３００のプロセッサが所定のプログラムを実行することによって実現されてもよい。この場合、送受信制御部３１２は、ＣＡ３０６を介してＣＭ１００と通信する。同様に、送受信制御部１１２の処理は、ＣＭ１００のプロセッサ１０１が所定のプログラムを実行することによって実現されてもよい。この場合、送受信制御部１１２は、ＣＡ１０６を介して送受信制御部３１２と通信する。
【０１１３】
また、第２の実施の形態では、ＣＭ１００に格納されているデータをＣＭ３００に送信する場合を例示した。これに限らず、例えば、ホスト装置５００とＣＭ１００との間で行われる通信にも、第２の実施の形態に示したデータ異常のチェックおよび再送の手順を適用可能である。この場合、ホスト装置５００とＣＭ１００との間の通信では、ＦＣフレームが用いられ、ＦＣフレームに含まれるデータブロックにはＰＩが付加される。そして、ＣＭ１００は、例えば、ホスト装置５００から送信されたＦＣフレームのデータ部に異常を検出した場合、ＰＩのＣＲＣを用いて異常なデータブロックを検出する。ＣＭ１００は、異常と検出したデータブロックのみをホスト装置５００に再送要求する。
【０１１４】
なお、第１の実施の形態の情報処理は、受信装置２に用いられるプロセッサに、プログラムを実行させることで実現できる。第２の実施の形態のＣＭ１００の情報処理は、ＣＡ１０６が有するプロセッサ１０６ａまたはＣＭ１００が有するプロセッサ１０１にプログラムを実行させることで実現できる。第２の実施の形態のＣＭ３００の情報処理は、ＣＡ３０６が有するプロセッサ３０６ａまたはＣＭ３００が有するプロセッサにプログラムを実行させることで実現できる。これらのプログラムは、コンピュータ読み取り可能な記録媒体に記録できる。
【０１１５】
例えば、プログラムを記録した可搬型記録媒体を配布することで、プログラムを流通させることができる。また、例えば、ＣＭ３００が有するコピー制御部３１１、送受信制御部３１２およびチェック処理部３１３に相当する機能を実現するプログラムを別個のプログラムとし、各プログラムを別個に配布してもよい。ＣＭ３００が有するコピー制御部３１１、送受信制御部３１２およびチェック処理部３１３の機能が別個のコンピュータにより実現されてもよい。コンピュータは、例えば、可搬型記録媒体に記録されたプログラムを、ＲＡＭやＳＳＤなどの自己の記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１１６】
１  送信装置
２  受信装置
２ａ  判定部
２ｂ  再送要求部
３  ネットワーク
４ａ  データグループ
４ｂ，６ａ，６ｂ  チェック符号
５ａ，５ｂ  データブロック
７  再送要求
Ｓ１，Ｓ４  ステップ
【図１】
0006565506.tif 000002
【図２】
0006565506.tif 000003
【図３】
0006565506.tif 000004
【図４】
0006565506.tif 000005
【図５】
0006565506.tif 000006
【図６】
0006565506.tif 000007
【図７】
0006565506.tif 000008
【図８】
0006565506.tif 000009
【図９】
0006565506.tif 000010
【図１０】
0006565506.tif 000011
【図１１】
0006565506.tif 000012
【図１２】
0006565506.tif 000013
【図１３】
0006565506.tif 000014
【図１４】
0006565506.tif 000015