2017-08-24 2 views
1

Note préliminaireEst-ce que les noms DNS remplissent les noms des tampons avec un nombre pair d'octets?

Oui, je suis au courant de l'existence des bibliothèques DNS et les serveurs DNS faciles à utiliser. Je le fais uniquement à des fins académiques et pour comprendre le fonctionnement des requêtes DNS.

La question

Je regardais RFC 1035 pour avoir une idée de la façon dont fonctionnent les messages DNS. Je pense que j'ai plus ou moins tout compris dans ce mémo. Cependant, il y a une chose que je ne peux pas interpréter de façon autonome. Si vous regardez la section 4.1.3, voici comment le format d'enregistrement de ressource est décrite:

        1 1 1 1 1 1 
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 
    |            | 
/           /
/     NAME     /
    |            | 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 
    |      TYPE      | 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 
    |      CLASS      | 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 
    |      TTL      | 
    |            | 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 
    |     RDLENGTH     | 
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| 
/     RDATA     /
/           /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 

Dans ce schéma, NAME se termine à la fin d'un bloc de deux octets. Cela signifie-t-il que sa longueur en octets devrait toujours être un multiple de deux? Le format des noms est décrit plus haut dans la RFC sous la forme d'une séquence d'étiquettes, terminée par une étiquette de longueur nulle. Cela signifie que, selon le nom, sa longueur peut être arbitrairement pair ou impair. Est-ce que NAME a besoin de remplissage à un nombre pair d'octets? Et si oui, comment devrais-je tamponner?

J'aurais ignoré le problème et supposé qu'aucun rembourrage n'est requis, si ce n'était que dans la section 4.1.1, il spécifie que QNAME n'a pas besoin de remplissage. Comme ils n'ont pas spécifié la même chose pour NAME dans les réponses RR, je me demandais si je devrais supposer qu'il y a une différence.

Répondre

1

Il n'y a pas de bourrage. En cas de doute, capturez une requête à propos de la zone racine (dont le nom est un seul octet NULL, donc une longueur impaire) d'un serveur racine (on peut leur faire confiance pour avoir le bon protocole tel qu'il est utilisé dans le monde réel) et regardez-le.

+0

Merci! C'est ce que j'espérais! :) –