2024年, 还搞不清IPv4 和 IPv6?看这一篇就够了!🎯

下面直接看 IP 地址:

  • 192.168.1.1
  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334

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

IPv4 和 IPv6 的基础概念 📚

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

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

  • IPv4 使用 32 位地址格式,可容纳超过 40 亿个地址空间。然而,随着互联网和物联网(IoT)系统的扩展,IPv4 的寻址范围已被证明是不够的。
  • IPv6 则逐步取代 IPv4,采用 128 位地址格式 ,可以容纳超过 3.4 × 10³⁸ 个地址, 约等于340 溝(gǒu)。

命名方式 📛

  • IPv4 中,地址名称由 四个十进制数字 (介于 0-255 之间)组成,每个数字代表八位,用 三个句号 分隔:
    例子197.0.0.1

  • IPv6 中,地址名称由 八个十六进制数字 组成,这些数字由 数字(0-9)和字母(A-F) 组成,每个数字代表四位,用 冒号 分隔:
    例子2001:0db8:85a3:0000:0000:8a2e:0370:7334

    而且 IPv6 允许省略前导零,并使用双冒号(::)表示一串连续的零,使地址更易读。
    压缩后2001:0db8:85a3::8a2e:0370:7334

为什么 IPv4 的地址看起来不像 32 位?🤔

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

例如:

  1. 192.168.1.1
    二进制 : 11000000 10101000 00000001 00000001
  2. 10.0.0.1
    二进制 : 00001010 00000000 00000000 00000001
  3. 172.16.254.1
    二进制 : 10101100 00010000 11111110 00000001
  4. 255.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 地址 太难记,所以我们用 域名 来代替。比如,当你在浏览器中输入 xx.com 这样的域名时,浏览器首先会把这个域名转换成 IP 地址,这个过程叫做 域名解析 。而负责完成这个任务的系统就是 DNS(域名系统) 。它相当于互联网的"电话簿",把域名翻译成我们需要的 IP 地址,只有这样,浏览器才能和服务器联系上。

WindowsLinux 系统中,当你输入域名时,系统首先会检查本地的 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 |github.com/axios/axios...]

小结:IPv4 和 IPv6 选择的思考 🤔

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

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

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


参考链接:

相关推荐
沃野_juededa37 分钟前
http 从请求到响应的过程中发生了什么
网络·网络协议·http
蝌蚪代理ip2 小时前
爬虫ip与反爬虫的“猫鼠游戏”
网络·爬虫·网络协议·ip
Tony聊跨境4 小时前
如何在社媒平台上使用代理IP来保护帐号安全
网络·网络协议·ip
Beginner_bml6 小时前
基于C语言实现的TCP客户端
c语言·开发语言·网络协议
hgdlip6 小时前
网络设置:静态IP与动态IP,何去何从?
网络·网络协议·tcp/ip
0_1_bits7 小时前
【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程
网络协议·http·缓存
桃酥4039 小时前
day04|计算机网络重难点之HTTP/1.0和HTTP/1.1的区别、HTTP/2.0与HTTP/1.1的区别、介绍HTTP/3.0
网络协议·计算机网络·http
长安初雪10 小时前
浅析HTTP协议
网络·网络协议·http
掌控安全EDU10 小时前
安全研究 | 不同编程语言中 IP 地址分类的不一致性
网络协议·tcp/ip·安全·xss