(57)【要約】【課題】フラグメントパケットのパケットロスをリアルタイムに検出する。【解決手段】受信部１１によりフラグメントパケットを受信し、パケット処理部１３により、そのフラグメントパケットが最後のフラグメントパケットであるか否かを判定し、パケットロス判定部１４により、最後のフラグメントパケットを受信したときに、全てのフラグメントパケットを受信していない場合であって、所定の時間内に未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定する。これにより、フラグメントパケットの到着順序の入れ替えを考慮しつつ、リアルタイムなパケットロス検出が可能となる。【選択図】図１
2010166244.tif 000002
【特許請求の範囲】
【請求項１】
フラグメントパケットを受信する受信手段と、
前記フラグメントパケットを受信したときに、当該フラグメントパケットが１つのパケットを分割した一連のフラグメントパケットの最後のフラグメントパケットであるか否かを判定するパケット処理手段と、
前記最後のフラグメントパケットを受信したときに、当該最後のフラグメントパケットが属する前記一連のフラグメントパケットの全てのフラグメントパケットを受信していない場合であって、前記最後のフラグメントパケットを受信してから所定の時間内にその未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定するパケットロス判定手段と、
を有することを特徴とするパケットロス判定装置。
【請求項２】
フラグメントパケットを受信するステップと、
前記フラグメントパケットを受信したときに、当該フラグメントパケットが１つのパケットを分割した一連のフラグメントパケットの最後のフラグメントパケットであるか否かを判定するステップと、
前記最後のフラグメントパケットを受信したときに、当該最後のフラグメントパケットが属する前記一連のフラグメントパケットの全てのフラグメントパケットを受信していない場合であって、前記最後のフラグメントパケットを受信してから所定の時間内にその未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定するステップと、
を有することを特徴とするパケットロス判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信したフラグメントパケットのパケットロスの検出を行う技術に関する。
【背景技術】
【０００２】
ＲＴＰ（Real-time Transport Protocol）パケットのロス判定は既存方式が複数存在する。例えば、特許文献１においては、フラグメントパケットを考慮したロス検出方法が記載されている。特許文献２においては、パケットロス率に基づく送信レート制御手法について記載されている。また、特許文献３においては、バーストロスも含めたパケットロスの発生をリアルタイムに検出する方法が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−３２８１３１号公報
【特許文献２】特開２００１−１４４８０２号公報
【特許文献３】特開２００５−１５９８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１では、最後尾パケットを受信したときに、パケット群内のロスしたパケットの再送を要求するため、パケットの順序入れ替えなどで最後尾パケットの後に到着するパケットもロスしたと判定されてしまう。
【０００５】
また、特許文献２では、受信者からのフィードバック情報に基づいてデータ送出レートを決める方式であり、パケットロスをリアルタイムに検出することはできない。
【０００６】
また、特許文献３では、各パケットにシーケンス番号が付与されていることを前提としており、パケットがフラグメントされている場合は想定していない。
【０００７】
本発明は、上記に鑑みてなされたものであり、その課題とするところは、フラグメントパケットのパケットロスをリアルタイムに検出することにある。
【課題を解決するための手段】
【０００８】
第１の本発明に係るパケットロス判定装置は、フラグメントパケットを受信する受信手段と、フラグメントパケットを受信したときに、当該フラグメントパケットが１つのパケットを分割した一連のフラグメントパケットの最後のフラグメントパケットであるか否かを判定するパケット処理手段と、最後のフラグメントパケットを受信したときに、当該最後のフラグメントパケットが属する一連のフラグメントパケットの全てのフラグメントパケットを受信していない場合であって、最後のフラグメントパケットを受信してから所定の時間内にその未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定するパケットロス判定手段と、を有することを特徴とする。
【０００９】
第２の本発明に係るパケットロス判定方法は、フラグメントパケットを受信するステップと、フラグメントパケットを受信したときに、当該フラグメントパケットが１つのパケットを分割した一連のフラグメントパケットの最後のフラグメントパケットであるか否かを判定するステップと、最後のフラグメントパケットを受信したときに、当該最後のフラグメントパケットが属する一連のフラグメントパケットの全てのフラグメントパケットを受信していない場合であって、最後のフラグメントパケットを受信してから所定の時間内にその未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定するステップと、を有することを特徴とする。
【発明の効果】
【００１０】
本発明にあっては、フラグメントパケットを受信し、そのフラグメントパケットが最後のフラグメントパケットであって、全てのフラグメントパケットを受信していない場合に、所定の時間内に未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定することにより、フラグメントパケットの到着順序の入れ替えを考慮した、リアルタイムなパケットロス検出が可能となる。
【００１１】
このように、本発明によれば、フラグメントパケットのパケットロスをリアルタイムに検出することができる。
【図面の簡単な説明】
【００１２】
【図１】一実施の形態におけるパケットロス検出装置の構成を示すブロック図である。
【図２】上記パケットロス検出装置のパケットロス判定処理の処理の流れを示すフローチャートである。
【図３】フラグメントパケットを処理する流れを示すフローチャートである。
【図４】フラグメントパケットのヘッダーを示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を用いて説明する。
【００１４】
図１は、本実施の形態におけるパケットロス検出装置の構成を示すブロック図である。同図に示すパケットロス検出装置１は、受信部１１、タイマー１２、パケット処理部１３、およびパケットロス判定部１４を備える。パケットロス検出装置１は、演算処理装置、記憶装置、メモリ等を備えたコンピュータにより構成して、各部の処理がプログラムによって実行されるものとしてもよい。このプログラムはパケットロス検出装置１が備える記憶装置に記憶されており、磁気ディスク、光ディスク、半導体メモリ等の記録媒体に記録することも、ネットワークを通して提供することも可能である。
【００１５】
受信部１１は、大きなパケットをいくつかに分割したフラグメントパケットなどのパケットを受信する。
【００１６】
タイマー１２は、パケットロスを検出するための時間を測定する。例えば、１つのパケットをいくつかに分割した一連のフラグメントパケットのいずれかが未受信の場合、そのフラグメントパケットの到着を待つ時間を測定する。
【００１７】
パケット処理部１３は、パケットの種類、パケットに含まれるデータ、あるいは分割された最後のフラグメントパケットであるか否かなど、受信したパケットを解析する。
【００１８】
パケットロス判定部１４は、所定の時間内にパケットが到着しなかったときなどにパケットロスが発生したと判定する。例えば、最後のフラグメントパケットを受信したときに一連のフラグメントパケットのうちのいずれかが未受信の場合、最後のフラグメントパケットを受信してから所定の時間内にその未受信のフラグメントパケットを受信できないときにパケットロスが発生したと判定する。なお、最後のフラグメントパケットの受信の有無に関わらず、所定の時間経過したときにパケットロスが発生したと判定する方法もある。また、パケットにシーケンス番号が付されている場合は、受信したシーケンス番号が連続していないときにパケットロスが発生したと判定する。
【００１９】
次に、フラグメントパケットのパケットロス判定処理の流れについて説明する。図２は、パケットロス判定処理の処理の流れを示すフローチャートである。
【００２０】
まず、フラグメントパケットを受信したとき（ステップＳ２０１）、一連のフラグメントパケットのうちの最後のフラグメントパケットを受信しているか否か判定する（ステップＳ２０２）。最後のフラグメントパケットを受信していない場合は、ステップＳ２０１へ戻り、次のパケットの到着を待つ。なお、受信したフラグメントパケットが最後であるか否かは、フラグメントパケットに付された情報により知ることができる。
【００２１】
最後のフラグメントパケットを受信していた場合（受信したパケットが最後のフラグメントパケットである場合も含む）、その最後のフラグメントパケットが属する一連のフラグメントパケットを全て受信しているか否か確認し（ステップＳ２０３）、すべてのフラグメントパケットを受信していた場合は、「正常」と判定する。一連のフラグメントパケットには同じフラグメントＩＤが付されている、つまり、大きなパケットをいくつかのフラグメントパケットに分割した場合、そのフラグメントパケットそれぞれには同じフラグメントＩＤが付される。同じフラグメントＩＤを有するフラグメントパケットの総受信サイズ、あるいは、受信個数を調べることで一連のフラグメントパケットを全て受信しているか否か判定できる。
【００２２】
一方、最後のフラグメントパケットを受信したが、まだ受信していないフラグメントパケットがある場合は、所定の時間を設定してステップＳ２０１へ戻り、未受信のフラグメントパケットの到着を待つ。このとき、設定した時間内にその未受信のフラグメントパケットが受信できない場合は、パケットロスが発生したと判定する（ステップＳ２０１）。
【００２３】
ここで、一連のフラグメントパケットの全てを受信したか否かの判定について説明する。ステップＳ２０２において、受信したフラグメントパケットが最後のフラグメントパケットであった、あるいは、受信したフラグメントパケットと同じ一連のフラグメントパケットの最後のフラグメントパケットを受信していた、と判定された場合は、ステップＳ２０３においてその一連のフラグメントパケットを全て受信したか否かを判定する。
【００２４】
例えば、最後のフラグメントパケットのオフセット値およびペイロード長から、一連のフラグメントパケットのサイズの合計を算出し、実際に受信したフラグメントパケットのサイズの合計と比較することで、一連のフラグメントパケットを全て受信したか否か判定できる。オフセット値は、そのフラグメントパケットが有するデータが分割前のパケットのどの位置のものであるのかを示す。また、ペイロード長は、そのフラグメントパケットが有するデータのサイズを示す。なお、一連のフラグメントパケットのサイズの合計、つまり、分割前のパケットのサイズは、分割前のパケットのヘッダーから求めることもできる。
【００２５】
あるいは、ＭＴＵ（Maximum Transmission Unit）サイズからフラグメントパケットの個数を推定しておき、同じフラグメントＩＤを有するフラグメントパケットをその個数だけ受信したことをもって「正常」と判定できる。
【００２６】
また、未受信のフラグメントパケットが到着したか否かを調べる方法として、未受信のフラグメントパケットのオフセット値をキーとして待ち受け、所望のフラグメントＩＤおよびオフセット値を有するフラグメントパケットを受信したことでもって「正常」と判定できる。
【００２７】
次に、上記パケットロス検出装置１のパケット処理部１３の処理について具体例を挙げて説明する。
【００２８】
図３は、パケット処理部１３の処理の流れを示すフローチャートである。同図に示す例では、ＩＰｖ６により複数のフラグメントパケットに分割されたＲＴＰパケットを受信する例を示す。もちろん、分割されていないＲＴＰパケットを受信するものでもよい。図４にフラグメントパケットのヘッダーを解析した例を示す。
【００２９】
まず、パケットを受信すると、受信したパケットがＩＰｖ６であるか否か判定し（ステップＳ３０１）、受信したパケットがＩＰｖ６でない場合は次のパケットの到着を待つ。受信したパケットがＩＰｖ６であるか否かは、図４の Type の項目を調べることにより判定できる。
【００３０】
受信したパケットがＩＰｖ６である場合、そのパケットがフラグメントパケットであるか否か判定し（ステップＳ３０２）、フラグメントパケットでない場合は次のパケットの到着を待つ。フラグメントパケットであるか否かは、図４の Next header の項目を調べることにより判定できる。
【００３１】
続いて、そのフラグメントパケットが１番目のフラグメントパケットであるか否かを調べる（ステップＳ３０３）。図４の Fragmentation Header 中の Offset （オフセット値）が０である場合、そのフラグメントパケットは１番目のフラグメントパケットである。１番目のフラグメントパケットが最後のフラグメントパケットであることはない。
【００３２】
受信したパケットが１番目のフラグメントパケットである場合、そのパケットに含まれるＵＤＰパケットのデータ部に格納されたＲＴＰパケットからＲＴＰシーケンス番号を取得して、前に受信したＲＴＰパケットのＲＴＰシーケンス番号と連続しているか否か調べる（ステップＳ３０４）。ＲＴＰシーケンス番号が連続していない場合はパケットロスと判定する。
【００３３】
そして、１番目のフラグメントパケットからフラグメントＩＤと Payload length 値を取得して記憶手段に記憶させる（ステップＳ３０５）。フラグメントＩＤは、図４の Fragmentation Header の Identification の値である。Payload length 値は、ＩＰｖ６のヘッダを含まないペイロードの長さを示す。
【００３４】
さらに、１番目のフラグメントパケットに含まれるＵＤＰの Length 値を取得して記憶手段に記憶させる（ステップＳ３０６）。取得した Length 値は、分割したパケットの長さ、つまり、全てのフラグメントパケットを受信した場合のデータのサイズを示す。
【００３５】
一方、受信したパケットが１番目のフラグメントパケットではない場合、そのフラグメントパケットからフラグメントＩＤと Payload length 値を取得して記憶手段に記憶させ（ステップＳ３０７）、最後のフラグメントパケットを受信したか否かを判定する（ステップＳ３０８）。最後のフラグメントパケットであるか否かは、図４の Fragmentation Header の More Fragment を調べることで分かる。More Fragment が０である場合、そのフラグメントパケットは最後のフラグメントパケットである。まだ最後のフラグメントパケットを受信していない場合は、次のパケットの到着を待つ。
【００３６】
最後のフラグメントパケットを受信した場合、あるいは、最後のフラグメントパケットを受信していた場合、すべてのフラグメントパケットを受信したか否か判定する（ステップＳ３０９）。すべてのフラグメントパケットを受信したか否かは、ステップＳ３０６で取得したＵＤＰの Lenghth 値と、ステップＳ３０５，Ｓ３０７で取得した同一フラグメントＩＤの、Payload length 値の合計とを比較することにより行う。ＵＤＰの Length 値と Payload length 値の合計が同じであれば、すべてのフラグメントパケットを受信しているので、次のパケットの到着を待つ。
【００３７】
すべてのフラグメントパケットを受信していない場合は、所定の時間を計測するタイマーを起動して次のパケットの到着を待つ。所定の時間内に未受信のフラグメントパケットが受信できない場合は、パケットロスと判定する（図２のステップＳ２０１）。
【００３８】
以上説明したように、本実施の形態によれば、受信部１１によりフラグメントパケットを受信し、パケット処理部１３により、そのフラグメントパケットが最後のフラグメントパケットであるか否かを判定し、パケットロス判定部１４により、最後のフラグメントパケットを受信したときに、全てのフラグメントパケットを受信していない場合であって、所定の時間内に未受信のフラグメントパケットを受信できないときにはパケットロスが発生したと判定することにより、フラグメントパケットの到着順序の入れ替えを考慮しつつ、リアルタイムなパケットロス検出が可能となる。
【符号の説明】
【００３９】
１…パケットロス検出装置
１１…受信部
１２…タイマー
１３…パケット処理部
１４…パケットロス判定部
【図１】
2010166244.tif 000003
【図２】
2010166244.tif 000004
【図３】
2010166244.tif 000005
【図４】
2010166244.tif 000006