云计算百科
云计算领域专业知识百科平台

网络原理(21):NAT机制 & IPv6简介

网络原理(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,有这三种:

  • 10.*
  • 172.16.* ~ 172.31.*
  • 192.168.*
  • ’ * ’ 表示任意数字。 只要你的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机制的背景下,网络通信是如何进行的? 我们分为以下五种情况:

  • 同一个局域网下,设备A 访问 设备B
  • 外网设备A 访问 外网设备B
  • 不同的局域网,设备A 访问 设备B
  • 局域网设备A 访问 外网设备B
  • 外网设备A 访问 局域网设备 B
  • 接下来,我们对这五种情况,分别进行讨论:

    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:192.168.100.96
  • 目的IP:200.1.1.1
  • 源端口号:12345
  • 目的端口号:9090
  • 需要注意的是:源端口号,是操作系统自动分配的一个空闲端口号。

    这四个信息,是 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:200.1.1
  • 目的IP:100.1.1.1
  • 源端口号:9090
  • 目的端口号:12345
  • 当我们发送 IP数据包,**路由器触发 NAT机制(网络地址映射)**的时候,自身会维护一个 表,这个表,就记录了替换之前和之后的映射关系: 在这里插入图片描述

    B站 返回的响应数据包,到达 外网IP的运营商服务器之后,通过 B站 返回的响应数据包中的 目的IP,目的端口号,进行查表,就可以知道,我这个 响应数据包,应该返回给谁了。

    以我的设备发送的 IP数据包为例,查表之后,就知道了 IP数据包替换前的信息: 源IP:192.195.100.96 源端口号:12345

    此时,就可以将两个信息,替换掉响应数据包的 目的IP和目的端口号:

  • 源IP:200.1.1
  • 目的IP:192.195.100.96
  • 源端口号:9090
  • 目的端口号:12345
  • 在这里插入图片描述 这样,就可以将 响应数据包,精准返回给不同的局域网设备了。

    空闲端口重复:

    此时,还有一个问题: 如果两台电脑刚开始分配的空闲端口是一样的怎么办? 答:NAT 设备,进行替换的时候,端口号是可以随意进行修改的

    在这里插入图片描述 比如这个,12345端口号,是重复的,会修改为 12346。

    当B站服务器返回的响应数据包中: 目的端口号为:12346 目的IP:1001.1.1 会根据这两个信息进行查表:根据 100.1.1.1和12346 找到 192.195.100.98和12345 。

    匹配信息之后,就可以将两个信息,替换掉响应数据包的 目的IP和目的端口号:

  • 源IP:200.1.1
  • 目的IP:192.195.100.98
  • 源端口号:9090
  • 目的端口号:12345
  • 根据目的IP,返回给当前局域网中, IP地址为 192.195.100.98 的设备。

    而且,本身这个事件,是一个非常很小概率的事件。

    总结

    我们总结一下思路:

  • 局域网设备发送 IP数据包
  • 具备 NAT机制的运营商路由器,修改数据包中的源IP 为 外网IP(路由器自身的IP)
  • 服务器接收到 IP数据包,返回响应
  • 响应到达运营商路由器,查表,替换响应数据包中的 目的IP和目的端口号
  • 路由器返回响应数据到指定设备
  • 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. 总结:

    这篇博客,我们主要介绍了 :

  • NAT机制,是如何工作的
  • NAT机制 的原理。
  • IPv6 的简单介绍
  • 这些内容,虽然面试中,不会考,但是,这些知识,和我们的网络生活,是息息相关的。 把这些知识,当作常识一样,去了解一下,也是很有必要的。

    以前,我们只能通过书本去了解网络知识,现在,视频成为了最主流的信息传播方式,我们也要充分利用时代赐予的条件,多了解更多的知识。

    最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 网络原理(21):NAT机制 & IPv6简介
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!