Linux 网络/SLIP 客户端
SLIP 设备命名为 `sl0'、`sl1' 等,第一个配置的设备被分配为 `0',其余的设备按顺序递增。
内核编译选项
Network device support ---> [*] Network device support <*> SLIP (serial line) support [ ] CSLIP compressed headers [ ] Keepalive and linefill [ ] Six bit SLIP encapsulation
SLIP(串行线路互联网协议)允许您在串行线上使用 tcp/ip,无论是带有拨号调制解调器的电话线,还是某种租用线路。当然,要使用 SLIP,您需要在您所在地区访问 SLIP 服务器。许多大学和企业在世界各地提供 SLIP 访问。
Slip 使用您机器上的串行端口来承载 IP 数据报。为此,它必须控制串行设备。Slip 设备名称命名为 sl0、sl1 等。这些如何对应您的串行设备?网络代码使用所谓的 ioctl(i/o 控制)调用将串行设备更改为 SLIP 设备。有两个提供的程序可以做到这一点,它们被称为 dip 和 slattach
dip(拨号 IP)是一个智能程序,能够设置串行设备的速度,命令您的调制解调器拨打链路的远程端,自动登录到远程服务器,搜索服务器发送给您的消息并从中提取信息,例如您的 IP 地址,并执行将串行端口切换到 SLIP 模式的必要 ioctl。dip 具有强大的脚本功能,您可以利用它来自动化登录过程。您可以在以下位置找到它:metalab.unc.edu。
要安装它,请尝试以下操作
user% tar xvzf dip337o-uri.tgz user% cd dip-3.3.7o user% vi Makefile root# make install
Makefile 假设存在一个名为 uucp 的组,但您可能希望根据您的配置将其更改为 dip 或 SLIP。
与 dip 相比,slattach 是一个非常简单的程序,非常易于使用,但没有 dip 那么复杂。它没有脚本功能,它所做的只是将您的串行设备配置为 SLIP 设备。它假定您拥有所需的所有信息,并且在您调用它之前已经建立了串行线。slattach 非常适合您与服务器之间有永久连接的情况,例如物理电缆或租用线路。
当您与作为 SLIP 服务器的机器的连接是拨号调制解调器或其他临时链接时,您将使用 dip。当您有租用线路(可能是电缆)连接到您的机器和服务器,并且不需要任何特殊操作来使链接工作时,您将使用 slattach。有关更多信息,请参见“永久 Slip 连接”部分。
配置 SLIP 类似于配置以太网接口(请阅读上面的“配置以太网设备”部分)。但是,有一些关键的区别。
首先,SLIP 链接与以太网不同,因为网络上只有两个主机,一个位于链接的每一端。与以太网不同,以太网只要您连接了电缆就可以使用,而 SLIP 则取决于您拥有的链接类型,您可能需要以某种特殊方式初始化您的网络连接。
如果您使用的是 dip,那么这通常不会在启动时完成,而是在稍后的某个时间完成,即您准备使用链接时。可以自动执行此过程。如果您使用的是 slattach,那么您可能希望在您的 rc.inet1 文件中添加一个部分。这将很快描述。
有两种主要的 SLIP 服务器类型:动态 IP 地址服务器和静态 IP 地址服务器。几乎每个 SLIP 服务器都会在拨号时提示您使用用户名和密码登录。dip 可以自动处理您的登录。
静态 SLIP 服务器是您已获得专属于您的 IP 地址的服务器。每次您连接到服务器时,您都会使用该地址配置您的 SLIP 端口。静态 SLIP 服务器将接听您的调制解调器呼叫,可能会提示您输入用户名和密码,然后将所有发往您地址的数据报通过该连接路由到您。如果您有静态服务器,那么您可能希望将您的主机名和 IP 地址(因为您知道它是什么)的条目添加到您的 /etc/hosts 中。您还应配置一些其他文件,例如:rc.inet2、host.conf、resolv.conf、/etc/HOSTNAME 和 rc.local。请记住,在配置 rc.inet1 时,您不需要为您的 SLIP 连接添加任何特殊命令,因为 dip 会为您完成所有繁重的工作,为您的接口进行配置。您需要向 dip 提供适当的信息,它将在命令调制解调器建立呼叫并登录到您的 SLIP 服务器后为您配置接口。如果这是您的 SLIP 服务器的工作方式,那么您可以转到“使用 Dip”部分,了解如何适当地配置 dip。
动态 SLIP 服务器是每次您登录时都会从地址池中随机分配给您 IP 地址的服务器。这意味着您无法保证每次都会获得任何特定的地址,并且该地址很可能在您注销后被其他人使用。配置 SLIP 服务器的网络管理员会为 SLIP 服务器分配一组地址供其使用,当服务器收到新的呼入呼叫时,它会找到第一个未使用的地址,引导呼叫者完成登录过程,然后打印包含已分配的 IP 地址的欢迎消息,并将继续在该呼叫期间使用该 IP 地址。
为这种类型的服务器配置类似于为静态服务器配置,除了您必须添加一个步骤,您需要获取服务器分配给您的 IP 地址并使用该地址配置您的 SLIP 设备。
同样,dip 会完成繁重的工作,并且新版本足够智能,不仅可以为您登录,还可以自动读取欢迎消息中打印的 IP 地址并将其存储起来,以便您可以使用它来配置您的 SLIP 设备。如果这是您的 SLIP 服务器的工作方式,那么您可以转到“使用 Dip”部分,了解如何适当地配置 dip。
如前所述,dip 是一个强大的程序,可以简化和自动化拨号到 SLIP 服务器、登录、启动连接以及使用适当的 ifconfig 和 route 命令配置 SLIP 设备的过程。本质上,要使用 dip,您将编写一个 `dip 脚本',它基本上是 dip 理解的命令列表,告诉 dip 如何执行您希望它执行的每个操作。请查看随 dip 一起提供的 sample.dip,了解其工作原理。dip 是一个功能强大的程序,具有许多选项。这里不一一介绍所有选项,您应该查看随您的 dip 版本提供的联机帮助页、README 和示例文件。
您可能会注意到,sample.dip 脚本假设您使用的是静态 SLIP 服务器,因此您事先知道您的 IP 地址。对于动态 SLIP 服务器,较新的 dip 版本包含一个命令,您可以使用该命令自动读取和配置您的 SLIP 设备,使用动态服务器分配给您的 IP 地址。以下示例是随 dip337j-uri.tgz 提供的 sample.dip 的修改版本,可能是您的一个良好起点。您可能希望将其保存为 /etc/dipscript 并编辑以适合您的配置。
# # sample.dip Dialup IP connection support program. # # This file (should show) shows how to use the DIP # This file should work for Annex type dynamic servers, if you # use a static address server then use the sample.dip file that # comes as part of the dip337-uri.tgz package. # # # Version: @(#)sample.dip 1.40 07/20/93 # # Author: Fred N. van Kempen, <[email protected]> # main: # Next, set up the other side's name and address. # My dialin machine is called 'xs4all.hacktic.nl' (== 193.78.33.42) get $remote xs4all.hacktic.nl # Set netmask on sl0 to 255.255.255.0 netmask 255.255.255.0 # Set the desired serial port and speed. port cua02 speed 38400 # Reset the modem and terminal line. # This seems to cause trouble for some people! reset # Note! "Standard" pre-defined "errlevel" values: # 0 - OK # 1 - CONNECT # 2 - ERROR # # You can change those grep'ping for "addchat()" in *.c... # Prepare for dialing. send ATQ0V1E1X4\r wait OK 2 if $errlvl != 0 goto modem_trouble dial 555-1234567 if $errlvl != 1 goto modem_trouble # We are connected. Login to the system. login: sleep 2 wait ogin: 20 if $errlvl != 0 goto login_trouble send MYLOGIN\n wait ord: 20 if $errlvl != 0 goto password_error send MYPASSWD\n loggedin: # We are now logged in. wait SOMEPROMPT 30 if $errlvl != 0 goto prompt_error # Command the server into SLIP mode send SLIP\n wait SLIP 30 if $errlvl != 0 goto prompt_error # Get and Set your IP address from the server. # Here we assume that after commanding the SLIP server into SLIP # mode that it prints your IP address get $locip remote 30 if $errlvl != 0 goto prompt_error # Set up the SLIP operating parameters. get $mtu 296 # Ensure "route add -net default xs4all.hacktic.nl" will be done default # Say hello and fire up! done: print CONNECTED $locip ---> $rmtip mode CSLIP goto exit prompt_error: print TIME-OUT waiting for sliplogin to fire up... goto error login_trouble: print Trouble waiting for the Login: prompt... goto error password:error: print Trouble waiting for the Password: prompt... goto error modem_trouble: print Trouble occurred with the modem... error: print CONNECT FAILED to $remote quit exit: exit
以上示例假设您正在调用动态 SLIP 服务器,如果您正在调用静态 SLIP 服务器,那么随 dip337j-uri.tgz 提供的 sample.dip 文件应该对您有效。
当 dip 被赋予 get $local 命令时,它会搜索来自远程端的传入文本,以查找看起来像 IP 地址的字符串,即用 `.' 字符分隔的数字字符串。此修改专门针对动态 SLIP 服务器而实施,以便可以自动执行读取服务器授予的 IP 地址的过程。
以上示例将通过您的 SLIP 链路自动创建一个默认路由,如果这不是您想要的,您可能有一个应作为默认路由的以太网连接,那么从脚本中删除 default 命令。在此脚本运行完毕后,如果您执行 ifconfig 命令,您将看到您有一个 sl0 设备。这是您的 SLIP 设备。如果需要,您可以在 dip 命令完成后,使用 ifconfig 和 route 命令手动修改其配置。
请注意,dip 允许您选择许多不同的协议与 mode 命令一起使用,最常见的示例是 cSLIP,用于带压缩的 SLIP。请注意,链接的两端必须达成一致,因此您应该确保您选择的内容与服务器的设置一致。
以上示例非常健壮,应该可以处理大多数错误。有关更多信息,请参考 dip 手册页。当然,例如,您可以将脚本编码为执行诸如在规定的时间段内未获得连接时重新拨号服务器,甚至在您可以访问多个服务器时尝试一系列服务器之类的操作。
如果您在两台机器之间有电缆,或者有幸拥有租用线路,或者在您的机器和另一台机器之间有其他永久串行连接,那么您不需要费力地使用 dip 来设置您的串行链路。slattach 是一款非常易于使用的实用程序,它将为您提供足够的配置连接的功能。
由于您的连接将是永久的,因此您需要在 rc.inet1 文件中添加一些命令。从本质上讲,您为永久连接所要做的就是确保将串行设备配置为正确的速度并将串行设备切换到 SLIP 模式。slattach 允许您使用一个命令执行此操作。将以下内容添加到您的 rc.inet1 文件中
# # Attach a leased line static SLIP connection # # configure /dev/cua0 for 19.2kbps and cslip /sbin/slattach -p cslip -s 19200 /dev/cua0 & /sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up # # End static SLIP. Where: IPA.IPA.IPA.IPA represents your IP address. IPR.IPR.IPR.IPR represents the IP address of the remote end.
slattach 将第一个未分配的 SLIP 设备分配给指定的串行设备。slattach 从 sl0 开始。因此,第一个 slattach 命令将 SLIP 设备 sl0 连接到指定的串行设备,sl1 连接到下一个,依此类推。slattach 允许您使用 -p 参数配置许多不同的协议。在您的情况下,您将使用 SLIP 或 cSLIP,具体取决于您是否要使用压缩。注意:两端必须就您是否要使用压缩达成一致。