协慌网

登录 贡献 社区

GUID 和 UUID 之间有什么区别吗?

我看到这两个缩略词被抛出,我想知道 GUID 和 UUID 之间是否有任何区别?

答案

简单的答案是: 没有区别 ,它们是一回事。将它们视为 16 字节(128 位)值,用作唯一值。在 Microsoft 中,它们被称为 GUID,但在不使用 Microsoft 时称其为 UUID。

甚至 UUID 规范的作者和微软都声称他们是同义词:

  • 从 IETF RFC 4122通用唯一标识符(UUID)URN 命名空间 ” 的介绍:“ UUID的统一资源名称命名空间(通用唯一标识符),也称为 GUID(全球唯一标识符)。”

  • 根据ITU-T X.667 建议书,ISO / IEC 9834-8:2004 国际标准 :“UUID 也称为全球唯一标识符(GUID),但本建议书中未使用该术语。”

  • 微软甚至声称 UUID RFC 指定了 GUID:“在 Microsoft Windows 编程和 Windows 操作系统中,[RFC4122] 中指定的全局唯一标识符(GUID)是...... 术语通用唯一标识符(UUID) )有时在 Windows 协议规范中用作 GUID 的同义词。“

正确的答案取决于问题的含义,当它说 “UUID” 时......

第一部分取决于提问者在说 “UUID” 时的想法。

微软的声明暗示所有 UUID 都是 GUID。但是所有 GUID 都是真正的 UUID 吗?也就是说,所有 UUID 的集合只是所有 GUID 集的适当子集,还是完全相同的集合?

查看 RFC 4122 的详细信息,UUID 有四种不同的 “变体”。这主要是因为在创建 UUID 规范之前将这些规范集合在一起之前使用了这样的 16 字节标识符。从RFC 4122 的 4.1.1 节开始,UUID 的四个变体是:

  1. 保留,网络计算系统向后兼容
  2. RFC 4122 中指定的变体 (其中有五个子变体,称为 “版本”)
  3. 保留,Microsoft Corporation 向后兼容
  4. 保留供将来定义。

根据 RFC 4122,所有 UUID 变体都是 “真正的 UUID”,然后所有 GUID 都是真正的 UUID。对于文字问题 “GUID 和 UUID 之间是否有任何区别”,对于 RFC 4122 UUID,答案肯定是否定的: 没有区别 (但受下面第二部分的影响)。

但并非所有 GUID 都是变体 2 UUID(例如,Microsoft COM 具有变体 3 UUID 的 GUID)。如果问题是 “GUID 和变体 2 UUID 之间有什么区别”,那么答案是肯定的 - 它们可以是不同的。有人问这个问题可能不知道变种 ,他们可能只考虑变体 2 UUID,当他们说 “UUID” 这个词时(例如他们模糊地知道 UUID 的 MAC 地址 + 时间和随机数算法形式,其中是变体 2)的两个版本 。在这种情况下,答案是肯定的

所以答案在某种程度上取决于当他们说出 “UUID” 这个词时,他们的想法是什么。它们是指变体 2 UUID(因为这是他们所知道的唯一变体)还是所有 UUID?

第二部分取决于使用哪个规范作为 UUID 的定义。

如果您认为这令人困惑,请阅读ITU-T X.667 ISO / IEC 9834-8:2004 ,该版本应与RFC 4122保持一致并完全在技术上兼容。在第 11.2 条中有一个额外的句子说:“符合本建议书 | 国际标准的所有 UUID 都应具有变量位,其中第 7 位的第 7 位设置为 1,第 7 位的第 6 位设置为 0”。这意味着只有变体 2 UUID 符合该标准(这两个位值表示变体 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 可以存储在具有四个不同字段的结构中,如下所述。此格式与UUID 标准的区别仅在于前 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

GUID 是 Microsoft 对 UUID 标准的实现。

每个维基百科

术语 GUID 通常是指 Microsoft 对通用唯一标识符 (UUID)标准的实现。

来自同一维基百科文章的更新引用:

RFC 4122 本身声明 UUID“也称为 GUID”。所有这些都表明,“GUID” 虽然最初是指 Microsoft 使用的 UUID 变体,但它已成为 UUID 的另一个名称...

并不是的。 GUID 更加以微软为中心,而 UUID 被更广泛地使用(例如,在urn:uuid: URN 方案和 CORBA 中)。