NAT技术
1. NAT原理
NAT(Network Address Translation,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。路由器构建了子网,将子网中主机的 IP 地址与外界隔离,使得不同的子网之间的主机的 IP 地址可以重复。
子网中的主机,并不知道自己的公网 IP,所以子网中的主机在与其他子网的主机通信时,其发送的报文中,源 IP 地址必定是私网 IP 地址,但这个 IP 地址在公网上肯定是无效的。所以要使用 NAT 技术来转换报文中的源 IP 地址。
子网中的主机向外网主机通信,一定是经过路由器转发的,所以 NAT 技术是由路由器来实现的。路由器在把子网主机的报文发往外网时,会将IP报头中的srcIP地址替换为 WAN 口 IP,经过层层替换,最终报头中的IP地址变成一个公网IP。
1.1 NAPT
在最后一层子网将私有 IP 地址,转换为公网 IP 地址的过程,是由 NAT 路由器来实现的。NAT 路由器维护着一张私有 IP 和端口转换成公网 IP 和端口的表,这个表就是 NAPT(Network Address Port Translation,网络地址端口转换),NAT路由器通过这个表,将能够将私网 IP 转换为公网 IP,也能将公网 IP 转换回私网 IP,建立私网世界和公网世界的通信。
同一子网中的主机私网 IP 转换成公网 IP 后,它们的公网 IP 都是相同的。
为了使不同的主机进入公网后,也具有唯一性,NAPT还会将源主机端口号也进行更改,当服务器返回给私网主机时再更改回去。这样,在子网中,依据不同的私有 IP 区别主机的唯一性,在公网中,依据不同的端口号区别来自同一子网中的主机的唯一性。
2.1 缺陷
由于 NAT 技术依赖 NAPT ,公网主机无法从 NAT 外部向内部服务器建立连接,装换表的生成和销毁都需要额外开销,通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开。
2. 内网穿透和内网打洞
2.1 内网穿透
内网穿透,是一项利用了 NAT 技术,使得一个子网的主机能够访问内网的主机的技术。如A子网主机使用 NAT 技术,通过一个外网服务器,与内网主机建立连接,此后A子网主机就能通过这个服务器间接访问内网主机。
由于内网中的主机都相对独立,在特殊的办公环境中,如内网服务器中的资源只能通过内网中的主机进行访问和查询。内网穿透一般用于大公司外地办公,使用外部设备进入公司内网,有的公司服务器还会使用随机token值防止非法访问。
frp是一个专门用来做内网穿透的软件,将frpc部署在自己的主机,将frps部署在云服务器上。
2.2 内网打洞
内网打洞的原理与内网穿透类似,只不过内网打洞是一项利用 NAT 技术来减轻服务器负担的技术。一个在公网中的服务器,肯定知道一个子网主机的公网 IP 和端口号。所以,我们可以利用这个特性,使得不同子网中的两台主机,能够绕过服务器直接进行通信。
-
分别让主机A和主机B与公网服务器建立连接,服务器此时肯定分别获取了主机A的公网 IP 和端口,以及主机B的公网 IP 和端口。
-
服务器将主机B的公网 IP 和端口以应用层报文的形式发给主机A,将主机A的公网 IP 和端口以应用层报文的形式发给主机B。
-
这样主机A和主机B就获取了对方的 IP 和端口,就能绕过服务器,直接使用这个端口与对方通信。
通过云服务器的echoserver将云服务器看到的客户端的IP和端口返回改日客户端,客户端就能知道自己子网的出入口。
内网打洞可以大幅减轻服务器转发数据的负担,在云盘中使用的 p2p 技术(通过其他本地拥有文件资源的主机与本主机直接连接,直接通过对方主机来下载相应的文件),就是内网打洞。
3. 代理服务器
代理服务器(Proxy Server)的功能是代理网络客户去取得网络信息,代理服务器分为正向代理,反向代理两种,各自有不同的功能及应用。
3.1 正向代理
正向代理(Forward Proxy),是一种位于客户端和目标服务器之间的网络代理服务器,用于代表客户端向目标服务器发送请求,并将响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理:
- 客户端将请求发送给正向代理服务器。
- 正向代理服务器接收请求,并根据配置进行处理, 如缓存查找、 内容过滤等。
- 正向代理服务器将处理后的请求转发给目标服务器。
- 目标服务器处理请求, 并将响应返回给正向代理服务器。
- 正向代理服务器将响应返回给客户端。
功能特点:
-
缓存功能
正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时, 可以直接从缓存中获取,提高访问速度。
-
内容过滤
正向代理可以根据预设的规则对请求或响应进行过滤, 如屏蔽广告、阻止恶意网站等。
-
访问控制
通过正向代理, 可以实现对特定网站的访问控制, 如教学楼的WIFI连上后用不了作业帮。
-
隐藏客户端身份
正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私
-
负载均衡
在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性
3.2 反向代理
反向代理(Reverse Proxy),是一种位于客户端和目标服务器之间的网络代理服务器,但与正向代理相反,反向代理用于代表服务器向目标客户端接收请求,并将请求转发给后端服务器,然后将后段服务器的响应返回给客户端。这种架构模式可以提升网站性能、 安全性和可维护性等。
应用场景:
-
负载均衡
反向代理通过轮询算法活随机数算法等,将客户端的请求分发到多个后端服务器上,这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
-
安全保护
反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址, 降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL) 等安全策略,对客户端的请求进行过滤和限制, 以保护后端服务器的安全。
-
缓存加速
反向代理服务器可以缓存后端 Web 服务器的响应内容, 对于重复的请求, 它可以直接从缓存中返回响应, 而无需再次向后端服务器发起请求。 这可以大大减少后端服务器的负载, 提升网站的响应速度。
-
内容过滤和重写
反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写, 例如添加或删除请求头、 修改请求路径等。 这有助于实现一些特定的业务需求, 如 URL 重写、 用户认证等。
-
动态分离
在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上, 可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度。
-
CDN(Content Delivery Network,内容分发网络)
CDN 用于小公司将消耗大流量的图片、css、js文件,放在第三方服务器中,用户在访问网页时,只从小公司服务器中拿html,其他文件通过第三方服务器访问,以减少小公司服务器的转发流量。