计算机网络 IP

SNAT与IPV4的IP的冲突解决

        在一个局域网中IP地址是不可重复且唯一的,但是在两个家庭中通过路由器接入的两台电脑(即两个局域网),如果不同的两台计算机的IP地址是相同的比如都是192.1681.10,并且它们访问的还是同一个网站,为什么不会出现IP冲突而导致的信息传输错乱的情况?SNAT与NAT分别都是什么?

        在计算机网路中数据包的发送是根据IP地址而进行路由的,如果IP发生冲突,会导致ARP表混乱,数据包的发送将变成不确定性的行为。

        关于怎么解决这个问题,需要了解SNAT这个概念。在发送数据包时路由器会将计算机的IP地址进行修改,变成彻底独一无二的IP,这个技术就叫做SNAT技术。

        为什么要存在SNAT技术,因为IPV4的IP地址一共有42亿个,看似是用不完的,可是随着互联网的快速发展。这42亿个IP地址最终在2011年3月被用尽。在IP地址缺乏的现在,这项技术让计算机之间的通信与互联网的访问畅通无阻。当然IPV6就不用这么麻烦,因为人家足够多,有3.4*10^38个,甚至每一个原子都能有自己的IP地址。但是在当时没有出现IPV6的那个年代SNAT技术确实做出了很大的贡献,至今还在使用。

        举一个相关的例子:假设有一台计算机想要访问一个网站,假设这台计算机的IP地址是x(由32位二进制数,小数点间隔而组成。暂时就用x代替,因为好几串数字看着也容易混乱),这个网站服务器的IP地址为Y,计算机发送数据包的时候会将源IP设置成自己的IP ,将目标IP设置成服务器IP即Y;当计算机对服务器发送数据包(我想要访问你这个网站),经过路由器的时候,路由器会从和这台计算机相同网段的网卡接收到这个数据包,然后在向服务器发送数据包的时候,用SNAT技术将这个x改为这台路由器上WAN口的IP(独一无二)假设为U,然后将源IP改为U,目标IP仍然为服务器IP的Y,服务器收到这个数据包处理后,将自己的IP即Y改为源IP,将路由器的WAN口IP即U改为目标IP,路由器收到服务器发来的数据包后,使用反向SNAT技术将U再转换为x,然后从和这台计算机相同网段的网卡发出从而发送给这台计算机,这就是一次计算机访问网站的全过程。

看👇图也可以

        上述过程看起来计算机访问网站完成通信其实也挺简单的,但事实上是比这要复杂一些。

有没有发现如果有这么一种情况怎么解决:一个家庭中有两台计算机,计算机A的IP地址假设为:192.168.1.10,计算机B的IP地址假设为:192.168.1.11,这两台计算机连接着同一台路由器,如果它们想要访问同一个网站,当它们把数据包发送给路由器时,因为路由器只有一个WAN口,假设这个路由器的WAN口IP为221.8.14.91,我们知道路由器在把计算机给它的数据包发送给服务器时会将数据包上的源IP从计算机IP转换为WAN口的IP地址,(因为每一台路由器WAN口IP都是独一无二的,所以发送给服务器时是肯定不会发生ARP表混乱的)。那么在向服务器发送数据包时,计算机A、B给的数据包上的IP地址其实都是这台路由器上WAN口上的IP,即都是221.8.14.91。假设目标服务器的IP:36.152.44.96,那么路由器将这两个数据包发给服务器时,服务器确实会给出响应,并将自己的IP地址改为源地址,将路由器的IP地址改为目标地址,当返回的两个数据包来到路由器中时,这两个数据包上的目标IP都是路由器上的IP:221.8.14.91,那么路由器怎么知道这两个数据包哪个是计算机A的,哪个是计算机B的呢?

        上面这个问题让我们发现,仅仅是只关注IP地址是不行的,还需要增加一些确定性的标记,这是就需要把关联的属性往下再扩展一层,来到传输层。注意这一层和上一层就可以说不是一个维度了,千万不要混淆。

这里引入一个新的名词:“源端口”。

以传输层最常用的协议:TCP协议来解释。TCP协议有两个属性:(1)源端口 (2)目标端口

        这时候我们的源地址转换就变成了 SNAT:---> 修改源IP和源端口。并将修改后的端口号和源IP加源端口对应映射关系。比如计算机A和计算机B的源端口都是12345,改变后计算机A的源端口变为23456,计算机B的源端口变为34567。在返回包中根据目标端口号是23456还是34567区分出来时计算机A还是计算机B的包,并且在反向SNAT的时候把目标端口号改回。

        说实话实在是有些难以理解,可以简单理解为出现了这个情况只在网络层看IP地址已经无法解决了。那么只能到第四层传输层来请求帮助(其实这些层都是实际不存在的,只是帮助好理解一些。)第四层的TCP协议和网络层的IP联合起来,既然无法从路由器层面解决这个分包的问题,那么就利用反向思维改计算机的源端口去,暂时改了源端口,让网络层可以解决这个分包问题,然后发送过去的时候还会改为原来的,结果一切都跟原来一样,但是问题解决了,数据包也收到了,可以暂时先这么理解,更深的内容,还需要在后续的内容汇总不断学习去理解。

各个协议大概的原理

除了TCP协议外,UDP协议也是这个原理,一样使用IP地址+端口号进行关联。

但是我们所熟知的Ping命令却不是IP+端口号,Ping的连接命令是遵循ICMP协议:IP地址+(type+code)

当然,还有其他的一些协议,也会有不同的标记方式,几乎上都是这么一个方式:IP地址+其他标记。

DNAT技术

        DNAT协议是:目标地址转换技术,与SNAT技术相反,DNAT是修改目标地址。

DNAT技术的作用

        如果我们的计算机对外提供服务,公网上发送的请求不能直接到达内网计算机,我们就需要DNAT技术向内网转发请求。比如我们的内网有一台主机有一个Web服务,它监听着80端口;那么我们需要在路由器上配置一个DNAT内容为:如果访问8080端口则帮我们转到计算机1,也就是192.168.1.10的80端口。则当访问数据包从WAN口进入后,路由器执行DNAT,修改目标IP为192.168.1.10,修改目标端口为80。把数据包转发给了计算机1。

NAT技术的影响

        NAT技术深入到我们生活的方方面面,小到家庭网络,大到庞大的运营商网络、云计算平台,都通过NAT技术一层层的将我们的网络进行了分割,在IPV4地址严重匮乏的今天,我们的仍旧能正常的运转,多亏了NAT技术

        上面我们提到了TCP协议与UDP协议,想必大家都有所耳闻,他们到底是如何工作的,两种协议之间又有什么区别,下篇文章会详细说说。

        如果已经看到了这里,谢谢您,如果对本人文章感兴趣,可以持续关注文章,谢谢啦😄。

写的文章多为基础,大多针对刚刚入校的学生,可以让其更好理解抽象的概念,如果学习的阶段很辛苦很痛苦,休息休息再出发,加油,坚持下来。世界,不以成败论英雄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值