Aller au contenu principal

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

RCODESignificationDescription
0NOERRORSuccès
1FORMERRErreur de format
2SERVFAILÉchec du serveur
3NXDOMAINNom de domaine inexistant
4NOTIMPNon pris en charge
5REFUSEDRequê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)

ValeurTypeDescription
1AAdresse IPv4
2NSServeur de noms
5CNAMENom canonique (alias)
6SOADébut d'autorité
12PTRPointeur (résolution inverse)
15MXÉchange de courrier
16TXTEnregistrement texte
28AAAAAdresse IPv6
255ANYTous 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!