当前位置: 首页 > 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…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...