DNS-сообщения дополняют имена до четного числа байтов?

Предварительная записка

Да, я знаю о существовании библиотек DNS и простых в использовании DNS-серверов. Я делаю это исключительно для академических целей, чтобы понять, как работают DNS-запросы.

Вопрос

Я смотрел на RFC 1035, чтобы понять, как работают сообщения DNS. Я думаю, что я более или менее все понял в этой записке. Однако есть одна вещь, которую я не могу интерпретировать самостоятельно. Если вы посмотрите на Раздел 4.1.3, вот как описывается формат записи ресурса:

                                   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                     /
   /                                               /
   +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

В этой схеме NAME заканчивается в конце двухбайтового блока. Означает ли это, что его длина в байтах всегда должна быть кратна двум? Формат имен описан ранее в RFC как последовательность меток, оканчивающихся меткой нулевой длины. Это означает, что в зависимости от имени его длина может быть произвольно четной или нечетной. Так же NAME нужно заполнение до четного числа байтов? И если так, как я должен дополнить?

Я бы проигнорировал проблему и предположил, что заполнение не требуется, если бы это не было в Разделе 4.1.1, это указывает, что QNAME не нуждается в набивке. Так как они не указали то же самое для NAME в ответе RR мне было интересно, должен ли я предположить, что есть какая-то разница.

1 ответ

Решение

Там нет отступов. Если у вас есть сомнения, запишите запрос о корневой зоне (имя которого представляет собой один нулевой октет, поэтому имеет нечетную длину) с корневого сервера (им можно доверять, чтобы получить протокол правильно, как он используется в реальном мире.) и посмотрите на это.

Другие вопросы по тегам