Sobes.tech
Intern

Kas ir DNS?

sobes.tech AI

Atbilde no AI

DNS (Domēnu nosaukumu sistēma) — tas ir izplatīts nosaukumu sistēma datoriem, pakalpojumiem vai jebkuriem resursiem, kas ir pieslēgti internetam vai privātai tīklam. Tā sasaista lasāmus domēna vārdus (piemēram, google.com) ar skaitliskām IP adresēm (piemēram, 172.217.160.142).

Darba princips:

  1. Pieprasījums: Kad lietotājs ievada domēna vārdu pārlūkprogrammā, klients nosūta pieprasījumu vietējam DNS kešatmiņai (parasti automātiski konfigurēts tīklā).
  2. Kešatmiņa: Kešatmiņa vispirms pārbauda savu kešatmiņu. Ja ir atrasta atbilstoša sasaistīšana, tā atgriež IP adresi.
  3. Rekursīvs pieprasījums: Ja kešatmiņā nav, kešatmiņa nosūta pieprasījumu vienam no saknes DNS serveriem.
  4. Deleģēšana: Saknes serveris nezin IP adresi, bet norāda uz augstākā līmeņa serveri (Top-Level Domain, TLD) piemēram, .com, .org u.c.
  5. Deleģēšana: TLD serveris norāda uz pilnvarotu DNS serveri konkrētajam domēnam (google.com).
  6. Atrisināšana: Pilnvarotais serveris atrod A (Adrese) vai AAAA (IPv6 Adrese) ierakstu domēna vārdam un atgriež atbilstošo IP adresi kešatmiņai.
  7. Kešatmiņa un atbilde: Kešatmiņa saglabā atbildi un nosūta IP adresi klientam.
  8. Savienojums: Pārlūkprogramma izveido savienojumu ar serveri pēc saņemtās IP adreses.

DNS ierakstu veidi (visbiežāk sastopamie):

Veids Apraksts
A Sasaista hosta nosaukumu ar IPv4 adresi.
AAAA Sasaista hosta nosaukumu ar IPv6 adresi.
CNAME Pseudo-nosaukums citam kanoniskajam nosaukumam.
MX Norāda pasta serverus domēnam.
NS Norāda pilnvarotus DNS serverus domēnam.
PTR Izmanto atpakaļsaišu meklēšanai (IP -> nosaukums).
TXT Glabā teksta informāciju (piemēram, SPF).

DNS loma C#:

Darbojoties ar tīklu C#, bieži tiek izmantoti no System.Net telpas klases, piemēram, System.Net.Dns, lai veiktu DNS pieprasījumus.

// Piemērs, kā iegūt IP adreses pēc domēna vārda
using System;
using System.Net;

// Sinhronai piekļuvei
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Asinhronais pieprasījums (ieteicams mūsdienu lietojumprogrammām)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry sniedz detalizētāku informāciju par hostu
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Gaidām uzdevuma pabeigšanu

Console.WriteLine($"Host Name: {hostEntry.HostName}");
Console.WriteLine("Addresses:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliases:"); // lielākajā daļā gadījumu tukšs saraksts
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS ir kritiski svarīga interneta sastāvdaļa, kas ļauj lietotājiem un lietojumprogrammām izmantot viegli atceramus domēna vārdus vietā skaitliskajām IP adresēm.