主页 > 手机  > 

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

【网络编程】之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的技术。

NAT转化过程:

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

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

内部私有IP目标外部IP192.168.1.1093.184.216.34192.168.1.118.8.8.8192.168.1.12216.58.200.14192.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:4431676974200192.168.1.11:49152203.0.113.5:60002UDP8.8.8.8:531676974150192.168.1.12:54321203.0.113.5:3389TCP216.58.200.14:4431676974300192.168.1.13:55000203.0.113.5:60003ICMP172.217.14.2061676974100

NAPT又常常被称为动态NAT。

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

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

代理服务器 正向代理 基本概念

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

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

正向代理图:

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

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

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

反向代理典型应用

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

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

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

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

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

核心区别:

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

生活场景类比:

正向代理: 类似“中介租房” —— 你(客户端)通过中介(代理)联系房东(服务器),房东不知道你的真实身份。反向代理: 类似“酒店前台” —— 客人(客户端)找前台(代理)点名要某个服务,前台背后可能有多个服务员(真实服务器)处理请求,客人不知道具体是谁服务的。 内网穿透与内网打洞 内网穿透 基本概念介绍

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

内网穿透的原理

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

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

内网穿透原理图:

内网打洞 基本概念介绍

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

为什么需要内网打洞

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

内网打洞的原理

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

我们下面介绍UDP打洞:

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

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

标签:

【网络编程】之NAT技术与代理由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【网络编程】之NAT技术与代理