深入解析IPv6(第3版)

978-7-115-33581-4
作者: 【美】Joseph Davies
译者: 汪海霖
编辑: 傅道坤

图书目录:

详情

本书讲解了具体应用IPv6技术时涉及的技术信息,以及IPv6在Windows中的具体实现,其中包括IPv6的特性、包接收和协议处理过程等内容,通过本书的学习,读者可以掌握IPv6的工作原理,以及如何在网络部署中使用IPv6内置的服务。

图书摘要

版权信息

书名:深入解析IPv6(第3版)

ISBN:978-7-115-33581-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美]Joseph Davies

  译    汪海霖

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Copyright @ 2012 by Microsoft Corporation.

All rights reserved.

Original English language edition Understanding IPv6, Third Edition by Joseph Davies.

Published by arrangement with the original publisher, Microsoft Corporation, Redmond, Washington, U.S.A.

本书原版由微软出版社出版。

本书简体中文版由微软出版社授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。

此版本权限在中华人民共和国境内(不包括中国香港、澳门特别行政区及中国台湾地区)销售发行。

版权所有,侵权必究。


本书详细讲述了IPv6(Internet Protocol version 6)的概念、原理与实现过程,并结合微软公司主流的操作系统(Windows Server 2012、Windows Server 2008、Windows 8和Windows7等)讲解了IPv6的具体实现与应用方法。

本书分为20章和8个附录,其内容涵盖了IPv6的基本概念、IPv6编址、IPv6报头的分析、IPv6中使用的协议、IPv6过渡技术、IPv6安全等知识,并结合IPv6在Windows 环境中的配置、实施示例,进一步阐释了IPv6的功能,及在Windows中的用途。本书附录内容还囊括了与IPv6相关的RFC文档索引、每章最后的理解测试答案,以及更多IPv6的延伸内容(比如IPv6字段介绍、IPv6链路层支持、Windows为了同时支持IPv6和IPv4做出的改进、移动IPv6、Teredo协议进程等),以帮助读者更加深入地理解掌握IPv6在Windows中的应用。

本书适合Windows网络顾问、设计师、Windows网络管理员、微软认证系统工程师、微软认证系统培训师阅读,也可作为网络管理、软件开发及测试等计算机专业课程的教材。


当Joe第一次请我为他的《深入解析IPv6》最新版本作序时,我参考了本书先前版本乃至很多其他网络技术图书的序言,希望能够从中获得一点灵感。原因不言自明,与Joe相比,我的文字功底相形见绌。

然而,阅读前作让我获益颇丰,因为这让我清晰地感知到了最近这些年来的变化。微软公司在IPv6——下一代因特网协议——问世伊始便对这项技术提供了支持。我们把IPv6的支持内建在Windows协议栈中,并重新打造了我们的平台以便让开发人员能够更好地利用IPv6,在过去的10年间,在支持IPv6的事业上,公司的步伐从未停歇。

因特网协议(IP)是因特网的一项路由与传递技术,是我们这个时代计算机体系结构中规模最大也最为重要的组成成份。而IPv6的作用就是让互联网变得更好,它可以让主机之间更加直接地建立连接,无论是家庭成员之间的视频聊天还是数据中心之间的业务信息往来的增加都可以从中得益。

我们不断提醒着每一个人:实现IPv6的最终利益是我们的承诺。我们这样做的原因很多。我们为自己的工作骄傲,因为这份工作让我们有幸能够为技术的变革尽一份绵薄之力。但更为重要的是,我们这样做也是在传播一种福音,是为了向我们的顾客、我们的合作伙伴和我们的读者保证,IPv6是一项值得去关注和采用的技术。

然而很多年来,这都是一项艰巨的任务。人们不希望使用IPv6。各种延长IPv4使用周期的策略开始成长并大行其道(比如大规模网络地址转换等),这些技术威胁到了IPv6技术的采用,尽管使用IPv6仍将是大势所趋。这些都是事实。网络行业中有些人也许想要篡改过去10年的历史,他们强调IPv6的使用给路由设备带来了损害,强调IPv6的软件资源有限,强调IPv6的风险,强调IPv6在性能和安全性方面的问题,强调IPv6带来的财政开销,强调IPv6 Zombie(僵尸)问题,等等。

这些负面因素确实一度存在,但都已作古。在过去的24个月里,我们在对因特网升级换代方面已然迈出了巨大的一步。IPv6再也不是下一代的因特网协议了,它就是属于我们现在这个时代的因特网协议。

2012年的“World IPv6 Launch”活动具有里程碑意义,它标志了协议过渡过程中这一转折点式的时刻。在你阅读这本的时候,这个世界上很多最重要的Web服务(不只是微软公司,而是整个技术社区)已运行在IPv6互联网环境中。成百上千万的用户已经在用支持IPv6的计算机通过IPv6及其服务相互交流。应用程序、操作系统、路由设备、ISP乃至网络服务都已不再处于整装待发的状态,它们已经行走在IPv6的康庄大道上。

本书的所有版本,始终是IPv6最为权威的参考读物。它是每一位对网络技术感兴趣的人理解因特网协议及其演变过程的最好载体。但是在阅读这本书的过程中,我希望读者不只具备了理解并使用IPv6来搭建网络的技术能力,同时也对于你们身边的变化有了更加清晰的感知。无论在进行网络搜索,与朋友一起玩网络游戏,还是访问工作资源,所有这些都正在越来越多地成为IPv6应用的历史。

在谈到IPv6的历史时,我们总是想起我们的承诺,那就是保证用户不会在日常使用中发觉到任何的变化,或者由于网络的迁移而必须重新掌握某些操作方法。无论通过IPv4还是IPv6建立连接,这都不应该对用户构成影响。用户的互联网使用体验始终应该是高速、可靠和愉快的,而IPv6环境能够带来的唯一感受的就是:网络变得比过去更好了。

但在读完本书之后,读者不会仅仅注意到这些表层的感受。所有构成了IPv6和因特网演化过程的细节、标记甚至比特位,都会变得非常清晰。

互联网正在从最基础的层面,经历着一次不同步的、发散式的、不断变化的发展过程。这个变化不仅仅包含软件和硬件的变化,它也包括了从业者、用户、设计者和软件开发者的变化。

通过理解IPv6以及这次变革,你们也可以为它的变化做出自己的努力。而你们的职业生涯亦将在这一技术变革中成为某项更为伟大事迹的组成部分。

谢谢你们,祝你们好运。

Chris Palmer

微软公司IPv6项目经理


此书的第一版始于1999年春,当时我制作了一些幻灯片,并向4位学生讲授了华盛顿贝尔文社区学院举办的Introduction to IPv 6课程。尽管结果与期望并不一致,但学习IPv6所花的时间、制作幻灯片的过程以及向这些好奇的学生展示IPv6技术,这一切都为我积累了宝贵的经验,并为将来的努力打下了坚实的基础。

在2000年,作为一位Windows领域的技术作家,我编写了Introduction to IP version 6白皮书(这个内容通过微软Windows IPv6网站www.microsoft.com/ipv6进行了发布),自那时起,我便开始投身于所有与IPv6有关的文档写作工作中。我也制作并发布了一个名为IPv 6 Overview的内部课程(其中Tom Fout在Windows套接字方面给我提供了很多帮助)。这个为期一天的课程在2000年10月开始向微软软件设计师、软件测试师、程序主管以及技术文档撰稿人传授。

此后,我开始向技术内容开发的项目主管过渡,这使我有更多的时间、精力和经验能够将IPv6 Overview课件和许多其他的关于IPv6的白皮书及文章变成Understanding IPv6,(Microsoft Press,ISBN 978-0735612457),即本书的第1版。在这本书面世的2002年11月到2008年1月期间,我仍在继续开发IPv6的相关内容,对Windows XP发布的IPv6技术,以及Windows Server 2008和Windows Vista发布的IPv6技术提供支持(这些版本的系统已经将IPv6技术完全集成到了服务和应用程序中)。所有上述努力最终成就了这本书的第2版。

在2008年1月到2012年5月,我继续紧跟IPv6技术在Windows系统中的演化,从Windows 7和Windows Server 2008 R2(包含了DirectAccess的具体设计、部署和排错方法)到Windows Server 2012和Windows 8。这些内容全部包含在了本书的第3版中。

我深切地希望,从1999年春开始的工作到最后能够凝聚成一本条理分明、文字流畅的作品,让读者得以从中学会并理解IPv6的概念、原理及过程。

——Joseph Davies


由于下列事件,IPv6对于未来因特网和组织内联网的重要性已毋庸置疑。

接受、学习并理解IPv6的时刻已经到来了。

根据这一需求,本书直接对IPv6的概念、原理和进程进行了讨论,并介绍了Microsoft Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7以及Windows Vista操作系统是如何支持IPv6协议的。注意,本书并不会对上述Windows系统IPv6协议编程代码层面的内容(比如结构、表、缓冲和代码)进行介绍。这些内容都属于受到严格保护的微软知识产权,而且这类信息只对少数软件开发人员有帮助。不过,本书包含了在上述Windows系统中,IPv6如何服务于所描述的进程,以及如何使用Windows PowerShell和Netsh.exe命令行、组策略设置以及注册表值来修改系统默认的行为。

本书旨在为读者提供一个教育媒介。通过这个媒介,读者可以将IPv6学习到一定的深度(学习到关于IPv6的术语、地址、协议和进程等),帮助读者在内联网中规划、部署和操作IPv6的环境。


注释

本书的内容反映了IPv6的互联网标准,以及在Windows Server 2008 R2、Windows Server 2008、Windows 7、Windows Vista系统以及Windows Server 2012和Windows 8系统Preview(前瞻)版本中,IPv6协议的特性集。如需了解互联网标准的变化以及IPv6在Windows Server 2012和Windows 8 Preview之后版本中的变化,可以访问微软的Windows IPv6页面:http://www.microsoft.com/ipv6

本书适合下列类型的读者阅读。

本书假设读者拥有基本网络概念,对于广泛使用的网络技术有所了解,同时具备TCP/IP协议族方面的知识。为了让读者能很好地过渡到IPv6,作者尽可能把IPv6和IPv4中的对应功能、行为或组件进行了对比。

如果要打下坚实的TCP/IP协议族的知识基础,作者建议阅读拙著Windows Server 2008 TCP/IP Protocols and Services(Microsoft Press,2008)。那本书中的内容也是与实现方式无关的协议和进程。作为它的作者,我可能带有一些偏见。不过,在撰写本书时,作者始终在回忆Windows Server 2008 TCP/IP Protocols and Services的内容,本书也可以说是在其基础之上写作而成。

在本书的这一版本中,作者将不同的章节分成了几个部分,每一部分中所包含的章节均建立在先前章节的基础之上,由此形成了一个逻辑上的递进关系。比如,如果读者不了解IPv6编址、IPv6数据包头部以及ICMPv6,那么也就很难理解邻居发现的进程。同样,如果不清楚IPv6编址、邻居发现进程、域名解析和路由选择,也就几乎不可能理解IPv6过渡技术。这些章节最后都会引出设计部署方案的内容,而这部分内容则需要读者对此前很多章节的基本内容都具有充分的了解。

本书包含以下附录。

本书的配套内容可以通过访问以下地址http://go.microsoft.com/FWLink/?Linkid=253018来获得,其内容如下所示。

查看本书的抓包文件(*.cap)必须安装Microsoft Network Monitor 3.4或后续版本。可以通过访问如下链接来安装Microsoft Network Monitor 3.4:http://blogs.technet.com/b/netmon/

Windows系统有很多版本的Microsoft IPv6 协议。在本书中,作者通过遴选,只对Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista系统中的IPv6实现方法进行了介绍。除了为了和最新版本Windows系统中的IPv6协议进行对比之外,本书一般不会介绍此前Windows版本中的IPv6协议。

本书是由课件演化而来,很多地方都保留了一些课件的特征,包括在每章开头阐述这一章的主题,以及在每一章结尾提供一系列复习题等。如果你是需要向学生灌输IPv6协议和进程的相关知识,强烈建议你选择这本书来使用,这本书有配套的培训幻灯片可供使用,附录C中的IPv6测试实验也可以作为IPv6课程的教学基础。

本书的配套培训幻灯片可以作为各个讲师自己制作的培训幻灯片的基础内容。其中包含的幻灯片中带有重点文本内容,或作者最初制作的PowerPoint幻灯片,这些内容均与各章节内容同步。由于幻灯片完成于本书搁笔之后,因此幻灯片和书中内容略有不同。这些区别对于教授按照本书教授IPv6课程更有帮助。

作者有意为幻灯片所选择了比较简单的模板,这样当你们想要使用一个不同的模板时,文字和图片就不会带来太多的问题。欢迎您根据自己的需要来修改这些幻灯片。

如果读者正在设计一个独立于实施方法的IPv6技术课程,建议跳过本书的第2章,并将附录E放在第4章之后阅读。

对于实践操作环节,作者鼓励读者按照附录C中所述的方法来搭建IPv6测试实验室。具体的方法可以是让每人操作一台服务器设备,同时让这台设备建立一个5台计算机的虚拟环境。所得的测试实验环境可以用来执行实际的配置操作;可以使用Network Monitor来对IPv6网络流量进行分析(根据本书配套内容中提供的捕获数据包或者在测试实验子网中捕获的流量);可以测试IPv6过渡技术以及从纯IPv4网络到纯IPv6网络的迁移过程;也可以执行应用程序的开发和测试。

作为一名讲师,作者希望你们的付出能够让你们大获成功,将这项既有趣而又重要的新技术传授给更多的人。

本书已经尽最大可能保障在其出版之日,相关的IPv6标准、IPv6实现方法,乃至在Windows Server 2008 R2、Windows Server 2008、Windows 7、Windows Vista以及Windows Server 2012和Windows 8的Preview(前瞻)版本中相关信息的信息是正确无误的。在Windows Server 2012和Windows 8 Preview版本的后续版本中所进行的修改,以及之后对IETF标准所进行的修改都无法在本书中得到体现。

读者如果需要获取IPv6 IETF标准的最新信息,可以访问IETF的网站http://www.ietf.org

我要感谢以下参与了本书第3版各个章节及附录技术审校工作的微软员工:Vivek Bhanu、Onur Filiz、Firat Kiyak、Darene Lewis、Bill Murray、Chidambaram Muthu、Tim Quinn、Pat Telford、Ben Schultz、Sean Siler和Jeromy Statia。我要特别感谢IPv6项目经理Christopher Palmer为本书作序。我还要向Dmitry Anipko致以崇高的敬意,他是Windows网络核心开发小组的软件开发工程师,在基于标准的IPv6以及Windows Server 2012和Windows 8的IPv6的实现细节方面给了我极其细致的反馈。

我还要感谢Ken Jones(O'Reilly Media的资深编辑);感谢我的老同事和IPv6拥趸Ed Horley(技术编辑),他就当前IPv6产业趋势以及考量因素方面给我提供了巨大的帮助;感谢Holly Bauer(O'Reilly产品编辑)和Richard Carey(文字编辑),没有他们就没有这本书的问世。

最后,我要感谢我的妻子Kara和女儿Katie,感谢她们在我写作的最后几个星期无法待在她们身边时,所展现出来的耐心和宽容。


在完成本章的学习之后,读者应该能够完成以下任务:

自RFC 791(1981年)发布以来,当前的IP版本(即第4版或IPv4)再未发生过什么本质上的变化。事实证明,IPv4是一个功能强大、部署简单且可交互的协议。它经受住了网络规模由局部互联到全局互联这一重大变迁的考验。这是对IPv4最初设计方案的莫大肯定。

然而,IPv4最初的设计方案并没有把下列情况考虑在内。

为了能够解决上述问题及其他相关问题,IETF指定了一系列协议和标准,称为IP版本6(IPv6)。这个新的IP版本(曾被称为下一代IP[IPng])吸取了很多改善IPv4协议的推荐方法。它尽可能从设计上降低了对上层和底层协议可能产生的影响,并避免人们随意为其添加新的特性。

由于IPv4的地址相对比较稀缺,人们只得通过部署NAT来复用IPv4的私有地址空间。在一些配置方案中,在客户端和Internet之间甚至存在多级NAT结构。尽管NAT的确能够让更多的客户端连接到Internet中,但是它也会造成流量瓶颈,并对某些类型的通信造成困难。

让我们考虑一下NAT的运行方式并解释一下为什么网络地址转换是一种扩展性不强的临时替代方案,而且这种方案会对端到端的通信造成不良影响。

例如,如果某个小企业使用了192.168.0.0/24这个私有IPv4地址前缀作为公司的内网地址,而Internet服务提供商为其分配的公共IPv4地址为131.107.47.119。这个企业于是在网络的边缘部署了NAT,将所有位于192.168.0.0/24的私有地址都映射为131.107.47.119的公有地址。于是,NAT会动态选择TCP或UDP端口来将内部数据流映射为外部数据流。图1-1所示为这个配置的示例。

图1-1 NAT示例

如果一台私有主机分配到了IPv4地址192.168.0.10,这台主机使用Web浏览器来连接位于157.60.13.9的Web服务器,那么这个私有主机就会创建以下这个IPv4数据包。

然后,这个IPv4数据包就会被发送给NAT,而NAT会将出站数据包的源地址和源TCF端口号转换为:

NAT会将{192.168.0.10 TCP 1025}与{131.107.47.119 TCP 5000}之间的映射关系保存在一个本地转换表中,以备将来调用。

转换后的IPv4数据包会在互联网中进行传输,Web服务器会发送响应消息,这个消息随后被NAT接收到。这个接收到的消息包含的信息为:

NAT会查找转换表,并找出初始数据包发送过来时所创建的那个条目,然后根据这个条目来转换数据包的目的地址和目的TCP端口,并将数据包发送给主机192.168.0.10。发送出去的数据包包含的信息为:

对于NAT的出站数据包,它的源IPv4地址(私有地址)会被映射为ISP分配的地址(公有地址),而它的源TCP/UDP端口号则会被映射为不同的TCP/UDP端口号。对于NAT的入站数据包,它的目的IPv4地址(公有地址)会被映射为原先的内部地址(私有地址),而它的目的TCP/UDP端口号则会被映射回原先的TCP/UDP端口号。

一般的网络地址转换依靠如下方法实现。

地址和端口转换会降低NAT的转发性能,这是因为NAT必须为每个数据包分别执行上述额外的操作。因此,NAT往往不会被部署在大型环境中。不过,最新开发的标准(如运营商级NAT[CGN])承诺可以将NAT扩展到大型企业或ISP环境中。

若要修改IPv4包中除了地址以及端口以外的内容,NAT需要执行额外的处理过程,同时还需要额外的一个程序组件,叫做NAT编辑器(NAT editor)。不过,万维网(WWW)上传输的HTTP(超文本传输协议)流量不需要NAT编辑器,因为所有的HTTP传输仅仅需要进行地址和TCP端口转换。然而,以下情况都需要使用到NAT编辑器。

大多数传输都能过穿越NAT技术,因为数据包要么只需进行地址或端口转换就可以满足转换需求,要么就会有NAT编辑器来正确地修改有效负载。不过,仍然有些传输是无法穿越NAT的。比如,如果需要转换的数据位于数据包中加密的部分,就无法对其进行转换。因为,地址或端口转换会破坏IPSec保护的数据包的完整性。目前,IPSec NAT-T(NAT-Traversal)技术可以对某几类IPSec保护的数据包进行NAT转换,它是当前的互联网标准。

除此之外,NAT还存在一个问题,那就是它会对对等体之间的应用造成影响。在对等体之间进行通信的过程中,每一个对等体扮演的角色既是客户端,又是服务器,并且都会向对端发起通信。如果其中某个对等体在NAT身后,那么它有出现了两个地址:一个是在NAT身后的地址(即私有地址);另一个是在NAT前的地址(即公有地址)。

请看下面一个简单的网络拓扑,在这个配置中NAT就会导致对等体之间的应用出现问题。图1-2所示为一个在边缘部署了NAT的内联网。

图1-2 NAT与对等体到对等体的应用

由于所有主机都运行了对等体间的应用,因此主机A就可以向主机B(直连)与主机C发起会话。但是,主机A无法将主机B的公有地址和端口号告知主机C,因为主机A自己也不知道。同样,主机C也无法发起与主机A或主机B的会话,因为没有现成的转换条目可以将入站的连接请求数据包转换为主机A的私有地址和端口号。即使有转换表,主机C也不一定能发起与主机A与主机B的会话,因为在它看来,这两台主机使用的是同一个IPv4地址。

更麻烦的一点是,目前很多Internet对等体都位于NAT的身后。为了解决这个问题,对等体间应用或多方通信应用(multiple-party application)就必须有能力感知到NAT的存在,或者它们必须使用某些NAT穿越技术,而这无疑会让问题变得更加复杂。同样,一些可以感知NAT的程序都会使用一台回声服务器(echo server)来自动发现自己的地址和端口号,但为了在Internet上部署和维护回声服务器,独立软件供应商(Independent Software Vendor, ISV)就不得不增加开支。

NAT只是延长IPv4公有地址寿命的权宜之计,而不是IPv4公有地址空间问题的最终解决方案。NAT只有在客户端设备位于NAT之后,需要向服务器发起会话,建立客户端/服务器模式的通信时,才能很好地发挥其复用私有地址空间的功效。而大部分服务器设备仍需要明确的公用地址。服务器也可以置于NAT之后,但是这样的话,就必须为NAT手动配置一个静态的转换条目表,以便将入站数据包转换给服务器的内部地址和端口。由于在对等体之间的通信中,每个点既是客户端又是服务端,因此,被NAT分隔在两边的对等体就未必能够正确地进行传输,因此这些应用必须具备可感知NAT的能力。

下面对IPv6协议的特性进行了归纳:

IPv6头部格式经过了全新的设计,其目的是提高处理头部信息的速度。为了实现这一目的,一些不重要的字段和扩展字段都被放到了IPv6头部之后的扩展头部中。由于IPv6头部信息得到了简化,因此中间路由器就能够更高效地处理这些信息了。

IPv4和IPv6头部不能同时使用。IPv6不是兼容了IPv4的超集。因此,主机和路由器必须采用一个IPv4和IPv6通用的实施方法才能同时识别和处理这两类数据包头部。新的IPv6的基本头部只有IPv4的两倍大,却提供了4倍于IPv4地址的位数。

IPv6的源地址和目标地址的长度为128位(16字节)。虽然128位的地址已经能够表示出超过3.4 × 1038种组合,但IPv6巨大的地址空间仍然被设计为可以进行多层子网划分与地址分配,以满足从Internet主干网到某个公司子网的不同需求。

即使不包括目前已分配给主机的那部分地址,IPv6仍然有大量地址可供将来使用。而有了如此广大的可用地址空间,NAT这类地址转换技术就再无用武之地了。

为了简化配置,IPv6同时支持状态化化地址配置(如存在IPv6的DHCP [即DHCPv6]服务器的情况)和无状态地址配置(如没有DHCPv6的情况)。在无状态地址配置中,链路上的主机可以使用链路的IPv6地址(称为本地链路地址)、IPv6过渡地址以及用本地路由器发布的前缀生成的地址,来自动配置自己的地址。

无状态和状态化的地址配置可以同时使用。即使在没有路由器的情况下,同一链路上的主机仍然可以使用本地链路地址来自动配置自己的地址,并在没有人工设置的情况下进行通信。本地链路地址能在数秒内完成配置,并立即和链路上相邻节点进行通信。相比之下,一些用DHCP的IPv4主机则必须等上几分钟的时间才能完成DHCP的配置和自已的IPv4地址配置。

完整的IPv6协议必须支持IPSec头部。这就为网络保护方面的需求提供了标准化的解决方案,也为不同IPv6协议程序之间的互操作提供了便利。IPSec包含两类扩展头部和一个协商安全参数的协议。认证头部(Authentication Header, AH)的作用是负责确保数据的完整性,并对数据进行认证,同时保护(除了IPv6头部中必然会在传输中改变的那些扩展字段之外的)整个IPv6包。封装安全负载(Encapsulating Security Payload, ESP)头部和尾部则负责保障数据的完整性和机密性,对数据进行认证,同时保护ESP封装的负载。用来协商单播通信的IPSec安全设定值的协议往往是IKE(Internet密钥交换)协议。

然而,处理IPSec头部无法从本质上确保IPv6更加安全。IPv6数据包可以无需IPSec的保护;反之,IPSec也不是部署IPv6所必需使用的协议。此外,IPv6标准不需要使用某种程序来支持某些特定的加密方法、哈希方法或协商协议(如IKE)。

IPv6头部通过新的字段定义了如何处理和识别数据流。数据流会通过一个“通信类别(Traffic Class)”字段进行排序,这有点像在IPv4中指定DSCP。IPv6头部中的“流标签(Flow Label)”字段使路由能够识别并对那些属于某个流的数据包(源和目的间的一系列数据包)进行特殊处理。由于这些流量是通过IPv6头部中的信息进行标识的,因此即使包负载通过IPSec和ESP进行了加密,也能实现有序发送。

IPv6中的邻居节点发现协议是一系列用于管理邻居节点(相同链路上的节点)间交互的IPv6 Internt控制消息协议(Internet Control Message Protocol for IPv6, CICMPv6)消息。邻居节点发现协议使用的是拥有高效的组播[1]和单播邻居节点发现消息,这个协议取代了地址解析协议(ARP)(基于组播)、ICMPv4路由发现和ICMPv4重定向消息,是这些协议的扩展和延伸。

只要在IPv6头部后面添加扩展头部,就可以轻松地对IPv6进行扩展。这不像IPv4头部中的可选字段那样只支持40字节,IPv6扩展头部的大小仅受限于IPv6数据包自身的大小。

表1-1罗列显示了IPv4和IPv6间的一些主要差异。

表1-1 IPv4与IPv6间的差异

IPv4

IPv6

源地址和目的地址长度均为32位(4字节)

源地址和目的地址长度均为128位(16字节)。更多内容请参阅第3章

对IPSec头部的支持为可选

对IPSec头部的支持为必需。更多内容请参阅第4章

当前的IPv4头部中,没有为路由器对数据包按照优先级发送提供标识

IPv6头部为路由器对数据包按照优先级发送提供了标识,即流标识字段。更多内容请参阅第4章

主机和路由器都要对数据包进行分片,因而会降低路由器的性能

仅主机会对数据包进行分片,请参阅第4章

对于链路层的数据包大小没有要求,并且必须将数据包重组为576字节

链路层必须支持1280字节的数据包,且能重组1500字节的包。更多内容请参阅第4章

头部中包含校验和

头部中没有校验和。更多内容请参阅第4章

头部包含可选项

所有可选项都被转移到了IPv6扩展头部。更多内容请参阅第4章

ARP使用组播ARP请求帧(ARP Request frame)来将IPv4地址解析为链路层地址

ARP请求帧被组播的邻居节点请求消息所取代。更多内容请参阅第6章

使用Internet组管理协议(Internet Group Management Protocol, IGMP)来管理本地子网成员

IGMP被组播侦听发现(MLD)信息所取代。更多内容请参阅第7章

使用ICMP路由发现(Router Discovery)消息来判断最佳默认网关的IPv4地址,且为可选功能

ICMPv4路由发现被ICMPv6路由请求和路由通告(ICMPv6 Router Solicitation and Router Advertisement)消息所取代,且为必备功能。更多内容请参阅第6章

用广播地址将流量发送到子网的所有节点

IPv6没有广播地址的概念。它使用的是链路本地范围所有节点组播地址。更多内容请参阅第3章

必须手动配置或通过IPv4的DHCP进行配置

不需要手动配置,也不需要IPv6的DHCP来进行配置。更多见容请参阅第8章

使用域名系统(Domain Name System,DNS)中的主机地址(A)资源记录来将主机名映射为IPv4地址

使用DNS中的AAAA记录来将主机名映射为IPv6地址。更多内容请参阅第9章

使用在INADDR-ARPA DNS域中的指针资源记录来将IPv4地址映射为主机名

使用IP6-ARPA DNS域中的指针资源记录来将IPv6地址映射为主机名。更多内容请参阅第9章

以下所列网络要素和概念的基本术语可以为后续的章节打下基础。图1-3所示为一个IPv6网络。

图1-3 IPv6网络的构成

IPv6常见的术语和概念定义如下。

图1-4所示为支持IPv6的组织网络及其与IPv4和IPv6 Internet的关系。

图1-4 一个支持IPv6的网络与IPv4和IPv6 Internet

图中所示站点为一个自主操作的、基于IP的、连接到IPv6互联网的网络。组织网络的寻址以及路由规则由该站点的网络设计师和管理员决定。一个组织可以有多个站点。连接到IPv6网络的方式可以是以下两种类型中的任意一种。

如需进一步了解关于站点使用IPv6地址前缀的内容,请参阅第3章。如需进一步了解如何将组织网络连接到IPv6 Internet,请参阅第16章。

尽管IPv6协议提供了许多技术进步和创新,但对它的应用仍然需要来自商业角度的考验,并由终端用户组织和ISP的IT职员进行部署。在网络架构中部署支持本地IPv6[2]的环境需要规划并设计好(它与IPv4的)并存性和迁移策略,以及软硬件的安装和维护方式。综合考虑IT员工、软硬件资源、迁移所需时间等因素,特别是要考虑到其他更显而易见的或者在短期内更有利可图的新兴技术,这些对于评估是否在本地部署支持IPv6的网络意义重大。

还有一点必须加以考虑,那就是Internet这项技术,从一个用于连接教育机构和美国政府部门的近乎私有的网络发展到如今,成为了一个不可或缺的全局通信媒介、一个提升商业组织与个人的效率与产量的不可少的因素、一个全局经济动力的重要组成部分。它必须持续发展。

为了继续发展Internet和私有内部网,IPv4必将被取代。IPv4越早被取代,取而代之的协议就能越早发挥出它们的优势。在下一节中,我们将阐述部署IPv6的关键技术及其商业利益。

随着Internet爆炸性的普及,许多通过Internet从事的商业活动应运而生,而这些商业活动又需要不断添加新的设备。而IPv4能够为新设备提供的公有地址数量有限,并且还在不断减少。因此,IPv4已无力继续支撑未来10年内计划生产的网络设备数量。尽管这些设备可以设定内部地址,但地址和端口转换会增加那些充当服务器、监听设备或执行对等体功能设备的复杂性。而IPv6能够提供足够支撑21世纪使用的地址空间,因此它可以解决IPv4的公有地址枯竭的问题。

过渡到IPv6具有巨大的商业利益,手机、PDA、机动车、各类设备,甚至每个人,都能分配到多个全局可达的地址。由是,新增的网络设备及它们所运行的软件都能正常工作,既不存在在NAT之后运行的限制,也不存在由此衍生出来的复杂结构和额外的经济开销。

在IPv4中,针对家庭和企业网络,有两种不同的寻址规则。在家庭网络中,Internet网关设备(Internet Gateway Device, IGD)会分配到一个公用IPv4地址,然后它为家用网络中的所有主机分配内部地址。企业可能有多个公有IPv4地址或一个公有地址域,在企业内部网分配的地址则可以是公有地址、内部地址或兼而有之。

然而,公有IPv4地址和私有IPv4地址空间是不连续的;也就是说,在网络层,没有对称的可达性。只有当数据包既能向任意地址发送,又能从任意地址接收时,这个环境才具有对称可达性。而在IPv4中,没有一个寻址规则能同时应用于这两类网络以达到无缝连接。不连续网络需要借助中间设备进行连接,如NAT或代理服务器。在IPv6中,家用网络和企业网络都可以分配到全局性地址前缀,它们之间都能实现无缝连接并受到安全规则(如防火墙、认证技术)的保护。

Internet起初只是为了满足美国教育机构和政府部门连接需求的一项发明而已。因此,在Internet的早期,美国那些相连的站点根本不需要考虑地址汇总或地址需求量就能分配到IPv4地址前缀。于是,历史上通过这种方式分配地址的结果是,美国这一个国家拥有了过于庞大的公有IPv4地址数量。

在IPv6中,公用地址前缀被分配到区域Internet注册机构,然后它再按正常需求为其他ISP和组织分配地址前缀。这种新的地址分配方式可以保证地址前缀能按照区域连接需求进行全局性的分配,因而可以消除因历史原因造成的分配不均。这使得Internet能够成为真正的全局资源,而不是“美国的Internet”。于是,全球所有组织都可以从中获取到商业利益——即它们能获得到充足的IPv6地址空间,而不必像现在这样为了从ISP或其他机构获得IPv4公用地址空间前缀而花钱。

对于那些依赖于监听技术的应用和那些基于对等体连接的应用来说,IPv4 NAT存在一个技术性的障碍,即通信对等体需要发现并通告自己的IPv4地址和端口。解决这个问题的临时手段是在Internet上部署回声服务器(echo server)或汇聚服务器(rendezvous server),以提供公有地址或端口的配置信息。

在IPv6中,由于人们已经无需再为节约公用地址空间而使用NAT,因此对应用程序和网关的开发者来说,映射地址和端口所带来的问题也随之消失。更重要的是,数据包中的地址不会在传输时发生改变,这使得Internet上主机间的端对端通信得以恢复。想象一下人们对点对点电话、视频和其他实时协作技术的迫切需要,以及下一波联网设备有多少种点对点设备(如移动电话),我们就可以发现恢复端到端的通信意义有多么巨大。

由于IPv6可以恢复全局寻址和端到端的连通性,因此基于ad hoc连接的应用和基于对等体连接的应用也不再存在任何障碍。此外,人们也无需再在Internet上部署回声服务器。这给软件开发商带来的商业利益是,基于对等体的应用程序开发起来更加容易了,这些程序可以共享信息、音乐和媒体,或在没有NAT转换的障碍下进行协作。全局寻址和端到端连接还有一个好处,那就是用户可以远程访问家用网络上的计算机,而无需再使用Internet上的中间设备进行远程访问。

不同于IPv4地址,IPv6地址存在一个“作用域”,或者说是一个限定的网络区域,在其内部保持唯一性和相关性。例如,IPv6有一个相当于IPv4中公有地址的全局地址,以及一个唯一的类似于IPv4私有地址的本地地址。一般的IPv4路由器不会区分公有地址和私有地址,它会把一个私有地址寻址的数量包发送到Internet。而IPv6路由能区分IPv6地址的作用域,并且绝不会将作用域不正确的数量包发送给接口。

很多种IPv6地址拥有不同的作用域。因此,当DNS域名查询返回了多个IPv6地址时,发送方必须能区分它们的类别,并在发起通信时选用匹配的作用域中最合适的地址对(源地址和目标地址)。例如,对已分配了全局(公有)地址和本地链路地址的源和目的设备,发送方的IPv6主机绝不会把全局目的用在本地链路上。IPv6发送方主机包含地址选择逻辑,它可以判断出在通信时应该选用哪对地址。而且,地址选择规则是可以进行配置的。于是,一个组织中就可以配置多个编址机制。而无论编址机制有多少种,发送方主机总能选择最佳的一组地址。相对来说,IPv4节点无法区分地址类型,会把来自内部地址的流量量发送给公有地址。

作用域地址的好处是,通过选择作用域尽可能小的地址,用户的流量就不会游离到地址的作用域之外,因此用户的网络流量也就可以暴露给更少的恶意主机。标准化、为ISV内建地址选择算法的好处在于,人们无需开发和测试自己的地址选择算法,而且能够直接依靠划分好的地址列表,因而也可以降低软件开发的成本。

IPv6是IPv4的简化高效版。除了按照优先级发送的流量之外,发送IPv6包时处理的字段和需要作出的决定都相对更少。与IPv4不同的是,IPv6头部的大小是固定的(40字节),因此路由器就能更快地处理IPv6数据包。另外,IPv6全局地址的地址结构是分级可汇总的,因此,在组织机构和Internet路由器的路由表中需要分析的路由也比较少。于是,流量就能够以更高的数据传输率进行发送,这使得未来使用多类型数量的高宽带程序能够更高效地运行。

IPv6是专为支持安全性(IPSec,需要支持AH和ESP头部)和移动性(移动IPv6,可选)而设计的。也许有人认为IPv4就具有这些属性,但是它们在IPv4中是作为扩展属性存在的,并不是IPv4设计之处就考量在内的,因此也就存在一些结构和连接上的局限性。设计者在IPv6中有意加入安全性和移动性标准使得安全性和移动性成为了IPv6中所定义的标准,因而它们的限制更少,在处理当前和未来Internet用户的通信需求时也更加可靠,同时具备更强大的可扩展性。

支持IPSec并使用全局唯一的地址空间,这样做的商业利益在于,IPv6在端到端传输的数据包穿越整个IPv6 Internet时都可以为数据提供安全性保护。这与IPv4 Internet中的IPSec不同,在IPv4环境中,如果端点位于NAT之后,就必须进行修改,很多功能也会收到限制。而IPv6 Internet中的IPSec则可以在任意两个端点之间发挥全部功能。

回答以下问题可以检测出您对IPv6的理解水平。答案参见附录B。

1.当前Internet的IPv4存在什么问题?

2.IPv6是如何解决这些问题的?

3.IPv6如何能够对按照优先级发送的方式提供更好的支持?

4.说出至少三种IPv6比IPv4更高效的情况。

5.说明为什么NAT妨碍了对等体间应用程序的正常运行?

6.当今部署IPv6的主要技术利益是什么?

7.当今部署IPv6的主要商业利益是什么?

[1] 在微软系统的某些部分,翻译为多播,考虑到组播在交流中更加常用,因此本书均采用组播的译法。——译者注

[2] 将Native IPv6翻译为“本地IPv6”其实是一种易产生误导的译法,但碍于专有名词的翻译应遵循习惯译法(名无固宜,约之以命。约定俗成谓之宜,异于约则谓之不宜),因此本文还是延续了这一做法。但读者务必对于这一说法提高警惕,本地IPv6中的“本地(native)”不是“local”,与任何拓扑意义上的区域(比如子网)都是无关的。与“链路/站点本地IPv6地址”中的本地(local),含义截然不同。——译者注


在完成本章的学习之后,读者应该能够完成以下任务:

在Windows系统中,TCP/IP协议栈是双IP层的结构。在IP层中,一个传输层协议(TCF和UDP)会在两个Internet层协议(IPv4和IPv6)上运行。图2-1所示为Windows的TCP/IP协议栈的架构。

图2-1 Windows的TCP/IP协议架构

TCP/IP驱动器文件(Tcpip.sys)包含了IPv4和IPv6的Internet层。Tcpip6.sys在Windows网络架构中,工作在Windows套接字和NDIS(网络设备接口规范)层之间。Tcpip.sys架构包含以下几层。

IPv4 Internet层以名为Internet Protocol Version 4(TCP/IPv4)的组件出现在网络连接文件夹的LAN连接属性的协议列表中。IPv6 Internet层则以名为Internet Protocol Version 6(TCP/IPv6)的组件出现在相同的位置。用户可以在网络连接文件夹中针对特定连接来启用或禁用这些组件,但无法卸载它们。用户可以使用命令netsh interface ipv4 uninstall来卸载IPv4 Internet层,但无法卸载IPv6 Internet层。更多内容,请参阅本章的“手动配置IPv6协议”一节。


注释

Windows XP和Windows Server 2003的IPv6协议是单独的协议栈,其中包括它们自己的TCP和UDP协议。这称为双栈架构(dual stack architecture)。如需进一步了解相关内容,请参阅第11章。

Windows中的IPv6协议包含以下特性。


注释

读者如果希望创建一个实验环境来自行测试这些特性或者捕获查看IPv6网络流量,请参阅本书的附录C。

在Windows中,对网络连接文件夹中的所有连接,IPv6都是默认安装和启动的。若IPv4和IPv6同时启用,则Windows在默认情况下会选择IPv6,而不是IPv4。不过Windows Server 2012和Windows 8采用了一种新的措施,即如果它们检测出IPv6网络连接断开,就会转而选择IPv4。这个新的措施被定义在了RFC 6555中,称为“Happy Eyeballs”。

例如,如果DNS域名查询消息包含一串IPv6和IPv4的地址,Windows就会首先尝试使用IPv6来建议通信,并执行当前的源和目的地址选择规则。不过,如果IPv6与Internet之间的连接不正确,那么Windows Server 2012和Windows 8就会优先尝试使用IPv4来建立连接。如需进一步了解相关内容,请参阅本章“源地址和目的地址的选择”一节。

大部分情况下,默认启用IPv6并使用IPv6流量不会影响IPv4的连接。例如,如果DNS设备中没有IPv6记录,那么除非用户或程序指定了一个IPv6的目的地址,否则设备就不会尝试使用IPv6地址进行通信。然而,即使在存在IPv4连接的条件下,也会出现一个应用尝试建立IPv6连接并最终失败的情况。如需进一步了解部署支持IPv6应用时,需要考虑哪些因素,请参阅第16章。

为了充分利用IPv6连接,一些网络应用程序就需要进行升级,使它们使用支持IPv6的网络应用程序接口(API)(参阅本章“应用程序支持”一节)。比如,一些使用Windows套接字的程序在编写的时候仅支持IPv4的Windows Sockets函数。因此,用户就需要升级这些程序,使它们使用新的,不限定于IPv4或IPv6的Windows Sockets函数。如需进一步了解相关内容,请参阅附录F,或参阅网站http://go.microsoft.com/fwlink/?LinkID=87735上的“IPv6 Guide for Windows Socket Applications”一文。

Windows的IPv6协议能够支持IETF(Internet工程任务组)标准所定义的IPv6协议栈功能,其中包括:

Windows的IPv6协议也支持下列增强特性。

在Windows环境中,用户能够通过下列方式来手动配置IPv6。

如需进一步了解更多内容,请参阅本章的“手动配置IPv6协议”和“对过渡技术设置组策略”部分。

Windows XP和Windows Server 2003对IPv6通信的IPSec支持是有限制的,不支持Internet密钥交换(Internet Key Exchange IKE)和数据加密。IPSec安全策略、安全关联以及密钥都需要通过文本文件来进行配置,并通过命令行工具IpSec6.exe来启动。

在Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista中,对IPv6流量的IPSec支持与对IPv4的是一样的。基于IPv6的IPSec现在已经可以支持IKE和数据加密技术。在Windows环境中,为IPv6流量配置IPSec策略的方法和为IPv4流量配置IPSec策略的方法相同,可以使用带有高级安全管理单元的Windows防火墙,也可以使用Windows PowerShell命令进行配置(只适用于运行Windows Server 2012或Windows 8的计算机)。

Windows防火墙是一种内置的基于主机的防火墙,它能够阻塞未经授权的出入站流量,因而可以为运行Windows系统的计算机提供保护。Windows防火墙支持IPv6流量,同时,入站和出站数据流配置过滤规则的方式也与IPv4相同。IPv4和IPv6共享相同的过滤流量设置。例如,如果用户配置了一个入站规则,即放行文件和打印机共享流量,那么无论对于IPv4还是IPv6,未经请求的入站文件和打印机共享流量都会得到放行。此外,用户还可以使用带有高级安全管理单元的Windows防火墙来配置防火墙规则,或者使用Windows PowerShell命令对其进行配置(只适用于运行Windows Server 2012或Windows 8的计算机)。

为了在访问互联网资源时能够实现一定程度的匿名性,Windows的IPv6协议支持使用临时地址,这些临时地址包含有随机生成的接口标识符。临时地址会随着时间的推移改变,因此很难根据IPv6地址来追踪某个人的互联网使用状况。临时地址在Windows 8、Windows 7和Windows Vista中默认是开启的,但在Windows Server 2012、Windows Server 2008 R2和Windows Server 2008中默认是禁用的。用户可以通过Windows PowerShell命令Set-NetIPv6Protocol - UseTemporaryAddresses Enabled来启用临时地址功能,或者通过netsh interface ipv6 set privacy enabled命令来启用临时地址功能。

临时地址默认有1天的最佳存在期和7天的有效生存时间,用户可以通过Windows PowerShell命令(只适用于运行Windows Server 2012或Windows 8的计算机)Set-NetIPv6Protocol中的参数-MaxValidLifetime、-MaxPreferredLifetim、 -RegenerateTime和MaxRandomTime来对上述数值进行修改,也可以通过netsh interface ipv6 set primacy命令来配置这些参数。

如需进一步了解有关临时地址的内容,请参阅第3章。

为了防止有人根据网卡厂商的公司标识符来对链路上的IPv6地址进行扫描,Windows会在默认情况下生成一个随机接口ID来自动配置IPv6地址——包括公有地址和链路本地地址。公有IPv6地址是一个已在DNS注册的全局地址,因此这个IPv6地址往往用于服务器应用(如Web服务器)的入站连接。

需要注意的是,这种新的行为和临时IPv6地址的行为有所不同。临时地址也会使用随机生成的接口ID。但是,这些地址没有在DNS注册,而且通常被客户端程序(如Web浏览器)用来建立通信。

用户既可以通过Windows PowerShell命令(只适用于运行Windows Server 2012或Windows 8的计算机)Set-NetIPv6Protocol -RandomizeIdentifiers Disabled或者使用命令netsh interface ipv6 set global randomizeidentifiers=disabled来禁用这种默认行为。也可以通过Windows PowerShell命令(只适用于运行Windows Server 2012或Windows 8的计算机)Set-NetIPv6Protocol - RandomizeIdentifiers Enabled或者使用命令netsh interface ipv6 set global randomizeidentifiers=enabled来启用随机接口ID。

Windows中对于IPv6的DNS支持包括如下内容。

Windows Server 2012、Windows Server 2008 R2和Windows Server 2008中的DNS服务器服务支持同时通过IPv4和IPv6来存储和动态注册IPv6 AAAA记录。

如需进一步了解IPv6的DNS支持内容,请参阅第9章。

在同时包括主机地址(A)和IPv6主机地址(AAAA)记录的DNS环境中,对一个DNS域名进行域名查询的结果可能是多个地址,即多个IPv6地址或者不存在IPv6地址,多个IPv4地址或者不存在IPv4地址。根据查询主机的配置,地址选择算法可以判断出用于通信的那一对源地址和目的地址。源地址和目的地址对必须经过仔细的选择,确保范围和目的都能够匹配。

Windows的IPv6支持源地址和目的地址的算法,这一点记录在RFC 3484中。而Windows Server 2012、Windows Server 2008 R2和Windows 8则采用了名为“Update to RFC 3484 Default Address Selection for IPv6”的Internet草案,这一草案的具体措施记录在了RFC 6555中。

如需进一步了解有关源地址和目的地址选择的算法,请参阅第9章。

Windows支持使用IPv6 Address.ipv-literal.net名称。为了在ipv6-literal.net名称中表示IPv6地址,需要把地址中的冒号(:)换成连字符(-)。例如,IPv6地址2001:db8:28:3:f98a:5b31:67b7:67ef对应的ipv6-literal.net名称就是2001-db8-28-3-f98a-5b31-67b7-67ef.ipv6-literal.net。当应用程序将它提交给名称解析时,名称2001-db8-28-3-f98a-5b31-67b7-67ef.ipv6-literal.net就会被解析为2001:db8:28:3:f98a:5b31:67b7:67ef。

Windows支持在通用命名规则(UNC)路径名称中使用ipv6-literal.net。UNC的作用往往是用来访问一个网络资源的,例如网络打印机、网络上共享的文件或文件夹等。它的格式为\\ComputerName\SharedFolder\Folder Path\File(文件)或者\\ComputerName\SharedPrinter(打印机)

Windows支持在UNC中使用IPv4地址(如\10.90.121.7\SharedDocs)。但对于IPv6地址,UNC的语法不能接受其中的冒号。因此,用户只能在UNC中ComputerName(计算机名称)这一部分中使用ipv6-literal.net名称。例如,一台共享打印机(Copyroom4)在服务器上的UNC路径若使用了IPv6地址2001:db8::1之后,就变成了\\2001-db8--1.ipv6-literal.net\copyroom4。

如需进一步了解相关内容,请参阅第9章。

Windows支持链路本地组播名称解析(LLMNR),这项技术支持没有DNS服务器的单一子网环境中的主机相互解析名称。这个功能对单一子网环境的家用网络和ad hoc无线网络都很实用。LLMNR节点会把DNS查询消息发送给一个组播地址(所有支持LLMNR的子网节点都会在这个地址上侦听),而不是向DNS服务器用单播发送一个DNS查询消息。而这个被查询名字的所有者在收到消息后发送一个单播的响应。IPv4节点也能够在不依赖于TCP/IP广播上的NetBIOS的情况下,使用LLMNR来进行本地子网名称解析。

如需进一步了解相关内容,请参阅第9章。

Windows包含了第2版的对等体网络名称解析协议(Peer Name Resolution Protocol, PNRP),该协议可以为Windows对等体互联网络平台提供安全的、可升级的、动态的名称注册和名称解析服务。Windows对等体网络互联应用程序能够通过PNRP API来访问PNRP名称发布与解析功能。PNRP名称也集成到了Windows Sockets的Getaddrinfo()函数中。为了使用PNRP把名字解析为IPv6地址,应用程序可以使用Getaddrinfo()函数来解析完全合法的域名(Fully Qualified Domain Name, FQDN)name.prnp.net,而其中的名称就是要被解析的Windows对等体网络节点的名称。

如需进一步了解相关内容,请参阅第9章。

Windows中的Win32互联网扩展(WinInet)API支持RFC 3986,并可以使用原生IPv6地址作为URL路径,其格式为http://[IPv6地址]:端口。例如,在连接IPv6地址为2001:db8:100:2a5f::1的Web服务器时,用户可以打开一个支持WinInet的网络浏览器(如Windows Internet Explorer),并在URL框中输入http://[2001:db8:100:2a5f::1]。虽然普通用户不大会用到原生IPv6地址,但在URL中输入IPv6地址对软件开发人员、软件测试人员以及网络故障排除人员则很有价值。

运行Windows的计算机可以充当一台静态IPv6路由器,并执行以下功能。

在默认情况下,只有当用户通过配置要求计算机发布默认路由的时候,运行Windows的计算机才会自动将自己通告为默认路由器(用生存时间不为零的路由器进行路由器通告)。如果用户希望修改这种行为,可以(在Windows Server 2012,Windows Server 2008 R2,Windows 8和Windows 7的环境中)输入命令Set-NetIPInterface -InterfaceAlias 名称 -AddressFamily IPv6–AdvertiseDefaultRoute或通过命令netsh interface ipv6 set interface 接口名称或编号 advertisedefaultroute=enabled来实现。

此外,如果用户需要添加一条默认路由器并将其发布出去,可以在Windows PowerShell中输入命令Add-NetRoute -DestinationPrefix ::/0-InterfaceAlias Name -NextHop IPv6Address- AddressFamily IPv6 -Publish Yes或者通过命令netsh interface ipv6 add route ::/0接口名称或编号nexthop=IPv6地址publish=yes来实现。

更多有关Windows Server 2008和Windows Vista中IPv6静态路由支持的内容,请参阅第10章。

Windows的内置远程访问客户可以通过IPv6控制协议(IPv6CP)(定义在RFC 5072中)来配置PPP协议上的IPv6节点。由此,本地流量就可以发送给基于PPP的连接。例如,支持IPv6CP就能通过拨号连接或基于PPPoE的连接(可用于宽带互联网访问),来连接到支持IPv6的ISP。另外,内置远程访问客户的IPv6CP支持基于点对点隧道协议(PPTP)和第二层隧道协议(L2TP)的虚拟私有网络(Virtual Private Network, VPN)连接。

Windows中的DHCP客户服务支持IPv6动态主机配置协议(DHCPv6)(定义在RFC 3315和3736中)。运行Windows的计算机,可以在本地IPv6网络中进行状态化或无状态的DHCPv6配置。Windows Server 2012、Windows Server 2008 R2和Windows Server 2008中的DHCP服务器服务支持状态化(包括寻址与配置的设定)和无状态(仅配置的设定)的DHCPv6操作。此外,Windows Server 2012、Windows Server 2008 R2和Windows Server 2008中的路由和远程访问服务包含了DHCPv6中继代理。

如需进一步了解相关内容,请参阅第8章。

站点内自动隧道寻址协议(ISATAP)是一项IPv6过渡技术,它可以让那些内部网中只支持IPv4的IPv6/IPv4节点用IPv6来相互通信,或与部分支持IPv6内部网以及IPv6 Internet中的节点通信。Windows的IPv6协议支持ISATAP设备在网络中充当ISATAP主机或ISATAP路由器。

如需进一步了解相关内容,请参阅第12章。

6to4也是一项IPv6过渡技术,它可以为IPv4 Internet中的IPv6/IPv4主机提供相互之间的自动隧道和IPv6连接。使用6to4技术,IPv6站点和主机可以使用基于6to4的地址和IPv4 Internet进行通信,而无需先从ISP获取一个IPv6全局地址前缀再连接到IPv6 Internet。Windows的IPv6协议支持6to4设备在网络中充当6to4主机或6to4路由器。

如需进一步了解相关内容,请参阅第13章。

Teredo也是一项IPv6过渡技术,它可以让IPv4 Internet中的IPv6/IPv4主机进行自动隧道和IPv6连接,即使这些主机被IPv4的NAT分隔在两边。Teredo是为小型办公或家用办公网络这种非管理的网络环境所专门设计的一项旨在让IPv6流量穿越NAT的技术。使用Teredo的IPv6流量隧道能够穿越一个甚至多个NAT,并使Teredo客户机能访问IPv6 Internet中的主机(借助Teredo中继)和IPv4 Internet中的其他Teredo客户机。

由于能够访问IPv4 Internet中的其他Teredo客户机,那些原本在通信时因NAT问题而无法使用的应用程序就能够实现通信了。Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的IPv6协议支持Teredo,设备在网络中充当Teredo客户机和Teredo主机指定中继。

如需进一步了解相关内容,请参阅第14章。

端口代理是Windows IPv6协议的组件之一,它可以作为TCP代理使那些用一般的互联网层协议(IPv4或IPv6)无法连接的节点或程序之间能够通信。通过端口代理技术,仅支持IPv6的节点或应用就可以和仅支持IPv4的节点或应用实现通信了,反之亦然。

如需进一步了解相关内容,请参阅第11章。

IP-HTTPS是一个隧道协议,它可以将IPv6流量封装进一个HTTPS会话的隧道中进行发送。Windows Server 2012、Windows Server 2008 R2、Windows 8和Windows 7都支持IP-HTTPS协议。当Direct Access客户端在一台代理服务器或其他什么设备身后,而无法与Direct Access服务器建立起IPv6连接,6to4连接或基于Teredo的连接时,客户端就可以使用IP-HTTPS来与服务器建立连接。

如需进一步了解相关内容,请参阅第15章。

当一个只支持IPv6的节点发起数据流量时,NAT64可以为IPv6和IPv4流量之间提供状态化转换。NAT64会将从IPv6节点那里接收到的IPv6流量转换为IPv4流量,然后发送给IPv4节点,反之亦然。DNS64还可以将纯IPv6地址记录(AAAA)的DNS查询信息映射为IPv4地址记录查询和响应信息,以帮助纯IPv6节点和纯IPv4节点之间建立通信。

将NAT64和DNS64结合起来可以让纯IPv6节点向纯IPv4发起通信,而无需对纯IPv6节点和纯IPv4节点本身进行任何调整。DNS64可以将一台纯IPv4计算机被查询的域名映射为一个IPv6地址。NAT64可以将去往一个IPv6地址的IPv6流量转换为去往一个IPv4地址的IPv4流量。

如需进一步了解相关内容,请参阅第11章。

使用Windows Server 2012系统的DirectAccess服务器可以使用NAT64/DNS64来让DirectAccess客户端访问内部网中那些只支持IPv4的服务器和资源。如需进一步了解相关内容,请参阅第18章。

在Windows Server 2012、Windows Server 2008 R2、Windows 8或Windows 7的设备上,用户可以通过组策略实现对IP-HTTPS、Teredo、6to4和ISATAP的几种配置。在之前的Windows版本中,用户则必须Netsh.exe命令来配置这些参数。

用户可以进入组策略编辑器[2],在计算机配置|管理模板|网络|TCP/IP设置|IPv6转换技术,中找到相关设置,图2-2所示为新的组策略设置。

图2-2 IPv6过渡技术的组策略设置

表2-1列举了组策略的设置。

表2-1 过渡技术的组策略设置

设置

描述

6to4中继名称

使用此策略设置可以为6to4主机指定6to4中继名称。6to4中继用作6to4主机发送的IPv6网络通信的默认网关

6to4中继名称解析间隔

使用此策略设置,可以指定中继名称的解析时间间隔

6to4状态

使用此策略设置,可以配置6to4客户端的状态

IP-HTTPS状态

使用此策略设置,可以配置IP-HTTPS客户端的状态

ISATAP路由器名称

使用此策略设置,可以为ISATAP路由器指定路由器名称或IPv4地址

ISATAP状态

使用此策略设置,可以配置ISATAP主机的状态

Teredo客户端端口

使用此策略设置,可以选择Teredo客户端用来发送数据包的UDP端口

Teredo默认限定

使用此策略设置,可以将Teredo设置为能够通信的状态。默认情况下,Teredo在未使用时会进入休眠状态。限定过程可使其从休眠状态恢复过来

Teredo刷新率

使用此策略设置可以配置Teredo客户端刷新NAT转换表的速率

Teredo服务器名称

使用此策略设置可以指定Teredo服务器的名称

Teredo状态

使用此策略设置可以指定Teredo服务的状态

DirectAccess设置向导可以通过这些组策略设置来配置DirectAccess客户端,让DirectAccess服务器充当Teredo服务器、IP-HTTPS服务器、6to4中继和ISATAP路由器。也可以独立使用DirectAccess来集中为客户配置6to4、Teredo、IP-HTTPS及ISATAP的参数。

Windows Server 2012和Windows 8中对于IPv6及其所包含的网络互联应用与服务完全支持。而Windows Server 2008和Windows Server 2008 R2则支持除Internet信息服务(Internet Information Service, IIS)中文件传输协议(FTP)发布服务和简单邮件传输协议(SMTP)服务之外的全部服务。Service Pack 1版本的Microsoft Exchange Server 2007及Microsoft Exchange Server 2010中的SMTP特性中包含了支持IPv6功能的SMTP服务。

用户可以创建一个纯IPv6网来执行所有基于Windows架构的服务,包括以下服务:

Windows包含以下支持IPv6的应用程序接口(API)。

Windows Sockets(Winsock)是基于我们熟悉的加州大学伯克利分校所定义的“socket”接口的API。它包括一系列扩展,能更好地利用微软Windows的消息驱动特性。Windows Sockets规范1.1版本发布于1993年1月,而Windows Sockets 2.2.0版发布于1996年5月。

Winsock(即微软Windows的套接字实现)的设计目标是在Windows操作系统中高效运行,同时保持与伯克利软件套件(BSD,即伯克利套接字)标准兼容。使用Winsock,程序员无需关注使用的网络协议就可以编写出支持Internet、内联网或其他网络的高级应用,并使之通过网络传送数据。

Windows的Winsock已根据RFC 3493,“Basic Socket Interface Extensions for IPv6”和RFC 3542,“Advanced Sockets API for IPv6”升级为可支持IPv6的版本。如需进一步了解有关IPv6高级套接字API的内容,请参阅附录F。

Winsock Kernel(WSK)是一种独立于传输的内核模式的API。使用WSK,内核模式的软件模块(如第三方驱动)就能够像用户模式支持的Winsock那样,使用类套接字开发语义执行网络通信。WSK的设计目标是为内核模式开发商提供一个便于使用的接口。对基于WSK的软件模块而言,WSK同时支持基于IPv4和基于IPv6的连接。

远程过程调用(RPC)是用于创建分布式客户端/服务器程序的API。RPC运行时存根(stub)和库(library)管理了大部分与网络协议和通信相关的细节。RPC函数用于将应用功能呼叫通过网络发送给远端的系统。Windows中的RPC组件都支持IPv6。RPC组件经过修改,使用更新的Winsock函数,这使得RPC可以同时运用于IPv4和IPv6环境中。

Internet协议助手(IP助手)是用于辅助本地计算机在网络配置方面管理的API。用户可以使用IP助手以可编程的方式来获取本地计算机的网络配置信息并修改这些信息(不过,通过IP助手实现的配置修改不能持久)。IP助手也提供了通告机制,确保当本地计算机上特定方面的网络配置发生改变时能通告给应用程序。

Windows对IP助手进行了扩展,允许对IPv6及其组件进行管理和配置。IP助手支持IPv6的方面如下:

Win32 Internet扩展(WinInet)是用于创建Internet客户端应用的API。Internet客户端应用是使用Internet协议(例如gopher、FTP或HTTP)从Internet数据源(服务器)访问信息的程序。Internet客户端应用可能会访问服务器并获取数据,如气象图、股票价格或报纸头条。Internet客户端能够通过外部网络(Internet)或内部网络(内联网)来访问服务器。

Windows中的WinInet得到了扩展并支持IPv6。这就允许微软的IE浏览器可以使用WinInet来访问支持IPv6的Web站点,并能够在URL中使用字符形式的IPv6地址。

.NET Framework是.NET平台的编程平台,用于构建、部署以及运行可扩展标记语言(Extensible Markup Language, XML)Web服务和应用程序。.NET框架管理了大部分的底层编码,使得开发者能够集中精力为应用程序编写业务代码。Windows提供的.NET框架支持IPv6,允许.NET框架的应用程序在IPv6或IPv4的环境中运行。

Windows Runtime是Windows Server 2012和Windows 8一个新开发平台,可以用来创建Metro应用。Windows Runtime开发的应用可以在IPv6或IPv4的环境中运行,详情请见:http://msdn.microsoft.com/en-us/windows/apps

Windows过滤平台(WFP)提供的API,使第三方独立软件供应商(ISV)能够加入到过滤决策中,而这些过滤决策存在于TCP协议栈的多个层以及整个操作系统中。WFP也集成并提供了对防火墙新特性的支持,如验证通信,以及基于应用程序对WinSock API(基于应用程序的策略)的使用状况来动态配置防火墙的特性等。ISV能够创建防火墙、杀毒软件、诊断软件以及其他类型的应用程序和服务。Windows防火墙和IPSec使用了WFP API。

详情请见http://go.microsoft.com/FWLink/?Linkid=90220

Windows管理规范(WMI)版本2是Windows中的一个架构,可以访问管理数据并执行操作。这些操作可以通过WMI脚本或应用来执行。WMI也可以用来对远程计算机执行自动管理任务。

详情请见http://msdn.microsoft.com/library/windows/desktop/aa394582(v=vs.85).aspx

不同于Windows XP和Windows Server 2003中的IPv6,Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista中的IPv6协议已经被安装并且默认开启了。Windows的IPv6协议在设计时的目标就是实现自动配置。例如,能够自动配置用于链路上节点间通信的本地链路地址。如果主机子网中有一台IPv6路由器或存在一台ISATAP路由器,那么主机就可以使用接收到的路由器通告信息来自动配置其他的地址、默认路由器以及其他的配置参数了。

用户也可以通过如下方式在Windows中手动配置IPv6地址和其他参数。

虽然通常的IPv6主机并不需要手动配置,但IPv6路由器则必须手动进行配置。

通过“网络连接”文件夹来手动配置IPv6协议,可以按照如下步骤进行。

1.在网络连接文件夹中,右键单击要配置的连接或网络适配器,然后单击“属性”(Properties)选项。

2.在连接或网络适配器属性的“网络”(Networking)选项卡中,在“此连接使用下列项”(This Connection Use The Following Items)下的列表中双击Internet协议版本6(TCP/IPv6)。

Windows会显示“Internet协议版本6属性”(Internet Protocol Version 6 Properties)的对话框。图2-3所示即为该对话框的示例。

图2-3 Internet协议版本6(TCP/IPv6)属性对话框

常规(General)选项卡

在“Internet协议版本6(TCP/IPv6)属性”对话框的“常规”选项卡中,可以进行如下配置。

高级TCP/IP设置(Advanced TCP/IP Setting)

在“常规”选项卡中,单击“高级”(Advanced)按钮就可以进入“高级TCP/IP设置”对话框。这个对话框非常类似于Internet协议版本4(TCP/IPv4)组件的“高级TCP/IP设置”对话框,两者的区别是这里没有WINS选项卡(IPv6并不使用NetBIOS和Windows Internet命名服务[WINS])和“选项”选项卡(TCP/IP过滤只适用于IPv4流量)。对于IPv6,“高级TCP/IP设置”对话框有“IP设置”(IP Settings)和“DNS”选项卡。图2-4所示为“IP设置”选项卡的示例。

图2-4 IP设置选项卡

在“IP设置”选项卡中,可以进行如下配置。

图2-5所示为DNS选项卡的示例。

图2-5 DNS选项卡

在DNS选项卡中,用户可以配置以下内容。

Windows 2012和Windows 8的Windows PowerShell命令行也可以对IPv6地址、默认网关和DNS服务器进行配置。

配置地址

配置IPv6地址可以使用命令New-NetIPAddress来实现。比如,如果要在名为“Wired Ethernet Connection”的接口上配置IPv6单播地址2001:db8:290c:1291::1,就要使用如下命令:

New-NetIPAddress –InterfaceAlias "Wired Ethernet Connection" –IPAddress 2001:db8:290c:1291::1

添加默认网关

配置默认网关可以使用命令New-NetRoute来实现。比如,如果要在名为“Wired Ethernet Connection”的接口上添加一条默认路由,即将下一条地址设置为fe80::2aa:ff:fe9a:21b8,就要使用如下命令:

New-NetRoute–DestinationPrefix::/0–InterfaceAlias "Wired Ethernet Connection" –NextHop fe80::2aa:ff:fe9a:21b8

添加DNS服务器

配置DNS服务器的IPv6地址可以使用命令Set-DnsClientServerAddress来实现。比如,如果要在名为“Wired Ethernet Connection”的接口上添加一个IPv6地址为2001:db8:99:4acd::8的DNS服务器,就要使用如下命令:

Set-DnsClientServerAddress -InterfaceAlias "Wired Ethernet Connection" 
-ServerAddresses 2001:db8:99:4acd::8


注释

本节只会描述如何在Windows PowerShell命令行中通过命令来添加地址、默认网关和DNS服务器。除此之外,Windows PowerShell命令行还有很多其他用来配置IPv6设置和IPv6组件的命令。如果读者需要全部的配置命令集,请参见http://technet.microsoft.com/library/hh826123.aspx

用户也可以通过在命令行中使用netsh interface ipv6形式的命令,来配置IPv6地址、默认网关和DNS服务器。

配置地址

配置IPv6地址可以使用命令netsh interface ipv6 add address来实现,该命令语法如下。

netsh interface ipv6 add address [interface=]Interface NameorIndex [address=]IPv6 Address [/PrefixLength] [[type=] unicast|anycast] [[validlifetime=]Time|infinite] [[preferredlifetime=] Time|infinite] [[store=] active|persistent]

例如,如果要在名为“Local Area Connection”的接口上配置IPv6单播地址2001:db8:290c:1291::1,让这个地址长期有效且处于被选用的状态,而且该地址在系统重启之后仍然保留,要使用如下命令:

netsh interface ipv6 add address "Local Area Connection" 2001:db8:290c:1291::1

添加默认网关

配置默认网关可以使用命令netsh interface ipv6 add route来实现,并添加一条默认路由(::/0),该命令语法如下。

netsh interface ipv6 add route [prefix=]::/0 [interface=]InterfaceNameorIndex [[nexthop=] IPv6Address] [[siteprefixlength=]Length] [[metric=]MetricValue] [[publish=]no|yes|immortal] [[validlifetime=]Time|infinite] [[preferredlifetime=]Time|infinite] [[store=]active|persistent]

例如,如果要在名为“Local Area Connection”的接口上添加一条默认路由,并将下一跳地址设置为fe80::2aa:ff:fe9a:21b8,要使用如下命令:

netsh interface ipv6 add route ::/0 "Local Area Connection" fe80::2aa:ff:fe9a:21b8

添加DNS服务器

配置DNS服务器的IPv6地址可以使用命令netsh interface ipv6 add dnsserver来实现,该命令语法如下。

netsh interface ipv6 add dnsserver [name=]Interface Name [[address=]IPv6Address] [[index=] Preference Value]

默认情况下,DNS服务器会被添加到DNS服务器列表的末尾。若指定了索引号,则DNS服务器会被放到列表中相应的位置,其他DNS服务器则相应后移。

例如,如果要在名为“Local Area Connection”的接口上添加一个IPv6地址为2001:db8:99:4acd::8的DNS服务器,要使用如下命令:

netsh interface ipv6 add dnsserver "Local Area Connection" 2001:db8:99:4acd::8


注释

本节只会描述如何使用Netsh命令来添加地址、默认网关和DNS服务器。除此之外,还有许多配置IPv6设置和IPv6组件的Netsh命令。如果读者需要全部的配置命令集,请参见Windows系统的“帮助”和“支持”。

从微软的角度看,IPv6是Windows操作系统中不可或缺的一部分,因此在操作系统发展的过程中,Windows服务与应用测试始终包含了IPv6技术的相关环节。由于Windows设计上就包含了IPv6技术,因此微软也无法对禁用IPv6的效果进行任何测试。如果在Windows中禁用了IPv6,那么一些组建也许就无法正常工作。此外,有一些也许你认为与IPv6无关的应用(如远程协助、家庭组、DirectAccess和Windows Mail)也会失效。

因此,即使用户所处的网络中并不包含IPv6环境,无论本地还是隧道连接的环境都与IPv6无关,微软依然建议让系统中的IPv6保持启用状态。这样,那些纯IPv6应用和服务(如家庭组、DirectAccess)也就不会失效,同时这台主机也可以利用IPv6的连接进行通信。不过,本节的后续部分仍会介绍如何禁用IPv6(如无必要,请勿尝试)。

不同于Windows XP和Windows Server 2003,Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista中的IPv6无法卸载。如需为网络连接文件夹中的特定连接禁用IPv6,可以打开连接属性,并清除“此连接使用下列项目”列表中TCP/IPv6旁的勾选框。这个方法可以禁用LAN接口和连接上的IPv6,但不能禁用隧道接口的IPv6或IPv6 loopback接口。

为了在Windows中有选择地禁用IPv6组件并配置IPv6行为,用户必须创建并配置下述注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters\Disabled Components。DisabledComponents(禁用的组件)条目默认情况下并不存在,需要用注册表编辑器(Regedit.exe)手动创建。若DisabledComponents条目不存在,说明它默认值为0。

DisabledComponents注册值会对主机所有的接口产生影响。而网络选项卡的复选框只会对特定接口产生影响。但DisabledComponents注册值不会影响TCP/IPv6组建旁边复选框的状态。因此,即使DisabledComponents注册键值被设置为禁用IPv6,网络选项卡各个接口的相应复选框仍然会保持勾选的状态。这一点应该注意。

DisabledComponents注册值是一个位掩码,它可以控制下列标记,从低顺序位开始(0位)。

为了获取一组指定了位的DisabledComponents条目的值,可以创建一个二进制数,即在对应的比特位设置所需键值,然后将它转换为十六进制数。例如,如果想禁用6to4接口、Teredo接口,并选择IPv4(而非IPv6),就会得出二进制数101010。将它转换到十六进制后,Disabled Components条目的值即为0x2A。

表2-2列出了一些常用的配置组合以及DisabledComponents的对应值。

表2-2 配置组合和DisabledComponents注册表值

配置组合

DisabledComponents值

禁用所有的通道接口

0x1

禁用6to4

0x2

禁用ISATAP

0x4

禁用Teredo

0x8

禁用Teredo和6to4

0xA

禁用所有LAN和PPP接口

0x10

禁用所有LAN、PPP和隧道接口

0x11

优先选择IPv4而不是IPv6

0x20

禁用所有接口的IPv6(除了环回接口),并且优先选择IPv4而不是IPv6

0xFF

要使对DisabledComponents注册表值的修改生效,必须重启计算机。

管理员既可以使用注册表编辑器在单个计算机上设置DisabledComponents,也可以使用Active Directory和组策略,通过自定义的.ADM文件来设置一组计算机的DisabledComponents。如果使用自定义的.ADM文件,要把DisabledComponents注册表值从.ADM文件中删除,Disabled Components注册值不会因为计算机应用了新的.ADM文件,就自动从计算机的注册表中删除。

Windows包括了如下支持IPv6的命令行工具,而这些工具也是网络故障修理中最常用的。

ipconfig用于显示所有当前网络的配置参数配置,它一般用于执行一些维护任务,比如刷新DHCP和DNS设置等。在Windows系统中,不带参数的ipconfig命令用来显示所有分配有地址的物理网络适配器和隧道接口的IPv4和IPv6配置。

运行Windows Server 2012的计算机上ipconfig命令的示例如下:

Windows IP Configuration

Ethernet adapter Wired Ethernet Connection:
   Connection-specific DNS Suffix .  : ecoast.example.com
   IPv6 Address. . . . . . . . . . . : 2001:db8:21da:7:713e:a426:d167:37ab
   Temporary IPv6 Address. . . . . . : 2001:db8:21da:7:5099:ba54:9881:2e54
   Link-local IPv6 Address . . . . . : fe80::713e:a426:d167:37ab%6
   IPv4 Address. . . . . . . . . . . : 157.60.14.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::20a:42ff:feb0:5400%6
                                       157.60.14.1

Tunnel adapter IPHTTPSInterface:
   Media State . . . . . . . . . . .  : Media disconnected
   Connection-specific DNS Suffix .   :

Tunnel adapter Teredo Tunneling Pseudo-Interface:

   Media State . . . . . . . . . . .  : Media disconnected
   Connection-specific DNS Suffix .   :

ipconfig.exe会将IPv6在IPv4地址之前显示出来,并用如下标签标识出IPv6地址的类型。

如需进一步了解有关不同类型IPv6地址和区域ID的内容,请参阅第3章。

默认情况下,在Windows Server 2008和Windows Vista中包含星号(*)的接口名称是隧道接口。

在Windows Server 2012和Windows 8中,Windows PowerShell命令Get-NetIPConfiguration相当于ipconfig命令。

route工具用于显示本地IPv4和IPv6路由表中的条目,并对这些条目进行修改。当运行route print命令时,route工具会同时显示出IPv4和IPv6路由表。如下是在Windows Server 2012的计算机上运行route print命令所显示出的IPv6部分的路由表:

IPv6 Route Table

===========================================================================
Active Routes:
 If Metric Network Destination    Gateway
   8 286 ::/0                     fe80::3cec:bf16:505:eae6
   1 306 ::1/128                  On-link
   8  38   2001:db8::/64          On-link
   8 286   2001:db8::4074:2dce:b313:7c65/128
                                  On-link
   8 286 2001:db8::b500:734b:fe5b:3945/128
                                  On-link
   8 286 fe80::/64                On-link
  17 296 fe80::5efe:10.0.0.3/128  On-link
   8 286 fe80::b500:734b:fe5b:3945/128
                                  On-link
   1 306 ff00::/8                 On-link
   8 286 ff00::/8                 On-link
===========================================================================
Persistent Routes:
  None

用户可以通过route.exe的route add、route change以及route delete命令,修改IPv6路由表中的条目。

如需进一步了解有关IPv6路由表的内容,请参阅第10章。

在以前的Windows版本中,ping工具通过向另一台TCP/IP计算机发送ICMP(Internet控制消息协议)Echo消息来验证它们之间在IPv4层的连通性。它会将接收到的相应Echo Reply消息显示出来,同时也会显示往返的时间。ping是用于检测可达性和域名解析的主要TCP/IP工具。

Windows中的Ping工具得到了增强,能够在如下方面支持IPv6。

下面是在一台Windows Server 2012计算机上对一个IPv6地址运行Ping命令的显示结果:

F:\>ping 2001:db8:1:f282:dd48:ab34:d07c:3914

Pinging 2001:db8:1:f282:dd48:ab34:d07c:3914 from
  2001:db8:1:f282:3cec:bf16:505:eae6 with 32 bytes of data:

Reply from 2001:db8:1:f282:dd48:ab34:d07c:3914: time<1ms
Reply from 2001:db8:1:f282:dd48:ab34:d07c:3914: time<1ms
Reply from 2001:db8:1:f282:dd48:ab34:d07c:3914: time<1ms
Reply from 2001:db8:1:f282:dd48:ab34:d07c:3914: time<1ms

Ping statistics for 2001:db8:1:f282:dd48:ab34:d07c:3914:
   Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
   Minimum = 0ms, Maximum = 0ms, Average = 0ms

下列命令行参数支持IPv6。


注释

ping的-f、-v TOS、-r count、-s count、-j host-list,以及-k host-list命令行参数不支持IPv6协议。

为ping、tracert或者pathping命令指定目的IPv6地址时,可能需要同时指定区域ID(作为目的地址的一部分)。区域ID,也称为作用域ID,标识了拥有特定作用域的网络直连区域。指定区域ID的语法是IPv6Address%ZoneID,其中的ZoneID是整型值。对于典型的链路本地地址,ZoneID等于发送接口的接口索引值,这个值可以通过在Windows PowerShell中输入命令Get-NetIPInterface(仅适用于Windows Server 2012和Windows 8)或者在命令行中输入netsh interface ipv6 show interface命令显示出来。当目的地址是全局地址时,无需ZoneID参数。

tracert工具可以用来判断出到达目的地址的路径。在IPv4中,tracert会向目的地址发送ICMPv4 Echo消息,而该数据包中的TTL字段的值会逐渐增大。在IPv6中,tracert会向目的地址发送ICMPv6 Echo请求消息,同时使该数据包中的跳数限制字段的值逐渐增大。tracert会以列表的形式显示源主机与目的主机间的路径中的相邻路由接口。

Windows中的tracert工具得到了增强,并在如下方面支持IPv6。

下面是在一台Windows Server 2012计算机上运行tracert工具所显示的结果:

F:\>tracert 2001:db8:1:f282:dd48:ab34:d07c:3914

Tracing route to 2001:db8:1:f282:dd48:ab34:d07c:3914 over a maximum of 30 hops

    1    <1 ms    <1 ms    <1 ms    2001:db8:1:f241:2b0:d0ff:fea4:243d
    2    <1 ms    <1 ms    <1 ms    2001:db8:1:f2ac:2b0:d0ff:fea5:d347
    3    <1 ms    <1 ms    <1 ms    2001:db8:1:f282:dd48:ab34:d07c:3914
Trace complete.

下列命令行参数可以支持IPv6。


注释

tracert的-j host-list命令行参数不支持IPv6协议。

pathping工具可以提供数据包在源和目的之间跳转时的网络延迟以及数据丢失的信息。对于IPv4,pathping会在某一时段将多个ICMPv4 Echo消息发送到源和目的之间的每台路由器,然后根据各个路由器返回的包计算结果。对于IPv6,pathping则会发送ICMPv6 Echo请求消息。由于pathping可以显示任意指定路由器或链路的丢包程度,因此它可以用于判断哪个路由器或子网可能出现了问题。pathping会采用与tracert相同的手段,以找出路径中存在哪些路由器,然后在一段时间内周期性地发送信息到所有路由器,并根据每个路由返回的数据算出结果。

Windows中的pathping工具得到了增强,并在如下方面支持IPv6。

下面是在一台Windows Server 2012计算机上运行pathping工具所显示的结果:

F:\>pathping 2001:db8:1:f282:dd48:ab34:d07c:3914

Tracing route to 2001:db8:1:f282:dd48:ab34:d07c:3914 over a maximum of 30 hops

  0 server1.example.microsoft.com [2001:db8:1:f282:204:5aff:fe56:1006]
  1 2001:db8:1:f282:dd48:ab34:d07c:3914

Computing statistics for 25 seconds...
            Source to Here This Node/Link
Hop RTT Lost/Sent = Pct Lost/Sent = Pct Address
  0                                     server1.example.microsoft.com
[2001:db8:1:f282:204:5aff:fe56:1006]
                                 0/ 100 = 0%   |
  1    0ms   0/  100 =  0%       0/ 100 =  0% 2001:db8:1:f282:dd48:ab34:d07c:
3914
Trace complete.

下列pathping命令行选项支持IPv6。


注释

pathping的-g host-list命令行参数不支持IPv6协议。

netstat工具能够显示以下内容:处于活动状态的TCP连接、计算机侦听的端口、以太网数据、IPv4路由表、IPv4统计数据(如IP、ICMP、TCP和UDP等协议的相关信息)、IPv6路由表和IPv6统计数据(如IPv6、ICMPv6、IPv6的TCP和IPv6的UDP等协议的相关信息)。

下面是在一台Windows Server 2012计算机上运行netstat工具所显示的结果:

F:\>netstat -s

IPv4 Statistics

  Packets Received                   = 187107
  Received Header Errors             = 0
  Received Address Errors            = 84248
  Datagrams Forwarded                = 0
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 0
  Received Packets Delivered         = 186194
  Output Requests                    = 27767
  Routing Discards                   = 0
  Discarded Output Packets           = 0
  Output Packet No Route             = 0
  Reassembly Required                = 0
  Reassembly Successful              = 0
  Reassembly Failures                = 0
  Datagrams Successfully Fragmented  = 0
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 0

IPv6 Statistics

  Packets Received                   = 53118
  Received Header Errors             = 0
  Received Address Errors            = 0
  Datagrams Forwarded                = 0
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 0
  Received Packets Delivered         = 0
  Output Requests                    = 60695
  Routing Discards                   = 0
  Discarded Output Packets           = 0
  Output Packet No Route             = 0
  Reassembly Required                = 0
  Reassembly Successful              = 0
  Reassembly Failures                = 0
  Datagrams Successfully Fragmented  = 0
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 0

ICMPv4 Statistics

                            Received Sent
  Messages                 682       881
  Errors                   0         0
  Destination Unreachable  2         201
  Time Exceeded            0         0
  Parameter Problems       0         0
  Source Quenches          0         0
  Redirects                0         0
  Echos                    340       340
  Echo Replies             340       340
  Timestamps               0         0
  Timestamp Replies        0         0
  Address Masks            0         0
  Address Mask Replies     0         0

ICMPv6 Statistics

                           Received  Sent
  Messages                 309       80
  Errors                   0         0
  Destination Unreachable  193       0
  Echos                    4         0
  Echo Replies             0         4
  MLD Reports              0         6
  Router Solicitations     0         7
  Router Advertisements    54        0
  Neighbor Solicitations   31        32
  Neighbor Advertisements  27        31

TCP Statistics for IPv4

  Active Opens                       = 128
  Passive Opens                      = 106
  Failed Connection Attempts         = 0
  Reset Connections                  = 3
  Current Connections                = 16
  Segments Received                  = 22708
  Segments Sent                      = 26255
  Segments Retransmitted             = 37

TCP Statistics for IPv6

  Active Opens                       = 74
  Passive Opens                      = 72
  Failed Connection Attempts         = 1
  Reset Connections                  = 0
  Current Connections                = 14
  Segments Received                  = 52809
  Segments Sent                      = 59813
  Segments Retransmitted             = 3

UDP Statistics for IPv4

  Datagrams Received                 = 160982
  No Ports                           = 2158
  Receive Errors                     = 2
  Datagrams Sent                     = 591

UDP Statistics for IPv6

  Datagrams Received                 = 0
  No Ports                           = 0
  Receive Errors                     = 0
  Datagrams Sent                     = 744

在一台运行Windows Server 2012和Windows 8的计算上,通过Windows PowerShell来查看IPv6配置信息的常用命令如下所示。

如需了解Windows PowerShell中所有可以用来查看TCP/IP配置的命令,可以在Windows PowerShell中运行命令gcm -Module NetTCPIP

该命令可以显示出IPv6的接口列表,下面是输出信息的示例:

ifIndex ifAlias          AddressFamily ConnectionState NlMtu(Bytes)
------- -------          ------------- --------------- ------------
InterfaceMetric Dhcp     Store
--------------- ----     -----
20    Reusable ISATAP Interface {...    IPv6      Disconnected   0              0
Enabled  Persistent
13     isatap.corp.contoso.com          IPv6      Disconnected   1280           5
Enabled Persistent
12     Wired Ethernet Connection        IPv6      Disconnected   1500           5
Enabled Persistent
10     Local Area Connection* 9         IPv6      Disconnected   0              0
Enabled Persistent
12     Wired Ethernet Connection        IPv6      Connected      1500           5
Enabled Active
13     isatap.corp.contoso.com          IPv6      Connected      1280           5
Disabled Active
1     Loopback Pseudo-Interface 1       IPv6      Connected      4294967295     50
Disabled Active

该命令可以显示出各接口的IPv6地址列表,下面是输出信息的示例:

Store               : Active
IPAddress           : fe80::c51d:624b:b276:6a03%12
InterfaceIndex      : 12
InterfaceAlias      : Wired Ethernet Connection
AddressFamily       : IPv6
Type                : Unicast
PrefixLength        : 64
PrefixOrigin        : WellKnown
SuffixOrigin        : Link
AddressState        : Preferred
ValidLifetime       : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime   : Infinite ([TimeSpan]::MaxValue)
SkipAsSource        : False

Store               : Active
IPAddress           : fe80::5efe:10.198.16.202%13
InterfaceIndex      : 13
InterfaceAlias      : isatap.corp.contoso.com
AddressFamily       : IPv6
Type                : Unicast
PrefixLength        : 128
PrefixOrigin        : WellKnown
SuffixOrigin        : Link
AddressState        : Preferred
ValidLifetime       : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime   : Infinite ([TimeSpan]::MaxValue)
SkipAsSource        : False

该命令可以显示出IPv6地址路由表中的路由条目列表,下面是输出信息的示例:

ifIndex   RouteMetric    DestinationPrefix                  NextHop             Store
-------   -----------    -----------------                  -------             -----
12        256            ff00::/8                           ::                  Active
1         256            ff00::/8                           ::                  Active
12        256            fe80::c51d:624b:b276:6a03/128      ::                  Active
13        256            fe80::5efe:10.198.16.202/128       ::                  Active
12        256            fe80::/64                          ::                  Active
13        256            2001:db8:0:fff:0:5efe:10.198.16.202/128 ::             Active
13        256            2001:db8:0:fff::/64                ::                  Active
1         256            ::1/128                            ::                  Active
13        256            ::/0                               fe80::5efe:10.36.0.4 Active

该命令可以显示出接口缓存的内容,该缓存中会保存最新解析出来的下一跳地址的链路层地址(MAC地址),下面是输出信息的示例:

ifIndex        IPAddress                MacAddress          State          Store
-------        ---------                ----------          -----          -----
12             ff02::1:ffe5:a5ed        3333ffe5a5ed        Permanent      Active
12             ff02::1:ff25:d862        3333ff25d862        Permanent      Active
12             ff02::1:3                333300010003        Permanent      Active
12             ff02::1:2                333300010002        Permanent      Active
12             ff02::2                  333300000002        Permanent      Active
12             ff02::1                  333300000001        Permanent      Active
13             fe80::5efe:10.36.0.4     10.36.0.4           Permanent      Active

在一台运行Windows系统的计算上,可以用来来查看IPv6配置信息的常用命令如下所示。

该命令可以显示出IPv6的接口列表,下面是输出信息的示例:

Idx       Met       MTU            State          Name
---       ---       -----          -----------    -------------------
1         50        4294967295     enabled        Loopback Pseudo-Interface 1
9         50        1280           enabled        Local Area Connection* 6
6         20        1500           enabled        Local Area Connection
10        50        1280           enabled        Local Area Connection* 7
7         10        1500           disabled       Local Area Connection 2

在默认情况下,接口名中含有星号(*)的是隧道接口。

该命令可以显示出各接口的IPv6地址列表,下面是输出信息的示例:

Interface 1: Loopback Pseudo-Interface 1

Addr Type DAD State   Valid Life Pref. Life Address
--------- ----------- ---------- ---------- ------------------------
Other     Preferred     infinite  infinite  ::1

Interface 9: Local Area Connection* 6

Addr Type DAD State   Valid Life Pref. Life Address
--------- ----------- ---------- ---------- ------------------------
Other     Deprecated    infinite   infinite fe80::5efe:1.0.0.127%9

Interface 6: Local Area Connection

Addr Type DAD State   Valid Life Pref. Life Address
--------- ----------- ---------- ---------- ------------------------
Public    Preferred   29d23h59m59s 6d23h59m59s 2001:db8:21da:7:1f3e:9e51:2178:b9ob
Temporary Preferred   5d19h59m25s 5d19h59m25s 2001:db8:21da:7:a299:85ae:21da:59cc

Other     Preferred      infinite    infinite fe80::713e:a426:d167:37ab%6

Interface 10: Local Area Connection* 7

Addr Type DAD State   Valid Life Pref. Life Address
--------- ----------- ---------- ---------- ------------------------
Other     Deprecated    infinite  infinite  fe80::5efe:1.0.0.127%10

该命令可以显示出IPv6地址路由表中的路由条目列表,下面是输出信息的示例:

Publish   Type      Met  Prefix                        Idx  Gateway/Interface Name
-------   --------  ---  ------------------------      ---  -----------------------
No        Manual    256  ::/0                          8 fe80::3cec:bf16:505:eae6
No        Manual    256  ::1/128                       1 Loopback Pseudo-Interface 1
No        Manual    8    2001:db8::/64                 8 Local Area Connection
No        Manual    256  2001:db8::4074:2dce:b313:7c65/128 8 Local Area Connection
No        Manual    256  2001:db8::b500:734b:fe5b:3945/128 8 Local Area Connection
No        Manual    1000 2002::/16                     11 Local Area Connection* 7
No        Manual    256  fe80::/64                     10 Local Area Connection* 9
No        Manual    256  fe80::/64                     8 Local Area Connection
No        Manual    256  fe80::100:7f:fffe/128         10 Local Area Connection* 9
No        Manual    256  fe80::5efe:10.0.0.3/128       17 Local Area Connection* 6
No        Manual    256  fe80::b500:734b:fe5b:3945/128 8 Local Area Connection
No        Manual    256  ff00::/8                      1 Loopback Pseudo-Interface 1
No        Manual    256  ff00::/8                      10 Local Area Connection* 9
No        Manual    256  ff00::/8                      8 Local Area Connection

该命令可以显示出接口缓存的内容,该缓存中会保存最新解析出来的下一跳地址的链路层地址(MAC地址),显示信息按照接口来分类,下面是输出信息的示例:

Interface 1: Loopback Pseudo-Interface 1

Internet Address                               Physical Address    Type
--------------------------------------------   -----------------   -----------
ff02::16                                                           Permanent
ff02::1:3                                                          Permanent

Interface 8: Local Area Connection

Internet Address                               Physical Address    Type
--------------------------------------------   -----------------   -----------
2001:db8::3cec:bf16:505:eae6                   00-13-72-2b-34-07   Stale (Router)
2001:db8::4074:2dce:b313:7c65                  00-00-00-00-00-00   Unreachable
2001:db8::6c4b:bf6d:201a:ccbf                  00-00-00-00-00-00   Unreachable
fe80::3cec:bf16:505:eae6                       00-13-72-2b-34-07   Stale (Router)
ff02::16                                       33-33-00-00-00-16   Permanent

Interface 10: Local Area Connection* 9

Internet Address                               Physical Address    Type
--------------------------------------------   -----------------   -----------
fe80::b500:734b:fe5b:3945                      255.255.255.255:65535 Unreachable
ff02::16                                       255.255.255.255:65535 Permanent

这个命令会显示目的缓存的内容,该缓存中会保存目的地址的下一条地址,显示信息按照接口来分类,下面是输出信息的示例。

Interface 8: Local Area Connection

PMTU Destination Address                               Next Hop Address
---- ---------------------------------------------     -------------------------
1500 2001:db8::3cec:bf16:505:eae6                      2001:db8::3cec:bf16:505:eae6

本章中引用了如下参考文献。

读者可以在链接http://www.ietf.org/rfc.html中找到这些RFC,也可以在链接http://datatracker.ietf.org/doc/中看到Internet草案的具体内容。

回答以下问题可以检测出您对Windows中IPv6的理解水平。答案参见附录B。

1.列举并描述IPv6传输中IPv6协议的特点。

2.可以使用哪三种方式在Windows系统中配置IPv6协议?

3.如果网络管理员希望有选择地禁用Windows计算机上所有的6to4和Teredo隧道接口,那么DisabledComponents注册表值的正确值是什么?

4.如果网络管理员希望有选择地禁用加入了域的Windows Server 2012或Windows 8计算机的6to4和ISATAP隧道接口,那么应该采取什么措施,应该对哪些参数进行配置?

5.描述LLMNR的目的,以及什么时候LLMNR会被当作IPv6地址的名称解析的主要方法。

6.在什么情况下,一台运行Windows的IPv6路由器会将自己通告为默认路由器?

7.列出Windows系统中的常用TCP/IP检测工具是如何被改进以支持IPv6的?

8.哪条Windows PowerShell命令可以显示特定IPv6接口的接口编号?

[1] 在微软系统的某些部分,翻译为“IPv6转换技术”,为了将其与Network Address Translation的相关技术进行区分,因此除微软系统的具体操作尊重微软官方汉化外,其余均采用“IPv6过渡技术”的译法。——译者注

[2] 输入命令gpedit.msc。——译者注


相关图书

Web应用安全
Web应用安全
企业“IPv6+”网络规划设计与演进
企业“IPv6+”网络规划设计与演进
“IPv6+”网络技术创新:构筑数字经济发展基石
“IPv6+”网络技术创新:构筑数字经济发展基石
社交网络对齐
社交网络对齐
华为HCIA路由交换认证指南
华为HCIA路由交换认证指南
非常网管 IPv6网络部署实战
非常网管 IPv6网络部署实战

相关文章

相关课程