Открыть сервис

Глобально уникальный идентификатор

Глобально уникальный идентификатор (англ. Globally Unique Identifier, GUID) — это статистически уникальный 128-битный (16-байтный) идентификатор, используемый в информатике для однозначной идентификации объектов, ресурсов, сущностей или записей в распределённых системах, где отсутствует централизованный орган, назначающий идентификаторы. Основное свойство GUID — чрезвычайно высокая вероятность уникальности каждого экземпляра, что позволяет генерировать их независимо на разных узлах сети без риска коллизий (совпадений). Формально GUID является реализацией стандарта UUID (Universally Unique Identifier), описанного в RFC 4122, и широко применяется в операционных системах, базах данных, программных интерфейсах (API) и протоколах.

История и происхождение

Концепция глобально уникальных идентификаторов возникла в 1980-х годах в рамках разработки распределённых вычислительных систем в корпорации Xerox. Первоначально идентификаторы использовались в протоколах сетевого взаимодействия для идентификации узлов и объектов. В 1990-х годах компания Microsoft адаптировала эту технологию для своей операционной системы Windows, внедрив GUID в качестве стандартного механизма идентификации COM-объектов (Component Object Model). В 2005 году был опубликован стандарт RFC 4122, который унифицировал формат и алгоритмы генерации UUID, включая GUID. С тех пор GUID стал де-факто стандартом для идентификации в распределённых системах, включая базы данных (например, как первичные ключи в таблицах), веб-сервисы (идентификаторы сессий, запросов) и облачные платформы.

Формат и представление

GUID представляет собой 128-битное число, которое обычно записывается в виде 32 шестнадцатеричных цифр, сгруппированных в пять блоков, разделённых дефисами. Стандартный строковый формат выглядит следующим образом:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

где каждый x — шестнадцатеричная цифра (0–9, a–f). Например: 550e8400-e29b-41d4-a716-446655440000. Общее количество символов в строке — 36 (32 цифры и 4 дефиса). В некоторых реализациях (например, в Microsoft Windows) GUID может также записываться в фигурных скобках: {550e8400-e29b-41d4-a716-446655440000}.

Структура битов

128 бит GUID делятся на несколько полей, определённых в RFC 4122:

  • Версия (4 бита) — указывает алгоритм генерации (например, версия 1 — на основе времени и MAC-адреса, версия 4 — случайный).
  • Вариант (2–3 бита) — определяет формат и совместимость с различными стандартами.
  • Остальные биты — содержат временную метку, случайные или хешированные данные, в зависимости от версии.

Классификация и версии

Стандарт RFC 4122 определяет несколько версий UUID, которые различаются алгоритмами генерации и, соответственно, свойствами уникальности и предсказуемости. Наиболее распространённые версии:

Версия 1 (на основе времени и MAC-адреса)

Генерируется с использованием текущего времени (в 100-наносекундных интервалах с 15 октября 1582 года) и 48-битного MAC-адреса сетевого интерфейса устройства. Это гарантирует уникальность во времени и пространстве, но может раскрывать информацию о времени создания и аппаратном обеспечении. Используется в системах, где требуется высокая степень уникальности, но не требуется конфиденциальность.

Версия 4 (случайный)

Генерируется с помощью криптостойкого генератора псевдослучайных чисел. 122 бита являются случайными, 6 бит зарезервированы для версии и варианта. Вероятность коллизии ничтожно мала (примерно 1 на 2^71 для 1 миллиарда сгенерированных GUID). Это наиболее распространённая версия в современных приложениях, так как она не зависит от времени и не раскрывает информацию о системе.

Версия 3 и 5 (на основе хеширования)

Генерируются путём хеширования пространства имён (например, DNS-имени или URL) и имени объекта с помощью MD5 (версия 3) или SHA-1 (версия 5). Обеспечивают детерминированную уникальность: для одного и того же пространства имён и имени всегда будет получен один и тот же GUID. Используются для идентификации объектов, которые должны быть уникальными в рамках заданного пространства.

Версия 2 (DCE Security)

Редко используемая версия, основанная на времени и идентификаторе пользователя или группы в системе DCE (Distributed Computing Environment). Практически не применяется в современных системах.

Применение

GUID широко используются в различных областях информационных технологий:

Операционные системы

  • Microsoft Windows: GUID является основой для идентификации COM-объектов, интерфейсов, типов файлов (CLSID, IID, GUID в реестре). Каждый установленный компонент или приложение может иметь уникальный GUID.
  • Linux и Unix: UUID используются для идентификации файловых систем (например, в /etc/fstab), дисковых разделов (GPT-таблицы) и сетевых интерфейсов.

Базы данных

GUID часто применяются в качестве первичных ключей (Primary Key) в реляционных базах данных (например, Microsoft SQL Server, PostgreSQL, Oracle). Их преимущество — уникальность в распределённых системах, где данные могут создаваться на разных узлах (например, в мобильных приложениях или облачных сервисах). Недостаток — больший размер (16 байт против 4 байт для целочисленного ключа) и потенциальное снижение производительности индексов при случайной генерации.

Программные интерфейсы (API)

В RESTful API и веб-сервисах GUID используются для идентификации ресурсов (например, пользователей, заказов, сессий). Они обеспечивают уникальность без необходимости централизованного счётчика, что упрощает масштабирование и кэширование.

Идентификация объектов

GUID применяются для маркировки цифровых объектов, файлов, документов, электронных писем (например, в формате Outlook) и других сущностей, где требуется однозначная идентификация в распределённой среде.

Критика и ограничения

Несмотря на широкое распространение, GUID имеют ряд недостатков:

  • Размер: 128 бит (16 байт) занимают больше места, чем традиционные 32-битные или 64-битные целочисленные идентификаторы, что может быть критично в системах с ограниченным объёмом памяти или пропускной способностью.
  • Производительность: Случайные GUID (версия 4) могут вызывать фрагментацию индексов в базах данных, так как они не упорядочены по времени. Для решения этой проблемы были разработаны последовательные GUID (например, COMB GUID), которые комбинируют случайную часть с временной меткой.
  • Предсказуемость: Версия 1 может быть предсказана, если известна временная метка и MAC-адрес, что может представлять угрозу безопасности в некоторых контекстах.
  • Человекочитаемость: GUID сложны для восприятия человеком и не подходят для ручного ввода или отображения пользователю.

Интересные факты

  • Вероятность случайной коллизии GUID версии 4 настолько мала, что для её практического возникновения потребовалось бы сгенерировать миллиарды идентификаторов в секунду в течение многих лет.
  • В стандарте RFC 4122 описано также представление GUID в виде 128-битного числа, которое может быть преобразовано в строку, двоичный или шестнадцатеричный формат.
  • Некоторые системы (например, базы данных) используют GUID как альтернативу автоинкрементным ключам для обеспечения уникальности при репликации данных между серверами.

Источники

  • RFC 4122 — A Universally Unique IDentifier (UUID) URN Namespace (2005)
  • Microsoft Developer Network (MSDN) — GUID Structure and Usage
  • ITU-T Recommendation X.667 — Information technology — Open Systems Interconnection — Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 object identifier components
  • Стандарт ISO/IEC 11578:1996 — Information technology — Open Systems Interconnection — Remote Procedure Call (RPC)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →