图书前言

序    言

本书讲述的是Linux内核的网络子系统架构。创作本书的想法源自德国Karlsruhe大学信息通信学院。在该校,Linux内核被运用于许多项目的研究,且其网络功能分别得到了有针对性的改进和提高。例如,针对下一代Internet开发出了新的服务和协议,并对它们的行为也进行了研究。此外,对于现有的协议(如TCP传输协议)也进行了修改,以改善其行为和适应Internet的新情况。

在这些项目的研究过程中我们发现,Linux内核非常适合于新的网络功能性的研究,因为它对于TCP/IP协议族具有一个稳定和广泛的实现。Linux源代码的免费可得性使得我们可以方便地对协议实例的功能进行修改和提升。此外,内核模块原理对内核功能性的提升提供了很好的支持。然而,这一领域的许多研究和论文表明,对某一协议实例行为进行修改的前提是必须熟悉Linux 网络架构,而这需要耗费大量的时间和精力。不幸的是,造成这一情况的主要原因在于Linux内核网络子系统的注解非常糟糕,且没有用于解释和总结基本概念的材料。

尽管已经有一些书籍介绍Linux内核的架构和基本概念,但是尚没有一本完整地论述其网络实现的书。导致这种状况可能是由于以下两个原因:

* Linux内核的网络子系统非常复杂。如前所述,它实现了大量的协议,这也很可能是Linux获得巨大成功的一个主要原因。[BoCe00]和[BBDK+01]均提到,对于这些协议及其概念的叙述实际上就足以写一整本书。当然,读者现在正在读的就是这样的一本书,正如读者所能看到的那样,这本书的容量相当大,尽管除了解释Linux网络架构的基本概念之外,它仅仅叙述了部分网络功能性。

* 操作系统的开发人员通常只会涉及到系统架构的经典主题,如内存、进程、设备的管理或系统并行活动的同步,而不涉及网络数据包的处理。随着对本书学习的深入,读者肯定会注意到,这本书不是由系统开发人员而是由计算机科学专家和通信工程师撰写的。

考虑到关于Linux网络架构的文档很少且学生必须熟练掌握该知识的这一事实,我们就有了自己创建一份简单的Linux网络架构文档的想法。另一个愿望--这最终促使本书的思想更为广泛——是对重要的通信问题的强化讨论:在现实系统中设计和实现网络协议。网络课程授予学生电信领域中最重要的概念和标准,但是通过应用计算机科学概念来设计和实现网络功能性(主要是网络协议的)在教学工作中受到的关注却比较少,尽管这方面的知识在研究和论文中是要经常被用到的。作者认为对Linux网络架构的实现以及对其结构、接口和所应用概念的论述是对网络课程中的信息学部分的进一步巩固。

作者希望此书能够帮助读者更容易理解Linux网络架构的进程和结构,而且最重要的是,使读者对此有兴趣,并了解一些有关网络概念及其实际应用的东西。

本书的内容与我们对Linux网络架构的了解相吻合。我们对Linux网络架构的了解既不全面也不彻底。但是,我们已经尽可能地以一种详尽易懂的风格来描述Linux网络架构的进程和结构。感谢为本书的改进、观点和注释提供忠告和建议的人们,在以后的版本中我们将会尽量考虑到这些忠告和建议。关于Linux网络架构的最新信息和本书的相关信息均可参见网址http://www. Linux-netzwerkarchitektur.de。

本书的组织结构

第1章主要集中叙述了Linux发展的一般推动因素,并且特别介绍了Linux网络架构发展的推动因素;第2章对Linux内核的基本机理和组件进行了介绍。为了精简本书内容,我们将仅仅讨论那些对于理解Linux网络架构比较重要的组件。至于Linux内核的其他组件,建议读者参考其他书目(比如[BBDK+01])。

第3章初步介绍了通信系统的总体架构和协议以及协议实例的功能性,包括对流行的TCP/IP 和ISO/OSI分层模型的介绍。

第4章和第5章讨论了Linux 网络架构的基本概念,包括Linux内核中网络数据包的表示、管理(请参见第4章)和网络设备的概念(请参见第5章)。网络设备形成了高层协议实例之间的链路,并隐藏了某一统一接口后面相应网络适配器的特殊性。

第6章总体介绍了Linux网络架构中的活动形式以及传输和接收进程流。此外,本章还介绍了高层协议实例的接口。

第7章到第12章讨论了数据链路层的协议和机制。更明确地说,这些章节叙述了SLIP、PPP、以太网上PPP协议以及Linux是如何支持ATM 和Bluetooth网络技术的。最后,还描述了如何利用Linux计算机使之成为一部透明网桥。

第13章首先概述了TCP/IP协议族并以此展开了对 TCP/IP协议的讨论。先从Internet简史开始谈起,然后对TCP/IP协议族中的不同协议进行了一个概述。第14章详细介绍Internet协议(Internet Protocol)及其机制。此外,本章还介绍了IP选项和ICMP协议。第15章到第23章介绍了网络层的以下协议和机制:ARP、路由、多播、流量控制、防火墙、连接跟踪、NAT、KIDS和IPv6。

第24章和第25章分别论述了TCP和UDP传输协议。在第26章,以对套接字接口的解释结束对内核的讨论,然后简要概述了应用层上的网络功能编程。

附录给出了一些补充信息并介绍了一些工具,以便于读者学习和应用Linux网络架构。所涉及的问题包括LXR源代码浏览器、Linux内核中的调试工作和可以用于Linux网络架构处理及监控的工具。

其他信息源

这部分列出了一些有用的信息源,从中读者可以找到关于Linux网络架构的其他信息。

杂志

* Linux Magazine(http://www.Linux-mag.com)可能是最有名的Linux杂志了。其中的文章囊括读者学习应用Linux时感兴趣的所有的问题。最有趣的是 Kernel Corner 专栏,该专栏定期刊出有关Linux内核组件的架构和实现的文章--大多数是由开发人员自己撰文的。

* Linux Focus(http://www.linuxfocus.org)是一份在线的多语种杂志。它同样也有Kernel Corner专栏。

* Linux Gazette(http://www.linuxgazette.com)是另一份专注于Linux的在线杂志。

环球网上的有用链接

■ Linux Headquarters  http://www. linuxhq. com

■ Linux Documentation Project  http://www.linuxdoc.org

■ Linux Weekly News  http://www.lwn.net

其他信息

■ “基本知识”(Howto)包含了许多关于不同Linux问题的信息。大多数涉及各种Linux功能性的配置和安装信息。尤其是对于Linux内核而言,同样具有一些“基本知识”文档--例如在内核中如何使用锁[Russ00b]、关于Linux内核监视的一般信息[Russ00c]。当然,我们不应该忘记提到网络“基本知识”,它包括很多关于在Linux中配置网络功能性的技巧和信息[Drak00]。

* 当前Linux内核的源代码可以在ftp.kernel .org站点上找到。该FTP服务器同样也有一些镜像,其列表可以在网址http://www .kernel.org/mirrors/找到。

■ 有关Linux内核的组件和驱动程序的信息直接包含在内核版本的源代码中,在Documentation子目录当中。此外,在文件Documentation/kernel-docs.txt中包含了有关于Linux内核的当前信息列表--比如文件、链接和书籍(这个值得一看!)。

致谢

本书的出版,许多人做出了不可或缺的贡献。首先我们要感谢所有在其学术文章和论文中对Linux网络架构进行了研究的同学。他们在信息通信学院收集了大量关于Linux网络架构的知识材料,他们是:

Nasieh Abdel-Haq、Paul Burczek、Michael Conrad、Frank Dinies、Paul Hankes Drielsma、Jér?me Freilinger、Carolin G?rtner、Stefan G?tz、Karsten Hahn、Artur Hecker、Tobias Hinkel、Michael Hofele、Verena Kahmann、Vera Kieβling、Stefan Klett、Andreas Kramm、Jan Kratt、Eckehardt Luhm、David Metzler、Ulrich Mohr、Rainer Müller、Sven Oberl?nder、Vincent Oberle、Jan Oetting、Torsten Pastoors、Christian Pick、Christian Schneider、Steffen Schober、Marcus Sch?ller、Achim Settelmeier、Uwe Walter和Jürgen Walzenbach。

作者们主要是为他们的学生们写就此书的。

还要感谢Gerhard Krüger教授,他一直在支持我们的活动,给了我们撰写此书必要的自主性,并给我们提出了宝贵的建议。他的支持使得我们能够拥有一个Linux测试网络,这是我们在信息通信学院进行关于下一代Internet服务的研究活动的基础。

要特别感谢出版社的朋友们,他们出版了本书最初的德语版本和英语版本。尤其要感谢我们的编辑Sylvia Hasselbach 和ToniHolm,他们可敬的耐心帮助并引导我们完成了此书的撰写。在此我们也同样感谢为我们完成英语翻译工作的Angelika Shafir。我们也感谢所有审阅手稿的人们,特别是Mark Doll、Sebastian D?weling、Thomas Geulig、Thorsten Sandfuchs、Marcus Sch?ller、Bernhard Thurm、Uwe Walter、Anja Wehrle、Kilian Weniger和Friederike Daenecke。

最后,深深地感谢我们的家人和朋友给予我们的支持、鼓励和耐心。

参与本书翻译和审校的还有王海涛,高峰、张国华、高磊、刘刚、王伟、李强、王冰、许小虎、张蕾、杨晶、张亮、孙杰、李光、黄宏、张明、王超、李旭、刘捷、杨玲、高超、高洁、张冬、张磊、李芳、张伟、李华、杨洁、王峰、张立、黄洁、苏丽、田宁、王丹、白宇、李兵、陈波等。在此表示感谢。

IV  序言

序言  V