网络原理(21):NAT机制 & IPv6简介
文章目录
- 网络原理(21):NAT机制 & IPv6简介
- 观前提醒:
- 1. NAT机制简介
-
- IP分类
- 外网 & 内网 要求
- NAT机制的原理
- 2. NAT机制的工作方式
-
- 2.1 同一个局域网下,设备A 访问 设备B
- 2.2 外网设备A 访问 外网设备B
- 2.3 不同的局域网,设备A 访问 设备B(不允许)
- 2.4 局域网设备A 访问 外网设备B
-
- 单一设备发送 IP数据包
- 多台设备发送 IP数据包
- 区分不同设备
- 空闲端口重复:
- 总结
- 2.5 外网设备A 访问 局域网设备 B(不允许)
- 总结
- 2. IPv6 简介
- 3. 总结:
观前提醒:
在这篇博客当中 Java网络初识(3):协议分层(TCP/IP五层模型),我讲解了 TCP/IP五层模型,认识了网络的协议栈。 如果你没有看过,或者对 TCP/IP五层模型 没有概念的,推荐看完这篇博客再回来看这篇。
TCP/IP五层模型分为这五个层:
这五层,每个层,都有自己的作用,有关键的协议。 其实,学习网络的过程中,绝大部分时间,都是在研究协议,这些协议的理解,是我们以后写网络代码的基础。
下述,我会讲到 数据包,数据报,这两个东西,在这篇博客当中,你可以理解为,是一个东西,至于为什么,你可以看我这篇博客: Java网络初识(4):网络数据通信的基本流程 – 封装 1.4 标题中,有个补充: 关于网络传输的基本数据单位内容的介绍。
这篇博客,是从这篇博客中分离出来的: 网络原理(19):网络层 – IP协议的报文格式 & IP协议的主要工作 如果你是第一次点击进来的,推荐你先看完这篇博客。
我们这篇博客,会介绍 NAT机制 的工作原理,以及解决 IP数量问题 的终极方案,IPv6 协议。
1. NAT机制简介
IP分类
NAT机制,会把所有的 IP 分为两个大类:
下面我介绍的时候,统一为:外网(公网),内网(私网)
那么,什么样的IP算作外网?什么样的IP算作内网? 规则是这样的: 内网IP,有这三种:
’ * ’ 表示任意数字。 只要你的IP地址,前缀是这些的,都算作是 内网IP。
剩下的 IP,就都是 外网IP 了。 例如:
我的这个 IP地址,前缀是 192.168 ,我的这个IP地址就是一个 内网IP。
以上,我们可以从键盘输入 Win+R,输入 cmd。 我们可以通过这么一个命令:ipconfig 就可以查看你当前电脑的IP信息了。
外网 & 内网 要求
NAT机制中,对公网 和 私网 的要求是这样的: 外网IP,必须是唯一的。 内网IP,在 不同的局域网中,可以重复
比如我这台主机上的 IP地址,是 192.168.195.1,是在我们学校的局域网上的(假设为 局域网1)。 如果你是处于另外一个局域网中(假设为局域网2),局域网2,也会有一个 IP地址 为 192.168.195.1 的上网设备。 
NAT机制的原理
NAT机制,就可以用一个 外网IP 对应到一系列的内网设备的IP。
一个设备,有一个独立的局域网 IP。 这个独立的局域网IP,在 不同的局域网中,可以重复。
多个设备,共用一个 外网IP。 这个外网IP,一个局域网中,只有一个,不同的局域网,都是不同的 外网IP,不可以重复。
一个 外网IP 对应到一系列的内网设备的IP,这就是为什么,NAT机制,能够解决 IP地址 数量不够的原因。
那么,我们上面可以看到我主机上的 内网IP,如何查看 外网IP? 我们可以直接浏览器输入:https://ip.cn/
这张图片中的 14.23.253.228,就是我这个局域网(学校的校园网)的外网IP。 注意:这个 外网IP,不是我一个人用,而是我这个学校的学生都在用这个 IP。 因为,校园网,就是一个巨大的 局域网。
2. NAT机制的工作方式
那么,在NAT机制的背景下,网络通信是如何进行的? 我们分为以下五种情况:
接下来,我们对这五种情况,分别进行讨论:
2.1 同一个局域网下,设备A 访问 设备B
在同一个局域网下,IP本身不允许重复,自然不会收到任何影响,NAT是不起作用的。
同一个局域网下,设备A 访问 设备B,两台网络设备是可以进行网络通信的。
2.2 外网设备A 访问 外网设备B
外网设备A 和 外网设备B,两个设备处于不同的局域网中。 不同的局域网中,外网IP,是不同的,通信不会收到影响,NAT不起作用。
外网设备A 访问 外网设备B,不同外网的设备是可以进行网络通信的。
2.3 不同的局域网,设备A 访问 设备B(不允许)
不同的局域网,设备A 访问 设备B,是不允许(❌)的!!! NAT机制,禁止这样的访问方式。
原因: NAT机制,可以允许不同的局域网中,重复使用一个 内网IP。
不同的局域网,设备A 访问 设备B。 假如:设备A的IP为:192.168.21.3 设备B的IP为:192.168.22.31 设备A 访问 设备B,本质上,是 192.168.21.3(设备A的IP) 访问 192.168.22.31(设备B的IP)
但是,192.168.22.31(设备B的IP),它一定是 设备B的IP 吗? 设备B,处于局域网1当中。 局域网2当中,设备C的IP地址,可不可以是 192.168.22.31? 局域网3当中,设备D的IP地址,可不可以是 192.168.22.31? 答:当然可以,NAT机制,可以允许不同的局域网中,重复使用一个 内网IP。
所以,不同的局域网,192.168.21.3(设备A的IP) 访问 192.168.22.31,192.168.22.31所指向的设备,是有多个不同的设备的,这些设备处于不同局域网中,拥有相同的 IP地址(192.168.22.31)。 此时,设备A 就会懵了,我访问 IP地址为 192.168.22.31 的设备,到底应该访问哪个设备?
所以,不同的局域网,设备A 访问 设备B,会造成混乱,是不允许(❌)的!!!
虽然这个限制,看起来挺不好的,但是,他是利大于弊的。 起始是对你的电脑进行了保护,黑客无法根据你当前的 内网IP,精准访问到你的电脑。
生活中的例子: 如果你电脑的IP,是在 外网IP 上的。 相当于你家的房门开在大街上。
如果你电脑的IP,是在 内网IP 上的。 相当于你的房门外,还有个小区的院子,还有个楼下的门禁。 小区的门禁,楼下的门禁,就已经把很多不速之客挡住了。
2.4 局域网设备A 访问 外网设备B
这种网络通信方式,就是 NAT机制,最核心的工作方式。
NAT机制,叫做:网络地址映射 它的这个机制,就体现在这种网络通信方式。
单一设备发送 IP数据包
我们用画图,来给大家解释是怎么回事: 
上面这张图片,是我的设备,要访问 B站 的服务器的流程图。
我们说,一次网络通信,要包含五元组:源IP,目的IP,源端口号,目的端口号,协议类型。
假如,我现在要发送一个 IP数据包 给B站的服务器。 IP数据包,就会包含这四个关键信息:
需要注意的是:源端口号,是操作系统自动分配的一个空闲端口号。
这四个信息,是 IP报头,TCP报头中携带的。 TCP报头,包含在 TCP数据包中,TCP数据包,就是 IP数据包的载荷。 IP数据包 = IP报头 + 载荷(TCP数据包) 
我发送之后,这个IP数据包,就会路过 具备 NAT机制 的运营商路由器,就会触发 NAT机制(网络地址映射)。
之后,运营商的路由器,就会把这个 IP数据包,发送给 B站 的服务器。
以上,就是我们的一个 网络地址映射 的一个工作过程。
多台设备发送 IP数据包
真实网络世界中,并不只有一台设备,访问 B站 的服务器。
如果是多台设备呢?
上述这个过程,是局域网中的若干个设备,共用一个 外网IP 现实中,一个外网IP,背后可能代表着几千个,上万个局域网设备。
这里有几个问题:
IP数据包,会不会经过多个 外网IP? 答:会,但不是所有的外网IP设备,就一定会触发 NAT,得支持这个 NAT机制 的设备,才会触发 NAT。
此时,有多个数据包到达 B站 的服务器,返回的响应数据,怎么精准返回给不同的局域网设备? 答:通过 端口号,进行区分。
区分不同设备
以我的设备发送的 IP数据包为例: B站,返回的 响应数据包,也是会包含四个关键信息的:
当我们发送 IP数据包,**路由器触发 NAT机制(网络地址映射)**的时候,自身会维护一个 表,这个表,就记录了替换之前和之后的映射关系: 
B站 返回的响应数据包,到达 外网IP的运营商服务器之后,通过 B站 返回的响应数据包中的 目的IP,目的端口号,进行查表,就可以知道,我这个 响应数据包,应该返回给谁了。
以我的设备发送的 IP数据包为例,查表之后,就知道了 IP数据包替换前的信息: 源IP:192.195.100.96 源端口号:12345
此时,就可以将两个信息,替换掉响应数据包的 目的IP和目的端口号:
这样,就可以将 响应数据包,精准返回给不同的局域网设备了。
空闲端口重复:
此时,还有一个问题: 如果两台电脑刚开始分配的空闲端口是一样的怎么办? 答:NAT 设备,进行替换的时候,端口号是可以随意进行修改的
比如这个,12345端口号,是重复的,会修改为 12346。
当B站服务器返回的响应数据包中: 目的端口号为:12346 目的IP:1001.1.1 会根据这两个信息进行查表:根据 100.1.1.1和12346 找到 192.195.100.98和12345 。
匹配信息之后,就可以将两个信息,替换掉响应数据包的 目的IP和目的端口号:
根据目的IP,返回给当前局域网中, IP地址为 192.195.100.98 的设备。
而且,本身这个事件,是一个非常很小概率的事件。
总结
我们总结一下思路:
2.5 外网设备A 访问 局域网设备 B(不允许)
根据 2.4 标题中的介绍,我们就可以知道,这样的通信方式,是不允许的。
原因就是:客户端不主动发送请求,服务器是无法根据请求,做出响应的。
举一个生活中的例子:不请自来 你家里因为喜事,摆酒席,但是,有一个人,你没有邀请,他却直接进来就坐下了,你也不认识他,他准备蹭吃蹭喝,你是拒绝,还是同意? 答:那肯定是拒绝啦。 我都没邀请你,甚至不认识你,怎么可能让你进来吃饭呢?
当然,这种通信方式,也不是真的完全不能够通信。 可以利用一些手段,例如:内网穿透,VPN(虚拟的局域网)
至于怎么实现,我这里就不讲了,有兴趣的,可以去 B站 搜索相关视频进行观看。
总结
上面介绍的,虽然面试,一般是不考的,但是,这个过程,是作为一个程序员应该知道的常识。
也许,你现在学习这个,不一定会用得到,但是,当你在搭建环境,或者某些测试会用的到。
2. IPv6 简介
IPv4,是使用 4 个字节作为 IP 地址。 IPv6,是使用 16 个字节作为 IP地址。
IPv4,最多能表示的 IP数量 为:2 (4*8) – 1 = 2 32 – 1,也就是 42亿9千多万。 一个字节,8个 bit位,4个字节,有 32个bit位。
IPv6,使用 16个字节,是 4个字节的4倍,最多能表示的IP数量是 42亿9千多万 * 4? 答:不是,它不是这么算的
IPv6,最多能表示的 IP数量 为:2(16*8) – 1 = 2128 – 1,这个算出来的结果,非常非常大。 大到什么情况? 哪怕把整个地球,每一粒沙子,都分配一个 IPv6 地址,都是绰绰有余的。
虽然,它能够表示的 IP数量 这么多,但是,目前的现状是:全世界,IPv6 的普及程度,非常非常低。 中国,是 IPv6 普及程度最高的国家,没有之一。
那有人就会问了,为什么普及率这么低? 答:IPv4 和 IPv6 ,是相互不兼容的。 如果要升级 IPv6,就需要更换 路由器,更换路由器,就得花钱。
并且,升级 IPv6,不能提高上网速度,不能提升任何的上网体验,花了这么多钱,却不能提升任何的上网体验,属于是费力不讨好啊。
那为什么中国的 IPv6 的普及程度还这么高,大力发展 IPv6? 答:这是国家战略,是为了保证我国网络安全,网络自主权。
我们现在的大多数应用,都是支持 IPv6 通信的。 例如:手机淘宝,京东APP,支付宝APP…… 下面都是有行字,说:XXX支持 IPv6 网络 
至于为什么,更详细的,你去看看这个视频: 电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅 这个视频,强烈建议大家观看。
3. 总结:
这篇博客,我们主要介绍了 :
这些内容,虽然面试中,不会考,但是,这些知识,和我们的网络生活,是息息相关的。 把这些知识,当作常识一样,去了解一下,也是很有必要的。
以前,我们只能通过书本去了解网络知识,现在,视频成为了最主流的信息传播方式,我们也要充分利用时代赐予的条件,多了解更多的知识。
最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!
网硕互联帮助中心





评论前必须登录!
注册