以下、本発明の実施の形態について図面を参照して説明する。
図1(a)に示すように、送信装置1(シーケンス情報列送信装置)、受信装置2が、通信網Nを介して、通信可能となっている。または、図1(b)に示すように、送信装置1、送信装置1’(主ストリーム配信装置)、受信装置2が、通信網Nを介して、通信可能となっている。
図2(a)は、図1(a)のように、送信装置1’を使用しない場合の送信装置1の構成を示す。送信装置1は、(b)の場合は外部から1ずつデータを受信するデータ受信部10と、受信されたデータを受信順に1ずつ受信装置2に送信するデータ送信部11とを備える。データ送信部11は、データ列とデータ列の区切りを特定する情報などは送信せず、1つのデータ列を送信する際は、その中のデータを1ずつ送信するようになっている。したがって、データ送信部11は、単にデータを1ずつ送信すると言ってもよい。
送信装置1は、図1(a)(b)どちらの場合でも、欠落したデータを補完するための補完用データを受信装置2に送信する補完用データ送信部12と、データ列におけるデータの送信順序を受信装置2において特定するためのシーケンス情報列を受信装置2に送信するシーケンス情報列送信部13と、データを一時的に保持するデータバッファ14とを備える。
図2(b)は、図1(b)のように、送信装置1’を使用する場合の送信装置1の構成を示す。この場合、送信装置1’が外部から受信したデータを送信装置1に送信するので、データ受信部10は、このデータを受信する。また、図1(b)の場合は、送信装置1’がデータを受信装置2に送信するので、データ送信部11は不要となる。その他については、図2(a)の構成と同様である。
なお、以下では、便宜上、図1(a)、図2(a)の場合の説明を行う。
図3は、シーケンス情報列送信部13の機能ブロック図である。
シーケンス情報列送信部13は、シーケンス情報列を生成し、シーケンス情報を構成するハッシュ値を生成するシーケンス情報決定部131と、データXのシーケンス情報決定部131での処理の中で、ハッシュ値Xnが、送信予定のシーケンス情報のハッシュ値Bn(データBに対するハッシュ値)と一致した場合に、Bnを変更する出力予定ハッシュ値更新部133と、ハッシュ値Xnとして出力が決定した場合に、ハッシュ値Xk(k:n+1〜N)が送信前のシーケンス情報記憶部138に記憶された出力予定のハッシュ値と一致するか調べる出力予定ハッシュ値チェック部134と、シーケンス情報列を保持するシーケンス情報列記憶部135と、シーケンス情報列を多重化するシーケンス情報列多重化部136と、シーケンス情報列を受信装置2に送信するシーケンス情報列送信部137と、送信済みのシーケンス情報列を保持するシーケンス情報記憶部138とを備える。
図4は、受信装置2の機能ブロック図である。
受信装置2は、送信装置1からデータを受信するデータ受信部21と、データを保持するデータバッファ22と、データバッファ22に保存されたデータから回復対象のデータを限定する回復対象データ限定部23と、回復対象である各データからハッシュ値を生成するハッシュ値生成部24と、シーケンス情報列に基づいてデータの送信順序を特定するデータ回復部25と、回復されたデータ列を保持するデータ列記憶部26と、多重化されたシーケンス情報列を受信し、元のシーケンス情報列に回復させるシーケンス情報列回復部27と、回復したシーケンス情報列を保持するシーケンス情報列記憶部28と、受信するまでに欠落したデータを補完用データに基づいて補完するデータ補完部29と、回復されたデータ列の正常性を確認する正常性確認部30と、回復完了したデータから重複するデータを検索し削除する重複データ削除部31と、回復完了したデータ列を保持する回復完了データ列記憶部32と、回復完了したデータ列を外部に出力する回復完了データ列出力部33とを備える。
図5は、シーケンス情報の構成を示す図である。
シーケンス情報は、データに1対1で対応し、データから互いに異なる方法で生成されたハッシュ値のうちの1つならびに、そのハッシュ値の生成方法を示すフラグfを含む。シーケンス情報は、例えば、第1の方法でハッシュ値h1が生成され、第2の方法でハッシュ値h2が生成された場合、例えば、一方のハッシュ値h2と、ハッシュ値h2の生成方法を示すフラグf「2」とを含む。なお、このようにハッシュ値の生成方法の数が2の場合、フラグf「3」を含むシーケンス情報にはハッシュ値は含まれない。また、ハッシュ値の生成方法を3以上としてもよい。この場合、その数に1を加算した値と同じ値のフラグfを含むシーケンス情報にはハッシュ値は含まれない。
図6は、シーケンス情報列の構成を示す図である。
シーケンス情報列は、欠落のないデータ列内のデータ数と同数のシーケンス情報をデータの送信順に並べたものである。このデータ数(シーケンス情報数)をしきい値Nmaxという。
本実施の形態では、ハッシュ値生成方法の数を示すしきい値imaxが、送信装置1に与えられ、例えば、受信装置2はしきい値imaxを送信装置1から受信し、保持する。しきい値imaxは送信装置1、受信装置2のそれぞれに与えてもよい。しきい値imaxは送信装置1と受信装置1とで共通のしきい値である。
また、本実施の形態では、1つのシーケンス情報列を、送信開始して一定期間が経過するまでに送信終了することとなっており、その期間の長さを示す期間長Tが送信装置1に与えられる。
また、本実施の形態では、シーケンス情報列の多重化方法を示す多重化情報Dと多重数DNが送信装置1に与えられ、例えば、受信装置2は多重化情報Dと多重数DNを送信装置1から受信し、保持する。多重化情報Dと多重数DNは送信装置1、受信装置2のそれぞれに与えてもよい。
さて、図2のデータ受信部10は、外部から1ずつ受信したデータをデータバッファ14に保持する。データ送信部11は、データバッファ14からデータを受信順に読み出し、読み出した順に受信装置2へ送信し、送信済みのデータは、送信済み用のデータバッファ(不図示)に移す。つまり、データ送信部11は、1つのデータを送信し終えたら、次のデータを送信する。データは、例えば、パケットである。
図2の補完用データ送信部12は、通信網Nにおけるデータの欠落を補完するための補完用データを生成し、受信装置2に送信する。補完用データは、パリティやデータの複製である。
図7は、送信装置1におけるシーケンス情報列の送信に関するフローチャートである。
シーケンス情報決定部131は、データバッファ14において未だシーケンス情報を生成していないデータから、送信順が最先のデータを選択し、このデータのシーケンス情報を生成して、シーケンス情報列記憶部135に加える(S1)。こうして、シーケンス情報列記憶部135においてシーケンス情報列が形成されていく。
シーケンス情報列内のシーケンス情報の数がしきい値Nmaxに達していないなら(S3:NO)、ステップS1に戻る一方、シーケンス情報列多重化部136は、シーケンス情報列内のシーケンス情報の数がしきい値Nmaxに達し(S3:YES)、多重化情報Dが単純多重を示すものなら(S5:単純多重)、シーケンス情報列を分割し、多重数DNと同数の複製を生成する(S7)。
シーケンス情報列多重化部136は、シーケンス情報列記憶部135内のシーケンス情報の数がしきい値Nmaxに達し(S3:YES)、多重化情報DがFEC多重を示すものなら(S5:FEC多重)、シーケンス情報列を分割し、多重数DNと同数のパリティを生成する(S9)。
なお、シーケンス情報列の分割前には、例えば、シーケンス情報内のフラグfが「1」なら当該シーケンス情報からハッシュ値h1のみを残し、フラグfが「2」ならハッシュ値h2のみを残し、フラグfが「3」なら両方のハッシュ値h1、h2がシーケンス情報から削除される。
シーケンス情報列送信部137は、分割されたシーケンス情報列と複製または、分割されたシーケンス情報列とパリティを、期間長Tを有する期間に分散させて受信装置2に送信する(S11)。分散して送信するのは、集中的に送信し、そのタイミングで通信異常などがあると、その殆どが失われる可能性があるからである。
なお、シーケンス情報記憶部138には、シーケンス情報列記憶部135に記憶されたシーケンス情報列(シーケンス情報はハッシュ値h1、h2およびフラグfを含む)のうちの、フラグfを除くハッシュ値のみ(例えばハッシュ値h1、h2)が移され、すなわち、シーケンス情報列記憶部135からは処理済みのシーケンス情報列が削除され、制御はステップS1に戻る。
図8は、ステップS1の詳細フローチャートである。
シーケンス情報決定部131は、しきい値imaxの比較対象となる変数を1に初期化する(S101)。
次に、シーケンス情報決定部131は、対象のデータからしきい値imaxと同数の方法(互いに異なる方法)でハッシュ値(例えば、ハッシュ値h1、h2)を生成する(S107)。
なお、このように、初回のステップS107で例えばハッシュ値h1、h2(しきい値imaxと同数のハッシュ値)を生成し、S108で、i=1のときハッシュ値h1、i=2のときハッシュ値h2を使用するようにしてもよいし、S108で、i=1のときはハッシュ値h1を生成し、i=2のときはハッシュ値h2を生成してもよい。
シーケンス情報決定部131は、変数iがしきい値imaxを超えたなら(S103:i>imax)、ステップS107で生成したハッシュ値ならびに所定の無効値であるフラグfを含むシーケンス情報を生成し(S105)、シーケンス情報をシーケンス情報列記憶部135(シーケンス情報列)に加え(S106)、処理を終える。
一方、シーケンス情報決定部131は、変数iがしきい値imax以下なら(S103:i≦imax)、変数iに対応する生成方法によりステップS107で生成されたハッシュ値(対象ハッシュ値という。変数iが1の場合、対象ハッシュ値はハッシュ値h1であり、変数iが2の場合、対象ハッシュ値はハッシュ値h2である。)が、シーケンス情報列記憶部135に記憶された、変数iに対応する生成方法で生成されたハッシュ値(出力前ハッシュ値という)と、シーケンス情報記憶部138に記憶された、変数iに対応する生成方法で生成されたハッシュ値(出力済ハッシュ値という)のいずれかに一致し、且つ、一致したハッシュ値のデータ同士が異なっている(衝突という)か否かを判定する(S108)。
シーケンス情報決定部131は、出力済ハッシュ値に対する衝突があったなら(S109:出力済ハッシュ値)、変数iに1を加算し(S111)、ステップS103に戻る。
シーケンス情報決定部131は、出力前ハッシュ値に対する衝突があったなら(S109:出力前)、衝突した出力前ハッシュ値を含むシーケンス情報(以下、衝突出力前シーケンス情報)内のフラグfが変数iに一致するか否かを判定する(S113)。一致しない場合は、ステップS111に進む。
一方、出力予定ハッシュ値更新部133は、一致した場合は(S113:YES)、変数jに変数iの値を代入する(S112)。
次に、出力予定ハッシュ値更新部133は、変数jがしきい値imaxと同じなら(S115:j=imax)、衝突出力前シーケンス情報のフラグfを無効値で更新し(S117:無効化)、ステップS111に進む。
出力予定ハッシュ値更新部133は、変数jがしきい値imax未満なら(S115:j<imax)、変数jに1を加算し(S131)、対象ハッシュ値(変数j対応する方法によりステップS107で生成されたハッシュ値)が、変数jに対応する方法で生成された出力前ハッシュ値かつフラグfが変数jのハッシュ値、または、変数jに対応する方法で生成された出力済ハッシュ値のいずれかに衝突するか否かを判定する(S133)。
出力予定ハッシュ値更新部133は、衝突があった場合は、ステップS115に戻り、なかった場合は、衝突出力前シーケンス情報内のフラグfを変数jの値で更新し(S135:f←j)、ステップS111に戻る。
出力予定ハッシュ値チェック部134は、ステップS108で衝突がなく(S108:なし)、且つ、変数iがしきい値imaxと同じなら(S141:i=imax)、ステップS107で生成した全てのハッシュ値(例えば、ハッシュ値h1、h2)ならびに変数iと同じ値のフラグfを含むシーケンス情報をシーケンス情報列記憶部135(シーケンス情報列)に加え(S149)、処理を終える。
出力予定ハッシュ値チェック部134は、変数iがしきい値imax未満なら(S141:i<imax)、変数iに1を加算し(S143)、変数iに対応する方法によりS107で生成された対象ハッシュ値が、出力前ハッシュ値(当該出力前ハッシュ値を含むシーケンス情報内のフラグに対応する方法で生成されたハッシュ値)に衝突するか否かを判定する(S145)。
衝突がなかったならステップS141に戻り、あったなら、図において点線で囲んだ部分の処理を行い(S200)、S141に戻る。
図9は、ハッシュ値生成の方法の一例を示す図である。
図9(a)に示すように、シーケンス情報決定部131は、対応するデータから1つのハッシュ値を生成(計算)し、これをしきい値imaxに等しい分割数となるように分割する。フラグが無効値でない場合は、分割で得た各部分、例えば、ハッシュ値h1、h2のうちの1つがシーケンス情報に含まれる。
または、図9(b)に示すように、シーケンス情報決定部131は、対応するデータから、しきい値imaxに等しい数の各計算方法でハッシュ値、例えば、ハッシュ値h1、h2を計算する。フラグが無効値でない場合は、これらのうちの1つがシーケンス情報に含まれる。
なお、図は、しきい値imaxが2の場合の例であり、しきい値imaxが3以上の場合は、ハッシュ値h1、h2以外のハッシュ値も生成され、フラグが無効値でない場合は、そのうちの1つがシーケンス情報に含まれることとなる。
(変形例)
なお、図7、図8の動作では、送信前のシーケンス情報列において、各シーケンス情報内のハッシュ値が、そのシーケンス情報に対応するデータより先に送信される予定のデータに対応するシーケンス情報内のハッシュ値に衝突を防止する。このように、衝突を防止する方法として、例えば、各シーケンス情報内のハッシュ値が、そのシーケンス情報に対応するデータより後に送信される予定のデータに対応するシーケンス情報内のハッシュ値に衝突のを防止するようにしてもよい。
図10は、受信装置2の動作を示すフローチャートである。
データ受信部21は、送信装置1から通信網Nを介してデータを逐次受信し、データバッファ22に保存する(R1)。なお、通信網Nにて欠落したデータは、当然ながらデータバッファ22には保存されない。
回復対象データ限定部23は、データバッファ22に保存されたデータから回復対象のデータを限定する(R3)。具体的には、現在時刻から予め定められた時間遡った時刻以降に受信したデータを回復対象から除外し、その時刻から予め定められた時間遡った時刻以降に受信したデータを回復対象とする。なお、回復対象から除外することは、前述の送信装置1における変形例を適用した際に必要であり、そうでない場合は、除外を行わなくてよい。
次に、ハッシュ値生成部24は、回復対象である各データからしきい値imaxと同数の方法(互いに異なる方法)でハッシュ値を生成する(R5)。
これと並行して、シーケンス情報列回復部27は、送信装置1から通信網Nを介して、分割されたシーケンス情報列とパリティまたは、分割されたシーケンス情報列と複製を逐次受信する(R11)。シーケンス情報列回復部27は、期間長Tと同じ時間が経過し、多重化情報Dが単純多重を示すものなら(R15:単純多重)、分割されたシーケンス情報列で欠落したものを複製により回復し、結合することでシーケンス情報列を回復させ、シーケンス情報列記憶部28に記憶させる(R17)。
シーケンス情報列回復部27は、多重化情報DがFEC多重を示すものなら(R15:FEC多重)、分割されたシーケンス情報列で欠落したものをパリティにより回復し、結合することでシーケンス情報列を回復させ、シーケンス情報列記憶部28に記憶させる(R19)。
データ回復部25は、回復対象の各データにつき、当該データ(回復対象データという)からステップR5で生成されたしきい値imaxと同数のハッシュ値(それぞれ対象ハッシュ値という)のいずれかに一致するハッシュ値をシーケンス情報列から検索し、該当のハッシュ値(シーケンス情報内一致ハッシュ値という)が存在し、且つ、シーケンス情報内一致ハッシュ値に一致した対象ハッシュ値(対象一致ハッシュ値という)を得た方法が、シーケンス情報内一致ハッシュ値を得た方法(シーケンス情報内一致ハッシュ値を含むシーケンス情報(一致シーケンス情報という)内のフラグに対応する方法)と同じであるなら、当該回復対象データの送信順序は、シーケンス情報列における一致シーケンス情報の順序に等しいとし、例えば、当該一致シーケンス情報に対し、当該回復対象データを示すデータ識別子を対応づける(R21)。
図11は、ステップR21の具体例を示す図である。
ここでは、ステップR5で生成されたハッシュ値の集合をハッシュ値集合という。ハッシュ値集合において、同一データから生成された2つのハッシュ値をハッシュ値組という。ハッシュ値組の中で、シーケンス情報のハッシュ値h1と同じ方法で生成されたものをハッシュ値H1、ハッシュ値h2と同じ方法で生成されたものをハッシュ値H2という。また、ハッシュ値の値は、便宜的に1桁の10進数で表現する。
図において番号(NO)「1」から「5」の各シーケンス情報は、無効値でないフラグfを含むので、これらシーケンス情報内のハッシュ値は有効であり、一方、番号「6」のシーケンス情報は無効値であるフラグfを含むので、このシーケンス情報内のハッシュ値は無効となっている。
最も早く受信したデータ1については、ハッシュ値H1「3」が、番号(NO)「1」のシーケンス情報におけるハッシュ値h1「3」に一致し、他の番号のシーケンス情報は該当がないため、当該シーケンス情報に対し、データ1を示すデータ識別子(データID)を対応づける。
次に受信したデータ2については、ハッシュ値H1「6」、H2「2」とも、該当がないので、いずれのシーケンス情報に対してもデータIDを対応づけない。
次に受信したデータ3については、ハッシュ値H2「1」が、番号「3」のシーケンス情報におけるハッシュ値h2「1」に一致し、番号「4」のシーケンス情報におけるハッシュ値h2「1」に一致し、他の番号のシーケンス情報は該当がないため、各シーケンス情報に対し、データ3を示すデータIDを対応づける。
次に受信したデータ4については、ハッシュ値H1「5」が、番号「2」のシーケンス情報におけるハッシュ値h1「5」に一致し、他の番号のシーケンス情報は該当がないため、当該シーケンス情報に対し、データ4を示すデータIDを対応づける。
次に受信したデータ5については、ハッシュ値H1「9」、H2「2」とも、該当がないので、いずれのシーケンス情報に対してもデータIDを対応づけない。
次に受信したデータ6については、ハッシュ値H2「1」が、番号「3」のシーケンス情報におけるハッシュ値h2「1」に一致し、番号「4」のシーケンス情報におけるハッシュ値h2「1」に一致し、他の番号のシーケンス情報は該当がないため、各シーケンス情報に対し、データ6を示すデータIDを対応づける。
次に、データ3とデータ6を比較し、両者が一致したなら、例えば、番号「3」のシーケンス情報に付与されたデータ6のデータIDを削除し、番号「4」のシーケンス情報に付与されたデータ3のデータIDを削除する。なお、番号「4」のシーケンス情報に付与されたデータ6のデータIDを削除し、番号「3」のシーケンス情報に付与されたデータ3のデータIDを削除してもよい。
なお、この例では、番号「5」のシーケンス情報内のフラグは「1」であり、つまり、無効値(しきい値imaxに1を加えた値)でないが、検索で該当しなかったので、データIDを対応づけることができない。
一方、番号「6」のシーケンス情報については、フラグfが無効値であるので、検索の対象外であり、よって、データIDを対応づけることができない。
このようなシーケンス情報については、後述のごとく、データ補完部29によりデータ補完がなされる。
図10に戻り、説明を続ける。
データ回復部25は、シーケンス情報列の各シーケンス情報に対応づけたデータIDに対応するデータを、シーケンス情報列におけるシーケンス情報の順に並べたデータ列を生成し、データ列記憶部26に記憶させる(R23)。このデータ列においては、図11の番号「5」、「6」のシーケンス情報のように、データIDが対応づけられないシーケンス情報に対応する箇所については、データが欠落している。
次に、データ補完部29は、データ列(データ列記憶部26)において欠落しているデータを、受信した補完用データに基づいて、補完する(R25)。
次に、ハッシュ値生成部24は、補完された各データにつき、対応するシーケンス情報内のフラグに対応する方法でハッシュ値を生成する(R27)。
次に、正常性確認部30は、補完された各データにつき、対応するシーケンス情報内のハッシュ値と、ステップR27で当該データについて生成されたハッシュ値とが一致するか否かを判定し、一致しないなら、データ列から当該データを削除する(R29)。
なお、正常性確認部30は、削除するデータを含むデータ列を削除してもよい。データを削除するかデータ列を削除するかは、パラメータとして受信装置2に与え、正常性確認部30は、パラメータに応じた処理を行えばよい。
次に、重複データ削除部31が、ステップR25で補完されたデータがあるなら、当該各データにつき、回復完了データ列記憶部32に記憶されたいずれかのデータに一致するか否かを判定し、一致したなら、回復完了データ列記憶部32の当該一致したデータを削除する(R31)。
例えば、回復完了データ列記憶部32において判定対象となるデータは、受信時刻の早すぎるデータなどを除外すべく、時間やデータ数やデータ列数で限定してもよい。
次に、データ列は、データ列記憶部26から回復完了データ列記憶部32に移され(R33)、制御はステップR1、R11に戻る。
図4の回復完了データ列出力部33は、例えば、外部からの指示により、回復完了データ列記憶部32から全てまたは指示された区間のデータ(回復完了データ列)を読み出し、出力する。
図12以降は、本実施の形態での課題の解決方法を示す。
図12は、ハッシュ方式の説明図である。
通常、データ列内のデータ位置を特定するために、ヘッダに含まれるシーケンス番号等のデータを特定する情報をデータの送信側と受信側で共通的に利用する。
ハッシュ値方式では、データからハッシュ値を計算する方法を、送信側と受信側で共有する。送信側で、データからハッシュ値を計算し、データ列とシーケンス情報列を作成し、受信側に送信する。受信側では、データ列とシーケンス情報列を受信し、データから計算したハッシュ値を、シーケンス情報列のハッシュ値から特定し、データの位置を特定する。
このようなデータ位置の特定は、データ回復部25がステップR21で行う処理により実現される。
図13は、遅延ガードの説明図である。
ハッシュ値方式では、ハッシュ値の特性上、データをより情報量の少ないハッシュ値に写像するため、内容の異なるデータから、同一のハッシュ値が算出される場合がある。その為、通信網のゆらぎ等による遅延により、本来のデータよりも遅れて到着した異なるデータが、異なるデータ列に入り、本来とは誤った位置に特定されることがある。
これに対処するため、送信側で、一定期間のデータとハッシュ値のリスト(遅延ガード)を保持しておき、内容の異なるデータから、同一のハッシュ値が算出された(衝突)場合には、同ハッシュ値を送信しないようにする。それにより、過去のデータが誤ったデータ列やデータ列内で誤った位置に特定されることを防ぐことができる。
遅延ガードは、図8のステップS108において、出力済ハッシュ値に対する衝突あるか否かを判定する処理などにより実現される。
図14は、早着ガードの説明図である。
ハッシュ値方式では、データをより情報量の少ないハッシュ値に写像するため、内容の異なるデータから、同一のハッシュ値が算出される場合がある。 その為、通信網のゆらぎ等により、本来のデータよりも、早着した異なるデータが、誤ったデータ列内に入り、誤った位置に特定されることがある。
これに対処するため、送信側で、一定期間のデータとハッシュ値のリスト(早着ガード)を保持しておき、内容の異なるデータから、同一のハッシュ値が算出された(衝突)場合には、同ハッシュ値を送信しないようにする。また、受信側で、受信データを到着順の末尾から一定期間(Tf=Ts+NW(ネットワーク)ゆらぎ)分を、シーケンス情報列による位置特定対象から除外する。それにより、未来のデータが誤ったデータ列やデータ列内で誤った位置に特定されることを防ぐことができる。
例えば、送信側でシーケンス情報列(1〜4)送信にかける時間をTsとし、Ts=Tb(データ列分のバッファリング時間)である場合、受信側で、シーケンス情報列(1〜4)受信時には、データ9〜12も受信している可能性がある。
ここでは、シーケンス情報列送信にかける時間(Ts)がデータ列1つ分のバッファリング時間(Ts)と一致することを前提としておいている。シーケンス情報列の送信にかける時間が0であれば、TfはNW揺らぎ時間に一致する。
早着ガードは、送信側においては変形例を適用することで実現され、受信側においては回復対象データ限定部23が現在時刻から予め定められた時間遡った時刻以降に受信したデータを回復対象から除外することにより実現される。
図15は、多段ガードハッシュ値の説明図である。
ハッシュ値の衝突を防ぐには、情報量のより多いハッシュ値を使用する必要がある。しかし、情報量のより多いハッシュ値を使用すると、必要なデータ量が多くなり、データ送受信コストが高くなる。
これに対処するため、情報量の少ないハッシュ値計算方法を、あらかじめ定めた手順で複数使用し、衝突した場合には、別の計算方法を利用することで、情報量のより少ないハッシュ値で、情報量のより多いハッシュ値を使用した場合と同様の確率でハッシュ値の衝突を防ぐ。
多段ガードハッシュ値は、図8のステップS108において、出力前ハッシュ値や出力済ハッシュ値に対する衝突があるか否かを判定する処理などにより実現される。
図16は、多段ガードハッシュ値の特に分割方式の説明図である。
データに対して、所定のハッシュ値関数でハッシュ値(例えば128bit)を生成し、これをしきい値imaxに等しい分割数(例えば、2)で分割し、一方のハッシュ値h1(先頭64bit)、他方のハッシュ値h2(後方64bit)を作成する。ハッシュ値h1と衝突した場合には、ハッシュ値h2と比較し、衝突しなかった場合には、ハッシュ値h2を使用する。
受信側でも、受信したデータに対して、所定のハッシュ値関数でハッシュ値(例えば128bit)を生成し、これをしきい値imaxに等しい分割数(例えば、2)で分割し、ハッシュ値H1(先頭64bit)、ハッシュ値H2(後方64bit)を作成する。
ハッシュ値H1、H2のいずれかに一致するハッシュ値h1、h2をシーケンス情報列から検索し、一致したハッシュ値の生成方法が同じなら、データの送信順序は、該当シーケンス情報の順序に等しいこととする。
多段ガードハッシュ値(分割方式)は、図9(a)に示すような、対応するデータから1つのハッシュ値を計算し、これをしきい値imaxに等しい分割数となるように分割し、分割で得た各部分、例えば、ハッシュ値h1、h2をシーケンス情報に含めること、ならびに、図8のS108において、出力前ハッシュ値や出力済ハッシュ値に対する衝突があるか否かを判定する処理などにより実現される。
図17は、FEC処理による回復結果の正当性確認の説明図である。
FEC処理とハッシュ値方式を組み合わせた場合、ハッシュ値が衝突し、データが、誤ったデータ列や、データ列で誤った位置に特定された場合、同一データ列内に損失データがあり、誤ったデータがFEC処理により回復するデータに使用された場合、回復するデータは不正になる。不正なデータは、それを利用するアプリケーションの挙動に影響を与える。
これに対処するため、回復したデータに対して、ハッシュ値計算を行い、シーケンス情報列の中で対応するハッシュ値と比較、同一値の場合、正当に回復したデータとして採用し、同一値でない場合、不正に回復したデータとして破棄する。
FEC処理による回復結果の正当性確認は、図10のステップR29において、各データにつき、対応するシーケンス情報内のハッシュ値h1と、R27で生成したハッシュ値とが一致するか否かを判定し、一致しないなら、データ列から当該データを削除することで実現される。
図18は、重複対策の説明図である。
同図では、シーケンス情報列A、Bは、異なるデータ(データ8、3)から得られたものだが同一のハッシュ値(ハッシュ値8)を含む。例えば、データ8が本来よりも早く到着し、データ3が伝送中にロスした場合を想定する。
この場合、シーケンス情報列Aにより、データ8は誤って特定され、つまり、データ2の次に送信されたと特定される。
一方、ロスしたデータ8は、シーケンス情報列Bによっては特定できず、データ列からは欠損しているが、データ補完部による処理で復元される。
よって、復元されたデータは、誤って位置特定されたデータと重複してしまう。
これに対処するため、誤って前のデータ列に位置特定され、本来のデータ列で回復された早着データを検出・除去し、重複を防ぐ。例えば、回復データが発生するたびに、生成済みのデータ列と比較し、一致したデータを削除する。
重複対策は、図10のステップR31において、ステップR25で補完されたデータがあるなら、当該各データにつき、回復完了データ列記憶部32に記憶されたいずれかのデータに一致するか否かを判定し、一致したなら、回復完了データ列記憶部32の当該一致したデータを削除することで実現される。
以上のように、本実施の形態によれば、順次に送信される複数のデータを受信する受信側で送信順序を特定するための技術を提供することができる。
具体的には、以下の通りである。
送信装置(1)は、複数のデータが順次に受信装置(2)に送信される場合の当該データの送信順序を前記受信装置(2)で特定するためのシーケンス情報列を前記受信装置(2)に送信する手段(13)を備える。
例えば、前記シーケンス情報列は、前記各データに対応するシーケンス情報を含み、前記シーケンス情報列におけるシーケンス情報の順序は、前記送信順序に一致しており、前記シーケンス情報は、当該シーケンス情報に対応するデータの送信順序を特定するための情報(有効なハッシュ値)と、当該有効なハッシュ値の生成方法を示すフラグ(f)とを含む。
例えば、前記送信装置(1)は、前記シーケンス情報を生成する手段(131)と、送信済みの前記ハッシュ値を記憶する手段(138)を備え、前記シーケンス情報を生成する手段(131)は、前記記憶されたハッシュ値に衝突するハッシュ値が有効なものとして当該シーケンス情報に含まれるのを防止する。
例えば、前記送信装置(1)は、前記シーケンス情報を生成する手段(131)と、後から送信されるデータに対応する前記ハッシュ値を記憶する手段(135)を備え、前記シーケンス情報を生成する手段(131)は、前記記憶されたハッシュ値に衝突するハッシュ値が有効なものとして当該シーケンス情報に含まれるのを防止する。
例えば、図9(a)に示すように、前記シーケンス情報に含まれるハッシュ値は、対応するデータから生成されたハッシュ値を分割して得られる複数の部分のうちの1つである。
例えば、図9(b)に示すように、前記シーケンス情報に含まれるハッシュ値は、対応するデータから別々の計算方法で計算されたハッシュ値のうちの1つである。
一方、受信装置(2)は、複数のデータを逐次受信する手段(21)と、前記データの送信順序を特定するためのシーケンス情報列を受信する手段(27)と、前記シーケンス情報列に基づいて、前記送信順序を特定する手段(25)とを備える。
例えば、前記シーケンス情報列は、前記各データに対応するシーケンス情報を含み、前記シーケンス情報列におけるシーケンス情報の順序は、前記送信順序に一致しており、前記シーケンス情報は、当該シーケンス情報に対応するデータの送信順序を特定するための情報(有効なハッシュ値)と、当該有効なハッシュ値の生成方法を示すフラグ(f)とを含む。
例えば、前記受信装置(2)は、受信したデータから複数の生成方法でハッシュ値を生成する手段(24)を備え、前記送信順序を特定する手段(25)は、前記シーケンス情報列内のハッシュ値と、当該ハッシュ値を含むシーケンス情報内のフラグに対応する方法で前記ハッシュ値を生成する手段(24)により生成された前記ハッシュ値とが一致するなら、当該データの送信順序は、当該シーケンス情報列における当該シーケンス情報の順序に等しいとする。
例えば、前記受信装置(2)は、現在時刻から予め定められた時間遡った時刻以降に受信したデータを前記送信順序を特定する対象から除外する手段(23)を備える。
例えば、前記受信装置(2)は、受信までの間のデータの欠落を補完するための補完用データを受信し、受信されたデータを前記特定された送信順序の順に並べたデータ列にデータの欠落がある場合、前記補完用データに基づいて、当該欠落を補完する手段(29)と、前記補完されたデータと該データを含むデータ列よりも送信順が前のデータ列に含まれるデータとが一致するなら、当該送信順が前の当該データ列に含まれる当該データを削除する手段(31)とを備える。
例えば、前記受信装置(2)は、受信までの間のデータの欠落を補完するための補完用データを受信し、受信されたデータを前記特定された送信順序の順に並べたデータ列にデータの欠落がある場合、前記補完用データに基づいて、当該欠落を補完する手段(29)と、補完されたデータに対応するシーケンス情報内のハッシュ値と、当該シーケンス情報内のフラグに対応する方法で前記ハッシュ値を生成する手段(24)により生成されたハッシュ値とが一致しないなら、当該データ列から当該データを削除する手段(30)とを備える。なお、削除する手段(30)は、削除するデータを含むデータ列を削除してもよい。
また、本実施の形態の送信装置や受信装置としてコンピュータを機能させるためのコンピュータプログラムは、半導体メモリ、磁気ディスク、光ディスク、光磁気ディスク、磁気テープなどのコンピュータ読み取り可能な記録媒体に記録でき、また、インターネットなどの通信網を介して伝送させて、広く流通させることができる。