Sobes.tech
Intern

DNS nima?

sobes.tech AI

AIdan javob

DNS (Domain Name System) — bu kompyuterlar, xizmatlar yoki Internetga yoki xususiy tarmoqqa ulangan har qanday resurslar uchun taqsimlangan nomlash tizimi. U o'qilishi oson domen nomlarini (masalan, google.com) raqamli IP-manzillari bilan (masalan, 172.217.160.142) moslashtiradi.

Ishlash prinsipi:

  1. So'rov: Foydalanuvchi brauzerga domen nomini kiritganda, mijoz lokal DNS-serverga (odatda tarmoq tomonidan avtomatik sozlangan) so'rov yuboradi.
  2. Kesh: Server avvalo o'z keshini tekshiradi. Agar moslik topilsa, IP-manzilni qaytaradi.
  3. Rekursiv so'rov: Agar keshda bo'lmasa, server root DNS-serverlardan biriga so'rov yuboradi.
  4. Vakillik: Root server IP-manzilni bilmaydi, lekin .com, .org va boshqalar uchun yuqori darajadagi domen serveriga (TLD) ko'rsatma beradi.
  5. Vakillik: TLD server, muayyan domen uchun (google.com) rasmiy DNS-serverni ko'rsatadi.
  6. Yechim: Rasmiy server domen nomi uchun A (Manzil) yoki AAAA (IPv6 Manzil) yozuvini topadi va mos IP-manzilni qaytaradi.
  7. Kesh va javob: Server javobni keshga oladi va IP-manzilni mijozga yuboradi.
  8. Ulanish: Brauzer, olgan IP-manzil bilan serverga ulanadi.

DNS yozuv turlari (eng keng tarqalganlari):

Turi Tavsifi
A Host nomini IPv4 manziliga moslashtiradi.
AAAA Host nomini IPv6 manziliga moslashtiradi.
CNAME Boshqa kanonik nom uchun takma nom.
MX Domen uchun pochta serverlarini ko'rsatadi.
NS Domen uchun rasmiy DNS-serverlarni ko'rsatadi.
PTR Teskari qidiruv uchun (IP -> nom).
TXT Matn ma'lumotlarini saqlaydi (masalan, SPF).

C# da DNS roli:

C# bilan tarmoq bilan ishlashda, odatda System.Net nomlar maydonidan System.Net.Dns kabi sinflar DNS so'rovlarini amalga oshirish uchun ishlatiladi.

// Domen nomi bo'yicha IP-manzillarni olish misoli
using System;
using System.Net;

// Sinkron so'rov uchun
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Zamonaviy ilovalarda afzal ko'riladigan asenkron so'rov misoli
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry, host haqida batafsil ma'lumotlarni qaytaradi
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Vazifani yakunlashni kutadi

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

Console.WriteLine("Aliaslar:"); // Ko'p hollarda bo'sh ro'yxat
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS Internetning muhim komponenti bo'lib, foydalanuvchilar va ilovalar uchun oson eslab qolish uchun domen nomlarini raqamli IP-manzillari o'rniga ishlatishga imkon beradi.