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

LINUX2.4.x网络安全框架

   在分析LINUX2.4.x网络安全的实现之前先简介一下它里面包括的几个重要概念:netfilter、iptables、match、target、nf_sockopt_ops、网络安全功能点的实现。详解会在后面的分析中讲到。 首先是netfilter,它定义了协议栈中的检查点和在检查点上引用的数据结构,以及在检查点上对这些结构引用的过程。iptables定义了实现网络安全功能的规则的组织以及对规则的操作。

一个规则中包括零个或多个match和一个target。规则组织沿用了LINUX2.2.x中的chain,rule的概念。可是添加了table的概念,这三者的关系是:table是实现某项功能全部规则的总和,chain是在某个检查点上所引用规则的集合,rule是一个单独的规则。match在规则中用于匹配数据包中的各项參数,每一个match匹配特定的參数,所以一个规则中能够有多个match,这包括系统已定义的match,也包括通过内核模块另外加入的match。target在规则中决定怎样处理匹配到的数据包。因此在target中实现了详细的网络安全功能。nf_sockopt_ops是在系统调用get/setssockopt中引用的数据结构,实现用户空间对规则的加入、删除、改动、查询等动作。以上的结构在使用之前必须先注冊到系统中才干被引用。 LINUX2.4.x网络安全实现了包过滤。地址转换(包括了LINUX2.2.x中的地址伪装和透明代理功能并有其它扩展功能),连接跟踪(这是实现地址转换的基础,在它里面实现了对连接状态的记录和监控。与状态检測类似)。Mangle(这是LINUX2.4.x新增的一个功能,它对数据包进行检查但不做禁止、丢弃或同意的推断)。实现这些功能点须要分别注冊netfilter。iptables。match,target。nf_sockopt_ops的数据结构。

假设实现其它新的功能,仅仅需定义对应的结构并将它注冊到系统中,而且通过用户空间的配置工具(这个配置工具也须支持新的结构)把它增加到规则中就能够了。这些结构在规则中自己主动被引用。


         图中ns_hook_ops就是在检查点上引用的结构。每一个协议栈预先定义的8个链表数组用于保存这些结构,这些链表与协议栈中的检查点一一相应。在实际的应用中。这8个链表并不一定都被使用。比方在IPV4中。仅仅定义了5个检查点,分别相应前5个链表。nf_hook_ops结构例如以下:

struct nf_hook_ops{struct list_head list;nf_hookfn hook;          /* 函数指针 */int pf;                 /*  结构相应的协议栈号 */int hooknum;           /*  结构相应的检查点号*/int priority;         /*  结构的优先值 */};

          nf_register_hook函数将ns_hook_ops结构注冊到这些链表上,链表的索引由结构中hooknum指定。同一链表上的结构按优先值由小到大排列。在检查点上引用这些结构时,以它们在链表上的先后顺序引用。

          检查点由宏NF_HOOK定义。在检查点上。函数nf_hook_slow调用函数nf_iterate遍历相应链表并调用链表上的结构ns_hook_ops中定义的函数。

假设结构中的函数返回NF_ACCEPT。则继续调用下一个结构中的函数;假设结构中的函数返回NF_DROP或NF_STOLEN或NF_QUEUE,则将这个值返回给nf_hook_slow;假设结构中的函数返回NF_REPEAT,则反复调用此结构上的函数。假设到了链表上的最后一个结构。则把这个结构中函数的返回值返回给ns_hook_slow。

在ns_hook_slow中推断nf_iterate的返回值,假设是NF_ACCEPT,则同意数据包通过,并将数据包传递给协议栈中的下一个函数。假设是NF_DROP。则释放数据包,协议栈流程中断;假设是NF_STOLEN,相同中断协议栈的流程。可是没有释放这个数据包;假设是NF_QUEUE,则将这个包发送到用户空间处理,同一时候中断协议栈的流程。



          检查点编号 检查点名称 检查点所在文件名称
          1 NF_IP_PRE_ROUTING ip_input.c 
          2 NF_IP_LOCAL_IN ip_input.c 
          3 NF_IP_FORWARD ip_forward.c 
          4 NF_IP_POST_ROUTING ip_output.c 
          5 NF_IP_LOCAL_OUT ip_output.c 

          表2.1 IPV4中检查点的名称

          图中,ROUTE(1)处对收到的包做路由查找并推断这个包是须要转发的包还是发往本机上层的包,ROUTE(2)处查找发出包的路由。NF_IP_PRE_ROUTING处对全部传入IP层的数据包进行检查,在这之前,有关数据包的版本号、长度、校验和等正确性检查已经完毕。

NF_IP_LOCAL_IN对发往本机上层的数据包进行检查。

请注意这两个检查点与LINUX2.2.x中检查点的差别。在LINUX2.2.x没有区分发往本机上层包和须要转发的包,所以在做完地址解伪装之后又调用了一次路由查找函数。为解伪装之后的包查找路由。NF_IP_FORWARD处检查须要转发的数据包。NF_IP_POST_ROUTING处对全部向链路层传递的数据包进行检查,注意在此处数据包的路由已经确定。NF_IP_LOCAL_OUT对本机发出的包进行检查,此处的路由还没有确定。所以能够做目的地址转换。

实现某个网络安全功能可能须要在多个检查点上注冊对应的结构,在后面的分析中我们能够看到详细的样例。

 

          3. iptables 

          iptables实现对规则的管理和訪问。它里面有几个重要的数据结构ipt_entry,ipt_match,ipt_target,ipt_table,用于构造规则表。另一个重要的函数ipt_do_table,用于遍历规则表并处理规则表上的结构。



          ipt_entry是规则的数据结构。例如以下:

struct ipt_table
{struct list_head list;char name[IPT_TABLE_MAXNAMELEN];struct ipt_replace table;            /* 用户空间传递的规则表 */unsigned int valid_hooks;          /* 有效的检查点置位*/rwlock_t lock;struct ipt_table_info private;      /* 规则表在内核中的存储结构 */struct module *me;
};

          在ipt_table中。ipt_replace是用户空间配置程序传递给内核的规则表,这个规则表不能直接使用,必须先依据它里面包括的match和target的名称将match和target转换成在内核注冊的match和target的指针,另一项重要的工作是检查规则表中是否有循环,假设有循环,要给用户空间的配置程序报告错误。转换之后的规则表存储在ipt_table_info中。valid_hooks指示与这个表相关的检查点,并把相应的位置为1。一个table中能够有多个chain,chain分为系统默认的chain(与table注冊的检查点相应)和用户创建的chain。

全部的table都注冊放在一个链表中,而chain和rule则用偏移值next_offset连接成一个单向链表。

用户空间的配置工具在加入、删除规则之前先把内核中的规则表取到用户空间,然后在用户空间做加入或删除的动作。然后再将改动过的规则表传递到内核空间,由内核空间的函数完毕兴许的转换和检查。

          函数ipt_do_table遍历table上的规则,事实上这个函数的指针就保存在nf_hook_ops结构中。并在检查点上被调用。调用这个函数时须指定它遍历的table的指针和调用它的检查点的值。检查点的值用来定位table中默认chain的位置。前面我们提到。默认的chain是和检查点相应的,在检查点上检查相应chain的规则。

遍历规则,假设找到匹配的规则,则调用这条规则的target中定义的函数,并将它的返回值返回给调用ipt_do_table的函数。假设没有找到匹配的规则,则调用默认chain上最后一条规则的target定义的函数,这个函数的返回值就是这个chain的policy。

 

          4. nf_sockopt_ops 

          前面提到LINUX2.4.x网络安全框架支持多种协议。

规则的配置和查询通过系统调用get/setsockopt完毕。

在调用这两个系统调用时,不同协议使用的參数不同,所以每一个实现网络安全功能的协议栈都定义了自己的nf_sockopt_ops结构并把它注冊系统的链表中。在调用get/setsockopt时依据不同的參数决定引用哪一个nf_sockopt_ops来完毕真正的工作。

 

          5.网络安全功能点的实现 

          在LINUX2.4.x中实现网络安全的功能点须要做下面几件事情:一是定义nf_hook_ops结构。并将它注冊到netfilter中;二是定义iptable。match,target结构,并将它注冊到iptables中,假设须要还须注冊nf_sockopt_ops结构以便处理特殊的get/setsockopt參数。下图就是IPV4中的功能点注冊到netfilter中的nf_hook_ops结构: 

请加入描写叙述

          图5.1 IPV4的功能点在各检查点上注冊的结构

          (图中conntrack代表连接跟踪;Filter代表包过滤;NAT(src)代表源地址转换,NAT(dst)代表目的地址转换;Mangle是LINUX2.4.x中新增的一个功能。完毕对数据包的检查,可是不正确数据包做禁止或放行的推断。与Filter不同。Mangle在LINUX2.4.18之前的实现中仅仅在NF_IP_PRE_ROUTING,NF_IP_LOCAL_OUT两个检查点上注冊了nf_hook_ops结构,在LINUX2.4.18之后的实现中在五个检查点上都注冊了nf_look_ops结构。)

          图中在每一个检查点上,nf_hook_ops结构按调用的先后顺序从上而下排列。

能够看到同样的功能点在不同的检查点上它的调用顺序并不同样。这与功能点所做的动作有关。比方在NF_IP_LOCAL_IN上假设Conntrack在Filter之前,假设数据包的状态在Conntrack中被记录而在Filter中被禁止,那么与这个数据包相关的状态就不会完整。浪费了一个Conntrack的结构。所以应该先调用Filter,假设它的返回值是NF_ACCEPT才调用Conntrack。



          功能点上注冊的ipt_table,ipt_match。ipt_target,nf_sockopt_ops结构例如以下表所看到的:

功能点名称ipt_tableipt_matchipt_targetnf_sockopt_ops
Filterpacket_filter
Natnat_tableipt_snat_reg
ipt_dnat_reg
Conntrackso_getorigdst
Manglepacket_mangler

          表5.1 功能点注冊的数据结构

          值得指出的是连接跟踪(Conntrack)没有注冊不论什么规则表。说明它不须要规则来决定是否要作连接跟踪。同一时候它又注冊了一个nf_sockopt_ops结构。这个结构处理參数SO_ORIGINAL_DST,用于获得透明代理的目的地址。

相关文章:

LINUX2.4.x网络安全框架

在分析LINUX2.4.x网络安全的实现之前先简介一下它里面包括的几个重要概念:netfilter、iptables、match、target、nf_sockopt_ops、网络安全功能点的实现。详解会在后面的分析中讲到。 首先是netfilter,它定义了协议栈中的检查点和在检查点上引用的数据结…...

Python毕业设计选题:基于django+vue的智能停车系统的设计与实现

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 车主管理 车辆信息管理 车位信息管理 车位类型管理 系统…...

AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

JMeter 并发策略-针对准点秒杀场景的压测实现

一、场景的压测实现 1,创建线程组,10并发用户执行5次; 2,创建 Synchronizing Timer 元件,用于同步线程,设置同步元件 Synchronizing Timer 3,创建 http 请求4,创建 view results in table 元件…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说,都有committer机制,即代码写好之后会提交合并请求,待相关人员code review通过后再进行合入,所以code review就是代码合入代码仓库的最后一道关卡,对于代码质量的影响也是不容忽视…...

1041.困于环中的机器人

题目: 解题思路; 由于机器人会一直重复指令,存在重复多次指令才回到原点的情况,需要对不同情况经行分析。 当执行一次指令后回到原点,则机器人永远无法回到原点。当执行一次指令后不回到原点,只有方向向北的无法在多次…...

Python实现IP代理池

文章目录 Python实现IP代理池一、引言二、步骤一:获取代理IP1、第一步:爬取代理IP2、第二步:验证代理IP的有效性 三、步骤二:构建IP代理池四、使用示例1、完整的使用示例2、注意事项3、处理网络问题 五、总结 Python实现IP代理池 …...

【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Socket 编程预备 1.1、理解源 IP 和目的 IP 1.2、认识端口号 1.2.1、端口号范围划分 1.2.2、理解 &q…...

【机器学习】机器学习学习笔记 - 监督学习 - 多项式回归决策树回归 - 03

多项式回归 解决线性回归的准备性不足问题(线性回归只能是直线,多项式回归引入多项式可以是曲线)通过对预测值进行多项式转换, 使得回归模型可以是非线性的多项式回归的优点是可以处理非线性的数据多项式回归的缺点是它对数据进行了多项式转换 加菲工具&#xff0…...

篡改猴(Tampermonkey)使用指南:为您的浏览器增添超级能力

篡改猴(Tampermonkey)使用指南:为您的浏览器增添超级能力 篡改猴(Tampermonkey) 是一款流行的用户脚本管理工具,可以在浏览器中安装和运行用户脚本,从而增强或自定义网页的功能。无论是去广告、…...

23省赛区块链应用与维护(房屋租凭【下】)

23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...

Java中三种常用布局方式

引言 在Java Swing和JavaFX中,布局管理器(Layout Managers)用于控制组件(如按钮、文本框等)在容器(如窗口、面板等)内的位置和大小。下面介绍Java Swing中常用的三种布局方式: 1. Fl…...

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…...

及时+准确|主动元数据平台在监管报送场景中的应用实践

面对海量的数据报送需求和日益严格的监管要求,如何实现监管报送的全链路自动化数据质量保障,是金融机构亟待解决的重要课题。本文旨在介绍一种全新的监管报送场景方案,帮助金融机构通过“一键溯源与口径自动盘点、指标同源自动化分析、全链路…...

[python脚本处理文件入门]-18.使用Python进行PDF文件的合并与拆分

哈喽,大家好,我是木头左! Python PDF处理库概览 1. PyPDF2 PyPDF2是一个纯Python编写的库,用于PDF文件的读写和操作。它提供了丰富的功能,包括PDF文件的合并、拆分、加密、解密等。PyPDF2的安装非常简单,只需通过pip即可安装: pip install PyPDF2安装完成后,你就可以…...

4、常量和进制转换

1、常量 1.1、常量 常量是在程序运行中值不能内改变(常数)。 整型:12 55 实型:21.5 字符型常量: ‘A’ 1.2、常量不同进制表示 常量数据在计算机中除了用 十进制 表示,还可以用 二进制、八进制、十六进制表示。 十进制数据&…...

C++:探索哈希表秘密之哈希桶实现哈希

文章目录 前言一、链地址法概念二、哈希表扩容三、哈希桶插入逻辑四、析构函数五、删除逻辑六、查找七、链地址法代码实现总结 前言 前面我们用开放定址法代码实现了哈希表: C:揭秘哈希:提升查找效率的终极技巧_1 对于开放定址法来说&#…...

java函数式编程和Lambda表达式

https://www.bilibili.com/video/BV1fz421C7tj?spm_id_from333.788.videopod.episodes&vd_source12d5954938d20d50645e227a6a728c76 如果一个接口中只有一个方法,那么就可以函数对象化: interface Add {int add(int a, int b);}Add add (a, b) -&…...

【线程】Java多线程代码案例(2)

【线程】Java多线程代码案例(2) 一、定时器的实现1.1Java标准库定时器1.2 定时器的实现 二、线程池的实现2.1 线程池2.2 Java标准库中的线程池2.3 线程池的实现 一、定时器的实现 1.1Java标准库定时器 import java.util.Timer; import java.util.Timer…...

IOU Loss详解

IoU(Intersection over Union是目标检测中常用的指标,用于评估预测框和真实框的重叠程度。基于 IoU 的损失函数(IoU Loss)是通过优化 IoU 值来提升模型预测框的精度。 IoU 的计算公式 给定预测框 ( B_p ) 和真实框 ( B_g )&#…...

nfs服务器

1、简介 NFS (Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上…...

Diving into the STM32 HAL----- IWDG and WWDG Timers笔记

墨菲定律指出,任何可能出错的事情都会出错。尤其是对于嵌入式系统来说,情况尤其如此。除了硬件故障也会对软件产生影响外,即使是最仔细的设计也可能会出现一些意外情况,导致我们设备的异常行为。这可能会产生重大成本,…...

使用statefulset管理pod

deployment主要管理无状态的pod,就算需要磁盘也是期望做动态扩容的。而对于那种有状态需要存储数据的,如log、数据库、消息中间件需要持久化数据的,则建议使用StatefulSet,我们的pod现在扩充了pv和pvc,那就使用Statefu…...

6个AI生成PPT的网站,pptai一键生成

演讲和展示PPT是当今办公和学习中的重要组成部分,无论是工作汇报、发表研究成果,还是课件培训,一款精心制作的PPT能够有效吸引观众的参与,并将你的信息深入人心。借助不断进步的人工智能技术,众多免费的AI PPT生成器可…...

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候,判断,同时若剩余字符>k,只对前k个进行判断(这是重点)因为字符串是不可变变量,所以将其转化为字符串数组,最后才将结果重新转变为字符串 字符串->字符数组 …...

如何优雅的用PyQt访问http(仅供参考)

使用pydantic或dataclaass创建一个数据存储对象 第一种 # coding: utf-8 from typing import Anyimport requests from pydantic import Field, BaseModelclass ResponseModel(BaseModel):status: bool Field(True, description"响应状态")message: str Field(请求…...

小程序租赁系统开发的优势与应用解析

内容概要 随着科技的迅猛发展,小程序租赁系统应运而生,成为许多企业优化业务的重要工具。首先,它提升了用户体验。想象一下,用户只需轻轻一点,就能够浏览和租赁心仪的商品,这种便捷的过程使繁琐的操作大大…...

Group Convolution(分组卷积)

分组卷积的优点: 减少参数数量: 在分组卷积中,每个分组只与一部分输入通道进行卷积运算,这意味着模型的参数数量会减少。例如,如果一个卷积层有8个输入通道和8个输出通道,且不使用分组,那么将有…...

uniapp在H5使用vue-router路由返回上一页不会触发销毁函数解决方法

问题:uniapp在H5使用vue-router路由,如果在H5平台上进行页面刷新操作,再返回上一页,可能会遇到beforeDestroy、destroyed、onUnload生命周期钩子不被触发的问题。这是因为在H5中,页面的刷新实际上是整个应用的重新加载…...

YOLOv8配置文件应该如何命名?

文末有重点 1.配置文件解析代码yolov8/ultralytics/nn/tasks.py 如下: def yaml_model_load(path):"""Load a YOLOv8 model from a YAML file."""import repath Path(path)if path.stem in (fyolov{d}{x}6 for x in nsmlx for d i…...

扫雷-完整源码(C语言实现)

云边有个稻草人-CSDN博客 在学完C语言函数之后,我们就有能力去实现简易版扫雷游戏了(成就感满满),下面是扫雷游戏的源码,快试一试效果如何吧! 在test.c里面进行扫雷游戏的测试,game.h和game.c…...

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载:MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…...

UE5 Line Trace By Channel(通道线条追踪)节点

在 Unreal Engine 5 (UE5) 中,Line Trace By Channel 是一个常用于进行物理射线检测(raycasting)的节点。它会沿着一条从起点到终点的直线发射一条射线,并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

How to use the ‘git log‘ command to get change log for each file?

1. Using git log command #!/bin/bash# 目标文件名 output_file"git_log.csv"# 打印 CSV 文件的标题行 echo "CommitID,Author,Author Email,Date,Added-Lines Removed-Lines File" > $output_file echo "CommitID,Author,Author Email,Date,Add…...

node.js中实现router模块化管理

index.js const express require(express); const app express()// 导入路由模块 const router require(./router/index)// 注册路由模块 app.use(router)app.listen(3000, ()>{console.log(http://127.0.0.1:3000) })router/index.js const express require(express…...

突破性算法:让无人机集群在狭窄空间内穿针引线

导读 在建筑救援、森林搜索等任务中,无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突,或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化,而局部避…...

人工智能如何改变你的生活?

在我们所处的这个快节奏的世界里,科技融入日常生活已然成为司空见惯的事,并且切实成为了我们生活的一部分。在这场科技变革中,最具变革性的角色之一便是人工智能(AI)。从我们清晨醒来直至夜晚入睡,人工智能…...

C语言main()函数

C语言main()函数 argc(argument count) 在C或C程序中,argc(argument count的缩写)是一个由程序运行时环境自动提供的整数,用于指示传递给main函数的命令行参数的数量。因此,不需要&#xff08…...

【LC】162. 寻找峰值

题目描述: 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须…...

Zero to JupyterHub with Kubernetes上篇 - Kubernetes 离线二进制部署

前言: 纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 k8s二进…...

HTML5+JavaScript实现消消乐游戏

HTML5JavaScript实现消消乐游戏 点击两个相邻的方块来交换它们位置。 如果交换后形成三个或更多相同图案的方块连成一线,这些方块会被消除。 消除后,上方的方块会下落填补空缺,顶部会生成新的方块。 每消除一个方块得10分。例如&#xff0…...

深度学习:在PyTorch中进行模型验证完整流程

深度学习:在PyTorch中进行模型验证完整流程(以图像为例) 详细说明在PyTorch中进行模型验证的全过程。 模型验证的详细步骤和流程 1. 设置计算设备 选择合适的计算设备是性能优化的第一步。基于系统的资源(GPU的可用性&#xf…...

洛谷 P1747 好奇怪的游戏 C语言 bfs

题目: https://www.luogu.com.cn/problem/P1747#submit 题目描述 爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但…...

豆包MarsCode

01 AI代码陪练 来到豆包MarsCode官网:http://sqllb.com/6FRiH76 ,点击左上方的代码练习,就能看到一个AI代码陪练的练习场。 在左边栏,可以看到各种各样的算法题目,在右侧是MarsCode AI,中间是算法题目和…...

Docker网络模式:桥接(Bridge)模式与主机模式(Host)实操对比(一)

文章目录 前言一、桥接模式(Bridge Mode)前言 随着容器化技术的发展,Docker 已成为开发和部署应用的首选工具之一。Docker 不仅简化了应用的打包过程,还提供了多种网络模式来满足不同应用场景下的需求。本文将重点探讨两种常用的 Docker 网络模式——桥接模式(Bridge Mod…...

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信: 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信: 单工通信:数据只能沿一个方向传输 半双工通信:数据可以沿两个方向…...

【Git】Git 命令参考手册

目录 Git 命令参考手册1. 创建仓库1.1 创建一个新的本地仓库1.2 克隆一个仓库1.3 克隆仓库到指定目录 2. 提交更改2.1 显示工作目录中已修改的文件,准备提交2.2 将文件添加到暂存区,准备提交2.3 将所有已修改的文件添加到暂存区,准备提交2.4 …...

EBS 中 Oracle Payables (AP) 模块的相关集成

Oracle E-Business Suite (EBS) 中的 Oracle Payables (AP) 模块是一个全面的应付账款管理系统,它不仅提供了丰富的功能来管理与供应商的财务交易,还通过与其他模块的紧密集成,实现了企业内部各个业务流程的无缝衔接。以下是 Oracle Payables…...

【LC】896. 单调数列

题目描述&#xff1a; 如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如果对于所有 i < j&#xff0c;nums[i]> nums[j]&#xff0c;那么数组 nums 是…...

大语言模型LLM的微调代码详解

代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型&#xff08;具体为 TAIDE-LX-7B-Chat 模型&#xff09;进行微调&#xff08;Fine-tuning&#xff09;的功能&#xff0c;使其能更好地应用于生成唐诗相关内容的…...