Как правильней сформировать DNS запрос?
Такая ситуация, есть сформированный DNS запрос браузером.Скриншот ниже. По RFC, в пакете запроса, в первом 1 байте, перед запрашиваемым именем, должно находится число которое = кол-ву символов, не считая нулевого байта в конце. Однако в данном случае, перед именем домена, в 1 байте, находится число 2(00000010b), при этом ответ на пакет приходит правильный, все символы распознаются правильно.

Хорошо, по идее если я создам аналогичный dns запрос побитово, в который будет различаться лишь 2 самыми первыми байтами в начале dns запроса, которые отвечают за Transaction ID(насколько я понимаю роли он не играет), то ответ должен быть одинаковым ?
Однако, если я сформирую одинаковый запрос, по правилам выше, wireshark выдаст мне предупреждение malformed packet и ответ от dns сервера будет соответствующий. Происходит это из-за того, что в том самом 1 байте перед доменным именем находится число 2(00000010b), которое обозначает что данное имя заканчивается после 2-х байт, не считая нулевой байт.Но почему тогда запрос браузера правильно распознаётся, а мой нет ?
Ладно, зачем я буду ломать голову, просто сформирую пакет учитывая полную длину нужного доменного имени. Формирую опять одинаково побитовый пакет(!кроме самых первых 2-х байт номера идентификации и 1 байта длины имени!), но теперь правильно записав длину имени.
Вроде теперь запрос составлен правильно, всё верно индексируется, wireshark не жалуется, ответ от сервера приходит, но какой ?
Имя не найдено. Я просто не понимаю в чём проблема. Теперь главные вопросы:
- Почему при 1 запросе от браузера, длина имени установлена меньше чем само имя, при этом все поля верно распознаются и !ДАЖЕ! приходит ответ с нужным ip адрессом.
- Почему если я сформирую такой же одинаково побитовый запрос(за исключением Transaction ID), пакет станет malformed и от сервера поступит ответ с ошибкой format error - 0x1, в сравнении с запросом от браузера.
- Почему, если учитывая правило длины имени домена, от сервера возвращается ответ, no such name - 0x3 код?


