Port numbers

An IP address alone isn't quite enough. We need port numbers. To return to the telephone analogy, if IP addresses are phone numbers, then port numbers are like phone extensions.

Generally, an IP address gets a packet routed to a specific system, but a port number is used to route the packet to a specific application on that system.

For example, on your system, you may be running multiple web browsers, an email client, and a video-conferencing client. When your computer receives a TCP segment or UDP datagram, your operating system looks at the destination port number in that packet. That port number is used to look up which application should handle it.

Port numbers are stored as unsigned 16-bit integers. This means that they are between 0 and 65,535 inclusive.

Some port numbers for common protocols are as follows:

Port Number Protocol
20, 21 TCP File Transfer Protocol (FTP)
22 TCP Secure Shell (SSH) Chapter 11Establishing SSH Connections with libssh
23 TCP Telnet
25 TCP Simple Mail Transfer Protocol (SMTP) Chapter 8Making Your Program Send Email
53 UDP Domain Name System (DNS) Chapter 5, Hostname Resolution and DNS
80 TCP Hypertext Transfer Protocol (HTTP)

Chapter 6Building a Simple Web Client

Chapter 7Building a Simple Web Server

110 TCP Post Office Protocol, Version 3 (POP3)
143 TCP Internet Message Access Protocol (IMAP)
194 TCP Internet Relay Chat (IRC)
443 TCP HTTP over TLS/SSL (HTTPS)

Chapter 9Loading Secure Web Pages with HTTPS and OpenSSL
Chapter 10Implementing a Secure Web Server

993 TCP IMAP over TLS/SSL (IMAPS)

995 TCP POP3 over TLS/SSL (POP3S)

Each of these listed port numbers is assigned by the Internet Assigned Numbers Authority (IANA). They are responsible for the official assignments of port numbers for specific protocols. Unofficial port usage is very common for applications implementing custom protocols. In this case, the application should try to choose a port number that is not in common use to avoid conflict.