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:
- So'rov: Foydalanuvchi brauzerga domen nomini kiritganda, mijoz lokal DNS-serverga (odatda tarmoq tomonidan avtomatik sozlangan) so'rov yuboradi.
- Kesh: Server avvalo o'z keshini tekshiradi. Agar moslik topilsa, IP-manzilni qaytaradi.
- Rekursiv so'rov: Agar keshda bo'lmasa, server root DNS-serverlardan biriga so'rov yuboradi.
- Vakillik: Root server IP-manzilni bilmaydi, lekin
.com,.orgva boshqalar uchun yuqori darajadagi domen serveriga (TLD) ko'rsatma beradi. - Vakillik: TLD server, muayyan domen uchun (
google.com) rasmiy DNS-serverni ko'rsatadi. - Yechim: Rasmiy server domen nomi uchun A (Manzil) yoki AAAA (IPv6 Manzil) yozuvini topadi va mos IP-manzilni qaytaradi.
- Kesh va javob: Server javobni keshga oladi va IP-manzilni mijozga yuboradi.
- 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.