传输层协议 --- UDP

序言

 在之前的文章 Socket 编程 中,我们只是简单的知道了怎么利用 UDP协议 或者是 TCP协议 来发送我们的数据,并且我们还知道 UDP 是不可靠的,TCP 是可靠的。但这是为什么呢?底层的构造和策略决定他们的属性!这篇文章中,我们就来先认识 UDP 吧。


UDP 协议端格式

 每一层都有相应的协议,所谓协议,我们也可以简单认为就是在正文之前加上若干结构体字段(报头),确保数据的正确传输、识别、处理以及可能的校验和错误恢复。UDP 的报头如下:
在这里插入图片描述
在正文之前一共包含 64 位长度(8字节)的字段,每个字段的功能如下:

  • 源端口号(Source Port):占用 2 个字节,表示发送方端口号
  • 目标端口号(Destination Port):占用 2 个字节,表示接收方端口号
  • 长度(Length):占用 2 个字节,表示 UDP 数据报文的长度,包括头部和数据部分
  • 检验和(Checksum):占用 2 个字节,用于检测 UDP 数据报在传输过程中是否有错误。如果检验和出错,就会直接将报文丢弃
    - 数据(Data):占用 0 个或多个字节,实际传输的数据部分

在这里我们着重介绍一下 长度 字段,占 2 个字节,构成于 报头 + 报文。我们可以简单计算一下,2 个字节表示的最大数字是 — 2^16 - 1 = 65535,这就代表一个 UDP 数据报的最大长度为 65535 字节,再减去报头的长度 8 字节,那么能传输的最大的报文的长度为 65527 字节。当然这只是理论情况下,实际情况下看到受到其他的限制。


UDP 协议的特点

1. 无连接

UDP 在发送数据之前 不需要建立连接,数据包可以直接发送到目标主机。这种无连接性减少了建立连接和断开连接的开销,并提高了传输效率。
 这个是我们直观感受过的,当时我们的服务端并未启动,但是客户端依然可以将数据传送到服务端!这说明两者之间通信是不需要建立连接状态的。

2. 不可靠(尽最大努力交付)

UDP 不保证可靠交付,即不保证数据包能够到达目标主机或按发送顺序到达。如果数据包在传输过程中丢失或损坏,UDP不会进行重传或错误恢复。
 结构决定特性!UDP 协议端的格式很简单,只是负责将数据发出,并不会去维护发送了哪些信息!

3. 面向报文

UDP 对应用程序交下来的报文不再划分为若干个分组来发送,也不把收到的若干个报文合并后再交付给应用程序。UDP 保留了报文的边界,使得接收方能够准确地识别出每个报文的内容。

 通过了解 UDP,大家不觉得其实它的特征就很像很早之前信件传输吗?一封信发出去,谁也不知道它是否能到达收信人手中,就算收到了也不知道。


UDP 的缓冲区

UDP 是全双工的,可以接受的同时发送,但是他还和 TCP 有点不一样,两者都是全双工,但是 TCP 是包含发送缓冲区和接收缓冲区的,但是 UDP 没有发送缓冲区:
在这里插入图片描述

 这是因为 UDP 对发送数据添加报头后立马就会发送,不会进行其他的操作,而 TCP 为了达到一个可靠通信,在发送数据时会进行相应的处理(在后面介绍 TCP 时会介绍)。并且 UDP 这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致,如果缓冲区满了,再到达的 UDP 数据就会被丢弃(果然是不靠谱的协议)。


UDP 的使用注意事项

 刚才我们谈到,一次 UDP 传输的数据最大为 65527 字节,然而该大小在当今的互联网环境下,是一个非常小的数字。如果我们需要传输的数据超过该数字,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。


总结

 在这篇文章中我们了解了 UDP,感觉内容不是很多,也比较好理解。但是在之后学习 TCP 可是截然不同了,毕竟后者为了 可靠 可是下了不少功夫,希望大家这篇文章有所收获!

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

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

相关文章

数据结构编程实践20讲(Python版)—01数组

本文目录 01 数组 arrayS1 说明S2 举例S3 问题:二维网格中的最小路径求解思路Python3程序 S4 问题:图像左右变换求解思路Python3程序 S5 问题:青蛙过河求解思路Python3程序 写在前面 数据结构是计算机科学中的一个重要概念,用于组…

HttpSession使用方法及原理

HttpSession使用方法及原理 一、HttpSession使用流程说明二、登录概述具体 三、访问过程概述具体 一、HttpSession使用流程说明 1.用户发送登录请求到服务器。 2.服务器处理登录请求,调用userService.login(loginUser)。 3.如果登录成功,服务器调用requ…

Linux云计算 |【第四阶段】NOSQL-DAY2

主要内容: Redis集群概述、部署Redis集群(配置manage管理集群主机、创建集群、访问集群、添加节点、移除节点) 一、Redis集群概述 1、集群概述 所谓集群,就是通过添加服务器的数量,提供相同的服务,从而让…

【echarts】报错series.render is required.

总结:就是echarts无法保存renderItem函数到json里,因为renderItem是个封装方法,因此需要初始化加载时重新插入renderItem即可 1.描述:控制台报错series.render is required. 原数据json如下: {type: "bar"…

工作安排 - 华为OD统一考试(E卷)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定…

科研绘图系列:R语言树结构聚类热图(cluster heatmap)

文章目录 介绍加载R包导入数据数据预处理画图修改图形导出数据系统信息介绍 热图结合树结构展示聚类结果通常用于展示数据集中的模式和关系,这种图形被称为聚类热图或层次聚类热图。在这种图中,热图部分显示了数据矩阵的颜色编码值,而树结构(通常称为树状图或聚类树)则显…

AIGAME背后的强大背景与AI币价值的崛起

AIGAME平台背后汇集了强大的资本和技术支持,凭借蒙特加密产业基金的战略投资和汇旺集团的多元化Web3基础设施建设,AIGAME在全球范围内迅速崛起。平台所使用的Sleepless AI技术,结合区块链与AI的深度融合,赋能AI币,使其…

虚拟社交的新时代:探索Facebook的元宇宙愿景

随着技术的不断进步,社交媒体的形态也在悄然变化。Facebook(现名Meta)正站在这一变革的前沿,积极探索元宇宙的愿景。元宇宙不仅是虚拟现实(VR)和增强现实(AR)的结合,更是…

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分:windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…

【RabbitMQ 项目】服务端:服务器模块

文章目录 一.编写思路二.代码实践三.服务端模块关系总结 一.编写思路 成员变量: muduo 库中的 TCP 服务器EventLoop 对象:用于主线程循环监控连接事件协议处理句柄分发器:用于初始化协议处理器,便于把不同请求派发给不同的业务处理…

Golang | Leetcode Golang题解之第433题最小基因变化

题目: 题解: func diffOne(s, t string) (diff bool) {for i : range s {if s[i] ! t[i] {if diff {return false}diff true}}return }func minMutation(start, end string, bank []string) int {if start end {return 0}m : len(bank)adj : make([][…

OpenHarmony标准系统mipi摄像头适配

OpenHarmony标准系统mipi摄像头适配 本文档以rk3568为例,讲述如何在OpenHarmony 标准系统rk设备上适配mipi摄像头。 开发环境 OpenHarmony标准系统4.1rrk3568设备摄像头ov5648,ov8858 文档约定:4.1r_3568为OpenHarmony标准系统源码根目录 1.适配准备:得…

树莓派pico上手

0 介绍 不同于作为单板计算机的树莓派5,树莓派 pico 是一款低成本、高性能的微控制器板,具有灵活的数字接口。主要功能包括: 英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器,弹性的时钟频率高达 133 MHz26…

Spring AOP的应用

目录 1、maven坐标配置与xml头配置 2、代理方式的选择与配置 3、AOP的三种配置方式 3.1、XML模式 3.1.1 创建目标类和方法 3.1.2 创建切面 3.1.3 切面xml配置与表达式说明 3.1.4 单测 3.2 纯注解模式 3.2.1 开启注解相关配置 3.2.2 创建目标类和方法 3.2.3 创建切面…

FGPA实验——触摸按键

本文系列都基于正点原子新起点开发板 FPGA系列 1,verlog基本语法(随时更新) 2,流水灯(待定) 3,FGPA实验——触摸按键 一、触摸操作原理实现 分类:电阻式(不耐用&…

二叉树进阶

目录 1. 二叉搜索树实现 1.1 二叉搜索树概念 2.2 二叉搜索树操作 ​编辑 ​编辑 2.3 二叉搜索树的实现 2.3.0 Destroy() 析构 2.3.1 Insert()插入 2.3.2 InOrder() 打印搜索二叉树 ​编辑​编辑 2.3.3 Find() 查找 …

el-table表格点击该行任意位置时也勾选上其前面的复选框

需求&#xff1a;当双击表格某一行任意位置时&#xff0c;自动勾选上其前面的复选框 1、在el-table 组件的每一行添加row-dblclick事件&#xff0c;用于双击点击 <el-table:data"tableData"ref"tableRef"selection-change"handleSelectionChange&q…

如何在Chrome最新浏览器中调用ActiveX控件?

小编最近登陆工商银行网上银行&#xff0c;发现工商银行的个人网银网页&#xff0c;由于使用了ActiveX安全控件&#xff0c;导致不能用高版本Chrome浏览器打开&#xff0c;目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行&#xff0c;而IE已经彻底停止更新了&#xff…

AI绘图网页版工具

https://chat.bushao.info/?inVitecodeCHBEPQQOOM 一款AI绘图工具&#xff0c;很好玩&#xff0c;推荐&#xff1b; 我自己根据文本生成的图&#xff0c;感觉还不错。

ROC、TPR、FPR的含义

1、ROC&#xff08;Receiver Operating Characteristic&#xff09; ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线是一种用于评估分类模型性能的工具。它通过绘制真阳性率&#xff08;True Positive Rate, TPR&#xff09;与假阳性率&#xff08;False…