原文链接 https://www.cnblogs.com/linuxprobe-sarah/p/10307286.html

搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?

1、引言

搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢?另外,内行都知道,提到外网IP和内网IP就不得不提NAT路由转换这种东西,那这双是什么鬼?本文就来简单讲讲这些到底都是怎么回事。

2、每台电脑都必须要一个公网IP吗?

答案:不是。

我们都知道,IPv4中的IP地址的数量是有限的(所以现在都在搞IPv6嘛),每次把一部分地址分配出去,那么就意味着能够用来分配的IP地址就更少了,而且随着现在手机,电脑等的快速发展,如果每个手机或者电脑都要求一个IP地址,那么显然IP地址是不够用的。

为了解决这个问题,我们可以采取这样的策略:例如对于一个公司来说,每个公司都会有一个属于自己公司的内网(也可以称之为局域网)。

内网(学名应叫局域网(Local Area Network,LAN))是在一个局部的地理范围内,一般可以是是几米内(比如家庭内网),也可以是方圆几千米以内(比如一个大学内网),将各种计算机、外部设备和数据库等互相联接起来组成的计算机通信网。

3、内网主要作用有:

1)共享传输信道:简单地理解就是不需要每台电脑一个外网IP地址;
2)传输速率高:内网之间的电脑因为没有外网网络拓扑的复杂性,所以互相通信的网络可以很快,比如从一个台电脑向另一台电脑复制一个几G的文件可能只需要数十秒时间。
3)误码率低:因为通信距离很近,所以误码率很低,换句话说就是网络很稳定(老一点的程序员都知道,读大学的时候同一个宿舍内网联网玩C/S游戏,几乎不会遇到断网或卡顿的事情,除非有人下毛片或者把网络给拔了,哈哈)。

4、公司的内网是如何实现内网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。

而这个规则可以由我们的内网网关来管理,就像下面这样:

5、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了吧?

6、本文小结

为了解决IP地址短缺,技术专家们发明了内网技术,而内网技术的理论支撑就是NAT技术,所以搞网络通信的程序员非常有必要对NAT技术有一个深入的理解。

 原文链接 https://www.cnblogs.com/linuxprobe-sarah/p/10307286.html

感谢大神的讲解! 本文仅用于方便自己查找,如有侵权,请告知删帖,谢谢大神~

【转载】什么是公网IP、内网IP和NAT转换?相关推荐

  1. 查询Linux的公网及内网IP

    查询Linux的公网及内网IP 查询内网IP 执行命令:ifconfig 若未安装ifconfig则先执行sudo apt install net-tools 查询公网IP 执行命令:curl ipc ...

  2. 公网IP/内网IP:

    转自:http://hi.baidu.com/qkjzsjqsehailte/item/1042151cc0959f426926bbb4 IP地址分配 IP地址标识着网络中一个系统的位置.我们知道每个 ...

  3. golang 获取公网ip 内网ip 检测ip类型 校验ip区间 ip地址string和int转换 判断ip地区国家运营商

    目录 简要简介net包 什么是外网IP和内网IP? 获取公网ip 获取本地ip 判断是否是公网ip ip地址string转int ip地址int转string 判断ip地址区间 通过淘宝接口根据公网i ...

  4. android公网ip,android 获取公网ip 内网ip

    /** * 获取公网ip * @return */ public String getNetIp() { URL infoUrl = null; InputStream inStream = null ...

  5. 公网IP,内网IP,动态IP,静态IP的区别

    随着计算机和网络的不断发展,网络的规模和数量也随之增加,慢慢的,ip地址这个名字的出现频率慢慢的开始不再局限于网络专业的工作者和学生之间,也逐渐进入普通大众的视野.那么这篇文章就讲一下什么是公网IP, ...

  6. ​路由器端口映射怎么设置?内网IP不能映射怎么办?​

    使用路由器后,Internet用户无法访问到局域网内的主机,因此不能访问内网搭建的Web.FTP.Mail等服务器.路由器 端口映射功能可以实现将内网的服务器映射到Internet,从而实现服务器对外 ...

  7. 什么是公网IP、内网IP和NAT转换?

    搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么? 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地 ...

  8. 七月文章导读【TCP/IP相关】:解密 TCP/IP;什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?

    Table of Contents 解密 TCP/IP! TCP/IP是什么 网络分层 分层 封装 地址 端口 域名系统 分用 小结 什么是公网ip?什么是内网ip?为什么ip地址通常以192.168 ...

  9. golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等

    作者: 一蓑烟雨1989 所属专栏: Go从不放弃到实战 本文链接:https://blog.csdn.net/wangshubo1989/article/details/78066344 生命不止, ...

最新文章

  1. 5 门前途美好的编程语言
  2. (转)正则表达式语法备忘录
  3. 013_CSS兄弟选择器
  4. 6,ORM组件XCode(撬动千万级数据)
  5. Flutter快速入门 五步搞定Flutter环境配置
  6. 怎么去除CSDN上的广告?
  7. stm32 pc13~pc15 tamper-rtc OSC32-IN/OSC32-OUT 配置成IO口
  8. linux源码安装php缺少动态库,php源代码安装常见错误解决办法
  9. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局
  10. 设置和清除LD_LIBRARY_PATH
  11. 苹果ios浏览器里面数字被当做电话号码
  12. np.newaxis学习【转载】
  13. leetcode-22-括号生成
  14. python实现邮件客户端_SMTP邮件客户端Python
  15. 如何在 Mac 上右键单击?
  16. 梦开始的地方——VS2019调试技巧
  17. 知乎APP 产品分析
  18. 狗是人类最忠诚的伙伴,当狗遇到不同的人会有不同的反应,下面要求编写一个案例模拟狗遇到不同的人时的反应。
  19. 电影/电视剧/综艺/动漫/游戏 下载链接搜索引擎
  20. 由内而外全面造就自己(一)

热门文章

  1. eating的中文意思_eating是什么意思
  2. java hypot_Java StrictMath hypot()用法及代码示例
  3. 在Groovy中使用字符串
  4. 制作旅行英语图书封面
  5. 软件技术人员成长路线的设计
  6. 模型评估与改进(三)// 评估指标
  7. 热备用冷备用_个性化您的备用帐户的10种方法
  8. 不得不说的结构型模式-桥接模式
  9. Centos7 连接wifi (PEAP)
  10. C语言入门:计算总成绩和平均成绩