IPv6协议
简介
IPv6 协议是一个全新的 IP 协议,旨在取代目前已在全球部署和使用的 IPv4。
实际上,目前的 IPv4 功能强大,易于部署,可互操作,并在将网络互联扩展为全球规模的互联网过程中,发挥了重要的作用。但是,在设计 IPv4 时,并未考虑到互联网迅速发展,IPv4 地址很快用尽的问题。
借助 NAT(网络地址转换)技术实现的私有地址空间,IPv4 的寿命得到了一定程度的延长。但对于 IP 地址增长的需求,却是无能为力。
IPv6 能够提供更多地址。IPv6 能够在现有 IPv4 设备上进行部署。同时经过正确的规划设计,大型企业能够顺畅将 IPv4 转换为 IPv6。
IPv6 地址格式
IPv6 使用冒号(:)分隔的 16 字节 16 进制地址段,来表示 128 位地址格式,例如2001:db8:130F:0000:0000:09C0:876A:130B
。
此外,为了缩减 IPv6 地址,使地址更便于表达,IPv6 使用以下惯例:
-
地址段中的前置零位可以省略,而且能够压缩。例如:
2001:db8:130F:0000:0000:09C0:876A:130B
=2001:db8:130F:0:0:9C0:876A:130B
-
一对冒号(::)能够表示相连的 0 字段。但是,只允许使用一次冒号对。如果同一地址中出现两个冒号对,就无法确定每个零地址块的大小:
2001:db8:130F:0:0:9C0:876A:130B
=2001:db8:130F::9C0:876A:130B
FF01:0:0:0:0:0:1
=FF01::1
IPv6 前缀
在 IPv6 中,前缀大致相当于 IPv4 中的网络号(子网)。
IPv6 前缀由最左边的位构成,起网络标识符的作用。IPv6 前缀使用 IPv6 前缀或前缀长度格式表示,就像 IPv4 地址以无类别域间路由选择(CIDR)符号表示一样。
前缀长度变量是一个十进制数值,是地址的网络部分。例如:2001:db8:8086:6502::/64
是一个正确的 IPv6 前缀。如果地址以双冒号结束,这尾部的双冒号可以省略。因此这个地址也可写2001:db8:8086:6502/64
。
IPv6 地址类型
对于 IPv4 主机和 IPv6 主机来说,在 IP 地址要求方面有一个重要差异。IPv4 主机一般使用一个 IP 地址,而 IPv6 主机可能会有多个 IP 地址。
IPv6 的地址类型主要有三种:
-
单播:单播地址用于标识一个网络接口(Interface),在单播寻址模式下,IPv6 协议会把送往地址的数据包送往给其 Interface。
-
任意播:一个用于一组通常属于不同节点的接口的地址。发送到任意播地址的数据包会按照所用的路由协议的定义,传输到最近的、任意播地址指定的接口。
-
组播:一个用于一组通常属于不同节点(在特定范围内)的接口的地址。发送到组播地址的数据包会传输到组播地址(在特定范围内)指定的所有接口。
单播地址(Unicast)
单播地址可以进一步细分为以下 4 类:
-
全球唯一地址(Global Unique Address):公网地址,全球可达。由以下 3 部分组成:
-
全球路由前缀(Global Routing Prefix):标识一个站点,可以从 ISP 或区域 Internet 注册机构(Regional Internet Registry,RIR)获取。
-
子网 ID(Subnet ID):标识站点中的一个子网。在 IPv6 中,Subnet ID 定义网络的管理子网,它的最大长度为 16 位。可以在配置 IPv6 网络的过程中指定 Subnet ID。子网 ID 通过指定已分配了子网的特定链路来定义路由器的站点拓扑。IPv6 子网在概念上与 IPv4 子网相同,因为每个子网通常都与一个硬件链路相关联。但是,IPv6 子网 ID 用十六进制表示法表示,而不是用点分十进制表示法表示
-
接口 ID(Interface ID):标识子网中的一个接口。接口 ID 必须在子网内唯一。IPv6 主机可以使用相邻节点搜索协议自动生成其自身的接口 ID。相邻节点搜索协议基于主机接口的 MAC 地址或 EUI-64 地址自动生成接口 ID。也可以手动指定接口 ID,建议对 IPv6 路由器和启用了 IPv6 的服务器采用这种方式。
-
注意,在全球单播地址中,规定如 2001:BCFF:FEA6::/48 表示一个 IPv6 路由前缀,2001:BCFF:FEA6:6C01::/64 表示一个 IPv6 子网前缀。
-
唯一本地地址(Unique Local Unicast Address):私网地址,同子网段可达。前缀为 fc00::/7,该地址是本地全局唯一的,但只能用于本地通信,不通过 Internet 路由,等同于 IPv4 的私有网络地址,用于取代站点本地地址。该地址包含一个 40 位的伪随机数,以减少当网站合并或数据包误传到网络时碰撞的风险。
-
链路本地地址(Link-Local Address):基于邻居发现协议 NDP(Neighbor Discovery Protocol)的自动配置地址,同一个链路上的所有主机可达,不需要手动配置。
-
站点本地地址(Site-Local Address):已丢弃,已被唯一本地地址替代。
组播地址(Multicast)
在 IPv6 中没有广播的概念,而是使用用组播来代替,因此 IPv6 中存在大量的组播使用。组播地址用于标识一组 Interfaces。IPv6 的组播寻址与 IPv4 相同,目的地为多个主机的数据包在特殊的多播地址上发送。所有对该组播信息感兴趣的主机需要首先加入该组播组。加入组的所有 Interfaces 接收组播数据包并对其进行处理,而对组播数据不感兴趣的其他主机则忽略组播信息。
普通的组播地址前缀为 ff00::/8,通过第二段的最后四位来标识多播的 “范畴”。其中有些地址已用于指定特殊协议,例如 ff0X::101 对应所有区域的 NTP 服务器。
标志位为 0000 表示是永久保留的组播地址,分配给各种技术使用;标志位为 0001 表示是用户可使用的临时组播地址。范围段定义了组播地址的范围,其定义如下:
0001:本地接口范围。
0010:本地链路范围。
0011:本地子网范围。
0100:本地管理范围。
0101:本地站点范围,类似组播的私网地址。
1000:组织机构范围。
1110:全球范围,类似组播的公网地址。
下面是一些组播指定地址:
FF02::1,在本地链路范围的所有节点。
FF02::2,在本地链路范围的所有路由器。
FF02::5,all ospf routers。
FF02::9,所有运行 RIP 的路由器。
FF02::A,所有运行 eigrp 的路由器。
FF05::2,在一个站点范围内的所有路由器。
在创建某个接口的 IPv6 单点传送地址时,内核会自动使该接口成为某些多点传送组的成员。例如,内核会使每个节点都成为 “请求节点” 多点传送组的成员,相邻节点搜索协议使用该组来检测可访问性。内核还自动使节点成为 “所有节点” 或 “所有路由器” 多点传送组的成员。
在创建某个接口的 IPv6 单点传送地址时,内核会自动使该接口成为某些多点传送组的成员。例如,内核会使每个节点都成为 “请求节点” 多点传送组的成员,相邻节点搜索协议使用该组来检测可访问性。内核还自动使节点成为 “所有节点” 或 “所有路由器” 多点传送组的成员。
请求节点组播地址(Solicited-node multicast address):ff02::1:FFXX:XXXX
,其中 XX:XXXX 为相对应的单播或任播地址中的三个最低的字节。
任意播
任播(Anycast)地址,又称任意点传送地址,相当于是单播(Unicast)和广播(Broadcast)的综合体。单播是单点通信,广播是单一来源和多个目的地进行通信。而任播则在以上两者之间,它像广播一样,会有一组接收节点的地址列表,但只会发送给距离最近或发送成本最低(根据路由表来判断)的其中一个接收地址,当该接收地址收到数据包并进行回应,且加入后续的传输,该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。当前,任播地址只能分配给中间设备(e.g. 路由器、三层交换机等),不能分配给终端设备(e.g. 手机、电脑等),而且不能作为发送端的地址。
IPv6 任意点传送地址用来标识一组位于不同 IPv6 节点上的接口。每组接口都称作一个任意点传送组。当包发送到任意点传送地址时,任意点传送组中物理位置最接近发送者的成员将收到包。
特殊的地址
未指定地址
:::/128,即 0:0:0:0:0:0:0:0。只能作为尚未获得正式地址的 Host 的源地址,不能作为目的地址,不能分配给真实的 Interface。
环回地址
:::1/128,相当于 IPv4 中的回环地址 lo 127.0.0.1。
ORCHID(Overlay Routable Cryptographic Hash Identifiers)
:2001:10::/28,这些是不可送达的 IPv6 地址,用于加密散列识别。
示例地址
:2001:db8::/32,这些地址应用于 IPv6 地址的示例中,或用于描述网络架构,作为描述性地址。
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。
-
::A.B.C.D,兼容 IPv4 的 IPv6 地址。其中 A.B.C.D 代表 IPv4 地址。即后 32 位可以用 10 进制数表示,因此 ::ffff:192.168.89.9 相等于 ::ffff:c0a8:5909,自动将 IPv6 包以隧道方式在 IPv4 网络中传送的 IPv4/IPv6 节点将使用这些地址。
-
::FFFF:A.B.C.D,是 IPv4 映射过来的 IPv6 地址,其中代表 IPv4 地址,e.g. ::ffff:202.120.2.30 ,它是在不支持 IPv6 的网上用于表示 IPv4 节点。
-
2001::/16,全球可聚合地址,用于 Teredo 隧道,由 IANA 按地域和 ISP 进行分配,是最常用的 IPv6 地址,属于单播地址。
-
2002::/16,6 to 4 地址,用于 6 to 4 自动构造隧道技术的地址,属于单播地址。
IPv6 的新特点
在 IPv6 中,主机地址可使用四种方法进行配置:
-
静态配置:类似于 IPv4 ,主机地址、掩码和网关地址通过人工方式定义。静态地址配置一般用于路由器接口配置,但不太用于 IPv6 主机。
-
无状态自动地址配置(SLAAC):在这种情况下,主机自动配置其地址。启动节点
发送路由器请求消息,申请路由器广播(RA),以配置接口(RFC2462)。 -
基于状态的 DHCPv6:主机使用 DHCP 获取其 IPv6 地址。此地址管理类似于 IPv4 的 DHCP(RFC3315)。
-
无状态 DHCP:主机使用 SLAAC以 及 DHCP,来获取其它参数,如 TFTP 服务器、
WINS等。
配置方式取决于局域网上路由器发送的 RA 标记。
无状态地址自动配置
节点能使用 IPv6 无状态地址自动配置来生成地址,无需 DHCP 服务器。IPv6 地址通过结合网络前缀和一个接口标识符而构成。接口标识符通常来自于 IEEE 标识符。
本地链路上的一个路由器通过 RA 消息发送网络类型信息,如本地链路的前缀以及路由器广播中的默认路由等。该路由器向本地链路上的所有节点提供这一信息,如下所示。
主机随后能构建自己的地址,在从路由器接收到的/64
前缀后面附加一个主机标识符。
因此,与以太网连接的主机能够自动配置,将其采用扩展通用标识符 EUI-64 位格式的 48 位链路层地址(MAC地址)附加在路由器所广播的 64 位本地链路前缀后面。
基于状态的 DHCP
许多大型企业目前使用 DHCP 向主机分发地址。IPv6 也可使用相同的 DHCP 机制进行部署。
为 IPv6 客户端获取配置数据的流程与 IPv4 类似。但 DHCPv6 对许多消息使用组播。最初,客户端必须首先使用邻居发现消息,检测出链路上路由器的存在。如果找到了一个路由器,客户端会检查路由器广播,以确定是否应使用 DHCP。如果路由器广播允许在该链路上使用 DHCP(禁用自动配置标记,并在RA消息中启用可管理标记,使主机能使用 DHCPv6 来获取 IPv6 地址),随后客户端开始 DHCP 请求,来发现 DHCP 服务器,
无状态 DHCP
无状态 DHCPv6 一般结合无状态自动配置,来进行地址分配,为 DHCPv6 获取其它配置信息。在这种情况下,DHCPv6 仅能用于供主机获取更多参数,如 TFTP 服务器、DNS 服务器等。
主机通过将主机标识符附加在从路由器接收到的/64
前缀后面,来构建自己的地址,然后向 DHCP 服务器发送一个 DHCP 请求消息。
IPv6 迁移技术
IPv6 的成功最初来自于基于它运行的新应用。但是,很快 IPv4 地址即将用尽明显地成为了推动 IPv6 部署的因素。出色的 IPv6 设计的一个重要标志是,它能集成到当前的 IPv4 网络中并与其共存。IPv4 和 IPv6 主机需要共存相当长的一段时间,以便 IPv4 能稳步迁移到 IPv6。
目前有三种 IPv6 迁移技术:双堆栈、隧道和转换。
双堆栈
双堆栈是部署 IPv6 的大型企业所采用的基本战略。它将设备配置为能同时运行 IPv4 和 IPv6。IPv4 通信使用 IPv4 协议堆栈,IPv6 通信则使用 IPv6 协议堆栈。
应用根据对于 DNS 请求的响应来选择是使用 IPv4 还是 IPv6。应用根据 IP 流量的类型来选择正确地址。因为双堆栈允许主机同时访问现有 IPv4 内容以及未来 IPv6 内容,所以是非常灵活的部署战略。但是,因为它仍需要 IPv4 地址,所以双堆栈并不是能够解决地址耗尽问题的长期解决方案。
双堆栈还避免了在协议栈之间转换的问题。转换是一种正确的部署机制,但它会提高
运营复杂性,降低性能。由于主机能根据 DNS 信息,选择正确的传输机制来到达目的
地,所以无需在 IPv6 主机和 IPv4 服务器间实施转换。
隧道
隧道将 IPv6 流量封装在 IPv4 数据包中,主要用于 IPv6(或双堆栈)站点间的通信,或通过 IPv4 骨干连接到远程 IPv6 网络或主机。目前有多种不同的隧道技术,包括6to4、ISATAP、Teredo、6PE、6VPE和mGRE v6 over v4等。隧道能人工配置,也能自动配置。大多数当前操作系统除支持双堆栈外,也支持隧道。
转换
地址类型转换(AFT)是将地址从一个类型转换为另一类型的流程。在部署中,AFT 主要用于 IPv6 主机和 IPv4 内容间的转换。当 IPv6 地址空间的保留部分自动映射到 IPv4 时,AFT 可以是无状态的,另外它也可以基于状态,使用已配置范围内的地址,在两类地址间映射数据包。
几乎所有大型企业部署 IPv6 时都在内部使用双堆栈。双堆栈是学习和获取 IPv6 地址部署经验的一种简单方法,这对成功迁移非常重要。