Intern
DNS nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
DNS (Alan Adı Sistemi) internet veya özel ağa bağlı bilgisayarlar, hizmetler veya herhangi bir kaynak için dağıtılmış bir isimlendirme sistemidir. Kullanıcı dostu alan adlarını (örneğin, google.com) sayısal IP adresleriyle (örneğin, 172.217.160.142) eşleştirir.
Çalışma prensibi:
- Sorgu: Kullanıcı tarayıcıya alan adını girdiğinde, istemci yerel DNS sunucusuna (genellikle ağ tarafından otomatik yapılandırılır) sorgu gönderir.
- Önbellek: Sunucu önce önbelleğini kontrol eder. Eğer uygun bir eşleşme bulursa, IP adresini döner.
- Yinelenen sorgu: Önbellekte yoksa, sunucu kök DNS sunucularından birine sorgu gönderir.
- Yetkilendirme: Kök sunucu IP adresini bilmez, ancak
.com,.orggibi üst düzey alan adları (TLD) için yönlendirir. - Yönlendirme: TLD sunucusu, belirli alan adına (
google.com) yetkili DNS sunucusunu gösterir. - Çözümleme: Yetkili sunucu, alan adı için A (Adres) veya AAAA (IPv6 Adresi) kaydını bulur ve uygun IP adresini döner.
- Önbellekleme ve yanıt: Sunucu yanıtı önbelleğe alır ve IP adresini istemciye gönderir.
- Bağlantı: Tarayıcı, alınan IP adresiyle sunucuya bağlanır.
DNS kayıt türleri (en yaygın olanlar):
| Tür | Açıklama |
|---|---|
| A | Ana bilgisayar adını IPv4 adresine eşler. |
| AAAA | Ana bilgisayar adını IPv6 adresine eşler. |
| CNAME | Diğer kanonik isim için takma ad. |
| MX | Alan adı için posta sunucularını gösterir. |
| NS | Alan adı için yetkili DNS sunucularını gösterir. |
| PTR | ters arama (IP -> isim) için kullanılır. |
| TXT | Metin bilgisi saklar (örneğin, SPF). |
C#'daki DNS rolü:
C# ile ağ üzerinde çalışırken, genellikle System.Net isim alanındaki sınıflar kullanılır, örneğin System.Net.Dns, DNS sorguları yapmak için.
// Alan adına göre IP adresleri almak için örnek
using System;
using System.Net;
// Senkron sorgu için
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
Console.WriteLine(ip);
}
// Modern uygulamalarda tercih edilen asenkron sorgu örneği
async Task ResolveHostAsync()
{
IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
foreach (var ip in asyncIpAddresses)
{
Console.WriteLine(ip);
}
}
// GetHostEntry, daha detaylı bilgi döner
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Görevi tamamlamasını bekler
Console.WriteLine($"Host Adı: {hostEntry.HostName}");
Console.WriteLine("Adresler:");
foreach (var addr in hostEntry.AddressList)
{
Console.WriteLine($" {addr}");
}
Console.WriteLine("Takma Adlar:"); // Çoğu zaman boş liste
foreach (var alias in hostEntry.Aliases)
{
Console.WriteLine($" {alias}");
}
DNS, internetin kritik bir bileşenidir ve kullanıcıların ve uygulamaların kolayca hatırlanabilir alan adları kullanmasını sağlar, böylece sayısal IP adresleri yerine daha kullanıcı dostu olur.