当前位置: 首页 > news >正文

【网络篇】----- 传输层协议 之 UDP(协议格式,协议特性和编程影响三方面详细分析)

文章目录

  • 前言
  • 1、UDP协议
  • 2、协议格式
    • 2.1、协议格式模型
    • 2.2、字段分析
  • 3.协议特性
  • 4.编程影响
  • 总结


前言


1、UDP协议

UDP协议,又名数据报传输协议,是传输层协议之一!!!

在TCP/IP五层模型中,在传输层中,对数据的封装时,会对上层应用层的数据,封装对应传输层协议的报头!!!可铁子,你知道UDP报头中长啥损样不??
5cb565b217e549b1a03d15b6bc587310.jpeg#pic_center
这就为佬,你解密!!!

2、协议格式

2.1、协议格式模型

e37e9fc3c9d6448f8185547825d40402.png

2.2、字段分析

  • 16位源端端口和16位对端端口: 传输协议,即本身便是负责“两端”的数据传输,其实则交代何去何从罢了;

  • 16位报头长度: 描述报文长度(包含头部在内);

16位的报头长度,实则就已经限制了,UDP报文大小必须要小于64K
同时在套接字编程中,我们还接触一接口,sendto函数接口(UDP发送数据接口)

函数接口原型如下:

 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

其中buf参数,为发送数据的数据长度,它的长度会有限制吗???
当然!UDP报文的被限制于64K以内,而其中固定数据包含8字节(16位源端端口,16位对端端口,16位报头长度以及16位的校验和),而剩余的64K-8,即为发送数据的最大长度


  • 16位校验和: 用于检验接受到的数据是否于发送的数据一致;

    • 之所以存在校验和,是因为,数据在传输给对端的时候,可能收到多方面因素的影响,例如网速,进而导致数据出现部分丢失,甚至数据到达对端的先后不同而产生错误
    • 因而对端在接受数据时,首先就会通过一定算法,比较报文头部字段中的校验和,判断当前按数据是否与发送数据保持一致;一致则接受,反之则直接丢弃

而其中,关于用校验和验证接受到数据与发送数据是否一致,大佬们则想出了算法!!
二进制反码求和算法,步骤如下:

	- 发送方将报文数据组织完毕,将校验和字段置为0;- 从第0个字段(包含头部),对每个字段进行取反,求和;- 再求和过程中,若数据大小超过16位,则截断,并于低16位进行求和;- 最终得到的32字节的校验和数据,填充UDP头部的校验和字段中;- 接受方接受到数据,同样对数据进行相同的操作!!!

关于这种算法,博主,也没具体尝试过,不过倒是想起了数据的原码与反码的相互转换,其中,有一种方法,便是,对同一数据的原码,反码进行相同的数求反码操作,均会得到对方;

3.协议特性

UDP协议,有三大特性,即无连接,不可靠与面向数据报传输

  • 无连接: 即收发数据双方,无需建立连接,便可接收发送数据

就比如咱们在一些聊天APP上,比如QQ,不一定需要对方在线才能发送数据,当然QQ的通信方式,以UDP为主,TCP-为辅;


  • 不可靠:不能保住数据有序,且安全的到达对端;

其原因也在于,UDP传输不存在丢包检测,重传机制以及无包序管理,上述提到的16校验和,实则仅仅只是验证数据的一致,而并没有做出任何使数据安全的措施;

UDP说:
428f3bca9be54bfc954ae34cb9357075.png

但是UDP,人家也是真的快啊!!!在无以上的操作,UDP的传输效率也得到了大大提升


  • 面向数据报: UDP的数据都是整条交付的,且数据有固定最大长度限制,必须小于64K;

4.编程影响

  • 由于数据可能无法安全对端,那就让收拾这烂摊子吧!!!;

程序猿,可在应用层进行对应操作:
09cba24283bf4cd0b9ab275e335d9001.png

  • UDP面向数据报,有固定长度限制,64K(应用层数据小于64K-8)

但是要是数据大于64K呢?则需要分包处理!!(此处的分包,是在应用层方面对数据进行分包,与UDP数据的整条交付必定不冲突~~)

  • UDP要求数据整条传输交付

当接受方接受UDP数据时,会将其整条(带头部)置于接受缓冲区中!!

~~~ 带头部,这嘛呢??

不带头部,嘛取数据呢??!!对于UDP报文数据的解析,首先就先取出头部的16位报头长度,之后减去8字节固定数据,剩下的便是数据大小;(也正因为如此,UDP传输不存在数据的粘包问题!!!

同时需要注意的是,程序员接受recvfrom接受数据的缓冲区,一定要足够大!!!否则,可能应为无法存放下数据而导致,数据丢失!!!

总结

传输层,不还有个TCP吗,博主觉的两个板块,分别写一个博客,会方便观看点~
下期,TCP协议,仍会从以上方面,逐个分析,还有诸多面试题的详细分析!!!
不想错过,就给博主,一个小小的关注吧?

c8b9c91235c643ca8a26fd41ed1e6207.jpeg#pic_center

相关文章:

【网络篇】----- 传输层协议 之 UDP(协议格式,协议特性和编程影响三方面详细分析)

文章目录 前言1、UDP协议2、协议格式 2.1、协议格式模型2.2、字段分析3.协议特性4.编程影响总结前言 1、UDP协议 UDP协议,又名数据报传输协议,是传输层协议之一!!! 在TCP/IP五层模型中,在传输层中&#xff…...

【基于STM32的多功能台灯控制】

基于STM32的多功能台灯控制 在之前一篇博文中已出过智能台灯相关的介绍,在这里对之前的模块以及功能上进行了优化和功能上的改进,需源码或实物可私【创作不易-拒绝白嫖】 功能说明 1、按键模式多功能台灯在设计上使用了4个按键分别做为 按键1模式的切换…...

Mac 编译x264源码No working C compiler found 错误

在mac上编译x264源码时,报错No working C compiler found 。网上找了一圈方案也无法解决 只能硬着头皮看configure这个脚本,通过一步一步抽丝拨茧终于是在mac上可以编译了。 这里只当记录一下,为后续同学遇到同样问题提供一个辅助解决方案。…...

如何有效地降低软件开发风险?

1、科学分析风险 高风险自动预警 一般对风险进行科学分析,主要从3个维度进行划分:影响的严重性、发生的可能性、产生的影响性。 根据风险对项目的影响程度,从3个维度将其划分5个等级:很低、比较低、中等、比较高、很高。这样我们能…...

【python】剑指offer代码大集合2

本文是【python】剑指offer代码大集合的姊妹篇,用于完善标识todo的代码! 刷题网站:https://leetcode.cn/problem-list/xb9nqhhg/ 剑指 Offer 14- I. 剪绳子 https://leetcode.cn/problems/jian-sheng-zi-lcof/ todo 剑指 Offer 14- II. 剪绳子 II https://leetcode.cn/pr…...

经纬恒润再传佳讯,斩获大奖

阳春二月,经纬恒润屡传佳讯,凭借产品、研发等多方面的出色表现,再次斩获东风柳汽“优秀供应商”和广汽传祺“科技创新奖”,以实力印证良好口碑,不忘初心,载誉而行! 东风柳汽:优秀供…...

说说转义字符 “\”

转义字符-escape character character 表示字符,包含两层含义, 1.字母 2.符号 转义: 改变含义 字符: 字母、符号 转义字符: 把 字母、符号 的含义改变了注意:这里有 2 个常常被忽视、忽略、轻视的转义规则&…...

2023高质量设计竞赛汇总,想证明自己实力的快来

对于设计师来说,参加设计比赛不仅能够提升自己的设计能力,也是一条证明实力最好的捷径。小编也收集整理了不少近期设计大赛,分别标注了截止日期和官网等,宝子们记得码住收藏,赶紧SHOW起来!优酷X站酷 一千零…...

MongoDB与MySQL有区别吗?用一个表格跟你说明

MongoDB MySQL 数据库模型 非关系型 关系型 存储方式 虚拟内存持久化 不同引擎有不同存储方式 查询语句 独特MongoDB查询方式 传统SQL语句 架构特点 可通过副本集和分片实现高可用 常见有单点、M-S、MHA、MMM、Cluster等架构方式 数据处理方式 基于内存&#xf…...

ElasticSearch - 分布式文档索引、搜索、更新和删除文档的过程

文章目录1. 分布式文档存储1. 路由一个文档到一个分片中2. 主分片和副本分片如何交互3. 新建、索引和删除文档4. 取回一个文档5. 局部更新文档2. ElasticSearch相关问题1. 路由计算方式?2. 分片控制3. 分布式文档写入(索引)的过程?4. 分布式文档搜索的过…...

Python之re库用法细讲

文章目录前言一、使用 re 模块的前期准备工作二、使用 re 模块匹配字符串1. 使用 match() 方法进行匹配2. 使用 search() 方法进行匹配3. 使用 findall() 方法进行匹配三、使用 re 模块替换字符串四、使用 re 模块分割字符串总结前言 在之前的博客中我们学习了【正则表达式】的…...

MATLAB | 如何绘制github同款日历热力图

应粉丝要求,出一个类似于github热图的日历热力图,大概长这样: 依旧工具函数放在文末,如有bug请反馈并去gitee下载更新版。 使用教程 使用方式有以下几种会慢慢讲到: heatmapDT(Year,T,V)heatmapDT(Year,T,V,MonLim)h…...

认识适配器模式

适配器模式 一、定义 在不修改原来代码的情况下,适配器模式使接口不兼容的那些类可以一起工作。 二、适配器结构 1、Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或者接口,也可以…...

JavaSe第6次笔记

1.不建议使用c语言的数组的表示方法。 2.二维数组表示方法 3.数组整体初始化时,只能在定义时初始化。 int[] array; array new int[]{1, 2}; 4. boolean类型数组,默认值是false,String类型数组,默认是null,其它是…...

单例设计模式

介绍 单例模式是一种创建型设计模式,其主要特点包括: 只有一个实例:单例模式确保系统中只有一个实例对象存在,所有对该对象的访问都是对同一个对象的引用全局访问:单例模式可以全局访问该实例对象,避免了多个对象之间的冲突和竞争延迟初始化:单例模式通常使用延迟初始化技术,…...

第七章 opengl之光照(基础光照)

OpenGL基础光照环境光照漫反射光照镜面光照基础光照 主要需要理解一个模型是冯氏光照模型,主要结构由3个分量组成:环境,漫反射,镜面光照。下面分别描述下这三个光照: 环境光照(Ambient Lighting):即使在黑…...

不考虑分配与合并情况下,GO实现GCMarkSweep(标记清除算法)

观前提醒 熟悉涉及到GC的最基本概念到底什么意思(《垃圾回收的算法与实现》)我用go实现(因为其他的都忘了,(╬◣д◢)ムキー!!) 源码地址(你的点赞,是我开源的…...

性能分析利器:火焰图

什么是火焰图 火焰图(FlameGraph)是是由 Linux 性能优化大师 Brendan Gregg 发明的。通过 perf 等工具分析得到结果,看起来就像是火焰,这也是它的名字的由来。火焰图以一个全局的视野来看待时间分布,它从底部往顶部&am…...

八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令

layout: post title: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 description: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 tag: 八股总结 文章目录操作…...

概率论小课堂:条件概率和贝叶斯公式(机器翻译的工作原理)

文章目录 引言I 条件概率1.1 条件概率的定义1.2 条件概率的计算II 贝叶斯公式2.1贝叶斯公式的本质2.2 机器翻译的原理引言 对于几乎所有的随机事件来讲,条件概率由于条件的存在,它通常不等于本身的概率。 贝叶斯公式的本质:在数学上条件和结果可以互换,通过这种互换,可以…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...