====== 网络地址转换器 ====== ---- 网络地址转换器(NAT),英文全称为Network Address Translation,是一种网络技术,其主要功能是在数据包穿越路由器或防火墙时转换IP地址。 NAT技术允许一个局域网上的多个设备通过一个或多个公共IP地址与互联网互连,从而解决了IPv4地址不足的问题,同时也提供了一定的安全性和隐私保护。 ====== 历史背景和发展 ====== ---- NAT技术在1990年代中期出现,目的是为了延缓IPv4地址枯竭的速度,在新的IPv6协议完全启用之前提供一个临时解决方案。 随着互联网的迅速发展和IP地址需求的急剧增长,NAT成为了个人和小型企业用户连接互联网的标准做法。 ====== 工作原理 ====== ---- NAT工作在网络的第三层——网络层。 在这个层次,它可以修改经过的数据包的源或目的IP地址。 NAT通常应用在连接到互联网服务提供商的路由器上。 当内部网络上的私有IP地址需要与外部网络(如互联网)通信时,NAT设备会将私有IP地址映射到公共IP地址上,反之亦然。 ====== NAT的类型 ====== ---- 存在几种类型的NAT,包括: 1. **静态NAT(SNAT)**:也叫基本网络地址转换,将内部网络中的私有IP地址映射到一个固定的公共IP地址。仅支持地址转换,不支持端口映射。 2. **动态NAT(DNAT)**:将内部网络中的私有IP地址映射到一个可用的公共IP地址池中的地址。仅支持地址转换,不支持端口映射。 3. **端口地址转换(PAT)**:多个私有IP地址映射到单个公共IP地址上,通过端口号区分不同的会话。 ====== 网络地址转换方法 ====== ---- 网络地址和端口转换可以通过多种方式实现。一些使用 IP 地址信息的应用程序可能需要确定网络地址转换器的外部地址。这是外部网络中的通信对等设备检测到的地址。此外,可能还需要对使用中的映射类型进行检查和分类,例如,当需要在两个客户端之间建立直接通信路径时,这两个客户端都位于不同的NAT网关后面。 为此,RFC 3489 在 2003 年指定了一个名为 "UDP在NAT上的简单遍历(Simple Traversal of UDP over NATs)"(STUN)的协议。它将NAT实现分为全锥形NAT、(地址)受限锥形NAT、端口受限锥形NAT或对称NAT,并提出了相应的设备测试方法。不过,由于这些方法不足以正确评估许多设备,因此这些程序已不再具有标准地位。2008 年,RFC 5389规范了新的方法,缩写STUN现在代表了规范的新名称:用于NAT的会话遍历实用程序(Session Traversal Utilities for NAT)。 ---- **NAT实现分类** **1 全锥形NAT,又称一对一NAT** 一旦内部地址(iAddr:iPort)被映射到外部地址(eAddr:ePort),任何来自iAddr:iPort的数据包都将通过eAddr:ePort发送。 任何外部主机都可以通过向eAddr:ePort发送信息包来向iAddr:iPort发送信息包。 {{ :wiki:full_cone_nat.svg.png |}} **2 (地址)-受限锥形NAT** 一旦内部地址 (iAddr:iPort) 映射到外部地址 (eAddr:ePort),来自 iAddr:iPort 的任何数据包都将通过 eAddr:ePort 发送。 只有当 iAddr:iPort 以前向 hAddr:any 发送过数据包时,外部主机 (hAddr:any) 才能通过向 eAddr:ePort 发送数据包向 iAddr:iPort 发送数据包。"any "表示端口号无关紧要。 {{ :wiki:restricted_cone_nat.svg.png |}} **3 端口受限锥形NAT** 与地址受限锥形NAT类似,但限制包括端口号。 一旦内部地址 (iAddr:iPort) 映射到外部地址 (eAddr:ePort),任何来自 iAddr:iPort 的数据包都将通过 eAddr:ePort 发送。 只有当 iAddr:iPort 以前向 hAddr:hPort 发送过数据包时,外部主机 (hAddr:hPort) 才能通过向 eAddr:ePort 发送数据包的方式向 iAddr:iPort 发送数据包。 {{ :wiki:port_restricted_cone_nat.svg.png |}} **4 对称NAT** 一个内部 IP 地址加上一个目标 IP 地址和端口的组合被映射到一个唯一的外部源 IP 地址和端口;如果同一台内部主机发送的数据包即使具有相同的源地址和端口,但目的地不同,则会使用不同的映射。 只有从内部主机接收到数据包的外部主机才能发送回数据包。 {{ :wiki:symmetric_nat.svg.png |}} ====== NAT的优点 ====== ---- 1. **地址保存**:NAT减缓了公共IPv4地址的消耗,允许多个设备共享单个或少量的公共IP地址。 2. **安全性和隐私**:NAT提供了一层隐蔽性,因为内部网络的具体结构和IP地址对外部网络是不可见的。 3. **易于管理**:NAT简化了内部网络的IP地址管理,因为不需要为每个设备分配一个唯一的公共IP地址。 ====== NAT的缺点 ====== ---- 1. **端到端通信的破坏**:NAT改变了数据包的IP地址,破坏了互联网原始设计中的端到端数据通信原则。 2. **应用层兼容性问题**:某些依赖于IP地址信息的应用可能无法正常工作,如IP电话和某些游戏。 3. **性能问题**:NAT设备需要处理每个通过的数据包的地址转换,这可能会导致性能瓶颈。 ====== 结论 ====== ---- 尽管NAT有其局限性和挑战,但它仍然是当前互联网中一个必不可少的技术。 随着IPv6的逐步推广和采用,NAT的应用可能会减少,但在可预见的未来,它仍然是连接私有网络与互联网的重要桥梁。 ====== 相关 ====== ---- [[frp]]