(57)【要約】【課題】人気の高いコンテンツを判別してキャッシュすることにより、ストレージの書き換え回数を低減し、ストレージの寿命を長期化できる通信装置、通信方法、及び通信プログラムを提供する。【解決手段】一実施形態に係る通信装置は、ネットワークインタフェース部と、キャッシュ判定部と、キャッシュ処理部と、を備える。ネットワークインタフェース部は、クライアントからフレームを受信する。キャッシュ判定部は、フレームが、所定期間以内に所定回数以上、同一のコンテンツを要求するキャッシュ対象であるか判定する。キャッシュ処理部は、フレームがキャッシュ対象である場合、フレームにより要求されたコンテンツをキャッシュする。【選択図】図３
2017058788.tif 000002
【特許請求の範囲】
【請求項１】
クライアントからフレームを受信するネットワークインタフェース部と、
前記フレームが、所定期間以内に所定回数以上、同一のコンテンツを要求するキャッシュ対象であるか判定するキャッシュ判定部と、
前記フレームが前記キャッシュ対象である場合、前記フレームにより要求された前記コンテンツをキャッシュするキャッシュ処理部と、
を備える通信装置。
【請求項２】
前記キャッシュ判定部は、前記フレームに含まれる宛先ＩＰアドレス、絶対ＵＲＩ、ホスト、及び絶対パスの少なくとも１つに基づいて、前記フレームが前記キャッシュ対象であるか判定する
請求項１に記載の通信装置。
【請求項３】
前記キャッシュ判定部は、ブルームフィルタを用いて、前記フレームが前記キャッシュ対象であるか判定する
請求項１又は請求項２に記載の通信装置。
【請求項４】
前記キャッシュ判定部は、所定のタイミングで使用する前記ブルームフィルタを切り替える
請求項３に記載の通信装置。
【請求項５】
前記キャッシュ判定部による判定結果を含むキャッシュ情報を、前記フレームの先頭、ＴＣＰペイロードの中、又は前記フレームの後部に付加するキャッシュ情報付加部を備える
請求項１乃至請求項４のいずれか１項に記載の通信装置。
【請求項６】
前記キャッシュ情報には、前記フレームに含まれる宛先ＩＰアドレス、絶対ＵＲＩ、ホスト、及び絶対パスの少なくとも１つから算出されたハッシュ値が含まれる
請求項５に記載の通信装置。
【請求項７】
前記キャッシュ情報は、ソケット単位で管理され、ソケットと関連付けられて記憶される
請求項５又は請求項６に記載の通信装置。
【請求項８】
前記キャッシュ情報は、先入れ先出しのキューとして記憶される
請求項５乃至請求項７のいずれか１項に記載の通信装置。
【請求項９】
前記キャッシュ判定部は、並列動作し、それぞれハッシュ値を計算する、複数のハッシュ値算出部を備える
請求項１乃至請求項８のいずれか１項に記載の通信装置。
【請求項１０】
前記キャッシュ処理部は、前記コンテンツがキャッシュ済みの場合、キャッシュされた前記コンテンツを前記クライアントに返送する
請求項１乃至請求項９のいずれか１項に記載の通信装置。
【請求項１１】
前記キャッシュ判定部は、ホストプロセッサとは異なるハードウェアモジュールで構成される
請求項１乃至請求項１０のいずれか１項に記載の通信装置。
【請求項１２】
フレームを受信する工程と、
前記フレームが、所定期間以内に所定回数以上、同一のコンテンツを要求するキャッシュ対象であるか判定する工程と、
前記フレームが前記キャッシュ対象である場合、前記フレームにより要求された前記コンテンツをキャッシュする工程と、
を含む通信方法。
【請求項１３】
フレームを受信する工程と、
前記フレームが、所定期間以内に所定回数以上、同一のコンテンツを要求するキャッシュ対象であるか判定する工程と、
前記フレームが前記キャッシュ対象である場合、前記フレームにより要求された前記コンテンツをキャッシュする工程と、
をプロセッサに実行させる通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、通信装置、通信方法、及び通信プログラムに関する。
【背景技術】
【０００２】
従来、通信装置として、プロキシ装置が利用されている。プロキシ装置は、クライアントからコンテンツ取得の要求があると、サーバからコンテンツを代理で取得し、主記憶部であるメモリまたは二次記憶部であるストレージに格納（キャッシュ）し、キャッシュしたコンテンツをクライアントに返送する。
【０００３】
上記従来のプロキシ装置は、フラッシュメモリなどの書き換え回数に制限があるストレージを備える場合、全てのコンテンツをキャッシュすると、ストレージの寿命が短くなるという問題があった。また、搭載できるメモリの記憶容量に上限がある場合、不必要なコンテンツをキャッシュすると、二次記憶部への書き出しや古いコンテンツの破棄が必要となり、効率が悪化するという問題もあった。
【０００４】
一方、映像コンテンツ配信では、パレートの法則が成立し、全コンテンツの２割がトラフィックの大部分を占めるという事例がある。また、映像コンテンツのライブ配信においては、瞬間的に特定のコンテンツが集中的に視聴されることもある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１８２９６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
人気の高いコンテンツを判別してキャッシュすることにより、ストレージの書き換え回数を低減し、ストレージの寿命を長期化できる通信装置、通信方法、及び通信プログラムを提供する。
【課題を解決するための手段】
【０００７】
一実施形態に係る通信装置は、ネットワークインタフェース部と、キャッシュ判定部と、キャッシュ処理部と、を備える。ネットワークインタフェース部は、クライアントからフレームを受信する。キャッシュ判定部は、フレームが、所定期間以内に所定回数以上、同一のコンテンツを要求するキャッシュ対象であるか判定する。キャッシュ処理部は、フレームがキャッシュ対象である場合、フレームにより要求されたコンテンツをキャッシュする。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態に係る通信装置を備える通信システムの一例を示す図。
【図２】第１実施形態に係る通信装置のハードウェア構成の一例を示す図。
【図３】第１実施形態に係る通信装置の機能構成の一例を示す図。
【図４】第１実施形態に係る通信装置の動作の一例を示すフローチャート。
【図５】第１実施形態に係る通信装置の動作の一例を示すフローチャート。
【図６】第１実施形態に係る通信装置の処理の流れの一例を示すシーケンス図。
【図７】第１実施形態に係る通信装置の処理の流れの一例を示すシーケンス図。
【図８】第１実施形態に係る通信装置の処理の流れの一例を示すシーケンス図。
【図９】第２実施形態に係る通信装置のキャッシュ判定部の機能構成の一例を示す図。
【図１０】ブルームフィルタを説明する図。
【図１１】ブルームフィルタの第１の利用方法を示す図。
【図１２】ブルームフィルタの第２の利用方法を示す図。
【図１３】ブルームフィルタの第３の利用方法を示す図。
【図１４】ブルームフィルタの第４の利用方法を示す図。
【図１５】第２実施形態に係るキャッシュ判定部の動作の一例を示すフローチャート。
【図１６】第２実施形態に係るキャッシュ判定部の動作の具体例を示す図。
【図１７】図９のキャッシュ判定部の変形例を示す図。
【図１８】図９のキャッシュ判定部の変形例を示す図。
【図１９】第３実施形態に係る通信装置の機能構成の一例を示す図。
【図２０】第３実施形態に係るキャッシュ情報の付加方法の一例を示す図。
【図２１】第３実施形態に係る通信装置の動作の一例を示すフローチャート。
【図２２】第４実施形態に係る通信装置の機能構成の一例を示す図。
【図２３】第４実施形態に係るキーの具体例を示す図。
【図２４】第４実施形態に係るキャッシュ情報の付加方法の一例を示す図。
【図２５】第４実施形態に係る通信装置の処理の流れの一例を示すシーケンス図。
【図２６】第４実施形態に係る通信装置の動作の一例を示すフローチャート。
【図２７】第４実施形態に係る通信装置の動作の一例を示すフローチャート。
【図２８】第４実施形態に係るキャッシュ判定部の動作の一例を示す図。
【図２９】図２２の変形例を示す図。
【図３０】図２２の変形例を示す図。
【図３１】第５実施形態に係る通信装置の機能構成の一例を示す図。
【図３２】第５実施形態に係るキャッシュ情報の付加方法の一例を示す図。
【図３３】第５実施形態に係る通信装置の動作の一例を示すフローチャート。
【図３４】図３１の変形例を示す図。
【図３５】第６実施形態に係る通信装置の機能構成の一例を示す図。
【図３６】第６実施形態に係る通信装置の動作の一例を示すフローチャート。
【図３７】第６実施形態に係る通信装置の動作の一例を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について図面を参照して説明する。
【００１０】
（第１実施形態）
第１実施形態に係る通信装置１について、図１〜図８を参照して説明する。以下では、通信装置１が無線ＬＡＮのアクセスポイントとして動作する場合について説明する。図１は、通信装置１を備える通信システムの一例を示す図である。図１に示すように、通信システムは、通信装置１と、複数のクライアント２と、を備える。
【００１１】
通信装置１は、無線ネットワーク及び有線ネットワークのインタフェースを備えるアクセスポイントである。通信装置１は、スイッチ３、ルータ４、及びインターネット５などを介して、複数のサーバ６と接続されている。サーバ６は、例えば、ウェブサーバである。また、通信装置１は、無線ネットワークを介して、複数のクライアント２と接続されている。通信装置１は、クライアント２に対して、通信装置１と有線ネットワークで接続されるサーバ６などの機器へアクセスする手段を提供する。
【００１２】
クライアント２は、無線ネットワークのインタフェースを備え、無線ネットワークにより、通信装置１を介して、コンテンツの取得を要求するＨＴＴＰリクエストをサーバ６に送信し、要求したコンテンツをサーバ６から受信する。クライアント２は、例えば、タブレット、スマートフォン、パーソナルコンピュータなどであり、ＷＷＷ（World Wide Web）を閲覧するためのウェブブラウザを備えている。
【００１３】
このような通信システムにおいて、通信装置１は、透過プロキシとして動作する。通信装置１は、クライアント２からサーバ６へのＨＴＴＰリクエストを受信すると、クライアント２の代わりにサーバ６からコンテンツを取得し、取得したコンテンツをクライアント２に返送する。また、通信装置１は、取得したコンテンツを、メモリやストレージにキャッシュする機能を備える。
【００１４】
より詳細には、通信装置１は、クライアント２が実行するウェブブラウザから、サーバ６に対するＨＴＴＰ（Hypertext Transfer Protocol）によるＨＴＴＰリクエストを受信すると、要求されたコンテンツがメモリやストレージにキャッシュされているか判定する。キャッシュされている場合、通信装置１は、キャッシュされたコンテンツをクライアント２に送信する。キャッシュされていない場合、通信装置１は、要求されたコンテンツをサーバ６から取得し、取得したコンテンツをキャッシュし、クライアント２に送信する。なお、通信装置１が受信した自装置宛でないＡＲＰ（Address Resolution Protocol）やＩＣＭＰ（Internet Control Message Protocol）のパケットは、ルーティングに従いサーバ６に転送される。
【００１５】
図２は、本実施形態に係る通信装置１のハードウェア構成の一例を示す図である。図２に示すように、通信装置１は、無線ネットワークアダプタ１１と、有線ネットワークアダプタ１２と、ＣＰＵ１３と、ＴＯＥ１４と、ネットワークコプロセッサ１５と、メモリ１６と、ストレージ１７と、バス１８と、を備える。
【００１６】
無線ネットワークアダプタ１１は、IEEE 802.11b/a/g/n/p/ac/ah/axなどで規定される無線ＬＡＮ規格で通信を行うためのネットワークアダプタである。無線ネットワークアダプタ１１は、物理層（ＰＨＹ）及びデータリンク層（ＭＡＣ）における送受信に関する処理を行う。
【００１７】
有線ネットワークアダプタ１２は、Ｅｔｈｅｒｎｅｔ（登録商標）で通信を行うためのネットワークアダプタである。有線ネットワークアダプタ１２は、物理層（ＰＨＹ）及びデータリンク層（ＭＡＣ）における送受信に関する処理を行う。
【００１８】
ＣＰＵ（Central Processing Unit）１３は、メモリ１６上に格納されたアプリケーションやＯＳ（Operating System）を実行するホストプロセッサである。ＣＰＵがプログラムを実行することにより、ＴＯＥ１４やネットワークコプロセッサ１５により実行されないネットワーク処理、ＴＯＥ１４やネットワークコプロセッサ１５とのインタフェース処理、メモリ１６の管理、ストレージ１７のデバイスドライバ、及びメモリ１６及びストレージ１７へのアクセスなどの機能が実現される。また、本実施形態において、ＣＰＵが実行するアプリケーションには、キャッシュ機能を備えたプロキシ（proxy）が含まれる。
【００１９】
ＴＯＥ（Transmission Control Protocol/Internet Protocol Offload Engine）１４は、ＴＣＰ／ＩＰの処理をＣＰＵ１３の代わりに実行するためのプロセッサである。ＴＯＥ１４は、ＣＰＵ１３とは別の、汎用又は専用のプロセッサであってもよいし、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの専用のハードウェアであってもよい。また、ＴＯＥ１４は、専用のメモリを内蔵していてもよい。
【００２０】
ＴＯＥ１４は、バス１８を介してストレージ１７と接続され、ストレージ１７に対して命令を発行し、ストレージ１７に格納されたデータを読み書きする。例えば、ＴＯＥ１４は、ストレージ１７条のデータを読み出し、ＴＣＰ／ＩＰの送信処理を実行し、無線ネットワークアダプタ１１や有線ネットワークアダプタ１２に出力する。
【００２１】
ネットワークコプロセッサ１５は、ネットワーク処理をＣＰＵ１３の代わりに実行するプロセッサである。ネットワークコプロセッサ１５は、ＣＰＵ１３とは別の、汎用又は専用のプロセッサであってもよいし、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの専用のハードウェアであってもよい。また、ネットワークコプロセッサ１５は、専用のメモリを内蔵していてもよい。
【００２２】
ネットワークコプロセッサ１５は、例えば、IEEE802.11で定義される無線ＬＡＮのフレームとＥｔｈｅｒｎｅｔ（登録商標）のフレームとの変換、後述するキャッシュ動作の判定、キャッシュ動作の振り分け、ブリッジ処理などを実行する。
【００２３】
メモリ１６は、バス１８を介して、無線ネットワークアダプタ１１、有線ネットワークアダプタ１２、ＣＰＵ１３、ＴＯＥ１４、ネットワークコプロセッサ１５、及びストレージ１７と接続される。メモリ１６は、バス１８を介して接続された各ハードウェアモジュールにより、データを読み書きされる。
【００２４】
ストレージ１７は、例えば、ＮＡＮＤフラッシュメモリを備えるＳＳＤ（Solid State Drive）である。ストレージ１７へのアクセスは、ＡＨＣＩ（Advanced Host Controller Interface）やNVM Expressなどのインタフェースを利用して行われる。ストレージ１７には、キャッシュされたコンテンツが格納される。
【００２５】
バス１８は、上記の各ハードウェアモジュールを接続する。バス１８は、例えば、PCI Express（登録商標）であってもよいし、プロセッサベンダ固有のバスであってもよいし、独自に設計されたバスであってもよいし。図２の例では、バス１８は、共有バスであるが、各ハードウェアモジュールを１対１で接続するバスであってもよい。バス１８が、各ハードウェアモジュールをポイント・ツー・ポイントで接続することにより、通信装置１の処理速度を向上させることができる。
【００２６】
なお、通信装置１の構成は、図２の構成に限られない。例えば、上記のハードウェアモジュールの１つ以上を、ＳｏＣ（System on Chip）として構成することができる。具体的には、無線ネットワークアダプタ１２とネットワークコプロセッサ１５と、をＳｏＣとして構成することが考えられる。
【００２７】
図３は、本実施形態に係る通信装置１の機能構成の一例を示す図である。図３に示す各機能構成は、それぞれ対応するハードウェアモジュールにより実現される。
【００２８】
無線ネットワークアダプタ１１は、無線ネットワークインタフェース部１１１を備える。
【００２９】
無線ネットワークインタフェース部１１１は、クライアント２と無線ネットワークを介して接続される無線ネットワークのインタフェースである。無線ネットワークインタフェース部１１１は、ＯＳＩ参照モデルにおける物理層及びデータリンク層のプロトコル処理を実行する。例えば、無線ネットワークインタフェース部１１１は、IEEE 802.11などで規定されるプロトコル処理を実行する。
【００３０】
無線ネットワークインタフェース部１１１は、物理層及びデータリンク層の全てのプロトコル処理を実行してもよい。また、無線ネットワークインタフェース部１１１が一部のプロトコル処理を実行し、残りのプロトコル処理をＣＰＵ１３、ＴＯＥ１４、ネットワークコプロセッサ１５などが実行してもよい。
【００３１】
有線ネットワークアダプタ１２は、有線ネットワークインタフェース部１２１を備える。
【００３２】
有線ネットワークインタフェース部１２１は、サーバ６と有線ネットワークを介して接続される有線ネットワークのインタフェースである。有線ネットワークインタフェース部１２１は、ＯＳＩ参照モデルにおける物理層及びデータリンク層のプロトコル処理を実行する。例えば、有線ネットワークインタフェース部１２１は、Ｅｔｈｅｒｎｅｔ（登録商標）などで規定されるプロトコル処理を実行する。
【００３３】
有線ネットワークインタフェース部１２１は、物理層及びデータリンク層の全てのプロトコル処理を実行してもよい。また、有線ネットワークインタフェース部１２１が一部のプロトコル処理を実行し、残りのプロトコル処理をＣＰＵ１３、ＴＯＥ１４、ネットワークコプロセッサ１５などが実行してもよい。
【００３４】
メモリ１６は、キャッシュ記憶部１６１を備える。
【００３５】
キャッシュ記憶部１６１は、メモリ１６１における、サーバ６から受信したＨＴＴＰヘッダやコンテンツなどを保存（キャッシュ）する記憶領域である。キャッシュ記憶部１６１は、ＨＴＴＰヘッダやコンテンツを、効率的に探索可能なデータ構造で保存する。
【００３６】
ストレージ１７は、キャッシュ記憶部１７１を備える。
【００３７】
キャッシュ記憶部１７１は、ストレージ１７１における、サーバ６から受信したＨＴＴＰヘッダやコンテンツなどを保存（キャッシュ）する記憶領域である。キャッシュ記憶部１７１は、ＨＴＴＰヘッダやコンテンツを、効率的に探索可能なデータ構造で保存する。
【００３８】
なお、キャッシュ記憶部１６１とキャッシュ記憶部１７１は、参照される頻度に応じて使い分けを行ってもよい。例えば、参照される頻度が高いものをキャッシュ記憶部１６１に記憶し、参照される頻度が低いものをキャッシュ記憶部１７１に記憶させてもよい。また、参照頻度により、キャッシュ記憶部１６１からキャッシュ記憶部１７１にコンテンツを移動するように制御してもよい。
【００３９】
ＣＰＵ１３は、ネットワーク処理部１３１と、キャッシュ処理部１３２と、コンテンツ取得部１３３と、を備える。
【００４０】
ネットワーク処理部１３１は、ＣＰＵ１３がＯＳを実行することにより実現される。すなわち、ネットワーク処理部１３１は、ＯＳの機能である。
【００４１】
ネットワーク処理部１３１は、ＴＯＥ１４により処理されないプロトコル処理を実行する。また、ネットワーク処理部１３１は、アプリケーションとのインタフェースとして機能する。例えば、ネットワーク処理部１３１は、ＡＲＰ、ＮＤＰ（Neighbor Discovery Protocol）、及びＩＣＭＰなどのプロトコル処理を実行する。
【００４２】
より詳細には、通信装置１が自装置宛のＡＲＰパケットを受信した場合、ネットワーク処理部１３１は、受信したＡＲＰパケットを受け取り、受け取ったＡＲＰパケットのヘッダを解析し、ＡＲＰパケットのオペレーションタイプを確認する。
【００４３】
オペレーションタイプがリクエストの場合、ネットワーク処理部１３１は、リクエストされたＩＰアドレスに対応するＭＡＣアドレスを確認し、リプライのＡＲＰパケットを生成し、生成したＡＲＰパケットをＭＡＣアドレスに送信する。オペレーションタイプがリプライの場合、ネットワーク処理部１３１は、受け取ったＡＲＰパケットをＡＲＰテーブルに登録する。
【００４４】
キャッシュ処理部１３２は、ＣＰＵ１３がアプリケーションを実行することにより実現される。すなわち、キャッシュ処理部１３２は、アプリケーション（プロキシ）の機能である。
【００４５】
キャッシュ処理部１３２は、クライアント２からＨＴＴＰリクエストで要求されたコンテンツがキャッシュ済みか判定する。すなわち、キャッシュ処理部１３２は、要求されたコンテンツがキャッシュ記憶部１６１，１７１に保存されているか判定する。
【００４６】
要求されたコンテンツがキャッシュ済みの場合、キャッシュ処理部１３２は、要求されたコンテンツをキャッシュ記憶部１６１，１７１から読み出し、読み出したコンテンツを、ネットワーク処理部１３１などを介して、クライアント２に送信する。
【００４７】
一方、要求されたコンテンツがキャッシュされていない場合、キャッシュ処理部１３２は、要求されたコンテンツをサーバ６から取得するようコンテンツ取得部１３３に指示する。その後、キャッシュ処理部１３２は、コンテンツ取得部１３３がサーバ６から取得したコンテンツやＨＴＴＰヘッダを受け取り、受け取ったコンテンツなどをキャッシュ記憶部１６１，１７１に保存する。
【００４８】
コンテンツ取得部１３３は、ＣＰＵ１３がアプリケーションを実行することにより実現される。すなわち、コンテンツ取得部１３３は、アプリケーション（プロキシ）の機能である。
【００４９】
コンテンツ取得部１３３は、キャッシュ処理部１３２からの指示に従って、ネットワーク処理部１３１などを介して、サーバ６との間でコネクションを確立する。コンテンツ取得部１３３は、コネクションを確立したサーバ６にＨＴＴＰリクエストを送信し、サーバ６からＨＴＴＰリクエストの応答、すなわち、コンテンツ及びＨＴＴＰヘッダを取得する。コンテンツ取得部１３３は、サーバ６から取得したコンテンツ及びＨＴＴＰヘッダをキャッシュ処理部１３２に渡す。
【００５０】
ＴＯＥ１４は、ネットワーク処理部１４１と、ストレージアクセス部１４２と、を備える。
【００５１】
ネットワーク処理部１４１は、ネットワーク層及びトランスポート層のプロトコル処理を実行する。具体的には、ネットワーク処理部１４１は、ＩＰｖ４、ＩＰｖ６、ＴＣＰ、ＵＤＰ（User Datagram Protocol）などのプロトコル処理を実行する。
【００５２】
ＩＰｖ４パケットの受信処理では、ネットワーク処理部１４１は、ＩＰヘッダを解析し、バージョン番号を確認し、ヘッダチェックサムが一致するか確認する。また、ＩＰｖ４パケットの送信処理では、ネットワーク処理部１４１は、上位層のアプリケーションなどから指示された情報に基づいて、ヘッダチェックサムの計算などを行い、ＩＰヘッダを生成する。
【００５３】
ネットワーク処理部１４１は、ＴＣＰやＵＤＰで通信を行う場合、通信に関する情報をＴＯＥ１４のメモリ（図示省略）にソケット情報として保存する。ソケットとは、通信を行うための端点であり、アプリケーションはこのソケットを用いて他の装置などと通信を行う。ソケット情報には、通信装置１のＩＰアドレス及びポート番号、通信装置１が通信する他の装置のＩＰアドレス及びポート番号、及びソケットのステートなどが含まれる。ＴＣＰの場合、ソケット情報には、さらに、これまで受信したシーケンス番号や、これから送信するシーケンス番号、通信装置１のウィンドウサイズ、及び通信装置１が通信する他の装置のウィンドウサイズなどが含まれる。
【００５４】
ＴＣＰセグメントの受信処理では、ネットワーク処理部１４１は、受信したセグメントのヘッダを走査する。ネットワーク処理部１４１は、走査により得られた宛先ＩＰアドレス、送信元ＩＰアドレス、宛先ＴＣＰポート番号、及び送信元ＴＣＰポート番号に一致するソケット情報を、ＴＯＥ１４のメモリ（図示省略）から探索し、発見したソケット情報のステートに応じた処理を実行する。
【００５５】
例えば、ステートがＥＳＴＡＢＬＩＳＨＥＤである場合、ネットワーク処理部１４１は、ＴＣＰセグメントのフラグを確認し、シーケンス番号を確認し、ＴＣＰのチェックサムを計算し、チェックサムが一致すればソケット情報で指定されたバッファ領域へデータを書込み、ＴＣＰの確認応答（ＡＣＫ）の送信を指示する。
【００５６】
また、ステートがＬＩＳＴＥＮである場合、ネットワーク処理部１４１は、ＴＣＰセグメントのフラグを確認する。ネットワーク処理部１４１は、ＳＹＮフラグが１の場合、新たにステートがＳＹＮ_ＲＥＣＥＩＶＥＤのソケット情報を作成する。ソケット情報は、探索しやすいように、ハッシュテーブルなどで接続されるのが好ましい。
【００５７】
ＴＣＰセグメントの送信処理では、ネットワーク処理部１４１は、アプリケーションから指定された送信データを格納したバッファ領域を読み出し、ソケット情報から読み出したＩＰアドレス、ポート番号、シーケンス番号、及びウィンドウサイズなどの情報を用いてＴＣＰヘッダを生成する。アプリケーションにより指定されるバッファ領域は、例えば、キャッシュ記憶部１６１である。また、ネットワーク処理部１４１は、データを含むＴＣＰセグメントを受信した場合などにおいて、ソケット情報から読み出したＩＰアドレス、ポート番号、シーケンス番号、及びウィンドウサイズなどの情報を用いてＡＣＫを送信する。
【００５８】
なお、受信したフレームのネットワーク層のプロトコルがＩＰｖ４及びＩＰｖ６のいずれでもない場合や、トランスポート層のプロトコルがＴＣＰ及びＵＤＰのいずれでもない場合、ネットワーク処理部１４１は、可能なプロトコル処理を実行した後、処理したフレームをネットワーク処理部１３１に渡せばよい。また、ネットワーク処理部１４１は、ＴＣＰにおけるフロー制御や輻輳制御などを実行してもよい。
【００５９】
ストレージアクセス部１４２は、キャッシュ処理部１３２の指示に従って、ストレージ１７のキャッシュ記憶部１７１にアクセスする。ストレージアクセス部１４２は、キャッシュ記憶部１７１に保存されたデータを読み出してネットワーク処理部１４１に渡したり、ネットワーク処理部１４１から受け取ったデータをキャッシュ記憶部１７１に保存したりすることができる。
【００６０】
ネットワークコプロセッサ１５は、ブリッジ処理部１５１と、ブリッジ振分部１５２と、プロキシ判定部１５３と、プロキシ振分部１５４と、キャッシュ判定部１５５と、キャッシュ情報記憶部１５６と、キャッシュ振分部１５７と、を備える。
【００６１】
ブリッジ処理部１５１は、無線ネットワークインタフェース部１１１と有線ネットワークインタフェース部１２１との間でフレームを転送（ブリッジ処理）する。具体的には、ブリッジ処理部１５１は、無線ネットワークインタフェース部１１１が受信したフレームを、有線ネットワークインタフェース部１２１に転送して送信させたり、有線ネットワークインタフェース部１２１が受信したフレームを、無線ネットワークインタフェース部１１１に転送して送信させたりする。
【００６２】
ブリッジ振分部１５２は、無線ネットワークインタフェース部１１１及び有線ネットワークインタフェース部１２１が受信したフレームが、自装置宛てであるか判定する。すなわち、ブリッジ振分部１５２は、受信したフレームの宛先ＭＡＣアドレスと、自装置のＭＡＣアドレスと、が一致するか判定する。
【００６３】
自装置宛てである場合、ブリッジ振分部１５２は、フレームをＴＯＥ１４のネットワーク処理部１４１に渡す。そして、フレームは、ネットワーク処理部１４１により処理される。一方、自装置宛てでない場合、ブリッジ振分部１５２は、フレームをプロキシ判定部１５３に渡す。
【００６４】
プロキシ判定部１５３は、ブリッジ振分部１５２から渡されたフレームが、プロキシ対象であるか判定する。プロキシ対象とは、通信装置１がプロキシ装置として動作する対象となるフレームのことである。プロキシ対象は、通信装置１のユーザが、プロトコル種別やプロトコルのヘッダ情報を指定することにより設定される。
【００６５】
例えば、プロキシ対象のプロトコル種別としてＨＴＴＰが指定された場合、プロキシ判定部１５３は、トランスポート層がＴＣＰで宛先ポートが８０番であるフレームを、プロキシ対象として判定する。これは、通常、ＨＴＴＰは、ＴＣＰの８０番のポートでリクエストを待ち受けるためである。プロキシ判定部１５３は、判定後、フレーム及び判定結果をプロキシ振分部１５４に渡す。
【００６６】
プロキシ振分部１５４は、プロキシ判定部１５３の判定結果に基づいて、フレームをブリッジ処理部１５１及びキャッシュ判定部１５５のいずれか一方に振り分ける。
【００６７】
プロキシ振分部１５４は、プロキシ対象でないと判定されたフレームを、ブリッジ処理部１５１に渡す。ブリッジ処理部１５１に渡されたフレームは、ブリッジ処理部１５１によりブリッジ処理される。
【００６８】
一方、プロキシ振分部１５４は、プロキシ対象と判定されたフレームを、キャッシュ判定部１５５に渡す。
【００６９】
キャッシュ判定部１５５は、プロキシ振分部１５４から渡されたフレームをキャッシュ処理するか判定する。すなわち、キャッシュ判定部１５５は、フレーム（ＨＴＴＰリクエスト）により要求されたコンテンツをキャッシュ記憶部１６１，１７１に記憶させるか判定する。
【００７０】
まず、キャッシュ判定部１５５は、フレームがキャッシュ判定対象であるか判定する。キャッシュ判定対象とは、キャッシュ処理するか判定する対象となるフレームのことである。キャッシュ判定対象は、例えば、ＴＣＰコネクションの確立後の最初のフレームである。この場合、キャッシュ判定対象の判定は、コネクション毎に１回だけ行われる。
【００７１】
次に、キャッシュ判定部１５５は、フレームがキャッシュ対象であるか判定（キャッシュ判定）する。キャッシュ対象とは、そのフレームの要求に従って取得されたコンテンツがキャッシュされるフレームのことである。キャッシュ判定部１５５は、例えば、所定時間以内に所定回数以上、同一のコンテンツを要求するフレーム（ＨＴＴＰリクエスト）を受信していた場合、そのフレームをキャッシュ対象と判定する。
【００７２】
より詳細には、キャッシュ判定は、所定時間内に宛先ＩＰアドレスが同一のフレーム（リクエスト）を所定回数以上受信したか否か、を判定することにより行われる。ここで、所定時間を１時間、所定回数を２回とすると、キャッシュ判定されるフレームが、１時間以内に受信された同一の宛先ＩＰアドレスを有する２回目以降のフレームであった場合、キャッシュ対象と判定される。
【００７３】
キャッシュ判定部１５５は、フレームをキャッシュ振分部１５７に渡す。また、キャッシュ判定部１５５は、判定結果と、それに付随する情報と、を含むキャッシュ情報を出力する。キャッシュ情報には、判定結果、ＴＣＰコネクションを特定するための宛先ＩＰアドレス、ＴＣＰポート番号、送信元ＩＰアドレス、及びＴＣＰポート番号の組などが含まれる。
【００７４】
キャッシュ情報記憶部１５６は、ネットワークコプロセッサ１５のメモリ（図示省略）により構成され、キャッシュ判定部１５５が出力したキャッシュ情報を、コネクション毎に記憶する。キャッシュ情報記憶部１５６に記憶されたキャッシュ情報は、キャッシュ振分部１５７により参照される。また、キャッシュ情報記憶部１５６に記憶されたキャッシュ情報は、コネクションの切断時に削除される。
【００７５】
キャッシュ振分部１５７は、キャッシュ判定部１５５が出力したキャッシュ情報と、キャッシュ情報に記憶されたキャッシュ情報と、に基づいて、キャッシュ判定部１５５から渡されたフレームを、ブリッジ処理部１５１及びネットワーク処理部１４１のいずれか一方に振り分ける。
【００７６】
キャッシュ振分部１５７は、フレームがキャッシュ判定対象であり、かつ、キャッシュ対象である場合、すなわち、キャッシュ判定部１５５がそのフレームにより要求されるコンテンツをキャッシュすると判定した場合、フレームをネットワーク処理部１４１に渡す。その後、フレームは、ネットワーク処理部１４１，１３１によりプロトコル処理される。
【００７７】
キャッシュ振分部１５７は、フレームがキャッシュ判定対象であり、かつ、キャッシュ対象ではない場合、すなわち、キャッシュ判定部１５５がそのフレームにより要求されるコンテンツをキャッシュしないと判定した場合、フレームをブリッジ処理部１５１に渡す。その後、フレームは、ブリッジ処理部１５１によりブリッジ処理される。
【００７８】
キャッシュ振分部１５７は、フレームがキャッシュ判定対象でない場合、キャッシュ情報記憶部１５６から、フレームに含まれるＩＰアドレスやＴＣＰポート番号が一致するコネクションのキャッシュ情報を読み出す。
【００７９】
読み出したキャッシュ情報に含まれるキャッシュ判定の判定結果が真である場合（すなわち、そのキャッシュ情報が生成されたフレームがキャッシュ対象であった場合）、キャッシュ振分部１５７は、フレームをネットワーク処理部１４１に渡す。その後、フレームは、ネットワーク処理部１４１，１３１によりプロトコル処理される。
【００８０】
読み出したキャッシュ情報に含まれるキャッシュ判定の判定結果が偽である場合（すなわち、そのキャッシュ情報が生成されたフレームがキャッシュ対象でなかった場合）、キャッシュ振分部１５７は、フレームをブリッジ処理部１５１に渡す。その後、フレームは、ブリッジ処理部１５１によりブリッジ処理される。
【００８１】
次に、本実施形態に係る通信装置１の動作について、図４〜図８を参照して説明する。図４は、通信装置１の動作の一例を示すフローチャートである。以下では、無線通信インタフェース部１１１がクライアント２からフレームを受信した場合の動作について説明する。
【００８２】
無線通信インタフェース部１１１は、クライアント２からフレームを受信すると、受信したフレームに対して受信処理、すなわち、物理層及びデータリンク層のプロトコル処理を実行する（ステップＳ１）。無線通信インタフェース部１１１は、受信処理により得られたフレームをブリッジ振分部１５２に渡す。
【００８３】
次に、ブリッジ振分部１５２は、フレームが自装置宛てであるか判定する（ステップＳ２）。具体的には、ブリッジ振分部１５２は、フレームの宛先ＭＡＣアドレスと自装置のＭＡＣアドレスとが一致するか判定する。
【００８４】
フレームが自装置宛ての場合（ステップＳ２のＹＥＳ）、すなわち、フレームの宛先ＭＡＣアドレスと自装置のＭＡＣアドレスとが一致する場合、ブリッジ振分部１５２は、フレームをネットワーク処理部１４１に渡す（ステップＳ３）。
【００８５】
ブリッジ振分部１５２からフレームを受け取ったネットワーク処理部１４１は、フレームにネットワーク層及びトランスポート層のプロトコル処理を実行し、得られたメッセージを、ネットワーク処理部１３１を介して、アプリケーションに渡す。メッセージは、アプリケーションにより処理される。
【００８６】
一方、フレームが自装置宛てでない場合（ステップＳ２のＮＯ）、すなわち、フレームの宛先ＭＡＣアドレスと自装置のＭＡＣアドレスとが一致しない場合、ブリッジ振分部１５２は、フレームをプロキシ判定部１５３に渡す（ステップＳ４）。
【００８７】
プロキシ判定部１５３は、ブリッジ振分部１５２から受け取ったフレームが、プロキシ対象であるか判定し、フレーム及び判定結果をプロキシ振分部１５４に渡す（ステップＳ４）。ここで、プロキシ対象は、トランスポート層がＴＣＰで宛先ポート番号が８０番のフレームであるものとする。
【００８８】
フレームがプロキシ対象でない場合（ステップＳ５のＮＯ）、プロキシ振分部１５４は、フレームをブリッジ処理部１５１に渡す。そして、フレームは、ブリッジ処理部１５１によりブリッジ処理される（ステップＳ６）。すなわち、フレームは、有線ネットワークインタフェース部１２１に転送される。
【００８９】
フレームを転送された有線ネットワークインタフェース部１２１は、受け取ったフレームに対して送信処理、すなわち、物理層及びデータリンク層のプロトコル処理を実行する（ステップＳ７）。有線通信インタフェース部１２１は、送信処理により得られたフレームをサーバ６などに送信する。
【００９０】
一方、フレームがプロキシ対象であった場合（ステップＳ５のＹＥＳ）、プロキシ振分部１５４は、フレームをキャッシュ判定部１５５に渡す。
【００９１】
フレームを受け取ったキャッシュ判定部１５５は、まず、受け取ったフレームがキャッシュ判定対象であるか判定する（ステップＳ８）。
【００９２】
受け取ったフレームがコネクション確立後の２回目以降のフレームであった場合、すなわち、受け取ったフレームにＳＹＮセグメント以降のセグメントが含まれる場合、キャッシュ判定部１５５は、フレームはキャッシュ判定対象ではないと判定し（ステップＳ８のＮＯ）、フレーム及び判定結果をキャッシュ振分部１５７に渡す。
【００９３】
そして、キャッシュ振分部１５７は、受け取ったフレームと同一コネクションのキャッシュ情報を、キャッシュ情報記憶部１５６から読み出し、読み出したキャッシュ情報に含まれる判定結果を参照し、読み出したキャッシュ情報に対応するフレームがキャッシュ対象であったか判定（キャッシュ判定）する。
【００９４】
対応するフレームがキャッシュ対象でなかった場合（ステップＳ１０のＮＯ）、処理はステップＳ６に進む。以降の処理は、上述の通りである。一方、対応するフレームがキャッシュ対象であった場合（ステップＳ１０のＹＥＳ）、処理はステップＳ１３に進む。ステップＳ１３以降の処理については、図５を参照して説明する。
【００９５】
これに対して、ステップＳ８において、受け取ったフレームがコネクション確立後の１回目のフレームであった場合、すなわち、受け取ったフレームにＳＹＮセグメントが含まれる場合、キャッシュ判定部１５５は、フレームはキャッシュ判定対象であると判定し（ステップＳ８のＹＥＳ）、フレームがキャッシュ対象であるか判定（キャッシュ判定）する（ステップＳ１１）。
【００９６】
キャッシュ判定後、キャッシュ判定部１５５は、受け取ったフレームのキャッシュ情報を生成し、キャッシュ情報記憶部１５６に保存する（ステップＳ１２）。そして、キャッシュ判定部１５５は、フレーム及び判定結果をキャッシュ振分部１５７に渡す。
【００９７】
キャッシュ振分部１５７が受け取ったフレームがキャッシュ対象でなかった場合（ステップＳ１０のＮＯ）、処理はステップＳ６に進む。以降の処理は、上述の通りである。一方、キャッシュ振分部１５７が受け取ったフレームがキャッシュ対象であった場合（ステップＳ１０のＹＥＳ）、処理はステップＳ１３に進む。
【００９８】
次に、ステップＳ１３以降の処理について、図５を参照して説明する。ステップＳ１３以降の処理は、フレームがキャッシュ対象である場合の処理である。
【００９９】
フレームがキャッシュ対象であった場合（ステップＳ１０のＹＥＳ）、キャッシュ振分部１５７は、フレームをＴＯＥ１４のネットワーク処理部１４１に渡す。ネットワーク処理部１４１は、受け取ったフレームをプロトコル処理する（ステップＳ１３）。ネットワーク処理部１４１は、得られたメッセージをＯＳのネットワーク処理部１３１に渡す。
【０１００】
ネットワーク処理部１３１は、アプリケーションとの間のインタフェースとして動作し、ネットワーク処理部１４１から受け取ったメッセージをアプリケーションのキャッシュ処理部１３２に渡す。なお、ネットワーク処理部１３１は、ネットワーク処理部１４１で処理されなかったプロトコル処理を実行してもよい。
【０１０１】
メッセージがコンテンツの取得を要求するＨＴＴＰリクエストであった場合、メッセージを受け取ったキャッシュ処理部１３２は、要求されたコンテンツがキャッシュ済みか判定する（ステップＳ１４）。
【０１０２】
コンテンツがキャッシュされていない場合（ステップＳ１４のＮＯ）、キャッシュ処理部１３２は、コンテンツを取得するようコンテンツ取得部１３３に指示する。
【０１０３】
指示されたコンテンツ取得部１３３は、ネットワーク処理部１３１，１４１及び有線ネットワークインタフェース部１２１を介して、メッセージの宛先ＩＰアドレスのサーバ６に対してＨＴＴＰリクエストを送信し、クライアント２から要求されたコンテンツを取得する（ステップＳ１５）。コンテンツ取得部１３３は、取得したコンテンツをキャッシュ処理部１３２に渡す。
【０１０４】
コンテンツを受け取ったキャッシュ処理部１３２は、受け取ったコンテンツをキャッシュする（ステップＳ１６）。すなわち、キャッシュ処理部１３２は、受け取ったコンテンツを、キャッシュ処理部１６１，１７１に保存する。
【０１０５】
コンテンツをキャッシュした後、又は、コンテンツがキャッシュされていた場合（ステップＳ１４のＹＥＳ）、キャッシュ処理部１３２は、キャッシュされたコンテンツを読み出し（ステップＳ１７）、読み出したコンテンツをネットワーク処理部１３１に渡す。
【０１０６】
その後、ネットワーク処理部１３１，１４１，無線ネットワークインタフェース部１１１が所定のプロトコル処理を実行してコンテンツを含むフレームを生成し、無線ネットワークインタフェース部１１１がクライアント２に応答する（ステップＳ１８）。すなわち、ネットワークインタフェース部１１１は、生成したフレームをクライアント２に送信する。
【０１０７】
ここで、図６〜図８は、通信装置１、クライアント２、及びサーバ６の間での処理の流れの例を示すシーケンス図である。図６〜図８におけるネットワークインタフェース部は、無線ネットワークインタフェース部１１１及び有線ネットワークインタフェース部１２１の総称である。
【０１０８】
図６は、通信装置１が受信したフレームが、プロキシ対象ではない場合、又はキャッシュ対象ではない場合のシーケンス図である。
【０１０９】
この場合、通信装置１は、フレームをブリッジ処理するため、図６に示すように、通信装置１を介して、クライアント２とサーバ６とが直接的にメッセージをやりとりする。また、通信装置１は、ＨＴＴＰリクエストにより要求されたコンテンツをキャッシュしない。
【０１１０】
図７は、通信装置１が受信したフレームが、プロキシ対象であり、かつ、フレームにより要求されたコンテンツがキャッシュされていない場合のシーケンス図である。
【０１１１】
この場合、図７に示すように、クライアント２と通信装置１との間でコネクションが確立された後、通信装置１とサーバ６との間でコネクションが確立される。そして、通信装置１は、クライアント２から要求されたコンテンツをサーバ６から受信し、キャッシュ記憶部１６１，１７１にキャッシュした後、クライアント２に応答する。
【０１１２】
図８は、通信装置１が受信したフレームが、プロキシ対象であり、かつ、フレームにより要求されたコンテンツがキャッシュ済みの場合のシーケンス図である。
【０１１３】
この場合、図８に示すように、クライアント２と通信装置１との間でコネクションが確立されるものの、通信装置１とサーバ６との間ではコネクションが確立されない。そして、通信装置１は、クライアント２から要求されたコンテンツをキャッシュ記憶部１６１，１７１から読み出し、クライアント２に応答する。
【０１１４】
以上説明した通り、本実施形態に係る通信装置１は、所定時間以内に所定回数以上、クライアント２から要求されたコンテンツのみをキャッシュする。所定時間以内に所定回数以上要求されるコンテンツは、人気の高いコンテンツに相当する。
【０１１５】
このように、人気の高いコンテンツのみをキャッシュすることにより、本実施形態に係る通信装置１は、ストレージ１７の書き換え回数を低減し、ストレージ１７の寿命を長期化することができる。
【０１１６】
また、キャッシュされるコンテンツの量が低減されるため、メモリ１６からストレージ１７へデータを書き出したり、メモリ１６に保存された古いコンテンツを破棄したりする必要が低下する。したがって、本実施形態に係る通信装置１は、メモリ１６の記憶容量が限られている場合であっても、効率的に動作することができる。
【０１１７】
（第２実施形態）
第２実施形態に係る通信装置１について、図９〜図１８を参照して説明する。本実施形態では、キャッシュ判定部１５５が、ブルームフィルタを利用してキャッシュ判定を行う通信装置１について説明する。
【０１１８】
図９は、本実施形態に係るキャッシュ判定部１５５の機能構成の一例を示す図である。図９に示すようにキャッシュ判定部１５５は、キャッシュ判定対象判定部１５５１と、キー抽出部１５５２と、複数のハッシュ値算出部１５５３と、ハッシュ値記憶部１５５４と、メンバ判定部１５５５と、ブルームフィルタ記憶部１５５６と、メンバ追加部１５５７と、を備える。
【０１１９】
キャッシュ判定対象判定部１５５１は、フレームがキャッシュ判定対象であるか判定する。すなわち、キャッシュ判定対象判定部１５５１は、ＴＣＰのペイロードにＧＥＴやＰＯＳＴなどのＨＴＴＰリクエストが含まれるか否か、及びＳＹＮセグメントがフレームに含まれるか否か、に基づいて判定する。判定は、ＳＹＮフラグを用いて行なわれてもよいし、コネクション毎の状態を記憶する記憶部を設け、記憶部に記憶されたコネクションの状態を参照することにより行なわれてもよい。
【０１２０】
キー抽出部１５５２は、キャッシュ判定のために利用するキーを、フレームから抽出する。キーは、例えば、フレームのＩＰヘッダに含まれる宛先ＩＰアドレスである。キー抽出部１５５２は、データリンク層のプロトコルであるＥｔｈｅｒｎｅｔやIEEE 802.11のヘッダと、ネットワーク層のプロトコルであるＩＰｖ４又はＩＰｖ６のヘッダと、を解析して、宛先ＩＰアドレスを抽出する。
【０１２１】
ハッシュ値算出部１５５３は、ハッシュ関数を計算して、キー抽出部１５５２が抽出したキーのハッシュ値を算出する。キャッシュ判定部１５５は、並列動作するｋ個のハッシュ値算出部１５５３を備える。各ハッシュ値算出部１５５３は、それぞれ異なるハッシュ関数を計算する。したがって、全部でｋ個のハッシュ値が算出される。
【０１２２】
ネットワークコプロセッサ１５がマルチコアプロセッサである場合には、各ハッシュ値算出部１５５３は、それぞれ異なるコアにより構成されるのが好ましい。また、ネットワークコプロセッサ１５がＦＰＧＡやＡＳＩＣである場合には、各ハッシュ値算出部１５５３は、それぞれ独立した回路として構成されるのが好ましい。
【０１２３】
ハッシュ値記憶部１５５４は、ｋ個のハッシュ値算出部１５５３により算出されたｋ個のハッシュ値を一時的に記憶するバッファである。ハッシュ値記憶部１５５４は、マルチコアプロセッサ１５のメモリ（図示省略）により構成されてもよいし、マルチコアプロセッサ１５の外部のＳＲＡＭなどにより構成されてもよい。
【０１２４】
メンバ判定部１５５５は、ハッシュ値記憶部１５５４に記憶されたｋ個のハッシュ値と、ブルームフィルタ記憶部１５５６に記憶された集合と、を比較して、フレームがメンバであるか判定する。この結果、あるキー（宛先ＩＰアドレス）を有するフレームは、過去に同じキー（宛先ＩＰアドレス）を有するフレームが受信されていた場合、メンバと判定され、受信されていなかった場合、メンバでないと判定される。この判定は、キャッシュ判定に相当する。
【０１２５】
ブルームフィルタ記憶部１５５６は、ブルームフィルタを記憶する。ブルームフィルタ記憶部１５５６は、マルチコアプロセッサ１５のメモリ（図示省略）により構成されてもよいし、マルチコアプロセッサ１５の外部のＳＲＡＭなどにより構成されてもよい。
【０１２６】
メンバ追加部１５５７は、ハッシュ値記憶部１５５４に記憶されたｋ個のハッシュ値を、ブルームフィルタの集合に追加することにより、フレームをブルームフィルタのメンバとして追加する。
【０１２７】
ここで、図１０は、ブルームフィルタを説明する図である。図１０に示すように、ブルームフィルタは、ｍビットのビット配列により構成される。ブルームフィルタの各ビットは、１又は０の値を取り得る。このブルームフィルタは、ビット値１を有するビットのビット番号の集合に相当する。図１０の例では、２，５，６，ｍ−２番目のビットの値が１である。したがって、図１０のブルームフィルタは、２，５，６，ｍ−２を含む集合に相当する。
【０１２８】
例えば、ｋ＝３の場合、フレームのキーから、３個のハッシュ値算出部１５５３により、３個のハッシュ値＃０，＃１，＃２を算出される。図１０に示すように、フレーム１のキーから算出されたハッシュ値が、＃０＝２、＃１＝５、＃２＝ｍ−２であった場合、フレーム１のキーから算出された各ハッシュ値は、図１０のブルームフィルタの集合に含まれる。この場合、メンバ判定部１５５５は、フレーム１が図１０のブルームフィルタのメンバであると判定する。
【０１２９】
一方、フレーム２のキーから算出されたハッシュ値が、＃０＝５、＃１＝６、＃２＝ｍ−１であった場合、フレーム２のキーから算出された各ハッシュ値＃２は、図１０のブルームフィルタの集合に含まれない。この場合、メンバ判定部１５５５は、フレーム２が図１０のブルームフィルタのメンバではないと判定する。
【０１３０】
メンバ追加部１５５７は、メンバ判定部１５５５がメンバでないと判定したフレームのハッシュ値を、ブルームフィルタの集合に追加する。具体的には、メンバ追加部１５５７は、図１０のブルームフィルタのｍ−１番目のビットの値を１に更新することにより、フレーム２をブルームフィルタのメンバに追加する。
【０１３１】
ブルームフィルタ記憶部１５５６は、このようなブルームフィルタを１つ又は複数記憶することができる。また、キャッシュ判定のために利用されるブルームフィルタは、１つであってもよいし、複数であってもよい。さらに、１つのブルームフィルタが継続的に利用されてもよいし、所定のタイミングで、利用されるブルームフィルタが切り替えられてもよい。
【０１３２】
図１１は、ブルームフィルタの第１の利用方法を示す図である。図１１の例では、各ブルームフィルタは、１時間の間、メンバ追加部１５５７によりメンバを追加される。また、１時間毎に、利用されるブルームフィルタが切り替えられる。メンバ判定部１５５５は、判定時刻に更新中のブルームフィルタを利用して判定を行う。図１１の方法によれば、ブルームフィルタを容易に管理することができる。
【０１３３】
図１２は、ブルームフィルタの第２の利用方法を示す図である。図１２の例では、各ブルームフィルタは、１５分の間、メンバ追加部１５５７によりメンバを追加される。また、１５分毎に、利用されるブルームフィルタが切り替えられる。メンバ判定部１５５５は、現在時刻から直近の４つのブルームフィルタを利用して判定を行う。具体的には、メンバ判定部１５５５は、４つのブルームフィルタの論理和をとったブルームフィルタを用いてメンバ判定を行い、キャッシュ判定の判定結果として出力する。第２の利用方法によれば、第１の利用方法に比べて、ブルームフィルタの切り替え直前の偽陽性発生率を低下させることができる。
【０１３４】
図１３は、ブルームフィルタの第３の利用方法を示す図である。図１３の例では、各ブルームフィルタは、１時間の間、メンバ追加部１５５７によりメンバを追加される。また、１５分毎に、利用されるブルームフィルタが切り替えられる。メンバ判定部１５５５は、判定時刻に更新中のブルームフィルタのうち、最も長く更新されているブルームフィルタを利用して判定を行う。第３の利用方法によれば、第１の利用方法に比べて、ブルームフィルタの切り替え直後の陰性発生率を低減できる。
【０１３５】
図１４は、ブルームフィルタの第４の利用方法を示す図である。第４の利用方法は、ブルームフィルタの切り替えのタイミングが第２の利用方法と異なる。図１４の例では、各ブルームフィルタは、記憶量（書込み量）が１０ＧＢになるまでの間、メンバ追加部１５５７によりメンバを追加される。また、各ブルームフィルタの記憶量が１０ＧＢになるごと、利用されるブルームフィルタが切り替えられる。メンバ判定部１５５５は、直近の４つのブルームフィルタを利用して判定を行う。具体的には、メンバ判定部１５５５は、４つのブルームフィルタの論理和をとったブルームフィルタを用いてメンバ判定を行い、キャッシュ判定の判定結果として出力する。第４の利用方法によれば、第１の利用方法に比べて、ブルームフィルタの切り替え直前の偽陽性発生率を低下させることができる。
【０１３６】
なお、以上では、時間やバイト数を用いてブルームフィルタを切り替える方法について説明したが、ブルームフィルタの利用方法は上記の方法に限られない。例えば、リクエスト数などを用いてブルームフィルタを切り替えることも可能である。
【０１３７】
以上説明した本実施形態に係るキャッシュ判定部１５５は、キャッシュ判定対象判定部１５５１が出力した判定結果と、ハッシュ値記憶部１５５４が記憶したｋ個のハッシュ値の組と、メンバ判定部１５５５が出力した判定結果と、をキャッシュ情報として出力する。キャッシュ判定部１５５が出力したキャッシュ情報は、第１実施形態と同様に、キャッシュ情報記憶部１５６に記憶される。本実施形態において、キャッシュ情報記憶部１５６は、キャッシュ情報を高速に探索可能なように、ハッシュテーブルなどのデータ構造を有するのが好ましい。
【０１３８】
次に、キャッシュ判定部１５５の動作について、図１５を参照して説明する。図１５は、本実施形態に係るキャッシュ判定部１５５の動作を示すフローチャートである。
【０１３９】
キャッシュ判定部１５５がプロキシ振分部１５４からフレームを受け取ると、まず、キャッシュ判定対象判定部１５５１は、フレームがキャッシュ判定対象か判定する（ステップＳ１９）。
【０１４０】
フレームがキャッシュ判定対象ではなかった場合（ステップＳ１９のＮＯ）、キャッシュ判定対象判定部１５５１が判定結果を出力し（ステップＳ２０）、処理が終了する。
【０１４１】
一方、フレームがキャッシュ判定対象だった場合（ステップＳ１９のＹＥＳ）、キャッシュ判定対象判定部１５５１は、フレームをキー抽出部１５５２に渡す。そして、キー抽出部１５５２は、フレームを解析し、キーを抽出する（ステップＳ２１）。キー抽出部１５５２は、抽出したキーを各ハッシュ値算出部１５５３に渡す。
【０１４２】
次に、各ハッシュ値算出部１５５３が、それぞれキーからハッシュ値を算出する（ステップＳ２２）。算出されたｋ個のハッシュ値は、ハッシュ値記憶部１５５４に記憶される（ステップＳ２３）。
【０１４３】
続いて、メンバ判定部１５５５は、フレームがブルームフィルタのメンバであるか判定する（ステップＳ２４）。すなわち、メンバ判定部１５５５は、ブルームフィルタ記憶部１５５６を参照して、ハッシュ値記憶部１５５４に記憶されたｋ個のハッシュ値が、ブルームフィルタの集合に含まれるか判定する。
【０１４４】
フレームがブルームフィルタのメンバであった場合（ステップＳ２４のＹＥＳ）、すなわち、ｋ個のハッシュ値が全てブルームフィルタの集合に含まれた場合、メンバ判定部１５５５は、フレームをキャッシュ対象と判定し、判定結果を出力する（ステップＳ２５）。
【０１４５】
そして、キャッシュ値記憶部１５５４は、記憶したｋ個のキャッシュ値を出力し、リセットされる（ステップＳ２６）。その後、処理はステップＳ２０に進む。
【０１４６】
一方、フレームがブルームフィルタのメンバでなかった場合（ステップＳ２４のＮＯ）、すなわち、キャッシュ値の少なくとも１つがブルームフィルタの集合に含まれなかった場合、メンバ判定部１５５５は、フレームをキャッシュ対象ではないと判定し、判定結果を出力する（ステップＳ２７）。
【０１４７】
また、メンバ判定部１５５５は、判定結果をメンバ追加部１５５７に通知する。通知されたメンバ追加部１５５７は、フレームをブルームフィルタのメンバに追加する（ステップＳ２８）。すなわち、メンバ追加部１５５７は、ハッシュ値記憶部１５５４に記憶されたｋ個のハッシュ値をブルームフィルタの集合に追加する。これにより、ブルームフィルタが更新される。
【０１４８】
そして、メンバ追加部１５５７は、ハッシュ値記憶部１５５４をリセットする。この際、ハッシュ値記憶部１５５４は、ハッシュ値を出力してもよい。その後、処理はステップＳ２０に進む。
【０１４９】
図１６は、キャッシュ判定部１５５の動作の具体例を示す図である。図１６の例では、ブルームフィルタは、１６ビットのビット配列であり、ｋ＝３である。以下では、キャッシュ判定部１５５は、宛先ポート番号が８０番のＴＣＰセグメントを含むフレーム１〜４を順に受け取るものとする。すなわち、フレーム１〜４は、いずれもキャッシュ判定対象である。また、図１６に示すように、フレーム１を受け取る前の時点で、ブルームフィルタが初期化されている例である。ブルームフィルタの初期化とは、全てのビット値を０に設定し、ブルームフィルタを空集合にすることをいう。
【０１５０】
キャッシュ判定部１５５がフレーム１を受け取ると、キー抽出部１５５２がキー（宛先ＩＰアドレス）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム１のキーは192.168.0.1であり、ハッシュ値は｛１，２，６｝であるものとする。
【０１５１】
ブルームフィルタの全てのビット値は０であるため、フレーム１のハッシュ値｛１，２，６｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム１は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム１をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの１，２，６番目のビットを１に設定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム１はブリッジ処理される。
【０１５２】
キャッシュ判定部１５５がフレーム２を受け取ると、キー抽出部１５５２がキー（宛先ＩＰアドレス）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム２のキーは172.16.0.1であり、ハッシュ値は｛４，９，１２｝であるものとする。
【０１５３】
ブルームフィルタは、１，２，６番目のビットが１であり、他のビットは０であるため、フレーム２のハッシュ値｛４，９，１２｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム２は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム２をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの４，９，１２番目のビットを１に設定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム２はブリッジ処理される。
【０１５４】
キャッシュ判定部１５５がフレーム３を受け取ると、キー抽出部１５５２がキー（宛先ＩＰアドレス）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム３のキーは10.0.0.1であり、ハッシュ値は｛１，１２，１５｝であるものとする。
【０１５５】
ブルームフィルタは、１，２，４，６，９，１２番目のビットが１であり、他のビットは０であるため、フレーム２のハッシュ値｛１５｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム３は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム３をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの１５番目のビットを１に設定する。ブルームフィルタの１，１２番目のビットは、既に１に設定されているため変わらない。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム３はブリッジ処理される。
【０１５６】
キャッシュ判定部１５５がフレーム４を受け取ると、キー抽出部１５５２がキー（宛先ＩＰアドレス）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム４のキーは192.168.0.1であるものとする。この場合、ハッシュ値は｛１，２，６｝となる。フレーム４は、フレーム１と同一のホストに対してコンテンツを要求する２つ目のフレームに相当する。
【０１５７】
ブルームフィルタは、１，２，４，６，９，１２，１５番目のビットが１であり、他のビットは０であるため、フレーム４のハッシュ値｛１，２，６｝は、全てブルームフィルタの集合に含まれる。したがって、メンバ判定部１５５５は、フレーム４は、メンバであると判定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム４は、キャッシュ処理される。すなわち、フレーム４により要求されたコンテンツが、キャッシュ記憶部１６１，１７１にキャッシュされる。
【０１５８】
以降、通信装置１は、クライアント２から、宛先ＩＰアドレスが192.168.0.1であり宛先ポート番号が８０番であるＴＣＰセグメントを含むフレームを受信すると、キャッシュ記憶部１６１，１７１に要求されたコンテンツがキャッシュされていれば、キャッシュ記憶部１６１，１７１からにキャッシュされたコンテンツをクライアント２に返送する。まだ要求されたコンテンツがキャッシュされていない場合、サーバ６からコンテンツを取得してキャッシュ記憶部１６１，１７１にキャッシュされる。
【０１５９】
以上説明した通り、本実施形態に係るキャッシュ判定部１５５は、ブルームフィルタを用いて、キャッシュ判定を実行することができる。これにより、キャッシュ判定を高速化することができる。
【０１６０】
なお、以上の説明では、通信装置１は、２回以上同一のコンテンツが要求された場合にキャッシュ処理を実行したが、３回以上同一のコンテンツが要求された場合にキャッシュ処理を実行するように構成されてもよい。
【０１６１】
このような構成として、例えば、図１７に示すように、メンバ判定部１５５５、ブルームフィルタ記憶部１５５６、及びメンバ追加部１５５７を、それぞれ２つずつ設けることが考えられる。図１７の例では、第１メンバ判定部１５５５がフレームは第１ブルームフィルタのメンバであると判定した場合、第２メンバ追加部１５５７がフレームを第２ブルームフィルタのメンバとして追加する。そして、第２メンバ判定部１５５５の判定結果が、キャッシュ判定の判定結果として出力される。このような構成により、通信装置１は、３回以上同一のコンテンツが要求された場合にキャッシュ処理を実行する。
【０１６２】
また、ブルームフィルタ記憶部１５５６に記憶されたブルームフィルタへのメンバの追加は、アプリケーションから行えるようにしてもよい。例えば、アプリケーションがデバイスドライバを介してブルームフィルタにメンバを追加するインタフェースを、メンバ追加部１５５７に設けてもよい。
【０１６３】
さらに、ブルームフィルタとして、それぞれのビットにカウンタを設けたカウンティングフィルタを用いてもよい。カウンティングフィルタにより、使用されてから一定時間を超えるエントリを削除するようにすることで、前述したブルームフィルタの切替と同様の機能が実現できる。
【０１６４】
またさらに、キャッシュ判定部１５５は、切り替えのタイミングが異なる複数のブルームフィルタを用いてもよい。図１８は、２つのブルームフィルタを備えたキャッシュ判定部１５５を示す図である。図１８の例では、キャッシュ判定部１５５は、２つのブルームフィルタによりキャッシュ判定するための、ハッシュ値算出部１５５３と、ハッシュ値記憶部１５５４と、メンバ判定部１５５５と、ブルームフィルタ記憶部１５５６と、メンバ追加部１５５７と、をそれぞれ備える。キャッシュ判定対象判定部１５５１及びキー抽出部１５５２は共用されている。また、キャッシュ判定部１５５は、２つのブルームフィルタによるキャッシュ判定結果をＯＲ演算する総合判定部１５５８を備える。総合判定部１５５８の出力が、キャッシュ判定部１５５によるキャッシュ判定結果となる。図１８の例において、例えば、一方のブルームフィルタは、１時間毎に切り替えられ、他方のブルームフィルタはストレージへの書き込み量１ギガバイト毎に切り替えられる。
【０１６５】
（第３実施形態）
第３実施形態に係る通信装置１について、図１９〜図２１を参照して説明する。本実施形態では、ＴＯＥ１４を備えない通信装置１について説明する。図１９は、本実施形態に係る通信装置１の機能構成の一例を示す図である。図１９に示すように、本実施形態に係る通信装置１は、キャッシュ情報付加部１５８と、キャッシュ振分部１３４と、ブリッジ処理部１３５と、を備える一方、キャッシュ振分部１５７と、ネットワーク処理部１４１と、ストレージアクセス部１４２と、を備えない。他の構成は、第１実施形態と同様である。以下、第１実施形態との相違点を中心に説明する。
【０１６６】
本実施形態において、プロキシ振分部１５４は、プロキシ判定部１５３の判定結果に基づいて、フレームをキャッシュ情報付加部１５８及びキャッシュ判定部１５５のいずれか一方に振り分ける。プロキシ振分部１５４は、プロキシ対象でないと判定されたフレームを、キャッシュ情報付加部１５８に渡し、プロキシ対象と判定されたフレームを、キャッシュ判定部１５５に渡す。また、プロキシ振分部１５４は、フレームと共に、フレームはキャッシュ対象ではないというキャッシュ判定の判定結果を、キャッシュ情報付加部１５８に渡す。
【０１６７】
キャッシュ情報付加部１５８は、フレームに、キャッシュ情報を付加して、キャッシュ振分部１３４に渡す。キャッシュ情報付加部１５８が付加するキャッシュ情報には、キャッシュ判定の判定結果が含まれる。
【０１６８】
キャッシュ情報付加部１５８は、プロキシ振分部１５４から受け取ったフレームに、プロキシ振分部１５４から受け取った判定結果を付加する。また、キャッシュ情報付加部１５８は、キャッシュ判定部１５５から受け取ったフレームに、キャッシュ判定部１５５が出力した判定結果、又はキャッシュ情報記憶部１５６に記憶された判定結果を付加する。
【０１６９】
例えば、キャッシュ情報付加部１５８は、図２０に示すように、フレームの先頭に、キャッシュ判定の判定結果と、ハッシュ値と、をキャッシュ情報として付加し、キャッシュ振分部１３４に渡す。また、キャッシュ情報付加部１５８は、フレームにキャッシュ情報を付加する代わりに、キャッシュ振分部１３４に渡すフレームのディスクリプタ（記述子）に、キャッシュ情報を記載してもよい。
【０１７０】
キャッシュ振分部１３４は、第１実施形態におけるキャッシュ振分部１５７に相当する。すなわち、本実施形態では、キャッシュ振分部１５７の機能が、ＯＳのネットワーク処理部１３１により実現される。キャッシュ振分部１３４は、キャッシュ情報付加部１５８から渡されたフレームを、フレームに付加されたキャッシュ情報に基づいて、ブリッジ処理部１３５及びキャッシュ処理部１３２のいずれか一方に振り分ける。
【０１７１】
より詳細には、キャッシュ振分部１３４は、フレームがキャッシュ対象であった場合、ネットワーク処理部１３１の機能により、フレームにネットワーク層及びトランスポート層のプロトコル処理（受信処理）を実行して、キャッシュ処理部１３２に渡す。
【０１７２】
この際、キャッシュ振分部１３４は、受け取ったキャッシュ情報に含まれるハッシュ値を、ソケット情報として記憶し、アプリケーションからソケットに対するｉｏｃｔｌやｇｅｔｓｏｃｋｏｐｔなどの専用のインタフェースを用いて取り出せるようにしてもよい。これにより、キャッシュ処理部１３２は、ソケット情報から取り出したハッシュ値を用いて、キャッシュ記憶部１６１，１７１からコンテンツを探索することができる。
【０１７３】
一方、キャッシュ振分部１３４は、フレームがキャッシュ対象でなかった場合、受信処理を実行せずに、フレームをブリッジ処理部１３５に渡す。
【０１７４】
ブリッジ処理部１３１は、第１実施形態におけるブリッジ処理部１５１に相当する。すなわち、本実施形態では、ブリッジ処理部１５１の機能が、ＯＳのネットワーク処理部１３１により実現される。ブリッジ処理部１３５は、キャッシュ振分部１３４から受け取ったフレームにブリッジ処理を実行する。
【０１７５】
なお、本実施形態において、ネットワーク処理部１３１は、ネットワーク層及びトランスポート層のプロトコル処理を実行する。具体的には、ネットワーク処理部１３１は、ＩＰｖ４、ＩＰｖ６、ＴＣＰ、ＵＤＰ（User Datagram Protocol）などのプロトコル処理を実行する。
【０１７６】
次に、本実施形態に係る通信装置１の動作について、図２１を参照して説明する。図２１は、本実施形態に係る通信装置１の動作の一例を示すフローチャートである。図２１のフローチャートは、ステップＳ２９，Ｓ３０を除き、図４のフローチャートと同様である。
【０１７７】
本実施形態では、フレームがプロキシ対象でない場合（ステップＳ５のＮＯ）、プロキシ振分部１５４は、フレームをキャッシュ情報付加部１５８に渡す（ステップＳ２９）。この際、プロキシ振分部１５４は、フレームはキャッシュ対象ではないというキャッシュ判定の判定結果を、キャッシュ情報付加部１５８に渡す。この判定結果は、ダミーであり、プロキシ振分部１５４がキャッシュ判定を行っているわけではない。
【０１７８】
フレームを受け取ったキャッシュ情報付加部１５８は、フレームに、キャッシュ判定の判定結果を含むキャッシュ情報を付加し、キャッシュ振分部１３４に渡す（ステップＳ３０）。ここで付加された判定結果は偽（キャッシュ対象ではないという判定結果）であるため（ステップＳ１０のＮＯ）、キャッシュ振分部１３４は、フレームをブリッジ処理部１３５に渡し、ブリッジ処理部１３５がフレームをブリッジ処理する（ステップＳ６）。
【０１７９】
一方、フレームがプロキシ対象であった場合（ステップＳ５のＹＥＳ）、プロキシ振分部１５４は、キャッシュ判定部１５５に渡す。以降、ステップＳ８，Ｓ９，Ｓ１１，Ｓ１２は、図４と同様である。ただし、キャッシュ判定部１５５は、判定終了後、フレームをキャッシュ情報付加部１５８に渡す。また、キャッシュ情報付加部１５８は、キャッシュ判定部１５５が出力したキャッシュ情報、又はキャッシュ情報記憶部１５６に記憶されたキャッシュ情報を取得する。
【０１８０】
そして、キャッシュ情報付加部１５８は、受け取ったフレームにキャッシュ情報を付加し、キャッシュ振分部１３４に渡す（ステップＳ３０）。
【０１８１】
キャッシュ判定の判定結果が偽（キャッシュ対象ではないという判定結果）であった場合（ステップＳ１０のＮＯ）、キャッシュ振分部１３４は、フレームをブリッジ処理部１３５に渡し、ブリッジ処理部１３５がフレームをブリッジ処理する（ステップＳ６）。
【０１８２】
一方、キャッシュ判定の判定結果が真（キャッシュ対象であるという判定結果）であった場合（ステップＳ１０のＹＥＳ）、キャッシュ振分部１３４は、フレームを受信処理し、キャッシュ処理部１３２に渡す。以降の処理は、図５と同様である。
【０１８３】
以上説明した通り、本実施形態によれば、キャッシュ判定を行うキャッシュ判定部１５５と、キャッシュ処理を実行するか判定するキャッシュ振分部１３４と、が異なるハードウェアモジュールで動作する場合であっても、フレームにキャッシュ情報を付加して、第１実施形態と同様にフレームを処理することができる。
【０１８４】
（第４実施形態）
第４実施形態に係る通信装置について、図２２〜図２８を参照して説明する。図２２は、本実施形態に係る通信装置１の機能構成の一例を示す図である。図２２に示すように、本実施形態に係る通信装置１は、キャッシュ振分部１３４と、非キャッシュ処理部１３６と、キャッシュ情報付加部１５８と、を備え、キャッシュ情報記憶部１５６及びキャッシュ振分部１５７を備えない。キャッシュ情報付加部１５８は、第３実施形態と同様である。他の構成は、第１実施形態と同様である。以下、第１実施形態との相違点を中心に説明する。
【０１８５】
本実施形態において、プロキシ対象でないフレームは、プロキシ振分部１５４によりブリッジ処理部１５１に振り分けられ、ブリッジ処理される。一方、プロキシ対象であるフレームは、プロキシ振分部１５４によりキャッシュ判定部１５５に振り分けられる。
【０１８６】
キャッシュ判定部１５５は、受け取ったフレームがキャッシュ判定対象か判定する。キャッシュ判定対象のフレームは、例えば、ＨＴＴＰリクエストを含むフレームである。
【０１８７】
フレームがキャッシュ判定対象であった場合、キャッシュ判定部１５５は、フレームがキャッシュ対象か判定する。例えば、キャッシュ判定部１５５は、フレームのキーを抽出し、キーに応じたハッシュ値を計算し、得られたハッシュ値の組とブルームフィルタとを比較することにより、フレームがキャッシュ対象であるか判定する。
【０１８８】
キーは、上述の通り、宛先ＩＰアドレスであってもよいし、図２３に示すように、絶対パス（absolute path）及びホストであってもよい。図２３の例では、「movie/low/segment3.ts」及び「www.toshiba.co.jp」が、キーとして抽出される。
【０１８９】
また、通信装置１をフォワードプロキシとして動作させる場合には、絶対ＵＲＩ（absolute URI）の形式でリクエストがされるので、図２３に示すように、キーは、絶対ＵＲＩであってもよい。図２３の例では、「www.toshiba.co.jp/movie/low/segment3.ts」がキーとして抽出される。
【０１９０】
キャッシュ判定部１５５は、フレーム及びキャッシュ情報を出力する。キャッシュ情報には、例えば、キャッシュ判定対象判定の判定結果と、キャッシュ判定の判定結果と、ハッシュ値の組と、が含まれる。
【０１９１】
キャッシュ情報付加部１５８は、フレームにキャッシュ情報を付加して出力する。キャッシュ情報付加部１５８は、上述の通り、フレームの先頭にキャッシュ情報を付加してもよいし、フレームのディスクリプタにキャッシュ情報を記載してもよい。また、キャッシュ情報付加部１５８は、図２４に示すように、ＨＴＴＰリクエスト（ＴＣＰのペイロード）の中に、ヘッダを独自に定義することによりキャッシュ情報を付加してもよい。
【０１９２】
キャッシュ情報付加部１５８は、後段のネットワーク処理部１３１，１４１で、フレームが正常に処理されるように、ＴＣＰヘッダやＩＰヘッダの情報を変更してもよい。例えば、フレームの長さを、キャッシュ情報を追加した分だけ長くしたり、チェックサムの値を、キャッシュ情報を追加した分だけ加算したりすることが考えられる。また、フレームを記憶するためのメモリの量を、キャッシュ情報を追加した分だけ増やしてもよい。
【０１９３】
キャッシュ情報付加部１５８が出力したフレームは、ネットワーク処理部１４１，１３１により受信処理され、キャッシュ振分部１３４に渡される。
【０１９４】
キャッシュ振分部１３４は、第１実施形態におけるキャッシュ振分部１５７に相当する。すなわち、本実施形態では、キャッシュ振分部１５７の機能が、アプリケーションにより実現される。キャッシュ振分部１３４は、キャッシュ情報付加部１５８から、ネットワーク処理部１４１，１３１を介して渡されたフレームを、フレームに付加されたキャッシュ情報に基づいて、非キャッシュ処理部１３６及びキャッシュ処理部１３２のいずれか一方に振り分ける。
【０１９５】
より詳細には、キャッシュ振分部１３４は、フレームがキャッシュ対象であった場合（すなわち、フレームに付加されたキャッシュ判定の判定結果が真であった場合）、キャッシュ処理部１３２に渡す。
【０１９６】
一方、キャッシュ振分部１３４は、フレームがキャッシュ対象でなかった場合（すなわち、フレームに付加されたキャッシュ判定の判定結果が偽であった場合）、フレームを非キャッシュ処理部１３６に渡す。
【０１９７】
非キャッシュ処理部１３６は、キャッシュ振分部１３４からフレームを受け取ると、コンテンツ取得部１３３を介してサーバ６と新たなコネクションを確立し、クライアント２から要求されたコンテンツを、サーバ６から取得する。そして、サーバ６から取得したコンテンツを、クライアント２に返送する。
【０１９８】
ここで、図２５、通信装置１が受信したフレームが、キャッシュ判定対象であるが、キャッシュ対象ではない場合のシーケンス図である。この場合、通信装置１は、図２５に示すように、取得したコンテンツをキャッシュせずに、クライアント２に返送する。
【０１９９】
次に、本実施形態に係る通信装置１の動作について、図２６及び図２７を参照して説明する。図２６及び図２７は、本実施形態に係る通信装置１の動作の一例を示すフローチャートである。図２６及び図２７におけるステップＳ１〜Ｓ１８，Ｓ２９，Ｓ３０は、図４，図５，図２１のフローチャートと同様である。
【０２００】
本実施形態では、プロキシ判定部１５３は、ブリッジ振分部１５２から受け取ったフレームが、プロキシ対象であるか判定し、フレーム及び判定結果をプロキシ振分部１５４に渡す（ステップＳ４）。
【０２０１】
フレームがプロキシ対象でない場合（ステップＳ５のＮＯ）、プロキシ振分部１５４は、フレームをブリッジ処理部１５１に渡す。そして、フレームは、ブリッジ処理部１５１によりブリッジ処理される（ステップＳ６）。
【０２０２】
一方、フレームがプロキシ対象であった場合（ステップＳ５のＹＥＳ）、プロキシ振分部１５４は、フレームをキャッシュ判定部１５５に渡す。
【０２０３】
フレームを受け取ったキャッシュ判定部１５５は、まず、受け取ったフレームがキャッシュ判定対象であるか判定する（ステップＳ８）。
【０２０４】
フレームがキャッシュ判定対象でない場合（ステップＳ８のＮＯ）、キャッシュ判定部１５５は、フレーム及びキャッシュ判定対象判定の判定結果を、キャッシュ情報付加部１５８に渡す。キャッシュ情報付加部１５８は、フレームにキャッシュ情報を付加する（ステップＳ３０）。ここで付加されるキャッシュ情報には、キャッシュ判定対象判定の判定結果（偽）が含まれる。
【０２０５】
一方、フレームがキャッシュ判定対象であった場合（ステップＳ８のＹＥＳ）、キャッシュ判定部１５５は、キャッシュ判定を行う（ステップＳ１１）。そして、キャッシュ判定部１５５は、フレームと、キャッシュ判定対象判定及びキャッシュ判定の判定結果と、ハッシュ値と、をキャッシュ情報付加部１５８に渡す。キャッシュ情報付加部１５８は、フレームにキャッシュ情報を付加する（ステップＳ３０）。ここで付加されるキャッシュ情報には、キャッシュ判定対象判定の判定結果（真）と、キャッシュ判定の判定結果（真又は偽）と、ハッシュ値と、が含まれる。
【０２０６】
キャッシュ情報付加部１５８は、キャッシュ情報を付加したフレームを、ネットワーク処理部１４１に渡す。フレームは、ネットワーク処理部１４１，１３１で所定のプロトコル処理を実行され、キャッシュ振分部１３４に渡される（ステップＳ１３）。
【０２０７】
キャッシュ振分部１３４は、キャッシュ情報を参照して、受け取ったフレームがキャッシュ対象か判定する（ステップＳ３１）。フレームがキャッシュ対象でない場合（ステップＳ３１のＮＯ）、すなわち、キャッシュ判定の判定結果が偽である場合、キャッシュ振分部１３４は、フレームを非キャッシュ処理部１３６に渡す。
【０２０８】
フレームを受け取った非キャッシュ処理部１３６は、コンテンツ取得部１３３を介してサーバ６と新たなコネクションを確立し、コンテンツを取得し（ステップＳ３２）、取得したコンテンツをクライアントに返送する（ステップＳ１８）。
【０２０９】
一方、フレームがキャッシュ対象である場合（ステップＳ３１のＹＥＳ）、すなわち、キャッシュ判定の判定結果が真である場合、キャッシュ振分部１３４は、フレームをキャッシュ処理部１３２に渡す。
【０２１０】
フレームを受け取ったキャッシュ処理部１３２は、フレームにより要求されたコンテンツがキャッシュ済みか判定する（ステップＳ１４）。以降、ステップＳ１４〜Ｓ１８の処理は、第１実施形態と同様である。
【０２１１】
図２８は、キャッシュ判定部１５５の動作の具体例を示す図である。図２８の例では、ブルームフィルタは、１６ビットのビット配列であり、ｋ＝３である。以下では、キャッシュ判定部１５５は、宛先ポート番号が８０番のＴＣＰセグメントを含むフレーム１〜４を順に受け取るものとする。すなわち、フレーム１〜４は、いずれもキャッシュ判定対象である。また、図２８に示すように、フレーム１を受け取る前の時点で、ブルームフィルタが初期化されている例である。さらに、以下では、キーとして、絶対パス及びホストの値が抽出されるものとする。
【０２１２】
キャッシュ判定部１５５がフレーム１を受け取ると、キー抽出部１５５２がキー（絶対パス及びホスト）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム１のキーはホストが「www.toshiba.co.jp」で絶対パスが「/video/low/segment0.ts」であり、ハッシュ値は｛１，２，６｝であるものとする。
【０２１３】
ブルームフィルタの全てのビット値は０であるため、フレーム１のハッシュ値｛１，２，６｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム１は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム１をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの１，２，６番目のビットを１に設定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム１は、非キャッシュ処理部１３６により処理され、フレーム１により要求されたコンテンツはキャッシュされない。
【０２１４】
キャッシュ判定部１５５がフレーム２を受け取ると、キー抽出部１５５２がキー（絶対パス及びホスト）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム２のキーはホストが「www.toshiba.co.jp」で絶対パスが「/video/low/segment1.ts」であり、ハッシュ値は｛４，９，１２｝であるものとする。
【０２１５】
ブルームフィルタは、１，２，６番目のビットが１であり、他のビットは０であるため、フレーム２のハッシュ値｛４，９，１２｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム２は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム２をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの４，９，１２番目のビットを１に設定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム２は、非キャッシュ処理部１３６により処理され、フレーム２により要求されたコンテンツはキャッシュされない。
【０２１６】
キャッシュ判定部１５５がフレーム３を受け取ると、キー抽出部１５５２がキー（絶対パス及びホスト）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム３のキーはホストが「example.com」で絶対パスが「/index.html」であり、ハッシュ値は｛１，１２，１５｝であるものとする。
【０２１７】
ブルームフィルタは、１，２，４，６，９，１２番目のビットが１であり、他のビットは０であるため、フレーム２のハッシュ値｛１５｝は、ブルームフィルタの集合に含まれない。したがって、メンバ判定部１５５５は、フレーム３は、メンバではないと判定する。そして、メンバ追加部１５５７は、フレーム３をブルームフィルタのメンバに追加する。すなわち、メンバ追加部１５５７は、ブルームフィルタの１５番目のビットを１に設定する。ブルームフィルタの１，１２番目のビットは、既に１に設定されているため変わらない。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム３は、非キャッシュ処理部１３６により処理され、フレーム３により要求されたコンテンツはキャッシュされない。
【０２１８】
キャッシュ判定部１５５がフレーム４を受け取ると、キー抽出部１５５２がキー（絶対パス及びホスト）を抽出し、３個のハッシュ値算出部１５５３がそれぞれハッシュ値を算出し、ハッシュ値記憶部１５５４がハッシュ値を記憶する。ここで、フレーム４のキーはホストが「www.toshiba.co.jp」で絶対パスが「/video/low/segment0.ts」であるものとする。この場合、ハッシュ値は｛１，２，６｝となる。フレーム４は、フレーム１と同一のコンテンツを要求する２つ目の（ＨＴＴＰのＧＥＴリクエストを含む）フレームに相当する。
【０２１９】
ブルームフィルタは、１，２，４，６，９，１２，１５番目のビットが１であり、他のビットは０であるため、フレーム４のハッシュ値｛１，２，６｝は、全てブルームフィルタの集合に含まれる。したがって、メンバ判定部１５５５は、フレーム４は、メンバであると判定する。その後、ハッシュ値記憶部１５５４がリセットされる。結果として、フレーム４は、キャッシュ処理部１３２により処理される。すなわち、フレーム４により要求されたコンテンツが、キャッシュ記憶部１６１，１７１にキャッシュされる。
【０２２０】
以降、通信装置１は、クライアント２から、ホストが「www.toshiba.co.jp」で絶対パスが「/video/low/segment0.ts」であり宛先ポート番号が８０番であるＴＣＰセグメントを含むフレームを受信すると、キャッシュ判定が真になり、キャッシュ記憶部１６１，１７１にキャッシュされたコンテンツをクライアント２に返送する。
【０２２１】
以上説明した通り、本実施形態に係る通信装置１は、ＨＴＴＰのＫｅｅｐ  Ａｌｉｖｅリクエストのように、同じコネクションを再利用して何度もリクエストを行う場合であっても、リクエスト毎に、キャッシュ判定を実行することができる。
【０２２２】
なお、本実施形態では、通信装置１を透過プロキシとして動作させる場合について説明したが、フォワードプロキシ又はバースプロキシとして動作させることも可能である。
【０２２３】
ここで、図２９及び図３０は、図２２の通信装置１の変形例を示す図である。
【０２２４】
図２９は、図２２のネットワークコプロセッサ１５の機能が、ＴＯＥ１４及びＣＰＵ１３のＯＳにより実現された通信装置１を示す図である。図２９に示すように、この通信装置１は、ネットワーク処理部１４１が、ブリッジ処理部１４３と、プロキシ判定部１４４と、キャッシュ判定部１４５と、キャッシュ情報付加部１４６と、を備え、ネットワーク処理部１３１が、ブリッジ処理部１３５と、プロキシ振分部１３７と、を備える。このような構成により、図２９の通信装置１は、ネットワークコプロセッサ１５を用いずに、図２２の通信装置１と同様の機能を実現できる。
【０２２５】
図３０は、図２２のＴＯＥ１４の機能が、ＣＰＵ１３のＯＳのネットワーク処理部１３１により実現された通信装置１を示す図である。図３０に示すように、この通信装置１は、ＴＯＥ１４を備えない。そして、ネットワーク処理部１３１は、図２２の通信装置１において、ネットワーク処理部１４１により行われていたプロトコル処理を実行する。このような構成により、図３０の通信装置１は、ＴＯＥ１４を用いずに、図２２の通信装置１と同様の機能を実現できる。
【０２２６】
（第５実施形態）
第５実施形態に係る通信装置１について、図３１〜図３４を参照して説明する。図３１は、本実施形態に係る通信装置１の機能構成の一例を示す図である。図３１に示すように、本実施形態に係る通信装置１は、キャッシュ情報記憶部１３８を備える。他の構成は、第４実施形態と同様である。以下、第４実施形態との相違点を中心に説明する。
【０２２７】
一般に、フレームを格納するメモリ領域は、ＭＴＵ（Maximum Transmission Unit）のサイズを有する。通常、ＨＴＴＰリクエストはＭＴＵより短いため、メモリ領域の後部には空き（フレームが格納されない領域）があることが多い。また、メモリ領域を確保する際に一定の大きさの空き領域を予め用意することもできる。
【０２２８】
本実施形態において、キャッシュ情報付加部１５８は、フレームがキャッシュ判定対象である場合、上述の空き領域にキャッシュ情報を付加する。ここで付加するキャッシュ情報には、キャッシュ判定の判定結果と、ハッシュ値と、が含まれる。
【０２２９】
図３２は、キャッシュ情報付加部１５８によるキャッシュ情報の付加方法の一例を示す図である。図３２の例では、フレームの後部の空き領域に、識別情報と、キャッシュ情報と、が付加されている。
【０２３０】
識別情報は、キャッシュ情報の有無を示す固定長の情報である。例えば、識別情報が１ビットの場合、キャッシュ情報が付加されている場合には、識別情報として１が格納され、キャッシュ情報が付加されていない場合、識別情報として０が格納される。
【０２３１】
なお、フレームの後部の空き領域には、キャッシュ情報が複数格納可能であってもよいし、識別情報の後部に、格納されたキャッシュ情報の数を示す値を格納する領域が設けられてもよい。
【０２３２】
キャッシュ情報付加部１５８は、キャッシュ情報を付加したフレームを、ネットワーク処理部１４１に渡す。そして、フレームは、ネットワーク処理部１４１，１３１により所定のプロトコル処理を実行される。
【０２３３】
キャッシュ情報記憶部１３８は、ネットワーク処理部１３１がプロトコル処理したフレームのキャッシュ情報を記憶する。キャッシュ情報記憶部１３８は、ＣＰＵ１３のメモリ（図示省略）により構成され、キャッシュ情報を先入れ先出し（ＦＩＦＯ：First In First Out）されるキューとして記憶する。
【０２３４】
図３２に示すように、キャッシュ情報記憶部１３８は、ソケット情報と関連付けされており、ソケット毎に管理される。キャッシュ情報記憶部１３８は、フレームを受け取ると、フレームの後部に付加されたキャッシュ情報を取得し、取得したキャッシュ情報を、キューの末尾に追加する。キャッシュ情報記憶部１３８はソケット情報に内包されていてもよいし、ソケット情報からポインタなどを用いて接続されてもよい。
【０２３５】
キャッシュ振分部１３４は、ソケットに対するｉｏｃｔｌやｇｅｔｓｏｃｋｏｐｔなどのシステムコールを用いて、指定したソケット情報に関連付けされたキャッシュ情報記憶部１３８のキューの先頭からキャッシュ情報を読み出すことができる。
【０２３６】
したがって、キャッシュ振分部１３４は、ｒｅｃｖでクライアント２からのフレームを取得し、取得したフレームにＨＴＴＰリクエストが含まれている場合、ｇｅｔｓｏｃｋｏｐｔでキューから先頭のキャッシュ情報を取得し、取得したキャッシュ情報に基づいて、フレームをキャッシュ処理するか否か判定し、キャッシュ処理部１３２及び非キャッシュ処理部１３６の一方に振り分けることができる。
【０２３７】
次に、本実施形態に係る通信装置１の動作について、図３３を参照して説明する。図３３は、本実施形態に係る通信装置１の動作の一例を示すフローチャートである。図３３におけるＢまでの動作は、図２６のフローチャートと同様である。
【０２３８】
図２６に示すように、本実施形態では、ネットワーク処理部１４１，１３１がフレームをプロトコル処理した後、キャッシュ情報記憶部１３８が、フレームの後部に付加されたキャッシュ情報を記憶する（ステップＳ３３）。キャッシュ情報が付加されているか否かは、フレームの後部の識別情報の値を確認して判定すればよい。
【０２３９】
その後、キャッシュ振分部１３４は、ｇｅｔｓｏｃｋｏｐｔなどのシステムコールにより、キャッシュ情報記憶部１３８からキャッシュ情報を取得し、キャッシュ判定の判定結果及びハッシュ値を読み出し、フレームがキャッシュ対象であるか判定する（ステップＳ３１）。フレームがキャッシュ対象である場合（ステップＳ３１のＹＥＳ）、キャッシュ振分部１３４は、フレームをキャッシュ処理部１３２に渡す。一方、フレームがキャッシュ対象でない場合（ステップＳ３１のＮＯ）、キャッシュ振分部１３４は、フレームを非キャッシュ処理部１３６に渡す。以降の処理は、図２７のフローチャートと同様である。
【０２４０】
以上説明した通り、本実施形態に係る通信装置１は、フレームの後部の空き領域にキャッシュ情報を付加し、付加されたキャッシュ情報をキャッシュ情報記憶部１３８に記憶し、記憶されたキャッシュ情報をシステムコールで読み出し、読み出したキャッシュ情報に基づいて、キャッシュ処理するか否か判定することができる。これにより、ＨＴＴＰのパスやチェックサムの演算などの、処理のオーバヘッドを削減することができる。
【０２４１】
図３４は、本実施形態に係る通信装置１の変形例を示す図である。図３４の通信装置１は、ネットワーク処理部１３１がキャッシュ情報記憶部１３８を備える代わりに、ネットワーク処理部１４１がキャッシュ情報記憶部１４７を備える。このような構成であっても、図３１の通信装置１と同様の機能を実現できる。
【０２４２】
（第６実施形態）
第６実施形態に係る通信装置１について、図３５〜図３７を参照して説明する。本実施形態に係る通信装置１は、ＴＯＥ１４及びネットワークコプロセッサ１５を備えず、これらの機能が全てＣＰＵ１３のアプリケーション又はＯＳにより実現される。図３５は、本実施形態に係る通信装置１の機能構成の一例を示す図である。
【０２４３】
図３５に示すように、本実施形態に係る通信装置１は、キャッシュ処理部１３２と、コンテンツ取得部１３３と、キャッシュ振分部１３４と、非キャッシュ処理部１３６と、キャッシュ判定部１３９と、を備える。これらの機能は、ＣＰＵ１３のアプリケーションにより実現される。
【０２４４】
また、通信装置１は、ネットワーク処理部１３１と、ブリッジ処理部１３５と、プロキシ振分部１３７と、ブリッジ振分部１３Ａと、プロキシ判定部１３Ｂと、を備える。これらの機能は、ＣＰＵ１３のＯＳにより実現される。
【０２４５】
次に、本実施形態に係る通信装置１の動作について、図３６及び図３７を参照して説明する。図３６及び図３７は、本実施形態に係る通信装置１の動作の一例を示すフローチャートである。
【０２４６】
図３６に示すように、本実施形態では、フレームがプロキシ対象でなかった場合（ステップＳ５のＮＯ）、プロキシ振分部１３７は、フレームをブリッジ処理部１３５に渡す。その後、フレームは、ブリッジ処理部１３５によりブリッジ処理される（ステップＳ６）。
【０２４７】
一方、フレームがプロキシ対象であった場合（ステップＳ５のＹＥＳ）、ネットワーク処理部１３１がフレームをプロトコル処理し（ステップＳ３４）、プロキシ振分部１３７がフレームをキャッシュ判定部１３９に渡す。
【０２４８】
キャッシュ判定部１３９は、渡されたフレームがキャッシュ判定対象か判定し（ステップＳ８）、キャッシュ判定対象であった場合（ステップＳ８のＹＥＳ）、フレームをキャッシュ判定する（ステップＳ１１）。その後、キャッシュ判定部１３９は、フレーム及びキャッシュ情報をキャッシュ振分部１３４に渡す。
【０２４９】
キャッシュ振分部１３５は、フレームがキャッシュ対象であった場合（ステップＳ３１のＹＥＳ）、フレームをキャッシュ処理部１３２に渡す。その後、キャッシュ処理部１３２は、コンテンツがキャッシュ済みか判定する（ステップＳ１４）。以降の処理は、図３３のフローチャートと同様である。
【０２５０】
一方、キャッシュ振分部１３５は、フレームがキャッシュ対象でなかった場合（ステップＳ３１のＮＯ）、フレームを非キャッシュ処理部１３６に渡す。その後、コンテンツ取得部１３３がコンテンツを取得し（ステップＳ３２）、クライアントに応答する（ステップＳ１８）。
【０２５１】
以上説明した通り、本実施形態に係る通信装置１は、ＣＰＵ１３で動作するアプリケーションでキャッシュ判定部１３９及びキャッシュ振分部１３４の機能を実現できる。このため、ＣＰＵ１３がマルチコア又はメニーコアを搭載している場合、特別なハードウェアを用いなくても、キャッシュ判定を高速に実行可能となる。
【０２５２】
なお、以上で説明した各実施形態に係る通信装置１は、無線ＬＡＮのアクセスポイントとして動作することを想定していたため、クライアント２と接続する無線ネットワークアダプタ１１と、サーバ６と接続する有線ネットワークアダプタ１２と、をそれぞれ備えた。しかしながら、通信装置１は、クライアント２及びサーバ６とそれぞれ接続する２つの無線ネットワークアダプタ１１を備えてもよいし、クライアント２及びサーバ６とそれぞれ接続する２つの有線ネットワークアダプタ２を備えてもよい。また、IEEE 802.1qで定義されるＶＬＡＮなどを用いて、１つの無線ネットワークアダプタ１１又は有線ネットワークアダプタ１２で、複数のネットワークと接続してもよい。
【０２５３】
また、以上では、ＨＴＴＰのバージョンが１．１である場合を例に説明したが、バージョンは、１．０でもよいし、２．０でもよい。例えば、ＨＴＴＰ２．０の場合、１つのフレームに複数のリクエストが含まれるため、キーが複数となる。この場合、複数のキャッシュ情報は、キャッシュ情報記憶部に配列等により格納すればよい。キャッシュ情報をフレームに付加する場合も同様である。逆に、リクエストが複数のフレームに分割される場合には、バッファを設けて複数のフレームを連結してから処理を行なえばよい。
【０２５４】
さらに、以上の説明では、トランスポートの層のプロトコルはＴＣＰであったが、プロトコルはＵＤＰでもよいし、ＱＵＩＣであってもよい。
【０２５５】
なお、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。また例えば、各実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。
【符号の説明】
【０２５６】
１：通信装置、２：クライアント、３：スイッチ、４：ルータ、５：インターネット、６：サーバ、１１：無線ネットワークアダプタ、１２：有線ネットワークアダプタ、１３：ＣＰＵ、１４：ＴＯＥ、１５：ネットワークコプロセッサ、１６：メモリ、１７：ストレージ、１８：バス、１１１：無線ネットワークインタフェース部、１２１：有線ネットワークインタフェース部、１３１：ネットワーク処理部１３２：キャッシュ処理部、１３３：コンテンツ取得部、１３４：キャッシュ振分部、１３５：ブリッジ処理部、１３６：非キャッシュ処理部、１３７：プロキシ振分部、１３８：キャッシュ情報処理部、１３９：キャッシュ判定部、１３Ａ：ブリッジ振分部、１３Ｂ：プロキシ判定部、１４１：ネットワーク処理部、１４２：ストレージアクセス部、１４３：ブリッジ処理部、１４４：プロキシ判定部、１４５：キャッシュ判定部、１４６：キャッシュ情報付加部、１４７：キャッシュ情報記憶部、１５１：ブリッジ処理部、１５２：ブリッジ振分部、１５３：プロキシ判定部、１５４：プロキシ振分部、１５５：キャッシュ判定部、１５６：キャッシュ情報記憶部、１５７：キャッシュ振分部、１５８：キャッシュ情報付加部、１６１：キャッシュ記憶部、１７１：キャッシュ記憶部
【図１】
2017058788.tif 000003
【図２】
2017058788.tif 000004
【図３】
2017058788.tif 000005
【図４】
2017058788.tif 000006
【図５】
2017058788.tif 000007
【図６】
2017058788.tif 000008
【図７】
2017058788.tif 000009
【図８】
2017058788.tif 000010
【図９】
2017058788.tif 000011
【図１０】
2017058788.tif 000012
【図１１】
2017058788.tif 000013
【図１２】
2017058788.tif 000014
【図１３】
2017058788.tif 000015
【図１４】
2017058788.tif 000016
【図１５】
2017058788.tif 000017
【図１６】
2017058788.tif 000018
【図１７】
2017058788.tif 000019
【図１８】
2017058788.tif 000020
【図１９】
2017058788.tif 000021
【図２０】
2017058788.tif 000022
【図２１】
2017058788.tif 000023
【図２２】
2017058788.tif 000024
【図２３】
2017058788.tif 000025
【図２４】
2017058788.tif 000026
【図２５】
2017058788.tif 000027
【図２６】
2017058788.tif 000028
【図２７】
2017058788.tif 000029
【図２８】
2017058788.tif 000030
【図２９】
2017058788.tif 000031
【図３０】
2017058788.tif 000032
【図３１】
2017058788.tif 000033
【図３２】
2017058788.tif 000034
【図３３】
2017058788.tif 000035
【図３４】
2017058788.tif 000036
【図３５】
2017058788.tif 000037
【図３６】
2017058788.tif 000038
【図３７】
2017058788.tif 000039