【山外問道】什么是UUID


本文打印版下載地址

[山外問道]什么是UUID-打印版.pdf

1、UUID的定義

UUID是通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟件建構的標准,是開放軟件基金會組織在分布式計算環境領域的一部分。其目的是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。

UUID用來識別屬性類型,在所有空間和時間上被視為唯一的標識,任何地方產生的任意一個UUID都不會有相同的值。UUID的唯一缺陷在於生成的結果串會比較長,是一個128比特的數值。

目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。

2、UUID的組成

UUID基於當前時間、計數器(counter)和硬件標識(通常為無線網卡的MAC地址)等數據計算生成。

(1)當前日期和時間:UUID的第一個部分與時間有關。

(2)時鍾序列。

(3)全局唯一的IEEE機器識別號:如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。

(4)Java Hibernate中:采用IP-JVM啟動時間-當前時間右移32位-當前時間-內部計數(8-8-4-8-4)來組成UUID。

3、UUID的編碼規則

UUID全局唯一標識符定義為一個字符串主鍵,采用32位數字組成,編碼采用16進制,定義了在時間和空間都完全惟一的系統信息。

(1)1-8位采用系統時間,在系統時間上精確到毫秒級保證時間上的惟一性;

(2)9-16位采用底層的IP地址,在服務器集群中的惟一性;

(3)17-24位采用當前對象的HashCode值,在一個內部對象上的惟一性;

(4)25-32位采用調用方法的一個隨機數,在一個對象內的毫秒級的惟一性。

4、UUID的版本

UUID具有多個版本,每個版本的算法不同,應用范圍也不同。

(1)特例Nil UUID:通常用不到,由全為0的數字組成:00000000-0000-0000-0000-000000000000。

(2)基於時間的UUID

  • ① 基於時間的UUID通過計算當前時間戳、隨機數和機器MAC地址得到。

  • ② 在算法中使用了MAC地址,保證了UUID在全球范圍的唯一性,但會帶來安全性問題。

  • ③ 使用退化的算法,以IP地址來代替MAC地址--Java的UUID這樣實現的。

(3)DCE安全的UUID(Distributed Computing Environment)

DCE安全的UUID和基於時間的UUID算法相同,但會把時間戳的前4位置換為POSIX的UID或GID。這個版本的UUID在實際中較少用到。

(4)基於名字的UUID

  • ① 基於名字的UUID(MD5):通過計算名字和名字空間的MD5散列值得到。

  • ② 基於名字的UUID(SHA1):通過計算名字和名字空間的SHA1散列值得到。

  • ③ 基於名字的UUID保證了UUID的唯一性:

    • ❶ 相同名字空間中不同名字生成的UUID的唯一性;

    • ❷ 不同名字空間中的UUID的唯一性;

    • ❸ 相同名字空間中相同名字的UUID重復生成是相同的。

(5)隨機UUID:根據隨機數,或者偽隨機數生成UUID,這種UUID產生重復的概率是可以計算出來的。

參考資料: 《百度百科-UUID

免責聲明:本文是對《百度百科-UUID》的個人學習總結,屬於個人的學習筆記,僅用於學習和分享交流,不涉及商業用途。如果本文發布的內容侵犯到相關的權益,請及時聯系本人進行刪除!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM