網路列印兩個基本埠 LPD和9100 的相關知識

2021-04-14 00:06:28 字數 2518 閱讀 8501

列印裝置和主機的連線方式(printer inte***ce)形態多樣,從歷史悠久的串列埠並口到現在流行的網路列印和usb連線,另類的紅外連線和藍芽技術,還有超炫的火線連線(ieee 1394)。

我這篇文章試著**一下網路列印兩個基本埠(lpd和9100)的相關知識。

在速度上,網路列印只能處於中等水平,這倒不是它的強項。

技術變化形式

速度並行(1284)

(centronics)

250 kbps

ecp/epp

35 mbps

tcp/ip

100 mbps

irda

4 mbps

火線(firewire)(1394)

(最多63個裝置)

400 mbps

usb

1.0

12 mbps

2.0

480 mbps

藍芽(bluetooth)

23 mbps

伴隨著tcp/ip的誕生和發展,人們立即把這項技術應用到列印領域,比較早形成標準的就是 line printer daemon protocol,通稱為 lpr 協議,記錄在 rfc1179 文件中。lpr 協議在unix系統上廣泛應用和實現(那時候還沒有windows)。lpr協議規定傳送方的埠從721到731,接收方埠是515。

當hp公司推出jetdirect印表機系列的時候,他們沒有在他們的列印伺服器上採用lpd協議,而是開發了一種新的網路列印協議,這個新協議被稱為 raw 列印協議或 socket api。列印裝置上開啟的tcp埠是9100,這個埠提供到列印引擎(print engine)的直接連線,類似於以前的串列埠或並口,這也就是它被稱為 raw 的原因。這個連線通常是全雙工的,並在列印時提供錯誤報告和狀態資訊。

花開兩朵,各表一枝。我們回頭再談lpr和9100傳輸的細節問題,先看一下網路列印技術在windows作業系統上的發展。

我這裡只講win os作為列印客戶端的情況,win os作為列印伺服器的情況不在討論之列。

從win2000起,微軟推出了standard tcp/ip port monitor(spm),spm跟列印裝置建立tcp連線。spm是一種服務,而不是乙個協議。spm可以使用 raw 或 lpr 協議向印表機傳送作業。對大多數列印裝置來說,raw是預設的協議。如果在埠配置中選擇了lpr 協議,spm 就用lpr協議傳送作業。

spm中實現的lpr協議跟標準的lpr協議還是有所不同的。標準的lpr協議使用埠 721到731來傳送資料,windows spm在使用lpr協議時則使用》1023的未保留的埠。另外乙個不同是,spm向spooler傳送列印作業時無需確定作業的大小,而標準的lpr協議規定列印作業必須包含作業大小的資訊。這樣的話,標準的lpr port monitor就要 spool 作業兩次 — 一次確定作業大小,一次把作業發給spooler。相比之下,spm spool作業一次,提高了列印效率。

我們可以比較一下網路上抓下來的標準lpr包和spm實現的lpr包。

標準lpr包:

tcp: srcport=xsrp(721), dstport=lpd(515)  //注:源埠在721-731之間

spm實現的lpr包:

tcp: srcport=1844, dstport=lpd(515)  //注:源埠》1023

它們的源埠差別如上文所述,目標埠是一致的,另外,我這裡沒貼出來的,lpr協議本身攜帶的資料在兩種情況下是一致的。

再回過頭來看9100埠和lpd埠配置的不同。

lpr協議因為起源的原因,規定了line printer daemon客戶端和服務端互動的一系列命令,大概的內容如下:

switch(command code)

case 03:

send queue state (short);

case 04:

send queue state (long);

case 05:

remove jobs;

} lpr協議規定的一套邏輯細節請參看rfc1179。

我們可以看到,這些命令對我們現在列印的要求來說似乎有些繁瑣,hp當年設立9100埠的意思大概也是跳過這些命令來往,直接把準備好的pdl(page description language)資料扔給列印引擎,raw資料就是pdl用的資料型別,pcl和postscript都是raw資料,列印引擎可以直接處理。

通過比較同乙個作業分別用9100和lpr埠發的資料報,我們可以看到,lpr子命令傳送的「data file」的內容跟tcp協議9100埠發出去的資料內容是一樣的。這個資料內容,我們可以用具體印表機的「print to file」方式得到。

spm用9100埠向列印裝置傳送列印資料,作業完成後就關閉連線。對印表機的管理則遵照rfc 1759(printer mib)用snmp協議來進行,lpr埠則是資料和控制資訊都在乙個連線上處理。打個比方,9100埠是雙車道,資料和控制資訊分開走,lpr則是單車道。

簡而言之,9100埠列印更加高效快捷,更具有擴充套件性。 

參考文件:windows 2000及後續版本的印表機連線技術概述

兩個執行緒依次列印母音字母和子音字母

用兩個執行緒分別列印母音字母和子音字母,列印順序按照26個字母的自然排列順序。其實,這種問題抓住幾個要點就好了,首先起碼得有兩個執行緒吧 public class printletterthread implements runnable 簡單建立乙個實現runnable的類,等下就靠它執行任務了。...

多執行緒技術 兩個執行緒交替列印奇數和偶數

1.要列印的資源 1 package com.mytest.thread 2 3 4 要列印的資源 5 6 7 public class num 2.列印奇數的執行緒 1 package com.mytest.thread 2 3 public class printodd implements r...

SAP和ISAP(網路最大流的兩個增廣路演算法)

isap是對sap進行優化後的演算法,isap時間複雜度為o v 2e sap的時間複雜度為o ve 2 sap include include include include using namespace std const int maxn 100 const int inf 1 30 1 i...