Протокол LPD
Протокол LPD (Line Printer Daemon, также LPR — Line Printer Remote) — это сетевой протокол прикладного уровня, предназначенный для организации удалённой печати в компьютерных сетях. Протокол работает поверх транспортного протокола TCP (порт 515) и обеспечивает передачу заданий на печать от клиента к серверу печати, а также управление очередями и состояние принтеров. LPD является одним из старейших протоколов печати, разработанным в 1980-х годах для операционных систем BSD Unix.
История
Протокол LPD был разработан в Калифорнийском университете в Беркли в рамках проекта BSD (Berkeley Software Distribution) в начале 1980-х годов. Первоначально он предназначался для организации печати на удалённых принтерах в локальных сетях университетских кампусов. В 1985 году протокол был описан в документе RFC 1179, который стал стандартом де-факто для печати в Unix-системах.
В 1990-х годах, с распространением персональных компьютеров и операционных систем Windows, протокол LPD уступил место более современным решениям, таким как SMB/CIFS (Server Message Block) и IPP (Internet Printing Protocol). Однако в корпоративных средах, особенно в организациях, использующих Unix-подобные системы, LPD продолжал применяться. В 2000-х годах появились реализации LPD для Windows, а также встроенная поддержка в некоторых моделях сетевых принтеров.
Архитектура протокола
Протокол LPD реализует модель «клиент-сервер». Серверная часть (LPD-демон) постоянно работает на компьютере, подключённом к принтеру, и ожидает входящие подключения на TCP-порту 515. Клиентская часть (LPR-клиент) отправляет запросы на печать, управление очередями или получение информации о состоянии.
Формат сообщений
Все сообщения протокола LPD имеют текстовый формат. Каждое сообщение начинается с однобайтового кода команды, за которым следует имя очереди печати (обычно совпадающее с именем принтера) и, при необходимости, дополнительные параметры. Команды делятся на несколько типов:
- Команды управления очередью (коды 1–3): вывод списка заданий в очереди, удаление задания, получение краткого состояния очереди.
- Команды отправки задания (коды 2–3): передача файла на печать, передача управляющего файла с метаданными.
- Команды получения состояния (коды 4–5): получение подробного состояния принтера или очереди.
Передача задания
Процесс отправки задания на печать включает несколько этапов:
- Клиент устанавливает TCP-соединение с сервером на порту 515.
- Клиент отправляет команду «получить имя очереди» (код 2) с указанием имени принтера.
- Сервер отвечает кодом подтверждения (0 — успех, 1 — ошибка).
- Клиент передаёт управляющий файл (control file), содержащий имя пользователя, имя задания, параметры печати (число копий, ориентация страницы, тип бумаги) и другие метаданные.
- Клиент передаёт один или несколько файлов данных (data files), которые содержат собственно документ для печати.
- После завершения передачи клиент отправляет команду «завершить задание» (код 2 с параметром «завершить»).
- Сервер помещает задание в очередь печати и приступает к его обработке.
Ограничения и недостатки
Протокол LPD обладает рядом существенных ограничений, которые привели к его постепенному вытеснению более современными протоколами:
- Отсутствие шифрования: все данные, включая содержимое документов, передаются в открытом виде. Это делает протокол уязвимым для перехвата и несанкционированного доступа.
- Отсутствие аутентификации: протокол не предусматривает проверки подлинности клиента. Любой компьютер в сети может отправить задание на печать, если знает имя очереди.
- Ограниченная поддержка форматов: LPD изначально ориентирован на печать текстовых файлов и PostScript. Для печати сложных документов (PDF, изображения высокого разрешения) требуется дополнительная обработка на стороне клиента.
- Нет поддержки двусторонней связи: протокол не позволяет принтеру сообщать о своих возможностях (например, о поддержке цветной печати или формата бумаги). Клиент должен заранее знать эти параметры.
- Отсутствие управления заданиями: после отправки задания клиент не может отменить его или изменить параметры (например, количество копий) без удаления всей очереди.
- Ограниченная масштабируемость: протокол плохо подходит для больших корпоративных сетей с сотнями принтеров и тысячами пользователей.
Применение
Несмотря на устаревание, протокол LPD продолжает использоваться в определённых сценариях:
- Unix-подобные системы: в дистрибутивах Linux и BSD-системах LPD-демон (например,
lpdилиcups-lpd) часто используется для обеспечения совместимости со старым оборудованием. - Сетевые принтеры: многие модели принтеров, особенно производства Hewlett-Packard, Canon и Epson, поддерживают LPD как один из протоколов печати по умолчанию.
- Эмуляция в Windows: в операционных системах Windows (начиная с Windows 2000) доступна служба «Диспетчер очереди печати LPD» (LPD Service), которая позволяет Windows-компьютерам выступать в роли сервера печати для Unix-клиентов.
- Встраиваемые системы: в некоторых промышленных контроллерах и POS-терминалах LPD используется из-за простоты реализации и низких требований к ресурсам.
Современные альтернативы
Основными современными протоколами печати, пришедшими на смену LPD, являются:
- IPP (Internet Printing Protocol): разработан в 1996 году, поддерживает шифрование (IPP over TLS), аутентификацию, двустороннюю связь и управление заданиями. Является стандартом для современных принтеров.
- SMB/CIFS: протокол файлового обмена, используемый в сетях Windows для печати через общие папки. Поддерживает аутентификацию и шифрование.
- AirPrint: проприетарный протокол Apple, основанный на IPP, предназначенный для печати с мобильных устройств.
- Google Cloud Print: облачный сервис (закрыт в 2020 году), позволявший печатать на любом принтере, подключённом к интернету.
Интересные факты
- Протокол LPD является одним из немногих сетевых протоколов, чья спецификация (RFC 1179) содержит не только описание команд, но и примеры реализации на языке C.
- В некоторых реализациях LPD (например, в BSD-версии) существует уязвимость, позволяющая злоумышленнику удалённо выполнить произвольный код на сервере, отправив специально сформированное задание на печать.
- Название «Line Printer Daemon» происходит от времени, когда принтеры были построчными (line printers) — устройствами, печатающими по одной строке текста за раз. Несмотря на то, что такие принтеры практически вышли из употребления, название протокола сохранилось.
Источники
- RFC 1179 — Line Printer Daemon Protocol
- Стивенс Р. «UNIX: Разработка сетевых приложений» (1998)
- Документация CUPS (Common Unix Printing System)
- Материалы конференции USENIX (1990-е годы)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →