RFC 1035 - Значение косой черты?

Я изучал RFC 1035, чтобы реализовать его в качестве клиента DNS в C++. У меня есть проблемы с неявным использованием синтаксиса в определениях RR упомянутой заметки.

Пожалуйста, взгляните на следующие примеры определения структуры данных. Они иллюстрируют мою проблему понимания.

Начало заголовка RDATA

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

Старт SOA RR

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/                     MNAME                     /
/                                               /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/                     RNAME                     /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    SERIAL                     |
|                                               |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Из макета вы можете сделать вывод, что элемент "TYPE" заголовка RDATA является 16-битным полем с прямым порядком байтов. Но как насчет члена "NAME"? Почему определение имеет знак "/" на границе поля? Похоже, что это неявное использование без разъяснений в RFC.

Затем существует RR "SOA", в котором есть члены MNAME и RNAME. Я начинаю видеть образец здесь: все члены с косой чертой выглядят как строки.

Но есть несколько способов двоичного кодирования строк:

  1. Элемент длины 8/16/32 с данными по длине
read unsigned word x
read data of length x
  1. строка с нулевым символом в конце
read byte x until x is 0
  1. неявное использование всей длины RDATA
cnt = 0
while cnt < RDATA_HEADER.RDLENGTH do
    read byte x and store it
    cnt++
end

Итак, мой вопрос: как правильно интерпретировать использование "/" в любом случае определений RFC? Также делает смешанное использование "/" и "|" подразумевать какой-либо минимальный размер члена? Есть ли RFC для более четкого определения использования этих блоков?

0 ответов

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