GIOP(General Inter-ORB Protocol)とは
GIOP(General Inter-ORB Protocol)は、
分散コンピューティング環境において、異なる
Object Request Broker(ORB)間の通信を円滑に行うための抽象プロトコルです。
Object Management Group(OMG)によって標準化されており、分散オブジェクトシステムの中核をなす重要な要素です。
IIOP(Internet Inter-ORB Protocol)
GIOPの具体的な実装の一つが、IIOP(Internet Inter-ORB Protocol)です。IIOPはTCP/IP上でGIOPを動作させるためのプロトコルであり、インターネットを介した分散オブジェクト通信を可能にします。GIOPが抽象的なプロトコルであるのに対し、IIOPは具体的な通信手段を提供する役割を担っています。
GIOPの構成要素
OMGはGIOPを、以下の3つの主要な要素に分けて定義しています。
1.
Common Data Representation(CDR)
- OMG IDLで定義されたデータ型を、ORB間の低レベルな通信に適したバイナリ形式に変換するための規定です。異なるシステム間でのデータ交換を可能にするための重要な役割を果たします。
2.
Interoperable Object Reference(IOR)
- リモートオブジェクトへの参照形式を規定します。IORは、プロトコルのバージョン、サーバアドレス、オブジェクトを識別するキーなど、リモートオブジェクトにアクセスするための情報をまとめたものです。クライアントはIORを使用して、リモートオブジェクトを特定し、通信を開始します。
3.
メッセージ形式
- ORB間で交換されるメッセージの形式を規定します。これらのメッセージは、オブジェクトへの要求、応答、通信路の管理など、分散オブジェクト通信に必要な様々な操作を担います。具体的なメッセージには以下のような種類があります。
-
Request: リモートオブジェクトのメソッドを呼び出すためのメッセージ。
-
Reply: Requestに対する応答メッセージ。メソッドの戻り値や例外情報が含まれます。
-
CancelRequest: 送信済みのRequestをキャンセルするメッセージ。
-
LocateRequest: リモートオブジェクトがサーバに存在するかを確認するメッセージ。存在しない場合は、オブジェクトの所在を問い合わせます。
-
LocateReply: LocateRequestに対する応答メッセージ。オブジェクトの新しいアドレスが含まれることがあります。
-
CloseConnection: サーバから送信され、今後の応答を行わないことを通知するメッセージ。
-
MessageError: 不正なメッセージへの応答として送信されるメッセージ。通常のエラー通知には使用されません。
-
Fragment: 長いメッセージを分割して送信する際に、分割されたメッセージの一部を伝えるメッセージ。
GIOPメッセージのバイナリ形式
GIOPメッセージは、特定のバイナリ形式でエンコードされます。これにより、異なるプラットフォームやシステム間で効率的な通信が可能になります。バイナリ形式でダンプされたGIOPメッセージは、以下の特徴的な構造を持ちます。
- - マジックナンバー: 先頭4バイトには、ASCII文字で「G」「I」「O」「P」が格納されています。これにより、GIOPメッセージであることが識別できます。
- - バージョン: 続く2バイトはバージョン番号を示します。最初のバイトがメジャーバージョン(現在は1)、2番目のバイトがマイナーバージョンを表します。
- - メッセージフラグ: 1バイトのメッセージフラグには、エンディアン(バイト順)を示す情報が含まれます(LSBで0はビッグエンディアン、1はリトルエンディアン)。
- - メッセージタイプ: 1バイトでメッセージの種類(Request、Replyなど)を示します。
- - メッセージ長: 4バイトでメッセージの長さ(ヘッダーを除く)を表します。
サービスコンテクスト
GIOPメッセージには、サービスコンテクストと呼ばれるオプションのデータフラグメントを付加することができます。サービスコンテクストは、例外情報や文字コードなどの追加情報を伝えるために使用されます。これにより、プロトコルを拡張し、柔軟な通信を実現できます。クライアントとサーバーのインターセプターを利用して、メッセージにサービスコンテクストを追加することも可能です。
GIOPの法的状況
CORBAやIIOPなどの用語はOMGの登録商標であり、使用には注意が必要です。しかし、GIOPは登録商標ではありません。そのため、場合によってはGIOPという用語を使用する方が適切であることがあります。
まとめ
GIOPは、
分散コンピューティングにおける重要なプロトコルであり、異なるORB間の相互運用性を実現します。メッセージ形式、データ表現、オブジェクト参照などの要素を規定することで、異なるプラットフォームやシステム間での円滑なオブジェクト通信を可能にしています。IIOPは、GIOPの具体的な実装例の一つであり、TCP/IPを介した分散オブジェクト通信を実現します。GIOPの理解は、分散システム開発において非常に重要です。