公众号旧文
什么是端口?为什么端口是 65535 个?
如果把一台服务器想象成一栋大楼,那么 IP 地址就是大楼的地址,而端口就是大楼里的房间号。
互联网中的数据包,必须同时知道两个信息才能准确送达:
- IP 地址:找到哪一台机器
- 端口号:找到机器里的哪个程序
这就是端口存在的意义。
一、为什么需要端口?
一台服务器上,通常会同时运行很多服务,比如:
- Web 网站
- SSH 远程登录
- 数据库
- 邮件服务
如果只有 IP 地址,网络数据就只能送到这台服务器,但不知道该交给哪个程序处理。
端口就解决了这个问题。
例如:
| 服务 | 默认端口 |
|---|---|
| HTTP 网站 | 80 |
| HTTPS 网站 | 443 |
| SSH 远程登录 | 22 |
| MySQL 数据库 | 3306 |
当浏览器访问一个网站时,实际上发送的是:
服务器IP:端口
例如:1.2.3.4:443
意思就是:把数据发送到 1.2.3.4 这台服务器的 443 号端口。
服务器收到之后,就会把数据交给正在监听这个端口的程序。
二、端口本质是什么?
很多人以为端口是服务器上的真实接口,其实并不是。
端口只是操作系统中的一个编号。
在操作系统的网络协议栈中,每个网络连接都会绑定一个端口号,用来区分不同的通信。
换句话说:
端口是 TCP/IP 协议里的一种编号机制,用来区分不同网络服务。
三、为什么端口是 65535 个?
端口数量之所以是 65535,原因其实很简单:
端口号在协议中是用 16 位(二进制)表示的。
16 位二进制能表示的最大数字是:2^16 = 65536
端口号范围是:0 - 65535``
一共 65536 个编号。
不过实际使用中 0 端口基本不用,因此常说 65535 个可用端口。
四、端口其实分三类
互联网规范把端口分成三种类型。
1、知名端口(Well-known Ports)
范围:0 - 1023``
这些端口是官方保留的标准服务端口。
例如:
| 端口 | 服务 |
|---|---|
| 22 | SSH |
| 25 | SMTP |
| 53 | DNS |
| 80 | HTTP |
| 443 | HTTPS |
通常只有系统管理员(root)才能绑定这些端口。
2、注册端口(Registered Ports)
范围:1024 - 49151``
这些端口可以被软件注册使用,比如:
| 端口 | 服务 |
|---|---|
| 3306 | MySQL |
| 3389 | RDP |
| 5432 | PostgreSQL |
很多应用程序会默认使用这里的端口。
3、动态端口(Ephemeral Ports)
范围:49152 - 65535``
这些端口一般是 临时端口。
例如:
当你的电脑访问一个网站时:
你的电脑:52341 → 网站服务器:443
52341 就是系统随机分配的一个临时端口。
当连接结束,这个端口就会释放。
五、一台服务器能用多少端口?
理论上 65535 个端口,但实际上有几个限制:
1️⃣ 一个端口只能被一个程序监听 2️⃣ 不同 IP 可以重复使用同一个端口 3️⃣ TCP 和 UDP 端口是分开的
例如:
1.2.3.4:80 (TCP)
1.2.3.4:80 (UDP)
这是两个不同的端口。
六、一个网站为什么只需要 80 或 443?
很多人会疑惑:
如果端口这么多,为什么网站只用 80 或 443?
原因是:
浏览器访问网站时,默认就是这两个端口。
http
:
//example.com → 80
https
:
//example.com → 443
如果用别的端口,就必须写出来:
http
:
//example.com:8080
因此,大多数网站都会使用默认端口。
七、端口其实就是互联网的分流器
总结一下:
IP 地址负责找到服务器,端口负责找到服务器里的程序。
就像这样:
IP = 大楼地址
端口 = 房间号
程序 = 房间里的人
当互联网的数据到达服务器时:
服务器IP → 找到机器
端口号 → 找到程序
程序 → 处理请求
整个互联网就是依靠这种简单的编号机制,把数以亿计的连接区分开来。