(57)【要約】【課題】インフィニバンドのＲＣ通信において、不正なメッセージの受信を防ぐためにメッセージにＱＰ番号を付加して送付する場合に、ＱＰ番号を効率よくチェックすること。【解決手段】送信部７１は、一定間隔でメッセージにＱＰ番号を付加して送信し、ＩＭＭを用いてＱＰ番号が付加されているか否かを識別できるようにする。そして、確認部７３は、ＩＭＭを用いて受信メッセージにＱＰ番号が付加されているか否かを判定し、ＱＰ番号が付加されている場合だけ、ＱＰ番号のチェックを行う。【選択図】図３
2015216450.tif 000002
【特許請求の範囲】
【請求項１】
インフィニバンドを用いて他の情報処理装置との間で通信を行う情報処理装置において、
前記他の情報処理装置にＱＰ番号付きデータを送信する際に、送信処理要求の所定領域に特定のコードを入力し、該所定領域の情報はデータ部に移動し、データ部にＱＰ番号を追記して送信する送信部と、
他の情報処理装置から受信したデータの所定領域に前記特定のコードが入っている場合、データはＱＰ番号付きと判別し、前記他の情報処理装置をＱＰ番号に基づいて判別し、データ部に移動された所定領域の情報を所定領域に移動し、ＱＰ番号を削除してユーザライブラリに送信する受信確認部と
を備えることを特徴とする情報処理装置。
【請求項２】
前記受信確認部は、前記他の情報処理装置をＱＰ番号に基づいて判別し、前記他の情報処理装置が本来の通信相手でない場合に、データを破棄することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記送信部は、前記他の情報処理装置にＱＰ番号付きデータを送信しない場合でも、前記所定領域に特定のコードが入っている場合には、該所定領域の情報はデータ部に移動し、データ部にＱＰ番号を追記して送信することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
インフィニバンドを用いて第１の情報処理装置と第２の情報処理装置との間で通信を行う情報処理システムにおいて、
前記第１の情報処理装置は、
前記第２の情報処理装置にＱＰ番号付きデータを送信する際に、送信処理要求の所定領域に特定のコードを入力し、所定領域の情報はデータ部に移動し、データ部にＱＰ番号を追記して送信する送信部を備え、
前記第２の情報処理装置は、
前記第１の情報処理装置から受信したデータの所定領域に特定のコードが入っている場合、データはＱＰ番号付きと判別し、前記第１の情報処理装置をＱＰ番号に基づいて判別し、データ部に移動された所定領域の情報を所定領域移動し、ＱＰ番号を削除してユーザライブラリに送信する受信確認部を備え
ることを特徴とする情報処理システム。
【請求項５】
インフィニバンドを用いて他の情報処理装置との間で通信を行う情報処理装置で実行される中継プログラムにおいて、
前記他の情報処理装置にＱＰ番号付きデータを送信する際に、送信処理要求の所定領域に特定のコードを入力し、所定領域の情報はデータ部に移動し、データ部にＱＰ番号を追記して送信し、
他の情報処理装置から受信したデータの所定領域に特定のコードが入っている場合、データはＱＰ番号付きと判別し、前記他の情報処理装置をＱＰ番号に基づいて判別し、データ部に移動された所定領域の情報を所定領域に移動し、ＱＰ番号を削除してユーザライブラリに送信する
処理を前記情報処理装置に実行させる中継プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及び中継プログラムに関する。
【背景技術】
【０００２】
近年、ＨＰＣ（High  Performance  Computing）系のサーバ間の通信などで、インフィニバンド（InfiniBand）が用いられている。インフィニバンドでは、情報処理装置にＨＣＡ（Host  Channel  Adaptor）が装着され、送信側のＨＣＡ内のＱＰ（Queue  Pair）と受信側のＨＣＡ内のＱＰとの間で通信が行われる。ＨＣＡの各ポートには、ＬＩＤ（Local  Identifier）と呼ばれ、ネットワーク内で一意な１から４９，１５１までの番号が割り振られる。１つのＨＣＡは、理論上２24−１個のＱＰを持つことができ、ＨＣＡ内でユニークな１〜２24−１までのＱＰ番号を持つ。
【０００３】
インフィニバンドの通信方式には、ＲＣ（Reliable  Connection）と呼ばれる通信方式があり、ＲＣでは１個のＱＰと１個のＱＰとの間で１対１の通信が行われる。２つのＱＰは、互いのＬＩＤとＱＰ番号を通知して交換しあうことでコネクションを確立する。インフィニバンドのメッセージには送信元を示すＬＩＤが埋め込まれており、本来の通信相手とは異なるＬＩＤを持っている情報処理装置に属するＱＰから送られてきたメッセージは、受信側のＨＣＡにより破棄される。
【０００４】
図１６は、ＲＣ通信の本来の通信相手以外からのメッセージの破棄を示す図である。図１６では、ＬＩＤが１でありＱＰ番号が３０００であるＱＰとＬＩＤが２でありＱＰ番号が４０００であるＱＰとの間で１対１の通信が行われている。このとき、ＬＩＤが３でありＱＰ番号が５０００であるＱＰがＬＩＤが２でありＱＰ番号が４０００であるＱＰに一方的にメッセージを送信すると、受信側のＨＣＡがメッセージ内のＬＩＤをチェックしてメッセージを受理しない。このため、ＱＰは、本来の通信相手以外から送られてきたメッセージを誤って受理することはない。
【０００５】
しかし、インフィニバンドのメッセージには、送信元を識別するＱＰ番号は含まれない。また、本来の通信相手と同一の情報処理装置に属する別のＱＰは同一のＬＩＤを持っている。したがって、本来の通信相手と同一の情報処理装置に属する別のＱＰからメッセージが送られてきた場合、受信側のＱＰは本来の通信相手と区別できずにメッセージを受信してしまう。
【０００６】
図１７は、ＲＣ通信の本来の通信相手以外からのメッセージの受理を示す図である。図１６と比較して、図１７では、ＱＰ番号が５０００のＱＰが同一の情報処理装置に属する。したがって、ＱＰ番号が５０００のＱＰのＬＩＤはＱＰ番号が３０００のＱＰのＬＩＤと同一であるため、受信側のＱＰは本来の通信相手以外から送られてきたメッセージを受理する。
【０００７】
すなわち、同一の情報処理装置内に複数のプログラムがあり、それぞれがインフィニバンドの通信を行う場合、別々のＱＰが割り当てられる。当然、インフィニバンドのＲＣ通信は２つのプログラム間で行うことを想定している。しかし、受信側のＱＰは、通信相手と同じ情報処理装置にいる別のプログラムと本来の通信相手のプログラムを区別できない。このため、悪意あるプログラムがインフィニバンドのメッセージを偽造して送り込むことが可能になる。
【０００８】
また、プログラムに悪意がなくても、ＲＣ通信のコネクションを切断後にＱＰを再利用する設計では、通信相手のＱＰがすでに自分以外の通信相手とコネクションを確立していることに気づかず、ＱＰがメッセージを送信する可能性がある。すると、受信側のＱＰは、その時点での本来の通信相手以外からのメッセージを受信する危険がある。このような本来失効するべき古いコネクションが残っている状態はStale  Connectionと呼ばれる。
【０００９】
そこで、送信側のＱＰがメッセージにＱＰ番号を含めて送信し、受信側のＱＰがＱＰ番号をチェックすることが行われている。受信側は、ＱＰ番号が本来の通信相手のＱＰ番号でない場合に、メッセージが不正に送信されたことを知ることができる。
【００１０】
なお、ＲＣ通信のコネクションを上位のミドルウェアにより管理する技術があるが、上位のミドルウェアを利用するためにはインフィニバンドのソースプログラムを改変する必要があり、既存のプログラムにはこの技術を適用することはできない。また、全てのインフィニバンドプログラムをミドルウェアの管理下で動作させる必要があるため、一部のインフィニバンドプログラムをミドルウェアの管理外で動作させることが許されない。
【００１１】
また、送信側と受信側の間で論理接続が確立するとインスタンス番号が論理接続に関連づけられ、送信側はデータにインスタンス番号を付加して送信し、受信側がインスタンス番号をチェックすることで論理接続に属するデータであるかを判定する従来技術がある。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特表２００５−５２４２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、全てのメッセージにＱＰ番号を含めてチェックすることは効率が悪いという問題がある。具体的には、メッセージにＱＰ番号を含める処理やメッセージからＱＰ番号を取り除く処理に時間がかかる。また、ＱＰ番号を含めることによって、通信量が増加する。
【００１４】
本発明は、１つの側面では、メッセージが正しい通信相手から送信されたか否かを効率よくチェックするＲＣ通信を実現することを目的とする。
【課題を解決するための手段】
【００１５】
本願の開示する情報処理装置は、インフィニバンドを用いて他の情報処理装置との間で通信を行う。また、本願の開示する情報処理装置は、１つの態様において、送信部と受信確認部とを備える。前記送信部は、前記他の情報処理装置にＱＰ番号付きデータを送信する際に、送信処理要求の所定領域に特定のコードを入力し、該所定領域の情報はデータ部に移動し、データ部にＱＰ番号を追記して送信する。前記受信確認部は、他の情報処理装置から受信したデータの所定領域に前記特定のコードが入っている場合、データはＱＰ番号付きと判別し、前記他の情報処理装置をＱＰ番号に基づいて判別し、データ部に移動された所定領域の情報を所定領域に移動する。また、前記受信確認部は、ＱＰ番号を削除してユーザライブラリに送信する。
【発明の効果】
【００１６】
１実施態様によれば、メッセージが正しい通信相手から送信されたか否かを効率よくチェックすることができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、インフィニバンドのＲＣ方式を用いてプログラムがメッセージ通信を行う場合のモデルを説明するための図である。
【図２】図２は、インフィニバンドとイーサネット（登録商標）及びＩＰの概念の対比を示す図である。
【図３】図３は、実施例に係る情報処理装置の機能構成を示す図である。
【図４】図４は、本来の送信データの一例を示す図である。
【図５】図５は、カプセル化された送信データの一例を示す図である。
【図６】図６は、カプセル化されていない受信データの一例を示す図である。
【図７】図７は、カプセル化された受信データの一例を示す図である。
【図８】図８は、送信ＷＲのデータ構造の一例を示す図である。
【図９】図９は、受信ＷＲのデータ構造の一例を示す図である。
【図１０】図１０は、スキャッタ／ギャザーリストの１つのエントリのデータ構造の一例を示す図である。
【図１１】図１１は、受信ＷＣのデータ構造の一例を示す図である。
【図１２】図１２は、送信処理のフローを示すフローチャートである。
【図１３】図１３は、受信確認処理のフローを示すフローチャートである。
【図１４】図１４は、実施例に係る情報処理装置のハードウェア構成を示す図である。
【図１５】図１５は、実施例に係る情報処理システムの構成を示す図である。
【図１６】図１６は、ＲＣ通信の本来の通信相手以外からのメッセージの破棄を示す図である。
【図１７】図１７は、ＲＣ通信の本来の通信相手以外からのメッセージの受理を示す図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示する情報処理装置、情報処理システム及び中継プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１９】
まず、インフィニバンドのＲＣ方式を用いてプログラムがメッセージ通信を行う場合のモデルについて説明する。図１は、インフィニバンドのＲＣ方式を用いてプログラムがメッセージ通信を行う場合のモデルを説明するための図である。
【００２０】
図１において、ユーザプログラム５は、インフィニバンドのＲＣ方式を用いて通信するプログラムである。ｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄ、ｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ及びｉｂｖ＿ｐｏｌｌ＿ｃｑは、ユーザプログラム５がインフィニバンドのＲＣ方式を用いて通信する場合に呼び出すＩＢユーザライブラリの関数である。
【００２１】
ＨＣＡ４は、インフィニバンドを用いて通信する情報処理装置に装着されるアダプタである。ＨＣＡ４は、ＱＰ４１と、ＣＱ４２と、ＣＱ４３と、ポート４４とを有する。ＱＰ４１は、他のＨＣＡが有するＱＰと通信する。ＱＰ４１は、ＳＱ（Send  Queue：送信キュー）４５と、ＲＱ（Receive  Queue：受信キュー）４６とを有する。ＳＱ４５は、送信するメッセージに関する情報を格納するキューであり、ＲＱ４６は、受信したメッセージに関する情報を格納するキューである。
【００２２】
ＣＱ４２は、送信が完了したメッセージに関する情報を格納するキューであり、ＣＱ４３は、メッセージの受信完了に関する情報を格納するキューである。ポート４４は、他のＨＣＡのポートとメッセージを送受信する。
【００２３】
ユーザプログラム５は、メッセージの送信を行うとき、ＱＰ４１に対してｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄ関数を実行する。ｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄ関数に渡されるデータは、送信処理要求ＳｅｎｄＷＲ（Send  Work  Request：送信ＷＲ）と呼ばれ、送信先の情報やバッファのアドレスを有する。
【００２４】
送信ＷＲは、ｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄによってＷＱＥ（Work  Queue  Element）に変換されＳＱ４５に積まれる。ＷＱＥには、送信すべきデータのポインタが含まれている。ＳＱ４５にＷＱＥを積むことに成功すればｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄ関数はすぐに復帰する。
【００２５】
ＨＣＡ４は、ＳＱ４５にＷＱＥが積まれると、ＷＱＥの内容に従ってメッセージを送信する。送信が成功すると、ＨＣＡ４は、ＳＱからＷＱＥを削除し、ＣＱ４２に対してＣＱＥ（Completion  Queue  Entry）を１つ積む。
【００２６】
ユーザプログラム５は、ＣＱ４２に対してｉｂｖ＿ｐｏｌｌ＿ｃｑ関数を実行すると、ＣＱＥを順番に取り出すことができる。取り出し時にＣＱＥは送信ＷＣ（Work  Completion）に変換される。ユーザプログラム５は、送信ＷＣの内容を確認することでメッセージの送信の完了を確認できる。
【００２７】
メッセージの受信を行うには、ユーザプログラム５は、メッセージが到着する前にＱＰ４１に対してｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ関数を実行する。ｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ関数に渡されるデータは、受信処理要求ＲｅｃｅｉｖｅＷＲ（Receive  Work  Request：受信ＷＲ）と呼ばれ、バッファのアドレスなどを有する。受信ＷＲは、ｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖによってＷＱＥに変換されＲＱ４６に積まれる。ＲＱ４６にＷＱＥを積むことに成功すればｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ関数はすぐに復帰する。
【００２８】
ＨＣＡ４は、メッセージがＱＰ４１に到着すると、ＲＱ４６のＷＱＥを１個取り出して、その内容に従いメモリ上にメッセージデータを格納する。その後、ＨＣＡ４は、ＣＱ４３に対してメッセージの受信完了を通知するＣＱＥを１つ積む。
【００２９】
ユーザプログラム５は、ＣＱ４３に対してｉｂｖ＿ｐｏｌｌ＿ｃｑ関数を実行すると、ＣＱＥを順番に取り出すことができる。取り出し時にＣＱＥは受信ＷＣに変換される。ユーザプログラム５は、受信ＷＣの内容を確認することでメッセージの受信の完了を確認できる。
【００３０】
図２は、インフィニバンドとイーサネット（登録商標）及びＩＰ（Internet  Protocol）の概念の対比を示す図である。図２に示すように、ＨＣＡはＮＩＣに対応し、ＬＩＤはＩＰアドレスに対応し、ＱＰはソケットに対応し、ＱＰ番号はポート番号に対応し、ＲＣはＴＣＰに対応し、ＳＱはソケットの送信バッファに対応し、ＲＱはソケットの受信バッファに対応する。ただし、インフィニバンドのＣＱに対応するイーサネット及びＩＰの概念はない。
【００３１】
次に、実施例に係る情報処理装置の機能構成について説明する。図３は、実施例に係る情報処理装置の機能構成を示す図である。図３に示すように、情報処理装置１は、ユーザランド２と、カーネルランド３と、ＨＣＡ４とを有する。ユーザランド２は、ＣＰＵのユーザモードで実行されるプログラム部分であり、ユーザランド２のプログラムには、実行するＣＰＵの命令やアクセスするメモリ空間に制限がある。カーネルランド３は、ＣＰＵの特権モードで実行されるプログラム部分であり、カーネルランド３のプログラムには、実行するＣＰＵの命令やアクセスするメモリ空間に制限がない。
【００３２】
カーネルランド３には、ＨＣＡドライバ８が含まれる。ＨＣＡドライバ８は、ＨＣＡ４を用いてメッセージを送受信するドライバである。
【００３３】
ユーザランド２には、ユーザプログラム５、ＩＢユーザライブラリ６、中継プロキシ７が含まれる。ＩＢユーザライブラリ６は、ユーザプログラム５がインフィニバンドを用いて通信する場合に呼び出すプログラムのライブラリであり、ｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄ、ｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ及びｉｂｖ＿ｐｏｌｌ＿ｃｑは、ＩＢユーザライブラリ６に含まれる。
【００３４】
中継プロキシ７は、ＩＢユーザライブラリ６に含まれる関数の呼び出しを横取りして追加処理を行うプログラムである。中継プロキシ７は、送信部７１と受信部７２と確認部７３とを有する。
【００３５】
送信部７１は、一定間隔でメッセージにＱＰ番号を付加する。ここで、一定間隔とは、例えば、一定のメッセージの個数である。具体的には、ユーザプログラム５がｉｂｖ＿ｐｏｓｔ＿ｓｅｎｄを使って送信ＷＲを登録しようとすると、送信部７１は、送信ＷＲを横取りし、送信メッセージの間隔に基づいてＱＰ番号をメッセージに付加するか否かを判断する。
【００３６】
そして、ＱＰ番号をメッセージに付加すると判断した場合には、送信部７１は、ユーザプログラム５のメッセージ本体に４バイトのソースＱＰＮを附加してカプセル化メッセージとして送信する。ここで、ソースＱＰＮとはＱＰ番号であり、カプセル化とは、ソースＱＰＮを付加することである。
【００３７】
図４は、本来の送信データの一例を示す図であり、図５はカプセル化された送信データの一例を示す図である。図４に示すように、送信ＷＲ３１には、ｓｇ＿ｌｉｓｔとＩＭＭが含まれる。ｓｇ＿ｌｉｓｔは、スキャッタ／ギャザーリスト（scatter/gather  list）３２へのポインタであり、スキャッタ／ギャザーリスト３２は、送信データを分散して格納する送信バッファへのポインタａｄｄｒのリストである。スキャッタ／ギャザーとは、複数のバッファに分かれたデータを集めて送・受信する機構である。なお、図４では、２つのａｄｄｒだけを示すが、スキャッタ／ギャザーリスト３２は、３つ以上のａｄｄｒを有してよい。
【００３８】
ＩＭＭは、メモリを介したデータ転送とは別に、メッセージ毎につけられる４バイトのデータである。ＩＭＭはメッセージと一緒に転送されるが、受信バッファとは別の受信完了通知(受信ＷＣ)の中に記録される。すなわち、ＩＭＭを使ったデータ転送では、受信バッファなしに４バイトのデータを通知することができる。
【００３９】
送信部７１は、ＩＭＭをメッセージがカプセル化されているか否かの識別に用いる。ただし、ユーザプログラム５はＩＭＭを使用しており、ユーザによりＩＭＭに設定された値を保護する必要がある。そこで、送信部７１は、統計的な性質によりユーザプログラム５がＩＭＭに設定することが少ない特定の値をカプセル化を識別する識別子として用いる。ここでは、送信部７１は、特定の値として０ｘＣＡＦＥＢＡＢＥを用いる。なお、０ｘは１６進数を示す。
【００４０】
図５に示すように、送信部７１は、ソースＱＰＮを付加したカプセル化を行う場合、ＩＭＭフィールドに０ｘＣＡＦＥＢＡＢＥを入れる。そして、送信部７１は、ソースＱＰＮと本来のＩＭＭの値を記憶した送信バッファを用意し、用意した送信バッファへのポインタをスキャッタ／ギャザーリスト３２に加える。
【００４１】
一方、ＱＰ番号をメッセージに付加しないと判断した場合には、送信部７１は、本来の送信データをそのまま送信するようにＨＣＡドライバ８に指示する。ただし、送信部７１は、本来のメッセージのＩＭＭの値が０ｘＣＡＦＥＢＡＢＥである場合には、カプセル化してメッセージを送信する。このカプセル化は余分な処理でありオーバーヘッドであるが、識別子として統計的に出現頻度が小さい値を用いることによって、オーバーヘッドを少なくすることができる。
【００４２】
受信部７２は、ユーザプログラム５がｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖを使って受信ＷＲを登録しようとすると、ｉｂｖ＿ｐｏｓｔ＿ｒｅｃｖ関数の呼び出しを横取りする。そして、受信部７２は、ソースＱＰＮと本来のＩＭＭの値を受け取るための余分の受信バッファを附加してカプセル化メッセージを受信可能な状態で登録する。
【００４３】
図６は、カプセル化されていない受信データの一例を示す図であり、図７はカプセル化された受信データの一例を示す図である。図６に示すように、カプセル化されていない受信データの場合、受信ＷＲ３３のＩＭＭには、ユーザプログラム５が指定した値が設定されている。一方、図７に示すように、カプセル化された受信データの場合、受信ＷＲ３３のＩＭＭには、０ｘＣＡＦＥＢＡＢＥが設定されており、ユーザが指定した値は、追加された受信バッファにソースＱＰＮとともに格納される。
【００４４】
確認部７３は、ユーザプログラム５がｉｂｖ＿ｐｏｌｌ＿ｃｑを使って受信状態を確認しようとすると、受信ＷＣのＩＭＭの値を判定し、ＩＭＭの値が０ｘＣＡＦＥＢＡＢＥでない場合には、ユーザプログラム５に受信ＷＣを返す。
【００４５】
一方、ＩＭＭの値が０ｘＣＡＦＥＢＡＢＥである場合には、確認部７３は、メッセージからＱＰ番号を取り出し、取り出したＱＰ番号が本来の通信相手のＱＰ番号であるか否かを判定する。そして、確認部７３は、取り出したＱＰ番号が本来の通信相手のＱＰ番号である場合には、カプセル化を解除してユーザプログラム５に受信ＷＣを返す。ここで、カプセル化の解除とは、バッファから取り出したＩＭＭをメッセージ内にＩＭＭに書き戻し、ＢＹＴＥ＿ＬＥＮの値を８減らし最後の８バイトを切り捨てることである。一方、取り出したＱＰ番号が本来の通信相手のＱＰ番号でない場合には、確認部７３は、ユーザプログラム５には受信ＷＣを返さない。
【００４６】
また、確認部７３は、ユーザプログラム５がｉｂｖ＿ｐｏｌｌ＿ｃｑを使って送信状態を確認しようとすると、送信ＷＣをユーザプログラム５に返す。
【００４７】
次に、送信ＷＲ３１、受信ＷＲ３３、スキャッタ／ギャザーリスト３４、受信ＷＣのデータ構造について図８〜図１１を用いて説明する。図８は、送信ＷＲ３１のデータ構造の一例を示す図である。図８に示すように、送信ＷＲ３１には、ｓｇ＿ｌｉｓｔと、ｎｕｍ＿ｓｇｅと、ＩＭＭとが含まれる。ｓｇ＿ｌｉｓｔは、スキャッタ／ギャザーリスト３４の配列へのポインタであり、ｎｕｍ＿ｓｇｅは、ｓｇ＿ｌｉｓｔの先にある配列の個数である。ＩＭＭは、受信側に送る即値データである。
【００４８】
図９は、受信ＷＲ３３のデータ構造の一例を示す図である。図９に示すように、受信ＷＲ３３には、ｗｒ＿ｉｄと、ｓｇ＿ｌｉｓｔと、ｎｕｍ＿ｓｇｅと、ＩＭＭとが含まれる。ｗｒ＿ｉｄは、受信ＷＲ３３ごとに設定できる６４ビット値であり、ｓｇ＿ｌｉｓｔは、スキャッタ／ギャザーリスト３４の配列へのポインタである。ｎｕｍ＿ｓｇｅは、ｓｇ＿ｌｉｓｔの先にある配列の個数であり、ＩＭＭは、送信側から送られてきた即値データである。
【００４９】
図１０は、スキャッタ／ギャザーリスト３４の１つのエントリのデータ構造の一例を示す図である。図１０に示すように、スキャッタ／ギャザーリスト３４の１つのエントリには、ａｄｄｒと、ｌｅｎｇｔｈとが含まれる。ａｄｄｒは、スキャッタ／ギャザーリスト３４の１組の開始アドレスすなわちデータが格納されたバッファへのポインタであり、ｌｅｎｇｔｈはスキャッタ／ギャザーリスト３４の１組のバイトサイズすなわちバッファに格納されたデータのサイズである。
【００５０】
図１１は、受信ＷＣのデータ構造の一例を示す図である。図１１に示すように、受信ＷＣには、ｗｒ＿ｉｄと、ｂｙｔｅ＿ｌｅｎと、ＩＭＭと、ｓｌｉｄとが含まれる。ｗｒ＿ｉｄは、受信ＷＲ３３のｗｒ＿ｉｄがコピーされたものであり、ｂｙｔｅ＿ｌｅｎは、受信データのサイズである。ＩＭＭは、送信ＷＲ３１のＩＭＭがコピーされたものであり、ｓｌｉｄは、送信元のＬＩＤである。
【００５１】
次に、送信処理のフローについて説明する。図１２は、送信処理のフローを示すフローチャートである。図１２に示すように、送信部７１は、メッセージをカプセル化するか否かを判定し（ステップＳ１）、カプセル化する場合には、メッセージをカプセル化してから送信する（ステップＳ３）。
【００５２】
一方、カプセル化しない場合には、送信部７１は、ＩＭＭの値は０ｘＣＡＦＥＢＡＢＥか否かを判定し（ステップＳ２）、０ｘＣＡＦＥＢＡＢＥである場合には、メッセージをカプセル化してから送信する（ステップＳ３）。一方、０ｘＣＡＦＥＢＡＢＥでない場合には、送信部７１は、本来のインフィニバンドのメッセージのまま送信する（ステップＳ４）。
【００５３】
このように、送信部７１は、一部のメッセージだけをカプセル化して送ることによって、効率よくメッセージを送信することができる。
【００５４】
次に、受信確認処理のフローについて説明する。図１３は、受信確認処理のフローを示すフローチャートである。なお、確認部７３は、ユーザプログラム５がｉｂｖ＿ｐｏｌｌ＿ｃｑを呼び出したタイミングで受信確認処理を横取りし、代わりに本処理を実行する。
【００５５】
図１３に示すように、確認部７３は、受信ＷＣはあるか否かを判定し（ステップＳ１１）、受信ＷＣがない場合には、ユーザプログラム５に受信ＷＣはなかったことを報告する（ステップＳ１９）。
【００５６】
一方、受信ＷＣがある場合には、確認部７３は、受信ＷＣのＩＭＭを読み（ステップＳ１２）、ＩＭＭは０ｘＣＡＦＥＢＡＢＥか否かを判定する（ステップＳ１３）。その結果、ＩＭＭが０ｘＣＡＦＥＢＡＢＥでない場合には、本来のインフィニバンドのメッセージと判明するので、確認部７３は、そのままユーザプログラム５に受信ＷＣを返す（ステップＳ１４）。
【００５７】
一方、ＩＭＭが０ｘＣＡＦＥＢＡＢＥである場合には、カプセル化されたメッセージと判明するので、確認部７３は、メッセージからソースＱＰＮを取り出す（ステップＳ１５）。具体的には、確認部７３は、受信ＷＣのＷＲ＿ｉｄから受信データを受け取った受信ＷＲ３３を特定し、受信ＷＲ３３のバッファに格納されたデータの最後の８バイト分にソースＱＰＮと本来のＩＭＭが付加されているのでこれを取り出す。そして、確認部７３は、メッセージのソースＱＰＮとＱＰの通信相手のＱＰ番号を比較する（ステップＳ１６）。
【００５８】
その結果、メッセージのソースＱＰＮとＱＰの通信相手のＱＰ番号が一致した場合には、確認部７３は、メッセージのカプセル化を解除し、受信ＷＣをユーザプログラム５に返す（ステップＳ１７）。
【００５９】
一方、メッセージのソースＱＰＮとＱＰの通信相手のＱＰ番号が一致しない場合には、意図しない通信相手からの送信と判明するので、確認部７３は、メッセージ及び受信ＷＣを内部で破棄する。そして、確認部７３は、ユーザプログラム５には受信ＷＣがなかったと報告する（ステップＳ１８）。
【００６０】
このように、確認部７３は、メッセージのソースＱＰＮとＱＰの通信相手のＱＰ番号が一致しない場合にメッセージを内部で破棄するので、不正な送信者からのメッセージの受信を防ぐことができる。
【００６１】
上述してきたように、実施例では、送信部７１は、一定間隔でメッセージにＱＰ番号を付加して送信し、ＩＭＭを用いてＱＰ番号が付加されているか否かを識別できるようにする。そして、確認部７３は、ＩＭＭを用いて受信メッセージにＱＰ番号が付加されているか否かを判定し、ＱＰ番号が付加されている場合だけ、ＱＰ番号のチェックを行う。したがって、中継プロキシ７は、効率よくＱＰ番号をチェックすることができる。
【００６２】
また、実施例では、確認部７３は、メッセージに付加されたＱＰ番号が本来の通信相手のＱＰ番号と異なる場合に、メッセージを破棄するので、ユーザプログラム５が不正に送信されるデータを誤って受信することを防ぐことができる。
【００６３】
また、実施例では、送信部７１は、ＩＭＭを用いてメッセージがカプセル化されているか否かを識別できるようにするので、確認部７３は、メッセージがカプセル化されているか否かを効率よく判定することができる。
【００６４】
なお、図３では、情報処理装置１の機能構成について説明したが、中継プロキシ７は、情報処理装置１が有するＣＰＵ（Central  Processing  Unit）によって実行される。そこで、中継プロキシ７を実行する情報処理装置１のハードウェア構成について説明する。
【００６５】
図１４は、実施例に係る情報処理装置１のハードウェア構成を示す図である。図１４に示すように、情報処理装置１は、メインメモリ２１と、ＣＰＵ２２と、ＨＣＡ２３と、ＨＤＤ（Hard  Disk  Drive）２４とを有する。また、情報処理装置１は、スーパーＩＯ（Input  Output）２５と、ＤＶＩ（Digital  Visual  Interface）２６と、ＯＤＤ（Optical  Disk  Drive）２７とを有する。
【００６６】
メインメモリ２１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ２２は、メインメモリ２１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ２２は、メモリコントローラを有するチップセットを含む。
【００６７】
ＨＣＡ２３は、インフィニバンドにより通信を行う。ＨＤＤ２４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ２５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ２６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ２７は、ＤＶＤの読み書きを行う装置である。
【００６８】
そして、情報処理装置１において実行される中継プロキシ７は、ＤＶＤに記憶され、ＯＤＤ２７によってＤＶＤから読み出されて情報処理装置１にインストールされる。あるいは、中継プロキシ７は、ＨＣＡ２３を介して接続された他の情報処理装置のデータベースなどに記憶され、これらのデータベースから読み出されて情報処理装置１にインストールされる。そして、インストールされた中継プロキシ７は、ＨＤＤ２４に記憶され、メインメモリ２１に読み出されてＣＰＵ２２によって実行される。
【００６９】
図１５は、実施例に係る情報処理システムの構成を示す図である。図１５に示すように、情報処理システム１０は、４つの情報処理装置１を有し、４つの情報処理装置１がスイッチ１１で接続される。なお、ここでは、４つの情報処理装置１と１つのスイッチ１１を有する場合を示したが、情報処理システム１０は、任意の個数の情報処理装置１と複数のスイッチ１１を有することができる。
【符号の説明】
【００７０】
１    情報処理装置
２    ユーザランド
３    カーネルランド
４    ＨＣＡ
５    ユーザプログラム
６    ＩＢユーザライブラリ
７    中継プロキシ
８    ＨＣＡドライバ
１０    情報処理システム
１１    スイッチ
２１    メインメモリ
２２    ＣＰＵ
２３    ＨＣＡ
２４    ＨＤＤ
２５    スーパーＩＯ
２６    ＤＶＩ
２７    ＯＤＤ
３１    送信ＷＲ
３２，３４    スキャッタ／ギャザーリスト
３３    受信ＷＲ
４１    ＱＰ
４２，４３    ＣＱ
４４    ポート
４５    ＳＱ
４６    ＲＱ
７１    送信部
７２    受信部
７３    確認部
【図１】
2015216450.tif 000003
【図２】
2015216450.tif 000004
【図３】
2015216450.tif 000005
【図４】
2015216450.tif 000006
【図５】
2015216450.tif 000007
【図６】
2015216450.tif 000008
【図７】
2015216450.tif 000009
【図８】
2015216450.tif 000010
【図９】
2015216450.tif 000011
【図１０】
2015216450.tif 000012
【図１１】
2015216450.tif 000013
【図１２】
2015216450.tif 000014
【図１３】
2015216450.tif 000015
【図１４】
2015216450.tif 000016
【図１５】
2015216450.tif 000017
【図１６】
2015216450.tif 000018
【図１７】
2015216450.tif 000019