(57)【要約】【課題】プロセッサの処理負担を軽減させる。【解決手段】通信データに対してプロトコル解析処理を行う、ハードウェア結線された回路であるプロトコル処理回路と、通信データに対してプロトコル解析処理を行うプロトコル処理部と、複数のネットワークデバイスに対して、通信データの通信制御を行うインターフェースオブジェクトと、各ネットワークデバイスの通信量に基づいて、ネットワークデバイス毎に、通信データを、プロトコル処理回路でプロトコル解析処理を行わせるか否か判断するパケット判断部と、プロトコル処理回路でプロトコル解析処理を行わせると判断された場合、通信データをプロトコル処理回路に受け渡す下位ハードウェアプロトコル層受渡部と、プロトコル処理回路でプロトコル解析処理を行わせないと判断された場合、通信データをプロトコル処理部に受け渡す下位プロトコル層受渡部と、を備える。【選択図】        図２
2009055133.tif 000002
【特許請求の範囲】
【請求項１】
通信データに対してプロトコル解析処理を行う、ハードウェア結線された回路であるハードウェアプロトコル処理部と、
通信データに対してプロトコル解析処理を行う、ソフトウェアで実現されたプロトコル処理部と、
外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御部と、
各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断部と、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡部と、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡部と、
を備えることを特徴とする通信制御装置。
【請求項２】
前記ネットワークデバイス毎に通信制御された前記通信データ量を記憶するデータ量記憶部と、
前記ネットワークデバイスで前記通信データの通信制御が行われる毎に、前記データ量記憶部の前記通信データ量を更新する更新部と、をさらに備え、
前記判断部は、前記データ量記憶部に記憶される前記ネットワークデバイス毎の前記通信データ量に基づいて、複数の前記ネットワークデバイスのうち、いずれの前記ネットワークデバイスが通信制御する通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか判断すること、
を特徴とする請求項１に記載の通信制御装置。
【請求項３】
前記判断部は、前記データ量記憶部に記憶される前記通信データ量が所定時間内で最も多い前記ネットワークデバイスが通信制御する通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断すること、
を特徴とする請求項２に記載の通信制御装置。
【請求項４】
前記判断部は、所定時間毎に、前記ネットワークデバイス毎に当該ネットワークデバイスで通信制御される通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断すること、
を特徴とする請求項１乃至３のいずれか一つに記載の通信制御装置。
【請求項５】
前記通信制御部が通信制御する前記通信データのパケット毎に、通信制御された順序を示す番号を割り当てる番号割当部と、
前記プロトコル処理部でプロトコル解析処理が行われた後の前記通信データの前記パケット、及び前記ハードウェアプロトコル処理部でプロトコル解析処理が行われた後の前記通信データの前記パケットのうちいずれか一つ以上を蓄積する蓄積部と、
前記蓄積部に蓄積された前記通信データを、前記通信データのパケットに割り当てられた前記番号に従って出力する出力部と、
を備えることを特徴とする請求項１乃至４のいずれか一つに記載の通信制御装置。
【請求項６】
前記判断部は、さらに、所定のプロトコル以外のプロトコルによる通信データについては、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断すること、
を特徴とする請求項１乃至５のいずれか一つに記載の通信制御装置。
【請求項７】
前記所定のプロトコルは、ＴＣＰ、ＵＤＰ、ＩＰ及びＩＣＭＰのうちいずれか一つ以上であることを特徴とする請求項６に記載の通信制御装置。
【請求項８】
前記判断部により、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された前記通信データを送受信する前記ネットワークデバイスを指し示す指示情報を記憶するハードウェア管理記憶部と、
前記通信データを送受信する前記ネットワークデバイスを指し示す前記指示情報が前記ハードウェア管理記憶部に記憶されているか否かに基づいて、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する処理先判断部と、
をさらに備えることを特徴とする請求項１乃至７のいずれか一つに記載の通信制御装置。
【請求項９】
外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御ステップと、
各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、ハードウェア結線された回路であるハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断ステップと、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡ステップと、
前記ハードウェア受け渡しステップにより受け渡された前記通信データに対して、前記ハードウェアプロトコル処理部でプロトコル解析処理を行うハードウェアプロトコル処理ステップと、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡ステップと、
前記ソフトウェア受渡ステップにより受け渡された前記通信データに対してプロトコル解析処理を行うプロトコル処理ステップと、
を有することを特徴とする通信制御方法。
【請求項１０】
前記ネットワークデバイス毎に通信制御された前記通信データ量をデータ量記憶部に記憶するデータ量記憶ステップと、
前記ネットワークデバイスで前記通信データの通信制御が行われる毎に、前記データ量記憶部の前記通信データ量を更新する更新ステップと、をさらに有し、
前記判断ステップは、前記データ量記憶部に記憶される前記ネットワークデバイス毎の前記通信データ量に基づいて、複数の前記ネットワークデバイスのうち、いずれの前記ネットワークデバイスが通信制御する通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか判断すること、
を特徴とする請求項９に記載の通信制御方法。
【請求項１１】
前記判断ステップは、前記データ量記憶部に記憶される前記通信データ量が所定時間内で最も多い前記ネットワークデバイスが通信制御する通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断すること、
を特徴とする請求項１０に記載の通信制御方法。
【請求項１２】
前記判断ステップは、所定時間毎に、前記ネットワークデバイス毎に当該ネットワークデバイスで通信制御される通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断すること、
を特徴とする請求項９乃至１１のいずれか一つに記載の通信制御方法。
【請求項１３】
前記通信制御部が通信制御する前記通信データのパケット毎に、通信制御された順序を示す番号を割り当てる番号割当ステップと、
前記プロトコル処理ステップでプロトコル解析処理が行われた後の前記通信データの前記パケット、及び前記ハードウェアプロトコル処理ステップでプロトコル解析処理が行われた後の前記通信データの前記パケットのうちいずれか一つ以上を蓄積する蓄積ステップと、
前記蓄積ステップに蓄積された前記通信データを、前記通信データのパケットに割り当てられた前記番号に従って出力する出力ステップと、
を有することを特徴とする請求項９乃至１２のいずれか一つに記載の通信制御方法。
【請求項１４】
前記判断ステップは、さらに、所定のプロトコル以外のプロトコルによる通信データについては、前記ハードウェアプロトコル制御ステップでプロトコル解析処理を行わせないと判断すること、
を特徴とする請求項９乃至１３のいずれか一つに記載の通信制御方法。
【請求項１５】
前記所定のプロトコルは、ＴＣＰ、ＵＤＰ、ＩＰ及びＩＣＭＰのうちいずれか一つ以上であることを特徴とする請求項１４に記載の通信制御方法。
【請求項１６】
前記判断ステップにより、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された前記通信データを送受信する前記ネットワークデバイスを指し示す指示情報をハードウェア管理記憶部に記憶するハードウェア管理記憶ステップと、
前記通信データを送受信する前記ネットワークデバイスを指し示す前記指示情報が前記ハードウェア管理記憶部に記憶されているか否かに基づいて、前記ハードウェアプロトコル制御ステップでプロトコル解析処理を行わせるか否か判断する処理先判断ステップと、
をさらに有することを特徴とする請求項９乃至１５のいずれか一つに記載の通信制御方法。
【請求項１７】
外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御ステップと、
各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、ハードウェア結線された回路であるハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断ステップと、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡ステップと、
前記ハードウェア受け渡しステップにより受け渡された前記通信データに対して、前記ハードウェアプロトコル処理部でプロトコル解析処理を行うハードウェアプロトコル処理ステップと、
前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡ステップと、
前記ソフトウェア受渡ステップにより受け渡された前記通信データに対してプロトコル解析処理を行うプロトコル処理ステップと、
をコンピュータに実行させることを特徴とする通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア結線された回路で通信制御を行う通信制御装置、通信制御方法及び通信制御プログラムに関するものである。
【背景技術】
【０００２】
従来から、インターネットを含むネットワーク環境において、ネットワークのハイスピード化及び複雑化が進む傾向にある。このような傾向になるに従い、当該ネットワーク環境で使用されるネットワークサーバでは、本来目的とするデータ処理以外に、ネットワーク経由のデータを送受信するための処理が多くなり、処理負担が大きくなる傾向にある。
【０００３】
近年、このネットワークサーバにおけるネットワーク処理の負荷低減するために、ＴＯＥ（ＴＣＰ／ＩＰオフロードエンジン）という技術が提案されている。このＴＯＥという技術とは、ＣＰＵに対して高い負荷をかけるネットワークプロトコル処理及びネットワークプロトコルのチェックサム処理等をハードウェア化するものである。そして、当該ハードウェアがネットワーク処理の一部又は全部を行うことで、ネットワークサーバのＣＰＵの負荷を低減するものである。
【０００４】
例えば、特許文献１に記載された技術では、ユーザからの要求を処理するホストプロセッサの他に、ＴＣＰプロトコル処理をオフロード可能とするプロセッサを備えたサーバ装置が提案されている。
【０００５】
このようにＴＯＥを用いてハードウェア化を行った場合、ネットワークの階層モデルは、層は図２３に示すような構造となる。図２３に示すように、ソケット層より下は、ハードウェアにより実現された一つの層となっている。
【０００６】
このようなＴＯＥの技術は、通信を行うためのインターフェースからソケットより下の階層までをハードウェア化しているために、プロトコルの処理を行う場合には、ハードウェアオフロードにより、ＣＰＵの処理負担を軽減させることができる。
【０００７】
【特許文献１】特開２００５−３１６６２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、現在のＰＣアーキテクチャにおいて、ネットワークを通信するために使用するネットワークインターフェースは一つだけではない。例えば、ＵＳＢ等を介して外部装置やネットワークに接続することも考えられている。
【０００９】
このような現在のＰＣアーキテクチャでは、ネットワークの階層毎に役割を定めることで、様々なネットワークインターフェースに対して適切な通信パケットを割り当てることを可能としている。
【００１０】
つまり、ＴＯＥを使用した装置では、ソケット層より下の階層が一体化されているためにＴＯＥ内部のネットワークデバイスで通信制御する場合にしかＣＰＵの処理負担を軽減できないという問題がある。
【００１１】
本発明は、上記に鑑みてなされたものであって、適切にプロセッサの処理負担を軽減させることができる通信制御装置、通信制御方法及び通信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明にかかる通信制御装置は、通信データに対してプロトコル解析処理を行う、ハードウェア結線された回路であるハードウェアプロトコル処理部と、通信データに対してプロトコル解析処理を行う、ソフトウェアで実現されたプロトコル処理部と、外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御部と、各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断部と、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡部と、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡部と、を備えることを特徴とする。
【００１３】
また、本発明にかかる通信制御方法は、外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御ステップと、各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、ハードウェア結線された回路であるハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断ステップと、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡ステップと、前記ハードウェア受け渡しステップにより受け渡された前記通信データに対して、前記ハードウェアプロトコル処理部でプロトコル解析処理を行うハードウェアプロトコル処理ステップと、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡ステップと、前記ソフトウェア受渡ステップにより受け渡された前記通信データに対してプロトコル解析処理を行うプロトコル処理ステップと、を有することを特徴とする。
【００１４】
また、本発明にかかる通信制御プログラムは、外部のネットワークと接続する複数のネットワークデバイスに対して、通信データの通信制御を行う通信制御ステップと、各前記ネットワークデバイスの通信量に基づいて、前記ネットワークデバイス毎に、当該ネットワークデバイスで通信制御される通信データを、ハードウェア結線された回路であるハードウェアプロトコル制御部でプロトコル解析処理を行わせるか否か判断する判断ステップと、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせると判断された場合に、前記通信データを前記ハードウェアプロトコル処理部に受け渡すハードウェア受渡ステップと、前記ハードウェア受け渡しステップにより受け渡された前記通信データに対して、前記ハードウェアプロトコル処理部でプロトコル解析処理を行うハードウェアプロトコル処理ステップと、前記ハードウェアプロトコル制御部でプロトコル解析処理を行わせないと判断された場合に、前記通信データを前記プロトコル処理部に受け渡すソフトウェア受渡ステップと、前記ソフトウェア受渡ステップにより受け渡された前記通信データに対してプロトコル解析処理を行うプロトコル処理ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、ネットワークデバイスの通信量に基づいて、通信データのプロトコル解析処理を、ハードウェアプロトコル処理部又はプロトコル処理部に行わせるか判断することで、効率的にプロセッサの処理負担を軽減させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１６】
以下に添付図面を参照して、この発明にかかる通信制御装置、通信制御方法及び通信制御プログラムの最良な実施の形態を詳細に説明する。なお、以下に示す実施の形態では通信制御装置を情報処理装置に適用した例について説明する。
【００１７】
図１は、実施の形態にかかる情報処理装置１００のハードウェア構成を示した図である。図１に示すように情報処理装置１００は、ＣＰＵ１０１と、プロトコル処理回路１０２と、プロトコル処理回路１０２をバスに接続するアービタ１０３と、ＲＡＭ１０４と、ＲＯＭ１０５と、有線ＬＡＮ１０６と、シリアル回線１０７と、無線ＬＡＮ１０８と、ＵＳＢ１０９とを備えており、通常のコンピュータにプロトコル処理回路１０２を接続したハードウェア構成となっている。
【００１８】
そして、ＲＯＭ１０５に格納されたプログラムが、ＲＡＭ１０４上にロードされる。そして、ＣＰＵ１０１がロードされたプログラムを用いて処理を行うことになる。
【００１９】
このＣＰＵ１０１は、当該プログラムを用いて、有線ＬＡＮ１０６、シリアル回線１０７、無線ＬＡＮ１０８及びＵＳＢ１０９を使用した通信制御を行う。
【００２０】
プロトコル処理回路１０２に用いられている技術は、ＣＰＵ１０１に対して高い負荷をかけるネットワークプロトコル処理及びネットワークプロトコルのチェックサム処理等をハードウェア化するものである。そして、当該ハードウェアがネットワーク処理の一部又は全部を行うことで、ＣＰＵ１０１の負荷を低減する。
【００２１】
また、プロトコル処理回路１０２は、現在提案されているＴＯＥのハードウェア回路を適用し、ＴＣＰ／ＵＤＰ／ＩＣＭＰ／ＩＰのプロトコルについて、ＣＰＵに対して高い負荷をかけるネットワークプロトコル処理及びネットワークプロトコルのチェックサム処理等をハードウェア回路で処理する。
【００２２】
また、プロトコル処理回路１０２は、アービタ１０３を介してバスに接続され、有線ＬＡＮ１０６、シリアル回線１０７、無線ＬＡＮ１０８等のネットワークデバイスで、受信したデータをハードウェアで所定のプロトコルの解析をした後、例えばＲＡＭ１０４に格納する。また、プロトコル処理回路１０２は、上述したネットワークデバイスのうちも最もデータ送受信量が多いネットワークデバイスに対して、割り当てられる。
【００２３】
アービタ１０３は、当該割り当てられたネットワークデバイスと、プロトコル処理回路１０２との間の通信を制御する。これにより、最もデータ送受信量が多いネットワークデバイスの処理をプロトコル処理回路１０２で行われるため、ＣＰＵ１０１の処理負担を軽減させることができる。
【００２４】
次に情報処理装置１００のソフトウェア構成について説明する。図２は情報処理装置１００のネットワークをレイヤー構造で示した図である。図２に示すように、情報処理装置１００は、ユーザプログラム層２０１、ソケット層２０２、プロトコル上位層２０３と、プロトコル層２０４と、ハードウェアプロトコル層２０５と、プロトコル下位層２０６と、インターフェース層２０７と、ネットワークデバイス２０８とを備えている。
【００２５】
情報処理装置１００では、ソケット層２０２、プロトコル層２０４、インターフェース層２０７について、従来から使用されているものをほぼ流用可能とする。これにより、広範に普及しているＯＳのカーネルに実装されたネットワーク処理を可能とする。そして、情報処理装置１００では、新規にプロトコル上位層２０３、ハードウェアプロトコル層２０５、プロトコル下位層２０６を追加することで、従来のソフトウェアによるネットワーク処理と、ハードウェアプロトコル層２０５によるハードウェアオフロードとの共存を可能としている。
【００２６】
ネットワークデバイス２０８は、ネットワークデバイス２６２ａ〜ｃを備え、外部のネットワークと送受信する。受信したデータは、インターフェース層２０７のインターフェースオブジェクト２６１ａ〜ｃに受け渡される。
【００２７】
インターフェース層２０７は、下位のネットワークデバイス２０８と、プロトコル下位層２０６との間に存在する層である。インターフェース層２０７は、ネットワークデバイス２０８が備えているハードウェアを抽象化することで、具体的なハードウェアを隠蔽し、ハードウェア毎にＡＰＩを提供する。
【００２８】
また、インターフェース層２０７は、インターフェースオブジェクト２６１ａ〜ｃを備えている。当該インターフェースオブジェクト２６１ａ〜ｃは、物理的なネットワークデバイス毎に１対1に割り当てられているメモリオブジェクトである。また、インターフェースオブジェクト２６１ａ〜ｃは、当該ネットワークデバイスのハードウェア情報、アクセス先のアドレス情報及び当該ネットワークデバイスにアクセスするためのインターフェースを備えている。これにより、当該インターフェースオブジェクト２６１ａ〜ｃを操作することで、割り当てられたネットワークデバイスを制御することができる。
【００２９】
図３は、インターフェースクラスのクラス構造を示した図である。図３に示すように、インターフェースクラスは、属性としてアドレス情報と、ハードウェア情報と、を備えている。このアドレス情報には、対応付けられたネットワークデバイスで送受信を行うＩＰアドレスを格納する。また、ハードウェア情報には、割り当てられたネットワークデバイスに関する情報を格納する。また、これら属性は、図３の属性の左側に「＋」記号が付されていることから把握できるように、外部に対して公開されている。また、他の操作も「＋」記号が付されている場合は同様に外部に対して公開されている。
【００３０】
また、インターフェースクラスは、操作としてハードウェア、ドライバに対するアクセス制御（）とプロトコル層から送信データを、ネットワークデバイスへの引き渡し制御（）とを備えている。これら操作により、ネットワークデバイスを使用することができる。
【００３１】
これらインターフェースクラスを実体化することで、インターフェースオブジェクト２６１ａ〜ｃが生成され、上述した属性、操作を使用することができる。また、インターフェースオブジェクト２６１ａ〜ｃも同様に、起動時の自動検出に伴い生成される。
【００３２】
プロトコル下位層２０６は、プロトコル判別部２４１と、送信先取得部２４２と、インターフェース管理テーブル２４３と、下位プロトコル層受渡部２４４と、ハードウェアインターフェース管理テーブル２４５と、処理先判断部２４６と、下位ハードウェアプロトコル層受渡部２４７と、下位データ順序保証部２４８と、通信履歴格納部２５１と、エントリ制御部２５５と、再送要求部２５６と、履歴更新部２５７と、履歴判断部２５８と、検索部２５９と、パケット判断部２６０と、下位番号割当部２６３と、を備える。
【００３３】
インターフェース管理テーブル２４３は、インターフェースオブジェクト２６１ａ〜ｃのポインタが格納されている。このインターフェース管理テーブル２４３は、プロトコル層２０４、プロトコル下位層２０６及びインターフェース層２０７から参照可能にする。
【００３４】
図４は、インターフェース管理テーブル２４３とインターフェースオブジェクトとの関連を示した説明図である。図４に示すように、インターフェース管理テーブル２４３に登録されたオブジェクトのポインタを参照することで、インターフェースオブジェクトを特定できる。さらに、インターフェースオブジェクトが生成、削除が行われる度に、インターフェース層２０７はインターフェース管理テーブル２４３のレコードの登録、削除を行う。
【００３５】
このように、インターフェース管理テーブル２４３に格納されたポインタを参照することで、ネットワークデバイス２６２ａ〜ｃを指し示すインターフェースオブジェクト２６１ａ〜ｃにアクセスできる。これにより、ネットワークデバイス２０８が備えるネットワークデバイスの情報を参照することができる。
【００３６】
ハードウェアインターフェース管理テーブル２４５は、プロトコル処理回路１０２でプロトコル処理するように割り当てられたネットワークデバイスのインターフェースオブジェクトのポインタが格納されている。このハードウェアインターフェース管理テーブル２４５は、プロトコル上位層２０３及びプロトコル下位層２０６から参照可能にする。そして、ハードウェアインターフェース管理テーブル２４５を参照することで、ハードウェアプロトコル層２０５でプロトコル処理すべきインターフェースオブジェクトにアクセスできる。
【００３７】
図５は、インターフェース管理テーブル２４３、ハードウェアインターフェース管理テーブル２４５及びインターフェースオブジェクトとの関連を示した説明図である。図５に示すように、インターフェースオブジェクトが生成された場合インターフェース管理テーブル２４３に登録される。そして、所定のネットワークデバイスに対してプロトコル処理回路２３２が割り当てられる場合に、当該ネットワークデバイスを指し示す当該インターフェースオブジェクトのポインタがハードウェアインターフェース管理テーブル２４５に登録される。そして、当該ネットワークデバイスについてプロトコル処理回路２３２が割り当てを終了する場合に、当該ネットワークデバイスを指し示す当該インターフェースオブジェクトのポインタがハードウェアインターフェース管理テーブル２４５から削除される。なお、このような登録、削除は、パケット判断部２６０が行う。
【００３８】
通信履歴格納部２５１は、通信記録テーブル２５２と、デバイス毎送信パケット数２５３と、デバイス毎受信パケット数２５４とを備える。図６は、通信記録テーブル２５２のテーブル構造を示した図である。図６に示すように通信記録テーブル２５２は、アドレスと、ポート番号と、ＴＣＰシーケンス番号と、ハードウェア使用中フラグとを対応付けて記憶している。この各レコードは、データの送受信が開始された場合に、エントリ制御部２５５によりエントリされる。そして、各エントリを参照することで、エントリ内に格納されているアドレスと通信しているポート番号が認識できると共に、当該ポート番号で受信したパケットのＴＣＰシーケンス番号を確認できる。さらに、ハードウェア使用中フラグは、プロトコル処理回路２３２を使用しているか否かを保持する。
【００３９】
デバイス毎送信パケット数２５３は、ネットワークデバイス２６２ａ〜ｃ毎に送信したパケット数を保持する。デバイス毎受信パケット数２５４は、ネットワークデバイス２６２ａ〜ｃ毎に受信したパケット数を保持する。
【００４０】
通信履歴格納部２５１は、上述したテーブルを備えることで、ＴＣＰのような再送制御を行なうプロトコルを必要とする通信データを、プロトコル層２０４及びハードウェアプロトコル層２０５のいずれにプロトコル処理を行わせるのか決定することができる。また、これら送受信したパケット数に基づいて、プロトコル層２０４及びハードウェアプロトコル層２０５のいずれにプロトコル処理を行わせるのか切り替えることができる。
【００４１】
エントリ制御部２５５は、通信記録テーブル２５２のエントリの制御を行う。例えば、エントリ制御部２５５は、あるポート番号から任意のアドレスに対して送受信が開始された場合に、当該ポート番号及びアドレスを格納するエントリを追加し、送受信が終了した場合には当該エントリの削除を行う。
【００４２】
履歴更新部２５７は、情報処理装置１００の送受信状況に応じて、通信記録テーブル２５２、デバイス毎送信パケット数２５３デバイス毎受信パケット数２５４を更新する。
【００４３】
具体的な例としては、履歴更新部２５７は、ネットワークデバイス２６２ａ〜ｃでパケットを受信した場合に、デバイス毎受信パケット数２５４内の当該ネットワークデバイスの受信パケット数に‘１’追加する。他には履歴更新部２５７は、ネットワークデバイス２６２ａ〜ｃでパケットを送信した場合に、デバイス毎送信パケット数２５３内の当該ネットワークデバイスの送信パケット数に‘１’追加する。
【００４４】
また、履歴更新部２５７は、ＴＣＰパケットのプロトコル処理先を、プロトコル層２０４及びハードウェアプロトコル層２０５のいずれかに切り替えた場合、通信記録テーブル２５２のハードウェア使用中フラグを更新する。
【００４５】
履歴判断部２５８は、シーケンシャルな番号が付されたＴＣＰパケットをネットワークデバイス２６２ａ〜ｃが受信した場合に、通信記録テーブルに格納された当該シーケンシャルな番号と、受信したＴＣＰのパケットに割り当てられた番号とを比較して、正常に受信しているか否か判断する。正常に受信していないと判断された場合、再送要求部２５６による再送要求などを行う。
【００４６】
パケット判断部２６０は、一定時間毎にデバイス毎送信パケット数２５３及びデバイス毎受信パケット数２５４を監視し、一定時間内で受信パケット数と送信パケット数との合計が所定の量以上又は最も多いネットワークデバイス２６２ａ〜ｃを判断し、当該ネットワークデバイスにプロトコル処理回路２３２を割り当てるように、ハードウェアインターフェース管理テーブル２４５を更新する。具体的には、受信パケット数と送信パケット数との合計が所定の量以上又は最も多いと判断されたネットワークデバイスのインターフェースオブジェクトのポインタを、ハードウェアインターフェース管理テーブル２４５に登録する。これにより、当該パケットの総受信量が処理の量以上又は最も多いネットワークデバイス２６２ａ〜ｃが送受信するパケットに対して、ハードウェアプロトコル層２０５が利用されることになる。
【００４７】
さらに、パケット判断部２６０は、データ送受信量が所定の量以下に減少したインターフェースオブジェクトのポインタをハードウェアインターフェース管理テーブル２４５から削除する。
【００４８】
検索部２５９は、通信記録テーブル２５２に対して検索を行う。
【００４９】
プロトコル判別部２４１は、受信パケットのプロトコルを判別する。なお、判別手法については、従来と同様の手法とする。
【００５０】
送信先取得部２４２は、プロトコル判別部２４１により判別されたプロトコルがＴＣＰの場合に、送信元アドレス、送信先アドレス、ポート番号を取得する。
【００５１】
図７は、プロトコル層２０４、ハードウェアプロトコル層２０５及びプロトコル下位層２０６で、送受信するデータの概念を示した図である。図７に示すように、連番が割り当てられた送信データ及び受信データを、プロトコル層２０４又はハードウェアプロトコル層２０５、及びプロトコル下位層２０６間で受け渡しが行われる。
【００５２】
また、従来は、プロトコル層がインターフェース層２０７と送受信を行っていたが、本実施の形態にかかる情報処理装置１００では、プロトコル下位層２０６がインターフェース層２０７と送受信を行うように構成された。このため、従来はプロトコル層に備えられていたプロトコル判別部２４１及び送信先取得部２４２は、プロトコル下位層２０６内に備えられることとなった。
【００５３】
処理先判断部２４６は、プロトコル下位層２０６がインターフェースオブジェクト２６１ａ〜ｃから受信データを受け付けた場合に、当該インターフェースオブジェクト２６１ａ〜ｃのポインタが、ハードウェアインターフェース管理テーブル２４５に登録されているか否か判断する。そして、処理先判断部２４６が登録されていると判断した場合には、ハードウェアプロトコル層２０５のプロトコル処理回路２３２でプロトコル解析処理が行われることになる。
【００５４】
下位プロトコル層受渡部２４４は、受信データを受け渡したインターフェースオブジェクト２６１ａ〜ｃのポインタがハードウェアインターフェース管理テーブル２４５に登録されていないと処理先判断部２４６が判断した場合に、当該受信データを受け取り、ハードウェアプロトコル層２０５のプロトコル処理回路２３２に受け渡す。
【００５５】
下位ハードウェアプロトコル層受渡部２４７は、受信データを受け渡したインターフェースオブジェクト２６１ａ〜ｃのポインタがハードウェアインターフェース管理テーブル２４５に登録されていると処理先判断部２４６が判断した場合に、当該受信データを受け取り、プロトコル層２０４のプロトコル処理部２３１に受け渡す。
【００５６】
上述したように一定期間毎にパケット判断部２６０が、プロトコル処理及びプロトコル解析処理を行うプロトコル層２０４及びハードウェアプロトコル層２０５を切り替える。このため、当該切り替えが、データ送受信中に行なわれることがある。プロトコル処理及びプロトコル解析処理を行う層が突然切り替わることを意味し、一定時間に着目すると二つの層で一つのネットワークデバイスに関する処理が行なわれることになる。このため、二つの層で処理を行う場合でも、データの順番について保証する必要がある。
【００５７】
このため、プロトコル下位層２０６及びプロトコル上位層２０３では、この順番の保証を行なう機能を提供する。基本的な仕組みは以下の通りである。
【００５８】
まず、送信データを出力時はプロトコル上位層２０３で各ソケットの送信データ毎に連番を割り当て、プロトコル下位層２０６で当該連番を参照してデータの順序を保証する。
【００５９】
次に、受信データを入力時はプロトコル下位層２０６で各インターフェースオブジェクトの受信データ毎に連番を割り当て、プロトコル上位層２０３で当該連番を参照してデータの順序を保証する。なお、詳細な処理手順については後述する。次に、プロトコル下位層２０６で当該順序の保証に用いる構成について説明する。
【００６０】
下位データ順序保証部２４８は、インターフェースディスパッチャ２４９を備え、プロトコル層２０４及びハードウェアプロトコル層２０５からの送信データを受け取り、これら送信データの順序を保証する。
【００６１】
つまり、送信データを受け取っている最中に、プロトコル処理を行う層が切り替えられた場合、プロトコル層２０４でプロトコル処理されて受け渡される送信データ及び、ハードウェアプロトコル層２０５でプロトコル処理されて受け渡される送信データが、送信順に従っているとは限らない。そこで、下位データ順序保証部２４８において、送信データの順序を保証することとした。
【００６２】
インターフェースディスパッチャ２４９は、データキュー２５０を備える。このデータキュー２５０は、ソケット単位に設けられ、受け取った送信データを一時的に格納する。
【００６３】
そして、インターフェースディスパッチャ２４９は、ソケット単位でデータキュー２５０に格納された送信データに格納された連番を参照して、送信する順番に従って送信データを受け取っているか否か監視を行う。なお、送信データに格納された連番は、プロトコル上位層２０３でシーケンシャルに割り当てられた番号とする。
【００６４】
そして、インターフェースディスパッチャ２４９は、送信する順番に従って送信データを受け取っていることを確認した後、当該送信データを関連付けられているインターフェースオブジェクト２６１ａ〜ｃに受け渡す。
【００６５】
また、インターフェースディスパッチャ２４９は、インターフェース層２０７に新たなインターフェースオブジェクト２６１ａ〜ｃが生成された場合に同時に生成される。このインターフェースディスパッチャ２４９は、インターフェースオブジェクと１対１の関係を有する。そして、インターフェースオブジェクト２６１ａ〜ｃが消去されると、当該インターフェースディスパッチャ２４９も消去される。
【００６６】
図８は、送信データの連番を用いた処理の概念を示した図である。図８に示すように、まずソケット２１２ａから受け取った送信データに対して、プロトコル上位層２０３が、ソケット毎にシーケンシャルな連番を割り当てる。この送信データは、プロトコル層２０４又はハードウェアプロトコル層２０５を通ってプロトコル下位層２０６に出力される。
【００６７】
そして、インターフェースディスパッチャ２４９は、ソケット単位に設けられたデータキュー２５０に送信データを一時的に保存し、連番を確認する。
【００６８】
この際、プロトコル上位層２０３でプロトコル層２０４及びハードウェアプロトコル層２０５への分配に失敗、又はこれら層でのプロトコル処理に失敗した場合、プロトコル上位層２０３がこれら失敗を検出し、プロトコル下位層２０６のソケット毎のインターフェースディスパッチャ２４９に欠番が生じたことを通知する。
【００６９】
インターフェースディスパッチャ２４９は、データキュー２５０に格納された送信データの連番を確認している時に、欠番があることをプロトコル上位層２０３から通知されている場合は、当該欠番を飛ばして確認処理を継続する。
【００７０】
これにより、インターフェースディスパッチャ２４９に受け渡された送信データは、データキューに保存された順に、対応するインターフェースオブジェクトに受け渡される。このインターフェースオブジェクト２６１ａへの受け渡し処理は、既存のプロトコル層で行なわれている処理を流用することとして、説明を省略する。
【００７１】
図２に戻り、下位番号割当部２６３は、受信したデータのパケット毎にシーケンシャルな番号を割り当てる。
【００７２】
再送要求部２５６は、プロトコルがＴＣＰ等で再送処理を必要とする場合に、インターフェースオブジェクト２６１ａ〜ｃを介して、再送要求を行う。なお、再送要求については、従来と同様の処理を行うものとして説明を省略する。次に、情報処理装置１００のネットワークのレイヤー構造の上位階層から順に説明する。
【００７３】
ユーザプログラム層２０１は、利用者が使用可能なネットワークプログラム２１１ａ〜ｃを備える。そして、各ネットワークプログラム２１１ａ〜ｃは、通信を行う際に後述するソケット層２０２に対して、通信処理を要求する。
【００７４】
ソケット層２０２は、ネットワーク接続に関する情報をまとめたディスクリプタ（記述子）であるソケット２１２ａ〜ｃを保持する層である。ソケット層２０２はユーザプログラム層２０１のネットワークプログラム２１１ａ〜ｃに対し、プロトコル上位層２０３へのインターフェースを隠蔽し、ネットワーク接続のサービスのエンドポイントを提供する。
【００７５】
ソケット２１２ａ〜ｃは、ユーザプログラム層２０１のネットワークプログラム２１１ａ〜ｃ毎に一つ以上作成される。また、ソケットは作成される際、通信に用いるプロトコルが設定される。このようにして、ソケット２１２ａ〜ｃは、上述したネットワークプログラム２１１ａ〜ｃとの関連付けと、送受信の対象となるアドレス、送受信に用いるプロトコル情報、送受信するデータに関する情報、送受信に用いるルーティング情報を保持する。そして、ソケット２１２ａ〜ｃは、ネットワークから所定のＩＰアドレスへの送信する指示や、所定のＩＰアドレスからの受信待ちする指示を受け付けた場合に、後述するプロトコル上位層２０３に、当該指示を送信する。そして、送信先のプロトコル上位層２０３からは、各ソケット２１２ａ〜ｃが保持しているプロトコル情報又はＩＰアドレス等を参照可能とする。
【００７６】
なお、このソケット層２０２で使用されるソケットＡＰＩはネットワークプログラミングのデファクトスタンダードとなっており、ＯＳを問わず使用可能である。
【００７７】
プロトコル上位層２０３は、上位プロトコル判断部２２１と、ソケット特定部２２２と、上位プロトコル層受渡部２２３と、上位データ順序保証部２２４と、上位番号割当部２２７と、上位ハードウェアプロトコル層受渡部２２９とを備えると共に、ソケット層２０２に対して既存のＩ／Ｆを保持している。
【００７８】
また、プロトコル上位層２０３は、ソケット層２０２からデータの送信要求が行われた場合に、所定の条件に基づいて、プロトコル層２０４にプロトコル処理を要求する、又はハードウェアプロトコル層２０５にプロトコル処理を要求するかを切り替える。
【００７９】
上位プロトコル判断部２２１は、ソケット２１２ａ〜ｃから送信要求が行われた場合、当該ソケット２１２ａ〜ｃが保持するプロトコル情報から利用するプロトコルを特定した後、特定されたプロトコル及びプロトコル下位層２０６のハードウェアインターフェース管理テーブル２４５から、プロトコル層２０４でプロトコル処理を行うか、ハードウェアプロトコル層２０５でプロトコル処理を行うか判断する。なお、詳細な処理手順については後述する。
【００８０】
上位プロトコル層受渡部２２３は、上位プロトコル判断部２２１がプロトコル層２０４でプロトコル処理を行うと判断した場合、プロトコル層２０４に送信対象であるデータを受け渡すと共に、特定されたプロトコルによる当該データのプロトコル処理を要求する。
【００８１】
上位ハードウェアプロトコル層受渡部２２９は、上位プロトコル判断部２２１がハードウェアプロトコル層２０５でプロトコル処理を行うと判断した場合、ハードウェアプロトコル層２０５に送信対象であるデータを受け渡すと共に、特定されたプロトコルによる当該データのプロトコル処理を要求する。
【００８２】
ソケット特定部２２２は、受信データの送信元アドレス、ソケット２１２ａ〜ｃの送信先アドレスに基づいて、受信データを受け渡すソケット２１２ａ〜ｃを特定する。
【００８３】
図９は、プロトコル層２０４、ハードウェアプロトコル層２０５及びプロトコル上位層２０３で、送受信するデータの概念を示した図である。図９に示すように、連番が割り当てられた送信データ及び受信データを、プロトコル層２０４又はハードウェアプロトコル層２０５、及びプロトコル上位層２０３間で受け渡しが行われる。
【００８４】
また、従来は、プロトコル層がソケット層２０２と送受信を行っていたが、本実施の形態にかかる情報処理装置１００では、プロトコル上位層２０３がソケット層２０２と送受信を行うように構成された。このため、従来はプロトコル層に備えられていたソケット特定部２２２が、プロトコル上位層２０３内に備えられることとなった。
【００８５】
図２に戻り、上位データ順序保証部２２４は、ソケットディスパッチャ２２５を備え、プロトコル層２０４及びハードウェアプロトコル層２０５からの受信データを受け取り、これら受信データの順序を保証する。
【００８６】
つまり、受信データを受け取っている最中に、プロトコル解析処理を行う層が切り替えられた場合、プロトコル層２０４でプロトコル解析処理されて受け渡される受信データ及び、ハードウェアプロトコル層２０５でプロトコル解析処理されて受け渡される受信データが、受信順に従っているとは限らない。そこで、上位データ順序保証部２２４において、受信データの順序を保証することとした。
【００８７】
ソケットディスパッチャ２２５は、データキュー２２６を備える。このデータキュー２２６は、インターフェースオブジェクト単位に設けられ、受け取った受信データを一時的に格納する。
【００８８】
そして、ソケットディスパッチャ２２５は、インターフェースオブジェクト単位でデータキュー２２６に格納された受信データに格納された連番を参照して、受信した順番に従って受信データを受け取っているか否か監視を行う。なお、受信データに格納された連番は、プロトコル下位層２０６でシーケンシャルに割り当てられた番号とする。
【００８９】
そして、ソケットディスパッチャ２２５は、受信した順番に従って受信データを受け取っていることを確認した後、ソケット特定部２２２により特定されたソケット２１２ａ〜ｃに受け渡す。
【００９０】
また、ソケットディスパッチャ２２５は、インターフェース層２０７に新たなインターフェースオブジェクト２６１ａ〜ｃが生成された場合に同時に生成される。このソケットディスパッチャ２２５は、インターフェースオブジェクと１対１の関係を有する。そして、インターフェースオブジェクト２６１ａ〜ｃが消去されると、当該ソケットディスパッチャ２２５も消去される。なお、ソケット特定部２２２の機能を、ソケットディスパッチャ２２５内に備えることにしても良い。
【００９１】
図１０は、受信データの連番を用いた処理の概念を示した図である。図１０に示すように、まずインターフェースオブジェクト２６１ａから受け取った受信データに対して、下位番号割当部２６３が、インターフェースオブジェクト毎にシーケンシャルな連番を割り当てる。この受信データは、プロトコル層２０４又はハードウェアプロトコル層２０５を通ってプロトコル上位層２０３に出力される。
【００９２】
そして、ソケットディスパッチャ２２５は、インターフェースオブジェクト単位に設けられたデータキュー２２６に受信データを一時的に保存し、連番を確認する。
【００９３】
この際、プロトコル下位層２０６でプロトコル層２０４及びハードウェアプロトコル層２０５への分配に失敗、又はこれら層でのプロトコル解析処理に失敗した場合、プロトコル下位層２０６がこれら失敗を検出し、プロトコル上位層２０３のインターフェースオブジェクト毎のソケットディスパッチャ２２５に欠番が生じたことを通知する。
【００９４】
ソケットディスパッチャ２２５は、データキュー２２６に格納された受信データの連番を確認している時に、欠番があることをプロトコル下位層２０６から通知されている場合は、当該欠番を飛ばして確認処理を継続する。
【００９５】
これにより、ソケットディスパッチャ２２５に受け渡された受信データは、データキューに保存された順に、ソケット層２０２の各ソケット２１２ａ〜ｃに受け渡される。このソケット２１２ａ〜ｃへの受け渡し処理は、既存の処理を流用することとして、説明を省略する。
【００９６】
図２に戻り、上位番号割当部２２７は、送信するデータのパケット毎にシーケンシャルな番号を割り当てる。
【００９７】
プロトコル層２０４は、プロトコル処理部２３１を備え、上位に存在するプロトコル上位層２０３とのデータの送受信制御、下位に存在するプロトコル下位層２０６とのデータの送受信制御を行う。
【００９８】
プロトコル処理部２３１は、上位プロトコル層受渡部２２３から受け渡された通信データを送信するためのプロトコル処理を行う。プロトコル処理とは、任意のプロトコルで通信データを送信するために、当該通信データから、当該プロトコルのフォーマットによるパケットを生成する等の処理をいう。
【００９９】
また、プロトコル処理部２３１は、下位プロトコル層受渡部２４４から受け渡された受信データに対してプロトコル解析処理を行う。このプロトコル解析処理とは、当該プロトコルのフォーマットによる受信パケットから、格納されていたデータを取得する等の処理をいう。
【０１００】
また、プロトコル処理部２３１においてプロトコル処理又はプロトコル解析の可能なプロトコルとしては、どのようなプロトコルであっても良く、例えば現在ＮｅｔＢＳＤでサポートされているあらゆるプロトコル等でも良い。
【０１０１】
ハードウェアプロトコル層２０５は、プロトコル処理回路２３２を備え、ハードウェアにより結線した回路で、所定のプロトコルによるプロトコル処理及びプロトコル解析処理を行う。これにより、ハードウェアプロトコル層２０５は、特に処理データ量、スピードが増加傾向にある所定のプロトコル（例えばＴＣＰ／ＩＰ）のハードウェアオフロードを行うことができる。
【０１０２】
プロトコル処理回路２３２は、プロトコル上位層２０３の上位ハードウェアプロトコル層受渡部２２９から受け渡された通信データを、所定のプロトコルによるプロトコル処理を行う。また、プロトコル処理回路２３２は、プロトコル下位層２０６の下位ハードウェアプロトコル層受渡部２４７から受け渡された通信データを、所定のプロトコルによるプロトコル解析処理を行う。また、プロトコル処理回路２３２においてプロトコル処理及びプロトコル解析処理が可能なプロトコルは、ＴＣＰ、ＵＤＰ、ＩＰ及びＩＣＭＰとする。
【０１０３】
本実施の形態にかかる情報処理装置１００では、プロトコル上位層２０３、プロトコル層２０４、ハードウェアプロトコル層２０５、及びプロトコル下位層２０６により、ソケット層２０２及びインターフェース層２０７は完全に分離され、互いに意識することなく処理を行うことができる。
【０１０４】
本実施の形態にかかる情報処理装置１００では、上述したプロトコル上位層２０３及びプロトコル下位層２０６でシーケンシャルな連番を割り当てると共に、上位データ順序保証部２２４及び下位データ順序保証部２４８を備えることで、プロトコル層２０４とハードウェアプロトコル層２０５とが切り替えられた場合でも順序を保証することが可能となる。
【０１０５】
次に、本実施の形態にかかる情報処理装置１００における送信処理について説明する。図１１は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１０６】
まず、ネットワークプログラム２１１ａ〜ｃが、ソケット２１２ａ〜ｃに対して、送信するデータを出力する（ステップＳ１１０１）。次に。ソケット２１２ａ〜ｃが、送信するデータを、プロトコル上位層２０３に出力する（ステップＳ１１０２）。
【０１０７】
そして、プロトコル上位層２０３に送信するデータが入力された場合、プロトコル上位層２０３の上位プロトコル判断部２２１は、当該データの受け渡し先がハードウェアプロトコル層２０５か否か判断する（ステップＳ１１０３）。この判断は、プロトコルがＴＣＰ／ＵＤＰ／ＩＰ／ＩＣＭＰであるか否か、及びデータを送信するネットワークデバイスにプロトコル処理回路２３２が割り当てられているか否かに基づいている。
【０１０８】
上位プロトコル判断部２２１が、受け渡し先がハードウェアプロトコル層２０５と判断した（ステップＳ１１０３：Ｙｅｓ）、上位ハードウェアプロトコル層受渡部２２９が、ハードウェアプロトコル層２０５にデータを受け渡し、ハードウェアプロトコル層２０５が当該データに対してプロトコル処理を行う（ステップＳ１１０４）。
【０１０９】
上位プロトコル判断部２２１が、受け渡し先がハードウェアプロトコル層２０５ではないと判断した場合（ステップＳ１１０３：Ｎｏ）、上位プロトコル層受渡部２２３が、プロトコル層２０４にデータを受け渡し、プロトコル層２０４が当該データに対してプロトコル処理を行う（ステップＳ１１０５）。
【０１１０】
そして、プロトコル処理が終了したデータは、下位データ順序保証部２４８のデータキュー２５０に格納される。そして、送信するデータの順序が正しいことが確認された場合に、送信処理を行うインターフェースオブジェクト２６１ａ〜ｃに受け渡される（ステップＳ１１０６）。なお、受け渡し先のインターフェースオブジェクト２６１ａ〜ｃは、送信先のアドレス情報等により特定される。
【０１１１】
そして、インターフェースオブジェクト２６１ａ〜ｃは、送信するデータが受け渡された場合に、ネットワークデバイス２６２ａ〜ｃを制御して送信処理を行う（ステップＳ１１０７）。
【０１１２】
次に、以上のように構成された本実施の形態にかかるプロトコル上位層２０３における送信データの受け渡すまでの処理について説明する。図１２は、本実施の形態にかかるプロトコル上位層２０３における上述した処理の手順を示すフローチャートである。
【０１１３】
まず、プロトコル上位層２０３は、ソケット層２０２のソケット２１２ａ〜ｃから、プロトコル処理のリクエストを受け付ける（ステップＳ１２０１）。当該処理手順は、図１１のステップＳ１１０３の処理を詳細に説明したものとなる。
【０１１４】
次に、プロトコル上位層２０３は、リクエストを行ったソケット２１２ａ〜ｃが保持するアドレス情報から、使用するプロトコルを決定する（ステップＳ１２０２）。
【０１１５】
そして、プロトコル上位層２０３の上位プロトコル判断部２２１は、決定されたプロトコルが、ＴＣＰ／ＵＤＰ／ＩＣＭＰ／ＩＰであるか否かを判断する（ステップＳ１２０３）。ＴＣＰ／ＵＤＰ／ＩＣＭＰ／ＩＰではないと判断した場合（ステップＳ１２０３：Ｎｏ）、上位プロトコル層受渡部２２３がプロトコル層２０４に対して送信するデータを受け渡すと共に、リクエストに応じた送信指示を行う（ステップＳ１２０４）。
【０１１６】
一方、上位プロトコル判断部２２１が、決定されたプロトコルがＴＣＰ／ＵＤＰ／ＩＣＭＰ／ＩＰであると判断した場合（ステップＳ１２０３：Ｙｅｓ）、プロトコル上位層２０３が送信するデータのパケット毎に連番を付与する（ステップＳ１２０５）。
【０１１７】
次に上位プロトコル判断部２２１は、ハードウェアインターフェース管理テーブル２４５のレコード数だけ、ステップＳ１２０７以降の処理を繰り返す（ステップＳ１２０６）。なお、繰り返しが行われる度に、ステップＳ１２０７で利用されるハードウェアインターフェース管理テーブル２４５のレコードが変更される。
【０１１８】
次に、上位プロトコル判断部２２１は、ハードウェアインターフェース管理テーブル２４５のレコードのポインタで示されたインターフェースオブジェクト２６１ａ〜ｃに登録されたアドレスの数だけ、ステップＳ１２０８以降の処理を繰り返す（ステップＳ１２０７）。なお、繰り返しが行われる度に、ステップＳ１２０８で利用されるインターフェースオブジェクト２６１ａ〜ｃに設定されているＩＰアドレスが変更される。
【０１１９】
そして、上位プロトコル判断部２２１は、リクエストを行ったソケット２１２ａ〜ｃに設定されているＩＰアドレスが、ポインタで示されたインターフェースオブジェクト２６１ａ〜ｃに設定されているＩＰアドレスか否か判断する（ステップＳ１２０８）。
【０１２０】
次に、上位プロトコル判断部２２１は、リクエストを行ったソケット２１２ａ〜ｃに設定されているＩＰアドレスが、ポインタで示されたポインタで示されたインターフェースオブジェクト２６１ａ〜ｃに設定されているＩＰアドレスではないと判断した場合（ステップＳ１２０８：Ｎｏ）、再びステップＳ１２０７から処理を繰り返す。
【０１２１】
そして、ステップＳ１２０７〜ステップＳ１２０１までのループが終了した場合、再びステップＳ１２０６から処理を繰り返す（ステップＳ１２１２）。
【０１２２】
一方、上位プロトコル判断部２２１は、リクエストを行ったソケット２１２ａ〜ｃに設定されているＩＰアドレスが、ポインタで示されたインターフェースオブジェクト２６１ａ〜ｃに設定されているＩＰアドレスだと判断した場合（ステップＳ１２０８：Ｙｅｓ）、上位プロトコル判断部２２１は、データ送信先のＩＰアドレスが、リクエストを出力したソケット２１２ａ〜ｃに設定されたルーティング情報から送信可能か否か判断する（ステップＳ１２０９）。送信できないと判断した場合（ステップＳ１２０９：Ｎｏ）、再びステップＳ１２０７から処理を繰り返す（ステップＳ１２１１）。
【０１２３】
一方、上位プロトコル判断部２２１が送信可能と判断した場合（ステップＳ１２０９：Ｙｅｓ）、上位ハードウェアプロトコル層受渡部２２９は、ハードウェアプロトコル層２０５に対して送信するデータを受け渡すと共に、特定されたネットワークデバイス２６１ａ〜ｃから、入力されたＩＰアドレスにデータを送信するようハードウェアプロトコル層２０５に対して指示する（ステップＳ１２１０）。当該指示により、図１１のステップＳ１１０６以降の処理が行われる。
【０１２４】
また、ステップＳ１２１２までのループ処理が全て終了し、ハードウェアプロトコル層２０５に送信するデータを受け渡せなかった場合、上位プロトコル層受渡部２２３が、プロトコル層２０４に送信するデータを受け渡す（ステップＳ１２１３）。
【０１２５】
次に、ネットワークプログラム２１１ａから送信のリクエストが行われた場合の処理の経路について説明する。図１３は、ネットワークプログラム２１１ａから、ネットワークデバイス２６２ａで送信処理を行うまでの送信するデータの移動経路を示した説明図である。
【０１２６】
まずは、ネットワークプログラム２１１ａから送信するデータの出力が行われたものとする（ステップＳ１３０１）。この場合、ソケット２１２ａが、送信するデータを、プロトコル上位層２０３に出力するが、このときに上位プロトコル判断部２２１が、送信するデータを、プロトコル層２０４又はハードウェアプロトコル層２０５にいずれかに受け渡すべきか判断する。
【０１２７】
そして、プロトコル層２０４に受け渡すと判断された場合、ソケット２１２ａから上位プロトコル層受渡部２２３にデータが受け渡される（ステップＳ１３０２）。
【０１２８】
次に、上位プロトコル層受渡部２２３は、プロトコル層２０４のプロトコル処理部２３１に送信対象であるデータを受け渡すと共に、特定されたプロトコルによる当該データのプロトコル処理を要求する（ステップＳ１３０３）。
【０１２９】
そして、プロトコル処理部２３１でプロトコル処理されたデータは、データキュー２５０に格納される（ステップＳ１３０４）。
【０１３０】
一方、ステップＳ１３０１の後、上位プロトコル判断部２２１が、送信するデータを、ハードウェアプロトコル層２０５に受け渡すと判断した場合、ソケット２１２ａから上位ハードウェアプロトコル層受渡部２２９にデータが受け渡される（ステップＳ１３０５）。
【０１３１】
次に、上位ハードウェアプロトコル層受渡部２２９は、ハードウェアプロトコル層２０５のプロトコル処理回路２３２に送信対象であるデータを受け渡すと共に、特定されたプロトコルによる当該データのプロトコル処理を要求する（ステップＳ１３０６）。
【０１３２】
そして、プロトコル処理回路２３２でプロトコル処理されたデータは、データキュー２５０に格納される（ステップＳ１３０７）。
【０１３３】
次に、データキュー２５０に格納されたデータは、下位データ順序保証部２４８によりデータの順序が保証された後、インターフェースディスパッチャ２４９がインターフェースオブジェクト２６１ａに受け渡す（ステップＳ１３０８）。
【０１３４】
そして、インターフェースオブジェクト２６１ａは、対応付けられているネットワークデバイス２６２ａに送信するデータを出力すると共に、当該ネットワークデバイス２６２ａを制御して送信処理を行う（ステップＳ１３０９）。これにより、当該データが送信されることになる。
【０１３５】
次に、本実施の形態にかかる情報処理装置１００におけるネットワークデバイス２６２ａ〜ｃでデータを受信した場合の処理について説明する。図１４は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１３６】
まず、ネットワークデバイス２６２ａ〜ｃが、データの受信処理を行う（ステップＳ１４０１）。この処理は、インターフェースオブジェクト２６１ａ〜ｃが、ネットワークデバイス２６２ａ〜ｃを制御することで行われる。
【０１３７】
次に、プロトコル下位層２０６の処理先判断部２４６が、受信データの受け渡し先はハードウェアプロトコル層２０５か否か判断する（ステップＳ１４０２）。
【０１３８】
そして、受信データの受け渡し先がハードウェアプロトコル層２０５と判断された場合（ステップＳ１４０２：Ｙｅｓ）、ハードウェアプロトコル層２０５で受信データのプロトコル解析処理を行う（ステップＳ１４０３）。そのあと、ハードウェアプロトコル層２０５は、プロトコル解析処理が終了した受信データを、データキュー２２６に出力する（ステップＳ１４０４）。
【０１３９】
そして、受信データの受け渡し先がハードウェアプロトコル層２０５ではない判断されたと判断された場合（ステップＳ１４０２：Ｎｏ）、プロトコル層２０４で受信データのプロトコル解析処理を行う（ステップＳ１４０５）。そのあと、プロトコル層２０４は、プロトコル解析処理が終了した受信データを、データキュー２２６に出力する（ステップＳ１４０６）。
【０１４０】
次に、データキュー２５０に格納されたデータは、上位データ順序保証部２２４によりデータの順序が保証された後、ソケットディスパッチャ２２５がソケット２１２ａ〜ｃに受け渡す（ステップＳ１４０７）。
【０１４１】
そして、ソケット２１２ａ〜ｃは、ネットワークプログラム２１１ａ〜ｃに受信したデータを出力する（ステップＳ１４０８）。
【０１４２】
上述した処理手順により、ネットワークデバイス２６２ａ〜ｃが受信したデータについて、ハードウェアプロトコル層２０５又はプロトコル層２０４でプロトコル解析処理した後、ネットワークプログラム２１１ａ〜ｃに出力することができる。
【０１４３】
次に、ステップＳ１４０２のプロトコル下位層２０６において受信したデータのプロトコルに応じて受渡先を決定する処理について説明する。図１５は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１４４】
まずは、プロトコル判別部２４１が、受信したデータのプロトコルを判別する。そして、処理先判断部２４６は、判別されたプロトコルがＴＣＰ／ＵＤＰ／ＩＰ／ＩＣＭＰか否か判断する（ステップＳ１５０１）。処理先判断部２４６が、判別されたプロトコルがＴＣＰ／ＵＤＰ／ＩＰ／ＩＣＭＰではないと判断された場合（ステップＳ１５０１：Ｎｏ）、プロトコル層２０４に受信データを受け渡す（ステップＳ１５０２）。
【０１４５】
次に、処理先判断部２４６は、判別されたプロトコルがＴＣＰか否か判断する（ステップＳ１５０３）。プロトコルがＴＣＰではないと判断された場合（ステップＳ１５０３：Ｎｏ）、プロトコル解析処理先としてハードウェアプロトコル層２０５かプロトコル層２０４かを選択し、選択された層に対して受信データを受け渡す（ステップＳ１５０４）。
【０１４６】
次に、処理先判断部２４６は、判別されたプロトコルがＴＣＰであると判断された場合（ステップＳ１５０３：Ｙｅｓ）、検索部２５９が通信記録テーブルから送信元のアドレス、ポート番号のレコードを検索し、当該レコードが検出されたか否か判断する（ステップＳ１５０５）。
【０１４７】
検索部２５９がレコードを検出しなかった場合（ステップＳ１５０５：Ｎｏ）、エントリ制御部２５５が新規ＴＣＰ通信として処理した後、プロトコル解析処理先としてハードウェアプロトコル層２０５かプロトコル層２０４かを選択し、選択された層に対して受信データを受け渡す（ステップＳ１５０６）。
【０１４８】
一方、検索部２５９がレコードを検出した場合（ステップＳ１５０５：Ｙｅｓ）、履歴判断部２５８が、受信したデータに付加されていたシーケンス番号が、当該レコードに格納されているシーケンス番号と同一か否か判断する（ステップＳ１５０７）。
【０１４９】
そして、履歴判断部２５８が同一ではないと判断した場合（ステップＳ１５０７：Ｎｏ）、履歴更新部２５７がＴＣＰ通信の新規シーケンス番号を受信したものとして通信記録テーブル２５２に対して更新処理を行うと共に、プロトコル解析処理先としてハードウェアプロトコル層２０５かプロトコル層２０４かを選択し、選択された層に対して受信データを受け渡す（ステップＳ１５０８）。
【０１５０】
一方、履歴判断部２５８が同一であると判断した場合（ステップＳ１５０７：Ｙｅｓ）、プロトコル下位層２０６が、再受信データの受け渡し処理を行う（ステップＳ１５０９）。
【０１５１】
上述した処理手順により、受信データのパケットに応じた処理が行われたことになる。
【０１５２】
次に、ステップＳ１５０４のプロトコル下位層２０６においてプロトコルがＵＤＰ／ＩＰ／ＩＣＭＰにおける受信したデータの受渡先を決定する処理について説明する。図１６は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１５３】
まず、処理先判断部２４６は、受信処理を行ったインターフェースオブジェクト２６１ａ〜ｃが、ハードウェアインターフェース管理テーブル２４５に登録されているか否か判断する（ステップＳ１６０１）。登録されていると判断した場合（ステップＳ１６０１：Ｙｅｓ）、下位ハードウェアプロトコル層受渡部２４７が、ハードウェアプロトコル層２０５に受信データを受け渡す（ステップＳ１６０２）。
【０１５４】
一方、処理先判断部２４６が登録されていないと判断した場合（ステップＳ１６０１：Ｎｏ）、下位プロトコル層受渡部２４４が、プロトコル層２０４に受信データを受け渡す（ステップＳ１６０３）。
【０１５５】
次に、ステップＳ１５０６のプロトコル下位層２０６の新規ＴＣＰ通信における受信データの受渡先を決定する処理について説明する。図１７は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１５６】
まず、エントリ制御部２５５が、当該新規ＴＣＰ通信に対応するエントリを、通信記録テーブルに追加する（ステップＳ１７０１）。
【０１５７】
次に、処理先判断部２４６は、受信処理を行ったインターフェースオブジェクト２６１ａ〜ｃが、ハードウェアインターフェース管理テーブル２４５に登録されているか否か判断する（ステップＳ１７０２）。登録されていると判断した場合（ステップＳ１７０２：Ｙｅｓ）、履歴更新部２５７が、通信記録テーブルで追加されたエントリの使用中フラグを‘Ｙｅｓ’に設定する（ステップＳ１７０３）。その後、下位ハードウェアプロトコル層受渡部２４７が、ハードウェアプロトコル層２０５に受信データを受け渡す（ステップＳ１７０４）。
【０１５８】
一方、処理先判断部２４６が登録されていないと判断した場合（ステップＳ１７０２：Ｎｏ）、履歴更新部２５７が、通信記録テーブルで追加されたエントリの使用中フラグを‘Ｎｏ’に設定する（ステップＳ１７０５）。その後、下位プロトコル層受渡部２４４が、プロトコル層２０４に受信データを受け渡す（ステップＳ１７０６）。
【０１５９】
次に、ステップＳ１５０８のプロトコル下位層２０６のＴＣＰ通信における受信データの受渡先を決定する処理について説明する。図１８は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１６０】
まず、履歴更新部２５７が、通信記録テーブルの該当するエントリのＴＣＰシーケンス番号に‘１’追加する（ステップＳ１８０１）。
【０１６１】
次に、プロトコル下位層２０６において、プロトコル解析処理先としてハードウェアプロトコル層２０５かプロトコル層２０４かを選択し、選択された層に対して受信データを受け渡す（ステップＳ１８０２）。なお、当該処理手順の詳細は、図１６で示した処理手順と同様なので説明を省略する。
【０１６２】
その後、履歴更新部２５７が、通信記録テーブルの該当エントリの使用中フラグが、ステップＳ１８０２の受け渡し先と一致しているか否か確認する（ステップＳ１８０３）。異なる場合には、当該エントリの使用中フラグを適切な値に更新する。
【０１６３】
次に、ステップＳ１５０９のプロトコル下位層２０６における再送されてきた受信データの受渡先を決定する処理について説明する。図１９は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【０１６４】
まずは、履歴判断部２５８が、通信記録テーブルにおいて、受信したデータを示すエントリの使用中フラグが‘Ｙｅｓ’か否か判断する（ステップＳ１９０１）。
【０１６５】
そして、使用中フラグが‘Ｙｅｓ’と判断した場合（ステップＳ１９０１：Ｙｅｓ）、下位ハードウェアプロトコル層受渡部２４７が、受信データをハードウェアプロトコル層２０５に受け渡す（ステップＳ１９０２）。
【０１６６】
そして、使用中フラグが‘Ｎｏ’と判断した場合（ステップＳ１９０１：ＮＯ）、下位プロトコル層受渡部２４４が、受信データをプロトコル層２０４に受け渡す（ステップＳ１９０３）。
【０１６７】
次に、ネットワークデバイス２６２ａからデータを受信した場合の処理の経路について説明する。図２０は、ネットワークデバイス２６２ａで受信処理してから、ネットワークプログラム２１１ａに出力されるまでの移動経路を示した説明図である。
【０１６８】
まず、ネットワークデバイス２６２ａが、データの受信処理した場合、ネットワークデバイス２６２ａに対応するインターフェースオブジェクト２６１ａに、受信したデータを出力する（ステップＳ２００１）。その後、インターフェースオブジェクト２６１ａが、受信データを、プロトコル下位層２０６に出力するが、このときに処理先判断部２４６が、受信したデータを、プロトコル層２０４又はハードウェアプロトコル層２０５にいずれかに受け渡すべきか判断する。
【０１６９】
処理先判断部２４６が、受信したデータを、ハードウェアプロトコル層２０５に受け渡すと判断した場合、インターフェースオブジェクト２６１ａから下位ハードウェアプロトコル層受渡部２４７にデータが受け渡される（ステップＳ２００２）。このときに、プロトコル判別部２４１により、受信したデータのプロトコルが判別される。
【０１７０】
次に、下位ハードウェアプロトコル層受渡部２４７は、ハードウェアプロトコル層２０５のプロトコル処理回路２３２に送信対象であるデータを受け渡すと共に、プロトコル判別部２４１により判別されたプロトコルによる当該データのプロトコル解析処理を要求する（ステップＳ２００３）。
【０１７１】
そして、プロトコル処理回路２３２でプロトコル解析処理されたデータは、データキュー２２６に格納される（ステップＳ２００４）。
【０１７２】
一方、ステップＳ２００１の後、処理先判断部２４６がプロトコル層２０４に受け渡すと判断した場合、インターフェースオブジェクト２６１ａから下位プロトコル層受渡部２４４にデータが受け渡される（ステップＳ２００５）。このときに、プロトコル判別部２４１により、受信したデータのプロトコルが判別される。
【０１７３】
次に、下位プロトコル層受渡部２４４は、プロトコル層２０４のプロトコル処理部２３１に受信したデータを受け渡すと共に、プロトコル判別部２４１により判別されたプロトコルによる当該データのプロトコル処理を要求する（ステップＳ２００６）。
【０１７４】
そして、プロトコル処理部２３１でプロトコル処理されたデータは、データキュー２２６に格納される（ステップＳ２００７）。
【０１７５】
次に、データキュー２２６に格納されたデータは、上位データ順序保証部２２４によりデータの順序が保証された後、ソケットディスパッチャ２２５がソケット２１２ａに受け渡す（ステップＳ２００８）。
【０１７６】
そして、ソケットディスパッチャ２２５は、ネットワークプログラム２１１ａに受信したデータを出力する（ステップＳ２００９）。
【０１７７】
次に、所定のネットワークデバイス２６２ａから入力された受信データ１〜４の処理中に、プロトコル解析処理を行う層が切り替えられた場合について説明する。図２１は、上述した場合の概念を示した説明図である。
【０１７８】
まずは、符号２１０２に示すように、プロトコル下位層２０６において、下位プロトコル層受渡部２４４が、受信データ１〜２をプロトコル層２０４に受け渡されたものとする。
【０１７９】
その後、パケット判断部２６０により当該ネットワークデバイス２６２ａについてプロトコル解析処理を行う層が、ハードウェアプロトコル層２０５にするという切り替えが発生した（２１０２）。
【０１８０】
これにより、これ以降は、下位ハードウェアプロトコル層受渡部２４７が、受信データ３〜４をハードウェアプロトコル層２０５に受け渡す（２１０３）。
【０１８１】
そして、ソケットディスパッチャ２２５では、切り替えが生じる前の受信データ１〜２については第１のデータキュー２１１１に格納する（２１０４）。そして、第１のデータキュー２１１１に格納されたデータについて、ソケットディスパッチャ２２５が受信処理を行なう。そして、ソケットディスパッチャ２２５は、下位番号割当部２６３で受信データに割り当てられた番号を、第１のデータキュー２１１１内の連番記憶部に記録する。
【０１８２】
そして、プロトコル解析処理を行う層の切り替えが生じたために、ハードウェアプロトコル層２０５から出力された受信データを格納するために第２のデータキュー２１１２を追加する（２１０５）。
【０１８３】
そして、ハードウェアプロトコル層２０５でプロトコル解析処理された受信データ３〜４は、新しく追加された第２のデータキュー２１１２に格納する（２１０６）。この際、ソケットディスパッチャ２２５は、第２のデータキュー２１１２に最初に格納された受信データに割り当てられた番号を、第２のデータキュー２１１２内の連番記憶部に記録する。
【０１８４】
そして、第１のデータキュー２１１１内の連番記憶部に記録された番号に‘１’加えた番号が、第２のデータキュー２１１２内の連番記憶部に記録された番号になると共に、第１のデータキュー２１１１に格納されていた受信データ１〜２が出力されて空になったと判断した場合に、第１のデータキュー２１１１が、廃棄される（２１０７）。そして、これ以降については第２のデータキュー２１１２に受信データが格納される。
【０１８５】
また、上述した処理では、プロトコル層２０４からハードウェアプロトコル層２０５に切り替えた場合について説明したが、ハードウェアプロトコル層２０５からプロトコル層２０４に切り替えた場合についても同様とする。
【０１８６】
次に、所定のネットワークデバイス２６２ａから出力する送信データ１〜４の処理中に、プロトコル処理を行う層が切り替えられた場合について説明する。図２２は、この上述した場合の概念を示した説明図である。
【０１８７】
まずは、符号２２０１に示すように、プロトコル上位層２０３において、上位プロトコル層受渡部２２３が、送信データ１〜２をプロトコル層２０４に受け渡されたものとする。
【０１８８】
その後、パケット判断部２６０により、当該ネットワークデバイス２６２ａから送信する送信データのプロトコル処理を行う層が、ハードウェアプロトコル層２０５にするという切り替えが発生した（２２０２）。
【０１８９】
これにより、これ以降は、上位ハードウェアプロトコル層受渡部２２９が、受信データ３〜４をハードウェアプロトコル層２０５に受け渡す（２２０３）。
【０１９０】
そして、インターフェースディスパッチャ２４９では、切り替えが生じる前の受信データ１〜２については第１のデータキュー２２１１に格納する（２２０４）。そして、第１のデータキュー２２１１に格納されたデータについて、インターフェースディスパッチャ２４９が受信処理を行なう。そして、インターフェースディスパッチャ２４９は、上位番号割当部２２７で送信データに割り当てられた番号を、第１のデータキュー２２１１内の連番記憶部に記録する。
【０１９１】
そして、プロトコル解析処理を行う層の切り替えが生じたために、ハードウェアプロトコル層２０５から出力された送信データを格納するために第２のデータキュー２１１２を追加する（２２０５）。
【０１９２】
そして、ハードウェアプロトコル層２０５でプロトコル処理された送信データ３〜４は、新しく追加された第２のデータキュー２２１２に格納する（２２０６）。この際、インターフェースディスパッチャ２４９は、第２のデータキュー２２１２に最初に格納された受信データに割り当てられた番号を、第２のデータキュー２２１２内の連番記憶部に記録する。
【０１９３】
そして、第１のデータキュー２２１１内の連番記憶部に記録された番号に‘１’加え、さらに欠番が発生した回数を加えた番号が、第２のデータキュー２２１２内の連番記憶部に記録された番号になると共に、第１のデータキュー２２１１に格納されていた送信データ１〜２が出力されて空になったと判断した場合に、第１のデータキュー２２１１が廃棄される（２２０７）。そして、これ以降については第２のデータキュー２２１２に送信データが格納される。
【０１９４】
また、上述した処理では、プロトコル層２０４からハードウェアプロトコル層２０５に切り替えた場合について説明したが、ハードウェアプロトコル層２０５からプロトコル層２０４に切り替えた場合についても同様とする。
【０１９５】
また、上述した本実施の形態にかかる情報処理装置１００は、ネットワークを制御するソフトウェア群がレイヤー構造で制御するＯＳであればどのようなＯＳでもよい。適用可能なＯＳとしては、例えばＮｅｔＢＳＤ等が存在する。
【０１９６】
上述したように、本実施の形態にかかる情報処理装置１００では、ハードウェアプロトコル層２０５を備えた場合であっても、既存のソフトウェアプロトコルスタックと共存させることを可能としている。
【０１９７】
これに対し、本実施の形態にかかる情報処理装置１００では、上述したような構成を備えることで、ネットワークデバイス２６２ａ〜ｃであれば、ハードウェアプロトコル層２０５を使用することが可能になった。
【０１９８】
これにより、本実施の形態にかかる情報処理装置１００では、プロトコル処理回路２３２を搭載することでハードウェアオフロードを可能にして、ＣＰＵ１０１の処理負担を軽減すると共に、さまざまなプロトコルに対応することが可能になる。
【０１９９】
さらに、本実施の形態にかかる情報処理装置１００では、送受信量の大きいネットワークデバイス２６２ａ〜ｃにハードウェアプロトコル層２０５を割り当てることで、ＣＰＵ１０１の処理負担を効率よく軽減させることができる。
【０２００】
また、本実施の形態にかかる情報処理装置１００では、さまざまなネットワークデバイスを利用することが可能になる。このようなネットワークデバイスは、本実施の形態のように、有線ＬＡＮ１０６、シリアル回線１０７、無線ＬＡＮ１０８及びＵＳＢ１０９に制限するものではなく、従来から使用される様々なネットワークデバイスを適用しても良い。
【０２０１】
本実施形態の情報処理装置１００で実行される通信制御プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０２０２】
また、本実施形態の情報処理装置１００で実行される通信制御プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態の情報処理装置１００で実行される通信制御プログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【０２０３】
また、本実施形態の通信制御プログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０２０４】
本実施の形態の情報処理装置１００で実行される通信制御プログラムは、上述した各部（ユーザアプリケーション層、ソケット層、プロトコル上位層、プロトコル層、プロトコル下位層、インターフェース層）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵが上記記録媒体から通信制御プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、ユーザアプリケーション層、ソケット層、プロトコル上位層、プロトコル層、プロトコル下位層、インターフェース層が主記憶装置上に生成されるようになっている。
【産業上の利用可能性】
【０２０５】
以上のように、本発明にかかる通信制御装置、通信制御方法及び通信制御プログラムは、通信制御に有用であり、特に、ハードウェア化したプロトコル処理回路を用いた通信制御に適している。
【図面の簡単な説明】
【０２０６】
【図１】実施の形態にかかる情報処理装置のハードウェア構成を示した図である。
【図２】情報処理装置のソフトウェア構成をレイヤー構造で示した図である。
【図３】インターフェースクラスとのクラス構造を示した図である。
【図４】インターフェース管理テーブルとインターフェースオブジェクトとの関連を示した説明図である。
【図５】インターフェースオブジェクトの登録先のインターフェース管理テーブル及びハードウェアインターフェース管理テーブルを示した説明図である。
【図６】通信記録テーブルのテーブル構造を示した図である。
【図７】プロトコル層、ハードウェアプロトコル層及びプロトコル下位層で、送受信するデータの概念を示した図である。
【図８】送信データの連番を用いた処理の概念を示した図である。
【図９】プロトコル層、ハードウェアプロトコル層及びプロトコル上位層で、送受信するデータの概念を示した図である。
【図１０】受信データの連番を用いた処理の概念を示した図である。
【図１１】実施の形態にかかる情報処理装置における送信処理の手順を示すフローチャートである。
【図１２】実施の形態にかかるプロトコル上位層における送信データの受け渡すまでの処理の手順を示すフローチャートである。
【図１３】実施の形態にかかるネットワークプログラムから、ネットワークデバイスで送信処理を行うまでの送信するデータの移動経路を示した説明図である。
【図１４】実施の形態にかかる情報処理装置におけるネットワークデバイスでデータを受信した場合の処理手順を示すフローチャートである。
【図１５】実施の形態にかかる情報処理装置における受信したデータのプロトコルに応じて受渡先を決定する処理の手順を示すフローチャートである。
【図１６】実施の形態にかかる情報処理装置のプロトコル下位層においてプロトコルがＵＤＰ／ＩＰ／ＩＣＭＰにおける受信したデータの受渡先を決定する処理の手順を示すフローチャートである。
【図１７】実施の形態にかかる情報処理装置のプロトコル下位層の新規ＴＣＰ通信における受信データの受渡先を決定する処理の手順を示すフローチャートである。
【図１８】実施の形態にかかる情報処理装置のプロトコル下位層のＴＣＰ通信における受信データの受渡先を決定する処理の手順を示すフローチャートである。
【図１９】本実施の形態にかかる情報処理装置における再送されてきた受信データの受渡先を決定する処理の手順を示すフローチャートである。
【図２０】ネットワークデバイスで受信処理してから、ネットワークプログラムに出力されるまでの移動経路を示した説明図である。
【図２１】所定のネットワークデバイスから入力された受信データの処理中に、プロトコル解析処理を行う層が切り替えられた場合の概念を示した説明図である。
【図２２】所定のネットワークデバイス２６２ａから出力する送信データの処理中に、プロトコル処理を行う層が切り替えられた場合の概念を示した説明図である。
【図２３】従来のＴＯＥを搭載した情報処理装置におけるネットワークの階層モデルを示した説明図である。
【符号の説明】
【０２０７】
１００  情報処理装置
１０１  ＣＰＵ
１０２  プロトコル処理回路
１０３  アービタ
１０４  ＲＡＭ
１０５  ＲＯＭ
１０６  有線ＬＡＮ
１０７  シリアル回路
１０８  無線ＬＡＮ
１０９  ＵＳＢ
２０１  ユーザプログラム層
２０２  ソケット層
２０３  プロトコル上位層
２０４  プロトコル層
２０５  ハードウェアプロトコル層
２０６  プロトコル下位層
２０７  インターフェース層
２０８  ネットワークデバイス
２１１ａ〜ｃ  ネットワークプログラム
２１２ａ〜ｃ  ソケット
２２１  上位プロトコル判断部
２２２  ソケット特定部
２２３  上位プロトコル層受渡部
２２４  上位データ順序保証部
２２５  ソケットディスパッチャ
２２６  データキュー
２２７  上位番号割当部
２２９  上位ハードウェアプロトコル層受渡部
２３１  プロトコル処理部
２３２  プロトコル処理回路
２４１  プロトコル判別部
２４２  送信先取得部
２４３  インターフェース管理テーブル
２４４  下位プロトコル層受渡部
２４５  ハードウェアインターフェース管理テーブル
２４６  処理先判断部
２４７  下位ハードウェアプロトコル層受渡部
２４８  下位データ順序保証部
２４９  インターフェースディスパッチャ
２５０  データキュー
２５１  通信履歴格納部
２５２  通信記録テーブル
２５３  デバイス毎送信パケット数
２５４  デバイス毎受信パケット数
２５５  エントリ制御部
２５６  再送要求部
２５７  履歴更新部
２５８  履歴判断部
２５９  検索部
２６０  パケット判断部
２６１ａ〜ｃ  インターフェースオブジェクト
２６２ａ〜ｃ  ネットワークデバイス
２６３  下位番号割当部
【図１】
2009055133.tif 000003
【図２】
2009055133.tif 000004
【図３】
2009055133.tif 000005
【図４】
2009055133.tif 000006
【図５】
2009055133.tif 000007
【図６】
2009055133.tif 000008
【図７】
2009055133.tif 000009
【図８】
2009055133.tif 000010
【図９】
2009055133.tif 000011
【図１０】
2009055133.tif 000012
【図１１】
2009055133.tif 000013
【図１２】
2009055133.tif 000014
【図１３】
2009055133.tif 000015
【図１４】
2009055133.tif 000016
【図１５】
2009055133.tif 000017
【図１６】
2009055133.tif 000018
【図１７】
2009055133.tif 000019
【図１８】
2009055133.tif 000020
【図１９】
2009055133.tif 000021
【図２０】
2009055133.tif 000022
【図２１】
2009055133.tif 000023
【図２２】
2009055133.tif 000024
【図２３】
2009055133.tif 000025