Recursive ve Iterative DNS Sorguları Arasındaki Farklar

Recursive (özyinelemeli) ve iterative (yinelemeli) DNS sorguları, farklı DNS kayıtlarının istendiği iki ayrı sorgu türü değildir. Aralarındaki fark, çözümleme işini hangi tarafın tamamladığı ve sorgulanan sunucudan ne tür yanıt beklendiğidir.
Recursive sorguda istemci, recursive resolver (özyinelemeli DNS çözümleyicisi) hizmetinden sorguyu kendi adına tamamlamasını ve son yanıtı vermesini ister. Iterative sorguda ise sorgulanan sunucu elindeki en iyi bilgiyi döndürür; bu bilgi doğrudan cevap olabileceği gibi başvurulabilecek başka bir yetkili sunucuyu gösteren yönlendirme yanıtı da olabilir.
İki model çoğu DNS çözümleme sürecinde birlikte kullanılır. Cihazdaki stub resolver, DNS sorgusunu gönderip tamamlanmış yanıtı bekleyen bileşendir. Bu bileşen recursive resolver hizmetine recursive sorgu gönderir; recursive resolver ise yetkili sunuculara kendisi başvuruyorsa çoğunlukla iterative sorgular kullanır.
Sorgu Sonucunu Hangi Taraf Tamamlar?
DNS, tek bir merkezde bütün alan adlarını tutan basit bir liste değildir. Bu dağıtık ve hiyerarşik yapıda farklı sunucular belirli bölgeler için yetkili bilgi taşır; önbellekler ise daha önce alınan yanıtların geçici olarak kullanılmasını sağlar. Bu nedenle bir sorguyu alan her sunucunun istenen nihai veriyi doğrudan bilmesi gerekmez.
Ayrımı, yönlendirme yanıtından sonra hangi tarafın yeni sorgu gönderdiğine bakarak yapabilirsiniz. Recursive modelde bu işi sorguyu alan recursive resolver üstlenir; iterative modelde ise yönlendirmeyi alan sorgu sahibi bir sonraki sunucuya kendisi başvurur.
Recursive Sorguda Recursive Resolver Hizmetinin Görevi
Recursive sorguda istemci, recursive resolver hizmetinden yalnızca o anda bildiği bilgiyi değil, çözümleme sonucunu ister. Recursive resolver yanıtı geçerli önbelleğinde bulursa doğrudan döndürebilir. Yanıt önbellekte yoksa gerekli DNS sunucularına yeni sorgular gönderir ve ara yönlendirmeleri kendisi takip eder.
Çözümlemenin sonucu her zaman bir IP adresi değildir. İstemci A kaydı yerine MX, NS veya başka bir kaynak kaydı istemiş olabilir. Sonuç, istenen kaynak kaydı, alan adının veya kaydın bulunmadığını bildiren yetkili yanıt ya da bir hata olabilir. Buradaki temel fark, istemcinin ara sunuculara tek tek başvurmak zorunda kalmamasıdır.
Iterative Sorguda Sunucunun Görevi
Iterative sorguda sorguyu gönderen taraf, sunucudan tüm çözümlemeyi tamamlamasını beklemez. Sunucu, kendi yetkili verisinde veya kullanılabilir önbelleğinde doğrudan yanıt varsa bunu döndürür. Hedef başka bir DNS bölgesindeyse o bölgeden sorumlu sunucuları gösteren bir yönlendirme yanıtı verebilir.
Yönlendirme, başarısız veya eksik bir yanıt değildir. Sorguyu gönderen taraf bu bilgiyi kullanarak belirtilen sunuculardan birine yeni sorgu gönderir. Sonuca ulaşmak için gereken adımları iterative sorguları yürüten taraf tamamlar.
Recursive ve Iterative DNS Sorgularının Karşılaştırması
Aşağıdaki tablo iki modeli beklenti, sorumluluk, tipik taraflar ve yanıt biçimi açısından karşılaştırır. Buradaki istemci, DNS sorgusunu gönderen herhangi bir taraf olabilir; bu taraf son kullanıcı cihazındaki stub resolver veya başka sunuculara başvuran recursive resolver olabilir.
| Özellik | Recursive Sorgu | Iterative Sorgu |
|---|---|---|
| Temel beklenti | Tamamlanmış yanıt, alan adının veya kaydın bulunmadığını bildiren yetkili yanıt ya da hata | Sunucunun elindeki en iyi cevap ya da yönlendirme |
| Sonraki adımı atan taraf | Recursive resolver | Yönlendirmeyi alan sorgu sahibi |
| Tipik gönderen | Stub resolver | Recursive resolver |
| Tipik alıcı | Recursive resolver | Kök, üst düzey alan veya yetkili DNS sunucusu |
| Ara yönlendirmeler | Recursive resolver tarafından izlenir ve istemciye ayrı adımlar olarak aktarılmaz | Normal bir yanıt olabilir |
| Önbelleğin etkisi | Geçerli nihai veri varsa dış sorgulara gerek kalmayabilir | Geçerli yanıt veya delegasyon bilgisi bazı adımların atlanmasını sağlayabilir |
| İstek ve yanıt sayısı | Stub resolver açısından genellikle tek istek ve tek tamamlanmış yanıt | Sonuca ulaşan tarafın birden fazla sunucuya sorgu göndermesi gerekebilir |
Stub Resolver, Recursive Resolver ve Yetkili Sunucu Rolleri
Sorgu modelini doğru anlamak için DNS bileşenlerinin rollerini ayırmak gerekir. Stub resolver, recursive resolver ve yetkili sunucu aynı görevi yerine getirmez. Bir bileşenin gönderdiği sorgunun modeli, çözümleme zincirindeki konumuna göre değişebilir.
Stub Resolver
Stub resolver, işletim sistemi veya uygulama içinde çalışan sınırlı bir DNS istemcisidir. Genellikle kök sunuculardan başlayarak delegasyon zincirini izlemez. Cihazda seçili DNS sunucusuna sorgu gönderir ve tamamlanmış yanıt bekler.
Tarayıcı, işletim sistemi veya uygulama düzeyinde ek önbellekler bulunabilir. Bu bileşenlerden biri gerekli veriyi kendi önbelleğinde bulursa recursive resolver hizmetine sorgu göndermez. Bu durum, stub resolver ile recursive resolver arasındaki temel sorumluluk ayrımını değiştirmez.
Recursive Resolver
Recursive resolver, stub resolver bileşeninden aldığı talebi tamamlamaktan sorumludur. Önce kendi önbelleğini kontrol eder; yeterli bilgi yoksa DNS ad alanındaki ilgili sunuculara başvurur. Ara yönlendirmeleri takip eder, elde ettiği sonucu istemciye döndürür ve uygun verileri geçerlilik süreleri boyunca önbelleğinde tutabilir.
Recursive resolver bir sunucuya iterative sorgu gönderdiğinde bu kez sorgu sahibi konumundadır. Aldığı yönlendirmeyi değerlendirir ve bir sonraki sunucuya yeni bir sorgu gönderir. Dolayısıyla aynı recursive resolver, stub resolver bileşeninden recursive talep alırken dış DNS sunucularıyla iterative biçimde çalışabilir.
DNS forwarder (DNS yönlendirici) kullanılan yapılandırmalarda ise sorgu, yanıtı bulması için üst bir DNS hizmetine iletilir. İstemci yine recursive hizmet ister; yetkili sunucuları doğrudan sorgulama işini üst hizmet yürütür. Bu nedenle recursive talep almak, her sunucunun kökten başlayan sorgulamayı kendisinin yapacağı anlamına gelmez.
Yetkili DNS Sunucusu
Yetkili DNS sunucusu, yönettiği bölgedeki verinin asıl kaynağıdır. Kendi yetki alanındaki bir ad için istenen kaydı veya alan adının ya da kaydın bulunmadığını bildiren yetkili yanıtı döndürebilir. Bir alt bölge başka sunuculara devredilmişse bu yetki devrini (delegasyonu) gösteren bilgiyi sunabilir.
Yetkili sunucunun temel görevi, istemci adına bütün DNS hiyerarşisini gezmek değildir. Aynı sunucu yazılımı bazı yapılandırmalarda hem yetkili hem recursive roller üstlenebilse de bu iki rol birbirinden farklıdır. Bu nedenle yanıtın yetkili veriden, önbellekten veya recursive çözümlemeden gelip gelmediğini ayrıca belirlemek gerekir.
Aynı Alan Adında Recursive ve Iterative Sorgu Akışı
Bir cihaz www.example.com için adres bilgisi istediğinde istemci ile recursive resolver arasında recursive, recursive resolver ile DNS hiyerarşisindeki sunucular arasında ise birden fazla iterative sorgu gerçekleşebilir.
İstemci ile Recursive Resolver Arasındaki Sorgu
Stub resolver, www.example.com için tamamlanmış yanıt isteyen sorguyu seçili DNS sunucusuna gönderir. İstemci, kök sunucudan başlayarak hangi DNS sunucularına başvurulacağını kendisi belirlemez. Ara adımları recursive resolver hizmetinin yürütmesini bekler.
Recursive resolver geçerli bir yanıtı önbelleğinde bulursa sonucu doğrudan istemciye döndürür. Bu durumda dış DNS hiyerarşisine yeni sorgu göndermeden recursive talebi tamamlar.
Recursive Resolver ile Yetkili Sunucular Arasındaki Sorgular
Yetkili sunuculara kendisi başvuran recursive resolver, önbellekte yeterli bilgi bulunmadığında gerekli veriyi DNS hiyerarşisinden toplar:
- Kök DNS sunucusuna sorgu gönderir; kök sunucu genellikle .com bölgesinin sunucularını gösteren bir yönlendirme döndürür.
- .com sunucularından birine sorgu gönderir; bu sunucu example.com bölgesinden sorumlu yetkili sunucuları gösterir.
- example.com için yetkili sunucuya sorgu gönderir; yetkili sunucu istenen veriyi veya alan adının ya da kaydın bulunmadığını bildiren yetkili yanıtı döndürür.
- Recursive resolver sonucu stub resolver bileşenine iletir ve önbelleğe alınabilir verileri geçerlilik sürelerine göre saklayabilir.
CNAME takma adı veya ayrıca delege edilmiş bir alt alan varsa ek sorgular gerekebilir. Her DNS çözümlemesi bu adımların tamamını izlemek zorunda değildir. Recursive resolver hizmetinin önbelleğinde .com delegasyonu veya example.com yetkili sunucuları hakkında geçerli bilgi varsa doğrudan hedefe daha yakın bir sunucuya başvurabilir.
Önbelleğin İki Sorgu Modeline Etkisi
Önbellek, recursive resolver hizmetinin her sorguda aynı çözümleme zincirini baştan izlemesini önler. Daha önce alınmış kaynak kayıtları, delegasyon bilgileri ve önbelleğe alınabilen bazı olumsuz sonuçlar geçerlilik süreleri boyunca tekrar kullanılabilir. Böylece yanıt süresi ve yetkili sunuculara gönderilen sorgu sayısı azalabilir.
Önbellekten cevap verilmesi, recursive resolver hizmetinin istemciye karşı sorumluluğunu ortadan kaldırmaz. Recursive resolver yine istemciye tamamlanmış bir yanıt sunar; yalnızca bu yanıtı elde etmek için yeni iterative sorgular yürütmesi gerekmez.
Iterative sorgularda da önbelleğin etkisi vardır. Recursive resolver daha önce öğrendiği geçerli delegasyon bilgisiyle doğrudan hedefe daha yakın bir yetkili sunucuya başvurabilir. Bu nedenle “iterative sorgu” ifadesi, her çözümlemede mutlaka kökten başlanacağı anlamına gelmez.
DNS Mesajındaki RD ve RA İşaretleri
DNS mesaj başlığındaki RD işareti, sorguyu gönderen tarafın recursive çözümleme istediğini belirtir. Stub resolver recursive hizmet istediğinde RD işaretini 1 olarak gönderir. Ancak işaretin açık olması, sunucunun talebi mutlaka yerine getireceğini garanti etmez.
RA işareti, yanıt veren sunucunun recursive hizmet sunabildiğini bildirir. RA işareti yanıtın yetkili olduğunu göstermez; yetkili yanıt niteliği ayrı bir kavramdır. Bir recursive resolver önbellekten cevap verdiğinde RA işaretini taşıyabilir, ancak bu cevap recursive resolver hizmetinin sorgulanan bölge için yetkili olduğu anlamına gelmez.
Iterative sorgular için ayrı bir işaret bulunmaz; bu sorgularda recursive çözümleme istenmediği için RD değeri 0 olur. Sunucu kendi yetkili verisinden, önbelleğinden veya bildiği delegasyon bilgisinden yanıt verebilir. Ancak tek bir RD=0 sorgusu görmek, bütün bir iterative çözümleme yapıldığını kanıtlamaz; yönlendirmeyi hangi tarafın izlediğine de bakılır.







