认识端口

认识端口
Tmerowr解决端口冲突是服务器部署中非常常见的一环,
“端口可以随意设置吗?还是有一个范围?”🧐🧐🧐
这是一个非常好的问题,涉及到网络基础知识的核心。
答案是:
不完全是随意设置,但有非常大的选择空间,并且遵循一定的规则和范围。
🌍端口号的范围 (0 - 65535)
计算机的端口号是一个16位的数字,所以理论范围是从 0 到 65535。但是,这个巨大的范围被划分成了三个主要区域,每个区域都有其约定俗成的用途。👩🎓
知名端口 (Well-Known Ports): 0 ~ 1023
这个范围的端口是“大人物专区”,被严格地保留给最基础、最核心的网络服务。普通应用程序 绝对不应该 使用这个范围的端口。🏂🏂
特点:
- 全球统一,有标准定义(由 IANA 组织管理)。
- 在类Unix系统(如Linux)上,绑定这些端口通常需要
root超级管理员权限。
常见例子:22: SSH (您远程连接服务器用的就是它)80: HTTP (标准网页服务)443: HTTPS (加密的网页服务)21: FTP (文件传输)3306: MySQL 数据库5432: PostgreSQL 数据库 ( docker-compose.yml 里的数据库容器内部就用了这个)
结论:这个范围的端口,我们只用,不占。
注册端口 (Registered Ports): 1024 ~ 49151
这个范围是给各种应用程序和软件“注册”使用的。很多知名的软件会在这里选择一个端口作为默认端口。
特点:
- 虽然有“注册”,但并非强制。这意味着您可以在这个范围内为您的应用选择端口,但有可能会和服务器上已安装的其他软件冲突。
- 我们之前尝试的
8080和18088都属于这个范围。它们被占用,说明您的服务器上已经有其他程序(可能是其他网站、API服务、管理面板等)占用了它们。
常见例子:8080, 8888: 常用的Web服务备用端口。3389: Windows 远程桌面。6379: Redis 数据库。9000: Portainer (一个常见的Docker管理面板)。
结论:这个范围是我们的“主战场”。可以选择,但需要先确认是否被占用。我们选择
28088成功,就是因为这个端口足够“奇葩”,在这个范围里几乎没有软件会默认使用它。
动态/私有端口 (Dynamic/Private Ports): 49152 ~ 65535
这个范围是“自由市场”,被特意保留下来,不进行任何官方注册。❤️
操作系统会从这个范围里随机分配端口给建立向外连接的程序(例如您的浏览器访问百度时,操作系统会临时给浏览器分配一个这个范围的端口)。
特点:
- 非常安全,冲突的概率极低。
- 专门用于自定义、私有或临时的服务。
使用场景:
如果您想最大程度地避免端口冲突,直接从这个范围里随便挑一个,比如 51234,几乎可以保证是可用的。😀
总结与最佳实践
可以设置的范围:理论上您可以自由设置的范围是 1024 ~ 65535。
如何选择:
图省事:选一个你喜欢的、容易记的四位或五位数字,比如 8000 到 9999 之间(避开 8080, 8888 等)。
怕冲突:像我们这次一样,选择一个大于10000且不常见的五位数,比如 1xxxx, 2xxxx 等。28088 就是一个很好的例子。
追求极致安全:直接从动态端口范围 49152 ~ 65535 中挑选。
📌如何验证:
在决定使用一个端口前,可以用我们之前用过的命令来检查它是否已被占用:
1 | sudo lsof -i :您想用的端口号 |
如果命令没有任何输出,恭喜您,这个端口是空闲的!🥳🥳🥳
🔢 端口分类
| 类型 | 范围 | 说明 |
|---|---|---|
| 系统端口(Well-known Ports) | 0 - 1023 | 通常被操作系统服务使用,比如 HTTP(80)、HTTPS(443)、SSH(22) |
| 注册端口(Registered Ports) | 1024 - 49151 | 开发者、软件或第三方服务注册使用的 |
| 动态/私有端口(Ephemeral Ports) | 49152 - 65535 | 操作系统动态分配给临时连接(例如浏览器请求网页) |
🧩 常见端口用途
| 端口号 | 协议 | 服务名 | 用途说明 |
|---|---|---|---|
| 20 | TCP | FTP 数据 | 文件传输协议的数据通道 |
| 21 | TCP | FTP 控制 | 文件传输控制通道 |
| 22 | TCP | SSH | 安全的远程登录(常用) |
| 25 | TCP | SMTP | 电子邮件发送 |
| 53 | UDP | DNS | 域名解析 |
| 80 | TCP | HTTP | 普通网页访问 |
| 443 | TCP | HTTPS | 加密的网页访问 |
| 3000 | TCP | 自定义 | 常用于本地开发服务器 |
| 4000 | TCP | Hexo 开发服务器 | hexo server 默认端口 |
| 8080 | TCP | HTTP-Alt | 常用于备用 HTTP 服务 |
| 8000 | TCP | 自定义 | Python、Hexo、Django 等本地开发也常用 |
在部署Docker应用的时候,确实经常遇到端口被占用的报错,这下算是搞明白端口设置的整体逻辑了🎉🎉🎉
















