Sobes.tech
Intern

DNS эмне?

sobes.tech AI

AIден жооп

DNS (Домендик Атын Тизмеси) — бул компьютерлер, кызматтар же Интернетке же жеке тармакка туташкан бардык ресурстар үчүн бөлүштүрүлгөн аталыш системасы. Ал оңой окула турган домендик аттарды (мисалы, google.com) сандык IP-даректерге (мисалы, 172.217.160.142) байланыштырган.

Иштөө принциби:

  1. Сураныч: Колдонуучу браузерге домен атын киргизгенде, кардар жергиликтүү DNS кэшине (көбүнчө автоматтык түрдө тармак тарабынан конфигурацияланган) суроо жиберет.
  2. Кэш: Кэш биринчи кезекте тиешелүү жазууну текшерет. Эгер бар болсо, IP-даректи кайтарат.
  3. Рекурсивдүү суроо: Эгер жок болсо, кэш бир DNS түп серверине суроо жиберет.
  4. Делегация: Түп сервер IP-даректи билбейт, бирок .com, .org ж.б. үчүн жогорку деңгээлдеги (Top-Level Domain, TLD) серверге көрсөтөт.
  5. Делегация: TLD сервер домен үчүн ыйгарым укуктуу DNS серверге көрсөтөт (google.com).
  6. Чечүү: Ыйгарым укуктуу сервер домен үчүн A (Address) же AAAA (IPv6 Address) жазуусун табат жана тиешелүү IP-даректи кэшка кайтарат.
  7. Кэшке сактоо жана жооп: Кэш жоопту сактап, IP-даректи кардарга жиберет.
  8. Туташуу: Браузер алынган IP-дарек аркылуу сервер менен байланыш түзөт.

DNS жазууларынын түрлөрү (ең кеңири колдонулганы):

Төрү Түшүндүрмө
A Атын IPv4-дарекке байланыштырган.
AAAA Атын IPv6-дарекке байланыштырган.
CNAME Башка каноникалык атка псевдоним.
MX Домени үчүн почта серверлерин көрсөтөт.
NS Домени үчүн ыйгарым укуктуу DNS серверлерин көрсөтөт.
PTR Обраттуу издөө үчүн колдонулат (IP -> ат).
TXT Тексттик маалыматтарды сактайт (мисалы, SPF).

DNSдин ролу C#да:

C# менен тармакта иштөөдө, көбүнчө System.Net кеңейтүүсүндөгү класстар колдонулат, мисалы System.Net.Dns DNS суроолорун аткаруу үчүн.

// Домен аты боюнча IP-даректерди алуу мисалы
using System;
using System.Net;

// Синхрон суроо үчүн
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Асимхрондуу суроо мисалы (заманбап колдонмолордо артыкчылык берилет)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry кеңири маалыматтарды кайтарат
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Ишти аяктоосун күтүп турат

Console.WriteLine($"Host аты: {hostEntry.HostName}");
Console.WriteLine("Даректер:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Алиасдар:"); // Көпчүлүк учурда бош тизмек
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS — Интернеттин маанилүү компоненти, ал колдонуучуларга жана колдонмолорго оңой эстелүү домендик аттарды колдонууга мүмкүндүк берет, сандык IP-даректердин ордуна.