我们现在聚焦于传输层。传输层是整个网络体系结构中承上启下的关键一层,它为运行在不同主机上的应用进程提供端到端的逻辑通信。
传输层主要有两个核心协议:TCP 和 UDP。此外,还有一些其他重要但使用范围较窄的协议。
核心概念
传输层通过 端口号 来标识不同的应用程序或服务。
- 源端口号: 发送方应用程序的端口。
- 目的端口号: 接收方应用程序的端口。
1. 用户数据报协议 - UDP
UDP 提供简单的、无连接的、不可靠的数据报服务。它的优点是开销小、延迟低。
UDP 数据报格式
UDP 头部非常简单,固定为 8 字节。
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口号 | 目的端口号 |
+--------+--------+--------+--------+
| 长度 | 校验和 |
+--------+--------+--------+--------+
| 数据载荷... |
+-----------------------------------+
各字段详细说明
| 字段名称 | 长度 | 详细说明 |
|---|---|---|
| 源端口号 | 16 bit (2 字节) | 发送进程的端口号。在不需要回复时可为 0。 |
| 目的端口号 | 16 bit (2 字节) | 目标进程的端口号。 |
| 长度 | 16 bit (2 字节) | 整个 UDP 数据报(头部 + 数据)的总长度(字节)。最小值为 8(即只有头部,无数据)。 |
| 校验和 | 16 bit (2 字节) | 可选字段。覆盖 UDP 头部、数据和来自 IP 头部的伪首部。如果发送方未计算,此字段为 0(若为 0 则接收方也不校验)。用于检测头部和数据在传输中是否出错。 |
UDP 长度计算与特点
- 头部长度: 固定为 8 字节。
- 最大数据长度: 由于“长度”字段是 16 位,理论最大长度为 65535 字节。但受 IP 数据报总长度(65535 字节)限制,减去 20 字节的 IP 头,UDP 数据报最大长度为 65515 字节。实际中受网络 MTU 限制(通常约 1500 字节)。
- 特点: 无连接、尽最大努力交付、无拥塞控制、支持一对一、一对多、多对多通信。
2. 传输控制协议 - TCP
TCP 提供可靠的、面向连接的、基于字节流的服务。它通过复杂的机制来保证数据不丢失、不重复、按序交付。
TCP 段格式
TCP 头部最小为 20 字节,但由于有可选字段,最大可达 60 字节。
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口号 | 目的端口号 |
+--------+--------+--------+--------+
| 序列号 |
+--------+--------+--------+--------+
| 确认号 |
+--------+--------+--------+--------+
| 数据偏移 | 保留 | 控制标志 | 窗口大小 |
+--------+--------+--------+--------+
| 校验和 | 紧急指针 |
+--------+--------+--------+--------+
| 选项(如果有,长度可变) |
+--------+--------+--------+--------+
| 数据载荷... |
+-----------------------------------+
各字段详细说明
| 字段名称 | 长度 | 详细说明 |
|---|---|---|
| 源端口号/目的端口号 | 各 16 bit | 同 UDP。 |
| 序列号 | 32 bit (4 字节) | 本报文段所发送数据的第一个字节在整个字节流中的序号。用于数据排序和确认。 |
| 确认号 | 32 bit (4 字节) | 期望收到对方下一个报文段的第一个数据字节的序号。表示该序号之前的所有数据已正确接收。只有在 ACK 标志为 1 时有效。 |
| 数据偏移 | 4 bit | 以 4 字节为单位表示 TCP 首部的长度。最小值为 5(即 5 * 4 = 20 字节)。最大值为 15(即 15 * 4 = 60 字节)。 |
| 保留 | 6 bit | 保留为未来使用,必须设为 0。 |
| 控制标志 | 6 bit | 每个 bit 代表一个控制功能: - URG: 紧急指针有效。 - ACK: 确认号有效。建立连接后,所有报文的 ACK 都必须为 1。 - PSH: 接收方应尽快将数据推送给应用层,而不必等待缓冲区满。 - RST: 重置连接,用于处理异常。 - SYN: 同步序列号,用于建立连接。 - FIN: 用于释放连接。 |
| 窗口大小 | 16 bit (2 字节) | 流量控制关键字段。表示从确认号开始,接收方还能接收的字节数量。用于控制发送方的发送速率。 |
| 校验和 | 16 bit (2 字节) | 强制校验。覆盖 TCP 头部、数据和来自 IP 头部的伪首部。 |
| 紧急指针 | 16 bit (2 字节) | 当 URG=1 时有效,表示本报文段中紧急数据的末尾在数据段中的位置(相对于序列号的偏移)。 |
| 选项 | 长度可变 | 可选的增强功能。必须是 4 字节的倍数,不足则用 0 填充。常见选项:- 最大报文段长度: 在连接建立时双方通告自己愿意接受的 MSS。 - 窗口缩放因子: 用于扩大窗口大小,支持高速网络。 - SACK: 选择性确认,提高重传效率。 |
| 数据 | 可变长度 | 来自应用层的字节流数据。 |
TCP 长度计算与特点
- 头部最小长度: 20 字节。
- 头部最大长度: 60 字节。
- 特点: 面向连接、可靠交付、全双工通信、面向字节流、有流量控制和拥塞控制。
3. 流控制传输协议 - SCTP
SCTP 是为传输电话信令等需求而设计的协议,结合了 TCP 和 UDP 的优点。
SCTP 数据包格式
SCTP 数据包由一个公共头和多个数据块组成。
公共头(12 字节)
| 字段名称 | 长度 | 说明 |
|---|---|---|
| 源端口号 | 16 bit | 同 TCP/UDP。 |
| 目的端口号 | 16 bit | 同 TCP/UDP。 |
| 验证标签 | 32 bit | 用于防止“盲”攻击,关联到连接。 |
| 校验和 | 32 bit | 使用 CRC-32 算法,比 TCP 的校验和更强大。 |
数据块格式
每个数据块有自己的头,结构为 TLV(类型-长度-值)。
| 字段名称 | 长度 | 说明 |
|---|---|---|
| 类型 | 8 bit | 数据块类型(如 DATA, INIT, SACK, HEARTBEAT)。 |
| 标志 | 8 bit | 块特定的标志。 |
| 长度 | 16 bit | 整个数据块(包括头)的字节长度。 |
| 值/数据 | 可变 | 数据块的具体内容。 |
SCTP 特点
- 多宿性: 一个连接可以关联多个 IP 地址,提高可靠性。
- 多流性: 在一个连接内可以建立多个独立的逻辑流,避免“队头阻塞”。
- 面向消息: 像 UDP 一样保护消息边界。
- 选择性确认: 原生支持,更高效。
- 抗攻击能力: 通过验证标签和更强大的校验和增强安全性。
4. 数据报拥塞控制协议 - DCCP
DCCP 旨在为需要及时性但不要求绝对可靠性的应用(如流媒体、网络电话)提供类似 UDP 的服务,但同时加入了拥塞控制机制。
DCCP 报文格式
类似于 TCP,但更简单。
| 字段名称 | 长度 | 说明 |
|---|---|---|
| 源/目的端口 | 各 16 bit | 同 TCP/UDP。 |
| 数据偏移 | 4 bit | 类似 TCP,表示头部长度。 |
| CCVal | 4 bit | 用于拥塞控制。 |
| 校验和 | 16 bit | 覆盖头部和(部分)数据。 |
| 序列号 | 48 bit | 比 TCP 更长的序列号,用于应对高速网络。 |
| 类型 | 4 bit | 报文类型(如 DCCP-Request, DCCP-Data, DCCP-ACK)。 |
特点: 提供半连接(有连接建立/终止,但数据不可靠)、可插拔的拥塞控制算法。
传输层协议总结对比表
| 特性 | TCP | UDP | SCTP | DCCP |
|---|---|---|---|---|
| 连接模式 | 面向连接 | 无连接 | 面向连接 | 面向连接(半连接) |
| 可靠性 | 可靠(确认、重传) | 不可靠(尽最大努力) | 可靠/部分可靠 | 不可靠 |
| 数据模型 | 面向字节流 | 面向数据报 | 面向消息 | 面向数据报 |
| 拥塞控制 | 有(复杂算法) | 无 | 有 | 有(可插拔) |
| 头部开销 | 大(20-60 字节) | 小(8 字节固定) | 中等(12字节公共头+块头) | 中等 |
| 顺序保证 | 有(按序列号排序) | 无 | 有(按 TSN 排序) | 可选 |
| 关键特性 | 流量控制、拥塞控制 | 延迟低、开销小 | 多宿、多流、抗阻塞 | 为实时流媒体设计 |
| 典型应用 | Web(HTTP)、邮件(SMTP)、文件传输(FTP) | DNS、SNMP、音视频流(RTP)、QUIC | 电话信令(SIGTRAN)、WebRTC | 流媒体、网络游戏 |
结论:
传输层协议的选择是应用设计的关键决策。选择哪种协议,取决于应用在可靠性、延迟、吞吐量和控制复杂度之间的权衡。TCP 和 UDP 是绝对的主流,而 SCTP 和 DCCP 则在特定的专业领域发挥着重要作用。
2482

被折叠的 条评论
为什么被折叠?



