XON/XOFF¶
XON/XOFF — это протокол управления потоком данных (handshaking) в асинхронной последовательной связи, использующий два специальных управляющих символа для приостановки и возобновления передачи данных. Относится к классу программных (software) методов управления потоком, в отличие от аппаратных (hardware) методов, таких как RTS/CTS. Протокол применяется для предотвращения переполнения буфера приёмного устройства, когда оно не успевает обрабатывать поступающие данные.
¶История
Протокол XON/XOFF возник в эпоху телетайпов и ранних компьютерных терминалов, где скорость передачи данных была низкой, а объём буферов — ограниченным. Первоначально он использовался в системах с последовательным интерфейсом RS-232 для синхронизации работы медленных печатающих устройств (например, телетайпов модели ASR-33) с быстрыми компьютерами. В 1960-х годах, с развитием многопользовательских операционных систем и удалённого доступа через модемы, протокол стал стандартным средством управления потоком в таких средах, как UNIX и ранние версии MS-DOS. Название происходит от мнемонических обозначений символов: XON (transmitter on) и XOFF (transmitter off). В 1970-х годах протокол был формализован в рекомендациях ITU-T (тогда CCITT) для использования в сетях передачи данных.
¶Принцип работы
Протокол XON/XOFF работает на уровне канала передачи данных, используя два управляющих символа из набора ASCII:
- XOFF (символ с кодом 0x13, DC3, Ctrl-S) — сигнал от приёмника к передатчику о необходимости приостановить передачу. Приёмник отправляет этот символ, когда его входной буфер заполняется до определённого порога (обычно на 75–80 % ёмкости).
- XON (символ с кодом 0x11, DC1, Ctrl-Q) — сигнал от приёмника к передатчику о возобновлении передачи. Приёмник отправляет этот символ, когда буфер освобождается до безопасного уровня (обычно на 25–30 % ёмкости).
Передатчик, получив XOFF, прекращает отправку данных до получения XON. При этом передача может быть приостановлена в любой момент, даже в середине байта или пакета, что не нарушает целостность данных, так как протокол работает на уровне символов.
¶Пример работы
- Приёмник начинает получать данные от передатчика.
- Буфер приёмника заполняется. Когда он достигает порога (например, 80 %), приёмник отправляет символ XOFF.
- Передатчик, обнаружив XOFF в принимаемом потоке, прекращает отправку новых данных.
- Приёмник обрабатывает накопленные данные, буфер освобождается.
- Когда буфер опускается до нижнего порога (например, 20 %), приёмник отправляет символ XON.
- Передатчик возобновляет передачу.
¶Характеристики
¶Преимущества
- Простота реализации: не требует дополнительных аппаратных линий (как RTS/CTS), достаточно только двух проводов (передача и приём) и общего провода.
- Совместимость: работает с любым последовательным интерфейсом, поддерживающим передачу символов ASCII (RS-232, RS-422, RS-485, USB-COM-адаптеры).
- Гибкость: не зависит от скорости передачи — может использоваться на любых скоростях, от 300 бит/с до 115200 бит/с и выше.
- Низкая стоимость: не требует дополнительного оборудования.
¶Недостатки
- Задержка реакции: между моментом переполнения буфера и отправкой XOFF есть задержка, связанная со временем передачи символа. При высоких скоростях и больших потоках данных это может привести к потере части данных.
- Проблема с двоичными данными: символы XON и XOFF (0x11 и 0x13) могут встречаться в потоке двоичных данных (например, в изображениях или архивах), что вызовет ложное срабатывание протокола. Для решения этой проблемы применяется «экранирование» (escaping) или используется бинарный протокол с прозрачной передачей.
- Одностороннее управление: протокол работает только в одном направлении для каждого канала. Для двустороннего управления требуется два отдельных канала (или использование полнодуплексного режима с двумя парами символов).
- Зависимость от программного обеспечения: требует поддержки на уровне драйвера или прикладной программы, что может быть не реализовано в некоторых системах.
¶Применение
Протокол XON/XOFF широко применялся в следующих областях:
- Терминальный доступ: в системах UNIX, Linux и Windows для управления потоком при работе с последовательными терминалами (например, через порт COM). В современных системах часто заменён аппаратным управлением.
- Модемная связь: в протоколах передачи данных через модемы (например, XMODEM, YMODEM) для синхронизации потоков.
- Принтеры и плоттеры: для управления потоком данных от компьютера к печатающему устройству, особенно в старых моделях с небольшим буфером.
- Промышленные контроллеры: в системах автоматизации (PLC, SCADA) для связи с датчиками и исполнительными механизмами по последовательным интерфейсам.
- Эмуляторы терминалов: в программах, таких как PuTTY, HyperTerminal, Tera Term, для настройки управления потоком.
¶Современное состояние
С развитием высокоскоростных интерфейсов (USB, Ethernet) и увеличением объёмов буферов в устройствах, протокол XON/XOFF утратил своё доминирующее значение. В большинстве современных приложений предпочтение отдаётся аппаратному управлению потоком (RTS/CTS) или использованию протоколов более высокого уровня (TCP/IP с управлением потоком через окна). Однако XON/XOFF продолжает применяться в:
- Встраиваемых системах: где требуется минимальное количество проводов и низкая стоимость.
- Устаревшем оборудовании: при обслуживании старых принтеров, терминалов и промышленных устройств.
- Отладке и тестировании: в качестве резервного метода, когда аппаратное управление недоступно.
¶Сравнение с другими методами управления потоком
| Характеристика | XON/XOFF (программное) | RTS/CTS (аппаратное) | DTR/DSR (аппаратное) |
|---|---|---|---|
| Тип управления | Программное (символы) | Аппаратное (сигналы) | Аппаратное (сигналы) |
| Дополнительные линии | Нет | Две (RTS, CTS) | Две (DTR, DSR) |
| Задержка реакции | Высокая (зависит от скорости) | Низкая (микросекунды) | Низкая |
| Поддержка двоичных данных | Проблематична | Да | Да |
| Сложность реализации | Низкая | Средняя | Средняя |
| Применение | Терминалы, модемы, принтеры | Высокоскоростные устройства | Управление модемами |
¶Интересные факты
- Символы XON и XOFF (Ctrl-Q и Ctrl-S) до сих пор распознаются многими эмуляторами терминалов в UNIX-подобных системах как команды управления потоком, даже если протокол отключён. Это может приводить к случайной приостановке вывода при нажатии Ctrl-S в терминале.
- В некоторых старых протоколах, таких как Kermit, использовалась модифицированная версия XON/XOFF с экранированием управляющих символов для передачи двоичных данных.
- Протокол XON/XOFF был одним из первых методов управления потоком, реализованных в операционной системе UNIX (в драйвере последовательного порта tty).
¶Критика
Основная критика протокола XON/XOFF связана с его неэффективностью при передаче двоичных данных и высокой задержкой реакции. В современных высокоскоростных системах (например, при передаче видео или аудиопотоков) потеря даже одного байта из-за задержки XOFF может привести к серьёзным искажениям. Кроме того, протокол не поддерживает «горячее» управление потоком в многопоточных средах, где несколько процессов могут одновременно отправлять данные. В результате, в большинстве новых разработок отдают предпочтение аппаратным методам или протоколам с подтверждением (например, TCP).
¶Источники
- ITU-T Recommendation V.24 (1996) — List of definitions for interchange circuits between data terminal equipment (DTE) and data circuit-terminating equipment (DCE).
- ANSI/TIA-232-F (1997) — Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Binary Data Interchange.
- Tanenbaum, A. S. (2003). Computer Networks (4th ed.). Prentice Hall. — Глава 3.2 «Управление потоком».
- Stallings, W. (2007). Data and Computer Communications (8th ed.). Pearson. — Глава 6.2 «Протоколы управления потоком».
- Документация операционной системы Linux: man termios (раздел о флагах IXON, IXOFF, IXANY).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


