5.2 用户数据报协议UDP

news2024/11/25 9:29:50

思维导图:

 

课程笔记:5.2 用户数据报协议UDP

5.2.1 UDP概述

一、UDP基本概念

  • 无连接协议:UDP是一个简单的面向数据报的传输层协议,不需要在数据传输前建立连接,故减少开销和延迟。
  • 复用/分用:UDP允许多个应用层服务通过不同端口使用同一UDP服务。
  • 差错检测:提供错误检查功能,但不提供错误修正。

二、UDP的特点

  1. 无连接:无需连接建立、维护和拆除过程,适用于简单请求/应答模式,如DNS查询。
  2. 尽力而为服务:不保证数据包的可靠到达,也无拥塞控制,简化了协议的复杂性。
  3. 面向报文
    • 应用层数据传给UDP多长,UDP就保持原样传输,不合并也不分割。
    • 报文边界保留:应用层可以更好地控制要发送的数据和数据格式。
    • 报文长度选择的重要性:太长可能导致IP层分片,效率降低;太短可能导致首部开销大,也降低效率。
  4. 无拥塞控制:适用于实时应用,例如IP电话、视频会议,要求稳定速率发送,可接受一定数据丢失,不容忍大时延。
  5. 通信方式多样:支持一对一、一对多、多对一和多对多交互通信。
  6. 首部开销小:只有8字节,较TCP的至少20字节首部轻便。

三、问题与应对

  • 网络拥塞问题:由于UDP缺乏拥塞控制,高速传输的实时视频等应用可能导致网络严重拥塞。
  • 提高可靠性:一些实时应用可能在不牺牲实时性的情况下,增加如前向纠错或重传机制,以减少数据丢失。

图例解析:图5-4展示了UDP面向报文的特性,展现了从应用层到传输层再到网络层的数据传递过程。


笔记总结

  • UDP是一个简单、高效但不可靠的协议。
  • 它主要用于那些对时延敏感、能容忍数据丢失的应用,例如流媒体。
  • UDP在首部开销和传输时延上有优势,但在网络可靠性和拥塞控制方面存在劣势。
  • 实际应用中,可能需要在应用层引入额外的机制以补偿UDP的不可靠性。

我的理解:

想象一下你正在玩一个快节奏的篮球比赛,篮球比赛的特点可以帮助我们理解UDP的特性:

  1. 无连接:

    • 篮球比赛: 当你有球时,你不需要告诉队友“我现在要传球”,你只是直接将球扔给他们。
    • UDP: 就像这种直接传球,UDP发送数据时不需要先建立连接,直接将数据包发送出去。
  2. 尽力而为服务:

    • 篮球比赛: 你传球时,球可能会被对手拦截或你的队友没接住,但你仍会不断尝试传球。
    • UDP: 类似地,UDP在发送数据包时,不保证每个数据包都能成功到达,有的可能会丢失,但它不会停下来修正这个问题。
  3. 面向报文:

    • 篮球比赛: 每一次传球就像是一个完整的动作,你不会将球切成几部分传递给队友。
    • UDP: 同样,UDP处理数据时,会将每一段数据作为一个独立的整体(报文)发送,而不会将它拆分或合并。
  4. 无拥塞控制:

    • 篮球比赛: 不管场上多拥挤,你还是会以相同的方式传球,不会因为对方防守紧就放慢游戏节奏。
    • UDP: 即使网络状况拥堵,UDP也会以原定速率发送数据,不会调整发送速度来适应网络状况。
  5. 效率与轻量级:

    • 篮球比赛: 篮球运动装备简单,只需要球衣、短裤和球鞋,让运动员能够快速移动。
    • UDP: 类似地,UDP的头部信息简单,仅8个字节,使得处理起来既快速又轻便。
  6. 多种通信方式:

    • 篮球比赛: 你可以选择传球给任何一个队友(一对多),或者多个队友集中传球给你(多对一)。
    • UDP: 这反映了UDP的灵活性,可以支持一对一、一对多、多对一、多对多的通信模式。
  7. 差错检测:

    • 篮球比赛: 如果裁判看到一个违规动作,他会吹哨示意,但不会干预游戏结果(比如不会取消得分)。
    • UDP: 类似的,UDP有差错检测功能,可以发现数据包中的错误,但它不会尝试修正错误,只是简单地丢弃有错误的数据包。

5.2.2 UDP首部格式

基本结构

UDP(用户数据报协议)的首部非常简洁,总共只有8个字节。首部包括四个字段,每个字段长度为2个字节。

字段详解

  1. 源端口(Source Port)

    • 用于标识发送端应用程序的端口号。
    • 如果不需要接收方回复消息,可以设置为全0。
  2. 目的端口(Destination Port)

    • 用于识别接收端应用程序的端口号。
    • 这个字段在数据报到达目的地时必须被使用,以确保数据能被正确交付给应用层。
  3. 长度(Length)

    • 表示UDP数据报的总长度,包括首部和数据载荷。
    • 最小值是8字节(即只有首部,没有数据)。
  4. 检验和(Checksum)

    • 用于检测数据在传输过程中的任何变化。
    • 如果发现错误,接收端将丢弃该数据报。

伪首部(Pseudo Header)

  • 在计算检验和时,需要在UDP数据报前加上一个12字节的伪首部,但这不是UDP数据报的实际一部分,不会传输。
  • 伪首部包括:源IP地址、目的IP地址、保留字段(全零)、协议类型(对于UDP是17)以及UDP长度。

检验和计算

  • UDP检验和计算涉及伪首部和UDP数据报(首部+数据)。
  • 数据部分不是偶数字节时,需要填充一个全零字节来计算检验和,但这个字节不会实际发送。
  • 使用二进制反码运算求和,然后对结果取反码作为检验和。

数据交付和分用

  • 当IP层接收到UDP数据报,会根据首部中的目的端口号,将数据报传递到对应端口的应用程序。
  • 如果目的端口号不正确或不存在,数据报将被丢弃,并可能通过ICMP发送一个“端口不可达”的消息给发送方。

注意事项

  • UDP通信是无连接的,不需要像TCP一样在通信双方之间建立一个连接。
  • UDP适用于不需要可靠传输的应用场景,如视频流或在线游戏。

图解

  • 图5-5展示了UDP数据报的首部和伪首部结构。
  • 图5-6展示了UDP基于端口的分用过程。

 我的理解:

UDP(User Datagram Protocol,用户数据报协议)首部格式是指在UDP数据报中用于标识不同通信信息的部分,其结构简洁但承载了传输过程中的关键信息。为了更形象地理解UDP首部格式,我们可以借助一些比喻和类比:

比喻1:邮件系统

可以将UDP比作邮政系统中的一封普通信件:

  • 源端口:这就像是信封上的发件人地址。如果你希望对方回信,你会写上你的地址;如果不期待回信,那么这个地方可以不填写。
  • 目的端口:类似于收件人地址。没有正确的收件地址,邮件就无法送达目的地。
  • 长度:这就好比信封的大小,它告诉邮局这封信的总重量(即首部加上信件内容的总长度)。
  • 检验和:就像是一种检查机制,确认信件在途中没有被破坏。如果邮局发现信件损坏,它就会丢弃它,因为它无法确认信的内容是否完整。

 总结:

重点:

  1. 首部结构:理解UDP首部的基本结构,包括它的四个字段:源端口号、目的端口号、长度和检验和。
  2. 端口功能
    • 源端口号:通常用于接收回复,如果不需要回复,则可以设置为零。
    • 目的端口号:用于指定接收数据报的应用程序,对于数据报的正确路由至关重要。
  3. 长度字段:包括首部和数据两部分的总长度,它的最小值为8字节(只有首部时)。
  4. 检验和:用于检测数据在传输过程中的任何错误。如果检验和不匹配,接收方将丢弃该数据报。

难点:

  1. 检验和的计算:理解检验和如何计算是较难的部分,因为它不仅包括UDP首部和数据部分,还包括一个伪首部。
  2. 伪首部的概念:伪首部在计算检验和时使用,但它实际上并不是UDP数据报的一部分。理解它的作用和构成是理解UDP检验和计算的关键。
  3. 检验和的验证:在接收方,如何利用接收到的检验和进行验证,以确定数据是否完整。

易错点:

  1. 伪首部的忽略:学习者可能会忽视伪首部的重要性或者误以为它是UDP数据报的实际组成部分。
  2. 长度字段误解:可能会误认为长度字段只包括数据部分的长度,而实际上它包括首部加数据的总长度。
  3. 端口号的混淆:不清楚源端口和目的端口的区别和用途可能导致混淆。例如,认为目的端口在发送方是不必要的或者源端口在接收方不重要。
  4. 检验和的计算错误:在检验和的计算过程中,由于涉及多个步骤和对伪首部的使用,易于出现错误。特别是在手动计算或模拟过程中,错过任何一个步骤都会导致计算结果不正确。
  5. 检验和的二进制反码理解:在计算检验和时,二进制反码计算可能会让人感到困惑,特别是对于不熟悉二进制操作的学习者。

在学习UDP首部格式时,理解每个字段的作用及其在数据传输中的意义,以及如何正确计算和验证检验和,是确保掌握这一节内容的关键。

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

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

相关文章

记录rider编辑器快速文档 中英文显示的问题

起初是不同的项目里快速文档一个项目显示中文 一个项目显示英文 搞了很久不知道哪里的原因 偶然灵机一动,点开了下面docs.microsoft.com的地址进去一看 发现一个是4.6的文档 一个是4.6.1的文档 所以去项目属性里 切换了framework的版本. 然后汉化就好了 纯属强迫症,而且…

shell script 学习案例

或许进度最快的方法就是先抄袭,在改进,哈哈。学习下各个案例吧 第一:写过程序的都知道,第一个学的就是输出"Hello World!",那么学习shell也是一样,上案例 因为有脚本文件,所有同时 开了两个终端…

13 _ 线性排序:如何根据年龄给100万用户数据排序?

前两节中,着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。这节,将讲三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时…

光刻机之父林本坚发声,中国芯片可自主研发5纳米,美国拦不住

外媒报道指早已退休的台积电前研发副总林本坚接受采访的时候表示,美国无法阻止中国研发先进工艺,还认为中国可以利用现有设备研发更先进的5纳米工艺,他的表态让外媒相当吃惊。 林本坚如此说法在中国的华为研发出相当于7纳米工艺的麒麟9000S之…

Linux常用命令——chfn命令

在线Linux命令查询工具 chfn 用来改变finger命令显示的信息 补充说明 chfn命令用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项&#xff0c;则chfn命令会进入问答式界面。 语法 chfn(选项)(参数)选项 -f<真实姓名>或-…

玩转硬件之Micro:bit的玩法(三)——计步器

随着技术的发展&#xff0c;现在智能手机和智能手表已经走进千家万户&#xff0c;所以大家对于计步器可能不陌生&#xff0c;计步器是一种用于计算行走步数的装置。它通常是一个小型电子设备&#xff0c;可以佩戴在身体上&#xff0c;如腕带、腰带或口袋中。计步器通过感应人体…

代码随想录算法训练营第四十一天丨 动态规划part04

01背包理论基础 见连接&#xff1a;代码随想录 416. 分割等和子集 思路 01背包问题 背包问题&#xff0c;大家都知道&#xff0c;有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解…

matlab 计算Ax=b的解,解线性方程组的现成工具

只写了最简单的方式&#xff0c;其中b需要是列向量&#xff0c;用分号隔开元素&#xff1b; octave:7> A[1,2; 1.0001, 2;] A 1.0000 2.00001.0001 2.0000octave:8> b[3; 3.0001;] b 3.00003.0001octave:9> xA\b x 1.00001.0000octave:10> b-A*x ans 00octave:…

精通Nginx(03)-配置简述

本文主要讲述Nginx配置文件结构及调试技巧 使用nginx版本为1.24.0。 目录 Nginx目录 nginx.conf内容结构 配置片段化 配置调试技巧 Nginx目录 Nginx编译安装目录如下&#xff1a; 安装指定目录为"/usr/local"。配置目录为/usr/local/nginx/conf。 目录说明&am…

在NestJS应用程序中使用 Unleash 实现功能切换的指南

前言 近年来&#xff0c;软件开发行业迅速发展&#xff0c;功能开关&#xff08;Feature Toggle&#xff09;成为了一种常见的开发实践。通过功能开关&#xff0c;可以在运行时动态地启用或禁用应用程序的特定功能&#xff0c;以提供更灵活的软件交付和配置管理。对于使用 Nes…

【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析

【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A&#xff1a;基于计算机视觉的坑洼道路检测和识别 python 代码解析 1 题目 坑洼道路检测和识别是一种计算机视觉任务&#xff0c;旨在通过数字图像&#xff08;通常是地表坑洼图像&#xff09;识别出存在坑洼的道路。这…

什么是Babel?它的主要作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

随想录一刷·数组part2

你好&#xff0c;我是安然无虞。 文章目录 1. 有序数组的平方2. 长度最小的最数组3. 螺旋数组II 1. 有序数组的平方 有序数组的平方 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int n nums.size();// 以0为分割线的话&#xff…

GoLang忽略文件夹

一、忽略 在使用GoLang开发的过程中&#xff0c;我们可能在搜索查找时&#xff0c;需要屏蔽一些日志文件或者编译文件&#xff0c;基于这样的需求&#xff0c;我们可以在GoLang编辑器中右键选择对应的文件夹-》Mark Directory as-》Ecluded。 这样就可以忽略掉对应的文件夹。 …

Django中的FBV和CBV

一、两者的区别 1、在我们日常学习Django中&#xff0c;都是用的FBV&#xff08;function base views&#xff09;方式&#xff0c;就是在视图中用函数处理各种请求。而CBV&#xff08;class base view&#xff09;则是通过类来处理请求。 2、Python是一个面向对象的编程语言…

【Linux】Linux项目部署及更改访问端口号和jdk、tomcat、MySQL环境搭建的配置安装

目录 一、作用 二、配置 1、上传安装包 2、jdk 2.1、解压对应安装包 2.2、环境变量搭建 3、tomcat 3.1、解压对应安装包 3.2、启动 3.3、设置防火墙 3.4、设置开发端口 4、MySQL 三、后端部署 四、Linux部署项目 1、单体项目 五、修改端口访问 1、进入目录 2…

IOS渲染流程之RenderServer处理图层信息

先来回顾一下Android的渲染史&#xff1a; Android的渲染史&#xff1a; Android4.0之前绘制是在主线程执行的&#xff0c;4.0之后除了引入Vsync和双缓冲还引入了单独处理绘制的RenderServer线程。在draw中保存记录绘制指令&#xff0c;稍后RenderServer会取出绘制指令进行调…

MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

目录 介绍 特点 基本语法 创建 调用 查看 删除 示例 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理…

快速入手maven

文章目录 Maven介绍Maven安装和配置基于IDEA的Maven工程创建梳理Maven工程GAVP属性Idea构建Maven JavaSE工程Idea构建Maven JavaEE工程1. 手动创建2. 插件方式创建 Maven工程项目结构说明Maven核心功能依赖和构建管理依赖传递和冲突依赖导入失败场景和解决方案扩展构建管理和插…

只需 4 个简单步骤即可为您的 ML 系统充电

使用 DALL 生成的图像。D-R型 一、说明 这篇文章将带您了解我通过 4 个简单步骤优化任何 ML 系统以进行闪电般快速的训练和推理的过程。 想象一下&#xff1a;你终于被安排在一个很酷的新ML项目中&#xff0c;你正在训练你的经纪人计算一张照片中有多少只热狗&#xff0c;它的成…