【Hello Network】网络基础1

news2025/2/28 3:14:00

作者:@小萌新
专栏:@网络
作者简介:大二学生 希望能和大家一起进步
本篇博客简介:简单介绍网络的基础概念

网络基础1

  • 网络基础
    • 网络的起源
    • 网络在哪里
    • 认识协议
  • 网络协议
    • 协议分层
    • OSI七层模型
    • TCP/IP协议
  • 网络传输流程
    • 局域网的两台主机通信
  • 两台机器跨网络通信
    • ip地址
    • mac地址

网络基础

网络的起源

在计算机发展的早期是没有网络的 计算机是作为一个单独的计算工具来使用

可是慢慢人们发现 如果只是单纯的这样使用计算机 那么数据在各个计算机之间的流转就会十分的效率低下

在这里插入图片描述

这时候就有人想办法 将这些计算机连接起来 当某些业务需要互联的时候人们就将这些数据上传到一个共享服务器 来实现数据的共享

在这里插入图片描述

再后来随着网络的发展 连接进入网络的机器越来越多 于是就出现了局域网的概念

在局域网中有一种设备叫做交换机 交换机主要完成局域网内数据的转发工作 也就是在局域网内将数据从一台主机转发给另一台主机

各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作
在这里插入图片描述

随着接入的局域网不断的增多便形成了广域网

但是实际上广域网是一个相对的概念 我们可以将广域网理解为一个较大的局域网

在这里插入图片描述
关于城域网和校园网的概念 我们也可以将他们理解为一个较大的局域网

网络在哪里

我们在前面讲解操作系统的时候我们一般将操作系统分为下面这几层
在这里插入图片描述

我们在之前讲过一切皆文件的概念 事实上这个概念也可以让我们来理解网络为什么可以分层

拿STL的例子来说 我们编写了一个程序 调用了STL库

在这里插入图片描述
我们在写自己的代码的时候并不需要去关心STL库是如何实现的 这也就说明了软件是可以分层的

同样的 网络也是软件 所以说软件也是可以分层的

在这里插入图片描述

其中

  • 应用层是位于用户层的。 这部分代码是由网络协议的开发人员来编写的,比如HTTP协议、HTTPS协议以及SSH协议等。
  • 传输层和网络层是位于操作系统层的。 其中传输层最经典的协议叫做TCP协议,网络层最经典的协议叫做IP协议,这就是我们平常所说的TCP/IP协议。
  • 数据链路层是位于驱动层的。 其负责真正的数据传输。

所以说我们现在可以回答网络在哪里

这里的网络指的是网络协议栈 它是一个软件 贯穿体系结构的tcp/ip 属于操作系统的一部分

认识协议

协议的本质就是约定

在大概十几年前的时候电话费是非常贵的 此时一个学生去上大学 他因为负担不起高昂的电话费便和家里做出了如下的约定

该学生每晚九点会往家里打一个电话

  • 如果电话响一声挂断 说明该学生目前很平安 家长无需担心
  • 如果电话响两声挂断 说明该学生缺钱了 需要家长打一点钱过来
  • 如果电话响三声挂断 说明该学生有话想跟家长说 需要家长立刻回电

上面我举的这个例子就是一个协议

另外我们应该都知道 计算机之间的传输媒介是光信号和电信号 通过“频率”和“强弱”来表示0和1这样的信息 因此要想传递各种不同的信息 就需要约定好双方的数据格式 这就是一种纯硬件的一种约定方案

协议本身是需要标准的

比如说你现在在家里 跟你的家人说你饿了想要吃饭 那么这个时候你的家人就会按照以往约定俗成的协议来给你做饭 但是如果你说 im hungry 你表达的意思也是自己肚子饿了 但是你的家人却不能理解这是什么意思 导致你还是饿肚子 这就是没有标准协议所造成的坏影响

协议应该由谁来制定

在当前这个互联网时代 计算机生产商有很多 计算机操作系统也有很多 计算机网络硬件设备更是多种多样 那我们是如何让这些不同厂商之间生产的计算机能够相互顺畅的通信的呢 这时候就需要有人站出来 约定一个共同的标准 并且让大家都来遵守这个标准 这就是网络协议

而那个站出来的人一定是该领域当中的佼佼者 因为网络协议的定制本质就是规则的定制 你要站出来制定规则那么一定要同行业的其他人都认可你 比如5G标准的定义 华为就是那个站出来的人 华为在通信领域已经具备很强的通信能力了 在这个行业里它就是所谓的佼佼者

正所谓“一流的企业做标准 二流的企业做产品 三流的企业做技术” 但是标准的定制有一部分是公益性、开源性的 它制定标准的目的是为了让我们的世界变得更好 而标准的定制还有一部分是具有一定盈利性质的 当你需要使用这项技术时就会收取部分专利费 此时就能将曾经做的技术投入进行变现

网络协议

协议分层

为什么协议要分层

我们之所以要设计层状结构目的就是为了将层与层之间进行解耦

拿打电话来说 其实打电话也是一种层状结构

它包括语言层和通信设备层
在这里插入图片描述

在语言层上我们通过汉语来沟通 在通信设备层上我们通过座机这个设备来沟通

随着科技的发展 我们可能都不会使用座机了 而是使用手机 这就是我们的通信设备层改变了

又或者说我们移民到其他国家开始说英语 这个时候就是语言层改变了

总之 分层之后替换某一层的协议之后打电话这个行为并不会受到影响

各层直接通信

在上面的例子中 虽然打电话时我们并不是直接进行沟通的 但是我们可以认为自己是在直接进行沟通

并且这两台电话也不是直接在进行沟通的 数据经过电话后 还需要各种基站 各种电信网络来进行数据转发 但是这两台电话依旧可以认为是直接在和对方电话进行通信的

因此对于网络协议我们需要有一个基本的认识:关于通信 同层协议可以认为自己在和对方层直接进行通信 从而达到简化对于网络协议栈的理解

也就是说 在网络协议栈中我们可以认为通信双方的应用层之间直接在进行通信 也可以认为通信双方的传输层之间直接在进行通信 对于网络层和数据链路层也同样如此

在这里插入图片描述

OSI七层模型

我们最开始制定的协议叫做OSI协议 这个协议一共分为七层

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范。
  • OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,比如路由器,交换机。
  • OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,比如手机和电视之间数据的传输。
  • OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
  • 但是,OSI七层模型既复杂又不实用,所以后来在具体实现的时候就对其进行了调整,于是就有了我们现在看到的TCP/IP四层协议。

其模型如下

分层名称功能每层功能概览
应用层针对特定应用的协议在这里插入图片描述
表示层设备固有数据格式和网络标准数据格式的转换在这里插入图片描述
会话层通信管理、负责建立和断开通信连接(数据流动的逻辑通路)、管理传输层以下的分层在这里插入图片描述
传输层管理两个节点之间的数据传输、负责可靠性传输(确保数据被可靠地传送到目标地址)在这里插入图片描述
网络层地址管理与路由选择在这里插入图片描述
数据链路层互联设备之间传送和识别数据帧在这里插入图片描述
物理层以0/1代表电压的高低以及灯光的闪灭、界定连接器和网线的规格在这里插入图片描述

TCP/IP协议

TCP/IP是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇。

TCP/IP通讯协议采用了五层的层级结构 每一层都呼叫它的下一层所提供的网络来完成自己的需求

  • 物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)就是工作在物理层的。
  • 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。数据链路层底层的网络通信标准有很多,如以太网、令牌环网、无线LAN等。交换机(Switch)就是工作在数据链路层的。
  • 网络层: 负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(路由)。路由器(Router)就是工作在网络层的。
  • 传输层: 负责两台主机之间的数据传输。例如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 应用层: 负责应用程序间沟通。比如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层的。

我们使用包裹传输作为例子解释下TCP/IP协议

在这里插入图片描述
假设我们的用户现在买了一个洗面奶 现在卖家开始发货 它的发货路线是从上海发到福建再到江苏最后到用户手上

其中从卖家到上海 从上海到福建这一跳一跳的过程就是由数据链路层决定的

而为什么要选择上海–福建–江苏这条路线 而不是选择其他路线这是由网络层决定的

从上海发到福建的过程中保证快递不丢安全送到这是传输层保证的 传输层保证安全性

最后我们花费了这么多的力气从卖家送到用户手里并不是送到就完事了 用户肯定还要使用这个洗面奶 如果不知道怎么使用肯定还要继续问卖家 而这一步则是应用层的任务了

总结下 下三层保证了数据了传输 而最上层保证了用户的使用

我们可以抽象的认为 物理层就是硬件层 数据链路层就是驱动层 当然这个理解并不完全正确

与OSI七层模型各层的对应关系:

在这里插入图片描述

可以看到 它们的下面几层几乎是没有区别的 操作系统对应的是传输层和网络层 数据链路层和物理层都是对应在驱动层的 而TCP/IP协议当中的应用层就对应到OSI七层协议当中的应用层 表示层和会话层

一般而言:

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
  • 对于一台路由器,它实现了从网络层到物理层的内容。
  • 对于一台交换机,它实现了从数据链路层到物理层的内容。
  • 对于集线器,它只实现了物理层的内容。

但这并不是绝对的 比如很多交换机也实现了网络层的转发 很多路由器也实现了部分传输层的内容(比如端口转发)

集线器

就像我们的声音会随着距离的增加而减弱一样 电磁信号在长距离传输过程中信号是会衰减的 所以说集线器被发明出来了

集线器的主要功能就是对接收到的信号进行再生整形放大 以扩大网络的传输距离 同时把所有节点集中在以它为中心的节点上

需要注意的是 集线器属于纯硬件网络底层设备 基本上不具有类似于交换机的“智能记忆”能力和“学习”能力 也不具备交换机所具有的MAC地址表 所以它发送数据时都是没有针对性的 而是采用广播方式发送 也就是说 当集线器要向某节点发送数据时 不是直接把数据发送到目的节点 而是把数据包发送到与集线器相连的所有节点

网络传输流程

我们这里以两台主机进行文件传输为例,此时各层对应的协议如下:

在这里插入图片描述

局域网的两台主机通信

首先第一个问题 局域网是可以直接通信的嘛?

答案是可以 同一个局域网内的主机是能够直接进行通信的

这里有两个具象化的例子帮助大家理解一下

在连不上互联网的情况下 我们家里的电脑和路由器还是可以直接通信的 因为它们两个是属于同一个网段的

我们玩一些游戏比如说cs这些不需要互联网 同一个楼层的朋友也可以使用局域网进行联机

局域网通信原理

在这里插入图片描述

在同一个局域网中很多个主机 那么A主机是怎么做到跟B主机通信的呢?

我们可以将这个场景抽象为一个在教室中的场景 在教室中假设你是一个老师 现在你开始质问张三 “张三 为什么你昨天的作业没有交” 这个时候张三站起来回答说“老师 昨天身体不舒服 所以没做 ”

我们回头看刚刚这个场景 为什么我说了一句话张三就站起来了呢? 大家可能觉得这个问题很笨 因为我叫的是张三的名字啊 那为什么其他同学听到之后没有站起来呢? 因为我没有叫其他同学的名字啊 那么其他同学听到我说话了嘛? 答案是听到了 这其实就是局域网通信的原理 广播自己说的话+接受这个话的对象 其他人虽然都能听到但是知道这个信息不是给自己的所以都丢弃了

反应到计算机中 每一台主机都有自己的mac地址 在A主机发送的这个消息的报头中携带了一个B主机的mac地址 所以说只有B主机收到这个消息之后解包了 其他主机收到之后看mac地址不是自己的便丢弃了

数据碰撞

回到我们教室的例子中 教室是一个公共资源 所以说大家都可以使用 那么在我向张三说话的时候李四有没有可能也在说话呢?

答案当然是有可能的 如果大家的声音都很大的话那么我们就听不清别人发送给我们的信息了 这就叫做数据碰撞

但是消息不能因为数据碰撞就不发了啊 所以说每一台主机都必须要有数据碰撞算法 当检测到数据碰撞的时候等一段时间再发送(每台主机的等待时间不一样)

如何判断发送出去的数据是否发生了碰撞?

因为发送到局域网当中的数据是所有主机都能够收到的 因此当一个主机将数据发送出去后 该主机本身也是能够收到这个数据的 当该主机收到该数据后就可以将其与之前发送出去的数据进行对比 如果发现收到的数据与之前发送出去的数据不相同 则说明在发送过程中发生了碰撞

也就是说,主机实际是能够通过某种方式 知道曾经发送出去的数据是否发生了碰撞的

如果我们拿操作系统的理解去理解网络的话 实际上网络(局域网)就是一个临界资源 它是要保证互斥的

如何攻击网络

既然上面我们知道局域网是互斥的且没有同步机制攻击的思路就很简单了 我们只要解除计算机的数据碰撞算法 让一台计算机不停的网局域网中发送垃圾信息那么所有的计算机就都不能通信了

我们将TCP/IP四层协议抽象成四楼

在这里插入图片描述

假设你现在在左边的四楼 而现在你老师要求你将一份文件送给右边四楼401的一个老师 那么你应该怎么送过去呢? 直接飞到右边的四楼嘛? 显然不现实

那么下到三楼之后再飞到对面的三楼嘛? 显然也不现实 你应该做的是 现在开始下楼到达一楼之后走路到对面的一楼 之后再慢慢爬上四楼将文件交给401的老师

用网络的视角看是这样子的

当用户要将文件传输给另一台主机前 该文件数据需要先通过网络协议栈进行封装:

  • 文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
  • 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
  • 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
  • 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。

数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:

  • 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层。
  • 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付。
  • 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层。
  • 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用。

也就是说,任何一台主机在发送数据之前,该数据都要先自顶向下贯穿协议栈来完成数据的封装,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,都要先自底向上贯穿协议栈来完成数据的解包和分用,在这个过程中,每一层协议都会将对应的报头信息提取出来。

画出上面传输协议的图 表示如下
在这里插入图片描述
画出这幅图之后我们能够惊奇的发现一个现象 同层所看到的数据是相同的

我们在上面解释通信过程的时候多次提到报头 那么什么是报头呢?

还是拿我们上面快递传输的例子来讲 卖家在发快递的时候不是只把货包装一下就好了 一般来说还会附带这样子的一个快递单

在这里插入图片描述(图片来自网络 侵删)

这个快递单我们就可以将它理解为报头

它记录了是谁发送的快递 应该发送到哪里 地址是多少

它指导当前层进行某种协议决策

我们在计算机中如何理解报头和有效载荷呢?

在这里插入图片描述

在上图中 红笔画上下划线的就是报头 其余的数据便是有效载荷

首先我们要知道报头是一个数据 而linux是用c语言所写的

所以说报头在linux中其实就是一个结构体 更准确的来说就是一个位段

如何理解计算机中的数据封装和解包

我们上面说过封装实际上就是加上报头 而在计算机中封装实际上就是开辟出一块新的缓冲区 然后先拷贝本层的报头数据之后再拷贝有效载荷

解包也是一样 开辟出一块新的缓冲区 然后使用一个指针指向数据的开始 将这个指针强制转换成本层报头的类型++之后将后面的数据拷贝到新缓冲区 这就叫做解包

报头中的数据

几乎每个报头中都要含有两个数据

  1. 当前报文的有效载荷要交给上层的哪个协议?
  2. 报头和有效载荷的边界在哪里

如果之前了解过网络的同学可能会知道tcp旁边还可能有个udp协议 那么ip协议往上应该传送给哪个协议呢? 报头中的数据规定了这一点

此外有个网络的协议非常的多 所以说报头会明确自己和有效载荷的边界以防少传或者多传导致信息错误

两台机器跨网络通信

在这里插入图片描述
两台机器的跨网络通信如上图所示 为了让大家更好的理解我们先来解释几个概念

IP地址和mac地址

拿西游记的故事举例 比如说唐僧路过车迟国 现在在跟车迟国国王交流

国王问唐僧从哪里来 唐僧说 从东土大唐来到西方去取经

国王又问你上一站从哪里来 下一站准备去哪里呢? 唐僧说 上一站从女儿国来 下一站准备去黑风岭

我们可以发现 这里唐僧其实说了两套地址

  • 一套是从哪里来 到哪里去 (不变)
  • 一套是上一站是哪 下一站去哪儿 (一直变化)

上面这个一直不变的地址我们就将它叫做ip地址 下面一直改变的地址我们就叫做mac地址

在这里插入图片描述

再来看这张图 比如说现在要一个数据从左边的网络层要发送的右边的网络层 它中间要不停的经过封装解包的过程 而此时它报头中的mac地址是一直不停变化的 因为它的上一站和下一站在不停的变化

而经过IP层之后我们看不到下层的任何差异了 即IP层屏蔽了下层的所有差异

ip地址

  • IP地址是在IP协议中,用来标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.0.1,用点分割的每一个数字表示一个字节,范围是0-255。

mac地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。

如何在Linux中查看自己的MAC地址?

我们可以使用ifconfig命令可以来查看当前主机所对应的网卡信息

在这里插入图片描述

该地址就是我们的mac地址 但是由于我们是租用的云服务器 所以说这个mac地址不是真正的mac地址 而是被模拟出来的

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

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

相关文章

跟姥爷深度学习3 神经网络的调试实操

一、前言 前面我们做了一次天气预测的模型,训练的结果都还好,网络好歹是“拟合”了,但预测数据不合预期让我一直耿耿于怀。所以我又花了很长时间来研究为什么,我的理论依据明明没有问题(今日*均温度与*一周*均温度具有…

全球6G技术大会总结报告

全球6G技术大会 论坛B:天地融合智能组网技术 论坛D:2030技术发展趋势 论坛E:6G无线空口传输技术 论坛F:6G通感算架构及关键技术 论坛H:6G网络架构及关键技术 论坛B:天地融合智能组网技术 论坛B中包含…

【Java 并发编程】一文了解线程间有哪些通信方式?

一文了解线程间有哪些通信方式?1. synchronized 内置锁2. volatile 关键字3. 等待/通知机制3.1 等待wait()wait(long)wait(long, int)等待方需遵循如下原则3.2 通知notify()notifyAll()通知方需遵循如下原则notify() 和 notifyAll() 应该用谁?4. 管道输入…

第18章_JDK8-17新特性(下)

第18章_JDK8-17新特性(下) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 6. 新语法结构 新的语法结构,为我们勾勒出了 Java 语法进化的一个趋势&#xff0c…

STM32 库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别

问题:当我使用STM32库函数对 I/O 口进行赋值时,在头文件中发现有四个相关的函数可以做这个操作,那么它们有什么区别呢? 一、GPIO_SetBits //eg: GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);解释:置位(置1)选择的数…

十、市场活动-分页查询

功能需求 ①、当市场活动主页面加载完成之后,显示所有数据的第一页; ②、用户在市场活动主页面填写查询条件,点击"查询"按钮,显示所有符合条件的数据的第一页,保持每页显示条数不变 ③、实现翻页功能. *在市场活动主页面,显示市场活动列表和记录的总条…

Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable(续篇)

目录背景意外发现结论背景 上篇Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable,我把WebMvcConfig 代码加入项目后,会报冲突的问题。如下所示。 requestMappingHandlerMapping: defined by method ‘requestMappingHandlerM…

The 1st Universal Cup Stage 12: ̄Ookayama, April 15-16, 2023 题解

A XOR Tree Path 给一颗树&#xff0c;树上点有黑白两色&#xff0c;每次可以选一个叶子节点&#xff0c;翻转其到根路径上所有点的颜色&#xff0c;问最大黑色点数。 树dp #include<bits/stdc.h> using namespace std; #define MAXN (10000010) #define ll long long…

计及氢能的综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用国密SSL证书,实现SSL/TLS传输层国密改造

密码是保障网络空间安全可信的核心技术和基础支撑&#xff0c;通过自主可控的国产密码技术保护重要数据的安全&#xff0c;是有效提升我国信息安全保障水平的重要举措。因此&#xff0c;我国高度重视商用密码算法的应用并出台相关政策法规&#xff0c;大力推动国产商用密码算法…

.Net MVC中 视图如何使用路由!!!

配置路由 app.UseEndpoints(endpoints > { endpoints.MapControllerRoute( name: "default", pattern: "{controllerHome}/{actionIndex}/{id?}"); }); 在视图中使用路由 页面跳转常用的路由设置 标签属性 描述 asp-action 指定…

STL容器总结

1.Vector&#xff1a; 本质是动态数组&#xff0c;拥有一段连续的内存空间&#xff0c;并且起始地址不变&#xff0c;能非常好的支持随机存取&#xff0c;即[]操作符&#xff0c;但由于它的内存空间是连续的&#xff0c;所以在中间进行插入和删除会造成内存块的拷贝&#xff0c…

C++之 文件操作(file operation)

目录 引言 一、文本文件 1、写文件 2、读文件 二、二进制文件 1、写文件 2、读文件 引言 程序运行时产生的数据属于临时数据&#xff0c;程序一旦运行结束后&#xff0c;数据也会被释放 通过文件可以将数据保存以持久化 在C中&#xff0c;对文件进行操作要写头文件<f…

图染色问题的NP完全性证明

文章目录1.Overview2.CNF 3-sat3. Gadgets3.1 Concolorous Edges3.2 Starter/Variable Gadget3.3 Splitter Gadget3.4 OR Gadget3.5 Clause Gadget4. To Planar Graph最近在学 6.890&#xff0c;然后 devans 刚好问了我这个问题&#xff0c;然后尝试编了一个证明。 1.Overview…

功能测试面试没人要了!软件自动化测试如何入门?

对于我来说&#xff0c;我做的是web端的测试&#xff0c;做测试也有好几个年头了&#xff0c;每次都是使用手工测试的话&#xff0c;一直是做重复性的工作&#xff0c;既枯燥又繁琐&#xff0c;所以我在两年前自己使用java语言写了一系列的自动化测试脚本&#xff0c;利用的框架…

Java数据结构与算法----动态规划(背包篇)

1. 0/1背包 1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦&#xff01;它主要的问题是&#xff1a; 给定n种物品、这n种物品的重量分别是&#xff0c;价值分别是 &#xff0c;而你有一个容量为C的背包&#xff0c;请问如何求出所能拿的最大价值呢&#xff1f; …

嵌入式开发——串口常见问题和调试手段

1、串口介绍 参考博客&#xff1a;《ARM芯片&#xff08;S5PV210芯片&#xff09;——串口通信详解》、《UART和RS232、RS485的联系和区别、以及对软件编程的影响》&#xff1b; 2、串口常见问题 (1)内核没有开启串口&#xff0c;导致没有产生设备节点&#xff1b; (2)上层应用…

运动想象脑电信号数据集及其预处理方法

脑电信号基础知识 在BCI应用中,获取脑信号的途径包括多种技术方式。其中,EEG是最适合脑机接口应用的技术,主要因为无创性、便携式和高时间分辨率是其的优势。EEG是记录头部表面不同位置之间电位差异的时间记录,它起源于分布在大脑皮层的数百万个神经元的同步电活动的总和。…

我把Solon打包成了native image,速度快的惊人

Solon 一个高效的应用开发框架&#xff1a;更快、更小、更简单。https://solon.noear.org/ 我刚开始对 Solon 感兴趣的原因&#xff0c;就是启动快、包体积小&#xff0c;用了一段时间之后&#xff0c;发现 Solon 使用 GraalVM native iamge 打包有一些问题&#xff0c;我把问题…

Cache;高速缓冲存储器

高速缓冲存储器 概述 ​ 在多体并行存储系统中&#xff0c;由于IO设备向主存请求的级别高于CPU访存&#xff0c;这就出现了CPU等待IO设备访存的现象&#xff0c;导致CPU空等一段时间&#xff0c;甚至等待几个周期&#xff0c;从而降低了CPU的工作效率&#xff0c;为了避免CPU…