NAT技术+代理服务器+内网穿透
NAT技术
IPv4协议中,会存在IP地址数量不充足的问题,所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的,而公网中的IP地址都是唯一的,所以NAT(Network Address Translation,网络地址转换)技术是当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。
- NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法。
- 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的。
NAT转换过程
- 当客户端A想要向目标服务器发送数据时,会进行在网络层将源IP和目的IP字段填充进报头字段中,然后进行路由选择,选择合适的发送路径。
- NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37。
- NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10。
- 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表(地址映射表)。
- 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。
- 所以有了转换表以后不论是数据发送时私有IP向全局IP地址的转换还是数据接收时的全局IP向私有IP的转换都可以通过NAT路由器内部的路由表进行映射(互为键值关系)
如果此时客户端B 也在向目标服务器发送数据呢???
NAPT
如果局域网内,有多个主机都访问同一个外网服务器,并且此时这些主机的端口号也是一样的话,那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器在进行IP地址转换后的源地址都是NAT路由器的IP地址,那么转换后的源目的IP组就都是一样的了,所以数据就回不来了。
这时候NAPT来解决这个问题了。使用IP+port来建立这个关联关系:
可以看出,当我们的同一局域网下的主句同时访问相同服务器的话,那么 NAT路由器在转换的过程中会将源IP转换成NAT路由器的IP地址,端口的转换就取决于该路由表中是否存在重复的IP+PORT组,如果不重复就端口号不变,如果重复就同时替换端口号。(NAT的右侧不一定是公网,也可能是运营商构建的子网。内网路由器在向上转发报文的时候都会将源IP替换成路由器WAN口IP)
NAT技术的缺陷
- 无法一开始从NAT外部向内部服务器建立连接(NAT转换表未形成,可以看作内网主机保护)
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
代理服务器
代理服务器(Proxy Server)是一种位于客户端与目标服务器之间的中介服务,它充当了客户端和目标服务器之间的“代理”,接收来自客户端的请求,并将其转发给目标服务器,然后将目标服务器的响应返回给客户端。也就是说代理服务器的作用就相当于一个中间跑路人。
正向代理工作原理
正向代理服务器,也称为客户端代理,位于客户端和目标服务器之间。它的主要功能是代替客户端向目标服务器发送请求,并将目标服务器的响应返回给客户端。
当客户端在浏览器中设置好代理服务器后,所有通过该浏览器发出的网络请求都会先发送给代理服务器。代理服务器接收到请求后,会检查自己是否有缓存的响应数据。如果有,则直接返回给客户端;如果没有,则向目标服务器发起请求,并将获取到的响应数据返回给客户端。同时,代理服务器还会将响应数据缓存起来,以便后续相同请求的快速响应。(以上的过程其实我们的校园网就在使用)
优点:
- 资源共享(代理服务器内部缓存资源)
- 内网安全(隐藏客户端的真实IP)
- 用户拦截(客户端访问的URL是可视的)
反向代理工作原理
反向代理服务器位于目标服务器和客户端之间。主要功能是接收客户端的请求,并将这些请求转发给后端的多个服务器中的一个进行处理。
优点:
- 负载均衡:将客户端的请求分发到多个服务器上进行处理,提高系统的性能和可靠性。
- 提供安全性:反向代理服务器可以隐藏真实的服务器地址和配置信息,增加系统的安全性。同时,它还可以对请求进行过滤和检查,防止恶意攻击和非法访问。
NAT与代理服务器比较
- 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
- 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
- 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序, 需要部署在服务器上。
内网打洞和内网穿透
内网打洞
内网打洞主要用于解决两个私有网络(内网)中的设备之间直接通信的问题。内网打洞依赖于NAT技术,通过在内网和外网之间建立一个虚拟通道,使得内网主机能够通过这个通道与另一个内网进行通信。
实现过程
-
共享信息:两个位于不同私有网络的设备(例如PC1和PC2)首先需要通过某种方式(如通过共同访问公共服务器),从而公共服务可以分别拿到PC1和PC2两台主机的公网入口路由器的IP+port。服务器得知两台主机各自的公网入口路由器的IP+Port之后,然后服务器将两台主机公网入口路由器的IP+port返回给对方主机,那么此时PC1就可以拿到PC2的公网入口路由器的IP+port,同时PC2就可以拿到PC1的公网入口路由器的IP+port。
-
触发NAT映射:接着,双方设备几乎同时向对方的入口路由器的公网IP地址和端口发送UDP数据包。这些数据包触发了各自的NAT设备,并且也会在NAT转换表中创建临时的NAT映射规则,允许后续来自相同源IP地址和端口的数据包通过。
-
直接通信:一旦双方的NAT设备都建立了映射规则,双方设备就可以直接进行通信,绕过任何中间服务器。
内网穿透
内网穿透(也称为NAT穿透)的基本原理是通过某种方式,让外网设备能够访问到内网中的资源。
实现过程:内网穿透的原理其实和内网打洞的原理是一样的,但是实现过程有些许差异。首先两个内网想要进行通信(如PC1和PC2)。首先PC2会访问服务器,建立tcp连接,那么此时途中NAT路由器就会构建生成NAT转化表,然后紧接着PC1将想要发送的数据发给相同的服务器(此时PC1在访问服务器的这条路径中,所有NAT路由器的NAT转换表同样形成),然后该服务器将数据返回给PC2(通过构建好的NAT转换表)。此后双方就建立起通信。其实接下来也可以采用打通的方式进行通信。
相关文章:

NAT技术+代理服务器+内网穿透
NAT技术 IPv4协议中,会存在IP地址数量不充足的问题,所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的,而公网中的IP地址都是唯一的,所以NAT(Network Address Translation&…...

【ABAP】ole2 excel多sheet导入导出
原理就不分享了 原来是用了动态表格,但是要导出不方便,所以就写死了,excel多sheet导入的类放在另一篇文章里 REPORT zcdemo17. INCLUDE ole2incl.DATA: excel TYPE ole2_object,workbooks TYPE ole2_object,workbook TYPE ole2_object…...

图像配准-小结
图像配准:找到一对图像间的几何变换关系,并且将待配准图像根据几何变换关系对齐到参考图像上,从而为图像融合、变化检测/监测提供基础。图像匹配,在某些语境中可能与上面的图像配准指的是一个东西,而在某些语境中可能指…...

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

计算机基础知识-2
x86架构的寄存器 AT&T汇编和Intel汇编的区别 每取出完一条指令,PC会自动+"1",指向下一条要被执行的指令。这里的1是指下一条指令,但是指令本身可能占用多个字节,所以地址可能不是以1叠加 当前执行的是10…...

Ubuntu2204配置连续失败后账户锁定
配置启用pam_faillock sudo nano /etc/pam.d/common-auth在最上面添加以下内容 auth required pam_faillock.so preauth silent audit auth sufficient pam_unix.so nullok try_first_pass auth [defaultdie] pam_faillock.so authfail auditsudo nano /etc/pam.d/…...

windows下安装elasticSearch和kibana
下载es 下载地址官网 下载后是个压缩包(elasticsearch-8.15.0-windows-x86_64),解压即可 启动 配置 改一下 /conf/jvm.options文件,最后加一行编码配置,这个是为了启动后防止控制台乱码 -Dfile.encodingGBK启动es 依赖jdk8环境…...

Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379
首先要了解Redis的交互协议。 摘抄: 简单字符串(Simple Strings): 以 “” 开头,例如 “OK\r\n” 表示一个成功的响应。错误(Errors): 以 “-” 开头,例如 “-ERR unknown command\r\n” 表示一…...

WEB服务与虚拟主机/IIS中间件部署
WWW(庞大的信息系统)是基于客户机/服务器⽅式的信息发现技术和超⽂本技术的综合。网页浏览器//网页服务器 WWW的构建基于三项核⼼技术: HTTP:超文本传输协议,⽤于在Web服务器和客户端之间传输数据。HTML:⽤…...

JAVA开源项目 图书个性化推荐系统 计算机毕业设计
本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...

Spring Boot 注解探秘:HTTP 请求的魅力之旅
在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时…...

TYPE-C USB设计
目录 摘要 TYPE-C电路 握手过程 USB电路 摘要 TYPE-C,是USB的一种接口,USB的第一种接口为常见的USB接口,U盘即为这种接口;第二种接口的形状类似一个凸字,常应用在打印机中,第三种接口即为TYPE-C,支持正…...

Python炒股自动化,怎样理解股票交易性质
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

Vue2 day-02
目录 一. Vue脚手架(Vue CLI) 1.1 安装新版本的Vue脚手架vue/cli 1.2 用命令创建Vue项目 1.2.1 命令创建vue项目 1.2.2 默认创建 1.2.3 自定义创建 1.2.4 基于ui界面创建Vue项目 1.3 分析Vue脚手架生成的项目结构及代码执行 1.3.1 默认创建文件结构 1.3.2 分开放置文…...

什么?!新版 Node.js V22.5 自带 SQLite 模块啦
前言 2024年7月,Node.js V22.5.0 版本发布,自带了 SQLite 模块,意味着开发者可以直接在程序中使用 SQLite 数据库,而无需引入第三方库👍。 话不多说,感觉来体验一波✈。 安装/升级 我现在用的是21.4.0版…...

Maven持续集成(Continuous integration,简称CI)版本友好管理
从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用 r e v i s i o n 、 {revision}、 revision、{sha1}、${changelist}做为版本的占位符。 一、单module简单使用${revision}的场景 <project><modelVersion>4.0.0</modelVersion><parent><groupId…...

EvoSuite使用总结
1.安装EvoSuite插件 以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生成成功可以看到如下提示: 注意事项: 生成路径:src/test/java 使用juni…...

Cortex-A7:简单中断处理(不可嵌套中断)机制
0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A…...

k8s HPA
水平自动扩容和缩容HPA HPA全称Horizontal Pod Autoscaler,即pod水平自动伸缩。HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容(除了CPU利用率,也可以基于其他应用程序提供的度量指标cust…...

5G移动网络运维实验(训)室解决方案
随着第五代移动通信技术(5G)的快速普及和工业互联网的迅猛发展,全球制造业正面临着前所未有的深刻变革。5G技术凭借其超高的传输速率、极低的延迟以及大规模的连接能力,为工业自动化、智能制造等领域带来了革命性的技术支持。为了…...

单片机学习笔记
一、单片机帝国的诞生与发展 1.1 单片机的基本概念 单片机是一种集成电路芯片,采用超大规模的集成电路把具有数据处理功能的中央处理器存储器、输入输出端口、外围电路和相关外设集成在一块硅片上构成一个小而完整的微型计算机系统。 一般而言,单片机也…...

SpringBoot中@Value获取值和@ConfigurationProperties获取值用法及比较
SpringBoot中Value获取值和ConfigurationProperties获取值用法及比较 更新时间:2024年08月08日 09:41:48 作者:岳轩子 在Spring Boot中,Value注解是一个非常有用的特性,它允许我们将外部的配置注入到我们的Bean中,ConfigurationProperties用于将配置文件…...

执行任务赚积分
题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问…...

使用TLS解决Docker API暴露2375端口的问题
问题起因 由于本人开发环境是在 Windows,开发完成后需要使用 Dockerfile 打包镜像,这个过程需要有一个 Docker 服务完成,Windows 安装 Docker 会影响到很多环境,我又不想本地开虚拟机使用 Docker,于是我就索性使用服务…...

Pyspark中catalog的作用与常用方法
文章目录 Pyspark catalog用法catalog 介绍cache 缓存表uncache 清除缓存表cleanCache 清理所有缓存表createExternalTable 创建外部表currentDatabase 返回当前默认库tableExists 检查数据表是否存在,包含临时视图databaseExists 检查数据库是否存在dropGlobalTemp…...

聚焦2024数博会|与天空卫士一起探索AI与数据安全的融合应用
中国国际大数据产业博览会(简称数博会),是全球首个以大数据为主题的博览会,自2015年创办以来,经过多年的深厚沉淀,数博会已发展成为国际知名、引领前沿趋势的专业展示合作平台。 2024年8月28日至30日&#…...

实战docker第二天——cuda11.8,pytorch基础环境docker打包
在容器化环境中打包CUDA和PyTorch基础环境,可以将所有相关的软件依赖和配置封装在一个Docker镜像中。这种方法确保了在不同环境中运行应用程序时的一致性和可移植性: Docker:提供了容器化技术,通过将应用程序及其所有依赖打包在一…...

企业数字化转型的利器:RFID资产管理系统
在当今数字化时代,资产管理的效率和精确度对企业的成功至关重要。常达智能物联的RFID资产管理系统,凭借其高效、智能的管理方式,成为众多企业在数字化转型中的关键工具。 RFID资产管理系统的核心优势 一、精准资产定位与追踪 常达智能物联的…...

matplotlib中文乱码问题
在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导…...

提高开发效率的实用工具库VueUse
VueUse中文网:https://vueuse.nodejs.cn/ 使用方法 安装依赖包 npm i vueuse/core单页面使用(useThrottleFn举例) import { useThrottleFn } from "vueuse/core"; // 表单提交 const handleSubmit useThrottleFn(() > {// 具…...