您当前的位置:首页 > 计算机 > 精彩资源

一文读懂:IPv4、IPv6、二进制、十六进制、127.0.0.1、::1环回地址各自的特点和区别,虽然基础但很重要

时间:02-02来源:作者:点击数:

前言

工作的时候,看到一个IPV4的IP地址(100.xxx.xxx.103),心里突然冒出一个念头:IPv4地址一共有多少个?

于是一系列的头脑风暴开启了~

本文可能有点枯燥,有兴趣和耐心的朋友,建议看完全文,相信对您还是很有帮助的。


一、IPv4和IPv6

  • IPv4
    IPv4 地址的总数是 4,294,967,296 个,也就是大约 42.9亿 个。
    • 计算方式:
      • 1.地址长度:IPv4 地址由 32 位二进制数组成。
      • 2.可能组合数:每一位二进制数可以是 0 或 1,因此总的可能组合数为 2 的 32 次方。
      • 3.计算公式:2³² = 4,294,967,296
    • 为什么我们常用“点分十进制”表示?
      为了便于人类阅读和记忆,我们将这 32 位二进制数分成 4 段,每段 8 位(称为一个“字节”或“八位组”),然后将每一段转换成十进制数,中间用点号分隔。
      • 每 8 位二进制数的范围是:00000000 到 11111111
      • 换算成十进制就是:0 到 255
      • 所以,我们常见的 IPv4 地址格式是:A.B.C.D(例如 192.168.1.1),其中每个部分 ABCD 的取值范围都是 0~255。
    • 重要补充
      虽然理论上有约 42.9 亿个地址,但并非所有地址都可用于公共互联网上的普通设备。其中一部分被保留用于特殊用途,主要包括:
      • 私有地址块:用于内部网络(如家庭、公司局域网),这些地址在互联网上不可路由。最常见的如:
        • 10.0.0.0 – 10.255.255.255
        • 172.16.0.0 – 172.31.255.255
        • 192.168.0.0 – 192.168.255.255
      • 环回地址:127.0.0.0 – 127.255.255.255(通常用 127.0.0.1 代表本机)。
      • 链路本地地址:169.254.0.0 – 169.254.255.255(当设备无法获取IP时自动分配)。
      • 多播地址:224.0.0.0 – 239.255.255.255
      • 保留地址:用于测试、文档等。
    因此,全球互联网上可分配的公有 IPv4 地址实际数量要少于 42.9 亿。
  • IPv6
    正是由于IPv4地址空间的严重不足,才推动了 IPv6的开发和部署。
    • IPv6的数量
      IPv6 地址总数是 2¹²⁸ 个。
      具体数值为:340,282,366,920,938,463,463,374,607,431,768,211,456
      (约 3.4 × 10³⁸ 个)
    • 这个数字有多大?
      • 与地球面积对比:这个数量足够为地球表面的每平方米分配大约 6.7 × 10¹⁷ 个地址(6700亿亿个)。
      • 与沙子对比:地球上所有海滩的沙子大约有 7.5 × 10¹⁸ 粒。IPv6 地址的数量是沙子总数的约 450 亿倍。
      • 与IPv4对比:IPv6 地址总数是 IPv4 地址总数(2³²)的 2⁹⁶ 倍,即79,228,162,514,264,337,593,543,950,336 倍(约7.9×10²⁸倍)。相当于为每一个IPv4地址,都分配了一个比现有整个IPv4互联网还要大数万亿倍的地址空间。
    • IPv6 地址表示法:
      由于128位的二进制数太长,IPv6采用十六进制冒号分隔法表示,分为8组,每组4个十六进制数。
      例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334,为了简化,可以省略前导零,并用 :: 表示连续的多组零(但只能使用一次)。上面的地址可以简写为:2001:db8:85a3::8a2e:370:7334
    • 重要概念:并非所有地址都可用
      和IPv4一样,IPv6庞大的地址空间中也有部分被保留或用于特殊用途,但可用地址的绝对数量仍然近乎无限。主要的特殊地址块包括:
      • ::1/128:环回地址(相当于IPv4的127.0.0.1)。
      • FE80::/10:链路本地地址(用于同一物理链路上的设备通信)。
      • FC00::/7:唯一本地地址(类似于IPv4的私有地址,但全球唯一)。
      • FF00::/8:多播地址。
      • 2001::/32:用于Teredo隧道。
      • 2002::/16:用于6to4隧道。
    • 设计目标:
      IPv6如此巨大的地址空间主要为了实现:
      • 一劳永逸地解决地址耗尽问题:让地球上每一个设备(包括物联网传感器、汽车、家电等)都能轻松获得一个或多个公网IP地址。
      • 简化网络架构:不再需要NAT(网络地址转换),实现端到端的直接通信。
      • 提高路由效率:通过层次化的地址分配,聚合路由表。

    总结:IPv6的地址数量是一个天文数字,其设计初衷就是为了提供一个“永远用不完”的地址池,为未来数十亿甚至上万亿台设备接入互联网奠定基础。


二、十六进制和二进制与十进制的对比

1.与二进制对比:解决“可读性”问题

计算机底层只认识二进制(0和1)。

一个32位的IPv4地址写成二进制是这样:11000000 10101000 00000001 00000001

问题:对人类来说,这串数字冗长、难以记忆、极易出错,无法快速理解和处理。

十六进制的解决方案:

  • 完美映射:1位十六进制数(0-F)正好对应4位二进制数(0000-1111)。这是一个2⁴=16的完美匹配。
  • 高度压缩:上面的二进制地址可以按4位一组轻松转换:
    1100 0000 -> C, 1010 1000 -> A, 0000 0001 -> 1, 0000 0001 -> 1
    于是得到 C0 A8 01 01(通常写作0xC0A80101),长度和可读性得到巨大提升。
  • 快速转换:程序员和工程师可以在脑中或纸笔间快速进行二/十六进制转换,这在调试硬件、分析网络数据包、查看内存内容时是核心技能。
2. 与十进制对比:解决“对齐”问题

十进制是我们最熟悉的进制。将上面的IPv4地址C0 A8 01 01转换成十进制是3232235777。

问题

  • 与机器字长脱节:这个十进制数字3232235777完全掩盖了其内部的字节(8位)结构。你看不出它由哪4个字节组成。
  • 转换困难:将3232235777心算或笔算回二进制极其困难,更无法直观看出每个比特位的状态(这对于标志位、掩码操作至关重要)。
  • 不对齐:计算机的数据单位是位、字节(8位)、字(16/32/64位)。十进制与8(2³)、16(2⁴)、32(2⁵)等计算机核心数字没有天然关系,导致表示和思考时无法对齐。

十六进制的解决方案:

  • 自然对齐:2位十六进制数正好代表1个字节(因为0xFF = 255)。
  • 结构清晰:在0xC0A80101中,你可以立刻看出这是4个字节:C0, A8, 01, 01。在IPv6地址2001:0db8::中,每组4位十六进制数正好是一个16位的块。
  • 直接反映位状态:如果你想看第5位是0还是1,可以从对应的十六进制位轻松推导出来。
3. 与其他“计算机友好”进制对比(如八进制)

八进制(0-7)也曾被广泛使用,因为1位八进制对应3位二进制。在字长为12、24、36位的老式系统(如PDP系列)上很流行。

问题

  • 与主流字长不匹配:现代计算机体系结构以字节(8位)为基础单位。8不是3的整数倍。一个字节(8位)用八进制表示是000到377,需要3位数字,既不整齐也不方便。
  • 被十六进制取代:十六进制与字节的匹配度(1:2)远高于八进制,能更优雅地表示8位、16位、32位、64位数据。因此,十六进制在通用计算领域几乎完全取代了八进制。
4.总结:十六进制的“先进性”体现在哪里?
特性 十六进制 二进制 十进制
机器友好度 极高,与比特位自然映射 完美(机器原生) 极低
人类可读性 优秀,短小精悍 极差,冗长 优秀,最熟悉
与字节对齐 完美对齐(2位十六进制 = 1字节) 对齐但冗长 完全不对齐
转换难度 与二进制互相转换极快 自身是源头 与二进制转换非常困难
反映数据结构 清晰,能看出字节/字边界 清晰但难以辨认 完全掩盖

所以,十六进制的“先进”并非数学理论的先进,而是工程实践上的卓越设计。它精准地找到了一个平衡点:

  • 基数16是2的整数次幂(2⁴),与二进制无缝对接。
  • 基数16的大小恰到好处:它生成的数字串足够短(比二进制短75%),同时其字符集(0-9, A-F)大小适中,人类经过简单学习即可掌握。

回到IPv6例子:

  • IPv6地址有128位。写成二进制是不可想象的。
  • 写成十进制会是长达39位的天文数字,毫无用处。
  • 写成十六进制(如 2001:0db8:85a3::8a2e:0370:7334),虽然长,但结构清晰(8组,每组16位),易于缩写(用::代替连续零),便于网络工程师和系统管理员识别、配置和排错。这正是十六进制为解决实际问题所发挥的关键作用

最终结论:十六进制是计算机领域为解决二进制可读性差十进制与机器结构脱节这一核心矛盾而诞生的、一种近乎完美的人机交互表示法。它的先进性在于其无与伦比的实用性和效率


三、IPV6地址的缩写语法::的用法与注意事项

1. 原来的完整写法

比如这个IPv6地址 2001:0db8:85a3::8a2e:0370:7334 的完整、未压缩的写法是:

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

或者(如果省略每组的前导零):2001:db8:85a3:0:0:8a2e:370:7334

2. 为什么需要 :: 这个压缩规则?

主要有三个重要原因:

原因一:IPv6地址中零块非常常见

IPv6地址设计是层次化和结构化的,很多情况下大段的地址位会设置为零:

  • 子网划分:一个组织可能只使用地址前缀,后面很多位是零。
  • 地址分配:ISP分配地址块时,用户可能只使用其中的一小部分。
  • 特殊地址:如未指定地址 :: 或回环地址 ::1,几乎全是零。

例如:2001:db8:1234:: 可能表示整个 2001:db8:1234:0000::/64 子网。

原因二:解决冗长性问题

让我们看一些极端例子:

地址类型 完整形式 压缩形式 压缩率
未指定地址 0000:0000:0000:0000:0000:0000:0000:0000 :: 减少 30 个字符
回环地址 0000:0000:0000:0000:0000:0000:0000:0001 ::1 减少 29 个字符
典型地址 2001:0db8:0000:0000:0000:0000:1428:57ab 2001:db8::1428:57ab 减少 20 个字符

想象一下,如果网络管理员每天都要输入或阅读几十个像第一个例子那样的地址,那将是多么可怕的体验!

原因三:提高可读性和减少错误

比较以下两种写法:

  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334(完整)
  • 2001:0db8:85a3::8a2e:0370:7334(压缩)

压缩形式:

  • 一眼就能看出结构:前缀是 2001:0db8:85a3,后缀是 8a2e:0370:7334,中间是连续的零。
  • 输入错误率更低:需要输入的字符数从 39 个减少到 28 个(减少了28%)。
  • 记忆更容易:大脑更容易记住 2001:db8:85a3::8a2e:370:7334 这样的模式。
3. :: 压缩规则详解

IPv6地址压缩规则有两层:

第一层:省略每组的前导零(始终可用)

每个16位块中,前导的零可以省略(但至少保留一位数字)。

  • 0db8 → db8
  • 0370 → 370
  • 0000 → 0
  • 0001 → 1

第二层:用 :: 压缩连续的零块(只能用一次)

规则:可以用双冒号 :: 替换一个或多个连续的全零块(即 0000 或 0)。

  • 为什么只能使用一次? 如果允许多次使用,会产生歧义!
    歧义示例:假设允许两次 ::
    • 2001::db8::1 可能对应:
      • 2001:0000:0000:db8:0000:0000:0000:0001
      • 2001:0000:0000:0000:db8:0000:0000:0001
      • 2001:0000:db8:0000:0000:0000:0000:0001
      • 等等… 无法确定!

    唯一性规则确保:: 在任何地址中只能出现一次,这样解析时就能唯一确定零块的位置和数量。

4. 实际应用示例

让我们看更多例子来理解这个规则:

压缩形式 完整形式(省略前导零) 说明
::1 0000:0000:0000:0000:0000:0000:0000:0001 回环地址
2001:db8:: 2001:0db8:0000:0000:0000:0000:0000:0000 一个/32网络前缀
fe80::1 fe80:0000:0000:0000:0000:0000:0000:0001 链路本地地址
2001:db8::1234:5678 2001:0db8:0000:0000:0000:0000:1234:5678 典型主机地址
2001:db8:0:0:1::1 2001:0db8:0000:0000:0001:0000:0000:0001 注意:这里不能再用 ::,因为已经有 0:0:1
5. 如何正确展开 ::

当看到 :: 时,按以下步骤展开:

  1. 将地址按 :: 拆分为前后两部分
  2. 分别计算前后部分的块数(每部分可能为空)
  3. 中间的零块数 = 8 - (前部分块数 + 后部分块数)
  4. 插入相应数量的 0 或 0000

咱们拿这个例子来分析:2001:0db8:85a3::8a2e:0370:7334

  • 前部分:2001:0db8:85a3 → 3个块
  • 后部分:8a2e:0370:7334 → 3个块
  • 中间零块数 = 8 - (3 + 3) = 2
  • 所以展开为:2001:0db8:85a3:0000:0000:8a2e:0370:7334

总结

:: 压缩规则是IPv6地址表示法中的一项关键设计智慧

  • 解决核心痛点:IPv6地址太长,零块太多
  • 提供优雅方案:用简洁的 :: 替换连续零块
  • 保持无歧义:通过"只能用一次"的规则确保唯一性
  • 实际价值:让IPv6地址在实际部署中变得实用、可管理、易用

这就像在编程语言中使用 ... 表示可变参数,或在数学中用  表示求和一样,是一种抽象和简化的表示法,极大地提升了效率和可读性。没有这个规则,IPv6的采用会更加困难!


四、::1回环地址和127.0.0.1、localhost有什么区别?

这个问题触及了网络通信中最基础又最核心的概念之一。

::1127.0.0.1 和 localhost 本质上是同一个东西的不同表现形式,但它们所在的“层次”和具体含义有微妙区别

我们可以用一个精妙的比喻来理解:

想象你要给自己寄一封信

  • localhost 就像是信封上写的收件人 “我自己”。
  • 127.0.0.1 和 ::1 就像是邮政系统为 “我自己” 这个收件人指定的专属内部邮政编码,前者是旧的4位邮编(IPv4),后者是新的8位邮编(IPv6)。
  • 无论你用哪个邮编,或直接写“我自己”,这封信都永远不会离开你的房子(本机),而是直接送到你自己的书房(本地服务)。

下面我们来详细拆解它们的区别与联系:

1. 127.0.0.1(IPv4回环地址)
  • 是什么:IPv4协议栈中整个A类地址块 127.0.0.0/8(即 127.0.0.1 到 127.255.255.254)都被预留用于回环通信。最常用、最标准化的是 127.0.0.1
  • 作用:发送到这个地址的数据包不会离开网卡进入物理网络,而是由操作系统网络协议栈立即转回给本机
  • 特点:它是一个具体的IP地址
2. ::1(IPv6回环地址)
  • 是什么:IPv6协议栈中单个地址 ::1/128(即 0000:0000:0000:0000:0000:0000:0000:0001)被预留用于回环通信。
  • 作用:与 127.0.0.1 完全相同,但走的是IPv6协议栈。数据包在IPv6层被环回。
  • 特点:它是一个具体的IP地址,是IPv6时代的 127.0.0.1
3. localhost
  • 是什么:这是一个主机名,一个域名。它不是IP地址。
  • 作用:通过操作系统或DNS的名称解析,它会被映射到回环IP地址。
  • 特点:它是一个名称,解析结果取决于系统配置。

核心关系与区别对比表

特性 localhost 127.0.0.1 ::1
本质 主机名 / 域名 IPv4地址 IPv6地址
所属协议族 名称,与协议无关 IPv4 IPv6
在系统中的定义位置 操作系统的 hosts 文件 IPv4协议标准 (RFC 1122) IPv6协议标准 (RFC 4291)
典型解析关系 通过 hosts 文件映射到 127.0.0.1 和/或 ::1 无需解析,本身就是地址 无需解析,本身就是地址
使用场景 在配置、代码中作为主机名使用,可读性更好 直接指定使用IPv4回环 直接指定使用IPv6回环
4.总结与最佳实践
概念 一句话总结
localhost 方便人类的别名,一个指向“本机”的域名,其背后可能映射到IPv4或IPv6地址。
127.0.0.1 IPv4时代的“本机”,一个具体的、不会出网的IP地址。
::1 IPv6时代的“本机”,功能与 127.0.0.1 完全等价,属于新一代协议。

最佳实践建议:

  1. 开发时:在配置或代码中,优先使用 localhost,因为它更具可读性且协议中立。
  2. 排错时:如果 localhost 访问失败,务必分别尝试 127.0.0.1 和 [::1],以确定问题是出在服务监听配置(只监听了其中一个协议栈),还是名称解析上。
  3. 服务配置时:为确保兼容性,最好让服务同时监听IPv4和IPv6的回环地址(或直接监听所有地址)。

所以,它们三者是 “一体三面” 的关系:

  • 从人类角度,我们喜欢叫它 localhost。
  • 从IPv4网络协议角度,它的地址是 127.0.0.1。
  • 从IPv6网络协议角度,它的地址是 ::1。

最终,它们都指向同一个永恒的目的地:你自己的计算机

你,学会了吗?

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐