UUID v1 là gì?
Phiên bản UUID 1 là định danh 128-bit dựa trên thời gian (chuỗi 36 ký tự) theo RFC 4122. Nó kết hợp:
- Timestamp: Giá trị 60 bit (độ chính xác 100 nanô giây kể từ 1582-10-15)
- Chuỗi đồng hồ: Bộ đếm 14 bit cho điều chỉnh đồng hồ
- ID nút: Giá trị 48 bit (thường là địa chỉ MAC)
Ví dụ định dạng: 2ed6657d-e927-11eb-9a03-0242ac130003
Cách hoạt động của UUID v1
- Tính toán dấu thời gian hiện tại (khoảng 100ns kể từ 1582-10-15)
- Lấy/tăng chuỗi đồng hồ 14 bit (để đảm bảo duy nhất nếu đồng hồ chạy ngược)
- Lấy ID nút 48 bit (thường từ địa chỉ MAC)
- Đặt bit phiên bản (0001) và bit biến thể (10)
- Tập hợp thành 32 chữ số hex với dấu gạch ngang: định dạng 8-4-4-4-12
Ưu điểm & Cân nhắc
Advantages | Considerations |
---|---|
|
|
Cấu trúc UUID v1
Bits | Content |
---|---|
0-31 | 32 bit thấp của dấu thời gian |
32-47 | 16 bit giữa của dấu thời gian |
48-59 | 12 bit cao của dấu thời gian |
60-63 | Phiên bản (0001 cho v1) |
64-65 | Biến thể (10 cho RFC4122) |
66-79 | Chuỗi đồng hồ (14 bit) |
80-127 | ID nút (48 bit) |
So sánh UUID v1 với các phiên bản khác
Version | Dựa trên | Trường hợp sử dụng | Privacy |
---|---|---|---|
UUID v1 | Thời gian + MAC | ID theo thứ tự thời gian | ⚠️ Tiết lộ địa chỉ MAC |
UUID v3 | Namespace + MD5 | ID xác định | ✅ Riêng tư |
UUID v4 | Random | ID ngẫu nhiên an toàn | ✅ Riêng tư |
UUID v5 | Namespace + SHA-1 | ID xác định | ✅ Riêng tư |
UUID v6 | Thời gian (được sắp xếp lại) | ID có thể sắp xếp | ⚠️ Tiết lộ địa chỉ MAC |
UUID v7 | Thời gian + ngẫu nhiên | ID có thể sắp xếp | ✅ Riêng tư |
Các trường hợp sử dụng phổ biến
- Khóa cơ sở dữ liệu: Cơ sở dữ liệu phân tán
- Nhật ký kiểm toán: Theo dõi theo thứ tự thời gian
- ID giao dịch: Quy trình kinh doanh
- Theo dõi phiên làm việc: Ứng dụng web
- Địa chỉ nội dung: Hệ thống CMS
- Tin nhắn IoT: Giao tiếp thiết bị
Câu hỏi thường gặp
UUID v1 có an toàn về mặt mật mã không?
Không. UUID v1 có thể dự đoán nếu biết dấu thời gian và địa chỉ MAC. Để bảo mật, hãy sử dụng UUID v4 ngẫu nhiên.
Giá trị UUID v1 có thể trùng nhau không?
Trùng lặp rất hiếm xảy ra trong thực tế do độ chính xác dấu thời gian, bộ đếm chuỗi đồng hồ và định danh nút.
Tôi có thể trích xuất thời gian tạo từ UUID v1 không?
Có. Thành phần dấu thời gian có thể được trích xuất bằng các thuật toán phù hợp có trong hầu hết thư viện UUID.
UUID v1 có thể sắp xếp theo thời gian tạo không?
Có, nhưng cần các hàm sắp xếp đặc biệt. So sánh chuỗi trực tiếp không hiệu quả vì các bit thời gian không liên tiếp.
UUID v1 có tiết lộ địa chỉ MAC của tôi không?
Mặc định thì có. Hầu hết triển khai sử dụng địa chỉ MAC làm ID nút. Các triển khai tập trung vào quyền riêng tư có thể dùng ID nút ngẫu nhiên thay thế.