端口Port)是传输层用于区分同一主机上不同通信入口的 16 位编号,常与 IP 地址 和协议一起标识网络通信端点。

核心问题

一台主机上可能同时运行 Web 服务、数据库、SSH、监控代理和很多客户端连接。IP 地址只能把包送到主机附近,不能说明包该交给哪个应用。端口解决的是“同一主机上的多个传输层入口如何复用同一个 IP 地址”的问题。

核心机制

端口号范围是:

0 到 65535

常见划分是:

范围常见用途
0-1023well-known ports,例如 HTTP 80、HTTPS 443、SSH 22
1024-49151registered ports,常被应用或服务约定使用
49152-65535dynamic/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 和端口放行或拦截。
  • 容器和端口映射:宿主机端口映射到容器内部服务端口。
  • 排障定位LISTENESTABLISHED、端口占用和连接来源都是网络排障入口。

观察点包括监听地址、端口占用、临时端口耗尽、防火墙放行、NAT 映射、服务绑定到回环还是公网地址。

边界与常见坑

  • 端口不是进程 ID:端口是网络编号,进程是操作系统调度对象;只是某个进程可以绑定某个端口。
  • 端口不是 socketSocket 是内核通信对象,端口只是 socket 可能绑定的一个字段。
  • 同一个数字在 TCP 和 UDP 下不同:开放 TCP 53 不等于开放 UDP 53。
  • 客户端也有端口:客户端源端口不是无意义随机数,它参与 TCP 四元组和 NAT 映射。
  • 端口开放不等于服务可用:应用可能没有正确响应、协议不匹配、鉴权失败或被上游代理拦截。
  • 绑定 0.0.0.0:port 会扩大暴露面:它监听所有 IPv4 本地地址,和只监听 127.0.0.1:port 风险不同。

相关术语