These are documented by the Service Name and Transport Protocol Port Number Registry.

Port Service
21 FTP
22 SSH
23 Telnet
25 SMTP
42 nameserver
43 nicname
53 DNS
67, 68 DHCP
80 HTTP
88 kerberos
110 POP3
123 NTP
143 IMAP
389 LDAP
443 HTTPS
636 LDAP over TLS/SSL
989, 990 FTP over TLS/SSL
3306 mysql
3398 RDP
5432 postgres

Port Ranges

  • System Ports (0-1023)
  • User Ports (1024-49151)
  • Dynamic/Private Ports (49152-65535)

source

Find unassigned port numbers with Postgres

$ curl -o tcp-registry.csv https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv
$ head -n 2 tcp-registry.csv
-- schema.sql
DROP TABLE IF EXISTS tcp_registry_csv;
CREATE TABLE tcp_registry_csv (
  id SERIAL,
  service_name CHARACTER VARYING,
  port_number CHARACTER VARYING,
  transport_protocol CHARACTER VARYING,
  description CHARACTER VARYING,
  assignee CHARACTER VARYING,
  contact CHARACTER VARYING,
  registration_date CHARACTER VARYING,
  modification_date CHARACTER VARYING,
  reference CHARACTER VARYING,
  service_code CHARACTER VARYING,
  known_unauthorized_uses CHARACTER VARYING,
  assignment_notes CHARACTER VARYING
);
-- seed.sql
COPY tcp_registry_csv (
  service_name,
  port_number,
  transport_protocol,
  description,
  assignee,
  contact,
  registration_date,
  modification_date,
  reference,
  service_code,
  known_unauthorized_uses,
  assignment_notes
)
FROM '/Users/rd/code/tcp-registry/tcp-registry.csv'
DELIMITER ','
CSV HEADER;

[source] [docs]

$ createdb tcp_registry
$ psql tcp_registry < schema.sql
$ psql tcp_registry < seed.sql
$ psql tcp_registry
tcp_registry=# select id, port_number, description
tcp_registry-# from tcp_registry_csv
tcp_registry-# where description ilike '%unassigned%'
tcp_registry-# order by id;