(57)【特許請求の範囲】
【請求項１】
複数の受信計算機それぞれに割り当てられるインデックス値を定義するインデックス情報を記憶するインデックス情報記憶部と、
前記複数の受信計算機それぞれからインデックス値の割り当てを要求する割り当て要求パケットを受信し、前記割り当て要求パケットを受信した順番を前記割り当て要求パケットを送信した受信計算機に割り当てるインデックス値にして前記インデックス情報を生成し、前記受信計算機に割り当てる前記インデックス値を含んだ割り当て応答パケットを前記受信計算機へ送信する割り当て部と、
ペイロードデータを含んだデータパケットを前記複数の受信計算機へ送信するデータパケット送信部と、
前記データパケットを受信した受信計算機から、前記データパケットを受信したことを通知する受信確認パケットを受信する受信確認パケット受信部とを備え、
前記データパケット送信部は、
前記受信確認パケット受信部によって受信された受信確認パケットを送信した受信計算機を受信済み計算機として判定し、前記複数の受信計算機の中に前記受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定し、前記複数の受信計算機の中に前記未受信計算機が存在する場合、前記受信済み計算機に割り当てられるインデックス値を前記インデックス情報に基づいて判定し、前記ペイロードデータと、インデックス値によって特定される複数のフラグ領域とを含み、前記複数のフラグ領域のうち、前記受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの受信済みを表す受信済みフラグ値が含まれ、前記複数のフラグ領域のうち、前記未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの未受信を表す未受信フラグ値が含まれたデータパケットを、前記複数の受信計算機へ送信する
ことを特徴とする送信計算機。
【請求項２】
前記インデックス情報は、前記複数の受信計算機それぞれの識別子を順序付けて設定した情報であり、
前記データパケット送信部は、前記受信済み計算機の識別子が前記インデックス情報に設定されている順番を前記受信済み計算機に割り当てられるインデックス値として判定する
ことを特徴とする請求項１記載の送信計算機。
【請求項３】
前記送信計算機は、
前記複数の受信計算機に対して応答パケットを要求する要求パケットを送信する要求パケット送信部と、
要求パケットを受信した受信計算機から応答パケットを受信する応答パケット受信部とを備え、
前記割り当て部は、インデックス値が割り当てられている受信計算機のうち前記応答パケット受信部によって応答パケットが受信されなかった受信計算機を不応答計算機として判定し、前記応答パケット受信部によって前記応答パケットが受信された受信計算機のうちインデックス値が割り当てられていない受信計算機を新規計算機として判定し、前記不応答計算機のインデックス値を前記新規計算機に割り当てて前記インデックス情報を更新し、前記新規計算機に割り当てる前記インデックス値を含んだインデックス値通知パケットを前記新規計算機へ送信する
ことを特徴とする請求項１または請求項２に記載の送信計算機。
【請求項４】
前記データパケット送信部は、
前記割り当て部によって前記割り当て要求パケットが受信された受信計算機の台数に基づいて前記複数のフラグ領域を構成するフラグ領域の個数を算出し、算出した個数のフラグ領域が前記複数のフラグ領域として含まれる前記データパケットを送信する
ことを特徴とする請求項１から請求項３のいずれか１項に記載の送信計算機。
【請求項５】
前記データパケット送信部は、
前記割り当て部によって前記割り当て要求パケットが受信された受信計算機の台数に基づいて前記複数のフラグ領域の合計サイズを算出するためのフラグ領域サイズ情報を生成し、生成したフラグ領域サイズ情報が含まれる前記データパケットを送信する
ことを特徴とする請求項４記載の送信計算機。
【請求項６】
インデックス値が割り当てられて、送信計算機から送信されるデータパケットを受信し、前記データパケットを受信したことを通知する受信確認パケットを前記送信計算機へ送信する受信計算機であって、
割り当てられたインデックス値を割り当て値として記憶する割り当て値記憶部と、
インデックス値の割り当てを要求する割り当て要求パケットを前記送信計算機へ送信する割り当て要求パケット送信部と、
前記送信計算機からインデックス値を含んだ割り当て応答パケットを受信し、受信した割り当て応答パケットに含まれるインデックス値を前記割り当て値として前記割り当て値記憶部に記憶する割り当て応答パケット受信部と、
インデックス値によって特定される複数のフラグ領域を含み、前記複数のフラグ領域それぞれに特定のフラグ値が設定されるデータパケットを、前記送信計算機から受信するデータパケット受信部と、
前記データパケット受信部によって受信された前記データパケットに含まれる前記複数のフラグ領域のうち前記割り当て値によって特定されるフラグ領域を割り当て領域として判定し、前記割り当て領域に設定されているフラグ値が、前記送信計算機が前記受信確認パケットを受信していないことを表す未受信フラグ値であるか否かを判定する割り当て領域判定部と、
前記割り当て領域判定部によって、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であると判定された場合、前記受信確認パケットを前記送信計算機へ送信する受信確認パケット送信部と
を備えることを特徴とする受信計算機。
【請求項７】
複数の受信計算機それぞれに割り当てられるインデックス値を定義するインデックス情報を記憶するインデックス情報記憶部と、割り当て部と、データパケット送信部と、受信確認パケット受信部とを備える送信計算機によって実行する送信方法であって、
前記割り当て部が、前記複数の受信計算機それぞれからインデックス値の割り当てを要求する割り当て要求パケットを受信し、前記割り当て要求パケットを受信した順番を前記割り当て要求パケットを送信した受信計算機に割り当てるインデックス値にして前記インデックス情報を生成し、前記受信計算機に割り当てる前記インデックス値を含んだ割り当て応答パケットを前記受信計算機へ送信し、
前記データパケット送信部が、ペイロードデータを含んだデータパケットを前記複数の受信計算機へ送信し、
前記受信確認パケット受信部が、前記データパケットを受信した受信計算機から、前記データパケットを受信したことを通知する受信確認パケットを受信し、
前記データパケット送信部が、
前記受信確認パケット受信部によって受信された受信確認パケットを送信した受信計算機を受信済み計算機として判定し、前記複数の受信計算機の中に前記受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定し、前記複数の受信計算機の中に前記未受信計算機が存在する場合、前記受信済み計算機に割り当てられるインデックス値を前記インデックス情報に基づいて判定し、前記ペイロードデータと、インデックス値によって特定される複数のフラグ領域とを含み、前記複数のフラグ領域のうち、前記受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの受信済みを表す受信済みフラグ値が含まれ、前記複数のフラグ領域のうち、前記未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの未受信を表す未受信フラグ値が含まれたデータパケットを、前記複数の受信計算機へ送信する
ことを特徴とする送信方法。
【請求項８】
請求項７記載の送信方法をコンピュータに実行させることを特徴とする送信プログラム。
【請求項９】
インデックス値が割り当てられ、送信計算機から送信されるデータパケットを受信し、前記データパケットを受信したことを通知する受信確認パケットを前記送信計算機へ送信する受信計算機によって実行する受信方法であって、
前記受信計算機は、割り当てられたインデックス値を割り当て値として記憶する割り当て値記憶部と、割り当て要求パケット送信部と、割り当て応答パケット受信部と、データパケット受信部と、割り当て領域判定部と、受信確認パケット送信部とを備え、
前記割り当て要求パケット送信部は、インデックス値の割り当てを要求する割り当て要求パケットを前記送信計算機へ送信し、
前記割り当て応答パケット受信部は、前記送信計算機からインデックス値を含んだ割り当て応答パケットを受信し、受信した割り当て応答パケットに含まれるインデックス値を前記割り当て値として前記割り当て値記憶部に記憶し、
前記データパケット受信部が、インデックス値によって特定される複数のフラグ領域を含み、前記複数のフラグ領域それぞれに特定のフラグ値が設定されるデータパケットを、前記送信計算機から受信し、
前記割り当て領域判定部が、前記データパケット受信部によって受信された前記データパケットに含まれる前記複数のフラグ領域のうち前記割り当て値によって特定されるフラグ領域を割り当て領域として判定し、前記割り当て領域に設定されているフラグ値が、前記送信計算機が前記受信確認パケットを受信していないことを表す未受信フラグ値であるか否かを判定し、
前記受信確認パケット送信部が、前記割り当て領域判定部によって、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であると判定された場合、前記受信確認パケットを前記送信計算機へ送信する
ことを特徴とする受信方法。
【請求項１０】
請求項９記載の受信方法をコンピュータに実行させることを特徴とする受信プログラム。
【請求項１１】
送信計算機と複数の受信計算機とを有する通信システムにおいて、
前記送信計算機は、
前記複数の受信計算機それぞれに割り当てられるインデックス値を定義するインデックス情報を記憶するインデックス情報記憶部と、
前記複数の受信計算機それぞれからインデックス値の割り当てを要求する割り当て要求パケットを受信し、前記割り当て要求パケットを受信した順番を前記割り当て要求パケットを送信した受信計算機に割り当てるインデックス値にして前記インデックス情報を生成し、前記受信計算機に割り当てる前記インデックス値を含んだ割り当て応答パケットを前記受信計算機へ送信する割り当て部と、
ペイロードデータを含んだデータパケットを前記複数の受信計算機へ送信するデータパケット送信部と、
前記データパケットを受信した受信計算機から、前記データパケットを受信したことを通知する受信確認パケットを受信する受信確認パケット受信部とを備え、
前記データパケット送信部は、
前記受信確認パケット受信部によって受信された受信確認パケットを送信した受信計算機を受信済み計算機として判定し、前記複数の受信計算機の中に前記受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定し、前記複数の受信計算機の中に前記未受信計算機が存在する場合、前記受信済み計算機に割り当てられるインデックス値を前記インデックス情報に基づいて判定し、前記ペイロードデータと、インデックス値によって特定される複数のフラグ領域とを含み、前記複数のフラグ領域のうち、前記受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの受信済みを表す受信済みフラグ値が含まれ、前記複数のフラグ領域のうち、前記未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの未受信を表す未受信フラグ値が含まれたデータパケットを、前記複数の受信計算機へ送信し、
前記受信計算機は、
割り当てられたインデックス値を割り当て値として記憶する割り当て値記憶部と、
インデックス値の割り当てを要求する割り当て要求パケットを前記送信計算機へ送信する割り当て要求パケット送信部と、
前記送信計算機からインデックス値を含んだ割り当て応答パケットを受信し、受信した割り当て応答パケットに含まれるインデックス値を前記割り当て値として前記割り当て値記憶部に記憶する割り当て応答パケット受信部と、
前記送信計算機から前記データパケットを受信するデータパケット受信部と、
前記データパケット受信部によって受信された前記データパケットに含まれる前記複数のフラグ領域のうち前記割り当て値によって特定されるフラグ領域を割り当て領域として判定し、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であるか否かを判定する割り当て領域判定部と、
前記割り当て領域判定部によって、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であると判定された場合、前記受信確認パケットを前記送信計算機へ送信する受信確認パケット送信部と
を備える
ことを特徴とする通信システム。
【請求項１２】
送信計算機と複数の受信計算機とを有する通信システムが実行する通信方法において、
前記送信計算機は、前記複数の受信計算機それぞれに割り当てられるインデックス値を定義するインデックス情報を記憶するインデックス情報記憶部と、割り当て部と、データパケット送信部と、受信確認パケット受信部とを備え、
前記割り当て部が、前記複数の受信計算機それぞれからインデックス値の割り当てを要求する割り当て要求パケットを受信し、前記割り当て要求パケットを受信した順番を前記割り当て要求パケットを送信した受信計算機に割り当てるインデックス値にして前記インデックス情報を生成し、前記受信計算機に割り当てる前記インデックス値を含んだ割り当て応答パケットを前記受信計算機へ送信し、
前記データパケット送信部が、ペイロードデータを含んだデータパケットを前記複数の受信計算機へ送信し、
前記受信確認パケット受信部が、前記データパケットを受信した受信計算機から、前記データパケットを受信したことを通知する受信確認パケットを受信し、
前記データパケット送信部が、
前記受信確認パケット受信部によって受信された受信確認パケットを送信した受信計算機を受信済み計算機として判定し、前記複数の受信計算機の中に前記受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定し、前記複数の受信計算機の中に前記未受信計算機が存在する場合、前記受信済み計算機に割り当てられるインデックス値を前記インデックス情報に基づいて判定し、前記ペイロードデータと、インデックス値によって特定される複数のフラグ領域とを含み、前記複数のフラグ領域のうち、前記受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの受信済みを表す受信済みフラグ値が含まれ、前記複数のフラグ領域のうち、前記未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの未受信を表す未受信フラグ値が含まれたデータパケットを、前記複数の受信計算機へ送信し、
前記受信計算機は、割り当てられたインデックス値を割り当て値として記憶する割り当て値記憶部と、割り当て要求パケット送信部と、割り当て応答パケット受信部と、データパケット受信部と、割り当て領域判定部と、受信確認パケット送信部とを備え、
前記割り当て要求パケット送信部は、インデックス値の割り当てを要求する割り当て要求パケットを前記送信計算機へ送信し、
前記割り当て応答パケット受信部は、前記送信計算機からインデックス値を含んだ割り当て応答パケットを受信し、受信した割り当て応答パケットに含まれるインデックス値を前記割り当て値として前記割り当て値記憶部に記憶し、
前記データパケット受信部が、前記送信計算機から前記データパケットを受信し、
前記割り当て領域判定部が、前記データパケット受信部によって受信された前記データパケットに含まれる前記複数のフラグ領域のうち前記割り当て値によって特定されるフラグ領域を割り当て領域として判定し、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であるか否かを判定し、
前記受信確認パケット送信部が、前記割り当て領域判定部によって、前記割り当て領域に設定されているフラグ値が前記未受信フラグ値であると判定された場合、前記受信確認パケットを前記送信計算機へ送信する
ことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチキャストで通信を行う送信計算機、受信計算機、送信方法、送信プログラム、受信方法、受信プログラム、通信システムおよび通信方法に関するものである。
【背景技術】
【０００２】
従来のリライアブルＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）マルチキャスト通信において、送信計算機は全ての受信計算機がデータパケットを受信するまでデータパケットを再送する。
【０００３】
つまり、送信計算機はデータパケットをマルチキャストで全ての受信計算機へ送信し、各受信計算機はデータを受信してＡＣＫパケット（受信確認通知）を送信計算機へ送信する。
そして、送信計算機は、各受信計算機からのＡＣＫパケットを一定時間待って、全ての受信計算機からＡＣＫパケットが届かなければデータパケットをマルチキャストで再送する。ＡＣＫパケットは自計算機がデータパケットを受信したことを送信計算機に通知するためのパケットである。
【０００４】
この手法では、送信計算機がデータパケットを再送するたびに全ての受信計算機がＡＣＫパケットを返信するため、ネットワークに多くのＡＣＫパケットが流れることになる。
しかし、実際には、送信計算機にＡＣＫパケットが届いた場合、ＡＣＫパケットの送信元である受信計算機がＡＣＫパケットを再び返信する必要はない。
【０００５】
特許文献１は、以下のような、リライアブルＩＰマルチキャスト通信のＡＣＫ処理方式を開示している。
送信計算機は、受信計算機を一意に判別できる識別子と、ＡＣＫパケットの受信有無を示すフラグと、を対応付けてデータパケットのヘッダに設定し、データパケットを送信する。
送信計算機が受信計算機からＡＣＫパケットを受信済みである場合、送信計算機は、ヘッダ内で受信計算機のＩＰアドレスに対応付けられたフラグにＡＣＫパケットの受信済みを示すフラグ値を設定してデータパケットを再送する。
受信計算機は、データパケットを受信し、受信したデータパケットのヘッダ内で自計算機の識別子に対応付けられたフラグにＡＣＫパケットの受信済みを示すフラグ値が設定されている場合、ＡＣＫパケットを送信しない。
これにより、ネットワークに流れるＡＣＫパケットの数を減らすことができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０９−２６１２５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に開示されたＡＣＫ処理方式では、データパケットのヘッダに、受信計算機の識別子とＡＣＫパケットの受信有無を示すフラグとを受信計算機の台数と同じ数だけ含める必要がある。
例えば、データパケットのヘッダに設定する識別子（ＩＰアドレス）が４バイトであり、フラグが１バイトである場合、１台の受信計算機あたり合計５バイトをデータパケットのヘッダに確保する必要がある。また、受信計算機の台数が１００台である場合、５００バイト（＝５×１００）をデータパケットのヘッダに確保する必要がある。つまり、データパケットのヘッダサイズは、各受信計算機用の識別子とフラグとを確保するために５００バイトも大きくなる。
【０００８】
本発明は、例えば、データパケットのヘッダに受信計算機の識別子を設定せずにＡＣＫパケットの数を減らすことができるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の送信計算機は、
複数の受信計算機それぞれに割り当てられるインデックス値を定義するインデックス情報を記憶するインデックス情報記憶部と、
ペイロードデータを含んだデータパケットを前記複数の受信計算機へ送信するデータパケット送信部と、
前記データパケットを受信した受信計算機から、前記データパケットを受信したことを通知する受信確認パケットを受信する受信確認パケット受信部とを備える。
前記データパケット送信部は、
前記受信確認パケット受信部によって受信された受信確認パケットを送信した受信計算機を受信済み計算機として判定し、前記複数の受信計算機の中に前記受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定し、前記複数の受信計算機の中に前記未受信計算機が存在する場合、前記受信済み計算機に割り当てられるインデックス値を前記インデックス情報に基づいて判定し、前記ペイロードデータと、インデックス値によって特定される複数のフラグ領域とを含み、前記複数のフラグ領域のうち、前記受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの受信済みを表す受信済みフラグ値が含まれ、前記複数のフラグ領域のうち、前記未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、前記受信確認パケットの未受信を表す未受信フラグ値が含まれたデータパケットを、前記複数の受信計算機へ送信する。
【発明の効果】
【００１０】
本発明によれば、インデックス情報によって受信済み計算機のフラグ領域を特定でき、受信済み計算機のフラグ領域に受信済みフラグ値を含ませることができるため、データパケットのヘッダに受信計算機の識別子を設定せずにＡＣＫパケットの数を減らすことができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１における通信システム１００の概要図。
【図２】実施の形態１における通信システム１００の概要図。
【図３】実施の形態１における送信計算機２００の機能構成図。
【図４】実施の形態１における受信計算機３００の機能構成図。
【図５】実施の形態１における受信計算機管理テーブル２９１の一例を示す図。
【図６】実施の形態１における自計算機番号管理テーブル３９１の一例を示す図。
【図７】実施の形態１における送信計算機２００の受信計算機検出処理を示すフローチャート。
【図８】実施の形態１における受信計算機３００の送信計算機検出処理を示すフローチャート。
【図９】実施の形態１における通信システム１００の前処理の具体例を示す図。
【図１０】実施の形態１における通信システム１００の前処理の具体例を示す図。
【図１１】実施の形態１における通信システム１００の前処理の具体例を示す図。
【図１２】実施の形態１における送信計算機２００のデータパケット送信処理を示すフローチャート。
【図１３】実施の形態１におけるデータパケット１０１のフォーマットの一例を示す図。
【図１４】実施の形態１における受信計算機３００のデータパケット受信処理を示すフローチャート。
【図１５】実施の形態１におけるデータパケット１０１の通信処理の具体例を示す図。
【図１６】実施の形態１におけるデータパケット１０１の通信処理の具体例を示す図。
【図１７】実施の形態１におけるデータパケット１０１の通信処理の具体例を示す図。
【図１８】実施の形態１におけるデータパケット１０１の通信処理の具体例を示す図。
【図１９】実施の形態１における送信計算機２００および受信計算機３００のハードウェア資源の一例を示す図。
【図２０】実施の形態２におけるデータパケット１０１のフォーマットの一例を示す図。
【図２１】実施の形態３における送信計算機２００の定期検出処理を示すフローチャート。
【図２２】実施の形態３における送信計算機２００の定期検出処理の別例を示すフローチャート。
【発明を実施するための形態】
【００１２】
実施の形態１．
リライアブルＩＰマルチキャスト通信の形態について説明する。
リライアブルＩＰマルチキャスト通信とは、送信計算機がデータパケットをマルチキャストで送信し、マルチキャストのグループに属する全ての受信計算機からＡＣＫパケットを受信し終わるまでデータパケットの再送を繰り返す通信である。
【００１３】
図１、図２は、実施の形態１における通信システム１００の概要図である。
実施の形態１における通信システム１００の概要について、図１、図２に基づいて説明する。
【００１４】
通信システム１００は、リライアブルＩＰマルチキャスト通信を行うシステムである。
【００１５】
通信システム１００は、ネットワーク１０９を介して通信を行う複数の計算機（コンピュータともいう）を備える。
【００１６】
以下、データパケット１０１をマルチキャストで送信する計算機を「送信計算機２００」という。データパケット１０１は、アプリケーションデータ（ＡＰデータ）を送信するためのパケットである。
また、マルチキャストのグループに属して、データパケット１０１を受信してＡＣＫパケット１０２を返信する計算機を「受信計算機３００」という。ＡＣＫパケット１０２（受信確認パケットの一例）はデータパケット１０１を受信したことを送信計算機２００に通知するためのパケットである。
【００１７】
以下に、図１、図２に示す（１）から（９）の手順を説明する。
（１）送信計算機２００は、ＡＣＫフラグフィールドをヘッダに含んだデータパケット１０１をマルチキャストで送信する。
【００１８】
ＡＣＫフラグフィールド（単に、フラグフィールドともいう）は、複数の受信計算機３００−１，２，３に割り当てられた複数のフラグビットを有する。
フラグビットのビット値「０」は、送信計算機２００が当該受信計算機３００からＡＣＫパケット１０２を受信していないことを意味する。フラグビットの初期値は「０」である。
フラグビットのビット値「１」は、送信計算機２００が当該受信計算機３００からＡＣＫパケット１０２を受信済みであることを意味する。
【００１９】
ここで、１番目のフラグビットは受信計算機３００−１に割り当てられ、２番目のフラグビットは受信計算機３００−２に割り当てられ、３番目のフラグビットは受信計算機３００−３に割り当てられているものとする。
【００２０】
（２）受信計算機３００−１は、データパケット１０１を受信してＡＣＫフラグフィールドの１番目のフラグビット（受信計算機３００−１に割り当てられたフラグビット）のビット値を確認する。ビット値は「０」である。
受信計算機３００−１はＡＣＫパケット１０２を返信し、送信計算機２００は受信計算機３００−１からＡＣＫパケット１０２を受信する。
【００２１】
（３）受信計算機３００−２は、データパケット１０１を受信してＡＣＫフラグフィールドの２番目のフラグビット（受信計算機３００−２に割り当てられたフラグビット）のビット値を確認する。ビット値は「０」である。
受信計算機３００−２はＡＣＫパケット１０２を返信するが、ＡＣＫパケット１０２は送信計算機２００に到達せず、送信計算機２００は受信計算機３００−２からＡＣＫパケット１０２を受信できない。
【００２２】
（４）受信計算機３００−３にはデータパケット１０１が到達せず、受信計算機３００−３はＡＣＫパケット１０２を送信しない。したがって、送信計算機２００は受信計算機３００−３からＡＣＫパケット１０２を受信できない。
【００２３】
（５）送信計算機２００は、受信計算機３００−１からＡＣＫパケット１０２を受信したためＡＣＫフラグフィールドの１番目のフラグビット（受信計算機３００−１に割り当てられたフラグビット）のビット値を「０」から「１」に変更する。
【００２４】
（６）送信計算機２００は、受信計算機３００−２，３からＡＣＫパケット１０２を受信していないため、データパケット１０１をマルチキャストで再送する。
【００２５】
（７）受信計算機３００−１は、データパケット１０１を受信してＡＣＫフラグフィールドの１番目のフラグビットのビット値を確認する。ビット値が「１」であるため、受信計算機３００−１はＡＣＫパケット１０２を返信しない。これにより、ＡＣＫパケット１０２の通信量を減らすことができる。
【００２６】
（８）受信計算機３００−２は、データパケット１０１を受信してＡＣＫフラグフィールドの２番目のフラグビットのビット値「０」を確認してＡＣＫパケット１０２を返信する。
同様に、受信計算機３００−３はデータパケット１０１を受信してＡＣＫフラグフィールドの３番目のフラグビットのビット値「０」を確認してＡＣＫパケット１０２を返信する。
送信計算機２００は受信計算機３００−２，３からＡＣＫパケット１０２を受信する。送信計算機２００は全ての受信計算機３００−１，２，３からＡＣＫパケット１０２を受信済みであるため、データパケット１０１の再送を行わずに送信処理を完了する。
【００２７】
図３は、実施の形態１における送信計算機２００の機能構成図である。
実施の形態１における送信計算機２００の機能構成について、図３に基づいて説明する。
【００２８】
送信計算機２００は、データ送信部２１０と、計算機検出部２２０と、アプリケーション部２３０と、計算機記憶部２９０とを備える。
【００２９】
計算機検出部２２０（割り当て部の一例）は、通信システム１００内の複数の受信計算機３００を検出し、検出した複数の受信計算機３００それぞれに割り当てビット番号（インデックス値の一例）を割り当てる。
割り当てビット番号は、データパケット１０１内の複数のフラグビットのうちいずれかのフラグビットを特定する番号である。
【００３０】
アプリケーション部２３０は、所定のアプリケーションプログラムを実行してアプリケーションデータ（ペイロードデータの一例）を生成する。
【００３１】
データ送信部２１０（データパケット送信部、受信確認パケット受信部の一例）は、複数のフラグビットと、アプリケーション部２３０によって生成されたアプリケーションデータ（ペイロードデータの一例）とを含んだデータパケット１０１を複数の受信計算機３００へマルチキャストで送信する。
データ送信部２１０は、データパケット１０１を受信した受信計算機３００から送信されるＡＣＫパケット１０２を受信する。
ＡＣＫパケット１０２（受信確認パケットの一例）は、受信計算機３００がデータパケット１０１を受信したことを受信計算機３００から送信計算機２００に通知するためのパケットである。
ここで、受信したＡＣＫパケット１０２を送信した受信計算機３００を「受信済み計算機（または受信確認済み計算機）」といい、複数の受信計算機３００のうち受信済み計算機以外の受信計算機を「未受信計算機（または受信未確認計算機）」という。
【００３２】
データ送信部２１０は、受信したＡＣＫパケット１０２に基づいて未受信計算機があるか否かを判定する。
未受信計算機がある場合、データ送信部２１０は、受信済み計算機に割り当てられた割り当てビット番号によって特定されるフラグビットが「受信済みフラグ値」を示し、未受信計算機に割り当てられた割り当てビット番号によって特定されるフラグビットが「未受信フラグ値」を示し、アプリケーションデータが含まれるデータパケット１０１を複数の受信計算機３００へ再送する。
「受信済みフラグ値」はデータ送信部２１０が当該受信計算機３００からＡＣＫパケット１０２を受信済みであることを示すフラグ値である。
「未受信フラグ値」はデータ送信部２１０が当該受信計算機３００からＡＣＫパケット１０２を受信していないことを示すフラグ値である。
【００３３】
計算機記憶部２９０（インデックス情報記憶部の一例）は、送信計算機２００で使用するデータを記憶する。
例えば、計算機記憶部２９０は受信計算機管理テーブル２９１を記憶する。また、計算機記憶部２９０は、自計算機のＩＰアドレスや所定のマルチキャストアドレスを予め記憶する（図示省略）。
【００３４】
受信計算機管理テーブル２９１（インデックス情報の一例）は、複数の受信計算機３００それぞれに割り当てた割り当てビット番号や、各受信計算機３００からＡＣＫパケット１０２を受信済みであるか否かを管理するためのデータである。
【００３５】
図４は、実施の形態１における受信計算機３００の機能構成図である。
実施の形態１における受信計算機３００の機能構成について、図４に基づいて説明する。
【００３６】
受信計算機３００は、データ受信部３１０と、計算機検出部３２０と、アプリケーション部３３０と、計算機記憶部３９０とを備える。
【００３７】
計算機検出部３２０（割り当て要求パケット送信部、割り当て応答パケット受信部の一例）は、送信計算機２００から割り当てられた割り当てビット番号（割り当て値の一例）を後述する自計算機番号管理テーブル３９１に設定する。
【００３８】
計算機記憶部３９０（割り当て値記憶部の一例）は、受信計算機３００で使用するデータを記憶する。
例えば、計算機記憶部３９０は自計算機番号管理テーブル３９１を記憶する。また、計算機記憶部３９０は、自計算機のＩＰアドレスや所定のマルチキャストアドレスを予め記憶する（図示省略）。
【００３９】
自計算機番号管理テーブル３９１は、送信計算機２００から割り当てられた割り当てビット番号を管理するためのデータである。
【００４０】
データ受信部３１０（データパケット受信部、割り当て領域判定部、受信確認パケット送信部の一例）は、複数のフラグビットとアプリケーションデータとを含んだデータパケット１０１を送信計算機２００から受信する。
ここで、データパケット１０１に含まれる複数のフラグビットのうち、自計算機番号管理テーブル３９１に設定された割り当てビット番号によって特定されるフラグビットを「割り当てビット（割り当て領域の一例）」という。
【００４１】
データ受信部３１０は、データパケット１０１内の割り当てビットに、送信計算機２００がＡＣＫパケット１０２を受信していないことを示す未受信フラグ値と、送信計算機２００がＡＣＫパケット１０２を受信したことを示す受信済みフラグ値とのいずれのフラグ値が設定されているかを判定する。
割り当てビットに未受信フラグ値が設定されている場合、データ受信部３１０はＡＣＫパケット１０２を送信計算機２００へ送信する。
割り当てビットに受信済みフラグ値が設定されている場合、データ受信部３１０はＡＣＫパケット１０２を送信計算機２００へ送信しない。
【００４２】
アプリケーション部３３０は、所定のアプリケーションプログラムを実行することによって、データ受信部３１０によって受信されたデータパケット１０１に含まれるアプリケーションデータを処理する。
【００４３】
送信計算機２００として機能すると共に受信計算機３００として機能する計算機は、送信計算機２００の機能構成（図３参照）と、受信計算機３００の機能構成（図４参照）との両方を備える。
【００４４】
送信計算機２００と受信計算機３００との間で通信する各種パケットのヘッダには、パケットを送信した計算機を識別するＩＰアドレス（送信元ＩＰアドレス）や、パケットの送信先の計算機を識別するＩＰアドレスまたはマルチキャストアドレス（宛先ＩＰアドレス）が設定される。
【００４５】
図５は、実施の形態１における送信計算機２００に記憶する受信計算機管理テーブル２９１の一例を示す図である。
実施の形態１における送信計算機２００に記憶する受信計算機管理テーブル２９１について、図５に基づいて説明する。
【００４６】
受信計算機管理テーブル２９１は「行番号」と「受信計算機」と「ＡＣＫフラグ」とを対応付けたデータである。
受信計算機管理テーブル２９１は送信計算機２００の計算機記憶部２９０に記憶される。受信計算機管理テーブル２９１の各行は「レコード」ともいう。
【００４７】
「行番号」は何行目のレコードであるかを示す。行番号は受信計算機に割り当てるフラグビットを特定する割り当てビット番号（インデックス値の一例）として使用される。
【００４８】
「受信計算機」は受信計算機３００を識別する識別子（例えば、ＩＰアドレス、計算機名）を示す。
【００４９】
「ＡＣＫフラグ」は「未受信（初期値）」または「受信済み」を示す。「未受信」は受信計算機３００からＡＣＫパケット１０２を受信していないことを意味する。「受信済み」は受信計算機３００からＡＣＫパケット１０２を受信済みであることを意味する。
【００５０】
送信計算機２００は、一つのデータパケット１０１に対して一列の「ＡＣＫフラグ」を使用する。複数のデータパケット１０１を並行して送信する場合、送信計算機２００は、並行して送信するデータパケット１０１の数と同じ列数の「ＡＣＫフラグ」を受信計算機管理テーブル２９１に設けて使用する。送信計算機２００は、データパケット１０１の数と同じ列数の「ＡＣＫフラグ」を受信計算機管理テーブル２９１に設けて使用する代わりに、データパケット１０１の数と同じ数の受信計算機管理テーブル２９１を生成して使用しても構わない。
【００５１】
図５の場合、自計算機は計算機Ｃ、Ｂ、ＹからＡＣＫパケット１０２を受信済みであり、計算機ＡからＡＣＫパケット１０２を受信していない。
【００５２】
「行番号」の欄は設けなくても構わない。この場合も、ｎ行目の行の受信計算機の割り当てビット番号は「ｎ」である。
「行番号」とは別に又は「行番号」の代わりに、割り当てビット番号を示す「割り当てビット番号」の欄を設けてもよい。「割り当てビット番号」には、行番号と異なる割り当てビット番号を設定してもよい。例えば、１行目の行の「割り当てビット番号」の値が「１」以外の値であっても構わない。
【００５３】
図６は、実施の形態１における受信計算機３００に記憶する自計算機番号管理テーブル３９１の一例を示す図である。
実施の形態１における受信計算機３００に記憶する自計算機番号管理テーブル３９１について、図６に基づいて説明する。
【００５４】
自計算機番号管理テーブル３９１は「送信計算機」と「自計算機番号」とを対応付けたデータである。自計算機番号管理テーブル３９１は受信計算機３００の計算機記憶部３９０に記憶される。自計算機番号管理テーブル３９１の各行は「レコード」ともいう。
【００５５】
「送信計算機」は送信計算機２００を識別する識別子（例えば、ＩＰアドレス、計算機名）を示す。
「自計算機番号」は送信計算機２００から割り当てられた割り当てビット番号を示す。割り当てビット番号は送信計算機２００から送信されるデータパケット１０１内のいずれかのフラグビットを特定する。
【００５６】
送信計算機２００として機能する複数の計算機が存在する場合、受信計算機３００は複数の送信計算機２００それぞれから割り当てビット番号を割り当てられる。
図６の場合、当該受信計算機３００に対して、計算機Ｂから送信されるデータパケット１０１内の３番目のフラグビットが割り当てられている。
同様に、当該受信計算機３００に対して、計算機Ｃから送信されるデータパケット１０１内の１番目のフラグビットと、計算機Ａから送信されるデータパケット１０１内の２番目のフラグビットと、計算機Ｙから送信されるデータパケット１０１内の３番目のフラグビットとが割り当てられている。
【００５７】
次に、データパケット１０１の通信前に送信計算機２００および受信計算機３００が実行する前処理（図７の受信計算機検出処理、図８の送信計算機検出処理）について説明する。
【００５８】
図７は、実施の形態１における送信計算機２００の受信計算機検出処理を示すフローチャートである。
実施の形態１における送信計算機２００の受信計算機検出処理について、図７に基づいて説明する。
【００５９】
データパケット１０１の送信前に、送信計算機２００の計算機検出部２２０は、以下に説明する受信計算機検出処理を実行する。
ここで、受信計算機管理テーブル２９１（図５参照）はレコードが設定されていない空のテーブルであるものとする。
【００６０】
Ｓ１０１において、送信計算機２００が起動した際、計算機検出部２２０は起動通知パケットを生成し、生成した起動通知パケットをマルチキャストで送信する。
起動通知パケットは、稼働している各受信計算機３００に対して起動応答パケットの送信を要求するためのパケットである。
起動応答パケット（割り当て要求パケットの一例）は、稼働していることを送信計算機２００に通知するためのパケットである。
マルチキャストとは、マルチキャストアドレスを宛先ＩＰアドレスとして使用してパケットを通信することである。
マルチキャストで送信された起動通知パケットは、マルチキャストのグループに属する受信計算機３００のうち稼働している受信計算機３００によって受信される。起動通知パケットを受信した各受信計算機３００は起動応答パケットを送信計算機２００へ送信する。
Ｓ１０１の後、Ｓ１０２へ進む。
【００６１】
Ｓ１０２において、計算機検出部２２０は、Ｓ１０１で起動通知パケットを送信してから起動応答パケット用の所定の待ち時間が経過するまでの間、起動応答パケットの到達（検出）を待つ。例えば、計算機検出部２２０は、待ち時間を設定したタイマをＳ１０１で起動しておき、タイマがタイムアウトするまでの間、起動応答パケットの到達を待つ。
待ち時間が経過した場合（ＹＥＳ）、受信計算機検出処理は終了する。
待ち時間が経過する前に起動応答パケットが到達した場合（ＮＯ）、Ｓ１０３へ進む。
【００６２】
Ｓ１０３において、計算機検出部２２０は、送信計算機２００に到達した起動応答パケットを受信する。以下、起動応答パケットを送信した受信計算機３００を「応答計算機」という。
計算機検出部２２０は、起動応答パケットに設定される送信元ＩＰアドレスによって応答計算機を識別する。
Ｓ１０３の後、Ｓ１０４へ進む。
【００６３】
Ｓ１０４において、計算機検出部２２０は、受信計算機管理テーブル２９１（図５参照）に行を追加し、追加した行に応答計算機を登録する。ここで、応答計算機の登録とは、受信計算機管理テーブル２９１の「受信計算機」の欄に応答計算機の識別子を設定することを意味する。
【００６４】
例えば、計算機検出部２２０は、起動応答パケットから応答計算機のＩＰアドレス（送信元ＩＰアドレス）を取得し、取得したＩＰアドレスを追加行の「受信計算機」の欄に設定する。
【００６５】
但し、計算機検出部２２０は、応答計算機のＩＰアドレスの代わりに計算機名を設定しても構わない。例えば、計算機検出部２２０は、以下のように計算機名を取得する。
（１）各受信計算機３００のＩＰアドレスと計算機名とを示す計算機名テーブルを計算機記憶部２９０に予め記憶しておく。計算機検出部２２０は起動応答パケットの送信元ＩＰアドレスに対応する計算機名を計算機名テーブルから取得する。
（２）各計算機のＩＰアドレスと計算機名とを管理する計算機名管理サーバを設ける。計算機検出部２２０は起動応答パケットの送信元ＩＰアドレスに対応する計算機名を計算機名管理サーバから取得する。
【００６６】
以下、応答計算機を登録した行の行番号を「割り当てビット番号」という。割り当てビット番号は、データパケット１０１内の複数のフラグビットのうち当該応答計算機に割り当てるフラグビットが位置する順番を示す。
【００６７】
Ｓ１０４の後、Ｓ１０５へ進む。
【００６８】
Ｓ１０５において、計算機検出部２２０は、応答計算機の割り当てビット番号（追加行の行番号）を設定して番号通知パケットを生成し、生成した番号通知パケットを応答計算機へユニキャストで送信する。
番号通知パケット（割り当て応答パケットの一例）は、応答計算機に割り当てビット番号を通知するためのパケットである。
ユニキャストとは、特定の計算機のＩＰアドレスを宛先ＩＰアドレスにしてパケットを通信することである。以降の説明において、マルチキャストで通信する旨の説明をしない通信はユニキャストでの通信を意味する。
Ｓ１０５の後、Ｓ１０２へ戻る。
【００６９】
図７の受信計算機検出処理により、送信計算機２００は、受信計算機管理テーブル２９１を生成し、割り当てビット番号を各受信計算機３００に通知することができる。
【００７０】
図８は、実施の形態１における受信計算機３００の送信計算機検出処理を示すフローチャートである。
実施の形態１における受信計算機３００の送信計算機検出処理について、図８に基づいて説明する。
【００７１】
データパケット１０１の通信前に、受信計算機３００の計算機検出部３２０は、以下に説明する送信計算機検出処理を実行する。
【００７２】
Ｓ１１１において、計算機検出部３２０は、送信計算機２００からマルチキャストで送信される起動通知パケットを受信する。
計算機検出部３２０は、起動通知パケットに設定される送信元ＩＰアドレスによって送信計算機２００を識別する。
【００７３】
さらに、計算機検出部３２０は、自計算機番号管理テーブル３９１（図６参照）に行を追加し、追加した行の「送信計算機」の欄に送信計算機２００の識別子を設定する。
例えば、計算機検出部３２０は、起動通知パケットから送信計算機２００のＩＰアドレス（送信元ＩＰアドレス）を取得し、取得したＩＰアドレスを追加行の「送信計算機」の欄に設定する。但し、図７のＳ１０４と同様に、ＩＰアドレスの代わりに計算機名を設定しても構わない。また、「送信計算機」の欄は後述するＳ１１４で設定しても構わない。
Ｓ１１１の後、Ｓ１１２へ進む。
【００７４】
Ｓ１１２において、計算機検出部３２０は起動応答パケットを生成し、生成した起動応答パケットを送信計算機２００へ送信する。
Ｓ１１２の後、Ｓ１１３へ進む。
【００７５】
Ｓ１１３において、計算機検出部３２０は、送信計算機２００から送信される番号通知パケットを受信する。送信計算機２００は、番号通知パケットに設定される送信元ＩＰアドレスによって識別される。
Ｓ１１３の後、Ｓ１１４へ進む。
【００７６】
Ｓ１１４において、計算機検出部３２０は、番号通知パケットから割り当てビット番号を取得し、取得した割り当てビット番号を自計算機番号管理テーブル３９１の追加行（送信計算機２００の識別子が設定されている行）に登録する。ここで、割り当てビット番号の登録とは、自計算機番号管理テーブル３９１内の特定の行の「自計算機番号」の欄に割り当てビット番号を設定することを意味する。
Ｓ１１４により、送信計算機検出処理は終了する。
【００７７】
図８の送信計算機検出処理により、受信計算機３００は、自計算機番号管理テーブル３９１に割り当てビット番号（自計算機番号）を登録することができる。
【００７８】
図９から図１１は、実施の形態１における通信システム１００の前処理の具体例を示す図である。
実施の形態１における通信システム１００の前処理（図７の受信計算機検出処理、図８の送信計算機検出処理）の具体例について、図９から図１１に基づいて説明する。
【００７９】
図９において、計算機Ｚは起動通知パケット１０３をマルチキャストで送信し（図７のＳ１０１）、計算機Ａおよび計算機Ｂは起動通知パケット１０３を受信して計算機Ｚの識別子を自計算機番号管理テーブル３９１に設定する（図８のＳ１１１）。
【００８０】
図１０において、計算機Ｂは最初に起動応答パケット１０４を計算機Ｚへ送信し（図８のＳ１１２）、計算機Ｚは１つ目の起動応答パケット１０４を計算機Ｂから受信したものとする（図７のＳ１０３）。
計算機Ｚは、計算機Ｂの識別子を受信計算機管理テーブル２９１の１行目に設定する（図７のＳ１０４）。
計算機Ｚは、受信計算機管理テーブル２９１内の計算機Ｂの行番号「１」を割り当てビット番号として番号通知パケット１０５に設定し、番号通知パケット１０５を計算機Ｂへ送信する（図７のＳ１０５）。
計算機Ｂは、番号通知パケット１０５を受信し（図８のＳ１１３）、受信した番号通知パケット１０５に設定されている割り当てビット番号「１」を自計算機番号管理テーブル３９１に設定する（図８のＳ１１４）。
【００８１】
図１１において、計算機Ａは計算機Ｂの次に起動応答パケット１０４を計算機Ｚへ送信し（図８のＳ１１２）、計算機Ｚは２つ目の起動応答パケット１０４を計算機Ａから受信したものとする（図７のＳ１０３）。
計算機Ｚは、計算機Ａの識別子を受信計算機管理テーブル２９１の２行目に設定する（図７のＳ１０４）。
計算機Ｚは、受信計算機管理テーブル２９１内の計算機Ａの行番号「２」を割り当てビット番号として番号通知パケット１０５に設定し、番号通知パケット１０５を計算機Ａへ送信する（図７のＳ１０５）。
計算機Ａは、番号通知パケット１０５を受信し（図８のＳ１１３）、受信した番号通知パケット１０５に設定されている割り当てビット番号「２」を自計算機番号管理テーブル３９１に設定する（図８のＳ１１４）。
【００８２】
次に、データパケット１０１の通信処理（図１２のデータパケット送信処理、図１４のデータパケット受信処理）について説明する。
【００８３】
図１２は、実施の形態１における送信計算機２００のデータパケット送信処理を示すフローチャートである。
実施の形態１における送信計算機２００のデータパケット送信処理について、図１２に基づいて説明する。
【００８４】
Ｓ１２１−１において、アプリケーション部２３０はアプリケーションデータ（ＡＰデータ）を生成し、生成したアプリケーションデータをデータ送信部２１０に出力する。
データ送信部２１０は、アプリケーション部２３０からアプリケーションデータを入力する。
Ｓ１２１−１の後、Ｓ１２１−２へ進む。
【００８５】
Ｓ１２１−２において、データ送信部２１０は、受信計算機管理テーブル２９１（図５参照）のＡＣＫフラグを初期化する。つまり、データ送信部２１０は受信計算機管理テーブル２９１の全てのＡＣＫフラグの値を「未受信（初期値）」に変更する。
Ｓ１２１−２の後、Ｓ１２１−３へ進む。
【００８６】
Ｓ１２１−３において、データ送信部２１０は、複数のフラグビットから成るＡＣＫフラグフィールドとＳ１２１−１で入力したアプリケーションデータとを含んだデータパケット１０１（図１３参照）を生成する。
Ｓ１２１−３の後、Ｓ１２１−４へ進む。
【００８７】
図１３は、実施の形態１におけるデータパケット１０１のフォーマットの一例を示す図である。
実施の形態１におけるデータパケット１０１のフォーマットの一例について、図１３に基づいて説明する。
【００８８】
データパケット１０１は、ヘッダ１０１Ａとアプリケーションデータ領域１０１Ｂとを有する。
【００８９】
ヘッダ１０１Ａは、送信元ＩＰアドレス１０１ａ、マルチキャストアドレス１０１ｂ、ＡＣＫフラグフィールド１０１ｃなどを設定する領域である。
【００９０】
アプリケーションデータ領域１０１Ｂは、送信するアプリケーションデータ（ペイロードデータの一例）を設定する領域である。
【００９１】
送信元ＩＰアドレス１０１ａは、データパケット１０１を送信する送信計算機２００のＩＰアドレスである。
【００９２】
マルチキャストアドレス１０１ｂは、データパケット１０１を受信する複数の受信計算機３００（受信計算機３００のグループ）を識別する所定のＩＰアドレスである。
【００９３】
ＡＣＫフラグフィールド１０１ｃは、複数の受信計算機３００に割り当てる複数のフラグビット（複数のフラグ領域の一例）を有する領域である。
各フラグビットには「０（未受信フラグ値）」または「１（受信済みフラグ値）」が設定される。フラグビットのビット値「０」は、送信計算機２００が当該フラグビットを割り当てられた受信計算機３００からＡＣＫパケット１０２を受信していないことを意味する。フラグビットのビット値「１」は、送信計算機２００が当該フラグビットを割り当てられた受信計算機３００からＡＣＫパケット１０２を受信済みであることを意味する。
データパケット１０１を生成時の各フラグビットの初期値は「０」である。
【００９４】
ＡＣＫフラグフィールド１０１ｃの領域サイズは、４バイト（３２ビット）の倍数で表される固定長である。
受信計算機３００の台数が３２台以下である場合、ＡＣＫフラグフィールド１０１ｃの領域サイズは４バイト（３２ビット）である。受信計算機３００の台数が３３台以上６４台以下である場合、ＡＣＫフラグフィールド１０１ｃの領域サイズは８バイト（６４ビット）である。但し、ＡＣＫフラグフィールド１０１ｃの領域サイズは、１ビット、４ビット、１バイト、２バイトまたは８バイトの倍数など、４バイトの倍数以外の大きさであっても構わない。
【００９５】
図１２に戻り、Ｓ１２１−４から説明を続ける。
【００９６】
Ｓ１２１−４において、データ送信部２１０は、Ｓ１２１−３で生成したデータパケット１０１をマルチキャストで複数の受信計算機３００へ送信する。
Ｓ１２１−４の後、Ｓ１２２へ進む。
【００９７】
Ｓ１２２において、データ送信部２１０は、Ｓ１２１−４または後述するＳ１２７でデータパケット１０１を送信してからＡＣＫパケット１０２用の所定の待ち時間が経過するまでの間、ＡＣＫパケット１０２の到達（検出）を待つ。例えば、データ送信部２１０は、待ち時間を設定したタイマをＳ１２１−４またはＳ１２７で起動しておき、タイマがタイムアウトするまでの間、ＡＣＫパケット１０２の到達を待つ。
待ち時間が経過した場合（ＹＥＳ）、Ｓ１２７へ進む。
待ち時間が経過する前にＡＣＫパケット１０２が到達した場合（ＮＯ）、Ｓ１２３へ進む。
【００９８】
Ｓ１２３において、データ送信部２１０は、送信計算機２００に到達したＡＣＫパケット１０２を受信する。
以下、ＡＣＫパケット１０２を送信した受信計算機３００を「受信済み計算機」といい、複数の受信計算機３００のうち受信済み計算機以外の受信計算機３００を「未受信計算機」という。受信済み計算機はＡＣＫパケット１０２に設定される送信元ＩＰアドレスによって識別される。
Ｓ１２３の後、Ｓ１２４へ進む。
【００９９】
Ｓ１２４において、データ送信部２１０は、ＡＣＫパケット１０２に基づいて受信済み計算機を判定する。データ送信部２１０は、受信済み計算機が登録されている登録行を受信計算機管理テーブル２９１（図５参照）から選択し、選択した登録行の行番号を判定する。
判定した行番号が受信済み計算機の割り当てビット番号である。
【０１００】
例えば、データ送信部２１０は、ＡＣＫパケット１０２から受信済み計算機のＩＰアドレス（送信元ＩＰアドレス）を取得し、取得したＩＰアドレスが「受信計算機」の欄に設定されている行の行番号を判定する。
但し、ＩＰアドレスの代わりに計算機名を「受信計算機」の欄に設定している場合、データ送信部２１０は、図７のＳ１０４と同様にして計算機名を取得し、取得した計算機名が「受信計算機」の欄に設定されている行の行番号を判定する。
【０１０１】
さらに、データ送信部２１０は、データパケット１０１内の複数のフラグビットのうち受信済み計算機の割り当てビット番号が示す順番のフラグビットを選択する。データ送信部２１０は、選択したフラグビットの値を「０（未受信フラグ値）」から「１（受信済みフラグ値）」に変更する。
Ｓ１２４の後、Ｓ１２５へ進む。
【０１０２】
Ｓ１２５において、データ送信部２１０は、受信計算機管理テーブル２９１から受信済み計算機の登録行を選択し、選択した登録行のＡＣＫフラグを「未受信」から「受信済み」に変更する。
Ｓ１２５の後、Ｓ１２６へ進む。
【０１０３】
Ｓ１２６において、データ送信部２１０は、受信計算機管理テーブル２９１の全ての行のＡＣＫフラグが「受信済み」であるか否かを判定する。
受信計算機管理テーブル２９１の全ての行のＡＣＫフラグが「受信済み」である場合（ＹＥＳ）、全ての受信計算機３００からデータパケット１０１に対するＡＣＫパケット１０２を受信済みであるため、データパケット送信処理は終了する。
受信計算機管理テーブル２９１の少なくともいずれかの行のＡＣＫフラグが「未受信」である場合（ＮＯ）、少なくともいずれかの受信計算機３００（未受信計算機）からデータパケット１０１に対するＡＣＫパケット１０２を受信していないため、Ｓ１２２へ戻る。
【０１０４】
Ｓ１２７において、データ送信部２１０は、データパケット１０１をマルチキャストで複数の受信計算機３００へ再送する。
再送するデータパケット１０１は、Ｓ１２４で少なくともいずれかのフラグビットを「０」から「１」に変更したデータパケット１０１である。但し、Ｓ１２４を実行していない場合に再送するデータパケット１０１は、Ｓ１２１−４で送信したデータパケット１０１（全てのフラグビットが「０」）である。
Ｓ１２７の後、Ｓ１２２へ戻る。
【０１０５】
図１２のデータパケット送信処理により、送信計算機２００は、データパケット１０１をマルチキャストで複数の受信計算機３００へ送信し、全ての受信計算機３００がデータパケット１０１を受信したことを確認することができる。
【０１０６】
図１４は、実施の形態１における受信計算機３００のデータパケット受信処理を示すフローチャートである。
実施の形態１における受信計算機３００のデータパケット受信処理について、図１４に基づいて説明する。
【０１０７】
Ｓ１３１において、データ受信部３１０は、送信計算機２００からマルチキャストで送信されるデータパケット１０１を受信する。送信計算機２００は、データパケット１０１に設定される送信元ＩＰアドレスによって識別される。
Ｓ１３１の後、Ｓ１３２へ進む。
【０１０８】
Ｓ１３２において、データ受信部３１０は、データパケット１０１に基づいて送信計算機２００を判定する。データ受信部３１０は、送信計算機２００から割り当てられた割り当てビット番号（自計算機識別番号）を自計算機番号管理テーブル３９１（図５参照）から取得する。
【０１０９】
例えば、データ受信部３１０は、データパケット１０１から送信計算機２００のＩＰアドレス（送信元ＩＰアドレス）を取得し、取得したＩＰアドレスに対応付けられた自計算機識別番号を自計算機番号管理テーブル３９１から取得する。
但し、ＩＰアドレスの代わりに計算機名を自計算機番号管理テーブル３９１に設定している場合、データ受信部３１０は、図７のＳ１０４と同様にして計算機名を取得し、取得した計算機名に対応付けられた自計算機識別番号を自計算機番号管理テーブル３９１から取得する。
Ｓ１３２の後、Ｓ１３３へ進む。
【０１１０】
Ｓ１３３において、データ受信部３１０は、データパケット１０１内の複数のフラグビットのうちＳ１３２で取得した割り当てビット番号が示す順番のフラグビットを選択し、選択したフラグビットを参照する。
以下、Ｓ１３３で参照したフラグビットを「割り当てビット」という。
Ｓ１３３の後、Ｓ１３４へ進む。
【０１１１】
Ｓ１３４において、データ受信部３１０は、割り当てビットの値が「０（未受信フラグ値）」と「１（受信済みフラグ値）」とのいずれであるかを判定する。
割り当てビットの値が「０」である場合、ＡＣＫパケット１０２の返信が必要であるため、Ｓ１３５へ進む。
割り当てビットの値が「１」である場合、ＡＣＫパケット１０２の返信が不要であるため、データパケット受信処理は終了する。
【０１１２】
Ｓ１３５において、データ受信部３１０はＡＣＫパケット１０２を生成し、生成したＡＣＫパケット１０２を送信計算機２００へ送信する。
Ｓ１３５の後、Ｓ１３６へ進む。
【０１１３】
Ｓ１３６において、データ受信部３１０はＳ１３１で受信したデータパケット１０１からアプリケーションデータを取得し、取得したアプリケーションデータをアプリケーション部３３０に出力する。
但し、アプリケーション部３３０に同じアプリケーションデータを出力済みの場合、データ受信部３１０は、再びアプリケーションデータをアプリケーション部３３０に出力しなくてもよい。
例えば、データ受信部３１０は、アプリケーション部３３０に出力したアプリケーションデータのシーケンス番号を記憶し、記憶したシーケンス番号に基づいてアプリケーションデータをアプリケーション部３３０に出力済みか否かを判定する。送信計算機２００のデータ送信部２１０またはアプリケーション部２３０は、データパケット１０１のヘッダまたはアプリケーション内にシーケンス番号を設定する。
【０１１４】
アプリケーション部３３０は、データ受信部３１０から出力されたアプリケーションデータを入力し、入力したアプリケーションデータを用いて所定のアプリケーション処理を実行する。
【０１１５】
Ｓ１３６により、データパケット受信処理は終了する。
【０１１６】
図１５から図１８は、実施の形態１におけるデータパケット１０１の通信処理の具体例を示す図である。
実施の形態１におけるデータパケット１０１の通信処理（図１２のデータパケット送信処理、図１４のデータパケット受信処理）の具体例について、図１５から図１８に基づいて説明する。
【０１１７】
図１５において、計算機Ｚのデータ送信部２１０は、アプリケーションデータ（ＡＰデータ）をアプリケーション部２３０から入力する（図１２のＳ１２１−１）。
データ送信部２１０は、受信計算機管理テーブル２９１のＡＣＫフラグに「未受信」を設定する（図１２のＳ１２１−２）。
データ送信部２１０は、ＡＣＫフラグフィールド１０１ｃの全てのフラグビットを「０（未受信）」にしてデータパケット１０１を生成し（図１２のＳ１２１−３）、生成したデータパケット１０１をマルチキャストで送信する（図１２のＳ１２１−４）。
データパケット１０１は計算機Ａに到達し、計算機Ａのデータ受信部３１０はデータパケット１０１を受信する（図１４のＳ１３１）。
データパケット１０１は計算機Ｂに到達せず、計算機Ｂのデータ受信部３１０はデータパケット１０１を受信できなかったものとする。
【０１１８】
図１６において、計算機Ａのデータ受信部３１０は、自計算機番号管理テーブル３９１から計算機Ｚに割り当てられた自計算機番号「２」を取得する（図１４のＳ１３２）。
計算機Ａのデータ受信部３１０は、ＡＣＫフラグフィールド１０１ｃ内のフラグビットのうち自計算機番号「２」が示す順番のフラグビットを参照する（図１４のＳ１３３）。
計算機Ａのデータ受信部３１０は、参照したフラグビットが「０（未受信）」であるため（Ｓ１３４）、ＡＣＫパケット１０２を計算機Ｚへ送信する（図１４のＳ１３５）。
計算機Ｚのデータ送信部２１０は、計算機ＡからＡＣＫパケット１０２を受信する（図１２のＳ１２３）。
計算機Ｚのデータ送信部２１０は、ＡＣＫフラグフィールド１０１ｃ内のフラグビットのうち受信計算機管理テーブル２９１の計算機Ａの行番号「２」が示す順番のフラグビットを選択し、選択したフラグビットを「０」から「１（受信済み）」に変更する（図１２のＳ１２４）。
計算機Ｚのデータ送信部２１０は、受信計算機管理テーブル２９１の計算機ＡのＡＣＫフラグを「未受信」から「受信済み」に変更する（図１２のＳ１２５）。
【０１１９】
図１７において、計算機Ｚのデータ送信部２１０は、受信計算機管理テーブル２９１の計算機ＢのＡＣＫフラグが「未受信」であるため（図１２のＳ１２６）、データパケット１０１をマルチキャストで再送する（図１２のＳ１２７）。
データパケット１０１は計算機Ａと計算機Ｂとの両方に到達し、計算機Ａと計算機Ｂとのそれぞれのデータ受信部３１０はデータパケット１０１を受信する（図１４のＳ１３１）。
【０１２０】
図１８において、計算機Ａのデータ受信部３１０は、自計算機番号管理テーブル３９１から計算機Ｚに割り当てられた自計算機番号「２」を取得する（図１４のＳ１３２）。
計算機Ａのデータ受信部３１０は、ＡＣＫフラグフィールド１０１ｃ内のフラグビットのうち自計算機番号「２」が示す順番のフラグビットを参照する（図１４のＳ１３３）。
計算機Ａのデータ受信部３１０は、参照したフラグビットが「１（受信済み）」であるため（図１４のＳ１３４）、ＡＣＫパケット１０２を計算機Ｚへ送信しない。
計算機Ｂのデータ受信部３１０は、自計算機番号管理テーブル３９１から計算機Ｚに割り当てられた自計算機番号「１」を取得する（図１４のＳ１３２）。
計算機Ｂのデータ受信部３１０は、ＡＣＫフラグフィールド１０１ｃ内のフラグビットのうち自計算機番号「１」が示す順番のフラグビットを参照する（図１４のＳ１３３）。
計算機Ｂのデータ受信部３１０は、参照したフラグビットが「０（未受信）」であるため（Ｓ１３４）、ＡＣＫパケット１０２を計算機Ｚへ送信する（図１４のＳ１３５）。
計算機Ｚのデータ送信部２１０は、計算機ＢからＡＣＫパケット１０２を受信する（図１２のＳ１２３）。
計算機Ｚのデータ送信部２１０は、受信計算機管理テーブル２９１の計算機ＢのＡＣＫフラグを「未受信」から「受信済み」に変更する（図１２のＳ１２５）。
計算機Ｚのデータ送信部２１０は、受信計算機管理テーブル２９１の全てのＡＣＫフラグが「受信済み」であるため（図１２のＳ１２６）、データパケット１０１を再送しない。これにより、データパケット１０１の通信が終了する。
【０１２１】
図１９は、実施の形態１における送信計算機２００および受信計算機３００のハードウェア資源の一例を示す図である。
図１９において、送信計算機２００および受信計算機３００（コンピュータの一例）は、ＣＰＵ９０１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ９０１は、バス９０２を介してＲＯＭ９０３、ＲＡＭ９０４、通信ボード９０５、ディスプレイ９１１（表示装置）、キーボード９１２、マウス９１３、ドライブ９１４、磁気ディスク装置９２０などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。ドライブ９１４は、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体を読み書きする装置である。
ＲＯＭ９０３、ＲＡＭ９０４、磁気ディスク装置９２０およびドライブ９１４は記憶装置の一例である。キーボード９１２、マウス９１３および通信ボード９０５は入力装置の一例である。ディスプレイ９１１および通信ボード９０５は出力装置の一例である。
【０１２２】
通信ボード９０５は、有線または無線で、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、電話回線などの通信網に接続している。
【０１２３】
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、プログラム群９２２、ファイル群９２３が記憶されている。
【０１２４】
プログラム群９２２には、実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラム（例えば、送信プログラム、受信プログラム）は、ＣＰＵ９０１により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。
【０１２５】
ファイル群９２３には、実施の形態において説明する「〜部」で使用される各種データ（入力、出力、判定結果、計算結果、処理結果など）が含まれる。
【０１２６】
実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
フローチャートなどに基づいて説明する実施の形態の処理はＣＰＵ９０１、記憶装置、入力装置、出力装置などのハードウェアを用いて実行される。
【０１２７】
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【０１２８】
実施の形態１により、例えば、以下のような効果を奏する。
送信計算機２００は、受信計算機管理テーブル２９１によって、全ての受信計算機３００にデータパケット１０１を送信できたか否かを判定することができる。つまり、送信計算機２００はデータパケット１０１を全ての受信計算機３００へ送信することができる。
受信計算機３００は、データパケット１０１内の割り当てフラグビットによって、送信計算機２００がＡＣＫパケット１０２を受信したか否かを判定することができる。受信計算機３００は、送信計算機２００がＡＣＫパケット１０２を受信していない場合にだけＡＣＫパケット１０２を送信する。これにより、データパケット１０１の再送が繰り返されても受信計算機３００からＡＣＫパケット１０２が余計に送信されず、ネットワーク１０９の負荷を軽減することができる。
フラグビットと受信計算機３００とを対応付ける情報（例えば、フラグビットが割り当てられた受信計算機３００のＩＰアドレス）をデータパケット１０１のヘッダに設定する必要がないため、データパケット１０１のヘッダの増大を防ぐことができる。
【０１２９】
以下に、実施の形態１の補足説明を行う。
【０１３０】
送信計算機２００は、データパケット１０１の１回目の送信時に、ＡＣＫフラグフィールド１０１ｃをヘッダ１０１Ａに含まないデータパケット１０１を複数の受信計算機３００へ送信しても構わない。データパケット１０１のヘッダ１０１ＡにＡＣＫフラグフィールド１０１ｃが含まれていない場合、データパケット１０１を受信した各受信計算機３００は、ＡＣＫパケット１０２を送信計算機２００へ送信する。
少なくともいずれかの受信計算機３００からＡＣＫパケット１０２を受信できなかった場合、送信計算機２００は、ＡＣＫフラグフィールド１０１ｃをヘッダ１０１Ａに含んだデータパケット１０１であって、受信済み計算機に割り当てられるフラグビットに受信済みフラグ値を設定し、未受信計算機に割り当てられるフラグビットに未受信フラグ値を設定したデータパケット１０１を複数の受信計算機３００へ再送する。
【０１３１】
フラグビットは、２ビット以上の領域（例えば、１バイトの領域）であっても構わない。
【０１３２】
送信計算機２００は、フラグビットに未受信フラグ値として「０」ではなく「１」を設定し、フラグビットに受信済みフラグ値として「１」ではなく「０」を設定しても構わない。
フラグビットが２ビット以上の領域である場合、送信計算機２００は「０」「１」以外の値、文字または記号を未受信フラグ値または受信済みフラグ値として用いても構わない。
【０１３３】
送信計算機２００は、起動通知パケット１０３を送信しなくても構わない。
受信計算機３００は、送信計算機２００から送信される起動通知パケット１０３に対して起動応答パケット１０４を応答する代わりに、割り当てビット番号を要求する割り当て要求パケットを送信計算機２００へ送信しても構わない。
送信計算機２００は、起動応答パケット１０４を受信する代わりに割り当て要求パケットを受信して番号通知パケット１０５（割り当て応答パケットの一例）を送信する。
【０１３４】
送信計算機２００は、起動応答パケット１０４を受信する度に受信計算機管理テーブル２９１（図５参照）に行を追加する代わりに、予め定められた受信計算機３００の台数と同じ数の行を受信計算機管理テーブル２９１に予め作成しておいても構わない。
【０１３５】
受信計算機管理テーブル２９１は、複数の受信計算機３００それぞれに割り当てられるインデックス値（例えば、割り当てビット番号）を定義するインデックス情報の一例である。
送信計算機２００は、受信計算機３００に対して起動応答パケット１０４の受信順序に従って割り当てビット番号（受信計算機管理テーブル２９１の行番号）を割り当てずに、受信計算機３００に対して割り当てビット番号を任意に、またはランダムに割り当てても構わない。
【０１３６】
送信計算機２００が受信計算機３００に対して割り当てビット番号を割り当てなくても構わない。
例えば、受信計算機３００に対して割り当てビット番号を割り当てる割り当てサーバを設ける。割り当てサーバは、送信計算機２００の代わりに前処理（図７参照）を実行して受信計算機管理テーブル２９１を生成し、生成した受信計算機管理テーブル２９１を送信計算機２００に送信する。また、割り当てサーバは、送信計算機２００の代わりに番号通知パケット１０５を複数の受信計算機３００に送信する。
また、ユーザが、送信計算機２００に予め受信計算機管理テーブル２９１を生成し、受信計算機３００に予め自計算機番号管理テーブル３９１を生成しても構わない。
【０１３７】
各種のパケットのヘッダにはパケットの種類を識別する識別値が設定され、パケットの種類はヘッダに設定される識別値によって判定される。
【０１３８】
実施の形態１において、例えば、以下のような送信計算機２００について説明した。
計算機記憶部２９０（インデックス情報記憶部の一例）は、複数の受信計算機３００それぞれに割り当てられるインデックス値（割り当てビット番号）を定義するインデックス情報（受信計算機管理テーブル２９１）を記憶する。
データ送信部２１０（データパケット送信部の一例）は、ペイロードデータ（アプリケーションデータ）を含んだデータパケット１０１を複数の受信計算機３００へ送信する。
データ送信部２１０（受信確認パケット受信部の一例）は、データパケット１０１を受信した受信計算機３００から、データパケット１０１を受信したことを通知する受信確認パケット（ＡＣＫパケット１０２）を受信する。
データ送信部２１０（データパケット送信部の一例）は、受信した受信確認パケットを送信した受信計算機３００を受信済み計算機として判定し、複数の受信計算機３００の中に受信済み計算機として判定しなかった未受信計算機が存在するか否かを判定する。複数の受信計算機３００の中に未受信計算機が存在する場合、データ送信部２１０は、受信済み計算機に割り当てられるインデックス値をインデックス情報に基づいて判定する。データ送信部２１０は、ペイロードデータと、インデックス値によって特定される複数のフラグ領域（複数のフラグビット）とを含むデータパケット１０１を再送する。再送するデータパケット１０１は、複数のフラグ領域のうち、受信済み計算機に割り当てられるインデックス値によって特定されるフラグ領域に、受信確認パケットの受信済みを表す受信済みフラグ値が含まれる。再送するデータパケット１０１は、複数のフラグ領域のうち、未受信計算機に割り当てられるインデックス値によって特定されるフラグ領域に、受信確認パケットの未受信を表す未受信フラグ値が含まれる。
【０１３９】
実施の形態１において、例えば、以下のような受信計算機３００について説明した。
受信計算機３００は、インデックス値（割り当てビット番号）が割り当てられ、送信計算機２００から送信されるデータパケット１０１を受信し、データパケット１０１を受信したことを通知する受信確認パケット（ＡＣＫパケット１０２）を送信計算機２００へ送信する。
計算機記憶部３９０（割り当て値記憶部の一例）は、割り当てられたインデックス値を割り当て値（割り当てビット番号）として記憶する。
データ受信部３１０（データパケット受信部の一例）は、インデックス値によって特定される複数のフラグ領域（フラグビット）を含み、複数のフラグ領域それぞれに特定のフラグ値が設定されるデータパケット１０１を、送信計算機２００から受信する。
データ受信部３１０（割り当て領域判定部の一例）は、受信したデータパケット１０１に含まれる複数のフラグ領域のうち割り当て値によって特定されるフラグ領域を割り当て領域（割り当てビット）として判定する。データ受信部３１０は、割り当て領域に設定されているフラグ値が、送信計算機２００が受信確認パケットを受信していないことを表す未受信フラグ値であるか否かを判定する。
データ受信部３１０（受信確認パケット送信部の一例）は、割り当て領域に設定されているフラグ値が未受信フラグ値であると判定した場合、受信確認パケットを送信計算機２００へ送信する。
【０１４０】
実施の形態１において、例えば、以下のような通信システム１００について説明した。
送信計算機２００は、全ての受信計算機３００から受信確認通知（ＡＣＫパケット１０２）が届くまでＩＰマルチキャスト通信を繰り返し行う。
すでに受信確認通知が送信計算機２００に届いた受信計算機３００は再送データに対して受信確認通知を行わない。
１台の受信計算機３００の受信確認通知の受信状況を１ビットで表すことができ、送信データ（データパケット１０１）に占める受信確認通知の受信状況を示すフィールド（ＡＣＫフラグフィールド１０１ｃ）のサイズを小さくすることができる。
送信計算機２００の計算機検出部２２０は、受信計算機３００に対して整数値かつ一意の識別子（割り当てビット番号）を割り当てる。
受信計算機３００の自計算機番号管理テーブル３９１は、各送信計算機２００の計算機検出部２２０により割り当てられた識別子を保持する。
送信計算機２００のデータ送信部２１０は、送信データ内に、受信計算機３００からの受信確認通知の受信の有無を示すフィールド（ＡＣＫフラグフィールド１０１ｃ）を設ける。
送信計算機２００のデータ送信部２１０は、受信確認通知を受信すると、送信元の受信計算機３００の識別子に対応するビットを「１（受信済み）」にする。
送信計算機２００のデータ送信部２１０は、受信確認通知を未送信の受信計算機３００の識別子に対応するビットを「０（未受信）」にする。
送信計算機２００のデータ送信部２１０は、全ての受信計算機３００から受信確認通知が届かなければ、データを全ての受信計算機３００にＩＰマルチキャストにて再送する。
再送データを受信した受信計算機３００のデータ受信部３１０は、受信確認通知の有無を示すフィールド中で、自計算機の受信確認通知が送信計算機２００に受信されたかどうかを示すビットを参照する。
受信計算機３００のデータ受信部３１０は、ビットが「１」であれば受信確認通知を送信せず、「０」であれば受信確認通知を再送する。
【０１４１】
実施の形態２．
データパケット１０１内のＡＣＫフラグフィールド１０１ｃの領域サイズを可変にする形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【０１４２】
送信計算機２００および受信計算機３００の構成は実施の形態１と同じである（図３、４参照）。
【０１４３】
但し、送信計算機２００のデータ送信部２１０は、図２０に示すようなデータパケット１０１を送信する。
【０１４４】
図２０は、実施の形態２におけるデータパケット１０１のフォーマットの一例を示す図である。
実施の形態２におけるデータパケット１０１のフォーマットの一例について、図２０に基づいて説明する。
【０１４５】
データパケット１０１のヘッダ１０１Ａは、送信元ＩＰアドレス１０１ａ、マルチキャストアドレス１０１ｂ、ＡＣＫフラグフィールド１０１ｃに加えて、フィールドサイズ情報１０１ｄを有する。
【０１４６】
フィールドサイズ情報１０１ｄ（フラグ領域サイズ情報の一例）は、ＡＣＫフラグフィールド１０１ｃの領域サイズを求めるための情報である。
ＡＣＫフラグフィールド１０１ｃの領域サイズまたは受信計算機３００の台数（受信計算機管理テーブル２９１の行数）は、フィールドサイズ情報１０１ｄの一例である。
【０１４７】
データパケット１０１を通信する前の前処理は実施の形態１（図７、６参照）と同じであり、データパケット１０１の通信処理は実施の形態１（図１２、１２参照）と同様である。
以下に、データパケット１０１の通信処理について補足説明を行う。
【０１４８】
まず、送信計算機２００のデータパケット送信処理（図１２参照）について補足説明を行う。
【０１４９】
Ｓ１２１−３において、データ送信部２１０は、図２０に示すようなデータパケット１０１を生成する。
このとき、データ送信部２１０は、受信計算機管理テーブル２９１の行数をフィールドサイズ情報１０１ｄとしてデータパケット１０１に設定する。但し、データ送信部２１０は、受信計算機管理テーブル２９１の行数に基づいてＡＣＫフラグフィールド１０１ｃの領域サイズ（図１３の説明を参照）を算出し、算出したＡＣＫフラグフィールド１０１ｃの領域サイズをフィールドサイズ情報１０１ｄとしてデータパケット１０１に設定してもよい。
【０１５０】
次に、受信計算機３００のデータパケット受信処理（図１４参照）について補足説明を行う。
【０１５１】
Ｓ１３６において、データ受信部３１０は、データパケット１０１のフィールドサイズ情報１０１ｄを参照してＡＣＫフラグフィールド１０１ｃの領域サイズを算出する（図１３の説明を参照）。
データ受信部３１０は、算出したＡＣＫフラグフィールド１０１ｃの領域サイズに基づいてアプリケーションデータ領域１０１Ｂを判定する。例えば、データ受信部３１０はデータパケット１０１の何バイト目からの領域がアプリケーションデータ領域１０１Ｂであるかを判定する。
データ受信部３１０は、判定したアプリケーションデータ領域１０１Ｂからアプリケーションデータを取得し、取得したアプリケーションデータをアプリケーション部３３０に出力する。
【０１５２】
実施の形態２により、受信計算機３００の数が多い場合であっても実施の形態１で説明したリライアブルＩＰマルチキャスト通信を実現することができる。
また、受信計算機３００の数が少ない場合にはデータパケット１０１内のＡＣＫフラグフィールド１０１ｃを小さくすることができる。
【０１５３】
実施の形態３．
送信計算機２００が、稼働している受信計算機３００を定期的に検出して受信計算機管理テーブル２９１を更新する形態について説明する。
以下、実施の形態１、２と異なる事項について主に説明する。説明を省略した事項については実施の形態１、２と同様である。
【０１５４】
送信計算機２００および受信計算機３００の構成は実施の形態１と同じである（図３、４参照）。
【０１５５】
但し、送信計算機２００の計算機検出部２２０（要求パケット送信部の一例）は、定期的に起動通知パケット１０３（要求パケットの一例）をマルチキャストで送信する。
計算機検出部２２０（応答パケット受信部の一例）は、起動通知パケット１０３を応答しない受信計算機３００に割り当てた割り当てビット番号を、新たに起動した受信計算機３００に割り当て直す。
【０１５６】
データパケット１０１を通信する前の前処理は実施の形態１と同じである（図７、８参照）。
【０１５７】
データパケット１０１の通信処理は実施の形態１（または実施の形態２）と同じである（図１２、１４参照）。
【０１５８】
図２１は、実施の形態３における送信計算機２００の定期検出処理を示すフローチャートである。
実施の形態３における送信計算機２００の定期検出処理について、図２１に基づいて説明する。
【０１５９】
送信計算機２００の計算機検出部２２０は、実施の形態１で説明した前処理（図７参照）の後、以下に説明する定期検出処理を定期的に実行する。例えば、送信計算機２００の計算機検出部２２０は、定期検出処理を所定の時間間隔で、または、所定のタイミング（データパケット１０１の送信を開始するとき等）で実行する。
【０１６０】
Ｓ１４１−１において、計算機検出部２２０は起動通知パケットを生成し、生成した起動通知パケットをマルチキャストで送信する。
Ｓ１４１−１の後、Ｓ１４１−２へ進む。
【０１６１】
Ｓ１４１−２において、計算機検出部２２０は、起動応答パケット用の所定の待ち時間が経過するまでの間、稼働している受信計算機３００からの起動応答パケットの到達を待ち、到達した起動応答パケットを受信する。
Ｓ１４１−２の後、Ｓ１４２−１へ進む。
【０１６２】
Ｓ１４２−１において、計算機検出部２２０は、Ｓ１４１−２で受信した起動応答パケットに設定されている送信元ＩＰアドレスに基づいて、起動応答パケットを送信した受信計算機３００を判定する。以下、起動応答パケットを送信した受信計算機３００を「応答計算機」という。
計算機検出部２２０は、応答計算機以外の受信計算機３００が受信計算機管理テーブル２９１に登録されているか否かを判定する。以下、受信計算機管理テーブル２９１に登録されている受信計算機３００のうち応答計算機以外の受信計算機３００を「不応答計算機」という。
不応答計算機が有る場合（ＹＥＳ）、Ｓ１４２−２へ進む。
不応答計算機が無い場合（ＮＯ）、Ｓ１４３−１へ進む。
【０１６３】
Ｓ１４２−２において、計算機検出部２２０は、不応答計算機の不応答回数を数え、数えた不応答回数の値と所定の不応答閾値とを比較する。
不応答回数は、定期検出処理で連続して不応答計算機であった回数である。例えば、計算機検出部２２０は、受信計算機３００の識別子と不応答回数とを対応付けて設定する不応答回数管理テーブルを生成し、生成した不応答回数管理テーブルを用いて不応答計算機の不応答回数を管理する。
例えば、前回の定期検出処理で応答計算機であった受信計算機３００が今回の定期検出処理で不応答計算機になった場合、不応答回数は「１（＝０＋１）」である。さらに、次回の定期検出処理でも不応答計算機になった場合、不応答回数は「２（＝１＋１）」になる。
不応答回数の値が不応答閾値より大きい場合（ＹＥＳ）、Ｓ１４２−３へ進む。
不応答回数の値が不応答閾値以下である場合（ＮＯ）、Ｓ１４３−１へ進む。
【０１６４】
Ｓ１４２−３において、不応答計算機は停止または故障した計算機であると考えられる。そのため、以後のデータパケット１０１の送信時に送信計算機２００はこの不応答計算機のＡＣＫパケット１０２を待つ必要は無い。
そこで、計算機検出部２２０は、受信計算機管理テーブル２９１から不応答計算機の登録行を選択し、選択した不応答計算機の登録行の「受信計算機」の欄から不応答計算機の識別子を削除する。以下、不応答計算機の識別子を削除した登録行を「空き行」という。
Ｓ１４２−３の後、Ｓ１４３−１へ進む。
【０１６５】
Ｓ１４３−１において、計算機検出部２２０は、受信計算機管理テーブル２９１に登録されている受信計算機３００以外に応答計算機が有るか否かを判定する。以下、受信計算機管理テーブル２９１に登録されている受信計算機３００以外の応答計算機を「新規計算機」という。
新規計算機が有る場合（ＹＥＳ）、Ｓ１４３−２へ進む。
新規計算機が無い場合（ＮＯ）、定期検出処理は終了する。
【０１６６】
Ｓ１４３−２において、受信計算機管理テーブル２９１に空き行が有る場合、計算機検出部２２０は空き行に新規計算機を登録する。
受信計算機管理テーブル２９１に空き行が無い場合、または複数の新規計算機が有って空き行が足らない場合、計算機検出部２２０は受信計算機管理テーブル２９１に行を追加し、追加した行に新規計算機を登録する。
Ｓ１４３−２の後、Ｓ１４４へ進む。
【０１６７】
Ｓ１４４において、計算機検出部２２０は、Ｓ１４３−２で新規計算機を登録した行の行番号（割り当てビット番号）を設定した番号通知パケットを生成し、生成した番号通知パケットを新規計算機へ送信する。
Ｓ１４４により、定期検出処理は終了する。
【０１６８】
図２２は、実施の形態３における送信計算機２００の定期検出処理の別例を示すフローチャートである。
実施の形態３における送信計算機２００の定期検出処理の別例について、図２２に基づいて説明する。
【０１６９】
送信計算機２００の計算機検出部２２０は、図２１のＳ１４２−３の代わりにＳ１４２−４を実行し、図２１のＳ１４３−１，２の代わりにＳ１４３−３，４を実行し、図２１のＳ１４４の代わりにＳ１４５を実行する。
以下、Ｓ１４２−４、Ｓ１４３−３，４およびＳ１４５について主に説明する。
【０１７０】
計算機検出部２２０は、起動通知パケットをマルチキャストで送信し（Ｓ１４１−１）、稼働している受信計算機３００から起動応答パケットを受信する（Ｓ１４１−２）。
不応答計算機が有り（Ｓ１４２−１：ＹＥＳ）、不応答回数が不応答閾値より大きい場合（Ｓ１４２−２：ＹＥＳ）、Ｓ１４２−４へ進む。
【０１７１】
Ｓ１４２−４において、計算機検出部２２０は、受信計算機管理テーブル２９１内の不応答計算機の登録行を削除する。
例えば、受信計算機管理テーブル２９１の１行目が計算機Ａの登録行であり、２行目が計算機Ｂの登録行であり、計算機Ａが不応答計算機である場合、計算機Ａの登録行が削除され、計算機Ｂの登録行は１行目に繰り上がる。
Ｓ１４２−４の後、Ｓ１４３−３へ進む。
【０１７２】
Ｓ１４３−３において、計算機検出部２２０は新規計算機が有るか否かを判定する。
新規計算機が有る場合（ＹＥＳ）、Ｓ１４３−４へ進む。
新規計算機が無い場合（ＮＯ）、Ｓ１４５へ進む。
【０１７３】
Ｓ１４３−４において、計算機検出部２２０は受信計算機管理テーブル２９１に行を追加し、追加した行に新規計算機を登録する。
Ｓ１４３−４の後、Ｓ１４５へ進む。
【０１７４】
Ｓ１４５において、計算機検出部２２０は以下の処理を実行する。
不応答計算機が有る場合、計算機検出部２２０は、受信計算機管理テーブル２９１内の登録行の行番号（割り当てビット番号）を設定した番号通知パケットを生成し、生成した番号通知パケットを登録行に登録された受信計算機３００へ送信する。不応答計算機の登録行の削除（Ｓ１４２−４）により行番号が変わるためである。計算機検出部２２０は、不応答計算機の登録行以降の行に登録されていた受信計算機３００にだけ番号通知パケットを送信すればよい。
不応答計算機が無く、新規計算機が有る場合、計算機検出部２２０は、新規計算機の登録行の行番号（割り当てビット番号）を設定した番号通知パケットを生成し、生成した番号通知パケットを新規計算機へ送信する。
不応答計算機と新規計算機との両方ともが無い場合、番号通知パケットの送信は不要である。
Ｓ１４５により、定期検出処理は終了する。
【０１７５】
実施の形態３により、新たに起動した受信計算機３００（新規計算機）を受信計算機管理テーブル２９１に登録することができる。
データパケット１０１内のＡＣＫフラグフィールド１０１ｃの領域サイズが可変である場合（実施の形態２参照）、停止または故障した受信計算機３００（不応答計算機）に割り当てていた割り当てビット番号を新たに起動した受信計算機３００に割り当てることにより、データパケット１０１内のＡＣＫフラグフィールド１０１ｃの増大を防ぐことができる。
データパケット１０１内のＡＣＫフラグフィールド１０１ｃの領域サイズが可変である場合（実施の形態２参照）、停止または故障した受信計算機３００（不応答計算機）を受信計算機管理テーブル２９１から削除することにより、データパケット１０１内のＡＣＫフラグフィールド１０１ｃの領域サイズを小さくすることができる。
【符号の説明】
【０１７６】
１００  通信システム、１０１  データパケット、１０１Ａ  ヘッダ、１０１Ｂ  アプリケーションデータ領域、１０１ａ  送信元ＩＰアドレス、１０１ｂ  マルチキャストアドレス、１０１ｃ  ＡＣＫフラグフィールド、１０１ｄ  フィールドサイズ情報、１０２  ＡＣＫパケット、１０３  起動通知パケット、１０４  起動応答パケット、１０５  番号通知パケット、１０９  ネットワーク、２００  送信計算機、２１０  データ送信部、２２０  計算機検出部、２３０  アプリケーション部、２９０  計算機記憶部、２９１  受信計算機管理テーブル、３００  受信計算機、３１０  データ受信部、３２０  計算機検出部、３３０  アプリケーション部、３９０  計算機記憶部、３９１  自計算機番号管理テーブル、９０１  ＣＰＵ、９０２  バス、９０３  ＲＯＭ、９０４  ＲＡＭ、９０５  通信ボード、９１１  ディスプレイ、９１２  キーボード、９１３  マウス、９１４  ドライブ、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  プログラム群、９２３  ファイル群。
【図１】
0005832305.tif 000002
【図２】
0005832305.tif 000003
【図３】
0005832305.tif 000004
【図４】
0005832305.tif 000005
【図５】
0005832305.tif 000006
【図６】
0005832305.tif 000007
【図７】
0005832305.tif 000008
【図８】
0005832305.tif 000009
【図９】
0005832305.tif 000010
【図１０】
0005832305.tif 000011
【図１１】
0005832305.tif 000012
【図１２】
0005832305.tif 000013
【図１３】
0005832305.tif 000014
【図１４】
0005832305.tif 000015
【図１５】
0005832305.tif 000016
【図１６】
0005832305.tif 000017
【図１７】
0005832305.tif 000018
【図１８】
0005832305.tif 000019
【図１９】
0005832305.tif 000020
【図２０】
0005832305.tif 000021
【図２１】
0005832305.tif 000022
【図２２】
0005832305.tif 000023