Октет
Октет — группа ровно из восьми битов. Термин применяют в стандартах связи и спецификациях протоколов вместо слова «байт», чтобы исключить двусмысленность: исторически байт мог содержать шесть, семь или девять бит, а октет всегда содержит восемь.
Зачем понадобился отдельный термин
Октет — это восемь бит, ни больше ни меньше. Название происходит от латинского octo, «восемь», и построено так же, как «октава» в музыке или «октаэдр» в геометрии.
Термин возник из-за неопределённости слова «байт». В 1960-е годы байт определялся функционально — как группа бит, достаточная для кодирования одного символа, — и его размер зависел от машины: шесть бит на семействе CDC, семь в телеграфных применениях, девять на архитектурах с 36-битным словом. Авторам протоколов связи такая неоднозначность не подходила: описание формата пакета должно читаться одинаково инженерами разных фирм и континентов. Поэтому в документах CCITT, ISO и позже в RFC закрепили слово «октет» с жёстким значением.
После победы восьмибитного байта разница стала чисто терминологической, но традиция сохранилась. Спецификации протоколов и сегодня измеряют длины полей в октетах, а прикладная документация и интерфейсы операционных систем говорят о байтах. Отдельный случай — французский и румынский языки, где octet и есть обычное слово для байта: французское «Mo» на упаковке накопителя означает мегабайт, а не мегабит.
Октеты в сетевых протоколах
IPv4-адрес занимает 32 бита и записывается четырьмя октетами через точки, каждый в диапазоне от 0 до 255. Запись 192.168.1.1 — это четыре десятичных числа, каждое из которых умещается ровно в один октет; поэтому адрес вида 192.168.1.300 невозможен по определению. Маска подсети описывается так же, а префиксная запись /24 означает, что под номер сети отведены первые три октета.
IPv6-адрес занимает 128 бит — 16 октетов, которые записывают восемью группами по четыре шестнадцатеричных символа. MAC-адрес сетевого интерфейса состоит из шести октетов, где первые три образуют идентификатор производителя.
Длины полей в заголовках тоже задаются в октетах: минимальный заголовок IPv4 — 20 октетов, заголовок TCP без опций — тоже 20, стандартная полезная нагрузка кадра Ethernet ограничена 1500 октетами. Счётчики трафика на маршрутизаторах и в системах мониторинга подписаны как ifInOctets и ifOutOctets именно потому, что берут значения из протокольных структур.
Оговорка про измерение скорости: пропускную способность канала выражают в битах в секунду, а объём переданного — в октетах. Пересчёт очевиден, но путаница в отчётах возникает регулярно, и разница составляет восемь раз.
Порядок октетов и почему он важен
Число, не помещающееся в один октет, приходится раскладывать на несколько, и порядок раскладки не универсален. При прямом порядке (big-endian) первым идёт старший октет, при обратном (little-endian) — младший. Процессоры архитектуры x86 работают с обратным порядком, многие встраиваемые и серверные архитектуры прошлого — с прямым.
Чтобы устройства понимали друг друга, для протоколов зафиксировали единое соглашение: сетевой порядок байтов — прямой. Номер порта 80 передаётся как два октета 0x00 0x50 независимо от того, какой процессор стоит в отправителе. В системных библиотеках за преобразование отвечают функции с говорящими именами htons и htonl — «host to network short» и «host to network long».
Ошибки на этом месте дают характерные симптомы: вместо порта 80 в логах появляется 20480, вместо адреса 10.0.0.1 читается 1.0.0.10, а разбор бинарного формата даёт правдоподобные, но неверные числа. Такие дефекты не ловятся контрольной суммой, потому что сами данные не искажены — неверна их интерпретация.
Октеты в форматах данных и кодировках
Язык описания структур ASN.1, на котором записаны сертификаты X.509 и протокол SNMP, содержит базовый тип OCTET STRING — последовательность произвольных восьмибитных значений без каких-либо предположений о кодировке. Именно так внутри сертификата хранятся ключи и подписи.
Кодировка Base64 определена через октеты буквально: три входных октета (24 бита) переразбиваются на четыре группы по 6 бит, каждая из которых заменяется печатным символом. Отсюда рост объёма на треть и хвостовые символы-заполнители, когда длина входа не кратна трём.
Спецификация UTF-8 в RFC 3629 описывает символ как последовательность от одного до четырёх октетов и задаёт для каждого разряды-маркеры: ведущий октет сообщает длину последовательности, продолжающие начинаются с фиксированной пары бит. Благодаря этому декодер восстанавливает границы символов даже с середины потока, а совместимость с Unicode и старым ASCII сохраняется. Однобайтовые кодовые страницы вроде Windows-1251 сопоставляют символ ровно одному октету и потому вмещают не более 256 знаков.
Символьные коды тоже оперируют октетами. Стандарт ISO/IEC 18004 на QR-коды описывает поток данных как последовательность кодовых слов по восемь бит, а поле Галуа для коррекции ошибок содержит 256 элементов — ровно столько, сколько значений у октета.
Частые вопросы
Октет и байт — это одно и то же?
На современном оборудовании — да, оба означают восемь бит. Разница в строгости определения: октет по смыслу слова всегда восемь бит, а байт исторически определялся как группа бит под один символ и на машинах 1960-х годов бывал шести- и девятибитным. Поэтому в протокольных спецификациях пишут «октет», а в прикладной документации и интерфейсах систем — «байт».
Почему в IP-адресе именно четыре октета?
Адрес IPv4 определён как 32-битное число, а 32 делить на 8 равно четырём. Десятичная запись через точки придумана для удобства человека: каждый октет переводится в число от 0 до 255. Полное адресное пространство составляет 2 в степени 32, то есть около 4,3 миллиарда адресов, чего оказалось мало, и в IPv6 длину увеличили до 128 бит, то есть до 16 октетов.
Что значит «сетевой порядок байтов»?
Это соглашение передавать многооктетные числа старшим октетом вперёд, то есть в прямом порядке. Оно зафиксировано в базовых интернет-стандартах, чтобы устройства с разными процессорами понимали одни и те же заголовки одинаково. Процессоры x86 хранят числа в обратном порядке, поэтому программа обязана преобразовывать значения перед отправкой и после приёма.
Встречается ли термин «октет» вне сетей?
Да. Его применяют в стандартах телефонии и телематики, в описании форматов ASN.1 и DER, в спецификациях кодировок символов, в криптографических RFC, где длины ключей и блоков указывают в октетах. Общее правило простое: чем ближе документ к международной стандартизации, тем вероятнее в нём слово «октет» вместо «байта».
Сколько разных значений кодирует октет?
Двести пятьдесят шесть — от 0 до 255 при беззнаковой трактовке. Каждый бит удваивает число комбинаций, и восемь бит дают 2 в степени 8. Этого хватает на любой символ однобайтовой кодовой страницы, на один канал цвета в модели RGB и на один элемент поля Галуа, в котором работает коррекция ошибок Рида — Соломона.