搞网络通讯应用开发的程序员,可能会常常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢?另外,内行都知道,提到外网IP和内网IP就不得不提NAT路由转换这种东西,那这双是什么鬼?本文就来简单讲讲这些到底都是怎么回事。 程序员
答案:不是。数据库
咱们都知道,IPv4中的IP地址的数量是有限的(因此如今都在搞IPv6嘛),每次把一部分地址分配出去,那么就意味着可以用来分配的IP地址就更少了,并且随着如今手机,电脑等的快速发展,若是每一个手机或者电脑都要求一个IP地址,那么显然IP地址是不够用的。网络
为了解决这个问题,咱们能够采起这样的策略:例如对于一个公司来讲,每一个公司都会有一个属于本身公司的内网(也能够称之为局域网)。cdn
内网(学名应叫局域网(Local Area Network,LAN))是在一个局部的地理范围内,通常能够是是几米内(好比家庭内网),也能够是方圆几公里之内(好比一个大学内网),将各类计算机、外部设备和数据库等互相联接起来组成的计算机通讯网。htm
内网主要做用有:blog
1)共享传输信道:简单地理解就是不须要每台电脑一个外网IP地址; 2)传输速率高:内网之间的电脑由于没有外网网络拓扑的复杂性,因此互相通讯的网络能够很快,好比从一个台电脑向另外一台电脑复制一个几G的文件可能只须要数十秒时间。 3)误码率低:由于通讯距离很近,因此误码率很低,换句话说就是网络很稳定(老一点的程序员都知道,读大学的时候同一个宿舍内网联网玩C/S游戏,几乎不会遇到断网或卡顿的事情,除非有人下毛片或者把网络给拔了,哈哈)。游戏
假如咱们给这个公司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。get
而这个规则能够由咱们的内网网关来管理,就像下面这样:
假如电脑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了吧?
为了解决IP地址短缺,技术专家们发明了内网技术,而内网技术的理论支撑就是NAT技术,因此搞网络通讯的程序员很是有必要对NAT技术有一个深刻的理解。
参考文章:
network.51cto.com/art/201809/… network.51cto.com/art/201901/…