Есть ли какие-либо преимущества для сетевого порядка байтов в новом протоколе?

(Я знаю, что многие люди захотят закрыть этот вопрос; пожалуйста, не надо; я прошу конкретных технических ответов, если таковые имеются).

"Сетевой порядок байтов" является порядком байтов по причинам, которые не могут быть запрошены при переполнении стека. Многие старые протоколы используют этот порядок и не могут быть изменены, но мне интересно, есть ли какие-либо технические причины для выбора старшего порядкового номера для нового протокола.

Я бы подумал, что little endian лучше, потому что 99,99% используемых процессоров имеют порядок endian (технически ARM может делать и то, и другое, но на самом деле он всегда имеет значение порядка байтов). Поэтому я был удивлен, увидев, что CBOR, относительно недавний протокол, использует big endian. Есть ли преимущество, о котором я не думал?

1 ответ

Это сводится к человеческому фактору: легче прочитать многобайтовое целое число в шестнадцатеричном дампе, если оно сначала кодируется старшим значащим байтом (байтами). Например, CBOR-представление 0x1234 (4660) - это последовательность байтов 19 12 34. Если вы ищете значение 0x1234, его легче определить таким образом.

TLDR;

Я работаю в этой сфере более 40 лет, поэтому за этим стоит большая история. Даже определение "байта" изменилось за эти годы, поэтому может потребоваться непредвзятость, чтобы понять, как это развивалось.

Дампы двоичной информации не всегда были ни байтами, ни шестнадцатеричными. Например, машинная архитектура PDP-10 (большая на заре Интернета) использовала 36-битное слово. Поскольку 36 бит не делится на 4 бита равномерно, а делится на 3 бита, восьмеричное восьмеричное (нотация 8) обычно использовалось для выгрузки содержимого памяти на принтер.

Даже в PDP-11 (с 16-разрядными словами и 8-разрядными байтами) было широко распространено использование восьмеричных дампов в словаре. Однако в случае других компьютерных архитектур полезность восьмеричного кода уменьшилась, и шестнадцатеричные дампы стали обычным явлением, но даже для машин с младшим порядком байтов обычно требовался вывод слов (16 или 32 бит), а не байтов за раз, тогда как машина с прямым порядком байтов могла просто сбросьте байты и позвольте человеку сгруппировать их вместе (без замены байтов) визуально.

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