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

【网络编程】之NAT技术与代理

【网络编程】之NAT技术与代理

  • NAT技术
    • 为什么需要NAT技术
    • NAT技术原理介绍
    • NAPT
    • 缺陷与不足
  • 代理服务器
    • 正向代理
      • 基本概念
      • 正向代理步骤
      • 正向代理典型应用
    • 反向代理
      • 基本概念
      • 反向代理步骤
      • 反向代理典型应用
    • 正向代理与反向代理的区别
  • 内网穿透与内网打洞
    • 内网穿透
      • 基本概念介绍
      • 内网穿透的原理
    • 内网打洞
      • 基本概念介绍
      • 为什么需要内网打洞
      • 内网打洞的原理

NAT技术

为什么需要NAT技术

原先的网络划分(将IP地址划分为不同的类比)浪费了大量的IP地址,而由于网络的飞快发展,IP地址早就不够了,传统的网络划分不再能满足我们对ip地址的需求,新的网络划分技术CIDR出现。

CIDR技术构建的互联网中,引入了私网IP的概念,而且整个互联网的边缘几乎都是由私网ip构建的小局域网,又称之为内网,内网中IP地址可以重复,这变相的缓解了IP地址不足的问题,但是当内网中的主机想访问公网中的服务器,可源IP却是一个内网IP,当服务器想给主机返回报文的时候就无法返回了。

由此NAT技术应运而生。

NAT技术原理介绍

NAT技术是当代路由器的核心功能,它主要负责在进行网络通信时,将内网中的主机的源IP地址(私网IP)与当前路由器的WAN口的IP地址不断替换,直到这个IP地址变成公网IP,简单点说,NAT技术就是将内网IP在对外进行网络通信时将其转化为公网IP、而当报文想要发送给内网中的主机时又将公网IP转化为内网IP的技术。

image-20250217124930412

NAT转化过程:

image-20250217131119164

  • 当路由器收到来自服务器A的数据时,又会把目标IP地址从107.150.99.145转化为10.0.0.2

    image-20250217131621174

  • 为什么内网中可能有很多主机,路由器能准确的直到应该将数据帧中的IP报文的目的IP替换为哪一个主机的内网IP地址的,因为路由器中维护着一张NAT转换表,动态的维护着转换信息,路由器可以解析并识别IP报文的信息,还可以更改它的源IP/目的IP的值,所以路由器是工作在网络层。下面是一张常见的简单基础的NAT转换表

内部私有IP目标外部IP
192.168.1.1093.184.216.34
192.168.1.118.8.8.8
192.168.1.12216.58.200.14
192.168.1.13172.217.14

NAPT

上述NAT技术虽然一定程度上实现了私网IP和公网IP的转换,但是NAT转换表只是简单的存储私有IP与目的IP并不能解决所有的问题,因为有时候同一个私网中,可能存在很多主机访问同一公网服务器,这个时候公网服务器返回了报文,你应该将报文交给哪个主机呢?

由此,NAPT技术发展,它是NAT技术的升级版,采用地址+端口号双重映射的方式

并且为了防止端口号重复造成和上面一样的情况,NAPT还会动态替换源端口号,以防止源端口号重复,在报文返回的时候,会替换回原来的私网IP地址和源端口号,下面是一个典型的NAPT转换表:

内部私有IP:端口转换后公网IP:端口协议类型目标外部IP:端口过期时间戳
192.168.1.10:54321203.0.113.5:60001TCP216.58.200.14:4431676974200
192.168.1.11:49152203.0.113.5:60002UDP8.8.8.8:531676974150
192.168.1.12:54321203.0.113.5:3389TCP216.58.200.14:4431676974300
192.168.1.13:55000203.0.113.5:60003ICMP172.217.14.2061676974100

NAPT又常常被称为动态NAT

缺陷与不足

  1. 维护NAT转换表需要一定的成本,NAT转换表会有溢出的风险。
  2. 如果NAT路由设备出现故障,其子网中的主机与外部的连接会直接断掉。
  3. 外部服务器无法直接与NAT中的内部主机之间建立连接(破坏端到端通信的特性,因为中间有这个NAT服务器更改了数据帧的内容),需要通过内网打洞技术。

ipv6协议是128位,彻底解决了ip地址不足的问题,所以ipv6标准是明确建议不使用NAT的。

代理服务器

正向代理

基本概念

正向代理位于客户端与服务器之间,代表客户端向服务器发送请求。实际的网络请求是代理服务器发出的,而不是客户端,所以客户端不会向服务器暴露自己真实的IP地址。

正向代理步骤

  1. 客户端配置通过代理服务器访问网络。
  2. 当客户端进行网络通信时,它首先会把网络请求发送给代理服务器。
  3. 代理服务器收到请求后,会代替客户端向目标服务器发送请求。
  4. 目标服务器将响应返回给代理服务器,代理服务器再将结果返回给客户端。

正向代理图:

image-20250217174801263

正向代理典型应用

  1. 流量过滤:如学校或者公司的网络,通常都会部署一个代理服务器,当学生或者职员连接上网络后,请求服务会先发送给代理服务器,就可以在代理服务器中设置出站规则,比如如果访问了不合法网站(娱乐网站)就不代理了,而是发送一个RST报文或者重定向到警告页面。
  2. 匿名上网:不暴露客户端的IP地址,服务器也就不知道访问它服务的是谁。
  3. 缓存:当多个客户端访问某个相同的服务器的服务时,代理服务器可以将其内容进行缓存(比如视频),然后直接返回给客户端,节省带宽,提高了访问速度。
  4. 绕过防火墙:用户可以通过代理服务器访问被封锁的服务,用户直接访问是不允许的,因为国内有防火墙,发现目的IP如果在黑名单中会直接返回RST重置连接,但是通过正向代理可以实现,因为防火墙并不是封锁了所以的境外IP和端口。但是防火墙会识别你的报文的内容,如果不合规也会掐掉,所以需要使用一些加密算法。

反向代理

基本概念

反向代理和正向代理不同,反向代理服务的对象是服务器,而正向代理它服务的对象是客户端,反向代理位于客户端和一组内部服务器之间,对于客户端来说,反向代理服务器就像是服务器本身,对于内部服务器来说,所有的请求都来自反向代理服务器。

反向代理步骤

  1. 客户端向反向代理服务器发送网络请求。
  2. 反向代理服务器在接收到网络请求后,按照预定的规则再决定将请求发送发送给哪个后端服务器。
  3. 该后端服务器将请求报文处理后将响应报文发送给反向代理服务器。
  4. 反向代理服务器再将响应报文返回给客户端,就像它是原始的服务器一样。

image-20250217182157054

反向代理典型应用

  1. 负载均衡:反向代理服务器可以检测后端服务器的空闲情况(负载均衡算法),然后再决定将请求交给哪个后端服务器处理,优化资源利用,提高响应速度和服务质量。

  2. 安全性:不直接暴露后端服务器的IP地址,增加一层防护,增强了服务器的安全性。

  3. 缓存:反向代理服务器也可以缓存静态内容,减轻后端服务器的压力。

  4. 高可用性:如果某个后端服务器崩溃,反向代理服务器可以将其更换,保证服务可以继续进行。

正向代理与反向代理的区别

核心区别

特性正向代理反向代理
代理对象客户端(用户)服务端(服务器)
用户感知客户端主动配置代理客户端无感知
主要用途隐藏客户端身份/突破访问限制隐藏服务器/负载均衡/缓存
典型场景翻墙、公司内网访问控制网站负载均衡、CDN、HTTPS终结
请求方向客户端 → 代理 → 目标服务器客户端 → 代理 → 真实服务器

生活场景类比:

  1. 正向代理
    类似“中介租房” —— (客户端)通过中介(代理)联系房东(服务器),房东不知道你的真实身份。
  2. 反向代理
    类似“酒店前台” —— 客人(客户端)找前台(代理)点名要某个服务,前台背后可能有多个服务员(真实服务器)处理请求,客人不知道具体是谁服务的。

内网穿透与内网打洞

内网穿透

基本概念介绍

内网穿透是一种技术,它允许从某一个私网中间接的访问另一个私网中的设备或服务,由于NAT技术的存在,我们无法直接访问它,只能通过外部服务器间接的访问它,这种技术非常有用,如果你需要从互联网中访问处于家庭网络(内网)中的摄像头设备。

内网穿透的原理

内网穿透的基本思想是在内网和外网中建立一条双向通信的通道。它有很多种不同的实现方式,下面我们来介绍一种常见的实现方式:隧道技术

通过SSH隧道、GRE隧道或者专门的软件如Ngrok、FRP(Fast Reverse Proxy)等创建加密的安全通道。这种方法不仅能够穿透NAT,还能提供额外的安全性。

内网穿透原理图

image-20250217215946968

内网打洞

基本概念介绍

内网打洞是一种常见的网络技术,用于在两个NAT网络中的子网设备间建立点对点的连接。这种技术常用于P2P(Peer-to-Peer)应用中,比如在线游戏、VoIP(如Skype)、文件共享等场景,允许这些应用穿透NAT或防火墙,实现直接通信。

为什么需要内网打洞

大多数家庭网络和小型办公室都使用NAT技术,这使得内部网络中的设备使用私网IP,并通过一个公网IP访问互联网。这意味着如果通信双方都在NAT之后,则它们必须通过外部服务器进行通信,而无法进行直接的访问,因为它们都无法知道对方的公网IP。内网打洞旨在解决上述问题,实现通信双方即使都在NAT之后,也能进行直接通信

内网打洞的原理

常见的内网打洞分为UDP打洞TCP打洞STUN/TURN服务器

我们下面介绍UDP打洞

  1. 假设A、B双方想要通信,它们需要向一台已知的公网服务器发送UDP数据包
  2. 公网服务器记录下它们对应的外网IP地址和端口号(经过NAT转换的),然后分别告知对方。
  3. 尝试直接连接:然后,A和B分别根据从服务器获得的信息直接向对方的映射地址发送UDP数据包。此时,NAT设备会在其映射表中为每个新的“传出”连接创建一个新的条目,允许相应的“传入”流量通过。

UDP打洞成功的条件NAT设备允许内部主机之前未访问过的IP地址向它发送报文。有一些NAT设备为了安全考虑并不允许。

image-20250217223223363


http://www.kler.cn/a/551008.html

相关文章:

  • day4 多连联表慢查询sql查询优化
  • Unity与SVN集成:实现高效版本控制
  • BERT文本分类(PyTorch和Transformers)畅用七个模型架构
  • 项目BUG
  • ELK8.17部署(Ubantu24x64)
  • Docker的前世今生及安装与使用命令详解
  • 2025年:边缘计算崛起下运维应对新架构挑战
  • 鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍
  • Flutter:动态表单(在不确定字段的情况下,生成动态表单)
  • Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
  • Java 不可变集合
  • 【市场问题排查神器-arthas】
  • 鸿蒙UI开发——隐私遮罩效果
  • 百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
  • Springboot RabbitMQ 消费失败消息清洗与重试机制
  • 【Python网络爬虫】爬取网站图片实战
  • 智能马达保护器:为工业电机安全运行保驾护航
  • 《解锁自然语言处理:让公众正确拥抱AI语言魔法》
  • Natural Language Processing NLP
  • STM32外设SPI FLASH应用实例