iptables 防火墙
目录
熟悉Linux防火墙的表,链结构
理解数据包匹配的基本流程
学会编写iptables规则
前言
在当今信息化时代,网络安全已成为企业和个人不可忽视的重要议题。随着网络攻击手段的不断升级,构建一个坚固的网络安全防线显得尤为迫切。在Linux系统中,iptables作为一款强大的防火墙工具,因其高度的灵活性和强大的功能,被广泛用于保护服务器免受未经授权的访问和恶意攻击。iptables 不仅能够在网络层对TCP/IP数据包进行精细的过滤和限制,还能够通过其复杂的规则系统实现多种网络策略。然而,iptables的配置相对复杂,需要深入理解其表、链结构以及数据包匹配流程。
本章将深入介绍iptables 防火墙的基础知识和配置方法,帮助读者从零开始掌握这一关键工具。通过本章的学习,读者将能够熟悉Linux防火墙的表、链结构,理解数据包匹配的基本流程,并掌握编写和管理iptables规则的方法。这将为读者在实际网络环境中部署和维护安全的Linux防火墙系统奠定坚实的基础。
一 Linux防火墙基础
We 网站 FTP 服务器、数据库系统等。那么,如何来保护这些服务器,过滤企业不需要的访问甚至是恶意的入侵呢?
将开始学习 Linux 系统中的防火墙-netfilter 和 iptables,包括防火墙的结构和匹配流程,以及如何编写防火墙规则。
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。
在许多安全技术资料中,netfilter 和iptables 都用来指 Linux 防火墙,往往使读者产生迷惑。netfilter 和iptables 的主要区别如下。
netfilter
指的是 Linux 内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,
属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
iptables
指的是用来管理 Linux 防火墙的命令程序,通常位于/sbin/iptables 目录下,属
于“用户态”(User Space,又称为用户空间)的防火墙管理体系。
正确认识 netfilter 和 iptables 的关系,有助于理解 Linux 防火墙的工作方式。后续课程内中将不再严格区分 netfilter 和 iptables,两者均可表示 Linux 防火墙。
1: iptables 的表。链结构
iptables 的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉netfilter 对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。为了更加方便地组织和管理防火墙规则,iptables 采用了“表”和“链”的分层结构,如下图所示。
其中,每个规则“表”相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表;在每个“表”容器内包括不同的规则“链”,根据处理数据包的不同时机划分为五种链;而决定是否过滤或处理数据包的各种规则,则是按先后顺序存放在各规则链中。
(1)规则表
为了从规则集的功能上有所区别,iptables 管理着四个不同的规则表,其功能分别由独立的内核模块实现。这四个表的名称、包含的链及各自的用途如下。
filter表
:filter 表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。
filter 表对应的内核模块为 iptable_filter,表内包含三个链,即INPUT、FORWARD、OUTPUT。
net表
:nat(Network Address Translation,网络地址转换)表主要用来修改数据包的IP地址、端口号等信息。nat 表对应的内核模块为 iptable_nat,表内包含三个链,即PREROUTING、
POSTROUTING, OUTPUT.
mangle表
:mangle 表用来修改数据包的 TOS(Type Of Service,服务类型)、TTL(Time To Live,
生存周期),或者为数据包设置Mark 标记,以实现流量整形、策略路由等高级应用。mangle表 对
应的内核模块为 iptable_mangle,表内包含五个链,即 PREROUTING、POSTROUTING、INPUT、OUTPUT、
FORWARD .
raw表
:raw 表是自1.2.9 以后版本的 iptables 新增的表,主要用来决定是否对数据包进行状态
跟踪。raw 表对应的内核模块为 iptable_raw,表内包含两个链,即 OUTPUT、PREROUTING。
在 iptables 的四个规则表中,mangle 表和 raw 表的应用相对较少。因此,本课程仅介绍 filter表和 nat 表的防火墙应用,关于 mangle、raw 表的使用,请参阅其他资料。
(2)规则链
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables 默认划分为五种不同的规则链。这五种链的名称、各自的介入时机如下。
INPUT 链: 当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。 OUTPUT 链 当防火墙本机向外发送数据包(出站)时,应用此链中的规则 FORWARD 当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则
PREROUTING 在对数据包做路由选择之前,应用此链中的规则 POSTROUTING 在对数据包做路由选择之后,应用此链中的规则。
其中,INPUT、OUTPUT 链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而 FORWARD、PREROUTING、POSTROUTING 链多用在“网络型防火墙”中,如使用 Linux 防火墙作为网关服务器,在公司内网与 Internet 之间进行安全控制。
2.数据包过滤的匹配流程
iptables 管理着四个默认表和五种链,各种防火墙规则依次存放在链中。那么当一个数据包到达防火墙以后,会优先使用哪一个表、哪一个链中的规则呢?数据包进出防火墙时的处理过程是怎样的?
(1)规则表之间的顺序
当数据包抵达防火墙时,将依次应用raw 表、mangle 表、nat 表和 filter 表中对应链内的规则(如果存在),应用顺序为 raw→mangle→nat→filter。
(2)规则链之间的顺序
根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序取决于数据包的流向,如下图 所示,具体表述如下。
入站数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING链处理(是否修改数据包地址
等),然后进行路由选择(判断该数据包应发往何处):如果数据包的目标地址是防火墙本机(如
Internet 用户访问网关的Web 服务端口),那么内核将其传递给 INPUT 链进行处理(决定是否允许
通过等),通过以后再交给系统上层的应用程序如httpd 服务器)进行响应。
转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING 链处理,然后再进行路由选择;
如果数据包的目标地址是其他外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给
FORWARD 链进行处理(允许转发或拦截、丢弃),最后交给 POSTROUTING链(是否修改数据包的地址
等)进行处理。
出站数据流向
防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先
进行路由选择,确定了输出路径后,再经由OUTPUT链处理,最后再交给 POSTROUTING 链(是否修改数据包的地址等)进行处理
(3)规则链内部各条防火墙规则之间的顺序
当数据包经过每条规则链时,依次按第一条规则、第二条规则 ..... 的顺序进行匹配和处理。链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则(使用LOG日志操作的规则除外,2.2.3 节会介绍),则不再检查本链内后续的其他规则。如果比对完整个链,也找不到与数据包相匹配的规则,就按照该规则链的默认策略进行处理。
二:编写防火墙规则
在使用iptables 防火墙之前,需要将firewalld防火墙先关闭掉,以避免产生影响。
1.启动iptables防火墙设置开机启动
2.基本语法,数据包控制类型
使用 iptables 命令管理、编写防火墙规则时,基本的命令格式如下所示。
iptables [ -t 表名 】 管理选项 【 连名 】 【 匹配条件 】 [-j 控制类型】 |
其中,表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter表;管理选项表示 iptables 规则的操作方式,如插入、增加、删除、查看等;匹配条件用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型
ACCEPT
允许数据包通过。
DROP
直接丢弃数据包,不给出任何回应信息。
REJECT
拒绝数据包通过,必要时会给数据发送端一个响应信息。
LOG
在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
则,拒绝(-j REJECT)发给本机的使用 ICMP 协议的数据包(-p icmp)。
防火墙规则的“匹配即停止”对于LOG 操作来说是一个特例,因为LOG 只是一种辅助动作,并没有
真正处理数据包。
下面介绍一个防火墙规则操作示例:在filter 表(-t filter)的 INPUT 链中插入(-I)一条规则,拒绝(-j REJECT)发给本机的使用 ICMP 协议的数据包(-p icmp)。上述操作产生的直接效果是其他主机无法 ping 通本机。
3.添加,查看,删除规则等基本操作
在熟练编写各种防火墙规则之前,首先需要掌握如何查看规则、添加规则、删除规则、清空链内规则等基本操作。下面将介绍 iptables 命令中常用的几个管理选项,如下表所示。
其中,添加、删除、清空和查看规则是最常见的管理操作,下面通过一些规则操作示例来展示相关选项的使用。
(1)添加新的规则
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。例如,若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中“-p协议名”作为匹配条件)。
当使用管理选项“-I”时,允许同时指定新添加规则的顺序号,未指定序号时默认作为第一条。例如,以下操作添加的两条规则将分别位于 filter 表的第一条、第二条(其中省略了“-tfilter”选项,默认使用 filter 表)。
(2)查看规则列表
查看已有的防火墙规则时,使用管理选项“-L”,结合“ -- line-numbers”选项还可显示各条规则
在链内的顺序号。例如,若要查看filter表 INPUT 链中的所有规则,并显示规则序号,可以执行以下
操作。
当防火墙规则的数量较多时,若能够以数字形式显示地址和端口信息,可以减少地址解析的环节,在一定程度上加快命令执行的速度。例如,若要以数字地址形式查看 filter 表INPUT 链中的所有规则,可以执行以下操作。
(3)删除。清空规则
删除一条防火墙规则时,使用管理选项“-D”。例如,若要删除 filter 表 INPUT 链中的第三条规则,可以执行以下操作。
清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT链中的所有规则,可以执行以下操作。
使用管理选项“-F”时,允许省略链名而清空指定表所有链的规则。例如,执行以下操作分别用来清空 filter 表、nat 表、mangle 表。
(4)设置默认策略
iptables 的各条链中,默认策略是规则匹配的最后一个环节一一当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃,OUTPUT 链的默认策略设为允许。
需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排,因此在其他规则之前或之后设置并无区别。
三:规则的匹配条件
在编与历火墙规则时,匹配条件的设置起看决定性的作用。只有清晰、准确地设置好匹配条件,防火墙才知道要对符合什么条件的数据包进行处理,避免“误杀”。对于同一条防火墙规则,可以指定多个匹配条件,表示这些条件必须都满足规则才会生效。根据数据包的各种特征,结合 iptables 的模块结构,匹配条件的设置包括三大类:通用匹配、隐含匹配、显式匹配。
1:通用匹配
通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。常见的通用匹配包括协议匹配、地址匹配、网络接口匹配。
(1)协议匹配
编写 iptables 规则时使用“-p协议名”的形式指定,用来检查数据包所使用的网络协议( -- protocol),如tcp、udp、icmp和all(针对所有 IP数据包)等,可用的协议类型存放于Linux系统的/etc/procotols 文件中。例如,若要丢弃通过 icmp 协议访问防火墙本机的数据包,允许转发经过防火墙的除 icmp 协议之外的数据包,可以执行以下操作。
(2) 地址匹配
编写 iptables 规则时使用“-s源地址”或“-d 目标地址”的形式指定,用来检查数据包的源地址( -- source)或目标地址( -- destination)。IP 地址、网段地址等都是可以接受的,但不建议使用主机名、域名地址(解析过程会影响效率)。例如,若要拒绝转发源地址为192.168.1.11 的数据,允许转发源地址位于 192.168.7.0/24 网段的数据,可以执行以下操作。
当遇到小规模的网络扫描或攻击时,封锁 IP 地址是比较有效的方式。例如,若检测到来自某个网段(如10.20.30.0/24)的频繁扫描、登录穷举等不良企图,可立即添加防火墙规则进行封锁。
(3)网络接口匹配
编写 iptables 规则时使用“-i接口名”和“-o接口名”的形式,用于检查数据包从防火墙的哪个接口进入或发出,分别对应入站网卡( -- in-interface)、出站网卡( -- out-interface)例如,若要丢弃从外网接口(ens33)访问防火墙本机且源地址为私有地址的数据包,可以执行以下操作。
2.隐含匹配
这种匹配方式要求以指定的协议匹配作为前提条件,相当于子条件,因此无法独立使用,其对应的功能由 iptables 在需要时自动(隐含)载入内核。常见的隐含匹配包括端口匹配、TCP标记匹配、ICMP 类型匹配。
(1)端口匹配
编写 iptables 规则时使用“ -- sport 源端口”或“ -- dport 目标端口”的形式,针对的协议为TCP 或 UDP,用来检查数据包的源端口( -- source-port)或目标端口( -- destination-port)。单个端口号或者以冒号“:”分隔的端口范围都是可以接受的,但不连续的多个端口不能采用这种方式。例如,若要允许为网段 192.168.4.0/24 转发 DNS 查询数据包,可以执行以下操作。
再例如,构建Vsftpd 服务器时,若要开放20、21端口,以及用于被动模式的端口范围为 24500~24600,可以参考以下操作设置防火墙规则。
(2)icmp 类型匹配
编写 iptables 规则时使用“ -- icmp-type ICMP类型”的形式,针对的协议为 ICMP,用来检查 ICMP数据包的类型( -- icmp-type)。ICMP 类型使用字符串或数字代码表示,如“Echo-Request”(代码为8)、“Echo-Reply”(代码为0)、“Destination-Unreachable”(代码为3),分别对应 ICMP协议的请求、回显、目标不可达。例如,若要禁止从其他主机 ping本机,但是允许本机 ping 其他主机,可以执行以下
关于可用的 ICMP 协议类型,可以执行“iptables -p icmp -h”命令,在帮助信息的最后部分列出了所有支持的类型。
3 显式匹配
这种匹配方式要求有额外的内核模块提供支持,必须手动以“-m模块名称”的形式调用相应的模块,然后方可设置匹配条件。添加了带显式匹配条件的规则以后,可以执行“1smodI grep xt_”命令查看到相关的内核扩展模块(如 xt_multiport、xt_iprange、xt_mac、xt_state)。常见的显式匹配包括多端口匹配、IP 范围匹配、MAC 地址匹配、状态匹配。
(1)多端口匹配
编写 iptables 规则时使用“-m multiport -- dports 端口列表”、“-m multiport -- sports 端口列表”的形式,用来检查数据包的源端口、目标端口,多个端口之间以逗号进行分隔。例如,若要允许本机开放 25、80、110、143端口,以便提供电子邮件服务,可以执行以下操作。
(2)IP 范围匹配
编写 iptables 规则时使用“-m iprange -- src-range IP 范围”、“-m iprange -- dst-rangeIP范围”的形式,用来检查数据包的源地址、目标地址,其中IP范围采用“起始地址-结束地址”的形式表示。例如,若要禁止转发源 IP 地址位于192.168.4.21 与 192.168.4.28 之间的 TCP数据包,可以执行以下操作。
(3)Mac地址匹配
编写 iptables 规则时使用“-m mac -- mac-source MAC 地址”的形式,用来检查数据包的源 MAC地址。由于MAC 地址本身的局限性,此类匹配条件一般只适用于内部网络。例如,若要根据 MAC 地址封锁主机,禁止其访问本机的任何应用,可以参考以下操作。
(4)状态匹配
编写 iptables 规则时使用“-m state -- state 连接状态”的形式,基于iptables 的状态跟踪机制用来检查数据包的连接状态(State)。常见的连接状态包括 NEW(与任何连接无关的)、ESTABLISHED(响应请求或者已建立连接的)和 RELATED(与已有连接有相关性的,如FTP数据连接)。例如,若要禁止转发与正常 TCP 连接无关的非 -- syn 请求数据包(如伪造的网络攻击数据包),可以执行以下作。
再例如,若只开放本机的Web 服务(80端口),但对发给本机的 TCP 应答数据包予以放行,其他入站数据包均丢弃,则对应的入站控制规则可参考以下操作。
总结:
介绍了iptables 防火墙在Linux系统中的应用与配置。首先,阐述了iptables 与netfilter的关系,明确了iptables作为用户态管理工具的角色。随后,深入解析了iptables的表、链结构,包括filter、nat、mangle和raw四个表及其各自包含的链,以及数据包在不同链中的处理流程。
在了解iptables基础结构后,进一步探讨了数据包过滤的匹配流程,包括规则表之间的顺序、规则链之间的顺序以及规则链内部各条规则之间的顺序。通过这一流程,读者可以清晰地理解数据包是如何在iptables防火墙中被处理和过滤的。
最后,介绍了如何编写和管理iptables规则,包括规则的添加、查看、删除和清空等基本操作,以及匹配条件的设置。通过丰富的示例,读者可以掌握如何根据实际需求编写有效的防火墙规则,以保护Linux 系统的网络安全。
相关文章:
iptables 防火墙
目录 熟悉Linux防火墙的表,链结构 理解数据包匹配的基本流程 学会编写iptables规则 前言 在当今信息化时代,网络安全已成为企业和个人不可忽视的重要议题。随着网络攻击手段的不断升级,构建一个坚固的网络安全防线显得尤为迫切。在Linux系统中,iptables作为一款…...
【厦门大学】DeepSeek大模型及其企业应用实践
DeepSeek大模型及其企业应用实践 前言1. 大模型:人工智能的前沿1.1 大模型的概念1.2 大模型的发展历程1.3 人工智能与大模型的关系1.4 大模型的分类 2. 大模型产品2.1 国外的大模型产品2.2 国内的大模型产品2.3 主流大模型“幻觉”评测 3. 大模型的行业应用3.1 自然…...
解锁智能制造:PLC远程下载如何让设备运维效率提升10倍?
一、2025年远程运维的三大变革驱动力 政策强制: 欧盟CE新规要求:2025年起工业设备必须具备远程审计接口 中国等保2.0:工业控制系统远程访问需达到三级防护 技术成熟: 5G专网边缘计算实现ms级响应 算法自动诊断PLC程序异常&#x…...
卷积神经网络CNN(李宏毅)
目录 怎么把一张影响当成一个模型输入? 同样的 pattern出现在图片不同的位置。 第三个问题:Pooling: 阿尔法Go是怎么下围棋的: CNN不能处理的问题 CNN专门用在影像辨识方面 怎么把一张影响当成一个模型输入? 一张…...
URL / GET请求 中文UTF-8编码JS转化
以长颈鹿为例 decodeURIComponent 将编码转为中文 encodeURIComponent 会对整个参数字符串转义(包括 :// 等符号)。 encodeURI 仅转义非合法 URL 字符(不转义 :/?& 等保留字符)。 decodeURIComponent("%E9%95%BF%E9…...
Flink 内部通信底层原理
Flink 集群内部节点之间的通信是用 Akka 实现,比如 JobManager 和 TaskManager 之间的通信。而 operator 之间的数据传输是用 Netty 实现。 RPC 框架是 Flink 任务运行的基础,Flink 整个 RPC 框架基于 Akka 实现。 一、相关概念 RPC(Remote Procedure Call) 概念 定义:…...
async-profiler火焰图找出耗CPU方法
事情起于开发应用对依赖的三方包(apache等等)进行了升级后(主要是升级spring),CPU的使用率较原来大幅提升,几个应用提升50%-100%。 查找半天,对比每次版本的cpu火焰图,看不出有什么…...
深入理解Qt状态机的应用
深入理解Qt状态机的应用 Chapter1 深入理解Qt状态机的应用(一)什么是有限状态机?状态机的组成应用示例交通信号控制灯系统简单在线购物流程系统 Qt状态机框架Qt状态机框架组成常用接口说明 应用示例源码 Chapter2 深入理解Qt状态机的应用&…...
Python入门安装和语法基础
1.Python简介 Python是解释型语言, ython就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写&am…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)
一、无覆盖和放弃 在基于磁贴的延迟呈现 (TBDR) 体系结构上呈现内容: Direct3D 11.1 中的呈现目标现在可以使用一组新的资源 API 来支持放弃行为。 开发人员必须了解此功能,并调用额外的 Discard () 方法,以在 TBDR 体系结构 (更高效地运行…...
如何分析服务器日志以追踪黑客攻击行为
分析服务器日志是追踪黑客攻击行为的关键手段。通过系统性地检查日志文件,可以发现异常访问模式、入侵痕迹和后门活动。以下是详细的日志分析方法: 一、重点日志文件定位 Web服务器日志 Nginx: /var/log/nginx/access.log(访问日志࿰…...
React 对state进行保留和重置
对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置,React 可以跟踪哪些 state 属于哪个组件。你可以控制在重新渲染过程中何时对 state 进行保留和重置。 开发环境:Reacttsantd 学习内容 React 何时选择保留或重置状态…...
EmbeddingBag介绍与案例
我们可以用一个具体的例子来说明 EmbeddingBagCollection 的核心作用和它如何处理用户特征。假设我们的用户特征包括 “item_id” 和 “cate_id” 两个字段,每个字段都有各自的离散取值,也就是一些整数 ID。为了让模型能处理这些离散数据,我们…...
css button 点击效果
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>button点击效果</title><style>#container {display: flex;align-items: center;justify-content: center;}.pushable {position: relat…...
Missashe考研日记-day22
Missashe考研日记-day22 1 专业课408 学习时间:3h学习内容: 先把昨天关于进程调度的课后习题做了,然后花了挺长时间预习OS的最最最最重要的一部分——同步与互斥问题,这部分大二上课的时候就懵懵懂懂的,得认真再领悟…...
二十、FTP云盘
1、服务端 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h>…...
SVM-RF回归预测matlab代码
数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例为8:1:1 模块化结构: 代码将整个流程模块化,使得代码更易于理解和维护。不同功能的代码块被组织成函数或者独立的模块,使得代码逻辑清晰,结构化程…...
Lombok @Builder 注解的进阶玩法:自定义 Getter/Setter 方法全攻略
大家好呀!👋 今天我们来聊聊 Java 开发中超级实用的 Lombok 库,特别是它的 Builder 注解。很多小伙伴都用过 Builder 来简化对象的创建,但你们知道吗?当我们需要自定义 getter/setter 方法时,Builder 也能玩…...
C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)
📘 本篇我们将结合之前的 SignalHub 与 Dispatcher 机制,构建一个适合 GUI 场景的响应式信号系统。以按钮点击为例,构建一个跨线程安全的事件响应系统,配合协程挂起/恢复,让 UI 编程也能更优雅易读。本篇以通俗方式讲解…...
HCIP(OSPF )(2)
OSPF 公共报文头部 版本(8bit):目前常用版本为 2,用于标识 OSPF 协议版本。不同版本在功能特性和报文格式上可能存在差异,高版本通常会修复旧版本的漏洞、扩展功能,如支持更多类型的网络拓扑、增强安全性等…...
zynq7020 ubuntu_base 跟文件系统
整体流程 制作 ubuntu_base 镜像运行 petalinux 构建的 ramdisk 系统用 ramdisk 系统把 ubuntu_base 镜像烧录到 emmc从 emmc 跟文件系统 启动内核 制作 ubuntu_base 镜像 制作 ubuntu_base 镜像 sudo apt-get install qemu-user-static # 安装 q…...
51、Spring Boot 详细讲义(八) Spring Boot 与 NoSQL
3、 Elasticsearch 集成 3.1 Elasticsearch 概述 3.1.1 Elasticsearch 的核心概念 Elasticsearch 是一个开源的分布式搜索引擎,主要用于实时数据检索和分析。它的核心功能包括全文检索、结构化查询和分析大规模数据。 分布式搜索引擎: Elasticsearch 将数据分布存储在多个…...
什么是分库分表?
分库分表是一种数据库的分布式架构设计策略,以下是详细介绍: 概念 • 随着互联网的发展,数据量呈爆炸式增长,单个数据库服务器可能难以应对海量数据的存储和访问压力。分库分表就是将原本庞大的数据库拆分成多个小的数据库&#…...
如何让别人访问到自己本地项目?使用内网穿透工具简单操作下实现公网连接!
本地搭建服务器的系统项目网络地址,在没有公网IP使用的情况下,如何让局域网外别人访问到自己本地网站和应用呢?这里介绍一种通用的内网发布公网访问,且简便操作的内网穿透实现方法。 一、什么是内网穿透? 1. 先了解内…...
第一篇:linux之虚拟环境与centos安装
第一篇:linux之虚拟环境与centos安装 文章目录 第一篇:linux之虚拟环境与centos安装一、vmware安装二、centos安装1、centos虚拟环境安装2、centos操作系统配置3、常见问题解决 一、vmware安装 我们想要运行linux,需要先安装一个虚拟软件&am…...
Redis List 的详细介绍
Redis List 的详细介绍 以下是 Redis List 的详细介绍,从基础命令、内部编码和使用场景三个维度展开: 一、基础命令 Redis List 支持双向操作(头尾插入/删除),适用于队列、栈等场景,以下是核心命令分类&a…...
docker占用磁盘100%
1. 立即清理方案 快速清理命令 bash 复制 # 停止Docker服务 sudo systemctl stop docker# 清理所有无用数据(包括未使用的镜像、容器、网络和卷) sudo docker system prune -a --volumes# 重启Docker sudo systemctl start docker 手动清理overlay2…...
20250417-vue-条件插槽
有时候我们需要根据内容是否被传入了插槽来渲染某些内容。 你可以结合使用 $slot 属性与 v-if 来实现。 在下面的示例中,我们定义了一个卡片组件,它拥有三个条件插槽:header、footer 和 default。当 header、footer 或 default 的内容存在时…...
【Unity】UI点击事件处理器
目录 前言脚本 前言 在开发过程中,经常需要监听UI的点击事件,这里我给大家整理一下,脚本直接挂在需要监听的节点上即可。 脚本 using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems;namespace GameLogic {/// &…...
阿里云服务器的docker环境安装nacos--实践
阿里云服务器的docker环境安装nacos–实践 前提先安装mysql数据库,mysql中创建nacos所需的表以下为阿里云服务器docker环境安装,需在安全组开放8848端口 1. 拉取nacos-server镜像 //最新版本nacos docker pull nacos/nacos-server//或者指定nacos版本…...
每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)
一.合并k个升序链表 1.1题目描述 1.2题解思路 解法一:小根堆 我们可以先定义一个小根堆,将k个指针的头结点如堆,每次取堆顶元素尾插到newhead中,然后再pop(),接着push堆顶原来堆顶元素的下一个节点 重点分析&#…...
数据结构——反射、枚举以及lambda表达式
1. 反射 Java的反射(reflection)机制是在运⾏时检查、访问和修改类、接⼝、字段和⽅法的机制;这种动态获取信息以及动态调⽤对象⽅法的功能称为java语⾔的反射(reflection)机制。 用途 1. 框架开发 2. 注解处理 3.…...
深入理解 HTML5 Web SQL 数据库:用法、现状与替代方案
一、引言 在 Web 开发的领域中,客户端存储一直是一个关键的话题。HTML5 带来了多种客户端存储的解决方案,其中 Web SQL 数据库曾经是一个备受关注的选项。尽管如今它已被废弃,但了解其原理、使用方法以及为何被替代,对于 Web 开发者来说仍然具有重要的意义。本文将深入探讨…...
系统架构设计(一):UML与软件架构
什么是系统架构设计? 系统架构设计是对系统高层结构和行为的描述,包括: 系统的各个模块(组件)模块之间的交互方式数据流动、控制流动技术选型与部署策略 系统架构常见的风格有: 分层架构(La…...
极狐GitLab 外部流水线验证功能解读
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部流水线验证 (BASIC SELF) 您可以使用外部服务在创建流水线之前进行验证。 极狐GitLab 发送一个 POST 请求到外部服务的…...
MCP和A2A是什么?
MCP和A2A是什么? MCP(Model-Connect Protocol)和A2A(Agent-to-Agent)协议逐渐成为行业关注的焦点。这两个协议分别由Anthropic和谷歌推出,旨在提升智能体与外部工具、数据源及API资源的连接效率,…...
CNN卷积神经网络
一、什么是卷积神经网络(CNN) CNN(卷积神经网络)是一种专门用于处理图像的神经网络,尤其在图像识别任务中表现出色,例如识别手写数字。它通过多层结构逐步提取图像特征,最终输出识别结果。与传…...
生物信息学技能树(Bioinformatics)与学习路径
李升伟 整理 生物信息学是一门跨学科领域,涉及生物学、计算机科学以及统计学等多个方面。以下是关于生物信息学的学习路径及相关技能的详细介绍。 一、基础理论知识 1. 生物学基础知识 需要掌握分子生物学、遗传学、细胞生物学等相关概念。 对基因组结构、蛋白质…...
Obsidian无门槛简明教程
Obsidian简明教程 Markdown基本语法基本码字标题换行段落引用分割线代码块链接带名字的链接超链接插入图片 强调语法加粗斜体删除线高亮 列表有序列表无序列表任务列表 Obsidian核心用法软件基本使用安装仓库文件夹笔记编辑与查看 资源 核心插件双链标签 三方插件Various Compl…...
常用 Git 命令详解
Git 是一个强大的版本控制工具,广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令,并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…...
【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理
目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域,Hadoop生态系统…...
多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯
多路由器通过三层交换机互相通讯(单臂路由静态路由默认路由版) 先实现各个小框框里能够互通 哇咔 交换机1(二层交换机,可看配置单臂路由的文章) Switch>en Switch#conf t Switch(config)#int f0/1 Switch(config-if)#switchport access…...
电控---CMSIS概览
1. CMSIS库简介 CMSIS(Cortex Microcontroller Software Interface Standard,Cortex微控制器软件接口标准)是由ARM公司开发的一套标准化软件接口,旨在为基于ARM Cortex-M系列处理器(如Cortex-M0/M0/M3/M4/M7/M33等&am…...
2025.04.17【Stacked area】| 生信数据可视化:堆叠区域图深度解析
文章目录 生信数据可视化:堆叠区域图深度解析堆叠面积图简介为什么使用堆叠面积图如何使用R语言创建堆叠面积图安装和加载ggplot2包创建堆叠面积图的基本步骤示例代码 解读堆叠面积图堆叠面积图的局限性实际应用案例示例:基因表达量随时间变化 结论 生信…...
XSS之同源、跨域、内容安全策略
一、什么是同源策略 HTML的同源策略是浏览器的一个重要的安全机制,它用于限制一个源的网页如何与另一个源的资源进行交互,以此来减少夸站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全风险。 同源的定义 若两个URL的协议(protocol)、…...
十三、系统设计
一、前言 二、架构设计概念 三、架构风格 四、面向服务的架构 五、微服务 六、MDA 七、软件界面设计 八、软件设计的构成 九、结构化设计 十、面向对象设计内容提要 十一、面向对象设计原则 十二、架构模式、设计模式与惯用法...
HTTP 2.0 协议特性详解
1. 使用二进制协议,简化传输的复杂性,提高了效率 2. 支持一个 TCP 链接发起多请求,移除 pipeline HTTP/2 移除了 HTTP/1.1中的管道化(pipeline)机制,转而采用多路复用(Multiplexing࿰…...
MySQL数据备份
一,为什么要进行数据备份 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢失,例如…...
【Ai】CherryStudio 详细使用:本地知识库、MCP服务器
一、CherryStudio 介绍 Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。 Cherry Studio 高度自定义的设计、强大的扩展能力和友好的用户体验,使其成为专业用户和 AI 爱好者的理想选择。无论是零基础用户还是开发者&…...
STM32F103_HAL库+寄存器学习笔记17 - CAN中断接收 + 接收CAN总线所有报文
导言 如上所示,本实验的目的是使能CAN接收FIFO1的挂号中断,使用CAN过滤器0与CAN接收FIFO1的组合,接收CAN总线上所有的CAN报文。 如上所示,STM32F103有两个3级深度的接收FIFO。外设CAN想要正常接收CAN报文,必须配置接收…...