Overview
Port 631 is the home of the Internet Printing Protocol (IPP), the standard that brought order to the chaos of network printing. Every time you print from your phone to a printer you have never configured, every AirPrint job, every Mopria connection, every "driverless" print on Linux or macOS, that is port 631 carrying your document from intention to paper.
IPP did something radical: it made printers speak HTTP. The same protocol that serves web pages now serves print jobs. The same security that protects your banking website can protect your print queue. The same universal understanding that lets any browser talk to any web server now lets any device talk to any printer.
How IPP Works
IPP is built on HTTP, which means it inherits everything HTTP already figured out: request-response patterns, authentication, encryption, streaming, error handling. A print job is just a POST request to port 631.1
When you print, your device sends an HTTP POST to something like ipp://printer.local:631/ipp/print. The body contains IPP-encoded data: what operation you want (Print-Job, Get-Printer-Attributes, Cancel-Job), what attributes matter (paper size, copies, color), and the document itself.
The printer responds with HTTP status codes and IPP-encoded results. Job accepted. Job queued. Job printing. Job complete.
The key operations are elegantly simple2:
- Get-Printer-Attributes: Ask the printer what it can do. What paper sizes? What resolutions? Color or monochrome? This is how your phone knows what options to show you.
- Print-Job: Send a document and print it. One request, one job.
- Create-Job / Send-Document: Create a job first, then send documents. Useful for multi-document jobs or when you want to set options before committing.
- Get-Job-Attributes: Check on your job. Is it printing? Waiting? Done?
- Cancel-Job: Changed your mind? Kill it.
Because IPP rides on HTTP, you get TLS encryption for free. You get Digest authentication. You get all the security infrastructure the web spent decades building.
The History
In 1996, network printing was a disaster.3
The dominant protocol was LPD (Line Printer Daemon), born in BSD Unix in 1988 and codified in RFC 1179. LPD was simple. Too simple. It had no security whatsoever. It gave you almost no information when things failed. It required your computer to spool the entire print job to disk before sending anything, meaning a 100-page color document might need gigabytes of temporary storage. And every printer vendor implemented it slightly differently, so "LPD compatible" was more aspiration than guarantee.4
Novell looked at this mess and proposed something better. They approached Xerox, and together they drafted something called LDPA (Lightweight Document Printing Application). At the same time, IBM was working on HTPP (HyperText Printing Protocol). HP and Microsoft were building proprietary solutions for Windows NT.
Then something unusual happened: competitors decided to cooperate.
In December 1996, representatives from Novell, Xerox, IBM, HP, Microsoft, and others gathered at an IETF "Birds of a Feather" session in San Jose. They agreed to stop building separate solutions and create one standard together. The Internet Printing Protocol working group was born.5
Carl-Uno Manros from Xerox was chosen as project chair. Scott Isaacson from Novell became the main editor. Steve Zilles from Adobe joined as IETF co-chair. Don Wright from Lexmark, Bob Herriot from Sun, and Roger deBry from IBM joined as additional editors.6
On June 22, 1998, IANA assigned port 631 to IPP, with Carl-Uno Manros as the point of contact.7
IPP/1.0 was published in 1999. IPP/1.1 followed in 2000 as RFC 2910 and RFC 2911. The protocol was updated in 2017 (RFC 8010, RFC 8011) and became Internet Standard 92 in June 2018.8
CUPS: The Reference Implementation
In 1997, while IPP was being standardized, a developer named Michael Sweet started building CUPS (Common Unix Printing System). He originally planned to use LPD but switched to IPP when he saw where the standard was heading.9
CUPS became the reference implementation for IPP. It was adopted by most Linux distributions and, in March 2002, by Apple for Mac OS X 10.2. In February 2007, Apple hired Michael Sweet and purchased the CUPS source code.10
Today, CUPS is the printing system behind macOS, iOS, Linux, ChromeOS, and most BSD variants. When you print on any of these systems, you are using IPP on port 631.
Security Considerations
IPP was designed with security in mind. It supports HTTP authentication (Basic, Digest, GSSAPI) and TLS encryption. This was revolutionary compared to LPD, which sent everything in plaintext, including job data and any embedded credentials.11
But security is never finished.
In September 2024, security researcher Simone Margaritelli disclosed a chain of vulnerabilities in CUPS that could lead to remote code execution.12 The attack worked like this:
- The
cups-browsedservice listens on UDP port 631 for printer announcements - An attacker sends a malicious announcement pointing to a fake printer
- The system fetches printer attributes from the attacker's server
- Malicious data is written to a PPD (printer description) file
- When someone prints to that "printer," the malicious commands execute
Censys found over 63,000 CUPS services exposed to the Internet, with more than 42,000 accepting unauthenticated connections.13
The fix is simple: do not expose port 631 to the Internet. Printers are meant to be found on your local network, not the global one. Block UDP 631 at your firewall. Keep CUPS updated.
Modern Usage
IPP is everywhere. Over 98% of printers sold today support it.14
The protocol is the foundation of:
- AirPrint: Apple's driverless printing, built on IPP
- Mopria: The Android printing standard, used by over 120 million certified printers15
- IPP Everywhere: The PWG standard for driverless printing, supported by all major operating systems
Microsoft has announced it will end support for third-party print drivers by 2027, pushing everything toward IPP-based printing.16 The era of hunting for drivers, downloading executables from printer vendor websites, dealing with version conflicts, is ending. IPP makes it possible for your device to ask the printer directly: what can you do? Then print using those capabilities, with no driver installation required.
Related Ports
| Port | Protocol | Relationship |
|---|---|---|
| 80 | HTTP | IPP is built on HTTP |
| 443 | HTTPS | IPPS (IPP over TLS) uses HTTP's security model |
| 515 | LPD/LPR | The legacy protocol IPP replaced |
| 9100 | JetDirect/RAW | Another legacy printing port, sends raw data with no protocol |
Frequently Asked Questions
Was this page helpful?