NAT NAPT

NAT

NAT(Network Address Translation,网络地址转换) 主要用于在不同网络(如私有网络和公共互联网 )之间进行 IP 地址转换 ,解决IP 地址短缺 问题,并提供一定的安全性

  • IPv4 地址是 32 位 (最多 2^32 ≈ 43 亿 个地址),但全球设备数量远超这个范围。
  • 私有 IP 地址(如 192.168.1.0/24)不能直接在公网使用,必须通过 NAT 转换成公网 IP。

NAT IP转换过程

当主机A私有IP地址访问服务器公有IP时,先把数据发给路由器,NAT 路由器将报文的源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;并在转换表中建立私有IP和公有IP的映射关系。

当服务器返回报文时,NAT 路由器收到外部的数据时, 再根据转变表的映射关系,把目标 IP 从 202.244.174.37 替换回10.0.0.10;

当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

NAPT

那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器 , 那么对于服务器返

回的数据中, 目的 IP 都是相同的 . 那么 NAT 路由器如何判定将这个数据包转发给哪个
局域网的主机?

这时候就不能但使用IP建立联系,要用IP+port。

同一个子网中每个主机的私有 IP 是唯一的 ,即使端口号一样,也能保证唯一性。IP+端口号保证了在同一个子网中,每台主机以及主机上客户端的唯一性。

NAPT,转换的公网IP一样,但可以分配不同的端口号,也保证了唯一性。

这样映射双方都保证了唯一性。
再来想一下,同一子网中主机的私有IP不同,但不同子网的私有IP可能会相同。如果这两个子网有同一个路由器,在不同子网的两个主机私有IP相同,端口号也相同,访问同一个服务器,会怎么样?

即使不同子网的主机 IP + 端口号相同,NAPT 仍然能基于 NAT 端口号 + 子网信息( NAPT 设备用来区分不同子网的标识信息:入接口 eth 源子网 VLAN 标识**)唯一映射,确保数据包不会错误地送达另一台主机。**

子网 A 的 192.168.1.100:5001 → 203.0.113.1:30001

子网 B 的 192.168.1.100:5001 → 203.0.113.1:30002

服务器返回数据时,NAPT 设备根据 NAT 端口号找到正确的原始子网,并正确转发回去。

其他 NAT 方案:

  • 策略 NAT(Policy-Based NAT)

    • 不同子网使用不同的 NAT 端口范围,确保 NAT 端口不重叠。
    • 例如:
      • 子网 A:NAT 端口 30000-31000
      • 子网 B:NAT 端口 31001-32000
  • 使用多个公网 IP

    • 如果 NAT 设备支持多个公网 IP,可以为不同子网分配不同的公网 IP ,避免 NAT 端口冲突:
      • 子网 A → 203.0.113.1
      • 子网 B → 203.0.113.2
相关推荐
ms72wx几秒前
拥抱终端:Linux 新手命令行入门指南
linux·运维·服务器
独行soc17 分钟前
2025年渗透测试面试题总结-101(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
transuperb20 分钟前
51单片机AD/DA
网络·嵌入式硬件·51单片机
胎粉仔32 分钟前
网络初阶——运输层:TCP 协议(Part1)
网络·网络协议·tcp/ip
東雪蓮☆38 分钟前
容器生命周期与管理策略
linux·运维·docker
wheeldown2 小时前
【Linux】Linux管道与进程池深度解析:从原理到实战
linux·运维·服务器
Ronin3052 小时前
【Linux网络】网络命令
linux·网络·网络命令
熙客3 小时前
DevOps简介
运维·devops
XUE-52113143 小时前
BGP实验-路由反射器
linux·运维·网络
東雪蓮☆3 小时前
从安装到上手实战——Docker 基础命令全解析
运维·docker·容器