RFC: 1034
Statut : Standard

# DOMAIN NAME SYSTEM

## Concepts de base

Crédits : P. Mockapetris, ISI
Traduction : Valéry G. FREMAUX
Edition originale : Novembre 87 / Version FR : Avril 1998
Remplace : RFC882, RFC883, RFC973

## 3. ESPACE DE NOMS DE DOMAINES et ENREGISTREMENTS DE RESSOURCES

### 3.1. Spécifications et terminologie des Noms de Domaine

L'espace de noms de domaines est une structure arborescente. Chaque noeud et feuille de l'arbre correspond à un ensemble de ressources (qui peut être vide). Le système de domaines ne fait aucune distinction entre l'utilisation des feuilles et de la partie information des noeuds, ce mémo n'utilisant par la suite que le terme "noeud" pour référencer les deux types d'entités.

Chaque noeud dispose d'un identifiant, d'une longueur de zéro à 63 octets. Des noeuds "frères" ne peuvent pas avoir le même identifiant, bien que le même identifiant puisse se retrouver dans deux noeuds distincts (mais sans relation de fratrie). L'identifiant nul (c-à-d., de longueur zéro) est réservé pour désigner la racine.

Le nom de domaine d'un noeud est constitué de la liste des identifiants de tous les noeuds constituant le chemin entre ce noeud et la racine de l'arbre. Par convention, les identifiants qui composent un nom de domaine seront exprimés ou lus de gauche à droite, du plus spécifique (le plus bas, le plus éloigné de la racine) au plus globalisant (le plus haut, le plus proche de la racine).

En interne, les programmes manipulant les noms de domaines peuvent les représenter comme des séquences d'étiquettes, chacune comportant une octet de longueur suivi d'une chaîne d'octets. Comme tous les noms de domaines se terminent par la racine, laquelle éant identifiée par une chaîne de longueur nulle, ces représentations internes peuvent utiliser l'octet nul pour terminer un nom de domaine (à considérer comme l'octet de longueur du dernier identifiant, qui vaut zéro).

Par convention, les noms de domaines peuvent être stockés avec une casse arbitraire, mais toute comparaison de noms de domaines pour ce qui est des fonctions actuelles sont faites indépendamment de la casse, en supposant l'usage du jeu de caractères ASCII, et le bit de poids fort à zéro dans chque octet. Ceci signifie que vous serez libre de créer un noeud d'identifiant "A" ou encore "a", mais pas les deux en tant que frères l'un de l'autre ; ces deux domaines pourront être références par "a" ou "A" indistinctement. Cependant, lorsque vous recevez un nom de domaine ou un identifiant, il faudra en préserver la casse. La raison en est qu'il sera peut être nécessaire, dans un futur proche d'étendre les noms de domaines à une représentation binaire complète, dans le but d'accueillir de nouveaux services ; les services existants devant pouvoir rester inchangés.

Lorsqu'un utilisateur doit entrer un nom de domaine, la longueur de chaque identifiant est omise et les identifiants devront être séparés par des points ("."). Un nom de domaine complet atteignant toujours la racine, la forme écrite exacte de tout domaine entièrement qualifié se termine par un point. Nous utiliserons cette propriété pour distinguer les cas :

- d'une chaîne de caractères représentant un nom de domaine complet (souvent appelé "absolu" ou "entièrement qualifié"). Par exemple, "poneria.ISI.EDU."
- d'une chaîne de caractères représentant les premiers identifiants d'un nom de domaine incomplet, et devant être complété par l'application locale avec un complément absolu (expression appelée "relative"). Par exemple, "poneria", à utiliser relativement au domaine ISI.EDU.

Les noms relatifs sont exprimés soit par rapport à une référence absolue connue, ou par rapport à une liste de domaines constituant ainsi une liste de recherche. Les noms relatifs existent souvent au niveau de l'interface utilisateur, où leur interprétation varie d'une implémentation à l'autre, ainsi que dans les fichiers principaux, dans lesquels sont exprimées des domaines relativement à un nom de domaine de référence. L'interprétation la plus courant utilise la racine "." soit comme l'origine simple soit comme l'un des membres d'une liste de recherche, et un nom à multiple identifiants est souvent exprimé sans le point final par "paresse".

Pour simplifier les implémentations, le nombre total d'octets composant un nom de domaine entièrement qualifié (c'est à dire la somme de tous les identifiants plus la mention des longueurs d'identifiants) est limité à 255.

Un domaine est identifié par un nom de domaine, et consiste de la portion de l'espace de domaine située au niveau et en dessous du noeud spécifié par le domaine. Un domaine est le sous-domaine d'un autre domaine s'il est contenu ans ce dernier. Cette relation peut être vérifiée en regardant si le nom du sous-domaine se termine par le nom du domaine le contenant. Par exemple, A.B.C.D est un sous-domaine de B.C.D, C.D, D, et "".

### 3.2. Conseils pour l'administration

En matière de politique d'administration, les spécifications techniques du DNS n'imposent aucune structure d'arbre particulière ni de règles pour le choix des identifiants ; son but est d'être le plus général possible, et il doit pouvoir servir à toutes sortes d'applications. En particulier, le système était conçu de sorte que l'espace de noms n'ait pas nécessairement à suivre les limites physiques de la constitution du réseau, des serveurs de noms, etc. La motivation de ceci ne signifie pas que le système de noms refuse toute notion de sémantique, mais plutôt que le choix d'une sémantique implicite puisse rester ouvert pour pouvoir s'adapter aux problèmes particuliers lorsqu'ils se présenteraient, et qu'il reste acceptable que certaines sous parties de l'arbre puisse user de sémantiques différentes. Par exemple, le domaine IN-ADDR.ARPA est organisé et distribué en réseaux et adresses d'hôtes car son rôle est la traduction d'adresses complètes d'hôtes en noms ; Les domaines NetBIOS [RFC-1001, RFC- 1002] sont des domaines plats conformément aux besoins de cette application.

Cependant, nous pouvons donner quelques règles à suivre pour des parties "normales" du domaine de noms qui utilisent le schéma réseau/hôte, ou boîtes aux lettres, etc., qui permettent de maintenir l'espace de noms uniforme, préserve sa capacité de croissance, et minimise les problèmes lorsque des logiciels sont mis à jour à partir de tables anciennes. Les premières décisions "politiques" concernant les niveaux haut de l'arbre ont été données dans la RFC-920. La politique actuelle pour les niveaux haut sont discutées dans la [RFC-1032]. Les conversions pour l'espace MILNET sont couvertes dans la [RFC-1031].

Les domaines de plus bas niveaux qui peuvent à leur tour être subdivisés en zones multiples devront pouvoir proposer des branchements vers le haut du domaine de telle sorte que d'éventuelles décompositions puissent se faire sans changement de noms. Les identifiants de noeuds utilisant des caractères spéciaux, des chiffres en tête, etc., risquent de poser des problèmes à des programmes plus anciens basés sur des choix plus restrictifs.

### 3.3. Conseils techniques d'utilisation

Avant que le DNS puisse être utilisé pour accueillir les informations de nommage de quelque catégorie d'objets que ce soit, deux besoins doivent être remplis :

- Une convention pour relier les noms d'objets et les noms de domaines. Ceci décrit comment l'on accède à l'information sur un objet.
- les types RR et les formats de données pour la description des objets.

Ces règles peuvent être du plus simple au plus complexe. Très souvent, le concepteur doit prendre en compte les formats existants et doit planifier une compatibilité ascendante pour les utilisations actuelles. Plusieurs conversions et niveaux de conversion peuvent devenir nécessaires.

Pour les hôtes, la conversion dépends de la syntaxe actuelle pour les noms d'hôtes, elle-même un sous ensemble de la représentation textuelle courante pour les noms de domaine, ainsi que des formats RR décrivant les adresses des hôtes. Dans la mesure ou nous souhaitons pouvoir disposer d'un transcodage inverse fiable depuis les adresses d'hôtes vers les noms d'hôtes, un codage particulier pour les adresses du domaine IN-ADDR.ARPA est défini.

Pour les boîtes aux lettres, le transcodage est légèrement plus complexe. L'adresse Mail habituelle @ est transcodé en nom de domaine par la conversion de la en un identifiant simple (sans tenir compte des points qu'elle contient), et en convertissant le en un nom de domaine conforme à sa représentation textuelle générique (des points séparant les identifiants), l'opération finale consistant à concaténer les deux parties pour former un nom de domaine unique. Ainsi, la boîte aux lettres HOSTMASTER@SRI-NIC.ARPA est représenté par le nom de domaine HOSTMASTER.SRI-NIC.ARPA. L'appréciation des raisons conduisant à ce design doit aussi prendre en compte le schéma des échanges de courrier [RFC- 974].

L'utilisateur type n'est pas concerné par l'établissement de ces règles, mais doit néanmoins comprendre qu'elles résultent de nombreux compromis entre des contraintes de compatibilité ascendante pour d'anciennes applications toujours en service, des interactions entre les différentes définitions d'objets, et l'incontournable urgence qu'il y a à développer de nouvelles fonctionnalités lorsque de nouvelles règles sont établies. La manière dont le DNS est exploité pour prendre en compte tel ou tel objet est souvent plus importante que les restrictions inhérentes au DNS.

### 3.4. Exemple d'espace de noms

La figure suivante montre une partie de l'espace de noms de domaines actuel, et sert de base d'exemple à de nombreuses reprises dans cette RFC. Notez que cet arbre est un tout petit sous ensemble de l'étendue réelle de l'espace des noms de domaines.

                                       |
                                       |
                 +---------------------+------------------+
                 |                     |                  |
                MIL                   EDU               ARPA
                 |                     |                  |
                 |                     |                  |
           +-----+-----+               |     +------+-----+-----+
           |     |     |               |     |      |           |
          BRL  NOSC  DARPA             |  IN-ADDR  SRI-NIC     ACC
                                       |
           +--------+------------------+---------------+--------+
           |        |                  |               |        |
          UCI      MIT                 |              UDEL     YALE
                    |                 ISI
                    |                  |
                +---+---+              |
                |       |              |
               LCS  ACHILLES  +--+-----+-----+--------+
                |             |  |     |     |        |
                XX            A  C   VAXA  VENERA Mockapetris

Dans cet exemple, le domaine racine a trois sous-domaines immédiats : MIL, EDU, et ARPA. Le domaine LCS.MIT.EDU a un sous domaine immédiat appelé XX.LCS.MIT.EDU. Toutes les feuilles sont également des domaines.

### 3.5. Syntaxe préférentielle pour les noms

Les spécifications du DNS tentent d'être aussi génériques que possible pour ce qui concerne les règles de construction des noms de domaines. L'idée de base est que le nom existant pour un objet puisse être utilisé pour exprimer un nom de domaine avec le minimum de transformation. Cependant, au moment d'assigner un nom de domaine à un objet, l'utilisateur prudent choisira un nom qui d'une part respecte les règles de construction du système de domaines et d'autre part respecte les règles inhérentes à l'objet à nommer lui-même, que ces règles aient été publiées ou existent de façon implicite par le fait qu'elles sont utilisées par certains programmes.

Par exemple, pour nommer un domaine de courrier, l'utilisateur devra respecter les règles de ce mémo ainsi que celles établies par la RFC-822. Pour nommer un hôte, les anciennes règles instaurées pour les fichiers HOSTS.TXT d'alors devront être suivies. Ceci permet d'éviter des problèmes lorsque d'anciens programmes sont transformés pour prendre en compte les noms de domaine.

La syntaxe suivante diminuera notablement le risque de problèmes avec toute application utilisant les noms de domaine (ex., mail, TELNET).

    <domaine> ::= <sous-domaine> | " "
    <sous-domaine> ::= <identifiant> | <sous-domaine> "." <identifiant>
    <identifiant> ::= <lettre> [ [ <ch-ldh> ] <let-dig> ]
    <ch-ldh> ::= <let-dig-hyp> | <let-dig-hyp> <ch-ldh>
    <let-dig-hyp> ::= <let-dig> | "-"
    <let-dig> ::= <lettre> | <digit>

    <lettre> ::= un des 52 caractères alphabetiques de "A" à "Z" (majuscules) ou de
    "a" à "z" (minuscules)

    <digit> ::= un des dix digits de "0" à "9"

Notez que, bien que tant les majuscules que les minuscules soient autorisées dans des noms de domaines, aucune importance n'est accordée à la casse. C'est-à-dire, deux noms lexicographiquement identiques, mais écrit dans une casse différente seront considérés comme identiques. Les identifiants doivent suivre les règles définies pour les noms d'hôtes ARPANET. Ils doivent commencer par une lettre, terminer par une lettre ou un digit, et n'avoir à l'intérieur que des lettres, des digits, et éventuellement le caractère Hyphénation (-). On notera de plus quelques restrictions à propos de la longueur. Un identifiant doit avoir au plus 63 caractères. Par exemple, les chaînes suivantes identifient des hôtes d'Internet :

    A.ISI.EDU  XX.LCS.MIT.EDU  SRI-NIC.ARPA

### 3.6. Enregistrements

Un nom de domaine identifie un noeud. A chaque noeud est attribué un ensemble d'informations sur des ressource, lequel peut être vide. L'ensemble d'informations de ressources associé à un nom particulier est composé de quatre enregistrements de ressources séparés (RR). L'ordre des RR dans un ensemble n'est pas significatif, et ne doit pas nécessairement être préservé par les serveurs de noms, les résolveurs, ou tout autre partie du DNS.

Lorsque nous parlons d'un RR spécifique, nous supposons qu'il contient les éléments suivants :

owner | le nom de domaine où le RR est trouvé.
Type | une valeur encodée sur16 bits spécifiant le type de ressource décrit par cet enregistrement. Les types se réfèrent à une définition abstraite des ressources. Ce mémo définit les types suivants :
A | une adresse d'hôte
CNAME | le nom canonique d'un alias
HINFO | le CPU et le système d'exploitation (OS) d'un hôte
MX | un schéma d'échange de courrier pour ce domaine. Voir [RFC-974] pour plus de détails.
NS | le serveur de noms "autorisé" pour le domaine
PTR | un pointeur vers une autre partie de l'espace de noms de domaines
SOA | le début d'une sphère d'autorité
class | une valeur encodée sur 16 bits identifiant une famille de protocoles ou une instance d'un protocole. Ce mémo définit les classes suivantes :
IN | le système Internet
CH | le système Chaotique
TTL | la durée de vie du RR. Cette valeur est représentée sous forme d'un entier sur 32 bits et est exprimée en secondes, et est principalement utilisée par les résolveurs lorsqu'ils mémorisent temporairement des RR. Le champ TTL définit combien de temps un RR peut être gardé localement avant de devoir être considéré comme obsolète.
RDATA | le type et parfois les données dépendantes de la classe décrivant la ressource :
A | Pour la classe IN, une adresse IP sur 32 bits. Pour la classe CH, un nom de domaine suivi d'une adresse octale Chaotique sur 16 bits.
CNAME | un nom de domaine.
MX | une valeur de préférence sur 16 bits (la plus basse possible) suivie d'un nom d'hôte souhaitant servir d'échangeur de courrier pour le domaine de l'owner.
NS | un nom d'hôte.
PTR | un nom de domaine.
SOA | plusieurs champs.

Le nom du propriétaire (owner) est souvent implicite, plutôt que formant une partie intégrante du RR. Par exemple, de nombreux serveurs de noms représentent l'espace de nom en interne sous forme d'arbre ou de tableaux associatifs, et pointent les RR à partir des noeuds. Le restant des données des RR, soit l'en-tête fixe (type, classe, TTL) valable pour tous les RR, et la partie variable (RDATA) adaptée au type de ressource décrite, étant habituellement stockée à l'extérieur de la représentation de la structure de l'espace.

La signification du champ TTL est la durée limite pendant laquelle un RR peut être conservé dans un cache local. Cette limite ne s'applique pas aux données "autorisées" stockées dans les zones ; celles-ci disposent aussi d'une temporisation, mais définie par la politique de rafraîchissement de la zone elle-même. La TTL est définie par l'administrateur pour toute la zone contenant cet enregistrement. Alors qu'une valeur faible de la TTL peut être utilisée pour diminuer la durée de cache, et qu'une valeur de zéro empêche tout stockage local, l'analyse réelle des performances d'Internet suggère que cette valeur soit de l'ordre de quelques jours pour un hôte type. Lorsque l'on peut anticiper sur une modification, la TTL pourra être réduite juste avant d'effectuer la modification pour optimiser la consistance de l'information au moment du changement, puis être rétablie à sa valeur d'origine après un certain délai.

Les données dans la section RDATA d'un RR est stockée comme une combinaison de chaînes binaires et de noms de domaines. Les noms de domaines seront souvent utilisés à titre de "pointeurs" sur d'autres structures de données du DNS.

#### 3.6.1. Expression des RR sous forme textuelle

Les RR sont représentés sous forme binaire dans les paquets du protocole DNS, et sont habituellement représentés sous une forme fortement compactée lorsque stockés par un serveur de noms ou un résolveur. Dans ce document, nous adopterons une notation similaire à celle utilisée dans les fichiers principaux de façon a exprimer le contenu des RR. Dans ce format, la plupart des RR peuvent être exprimés sur une seule ligne, bien qu'une extension sur plusieurs lignes soit possible par l'utilisation de parenthèses.

Au début de la ligne est mentionné le propriétaire du RR. Si une ligne commence par un esapce, alors on suppose que le propriétaire de l'enregistrement est le même que celui du RR précédent. Des lignes vides sont aussi souvent insérées pour augmenter la lisibilité.

Après le propriétaire, nous exprimerons la TTL, le type, et la classe du RR. Classe et type utilisent les mnémoniques définis ci-avant, la TTL étant exprimée sous forme d'entier apparaissant avant le champ type. De façon à éviter des ambiguïtés d'interprétation lors de l'analyse des lignes, les mnémoniques du type et de la classe sont disjoints, la TTL est un entier, et le mnémonique de type apparaît toujours en dernier. La classe IN et les valeurs de la TTL seront souvent omises dans les exemples par souci de clarté.

Les données de ressource ou section RDATA de l'enregistrement sont exprimées selon la connaissance que nous avons de la représentation classique de ces données.

Par exemple, nous exprimerons un RR transporté par un message sous la forme suivante :

       ISI.EDU.        MX      10 VENERA.ISI.EDU.
                       MX      10 VAXA.ISI.EDU.
       VENERA.ISI.EDU. A       128.9.0.32
                       A       10.1.0.52
       VAXA.ISI.EDU.   A       10.2.0.27
                       A       128.9.0.33

Le RR MX a une section RDATA consistant en un entier sur 16 bits suivi par un nom de domaine. L'adresse du RR utilise la représentation standard d'une adresse IP sur 32 bits.

Cet exemple montre donc six RR, répartis en groupes de deux RR pour chacun des trois noms de domaines.

De la même manière nous pourrions voir :

        XX.LCS.MIT.EDU. IN      A       10.0.0.44
                        CH      A       MIT.EDU. 2420

représentant deux adresses pour l'hôte XX.LCS.MIT.EDU, chacune d'une classe différente.

#### 3.6.2. Alias et expression canonique des noms

Dans des systèmes existants, les hôtes et autres ressources peuvent avoir plusieurs noms différents pour les désigner. Par exemple, les noms C.ISI.EDU et USC-ISIC.ARPA pointent sur le même hôte. De la même manière, dans le cas de boîtes aux lettres, de nombreuses organisations font pointer sur la même boîte aux lettres de multiples noms; par exemple Mockapetris@C.ISI.EDU, Mockapetris@B.ISI.EDU, et PVM@ISI.EDU pointent toutes la même boîte aux lettres (bien que l mécanisme derrière tout ça soit légèrement plus compliqué que cela).

La plupart de ces systèmes manipulent une notion selon laquelle l'un de ces noms est dit primaire (ou canonique), et tous les autres sont des alias.

Le système de domaines dispose d'une telle fonctionnalité par l'utilisation du nom canonique (CNAME) RR. Un RR CNAME identifie son propriétaire comme étant un alias, et spécifie le nom canonique correspondant dans la section RDATA du RR. Si un RR CNAME est présent dans un noeud, aucune autre donnée ne peut y être inscrite; cette restriction garantit que les données relatives à un nom canonique et son alias seront toujours identiques. Cette règle assure de plus qu'un enregistrement CNAME peut être utilisé sans nécessité de consulter un serveur "autorisé" pour obtenir d'autres types de RR.

Les RR CNAME provoquent des actions particulières dans un processus DNS. Lorsqu'un serveur de noms échoue lorsqu'il cherche un enregistrement particulier dans l'ensemble des informations associées au nom de domaine, il vérifie si la ressource n'est pas un enregistrement CNAME avec la bonne classe. Si c'est le cas, le serveur de noms répond à la requête en retournant l'enregistrement CNAME dans la réponse et relance une résolution sur le nom de domaine mentionné dans la section RDATA de l'enregistrement CNAME (donc sur le domaine canonique). La seule exception admise pour cette règle est lorsque la requête initiale demande déjà une information de type CNAME, auquel cas la redirection n'est pas effectuée.

Par exemple, supposez qu'un serveur de noms traite une requête sur le domaine USC-ISIC.ARPA, pour un type d'information A, et dispose des enregistrements suivants :

        USC-ISIC.ARPA   IN      CNAME   C.ISI.EDU
        C.ISI.EDU       IN      A       10.0.0.52

Les deux RR seraient retournés pour une requête sur le type A, tandis qu'une requête sur le type CNAME ou * se verrait répondre par l'enregistrement CNAME uniquement. Les noms de domaine dans les RR pointant sur un autre nom de domaine devra toujours pointer sur un nom canonique et jamais sur un alias. Ceci évitera une multiplication inutile des étapes d'indirection. Par exemple, l'adresse à utiliser dans les RR pour pointer sur l'hôte ci-dessus serait :

         52.0.0.10.IN-ADDR.ARPA  IN      PTR     C.ISI.EDU

plutôt qu'un pointeur sur USC-ISIC.ARPA. Bien sûr, selon le principe de robustesse, les logiciels de domaines ne devraient pas échouer face à des chaînes ou des boucles de CNAME; Les enchaînement de CNAME devront être suivis et les bouclages de CNAME signalées par une erreur.

### 3.7. Requêtes

Les requêtes sont des messages qui sont envoyées à un serveur de noms pour obtenir une réponse. Dans Internet, les requêtes sont transportées par des datagrammes UDP ou sur via des connexions TCP. La réponse du serveur de nom peut soit répondre à la question posée par la requête, rediriger le requérant vers un autre serveur de noms, ou signaler une condition d'erreur.

En général, l'utilisateur ne pourra émettre lui-même directement des requêtes, mais passera par un résolveur qui émettra une ou plusieurs requêtes vers des serveurs de noms et sera en mesure de traiter les conditions d'erreur ou les redirections qui pourraient en résulter. Bien sûr, les questions possibles qui peuvent être posées dans une requête doivent correspondre au type de service pour lequel le résolveur est conçu.

Les requêtes et réponses DNS sont transportées dans un message de format standardisé. Le format de message définit une en-tête contenant un certain nombre de champs fixes toujours présents, et quatre sections pour transporter les paramètres et les RR.

Le champ d'en-tête le plus important est un champ de 4 bits appelé "code opération", permettant de distinguer les différentes requêtes. Parmi les 16 valeurs possibles, une (requête standard) fait partie du protocole officiel, deux autres (requête inverse et requête d'état) sont optionnelles, une autre (fin de traitement) est obsolète, les autres restant non assignées à l'heure actuelle.

Les quatre sections sont :

Question | contient le nom de la requête et ses autres paramètres.
Réponse | contient les RR qui répondent directement à la requête.
Autorisation | contient les RR décrivant d'autres serveurs "autorisés". Peut aussi contenir un RR SOA contenant les données d'autorisation dans la section réponse.
Additionnel | contient les RR qui peuvent aider à exploiter les RR contenus dans les autres sections.

Notez que le contenu, (mais pas le format) de ces sections peut varier suivant le code opération de l'en-tête.

#### 3.7.1. Requête Standard

Une requête standard contient un nom de domaine cible (QNAME), un type de requête (QTYPE), et une classe de requête (QCLASS) et requiert les RR correspondants. Ce type de requête représente la très grande majorité des requêtes qui peuvent arriver à un DNS et nous les appellerons "requête" sans autre mention qualificative. Les requêtes plus particulières seront explicitement qualifiées. Les champs QTYPE et QCLASS font chacun 16 bits de long, et sont un surensemble des types et classes définies. Le champ QTYPE peut contenir :

<tout type> | demande la correspondance sur ce type. (ex., A, PTR).
AXFR | QTYPE spécial pour transfert de zone.
MAILB | demande la correspondance pour toutes les RR de boîtes aux lettres (ex. MB et MG).
* | demande la correspondance sur tous les types de RR.

Le champ QCLASS peut contenir :

<toute classe> | demande la correspondance sur cette classe uniquement (e., IN, CH).
* | demande la correspondance sur toutes les classes de RR.

A partir du nom de domaine cible, du QTYPE, et QCLASS, le serveur de noms recherche les RR correspondants. En plus des enregistrements trouvés, le serveur de noms de domaines peut renvoyer les RR pointant vers un serveur de noms détenant l'information demandée ainsi que tout RR qui peut aider à l'interprétation des RR renvoyés. Par exemple, un serveur de noms de domaines ne disposant pas de l'information demandée peut connaître un autre serveur de nom qui la détient ; un serveur de noms qui renvoie des RR pertinents peut aussi y adjoindre d'autres RR qui relient le nom de domaine vers une adresse.

Par exemple, un agent de courrier tentant d'envoyer un message dans la boîte aux lettres Mockapetris@ISI.EDU peut demander à son résolveur des informations sur le serveur de courrier de ISI.EDU, constituant pour cela la requête QNAME=ISI.EDU, QTYPE=MX, QCLASS=IN. La section réponse renvoyée serait dans ce cas :

        ISI.EDU.        MX      10 VENERA.ISI.EDU.
                        MX      10 VAXA.ISI.EDU.

et la section additionnelle :

        VAXA.ISI.EDU.   A       10.2.0.27
                        A       128.9.0.33
        VENERA.ISI.EDU. A       10.1.0.52
                        A       128.9.0.32

Comme le serveur suppose que si le requérant désire des informations sur un échangeur de courrier, il désirera obtenir les adresses de ces échangeurs peu après.

Notez que l'écriture QCLASS=* nécessite une interprétation particulière notamment concernant les "autorisations". Dans la mesure où un serveur de nom ne connaît pas nécessairement toutes les classes disponibles dans le système de domaines, il ne peut jamais savoir si il est "autorisé" pour toutes les classes. Par voie de conséquence, aucune réponse à une requête QCLASS=* peut se qualifier "d'autorisée".

#### 3.7.2. Rétro-requêtes (Optionel)

Les serveurs de noms peuvent également supporter des requêtes inverses ou "rétro-requêtes" transcodant une ressource particulière en un nom de domaine ou les noms de domaines disposant de cette ressource. par exemple, alors qu'une requête standard peut transcoder un nom de domaine en un RR SOA, la rétro-requête correspondante transcodera ce RR SOA vers le nom de domaine.

L'implémentation de ce service est optionnel dans un serveur de noms de domaines, bien que tous les serveurs de noms doivent au moins être capable d'identifier une requête inverse et renvoyer le message d'erreur "not-implemented". Le système de domaines ne peut pas garantir le résultat ou l'unicité de la réponse à une rétro-requête du fait de son organisation basée sur une hiérarchie de noms de domaines, et non sur une adresse d'hôte ou tout autre type de ressource. Les rétro-requêtes sont principalement utiles pour des fonctions de débogage et la maintenance des bases de données.

Les réponses à rétro-requêtes ne devront pas renvoyer la TTL, et ne doit pas indiquer les cas où le RR identifié fait partie d'un ensemble corrélé (par exemple, une adresse d'un hôte disposant de plusieurs adresses). De ce fait, les RR renvoyés par des rétro-requêtes ne doivent jamais être stockés. Les rétro-requêtes NE sont PAS une méthode acceptable pour transcoder des adresses d'hôtes en noms d'hôtes ; utiliser plutôt le domaine IN-ADDR.ARPA.

Une discussion détaillée sur les rétro-requêtes peut être consultée dans la [RFC-1035].

### 3.8. Requêtes d'état (Expérimental)

A définir.

### 3.9. Requêtes de Fin de Traitement (Obsolète)

Le service optionnel de mention de fin de traitement défini dans les RFC 882 et 883 a été supprimé. Un service de ce type complètement rénové sera peut être rétabli dans le futur, ou bien les codes opération réservés par cet ancienne fonctionnalité seront réaffectés.