(57)【特許請求の範囲】
【請求項１】
通信装置であって、
他の通信装置からパケットを受信する受信手段と、
前記受信手段により受信した前記パケットに対して第１の通信プロトコル処理を行う第１の処理手段と、
前記第１の処理手段による複数の前記パケットに対する処理が完了したことに応じて、前記第１の処理手段により処理された前記複数の前記パケットに対して第２の通信プロトコル処理を開始する第２の処理手段と、
前記受信手段により受信した前記パケットを格納する第１の格納手段と、
前記第１の処理手段が前記第１の通信プロトコル処理を行う際に利用する第２の格納手段と、
前記第１の格納手段に格納された前記パケットの数が所定数を超えた場合に、前記第１の格納手段に格納された前記パケットを、前記第２の格納手段にコピーするコピー手段と、
を有することを特徴とする通信装置。
【請求項２】
通信装置であって、
他の通信装置からパケットを受信する受信手段と、
前記受信手段により受信した前記パケットに対して第１の通信プロトコル処理を行う第１の処理手段と、
前記第１の処理手段による複数の前記パケットに対する処理が完了したことに応じて、前記第１の処理手段により処理された前記複数の前記パケットに対して第２の通信プロトコル処理を開始する第２の処理手段と、
前記受信手段により受信した前記パケットを格納する第１の格納手段と、
前記第１の処理手段が前記第１の通信プロトコル処理を行う際に利用する第２の格納手段と、
所定期間ごとに、前記第１の格納手段に格納された前記パケットを、前記第２の格納手段にコピーするコピー手段と、
を有することを特徴とする通信装置。
【請求項３】
前記第１の通信プロトコル処理は、ＩＥＥＥ８０２．３規格またはＩＥＥＥ８０２．１１規格に準拠したプロトコル処理であることを特徴とする請求項１又は２に記載の通信装置。
【請求項４】
前記第２の通信プロトコル処理は、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）、および、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）の少なくともいずれか１つに準拠したプロトコル処理であることを特徴とする請求項１又は２に記載の通信装置。
【請求項５】
前記コピー手段は、所定期間ごとに、前記第１の格納手段に格納された前記パケットを、前記第２の格納手段にコピーすることを特徴とする請求項１に記載の通信装置。
【請求項６】
前記受信手段は、無線通信を介して前記パケットを受信することを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
通信装置の制御方法であって、
他の通信装置からパケットを受信する受信工程と、
受信した前記パケットに対して第１の通信プロトコル処理を行う第１の処理工程と、
前記第１の処理工程において複数の前記パケットに対する処理が完了したことに応じて、前記第１の処理工程において処理された前記複数の前記パケットに対して第２の通信プロトコル処理を開始する第２の処理工程と、
前記受信工程において受信された前記パケットを格納する第１の格納手段に格納された当該パケットの数が所定数を超えた場合に、前記第１の格納手段に格納された前記パケットを、前記第１の処理工程において前記第１の通信プロトコル処理を行う際に利用される第２の格納手段にコピーするコピー工程と、
を有することを特徴とする制御方法。
【請求項８】
通信装置の制御方法であって、
他の通信装置からパケットを受信する受信工程と、
受信した前記パケットに対して第１の通信プロトコル処理を行う第１の処理工程と、
前記第１の処理工程において複数の前記パケットに対する処理が完了したことに応じて、前記第１の処理工程において処理された前記複数の前記パケットに対して第２の通信プロトコル処理を開始する第２の処理工程と、
所定期間ごとに、前記受信工程において受信された前記パケットを格納する第１の格納手段に格納された当該パケットを、前記第１の処理工程において前記第１の通信プロトコル処理を行う際に利用される第２の格納手段にコピーするコピー工程と、
を有することを特徴とする制御方法。
【請求項９】
コンピュータを請求項１から６のいずれか１項に記載の通信装置として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は信号の受信処理に関する。
【背景技術】
【０００２】
多くの通信端末では、ＯＳＩ参照モデルのように通信機能を複数の階層に分けて管理するモデルが採用されている。ＯＳＩ参照モデルを用いた実装では、第２層のデータリンク層は通信モジュールごとに異なる処理であるためドライバとして実装される。一方で、第３層のネットワーク層と第４層のトランスポート層は通信モジュールやアプリケーションに依存しないためオペレーティングシステムのネットワークスタックとして実装されることが多い。
【０００３】
アプリケーションがデータを送信する場合、ネットワークスタック内部において、送信データに対してネットワーク層とトランスポート層で必要となる制御情報が、ヘッダとして加えられ、ドライバに渡される。ドライバは、パケットを送信する場合、送信データにデータリンク層で必要となる制御情報をヘッダとして加えてパケットを形成し、そのパケットをネットワークに送信する。また、ドライバは、パケットを受信する場合、通信モジュールから受信パケットを受け取ると、ヘッダの制御情報に対応する処理を実行する。そして、ドライバは、受け取ったパケットがネットワーク層より上位に関係する場合は、ネットワークスタックに受信パケットを渡す。
【０００４】
ネットワークスタックも、同様に、ヘッダの制御情報に対応する処理を実行する。ネットワークスタックは、受信パケットにアプリケーションに対するデータが存在する場合、受信パケットからネットワーク層とトランスポート層のヘッダを取り除いたデータを上位のアプリケーションに渡す。
【０００５】
これらのパケット受信処理では、受信速度の高速化のために、各層のタスク制御が効率的に実行されることが要求される。これに対して、特許文献１には、ネットワーク層及びトランスポート層の処理をアプリケーション層よりも優先して行うことにより、タスクスイッチ数を削減することで受信処理の効率化を図る技術が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−１５５０１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし特許文献１に記載の技術では、受信したパケットを処理する際のネットワークスタックとドライバとの間のタスク制御の問題については解決されていない。すなわち、ドライバがパケットを受信するたびにネットワークスタックのタスクを起床させると、その度にタスクスイッチが発生し、効率的な受信処理を行うことができなくなる。しかし、ドライバがパケット受信ごとにネットワークスタックを起床させないと、後続のパケットの有無が判断できない場合には、受信パケットがドライバとネットワークスタックとの間のバッファに留まり、ネットワークスタックで処理されなくなってしまう。
【０００８】
本発明は上記課題に鑑みなされたものであり、１つ以上のパケットに対する効率的な受信処理を実行する手法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明による通信装置は、他の通信装置からパケットを受信する受信手段と、前記受信手段により受信した前記パケットに対して第１の通信プロトコル処理を行う第１の処理手段と、前記第１の処理手段による複数の前記パケットに対する処理が完了したことに応じて、前記第１の処理手段により処理された前記複数の前記パケットに対して第２の通信プロトコル処理を開始する第２の処理手段と、前記受信手段により受信した前記パケットを格納する第１の格納手段と、前記第１の処理手段が前記第１の通信プロトコル処理を行う際に利用する第２の格納手段と、前記第１の格納手段に格納された前記パケットの数が所定数を超えた場合に、前記第１の格納手段に格納された前記パケットを、前記第２の格納手段にコピーするコピー手段と、を有する。
【発明の効果】
【００１０】
本発明によれば、１つ以上のパケットに対する効率的な受信処理を行うことが可能となる。
【図面の簡単な説明】
【００１１】
【図１】通信ネットワークの構成例を示す図。
【図２】通信端末のハードウェア構成例を示すブロック図。
【図３】通信端末のソフトウェア構成例を示すブロック図。
【図４】通信端末の受信処理の流れの一例を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【００１３】
（通信ネットワークの構成）
図１に、本実施形態に係る通信ネットワークの構成例を示す。本通信ネットワークは、一例として、通信装置（以下、「端末１０１」と呼ぶ。）と、通信相手装置（以下、「相手端末１０２」と呼ぶ。）とを含む。端末１０１と相手端末１０２とは、ネットワーク１０３を介して相互に接続する。なお、本実施形態では、端末１０１が、相手端末１０２が送信したデータを受信するものとする。
【００１４】
（端末の構成）
続いて、端末１０１の構成について説明する。図２に、端末１０１のハードウェア構成の一例を示す。端末１０１は、一例として、制御部２０１、記憶部２０２、通信制御部２０３及びアンテナ２０４を有する。制御部２０１は、例えばＣＰＵなどの１つ以上のプロセッサーであり、記憶部２０２に記憶された制御プログラムを実行することにより、端末１０１全体を制御する。記憶部２０２は、例えば、ＲＡＭ、ＲＯＭなどのメモリ、ＨＤＤなどのディスクなどの任意のデータ記憶機構によって構成される記憶装置である。記憶部２０２は、上述の制御プログラムや、処理中に生じたデータなどを記憶する。後述する各種動作は、例えば、記憶部２０２に記憶された制御プログラムを制御部２０１が実行することにより行われる。通信制御部２０３は、通信に係る処理を行う。なお、制御部２０１と通信制御部２０３は独立して動作することが可能である。
【００１５】
アンテナ２０４は、通信制御部２０３が出力した送信パケットを空間に放射し、空間から他の装置が送信した信号を受信する。なお、ここでは、端末１０１が無線通信を行う場合の例として、端末１０１にアンテナ２０４が含まれる構成が示されている。しかしながら、端末１０１は、無線通信を行わなくてもよく、有線通信を行ってもよい。なお、端末１０１は、有線通信を行う場合は、アンテナ２０４に代えて、光ファイバなどを介して信号の送受信を行うためのインタフェースを有していてもよい。また、端末１０１は、アンテナなどの無線インタフェースと、有線インタフェースとの両方を有し、場合によって切り替えて用いてもよい。
【００１６】
続いて、図３を用いて、端末１０１の機能構成について説明する。図３は、端末１０１のソフトウェア構成例を示す図である。端末１０１は、その機能構成として、例えば、アプリケーション部３０１、ネットワークスタック部３０２、受信パケットバッファ部３０４、ドライバ部３０５、受信パケット記憶部３０８及び通信モジュール部３０９を有する。ここで、アプリケーション部３０１、ネットワークスタック部３０２、及びドライバ部３０５は、それぞれ独立したタスクとして、制御部２０１による制御の下で動作する。受信パケットバッファ部３０４は、記憶部２０２に確保される記憶領域である。通信モジュール部３０９は、通信制御部２０３の制御の下で動作する。
【００１７】
通信モジュール部３０９は、例えば、受信パケット格納部３１０と受信パケット数格納部３１１とを含み、外部の装置（例えばネットワーク機器）から送信され、例えばアンテナ２０４を介して受信されたパケットの受信処理を行う。受信されたパケットは、受信パケット格納部３１０に一時的に格納される。受信パケット数格納部３１１は、受信パケット格納部３１０に一時的に格納されているパケットの個数を格納する。なお、受信パケット格納部３１０と受信パケット数格納部３１１とは、それぞれ別個のメモリなどの記憶部として実装されてもよいし、１つの記憶装置内のそれぞれ対応する記憶領域として実装されてもよい。
【００１８】
ドライバ部３０５は、下位層受信プロトコル処理部３０６とパケットコピー処理部３０７とを含み、受信パケットに対してＩＥＥＥ８０２．３規格やＩＥＥＥ８０２．１１規格等に準拠したプロトコル処理を実行する。パケットコピー処理部３０７は、通信モジュール部３０９からの受信割り込みを受けて、受信パケット格納部３１０から受信パケット記憶部３０８にパケットをコピーする。また、パケットコピー処理部３０７は、このとき、受信パケットの１つ１つに対応して受信パケット参照３１２を用意する。受信パケット参照３１２は、受信パケット記憶部３０８のうちの、例えば受信パケットが記憶されているアドレスを指す参照である。なお、受信パケット参照３１２は、アドレス以外の情報であってもよく、受信パケット記憶部３０８において、参照が対応する受信パケットの内容を指定できる情報であれば、どのようなものが用いられてもよい。下位層受信プロトコル処理部３０６は、例えばデータリンク層の処理を実行する処理部である。下位層受信プロトコル処理部３０６は、受信パケット記憶部３０８に記憶されている受信パケットに対して、プロトコルヘッダを解析するなどの処理を行った後に受信パケット参照３１２を受信パケットバッファ部３０４に格納する。そして、下位層受信プロトコル処理部３０６は、受信パケットがネットワーク層より上位の層に関連するパケットである場合にはネットワークスタック部３０２を起床させる。すなわち、下位層受信プロトコル処理部３０６は、ネットワークスタック部３０２を起床させるためのトリガを出力する。
【００１９】
受信パケットバッファ部３０４は、複数の受信パケット参照３１２を保持し、ドライバ部３０５とネットワークスタック部３０２との間での受信パケット参照３１２を受け渡しに用いられる。
【００２０】
ネットワークスタック部３０２は、上位層受信プロトコル処理部３０３を含み、ＴＣＰ／ＩＰプロトコルなどに基づいた通信処理を実行する。上位層受信プロトコル処理部３０３は、例えば、ネットワーク層、トランスポート層の処理を実行する処理部である。なお、上位層受信プロトコル処理部３０３と下位層受信プロトコル処理部３０６との関係は、例えば、ネットワーク層及びトランスポート層の処理と、データリンク層の処理との関係であってもよいし、それ以外であってもよい。すなわち、必ずしも、上位層受信プロトコル処理部３０３がネットワーク層及びトランスポート層を担当し、下位層受信プロトコル処理部３０６がデータリンク層を担当しなければならないわけではない。上位層受信プロトコル処理部３０３が、階層型通信プロトコルの受信処理において、下位層受信プロトコル処理部３０６が処理を施した後のデータ（信号又はパケット）を処理する関係にあれば、他の構成が用いられてもよい。
【００２１】
上位層受信プロトコル処理部３０３は、例えば、受信パケットバッファ部３０４に格納されているすべての受信パケット参照３１２に基づいて、受信パケット記憶部３０８に保持されている受信パケットを特定する。そして、上位層受信プロトコル処理部３０３は、特定した受信パケットについて、プロトコルヘッダの解析を行う。
【００２２】
上位層受信プロトコル処理部３０３は、例えば、ネットワーク層のプロトコル処理として、受信パケットが端末１０１自身に宛てられたパケットであることの確認を行う。なお、ネットワーク層のプロトコル処理は、例えば、ＩＰｖ４（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ４）又はＩＰｖ６（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ６）のプロトコル処理でありうる。上位層受信プロトコル処理部３０３は、確認の結果、端末１０１宛てのパケットでなかった場合はその受信パケットを廃棄し、端末１０１宛てのパケットであった場合は、続いて、トランスポート層の処理を実行する。
【００２３】
上位層受信プロトコル処理部３０３は、トランスポート層のプロトコル処理として、ＴＣＰの場合に、受信パケットについて、端末１０１自身が確立した通信で受信したパケットであるか、パケットのシーケンス番号が正しいか、等の確認を行う。なお、トランスポート層のプロトコル処理は、例えば、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏ）又はＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）のプトロコル処理でありうる。そして、上位層受信プロトコル処理部３０３は、確認の結果、受信パケットが適切なパケットであった場合は、受信パケット参照３１２に対応する受信パケットからデータを取り出してアプリケーション部３０１に渡す。また、上位層受信プロトコル処理部３０３は、送信端末に対して応答を返し、データが不足している場合には再送要求の送信などを行う。一方、上位層受信プロトコル処理部３０３は、確認の結果、受信パケットが不適切なパケットであった場合は、その受信パケットを破棄する。
【００２４】
アプリケーション部３０１は、ネットワークスタック部３０２から渡されたデータを受信し、データ種別に従った処理を実行する。
【００２５】
（処理の流れ）
続いて、図４を用いて、端末１０１におけるパケットの受信処理の流れについて説明する。図４は、端末１０１の、通信モジュール部３０９にパケットが届いてからアプリケーション部３０１にデータを渡すまでの動作を表すフローチャートである。
【００２６】
まず、通信モジュール部３０９は、受信パケットが端末１０１に届くと、その届いたパケットを受信パケット格納部３１０に格納する（Ｓ４０１）。また、通信モジュール部３０９は、このときに、受信パケット数格納部３１１における、受信したパケット数の情報を更新する（Ｓ４０２）。続いて、通信モジュール部３０９は、ドライバ部３０５に対してパケット受信を通知する（Ｓ４０３）。
【００２７】
ドライバ部３０５は、通信モジュール部３０９からのパケット受信通知を受けると、受信パケット数格納部３１１から受信パケット数を取得する（Ｓ４０４）。そして、ドライバ部３０５は、パケットコピー処理部３０７を用いて、受信パケット格納部３１０から受信パケット記憶部３０８へ、受信パケット数分の受信パケットをコピーし、それぞれの受信パケットに対応する受信パケット参照３１２を用意する。また、ドライバ部３０５は、下位層受信プロトコル処理部３０６を用いてプロトコル処理を実行した後に、受信パケット参照３１２を、受信パケットバッファ部３０４に格納する。
【００２８】
通信モジュール部３０９は、Ｓ４０５を受けて、受信されたパケットの数を受信パケット数格納部３１１から減少させる（Ｓ４０６）。すなわち、Ｓ４０４においてドライバ部３０５が取得した受信パケット数の数だけ、受信パケット数格納部３１１に記憶された受信パケットの個数を減少させる。なお、通信モジュール部３０９は、このときに、受信パケット格納部３１０に一時的に格納されていた受信パケットのうち、ドライバ部３０５によって取得された受信パケットを削除する。
【００２９】
ドライバ部３０５は、受信パケット数分のパケットコピー処理とプロトコル処理とを終えた後に、ネットワークスタック部３０２を起床させるためのトリガを出力する（Ｓ４０７）。すなわち、ドライバ部３０５は、１つのパケットの受信処理を行う度ではなく、通信モジュール部３０９が受信した１つ以上のパケットのグループに対して受信処理が完了したことに応じてネットワークスタック部３０２を起床させる。
【００３０】
ネットワークスタック部３０２は、起床すると、受信パケットバッファ部３０４に格納されている受信パケット参照３１２が示す受信パケットすべてに対して、上位層受信プロトコル処理部３０３を用いてプロトコル処理を実行する（Ｓ４０８）。そして、ネットワークスタック部３０２は、処理の結果、受信パケットにデータが存在する場合には、アプリケーション部３０１に受信したデータを渡す。
【００３１】
なお、通信モジュール部３０９からドライバ部３０５へのパケット受信の通知は、一度に受信される全てのパケットが受信された後に行われてもよいし、所定数のパケットを受信する度と、所定期間ごととの少なくともいずれかにおいて行われてもよい。すなわち、通信モジュール部３０９は、例えば、受信パケット数格納部３１１が記憶している受信パケットの個数が所定数に達した場合に、Ｓ４０３の通知をする。この所定数は、受信パケット記憶部３０８に記憶させておけるパケットの個数に応じて定められてもよい。また、通信モジュール部３０９は、例えば、所定期間ごとに、パケットを受信したか否かを判定して、１つでもパケットを受信している場合は、Ｓ４０３の通知を行う。さらに、通信モジュール部３０９は、例えば、受信パケット数格納部３１１が記憶している受信パケットの個数が所定数に達していない場合であっても、所定期間の経過に応じて、１つでもパケットを受信している場合は、Ｓ４０３の通知を行ってもよい。いずれの場合であっても、ドライバ部３０５は、Ｓ４０３の通知を受けた時点での受信パケットの個数に応じて、その個数分だけのパケットの受信処理が完了した後に、ネットワークスタック部３０２を起床させる。
【００３２】
また、上述の説明では、通信モジュール部３０９において受信されて格納されたパケットの全てを、ドライバ部３０５において処理した後に、ネットワークスタック部３０２を起床させる場合について説明したが、これに限られない。すなわち、ドライバ部３０５は、例えば、処理したパケット数が所定数に達した場合に、その所定数のパケットが受信パケット数格納部３１１に格納された受信パケットの一部であっても、ネットワークスタック部３０２を起床させてもよい。例えば、ドライバ部３０５は、受信パケット格納部３１０に格納された受信パケットの少なくとも一部を受信パケット記憶部３０８にコピーするのであってもよく、全ての受信パケットを受信パケット記憶部３０８にコピーする必要はない。また、ドライバ部３０５がネットワークスタック部３０２を起床させるのではなく、これらの機能部とは異なる不図示の制御部が、ドライバ部３０５からの処理完了報告を受けて、ネットワークスタック部３０２を起動させるようにしてもよい。
【００３３】
このように、本実施形態では、受信パケットに対して、ドライバ部３０５によって１つ以上のパケットが通信モジュール部からコピーされ、受信パケットバッファ部に受信パケット参照が格納された後に、ネットワークスタック処理が実行される。これにより、ネットワークスタック部３０２は、１度の起床で、複数の受信パケットバッファ部に格納されているパケット参照を処理できるようになる。このため、ドライバ部３０５とネットワークスタック部３０２との間のタスクスイッチが減少し、パケットの受信処理効率を向上させることができる。
【００３４】
＜＜その他の実施形態＞＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００３５】
３０２：ネットワークスタック部、３０５：ドライバ部、３０８：受信パケット記憶部、３０３：上位層受信プロトコル処理部、３０６：階層受信プロトコル処理部、３０７：パケットコピー処理部
【図１】
0006480747.tif 000002
【図２】
0006480747.tif 000003
【図３】
0006480747.tif 000004
【図４】
0006480747.tif 000005