IPv6基础

IPv6简介

IPv6(Internet Protocol version 6 ,网际协议第6版)是网际协议的最新版本,用作互联网的协议。用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。

IPv6的设计目的是取代IPv4,然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢。

IPv6具有比IPv4大得多的编码地址空间。这是因为IPv6采用128位的地址,而IPv4使用的是32位。因此新增的地址空间支持2128(约3.4×1038)个地址,具体数量为340,282,366,920,938,463,463,374,607,431,768,211,456 个,也可以说成1632个,因为每4位地址(128位分为32段,每段4位)可以取24=16个不同的值。就以地球人口70亿人计算,每人平均可分得约4.86×1028(486117667×1020)个IPv6地址。

IPv6格式

IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示。例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344 是一个合法的IPv6地址。类似于IPv4的点分十进制,同样也存在点分十六进制的写法,将8组16位十六进制地址的冒号去除后,每位以点号“.”分组,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344则记为2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4,其倒序写法用于ip6.arpa子域名记录IPv6地址与域名的映射。

同时IPv6在某些条件下可以省略:

  1. 每项数字前导的0可以省略,省略后前导数字仍是0则继续,例如下组IPv6是等价的。

    2001:0db8:02de:0000:0000:0000:0000:0e13

    2001:db8:2de:0000:0000:0000:0000:e13

    2001:db8:2de:000:000:000:000:e13

    2001:db8:2de:00:00:00:00:e13

    2001:db8:2de:0:0:0:0:e13

  2. 可以用双冒号“::”表示一组或多组连续的0,但只能出现一次

    如果四组数字都是零,可以被省略。遵照以上省略规则,下面这组IPv6都是相等的。

    2001:0db8:0000:0000:0000:0000:1428:57ab

    2001:0db8::1428:57ab

    2001**::25de::**cade 是非法的,因为双冒号出现了两次。它有可能是以下几种情形之一,造成无法推断。

    2001:0000:0000:0000:0000:25de:0000:cade

    2001:0000:0000:0000:25de:0000:0000:cade

    2001:0000:0000:25de:0000:0000:0000:cade

    2001:0000:25de:0000:0000:0000:0000:cade

  3. 如果地址实际上是IPv4的地址,后32位可以用10进制数表示;因此::ffff:192.168.89.9 相等于::ffff:c0a8:5909。 ::ffff:1.2.3.4 格式叫做IPv4映射地址

IPv4位址可以很容易的转化为IPv6格式。举例来说,如果IPv4的一个地址为135.75.43.52(十六进制为0x874B2B34),它可以被转化为0000:0000:0000:0000:0000:FFFF:874B:2B34 或者::FFFF:874B:2B34。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为::ffff:135.75.43.52。

  1. 由于同一个非全局地址可能在同一范围的多个区域中使用(如,在两条独立的物理链路中使用链路本地地址 fe80::1),而且一个节点可能连接到同一范围的不同区域的接口(如,一个路由器通常有多个接口连接到不同的链路)。IPv6新增了区域ID(Zone ID)加以区分,或称作用域ID(Scope ID)。作用域ID仅用于本地链接,使用百分号追加在地址后面。其内容特定于操作系统,例如Windows使用数字 fe80::2%3 ,Linux使用网卡名字 fe80::2%eth0 。在URI中使用时,百分号需要进行编码,例如 fe80::a%en1 应显示为 http://[fe80::a%25en1] 。

IPv6地址的分类

IPv6 地址有几种不同的分类,根据它们的用途和范围可以分为以下几类:

单播地址(Unicast)

用于单一发送者和单一接收者之间的通信,IPv6中的单播地址类型包括:

  1. 全局单播地址(Global Unicast Address, GUA)

    • 结构:通常包含以下几个部分:

      • 全局路由前缀:通常由一个互联网服务提供商(ISP)分配,用于在全球范围内唯一标识网络。

      • 子网标识:用于组织内部区分不同的子网。

      • 接口标识(Interface ID):用于唯一标识子网内的单个设备,可通过将MAC地址分成两半,在中间插入FFFE,并反转MAC地址的第7位(通常称为“U/L位”)来生成;为了防止MAC地址的隐私泄露,也可以使用随机数来生成接口ID;也可管理员可以为设备手动分配。

    • 特点:全局单播地址类似于IPv4中的公网地址,可以用于互联网上的端到端通信

    • 用途:连接到互联网的设备使用全局单播地址

  2. 链路本地单播地址(Link-Local Address, LLA)

    • 结构:链路本地地址以FE80::/10为前缀,后面是从MAC地址生成或随机生成的64位接口ID。

    • 特点:链路本地地址仅在单个链路(例如局域网)内有效,不可跨链路路由。

    • 用途:用于链路层的网络活动,如自动地址配置、邻居发现或当没有路由到全局地址时的本地通信

  3. 唯一本地地址(Unique Local Address, ULA)

    • 结构:唯一本地地址以FC00::/7为前缀,但实际使用中通常使用FD00::/8,后面跟随一个40位的随机生成的全局ID和一个16位的子网ID,以及64位的接口ID。

    • 特点:在本地或组织内部是唯一的,但不是全球可路由的,类似于IPv4的私有地址(10.0.0.0/8172.16.0.0/12192.168.0.0/16)。

    • 用途:用于组织内部网络通信,适用于不需要与外界通信的局域网环境。这些地址用于组织内部或私有网络,不应该直接路由到全球互联网。

  4. 特定单播地址

    • 例如文档用地址(2001:DB8::/32),用于文档和示例中,不应在公共网络中使用

    • 环回地址(::1/128),用于设备自身内部通信测试

    • fe80::/10,用于自动私有IP地址配置,这些地址只在区域连线中是合法的,这有点类似于IPv4中的 169.254.0.0/16

多播地址(Multicast)

IPv6 多播地址用于一对多通信,即一个发送者向多个接收者发送数据。多播地址标识一组监听特定多播流的接口。在IPv6中,多播替代了IPv4中的广播概念,因为IPv6不支持网络广播。多播地址的范围从 FF00::/8FFFF::/8

IPv6 多播地址的结构如下:

  1. 前缀:每个IPv6多播地址以 FF 开头(在二进制中为 11111111)。

  2. 标志(Flags):接着是4位标志字段,其中第一位目前保留为0,第二位(T)定义了地址的临时性质(0为永久,1为临时),第三位(P)和第四位(R)目前未使用并保留为0。

  3. 范围(Scope):紧随标志字段之后的是4位的范围字段,用于指定多播地址的有效范围,比如链路本地、站点本地、组织本地或全局范围。

  4. 组ID(Group ID):最后是112位的组ID,它标识特定的多播组。组ID可以是随机分配的,也可以是根据特定规则分配的。

IPv6 多播地址的常见范围值包括:

IPv6 多播地址的一些特殊用途和示例包括:

多播地址在许多网络协议和应用中使用,如邻居发现(Neighbor Discovery, ND)、路由器广告(Router Advertisement, RA)、动态主机配置协议(DHCPv6)以及其他需要一对多通信的场景。

因为多播可以有效地将数据发送给多个目的地,而不需要单独发送给每个接收者,所以它是网络中流量分发的高效方式。它在流媒体、在线游戏、实时通讯等领域中非常有用。IPv6的多播能力为现代网络通信提供了极大的灵活性和效率。

任播地址(Anycast)

IPv6 任播地址(Anycast Address)是一种特殊类型的通信方式,用于一对一中最近的一个(通常是最近的一个接收者)。IPv6 的任播地址在概念上与多播相似,但在实际使用上有所不同。任播地址可以由网络中的多个节点共享,当数据发送到任播地址时,网络将数据路由到距离发送者最近的那个节点。

IPv6任播地址的特点和用途:

  1. 地址共享:任播地址可以分配给网络中的多个接口,这些接口通常属于不同的节点。

  2. 路由优化:数据包发送到任播地址时,路由器将它们路由到最近的(通常是拓扑上或距离上最近的)接收节点。这是通过最短路径优先的路由协议来实现的。

  3. 用途:任播常用于负载均衡和冗余,比如在多个服务器上提供相同的服务时。客户端可以使用单个任播地址来访问服务,而无需知道具体的服务器地址。

IPv6任播地址的配置和识别:

在IPv6中,并没有专门的任播地址范围。任意的单播地址都可以被当作任播地址来使用。关键在于这个单播地址是如何在网络中被配置和路由的。要配置任播服务,网络管理员需要在多个设备上配置相同的IPv6单播地址,并在路由器中适当地配置路由协议,以确保任播的工作原理得以实现。

例如,如果多个DNS服务器在不同的地理位置上配置了相同的IPv6地址,并且在网络中宣告了这个地址,那么当客户端尝试解析一个域名时,它发送的查询将被路由到最近的DNS服务器。

IPv6任播的工作原理依赖于路由协议的能力来确定最近的节点。通常,路由器使用诸如OSPF(开放最短路径优先)、IS-IS(中间系统到中间系统)或BGP(边界网关协议)等协议来确定最佳路径。

总结来说,IPv6任播地址是一种有效的网络资源和服务定位机制,它能够提高服务的可用性和负载均衡能力,对于提高网络效率和性能非常有帮助。

Window 配置IPv6

在Windows 通过网络和共享中心来同时配置IPv6的全局单播地址(GUA)实现外部网络访问和唯一本地地址(ULA)实现内部网络访问。

以下是配置步骤:

  1. 打开控制面板,然后点击网络和共享中心

  2. 点击左侧的更改适配器设置

  3. 找到你想要配置的网络连接(例如,以太网或本地连接),然后右键点击选择属性

  4. 在网络连接属性窗口中,找到并双击Internet 协议版本 6 (TCP/IPv6)

  5. 在弹出的Internet 协议版本 6 (TCP/IPv6) 属性窗口中,选择使用以下IPv6地址,然后输入你的全局单播地址和子网前缀长度,全局单播地址通过互联网服务提供商(ISP)获取。

  6. 默认网关中输入IPv6网关地址。

  7. 如果需要配置DNS,可以在使用以下DNS服务器地址部分输入首选和备用的IPv6 DNS服务器地址。

  8. 点击高级按钮,这时可以添加更多的IPv6地址。在IP地址选项卡中,点击添加来输入你的唯一本地地址(ULA)和相应的子网前缀长度。

  9. 点击确定保存配置。

Linux 配置IPv6

Linux 想要在系统重启之后保持IPv6配置,需要编辑网络配置文件,这取决于你使用的是哪种网络管理服务。

对于 NetworkManager

编辑 /etc/sysconfig/network-scripts/ifcfg-<interface-name> 文件,其中 <interface-name> 是你的网络接口名称,比如 ifcfg-eth0

添加或修改以下行,以包含你的IPv6配置:

[IPV6]
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6ADDR=2001:db8::2/64
IPV6ADDR_SECONDARIES=fd00:db8::2/64
IPV6_DEFAULTGW=2001:db8::1

重启 NetworkManager 服务来应用更改:

sudo systemctl restart NetworkManager

对于 systemd-networkd

创建或编辑 /etc/systemd/network/10-eth0.network 文件(这里的 10-eth0.network 应该匹配你的网络接口)。

添加以下部分来配置IPv6地址和默认网关:

[Match]
Name=eth0

[Network]
Address=2001:db8::2/64
Address=fd00::2/64
Gateway=2001:db8::1
DNS=2001:db8::53

重启 systemd-networkd 服务来应用更改:

sudo systemctl restart systemd-networkd

请根据Linux发行版和网络管理服务选择合适的方法。如果不确定使用哪种服务,可以查阅发行版的文档或使用systemctl来检查哪个服务是活跃的。记得在配置IPv6地址时,替换示例中的地址为自己的IPv6地址。