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