常用端口对照表

常用 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/21FTP文件传输(21 控制,20 数据)
22SSH安全远程登录 / SCP / SFTP
23Telnet明文远程终端(不安全)
25SMTP邮件发送
53DNS域名解析
67/68DHCP动态主机配置
69TFTP简单文件传输
80HTTP超文本传输(明文)
110POP3邮件接收
111RPC远程过程调用
123NTP网络时间同步
135MS-RPCWindows RPC
137-139NetBIOSWindows 文件/打印共享
143IMAP邮件接收(含文件夹)
161/162SNMP网络管理
179BGP边界网关路由
194IRC即时聊天
389LDAP轻量目录访问
443HTTPS加密超文本传输(TLS)
465SMTPS加密邮件发送
514Syslog系统日志
587SMTP Submission邮件提交(加密)
636LDAPS加密目录访问
993IMAPS加密邮件接收
995POP3S加密邮件接收
1433MSSQLSQL Server 数据库
1521OracleOracle 数据库
2049NFS网络文件系统
3306MySQLMySQL 数据库
3389RDPWindows 远程桌面
5432PostgreSQLPostgreSQL 数据库
5672RabbitMQ消息队列
6379Redis内存键值数据库
8080HTTP-Alt开发常用 HTTP 替代端口
8443HTTPS-Alt开发常用 HTTPS 替代端口
9092Kafka分布式消息流
9200Elasticsearch搜索/分析引擎
11211Memcached内存缓存
27017MongoDB文档数据库

常见问题

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 避开冲突、无需提权,成为框架与本地服务的默认替代端口。