无论是在学术界还是在商业界,KAME的IPv6实现都已经被当作IPv6实现的事实参考。世界上无数研究人员都将他们对IPv6及下一代因特网的研究建立在实现了KAME的系统上。对KAME的接受已经超出了纯学术研究的范畴,而成为了很多商业产品的一个组成部分。.
本系列书通过KAME实现对IPv6及相关协议进行了详细的描述。书中采用的方式与W.Richard Stevens和Gary R.Wright编写《TCP/IP详解》所采用的方式类似,《TCP/IP详解》为20世纪90年代的开发人员捉供了对TCP/IPv4网络本质的真知灼见。我们希望在本系列书中与读者分享我们在KAME和IPv6方面的深刻理解和开发经验,帮助读者投入到这个全新的、普遍连通的美妙世界中。
现在关于IPv6的书有很多,在Amazon上搜一下书名中包含IPv6的书就能得到不下几十个结果。但我们的书并不仅仅是另一套关于IPv6的书。据我们所知,我们的书是同类书中的第一套也是唯一一套,书中对一个已经被很多开源操作系统以及商业操作系统采纳的实际IPv6实现进行了深入研究,并对代码及其设计进行了剖析,说明了我们是如何根据标准对IPv6及其相关协议进行解释和实现的。书中会阐明标准中那些具有二义性的地方,这些地方可以用各种方法解释,并且在应用中存在问题,因而为实现带来挑战。读者将从本质上理解早期实现经验能够为一种技术的开发和成长提供什么样的帮助。
本书的组织
本书是关于IPv6及相关协议的两卷本中的第一本。本书通过完整的代码描述以及对KAME本质的阐释,从规范到操作介绍了核心IPv6协议。
本书对IPv6协议基础及特征、ICMPv6协议、对在IPv6上的TCP或UDP这样的传输层问题的考虑以及开发支持IPv6的应用程序所需的套接字扩展进行了讨论。下面对本书每章的内容进行简单的说明。
·第1章介绍KAME项目的简要历史,描述KAME发行版的组件,解释构建一个实现了KAME的BSD系统的步骤,介绍BSD联网系统的基本知识以及KAME对基本系统的增强。
·第2章讨论各种类型IPv6地址的格式和结构,随后是与地址配置及操作有关的代码描述。
·第3章讨论IPv6的协议结构、扩展首部及在IPv6层处理IPv6分组输入及输出的KAME实现。本章还会介绍用来传输IPv6分组的默认地址选择算法。
·第4章讨论ICMPv6的协议结构,这是IPv6操作的一个组成部分,描述KAME实现中基本ICMPv6操作的输入函数和输出函数。作为ICMPv6的一个有趣应用,奉章还会详细描述节点信息查询协议。
·第5章对邻居发现(ND)协议进行了描述。邻居发现运行于ICMPv6之上,并提供了各种基础服务,例如链路层地址解析、路由器发现以及路由重定向等。自动地址配置服务也是通过邻居发现分组提供的。本章会非常详细地阐述邻居发现协议和无状态地址自动配置过程。本章会描述与邻居发现协议操作有关的主要KAME内核函数。
·第6章描述为使传输层协议运行于IPv6之上而对TCP和UDP所做的修改,还会说明为使传输层协议成为双协议栈,而对BSD内核实现所做的修改。
·第7章讨论对套接字APl所做的IPv6扩展和增强。本章还会讨论几个已扩展或创建以支持IPv6的标准用户库。本章最后会提供一些例子,说明如何编写既可以在IPv4网络上运行又可以在IPv6网络上运行的可移植应用程序。
本书的姊妹篇为《IPv6详解,卷2:高级协议实现》(英文版书名为IPv6 Advanced Protocols Implementation,文中简称为《卷2》),书中讲述了下列主题。
·第1章——IPv6单播路由选择协议。
·第2章——IPv6多播。
·第3章——IPv6的DNS。
·第4章——IPv6的动态主机配置协议(DHCPv6)。
·第5章——移动IPv6。
·第6章——IPv6与IP安全。
.图0-1以图形方式描述了这两本书涵盖的IPv6的各个方面。我们将本书称为“卷1”,将高级协议那本称为“卷2”。
这两本书涵盖了很多协议规范,这些规范主要是作为RFC(请求评论)发布的,并且是互相关联的。图0-2,总结了本系列图书涵盖的主要RFC和描述特定规范的各章之间的关系。箭头表示两个特定规范之间的引用关系。比如,从RFC3041到RFC2461的箭头就说明前者引用了后者。
每章都包含两个主要部分,每部分都由一个或两个连续的小节组成。第一部分提供了对那一章介绍的、作为RFC发布的主要协议规范的摘要。对第3章至第5章这样的协议章来说,第一部分描述的是特定协议的基本操作。第一部分定义各种协议分组,解释每个分组中每个字段的含义和目的,描述有关协议是如何处理分组的。这部分还尝试着在必要的地方对RFC中有歧义的文本进行了澄清。
每章的第二部分则描述实现这些RFC的KAME的数据结构和函数。书中提供了一些图,以图形方式说明了各种数据结构之间的关系,还提供了函数调用图来说明代码的来龙去脉。在这一部分中,代码叙述也能澄清规范中存在的一些有歧义的地方,并标识出RFC中一些难以实现的部分。
有些章还有一个附加的尾部。这部分描述一些有用的工具,并说明其用途,从而强调这个实现在实际操作中是怎样工作的。
本书的目标读者及使用方法
对刚接触IPv6或KAME的开发人员来说,可以将本书当作IPv6方面的第一本书。对需要掌控或维护基于KAME的系统的开发人员,以及需要在不同的BSD变体上采用KAME代码并维护及增强KAME的BSD开发人员来说,可以将本书当作一本参考教程。
本书也适合作为大学本科四年级关于IPv6及相关协议的计算机科学课程的教材,也可以作为一年级研究生IPv6方面基于项目的课程的教学参考书。指导教师必须设置一些计算机网络、网络编程方面的计算机科学基础课程以及一门关于TCPflP的课程(选修)作为先修课程。学生还应该熟练掌握C语言。
通常我们鼓励读者按顺序来阅读书中各章的内容,但贯穿全书的大量交叉引用使读者可以直接从一章跳到另一章感兴趣的主题,而不必担心迷失在这个代码迷宫中。对那些熟悉现有TCP/IP技术的读者来说,第6章和第7章对如何将现有应用程序转换到IPv6中去,以及如何编写lPv6应用程序提供了有用的过渡指导。
对各种设计决策的详细描述揭示了规范及实现中存在的偏差。这些深入的理解可以帮助研究人员找出新的研究课题。从KAME中获取的知识使研究人员可以将KAME设为一个平台,并在这个平台上建立一些实验解决方案。..
配套资源
本书英文原版带有2张CD-ROM①。第一张CD-ROM是FreeBSD4.8-RELEASE的ISO映像,这是本书讨论的基础操作系统。这是一张可引导CD-ROM,其中包含安装文件。用CD-ROM开机就可以启动安装过程。CD-ROM根目录中的INSTALL.TXT文件中有详细的安装过程。第二张CD-ROM中包含FreeBSD4.8-RELEASE的源文件和本书提到的KAME快照发行版。在CD-ROM的根目录中有两个子目录。
·FreeBSD4.8—RELEASE——包含FreeBSD4.8-RELEASE的整个源树。
·kame-snap-20030421——包含2003年4月21日创建的KAME快照的源树。
本书描述的所有源文件都可以在第二张CD-ROM中找到。读者阅读本书时可以在CD-ROM中找到完整的源代码,也可以用目录kame-snap-20030421下的源树来安装KAME实现,以查看KAME栈的实际表现。1.3.2节对KAME快照的安装过程进行了说明。
源代码版权
本书提供了KAME项目开发的很多源代码,也引用了作为FreeBSD系统的一部分发布的其他源代码。所有这些源代码都是有版权声明的,这些版权声明在第二张CD-ROM包含的源代码副本中。
报告错误及勘误表
尽管在本书的审阅和更新阶段,我们尽了最大努力找出并修正错误,但在这么大部头的一本书中,还是不可避免地会有一些疏漏的错误。作者很高兴收到关于本书内容的错误报告,并在因特网上提供一个错误更正页面。这个页面位于http://books.elsevier.com/companions/0124477518。
致谢
QingLi的个人致谢
2003年1月,我刚刚在风河(Wind River)公司完成了一项历时3年的嵌入式IPv6项目,正在整理我的笔记和文章以响应ACM SIGCOMM对新通信协议的征稿通知。
我厚厚的笔记本里记录了代码路径、对各种数据结构及代码片断的描述、大量的图表,以及数不清的关于KAME实现的注解。阅读笔记时,我想,如果有一本关于KAME的书该多好啊。这个想法马上打动了我:我可以把所有这些注解都放到一本书中去,这样就可以帮助其他人理解IPv6,并推动他们的项目的发展了。这个想法一发不可收,并逐渐变成一种讨论整个KAME实现的大胆尝试。
我在2003年3月向KAME核心开发者Jinmei先生提出了关于写这本书的想法,并邀请他加入。Jinmei先生是IPv6及多播路由选择、DHCPv6和DNS等各种重要因特网技术领域中一位知名且受人尊敬的研究者。他欣然接受了我的邀请。
另一名核心KAME开发者Shima先生在3月底加入了我们的行列。Shima先生是IPv6及移动领域中一位知名且受人尊敬的研究者。
我们在2003年5月就一份写作计划达成了一致,但书在差不多3年之后才完成。
Jinmei先生为整本书提供了技术指导。他对内容、细节及技术精确性的洞察力和细心的关注确保了本书的质量。他在内容上为我提供了很多帮助,即使很忙,甚至在24小时工作的时候,也总是积极地回答我的一些技术问题和质询。
Shima先生在内容和修订方面都为我提供了很多帮助。尤其是在项目快结束,我承受着工作和个人生活的双重压力时,Shima先生和Jinmei先生帮助我冲过了“终点线”。Shima先生作出的贡献显然比他应该承担的责任要多。
和我的合作者一起工作是一个绝妙的学习过程。他们出色的专业技能、他们的勤奋以及他们的工作理念都为我设定了一个新的学习标准。
我要感谢Rick Adams与我分享了对书的看法,感谢他在过去3年里付出的耐心和时间。在我们的谈话中,大部分时间都是我在解释为什么时间表再次推后了,而在很多次谈话中,他都是以很委婉的方式来表达他的沮丧,对此我非常感激。
我要感谢我的妻子Huaying Cheng,感谢她对我经常在电脑前工作到深夜并在电脑前度过那么多个周末的理解和支持。
Tatuya Jinmoi的个人致谢
除了在下面的小组致谢中感谢的那些为本书作出贡献的人之外,我个人还想感谢东芝公司的经理Yuko Kamatani、Toshio Murai、Yasuhiro Katsube和Atsushi Inoue,他们为我在KAME项目组的工作提供了支持,并批准了这项派生出来的工作。要是开始没有他们的理解和支持,我就不会成为一名KAME的开发者,更不要说写一本关于KAME的书了。
同样,如果没有Jun Murai和Hiroshi Esaki,我也不会取得今天的成就。在WIDE和KAME项目中,他们总是鼓励我,为我提供新的机会,还教会了我无私奉献的精神。Murai先生还友好地接受了为本书作序的邀请。
最后,我要感谢我的合作者。很显然,如果Qing没有邀请我,我永远也想不到要写一本关于KAME的书。对于我编写书稿时的延误他总是能宽容对待,并在我为种种细节斟酌不休,延误交稿达半年之久的情况下,保证了我们没有超过出版合同约定的时限。当我为在截稿日期之前修改完书稿感到绝望时,Shima先生帮助了我——这远远超出了他的责任。
Keiichi Shima的个人致谢
首先,我要感谢所有创建了高质量IPv6参考代码的KAME开发者。没有这些代码,就不会有这本书,也就是说,没有那些开发者不断润饰代码的努力,没有他们用代码来实现IPv6技术的坚定决心,就不会有这本书。幸运的是,我加入了这个项目,这是我的荣耀,我可以为这个伟大的项目作出我的贡献。对我来说,这是一段宝贵的时光,是一种无法替代的体验。我开始做与IPv6相关的工作时还是个学生。Jun Murai先生和Kazuhiko Yamamoto先生给我提供了在WIDE项目中为IPv6工作的机会。我无法想象如果没有遇到他们我会怎么样。Kazumasa Utashiro先生和Eiiti Wada先生为我在KAME项目中的活动提供了支持。没有因特网技术,我所有的工作都无法完成。我要感谢所有为因特网的运行做出不懈努力的人们。
小组致谢
作者要感谢所有的KAME开发者。这也是“他们的书”,因为他们编写的KAME代码占本书一半的篇幅。尤其要感谢Shinsuke Suzuki,他阅读了本书的每一章,并提出了很多宝贵的注解和建议。Kenjiro Cho、Tsuyoshi Momose和Ryuji Wakikawa仔细地审阅了部分章节,并以大量细致的注解帮助我们提高了本书的质量。我们还要感谢那些项目之外的审稿人,特别是Rob Austein、George Neville-Neil、Andre Oppermann、Shawn Routhier、Randall Stewart、Shinta Sugimoto和Kazumasa Utashiro。他们自愿花费了大量的个人时间。本书的封面图片基于知名的KAME形象,这个形象是(小鼯鼠画室的)Manabu Higashida和Chizum Higashida设计的KAME项目标志。
我们还要感谢Gary R.Wright和W.Richard Stevens,是他们的书帮助我们建立了基本的TCP/IP知识。他们描述BSD网络代码的模式非常有效,所以我们决定在本书中借用这种模式来描述KAME的IPv6实现。我们的贡献应该部分归功于他们,归功于他们对网络工程界的贡献。我们希望能够为IPv6技术中的下一代工程人员作出同样的贡献。
最后,我们要向本书的编辑RickAdams、Rachel Roumeliotis、Dawnmarie Simpson以及Morgan Kaufmann/Elsevier的编辑们表达我们诚挚的谢意,感谢他们为将我们的书稿出版为一本专业书籍所做的努力。...