【実施例1】
【0016】
本発明の実施例1に係る移動通信端末100及びサーバ102について、
図2〜
図16を用いて説明する。
【0017】
図2は、移動通信端末100の物理構成図である。移動通信端末100は、CPU(プロセッサ)201と、メモリ202と、GPS(Global Positioning System)モジュール203(
図2では“GPS203”と略記)と、複数の通信インターフェースモジュール(
図2では“通信IFモジュール”と略記)205と、それらを接続するバス204とを有する。GPSモジュール203は、衛星が送信する現在時刻を受信し、現在時刻をCPU201に提供する。またGPSモジュール203は、複数の衛星から受信した信号に基づいて移動通信端末100の現在位置を計算し、計算された現在位置の情報をCPU201に提供する。
【0018】
それぞれの通信IFモジュール205は、異なる無線通信システム130と接続可能なモジュールで、CPU201の指示に従ってデータの送信を行う。複数の通信IFモジュール205は、同時に(並行して)データの送信をすることができる。
【0019】
メモリ202には、移動通信端末100のデータ送受信処理を行うためのプログラム(以下、「制御プログラム」と呼ぶ)や、ユーザにIoTサービスを提供するためのアプリケーションプログラムが格納されており、CPU201は、メモリ202に格納されたこれらのプログラムを実行する。
【0020】
なお、以下の説明において、複数の通信IFモジュール205のうち、i番目(iは1以上の整数である)の通信IFモジュール205のことを「通信IFi」と表記し、通信IFiの参照番号は“205−i”と表記することがある。また、通信IFiは、移動通信端末100が通信キャリアiを介してサーバ102と通信するためのモジュールとする。また複数の通信IFモジュール205を総称して、単に「通信IF」と表記することがある。
【0021】
図3は、移動通信端末100の機能ブロック図である。移動通信端末100は、アプリケーション部301、データサイズ取得部302、データ生成速度計算部303、複製データ数計算部304、複製データ生成部305、送信完了時刻計算部306、通信品質テーブル307、通信速度取得部309、送信完了時刻記憶部310、通信IF選択部311を有する。
【0022】
なお、本実施例では、これらの機能部はソフトウェア(プログラム)により実装されているものとする。具体的にはアプリケーション部301は、メモリ202に格納されているアプリケーションプログラムをCPU201が実行することで実現される機能部である。また、CPU201は、メモリ202に格納されている制御プログラムを実行することで、移動通信端末100を、データサイズ取得部302、データ生成速度計算部303、複製データ数計算部304、複製データ生成部305、送信完了時刻計算部306、通信品質テーブル307、通信速度取得部309、送信完了時刻記憶部310、通信IF選択部311を備えた装置として稼働させる。
【0023】
ただし、これらの機能部は必ずしもソフトウェアで実現されている必要はない。上で述べた機能部の一部または全部は、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)等のハードウェアを用いて構成されていてもよい。
【0024】
アプリケーション部301は、サーバ102に送信すべきデータを生成する機能部で、生成したデータを複製データ生成部305へ入力する。
【0025】
データサイズ取得部302は、アプリケーション部301が複製データ生成部305へ入力するデータのサイズを取得する。
【0026】
データ生成速度計算部303は、アプリケーション部301が複製データ生成部305へ入力するデータを生成する時の速度であるデータ生成速度を観測し、観測されたデータ生成速度を複製データ数計算部304や送信完了時刻計算部306へ入力する。
【0027】
複製データ数計算部304は、データ生成速度計算部303から入力されたデータ生成速度と、通信速度取得部309から入力される各通信IF205の通信速度に基づいて複製データ数を決定し、決定された複製データ数を複製データ生成部305へ入力する。
【0028】
複製データ生成部305は、アプリケーション部301からデータを受信し、複製データ数計算部304から複製データ数を受信する。複製データ生成部305は、アプリケーション部301から受信したデータの複製を、複製データ数計算部304から受信した複数データ数と同じ数だけ生成し、生成したデータ(複製データ)を通信IF選択部311へ入力する。
【0029】
送信完了時刻計算部306は、送信完了時刻記憶部310から取得した前データ送信完了時刻と、通信速度取得部309から入力された各通信IF205の通信速度と、データサイズ取得部302から入力されたデータサイズに基づき、次送信パケットの送信完了時刻(次データ送信完了時刻)を計算する。
【0030】
通信品質テーブル307は、各通信IF205の通信速度を記憶したテーブルである。各通信IF205の通信速度は、移動通信端末100の位置や時刻によって異なり得るため、通信品質テーブル307には各通信IF205の通信速度が、位置と時刻毎に記憶されている。
【0031】
通信速度取得部309は、GPS203から入力される現在時刻と現在位置に基づいて、通信品質テーブル307を参照し、GPS203から入力される現在時刻と現在位置に対応する、各通信IF205の通信速度を取得する。
【0032】
送信完了時刻記憶部310は、通信IF選択部311から入力される、前データ送信完了時刻を格納しておく記憶領域である。
【0033】
通信IF選択部311は、複製データ生成部305から入力される1または複数のデータを受信し、受信データ数をカウントする。通信IF選択部311は、送信完了時刻計算部306から入力される、各通信IF205の次データ送信完了時刻に基づいて、複製データ生成部305から入力された1または複数のデータを送信する通信IF205を選択し、前記1または複数のデータに同一のシーケンス番号を付与した上で、前記通信IF205を介してデータを送信する。
【0034】
<通信速度取得部309の処理フロー>
図4に、通信速度取得部309が参照する通信品質テーブル307の例を示す。
【0035】
本実施例においては、通信品質テーブル307は、通信キャリア毎(または通信IFモジュール205毎)に設けられるものとし、通信キャリアiに対応する通信品質テーブル307の参照番号には“307−i”が用いられる。通信速度取得部309が、ある時刻tにおける通信IFiの通信速度を取得する場合、通信品質テーブル307−iに含まれる各行の時刻410−iを参照し、時刻410−iの範囲内に時刻tを含む行を特定する。そして通信速度取得部309は、GPS203によって得られた現在地が、現在地420−iカラム内の何れのエリア(エリアA,B,C)に含まれるかを照合する。
【0036】
たとえば現在時刻が02時00分で、現在地が“エリアB”に含まれる場合、通信速度取得部309が通信IF1の通信速度を取得する時、通信品質テーブル307−1の時刻410−1が“00時00分00.000秒~05時59分59.999秒”の行の、現在地420−1が“エリアB”に格納されている値を参照することにより、通信IF1の通信速度は、2000000(bps)であると知ることができる。
【0037】
図5に、通信速度取得部309の処理フロー図を示す。通信速度取得部309は、各通信IFの通信速度の情報を記憶しておく記憶領域(変数)を有する。以下では通信IFiの通信速度を記憶しておく記憶領域をb
iと表記する。また以下では特に断りのない限り、移動通信端末100の有する通信IFモジュール205の数をm(mは1より大きい整数値)とする。
図2や
図3では、m=3の例が示されている。
【0038】
また、
図5等の処理フロー図に用いられている参照番号の前に付されている“S”は、「ステップ」を意味する。また、
図5等の処理フロー図に記載の式において、左辺と右辺が「=」で結合されている式は、右辺の値を左辺に代入する処理であることを意味する。また左辺と右辺が「==」で結合されている式は、左辺の値と右辺の値が等しい状態にあることを意味し、判定処理(たとえば以下で説明するS505)でこの式が用いられている場合、その判定処理は、左辺の値と右辺の値が等しいか否かを判定する処理であることを意味する。
【0039】
通信速度取得部309は、はじめに、各通信IFの通信速度b
j(j=1,2,...m)を初期値(0)に設定する(S501)。次に、通信速度取得部309は、現在位置、または、現在時刻をGPS203から受信したかを確認し(S502)、受信していない場合にはS502に進み、受信している場合にはS503に進む。
【0040】
S503では、通信速度取得部309は変数iを用意し、iを0に初期化する。次に通信速度取得部309は、通信IF iの通信品質テーブル307を参照し、現在位置、現在時刻に対応する通信速度(これを“c
i”と呼ぶ)を取得する(S504)。
【0041】
次に通信速度取得部309は、取得した通信速度c
iがb
iと等しいかを確認し(S505)、等しい場合はS508へ進み、等しくない場合にはS506へ進む。S506では、通信速度取得部309は取得した通信速度c
iをb
iに代入する。次に通信速度取得部309は、複製データ数計算部304と送信完了時刻計算部306へb
iを入力する(S507)。
【0042】
S508では、通信速度取得部309はiが通信IF数と等しいかを確認し、等しい場合にはS502へ進み、等しくない場合にはS509へ進む。S509では通信速度取得部309はiに1を加算し、S504へ進む。
【0043】
例えば、移動通信端末100がGPS203から取得した現在時刻が03時00分00.000秒でエリアBにおり、また移動通信端末100が、
図4に示された通信品質テーブル307−1,307−2,307−3を有している状況を想定する。この時の各通信IFの通信速度は、b
1=2000000, b
2=500000, b
3=600000である。ここで移動通信端末100が、03時00分00.010秒(GPS203から取得した現在時刻とする)にエリアAに移動した場合に、通信速度取得部309が行う処理を説明する。移動後にS504が実行されることにより、通信速度取得部309は通信品質テーブル307からc
1=1500000, c
2=900000, c
3=800000を取得する。この場合、b
1≠c
1, b
2≠c
2, b
3≠c
3であるため、b
1, b
2, b
3はそれぞれ、c
1, c
2, c
3に更新され(S505、S506)、通信速度取得部309は更新されたb
1, b
2, b
3を複製データ数計算部304と送信完了時刻計算部306へ入力する(S507)。
【0044】
<複製データ数計算部の処理>
複製データ数計算部304が実施する複製データ数計算方法を、
図6を用いて説明する。複製データ数計算部304は、データ生成速度計算部303がアプリケーション部301のデータ生成速度を観測して、複製データ数計算部304にデータ生成速度を入力したことを契機として、処理を開始する。
【0045】
まずS601で複製データ数計算部304は、複製データ数を格納するための変数N
int、バンドル回線合計通信速度を格納するための変数Vを用意し、N
intとVを初期化する(0を代入する)。なお、本明細書において「バンドル回線」は、通信速度がアプリケーション部301のデータ生成速度より小さい通信IF(あるいはその通信IFによって移動通信端末100とサーバ102間に形成される通信路)を意味する語として用いられる。そしてバンドル回線合計通信速度とは、全てのバンドル回線の通信速度の総和である。
【0046】
S602では、複製データ数計算部304はアプリケーション部301のデータ生成速度(これをg[bps]と表記する)を取得し、S603へ進む。S603では複製データ数計算部304は変数iを用意し、iに初期値(1)を代入し、S604へ進む。
【0047】
S604では、複製データ数計算部304は通信速度取得部309から通信IF iの通信速度b
i[bps]を取得し、S605へ進む。S605では複製データ数計算部304はb
iとgを比較することで、b
i≧gの関係にあるか判定し、b
i≧gの場合にはS606へ進み、b
i≧gでない場合には、S607へ進む。
【0048】
S606では、複製データ数計算部304は複製データ数N
intに1を加算し、S608へ進む。S607では、複製データ数計算部304はバンドル回線合計通信速度Vにb
iを加算し、S608へ進む。
【0049】
S608では、複製データ数計算部304はiが通信IF数に等しいかを確認し、等しくない場合にはS609に進み、等しい場合にはS610に進む。S609では、複製データ数計算部304はiの値に1を加算し、S605へ進む。
【0050】
S610では、複製データ数計算部304は複製データ数N
intに、バンドル回線合計通信速度をデータ生成速度で除算した商(V÷g)を加えて、S611へ進む。なお、S610で複製データ数計算部304がN
intに加算する値(V÷g)は整数とする。つまりV÷gが小数部を含む場合、小数部は切り捨てられてV÷gの整数部のみが加算される。S611では複製データ数計算部304は、計算した複製データ数N
intを複製データ生成部305へ入力し、処理を終了する。
【0051】
<複製データ数計算部の処理の具体例>
複製データ数計算部304の複製データ数計算方法の具体例を、
図7に示す例を用いて説明する。なお、本実施例においては、
図7に示す通り、アプリケーション部301は一定間隔(パケット生成間隔で示された間隔)で所定サイズ(データサイズに示されたサイズ)のデータを生成する前提とする。
【0052】
図7に示すとおり、アプリケーション部301のデータ生成速度g=1000000[bps]で、通信IFの数が3つで、かつ通信速度取得部309で決定された各通信IFの通信速度がb
1=1500000[bps]、b
2=900000[bps]、b
3=800000[bps]である場合に、複製データ数計算部304が複製データ数N
intを算出する処理の流れを説明する。
【0053】
まず変数iが1の時の、S604〜S607で行われる処理について説明する。S605で複製データ数計算部304はb
1とgを比較すると、b
1 ≧ gであるため、複製データ数計算部304は複製データ数N
intに1を加算する(S606)。そのためN
intは1となる。
【0054】
次に変数iが2の時、S605で複製データ数計算部304がb
2とgを比較すると、b
2≧gではないため、複製データ数計算部304はバンドル回線合計通信速度Vにb
2を加算する(S607)。そのためVは900000となる。
【0055】
次に変数iが3の時、S605で複製データ数計算部304がb
3とgを比較すると、b
3 ≧ gとならないため、複製データ数計算部304はバンドル回線合計通信速度Vにb
3を加算することにより、Vは1700000になる。
【0056】
全ての通信IFについてS607迄の処理が完了すると(S608で、iが通信IF数と等しくなった場合)、複製データ数計算部304は次にS610を実行する。S610では、複製データ数N
intにV÷g(具体的には、1700000÷1000000の計算結果から小数部を切り捨てたもの。つまり1)が加算され、N
intは2となる。つまりV÷gは、バンドル回線(ここの例では通信IF2及び通信IF3)を用いて送信される複製データの数を表す。
【0057】
本実施例に係る移動通信端末100は、上で述べた処理を行うことで複製データ数を決定するので、非バンドル回線(通信速度がデータ生成速度以上である通信IF)を介して送信される複製データの数は、非バンドル回線の数と等しく、バンドル回線を介して送信される複製データの数は、バンドル回線の数よりも少なくなる。たとえば上で説明した例では、通信IF2と通信IF3の2つがバンドル回線であるため、通信IF2または通信IF3を介して送信される複製データの数は、2以上にならないように制限される。
【0058】
全バンドル回線に複製データを送信させると、データが常時遅延して送信される(バンドル回線を介して送信される単位時間あたりのデータ量が、全バンドル回線の帯域の合計を超過するからである)。かつその遅延は、データを送信し続けるにつれて大きくなる。本実施例に係る移動通信端末100は、上で述べた処理により複製データ数を決定することで、バンドル回線を介して送信される(単位時間あたりの)複製データの量が、全バンドル回線の帯域を超えないように制限され、結果としてデータ送信に係る遅延を抑制できる。
【0059】
<複製データ生成部の処理>
複製データ生成部305の複製データ生成処理について
図8を用いて説明する。以下の説明において、複製データ数計算部304が算出した複製データ数をN
intと表記する。先に述べたとおり、複製データ数計算部304は複製データ数N
intを算出すると、複製データ生成部305にN
intを入力する。
【0060】
S801では、複製データ生成部305は変数n
intを用意する。変数n
intは、複製データ生成部305が生成すべき複製データの数を表す。複製データ生成部305はまたS801で、複製データ数n
intを1で初期化し、S802へ進む。
【0061】
S802では複製データ生成部305は、複製データ数計算部304から複製データ数N
intを受信したか確認し、受信している場合はS803に進み、受信していない場合はS804に進む。S803では、複製データ生成部305はn
intの値を複製データ数計算部304から受信したN
intに更新し、S804に進む。
【0062】
S804では複製データ生成部305は、アプリケーション部301からデータを受信したか確認し、受信している場合にはS805に進み、受信していない場合にはS802に進む。S805では複製データ生成部305は、n
intと同数の複製データ(アプリケーション部301から受信したデータの複製)を生成する。その後複製データ生成部305は、当該複製データを通信IF選択部311へ入力し、再びS802に戻る。
【0063】
<送信完了時刻計算部の処理>
送信完了時刻計算部306の処理について
図9を用いて説明する。送信完了時刻計算部306は、アプリケーション部301でデータが生成・出力され、そしてデータサイズ取得部302からデータサイズが、データ生成速度計算部303からアプリケーション部301のデータ生成速度が入力されることを契機に実行される。そして送信完了時刻計算部306は、アプリケーション部301からデータが出力されるたびに、そのデータ(の複製)を通信IF205が送信する場合のデータ送信完了時刻を、通信IF205毎に算出する(見積もる)。
【0064】
以下の説明では、送信完了時刻計算部306が
図9の処理を実行することで算出される時刻のことを「次データ送信完了時刻」と呼ぶ。また送信完了時刻計算部306は次データ送信完了時刻を保持するための変数を有する。以下の説明では、送信完了時刻計算部306が通信IFi(iは1以上の整数である)について算出した次データ送信完了時刻を保持する変数をt
i_nextと表記する。
【0065】
本実施例で用いられる時刻の表現形式、たとえば変数t
i_nextに格納される時刻情報の表現形式には、ある基準時刻(たとえば2016年1月1日0時0分0秒など)からの経過時間(秒数)が用いられる。ただし変数t
i_nextに0が格納される場合には、別の意味を持つ。詳細は後述する。
【0066】
なお、送信完了時刻計算部306が次データ送信完了時刻を算出する時、前回算出した時刻(次データ送信完了時刻)を用いることがある。以下では、送信完了時刻計算部306が前回
図9の処理を実行した時に算出した時刻(次データ送信完了時刻)のことを「前データ送信完了時刻」と呼び、通信IFiについて算出された前データ送信完了時刻はt
i_beforeと表記する。なお、前データ送信完了時刻t
i_beforeは、通信IF選択部311(後述)によって、送信完了時刻記憶部310に格納されている。
【0067】
S901では、送信完了時刻計算部306は送信完了時刻記憶部310から、各通信IFの前データ送信完了時刻t
j_before (j=1,2,…m)を取得し、S902へ進む。S902では送信完了時刻計算部306は、データ生成速度計算部303からアプリケーション部301のデータ生成速度g [bps]を取得し、S903へ進む。S903では送信完了時刻計算部306は、データサイズ取得部302から入力されたデータサイズd[bit]を取得し、S904へ進む。S904では、送信完了時刻計算部306は変数iを用意し、iを1で初期化し、S905へ進む。
【0068】
S905では、送信完了時刻計算部306はb
i とgを比較し、b
i < gである場合にはS906に進み、逆にb
i ≧ gである場合にはS907に進む。S906では送信完了時刻計算部306は、t
i_beforeが現在時刻より前か、つまり“t
i_before<現在時刻”を満たすかを確認する。t
i_beforeが現在時刻より前の場合には次にS908が行われ、t
i_beforeが現在時刻より前でない場合には、次にS909が行われる。
【0069】
S907では、送信完了時刻計算部306はt
i_next に0を格納し、S910へ進む。S907が実行される場合、データ生成速度よりも通信IFiの通信速度が速い(b
i≧gである)ため、アプリケーション部301から次に送信すべきデータが通信IFiに渡される前に、データ送信が完了する。その場合には送信完了時刻計算部306はt
i_nextを0にする。
【0070】
S908では、送信完了時刻計算部306はt
i_nextに(現在時刻+d/b
i)を代入し、S910に進む。S908が実行される場合、前回行われたデータ送信処理は既に完了している。なぜならば“t
i_before<現在時刻”が成立する場合(S906の判定が肯定的な場合)にS908が実行されるからである。そのためこの場合、送信完了時刻計算部306は、サイズd [bit]のデータの送信に要する時間(つまりd/b
i)を現在時刻に加算することで、次データ送信完了時刻を算出する。
【0071】
S909では、送信完了時刻計算部306はt
i_nextに(t
i_before+d/b
i)を代入し、S910へ進む。S909が実行される時は、まだ前回のデータ送信処理が完了しておらず(t
i_before≧現在時刻の場合に、S909が実行されるからである)、これから行われるデータ送信は、前回のデータ送信処理が完了してから開始される。そのため次データ送信完了時刻は(t
i_before+d/b
i)になると推定されるため、送信完了時刻計算部306はt
i_nextに(t
i_before+d/b
i)を代入する。
【0072】
S910では、送信完了時刻計算部306は“i==通信IF数”であるか確認し、iが通信IF数と等しい場合にはS912に進み、そうでない場合にはS911に進む。S911ではiに1を加算し、S905へ進む。S912では、各通信IFの次データ送信完了時刻t
j_next (j=1,2,…m)を通信IF選択部311へ入力し、処理を終了する。
【0073】
<通信IF選択部の処理>
通信IF選択部311の処理を、
図10を用いて説明する。
【0074】
S1000では、通信IF選択部311は変数kを用意し、kを1で初期化する。そのあとS1001が行われる。
【0075】
S1001では通信IF選択部311は、複製データ生成部305から複製データを受信したかを確認し、受信している場合にはS1002へ進み、受信していない場合にはS1001へ進む。S1002では、通信IF選択部311は複製データ数をカウントし、S1003へ進む。以下では、ここでカウントされた複製データ数をcと表記する。
【0076】
S1003では通信IF選択部311は、送信完了時刻計算部306から各通信IFの次データ送信完了時刻t
i_next(i=1,2,…m)を取得し、t
i_nextを小さい順にソートし、S1004へ進む。S1004では、通信IF選択部311は変数jを用意し、jを1で初期化し、S1005へ進む。S1005では、通信IF選択部311は各通信IFの次データ送信完了時刻を比較し、次データ送信完了時刻がj番目に小さい通信IFを特定し、S1006へ進む。以下では、S1005において特定された通信IFが、通信IF i(iは、1以上かつm以下の整数とする)が特定された場合の例を説明する。
【0077】
S1006では、通信IF選択部311は複製データにシーケンス番号 k を付与して、S1005で特定された通信 IF iに複製データの送信を指示する。その後通信IF選択部311は、通信IFiのデータ送信完了を待たずに、S1007へ進む。S1007では通信IF選択部311は、送信完了時刻記憶部310に記憶されている前データ送信完了時刻t
i_beforeの値をt
i_nextに更新し、S1008へ進む。
【0078】
S1008では、通信IF選択部311はj==cであるか確認し、j==cである場合にはS1010へ進み、そうでない場合にはS1009へ進む。S1009では、通信IF選択部311はjに1を加算し、S1005へ進む。S1010では、通信IF選択部311はkに1を加算し、S1001へ進む。
【0079】
なお、通信IF選択部311は必ずしも上で述べた順序で各ステップを実行しなくてもよい。たとえば通信IF選択部311は、データ送信に用いる通信IFの選択(S1005)と前データ送信完了時刻t
i_beforeの更新処理(S1007)を、c回(複製データ数と同回数)繰り返し、それが終わった後に、選択された各通信IFにデータ送信(S1006)を並列実行させるようにしてもよい。
【0080】
さらに別の実施形態として、複製データにシーケンス番号を付与する処理を、S1006(通信IF選択部311)で行わせる代わりに、他の機能部、例えば複製データ生成部305に行わせてもよい。
【0081】
<通信データのフォーマット>
ここで、通信IF選択部311が通信IF205を介して送信する通信データのフォーマットを
図11に示す。通信データはヘッダ部1101と、データ部1102から構成される。ヘッダ部1101には、シーケンス番号1103が格納される。シーケンス番号1103は、
図10のS1006で付与される。データ部1102には、アプリケーションデータ1104が格納される。アプリケーションデータ1104は、アプリケーション部301が生成したデータである。
【0082】
<送信完了時刻計算部の処理と、通信IF選択部の処理の具体例>
データ送信完了時刻の計算例と通信IF選択の例を、
図7、12、13、14を用いて説明する。
図7は例を説明するための前提条件である。前提条件として、
図7に示す通り、アプリケーション部301が生成するデータのデータ生成速度g=1000000[bps]、データサイズd=12000[bit]、データ生成間隔0.012[s]とする。また、通信IF205の数は3つとし、通信速度取得部309で決定された、各通信IF205の通信速度b
1、b
2、b
3はそれぞれ、b
1=1500000[bps]、b
2=900000[bps]、b
3=800000[bps]とする。
【0083】
以下の例では、複製データ生成部305に0時0分1.000秒から、データ生成間隔0.012[s]毎にデータサイズd=12000[bit]のデータが入力される例を説明する。また、時刻0時0分1.000秒において、送信が完了していないデータはないものとする。なお、以下の例における時刻の表現方法には、0時0分0.000秒からの経過時間が用いられる。つまり、t
i_next及びt
i_beforeに格納される値は、0時0分0.000秒からの経過時間である。ただし、t
i_nextに0が格納されている場合、それはt
i_next(次データ送信完了時刻)が0時0分0.000秒であることを意味するわけではない。この場合は先に述べたとおり、前回のデータ送信処理が完了していることを意味する。
【0084】
本前提条件における、複製データ数の計算結果は、<複製データ数の計算処理フローの具体例>で説明した通り、2となる。
【0085】
図12は、データ送信完了時刻の計算例を示す。1210、1220、1230、1240はそれぞれ、0時0分1.000秒、0時0分1.012秒、0時0分1.024秒、0時0分1.036秒に送信完了時刻計算部306が算出した次データ送信完了時刻の計算結果である。たとえばカラム1214は、0時0分1.000秒に、送信完了時刻計算部306が算出した次データ送信完了時刻を表しており、またカラム1213は、その時点で送信完了時刻記憶部310に記憶されている時刻(前データ送信完了時刻)である。なお、カラム1214(または1224,1234,1244)に記録されている値のうち、下線の引かれている値は、バンドル回線の中で、通信IF選択部311が複製データ送信のために選択した通信IFの次データ送信完了時刻を表している。
【0086】
図13、
図14は次データ送信完了時刻に基づいて、通信IF選択部311が複製データを送信する通信IF205を選択して送信した結果を示す図である。1310、1320、1410、1420はそれぞれ、0時0分1.000秒、0時0分1.012秒、0時0分1.024秒、0時0分1.036秒に流入した複製データを送信した結果を示す。
【0087】
○現在時刻:0時0分1.000秒における、
送信完了時刻計算部306の処理を説明する(1210)。送信完了時刻計算部306は通信IF1,通信IF2,通信IF3について、S905〜S909を実行する。
・b
1について、b
1 < gを満たさないので(S905)、送信完了時刻計算部306は次データ送信完了時刻t
1_next=0とする(S907)。
・b
2について、b
2 < gを満たし(S905)、かつt
2_beforeは現在時刻(0時0分1.000秒)より小さいので、送信完了時刻計算部306はS908を実行する。これにより次データ送信完了時刻t
2_next=1.000+12000/900000=1.0133となる。
・b
3について、b
3 < gを満たし(S905)、かつt
3_beforeは現在時刻より小さいので、送信完了時刻計算部306はS908を実行する。これにより次データ送信完了時刻t
3_next=1.000+12000/600000=1.020となる。
【0088】
続いて送信完了時刻計算部306の処理の後に実行される、通信IF選択部311の処理を説明する。
・複製データ生成部305から2個の複製データが送信されてくるため、複製データ数cは2と決定される(S1002)。複製データ数cが2なので、通信IF選択部311では、通信IFを選択して、選択した通信IFを用いてデータ送信する処理(S1005〜S1007)が2回行われる。
・まずS1003で通信IF選択部311は、送信完了時刻計算部306から各通信IFの次データ送信完了時刻 t
i_next (i=1,2,3)を取得し、t
i_nextを小さい順にソートする。結果として、t
1_next、t
2_next、t
3_nextの順に並べ替えられる。
・1回目にS1005が実行される時、通信IF選択部311は送信完了時刻 t
i_next (i=1,2,3)が1番目に小さい通信IF(通信IF1)を選択する。続いて通信IF選択部311は送信完了時刻記憶部310のt
1_beforeをt
1_next (=0)に更新(S1007)する。
・2回目にS1005が実行される時、送信完了時刻 t
i_next (i=1,2,3)が2番目に小さい通信IF2が選択される。S1007では、送信完了時刻記憶部310のt
2_beforeがt
2_next (=1.0133)に更新される。
【0089】
図13の1310の上段に示されるチャートは、上記手順で計算された各通信IFの次データ送信完了時刻を示し、下段に示されるチャートは、通信IF選択部311が次データ送信完了時刻に基づいて選択した通信IF(通信IF1,通信IF2)へデータ送信した結果を表している。
【0090】
○現在時刻:0時0分1.012秒における、
送信完了時刻計算部の処理を説明する(1220)。
・b
1について、b
1 < gを満たさないので(S905)、送信完了時刻計算部306は次データ送信完了時刻t
1_next=0とする(S907)。
・b
2について、b
2 < gを満たし(S905)、かつt
2_beforeは現在時刻(0時0分1.012秒)より大きいので、送信完了時刻計算部306は次データ送信完了時刻t
2_next=1.0133+12000/900000=1.0266とする(S909)。
・b
3について、b
3 < gを満たし(S905)、かつt
3_beforeは現在時刻より小さいので、送信完了時刻計算部306は次データ送信完了時刻t
3_next=1.012+12000/800000=1.027とする(S908)。
【0091】
続いて送信完了時刻計算部306の処理の後に実行される、通信IF選択部311の処理を説明する。
・先の例と同じく、複製データ数cは2である(S1002)。
・通信IF選択部311は、送信完了時刻計算部306から各通信IFの次データ送信完了時刻 t
i_next (i=1,2,3)を取得し、 t
i_nextを小さい順にソートする。結果として、t
1_next、t
2_next、t
3_nextの順にソートされる(S1003)。
・1回目にS1005が実行される時、通信IF選択部311は送信完了時刻 t
i_next (i=1,2,3)が1番目に小さい通信IF1を選択する。S1007で通信IF選択部311は、送信完了時刻記憶部310のt
1_before をt
1_next (=0)に更新する。
・2回目にS1005が実行される時、通信IF選択部311は送信完了時刻 t
i_next (i=1,2,3)が2番目に小さい通信IF2を選択し(S1005)、送信完了時刻記憶部310のt
i_beforeをt
2_next (=1.0266)に更新(S1007)する。
【0092】
図13の1320の上段に示されたチャートは、上記手順で計算された各通信IFの次データ送信完了時刻を表しており、下段に示されたチャートは、通信IF選択部311が次データ送信完了時刻に基づいて選択した通信IF(通信IF1,通信IF2)へデータ送信した結果を表している。
【0093】
○現在時刻:0時0分1.024秒における、
送信完了時刻計算部306の処理を説明する(1220)。
・b
1について、b
1 < gを満たさないので(S905)、次データ送信完了時刻t
1_next=0にされる(S907)。
・b
2について、b
2 < gを満たし(S905)、かつt
2_beforeは現在時刻(0時0分1.024秒)より大きいので、送信完了時刻計算部306は次データ送信完了時刻t
2_next=1.0266+12000/900000=1.0399にする(S909)。
・b
3について、b
3 < gを満たし(S905)、かつt
3_beforeは現在時刻より小さいので、送信完了時刻計算部306は次データ送信完了時刻t
3_next=1.024+12000/800000=1.039となる(S908)。
【0094】
通信IF選択部311の処理を説明する。
・先の例と同じく、複製データ数cは2である(S1002)。
・通信IF選択部311は、送信完了時刻計算部から各通信IFの次データ送信完了時刻 t
i_next (i=1,2,3)を取得し、t
i_nextを小さい順にソートすることで、t
1_next、t
3_next、t
2_nextの順に並べ替えられる(S1003)。
・S1005で通信IF選択部311は、送信完了時刻 t
i_next (i=1,2,3)が1番目に小さい通信IF1を選択する。S1007では通信IF選択部311は、送信完了時刻記憶部310のt
i_beforeをt
1_next(=0)に更新(S1007)する。
・次にS1005が実行される時、送信完了時刻 t
i_next (i=1,2,3)が2番目に小さい通信IF3が選択され、S1007で通信IF選択部311は、t送信完了時刻記憶部310のt
i_beforeをt
2_next(=1.039)に更新(S1007)する。
【0095】
図14の1410の上段に示されたチャートは、上記手順で計算された各通信IFの次データ送信完了時刻を表し、下段に示されたチャートは、通信IF選択部311が次データ送信完了時刻に基づいて選択した通信IF(通信IF1,通信IF3)へデータ送信した結果を表している。
【0096】
○現在時刻:0時0分1.036秒における、
送信完了時刻計算部の処理を説明する(1220)。
・b
1について、b
1 < gを満たさないので(S905)、送信完了時刻計算部306は次データ送信完了時刻t
1_next=0とする(S907)。
・b
2について、b
2 < gを満たし(S905)、かつt
2_beforeは現在時刻(0時0分1.036秒)より小さいので、送信完了時刻計算部306は次データ送信完了時刻t2_next=1.036+12000/900000=1.0499とする(S909)。
・b
3について、b
3 < gを満たし(S905)、かつt
3_beforeは現在時刻(0時0分1.036秒)より大きいので、送信完了時刻計算部306は次データ送信完了時刻t
3_next=1.039+12000/800000=1.054となる(S909)。
【0097】
通信IF選択部311の処理を説明する。
・先の例と同じく、複製データ数cは2である(S1002)。
・通信IF選択部311は、送信完了時刻計算部から各通信IFの次データ送信完了時刻 t
i_next (i=1,2,3)を取得し、 t
i_nextを小さい順にソートする。結果としてt
1_next、t
2_next、t
3_nextの順にソートされる(S1003)。
・S1005で通信IF選択部311は、送信完了時刻 t
i_next (i=1,2,3)が1番目に小さい通信IF1を選択する。S1007では通信IF選択部311は、送信完了時刻記憶部310のt
i_beforeをt
1_next (=0)に更新(S1007)する。
・2回目にS1005が実行される時、通信IF選択部311は送信完了時刻 t
i_next (i=1,2,3)が2番目に小さい通信IF2を選択し(S1005)、送信完了時刻記憶部310のt
i_beforeをt
2_next (=1.0499)に更新(S1007)する。
【0098】
図14の1420の上段に示されたチャートは、上記手順で計算された各通信IFの次データ送信完了時刻を表し、下段に示されたチャートは、通信IF選択部311が次データ送信完了時刻に基づいて選択した通信IFへデータ送信した結果を表している。
【0099】
本実施例に係る移動通信端末100は、
図9,10を用いて説明したとおり、各通信IFからデータ送信を行った場合のデータ送信完了時刻(上で述べた「次データ送信完了時刻」)を算出し(見積もり)、算出した各通信IFのデータ送信完了時刻に基づいて、データ送信に使用する通信IFを選択する。具体的には、データ送信完了時刻が最も早い通信IFから優先的に選択される。これにより、データ通信遅延を最小限に抑制することを可能にしている。
【0100】
最後に、本実施例に係る通信システムにおける、サーバ102の構成について説明する。
図15は、サーバ102の物理構成図である。サーバ102は、CPU1501と、メモリ1502と、通信IFモジュール1503(以下では「通信IF1503」と略記)と、それらを接続するバス1504から構成される。
【0101】
図16は、サーバ102の機能ブロック図である。
【0102】
サーバ102は、アプリケーション部1601、先着データ選択部1602、通信IF1603から構成される。アプリケーション部1601、先着データ選択部1602は、メモリ1502に格納されたプログラムをCPU1501が実行することにより実現される機能部である。
【0103】
アプリケーション部1601は、移動通信端末100から送信されてきたデータを利用して、分析等の各種処理を実行する。
【0104】
先着データ選択部1602は、通信IF1503を介して受信したデータを、アプリケーション部1601に渡す機能部である。先に述べたとおり、移動通信端末100からサーバ102には、同一シーケンス番号が付与された複製データが複数送信されてくる。先着データ選択部1602は、受信した通信データのシーケンス番号を確認し、前記シーケンス番号のデータを初めて受信した場合には、前記データをアプリケーション部1601へ入力する。先着データ選択部1602は、前記シーケンス番号のデータを2回目以降に受信した場合には、当該データを廃棄する。先着データ選択部1602がこのような処理を行うので、アプリケーション部1601は同一シーケンス番号が付与された複数の複製データのうち、最初に到着したデータだけを受領する。
【0105】
本実施例に係る通信システムによれば、ある通信キャリアの通信速度を超過した場合においても、低遅延で高品質の通信を実現することができる。
【実施例3】
【0125】
実施例3では、移動通信端末100が自身で通信速度を正確に把握できない場合においても、遅延を最小化する方法について説明する。
【0126】
図22に実施例3に係る移動通信端末100の機能ブロック図を示す。ここでは、
図3と異なる機能についてのみ説明する。
【0127】
実施例3に係る移動通信端末100は、実施例1における通信速度取得部309に代えて、通信速度推定部2201を有する。また実施例3に係る移動通信端末100は、通信品質テーブル307を持っていなくてもよい。通信速度推定部2201は、通信IF205を介してサーバ102から受信した通信品質情報を基に、通信速度を推定する。通信品質情報については後述する。通信速度推定部2201は前記推定した通信速度を複製データ数計算部304と、送信完了時刻計算部306に入力する。
【0128】
通信IF選択部2202は
図3の通信IF選択部311と同様の処理を行うだけでなく、追加で以下の処理を実施する。通信IF選択部2202は、複製データ生成部305から入力された1または複数のデータを送信する通信IF205を選択し、前記1または複数のデータに同一のシーケンス番号を付与する。さらに通信IF選択部2202は各複製データに、その複製データが送信される通信IF205の識別子(通信IF番号。あるいは通信経路識別子と呼ばれる)と、現在時刻を付与して、通信IF205を介してデータを送信する。同一の複製データ(同一のシーケンス番号が付与された複製データ)でも、送信に用いられる通信IFはそれぞれ異なるので、それぞれの複製データには異なる通信経路識別子が付与される。
【0129】
図23に実施例3におけるサーバ102の機能ブロック図を示す。ここでは
図16と異なる機能部(通信IF2301、通信品質測定部2302)についてのみ説明する。通信IF2301、通信品質測定部2302は、CPU1501がメモリ1502に格納されたプログラムを読み出して、メモリ1502や通信IFモジュール1503を使用しながら実行することにより実現される機能部である。
【0130】
通信IF2301は移動通信端末100から受信したデータを、先着データ選択部1602と通信品質測定部2302に入力する。通信品質測定部2302は、入力されたデータのヘッダ部の情報を参照することで通信品質情報を生成し、生成した通信品質情報を通信IF2301を介して移動通信端末100へ送信する。
【0131】
図24の2410に、移動通信端末100がサーバ102へ送信するデータのフォーマットを示す。実施例1等と同様、移動通信端末100がサーバ102へ送信するデータ2410はヘッダ部2411、データ部2412を有する。ただし実施例3に係る移動通信端末100が生成するデータのヘッダ部2411にはシーケンス番号2413に加えて、通信経路識別子2414と送信時刻2415が含まれる。データ部2412はアプリケーションデータ2416を有する。アプリケーションデータ2416は、アプリケーション部301が生成したデータである。通信経路識別子2414は、本データが送信される通信IF205を識別するための識別子である。なお、本実施例では、通信IF i(iは1以上の整数)によって移動通信端末100とサーバ102間に形成される通信路のことを、「通信経路i」と呼ぶ。たとえば通信経路1とは、通信IF1から基地局1(110−1)、キャリアネットワーク1(120−1)を経由して、サーバ102に到達する経路である。移動通信端末100とサーバ102間に設けられる通信経路の数(通信経路数)は、移動通信端末100の有する通信IF205の数に等しい。
【0132】
図24の2420に、サーバ102が移動通信端末100へ送信するデータのフォーマットを示す。サーバ102が移動通信端末100へ送信するデータ2420は、ヘッダ部2421のみを有する。ヘッダ部2421には、通信経路識別子2422、通信経路の平均データ転送速度である受信スループット値2423、移動通信端末100からサーバ102へデータを送信する際の平均遅延時間2424が含まれる。本実施例では、この2420を「通信品質情報」と呼ぶ。
【0133】
<サーバ102の通信品質測定部2302の処理>
図25を用いて、サーバ102の通信品質測定部2302の処理を説明する。通信品質測定部2302は、最後に通信品質情報を移動通信端末100に送信した時刻(最終通信品質送信時刻と呼ぶ)を変数に保持しており、以下ではその変数をTと表記する。また、通信品質測定部2302は通信経路ごとに、通信経路i(iは1≦i≦通信経路数)から受信したデータ量(ビット数。これを「通信経路iの受信ビット数」と呼ぶ)、通信経路iを用いたデータ送信における遅延時間の合計(これを「通信経路iの合計遅延時間」と呼ぶ)、通信経路iからデータを受信した回数(これを「通信経路iのデータ受信カウント数」と呼ぶ)を保持する変数を有しており、それぞれをR
i, L
i, p
iと表記する。
【0134】
S2501で通信品質測定部2302は、最終通信品質送信時刻Tを現在時刻に更新し、次にS2502に進む。S2502では、通信品質測定部2302は各通信経路i (1≦i≦通信経路数)の受信ビット数R
i, 合計遅延時間L
i, 通信データ受信カウント数p
iを0で初期化し、S2503へ進む。
【0135】
S2503では通信品質測定部2302は、最終通信品質送信時刻TからX秒以上経過したかを確認し、経過している場合にはS2507へ進み、経過していない場合にはS2504へ進む。S2504では通信品質測定部2302は、通信データを受信したかを確認し、受信している場合にはS2505へ進み、受信していない場合にはS2503へ進む。
【0136】
S2505では、通信品質測定部2302は受信した通信データの内容を確認し、通信経路f、遅延時間 l、データサイズr(これはアプリケーションデータ2416のサイズである)を取得し、S2506へ進む。なお通信品質測定部2302は遅延時間lを取得する際、現在時刻と、受信したデータに格納された送信時刻2415の差を計算することで遅延時間lを求める。S2506で通信品質測定部2302は、R
fを R
f +rに更新し、L
fをL
f + lに更新し、p
fをp
f + 1に更新する。その後通信品質測定部2302はS2503を行う。
【0137】
S2507では、通信品質測定部2302は変数iを用意し、Iを0で初期化し、S2508へ進む。S2508では、通信品質測定部2302は通信経路iのスループットと、通信経路iの平均通信遅延時間を計算する。通信経路iのスループットは、R
iをXで除算することで求められる値で、 通信経路iの平均通信遅延時間はL
iをp
iで除算することで求められる値である。通信品質測定部2302はこれらの値を計算した後、これらの値を含む通信品質情報を作成して移動通信端末100に送信し、S2509へ進む。
【0138】
S2509では通信品質測定部2302は、R
i =0、L
i=0、p
i=0とし、S2510へ進む。S2510では、通信品質測定部2302はi == 通信経路数を満たすかを確認し、満たす場合にはS2501へ進み、満たさない場合にはS2511へ進む。S2511では、通信品質測定部2302はi に1を加算する。
【0139】
以上の処理により、サーバ102において各無線通信システムの通信品質を測定して、移動通信端末100へ通知することができる。
【0140】
<移動通信端末100の通信速度推定部2201の処理>
図26を用いて移動通信端末100の通信速度推定部2201の処理を説明する。通信速度推定部2201は、算出(推定)された通信速度を格納するための変数を通信IF毎に有している。以下の説明では通信IF i(1≦i≦通信IF数)の通信速度を格納するための変数をb
iと表記する。また通信速度推定部2201は、b
iを最も最近更新した時刻(最終通信品質変更時刻と呼ぶ)を保持する変数を通信IF毎に有しており、以下ではその変数をt
j_lastと表記する。
【0141】
S2601では、通信速度推定部2201はサーバ102から通信品質情報を受信したかを確認し、受信している場合にはS2602へ進み、受信していない場合にはS2605へ進む。
S2602で通信速度推定部2201は、通信品質情報に格納された通信経路識別子2422を確認する。以下では、通信経路識別子2422がjであった場合について説明する(jは1以上通信IF数以下の整数である)。S2602で通信速度推定部2201はまた、通信品質情報に格納された平均遅延時間2424(通信経路 j の平均遅延時間)が、通信遅延時間閾値 α(αはあらかじめ定められた定数である)より大きくなるかを確認し、大きくなる場合にはS2603へ進み、大きくならない場合にはS2601へ進む。
【0142】
S2603では、通信速度推定部2201は通信IF jの通信速度 b
jを通信品質情報に格納された受信スループット値2423に更新し、S2604へ進む。S2604では通信速度推定部2201は、複製データ数計算部304と、送信完了時刻計算部306へb
jを入力し、S2605へ進む。S2605では、通信速度推定部2201は通信IF jの最終通信品質変更時刻t
j_lastを現在時刻に更新し、S2601へ進む。
【0143】
S2606で通信速度推定部2201は、iを1で初期化し、S2607へ進む。
【0144】
S2607では、通信速度推定部2201は(t
i_last - 現在時刻)が通信速度上昇判定周期Th(Thはあらかじめ定められた定数である)より大きいかを確認し、大きい場合にはS2608へ進み、大きくない場合にはS2611へ進む。
【0145】
S2608では、通信速度推定部2201は通信IF iの通信速度 b
iをb
i + βに更新し、S2609へ進む。ここで、βはあらかじめ定められた定数であり、通信速度増加分と呼ぶ。S2609では通信速度推定部2201は、複製データ数計算部304と、送信完了時刻計算部306へb
iを入力し、S2610へ進む。S2610では、通信速度推定部2201はt
i_lastを現在時刻で更新し、S2611へ進む。
【0146】
S2611では、通信速度推定部2201はiが通信経路(通信IF)数と等しいかを確認し、等しい場合にはS2601へ進み、等しくない場合にはS2612へ進む。S2612では、通信速度推定部2201はiに1を加算し、S2607へ進む。
【0147】
以上の処理により、移動通信端末100は、サーバ102から受信した通信品質情報に基づいて、通信遅延時間が一定値以上になった場合に通信速度低下を検知し、低下後の通信速度をサーバ102から通知された通信速度に等しいと推定することができる。また、移動通信端末100は、サーバ102から受信した通信品質情報に基づいて、一定の間、サーバ102から通知された通信遅延時間が閾値以下になった場合に、通信速度が上昇したと推定することができる。
【0148】
実施例3に係る通信システムでは、移動通信端末が自身で通信速度を正確に把握することができない場合においても、低遅延なデータ通信を行うことができる。