GUID和UUID之间是否有区别?
我看到了这两个缩写词,我想知道GUID和UUID之间是否有区别?
GUID是微软对UUID标准的实施。
按维基百科:
术语GUID通常是指Microsoft对通用唯一标识符(UUID)标准的实现。
来自同一维基百科文章的更新报价:
RFC 4122本身规定UUID“也被称为GUID”。 所有这些都表明,“GUID”虽然最初是指Microsoft使用的UUID的变体,但它已成为UUID的替代名称......
简单的答案是: 没有区别 ,它们是相同的。 将它们视为一个用作唯一值的16字节(128位)值。 在微软中,他们被称为GUID,但在不使用微软的时候称他们为UUID。
即使是UUID规范的作者和微软声称他们是同义词:
从IETF RFC 4122“通用唯一标识符(UUID)URN命名空间”的简介:“UUID(通用唯一标识符)的统一资源名称命名空间,也称为GUID(全局唯一标识符)。”
从ISO / IEC 9834-8:2004国际标准ITU-T X.667建议书:“UUID也被称为全球唯一标识符(GUID),但本建议书不使用此术语。”
而且,Microsoft甚至声称GUID由UUID RFC规定:“在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的四种变体是:
根据RFC 4122,所有的UUID变体都是“真正的UUID”,那么所有的GUID都是真正的UUID。 对于字面问题“GUID和UUID之间是否有区别”,RFC 4122 UUIDs的答案肯定是否定的: 没有区别 (但受以下第二部分的限制)。
但并非所有GUID都是变体2 UUID(例如,Microsoft COM具有变体3 UUID的GUID)。 如果问题是“GUID和变体2UUID之间是否有区别”,那么答案是肯定的 - 它们可以不同。 有人问这个问题可能不知道变体,他们可能只是在他们说单词“UUID”时想到变体2 UUID(例如,他们隐约知道MAC地址+时间和UUID的随机数算法形式,它们都是版本2)。 在这种情况下,答案是不同的 。
所以答案部分取决于当人们说“UUID”这个词时,他们所想的是什么。 它们是指变体2 UUID(因为这是他们知道的唯一变体)还是所有UUID?
第二部分取决于将哪个规范用作UUID的定义。
如果您认为这很混乱,请阅读ITU-T X.667 ISO / IEC 9834-8:2004,该标准应该与RFC 4122保持一致并与技术上完全兼容。它在第11.2款中增加了一句话:“所有符合本建议书|国际标准的UUID应具有不同的比特,其中第7个字节的第7个字节设置为1,第6个字节的第8个字节设置为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可以存储在具有四个不同字段的结构中,如下所示。 该格式仅与前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更以微软为中心,而UUID更广泛地使用(例如urn:uuid:URN方案和CORBA方面)。
链接地址: http://www.djcxy.com/p/2661.html