External Data Representation (XDR)とは
External Data Representation(XDR)は、異なる
コンピュータシステム間でデータを交換するための
シリアライズ形式の一つです。主にONC RPC(
Open Network Computing Remote Procedure Call)のプレゼンテーション層として利用されます。
歴史
XDRは、
サン・マイクロシステムズによって1987年にRFC1014として最初に規格化されました。その後、1995年にRFC1832として改訂され、最新の規格は2006年のRFC4506です。RFC4506は、技術的な変更はRFC1832からありません。XDRは、ONC RPCとともに規格化され、分散コンピューティング環境でのデータ交換の標準として重要な役割を果たしてきました。
特徴
XDRの最大の特徴は、データ表現形式を統一することにあります。これにより、異なるアーキテクチャのシステム間でもデータを正しく解釈できます。DCE/NDR(Distributed Computing Environment Network Data Representation)やMS RPC/NDRと比較すると、XDRは常に統一された表現形式に
正規化される点が異なります。
- - 整数の正規化: 32ビットおよび64ビットの整数は、ネットワークバイトオーダー(ビッグエンディアン)に正規化されます。DCE/NDRではビッグエンディアンとリトルエンディアンの両方をサポートしていますが、XDRでは常にビッグエンディアンに統一されます。
- - 浮動小数点数の正規化: 32ビット、64ビット、128ビットの浮動小数点数は、IEEE形式に正規化されます。DCE/NDRではIEEE形式に加えてVAX、Cray、IBM形式もサポートしていますが、XDRではIEEE形式に統一されます。
- - 文字列の正規化: 文字列はASCII形式に正規化されます。DCE/NDRではASCIIとEBCDICの2形式、MS RPC/NDRではUTF-16もサポートしていますが、XDRではASCIIに統一されます。
- - アラインメントとパディング: データは32ビット単位でアラインされ、必要に応じてパディングが追加されます。これにより、異なるシステム間でのデータの整合性が保たれます。
これらの特徴により、各システムは内部形式とXDR形式との変換ルーチンのみを用意すればよく、異なる表現形式間の変換を個別に実装する必要がありません。しかし、内部形式とXDR形式が異なる場合、同じアーキテクチャ間でのデータ交換でも常に変換オーバーヘッドが発生する可能性があります。例えば、リトルエンディアンの
IA-32/64系同士の通信では、エンディアン変換が常に発生します。
XDRの利用
XDRの利便性を高めるため、`rpcgen`というスタブコンパイラが提供されています。`rpcgen`を使用すると、データの整列化(
シリアライズ)と非整列化(デ
シリアライズ)を行うプログラムを自動的に生成できます。
また、XDRは、ファイルシステムや特定のアプリケーションのデータフォーマットとしても使用されます。これにより、データの互換性が保証されます。
XDRを利用しているプロトコル・システム
XDRは、以下のプロトコルやシステムで利用されています。
- - ONC RPC: XDRはONC RPCの基盤となるデータ表現形式です。
- - NFS (Network File System): ネットワークファイルシステムNFSでデータ交換に使用されています。
- - R言語: 統計解析プログラミング言語であるR言語でデータのシリアライズ形式として使用されます。
- - SpiderMonkey: MozillaのJavaScriptエンジンであるSpiderMonkeyで使用されています。
- - sFlow: ネットワークモニタリングプロトコルであるsFlowで使用されています。
- - libvirt: 仮想化管理ツールであるlibvirtで使用されています。
関連項目
- - ONC RPC: XDRが使用される主要なRPCシステムです。
- - DCE/NDR: XDRと比較されることのある、別のデータ表現形式です。