🕸️ 第三章 为Web提供支持的技术
📄 一句话概括

两个地址都在【指路】,但一个管从起点到终点、一个管从这一跳到下一跳;理解这个分工,才明白为什么换一次网络,IP 会变、MAC 却不变。

📝 本节和前面几节的关系

3-2 讲了分层的道理,这一节把镜头对准最容易被念混的两个地址。它们是两层的代表:IP 属于网络层,MAC 属于链路层;一个负责跨网络,一个负责本地。

一、两套地址,两种活

把送快递这件事拆开看就很容易懂:IP 地址像收件地址,它决定包裹要送到哪座城市、哪条街;MAC 地址像收件人,它决定包裹到了门口以后交到谁手上。

所以 IP 是【从起点到终点】的,一路上不变;MAC 是【从这一跳到下一跳】的,每经过一台路由器就换一次。这也是最容易记错的一点——很多人以为 MAC 才是【全程不变的那个】,把它当成了终点标识。

另一个关键差别是分配方式:IP 由运营商或 DHCP 服务器发,换一个网络就换一个地址;MAC 由网卡厂商在生产线上写死,理论上跟着网卡一辈子。

二、算一算两套地址的空间

地址的位数决定了能编多少个号,这也是 IPv4 必须让位给 IPv6 的根本原因。

print("IPv4 位数 32,能编", format(2 ** 32, ","), "个地址")
print("IPv6 位数 128,是 IPv4 的 %.1f 乘 10 的 28 次方倍" % (2.0 ** 96 / 1e28))
print("按全球 82 亿人算,人均 %.1f 乘 10 的 28 次方个" % (2 ** 128 / 8.2e9 / 1e28))
print("MAC 位数 48,其中厂商编号只占 24 位:", format(2 ** 24, ","), "个厂商")
print("IPv6 用户占比 46.2%,而发布 IPv6 地址的域名只有 20.4%")

实跑输出:

--------------------------------------------------------------------
D3  IP 地址与 MAC 地址:一个找网络,一个找网卡
--------------------------------------------------------------------

  两个地址长得完全不同,分工也完全不同。先看各自的容量:

  地址          位数        能编多少个              换算
  ------------------------------------------------------------------------------------------
  IPv4          32 位       2 的 32 次方            约 42.9 亿个
  IPv6          128 位      2 的 128 次方           约 3.4 乘 10 的 38 次方个
  MAC           48 位       2 的 48 次方            约 281 万亿个
  MAC 厂商号    24 位       2 的 24 次方            16,777,216 个厂商编号

  IPv4 一共能编出 4,294,967,296 个地址
  IPv6 是 IPv4 的 2 的 96 次方倍,也就是 7.9 乘 10 的 28 次方倍
  按全球 82 亿人算,人均能分到 4.1 乘 10 的 28 次方个 IPv6 地址

  一句话:IPv4 是【全球 43 亿个门牌,得反复借】,IPv6 是【够给每一粒沙子编号】。

  比什么      IP 地址                           MAC 地址
  ----------------------------------------------------------------------------------
  在哪一层    网络层(第三层)                  数据链路层(第二层)
  管多大范围  跨网络、一直到地球另一边          只在同一个局域网内部
  会不会变    会变——换网络就换地址              基本不变——出厂就烧在网卡里
  谁分配      运营商或 DHCP 服务器发            网卡厂商在生产线上写死
  长什么样    192.168.1.10 这种点分十进制       00:1A:2B:3C:4D:5E 这种十六进制
  怎么用      负责把包裹送到目的地网络          负责在局域网里交给下一台设备

  2026 年这两套地址同时在跑,但两边的进度差得很远:
    · Google 的统计里,46.2% 的用户已经走 IPv6
    · 可只有 20.4% 的域名发布了 IPv6 地址
    · 再剥掉 CDN 挡在前面的那层,站点自己支持 IPv6 的只有 11.1%
  也就是说:能走新路的用户快过半了,愿意开新路的网站才两成。

IPv4 是 32 位,能编出 42.9 亿个地址——这个数字在 1980 年代看起来很大,在手机比人多的今天显然不够用。所以有了 128 位的 IPv6,它的地址数量多到【可以给地球上每一粒沙子编号】。

MAC 是 48 位,前 24 位是厂商编号,后 24 位由厂商自己排。256 个厂商位意味着一个厂商最多能造 1677 万块网卡——这个上限当年看也很宽裕。

三、动手 Demo:地址账与对照表

上面那段就是这一节的算账过程,跑出来的对照表把两者的差别排成了一行一行。

看【会不会变】那一行:IP 会变,MAC 基本不变。所以做用户识别时,拿 IP 当身份证是极不可靠的——在家、在公司、在地铁上,同一个人的 IP 可以完全不一样。

四、2026 年的进度:新地址已经快过半

IPv6 喊了二十年,现在终于到了一个有意义的节点:Google 的统计里,46.2% 的用户已经走 IPv6,而且 2026 年 3 月还首次越过了 50%。

但另一侧的数字冷得多:只有 20.4% 的域名发布了 IPv6 地址;如果再剥掉 CDN 挡在前面的那一层,站点自己支持 IPv6 的只有 11.1%。

也就是说,能走新路的用户快过半了,愿意开新路的网站才两成。这不是技术问题,而是因为 IPv4 地址枯竭的压力被 NAT 和 CGNAT 缓住了——既然还能凑合,动力就不足。

30 秒实验

  1. 运行 ipconfig /all(Windows)或 ifconfig(macOS / Linux),把物理地址(MAC)和 IPv4 地址一起找出来,你会发现 MAC 那串是十六进制、中间带冒号或横杠。
  2. 运行 nslookup -type=AAAA www.google.com,看能不能拿到 AAAA 记录;再换一个国内站点试试,看它有没有 IPv6 地址。
  3. 在手机上关掉 Wi-Fi 用流量访问一次测 IP 的网站,再打开 Wi-Fi 访问一次,对比两次的公网 IP——这就是【换网络就换地址】最直接的体验。

常见误区

  1. 错误:MAC 地址是全程不变的,所以可以用它当身份标识。——纠正:不变不等于可靠。MAC 在网卡层面就能被改写,而且一旦出了本地网络,外面的世界根本看不到你的 MAC——它每过一跳就被换掉了。拿它做用户识别,既不准也不安全。
  2. 错误:有了 IPv6 就可以不要 MAC 地址了。——纠正:两者管的是不同的层。IPv6 换掉的只是网络层那一套编址方式,局域网内部依然要靠链路层地址把数据交给具体设备。换的是地址空间,不是分工。
  3. 错误:IPv6 只是把地址位数加长了。——纠正:配套的东西一起变了。SLAAC 让设备不需要服务器就能自己配地址,地址长度固定成 64 位前缀 + 64 位接口标识,还自带邻居发现机制。把它当成【另一套体系】来学,比当成【加长版 IPv4】准确得多。
  4. 错误:IPv4 地址早就不够用了,早该停了。——纠正:技术上早就耗尽,工程上还在跑。靠 NAT 和 CGNAT,一个公网地址能被许多用户共用。代价是外面分不清谁是谁,也让某些直接对外提供服务的场景变得麻烦。
自测三问(点开对答案) 1. IP 地址和 MAC 地址最本质的分工是什么? —— IP 负责**从起点到终点**——跨网络找路,一路上不变;MAC 负责**从这一跳到下一跳**——在局域网内交给具体设备,每过一跳就换。**一个管【送到哪座城】,一个管【交给哪个人】。** 2. 为什么不能用 IP 地址当用户的身份标识? —— 因为**它会变**:换网络、重连、重启路由器,都可能拿到不同的地址;而且大量用户可能**共用一个出口地址**,根本分不出谁是谁。**做用户识别要靠 Cookie 与会话**——那是 2-13、2-14 的活。 3. IPv6 用户过了 46%,为什么域名侧只有 20% 支持? —— 因为**两边的动力不对称**:运营商给用户开 IPv6 是顺手的,而网站加 IPv6 要动配置、还要保证不影响现有访问,动力小。**再加上 NAT 把 IPv4 枯竭的压力缓住了,网站这边就没有非换不可的理由。**

相关笔记