web-dev-qa-db-ja.com

の違いはありますか GUID そしてUUID?

私はこれら二つの頭字語が投げかけられているのを見ます、そして私はGUIDとUUIDの間に何か違いがあるかどうか疑問に思いましたか?

792
Jon Tackabury

単純な答え差なし、それらは同じものです。それらを一意の値として使用される16バイト(128ビット)値として扱います。 Microsoft語ではGUIDと呼ばれますが、Microsoft語を使用しない場合はUUIDと呼ばれます。

UUID仕様とMicrosoftの著者でさえ、それらは同義語であると主張しています。

  • IETFの概要から RFC 4122 "A Universally Unique IDentifier(UUID)URN Namespace": "UUID(Universally Unique IDentifier)としても知られるUniform Resource Name名前空間GUID(Globally Unique IDentifier)。」

  • ITU-T勧告X.667、ISO/IEC 9834-8:2004国際標準 :「UUIDはグローバル一意識別子(GUID)としても知られていますが、この用語はこの勧告では使用されていません」

  • そして、Microsoftも claims a GUIDはUUID RFCで指定されています:「Microsoft WindowsプログラミングおよびWindowsオペレーティングシステムでは、[RFC4122で指定されたグローバル一意識別子(GUID) ]、is ...ユニバーサル一意識別子(UUID)という用語は、Windowsプロトコル仕様でGUIDの同義語として使用されることがあります。

しかし、正解は、質問が「UUID」と言ったときの意味に依存します...

最初の部分は、質問者が「UUID」と言っているときに考えていることによって異なります。

Microsoftの主張は、すべてのUUIDがGUIDであることを暗示しています。しかし、すべてのGUIDは実際のUUIDですか?つまり、すべてのUUIDのセットは、すべてのGUIDのセットの適切なサブセットであるだけですか、それともまったく同じセットですか?

RFC 4122の詳細を見ると、UUIDには4つの異なる「バリアント」があります。これは主に、UUID仕様の作成でこれらの仕様がまとめられる前に、そのような16バイトの識別子が使用されていたためです。 RFC 4122 のセクション4.1.1から、UUIDの4つのvariantsは次のとおりです。

  1. 予約済み、Network Computing Systemの下位互換性
  2. variant RFC 4122で指定されている(そのうち5つのサブバリアントがあり、これらは「バージョン」と呼ばれます)
  3. 予約済み、Microsoft Corporationの下位互換性
  4. 将来の定義のために予約されています。

RFC 4122によると、すべてのUUID variantsは「実際のUUID」であり、すべてのGUIDは実際のUUIDです。 「GUIDとUUIDに違いはありますか?」というリテラルの質問に対する答えは、RFC 4122 UUIDの場合、間違いなくno:no difference (ただし、以下の第2部の対象となります)。

ただし、すべてのGUIDがvariant 2 UUIDであるわけではありません(たとえば、Microsoft COMにはバリアント3 UUIDであるGUIDがあります)。質問が「GUIDとバリアント2 UUIDに違いがあるか」である場合、答えは「はい」になります-それらは異なる場合があります。質問をする人はおそらくvariantsについて知らないでしょう。そして、彼らはvariant 2というUUIDだけを考えているかもしれません。 MACアドレス+時間および乱数アルゴリズム形式のUUIDは、両方ともversions of variant 2)です。その場合、答えはyes differentです。

そのため、答えは、「UUID」という言葉を言うときに、質問する人が何を考えているかにかかっています。バリアント2 UUID(それが認識している唯一のバリアントであるため)またはすべてのUUIDを意味しますか?

2番目の部分は、UUIDの定義として使用されている仕様によって異なります。

混乱を招くと思われる場合は、 ITU-T X.667 ISO/IEC 9834-8:2004 をお読みください。これは、 RFC 4122 と整合し、技術的に完全に互換性があるはずです。 。条項11.2には、「この勧告に準拠するすべてのUUID |国際標準には、オクテット7のビット7が1に設定され、オクテット7のビット6が0に設定されるバリアントビットがあります」という追加文があります。つまり、variant 2 UUIDのみがその標準に準拠しています(これらの2ビット値はvariant 2を意味します)。それが当てはまる場合、準拠するITU-T/ISO/IEC UUIDはvariant 2の値にしかなれないため、すべてのGUIDがITU-T/ISO/IEC UUIDに準拠しているわけではありません。

したがって、実際の答えは、質問が尋ねているUUIDの仕様にも依存します。バリアント2のUUIDだけでなく、すべてのUUIDについて明確に話していると仮定すると、GUIDとIETFのUUIDには違いはありませんがyesの違いGUIDとconforming ITU-T/ISO/IECのUUIDs!

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

(人間が読み取れるテキスト形式ではなく)バイナリでエンコードされた場合、GUID 保存される場合があります は、次の4つの異なるフィールドを持つ構造になります。この形式は、最初の3つのフィールドのバイト順のみが ID標準 と異なります。

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
740
Hoylen

GUIDは、MicrosoftによるUUID標準の実装です。

あたり ウィキペディア

GUIDという用語は通常、Microsoftによる Universally Unique Identifier (UUID)規格の実装を指します。

同じウィキペディアの記事からの最新の引用文:

RFC 4122自体は、UUIDは「GUIDとしても知られている」と述べています。これらのことから、 "GUID"は、もともとはマイクロソフトが使用していたUUIDの亜種を指していましたが、単にUUIDの代替名になっていることがわかります…

635
bdukes

あんまり。 GUIDはMicrosoftを中心としたものですが、UUIDはより広く使用されています(たとえば、 urn:uuid: URNスキームやCORBAなど)。

14
Mark Cidade

GUIDは、UUIDと同じように必ずしも128ビット値ではない領域で長年使用されています。たとえば、 RSS仕様では、GUID を、一意である限り選択した任意の文字列として定義し、使用している値が現在のアイテムへの固定リンクであることを指定する "isPermalink"属性を使用します。シンジケート.

7
Tony Arcieri

Microsoftのguidは、2つの中括弧{}...で囲まれたuuidの形式にすることができます。

1