Sobes.tech
Intern

Kas yra DNS?

sobes.tech AI

Atsakymas iš AI

DNS (Domenų vardų sistema) yra paskirstyta vardų sistema kompiuteriams, paslaugoms ar bet kuriems ištekliams, prijungtiems prie interneto ar privačios tinklo. Ji sujungia lengvai skaitomus domeno vardus (pavyzdžiui, google.com) su skaitmeniniais IP adresais (pavyzdžiui, 172.217.160.142).

Veikimo principas:

  1. Užklausa: Kai vartotojas įveda domeno vardą naršyklėje, klientas siunčia užklausą vietiniam DNS talpyklai (dažniausiai automatiškai sukonfigūruotai tinklo).
  2. Talpykla: Talpykla pirmiausia tikrina, ar yra atitinkamas įrašas. Jei taip, grąžina IP adresą.
  3. Rekursinė užklausa: Jei nėra, talpykla siunčia užklausą vienam iš šakninių DNS serverių.
  4. Delegavimas: Šakninis serveris nežino IP adreso, bet nurodo į aukštesnio lygio (Top-Level Domain, TLD) serverį, pavyzdžiui, .com, .org ir pan.
  5. Delegavimas: TLD serveris nurodo į įgaliotą DNS serverį konkrečiam domenui (google.com).
  6. Sprendimas: Įgaliotinas serveris randa A (Address) arba AAAA (IPv6 Address) įrašą domeno vardui ir grąžina atitinkamą IP adresą talpyklai.
  7. Talpykla ir atsakymas: Talpykla saugo atsakymą ir siunčia IP adresą klientui.
  8. Ryšys: Naršyklė užmezga ryšį su serveriu naudodama gautą IP adresą.

DNS įrašų tipai (dažniausiai naudojami):

Tipas Aprašymas
A Susieja hostname su IPv4 adresu.
AAAA Susieja hostname su IPv6 adresu.
CNAME Pseudonimas kitam kanoniniam vardui.
MX Nurodo pašto serverius domenui.
NS Nurodo įgaliotus DNS serverius domenui.
PTR Naudojamas atvirkštiniam paieškai (IP -> vardas).
TXT Laikina tekstinė informacija (pavyzdžiui, SPF).

DNS vaidmuo C#:

Dirbant su tinklu C# dažnai naudojami iš System.Net erdvės klasės, tokios kaip System.Net.Dns, DNS užklausoms vykdyti.

// Pavyzdys, kaip gauti IP adresus pagal domeno vardą
using System;
using System.Net;

// Sinchroninio užklausos pavyzdys
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Asinchroninio užklausos pavyzdys (pageidautina šiuolaikinėse programose)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry grąžina išsamesnę informaciją apie hostą
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Laukia užbaigimo

Console.WriteLine($"Hosto vardas: {hostEntry.HostName}");
Console.WriteLine("Adresai:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliasai:"); // Daugeliu atvejų tuščias sąrašas
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS yra kritinė interneto sudedamoji dalis, leidžianti vartotojams ir programoms naudoti lengvai įsimenamus domeno vardus vietoj skaitinių IP adresų.