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

网络地址转换(NAT)和端口映射

1. 网络地址转换(NAT)

1.1 NAT的应用场景

(1)应用场景:允许将私有IP地址映射到公网地址,以减缓IP地址空间的消耗

  ①需要连接Internet,但主机没有公网IP地址

  ②更换了一个新的ISP,需要重新组织网络时,可使用NAT转换

  ③需要合并两个具有相同网络地址的内网

(2)NAT的优缺点

优点

缺点

①节约合法的公网IP地址

②减少地址重叠现象

③增加连接Internet的灵活性

④增加内网的安全性

①地址转换产生交换延迟,也就是消耗路由器性能。

②无法进行端到端的IP跟踪

③某些应用无法在NAT的网络中运行

1.2 NAT的类型

(1)静态NAT

  指将内部网络的私有IP地址转换为公有IP地址IP地址对是一对一的,即两个地址的映射关系己绑定死了。某个私有IP地址只转换为某个公有IP地址,借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问

(2)动态NAT

  ①指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,而是随机的。所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址池中一个IP地址。如果地址池的IP地址做映射用完了,剩余的内网计算机将不能再访问外网(本质上,也是一对一的关系,只不过这种关系是动态绑定的!)。

  ②当要与外界进行通信的内部节点,如果还没有建立转换映射,边缘路由器将会动态的从公网IP地址池中选择IP对内部地址进行转化。每个转换条目在连接建立时动态建立,而在连接终止时会被回收因此,外网的计算机不能访问内网的计算机(因为映射关系是内网计算机发起且连接终止时就回收了!)

  ③动态NAT,一般用在当内部网络中只有少数节点与外界建立连接的场合时,因为只有少数的内部地址需要被转化成全局地址,可以减少对合法地址的需求。

(3)PAT

  ①这是最流行的NAT配置类型,实际上是动态NAT的一种形式,它映射多个私有网IP地址到一个公网IP地址,通过使用不同的端口来区分内网主机,被称为端口地址转换(PAT,Port Address Translation)。(见后面实验部分的分析,怎么用端口区分内网主机?)

  ②使用PAT时,internet的主机无法访问内网主机。如果需要这种访问,则需要做端口映射(注意,端口映射和端口地址转换PAT是两个概念PAT是使得多个内网主机可以通过一个公网IP同时访问Internet,而端口映射则可以让internet主机访问内网主机!见后面《端口映射》的内容

2. 实现网络地址转换

2.1 配置静态NAT

(1)网络拓扑

映射关系:PCx(10.0.0.y)映射到131.107.0.y;

(2)静态NAT映射数据包转换过程

 

  ①PC0访问Internet的Server,数据包经CPE路由器,根据配置的静态映射,数据包的源地址被131.107.0.2地址替换

  ②Server向131.107.0.2发送返回的数据包,在进入内网时,根据静态映射表,将会使用PC0的IP地址替换数据包的目标地址(10.0.0.2)。

(3)在CPE路由器上配置静态映射表

复制代码

//1. 静态NAT
Router#conf t
Router(config)#access-list 12 permit 192.168.1.0 0.0.0.255 //定义ACL,只允许192.168.1.0/24网段
Router(config)#line vty 0 15  //进入VTY虚接口,0和15分别表示起始和结束的vty的0-15号接口。
Router(config-line)#access-class 12 in  //将编号为12的ACL绑定到vty
Router(config-line)#CPE#conf t
CPE(config)#ip nat inside source static 10.0.0.2 131.107.0.2
CPE(config)#ip nat inside source static 10.0.0.3 131.107.0.3
CPE(config)#ip nat inside source static 10.0.0.4 131.107.0.4
CPE(config)#ip nat inside source static 10.0.0.5 131.107.0.5
CPE(config)#ip nat inside source static 10.0.0.6 131.107.0.6
CPE(config)#interface fastEthernet 0/1
CPE(config-if)#ip nat inside                //指定该接口为NAT的内部端口
CPE(config-if)#ex
CPE(config)#interface serial 0/0
CPE(config-if)#ip nat outside               //指定该接口为NAT的外网端口
CPE(config-if)#ex
CPE(config)#exit
CPE#debug ip nat                            //让路由器显示NAT信息

复制代码

(4)验证:PCO主机ping 202.99.160.2,同时观察CPE路由器显示的NAT信息(要事先debug ip NAT开启这个功能!)。同时,由于配置了静态映射,外网的计算机可能通过访问131.107.0.6直接访问内网的WebServer的网站。

2.2 配置动态NAT

(1)网络拓扑

(2)在路由器上配置动态NAT

复制代码

//1. 在CPE路由器上配置动态NAT
CPE>en
CPE#config t
//定义ACL,如果内网有多个网段需要NAT,则需要在ACL都添加上
CPE(config)#access-list 10 permit 10.0.0.0 0.0.0.255
//指定公网地址池:名称为mypool,起始和结束地址以及子网掩码
CPE(config)#ip nat pool mypool 131.107.0.1 131.107.0.3 netmask 255.255.255.0
//将公网地址池与ACL绑定
CPE(config)#ip nat inside source list 10 pool mypool
CPE(config)#interface serial 0/0
CPE(config-if)#ip nat outside    //指定S0/0为NAT的外网接口
CPE(config-if)#ex
CPE(config)#interface fastEthernet 0/1
CPE(config-if)#ip nat inside     //指定f0/1为NAT的内网接口
CPE(config-if)#exit
CPE(config)#exit//2. 在路由器上查看NAT配置状态
CPE#show ip nat statistics //3. 查看NAT地址转换信息(要先从内网ping外网主机)
CPE#show ip nat translations//4. 清转转换表中的NAT条目
CPE#clear ip nat translations *

复制代码

(3)验证:让pc0、pc1、pc2、pc3四台计算机同时ping 202.99.160.2。(只有3台能ping通,因为地址池只有3个公网IP可被拿来映射!)

2.3 配置PAT

(1)网络拓扑图(与前面例相同)

(2)端口地址转换(PAT):源端口的替换

  ①假设PC0和PC1都是使用1723端口访问外网的Server。如果数据包只做地址转换(即端口不转换)那么返回的数据目标地址都是131.107.0.1,目标端口都是1723路由器就没有办法确定这个数据包应发送给PC0还是PC1

  ②如果使用一个公网IP地址让很多内网计算机访问Internet,必须由路由器对访问Internet的数据包进行统一的源端口替换,将源端口替换成不同的端口出去(如4000、4001),这样路由器就可以根据返回的数据包目标端口确定数据包应该转发给哪一个内网计算机,这就是端口地址转换的原理

(3)在路由器上配置PAT

复制代码

//1. 在CPE路由器上配置PAT
CPE>en
CPE#config t
//将内网需要PAT出去的网段添加到ACL中
CPE(config)#access-list 10 permit 10.0.0.0 0.0.0.255
//添加公网IP地址池(名称为mypool,前后IP一样,即只有一个公网IP)。
CPE(config)#ip nat pool mypool 131.107.0.1 131.107.0.1 netmask 255.255.255.0
//将公网地址池与ACL绑定(注意overload参数会启用PAT)
CPE(config)#ip nat inside source list 10 pool mypool overload
CPE(config)#interface serial 0/0
CPE(config-if)#ip nat outside    //指定NAT的外网接口
CPE(config-if)#ex
CPE(config)#interface fastEthernet 0/1
CPE(config-if)#ip nat inside     //指定NAT的内网接口
CPE(config-if)#ex
CPE(config)#ex
CPE#show ip nat statistics     //查看NAT配置状态
Total translations: 0 (0 static, 0 dynamic, 0 extended)
Outside Interfaces: Serial0/0
Inside Interfaces: FastEthernet0/1
Hits: 0  Misses: 0
Expired translations: 0
Dynamic mappings:
-- Inside Source
access-list 10 pool mypool refCount 0pool mypool: netmask 255.255.255.0start 131.107.0.1 end 131.107.0.1type generic, total addresses 1 , allocated 0 (0%), misses 0
CPE#

复制代码

(4)验证:使用内网中的任何一台主机都可以ping通internet上的server。

2.4 配置端口映射

(1)PAT存在的的问题通过配置PAT,只能实现内网主机使用公网IP地址访问internet,但internet的主机无法访问内网主机(如内网的WebServer),这时可以通过端口映射来解决这一问题

(2)网络拓扑图

(3)在路由器上配置端口映射

复制代码

//1. 在CPE路由器上配置端口映射
CPE>en
CPE#conf t
//静态端口映射
CPE(config)#ip nat inside source static tcp 10.0.0.5 80 131.107.0.1 80
CPE(config)#ip nat inside source static tcp 10.0.0.6 80 131.107.0.1 81
CPE(config)#ip nat inside source static tcp 10.0.0.4 25 131.107.0.1 25
CPE(config)#ip nat inside source static tcp 10.0.0.4 110 131.107.0.1 110
CPE(config)#interface fastEthernet 0/1
CPE(config-if)#ip nat inside     //指定NAT的内网接口
CPE(config-if)#ex
CPE(config)#interface serial 0/0
CPE(config-if)#ip nat outside    //指定NAT的外网接口
CPE(config-if)#ex
CPE(config)#

复制代码

(4)验证:通过internet上的PC5访问内网的WebServer、邮件服务器。

3. 在Windows上实现网络地址转换和端口映射

3.1 在Windows Server 2003上配置网络地址转换

(1)网络拓扑图

(2)实验环境

  ①Win2003_NATServer有两张网卡,其中连接内网的网卡(名称改为:inner)172.16.0.1/24(不用写网关)连接外网的网卡(名称改为:outer)192.168.1.4/24,默认网关:192.168.1.1

  ②内网中WebServer服务器:172.16.0.3/24,默认网关:172.16.0.1

(3)设置NAT

  ①“控制面板”→“管理工具”→“路由和远程访问”→“配置并启用路由和远程访问” →“自定义配置”→“NAT和基本防火墙”

  ②新增连接到内网网卡接口:在左侧树状节点中选择“NAT/基本防火墙”→“新增接口”→选择内网网卡,名称为“inner”→接口类型为“专用接口连接到专用网络”。

  ③新增连接到外网网卡的接口:“NAT/基本防火墙”→“新增接口”→选择外网网卡,名称为“outer”→接口类型为“专用接口连接到专用网络”。(至此,内网计算机可以访问internet的计算机了!)

  ④可以为“inner”接口或“outer”接口启用防火墙:如选中“inner”接口→“属性”→在“静态数据包筛选器”的“入站筛选器”或“出站筛选器”中进行设置。

  ⑤如果不要NAT转换而是采用路由器转发则需要在Router1路由器上添加到172.16.0.0/24的网段的下一段给192.168.1.4,否则内网数据包可以出去,但响应数据包没办法回来。而在NAT下内网计算机之所以能被转发,是因为内网IP到Router1时,都被转成了192.168.1.4,回来时通过NAT又被转成内网地址(172.16.0.x)了,所以数据包的收发都没问题。

(4)设置端口映射,让外网的计算机可以访问内网的WebServer服务器(172.16.0.3)

  ①在“NAT/基本防火墙”中选择“outer”接口→“属性”→“服务和端口”→“添加”,然后写上“传入端口”、“专用网址”和“传出端口”。(传入和传输是针对outer接口来讲的)

  ②在pc0上用浏览器访问172.16.0.3服务器上的网站。但要让interner上算机也可以访问内网的Web服务器,还需要在Router1将相应的端口映射到192.168.1.4(具体操作见前面的《端口映射》部分)。

3.2 在Windows XP上配置连接共享和端口映射

(1)网络拓扑图

(2)网络设置

  ①在宿主机上将WLAN网卡的连接共享给VMNet2网卡。(这相当宿主机成为一台简单的PAT/NAT服务器,将来自于内网的地址转发为外网IP,或者反之

  ②重新设置VMNet2网卡IP为10.0.0.1/24(注意:作为内网网关的网卡,本身不要写网关!

  ③将内网计算机的默认网关设置为10.0.0.1,这样就可以访问Internet了。

相关文章:

网络地址转换(NAT)和端口映射

1. 网络地址转换(NAT) 1.1 NAT的应用场景 (1)应用场景:允许将私有IP地址映射到公网地址,以减缓IP地址空间的消耗 ①需要连接Internet,但主机没有公网IP地址 ②更换了一个新的ISP,需要重新组织网络时&…...

iClent3D for Cesium 实现无人机巡检飞行效果

作者:gaogy 1、背景 随着地理信息技术的发展,三维地球技术逐渐成为了许多领域中的核心工具,尤其是在城市规划、环境监测、航空航天以及军事领域。三维地图和场景的应用正在帮助人们更加直观地理解空间数据,提供更高效的决策支持。…...

后端- spring cache框架操作缓存数据(底层可以是redis,也可以是caffeine和ehcache)

...

低比特语言模型 是一种利用较少比特数进行语言建模的技术

Vanilla LLM: 基础的全精度语言模型,通常在较高比特数下运作 Vanilla LLM,或称为“基础的全精度语言模型”,是指使用标准的浮点数(通常是16位或32位)进行训练和推理的语言模型。这些模型依赖于经典的神经网络结构&…...

ES6中的map和set

Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 以下代码 const s new Set();[2, 3, 5, 4, 5, 2, 2].forEach(x > s.add(x));for (let i of s…...

【WRF安装】WRF编译错误总结1:HDF5库包安装

目录 1 HDF5库包安装有误:HDF5 not set in environment. Will configure WRF for use without.HDF5的重新编译 错误原因1:提示 overflow 错误1. 检查系统是否缺少依赖库或工具2. 检查和更新编译器版本3. 检查 ./configure 报错信息4. 检查系统环境变量5.…...

MyBatis常见面试题总结

#{} 和 ${} 的区别是什么? 注:这道题是面试官面试我同事的。 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于原样文本替换,可以替换任意内容,比如${driver}…...

Qt生成随机数的方法

后台接口要求传个流水单号,流水号的格式是:“设备序列号”“设备MAC地址”“20位的随机数”。 具体的是: “设备序列号”:就是烧录工具写入设备的序列编号,这就不多说了,读出来就行; “设备MAC地…...

深入探索Vue.js中的v-if指令:条件渲染的高级技巧

深入探索Vue.js中的v-if指令:条件渲染的高级技巧 引言 在现代Web开发中,根据条件动态地渲染或移除DOM元素是一个常见的需求。Vue.js提供了一种简洁而强大的方法来实现这一目标,即通过v-if指令来根据表达式的值来控制元素的渲染。本文将详细…...

【记录50】uniapp安装uview插件,样式引入失败分析及解决

SassError: Undefined variable: "$u-border-color". 表示样式变量$u-border-color没定义&#xff0c;实际是定义的 首先确保安装了scss/sass 其次&#xff0c;根目录下 app.vue中是否全局引入 <style lang"scss">import /uni_modules/uview-ui/in…...

NTLMv2 离线爆破

攻击者&#xff08;kali&#xff09;&#xff1a;192.168.72.162 受害者&#xff08;administrator&#xff09;&#xff1a;192.168.72.163 因为 NTLM 身份验证是通过计算正确的挑战值得出的&#xff0c;所以如果我们能获取域用户的 NTLM 认证某一服务的 Net-NTLM v2 Hash …...

LabVIEW实现RFID通信

目录 1、RFID通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...

【Three.js基础学习】31.Lights Shading

前言 关于灯光如何在着色器中应用&#xff01; 下面将创建三个灯光 分别是点光源&#xff0c;环境光&#xff0c;方向光通过这几种光应用着色器显示对应阴影 学习灯光阴影&#xff0c;着色器的使用 添加三盏灯 点光&#xff0c;方向光&#xff0c;环境光 创建一个环境光 在现…...

Oracle Database 21c Express Edition数据库 和 Sqlplus客户端安装配置

目录 一. 前置条件二. Win10安装配置Oracle数据库2.1 数据库获取2.2 数据库安装2.3 数据库配置确认2.4 数据库访问 三. Win10配置Oracle数据库可对外访问3.1 打开文件和打印机共享3.2 开放1521端口 四. 端口与地址确认4.1 查看监听器的状态4.2 Win10查看1521端口是否被监听4.3 …...

IDEA搭建springboot demo

如下所示创建SpringBootTest18项目&#xff0c;我选的maven&#xff0c;创建完成项目后&#xff0c;maven会自动下载一些依赖库到maven的repository目录中。 创建的项目结构如下图所示 接下来在项目中加入Framework支持&#xff0c;右击项目&#xff0c;弹出的菜单如下图所示&a…...

SQLite Update 语句

SQLite Update 语句 SQLite 的 UPDATE 语句用于更新数据库表中的现有记录。使用 UPDATE 语句&#xff0c;您可以修改一个或多个列的值。本教程将详细介绍如何使用 SQLite UPDATE 语句&#xff0c;包括语法、示例以及一些最佳实践。 语法 SQLite UPDATE 语句的基本语法如下&a…...

node.js的简单示例

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;用于方便地构建快速、可扩展的网络应用。下面是一个简单的Node.js示例&#xff0c;它创建了一个简单的HTTP服务器&#xff0c;当访问服务器时&#xff0c;它会响应“Hello World” // 引入Node.js的HTTP模块…...

fpga系列 HDL:Quartus II 时序约束 静态时序分析 (STA) test.out.sdc的文件结构

test.out.sdc的文件结构 ## Generated SDC file "test.out.sdc"## Copyright (C) 1991-2013 Altera Corporation ## Your use of Altera Corporations design tools, logic functions ## and other software and tools, and its AMPP partner logic ## functions,…...

Restaurants WebAPI(一)—— clean architecture

文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…...

A Unified Framework for STAR-RIS Coefficients Optimization

文章目录 AbstractB. A Penalty-based Reformulation of (1) III. OPTIMIZING AUXILIARY VARIABLES φ \boldsymbol φ φ IN P1IV. A CASE STUDY OF P2 ON DOWNLINK STAR-RIS ASSISTED TRANSMISSION SYSTEMA. 优化 x , ρ , w , λ t x, \rho, \mathbf{w}, \lambda^t x,ρ,w…...

rebase ‘A‘ onto ‘master‘ 和 merge ‘master‘ into ‘A‘有什么区别

在Git版本控制系统中&#xff0c;rebase 和 merge 是两种不同的操作&#xff0c;用于合并分支。rebase A onto master 和 merge master into A 虽然最终目的都是将两个分支的更改合并在一起&#xff0c;但它们在处理方式和结果上有所不同。 rebase ‘A’ onto ‘master’ 含义…...

谷歌发布最新视频生成模型 Veo 2:视频生成AI新王牌

谷歌 在当今数字化快速发展的时代&#xff0c;人工智能视频生成技术正不断突破创新。就在12月17日&#xff0c;谷歌推出了一个新的视频模型 Veo 2 。 Veo 2 Veo 2 Veo 2 可以创建各种主题和风格的高质量视频。在谷歌官方由人工评估员判断中&#xff0c;Veo 2 与领先模型相比取得…...

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块&#xff0c;旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项&#xff0c;企业可实现精细化管理&#xff0c;提升运营效…...

基于Docker的Minio分布式集群实践

目录 1. 说明 2. 配置表 3. 步骤 3.1 放行服务端口 3.2 docker-compose 编排 4. 入口反向代理与负载均衡配置 4.1 api入口 4.2 管理入口 5. 用例 6. 参考 1. 说明 以多节点的Docker容器方式实现minio存储集群&#xff0c;并配以nginx反向代理及负载均衡作为访问入口。…...

解决node.js的req.body为空的问题

从昨晚一直在试&#xff0c;明明之前用的封装的axios发送请求给其他的后端&#xff08;springboot&#xff09;是可以的&#xff0c;但昨天用了新项目的后端&#xff08;node.js&#xff09;就不行。 之前用了代理&#xff0c;所以浏览器发送的post请求不会被拦截&#xff0c;…...

数据结构期末算法复习:树、查找、排序

一、树 1.二叉链-定义 typedef struct BiTNode{ ElemType data;//数据域 struct BiTNode *lchild ,*rchild;//左、右孩子指针 }BiTNode , *BiTree ;2.查找值为x的结点 BTNode FindNode(BTNode b&#xff0c;ElemType x) { BTNode *p;if (bNULL) return NULL;else if (…...

复习打卡Linux篇

目录 1. Linux常用操作命令 2. vim编辑器 3. 用户权限 4. Linux系统信息查看 1. Linux常用操作命令 基础操作&#xff1a; 命令说明history查看历史执行命令ls查看指定目录下内容ls -a查看所有文件 包括隐藏文件ls -l ll查看文件详细信息&#xff0c;包括权限类型时间大小…...

OpenAI API深度解析:参数、Token、计费与多种调用方式

随着人工智能技术的飞速发展&#xff0c;OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式&#xff0c;以及如何通过Rest API&#xff08;以Postman为例&#xff09;、Java API调用、工具调用等方式实现与OpenAI的交互&#xff0…...

Centos7 部署ZLMediakit

1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…...

python:用 sklearn.metrics 评价 K-Means 聚类模型

sklearn 的 metrics 模块提供的聚类模型评价指标如下&#xff1a; ARI 评价法&#xff08;兰德系数&#xff09;: adjusted_rand_score AMI 评价法&#xff08;相互信息&#xff09;: adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…...

谁说C比C++快?

看到这个问题&#xff0c;我我得说&#xff1a;这事儿没有那么简单。 1. 先把最大的误区打破 "C永远比C快" —— 某位1990年代的程序员 这种说法就像"自行车永远比汽车省油"一样荒谬。我们来看个例子&#xff1a; // C风格 char* str (char*)malloc(100…...

算法刷题Day23:BM60 括号生成

题目链接 描述&#xff1a;给出n对括号&#xff0c;请编写一个函数来生成所有的由n对括号组成的合法组合。 例如&#xff0c;给出n3&#xff0c;解集为&#xff1a; “((()))”, “(()())”, “(())()”, “()()()”, “()(())” 思路&#xff1a; 回溯左子树不断添加‘&#…...

基于Redis实现令牌桶算法

基于Redis实现令牌桶算法 令牌桶算法算法流程图优点缺点 实现其它限流算法 令牌桶算法 令牌桶是一种用于分组交换和电信网络的算法。它可用于检查数据包形式的数据传输是否符合定义的带宽和突发性限制&#xff08;流量不均匀或变化的衡量标准&#xff09;。它还可以用作调度算…...

XXE练习

pikachu-XXE靶场 1.POC:攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a">]> <foo>&xxe;</foo> 2.EXP:查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SY…...

Mac上使用ln指令创建软链接、硬链接

在Mac、Linux和Unix系统中&#xff0c;软连接&#xff08;Symbolic Link&#xff09;和硬连接&#xff08;Hard Link&#xff09;是两种不同的文件链接方式。它们的主要区别如下&#xff1a; 区别&#xff1a; 硬连接&#xff1a; 不能跨文件系统。不能链接目录&#xff08;为…...

单元测试-Unittest框架实践

文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架&#xff0c;适用于&#xff1a;单元测试、Web自动…...

JAVA没有搞头了吗?

前言 今年的Java程序员群体似乎承受着前所未有的焦虑。投递简历无人问津&#xff0c;难得的面试机会也难以把握&#xff0c;即便成功入职&#xff0c;也往往难以长久。于是&#xff0c;不少程序员感叹&#xff1a;互联网的寒冬似乎又一次卷土重来&#xff0c;环境如此恶劣&…...

ECharts 饼图:数据可视化的重要工具

ECharts 饼图:数据可视化的重要工具 引言 在数据分析和可视化的领域,ECharts 是一个广受欢迎的开源库。它由百度团队开发,用于在网页中创建交互式图表。ECharts 提供了多种图表类型,包括柱状图、折线图、散点图等,而饼图则是其中最常用的一种。本文将深入探讨 ECharts 饼…...

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后&#xff0c;通过大疆智图软件可以对所飞行的区域的进行拼图&#xff0c;但是如果需要对拼好的图再次合并&#xff0c;则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法&#xff1a;点击“”图标进行导入操作…...

0 前言

ArCS作为一个基于Rust的CAD&#xff08;计算机辅助设计&#xff09;开源系统&#xff0c;尽管已经有四年未更新&#xff0c;但其设计理念和技术实现仍然具有很高的学习和参考价值。以下是对ArCS项目的进一步分析和解读&#xff1a; 一、项目亮点与技术优势 高效与安全的Rust语…...

ubuntu server 安装

1 获取ubuntu https://ubuntu.com/download/server 2 安装ubuntu 详细教程查看视频&#xff1a; ubunut server 安装_哔哩哔哩_bilibili...

linux 添加默认网关

在linux 可以使用 route 命令添加默认网关&#xff0c;假设添加的默认网关是192.168.159.2 添加方式如下&#xff1a; route add default gw 192.168.159.2 以上命令只需要把add 改成 del &#xff0c;就能删除刚才添加的路由 route del default gw 192.168.159.2 #该命…...

一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器

大家好&#xff0c;今天给大家分享一个开源的自托管虚拟浏览器项目Neko&#xff0c;旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;提供…...

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…...

can总线相关概念---frame-signal-message

1、frame 帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部&#xff0c;组成了帧。它的起始点和目的点都是数据链路层。 2、signal 3、message-报文 我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元&#xff0c;也是网络传输的单元。…...

全排列 dfs

给定一个由不同的小写字母组成的字符串&#xff0c;输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z &#xff0c;而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行&#xff0c;是一个由不同的小写字母组成的字符串…...

画图,matlab,

clear;close all;clc;tic;dirOutput dir(*.dat); % 罗列所有后缀-1.dat的文件列表&#xff0c;罗列BDDATA的数据 filenames string({dirOutput.name}); % 提取文件名%% 丢包统计 FILENAMES [""]; LOSS_YTJ [ ]; LOSS_RAD [ ]; LOSS_ETH [ ]…...

any/all 子查询优化规则的原理与解析 | OceanBase查询优化

背景 在通常情况下&#xff0c;当遇到包含any/all子查询的语句时&#xff0c;往往需要遵循嵌套执行的方式&#xff0c;因此其查询效率较低。Oceanbase中制定了相应的any/all子查询优化规则&#xff0c;能够能够识别并优化符合条件的any/all子查询&#xff0c;从而有效提升查询…...

Visio——导出的PDF文件缺乏嵌入字体的解决办法 / 设置导出的PDF文件添加嵌入字体的方法

导出PDF时&#xff0c;勾选 “符合PDF/A” 选项 这样就导出的PDF文件添加了嵌入字体了。...

python:用 sklearn SVM 构建分类模型,并评价

编写 test_sklearn_5.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 估计器构建分类模型&#xff0c;并评价 """ import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.svm import SVC from sk…...