Прошу крепко запомнить, что в пакетах запросов и ответов все числовые данные передаются в несколько ином бинарном формате, не как мы все привыкли - сначала младший байт, затем старший, а строго наоборот - сначала старший, а затем младший. Этот формат имеет хождение в процессорах такой известной фирмы как Моторола (Motorola), например. Это из моего личного опыта. Или, допустим, ARM. Хотя справедливости ради нужно отметить, что RISC процессоры ARM 7 могут работать в обеих формах. Но это я снова отвлекся. Так вот, такой формат называется, если не ошибаюсь, 'BigEndian', а интеловский - 'Little Endian', и соответствующим образом перевести это на русский язык я вряд ли смогу. Для некоторых я поясню на конкретном примере : число 12345678h в памяти машины мы привыкли видеть как последовательность байтов 78 56 34 12, а в 'BE'-формате оно будет выглядеть так : 12 34 56 78. Лично для меня это кажется нелепым. Но я своевременно вспоминаю, что есть машины нормальные, а не только ПК фирмы ИБМ.
Вот я и предупреждаю, что в пакете все числовые данные длиной более чем в один байт имеют 'BE' формат.
А так выглядит самый простой запрос (Query), который я смастерил собственноручно с помощью простенькой программы, на нем мы и будем рассматривать формат пакета. Надеюсь, что нет нужды объяснять, что это просто кусок памяти, в которой и сформирован запрос. Заполняющие незначащие нули во внимание не принимать и серверу не передавать :).
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------------------------------------- 00 26 12 34 01 00 00 01 00 00 00 00 00 00 03 77 ...4...........w 77 77 09 6E 65 74 76 69 73 69 6F 6E 03 6E 65 74 ww.netvision.net 02 69 6C 00 00 01 00 01 00 00 00 00 00 00 00 00 .il............. ----------------------^ это последний байт запроса
В общем случае пакет имеет вид:
----------------------- Packet Length - 2 байта ----------------------- Query/Response header - 12 байтов ----------------------- Question - нет фиксированной длины, зависит от количества вопросов ----------------------- Answer - формируется сервером, нет фиксированной длины ----------------------- Authority - формируется сервером, нет фиксированной длины ----------------------- Additional - формируется сервером, нет фиксированной длины -----------------------
Запрос включает в себя 'Length', 'Header' и 'Question', остальные поля - пустые, как принято говорить. А еще проще - нету их вовсе. Ответ может иметь все поля, ну а 'Answer' в ответе есть обязательно. Я так думаю.