3.1 运输层服务与多路复用 / 分解|《计算机网络:自顶向下方法》精读
一、3.1 概述和运输层服务
运输层是整个五层模型中 唯一负责 “端到端进程通信”*、 的核心层,上承应用层需求,下借网络层能力,是理解 “数据如何精准送到目标程序” 的关键入口。
3.1.1 运输层和网络层的关系(核心考点)
这是本章最容易混淆的概念,也是面试 / 考研高频题,我们用对比 + 比喻彻底讲透:
表格
| 维度 | 网络层(IP 协议) | 运输层(TCP/UDP 协议) |
|---|---|---|
| 核心职责 | 提供主机到主机的逻辑通信:只负责把数据从源主机送达目标主机,不关心数据要交给哪个应用 | 提供进程到进程的逻辑通信:在主机连通的基础上,把数据精准投递到目标应用进程 |
| 通信范围 | 跨主机、跨网段,关注 “路由选择” 和 “主机可达性” | 同一主机内的不同进程,关注 “数据分发” 和 “应用隔离” |
| 通俗比喻 | 把快递从 “发件人城市” 送到 “收件人城市的小区门口” | 把快递从 “小区门口” 送到 “收件人家里的具体房间号” |
| 典型协议 | IPv4、IPv6 | TCP、UDP |
✅ 关键结论:网络层管 “哪台机器”,运输层管 “机器上的哪个程序”。没有运输层,同一台主机上的浏览器、微信、游戏会互相争抢数据,无法实现 “多应用同时上网”。
3.1.2 因特网运输层概述
因特网为应用层提供了两种截然不同的运输服务,应用程序可根据业务需求自由选择:
1. UDP(用户数据报协议,User Datagram Protocol)
- 核心定位:轻量、无连接、不可靠的 “尽力而为” 服务
- 关键特性:
- 无连接:发送前不需要建立连接,直接封装数据发送,开销极低
- 不可靠:不保证数据一定到达、不保证顺序、不修复丢包,也不做流量 / 拥塞控制
- 面向消息:保留应用层消息边界,一次发送对应一次接收
- 低延迟:没有握手、重传等额外机制,传输速度极快
- 适用场景:实时性优先、允许少量丢包的业务
- DNS 查询(快速解析域名,超时可重试)
- 视频通话 / 直播(卡顿比短暂模糊更影响体验)
- 在线游戏(延迟敏感,丢包可通过插值补全)
- 实时物联网数据采集
2. TCP(传输控制协议,Transmission Control Protocol)
- 核心定位:面向连接、可靠、有序的 “全功能” 服务
- 关键特性:
- 面向连接:传输前必须通过三次握手建立连接,传输后通过四次挥手释放连接
- 可靠数据传输:通过序列号、确认应答、超时重传机制,保证数据不丢、不乱、不重复
- 流量控制:防止发送方发送过快,撑爆接收方缓冲区
- 拥塞控制:感知网络拥堵程度,自动调节发送速率,避免网络崩溃
- 面向字节流:把数据看作连续的字节流,不保留消息边界
- 适用场景:数据完整性优先、不允许丢包的业务
- 网页浏览(HTTP/HTTPS)
- 文件传输(FTP)
- 电子邮件(SMTP/POP3/IMAP)
- 支付、数据库等对数据一致性要求极高的场景
✅ 设计哲学:UDP 做减法(只做最基础的分发),TCP 做加法(在不可靠的 IP 网络上,模拟出一条可靠的 “虚拟管道”)。
二、3.2 多路复用与多路分解
这是运输层最基础、最本质的功能,是 “多应用同时上网” 的底层实现,也是理解端口号作用的核心。
1. 核心概念:复用 vs 分解
-
多路复用(发送端,Multiplexing)多个应用进程同时产生数据,各自通过不同的端口号交给运输层;运输层将这些数据封装成运输层报文段(TCP 段 / UDP 数据报),统一交给网络层,封装成 IP 数据包发送到网络。
- 本质:把多个应用的数据流,合并成一条网络数据流。
-
多路分解(接收端,Demultiplexing)网络层将收到的 IP 数据包交给运输层;运输层根据报文头中的端口信息,将数据精准分发到对应的应用进程。
- 本质:把一条网络数据流,拆分成多个应用的数据流。
2. 实现基础:端口号(Port Number)
端口号是一个 16 位无符号整数(范围:0~65535),用来在一台主机内唯一标识一个应用进程,是实现复用 / 分解的核心标识:
| 端口范围 | 类型 | 用途 | 典型示例 |
|---|---|---|---|
| 0~1023 | 知名端口(Well-known Ports) | 固定分配给通用标准服务,由 IANA 统一管理 | HTTP:80、HTTPS:443、DNS:53、SMTP:25、SSH:22 |
| 1024~49151 | 注册端口(Registered Ports) | 分配给特定应用程序,需向 IANA 注册 | MySQL:3306、Redis:6379、Tomcat:8080 |
| 49152~65535 | 临时端口(Ephemeral Ports) | 客户端临时使用,连接断开后自动回收 | 浏览器访问网站时,系统随机分配的端口 |
✅ 关键:同一台主机上,一个端口号同一时间只能被一个进程占用,否则会出现 “端口冲突”。
3. 分解的两种实现方式(UDP vs TCP)
(1)无连接分解(UDP 方式)
- 依据:仅通过 (目的 IP 地址,目的端口号) 二元组进行分发
- 逻辑:只要收到的报文,目的 IP 和目的端口与某进程绑定,就直接交给该进程,不关心源 IP 和源端口
- 特点:无状态、无连接,实现简单,开销小
- 局限:同一端口无法同时处理多个不同客户端的连接(但 UDP 本身不需要长连接,所以不影响使用)
(2)面向连接分解(TCP 方式)
- 依据:通过 (源 IP 地址,源端口号,目的 IP 地址,目的端口号) 四元组进行分发
- 逻辑:每个 TCP 连接都由唯一的四元组标识,即使目的端口相同,只要源 IP / 端口不同,就会被视为不同连接
- 特点:支持同一端口同时处理多个客户端连接(比如 Web 服务器 80/443 端口,同时服务成千上万的浏览器)
- 优势:连接隔离,数据不会串扰,是实现高并发服务器的基础
4. 直观案例:多应用同时上网
假设你在电脑上同时打开:
- 浏览器(访问
https://www.baidu.com,本地临时端口:50001) - 微信(聊天,本地端口:8080)
- 游戏(《英雄联盟》,本地端口:27015)
发送端复用过程:
- 浏览器数据 → 运输层(源端口 50001,目的端口 443)
- 微信数据 → 运输层(源端口 8080,目的端口 8080)
- 游戏数据 → 运输层(源端口 27015,目的端口 27015)
- 运输层将三者封装成不同的报文段,交给网络层,统一发送到互联网
接收端分解过程:
- 收到目的端口 443 的报文 → 交给浏览器
- 收到目的端口 8080 的报文 → 交给微信
- 收到目的端口 27015 的报文 → 交给游戏
- 三个应用数据完全隔离,实现 “同时上网不冲突”
✅ 本节核心总结
- 运输层定位:承上启下,为进程到进程提供逻辑通信,区别于网络层的 “主机到主机”。
- 两种服务选型:
- UDP:轻量、快速、不可靠,适合实时场景
- TCP:可靠、有序、功能完整,适合数据敏感场景
- 复用 / 分解本质:通过端口号实现多应用数据隔离,是 “多应用同时上网” 的底层保障。
- 分解差异:UDP 用二元组,实现简单;TCP 用四元组,支持高并发连接。
📌 下一节预告
3.3 UDP 协议:深入解析 UDP 报文结构、校验和算法、应用场景,探讨 “不可靠协议” 为何在实时通信中更具优势。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)