内网和外网之间的通讯(端口映射原理)

    首先解释一下“内网”与“外网”的概念:服务器

    内网:即所说的局域网,好比学校的局域网,局域网内每台计算机的IP地址在本局域网内具备互异性,是不可重复的。但两个局域网内的内网IP能够有相同的。网络

    外网:即互联网,局域网经过一台服务器或是一个路由器对外链接的网络,这个IP地址是唯一的。也就是说内网里全部的计算机都是链接到这一个外网IP上,经过这一个外网IP对外进行交换数据的。也就是说,一个局域网里全部电脑的内网IP是互不相同的,但共用一个外网IP。(用ipconfig/all查到的IP是你本机的内网IP;在www.ip138.com上看到的是你链接互联网所使用的IP,即外网)。spa

 

    在局域网中,每台电脑均可以本身分配本身的IP,这个IP只在局域网中有效。而若是你将电脑链接到互联网,你的网络提供商(ISP)的服务器会为你分配一个IP地址,这个IP地址才是你在外网的IP。两个IP同时存在,一个对内,一个对外。orm

 

    当你家里买了两台电脑,你想组建一个局域网,你除了要用网线和路由器等设备将两台电脑相连,你还要将两台电脑设置固定IP,好比电脑A设为192.168.1.2,电脑B设为192.168.1.3,这样你就能够用这两个IP地址互相访问两台电脑,但这两个IP地址只在这两台电脑间有效,对外网无效。因此局域网中分配的IP与广域网中的IP彻底没有对应关系。blog

    你在内网的机子在上网时,都是在向网关发出请求,再由网关(通常为路由器)用外网IP转到INT网上,接受数据后,再分发到你的内网IP上。接口

 

    再者,咱们大多人都是使用宽带上网,结果发现,A 和 B 的局域网 IP 都是192.168.31.11,当他们都访问百度浏览网页时,百度服务器回复数据时,如何区分是给 A 仍是给 B 呢?ip

  

公有 IP 和私有 IP 的区别资源

  首先,咱们须要了解一下什么是公有 IP 和私有 IP ?路由

  公有地址(Public address):由 Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些 IP 地址分配给注册并向Inter NIC提出申请的组织机构,公有 IP 全球惟一,经过它直接访问因特网(直接能上网)。get

  私有地址(Private address):属于非注册地址,专门为组织机构内部使用,说白了,私有 IP 不能直接上网。

  而咱们平时经过运营商(电信、移动、联通宽带等)上网,家里面经过路由器分出来的 IP 都是私有 IP(局域网 IP),你们可能会疑问,咱们能够上网啊,怎么会是私有 IP 呢?租用(申请)公有 IP 是须要钱的。 运营商买了一些公有 IP,而后经过这些公有 IP 分出来,再分给一个一个的用户使用。这个过程有点相似于,咱们去安装了宽度,经过路由器分出几个 IP,让好几我的都能上网,固然运营商经过公有 IP 分出来的过程确定比这个复杂多了。因此,咱们平时上网用的 IP 是私有 IP,真正拥有公有 IP 的是运营商(固然,咱们能够租用一个公有 IP )。因此,A 家庭的局域网 IP 和 B 家庭的局域网 IP 相同很正常,可是,最终 A 和 B 能上网(数据走出去)仍是经过运营商的公有 IP,毕竟,公有 IP 的资源有限,这一片区域的用户使用的颇有可能(实际上就是这样的)是同一个公有 IP,这样的话,又回到前面的问题,假如 A 和 B 的局域网 IP 相同(192.168.31.11),当他们同时访问百度服务器的时候,百度服务器如何区分哪一个是 A,哪一个是 B 呢?

  

端口映射

  接下来,给你们介绍一下什么是端口映射?

  端口映射是 NAT 的一种,它将外网主机的 IP 地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

  如今市场上的家庭路由器都具有 NAT 功能,也能够实现端口映射。下图为小米路由器的端口映射设置图:

  

  咱们平时通过路由器,经过宽带,最终去到运营商那边,数据是从运营商出去,最终数据是回到运营商那边,运营商再把数据发送到用户的电脑。

  路由器,至少有两个端口:WAN 口和 LAN 口。

  WAN:接外部 IP 地址用,一般指的是出口,转发来自内部 LAN 接口的 IP 数据包,这个口的 IP 是惟一的。

  LAN:接内部 IP 地址用,LAN 内部是交换机。

  这里,咱们简化这个过程,咱们把运营商当作一个 NAT 设备。

  

  为了方便你们理解,咱们把 IP 的转化方向反过来分析(准确来讲,公网转局域网)。

  A 电脑的 IP 是局域网 IP(192.168.31.11),这个 IP(192.168.31.11)是从路由器的 lan口分配的。

  当咱们上百度的时候,通过路由器的 wan口,进行相应的IP、端口转化:192.168.31.11:80 -> 10.221.0.24:8080,因此,从 wan口出去的地址为:10.221.0.24:8080。

  

  最后,通过运营商,运营商那边会作相应的端口映射(并且是动态端口映射),子网 IP(10.221.0.24:8080)转化为公网 IP(128.0.0.1:8888),经过这个公网 IP 去访问百度服务器。

  

  同理,B 的过程也是同样。经过这样的层层端口映射,最终保证地址(IP + 端口)的惟一性。A 和 B 访问百度服务器,尽管它们的局域网 IP 是同样的,可是最终它们访问百度的地址(IP + 端口)是惟一的,因此,百度服务器回复时,原路返回时可以区分到底给谁回。

  如何让外网可以访问本身写的网络程序(服务器)

  首先,咱们须要在运营商那边申请(租用)一个公有 IP (长城宽带一年须要 2000 元左右),假如这个公有 IP 为:128.0.0.123。

  假如,咱们写的服务器以下:

  

  接着,找个 NAT 设备进行相应的端口映射,家庭路由器都有这个功能。这里以小米路由器为例:

  

  映射关系以下:

  

  最后,其余人写客户端程序时(电脑能上外网),只要指定目的 IP 地址为 128.0.0.123,端口为 8888,经过这个地址,就能找到192.168.31.248:8080,由于这二者已经创建好映射,如上图,这样,咱们的服务器就能收到数据。

相关文章
相关标签/搜索