DNS
Önceki BIND 8 ile DNS NASIL Sonraki
DNS
Bilindiği üzere bir IP ağı üzerinde çeşitli servislere ulaşmak için bu servislerin çalıştığı sistemlerin IP adresi adı verilen ve 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. DNS servisi bu sorunu ortadan kaldırmak amacıyla tasarlanmıştır.
DNS'nin 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 (Alan İsimlendirme Sistemi) tanımlayan RFC 882 ve 883'ü yayınladı. Bunlar daha sonra halen geçerli olan RFC 1034 ve 1035 tarafından güncellendiler.
DNS'nin 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 incelenirse 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 ayrıntılarını içeren tabloları işaret eder. Aynı şekilde bu tablolar da  kendi altlarında bulunan alan adlarını içerir ve ayrıntılarını gösteren tablolara işaret eder.
Açıklanan tablo yapısı Şekil-1 üzerinde gösterilmiştir.
Şekil 3.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.
Şekil 3.2.
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, gov.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 (kök sunucusu)adı verilen en üst seviye alan adı sunucuları üzerinde tanımlanmış durumdadır. Kök sunucular, tr alan adını içeren alan adlarını çözümlemez, çözümü ODTÜ sunucularından ister. Dikkat edilmesi gereken nokta alan adları alındıktan sonra bu alan adındaki isimlendirmenin yerel olarak 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.
DNS Çözümlemesi
DNS'nin 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ı 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 sunucular, birincil alan adı sunucularının verilerini periyodik olarak kendi veritabanına kopyalarlar. Birincil sunucuda herhangi bir problem yaşandığında sorgulama ikincil 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 işlem,  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.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ığındaki 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 ayrıntılı olarak açıklanacaktır) bu adresi sorar. Bu sunucu da (a.root-servers.net) 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.net.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.
Şekil 3.4.
Bu analizde dikkati çekmesi gereken iki önemli nokta bulunmaktadır.
Öncelikle .tr den 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 işlem,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.
IP Adresinden İsim Çözümlemesi
Bölüm 1.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 adresleri 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'den 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 3.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. İncelenen isim sorgusuna benzer bir şekilde IP-isim sorguları da bu yapının yardımıyla 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 okunur.  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.
DNS Önbelleği
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 önbellek (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 etkinleşmesi 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.
Önceki Üst Ana Başlık Sonraki
BIND 8 ile DNS NASIL Başlangıç BIND
Bir Linux Kitaplığı Sayfası