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

NAT技术+代理服务器+内网穿透

NAT技术

IPv4协议中,会存在IP地址数量不充足的问题,所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的,而公网中的IP地址都是唯一的,所以NAT(Network Address Translation,网络地址转换)技术是当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。

  • NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法。
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的。

 

 NAT转换过程

  1. 当客户端A想要向目标服务器发送数据时,会进行在网络层将源IP和目的IP字段填充进报头字段中,然后进行路由选择,选择合适的发送路径。
  2. NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37。
  3. NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10。
  4. 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表(地址映射表)。
  5. 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。
  6. 所以有了转换表以后不论是数据发送时私有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技术,通过在内网和外网之间建立一个虚拟通道,使得内网主机能够通过这个通道与另一个内网进行通信。

实现过程

  1. 共享信息:两个位于不同私有网络的设备(例如PC1和PC2)首先需要通过某种方式(如通过共同访问公共服务器),从而公共服务可以分别拿到PC1和PC2两台主机的公网入口路由器的IP+port。服务器得知两台主机各自的公网入口路由器的IP+Port之后,然后服务器将两台主机公网入口路由器的IP+port返回给对方主机,那么此时PC1就可以拿到PC2的公网入口路由器的IP+port,同时PC2就可以拿到PC1的公网入口路由器的IP+port。

  2. 触发NAT映射:接着,双方设备几乎同时向对方的入口路由器的公网IP地址和端口发送UDP数据包。这些数据包触发了各自的NAT设备,并且也会在NAT转换表中创建临时的NAT映射规则,允许后续来自相同源IP地址和端口的数据包通过。

  3. 直接通信:一旦双方的NAT设备都建立了映射规则,双方设备就可以直接进行通信,绕过任何中间服务器。

 内网穿透

内网穿透(也称为NAT穿透)的基本原理是通过某种方式,让外网设备能够访问到内网中的资源。

实现过程:内网穿透的原理其实和内网打洞的原理是一样的,但是实现过程有些许差异。首先两个内网想要进行通信(如PC1和PC2)。首先PC2会访问服务器,建立tcp连接,那么此时途中NAT路由器就会构建生成NAT转化表,然后紧接着PC1将想要发送的数据发给相同的服务器(此时PC1在访问服务器的这条路径中,所有NAT路由器的NAT转换表同样形成),然后该服务器将数据返回给PC2(通过构建好的NAT转换表)。此后双方就建立起通信。其实接下来也可以采用打通的方式进行通信。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • ASP.Net Core 因集成WebSocket导致Swagger UI显示错误
  • 11. MyBatis的一级缓存和二级缓存有什么区别?如何配置和使用二级缓存?
  • redis之缓存淘汰策略
  • 『功能项目』项目优化 - 默认管线转URP【31】
  • vue如何实现路由缓存
  • 7.统一网关-Gateway
  • 解决Pynput不能在Ubuntu22.04上正常使用问题
  • 百度飞将 paddle ,实现贝叶斯神经网络 bayesue neure network bnn,aistudio公开项目 复现效果不好
  • Oracle SQL和PL/SQL中SQL%ROWCOUNT和SQL%FOUND属性
  • STM32
  • 【Linux】冯诺依曼概念以及操作系统基础概念
  • Hadoop 下载
  • 集运系统需要与哪些硬件设备集成?
  • QString如何追加字符串
  • Docker入门(二) - Dockerfile
  • HTTP中GET与POST的区别 99%的错误认识
  • JAVA 学习IO流
  • JavaScript异步流程控制的前世今生
  • Java应用性能调优
  • Js基础知识(四) - js运行原理与机制
  • Python爬虫--- 1.3 BS4库的解析器
  • socket.io+express实现聊天室的思考(三)
  • vue数据传递--我有特殊的实现技巧
  • 构建工具 - 收藏集 - 掘金
  • 来,膜拜下android roadmap,强大的执行力
  • 聊聊hikari连接池的leakDetectionThreshold
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端攻城师
  • 使用API自动生成工具优化前端工作流
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 我这样减少了26.5M Java内存!
  • FaaS 的简单实践
  • ​你们这样子,耽误我的工作进度怎么办?
  • # Redis 入门到精通(一)数据类型(4)
  • (C语言)fgets与fputs函数详解
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (十六)串口UART
  • (十一)图像的罗伯特梯度锐化
  • (四)事件系统
  • (原创)可支持最大高度的NestedScrollView
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 8 跨平台高性能边缘采集网关
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET技术成长路线架构图
  • .NET上SQLite的连接
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Responsebody与@RequestBody
  • @Transactional 详解
  • [].slice.call()将类数组转化为真正的数组