一个计算机技术爱好者与学习者

0%

IPv6入门篇

1. IPv6简介

IPv6,全称Internet Protocol version 6,是用于网络层的一种新的网络协议,被设计用来取代目前主流的IPv4。由于IPv4的地址资源有限,且无法满足日益增长的互联网设备数量,因此引入了IPv6这种新的网络协议。

在互联网世界里,每一台连接到网络的设备都需要一个独特的标识,就如同每一栋房子都需要一个独特的地址一样。这个唯一的标识我们称之为“IP地址”。IPv4是现在最常见的IP地址类型,然而,由于IPv4的设计限制,其只能支持约42亿个地址。虽然当初设计IPv4的时候,42亿个地址看起来已经相当大了,然而在今天,由于互联网的飞速发展,这些地址已经分配的差不多了。而IPv6则可以提供远超于IPv4的地址数量,理论上可达到340多万亿亿亿个。

IPv6的一个关键特性是其128位的地址长度,质的飞跃让IPv6的地址空间从IPv4的42亿增加到了可供每个地球表面的杆菌都拥有自己的网络的程度,适应了互联网物联网时代的发展。

参考文档:

2. IPv6地址的组成

IPv6地址长度为128位,由8组16位的二进制数表示(每4位二进制数可以表示为一个十六进制数),每组之间以冒号(:)分隔。例如:2031:0000:130F:0000:0000:09C0:876A:130B 这样的数值。

与IPv4类似,IPv6也有不同种类的地址,包括单播、多播和任播地址。单播地址就是普通的网络地址,一般用于标识单一的网络接口。多播地址则用于一次传输信息给多个目的地址。而任播地址是IPv6中的一个新特性,用于将数据发送到任何一个接口。

此外,IPv6还引入了一个新概念——区域标识(zone index),用于在同一台设备上区分多个相同地址的接口。

3. IPv6的特性和功能

IPv6相比IPv4有很多显著的优势,主要体现在以下几个方面:

  • 更大的地址空间:IPv6的地址长度为128位,比32位的IPv4提供了更大的地址空间。
  • 寻址方式更灵活:IPv6的寻址方式更加灵活和统一,支持多种寻址方式,如全球单播地址、全球组播地址、本地链接地址等。
  • 更高的传输效率:由于IPv6头部的结构更加简洁,可以提高路由的转发效率和性能。
  • 更强的安全性:IPv6原生支持IPSec,可以提供数据的保密性、完整性和认证性。
  • 更好的质量服务(QoS):IPv6可以根据流的优先级、可用带宽等信息提供更好的服务质量。
  • 更好的移动性和可扩展性:IPv6自带的移动性和自我配置功能,使得设备可以在不改变IP地址的情况下轻松移动。这一特性使得IPv6非常适合于无线和移动网络。

4. IPv6地址分类

IPv6地址可分为三种:单播(unicast)地址、多播(multicast)地址 和 任播(anycast)地址。

4.1. 单播(unicast)地址

单播地址标示一个网络接口。协议会把送往地址的数据包送往给其接口。IPv6的单播地址可以有一个代表特殊地址名字的范畴,如链路本地地址(link local address)和唯一区域地址(ULA,unique local address)。单播地址包括可聚类的全球单播地址、链路本地地址等。

全球单播地址:全球单播地址类似于IPv4中的公网地址,可以在整个互联网上进行路由。这种地址的前缀通常为2000::/3,也就是地址的第三位为2或3。中间部分(40-64位)通常是网络运营商分配的前缀,后面部分(65-128位)是用户自定义的接口标识符。

链路本地地址:链路本地地址类似于IPv4中的私有地址,主要用于单个网络中设备间的通信。这种地址的前缀通常为FE80::/10。

4.2. 多播(multicast)地址

多播地址也称组播地址。多播地址被指定到一群不同的接口,送到多播地址的数据包会被发送到所有的地址。多播地址由皆为一的字节起始,亦即:它们的前置为FF00::/8。其第二个字节的最后四个比特用以标明”范畴”。
一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播地址中的最低112位会组成多播组群标识符,不过因为传统方法是从MAC地址产生,故只有组群标识符中的最低32位有使用。定义过的组群标识符有用于所有节点的多播地址0x1和用于所有路由器的0x2。
另一个多播组群的地址为”solicited-node多播地址”,是由前置FF02::1:FF00:0/104和剩余的组群标识符(最低24位)所组成。这些地址允许经由邻居发现协议(NDP,Neighbor Discovery Protocol)来解译链接层地址,因而不用干扰到在区网内的所有节点。

值得注意的是,IPv6中没有所谓的“广播地址”。在IPv4中,广播地址用于将数据包发送到网络中的所有设备,而在IPv6中,这个功能由组播地址代替。

4.3. 任播(anycast)地址

任播像是Unicast(单点传播)与Broadcast(多点广播)的综合。单点广播在来源和目的地间直接进行通信;多点广播存在于单一来源和多个目的地进行通信。
而Anycast则在以上两者之间,它像多点广播(Broadcast)一样,会有一组接收节点的地址列表,但指定为Anycast的数据包,只会发送给距离最近或发送成本最低(根据路由表来判断)的其中一个接收地址,当该接收地址收到数据包并进行回应,且加入后续的传输。该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。
以目前的应用为例,Anycast地址只能分配给中间设备(如路由器、三层交换机等),不能分配给终端设备(手机、电脑等),而且不能作为发送端的地址。

5. 特殊IPv6地址

5.1. 未指定地址

::/128:所有比特皆为零的地址称作未指定地址,完整地址为0:0:0:0:0:0:0:0/128。类似于IPv4中的0.0.0.0,被用来表示一个未知的、未指定的或无效的IP地址。
这个地址不可指定给某个网络接口,并且只有在主机尚未知道其来源IP时,才会用于软件中。路由器不可转送包含未指定地址的数据包。
这个地址一般在一个设备获取新的IP地址时被使用,例如,在启动、重启或在没有其他静态或动态IPv6配置时。

5.2. 链路本地地址

::1/128:是一种单播绕回地址(循环地址),完整地址为0:0:0:0:0:0:0:1/128。如果一个应用程序将数据包送到此地址,IPv6堆栈会转送这些数据包绕回到同样的虚拟接口(相当于IPv4中的127.0.0.1/8),用于设备自我测试和配置。

fe80::/10:链路本地地址是在单个网络段中使用的,它们在路由器之外不可路由。这些地址主要用于在同一网络链路内的通信,例如邻居发现邻居协议。这有点类似于IPv4中的169.254.0.0/16。

5.3. 唯一区域地址

fc00::/7:唯一区域地址(ULA,unique local address)只可用于本地通信,类似于IPv4的1918专用网络地址10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。
这定义在RFC 4193中,是用来取代站点本地位域。这地址包含一个40比特的伪随机数,以减少当网站合并或数据包误传到网络时碰撞的风险。这些地址除了只能用于区域外,还具备全局性的范畴,这点违反了唯一区域位域所取代的站点本地地址的定义。

如果不使用唯一区域地址,其实也可以使用全球单播地址(2000::/3)来实现本地通信,因为IPv6地址空间非常大,因此对于内网设备可以直接分配全球单播地址,而不再需要进行地址转换。

5.4. 多播地址

ff00::/8:这个前置表明定义在”IP Version 6 Addressing Architecture”(RFC 4291)中的多播地址。
其中,有些地址已用于指定特殊协议,如ff0X::101对应所有区域的NTP服务器(RFC 2375)。

本地多播地址(FF01::/16):本地多播地址只在同一节点的应用之间使用,例如本机的所有网络接口。

5.5. 请求节点多播地址(Solicited-node multicast address)

ff02::1:FFXX:XXXXXX:XXXX 为相对应的单播或任播地址中的三个最低的字节。

5.6. IPv4转译地址

::ffff:x.x.x.x/96:用于IPv4映射地址。
2001::/32:用于Teredo隧道。
2002::/16:用于6to4。

5.7. ORCHID

2001:10::/28:ORCHID (Overlay Routable Cryptographic Hash Identifiers)(RFC 4843)。这些是不可绕送的IPv6地址,用于加密散列识别。

5.8. 文件

2001:db8::/32:这前置用于文件(RFC 3849)。这些地址应用于IPV6地址的示例中,或描述网络架构。

5.9. 遭舍弃或删除的用法

::/96:这个前置曾用于IPv4兼容地址,现已删除。
fec0::/10:这个站点本地前置指明这地址只在组织内合法。它已在2004年9月的RFC3879中舍弃,并且新系统不应该支持这类型的地址。

6. IPv6配置方法

与IPv4相比,IPv6的配置方法有一些不同。下面是IPv6的三种常见配置方法:

  • 自动配置(Automatic Configuration):IPv6提供了一种称为SLAAC(Stateless Address Autoconfiguration)的自动配置机制。在SLAAC中,设备可以从接入网络的IPv6路由器上接收到一个前缀,然后使用自动产生的接口标识符生成一个全局唯一的IPv6地址。此外,SLAAC还通过邻居发现协议(Neighbor Discovery Protocol)自动发现设备周围的其他IPv6地址。
  • DHCPv6(Dynamic Host Configuration Protocol for IPv6):IPv6支持使用DHCPv6来分配IPv6地址。类似于IPv4中的DHCP,DHCPv6服务器可以为设备分配IPv6地址、网关、DNS服务器和其他配置信息。这种方式适用于需要更大灵活性和管理控制的情况。
  • 手动配置(Manual Configuration):与IPv4手动配置类似,可以手动为设备分配IPv6地址。管理员可以在设备上手动设置IPv6地址、子网掩码、网关和DNS服务器等。这种方式适用于小型网络或需要精确控制的情况。

需要注意的是,IPv6的配置方法可能因操作系统、网络设备或网络规模的不同而有所差异。此外,在实际网络中,常常使用组合配置的方式,例如结合SLAAC和DHCPv6来为设备分配IPv6地址和其他配置信息。

PS:IPv6引入了临时地址(Temporary Address)的概念,用于提高设备的隐私和安全性。设备可以在生成全球唯一的IPv6地址之外,生成一个临时的IPv6地址。临时地址在一段时间后会自动更换,防止设备的长期跟踪和定位。

7. 测试IPv6

7.1. 测试公网出口IPv6

浏览器访问 IPv6 连接测试 或者 IPADDRESS.COM,即可看到有没有公网出口IPv6。

7.2. 测试本机是否配置了IPv6

7.2.1. 本地查看本机IPv6 IP

1
ifconfig

查看inet6地址。

7.2.2. ping测试

1
2
ping -6 2001:0db8:85a3:0000:0000:8a2e:0370:7334 # windows
ping6 2001:0db8:85a3:0000:0000:8a2e:0370:7334 # linux/macos

如果是ping链路本地地址,那么需要加上网卡名称。

1
ping6 fe80::1c57:b137:5d25:f5ec%en0

fe80:: 开头的地址是链路本地地址。这种类型的IPv6地址只能用来在同一个网络链路上(同一个交换机)的设备之间进行通信。如果要ping链路本地地址,除了ip地址外,还需要指定网络接口。

7.2.3. 外部看到的本机IPv6

1
2
3
4
5
6
7
8
# 查询本机外网IPv4地址
curl 4.ipw.cn

# 查询本机外网IPv6地址
curl 6.ipw.cn

# 测试网络是IPv4还是IPv6访问优先(访问IPv4/IPv6双栈站点,如果返回IPv6地址,则IPv6访问优先)
curl test.ipw.cn

7.3. 测试本机是否可以访问公网IPv6

1
2
ping6 2402:4e00::
ping6 2400:3200::1

7.4. 测试本机IPv6是否可以被访问

1、找另外一台主机ping自己的本机IPv6

2、浏览器访问IPv6 Ping 测试,在这个页面 ping 自己的本机IPv6。

8. 后记

尽管IPv6在技术上具有很多优势,但实际上仍存在一些挑战。其中一个主要的挑战是IPv6的部署和适配问题,因为在很多网络设备和应用程序中仍然广泛使用IPv4。因此,推动IPv6的广泛采用需要各方的合作和努力。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-ipv6-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~