Sobes.tech
Intern

Qu'est-ce que le DNS?

sobes.tech IA

Réponse de l'IA

Le DNS (Système de Noms de Domaine) est un système distribué de nommage pour les ordinateurs, services ou toute ressource connectée à Internet ou à un réseau privé. Il associe des noms de domaine lisibles (par exemple, google.com) à des adresses IP numériques (par exemple, 172.217.160.142).

Principe de fonctionnement:

  1. Requête: Lorsqu'un utilisateur saisit un nom de domaine dans le navigateur, le client envoie une requête au serveur DNS local (généralement configuré automatiquement par le réseau).
  2. Cache: Le serveur vérifie d'abord son cache. Si une correspondance est trouvée, il renvoie l'adresse IP.
  3. Requête récursive: Si ce n'est pas dans le cache, le serveur envoie une requête à l'un des serveurs DNS racine.
  4. Délégation: Le serveur racine ne connaît pas l'adresse IP, mais indique le serveur de niveau supérieur (TLD) pour .com, .org, etc.
  5. Délégation: Le serveur TLD indique le serveur DNS autorisé pour le domaine spécifique (google.com).
  6. Résolution: Le serveur autorisé trouve l'enregistrement A (Adresse) ou AAAA (Adresse IPv6) pour le nom de domaine et renvoie l'adresse IP correspondante au serveur DNS.
  7. Mise en cache et réponse: Le serveur met en cache la réponse et envoie l'adresse IP au client.
  8. Connexion: Le navigateur établit une connexion avec le serveur en utilisant l'adresse IP reçue.

Types d'enregistrements DNS (les plus courants):

Type Description
A Associe le nom d'hôte à une adresse IPv4.
AAAA Associe le nom d'hôte à une adresse IPv6.
CNAME Alias pour un autre nom canonique.
MX Indique les serveurs de messagerie pour le domaine.
NS Indique les serveurs DNS autorisés pour le domaine.
PTR Utilisé pour la recherche inverse (IP -> nom).
TXT Contient des informations textuelles (par exemple, SPF).

Rôle du DNS en C#:

Lorsqu'on travaille avec le réseau en C#, on utilise souvent des classes de l'espace de noms System.Net, comme System.Net.Dns pour effectuer des requêtes DNS.

// Exemple d'obtention des adresses IP par nom de domaine
using System;
using System.Net;

// Pour une requête synchrone
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Exemple de requête asynchrone (préférée dans les applications modernes)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry retourne des informations plus détaillées sur l'hôte
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Attend la fin de la tâche

Console.WriteLine($"Nom de l'hôte: {hostEntry.HostName}");
Console.WriteLine("Adresses:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Alias:"); // La plupart du temps, liste vide
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

Le DNS est un composant critique d'Internet, permettant aux utilisateurs et aux applications d'utiliser des noms de domaine faciles à retenir au lieu d'adresses IP numériques.