Шаг 4 - Более детально о формате пакета. Флаги

*******************************************
---------- Здесь начало пакета ------------
*******************************************
00 26 ............... Length (UINT) 2 байта - длина запроса
*******************************************
-------------- Header Field ---------------
*******************************************
12 34 ............... ID (UINT) 2 байта идентификатор запроса
-------------------------------------------
01 00 ............... FLAGS 2 байта с флагами
-------------------------------------------
00 01 ............... QDCOUNT (UINT) 2 байта счетчик записей в поле Question
-------------------------------------------
00 00 ............... ANCOUNT (UINT) 2 байта счетчик записей в поле Answer
-------------------------------------------
00 00 ............... NSCOUNT (UINT) 2 байта счетчик записей в поле Authority
-------------------------------------------
00 00 ............... ARCOUNT (UINT) 2 байта счетчик записей в поле Additional
*******************************************
------------ Question Field ---------------
*******************************************
03 "www" 09 "netvision" 03 "net" 02 "il" 00 ...... QNAME
( URL в виде 'Ns domain name' :  последовательность символьных меток,
предваряемых байтом длины, оканчивается 'as zero-string' нолем.
Длина - до 255 байт + '\0' ).
-------------------------------------------
00 01 ............... QTYPE (UINT) 2 байта тип запроса 'A' IP адрес
-------------------------------------------
00 01 ............... QCLASS (UINT) 2 байта класс запроса 'IN' Internet
*******************************************
---------- Здесь окончание пакета ---------
*******************************************

Я надеюсь, что вы не запутались в QNAME поле, уж очень неудобно строка в виде байтов выглядит, поэтому я так и сделал, сначала один байт длины поставил, за ним меточку, и так далее. Метки могут быть длиной до 63 символов + 'zero-byte'.

Флаги

 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   OPCODE  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

QR : [q/r] 0 -Query 1 -Response
OPCODE : [q] 0 -standard query, 1 -inverse query, 2 -server status. 3..15 RFU
AA : [r] Authoritative Answer (ставит NS север, отвечающий за домен в запросе)
TC : [r] TrunCation, ставится при урезании сообщения из-за ограничения в длину.
RD : [q/r] Recursion Desired, запрос поддержки рекурсивных обращений
RA : [r] Recursion Available - сервер поддерживает рекурсивные обращения
Z : RFU - Reserved for Future Using
RCODE : [r] Response Code 0 - нет ошибок. 1..5 ошибки.... может быть - позже.

Мои комментарии

В квадратных скобках [q/r] указано где ставится флаг.

Внимание !!

Бит 00 - самый старший, бит 0F - самый младший. Честное слово, так в документации. Ж8-0.

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

TC - тоже пока мне не попадался.
RD - я его ставлю, сервер его не трогает
RA - сервер ставит сам, что бы меня успокоить
RCODE - с этим все понятно. Если ноль, стало быть порядок. Нет - смотри документацию.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Alex Zzlex.