Нуль-модемное соединение
Нуль-модемное соединение — это способ соединения двух устройств класса ОПД (например, компьютер, терминал, принтер и др.) напрямую с помощью RS-232 последовательного кабеля. Название связано с историческим использованием кабелей RS-232 для соединения двух телетайпов или двух модемов для взаимной связи; по схеме нуль-модема устройства соединяли друг с другом напрямую, кроссируя кабель и минуя модемы. Также такое соединение применяли при передаче данных между компьютером и принтером (оба в этом случае — ОПД), и оно известно как «принтерный кабель».
Стандарт RS-232 задаёт несимметричную схему связи: на одном конце предполагается ОПД, а на другом — ОКПД, например модем. При нуль-модемном соединении линии передачи и приёма данных перекрещиваются. Иногда также перекрещиваются сигнальные линии аппаратной синхронизации (handshake). Стандарт RS-232 не определяет специфику нуль-модемных соединений, поэтому существует несколько вариантов распиновки.
Происхождение
Изначально стандарт RS-232 разрабатывался для работы с телетайпами, которые могли связываться друг с другом через телефонные линии посредством модемов. Каждый телетайп физически соединялся с модемом по интерфейсу RS-232, и уже модемы созванивались между собой, обеспечивая связь. Чтобы соединить два телетайпа напрямую, минуя модемы (нуль-модем), линии соединения перекрещивали. Термин «нуль-модем» также используется как для описания принципа соединения, так и для обозначения самого кабеля или адаптера[1]. В 1980-х — начале 1990-х нуль-модемные кабели были популярным способом передачи данных между ранними персональными компьютерами.
Кабели и адаптеры
Нуль-модемный кабель — это последовательный кабель стандарта RS-232 с перекрещёнными линиями передачи и приёма данных. В некоторых вариантах кабеля также перекрещивают линии аппаратной синхронизации. Часто для соединения используют прямой последовательный кабель и специальный нуль-модемный адаптер, который перекрещивает необходимые сигналы[2][3].
Ниже приведена одна из самых распространённых схем нуль-модемного кабеля для соединения двух ОПД (например, двух ПК) с поддержкой полной аппаратной синхронизации и корректным формированием сигнала Data Carrier Detect (DCD), что важно для определённых программных решений:[2]
| Одна сторона | Направление сигнала |
Другая сторона | |||||
|---|---|---|---|---|---|---|---|
| Сигнал и обозначения | DB-25 пин | DE-9 пин | DE-9 пин | DB-25 пин | Сигнал | ||
| Заземление корпуса | FG | 1 | н/д | Общий | н/д | 1 | FG |
| Передаваемые данные | TxD, TD | 2 | 3 | → | 2 | 3 | RxD |
| Принимаемые данные | RxD, RD | 3 | 2 | ← | 3 | 2 | TxD |
| Запрос на передачу | RTS | 4 | 7 | → | 8 | 5 | CTS |
| Готовность к передаче | CTS | 5 | 8 | ← | 7 | 4 | RTS |
| Сигнальное заземление | SG | 7 | 5 | Общий | 5 | 7 | SG |
| ОКПД готов | DSR | 6 | 6 | ← | 4 | 20 | DTR |
| Обнаружение несущей | DCD, CD | 8 | 1 | ||||
| ОПД готов | DTR | 20 | 4 | → | 1 | 8 | DCD |
| 6 | 6 | DSR | |||||
Применение
Первоначально нуль-модем использовался для прямого соединения двух телетайпов без модемов. С распространением RS-232 среди других устройств разработчикам приходилось выбирать, будет ли их устройство реализовывать интерфейс ОПД или ОКПД. Когда требовалось напрямую соединить два ОПД (или два ОКПД), применяли нуль-модемный кабель[4].
Нуль-модемные соединения активно использовались для передачи файлов между компьютерами или для удалённого управления. В Microsoft Windows через нуль-модем можно осуществлять прямое кабельное соединение. Поздние версии MS-DOS содержали программу InterLnk, а обе этих технологии позволяли отображать жёсткий диск одного компьютера как сетевой диск на другом, не требуя наличия Ethernet-оборудования (сетевой карты или модема)[5]. На компьютерах Amiga нуль-модем через последовательный порт также часто использовался для многопользовательских игр.
С развитием более быстрых технологий, таких как Ethernet, применение нуль-модемных кабелей стало менее распространённым. В современных системах такие кабели используются, например, при отладке ядра операционной системы, что позволяет удалённо отлаживать ядро с минимальным числом драйверов (по сути только с драйвером последовательного порта). Для этого используют, например, KGDB под Linux, ddb для BSD, WinDbg или KD для Windows. Такой способ часто обеспечивает и «серийную консоль» (serial console), доступную даже при сбоях ядра, когда к локальному монитору и клавиатуре доступа нет (GUI оставляет их занятыми и переход к отладчику паники обычно их не высвобождает).
Ещё одна область применения — администрирование «безголовых» устройств с серийной консолью: управляемые свитчи, серверы и различные встраиваемые системы. Особенно широко нуль-модемные соединения применяются в промышленной автоматике: RTU, контроллеры и интеллектуальные датчики. В таких случаях устройства, располагаясь рядом, используют короткие последовательные линии и протоколы передачи, например DNP3, Modbus и другие стандарты семейства IEC. В энергетике, нефтяной, газовой и водной отраслях внедрение новых сетевых технологий происходит медленно из-за значительных капиталовложений в долго служащее оборудование, поэтому последовательные порты и нуль-модемные кабели до сих пор широко используются наряду с Ethernet.
Виды нуль-модемных соединений
Для соединения двух ОПД требуется нуль-модем, функционирующий как ОКПД между ними — через перекрёстное подключение сигналов (TD-RD, DTR-DSR и RTS-CTS). Это может быть реализовано отдельным устройством и двумя кабелями, либо единственным кабелем с соответствующей распайкой. Если устройству требуется сигнал обнаружения несущей (Carrier Detect), его можно сымитировать, внутренне соединив DSR и DCD на разъёме, чтобы получать CD с удалённого DTR. Один из стандартов (Yost) определяет нуль-модемный кабель как rollover cable — кабель, где контакты 1-8 на одном конце соединяются с 8-1 на другом[1].
Распайка DB-25 (слева) и DE-9 (справа) без аппаратной синхронизации
Самый простой вариант нуль-модемного кабеля не поддерживает аппаратную синхронизацию: соединены только линии передачи данных и сигнального заземления, все остальные не подключены. В этом случае управление потоком реализуется программно. Такой кабель подходит только для передачи данных и применяется для устройств, которым не нужны или не требуются модемные управляющие сигналы[1].
Распайка DB-25 (слева) и DE-9 (справа) с петлевой синхронизацией
Для повышения совместимости была придумана схема, при которой программное обеспечение считает, что аппаратная синхронизация реализована за счёт замкнутых на себя проводников («loopback»), хотя на деле передачи управляющих сигналов между устройствами не происходит[1].
Этот кабель совместим с большим числом программ, но по сути не даёт преимуществ по сравнению с предыдущим и не обеспечивает стабильности на высоких скоростях.
Распайка DB-25 (слева) и DE-9 (справа) с частичной синхронизацией
В таком кабеле управляющие линии возвращаются на то же устройство, однако позволяет ограниченно использовать сигналы Request To Send (RTS) и Clear To Send (CTS), без реальной передачи между устройствами. В некоторых случаях сигналы контроля потока могут быть обработаны другим устройством через проверку Carrier Detect (CD) (контакт 1 на DE-9 и контакт 8 на DB-25). Поэтому такие кабели работают только с совместимым программным обеспечением; программная синхронизация также поддерживается.[1]
Распайка DB-25 (слева) и DE-9 (справа) с полной синхронизацией
В этом варианте пересекаются линии RTS/CTS, что несовместимо с предыдущими схемами. При использовании соответствующего ПО такой кабель позволяет использовать более высокие скорости передачи данных и поддерживает как аппаратную, так и программную синхронизацию.[1]
Виртуальный нуль-модем — это программный способ соединения двух программ через виртуальный последовательный порт. В отличие от аппаратного кабеля, виртуальный нуль-модем реализуется полностью программно и эмулирует работу физического нуль-модемного кабеля.[6][7] Все функции аппаратного нуль-модема поддерживаются и виртуальным вариантом. Преимущества такого подхода:
- Более высокая скорость передачи, ограниченная только производительностью компьютера и сети
- Возможность соединения программ по локальной сети или через Интернет, без ограничений длины кабеля
- Практически неограниченное число соединений
- Отсутствие необходимости в физическом кабеле
- Физические последовательные порты компьютера остаются свободными
Например, эмулятор DOSBox позволяет использовать виртуальные нуль-модемы для работы старых DOS-игр.
Другой распространённый пример — UNIX псевдотерминалы (pty), реализующие обычный интерфейс tty для приложений, в том числе с поддержкой виртуального последовательного управления; две такие pty можно объединить программно в виртуальное нуль-модемное соединение.


