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

Протокол LPR/LPD

Протокол LPR/LPD — это сетевой протокол прикладного уровня, предназначенный для организации удалённой печати в компьютерных сетях. Он обеспечивает передачу заданий на печать от клиентского компьютера к серверу печати, работающему под управлением операционных систем семейства Unix, а также в смешанных сетях с Windows и macOS. LPR (Line Printer Remote) — это название самого протокола и клиентской части, а LPD (Line Printer Daemon) — имя серверного процесса (демона), который принимает и обрабатывает запросы. Протокол является частью стека протоколов TCP/IP и использует порт 515.

История

Протокол LPR/LPD был разработан в начале 1980-х годов для операционной системы BSD Unix. Его создание было связано с необходимостью централизованного управления принтерами в локальных сетях университетов и исследовательских центров. В отличие от более ранних решений, где принтер подключался напрямую к каждому компьютеру, LPR/LPD позволял нескольким пользователям отправлять задания на одно устройство через сеть.

Первоначальная реализация была описана в RFC 1179 (1990 год), который закрепил основные команды и форматы взаимодействия. Протокол быстро стал стандартом де-факто для печати в Unix-средах. Впоследствии он был портирован на другие платформы, включая Windows (через службу печати TCP/IP) и macOS. Несмотря на появление более современных протоколов, таких как IPP (Internet Printing Protocol), LPR/LPD остаётся востребованным в унаследованных системах и специализированном оборудовании.

Архитектура и принцип работы

Протокол LPR/LPD реализует модель «клиент-сервер». Клиент (LPR) отправляет запрос на печать, а сервер (LPD) принимает его, ставит в очередь и передаёт принтеру.

Компоненты

  • LPR (Line Printer Remote) — клиентская программа, которая запускается на компьютере пользователя. Она формирует задание печати, содержащее имя файла, имя пользователя, имя очереди и само содержимое для печати. LPR устанавливает TCP-соединение с демоном LPD на сервере.
  • LPD (Line Printer Daemon) — серверный процесс, который постоянно прослушивает порт 515. Он отвечает за приём заданий, управление очередями, фильтрацию данных и отправку их на физическое устройство.

Процесс печати

  1. Пользователь отправляет файл на печать с помощью команды lpr (или аналогичной утилиты). В команде указывается имя сервера и имя очереди (например, lpr -P server_name queue_name file.txt).
  2. Клиент LPR устанавливает TCP-соединение с сервером LPD на порту 515.
  3. Клиент отправляет управляющий файл (control file), содержащий метаданные (имя пользователя, имя файла, параметры печати), и файл данных (data file), содержащий сам документ.
  4. Сервер LPD помещает задание в очередь печати, соответствующую указанному имени очереди.
  5. LPD фильтрует данные (если необходимо) и передаёт их на принтер через локальный интерфейс (например, параллельный порт, USB или последовательный порт).
  6. После завершения печати сервер удаляет задание из очереди.

Команды протокола

RFC 1179 определяет несколько основных команд, которые передаются в виде однобайтовых кодов:

  • 02 — принять задание на печать (Receive a Print Job).
  • 03 — принять задание с указанием размера (Receive a Print Job with size).
  • 04 — отправить короткий статус очереди (Send Queue State Short).
  • 05 — отправить длинный статус очереди (Send Queue State Long).
  • 06 — удалить задание из очереди (Remove a Job).

Формат данных

Задание печати состоит из двух частей: управляющего файла и файла данных. Управляющий файл содержит текстовые строки, каждая из которых начинается с однобуквенного кода:

  • H — имя хоста-отправителя.
  • P — имя пользователя.
  • J — имя задания.
  • L — имя файла данных.
  • M — сообщение для пользователя.
  • U — unlink (удалить файл после печати).

Файл данных передаётся в виде последовательности байтов, которая может быть как в текстовом, так и в бинарном формате. Сервер LPD не интерпретирует содержимое данных — он просто передаёт их принтеру или через фильтр.

Очереди печати

Каждый принтер, управляемый через LPD, имеет одну или несколько очередей. Очередь — это именованный набор заданий, ожидающих обработки. Имя очереди обычно совпадает с именем принтера или задаётся администратором. Сервер LPD поддерживает несколько очередей одновременно, что позволяет обслуживать разные устройства или разные типы печати (например, обычная печать, печать черновиков, печать на цветном принтере).

Управление очередями осуществляется с помощью команд lpq (просмотр очереди) и lprm (удаление задания). Эти утилиты также взаимодействуют с LPD через порт 515.

Применение

Протокол LPR/LPD используется в следующих сценариях:

  • Печать в Unix-подобных системах — исторически основной вариант. В современных дистрибутивах Linux LPR/LPD часто заменён на CUPS (Common Unix Printing System), который поддерживает IPP, но сохраняет обратную совместимость с LPD.
  • Печать в смешанных сетях — Windows-клиенты могут отправлять задания на LPD-серверы через службу «Печать через TCP/IP». Это позволяет использовать старые Unix-серверы печати в средах с Windows.
  • Сетевое оборудование — многие сетевые принтеры и МФУ имеют встроенную поддержку LPD, что позволяет подключать их напрямую к сети без выделенного сервера.
  • Встраиваемые системы — протокол используется в промышленных контроллерах, POS-терминалах и других устройствах, где требуется простая и надёжная печать.

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

Протокол LPR/LPD был разработан в эпоху, когда безопасность сетей не являлась приоритетом. Он имеет ряд уязвимостей:

  • Отсутствие аутентификации — сервер LPD не проверяет подлинность клиента. Любой, кто может установить TCP-соединение на порт 515, может отправить задание на печать.
  • Отсутствие шифрования — все данные, включая содержимое документа, передаются в открытом виде. Это позволяет перехватывать информацию с помощью снифферов.
  • Уязвимость к DoS-атакам — злоумышленник может отправить большое количество заданий, переполнив очередь и вызвав отказ в обслуживании.
  • Возможность удаления чужих заданий — команда 06 позволяет удалить задание по номеру, но без проверки прав.

В современных сетях рекомендуется использовать протокол LPR/LPD только в изолированных сегментах или с применением дополнительных средств защиты, таких как VPN или брандмауэры. Для новых систем предпочтительнее использовать IPP с шифрованием TLS.

Сравнение с другими протоколами

ХарактеристикаLPR/LPDIPP (Internet Printing Protocol)SMB (Server Message Block)
Порт515631445
ШифрованиеНетПоддерживает TLSПоддерживает SMB Encryption
АутентификацияНетПоддерживаетПоддерживает
Поддержка современных ОСОграниченная (унаследованный)ШирокаяШирокая (Windows)
СложностьНизкаяСредняяСредняя

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

  • Название «Line Printer» происходит от первых принтеров, которые печатали строка за строкой на непрерывной бумаге (строчные принтеры). Протокол был разработан именно для таких устройств.
  • RFC 1179, описывающий LPR/LPD, является информационным (Informational), а не стандартным (Standards Track). Это означает, что он не является официальным стандартом IETF, но широко используется.
  • В некоторых реализациях LPD поддерживает фильтры, которые могут преобразовывать данные (например, PostScript в PCL) перед отправкой на принтер.
  • Протокол LPR/LPD до сих пор используется в некоторых государственных и корпоративных системах, где обновление ПО затруднено из-за требований совместимости.

Источники

  • RFC 1179 — Line Printer Daemon Protocol.
  • Stevens, W. Richard. «UNIX Network Programming». — Prentice Hall, 1990.
  • Документация к CUPS (Common Unix Printing System).
  • Материалы курса «Сетевые протоколы» (МГУ им. М.В. Ломоносова).

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

На главную BFOmetr →