第1章 T/TCP 概 述 1.1 概述 本章首先介绍客户-服务器事务概念。我们从使用 U D P的客户-服务器应用开始,这是最 简单的情形。接着我们编写使用 T C P的客户和服务器程序,并由此考察两台主机间交互的 T C P / I P分组。然后我们使用 T / T C P,证明利用T / T C P可以减少分组数,并给出为利用 T / T C P需 要对两端的源代码所做的最少改动。 接下来介绍了运行书中示例程序的测试网络,并对分别使用 U D P、T C P和T / T C P的客户 - 服务器应用程序进行了简单的时间耗费比较。我们考察了一些使用 T C P的典型 I n t e r n e t应用程 序,看看如果两端都支持 T / T C P,将需要做哪些修改。紧接着,简要介绍了 I n t e r n e t协议族中 事务协议的发展历史,概略叙述了现有的 T / T C P实现。 本书全文以及有关 T / T C P的文献中,事务一词的含义都是指客户向服务器发出一个请求, 然后服务器对该请求作出应答。 I n t e r n e t中最常见的一个例子是,客户向域名服务器 ( D N S )发 出请求,查询域名对应的 I P地址,然后域名服务器给出响应。本书中的事务这个术语并没有 数据库中的事务那样的含义:加锁、两步提交、回退,等等。 1.2 UDP上的客户-服务器 我们先来看一个简单的 U D P客户-服务器应用程序的例子,其客户程序源代码如图 1 - 1所 示。在这个例子中,客户向服务器发出一个请求,服务器处理该请求,然后发回一个应答。 图1-1 UDP上的简单客户程序 第一部分 TCP事务协议 图1-1 (续) 本书中所有源代码的格式都是这样。每一非空行前面都标有行号。正文中叙述 某段源代码时,这段源代码的起始和结束行号标记于正文段落的左边,如下面的正 文所示。有时这些段落前面会有一小段说明,对所描述的源代码进行概要说明。源 代码段开头和结尾处的水平线标明源代码段所在的文件名。这些文件名通常都是指 我们在1 . 9节中将介绍的4 . 4版B S D - L i t e中发布的文件。 我们来讨论这个程序的一些有关特性,但不详细描述插口函数,因为我们假设读者对这 些函数有一些基本的认识