第11章 UDP:用户数据报协议

所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议

本章介绍UDP协议,包括UDP首部、UDP的特点、端口号和校验和等。


11.1 引言

UDP的作用

UDP(User Datagram Protocol):

  • 用户数据报协议
  • 传输层协议
  • 无连接、不可靠
  • 简单高效

UDP是简单的传输层协议。


UDP的特点

UDP的特点:

  1. 无连接

    • 不需要建立连接
    • 想发就发
    • 开销小
  2. 不可靠

    • 不保证交付
    • 不保证顺序
    • 不重传
    • 没有确认
  3. 面向数据报

    • 一个数据报一个边界
    • 发多少收多少
    • 不会粘包
  4. 没有流量控制

    • 不管对方能不能收
    • 发了再说
  5. 没有拥塞控制

    • 不管网络拥不拥塞
    • 一直发

UDP简单但不可靠。


UDP vs TCP

UDP vs TCP:

对比项UDPTCP
连接无连接面向连接
可靠性不可靠可靠
顺序不保证保证
流量控制无有
拥塞控制无有
开销小大
速度快慢
数据边界有无(字节流)
适用场景实时应用、DNS等文件传输、网页等

UDP和TCP各有优缺点。


本章讨论的内容

本章讨论的内容:

  • UDP首部
  • UDP端口号
  • UDP校验和
  • UDP的特点
  • UDP的用途

本章介绍UDP协议。


11.2 UDP首部

UDP首部格式

UDP首部格式:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          源端口              |           目的端口             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           长度               |           校验和               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            数据                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

UDP首部很简单,只有8字节。


UDP首部字段

UDP首部各字段:

字段长度说明
源端口16位发送方端口号,可选
目的端口16位接收方端口号
长度16位UDP数据报总长度(首部+数据)
校验和16位校验和,可选
数据可变用户数据

UDP首部只有4个字段,8字节。


长度字段

长度字段:

  • 16位
  • UDP数据报的总长度
  • 包含首部和数据
  • 最小是8(只有首部,没有数据)
  • 最大是65535

注意:

  • IP数据报最大65535
  • IP首部至少20字节
  • UDP数据最大65535 - 20 - 8 = 65507字节
  • 但实际受MTU限制,会分片

长度字段是UDP数据报的总长度。


11.3 UDP端口号

端口号的作用

端口号的作用:

  • 标识不同的应用
  • 多路复用和分用
  • 发送方多个应用共用UDP
  • 接收方分用给不同应用

端口号标识应用程序。


端口号范围

端口号范围:

  • 16位,0-65535

分类:

范围名称说明
0-1023知名端口固定分配,需要权限
1024-49151注册端口注册使用
49152-65535动态/私有端口临时使用,客户端用

端口号分为三类。


常见的UDP端口

常见的UDP端口:

端口服务说明
53DNS域名系统
67DHCP服务器动态主机配置
68DHCP客户端动态主机配置
69TFTP简单文件传输
123NTP网络时间协议
161SNMP简单网络管理
500IKEIPsec密钥交换
514Syslog系统日志
1900SSDP简单服务发现
5060SIP会话发起协议

很多服务用UDP。


11.4 UDP校验和

校验和的作用

校验和的作用:

  • 检测数据是否出错
  • 传输过程中有没有被改
  • 可选的,可以不用

校验和检测差错。


校验和的计算

UDP校验和的计算:

  • 计算范围:伪首部 + UDP首部 + 数据
  • 伪首部包含IP地址等信息
  • 16位二进制反码求和

为什么有伪首部:

  • 验证数据是不是发给这个地址的
  • 防止IP地址错误导致送错
  • 包含源IP、目的IP、协议、UDP长度

校验和包含伪首部。


伪首部

伪首部格式:

+---------------------------+
|         源IP地址          |  4字节
+---------------------------+
|        目的IP地址         |  4字节
+---------------------------+
|   0   |    协议    |  UDP长度  |
+---------------------------+

伪首部字段:

  • 源IP地址
  • 目的IP地址
  • 0(填充)
  • 协议(17表示UDP)
  • UDP长度

伪首部不是真正的首部,只是计算用的。


校验和可选

校验和是可选的:

  • 校验和为0表示不校验
  • 可以关闭校验和
  • 提高性能
  • 但不可靠

建议:

  • 还是开着吧
  • 差错检测很重要
  • 性能影响不大

校验和可选,但建议开启。


11.5 UDP的用途

为什么用UDP

为什么用UDP:

  1. 简单

    • 实现简单
    • 不用维护连接状态
  2. 快

    • 没有连接建立
    • 没有确认
    • 延迟小
  3. 开销小

    • 首部只有8字节
    • 没有额外的控制报文
  4. 支持广播和多播

    • TCP不支持
    • UDP支持

UDP有自己的优势。


适合UDP的场景

适合UDP的场景:

  1. 实时应用

    • 视频会议
    • 语音通话
    • 直播
    • 丢一点没关系,延迟要小
  2. 查询-响应类应用

    • DNS
    • DHCP
    • SNMP
    • 一次请求一次响应,比建立连接简单
  3. 广播/多播

    • 一对多
    • TCP做不到
    • UDP可以
  4. 游戏

    • 实时游戏
    • 状态同步
    • 延迟敏感

很多场景适合UDP。


不适合UDP的场景

不适合UDP的场景:

  1. 文件传输

    • 需要可靠
    • 需要顺序
    • 用TCP
  2. 网页浏览

    • 需要可靠
    • 用TCP
  3. 需要保证交付的

    • 丢了不行的
    • 用TCP

可靠传输用TCP。


UDP上的可靠传输

UDP上的可靠传输:

  • UDP本身不可靠
  • 但可以在UDP上自己实现可靠传输
  • 应用层做确认、重传等
  • 比如QUIC、WebRTC等

为什么在UDP上实现:

  • 更灵活
  • 可以自己控制
  • 避免TCP的一些问题
  • 比如队头阻塞

可以在UDP上实现可靠传输。


11.6 小结

UDP概述

  1. 什么是UDP

    • 用户数据报协议
    • 传输层
    • 无连接、不可靠
  2. 特点

    • 无连接
    • 不可靠
    • 面向数据报
    • 没有流量控制
    • 没有拥塞控制
  3. vs TCP

    • UDP简单快
    • TCP可靠复杂

UDP首部

  1. 首部格式

    • 8字节
    • 源端口、目的端口
    • 长度、校验和
  2. 字段

    • 源端口:16位,可选
    • 目的端口:16位
    • 长度:16位,总长度
    • 校验和:16位,可选

端口号

  1. 作用

    • 标识应用
    • 多路复用/分用
  2. 范围

    • 0-65535
    • 知名、注册、动态
  3. 常见端口

    • 53 DNS
    • 67/68 DHCP
    • 69 TFTP
    • 123 NTP
    • 等等

校验和

  1. 作用

    • 检测差错
  2. 计算

    • 伪首部 + UDP首部 + 数据
    • 反码求和
  3. 伪首部

    • 源IP、目的IP
    • 协议、长度
  4. 可选

    • 可以关闭
    • 建议开启

UDP的用途

  1. 为什么用UDP

    • 简单
    • 快
    • 开销小
    • 支持广播多播
  2. 适合的场景

    • 实时应用
    • 查询响应
    • 广播多播
    • 游戏
  3. 不适合的场景

    • 文件传输
    • 网页
    • 需要可靠的
  4. UDP上的可靠传输

    • 应用层实现
    • QUIC等

关键概念

  1. UDP

    • 用户数据报协议
    • 无连接不可靠
  2. 端口号

    • 标识应用
    • 多路复用
  3. 校验和

    • 检测差错
    • 伪首部
  4. 适用场景

    • 实时、查询、广播多播

UDP用户数据报协议