TCP/IP架构、设计与应用(Linux版)
基本信息
编辑推荐
本书是“Linux版国外计算机科学经典教材”之一,全书共分20个章节,主要对TCP\\IP架构设计及应用知识作了介绍,具体内容包括协议基础、sk_buff和协议头、TCP发送、TCP核心处理、Linux中的IP服务质量(IP QoS)等。该书可供各大专院校作为教材使用,也可供从事相关工作的人员作为参考用书使用。
推荐阅读
内容简介回到顶部↑
随着开源软件逐渐成为商业系统和研究项目可信任的组成部分,tcp/ip与linux操作系统的结合也越来越常见。tcp/ip的盛行使计算机之间的通信越来越容易,虽然这些计算机使用不同的操作系统,如windows、mac os、linux、unix等。由于linux的开源性和易修改性,因此在构建应用程序时,它已经成为开发人员常选的操作系统,开发人员可以定制操作系统,以满足应用程序的需求。
《tcp/ip架构、设计及应用(linux版)》采用一种简洁、渐进的方式介绍了linux中tcp/ip的设计和实现——从简单的客户端一服务器应用程序到比较复杂的执行过程,还提供了大量源码和图示来阐述相关的实现,以帮助读者更好地理解本书的内容。
《tcp/ip架构、设计及应用(linux版)》适合于嵌入式网络产品开发人员、网络安全产品开发人员、研究人员、it网络架构师以及研究生。
《tcp/ip架构、设计及应用(linux版)》采用一种简洁、渐进的方式介绍了linux中tcp/ip的设计和实现——从简单的客户端一服务器应用程序到比较复杂的执行过程,还提供了大量源码和图示来阐述相关的实现,以帮助读者更好地理解本书的内容。
《tcp/ip架构、设计及应用(linux版)》适合于嵌入式网络产品开发人员、网络安全产品开发人员、研究人员、it网络架构师以及研究生。
作译者回到顶部↑
本书提供作译者介绍
Sameer Seth是Juniper Networks公司JUNOS内核工作组的高级工程师。他曾经是Sun Microsystems的高级工程师,主要从事Sotaris的TCP/0P协议栈、套接字、流、NFS以及相关的内核框架方面的工作。他拥有十几年Linux的研发经验,也曾从事嵌入式TCP/IP Linux.协议栈和X86体系结构方面的工作。此外;他还曾从事Motorola MPC8260处理器上各种通信协议的工作。Sameer撰写有关opensolaris技术的博客(bloqsun.com/sameer),并发布相关的技术讨论。他还参与网络和Unix相关技术的写作和讨论。
M.Ajaykumar Ven.. << 查看详细
M.Ajaykumar Ven.. << 查看详细
目录回到顶部↑
第1章 引言
1.1 tcp/ip协议栈概述
1.1.1 沿协议栈向下的处理过程
1.1.2 沿协议栈向上的处理过程
1.2 linux 2.4.20的源码组织结构
1-3 tcp/ip协议栈和内核控制路径
1.4 版本2.4之后linux内核的可抢占性
1.4.1 linux系统调用
1.4.2 添加新的系统调用
1.5 linux进程和线程
1.5.1 forkt()
1.5.2 线程
1.5.3 内核线程
1.6 内核同步机制
1.6.1 信号量
1.6.2 原子操作
1.6.3 旋转锁
1.7 tcp/ip应用编程接口
1.7.1 服务器应用
1.7.2 客户端应用
1.1 tcp/ip协议栈概述
1.1.1 沿协议栈向下的处理过程
1.1.2 沿协议栈向上的处理过程
1.2 linux 2.4.20的源码组织结构
1-3 tcp/ip协议栈和内核控制路径
1.4 版本2.4之后linux内核的可抢占性
1.4.1 linux系统调用
1.4.2 添加新的系统调用
1.5 linux进程和线程
1.5.1 forkt()
1.5.2 线程
1.5.3 内核线程
1.6 内核同步机制
1.6.1 信号量
1.6.2 原子操作
1.6.3 旋转锁
1.7 tcp/ip应用编程接口
1.7.1 服务器应用
1.7.2 客户端应用
译者序回到顶部↑
我们非常愿意向大家推荐由Sameer Seth和M.Ajaykumar Venkatesulu编写的《TCP/IP架构、设计及应用(Linux版)》一书。
Sameer Seth以前是Sun Microsystems的高级工程师,主要从事Solaris TCP/IP协议栈、套接字、流、NFS、相关内核框架方面的研究与开发工作,拥有十几年Linux研究和商业开发的经验。他在嵌入式Linux TCP/IP协议栈和X86体系结构方面有着很深的造诣。此外,他曾从事Motorola MPC8260处理器上各种通信协议的开发工作。可以说,Sameer Seth对LinuxTCP/IP协议栈有着非常深入的理解。
本书采用大量的源码和图例来阐述Linux TCP/IP协议栈,尽管市面上有很多介绍TCP/IP协议栈的书籍,但是这些书籍过于侧重参照TCPflP协议相关的RFC来进行阐述,或者注重于一些TCP/IP相关的算法,而从报文的处理过程以及实现源码来深入浅出地介绍Linux TCP/IP协议栈的书籍则很少。可以说,本书是当前市面上唯一使用源码来介绍LinuxTCP/IP概念和实现的文献。本书试图介绍TCP/IP协议栈和内核支撑框架的各个方面,其思想是尽可能地弱化其复杂性,以便于理解的方式呈现给读者。本书首先介绍了支撑该协议栈的内核框架。在Linux中,这些支撑框架有VFS层、套接字框架、协议层、定时器、内存管理、中断处理、软中断、内核线程、内核同步机制等,这是内核实现协议栈所需的。本书采用一种简洁、渐进的方式讨论了TCP/IP协议栈的各个方面,从简单的客户端-服务器程序开始,直到深入介绍TCP/IP协议栈中一些比较复杂的处理过程。每个章节都配有大量的源码和图示,以帮助读者更好地理解这些内容。对于没有太多时间来阅读书籍又期望对LinuxTCP/IP协议栈有深入了解的读者来说,这是一本很好的参考用书。
全书由黄清元博士和于杰博士翻译完成,最后由李化统稿。由于译者水平所限,翻译不妥或者错误之处在所难免,敬请广大读者批评指正。
Sameer Seth以前是Sun Microsystems的高级工程师,主要从事Solaris TCP/IP协议栈、套接字、流、NFS、相关内核框架方面的研究与开发工作,拥有十几年Linux研究和商业开发的经验。他在嵌入式Linux TCP/IP协议栈和X86体系结构方面有着很深的造诣。此外,他曾从事Motorola MPC8260处理器上各种通信协议的开发工作。可以说,Sameer Seth对LinuxTCP/IP协议栈有着非常深入的理解。
本书采用大量的源码和图例来阐述Linux TCP/IP协议栈,尽管市面上有很多介绍TCP/IP协议栈的书籍,但是这些书籍过于侧重参照TCPflP协议相关的RFC来进行阐述,或者注重于一些TCP/IP相关的算法,而从报文的处理过程以及实现源码来深入浅出地介绍Linux TCP/IP协议栈的书籍则很少。可以说,本书是当前市面上唯一使用源码来介绍LinuxTCP/IP概念和实现的文献。本书试图介绍TCP/IP协议栈和内核支撑框架的各个方面,其思想是尽可能地弱化其复杂性,以便于理解的方式呈现给读者。本书首先介绍了支撑该协议栈的内核框架。在Linux中,这些支撑框架有VFS层、套接字框架、协议层、定时器、内存管理、中断处理、软中断、内核线程、内核同步机制等,这是内核实现协议栈所需的。本书采用一种简洁、渐进的方式讨论了TCP/IP协议栈的各个方面,从简单的客户端-服务器程序开始,直到深入介绍TCP/IP协议栈中一些比较复杂的处理过程。每个章节都配有大量的源码和图示,以帮助读者更好地理解这些内容。对于没有太多时间来阅读书籍又期望对LinuxTCP/IP协议栈有深入了解的读者来说,这是一本很好的参考用书。
全书由黄清元博士和于杰博士翻译完成,最后由李化统稿。由于译者水平所限,翻译不妥或者错误之处在所难免,敬请广大读者批评指正。
前言回到顶部↑
在过去的十几年中,Linux已经成为网络领域中服务器技术、嵌入式系统、研究工作的常用选择。它首先引起了学生团体的兴趣,并逐渐进入研究人员和公司的视野。网络一旦与Linux结合,就在很多方面诞生了一系列具有创新性的产品,如高端通信设备、数据中心、嵌入式系统等。
1996年,我第一次进行TCP/IP套接字编程,从此开始了解Linux。那时,我对客户端-服务器知之甚少,不明白服务器程序使用唯一端口号在系统中注册自身,而客户端则根据该端口号与服务器通信。我也不了解客户端程序用以标识主机的IP地址,然后我强迫自己去学习和了解它们的工作原理。
很多知识都需要从头开始学习,如系统调用、协议、Linux内核、驱动器、支持协议栈的内核框架等。慢慢地,我逐步了解了Linux内核,了解到用户区程序通过编写新的系统调用和内核模块来实现与内核的交互。
这个学习过程首先从著名的RichardStevens所编写的TCP/IP IllustrateJ,Volume 1开始,但是,由于很少有探讨这些协议在Linux实现的相关文档和书籍,因此,我决定自己深入学习来了解协议栈的实现。最后,我开始明白了套接层如何链接到VFS层,然后又逐渐了解TCP层以及TCP协议发送数据的第一个接口例程。接下来,不断地对TCP/IP协议栈的实现进行总结和实验。当总结了很多学习经验时,我产生了将这些资料介绍给Linux社区的想法。编写一本书超出了我的能力,这将需要大量的工作,并会花费大量的时间和精力。但是,我仍然下定决心将这个复杂的话题引入Linux社区,尽我所能地对其进行介绍。不过由于缺乏相关详细、系统的文档或者书籍介绍,因此,理解这些问题显得比较困难,于是我开始考虑是否可能写一本这方面的书籍。当我从IEEE计算机协会和John Wiley&Sons收到邀请时,我下定决心要完成编写这样一本书。
在工作的同时还要编写本书使我倍感困难,因此,我想应当寻找一个合著者,以负责某些内容的编写工作。经过长时间努力,M.Ajaykumar Venkatesulu成为我的合著者,他从事庞大且最为复杂的路由子系统和QoS方面的工作。
本书试图介绍TCP/IP协议栈和内核支持框架的各个方面,其思想是尽可能地弱化其复杂性,以便于理解的方式呈现给读者。理解任何操作系统上的TCP/IP实现,首先需要理解支持该协议栈的内核框架。在Linux中,这些支持框架有VFS层、套接字框架、协议层、定时器、内存管理、中断处理、软中断、内核线程、内核同步机制等,这是内核实现协议栈所需的。除此之外,还需要了解打开TCP通信套接字和客户端』艮务器程序所需的通信协议以及应用程序接口(系统调用)。这些知识对于希望学习和了解该主题,并希望为Linux做贡献的学生和经验丰富的专业人员来说,都很有帮助。
在编写本书时是基于Linux内核2.4.20,而最新版本的2.6内核在TCP/IP协议栈方面并没有很大变化,并且在Linux应用中,2.4内核是接受最为广泛的版本。2.6版内核在TCP/IP方面的变化将在本书的下一版本中讨论。
读者对象
本书面向各个方面的读者:
全世界研究机构的研究人员:从事TCP/IP协议栈方面工作的研究人员发现,BSD是最为适合的网络操作系统。但在企业界,BSD并不是常用的一种选择。因此,研究人员最常用的选择是Linux操作系统,研究如何提高TCP/IP协议栈在该操作系统上的性能。网络是当前最为广泛的研究领域,其原因是Intemet在社会生活中的地位日益提高。一般来说,研究人员喜欢比较简单的商业化操作系统,这些操作系统能够运行在廉价的硬件上。
学术研究人员:高级学术研究项目更喜欢使用Linux,如MS、M.Tech、B.Tech、PG等,其原因在于Linux是第一个类Unix的操作系统,它文档丰富并且运行稳定。在网络领域,学生通常选择Linux上的TCP/IP来开展项目研究。这些项目的需求有修改路由器或者TCP性能、实现一些新的TCP/IP RFC、网络驱动器、实现安全IP层、提高处理网络流量的可扩展性。
公司:从很大程度上来说,企业界一般都选择Linux作为开发其网络产品的操作系统。很多公司在开发网络产品(如IP安全、服务质量(基于类的路由)、路由器开发、带宽管理产品、集群服务器等)时,都要修改TCP/IP协议栈,或者编写新的模块集成到Linux TCP/IP协议栈中。Linux不仅是开放式系统的常用选择,也是嵌入式产品和实时操作系统的主流选择。这些嵌入式产品主要用于网络领域,如路由器、嵌入式Web服务器、Web浏览器等。
企业:新思想不断涌现,不过需要转化为产品。随着Intemet的应用日益广泛,开发网络产品方面出现了很多新思想,Linux再次成为企业界开发的首选。
开源组织:由于Linux和Intemet技术的使用日益广泛,很多新毕业的大学生,甚至软件业人员都希望能够为提高Linux的网络能力做贡献。他们的目标是使Linux更加强大、稳定、安全,互联功能更加完善,以满足企业界的各个方面要求。很多专业人员希望能够为Linux网络能力做贡献,但是,没有足够的时间来熟悉网络协议栈和内核框架。
国防机构:Linux作为一种网络操作系统,在国防机构的应用也日益广泛,尤其是在军事领域,对LinuxIPSec进行一定的修改后,可以应用于安全军事网络事务。
所有这些人员都需要对LinuxTCP/IP协议栈和内核网络协议栈框架有较为全面、细致的了解。而理解TCP、IP、BSD套接字、防火墙、IPSec、IP转发、路由器网络驱动,都需要对网络协议栈的实现和设计有比较全面的了解。如果要实现IPSec或者防火墙,就需要了解在Linux中如何实现报文,报文如何以及从何处传递给IP层,IP层如何处理报文并添加协议头,最后还需要了解IP层如何将报文传递给设备驱动器来最后传输出去。类似地,如果要实现QoS,或者对现有实现做一些修改,就需要了解Linux路由表实现、报文结构、报文调度、内核帧的处理过程(如网络软中断等)。因此,任何需要修改现有Linux网络协议栈或者向协议栈添加新特性的工作,都需要全面理解LinuxTCP/IP协议栈的设计与实现。本书的组织结构
本书全面阐述了Linux TCP/IP协议及其设计和实现。首先以简单的客户端-服务器套接字程序开始,最后探讨了Linux中较为复杂的TCP/IP协议和设计与实现,其间则逐步阐述套接字编程的各个方面以及主要的TCP/IP相关算法。包括:
Linux内核和TCP/IP应用接口:第1章介绍了Linux内核的基本知识,以及使用TCP/IP协议栈进行通信的内核接口(系统调用)。
协议:第2章讲述了TCP/IP协议以及相关支持协议,如ARP和ICMP等。本章使用图示阐述了一些主要的RFC,以使读者熟悉这些协议,从而便于在后面的章节中将Linux及其对协议栈的实现联系起来。
套接字:第3章讲述了BSD套接字在Linux内核中的实现,本章详细讨论了套接字层如何挂接到VFS层,以及各种协议如何挂接到BSD套接字。
1996年,我第一次进行TCP/IP套接字编程,从此开始了解Linux。那时,我对客户端-服务器知之甚少,不明白服务器程序使用唯一端口号在系统中注册自身,而客户端则根据该端口号与服务器通信。我也不了解客户端程序用以标识主机的IP地址,然后我强迫自己去学习和了解它们的工作原理。
很多知识都需要从头开始学习,如系统调用、协议、Linux内核、驱动器、支持协议栈的内核框架等。慢慢地,我逐步了解了Linux内核,了解到用户区程序通过编写新的系统调用和内核模块来实现与内核的交互。
这个学习过程首先从著名的RichardStevens所编写的TCP/IP IllustrateJ,Volume 1开始,但是,由于很少有探讨这些协议在Linux实现的相关文档和书籍,因此,我决定自己深入学习来了解协议栈的实现。最后,我开始明白了套接层如何链接到VFS层,然后又逐渐了解TCP层以及TCP协议发送数据的第一个接口例程。接下来,不断地对TCP/IP协议栈的实现进行总结和实验。当总结了很多学习经验时,我产生了将这些资料介绍给Linux社区的想法。编写一本书超出了我的能力,这将需要大量的工作,并会花费大量的时间和精力。但是,我仍然下定决心将这个复杂的话题引入Linux社区,尽我所能地对其进行介绍。不过由于缺乏相关详细、系统的文档或者书籍介绍,因此,理解这些问题显得比较困难,于是我开始考虑是否可能写一本这方面的书籍。当我从IEEE计算机协会和John Wiley&Sons收到邀请时,我下定决心要完成编写这样一本书。
在工作的同时还要编写本书使我倍感困难,因此,我想应当寻找一个合著者,以负责某些内容的编写工作。经过长时间努力,M.Ajaykumar Venkatesulu成为我的合著者,他从事庞大且最为复杂的路由子系统和QoS方面的工作。
本书试图介绍TCP/IP协议栈和内核支持框架的各个方面,其思想是尽可能地弱化其复杂性,以便于理解的方式呈现给读者。理解任何操作系统上的TCP/IP实现,首先需要理解支持该协议栈的内核框架。在Linux中,这些支持框架有VFS层、套接字框架、协议层、定时器、内存管理、中断处理、软中断、内核线程、内核同步机制等,这是内核实现协议栈所需的。除此之外,还需要了解打开TCP通信套接字和客户端』艮务器程序所需的通信协议以及应用程序接口(系统调用)。这些知识对于希望学习和了解该主题,并希望为Linux做贡献的学生和经验丰富的专业人员来说,都很有帮助。
在编写本书时是基于Linux内核2.4.20,而最新版本的2.6内核在TCP/IP协议栈方面并没有很大变化,并且在Linux应用中,2.4内核是接受最为广泛的版本。2.6版内核在TCP/IP方面的变化将在本书的下一版本中讨论。
读者对象
本书面向各个方面的读者:
全世界研究机构的研究人员:从事TCP/IP协议栈方面工作的研究人员发现,BSD是最为适合的网络操作系统。但在企业界,BSD并不是常用的一种选择。因此,研究人员最常用的选择是Linux操作系统,研究如何提高TCP/IP协议栈在该操作系统上的性能。网络是当前最为广泛的研究领域,其原因是Intemet在社会生活中的地位日益提高。一般来说,研究人员喜欢比较简单的商业化操作系统,这些操作系统能够运行在廉价的硬件上。
学术研究人员:高级学术研究项目更喜欢使用Linux,如MS、M.Tech、B.Tech、PG等,其原因在于Linux是第一个类Unix的操作系统,它文档丰富并且运行稳定。在网络领域,学生通常选择Linux上的TCP/IP来开展项目研究。这些项目的需求有修改路由器或者TCP性能、实现一些新的TCP/IP RFC、网络驱动器、实现安全IP层、提高处理网络流量的可扩展性。
公司:从很大程度上来说,企业界一般都选择Linux作为开发其网络产品的操作系统。很多公司在开发网络产品(如IP安全、服务质量(基于类的路由)、路由器开发、带宽管理产品、集群服务器等)时,都要修改TCP/IP协议栈,或者编写新的模块集成到Linux TCP/IP协议栈中。Linux不仅是开放式系统的常用选择,也是嵌入式产品和实时操作系统的主流选择。这些嵌入式产品主要用于网络领域,如路由器、嵌入式Web服务器、Web浏览器等。
企业:新思想不断涌现,不过需要转化为产品。随着Intemet的应用日益广泛,开发网络产品方面出现了很多新思想,Linux再次成为企业界开发的首选。
开源组织:由于Linux和Intemet技术的使用日益广泛,很多新毕业的大学生,甚至软件业人员都希望能够为提高Linux的网络能力做贡献。他们的目标是使Linux更加强大、稳定、安全,互联功能更加完善,以满足企业界的各个方面要求。很多专业人员希望能够为Linux网络能力做贡献,但是,没有足够的时间来熟悉网络协议栈和内核框架。
国防机构:Linux作为一种网络操作系统,在国防机构的应用也日益广泛,尤其是在军事领域,对LinuxIPSec进行一定的修改后,可以应用于安全军事网络事务。
所有这些人员都需要对LinuxTCP/IP协议栈和内核网络协议栈框架有较为全面、细致的了解。而理解TCP、IP、BSD套接字、防火墙、IPSec、IP转发、路由器网络驱动,都需要对网络协议栈的实现和设计有比较全面的了解。如果要实现IPSec或者防火墙,就需要了解在Linux中如何实现报文,报文如何以及从何处传递给IP层,IP层如何处理报文并添加协议头,最后还需要了解IP层如何将报文传递给设备驱动器来最后传输出去。类似地,如果要实现QoS,或者对现有实现做一些修改,就需要了解Linux路由表实现、报文结构、报文调度、内核帧的处理过程(如网络软中断等)。因此,任何需要修改现有Linux网络协议栈或者向协议栈添加新特性的工作,都需要全面理解LinuxTCP/IP协议栈的设计与实现。本书的组织结构
本书全面阐述了Linux TCP/IP协议及其设计和实现。首先以简单的客户端-服务器套接字程序开始,最后探讨了Linux中较为复杂的TCP/IP协议和设计与实现,其间则逐步阐述套接字编程的各个方面以及主要的TCP/IP相关算法。包括:
Linux内核和TCP/IP应用接口:第1章介绍了Linux内核的基本知识,以及使用TCP/IP协议栈进行通信的内核接口(系统调用)。
协议:第2章讲述了TCP/IP协议以及相关支持协议,如ARP和ICMP等。本章使用图示阐述了一些主要的RFC,以使读者熟悉这些协议,从而便于在后面的章节中将Linux及其对协议栈的实现联系起来。
套接字:第3章讲述了BSD套接字在Linux内核中的实现,本章详细讨论了套接字层如何挂接到VFS层,以及各种协议如何挂接到BSD套接字。







点击看大图



加载中...

