• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

UUID中中的名字和名字空间代表什么?如何获得?

php 搞代码 3年前 (2022-01-25) 34次浏览 已收录 0个评论
文章目录[隐藏]

如题。在UUID中的v3和v5都需要名字和名字空间,百思不得其解。它们代表是什么?如何获得呢?

回复内容:

如题。在UUID中的v3和v5都需要名字和名字空间,百思不得其解。它们代表是什么?如何获得呢?

记得有次和甲方两个小伙子说道GUID,一字一顿的:“全-球-唯-一-ID”的时候,我看到本来认为技术枯燥无味的他们,眼中放出的光芒!。因为这背后有故事。这title,很响亮。

题主对命名空间和名字,百思不得其解,是因为缺乏问题的上下文,而不是 @_404_MrYes 谈及的细节。首要在于去理解:“要设计一个唯一的ID,会遇到的问题和解决方案”。

设计一个唯一id,是非常有用。比如网卡的mac地址,就得是唯一的。不如地址冲突了,网卡重复地址出现在一个公司的局域网内,发给同一地址的人,有两个或者多个人收到,就乱了。整个局域网协议都以mac地址唯一为基础,因此唯一id,是整个系统的基础。

那么,mac地址如何做到唯一?mac地址会有一个集中的机构制定一个号段,好比1号段给3com,二号给tp-link,etc .然后在这个号段内,每个网卡制造商建立自己的号,一个网卡一个。只要在自己号段内不重复,就可以保证在全世界不重复。类似的做法很多,比如条码,每个商品理论上也需要唯一,做法也类似,就是工商局(条码办)的机构,搞号段。类似的机构很多的。我要是有机会,也想去这样的地方任职,搞搞分配:)。只要是需要资源分配,不能重复的,都需要。比如各个地方的无线电委员会,划分频段资源。航空的航路也需要分配。电信管理局这样的傻部门,就负责028给成都,025给武汉的节奏。无处不在哦。

可是,在互联网的条件下,这样的统一的机构很讨厌啊是不是。去中心化的互联网,天然反感这样的集中和垄断,必然的效率损失,要是这个机构脸难看,门难进,就更加讨厌了。最好是大家做出约定,每个人有自己的命名空间,在自己的地盘内,随便自己撒野,怎么玩都行,要是内部重复了,也只会伤害自己。多自由。这样,核心问题就是,是否有每个机构自己的,“天然的”,命名空间,这个空间内,自己规划自己的名字。所有的名字都在一个或者多个自己的空间内。这就是namespace的含义。

这样,你就比较好了解rfc中的 Motivation,就是去中心化(no cnetralized authority):

One of the main reasons for using UUIDs is that no centralized
authority is required to administer them (although one format uses
IEEE 802 node identifiers, others do not)
ref: http://tools.ietf.org/html/rfc4122#page-13
这样的‘天然的“命名空间,还是真有,比如microsoft 就可以说,microsoft.com就是我的命名空间,在这空间下,microsoft.com/1 就是操作系统部门,/2就是开发部门。microsoft就获得了自由。你公司是foo.com.cn ,那么/1是总经理,/2 。。etc。你获得了自由。专职的分配委员会之类的寄生虫,就不在必要了。

UUID就是这样的思路。名字空间+名字,保证每个机构用自己的名字空间,在名字空间内决定自己的名字,这样保证内部不重复,在外部也就不会重复。

我发现,我很喜欢科普哦。

rfc4122 4.3. Algorithm for Creating a Name-Based UUID

这里面有提及说

  • 同一namespace下,不同name的uuid不同
  • 同一namespace下,相同的name的uuid一定相同
  • 不同的namespace下,uuid一定不同
  • 如果两个name的UUID相同,那么一定是来自同一namespace下的同一name

关于name选取

<code>The concept of name and name space should be broadly construed, and not<p style="color:transparent">2本文来源gao!daima.com搞$代!码网</p><span>搞代gaodaima码</span> limited to textual names.  For example, some name spaces are the domain name system, URLs, ISO Object IDs (OIDs), X.500 Distinguished Names (DNs), and reserved words in a programming language.</code>

如何获取

<code><br>   o  Allocate a UUID to use as a "name space ID" for all UUIDs      generated from names in that name space; see Appendix C for some      pre-defined values.   o  Choose either MD5 [4] or SHA-1 [8] as the hash algorithm; If      backward compatibility is not an issue, SHA-1 is preferred.</code>

v3版本:md5
v5版本:sha-1

BTW,这个问题google一下不就出来了么?


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:UUID中中的名字和名字空间代表什么?如何获得?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址