External Data Representation

External Data Representation (XDR) とは、データ交換用のシリアライズ形式の一つ。

主にONC RPC (SunRPC) のプレゼンテーション層として使われる。

 歴史 
サン・マイクロシステムズによって、1987年にRFC1014、1995年にRFC1832として ONC RPCと同時に規格化され、現在は2006年のRFC4506が最新となっている。（RFC4506はRFC1832からの技術的な変更点はない）

 特徴 
DCE/RPC で使われている DCE/NDR （及び MS RPC/NDR）に比べ、常に統一した表現形式に正規化する点が特徴となっている。

整数（32/64bit）はネットワークバイトオーダー（ビッグエンディアン）に正規化。（DCE/NDRではビッグエンディアンとリトルエンディアンの両形式をサポート）
浮動小数点数（32/64/128bit）はIEEE形式に正規化。（DCE/NDRではIEEE/VAX/Cray/IBM形式）
文字列はASCIIに正規化。（DCE/NDRではASCII/EBCDICの2形式、MS RPC/NDRではUTF16もサポート）
32bit単位にアラインされるよう、必要に応じてパディングされる。
上記の特徴のため、個々の環境では内部形式と統一された正規化形式との変換ルーチンのみ用意すればよい。（DCE/NDRでは各サポート形式と内部形式との変換ルーチンが必要）

その反面、マシンの内部フォーマットと正規化形式と違う場合、同じアーキテクチャ同士のデータ交換でも常に変換オーバーヘッドが発生する。
例）　IA-32/64系（リトルエンディアン）同士の通信では、常にエンディアン変換が発生する。（Sun Workstation同士の通信の場合、ビッグエンディアンのため、エンディアン変換は発生しない）
rpcgenというスタブ・コンパイラを使うと、整列化・非整列化するプログラムが自動的に生成される。

共用ファイルのデータフォーマットとしてXDRのみを使うこともある。

 XDRを利用しているプロトコル・システム 
 ONC RPC
 NFS
 R言語
 SpiderMonkey (Javascriptエンジン)
 sFlow （ネットワークモニタ用プロトコル）
 libvirt

 関連項目 
 ONC RPC
 DCE/NDR

Category:データシリアライゼーションフォーマット
1014