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 →