以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
<1.第1の実施形態>
[1−1.通信システムの構成]
まず、図1を参照して、本発明の第1の実施形態に係る通信システムの概略構成について説明する。図1に示したように、本発明の第1の実施形態に係る通信システム1は、送信端末100Aから受信端末100Bに対して、ネットワーク10を介して、順序番号を付与したパケットの形式で送信したいデータを送信する。本実施形態においては、パケットを再送する場合を除き、原則として順序番号の昇順でパケットを送信する。
一方、受信端末100Bは、本発明の通信装置の一例であり、送信端末100Aから送信されるパケットを受信すると、順序番号の最初から初めて抜けなく受信した一連のパケットの内の最大の番号や、欠落しているパケットの番号を応答パケットとして送信端末100Aへ送信する。この応答パケットを送信端末100Aが受信することで、送信端末100Aは次に送信するパケットの順序番号を制御する。このような通信制御は、TCP(Transmission Control Protocol)等の通信方式に見られるものである。本実施形態は、このような制御下における主に応答パケットの制御に関わるものである。
パケットが流れるネットワーク10の内部では、経路途中のルータ(図示せず)等がパケットを複数の経路に振り分けることで、経路が分岐され得る。図1に示した分岐はその状態を表したものである。送信端末100A、受信端末100Bは、ネットワーク10の中のパケットが通る経路や分岐の数については把握していない。なお、以下の説明では、ネットワーク10は複数の経路に分岐されているものとして説明するが、本発明は、送信端末100Aと受信端末100Bとの間に分岐が全く無い場合であっても同様に適用できるものである。
以上、図1を参照して、本発明の第1の実施形態に係る通信システムの概略構成について説明した。次に、本発明の第1の実施形態にかかる受信端末100Bの構成について説明する。
[1−2.受信端末の構成]
図2は、本発明の第1の実施形態にかかる受信端末100Bの構成を示す説明図である。以下、図2を用いて本発明の第1の実施形態にかかる受信端末100Bの構成について説明する。
図2に示したように、本発明の第1の実施形態にかかる受信端末100Bは、パケット受信部120と、推定部130と、欠落判定部140と、バッファ150と、データ受信部160と、応答部170と、情報部180と、を含んで構成される。
パケット受信部120は、送信端末100Aから送信されてくる、順序番号が付与されたパケットを受信するものであり、パケット受信部120は受信したパケットを送信されてきた順序通りにバッファ150に渡す。
推定部130は、情報部180が保持している経路の分岐数の推定値と、データ受信部160が受信した最後尾のパケットの順序番号とを取得し、この順序番号と、分岐数の推定値と、パケット受信部120が受信したパケットの並びとから、送信経路途中での分岐数を推定するものである。推定部130が推定した分岐数の推定値は情報部180に送られる。
本実施形態では、送信経路途中での分岐数は以下のように推定する。
パケット受信部120で受信しているパケットは、送信端末100Aが受信端末100Bに対して順序番号の昇順に送信したパケットとする。これは、受信端末100Bからの応答パケットによって既に送信端末100Aが送信した順序番号の小さいパケットを、再度送っていない状態である。このことは、受信端末100Bにおいても、自身の送信する応答パケットによって判断する。
推定部130は、情報部180から分岐数の推定値kを取得するとともに、データ受信部160が受信した最後尾のパケットの順序番号を取得する。データ受信部160は、順序番号がn番目(n=0,1,2,・・・)までのパケットを全て受け取っているとすると、n=0の場合は、データ受信部160は未だパケットを受け取っていない。その後、順序番号がn番目より大きいm番目のパケットをパケット受信部120が受信したとする。m−n≦kの場合は、推定部130は、kを分岐数の推定値とする。一方、m−n>kである場合、推定部130は、先のm番目のパケットを含め、以降受信するn番目よりも順序番号が大きいパケットから選んだパケットを、パケット受信部120が受信した順に並べる。そして推定部130は、このパケット列について、順序番号が降順に並ぶ個数を数え上げる。ただし順序番号は連続していなくても良い。またパケットが1つの場合にはその個数を1とする。例えば、順序番号が13、11と並んでいれば、順序番号が降順に並ぶ個数は2であり、順序番号が13しかない場合には、順序番号が降順に並ぶ個数は1となる。
m−n>kである場合、推定部130は、この個数が最大となるようにパケット列を選び、この列の順序番号が降順に並ぶ個数を分岐数の推定値とする。これは、通常であれば順序番号の昇順でパケットが到着するが、ネットワーク10で分岐があることで、パケットの到達順序が逆になることがある。従って、本実施形態では順序番号が降順の並ぶ個数を分岐の数と推定する。
数え上げる対象とするパケットは、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部120が受信するまでの間に、パケット受信部120が受信した順序番号が最大の番号と、n+1番目のとの間に入る全てのパケットである(順序番号がn+1番目のパケットも含まれる)。例えば、n=10、m=13の場合に、図7に示したような順序で受信端末100Bがパケットを受信したとする。この場合は、パケット受信部120が、n+1=11番からm=13番までの全てのパケット、すなわち11番と12番のパケットを受信するまでに受信したパケットの最大の番号は16番である。このときに、11番から16番の間に入る全てのパケット、すなわち11、12、13、14、15、16番が数え上げの対象となる。そして、順序番号が降順に並ぶ個数の最大値は、16、15、12または16、15、14の場合の「3」となる。
図7に示したようにパケットが受信端末100Bに到達した場合、例えば図10に示したような経路で送信端末100Aから受信端末100Bに転送される。この場合の分岐数の推定値は「3」である。
欠落判定部140は、パケット受信部120で受信したパケットの並びと、情報部180が保持している、データ受信部160が受信した最後尾の順序番号と、情報部180が保持している、分岐数の推定値kとから、パケットが未到着なのか、経路途中で欠落しているのかを判定するものである。欠落判定部140は、パケットが欠落していると判定すると、応答部170に対して欠落しているパケットの順序番号を通知する。
欠落判定部140によるパケットの欠落判定方法について以下で説明する。
情報部180が保持している、データ受信部160が受信した最後尾の順序番号がn番目(n=0,1,2,・・・)であったとする。次に欠落判定部140は、パケット受信部120で、順序番号がn+1番目より大きいm番目のパケットを受信した場合に、そのパケットを含め、以降受信するn+1番目よりも順序番号が大きいパケットから選んだパケットを、パケット受信部120が受信した順に並べる。そして、このパケット列について、順序番号が降順に並ぶ個数を数える。ただし、順序番号は連続していなくても良い。この個数がk個以上になるパケット列があれば、欠落判定部140は、n+1番目から、これまで受信したn+1番目より大きい番号の中で最小の順序番号の1つ手前までのパケットが欠落していると判定する。
バッファ150は、パケット受信部120からパケットを受け取るものであり、バッファ150が受け取ったパケットは、順序番号の昇順に、重複無くデータ受信部160へ送られる。また、データ受信部160に送られた順序番号の最後尾の番号はバッファ150から情報部180に送られる。パケット受信部120から受け取ったパケットがバッファ150に存在しているパケットと重複したり、既にデータ受信部160に送ったパケットと同じものであったりした場合には、そのパケットはバッファ150から破棄される。
データ受信部160は、バッファ150から渡されたパケットを受信するものである。
応答部170は、送信端末100Aがパケットを送る数や番号を制御するための応答パケットを生成して送信するものである。応答パケットの送信を行うために、応答部170は情報部180から、データ受信部160が受信した最後尾の順序番号nを取得する。また応答部170は、欠落判定部140から欠落しているパケットの情報も取得する。
応答部170が生成する応答パケットの内容は、(1)どの順序番号のパケットまで正しい順序で受け取ったかを知らせるものであってもよく、(2)特定の順序番号のパケットの再送を要求するものであってもよい。いずれの内容のパケットであっても、応答パケットを受信した送信端末100Aは、どのパケットが受信端末100Bに送られていないのかが分かり、送信端末100Aは受信端末100Bに届けるべきパケットを再送することが出来る。
なお、受信端末100Bからの応答パケットは、送信端末100Aと受信端末100Bとの間で予め定められた制御のタイミングで、上記(1)または(2)の少なくともいずれかの内容が記述されて、受信端末100Bから送信端末100Aへ送信される。
応答部170は、応答パケットを送るタイミングになった場合に、バッファ150にパケットが無いときは、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信する。一方、応答部170は、応答パケットを送るタイミングになった場合に、バッファ150にパケットがあるとき、すなわち順序番号どおりにパケットが届いておらず、抜けている順序番号のパケットがあるのでバッファ150にパケットがあるときは、上記(1)または(2)の内容を送信する場合であっても、欠落判定部140から欠落している順序番号を受け取るまで応答パケットの送信を控える。ただし、(2)の場合には、その抜けているパケットが無いものとして、すなわちその抜けているパケットの再送を要求しない内容で、応答部170は応答パケットを送信しても良い。その後、欠落判定部140からパケット欠落の通知があれば、応答部170はそのパケットの欠落を送信端末100Aに通知する。
情報部180は、推定部130が推定した経路の分岐数の推定値と、バッファ150がデータ受信部160に送ったパケットのうち最後尾の順序番号とを保存する。情報部180が保存する、経路の分岐数の推定値の初期値は1である。また、最後尾の順序番号は、この番号以前の順序番号のパケットを、データ受信部160が全て受信していることを保証するものである。
以上、図2を用いて本発明の第1の実施形態にかかる受信端末100Bの構成について説明した。次に、本発明の第1の実施形態にかかる受信端末100Bの動作について説明する。
[1−3.受信端末の動作]
上述したように、パケット受信部120は、送信端末100Aから送信された、順序番号が付与されたパケットを受信し、送られてきた順序通りにバッファ150に受信したパケットを渡す。
図3は、本発明の第1の実施形態にかかる受信端末100Bに含まれる推定部130の動作について示す流れ図である。以下、図3を用いて推定部130の動作について詳細に説明する。
前提として、パケット受信部120で受信しているパケットは、送信端末100Aが受信端末100Bに対して順序番号の昇順に送信したパケットであるとする。推定部130は、情報部180から、分岐数の推定値kを取得するとともに、データ受信部160が受信した最後尾のパケットの順序番号nを取得する(ステップS301)。
続いて、推定部130は、パケット受信部120が新たに受信したパケットの順序番号mを取得する(ステップS302)。推定部130は、m−n≦kとなるかどうかを判定し(ステップS303)、m−n≦kであれば後段のステップS308へ進むが、k<m−nであれば、推定部130は、パケット受信部120が順序番号mのパケットの次に受信したパケットの順序番号を取得する(ステップS304)。
続いて、推定部130は、順序番号mのパケットを含め、これまで取得した、順序番号nよりも順序番号が大きいパケットから選んだパケットを、パケット受信部120が受信した順に整列し、このパケット列について、順序番号が降順に並ぶ個数dを計数する(ステップS305)。数え上げの対象とするパケットは、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部120が受信するまでの間に、パケット受信部120が受信した順序番号が最大のパケットと、順序番号がn+1番のパケットとの間に入る全てのパケットである。推定部130は、この個数が最大となるように選んだパケット列について、順序番号が降順に並ぶ個数dを分岐数の推定値の候補とする。
推定部130は、上記ステップS305で数え上げた、順序番号が降順に並ぶ個数が最大となるように選んだパケット列について、順序番号が降順に並ぶ個数dを分岐数の推定値kの候補とする(ステップS306)。そして推定部130は、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部120が受信するまでの間に、パケット受信部120が受信した順序番号が最大のパケットと、順序番号がn+1番のパケットとの間に入る全てのパケットを受信したかどうかを判断する(ステップS307)。全てのパケットを受信していれば、推定部130は上記ステップS306で候補とした分岐数の推定値kを情報部180に保存する(ステップS308)。一方、まだ全てのパケットを受信していなければ、上記ステップS304に戻って、推定部130は、さらに次に受信したパケットの順序番号を取得する処理を実行する。
このように、推定部130はネットワーク10における分岐数を推定することができる。受信端末100Bは、この推定部130が推定した分岐数を用いて、パケットが欠落しているかどうかの判定を行うことができる。
以上、図3を用いて推定部130の動作について詳細に説明した。次に、本発明の第1の実施形態にかかる受信端末100Bに含まれる欠落判定部140の動作について説明する。
図4は、本発明の第1の実施形態にかかる受信端末100Bに含まれる欠落判定部140の動作を示す流れ図である。以下、図4を用いて欠落判定部140の動作について詳細に説明する。
まず、欠落判定部140はパケットの欠落判定処理に際し、情報部180から、分岐数の推定値kと、データ受信部160が受信した最後尾のパケットの順序番号nとを取得する(ステップS401)。次に、欠落判定部140はパケット受信部120が新たに受信したパケットの順序番号mを受け取り(ステップS402)、n+1<mとなっているかどうかを判定する(ステップS403)。
上記ステップS403の判定の結果、n+1≧mである場合には、欠落判定部140は、受信パケットに欠落は発生していないと判断し、処理を終了する。一方、上記ステップS403の判定の結果、n+1<mである場合には、続いて欠落判定部140はk=1であるかどうかを判定する(ステップS404)。
上記ステップS404の判定の結果、情報部180が保持している分岐数kの値がk=1である場合には、受信パケットに欠落が発生していると判断し、欠落判定部140は応答部170へパケットの欠落を通知する(ステップS405)。このステップS405では、欠落判定部140は、n+1番目から、これまで受信したn+1番より大きい番号の中で最小の順序番号の一つ手前までの順序番号のパケットが欠落していると判定し、応答部170へパケットの欠落を通知する。
一方、上記ステップS404の判定の結果、情報部180が保持している分岐数kの値がk=1でない場合には、次に、欠落判定部140はパケット受信部120が次に受信したパケットの順序番号を取得する(ステップS406)。
上記ステップS406でパケット受信部120が次に受信したパケットの順序番号を取得すると、続いて欠落判定部140は、上記ステップS406で取得した順序番号がn+1であるかどうかを判定する(ステップS407)。
上記ステップS407の判定の結果、上記ステップS406で取得した順序番号がn+1であるならば、欠落判定部140は処理を終了する。一方、上記ステップS407の判定の結果、上記ステップS406で取得した順序番号がn+1で無いならば、続いて欠落判定部140は、順序番号mのパケットを含め、これまでパケット受信部120から受け取ったn+1より大きい順序番号から選んだ順序番号を、パケット受信部120が受信した順に並べた列を対象に、ある番号から始めて順序番号が降順に並ぶ個数dを数え上げる(ステップS408)。
そして欠落判定部140は、上記ステップS408で数え上げた個数dについて、k≦dを満たす列が存在するかどうかを判定する(ステップS409)。k≦dを満たす列が1つでも存在すれば、受信パケットに欠落が発生していると判断し、欠落判定部140は応答部170へパケットの欠落を通知する(ステップS405)。一方、どの列のdについてもd<kであるならば、上記ステップS406に戻り、欠落判定部140はパケット受信部120が次に受信したパケットの順序番号を取得する。
以上、図4を用いて欠落判定部140の動作について詳細に説明した。次に、本発明の第1の実施形態にかかる受信端末100Bに含まれるバッファ150の動作について説明する。
図5は、本発明の第1の実施形態にかかる受信端末100Bに含まれるバッファ150の動作を説明する流れ図である。以下、図5を用いてバッファ150の動作について説明する。
まず、バッファ150はパケット受信部120からパケットを受け取ると(ステップS501)、受信したパケットに付与されている順序番号の小さい順に、受け取ったパケットをデータ受信部160へ渡す(ステップS502)。バッファ150は、欠落している順序番号のパケットがあれば、そのパケットがパケット受信部120から送られて来るまで待機する。また、既にデータ受信部160へ渡したものと重複しているパケットがあれば、バッファ150はそのパケットを破棄する。
そして、バッファ150は、データ受信部160へ渡した最後のパケットの順序番号を情報部180に渡す。
以上、図5を用いてバッファ150の動作について説明した。次に、本発明の第1の実施形態にかかる受信端末100Bに含まれる応答部170の動作について説明する。
図6は、本発明の第1の実施形態にかかる応答部170の動作について示す流れ図である。以下、図6を用いて第1の実施形態にかかる応答部170の動作について説明する。
応答部170は、データ受信部160が受け取った最後のパケットの順序番号nを情報部180から取得する(ステップS601)。次に、応答部170はバッファ150にパケットが存在しているかどうかを確認する(ステップS602)。
上記ステップS602の確認の結果、バッファ150にパケットが無いか、または順序番号がn+1であるパケットがあれば、順序番号通りにパケットが受信出来ているので、応答部170は、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信し、処理を終了する。
一方、上記ステップS602の確認の結果、バッファ150に順序番号がn+2以降のパケットが存在していれば、応答部170は欠落判定部140からの順序番号n+1のパケットの欠落の通知を受けているかどうかを確認する(ステップS603)。欠落判定部140からの順序番号n+1のパケットの欠落の通知を受けていなければ、上記ステップS602に戻り、応答部170は応答パケットの送信を控える。一方、欠落判定部140からの順序番号n+1のパケットの欠落の通知を受けていれば、応答部170は、送信端末100Aに対して、順序番号n+1のパケットが欠落していることを応答パケットにより通知する(ステップS604)。この通知は、予め定められた上記(1)または(2)の少なくともいずれかの内容によって行われる。
以上、図6を用いて第1の実施形態にかかる応答部170の動作について説明した。このように、応答部170は欠落判定部140からの順序番号n+1のパケットの欠落の通知を受けるまで応答パケットの送信を控えることで、ネットワーク10への無駄なトラフィックの発生を抑えることができる。
ここで、推定部130、欠落判定部140、バッファ150、応答部170の具体的な動作例を説明する。送信端末100Aは、受信端末100Bに対して、1、2、3、・・・と続く順序番号を付与したデータパケットを番号の昇順に送信している。以降、パケットの番号についての記述がある場合には、特に断らない限りこの順序番号を指す。受信端末100Bは、送信端末100Aが送信したデータパケットを受け取り、1パケットを受け取る度に1応答パケットを送信端末100Aに送信しているとする。
送信端末100Aから送信されるデータパケット、受信端末100Bから送信される応答パケット共に、経路途中のネットワーク10の中で、ルータ(図示せず)等によってパケットが複数の経路に分配されている可能性があるが、送信端末100A、受信端末100Bとも、いくつの経路に分配されているかは分からない。
ここで、受信端末100Bが、10番まで順序通りにデータパケットを受信しており、データ受信部160が受信したパケットを全て受け取っているとする。これ以降、送信端末100Aから受信するパケットについての受信端末100Bの動作を、図面を参照しながら具体的に説明する。このとき、情報部180にはデータ受信部160が受信した最後の順序番号10番と、経路の分岐数の推定値k=1とが保存されている。
このとき、パケット受信部120が13番のパケットを受信したとする。パケット受信部120が受信した13番のパケットはバッファ150に渡される。そして、その13番のパケットも含め、図7に示した順序でパケット受信部120がパケットを受信した場合に、推定部130の動作を図3に示した流れ図に沿って説明する。
まず、推定部130は、情報部180から、分岐数の推定値k=1を取得するとともに、データ受信部160が受信した最後尾のパケットの順序番号n=10を取得する(ステップS301)。続いて、推定部130は、パケット受信部120が新たに受信したパケットの順序番号m=13を取得する(ステップS302)。推定部130は、m−n≦kとなるかどうかを判定し(ステップS303)、k<m−nであるので、推定部130は、パケット受信部120が順序番号m=13のパケットの次に受信したパケットの順序番号(11)を取得する(ステップS304)。
11番のパケットを受信した時点で、降順に並ぶ個数は13番、11番であるから2つである。よって、順序番号が降順に並ぶ個数dはd=2である(ステップS305)。そして、推定部130は、順序番号が降順に並ぶ個数d=2を分岐数の推定値kの候補とする(ステップS306)。
11番のパケットを受信した時点での最大の順序番号は13である。そしてパケット受信部120は12番のパケットを受信していないので、推定部130は、パケット受信部120が受信した順序番号が最大のパケット(13番のパケット)と、順序番号がn+1番のパケット(11番の)との間に入る全てのパケットを受信したかどうかを判断し(ステップS307)、全てのパケットを受信していないので、ステップS304に戻って、推定部130は、さらに次に受信したパケットの順序番号を取得する処理を実行する。
その後、パケット受信部120が14番のパケットを受信すると、14番のパケットを受信した時点で、降順に並ぶ個数は16番、15番、14番であるから3つである。従って、順序番号が降順に並ぶ個数dはd=3である(ステップS305)。そして、推定部130は、順序番号が降順に並ぶ個数d=3を分岐数の推定値kの候補とする(ステップS306)。
14番のパケットを受信した時点での最大の順序番号は16である。推定部130は、パケット受信部120が受信した順序番号が最大のパケット(16番のパケット)と、順序番号がn+1番のパケット(11番の)との間に入る全てのパケットを受信したかどうかを判断し(ステップS307)、全てのパケットを受信しているので、推定部130は上記ステップS306で候補とした分岐数の推定値k=3を情報部180に保存する(ステップS308)。
推定部130が分岐数の推定値を3と推定するまでは、分岐数の推定値は1である。分岐数の推定値は1である状態で、図8に示した様に15番のパケットまでを受信した場合のバッファ150の動作を図5に示した流れ図に沿って説明する。
バッファ150はパケット受信部120からパケットを受け取ると(ステップS501)、受信したパケットに付与されている順序番号の小さい順に、すなわち11番のパケットをデータ受信部160へ渡す(ステップS502)とともに、バッファ150は、データ受信部160へ渡した最後のパケットの順序番号(11)を情報部180に渡す。このとき、13番、16番、15番のパケットはバッファ150に保持されたままの状態となっている。
また図8に示した様に13番のパケットを受信し、13番のパケットがバッファ150に格納された場合の欠落判定部140及び応答部170の動作を図4及び図6に示した流れ図に沿って説明する。
欠落判定部140はパケットの欠落判定処理に際し、情報部180から、分岐数の推定値k=1と、データ受信部160が受信した最後尾のパケットの順序番号n=10とを取得する(ステップS401)。次に、欠落判定部140はパケット受信部120が新たに受信したパケットの順序番号m=13を受け取り(ステップS402)、n+1<mであり、かつk=1であるから、受信パケットに欠落が発生していると判断し、欠落判定部140は応答部170へ11番及び12番のパケットの欠落を通知する(ステップS405)。
受信端末100Bが13番のパケットを受信した場合に、応答部170は情報部180からデータ受信部160が受け取った最後のパケットの順序番号n=10を取得する(ステップS601)。次に、応答部170はバッファ150にパケットが存在しているかどうかを確認し(ステップS602)、バッファ150には13番のパケットが存在するので、応答部170は欠落判定部140からの順序番号11番及び12番のパケットの欠落の通知を受けているかどうかを確認する(ステップS603)。欠落判定部140から順序番号11番及び12番のパケットの欠落の通知を受けていれば、応答部170は、送信端末100Aに対して、順序番号11番及び12番のパケットが欠落していることを応答パケットにより通知する(ステップS604)。
一方、推定部130が分岐数の推定値を3と推定した状態で、図9に示した様な順番でパケットまでを受信した場合の欠落判定部140、バッファ150及び応答部170の動作を図4、図5及び図6に示した流れ図に沿って説明する。なお、図9に示した様な順番でパケットまでを受信した場合において、情報部180には、データ受信部160が受信した最後尾の順序番号20番と、経路の分岐数の推定値k=3とが保存されているものとする。
欠落判定部140はパケットの欠落判定処理に際し、情報部180から、分岐数の推定値k=3と、データ受信部160が受信した最後尾のパケットの順序番号n=20とを取得する(ステップS401)。次に、欠落判定部140はパケット受信部120が新たに受信したパケットの順序番号m=23を受け取り(ステップS402)、n+1<mであり、かつk=1でないから、次に、欠落判定部140はパケット受信部120が次に受信したパケットの順序番号(26)を取得する(ステップS406)。
ステップS406でパケット受信部120が次に受信したパケットの順序番号を取得すると、続いて欠落判定部140は、上記ステップS406で取得した順序番号がn+1(21)であるかどうかを判定する(ステップS407)。ステップS406で取得した順序番号はn+1(21)では無いので、続いて欠落判定部140は、順序番号m=23のパケットを含め、これまでパケット受信部120から受け取ったn+1(21)より大きい順序番号から選んだ順序番号を、パケット受信部120が受信した順に並べた列を対象に、ある番号から始めて順序番号が降順に並ぶ個数dを数え上げる(ステップS408)。個数dは1であり、d<kであるので、上記ステップS406に戻り、欠落判定部140はパケット受信部120が次に受信したパケットの順序番号(25)を取得する。
ステップS406で取得した順序番号はn+1(21)では無いので、再び順序番号が降順に並ぶ個数dを数え上げる。d=2であり、d<kであるので、再び上記ステップS406に戻り、パケット受信部120が次に受信したパケットの順序番号(21)を取得する。この順序番号はn+1に等しいので、欠落判定部140は処理を終了する。
バッファ150は、パケット受信部120から21番のパケットを受け取ると(ステップS501)、受け取った21番のパケットをデータ受信部160へ渡す(ステップS502)とともに、バッファ150は、データ受信部160へ渡した最後のパケットの順序番号(21)を情報部180に渡す。このとき、23番、26番、25番のパケットはバッファ150に保持されたままの状態となっている。
また、応答部170はデータ受信部160が受け取った最後のパケットの順序番号n=20を情報部180から取得する(ステップS601)。次に、応答部170はバッファ150にパケットが存在しているかどうかを確認し(ステップS602)、バッファ150に存在するのはn+1(21)番以降のパケットしか無いので、応答部170は欠落判定部140からの順序番号n+1(21)番のパケットの欠落の通知を受けているかどうかを確認する(ステップS603)。欠落判定部140からの順序番号n+1(21)番のパケットの欠落の通知を受けていなければ、上記ステップS602に戻り、応答部170は応答パケットの送信を控える。
やがて、バッファ150に21番のパケットが到達すると、順序番号通りにパケットが受信出来たので、応答部170は、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信端末100Aへ送信し、処理を終了する。
以上、推定部130、欠落判定部140、バッファ150、応答部170の具体的な動作例について説明した。
以上説明したように本発明の第1の実施形態にかかる受信端末100Bによれば、パケット受信部120で受信したパケットの順序番号から、推定部130によってネットワーク10の内部の経路の分岐数を推定し、番号通りにパケットを受信しなかった場合でも、この分岐数の情報を用いて、応答部170からの応答パケットの送信を控える。これにより受信端末100Bは、通信経路途中の分岐によってパケットの到着順序が逆転している場合であっても、経路途中のパケットロスであると誤判定することが無くなる。
従来技術では、経路途中の分岐によって到着順序が保証されないので、受信端末で順序番号の大きいパケットが先に届くと、それより順序番号の小さいパケットは自動的にパケットロスであると判定され、応答パケットによって送信端末からの再送が発生してしまう。例えば、上述したように、従来技術では図7のようにパケットが到着した場合、13番のパケットが到着した時点で11番及び12番のパケットが再送の対象となる。これに対して本発明の第1の実施形態にかかる受信端末100Bでは、後から到着するパケットからもパケットの未着を判断するので、13番のパケットが到着した時点で即座に11番及び12番のパケットを再送の対象とすることはしない。従って、本発明の第1の実施形態によれば、番号通りにパケットが到着しなかった場合でも、パケットの到着時点でパケットの未着を判断するのではなく、後から到着するパケットからもパケットの未着を判断するので、ネットワークに無駄なトラフィックが流れることを防ぐことができる。
<2.第2の実施形態>
[2−1.通信システムの構成]
次に、図11を参照して、本発明の第2の実施形態に係る通信システムの概略構成について説明する。図11に示したように、本発明の第2の実施形態に係る通信システム2は、送信端末200Aから受信端末200Bに対して、ネットワーク10を介して、順序番号を付与したパケットの形式で送信したいデータを送信する。本実施形態においては、パケットを再送する場合を除き、原則として順序番号の昇順でパケットを送信する。
そして、送信端末200Aは、複数の(例えば2つの)インタフェースIF1、IF2を有しており、このインタフェースIF1、IF2に送信するパケットを振り分けている。パケットには複数のインタフェースを区別する印(IF番号)が付与されており、またどのインタフェースにどのパケットを振り分けるかについての決まりは特に定められていない。
一方、受信端末200Bは、送信端末200Aから送信されて来るパケットを受け取ると、順序番号の最初から始めて抜けなく受信した一連のパケットの内の最大の番号や、または欠落しているパケットの番号を応答パケットとして送信端末200Aに送信する。この応答パケットを送信端末200Aが受信することで、送信端末200Aは次に送信すべきパケットを制御することができる。このような通信制御は、TCP等の通信方式に見られるものである。本実施形態も同様に、このような制御下における主に応答パケットの制御に関わるものである。
パケットが流れるネットワーク10の内部では、経路途中のルータ(図示せず)等がパケットを複数の経路に振り分けることで、経路が分岐され得る。図11に示した分岐はその状態を表したものである。送信端末200A、受信端末200Bは、ネットワーク10の中のパケットが通る経路や分岐の数については把握していない。なお、以下の説明では、ネットワーク10は複数の経路に分岐されているものとして説明するが、本発明は、送信端末100Aと受信端末100Bとの間に分岐が全く無い場合であっても同様に適用できるものである。
以上、図11を参照して、本発明の第2の実施形態に係る通信システムの概略構成について説明した。次に、本発明の第2の実施形態にかかる受信端末200Bの構成について説明する。
[2−2.受信端末の構成]
図12は、本発明の第2の実施形態にかかる受信端末200Bの構成を示す説明図である。以下、図12を用いて本発明の第2の実施形態にかかる受信端末200Bの構成について説明する。
図12に示したように、本発明の第2の実施形態にかかる受信端末200Bは、パケット受信部220と、推定部230と、欠落判定部240と、バッファ250と、データ受信部260と、応答部270と、情報部280と、を含んで構成される。
パケット受信部220は、送信端末200Aから送信されてくる、順序番号及びIF番号が付与されたパケットを受信するものであり、パケット受信部120は受信したパケットを送信されてきた順序通りにバッファ150に渡す。本実施形態では、IF番号1、2のいずれかがパケットに付与されているものとする。
送信端末200Aが受信端末200Bにデータを送信するときに使用するインタフェースの数を受信した場合には、各インタフェースの分岐数の推定値を、初期値を1として情報部280に渡す。インタフェースの数は、インタフェースの識別子など、送信端末200Aが送信するパケットのインタフェースの数が判別可能なものであればどのようなものであっても構わない。また、インタフェースの数は、送信端末200Aがパケットに付与した印の種類から判断しても良い。本実施形態では、受信端末200Bは送信端末200Aからインタフェース数を受け取ることにする。
推定部230は、情報部280が保持しているインタフェースごとの経路の分岐数の推定値と、データ受信部260が受信した最後尾のパケットの順序番号とを取得し、この順序番号と、インタフェースごとの分岐数の推定値と、パケット受信部220が受信したパケットの並びとから、送信経路途中での分岐数を推定するものである。推定部230が推定した分岐数の推定値は情報部280に送られる。
本実施形態では、送信経路途中での分岐数は以下のように推定する。
パケット受信部220で受信しているパケットは、送信端末200Aが受信端末200Bに対して順序番号の昇順に送信したパケットとする。これは、受信端末200Bからの応答パケットによって既に送信端末200Aが送信した順序番号の小さいパケットを、再度送っていない状態である。このことは、受信端末200Bにおいても、自身の送信する応答パケットによって判断する。
推定部230は、情報部280から分岐数の推定値kiを取得するとともに、データ受信部160が受信した最後尾のパケットの順序番号を取得する。なお、添字iはインタフェースを区別する識別子であり、以下においても添字は同じ意味で用いる。データ受信部260は、順序番号がn番目(n=0,1,2,・・・)までのパケットを全て受け取っているとすると、n=0の場合は、データ受信部260は未だパケットを受け取っていない。その後、順序番号がn番目より大きいm番目のパケットをパケット受信部220が受信したとする。また、これは送信端末200AのIFiからのパケットであった。m−n≦kiの場合は、推定部230は、kiをそのインタフェースIFiにおける分岐数の推定値とする。一方、m−n>kiである場合、推定部230は、先のm番目のパケットを含め、以降受信するn番目よりも順序番号が大きいパケットからインタフェースごとに選んだパケットを、パケット受信部220が受信した順に並べる。そして推定部230は、このパケット列について、順序番号が降順に並ぶ個数を数え上げる。ただし順序番号は連続していなくても良い。またパケットが1つの場合にはその個数を1とする。例えば、順序番号が13、11と並んでいれば、順序番号が降順に並ぶ個数は2であり、順序番号が13しかない場合には、順序番号が降順に並ぶ個数は1となる。
m−n>kである場合、推定部230は、インタフェースごとに、この個数が最大となるようにパケット列を選び、この列の順序番号が降順に並ぶ個数を、そのインタフェースの分岐数の推定値とする。これは、通常であれば順序番号の昇順でパケットが到着するが、ネットワーク10で分岐があることで、パケットの到達順序が逆になることがある。従って、本実施形態では順序番号が降順の並ぶ個数を分岐の数と推定する。
数え上げる対象とするパケットは、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部220が受信するまでの間に、パケット受信部220が受信した順序番号が最大の番号と、n+1番目のとの間に入る全てのパケットである(順序番号がn+1番目のパケットも含まれる)。例えば、n=10、m=13の場合に、図17に示したような順序で受信端末200Bがパケットを受信したとする。この場合は、パケット受信部220が、n+1=11番からm=13番までの全てのパケット、すなわち11番と12番のパケットを受信するまでに受信したパケットの最大の番号は16番である。このときに、11番から16番の間に入る全てのパケット、すなわち11、12、13、14、15、16番が数え上げの対象となる。そして、順序番号が降順に並ぶ個数の最大値は、IF1が16、15、14の場合の「3」であり、IF2が12、11の場合の「2」となる。従って、分岐数の推定値はk1=3であり、k2=2である。
図17に示したようにパケットが受信端末200Bに到達した場合、例えば図19に示したような経路で送信端末200Aから受信端末200Bに転送される。
欠落判定部240は、パケット受信部220で受信したパケットの並びと、情報部280が保持している、データ受信部260が受信した最後尾の順序番号と、情報部280が保持している、インタフェースごとの分岐数の推定値kiとから、パケットが未到着なのか、経路途中で欠落しているのかを判定するものである。欠落判定部240は、パケットが欠落していると判定すると、応答部270に対して欠落しているパケットの順序番号を通知する。
欠落判定部240によるパケットの欠落判定方法について以下で説明する。
情報部280が保持している、データ受信部260が受信した最後尾の順序番号がn番目(n=0,1,2,・・・)であったとする。次に欠落判定部240は、パケット受信部220で、順序番号がn+1番目より大きいm番目のパケットを受信した場合に、そのパケットを含め、以降受信するn+1番目よりも順序番号が大きいパケットから選んだパケットを、パケット受信部220が受信した順に並べる。そして、このパケット列から、その並びのままインタフェースごとにパケットを選び出し、そのインタフェースごとに選び出したパケット列について、順序番号が降順に並ぶ個数をインタフェースごとに数える。ただし、順序番号は連続していなくても良い。また、パケットが1つの場合は、その個数を1とする。
そして欠落判定部240は、インタフェースごとに、順序番号が降順に並ぶ個数が分岐数の推定値ki個以上になるパケット列がそのインタフェースのパケットにあるかどうかを調べる。欠落判定部140は、全てのインタフェースについてこの条件を満たしていれば、n+1番目から、これまで受信したn+1番目より大きい番号の中で最小の順序番号の1つ手前までのパケットが欠落していると判定する。
バッファ250は、パケット受信部220からパケットを受け取るものであり、バッファ250が受け取ったパケットは、順序番号の昇順に、重複無くデータ受信部260へ送られる。また、データ受信部260に送られた順序番号の最後尾の番号はバッファ250から情報部280に送られる。パケット受信部220から受け取ったパケットがバッファ250に存在しているパケットと重複したり、既にデータ受信部260に送ったパケットと同じものであったりした場合には、そのパケットはバッファ250から破棄される。
データ受信部260は、バッファ250から渡されたパケットを受信するものである。
応答部270は、送信端末200Aがパケットを送る数や番号を制御するための応答パケットを生成して送信するものである。応答パケットの送信を行うために、応答部270は情報部280から、データ受信部260が受信した最後尾の順序番号nを取得する。また応答部270は、欠落判定部240から欠落しているパケットの情報も取得する。
応答部270は、上述の本発明の第1の実施形態における応答部170と同様の機能を有する。すなわち、応答パケットを送るタイミングになった場合に、バッファ250にパケットが無いときは、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信する。一方、応答部270は、応答パケットを送るタイミングになった場合に、バッファ250にパケットがあるとき、すなわち順序番号どおりにパケットが届いておらず、抜けている順序番号のパケットがあるのでバッファ250にパケットがあるときは、上記(1)または(2)の内容を送信する場合であっても、欠落判定部140から欠落している順序番号を受け取るまで応答パケットの送信を控える。ただし、上記(2)の場合には、その抜けているパケットが無いものとして、すなわちその抜けているパケットの再送を要求しない内容で、応答部270は応答パケットを送信しても良い。
情報部280は、推定部230が推定した、送信端末200Aのパケット送信に使用するインタフェースごとの経路の分岐数の推定値kiと、バッファ250がデータ受信部260に送ったパケットのうち最後尾の順序番号とを保存する。情報部280が保存する、経路の分岐数の推定値kiの初期値は1である。また、最後尾の順序番号は、この番号以前の順序番号のパケットを、データ受信部260が全て受信していることを保証するものである。
以上、図12を用いて本発明の第2の実施形態にかかる受信端末200Bの構成について説明した。次に、本発明の第2の実施形態にかかる受信端末200Bの動作について説明する。
[2−3.受信端末の動作]
上述したように、パケット受信部220は、送信端末200Aから送信された、順序番号及びIF番号が付与されたパケットを受信し、送られてきた順序通りにバッファ250に受信したパケットを渡す。また、送信端末200Aが受信端末200Bへデータを送信するときに使用するインタフェースの数を受信端末200Bが受信すると、各インタフェースの分岐数の推定値kiの初期値を1として情報部280に渡す。
図13は、本発明の第2の実施形態にかかる受信端末200Bに含まれる推定部230の動作について示す流れ図である。以下、図13を用いて推定部230の動作について詳細に説明する。
前提として、パケット受信部220で受信しているパケットは、送信端末200Aが受信端末200Bに対して順序番号の昇順に送信したパケットであるとする。推定部230は、情報部280から、各インタフェースの分岐数の推定値kiを取得するとともに、データ受信部260が受信した最後尾のパケットの順序番号nを取得する(ステップS1301)。
続いて、推定部230は、パケット受信部220が新たに受信したパケットの順序番号m及びそのパケットのIF番号iを取得する(ステップS1302)。推定部230は、m−n≦kiとなるかどうかを判定し(ステップS1303)、m−n≦kiであれば後段のステップS1308へ進むが、ki<m−nであれば、推定部230は、パケット受信部220が順序番号mのパケットの次に受信したパケットの順序番号及びそのパケットのIF番号iを取得する(ステップS1304)。
続いて、推定部230は、順序番号mのパケットを含め、これまで取得した、順序番号nよりも順序番号が大きいパケットから選んだパケットを、パケット受信部220が受信した順に整列し、このパケット列から、その並びのままインタフェースごとにパケットを選び出す。そして、そのインタフェースごとに選び出したパケット列について、インタフェースごとに順序番号が降順に並ぶ個数diを数え上げる(ステップS1305)。ただし、順序番号は連続していなくてもよく、またパケットが1つの場合はその個数を1としてカウントする。数え上げの対象とするパケットは、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部220が受信するまでの間に、パケット受信部220が受信した順序番号が最大のパケットと、順序番号がn+1番のパケットとの間に入る全てのパケットである。推定部230は、インタフェースごとにこの個数が最大となるように選んだパケット列について、順序番号が降順に並ぶ個数diを、インタフェースIFiの分岐数の推定値の候補とする。
推定部230は、上記ステップS1305で数え上げた、順序番号が降順に並ぶ個数が最大となるように選んだパケット列について、順序番号が降順に並ぶ個数diが分岐数の推定値kiより大きければ、順序番号が降順に並ぶ個数diを分岐数の推定値kiの候補とする(ステップS1306)。そして推定部230は、順序番号がn+1番目からm番目までの全てのパケットをパケット受信部120が受信するまでの間に、パケット受信部120が受信した順序番号が最大のパケットと、順序番号がn+1番のパケットとの間に入る全てのパケットを受信したかどうかを判断する(ステップS1307)。全てのパケットを受信していれば、推定部230は上記ステップS1306で候補とした分岐数の推定値kiを情報部280に保存する(ステップS1308)。一方、まだ全てのパケットを受信していなければ、上記ステップS1304に戻って、推定部230は、さらに次に受信したパケットの順序番号を取得する処理を実行する。
このように、推定部230はネットワーク10におけるインタフェースごとの分岐数を推定することができる。受信端末200Bは、この推定部230が推定した分岐数を用いて、パケットが欠落しているかどうかの判定を行うことができる。
以上、図13を用いて推定部230の動作について詳細に説明した。次に、本発明の第2の実施形態にかかる受信端末200Bに含まれる欠落判定部240の動作について説明する。
図14は、本発明の第2の実施形態にかかる受信端末200Bに含まれる欠落判定部240の動作を示す流れ図である。以下、図14を用いて欠落判定部240の動作について詳細に説明する。
まず、欠落判定部240はパケットの欠落判定処理に際し、情報部280から、インタフェースごとの分岐数の推定値kiと、データ受信部260が受信した最後尾のパケットの順序番号nとを取得する(ステップS1401)。次に、欠落判定部240はパケット受信部220が新たに受信したパケットの順序番号m及びそのパケットのIF番号iを受け取り(ステップS1402)、n+1<mとなっているかどうかを判定する(ステップS1403)。
上記ステップS1403の判定の結果、n+1≧mである場合には、欠落判定部240は、受信パケットに欠落は発生していないと判断し、処理を終了する。一方、上記ステップS1403の判定の結果、n+1<mである場合には、続いて欠落判定部140はki=1であるかどうかを判定する(ステップS1404)。
上記ステップS404の判定の結果、情報部180が保持している分岐数kiの値がki=1である場合には、受信パケットに欠落が発生していると判断し、欠落判定部240は応答部270へパケットの欠落を通知する(ステップS1405)。このステップS1405では、欠落判定部240は、n+1番目から、これまで受信したn+1番より大きい番号の中で最小の順序番号の一つ手前までの順序番号のパケットが欠落していると判定し、応答部270へパケットの欠落を通知する。
一方、上記ステップS1404の判定の結果、情報部280が保持している分岐数kiの値がki=1でない場合には、次に、欠落判定部240はパケット受信部220が次に受信したパケットの順序番号を取得する(ステップS1406)。
上記ステップS1406でパケット受信部220が次に受信したパケットの順序番号を取得すると、続いて欠落判定部240は、上記ステップS1406で取得した順序番号がn+1であるかどうかを判定する(ステップS1407)。
上記ステップS1407の判定の結果、上記ステップS1406で取得した順序番号がn+1であるならば、欠落判定部240は処理を終了する。一方、上記ステップS1407の判定の結果、上記ステップS1406で取得した順序番号がn+1で無いならば、続いて欠落判定部240は、順序番号mのパケットを含め、以降パケット受信部220が受信するn+1より大きい順序番号が大きいパケットを、パケット受信部220が受信した順に並べる。そして、このパケット列からその並びのまま、インタフェースごとにパケットを選び出す。そして、そのインタフェースごとに選び出したパケット列について、インタフェースごとに順序番号が降順に並ぶ個数diを数え上げる(ステップS1408)。
そして欠落判定部240は、上記ステップS1408で数え上げた個数diについて、ki≦diを満たす列が存在するかどうかを判定する(ステップS1409)。全てのインタフェースについてki≦diを満たす列が1つでも存在すれば、受信パケットに欠落が発生していると判断し、欠落判定部240は応答部270へパケットの欠落を通知する(ステップS1405)。一方、どの列のdiについてもdi<kiであるならば、上記ステップS1406に戻り、欠落判定部240はパケット受信部220が次に受信したパケットの順序番号を取得する。
以上、図14を用いて欠落判定部240の動作について詳細に説明した。次に、本発明の第2の実施形態にかかる受信端末200Bに含まれるバッファ250の動作について説明する。
図15は、本発明の第2の実施形態にかかる受信端末200Bに含まれるバッファ250の動作を説明する流れ図である。以下、図15を用いてバッファ250の動作について説明する。
まず、バッファ250はパケット受信部220からパケットを受け取ると(ステップS1501)、受信したパケットに付与されている順序番号の小さい順に、受け取ったパケットをデータ受信部260へ渡す(ステップS1502)。バッファ250は、欠落している順序番号のパケットがあれば、そのパケットがパケット受信部220から送られて来るまで待機する。また、既にデータ受信部260へ渡したものと重複しているパケットがあれば、バッファ250はそのパケットを破棄する。
そして、バッファ250は、データ受信部260へ渡した最後のパケットの順序番号を情報部280に渡す。
以上、図15を用いてバッファ250の動作について説明した。次に、本発明の第2の実施形態にかかる受信端末200Bに含まれる応答部270の動作について説明する。
図16は、本発明の第2の実施形態にかかる応答部270の動作について示す流れ図である。以下、図16を用いて第2の実施形態にかかる応答部270の動作について説明する。
応答部270は、情報部280からデータ受信部260が受け取った最後のパケットの順序番号nを取得する(ステップS1601)。次に、応答部270はバッファ250にパケットが存在しているかどうかを確認する(ステップS1602)。
上記ステップS1602の確認の結果、バッファ250にパケットが無いか、または順序番号がn+1であるパケットがあれば、順序番号通りにパケットが受信出来ているので、応答部270は、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信し、処理を終了する。
一方、上記ステップS1602の確認の結果、バッファ250に順序番号がn+2以降のパケットが存在していれば、応答部270は欠落判定部240からの順序番号n+1のパケットの欠落の通知を受けているかどうかを確認する(ステップS1603)。欠落判定部240からの順序番号n+1のパケットの欠落の通知を受けていなければ、上記ステップS1602に戻り、応答部270は応答パケットの送信を控える。一方、欠落判定部240からの順序番号n+1のパケットの欠落の通知を受けていれば、応答部270は、送信端末200Aに対して、順序番号n+1のパケットが欠落していることを応答パケットにより通知する(ステップS1604)。この通知は、予め定められた上記(1)または(2)の少なくともいずれかの内容によって行われる。
以上、図16を用いて第2の実施形態にかかる応答部270の動作について説明した。このように、応答部270は欠落判定部240からの順序番号n+1のパケットの欠落の通知を受けるまで応答パケットの送信を控えることで、ネットワーク10への無駄なトラフィックの発生を抑えることができる。
ここで、推定部230、欠落判定部240、バッファ250、応答部270の具体的な動作例を説明する。送信端末200Aは、受信端末200Bに対して、1、2、3、・・・と続く順序番号を付与したデータパケットを番号の昇順に送信している。以降、パケットの番号についての記述がある場合には、特に断らない限りこの順序番号を指す。また、データパケットには、送信端末200Aがデータパケットを送信したインタフェースのIF番号1、2のいずれかが付与されているものとする。そして、受信端末200Bは、送信端末200Aが送信したデータパケットを受け取り、1パケットを受け取る度に1応答パケットを送信端末100Aに送信しているとする。
送信端末200Aから送信されるデータパケット、受信端末200Bから送信される応答パケット共に、経路途中のネットワーク10の中で、ルータ(図示せず)等によってパケットが複数の経路に分配されている可能性があるが、送信端末200A、受信端末200Bとも、いくつの経路に分配されているかは分からない。
ここで、受信端末200Bが、10番まで順序通りにデータパケットを受信しており、データ受信部260が受信したパケットを全て受け取っているとする。これ以降、送信端末200Aから受信するパケットについての受信端末200Bの動作を、図面を参照しながら具体的に説明する。このとき、情報部280にはデータ受信部260が受信した最後の順序番号10番と、経路の分岐数の推定値k1=1、k2=1とが保存されている。
このとき、パケット受信部220が13番のパケットを受信したとする。パケット受信部220が受信した13番のパケットはバッファ250に渡される。そして、その13番のパケットも含め、図17に示した順序でパケット受信部220がパケットを受信した場合に、推定部230の動作を図13に示した流れ図に沿って説明する。
まず、推定部230は、情報部280から、分岐数の推定値k1=1、k2=1を取得するとともに、データ受信部260が受信した最後尾のパケットの順序番号n=10を取得する(ステップS1301)。続いて、推定部230は、パケット受信部220が新たに受信したパケットの順序番号m=13と、そのパケットのIF番号i=2とを取得する(ステップS1302)。推定部230は、m−n≦k2となるかどうかを判定し(ステップS1303)、k2<m−nであるので、推定部230は、パケット受信部220が順序番号m=13のパケットの次に受信したパケットの順序番号(12)と、パケットのIF番号i=1とを取得する(ステップS1304)。
続いて、推定部230はインタフェースごとに順序番号が降順に並ぶ個数d1、d2を数え上げる(ステップS1305)。ここでは、d1及びd2の値はd1=d2=1となる。どのインタフェースについてもdi≦kiであるから、推定部230は、パケット受信部220が受信した順序番号が最大のパケット(13番のパケット)と、順序番号がn+1番のパケット(11番の)との間に入る全てのパケットを受信したかどうかを判断し(ステップS1307)、11番のパケットを受信していないので、全てのパケットを受信していないので、ステップS1304に戻って、推定部230は、さらに次に受信したパケットの順序番号を取得する処理を実行する。
以後、14番のパケットまでパケット受信部220が受信すると、推定部230は、パケット受信部220が受信したパケットの順序番号(14)と、パケットのIF番号i=2とを取得する(ステップS1304)。推定部230はインタフェースごとに順序番号が降順に並ぶ個数d1、d2を数え上げる(ステップS1305)。ここでは、インタフェース1については16番、15番、14番の並びでd1=3となり、インタフェース2については12番、11番の並びでd2=2となる。そして、推定部230は、順序番号が降順に並ぶ個数をインタフェースごとの分岐数の推定値kiの候補とする(ステップS1306)。
続いて推定部230は、パケット受信部220が受信した順序番号が最大のパケット(13番のパケット)と、順序番号がn+1番のパケット(11番の)との間に入る全てのパケットを受信したかどうかを判断し(ステップS1307)、全てのパケットを受信しているので、推定部230は上記ステップS1306で候補としたインタフェースごとの分岐数の推定値k1=3、k2=2を情報部180に保存する(ステップS1308)。
次に、推定部230がインタフェースごとの分岐数の推定値をk1=3、k2=2と推定した後の動作を説明する。ここでは、図18のように送信端末200Aからのパケットを受信端末200Bが受信した場合について説明する。情報部280には、データ受信部260が受信した最後尾のパケットの順序番号(20)と、インタフェースごとの分岐数の推定値をk1=3、k2=2とが保存されている。
欠落判定部240はパケットの欠落判定処理に際し、情報部280から、インタフェースごとの分岐数の推定値をk1=3、k2=2と、データ受信部260が受信した最後尾のパケットの順序番号n=20とを取得する(ステップS1401)。次に、欠落判定部240はパケット受信部220が新たに受信したパケットの順序番号m=27及びそのパケットを送信したインタフェースのIF番号i=1を受け取る(ステップS1402)。受信したパケットの順序番号m(=27)はn+1(=21)では無いので、欠落判定部240は次にパケット受信部220が受信したパケットの順序番号m=26及びそのパケットを送信したインタフェースのIF番号i=2を受け取る。これも受信したパケットの順序番号m(=26)はn+1(=21)では無いので、欠落判定部240は、全てのインタフェースについてki≦diを満たすパケット列が存在するかどうかを確認する。
確認の結果、ki≦diを満たすパケット列は存在しないので、その後は、欠落判定部240は次にパケット受信部220が受信したパケットの順序番号及びそのパケットを送信したインタフェースのIF番号の取得処理を繰り返す。そして、25番のパケットを受信した時点で、全てのインタフェースについてki≦diを満たすパケット列が存在するようになるので(インタフェース1については26番、24番、23番からなるパケット列、インタフェース2については27番、25番からなるパケット列)、続いて欠落判定部240は、n+1=21番目のパケットから、これまで受信したn+1=21番目より大きい番号の中で、最小の順序番号の一つ手前、すなわち22番目までのパケットが欠落していると判定し、応答部270へその旨を通知する。
バッファ250は、パケット受信部220からパケットを受け取るが、21番のパケットが欠落しているので、パケット受信部220から21番のパケットが送られて来るまで待機する。なお、バッファ250は、パケット受信部220から受け取ったパケットは保持している。
また、応答部270はデータ受信部260が受け取った最後のパケットの順序番号n=20を情報部280から取得する(ステップS1601)。応答部270は、バッファ250に21番のパケットが存在しているかどうかを確認し(ステップS1602)、バッファ250に存在するのはn+1(23)番以降のパケットしか無いので、応答部270は欠落判定部240からの順序番号21番と22番のパケットの欠落の通知を受けているかどうかを確認する(ステップS1603)。欠落判定部240からは、21番及び22番のパケットが欠落している旨の通知を受けているので、送信端末200Aに対して、21番及び22番のパケットが欠落していることを応答パケットにより通知する。応答部270は、予め定められた上記(1)または(2)の少なくともいずれかの内容で応答パケットを送信端末200Aへ送信し、処理を終了する。
以上、推定部230、欠落判定部240、バッファ250、応答部270の具体的な動作例について説明した。
以上説明したように本発明の第2の実施形態にかかる受信端末200Bによれば、送信端末200Aが複数のインタフェースからパケットを送信してきた場合に、パケット受信部220で受信したパケットの順序番号から、推定部230によってネットワーク10の内部の経路の分岐数をインタフェースごとに推定し、番号通りにパケットを受信しなかった場合でも、この分岐数の情報を用いて、応答部270からの応答パケットの送信を控える。これにより受信端末200Bは、通信経路途中の分岐によってパケットの到着順序が逆転している場合であっても、経路途中のパケットロスであると誤判定することが無くなる。
上記非特許文献1に開示の発明では、経路途中の分岐によって到着順序が保証されないので、受信端末で順序番号の大きいパケットが先に届くと、それより順序番号の小さいパケットは自動的にパケットロスであると判定され、応答パケットによって送信端末からの再送が発生してしまう。例えば、上述したように、上記非特許文献1に開示の発明では図7のようにパケットが到着した場合、13番のパケットが到着した時点で11番及び12番のパケットが再送の対象となる。
また、上記特許文献2に開示の発明では、受信バッファでバッファ内の先頭のパケットしか見ないので、受信端末側で順序番号の大きいパケットが先に到着すると、それより順序番号の小さいパケットが自動的にパケットロスと判定されてしまい、応答パケットの送信及び送信端末からのパケットの再送が発生してしまう。図18のようにパケットが受信端末に到着すると、上記特許文献2に開示の発明では、順序番号が26番のパケットを受信した時点で、自動的に21番から25番のパケットはパケットロスと判定されてしまい、パケットの再送の対象となってしまう。
これに対して本発明の第2の実施形態にかかる受信端末200Bでは、後から到着するパケットからもパケットの未着を判断するので、26番のパケットが到着した時点で即座に21番から25番のパケットを再送の対象とすることはしない。従って、本発明の第2の実施形態によれば、番号通りにパケットが到着しなかった場合でも、パケットの到着時点でパケットの未着を判断するのではなく、後から到着するパケットからもパケットの未着を判断するので、ネットワークに無駄なトラフィックが流れることを防ぐことができる。
尚、上記各実施形態において説明した構成は、ネットワークを構成して利用されるもの一般に適用される。例えば、P2P(Peer to Peer)の仮想ネットワークの構造や無線アドホックネットワークに適用することも出来る。
また、上記各実施形態において、フローチャートに記述されたステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的に又は個別的に実行される処理をも含む。また時系列的に処理されるステップでも、場合によっては適宜順序を変更することが可能であることは言うまでもない。
また、上記各実施形態における各種動作は、ハードウェア的な処理によって実行されるようにしてもよく、ソフトウェア的な処理によって実行されるようにしてもよい。ソフトウェア的な処理によって上記各実施形態における各種動作を実行する場合には、コンピュータプログラムが格納された記録媒体及びコンピュータプログラムを実行するプロセッサその他の制御手段を受信端末100B、200Bに設け、係る記録媒体からコンピュータプログラムを読み出し、制御手段において順次実行するようにしてもよい。
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。