NAT技术背景
之前我们讨论了, IPv4协议中, IP地址数量不充⾜的问题
NAT技术当前解决IP地址不够⽤的主要⼿段, 是路由器的⼀个重要功能;
NAT能够将私有IP对外通信时转为全局IP. 也就是就是⼀种将私有IP和全局IP相互转化的技术⽅法:
很多学校, 家庭, 公司内部采⽤每个终端设置私有IP, ⽽在路由器或必要的服务器上设置全局IP;
全局IP要求唯⼀, 但是私有IP不需要; 在不同的局域⽹中出现相同的私有IP是完全不影响的;
NAT IP转换过程

NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
NAT路由器收到外部的数据时, ⼜会把⽬标IP从202.244.174.37替换回10.0.0.10;
在NAT路由器内部, 有⼀张⾃动⽣成的, ⽤于地址转换的表;
当 10.0.0.10 第⼀次向 163.221.120.9 发送数据时就会⽣成表中的映射关系;
简单来说就是这个路由器的功能就是把我们的私有IP转换为全局IP,方便我们在网络通信当中去通信。
NAPT
那么问题来了, 如果局域⽹内, 有多个主机都访问同⼀个外⽹服务器, 那么对于服务器返回的数据中, ⽬的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域⽹的主机?
意思是同一个局域网内的多台主机都访问同一个服务器,此时通过NAT转换它们,转换后它们的IP地址都是相同的,都是路由器的地址,此时服务器返回给这个路由器的时候,由于路由器IP都是相同的,就是服务器是响应给我们路由的,这个路由地址只有一个,此时就会出现服务器把这几个求情发送回来的时候,目的IP都是相同的,我怎么判断把响应给哪个主机呢
这时候NAPT来解决这个问题了. 使⽤IP+port来建⽴这个关联关系

这种关联关系也是由NAT路由器⾃动维护的. 例如在TCP的情况下, 建⽴连接时, 就会⽣成这个表项; 在断开连接后, 就会删除这个表项。
我们就是加个端口号来标识它们的唯一性。
端口冲突也会把端口号直接改了,建立唯一的映射关系表。

思考几个问题吧,就是我们刚开机的时候,外网能直接访问我们的主机吗??
答案是肯定不行的,因为我们此时并没有建立NAPT关系,我的主机都是内网IP,你都找不到我,怎么访问啊,服务器是怎么找到你呢?
就是通过你在NAT路由中建立的路由关系就是全局IP+端口号唯一对应我们内网中的一台主机的内网IP,此时服务器想访问你,必须拿到你的NAT路由的全局IP+你的端口号即可访问。
内网主机可以直接访问外网吗??
答案是可以的直接拿到外网的IP,此时直接通过NAT路由器建立起我们的NAPT关系,然后拿着全局的IP去访问外网了。
思考第三个问题,因为我们登录QQ的过程就是你在给QQ的服务器通过NAT路由器拿着全局IP访问QQ的服务器,此时自动就建立起来了NAPT关系,此时我给你发送一个信息,其实是发送到服务器,服务器拿着你要发送给哪台主机,此时就拿着这个目的IP去访问逆向的去访问我们接收方的主机。
代理服务器

代理服务器是比如我们学校连的校园网其实本质就是你们学校的机房存在一个代理服务器,你是把请求发送给代理服务器的,代理服务器帮助你去访问外网的。
这种做法的一个好处就是我如果访问过外网的一个资源,此时我就可以暂时缓存到代理服务器,此时如果有其他人有相同的请求,此时就能直接从代理服务器中拿,不需要再访问外网,效率很高。
功能特点
缓存功能:正向代理服务器可以缓存经常访问的资源,当客⼾端再次请求这些资源时,可以直接从
缓存中获取,提⾼访问速度。
内容过滤:正向代理可以根据预设的规则对请求或响应进⾏过滤,如屏蔽⼴告、阻⽌恶意⽹站等。
访问控制:通过正向代理,可以实现对特定⽹站的访问控制,如限制员⼯在⼯作时间访问娱乐⽹
站。
隐藏客⼾端⾝份:正向代理可以隐藏客⼾端的真实IP地址,保护客⼾端的隐私。
负载均衡:在多个⽬标服务器之间分配客⼾端请求,提⾼系统的可扩展性和可靠性。
应⽤场景
企业⽹络管理:企业可以通过正向代理实现对员⼯⽹络访问的管理和控制,确保员⼯在⼯作时间内专注于⼯作,避免访问不良⽹站或泄露公司机密。
公共⽹络环境:在公共场所如图书馆、学校等提供的⽹络环境中,通过正向代理可以实现对⽹络资源的合理分配和管理,确保⽹络使⽤的公平性和安全性。
内容过滤与保护:家⻓可以通过设置正向代理来过滤不良内容,保护孩⼦免受⽹络上的不良信息影
响。
提⾼访问速度:对于经常访问的⽹站或资源,正向代理可以通过缓存机制提⾼访问速度,减少⽹络延迟。
跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个⼈,正向代理可以帮助他们突破⽹络限制,顺畅地访问海外⽹站和资源。
反向代理
反向代理服务器是⼀种⽹络架构模式,其作为Web服务器的前置服务器,接收来⾃客⼾端的请求, 并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客⼾端。这种架构模式可以提升 ⽹站性能、安全性和可维护性等。
基本原理
反向代理服务器位于客⼾端和Web服务器之间,当客⼾端发起请求时,它⾸先会到达反向代理服务
器。反向代理服务器会根据配置的规则将请求转发给后端的Web服务器,并将Web服务器的响应返
回给客⼾端。在这个过程中,客⼾端并不知道实际与哪个Web服务器进⾏了交互,它只知道与反向
代理服务器进⾏了通信。
应⽤场景
负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客⼾端的请求分发到多个后端服务器
上,以实现负载均衡。这有助于提升⽹站的整体性能和响应速度,特别是在⾼并发场景下。
安全保护:反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的⻛险。同
时,它还可以配置防⽕墙、访问控制列表(ACL)等安全策略,对客⼾端的请求进⾏过滤和限制,
以保护后端服务器的安全。
缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从
缓存中返回响应,⽽⽆需再次向后端服务器发起请求。这可以⼤ 减少后端服务器的负载,提升⽹
站的响应速度。
内容过滤和重写:反向代理服务器可以根据配置的规则对客⼾端的请求进⾏过滤和重写,例如添加
或删除请求头、修改请求路径等。这有助于实现⼀些特定的业务需求,如URL重写、⽤⼾认证等。
动静分离:在⼤型⽹站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向
代理服务器上,可以直接从反向代理服务器返回静态资源的响应,⽽⽆需再次向后端服务器发起请
求。这可以⼤ 提升静态资源的访问速度。
CDN(Content Delivery Network,内容分发⽹络)就是采⽤了反向代理的原理。
反向代理就是把我们的服务器隐藏。

看这张图就是,我们公司如果存在一个集群服务器,此时我们大部分人可能一直对着一个服务器一直访问,导致这个服务器宕机,变慢,这个情况是不好的,我们的反向代理就是,我们客户的所有请求都给反向代理服务器,然后通过这个服务器给这些集群的服务器分配响应任务,此时就能高效的利用服务器了。
正向代理是隐藏我们的用户,就是我们的用户不直接访问外网,而是通过我们的正向代理服务器,我们把请求给它,它帮助我们去访问外部服务器。
CDN

CDN是什么呢??
- CDN 是什么
全称:内容分发网络 一句话:把网站的图片、视频、JS、CSS、静态资源,提前搬运到全国各地的节点机房 用户访问时,不跑远路去源服务器,直接访问离你最近的节点。
- 不用 CDN 的痛点
举例子:源服务器在广州 你人在东北你打开网页:东北 → 跨省路由 → 省骨干 → 广州距离远、跳数多、延迟高、加载慢、服务器压力爆炸
- 用了 CDN 之后(核心逻辑)
厂商在全国每一个省 / 城市都部署了 CDN 边缘节点
-
网站把图片 / 视频 / 静态资源,提前同步到全国所有 CDN 节点
-
你访问网站图片时:DNS 会解析,自动给你分配离你最近、最快的 CDN 节点 IP
-
你直接连本地城市的 CDN 节点拿数据✅ 不用跨省、不用挤源站✅ 速度飞快、延迟极低
- CDN 本质 = 高级反向代理
结合你刚学的:
-
反向代理:替后端服务器接请求、隐藏源站
-
CDN :遍布全国的分布式反向代理集群
核心作用
-
加速:就近访问,解决跨地域慢
-
隐藏源站:用户永远碰不到真实后端服务器,防攻击
-
扛流量:百万并发、视频直播、短视频全靠 CDN 扛压
-
缓存:资源缓存到节点,不用反复请求源服务器
注意分别NAT和代理服务器,NAT主要是为了解决IPV4地址不足的问题,就是使用私有IP,此时就能不同的路由局域网,私有IP可以是相同的,只要全局IP不同即可,代理服务器是隐藏客户或者后端服务器的,就是通过一个代理服务器去让它帮我们去访问相关服务器。
正向代理是解决客户的问题,反向代理是解决我们服务器端的问题的。
内⽹穿透

就是用这个云服务器的8888映射到你的22号端口,此时你在学校和公司访问你家的linux机器,此时你只需要访问这个云服务器的8888端口即可。
这个主要应用我们两个局域网,你无法通过我们局域网中的主机去访问其它局域网中的主机,那为什么我们前面还讲了两个不同局域网通过路由转发通信啊?
-
教材跨局域网 :两台路由器手动加了对方内网路由 ,纯三层转发、没有 NAT,私网 IP 正常走。这个是教学意义。
-
现实家用跨局域网 :各家路由都开了NAT ,运营商封杀私网 IP,不给私网写路由,直接隔离。
意思是我们现实中是无法直接通过一个局域网中的一台主机去访问另外一个局域网中的一台主机的对吧,想建立通信必须通过一个远端服务器,你这个局域网把远端服务器建立连接建立NAPT表,对方也是,此时你俩就能通信了啊。
内⽹打洞

内网打洞是什么呢??
我们来结合着这个图来讲解一下,我们上面讲完了NAT,NAPT此时我们就知道我们是如何通过QQ这个聊天软件来进行聊天功能的了,就是通过建立NAPT表然后进行NAT路由转换吗,此时有没有一种可能性就是我们的就是,你给我发信息的时候,你不是把你的全局IP+端口号都发给我了吗,此时我可不可以把你的这个记录下来,下次我访问你就直接拿着你的这个全局IP+端口号通过我们路由转换,进入到局域网直接去找到你的NAPT表然后我们进行通信啊,此时就跳过了服务器,这个内网打洞和内网穿透很像,只不过一个是跳过服务器一个是依赖服务器。
有什么应用场景呢??
直播,就是你登陆账号就是连接到我们的服务器了,此时我们都连接到服务器了,建立了NAPT,我们是不是就可以把我的声音头像什么的全部通过内网打洞的形式传递给你,不需要经过服务器了,减轻了服务器大量的压力。因为你直播不就是源源不断的往服务器上上传我们的一些音频和视频吗,此时你看直播不就是一直向服务器发送请求去获取我们的这些声音或者音频吗,此时我们通过内网打洞的形式,直接拿到对方全局IP+端口号,此时直接给你客户端,内网打了个洞,此时你访问不就不用经过服务器了吗?更快,还可减少服务器的压力。
ppp:点对点
比如你在某个播放器上看电影,此时上传上去电影,它就对应一个IP+端口号,此时如果一个用户想看这个电影,服务器就开始寻找离你最近的这个全局IP+端口,此时返回给你,你直接拿着这个全局IP+端口的形式就能访问了。