计算机网络 (32)用户数据报协议UDP

前言

       用户数据报协议(UDP,User Datagram Protocol)是计算机网络中的一种重要传输层协议,它提供了无连接的、不可靠的、面向报文的通信服务。

一、基本概念

       UDP协议位于传输层,介于应用层和网络层之间。它不像TCP那样提供可靠的、面向连接的通信,而是采用无连接的方式,即发送数据之前不需要建立连接,接收端也不需要发送确认信息。这种无连接的特性使得UDP的传输效率相对较高,但同时也意味着它无法保证数据的可靠传输。

二、特点

  1. 无连接性:UDP在进行数据传输之前不需要先建立连接,因此减少了开销和发送数据之前的时延。这使得UDP协议在需要快速响应的应用场景中表现良好。
  2. 不可靠性:UDP不对数据的传输进行确认、重传或流量控制。如果数据包在传输过程中丢失或损坏,UDP不会自动进行纠正,接收端也无法得知数据是否完整到达。这种不可靠性在某些应用场景下是可以接受的,如实时音视频传输和游戏数据传输。
  3. 面向报文:UDP对于应用层交下来的报文段不进行拆分合并,直接保留原有报文段的边界然后添加UDP的首部就交付给网络层。这使得UDP能够很好地支持变长的报文传输。
  4. 首部开销小:UDP的首部只有8个字节,比TCP的首部(通常至少20个字节)要小得多。这减少了传输过程中的开销,提高了传输效率。
  5. 支持广播和多播:UDP支持向局域网内的所有设备或特定组播组发送数据包,这使得UDP适用于设备发现、广告通知和组内通信等场景。

三、报文格式

       UDP报文包括首部(Header)和数据(Payload)两部分。首部只有8个字节,由4个字段组成:

  1. 源端口(Source Port):长度为16位,用于标识发送端的应用程序或进程。
  2. 目的端口(Destination Port):长度为16位,用于标识接收端的应用程序或进程。
  3. 长度(Length):长度为16位,表示UDP报文的总长度,包括UDP首部和数据部分。其最小值为8(只有首部)。
  4. 校验和(Checksum):长度为16位,用于检测UDP报文在传输过程中是否发生了错误。校验和字段的计算包括UDP头部和数据部分。

四、应用场景

       由于UDP协议具有低延迟、简单高效的特性,它特别适用于那些对实时性要求较高但对可靠性要求不高的应用场景。以下是一些常见的UDP应用场景:

  1. 实时音视频传输:如视频会议、在线直播等应用,对实时性要求较高,但对数据的可靠性要求相对较低。UDP能够提供快速的传输速度,减少延迟,从而满足这些应用的需求。
  2. 在线游戏:游戏数据传输需要较快的响应速度和较低的网络延迟。UDP协议因其低延迟特性而成为游戏数据传输的首选协议。例如,玩家位置、游戏状态和操作指令等数据通常通过UDP进行传输。
  3. 域名系统(DNS):DNS查询通常使用UDP协议进行。因为DNS查询请求和响应通常是简短的、小量的数据包,不需要TCP的可靠性保证。UDP的低延迟和简单性使其成为DNS的合适选择。
  4. 物联网(IoT)设备通信:物联网终端的资源有限,维护TCP协议代价较大。同时,物联网对实时性要求也很高。UDP的简单性和低开销适用于大规模部署的低功耗设备间进行快速数据交换。因此,UDP被广泛应用于物联网设备之间的通信。
  5. 日志传输:在某些情况下,对于日志传输的实时性要求较高,而对数据的完整性和可靠性要求相对较低。因此,UDP适合用于快速传输日志数据。

五、UDP协议与TCP协议的比较

       UDP协议与TCP协议是传输层中的两种主要协议,它们各自具有不同的特点和应用场景。TCP协议提供可靠的、面向连接的通信服务,适用于那些对可靠性要求较高的应用场景;而UDP协议则提供无连接的、不可靠的通信服务,适用于那些对实时性要求较高但对可靠性要求不高的应用场景。

总结

       UDP协议作为一种无连接的、不可靠的、面向报文的传输层协议,在计算机网络中发挥着重要作用。它以其低延迟、简单高效的特性,特别适用于那些对实时性要求较高但对可靠性要求不高的应用场景。通过了解UDP协议的概念、特点、报文格式以及应用场景,可以更好地理解计算机网络中的通信过程,并为网络通信的设计和优化提供有力支持。

 结语   

永远不要停止学习

知识是无价的财富

!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何将 DotNetFramework 项目打包成 NuGet 包并发布

如何将 DotNetFramework 项目打包成 NuGet 包并发布 在软件开发过程中,将项目打包成 NuGet 包并发布到 NuGet 库,可以让其他开发者方便地引用和使用你的项目成果。以下是将 WixWPFWizardBA 项目打包成 NuGet 包并发布的详细步骤: 1. 创建 .n…

解决GitHub上的README.md文件的图片内容不能正常显示问题

一、问题描述 我们将项目推送到GitHub上后,原本在本地编写配置好可展现的相对路径图片内容,到了GitHub上却不能够正常显示图片内容,我们希望能够在GitHub上正常显示图片,如下图所示: 二、问题分析 现状:REA…

如何解决 VS Code 调试时无法查看 std 中变量的问题

在使用 VS Code 调试 C 程序时,我们经常遇到查看 std 容器或字符串变量时只显示一串数字而看不到实际值的情况。这是由于调试器未启用 pretty-printing 功能导致的。为了解决这个问题,可以在 launch.json 中进行配置。 问题描述 在调试 C 程序时&…

安装MySQL的五种方法(Linux系统和Windows系统)

一.在Linux系统中安装MySQL 第一种方法:在线YUM仓库 首先打开MySQL官网首页 www.mysql.com 找到【DOWNLOADS】选项,点击 下拉,找到 【MySQL Community(GPL) Downloads】 在社区版下载页面中,【 MySQL Yum Repository 】链接为在线仓库安装…

基于mybatis-plus历史背景下的多租户平台改造

前言 别误会,本篇【并不是】 要用mybatis-plus自身的多租户方案:在表中加一个tenant_id字段来区分不同的租户数据。并不是的! 而是在假设业务系统已经使用mybatis-plus多数据源的前提下,如何实现业务数据库隔开的多租户系统。 这…

RabbitMQ高级篇之MQ可靠性 数据持久化

文章目录 消息丢失的原因分析内存存储的缺陷如何确保 RabbitMQ 的消息可靠性?数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息,但这种方式带来了两个主要问…

Openssl1.1.1s rpm包构建与升级

rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet,防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…

【Unity3D】apk加密(global-metadata.dat加密)

涉及:apk、aab、global-metadata.dat、jks密钥文件、APKTool、zipalign 使用7z打开apk文件观察发现有如下3个针对加密的文件。 xxx.apk\assets\bin\Data\Managed\Metadata\global-metadata.dat xxx.apk\lib\armeabi-v7a\libil2cpp.so xxx.apk\lib\arm64-v8a\libil…

[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…

RNN心脏病预测-Pytorch版本

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import numpy as np import pandas as pd import torch from torch import nn import torch.nn.functional as F import seaborn as sns from sklearn.preprocessing import Standard…

科普CMOS传感器的工作原理及特点

在当今数字化成像的时代,图像传感器无疑是幕后的关键 “功臣”,它宛如一位神奇的 “光影魔法师”,通过光电效应这一奇妙的物理现象,将光子巧妙地转换成电荷,为图像的诞生奠定基础。而在众多类型的图像传感器中&#xf…

Ubuntu 18.04 解决screen无法滚屏的问题

Ubuntu 18.04 解决screen无法滚屏的问题_ubuntu screen 无法上滑-CSDN博客文章浏览阅读2.7k次,点赞2次,收藏3次。在etc/screenrc中加入termcapinfo xterm* ti:te重新进入screen的sessionscreen -d -r XXX_ubuntu screen 无法上滑https://blog.csdn.net/w…

2025年01月09日Github流行趋势

1. 项目名称:khoj 项目地址url:https://github.com/khoj-ai/khoj项目语言:Python历史star数:22750今日star数:1272项目维护者:debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介:你…

Spring boot接入xxl-job

Spring boot接入xxl-job 导入maven包加入配置增加配置类创建执行器类&#xff08;写job的业务逻辑&#xff09;去控制台中配置job 导入maven包 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>…

Cglib动态代理中method.invoke与methodProxy.invokeSuper区别浅尝

前段时间看了黑马Spring教程中&#xff0c;有期视频讲解Cglib动态代理。 代码如下图&#xff1a; 可以看到调用目标对象的方法代码为&#xff1a; method.invoke(target,objects);在其他地方看到的此处代码是&#xff1a; methodProxy.invokeSuper(o,objects);注意&#xff…

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux&#xff0c;最初学习时是一脸蒙圈&#xff0c;啥也不会&#xff0c;啥也不懂&#xff0c;做了很多乱七八糟&#xff0c;没有条理的笔记。不知…

NO.3 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!

目录 &#x1f50d; 1. 对于非齐次线性模型 &#xff0c;试将其表示为齐次线性模型形式。 ​编辑 &#x1f50d; 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示&#xff0c;试根据表中数据构造线性回归模型&#xff0c;并使用该模型预测月广告投入为20万元时…

Javascript算法——贪心算法(一)

贪心算法详解&#xff08;JavaScript&#xff09;&#xff08;局部最优->全局最优&#xff09; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下的最优选择&#xff08;局部最优&#xff09;的算法设计方法。通过局部最优解的累积&…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

jdk8升级JDK21(Springboot2.7.18升级Springboot3.4.0)

目录 背景&#xff1a; 一、maven升级 二、代码改造 2.1 javax替换为jakarta 2.2 swagger2升级swagger3相关更新 2.2.1 新增SpringDocConfig配置类 2.2.2 全局代码更新 2.2.3 全局代码替换&#xff08;普通正则替换&#xff09; 2.3 Mybatis Plus升级 2.4 logback.xm…