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:
- Zahtev: Kada korisnik unese domeno ime u pretraživač, klijent šalje zahtev lokalnom DNS kešu (obično automatski konfigurisan od strane mreže).
- Keš: Keš prvo proverava da li postoji odgovarajući zapis. Ako postoji, vraća IP adresu.
- Rekurzivni zahtev: Ako ne, keš šalje zahtev jednom od korenskih DNS servera.
- Delegacija: Korenski server ne poznaje IP adresu, ali ukazuje na server višeg nivoa (Top-Level Domain, TLD) za
.com,.orgitd. - Delegacija: TLD server ukazuje na ovlašćeni DNS server za određenu domenu (
google.com). - Rešavanje: Ovlašćeni server pronalazi zapis A (Address) ili AAAA (IPv6 Address) za domen i vraća odgovarajući IP u keš.
- Keširanje i odgovor: Keš čuva odgovor i šalje IP adresu klijentu.
- 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.