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

如果说 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 则是 HTTP 之后被分配的下一个编号。

端口 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 中定义。如今,许多 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 的默认端口。为什么是 3306?据 MySQL 联合创始人 Michael "Monty" Widenius 所说,并没有什么特别深层的原因,只是"一个空闲的号码"。

端口 5432 (PostgreSQL)

PostgreSQL 的默认端口。和 MySQL 一样,没有什么特别的起源故事,只是开发过程中选定的数字沿用至今。

端口 8080

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

端口 6666-6669 (IRC)

IRC (Internet Relay Chat) 的默认端口范围。6666 让人联想到"野兽之数" (666),但 IRC 开发者 Jarkko Oikarinen 选择这个数字的原因已不可考。IRC 于 1988 年在芬兰开发,是早期互联网实时通信的核心。

动态端口 (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) 中就已确立。

总结

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

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

相关术语

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