본문 바로가기

OS/Windows

포트: LPR

프린터를 위한 윈도우 포트중 표준 TCP/IP 포트는 두 가지 프로토콜을 사용할 수 있다.

Raw와 LPR이 있다.

Raw는 인쇄할 데이터(예. PCL)를 프린트가 listen 하고 있는 포트(보통 9100)에 데이터만 전송하고 접속을 끝내는 단방향성의 전송이다.

반면의 LPR은 UNIX계의 인쇄에서 사용하는 LPD에 전송을 보내는 프로토콜이다. 관련되어 있는 RFC는 1179이다.




LPR 설정에 보면 큐 이름과 LPR 바이트 계산 사용이라는 옵션이 있다.



큐 이름은 LPD에 프린터 잡을 수신하라는 명령을 보낼 때 사용된다.

위와 같이 print라고 되어 있으면 02 + print + LF 와 같이 데이터가 전송이 된다.


LPR 바이트 계산 사용은 기본으로 해제가 되어 있는데,

프린터로 데이터를 전송할 때 서브명령어로 03 명령을 보내게 되는데 데이터의 크기를 보내게 되어 있다.

보통 출력한 데이터를 생성하면서 전송을 하기 때문에 프린트 데이터를 모두 만들기 전까지 데이터의 크기를 알 수 없다. 따라서 윈도우에서는 편법으로 LPR 바이트를 계산 사용을 체크 해제할 경우에 큰 숫자를 Count로 지정을 한다.


위의 그림에서 보면 125,899,906,843,000 이라는 어마어마한 큰 숫자를 보내 데이터를 보내고 lpr은 접속을 끊어버리는 방법을 사용한다. 물론 올바른 프로토콜이 아니기에 lpd는 0xff라는 Nack를 반환한다.


LPR 바이트 계산 사용을 체크를 한다면 아래와 같이 바뀐다.

데이터 크기인 102043 + 1을 보내는 것을 알 수 있다. RFC 1179에 의하면 데이터를 전송하고 0x00을 추가로 보내게 되어 있기에 크기가 1이 증가한다.

lpd(프린터) 역시 Ack(0x00)을 반환한다.