第1章 概 述 1.1 引言 本章介绍伯克利 ( B e r k e l e y )联网程序代码。开始我们先看一段源代码并介绍一些通篇要用 的印刷约定。对各种不同代码版本的简单历史回顾让我们可以看到本书中的源代码处于什么 位置。接下来介绍了两种主要的编程接口,它们在 U n i x与非U n i x系统中用于编写T C P / I P协议。 然后我们介绍一个简单的用户程序,它发送一个 U D P数据报给一个位于另一主机上的日 期/时间服务器,服务器返回一个 U D P数据报,其中包含服务器上日期和时间的 A S C I I码字符 串。这个进程发送的数据报经过所有的协议栈到达设备驱动器,来自服务器的应答从下向上 经过所有协议栈到达这个进程。通过这个例子的这些细节介绍了很多核心数据结构和概念, 这些数据结构和概念在后面的章节中还要详细说明。 本章的最后介绍了在本书中各源代码的组织,并显示了联网代码在整个组织中的位置。 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说 明符被删去。有些地