端口号 - 互联网的"房间号"
如果说 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 进行。
相关术语
常见问题
为什么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位。