Sobes.tech
Intern

Šta je DNS?

sobes.tech АИ

Одговор од АИ

DNS (Domain Name System) je distribuirani sistem imenovanja za računare, usluge ili bilo koje resurse povezane sa internetom ili privatnom mrežom. On povezuje lako čitljive domen imena (na primer, google.com) sa numeričkim IP adresama (na primer, 172.217.160.142).

Princip rada:

  1. Zahtev: Kada korisnik unese domeno ime u pretraživač, klijent šalje zahtev lokalnom DNS kešu (obično automatski konfigurisan od strane mreže).
  2. Keš: Keš prvo proverava da li postoji odgovarajući zapis. Ako postoji, vraća IP adresu.
  3. Rekurzivni zahtev: Ako ne, keš šalje zahtev jednom od korenskih DNS servera.
  4. Delegacija: Korenski server ne poznaje IP adresu, ali ukazuje na server višeg nivoa (Top-Level Domain, TLD) za .com, .org itd.
  5. Delegacija: TLD server ukazuje na ovlašćeni DNS server za određenu domenu (google.com).
  6. Rešavanje: Ovlašćeni server pronalazi zapis A (Address) ili AAAA (IPv6 Address) za domen i vraća odgovarajući IP u keš.
  7. Keširanje i odgovor: Keš čuva odgovor i šalje IP adresu klijentu.
  8. Povezivanje: Pretraživač uspostavlja vezu sa serverom putem dobijene IP adrese.

Tipovi DNS zapisa (najčešći):

Tip Opis
A Povezuje ime hosta sa IPv4 adresom.
AAAA Povezuje ime hosta sa IPv6 adresom.
CNAME Alias za drugo kanonično ime.
MX Ukazuje na poštanske servere za domenu.
NS Ukazuje na ovlašćene DNS servere za domenu.
PTR Koristi se za obrnuto pretraživanje (IP -> ime).
TXT Čuva tekstualne informacije (npr. SPF).

Uloga DNS u C#:

Prilikom rada sa mrežom u C#, često se koriste klase iz prostora imena System.Net, kao što je System.Net.Dns za izvršavanje DNS upita.

// Primer dobijanja IP adresa po domenskom imenu
using System;
using System.Net;

// Za sinhroni zahtev
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Primer asinhronog zahteva (preferira se u savremenim aplikacijama)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry vraća detaljnije informacije o hostu
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Čeka završetak zadatka

Console.WriteLine($"Ime hosta: {hostEntry.HostName}");
Console.WriteLine("Adrese:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliasovi:"); // U većini slučajeva prazan spisak
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS je ključni komponenta Interneta, omogućavajući korisnicima i aplikacijama da koriste lako pamtljive domenske nazive umesto numeričkih IP adresa.