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 11, Establishing SSH Connections with libssh |
23 | TCP | Telnet | |
25 | TCP | Simple Mail Transfer Protocol (SMTP) | Chapter 8, Making Your Program Send Email |
53 | UDP | Domain Name System (DNS) | Chapter 5, Hostname Resolution and DNS |
80 | TCP | Hypertext Transfer Protocol (HTTP) |
Chapter 6, Building a Simple Web Client Chapter 7, Building 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 9, Loading Secure Web Pages with HTTPS and OpenSSL |
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.