什么是NAT?

可能你们会经常听到全球 IP(外网)私有 IP(内网),他们的区别是什么呢?今天这篇文章来简单讲讲这到底是怎么回事。

我们都知道,IPv4中的IP地址的数量是有限的,每次把一部分地址分配出去,那么就意味着能够用来分配的IP地址就更少了,而且随着现在手机,电脑等的快速发展,如果每个手机或者电脑都要求一个IP地址,那么显然IP地址是不够用的。

为了解决这个问题,我们可以采取这样的策略:例如对于一个公司来说,每个公司都会有一个属于自己公司的内网(也可以称之为局域网)。

假如我们给这个公司A分配了一个IP=192.168.1.1。我们把这个IP作为这个公司内网的网关吧。

图片

在公司A的内网里面有3台电脑,如果这三台电脑要上网的话,我们需要给他分配一个IP,那么我们一定需要去申请3个IP地址来使用吗?

答否。我们不一定需要去申请3个IP的,在我们这个内网里,我们可以指定自己的规则,例如,我们可以给这三台电脑随便分配三个IP(请注意,这三个IP不是去申请的,而且我自己随意给它分配的)。分别分配电脑A = 192.168.1.2 电脑B = 192.168.1.3 电脑C = 192.168.1.4

图片

假如电脑A想要访问百度,百度的IP我们假设为:172.168.30.3

图片

我们都知道,电脑A的IP是我们虚构的,实际上可能并不存在这样一个IP,如果用电脑A的IP去访问百度,那肯定行不通。

我们也知道,由于百度和电脑A不在一个局域网内,所以A要访问百度,那么必须得经过网关。而网关的这个IP地址,是真实存在的,是可以访问百度的。

为了让 A 可以访问百度,那么我们可以采取这样的方法:让网关去帮助 A 访问,然后百度把结果传递给网关,而网关再把结果传递给 A,这样不就可以解决了?

图片

不过电脑A, B, C都可能拜托网关去帮忙访问百度,而百度返回的结果 的目的IP都是网关的IP=192.168.1.1。那么网关该如何进行区分这结果是A的,B的还是C的呢?

我们去访问百度的时候,不是需要指定一个端口吗?只要我们把 A的IP + 端口 映射成 网关的IP+端口,不就可以唯一确定身份了?

例如A用端口60去访问百度,网关把 A的IP+端口60 映射成 网关的IP+端口80 不就可以了?

图片

百度把结果返回给网关的80端口之后,网关再通过映射表,就可以把结果返回给 A的60端口 了。

如果B也是用60端口去访问百度的话,也是一样,可以把它映射到90端口。

图片

这种方法地址的映射转换,我们也称之为网络地址转换。英文为 Network Address Translation,简称NAT

而像A, B, C这样的IP地址我们也称之为内网IP,即私有IP;而像网关,百度这样的IP我们称之为外网IP,即全球IP。现在知道外网IP和内网IP了吧?

几点需要注意的地方

1、对于全球IP,显然每个IP都是唯一的,而对于私有IP,同一个局域网内,也得是唯一的,但在两个不同的局域网中,是可以有相同的私有IP的。

2、局域网内主机之间的通信,是不需要进行地址转换的,而如果需要访问外网,才需要进行地址转换。

实际上,我们也可以把这种地址转换称之为一种代理。网关就相当于一个代理,把局域网内的主机的一些信息都给隐藏了起来。百度并不知道是主机A访问它,他只知道是网关访问了它。

发表回复

后才能评论