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

UDP协议

在这里插入图片描述

文章目录

  • 一、前沿知识
    • 应用层
    • 传输层
  • 二、UDP协议

一、前沿知识

应用层

应用层:描述了应用程序如何理解和使用网络中的通信数据。
我们程序员在应用层的主要工作是自定义协议,因为下面四层都在系统内核/驱动程序/硬件中已经实现好了,不能去修改。
自定义协议需要做好两件事:
1.明确协议要传递那些信息
2.确定数据组织格式: xml,json,protobuffer
当然我们的应用层也有一些成品的协议:HTTP协议

传输层

传输层是紧接着应用层的一层,虽然传输层已经被操作系统内核实现好了,但是我们在写代码的时候,要调用系统的Socket api去完成网络编程

端口号: IP是用来确定网上上的一台主机,那么端口号就是用来确定主机上的一个进程的,端口号是传输层的一个概念
TCP和UDP协议的报头中都会包含源端口和目的端口,并且都是使用2个字节,16bit来表示,端口号的范围是 0 -> 65535,但是我们日常使用一般都是从1024开始的,因为0 -> 1023这个范围的端口系统已经分配给了一些知名的应用程序了,也称这些端口为" 知名端口号/具名端口号".
虽然我们建议1023以下的端口别使用,但不代表完全不能使用,虽然这些端口分配给了特定程序,但是这些程序是否在主机运行着,是否安装了这些程序都是不确定的,如果我们想要使用1023以下的这些端口,需要注意以下2点:
1.确定这个端口是否有程序在绑定
2.是否具有管理员权限。

二、UDP协议

我们在前面为大家介绍过了UDP协议的一些特点:无连接,不可靠,面向数据报,全双工,这些特性在我们实现回显UDP服务器客户端程序的时候有所体现,那么今天我们来研究以下UDP协议的报文结构。
在这里插入图片描述
相信学过计算机网络这门课的小伙伴们,看到这张图都不陌生,但实际上我们课本这样画是为了排版方便。
在这里插入图片描述
UDP的载荷数据就是通过UDP socket send()要发送的数据,在前面拼接上8个字节的报头)
我们来看一下UDP报头所包含的信息,UDP报头一共8个字节,4个部分每部分占2个字节,但正是因为,我们的UDP报文的长度也受到了限制,UDP报文长度是用2个字节表示的,2个字节表示0 -> 65535(64KB),也就表示了我们UDP数据报最大只能传输64KB的数据。
相信有同学会问,如果我想传一个大于64KB的数据报呢?
有两种解决办法:
1.我们应用层在代码层面将我们要传输的数据报进行分包,通过多个UDP数据报进行发送。
如果采用1,本来我们send一次,现在需要多次send,就好比我们扔垃圾,垃圾太多,一个小袋子装不下,需要装许多个,装垃圾,提垃圾,倒垃圾都比较麻烦,基于上面这种情况,我们可以直接用一个超大垃圾袋,一次性就搞定了,这也是第二种方案。
2.不使用UDP,使用TCP,TCP没有长度限制。

我们报头信息中还有源端口和目的端口信息,我们的一次网络通信,涉及到五元组:源IP,源端口,目的IP,目的端口,协议类型,端口信息就是由我们传输层体现的。

校验和:验证传输的数据是否是正确的,我们在网络传输中往往不是一帆风顺的,可能会受到一些干扰,在这些干扰下可能会出现比特翻转的现象, 0 -> 1,1 -> 0的现象。
我们网络传输中,物理层传输的本质就是光信号/电信号,这些信号会受到一些物理环境的影响,比如电磁场,高能射线等等,有时候仅仅是一个比特位的变化,对于原本数据的含义就发生了致命的变化,我们对于这些不可避免的现象,只能是及时识别当前的数据是否出现问题。
因此就引入了校验和来干这一项工作,针对数据内容进行一系列的数学运算,得到一个短小的结果,如果我们的数据内容一定,那么我们得到的校验和就是一定的,如果我们的数据变了,那么我们的校验和就变了。
在这里插入图片描述
我们接收方在接收到数据之后会在计算一边校验和,看看是否和发送方发来的校验码对的上,如果对上了就证明传输没问题,如果对不上,证明传输出错了。
在这里插入图片描述
我们根据收到的数据我要吃火锅计算出了0x1122发现和接收到校验码一致,证明我们这次数据传输没问题。
在这里插入图片描述
我们根据接收到的数据我要吃烤肉计算出来0x5566发现和接收到的校验码不一致,证明我们的传输出错了。
当然有同学肯定想到了,是否存在一种这样的情况,我们接收到不同的数据,但是计算出的校验码恰好相同,这种情况理论上是存在的,但是概率特别小,就忽略不计了。

我们网络传输中,生成校验和的算法有很多,我们这里只介绍比较知名的几个:
CRC(循环冗余校验): 实际的CRC校验码生成是采用二进制的模2算法(即减法不借位、加法不进位)计算出来的,这是一种异或操作。这种方法比较好算,但是校验的效果不够理想。
MD5: MD5是使用一系列公式来进行更复杂的数学运算,具有以下几个特点:
1.定长:无论原始数据多长,得到的MD5值都是固定长度(4/8字节)
2.冲突概率小:我们的原始数据即使变动了一点点,算出来的MD5值的差别都很大(MD5结果更分散了)
3.不可逆:我们通过原始数据即使出MD5比较容易,但是通过MD5还原成原始数据很难,理论上是不可实现的。
基于MD5的这些特点,MD5的应用场景就有许多了:
1.校验和
2.加密
3.计算Hash值
可能大家在网上会看到一些MD5的方法,其实也很好理解,有人将一些常见的字符串的MD5值进行汇总成一张表,解密的过程相当于查表,但仅限于一些常见的字符串,其他也查不到。
SHA1: SHA1和MD5类型,这里就不具体介绍了,感兴趣的同学可以上网查询下资料。

相关文章:

UDP协议

文章目录一、前沿知识应用层传输层二、UDP协议一、前沿知识 应用层 应用层:描述了应用程序如何理解和使用网络中的通信数据。 我们程序员在应用层的主要工作是自定义协议,因为下面四层都在系统内核/驱动程序/硬件中已经实现好了,不能去修改…...

IT人的晋升之路——关于人际交往能力的培养

对于咱们的程序员来说,工作往往不是最难的,更难的是人际交往和关系的维护处理。很多时候我们都宁愿加班,也不愿意是社交,认识新的朋友,拓展自己的圈子。对外的感觉就好像我们丧失了人际交往能力,是个呆子&a…...

Docker进阶 - 8. docker network 网络模式之 container

目录 1. container 模式概述 2. 使用Alpine操作系统来验证 container 模式 1. container 模式概述 container网络模式新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个…...

2年功能测试月薪9.5K,100多天自学自动化,跳槽涨薪4k后我的路还很长...

前言 其实最开始我并不是互联网从业者,是经历了一场六个月的培训才入的行,这个经历仿佛就是一个遮羞布,不能让任何人知道,就算有面试的时候被问到你是不是被培训的,我还是不能承认这段历史。我是为了生存,…...

“数字孪生”:为什么要仿真嵌入式系统?

​01.仿真是什么? 仿真的概念非常广泛,但归根结底都是使用可控的手段来模仿真实的情况,通常应用于现实世界中实施难度大甚至是无法实践的事物。 众所周知,嵌入式系统通常是形式多样的、面向特定应用的软硬件综合体,无…...

Java基础知识总结(上)

Java基础知识总结 1. Java语言的特点 简单易学,相较于python等语言具有较好的严谨性以及报错机制; 面向对象(封装,继承,多态),Java中所有内容都是基于类进行扩展的,由类创建的实体…...

MySQL 2:MySQL约束

一、定义 约束(constraint),即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表,有些列(手机号)的值不能为空,有些列(身份证号&#xff…...

C4--Vivado添加列表中不存在的FLash器件2023-02-10

以华邦SPI FLASH W25Q128JVEIQ为例进行说明。(其他Flash添加步骤一致) 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下,找到xicom_cfgmem_part_table.csv文件,这个表与vivado hardware manager中的器…...

php代码审计

准备工作 了解CMS的基本信息 该CMS使用的是什么设计模式?该CMS每个目录大概负责的功能(视图、缓存、控制器等)。该CMS处理请求的基本流程是如何走的?以及在系统中使用的全局过滤函数是如何对数据进行处理的? 代码审计方法 敏感函数回溯 …...

接口测试入门,如何划分接口文档

1.首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…...

数据库学习第二天

第7章 系统预定义函数 函数:代表一个独立的可复用的功能。 和Java中的方法有所不同,不同点在于:MySQL中的函数必须有返回值,参数可以有可以没有。 MySQL中函数分为: (1)系统预定义函数&…...

NODE => CORS跨域资源共享学习

1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件,可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use(cors()&#…...

golang rabbitMQ 生产者复用channel以及生产者组分发策略

引用的是rabbitMQ官方示例的库:github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的,所以就要去实现如何复用这些连接,并要做到高效并可靠。预期效果:项目初始化…...

掌握了这项技能的性能测试师,90%都升职加薪了

初入职场的新人该怎么做才能让自己快速成长?在公司一直做着手工测试,如何才能提升自己,避免陷入“只涨年龄不涨经验”的尴尬?做为一名软件测试工程师,我们不得不去面对这些问题,有的人找到了答案&#xff0…...

linux中crontab定时任务导致磁盘满和云监控未报警的的坑

一个后台开发者,兼职运维工作中,配置linux中crontab定时任务,导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是:/var/log 下面是几个…...

vscode中安装python运行调试环境

在运行代码之前,需要到微软商店下载安装python环境,35m,都是自动的。 1、安装python 的extensions插件。 ctrlshiftx 输入 python 后点击 install 按钮。 2、新建文件夹spider文件夹。 3、在新建文件夹spider下新建文件spider.py源代码。…...

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA(service oriented architecture)和微服务的区别1、SOA喜欢重用,微服务喜欢重写2、SOA喜欢水平服务,微…...

内核中的竞态产生的原因和解决方法

产生原因: 由于多进程对临界资源的抢占 根本原因: 1、对于单核处理器而言,内核支持抢占就会出现竞态 2、对于多核处理器而言,是核与核的竞态 3、进程与中断间存在竞态 4、arm开发板不会出现中断与中断间的竞态(目前&am…...

【微服务】Elasticsearch文档索引库操作(二)

🚗Es学习第二站~ 🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.索引库操作 索引库就类似数据库表,mapping映射就类…...

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】:DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】:I-Hung Hsu , Kuan-Hao Huang, Elizabeth Boschee &#xff…...

C++类和对象(下)

✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定,然后把…...

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注,必回关 一、线程池的四种拒绝策略: CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。 一般并发比较小,性能要求不高,不允许失败。 但是,由于…...

Node=>Express中间件分类 学习4

1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use()或app.get()或app.post()绑定到app实力上的中间件,叫做应用级别的中间件 …...

在阿里当外包,是一种什么工作体验?

上周和在阿里做外包的朋友一起吃饭,朋友吃着吃着,就开启了吐槽模式。 他一边喝酒一边说,自己现在做着这份工作,实在看不到前途。 看他状态不佳,问了才知道,是手上的项目太磨人。 他们现在做的项目&#…...

Vue3快速入门【二】

Vue3快速入门一、传值父传子,子传父v-model二、插槽2.1、匿名插槽2.2、具名插槽2.3、插槽作用域2.4、插槽作用域案例2.4.1、初始布局2.4.2、插槽使用2.4.3、点击编辑按钮获取本行数据(插槽作用域的使用)2.4.4、类型书写优化2.4.5、全局接口抽…...

C++-类和对象(上)

类和对象(上)一,构造函数1,概念2,特性二,析构函数1,概念2,特性三,拷贝构造1,概念2,特性四,运算符重载1,概念2,…...

CAPL(vTESTStudio) - DoIP - TCP接收_04

TCP接收 函数介绍 TcpOpen函数...

联合培养博士经历对于国内就业有优势吗?

2023年国家留学基金委(CSC)申请在即,很多在读博士在关心申报的同时,也对联培经历能否有助于国内就业心中存疑,故此知识人网小编重点解答此问题。之前,我们在“CSC联合培养-国内在读博士出国的绝佳选择”一文…...

测试左移之需求质量

测试左移的由来 缺陷的修复成本逐步升高 下面是质量领域司空见惯的一张图,看图说话,容易得出:大部分缺陷都是早期引入的,同时大部分缺陷都是中晚期发现的,而缺陷发现的越晚,其修复成本就越高。因此&#…...

【数据结构初阶】第三节.顺序表详讲

文章目录 前言 一、顺序表的概念 二、顺序表功能接口概览 三、顺序表基本功能的实现 四、四大功能 1、增加数据 1.1 头插法: 1.2 尾插法 1.3 指定下标插入 2、删除数据 2.1 头删 2.2 尾删 2.3 指定下标删除 2.4 删除首次出现的指定元素 3、查找数据…...

淳安网站建设制作/什么推广平台好

今天同事分享的 jvm处理后可能是这样的: 发现多了个this,那么这个this有什么好处呢,其实就是提前将成员变量加载到了局部变量表中,当出现有list这种的遍历时,可以明显提升效率。...

做网站开发要注册/3天引流800个人技巧

1. 学习了关于深搜,二叉树,图论之后发现对于理解清楚递归来说是非常重要的,递归能够帮助我们干很多事情,而且在很多情况下只能使用递归来解决,比如涉及到不确定的情况下往往需要使用到递归,这也叫做深搜&am…...

对网站排名没有太大影响的因素/百度客服怎么联系

以前的几篇文章简单的介绍了一下UI线程和子线程之间的线程通信利器Handler,以及顺便介绍了一下SyncTask和HeadlerThread。这里介绍另一线程通信利器EventBus。 EventBus是一个开源组件。https://github.com/greenrobot/EventBus,通过线程间事件订阅和分发…...

免费视频模板网站/成都seo外包

TechNet 库Windows ServerWindows Server 2008 R2 und Windows Server 2008按类别提供的 Windows Server 内容按类别提供的 Windows Server 2008 R2 内容已安装的 Windows Server 2008 R2 产品帮助Network Policy and Access Services网络策略服务器PEAP 和 EAP 的证书要求为 P…...

ppt做视频的模板下载网站/我想做网络推广找谁

--allmatches 删除所有匹配指定名称的程序包--nodeps 忽略软件依赖关系--test 测试卸载过程--noscripts 不执行脚本 相关脚本的解释参考RPM自带脚本转载于:https://blog.51cto.com/yueyue207/2087393...

网站建设服务费增值税多少/关键词优化怎么写

最近在写电商前台页面时,遇到一个路径转义的问题,虽然数据一直都是正常展示的,但是控制台会报错: uncaught URIError:URI malformed at decodeURIComponent 功能介绍: 用户输入内容后,点击搜现货&#xff…...