(本発明の基礎となった知見)
以下、本発明の基礎となった知見について説明する。
図1は、CCNネットワーク(以下、CCN網)を用いた通信制御システムの構成の一例を示す図である。コンテンツを要求するクライアント100は、CCN網101を介して、コンテンツを提供するパブリッシャー106と接続されている。コンテンツのデータの送受信は、フェイスと呼ばれる通信インターフェイスを介して行われる。CCN網101には、一つ以上のルータ102が接続されている。
ルータ102は、CCN網101上を流通するコンテンツのデータを蓄積するCS(Content Store)103と、受信及び転送した興味パケットについて記録するPIT(Pending Interest Table)104と、興味パケットを転送する経路を示したFIB(Forwarding Information Base)105と、を備えている。
CCNでは、コンテンツの名前を識別子として通信を行うことに加え、CCN網101上の各ルータ102が備えるCS103を活用する。これにより、複数のクライアント100が、同一のコンテンツを取得する場合に、より効率的なデータ配信を実現可能となっている。クライアント100及びパブリッシャー106も、それぞれ、PIT107、108を有している。尚、PIT104、107、108は同様の構成であるので、以下の説明では、PIT102、107、108を総称する場合、PIT200と記載する。
ここで、PIT200の構成、PIT200への情報の記録方法、及びPIT200に記録されている情報の消去方法について説明する。
図2は、PIT200の構成の一例を示す図である。PIT200には、興味パケットの方向(受信したか送信したか)を示す属性201と、興味パケットが要求するコンテンツの名前202と、興味パケットを受け取ったフェイスを示すフェイス203(フェイス情報)と、を組み合わせた(対応付けた)エントリが記録される。
また、PIT200は、受信PIT204と送信PIT205とを備える。受信PIT204には、受信した興味パケットについてのエントリ、つまり、図2において属性201が「incoming」であるエントリが記録される。送信PIT205には、送信した興味パケットについてのエントリ、つまり、図2において属性201が「outgoing」であるエントリが記録される。
例えば、ルータ102が、名前「a」のコンテンツを要求する興味パケットをフェイス「eth1」によって受け取った後、フェイス「eth0」から送出したとする。
この場合、ルータ102は、図2に示すように、属性201「Incoming」、名前202「a」及びフェイス203「eth1」を組み合わせたエントリを受信PIT204に記録する。また、ルータ102は、図2に示すように、属性201「Outgoing」、名前202「a」及びフェイス203「eth0」を組み合わせたエントリを送信PIT205に記録する。
別の例として、ルータ102が、名前「c」のコンテンツを要求する興味パケットをフェイス「eth0」によって受け取った後、ルータ102内で当該興味パケットの転送を行うための処理中であるとする。つまり、ルータ102において、当該興味パケットの送信は行われていないとする。
この場合、ルータ102は、図2に示すように、属性201「Incoming」、名前202「c」及びフェイス203「eth0」を組み合わせたエントリのみを受信PIT204に記録し、送信PIT205にはエントリを記録しない。
ルータ102は、興味パケットの転送(受信及び送信)を行うことがあるため、受信PIT204及び送信PIT205の双方にエントリを記録する。一方、クライアント100は、興味パケットの送信しか行わないため、送信PIT205にのみエントリを記録する。また、パブリッシャー106は、興味パケットの受信しか行わないため、受信PIT204にのみエントリを記録する。
以下、受信PIT204に記憶されているエントリを、受信PIT204のエントリと記載する。送信PIT205に記憶されているエントリを、送信PIT205のエントリと記載する。
送信PIT205のエントリは、当該エントリに対応するデータパケットを受信したときに消去される。送信PIT205のエントリに対応するデータパケットとは、送信した興味パケットに対応するデータパケットを示す。興味パケットに対応するデータパケットとは、当該興味パケットが要求するコンテンツを構成するデータパケットを示す。
例えば、図2に示すように、属性201「Outgoing」、名前202「a」及びフェイス203「eth0」を組み合わせたエントリが送信PIT205に記録されていたとする。この場合に、フェイス「eth0」が、名前「a」のコンテンツを構成するデータパケットを受け取ったとする。この場合、ルータ102は、当該データパケットに対応する上記送信PIT205のエントリ(属性201「Outgoing」、名前202「a」及びフェイス203「eth0」の組み合わせ)を消去する。
つまり、送信PIT205のエントリを参照すれば、ルータ102及びクライアント100がそれぞれ送信した興味パケットに対応するデータパケットの中で、受信していないデータパケットに関する情報を把握することができる。
例えば、送信PIT205のエントリに含まれる名前202を参照することで、受信していないデータパケットがどのような名前のコンテンツを構成するデータパケットであるのかを把握することができる。また、送信PIT205のエントリに含まれるフェイス203を参照することで、受信していないデータパケットが、どのフェイスによって送出された興味パケットに対応するデータパケットであるのかを把握することができる。
このように、送信PIT205のエントリ(未受信情報)は、送信した興味パケットに対応するデータパケットの中で、受信していないデータパケットを示している。
一方、受信PIT204のエントリは、当該エントリに対応するデータパケットを送信したときに消去される。受信PIT204のエントリに対応するデータパケットとは、当該エントリに対応する興味パケット、つまり、受信した興味パケットに対応するデータパケットを示す。
例えば、図2に示すように、属性201「Incoming」、名前202「c」、及びフェイス203「eth0」とを組み合わせたエントリが受信PIT204に記録されていたとする。この場合に、フェイス「eth0」が名前「c」のコンテンツを構成するデータパケットを送出したとする。この場合、ルータ102は、当該データパケットに対応する上記受信PIT204のエントリ(属性201「Incoming」、名前202「c」及びフェイス203「eth0」の組み合わせ)を消去する。
つまり、受信PIT204のエントリを参照すれば、ルータ102及びパブリッシャー106がそれぞれ受信した興味パケットに対応するデータパケットの中で、送信が完了していないデータパケットに関する情報を把握することができる。
例えば、受信PIT204のエントリに含まれる名前202を参照することで、送信が完了していないデータパケットが、どのような名前のコンテンツを構成するデータパケットであるのかを把握することができる。また、受信PIT204のエントリに含まれるフェイス203を参照することで、送信が完了していないデータパケットが、どのフェイスによって受け取られた興味パケットに対応するデータパケットであるのかを把握することができる。
このように、受信PIT204に記憶されているエントリ(未送信情報)は、受信した興味パケットに対応するデータパケットの中で、送信が完了していないデータパケットを示している。
以上のように、CCNでは、受信PIT204及び送信PIT205を用いて、興味パケット及びデータパケットの送信、受信、及び転送を制御する。
しかし、従来のIPによる通信と同様、CCNによる通信は、ベストエフォート型(品質の保証がない)サービスとして提供される場合がある。つまり、CCNによる通信においても、ネットワークの容量や通信リンクの品質の問題から、パケットロスが発生する可能性がある。したがって、CCNを用いて安定した通信を実現するために、CCN上で高信頼性通信を実現する技術が必要とされている。具体的には、パケットロスの検出と、ロスしたパケットを回復するための再送処理である。
従来のIPによる通信では、一般的に、ルータは、データの転送に関してのステートを持たない。このため、パケットロスの検出や再送処理は、ネットワークの両端に位置するクライアントあるいはサーバのみが行うEnd to End(E2E)のアプローチが一般的であった。
一方、CCNにおけるルータ102は、コンテンツの名前を用いてルーティングを行うために、受信した興味パケットと転送した興味パケットに関するステートをPIT200に保持している。そのため、CCNによる通信では、パケットロスの検出や再送処理に関しても、データパケットの転送経路上のルータ102で実行することが可能となる。
このように、CCNによる通信では、転送経路の途中に位置するルータ102が再送処理を行うことで、転送経路の端に位置するパブリッシャー106とクライアント100との間で再送処理を行うE2Eのアプローチと比べて、素早くパケットロスを検出して再送要求を行うことが可能となる。その結果、パケットロスに起因するデータ到着の遅れ等の影響を、より小さくすることができる。
しかし、上記の転送経路中のルータ102による効率的な再送処理を実装するためには、パケットロスを適切に検出する必要がある。そこで、特許文献1では、各クライアントが興味パケットを送信してからの経過時間を計測し、当該経過時間がある閾値(タイムアウト値)が示す時間を超えるまでにデータパケットを受信できなかった場合にパケットロスが発生したと判断する方法が開示されている。また、特許文献2では、コンテンツを要求した装置が受信したデータパケットのシーケンス番号を確認し、シーケンス番号の飛び(不連続)を検出した際に、パケットロスが発生したと判断する方法が開示されている。
しかし、特許文献1や特許文献2に開示された方法を用いても、CCNによる通信において、パケットロスを適切に検出することは困難であった。
特許文献1に開示された方法では、パケットロスの検出を行うために、タイムアウト値を適切な値に設定することが非常に重要である。一般的にタイムアウト値を決定する際には、コンテンツのデータの取得に必要な時間を定常的に観測し、その観測値に基づいて最適なタイムアウト値を計算する必要がある。しかし、CCNによる通信では、コンテンツのデータの取得時間がダイナミックに変動するため、このような方法の適用は困難である。
同一のパブリッシャー106が有するコンテンツのデータを連続的に取得する場合も、コンテンツのデータがパブリッシャー106にしか存在していないか、あるいはCCN上のルータ102のCS103にも蓄積されているかによって、コンテンツのデータの取得に必要な時間は大きく異なる。この結果は、コンテンツのデータの取得時間の揺らぎとして観測されることになる。
例えば、ルータ102のCS103からコンテンツのデータを取得する場合、パブリッシャー106からデータを取得する場合に比べて、より短い時間でコンテンツのデータを取得することができる。しかし、クライアント100は、要求したコンテンツのデータがルータ102のCS103から送信されたのか、パブリッシャー106から送信されたのかを予測することができない。
このため、ルータ102のCS103から送信されたデータの取得時間に合わせてタイムアウト値を設定すると、実際にはパブリッシャー106からデータが送信され、パケットロスが発生していないにもかかわらず、上記経過時間が当該タイムアウト値が示す時間を超えたために、誤ってパケットロスを検出し、無駄な再送処理を行う虞がある。
これとは反対に、パブリッシャー106から送信されたデータの取得時間に合わせてタイムアウト値を設定すると、ルータ102のCS103からデータが送信されたときに発生したパケットロスを迅速に検出することができず、パケットロスによるデータの到着の遅れを増大させる。
一方、特許文献2に開示された方法は、IPを用いたリアルタイム通信で一般的に用いられる方法である。しかしながら、CCNによる通信では、データパケットの到着順序は、コンテンツをパブリッシャー106から受け取るか、ルータ102のCS103から受け取るか、また、どのルータ102から受け取るかなどによって、容易に入れ替わる。このため、パケットロスが発生していなくても、シーケンス番号の飛び(不連続)は容易に発生する。その結果、パケットロスの発生を誤って検出する可能性がある。
本開示の目的は、上記従来の課題を解決するもので、コンテンツ指向型ネットワークにおけるパケットロスをより適切に検出することが可能となる技術を提供することである。
本開示の一態様による通信制御装置は、コンテンツ指向型ネットワークに接続した通信制御装置であって、興味パケットを送信する送信部と、前記興味パケットに対応するデータパケットを受信する受信部と、前記送信部が送信した興味パケットに対応するデータパケットの中で、受信していないデータパケットを示す未受信情報が記録される送信PITを記憶するメモリ部と、前記受信部が受信したデータパケットに、送信が完了していないデータパケットを示すPIT情報が含まれている場合、当該PIT情報と、前記送信PITと、を用いて、前記興味パケットに対応するデータパケットのパケットロスを検出するパケット処理部とを備える。
本構成によれば、メモリ部が記憶する送信PITに記録されている未受信情報を用いて、送信部が送信した興味パケットに対応するデータパケットの中で、受信していないデータパケットを把握することができる。また、受信部が受信したデータパケットにPIT情報が含まれている場合、当該PIT情報を用いて、上記興味パケットの送信先の装置において送信が完了していないデータパケットを把握することができる。
このため、本構成によれば、送信PITを用いて把握した、受信していないデータパケットと、PIT情報を用いて把握した、上記興味パケットの送信先の装置において送信が完了していないデータパケットと、が一致しないことによって、興味パケットに対応するデータパケットのパケットロスを適切に検出することができる。
また、前記受信部は、更に、他装置から前記興味パケットを受信し、前記メモリ部は、更に、前記受信部が受信した興味パケットに対応するデータパケットの中で、送信が完了していないデータパケットを示す未送信情報が記録される受信PITを記憶し、前記送信部は、更に、前記興味パケットに対応するデータパケットを前記他装置へ送信し、前記パケット処理部は、前記受信PITに記録されている前記未送信情報を前記PIT情報として、前記送信部が送信するデータパケットに含めることとしてもよい。
本構成によれば、受信PITに記録されている未送信情報が、PIT情報として、送信部が他装置へ送信するデータパケットに含められる。これにより、当該他装置は、受信したデータパケットにPIT情報として含まれている未送信情報を用いて、自身が送信した興味パケットに対応するデータパケットの中で、当該興味パケットの送信先の装置において送信が完了していないデータパケットを把握することができる。
その結果、当該他装置は、当該把握したデータパケットと、自身が送信した興味パケットに対応するデータパケットの中で、受信していないデータパケットと、が一致しない場合に、当該興味パケットに対応するデータパケットのパケットロスがあったことを適切に検出することができる。
また、前記未送信情報には、当該未送信情報が示すデータパケットに対応する興味パケットを受け取った通信インターフェイスを示すフェイス情報が含まれ、前記パケット処理部は、前記受信PITから、前記送信部が送信するデータパケットを示す前記未送信情報に含まれているフェイス情報を抽出し、前記受信PITに記録されている、当該抽出したフェイス情報と同一のフェイス情報を含む前記未送信情報を前記PIT情報として当該データパケットに含め、前記送信部は、当該データパケットを前記抽出されたフェイス情報が示す通信インターフェイスによって送出させることとしてもよい。
本構成によれば、受信PITから、送信部が送信するデータパケットを示す未送信情報に含まれているフェイス情報が抽出される。これにより、当該抽出されたフェイス情報によって、当該データパケットに対応する興味パケットを受け取った通信インターフェイスを特定することができる。その結果、当該データパケットを当該特定した通信インターフェイスによって返信する必要があると判断し、当該特定された通信インターフェイスを、当該データパケットを送出させるフェイスとして特定することができる。
そして、本構成によれば、受信PITに記録されている、上記抽出したフェイス情報と同一のフェイス情報を含む未送信情報が、PIT情報として送信部が送信するデータパケットに含められる。これにより、上記特定した通信インターフェイスと同一の通信インターフェイスによって送出する必要があるが、その送出が完了していないデータパケットを示す未送信情報が、送信部が送信するデータパケットに含められる。そして、当該データパケットが、上記特定した通信インターフェイスによって送出される。
このため、当該データパケットを受信した他装置は、当該データパケットにPIT情報として含まれている未送信情報から、自身が送信した興味パケットを受け取った通信インターフェイスによる送出が完了していないデータパケットを把握することができる。
その結果、当該把握したデータパケットと当該他装置が送信した興味パケットに対応する、受信していないデータパケットとが一致しなかった場合に、当該他装置は、当該興味パケットに対応するデータパケットのパケットロスがあったことを適切に検出することができる。
また、前記パケット処理部は、前記受信部が受信したデータパケットに含まれている前記PIT情報を削除した後、前記受信PITに記録されている前記未送信情報を前記PIT情報として、当該データパケットに含めることとしてもよい。
本構成によれば、データパケットに含まれていたPIT情報が、自身が有する受信PITに記憶されている未送信情報に更新され、当該更新後のPIT情報を含むデータパケットが他装置へ送信される。
このため、当該データパケットを受信した他装置は、当該データパケットに含まれるPIT情報から、当該データパケットを送信した装置が送信を完了していないデータパケットを把握することができる。これにより、当該他装置は、当該データパケットを送信した装置と当該他装置との間の転送経路におけるパケットロスを適切に検出することができる。このため、本構成の通信制御装置をコンテンツ指向型ネットワークに接続すれば、データパケットの転送経路毎に個別にパケットロスを検出することが可能となる。
また、前記パケット処理部は、前記受信部が受信したデータパケットに含まれている前記PIT情報と前記送信PITに記録されている前記未受信情報とを比較し、前記PIT情報が示すデータパケットと当該未受信情報が示すデータパケットとが一致しなかった場合に、当該一致しなかったデータパケットのパケットロスを検出し、更に、当該一致しなかったデータパケットに対応する興味パケットを前記送信部に再送させることとしてもよい。
本構成によれば、PIT情報が示す、送信が完了していないデータパケットと、送信PITに記録されている未受信情報が示す、受信が完了していないデータパケットとが一致しないことによって、当該一致しなかったデータパケットのパケットロスを適切に検出することができる。
また、本構成によれば、興味パケットに対応するデータパケットのパケットロスを検出した場合に、当該データパケットに対応する興味パケットを効率良く再送することができる。
また、前記パケット処理部は、前記比較において、前記送信PITに記録されている前記未受信情報の中で、記録されてからの経過時間が所定の閾値以下の前記未受信情報を用いないこととしてもよい。
例えば、本構成の第一の装置が第一の興味パケットを送信後、第二の装置が第一の興味パケットを受信する前に、過去に受信した第二の興味パケットに対応する第二のデータパケットを送信したとする。この場合、第二の装置は、第一の興味パケットを受信していないので、第二のデータパケットに、第一の興味パケットに対応する第一のデータパケットの送信が完了していないことを示すPIT情報を含めることができない。
その後、第一の装置において、第一のデータパケットを示す未受信情報が送信PITに記録されてからの経過時間が所定の閾値になる前に、受信部が第二のデータパケットを受信したとする。
このような場合に、本構成の第一の装置では、送信PITに記録されている第一のデータパケットを示す未受信情報を用いずに上記比較を行う。このため、第二のデータパケットに含まれているPIT情報が示すデータパケットに、第一のデータパケットが含まれていないことによって、誤って第一のデータパケットのパケットロスを検出することを防止することができる。
また、前記パケット処理部は、更に、前記送信PITに記録されている前記未受信情報に対してタイムアウト値を設定し、前記未受信情報が前記送信PITに記録されてから、当該未受信情報が示すデータパケットを前記受信部が受信するまでの時間が前記タイムアウト値を超えた場合に、当該データパケットのパケットロスを検出し、更に、当該データパケットに対応する興味パケットを前記送信部に再送させることとしてもよい。
本構成によれば、データパケットに対応する未受信情報が送信PITに記録されてからの経過時間がタイムアウト値を超える度に、当該データパケットのパケットロスが検出され、当該データパケットに対応する当該興味パケットが再送される。
このため、興味パケットに対応するデータパケットのパケットロスが発生したとしても、当該データパケットの適切な再送処理が可能となる。その結果、信頼性を損なうことなく、当該データパケットを取得することができる。
また、前記パケット処理部は、前記送信部が一のコンテンツを構成する複数のデータパケットをそれぞれ送信する場合、前記受信PITに記録されている、前記一のコンテンツを構成するデータパケットを示す前記未送信情報のみを前記PIT情報として、前記送信部が送信するデータパケットに含めることとしてもよい。
一定期間、送信部が一のコンテンツを構成する複数のデータパケットをそれぞれ連続して集中的に送信するとする。本構成によれば、このような場合に、受信PITに記録されている、当該コンテンツとは他のコンテンツを構成するデータパケットを示す未送信情報をPIT情報として、送信するデータパケットに含めることを回避することができる。これにより、当該期間中、データパケットに含まれるPIT情報のサイズを軽減することができる。その結果、コンテンツ指向型ネットワークの通信負荷を軽減することができる。
また、前記パケット処理部は、前記受信部が一のコンテンツを構成する複数のデータパケットをそれぞれ受信した場合、当該受信したデータパケットに含まれている前記PIT情報と、前記送信PITに記録されている、前記一のコンテンツを構成するデータパケットを示す前記未受信情報と、を用いて、前記検出を行うこととしてもよい。
一定期間、受信部が一のコンテンツを構成する複数のデータパケットのそれぞれを連続して集中的に受信するとする。本構成によれば、このような場合に、当該期間中、受信したデータパケットに含まれるPIT情報と、送信PITに記録されている、当該コンテンツを構成するデータパケットを示す未受信情報と、を用いて、当該コンテンツを構成するデータパケットのパケットロスだけを集中的に検出することができる。
また、本開示は、以上のような特徴的な処理を実行するための処理部を備える通信制御装置だけでなく、当該通信制御装置における上記特徴的な処理を実行する通信制御方法も開示する。
尚、以下で説明する実施の形態は、いずれも本開示の一具体例を示すものである。以下の実施の形態で示される数値、形状、構成要素、ステップ、ステップの順序等は、一例であり、本開示を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。また全ての実施の形態において、各々の内容を組み合わせることも出来る。
(実施の形態1)
実施の形態1におけるCCNネットワーク(以下、CCN網)を用いた通信制御システムは、パブリッシャー106及びルータ102が、各装置自身の受信PIT204のエントリが示す情報を、下位のルータ102及びクライアント100に対して送信することを特徴とする。また、下位のルータ102及びクライアント100が、受信した他装置の受信PIT204のエントリが示す情報を用いて、パケットロスを検出することを特徴とする。
ここで、上位の装置とは、CCN網101上のある装置から見て、興味パケットを送信する方向に位置する装置(興味パケットの送信先の装置)を示す。CCN網101上の装置とは、CCN網101に接続された装置、つまり、クライアント100、ルータ102、又はパブリッシャー106を示す。下位の装置とは、興味パケットに対応するデータパケットを送信する方向に位置する装置(データパケットの送信先の装置)を示す。
具体的には、CCN網101上の各装置は、データパケットを下位の装置に送信する場合、自身の受信PIT204から、当該データパケットに対応するエントリに含まれるフェイス203を抽出する。
これにより、各装置は、当該抽出したフェイス203が示すフェイスを、当該データパケットに対応する興味パケットを受け取ったフェイスとして特定する。そして、各装置は、当該データパケットを当該特定したフェイスから返信する必要があると判断し、当該抽出したフェイス203が示すフェイスを、当該データパケットを送出させるフェイスとして特定する。
そこで、当該各装置は、自身の受信PIT204に記録されているエントリの中で、上記の抽出したフェイス203と同一のフェイス203を含むエントリから、名前202を抽出する。そして、当該各装置は、当該抽出した名前202を、送信が完了していないデータパケットを示す情報(以下、PIT情報)として、当該データパケットに含める。これにより、各装置は、上記特定したフェイスと同一のフェイスによって送出する必要があるが、その送出が完了していないデータパケットを示す情報を、当該データパケットに含める。
そして、当該各装置は、上記の抽出したフェイス203が示すフェイスに当該データパケットを送出させる。
一方、データパケットを受信した下位の装置は、受信したデータパケットに含まれている、上位の装置の受信PIT204のエントリから得られた上記PIT情報と、自身の送信PIT205のエントリの中で、当該データパケットを受信したフェイスを示すフェイス203と同一のフェイス203を含むエントリとを比較する。
当該比較の結果、PIT情報が示す名前202と、送信PIT205のエントリに含まれる名前202とが一致していれば、当該装置はパケットロスを検出しない。一方、一致していなければ、当該装置は、当該一致していない名前202のコンテンツを構成するデータパケットのパケットロスを検出する。そして、当該装置は、自身の送信PIT205のエントリに従い、当該一致していない名前202のコンテンツを構成するデータパケットに対応する興味パケットを再送する。
また、各装置は、データパケットの転送を行う場合、受信したデータパケットに含まれているPIT情報を削除した後、自身の受信PIT204のエントリの情報をPIT情報として当該データパケットに含めて、下位の装置へ送信する。つまり、各装置は、受信したデータパケットに含まれているPIT情報を、自身の受信PIT204のエントリが示す情報に更新する。これにより、データパケットの転送経路毎に個別にパケットロスの検出と、ロスしたデータパケットの再送制御を可能にする。
以下、図面を用いて詳細に説明する。図3は、CCN網101(コンテンツ指向型ネットワーク)に接続された各装置の概略構成の一例を示す図である。クライアント100は、上述したルータ102に相当するルータA102A及びルータB102Bを介して、パブリッシャー106と接続されている。クライアント100、ルータA102A、ルータB102B、パブリッシャー106は、それぞれ、PIT107、PIT104A、PIT104B、PIT108を備えている。
307は、クライアント100が備える、フェイス「eth0」を示している。308、309は、ルータA102Aが備えるフェイス「eth0」、「eth1」を示している。310、311は、ルータB102Bが備えるフェイス「eth0」、「eth1」を示している。312は、パブリッシャー106が備えるフェイス「eth0」を示している。
以下、図3に示す通信制御システムにおいて、クライアント100が2つのコンテンツを要求した場合に、ルータA102AとルータB102Bとの間のデータパケットの転送経路(リンク)で、1つのデータパケットのロスが発生する例を用いて、パケットロスを検出する処理について説明する。
図4は、通信制御システムにおいてパケットロスを検出する処理の一例を示すシーケンス図である。以下、クライアント100が、名前が「a」「b」の二つのコンテンツを要求し、名前が「a」のコンテンツを構成するデータパケットが、ルータB102BからルータA102Aに送信される際にロスするものとして説明する。
以下、名前「a」のコンテンツをコンテンツ「a」と記載する。コンテンツ「a」を要求する興味パケットを「I:a」と記載する。コンテンツ「b」を構成するデータパケットを「D:b」と記載する。データパケット「D:a」が、コンテンツの名前「a」をPIT情報として含む場合、「D:a:PIT[a]」と記載する。また、当該PIT情報をPIT情報「PIT[a]」と記載する。
属性「incoming」、名前「a」及びフェイス「eth0」を組み合わせた受信PIT204のエントリを、受信PIT204のエントリ「i[a(eth0)]」と記載する。属性「outgoing」、名前「a」及びフェイス「eth1」を組み合わせた送信PIT205のエントリを、送信PIT205のエントリ「o[a(eth1)]」と記載する。
PIT200(107、104A、104B、108)に、二つの受信PIT204のエントリ「i[a(eth0)]」、「i[b(eth0)]」、及び二つの送信PIT205のエントリ「o[a(eth1)]」、「o[b(eth1)]」が存在する状態を、「PIT[i[a、b(eth0)]o[a、b(eth1)]]」と記載する。
尚、初期状態では、ルータA102A及びルータB102BのCS103には、データパケットが蓄積されていないものとする。
以下、図4に示すシーケンスについて順を追って説明する。まず、処理404において、クライアント100は、コンテンツ「a」「b」を要求する興味パケット「I:a」「I:b」を送信する。送信の結果、クライアント100は、興味パケット「I:a」「I:b」がフェイス「eth0」によって送出されたことを示すエントリを送信PIT205に記録する。その結果、PIT107の状態は、状態407(「PIT[o[a、b(eth0)]]」)となる。
処理408と処理409では、ルータA102A及びルータB102Bが、処理404で送信された興味パケット「I:a」「I:b」をパブリッシャー106に転送する。当該転送の結果、ルータA102Aは、興味パケット「I:a」「I:b」をフェイス308「eth0」が受け取ったことを示すエントリ「i[a、b(eth0)]」を受信PIT204に記録する。また、ルータA102Aは、興味パケット「I:a」「I:b」をフェイス309「eth1」が送出したことを示すエントリ「o[a、b(eth1)]」を送信PIT205に記録する。
その結果、ルータA102AのPIT104Aの状態は、何らエントリが記録されていない初期状態405「PIT[]」から、状態411「PIT[i[a、b(eth0)]o[a、b(eth1)]]」に更新される。同様にして、ルータB102BのPIT104Bも、初期状態406「PIT[]」から、状態412「PIT[i[a、b(eth0)]o[a、b(eth1)]]」に更新される。
パブリッシャー106は、処理409で送信された興味パケット「I:a」「I:b」をフェイス312「eth0」が受け取ると、当該受け取りを示すエントリを受信PIT204に記録する。その結果、PIT108の状態は、不図示の初期状態「PIT[]」から、状態410「PIT[i[a、b(eth0)]]」に更新される。
次に、処理414において、パブリッシャー106は、自身が保有しているコンテンツ「a」を構成するデータパケット「D:a」を送信する処理を行う。具体的には、パブリッシャー106は、処理414を開始すると、先ず、自身の受信PIT204に記録されているエントリ「i[a(eth0)]」、「i[b(eth0)]」の中で、当該データパケット「D:a」に対応するエントリ「i[a(eth0)]」に含まれているフェイス203「eth0」を抽出する。
これにより、パブリッシャー106は、当該抽出したフェイス203「eth0」が示すフェイス312「eth0」を、当該データパケット「D:a」に対応する興味パケットを受け取ったフェイスとして特定する。そして、パブリッシャー106は、当該データパケット「D:a」を当該特定したフェイス312「eth0」から返信する必要があると判断し、当該特定したフェイス312「eth0」を、当該データパケット「D:a」を送出させるフェイスとして特定する。
次に、パブリッシャー106は、自身の受信PIT204に記録されているエントリ「i[a(eth0)]」、「i[b(eth0)]」の中で、上記の抽出したフェイス203「eth0」と同一のフェイス203「eth0」を含むエントリ「i[a(eth0)]」、「i[b(eth0)]」から、名前202「a」、「b」を抽出する。そして、パブリッシャー106は、当該抽出した名前202「a」、「b」をPIT情報として、当該データパケット「D:a」に含める。
これにより、上記特定したフェイス312「eth0」と同一のフェイス312「eth0」によって送出する必要があるが、その送出が完了していないデータパケット「D:a」「D:b」に対応するエントリ「i[a(eth0)]」、「i[b(eth0)]」の情報(名前202「a」、「b」)を、PIT情報として当該データパケット「D:a」に含める。
そして、パブリッシャー106は、上記の特定したフェイス312「eth0」に、当該データパケット「D:a:PIT[a、b]」を送出させ、処理414を終了する。
パブリッシャー106は、処理414においてデータパケット「D:a:PIT[a、b]」の送信を完了すると、当該送信したデータパケット「D:a:PIT[a、b]」に対応する受信PIT204のエントリ「i[a(eth0)]」を消去する。これにより、パブリッシャー106は、PIT108の状態を、状態410「PIT[i[a、b(eth0)]]」から、状態420「PIT[i[b(eth0)]]」に更新する。
一方、ルータB102Bは、フェイス311「eth1」によって、データパケット「D:a:PIT[a、b]」を受け取る。そして、ルータB102Bは、当該受け取ったデータパケットに含まれているPIT情報「PIT[a、b]」が示すコンテンツの名前「a」「b」と、状態412となっている自身の送信PIT205のエントリの中で、当該データパケットを受信したフェイス311「eth1」と同一のフェイス311「eth1」を含むエントリ「o[a(eth1)]」、「o[b(eth1)]」に含まれている名前202「a」、「b」と、を比較する。
この場合、上記PIT情報「PIT[a、b]」が示すコンテンツの名前「a」「b」と、自身の送信PIT205のエントリから得られたコンテンツの名前202「a」「b」とが一致している。つまり、PIT情報が示す、上位のパブリッシャー106で送信が完了していない、コンテンツ「a」「b」を構成する二つのデータパケットと、自身の送信PIT205のエントリが示す、自身が受信していない、コンテンツ「a」「b」を構成する二つのデータパケットと、が一致している。このため、ルータB102Bは、上位のパブリッシャー106と自身との間のデータパケットの転送経路で、パケットロスは発生していないと判断する。
そこで、ルータB102Bは、処理413において、パブリッシャ−106から受け取ったデータパケット「D:a:PIT[a、b]」を転送する処理を行う。具体的には、ルータB102Bは、処理413を開始すると、先ず、受け取ったデータパケット「D:a:PIT[a、b]」からPIT情報を削除する。そして、ルータB102Bは、処理414と同様にして、自身の受信PIT204に記録されているエントリから得たPIT情報「PIT[a、b]」を、処理413の開始時にPIT情報を削除した後のデータパケット「D:a」に含める。そして、ルータB102Bは、処理414と同様、自身の受信PIT204に記録されているエントリを用いて特定したフェイス310「eth0」によって、当該データパケット「D:a:PIT[a、b]」を送出させ、処理413を終了する。
そして、ルータB102Bは、自身のPIT104Bの状態を、状態412「PIT[i[a、b(eth0)]o[a、b(eth1)]]」から、状態415「PIT[i[b(eth0)]o[b(eth1)]]」に更新する。また、ルータB102Bは、処理413で送出したデータパケット「D:a:PIT[a、b]」に含まれているPIT情報を削除し、当該削除後のデータパケット「D:a」を自身のCS103に記憶する。
そして、処理413で送信したデータパケット「D:a:PIT[a、b]」がロスしたとする。このとき、ルータB102BのPIT104Bの状態は、状態415「PIT[i[b(eth0)]o[b(eth1)]]」である。一方、ルータA102Aは、処理413で送信されたデータパケット「D:a:PIT[a、b]」を受信していない。このため、ルータA102AのPIT104Aの状態は、状態411「PIT[i[a、b(eth0)]o[a、b(eth1)]]」のまま変化せず、送信PIT205にデータパケット「D:a」に対応するエントリ「o[a(eth1)]」が残っている。尚、パケットロスの検出は、ルータA102Aが、コンテンツ「b」のデータパケットを受信した時に行われる。
その後、処理417において、パブリッシャー106は、処理414と同様、PIT情報を含むデータパケット「D:b:PIT[b]」を送信する。ルータB102Bは、当該データパケット「D:b:PIT[b]」を受け取ると、上述と同様の比較処理を行う。その結果、データパケット「D:b:PIT[b]」に含まれるPIT情報「PIT[b]」が示すコンテンツの名前「b」と、状態415のPIT104Bにおける送信PIT205のエントリから得られたコンテンツの名前202「b」とが一致するため、ルータB102Bは、パケットロスが発生していないと判断する。そこで、ルータB102Bは、処理416において、処理413と同様にして、PIT情報を含むデータパケット「D:b:PIT[b]」を転送する。
ルータA102Aは、処理416で送信されたデータパケット「D:b:PIT[b]」を受け取ると、上述と同様の比較処理を行う。つまり、ルータA102Aは、当該受け取ったデータパケット「D:b:PIT[b]」に含まれているPIT情報「PIT[b]」が示すコンテンツの名前「b」と、状態411となっている自身の送信PIT205のエントリの中で、当該データパケットを受信したフェイス309「eth1」と同一のフェイス309「eth1」を含むエントリに含まれている名前202「a」、「b」と、を比較する。
この場合、上記PIT情報「PIT[b]」が示すコンテンツの名前「b」と自身の送信PIT205のエントリから得られたコンテンツの名前202「a」「b」とにおいて、コンテンツの名前「a」が一致していない。つまり、PIT情報が示す、上位のパブリッシャー106で送信が完了していない、コンテンツ「b」を構成するデータパケットと、自身の送信PIT205のエントリが示す、自身が受信していないコンテンツ「a」「b」を構成する二つのデータパケットと、において、コンテンツ「a」を構成するデータパケットが一致していない。このため、ルータA102Aは、処理418において、上位のルータB102Bと自身との間のデータパケットの転送経路で、コンテンツ「a」を構成するデータパケットのパケットロスが発生したことを検出する。
ルータA102Aは、名前「a」のコンテンツを構成するデータパケットのパケットロスを検出すると、処理422を実行する。具体的には、ルータA102Aは、処理422において、状態411となっている自身の送信PIT205の当該データパケット「D:a」に対応するエントリ「o[a(eth1)]」に従い、当該データパケットに対応する興味パケット「I:a」をフェイス「eth1」によって再び送出(再送)させる。
また、処理421において、ルータA102Aは、処理413、416と同様にして、PIT情報「PIT[a、b]」を含むデータパケット「D:b:PIT[a、b]」を転送する。つまり、このデータパケットの転送では、ルータA102Aは、状態411にある自身の受信PIT204のエントリ「i[a、b(eth0)」から得られたPIT情報「PIT[a,b]」をデータパケットに含めている。
クライアント100は、データパケット「D:b:PIT[a、b]」を受信すると、上述と同様の比較処理を行う。この場合、状態407となっている送信PIT205のエントリ「o[a、b(eth0)」に含まれているコンテンツの名前202「a」「b」と、データパケット内に含まれるPIT情報「PIT[a、b]」が示すコンテンツの名前「a」「b」とが一致している。このため、クライアント100は、パケットロスが発生していないと判断する。つまり、クライアント100は、パケットロスを検知せず、興味パケットを再送しない。
ルータB102Bは、処理422において再送された興味パケット「I:a」を受信すると、処理413の後にルータB102B上のCS103に記憶したデータパケット「D:a」を取得する(処理425)。そして、ルータB102Bは、処理413、416と同様の処理427を行い、ルータA102Aは、処理413、416と同様の処理426を行う。これにより、クライアント100は、処理422において再送された興味パケット「I:a」に対応するデータパケット「D:a」を受信する。
尚、クライアント100が要求したすべてのデータパケットの転送を完了した状態では、各装置100、102A、102B、106のPIT107、104A、104B、108の状態429、430、431、432は、エントリが記録されていない初期状態となる。
このように、実施の形態1の通信制御システムでは、PIT200のエントリが示す情報を含むデータパケットを送受信することで、より適切にパケットロスの検出を行うことができ、効率的な再送制御を行うことが可能となる。
尚、実施の形態1では、コンテンツ指向型ネットワークの代表例としてCCNを取り上げている。しかし、コンテンツ指向型ネットワークは、CCN網101に限らず、NDN(Named Data Networiking)等の他のコンテンツ指向型ネットワークであってもよい。
また、実施の形態1では、本開示の通信制御装置は、ルータ102(102A、102B)であるとして詳細を説明している。本開示の通信制御装置は、CCN網101に接続したクライアント100であって、上位の装置の受信PIT204のエントリが示す、送信が完了していないデータパケットを示すPIT情報を含むデータパケットを受信し、受信したデータパケットに含まれるPIT情報を用いて、パケットロスの検出及び再送制御を行う。また、本開示の通信制御装置は、CCNにおけるパブリッシャー106であって、興味パケットを受信し、自身の受信PIT204のエントリが示す、受信した興味パケットに対応するデータパケットの中で、送信が完了していないデータパケットを示すPIT情報を含むデータパケットを送信する。
次に、ルータ102の構成について詳述する。図5は、ルータ102の機能構成の一例を示す図である。ルータ102は、不図示のCPU、RAMやROM等のメモリー、及び、通信インターフェイス(フェイス)等を備えている。図5に示す各処理部502〜506は、上記メモリーに記憶されている、各処理部502〜506として機能させるためのプログラムをCPUに実行させることにより実現される。尚、図5に示す各処理部502〜506は、各処理部502〜506として機能する専用回路を組み合わせることで実現してもよい。また、メモリ部510は、上記メモリーの記憶領域により実現される。
パケット受信部502(受信部)及びパケット送信部503(送信部)は、上記通信インターフェイス(フェイス)を介して、CCN網101と接続され、興味パケット及びデータパケットの送受信を行う。尚、パケット受信部502及びパケット送信部503がCCN網101と送受信するパケットは、興味パケット及びデータパケットに限らない。当該送受信するパケットは、例えば、ルーティング情報を交換するための制御パケットや、コンテンツが存在しないことやネットワークが輻輳していることを示すNACK(Negative Acknowledgement)パケットであってもよい。
パケット処理部504は、パケット受信部502、パケット送信部503及びメモリ部510と接続されており、メモリ部510に記憶されている情報等を用いて、パケット受信部502及びパケット送信部503で送受信されるパケットの処理方法を決定する。パケット処理部504は、更に、後述するPIT情報比較部505(パケット処理部)と、後述するPIT情報追加部506(パケット処理部)としても動作する。
メモリ部510は、上述した、CS103、PIT104、及びFIB105を記憶する。
以下では、実施の形態1の通信制御システムにおいて、ルータ102またはクライアント100がパケットを受信した場合の動作について、図5〜図9を用いて詳細に説明する。尚、以下では、図4を用いて詳述した処理と同様の処理の説明については簡略化する。
図6は、ルータ102がパケットを処理する動作の一例を示すフローチャートである。まず、図6において、処理フローは、パケット受信部502によるパケットの受信(S600)により起動される。パケット処理部504は、ステップS600でパケット受信部502が受信したパケットがデータパケットであるか否かの判定を行う(S601)。
具体的には、ステップS601において、パケット処理部504は、CCNで用いられるパケットのヘッダー領域に格納されているパケットのタイプを示す情報を参照する。そして、パケット処理部504は、当該参照した情報が、データパケットを示すか否かによって、上記受信したパケットがデータパケットであるか否かを判定する。CCNで用いられるパケットのフォーマットについては後述する。
パケット処理部504は、受信したパケットがデータパケットではないと判定した場合(S601;NO)、後述するステップS800を行う(S602)。パケット処理部504は、受信したパケットがデータパケットであると判定した場合には(S601;YES)、後述するPIT情報の比較処理(S700)を呼び出す(S603)。
続いて、パケット処理部504は、図2を用いて上述したように、PIT104における送信PIT205から、ステップS600で受信したデータパケットに対応するエントリを削除する(S604)。そして、パケット処理部504は、ステップS600で受信したデータパケットに対応するエントリが、ルータ102自身の受信PIT204に記録されているか否かを判定する(S605)。
パケット処理部504は、ステップS605において記録されていないと判定した場合(S605;NO)、ステップS600で受信したデータパケットを転送せず、当該データパケットをCS103に記憶する。これにより、以降、当該データパケットが構成するコンテンツを要求する興味パケットを受信した場合に、CS103から当該データパケットを取得して転送できるようにする。尚、ステップS600で受信したデータパケットが既にCS103に記憶されている場合は、当該データパケットを破棄する(S606)。そして、パケット処理部504は、パケットの転送処理を終了する(S611)。
一方、パケット処理部504が、ステップS605において記録されていると判定したとする(S605;YES)。この場合、PIT情報追加部506は、下位のルータ102にステップS600で受信したデータパケットを転送するための準備として、データパケットに含まれているPIT情報を更新する(S607)。
具体的には、ステップS607において、PIT情報追加部506は、先ず、データパケットに含まれているPIT情報を削除する。そして、PIT情報追加部506は、図4の処理413と同様にして、ルータ102自身の受信PIT204に記録されている、当該データパケットに対応するエントリに含まれているフェイス203を抽出する。これにより、当該抽出したフェイス203が示すフェイスを、当該データパケットを送出するフェイスとして特定する。そして、PIT情報追加部506は、ルータ102自身の受信PIT204に記録されている、当該抽出したフェイス203と同一のフェイス203を含むエントリに含まれる名前202を、PIT情報として当該データパケットに含める。そして、PIT情報追加部506は、ステップS607を終了する。
次に、パケット処理部504は、パケット送信部503に、ステップS600で受信したデータパケットを下位のルータ102へ転送させる(S608)。具体的には、ステップS608において、パケット処理部504は、ステップS607で特定されたフェイスによって、ステップS600で受信したデータパケットを送出させるよう、パケット送信部503に指示する。これにより、パケット送信部503は、ステップS607で特定されたフェイスに、当該データパケットを送出させる。その結果、下位のルータ102に当該データパケットが転送される。
そして、パケット処理部504は、図4の処理413を行った後と同様にして、ルータ102自身の受信PIT204から、ステップS608で転送したデータパケットに対応するエントリを消去する(S609)。そして、パケット処理部504は、ステップS608で転送したデータパケットと同一のデータパケットをCS103に記憶する(S610)。そして、パケット処理部504は、パケットの転送処理を終了する(S611)。
次に、ステップS603で行われるPIT情報の比較処理(S700)の詳細について図7を用いて説明する。図7は、PIT情報の比較処理(S700)のフローチャートである。
パケット処理部504により、PIT情報の比較処理が呼び出されると(S700)、PIT情報比較部505は、ステップS600で受信したデータパケット内にPIT情報が含まれているか否かを判定する(S701)。
ステップS600で受信したデータパケットは、実施の形態1の通信制御システムとは他の通信制御システムのパブリッシャー106等から送信されたデータパケットである可能性があり、データパケット内にPIT情報が含まれていない可能性がある。そこで、PIT情報比較部505は、ステップS701において、データパケットにPIT情報が含まれていないと判定した場合(S701;NO)、他の通信制御システムの装置から送信されたデータパケットであると判断し、PIT情報の比較処理を終了する。これにより、処理は、呼び出し元の処理に戻る(S705)。
尚、呼び出し元の処理に戻った後、ステップS607が行われた場合、データパケットにPIT情報が含められ、ステップS608において、当該PIT情報を含むデータパケットが下位の装置へ転送される。その結果、当該下位の装置は、パケットロスを検出することが可能となる。
一方、PIT情報比較部505が、ステップS701において、データパケットにPIT情報が含まれていると判定したとする(S701;YES)。この場合、PIT情報比較部505は、ルータ102自身の送信PIT205のエントリの中で、当該データパケットを受信したフェイスを示すフェイス203と同一のフェイス203を含むエントリから、名前202を抽出する。そして、PIT情報比較部505は、データパケットに含まれているPIT情報が示す名前202と、ルータ102自身の送信PIT205から抽出した名前202と、を比較する(S702)。
ステップS702の比較結果、送信PIT205から抽出した名前202と、データパケットに含まれていたPIT情報が示す名前202とが一致しなかった場合(S703;YES)、PIT情報比較部505は、ルータ102自身と上位の装置との間のパケットの転送経路で、当該一致しなかった名前202のコンテンツを構成するデータパケットのパケットロスが発生したことを検出する。この場合(S703;YES)、パケット処理部504は、図4の処理422と同様にして、送信PIT205のエントリに従い、当該一致しなかった名前202のコンテンツを構成するデータパケットに対応する興味パケットをパケット送信部503に再送させ、PIT情報の比較処理を終了する(S704)。これにより、処理は、呼び出し元の処理に戻る(S705)。
一方、ステップS702の比較結果、送信PIT205から抽出した名前202と、データパケットに含まれていたPIT情報が示す名前202とが一致した場合(S703;NO)、PIT情報比較部505は、パケットロスは発生していないと判断し、PIT情報の比較処理を終了する。これにより、処理は、呼び出し元の処理に戻る(S705)。
次に、ルータ102が興味パケットに対応するデータパケット以外のパケットを受信した場合にステップS602で行われる処理の詳細について図8を用いて説明する。図8は、ルータ102が興味パケットに対応するデータパケット以外のパケットを受信した際に行う処理の動作を示すフローチャートである。
パケット処理部504は、ステップS602の処理を開始すると(S800)、ステップS600でパケット受信部502が受信したパケットが、興味パケットであるか否かの判定を行う(S801)。
具体的には、ステップS801において、パケット処理部504は、CCNで用いられるパケットのヘッダー領域に含まれるパケットのタイプを示す情報を参照する。そして、パケット処理部504は、当該参照した情報が、興味パケットを示すか否かによって、上記受信したパケットが興味パケットであるか否かを判定する。CCNで用いられるパケットのフォーマットについては後述する。
パケット処理部504は、受信したパケットが興味パケットではないと判定した場合(S801;NO)、受信したパケットに対して規定されている所定の処理を行い、処理を終了する(S802)。
一方、パケット処理部504は、受信したパケットが興味パケットであると判定した場合(S801;YES)、図4の処理408、409と同様にして、当該興味パケットを受け取ったことを示すエントリを受信PITに追加する(S803)。次に、パケット処理部504は、CS103内に、当該興味パケットに対応するデータパケットが記憶されているか否かの検索を行う(S804)。
CS103内に、当該興味パケットに対応するデータパケットが記憶されていなかった場合(S805;NO)、パケット処理部504は、パケット送信部503に対し、図4の処理408、409と同様にして、上位の装置との通信に用いるフェイスによって、当該興味パケットを上位の装置へ転送するよう指示する(S806)。これにより、当該興味パケットは上位の装置へ転送される。そして、パケット処理部504は、当該興味パケットを送出したことを示すエントリを送信PIT205に記録し(S807)、処理を終了する(S811)。
一方、パケット処理部504がCS103内に興味パケットに対応するデータパケットが記憶されていたと判定した場合(S805;YES)、PIT情報追加部506は、CS103内から当該データパケットを取得し、ステップS607と同様にして、自身の受信PIT204に記録されているエントリから得たPIT情報をデータパケットに含める(S808)。尚、ステップS808において、PIT情報追加部506は、ステップS607と同様にして、当該データパケットを送信するフェイスを特定する。
そして、パケット処理部504は、パケット送信部503に、下位の装置へ当該データパケットを転送させる(S809)。具体的には、ステップS809において、パケット処理部504は、ステップS808で特定されたフェイスによって、ステップS808でPIT情報が含めれられたデータパケットを送出させるよう、パケット送信部503に指示する。これにより、パケット送信部503は、ステップS808で特定されたフェイスに、当該データパケットを送出させる。その結果、下位のルータ102に当該データパケットが転送される。
そして、パケット処理部504は、転送したデータパケットに対応する自身の受信PIT204のエントリを消去し(S810)、処理を終了する(S811)。
以上、ルータ102における処理フローについて述べたが、ルータ102におけるパケットロスの検出方法を、クライアント100及びパブリッシャー106に適用する場合は、クライアント100及びパブリッシャー106を以下のように構成すればよい。
具体的には、クライアント100及びパブリッシャー106が、図5に示すルータ102と同様の処理部502〜506及びメモリ部510を備えるようにすればよい。
そして、クライアント100では、クライアント100が備えるパケット送信部503(以下、パケット送信部503a)が興味パケットを送信した後に、ステップS807と同様にして、クライアント100が備えるパケット処理部504(以下、パケット処理部504a)が、当該興味パケットを送出したことを示すエントリを自身の送信PIT205に追加すればよい。
一方、クライアント100がデータパケットを処理する動作については、次のようにすればよい。図9は、クライアント100がデータパケットを受信した際に行う処理の動作を示すフローチャートである。
クライアント100が備えるパケット受信部502(以下、パケット受信部502a)がデータパケットを受信すると(S900)、パケット処理部504aは、PIT情報の比較処理(S700)を呼び出す(S901)。これにより、クライアント100が備えるPIT情報比較部505は、図7に示す処理フローに従い、PIT情報の比較処理を行う。その結果、クライアント100においてもパケットロスの検出を行え、また、パケットロスを検出した場合にはステップS704の再送処理を行うことができる。
次に、パケット処理部504aは、ステップS900で受信したデータパケットに対応するエントリが、クライアント100自身の送信PIT205に記録されているか否かを判定する(S902)。
パケット処理部504aは、ステップS902において記録されていないと判定した場合(S902;NO)、そのまま受信処理を完了する(S904)。一方、パケット処理部504aは、ステップS902において記録されていると判定した場合(S902;YES)、図2を用いて上述したように、送信PIT205から、ステップS900で受信したデータパケットに対応するエントリを削除した後(S903)、受信処理を完了する(S904)。
一方、パブリッシャー106では、パブリッシャー106が備えるパケット受信部502が興味パケットを受信した後に、ステップS803と同様にして、パブリッシャー106が備えるパケット処理部504(以下、パケット処理部504b)が、当該興味パケットを受け取ったことを示すエントリを自身の受信PIT204に追加すればよい。
また、パブリッシャー106が備えるパケット送信部503(以下、パケット送信部503b)がデータパケットを送信する場合には、ステップS808、S809と同様にして、パブリッシャー106が備えるPIT情報追加部506が、パブリッシャー106の受信PIT204のエントリから得られるPIT情報を当該データパケットに含めた後、、パケット処理部504bがパケット送信部503bに当該データパケットを送信させるようにすればよい。そして、データパケットの送出後は、パケット処理部504bが、ステップS810と同様にして、自身の受信PIT204から、当該データパケットに対応するエントリを消去するようにすればよい。
次に、CCNで用いられるパケットのフォーマットについて説明する。図10は、CCNで用いられるパケットのフォーマットの一例を示す図である。図10に示すように、データパケットは、ヘッダー領域(1000〜1006)と、メッセージ領域(1007〜1012)と、を含んでいる。ヘッダー領域(1000〜1006)は、CCNで用いられる全てのパケットで共通しており、メッセージ領域は、パケットのタイプに応じて異なっている。
1000の領域(以下、バージョン領域1000)には、パケットのバージョンを示す情報が格納される。1001の領域(以下、タイプ領域1001)には、パケットのタイプを示す情報が格納される。例えば、タイプ領域1001には、上述の興味パケットであるか、データパケットであるかを示す情報が格納される。つまり、上述したステップS601、S801では、当該タイプ領域1001が参照される。1002の領域にはパケット長が格納される。1003の領域には、パケットのタイプに特有の情報、1004の領域にはヘッダー長が格納される。1005の領域には、メッセージ領域に格納されている情報やデータを識別する情報が格納される。1006の領域にはメッセージ長が格納される。
例えば、パケットが上述したデータパケットである場合、タイプ領域1001にはデータパケットであることを識別する識別子が格納される。また、1005の領域には、コンテンツの名前が格納される。メッセージ領域(1007〜1012)は、1007〜1009の領域と、1010〜1012の領域と、の二つの領域に分類される。1007〜1009の領域には、当該データパケットが構成するコンテンツのデータ及び当該データに関する情報が格納される。また、1010〜1012の領域には、PIT情報及びPIT情報を示すデータが格納される。
具体的には、1007の領域には、コンテンツのデータであることを示す識別子が格納され、1008の領域にはコンテンツのデータ長が格納され、1009の領域に、コンテンツを構成するデータが格納される。1010の領域には、PIT情報であることを示す識別子が格納され、1011の領域には、PIT情報のデータ長が格納され、1012の領域には、PIT情報が格納される。
一方、パケットが上述した興味パケットである場合、タイプ領域1001には興味パケットであることを識別する識別子が格納される。また、1005の領域には、当該興味パケットが要求するコンテンツの名前が格納される。メッセージ領域(1007〜1012)は、用いられない、あるいは、領域自体が存在しない。
(実施の形態2:送信するPIT情報の圧縮)
実施の形態1では、各装置が送信する対象のデータパケットにPIT情報を含める場合、自身の受信PIT204から、当該データパケットに対応するエントリに含まれるフェイス203を抽出後、自身の受信PIT204のエントリの中で、当該抽出したフェイス203と同一のフェイス203を含む全てのエントリから名前202を抽出し、これをPIT情報としていた。しかし、必ずしもすべての送信対象のデータパケットに、上記全てのエントリから抽出した名前202をPIT情報として含める必要は無い。以下に示すように、送信対象のデータパケットに含めるPIT情報のサイズを少なくしてもよい。
例えば、名前が「a」のコンテンツが、更に、名前が「a/1」、「a/2」、「a/3」、・・・とシーケンシャルな子階層の名前を持つコンテンツに分割されていることがある。そこで、例えば、名前が「a」のコンテンツ(コンテンツ「a」)が、上述のように、名前が「a/1」、「a/2」、「a/3」の三個のコンテンツ(コンテンツ「a/1」、コンテンツ「a/2」、コンテンツ「a/3」)に分割されているとする。また、名前が「b」のコンテンツ(コンテンツ「b」)も、上述のように、名前が「b/1」、「b/2」、「b/3」の三個のコンテンツ(コンテンツ「b/1」、コンテンツ「b/2」、コンテンツ「b/3」)に分割されているとする。
そして、クライアント100がコンテンツ「a」「b」を取得するために、コンテンツ「a」を構成する三個のコンテンツ「a/1」、「a/2」、「a/3」と、コンテンツ「b」を構成する三個のコンテンツ「b/1」、「b/2」、「b/3」と、を要求する計六個の興味パケットを送信したとする。
これにより、ルータ102の受信PIT204のエントリが、「i[a/1、a/2、a/3、b/1、b/2、b/3(eth0)]」になったとする。そして、ルータ102が、コンテンツ「a」を構成する3個のデータパケットの中で、コンテンツ「a/1」を構成するデータパケット「D:a/1」を、フェイス「eth0」によって転送するとする。
この場合において、ルータ102のパケット処理部504が、受信PIT204に記憶されているフェイス「eth0」を含むエントリの中で、コンテンツ「a」を構成するデータパケット(コンテンツ「a/1」、「a/2」、「a/3」を構成するデータパケット)に対応するエントリ「i[a/1、a/2、a/3(eth0)]」のみから、名前202「a/1」、「a/2」、「a/3」を抽出するようにし、当該抽出した名前202をPIT情報としてデータパケット「D:a/1」に含めるようにしてもよい。
つまり、ルータ102のパケット処理部504が、受信PIT204に記憶されているフェイス「eth0」を含むエントリの中で、転送するデータパケット「D:a/1」が構成するコンテンツ「a」とは他のコンテンツ「b」を構成するデータパケット(コンテンツ「b/1」、「b/2」、「b/3」を構成するデータパケット)に対応するエントリ「i[b/1、b/2、b/3(eth0)]」からは、名前202「b/1」、「b/2」、「b/3」を抽出しないようにしてもよい。これにより、PIT情報のサイズを軽減するようにしてもよい。
このように、パケット処理部504が、一のコンテンツを構成する複数のデータパケットをそれぞれ送信する場合に、受信PIT204に記録されている、当該コンテンツを構成するデータパケットに対応する(関する)エントリに含まれている名前202のみを、PIT情報として、送信するデータパケットに含めるようにしてもよい。
これにより、一定期間、一のコンテンツを構成する複数のデータパケットをそれぞれ連続して集中的に送信するような場合に、受信PIT204に記録されている、当該コンテンツとは他のコンテンツを構成するデータパケットに対応するエントリに含まれている名前202をPIT情報として、送信対象のデータパケットに含めることを回避してもよい。このようにして、当該期間中、データパケットに含まれるPIT情報のサイズを軽減するようにし、ネットワークの通信負荷を軽減してもよい。
ただし、この方法を用いる場合、データパケットを受信する側の装置が、データパケットに含まれるPIT情報が軽減されていることを識別できるようにする必要がある。また、ステップS702において、受信したデータパケットに含まれているPIT情報が示す名前と比較する対象の、送信PIT205のエントリから抽出される名前202も、PIT情報と同様に軽減する必要がある。これは、以下のようにして実現すればよい。
例えば、パケット処理部504がPIT情報をデータパケットに含める場合に、図10に示すパケットの1010の領域に格納する、PIT情報であることを示す識別子を、通常通りのPIT情報を含むときと、上述のように軽減されたPIT情報を含むときと、で異ならせるようにすればよい。または、図10に示すパケットの1003の領域に格納するデータパケットに特有の情報を、通常通りのPIT情報を含むときと、上述のように軽減されたPIT情報を含むときとで異ならせるようにすればよい。
そして、ステップS702において、PIT情報比較部505は、受信したデータパケットに含まれているPIT情報が、軽減されたPIT情報であるか否かを判定するようにすればよい。そして、PIT情報比較部505は、軽減されたPIT情報であると判定した場合には、自身の送信PIT205のエントリの中で、受信したデータパケットが構成するコンテンツと同一のコンテンツを構成するデータパケットに対応するエントリのみから、名前202を抽出するようにすればよい。そして、当該抽出した名前202と、軽減されたPIT情報が示す名前と、を比較して、パケットロスを検出するようにすればよい。
例えば、ルータ102の送信PIT205のエントリが、「o[a/1、a/2、a/3、b/1、b/2、b/3(eth0)]」のときに、フェイス「eth0」によって、データパケット「D:a/1、PIT[a/1、a/2、a/3]」が受け取られたとする。また、データパケットに含まれるPIT情報「PIT[a/1、a/2、a/3]」は、軽減されたPIT情報であるとする。
この場合、ステップS702において、PIT情報比較部505が、受信したデータパケットの1010の領域又は1003の領域から、当該受信したデータパケットに含まれるPIT情報が、軽減されたPIT情報であるか否かを判定するようにすればよい。
そして、軽減されたPIT情報であると判定した場合には、PIT情報比較部505が当該受信したデータパケットが構成するコンテンツを把握するようにすればよい。本具体例では、当該受信したデータパケットが構成するコンテンツの名前「a/1」のプレフィックスから、当該データパケットがコンテンツ「a」を構成するデータパケットであることを把握することができる。
そして、PIT情報比較部505が、自身の送信PIT205のエントリのうち、コンテンツ「a」を構成するデータパケットに対応するエントリ「o[a/1、a/2、a/3(eth0)]」のみから、名前202「a/1」、「a/2」、「a/3」を抽出するようにすればよい。そして、PIT情報比較部505が、当該抽出した名前202「a/1」、「a/2」、「a/3」と、軽減されたPIT情報「PIT[a/1、a/2、a/3]」が示す名前「a/1」、「a/2」、「a/3」と、を比較するようにすればよい。
この場合、一定期間、一のコンテンツを構成する複数のデータパケットのそれぞれを連続して集中的に受信するような場合に、当該期間中、受信したデータパケットに含まれる軽減されたPIT情報と、送信PIT205に記録されている、当該コンテンツを構成するデータパケットに対応するエントリと、を用いて、当該コンテンツを構成するデータパケットのパケットロスだけを集中的に検出することができる。
また、データパケット「D:a」に含めるPIT情報を「PIT[a,b]」とする場合、PIT情報が示すコンテンツの名前「a」は、データパケットが構成するコンテンツの名前そのものと重複している。そこで、このように、PIT情報が示すコンテンツの名前に、データパケットが構成するコンテンツの名前が含まれている場合には、PIT情報に、データパケットが構成するコンテンツの名前を含めないようにしてもよい。つまり、上記例では、データパケット「D:a」に含めるPIT情報を「PIT[a,b]」とせずに、「PIT[b]」としてもよい。このようにして、データパケットに含めるPIT情報を軽減してもよい。
ただし、この方法を用いる場合も、上述のようにデータパケットの1010の領域又は1003の領域を用いて、データパケットを受信する側の装置が、データパケットに含まれるPIT情報が軽減されていることを識別できるようにする必要がある。また、ステップS702では、PIT情報が軽減されているか否かを判定し、軽減されていると判定した場合には、受信したデータパケットに含まれているPIT情報が示す名前に、データパケットが構成するコンテンツの名前を追加する必要がある。
ただし、例えば、データパケット「D:a」に含めるPIT情報が「PIT[a]」であるときには、データパケット「D:a」に含めるPIT情報が存在しなくなる。その結果、ステップS701において、PIT情報比較部505が、データパケット内にPIT情報が含まれていないと判定され、ステップS702が行われないことになる。したがって、この問題を回避するため、ステップS701においても、PIT情報が軽減されているのか否かを判定するようにし、PIT情報が軽減されていると判定され、且つ、PIT情報が含まれていないときは、ステップS702の処理を行うようにしてもよい。
更に、データパケットに含めるPIT情報が示す名前は、「a」「b」といった文字列に限らず、例えば、PIT情報が示す名前のハッシュ値を計算したものでもよい。ただし、この場合、当該データパケットを受信した装置では、ステップS702において、受信したデータパケットに含まれるPIT情報が示すハッシュ値と、自身の送信PIT205のエントリから抽出した名前202のハッシュ値と、を比較する必要がある。
また、当該PIT情報が示すハッシュ値を、送信PIT205のエントリから抽出した名前202に対応するブルームフィルタとして構成してもよい。この場合、当該PIT情報を含むデータパケットを受信した装置では、ステップS702において、受信したデータパケットに含まれるPIT情報が示すブルームフィルタを用いて、自身の送信PIT205のエントリから抽出した名前202が、PIT情報に対応する名前に含まれていないことだけを確認できるようにしてもよい。
(実施の形態3:PIT情報とタイムアウトの組み合わせ)
実施の形態1、2では、パケットロスを検出するために、上位の装置の受信PIT204のエントリ及び自身の送信PIT205のエントリから抽出した情報の比較を用いる方法について説明した。
しかし、パケット処理部504が、更に、自身の送信PIT205のエントリに対してタイムアウト値を設定し、送信PIT205にエントリが記録されてから、当該エントリに対応するデータパケットを受信するまでの時間がタイムアウト値を超えた場合に、当該データパケットのパケットロスを検出するようにしてもよい。そして、パケット処理部504が、当該パケットロスを検出した場合には、当該データパケットに対応する興味パケットをパケット送信部503に再送させるようにしてもよい。
具体的には、送信PIT205に、各エントリと対応付けて、当該エントリが記録された日時と、当該エントリのタイムアウト値と、を記録できるようにしてもよい。そして、パケット処理部504が、ステップS807において、送信PIT205にエントリを記録する際に、当該エントリのタイムアウト値と当該エントリを記録した日時とを、当該エントリと対応づけて記録するようにしてもよい。
そして、パケット処理部504が、定期的に、送信PIT205のエントリを参照するようにし、参照したエントリに対応付けられている当該エントリが記録された日時から、当該エントリに対応付けられているタイムアウト値を超える時間が経過していたときは、当該エントリに対応するデータパケットのパケットロスを検出し、ステップS704と同様に、当該データパケットに対応する興味パケットを再送するようにしてもよい。
尚、この場合、興味パケットの再送が繰り返されないよう、パケット処理部504が、参照したエントリに対応付けられている日時を、興味パケットを再送した日時に更新するように構成する必要がある。
このように構成すれば、例えば、送信した興味パケットに対応するデータパケットのパケットロスがバースト的に発生し、当該データパケットが一定期間受信できなくなった場合でも、当該データパケットに対応するエントリが送信PIT205に記録されてからの経過時間がタイムアウト値を超える度に当該興味パケットが再送される。
これにより、当該興味パケットに対応するデータパケットのパケットロスが発生したとしても、当該データパケットの適切な再送処理が可能となる。その結果、信頼性を損なうことなく、当該データパケットを取得することができる。
(実施の形態4:送信遅延への対応)
図11は、CCNにおける二個のルータ102A、102B間で興味パケット1104とデータパケット1105とを送受信している状況の一例を示す図である。図11は、ルータA102Aによる興味パケット1104「I:c」の送信と、ルータB102Bによるデータパケット1105「D:a:PIT[a,b]」の転送とが略同時に行われている状況を示している。
このとき、ルータA102Aの送信PIT205のエントリは、「o[a,b,c]」となる。一方、ルータB102Bがデータパケット1105を送信した時点では、ルータB102Bに興味パケット1104が到着していないため、データパケット1105に含まれるPIT情報は、「PIT[a,b]」となっている。このため、データパケット1105をルータA102Aが受信したときに、実際にはパケットロスが発生していないにもかかわらず、興味パケット1104に対応するデータパケットのパケットロスを検出する可能性がある。
この課題を解消するため、PIT情報比較部505が、ステップS702における比較において、送信PIT205のエントリの中で、記録されてからの経過時間が所定の閾値以下のエントリから抽出した名前202を用いないようにしてもよい。
これを実現するためには、更に、送信PIT205に、各エントリと対応付けて、当該エントリが記録された日時を記録できるようにすればよい。そして、パケット処理部504が、ステップS807において、送信PIT205にエントリを記録する際に、当該エントリを記録した日時を当該エントリと対応づけて記録するようにすればよい。また、上記閾値は、例えば、隣接する二個のルータ102で制御信号の送受信を行い、データパケットを往復させた場合に必要な時間を計測し、当該計測した時間を設定すればよい。
このように構成すれば、以下に示す効果が得られる。例えば、上位のルータ102がデータパケットを送信した後、下位のルータ102が興味パケットを送信したとする。そして、下位のルータ102が、当該興味パケットを送信したことを示す送信PIT205のエントリを記録してからの経過時間が所定の閾値になる前に、当該データパケットを受信して、ステップS702が行われたとする。
この場合、当該ステップS702において、上記興味パケットを送信したことを示す送信PIT205のエントリから抽出した名前202が、PIT情報が示す名前と比較されなくなる。これにより、上記興味パケットに対応するデータパケットのパケットロスを誤って検出することを防止することができる。
(実施の形態5:PIT情報の送信回数の削減)
上述の実施の形態では、各装置は、データパケットを送信する場合に、当該データパケットに必ずPIT情報を含めて送信するようにしていた。しかし、例えば、各装置が、送信したデータパケットの個数をカウントするようにし、PIT情報を持たないデータパケットを所定の個数送信する毎に、PIT情報を含むデータパケットを送信するようにしてもよい。又は、各装置が、PIT情報を含むデータパケットを送信してから、所定時間が経過するまでは、PIT情報を含まないデータパケットを送信するようにし、当該所定時間の経過後に、PIT情報を含むデータパケットを送信するようにしてもよい。
また、各装置が、PIT情報のみを含み、コンテンツのデータを含まないデータパケットを送信するようにしてもよい。具体的には、下位の装置が、PIT情報のみを含み、コンテンツのデータを含まないデータパケットに対する興味パケットを送信した場合に、当該興味パケットを受信した装置が、自身の受信PIT204のエントリから抽出したPIT情報のみを含むデータパケットを返信するようにしてもよい。または、各装置が、自発的に、且つ、定期的に、自身の受信PIT204のエントリから抽出したPIT情報のみを含むデータパケットを、当該PIT情報の抽出元のエントリに含まれるフェイスによって送出するようにしてもよい。
つまり、上記の手法を用いることで、PIT情報を含むデータパケットを送信する回数を少なくして、CCN網101上で送受信されるデータパケットのサイズを軽減し、ネットワークの通信負荷を軽減してもよい。
ただし、上記の手法を用いる場合も、データパケットを受信する側の装置が、各データパケットがどのような情報を含んでいるかを識別できるようにする必要がある。これは、例えば、データパケットを送信する各装置が、データパケットを送信する場合に、図10に示すデータパケットの1010の領域や1003の領域に格納する情報を、データパケットにPIT情報のみを含む場合と、PIT情報だけが含まれていない場合と、PIT情報とコンテンツが含まれている場合と、で異ならせることで実現することができる。