SDN网络中的转发数据和数据传输

2023-05-16

数据驱动的网络

从数据驱动的角度来看网络,会发现一张现实中的网络存在着各种数据。设计和管理一张网络,主要是设计数据,存储数据,管理数据和分析数据。网络数据的规模、复杂度和变化速度,这3方面决定了数据处理的难度。对照下图的SDN网络结构,网络数据按照用途可以分成下面几类。

  • 设备元数据。例如图中每台虚拟交换机的的基本数据:设备型号,设备软件版本和管理IP地址等。
  • 拓扑数据,例如图中一台虚拟机交换机有几个端口,每个端口的类型和速率是多少,每个端口是2层还是3层的,对端的端口数据,端口和端口之间的线路类型。控制器和虚拟交换机之间的连接方式。
  • 转发数据,例如图中一台虚拟机交换机内部的转发表项,指导报文在交换机内部如何转发。也包括控制面各种网络协议和配置接口生成的转发路由数据。
  • 测量数据,例如从图中一台虚拟机交换机上每个端口上采集的各类流量数据,这些数据还可以聚合,用于分析各种业务的运行流量情况。

一个SDN VPC控制器,通常要管理成千上万个虚拟交换机节点,其作用是存储、计算和传输网络数据。其中转发数据是最重要的一类数据,直接决定了报文在网络中的转发行为。本文主要分析SDN控制器将转发数据传输到虚拟机交换机的一些方法,希望从这个角度能介绍一下SDN网络遇到的主要问题,以及如何设计一个SDN网络控制器。
为了简要描述,下文中的交换机,路由器和virtual vswitch偶尔会交替使用,他们都代表了具有路由功能的虚拟网络转发设备。

VPC 网络转发数据

云网络内部根据数据面功能也分成多块,本文主要介绍VPC网络。下图是一个VPC内的转发数据。分别从控制器和虚拟交换机的视角来看,控制器内的转发数据,和虚拟交换机内的转发数据并不相同。控制器上是整个VPC1的转发数据,而每个虚拟交换机内是本节点网卡相关的VPC转发数据。

从控制器的视角看VPC1的转发数据:VPC 1内有2个子网,子网1内有网卡1/2,子网2内有网卡3/4。

  • VPC 1内有3张路由表:系统路由表,路由表1/2。有3个安全组:安全组1/2/3。
  • 子网1关联路由表1,子网2关联路由表2。
  • 网卡1/2关联安全组1,网卡3关联安全组2,网卡4关联安全组3。
  • 网卡1(eni1)是分配给虚拟机1,mac1,ip1,连接在虚拟交换机1的port1。网卡2(eni2)是分配给虚拟机2,mac2,ip2,连接在虚拟交换机1的port1。网卡3(eni3)是分配给虚拟机3,mac3,ip3,连接在虚拟交换机3的port1。网卡4(eni4)是分配给虚拟机4,mac4,ip4,连接在虚拟交换机4的port2。

从虚拟交换机1的视角看VPC1内的转发数据:

  • 本节点有一张属于vpc1的网卡1,mac1,ip1,连接在port1。
  • vpc1内的其他网卡有,网卡2/3/4。
  • 网卡1关联着安全组1,路由表1。访问vpc1内的网卡2/3/4,需要查询系统路由表。并且和每个虚拟交换机之间建立点对点的隧道。

根据上面的例子,可以罗列一下VPC网转发数据的几个特点:

  • 转发数据规模大。大的云厂商一个最大的VPC可能有几十万台甚至更多的虚拟机,导致一张VPC网络内的转发数据规模很大。上面的例子只介绍了一个VPC 1,正常一个地域会存在很多个租户VPC。Google的数据是如果一个控制器管理着40K虚拟机的网络,控制器要写入487M条flow,消耗10GB的内存。
  • 转发数据关系复杂。转发数据包括路由、安全规则和隧道数据,转发数据分为位置表、路由、安全组等类型,这些数据之间有复杂的绑定关系。控制面和数据面处理的转发数据格式不同,每个虚拟交换机需要的转发数据内容也不相同。
  • 转发数据变化快。云网络支持虚拟机快速动态创建和迁移,网络变更频繁,导致转发数据变化速度很快。控制器需要在短时间内计算出变更后的结果,并快速下发给数据面。
  • 转发数据是分布式的,一张VPC路由表的转发数据分布在各个转发节点上,需要确保各个节点上的转发数据是协调一致的。控制面和数据面之间的数据传输需要经过中间的物理网络,转发数据的传输可能会丢失或者中断。
  • 数据面的转发数据,具有网络自身的特点,转发数据用于报文的转发查找,所以一般以表的形式存储,例如路由表,安全规则表等。对于表的更新,也是以增量更新的形式,不然每次都是对整表进行,会中断网络传输。数据面的报文依赖于转发数据的正确性,如果数据有错误会导致网络中断。

一个SDN VPC控制器,管理着成千上万个虚拟交换机,以上面的例子为例,控制器需要将VPC1内的转发数据,转换成虚拟交换机期望的数据,并正确的传输到众多虚拟交换机上。下面介绍控制器将转发数据传输到虚拟交换机的3种方式,以及这3种方式下的数据一致性。

传输转发数据

分布式系统,是通过分布式算法让一群机器对外像一台机器在工作。云网络的特点,是通过分布式系统和网络技术让一群虚拟交换机逻辑上像一台虚拟交换机在工作。

数据模型和格式

数据模型和格式,就是控制器将转发数据以什么格式发送给虚拟交换机,例如json/xml/protobuff。
虚拟交换机的实现大多参考开源的OpenvSwitch,OpenvSwitch以Openflow协议和控制面交互转发数据,以OVSDB和控制面交互管理信息。转发数据以Openflow Rule格式表示,Openflow Rule存储在Openflow Table中。控制面通过Openflow协议读写Openflow Table,接收数据面上送的协议报文。Openflow协议支持数据面将一些流表更新事件和端口事件上报给控制面,类似于中断通知。
如果控制面直接以Openflow协议传输转发数据,Openflow Rule的表达是偏向转发面的,没法直接表示子网和路由表的关联关系,以及网卡和安全组之间的关联关系。另外为了表示控制面的一条路由,需要在rule中指定匹配条件和vxlan tunnel的信息。当有多条路由数据指向同一条vxlan tunnel时,会导致重复的vxlan tunnel数据。例如下面,如果再新增一条路由,nw_dst=192.168.1.30,tun_dst=10.33.0.12,tun_id=1,那么这条tunnel数据会在转发面重复存在。

ovs-ofctl add-flow br-tun "nw_dst=192.168.1.11 actions=set_field:10.33.0.12->tun_dst, set_field:1->tun_id, output:1 
ovs-ofctl add-flow br-tun "nw_dst=192.168.1.12 actions=set_field:10.33.0.13->tun_dst, set_field:1->tun_id, output:1 
ovs-ofctl add-flow br-tun "nw_dst=192.168.1.20 actions=set_field:10.44.0.24->tun_dst, set_field:1->tun_id, output:1

解决的办法是,进一步对Open vSwitch的Table做拆分,独立复用的数据。另外一些解决方案是控制器不直接对接虚拟交换机,不再直接发送原始的数据面转发规则,而是引入一层proxy。控制器和proxy之间传输自定义格式的转发数据,使用json或者protobuff,由proxy再翻译成Openflow写入虚拟交换机。
自定义的数据格式,对比Openflow表达上偏向控制器,可以减少控制器和虚拟交换机之间传输时的大量重复数据,也可以方便的自定义扩展。如下所示,如果使用自定义格式,只需要指定列出虚拟机和宿主机的IP地址列表,那么虚拟交换机可以将此翻译成上面的Openflow Rule,不存在重复的vxlan tunnel。

hosts = vpcHosts {     
    vpcID = vpcxxxx,     
    vni = 1,     
    subnetID = subnetxxxx,          
    {         
        vmIP = "192.168.1.10/24",         
        hostIP = "10.22.0.16"     
    },     
    {         
        vmIP = "192.168.1.11/24",         
        hostIP = "10.33.0.12"     
    },     
    {         
        vmIP = "192.168.1.12/24"         
        hostIP = "10.33.0.13"     
    },     
    {         
        vmIP = "192.168.1.20/24"         
        hostIP = "10.44.0.24"     
    },        
}

数据流

数据流是指控制器通过什么方式将转发数据传输给虚拟交换机。目前有以下3种方式:

  • via database,数据发送方将数据写入数据库,数据接收方从数据库读取数据再消费。双方使用数据库进行数据的传输。
  • via rpc,数据发送方和接收方之间建立一对一的RPC连接,使用RPC传输数据。
  • via asynchronous message system,数据接收方订阅消息队列对应的topic,数据发送方先将数据发送给消息队列的对应topic,消息队列将数据推送给数据接收方。

我们来具体分析使用上述3种方式实现控制面和数据面的数据同步。

via database

使用数据库来传输数据,需要清晰的定义数据在数据库中的存储的格式。一般是控制器来写数据库,虚拟交换机Agent来读数据库。数据库的数据,表示的是转发数据最新的状态,没有数据的历史状态。如果控制器出现错误,导致数据被篡改,一般要通过同时留存日志的方式,追溯出篡改的时间点和原始数据。同时要注意数据库的事务,防止出现脏数据。
控制器需要和虚拟交换机Agent定义清楚数据库转发数据schema的版本,以及双方软件的版本,不然可能导致转发面读取数据库出错。一般这种情况是控制器在数据库中添加了新字段,但是虚拟交换机Agent的版本还是旧的,此时无法提取新的字段,导致出现错误。
数据库中的数据一般是持久化的,只要数据的写入者不主动删除数据,转发数据就不会丢失,这样即使数据面节点重启了,还可以从数据库中恢复出转发面的状态。

使用数据库来传输数据,控制器和数据面是异步的,控制器写入新数据到数据库之后,数据库无法通知数据面及时来读取数据,导致新的转发规则不能及时生效。但是现在出现了一些数据库具备类似消息队列的消息通知功能,数据面可以订阅数据库的某些消息来实现异步的通知,例如redis/etcd。但是使用数据库模式,由于一般数据面Agent数目特别多,所以数据库的读性能以及并发连接数会是这个方案的一个瓶颈。
另外一种方式,是虚拟机交换机自带数据库,例如Open vSwitch自带Open Flow Table,作用类似数据库,报文转发查找时会使用Table。控制面直接写Open Flow Table,这种方式的好处在于转发规则可以长久化,并且能立即生效,但是弊端在上一节已经提到,控制器需要关心Open Flow 规则的格式,维护的负担过重,理解起来也比较困难,数据传输效率也不高。OVN控制器使用的就是这种方式。

via rpc

基于RPC的方式,控制器和每个数据面节点建立一对一的RPC连接。RPC通信模式下,一般有个服务端和客户端,控制器和数据面都可以作为服务端。一般在数据面节点上会部署一个agent,用于和控制器之间建立RPC连接,由agent接收数据之后再写入虚拟交换机中。
使用RPC,控制器和数据面agent之间的通信是同步的,控制器可以实时推送数据到数据面agent并确认数据面已经接收到数据。RPC的实现较为方便,只要定义好服务的接口和通信协议,控制器和数据面之间容易实现解耦,方便双方独立升级维护。
RPC一般是有通信方向的,例如客户端主动访问服务器端的服务,此时如果服务器想主动推送数据给客户端,就很麻烦。grpc支持stream模式,但是也需要客户端主动连接上来之后,以responce的形式再推送数据给客户端,导致此时控制器无法基于具体的接口提供服务。
使用RPC的方式,Agent没法很好的持久化保存转发数据,因为控制器和数据面agent是通过网络通信的,所以在一些数据消息丢失的情况下,Agent的状态比较难排查。而且数据面agent重启之后,为了快速恢复转发状态,必须做一次全量的数据同步。如果大量的agent在同一时刻重启会对控制器会造成服务攻击。解决办法是可以在本地存储对应的消息。但是这个消息需要有分布式算法来保证一致性。
agent需要负责转发面Table中的数据正确性,必须确保所有数据正确的写入转发面的Table中。如果出现异常将导致网络流量的中断这对agent的设计要求比较高,尽量简单和稳定,最好做到无状态的。

via asynchronous message system

控制器和数据面节点之间,可以使用消息队列作为转发数据的传输通道。消息队列有生产者和消费者的角色。控制器作为生产者,往一个topic写数据,数据面节点上的agent订阅该topic,消息队列会负责往所有订阅该topic的数据面节点推送数据。控制器需要将转发数据的类型划分成不同的topic,并按照topic去发送数据。
消息队列具备一对一和一对多通信的能力,容易实现控制器和数据面之间的解耦。控制器只需要将转发数据写入消息队列后就不用管了,消息队列自己会完成数据的传输工作。控制器可以方便的实现将同一份转发数据,多播给多个数据面节点。
有些消息队列支持消息的按序发送,但是转发数据的顺序只能在一个topic上保证,多个topic之间无法保证。消息队列还支持消息的重传。有些消息队列支持消息的持久化保存,但是不能和数据库比较,只是实现了有限的持久化功能。消息队列支持消息的削峰功能,当转发数据太多时,可以临时缓存下来,避免系统过载。
消息队列支持异步通信,消息队列主动将消息或者事件及时的推送给数据转发面。但是有一个问题,控制器将转发数据写入消息队列之后,无法知道什么时候数据面收到了数据。解决办法之一是数据面agent可以注册一个topic,作为生产者将结果作为消息写入消息队列,控制器作为消费者来读取结果。
消息总线是一种增量通信的机制,也就是说新转发数据,总是以新消息的形式被追加到系统的消息流中,消息流也可以解读为事件流。
目前VPC控制器一般以VPC和ENI作为topic,这样每个虚拟交换机只需要订阅自己关心的VPC topic,每次这个VPC的数据有更新,它都会收到新的消息,而不用关心别的VPC数据是否有更新,这样可以减少重复数据的传输,减轻虚拟交换机的负担。

via log

基于log的方式,结合了基于数据库的数据可持久化功能,和rpc机制的实现。其实现方式可以抽象为,控制器将数据以递增的方式追加log文件中,并附带编号和数据的动作指令,例如是添加还是删除一条数据。控制器负责将log文件同步到所有的数据面节点,并记录每个数据面节点当前同步的位置,根据这个位置决定下一次同步的数据。如果数据面节点崩溃了,数据面节点可以使用本地快照恢复状态,再根据log文件更新到最新状态,并且再通过RPC和控制器同步自己最新数据的位置。控制器再同步最新的数据到数据面节点。所以控制器还需要定期和数据面节点sync本地快照。

转发数据一致性

前面介绍了转发数据的传输格式和传输方式,不同传输方式下实现数据一致性的方式和难度不一样。
基于数据库的实现方式,因为控制器将转发数据直接写入了数据库中,所以数据转发面节点可以直接读取同样最新的数据,这个数据一致性是由数据库来保证的。关系型数据库可以实现强一致性。这个场景下需要解决的问题主要是,控制器需要及时通知数据面节点来读取数据,另外就是数据库要承担所有节点的读写请求,需要评估其性能。OVN控制器,使用基于数据库的方式。

基于RPC的方式,控制器和数据面节点之间的状态同步难以保证。需要依赖一些机制来实现数据的一致性。这个时候可以使用分布式共识算法,来保障控制器和数据面节点的状态一致性,如下图所示。控制器作为leader,agent作为follower。控制器控制保存每个数据面节点的同步状态,控制数据面节点的同步,这个有点类似于via log的方式,每次同步的数据都有对应的编号。另外一种较为简单的方式是使用版本号,但是这一般用于控制器和数据面节点之间同步全量数据。

基于消息队列的方式,控制器和数据面节点之间的状态同步依赖于消息队列的消息持久化和重传机制。这种事件驱动机制下,数据节点接收到的是增量数据,控制器无法直接知道数据面节点是否接收到数据。所以还依赖额外的机制来确保数据面节点和控制器之间数据的最终一致性,例如建立旁路的对账检测机制,定期检查每个数据面节点的转发数据是否和控制器的数据一致。为了做到数据面节点重启快速恢复,数据面节点必须保存全量的转发数据,否则重启之后就只能接收新数据了。

解决方案探讨

一个解决方案,是基于数据库的改进模式,直接将一个虚拟交换机当成一个转发设备,在控制器中对应每个转发设备都有一个映射。控制器根据转发数据模型和网络事件,分别计算出每个转发设备当前最新状态,以及与历史状态比较的变更,然后再将变更增量写入转发设备的转发表中。如果类比传统路由器,控制器中的转发设备数据可以类比CPU中的RIB和ARP Cache,而虚拟软件交换机中的转发设备数据,可以类比硬件交换芯片的转发表项,在CPU中存在单独的进程和交换芯片SDK来处理RIB和硬件交换芯片转发表之间的同步。交换芯片SDK提供读写交换芯片的接口和通道,将CPU的读写格式翻译成硬件交换芯片支持的格式,在各家交换芯片SDK之上通常还会有一个SDK适配层用来屏蔽各家SDK的差异。在SDN网络中,Openflow协议起到的作用和交换芯片SDK类似,各种软件交换机需要自己对Openflow协议做兼容。P4 Runtime是通过RPC的方式直接读写虚拟软件交换机的转发表,作用类似,区别在于P4的重点是想随时可以改变交换机的解析和转发行为,真正做到自定义交换机。传输通道和协议有了,控制器中的转发设备数据有了,那么现在需要的就是在控制器这一侧为每个转发设备起一个单独的线程,通过传输通道和协议将转发数据写入虚拟交换机的转发表中。为了避免控制器维护过多连接,可以引入proxy。

在控制器中为每个虚拟交换机创建单独的实例,该实例使用传输通道和传输协议和虚拟软件交换机通信。虚拟交换机会发送一些网络事件给控制器实例,例如虚拟交换机连接、添加一个虚拟机端口等。控制器综合这些虚拟交换机上报的事件,以及来自上层的网络配置信息,计算出每个虚拟交换机的当前转发数据,然后和历史数据比较得出差异数据。这个差异数据格式是控制器能够识别的,再通过传输通道以及Openflow等传输协议转换成虚拟机交换机支持的格式,写入到虚拟交换机的转发表中。由控制器实例来确认每次传输是否成功,如果失败,需要重试来确保两边的一致性。为了支持控制器失联时虚拟交换机仍然保持正常转发,虚拟交换机支持fail-static模式。

另一个解决方案,是基于rpc的改进模式。在控制器中对应每个转发设备都有一个逻辑映射,控制器维护一份该转发设备的逻辑数据。和上述模式的差别在于,控制器不再写虚拟交换机的转发表,而是在控制器和数据面Agent之间通过rpc同步逻辑数据,然后由Agent将逻辑数据翻译成虚拟交换机支持的格式写入转发表中。在控制器和数据面Agent之间需要依赖分布式共识算法,来保证逻辑数据的同步。为了避免控制器维护过多连接,也可以引入proxy。这种方式和上面的方式对比,主要在于增加了一层Agent的缓存,相对复杂一些,带来的好处是控制器不再关心底层虚拟交换机具体支持的格式。

原文链接:https://zhuanlan.zhihu.com/p/565588734

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDN网络中的转发数据和数据传输 的相关文章

  • 相机参数标定(camera calibration)及标定结果如何使用

    重要更新 xff1a 本文的第二次更新已发布 为了不破坏现有内容的结构 xff0c 故重新开始新的一篇文章 同时本文的一些内容也会涵盖进去 欢迎关注 第二更 xff0c 相机参数标定基础 xff1a 从小孔成像开始到单双目标定 关于实践部分
  • 基于51单片机的LCD1602电子时钟

    摘要 xff1a 51系列单片机是各单片机中最为典型和最有代表性的一种 由RAM ROM CPU构成 xff0c 定时 xff0c 计数和多种接口于一体的微控制器 本次设计的数字电子时钟采用了STC89C52芯片进行控制 xff0c 使用D
  • 基于51单片机的简易密码锁

    一个基于51单片机的简易密码锁 xff0c 废话不多说 xff0c 直接贴图贴代码 1 电路图 电路组成 xff1a 5V电源 43 51单片机最小系统 43 LCD1602显示屏 43 4 4矩阵键盘 2 程序分析 xff08 1 xff
  • 浅谈Android与Linux系统的差异

    最近忙于查找Linux和android平台的资料 xff0c 今天将其整理整理 xff0c 根据本人拙见分享给大家 Android和Linux作为现行主流的操作系统 xff0c 无论在消费类产品还是在工控领域 xff0c 都有广泛的应用 都
  • 基于51单片机的超声波测距

    1 超声波测距原理 超声波是利用反射的原理测量距离的 xff0c 被测距离一端为超声波传感器 xff0c 另一端必须有能反射超声波的物体 测量距离时 xff0c 将超声波传感器对准反射物发射超声波 xff0c 并开始计时 xff0c 超声波
  • 超细!详解AD13:如何从零开始画出一个PCB(电路板)

    在学电子或者单片机的小伙伴们或许有过这种念头 xff0c 就是想把自己的设计的电路或者单片机系统做成一个电路板出来 xff1b 但却不知怎样做出来 今天我就给大家详细讲解如果通过AD13电路设计软件设计出一个电路板 1 首先打开AD13 x
  • 基于51单片机液晶万年历设计

    电子万年历是一种非常广泛日常计时工具 xff0c 给人们的带来了很大的方便 xff0c 在社会上越来越流行 它可以对年 月 日 时 分 秒进行计时 xff0c 采用直观的数字显示 xff0c 可以同时显示年月日时分秒和温度等信息 xff0c
  • 基于51单片机的简易计算器

    1 简介 本计算器是以MCS 51系列AT89C51单片机为核心构成的简易计算器系统 该系统通过单片机控制 xff0c 实现对4 4键盘扫描进行实时的按键检测 xff0c 并由LCD1602显示屏将过程与结果显示出来 2 硬件原理图 硬件主
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 xff0c 将红外传感器接收的信号解析出来 xff0c LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统LCD1602显示屏IR红外接收器
  • 基于51单片机的心率脉搏计检测系统

    1 功能原理 脉搏传感器采样脉搏信号 xff0c 采用STC89C51单片机作为控制器 xff0c 脉搏传感器输出方波传入单片机 xff0c 触发单片机进去外部中断函数 xff0c 每接收一个脉冲波形 xff0c 显示屏就计数一次 如果脉搏
  • 基于51单片机的智能调光台灯

    1 功能介绍 智能台灯可分成自动和手动两种模式 在自动模式下 xff0c 台灯能根据环境光的亮暗与人是否被台灯所检测到 xff08 人是否在 xff09 来自动开启台灯 当人被微机检测到 xff0c 环境光又达到某个程度的时候 xff08
  • app元素辅助定位三种方式:Appium-Inspector、uiautomatorviewer、Weditor(uiautomator2)

    xff08 1 xff09 使用Appium Desktop中Appium Inspector辅助进行元素定位 早期版本集成在Appium Desktop中 xff0c 最新版本已分开 下载地址 xff1a Releases appium
  • 俄罗斯方块游戏的算法

    1 原理 这个游戏设计 xff0c 本质上就是用一个线程或者定时器产生重绘事件 用线程和用户输入改变游戏状态 这个游戏也不例外 xff0c 启动游戏后 xff0c 就立即生成一个重绘线程 xff0c 该线程每隔50ms绘制一次屏幕 当然 x
  • 基于51单片机的俄罗斯方块游戏

    俄罗斯方块游戏算法 请参考俄罗斯方块游戏的算法 1 概述 俄罗斯方块是一款风靡全球的益智游戏 它规则简单 xff0c 容易上手 xff0c 且游戏过程变化无穷 xff0c 使用户在游戏中得到乐趣 本设计是采用单片机来实现的智能俄罗斯方块游戏
  • 基于51单片机的智能温控风扇

    1 功能 本设计为一种温控风扇系统 xff0c 具有灵敏的温度感测和显示功能 xff0c 系统选用STC89C52单片机作为控制平台对风扇转速进行控制 可在测得温度值在高低温度之间时打开风扇弱风档 xff0c 当温度升高超过所设定的温度时自
  • 基于51单片机的数字频率计

    1 简介 数字频率计是现代科研生产中不可或缺的测量仪器 xff0c 它以十进制数显示被测频率 xff0c 基本功能是测量正弦信号 xff0c 方波信号 xff0c 及其它各种单位时间内变化的物理量 本系统采用AT89C52单片机智能控制 x
  • 基于51单片机的火灾报警器

    1 系统功能 火灾报警器 xff0c 主要检测温度和烟雾 xff0c 再通过单片机控制相应的报警和驱动负载 通过液晶显示当前的烟雾值和温度值 xff0c 通过按键设定相应的阀值 主要包括以下几项功能 xff1a 1 火情探测功能 xff1a
  • 基于51单片机的指纹密码锁

    1 系统功能概述 本次分享的是一款基于51单片机的指纹识别电子密码锁系统 xff0c 该系统以STC89C52单片机作为模块核心 xff0c 通过串口通信控制指纹模块AS608实现录取指纹并存储指纹数据 xff0c 并通过LCD12864液
  • 基于51单片机的智能电子秤

    1 概述 xff08 1 xff09 系统原理 本电子秤系统利用压力传感器采集因压力变化产生的电压信号 xff0c 经过电压放大电路放大 xff0c 然后再经过模数转换器转换为数字信号 xff0c 最后把数字信号送入单片机 单片机经过相应的
  • 基于51单片机的智能垃圾桶

    1 简介 本次主要是利用单片机设计并制作一套智能垃圾箱 要求以单片机为控制核心 xff0c 通过红外传感器检测是否有人扔垃圾 xff0c 并自动打开垃圾箱盖 xff0c 扔完垃圾后再自动关闭 主要内容包括 xff08 1 xff09 红外对

随机推荐

  • gmake: No rule to make target `C:/ti/controlSUITE2_DMC Rev/device_support/f2803x/v122/DSP2803x_h的解决

    注 xff1a 此方法是在CCS8环境下的使用成功的 在使用controlSUITE的例程编译时 xff0c 工程老出现这种错误 xff0c 排查了很久 xff0c 终于找到了原因 xff0c 造成这种原因主要是CCS在安装时没有按照默认的
  • 基于51单片机的数字气压计

    1 概述 本设计是基于MPX4115的数字气压计 xff0c 硬件处理电路为大气压传感器模拟信号的采集 转换 处理和显示 xff0c 并根据相应的软件需求设计控制程序 2 硬件设计 xff08 1 xff09 硬件总体框图 气压计的硬件主要
  • 一站式开源分布式集群云真机测试平台Sonic——基于Docker方式部署sonic前后端(体验版)

    Sonic xff1a 一站式开源分布式集群云真机测试平台 xff0c 致力服务于中小企业的客户端UI测试 xff0c 永久免费 sonic官网 xff1a Sonic 开源云真机测试平台 开源不易 xff0c 请大家多多支持作者 xff0
  • Policy Gradient Algorithms

    Policy Gradient Algorithms 2019 10 02 17 37 47 This blog is from https lilianweng github io lil log 2018 04 08 policy gr
  • 基于51单片机的多功能八路抢答器

    1 功能介绍 多功能八路抢答器是基于51单片机来设计的 xff0c 除了可以实现最基本功能 8路抢答外 xff0c 还具有自动处理犯规选手 xff0c 抢答时间调整 xff0c 还可以进行答题 xff0c 计分 xff0c 并且可以查询或修
  • 基于51单片机的贪吃蛇游戏

    1 简介 本设计为一款贪吃蛇游戏 xff0c 显示器采用8 8点阵 xff0c 主控制器采用51单片机 xff0c 并通过按键实现对游戏的操作 2 贪吃蛇算法介绍 吃蛇游戏算法的实现 xff0c 即如何通过液晶屏显示蛇的移动 其实蛇看似移动
  • 基于51单片机的便携式输液点滴控制报警器

    1 简介 基于单片机输液点滴控制报警器组成 该系统主要由光电传感器检测电路 键盘 数码管显示 报警提示电路 液滴流速监测电路 电机驱动电路等组成 利用光电感器测量出液滴流速 xff0c 并将将信息返回给单片机 xff0c 单片机对流速信号与
  • PCB加工文件—Gerber文件的导出

    当我们使用软件将一个板卡的PCB图纸设计好后 xff0c 想到PCB厂家制作成电路板 简单的 xff0c 你可以把自己的设置PCB文件 PcbDoc 直接发给厂家加工 xff0c 但是有些PCB厂家会要求你提供Gerber文件 但是这个Ge
  • AD13如何导出坐标文件

    在电子行业加工生产大批量的电路板 xff0c 都是利用贴片机进行生产和制造 xff0c 在生产之前 xff0c 我们需要提供PCB的坐标文件给贴片厂家 xff0c 这样厂家才能确定每个元器件应该贴在PCB板上什么位置 所以下面我们就来讲一下
  • 基于PID算法的水箱温度控制系统

    1 概述 本设计为基于STC89C52单片机的智能水温控制系统 xff0c 控制对象以500mL陶瓷水箱为容器 xff0c 并使用PID控制算法来调整水箱中500ml纯净水的温度 水温可以在一定范围内人为设定 xff0c 并能实现在下限温度
  • 基于51单片机的数字电流电压表

    1 简述 本文介绍了基于STC89C52单片机为核心 xff0c 分别以ACS712 05芯片和串联分压电路为为电流检测和电压检测电路 xff0c 并通过AD0809数模转换芯片对电压信号进行采集和转换 xff0c 传输给单片机进行处理 x
  • OpenStack快速入门

    一 登陆OpenStack 查看用户名和密码 查看文件 用户名admin和demo 登录 页面显示 修改密码 点击设置 gt 更改密码 创建和操作虚拟机实例 xff08 一 xff09 创建虚拟机实的前提 创建虚拟机实例的前提条件 1 实例
  • vnc view远程登录Linux

    转自http blog sina com cn s blog 49c306b201011had html 尽管我们可以使用 SSH连接远程通过字符界面来操作Linux xff0c 但是对于更多熟悉图形人来说是很不方便的 xff0c 因此开启
  • 【Python基础】之装饰器

    这是我初次接触装饰器 xff0c 先从初学者的角度介绍装饰器 xff0c 关于装饰器的应用场景举例 xff0c 后面再补充 1 装饰器的作用 装饰器可以让一个函数在不做任何变动的情况下新增额外的功能 如下代码 xff0c func name
  • Sonic simple服务中设备图片、测试用例运行异常图片、失败录像路径映射配置

    使用docker ps查看容器信息 使用docker exec it a2d69c075875 sh进入容器 xff0c 并查看容器文件 相关文件夹说明 xff1a imageFiles xff1a 测试用例运行截图信息 keepFiles
  • ubuntu vmware 虚拟网络编辑 ping 外网不通问题

    内网环境在192 168 1 1 网段 虚拟机想要ssh 接入 xff0c 并且可以上网 使用桥接方式和NAT方式都可以 互ping xff0c 但是上网遇到了问题 NAT解决方法如下 xff0c 桥接方式随后再研究 NAT 模式下子网IP
  • 深入解读相机矩阵

    在这片文章里 xff0c 你将了解到以下内容 xff1a 1 相机的针孔模型 2 相机矩阵的概念 3 相机内参的含义 4 相机外参的含义 1 相机针孔模型 针孔模型是相机成像的基础模型 xff0c 是理解后续相机矩阵内容的基础 下图描述了基
  • python 循环输入,用户输入回车结束

    输入的回车会被视为空字符 xff0c 可以用a 61 61 39 39 来作为结束循环的标志 n 61 while 1 a 61 input if a 61 61 39 39 break else n append a print n
  • OpenvSwitch 子项目 OVN 功能介绍(一)

    众所周知 xff0c OpenvSwitch 以其丰富的功能和不错的性能 xff0c 已经成为 Openstack 部署中最受欢迎的虚拟交换机 由于 Openstack Neutron 的架构引入了一些性能问题 xff0c 比如 neutr
  • SDN网络中的转发数据和数据传输

    数据驱动的网络 从数据驱动的角度来看网络 xff0c 会发现一张现实中的网络存在着各种数据 设计和管理一张网络 xff0c 主要是设计数据 xff0c 存储数据 xff0c 管理数据和分析数据 网络数据的规模 复杂度和变化速度 xff0c