参考文献

UDP

UDP头部格式
1
2
3
4
5
6
7
8
9
10
11
12
13
0      7 8     15 16    23 24     31  
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...

User Datagram Header Format
  • 源端口号(16位)和目标端口(16位): 主要是告诉UDP协议应该把报文发给哪个进程.
  • 包长度: 该字段保存了UDP首部的长度跟数据的长度之和.
  • 校验和: 校验和是为了提供可靠的UDP首部和数据而设计.
  • Data octets 就是一个字节一个字节的数据,Octet 是 8 位.

UDP的优点

  1. 传输效率高: 由于 UDP 不需要进行连接建立、数据确认和重传等操作,因此相比 TCP,它的传输效率要高一些.在对数据实时性要求较高的场景下,使用 UDP 能够更快地传输数据.
  2. 适用于数据量较小的场景: 由于 UDP 不需要进行分段和重组等操作,因此它对数据大小没有限制,可以传输任意大小的数据.在对数据量较小的场景下,使用 UDP 更加方便.
  3. 开销较小: 由于 UDP 不需要进行连接建立等操作,因此它的开销较小.在资源受限的移动设备和嵌入式系统等场景下,使用 UDP 更加合适.
  4. 无拥塞控制: 由于 UDP 不会进行拥塞控制,因此它可以在网络拥塞的情况下继续发送数据,不会受到 TCP 等协议的限制.

UDPTCP的区别以及各自的使用场景

区别

  • 连接性: TCP 是面向连接的协议,而 UDP 是面向无连接的协议.在 TCP 中,数据传输之前需要先建立连接,而在 UDP 中,数据传输之前不需要建立连接.
  • 数据可靠性: TCP 是可靠传输协议,它会对数据进行确认和重传,以保证数据的可靠性.而 UDP 是不可靠传输协议,它不会对数据进行确认和重传,因此数据的可靠性没有 TCP 高.
  • 传输效率: 由于 TCP 需要进行连接建立、数据确认和重传等操作,因此相比 UDP,它的传输效率要稍低一些.
  • 数据大小限制: 由于 TCP 需要进行分段和重组等操作,因此它对数据大小有一定的限制,一般情况下最大传输单元(MTU)为 1460 字节.而 UDP 对数据大小没有限制,可以传输任意大小的数据.

使用场景

  1. TCP 适用于对数据可靠性要求较高的场景,
    • 例如文件传输、电子邮件、网页浏览、远程控制(SSH)等需要准确传输数据的场景.
  2. UDP 适用于对数据实时性要求较高的场景,
    • 例如视频通话、在线游戏、音频实时传输、DNS、Ping等需要快速传输数据的场景.
    • 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
    • 不需要一对一沟通,建立连接,而是可以广播的应用.
    • 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候.

UDP 报文的最大长度

  • UDP(User Datagram Protocol)是无连接的、面向数据报的协议.每个 UDP 报文包含一个数据报头和数据部分.
  • UDP 数据报的总长度由 IP 层的最大传输单元(MTU)和 UDP 协议本身的限制决定.具体来说:
    • 报文头部: 8 字节
    • UDP 数据部分的最大长度: 65507 字节(即 65535 - 8 - 20)
  • IP 层的最大报文长度为 65535 字节,其中包括 IP 报头(通常为 20 字节)和 UDP 报头(8 字节),所以 UDP 数据部分的最大长度为 65507 字节.
  • 然而,实际使用中,报文大小通常会受到网络 MTU(最大传输单元)的限制.以太网的典型 MTU 为 1500 字节,减去 IP 头和 UDP 头的长度后,数据部分最大为 1472 字节.如果报文超过 MTU,IP 层会对其进行分片,但这可能会降低性能,并增加丢包风险.
  • 总之:
    • 理论上,UDP 数据报的最大长度是 65507 字节.
    • 实际使用中,推荐保持在网络 MTU 范围内(如 1472 字节),以避免分片.