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

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面

  • 一、现代计算机网络控制平面概述
    • 1.1 与数据平面、管理平面的关系
    • 1.2 控制平面的发展历程
  • 二、控制平面的关键技术剖析
    • 2.1 网络层协议
      • 2.1.1 OSPF协议
      • 2.1.2 BGP协议
    • 2.2 SDN控制平面技术
      • 2.2.1 SDN架构与原理
      • 2.2.2 OpenFlow协议
      • 2.2.3 SDN控制器

在这里插入图片描述

一、现代计算机网络控制平面概述

控制平面是计算机网络架构中负责管理网络设备通信与数据转发路径的核心部分,通过执行路由决策、网络拓扑管理、流量调控等关键职能,依据网络实时状态制定并执行策略,为网络数据的高效、准确、可靠传输提供保障,满足不同用户和应用场景的多样化需求,在计算机网络中起着无可替代的重要作用。

1.1 与数据平面、管理平面的关系

在计算机网络的架构体系中,控制平面并非孤立存在,而是与数据平面、管理平面紧密协作,共同构建起一个高效、稳定且可靠的网络运行环境。这三个平面相互依存、相互制约,各自承担着独特的功能,却又通过紧密的交互与协同,实现了网络的整体目标。

在这里插入图片描述

控制平面与数据平面之间存在着明确的分工与协作关系。数据平面,犹如网络中的“执行者”,负责实际的数据转发操作,它按照控制平面所制定的规则,将数据包准确无误地从源节点传输至目标节点。而控制平面则扮演着“指挥官”的角色,为数据平面提供精确的转发规则。在传统网络架构中,路由器的控制平面通过运行路由协议,如开放最短路径优先(OSPF)协议,收集网络拓扑信息,并计算出最佳的路由路径。这些路由信息会被转化为转发表项,下发给数据平面。数据平面在接收到数据包后,依据转发表中的规则,迅速做出转发决策,将数据包转发至下一跳节点。在软件定义网络(SDN)架构中,这种分工协作关系体现得更为明显。SDN的控制平面通过南向接口协议,如OpenFlow协议,与数据平面中的交换机进行通信。控制平面能够根据网络的实时状态和用户需求,灵活地生成流表项,并下发给交换机。交换机则严格按照流表中的规则,对数据包进行处理和转发。这种集中式的控制方式,使得控制平面能够更加精准地掌控数据平面的行为,实现对网络流量的精细化调度。

控制平面与管理平面在网络管理过程中协同合作,共同保障网络的稳定运行。管理平面主要负责网络的整体管理与监控工作,包括设备配置管理、性能监测、故障管理以及安全管理等诸多方面。而控制平面则为管理平面提供了关键的网络状态信息和控制能力。管理平面通过与控制平面的交互,能够获取网络的拓扑结构、路由信息以及流量状态等重要数据,从而对网络的运行状况有一个全面且清晰的了解。基于这些信息,管理平面可以制定出合理的网络管理策略,并将这些策略传达给控制平面。控制平面在接收到管理平面的指令后,会对网络进行相应的调整和优化。在网络性能监测方面,管理平面可以设定性能指标的阈值,如带宽利用率、延迟等。当控制平面监测到网络性能指标超出阈值时,会及时将这一情况反馈给管理平面。管理平面则会根据具体情况,指示控制平面采取相应的措施,如调整路由路径、进行流量整形等,以确保网络性能恢复到正常水平。在网络安全管理方面,管理平面制定安全策略,如访问控制列表(ACL)等。控制平面会根据这些策略,在数据平面中实施相应的安全控制措施,阻止非法流量的传输,保障网络的安全。

1.2 控制平面的发展历程

在这里插入图片描述

在早期的传统网络中,路由器控制模式占据主导地位。在这种模式下,每台路由器都独立运行着路由协议,如RIP(路由信息协议)和OSPF(开放最短路径优先)等。这些协议赋予路由器收集周边网络拓扑信息、计算路由路径以及维护转发表的能力。以RIP协议为例,它基于距离向量算法,路由器定期向相邻路由器发送自身的路由表信息,相邻路由器接收到信息后,会根据跳数来更新自己的路由表。每台路由器都如同一个独立的决策者,在各自的小范围内进行路由决策,这种分散式的控制方式在网络规模较小时,能够较为有效地实现网络的连通性。然而,随着网络规模的不断扩张,这种模式的局限性逐渐显现。由于每台路由器都需要独立进行复杂的路由计算和拓扑信息维护,网络的管理成本急剧增加,路由收敛速度也变得极为缓慢。当网络拓扑发生变化时,例如链路故障或新链路的添加,路由器之间需要花费较长时间来同步和更新路由信息,这在一定程度上会导致网络性能的下降,甚至可能引发网络拥塞等问题。

在这里插入图片描述

为了突破传统路由器控制模式的瓶颈,逻辑集中式控制模式应运而生,软件定义网络(SDN)便是这一模式的典型代表。SDN的核心创新在于将网络的控制平面与数据平面进行了彻底分离。在SDN架构中,控制平面被集中到一个或多个控制器上,这些控制器宛如网络的“超级大脑”,负责收集全网的拓扑信息,依据网络的实时状态和用户需求,制定统一的路由策略,并将这些策略以流表的形式下发给数据平面中的交换机。OpenFlow协议作为SDN南向接口的重要协议,为控制器与交换机之间的通信搭建了桥梁。控制器通过OpenFlow协议,能够精确地控制交换机的转发行为,实现对网络流量的灵活调度。当网络中出现流量拥塞时,控制器可以实时感知到拥塞的位置和程度,然后迅速调整流表项,将部分流量引导至其他空闲链路,从而有效地缓解拥塞。这种逻辑集中式控制模式,使得网络的管理变得更加集中化和智能化,网络管理员可以通过控制器对整个网络进行全局把控,大大提高了网络的管理效率和灵活性。

二、控制平面的关键技术剖析

2.1 网络层协议

2.1.1 OSPF协议

开放最短路径优先(OSPF)协议作为一种链路状态路由协议,在自治系统内部的路由选择中发挥着关键作用,具有诸多显著特点。

在这里插入图片描述

区域划分是OSPF协议的一大特色。它将自治系统划分为多个区域,每个区域都有其独特的标识。其中,骨干区域(Area 0)如同网络的主干道,负责连接其他非骨干区域,并在区域之间传递链路状态信息。在一个大型跨国企业的网络中,其分布在全球各地的分支机构可被划分为不同的非骨干区域,而骨干区域则确保了这些区域之间的高效通信。通过区域划分,减少了每个路由器需要维护的链路状态信息数量,从而降低了路由表的规模和复杂度,提高了网络的可管理性和稳定性。当某一非骨干区域内的网络拓扑发生变化时,该区域内的路由器会先在本区域内进行路由计算和更新,只有涉及到区域间通信的信息才会传递到骨干区域,进而减少了对整个网络的影响范围,提高了网络的收敛速度。

链路状态通告(LSA)是OSPF协议的核心机制之一。网络中的每个路由器都会收集其周边链路的状态信息,包括链路的带宽、延迟、可靠性等,并将这些信息封装成LSA,然后通过洪泛的方式在所属区域内进行广播。当一个路由器收到其他路由器发送的LSA时,它会将其更新到自己的链路状态数据库(LSDB)中,从而确保每个路由器都能拥有整个区域的完整拓扑信息。在一个园区网络中,当新增一条链路连接两座建筑物内的路由器时,相关路由器会立即生成包含该链路信息的LSA,并在园区网络所属区域内进行广播,使得其他路由器能够及时知晓网络拓扑的变化。

快速收敛是OSPF协议的重要优势。由于每个路由器都持有完整的区域拓扑信息,当网络拓扑发生变化时,如链路故障或新增链路,路由器能够迅速感知到这一变化,并基于Dijkstra算法重新计算最短路径。在一个数据中心网络中,若某条服务器与交换机之间的链路出现故障,运行OSPF协议的路由器能够在极短的时间内重新计算路由,将流量切换到其他可用链路,确保数据的不间断传输,大大提高了网络的可靠性和稳定性。

2.1.2 BGP协议

BGP的主要作用是在不同自治系统的边界路由器之间交换路由信息,从而构建起全球范围内的互联网路由网络。在互联网的架构中,各个互联网服务提供商(ISP)都拥有自己的自治系统,BGP使得这些自治系统能够相互通信,实现数据的跨网络传输。当一个用户在国内访问国外的网站时,数据需要经过多个不同ISP的自治系统,BGP协议负责在这些自治系统的边界路由器之间传递路由信息,确保数据能够准确无误地到达目标网站所在的网络。

路由信息通告是BGP的核心功能之一。BGP通过建立TCP连接,在边界路由器之间交换BGP路由更新消息。这些消息包含了目的网络的可达性信息以及相关的路径属性。当一个自治系统发现了一条新的到达某目的网络的路径时,它会将该信息封装在BGP路由更新消息中,并发送给与之相邻的自治系统的边界路由器。在一个跨国企业的网络中,其位于不同国家的分支机构通过不同的ISP接入互联网。当其中一个分支机构的网络发生变化,发现了一条新的更优的访问总部网络的路径时,该分支机构所在自治系统的边界路由器会将这条新路径的信息通过BGP路由更新消息发送给相邻自治系统的边界路由器,从而实现路由信息的传播。

在这里插入图片描述

路径属性是BGP协议的重要组成部分,它为路由决策提供了丰富的信息。常见的路径属性包括起源(Origin)、自治系统路径(AS - Path)、下一跳(Next - Hop)、MED(Multi - Exit - Discriminator)等。起源属性用于标识路由信息的来源,是通过IGP(内部网关协议)发现的,还是通过EGP(外部网关协议)学习到的,亦或是通过其他方式引入的。自治系统路径属性记录了路由信息经过的所有自治系统的编号,这使得路由器能够避免路由环路的产生。下一跳属性则指定了数据包在转发到目的网络时的下一个路由器的地址。MED属性用于在多个自治系统向同一个目的网络提供多条路径时,影响相邻自治系统的路由选择,通常数值越小表示路径越优。在一个复杂的网络环境中,当存在多个自治系统都可以到达某一目的网络时,路由器会根据这些路径属性进行综合判断,选择最优的路径进行数据转发。

策略路由是BGP协议的一大优势,它允许网络管理员根据特定的策略来控制路由的选择和流量的转发。网络管理员可以根据业务需求、网络拓扑结构以及与其他自治系统的商业合作关系等因素,制定灵活的路由策略。在一个企业网络中,为了确保关键业务的服务质量,网络管理员可以配置BGP策略,使得关键业务的流量优先通过与某一ISP建立的高速链路进行传输,而普通业务流量则可以通过其他链路进行转发。这样可以有效地保障关键业务的带宽需求和低延迟要求,提高业务的可靠性和用户体验。

2.2 SDN控制平面技术

2.2.1 SDN架构与原理

软件定义网络(SDN)作为网络领域的创新架构,其核心特性在于控制平面与数据平面的清晰分离,这种独特的设计理念为网络带来了前所未有的灵活性与可编程性。

SDN将控制平面从网络设备中剥离出来,集中到一个或多个控制器上。这些控制器宛如网络的“智慧大脑”,掌控着全局的网络信息,负责收集网络拓扑、链路状态以及流量统计等关键数据。通过对这些信息的深度分析与整合,控制器能够依据网络的实时需求,制定出精准的转发策略。在一个大型数据中心网络中,当多台服务器同时面临大量数据请求时,SDN控制器可以实时感知各服务器的负载情况以及网络链路的带宽使用状态,然后根据预先设定的规则,合理调配网络流量,将请求分配到负载相对较低且链路带宽充足的服务器上,确保数据的高效传输。

在这里插入图片描述

集中式控制是SDN架构的一大显著优势。借助集中式的控制器,网络管理员能够从全局视角对整个网络进行统一管理和灵活配置。这意味着管理员只需在控制器上进行操作,便可轻松实现对网络拓扑的动态调整、路由策略的优化以及流量的精细化调度,无需再像传统网络那样,逐个对网络设备进行繁琐的配置。当网络中需要新增一个子网时,管理员只需在SDN控制器上进行简单的配置操作,控制器便能自动将相关的配置信息下发到数据平面的交换机上,实现子网的快速接入和网络的无缝扩展。这种集中式控制方式大大提高了网络管理的效率,降低了管理成本,使得网络能够更加迅速地响应业务需求的变化。

开放接口是SDN架构的另一大亮点。SDN通过定义标准化的南向接口和北向接口,为网络的可编程性提供了有力支持。南向接口,如OpenFlow协议,实现了控制器与数据平面设备之间的通信,使得控制器能够对交换机等设备进行精确的控制,灵活地定义数据包的转发规则。而北向接口则为上层应用与控制器之间的交互搭建了桥梁,开发者可以利用北向接口提供的API,根据不同的业务需求,开发出各种定制化的网络应用程序。在智能交通系统中,开发者可以基于SDN的北向接口,开发出专门用于交通流量监测与调控的应用程序。该程序可以实时获取道路上的车辆流量信息,并将这些信息传递给SDN控制器。控制器根据这些信息,通过南向接口对网络中的交换机进行控制,调整网络流量的转发路径,确保交通数据的实时、准确传输,从而实现对交通流量的智能调控。

2.2.2 OpenFlow协议

OpenFlow协议在SDN架构中占据着核心地位,它作为SDN南向接口的关键协议,肩负着控制器与数据平面设备之间通信的重任,为实现SDN的创新理念提供了坚实的技术支撑。

流表是OpenFlow协议的核心数据结构,它犹如数据平面设备的“行动指南”,决定了数据包的转发路径和处理方式。流表由一系列的流表项组成,每个流表项都包含了精确的匹配字段和相应的动作。匹配字段涵盖了数据包的多个关键属性,如源IP地址、目的IP地址、源端口、目的端口、协议类型等。当数据平面设备接收到一个数据包时,会依据流表中的匹配字段,对数据包进行逐一匹配。在一个企业网络中,若流表中存在一条流表项,其匹配字段设置为源IP地址为192.168.1.0/24,目的IP地址为10.0.0.0/8,协议类型为TCP,动作设置为将数据包转发到端口3。当设备接收到一个源IP地址为192.168.1.5,目的IP地址为10.0.0.10,协议类型为TCP的数据包时,便会与该流表项成功匹配,并按照动作指示,将数据包转发到端口3。

动作则定义了设备在匹配到数据包后应执行的具体操作,常见的动作包括转发到指定端口、丢弃数据包、修改数据包的某些字段等。除了上述简单的转发动作外,还可以进行更为复杂的操作。在网络安全防护场景中,可以设置流表项,当匹配到来自特定恶意IP地址的数据包时,将其直接丢弃,从而有效阻止恶意流量的入侵;或者对数据包的源IP地址进行修改,实现网络地址转换(NAT)功能,隐藏内部网络的真实IP地址,增强网络的安全性。

OpenFlow协议支持多种消息类型,这些消息在控制器与数据平面设备之间传递着丰富的信息,确保了双方的高效通信和协同工作。其中,配置消息用于控制器对数据平面设备的基本配置,如设置设备的端口状态、流表的最大容量等。在网络部署初期,控制器可以通过配置消息,将数据平面交换机的某个端口设置为开启状态,并设置其流表最大容量为1000条流表项,以满足网络的基本运行需求。状态消息用于设备向控制器汇报自身的运行状态,包括端口的流量统计信息、流表的使用情况等。交换机可以定期向控制器发送状态消息,汇报其各个端口的实时流量,以便控制器及时了解网络的流量分布情况,为后续的流量调度提供依据。

在这里插入图片描述

在实际的网络通信过程中,当数据平面设备接收到一个数据包,且在本地流表中未找到匹配的流表项时,会通过Packet - In消息将数据包发送给控制器。控制器在接收到Packet - In消息后,会根据网络的全局信息和预先设定的策略,为该数据包计算出最佳的转发路径,并生成相应的流表项。然后,控制器通过Flow - Mod消息将这些流表项下发到数据平面设备,设备在接收到Flow - Mod消息后,将新的流表项添加到本地流表中。当下一次接收到相同类型的数据包时,便可以直接依据本地流表中的流表项进行转发,无需再向控制器发送Packet - In消息,从而提高了数据包的转发效率。

2.2.3 SDN控制器

SDN控制器作为SDN架构的核心组件,犹如网络的“指挥中枢”,肩负着众多关键功能,对网络的稳定运行和高效管理起着决定性作用。

网络拓扑管理是SDN控制器的重要职责之一。控制器通过与数据平面设备进行持续的通信,能够实时收集网络中的拓扑信息,包括设备的连接关系、链路的状态等。在此基础上,控制器能够构建出一幅精确、实时的网络拓扑图。在一个复杂的园区网络中,当新的交换机接入网络或者现有链路的状态发生变化时,SDN控制器能够迅速感知到这些变化,并及时更新网络拓扑图。这种实时的拓扑管理能力,使得控制器能够全面了解网络的结构,为后续的路由计算和流量调度提供了准确的基础信息。

路由计算是SDN控制器的核心功能之一。基于所掌握的网络拓扑信息,控制器能够运用先进的路由算法,如最短路径算法、流量工程算法等,为数据包计算出最优的传输路径。在一个大型数据中心网络中,当有多条链路可供选择时,控制器可以根据链路的带宽、延迟、拥塞程度等因素,综合运用路由算法,计算出一条既能满足数据传输需求,又能优化网络资源利用的最佳路径。通过这种精确的路由计算,能够确保数据在网络中高效、稳定地传输,避免因路由选择不当导致的网络拥塞和性能下降。

流表下发是SDN控制器实现对数据平面设备控制的关键手段。控制器在完成路由计算后,会将计算得到的路由信息转化为流表项,并通过南向接口协议(如OpenFlow协议)将这些流表项下发到相应的数据平面设备。在一个企业网络中,当控制器计算出某个部门的数据包需要通过特定的路径进行转发时,它会生成包含该转发路径信息的流表项,并将其下发到相关的交换机上。交换机在接收到流表项后,会按照流表的指示对数据包进行转发,从而实现控制器对网络流量的精确控制。

相关文章:

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...

Golang概述

文章目录 1. 什么是程序2. Go语言的诞生小故事2.1 Go 语言的核心开发团队--三个大牛2.2 Google 创造 Golang 的原因2.3 Golang 的发展历程 3. Golang 的语言的特点 1. 什么是程序 程序:就是完成某个功能的指令的集合。画一个图理解: 2. Go语言的诞生小故…...

【STM8S】STM8S之IIC从机

本文最后修改时间:2018年10月30日 18:48 一、本节简介 本文介绍STM8S系列如何使用IIC从机接收来自IIC主机的数据。 二、实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8s003f3p6开发板 仿真器:ST-LINK 库函数版本&…...

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号: 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口: 在百度智能云开放平台中,找到文心一言API的详情页,了解提供的API接口类型(如云端API、移动端API、离线…...

实战:FRP内网穿透部署-支持ssh、web访问

目录 1 准备工作2 公网服务器部署server端2.1 frps.ini配置 3 内网客户端部署client端3.1 frpc.ini配置(内网服务器01)3.2 frpc.ini配置(内网服务器02) 4 服务启动脚本4.1 公网服务器 server4.2 内网服务器 client 2 systemctl常见…...

基于Web的宠物医院看诊系统设计与实现(源码+定制+开发)在线预约平台、宠物病历管理、医生诊疗记录、宠物健康数据分析 宠物就诊预约、病历管理与健康分析

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor:3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…...

使用Flink-JDBC将数据同步到Doris

在现代数据分析和处理环境中,数据同步是一个至关重要的环节。Apache Flink和Doris是两个强大的工具,分别用于实时数据处理和大规模并行处理(MPP)SQL数据库。本文将介绍如何使用Flink-JDBC连接器将数据同步到Doris。 一、背景介绍…...

【深度学习】自编码器(Autoencoder, AE)

自编码器(Autoencoder, AE)是一种无监督学习模型,主要用于特征提取、数据降维、去噪和生成模型等任务。它的核心思想是通过将输入压缩到一个低维的潜在空间表示(编码过程),然后再从这个潜在表示重构输入&am…...

跨专业毕业论文写作

跨专业毕业论文写作是一项具有挑战性的任务,但通过合理的规划和方法,你可以顺利完成这篇论文。以下是一些关键步骤和建议,帮助你撰写一篇高质量的跨专业毕业论文。 一、确定研究方向和课题 选择与本科专业相关或感兴趣的研究方向:…...

在 Go语言中一个字段可以包含多种类型的值的设计与接种解决方案

在 Go 中,如果你希望一个字段可以包含多种类型的值,你可以使用以下几种方式来实现: ### 1. **使用空接口 (interface{})** Go 的空接口 interface{} 可以接受任何类型的值,因此,你可以将字段定义为一个空接口&#x…...

为AI聊天工具添加一个知识系统 之32 三“中”全“会”:推理式的ISA(父类)和IOS(母本)以及生成式CMN (双亲委派)之1

本文要点和问题 要点 三“中”全“会”:推理式的ISA的(父类-父类源码)和IOS的(母本-母类脚本)以及生成式 CMN (双亲委派-子类实例)。 数据中台三端架构的中间端(信息系统架构ISA &#xff1a…...

手撕Transformer -- Day6 -- DecoderBlock

手撕Transformer – Day6 – DecoderBlock 目录 手撕Transformer -- Day6 -- DecoderBlockTransformer 网络结构图DecoderBlock 代码Part1 库函数Part2 实现一个解码器Block,作为一个类Part3 测试 参考 Transformer 网络结构图 Transformer 网络结构 DecoderBlock 代…...

Docker常用命令大全

Docker容器相关命令: 创建并启动容器: docker run:创建一个新的容器并运行一个命令。例如:docker run -d -p 8080:80 nginx这将后台(-d)运行一个Nginx容器,并映射宿主机的8080端口到容器的80端口。 列出容器&#x…...

【Linux探索学习】第二十五弹——动静态库:Linux 中静态库与动态库的详细解析

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在 Linux 系统中,静态库和动态库是开发中常见的两种库文件类型。它们在编译、链接、内存管理以及程序的性能和可维护性方面有着…...

Vue 实现当前页面刷新的几种方法

以下是 Vue 中实现当前页面刷新的几种方法&#xff1a; 方法一&#xff1a;使用 $router.go(0) 方法 通过Vue Router进行重新导航&#xff0c;可以实现页面的局部刷新&#xff0c;而不丢失全局状态。具体实现方式有两种&#xff1a; 实现代码&#xff1a; <template&g…...

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点&#xff1a; 是一个用于Python的MySQL数据库驱动程序&#xff0c;用于与MySQL数据库进行交互。 依赖于MySQL的本地库&#xff0c;因此在安装时需要确保系统上已安装了必要的依赖项&#xff0c;如libmysqlclient-dev等。 性能较好&#xff0c…...

【可持久化线段树】 [SDOI2009] HH的项链 主席树(两种解法)

文章目录 1.题目描述2.思路3.解法一解法一代码 4.解法二解法二代码&#xff08;版本一&#xff09;解法二代码&#xff08;版本二&#xff09; 1.题目描述 原题&#xff1a;https://www.luogu.com.cn/problem/P1972 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳…...

【C语言】线程----同步、互斥、条件变量

目录 3. 同步 3.1 概念 3.2 同步机制 3.3 函数接口 1. 同步 1.1 概念 同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情 1.2 同步机制 通过信号量实现线程间的同步 信号量&#xff1a;通过信号量实现同步操作&#xff1b;由信号量来决定…...

15. 三数之和【力扣】--三指针

三数之和 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#x…...

大数据学习(35)- spark- action算子

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

vim使用指南

&#x1f3dd;️专栏&#xff1a;计算机操作系统 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 一、Vim 的基本概念 1.Vim 的主要模式&#xff1a; 1.1普通模式 (Normal Mode) 1.2插入…...

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像&#xff0c;这个镜像可以是从docker拉取&#xff0c;例如&#xff1a;现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…...

基于Java+SpringBoot+Vue的前后端分离的在线BLOG网

基于JavaSpringBootVue的前后端分离的在线BLOG网 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f3…...

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…...

Java学习教程,从入门到精通,JDBC驱动程序类型及语法知识点(91)

JDBC驱动程序类型及语法知识点 一、JDBC驱动程序类型 JDBC驱动程序主要有以下四种类型&#xff1a; 1. Type 1&#xff1a;JDBC - ODBC桥驱动程序&#xff08;JDBC - ODBC Bridge Driver&#xff09; 特点&#xff1a;这种驱动程序是Java与ODBC&#xff08;Open Database C…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator&#xff0c;点击Environment&#xff0c;再点击new(new是我下载anaconda的文件夹名称)&#xff0c;然后点击创建 点击绿色按钮&#xff0c;并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具&#xff0c;在上篇…...

3D目标检测数据集——Nusence数据集

链接地址 [官网] nuScenes[arXiv] nuScenes: A multimodal dataset for autonomous driving[GitHub] nuScenes devkitnuScenes devkit教程数据集概述 2.1 数据采集 2.1.1 传感器配置 nuScenes的数据采集车辆为Renault Zoe迷你电动车,配备6个周视相机&#x...

网站收录入口提交的方法有哪些(网站收录的方式都有哪些)

网站被搜索引擎收录是获得流量和曝光的重要前提&#xff0c;以下为你介绍常见的网站收录方式&#xff1a; 搜索引擎提交入口 各大搜索引擎都设有专门的网站收录入口&#xff0c;供站长提交网站。例如百度搜索资源平台、谷歌搜索控制台等。以百度为例&#xff0c;在百度搜索资…...

移动端H5缓存问题

移动端页面缓存问题是指页面的静态资源&#xff08;如图片、JS 和 CSS 文件&#xff09;在浏览器中被缓存后&#xff0c;用户在下次访问时可以直接从本地获取缓存数据&#xff0c;而不需要每次都从服务器重新获取&#xff0c;不过这样可能会导致页面不能正确地更新或者加载最新…...

11-1.Android 项目结构 - androidTest 包与 test 包(单元测试与仪器化测试)

androidTest 包与 test 包 在 Android 项目中&#xff0c;androidTest 包与 test 包用于存放不同类型的测试代码的 1、测试类型 &#xff08;1&#xff09;androidTest 包 主要用于存放单元测试&#xff08;Unit Tests&#xff09;代码 单元测试是针对应用程序中的独立模块…...

计算机网络(五)——传输层

一、功能 传输层的主要功能是向两台主机进程之间的通信提供通用的数据传输服务。功能包括实现端到端的通信、多路复用和多路分用、差错控制、流量控制等。 复用&#xff1a;多个应用进程可以通过同一个传输层发送数据。 分用&#xff1a;传输层在接收数据后可以将这些数据正确分…...

ZCC9159 -7V 300mA 超低功耗高速 LDO

功能描述 ZCC9195是一款超低功耗并具有快速响应、关断快速放电功能的高速LDO。静态电流低至 0.8uA&#xff0c;输出电流最大为300mA。 ZCC9195具有输出过流保护、输出短路保护、温度保护等功能&#xff0c;确保芯片在异常工作条件 下不会损坏。 ZCC9195只需要1uF的陶瓷电容即…...

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…...

【C语言算法刷题】第7题

题目描述 一个XX产品行销总公司&#xff0c;只有一个boss&#xff0c;其有若干一级分销&#xff0c;一级分销又有若干二级分销&#xff0c;每个分销只有唯一的上级分销。 规定&#xff0c;每个月&#xff0c;下级分销需要将自己的总收入&#xff08;自己的下级上交的&#xf…...

BERT与CNN结合实现糖尿病相关医学问题多分类模型

完整源码项目包获取→点击文章末尾名片&#xff01; 使用HuggingFace开发的Transformers库&#xff0c;使用BERT模型实现中文文本分类&#xff08;二分类或多分类&#xff09; 首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类 然后手动实现B…...

RocketMQ消息发送---源码解析

我们知道rocketMQ的消息发送支持很多特性&#xff0c;如同步发送&#xff0c;异步发送&#xff0c;oneWay发送&#xff0c;也支持超时机制&#xff0c;回调机制&#xff0c;并且能够保证消息的可靠性和消息发送的限流&#xff0c;底层使用netty框架等等&#xff0c;如此多的特性…...

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化&#xff08;Lasso&#xff09;2.2 L2正则化&#xff08;Ridge&#xff09;2.3 弹性网络正则化&#xff08;Elas…...

如何开放2375和2376端口供Docker daemon监听

Linux (以 Ubuntu 为例) 1. 修改 Docker 配置文件 打开 Docker 的配置文件 /etc/docker/daemon.json。如果该文件不存在&#xff0c;则可以创建一个新的。 bash sudo nano /etc/docker/daemon.json在配置文件中添加以下内容&#xff1a; json {"hosts": ["un…...

Vue.js组件开发-如何实现路由懒加载

在Vue.js应用中&#xff0c;路由懒加载是一种优化性能的技术&#xff0c;它允许在需要时才加载特定的路由组件&#xff0c;而不是在应用启动时加载所有组件。这样可以显著减少初始加载时间&#xff0c;提高用户体验。在Vue Router中&#xff0c;实现路由懒加载非常简单&#xf…...

rclone,云存储备份和迁移的瑞士军刀,千字常文解析,附下载链接和安装操作步骤...

一、什么是rclone&#xff1f; rclone是一个命令行程序&#xff0c;全称&#xff1a;rsync for cloud storage。是用于将文件和目录同步到云存储提供商的工具。因其支持多种云存储服务的备份&#xff0c;如Google Drive、Amazon S3、Dropbox、Backblaze B2、One Drive、Swift、…...

集成学习算法

目录 1.必要的导入 2.Bagging集成 3.基于matplotlib写一个函数对决策边界做可视化 4.总结图中结论 5.扩展说明 1.必要的导入 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals# Common imports import numpy as np…...

vue3之pinia学习

最近查看了pinia这个状态管理管理&#xff0c;想跟大家一起学习下&#xff0c;下面是我的个人理解&#xff0c;希望对大家有帮助&#xff0c;我们开始吧&#xff01; 第一步&#xff1a;安装pinia npm install pinia 第二步&#xff1a;创建pinia <script setup langts&…...

Flink (七): DataStream API (四) Watermarks

1. Event Time and Processing Time 1. 1 处理时间&#xff08;Processing time&#xff09; 处理时间是指执行相应操作的机器的系统时间。当流处理程序基于处理时间运行时&#xff0c;所有基于时间的操作&#xff08;如时间窗口&#xff09;将使用执行相应算子的机器的系统时…...

卷积神经05-GAN对抗神经网络

卷积神经05-GAN对抗神经网络 使用Python3.9CUDA11.8Pytorch实现一个CNN优化版的对抗神经网络 简单的GAN图片生成 CNN优化后的图片生成 优化模型代码对比 0-核心逻辑脉络 1&#xff09;Anacanda使用CUDAPytorch2&#xff09;使用本地MNIST进行手写图片训练3&#xff09;…...

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量&#xff1a;质量评估与改进策略 引言&#xff1a;数据质量的概念 在大数据时代&#xff0c;数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途&#xff0c;确保数据的准确性、完整性、一致性和及时性是数据质量的…...

GLM: General Language Model Pretraining with Autoregressive Blank Infilling论文解读

论文地址&#xff1a;https://arxiv.org/abs/2103.10360 参考&#xff1a;https://zhuanlan.zhihu.com/p/532851481 GLM混合了自注意力和masked注意力&#xff0c;而且使用了2D位置编码。第一维的含义是在PartA中的位置&#xff0c;如5 5 5。第二维的含义是在Span内部的位置&a…...

总结SpringBoot项目中读取resource目录下的文件多种方法

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

云原生第四次作业

下载 [rootopenEuler-1 ~]# wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz 压缩 配置实验环境 [rootopenEuler-1 httpd-2.4.46]# yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-d…...

day10_Structured Steaming

文章目录 Structured Steaming一、结构化流介绍&#xff08;了解&#xff09;1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型&#xff08;掌握&#xff09;1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…...