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.
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 !
# 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 ?
