从地址转换到点对点直连:详解NAT、代理、穿透与打洞

一、NAT

关于NAT的初步认识,这里就不在进行简单介绍了,不懂的可以看下面这篇文章一文读懂IP协议:网段、私有IP、公网IP与分片技术

前面我们说私有IP可以请求公网IP,是因为路由器将私有IP替换为了公网IP(WAN口IP),所以可以请求到目标主机但是目标主机在给源主机进行应答的时候,因为源主机用的是私有IP,所以目标主机无法将内容进行回复给源主机,我们把这个问题叫做内网转发

而将私有IP转化为公网IP的技术就叫做NAT

那如何解决这个问题呢?

源主机在请求目标主机的时候,会有目标主机的IP地址,目标主机的IP地址一定是公网IP,而源主机的私有IP虽然不具有唯一性,但是在请求的过程中,NAT会形成一张表,叫做NAPT这张表就是用来记录源主机与目标主机IP的映射关系的在未进行公网IP替换时,NAT会将源主机与目标主机的IP进行绑定,使之成为一个具有唯一性的键值,NAT替换之后,会用WAN口IP地址与目标主机的IP地址进行绑定,成为一个具有唯一性的值,这两对数据互为键值,请求的时候进行替换使用WAN口IP地址进行访问,内网转发的时候又替换成私有IP地址

在请求的时候,不仅仅需要IP地址,还需要端口号 。前面我们说过,网络通信的本质是两个进程之间在通信,IP地址用来标识全网内主机的唯一性,而端口号用来标识进程的唯一性。所以,请求时也是需要端口号的,那么新的问题来了。在同一个局域网内,主机A要请求目标主机E,主机B也要请求主机E,虽然私有IP地址不一样,但如果使用的端口号一样呢,那进行NAT替换的时候,它们使用的都是同一个WAN口IP地址怎么办,那岂不是会有一样的套接字(IP地址+端口号),内网转发时怎么区分?

所以,NAT转化的过程当中,路由器不仅仅会对IP进行替换,如果连原始报文中port已经被占用,连源端口也会被替换

因此,路由器替换之后,形成的socket(套接字)也是唯一的

1.外网可以直接访问内网的主机吗不能,因为我们使用的是私有P,路上路由器没有建立NAPT

2.内网主机可以访问外网吗可以,访问的过程当中内网路由器会自动建立NAPT

3.所以,为什么需要服务器?为什么聊天的时候要登录QQ,微信

因为要访问同一台主机,再将报文经过网络转发给对方

二、代理服务器

1. 代理服务器

什么是代理服务器呢

比如说,当用户请求资源时,要将报文发送给目标服务器,然后目标服务器在将内容推送给用户。现在有了代理服务器就不会将用户的请求直接发送给目标服务器了,而是发送给了代理服务器,再由代理服务器将用户的请求转发给目标服务器

所以,什么是代理服务器呢?代理服务器只负责转发,不负责处理请求处理请求的是目标服务器。代理服务器就相当于工具人一样,只搬运数据,不处理数据

那问题来了,为什么不直接把请求发送给目标服务器呢,还要把请求发送给代理服务器,再由代理服务器进行转发呢

代理服务器的存在自然也是有它的优点的。首先代理服务器分为正向代理服务器和反向代理服务器

那什么是正向代理服务器呢?

比如用户请求资源时,用户的请求发送给了代理服务器,再由代理服务器转发给目标服务器,而这个代理服务器主要是为了用户服务的,就叫做正向代理服务器

如果今天张三要请求一部美国队长3的电影,那他就直接将报文发送给代理服务器,再由代理服务器转发给目标服务器,目标服务器受理你的请求后将内容传给代理服务器,最后由代理服务器将内容推送给你 。在这个过程当中,代理服务器会对目标服务器推送过来的数据进行缓存,如果还有别人请求美国队长3这部电影,那么这个时候代理服务器接收你的请求后就不会将请求转发给目标服务器,直接就可以把数据推送给你这不就达到了提效资源访问的过程

正向代理服务器的功能特点

1.缓存功能正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度

2.内容过滤正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告,阻止恶意网站等

3.访问控制通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站

4.隐藏客户端的身份正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私

5.负载均衡在多个目标服务器之间分配客户端的请求,提高系统的可扩展性和可靠性

那什么是反向代理服务器呢?

机房大家都听过吧。公司里面也会有机房,这些机房会很多,以集群的形式存在。如果一个用户请求资源,将报文发送给目标服务器,目标服务器再将内容推送回给客户端。如果有许多的用户请求资源,这些请求被分配给了不同的目标服务器,那么就由这些服务器进行处理。但如果这些请求都给了同一台目标服务器呢?那这就属于忙闲不均了,会导致服务器宕机。

集群内部的机器,因为宕机,请求增多,或者修改ip,到时客户端无法看到资源。另外多个客户端可能会随意访问内部机器,导致访问工作都集中在一台机器上 。所以有了反向代理服务器,反向代理服务器主要是为了服务器提供服务的,所以叫做反向代理服务器反向代理服务器会将用户的请求进行分配,分配给不同的目标服务器,这样就解决了忙闲不均的问题了,减小了服务器的压力。这就叫做负载均衡

反向代理服务器的意义:

1.负载均衡反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡

2.安全保护反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的风险

3.缓存加速反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求,这可以大大减少后端服务器的负载,提升网站的响应速度

4.内容过滤和重写反向代理服务器可以根据配置规则对客户端的请求进行过滤和重写

5.动静分离在大型网站中,通常需要将动态资源和静态资源进行分开处理,通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器上返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提高静态资源访问的速度

2. 内网穿透

什么是内网穿透呢?

比如说今天你在家里请求云服务器上的资源,在请求资源的过程中会建立NAPT,基于TCP协议(最常见,但不只有TCP协议一个)。要实现内网穿透得依赖工具->frp,frp有frpc和frps分别代表客户端和服务端。在客户端部署frpc,服务端部署frps,两台主机都会有自己的端口号为了实现内网穿透就必须将服务端的端口号与客户端的端口号进行绑定,建立映射关系。比如服务端的端口号是8888,客户端的端口号是22,将8888->22的映射关系注册在客户端的frpc的配置文件里当客户端连接云服务器的时候将这个规则告诉给云服务器就可以了 。这样你去了学校之后,想要在学校访问你的电脑,也能访问了,这就是内网穿透内网穿透必须依赖于云服务器

在学校向云服务器请求资源时,就直接访问到了8888这个端口号,进而根据映射关系就访问到了你家里的电脑。这是两个局域网之间的跨立

它的应用场景就是远程办公特别是程序员在家里办公,直接就能通过自己的电脑访问到公司的电脑,进行远程办公

3. 内网打洞

刚才介绍了内网穿透,现在又来了一个内网打洞。这两个听起来很是相近啊!

那什么是内网打洞呢?

比如说:你在学校向你远在云南的朋友发消息,这条消息经过一路封装就会形成报文,报文在网络中一路传输,会经过很多路由器,我们用的都是私有IP,所以在请求公网IP时,路由器会将私用有P用WAN口IP地址进行替换,进而访问云服务器,此时云服务器记录下你的IP地址(公网IP地址),云服务器再将这条报文进行转发给你的朋友。当你的朋友给你应答的时候,同样的会将私有IP地址替换成公网IP地址,被云服务器记录。这是正常的通信过程

那如果云服务器将你朋友的 公网IP地址转发给你,你的 公网IP地址转发给你的朋友,本来两个局域网之间用的都是私有IP地址,是不能直接互相通信的,必须经过公网IP。现在你们各自拿到了对方的公网IP+端口号,那可不可以直接进行通信呢

是可以的此时你在给你的朋友发送数据,这条数据就不会在经过云服务器了进行转发了,而是通过路由器一路路由给对方。在请求资源的时候路由器已经建立好了NAPT,这个时候就可以把数据直接发送给对方了。这就叫做内网打洞

它的应用场景就是直播领域,将直播的数据同步的传输给用户,不经过云服务器

相关推荐
安科士andxe5 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
YJlio8 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
CTRA王大大8 小时前
【网络】FRP实战之frpc全套配置 - fnos飞牛os内网穿透(全网最通俗易懂)
网络
小白同学_C8 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖8 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
testpassportcn9 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
通信大师9 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
不做无法实现的梦~10 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Tony Bai10 小时前
告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准
开发语言·网络·后端·golang·php
消失的旧时光-194311 小时前
从 0 开始理解 RPC —— 后端工程师扫盲版
网络·网络协议·rpc