Système DNS

Vous tapez 'google.com' mais Internet ne comprend que les adresses IP ! Le DNS est l'annuaire téléphonique d'Internet qui fait le lien entre les deux.

Difficulté:
30 min
+30 XP

Objectifs du cours

  • Comprendre le rôle du système DNS
  • Savoir comment un nom de domaine est converti en adresse IP
  • Connaître la structure hiérarchique des noms de domaine
  • Découvrir les différents types de serveurs DNS
  • Comprendre le mécanisme de résolution DNS

Erreurs courantes à éviter

  • Confondre DNS et moteur de recherche (Google, Bing...)
  • Penser que le DNS traduit une URL complète (c'est juste le nom de domaine)
  • Ne pas comprendre que DNS est distribué (pas un serveur central)
  • Oublier que DNS utilise un cache pour accélérer les requêtes

**Pourquoi avons-nous besoin du DNS ?**

Les ordinateurs communiquent avec des **adresses IP** (ex: `142.250.74.46`), mais nous, humains, préférons des **noms faciles à retenir** (ex: `google.com`).

**Le problème** :

🤖 **Les machines** : • Comprennent uniquement les nombres • Utilisent les adresses IP pour communiquer • Exemple : `192.168.1.10`, `142.250.74.46`

👨 **Les humains** : • Préfèrent les mots • Se souviennent mieux des noms • Exemple : `google.com`, `wikipedia.org`

**Analogie avec les contacts téléphoniques** :

📱 **Sans annuaire** : • "Appelle le 06 12 34 56 78" (difficile à retenir) • Il faut mémoriser tous les numéros • Risque d'erreur élevé

📱 **Avec annuaire** : • "Appelle Maman" (facile) • Le téléphone trouve le numéro automatiquement • Simple et rapide

**C'est exactement le rôle du DNS !**

**Historique : avant le DNS**

Dans les années 1970 : • Il existait un fichier texte unique : `HOSTS.txt` • Géré manuellement par une personne à Stanford • Téléchargé régulièrement par tous les ordinateurs du réseau • Problème : impossible à maintenir avec la croissance d'Internet !

**La solution : DNS (1984)**

Paul Mockapetris invente le **Domain Name System** : ✅ **Distribué** : pas de fichier central ✅ **Hiérarchique** : organisation en arbre ✅ **Automatique** : mise à jour transparente ✅ **Rapide** : système de cache ✅ **Scalable** : fonctionne avec des milliards de sites

**Définition du DNS**

Le **DNS** (Domain Name System) est un système qui traduit les **noms de domaine** en **adresses IP**.

🔄 **Fonction principale** : ``` www.google.com → [DNS] → 142.250.74.46 ```

C'est comme un **annuaire téléphonique automatique** pour Internet !

Python
# Simulation du problème : Noms vs IP

# Avant le DNS : fichier HOSTS.txt (années 1970)
hosts_file = {
    '142.250.74.46': 'google.com',
    '157.240.11.35': 'facebook.com',
    '208.80.154.224': 'wikipedia.org',
    '140.82.121.4': 'github.com',
    '104.16.132.229': 'stackoverflow.com'
}

print("=== AVANT LE DNS : Fichier HOSTS.txt ===\n")
print("Contenu du fichier (à mémoriser):\n")
for ip, nom in hosts_file.items():
    print(f"{ip:20} {nom}")

print("\n❌ Problèmes:")
print("  • Fichier géré manuellement")
print("  • Téléchargement régulier nécessaire")
print("  • Croissance = cauchemar à gérer")
print("  • Pas de mise à jour automatique")

# Avec le DNS : résolution automatique
def resoudre_dns_simple(nom_domaine):
    """Simule une résolution DNS simple."""
    # Base de données DNS simulée
    dns_db = {
        'google.com': '142.250.74.46',
        'facebook.com': '157.240.11.35',
        'wikipedia.org': '208.80.154.224',
        'github.com': '140.82.121.4',
        'youtube.com': '142.250.185.78'
    }

    if nom_domaine in dns_db:
        return dns_db[nom_domaine]
    return None

print("\n=== AVEC LE DNS : Résolution automatique ===\n")

sites_a_visiter = ['google.com', 'youtube.com', 'github.com']

for site in sites_a_visiter:
    ip = resoudre_dns_simple(site)
    print(f"Vous tapez: {site}")
    print(f"  → DNS trouve: {ip}")
    print(f"  → Votre navigateur se connecte à {ip}\n")

print("✅ Avantages:")
print("  • Automatique et transparent")
print("  • Pas besoin de mémoriser les IP")
print("  • Mises à jour instantanées")
print("  • Scalable (des milliards de sites)")

# Comparaison taille
print("\n=== CROISSANCE D'INTERNET ===\n")

annees = [1980, 1990, 2000, 2010, 2020, 2024]
nb_sites = [100, 10_000, 17_000_000, 206_000_000, 1_800_000_000, 2_000_000_000]

print("Nombre de sites web:\n")
for annee, nb in zip(annees, nb_sites):
    if nb < 1_000_000:
        nb_str = f"{nb:,}"
    else:
        nb_str = f"{nb / 1_000_000:.0f} millions"
    print(f"{annee}: {nb_str}")

print("\nImpossible de gérer ça avec un fichier HOSTS.txt !")
print("Le DNS distribué était la seule solution viable.")

Quiz de validation

1. Quel est le rôle principal du DNS ?

2. Que signifie TLD dans 'google.com' ?

3. Combien y a-t-il de serveurs racine DNS logiques dans le monde ?

4. Quel type d'enregistrement DNS indique le serveur de messagerie ?

5. Quelle est l'adresse IP du serveur DNS public de Cloudflare ?

EdTech AI Assistant