Appearance
为什么端口号最大是 65535?
平时我们访问一个本地服务,经常会看到这种地址:
http://127.0.0.1:8080
这里的 127.0.0.1 表示本机。那后面的 8080 是什么?它就是端口号。
再比如:
- MySQL:3306
- Redis:6379
- HTTP:80
- HTTPS:443
这些数字,本质上都是端口号。
但不知道你有没有想过一个问题:端口号为什么最大是 65535? 为什么不是 99999?为什么不是 100000?
其实原因很简单:端口号在 TCP/UDP 协议里,占用的是 16 位。
1、端口号是干什么的?
先说端口号的作用。
- IP 地址负责找到哪台机器
- 端口号负责找到这台机器上的哪个程序
比如你访问:127.0.0.1:8080,可以简单理解成:
127.0.0.1:找到本机8080:找到本机上监听 8080 端口的程序
一台电脑上可以同时运行很多程序。比如:
- MySQL 监听 3306
- Redis 监听 6379
- Nginx 监听 80
- 某个 Java 服务监听 8080
如果只有 IP 地址,没有端口号,系统就不知道这个请求到底应该交给哪个程序处理。
所以端口号的作用就是:在一台机器内部,区分不同的网络程序。
2、为什么最大是 65535?
因为端口号是一个 16 位的数字。
16 位是什么意思?可以理解成有 16 个二进制位置,每一位只能是 0 或 1。
所以 16 位最多可以表示:
- 2^16 = 65536
也就是一共有 65536 种可能。但是计算机一般从 0 开始计数,所以端口号范围就是:
- 0 ~ 65535
一共正好是 65536 个。
这就是为什么端口号最大是 65535。不是因为大家随便定了一个数字,而是协议里端口字段本身就是 16 位。
3、那端口 0 能用吗?
既然端口范围是 0 ~ 65535,那端口 0 能不能用?
一般我们平时不会手动把服务绑定到 0 端口。比如你很少会看到这种配置:
- server.port=0
但在一些开发场景里,端口 0 有特殊含义。它通常表示:让操作系统自动分配一个可用端口。
比如测试程序启动一个临时服务,不想自己指定端口,就可以让系统帮你挑一个空闲端口。
所以端口 0 不是普通业务服务常用的端口,它更多是让系统自动分配端口时使用。
4、端口号也分范围
虽然端口号范围是 0 ~ 65535,但不是所有端口都建议随便用。通常可以分成几类:
第一类:知名端口(0 ~ 1023)
这些端口一般给一些常见协议使用,比如:
- HTTP:80
- HTTPS:443
- SSH:22
- DNS:53
所以我们平时开发自己的服务,一般不建议随便占用这些端口。
第二类:注册端口(1024 ~ 49151)
很多常见软件会使用这个范围里的端口,比如:
- MySQL:3306
- Redis:6379
- PostgreSQL:5432
第三类:动态/临时端口(49152 ~ 65535)
这些端口经常被系统临时分配给客户端连接使用。
比如你用浏览器访问一个网站,网站服务端可能是 443 端口,但你本机这边也需要临时开一个端口来建立连接,这个临时端口通常就是系统自动分配的。
5、为什么我平时常见 8080?
很多本地服务喜欢用 8080,比如 http://localhost:8080。
这是因为 80 是 HTTP 的默认端口,但在很多系统里,监听 80 端口可能需要更高权限,或者已经被 Nginx、Apache 这类服务占用了。
所以开发环境里,大家经常用 8080 来代替 80。它看起来也比较直观:80 的开发版。
类似的还有:
- 8000
- 8001
- 8081
- 8888
这些端口在本地开发里也很常见。
6、端口会不会冲突?
会。 同一个 IP 地址下,同一个协议,同一个端口,一般只能被一个程序监听。
比如已经有一个服务占用了 127.0.0.1:8080,另一个服务再想监听同样的地址和端口,就可能报错:
- Address already in use
意思就是:这个地址已经被占用了。
所以有时候本地项目启动失败,不一定是代码错了,也可能只是端口被占用了。这时候可以换一个端口,比如 8081、8082、9000,或者查一下是谁占用了端口。
Linux / macOS 查看端口占用:
sh
lsof -i :8080Windows 查看端口占用:
sh
netstat -ano | findstr 80807、IP + 端口才是一个完整入口
只看 IP 不够,只看端口也不够。真正定位一个服务,通常要看:IP + 端口。
比如:
127.0.0.1:8080127.0.0.1:3306127.0.0.1:6379
它们 IP 一样,但端口不同,所以可以对应不同程序。
反过来,如果 IP 不同,端口一样,也可能同时存在。比如:
127.0.0.1:8000127.0.0.2:8000
端口都是 8000,但绑定的 IP 不同,也可以表示不同的监听入口。
8、简单总结一下
这件事可以这么记:
- IP 地址负责找到哪台机器
- 端口号负责找到这台机器上的哪个程序
- 端口号是 16 位,所以范围是 0 ~ 65535,65535 是端口号的最大值
- 同一个地址上的同一个端口,通常不能被多个程序同时占用
所以以后再看到:
localhost:8080127.0.0.1:33060.0.0.0:6379
就不要只盯着前面的地址了,后面的端口号也很重要。它决定了这个请求最终会交给哪个程序处理。

