IPv6-Next-Generation

本文目的在于:

  • 讨论为什么必须需要一个新的IP地址系统的原因
  • 描述IPv6头部的字段
  • 写下并且简化IPv6地址所应用的约定
  • 将存在的IPv4地址映射到IPv6地址空间
  • 理解IPv6多广播以及邻居发现
  • 描述一些深受欢迎的IPv6隧道选项。

Why a New Ip

原因是32-bit IP地址即将耗尽。IPv4能够继续控制互联网的原因是NAT的开发。IPv6的IP地址格式需要128-bit。该地址空间有足够的空间来适应在IPv4地址和IPv6地址之间的一些兼容性。

IPv6的一些目标:

  • 扩充地址分配能力:IPv6不仅仅是提供更多的地址,而且给IP地址分配提供其他的改善。例如IPv6支持更多的分层地址结构。IPv6还改善了自动配置能力并且给任播地址分配(anycast addressing)提供更好的支持,它使得一个收到的数据报到达一组可能的目标中的“最近”或是“最好”的目的地。
  • 更简单的头部格式:省略了一些IPv4中的头部字段。其他字段变成可选的。
  • 更好地支持扩展性和选项:IPv6在可选扩展头部中包含一些头部信息。这个方法在不浪费主要头部空间的情况下增加了可能的信息字段的范围。大多数例子中,这些扩展头部不会被路由器处理。提高传输过程中的效率。
  • 流标签:IPv6数据报能够被标记为特定流标签。流标签是一类需要特殊处理方法的数据报。例如,实时服务的流标签可能不同于邮件信息的流标签。流标签设置能够对于确保传输过程中的最小服务质量起到作用。
  • 改善后的验证以及隐私:IPv6扩展支持验证,保密以及数据完整性技术。

IPv6 Header Format

相比IPv4头部,IPv6头部要更简单的部分原因是更详细的信息被归属入跟在主要头部后的特殊的扩展头部中。

https://i.quantuminit.com/2c59efb426604e60.svg

字段说明:

  • Version(4-bit):版本。标识IP版本号(这个例子中是6)。
  • Traffic Class(8-bit):流量类型。标识包装在数据报中数据类型。
  • Flow Label(20-bit):流标签。指定流标签。
  • Payload Length(16-bit):数据负载长度。确定数据(在头部后面的数据报部分)的长度。
  • Next header(8-bit):下一个头部。定义紧跟在当前头部后的头部类型。
  • Hop Limit(8-bit):路由跳限制。暗示数据报允许的剩余多少跳(hop)数。没经过一跳,这个值减一。如果这个值到达0,则丢弃数据报。
  • Source Address(128-bit):数据报源地址。标识发送数据报的计算机的IP地址。
  • Destination Address(128-bit):数据报目的地址。标识接收数据报的计算机的IP地址。

IPv6在主要头部和数据之间的单独的扩展头部中提供一组可选信息。这些扩展头部提供特殊情况时的信息的同时允许主要头部仍然很小并且容易管理。

IPv6规范定义如下扩展头部:

  • Hop-by-Hop 选项
  • Destination 选项
  • Routing
  • Fragment
  • Authentication
  • Encrypted Security Payload

每个头部类型与一个8-bit标识符关联。在主要头部或在扩展头部中的“Next Header”定义链中下一个头部的标识符。

https://i.quantuminit.com/90d3a419361c4cd5.svg

上面的列表中描述的扩展头部中,只有Hop-by-Hop Options 和 Routing被传输路径上中间结点处理。路由器没必要处理其他扩展头部;他们只需要传递就可以了。

Hop-by-Hop 选项头部

Hop-by-Hop选项头部的目的是为传输路径上的路由器关联可选的信息。被包含在规范中规范中的Hop-by-Hop选项头部在很大程度是为了给工业上开发未来选项提供的一种格式和机制。

规范含有一个选项类型命名和一些用于对齐数据的对齐选项。在规范中被明显定义的一个选项是jumbo payload,该选项被用来传输长度大于65535字节的数据负载。

Destination 选项头部

Destination 选项头部用于将可选信息和目的结点关联起来。像Hop-by-Hop选项一样,这个选项头部最初作为开发未来选项的一个框架而包含进来。

Routing 头部

Routing头部被用于指定一个或多个在去往目的地路上数据报路由经过的路由器。

路由头部格式图:

https://i.quantuminit.com/d35c7ad5ad29414e.svg

数据字段说明:

  • Next Header: 标识跟着这个头部的下一个头部的头部类型。
  • Header Length(8-bit):按字节指定头部的长度(不包含下一个头部字段)。
  • Routing Type(8-bit):标识路由头部类型。不同的路由头部类型被设计用于特定的情况。
  • Segment Left:在目的地之前表明明确定义的路由段的数量。
  • Type-Specific Data:给路由类型字段中给定的特定的路由类型标识数据字段。
Fragment Header

沿着消息路径上的每个路由器都有一个用于设置最大传输单元(maxium transmission unit,MTU)。MTU设置表明路由器能够传输的数据的最大单元。IPv6中,源节点能够发现path MTU——传输路径中任何设备的最小MTU设置。path MTU表示数据能够通过路径传输的最大单元。如果数据报的大小大于这个最大单元,数据报被分割成能够通过传输的更小的块。这个Fragment 头部含有 用于重组分片数据报的必要信息。

Authentication Header

验证头部提供安全和验证信息。验证信息提供一种用于决定数据报在传输的过程中是否被修改的方式。

Encrypted Security Payload Header

加密安全负载头部(Encrypted Security Payload header,ESP)提供加密和保密性。使用IPv6的ESP能力,一些或所有被传输的数据能够被加密。使用tunnel-mode ESP(为VPN 隧道所设置),一个被加密的完整的IP数据报被放置在一个外部的,未加密的数据报中。在传输模式中,只有数据负载(payload)以及ESP尾部被加密。

IPv6 Addressing

Address Type Binary Prefix IPv6 Notation Description
Unspecified 0….00(all 0s) ::/128 禁止被分配。表明不存在该地址
Loppback 0…01(127 0s) ::1/128 主机用于给自己发送一个包的诊断地址
Mapped IPv4 0…0:FFFF(80 0s then 16 1s) ::FFFF/96 等价于现有的IPv4的IPv6地址
Multicast 11111111 FF00::/8 标识一组主机
Linklocal unicast 1111111010 FE80::/10 用于自动地址配置
Global unicast (Everything else)

无论怎么表示IPv6地址,想要记住128-bit的IPv6地址挺伤脑筋的。一个IPv6地址一般用四个由8个冒号分隔开来的十六进制数字组成,0开头可以省略:

2001:DB8:0:0:8:800:200C:417A

一个小小的技巧是忽略多个连续0的块并且用一个双冒号替换它们。则前面的地址可以如下表示:

2001:DB8::8:800:200C:417A

在任何IPv6地址中只允许存在一个双冒号。例如,地址FF01:0:0:0:0:0:0:101可以简单地写成

FF01:101.

表示一个IPv6网络地址,比如一个60-bit的网络前缀20010DB80000CD3,可以像这样子写:2001:0DB8:0000:CD30:0000:0000:0000:0000/60 或者这样子 2001:0DB8:0:CD30::/60。

最后,IPv6网络配置软件将会允许用户定义一个默认的网络前缀,目的之在客户端手动配置时,将只需要考虑主机部分的地址即可。

Subnetting

与IPv4一样,IPv6也使用CIDR风格的助记符来标记和网络地址关联的二进制位。一个128 bits 的IPv6
地址给网络和主机地址留下了大量的地址空间。在IPv6中,子网划分应该发生在头地址的前64 bits,剩下的64(或更多)可用作子网中所有的主机ID范围。

64 bit的主机ID可供使用的范围非常广阔。然而,出于性能以及流量管理的考虑,管理员可能依然想要使用路由分割大型网络并且使用子网来传输数据包到不同的网络段。在那种情况下,前64 bits的地址空间能够为网络和子网部分的地址提供大量的空间。例如,如果网络被分配一个/48的地址范围,那么将会有16 bits能够用于子网划分并且提供64-bit的空间用于所有的主机ID。

Multicasting

IPv4是围绕网络广播的思想而设计的。一则消息发送一个广播地址,比如,255.255.255.255(all 1s)地址,会被子网上的所有主机读取。一种称为multicasting的新方法在单传输(unicast)和传输到每个主机(broadcast)之间提供了中间选项。在IPv4时代,引入了多广播,但在IPv6中获得了更多的关注。事实上,多广播(multicast)内置进了IPv6中的结构。在多广播中,参与多广播“groups”的主机共享一个单独的多广播地址。不是多广播组中一部分的主机没必要困扰于该则消息,而且这也使得多广播比广播更高效。

定义了几个不同的类型的IPv6多广播地址用于IPv6。例如,link-local多广播地址,含有多广播地址前缀FF02::/16。

多广播进入了IPv6网络中的许多服务发现过程。应用开发者也可以使用多广播通过IPv6网络高效的传输。

含有前缀FE80::/10的IPv6地址是链路本地地址。链路本地地址不通过路由器并且只用在本地网络段上的通信。链路本地地址会在IPv6的详细的自动化配置系统中起到作用。链路本地地址允许在没有手动配置(和通过DHCP服务器自动配置)的本地网络段上计算机进行通信。

Neighbor Discovery

IPv6中没有ARP。而从The Internet Layer得知,ARP提供将IPv4地址映射到与适配器硬件关联的物理(MAC)地址的方式。在IPv6网络上,IP地址到物理地址的映射通过利用版本号为6的互联网控制信息协议(ICMPv6)的邻居发现协议(Neighbor Discovery Protocol,NDP)而发生。一台主机想要解析本地网络上的一个IPv6地址,首先要计算一个请求的结点和这个地址关联的多广播地址。(请求模式多广播地址遵循IPv6文档中描述的格式,包括一个在多广播范围内的前缀,这个多广播范围含有与IPv6单广播地址相关的最终的主机位。)然后主机发送邻居请求数据包到请求的多广播地址,该地址包括发送人想要解析的IPv6地址,请求该地址的拥有者进行行响应。该IPv6地址的拥有者使用一个含有拥有者自己的物理地址和链路本地地址的邻居广告包来响应。

通过这个过程,网络上的主机建立一个类系于IPv4中使用的ARP表的邻居缓存表。

Autoconfiguration

自动配置技术的目的是给即使一台计算机不能找到一个DHCP服务器,也能够得到一个IP地址并且不需要手动配置。这个不可路由“zero-configuration”的地址至少足够该计算机能够连接一台打印机或其他本地网络同等结点,或通过DNS服务发现来发现本地设备。

IPv6无状态自动配置特性以更简单的方式提供相似的功能。IPv6自动配置基于物理地址(MAC)的哈希值给计算机分配一个链路本地地址。因为物理地址都是唯一的,所以链路本地地址会很大可能性是唯一的,因而阻止了发生在IPv4 zeroconf网络上的一些地址冲突问题。使用标准的转换方式,将48-bit的物理地址转换成一个64-bit字符串,这个字符串添加到以FE80::/10为链路本地前缀(补齐必要的0 bits)的末尾来构成一个完整的链路本地地址。

主机通过另外一个称为副本地址检测(duplicate address detection,DAD)的过程来检查确定该地址是否已经在本地网络端上被使用,如果未被使用,则主机使用这个自动配置的IP地址。

IPv6 and Quality of Service

IPv6地址的另一个挑战是面对老化的IPv4的基础设施:统一服务质量等级的需要。互联网的未来,会有可能优先传输等待传输的IP数据报。IPv6被设计通过可区分的服务等级来支持优先级。IPv6头部的流量分类以及流标签字段提供了指定包装在数据报中的数据的类型和优先级。

IPv6 with IPv4

互联网的全面改造是不会发生的,所以工程师设计IPv6,目的是它能够通过一个长时间的过渡期与IPv4共存。

目的是IPv6协议栈以多协议配置运行在IPv4协议栈旁边,就像IPv4曾经与IPX/SPX,etBEUI,或其他协议栈一样。

IPv6刚开始适应IPv4地址是将每一个有效的IPv4地址通过简单地添加96个0 bit到原来地址的前面来映射到128-bit IPv6地址。后来取而代之的是称为IPv4-mapped IPv6地址,该地址含有80个0 bit,后面再跟上16个1 bit(或十六进制中的FFFF),最后就是32-bit的IPv4地址了。例如:

IPv4地址169.219.13.133映射到IPv6地址的结果是0000:0000:0000:0000:0000:FFFF:A9DB:0D85,或者简单地记为::FFFF:A9DB:0D85。因为前缀清晰地表示出被映射的IPv4地址所在的范围,所以有时候IPv4部分也可以用熟悉的点-十进制格式表示:::FFFF:169.219.13.133。

IPv6 Tunnles

过去几年,都有一些技术提供从IPv4到IPv6逐渐过度的方式。对于网络以及互联网提供人来说的思想是获取IPv4连接的同时,他们缓慢的实现并测试IPv6基础设施的不同部分。

大多数计算机系统提同一些IPv6兼容的形式。一个典型的情况是计算机用双堆栈配置方式支持IPv4和IPv6。一个双堆栈的计算机有必要的网络软件通过IPv4或IPv6两者之一进行通信。

当然了,通过IPv6无缝地访问完整的互联网需要通用的IPv6设计,这还没有可能。因此工程师已经开发出用于在更大的IPv4网络中连接IPv6网络。

最常见的用于获取远程IPv6连接的方式是使用一个IPv6隧道代理。IPv6隧道的思想是在IPv4中封装IPv6流量。在隧道端点的隧道服务器收到一个IPv6数据包并且将其包装进一个IPv4头部中,传输到另一个提取出原始IPv6数据包的端点并且转发到目的IPv6网络。这种类型的隧道让IPv6网络能够与其他Ipv6网络进行通信。管理员能够实现并且在主网络和分支网络上测试完全的IPv6配置并且使用隧道代理连接部分网络。

https://i.quantuminit.com/a8c425e9376e4b88.svg

有时候网络直接与隧道代理连接来支持IPv6流量和有时候是ISP连接隧道代理然后提供数据包给提供IPv6支持的端用户网络。

6in4 and 6to4

6in4和6to4是隧道技术中的一个。6in4以及6to4隧道技术利用到IPv4的IP头部中的8-bit 协议头部。这个技术在协议头字段中使用值为41来标记一个IPv6隧道数据包。6to4给IPv6数据包提供穿过IPv4网络的方式,甚至是当IPv6网络没有安排一个隧道供应商或支持IPv6的ISP的时候。

6in4需要隧道端点的静态配置。6to4是将IPv4目的地址嵌入到IPv6地址中。前缀为2002::/16的IPv6地址被保留用于6to4。32-bit的IPv4地址连接到这个前缀的末尾,其意思表示IPv6地址的前48 bit表示这个地址是一个6to4的地址并且提供路由通过IPv4网络的IPv4目的地址。后面的16 bit指定用于子网,剩下的64 bit用于在子网中的主机ID。

6to4中继服务器收到这个篡改的IPv6地址,提取出IPv4地址并且在IPv4数据包中封装IPv6数据包,这个数据包被发往目的地址。在数据包的目的地,这个数据包被发往在任播(anycast)地址运行的6to4中继服务器,在这个中继服务器上原来的IPv6数据包被提取出来并且传输。

https://i.quantuminit.com/66ad365e7ca24fd7.svg

因为在协议字段中使用41,6in4和6to4又称为proto-41机制。

TSP

TSP是IPv6隧道技术中的另外一个,该技术允许隧道参数的动态协商。在TSP实际应用中,IPv6网络的端点希望建立一个与TSP服务器通信的连接。服务器与目的网络上潜在的端点协商连接参数,然后允许两个端点建立连接。

在下图中可以看出,TSP最初是关注于协商链接参数并且TSP实际使用时支持许多的潜在的数据包封装协议。在某些情况下,TSP服务器甚至能够使协议适应于网络情况,比如,为了通过NAT设备,将会切换到UDP-based隧道协议。

https://i.quantuminit.com/88acd54e5ff14471.svg

小小的总结

  • 多广播比广播更高效的。多广播中,不在同一个共享一个多广播地址的组的主机,不会读取发送到这个地址的信息。
  • IPv6使用邻居发现服务来解析一个IP地址对应的物理地址,最后建立一个邻居缓存表,这个邻居缓存表相当于IPv4中使用的ARP表。
  • 2002::/16 前缀用于6to4隧道技术。
  • 前缀FE80::/10的IPv6地址是链路本地地址。

上一篇
下一篇