LPD
LPD (от англ. Line Printer Daemon) — протокол прикладного уровня сетевой модели OSI, предназначенный для управления печатью в компьютерных сетях. Протокол реализует передачу заданий на печать от клиентских компьютеров к серверу печати (принтеру или специализированному устройству) и обратную передачу статуса очереди. LPD является одним из старейших и наиболее распространённых протоколов печати в Unix-подобных операционных системах, а также поддерживается большинством современных сетевых принтеров.
История
Протокол LPD был разработан в начале 1980-х годов в Калифорнийском университете в Беркли для операционной системы BSD Unix. Первоначально он предназначался для организации печати на удалённых принтерах в локальных сетях, где основным транспортным протоколом выступал TCP/IP. В 1990 году протокол был стандартизирован в документе RFC 1179 «Line Printer Daemon Protocol», который закрепил его спецификацию и порядок взаимодействия между клиентом и сервером.
С распространением персональных компьютеров и сетей Ethernet протокол LPD стал использоваться не только в Unix-среде, но и в операционных системах Microsoft Windows (через службу печати TCP/IP), а также в сетевых принтерах и многофункциональных устройствах (МФУ). В 2000-х годах на смену LPD стали приходить более современные протоколы, такие как IPP (Internet Printing Protocol), однако LPD сохраняет совместимость с большим числом устаревших устройств и используется в корпоративных и промышленных сетях.
Архитектура и принцип работы
Протокол LPD работает по схеме «клиент-сервер». Сервером выступает демон печати (line printer daemon), который постоянно ожидает входящие соединения на порту TCP 515. Клиент (пользовательский компьютер или другое устройство) отправляет запросы на этот порт, используя команды, определённые в RFC 1179.
Команды протокола
LPD определяет несколько типов команд, каждая из которых имеет свой код:
- 01 — Start Job — начало задания на печать. Клиент передаёт идентификатор очереди и имя пользователя.
- 02 — Receive Job — передача данных задания (файла для печати) на сервер.
- 03 — Send Queue State — запрос состояния очереди печати (список заданий, их статус).
- 04 — Remove Job — удаление задания из очереди (требует аутентификации).
- 05 — Send Job — запрос на получение данных задания (используется для повторной печати или проверки).
После установки соединения клиент отправляет серию команд, каждая из которых завершается символом перевода строки. Данные задания (файл) передаются в виде потока байтов с контрольными суммами. Сервер подтверждает получение каждой части данных.
Формат данных
Задание на печать в LPD состоит из управляющего файла (control file) и файла данных (data file). Управляющий файл содержит метаданные: имя пользователя, название задания, тип файла (текст, PostScript, PCL и т.д.), параметры печати (количество копий, ориентация страниц). Файл данных — это собственно содержимое для печати (текст, изображение, PDF). Разделение на два файла позволяет серверу обрабатывать задания без необходимости повторной передачи управляющей информации.
Реализации
В Unix-подобных системах
В большинстве дистрибутивов Linux и BSD-систем LPD реализован в виде демона lpd, который входит в пакет LPRng (Line Printer Next Generation) или CUPS (Common Unix Printing System). CUPS, ставший стандартом в Linux, поддерживает LPD как один из протоколов наряду с IPP и SMB. В macOS протокол LPD также поддерживается встроенной системой печати, хотя основным протоколом является IPP.
В Microsoft Windows
В Windows протокол LPD доступен через компонент «Служба печати TCP/IP» (LPD Service), который устанавливается как дополнительная функция. Клиентская часть (LPR) позволяет отправлять задания на сервер LPD. В Windows 10 и 11 поддержка LPD была частично сохранена, но рекомендуется использовать IPP для новых устройств.
В сетевых принтерах
Большинство современных сетевых принтеров (HP, Canon, Epson, Brother и др.) поддерживают LPD в качестве одного из протоколов печати. Обычно очередь печати называется lp, raw или text. Настройка LPD на принтере сводится к указанию IP-адреса и имени очереди.
Преимущества и недостатки
Преимущества
- Простота реализации — протокол использует минимальный набор команд и не требует сложной аутентификации.
- Совместимость — LPD поддерживается практически всеми операционными системами и сетевыми принтерами, выпущенными с 1990-х годов.
- Низкие накладные расходы — небольшой объём служебных данных, что важно для медленных сетей.
Недостатки
- Отсутствие шифрования — данные передаются в открытом виде, что делает протокол уязвимым для перехвата и модификации.
- Слабая аутентификация — команда удаления задания может быть выполнена без проверки прав пользователя (по умолчанию).
- Ограниченная функциональность — LPD не поддерживает двустороннюю печать, сложные настройки страниц, уведомления о завершении.
- Зависимость от TCP — протокол не работает через UDP или другие транспортные протоколы.
Применение
LPD продолжает использоваться в следующих сценариях:
- Корпоративные сети — для печати на устаревших принтерах, не поддерживающих IPP.
- Промышленные системы — в автоматизированных линиях, где требуется простая и надёжная передача заданий.
- Образовательные учреждения — в компьютерных классах с Unix-подобными системами.
- Встроенные системы — в маршрутизаторах, сетевых хранилищах (NAS), где LPD реализован как часть стека печати.
Безопасность
Протокол LPD не предусматривает шифрования или аутентификации на уровне протокола. Для защиты рекомендуется:
- Использовать LPD только в доверенных сетях (локальных или VPN).
- Настроить брандмауэр для ограничения доступа к порту 515.
- Применять туннелирование через SSH или IPsec для передачи данных.
- Включить аутентификацию на уровне операционной системы (например, через PAM).
В современных системах (CUPS, LPRng) добавлена поддержка аутентификации и фильтрации по IP-адресам, но это не является частью стандарта RFC 1179.
Сравнение с другими протоколами
| Характеристика | LPD | IPP | SMB (Windows) |
|---|---|---|---|
| Порт | TCP 515 | TCP 631 | TCP 445 |
| Шифрование | Нет | Поддерживается (TLS) | Поддерживается (SMB3) |
| Аутентификация | Нет | Поддерживается | Поддерживается |
| Двусторонняя печать | Нет | Поддерживается | Поддерживается |
| Поддержка драйверов | Минимальная | Расширенная | Полная |
| Возраст | 1980-е | 1990-е | 1990-е |
Интересные факты
- Название «Line Printer Daemon» происходит от строковых принтеров (line printers), которые были распространены в эпоху мейнфреймов и печатали по одной строке за раз.
- RFC 1179, описывающий LPD, является одним из немногих стандартов, где явно указано, что протокол не предназначен для использования в глобальных сетях (Internet), а только в локальных.
- В некоторых реализациях LPD (например, в BSD) очередь печати может быть настроена на выполнение произвольных команд, что создаёт риск удалённого выполнения кода (RCE) при неправильной конфигурации.
Источники
- RFC 1179 — Line Printer Daemon Protocol, 1990.
- Stevens, W. Richard. «TCP/IP Illustrated, Volume 1: The Protocols». Addison-Wesley, 1994.
- Nemeth, Evi; Snyder, Garth; Hein, Trent R. «Unix System Administration Handbook». Prentice Hall, 2010.
- Документация CUPS (Common Unix Printing System) — OpenPrinting.org.
- Документация Microsoft Windows — «LPR Port Monitor» и «LPD Service».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →