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

【网络篇】UDP协议的封装分用全过程

在这里插入图片描述

大家好呀
我是浪前

今天讲解的是网络篇的第二章:UDP协议的封装分用

我们的协议最开始是OSI七层网络协议

这个OSI 七层网络协议 是计算机的大佬写的,但是这个协议一共有七层,太多了太麻烦了,于是我们就把这个七层网络协议就简化为五层了

UDP协议的封装分用全过程

  • TCP/IP 五层网络协议
    • 网络设备所在分层
    • 封装和分用
    • 封装的全过程:
      • 发送方:
      • 1: 发送方A的应用层(应用程序) QQ:
      • 2: 发送方A的传输层:
      • 3: 发送方A的网络层:
      • 4: 发送方A的数据链路层:
      • 5: 发送方A的物理层:硬件设备:
    • 分用的全过程:
      • 1: 接收方B的物理层:
      • 2: 接收方B的数据链路层:
      • 3: 接收方B的网络层(IP协议)
      • 4:接收方B的 传输层(UDP协议)
      • 5:接收方B的 应用层 QQ应用程序:
      • 交换机A的工作:

TCP/IP 五层网络协议

举一个例子:

我在淘宝店铺买了一个刷子:

商家发货就要去关注我的收件人地址和电话,发件人地址和电话(这个就是传输层要去关注包裹传输的起点和终点)

商家要把这个包裹交给快递公司:

这个TCP/IP协议一共有五层:

应用层传输的数据在应用程序中如何使用

程序在拿到数据之后,要用数据去干什么,解决什么问题(程序员最关注的一层)**
负责我买到这个刷子是用来干什么的?
刷床?刷沙发?打小孩?

传输层关注的是通信的起点和终点

负责关注网络数据包的起点和终点(从哪里来到哪里去),是端到端的传输

负责关注通信的起点和终点,关注网路数据包的起点和终点是端到端的传输

网络层关注的是通信中的路径规划

负责关注起点到终点之间要走哪一条路(路径规划)
确定传输的路线: 上海 - 南京 - 无锡 - 西安
规划出哪一条路径最好?
考虑传输效率?传输成本?传输时间最短?传输过程最方便?

网络层关注的是通信过程中的路径规划,

数据链路层负责两个相邻的节点之间的传输和通信细节,即数据传输情况

上海到南京 是用飞机空运来运输
南京到无锡市用铁路运输
无锡到西安使用大货车进行运输

物理层网络通信过程中的硬件设备,基础设施

通信过程中的物理运输 公路-铁路-航线

为什么要写四层:
因为不算物理层就是四层,为什么?
因为物理层是纯硬件的

说是五层,但是下面这四层都是在操作系统内核,硬件,驱动程序中已经实现好了(计算机内置了)
我们作为程序员在网络编程过程中能够影响到的也就只有应用层了

应用层对应到应用程序,也就是程序员写的代码软件,需要手动实现

传输层和网络层都是操作系统内核,都是在操作系统的内核中实现的,这两层都是现成的,不需要手动实现

数据链路层和物理层是驱动程序+硬件来实现的
硬件厂商提供了硬件,都会配上一个驱动程序
有了这个驱动程序,系统才可以很好地操作这个硬件

网络设备所在分层

对于一台主机,

它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;路由器工作在网络层

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;交换机工作在数据链路层

对于集线器,它只实现了物理层

上面是一个经典的笔试题。

上述的路由器和交换机指的是经典的路由器和交换机

封装和分用

封装和分用描述了网络通信过程中基本的数据传输流程

封装和分用是网络传输数据过程中,最核心的流程

封装的全过程:

例子如下所示:

A 通过QQ给B发送了一个hello:

在这里插入图片描述

这个操作会出现什么流程?

发送方:

1: 发送方A的应用层(应用程序) QQ:

QQ从消息输入框中获取到用户A输入的hello,hello是一个字符串
QQ就要把这个字符串构成一个应用层的数据包

QQ这样的程序内部就设置了一个应用层的协议,应用数据包就是按照这个应用层协议约定的格式来构造的

这个格式就是一个字符串的拼接
这个应用层协议往往都是实现这个程序的人自己定义的,其他人都没有权限修改

但是我们是可以自己约定的:
比如:
我们约定的应用层协议的格式如下:

发送方QQ号;接收方QQ号;发送时间;消息正文
12344;34556;2024-1-1 12:00:00;hello

上述就构成了一个简单的应用层数据包

应用程序就会调用系统提供的API把这个应用层数据包交给传输层

2: 发送方A的传输层:

会把上述的应用层数据包作为一个整体再构造成为一个传输层的数据包
这个传输层涉及到的协议最重要的就是这个TCP和UDP协议

此处我们假定是使用UDP协议来进行通信,此时就会构造一个UDP的数据包
这个UDP数据包一共包含两个部分:

  1. 报头(header)
  2. 载荷(payload)

载荷里面的东西就是应用层数据包
如下图所示:

![[UDP结构01.png]]

形如上述,添加报头的过程就是==封装==
其实就是拼接字符串
只不过拼接的是报头,具有一定的结构

例子:
商家发货一件衣服,不能够直接发,一般都是要先进行包装,使用塑料袋子进行包装

包装的作用是什么?
给快递套上包装,既能够起到保护作用,又能够用来贴标签
标签上就可以写一些用来发送快递的关键信息

上述的封装的过程就是这个衣服被包装的过程

封装的作用是什么?
我们这里的UDP报头虽然不能够起到保护的作用,但是可以起到“贴标签”类似的效果
就能够承载一些关键的用来转发数据的信息

**对于UDP报头来说,UDP报头是一个二进制数据,承载的最重要的信息就是源端口和目的端口,这两个端口就是被记载在UDP报头中

当我们拼接好一个传输层的数据包之后呢,就要把这个数据包进一步交给下层,网络层继续进行封装了

交给下层指的是下层协议提供一组API(函数),上层调用这个API(函数),并且把刚才构造好的数据 通过参数传过去,下层协议就可以来处理这个数据了)

源端口和目的端口是在传输层
源IP和目的IP是在网络层

传输层的数据打包好了之后,数据会继续被交给网络层:

3: 发送方A的网络层:

网络层涉及到的最核心的协议就是IP协议

在网络层包含很多的属性,最重要的属性就是源IP和目的IP

网络层的IP协议把刚才传输层的UDP数据包作为一个整体,把这个整体作为IP协议的载荷,然后拼上IP协议的报头,构造成为一个数据包:
内容如下:

  1. IP协议的报头
  2. IP协议的载荷
    如图所示:

在这里插入图片描述

在这个IP协议报头中:
也会包含一些辅助转发的关键信息,此处最关键的信息就是源IP和目的IP
此时构造完成一个完整的IP数据包之后,IP协议继续调用数据链路层的API,把数据再交给数据链路层这里的协议进行处理

网络层数据打包好了之后,会继续把数据交给数据链路层来进一步打包

4: 发送方A的数据链路层:

数据链路层涉及到的核心协议叫做以太网

此处,我们使用“以太”来作为网络传输的介质

以太网就是日常见到的有线网络

我们日常使用的网线也是“以太网线”,日常使用的网口也是“以太网口”

日常使用的交换机也是“以太交换机”

**以太网数据帧:

以IP数据包作为一个整体,在这个IP数据包的前面加上一个以太网帧头,后面加上一个帧尾
中间是载荷

如下图所示:
在这里插入图片描述

以太网帧头中最重要的信息是源mac地址,目的mac地址

这样的数据封装好了之后还要继续向下走,交给物理层

5: 发送方A的物理层:硬件设备:

**把上述的这样的以太网数据帧这样的二进制结构(一串 0 1 0 1) 这样的数据:
将这样的数据转化为光信号(光纤)/电信号(网线)/电磁波(无限wifi)
然后进行发送

此时经过上面的一系列操作,从上层协议到下层协议,层层给数据包添加报头,终于是把这个hello这个数据给发送出去了,(刚出家门)
以上就是封装的过程

数据发送出去之后,就会经过一些列的交换机和路由器进行转发,A和B一般来说不是直接网线连接的,中间还要经过很多的交换机/路由器设备进行转发
这个中间过程我们先不谈,接下来先说明清楚
当数据到达接收方B之后,接收方B要对数据进行一个“分用”的过程

分用的全过程:

**下面是接收方B发生的事情:
我们先来假定这个数据包已经到达B的网卡了,看这个B会如何处理这个数据包

接收方B的这个处理数据包的过程就是 "分用"的过程

1: 接收方B的物理层:

物理层收到的数据 是光信号/电信号/电磁波,物理层就会把这些物理信号转换为数字信号(二进制的 0 1 0 1 )

在转换之后会得到一个以太网的数据帧,进一步会把这个数据帧交给数据链路层处理

2: 接收方B的数据链路层:

通过以太网协议,针对以太网数据进行解析,会解析出以太网帧头和以太网帧尾,以及中间的载荷

以太网:发送方和接收方得使用一样的协议才行
我们这里进行解析: 把以太网帧头去掉,以太网帧尾去掉

如图所示:
在这里插入图片描述

按照以太网数据帧的格式来解析,取出其中的载荷,之后再交给上层协议:

3: 接收方B的网络层(IP协议)

网络层是按照IP协议的格式来解析,取出其中的载荷,再交给上层协议
此时去掉IP报头之后:

在这里插入图片描述

4:接收方B的 传输层(UDP协议)

按照UDP协议格式来解析,取出其中的载荷,再交给上层协议:
此时就去掉UDP报头,取出剩下的载荷,交给上层协议:
在这里插入图片描述

5:接收方B的 应用层 QQ应用程序:

此时应用层拿到数据之后,在根据端口号来判断把数据交给哪个应用程序

QQ这个程序就要解析这个数据,这个解析过程也是按照前面程序员自定义的应用层协议展开的

此时按照QQ应用程序内部的应用层协议格式来解析数据~
如何解析的?
在这里插入图片描述

就是把上图中的数据按照分号进行切割,就得到了这里的QQ号信息,发送时间,发送消息的正文

此时QQ程序拿到这些数据之后,就会弹出一些提示,并且把消息/消息的发送者/发送时间 都显示到聊天窗口上
以上就是分用的过程

分用的过程就是封装的逆向过程

数据报并不是发送方一发送出去就立马到了接收方那里,而是在网络中间还会经历一个转发的过程
通过路由器/交换机来进行转发,

在真实情况下,并不是一出门就直接到了,而是两个主机一般都不是直接通过网线直连的,而是通过一系列的交换机或者路由器来进行数据转发的

在这里插入图片描述

但是实际上即使是经过交换机或者路由器,上述的封装分用过程,也还是同样适用的
只不过,封装分用的程度不一定是到应用层(不一定是五层都有,可能是只涉及到了几层)

比如:
对于经典交换机来说,就只需要封装分用到数据链路层即可
对于经典的路由器来说,就只是需要封装分用到网络层即可

如果数据报在中间的转发过程中,转发到了路由器上,那么也要经历一个封装分用的过程,只不过是封装分用到网络层:
当路由器拿到数据之后,路由器会将数据解析到网络层,拿到IP地址之后,决定下一步如何传输,
下一步传输的时候,又会重新经过网络层,数据链路层,和物理层的封装才能从路由器中传输出去

*如果数据报被转发到了交换机上,那么就会在交换机上进行一个封装分用到数据链路层的过程,

所以封装分用这个过程在网络通信中是贯穿始终的,数据经历的每一个节点都要进行封装分用的过程


交换机A的工作:

下述是A的光电信号;

在这里插入图片描述

交换机A的物理层就会把从A发出的光电信号转换成以太网数据帧二进制数据交给数据链路层:

而在交换机上面也是实现了数据链路层的:

此时交换机A的数据链路层就会对上述的数据进行解析:
这个解析过程,一方面要去除载荷部分,另一方面要解析到帧头的关键信息

  1. 去除载荷
  2. 解析帧头

根据帧头中的信息,决定下一步把数据往哪里进行发送,根据这个情况再进一步地构造出新的以太网数据帧~

新的数据帧如下图所示:
在这里插入图片描述

把这个新的数据继续通过物理层发送出去

这里的以太网帧头,对于交换机来说,已经够用了,就不需要再进行解析了

刚刚是交换机,现在是路由器:路由器的情况更加复杂一些
要封装分用到网络层

当路由器拿到A的光电信号之后:
A的光电信号如下:
在这里插入图片描述

先是物理层拿到光电信号,转成二进制数据交给数据链路层:

数据链路层对上述的数据进行解析,去掉以太网帧头,拿出载荷,交给IP协议
如下图所示:
在这里插入图片描述

IP协议又会进一步对这个数据进行解析,解析IP报头,再一次取出载荷,
路由器为什么要解析IP报头?
因为路由器需要通过IP报头中的目的IP来知道具体接下来如何转发

在这里插入图片描述

取出的数据 会被IP协议重新进行封装操作:
即刚刚取出的数据会被重新加上(封装上)IP报头

如下图所示:
在这里插入图片描述

数据被重新封装上IP报头之后,会被交给数据链路层,继续加上帧头和帧尾

如下图所示:
在这里插入图片描述

此时我们又构成了一个数据链路帧,此时这个数据再交给物理层,去转成光电信号,继续传输
此时我们的路由器只是封装分用到网络层,说明路由器并不在乎UDP数据和应用层数据

对于一台主机,

它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
路由器是工作在网络层的

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层:
交换机是工作在数据链路层的

对于集线器,它只实现了物理层

上述的路由器和交换机指的是经典的路由器和交换机

事实上的路由器和交换机的功能更加复杂强大

很多的交换机也具有一些路由器的功能,也可以工作在网络层

很多的路由器也具有一些交换机的功能,也可以工作在数据链路层

甚至有些交换机路由器还可以工作在应用层

如果交换机要截取/解析你所传输的数据,那么就会封装分用到应用层,把hello拎出来看看

在这里插入图片描述

在上述图片中的每一个节点都会涉及到封装分用的过程

所以网络传输数据不是一个简单的事情,背后有大量的工作 ,只不过这些工作都是硬件&驱动
&操作系统 帮我们完成了

注意:
我们在描述一个网络上传输的数据“单位”可能会用到几个术语:

包(packet): 网络数据包
使用场景: IP数据包


段(segment):网络数据段
使用场景: TCP数据段


报(datagram) : 网络数据段
使用场景: UDP数据段


帧(frame) : 网络数据帧
使用场景: 以太网数据帧


上述的几个术语都是网络传输的基本单位。
我们今天就学习到这里,下次见~
在这里插入图片描述

相关文章:

【网络篇】UDP协议的封装分用全过程

大家好呀 我是浪前 今天讲解的是网络篇的第二章:UDP协议的封装分用 我们的协议最开始是OSI七层网络协议 这个OSI 七层网络协议 是计算机的大佬写的,但是这个协议一共有七层,太多了太麻烦了,于是我们就把这个七层网络协议就简化为…...

数据结构——布隆过滤器

目录 一、什么是布隆过滤器? 二、布隆过滤器的原理 三、布隆过滤器的特点 一、什么是布隆过滤器? 布隆过滤器是一种空间效率高、适合快速检索的数据结构,用于判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来…...

pytorch实现逻辑回归

pytorch实现逻辑回归 数据准备,参数初始化前向计算计算损失计算梯度更新参数 在官网上找到线性函数的公式表达式 import torch from sklearn.datasets import load_iris # from sklearn.model_selection import train_test_split #train_test_split是sklearn中的…...

03-Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践

Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践 一、网关技术演进与 Spring Cloud Gateway 定位 1. 微服务网关的核心价值 作为微服务架构的流量入口,网关承担着 路由转发、流量治理、安全防护 三大核心职能: 统一接入&#…...

Spark-sql编程

创建子模块并添加依赖‌ 在IDEA中创建一个名为Spark-SQL的子模块。 在该子模块的pom.xml文件中添加Spark-SQL的依赖,具体依赖为org.apache.spark:spark-sql_2.12:3.0.0。 编写Spark-SQL测试代码‌ 定义一个User case class,用于表示用户信息&#xf…...

K8s 生产落地

深夜收到报警短信,集群突然宕机——这可能是每个运维人最不愿面对的噩梦。生产级Kubernetes集群的部署,远不是几条命令就能搞定的事情。本文将结合真实踩坑经验,从零拆解一个高可用、高安全、可自愈的Kubernetes生产环境该如何落地。 一、架…...

SnailJob:分布式环境设计的任务调度与重试平台!

背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…...

通过WebRTC源码入门OpenGL ES

文章目录 基本概念Vertex和Fragment着色器程序 准备工作getUniformLocation/getAttribLocationglVertexAttribPointer 开始绘制Demo实现 OpenGL SE是一套适用于嵌入式设备的图形API,本文主要介绍如何通过OpenGL SE在Android设备上进行图形绘制,同时我会通…...

面试题:请描述一下你在项目中是如何进行性能优化的?针对哪些方面进行了优化,采取了哪些具体的措施?

目录 1.算法和数据结构优化 2.内存管理优化 3.并发编程优化 4.数据库优化 5.网络优化 6.持续优化与监控 7.总结 现在是企业招聘和求职者的金三银四,每每问到这个主观性问题的时候,都不知道怎么回答,下面就我知道的一些总结一下&#x…...

从零实现富文本编辑器#2-基于MVC模式的编辑器架构设计

在先前的规划中我们是需要实现MVC架构的编辑器,将应用程序分为控制器、模型、视图三个核心组件,通过控制器执行命令时会修改当前的数据模型,进而表现到视图的渲染上。简单来说就是构建一个描述文档结构与内容的数据模型,并且使用自…...

SAP S4HANA embedded analytics

SAP S4HANA embedded analytics...

linux多线(进)程编程——(7)消息队列

前言 现在修真界大家的沟通手段已经越来越丰富了,有了匿名管道,命名管道,共享内存等多种方式。但是随着深入使用人们逐渐发现了这些传音术的局限性。 匿名管道:只能在有血缘关系的修真者(进程)间使用&…...

STM32 HAL库 实现485通信

一、引言 在工业自动化、智能家居等众多领域中,RS - 485 通信因其长距离、高抗干扰能力等优点被广泛应用。STM32F407 是一款性能强大的微控制器,其丰富的外设资源为实现 RS - 485 通信提供了良好的硬件基础。本文将详细介绍基于 STM32F407 HAL 库实现 R…...

用 Vue 3 + OpenAI API 实现一个智能对话助手(支持上下文、多角色)

文章目录 一、项目背景与功能介绍二、技术选型与准备工作环境准备 三、智能对话助手的实现第一节:封装 OpenAI 接口请求第二节:构建消息上下文结构第三节:构建对话 UI 组件第四节:滚动自动到底部(可选优化)…...

ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别

文章目录 省流结论机器配置不同量化模型占用显存1. 创建虚拟环境2. 创建测试jsonl文件3. 新建测试脚本3. 默认加载方式,单卡运行模型3.1 7b模型输出213 tok/s3.1 32b模型输出81 tok/s3.1 70b模型输出43tok/s 4. 使用负载均衡,多卡运行4.1 7b模型输出217t…...

vue3 setup vite 配置跨域了proxy,部署正式环境的替换

在开发环境中使用 Vite 的 proxy 配置来解决跨域问题是一种常见的做法。然而,在部署到正式环境时,通常需要对接口地址进行调整,具体是否需要更改接口名称取决于你的部署环境和后端服务的配置。以下是几种常见的情况和建议: 1. 正…...

目标检测:YOLOv11(Ultralytics)环境配置

1、前言 YOLO11是Ultralytics公司YOLO系列实时目标检测器的最新迭代版本,它以尖端的准确性、速度和效率重新定义了可能实现的性能。在之前YOLO版本取得的显著进步基础上,YOLO11在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务中…...

如何高效压缩GIF动图?

GIF动图因其兼容性强、易于传播的特点,成为网络交流的热门选择。然而,过大的文件体积常常导致加载缓慢、分享困难等问题。本文将为您详细介绍几种实用的GIF压缩技巧,帮助您在保持画面质量的同时显著减小文件大小。 压缩方法 1. 在线压缩工具…...

视频融合平台EasyCVR可视化AI+视频管理系统,打造轧钢厂智慧安全管理体系

一、背景分析 在轧钢厂,打包机负责线材打包,操作人员需频繁进入内部添加护垫、整理包装、检修调试等。例如,每班产线超过300件,12小时内人员进出打包机区域超过300次。若员工安全意识薄弱、违规操作,未落实安全措施就…...

通过命令行操作把 本地IDE 项目上传到 GitHub(小白快速版)

通过命令行操作把 本地IDE 项目上传到 GitHub(小白版) 你是不是在用 本地IDE 做项目,但不知道怎么把自己的代码上传到 GitHub?今天我们用最简单的命令行方式(不用 SSH、不用复杂配置)教你一步一步把本地项…...

【c语言基础学习】qsort快速排序函数介绍与使用

在C语言中&#xff0c;qsort 函数用于对数组进行快速排序。以下是详细的使用方法及示例&#xff1a; 一、函数原型 #include <stdlib.h>void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );二、参数说明 参数说明base指向…...

​​​​​​​今日github AI科技工具汇总(20250415更新)

以下是2025年4月15日GitHub上值得关注的AI科技工具汇总及趋势分析,结合最新开源动态与开发者社区热点整理: 一、AI编程工具重大更新 GitHub Copilot Agent Mode 全量发布 核心功能:在VS Code中启用后,可自主完成多文件代码重构、测试驱动开发(TDD)及自修复编译错误,支持…...

程序化广告行业(88/89):广告创意审核的法律红线与平台规则

程序化广告行业&#xff08;88/89&#xff09;&#xff1a;广告创意审核的法律红线与平台规则 在程序化广告的广阔领域中&#xff0c;不断学习和掌握行业规范是我们稳步前行的基石。一直以来&#xff0c;我都期望与大家携手共进&#xff0c;深入探索这个行业的奥秘。今天&…...

前端VUE框架理论与应用(4)

一、计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如: <div id="example">{{ message.split().reverse().join() }}</div> 在这个地方,模板不再是简单的声明式逻辑。你…...

【经验分享】基于Calcite+MyBatis实现多数据库SQL自动适配:从原理到生产实践

基于CalciteMyBatis实现多数据库SQL自动适配&#xff1a;从原理到生产实践 一、引言&#xff1a;多数据库适配的行业痛点 在当今企业IT环境中&#xff0c;数据库异构性已成为常态。根据DB-Engines最新调研&#xff0c;超过78%的企业同时使用两种以上数据库系统。这种多样性带…...

通信算法之265: 无人机系统中的C2链路

在无人机系统设计中&#xff0c;我们经常听到C2链路这个名词&#xff0c;到底什么是C2链路呢&#xff1f;为什么说C2链路是无人机系统中非常重要的环节。 转载&#xff1a; 无人机技术是各种科技技术水平综合发展的结果&#xff0c;包括空气动力&#xff0c;机械设计&#xf…...

浙江大学:DeepSeek如何引领智慧医疗的革新之路?|48页PPT下载方法

导 读INTRODUCTION 随着人工智能技术的飞速发展&#xff0c;DeepSeek等大模型正在引领医疗行业进入一个全新的智慧医疗时代。这些先进的技术不仅正在改变医疗服务的提供方式&#xff0c;还在提高医疗质量和效率方面展现出巨大潜力。 想象一下&#xff0c;当你走进医院&#xff…...

Codeforces Round 1017 (Div. 4)

Codeforces Round 1017 (Div. 4) A. Trippi Troppi AC code: void solve() { string a, b, c; cin >> a >> b >> c;cout << a[0] << b[0] << c[0] << endl; } B. Bobritto Bandito 思路&#xff1a; 倒推模拟即可&#xff0c…...

bash的特性-bash中的引号

在Linux或Unix系统中&#xff0c;Bash&#xff08;Bourne Again SHell&#xff09;作为最常用的命令行解释器之一&#xff0c;提供了强大的功能来处理各种任务。正确使用引号是掌握Bash脚本编写的基础技能之一&#xff0c;它决定了如何解析字符串、变量替换以及特殊字符的行为。…...

ubuntu上SSH防止暴力破解帐号密码

在知道设备ip的情况下&#xff0c;使用 Fail2Ban防止暴力破解 sudo apt install fail2ban 配置 SSH 防护规则 sudo gedit /etc/fail2ban/jail.local jail.local内容如下&#xff1a; [sshd] enabled true port ssh logpath /var/log/auth.log # Ubuntu/Debian maxret…...

【Bluedroid】A2DP Sink播放流程源码分析(二)

接上一篇继续分析&#xff1a;【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端&#xff08;Sink&#xff09;流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数&#xff0c;负责处理接收端的…...

【Code】《代码整洁之道》笔记-Chapter16-重构SerialDate

第16章 重构SerialDate 如果你找到JCommon类库&#xff0c;深入该类库&#xff0c;其中有个名为org.jfree.date的程序包。在该程序包中&#xff0c;有个名为SerialDate的类&#xff0c;我们即将剖析这个类。 SerialDate的作者是David Gilbert。David显然是一位经验丰富、能力…...

redis 内存中放哪些数据?

在 Java 开发中,Redis 作为高性能内存数据库,通常用于存储高频访问、低延迟要求、短期有效或需要原子操作的数据。以下是 Redis 内存中常见的数据类型及对应的使用场景,适合面试回答: 1. 缓存数据(高频访问,降低数据库压力) 用户会话(Session):存储用户登录状态、临时…...

【Python使用】嘿马云课堂web完整实战项目第4篇:封装异常处理,封装JSON返回值【附代码文档】

教程总体简介&#xff1a;项目概述 项目背景 项目的功能构架 项目的技术架构 CMS 什么是CMS CMS需求分析与工程搭建 静态门户工程搭建 SSI服务端包含技术 页面预览开发 4 添加“页面预览”链接 页面发布 需求分析 技术方案 测试 环境搭建 数据字典 服务端 前端 数据模型 页面原…...

「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式

深入理解 Update-Enter-Exit 模式 一、数据绑定三态&#xff1a;Update、Enter、Exit三种状态的直观理解 二、基础概念1. Update 选区 - 处理已有元素2. Enter 选区 - 处理新增数据3. Exit 选区 - 处理多余元素 三、完整工作流程四、三种状态的底层原理数据绑定过程解析键函数&…...

中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)

1、整体架构设计 ClickHouse 采用MPP&#xff08;大规模并行处理&#xff09;架构&#xff0c;支持分布式计算和存储&#xff0c;其核心设计目标是高性能列式分析。 &#xff08;1&#xff09;、存储层 列式存储&#xff1a; 数据按列存储&#xff08;而非传统行式存储&#…...

AgentGPT 在浏览器中组装、配置和部署自主 AI 代理 入门介绍

AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...

【开源项目】Excel手撕AI算法深入理解(三):Backpropagation、mamba、RNN

项目源码地址&#xff1a;https://github.com/ImagineAILab/ai-by-hand-excel.git 一、Backpropagation 1. 反向传播的本质 反向传播是通过链式法则计算损失函数对网络参数的梯度的高效算法&#xff0c;目的是用梯度下降优化参数。其核心思想是&#xff1a; 前向传播&#xf…...

uniapp的通用页面及组件基本封装

1.基本布局页面 适用于自定义Navbar头部 <template><view class"bar" :style"{height : systemInfo.statusBarHeight px, background: param.barBgColor }"></view><view class"headBox" :style"{ height: param.h…...

Ubuntu和Debian 操作系统的同与异

首先需要说明&#xff1a;Ubuntu 是基于 Debian 操作系统开发的。它们之间的关系如下 起源与发展&#xff1a;Debian 是一个社区驱动的开源 Linux 发行版&#xff0c;始于 1993 年&#xff0c;是最早的 Linux 发行版之一&#xff0c;以其稳定性和自由软件政策著称。Ubuntu 是基…...

【android bluetooth 协议分析 21】【ble 介绍 1】【什么是RPA】

通俗易懂地讲解一下 BLE&#xff08;低功耗蓝牙&#xff09;中的 Resolvable Private Address&#xff08;RPA&#xff0c;可解析私有地址&#xff09;。 1. 一句话理解 RPA 是一种“临时的、隐私保护的蓝牙设备地址”&#xff0c;别人无法随便追踪你&#xff0c;但“授权的设…...

狂神SQL学习笔记九:MyISAM 和 lnnoDB 区别

show create database school –查看创建数据库的语句 show create table student – 查看student数据表的定义语句 desc student –显示表的结构 MYISAMINNODB事务支持不支持支持数据行锁定不支持支持行锁定外键不支持支持全文索引支持不支持表空间的大小较小较大&#x…...

深度学习--神经网络的构造

在当今数字化时代&#xff0c;深度学习已然成为人工智能领域中最为耀眼的明星。而神经网络作为深度学习的核心架构&#xff0c;其构造方式决定了模型的性能与应用效果。本文将深入探讨深度学习神经网络的构造&#xff0c;带您领略这一前沿技术的奥秘。​ 一、神经网络基础概念…...

Jenkins 代理自动化-dotnet程序

两种方式 容器部署 本地部署 容器部署 可自动实现&#xff0c;服务器重启&#xff0c;容器自动运行 主要将dockerfile 写好 本地部署 1.服务器重启自动运行代理 参考下面的链接&#xff0c;只是把程序换成 java程序&#xff0c;提前确认好需要的jdk版本 Ubuntu20.04 设置开机…...

【区块链+ 人才服务】“CERX Network”——基于 FISCO BCOS 的研学资源交换网络 | FISCO BCOS 应用案例

CERX Network &#xff08;Consortium-based Education Resource Exchanging Network&#xff09; 是定位于面向高校科学研究与教学 的分布式研学资产交换网络&#xff0c; 构建一个用于数据、 算法模型、 论文和课程的研学资源价值流转平台。项目以 FISCO BCOS 联盟链为底层平…...

中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)

ClickHouse语言类似Mysql&#xff0c;如果熟悉Mysql&#xff0c;那么学习ClickHouse的语言还是比较容易上手的。 1、建表语法&#xff08;CREATE TABLE&#xff09; &#xff08;1&#xff09;、表引擎&#xff08;Engine&#xff09; MySQL&#xff1a; 默认使用 InnoDB 引…...

[MSPM0开发]MSPM0G3507番外一:关于使用外部高速晶振HFXT后程序可能不运行的问题

一、问题描述 如下图所示&#xff0c;MSPM0G3507时钟树配置为使用外部HFXT&#xff08;外部高速晶振&#xff09;作为HSCLK时钟源。 配置结果MCLK 40MHz。 另外配置PB22为输出模式&#xff0c;控制外部LED亮灭。 在main.c中主要代码如下&#xff1a; 主要完成延时并翻转LED控…...

2025年计算机领域重大技术突破与行业动态综述

——前沿技术重塑未来&#xff0c;开发者如何把握机遇&#xff1f; 2025年第一季度&#xff0c;全球计算机领域迎来多项里程碑式进展&#xff0c;从量子计算到人工智能&#xff0c;从芯片设计到网络安全&#xff0c;技术革新与产业融合持续加速。本文梳理近三个月内最具影响力…...

我的机器学习之路(初稿)

文章目录 一、机器学习定义二、核心三要素三、算法类型详解1. 监督学习&#xff08;带标签数据&#xff09;2. 无监督学习&#xff08;无标签数据&#xff09;3. 强化学习&#xff08;决策优化&#xff09;(我之后主攻的方向) 四、典型应用场景五、学习路线图六、常见误区警示七…...

交易模式革新:Eagle Trader APP上线,助力自营交易考试效率提升

近年来&#xff0c;金融行业随着投资者需求的日益多样化&#xff0c;衍生出了众多不同的交易方式。例如&#xff0c;为了帮助新手小白建立交易基础&#xff0c;诞生了各类跟单社区&#xff1b;而与此同时&#xff0c;一种备受瞩目的交易方式 —— 自营交易模式&#xff0c;正吸…...