首页>参考读物>计算机科学与技术>计算机网络

Linux IP协议栈源代码分析
作者 : 塞切尔(Satchell,S.T.) 克里弗(Clifford,H.B.J.)
译者 : 刘隆国 翟刚 陆丽娜 辛炜
出版日期 : 2000-11-01
ISBN : 7-111-08447-0
定价 : 75.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 652
开本 : 16开
原书名 : Linux IP Stacks Commentary
原出版社:
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书涵盖了TCP/IP网络的Linux 实现中所包含的所有领域,较为全面地介绍了ISO网络模型、API、IP、ICMP以及TCP等核心网络实现,对它们的代码进行了详尽的分析,同时也介绍了路由选择和防火墙的理论。按照从模型到实现、从底层到高层的顺序介绍了Linux TCp/IP实现中的所有重要代码,通过对本书的阅读,读者能够对Linux 的当前网络实现有较为深刻的认识。

图书前言

本书为程序员、网络管理员以及学生们提供了有关传输控制协议(TCP)以及网际协议(IP)的工作实现的一系列深入分析,而该实现的源代码(Linux 2.0.34发行版本)是能够从许多渠道获取的。作者详细研究了驻留内核的TCP/IP代码以及使用这些代码的客户机和服务器程序实现,讨论该内核发行版本中的函数以及系统调用。
同其他源代码分析书籍一样,本书在很大程度上是受到约翰·莱昂在1977年所著的《莱昂氏Unix源代码分析》(已由机械工业出版社翻译出版)的启发而写成的。那个原型文档的早期版本一直为各个年级的本科学生(以及研究生)所复印、传播,该文档阐述了在当时非常独特的早期AT&T Unix版本(版本6)的内部工作机制,而该公司曾将这个版本的Unix提供给全美的许多大学使用。
因而,从总体上来说,本书的作者希望他们有关TCP/IP内部工作机制的研究能够为读者提供如何测试基于TCP/IP,特别是以太网的系统的性能、可靠性以及实时响应时间的总体洞察力。
你可能会问,为什么本书集中介绍了Linux 2.0.34而不是更新的版本?我们的回答需要回溯到1999年年中本计划开始初期。为了使这本分析能够对最大多数的用户来说都具有意义,本书的作者和出版商一致同意选用一个非常受欢迎并被广泛应用的Linux操作系统版本来作为重点。为此我们曾经通过端口扫描进行过在线研究(由一组解密高手进行指导,因而要比一般水平更为可靠),而结论就是Linux 2.0.34—它同时被许多因特网服务提供商(Internet Service Provider, ISP)及最终用户所选用。
在1999年末,直到本书本版本的编辑工作结束为止,前面所提到的研究工作的结论还没有任何改变。实际上,从在线新闻组中的收集到的信息表明网络系统管理员仍然在使用一些“旧版本”的Linux(例如版本2.0.34或者版本2.0.35),而且他们将保持使用这些Linux版本直到必须进行升级为止。但是,新的服务器更倾向于安装当前版本的Linux,这也就意味着使用内核2.2.5以及更新版本的系统将开始流行。本书的在线扩展将对这种版本更新的趋势进行监控(正如本前言中“结束语”一节中所说明的)。
我们已经以贡献的形式,而不是以因特网请求申请(Internet Request for comments)的形式提交了本书的一部分,我们的考虑主要与调制解调器以及网络测试的许多标准的开发有关。这些标准目前正在被电信工业联盟(TIA)以及国际电信联盟(ITU)下属的一些技术分委员会所开发。
本书实现的任务
为了实现本书的任务说明以及将对用户的有益程度最大化,本书实现了以下内容:
本书提供了Linux TCP/IP源代码的一个带索引号的打印列表。
通过总体概观和讨论介绍了每一种协议以及它们的使用。
通过对源程序代码的细致检查对出现在代码中(在一些地方所可能出现的)不完善的地方进行了注解。
本书集中描述了每一个函数如何在TCP/IP实现的环境中进行工作,它不仅仅解释了TCP/IP堆栈中的每一个协议模块如何同其他协议、驱动程序以及应用进行协作,而且还说明了为什么这些模块需要采用这样的协作方式。
将源代码内容与定义TCP/IP的请求注解(RFC)以及连接到因特网的主机系统所必须满足的条件联系起来。
指出某些功能能够进行改进、扩展或者增加的地方(特别是那些因为常规功能的引入而受益的部分更是如此)。
对TCP/IP实现进行定制是Linux最强大的特点之一,而且它也符合“开放代码”(Open Sourc)的编程思想。同其他操作系统不同的是(包括其他“免费”操作系统,例如BSD OS),Linux 允许“每一个人”都能够对内核代码进行修改。即使你希望进行的修改面非常集中,你仍然可以进行实现。而且如果你认为你所进行的暂时修改是普遍有效的,那么你可以将你的修改(以内核补丁的形式)提交给Linux内核邮件列表来进行讨论。有关这个过程的更多信息以及如何获得哪些补丁应该被开发,哪些补丁已经实现的最新信息都可以在http://www. linuxhq.com/获得。
本书的读者
正如本书介绍前面所暗示的,本书的读者是需要实现能够工作的样例程序的TCP/IP学生,对内核代码的工作机制具有浓厚兴趣的有经验的Linux爱好者以及需要非常容易理解的TCP/IP详细实现信息的网络安全系统管理员。
因此,本书假定读者具有以下先决条件:
已经具有一定的C编程语言知识。
熟悉基于指针的数据结构(特别是单链表和双链表)。
对整型值在计算机内部的表现方式有所了解。
实际上真的想要了解网络操作系统的工作方式是如何的快捷、健壮以及能够抵抗攻击。
另外,虽然这不是一个先决条件,但是我们强烈和真诚地建议你去阅读本书的姊妹书,由机械工业出版社翻译出版的《Linux 内核源代码分析》。从该书中大家不仅可以获得非常珍贵的内核体系结构分析,而且还能够获得Linux 的必要背景以及有关Linux开发过程的详细信息。
内容介绍
本书的第一部分再现了经过精心选择的部分Linux内核源代码。代码的格式非常容易阅读而且进行了交互索引。代码中被分析部分所引用的每一行前都有一个包含引用该行的分析所在页码的箭头图形。
第二部分(分析部分)继源代码之后对其进行了详细讨论。该部分中所包含的十个章节中的每一个都介绍了一个特定的协议(包括ICMP、TCP以及UDP)或者主题(例如将Linux TCP/IP映射到标准ISO网络模型的应用编程接口)。大量的行号索引能够将你引导到位于第一部分中的相应源代码,这样你就可以从两个方向上对源代码和分析进行访问。
虽然作者并不反对你从头到尾通读本书。但是如果直接进入你所感兴趣的主题,你将会感到本书更加有益。而且我们也不会因此而产生受到伤害的感觉。实际上,我们在编写代码分析的时候就保持了这种思想,因而其中的大部分章节都是相互独立的。
附录A是GNU协议。
附录B收录了你在浏览TCP/IP世界时可能遇到的部分缩写单词。
附录C讨论了域名系统(DNS)以及解析器(resolver)—一组当域名(例如www.coriolis.com)需要被自动转化成为因特网地址(例如209.140.152.4)时网络应用所必须调用的库例程。DNS是非常好也非常有用的用户数据报协议(UDP),它是如何在现代因特网上运作的样例。
如果你希望继续钻研原始的源程序代码以及更重要的原理,那么本书附带的光盘就是为你准备的。它包含了Linux 2.0.34内核的所有源代码,目前能够访问到的所有申请注解以及我们用来为出现在第二部分的源程序段建立索引的脚本。
如果你计划去研究在网络世界中文件系统支持是如何运作的(特别是包括select和poll系统调用是如何同网络实现进行交互),或者了解其他Linux 移植版本是如何支持建立在非Intel处理器上的计算机系统时,那么你将会发现该光盘特别有用。
结束语
本书的作者真诚地希望能够得到你的反馈信息。请将你的建议、问题、批评或者赞赏发送到satch@fluent-access.com或者hbjc@fluent-access.com。我们将选择一部分反馈信息以及勘误表和附加信息张贴到http://www.fluent-access.com/tcp-ip上。
在本书付印的时候,我们通过对Linux 内核2.3.33发行版本的TCP/IP实现的快速浏览发现网络代码已经在本书所分析的代码(2.3.34)上有了广泛的修改变形。为了跟上这种改变。本书的作者将不断发布经过更新的新版本分析。我们邀请您通过访问我们的网站以获取更进一步的信息以及随后即将可用的更新的分析。

本书英文版书号:ISBN-1-57610-470-2
本书英文版出版社网址:www.coriolis.com

作者简介

塞切尔(Satchell,S.T.) 克里弗(Clifford,H.B.J.):暂无简介

译者简介

刘隆国 翟刚 陆丽娜 辛炜:暂无简介

译者序

近年来,Linux操作系统获得了举世瞩目的发展。它强大的功能、良好的界面以及全免费的特性使其具有强大的诱惑力,日益为越来越多的人所青睐。而且,在全世界成千上万软件开发人员的支持下,Linux的功能也不断扩展,日臻完善。另外,由于它是唯一的一个获得广泛应用的、源代码公开的操作系统,Linux具有非常重大的研究价值。《Linux IP协议栈源代码分析》是《Linux内核源代码分析》的姊妹篇,其作者不仅是Linux的研究者,而且也为Linux的发展与成熟付出了极大的努力,在这方面他们一直走在世界的前列。对于Linux的研究、开发人员以及学习操作系统课程的学生而言,他们的经验具有极大的帮助作用。这是我们翻译本书的基本原因。
《Linux IP协议栈源代码分析》一书涵盖了TCP/IP网络的Linux实现中所包含的所有领域。全书共分10章,较为全面地介绍了ISO网络模型、API、IP、ICMP以及TCP等核心网络实现,对它们的代码进行了详尽的分析,同时也给出了许多经验,为网络功能的进一步扩展提供了广阔的空间。
本书的特点是以实际代码为基础,理论与实践相结合。按照从模型到实现,从底层到高层的顺序介绍了Linux TCP/IP实现中所有重要代码。通过对本书的阅读,读者能够对Linux的当前网络实现有较为深刻的认识。
本书的第1、2、8、9、10章由刘隆国翻译,第3、4、5、7章由翟刚翻译,第6章由辛炜翻译。全书由陆丽娜教授审校并统稿。书中所有图表由刘隆国翻译并绘制。
虽然在翻译过程中我们尽量做到尊重原意、翻译准确,希望它能够对国内Linux的研究、教学工作有所助益,但由于水平所限,不当与疏漏之处在所难免,敬请读者提出宝贵意见。



于西安交通大学电子与信息学院
计算机科学与工程系
2000.8

图书目录

译者序
前言
第一部分  Linux IP协议栈源代码
第二部分  TCP/IP协议栈源代码分析
第1章  TCP/IP协议栈分析概述 453
第2章  背景与基本概念 456
2.1  黑暗时代 457
2.2  Ghu说“用Linux吧,随后一切都会
充满希望” 458
2.3  网络编程规则 459
2.4  合作 461
第3章  Linux与ISO模型 463
3.1  ISO和OSI 463
3.2  OSI栈 464
3.2.1  第1层—物理层 466
3.2.2  第2层—数据链路层 466
3.2.3  第3层—网络层 467
3.2.4  第4层—传输层 467
3.2.5  第5层—会话层 468
3.2.6  第6层—表示层 469
3.2.7  第7层—应用层 469
3.3  从TCP/IP到OSI模型的映射 470
第4章  ICMP 472
4.1  规范化的报文 472
4.2  输入函数 476
4.3  输出函数 481
4.4  管理例程 482
第5章  套接字API概述 483
5.1  主要的套接字函数 483
5.1.1  socket 484
5.1.2  connect 484
5.1.3  bind 485
5.1.4  listen 485
5.1.5  accept 486
5.1.6  read、readv 486
5.1.7  write、writev 487
5.1.8  shutdown 487
5.1.9  close(一个套接字对象) 488
5.1.10  recv、recvfrom、recvmsg 488
5.1.11  send、sendto、sendmsg 489
5.2  套接字选项函数 490
5.2.1  getsockopt 490
5.2.2  setsockopt 491
5.2.3  套接字选项(SOL_SOCKET) 491
5.2.4  IP标准选项(IPPROTO_IP) 494
5.2.5  IP多播选项(IPPROTO_IP) 495
5.2.6  TCP选项(IPPROTO_TCP) 495
第6章  路由 497
6.1  ARPAnet的遗产 498
6.2  路由选择:让Internet名副其实 499
6.3  信包和支票 503
6.4  Linux的路由选择:路由表处理例程 505
6.4.1  路由表结构 506
6.4.2  支持/proc文件系统 507
6.4.3  ioctl处理例程 510
6.4.4  增加路由表中的路由 511
6.4.5  从路由表中删除路由 516
6.4.6  高速缓存管理例程 519
6.4.7  后台处理程序 521
6.4.8  路由请求处理程序 521
第7章  IPv4 524
7.1  IP包格式 524
7.1.1  版本 524
7.1.2  头长度 525
7.1.3  服务类型 525
7.1.4  总长度 526
7.1.5  标识 526
7.1.6  分片控制 526
7.1.7  生命周期 528
7.1.8  协议 528
7.1.9  头校验和 529
7.1.10  源和目的地址 529
7.1.11  IP包选项 529
7.2  实现应该做的与不该做的 530
7.3  函数讨论 530
7.4  API的其他功能 531
7.5  包装 536
7.6  IP信包发送 540
7.7  传送数据 550
7.8  数据泛洪 552
7.9  管理任务 558
第8章  UDP 559
8.1  UDP信包的轨迹 559
8.2  函数索引 561
8.3  发送一个UDP信包 562
8.4  ioctl接口—udp_ioctl 565
8.5  接收UDP信包 565
8.6  IP连接例程 570
第9章  TCP 572
9.1  无错的错误控制 572
9.2  内部视角 573
9.3  像棋游戏 574
9.3.1  设定棋盘 576
9.3.2  开始连接的开棋法 577
9.3.3  游戏之中 578
9.3.4  不利的交易 580
9.3.5  游戏结束 580
9.3.6  将死 581
9.3.7  判定失败一方 581
9.4  信号灯测试 581
9.5  一个包头的解析 582
9.6  分析 587
9.7  tcp.c 591
9.8  tcp_output.c 619
9.9  tcp_timer.c 624
9.10  timer.c 625
第10章  IP防火墙支持 627
10.1  请给我您的护照 627
10.2  瞒天过海 628
10.3  防火墙特性 629
10.4  包过滤例程 630
10.5  /proc文件系统支持 633
10.6  IP伪装支持 634
10.7  防火墙管理 634
附录A  GNU通用公共许可证 637
附录B  缩写 644
附录C  DNS 647

教学资源推荐
作者: 陈庆章 王子仁 主编 王英姿 宦若虹 毛科技 参编
作者: (荷)Andrew S. Tanenbaum 阿姆斯特丹Vrije大学(美)David J. Wetherall华盛顿大学西雅图分校 著
作者: 吴英 编著
作者: 王志文 陈妍 夏秦 何晖 编著
参考读物推荐