目录
[1.1 NAT 技术背景](#1.1 NAT 技术背景)
[1.2 NAT IP 转换过程](#1.2 NAT IP 转换过程)
[1.3 NAPT(Network Address Port Translation)](#1.3 NAPT(Network Address Port Translation))
[2. NAPT(网络地址端口转换Network Address Port Translation)](#2. NAPT(网络地址端口转换Network Address Port Translation))
[3. NAT技术的缺陷](#3. NAT技术的缺陷)
[2.1 正向代理](#2.1 正向代理)
[2.2 反向代理](#2.2 反向代理)
[2.3 正向代理与反向代理](#2.3 正向代理与反向代理)
[2.4 NAT 和代理服务器](#2.4 NAT 和代理服务器)
一、NAT
NAT(Network Address Translation,网络地址转换)技术是一种在计算机网络中广泛使用的技术,主要用于将私有网络地址(如局域网内部地址)转换为公共网络地址(如互联网地址),以实现内部网络用户能够安全、有效地访问外部网络。
1.1 NAT 技术背景
IPv4 协议中, 存在IP 地址数量不充足的问题 ,而NAT 技术是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能;
- NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法:
- 很多学校, 家庭, 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务 器上设置全局 IP;
- 全局 IP 要求唯一, 但是私有 IP 不需要; 在不同的局域网中出现相同的私有 IP 是完全不影响的;
1.2 NAT IP 转换过程
如图所示,主机A想要访问公网中的一台服务器,刚开始数据包目的地址就是服务器的公网IP地址,源IP地址是主机A所在局域网的私有IP地址,由于目的地址是公网IP地址,在自己所在局域网中一定找不到,所以数据包就会不断地向上层路由器交付,当数据包经过NAT路由器时,由于死亡IP不能出现在公网中,路由器就会将源地址换为自己的WAN口IP地址,由自己代主机A发送数据。
当服务器也想给主机A发送数据时,会存在一个问题,服务器收到的源IP地址是NAT路由器的WAN口IP地址,那就无法准确找到主机A,其实在NAT路由器中维护了一张地址转换表,可以根据这个表中的映射关系找到主机A在这个局域网中的IP地址。
1.3 NAPT(Network Address Port Translation)
1.地址转换表
当数据包进过NAT路由器时,路由器会将源IP地址修改为自己的WAN口IP地址,此时NAT路由器也会自动生成一张地址转化表,构建转换的映射关系
在上述的例子中,会生成这样的转换表
但是,我们发现,一个局域网内的主机在经过NAT路由器替换IP后,发给目标主机的源IP地址都是路由器的WAN口IP,这就存在一个问题,这个转化是单向的,主机可以向目的服务器发送数据,但是如果服务器也要给主机发送数据时,由于不同主机给自己发送的源IP地址是一样的,这就导致服务器给不同主机发送的数据只能发送到NAT路由器,而NAT路由器就算查表也无法判断数据到底是发给谁的。不过NAPT就可以解决这个问题。
2. NAPT(网络地址端口转换Network Address Port Translation)
NAPT属于NAT(Network Address Translation,网络地址转换)的一种变种。为了解决上述问题,使用的是 IP+port 来建立这个关联关系,NAPT的主要功能是在私有网络和公共网络之间实现地址和端口的转换,以允许多个内部设备共享一个公共IP地址进行网络通信。
当内部设备(如计算机、手机等)通过NAT设备(如路由器)发送数据包到外部网络时,NAPT设备会将数据包的源IP地址和源端口号替换为公共IP地址和一个唯一的端口号,也就是说替换前后的IP+端口号是互为键值的,NAPT设备会维护一个映射表,记录内部设备的私有IP地址和端口号与公共IP地址和端口号之间的对应关系。当外部网络响应数据包时,NAPT设备会根据映射表将数据包的目标IP地址和目标端口号转换回相应的内部设备的私有IP地址和端口号,然后将数据包转发给内部设备。
这种关联关系也是由 NAT 路由器自动维护的. 例如在 TCP 的情况下, 建立连接时, 就会 生成这个表项; 在断开连接后, 就会删除这个表项
3. NAT技术的缺陷
由于 NAT 依赖这个转换表, 所以有诸多限制:
- 无法从 NAT 外部向内部服务器建立连接;
- 装换表的生成和销毁都需要额外开销;
- 通信过程中一旦 NAT 设备异常, 即使存在热备, 所有的 TCP 连接也都会断开;
二、代理服务器
代理服务器是计算机网络中的一种重要应用,它位于客户端和服务器之间,充当了二者之间的中介角色。它可以接收客户端的请求,并代表客户端向服务器发起请求,然后将服务器返回的数据转发给客户端。
2.1 正向代理
正向代理(Forward Proxy)位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
- 提高访问速度:正向代理服务器可以将目的服务器对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问(部分加速器)。
- 访问控制:访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
- 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
- 隐藏客户端身份:正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私。
工作原理:
- 客户端将请求发送给正向代理服务器。
- 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
- 正向代理服务器将处理后的请求转发给目标服务器。
- 目标服务器处理请求,并将响应返回给正向代理服务器。
- 正向代理服务器将响应返回给客户端。
应用场景
企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密
公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上 的不良信息影响。
提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速 度,减少网络延迟。
跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可 以帮助他们突破网络限制,顺畅地访问海外网站和资源。
2.2 反向代理
反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
基本原理
反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web 服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度, 特别是在高并发场景下。
安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略, 对客户端的请求进行过滤和限制,以保护后端服务器的安全。
缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤 和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。
动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应, 而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理
2.3 正向代理与反向代理
- 正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务器的代理,帮助服务器做负载均衡、安全防护等工作的。
- 正向代理一般是客户端架设的,而反向代理一般是服务端架设的。
- 正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就是真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。
2.4 NAT 和代理服务器
路由器往往都具备 NAT 设备的功能, 通过 NAT 设备进行中转, 完成子网设备和其他子 网设备的通信过程. 代理服务器看起来和 NAT 设备有一点像. 客户端像代理服务器发送请求, 代理服务器将 请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.
那么 NAT 和代理服务器的区别有哪些呢?
- 从应用上讲, NAT 设备是网络基础设备之一, 解决的是 IP 不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
- 从底层实现上讲, NAT 是工作在网络层, 直接对 IP 地址进行替换. 代理服务器往往工作在应用层.
- 从使用范围上讲, NAT 一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
- 从部署位置上看, NAT 一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.
翻墙的原理(仅解释原理)
我们在网络中发送的数据都是要经过运营商的,当我们想访问外网的网址例如githup等等,运营商检测出我们访问的目的IP是公网,就会拦截我们的请求,所以我们想要访问公网中的网址首先需要骗过运营商。首先我们需要一台可以直接访问公网的服务器,并在上面部署一个代理软件server,我们也需要在自己的主机上安装上代理软件client,假设我们想访问githup的网站,首先在我们的主机上构建一个Http请求,并对这个请求进行加密,发送给我们的服务器,运营上看到这个数据报时,看到目的IP是一台合法的服务器,由于我们对数据进行了加密,运营商也只能将数据推送给我们的服务器,此时我们的服务器就可以对数据进行解密,然后访问我们请求的网站,并将请求的数据进行加密在发送给我们的主机,这样就实现了翻墙
三、内网穿透
定义
内网穿透是指在内网环境下的设备通过互联网与外界通信的技术手段,它能够让无法直接暴露在公网上的设备被外界访问。这一技术通过在内网和外网之间建立一条安全的隧道,将内网中的数据封装起来,通过外网传输到目标主机,从而实现内网设备与外网的互通。
实现原理:
- 首先在代理服务器上部署安装配置"frps"(frp服务端),在主机部署安装配置"frpc"(frp客户端)。
- 让一台主机与代理服务器建立连接,生成NAT映射表。
- 通过"frpc"将本地某个端口映射到代理服务器"frps"的某端口。
这样我们在另一台主机通过访问服务器的特定端口,就可以直接访问到内网主机中的特定端口
内网打洞
定义:
内网打洞是在内网中进行网络连接的建立和通信的过程。它依赖于NAT(网络地址转换)技术,通过在内网和外网之间建立一个虚拟通道,使得内网主机能够通过这个通道与外网进行通信。
实现原理:
假设有两个存在不同局域网的主机,这两个主机都向同一个服务器构建好了NAT映射,服务器可以将两台主机的源IP和端口号交换给对方,此时两台内网中的主机就知道了对方的NAT路由器的WAN口IP地址和端口号,此时这两台主机就可以不经过服务器直接开始通信,当数据发送到对方的NAT路由器时,查转换表就可以直接找到对应主机,将数据发送。
内网打洞可以大幅度减轻服务器的压力,我们使用的QQ就是使用了这种技术