1. ホーム
  2. guid

[解決済み] GUIDとUUIDの違いは何ですか?

2022-03-18 20:52:47

質問

この2つの略語が飛び交っていますが、GUIDとUUIDに何か違いがあるのでしょうか?

どのように解決するのですか?

<ストライク その シンプルな答え です。**違いはありません、それらは同じものです。

2020-08-20更新 : GUID(マイクロソフトが使用)とUUID(RFC4122で定義)は見た目も目的も似ていますが、微妙に、しかし時に重要な相違点があります。 具体的には マイクロソフトGUIDドキュメント GUIDは任意の位置に任意の16進数の数字を含むことができますが、RFC4122では versionvariant フィールドを使用します。 また、[同じリンクにある]GUIDはすべて大文字であるべきですが、UUIDは "小文字で出力し、入力時に大文字と小文字を区別しない"。 これは、コードライブラリ間の非互換性につながる可能性があります ( このような ).

(以下、原文のまま)


16バイト(128ビット)の値として扱い、ユニークな値として使用されます。 Microsoftの用語ではGUIDと呼ばれますが、Microsoftの用語を使わない場合はUUIDと呼んでください。

UUID仕様の作者やマイクロソフト社でさえ、両者は同義語だと主張しています。

  • IETFの紹介文より RFC 4122 "です。 UUID(Universally Unique IDentifier)URN名前空間 GUID(Globally Unique IDentifier)とも呼ばれるUUID(Universally Unique IDentifier)のための統一資源名の名前空間です。

  • から ITU-T Recommendation X.667, ISO/IEC 9834-8:2004 国際標準規格 UUIDはGUID(Globally Unique Identifiers)としても知られていますが、この勧告ではこの用語は使用しません。

  • そして、マイクロソフトはさらに クレーム GUIDはUUID RFCで規定されています: "マイクロソフトWindowsプログラミングとWindowsオペレーティングシステムでは、[RFC4122]で規定されているグローバル一意識別子 (GUID) は、... Windowsのプロトコル仕様では、GUIDの同義語としてUUID(universally unique identifier)という用語が使われることがあります。

しかし 正解 は、質問の「"UUID"」が何を意味するかによりますが......。

最初の部分は、質問者が何を考えて"UUID"と言っているのかによるものです。

マイクロソフトの主張は、すべてのUUIDがGUIDであることを暗示しています。しかし、すべてのGUIDは本当のUUIDなのでしょうか?つまり、すべてのUUIDの集合は、すべてのGUIDの集合の適切な部分集合に過ぎないのでしょうか、それともまったく同じ集合なのでしょうか。

RFC4122の詳細を見ると、UUIDには4種類のquot;variant"が存在することがわかります。 これは、UUIDの仕様策定において、これらの仕様がまとまる前から、このような16バイトの識別子が使用されていたことが主な理由です。の4.1.1節から RFC 4122 という4つの バリアント のUUIDは、以下の通りです。

  1. 予約済み、ネットワークコンピューティングシステム後方互換性
  2. バリアント RFC4122で規定されている(このうち5つのサブバリエーションがあり、これらは"version"と呼ばれる)。
  3. 予約済み、マイクロソフト社後方互換性
  4. 将来の定義のために予約されています。

RFC 4122によると、すべてのUUIDは バリアント は本物のUUIDであり、すべてのGUIDは本物のUUIDです。GUIDとUUIDの間に違いはあるのかという文字通りの質問に対して、答えはRFC 4122のUUIDでは間違いなくNOです。 差はない (ただし、以下の後段を条件とします)。

しかし、すべてのGUIDが バリアント 2 UUID (例えば、Microsoft COM は variant 3 UUID である GUID を持ちます)。もし質問が「GUIDとvariant 2 UUIDs"の間に違いはありますか」であれば、答えはイエスでしょう--それらは異なることがありえます。この質問をする人はおそらく バリアント のみを想定しているのかもしれません。 バリアント 2 UUID"UUID;と言ったときのUUID(例えば、MACアドレス+時間や乱数アルゴリズム形式のUUIDを漠然と知っていて、これらは両方とも バージョン バリアント 2). この場合、答えは はい違う .

つまり、質問者が何を考えてUUIDという言葉を発しているかによって、答えが変わってくるのです。彼らはバリアント2 UUID(それが彼らが認識している唯一のバリアントであるため)を意味するのか、それともすべてのUUIDを意味するのか?

後半は、UUIDの定義としてどの仕様を使っているかによります。

わかりにくいと思われた方は itu-t x.667 iso/iec 9834-8:2004 と技術的に完全に互換性があるとされています。 RFC 4122 . この勧告|国際標準に準拠するすべてのUUIDは、オクテット7のビット7を1に、オクテット7のビット6を0に設定したバリアントビットを持たなければならない(")という文章が、条項11.2に追加されています。ということは バリアント 2 UUIDはその規格に適合している(この2つのビットの値は バリアント 2). もしそうであれば、すべてのGUIDがITU-T/ISO/IEC UUIDに適合しているわけではありません。なぜなら、適合するITU-T/ISO/IEC UUIDは バリアント 2の値です。

したがって、本当の答えは、質問がどの仕様のUUIDについて尋ねているのかにも依存します。私たちが明らかにすべてのUUIDについて話していて、バリアント2のUUIDだけではないと仮定すると、次のようなものがあります。 差はない GUIDとIETFのUUIDの間にある、しかし 差あり GUIDと 適合 ITU-T/ISO/IECのUUID!

バイナリーエンコーディングが異なる可能性がある

バイナリでエンコードされた場合(人間が読めるテキスト形式ではなく)、GUID が格納されることがあります。 の4つのフィールドを持つ構造で、以下のようになります。この形式は、[UUID規格]とは異なります。 8 は、最初の3フィールドのバイト順のみである。

Bits  Bytes Name   Endianness  Endianness
                   (GUID)      RFC 4122

32    4     Data1  Native      Big
16    2     Data2  Native      Big
16    2     Data3  Native      Big
64    8     Data4  Big         Big