文章目录
1. 前言
NAT(网络地址转换)是一种常见的网络技术,用于将私有网络中的内部 IP 地址转换为公共 IP 地址,以实现与外部网络的通信。
- NAT能够将私有IP对外通信时转为全局IP。 也就是就是一种将私有IP和全局IP相互转化的技术方法;
- 一些学校、家庭、公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一,但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的。
2. IP 转换过程
- NAT路由器将源地址从
10.0.0.10
替换成全局的IP202.244.174.37
; - NAT路由器收到外部的数据时, 又会把目标IP从
202.244.174.37
替换回10.0.0.10
; - 在NAT路由器内部, 有一张自动生成的,用于地址转换的表;
- 当
10.0.0.10
第一次向163.221.120.9
发送数据时就会生成表中的映射关系。
对于IP转换的过程:
- 在进行源地址替换时,不一定只替换IP,部分情况下 源端口也要被替换;
- 路由器在NAT替换时,除了替换,还会根据报文请求的四元组,构建映射关系;
- 由于源IP表示唯一的一台主机,源端口表示该主机上唯一的进程;则源IP + 源端口表示唯一的一个进程 —— 在内网中的唯一性;
- 无论从内向外或从外向内,都能在各自的网络中表示唯一性,即该映射关系是“互为KEY值”;
- 如果主机从未访问到外网,外网能够直接访问内网(主机)吗?
- 理论上不能;
- 实际上有很多基于NAT原理的软件可以进行外网访问内网的过程,即内网穿透。
3. NAPT
NAPT(Network Address PortTranslation,网络地址端口转换) 是一种网络技术,用于在网络设备(如路由器或防火墙)上进行地址和端口的转换。NAPT 是NAT(Network Address Translation,网络地址转换)的一个变种,其主要功能是允许多个内部设备共享一个公共 IP地址,同时通过不同的端口号来区分它们的流量。这种技术也被称为端口地址转换(PAT)。
① 基本概念
-
私有与公共 IP 地址:
- 私有 IP 地址:这是分配给内部网络中设备的地址,通常是私有的,不直接暴露在互联网上。私有 IP 地址的范围包括
192.168.x.x、10.x.x.x
和172.16.x.x
到172.31.x.x
。 - 公共 IP 地址:这是分配给外部网络的地址,能在互联网上被识别和路由。
- 私有 IP 地址:这是分配给内部网络中设备的地址,通常是私有的,不直接暴露在互联网上。私有 IP 地址的范围包括
-
端口号:
- 每个网络连接都有一个源端口号和目标端口号,NAPT 使用这些端口号来跟踪和管理不同的流量。
② 工作原理
-
出站流量:
- 当内部设备(如计算机、手机或打印机)通过 NAT 设备发送数据包到外部网络时,NAPT 设备会将数据包的源 IP 地址和源端口号替换为公共 IP 地址和一个唯一的端口号。
- NAPT 设备会维护一个映射表,记录内部设备的私有 IP 地址和端口号与公共 IP 地址和端口号之间的对应关系。
-
入站流量:
- 当外部网络响应数据包时,这些数据包的目标 IP 地址和目标端口号会匹配 NAPT 设备中的映射表。NAPT 设备将数据包的目标 IP 地址和端口号转换回相应的内部设备的私有 IP 地址和端口号。
- 数据包被转发到内部设备,使其能够正确地接收和处理响应数据。
③ 优缺点
优点:
-
节省 IP 地址:
- NAPT 允许多个内部设备共享一个公共 IP 地址,从而减少对公共 IP 地址的需求。
-
支持多个并发连接:
- 通过不同的端口号,NAPT 可以支持多个内部设备同时与外部网络上的不同服务进行通信。
缺点(局限性):
-
端口冲突:
- 如果多个内部设备使用相同的端口号进行通信,可能会导致端口冲突。尽管 NAPT 设备会尝试管理这些冲突,但某些应用可能会遇到问题。
-
某些协议和应用问题:
- 一些协议和应用(如 VOIP、P2P 网络、某些游戏)可能在 NAT 环境下遇到问题,因为它们依赖于对端口的直接访问。需要额外的技术(如 NAT 穿越、UPnP)来解决这些问题。
④ 实际应用
- 家庭网络:家庭路由器通常使用 NAPT 技术,让多个家庭设备通过一个公共 IP 地址访问互联网。
- 企业网络:在企业中,多个员工的设备可以通过 NAT 设备共享一个公共 IP 地址进行互联网访问。
- VPN:在某些虚拟私人网络(VPN)实现中,NAPT 用于处理内部客户端与 VPN 服务器之间的连接。
4. 缺陷
由于NAT依赖NAPT转换表, 所以有诸多限制:
- 无法从NAT外部向内部服务器建立连接;
- 装换表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;
看下面的问题:
- 如果局域网内, 多个主机都访问同一个外网服务器,对于服务器返回的数据中,目的IP都是相同的。NAT路由器如何判定将该数据包要转发给哪个局域网的主机?
- 由NAPT来解决;使用IP+port
来建立这个关联关系。
这种关联关系也是由NAT路由器自动维护的。
- 例如在TCP的情况下:
- 建立连接时会生成该表项;
- 在断开连接后, 就会删除这个表项。
5. NAT 穿越
NAT穿越 是指在网络地址转换环境下,确保不同网络或设备之间能够进行通信的技术。NAT 穿越技术旨在解决 NAT 可能导致的一些通信问题(尤其涉及到外部网络的通信),以实现端对端的连接。
① 概述
-
NAT 的问题
- 对等连接:NAT 会阻止外部网络直接访问内部网络设备,因为内部设备使用私有 IP 地址。
- 端口限制:NAT 通常对外部设备的访问进行限制,只允许特定的流量通过 NAT 设备的端口。
-
NAT 穿越技术
-
端口转发:在 NAT 设备上配置端口转发规则,将特定的端口流量转发到内部设备。这对于从外部访问内部服务非常有效,但需要手动配置。
-
UPnP(Universal Plug and Play):允许设备自动在 NAT 路由器上设置端口转发规则。UPnP 使得设备可以动态地打开和关闭端口,但可能存在安全风险。
-
STUN(Session Traversal Utilities for NAT):用于在 NAT 环境下发现公共 IP 地址和 NAT 类型。STUN 协议帮助客户端确定如何与 NAT 设备通信。
-
TURN(Traversal Using Relays around NAT):当直接连接不可行时,通过 TURN 服务器中继流量。TURN 提供了一个中继点,将流量从一个 NAT 环境转发到另一个 NAT 环境。
-
ICE(Interactive Connectivity Establishment):综合了 STUN 和 TURN,提供了一种机制来发现和使用 NAT 设备间的连接。ICE 通常用于 SIP(Session Initiation Protocol)和 WebRTC 等实时通信协议中。
-
-
NAT 穿越在应用中的使用
-
VoIP 和视频会议:需要端对端的连接来保证通话质量和稳定性,常用 STUN、TURN 和 ICE 来解决 NAT 问题。
-
在线游戏:游戏客户端使用 NAT 穿越技术来实现玩家之间的直接连接。
-
P2P(Peer-to-Peer)文件共享:使用 NAT 穿越技术来实现对等网络的文件传输。
-
② 示例
假设有一个内部网络设备(例如,家庭网络中的计算机),想从外部网络(如互联网)访问它。可以通过以下方法实现 NAT 穿越:
-
配置端口转发:在你的路由器上设置端口转发规则,将特定端口的流量转发到内部设备的 IP 地址上。这允许外部设备通过公共 IP 地址访问内部设备的服务。
-
使用 UPnP:启用 UPnP 功能,让设备自动请求路由器打开所需的端口。
-
使用 STUN 服务器:客户端通过 STUN 服务器发现其公共 IP 地址和 NAT 类型,并通过这些信息进行配置。
-
使用 TURN 服务器:如果直接连接失败,客户端通过 TURN 服务器中继流量,以便实现通信。
6. NAT 与 代理服务器
路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。
代理服务器看起来和NAT设备有些类似:
- 客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器;
- 服务器返回结果后, 代理服务器又把结果回传给客户端。
① 代理服务器与NAT的区别:
- 从应用上看, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 加速器等,也是使用代理服务器。
- 从底层实现上看,NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层。
- 从使用范围上看, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
- 从部署位置上看,NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。
代理服务器是一种应用比较广的技术.
- 翻墙: 广域网中的代理;
- 负载均衡: 局域网中的代理;
② 正向代理 / 反向代理 服务器
- 正向代理:代表客户端访问互联网。客户端首先连接到正向代理服务器,然后由代理服务器转发请求到目标服务器。正向代理通常用于隐藏客户端的真实 IP 地址、访问被封锁的网站或缓存内容以提高访问速度。
- 反向代理:代表服务器接受客户端的请求。客户端不直接连接到目标服务器,而是连接到反向代理服务器,后者将请求转发给内部服务器。反向代理常用于负载均衡、提高安全性(如隐藏内部网络结构)和缓存内容以提升性能。
7. 分类
一般我们根据 转换方式 将NAT分为以下三部分:
-
静态NAT(Static NAT):
- 描述:将一个私有IP地址映射到一个固定的公共IP地址。每个内部IP地址都有一个唯一的公共IP地址。
- 用途:适用于需要外部网络访问内部设备的场景,比如托管的服务器。
-
动态NAT(Dynamic NAT):
- 描述:将私有IP地址池中的地址映射到一个公共IP地址池中的地址。映射是动态分配的,并且不是固定的。
- 用途:适用于内部设备的公网访问需求,通常用于较大的组织,内部设备数量多于公共IP地址数量时。
-
端口地址转换(PAT,Port Address Translation):
- 描述:也称为“网络地址和端口转换”或“超载NAT”。通过将多个内部IP地址映射到单个公共IP地址,同时利用不同的端口号来区分内部设备。
- 用途:最常见的NAT形式,允许多个内部设备共享一个公共IP地址。广泛用于家庭和小型企业网络中。