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

NAT/代理服务器/内网穿透

目录

一 NAT技术

二 内网穿透/内网打洞

三 代理服务器


一 NAT技术

跨网络传输的时候,私网不能直接访问公网,就引入了NAT能讲私网转换为公网进行访问,主要解决IPv4(2^32)地址不足的问题。

1. NAT原理

当某个内网想访问公网,就必须先找到处于同一个网段的出入口路由器,而内网又不能暴露在公网上,所以当IP地址到达路由器时,路由器会把源IP转换成路由器的WAN口IP,并和源IP进行映射,这里他们互为 key <=> val,当服务器回显时,填充目的服务器IP地址,也就是之前经过转换后的IP地址,源地址填服务器的IP地址,在路由到目的IP所在的路由器,并由该路由器进行查映射表,查到转换之前的私有IP,在进行转发。

示例:

假设路由器的IP地址是202.244.174.37,源主机IP为10.0.0.10,目的IP地址为163.221.120.9

1. 经过路由器转换进行映射:

源:    10.0.0.10 <=> 路由器:202.244.174.37

目的:163.221.120.9 <=> 路由器:163.221.120.9

2. 经过服务器响应并路由回来:

服务器填充源IP:163.221.120.9,目的IP:202.244.174.37

路由器进行查表:202.244.174.37,查到得到:10.0.0.10,并交付给最初的主机。

3. 如果有2台主机同时向同一个目标服务器,那么路由器进行替换的时候就是:

源:    10.0.0.10 <=> 路由器:202.244.174.37

源:    10.0.0.11 <=> 路由器:202.244.174.37

这时就有2对一样的key了,后面的key会把前面的key覆盖掉,导致一方的主机的请求响应给后一个主机了,针对这个问题,路由器不仅要保存IP地址还要保存端口号,并让后来的端口号++,这样后续响应回来的数据虽然IP地址重复了,但端口号不一样,也就解决了多台主机访问同一资源映射导致的问题了,所以路由器不仅要缓存IP地址也要缓存端口号。

4. 这种把源IP地址/端口进行替换并建立映射就是NAT技术。

二 内网穿透/内网打洞

1. 前置

1. 正常主机A访问服务器进行一系列的NAT转换最终得到响应。

2. 那么一开始映射表没有服务器能不能直接访问主机A,不能,私网不能出现在公网上,同样的不同子网的内网最开始也不能直接通信。

2. 内网穿透

当B访问B自己的服务器建立映射表,并且服务器将来把收到的报文在转发到B自己,此时A访问这个服务器,服务器就会把A的报文转发到B,之前已经建立了B到服务器的映射,现象就是A直接穿透到了B,也就是内网穿透。

2. 内网穿透

这种通过得到对方转换后的IP地址,并且对方已经建立了映射表,后续就可以不通过公网服务器,直接路由到对方的路由器,因为对方已经和路由器建立了映射,发送方拿映射后的IP地址就能直接访问到对方建立映射表的路由器,这种不通过公网,直接从一个路由器跳到另一个路由器的技术也就是内网打洞,类似对方的路由器打了个洞,让发送方直接进去。

三 代理服务器

1. 正向代理

多个主机访问外网首先会经过代理服务器,由该服务器部署的某些服务帮你访问并响应回去,为什么要这么做?统一管理这些主机,比如访问非法网站,陌生的IP地址就直接不做转发,请求也就失败了。如果有多台主机访问同一个静态资源,代理服务器也能缓存,收到请求直接返回提高效率。当进行转发的时候把主机的IP替换成代理服务器的IP地址,也能保护主机的身份。某个主机资源开销高,就限制这台主机的资源速率,比如控制下载速度等。

2. 反向代理

发送方主机请求打到代理服务器,由代理服务去分配给接收方主机,比如采用轮询,随机分配等策略,避免某一台主机压力爆满,而其他的一直空闲,这种技术叫做负载均衡,当然也能保护客户端的身份,缓存等。

http://www.lryc.cn/news/2380332.html

相关文章:

  • Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析
  • 深入解析Spring Boot与Spring Security的集成实践
  • 【iOS】探索消息流程
  • 用户账号及权限管理:企业安全的基石与艺术
  • 413 Payload Too Large 问题定位
  • 2025年渗透测试面试题总结-360[实习]安全工程师(题目+回答)
  • Ubuntu16.04升级gcc/g++版本方法
  • 微信小程序van-dialog确认验证失败时阻止对话框的关闭
  • 边缘计算模块
  • 【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
  • OceanBase 的系统变量、配置项和用户变量有何差异
  • Git本地使用小Tips
  • 【Python】Jupyter指定具体路径
  • ThreadLocal作一个缓存工具类
  • RNope:结合 RoPE 和 NoPE 的长文本建模架构
  • virtualbox虚拟机中的ubuntu 20.04.6安装新的linux内核5.4.293 | 并增加一个系统调用 | 证书问题如何解决
  • unity UGUI虚线框shader
  • vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
  • chirpstack v4版本 全流程部署[ubuntu+docker]
  • DeepSeek 赋能数字孪生:重构虚实共生的智能未来图景
  • 每日一道leetcode(增加版)
  • 数字信号处理-大实验1.1
  • Java大厂求职面试:探讨Spring Boot与微服务架构
  • SAP ABAP 中驼峰字段名转 JSON 的实现方案
  • 对抗性机器学习:AI模型安全防护新挑战
  • [[春秋云境] Privilege仿真场景
  • Redis学习打卡-Day3-分布式ID生成策略、分布式锁
  • 计算机网络:怎么理解调制解调器的数字调制技术?
  • 数据库第二次作业--SQL的单表查询与多表查询
  • 在Cursor中启用WebStorm/IntelliJ风格快捷键