Шаг 3 - Формат пакета запроса

Прошу крепко запомнить, что в пакетах запросов и ответов все числовые данные передаются в несколько ином бинарном формате, не как мы все привыкли - сначала младший байт, затем старший, а строго наоборот - сначала старший, а затем младший. Этот формат имеет хождение в процессорах такой известной фирмы как Моторола (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' в ответе есть обязательно. Я так думаю.


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