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

笔记结束