IPv6地址类型全解析

如果你的设备同时显示一个以fe80::开头和一个以2000:开头的地址,这完全是正常现象,原因就在这里。

为什么IPv6地址要分成好几种类型

IPv6的地址空间设计得比IPv4大得多,但正因为规模庞大,也需要一套清晰、内置的方式来区分哪些地址能在整个互联网上通行,哪些只能在本地网络内部使用——因此地址会根据开头的比特模式(前缀)划分成不同类型。

全球单播地址(2000::/3)

全球单播地址扮演的角色相当于IPv4中的公网IP——可以从互联网上的任何位置访问。它们从2000::/3这个范围分配,互联网服务商会把这个范围内的地址分配给家庭和企业,原则上每台设备都能拥有自己独立的、全球可达的地址,而无需依赖NAT。

唯一本地地址(fc00::/7)

唯一本地地址(ULA)属于fc00::/7范围,其作用类似于IPv4的私有地址段(如192.168.x.x)——仅在组织或家庭内部使用,不会被路由到公网上。与IPv4的私有地址不同,ULA包含一段随机生成的标识符,因此即使日后把两个独立的私有网络合并,地址发生冲突的概率也极低。

组播地址(ff00::/8)

组播地址让一个发送方能够同时把数据发送给属于某个特定组的所有接收方,使用的是ff00::/8范围。IPv6完全取消了IPv4中的广播(全体发送)概念,转而用组播来承担这部分功能,其中还包括"所有节点""所有路由器"这类预留的特殊组地址。

环回地址与未指定地址(::1、::)

环回地址::1的作用和IPv4的127.0.0.1相同——用于设备与自身通信(比如本地测试)。未指定地址::(128个0组成的地址)用于表示尚未分配地址的状态,不会真正作为通信的源地址或目标地址使用。

实际查看自己设备的IPv6地址会看到什么

打开网络设置查看IPv6地址时,经常会同时看到一个以fe80::开头的链路本地地址和一个以2000::开头的全球单播地址。这并不是错误,而是IPv6设计上很自然的表现——一台设备本来就会同时持有多个用途不同的地址类型。

任播地址

任播是把同一个地址配置在多台设备上,数据会送到网络意义上“最近”的那一台。它没有专门的地址格式,而是与单播使用同一范围的地址。DNS根服务器等需要负载分担和容灾的服务广泛使用任播。

前缀长度与/64

IPv6的子网通常按/64划分:前64位是网络部分,后64位用来标识接口。这个约定也与自动配置机制(SLAAC)有关。家庭或企业通常会从服务商获得/56或/48之类较大的地址块,再拆成多个/64网络使用。具体分配大小因服务商而异。

接口标识的生成与隐私

地址的后半部分过去常由MAC地址生成,但这样容易被长期跟踪。如今多数操作系统会使用随机值或在每个网络内稳定的另一种值,并为对外访问生成定期更换的临时地址。因此,一台设备的地址列表里同时出现多个相似地址,并不是故障。

其他特殊范围

2001:db8::/32是专门保留给文档示例的前缀,不会分配给真实网络。::ffff:0:0/96用于以IPv6形式表示IPv4地址,在过渡阶段的软件里偶尔能见到。在命令里指定链路本地地址时,需要在%后加接口名,如fe80::1%eth0,以指明是哪条链路。

常见的组播地址

ff02::1表示同一链路上的所有节点,ff02::2表示同一链路上的所有路由器。ff02表示链路本地范围,不会被路由器转发。IPv6的邻居发现使用的“请求节点组播地址”,作用类似IPv4的ARP。设备通过路由器通告自动获取网络信息,也依赖这些组播地址。

已经不存在需要解决的地址短缺问题了

IPv4大约43亿个地址,曾经紧张到迫使整个互联网依赖私有IP和NAT才能维持运转。IPv6的地址空间大到原则上地球上每一台设备都能拥有自己的全球可达地址,而且还绰绰有余好几倍。地址类型体系存在的意义,不是为了配给稀缺资源,而是为了按用途整理这几乎无限的供给。

认清地址类型能让排查故障更快

一旦你能一眼认出前缀的含义——fe80::永远只在本地有效,fc00::或fd00::是内部专用,2000::可全球路由——排查连接问题的速度就会快很多。如果本该出现全球地址的地方却只看到链路本地地址,立刻就能判断这台设备根本没能从网络正确获取到地址。

与IPv4术语的对照

把IPv4和IPv6的术语对应起来会更好理解:全球单播相当于公网IP,唯一本地相当于私有IP,链路本地的地位接近169.254.x.x的自动配置地址,环回对应127.0.0.1。IPv6没有广播,由组播取代。不过IPv6中一台设备同时拥有多个地址是常态,最好放弃“一台设备一个IP”的概念,以免混淆。

查看和配置时常见的误解

如果只看到fe80::开头的地址,可能是没有收到路由器的通告;但如果线路本身不提供IPv6,这反而是正常状态。唯一本地地址虽然不会被外部直接访问,但不能代替防火墙。临时地址会经常变化,对外提供服务时需要另外配置固定地址。即使使用IPv6,访问限制也应在路由器或防火墙上明确设置。

常见问题

用IPv6还需要私有IP地址吗?

严格来说不是必须的。IPv6的地址空间足够大,可以直接分配全球单播地址而无需NAT,但对于不希望被互联网直接访问的内部专用通信,唯一本地地址(ULA)仍然有用。只是它不像IPv4的私有地址那样是必不可少的组成部分。

能用链路本地地址访问互联网吗?

不能。链路本地地址被设计为只在单一本地网络段内有效,不会被路由器转发到外部,因此互联网通信始终使用的是全球单播地址。

fd00::开头的地址和fc00::有什么区别?

在唯一本地地址范围fc00::/7中,目前实际使用的是本地自行分配的fd00::/8,而fc00::/8预留给将来。fd00::之后的40位随机生成,以降低与其他网络冲突的概率。

在哪里可以看到自己设备的IPv6地址?

Windows可以在命令提示符中使用ipconfig,macOS和Linux可以使用ifconfig或ip address,网络设置详情页也会显示。外部看到的地址,还可以用IP查询网站查看。

地址开头的2000和2400有什么不同?

它们都在全球单播范围(2000::/3)内,只是区域注册机构或运营商分到的地址块不同。开头的数字本身不代表安全性或质量高低,只是判断地址来源的一个线索。