Intern
Mi az a DNS?
sobes.tech MI
Válasz az MI-től
A DNS (Domain Name System) egy elosztott névfeloldó rendszer számítógépek, szolgáltatások vagy bármilyen erőforrás számára, amelyek az internethez vagy privát hálózathoz csatlakoznak. Könnyen olvasható domain neveket (például google.com) társít numerikus IP-címekhez (például 172.217.160.142).
Működési elv:
- Kérés: Amikor a felhasználó beír egy domain nevet a böngészőbe, a kliens egy kérvényt küld a helyi DNS gyorsítótárnak (általában automatikusan konfigurálva a hálózat által).
- Gyorsítótár: A gyorsítótár először ellenőrzi, hogy van-e a kérésnek megfelelő bejegyzés. Ha igen, visszaadja az IP-címet.
- Rekurzív kérés: Ha nincs, a gyorsítótár kérvényt küld egy gyökér DNS szerverhez.
- Delegálás: A gyökér szerver nem ismeri az IP-címet, de mutat egy felső szintű szerverre (Top-Level Domain, TLD) például
.com,.orgstb. - Delegálás: A TLD szerver egy jogosult DNS szerverre mutat a konkrét domainhez (
google.com). - Feloldás: A jogosult szerver megtalálja az A (Address) vagy AAAA (IPv6 Address) rekordot a domain névhez, és visszaküldi a megfelelő IP-címet a gyorsítótárnak.
- Gyorsítótár és válasz: A gyorsítótár elmenti a választ, és visszaküldi az IP-címet a kliensnek.
- Kapcsolódás: A böngésző létrehozza a kapcsolatot a szerverrel a kapott IP-cím segítségével.
A DNS rekord típusai (a leggyakoribbak):
| Típus | Leírás |
|---|---|
| A | A névhez IPv4 címet társít. |
| AAAA | A névhez IPv6 címet társít. |
| CNAME | Álnév egy másik canonical névhez. |
| MX | E-mail szervereket mutat a domainhez. |
| NS | A domain jogosult DNS szervereit mutatja. |
| PTR | Fordított feloldáshoz használják (IP -> név). |
| TXT | Szöveges információt tárol (pl. SPF). |
A DNS szerepe a C#-ban:
A hálózati műveletek során a C#-ban gyakran használják a System.Net névtérből származó osztályokat, például a System.Net.Dns-t DNS kérdések végrehajtására.
// Példa IP-címek lekérésére domain név alapján
using System;
using System.Net;
// Szinkron kéréshez
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
Console.WriteLine(ip);
}
// Aszinkron kérés példája (előnyös modern alkalmazásokban)
async Task ResolveHostAsync()
{
IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
foreach (var ip in asyncIpAddresses)
{
Console.WriteLine(ip);
}
}
// A GetHostEntry részletesebb információkat ad a hostról
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Várakozás a feladat befejezésére
Console.WriteLine($"Host név: {hostEntry.HostName}");
Console.WriteLine("Címek:");
foreach (var addr in hostEntry.AddressList)
{
Console.WriteLine($" {addr}");
}
Console.WriteLine("Aliasok:"); // A legtöbb esetben üres lista
foreach (var alias in hostEntry.Aliases)
{
Console.WriteLine($" {alias}");
}
A DNS alapvető fontosságú az internet működésében, lehetővé téve a felhasználók és alkalmazások számára, hogy könnyen megjegyezhető domain neveket használjanak a numerikus IP-címek helyett.