• 作者:老汪软件技巧
  • 发表时间:2024-10-16 07:02
  • 浏览量:

下面直接看 IP 地址:

哪一个是 IPv6?是不是马上猜出来了!IPv4 和 IPv6 作为互联网协议的两个版本,虽然看上去只是数字格式不同,但它们的作用和应用范围可大不相同。接下来,我将为你深入解析它们的区别,并且帮你彻底搞明白为什么我们还在 2024 年继续关心这两种协议。

IPv4 和 IPv6 的基础概念

IPv4 和 IPv6 是互联网协议(IP)寻址系统的两个版本。

IP 是一组在互联网上进行数据交换的通信规则。从本质上讲,互联网是由数十亿台设备组成的集合,这些设备通过网络技术相互共享数据。IP 使用编号系统为每台连接的设备提供唯一的识别号或地址。

命名方式 为什么 IPv4 的地址看起来不像 32 位?

IPv4 地址实际上是 32 位的,但它通常以 点分十进制表示法 显示。这种表示法将 32 位地址分成 4 个 8 位的组(称为 八位字节 或 octet),每组使用十进制数表示(0 到 255 之间),并用点 . 分隔开。

例如:

192.168.1.1

二进制: 11000000 10101000 00000001 0000000110.0.0.1

二进制: 00001010 00000000 00000000 00000001172.16.254.1

二进制: 10101100 00010000 11111110 00000001255.255.255.255

二进制: 11111111 11111111 11111111 11111111

每个地址结果都是 32 位长的二进制数。这就是 IPv4 地址的实际表示方式。

因此,使用 32 位二进制表示的 IPv4 地址,可以表示 2³² = 4,294,967,296 个唯一地址。

相较之下,IPv6 使用 128 位二进制,可以表示 2¹²⁸ ≈ 3.4 × 10³⁸ 个地址,为未来的互联网设备提供了几乎无限的地址空间。

IP 和 DNS:为什么我们通常不直接用 IP 地址?

因为 IP 地址 太难记,所以我们用 域名 来代替。比如,当你在浏览器中输入 这样的域名时,浏览器首先会把这个域名转换成 IP 地址,这个过程叫做 域名解析。而负责完成这个任务的系统就是 DNS(域名系统) 。它相当于互联网的“电话簿”,把域名翻译成我们需要的 IP 地址,只有这样,浏览器才能和服务器联系上。

在 Windows 和 Linux 系统中,当你输入域名时,系统首先会检查本地的 hosts 文件,看看有没有设置好的域名和 IP 地址的对应关系。在 macOS 上,你可以通过 sudo vim /etc/hosts 命令来查看或修改这个文件。如果在本地找到了匹配的 IP 地址,系统会直接使用它,跳过 DNS 的查询步骤。

如果本地找不到匹配的 IP 地址,电脑才会向 DNS 服务器 发送请求,DNS 服务器会帮助你查找域名对应的 IP 地址,并返回给浏览器。

IPv4 vs IPv6 全方位对比表

通过这张表格,你可以直观地看到 IPv4 和 IPv6 在地址空间、格式、性能以及安全性等方面的差异,帮助你更好地理解为什么我们需要向 IPv6 过渡。

IPv4 和 IPv6 的互通性 ️

虽然 IPv6 是未来的趋势,但 IPv4 仍然在大量的网络中被广泛使用。然而,需要注意的是:IPv4 和 IPv6 之间并不直接兼容,这意味着它们无法直接相互通信。这导致了一些常见的问题,尤其是在开发和部署时。

举个我亲身经历的例子:

实战案例:IPv4 和 IPv6 的双栈问题

有一次,我在本地运行两个项目,一个老项目(项目 A)和一个新项目(项目 B)。它们使用相同的端口 3000,但奇怪的是,它们始终无法互相通信。最终,我通过执行 lsof -i :3000 命令发现,使用3000端口的这个老项目A启动之后只启动了 IPv4,而项目 B 启动了 双堆栈(既支持 IPv4,也支持 IPv6)。

我在访问项目A时使用的方式也并非ip,而是localhost,按理应该自动完成localhost到项目 A 的ip映射。但问题出在哪呢?

经过一番排查,我发现根本原因是我最近在新项目 B 中升级了 Axios 版本,它在发送请求时默认会优先使用 IPv6。因此,即使项目 A 和 B 都支持 IPv4,新项目 B 中 Axios 请求时却选择了 IPv6,这导致我无法访问项目A中的接口。

Axios相关issue链接[The axios always try ipv6 first |/axios/axios…]

小结:IPv4 和 IPv6 选择的思考

在日常开发中,虽然 IPv4 仍然是大多数场景下的默认选择,但随着 IPv6 的普及,尤其是在物联网设备、5G 网络等新兴领域,理解并支持 IPv6 已成为不可忽视的趋势。未来的网络世界一定会更多依赖 IPv6,所以在开发项目时,我们应该时刻考虑到两者的兼容性。

如果你也遇到了类似的问题,不妨检查一下网络配置,确保设备和项目能在双栈环境下顺利工作。别让一个小小的 IP 版本问题拖慢了你的开发节奏!

希望这篇文章能够帮助你理解 IPv4 和 IPv6 的差异以及它们对开发的影响。如果你有类似的经验或者疑问,欢迎在评论区留言,一起讨论!

参考链接:


上一条查看详情 +Babel 快速上手
下一条 查看详情 +没有了