端口号 - 互联网的"房间号"

如果说 IP 地址是一栋建筑的街道地址,那么端口号就是这栋建筑内的房间号。一台服务器之所以能同时提供网页、邮件、SSH、数据库等多种服务,正是因为每种服务都通过不同的端口号加以区分。

端口号是 0 到 65535 之间的整数,共计 65,536 个。在这些数字背后,隐藏着互联网的历史故事、工程师的幽默以及令人意想不到的起源。

知名端口 (0-1023) - 互联网的"黄金地段"

0 到 1023 号端口被称为"知名端口",由 IANA 分配给特定服务。在类 Unix 操作系统上,使用这些端口需要 root 权限。

端口 80 (HTTP) 和 443 (HTTPS)

Web 的标准端口。当你在浏览器中输入 URL 时,http:// 连接到端口 80,https:// 连接到端口 443。之所以可以省略端口号,是因为浏览器会根据协议自动填充默认端口。

为什么是 80?1991 年 Tim Berners-Lee 设计 HTTP 时,端口 80 尚未被分配。它是一个整数,容易记忆,当时的惯例就是"选一个空闲的号码"。端口 443 是后来为 HTTPS 分配的编号,并不是紧挨着 80 预留下来的,两者之间的号码分给了 110 (POP3)、143 (IMAP) 等其他服务。

端口 22 (SSH)

SSH (Secure Shell) 的创建者 Tatu Ylönen 于 1995 年在芬兰赫尔辛基理工大学开发了 SSH。据 Ylönen 本人回忆,他选择端口 22 是因为"21 (FTP) 和 23 (Telnet) 之间正好空着"。FTP 和 Telnet 都是较早的未加密协议,SSH 正是作为它们的安全替代品而设计的。端口 22 位于 21 和 23 之间,无论从象征意义还是实用角度来看都是完美的选择。

端口 25 (SMTP)

邮件发送协议 SMTP 使用的端口。由 Jon Postel 在 1982 年的 RFC 821 中定义。截至 2026 年 8 月,许多 ISP 出于反垃圾邮件的目的限制家用线路对外连接端口 25,邮件客户端改用端口 587 (Submission) 发送邮件。

端口 53 (DNS)

DNS 使用的端口。当浏览器访问网站时,首先会通过端口 53 查询 DNS 服务器,将域名转换为 IP 地址。DNS over HTTPS 将这一通信转移到端口 443 (HTTPS),从而实现 DNS 查询的加密。

注册端口 (1024-49151) - 可申请使用的"准黄金地段"

1024 到 49151 号端口是"注册端口",可以通过向 IANA 申请来分配给特定服务。使用这些端口不需要 root 权限。

端口 3306 (MySQL)

MySQL 的默认端口。它位于 1024 以上的注册端口区间,因此无需 root 权限即可开始监听,这也是开发机上用普通用户权限就能启动数据库的原因。

端口 5432 (PostgreSQL)

PostgreSQL 的默认端口。它与 3306 相距较远,因此同一台服务器上同时安装 MySQL 和 PostgreSQL 也不会冲突;在同一主机上运行多个实例时,惯例是依次改用 5433、5434。

端口 8080

作为 HTTP 替代端口被广泛使用。在开发环境中启动 Web 服务器时,端口 80 需要 root 权限,因此按照惯例使用 8080。这个数字的选择让人一眼就能看出它是"80 的替代品"。

端口 6667 (IRC)

IRC (Internet Relay Chat) 长期沿用的事实标准端口。IANA 正式分配给 IRC 的编号是 194 (明文) 和 994 (TLS),但两者都属于知名端口,需要 root 权限,因此普通用户也能绑定的 6667 反而固定下来。加密连接的惯例是 6697,RFC 7194 将其登记为 IRC 的 TLS 端口。

许多服务器也接受紧邻的 6666,有说法称选择 6667 是为了避开"野兽之数" (666),但并没有公开的确切记录。IRC 于 1988 年由 Jarkko Oikarinen 在芬兰开发,是早期互联网实时通信的核心。

动态端口 (49152-65535) - 临时"住所"

49152 到 65535 号端口是"动态/临时端口",由操作系统临时分配给客户端通信使用。当浏览器连接到 Web 服务器时,服务器端使用端口 443,而客户端则使用操作系统自动分配的动态端口 (例如 52847)。

通信结束后,动态端口会被释放,可以被其他连接重新使用。

端口号趣闻

端口 0 - 存在但无法使用

端口 0 被保留为"通配符"。当程序绑定到端口 0 时,操作系统会自动分配一个可用的动态端口。这在测试或调试中需要"任意可用端口"时非常有用。

端口扫描 - 寻找打开的门

当攻击者寻找服务器漏洞时,端口扫描是第一步。像 nmap 这样的工具会扫描所有端口,调查哪些服务正在运行。关闭不必要的端口,并通过防火墙仅允许必要的端口通过,是服务器安全的基础。

为什么上限是 65535?

端口号最大为 65535,是因为 TCP/UDP 头部中为端口号分配了 16 位。2^16 = 65,536,加上 0,范围就是 0-65535。这一设计在 1981 年的 TCP 规范 (RFC 793) 中就已确立,2022 年取代 RFC 793 的 RFC 9293 仍然保持 16 位。

总结

端口号与 IP 地址一样,是互联网通信的基本要素。端口 80 和 443 支撑着 Web,22 提供安全的远程访问,53 负责域名解析。每一个数字背后都承载着互联网的历史和设计理念。

IP 确认上可以查看的 IP 地址之外,还有无数服务通过端口号区分运行着。下次在浏览器中打开网站时,请记住通信正在通过端口 443 进行。

相关术语

IP 地址 与端口号组合使用来标识通信端点。IP 地址是"街道地址",端口号是"房间号"。 HTTPS 使用端口 443 的加密通信协议,是 Web 流量的标准。 DNS 运行在端口 53 上的域名解析系统。DNS over HTTPS 将其迁移到端口 443。 防火墙 根据端口号允许或拒绝流量的安全设备。关闭不必要的端口是基本的安全措施。 SSH 运行在端口 22 上的加密远程访问协议。1995 年作为 Telnet 的安全替代品而开发。

常见问题

为什么HTTP是端口80?

Tim Berners-Lee在1991年设计HTTP时,端口80未被分配,是个好记的整数。没有深层技术原因,只是当时惯例使用空闲编号。

SSH的端口22为什么是22?

作者Tatu Ylönen发现FTP(21)和Telnet(23)之间空着。SSH是作为FTP和Telnet的安全替代而设计的,所以21和23之间的22在象征意义上也是完美的选择。

端口号为什么最大是65535?

因为TCP/UDP头部为端口号分配了16位。2^16=65536,包含0则范围为0-65535。这个设计在1981年的TCP规范(RFC 793)中确定,2022年取代RFC 793的RFC 9293仍然保持16位。