UDP协议:数据报格式、校验与特点。

5.2 UDP协议

5.2.1 UDP数据报

1. UDP概述

UDP(用户数据报协议)仅在IP数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测

UDP的主要特点

特点 说明
无连接 发送数据前不需要建立连接,减少开销和时延
尽最大努力交付 不保证可靠交付,主机无需维护复杂的连接状态表
面向报文 对应用层报文既不合并也不拆分,保留报文边界,一次发送/交付一个完整报文
无拥塞控制 网络拥塞不会降低发送速率,适合实时应用(允许丢失部分数据,但不能有太大时延)
支持多种通信方式 支持一对一、一对多、多对一、多对多的交互通信
首部开销小 首部仅8字节(TCP为20字节)

面向报文的理解:应用层交给UDP多长的报文,UDP就照样发送;接收方UDP去除首部后原封不动交付上层。因此应用程序必须选择合适大小的报文,避免IP层分片降低效率或首部占比过大。

例题(2014年39题)
下列关于UDP协议的叙述中,正确的是(B. 仅 I、II)

  • I. 提供无连接服务 ✓
  • II. 提供复用/分用服务 ✓
  • III. 通过差错校验,保障可靠数据传输 ✗(UDP校验只检测错误,不保障可靠传输)

2. UDP首部格式

UDP数据报包含UDP首部(8字节)和用户数据两部分。

字段 长度 说明
源端口 2字节 源端口号,需要对方回信时使用,不需要时可置0
目的端口 2字节 目的端口号,必须使用
长度 2字节 UDP数据报总长度(首部+数据),最小值8字节
校验和 2字节 检测UDP数据报传输是否有错,有错则丢弃;不使用时可置0
  • 当接收方UDP发现不存在对应目的端口号的应用进程时,丢弃报文,并由ICMP发送“端口不可达”差错报文。

例题(2018年39题)
UDP协议实现分用(demultiplexing)时所依据的头部字段是(B. 目的端口号)


5.2.2 UDP校验

1. 伪首部

在计算校验和时,需要在UDP数据报之前增加12字节的伪首部。伪首部仅在计算校验和时临时使用,既不向下传送也不向上递交。

伪首部格式

字段 长度 说明
源IP地址 4字节 发送方IP地址
目的IP地址 4字节 接收方IP地址
全0 1字节 填充0
协议 1字节 协议类型(UDP为17)
UDP长度 2字节 UDP数据报总长度

2. 校验和计算过程

发送方

  1. 将校验和字段置为全0。
  2. 在UDP数据报前添加伪首部,若数据部分不是偶数个字节,则填充一个全0字节(不发送)。
  3. 将伪首部和UDP数据报按16位字串接,按二进制反码求和。
  4. 将求和结果取反码,写入校验和字段。

接收方

  1. 将收到的UDP数据报连同伪首部(及可能的填充字节)按16位字反码求和。
  2. 若结果为全1,则无差错;否则有差错,丢弃该数据报(或上交应用层并附警告)。

注意:IP数据报校验和只检验首部,UDP校验和检验首部和数据部分。


习题

  1. UDP协议的特点不包括(C. 支持拥塞控制

  2. UDP数据报首部的长度为(A. 8字节

  3. 若UDP数据报的“长度”字段值为100,则表示(B. 总长度(头部+数据)为100字节

  4. 以下场景中,最适合使用UDP的是(B. 实时视频流

  5. UDP伪头部中包含的字段是(B. 源IP地址和目的IP地址

  6. 如果UDP数据报在传输过程中,某个16位字段的值发生了改变,以下说法正确的是(B. 只有当改变后的结果导致检验和计算错误时,接收方才可能检测出错误
    (因为校验和是反码求和的结果,某些改变可能导致校验和仍为全1,无法检测)

  7. UDP检验和计算题(与讲义中例题对应)
    给定数据:源IP 153.19.8.104,目的IP 171.3.14.11,协议17,UDP长度15,源端口1087,目的端口13,数据 5445494E47(十六进制)。
    按16位字反码求和,结果取反得检验和。根据讲义计算,答案为D. 01101001 00010010

  8. 已知UDP数据报的检验和值为0xFFFF,这意味着(B. 数据报在传输过程中可能没有发生错误
    (全1是正确结果,但若出现多个错误相互抵消,也可能为全1)

  9. 谢希仁5-12:不能组装成完整数据报。因为两次传输的IP数据报片标识不同,目的站无法区分它们是属于同一UDP数据报的重传。缓存中保留的第一次后两个片无法与第二次的前两个片组合。

  10. 谢希仁5-13:UDP数据字段8192字节,加上8字节UDP首部=8200字节。以太网MTU=1500字节,IP首部20字节,每个IP数据报片数据部分最大1480字节。
    需要分片数:ceil(8200/1480)=6片。

    • 第1-5片:数据1480字节,片偏移分别为0,185,370,555,740
    • 第6片:数据8200-1480×5=800字节,片偏移925
  11. 谢希仁5-14:UDP首部十六进制 0632 0045 001C E217

    • 源端口:0632H = 1586
    • 目的端口:0045H = 69(TFTP)
    • 总长度:001CH = 28字节
    • 数据部分长度:28 - 8 = 20字节
    • 目的端口69是TFTP服务器使用的熟知端口,因此是从客户发送给服务器,服务器程序是TFTP

笔记结束