什么是NAT(网络地址转换)?基础原理梳理

为什么家里一台路由器就能让好几台设备同时上网?一起来梳理NAT背后的原理。

什么是NAT(网络地址转换)

这是路由器的核心功能之一,负责在家庭或办公网络内部使用的私有IP地址,和真正能连上互联网的那一个公网IP地址之间进行相互转换。

为什么需要NAT:IPv4地址枯竭

全球可分配的IPv4地址总共只有约43亿个,远远不够给每一部手机、每一台笔记本电脑、每一个物联网设备都分配一个公网地址。有了NAT,一个家庭里的几十台设备,就能共用运营商分配的那唯一一个公网IP同时上网。这正是让IPv4在本该枯竭的时间点之后,依然能够继续沿用至今的现实折中方案。

PAT(端口地址转换):家用路由器实际的工作方式

笔记本电脑和手机之所以能同时上网又互不干扰,是因为路由器把每台内部设备的(私有IP,端口)组合,分别映射到公网IP上不同的端口号。比如笔记本的请求可能从公网IP的40001端口发出,手机的请求从40002端口发出,响应返回时路由器根据端口号判断该转发给哪台设备。家用路由器实际采用的,正是这种连端口号一起转换的PAT(端口地址转换,也常被称为NAPT)方式。

NAT转换表:记住映射关系的账本

每次建立新连接时,路由器都会临时创建一条类似"内部192.168.0.5:51000对外映射为公网IP:40001"的记录。这条记录会在通信结束或一段时间没有响应后自动被清除;而对于在线游戏、视频通话这类需要长时间保持连接的服务来说,如果这条记录被提前清除,就可能导致连接突然中断。

静态NAT与动态NAT的区别

静态NAT把一个私有IP地址和一个公网IP地址永久固定配对,适合那些必须始终以同一个外部地址被访问到的服务器。动态NAT则准备一个公网IP地址池,在需要时临时分配其中一个,常用于企业网络中让多个用户轮流共用有限数量的公网IP。不过,家用路由器日常实际运行的方式,其实更接近前面说的按端口转换的PAT,而不是这两种经典分类中的任何一种。

NAT的局限:端口转发和P2P连接会变得困难

由于NAT默认只对内部主动发起的通信返回响应,像家庭服务器被外部访问、或游戏主机的P2P匹配这类由外部先发起连接的情况,如果不做额外配置,默认就会被阻挡。要解决这个问题,需要用到端口转发——把特定端口开放给指定的内部设备,或者UPnP——按需自动开放端口。在线游戏中常见的Open、Moderate、Strict这几种NAT类型标签,归根结底都源于这个局限。

NAT带来的附带安全效果

NAT本身并非为安全而设计,但它会产生类似防火墙的附带效果:外部攻击者尝试连接你的公网IP时,如果NAT表里没有对应的记录,路由器根本无法判断这些流量该转发给哪台内部设备,于是自然而然地将其丢弃。

为什么长时间保持的连接有时会突然断开

每个连接背后的NAT表记录都有存活期限,一旦因长时间没有流量而过期,路由器就不知道该把响应转发到哪里了。需要长时间保持连接、但流量并不连续的在线游戏和视频通话尤其容易受影响——通话安静太久,或者游戏过程中出现网络流量的空档期,都可能导致对应的NAT映射过期,连接随之意外中断。意识到这个问题的应用程序,通常会按固定间隔发送很小的"保活"数据包,专门用来让NAT表里的记录保持存活。

NAT看起来像防火墙,但它并不是防火墙

NAT默认拦截未经请求的入站连接,只是其工作原理带来的一个附带效果,而不是刻意设计的安全控制手段——它并不区分恶意流量和正常流量,不会记录被拦截的尝试,也无法检查数据包内部的具体内容。真正的防火墙会依据明确制定的规则来决定放行哪些流量。这也是为什么如果只依赖NAT、而没有配备真正的防火墙功能,网络就会缺少专业安全工具才能提供的那种精细控制。

常见问题

NAT和防火墙是一回事吗?

不是。NAT的职责只是转换地址,默认拦截未经请求的外部连接只是这种转换机制带来的附带效果,而不是刻意设计的安全功能。要按精细规则过滤流量,需要另外配备真正的防火墙功能。

用了IPv6是不是就不需要NAT了?

IPv6的地址空间极其庞大,理论上可以给每台设备都分配一个公网地址,使NAT不再是必需品。但现实中,在可预见的一段时间里,大多数网络仍会同时运行IPv4和IPv6,所以NAT很可能还会继续在日常中被使用一段时间。