查看原文
其他

谈谈NAT:什么?全球IP和私有IP是什么鬼?

帅地 苦逼的码农 2019-01-20


本文字数:1460字

阅读本文大概需要:4分钟



可能你们会经常听到全球 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访问它,他只知道是网关访问了它。


讲到这里,也差不多结束了。有收获的小伙伴加个鸡腿犒劳一下?(点底部广告 or 转发分享)。这篇文章具体细节没展开,算是大概讲解了NAT。


- End -


计网相关文章:

集线器、交换机与路由器有什么区别

TCP流量控制机制

5分钟读懂拥塞控制


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存