计算机网络笔记(三十)——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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/909079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java异步编程之消息队列疑难问题拆解

前言 在Java里运用消息队列实现异步通信时,会面临诸多疑难问题。这里对实际开发中碰到的疑难为题进行汇总及拆解,使用RabbitMQ和Kafka两种常见的消息队列中间件来作为示例,给出相应的解决方案: 一、消息丢失问题 消息在传输过程…

香橙派3B学习笔记10:snap打包C/C++程序与动态链接库(.so)

esnap打包C/C程序与动态链接库(.so) 之前已经学会了snap基本的打包程序,现在试试打包C/C程序与动态链接库(.so) ssh : orangepi本地ip 密码 : orangepi 操作系统发行版: 基于 Ubun…

【Python工具开发】k3q_arxml 简单但是非常好用的arxml编辑器,可以称为arxml杀手包

k3q_arxml 介绍 仓库地址1 仓库地址2 极简的arxml编辑库,纯python实现 用法 from pprint import pp # 可以美化打印对象,不然全打印在一行 import k3q_arxml # 加载arxml文件 io_arxml k3q_arxml.IOArxml(filepaths[test/model_merge.arxml])# 打印…

【CSS-8】深入理解CSS选择器权重:掌握样式优先级的关键

CSS选择器权重是前端开发中一个基础但极其重要的概念,它决定了当多个CSS规则应用于同一个元素时,哪条规则最终会被浏览器采用。理解权重机制可以帮助开发者更高效地编写和维护CSS代码,避免样式冲突带来的困扰。 1. 什么是CSS选择器权重&…

大语言模型原理与书生大模型提示词工程实践-学习笔记

📘 第五期书生葡语实战营讲座总结 🎙 主讲人:王明(东部大学 数据挖掘实验室 博士生) 一、大语言模型的生成原理 架构基础:采用 Transformer(Decoder-only)架构,如 GPT …

李沐 《动手学深度学习》 | 实战Kaggle比赛:预测房价

文章目录 1.下载和缓存数据集2.数据预处理读取样本预处理样本数值型特征处理特征标准化的好处离散值处理转换为张量表示 训练K折交叉验证模型选择最终模型确认及结果预测代码总结提交到Kaggle 房价预测比赛链接:https://www.kaggle.com/c/house-prices-advanced-reg…

一键部署Prometheus+Grafana+alertmanager对网站状态进行监控

在建设监控体系的过程中,针对一个系统的监控是多维度的,除了服务器资源状态、中间件状态、应用状态外,对系统访问状态的监控也是很有必要,可以在系统访问出现异常时第一时间通知到我们。本文介绍使用 Docker-compose 方式一键部署…

康谋方案 | 高精LiDAR+神经渲染3DGS的完美融合实践

目录 一、从点云到高精地图的重建 1、数据采集 2、点云聚合 3、高精地图建模 4、三维建模与装饰 二、颠覆性革新:NeRF 与 3DGS 重建 1、仅需数日,完成街景重建 2、进一步消除 Domain gap,场景逼真如实地拍摄 3、降本增效&#xff0c…

MySQL-事务(TRANSACTION-ACID)管理

目录 一、什么是事务? 1.1.事务的定义 1.2.事务的基本语句 1.3.事务的四大特性(ACID) 二、数据库的并发控制 2.1.什么是并发及并发操作带来的影响? 2.2.并发操作带来的隔离级别 三、使用事务的场景 3.1.银行转账场景示例 3.2.模拟…

centos系统docker配置milvus教程

本人使用的是京东云服务器配置milvus 参考教程:https://blog.csdn.net/withme977/article/details/137270087 首先确保安装了docker 、docker compose docker -- version docker-compose --version创建milvus工作目录 mkdir milvus # 进入到新建的目录 cd milvu…

什么是JSON ?从核心语法到编辑器

一、什么是JSON ? JSON,即 JavaScript 对象表示法,是一种轻量级、跨语言、纯文本的数据交换格式 。它诞生于 JavaScript 生态,但如今已成为所有编程语言通用的 “数据普通话”—— 无论前端、后端,还是 Python、Java&…

计算机网络(7)——物理层

1.数据通信基础 1.1 物理层基本概念 物理层(Physical Layer)是所有网络通信的物理基础,它定义了在物理介质上传输原始比特流(0和1)所需的机械、电气、功能、过程和规程特性 1.2 数据通信系统模型 信源:生成原始数据的终端设备,常见形态包括…

深度学习基础知识总结

1.BatchNorm2d 加速收敛:Batch Normalization 可以使每层的输入保持较稳定的分布(接近标准正态分布),减少梯度更新时的震荡问题,从而加快模型训练速度。 减轻过拟合:批归一化引入了轻微的正则化效果&#…

iOS 抖音首页头部滑动标签的实现

抖音首页的头部滑动标签(通常称为"Segmented Control"或"Tab Bar")是一个常见的UI组件,可以通过以下几种方式实现: 1. 使用UISegmentedControl 最简单的实现方式是使用系统自带的UISegmentedControl: let segmentedCo…

ThreadLocal实现原理

ThreadLocal 是 Java 中实现线程封闭(Thread Confinement)的核心机制,它通过为每个线程创建变量的独立副本来解决多线程环境下的线程安全问题。 Thread └── ThreadLocalMap (threadLocals) // 每个线程持有的专属Map├── Entry[] tab…

【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境

如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…

defineAsyncComponent

下面,我们来系统的梳理关于 defineAsyncComponent 懒加载 的基本知识点: 一、异步组件核心概念 1.1 什么是异步组件? 异步组件是 Vue 中一种按需加载组件的机制,允许将组件代码拆分为独立的 chunk,在需要时再从服务器加载。这种技术能显著提升应用初始加载速度。 1.2 为…

ANeko v1.0.3 | 在手机里养只宠物猫 实时互动 动画细腻

ANeko是一款专为喜欢猫咪的用户设计的互动养宠应用。它让你在手机屏幕上拥有一只可爱的猫咪动画,这只猫咪会实时跟随你的手指触摸轨迹,带来生动有趣的互动体验。该应用不仅保留了用户熟悉的交互式猫动画,还结合了现代高清图形技术&#xff0c…

人工智能AI

AI 简介 AI 使我们能够生成可以改进卫生保健的出色软件,让人能够克服生理上的不便,改进智能基础结构,创造令人惊叹的娱乐体验,甚至拯救地球! 什么是 AI? 简而言之,AI 就是一种模仿人类行为和能力的软件。 关键工作负载包括: 机器学习 - 它通常是 AI 系统的基础,也是…

Vue 中 data 选项:对象 vs 函数

Vue 中 data 选项&#xff1a;对象 vs 函数 在 Vue 开发中&#xff0c;data 选项可以使用对象或函数形式&#xff0c;了解它们的使用场景非常重要。下面我将通过一个直观的示例来展示两者的区别和适用场景。 <!DOCTYPE html> <html lang"zh-CN"> <h…