目录
- 一、NAT
-
- [1.1 内网打洞](#1.1 内网打洞)
- [1.2 内网穿透](#1.2 内网穿透)
- 二、代理服务器
-
- [2.1 正向代理](#2.1 正向代理)
- [2.2 反向代理](#2.2 反向代理)

个人主页:矢望
个人专栏:C++、Linux系统编程、Linux网络编程、C语言、数据结构、Coze-AI、MySQL
一、NAT
NAT(网络地址转换) 是一种将内网IP地址转换为外网IP地址的技术,使多个设备能共享一个公网IP访问互联网。
在之前的网络层博客中已经聊过NAT技术了。这种技术大大缓解了IP地址数量不足的问题。

如上是之前贴过的内网主机向公网发送报文的过程。每经过一台路由器,路由器都会自动把报文的源IP替换成自己的WAN口IP。事实上,不止源IP改变,源端口也可能会被改变。
如上图,之前说了内网发送到公网的整个过程,也在图中写了清楚。而从公网在回到内网的过程,当时只是说路由器会存储源IP到WAN口IP的映射关系。

如上图,这个映射关系保存在了路由器的转换表中!
内网中的源IP和端口在内网中是唯一的,转换成外网的WAN口IP和端口之后,它也是在外网中唯一的。所以它们在转换表中互为键值!将来可以相互查表转化。
如上图,你会发现客户端A和客户端B的进程都想访问服务器,而且这两个进程的端口号是相同的,IP地址不同。在经过路由器的转化之后,源IP都转化成了WAN口IP,路由器改变了其中一个进程的端口号,来保证在外网中IP和端口的唯一性。如果端口号不做改变这时候就出问题了,出现了两个IP和端口号相同的情况。

根据这个转换表也能知道,在客户端没有主动给服务端发消息之前,服务器不能直接和客户端发消息,因为路由器上没有建立客户端IP和端口号到WAN口IP和端口号的映射关系,服务端发的报文无法从外网进入到内网。
1.1 内网打洞
内网打洞(NAT穿透)是基于NAT技术衍生出来的一种技术。

如上就是内网打洞技术演示,用户A、B分别主动连接公网服务器,此时各自的路由器NAT表里就有了A、B的映射记录。此时服务器记录下A和B各自的 公网IP + 端口,也就是它们路由器WAN口的IP和临时端口。然后服务器把B的公网地址告诉A,把A的公网地址告诉B,交换WAN口IP+端口。这样A和B就可以使用收到的对方地址直接互发数据包,利用已有的NAT映射完成穿透。
内网打洞:让两个不同内网的设备能够直接建立P2P连接,不需要通过中间服务器转发数据。
它有个前提是运营商的出入口路由器要开放或者支持打洞技术。通常比较喜欢使用UDP进行内网打洞,TCP的情况比较少。
1.2 内网穿透
内网穿透是一类基于NAT环境、为了克服NAT限制而设计的技术方案总称。
内网穿透是一种让外网设备能够绕过NAT限制,直接或间接访问内网中特定服务的技术方案。就是把内网的服务暴露到公网上 。

公司或企业的内网,普通人是无法进行访问的。如果你是一家公司的员工,现在你下班到家了,但是公司内部有个服务出问题了,公司需要你处理一下,可是你又没有办法访问公司内网,所以这时候就需要一种技术让你能够访问公司内网。
工作流程是这样的公司内网服务设备把它的端口映射成公司服务器上的特定端口,让服务器的这个端口收到消息后都转发给内网设备。假设内网设备端口是666,它映射成公司服务器上的888端口,到时候888端口收到报文后就不停转交给内网666端口的服务。这样你就可以通过访问处于公网的服务器的888端口间接访问公司内网的相关设备了。
有相关的开源软件来做这些事,客户端软件是frpc,服务端软件是frps,如上图所示。
frp的工作原理:
frpc(客户端):部署在内网,主动与公网frps建立控制连接。frps(服务端):部署在公网,接收frpc的连接,并监听配置好的公网端口(如8888)等待外部用户访问。- 用户访问
frps的端口时,数据通过frpc主动建立的这条控制连接(隧道)被转发回内网。它不依赖路由器的端口映射设置,因此能穿透多层NAT。
内网打洞是让两个内网设备直接互联(P2P),而内网穿透是让外网设备访问内网服务,把服务暴露出去。内网穿透需要有一个服务器设备在不断进行消息的转发。
二、代理服务器
2.1 正向代理
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。

代理服务器的工作流程和NAT很像,但是两者是截然不同的体系。代理服务器和NAT并不冲突,有了代理服务器也可以有NAT路由器。通常代理服务器工作在内网中,NAT路由器就是局域网的出入口路由器。
正向代理服务器不是路由器!它是服务器,通常有自己的OS,如Linux,也会安装代理软件,比如NGINX,它的代理工作是在应用层完成的。
一般学校为了保护学校的校园环境,会在机房中安装正向代理服务器,当学生连接校园网后,学生的所有请求都会到达学校的代理服务器,在服务器内部可以对报文进行审查,如果访问请求是非法的,代理服务器就会丢弃报文。比如有的学校的图书管理系统必须连接校园网才能访问,这些工作也是通过代理服务器做的。
正向代理除了安装在服务器上,也可以安装在你的主机等设备上!
功能特点
隐藏身份 :隐藏客户端真实IP,保护隐私。内容过滤 :按规则过滤请求/响应(如屏蔽广告、拦截恶意网站)。访问控制 :限制特定网站访问(如上班时间禁娱乐网站)。缓存加速 :缓存常用资源,提升访问速度。负载均衡:在多个目标服务器间分配请求(多目标时)。
应用场景
企业管理 :控制员工上网行为,防止泄露机密。公共网络 :如图书馆、学校,合理分配资源,确保安全。家长控制 :过滤不良信息,保护未成年人。加速访问:利用缓存减少延迟,提升体验。
2.2 反向代理
反向代理服务器是一种网络架构模式,其作为Web服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。

如上就是反向代理。如果不做反向代理,直接把众多服务器暴露在公网中,那么可能会出现,很多客户端不断访问某几个服务器的情况,有的服务器很忙,有的很闲。
而加了一个反向代理服务器,就可以把请求报文汇聚在一起,然后反向代理服务器通过某些负载均衡的算法把请求合理的分发给后端服务器,这样就提升了服务器集群的抗压能力 。
也可以把一些静态资源放在反向代理服务器内部,对用户的访问请求做提速。
反向代理服务器位于客户端和Web服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的Web服务器,并将Web服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个Web服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
- 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
- 安全保护 :反向代理服务器可以隐藏后端
Web服务器的真实IP地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。 - 缓存加速 :反向代理服务器可以缓存后端
Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。 - 内容过滤和重写 :反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如
URL重写、用户认证等。 - 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
CDN(Content Delivery Network,内容分发网络) 就是采用了反向代理的原理。
NAT和代理服务器的区别有哪些呢?
- 从应用上讲,
NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用。 - 从底层实现上讲,
NAT是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层。 - 从使用范围上讲,
NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。 - 从部署位置上看,
NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。
正向代理与反向代理如何区分呢?很好区分,站在人民(客户)的一方就是正向代理,否则就是反向代理。
总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~