1.2 源代码表示
不考虑主题,列举 15 000行源代码本身就是一件难事。下面是所有源代码都使用的文本
格式:
1.2.1 将拥塞窗口设置为1
3 8 7 - 3 8 8 这是文件t c p _ s u b r . c中的函数t c p _ q u e n c h。这些源文件名引用4 . 4 B S D - L i t e发
布的文件。4 . 4 B S D在1 . 1 3节中讨论。每个非空白行都有编号。正文所描述的代码的起始和结
束位置的行号记于行开始处,如本段所示。有时在段前有一个简短的描述性题头,对所描述
的代码提供一个概述。
这些源代码同4 . 4 B S D - L i t e发行版一样,偶尔也包含一些错误,在遇到时我们会提出来并
加以讨论,偶尔还包括一些原作者的编者评论。这些代码已通过了 G N U缩进程序的运行,使
它们从版面上看起来具有一致性。制表符的位置被设置成 4个栏的界线使得这些行在一个页面
中显示得很合适。在定义常量时,有些 # i f d e f语句和它们的对应语句 # e n d i f被删去(如:
G A T E W A Y和M R O U T I N G,因为我们假设系统被作为一个路由器或多播路由器 )。所有r e g i s t e r说
明符被删去。有些地方加了一些注释,并且一些注释中的印刷错误被修改了,但代码的其他
部分被保留下来。
这些函数大小不一,从几行 (如前面的t c p _ q u e n c h)到最大11 0 0行(t c p _ i n p u t)。超过
大约4 0行的函数一般被分成段,一段一段地显示。虽然尽量使代码和相应的描述文字放在同
一页或对开的两页上,但为了节约版面,不可能完全做到。
本书中有很多对其他函数的交叉引用。为了避免给每个引用都添加一个图号和页码,书
封底内页中有一个本书中描述的所有函数和宏的字母交叉引用表和描述的起始页码。因为本
书的源代码来自公开的 4 . 4 B S D _ L i t e版,因此很容易获得它的一个拷贝:附录 B详细说明了各
种方法。当你阅读文章时,有时它会帮助你搜索一个在线拷贝 [例如U n i x程序grep ( 1 )]。
描述一个源代码模块的各章通常以所讨论的源文件的列表开始,接着是全局变量、代码
维护的相关统计以及一个实际系统的一些例子统计,最后是与所描述协议相关的 S N M P变量。
全局变量的定义通常跨越各种源文件和头文件,因此我们将它们集中到的一个表中以便于参
考。这样显示所有的统计,简化了后面当统计更新时对代码的讨论。卷 1的第2 5章提供了
S N M P的所有细节。我们在本文中关心的是由内核中的 T C P / I P例程维护的、支持在系统上运
行的S N M P代理的信息。
TCP IP详解 卷1协议 :http://dl.21ic.com/download/tcpip-288223.html
TCP IP详解 卷2实现 :http://dl.21ic.com/download/tcpip-288224.html
TCPIP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议 :http://dl.21ic.com/download/tcpip-288225.html