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

Line Printer Daemon

Line Printer Daemon (LPD, демон линейной печати) — это сетевой протокол и одноимённая программа-демон, используемые для управления очередями печати и передачи заданий на печать между компьютерами в локальной сети. Протокол LPD работает на основе TCP/IP и обеспечивает взаимодействие клиентских систем с серверами печати, позволяя отправлять файлы на принтеры, подключённые к сети или к другим компьютерам. LPD является частью стека протоколов Berkeley Printing System, разработанного в Калифорнийском университете в Беркли в начале 1980-х годов, и долгое время служил стандартом де-факто для сетевой печати в Unix-подобных операционных системах.

История

Протокол LPD был создан в рамках проекта Berkeley Software Distribution (BSD) в 1982 году как часть системы печати, предназначенной для локальных и сетевых принтеров. Разработка велась под руководством Эрика Оллмана (Eric Allman), который также известен созданием почтового агента sendmail. Изначально LPD предназначался для управления печатью на машинах, работающих под управлением BSD Unix, и позволял нескольким пользователям отправлять задания на общий принтер.

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

С развитием более современных протоколов, таких как Internet Printing Protocol (IPP), разработанный в конце 1990-х годов, популярность LPD начала снижаться. IPP предложил более гибкие возможности, включая аутентификацию, шифрование и управление заданиями. Тем не менее, LPD остаётся востребованным в устаревших системах, встраиваемых устройствах и в средах, где требуется минимальная конфигурация. В современных дистрибутивах Linux LPD часто заменён на CUPS (Common Unix Printing System), который поддерживает как LPD, так и IPP.

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

Протокол LPD основан на клиент-серверной архитектуре. Серверная часть — это демон lpd, который постоянно работает на машине, управляющей очередями печати. Клиент — это программа lpr, которая отправляет задания на печать. Взаимодействие происходит по протоколу TCP через порт 515.

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

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

  • Команда 1 (Receive Job) — отправка задания на печать. Клиент передаёт файл данных, а также управляющую информацию (имя пользователя, имя задания, параметры форматирования).
  • Команда 2 (Receive Control File) — отправка только управляющего файла, который содержит метаданные задания (например, количество копий, размер бумаги).
  • Команда 3 (Send Queue State) — запрос состояния очереди печати. Сервер возвращает список заданий, ожидающих в очереди.
  • Команда 4 (Send Job) — запрос на получение задания из очереди (обычно используется для повторной отправки или диагностики).
  • Команда 5 (Remove Job)удаление задания из очереди по его идентификатору.

Передача данных

Процесс печати начинается с того, что клиент (например, lpr) устанавливает TCP-соединение с сервером LPD на порт 515. Затем клиент отправляет управляющий файл (control file), содержащий информацию о задании, и один или несколько файлов данных (data files). Управляющий файл включает такие поля, как имя принтера, имя пользователя, имя хоста, размер файла и команды форматирования (например, для PostScript или PCL). После получения всех данных сервер помещает задание в очередь и начинает его обработку.

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

Сервер LPD поддерживает несколько очередей, каждая из которых соответствует определённому принтеру или классу принтеров. Очереди обычно хранятся в каталоге /var/spool/lpd/ на Unix-системах. Каждое задание в очереди имеет уникальный идентификатор, состоящий из номера и имени хоста (например, 1234@hostname). Сервер обрабатывает задания в порядке поступления (FIFO), но администратор может изменить приоритет с помощью утилит lpq и lprm.

Реализации

LPD в Unix-подобных системах

В оригинальных BSD-системах LPD был реализован как часть базовой системы. В современных дистрибутивах Linux LPD часто заменён на CUPS, который включает в себя модуль cups-lpd, эмулирующий поведение классического LPD-сервера. Это позволяет использовать старые клиенты LPD с новыми системами печати. В macOS до версии 10.6 (Snow Leopard) LPD использовался по умолчанию, но затем был заменён на CUPS.

LPD в Windows

В операционных системах Microsoft Windows поддержка LPD появилась начиная с Windows NT 3.5. Служба «Служба печати TCP/IP» (Print Services for UNIX) включает в себя как клиент LPR (Line Printer Remote), так и сервер LPD. Однако в более поздних версиях Windows (начиная с Windows 10) эта служба не устанавливается по умолчанию и требует ручной активации через компоненты системы.

Встраиваемые системы

LPD широко используется во встраиваемых устройствах, таких как сетевые принтеры, маршрутизаторы и точки доступа, благодаря своей простоте и низким требованиям к ресурсам. Многие производители принтеров, включая HP, Brother и Epson, реализуют LPD в своих устройствах для обеспечения совместимости с Unix-системами.

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

Протокол LPD изначально не предусматривал механизмов аутентификации и шифрования. Все данные, включая имена пользователей и содержимое заданий, передаются в открытом виде. Это делает LPD уязвимым для атак типа «человек посередине» (MITM) и перехвата данных. Кроме того, отсутствие аутентификации позволяет любому клиенту в сети отправлять задания на печать или удалять их из очереди, что может привести к несанкционированному использованию принтеров.

Для повышения безопасности рекомендуется:

  • Использовать LPD только в доверенных локальных сетях.
  • Ограничивать доступ к порту 515 с помощью межсетевых экранов.
  • Применять туннелирование через SSH или VPN для шифрования трафика.
  • Переходить на более современные протоколы, такие как IPP с поддержкой TLS.

Применение

Несмотря на устаревание, LPD продолжает использоваться в следующих сценариях:

  • Устаревшие системы — в корпоративных средах, где используются старые Unix-серверы или принтеры, не поддерживающие IPP.
  • Встраиваемые устройства — в принтерах и сетевых адаптерах, где реализация IPP затруднена из-за ограниченных ресурсов.
  • Совместимость — для обеспечения печати с клиентов, работающих под управлением старых версий Windows или macOS, которые не поддерживают IPP.
  • Образовательные учреждения — в некоторых университетах и научных организациях, где LPD остаётся частью инфраструктуры, построенной на BSD-системах.

Критика

Основные недостатки LPD связаны с его возрастом: отсутствие безопасности, ограниченная поддержка современных форматов (например, PDF) и неэффективное управление очередями. В RFC 1179 также отмечены неоднозначности в реализации, что приводило к несовместимости между разными версиями LPD. Кроме того, протокол не поддерживает двустороннюю связь с принтером, что затрудняет диагностику ошибок.

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

  • Порт 515, используемый LPD, был зарезервирован IANA (Internet Assigned Numbers Authority) ещё в 1980-х годах и остаётся закреплённым за этим протоколом до сих пор.
  • В некоторых Unix-системах команда lpr может использоваться для отправки заданий на печать не только через LPD, но и через CUPS, если настроен соответствующий фильтр.
  • LPD лёг в основу протокола LPR (Line Printer Remote), который является его клиентской частью и часто используется как синоним.

Источники

  • RFC 1179 — Line Printer Daemon Protocol, 1987.
  • Stevens, W. Richard. «UNIX Network Programming», Volume 1, 2nd Edition, 1998.
  • Nemeth, Evi; Snyder, Garth; Hein, Trent R. «UNIX System Administration Handbook», 5th Edition, 2017.
  • Документация CUPS (Common Unix Printing System), версия 2.4.

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

На главную BFOmetr →