GIOPとIIOPについて
An Open Software Platform for Robotic Technologies
Home RtORB
RtORBの開発 >> 開発メモ >> RtORBの開発メモ >> GIOPとIIOPについて

GIOPとIIOPについて

GIOPとIIOPに関しては、いろいろな書籍やWebでも非常にたくさんの情報があります。詳細は、そちらを参照していただきたいのですが、簡単に言えば、GIOPは、CORBAでリモート呼び出しを行うときのプロトコルであり、IIOPは、GIOPをTCP/IP上に実装したものである。
RtORBでは、IIOPのみを実装しています。
ちなみに、GIOPは、General Inter-ORB Protocolであり、IIOPは、Internet Inter-ORB Protocolである。

GIOPの定義

OMGの定義では、 GIOP を以下の3つに分かれています。
  • The Common Data Representation (CDR)の定義
    OMG IDL のデータ型を ORB 間などの低レベルな通信用表現にマッピング。引数や返値を送受信するためのmarshaling/unmarshaling に関する定義
  • GIOP Message Formats
    GIOPのメッセージは、オブジェクト間のリクエストや実装している場所を探したり、通信経路を設定したりすることができる。このGIOPのメッセージは、通常、”GIOP"の文字列から始まる12バイトのヘッダー と CDRで符号化された引数、返値などからなっている。GIOPヘッダーは、下記のように定義してあり、マジックナンバー、バージョン、CDR符号化処理時のバイトオーダー、メッセージのタイプ、メッセージの長さからなっている。このヘッダーは固定長になっているので、通信時にはヘッダーを受信し、その後、リモート呼び出しを行うメソッド名や引数を受信し、処理後に応答を返すことになる。
    RtORBでは、GIOP_execute_request関数でGIOPのメッセージに対応する処理を行っている。また、RtORBで実装しているGIOPメッセージを下記に示す。
 typedef struct {
   octet major;
   octet minor;
 } GIOP_Version;
 
 typedef struct{
   char magic[4];
   GIOP_Version version;
   octet flags;  	/// GIOP1.0 --> byte_code
   octet message_type;
   unsigned long message_size;
 } GIOP_MessageHeader;
GIOPのメッセージの種類は、下記のように定義されており、それぞれのメッセジージ対応する処理を実装していなければならない。
 enum GIOP_MsgType{
   GIOP_Request,
   GIOP_Reply,
   GIOP_CancelRequest,
   GIOP_LocateRequest,
   GIOP_LocateReply, 
   GIOP_CloseConnection,
   GIOP_MessageError,
   GIOP_Fragment,
   GIOP_MsgType_END
 };
  • GIOP Transport Assumptions
    GIOPメッセージの通信路がどのような機能をもつべきか、また、メッセージの送受信時における順序に関する規定。
これらの三つに加えて、IIOPでは、
  • Internet IOP Message Transport
    GIOPメッセージを送受信するためのTCP/IP通信路をどのように開設し、メッセージを送受信するかの規定がある。
また、The Interoperable Object Reference (IOR) は、リモートオブジェクトへの参照の形式も規定されている。IOR は、マジックナンバー、バイトオーダー。タグ付きのプロファイル、プロトコルのバージョン、サーバのアドレスとポート番号、リモートオブジェクトを識別するバオブジェクトキー、コンポーネントのプロファイルを含んだバイト列になっている。要は、実装されているオブジェクトへのアクセスポート(IPアドレスとポート番号)オブジェクトキー、CORBAの実装などの情報がバイト列でひょうげんされたものであるので、これがわかれば、リモートアクセスができることになる。CORBAのNameServerに登録したり、入手するのは、この情報であり、CDR時のオブジェクトであると言える。
GIOPとIIOPは、全く別に規定されているものではなく、むしろGIOPのTCP/IP上の実装としてIIOPは存在している。現在では、CORBAの実装によっては、マルチキャスト上にGIOPを実装したMIOPなどもある。

RtORBにおけるCOBRAオブジェクト
RtORBの開発メモ
Common Data Representation(CDR)