目录
[SNAT(Source Network Address Translation)源网络地址转换](#SNAT(Source Network Address Translation)源网络地址转换)
[DNAT(Destination Network Address Translation,目标网络地址转换)](#DNAT(Destination Network Address Translation,目标网络地址转换))
前言
本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。
这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。
可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。
家庭网络如何通过路由器上网?源地址转换和目标地址转换时什么?_哔哩哔哩_bilibili
前篇
引言
NAT(Network Address Translation),是指网络地址转换
在两个不同家庭中,通过路由器接入的两台电脑,IP地址都是192.168.1.10。同时访问互联网上的同一个网站,为什么IP地址不会冲突?SNAT和DNAT又是什么?
SNAT(Source Network Address Translation)源网络地址转换
计算机网络中数据包如何发送是根据目标IP进行路由的。如果同一个网络中出现两个相同的IP则ARP表会出现混乱,数据包发送到哪台主机上将变成不确定性行为。
那怎么解决这个问题?答案很明显,就是让数据包从路由器发出去的时候,变成不同的IP地址不就可以了。这个技术叫源地址转换技术,我们称之为SNAT。
SNAT流程
为了简化理解
假设路由器的接口接入的IP地址为公网IP比如221.8.1 4.91
我们的内网计算机地址是192.168.1.4,网关地址为192.168.1.1。(网关的地址一般是.1或者.254,为了方便)
我们访问的远端IP为36.152.4 4.96。
首先,计算机发送一包数据出来到路由器上,在这包数据的网络层有两个重要的信息,一个是源IP192.168.1.4点时,另一个是目标IP36.152.44.96。
路由器拿到这一包数据时,需要执行源地址转换SNAT,把源IP改一下,改成WAN口的公网IP221.8.1 4.91发送出去。
服务器收到了数据处理完之后需要回复,则把源IP作为目标IP发送回来。
路由器收到回包,执行反向SNAT,再把目标IP改成192.16 8.1点时发送给了家庭中的计算机,一次通信完成。
看到这个过程你是不是觉得很简单,但是事实比这个要复杂一些。(还是看视频容易理解,推荐先看视频,理解了再存下笔记)。
确定性标记
假设家庭中有两台计算机,另一台计算机的IP地址为192.168.1.11。他们俩同时访问同一个网站,发送了两包数据到路由器上,路由器执行SNAT发送出去,看来没什么问题。
但是回来的数据包怎么办?因为回来的数据包的目标IP都是221.8.1 4.91。
如何从中区分出来两台计算机的数据包?所以这样看只关注IP地址是不行的,还需要增加一些确定性的标记。这时就要把关联的属性再往下扩展一层,扩展到传输层。
我们以最常用的传输层协议TCP协议为例。
TCP协议有两个关键属性,源端口和目标端口。
这时候我们的源地址转换就变成了修改源IP和源端口,并将修改后的端口号和源IP加源端口形成映射关系。
比如主机一和主机二的源端口都是12345(比如两个主机上都是QQ占用了该端口)
修改后主机一的源端口变为23456,主机二变为34567
在返回包中,根据目标端口号是23456还是34567,区分出来是主机一还是主机二的包。
并且在反向SNAT的时候,把目标端口号改回。
除了TCP协议外。UTP协议也是同样的道理,通过IP加端口进行关联。
但是我们常用来检测目标连通性的Ping命令使用的是ICMP协议。
它没有端口信息,则需要使用协议中的type加code来代替端口进行关联。(可以看下我抓包实验中的截图,有一个类型)。计算机网络------抓取icmp包-CSDN博客
其他的协议也都是类似的道理,通过协议特定的标记来进行关联。
DNAT(Destination Network Address Translation,目标网络地址转换)
DNAT名为目标地址转换,顾名思义跟SNAT相反,DNAT是把目标地址修改的技术。
DNAT有什么用呢?
如果我们的内网计算机对外提供服务,公网上发过来的请求不能直接到达内网计算机。我们就需要路由器用DNAT技术帮我们转发请求。DNAT就是把公网IP转换为我们的内网IP。
比如我们内网有一台主机上有一个Web服务监听了80端口。
我们需要在路由器上配置一个DNAT,内容为访问公网地址的8080端口,帮我们转到计算机1,也就是192.168.1.10的80端口。
则当访问数据包从WAN口进入后,路由器执行DNAT修改目标地址为192.16 8.1点,修改目标端口为80,把数据包转发给了计算机。
NAT技术重要性
NAT技术深入到我们生活的方方面面,小到家庭网络,大到庞大的运营商网络、云计算平台,都通过net技术一层层的将我们的网络进行了分割,在IPV4地址严重匮乏的今天,我们的计算机网络仍旧能正常的运转,多亏了NAT技术的存在。