Administrator
发布于 2025-05-13 / 11 阅读
0
0

NAT(网络地址转换)核心原理

当局域网内的设备主动访问外网时,NAT网关(通常是路由器)会动态地为这个连接创建一个临时的 <公网IP,端口> 映射。

你的路由器有一个公网IP地址(比如 123.123.123.123),而你的内网设备使用私有IP地址(比如 192.168.1.100)。

核心原理:NAT(网络地址转换)

你的路由器有一个公网IP地址(比如 123.123.123.123),而你的内网设备使用私有IP地址(比如 192.168.1.100)。

  1. 主动出站时(内网设备访问外网)
    • 假设你电脑 192.168.1.100:5555 想访问百度服务器 202.108.22.5:80
    • 数据包到达路由器,路由器会进行NAT转换。它会从自己的公网IP端口池中,动态选择一个未使用的端口(比如 60000)。
    • 路由器会创建一条NAT映射表/会话表,记录这个对应关系:
      • 内部:192.168.1.100:5555 <--> 外部:123.123.123.123:60000 (目标:百度)
    • 然后,路由器将数据包的源地址和端口替换为 123.123.123.123:60000,再发送给百度。
    • 百度看到的数据来自 123.123.123.123:60000,它回复数据到这个地址。
    • 路由器收到回复后,查表,发现 60000 端口对应内网的 192.168.1.100:5555,于是将数据包转发给你的电脑。
    • 在这个过程中,你的电脑在这个特定的连接上,对外“呈现”的公网地址就是 <123.123.123.123, 60000>
  2. 关键点澄清
    • 动态与临时:这个 <公网IP, 端口> 映射是动态分配、有生命期的。连接结束后(或超时),这个端口可能会被回收,并分配给其他内网设备的下一个连接。你的设备没有固定的、专属的公网端口。
    • 端口复用:一个公网IP的同一个端口,在同一时刻只能映射给一个内网连接。但NAT网关非常聪明,它通过端口转换,让成千上万个内网连接共享这一个公网IP。
    • “存在”的含义:映射只在活跃连接期间存在。如果设备什么都不做,NAT表里就没有它的条目,也就不存在对应的公网端口。

重要的例外和特殊情况

  1. 多个设备同时上网:你的手机 192.168.1.101 可能同时访问互联网,路由器会为它的连接分配另一个公网端口(比如 60001)。所以,整个局域网的所有活跃连接,共享路由器的同一个公网IP,但使用不同的端口号来区分
  2. 入站连接(从外网主动访问内网设备)
    • 这是问题的另一面。默认情况下,如果外网一台服务器 5.5.5.5 主动向你的路由器公网地址 <123.123.123.123, 60000> 发送数据,路由器会直接拒绝。因为它NAT表里没有这条“未经请求”的映射记录,不知道这个数据包该发给谁。
    • 要让外网能访问内网设备(如搭建网站、远程桌面),你必须手动配置端口转发(Port Forwarding) 或使用 UPnPDMZ 等功能。
    • 端口转发:在路由器上设置一条静态规则:“所有发送到 <123.123.123.123, 8080> 的数据,都转发给内网的 <192.168.1.100, 80>”。这时,你的服务器才真正拥有了一个对外的、固定的 <公网IP, 端口>

不同类型的NAT

常见的NAT类型,按照从宽松到严格的顺序排列:

  1. 完全锥型NAT (Full Cone NAT)
    • 映射行为:当内部主机(IP:Port)通过NAT访问外部主机时,NAT会创建一个映射(内部IP:Port -> 公网IP:Port)。然后,任何外部主机都可以通过这个公网IP:Port发送数据到内部主机。
    • 特点:一旦映射建立,不限制外部来源。这是最宽松的NAT类型,便于P2P通信。
  2. 受限锥型NAT (Restricted Cone NAT)
    • 映射行为:内部主机(IP:Port)访问外部主机(IP:任意Port)时,NAT创建映射。然后,只有之前内部主机访问过的外部主机IP(不限制端口)可以通过这个公网IP:Port发送数据回来。
    • 特点:限制外部主机的IP地址,但不限制端口。即,只要内部主机曾经发送数据到某个外部IP,那么该外部IP的任意端口都可以通过映射的公网IP:Port与内部主机通信。
  3. 端口受限锥型NAT (Port Restricted Cone NAT)
    • 映射行为:内部主机(IP:Port)访问外部主机(IP:Port)时,NAT创建映射。然后,只有之前内部主机访问过的外部主机IP和Port才能通过这个公网IP:Port发送数据回来。
    • 特点:同时限制外部主机的IP和端口。这是最常见的NAT类型,比受限锥型更严格。
  4. 对称型NAT (Symmetric NAT)
    • 映射行为:内部主机(IP:Port)访问不同的外部目标(IP:Port)时,NAT会为每个不同的外部目标分配一个不同的公网端口。即,同一个内部主机,访问两个不同的外部主机(或同一主机的不同端口)时,会使用两个不同的公网端口。
    • 特点:这是最严格的NAT类型。外部主机只能通过内部主机之前通信过的特定IP和端口来回应。同时,由于每个会话的映射都不同,所以很难预测NAT会分配哪个公网端口,这使得P2P通信非常困难。

映射行为与过滤行为

在以上分类中,实际上涉及两个维度:

  • 映射行为:分为地址相关映射(即对称型)和地址无关映射(其他三种)。
  • 过滤行为:即NAT是否检查传入数据包的源地址和端口,分为不过滤(完全锥型)、过滤源IP(受限锥型)、过滤源IP和端口(端口受限锥型)。

如何区分

通常,我们可以通过STUN(Session Traversal Utilities for NAT)协议来检测NAT类型。客户端在STUN服务器的帮助下,通过比较本地端口与外部看到的端口,以及测试不同外部地址的连通性,来判断NAT类型。

影响

  • P2P连接:完全锥型NAT最易于实现P2P,而对称型NAT最难。对于对称型NAT,通常需要中继服务器(如TURN)来实现通信。
  • 网络应用:了解NAT类型有助于选择合适的技术来建立直接连接或选择中继。

评论