常用端口对照表
常用 TCP/UDP 端口对照表:知名端口(0-1023)与常见服务(SSH、HTTP、HTTPS、数据库等)映射,附简短说明。
实践注解
- 1024 以下端口在 Linux 上需要特权非 root 进程无法绑定 80/443,容器里常见做法是让应用监听 8080 再映射。直接以非特权用户启动并绑定 80 会得到 EACCES,且错误信息往往只写 permission denied,不易联想到端口权限。
- 1433/3306/6379 暴露公网是入侵高发面数据库与 Redis 端口不应直接对公网开放,Redis 默认无认证且曾有未授权写入 SSH key 的利用链。生产应只监听内网或走隧道,并用安全组限制来源。
- 「端口被占用」要先区分监听地址127.0.0.1:3000 与 0.0.0.0:3000、以及 IPv6 的 [::]:3000 在系统里算不同绑定,常常出现「明明没进程却起不来」或「本机可访问、局域网不行」。用 ss -lntp 看清监听地址再判断。
数据来源
- IANA Service Name and Transport Protocol Port Number Registry
- RFC 6335
上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。
原理解析
端口是 TCP/UDP 传输层用来区分同一主机上不同应用的「逻辑地址」(范围 0-65535)。一条连接由「IP + 协议 + 端口」唯一确定:服务端程序通常监听知名或注册端口(如 443),客户端从动态端口(49152-65535)随机发起,双方靠四元组(源 IP、源端口、目的 IP、目的端口)区分会话。
IANA 把端口范围分成三段:0-1023 知名端口(系统服务,通常需管理员权限才能绑定)、1024-49151 注册端口(应用向 IANA 注册)、49152-65535 动态/私有端口(临时分配)。防火墙常按目的端口放行或拦截,因此「开放或关闭哪个端口」直接决定服务能否被外部访问。
什么时候该查这张表
这张表在你要确认「某个端口号对应什么服务」时有用。它的价值是覆盖了运维与开发中最常遇到的一批:远程登录、数据库、Web、邮件、监控。查端口是排查网络问题的高频动作。
不该查的情况:你在做网络排障的完整决策。「连接超时」「被拒绝」「能连但服务不响应」是三类不同问题,端口号只与其中部分相关。端口对了不代表服务可用 —— 端口开放但应用未监听、监听了但被防火墙拦,是常见组合。
判断标准:先看协议层。20/21、143/993、25/110/143/465/587 这类成组的端口属于同一服务的不同通道(控制/数据、发送/接收、明文/加密),只查其中一个往往等于没查。
特别注意端口不是唯一标识:同一端口可以被不同协议占用(8080 既可能是 HTTP 也可能是自建应用),现代服务大量使用非标准端口(3000、5173、8000 等),而这些恰恰是本表覆盖不到的部分。
边界与常见陷阱
端口开放 ≠ 服务可用
「能 telnet 通但请求没响应」常见三种原因:① 应用进程没真正监听(容器起来了但内部服务未就绪);② 监听了 127.0.0.1 而非 0.0.0.0,只接受本机连接;③ 反向代理在该端口上但后端不可达。定位顺序:先在服务端本机 「curl」 一次确认应用本身活着,再查监听地址(「ss -tlnp」 或 「netstat -an」),最后才看网络策略。
22 端口被占用时临时改端口要连带改配置
运维上最常见的应急操作是把 SSH 改到高端口(如 2222)以减少爆破。必须同时改三处:sshd_config 的 Port、服务端防火墙放行、以及云安全组/网络 ACL。只改一处会导致改完就断连、无法回滚。改端口不会让攻击者找不到 —— 他们扫描全端口,改端口只是降低日志噪声与被动发现概率,不是安全措施。
容器与 Kubernetes 里端口号含义不同
在 Docker 里,「-p 8080:80」 的左端是宿主机端口、右端是容器内端口,容器内应用只知道自己那个。在 Kubernetes 里,Service 的 port 与 targetPort 又是另一层映射,且容器监听端口通常不写 0.0.0.0 也能被 Service 访问(kube-proxy 转发)。「端口不通」时先确认你查的是哪一层的端口 —— 这是这类环境最常见的排查弯路。
与相邻内容的分工
要查 HTTP 状态码语义(502 与 504 的区别、502 是谁返回的),用站内「HTTP 状态码」页;本表只回答「端口对应什么服务」。
要查防火墙规则是否放行、用 ss/lsof 查端口占用、读系统日志,属运维命令范畴,不在本表内。
要查 DNS 相关的 53 端口与解析行为,站内另有 DNS 与字符编码相关参考;本表只给端口号对照。
若目的是配置一个反向代理或负载均衡,需要的是方案设计与安全评估,而不是端口号速查。
实战片段
要点:① 排「端口不通」按 ss 查监听 → 本机 curl 验应用 → 才看防火墙/安全组,顺序颠倒会浪费时间;② 监听地址是 127.0.0.1 还是 0.0.0.0 是最常被忽略的一点;③ 容器里要分清宿主机端口(-p 左端)与容器内端口(右端),Kubernetes 还多一层 targetPort 映射;④ 改 SSH 端口必须同步改 sshd_config、防火墙、云安全组三处,且用 sshd -t 校验后再 reload。
# ① 排「端口不通」的三步定位(顺序很重要)
ss -tlnp | grep ':8080' # ① 有人在监听吗?监听地址是 127.0.0.1 还是 0.0.0.0?
curl -sS -o /dev/null -w '%{http_code}
' http://127.0.0.1:8080/ # ② 应用本身活着吗?
# ③ 两者都正常却外部访问不到 → 才轮到防火墙 / 安全组 / 负载均衡
# ② 端口占用排查
sudo lsof -i :8080 -sTCP:LISTEN
sudo ss -tlnp | grep 8080
# Windows:netstat -ano | findstr :8080,然后 taskkill /PID <pid> /F
# ③ 容器场景:分清宿主机端口与容器端口
docker ps --format '{{.Names}} {{.Ports}}' # 0.0.0.0:8080->80/tcp
# 左边是宿主机端口,右边是容器内端口;容器内应用只认右边那个
docker exec <name> sh -c 'ss -tlnp' # 确认容器内实际监听的端口
# ④ SSH 改端口要同步改三处(否则会断连)
# ① /etc/ssh/sshd_config: Port 2222
# ② 防火墙: ufw allow 2222/tcp && ufw deny 22/tcp
# ③ 云安全组 / 网络 ACL 放行 2222
sshd -t && systemctl reload sshd # 先校验配置语法再 reload,别直接 restart| 端口 | 服务 | 说明 |
|---|---|---|
| 20/21 | FTP | 文件传输(21 控制,20 数据) |
| 22 | SSH | 安全远程登录 / SCP / SFTP |
| 23 | Telnet | 明文远程终端(不安全) |
| 25 | SMTP | 邮件发送 |
| 53 | DNS | 域名解析 |
| 67/68 | DHCP | 动态主机配置 |
| 69 | TFTP | 简单文件传输 |
| 80 | HTTP | 超文本传输(明文) |
| 110 | POP3 | 邮件接收 |
| 111 | RPC | 远程过程调用 |
| 123 | NTP | 网络时间同步 |
| 135 | MS-RPC | Windows RPC |
| 137-139 | NetBIOS | Windows 文件/打印共享 |
| 143 | IMAP | 邮件接收(含文件夹) |
| 161/162 | SNMP | 网络管理 |
| 179 | BGP | 边界网关路由 |
| 194 | IRC | 即时聊天 |
| 389 | LDAP | 轻量目录访问 |
| 443 | HTTPS | 加密超文本传输(TLS) |
| 465 | SMTPS | 加密邮件发送 |
| 514 | Syslog | 系统日志 |
| 587 | SMTP Submission | 邮件提交(加密) |
| 636 | LDAPS | 加密目录访问 |
| 993 | IMAPS | 加密邮件接收 |
| 995 | POP3S | 加密邮件接收 |
| 1433 | MSSQL | SQL Server 数据库 |
| 1521 | Oracle | Oracle 数据库 |
| 2049 | NFS | 网络文件系统 |
| 3306 | MySQL | MySQL 数据库 |
| 3389 | RDP | Windows 远程桌面 |
| 5432 | PostgreSQL | PostgreSQL 数据库 |
| 5672 | RabbitMQ | 消息队列 |
| 6379 | Redis | 内存键值数据库 |
| 8080 | HTTP-Alt | 开发常用 HTTP 替代端口 |
| 8443 | HTTPS-Alt | 开发常用 HTTPS 替代端口 |
| 9092 | Kafka | 分布式消息流 |
| 9200 | Elasticsearch | 搜索/分析引擎 |
| 11211 | Memcached | 内存缓存 |
| 27017 | MongoDB | 文档数据库 |
常见问题
0-1023 为什么叫"知名端口"?
IANA 将 0-1023 保留为系统/知名端口,通常只有 root(或管理员)才能绑定,用于 HTTP、SSH、DNS 等标准服务。
端口号范围怎么划分?
0-1023 为知名端口(系统保留);1024-49151 为注册端口(用户程序向 IANA 注册);49152-65535 为动态/私有端口(临时分配)。
如何查看本机正在监听的端口?
Linux 可用 ss -tlnp 或 netstat -tlnp;macOS 用 lsof -i -P;Windows 用 netstat -ano。
为什么开发常用 8080 / 8443?
80/443 常被系统占用且绑定需管理员权限;8080/8443 避开冲突、无需提权,成为框架与本地服务的默认替代端口。