
🌈 个人主页:Zfox_
🔥 系列专栏:Linux

目录
- 一:🔥 NAT 技术背景
- 二:🔥 NAT IP 转换过程
- 三:🔥 NAPT
- 四:🔥 代理服务器
- 🦋 正向代理
- 概述
- 工作原理
- 功能特点
- 应用场景
- 🦋 反向代理
- 概述
- 基本原理
- 应用场景
- 🦋 NAT 和代理服务器
- 五:🔥 内网穿透 和 内网打洞
- 🦋 内网穿透
- 1. 背景
- (1)私有IP地址的限制
- (2)NAT(网络地址转换)的限制
- (3)防火墙的限制
- 🦋 内网打洞
- 内网打洞的工作原理
- 内网打洞的优缺点
- 优点:
- 缺点:
- 适用场景
- 六:🔥 总结
- 🦋 数据链路层
- 🦋 网络层
- 🦋 传输层
- 🦋 应用层
- 七:🔥 共勉
一:🔥 NAT 技术背景
💬 今天我们来聊聊网络世界里一个超重要的技术 —— NAT(网络地址转换)。你有没有想过,为啥我们家里的电脑、手机,还有公司里的各种设备,都能同时连上网,但又不会互相冲突呢?这就得感谢 NAT !
🕸️ IPv4 地址不够用,这事儿大家都清楚。NAT 就像是一个超级聪明的 “翻译官”,它能把我们内网里的私有IP地址(比如192.168.1.x)转换成公网能识别的全局IP地址。这样,我们就能在有限的公网IP下,让无数设备同时上网!
🌰 举个例子,学校里可能有几百台电脑,但学校只需要一个公网IP,NAT 就能搞定这一切。公网IP必须是独一无二的,但私有IP就随便多了,不同的局域网里完全可以重复用,一点儿问题都没有。
二:🔥 NAT IP 转换过程
那么这样在网络通信过程中势必会造成问题,因为私有IP并不是唯一的,所以私有IP不能出现在公网通信中的。解决这个问题的机制就是 NAT 机制。NAT 机制即在路由器进行转发时将报文源IP更换为 路由器WAN口IP ,进行一次源IP地址替换!
这样就可以私有IP就不会出现在公网中!并且在通信过程中够可以层层向下找到唯一的主机!
- NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37。
- NAT 路由器收到外部的数据时,又会把目标 IP 从 202.244.174.37 替换回 10.0.0.10。
- 在 NAT 路由器内部,有一张自动生成的、用于地址转换的表 NAPT。
- 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。
三:🔥 NAPT
🤔 那么问题来了,如果局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的 IP 都是相同的。那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?这时候 NAPT 来解决这个问题了。使用 IP+port 来建立这个关联关系。
这种关联关系也是由 NAT 路由器自动维护的。例如在 TCP 的情况下,建立连接时就会生成这个表项;在断开连接后,就会删除这个表项。
路由器之中,进行转发时,维护了一张 NAPT 转换表。其中记录目的 IP + 端口号port 与 WAN口IP + 端口号port 的映射关系,互为键值。这两个都具有唯一性:局域网唯一,公网唯一!源IP发生替换,源端口也可能发生替换!这样保证了映射的唯一性!
每个路由器在转发过程中都会生成一份NAPT 表,最终就可以到达公网进行通信!这样其实也说明了一个问题,公网是无法直接访问内网机器的,只有内网机器向公网发送过数据,建立过 NAPT 表,才能从外部进入内部!
所以 NAT 技术是有缺陷的,由于 NAT 依赖这个转换表, 所以有诸多限制:
- 无法从 NAT 外部向内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开。
使用 WIndows 访问我们的 Linux 服务端时,我们仔细观察会发现服务端接收到的IP地址和 WIndows 端是不一致的!
这也是由于路由器 NAT转发的结果!Linux 服务上的实际获取到的IP是出入口路由器的 WAN口IP
四:🔥 代理服务器
🦋 正向代理
概述
正向代理
(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理
- 客户端将请求发送给正向代理服务器。
- 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
- 正向代理服务器将处理后的请求转发给目标服务器。
- 目标服务器处理请求,并将响应返回给正向代理服务器。
- 正向代理服务器将响应返回给客户端。
功能特点
- 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。
- 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
- 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
- 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
- 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。
应用场景
- 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
- 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
- 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。
- 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。
- 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。
🦋 反向代理
概述
🛜 反向代理服务器
是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
基本原理
🍑 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web 服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
负载均衡
:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。- 安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。
- 缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
- 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。
- 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
- CDN(Content Delivery Network,内容分发网络):就是采用了反向代理的原理。
🦋 NAT 和代理服务器
🍑 路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。代理服务器看起来和 NAT 设备有一点像。客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。
那么 NAT 和代理服务器的区别有哪些呢?
- 从应用上讲:NAT 设备是网络基础设备之一,解决的是 IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
- 从底层实现上讲:NAT 是工作在网络层,直接对 IP 地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲:NAT 一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
- 从部署位置上看:NAT 一般集成在防火墙、路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。
代理服务器是一种应用比较广的技术:
- 翻墙:广域网中的代理。
- 负载均衡:局域网中的代理。
代理服务器又分为正向代理和反向代理:
- 正向代理:用于请求的转发(例如借助代理绕过反爬虫)。
- 反向代理:往往作为一个缓存。
五:🔥 内网穿透 和 内网打洞
🦋 内网穿透
内网穿透是一种网络技术,用于解决内网设备与外部网络之间通信的问题。它可以让外部设备访问内网中的设备或服务,而无需直接暴露内网设备的IP地址,从而在一定程度上兼顾了安全性和可访问性。
1. 背景
在大多数网络环境中,内网设备(如家庭路由器内的设备、公司内部网络中的服务器等)通常被隐藏在路由器或防火墙之后,无法直接从外部网络访问。这主要是由于以下原因:
(1)私有IP地址的限制
内网设备通常使用私有IP地址(如192.168.x.x
),这些地址只能在局域网内使用,无法在公网中直接访问。私有IP地址的范围包括:
10.0.0.0
到10.255.255.255
172.16.0.0
到172.31.255.255
192.168.0.0
到192.168.255.255
这些地址在互联网中是不可路由的,因此外部设备无法直接通过这些地址访问内网设备。
(2)NAT(网络地址转换)的限制
内网设备通过路由器访问外网时,路由器会将内网设备的私有IP地址转换为公网IP地址(即路由器的WAN口IP)。这个过程称为网络地址转换(NAT)。NAT的作用是:
- 节省内公网IP地址资源。
- 保护内网设备的安全性。
然而,NAT机制也导致了外部设备只能看到路由器的公网IP,而无法直接访问内网设备的私有IP。
(3)防火墙的限制
防火墙是网络中的安全屏障,通常会阻止外部设备直接访问内网设备,以保护内网的安全。防火墙的作用包括:
- 阻止未经授权的访问。
- 过滤恶意流量。
- 保护内网设备免受攻击。
防火墙的限制进一步增加了内网设备对外部访问的难度。
如果今天可以做到:
首先我们拥有一台云服务器,并且在内网构建一台 Linux 机器,使用 22 端口部署了一个 SSH 服务,可以与云服务器建立连接。云服务器也部署一个服务,可以将机器上所有 8888 端口获取的数据转发到内网的 Linux 服务器上。这样,云服务器的 8888 端口与内网服务器的 22 端口就建立了映射。那么其他内网的机器可以通过访问云服务器的8888 端口直接访问到内网的 Linux 机器。这叫做 内网穿透技术
!
我们可以在云服务器上使用 frp 软件进行内网穿透服务:
- 服务器:拥有一台具有公网IP地址的服务器,作为 FRP 的服务端。
- 客户端:需要穿透的内网机器,作为 FRP 的客户端。
为什么要进行内网穿透呢?内网穿透有以下优点:
- 成本效益:内网穿透可以避免购买服务器公网IP地址的高昂成本,同时也能实现公网服务的功能。
- 访问限制:由于 NAT(网络地址转换)和防火墙的存在,内网中的设备通常无法直接从外网访问。内网穿透技术可以帮助绕过这些限制,使得内网服务可以被外网访问。
- 资源共享:内网穿透使得个人或企业可以将其内网中的资源(如文件服务器、Web服务、数据库等)分享给外网的用户,而无需复杂的网络配置。
- 远程管理:系统管理员可以通过内网穿透技术,从外部网络远程管理内网中的服务器或设备,方便进行维护和监控。可以实现远程访问公司服务器进行办公。
- 开发与测试:开发者可以在内网环境中开发应用程序,并通过内网穿透技术让外网的测试人员或合作伙伴访问,以便进行测试和反馈。
- 安全性:内网穿透可以提供一种更安全的远程访问方式。通过配置,可以限制哪些外部地址可以访问内网服务,从而保护内网资源不被未经授权的访问。
🦋 内网打洞
在上述场景中,客户端最终被云服务器获取的源IP是出入口路由器的 WAN口IP 。服务端通过配置会有内网服务器的 IP地址 与 端口号。那么,可不可以将服务端的 IP+port 发给客户端,客户端的 IP+port 发给服务端呢?
答案是可以的。这样客户端就可以直接向内网服务器进行访问,服务端也可以直接给客户端发送数据。这种技术就叫做 内网打洞
!这种方式直接跨过了云服务器,在出入口路由器上打了一个洞,可以直接进行访问。
内网打洞的工作原理
-
信息交换:
- 客户端和服务端通过云服务器交换彼此的 WAN口IP 和 端口号。
- 云服务器作为中介,将客户端的 IP+port 发送给服务端,同时将服务端的 IP+port 发送给客户端。
-
建立直接连接:
- 客户端和服务端分别使用对方的 IP+port 尝试建立直接连接。
- 由于双方的 WAN口IP 和 端口号 已经交换,路由器会允许这种直接通信。
-
绕过云服务器:
- 一旦直接连接建立成功,客户端和服务端就可以绕过云服务器,直接进行数据传输。
- 这种方式不仅减少了云服务器的负载,还提高了数据传输的效率。
内网打洞的优缺点
优点:
- 高效性:直接通信减少了中间环节,提高了数据传输速度。
- 降低成本:减少了对云服务器的依赖,降低了带宽和计算资源的消耗。
- 灵活性:适用于需要频繁通信的场景,如实时音视频传输、在线游戏等。
缺点:
- 路由器限制:部分路由器可能不支持 NAT 打洞,导致无法建立直接连接。
- 安全性问题:直接暴露 WAN口IP 和 端口号 可能增加被攻击的风险。
- 复杂性:实现内网打洞需要对网络协议有较深的理解,且调试和维护成本较高。
适用场景
- P2P 网络:如文件共享、区块链网络等。
- 实时通信:如视频会议、在线游戏等。
- 物联网设备:设备之间需要直接通信的场景。
需要注意的是,一些出入口路由器可能不允许进行内网打洞。这里我们只需要了解其原理即可。
六:🔥 总结
🦋 数据链路层
- 数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据。
- 以太网:是一种技术标准;既包含了 数据链路层 的内容,也包含了一些 物理层 的内容。例如:规定了网络拓扑结构、访问控制方式、传输速率等。
- 以太网帧格式
- 理解 MAC 地址
- 理解 ARP 协议
- 理解 MTU
🦋 网络层
- 网络层的作用:在复杂的网络环境中确定一个合适的路径。
- 理解 IP 地址:理解 IP 地址和 MAC 地址的区别。
- 理解 IP 协议格式
- 了解网段划分方法
- 理解如何解决 IP 数目不足的问题:掌握网段划分的两种方案。理解私有 IP 和公网 IP。
- 理解网络层的 IP 地址路由过程:理解一个数据包如何跨越网段到达最终目的地。
- 了解 IP 数据包分包的原因
- 了解 ICMP 协议
- 了解 NAT 设备的工作原理
🦋 传输层
- 传输层的作用:负责数据能够从发送端传输到接收端。
- 理解 端口号的概念
- 认识 UDP 协议:了解 UDP 协议的特点。
- 认识 TCP 协议:理解 TCP 协议的可靠性。理解 TCP 协议的状态转化。
- 掌握 TCP 的连接管理:确认应答、超时重传、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答特性。
- 理解 TCP 面向字节流:理解粘包问题和解决方案。
- 能够基于 UDP 实现可靠传输
- 理解 MTU 对 UDP/TCP 的影响
🦋 应用层
- 应用层的作用:满足我们日常需求的网络程序,都在应用层。
- 能够根据自己的需求:设计应用层协议。
- 了解 HTTP 协议
- 理解 DNS 的原理和工作流程
七:🔥 共勉
🎆 🧨 fq 草图讲解 彩蛋:
😋 以上就是我对 NAT & 代理服务 & 内网穿透
的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉