端口(Port)是传输层用于区分同一主机上不同通信入口的 16 位编号,常与 IP 地址 和协议一起标识网络通信端点。
核心问题
一台主机上可能同时运行 Web 服务、数据库、SSH、监控代理和很多客户端连接。IP 地址只能把包送到主机附近,不能说明包该交给哪个应用。端口解决的是“同一主机上的多个传输层入口如何复用同一个 IP 地址”的问题。
核心机制
端口号范围是:
0 到 65535常见划分是:
| 范围 | 常见用途 |
|---|---|
| 0-1023 | well-known ports,例如 HTTP 80、HTTPS 443、SSH 22 |
| 1024-49151 | registered ports,常被应用或服务约定使用 |
| 49152-65535 | dynamic/private ports,常作客户端临时端口 |
端口必须和协议一起看:
TCP 443 和 UDP 443 是不同的传输层入口TCP 连接通常由四元组唯一标识:
(源 IP, 源端口, 目的 IP, 目的端口)服务端监听的是本地 IP:端口。客户端发起连接时,操作系统通常自动分配一个临时源端口:
客户端 10.0.0.5:53124 -> 服务端 203.0.113.10:443服务端看到很多客户端都连到自己的 :443,但每条 TCP 连接的源 IP 或源端口不同,所以四元组不同,内核可以区分它们。
工程用途
- 服务监听:Web 服务监听 80/443,数据库监听自己的服务端口。
- 客户端临时端口:浏览器访问网站时,本机内核分配临时源端口。
- 防火墙规则:常按协议、源/目的 IP 和端口放行或拦截。
- 容器和端口映射:宿主机端口映射到容器内部服务端口。
- 排障定位:
LISTEN、ESTABLISHED、端口占用和连接来源都是网络排障入口。
观察点包括监听地址、端口占用、临时端口耗尽、防火墙放行、NAT 映射、服务绑定到回环还是公网地址。
边界与常见坑
- 端口不是进程 ID:端口是网络编号,进程是操作系统调度对象;只是某个进程可以绑定某个端口。
- 端口不是 socket:Socket 是内核通信对象,端口只是 socket 可能绑定的一个字段。
- 同一个数字在 TCP 和 UDP 下不同:开放 TCP 53 不等于开放 UDP 53。
- 客户端也有端口:客户端源端口不是无意义随机数,它参与 TCP 四元组和 NAT 映射。
- 端口开放不等于服务可用:应用可能没有正确响应、协议不匹配、鉴权失败或被上游代理拦截。
- 绑定
0.0.0.0:port会扩大暴露面:它监听所有 IPv4 本地地址,和只监听127.0.0.1:port风险不同。