【计算机网络篇】UDP协议

✅作者简介:大家好,我是小杨
📃个人主页:「小杨」的csdn博客

🐳希望大家多多支持🥰一起进步呀!


UDP协议

1,UDP 简介

UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。

UDP 提供了不面向连接的通信,且不对传送的数据报进行可靠的保证,适用于一次传送少量的数据,不适用于传输大量的数据。


2,UDP 特点

UDP 的主要特点为无连接,不可靠传输,面向数据报,全双工通信。下面对这些特点进行逐一解释:

1,无连接:UDP是一种无连接的传输协议,这意味着在通信之前不需要进行连接建立的过程。发送方直接向目标主机发送数据报,接收方无需事先建立连接就能接收数据。

2,不可靠传输:UDP不保证数据传输的可靠性。它将数据划分为独立的数据报,并通过网络发送,但不提供丢包重传、数据校验和错序整理等机制。如果在传输过程中发生数据丢失、损坏或重复,UDP协议不会进行任何处理,这使得UDP的传输不可靠。

3,面向数据报:UDP以数据报(Datagram)为单位进行通信。每个UDP数据包是一个独立的数据报,具有自己的报头,其中包含源端口号、目标端口号和数据长度等信息。这使得UDP的通信单位独立,不受其他数据报的影响,独立地发送和接收数据。

4,全双工通信:UDP支持全双工通信,允许发送方和接收方同时发送和接收数据。发送方可以随时发送数据报,而接收方可以在任何时间接收数据报,而不受发送方的限制。这使得UDP在实现实时双向通信时具有优势。


3,UDP 段格式

UDP协议的数据包(也称为UDP报文)由两部分组成:UDP头部和UDP数据部分。

UDP 协议段格式示意图:

UDP 数据包中的各字段代表含义如下:

1,源端口号(Source Port):16位字段,表示发送方的端口号,用于标识发起UDP通信的应用程序的发送端口。

2,目标端口号(Destination Port):16位字段,表示接收方的端口号,用于标识接收方应用程序的接收端口。

3,长度(Length):16位字段,表示UDP报文的长度,包括UDP头部和数据部分的总长度。

4,校验和(Checksum):16位字段,用于检测UDP报文在传输过程中是否发生错误或被篡改。

5,数据区(Data):可选字段,用于携带实际的应用数据内容。

UDP 数据包中的注意事项:

1,UDP协议的首部固定为8个字节,即源端口、目的端口、长度和校验和,其中校验和字段为可选字段,可以不包含校验和。

2,UDP报文长度包括UDP头部和数据部分,最大长度为16位,UDP数据报的最大长度被限制为65535 B ,也就是最多只能传输64KB的数据。如果应用程序需要传输更大的数据,则需要将数据进行分片,并在应用层协议中进行重组,或者采用TCP协议。

3,UDP首部中的源端口和目的端口用于标识发送方和接收方的应用程序或服务。这两个字段共同决定了数据包的传输路径,以确保正确地将数据包传送到相应的应用程序或服务。


4,UDP 扩展知识


拓展:端口号介绍

端口号是在传输层中使用的概念,用于标识不同应用程序或服务的网络进程。

在传输层协议中,头部中的源端口和目的端口用于标识发送方和接收方的应用程序或服务。

这两个字段共同决定了数据包的传输路径,以确保正确地将数据包传送到相应的应用程序或服务。

端口号是一个16比特(2字节)的无符号整数,代表的取值范围为0 ~ 65535,在该范围内被划分3部分,分别为:

  1. 知名端口:从0到1023的端口号被指定为知名端口,用于一些广泛使用的标准服务。
  2. 注册端口:从1024到49151的端口号被指定为注册端口,用于一些用户注册的应用程序或服务。
  3. 动态或私有端口:从49152到65535的端口号是动态或私有端口,也称为临时端口。

下面是一些常见的知名端口号的定义和用途:

  • 22:SSH端口,用于安全外壳协议,用于远程登录和安全文件传输。
  • 53:DNS端口,用于域名系统解析域名到IP地址。
  • 80:HTTP端口,用于超文本传输协议,用于Web浏览器和服务器之间的通信。
  • 143:IMAP端口,用于Internet消息访问协议,用于电子邮件客户端与服务器之间的通信。
  • 443:HTTPS端口,用于安全的超文本传输协议,通过SSL/TLS加密的HTTP通信。
  • 3306:MySQL数据库服务器的默认端口号。

进程与端口号之间的关系:

一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定。


拓展:校验和字段介绍

校验和的作用是用于验证UDP数据包的完整性,以确保数据在传输过程中没有被篡改或损坏。

校验和的作用过程:发送方在发送UDP数据包时,会计算数据包的校验和(校验和的计算涉及UDP头部和数据部分),并将校验和值存储在校验和字段中。接收方在接收到UDP数据包后,会重新计算数据包的校验和,并将计算得到的校验和值与接收到的校验和字段进行比对。如果两者一致,则说明数据包在传输过程中没有损坏;如果两者不一致,则说明数据包可能在传输过程中发生了错误。

校验和字段为可选字段,在UDP协议中是可以不选,是否使用校验和可以根据应用程序的需求和对数据完整性的要求来决定。

  • 对于实时性要求高、数据可靠性要求较低的应用,可以选择不使用校验和以减少开销和延迟。
  • 对于对数据的可靠性要求较高的应用,可以自行添加校验和机制来保证数据的完整性。

经典问题:基于传输层UDP协议,来实现一个可靠传输,应该如何设计?

问题引入:虽然校验和可以提供一定程度的数据完整性检查,但是因为UDP本身是一种不可靠传输协议,即使检测到错误或数据篡改,UDP也不会进行任何恢复操作,具体就是不提供丢包重传、数据校验和错序整理等机制。

若想基于传输层UDP协议,来实现一个可靠传输,那就是从下面这几个方面来考虑:

  1. 数据包序列号:为每个发送的数据包分配一个唯一的序号。序号可以是一个递增的数字或其他唯一标识符,接收方根据序列号对接收到的数据包进行排序和重组,以确保数据包按正确的顺序传递给应用层。
  2. 确认应答机制:接收端需要向发送端发送确认消息以确认已收到的数据包。发送端在收到确认消息后才能发送下一个数据包。如果发送端没有收到确认消息,则会启动超时重传机制。
  3. 超时重传:当发送端发送一个数据包后,如果在一定时间内没有收到确认消息,则认为数据包丢失或发生了错误。发送端需要启动超时重传机制,重新发送丢失的数据包。

结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


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

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

相关文章

Flink学习笔记(一)

流处理 批处理应用于有界数据流的处理,流处理则应用于无界数据流的处理。 有界数据流:输入数据有明确的开始和结束。 无界数据流:输入数据没有明确的开始和结束,或者说数据是无限的,数据通常会随着时间变化而更新。 在…

Kaptcha的基本应用

Kaptcha Kaptcha 是一个用于生成和验证验证码的 Java 库,提供了丰富的生成和验证功能,并支持自定义配置。它可以用于增加应用程序的安全性,防止机器人和恶意攻击。 Kaptcha 可以生成各种类型的验证码,包括数字、字母、数字字母组…

KDD 2023 获奖论文公布,港中文、港科大等获最佳论文奖

ACM SIGKDD(国际数据挖掘与知识发现大会,KDD)是数据挖掘领域历史最悠久、规模最大的国际顶级学术会议,也是首个引入大数据、数据科学、预测分析、众包等概念的会议。 今年,第29届 KDD 大会于上周在美国加州长滩圆满结…

HTTP--Request详解

请求消息数据格式 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1 请求头 客户端浏览器告诉服务器一些信息 请求头名称: 请求头值 常见的请求头: User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息 可…

蓝桥杯每日N题 (消灭老鼠)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 不清楚蓝桥杯考什么的点点下方👇 考点秘籍 想背纯享模版的伙伴们点点下方👇 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

【日常积累】HTTP和HTTPS的区别

背景 在运维面试中,经常会遇到面试官提问http和https的区别,今天咱们先来简单了解一下。 超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果…

09- DMA(DirectMemoryAccess直接存储器访问)

DMA 09 、DMA(DirectMemoryAccess直接存储器访问)DMA配置流程 09 、DMA(DirectMemoryAccess直接存储器访问) DMA配置流程 dma.c文件 main.c文件 详见《stm32中文参考手册》表57。

tsconfig.json和jsconfig.json配置

{// 编译选项"compilerOptions": {// 生成代码的语言版本:将我们写的 TS 代码编译成哪个版本的 JS 代码// 命令行: tsc --target es5 11-测试TS配置文件.ts"target": "es5",// 指定要包含在编译中的 library"lib&quo…

3年 Android 开发的面试心经(后悔当初没有拿 N+1)

作者:勇闯天涯 当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用…

SSH连接工具汇总

xshell 这是个熟悉的软件啦,目前我正在使用Xshell_7 链接:https://www.xshell.com/zh/xshell/ FinalShell 国产软件,有windows和MAC版本;使用方便而且免费,但是软件比较占用内存。但是都2021年了,笔记本…

AlphaZero能否从围棋和国际象棋飞跃到量子计算?

一项新的研究表明,DeepMind惊人的游戏算法AlphaZero可以帮助释放量子计算的力量和潜力。 自两年多前出现以来,AlphaZero一再证明了其快速学习能力,将自己提升到围棋,国际象棋和将棋(日本象棋)的特级大师级别…

VHDL记录

文章目录 使用function名称作为“常量”numeric_std包集中使用乘法的注意项variable的使用对于entity设置属性的方法在entity声明中嵌入function的定义VHDL仿真读写文件File declaration/File handingFile readingFile writing小例子 使用函数 模块中打印出调试信息 使用functi…

RTC实验

一、RTC简介 RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电BCD码,四位二进制表示一位…

Java Persistence APl(JPA)——JPA是啥? SpringBoot整合JPA JPA的增删改查 条件模糊查询 多对一查询

目录 引出Jpa是啥?Jpa的使用创建实体类写dao接口类写服务类 crud增删改查增加修改根据id删除全查询分页查询 条件查询模糊查询单条件查询多条件查询模糊查询排序查询 多对一查询定义实体类auto主键策略下新增进行全查询测试 全部代码application.yml配置类pom配置文…

Java反射机制是什么?

Java反射机制是 Java 语言的一个重要特性。 在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期。 编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些…

Python学习笔记第五十二天(Pandas 安装)

Python学习笔记第五十二天 Pandas 安装查看安装版本 安装验证后记 Pandas 安装 安装 pandas 需要基础环境是 Python,开始前我们假定你已经安装了 Python 和 Pip。 使用 pip 安装 pandas: pip install pandas安装成功后,我们就可以导入 pandas 包使用&…

iPhone(iPad)安装deb文件

最简单的方法就是把deb相关的文件拖入手机对应的目录,一般是DynamicLibraries文件夹 参考:探讨手机越狱和安装deb文件的几种方式研究 1、在 Mac 上安装 dpkg 命令 打包 deb 教程之在 Mac 上安装 dpkg 命令_xcode打包root权限deb_qq_34810996的博客-CS…

神经网络基础-神经网络补充概念-26-前向和反向传播

简单比较 前向传播(Forward Propagation): 前向传播是神经网络中的正向计算过程,用于从输入数据开始,逐层计算每个神经元的输出值,直到得到最终的预测值。在前向传播过程中,我们按以下步骤进行…

驱动DAY4 字符设备驱动分步注册和ioctl函数点亮LED灯

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

一百五十八、Kettle——Kettle各版本及其相关安装包分享(网盘链接,不需积分、不需验证码) 持续更新、持续分享

一、目的 最近因为kettle9.3的shim问题看了好多博客,都没有网盘分享。后来有一位博主分享了kettle9.2的shim安装包,已经很感谢他,但是是博客分享,下载还需要搞验证码下载码之类的。 kettle9.2的shim安装包下载好后,一…