SLIP 的乐趣(与痛苦)
您是否曾经想将您的计算机连接到网络?也许您有两台计算机想要在它们之间运行 Mosaic、ftp 或 X11?您是否想让您的朋友体验您出色的新 Linux 机器的全部功能?SLIP 是您可以实现所有这些目标的一种方式。
作者:Warren Baird
SLIP(串行线路 Internet 协议)是一种允许您通过串行线路建立 TCP/IP 连接的协议。TCP/IP 代表传输控制协议/Internet 协议,是 Internet 和大多数本地以太网使用的协议。许多常见的 Unix 程序(如 X11、Mosaic、gopher、IRC、talk、telnet 和 ftp)都使用 TCP/IP 进行通信。如果您想使用此类程序通过 Internet 与世界其他地方通信,或者如果您想连接两台(或更多)本地计算机,SLIP 是一个不错的选择。
实际上 SLIP 有两种变体:普通 SLIP 和 CSLIP(代表压缩 SLIP)。CSLIP 压缩各种 TCP/IP 标头,以在串行线路上提供更高的吞吐量。(注意:CSLIP 不压缩正在传输的数据,只压缩 TCP/IP 添加的标头。)不幸的是,并非所有系统都支持它。即使使用 CSLIP,串行线路上的吞吐量也远低于以太网和其他局域网 (LAN)。在 SLIP 链路上运行 Mosaic 和 xv 等高带宽应用程序是可能的,但响应时间可能会非常低。
SLIP 最常见的用途之一是连接到商业 Internet 提供商。有许多公司提供对 Internet 的完全访问权限,允许您使用调制解调器建立 SLIP 连接。
SLIP 的另一个用途是使用零调制解调器电缆连接两台或多台机器。由于 SLIP 是为许多不同的平台实现的,您可以将您的 Linux 机器连接到许多不同类型的系统。例如,我有一台 Amiga 2000 连接到我运行 Linux 1.0.8 的 386。
如果您真的雄心勃勃,您甚至可以将您的 Linux 机器设置为 SLIP 服务器。您可以这样做来让您的朋友访问您的机器,或者作为 BBS 设置的一部分。
在 Unix 下配置像 SLIP 这样的东西总是非常依赖于您正在运行的 Unix 的版本和发行版。这里给出的详细信息适用于 Slackware 1.2.0(Linux 1.0.8)发行版。确切的细节可能因其他版本的 Linux 和其他发行版而略有不同。
有很多(绝非双关语)控制 Unix 系统行为的文件,并且需要修改其中的许多文件才能设置 SLIP。
查找主机名:/etc/hosts、/etc/resolv.conf 和 /etc/host.conf
/etc/hosts 文件将主机名(例如 acme.gadgets.com)映射到 IP 地址(例如 129.50.49.234)。如果您使用 SLIP 连接两台本地计算机,则您的 /etc/hosts 文件只需要包含您的两台计算机的主机名和 IP 地址。如果您连接到更大的网络,但只与少数站点通信,您可以将它们的名称和 IP 地址放在您的 /etc/hosts 文件中。
如果您连接到许多主机(或使用像 Mosaic 这样连接到许多主机的程序),您需要告诉您的系统应该询问谁来查找未知主机名的 IP 地址。有一些称为域名服务器的系统可以查找给定主机名的 IP 地址。/etc/resolv.conf 文件告诉您的系统要使用哪个(哪些)域名服务器。它还告诉您的系统您的域名是什么。域名是您的完整主机名,删除了机器名——例如,如果您的主机名是 acme.gadgets.com,则您的域名将是 gadgets.com。
如果您的域名是 gadgets.com,并且您在 IP 地址 128.34.54.27 有一个域名服务器,那么您的 /etc/resolve.conf 文件可以读取
domain gadgets.com nameserver 128.34.54.27
可以在 resolve.conf 文件中列出多个域名服务器。/etc/host.conf 文件告诉系统应该使用什么顺序来查找主机名。通常此文件包含
order hosts,bind multi on
这告诉系统首先检查 /etc/hosts 文件,然后尝试它知道的任何域名服务器。
Internet 启动文件的名称甚至在不同的 Linux 发行版之间也各不相同。在大多数 Linux 系统上,使用的文件是 /etc/rc.d/rc.inet1 和 /etc/rc.d/rc.inet2。无论使用哪个启动文件,都有许多守护程序必须运行,任何 TCP/IP 程序才能工作。《NET-2 HOWTO》描述了哪些守护程序可用以及它们的作用。最起码,您需要运行 inetd 守护程序。inetd 守护程序协调许多其他 TCP/IP 守护程序的启动。
此外,如果您要通过专用线路设置到另一台计算机的永久链接,您可能希望在启动文件中实际初始化 SLIP 链接。
您可以通过两种主要方式使用 SLIP 连接到另一台机器。如果是通过租用线路或零调制解调器电缆的链接,您应该使用 slattach。如果您通过调制解调器连接(或允许其他计算机通过调制解调器连接到您的计算机),您应该使用 dip。
要使用 slattach 配置 SLIP 连接,您需要执行以下命令
/sbin/slattach -p prot -s baud dev & /sbin/ifconfig sl0 iplocal pointtopoint ipremote up /sbin/route add default dev sl0 &
其中 prot 是要使用的协议(通常为 slip 或 cslip),baud 是要连接的波特率,dev 是要使用的设备,iplocal 是您的本地 IP 地址,ipremote 是远程 IP 地址。例如,如果您的 IP 地址是 129.45.43.76,并且您想使用 /dev/ttyS1 (COM2) 上的 19200 波特率的 slip 连接到 IP 地址为 129.50.49.234 的机器,您将给出以下命令
/sbin/slattach -p slip -s 19200 /dev/ttyS1 & /sbin/ifconfig sl0 129.45.43.76 pointtopoint\ 129.50.49.234 up /sbin/route add default dev sl0 &
这些命令可以添加到启动文件中(如果您总是希望初始化 SLIP 连接),或者您可以创建一个简单的 shell 脚本来为您执行它们。您必须以 root 身份运行此 shell 脚本才能使 slattach 工作。如果,您没有创建 shell 脚本,而是创建了一个由 root 拥有的 C 或 perl 程序,您可以通过键入 chmod u+s file(其中 file 是程序的名称)使其 setuid(始终以 root 身份运行)。请注意 /sbin/slattach 行后面的“&”。旧版本的《NET-2 HOWTO》省略了 & 符号,如果将命令添加到启动文件中,会导致 Linux 在启动时锁定。
dip 程序使用起来稍微复杂一些。要使用它连接到另一台机器,您必须创建一个脚本文件,告诉 dip 如何呼叫机器、登录以及启动 slip(如果 slip 没有自动启动)。《NET-2 HOWTO》和 dip(8) 手册页都给出了示例 dip 脚本(dip(8) 意味着 dip 的手册页在手册页的第 8 章中,因此您可以使用命令 man 8 dip 阅读手册页)。Dip 也可用于允许其他人使用 SLIP 连接到您的机器。为此,您必须创建一个特殊的 userid,该 userid 将 dip 作为其 shell。有关执行此操作的说明在 dip(8) 手册页中。
故障排除:一些常见问题以及如何解决它们
Linux 在启动时锁定
正如我之前提到的,如果您在系统启动文件中启动 slattach,则必须在 slattach 行后添加一个 & 符号(“&”)以在后台运行 slattach。否则,您的系统在重新启动时会锁定。
数据包无缘无故消失
这可能有很多原因。首先要检查的是您的串行链路是否正确。如果您使用的是零调制解调器电缆,请确保它在两端都已插入。如果您通过调制解调器连接,请确保调制解调器工作正常。如果您使用的是零调制解调器电缆,并且您可以轻松访问链路的两端,请尝试在一端启动一个终端程序,看看如果您 ping 运行终端程序的机器,是否会出现任何内容。如果在终端程序中出现乱码,那么您就知道您的串行链路正在工作。
在某些版本的 Linux 中,CSLIP 似乎存在问题。如果您正在使用 CSLIP 并且数据包似乎正在消失,请尝试改用 SLIP。
发生未知主机错误
首先要做的是尝试使用 IP 地址而不是主机名。如果您在收到未知主机错误时尝试键入 ping acme,请找到机器 acme 的 IP 地址,并改为 ping 它。例如,如果 acme 的 IP 地址为 128.155.123.6,请键入
ping 128.155.123.6
代替。如果使用 IP 地址有效,则您在将主机名转换为 IP 地址时遇到问题。确保您的 /etc/hosts 文件中包含您的主机名的正确条目,或者如果您正在使用域名服务器,请确保您的系统在联系域名服务器时没有问题。作为临时修复,将主机名的条目添加到您的 /etc/hosts 中应该可以解决问题。
如果 IP 地址也不起作用,您可能需要使用 route 命令来告诉您的系统如何找到远程系统。《NET-2 HOWTO》和 route(8) 手册页向您展示了如何使用 route 命令。
“网络不可达”错误
如果您在尝试使用 ping 时看到如下消息
ping: sendto: Network is unreachable
最可能的原因是路由不正确。单独使用 /sbin/route 命令会显示当前的路由表。如果路由表配置正确,您应该看到类似
Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default * * U 0 0 3 sl0
如果最后一行不存在,并且您正在使用 slattach,请确保已使用上面描述的 /sbin/route 行。如果最后一行存在,或者您正在使用 dip,请参阅《NET-2 HOWTO》以及 dip(8) 和 route(8) 手册页。
SLIP 有哪些替代方案?
还有其他程序提供与 SLIP 类似的功能。以下是一些最流行的程序的简要概述。
如果您想连接两台本地机器,最好的方法是使用以太网,它提供的吞吐量远高于串行链路。不幸的是,以太网卡可能相当昂贵。如果您买不起一对以太网卡,或者如果您想使用调制解调器连接到另一台机器,还有其他选择。SLIP 不是唯一提供通过串行线路进行 TCP/IP(或类似 TCP/IP)连接的协议。PPP(点对点协议)是一种较新的协议,其用途与 SLIP 相似。PPP 专门设计为 Internet 标准,并在许多 Internet RFC(请求评论)中进行了文档化。这种设计过程使 PPP 比 SLIP 更标准化。此外,PPP 的设计旨在解决 SLIP 在安全性和稳健性方面的已知弱点。不幸的是,由于 PPP 比 SLIP 新得多且更难实现,因此它不像 SLIP 那样在许多系统上可用。
另一个常见的程序是 term。Term 不提供完整的 TCP/IP 连接,但它确实提供了一些类似的功能。它允许您通过单个串行线路运行多个终端会话(就像 SLIP 一样),但它不允许您在 Linux 机器上运行 TCP/IP 程序(如 ftp、Mosaic 或 telnet),除非您重新编译它们以包含 term 支持。它允许您在本地机器上显示远程 X11 程序,因此例如,您可以在远程运行 Mosaic 并在您的 Linux 机器上显示它。您还可以使用 term 将本地机器上的端口连接到远程机器上的端口,这允许您在 Linux 机器上阅读新闻和邮件。term 比 SLIP 最大的优势在于,它可以在两端设置,而无需 root 权限。与 SLIP 不同,您不必更改任何系统配置文件即可使用 term。
PLIP(并行线路 Internet 协议)是一种类似于 SLIP 的协议,它通过并行线路运行。PLIP 仅用于本地连接两台机器,但它提供了比同类 SLIP 连接更高的传输速率,但代价是比 SLIP 占用更多的 CPU 时间。要使用 PLIP,您需要一条特殊的并行电缆,类似于许多 DOS PC 到 PC 文件传输包中使用的电缆。
如果您只想连接两台本地机器,您可能需要考虑仅通过串行链路运行终端程序。配置肯定比设置 SLIP 简单(您需要在相应的串行端口上启动 getty 进程),并且如果您运行像 screen 这样的程序(它以类似于虚拟控制台的方式允许多个会话),您可能会获得您需要的所有功能。某些操作(如传输文件)在使用终端程序时效率更高,因为没有 SLIP 带来的开销。缺点是您无法通过终端程序运行 X11 或任何其他 TCP/IP 程序。
推荐阅读
《Serial and NET-2 HOWTOs》包含大量关于 Linux 中网络和串行链路的有用信息。《NET-2 HOWTO》有一个专门介绍 SLIP 的完整章节。HOWTO 文件可以在大多数 Linux 系统的 /usr/doc/faq/howto 中找到,或者在 ftp 站点 sunsite.unc.edu 的 /pub/Linux/docs/HOWTO 目录中找到。
Usenet 新闻组 comp.os.linux.help 和 comp.os.linux.admin 都经常讨论 SLIP。阅读这些新闻组通常可以回答关于 SLIP(和许多其他事情)的简单问题。最好在提出任何问题之前阅读相应的 HOWTO 和 FAQ(常见问题列表),因为当您提出在其他地方回答过的问题时,有些人会非常生气。
有许多书籍介绍了 TCP/IP 连接的管理。《TCP/IP Network Administration》是我读过的最好的一本,作者是 Craig Hunt,由 O'Reilly & Associates 出版,ISBN 0-937175-82-X。
SLIP 不是最新的 TCP/IP 协议,但它很常用且通常非常稳定。对于许多串行 TCP/IP 链路来说,这是一个不错的选择。
Warren Baird 在一台 386 DX-33 上运行 Linux,并且已经破解了各种 Unix 版本五年了。他即将获得加拿大安大略省滑铁卢大学计算机科学与组合数学和优化专业的 B.Math 联合荣誉学位。您可以通过 wjbaird@uwaterloo.ca 或 baird@asc.on.ca 与他联系。
Warren Baird (wjbaird@uwaterloo.ca) 或 (baird@asc.on.ca) 在一台 386 DX-33 上运行 Linux,并且已经破解了各种 Unix 版本五年了。他即将获得加拿大安大略省滑铁卢大学计算机科学与组合数学和优化专业的 B.Math 联合荣誉学位。