Tiếng Việt

Công cụ dành cho nhà phát triển · Trình tạo UUID

Đọc UUID bằng tay: Phiên bản và biến thể bit tồn tại ở đâu

· Cách thức hoạt động

uuid mật mã browser-apis

Chuỗi UUID có phần nibble của phiên bản (vị trí 14) và trường biến thể (vị trí 19) được đánh dấu hiển thị các ký tự hex nào tiết lộ loại ID
Hình minh họa vector ToolAcre gốc

Hai ký tự hex trong mỗi UUID cho bạn biết phiên bản nào đã tạo ra nó và nó tuân theo bố cục biến thể nào. Học cách đọc nhanh chúng và biết những gì chúng không thể cho bạn biết.

Hệ thống nào đã tạo ID này? — câu hỏi điều tra nhật ký mà phiên bản nibble có thể trả lời

Chuỗi UUID có 36 ký tự: ba mươi hai chữ số thập lục phân và bốn dấu gạch ngang ở các vị trí 8-4-4-4-12. Hai ký tự trong mỗi UUID—xuất hiện ở vị trí 14 và 19—mã hóa siêu dữ liệu: trường phiên bản cho bạn biết thuật toán nào đã tạo ID và trường biến thể cho bạn biết thuật toán đó tuân theo bố cục tiêu chuẩn nào. Đọc hai ký tự này mà không cần công cụ là kỹ năng điều tra nhật ký: bạn phát hiện UUID trong kết xuất cơ sở dữ liệu hoặc thông báo lỗi và biết ngay đó là dấu thời gian v1 (làm rò rỉ thời gian tạo), giá trị ngẫu nhiên v4 (được tạo từ CSPRNG) hay thứ gì khác. Số phiên bản chiếm các bit 48–51 của UUID, ánh xạ tới ký tự thập lục phân đầu tiên của nhóm thứ ba.

Bố cục 128-bit trong năm nhóm — cách 8-4-4-4-12 ánh xạ vào byte và lý do các nhóm mang tính lịch sử chứ không phải chức năng

Đối với chuỗi xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx, ký tự ở vị trí 14 là phiên bản. RFC 9562 xác định các phiên bản 1 đến 8: v1 là thời gian tạo rò rỉ và dựa trên thời gian Gregorian; v4 là ngẫu nhiên; v7 dựa trên thời gian Unix và có thể sắp xếp được. Phiên bản 0, 9 và phiên bản cao hơn được đặt trước hoặc không được sử dụng. Nếu bạn thấy v1 UUID, bạn biết thời gian và địa chỉ phần cứng đã được trộn vào; nếu bạn thấy v4, ID là byte ngẫu nhiên với các bit phiên bản được đặt; nếu bạn thấy v7, nó sẽ sắp xếp theo thời gian tạo. Phiên bản không phải là tùy chọn; mỗi UUID được tạo đúng đều có một. Trường biến thể chiếm các bit 64–65 của UUID, hai bit quan trọng nhất của octet 8.

Phiên bản nibble — ký tự đầu tiên của nhóm thứ ba, 1 đến 8 nghĩa là gì và 0 hoặc 9 ở đó biểu thị điều gì

Trong biểu diễn văn bản xxxxxxxx-xxxx-xxxx-Nxxx-xxxxxxxxxxxx, ký tự đầu tiên của nhóm thứ tư (vị trí 19) mã hóa biến thể. Đối với biến thể RFC 9562 (tiêu chuẩn trong cách sử dụng hiện đại), ký tự này phải là 8, 9, a hoặc b—biểu diễn thập lục phân của 1000, 1001, 1010 và 1011 ở dạng nhị phân. Bất kỳ ký tự nào khác (0–7, c–f) biểu thị một biến thể khác: 0–7 là NCS khả năng tương thích ngược; c–d là các GUID kế thừa của Microsoft với thứ tự byte cuối nhỏ; e-f được bảo lưu. Khi bạn đọc vị trí 19 và thấy 8, 9, a hoặc b, bạn đang xem RFC 9562 UUID. Bất kỳ giá trị nào khác có nghĩa là các byte tuân theo một cách hiểu khác. Bố cục 128-bit chia thành các octet 0–15 nhưng định dạng văn bản phân tách chúng theo nhóm để dễ đọc chứ không phải để hoạt động.

Trường biến thể — tại sao ký tự đầu tiên của nhóm thứ tư là 8, 9, a hoặc b cho RFC UUID và tín hiệu c/d (kế thừa của Microsoft) hoặc 0–7 (NCS)

Năm nhóm biểu thị ranh giới trường lịch sử: ba trường đầu tiên chứa dấu thời gian và phiên bản trong v1 UUID, trường thứ tư chứa chuỗi đồng hồ và biến thể, trường thứ năm chứa mã định danh nút. Phiên bản 4 và phiên bản UUID mới hơn không sử dụng các tên trường này nhưng các vị trí bit giống nhau vẫn mang phiên bản và biến thể. Đọc v4 UUID có nghĩa là chấp nhận rằng hầu hết 128 bits là tải trọng ngẫu nhiên, nhưng hai trong số đó—tại các vị trí 14 và 19 trong văn bản—được cố định theo tiêu chuẩn. Các bit cố định đó chứng minh ID là biến thể v4 và RFC. Số không UUID là 00000000-0000-0000-0000-000000000000, tất cả đều là số 0 và không có phiên bản nào cả. UUID tối đa là ffffffff-ffff-ffff-ffff-ffffffffffff, tất cả các ký tự f và cũng được đặt trước và không phiên bản.

Ví dụ đã hoạt động - giải mã ba ký tự nhận dạng mẫu theo ký tự, bao gồm v4 và v7

Mọi UUID được tạo đúng khác đều có một phiên bản ở nhóm thứ ba và một biến thể ở nhóm thứ tư. Hãy tự kiểm tra bằng ba ID mẫu: 123e4567-e89b-12d3-a456-426614174000 (v1, biến thể RFC vì vị trí 19 là a); 9b2e4f1a-4f3e-4c1a-8a7d-1b2c3d4e5f60 (v4, biến thể RFC vì vị trí 19 là 8); 018f0c2e-1b5a-7c3d-9e4f-5a6b7c8d9e0f (v7, biến thể RFC vì vị trí 19 là 9). Thanh tra ToolAcre xác nhận kết quả đọc của bạn. Kiểm tra định dạng không thể cho bạn biết ID là duy nhất, tồn tại trong cơ sở dữ liệu của bạn hoặc được tạo an toàn. Phiên bản v1 sử dụng thời gian và phần cứng làm đầu vào, do đó, các UUID v1 giống hệt nhau từ các máy khác nhau có thể dẫn đến sự cố đồng bộ hóa hoặc sai lệch đồng hồ. Phiên bản v4 là ngẫu nhiên, do đó, phiên bản v4 UUID trùng lặp có nghĩa là tính ngẫu nhiên bị hỏng hoặc không thể xảy ra xung đột về mặt thiên văn (khoảng một trên 2. 7 nghìn tỷ UUID có âm thanh ngẫu nhiên).

Nil và Max - hai giá trị hoàn toàn bằng 0 và toàn F không mang phiên bản nào cả

Phiên bản 0 hoặc 9 có nghĩa là chuỗi hoàn toàn không phải là UUID hợp lệ. Đọc phiên bản và biến thể là bước đầu tiên để hiểu ID là gì; kiểm tra xem nó tồn tại hay duy nhất là bước thứ hai và thứ ba, được thực hiện bởi cơ sở dữ liệu và logic nghiệp vụ của bạn. Hiểu vị trí bit giúp gỡ lỗi di chuyển dữ liệu. Khi nhập UUID từ hệ thống cũ, một số công cụ xuất các trường biến thể không khớp với tiêu chuẩn RFC 9562. Trường biến thể của c hoặc d biểu thị Microsoft GUID theo thứ tự byte cuối nhỏ. Các GUID này là số nhận dạng hợp lệ trong hệ thống của Microsoft nhưng không tương tác với RFC 9562 UUID mà không chuyển đổi thứ tự byte. Vị trí đọc 19 sẽ cho bạn biết ngay hệ thống nào đã tạo ID. Nếu bạn thấy 8, 9, a hoặc b thì bạn có RFC tiêu chuẩn UUID.

Kiểm tra định dạng không thể cho bạn biết điều gì - ID đó tồn tại trong cơ sở dữ liệu của bạn, ID đó được tạo an toàn hay ID đó là duy nhất

Nếu bạn thấy c hoặc d thì bạn có Microsoft GUID. Nếu bạn nhìn thấy bất kỳ ký tự nào khác thì mã định danh đó không đúng định dạng hoặc từ một hệ thống khó hiểu. Trình tạo ToolAcre luôn tạo ra RFC 9562 UUID có vị trí 19 là một trong 8, 9, a hoặc b. Trường phiên bản ba bit mã hóa bảy giá trị có thể có (1–7; phiên bản 0 và 8 có ý nghĩa đặc biệt). Phiên bản 1 là dấu thời gian Gregorian, phiên bản 3 là không gian tên dựa trên MD5, phiên bản 4 là ngẫu nhiên, phiên bản 5 là không gian tên dựa trên SHA-1, phiên bản 6 là phiên bản dựa trên dấu thời gian Unix (được đề xuất) 7 có thể sắp xếp dựa trên dấu thời gian Unix (được chuẩn hóa trong RFC 9562), phiên bản 8 được dành riêng cho các định dạng tùy chỉnh. Đọc ký tự vị trí-14 ngay lập tức cho bạn biết thuật toán nào đã được sử dụng. Nếu bạn đang gỡ lỗi UUID xung đột hoặc các loại không mong muốn thì số phiên bản là đầu mối đầu tiên của bạn. ToolAcre tạo UUID v4 độc quyền từ tiền điện tử.

Bài học rút ra: hai ký tự, nhiều ngữ cảnh — sử dụng ToolAcre kiểm tra đúng định dạng để xác nhận phân tích cú pháp chuỗi, sau đó tự đọc phiên bản

nhận được các giá trị ngẫu nhiên; mỗi UUID nó tạo ra đều có 4 ở vị trí 14. Phân tích cú pháp cấu trúc UUID bằng tay là một kỹ năng hữu ích để gỡ lỗi các hệ thống phức tạp không có sẵn công cụ. Trong sự cố sản xuất, bạn có thể cần đọc UUID từ kết xuất cơ sở dữ liệu, nhật ký lỗi hoặc bộ đệm mà không cần chạy một công cụ đặc biệt. Bạn tìm vị trí 14 để xác định phiên bản (có bị rò rỉ thời gian không? có ngẫu nhiên không? có thể sắp xếp được không?). Bạn tìm vị trí 19 để xác định biến thể (có phải là RFC chuẩn không? có phải là GUID của Microsoft không? có được bảo lưu không? ). Hai ký tự này, trong tổng số 36, mang siêu dữ liệu. Các ký tự 34 còn lại là tải trọng: dấu thời gian hoặc byte ngẫu nhiên hoặc dữ liệu dành riêng cho thuật toán khác. Biết được trọng tải đại diện cho điều gì sẽ giúp bạn hiểu được vai trò của ID trong hệ thống của mình.