UUID 命名空间从何而来?

发布于 2024-12-09 08:43:47 字数 655 浏览 0 评论 0原文

UUID 规范定义了 4 个预定义命名空间,它描述为“可能有趣” - 意思是“如果其他人在这个命名空间中生成了 UUID,你可以验证它们”:

  • 6ba7b810-9dad-11d1-80b4-00c04fd430c8 用于 DNS
  • 6ba7b811-9dad-11d1-80b4-00c04fd430c8 用于 URL
  • 6ba7b812-9dad-11d1-80b4-00c04fd430c8 for ISO OID
  • 6ba7b814-9dad-11d1-80b4-00c04fd430c8 for X.500 DN

这些来自哪里?

具体来说;

  • 如果我生成自己的命名空间 UUID,我是否需要特别避免任何事情?
  • 我知道 UUID 空间有多大,但这对冲突有什么影响吗?
  • 为什么他们选择第 4 个八位字节作为一种 UUID“版本号”来增加?
  • 我的问题是否意味着我遗漏了有关 UUID 的一些基本知识?

The UUID specification defines 4 predefined namespaces which it describes as "potentially interesting" - meaning among other things, "if other people have generated UUIDs in this namespace you can verify them":

  • 6ba7b810-9dad-11d1-80b4-00c04fd430c8 for DNS
  • 6ba7b811-9dad-11d1-80b4-00c04fd430c8 for URL
  • 6ba7b812-9dad-11d1-80b4-00c04fd430c8 for ISO OID
  • 6ba7b814-9dad-11d1-80b4-00c04fd430c8 for X.500 DN

Where did these come from?

Specifically;

  • If I'm generating my own namespace UUID do I need to avoid anything in particular?
  • I'm aware how big the UUID space is, but does this have any implication on collisions?
  • Why have they chosen the 4th octet to increase as a kind of UUID 'version number'?
  • Do my questions imply that I'm missing something fundamental about UUIDs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过潦 2024-12-16 08:43:47

首先,要明确的是,整个讨论仅限于版本 3 和版本 3。 5 个 UUID。根据我的(轶事)经验,版本 4(随机)UUID 最常用。

4122 的命名空间 UUID 生成算法模糊地开始:

分配一个 UUID 用作“命名空间 ID”

没有其他提及“命名空间 ID”分配,我和 python 已经找到了 RFC 4122 中列出的四个之外的任何标准化空间。

所以第一个问题的答案是,

  • 如果我要生成自己的命名空间 UUID,我是否需要特别避免任何事情?

您只需避开四个标准名称空间即可。


下一个问题,

  • 我知道 UUID 空间有多大,但这对冲突有什么影响吗?

分为两部分:

  1. 命名空间内的 UUID 会发生冲突吗? 4122 的逐字记录:

    <块引用>

    从[您的]命名空间中的两个不同名称生成的 UUID 应该不同(概率非常高)。

  2. 您的命名空间 UUID 会与其他命名空间发生冲突吗?我找不到直接的答案,因为没有“名称空间 ID”分配的标准,但是 第 4.1.1 节 似乎相关:

    <块引用>

    任何形式的互操作性,与除此之外的变体
    此处定义的内容无法得到保证,并且不太可能成为问题
    练习。


  • 为什么他们选择第 4 个八位字节作为一种 UUID“版本号”来增加?

这有点神秘。幸运的是,我们有 UUID 规范,因此我们可以挖掘它们以获得一些见解。

请注意,(0-索引)第 8 个八位字节在所有情况下均以 8 开头,因此我们正在处理 RFC 4122 变体 UUID。唷。

现在检查八位位组 6 的版本:1,我们正在处理基于时间的版本 1 UUID。

这个答案有一个方便的提取Python日期时间的算法从版本 1 UUID 开始。应用该算法会产生1998 年 2 月 4 日的时间。我还没有找到这个日期的意义。递增第 3 个八位字节会将最小可编码时间间隔 (100ns) 添加到日期中。


  • 我的问题是否意味着我遗漏了有关 UUID 的一些基本知识?

没有。关于 UUID 命名空间的讨论很少,因为随机 UUID 非常简单。

First, to be clear, this whole discussion is limited to version 3 & 5 UUIDs. In my (anecdotal) experience, version 4 (random) UUIDs are most commonly used.

4122's namespaced UUID generation algorithm ambiguously begins:

Allocate a UUID to use as a "name space ID"

There is no other mention of "name space ID" allocation, and neither I nor python have found any standardized spaces beyond the four listed in RFC 4122.

So the answer to your first question,

  • If I'm generating my own namespace UUID do I need to avoid anything in particular?

You only need to avoid the four standard namespaces.


The next question,

  • I'm aware how big the UUID space is, but does this have any implication on collisions?

Has two parts:

  1. Will UUIDs within your namespace collide? Verbatim from 4122:

    The UUIDs generated from two different names in [your] namespace should be different (with very high probability).

  2. Will your namespace UUID collide with other namespaces? I couldn't find a direct answer, since there's no standard for "name space ID" allocation, but the argument in section 4.1.1 seems relevant:

    Interoperability, in any form, with variants other than the one
    defined here is not guaranteed, and is not likely to be an issue in
    practice.


  • Why have they chosen the 4th octet to increase as a kind of UUID 'version number'?

This one's a bit of a mystery. Luckily, we have a spec for UUIDs, so we can mine them for some insight.

Note that the (0-index) 8th octet starts with 8 in all cases, so we're dealing with RFC 4122 variant UUIDs. Phew.

Now check octet 6 for the version: 1, we're dealing with version 1 time-based UUIDs.

This answer has a handy algorithm for extracting python datetimes from version 1 UUIDs. Applying the algorithm yields a time in February 4th, 1998. I have yet to find meaning in this date. Incrementing the 3rd octet adds the smallest encodable time interval (100ns) to the date.


  • Do my questions imply that I'm missing something fundamental about UUIDs?

Nope. There is very little discussion of UUID namespaces, since random UUIDs are so easy.

无人接听 2024-12-16 08:43:47

如果我生成自己的命名空间 UUID,我需要避免什么特别的事情吗?

不会。您的命名空间 UUID 可以是通过任何正常方式生成的任何 UUID。因此,例如,您可能希望生成版本 1 或版本 4 UUID 来用作命名空间 UUID。这可以通过 Linux 或 OS X 上的 uuidgen 程序来完成。或者您可以轻松生成 版本 1版本 4 UUID 在线的。

If I'm generating my own namespace UUID do I need to avoid anything in particular?

No. Your namespace UUID can be any UUID generated in any of the normal ways. So, for example, you would probably want to generate a version 1 or version 4 UUID to use as your namespace UUID. This can be done with the uuidgen program on Linux or OS X. Or you can easily generate a version 1 or version 4 UUID online.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文