Bir UUID (Evrensel Benzersiz Tanımlayıcı) sürümü, 128 bitlik bir tanımlayıcı üretmek için kullanılan matematiksel algoritmayı, zaman damgası kodlama yöntemini veya entropi kaynağını tanımlar. İlk olarak Internet Engineering Task Force (IETF) tarafından RFC 4122 standardında tanımlanan ve RFC 9562 ile kapsamlı biçimde güncellenen UUID sürümleri, dünya genelindeki dağıtık sistemlerin merkezi bir koordinatöre ihtiyaç duymaksızın kimlikleri tutarlı bir biçimde yorumlamasını temin eder. Her standart UUID fiziksel olarak 128 bit (16 bayt) uzunluğunda olup 4 kısa çizgi içeren 32 karakterlik onaltılık bir dize (8-4-4-4-12) olarak temsil edilse de, bu 128 bitin iç düzeni sürüme bağlı olarak köklü biçimde değişir. Sürümü bilmek; bir kimliğin fiziksel ağ kartı MAC adresini mi, milisaniyelik bir zaman damgasını mı, kriptografik bir ad alanı özetini mi yoksa salt sözde rastgele entropiyi mi içerdiğini netleştirir.

UUID Sürümleri Arka Planda Nasıl Çalışır?

UUID sürümleri, kimlik verilerinin yanı sıra teknik üstverileri taşımak amacıyla 128 bitlik ikili yük içerisinde belirli bit aralıklarını tahsis ederek çalışır. Sürümden bağımsız olarak, tam dört bit (big-endian düzeninde 48 ila 51. bitler) 1’den 8’e kadar işaretsiz bir tamsayı olarak kodlanan sürüm numarasını saklamak üzere kalıcı olarak ayrılmıştır. Eşzamanlı olarak iki ila üç bit (64 ila 66. bitler), tüm kaydın yapısal yerleşimini ve bayt sıralamasını (endianness) belirleyen varyant alanına ayrılmıştır. Bu üstveri bitleri değişmez sabit konumlarda yer aldığından, yazılım ayrıştırıcıları kimliği üreten uygulama, veritabanı motoru veya programlama dili hakkında ön bilgiye ihtiyaç duymadan herhangi bir UUID’nin sürüm ve varyantını doğrudan ve hatasız okuyabilir.

Sürüm Bilgisi Bir UUID İçinde Nerede Saklanır?

Bir UUID’nin kanonik insan tarafından okunabilir dize temsilinde (xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx biçiminde), sürüm bilgisi 13. karakter konumunda (M karakteri) bulunur; bu da kısa çizgilerle ayrılmış üçüncü bloğun ilk karakterine karşılık gelir. İkili (binary) düzeyde bu konum, 48 ila 51. bitleri (şartnamede time_hi_and_version olarak adlandırılan 6. sekizlinin en yüksek 4 biti) kaplar. Örneğin 550e8400-e29b-41d4-a716-446655440000 UUID’sinde üçüncü grup 4 ile başlar ve bu da Sürüm 4’e işaret eder. Üçüncü kısa çizgiden hemen sonraki 17. karakter (N karakteri), en yüksek bitlerinde varyantı kodlar. N karakteri 8, 9, a veya b (ikili 1000 ila 1011) olduğunda, UUID uluslararası IETF RFC 4122 / RFC 9562 standardına eksiksiz uyum sağlar.

Kapsamlı Karşılaştırma: UUID Sürüm 1’den 8’e Kadar

RFC 4122 ve RFC 9562 standartları, farklı bilgi işlem paradigmaları için uyarlanmış sekiz ayrı UUID sürümü tanımlar: Sürüm 1, 60 bitlik bir Gregoryen zaman damgasını üreten bilgisayarın 48 bitlik MAC adresiyle harmanlar; Sürüm 2 (DCE Güvenliği), etki alanı düzeyinde güvenlik belirteçleri için yerel POSIX kullanıcı (UID) ve grup (GID) kimliklerini barındırır; Sürüm 3, bir ad alanı UUID’si ve girdi adı üzerinde MD5 özetlemesi uygulayarak deterministik kimlikler üretir; Sürüm 4, genel amaçlı benzersizlik için 122 bit kriptografik olarak güvenli sözde rastgele entropiden (CSPRNG) yararlanır; Sürüm 5, v3 gibi deterministik kimlikler üretir ancak çakışmalara karşı daha güvenli olan SHA-1 algoritmasını kullanır; Sürüm 6, veritabanı B-Tree indekslerinde sözlüksel sıralamaya izin vermek amacıyla v1’in Gregoryen zaman bitlerini en anlamlı bitler başa gelecek şekilde yeniden düzenler; Sürüm 7, 48 bitlik Unix Epoch milisaniye zaman damgasını milisaniye altı sıra sayacı ve rastgele entropi bitleriyle kodlayarak modern veritabanı birincil anahtarları için altın standart haline gelmiştir; ve Sürüm 8, 1 ila 7 sürümleri dışındaki özel, deneysel veya tedarikçiye özgü 128 bitlik biçimler için standartlaştırılmış bir kapsayıcı sağlar.

UUID Sürümü ve UUID Varyantı Arasındaki Kritik Fark

Yazılım geliştiricileri sıklıkla UUID sürümleri ile varyantlarını birbiriyle karıştırır, oysa bu iki kavram tamamen farklı mimari rollere sahiptir. Varyant; 128 bitlik tanımlayıcının genel ikili yerleşimini, bit yorumlama kuralını ve tarihsel kökenini belirler. Dört adet standart varyant bulunur: Varyant 0 (NCS geriye dönük uyumluluk, en yüksek bit 0), Varyant 1 (IETF RFC 4122 / RFC 9562 standardı, en yüksek bitler 10), Varyant 2 (Microsoft COM GUID geriye dönük uyumluluk, en yüksek bitler 110) ve Varyant 3 (gelecekteki tanımlar için ayrılmış, en yüksek bitler 111). Neredeyse tüm modern yazılımları kapsayan Varyant 1 içerisinde sürüm numarası (1 ila 8), kalan yük bitlerini oluşturmak için uygulanan kesin algoritmayı belirler. Kısacası varyant UUID’nin yapısal dilbilgisini, sürüm ise iç kelime dağarcığını tanımlar.

Canlı Sistemlerde UUID Sürümünü Bilmek Neden Hayatidir?

UUID sürümünü doğru tespit etmek; uygulama performansı, veri güvenliği ve gizlilik uyumluluğu açısından son derece kritiktir. İlk olarak, çağdaş web servislerinde UUID v1 kullanmak sunucunun fiziksel ağ kartı MAC adresini kalıcı olarak açığa çıkardığı ve kesin oluşturulma anını dış dünyaya sızdırdığı için ciddi bir güvenlik açığı teşkil eder. İkinci olarak, veritabanı indeks performansı sürüme bağlı olarak radikal biçimde değişir: Kümelenmiş B-Tree indekslerine (PostgreSQL birincil anahtarları veya MySQL InnoDB tabloları gibi) tamamen rastgele UUID v4 değerleri eklemek sürekli disk parçalanmasına, hafıza sayfa bölünmelerine (page splits) ve ciddi yazma yavaşlamalarına yol açar. Buna karşılık v4 yerine zaman sıralı UUID v7 veya v6 kullanmak, dağıtık benzersizlik avantajını korurken otomatik artan tamsayılarla yarışan bir yazma sürati sağlar. Sürümleri denetlemek, eski sistem verilerini güvenle analiz etmenize ve geçiş planları yapmanıza olanak tanır.

UUID Sürümü Manuel Olarak Nasıl Belirlenir? (13. Hex Kuralı)

Her geliştirici, tek bir satır kod dahi yazmadan "13. Onaltılık Karakter Kuralı" ile standart bir kanonik UUID’nin sürümünü anında tespit edebilir. Standart 8-4-4-4-12 kısa çizgili biçimdeki 36 karakterlik dizinizi inceleyin. İlk iki grubu atlayın (ilk 8 karakter ve sonraki 4 karakter, toplam 12 hex basamağı). Doğrudan üçüncü grubun ilk karakterine bakın. Bu tek onaltılık basamak tam UUID sürümünü ifade eder: 1 rakamı UUID v1’i, 4 rakamı UUID v4’ü, 7 rakamı UUID v7’yi gösterir. Ardından dördüncü bloğun ilk karakterine bakın: Eğer bu karakter 8, 9, a veya b (ya da büyük A, B) ise, tanımlayıcının geçerli bir RFC 4122/9562 standart UUID olduğu kesinleşir. Çevrimiçi aracımız tüm 128 biti tarayarak sürüm nibble’larını, varyant maskelerini ve sözdizimini eşzamanlı doğrulayarak bu tespiti saniyesinde gerçekleştirir.

Pratik Geliştirici Kullanım Alanları ve Mimari En İyi Uygulamalar

Modern yazılım mühendisliğinde her UUID sürümü belirli bir mimari senaryoda parlar. UUID v4; geçici güvenlik belirteçleri, oturum kimlikleri, şifre sıfırlama gizli anahtarları, OAuth durum parametreleri ve kronolojik sıralamanın gerekmediği ya da istenmediği dağıtık izleme kimlikleri için varsayılan tercihtir. UUID v7; milisaniyelik zaman sıralaması, yüksek önbellek yerelliği ve sıfır veritabanı koordinasyonu gerektiren ilişkisel veritabanı birincil anahtarları, olay akışları ve mesaj kuyrukları için tartışmasız en iyi uygulamadır. UUID v5; alan adlarından veya URL’lerden mikroservisler arasında yeniden üretilebilir kimlikler elde etmek gibi deterministik eşlemeler için mükemmeldir. Son olarak, Nil UUID (00000000-0000-0000-0000-000000000000) tipli şemalarda başlatılmamış boş nesneleri temsil ederken, Max UUID (ffffffff-ffff-ffff-ffff-ffffffffffff) aralık sorgularında tavan sınır değeri olarak görev yapar.

UUID Sürümleri Hakkında Sıkça Sorulan Sorular

Bir UUID’ye sadece bakarak hangi sürüm olduğunu nasıl anlarım?

Kanonik 36 karakterlik bir UUID’nin 13. onaltılık basamağına (ikinci kısa çizgiden hemen sonraki ilk karakter: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx) bakarak sürümü belirleyebilirsiniz. M konumundaki karakter sürüm numarasını (1 ila 8) temsil eder. Örneğin "550e8400-e29b-41d4-a716-446655440000" dizesinde üçüncü bloğun başındaki "4", bunun bir UUID Sürüm 4 olduğunu doğrular.

Bir UUID 1 ila 8 dışında bir sürüm basamağına sahipse ne anlama gelir?

Eğer 13. hex karakteri 0, 9 veya "a" ila "f" arasında bir harf ise (tüm bitleri sıfır olan Nil UUID ve tüm bitleri bir olan Max UUID hariç), tanımlayıcı standart dışıdır. Bu durum tanımlayıcının özel bir şirket içi biçim, bozulmuş bir veri özeti veya RFC 4122 / RFC 9562 standartlarına uymayan eski bir sistem kimliği olduğunu gösterir.

İki farklı UUID sürümü tamamen aynı görsel biçime sahip olabilir mi?

Evet. Tüm standart UUID sürümleri tamamen aynı dış yapısal biçimi paylaşır: 128 bitlik veri, 4 kısa çizgi ile 8-4-4-4-12 düzeninde 32 onaltılık basamak halinde sunulur. Farklı sürümler arasındaki tek görsel ayrım, 13. karakterdeki sürüm nibble’ı ile 17. karakterdeki varyant bitleridir.

UUID sürüm 4 ile sürüm 7 arasındaki temel fark nedir?

UUID v4, CSPRNG tarafından üretilen 122 bitlik sözde rastgele sayılardan oluşur, hiçbir kronolojik sıralamaya sahip değildir ve veritabanlarında B-Tree indeks parçalanmasına neden olur. UUID v7 ise kimliğin başında 48 bitlik milisaniye hassasiyetli Unix zaman damgası ve ardından rastgele entropi barındırarak dağıtık benzersizliği doğal zaman sıralamasıyla buluşturur.

UUID’m bir sürüm numarasına sahip olduğu halde neden geçersiz olarak işaretleniyor?

Geçerli bir UUID aynı anda birden fazla standardı karşılamalıdır: tam olarak 32 onaltılık karakter (0-9, a-f) içermeli, 8, 13, 18 ve 23. konumlarda tam 4 kısa çizgiye sahip olmalı ve dördüncü blokta geçerli varyant bitleri (genellikle 8, 9, a veya b) barındırmalıdır. Geçersiz karakterler veya yanlış uzunluk varsa, 13. basamakta ne yazdığına bakılmaksızın kimlik geçersiz sayılır.

Nil UUID nedir ve hangi sürüme aittir?

Nil UUID, RFC 4122 §4.1.7 ve RFC 9562 §5.9’da tanımlanan ve tüm 128 biti sıfıra ayarlanmış (00000000-0000-0000-0000-000000000000) özel bir tanımlayıcıdır. Aktif bir üretim algoritmasından kaynaklanmaz; sürüm basamağı teknik olarak 0’dır ve evrensel olarak başlatılmamış ya da boş bir yer tutucu olarak tanınır.

RFC 9562 standardı ile tanıtılan Max UUID nedir?

Max UUID, RFC 9562 §5.10 şartnamesinde tanıtılan ve tüm 128 biti bire ayarlanmış (ffffffff-ffff-ffff-ffff-ffffffffffff) özel bir kimliktir. Sürüm basamağı "f" harfidir ve veritabanı sorgularında ya da dağıtık sistemlerde sıralama tavanı ve resmi sınır nöbetçisi (sentinel) olarak işlev görür.

Bu araç sürüm tespiti için UUID’lerimi bir sunucuya gönderiyor mu?

Hayır. FastUUIDGenerator tüm sürüm tespiti, sözdizimi doğrulama ve bit ayrıştırma işlemlerini istemci tarafı JavaScript ile %100 yerel olarak tarayıcınızda gerçekleştirir. Hiçbir tanımlayıcı veya kayıt ağ üzerinden iletilmez veya sunucularda depolanmaz.