(57)【特許請求の範囲】
【請求項１】
ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、
トランスポート層よりも下位に位置するデータ受信手段であって、前記データ区切り指示手段が指示するデータ区切りイベントを参照し、当該データ区切りイベントが発生していると判断するまでは受信したデータを上位層に送らず蓄積するデータ受信手段と、
を備えるネットワーク受信装置。
【請求項２】
ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、
トランスポート層よりも下位に位置するデータ受信手段であって、（イ）前記データ区切りイベントが発生した、または（ロ）データ蓄積上限時間に到達した、のいずれかの事象が生じるまでは受信したデータを上位層に送らず蓄積するデータ受信手段と、
を備えるネットワーク受信装置。
【請求項３】
コンピュータを、
ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、
トランスポート層よりも下位に位置するデータ受信手段であって、前記データ区切り指示手段が指示するデータ区切りイベントを参照し、当該データ区切りイベントが発生していると判断するまでは受信したデータを上位層に送らず蓄積するデータ受信手段と、
して機能させることを特徴とするプログラム。
【請求項４】
コンピュータを、
ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、
トランスポート層よりも下位に位置するデータ受信手段であって、（イ）前記データ区切りイベントが発生した、または（ロ）データ蓄積上限時間に到達した、のいずれかの事象が生じるまでは受信したデータを上位層に送らず蓄積するデータ受信手段と、
して機能させることを特徴とするプログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明はネットワーク受信装置、特に、ネットワーク信号受信を効率的に行うことを可能とする装置に関するものである。
【背景技術】
【０００２】
ＴＣＰ送受信性能を改善する取り組みとして、ネットワークインタフェースカード（ＮＩＣ）ハードウェアにより、元来ＣＰＵが処理していたＴＣＰパケット処理などネットワーク関連の処理をＮＩＣ側で行うことが行われている。例えばＮＩＣ内蔵のＬＳＩが、アプリケーション層で生成された送信データをＴＣＰセグメントに分割するＬＳＯ（Large Send Offload）や、受信したＴＣＰセグメントを逆に再構築するＬＲＯ（Large Receive Offload）などの取り組みが存在する。
【０００３】
特に受信処理に関するＬＲＯは、ＴＣＰセグメンテーション処理を行うことにより、これまでＣＰＵが行っていたＴＣＰ／ＩＰスタック処理からＣＰＵを開放することで、ＴＣＰスタックの処理に要するＣＰＵ負荷（オーバーヘッド）を下げ、最終的に得られるスループットを向上させるという目的を達成する手段として効果的である。
【０００４】
また、例えば、特許文献１においては、ルータ、Ｌ３スイッチまたはＮＩＣ等において、受信バッファの空き容量を元にビッグパケットのサイズを決定し、当該サイズを満たすまで受信したパケットを再構築し続けるといった発明が開示されている。こうすることにより、再構築しない場合に比べて、ヘッダ領域相当分を節約し、サイズの大きいデータ受信の場合には効率良い受信が可能となる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許公開公報  ２０００−３３２８１７号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしこの様にバッファ容量という固定されたサイズを利用してＬＲＯを行うことはスループットの効果向上に寄与する反面、即時性が損なわれていくという問題があった。例えば、印刷データを受信する場合、データサイズの大きい印刷データ本体はスループットが重視されるためＬＲＯが有効に働く。しかし、印刷データとともにデータサイズの小さいコマンドデータを受信した場合、ＬＲＯの受信ではセグメンテーション単位で受信データを上位層に送るため、このコマンドの処理は即座に行われないことがある。もしコマンドが印刷中止の指示であっても、受信データが所定のサイズにまで蓄積されるのを待つために動作が大幅に遅れることがあり、その場合には無視できない被害を招くこととなってしまう。なお、特許文献１には緊急フラグを用いて、当該フラグが存在するパケットは蓄積せずそのまま上位層にパケットを渡す機能が記載されているが、これはあくまでも送信側で付与するフラグであり、受信側で迅速な処理を行うには限界があった。
以上の問題に鑑み、本願発明ではＬＲＯ受信処理の利点であるスループットを向上しつつ、上位層たとえばＴＣＰ／ＩＰアプリケーションが求める任意の要求に自在に対応して受信データ処理を行うことができるネットワーク受信装置を提供する。
【課題を解決するための手段】
【０００７】
本発明のネットワーク受信装置は、ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、トランスポート層よりも下位に位置するデータ受信手段であって、前記データ区切り指示手段が指示するデータ区切りイベントを参照し、当該データ区切りイベントが発生していると判断するまでは受信したデータを上位層に送らず蓄積するデータ受信手段とを備えたものである。
【０００８】
本発明の別のネットワーク装置は、ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、トランスポート層よりも下位に位置するデータ受信手段であって、（イ）前記データ区切りイベントが発生した、または（ロ）データ蓄積上限時間に到達した、のいずれかの事象が生じるまでは受信したデータを上位層に送らず蓄積するデータ受信手段とを備えたものである。
【０００９】
本発明のプログラムは、コンピュータを、ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、トランスポート層よりも下位に位置するデータ受信手段であって、前記データ区切り指示手段が指示するデータ区切りイベントを参照し、当該データ区切りイベントが発生していると判断するまでは受信したデータを上位層に送らず蓄積するデータ受信手段として機能させるものである。
【００１０】
本発明の別のプログラムは、コンピュータを、ＴＣＰ／ＩＰアプリケーション層に備えられた、受信データを上位層に送るためのデータ区切りイベントを下位層に指示するデータ区切り指示手段と、トランスポート層よりも下位に位置するデータ受信手段であって、（イ）前記データ区切りイベントが発生した、または（ロ）データ蓄積上限時間に到達した、のいずれかの事象が生じるまでは受信したデータを上位層に送らず蓄積するデータ受信手段として機能させるものである。
【００１１】
本発明においてデータ区切りイベントとは、ＴＣＰ／ＩＰアプリケーションにより指示され、データ受信手段が受信データを上位層に送る判断の基準であるが、単純なイベントに加え、複数のイベントをＡＮＤもしくはＯＲで組み合わせたものも含み、さらにはこれをプログラム化したものも含む概念である。要はデータ受信手段が、データを受信するごとに当該イベントが成立するか否か判定できる事象を意味している。
【発明の効果】
【００１２】
本発明では、上位アプリケーションから、下位の物理層近傍の処理層に対して、データ区切り（これによりデータを上位層に転送することとなる）の判別ルールを予め指示しておく仕組みを設ける。この指示により、ＴＣＰ／ＩＰアプリケーションが意図するまま自在に受信処理を行うことができる。この結果、ＬＲＯ受信処理の利点であるスループットを極力落とすことなく、即時処理が必要なデータは敏速に処理することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】ネットワーク受信装置のブロック図である。
【図２】ネットワーク受信装置の動作フローである。
【図３】セッション管理テーブル例である。
【図４】データ受信手段の挙動である。
【発明を実施するための形態】
【００１４】
以下では図面を参照し本願発明に係る実施例を説明する。
［実施例１］
［ブロック図］
【００１５】
図１は、本願発明にかかるネットワーク受信装置１０１のブロック図である。この図は、ネットワーク受信装置１０１のプロトコルスタックを中心に示したものである。なお、これより説明する処理は、ソフトウェアおよびハードウェアのいずれを用いても実現することが可能である。
【００１６】
ＴＣＰ／ＩＰアプリケーション１０２は、ＴＣＰ／ＩＰプロトコルを使用するアプリケーションであり、ＦＴＰ、ＨＴＴＰおよびＴＥＬＮＥＴなどが一般的には有名である。なお、本願発明で使用するＴＣＰ／ＩＰアプリケーション１０２は、これら従前のプロトコルも含めどのようなものであってもよい。本実施例では、ＴＣＰ／ＩＰアプリケーション１０２は、受信したデータを下位層から上位層へ転送する区切りを下位層（後述するＴＣＰ１１２）に指示するためのデータ区切り指示手段１０３を備え、自身が希望するデータ区切りを指示する。
【００１７】
ＴＣＰ１１２は、テーブル登録手段１０４を備えてセッションを管理する。テーブル登録手段１０４は、ネットワーク受信装置１０１が備えるＲＡＭ（図示せず）などの記憶領域に、ネットワーク受信装置１０１が使用するセッション情報をセッション管理テーブル１０５として登録する手段である。セッション管理テーブルは、具体的には図３に示すテーブル情報であり、セッションごとにソースＩＰアドレス、宛先ＩＰアドレス、ソースポート番号、宛先ポート番号が登録されているが、本実施例ではこれに加えて、ＴＣＰ／ＩＰアプリケーション１０２においてデータ区切り指示手段１０３が指示したデータ区切りイベントが登録される。ソースＩＰアドレスは送信装置側のＩＰアドレスであり、宛先ＩＰアドレスは、ネットワーク受信装置１０１自身のＩＰアドレスである。
【００１８】
データ区切りイベントとは、本発明のポイントとなるものであり、ＴＣＰ／ＩＰアプリケーションが所望するイベントがデータ区切り指示手段１０３から指示されて、これを受けたＴＣＰ１１２がセッションごとにセッション管理テーブル１０５に書き込む。当該イベントは任意であるが、要はそのイベントが発生した場合、ＴＣＰ１１１は、後述するバッファ１０７に格納された受信データをＴＣＰ／ＩＰ層に転送する。（逆に言えば、そのイベントが発生しない限り、下位層で受信したデータは、受信パケットの数の如何にかかわらず、上位層まで転送せず、後述のようにバッファ１０７に蓄積される訳である。）
【００１９】
以下にイベントの例を挙げるが、本発明はこれに限定されるものではない。
（ア）特定サイズのデータを受信（最初に当該特定サイズデータを受信した場合だけでなく、特定サイズのデータを所定回数受信した場合などでもよい）
（イ）特定キャラクタを受信（「CRLF」、印刷区切りを示す「\x1B%-12345X」、あるいはＥＯＦ代替コードとして使用される「\x04」など）
（ウ）レングス情報を解釈しての指定長受信（受信データの先頭４バイトを、後続データの長さＮと解釈し、４＋Ｎバイトのデータ受信により、データ区切りイベント成立とする。）
（エ）ＴＣＰ特定フラグを受信（「OOB」、「FIN」など）
【００２０】
データ区切りイベントは、複数のイベントをＡＮＤまたはＯＲで論理的に組み合わせたものでもよい。
【００２１】
さらには、特定ポート番号において実行されるデータ受信タスク中のサブタスクとしてのマクロプログラムでもよい。以下に例（１）および例（２）として、２つのＴＣＰポートに関連したマクロプログラムのアルゴリズムを例示する。
【００２２】
例（１）ＴＣＰポートＮＯ．８０の場合
モードａ 
CRLFが２つ連続するまでHTTP HEADERを受信する
CONTENT LENGTHの項があったら、LENに設定してモードｂに移行する
モードｂ
指定サイズまたは１６Kbyteごとに受信する
指定サイズは受信ごとに減算し、ゼロになったらモードａに移行する
PUSHは無視する。FINは終了
という２つのモードから構成されるマクロプログラムで、モードａにおいては、連続した２つのCRLFを受信するイベントで上位層にデータを送り、モードｂにおいては、１６KByte受信ごと 又は 指定サイズの受信満了で上位層にデータを送る。
【００２３】
例（２）ＴＣＰポートＮＯ．５１５の場合
モードａ
LFを受信するまでLPDコマンドを受信する
行頭に02または03がある場合はサイズ指定なので解釈してモードｂに移行する
モードｂ
指定サイズまたは１６Kbyteごとに受信する
指定サイズは受信ごとに減算し、ゼロになったら モードａに移行する
PUSHは無視する。FINは終了
という２つのモードから構成されるマクロプログラムで、モードａにおいては、LFを受信したイベントで上位層にデータを送り、モードｂにおいては、１６KByte受信ごと 又は 指定サイズ受信満了で、上位層にデータを送る。
この様なマクロプログラムで受信データを上位層に送るか否かの判断を行うことにより、ＴＣＰ／ＩＰアプリケーションが求める厳密な要求に正確に呼応して受信データを送ることが可能となる。
【００２４】
図１に戻り、ネットワークＩ／Ｆ１０８、ＬＡＮコントローラドライバ１０９、データリンク１１０、ＩＰ１１１は、一般的なネットワーク機器におけるものと同様であるため説明を省略する。図１に示す通り、受信データはネットワークＩ／Ｆ１０８を通じてプロトコルスタックを順に上方へと進み、最終的にＴＣＰ／ＩＰアプリケーション１０２に送られる。
【００２５】
データ受信手段１０６は、ＬＡＮコントローラドライバ１０９とデータリンク１１０の間に位置する手段である。本願発明において、データ受信手段１０６はいわゆるＬＲＯ処理を実行するエンジン部分であるため、プロトコルスタック上ではデータリンク１１０の直下に位置している。なお、データ受信手段１０６が位置する階層は、上記したものだけでなく、少なくともトランスポート層（図ではＴＣＰ１１２）よりも下位であればよい。
これは、本願発明が、ＴＣＰ１１２が用いるセッション情報を用いて受信データを管理するためである。
【００２６】
データ受信手段１０６は、ＬＡＮコントローラドライバ１０９より送られた受信データを上位層であるデータリンクに１１０に送るかどうかを判定する手段である。具体的には、データを受信すると、セッション管理テーブル１０５を参照して、当該セッションに対してＴＣＰ／ＩＰアプリケーションが指示した所定イベントが生じているかどうかを判定する。指示されたイベントが発生していないと判定すると、今受信したデータをバッファ１０７に格納する。一方、指示されたイベントが発生していれば、バッファ１０７に格納された受信データを読み出し、受信したデータと結合したうえでデータリンク１１０に送る。
【００２７】
図３に示したセッション管理テーブルでは、データ区切りイベント欄がイベントコードとイベントパラメータから記載されている。イベントコードは、上述したイベントの種類を示し、イベントパラメータはそのイベントにおけるパラメータである。例えば、イベントコードが「１」はデータサイズ、「２」はキャラクタ、「３」はＴＣＰ特定フラグといった具合である。図３のセッション番号１では、データ区切りイベントが1-32000、とあるのは３２０００バイトのデータを受信するイベントであることを示し、セッション番号２で2-CRLFとあるのはCRLFのキャラクタを受信するイベントであることを意味している。ＴＣＰ／ＩＰアプリケーションが所望するデータサイズが３２０００バイトであるセッション番号１では、受信データが３２０００バイトに達するまでバッファ１０７への保存が繰り返され、所望データが蓄積された後データリンク１１０に送られる。一方、セッション番号２では、データサイズに依らずCRLFコードを受信するまでは受信されたデータはバッファ１０７へ保存され、CRLFキャラクタを受信すると、バッファに保存された受信データがデータリンク１１０に送られる。
【００２８】
さらには、前述した様なマクロプログラムを利用する場合は、セッション管理テーブルのデータ区切りイベント欄には、イベントコードとしてＰ、イベントパラメータとして実行するプログラム名を記しておく。
［フロー］
【００２９】
図２はネットワーク受信装置１０１の動作フローである。図２に示す通り、ネットワーク受信装置１０１はテーブル登録タスクとデータ受信タスクの２つのタスクから構成されている。なお、それぞれのタスクは前述した各手段が実行する。具体的には、テーブル登録タスクはテーブル登録手段１０４が、データ受信タスクはデータ受信手段１０６が実行する。
【００３０】
まずはテーブル登録タスクについて説明する。ステップ２０１にて、ＴＣＰ／ＩＰアプリケーション１０２にてデータ受信要求が発生したかどうかを判定する。発生していなければ、発生するまで判定し続け、発生していれば処理がステップ２０２に進む。ステップ２０２にて、発生したデータ受信要求に含まれるデータ区切りに関する指示（データ区切りイベント）を認定する。ステップ２０３にて、受信要求の発生したセッションを認定する。具体的には、ソースＩＰアドレス、宛先ＩＰアドレス、ソースポート番号および宛先ポート番号である。ステップ２０４にて、セッション情報とデータ区切りイベントをセットにして、セッション管理テーブル１０５に登録する。
【００３１】
次いでデータ受信タスクについて説明する。ステップ２５１にて、データ受信があるかどうかを判定し、データを受信していなければデータ受信を検出し続け、受信していれば処理がステップ２５２に進む。ステップ２５２にて、受信データのセッションを認定する。これは上述したようにソースＩＰアドレスなどの情報である。ステップ２５３にて、受信したデータのサイズを認定する。（もちろん、指示されたデータ区切りイベントにおいてサイズを特定する要素がなければ、ステップ２５３は省略できる）。ステップ２５４にて、セッション管理テーブル１０５を参照し、該当するセッションのデータ区切りイベントが発生しているかどうかを判定する。イベントが発生していなければ、ステップ２５５にて、受信したデータをバッファ１０７に保存する。一方、ステップ２５４にてデータ区切りイベントが発生していれば、受信データを上位層、本実施例ではデータリンク１１０に送る。もちろん、バッファに１０７に保存されている受信データがあれば、これを読み出し、受信したデータと結合したうえで送る。なお、図示していないが、この時点でテーブルに登録されているセッション情報を削除してもよい。
［その他の実施形態］
【００３２】
先の実施例では、テーブル登録手段１０４がＴＣＰ１１２に存在したが、ＴＣＰ／ＩＰアプリケーション１０２の側に存在してもよい。この場合、通常のＴＣＰ／ＩＰアプリケーション１０２にテーブル登録手段１０４を組み込めばよい。
【００３３】
テーブルに登録されたデータ区切りイベントが発生していない場合でも、セッションにおいてデータの受信を開始して一定時間（データ蓄積上限時間）を経過した場合には、受信データを強制的に上位層に送るようにしてもよい。これは、通信経路の途中においてデータのロストが発生するなど、データ区切りイベントの発生条件が遅延し、受信したデータがいつまでも上位層に転送されない状況を防ぐためである。データ蓄積上限時間は、ユーザが初期設定において設定するパラメータである。図４は、「データ区切りイベント発生」と「データ蓄積上限時間の到来」のそれぞれのケースにおいて、データ受信手段１０６が、受信データを上位層に送るかどうかを示す表である。図からわかるとおり、「データを受信した際、ＴＣＰ／ＩＰアプリケーションが指示するデータ区切りイベントが発生する」、または「データ蓄積上限時間に到達する」の少なくとも一方が満たされれば、受信データを上位層に送る。
【００３４】
さらに先の実施例では、セッションごとにデータ区切りイベントを定義し、セッション管理テーブルで管理する例を挙げたが、ＴＣＰ／ＩＰアプリケーションが下位層に対して予めポート番号ごとに異なるイベントを定義し指示しておくことも可能である。これにより、セッションごとに管理を行うことを省略できる。
［まとめ］
【００３５】
本願発明では、セッションまたはポートごとにＴＣＰ／ＩＰアプリケーションが要求するデータ区切り条件を保持するテーブルを設け、データ受信手段は、当該テーブルに登録されている当該条件に基づいて上位層に受信データを送る。これにより、ＬＲＯ受信処理の利点であるスループットの向上とともに、ＴＣＰ／ＩＰアプリケーションが求める条件に応じて自在に受信処理を行うことができるという効果を奏する。
【符号の説明】
【００３６】
１０３  データ区切り指示手段
１０４  テーブル登録手段
１０５  セッション管理テーブル
１０６  データ受信手段
１０７  バッファ
【図１】
0005994067.tif 000002
【図２】
0005994067.tif 000003
【図３】
0005994067.tif 000004
【図４】
0005994067.tif 000005