(57)【要約】  本発明のパケット回復方法は、第１のノード１１１からネットワークを介して第２のノード１１２にシーケンス番号の順に送信された複数のパケットについて、その一部のパケットが損失したときのパケット回復方法であって、第２のノード１１２は、第１のノード１１１から送信されるパケットの損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを第１のノード１１１にネットワークを介して送信する。そして、第１のノード１１１は、第２のノード１１２から確認応答メッセージを受信すると、複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、続いて、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを再送パケットに添付して第２のノード１１２にネットワークを介して送信する。
2008029793.tif 000002
【特許請求の範囲】
【請求項１】
第１のノードからネットワークを介して第２のノードにシーケンス番号の順に送信された複数のパケットについて、その一部のパケットが損失したときのパケット回復方法であって、
前記第２のノードは、前記第１のノードから送信されるパケットの損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを前記第１のノードに前記ネットワークを介して送信し、
前記第１のノードは、前記第２のノードから前記確認応答メッセージを受信すると、前記複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、
前記第１のノードは、前記確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記再送パケットに添付して前記第２のノードに前記ネットワークを介して送信する、パケット回復方法。
【請求項２】
前記第１のノードは、
前記再送パケットのシーケンス番号として、前記複数のパケットのうち最後のパケットに続く初回送信パケットに該当する番号を付与する、請求の範囲１記載のパケット回復方法。
【請求項３】
前記第１のノードおよび前記第２のノード間のパケット通信において複数のシーケンス番号系列が利用可能であり、
前記第１のノードは、
前記複数のパケットを前記第２のノードに送信する際、前記複数のシーケンス番号系列のうち第１のシーケンス番号系列に基づき決められた番号を付与し、
前記第１のノードは、
前記再送パケットを前記第２のノードに送信する際、前記第１のシーケンス番号系列とは異なる第２のシーケンス番号系列で最後に送出したパケットに続く初回送信パケットに該当する番号を前記再送パケットに付与する、請求の範囲１または２記載のパケット回復方法。
【請求項４】
前記第１のノードは、
前記再送パケットのシーケンス番号が他のいかなるシーケンス番号とも同じにならないように前記再送パケットに前記シーケンス番号を付与する、請求の範囲１から３のいずれか１項に記載のパケット回復方法。
【請求項５】
前記第２のノードは、
前記確認済み通知メッセージを受信すると、通知されたシーケンス番号以前のシーケンス番号が付与されたパケットに関しての再送要求を行わない、請求の範囲１から４のいずれか１項に記載のパケット回復方法。
【請求項６】
前記第１のノードは、
前記確認済み通知メッセージに、前記受信確認または損失検出したパケットのシーケンス番号の情報を含める、請求の範囲１から５のいずれか１項に記載のパケット回復方法。
【請求項７】
前記第１のノードは、
前記第２のノード宛に送信するパケットの全てに前記確認済み通知メッセージを含める、請求の範囲１から６のいずれか１項に記載のパケット回復方法。
【請求項８】
ネットワークを介して接続される第１のノードおよび第２のノードを有する通信システムであって、
前記第１のノードは、
前記第２のノードにシーケンス番号の順に複数のパケットを送信した後、前記第２のノードが受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを前記第２のノードから受信すると、前記複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、前記確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記再送パケットに添付して前記第２のノードに送信する制御部を有し、
前記第２のノードは、
前記第１のノードから送信されるパケットの損失を検出すると、前記確認応答メッセージを前記第１のノードに送信する制御部を有する、通信システム。
【請求項９】
前記第１のノードの制御部は、
前記再送パケットのシーケンス番号として、前記複数のパケットのうち最後のパケットに続く初回送信パケットに該当する番号を付与する、請求の範囲８記載の通信システム。
【請求項１０】
前記第１のノードおよび前記第２のノード間のパケット通信において複数のシーケンス番号系列が利用可能であり、
前記第１のノードの制御部は、
前記複数のパケットを前記第２のノードに送信する際、前記複数のシーケンス番号系列のうち第１のシーケンス番号系列に基づき決められた番号を付与し、前記再送パケットを前記第２のノードに送信する際、前記第１のシーケンス番号系列とは異なる第２のシーケンス番号系列で最後に送出したパケットに続く初回送信パケットに該当する番号を前記再送パケットに付与する、請求の範囲８または９記載の通信システム。
【請求項１１】
前記第１のノードの制御部は、
前記再送パケットのシーケンス番号が他のいかなるシーケンス番号とも同じにならないように前記再送パケットに前記シーケンス番号を付与する、請求の範囲８から１０のいずれか１項に記載の通信システム。
【請求項１２】
前記第１のノードの制御部は、
前記第２のノード宛に送信するパケットの全てに前記確認済み通知メッセージを含める、請求の範囲８から１１のいずれか１項に記載の通信システム。
【請求項１３】
ネットワークを介して他の情報処理装置にパケットを送信する情報処理装置であって、
前記他の情報処理装置に再送するパケットである再送パケットを保存するための記憶部と、
前記他の情報処理装置にシーケンス番号の順に複数のパケットを送信した後、前記他の情報処理装置が受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを前記他の情報処理装置から受信すると、前記複数のパケットのいずれとも異なるシーケンス番号を前記再送パケットに付与し、前記確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記再送パケットに添付して前記他の情報処理装置に送信する制御部と、
を有する情報処理装置。
【請求項１４】
ネットワークを介して他の情報処理装置からパケットを受信する情報処理装置であって、
前記他の情報処理装置から前記パケットに付与されたシーケンス番号の順に受信するパケットを保存するための記憶部と、
前記他の情報処理装置から送信される複数のパケットのうち一部の損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを前記他の情報処理装置に送信し、該確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記他の情報処理装置から受信すると、前記受信確認または損失検出したパケットのシーケンス番号以前の番号が付与されたパケットに関しては再送要求を行わない制御部と、
を有する情報処理装置。
【請求項１５】
ネットワークを介して情報処理装置にパケットを送信するコンピュータに実行させるためのプログラムであって、
前記情報処理装置にシーケンス番号の順に複数のパケットを送信し、
前記情報処理装置が受信確認または損失検出したパケットおよび損失したパケットの情報を含む確認応答メッセージを前記情報処理装置から受信すると、前記複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、
前記確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記再送パケットに添付して前記情報処理装置に送信する処理を前記コンピュータに実行させるためのプログラム。
【請求項１６】
ネットワークを介して情報処理装置からパケットを受信するコンピュータに実行させるためのプログラムであって、
前記情報処理装置からシーケンス番号の順に送出された複数のパケットのうち一部のパケットの損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを前記情報処理装置に送信し、
前記確認応答メッセージを受信したことを通知するための確認済み通知メッセージを前記情報処理装置から受信すると、前記受信確認または損失検出したパケットのシーケンス番号以前の番号が付与されたパケットに関しては再送要求を行わない処理を前記コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット回復方法、通信システム、情報処理装置、およびその方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
インターネットなどのネットワークを介して２つのノードがパケット通信する際、パケット損失が発生することがある。パケット損失に対処する方法として、パケットの再送方法の技術が提案されている。特開平９−４６３７５号公報（以下では、文献１と称する）にその一例が開示されている。【０００３】
文献１に開示された技術は、送信ノードと受信ノードとの間で送信パケットのフロー制御及び順序制御を行うが、受信ノードでパケット損失による順序待ちが発生した場合、一定時間内に順序待ち対象のパケットを受信しなかった場合、送信ノードに対して順序待ち対象のパケットの再送要求を通知するものである。【０００４】
また、２つのノード間に複数のフローが存在する場合には、フローそれぞれを単位として、例えば、TCP（Transmission  Control  Protocol（規格書rfc793参照））などを利用して、パケットの再送や順序制御を行っていた。【０００５】
さらに、多重損失が生じた場合には、受信ノードが複数のパケットの欠落情報を同時に送信ノードに伝えるSack（TCP  Selective  Acknowledgment  Options（規格書rfc2018参照））により、冗長な再送の防止と、再送による遅延の抑制を行っていた。【０００６】
また、２つのノード間で複数の経路が使用可能であるときには、再送対象のパケットである再送パケットを複数の経路中最も遅延の短い経路を介して送信する手段を含むモバイルインバースマックス（多重化技術）が知られている。モバイルインバースマックスは、T.  Nakata  et  al.による”Efficient  bundling  of  heterogeneous  radio  resources  for  broadband  Internet  access  from  moving  vehicles”（in  proceedings  of  Global  Mobile  Congress  2004,  Oct.  11-13  2004,  Shanghi,  China.）（以下では、文献２と称する）に開示されている。文献２に開示された技術では、単一経路のみに閉じた再送制御を行う場合に比べ再送による遅延の低減が可能である。【０００７】
以下に、Sackを用いたパケット再送制御を、図１を用いて説明する。【０００８】
図１は、送信ノード１０１が送信した、シーケンス番号が１から９まで付与されている９個のパケットのうち、シーケンス番号が２，３，４の３個のパケットが損失した場合の再送処理を示している。【０００９】
受信ノード１０２は、送信ノード１０１からのシーケンス番号が５のパケット２０１を受信すると、確認応答メッセージ３０１を送信ノード１０１に返送する。図１では、シーケンス番号が６であるパケット４０１まで受信ノード１０２が受信したところで、受信ノード１０２から送信ノード１０１に確認応答メッセージ３０１が返信されるところが示されている。確認応答メッセージ３０１は、AckフィールドとSackフィールドとを含む。Ackフィールドには未受信のパケットで最も小さいシーケンス番号である２が挿入されている。図１の例では、受信ノード１０２は、シーケンス番号が１のパケットを受信済みだからである。【００１０】
Sackフィールドは、Ackフィールドに挿入されたシーケンス番号以降に受信されたパケットがある場合にのみ用いられる。Sackフィールドは、LeftフィールドとRightフィールドとを含む。受信されたパケットのうちシーケンス番号が連続している部分をBlock（ブロック）として、各ブロックにつき、その最初のパケットのシーケンス番号がLeftフィールドに挿入され、ブロック後の未受信のパケットで最も小さいシーケンス番号がRightフィールドに挿入される。【００１１】
図１の例では、Sackフィールドは受信ノード１０２がシーケンス番号６のパケットまで受信した時点で送出される確認応答メッセージを示している。この場合、シーケンス番号５および６のパケットからなる１つのブロックしかない。そのため、図１に示すように、この第一のSackブロックについて、Leftフィールドには５が挿入され、Rightフィールドには７が挿入されている。【００１２】
送信ノード１０１は、受信ノード１０２から確認応答メッセージ３０１を受信すると、確認応答メッセージ３０１からシーケンス番号１，５および６が受信済みであることを認識するとともに、シーケンス番号２，３，４のパケットが損失したと判断し、損失したパケットを受信ノード１０２に再送する。図１に示すように、送信ノード１０１がシーケンス番号９のパケットの送信後に確認応答メッセージを受信し、損失したパケットを受信ノード１０２に再送する。【００１３】
また、図１は、伝送路の速度が変動し、シーケンス番号が７以降のパケットについて伝送遅延が拡大した場合も示している。そのためシーケンス番号７，８，９のパケットのみならず、その後に再送されたシーケンス番号が２，３，４の再送パケットも一次送信時に比べて大きな伝送遅延をもって伝送される。【００１４】
２つのノード間に複数の経路が使用可能であり、その１つについてこのような速度の低下が生じた場合には、文献２に開示されたモバイルインバースマックスを用いて再送パケットの遅延を低下させることができる。以下に、その技術を、図２を用いて説明する。【００１５】
図２では、送信ノード１０１と受信ノード１０２との間で経路１と経路２との２つの経路が使用可能であることを示している。経路１においては、図１と同様にシーケンス番号が２，３，４であるパケットが損失し、またシーケンス番号が７以降であるパケットはそれ以前のパケットに比べて速度低下により伝送遅延が増大している。経路２においてはパケット損失も速度低下も生じていない。【００１６】
シーケンス番号２，３，４のパケットの損失は、図１の例と同様に、Ackフィールドに２が挿入され、第一のSackブロックに関するLeftフィールドに５が挿入され、Rightフィールドに７が挿入された確認応答メッセージ３０１を送信ノード１０１が受信することにより、送信ノード１０１に検出される。【００１７】
一方、経路２ではパケット損失が生じないので、受信ノード１０２はAckフィールドのみからなる確認応答メッセージ３０２を送信ノード１０１に返送する。また、経路２では送信ノード１０１から受信ノード１０２へのパケット送信の速度低下も生じていない。そのため、受信ノード１０２から送信ノード１０１に同時に送られた経路１の確認応答メッセージ３０１と経路２の確認応答メッセージ３０２とを比較すると、経路２のAckフィールドの方が経路１の場合よりもシーケンス番号が大きい。ここでは、確認応答メッセージ３０２のAckフィールドにシーケンス番号の９が挿入された場合を示す。【００１８】
送信ノード１０１は、確認応答メッセージ３０１，３０２のAckフィールドから、経路２の遅延が経路１より小さいことを予測し、経路１のシーケンス番号２，３，４を持つパケットを経路２を介して受信ノード１０２に送信する。このようにして経路２を介して再送されたパケットのシーケンス番号を、受信ノード１０２が経路１のシーケンス番号と正しく認識する必要がある。そのため、この方式では各再送パケットに、一次送信時にいずれの経路から送出されたものであるかを識別するための情報を含めるようにしている。【００１９】
なお、図２の例ではパケットに付与されるシーケンス番号は経路毎に系列が異なっている。モバイルインバースマックスにおいては任意の転送単位にシーケンス番号の系列を割り当てることが可能であり、シーケンス番号系列毎に異なる識別子を付与している。その識別子を再送ID（identification）と称している（文献２を参照）。図２の例では、経路毎に異なる再送IDを付与すれば、再送IDは経路を特定するための経路識別子となる。【００２０】
再送IDの付与の仕方の他の例として、複数のTCPまたはUDP（User  Datagram  Protocol）セッションの組や、同一無線システムに属する無線回線の組などが考えられる。これらの場合、セッションや回線に対応して再送IDを付与すれば、再送IDでセッションや回線を識別でき、図２の例と同様な並列転送による再送の高速化が可能である。
【発明の開示】
【００２１】
図１に示したSackによる再送は、Sackブロックの数が増えると確認応答メッセージが大きくなるため、受信ノード１０２から送信ノード１０１への通信において帯域利用効率が低下する問題があった。
【００２２】
また、TCPのように確認応答メッセージがデータパケットのヘッダに含まれる場合には、Sackブロック数が増大すると、パケットの損失やフラグメント化が起こりやすくなる問題があった。
【００２３】
これらの問題は、Sackブロックの数を制限することで影響を低減できるが、その場合、大量のパケット損失が生じた場合に全ての損失情報を確認応答メッセージに含めることができない。その結果、再送の必要なパケットの検出が遅れ、パケット再送の遅延が増大するという問題があった。
【００２４】
モバイルインバースマックスにおける再送は、再送パケットの送達を高速化する効果があるものの、図２に示した例では、経路１で損失後に再送された、シーケンス番号が２，３，４であるパケットは、それ以前に、送信ノード１０１が経路１を介して送信済みであるシーケンス番号が８，９であるパケットより早く受信ノード１０２に受信される。
【００２５】
このため順序逆転が検出され、本来損失していないシーケンス番号８，９のパケットの損失が誤検出され、再送が生じるおそれがある。このように損失していないパケットが冗長に再送されると、帯域利用効率が低下する問題があった。
【００２６】
また、異なる経路から送信した再送パケットが、それ以降に送信したパケットより遅く受信ノードに受信される場合は、再送パケットの再損失が誤検出され、冗長な再々送が生じる。このような転送中の順序逆転は、FIFO（First-In  First-Out）制御されている経路内では起こらないが、各々がFIFO制御されていても、モバイルインバースマックスにおける再送のように、同じシーケンス番号系列に属するパケットを複数の経路から並列に送信する場合には、経路間ジッタにより順序逆転が生じうる。
【００２７】
また、このジッタによる冗長な再送を避けようとすると、一次送信に用いた経路と同程度の遅延を持つ経路を再送時にも用いる必要があるため、遅延はより大きいが損失が少なく信頼性の高い経路などを選択できなくなり、状況に応じた送信経路の選択に制限が生じる問題があった。
【００２８】
本発明は、上述の技術が有する問題点を解決するためになされたものであり、パケット送信における帯域の利用効率の低下を抑制したパケット回復方法、通信システム、情報処理装置、およびその方法をコンピュータに実効させるためのプログラムを提供することを目的とする。
【００２９】
本発明のパケット回復方法は、第１のノードからネットワークを介して第２のノードにシーケンス番号の順に送信された複数のパケットについて、その一部のパケットが損失したときのパケット回復方法であって、第２のノードは、第１のノードから送信されるパケットの損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを第１のノードにネットワークを介して送信し、第１のノードは、第２のノードから確認応答メッセージを受信すると、複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、第１のノードは、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを再送パケットに添付して第２のノードにネットワークを介して送信するものである。
【００３０】
本発明の通信システムは、ネットワークを介して接続される第１のノードおよび第２のノードを有する通信システムであって、第１のノードは、第２のノードにシーケンス番号の順に複数のパケットを送信した後、第２のノードが受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを第２のノードから受信すると、複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを再送パケットに添付して第２のノードに送信する制御部を有し、第２のノードは、第１のノードから送信されるパケットの損失を検出すると、確認応答メッセージを第１のノードに送信する制御部を有する構成である。
【００３１】
本発明の情報処理装置は、ネットワークを介して他の情報処理装置にパケットを送信する情報処理装置であって、他の情報処理装置に再送するパケットである再送パケットを保存するための記憶部と、他の情報処理装置にシーケンス番号の順に複数のパケットを送信した後、他の情報処理装置が受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを他の情報処理装置から受信すると、複数のパケットのいずれとも異なるシーケンス番号を再送パケットに付与し、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを再送パケットに添付して他の情報処理装置に送信する制御部と、を有する構成である。
【００３２】
また、本発明の情報処理装置は、ネットワークを介して他の情報処理装置からパケットを受信する情報処理装置であって、他の情報処理装置からパケットに付与されたシーケンス番号の順に受信するパケットを保存するための記憶部と、他の情報処理装置から送信される複数のパケットのうち一部の損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを他の情報処理装置に送信し、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを他の情報処理装置から受信すると、受信確認または損失検出したパケットのシーケンス番号以前の番号が付与されたパケットに関しては再送要求を行わない制御部と、を有する構成である。
【００３３】
本発明のプログラムは、ネットワークを介して情報処理装置にパケットを送信するコンピュータに実行させるためのプログラムであって、情報処理装置にシーケンス番号の順に複数のパケットを送信し、情報処理装置が受信確認または損失検出したパケットおよび損失したパケットの情報を含む確認応答メッセージを情報処理装置から受信すると、複数のパケットのいずれとも異なるシーケンス番号を再送対象のパケットである再送パケットに付与し、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを再送パケットに添付して情報処理装置に送信する処理をコンピュータに実行させるものである。
【００３４】
また、本発明のプログラムは、ネットワークを介して情報処理装置からパケットを受信するコンピュータに実行させるためのプログラムであって、情報処理装置からシーケンス番号の順に送出された複数のパケットのうち一部のパケットの損失を検出すると、受信確認または損失検出したパケットのシーケンス番号および損失したパケットの情報を含む確認応答メッセージを情報処理装置に送信し、確認応答メッセージを受信したことを通知するための確認済み通知メッセージを情報処理装置から受信すると、受信確認または損失検出したパケットのシーケンス番号以前の番号が付与されたパケットに関しては再送要求を行わない処理をコンピュータに実行させるものである。
【００３５】
本発明によれば、確認応答メッセージのデータ量を低減することができ、帯域の利用効率の低下を抑制できる。また、複数の経路を用いて、一次送信パケットと再送パケットとを並列に送信する際、経路間ジッタにより生じる冗長な再送を防げる。
【図面の簡単な説明】
【００３６】
【図１】図１はSackを用いたパケット再送制御を説明するための図である。
【図２】図２は２つのノード間に複数の経路が使用可能な場合を説明するための図である。
【図３】図３は第１の実施例における通信システムの一構成例を示すブロック図である。
【図４】図４は第１の実施例における通信システムの動作手順の一例を説明するための図である。
【図５】図５は第１の実施例における通信システムの動作手順の一例を示すフローチャートである。
【図６】図６は第２の実施例における通信システムの動作手順の一例を説明するための図である。
【図７】図７はパケットの再送制御と順序制御を行うノードの一構成例を示すブロック図である。
【符号の説明】
【００３７】
１０１、１１１    送信ノード
１０２、１１２    受信ノード
６０１−１、６０１−２    受信部
６０２−１、６０２−２    送信部
６０３    外部送信部
６０４    外部受信部
６１０    再送制御部
６２０    スケジューリング部
６３０    順序制御部
７０１−１〜７０１−３    順序制御キュー
７０２−１〜７０２−３    セッションキュー
７０３    再送要求キュー
【発明を実施するための最良の形態】
【００３８】
（第１の実施例）
本実施例の通信システムの構成を説明する。図３は本実施例における通信システムの一構成例を示すブロック図である。【００３９】
図３に示す送信ノード１１１および受信ノード１１２は、インターネットなどのネットワーク５０を介して接続されるコンピュータ、ＰＤＡ（Personal  Digital  Assistants）、ルータおよびサーバ装置などの情報処理装置である。なお、ネットワーク５０内には、パケットを転送するルータが設けられていてもよい。送信ノード１１１は本発明の第１のノードに相当し、受信ノード１１２は本発明の第２のノードに相当する。【００４０】
ネットワーク５０を介して２つのノード間でパケットを送受信する際、いずれか一方から他方にパケットを送信する場合に限らず、その逆の場合もあるが、ここでは、説明を簡単にするためにパケットの送信側を送信ノード１１１とし、受信側を受信ノード１１２としている。【００４１】
送信ノード１１１および受信ノード１１２のそれぞれは、ネットワーク５０を介してパケットを送受信する通信部１１５と、送受信するデータを格納するための記憶部８００と、パケットの送受信を制御する制御部１１７とを有する。送信ノード１１１および受信ノード１１２は、上述したように、いずれか一方が送信側であれば他方が受信側になるため、装置の構成は同様になる。制御部１１７は、プログラムにしたがって処理を実行するＣＰＵ（Central  Processing  Unit）（不図示）と、プログラムを格納するためのメモリ（不図示）とを備えている。【００４２】
ただし、パケットの送信側になるか受信側になるかによって、ＣＰＵが実行するプログラムが異なる。そのため、送信側として実行する場合のプログラムと、受信側として実行する場合のプログラムの両方が各ノードに格納されている。【００４３】
送信ノード１１１の制御部１１７は、受信ノード１１２から受信する確認応答メッセージ３０１で損失パケットを特定すると、新たな一次送信パケットとしてのシーケンス番号、つまり最後に送信したシーケンス番号以降の番号を再送パケットに付与する。また、最初に受信ノード１１２宛に送信する再送パケットに確認済み通知メッセージ（Ack-to-Ack）を挿入する。Ack-to-Ackとは、送信ノード１１１が受信ノード１１２からの確認応答メッセージより得た、受信確認済みまたは損失検出済みのパケットのうち最も大きいシーケンス番号の情報である。Ack-to-Ackは、送信ノード１１１が受信ノードから確認応答メッセージを受信したことを通知するためのメッセージとなる。そして、このようにして生成した再送パケットを受信ノード１１２に送信する。【００４４】
受信ノード１１２の制御部１１７は、再送パケットを受信すると、最初に受信した再送パケット内のAck-to-Ackを読み出す。この際、Ack-to-Ackが示すシーケンス番号以前のパケットに関する確認応答を送信ノード１１１に返す必要がない。Ack-to-Ackの情報から、どのパケットまで受信ノード１１２が受信しているか、または損失しているかの状況を送信ノード１１１が認識しているかを把握できるからである。確認応答メッセージを送信ノード１１１に送信する場合、Ack-to-Ackが示すシーケンス番号以降で、未受信のパケットで最も小さいシーケンス番号を挿入したAckフィールドを確認応答メッセージに含める。【００４５】
次に、本実施例における通信システムのパケットの再送処理の動作を説明する。【００４６】
図４は本実施例における通信システムの動作手順の一例を説明するための図である。図５は本実施例における通信システムの動作手順の一例を示すフローチャートである。【００４７】
送信ノード１１１が受信ノード１１２に送信したパケットのうちシーケンス番号が２，３，４であるパケットが損失したとする。受信ノード１１２は、シーケンス番号が２，３，４であるパケットが損失したことを認識すると、図１で示した例と同様にして、Ackフィールドに２を挿入し、第一のSackブロックに関するLeftフィールドに５を挿入し、Rightフィールドに７を挿入した確認応答メッセージ３０１を生成する。そして、生成した確認応答メッセージ３０１を送信ノード１１１に送信する（ステップ１００１）。【００４８】
なお、図４に示す例では、送信ノード１１１が確認応答メッセージ３０１を受信ノード１１２から受信したとき、シーケンス番号が９のパケットまで送信ノード１１１から受信ノード１１２に対して送信が済んでいるものとする。【００４９】
送信ノード１１１は、受信ノード１１２から確認応答メッセージ３０１を受信すると、確認応答メッセージ３０１からシーケンス番号２，３，４のパケットが損失したことを検出する。続いて、新たな一次送信パケットとしてのシーケンス番号、つまり最後に送信したシーケンス番号９以降の番号を再送パケットに付与する（ステップ１００２）。【００５０】
図４に示す例では、シーケンス番号２が付与され、一次送信されたパケット２０１の再送パケット２０２には、新たなシーケンス番号１０が与えられている。同様に、一次送信時にシーケンス番号が３だったパケットのシーケンス番号は再送時には１１に変更され、一次送信時にシーケンス番号が２だったパケットのシーケンス番号は再送時には１２に変更されている。【００５１】
また、送信ノード１１１は、受信ノード１１２から確認応答メッセージ３０１を受信した後、最初に送信する再送パケット２０２にAck-to-Ack  ５０１を挿入する（ステップ１００３）。図４の例では、確認応答メッセージ３０１からシーケンス番号６までのパケットは受信済み、または損失検出済みと判定できるため、再送パケット２０２にAck-to-Ack  ５０１として挿入されるシーケンス番号は６となる。【００５２】
続いて、送信ノード１１１は、このようにして生成した再送パケットを受信ノード１１２に送信する（ステップ１００４）。図４に示す例では、送信ノード１１１は、シーケンス番号１０およびAck-to-Ack  ５０１を含む再送パケット２０２、シーケンス番号１１が付与された再送パケット、ならびにシーケンス番号１２が付与された再送パケットを受信ノード１１２に送信する。【００５３】
受信ノード１１２は、Ack-to-Ack  ５０１を含む再送パケット２０２を受信すると、再送パケット２０２のAck-to-Ack  ５０１を読み出し、Ack-to-Ack  ５０１が示すシーケンス番号６以前のパケットに関する確認応答を送信ノード１１１に返さない。そのため、受信ノード１１２は、再送パケット２０２の到着後に送信ノード１１１に確認応答メッセージ３０２を送る場合、シーケンス番号１から６のパケットに関する情報をメッセージに含める必要がない。確認応答メッセージ３０２に含める必要のある情報は、シーケンス番号６以降で、未受信のパケットで最も小さいシーケンス番号である７が挿入されたAckフィールドのみとなる（ステップ１００５）。【００５４】
通常のSackでは、シーケンス番号２，３，４に対する再送パケット全てが受信されないとSackブロックは省略できないが、本発明では確認応答メッセージのデータ量を低減する効果があることがわかる。【００５５】
なお、本実施例では、図４に示すように、受信ノード１１２は、シーケンス番号６のパケットの受信を検出した後で確認応答メッセージ３０１を送信ノード１１１に送信しているが、シーケンス番号２のパケットの損失を検出した時点で、確認応答メッセージを送信ノード１１１に送信してもよい。【００５６】
（第２の実施例）
第１の実施例が２つのノード間の通信経路が１つである場合のパケット再送処理に関するものであるのに対し、本実施例は、２つのノード間に複数の通信経路が利用可能な場合におけるパケット再送処理に関するものである。【００５７】
本実施例の通信システムの構成を説明する。なお、本実施例の情報処理装置は、第１の実施例と同様であるため、第１の実施例と異なる点について、図３を参照して詳細に説明する。【００５８】
本実施例では、送信ノード１１１および受信ノード１１２間の通信経路として、ネットワーク５０内に複数の経路があるものとする。以下では、説明を簡単にするために、選択可能な経路が経路１と経路２の２つとする。【００５９】
本実施例では、送信ノード１１１の制御部１１７は、第１の実施例と同様にして、新たなシーケンス番号を付与した再送パケットを生成し、また、最初に送信する再送パケットにAck-to-Ackを挿入する。そして、パケットの早期到着や損失リスク分散などの優先度に応じて複数の経路から経路を選択し、選択した経路を介して受信ノード１１２に再送パケットを送信する。種々の選択方法が考えられるが、複数の経路からどのようにして１つの経路を選択するかは予めプログラムに記述されている。【００６０】
受信ノード１１２の制御部１１７は、再送パケットを受信すると、第１の実施例と同様にして、再送パケットに含まれるAck-to-Ackを読み出し、Ack-to-Ackが示すシーケンス番号以降で、未受信のパケットで最も小さいシーケンス番号を挿入したAckフィールドを確認応答メッセージに含めて送信ノードに送信する。Ack-to-Ackが示すシーケンス番号以前のパケットに関する確認応答を送信ノード１１１に返す必要がない。【００６１】
次に、本実施例における通信システムのパケットの再送処理の動作を説明する。【００６２】
図６は本実施例における通信システムの動作手順の一例を説明するための図である。【００６３】
送信ノード１１１が受信ノード１１２に送信したパケットのうちシーケンス番号が２，３，４であるパケットが損失したとする。受信ノード１１２は、シーケンス番号が２，３，４であるパケットが損失したことを認識すると、図２で示した例と同様にして、Ackフィールドに２を挿入し、第一のSackブロックに関するLeftフィールドに５を挿入し、Rightフィールドに７を挿入した確認応答メッセージ３０１を生成する。そして、生成した確認応答メッセージ３０１を送信ノード１１１に送信する。【００６４】
図６に示す例では、送信ノード１１１が確認応答メッセージ３０１を受信ノード１１２から受信したとき、経路１、経路２ともにシーケンス番号が９のパケットまで送信ノード１１１から受信ノード１１２に対して送信が済んでいるものとする。【００６５】
送信ノード１１１は、受信ノード１１２から確認応答メッセージ３０１を受信すると、確認応答メッセージ３０１からシーケンス番号２，３，４のパケットが損失したことを検出する。続いて、新たな一次送信パケットとしてのシーケンス番号、つまり最後に送信したシーケンス番号９以降の番号を再送パケットに付与する。【００６６】
また、送信ノード１１１は、受信ノード１１２から確認応答メッセージ３０１を受信した後、最初に経路１を介して送信する再送パケット２０４にAck-to-Ack  ５０１を挿入する。図６の例では、確認応答メッセージ３０１の情報から、経路１を介して送信ノード１１１から受信ノード１１２に送信されたパケットのうちシーケンス番号６までのパケットは受信済み、または損失検出済みと判定できるため、再送パケット２０４にAck-to-Ack  ５０１として挿入されるシーケンス番号は６となる。【００６７】
送信ノード１１１は、このようにして生成した再送パケットを受信ノード１１２に送信する際、再送パケットの経路として複数の経路から選択する。早期到着を優先すれば、例えば、遅延や損失率などの、受信ノード１１２からフィードバックされる情報をもとに送信ノード１１１が推定可能な経路の状態指標に基づいて経路を選択する。また、単純に損失リスクを分散することを優先すれば、例えば、一次送信に用いた経路でパケットの損失があれば、その経路とは異なる経路を選択する。【００６８】
図６に示す例では、送信ノード１１１は、シーケンス番号２を付与したパケット２０１を一次送信時に経路１を介して受信ノード１１２に送信したが、同じパケットを再送する際、新たなシーケンス番号１０を付与した再送パケット２０３として経路２を介して受信ノード１１２に送信する。【００６９】
これと同様にして、一次送信時にシーケンス番号３が付与され、経路１を介して送信されたパケットは、再送時にシーケンス番号１１が付与され、経路２を介して送信されている。また、一次送信時にシーケンス番号４を付与され、経路１を介して送信されたパケットは、再送時にシーケンス番号１２が付与され、経路２を介して送信されている。【００７０】
受信ノード１１２は、Ack-to-Ack  ５０１を含む再送パケット２０３を経路２を介して受信すると、再送パケット２０３のAck-to-Ack  ５０１を読み出し、Ack-to-Ack  ５０１が示すシーケンス番号６以前のパケットに関する確認応答を送信ノード１１１に返さない。そのため、受信ノード１１２は、再送パケット２０３の到着後に送信ノード１１１に確認応答メッセージ３０２を送る場合、確認応答メッセージ３０２に含む必要のある情報はAckフィールドのみとなる。経路１における確認応答メッセージ３０２のAckフィールドに、シーケンス番号６以降で、未受信のパケットで最も小さいシーケンス番号である７が挿入されている。【００７１】
一方、受信ノード１１２は、経路２を介してシーケンス番号８のパケットを受信すると、Ackフィールドに９を挿入した確認応答メッセージ３０２を送信ノード１１１に送信する。続いて、経路２を介してシーケンス番号９のパケットを受信すると、Ackフィールドに１０を挿入した確認応答メッセージ３０３を送信ノード１１１に送信する。その後、上述の再送パケット２０３を受信すると、Ackフィールドに１１を挿入した確認応答メッセージ３０３を送信ノード１１１に送信する。これ以降の再送パケットについても同様である。この確認応答メッセージ３０３が、経路２を経由して送出された再送パケットを受信ノード１１２が受信したことの確認情報となる。【００７２】
本実施例では、図６に示すように、再送パケット２０３は、経路１を介して送信ノード１１１から送信された、シーケンス番号８，９のパケットよりも遅く送信されるが、経路２を介して送信されたことで、経路１を経由する２つのパケットよりも先に受信ノード１１２に到着する。これにより、受信ノード１１２は、シーケンス番号８，９のパケットよりもシーケンス番号１０の再送パケット２０３を先に受信することになる。しかし、受信ノード１１２は、経路毎にパケットの処理を行うため、経路２でシーケンス番号１０の再送パケットを受信しても、経路１でのシーケンス番号８，９の再送を要求することはない。【００７３】
このように、本実施例では、複数の経路を用いて一次送信パケットおよび再送パケットを並列に送信する際に、経路間ジッタにより生じる冗長な再送を防ぐ効果がある。【００７４】
上述の第１および第２の実施例では、２つのノード間の通信で損失したパケットを再送する方法について説明した。これらにより情報の損失は救済されるが、パケットの再送の度に新たなシーケンス番号が発行されるため、受信側では、シーケンス番号を利用しても、パケットの送信順序にデータを復元することはできない。したがって本発明の適用にあたっては、シーケンス番号を付与されるデータパケットが、データ送信順序の復元に必要な情報を別個に含んでいることが前提となる。【００７５】
以下では、受信するパケットの順序を制御する方法の一例を説明する。【００７６】
上述したパケット再送機能とパケットの順序制御機能の両方をノードで実現するには、パケットの再送制御と順序制御とに、それぞれ異なるシーケンス番号系列（例えば、文献２を参照）を適用すればよい。【００７７】
図７はパケットの再送制御と順序制御を行うノードの一構成例を示すブロック図である。ここでは、図７に示すノードが、外部から受信するパケットをその宛先となる相手ノードに転送する場合で各構成を説明する。【００７８】
図３に示した制御部１１７は、図７に示す再送制御部６１０、スケジューリング部６２０および順序制御部６３０を有する。ＣＰＵがプログラムを実行することで、再送制御部６１０、スケジューリング部６２０および順序制御部６３０が仮想的に構成される。図３に示した通信部１１５は、図７に示す受信部６０１−１，６０１−２、送信部６０２−１，６０２−２、外部送信部６０３および外部受信部６０４を含む構成である。【００７９】
また、制御部１１７には、パケットを一時的に保存するための順序制御キュー７０１−１〜７０１−３、セッションキュー７０２−１〜７０２−３および再送要求キュー７０３が設けられている。【００８０】
外部受信部６０４には、パケットの送信先となる相手ノードを除く他のノードからのデータパケットが入力される。外部送信部６０３は、相手ノードを含む他のノードにパケットを送信する。【００８１】
順序制御部６３０は、入力されるデータパケットを、順序制御を行うための転送単位に分割し、それぞれの転送単位に順序制御用のシーケンス番号を付与する。順序制御を行うための転送単位をセッションと称し、セッション単位での送信順序の復元に用いるシーケンス番号をセッションシーケンス番号と称する。順序制御部６３０は、セッションシーケンス番号を付与したパケットをセッションキュー７０２−１〜７０２−３に挿入する。なお、パケットの再送処理でパケット損失検出に用いるシーケンス番号を再送シーケンス番号と称する。【００８２】
順序制御を行うための転送単位の例としては、中間ノードにおいて順序制御が保たれるとエンドホストの処理が軽減されるTCPセッションやRTSP（Real  Time  Streaming  Protocol）セッションなどが挙げられる。【００８３】
送信部６０２−１，６０２−２は相手ノードにパケットを送信し、受信部６０１−１，６０１−２は相手ノードからのパケットを受信する。図７は、相手ノードとの送信経路の数に対応して送信部と受信部がそれぞれ２つある場合を示している。【００８４】
スケジューリング部６２０は、セッションキュー７０２−１〜７０２−３からパケットを取得すると、各パケットについて、相手ノードに送信する際に用いる経路を決定する。送信経路決定のアルゴリズムは任意であるが、例えば、上述の文献２に開示されているPAC（Predict-and-Correct）スケジューラを用いることが可能である。【００８５】
再送制御部６１０は、初回送信処理として、送信経路が決定されたパケットをスケジューリング部６２０より受け取ると、再送IDと再送シーケンス番号をパケットに付与して送信部６０２−１，６０２−２のいずれかを介して相手ノードに送出する。再送IDとは、文献２に示される再送IDと同義で、任意の再送制御単位の各々を識別するための識別子である。【００８６】
ここでは、送信経路毎に再送を区別している。つまり、再送IDと経路とが一対一に対応している。再送制御部６１０は、パケットの再送に備え、全ての送信対象のパケットを、対応する再送シーケンス番号とともに記憶部８００に格納する。自装置がパケットの受信側であれば、相手ノードに返信するパケットには、必要に応じて確認応答メッセージおよびAck-to-Ackを含める。これらのメッセージやAck-to-Ackの作成を、再送制御部６１０はパケットを受信した際に行う。【００８７】
次に、図７に示したノードが相手ノードからパケットを受信したときのパケット受信処理について説明する。【００８８】
相手ノードから受信部６０１−１，６０１−２を介してデータパケットを受信すると、再送制御部６１０は、受信したパケットを、そのパケットが属するセッションシーケンス番号に応じて順序制御キュー７０１−１〜７０１−３に挿入する。また、パケットのセッションシーケンス番号とAck-to-Ackとを記憶部８００に記録する。そして、記憶部８００に既に格納されている、過去に受信したパケットのセッションシーケンス番号を参照して相手ノードに通知する確認応答メッセージを作成する。【００８９】
相手ノードに送信する任意のデータパケットに確認応答メッセージを添付することで、その内容を相手ノードに通知してもよいが、データパケットとは別に単独のパケットとして送信することで、相手ノードに通知してもよい。【００９０】
相手ノードから受信したパケットに確認応答メッセージが含まれていると、再送制御部６１０は、パケット損失があるか否かを調べるために、確認応答メッセージを解析する。解析の結果、パケットの損失を検出すると、再送の必要なパケットを記憶部８００に格納されている送信済みパケットから抽出する。抽出したパケットを再送要求キュー７０３に格納し、これらのパケットを記憶部８００から削除する。再送要求キュー７０３に格納されるパケットには、セッションシーケンス番号が付与されている。【００９１】
パケット損失の検出は任意の方法でよく、例えば、文献２に開示されている方法を用いることが可能である。ただし、パケット損失を検出しても、対応する経路について受信済みのAck-to-Ackが示すシーケンス番号よりも再送しようとするパケットのシーケンス番号が小さい場合には、相手ノードが受信を確認したパケットと判断する。【００９２】
再送制御部６１０は、Ack-to-Ackを参照することで受信確認済みと判断したパケットと、確認応答メッセージから相手ノードでの受信を確認できたパケットについては、再送要求キュー７０３への格納は行わず、対応する送信済みのパケットを記憶部８００から削除する。【００９３】
なお、相手ノードから受信するデータパケットについて、損失があったとき、損失したパケットか、受信確認したパケットのうち最後に受信したパケットの再送シーケンス番号をAck-to-Ackに挿入し、次に送信するパケットに添付する。【００９４】
次に、図７に示したノードが相手ノードにパケットを再送する際のパケット再送処理について説明する。【００９５】
パケットの再送は、再送要求キュー７０３に保存されたパケットを送信することにより行われる。このとき再送要求キュー７０３はセッションキューの１つとして扱われる。以下に、具体的な手順を説明する。【００９６】
スケジューリング部６０２は、パケット送信の際、セッションキュー７０２−１〜７０２−３と再送要求キュー７０３のうちいずれかから送信対象のパケットを選択する。選択結果がいずれのキューであっても、上述のアルゴリズムにより経路の選択を行う。ここでは、パケットの再送なので、再送要求キュー７０３のパケットを選択する。そして、再送要求キュー７０３のパケットを送信する際、再送IDおよび再送シーケンス番号を、セッションキュー内のパケットを一次送信する場合と同様にして決定する。【００９７】
順序制御部６３０は、順序制御キュー７０１−１〜７０１−３に一時保存されるパケットのセッションシーケンス番号を参照し、順番のそろったものから外部送信部６０３に渡す。外部送信部６０３は順序制御キュー７０１−１〜７０１−３から受け取るパケットを相手ノードに送信する。【００９８】
本実施例では、同じデータの一次送信パケットと再送パケットは、異なる再送IDおよび再送シーケンス番号で送信されるが、セッションシーケンス番号は同一に保たれるため、受信側では、送信順序の回復が可能となる。【００９９】
本発明によれば、受信ノードは、送信ノードから確認済み通知メッセージが添付されているパケットを受け取ることで、そのメッセージそれよりも小さいシーケンス番号のパケットについて応答確認メッセージを送信ノードに通知する必要がない。具体的に説明すると、シーケンス番号ｎの確認済み通知を送信ノードから受信した受信ノードは、シーケンス番号がｎ未満のパケットについての通知を送信ノードから受信しなくても、以降の確認応答メッセージ作成の際には受信済みとして扱う。そのため、確認済み通知を受信した以降は、確認応答メッセージに含まれるSackブロック数を低減することができる。よって、ネットワークの通信負荷を低減し、帯域利用効率の低下が抑制される。【０１００】
また、シーケンス番号系列に基づいて決められた番号を再送パケットに付与することで、受信ノードは、再送パケットを送信順と異なる順序で受信しても、送信順を知ることが可能となる。【０１０１】
また、複数のシーケンス番号系列を利用可能である場合、一次送信に用いるシーケンス番号系列よりも他のシーケンス番号系列の方がパケットの送信速度が速ければ、再送パケットを送信する際に、送信速度の速いシーケンス番号系列の番号を付与して送信することが可能となる。【０１０２】
また、送信ノードが経路毎に異なる再送IDを付与して複数の再送IDを用いる場合、一次送信のときと異なる経路を用いて再送パケットを送信する際、再送IDも一次送信時と異なるものを選択する。受信ノードは、同じシーケンス番号のパケットを複数受信しても、再送IDで区別することにより、経路毎に送信ノードから送信された順にパケットを並べることが可能となる。【０１０３】
また、送信ノードが、受信ノード宛に送信するパケットの全てに確認済み通知メッセージを含めるようにしてもよい。この場合、受信ノードは、送信ノードからパケットを受信する度に、自ノードがどのパケットまで受信確認または損失検出しているかを送信ノードが確認していることを知ることができる。【０１０４】
さらに、再送パケットは新たな再送IDおよびシーケンス番号が付与されることから、モバイルインバースマックスで生じる、再送ID間のジッタの影響で生じる冗長な再送を防ぐことができる。【０１０５】
なお、本発明は上記実施例に限定されることなく、発明の範囲内で種々の変形が可能であり、それらも本発明の範囲内に含まれることはいうまでもない。【０１０６】
この出願は、２００６年９月５日に出願された日本出願の特願２００６−２３９７９３の内容が全て取り込まれており、この日本出願を基礎として優先権を主張するものである。
【図１】
2008029793.tif 000003
【図２】
2008029793.tif 000004
【図３】
2008029793.tif 000005
【図４】
2008029793.tif 000006
【図５】
2008029793.tif 000007
【図６】
2008029793.tif 000008
【図７】
2008029793.tif 000009
【国際調査報告】
2008029793.tif 000010
2008029793.tif 000011