背景
问题:这个场景下 他们两家能同时上网吗?

不是说IP地址是全球唯一的吗,他们都是192.168.1.1的地址,难道不会IP冲突,还能同时上网?
在解释这个问题之前,我们先来了解下IP地址。我们现在使用的IP地址,通常是指的IPV4地址,整个IPV4第地址大约有43亿个,除掉一些特殊的保留地址,实际能用的大概36亿个,而我们国家分配搭配的ip地址,大约在3.5亿个左右,IP地址的数量严重匮乏。

为了缓解这个难题,IP地址保留了三段地址作为私网地址,任何组织都可以在内部自由使用这三段地址进行组网。而除此之外的公网地址,确实是全球唯一,但是私网地址是不可以直接访问互联网的。

那上面的两家又是怎么能上网的呢?这就是我们今天要讨论的内容,NAT网络地址转换,还有SNAT 和 DNAT。NAT(网络地址转换)是解决 IP 地址不足和网络安全的重要技术,其中 SNAT 和 DNAT 是最核心的两种类型。下面用生活化的例子帮你快速理解它们的区别和作用:

SNAT(源地址转换):出门 “伪装身份”
核心功能:修改数据包的源 IP 地址,让多个设备用同一个公网 IP 访问互联网。
在计算机网络中,数据包是根据目标IP进行路由的。如果同一个网络中出现两个相同的IP,这时ARP表会发生混乱,数据包发送到哪个主机上,将变成不确定行为。那怎么解决这个问题,答案很明显,就是让数据包从路由器发出去的时候,变成不同的IP地址不就可以了。这个技术叫做原地址转换技术,我们称之为SNAT。

为了简化理解,我们还时假设路由器的WAN口接入的IP地址为公网IP,比如100.1.1.1,我们的内网计算机地址是192.168.1.1,网关地址为192.168.1.254,我们访问的远端IP为8.8.8.8。
- 1. 首先,计算机发送一组数据包到路由器上,在这些数据的网络层有个重要的信息,一个是源IP:192.168.1.1,另一个是目的IP:8.8.8.8
- 2.路由器拿到这一组数据时,需要执行源地址转换,把源IP修改一下,改成WAN口的公网IP 100.1.1.1发送出去。
- 3.服务器收到了数据,处理完之后需要回复,再把源IP作为目标IP发送回来。
- 4.路由器收到回包,执行反向UNSNAT,再把目标IP改成192.168.1.1,发送给了内网的计算机。一次通信完成。

看到这个过程,是不是觉得很简单,但是事实比这个要复杂一些。假设内网中有两台计算机。另一台的IP地址为192.168.1.2

他们两个同时访问同一个网站,发送了两个数据包到路由器上,路由器执行SNAT后发送出去,看来没什么问题,但是回来的数据包怎么办?

因为回来的数据包的目标IP都是100.1.1.1,如何从中区分出来,两台计算机的数据包。

所以这样看,只关注IP地址是不行的,还需要增加一些确定性的标记。这时就要把关联的属性再扩展一层,扩展到传输层,我们以最常见的传输层协议,TCP协议举例子。

TCP协议有两个关键属性:源端口和目标端口,这时候我们的源地址转换,就变成了修改 源IP 和 源端口,并将修改后的 端口号 和 源IP 加 源端口 形成映射关系。

例如 主机1 和 主机2的源端口都是12345,修改后主机1的源端口变成23456,主机2变为34567

在返回包中,根据目标端口是23456 还是 34567,区分出来是主机1 还是 主机2的包,并且在反向SNAT的时候,把目标端口号改回。
除了TCP协议外,UDP协议,也是同样的道理。通过IP + 端口进行关联,但是我们常用的用来检测目标连通性的Ping命令使用的是ICMP协议,它没有端口信息,则需要使用协议中的type + code 来代替端口进行关联。其他的协议也都是类似的道理,通过协议特定的标记,来进行关联。

通俗例子
比如你家只有 1 个宽带账号(公网 IP 是 100.100.100.100),但家里有 3 台设备(手机、电脑、平板)要上网:
- 手机想访问百度(IP 是 202.108.22.5),发送的数据包源 IP 是手机的内网 IP(比如 192.168.1.101)。
- 数据包经过路由器(NAT 设备)时,路由器把源 IP 改成自己的公网 IP(100.100.100.100),并记录 “手机 192.168.1.101 正在访问百度”。
- 百度服务器收到数据包后,认为是公网 IP 100.100.100.100 在访问,返回的数据会先到路由器。
- 路由器根据记录,把数据转发给对应的手机。
作用
- 节省公网 IP:多个设备共享一个公网 IP 上网(比如家庭、企业内网常用)。
- 隐藏内网结构:外网只能看到 NAT 设备的公网 IP,无法直接访问内网设备。
DNAT(目的地址转换):快递 “代收转发”
明白了SNAT,我们再来看一下DNAT,DNAT名为目标地址转换,顾名思义,跟SNAT相反,DNAT是把目标地址修改的技术。那么DNAT有什么用呢?
如果我们的内网计算机对外提供服务,公网发过来的请求,不能直接到达内网计算机,我们就需要路由器用DNAT技术,帮我们转发请求。
- 1.比如我们内网的主机上有一个web服务,监听了80端口,我们需要在路由器上配置一个DNAT,内容为访问公网地址的8080端口,就帮我们转到计算机1,也就是192.168.1.1的80端口。
- 2.则当访问数据包从WAN口进入后,路由器执行DNAT,修改目标地址为192.168.1.1,修改目标端口为80,把数据包转发给了计算机1。

核心功能
修改数据包的目的 IP 地址,让外网能通过公网 IP 访问内网特定设备。
通俗例子
比如你在公司内网搭建了一个网站(服务器 IP 是 192.168.1.200),想让外网用户访问:
- 外网用户输入网址(对应公网 IP 是 100.100.100.100),请求访问网站。
- 数据包到达公司路由器(NAT 设备)时,路由器把目的 IP 从公网 IP 100.100.100.100 改成内网服务器的 IP 192.168.1.200,并记录 “有人要访问内网服务器”。
- 内网服务器收到请求后,处理数据并返回给路由器。
- 路由器再把返回数据的源 IP 改成公网 IP,发给外网用户。
作用
- 发布内网服务:让外网能访问内网的网站、服务器、摄像头等(比如企业对外提供服务)。
- 端口映射:常配合端口号使用(如将公网 IP 的 80 端口映射到内网服务器的 80 端口),更精准地转发请求。
对比总结(一看就懂)
SNAT:内网设备 “出门” 时换个公网身份,避免暴露自己(源 IP 变)。
DNAT:外网想 “进门” 时,NAT 设备把请求转发给指定的内网设备(目的 IP 变)。
类型 | 修改的 IP | 核心目的 | 生活类比 | 常见场景 |
---|---|---|---|---|
SNAT | 源 IP(从内网→公网) | 让内网设备共享公网 IP 上网 | 全家人用一个门牌号收快递 | 家庭路由器、企业出口网关 |
DNAT | 目的 IP(从公网→内网) | 让外网访问内网特定设备 | 快递员按门牌号送到具体房间 |
NAT技术除了今天我们介绍的DNAT 和 DNAT以外,还有另外五种分类。
- 静态NAT:是私有地址和共有地址是1:1的固定映射关系。
- 动态NAT:它使用了一个地址池来动态分配公有地址。
- NAT Server:适用于需要来提供对外服务的内部服务器使用。
- NAPT:也称PAT,多个私有地址通过共享少量的公有地址和不同的端口号与外部通信。
- Easy IP:与PAT类似,使用出接口地址做NAPT,适合没有固定公网IP的场景。
NAT技术深入到我们生活的方方面面,小到家庭网络,大到庞大的运营商网络,云计算平台等。都使用这NAT技术。

在IPV4地址严重匮乏的今天,我们的网络依然能正常的运转,多亏了NAT技术的存在。
SNAT 和 DNAT 是路由器的基本功能吗?
大多数路由器默认支持 SNAT
- 家用路由器:几乎所有家用路由器(如 TP-Link、小米路由器等)都内置 SNAT 功能,用于实现 “多设备共享一个宽带 IP 上网”。比如你家里用路由器连接宽带后,手机、电脑等设备能同时上网,正是因为路由器通过 SNAT 将这些设备的内网 IP 转换为宽带的公网 IP。
- 企业级路由器:除了基础 SNAT,还可能支持更复杂的策略(如基于 IP 或端口的 SNAT 规则),满足企业多部门共享公网 IP 的需求。
DNAT 功能在路由器中更依赖型号和配置
- 家用路由器:
- 部分高端家用路由器(如华硕、网件的高端型号)支持 DNAT(通常称为 “虚拟服务器” 或 “端口转发”),允许用户将公网 IP 的某个端口映射到内网设备(比如把公网 80 端口映射到内网摄像头的 IP 和端口,实现外网访问)。
- 入门级家用路由器可能不支持 DNAT,或仅支持简单的端口转发(需手动配置)。
- 企业级 / 工业级路由器:普遍支持 DNAT,且功能更强大,可设置多条规则、结合域名解析、支持负载均衡等,常用于企业对外发布服务(如网站、邮件服务器)。
路由器是实现 SNAT/DNAT 的常见载体,但需注意
- SNAT 是路由器的 “标配”:几乎所有路由器都支持 SNAT,否则无法实现多设备共享上网。
- DNAT 需看路由器 “档次”:家用路由器可能仅部分支持简单 DNAT(端口转发),企业级设备则支持更完整的功能。
- 核心作用:无论是哪种设备,SNAT 解决 “内网共享公网 IP” 的问题,DNAT 解决 “外网访问内网服务” 的问题,二者是 NAT 技术的核心应用。