内网和外网(内网和外网怎么切换使用)

对于初学者来说,我们在学习网络编程(如TCP、UDP编程)时,一般都是在局域网内进行通信测试。有时候我们可能会想,内网的网络数据和外网的网络数据有什么区别?我们

对于初学者来说,我们在学习网络编程(如TCP、UDP编程)时,一般都是在局域网内进行通信测试。有时候我们可能会想,内网的网络数据和外网的网络数据有什么区别?我们内网的数据是怎么出外网的?

此外,我们大多数人使用宽带上网。结果发现A和B的局域网IP都是192.168.31.11。都是访问百度浏览网页的时候,百度服务器回复数据的时候,怎么分辨是给A的还是给B的?

五分钟搞懂内网和外网之间的通信的原理

公共知识产权和私有知识产权的区别

首先我们要知道什么是公有IP,什么是私有IP?

公开地址:Internic(互联网网络信息中心)负责。这些IP地址被分配给注册并申请Inter NIC的组织,公网IP是全球唯一的,通过它们可以直接访问互联网(direct access to Internet)。

私有地址:为非注册地址,仅供机构内部使用。说白了,私有IP不能直接上网。

但是我们一般都是通过运营商(电信、移动、联通宽带等)上网。),并且家中的所有IP都是私有IP(局域网IP)。你可能会疑惑,我们可以上网,怎么会是私有IP呢?

租用(申请)公共IP是要花钱的。运营商买了一些公共IP,然后通过这些公共IP分出去,再一个一个分发给用户。这个过程有点类似。我们装了带宽,通过路由器把几个IP分开,让几个人都可以上网。当然,运营商通过公有IP分离的过程肯定比这复杂得多。所以我们平时上网用的IP是私有IP,运营商真正拥有的是公有IP(当然我们也可以租用公有IP)。所以A家的局域网IP和B家的是一样的,这很正常,但是,最后A和B是可以通过运营商的公共IP上网(数据出去)的。毕竟公网IP的资源是有限的,很有可能这个地区的用户都在用同一个公网IP(其实就是这样)。在这种情况下,回到上一个问题,如果A和B的局域网IP相同(192.168.31.11),当它们同时访问百度服务器时,百度服务器如何分辨哪个是A,哪个是B?

五分钟搞懂内网和外网之间的通信的原理

端口映射

接下来,什么是端口映射?

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

现在市面上的家用路由器都有NAT功能,也可以实现端口映射。下图是小米路由器的端口映射设置图:

五分钟搞懂内网和外网之间的通信的原理

通常我们通过路由器,通过宽带,最后到运营商这边。数据从运营商出去,最终数据回到运营商这边,运营商把数据送到用户的电脑上。

路由器至少有两个端口:广域网端口和局域网端口。

WAN:用于连接外部IP地址,通常指出口,并转发来自内部LAN接口的IP数据包。此端口的IP是唯一的。

局域网:用于连接内部IP地址,交换机在局域网内部。

在这里,我们简化了这个过程,我们将运营商视为NAT设备。

五分钟搞懂内网和外网之间的通信的原理

为了方便我们理解,我们倒过来分析一下IP转换的方向(准确的说是公网到局域网)。

计算机A的IP是lan 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,因为他们之间的映射已经建立,如上图所示,这样我们的服务器就可以接收数据了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/137863.html

发表回复

登录后才能评论