IP 地址与网络
端口号 (Port Number)
约 5 分钟阅读
最后更新: 2026-08-14
什么是端口号
端口号是 0 到 65535 之间的数值,用于在网络通信中识别特定的应用程序或服务。如果将 IP 地址比作建筑物的街道地址,那么端口号就是建筑物内的房间号。
一台服务器能够同时运行 Web 服务器、邮件服务器和 SSH 服务器,正是因为每个服务使用不同的端口号来路由流量。在浏览器中访问 https://example.com 时,背后实际上是向端口 443 发起连接。
端口号的分类
端口号由 IANA (Internet Assigned Numbers Authority) 划分为三个范围。
知名端口 (0-1023)
为主要协议保留的编号,没有操作系统的管理员权限无法使用。HTTP (80)、HTTPS (443)、SSH (22)、SMTP (25)、DNS (53) 等都属于这一范围。
注册端口 (1024-49151)
由特定应用程序向 IANA 登记后使用的编号。MySQL (3306)、PostgreSQL (5432)、Redis (6379) 等数据库和中间件占多数。
动态端口 (49152-65535)
客户端临时使用的编号。浏览器连接 Web 服务器时,会从这一范围内随机取一个作为源端口。不过实际使用的范围取决于操作系统的设置,Linux 的默认值是 32768-60999。
端口扫描与安全风险
端口扫描是指向目标服务器或网络设备的大量端口尝试连接,以调查哪些端口处于开放状态的行为。它既有网络管理员用来确认自家漏洞的正当用途,也被攻击者当作寻找入侵路径的侦察手段。
- TCP SYN 扫描:只发送连接的第一步 (SYN 报文),根据有无响应判断端口的开闭。由于不完成连接,较难被检测到。
- TCP Connect 扫描:建立完整的 TCP 连接来确认。结果可靠,但容易留下日志。
- UDP 扫描:确认 UDP 端口的开闭。若返回表示不可达的 ICMP 响应,即判定为关闭;毫无响应时则视为「可能开放」。由于需要反复重发才能收手,耗时长,判定的确定性也低。
把不需要的端口一直开放着,那里就会成为攻击的入口。基本原则是通过防火墙仅允许必要的端口,阻止其他所有流量。
防火墙端口控制
防火墙最基本的功能,就是基于端口号控制通信的允许与拒绝。
- 入站规则:控制外部到服务器的连接。Web 服务器通常只允许 80 和 443,SSH (22) 则仅允许来自管理员 IP 地址的连接。
- 出站规则:控制服务器到外部的连接。为防止恶意软件与外部的 C&C 服务器通信,需要限制不必要的出站流量。
在云环境中,AWS 的安全组和 Azure 的 NSG 承担这一角色。「只开放必要的最少端口」这一最小权限原则,是网络安全中最基本的基本。
在使用 NAT 的家用路由器上,来自外部的连接默认全部被阻止。除非设置端口转发 (port forwarding),外部无法直接访问内部设备。
实践要点
下面汇总端口号方面在实务中特别重要的知识。
- 从端口 80 迁移到 443:过去网站以 HTTP (端口 80) 为标准,自 2018 年 7 月发布的 Chrome 68 起,Google Chrome 会把所有 HTTP 页面标记为「不安全的连接」,采用 TLS 加密的 HTTPS (端口 443) 事实上已成为标准。端口 80 通常只保留用于把访问者重定向到 HTTPS。
- 使用非标准端口:把 SSH 从默认的 22 改到其他端口 (例如 2222),可以避开大部分自动化的暴力破解攻击。不过这并非本质上的安全措施,只是减少攻击噪音的辅助手段。
- 端口冲突:多个应用程序不能同时使用同一个端口号。开发环境中出现「Address already in use」错误时,需要找出占用该端口的进程并停止它。
常见误解
- 更改端口号可以提高安全性
- 改用非标准端口对避开自动扫描有一定效果,但不能成为本质上的安全措施。攻击者可以扫描全部 65535 个端口,因此强化认证和正确配置防火墙才是真正的对策。
- 关闭端口就不会被黑客攻击
- 关闭端口是重要的措施,但确实存在必须开放的端口 (例如 Web 服务器的 443)。运行在开放端口上的应用程序漏洞仍可能被利用,因此软件更新和正确配置同样不可或缺。
- 只需要知道 80 和 443 端口就够了
- 即使是 Web 开发人员,也会日常接触 SSH (22)、DNS (53)、数据库 (3306, 5432) 等多个端口。排查故障时若缺乏端口号的知识,定位连接问题的原因会花费大量时间。
分享