作业的概念对于理解 UUCP 至关重要。用户使用 uucp 或 uux 发起的每次传输都称为作业。它由要在远程系统上执行的命令、要在站点之间传输的文件集合或两者组成。
例如,以下命令使 UUCP 复制文件netguide.ps到名为 pablo 的远程主机,并在 pablo 上执行 lpr 命令来打印文件
$ uux -r pablo!lpr !netguide.ps |
UUCP 通常不会立即调用远程系统来执行作业(否则你可以使用 kermit 完成)。相反,它会临时存储作业描述。这称为假脱机。因此,存储作业的目录树称为假脱机目录,通常位于/var/spool/uucp。在我们的示例中,作业描述将包含有关要执行的远程命令 (lpr)、请求执行的用户以及其他一些项目的信息。除了作业描述之外,UUCP 还必须存储输入文件netguide.ps.
假脱机文件的确切位置和命名可能会有所不同,具体取决于某些编译时选项。与 HDB 兼容的 UUCP 通常将假脱机文件存储在/var/spool/uucp以远程站点名称命名的子目录中。当为 Taylor 配置编译时,UUCP 会在特定于站点的假脱机目录下为不同类型的假脱机文件创建子目录。
UUCP 会定期拨打远程系统。当与远程计算机建立连接后,UUCP 会传输描述作业的文件以及任何输入文件。传入的作业不会立即执行,而是在连接终止后执行。执行由 uuxqt 处理,它还负责转发指定给另一个站点的任何作业。
为了区分更重要和不太重要的作业,UUCP 将优先级与每个作业关联起来。这是一个从 0 到 9、A 到 Z 以及 a 到 z 的单个数字,优先级递减。邮件通常以 B 或 C 优先级进行假脱机处理,而新闻则以 N 优先级进行假脱机处理。优先级较高的作业会更早传输。可以使用–g标志在调用 uucp 或 uux 时使用。
你还可以禁止在某些时间传输低于给定优先级的作业。为此,我们设置在对话期间将被禁止的最大假脱机优先级。最大假脱机优先级默认为 z,这意味着每次都会传输所有优先级。请注意此处的语义歧义:仅当文件的优先级等于或高于最大假脱机优先级阈值时,才会传输该文件。
为了理解 uucico 为什么需要知道特定信息,快速描述它如何实际连接到远程系统会很有帮助。
当你从命令行执行 uucico -s system 时,uucico 首先必须物理连接。采取的行动取决于要打开的连接类型。因此,当使用电话线时,它必须找到调制解调器并拨出。通过 TCP,它必须调用gethostbyname将名称转换为网络地址,找出要打开的端口,并将地址绑定到相应的套接字。
成功连接之后是授权。此过程通常包括远程系统请求登录名和可能的密码。此交换通常称为登录对话。授权过程可以由常用的 getty/login 套件执行,也可以在 TCP 套接字上由 uucico 本身执行。如果授权成功,远程端会启动 uucico。发起连接的 uucico 的本地副本称为主,远程副本称为从。
接下来是握手阶段:主端发送其主机名和几个标志。从端检查此主机名是否具有登录、发送和接收文件等的权限。标志描述(除其他外)要传输的假脱机文件的最大优先级。如果启用,则在此处进行对话计数或呼叫序列号检查。借助此功能,两个站点都维护成功连接的计数,并进行比较。如果它们不匹配,则握手失败。这对于保护自己免受冒名顶替者的侵害很有用。
最后,两个 uucico 尝试就通用的传输协议达成一致。此协议控制数据的传输方式、一致性检查以及在发生错误时重新传输的方式。由于支持的连接类型不同,因此需要不同的协议。例如,电话线需要“安全”协议,该协议对错误持悲观态度,而 TCP 传输本质上是可靠的,可以使用更有效的协议,从而放弃大多数额外的错误检查。
握手完成后,实际的传输阶段开始。两端都打开选定的协议驱动程序。此时,驱动程序可能会执行特定于协议的初始化序列。
然后,主端发送为远程系统排队的所有文件,这些文件的假脱机优先级足够高。完成后,它会通知从端它已完成,并且从端现在可以挂断。从端现在可以同意挂断或接管对话。这是一个角色转换:现在远程系统成为主端,本地系统成为从端。现在,新的主端发送其文件。完成后,两个 uucico 交换终止消息并关闭连接。
如果你需要有关 UUCP 的其他信息,请参阅源代码。网上还有一篇非常古老的文章,由 David A. Novitz 撰写,其中详细描述了 UUCP 协议。[1] Taylor UUCP FAQ 还讨论了 UUCP 实现的一些细节。它定期发布到 comp.mail.uucp。
在本节中,我们将描述 uucico 最重要的命令行选项
调用名为system除非受到呼叫时间限制的禁止。
调用名为system无条件地。
以主模式启动 uucico。这是默认设置,当–s或–S给出时。单独的–r1选项使 uucico 尝试调用sys本章下一节中描述的文件中的所有系统,除非受到呼叫或重试时间限制的禁止。
以从模式启动 uucico。这是默认设置,当没有–s或–S给出时。在从模式下,假定标准输入/输出已连接到串行端口,或者使用–p选项。
此选项补充了–s或–S并告诉 uucico 仅当有名为该系统假脱机的作业时才调用该系统。
打开指定类型的调试。可以以逗号分隔列表的形式给出多种类型。以下类型有效:abnormal、chat、handshake、uucp-proto、proto、port、config、spooldir、execute、incoming 和 outgoing。使用 all 会打开所有选项。为了与其他 UUCP 实现兼容,可以改为指定一个数字,该数字将打开前n上面列表中的项目的调试。
调试消息将记录到Debug以下文件/var/spool/uucp.
[1] | 它也包含在 4.4BSD 系统管理员手册 中。 |