(57)【要約】【課題】記憶容量の増加を抑制しつつ通信品質の向上を図ること。【解決手段】中継装置は、第１フローを特定する第１特定情報を含む第１パケットを格納する第１キューと、第１特定情報から変換されたハッシュ値と同一ハッシュ値に変換され第２フローを特定する第２特定情報を含む第２パケットを格納する第２キューと、ハッシュ値と第１キューとを対応付けた第１対応情報と、第２特定情報と第２キューとを対応付けた第２対応情報と、パケット群を受信する受信部と、パケットが属するフローを特定する特定情報が第２特定情報に一致するか否かを判定し、一致する場合に第２対応情報を参照してパケットを第２キューに振り分け、一致しない場合に特定情報をハッシュ値に変換し、第１対応情報を参照してパケットを第１キューに振り分ける振分部と、振分部によって振り分けられたパケット群を送信する送信部と、を有する。【選択図】図２
2018121307.tif 000002
【特許請求の範囲】
【請求項１】
パケット群を中継する中継装置であって、
第１フローに属し前記第１フローを特定する第１特定情報を含む第１パケットを格納する１以上の第１キューと、前記第１特定情報から変換されたハッシュ値と同一ハッシュ値に変換され第２フローを特定する第２特定情報を含む第２パケットを格納する１以上の第２キューと、を有するキュー群と、
前記ハッシュ値と前記第１キューとを対応付けた第１対応情報を記憶する第１記憶部と、
前記第２特定情報と前記第２キューとを対応付けた第２対応情報を記憶する第２記憶部と、
前記パケット群を受信する受信部と、
前記受信部によって受信されたパケット群の各々のパケットに含まれており前記パケットが属するフローを特定する特定情報が前記第２特定情報に一致するか否かを判定し、一致する場合には前記第２対応情報を参照して前記パケットを前記第２パケットとして前記第２キューに振り分け、一致しない場合には前記特定情報を前記ハッシュ値に変換し、前記第１対応情報を参照して前記パケットを前記第１パケットとして前記第１キューに振り分ける振分部と、
前記振分部によって前記第１キューおよび前記第２キューに振り分けられた前記パケット群を送信する送信部と、
を有することを特徴とする中継装置。
【請求項２】
請求項１に記載の中継装置であって、
前記振分部によって振り分けられた結果、前記特定情報が異なるパケットが属する複数のフローが同一の前記第１キューに出力されるのを検出し、前記複数のフローのうち、特定のフローを前記第１フローに決定し、前記特定のフロー以外の他のフローを前記第２フローに決定する学習部と、
前記学習部によって前記第２フローに決定された前記他のフローに属するパケットに含まれる前記特定情報と、前記第２対応情報の前記第２キューを指定する前記第２キューとを含む学習結果を取得し、前記第２対応情報に登録する学習結果処理部と、
を有することを特徴とする中継装置。
【請求項３】
請求項２に記載の中継装置であって、
前記学習結果処理部は、前記第２対応情報に、前記学習結果に含まれる前記第２キューが使用中であることを示す情報を付与し、当該情報の付与後に前記学習結果を取得する場合、前記使用中であることを示す情報が付与されていない他の第２キューを選択することを特徴とする中継装置。
【請求項４】
請求項２に記載の中継装置であって、
前記学習部は、前記複数のフローのうち先着パケットが属する特定のフローを前記第１フローに決定することを特徴とする中継装置。
【請求項５】
請求項２に記載の中継装置であって、
前記学習部は、前記複数のフローのうち一定期間内において流量パケット数が最大となる特定のフローを前記第１フローに決定することを特徴とする中継装置。
【請求項６】
請求項２に記載の中継装置であって、
前記学習結果処理部は、前記第２対応情報のうち登録されてから所定期間経過した学習結果を削除することを特徴とする中継装置。
【請求項７】
請求項２に記載の中継装置であって、
前記学習結果処理部は、前記第２対応情報のうち登録されてからの流量パケット数がしきい値以下となった前記第２フローに対応する学習結果を削除することを特徴とする中継装置。
【請求項８】
パケット群を中継する中継装置による中継方法であって、
前記中継装置は、
第１フローに属し前記第１フローを特定する第１特定情報を含む第１パケットを格納する１以上の第１キューと、前記第１特定情報から変換されたハッシュ値と同一ハッシュ値に変換され第２フローを特定する第２特定情報を含む第２パケットを格納する１以上の第２キューと、を有するキュー群と、
前記ハッシュ値と前記第１キューとを対応付けた第１対応情報を記憶する第１記憶部と、
前記第２特定情報と前記第２キューとを対応付けた第２対応情報を記憶する第２記憶部と、を有し、
前記中継方法では、
前記中継装置は、
前記パケット群を受信し、
前記パケット群の各々のパケットに含まれており前記パケットが属するフローを特定する特定情報が前記第２特定情報に一致するか否かを判定し、一致する場合には前記第２対応情報を参照して前記パケットを前記第２パケットとして前記第２キューに振り分け、一致しない場合には前記特定情報を前記ハッシュ値に変換し、前記第１対応情報を参照して前記パケットを前記第１パケットとして前記第１キューに振り分け、
前記第１キューおよび前記第２キューに振り分けられた前記パケット群を送信する、
ことを特徴とする中継方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット群を中継する中継装置に関する。
【背景技術】
【０００２】
近年、動画や音声といった電子的なコンテンツをネットワーク経由でリアルタイム配信する、いわゆるストリーミング技術が普及している。かかるストリーミングをインターネットを介して実現する場合、多数のユーザ間で同一の回線が共用される。このため、帯域あたりのコストが低く抑えられる。一方で、通信パケットの廃棄量を抑制することにより、通信品質（ＱｏＳ：Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）が確保される。このようなことから、中継装置はシェーパを搭載し、一度に多量に送信されるデータを一定レートに平準化して転送する技術が知られている（たとえば、下記特許文献１を参照）。
【０００３】
特許文献１は、ユーザやサービスに対応したフロー条件を予め構成定義情報として設定しておき、受信した通信パケットを、フローごとに用意したキューに一旦蓄積して、予め定めたシェーピング条件（送出帯域値や優先度）に基づいて通信パケットの転送を行う技術を開示する。
【０００４】
特許文献２は、入力フローをパケットのヘッダ情報などを元に一定のハッシュ関数によりハッシュ値へ変換し、ハッシュ値に対応したキューに自動で振り分けることにより通信の平準化を行う技術を開示する。また、特許文献２は、ハッシュ値のコリジョンなどにより廃棄が発生した場合は、ハッシュ関数を変更することで再度、平準化を行う技術を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３４６２４６号公報
【特許文献２】特開２００９−１８２５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の技術は、ユーザやサービスごとにフローを設定する必要があるため、多数のユーザやサービスに対応することが困難である。たとえば、数百万のユーザごとにフローを設定する場合、キューの数をユーザ数と同一数分確保することは困難である。仮に、数百万のキューを確保したとしても、記憶媒体の容量の膨大化、または、受信パケットの振り分け処理によって生じる過大な負荷は、大幅なコスト増加を招き、現実的ではない。しかも、アクティブ率の低いユーザのキューを確保することは非効率である。
【０００７】
また、特許文献２の技術では、ハッシュ関数の変更後もハッシュ値のコリジョンが発生する可能性がある。またこれにより、ハッシュ関数の変更が頻発することで送信パケットの順序逆転が頻発する可能性がある。
【０００８】
本発明は、記憶容量の増加を抑制しつつ通信品質の向上を図ることを目的とする。
【課題を解決するための手段】
【０００９】
本願において開示される発明の一側面となる中継装置および中継方法は、パケット群を中継する中継装置及びその中継方法であって、中継装置は、第１フローに属し前記第１フローを特定する第１特定情報を含む第１パケットを格納する１以上の第１キューと、前記第１特定情報から変換されたハッシュ値と同一ハッシュ値に変換され第２フローを特定する第２特定情報を含む第２パケットを格納する１以上の第２キューと、を有するキュー群と、前記ハッシュ値と前記第１キューとを対応付けた第１対応情報を記憶する第１記憶部と、前記第２特定情報と前記第２キューとを対応付けた第２対応情報を記憶する第２記憶部と、を有し、中継装置は、受信部により、前記パケット群を受信し、振分部により、前記受信部によって受信されたパケット群の各々のパケットに含まれており前記パケットが属するフローを特定する特定情報が前記第２特定情報に一致するか否かを判定し、一致する場合には前記第２対応情報を参照して前記パケットを前記第２パケットとして前記第２キューに振り分け、一致しない場合には前記特定情報を前記ハッシュ値に変換し、前記第１対応情報を参照して前記パケットを前記第１パケットとして前記第１キューに振り分け、送信部により、前記振分部によって前記第１キューおよび前記第２キューに振り分けられた前記パケット群を送信することを特徴とする。
【発明の効果】
【００１０】
本発明の代表的な実施の形態によれば、記憶容量の増加を抑制しつつ通信品質の向上を図ることができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１１】
【図１】図１は、通信システムの一例を示す説明図である。
【図２】図２は、ルータの構成例を示すブロック図である。
【図３】図３は、振分部の詳細な構成例を示す説明図である。
【図４】図４は、学習部の詳細な構成例を示す説明図である。
【図５】図５は、振分部による振り分け処理手順例を示すフローチャートである。
【図６】図６は、学習部による学習処理手順例を示すフローチャートである。
【図７】図７は、学習結果処理部による学習結果処理手順例を示すフローチャートである。
【図８】図８は、学習結果処理部による予備領域更新処理１の詳細な処理手順例を示すフローチャートである。
【図９】図９は、学習結果処理部による予備領域更新処理２の詳細な処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
＜システム構成例＞
図１は、通信システムの一例を示す説明図である。通信システム１００は、動画等のコンテンツをストリーミングによってユーザに提供するネットワークシステムである。図示するように、通信システム１００は、サーバＳＶ１，ＳＶ２と、中継装置であるルータＲＴ１〜ＲＴ５と、端末であるパーソナルコンピュータＰＣ１〜ＰＣ３とを備えている。
【００１３】
サーバＳＶ１，ＳＶ２は、コンテンツを提供するサーバであり、各種コンテンツを記憶する。サーバＳＶ１，ＳＶ２は、ルータＲＴ１に直接的に接続されている。なお、ルータＲＴ１に接続されるサーバの数は、説明を簡単にするために２つとして示しているが、３以上であってもよい。
【００１４】
ルータＲＴ１は、ネットワークＮＴに接続される。ネットワークＮＴは、たとえば、インターネットである。ただし、ネットワークＮＴの種類は、特に限定するものではなく、専用回線などのＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよいし、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよい。
【００１５】
また、ルータＲＴ２は、ネットワークＮＴに接続される。サーバＳＶ１，ＳＶ２，ルータＲＴ１，ＲＴ２は、たとえば、コンテンツ配信サービスを行うＩＳＰ（Ｉｎｔｅｒｎｅｔ  Ｓｅｒｖｉｃｅ  Ｐｒｏｖｉｄｅｒ）により設置される。ルータＲＴ２は、各家庭Ａ〜Ｃに設置されたルータＲＴ３〜ＲＴ５を介して、パーソナルコンピュータＰＣ１〜ＰＣ３にそれぞれ接続される。ルータＲＴ２とルータＲＴ３〜ＲＴ５との間には、他の中継装置や集線装置が介在してもよい。
【００１６】
パーソナルコンピュータＰＣ１〜ＰＣ３は、汎用のパーソナルコンピュータである。なお、ルータＲＴ３〜ＲＴ５に接続される端末は、サーバＳＶ１，ＳＶ２の配信するコンテンツを利用可能なコンピュータであればよく、たとえば、ネットワーク対応テレビなどであってもよい。また、ルータＲＴ３〜ＲＴ５には、複数の端末が接続されていてもよい。また、ルータＲＴ２は、説明を簡単にするために、家庭Ａ〜Ｃのネットワークに接続されるものとしたが、実際には、たとえば、数千や数万の家庭のネットワークに接続される。
【００１７】
通信システム１００において、サーバＳＶ１，ＳＶ２は、パーソナルコンピュータＰＣ１〜ＰＣ３から、コンテンツの利用要求を受け付けると、利用要求されたコンテンツを、利用要求元のパーソナルコンピュータＰＣ１〜ＰＣ３に配信する。ルータＲＴ１，ＲＴ２は、サーバＳＶ１，ＳＶ２が配信するパケットを受信すると、それぞれのパケットを一旦バッファに蓄積し、平準化してパーソナルコンピュータＰＣ１〜ＰＣ３に向けて転送する。パーソナルコンピュータＰＣ１〜ＰＣ３は、ルータＲＴ３〜ＲＴ５を介して、転送されたパケットを受信して、予めインストールされたアプリケーションで利用する。
【００１８】
＜ルータの構成例＞
図２は、ルータの構成例を示すブロック図である。なお、図１に示したルータＲＴ１，ＲＴ２は、本実施例においては同一構成であるので、以下では、特に断る場合を除いて、ルータＲＴ１の構成について説明する。ルータＲＴ１は、受信部２０１と振分部２０２と学習部２０３とバッファ２０４と帯域制御部２０５と送信部２０６と学習結果処理部２０７とを備えている。
【００１９】
受信部２０１は、外部からパケットＰを受信するインタフェースである。本実施例では、受信部２０１は、２つの物理ポート（不図示）を備える。この２つの物理ポートには、サーバＳＶ１，ＳＶ２が接続される。受信部２０１は、サーバＳＶ１，ＳＶ２からパケットＰを受信して、振分部２０２に出力する。なお、受信部２０１は、３つ以上の物理ポートを備えていてもよい。この場合、受信部２０１は、３以上のサーバに接続されてもよい。
【００２０】
振分部２０２は、受信部２０１が受信したパケットＰを、バッファ２０４に確保されたキューＱ１〜Ｑｎ（ｎは２以上の任意の整数。キューＱ１〜Ｑｎを区別しない場合、キューＱと表記する。）のいずれかへ振り分ける。具体的には、たとえば、振分部２０２は、パケットＰのヘッダｈに含まれているヘッダ情報を、所定のハッシュ関数でハッシュ値に変換し、当該パケットＰをハッシュ値に対応したキューＱに振り分ける。
【００２１】
振分部２０２は、判定部２２１とハッシュ値テーブル２２２とを有する。判定部２２１は、パケットＰのヘッダｈに含まれているヘッダ情報をハッシュ関数に与えハッシュ値に変換する。ここで、ハッシュ関数に与えられる情報を、「ハッシュ変換キーｋ」と呼称する。ハッシュ変換キーｋとして使用するヘッダ情報としては、たとえば、ＭＡＣヘッダなどのレイヤ２ヘッダ、ＩＰｖ４ヘッダやＩＰｖ６ヘッダなどのレイヤ３ヘッダおよびＴＣＰヘッダやＵＰＣヘッダなどのレイヤ４ヘッダのいずれかまたは複数のフィールドを使用してもよい。フィールドの選択は装置固定でもよいし、装置運用者が指定可能としてもよい。ハッシュ変換キーｋは、そのパケットＰが属するフローＦを特定するフロー特定情報である。本例では、説明を簡略化するため、ヘッダ情報の一例として送信元ＩＰアドレスを用いる。
【００２２】
判定部２２１は、正常なフローＦ（以下、正常フローＦａ）とコリジョンしたフローＦ（以下、コリジョンフローＦｂ）に属するパケットＰのハッシュ変換キーｋｂを保持しており、受信部２０１からのパケットＰのハッシュ変換キーｋと一致するか否かを判定する。
【００２３】
コリジョンとは、ハッシュ値の衝突である。すなわち、正常フローＦａに属するパケットＰに含まれるハッシュ変換キーｋ（以下、ハッシュ変換キーｋａを表記）から得られるハッシュ値Ｈと、コリジョンフローＦｂに属するパケットＰに含まれるハッシュ変換キーｋ（以下、ハッシュ変換キーｋｂを表記。ｋｂ≠ｋａ）から得られるハッシュ値Ｈとが、同一の値になることである。すなわち、正常フローＦａとコリジョンフローＦｂは、ハッシュ変換キーｋは異なるがハッシュ値は同一となるパケットＰが流れるフローＦである。
【００２４】
不一致の場合、判定部２２１は、上述したように受信部２０１からのパケットＰのハッシュ変換キーｋをハッシュ値Ｈに変換する。一方、一致する場合、判定部２２１は、受信部２０１からのパケットＰのハッシュ変換キーｋをハッシュ変換せず、正常フローＦａをキューイングするキューＱａとは別に用意されている予備領域のキューＱｂに当該パケットＰを送出する。
【００２５】
ハッシュ値テーブル２２２は、判定部２２１から得られたハッシュ値Ｈと、バッファ２０４のキューＱとを対応付けたテーブルである。たとえば、ハッシュ値Ｈが１の場合、対応するキューＱはＱ１といった情報を格納する。なお、振分部２０２は、たとえば、集積回路により実現される。ハッシュ値テーブル２２２は、集積回路内のメモリに格納される。
【００２６】
学習部２０３は、振分部２０２によって対応する複数のキューＱに振り分けられたフローＦ１〜Ｆｎ（フローＦ１〜Ｆｎを区別しない場合、フローＦと表記する。）を監視して、どのフローＦのパケットがどのキューＱに振り分けられるかを学習する。具体的には、たとえば、学習部２０３は、キューＱごとにパケットＰの流量を監視し、ハッシュ変換キーｋを元に、同一のキューＱに複数のフローＦのパケットＰが格納されるのを検出する。学習部２０３は、同一のキューＱに複数のフローＦのパケットＰが格納されるのを検出した場合、複数のフローＦのうちいずれか１つのフローＦを正常フローＦａとして学習し、残余のフローＦを、コリジョンフローＦｂとして学習する。
【００２７】
学習部２０３は、振分部２０２による振り分けにしたがってキューＱにパケットＰを送出し、学習結果を学習結果処理部２０７に出力する。学習結果は、たとえば、コリジョンフローＦｂに属するパケットＰのハッシュ変換キーｋを含む。なお、学習部２０３は、たとえば、集積回路、または、メモリに記憶されたプログラムをプロセッサに実行させることにより実現される。
【００２８】
バッファ２０４は、受信部２０１が受信したパケットＰを一時的に蓄積する記憶領域であり、複数のキューＱ１〜Ｑｎを有する。本実施例では、キューＱ１〜Ｑｎの各々には、たとえば、同一の記憶容量が割り当てられている。複数のキューＱ１〜Ｑｎには、上述したように、振分部２０２が決定した振り分け結果によって、受信した各々のパケットＰが格納される。なお、輻輳時には、キューＱ１〜Ｑｎの容量を超えるパケットＰは、廃棄される。たとえば、キューＱに容量分のパケットＰが既に蓄積されている場合には、新たにバッファ２０４に入力されるパケットＰは、当該キューＱに格納されずに破棄される。
【００２９】
帯域制御部２０５は、キューＱ１〜Ｑｎごとに帯域を制御して、キューＱ１〜Ｑｎに蓄積されたパケットＰを送信部２０６に出力する。具体的には、たとえば、帯域制御部１４０は、予め設定された帯域制御ルールに基づいてスケジューリングを行い、キューＱ１〜Ｑｎから順次パケットＰを読み出して、送信部２０６に出力する。なお、帯域制御部２０５は、たとえば、集積回路により実現される。
【００３０】
送信部２０６は、パケットＰを外部へ送信するインタフェースである。本実施例では、均等割り当て方式によってスケジュールリングを行うこととした。具体的には、たとえば、キューＱ１〜Ｑｎに蓄積されたパケットＰは、キューＱ１〜Ｑｎ間で均等な頻度で読み出される。ただし、スケジューリングアルゴリズムは、特に限定するものではなく、たとえば、重み付け均等割り当て方式などであってもよい。また、最低帯域保証方式、最大帯域規制方式、余剰帯域重み付け分配方式などを用いてもよい。
【００３１】
学習結果処理部２０７は、学習部２０３より学習結果を受け取り、各種処理を実行する。たとえば、学習結果処理部２０７は、学習結果を振分部２０２に反映させる。具体的には、たとえば、学習結果処理部２０７は、振分部２０２を制御して、上述した予備領域のキューＱと学習結果に含まれるハッシュ変換キーｋｂとを関連付ける。これにより、振分部２０２は、当該ハッシュ変換キーを含むパケットＰを受信した場合、ハッシュ値に変換せずに、対応するキューＱに送出する。
【００３２】
また、学習結果処理部２０７は、振分部２０２を制御して、予備領域のキューＱと関連付けたハッシュ変換キーｋｂを、たとえば、エージングにより削除する。学習結果処理部２０７は、振分部２０２を制御して、予備領域のキューＱと関連付けたハッシュ変換キーｋｂを、たとえば、当該コリジョンフローＦの流量が所定量以下となったことを学習部２０３から取得した場合に削除してもよい。
【００３３】
また、学習結果処理部２０７は、トラップまたはシステムログなどのメッセージを用いて、送信部２０６から学習結果を運用者の端末に送信したり、または、図示しない表示部に表示したりすることで、運用者に学習結果を通知する。学習結果処理部２０７は、学習結果が登録または削除した場合、当該情報を運用者に通知してもよい。なお、学習結果処理部２０７は、具体的には、たとえば、当該学習結果処理部２０７の処理を実行するプログラムをプロセッサに実行させることで実現される。
【００３４】
＜振分部２０２の詳細構成例＞
図３は、振分部２０２の詳細な構成例を示す説明図である。振分部２０２は、判定部２２１とハッシュ値テーブル２２２とを有する。判定部２２１は、変換部３０１と、学習結果テーブル３０２と、を有する。変換部３０１は、パケットＰのハッシュ変換キーｋａをハッシュ値Ｈに変換する。学習結果テーブル３０２は、予備領域ハッシュ変換キー３２１と、予備領域キュー３２２と、を関連付けたテーブルである。予備領域ハッシュ変換キー３２１は、コリジョンフローＦに属するパケットＰのハッシュ変換キーｋｂを記憶する記憶領域である。予備領域キュー３２２は、コリジョンフローＦが送出されるキューＱｂの識別情報を記憶する記憶領域である。
【００３５】
学習結果テーブル３０２のエントリは、エージングにより一定期間経過すると、学習結果処理部２０７により削除される。また、学習結果テーブル３０２のエントリは、予備領域ハッシュ変換キー３２１に対応するコリジョンフローＦの流量が所定量以下となった場合、学習結果処理部２０７により削除されてもよい。学習結果テーブル３０２は、集積回路内のメモリに格納される。
【００３６】
ハッシュ値テーブル２２２は、ハッシュ値３０３と、キュー３０４と、使用中フラグ３０５と、を有する。ハッシュ値３０３は、ハッシュ値Ｈ１〜Ｈｉ（ｉはｎよりも小さい整数。ｎはキューＱの総数。ハッシュ値Ｈ１〜Ｈｉを区別しない場合、ハッシュ値Ｈと表記する。）を記憶する記憶領域である。
【００３７】
キュー３０４は、キューＱａ１〜Ｑａｉ（キューＱａ１〜Ｑａｉを区別しない場合、キューＱａと表記する。）の識別情報を記憶する記憶領域である。具体的には、たとえば、キューＱａ１〜Ｑａｉはそれぞれ、ハッシュ値Ｈに対応する。キューＱａ１〜Ｑａｉは、たとえば、キューＱ１〜Ｑｉである。なお、キューＱａを通常領域と称す。
【００３８】
キューＱｂ１〜Ｑｂｊ（ｊは、ｎ−ｉとなる整数。キューＱｂ１〜Ｑｂｊを区別しない場合、キューＱｂと表記する。）は、ハッシュ値３０３と対応付けされない。キューＱｂ１〜Ｑｂｊは、たとえば、キューＱｉ＋１〜Ｑｎである。なお、キューＱｂを予備領域と称す。パケットＰは、通常領域のキューＱａに送出されるが、コリジョンが判明するとコリジョンフローＦｂに属するパケットＰは、予備領域のキューＱｂに送出される。なお、キューＱａ，Ｑｂを区別しない場合、キューＱと表記する。
【００３９】
使用中フラグ３０５は、予備領域のエントリについて使用中フラグを記憶する記憶領域である。判定部２２１は、コリジョンフローＦｂに属するパケットＰを送出すべきキューＱを探索する場合、予備領域の使用中フラグ３０５を参照する。使用中フラグ３０５の値ｆｂ１〜Ｆｂｊ（使用中フラグ３０５の値ｆｂ１〜Ｆｂｊと特定しない場合、使用中フラグ３０５の値ｆｂ、または、使用中フラグｆｂと表記する）は、ＯＮまたはＯＦＦの２値である。「ＯＮ」は、使用中を意味し、「ＯＦＦ」は使用されていないことを意味する。コリジョンフローＦに属するパケットＰをキューＱに送出する場合、判定部２２１は、使用中フラグ３０５の値ｆｂがＯＦＦであるキュー３０４（Ｑｂ）を特定し、そのキュー３０４（Ｑｂ）に当該パケットＰを送出する。
【００４０】
＜学習部２０３の詳細構成例＞
図４は、学習部２０３の詳細な構成例を示す説明図である。学習部２０３は、学習機構ＬＲＮｔ１〜ＬＲＮｔｍ（ｍは、０≦ｍ≦ｎを満たす整数。学習機構ＬＲＮｔ１〜ＬＲＮｔｍを区別しない場合、学習機構ＬＲＮｔと表記する。）を有する。たとえば、１つの学習機構ＬＲＮｔは、１以上のフローＦの振分先となるキューＱに対応する。図４では、フローＦ１、Ｆ２が同一のキューＱに振り分けられたため、学習機構ＬＲＮｔ１がフローＦ１、Ｆ２を監視、学習する。同様に、学習機構ＬＲＮｔ２がフローＦ３、Ｆ４を監視、学習する。学習機構ＬＲＮｔｍ−１がフローＦｎ−３、Ｆｎ−２を監視、学習する。学習機構ＬＲＮｔｍがフローＦｎ−１、Ｆｎを監視、学習する。
【００４１】
また、図４では、たとえば、学習部２０３の負荷低減のため、学習部２０３は、学習機構ＬＲＮｔ１〜ＬＲＮｔｍによる処理を時間ｔ１〜ｔｍ（時間ｔ１〜ｔｍを区別しない場合、時間ｔと表記する。）で、時分割で実行する。時間ｔｍでの処理が完了した場合、再度時間ｔ１に対応する学習機構ＬＲＮｔ１から再度繰り返す。なお、１つの学習機構ＬＲＮｔがいくつのフローＦを担当するか、および、時間ｔ１〜ｔｍを何時間にするかは、ルータＲＴ１の運用者が固定的に指定可能としてもよく、また、学習部２０３でのＣＰＵ使用率に連動して自動で決定してもよい。たとえば、学習部２０３は、ＣＰＵ使用率が高くなると、１つの学習機構ＬＲＮｔが担当するフロー数を減少させたり、時間ｔを短縮したりする。逆に、学習部２０３は、ＣＰＵ使用率が低くなると、１つの学習機構ＬＲＮｔが担当するフロー数を増加させたり、時間ｔを長くしたりする。
【００４２】
学習機構ＬＲＮｔは、学習対象となるフローＦについてコリジョンしているか否かを監視する。具体的には、たとえば、学習機構ＬＲＮｔは、ハッシュ変換キーｋが異なる複数のパケットＰが学習機構ＬＲＮｔを通過する場合、学習機構ＬＲＮｔは、コリジョンが発生していると判定する。たとえば、学習機構ＬＲＮｔは、ハッシュ変換キーｋが異なる複数のパケットＰが学習機構ＬＲＮｔを通過する場合、先着パケットＰのハッシュ変換キーｋに対応するフローＦを正常フローＦａに決定し、残余のフローＦをコリジョンフローＦｂに決定する。この学習以降は、振分先となるキューＱａには正常フローＦａが流れ、コリジョンフローＦｂは、予備領域のキューＱｂに流れることになる。
【００４３】
このように、先着パケットＰで正常フローＦａを決定することにより、学習機構ＬＲＮｔでの学習処理の高速化や処理負荷の軽減を図ることができる。なお、学習機構ＬＲＮｔは、先着パケットＰではなく、時間ｔ内でのハッシュ変換キーｋごとの最大パケット数となるフローＦを正常フローＦａに決定してもよい。これにより、学習機構ＬＲＮｔでの学習処理の高精度化を図ることができる。なお、最大パケット数となるフローＦが複数ある場合、先着パケットＰで正常フローＦａを決定すればよい。これにより、可能な限り学習処理の高精度化を図りつつ、学習処理の効率化を図ることができる。
【００４４】
＜振分部２０２による振り分け処理手順例＞
図５は、振分部２０２による振り分け処理手順例を示すフローチャートである。振分部２０２は、受信部２０１からパケットＰを取得すると（ステップＳ５０１）、振分部２０２は、取得したパケットＰのヘッダｈに含まれているヘッダ情報の少なくとも一部のフィールド（たとえば、送信元ＩＰアドレス）をハッシュ変換キーｋとして取得する（ステップＳ５０２）。
【００４５】
振分部２０２は、取得したパケットＰはコリジョンフローＦのパケットＰであるか否かを判断する（ステップＳ５０３）。具体的には、たとえば、振分部２０２は、学習結果テーブル３０２の予備領域ハッシュ変換キー３２１を参照し、取得したパケットＰのハッシュ変換キーｋに一致するか否かを判断する。取得したパケットＰのハッシュ変換キーｋに一致する場合、取得したパケットＰはコリジョンフローＦのパケットＰとなる（ステップＳ５０３：Ｙｅｓ）。したがって、ステップＳ５０７に移行する。一方、取得したパケットＰのハッシュ変換キーｋに一致しない場合、取得したパケットＰは正常フローＦａのパケットＰとなる（ステップＳ５０３：Ｎｏ）。したがって、ステップＳ５０４に移行する。
【００４６】
ステップＳ５０４において、振分部２０２は、ステップＳ５０２で取得したハッシュ変換キーｋをハッシュ関数に与えてハッシュ値Ｈを算出する（ステップＳ５０４）。そして、振分部２０２は、ハッシュ値テーブル２２２の通常領域のエントリ群を参照して、キュー３０４から、ハッシュ値３０３（算出ハッシュ値Ｈ）に対応するキューＱａを特定する。振分部２０２は、特定したキューＱａに、ステップＳ５０１で取得したパケットＰを出力する（ステップＳ５０６）。これにより、振分部２０２の振分処理は終了する。
【００４７】
また、ステップＳ５０７において、振分部２０２は、ステップＳ５０３で取得したハッシュ変換キーｋｂに対応するキューＱｂを学習結果テーブル３０２から特定する（ステップＳ５０７）。振分部２０２は、特定したキューＱｂに、ステップＳ５０１で取得したパケットＰを出力する（ステップＳ５０６）。これにより、振分部２０２の振分処理は終了する。
【００４８】
＜学習部による学習処理手順例＞
図６は、学習部２０３による学習処理手順例を示すフローチャートである。学習部２０３は、学習機構ＬＲＮｔによる時分割処理を開始する（ステップＳ６０１）。ステップＳ６０２〜Ｓ６０４は、各学習機構ＬＲＮｔによる学習処理である。学習機構ＬＲＮｔは、通過するフローＦを時間ｔ内で学習する（ステップＳ６０２）。学習機構ＬＲＮｔは、複数のフローＦが通過しているか否かを判断する（ステップＳ６０３）。複数のフローＦが通過していない場合（ステップＳ６０３：Ｎｏ）、学習機構ＬＲＮｔの学習処理は終了し、ステップＳ６０５に移行する。
【００４９】
一方、複数のフローＦが通過している場合（ステップＳ６０３：Ｙｅｓ）、学習機構ＬＲＮｔは、先着パケットＰまたはハッシュ変換キーｋごとの最大パケット数により、正常フローＦａのパケットＰのハッシュ変換キーｋａと、コリジョンフローＦｂのハッシュ変換キーｋｂとを特定する（ステップＳ６０４）。これにより、学習機構ＬＲＮｔの学習処理は終了し、ステップＳ６０５に移行する。
【００５０】
学習部２０３は、各学習機構ＬＲＮｔによる学習処理が終了すると、各学習機構ＬＲＮｔにといて特定されたコリジョンフローＦｂのハッシュ変換キーｋｂと、ハッシュ値テーブル２２２の予備領域において現在使用されていない（使用中フラグ３０５がＯＦＦ）キューＱｂ（の識別情報）と、を学習結果として学習結果処理部２０７に出力する（ステップＳ６０５）。これにより、学習部２０３による学習処理は終了する。
【００５１】
＜学習結果処理部２０７による学習結果処理手順例＞
図７は、学習結果処理部２０７による学習結果処理手順例を示すフローチャートである。学習結果処理部２０７は、学習部２０３から学習結果であるハッシュ変換キーｋｂを取得する（ステップＳ７０１）。学習結果処理部２０７は、学習結果から、ハッシュ変換キーｋｂとキューＱｂ（の識別情報）とを１つずつ取り出して対応付け、組を生成する（ステップＳ７０２）。学習結果処理部２０７は、未選択の組があるか否かを判断する（ステップＳ７０３）。未選択の組がある場合（ステップＳ７０３：Ｙｅｓ）、学習結果処理部２０７は、未選択の組を１つ選択する（ステップＳ７０４）。
【００５２】
学習結果処理部２０７は、選択した組を学習結果テーブル３０２に登録する（ステップＳ７０５）。学習結果処理部２０７は、選択した組のキューＱｂについて、ハッシュ値テーブル２２２の使用中フラグ３０５の値ｆｂをＯＮにする（ステップＳ７０６）。そして、ステップＳ７０３に戻る。ステップＳ７０３において、未選択の組がない場合（ステップＳ７０３：Ｎｏ）、学習結果処理は終了する。
【００５３】
＜学習結果処理部２０７による予備領域更新処理１＞
つぎに、学習結果処理部２０７による予備領域更新処理１について説明する。予備領域更新処理１では、学習結果処理部２０７は、振分部２０２を制御して、学習結果テーブル３０２のエントリをエージングにより削除する。これにより、古いコリジョンフローＦｂから最新のコリジョンフローＦｂに予備領域のキューＱｂを割り当てることができる。以下、詳細な処理手順例について説明する。
【００５４】
図８は、学習結果処理部２０７による予備領域更新処理１の詳細な処理手順例を示すフローチャートである。まず、学習結果処理部２０７は、ステップＳ７０６のハッシュ変換キーｋｂの登録が完了を待ち受ける（ステップＳ８０１：Ｎｏ）。完了した場合（ステップＳ８０１：Ｙｅｓ）、学習結果処理部２０７は、当該登録したハッシュ変換キーｋｂについて計時を開始する（ステップＳ８０２）。そして、学習結果処理部２０７は、所定時間経過するのを待ち受ける（ステップＳ８０３：Ｎｏ）。所定時間経過した場合（ステップＳ８０３：Ｙｅｓ）、学習結果処理部２０７は、ステップＳ７０６で登録したハッシュ変換キーｋｂのエントリを学習結果テーブル３０２から削除する（ステップＳ８０４）。
【００５５】
そして、学習結果処理部２０７は、ステップＳ８０４で削除したハッシュ変換キーｋｂに対応する予備領域の使用中フラグ３０５の値ｆｂをＯＦＦにし（ステップＳ８０５）、予備領域更新処理１が終了する。これにより、古いコリジョンフローＦｂから最新のコリジョンフローＦｂに予備領域のキューＱｂを割り当てることができる。また、コリジョンフローＦの流量を監視する必要がないため、学習処理部における処理負荷の低減を図ることができる。
【００５６】
＜学習結果処理部２０７による予備領域更新処理２＞
つぎに、学習結果処理部２０７による予備領域更新処理２について説明する。予備領域更新処理２では、学習結果処理部２０７は、学習部２０３からコリジョンフローＦの流量を監視し、振分部２０２を制御して、所定量以下となったコリジョンフローＦのエントリを削除する。これにより、流量が多いほどコリジョンフローＦに予備領域のキューＱｂを割り当てることができる。以下、詳細な処理手順例について説明する。
【００５７】
図９は、学習結果処理部２０７による予備領域更新処理２の詳細な処理手順例を示すフローチャートである。まず、学習結果処理部２０７は、コリジョンフローＦを予備領域のキューＱｂに送出する学習機構ＬＲＮｔからコリジョンフローＦの流量を取得する（ステップＳ９０１）。学習結果処理部２０７は、取得した流量が所定量以下のコリジョンフローＦｂがあるか否かを判断する（ステップＳ９０２）。所定量は、あらかじめ運用者により設定される。
【００５８】
取得した流量が所定量以下のコリジョンフローＦｂがない場合（ステップＳ９０２：Ｎｏ）、予備領域更新処理２が終了する。一方、取得した流量が所定量以下のコリジョンフローＦｂがある場合（ステップＳ９０２：Ｙｅｓ）、学習結果処理部２０７は、所定量以下のコリジョンフローＦｂに対応するエントリを学習結果テーブル３０２から削除する（ステップＳ９０３）。学習結果処理部２０７は、削除したハッシュ変換キーｋｂに対応する予備領域キュー３２２（Ｑｂ）を特定し、特定したキューＱｂに対応する予備領域の使用中フラグ３０５の値ｆｂをＯＦＦにし（ステップＳ９０４）、予備領域更新処理２が終了する。これにより、流量が多いほどコリジョンフローＦｂに予備領域のキューＱｂを割り当てることができる。したがって、高精度な振分けを実現することができる。
【００５９】
なお、図９では、所定量以下のコリジョンフローＦｂに対応するエントリを学習結果テーブル３０２から削除する（ステップＳ９０３）こととしたが、一定期間連続して、所定量以下となった場合に、そのコリジョンフローＦｂに対応するエントリを学習結果テーブル３０２から削除してもよい。これにより、より高精度な振分けを実現することができる。
【００６０】
このように、本実施例のルータＲＴ１は、パケット群を中継する中継装置であって、１以上の第１キュー（キューＱａ）と１以上の第２キュー（キューＱｂ）とを有するキュー群（バッファ２０４）と、第１対応情報（ハッシュ値テーブル２２２）と、第２対応情報（学習結果テーブル３０２）と、を有する。
【００６１】
第１キューは、第１パケットを格納する。第１パケットは、第１フロー（正常フローＦａ）に属し、第１フローを特定する第１特定情報（ハッシュ変換キーｋａ）を含む。第２キューは、第２パケットを格納する。第２パケットは、第１特定情報から変換されたハッシュ値と同一ハッシュ値に変換され、第２フロー（コリジョンフローＦｂ）を特定する第２特定情報（ハッシュ変換キーｋｂ）を含む。
【００６２】
第１対応情報は、ハッシュ値と第１キューを指定する第１キュー（Ｑａ）とを対応付けて記憶する。第２対応情報は、第２特定情報と第２キューを指定する第２キュー（Ｑｂ）とを対応付けて記憶する。
【００６３】
ルータＲＴ１は、パケット群を受信する受信部２０１と、振分部２０２と、送信部２０６と、を有する。振分部２０２は、受信部２０１によって受信されたパケット群の各々のパケットに含まれておりパケットが属するフローを特定する特定情報（ハッシュ変換キーｋ）が第２特定情報に一致するか否かを、判定部２２１により判定する。振分部２０２は、一致する場合には第２対応情報を参照してパケットを第２パケットとして第２キューに振り分け、一致しない場合には特定情報をハッシュ値に変換し、第１対応情報を参照してパケットを第１パケットとして第１キューに振り分ける。
【００６４】
送信部２０６は、振分部２０２によって第１キューおよび第２キューに振り分けられたパケット群を送信する。
【００６５】
このように、上述したルータＲＴ１では、複数のフローＦにおいてコリジョンが発生した場合に、コリジョンフローＦｂを予備領域のキューＱに退避させるため、ユーザやサービスごとにフローを設定する必要がなく、特にアクティブ率の低いユーザのキューＱを確保する必要はない。これにより、記憶媒体の容量の膨大化を抑制することができる。また、複数のフローＦにおいてコリジョンが発生した場合に、コリジョンフローＦｂを予備領域のキューＱに退避させるため、ハッシュ値のコリジョンを回避でき、パケットＰの順序逆転を抑制し、その結果、コリジョンによる輻輳の影響がトラフィック全体に及ぶことを抑制し、通信品質を確保することができる。
【００６６】
また、ルータＲＴ１は、学習部２０３と学習結果処理部２０７を有してもよい。学習部２０３は、振分部２０２によって振り分けられた結果、特定情報が異なるパケットが属する複数のフローＦが同一の第１キューに出力されるのを検出し、複数のフローＦのうち、特定のフローを第１フローに決定し、特定のフロー以外の他のフローを前記第２フローに決定する。学習結果処理部２０７は、学習部２０３によって第２フローに決定された他のフローに属するパケットに含まれる特定情報と、第２対応情報の第２キューの識別情報とを含む学習結果を取得し、第２対応情報に登録する。
【００６７】
これにより、ルータＲＴ１は、自律的に第２対応情報を更新することができ、通信品質の確保を継続することができる。
【００６８】
また、学習結果処理部２０７は、第２対応情報に、学習結果に含まれる第２キューが使用中であることを示す情報（使用中フラグ３０５）を付与し、当該付与後に学習結果を取得する場合、使用中であることを示す情報が付与されていない第２キューを選択する。
【００６９】
これにより、使用中の第２キューの選択を防止することができ、第２キューにおいてもコリジョンを抑制することができる。
【００７０】
また、学習部２０３は、複数のフローＦのうち先着パケットＰを含む特定のフローを第１フローに決定してもよい。これにより、学習部２０３での学習処理の高速化や処理負荷の軽減を図ることができる。
【００７１】
また、学習部２０３は、複数のフローＦのうち一定期間内において流量パケット数が最大となる特定のフローを第１フローに決定してもよい。これにより、学習部２０３での学習処理の高精度化を図ることができる。
【００７２】
また、学習結果処理部２０７は、第２対応情報のうち登録されてから所定期間経過した学習結果を削除してもよい。これにより、古いコリジョンフローＦｂから最新のコリジョンフローＦｂに第２キューを割り当てることができる。
【００７３】
また、学習結果処理部２０７は、第２対応情報のうち登録されてからの流量パケット数がしきい値以下となった第２フローに対応する学習結果を削除してもよい。これにより、流量が多いほどコリジョンフローＦｂに予備領域のキューＱｂを割り当てることができる。したがって、効率的なキューイングを実現することができる。
【００７４】
また、学習結果処理部２０７は、学習結果を運用者に通知することにより、ハッシュ変換キーｋｂの変更やネットワーク構成の見直しを促すことができる。
【００７５】
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加、削除、または置換をしてもよい。
【００７６】
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
【００７７】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置、又は、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）カード、ＳＤカード、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）の記録媒体に格納することができる。
【００７８】
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
【符号の説明】
【００７９】
１００  通信システム
１４０  帯域制御部
２０１  受信部
２０２  振分部
２０３  学習部
２０４  バッファ
２０５  帯域制御部
２０６  送信部
２０７  学習結果処理部
２２１  判定部
２２２  ハッシュ値テーブル
３０１  変換部
３０２  学習結果テーブル
【図１】
2018121307.tif 000003
【図２】
2018121307.tif 000004
【図３】
2018121307.tif 000005
【図４】
2018121307.tif 000006
【図５】
2018121307.tif 000007
【図６】
2018121307.tif 000008
【図７】
2018121307.tif 000009
【図８】
2018121307.tif 000010
【図９】
2018121307.tif 000011