Guide Technique du Protocole DNS (RFC 1035)
Ce document est un guide technique détaillé de RFC 1035, incluant le format des messages, les types d'enregistrements de ressources, des exemples pratiques et des instructions d'utilisation d'outils. Pour les traductions des chapitres officiels du RFC, veuillez consulter les documents de chaque chapitre.
Informations sur le document
- Numéro RFC: 1035
- Titre: Domain Names - Implementation and Specification
- Titre (Français): Noms de domaine - Mise en œuvre et spécification
- Date de publication: Novembre 1987
- Auteur: P. Mockapetris (USC/Information Sciences Institute)
- Statut: INTERNET STANDARD (STD 13)
Résumé
Ce RFC définit les détails de mise en œuvre du DNS (Domain Name System), y compris le format des messages, le format des enregistrements de ressources et les spécifications de comportement pour les serveurs de noms et les résolveurs. Ce document est associé à RFC 1034 (Concepts et installations DNS), où RFC 1034 définit les concepts et ce document définit la mise en œuvre spécifique.
Concept central: RFC 1035 est la spécification de mise en œuvre DNS, définissant le format des messages, les types d'enregistrements et les détails de mise en œuvre.
Relation avec RFC 1034
RFC 1034 (Concepts) RFC 1035 (Mise en œuvre)
───────────────── ─────────────────
✓ Qu'est-ce que DNS → ✓ Format des messages
✓ Structure des noms → ✓ Format des enregistrements
✓ Architecture serveurs → ✓ Algorithmes de résolution
✓ Stratégie de cache → ✓ Mécanisme de compression
✓ Types de requêtes → ✓ Détails du protocole
Recommandation:
Lire d'abord RFC 1034 pour comprendre les concepts
Puis RFC 1035 pour comprendre la mise en œuvre
Format des messages DNS
Structure du message
Tous les messages DNS utilisent le même format:
+---------------------+
| Header | 12 octets, fixe
+---------------------+
| Question | Section question (longueur variable)
+---------------------+
| Answer | Section réponse (longueur variable)
+---------------------+
| Authority | Section autorité (longueur variable)
+---------------------+
| Additional | Section additionnelle (longueur variable)
+---------------------+
Format de l'en-tête
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Longueur totale: 12 octets
Détails des champs
ID (16 bits): Correspondance requête/réponse. Plage: 0-65535
QR (1 bit): 0 = Query (Requête), 1 = Response (Réponse)
Opcode (4 bits): 0 = QUERY (requête standard), 1 = IQUERY (obsolète), 2 = STATUS
AA (1 bit): Authoritative Answer - Drapeau de réponse autoritaire
TC (1 bit): Truncation - Drapeau de troncature (dépassement UDP 512 octets)
RD (1 bit): Recursion Desired - Récursion souhaitée
RA (1 bit): Recursion Available - Récursion disponible
Z (3 bits): Réservé (doit être 0)
RCODE (4 bits): Response Code
| RCODE | Signification | Description |
|---|---|---|
| 0 | NOERROR | Succès |
| 1 | FORMERR | Erreur de format |
| 2 | SERVFAIL | Échec du serveur |
| 3 | NXDOMAIN | Nom de domaine inexistant |
| 4 | NOTIMP | Non pris en charge |
| 5 | REFUSED | Requête refusée |
Format de la section Question
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
QNAME: Nom de domaine à interroger (longueur variable)
QTYPE: Type de requête (16 bits)
QCLASS: Classe de requête (16 bits, généralement 1=IN)
Encodage QNAME
Nom de domaine: www.example.com
Encodage:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|03| w w w |07| e x a m p l e |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|02| c o m |00|
+--+--+--+--+--+
Format:
- Longueur avant chaque étiquette (1 octet)
- Contenu de l'étiquette (caractères ASCII)
- Se termine par 0
Exemple: "www.example.com" = 3 "www" 7 "example" 3 "com" 0
Nom de domaine racine: 0 (un seul octet 0)
QTYPE (Type de requête)
| Valeur | Type | Description |
|---|---|---|
| 1 | A | Adresse IPv4 |
| 2 | NS | Serveur de noms |
| 5 | CNAME | Nom canonique (alias) |
| 6 | SOA | Début d'autorité |
| 12 | PTR | Pointeur (résolution inverse) |
| 15 | MX | Échange de courrier |
| 16 | TXT | Enregistrement texte |
| 28 | AAAA | Adresse IPv6 |
| 255 | ANY | Tous les enregistrements (déconseillé) |
Détails des types d'enregistrements de ressources
Enregistrement A - Adresse IPv4
TYPE = 1
RDLENGTH = 4 (octets)
RDATA = Adresse IPv4 32 bits
Exemple:
NAME: example.com
TYPE: A (1)
CLASS: IN (1)
TTL: 3600
RDLENGTH: 4
RDATA: 93.184.216.34
Encodage (RDATA):
93.184.216.34 → 0x5DB8D822
Enregistrement NS - Serveur de noms
TYPE = 2
RDATA = Nom de domaine du serveur de noms
Exemple:
NAME: example.com
TYPE: NS (2)
TTL: 86400
RDATA: ns1.example.com
Signification: Le serveur autoritaire pour example.com est ns1.example.com
Enregistrement CNAME - Alias
TYPE = 5
RDATA = Nom canonique
Exemple:
NAME: www.example.com
TYPE: CNAME (5)
TTL: 3600
RDATA: example.com
Signification: www.example.com est un alias pour example.com
Flux de requête:
Requête www.example.com A
→ Retourne CNAME example.com
→ Continue la requête example.com A
→ Retourne 93.184.216.34
Enregistrement SOA - Début d'autorité
TYPE = 6
Format RDATA:
MNAME: Serveur de noms primaire
RNAME: Boîte aux lettres du responsable
SERIAL: Numéro de série
REFRESH: Intervalle de rafraîchissement
RETRY: Intervalle de nouvelle tentative
EXPIRE: Délai d'expiration
MINIMUM: TTL minimal
Exemple:
NAME: example.com
TYPE: SOA (6)
TTL: 86400
RDATA:
MNAME: ns1.example.com
RNAME: admin.example.com ([email protected])
SERIAL: 2024010101
REFRESH: 3600
RETRY: 600
EXPIRE: 604800
MINIMUM: 86400
Objectif:
- Identifier les informations d'autorité de zone
- Contrôler les transferts de zone
- Définir les politiques de cache
Enregistrement MX - Échange de courrier
TYPE = 15
Format RDATA:
PREFERENCE: Priorité (16 bits)
EXCHANGE: Nom de domaine du serveur de messagerie
Exemple:
NAME: example.com
TYPE: MX (15)
TTL: 3600
RDATA:
PREFERENCE: 10
EXCHANGE: mail1.example.com
Plusieurs enregistrements MX:
example.com MX 10 mail1.example.com
example.com MX 20 mail2.example.com
example.com MX 30 mail3.example.com
Traitement:
- Priorité aux valeurs numériques plus faibles
- Sélection aléatoire pour la même priorité
- Essayer le suivant en cas d'échec
Compression des messages DNS
Pour compresser les noms de domaine en double, DNS utilise des pointeurs:
Format de compression:
Longueur d'étiquette de nom de domaine:
- 00-3F: Longueur d'étiquette normale (0-63)
- C0-FF: Pointeur (11xxxxxx xxxxxxxx)
Format du pointeur:
11 <décalage 14 bits>
Exemple:
Message original:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: 7 "example" 3 "com" 0
Après compression:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: C0 0x11 (pointe vers offset 12+4="example")
Économie:
30: "example.com" (12 octets)
Compressé: C0 0x11 (2 octets)
Économie: 10 octets
Outils pratiques
Commande dig détaillée
# Requête de base
dig example.com
# Spécifier le type d'enregistrement
dig example.com A # IPv4
dig example.com AAAA # IPv6
dig example.com MX # Serveurs de messagerie
dig example.com NS # Serveurs de noms
dig example.com TXT # Enregistrements texte
# Spécifier le serveur DNS
dig @8.8.8.8 example.com
# Tracer le chemin de requête
dig +trace example.com
# Sortie courte
dig +short example.com
# Résolution inverse
dig -x 93.184.216.34
# Requête TCP
dig +tcp example.com
Utilisation de nslookup
# Mode interactif
nslookup
> example.com
> set type=MX
> example.com
> exit
# Mode ligne de commande
nslookup example.com
nslookup -type=MX example.com
nslookup -type=NS example.com
Commande host
# Requête simple
host example.com
# Sortie détaillée
host -v example.com
# Spécifier le type d'enregistrement
host -t MX example.com
host -t NS example.com
Références
RFC de base:
- [RFC 1034] Domain Names - Concepts and Facilities
- [RFC 1035] Domain Names - Implementation and Specification ← Ce document
Extensions et mises à jour:
- [RFC 2181] Clarifications to the DNS Specification
- [RFC 2308] Negative Caching of DNS Queries (DNS NCACHE)
- [RFC 4033-4035] DNSSEC
- [RFC 6891] Extension Mechanisms for DNS (EDNS(0))
Protocoles connexes:
- [RFC 8484] DNS Queries over HTTPS (DoH)
- [RFC 7858] DNS over TLS
Résumé: RFC 1035 définit les détails de mise en œuvre du DNS et est un document clé pour comprendre les principes de fonctionnement du protocole DNS. Du format des messages aux enregistrements de ressources, du flux de requête au mécanisme de compression, ce RFC fournit des spécifications détaillées pour toutes les mises en œuvre DNS. Avec RFC 1034, vous comprendrez complètement le système DNS!