以下、本発明の各実施の形態について、図面を参照して詳細に説明する。
(実施の形態1)
図1は、本発明の実施の形態1に係るデータ送信装置としての送信端末を含む通信システムの構成を示すシステム構成図である。本実施の形態は、映像および音声を多地点にリアルタイムで配信するテレビ会議システムに本発明を適用した例である。
図1において、通信システム100は、明示的マルチキャスト方式によるパケット配信を行う送信端末200と、送信端末200からパケットの配信を受ける受信端末300a〜300eとを有する。送信端末200および受信端末300a〜300eは、同一のスモールグループに参加している。以下、記述の簡素化のため、受信端末300a〜300eを個別に記述する場合には、それぞれ受信端末A〜Eと記述する。
送信端末200は、配信の対象となる映像および音声のストリームデータを、通し番号であるシーケンス番号が付されたデータパケットに格納して、受信端末A〜Eに配信する。また、送信端末200は、受信端末A〜Eからの要求に応じて、配信したデータの再送を行う。
受信端末A〜Eは、自己を宛先とするデータパケットをそれぞれ受信し、元のストリームデータを再生する。また、受信端末A〜Eは、受信パケットのシーケンス番号の抜けからパケットロスの発生を検出し、送信端末200に対してデータの再送要求を行う。具体的には、受信端末A〜Eは、受信されなかったデータパケットのシーケンス番号と、IPアドレスやポート番号などの自端末を特定するための識別情報とを記述した再送要求パケットを生成し、送信端末200に送信する。
受信端末A、Bは、明示的マルチキャスト方式に対応しており、受信パケットに未送信の宛先が指定されているとき、受信パケットを複製し、未送信の宛先にパケットを転送する。一方、受信端末C〜Eは、明示的マルチキャスト方式に対応しておらず、パケットの転送は行わない。
図1において、各端末を結ぶ線は、通信システム100で構築されている配送木の構成を示している。
通信システム100では、送信端末200のパケットの転送先は受信端末Aであり、受信端末Aのパケットの転送先は受信端末B、Cであり、受信端末Bのパケットの転送先は受信端末D、Eとなっている。受信端末D、Eは、受信端末Bの下流に位置し、受信端末B、Cは、受信端末Aの下流に位置している。
ここで、送信端末200の構成および動作の説明に先立ち、本実施の形態における再送パケットを早いタイミングで送出する方法の概要について説明する。
図1から明らかなように、受信端末Bに到達していないパケットは、受信端末D、Eにも到達しない。したがって、受信端末Bによって再送を要求されたデータは、受信端末D、Eからも再送を要求される。また、受信端末Aに到達していないパケットは、受信端末B〜Eにも到達しない。したがって、受信端末Aによって再送を要求されたデータは、受信端末B〜Eからも再送を要求される。
通常、パケットロスが発生したとき、下流に位置する受信端末300の再送要求よりも、その受信端末300の上流に位置する受信端末300の再送要求の方が、送信端末200に早く到達する。したがって、送信端末200が再送要求パケットの送信元の受信端末300(以下適宜「再送要求元」という)の下流に位置する他の受信端末300にも再送パケットを送信することにより、実際の再送要求パケットの受信に先行して下流の受信端末300に再送パケットを送出することができる。また、受信端末300と送信端末200のネットワーク上の距離が、上流に位置する受信端末300よりも、下流に位置する受信端末300の方が短い場合、下流の受信端末300からの再送要求の方が上流の受信端末300よりも早く送信端末200に届く場合がある。その場合でも、上流の受信端末300からの再送要求を送信端末200は受信できるため、最初に下流の受信端末からの再送要求を受信した時点で、上流の受信端末に対しても再送パケットを送信することができる。これは、実際の配送木と推定した配送木が同一でなくても、早いタイミングで再送が可能なことを示す。
上記した先行的な再送パケット送出を実現するには、送信端末200で、どの受信端末300の下流にどの受信端末が位置するか、つまり、通信システム100で構築されている配送木を推定する必要がある。
まず、各受信端末300の再送要求の実施の回数(以下「再送要求回数」という)に着目する。
下流に位置する受信端末の再送要求回数は、自端末の上流に位置する受信端末300の再送要求回数以上の値となる。図1に示す通信システム100では、受信端末D、Eの再送要求回数は、受信端末Bの再送要求回数以上となり、受信端末B〜Eの再送要求回数は、受信端末Aの再送要求回数以上となる。任意の時点の受信端末A〜Eの再送要求回数を順にNA〜NEと置くと、以上の各受信端末300の再送要求回数の大小関係は、以下の式(1)で表すことができる。
NA ≧ NB ≧ ND
NA ≧ NB ≧ NE
NA ≧ NC ・・・・・・(1)
任意の2つの受信端末300を第1および第2の受信端末と置くと、これら2つの受信端末の相対的な配置パターンとして、「第1の受信端末が第2の受信端末の上流にある配置」、「第2の受信端末が第1の受信端末の上流にある配置」、および「第1の受信端末と第2の受信端末が別のルート上に存在する配置」、の3つが考えられる。
第1の受信端末の再送要求回数が第2の受信端末の再送要求回数以上の値である場合、「第1の受信端末が第2の受信端末の上流にある配置」の可能性を排除することができる。また、第2の受信端末の再送要求回数が第1の受信端末の再送要求回数以上の値である場合、「第2の受信端末が第1の受信端末の上流にある配置」の可能性を排除することができる。
ところが、例えば受信端末Bと受信端末Cのようにルートの異なる受信端末300の間では、再送要求回数の大小関係は不定である。したがって、各受信端末300の再送要求回数のみから、残りの2つの配置パターンのいずれに該当するかを特定することは難しい。
次に、各受信端末300の再送要求の対象に着目する。
上記した第1および第2の受信端末において、同一のパケットについて再送要求を行う割合が高ければ高いほど、「第1の受信端末と第2の受信端末が別のルート上に存在する配置」である可能性は低くなる。すなわち、第1の受信端末と第2の受信端末が同一ルート上に存在する可能性が高くなる。
更に、例えば、第1の受信端末から再送要求されるパケットが、第2の受信端末からも再送要求される割合が高ければ高いほど、第1の受信端末が第2の受信端末の上流に位置する可能性が高くなる。すなわち、第1の受信端末から再送要求されるパケットが第2の受信端末から再送要求される割合に基づいて、配送木における第1の受信端末と第2の受信端末と相対的な配置パターンを推定することができる。
そこで、本実施の形態の送信端末200は、個々の受信端末300から再送要求されたパケットが、他の受信端末300からも再送要求されたか否かを判断し、判断結果を記録しておくことにより、各受信端末300の再送要求の配送木の推定を可能にする。そして、送信端末200は、再送要求を受信するごとに、推定される配送木で下流に位置する他の受信端末300が存在するか否かを判断し、該当する受信端末300が存在する場合には、実際の再送要求の受信に先行して、その下流に位置する他の受信端末300にパケットを再送する。これにより、下流に位置する受信端末300に対する再送パケットの送出の迅速化を図る
以下、送信端末200の構成および動作について説明する。まず、送信端末200の構成について説明する。
図2は、実施の形態1に係る送信端末200の構成を示すブロック図である。
図2において、送信端末200は、データパケット生成部210、データパケット送信部220、データ蓄積部230、再送要求受信部240、受信端末関連性更新部250、再送先選択部260、および再送部270を有する。
データパケット生成部210は、外部のエンコーダなどの装置(図示せず)から、映像および音声のストリームデータを入力する。これらの映像および音声は、テレビ会議において、ディジタルカメラやマイクロフォン(いずれも図示せず)で、入力されたものである。データパケット生成部210は、入力された映像および音声のストリームデータを分割し、分割したデータを格納したデータパケットを構築する。このデータパケットは、宛先として受信端末A〜Eを明示的に指定する明示的マルチキャストパケットであり、また、分割の順序に従ってシーケンス番号を昇順に付されている。データパケット生成部210は、構築したデータパケットを、再送用にデータ蓄積部230に保存するとともに、データパケット送信部220に出力する。
データパケット送信部220は、データパケット生成部210から入力されたデータパケットを、受信端末A〜Eを配置したネットワーク400に送出する。ここでは、図1に示したように、送信端末200のデータパケット転送先は、受信端末Aである。
データ蓄積部230は、データパケット生成部210から入力された再送用のデータパケットを保存するとともに、受信端末A〜Eの再送要求における関連性を保存するためのテーブル(以下「関連性保存テーブル」という)を格納する。
図3は、関連性保存テーブルの構成を示す図である。関連性保存テーブル810は、受信端末811、再送済シーケンス番号812、再送要求シーケンス番号813、総再送要求受信数814、および再送要求受信数815の欄を有する。
受信端末811には、受信端末A〜Eを識別する情報が記述される。他の各欄812〜815は、受信端末A〜Eごとに対応付けられている。以下、説明の簡便化のため、関連性保存テーブル810に記述された受信端末300ごとの情報の一まとまりを「レコード」という。
再送済シーケンス番号812には、受信端末300に対して再送したデータパケットのシーケンス番号が記述される。再送要求シーケンス番号813には、受信端末300から再送要求されたデータパケットのシーケンス番号が記述される。総再送要求受信数814には、受信端末300から送られてきた再送要求の受信数の総数(以下総再送要求受信数という)が記述される。再送要求受信数815には、関連する他の受信端末300から同一のシーケンス番号の再送要求を受信した数が、受信端末300ごとに記述される。総再送要求受信数814および再送要求受信数815には、初期値としてそれぞれ0が記述される。
関連性保存テーブル810の記述内容は、受信される再送要求パケットに基づいて、図2に示す受信端末関連性更新部250により更新される。
図2に示す再送要求受信部240は、受信端末A〜Eから再送要求パケットを受信する。
図4は、再送要求パケットの構成の一例を示す図である。
図4に示すように、再送要求パケット820は、ヘッダ部821とペイロード部822とから構成される。ヘッダ部821には、再送要求元のIPアドレスである送信元IPアドレス823と、再送要求の送信先(ここでは送信端末200)のIPアドレスである宛先IPアドレス824とが記述されている。送信元IPアドレス823からは、再送要求元を特定することが可能である。ペイロード部822には、再送要求の対象であるデータパケットのシーケンス番号(以下「再送要求シーケンス番号」という)825が記述されている。
なお、再送要求元のIPアドレスはペイロード部822に記述されても良い。また、受信端末300ごとに予め一意のID番号を付与し、そのIDがペイロード部822に記述されても良い。また、再送要求シーケンス番号も、RTP(real-time transport protocol)ヘッダのように、ヘッダ部821内に記述されても良い。
図2に示す再送要求受信部240は、受信した再送要求パケット820から、再送要求シーケンス番号825と送信元IPアドレス823とを取得し、再送要求元を解析する。そして、再送要求受信部240は、取得した再送要求シーケンス番号と、再送要求元を一意に示す情報(以下適宜「再送要求元情報」という)とを、データ蓄積部230を介して受信端末関連性更新部250に出力する。
なお、再送要求受信部240は、データパケットに記述されたポート番号など、送信元IPアドレス823以外の情報から、再送要求元情報を取得しても良い。また、送信元IPアドレス823を、そのまま再送要求元情報として取り扱っても良い。また、送信元IPアドレス823とポート番号などの情報を複数組み合わせて、再送要求元情報として取り扱っても良い。
受信端末関連性更新部250は、再送要求受信部240から入力された再送要求シーケンス番号および再送要求元情報に基づいて、図3に示す関連性保存テーブル810を更新する。具体的には、受信端末関連性更新部250は、関連性保存テーブル810に、各受
信端末300から過去に再送要求されたパケットが、他の受信端末300からも再送要求された割合を、他の受信端末300ごとに記録する。
再送先選択部260は、受信端末関連性更新部250により再送要求シーケンス番号と再送要求元情報とを入力されるごとに更新した関連性保存テーブル810に基づいて、配送木を推定し、先行的に再送パケットを送信すべき受信端末300を選択する。具体的には、再送先選択部260は、再送要求元から過去に再送要求されたパケットが他の受信端末300からも再送要求される割合が所定の閾値よりも高いとき、該当する他の受信端末300を配送木において再送要求元の下流に位置する受信端末であると推定し、再送要求元と併せて再送パケットの送信先に選択する。そして、再送先選択部260は、構築したすべての再送パケットを、再送部270に出力する。
再送部270は、再送先選択部260から入力された再送パケットを、ネットワーク400に対して送信する。ネットワーク400に送信された再送パケットは、図示しないルータや受信端末A、Bによって、指定された送信先へと転送される。
送信端末200は、図示しないが、CPU(central processing unit)、制御プログラムを格納したROM(read only memory)などの記憶媒体、RAM(random access memory)などの作業用メモリ、および通信回路を有する。CPUが制御プログラムを実行することで、図2に示す各部の機能は実現される。
次いで、上記構成を有する送信端末200の動作について説明する。ここでは、図5〜図11を用いて、再送要求パケットを受信したときの送信端末200の動作について説明する。
図5は、再送要求パケットを受信したときの送信端末200の全体動作の流れを示すフローチャートである。
まず、ステップS1000で、再送要求受信部240は、再送要求パケットを受信し、再送要求パケットから再送要求シーケンス番号を取得し、送信元IPアドレスやポート番号など再送要求元の受信端末を特定する再送要求元情報を取得する。
そして、ステップS2000で、再送要求受信部240は、再送要求シーケンス番号と再送要求元情報とを、受信端末関連性更新部250に出力する。受信端末関連性更新部250は、再送要求受信部240から入力された再送要求シーケンス番号および再送要求元情報に基づいて、関連性保存テーブル810(図3参照)を更新する関連性更新処理を実行する。そして、受信端末関連性更新部250は、関連性保存テーブル810を更新した後、再送要求シーケンス番号と再送要求元情報とを、データ蓄積部230を介して再送先選択部260に出力する。関連性更新処理の詳細については後述する。
そして、ステップS3000で、再送先選択部260は、再送要求シーケンス番号、再送要求元情報、および関連性保存テーブル810に基づいて、再送先チェック処理を実行する。再送先チェック処理は、再送要求元で損失したデータと同一のデータを損失していると判断できる受信端末300を調べ、該当する受信端末300を宛先とした再送パケット(図4に示す)を構築して再送部270に出力する処理である。再送先チェック処理の詳細については後述する。
そして、ステップS4000で、再送部270は、再送先選択部260から入力された全ての再送パケットを、ネットワーク400に送信する。そして、一連の処理を終了する。
次いで、関連性保存テーブル810を更新する関連性更新処理の詳細について説明する。
図6は、関連性更新処理(図5のステップS2000)の流れを示すフローチャートである。また、図7〜図9は、図3に示す関連性保存テーブル810に対して関連性更新処理が行われた場合の関連性保存テーブル810の記述内容の変化の様子を示す図である。
ここでは、関連性保存テーブル810が図3の状態のときに、受信端末Dから再送要求シーケンス番号として「10」を受信した場合を例にとって説明する。図3に示すように、受信端末Bおよび受信端末Eからは、既に再送要求シーケンス番号として「10」を受信している。
まず、ステップS2100で、受信端末関連性更新部250は、再送要求受信部240から入力された再送要求シーケンス番号と再送要求元情報とを関連付けて、データ蓄積部230に保存する。具体的には、受信端末関連性更新部250は、関連性保存テーブル810のうち、再送要求元のレコードの再送要求シーケンス番号813に、入力された再送要求シーケンス番号を記述する。
上記処理後の関連性保存テーブル810は、図7に示すように、受信端末Dの再送要求シーケンス番号813に「10」が追加された状態となる。
そして、図6のステップS2200で、受信端末関連性更新部250は、関連性保存テーブル810のうち再送要求元の総再送要求受信数814の値に1を加算する。
上記処理後の関連性保存テーブル810は、図8に示すように、受信端末Dの総再送要求受信数814の値が「29」から「30」に更新される。
そして、図6のステップS2300で、受信端末関連性更新部250は、再送要求元以外の受信端末300を1つ選択する。
そして、ステップS2400で、受信端末関連性更新部250は、再送要求元以外の受信端末300であって現在選択されている受信端末(以下単に「選択されている受信端末」という)300からの過去の再送要求シーケンス番号に、今回の再送要求シーケンス番号と同一のシーケンス番号が含まれているか否かを調べる。具体的には、受信端末関連性更新部250は、関連性保存テーブル810のうち、選択されている受信端末300のレコードの再送要求シーケンス番号813に、今回の再送要求シーケンス番号と同一のシーケンス番号が記述されているか否かを判断する。受信端末関連性更新部250は、同一のシーケンス番号が記述されている場合には(S2400:YES)、ステップS2500に進み、同一のシーケンス番号が記述されていない場合には(S2400:NO)、ステップS2700に進む。
ステップS2500で、受信端末関連性更新部250は、関連性保存テーブル810における再送要求元のレコードの再送要求受信数815のうち、選択されている受信端末300の値に1を加算する。
そして、ステップS2600で、受信端末関連性更新部250は、関連性保存テーブル810における選択されている受信端末300のレコードの再送要求受信数815のうち、再送要求元の値に1を加算する。
ステップS2700で、受信端末関連性更新部250は、再送要求元以外で未選択の受信端末300があるか否かを判断する。受信端末関連性更新部250は、未選択の受信端末300がある場合には(S2700:YES)、ステップ2300に戻り、未選択の受信端末300を1つ選択して処理を繰り返す。また、受信端末関連性更新部250は、全ての受信端末300について処理を完了した場合には(S2700:NO)、一連の処理を終了し、図5に示す処理に戻る。
このように、受信端末関連性更新部250による関連性更新処理の結果、各受信端末300のレコードにおける再送要求受信数815の値は、その受信端末300からの再送要求とシーケンス番号を同一とする再送要求が他の受信端末300で何回行われたかを示す値となる。
関連性更新処理の実行後の関連性保存テーブル810は、図9に示すように、受信端末Dのレコードの再送要求受信数815のうち、受信端末Bの値と受信端末Eの値とが、「29」から「30」にそれぞれ更新される。これは、今回の再送要求シーケンス番号「10」と同一のシーケンス番号のパケットが、既に受信端末B、Eからも再送要求されているためである。また、受信端末B、Eのレコードの再送要求受信数815のうち受信端末Dの値が、「29」から「30」にそれぞれ更新される。これは、既に受信端末B、Eから受信した再送要求シーケンス番号「10」と同一のシーケンス番号のパケットが、今回、受信端末Dから再送要求されたためである。
次いで、再送先選択部260による再送先チェック処理の詳細について説明する。
図10は、再送先チェック処理(図5のステップS3000)の流れを示すフローチャートである。
まず、ステップS3100で、再送先選択部260は、今回再送を要求されたデータを、再送要求元に既に再送したか否かを調べる。具体的には、再送先選択部260は、今回入力された再送要求シーケンス番号が、関連性保存テーブル810の再送要求元のレコードの再送済シーケンス番号812に記述されているか否かを調べる。これは、他の受信端末300からの再送要求に基づいて、今回の再送要求元に既に再送パケットを送信している場合があるためである。
再送先選択部260は、再送要求元の受信端末300にまだ再送パケットを送信していない場合には(S3100:NO)、ステップS3200に進み、既に再送パケットを送信している場合には(S3100:YES)、再送パケットを生成することなく、図5に示す処理に戻る。これにより、今回の再送要求元に既に要求されたデータの再送パケットを送信している場合に、再送パケットの送信の重複を避けることができる。
ステップS3200で、再送先選択部260は、再送要求シーケンス番号に該当するデータパケットがデータ蓄積部230に保存されているか否かをチェックする。再送先選択部260は、このチェックの結果、該当するデータパケットが保存されている場合には(S3200:YES)、ステップS3300に進み、保存されていない場合には(S3200:NO)、要求されたデータが存在しないため、再送パケットを生成することなく、図5に示す処理に戻る。
ステップ3300で、再送先選択部260は、データ蓄積部230に保存され、再送要求シーケンス番号に該当する再送用のデータパケットから、再送パケットを構築する。
そして、ステップS3400で、再送先選択部260は、データ蓄積部230に蓄積されている関連性保存テーブル810を参照して、再送要求元の受信端末300以外の関連する受信端末300を1つ選択する。
そして、ステップS3500で、再送先選択部260は、関連性保存テーブル810に保持された同一のシーケンス番号についての再送要求パケットを送信した再送要求受信数815のうち、今回受信した再送要求パケットの送信元の受信端末300の値の履歴に基づいて、他の受信端末300が再送要求元の下流にいるかどうかを調べ、配送木を推定する。推定した配送木に基づいて、再送要求元の下流に位置する受信端末300を再送パケットの送信先として選択する。
その際、配送木を推定するための基準の一例として、再送要求元のレコードの再送要求受信数815のうち選択されている受信端末300の値を、再送要求元のレコードの総再送要求受信数814の値で割った値である「関連度」を算出する。関連度が高い受信端末300は、配送木において再送要求元の下流に位置すると判定し、配送木を推定する。
なお、配送木を推定する基準の値として、単純に再送要求受信数815が近い端末を選択してもよいし、配送木の下流の受信端末300からの再送要求は短い時間以内に受信する可能性が高いため、同一のシーケンス番号に対する再送要求数が近く、かつそれらの再送要求が短い時間の中で受信できたかどうかで再送要求元の下流に位置する受信端末300であるか否かを判定しそれらの端末を再送要求先として選択してもよい。以下、関連度を用いた場合の配送木の推定と再送先受信端末の選択について述べる。
推定した配送木に基づいて、再送要求元の下流に位置する受信端末300においても、再送要求元から再送を要求されているデータパケットと同一のデータパケットにパケットロスが発生している可能性が高い。したがって、上記した所定の閾値は、選択されている受信端末300ではパケットロスは発生していないと判断すべき関連度の最大値であり、実験や経験から求めることができる。
そして、ステップS3600で、再送先選択部260は、ステップS3500で推定した配送木から、選択されている受信端末300が再送要求元の下流に位置するか否かを判断する。具体的には、上記した関連度が所定の閾値よりも高いか否かを判断する。再送先選択部260は、選択されている受信端末300が再送要求元の下流に位置する場合、つまり、関連度が所定の閾値よりも高い場合には(S3600:YES)、ステップS3700に進む。一方、選択されている受信端末300が再送要求元の下流に位置しない場合、つまり、関連度が所定の閾値以下の場合には(S3600:NO)、再送先選択部260は、ステップS3700を経ずにその次のステップS3800に進む。
ステップS3700で、再送先選択部260は、選択されている受信端末300に対する再送パケットを構築する。この再送パケットの構築は、選択されている受信端末300から再送要求を受信していない段階で行われることになる。
そして、ステップS3800で、再送先選択部260は、未選択の関連する受信端末300があるか否かを判断する。この判断の結果、再送先選択部260は、未選択の関連する受信端末300がある場合には(S3800:YES)、ステップ3400に戻り、未選択の関連する受信端末300を1つ選択して処理を繰り返し、全ての関連する受信端末300について処理を完了した場合には(S3800:NO)、ステップS3900に進む。
ステップS3900で、再送先選択部260は、データの再送を行う受信端末300ごとに、今回再送の対象とするデータパケットのシーケンス番号を保存する。具体的には、再送先選択部260は、関連性保存テーブル810のうち、再送パケットを送信する各受信端末300のレコードの再送済シーケンス番号812に、再送の対象とするデータパケットのシーケンス番号を追加する。そして、一連の処理を終了し、図5に示す処理に戻る。ステップS3700で構築された全ての再送パケットは、再送部270に入力され、図5のS4000で、再送部270によりネットワーク400に送信される。
このように、再送先選択部260による再送先チェック処理の結果、パケットロスしている確率の高い下流の受信端末300に対して、その受信端末300からの実際の再送要求に先立って再送パケットを構築し、送出することができる。
所定の閾値を高くすればするほど、先行的な再送パケット送出が実行されにくくなり、この結果、不要な再送パケット送出を低減し、ネットワーク負荷を軽減することができる。また、所定の閾値を低くすればするほど、先行的な再送パケット送出が実行され易くなり、この結果、再送パケット送出の迅速化を積極的に実現することができる。
なお、所定の閾値は、通信開始時に決定した一定値にしても良いし、再送要求受信数の数に応じて変化させても良い。通常、再送要求受信数が少ない場合、算出される関連度の信頼性は低い。したがって、例えば、初期状態では所定の閾値を高く設定し、再送要求受信数の増加に従って所定の閾値を低下させていくことにより、ネットワーク負荷の軽減と再送パケット送出の迅速化とをバランス良く実現することができる。
図11は、図9に示す関連性保存テーブル810に対して再送先チェック処理および再送処理が行われた場合の、関連性保存テーブル810の記述内容の変化の様子を示す図である。
ここでは、関連性保存テーブル810が図9の状態のときに、再送先選択部260に、再送要求シーケンス番号として「10」が入力され、再送要求元情報として受信端末Dを示す情報が入力された場合の、関連性保存テーブル810の記述内容の変化を例にとって示している。
図11に示すように、再送先チェック処理が実行された後の関連性保存テーブル810は、受信端末Dのレコードの再送済シーケンス番号812にシーケンス番号「10」が追加された状態となる。
ここで、関連性保存テーブル810が図11に示す状態のときに、再送先選択部260に、再送要求シーケンス番号および再送要求元情報として、「15」と受信端末Bを示す情報とが入力された場合を例にとり、再送先チェック処理および処理の結果について説明する。
受信端末Bのレコードにおいて、総再送要求受信数814は「30」であり、再送要求受信数815の受信端末A、C〜Eの値は、「5」、「5」、「30」、「30」である。再送要求受信数815の受信端末A、C〜Eの値を総再送要求受信数814の値で割った関連度は、「0.17」、「0.17」、「1.0」、「1.0」となる。例えば、所定の閾値が「0.5」に設定されている場合、所定の閾値よりも高い値となるのは、受信端末D、Eの関連度である。したがって、再送要求元である受信端末Bに加えて、受信端末D、Eも、再送パケットの送信先として選択される。
受信端末D、Eは、受信端末Bの下流に位置する。したがって、通常、受信端末D、Eにおけるパケットロスの検出は、受信端末Bにおけるパケットロスの検出よりも遅く、受信端末D、Eからの再送要求の送信端末200へ到達は、受信端末Bからの再送要求の送信端末200へ到達よりも遅い。受信端末Bからの再送要求に基づいて受信端末D、Eにも再送パケットを送出することにより、受信端末D、Eからの再送要求に基づいて再送パケットを送出する場合よりも、受信端末D、Eに対する再送パケットの送出タイミングを早めることができる。
なお、再送パケットの構築および送信は、送信先ごとに再送パケットを構築し、ユニキャスト通信によってそれぞれの受信端末300に送信しても良いし、XCASTやALMを用いて1つのマルチキャストパケットを構築し、マルチキャストにより各受信端末300に送信しても良い。また、XCASTでデータパケットを再送する際に、アドレスリストに記述する宛先の順番を各受信端末300が先頭になるように変更したXCASTパケットを複数構築して送信し、再送パケットが損失した場合に他の受信端末300から転送させるようにしても良い。
以上説明したように、本実施の形態によれば、送信端末200は、通信システム100の配送木を推定するための関連性保存テーブル810を作成する。そして、送信端末200は、データの再送要求を受信したとき、関連性保存テーブル810に基づいて配送木を推定し、推定した配送木において再送要求元の下流に位置する他の受信端末300を、再送パケットの送出先に加える。これにより、配送木の構造が不明な場合でも、配送木の下流に位置する受信端末300に対する再送パケットの送出を早いタイミングで行うことが可能となる。したがって、例えば、再送パケットを再生時間までに届けることが可能となり、許容される遅延時間が短いリアルタイム通信に適した再送制御を実現することができる。また、送信先の受信端末300に至る経路上の装置の機能や装置間の関連性に依存せずに、送信端末200単体で再送パケットを送出するので、既存のネットワークに容易に適用することができる。
(実施の形態2)
実施の形態2は、時間的に新しい再送要求の影響が強く出るように重み付けをして受信端末間の関連性を更新することにより、ネットワークの状態変化への追従性の向上を図る場合である。
図12は、本発明の実施の形態2に係るデータ送信装置としての送信端末の構成を示すブロック図であり、実施の形態1の図2に対応するものである。図2と同一部分には同一符号を付し、これについての説明を省略する。
図12において、送信端末500は、図2の受信端末関連性更新部250に代えて、受信端末関連性更新部550を有する。
受信端末関連性更新部550は、再送要求受信部240から入力された再送要求シーケンス番号および再送要求元情報に基づいて、図3に示す関連性保存テーブル810を更新する。
また、受信端末関連性更新部550は、関連性保存テーブル810の更新の際、更新前後の差分のうち、時間的により新しい更新の差分に対して、より強い重み付けを行う。受信端末関連性更新部550は、この重み付けのために、関連性保存テーブル810の各レコードの最後の更新時刻を記録するためのレコード更新時刻テーブルを作成し、データ蓄積部230に保存する。
図13は、データ蓄積部230に格納されるレコード更新時刻テーブルの内容の一例を示す図である。
レコード更新時刻テーブル830は、受信端末831および前回更新時刻[sec]832の2つの欄から構成される。受信端末831には、受信端末A〜Eを示す情報が記述される。前回更新時刻832には、受信端末300ごとに、関連性保存テーブル810の対応するレコードが更新された時刻のうち最も新しい時刻が記述される。図13には、秒(sec)で時刻を保存した場合を例示しているが、前回の再送要求からの経過時間を特定可能であれば、どのような単位および形式で保存しても良い。
以下、受信端末関連性更新部550による関連性更新処理の詳細について説明する。ここでは、図14〜図18を用いて、再送要求パケットを受信したときの送信端末500の動作について説明する。
図14は、受信端末関連性更新部550による関連性更新処理(図5のステップS2000、図6)の流れを示すフローチャートである。図6と同一部分には同一ステップ番号を付し、これについての説明を省略する。
受信端末関連性更新部550は、ステップS2100で再送要求されたデータパケットのシーケンス番号を保存した後、ステップS2201に進む。
ステップS2201で、受信端末関連性更新部550は、関連性保存テーブル810の再送要求元のレコードの値を、今回受信した再送要求パケットに基づく更新内容に対してより強い重みが掛かるように更新する。そして、受信端末関連性更新部550は、現在時刻を取得し、レコード更新時刻テーブル830のうち、今回の再送要求元の前回更新時刻832に記述する。
具体的には、受信端末関連性更新部550は、まず、再送要求元のレコードの更新前の値に対して掛ける重み係数を、例えば以下の式(2)を用いて算出する。
重み係数 = −1 / 0.05
× ( 今回の再送要求受信時刻 − 前回のレコード更新時刻 ) + 1
・・・・・・(2)
なお、上記式(2)において、今回の再送要求受信時刻とは、今回の再送要求パケットの受信時刻であり、前回のレコード更新時刻とは、関連性保存テーブル810のうち今回の再送要求元のレコードが最後に更新された時刻である。前回のレコード更新時刻には、レコード更新時刻テーブル830のうち、今回の再送要求元の前回更新時刻832に記述された値を用いればよい。
すなわち、受信端末関連性更新部550は、前回のレコード更新からの経過時間を0.05で割った値を1から引いた値を、重み係数として算出する。重み係数の最小値は0.1とする。したがって、受信端末関連性更新部550は、例えば、式(2)で算出した値が0.1以下となる場合には、重み係数を0.1に決定する。式(2)の1項目の分母(ここでは0.05)は、関連性保存テーブル810のネットワーク変化への追従性を決定付けるパラメータであり、再送要求受信時刻と同単位の値となる。
式(2)により算出される重み係数は、再送要求元のレコードの前回の更新から時間が経過すればするほど、小さい値となる。
受信端末関連性更新部550は、算出した重み係数を用いて、例えば以下に示す式(3)を用いて、再送要求元のレコードの総再送要求受信数814の値を更新する。
総再送要求受信数 = 現在の総再送要求受信数 × 重み係数 + 1・・・・・・(3)
また、受信端末関連性更新部550は、算出した重み係数を用いて、例えば以下に示す式(4)を用いて、再送要求元のレコードの再送要求受信数815の全ての値を更新する。
再送要求受信数 = 再送要求受信数 × 重み ・・・・・・(4)
すなわち、受信端末関連性更新部550は、再送要求元のレコードに対し、現在記述されている値に重み係数を乗じた上で、今回の再送要求に対応する更新を行う。これにより、前回のレコードの更新から時間が経過すればするほど、今回の更新内容に対して相対的により強い重みが掛けられる。
なお、式(2)の1項目の分母の0.05は一例であり、本値を小さくすればより時間的に新しい再送要求パケットの影響を強くすることができ、逆に大きくすればネットワークへの追従性を下げることができる。また、最小値の0.1も一例であり、過去の履歴をどの程度加味するかにより変更可能な値である。
また、受信端末関連性更新部550は、選択している受信端末300のレコードの再送要求シーケンス番号813に、今回の再送要求シーケンス番号と同一のシーケンス番号が記述されている場合には、ステップS2500の後、ステップS2601に進む。
ステップS2601で、受信端末関連性更新部550は、選択されている受信端末300のレコードの再送要求受信数815および総再送要求受信数814の値を、今回受信した再送要求パケットに基づく更新内容に対してより強い重みが掛かるように更新する。そして、受信端末関連性更新部550は、現在時刻を取得し、レコード更新時刻テーブル830のうち、選択されている受信端末300の前回更新時刻832に記述する。
具体的には、受信端末関連性更新部550は、まず、選択されている受信端末300のレコードの更新前の値に対して掛ける重み係数を、例えば上記式(2)により算出する。ただし、ここでの前回のレコード更新時刻とは、関連性保存テーブル810のうち選択されている受信端末300のレコードが最後に更新された時刻である。前回のレコード更新時刻には、レコード更新時刻テーブル830のうち、選択されている受信端末300の前回更新時刻832に記述された値を用いればよい。
そして、受信端末関連性更新部550は、例えば、算出した重み係数と上記式(4)とを用いて、選択されている受信端末300のレコードの再送要求受信数815のうち、再送要求元以外の全ての受信端末300の値を更新する。
また、受信端末関連性更新部550は、例えば、算出した重み係数と以下に示す式(5)とを用いて、選択されている受信端末300のレコードの再送要求受信数815のうち、再送要求元の値を更新する。
再送要求受信数 = 現在の再送要求受信数 × 重み + 1 ・・・・・・(5)
更に、受信端末関連性更新部550は、例えば、算出した重み係数と以下に示す式(6)とを用いて、選択されている受信端末300のレコードの総再送要求受信数814の値を更新する。
総再送要求受信数 = 現在の総再送要求受信数 × 重み ・・・・・・(6)
すなわち、受信端末関連性更新部550は、選択されている受信端末300のレコードに対し、現在記述されている値に重み係数を乗じた上で、今回の再送要求に対応する更新を行う。これにより、前回のレコードの更新から時間が経過すればするほど、今回の更新内容に対して相対的により強い重みが掛けられる。
上記したステップS2500、S2601の処理は、今回再送要求されているシーケンス番号と同一のシーケンス番号について既に再送要求を送信してきている受信端末300の全てに対して実行される。
このように、受信端末関連性更新部550による関連性更新処理の結果、関連性保存テーブル810は、時間軸で重み付けをして更新される。
なお、レコード更新時刻テーブル830の更新は、関連性更新処理の最後にまとめて行うようにしても良い。
前回の更新からの経過時間が長ければ長いほど最新の更新内容の重みをより強くすることにより、配送木の変化があった場合に、関連性保存テーブル810の内容を、現状の配送木に合致した内容により短時間で近付けることができる。すなわち、配送木の変化に対する関連性保存テーブル810の内容の追従性を向上させることができる。
ここで、上記処理による関連性保存テーブル810の記述内容の変化の様子の一例を説明する。
図15は、ある時点の関連性保存テーブル810の内容を示す図である。図16および図17は、図15に示す関連性保存テーブル810に対して図14に示す関連性更新処理が行われた場合の、関連性保存テーブル810の記述内容の変化の様子を示す図である。
ここでは、1439.0340[sec]の時刻に、受信端末Dからシーケンス番号「10」を指定した再送要求パケットを受信した場合の、関連性保存テーブル810の記述内容の変化を例にとって示している。また、上記受信時刻に、レコード更新時刻テーブル830は、図13に示す状態であったとする。
再送要求元である受信端末Dのレコードの、前回の更新時刻と今回の更新時刻との時間差は、1439.0340−1439.0040=0.03[sec]である。したがって、式(2)を用いて算出される重み係数は、 −1 / 0.05 × 0.03 + 1 = 0.4 となる。
受信端末Dのレコードにおける総再送要求受信数814の更新前の値は、図15に示すように、「29」である。したがって、受信端末Dの総再送要求受信数814の値は、式(3)と重み係数0.4とを用いた結果、図16に示すように、29×0.4+1=12.6に更新される。
受信端末Dのレコードにおける再送要求受信数815の更新前の受信端末A〜C、Dの値は、図15に示すように、「5」、「25」、「5」、「22」である。したがって、受信端末Dのレコードにおける再送要求受信数815の受信端末A〜C、Dの値は、式(4)と重み係数0.4とを用いた結果、図16に示すように、「2」、「10」、「2」、「8.8」に更新される。
ここで、図14のステップS2300で、受信端末Eよりも先に受信端末Bが選択されたものとする。受信端末B、Eは、今回の再送要求シーケンス番号(ここではシーケンス番号「10」)と同一のシーケンス番号の再送要求を既に行っているものとする。
受信端末Bのレコードの、前回の更新時刻と今回の更新時刻との時間差は、1439.0340−1439.0071=0.037[sec]である。したがって、式(2)を用いて算出される重み係数は、 −1 / 0.05 × 0.037 + 1 = 0.26 となる。
受信端末Bのレコードにおける再送要求受信数815の更新前の受信端末A、C〜Eの値は、図15に示すように、「5」、「5」、「25」、「30」である。したがって、受信端末Bのレコードにおける再送要求受信数815の受信端末A、C、E(再送要求元以外の受信端末300)の値は、式(4)と重み係数0.26とを用いた結果、図16に示すように、「1.3」、「1.3」、「7.8」に更新される。そして、受信端末Bのレコードにおける再送要求受信数815の受信端末D(再送要求元)の値は、式(5)と重み係数0.26とを用いた結果、図16に示すように、「7.5」に更新される。
また、受信端末Bのレコードの総再送要求受信数814は、図15に示すように、「30」である。したがって、受信端末Bのレコードの総再送要求受信数814の値は、式(6)と重み「0.26」とを用いた結果、図16に示すように、「7.8」に更新される。
受信端末Eのレコードの、前回の更新時刻と今回の更新時刻との時間差は、1439.0340−1439.0010=0.033[sec]である。したがって、式(2)を用いて算出される重みは、−1/0.05×0.033+1=0.34となる。
受信端末Eのレコードにおける再送要求受信数815の更新前の受信端末A〜Dの値は、図16に示すように、「5」、「30」、「5」、「24」である。したがって、受信端末Eのレコードにおける再送要求受信数815の受信端末A〜C(再送要求元以外の受信端末300)の値は、式(4)と重み係数0.34とを用いた結果、図17に示すように、「1.7」、「10.2」、「1.7」に更新される。そして、受信端末Eのレコードにおける再送要求受信数815の受信端末D(再送要求元)の値は、式(5)と重み係数0.34とを用いた結果、図17に示すように、「9.16」に更新される。
また、受信端末Eのレコードの総再送要求受信数814は、図15に示すように、「30」である。したがって、受信端末Eのレコードの総再送要求受信数814の値は、式(6)と重み「0.34」とを用いた結果、図17に示すように、「10.2」に更新される。
なお、重み付けを細かく実施するために、一定時間ごとの総再送要求数および関連する受信端末300の再送要求数の履歴を、過去複数回分保存しておき、履歴ごとに重み係数を設定するようにしても良い。
この場合、受信端末関連性更新部550は、一定時間ごとの総再送要求数および関連する受信端末300の再送要求数の履歴を過去複数回分保存したテーブル(以下「履歴保存テーブル」という)を作成し、この履歴保存テーブルに基づいて、関連性保存テーブル810の更新を行う。以下、上記履歴保存テーブルの内容および更新処理と、履歴保存テーブルに基づく関連性保存テーブル810の更新処理について、それぞれのテーブルの変化の様子の一例を用いて説明する。
図18は、ある時点における関連性保存テーブル810の内容の一例を示す図であり、図19は、上記時点における履歴保存テーブルの内容の一例を示す図である。また、図20、図22は、図19の履歴保存テーブルの記述内容の変化の様子を示す図であり、図21、図23は、図18の関連性保存テーブル810の記述内容の変化の様子を示す図である。以下、添え字「i」は再送要求に関する最も新しい履歴、添え字「ii」は次に新しい履歴、添え字「iii」は更に次に新しい履歴であることをそれぞれ示す。
図19に示す履歴保存テーブル840は、受信端末関連性更新部550によって生成され、データ蓄積部230に保存される。履歴保存テーブル840は、受信端末841、前回更新時刻842、過去の履歴843、再送要求受信数の履歴844の欄を有する。過去の履歴844には、過去3回分の履歴843i〜843iiiが記述される。再送要求受信数の履歴844には、受信端末A〜Eごとに、過去3回分の履歴が記述される。
受信端末841には、受信端末A〜Eを識別する情報が記述される。他の各欄は、受信端末A〜Eごとに対応付けられている。以下、説明の簡便化のため、履歴保存テーブル840に記述された受信端末300ごとの情報の一まとまりを「履歴レコード」という。
また、履歴保存テーブル840の過去の履歴843と再送要求受信数の履歴844は、関連性保存テーブル810の総再送要求受信数814と再送要求受信数815にそれぞれ対応している。
受信端末関連性更新部550は、総再送要求受信数と関連する受信端末300の再送要求受信数とを、一定時間ごとに区切って、それぞれ履歴保存テーブル840の過去の履歴843と再送要求受信数の履歴844とに保存する。そして、受信端末関連性更新部550は、一定時間ごとに区切った履歴に新しさに応じた重み係数を掛け、その算出結果に基づいて、関連性保存テーブル810の総再送要求受信数814および再送要求受信数815を更新する。
ここでは、上記一定時間を10秒とし、保存する履歴は3回分とする。また、過去3回分の履歴に掛ける重み係数を、時間的に新しい方から順に、「0.6」、「0.3」、「0.1」とする。すなわち、より新しい履歴に対してより強い重み付けを行う。古い履歴をより重視したい場合には、古い履歴の重み係数を高く設定し、新しい履歴をより重視したい場合には、新しい履歴の重みを高く設定すれば良い。
受信端末関連性更新部550は、再送要求パケットが受信されるごとに、再送要求元の前回のレコード更新時刻から10秒が経過したか否かを判断する。そして、10秒以内の場合には、履歴保存テーブル840における最新の履歴の数値書き換えを行い、10秒を超えている場合には、最新の履歴の数値書き換えと併せて、履歴保存テーブル840における履歴情報のシフトを行う。
ここでは、今回の再送要求パケットが、受信端末Dから送信されたものであり、その受信時刻が1439.8050[sec]であったとする。この場合、受信端末Dの前回のレコード更新時刻1439.0040[sec]からの経過時間は10秒以内である。したがって、受信端末関連性更新部550は、履歴保存テーブル840に対して、履歴情報のシフトは行わず、最新の履歴の数値書き換えのみを行う。
受信端末関連性更新部550は、まず、履歴保存テーブル840のうち、再送要求元である受信端末Dの履歴レコードの過去の履歴843iの値に1を加える。これにより、図20に示すように、受信端末Dの履歴レコードの過去の履歴843iの値は、「20」に更新される。
また、受信端末関連性更新部550は、今回の再送要求シーケンス番号と同一のシーケンス番号の再送要求を既に行っている受信端末300が存在する場合には、再送要求受信数の履歴844のうち、関連性保存テーブル810で更新される値に対応する値に、1を加算する。ここで、受信端末B、Eは、今回の再送要求シーケンス番号と同一のシーケンス番号の再送要求を既に行っているものとする。この場合、図20に示すように、受信端末Dの履歴レコードのうち、再送要求受信数の履歴844の、受信端末B、Eの履歴Bi、Eiの値は、それぞれ「20」および「23」に更新される。また、図20に示すように、受信端末B、Eの履歴レコードのうち、再送要求受信数の履歴844の、受信端末Dの履歴Diの値は、「21」に更新される。
次に、受信端末関連性更新部550は、関連性保存テーブル810のうち、履歴保存テーブル840で更新された履歴レコードに対応するレコードを、履歴保存テーブル840の更新後の値に基づいて更新する。具体的には、履歴保存テーブル840の過去3回分の履歴に重み係数を乗じた値の合計を算出し、算出した値を関連性保存テーブル810の対応部分に記述する。
この結果、関連性保存テーブル810のうち、受信端末Dのレコードの総再送要求受信数814は、図21に示すように、設定された重み係数と受信端末Dの履歴レコードの過去の履歴843から、 0.6 × 21 + 0.3 × 15 + 0.1 × 5 = 17.6 に更新される。同様にして、受信端末B、D、Eのレコードの再送要求受信数815dの全ての値が更新される。
そして、受信端末関連性更新部550は、履歴保存テーブル840のうち、レコードの更新の対象となった受信端末B、D、Eの前回更新時刻842に、現在時刻を記述する。ここでは、1450.1123[sec]が記述されるものとする。
このようにして、関連性保存テーブル810は時間的に新しい履歴により強い重みを付けた状態で更新される。
次に、既に受信端末B、Eから再送要求シーケンス番号として受信しているシーケンス番号を指定した再送要求を、時刻1450.1123[sec]に、受信端末Dから受信したとする。この場合、前回の更新時刻1439.0040[sec]からの経過時間は、約11.1秒、つまり10秒以上である。
受信端末関連性更新部550は、まず、時間差を10秒で除した値を小数点以下切捨てた値を算出し、今回の再送要求に関連する受信端末の履歴レコードの内容を、算出された値の分だけ過去側にそれぞれシフトさせる。
ここでは、11.1/10=1.1となるので、図22に示すように、図20に示す履歴保存テーブル840のうち、今回の再送要求に関連する受信端末B、D、Eの最も新しい履歴(i)および次に新しい履歴(ii)が、それぞれ古い側に1つずつシフトされる。シフト後の処理は、前回の更新からの経過時間が10秒未満の場合と同様である。
この結果、図23に示すように、関連性保存テーブル810のうち受信端末B、D、Eのレコードの全てが更新される。
このようにして、過去の再送要求の重み付けを細かく実施することができる。これにより、時間軸における重みの分布をより高い自由度で設定できる。また、一定時間以内の新しい履歴のみを利用して関連度を算出できるため、ネットワークの状況変化への追従性を更に向上させることができる。
なお、更に細かに重み付けを行いたい場合には、履歴保存テーブル840に記録する過去の履歴の数をより多くすれば良い。
このように、本実施の形態によれば、関連性保存テーブルの更新において、時間的により新しい再送要求に基づく更新内容に対して、より強い重みを与えることができる。これにより、追従性の良い配送木推定が可能となり、配送木が通信中に変更される環境や、配送木の下流におけるネットワークの状態変化が激しいような環境においても、再送パケットを早いタイミングで送出することができる。
なお、配送木やネットワークの状態の変化の程度や速度に応じて、各履歴の重み付けを変更するようにしても良い。この場合には、配送木やネットワークの状態の変化に対する追従性と、推定の精度とを、バランス良く確保することが可能となる。
(実施の形態3)
実施の形態3は、推定した配送木が実際の配送木と異なり、先行的な再送パケット送信の再送先の選択が失敗した場合にこれを検出し、失敗の結果を関連性保存テーブルに反映することにより、ネットワークの状態変化への追従性の向上を図る場合である。
ある受信端末から、その受信端末への再送の対象としていないシーケンス番号であって、他の受信端末への再送の対象としているシーケンス番号を、再送要求シーケンスとして受信したとする。この場合、過去の再送処理において、再送先の選択を失敗していたことが推定できる。このような失敗は、例えば、配送木やネットワークが変化したときに生じる。そこで、本実施の形態の送信端末は、再送要求を受信するごとに、その再送要求が過去の再送先選択の失敗によるものか否かを判断し、過去の再送先選択の失敗である場合には、関連性保存テーブルに修正を加えることにより、同じ失敗の防止を図るようにしている。
図24は、実施の形態3に係るデータ送信装置としての送信端末の構成を示すブロック図であり、実施の形態1の図2に対応するものである。図2と同一部分には同一符号を付し、これについての説明を省略する。
図24において、送信端末600は、再送先選択結果反映部690を更に有するとともに、図2の再送要求受信部240に代えて再送要求受信部640を有する。
再送要求受信部640は、受信した再送要求パケットから、再送要求シーケンス番号と再送要求元情報とを取得する。そして、再送要求受信部640は、データ蓄積部230に格納された関連性保存テーブル810(図3参照)を調べ、取得した再送要求シーケンス番号が、再送要求元のレコードの再送済シーケンス番号812に記述されておらず、かつ他の受信端末300のレコードの再送済シーケンス番号812には記述されているという条件を満たすか否かを判断する。
再送要求受信部640は、上記条件を満たさない場合には、実施の形態1と同様に、受信端末関連性更新部250に再送要求シーケンス番号と再送要求元情報とを出力する。一方、上記条件を満たす場合には、再送要求受信部640は、再送先の受信端末の選択に失敗があったものとして、再送先選択結果反映部690に再送要求シーケンス番号と再送要求元情報とを出力する。
再送先選択結果反映部690は、関連性保存テーブル810において、再送要求受信部640から入力された再送要求シーケンス番号と同一のシーケンス番号のデータを既に再送している他の受信端末300のレコードに修正を加える。具体的には、再送先選択結果反映部690は、上記他の受信端末300のレコードの再送要求受信数815のうち、再送要求元の値を増加させる。これにより、以降に上記他の受信端末300から再送要求パケットを受信した場合に、上記再送要求元が再送先として選択され易くなるようにする。
以下、上記構成を有する送信端末600の動作について説明する。ここでは、図25〜図28を用いて、再送要求パケットを受信したときの送信端末600の動作について説明する。
図25は、再送要求パケットを受信したときの送信端末600の全体動作の流れを示すフローチャートであり、実施の形態1の図5に対応するものである。図5と同一部分には同一ステップ番号を付し、これについての説明を省略する。
再送要求受信部640で再送要求パケットが受信されると(ステップS1000)、処理はステップS1100に進む。
ステップS1100で、再送要求受信部640は、今回の再送要求シーケンス番号と同一のシーケンス番号に対する再送パケットを、再送要求元以外の他の受信端末300に既に送信しているか否かを判別する。具体的には、再送要求受信部640は、関連性保存テーブル810のうち再送要求元以外の受信端末300のレコードの再送済シーケンス番号812で、再送要求シーケンス番号と同一のシーケンス番号を探索する。同一のシーケンス番号に対する再送パケットを他の受信端末300に送信していない場合には(S1100:NO)、処理はステップS2000に進む。一方、同一のシーケンス番号が存在し、同一のシーケンス番号に対する再送パケットを他の受信端末300に既に送信している場合には(S1100:YES)、処理はステップS1200に進む。
ステップS1200で、再送要求受信部640は、今回の再送要求シーケンス番号と同一のシーケンス番号に対する再送パケットを、再送要求元に既に送信しているか否かを判別する。具体的には、再送要求受信部640は、関連性保存テーブル810のうち再送要求元のレコードの再送済シーケンス番号812に、再送要求シーケンス番号と同一のシーケンス番号が記述されているか否かを調べる。再送要求シーケンス番号と同一のシーケンス番号が記述されている場合には(S1200:YES)、単に過去に送信した再送パケットにパケットロスが発生したものとして、処理はステップS2000に進む。一方、再送要求シーケンス番号と同一のシーケンス番号が記述されていない場合には(S1200:NO)、処理はステップS1300に進む。
S1300で、再送要求受信部640は、再送要求シーケンス番号と再送要求元情報とを、再送先選択結果反映部690に出力する。再送要求受信部640は、シーケンス番号と再送要求元情報を入力されると、再送要求先が再送先の選択から漏れているとして、関連性保存テーブル810を修正する再送先選択結果修正処理を実行する。そして、処理はステップS2000に進み、以降、実施の形態1と同様に、関連性更新処理および再送先チェック処理を経て、再送パケットが送信される。
図26は、再送先選択結果修正処理(図25のステップS1300)の流れを示すフローチャートである。
ステップS1310で、再送先選択結果反映部690は、再送要求元以外の受信端末300を1つ選択する。
ステップS1320で、再送先選択結果反映部690は、関連性保存テーブル810において、選択されている受信端末300のレコードの再送済シーケンス番号813に、再送要求シーケンス番号と同一のシーケンス番号が記述されているか否かを調べる。再送先選択結果反映部690は、同一のシーケンス番号が記述されている場合には(S1320:YES)、ステップS1330に進み、同一のシーケンス番号が記述されていない場合には(S1320:NO)、ステップS1340に進む。
ステップS1330で、再送先選択結果反映部690は、選択されている受信端末300のレコードの再送要求受信数815のうち再送要求元の値を増加させる。また、再送先選択結果反映部690は、修正後の再送要求受信数が、選択されている受信端末300のレコードの総再送要求受信数814を超えてしまう場合には、修正幅が大きすぎると判断し、該当する再送要求受信数を、総再送要求受信数814と同一の値に変更する。再送要求元の値の増加には、例えば以下の式(7)を用いれば良い。
再送要求受信数 = 現在の再送要求受信数 × 1.1 ・・・・・・(7)
式(7)を用いた場合、選択されている受信端末300のレコードにおける再送要求元の再送要求受信数は1.1倍される。これにより、選択されている受信端末300から再送要求を受信したときに、今回の再送要求元が先行的な再送パケットの送信先として選択されやすくなる。
なお、式(7)における1.1の値を大きくすれば、再送要求元をより選択し易くしたり、より短時間のうちに再送先として選択されるようにすることができ、逆に小さくすれば、再送先選択結果反映部690による修正の影響を低減できる。また、再送要求受信数の値の増加は、例えば、現在の再送要求受信数に単純に一定値を加算することにより行ったり、選択されている受信端末300の総再送要求受信数との差分から増加分を決定することにより行っても良い。
そして、ステップS1340で、再送先選択結果反映部690は、未選択の受信端末300があるか否かを判断する。再送先選択結果反映部690は、未選択の受信端末300がある場合には(S1340:YES)、ステップ1310に戻って未選択の受信端末300を1つ選択して処理を繰り返し、全ての受信端末300について処理を完了した場合には(S1340:NO)、一連の処理を終了し、図25に示す処理に戻る。
このように、再送先選択結果反映部690による再送先選択結果修正処理の結果、関連性保存テーブル810は、再送先の選択の失敗を反映させる形で、現状の配送木の状態に近付ける方向に修正される。そして、修正後の関連性保存テーブル810に対して、ステップS2000の関連性更新処理が行われることになる。
以下、上記処理による関連性保存テーブル810の記述内容の変化の様子を説明する。
図27は、ある時点の関連性保存テーブル810の内容を示す図である。また、図28は、図27に示す関連性保存テーブル810に対して再送先選択結果修正処理が行われた場合の、関連性保存テーブル810の記述内容の変化の様子を示す図である。
図27に示す関連性保存テーブル810では、受信端末B、Eのレコードにのみ、再送済シーケンス番号812にシーケンス番号「10」が記述されている。この状態にあるとき、受信端末Dからシーケンス番号「10」を指定した再送要求パケットを受信したとする。
受信端末B、Eのレコードの再送済シーケンス番号812にはシーケンス番号「10」が記述されており、再送要求元である受信端末Dのレコードの再送済シーケンス番号812にはシーケンス番号「10」が記述されていないため、処理は再送先選択結果反映部690に渡される。
そして、受信端末B、Eのレコードの再送要求受信数815のうち、受信端末Dの値が、増加の方向に更新される。式(7)が用いられた場合、受信端末Bのレコードの再送要求受信数815のうち受信端末Dの値は、図28に示すように、20×1.1=22に更新される。また、受信端末Eのレコードの再送要求受信数815のうち受信端末Dの値は、図28に示すように、23×1.1=25.3に更新される。
このように、本実施の形態によれば、過去の再送パケット送信において再送先に選択されていない受信端末300から再送要求パケットが到着したとき、先行的に再送され易くなるように、関連性保存テーブル810を修正する。これにより、配送木やネットワークの状態の変化に素早く追従して関連性保存テーブルを修正することができ、低遅延での再送制御をより確実に実施することができる。
なお、以上説明した各実施の形態では、明示的マルチキャスト方式によるパケット配信を行う送信端末について説明したが、これに限定されるものではなく、本発明は、オーバレイマルチキャスト方式を含む各種のデータ送信装置に適用することが可能である。より具体的には、複数のデータ受信装置からデータの再送要求を受信するデータ送信装置に適用可能である。