《深入解析IPv6(第3版)》——11.2 过渡机制

11.2 过渡机制

为了与IPv4设施共存并最终过渡到纯IPv6设施,IPv6过渡标准规定了下列机制:

  • 同时使用IPv4和IPv6;
  • IPv6-over-IPv4隧道;
  • DNS设施;
  • IPv6和IPv4之间的流量转换(请参见本章的“流量转换”部分)。

11.2.1 同时使用IPv4和IPv6
在路由设施从纯IPv4过渡到IPv6/IPv4并最终过渡到纯IPv6的这个过程中,无论使用IPv4还是使用IPv6节点必须都能够到达目的。例如,在过渡中,某些服务器中的服务在未来可以使用IPv6可达。然而,对于未升级成同时支持IPv4和IPv6的服务,目前只能使用IPv4到达。所以,主机必须能够同时使用IPv4和IPv6。要在同一节点上同时使用IPv4和IPv6互联网层,这个IPv6/IPv4节点必须包含如下体系结构:

  • 双IP层体系;
  • 双栈体系。
  • 双IP层体系

双IP层体系同时包含IPv4和IPv6的互联网层,但传输层协议(如TCP和UDP)的使用则是单一的。图11-1所示为双IP层体系。

运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的双IP层体系的TCP/IP协议栈中同时包含IPv4和IPv6,如图11-1所示。Tcpip.sys这个Windows驱动程序包含了IPv4和IPv6的实现。运行Windows的节点能创建出下列类型的数据包。

  • IPv4包。
  • IPv6包。
  • IPv6-over-IPv4包(以上这些是用IPv4头部封装了的IPv6包。如需进一步了解相关内容,请参阅本章的“IPv6-over-IPv4隧道”一节)。

图11-2所示为使用了双IP层体系的数据包的类型。

Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista支持双栈套接字(能处理IPv6和IPv4流量),这样双IP层体系就简化了应用程序的开发。而对于Windows Server 2003和Windows XP,支持IPv6的应用程序必须开启两个不同的套接字,一个用于IPv4,另一个用于IPv6。

双栈体系

双栈体系同时包含IPv4和IPv6的互联网层,但是它们处于不同的协议栈中,这些协议栈可以分别实现传输层协议(如TCP和UDP)。图11-3所示为双栈体系。

Windows Server 2003和Windows XP具有双栈体系。IPv4协议驱动文件tcpip.sys包含了IPv4、TCP和UDP(在其他协议中)。IPv6协议驱动文件tcpip6.sys则包含了IPv6和分别实现的TCP和UDP。在安装了IPv4和IPv6协议栈后,运行Windows Server 2003或Windows XP的主机便能够创建出下列类型的数据包:

  • IPv4数据包;
  • IPv6数据包;
  • IPv6-over-IPv4数据包。

图11-4所示为双栈体系的包类型。

https://yqfile.alicdn.com/de745eb6f85380f34550b318a3b83994b717d30e.png" >

尽管Windows Server 2003和Windows XP的IPv6协议不是双IP层的,但它的作用和双IP层的一样,都实现了IPv6的过渡功能。

11.2.2 IPv6-over-IPv4隧道
IPv6-over-IPv4隧道是指使用IPv4头部来封装IPv6数据包,使IPv6数据包能够在纯IPv4架构中传送。在IPv4头部中字段的设置如下。

  • IPv4协议字段设置为41,表示其中封装了IPv6数据包。
  • 源和目的字段设置为IPv6-over-IPv4隧道端点的IPv4地址。本地隧道端点是分配给发送方的IPv4地址。远程隧道端点是分配给目的路由器或中间路由器的IPv4地址。隧道端点是作为隧道接口的一部分手动配置上的,或者是基于目的IPv6地址的下一跳地址和隧道接口自动生成的。
  1. 图11-5所示为IPv6穿越IPv4的隧道。

隧道IPv6流量存在如下问题。

  • 执行数据包过滤的防火墙和路由器必须经过配置,使它们可以接收和转发IPv4协议41流量。否则,设备就会丢弃这类流量。丢弃IPv4协议41流量对于IPv4内联网边缘路由器来说也许正是期望的结果,这可以避免隧道IPv6流量离开内联网。
  • 大部分NAT只能转换TCP或UDP流量,或者必须安装NAT编辑器以处理其他IPv4协议的转换。因为“IPv4协议41转换”并不是NAT的常见功能,因此以IPv4封装的IPv6流量无法流过一般的NAT。

对于IPv6而言,IPv6-over-IPv4的隧道只不过是另一种链路层封装,将只支持IPv4的架构当作链路层,并用类似以太网段的方式处理。因此,整个只支持IPv4的架构可被当作单个逻辑IPv6子网来处理,并且IPv6-over-IPv4的隧道在源和目的之间的路径上充当了一跳。

对于IPv6-over-IPv4的隧道,目的IPv6路径最大传输单元(PMTU)通常比目的的IPv4的PMTU小20。但是,如果没有为每个隧道保存IPv4 PMTU,那么IPv4数据包在中间IPv4路由器中就有可能需要进行拆分。在这种情况下,IPv6-over-IPv4的隧道数据包在发送时必须将IPv4头部中的不可拆分(Don't Fragment[DF])标记设置为0。

注释

IPv6-over-IPv4隧道描述的只是一种使用IPv4头部的IPv6数据包封装,它的作用是让数据包能够穿越支持IPv4的架构。因此,它不同于点对点隧道协议(PPTP)和二层隧道协议(L2TP)虚拟专用网络(VPN)协议的隧道,并不存在用于隧道安装、维护或终止的隧道维护协议。

抓包软件捕获的信息

下面是封装了IPv4头部的ICMPv6 Echo请求消息的路由消息。

Frame:
+ Ethernet: Etype = Internet IP (IPv4)
- Ipv4: Next Protocol = IPv6 over IPv4, Packet ID = 65372,

   Total IP Length = 100
   + Versions: IPv4, Internet Protocol; Header Length = 20
   + DifferentiatedServicesField: DSCP: 0, ECN: 0
     TotalLength: 100 (0x64)
     Identification: 65372 (0xFF5C)
   + FragmentFlags: 0 (0x0)
     TimeToLive: 128 (0x80)
     NextProtocol: IPv6 over IPv4, 41 (0x29)
     Checksum: 60987 (0xEE3B)
     SourceAddress: 157.54.138.19
     DestinationAddress: 157.60.136.82
- Ipv6: Next Protocol = ICMPv6, Payload Length = 40

  + Versions: IPv6, Internet Protocol, DSCP 0
   PayloadLength: 40 (0x28)
   NextProtocol: ICMPv6, 58(0x3a)
   HopLimit: 128 (0x80)
   SourceAddress: FE80:0:0:0:0:5EFE:9D36:8A13
   DestinationAddress: FE80:0:0:0:0:5EFE:9D3C:8852
   + Icmpv6: Echo request, ID = 0x0, Seq = 0x11

注意,IPv4头部的协议字段表示了这是IPv6数据包。在这个例子中,IPv6数据包通过链路本地ISATAP地址寻址,使ICMPv6回送请求消息通过隧道穿越只支持IPv4的基础结构。
11.2.3 DNS架构
由于当前人们往往使用域名而不是非地址来调用网络资源,因此实现成功的共存需要借助DNS架构。对于IPv6而言,由于绝大多数计算机用户并不熟悉IPv6地址的格式,它的长度也十分不便于日常使用,因此将域名解析成IPv6地址是非常必要的。为IPv6升级DNS架构,包括向DNS服务器中添加用于执行从域名到IPv6地址解析的AAAA记录和用于执行IPv6地址到域名解析的PTR记录。在主机通过DNS域名查询获得了一组地址后,它必须选择使用哪对源目的地址来进行通信。

地址记录

为了将完全限定域名(FQDN)成功解析为地址,DNS架构中必须包括如下资源记录(手工添加或动态配置皆可):

  • 纯IPv4节点和IPv6/IPv4节点的A记录;
  • 纯IPv6节点和IPv6/IPv4节点的AAAA记录。

指针记录

为了将地址成功解析为FQDN,DNS架构必须包括如下资源记录(手工添加或动态配置皆可):

  • 纯IPv4节点和IPv6/IPv4节点的IN-ADDR.ARPA域中的PTR记录;
  • 纯IPv6节点和IPv6/IPv4节点的IP6.ARPA域中的PTR记录。

地址选择规则

IPv6主机可以分配多个IPv6地址,也可以从DNS名称查询中获取到多个IPv6地址。基于这两组地址,IPv6主机必须判断出每个可能的目的地址所使用的最佳源地址,并得出一个按优先级顺序的目的地址列表。这就是定义在RFC 3484中的源和目的地址选择的目的。

默认地址选择规则是通过前缀策略表来确定的,对于Windows中的IPv6协议而言,这个表可以通过Windows PowerShell中的命令Get-NetPrefixPolicy(仅适用于Windows Server 2012和Windows 8)或netsh interface ipv6 show prefixpolicies 命令来进行查看。可以使用netsh interface ipv6 add|set|delete prefixpolicy命令以修改前缀策略表中的条目。

时间: 2024-11-28 14:15:09

《深入解析IPv6(第3版)》——11.2 过渡机制的相关文章

《深入解析IPv6(第3版)》—— 导读

前言 由于下列事件,IPv6对于未来因特网和组织内联网的重要性已毋庸置疑. 2011年2月3日,互联网名称与数字地址分配机构(ICANN)加入了数字资源组织(NRO),因特网结构委员会(IAB)和互联网协会(Internet Society).这一天,ICANN宣称,IPv4因特网地址当前已经全部被分配了出去.区域地址分配机构仍然有一些公有IPv4地址空间可以分配给各个组织机构,但是再也没有保留的IPv4地址空间了. 2011年6月8日,Microsoft与因特网协会的其他成员共同参加了世界IP

《深入解析IPv6(第3版)》——1.4 IPv4和IPv6的对比

1.4 IPv4和IPv6的对比 表1-1罗列显示了IPv4和IPv6间的一些主要差异. https://yqfile.alicdn.com/10ef09f92df649a765abf560bd433d6113d9476b.png" >

《设计模式解析(第2版•修订版)》目录—导读

作者简介 设计模式解析(第2版•修订版) Alan Shalloway 美国Net Objectives咨询/培训公司的创始人和CEO.他是麻省理工学院的计算机科学硕士,具有30多年面向对象咨询.培训和软件开发的经验,并经常受邀在重要的软件开发会议(包括SD Expro.Java One.OOP和OOPSLA)上演讲. James R. Trott 美国一家大型金融机构的资深顾问.他是应用数学科学硕士.MBA和跨文化研究硕士.在其20年的职业生涯中,他一直将面向对象和基于模式的分析技术运用在知识

《设计模式解析(第2版•修订版)》—第1章 1.4节应对变化:使用功能分解

1.4 应对变化:使用功能分解设计模式解析(第2版•修订版)用模块化封装变化 更进一步地来看"显示形状"问题.怎样编写代码才能更容易地应付多变的需求呢?与其编写一个大函数,不如使之更加模块化. 例如,在前面提到的步骤4c"以形状的位置作为参数,调用显示形状的函数"中,可以写一个例1-1所示的模块. 例1-1 用模块化封装变化 函数:显示形状输入:形状类型,形状描述操作: switch (形状类型) case 方形:调用显示方形的函数 case 圆形:调用显示圆形的函

《设计模式解析(第2版•修订版)》—第1章复习题

复习题设计模式解析(第2版•修订版)简答题1.叙述功能分解中使用的基本方法. 2.导致需求变更的三个原因是什么? 3.我提倡用责任而不是功能来思考.这意味着什么呢?请举出一个例子. 4.给出耦合和内聚的定义.什么是紧耦合? 5.对象接口的目的是什么? 6.给出类实例的定义. 7.类是一个对象行为的完整定义.这句话说明了对象的哪三个方面? 8.抽象类的作用是什么? 9.对象可能具有的三种主要可访问性1是什么? 10.给出封装的定义,并举出一个行为封装的例子. 11.给出多态的定义,并举出一个多态的

实例解析IPv6环境下的网络编程

自IPv4诞生至今已有20多年了,目前它虽仍因互联网的成功而风光无限,但是如同"Internet正在成为其自身巨大成功的受害者"一样,目前IPv4地址的极度匮乏注定它将被历史所淘汰.而IPv6-IPv4的继承人,具有地址空间巨大,支持QOS等许多优良特性,在不久的将来会迅速的普及,但IPv6的出现将对目前网络编程方式产生一定的影响. 本文将就IPv6环境下的网络编程方式进行实例解析. 最终效果: 实例解析IPv6环境下的网络编程-配置篇 目前我们所用的IP协议是v4版本的, 比如192

《设计模式解析(第2版•修订版)》—第1章 1.6节面向对象范型

1.6 面向对象范型 设计模式解析(第2版•修订版) 使用对象将责任转移到更局部的层次 面向对象范型以对象概念为中心,一切都集中在对象上.编写代码时是围绕对象而非函数进行组织的. 对象是什么?对象传统上被定义为带有方法(面向对象领域称呼函数的术语)的数据.糟糕的是,这是一种非常有局限性的对象观.稍后我会给出一个更好的对象定义(在第8章中还会谈到).我说到对象的数据时,可能指数值和字符串这样的简单事物,也可能指其他对象. 使用对象的优点在于,可以定义自己负责自己的事物(参见表1-2).对象天生就知

《设计模式解析(第2版•修订版)》—第1章 1.2节面向对象范型之前:功能分解

1.2 面向对象范型之前:功能分解 设计模式解析(第2版•修订版) 功能分解是一种处理复杂问题的自然方法 让我们从对一种常用的软件开发方法的考察开始吧.如果给你一个任务,要编写一段代码,访问在数据库中存储的形状描述然后显示出来.按照所需要的步骤来思考,是一种很自然的选择.比如,你可能认为应该按照以下步骤解决这个问题. 1.在数据库中找到形状列表. 2.打开形状列表. 3.按某种规则将列表排序. 4.在显示器上显示各个形状. 还可以选取以上任意一个步骤,进一步分解成实现所必需的若干步.例如,可以将

《设计模式解析(第2版•修订版)》—第2章 复习题

复习题 设计模式解析(第2版•修订版)简答题 1. is-a关系和has-a关系之间的区别是什么?两种"关联"关系又是什么? 2.在类图中,类是用方框表示的,可以有三部分.请描述这三部分. 3.给出重数的定义. 4.顺序图的用途是什么? 阐述题 1. 给出is-a关系和两种"关联"关系的例子.对这些例子: (1) 在类图中画出: (2) 在类图中显示重数. 2.图2-8是一个顺序图.此图中显示了多少步骤?显示了多少对象,都是哪些对象? 3.当对象互相交流时,为什么说