传输层各种协议格式及长度(1)

我们现在聚焦于传输层。传输层是整个网络体系结构中承上启下的关键一层,它为运行在不同主机上的应用进程提供端到端的逻辑通信。

传输层主要有两个核心协议:TCPUDP。此外,还有一些其他重要但使用范围较窄的协议。

核心概念

传输层通过 端口号 来标识不同的应用程序或服务。

  • 源端口号: 发送方应用程序的端口。
  • 目的端口号: 接收方应用程序的端口。

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 bit4 字节为单位表示 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,表示头部长度。
CCVal4 bit用于拥塞控制。
校验和16 bit覆盖头部和(部分)数据。
序列号48 bit比 TCP 更长的序列号,用于应对高速网络。
类型4 bit报文类型(如 DCCP-Request, DCCP-Data, DCCP-ACK)。

特点: 提供半连接(有连接建立/终止,但数据不可靠)、可插拔的拥塞控制算法。

传输层协议总结对比表

特性TCPUDPSCTPDCCP
连接模式面向连接无连接面向连接面向连接(半连接)
可靠性可靠(确认、重传)不可靠(尽最大努力)可靠/部分可靠不可靠
数据模型面向字节流面向数据报面向消息面向数据报
拥塞控制(复杂算法)(可插拔)
头部开销(20-60 字节)(8 字节固定)中等(12字节公共头+块头)中等
顺序保证(按序列号排序)(按 TSN 排序)可选
关键特性流量控制、拥塞控制延迟低、开销小多宿、多流、抗阻塞为实时流媒体设计
典型应用Web(HTTP)、邮件(SMTP)、文件传输(FTP)DNS、SNMP、音视频流(RTP)、QUIC电话信令(SIGTRAN)、WebRTC流媒体、网络游戏

结论
传输层协议的选择是应用设计的关键决策。选择哪种协议,取决于应用在可靠性、延迟、吞吐量和控制复杂度之间的权衡。TCP 和 UDP 是绝对的主流,而 SCTP 和 DCCP 则在特定的专业领域发挥着重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两圆相切

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值