文章目录
IPv6概念
背景
随着互联网的快速发展,IPv4地址空间的耗尽问题日益严重。IPv4地址是由32位二进制数组成,能够提供的最大地址数量约为42亿个。然而,随着互联网用户的急剧增加,IPv4地址资源已经无法满足需求。为了解决这一问题,互联网工程任务组(IETF, Internet Engineering Task Force)制定了IPv6标准,它是一种新的互联网协议,旨在提供几乎无限的地址空间。
IPv6标准的制定始于20世纪90年代初,并于1998年正式发布为RFC 2460。这个新协议的主要特点之一就是扩大了地址空间,从IPv4的32位增加到了IPv6的128位。这意味着IPv6可以支持大约 3.4 × 1038 个不同的地址,足以满足未来互联网的发展需要。
3.4 × 1038 个地址是什么概念?
- IPv4地址数量:4.3 × 109 (43亿)。
- 截至2023年,全球的联网设备(包括但不限于计算机、智能手机、平板电脑、物联网设备等)数量估计在数亿到数十亿级别,即 109 到 1010。
- MAC 地址是一个 48 位的地址,用于标识网络设备的物理层地址。,所以理论上可以有大约 2.81 × 1014 个不同的 MAC 地址。
- 地球表面的沙粒数量估计在 1018 到 1021 之间,每个沙粒理论上可以平均分配到大约 1019 个IPv6地址。
此外,IPv6还引入了一些重要的改进,包括简化报头格式、内置的安全功能、自动配置能力以及对移动性的更好支持等。这些改进有助于提升网络性能和安全性,并简化网络管理。
IPv6地址的长度与格式
IPv6地址由128位组成,通常被分为8组,每组包含16位(即4个十六进制数)。
IPv6地址的每个16位段可以表示为四个十六进制数字,其中每个数字代表四位二进制数。为了便于书写和阅读,IPv6地址中的每个16位段都被转换成十六进制形式,并且各段之间使用冒号(:)进行分隔。例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 这里,
2001
、0db8
、85a3
、0000
等都是16位的十六进制数。
IPv6前缀
- 什么是IPv6前缀?
IPv6地址由两部分组成:前缀和接口标识符(Interface Identifier)。前缀通常是IPv6地址的最左端部分,用于标识网络范围。IPv6地址长度为128位,前缀长度通常从32位到64位不等,取决于网络的设计。
例如,2408:8a00:780e:bbb1:f6a:2ef0:fe28:83e0/64: 这个地址包含了两部分,前缀 (2408:8a00:780e:bbb1:
) 和接口标识符 (f6a:2ef0:fe28:83e0
)。/64
表示这个前缀的长度为64位,这是IPv6地址中用于标识网络部分的标准长度。
-
为什么需要前缀获取?
- 路由选择:前缀用于确定数据包如何在网络间传输,即用于路由选择。
- 子网划分:通过不同的前缀长度,可以实现子网划分,以适应不同规模的网络。
- 地址分配:前缀用于标识特定的网络范围,以便在该范围内分配IPv6地址。
IPv6简记规则
IPv6简记规则允许我们以更简洁的方式书写IPv6地址,从而提高效率和可读性。IPv6简记主要包括两个方面:
-
前导零压缩法:
- 如果一个16位段中的所有或部分前导零可以被省略,那么这些零就可以被删除,直到第一个非零数字为止。例如,在
0000:0000:2222:0000:0000:0000:0000:0000
中,可以将前导零压缩,得到::2222:0:0:0:0:0
。但值得注意的是,这种方法只能应用于每个16位段内部,不能跨越不同的段。
- 如果一个16位段中的所有或部分前导零可以被省略,那么这些零就可以被删除,直到第一个非零数字为止。例如,在
-
双冒号法:
- 当一个IPv6地址包含一个或多个连续的16位段全部为零时,这些零可以被替换为一个双冒号(:。例如,如果有一个地址
0000:0000:0000:0000:0000:0000:0000:0000
,它可以被简记为::
。需要注意的是,一个IPv6地址中只能出现一次双冒号,否则会导致地址的不明确性。
- 当一个IPv6地址包含一个或多个连续的16位段全部为零时,这些零可以被替换为一个双冒号(:。例如,如果有一个地址
这两种简记方法可以同时使用,但是必须确保简记后的地址仍然保持其唯一性和准确性。例如,对于地址0000:0000:0022:0000:0000:3300:0000:0000
,我们可以将其简记为::22:0:0:3300:0:0
,0:0:22::3300:0:0
或者0:0:22:0:0:3300::
。
IPv6为什么没有流行起来
-
过渡成本高昂:
- 从IPv4迁移到IPv6并非简单的升级过程。
- 网络运营商、企业以及家庭用户都需要对现有设备和软件进行更新或更换,以支持IPv6。
- 这一过程不仅需要大量资金投入,还涉及复杂的规划和技术实施。
- 导致许多组织倾向于维持现状而非主动迁移。
-
缺乏紧迫感:
- 由于NAT(网络地址转换,允许多个私有IP地址共享一个公共IP地址访问互联网)等技术的存在,IPv4地址的短缺并没有立即影响到大多数用户的日常上网体验。
- 这使得很多企业和个人认为没有必要急于过渡到IPv6。
-
技术复杂性:
- IPv6本身的技术实现比IPv4更为复杂,尤其是在实现IPv4与IPv6的互操作性方面。
- 这意味着技术人员需要更多的时间去学习和适应新的协议栈。
- 为了确保IPv4与IPv6之间的兼容性和互通性,在过渡期间通常采用双栈解决方案,即同时支持IPv4和IPv6两种协议。
- 这种双栈部署增加了管理上的难度和成本。
-
应用程序和内容的支持不足:
- 一些老旧的应用程序和服务可能不支持IPv6,导致即便用户终端支持IPv6也无法充分利用。
- 此外,许多网站和服务提供商在部署IPv6方面进展缓慢,这也阻碍了IPv6的普及。
使用IPv6服务
正常使用IPv6服务的条件
-
上网设备的支持:
- 硬件和软件(系统)的支持,现在大多数设备都支持。
- 获取或配置IPv6地址。
- 可以同时配置IPv4和IPv6。
-
路由器的支持:支持IPv6功能(现在大部分路由器都支持),启用IPv6相关配置。
-
互联网服务提供商(ISP)的支持
- ISP需要提供IPv6连接选项,几大运营商一般都支持。
- ISP需要分配一个或多个IPv6前缀,启用相关配置。
-
DNS服务器的支持:能够解析IPv6地址。大多数公共DNS服务都已经支持IPv6。
-
网站和服务的支持:
- 网站和服务需要支持IPv6,这通常意味着网站服务器本身需要配置IPv6地址,并且Web服务器软件需要支持IPv6。
- 当访问一个支持IPv4和IPv6的网站(即双栈网站)时,通常会尝试先使用IPv6连接。
-
在浏览器中访问IPv6地址时需要添加方括号:
- IPv6地址可能包含冒号(
:
),在浏览器中访问时,需要将IPv6地址放在方括号中。 - 例如:http://[2400:8905::f03c:94ff:fed0:1af]/
- IPv6地址可能包含冒号(
使用IPv6服务的缺点
IPv6网络相比IPv4网络还不太成熟,覆盖面也不够广泛,经常会有如下问题:
- 在某些情况下,IPv6连接可能依赖于性能不佳的公共隧道,这会导致延迟增加和连接不稳定。
- 有时IPv6连接可能会遇到故障或不理想的线路,导致延迟很长,影响用户体验。
- IPv6连接的不稳定可能导致DNS解析延迟,影响用户的访问体验。
- 对于双栈网站,浏览器一般会等待IPv6连接超时后才尝试IPv4连接,需要等待75秒以上才会放弃IPv6连接尝试,这可能会导致用户在加载页面时经历较长的等待时间。
IPv6地址的获取
地址类型
-
全局唯一地址 (Global Unicast Addresses, GUA):
- 这些地址是全局唯一的,并且可以通过互联网路由到任何地方。它们通常用于公共互联网上的通信。
-
链路本地地址 (Link-Local Addresses):
- 这些地址用于同一链路上的节点之间的通信。它们不会被路由器转发到其他网络上。
-
站点本地地址 (Site-Local Addresses):
- 这是IPv6早期的概念,现在已经被取消。之前用于标识同一站点内的节点。
-
唯一本地地址 (Unique Local Addresses):
- 作为站点本地地址的替代品,这些地址用于标识同一站点内的节点,但不会被路由到互联网上。类似于IPv4中的私有地址(如10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16),格式通常是
fc00::/7
(前7位是固定的值0111111
)。
- 作为站点本地地址的替代品,这些地址用于标识同一站点内的节点,但不会被路由到互联网上。类似于IPv4中的私有地址(如10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16),格式通常是
-
多播地址 (Multicast Addresses):
- 用于向一组节点发送数据包。多播地址不是用来标识单一节点,而是用来标识一组节点。
-
任意播地址 (Anycast Addresses):
- 这些地址用于标识一组接口中的任何一个。数据包会被发送到最近的一个接口。
-
未指定地址 (Unspecified Address):
- 该地址用于初始化阶段,表示没有特定的地址。IPv6中的未指定地址是
::
。
- 该地址用于初始化阶段,表示没有特定的地址。IPv6中的未指定地址是
-
环回地址 (Loopback Address):
- 用于对本机的IPv6栈进行测试,类似于IPv4中的
127.0.0.1
。IPv6中的环回地址是::1
。
- 用于对本机的IPv6栈进行测试,类似于IPv4中的
IPv6地址获取方式
-
无状态地址自动配置 (SLAAC):
- 设备通过接收路由器发布的**Router Advertisement (RA)**消息来获取网络前缀。
- 设备使用RA中的前缀信息与自己的MAC地址结合,通过EUI-64转换算法来自动生成接口ID(Interface Identifier),从而形成完整的IPv6地址。
- 不需要额外的配置服务器,简单且快速。
-
动态主机配置协议版本6 (DHCPv6):
- DHCPv6提供了多种模式:
- 无状态模式: 类似于SLAAC,但通过DHCPv6服务器获取其他配置信息(如DNS服务器地址)。
- 有状态模式: 服务器不仅分配前缀,还为客户端分配特定的地址。客户端可能获得一个或多个IPv6地址,这些地址的有效期由服务器决定。
- 可以用于分配IPv6地址、前缀以及其他配置信息(例如DNS服务器地址、默认网关等)。
- 需要配置DHCPv6服务器。
- DHCPv6提供了多种模式:
-
组合使用:SLAAC + DHCPv6:
- 设备可以通过SLAAC自动获取IPv6地址,同时通过DHCPv6获取其他配置信息,如DNS服务器地址、默认网关等。
- 这种方式结合了SLAAC的简便性和DHCPv6的灵活性。
ISP分配的GUA和公网IP并不一样
-
ISP 分配的 GUA
- 定义:全局唯一地址是一种IPv6地址类型,它在全球范围内是唯一的,并且可以在互联网上进行全球路由。
- 用途:这种类型的地址主要用于公网上终端节点之间的通信,比如网站服务器、邮件服务器等。
- 分配方式:ISP通常会为每个客户分配一个或多个前缀,这些前缀中的地址可以作为GUA来使用。例如,ISP可能会给一个家庭用户提供一个/64的IPv6前缀,这意味着有2^64个可用的地址供这个家庭内部的设备使用。
-
公网 IP(能够被公网直接访问的IPv6地址)
- 定义:公网IP是指可以直接从互联网上访问的IPv6地址,即不需要任何NAT(Network Address Translation,网络地址转换)或类似的机制来进行地址转换。
- 用途:公网IP地址用于提供公开可访问的服务,如Web服务器、FTP服务器等。
-
区别
- ISP分配给光猫的GUA是为了确保光猫能够连接到ISP的网络,并通过ISP访问公网。这个地址通常不会直接出现在公网流量中,而是通过NAT64/NAT-Prefix Translation (NPT)等机制转换为公网可识别的地址。
- NAT64: 这是一种用于将IPv6地址转换为IPv4地址的技术,以便IPv6客户端可以与IPv4服务器通信。NAT64通常用于IPv6-only网络中的IPv4访问。
- NAT-Prefix Translation (NPT): 这是一种用于IPv6到IPv6地址转换的技术,主要用于将私有的IPv6地址转换为全局唯一的IPv6地址,以便这些私有地址可以被公网识别。
- 但是GUA是否能被外网直接访问,取决于ISP配置的路由策略。即使GUA和公网IP不同,也可能可以被外网直接访问。ISP可能配置了特定的路由策略,允许外部网络直接访问分配给光猫的GUA地址。有时候,ISP分配的GUA地址本身就是公网可访问的,不需要任何额外的转换或配置。
IPv6网页工具
查看本机的公网IPv6地址以及IPv6的可用性:
- 主站(IPv4):https://testipv6.com/ 或 https://test-ipv6.com/
- 纯IPv6站点:https://ipv6.test-ipv6.com/
- 双栈站点:http://ds.test-ipv6.com/
在线测试IPv6的可访问性:
文章评论