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

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. При этом передача может быть приостановлена в любой момент, даже в середине байта или пакета, что не нарушает целостность данных, так как протокол работает на уровне символов.

Пример работы

  1. Приёмник начинает получать данные от передатчика.
  2. Буфер приёмника заполняется. Когда он достигает порога (например, 80 %), приёмник отправляет символ XOFF.
  3. Передатчик, обнаружив XOFF в принимаемом потоке, прекращает отправку новых данных.
  4. Приёмник обрабатывает накопленные данные, буфер освобождается.
  5. Когда буфер опускается до нижнего порога (например, 20 %), приёмник отправляет символ XON.
  6. Передатчик возобновляет передачу.

Характеристики

Преимущества

  • Простота реализации: не требует дополнительных аппаратных линий (как 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 →