GIOP

GIOP（General Inter-ORB Protocol）とは、分散コンピューティングにおけるObject Request Broker(ORB)間の抽象プロトコルである。このプロトコルに関する標準規格はObject Management Group(OMG)が管理している。

IIOP（Internet Inter-ORB Protocol）とは、TCP/IP上の GIOP の実装である。つまり、抽象プロトコルである GIOP を具現化したプロトコルである。

メッセージ型 
Object Management Group は GIOP を以下の3つに分けて定義している:

The  (CDR) - OMG IDL のデータ型を ORB 間などの低レベルな通信用表現にマッピングする規定
The Interoperable Object Reference (IOR) - リモートオブジェクトへの参照の形式を規定。IOR はタグ付きプロファイルと各種情報を運ぶコンポーネントから構成される。典型的な IOR には、プロトコルのバージョン、サーバのアドレス、リモートオブジェクトを識別するバイト列（オブジェクトキー）からなる。
The defined message formats - オブジェクト要求を行ったり、オブジェクト実装を確定したり、通信路を管理するなどの目的で、メッセージがエージェント間で交換される。メッセージには以下のようなものがある:
Request - リモートメソッドの呼び出し
Reply - Request への応答メッセージ。通常、リモートメソッドから返されるデータを含む。場合によっては、サーバ側へのリダイレクション指示や例外記述が含まれる。
CancelRequest - 前に送った Request をキャンセルする（Replyを待たないことの宣言）。
LocateRequest - そのサーバがあるリモートオブジェクトをサポートしているかを確認するメッセージ。サポートしていない場合は、そのオブジェクトへの要求を送るべきアドレスを尋ねる。
LocateReply - LocateRequest への応答メッセージ。場合によってはそのリモートオブジェクトの新たなアドレスが含まれる。
CloseConnection - サーバから送られ、今後応答しないことを示す。
MessageError - 不正なメッセージへの応答として送られる。外部へのエラー通知には使われない（その場合は管理サーバからのRequestに対するReplyでエラーを通知する）。
Fragment - 前のメッセージの続きを含むメッセージ。長いメッセージは分割して送られる。

バイナリ形式 
バイナリ形式でGIOPメッセージをダンプ表示すると、ヘッダが独特であるために即座に判別できる:
 4文字のASCII文字: G I O P
 2バイトのバージョン番号（1バイト目がメジャーバージョンで現在は 1 のみ）
 1バイトのメッセージフラグ。LSBでエンディアンを示す（0 - ビッグエンディアン、1 - リトルエンディアン）。
 1バイトのメッセージ型（Reply、Request、Fragmentなどを示す）
 4バイトのメッセージ長（ヘッダ部は含めない）

メッセージは整数タグ付きの任意のデータフラグメントの転送にも使われる。そのようなデータフラグメントはサービスコンテクストと呼ばれ、必要に応じて通信標準規格を拡張するのに使われる。例外を投げるサービスコンテキスト、文字コードを指定するサービスコンテキストなどが標準で用意されている。クライアントとサーバのインターセプターでメッセージにサービスコンテキストを付加してやり取りすることも可能である。

GIOP という略称の法的状態 
CORBA、IIOP、OMG などの略称は Object Management Group の登録商標であり、利用には注意が必要である。しかし、GIOP は登録商標ではない（list of OMG marks参照）。したがって、場合によっては GIOP という用語を使った方がよい。

外部リンク 
The official CORBA and GIOP standard（約 10 MB）
Formalization and Validation of the General Inter-ORB Protocol (GIOP) Using Promela and SPIN
Java RMI over IIOP Overview and Guide

オブジェクト指向
通信プロトコル