当前位置: 首页 > news >正文

计算机网络笔记(三十)——5.2用户数据报协议UDP

5.2.1UDP概述

一、UDP 的定义

用户数据报协议 (User Datagram Protocol, UDP) 是传输层的无连接、不可靠协议。它提供最小化的协议机制,仅支持数据报的简单传输,不保证数据顺序或可靠性。

二、UDP 的核心特点

  1. 无连接

    • 通信前无需建立连接,直接发送数据报。
    • 类似“寄信”,无需确认对方是否准备好。
  2. 不可靠传输

    • 不保证数据到达目的地、不保证顺序、无重传机制。
    • 若数据丢失或损坏,UDP 不会自动修复。
  3. 面向报文

    • 应用层交给 UDP 的每个报文都会被完整发送(不拆分、不合并)。
    • 接收方必须一次性接收整个报文。
  4. 首部开销小

    • UDP 首部仅 8 字节,远小于 TCP 的 20 字节。
  5. 无拥塞控制

    • 无论网络状态如何,UDP 始终以固定速率发送数据。
  6. 支持单播、多播、广播

    • 适合一对多或多对多通信(如视频会议)。

三、UDP 首部格式

在这里插入图片描述

  • 源端口:发送方端口号(可选,可置0)。
  • 目的端口:接收方端口号(必填)。
  • 长度:整个 UDP 数据报的长度(首部+数据,单位字节)。
  • 校验和:用于检测数据是否损坏(可选,但推荐启用)。

四、UDP 校验和计算

  1. 伪首部参与校验
    包括 IP 首部中的源 IP、目的 IP、协议类型和 UDP 数据长度。
    保证 IP 层错误(如错发到其他主机)能被检测到。

  2. 计算步骤

    • 将 UDP 数据报视为 16 位整数序列
    • 将伪首部添加到 UDP 数据报前,计算反码和。
    • 将结果的反码存入校验和字段。

五、UDP 通信流程

在这里插入图片描述

六、UDP 的适用场景

  1. 实时应用
    • 视频会议、在线直播(容忍部分丢包,追求低延迟)。
  2. 简单查询/响应
    • DNS 查询、SNMP 监控(单次交互,无需连接)。
  3. 多播/广播通信
    • 网络时间协议 (NTP)、路由器发现协议。

七、UDP 与 TCP 对比

特性UDPTCP
连接方式无连接面向连接(三次握手)
可靠性不可靠可靠(确认、重传、有序)
首部开销8 字节20 字节(无选项)
传输控制无拥塞控制、无流量控制拥塞控制、滑动窗口
数据单位数据报(保留边界)字节流(无边界)

总结

UDP 以“简单高效”为核心,牺牲可靠性换取低延迟,适用于对实时性要求高、能容忍少量数据丢失的场景。

5.2.2UDP的首部格式

UDP(用户数据报协议)首部格式是 固定8字节,由4个字段组成。

1. UDP首部格式图示

在这里插入图片描述

2. 首部字段详解

(1) 源端口(Source Port)

  • 2字节(16位)
  • 作用:发送方的端口号。
  • 取值范围:0~65535。
  • 可选性:可以为0,表示无需回复(如单播、广播通信)。

(2) 目的端口(Destination Port)

  • 2字节(16位)
  • 作用:接收方的端口号。
  • 关键性:必须正确指定,否则接收方无法将数据交付给应用进程。

(3) 长度(Length)

  • 2字节(16位)
  • 作用:指示UDP数据报的总长度(首部+数据)。
  • 取值范围:最小值是8(仅首部),最大值受IP分片限制(通常≤65535字节)。

(4) 校验和(Checksum)

  • 2字节(16位)
  • 作用:验证首部和数据的完整性。
  • 计算范围
    • 数据报首部 + 数据。
    • 伪首部(包含IP层信息):

3. 校验和计算流程

  1. 在发送方:
    • 将校验和字段置0。
    • 添加12字节的伪首部到UDP报文前。
    • 对伪首部、UDP首部、数据部分计算二进制反码求和。
    • 结果取反码填充到校验和字段。
  2. 在接收方:
    • 接收完整数据报。
    • 再次计算校验和,若结果为全1(0xFFFF),则数据无误。

4. 与TCP首部对比

特性UDPTCP
首部长度固定8字节(无选项)可变(20~60字节)
可靠性保证有序、可靠传输
校验和可选(可置0)强制
流量控制滑动窗口机制

5. 示例报文分析

十六进制UDP首部示例06 32 00 45 00 1C E2 17

  • 源端口:0x0632 ⇒ 1586(十进制)
  • 目的端口:0x0045 ⇒ 69(常用于TFTP协议)
  • 长度:0x001C ⇒ 28字节(首部8字节 + 数据20字节)
  • 校验和:0xE217(验证是否被篡改)。

问答回顾

  1. 为何UDP首部没有首部长度字段?
    答:UDP首部尺寸固定为8字节,无需单独说明长度。

  2. 若检验和为0会怎样?
    答:在UDP规范中,校验和为0表示禁用校验(非推荐做法)。正常实现需将全0转换为全1(0xFFFF)。

相关文章:

  • 什么是贫血模式
  • FastAPI实战起步:从Python环境到你的第一个“Hello World”API接口
  • 哈希map中不能将数组作为键的原因 leetcode49
  • JavaScript 内置对象全解析
  • TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
  • 《从函数模板到类模板:OP泛型编程进化论》
  • Python项目的构建和部署方案推荐
  • QTreeWidget 应用场景与用法详解
  • Docker部署SpringBoot项目
  • 6月8日python-AI代码
  • 面向对象之 继承中的成员访问特点
  • TCP相关问题 第一篇
  • 鸿蒙的一些布局
  • 深入剖析JVM垃圾回收,高并发场景JVM性能调优,内存泄露分析,以及如何避免OOM
  • 8个AI软件介绍及其工作原理讲解
  • Day 21
  • Hilt在android项目中使用的注解说明
  • MS8911S/8921S/8922M/8931S 是一款具有内部迟滞的高速比较器
  • MCP是啥?技术原理是什么?Windows系统配置MCP,Cursor使用MCP
  • Selenium4+Python的web自动化测试框架
  • 怎样做网站快手刷粉/潮州seo
  • 怎么在拼多多开无货源网店/seo快速排名软件方案
  • 广州企业推广网站建设/北京seo软件
  • 网站后台统计怎么启动啊/免费的个人网站怎么做
  • 政府网站专题栏目建设/网络营销知识
  • 涿州做网站建设/企业管理培训课程网课