传输层与端口·复用分用
基于 HTTP 现代标准 · 核于 2026-06
速查
- 传输层职责:在进程与进程之间提供逻辑通信通道。网络层(IP)只负责把数据包从一台主机送到另一台主机;传输层在这之上,进一步把数据交给主机里正确的那个应用进程。
- 凭什么找到进程:靠端口号(port number)。IP 定位「哪台机器」,端口定位「机器上的哪个服务/进程」——两者配合才能精确投递。
- 端口是 16 位整数:取值 0 ~ 65535(共 65536 个)。它不是物理接口,而是操作系统内的一个逻辑编号。
- 三段端口范围(IANA):知名端口 0~1023(系统/特权端口)、注册端口 1024~49151、动态/私有端口 49152~65535(客户端临时用)。
- 常见知名端口:HTTP 80、HTTPS 443、DNS 53、SSH 22、SMTP 25、FTP 20/21 ——服务端在固定端口「守株待兔」,客户端才知道往哪连。
- 复用(multiplexing):发送方多个应用进程共享下层网络,传输层给每段数据贴上「源端口」标签后统一交给 IP 发出。
- 分用(demultiplexing):接收方传输层按数据里的目的端口,把每段数据分发给对应的进程——这正是端口存在的意义。
- 套接字 socket:通信端点的唯一标识 = IP 地址 + 端口号(再加协议)。一对 socket(源 + 目的)唯一确定一条连接。
- TCP 与 UDP 各有独立端口空间:TCP 的 80 与 UDP 的 80 是两个互不相干的端口;它们由协议号区分。
- 传输层两大协议:TCP(面向连接、可靠、有序)与 UDP(无连接、尽力而为、开销小)——本页只做概览,细节见后续各页。
- 边界:本页讲「传输层定位 / 端口 / 复用分用 / socket / 两协议概览」;UDP 细节见 UDP 协议与适用场景,TCP 握手见后续页。
传输层的职责:从「主机到主机」到「进程到进程」
要理解端口,先得分清网络层和传输层各管什么——这是初学者最容易混的一层。
- 网络层(IP)做的事:把一个数据包从源主机送到目的主机。IP 地址回答的是「数据要去哪台机器」。但一台机器上同时跑着浏览器、邮件客户端、IM、后台服务……IP 并不知道这个包到了之后该交给谁。
- 传输层做的事:在 IP 的「主机到主机」之上,再补一层「进程到进程」的逻辑通信。它让两台主机上的两个应用进程感觉像是直接连着的,至于底下数据如何被拆包、路由、转发,应用程序无需关心。
用 Cloudflare 的说法:IP 是网络层(第 3 层)协议,负责路由(指明数据包从哪来、到哪去);TCP 是传输层(第 4 层)协议,负责让数据包跨网络的运输平稳进行。两者常被合称 TCP/IP。
一句话类比
IP 地址像「写到某栋写字楼的地址」,把信送到了大楼门口;端口号像「房间号」,决定这封信最终进入哪一间办公室。没有房间号,信只能堆在大堂——这正是只有 IP、没有端口时的窘境。
端口号:16 位的逻辑编号
端口(port)是计算机网络中的通信端点,用一个数字标识主机上的某个进程或网络服务。它是操作系统维护的一个逻辑概念,并非网线插孔之类的物理接口。
- 位宽与范围:端口号是 16 位无符号整数,因此取值范围是 0 ~ 65535(即 2¹⁶ 共 65536 个)。
- 谁在用端口:服务端在某个固定端口上监听等待请求(如 HTTP 服务守在 80);客户端发起连接时,操作系统会临时分配一个源端口给它。
端口的三段分类(IANA)
互联网号码分配机构 IANA 把整个端口空间划分为三段,各有用途:
| 范围 | 名称 | 用途 | 谁来用 |
|---|---|---|---|
| 0 ~ 1023 | 知名端口 / 系统端口(Well-Known / System Ports) | 分配给历史上最常用、最核心的标准服务 | 绑定通常需特权(如 root/管理员),多为服务端固定监听 |
| 1024 ~ 49151 | 注册端口(Registered Ports) | 供具体应用向 IANA 登记使用,无需特权即可绑定 | 各类应用程序、第三方服务(如 MySQL 3306) |
| 49152 ~ 65535 | 动态 / 私有 / 临时端口(Dynamic / Private / Ephemeral Ports) | 不固定登记,供短期连接临时分配 | 客户端发起连接时由系统自动取用,用完即回收 |
为什么客户端端口是「临时」的
你打开浏览器访问网站,目的端口是固定的 443,但源端口是系统从临时区间随手分配的一个号(如 52133)。请求结束就释放,下次连接可能换一个。所以同一台机器同时开多个标签页访问同一网站不会冲突——它们的源端口各不相同,由此区分开。
常见知名端口速记
下面这些是前端、运维日常最常照面的端口,值得记牢:
| 端口 | 协议 / 服务 | 传输层 | 说明 |
|---|---|---|---|
| 20 / 21 | FTP | TCP | 文件传输(20 传数据、21 传控制命令) |
| 22 | SSH | TCP | 安全远程登录 / SCP / SFTP |
| 25 | SMTP | TCP | 邮件发送 |
| 53 | DNS | UDP / TCP | 域名解析(默认 UDP,大响应或区域传送走 TCP) |
| 80 | HTTP | TCP | 明文 Web |
| 110 | POP3 | TCP | 邮件收取 |
| 143 | IMAP | TCP | 邮件收取(保留在服务器) |
| 443 | HTTPS | TCP(HTTP/1.1·2)/ UDP(HTTP/3 over QUIC) | 加密 Web |
| 3306 | MySQL | TCP | 数据库(注册端口区间的常见例子) |
记忆要点:80/443 是 Web 双子星,53 是 DNS,22 是 SSH。URL 里不写端口时,浏览器会按协议默认补全——
http://默认 80、https://默认 443,所以https://example.com等价于https://example.com:443。
复用与分用:端口存在的根本原因
传输层之所以需要端口,核心就是为了支撑**复用(multiplexing)与分用(demultiplexing)**这一对操作。
- 复用(发送方):一台主机上多个应用进程都想发数据,它们共享同一条下层网络通道。传输层把每个进程的数据封装成段,并打上源端口标签,再统一交给网络层(IP)发出去。多路数据「汇流」到一条网络上,即为复用。
- 分用(接收方):数据到达对端主机后,传输层读取每个数据段里的目的端口,据此把数据分发投递给对应的应用进程。多路数据在接收端按端口「分流」回各自进程,即为分用。
发送方主机 接收方主机
┌──────────────────┐ ┌──────────────────┐
│ 浏览器 邮件 IM │ 各进程数据 │ 浏览器 邮件 IM │
│ │ │ │ │ │ ↑ ↑ ↑ │
│ └──┬──┴──┬─┘ │ │ └──┬──┴──┬─┘ │
│ [打源端口标签] │ │ [按目的端口分发] │
│ 复用 ↓ │ │ 分用 ↑ │
│ 传输层(TCP/UDP) │ │ 传输层(TCP/UDP) │
│ ↓ │ │ ↑ │
│ 网络层 IP ─────┼──── 一条网络通道 ────┼──── 网络层 IP │
└──────────────────┘ └──────────────────┘正是因为有了端口与分用机制,操作系统才能把混在同一条网络上的字节流,准确地还给该收它的那个进程——浏览器收到的永远是 Web 响应,邮件客户端收到的永远是邮件数据,互不串台。
复用 ≠ HTTP/2 的多路复用
此处的「复用/分用」是传输层层面的通用概念(多个进程共享网络)。它与 HTTP/2 里常说的「多路复用(multiplexing)」不是一回事——后者指单条 TCP 连接上并发多个请求流,属于应用层优化。同名不同层,注意区分。
套接字 socket:通信端点的唯一标识
要在网络中精确定位一个通信端点,光有端口还不够——得把它和 IP 绑在一起。这个「IP 地址 + 端口号」的组合,就是套接字(socket)。
- socket 唯一标识一个端点:例如
203.0.113.5:443表示「IP 为203.0.113.5的主机上、监听在 443 端口的那个服务」。再算上传输协议(TCP/UDP),就完整确定了「在哪台机、哪个端口、用什么协议」通信。 - 一对 socket 唯一确定一条连接:一条 TCP 连接由四元组唯一标识——
(源 IP, 源端口, 目的 IP, 目的端口)。只要四元组中任一项不同,就是不同的连接。这解释了为什么服务端单个 443 端口能同时服务成千上万客户端:每个客户端的(源 IP, 源端口)各不相同,四元组就各不相同。
端口与 socket 的关系
端口是一个数字(如 443);socket 是「IP + 端口」绑定后形成的、操作系统可读写的通信端点对象。应用程序通过 socket 这个抽象来收发数据,而不直接操作端口数字。可以理解为:端口是「房间号」,socket 是「连上这个房间的那条专线」。
传输层两大协议:TCP 与 UDP(概览)
传输层主要由两个协议挑大梁,它们都用端口做复用/分用,但「性格」截然不同:
| 维度 | TCP(传输控制协议) | UDP(用户数据报协议) |
|---|---|---|
| 连接 | 面向连接:通信前先握手建立连接 | 无连接:直接发,不握手 |
| 可靠性 | 可靠:保证不丢、不重、按发送顺序到达 | 尽力而为:可能丢包、乱序,不补发 |
| 顺序 | 保证按序交付 | 不保证顺序 |
| 开销 / 速度 | 控制机制多,开销较大、相对慢 | 头部小、机制少,开销小、更快 |
| 典型场景 | Web(HTTP)、邮件、文件传输 | DNS、音视频流、实时游戏、QUIC |
- TCP:Vint Cerf 与 Bob Kahn 于 1970 年代设计,通过握手建立连接,保证数据按发送顺序、可靠地送达,并内置拥塞控制(从「慢启动」小流量起步、逐步增大)。它与 IP 配合无间,常合称 TCP/IP。
- UDP:TCP 在传输层的「轻量替代品」——更快但不保证可靠,常用于视频流、在线游戏等「快比稳更重要」的场景。
本页只做「两协议是什么、有何差异」的鸟瞰;TCP 如何握手、如何保证可靠、如何做流量与拥塞控制,以及 UDP 为什么快、适合哪些场景,都留给本叶后续各页逐一讲透。
小结
- 传输层补齐「进程到进程」:网络层(IP)只把数据送到主机,传输层靠端口进一步送到主机上正确的进程——IP 定位机器、端口定位服务。
- 端口是 16 位(0~65535)的逻辑编号,分三段:知名端口 0~1023(核心服务、需特权)、注册端口 1024~49151、动态端口 49152~65535(客户端临时用);记牢 80/443/53/22 等常见号。
- 复用 / 分用是端口的根本用途:发送方多进程共享网络(打源端口标签即复用),接收方按目的端口分发给各进程(即分用)——同名的 HTTP/2「多路复用」属应用层,勿混。
- socket = IP + 端口,是通信端点的唯一标识;一条连接由
(源 IP, 源端口, 目的 IP, 目的端口)四元组唯一确定,这是单端口服务海量客户端的原理。 - 传输层两大协议:TCP(面向连接、可靠、有序)与 UDP(无连接、尽力、轻快),且二者端口空间互相独立。
铺好了传输层与端口这层地基,接下来先看那个「无连接、轻快」的协议——继续阅读 UDP 协议与适用场景。