NAT技术
NAT技术
1. NAT原理
NAT(Network Address Translation,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。路由器构建了子网,将子网中主机的 IP 地址与外界隔离,使得不同的子网之间的主机的 IP 地址可以重复。
子网中的主机,并不知道自己的公网 IP,所以子网中的主机在与其他子网的主机通信时,其发送的报文中,源 IP 地址必定是私网 IP 地址,但这个 IP 地址在公网上肯定是无效的。所以要使用 NAT 技术来转换报文中的源 IP 地址。
子网中的主机向外网主机通信,一定是经过路由器转发的,所以 NAT 技术是由路由器来实现的。路由器在把子网主机的报文发往外网时,会将IP报头中的srcIP地址替换为 WAN 口 IP,经过层层替换,最终报头中的IP地址变成一个公网IP。
1.1 NAPT
在最后一层子网将私有 IP 地址,转换为公网 IP 地址的过程,是由 NAT 路由器来实现的。NAT 路由器维护着一张私有 IP 和端口转换成公网 IP 和端口的表,这个表就是 NAPT(Network Address Port Translation,网络地址端口转换),NAT路由器通过这个表,将能够将私网 IP 转换为公网 IP,也能将公网 IP 转换回私网 IP,建立私网世界和公网世界的通信。
同一子网中的主机私网 IP 转换成公网 IP 后,它们的公网 IP 都是相同的。
为了使不同的主机进入公网后,也具有唯一性,NAPT还会将源主机端口号也进行更改,当服务器返回给私网主机时再更改回去。这样,在子网中,依据不同的私有 IP 区别主机的唯一性,在公网中,依据不同的端口号区别来自同一子网中的主机的唯一性。
2.1 缺陷
由于 NAT 技术依赖 NAPT ,公网主机无法从 NAT 外部向内部服务器建立连接,装换表的生成和销毁都需要额外开销,通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开。
2. 内网穿透和内网打洞
2.1 内网穿透
内网穿透,是一项利用了 NAT 技术,使得一个子网的主机能够访问内网的主机的技术。如A子网主机使用 NAT 技术,通过一个外网服务器,与内网主机建立连接,此后A子网主机就能通过这个服务器间接访问内网主机。
由于内网中的主机都相对独立,在特殊的办公环境中,如内网服务器中的资源只能通过内网中的主机进行访问和查询。内网穿透一般用于大公司外地办公,使用外部设备进入公司内网,有的公司服务器还会使用随机token值防止非法访问。
frp是一个专门用来做内网穿透的软件,将frpc部署在自己的主机,将frps部署在云服务器上。
2.2 内网打洞
内网打洞的原理与内网穿透类似,只不过内网打洞是一项利用 NAT 技术来减轻服务器负担的技术。一个在公网中的服务器,肯定知道一个子网主机的公网 IP 和端口号。所以,我们可以利用这个特性,使得不同子网中的两台主机,能够绕过服务器直接进行通信。
-
分别让主机A和主机B与公网服务器建立连接,服务器此时肯定分别获取了主机A的公网 IP 和端口,以及主机B的公网 IP 和端口。
-
服务器将主机B的公网 IP 和端口以应用层报文的形式发给主机A,将主机A的公网 IP 和端口以应用层报文的形式发给主机B。
-
这样主机A和主机B就获取了对方的 IP 和端口,就能绕过服务器,直接使用这个端口与对方通信。
通过云服务器的echoserver将云服务器看到的客户端的IP和端口返回改日客户端,客户端就能知道自己子网的出入口。
内网打洞可以大幅减轻服务器转发数据的负担,在云盘中使用的 p2p 技术(通过其他本地拥有文件资源的主机与本主机直接连接,直接通过对方主机来下载相应的文件),就是内网打洞。
3. 代理服务器
代理服务器(Proxy Server)的功能是代理网络客户去取得网络信息,代理服务器分为正向代理,反向代理两种,各自有不同的功能及应用。
3.1 正向代理
正向代理(Forward Proxy),是一种位于客户端和目标服务器之间的网络代理服务器,用于代表客户端向目标服务器发送请求,并将响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理:
- 客户端将请求发送给正向代理服务器。
- 正向代理服务器接收请求,并根据配置进行处理, 如缓存查找、 内容过滤等。
- 正向代理服务器将处理后的请求转发给目标服务器。
- 目标服务器处理请求, 并将响应返回给正向代理服务器。
- 正向代理服务器将响应返回给客户端。
功能特点:
-
缓存功能
正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时, 可以直接从缓存中获取,提高访问速度。
-
内容过滤
正向代理可以根据预设的规则对请求或响应进行过滤, 如屏蔽广告、阻止恶意网站等。
-
访问控制
通过正向代理, 可以实现对特定网站的访问控制, 如教学楼的WIFI连上后用不了作业帮。
-
隐藏客户端身份
正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私
-
负载均衡
在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性
3.2 反向代理
反向代理(Reverse Proxy),是一种位于客户端和目标服务器之间的网络代理服务器,但与正向代理相反,反向代理用于代表服务器向目标客户端接收请求,并将请求转发给后端服务器,然后将后段服务器的响应返回给客户端。这种架构模式可以提升网站性能、 安全性和可维护性等。
应用场景:
-
负载均衡
反向代理通过轮询算法活随机数算法等,将客户端的请求分发到多个后端服务器上,这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
-
安全保护
反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址, 降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL) 等安全策略,对客户端的请求进行过滤和限制, 以保护后端服务器的安全。
-
缓存加速
反向代理服务器可以缓存后端 Web 服务器的响应内容, 对于重复的请求, 它可以直接从缓存中返回响应, 而无需再次向后端服务器发起请求。 这可以大大减少后端服务器的负载, 提升网站的响应速度。
-
内容过滤和重写
反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写, 例如添加或删除请求头、 修改请求路径等。 这有助于实现一些特定的业务需求, 如 URL 重写、 用户认证等。
-
动态分离
在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上, 可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度。
-
CDN(Content Delivery Network,内容分发网络)
CDN 用于小公司将消耗大流量的图片、css、js文件,放在第三方服务器中,用户在访问网页时,只从小公司服务器中拿html,其他文件通过第三方服务器访问,以减少小公司服务器的转发流量。
相关文章:
NAT技术
NAT技术 1. NAT原理 NAT(Network Address Translation,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。路由器构建了子网,将…...
pytest 常用插件
pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍,并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行,可以将测试分配到多个 CPU 核心并行运行,从…...
Avalonia 入门笔记(零):概述
Avalonia 是一个基于 .NET 和 Skia 的开源、跨平台 UI 框架,支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。Skia 是一个基于 C 的开源 2D 渲染引擎,Avalonia 通过 Skia 自绘 UI 控件,保证在全平台具有一致的观感 基于 .NET 的跨…...
19_TypeScript 声明文件 --[深入浅出 TypeScript 测试]
TypeScript 声明文件(.d.ts 文件)用于描述 JavaScript 库或模块的类型信息,使得 TypeScript 编译器能够在使用这些库时提供类型检查和智能感知。声明文件并不包含任何实现代码,只定义了接口、类、函数等的类型签名。这对于确保类型…...
如何当前正在运行的 Elasticsearch 集群信息
要查看当前正在运行的 Elasticsearch 集群信息,可以通过以下几种方法: 1. 使用 _cluster/health API _cluster/health API 返回集群的健康状态、节点数量、分片状态等信息。可以用 curl 命令直接访问: curl -X GET "http://localhost…...
【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表
本文讲述在ArcGIS中,以globeland30数据为例,将栅格数据每个像元值转为Excel文本,便于在Excel中进行统计分析。 文章目录 一、加载globeland30数据二、栅格转点三、像元值提取至点四、Excel打开一、加载globeland30数据 打开配套实验数据包中的0138.rar中的tif格式栅格土地覆…...
【hadoop学习遇见的小问题】centos常见配置 添加组用户权限 修改主机名等
1、指定静态ip vi /etc/sysconfig/network-scripts/ifcfg-eth0修改BOOTPROTO为static BOOTPROTOstatic IPADDR192.168.80.145 NETMASK255.255.255.0 GATEWAY192.168.80.2IPADDR、NETMASK用ifconfig命令即可查看 GATEWAY如何查看(编辑—虚拟网络编辑器—上面选择NA…...
16_Redis Lua脚本
Redis Lua脚本是Redis提供的一种强大的扩展机制。 1.Redis Lua脚本介绍 1.1 基本概念 Redis Lua脚本允许开发者将一段Lua语言编写的代码发送给Redis服务器执行。这项功能自Redis 2.6版本引入以来,为用户提供了强大的灵活性和扩展能力,使得可以在Redis内部直接处理复杂的业…...
Appium版本升级,需要注意哪些点:使用UiAutomator2Options传递capabilities
mac上安装的是较新的Appium版本,在跑之前写的Android UI 自动化代码时报错:AttributeError: dict object has no attribute to_capabilities。 查了一下资料,这是因为较新的 Selenium 和 Appium 版本要求使用 Options 类来定义能力ÿ…...
MySQL的增删改查(基础)-下篇
修改 真正在改硬盘了,这样的修改是“持久有效”。一定要确保,update的修改是改对了,改出问题来就麻烦。指定update的时候,如果当前不指定任何条件,就会针对所有的行都能生效! (把整个表都给改了)。 案例 --…...
Mysql--基础篇--事务(ACID特征及实现原理,事务管理模式,隔离级别,并发问题,锁机制,行级锁,表级锁,意向锁,共享锁,排他锁,死锁,MVCC)
在MySQL中,事务(Transaction)是一组SQL语句的集合,这些语句一起被视为一个单一的工作单元。事务具有ACID特性,确保数据的一致性和完整性。通过事务,可以保证多个操作要么全部成功执行,要么全部不…...
Android系统定制APP开发_如何对应用进行系统签名
前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…...
Vue篇-06
1、路由简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...
学习threejs,导入wrl格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.VRMLLoader wrl模型加…...
winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇
1. AntdUI 1.1. 导入项目 1.1.1. 首先新建一个空白的基于.net的Winfrom项目1.1.2. 复制AntdUI中src目录到我们的解决方案下面1.1.3. 解决方案下添加现有项目1.1.4. 添加项目引用 1.2. 编写代码 1.2.1. 改写Form1类,让其继承自public partial class Form1 : AntdUI.W…...
likeshop同城跑腿系统likeshop回收租赁系统likeshop多商户商城安装及小程序对接方法
前言:首先likeshop是一个开发平台,是一个独创的平台就像TP内核平台一样,你可以在这个平台上开发和衍生出很多伟大的产品,以likeshop为例,他们开发出商城系统,团购系统,外卖点餐系统,…...
java -jar启动项目报错:XXX.jar中没有主清单属性
XXX.jar中没有主清单属性 1、错误复现2、错误原因3、解决方案 java -jar启动项目报错:XXX.jar中没有主清单属性 1、错误复现 今天使用springboot给项目打了jar包,使用命令启动时报错,截图如下: 2、错误原因 项目的pom文件配置如…...
浅谈云计算03 | 云计算的技术支撑(云使能技术)
云计算的技术支撑 一、定义与内涵1.1 定义与内涵 二、云计算使能技术架构2.1 宽带网络和 Internet 架构2.2 数据中心技术2.3 虚拟化技术2.4 Web 技术2.5 多租户技术2.6 服务技术 一、定义与内涵 1.1 定义与内涵 云计算技术包含一些基础的关键技术,这里称为使能技术…...
使用LinkedList手撕图的邻接表
主要是学习图的邻接表的核心结构等等,话不多说直接上代码: import java.util.LinkedList;public class GrapAdj {private int n ; // 表示图中顶点的数量。private LinkedList<Integer>[] adj;public GrapAdj(int n){this.n n;adj new LinkedLis…...
学习RocketMQ
1.为什么要用MQ? 消息队列是一种“先进先出”的数据结构 其应用场景主要包含以下4个方面: 1.1 异步解耦 最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。传统的做法有以下两种: …...
sap mm学习笔记
1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...
Dockerfile 构建java镜像并运行部署java项目
目录 1. 前提准备 2. 什么是Dockerfile 3. 步骤 3.1. 创建目录 3.2. 编写dockerfile文件 3.3. 构建镜像 3.4. 运行容器 3.5. 验证 4. 总结 1. 前提准备 (1) 准备一个jar打包文件,已为大家准备(我这里的包名为 app.jar) 资源链接,点我下载 (2) 已经下载…...
【C语言系列】函数递归
函数递归 一、递归是什么?1.1尾递归 二、递归的限制条件三、递归举例3.1举例一:求n的阶乘3.2举例二:顺序打印一个整数的每一位 四、递归与迭代4.1举例三:求第n个斐波那契数 五、拓展学习青蛙跳台问题 一、递归是什么? …...
windows10 安装 Golang 版本控制工具g与使用
下载包:https://github.com/voidint/g/releases 解压, 并添加到环境变量 g 常用命令 查询当前可供安装的stable状态及所有的 go 版本 # stable 版本 g ls-remote stable# 所有版本 g ls-remote安装目标 go 版本1.23.4g install 1.23.4切换到已安装的…...
WordPress开发进群V2主题,多种引流方法,引私域二次变现
介绍: 全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也是如此随机刷新不重复 进群页面简介,群聊名称&#…...
在 CentOS/Red Hat Linux 中安装 Docker
在 Red Hat Linux 中安装 Docker 在 Red Hat Linux (RHEL) 中安装 Docker 需要一些准备工作,尤其是针对不同版本的系统(如 RHEL 7、8、9)。以下是具体的安装步骤: 步骤 1:检查系统版本 在安装前,确认系统…...
【DAPM杂谈之二】实践是检验真理的标准
本文主要分析DAPM的设计与实现 内核的版本是:linux-5.15.164,下载链接:Linux内核下载 主要讲解有关于DAPM相关的知识,会给出一些例程并分析内核如何去实现的 /**************************************************************…...
关于使用FastGPT 摸索的QA
近期在通过fastGPT,创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上,可以定义业务逻辑,满足输出对话之外的需求。 在最近3个月来的摸索和实践中,一些基于经验的小问题点(自己也常常…...
虚拟文件系统 VFS
目录 虚拟文件系统 VFS 文件系统挂载过程 虚拟文件系统 VFS 统一标准的系统调用接口: VFS定义了一组标准的文件操作API,如open(), read(), write(), close()等,使得用户空间的应用程序无需关心底层文件系统的具体类型。 下层文件系统必须实现…...
React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)
触发渲染过程——renderRoot renderRoot 是一个函数,用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务,直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork,以及渲染新状态或 DOM。 function ren…...
Xcode 正则表达式实现查找替换
在软件开发过程中,查找和替换文本是一项常见的任务。正则表达式(Regular Expressions)是一种强大的工具,可以帮助我们在复杂的文本中进行精确的匹配和替换。Xcode 作为一款流行的开发工具,提供了对正则表达式的支持。本…...
【opencv】第8章 图像轮廓与图像分割修复
8.1 查找并绘制轮廓 一个轮廓一般对应一系列的点,也就是图像中的一条曲线。其表示方法可能 根据不同的情况而有所不同。在OpenCV 中,可以用findContours()函数从二值图 像中查找轮廓 8.1.1 寻找轮廓: findContours() 函数 findContours) 函…...
excel VBA 基础教程
这里写目录标题 快捷键选择所有有内容的地方 调试VBA录制宏,打开VBA开发工具录制宏,相当于excel自动写代码(两个表格内容完全一致才可以) 查看宏代码保持含有宏程序的文件xlsm后缀(注意很容易有病毒)宏文件安全设置 使…...
2008-2019年各省城镇人口数据
2008-2019年各省城镇人口数据 1、时间:2008-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、城镇人口 4、范围:31省 5、指标解释:城镇人口是指居住在城镇范围内的全部常住人口。 6、下…...
【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞
文章目录 概率与统计基础:解锁机器学习的数据洞察之门前言一、概率论基础1.1 概率的基本概念与性质1.1.1 概率的定义1.1.2 样本空间与事件1.1.3 互斥事件与独立事件1.1.4 概率的计算方法 1.2 条件概率与独立性1.2.1 条件概率1.2.2 独立事件 1.3 随机变量1.3.1 随机变…...
vscode使用Marscode编程助手
下载 vscode 在插件里下载Marscode编程助手 插件完成 在这里点击安装,点击后这里出现AI编程插件。...
谷歌开放语音命令数据集,助力初学者踏入音频识别领域
在人工智能的浪潮中,语音识别技术正逐渐成为我们日常生活的一部分。从智能助手到语音控制设备,语音识别的应用场景越来越广泛。然而,对于初学者来说,进入这一领域往往面临诸多挑战,尤其是缺乏合适的开源数据集和简单的…...
Diffchecker图像比较工具介绍
Diffchecker图像比较工具介绍 网站地址: Diffchecker图像比较 主要功能: 图像差异比较: 该工具允许用户上传两张图片,系统会自动识别并高亮显示这两张图片之间的差异。简单易用: 用户只需将图片拖放到指定区域或点击浏…...
后端开发 Springboot整合Redis Spring Data Redis 模板
目录 redis 配置 RedisConfig 类 完整代码 代码讲解 1. 类定义和注解 2. 定义 RedisTemplate Bean 3. 配置 JSON 序列化 4. 配置 Redis 的 key 和 value 序列化方式 5. 完成配置并返回 RedisTemplate 总结 redis 服务接口实现类 类级别 注入 RedisTemplate 常用 Re…...
极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5
本分分享极狐GitLab 补丁版本 17.7.1, 17.6.3, 17.5.5 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…...
策略模式详解与应用
策略模式(Strategy Pattern),是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,而应用程序可以在运行时选择使用哪一个算法。策略模式使得算法的变化独立于使…...
Gateway怎么实现限流的
Gateway怎么实现限流的 在API网关(如Spring Cloud Gateway、Kong、Nginx等)中实现限流是为了控制服务请求的频率,从而避免系统过载,确保稳定性和可用性。限流可以通过多种策略实现,常见的方法包括基于请求次数、时间窗…...
OpenCV实现Kuwahara滤波
Kuwahara滤波是一种非线性的平滑滤波技术,其基本原理在于通过计算图像模板中邻域内的均值和方差,选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明: 一、基本思想 Kuwahara滤波的基本思想…...
【DevOps】Jenkins使用Pipeline构建java代码
使用Pipeline发布java项目 文章目录 使用Pipeline发布java项目资源列表基础环境一、准备gitlab1.1、部署gitlab1.2、创建chinanews项目1.3、提交代码1.4、查看上传的代码 二、准备Jenkins2.1、部署Jenkins2.2、安装maven2.3、修改Maven源2.4、准备chinanews 三、Jenkins配置工具…...
【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题
文章目录 选择题理论题 解释RIP协议中的“水平分割”机制,并说明其目的。 可以防止路由器错误地将从邻居学到的路由再发送回给该邻居,从而避免路由环路的发生。实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论…...
Entity 的材质(棋盘、条纹、网格)
Entity 的材质 普通物体的材质 import { nextTick, onMounted, ref } from vue import * as Cesium from cesium // console.log(Cesium, Cesium)const viewer ref<any>(null)onMounted(() > { ... })let material Cesium.Color.YELLOW.withAlpha(0.5)Cesium.Colo…...
shell脚本编写练习3
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 #!/bin/bash # 定义文件路径变量 file_path"/tmp/size.log"# 使用if语句检查文件是否存在 if [ -e "$file_path" ] # 检查变量file_path…...
事务的隔离级别和MDL
文章目录 说明不同隔离级别可能发生的现象关键现象解释MDL(元数据锁,Metadata Lock)MDL 的作用MDL 的工作原理MDL 锁的常见场景如何避免 MDL 阻塞 说明 本文章由大模型对话整理而来,如果有错误之处,请在评论区留言指正…...
用户界面软件05
已知应用 几乎所有的流行的用户界面架构都使用这种模式。我在这里举三个例子: 1. Seeheim 用户界面架构的特点是有一个应用核心的领域层和一个用户界面层。后者 被分为两层,叫做表示层和对话控制层。因为这个架构和面向事务系统有渊源,没有…...
基于Springboot + vue实现的办公用品管理系统
🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...