【计算机网络】NAT技术深度解析:从原理到NAPT实现的工作机制

文章目录

  • 前言
  • [1. 前置](#1. 前置)
  • [2. NAT 转换](#2. NAT 转换)
    • [2.1 NAPT 模式、](#2.1 NAPT 模式、)
  • 总结

前言

在 IPv4 协议中,IP 地址数量是不充足的,于是我们引入了 NAT 技术

NAT 技术当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能

  • NAT 能够将内网 IP 对外通信时转为公网 IP。也就是就是一种将内网 IP 和公网
    IP 相互转化的技术方法
  • 很多学校、家庭、公司内部采用每个终端设置内网 IP,而在路由器或必要的服务器上设置公网 IP
  • 全局 IP 要求唯一,但是内网 IP 不需要。在不同的局域网中出现相同的内网 IP 是完全不影响的。

本文会和大家一起探究 NAT(Network Address Translation,网络地址转换) 技术的原理以及一种常用的 NAT 技术模式:NAPT。

  • 注意:NAT 不仅仅发生在 内网IP → 公网IP,也可能发生在内网IP → 内网IP

1. 前置

一个路由器可以配置两个 IP 地址:

  1. WAN口IP(广域网IP)
  2. LAN口IP(局域网IP)

所以我们在局域网 中使用的 IP 都是内网 IP 。在我们数据到网络中的时候,在进行路由的时候,会经过多个路由器 。当我们的数据来到 "网关 " 的时候(访问第一个进入公网的设备的时候,即:公网边界),这个网关会将 IP 报文中的报头的 源IP 更改为当前的网关的公网 IP(至于如何回来,我们后面会介绍)。

注意:WAN口 IP 也不一定是 公网 IP。

这样,在公网中的 IP 报文数据就是 公网源 IP→公网目的 IP 的路径了。从此,我们在网络层中看到的 IP 报文就是这个源 IP 了。

  • 如下图:

2. NAT 转换

  • 如下图:

  • NAT 技术工作流程:

    1. 从客户端发出请求:客户端(例如 10.0.0.10)想要访问服务器 163.221.120.9。

      数据包源地址为 10.0.0.10,目标地址为 163.221.120.9。

    2. NAT 路由器转换源地址:

      数据包到达 NAT 路由器。NAT 路由器将 IP 报文首部 中的源地址从 10.0.0.10 改为自己的公网 IP 地址 202.244.174.37。同时,NAT 会记录这个转换关系,以便后续返回数据包时能正确转发(同时上层传输层的源 port 也会被替换。这是一个关键点,后面会介绍)。

    3. 数据包进入互联网:

      转换后的数据包源地址为 202.244.174.37,目标地址仍为 163.221.120.9。

      数据包通过互联网正常路由到目标服务器。

上面过程是一个简单的从客户端访问服务器的过程。

但是上面的过程有一个严重的问题:同一个网关中可能存在很多主机,每一台主机的内网 IP 都是不一样的,但是网关路由器只有一台(只有一个公网 IP)它们是如何将多个内网 IP 信息通过一个公网 IP 进行记录转换的呢?

  • 这就是我们下面来介绍的 NAPT(这是一种NAT技术下的一种具体实现方式)。

2.1 NAPT 模式、

这是 NAT 技术下的一种具体的实现方式

  • 如下图:

在每一个 NAT 路由器中会维护一张转换表 。这个转换表中的内容就是:内网 ip:port <==> 公网 ip:随机port 的映射关系。通过这张表,我们能够让服务器的响应能够准确到达局域网中的目的主机和对应程序上。

  • NAPT 的工作流程:

    1. 私有网络内的请求发起

      客户端 A(10.0.0.10:1025)和客户端 B(10.0.0.11:1025)同时向全局 IP 的服务器(163.221.120.9:80)发起访问请求。此时,它们的数据包源地址是私有 IP + 端口,目标地址是服务器的全局 IP + 端口(163.221.120.9:80)。

    2. NAT 路由器的地址 / 端口转换:

      NAT 路由器维护一张 NAT 转换表,用于映射 "私有 IP: 端口" 与 "全局 IP: 端口" 的对应关系

      对于客户端 A 的请求(10.0.0.10:1025→163.221.120.9:80),路由器将其源地址替换为自身的全局 IP(202.244.174.37),并分配一个新端口(1025),形成新的源地址202.244.174.37:1025。对于客户端 B 的请求(10.0.0.11:1025→163.221.120.9:80),路由器同样替换源 IP 为202.244.174.37,但分配不同的端口(1026),形成源地址202.244.174.37:1026。转换表会记录这两组映射关系:

      10.0.0.10:1025 ↔ 202.244.174.37:1025

      10.0.0.11:1025 ↔ 202.244.174.37:1026

    3. 全局网络的请求转发

      经过转换后,两个数据包的源地址变为 "全局 IP + 不同端口",目标地址仍为服务器的163.221.120.9:80,然后被转发到互联网中的服务器。

    4. 服务器响应与反向转换

      服务器收到两个请求后,分别向202.244.174.37:1025和202.244.174.37:1026返回响应数据包。NAT 路由器收到响应后,通过转换表反向查询,将目标地址从 "202.244.174.37:1025/1026" 还原为对应的 "10.0.0.10:1025" 和 "10.0.0.11:1025",最终将响应转发到私有网络内的客户端 A 和 B。

注意 :这里的替换端口号是替换上层传输层的报头的端口号的。NAPT 是发生在网络层的。但是实现这样的机制就注定了:它需要跨层操作传输层的端口信息

  • 所以:发生 ip 和 port 转换的时候,NAT路由器会将网络层报头中的源 ip 更改 ;同时会将传输层报头中的源 port 更改

当数据从服务器中响应的时候,经过 NAT 路由器的时候就再根据这个转表替换数据包中的 ip 和 port 回来。


  • 流程图如下:

客户端A 10.0.0.10:1025 客户端B 10.0.0.11:1025 NAT路由器 202.244.174.37 服务器 163.221.120.9:80 1. 私有网络内的请求发起 请求数据包 源: 10.0.0.10:1025 目标: 163.221.120.9:80 请求数据包 源: 10.0.0.11:1025 目标: 163.221.120.9:80 2. NAT地址/端口转换 维护转换表: 10.0.0.10:1025 ↔ 202.244.174.37:1025 10.0.0.11:1025 ↔ 202.244.174.37:1026 转换后数据包 源: 202.244.174.37:1025 目标: 163.221.120.9:80 转换后数据包 源: 202.244.174.37:1026 目标: 163.221.120.9:80 3. 服务器处理请求 响应数据包 源: 163.221.120.9:80 目标: 202.244.174.37:1025 响应数据包 源: 163.221.120.9:80 目标: 202.244.174.37:1026 4. 反向转换 查询转换表还原地址 还原后响应 源: 163.221.120.9:80 目标: 10.0.0.10:1025 还原后响应 源: 163.221.120.9:80 目标: 10.0.0.11:1025 客户端A 10.0.0.10:1025 客户端B 10.0.0.11:1025 NAT路由器 202.244.174.37 服务器 163.221.120.9:80


总结

  • NAPT 是一个网络层的技术,但是联合传输层和网络层来实现

NAPT(具体的一种NAT实现方式) 过程总结:

  • 通过维护一张转换表。

  • 路由器执行 SNAT(源网络地址转换)。它做两件关键的事:

    1. 修改源IP: 将IP报文头中的源IP从内网 IP改为路由器自己的公网 IP。

    2. 修改源端口: 它通常也会修改传输层(如TCP/UDP)的源端口号。

    记录:并将其记录在NAT转换表中。

NAT 的优缺点:

  • 优点

    1. 节省公网IP地址:这是最初的目的!IPv4地址只有约43亿个,根本不够用。有了NAT,一个公司/家庭只需要一个公网IP,内部成百上千台设备都用私网IP即可。这是解决IPv4地址枯竭的"救命稻草"。
    2. 增强安全性(也是缺点):它隐藏了内网结构。外部黑客无法直接攻击你内网的具体某一台设备,因为他根本不知道它的存在。NAT充当了一个简单的防火墙。
    3. 网络管理灵活:内部网络调整(比如换电脑、改IP)不会影响对外的公网IP,网络规划更方便。
  • 缺点

    1. 破坏了端到端通信 :互联网的设计理念是任何两台主机都能直接对话。但NAT的引入,使得通信必须经过一个"中间人"(NAT设备),变得复杂了。在 NAT 技术下,无法让内网外部的设备向内网内部的服务器建立连接。
    2. 性能瓶颈:NAT转换需要消耗路由器的CPU和内存。如果连接数非常多(比如很多人同时下载、看视频),性能差的路由器可能会卡顿或死机。
    3. 风险更高:通信过程中一旦 NAT 路由器发生故障,那么通过这个 NAT 设备的所有 TCP 连接都会断开。
相关推荐
TT哇8 分钟前
消息推送机制——WebSocket
java·网络·websocket·网络协议
wadesir2 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
带土13 小时前
4. 两台win11 笔记本局域网内文件传输
网络
xixixi777774 小时前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏
在多学一点4 小时前
iptables的源地址转换和iptables的目标地址转换
网络
gadiaola4 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
罗汉松(山水白河)5 小时前
关于串口与UDP通讯的实验
单片机·嵌入式硬件·网络协议·udp·tcp·串口、
报错小能手5 小时前
计算机网络自顶向下方法57——网络安全 基础与密码学原理
计算机网络·安全·web安全
Xの哲學5 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
fei_sun6 小时前
【复习】计网每日一题1124---UDP首部检验和计算、检验和特殊含义
网络·网络协议·udp