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