Открыть сервис

C0 Controls

C0 Controls — это набор из 32 управляющих символов в кодировках ASCII и Unicode, занимающих диапазон кодов от 0x00 до 0x1F (десятичные значения от 0 до 31). Они предназначены не для отображения печатных знаков, а для управления устройствами, протоколами передачи данных и форматирования текста. В отличие от управляющих последовательностей (например, Escape-последовательностей ANSI), C0 Controls являются одиночными символами, каждый из которых имеет строго определённую функцию, закреплённую в стандартах ISO/IEC 646, ECMA-48 и ITU-T T.50.

История

Происхождение C0 Controls связано с развитием телеграфной связи и первых компьютерных терминалов. В 1963 году Американская ассоциация стандартов (ASA, ныне ANSI) утвердила стандарт ASCII (American Standard Code for Information Interchange), который впервые кодифицировал 33 управляющих символа (включая DEL — Delete, код 0x7F). В 1967 году была опубликована вторая версия ASCII, где диапазон 0x00–0x1F был закреплён за C0 Controls. Позднее эти коды были включены в международные стандарты ISO/IEC 646 (1972 год) и ECMA-48 (1976 год), а также в Unicode, где они сохранили свои позиции в первых 32 кодовых точках.

В 1970–1980-х годах C0 Controls активно использовались в последовательных интерфейсах (RS-232), телетайпах, модемах и принтерах. С распространением графических пользовательских интерфейсов (GUI) в 1990-х годах их роль в управлении терминалами снизилась, однако они остались критически важными для протоколов передачи данных, текстовых протоколов (например, Telnet, HTTP/1.1) и встроенных систем.

Классификация и функции

Все 32 символа C0 Controls делятся на несколько функциональных групп в зависимости от их назначения.

Управление передачей данных

Эти символы используются для организации и синхронизации потоков данных в последовательных и сетевых протоколах.

  • SOH (Start of Heading, код 0x01) — начало заголовка. Используется в протоколах, где данные разделяются на заголовок и тело (например, в некоторых модемных протоколах).
  • STX (Start of Text, код 0x02) — начало текста. Указывает, что последующие данные являются содержательной частью сообщения.
  • ETX (End of Text, код 0x03) — конец текста. Завершает передачу тела сообщения.
  • EOT (End of Transmission, код 0x04) — конец передачи. Сигнализирует об окончании всего сеанса передачи данных.
  • ENQ (Enquiry, код 0x05) — запрос. Используется для запроса статуса удалённого устройства или подтверждения связи.
  • ACK (Acknowledge, код 0x06) — подтверждение. Положительный ответ на получение данных.
  • NAK (Negative Acknowledge, код 0x15) — отрицательное подтверждение. Сигнал о том, что принятые данные содержат ошибку.
  • SYN (Synchronous Idle, код 0x16) — синхронное ожидание. Используется в синхронных протоколах для поддержания синхронизации между передатчиком и приёмником.
  • ETB (End of Transmission Block, код 0x17) — конец блока передачи. Завершает блок данных, но не весь сеанс.

Управление форматированием

Эти символы управляют отображением текста на печатающих устройствах или терминалах.

  • BS (Backspace, код 0x08) — возврат на один символ назад. Перемещает курсор на одну позицию влево.
  • HT (Horizontal Tab, код 0x09) — горизонтальная табуляция. Перемещает курсор к следующей позиции табуляции (обычно с шагом 8 символов).
  • LF (Line Feed, код 0x0A)перевод строки. Перемещает курсор на следующую строку без изменения столбца.
  • VT (Vertical Tab, код 0x0B) — вертикальная табуляция. Перемещает курсор на следующую вертикальную позицию табуляции.
  • FF (Form Feed, код 0x0C) — перевод страницы. Перемещает курсор на начало следующей страницы (используется в принтерах).
  • CR (Carriage Return, код 0x0D)возврат каретки. Перемещает курсор в начало текущей строки.

Управление устройством

Эти символы предназначены для управления периферийными устройствами, такими как принтеры, модемы или терминалы.

  • DC1 (Device Control 1, код 0x11) — управление устройством 1. Часто используется как XON (включение передачи) в протоколах управления потоком.
  • DC2 (Device Control 2, код 0x12) — управление устройством 2.
  • DC3 (Device Control 3, код 0x13) — управление устройством 3. Часто используется как XOFF (выключение передачи) в протоколах управления потоком.
  • DC4 (Device Control 4, код 0x14) — управление устройством 4.

Разделители информации

Эти символы используются для логического разделения данных на иерархические уровни.

  • FS (File Separator, код 0x1C) — разделитель файлов.
  • GS (Group Separator, код 0x1D) — разделитель групп.
  • RS (Record Separator, код 0x1E) — разделитель записей.
  • US (Unit Separator, код 0x1F) — разделитель единиц.

Прочие управляющие символы

  • NUL (Null, код 0x00) — нулевой символ. Используется для заполнения пустого пространства в данных или как завершающий символ в строках (например, в языке C).
  • BEL (Bell, код 0x07) — звуковой сигнал. Вызывает звуковой или визуальный сигнал на терминале.
  • SO (Shift Out, код 0x0E) — переключение на альтернативный набор символов. Используется для перехода на другой шрифт или кодировку.
  • SI (Shift In, код 0x0F) — переключение на основной набор символов. Возвращает к стандартному набору.
  • DLE (Data Link Escape, код 0x10) — управляющий символ для переключения режимов в протоколах передачи данных.
  • CAN (Cancel, код 0x18) — отмена. Отменяет предыдущий блок данных.
  • EM (End of Medium, код 0x19) — конец носителя. Указывает на физический конец носителя данных (например, ленты).
  • SUB (Substitute, код 0x1A) — замена. Используется для замены ошибочного символа.
  • ESC (Escape, код 0x1B) — управляющий символ для начала последовательности управляющих кодов (например, Escape-последовательностей ANSI).

Применение

Текстовые терминалы и эмуляторы

C0 Controls являются основой управления текстовыми терминалами, такими как VT100, xterm, консоль Linux. Например, символы LF, CR, BS, HT, FF, VT используются для управления курсором и форматирования вывода. Символ BEL (0x07) вызывает звуковой сигнал, а ESC (0x1B) запускает последовательности для изменения цвета, стиля или позиции курсора.

Протоколы передачи данных

В протоколах, таких как Telnet, HTTP/1.1, SMTP и FTP, C0 Controls используются для управления потоком и синхронизации. Например, в Telnet символы IAC (Interpret as Command, код 0xFF) и DONT/WILL/DO/WONT (коды 0xFE–0xFB) являются расширением C0 Controls. В последовательных протоколах (RS-232) символы XON (DC1) и XOFF (DC3) управляют потоком данных.

Программирование

В языках программирования C и C++ C0 Controls представлены escape-последовательностями: \0 (NUL), \a (BEL), \b (BS), \t (HT), \n (LF), \v (VT), \f (FF), \r (CR). В языке Python они также поддерживаются: \x00 для NUL, \x07 для BEL и т.д. В Perl и Ruby используются аналогичные конструкции.

Встроенные системы

В микроконтроллерах и встраиваемых устройствах C0 Controls применяются для управления светодиодами, дисплеями, звуковыми сигналами и протоколами связи (например, I²C, SPI, UART). Символы NUL, ACK, NAK, SOH, STX, ETX, EOT широко используются в протоколах, таких как Modbus, CANopen, и в пользовательских протоколах.

Проблемы и ограничения

Неоднозначность интерпретации

В разных системах и протоколах один и тот же символ C0 Controls может иметь разное значение. Например, символ CR (0x0D) в Unix-подобных системах интерпретируется как возврат каретки, а в Windows — как часть последовательности CR+LF (0x0D 0x0A) для перевода строки. Это приводит к проблемам совместимости при передаче текстовых файлов между системами.

Ограниченная поддержка в современных GUI

Современные графические интерфейсы (Windows, macOS, GNOME, KDE) не поддерживают C0 Controls напрямую, за исключением эмуляторов терминала. В веб-браузерах и текстовых редакторах управляющие символы обычно игнорируются или отображаются как специальные символы (например, в виде шестнадцатеричных кодов).

Безопасность

В некоторых протоколах (например, Telnet, SSH) C0 Controls могут использоваться для атак, таких как внедрение управляющих последовательностей (escape-последовательности) или манипуляции с потоком данных. Это требует экранирования или фильтрации управляющих символов в безопасных приложениях.

Интересные факты

  • Символ NUL (0x00) используется в языке C для завершения строк, что делает невозможным хранение нулевых байтов внутри строки без специальной обработки.
  • Символ BEL (0x07) был назван в честь звукового сигнала, который издавали телеграфные аппараты при получении сообщения.
  • В протоколе Telnet символ IAC (0xFF) используется для интерпретации управляющих команд, что позволяет расширять функциональность C0 Controls.
  • Символ SUB (0x1A) в некоторых системах (например, MS-DOS) используется как маркер конца файла (EOF), хотя в современных системах эта роль отводится системным вызовам.

Источники

  • ISO/IEC 646:1991 — Information technology — ISO 7-bit coded character set for information interchange.
  • ECMA-48 — Control Functions for Coded Character Sets, 5th edition, 1991.
  • ITU-T T.50 — International Reference Alphabet (IRA), 1993.
  • Unicode Standard, Version 15.0, Chapter 2 — General Structure.
  • The ASCII Standard, ANSI X3.4-1986.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →