DNS Nedir?
Daha önceki dokümanlarda açıklandığı şekilde bir IP ağı
üzerinde çeşitli servislere ulaşmak için bu servislerin çalıştığı
sistemlerin 4 sayıdan oluşan akılda kalması zor ve son
kullanıcılar için hemen hiçbir şey ifade etmeyen
adreslerinin bilinmesi gerekmektedir. Bu sorunun nasıl
aşıldığı bu dokümanda ele alınacaktır.
1) DNS’in Tarihçesi
Yukarıda bahsedilen isimlendirme sorunu ilk olarak Internetin
babası sayılan ArpaNet zamanında ortaya çıkmıştır. 1970’lerde
ArpaNet günümüz ağları ile karşılaştırılamayacak kadar
küçük durumdaydı ve yalnızca birkaç yüz ile ifade
edilebilen sisteme hizmet veriyordu. Bu tarihlerde isimlendirme
için tek noktada tutulan bir dosyanın bulunması ve diğer tüm
sistemlerin bu dosyayı belli aralıklarla kendi taraflarında güncellemesi
isimlendirme sorununu çözmüştü.
Adres-isim tanımlamalarını içeren HOSTS.TXT dosyası SRI
tarafından SRI-NIC adında bir bilgisayar üzerinde tutulmaktaydı.
Bu dosya her adrese bir isim karşılık gelecek şekilde düzenlenmişti.
ArpaNet üzerindeki yeni isim tanımlamaları ve değişiklikleri
SRI’ya gönderilen e-postalar aracılığı ile yapılıyor ve
HOSTS.TXT’in kopyası ftp ile alınıyordu.
ArpaNet üzerinde TCP/IP kullanımına paralel olarak ortaya çıkan
bağlantı patlaması, isim çözümü için bir çok sorunu da
beraberinde getirdi. Öncelikle isim çakışmaları ortaya çıktı,
sayı artmakta ve her bilgisayara özgün bir isim atanmasında
problemler yaşanmaktaydı. Ayrıca yalnızca isim
çözümlenmesi için oldukça yüksek miktarda bant genişliği
harcanmakta ve buna rağmen kullanılan isim veritabanlarının
uyumlu olması her zaman sağlanamamaktaydı.
Bu durumun ortaya çıkmasından sonra ArpaNet daha
ölçeklenebilir bir isim çözümleme yapısı için araştırmalara
başladı. Paul Mockapetris bu işle görevlendirildi.
Mockapetris 1984 yılında Domain Name System (DNS)’i
tanımlayan RFC 882 ve 883’ü yayınladı. Bunlar daha sonra
halen geçerli olan RFC 1034 ve 1035 tarafından güncellendiler.
2) DNS’in Yapısı
ArpaNet döneminde ortaya çıkan güçlükler nedeniyle DNS
tasarlanırken uçlardaki sistemlerin kendi bilgilerini
kendilerinin güncelleyebileceği bir yapı üzerinde durulmuştur.
Ortaya çıkan yapı ise en üstten başlayarak hiyerarşik bir
şekilde uçlara doğru açılan dağıtık bir varitabanı
mimarisidir. Uçlar birbirleri ile istemci sunucu yöntemiyle
konuşurlar.
Farklı tablolar ile tek veritabanında tanımlanmış bir alan
adı sistemini icenlenirse yapısının hiyerarşik olduğu görülür.
Her alan adı bir başka alan adının altında
tanımlanmıştır. En üst seviyede bulunan bir tablo en üst
seviye alan adları olan ‘.com’, ‘net’ vb içerir ve bu
alan adlarının detaylarını içeren tabloları işaret eder.
Aynı şekilde bu tablolar da kendi altlarında bulunan alan
adlarını içerir ve detaylarını gösteren tablolara işaret
eder.
Açıklana tablo yapısı Şekil 1 üzerinde gösterilmiştir.
Şekil 1
İlk tabloda en üst
seviye alan adları tanımlanmış ve bu tabloda bulunan alt alan
adlarının bilgileri ilgili tablolara işaret edilmiştir. Bu
tek bir veritabanında gösterilmiş bir yapılanmadır. Bu
yapıda tablolar farklı veritabanları üzerinde tutularak
yönetim kolaylaştırılabilir. Bu durumda oldukça dinamik ve
etkin bir mekanizma kurulmuş olur.
Dağıtık veritabanları arasında istemci-sunucu yöntemi ile
bağlantı kurulur.
Az önce belirtilen en üst seviye alan adları arasında ‘com’,
‘net’, ‘gov’ vb yanında ülkelerin ISO tarafından
belirlenen sembolleri de tanımlanmıştır (tr, uk, fr, gr
gibi).
Yukarıdaki açıklamaların paralelinde oluşan hiyerarşik alan
adı ağacı Şekil 2’de gösterilmiştir.
Alan adı dağılımı
en üst seviyeden başlar ve alt dallara doğru bölünür. Bir
alan adının okunuşu en alttan başlayarak en üste doğru
yapılır. Ağacın en altında bulunan alan adı ‘ankara.ulak.net.tr’
şeklinde okunacaktır.
En üst seviye alan adlarının yönetimi InterNIC tarafından
yapılmaktadır. ISO kodları ile tanımlanmış ülke adlarının
yönetimi ülkelere göre değişiklik göstermektedir. Türkiye’nin
ISO kodu olan ‘tr’ üst seviye alan adının yönetimi Orta
Doğu Teknik Üniversitesi (ODTÜ) tarafından yapılmaktadır.
Dolayısıyla ‘com’, ‘net’, ’gov’ gibi alan adlarına
kayıt InterNIC tarafından; ‘com.tr’, ‘net.tr’ gibi alan
adlarına kayıt ODTÜ tarafından yapılmaktadır. Alan adı
kayıtlarıyla ilgili daha fazla bilgi için http://www.internic.net ve http://dns.metu.edu.tr adresleri incelenebilir.
‘ankara.ulak.net.tr’ örneğinde, ‘ankara.ulak.net.tr’
alan adı UlakNet sunucuları üzerinde, ‘ulak.net.tr’ alan
adı ODTÜ sunucuları üzerinde, ‘net.tr’ alan adı yine ODTÜ
sunucuları üzerinde, ‘tr’ alan adı ise root server adı
verilen en üst seviye alan adı sunucuları üzerinde tanımlanmış
durumdadır. Dikkat edilmesi gereken nokta alan adları
alındıktan sonra bu alan adındaki isimlendirmenin lokalde
yapıldığıdır. Bu daha önce de değinilen yönetimin dağıtık
olarak yapılabilmesini sağlar.
Bu bilgiler ışığında ‘xxx.ankara.ulak.net.tr’ ya da ‘yyy.ulak.net.tr’
şeklindeki bir tanımlama UlakNet’in kontrolünde, benzer
şekilde ‘abc.com.tr’ ya da ‘xyz.net.tr’ şeklindeki bir
tanımlama ise ODTÜ’nün kontrolündedir.
İncelenen alan adı ağacı maksimum 127 basamaktan oluşabilir
ki bu da pratikte ulaşılması imkansıza yakın bir değerdir.
3) DNS Çözümlemesi
DNS’in yapısı anlatılırken dağıtık bir veritabanı
şeklinde oluşturulduğu ve uçların birbirbirleriyle istemci
sunucu mantığı ile konuştuğunu söylenmişti. Bu işlevi
yerine getiren programlara alan adı sunucu adı verilir (name
server). Alan adı sunucularını alan adı ağacı üzerinde
nokta ile gösterilirler.
Her alan adı sunucu bir veya birkaç alan adı bilgisini tutar
ve bu alan adları için en yetkili alan adı sunucudur. Diğer
alan adları için sorgularda bu alan adları için en yetkili
alan adı sunucularını bulmaya çalışır.
Alan adı sunucular yerine getirdikleri kritik işlev nedeniyle
genellikle yedekli olarak çalıştırılırlar. Bilgilerin
tutulduğu ana veritabanı birincil alan adı sunucu olarak
adlandırılır. İkincil sunucualr birincil alan adı
sunucularının verilerini periyodik olarak kendi veritabanına
kopyalarlar. Birincil sunucuda herhangi bir problem
yaşandığında sorgulama ikinci sunucular üzerinde yapılır.
DNS çözümlemesi birkaç kademede incelenebilir. UlakNet alan
adı sunucusunu kullanan bir istemcinin ‘www.ulak.net.tr’ adresini sorguladığı durumda sunucu kendi
veritabanında tanımlı olan bu adresi istemciye döndürecektir.
Bu, UlakNet alan adı sunucusu ‘ulak.net.tr’ alan adı
altında bulunan tanımlar için en yetkili sunucu olduğu için
bu şekilde gerçekleşmiştir.
Şekil 3’te bu sorgunun nasıl gerçekleştirildiği görülmektedir.
Şekil 3
Görüldüğü gibi
istemci ‘www.ulak.net.tr’ adresini bu alan adı için en yetkili
durumdaki alan adı sunucusunda sorgulamış ve bu adrese
tanımlanmış IP adresi cevap olarak döndürülmüştür.
Benzer bir sorgulamayı Amerika kıtasında ‘ns.digex.net’
adlı alan adı sunucuyu kullanan bir istemcinin yaptığı durum
incelenebilir.
‘ns.digex.net’ kendisine sorulan ‘www.ulak.net.tr’ için herhangi bir bilgiye sahip değildir.
Bu yüzden kendi veritabanında tanımlı olan en üst seviye
alan adı sunucularına (root-servers, daha sonra detaylı olarak
açıklanacaktır) bu adresi sorar. Bu sunucu
(a.root-servers.net) da ‘www.ulak.net.tr’ için kesin bilgiye sahip değildir. Ancak
‘.tr’ üst seviye alan adının ‘ns1.metu.edu.tr’
sunucusu tarafından kontrol edildiğini bilmektedir. Bu yüzden,
‘ns.digex.net’e sorguyu ‘ns1.metu.edu.tr’ üzerinde
yapması bilgisini iletir. ‘ns.digex.net’ bu kez aynı adresi
‘ns1.metu.edu.tr’ üzerinde sorgulayacaktır. Ancak bu sunucu
da ‘www.ulak.net.tr’ için kesin adresi bilemeyecek ve sorgunun
‘ulak.net.tr’ alan adı sunucusu olan ‘ns.ulak.net.tr’
adresine yönlendirilmesini bildirecektir. Son olarak ‘ns.digex.net’,
‘www.ulak.net.tr’ adresini ‘ns.ulak.ne.tr’ üzerinde
sorgulayacak ve ‘ns.ulak.net.tr’ kendi veritabanında ‘www.ulak.net.tr’ için tanımlı olan 193.140.83.9 adresini döndürecektir.
Bu bilgiye ulaşan ‘ns.digex.net’ de kendi istemcisine bu
bilgiyi iletecektir.
Bu sorgulama şekil 4’te gösterilmiştir.

Bu analizde dikkati
çekmesi gereken iki önemli nokta bulunmaktadır.
Öncelikle ‘.tr’ dan sorumlu gözüken ‘ns1.metu.edu.tr’nin
‘.net.tr’ için ayrı bir alan adı sunucuya yönlendirme
yapmadığı, doğrudan ‘ulak.net.tr’ alan adı sunucusuna yönlendirme
yaptığına dikkat edilmelidir. Bu ‘ns1.metu.edu.tr’ hem ‘.tr’
hem de ‘.net.tr’ için alan adı sunucusu olduğu için bu
şekilde gerçekleşmiştir. Eğer ‘.tr’ ve ‘.net.tr’
farklı sunucular üzerinde tanımlı olsalardı ‘ns.digex.net’
ayrıca ‘.net.tr’den sorumlu sunucuyu da sorgulamak durumunda
kalacaktı.
Dikkat edilmesi gereken diğer nokta ise istemcinin alan adı
sunucuya yalnızca bir sorgu iletmesi ve tüm iş sunucu
tarafından yapıldıktan sonra yalnızca cevabı almasıdır.
Aynı durum ‘ns.digex.net’ diğer alan adı sunuculara
ulaşırken ortaya çıkmamış ve her biri ayrı ayrı
sorgulanmıştır. Bunun sebebi ‘ns.digex.net’ sunucusunun
tekrarlı (recursive), diğer alan adı sunucularının ise
tekrarlı olmayan (iterative) bir şekilde sorgulanmış
olmasıdır.
4) IP’den İsim Çözümlemesi
Bölüm 3’te isimden adres çözümlemesi incelenmiştir. Şu
ana kadar anlatılan yapı tüm sistemin isimden adres çözümü
için tasarlandığı izlenimini vermektedir. Ancak pratik ihtiyaçlar,
IP adresinden isim çözümünü de gerekli kılmaktadır.
Böyle bir sorgunun şu ana kadar incelenen yapı üzerinde nasıl
çalışabileceğine bakalım. İsimlerin indesklenmesine göre
oluşturulmuş hiyerarşik bir sistem görülmektedir. Ancak IP
adreslerin bu yapı üzerinde herhangi bir hiyerarşik yapısı
bulunmamaktadır. Örneğin ‘www.ulak.net.tr’ adresi 193.140.83.9 IP numarası ile
adreslenmişken ‘truva.ulakbim.gov.tr’ adresi 193.140.83.13
IP numarası ile adreslenmiş olabilir. Bu da 193.140.83. ile
başlayan IP’lerin teorik olarak tüm alan adı uzayına
yayılmış olabileceğini gösterir.
Görüldüğü gibi mevcut yapıda bir IP adresinin isim
karşılığını bulmak için veritabanının tümünün
taranması gerekmektedir. Bu ise indeksi olmayan dağınık
durumdaki milyonlarca kaydın taranması anlamına gelir ki
imkansıza yakın bir uğraştır. Bu sorunun çözülebilmesi
için IP adreslerine için de hiyerarşik bir yapının
kurulması gerektiği görülmektedir.
Bu yapıya geçmeden önce IP adreslemenin özelliklerinin hatırlanması
yararlı olacaktır. IP adresleri ilk oktetten son oktete (soldan
sağa doğru) en genelden en özele doğru sıralanırlar. Örneğin
‘193.140’ hem ‘193.140.83.13’ü hem de ‘193.140.83.9’u
içine alır.
Alan adları ise buna ters olarak sağdan sola doğru en genelden
en özele doğru sıralanırlar. Örneğin ‘.tr’ hem
ulak.net.tr’yi hem de ‘metu.edu.tr’yi içine alır.
İki gösterim de genelden özele sıralanabildiğine göre
mevcut hiyerarşik yapılandırmaya IP numaraları için bir üst
seviye alan adı eklenmesi mümkündür. Bu alan adı ‘in-addr.arpa’
şeklinde ifade edilir. Bu üst seviye alan adı 1’dan 255’e
kadar çeşitli alt alanlara bölünür. Bu bölümlemeye 4
okteti tamamlayacak şekilde devam edilebilir. Bu durumda ortaya
çıkan yapı şekil 5’te gösterilmiştir.
Şekil 5
Üst seviye alan adları
arasına ‘arpa’ adında bir alan adı eklenmiştir. Bu alan
adının altında ‘in.addr’ şeklinde bir alan daha
tanımlanmıştır. Bu alan adının altında IP numarasının
ilk okteti alan adı olarak eklenmiş, bunu sırayla IP
numarasının ikinci,üçüncü ve dördüncü oktetleri izlemiştir.
Görüldüğü gibi artık 193.140.83.13 ve 193.140.83.9 IP
numaralarının isim karşılıklarını bulmak son derce
kolaylaşmıştır. İncelene isim sorgusuna benzer bir şekilde
IP-isim sorguları da bu yapının yardımyıla
yapılabilmektedir. Ancak dikkat edilmesi gereken önemli birkaç
nokta bulunmaktadır.
Normal alan adı isimlendirme sisteminde isimler ağacın en
altından en üstüne doğru okunulur. Bu durumda IP numaraları
bilinenin aksine özelden genele doğru okunacaklardır. Örneğin
193.140.83.13 IP numarasının DNS ağacı üzerinde okunuşu
13.83.140.193.in-addr.arpa şeklinde olacaktır.
Dikkat edilmesi gereken diğer bir nokta ise isimden IP’ye
yapılan tanımlama ile IP’den isime yapılan tanımlama
arasında herhangi bir bağlantı bulunmayışıdır. Örneğin
‘www.ulak.net.tr’ adresi DNS üzerinde 193.140.83.9 olarak tanımlıyken,
‘193.140.83.9’ IP adresinin ismi ‘efe.ulakbim.gov.tr’
şeklinde tanımlı olabilir.
5) DNS Cache
DNS çözümlemesinde anlatıldığı şekilde isim çözümleme
işlemi ardışıl olarak alan adı sunucularının
sorgulanmasını gerektirir. Bu işlem oldukça vakit alıcı bir
işlem olabilir ve karşılıklı olarak sistemler üzerinde yük
oluşturduğu gibi hatlar üzerinde yüksek miktarda bant genişliği
harcayabilir.
Bunun engellenmesi ve sorgunun mümkün olan en kısa sürede
sonuçlandırılabilmesi için alan adı sunuculara cache özelliği
eklenmiştir. Bu sayede bir alan adı sunucu daha önce sorguladığı
alan adlarını kendi belleğinde tutarak yeni sorgularda diğer
alan adı sunucularını sorgulamadan doğrudan cevap verebilir.
Bu yukarıda anlatılan olumsuzlukları belli bir derecede
önleyecektir. Ancak burada önemli bir nokta gözden kaçırılmamalıdır.
Sorgulanan alan adında son sorgulamadan sonra değişiklik
yapılmış olabilir. Bu durumda bellekte tutulan bilgi güncelliğini
yitirmiştir ve istemciye hatalı bilgi geri döndürülecektir.
Bu ancak belli bir noktaya kadar kabul edilebilir bir durumdur.
Alan adı tanımları normalde çok sık değiştirilen
tanımlamalar değillerdir. Nadiren değitirildiklerinde de
değişikliğin aktive olması için bir gün gibi bir süre çoğu
zaman yeterlidir. Şu halde bellekte tutulan bilgilerin bir süre
sonra güncelliğini yitirdiği kabul edilmelidir. Bunu
belirleyen değere daha önceki konularda da değinildiği gibi
TTL (Time To Live, Yaşam Süresi) denilmektedir ve her alan adının
tanımlanmasında bu alan adı için geçerli TTL değeri
belirtilir. Bu alan adından sorgulanan bilgiler bellekte TTL süresince
tutulduktan sonra güncelliğini yitirdiği kabul edilir. TTL’in
nasıl tanımlandığı daha sonra incelenecektir.