Term 协议
Term 最初由 Michael O'Reilly (michael@iinet.com.au) 开发,是一个允许多个并发连接通过串行线路的程序。Term 允许几乎所有“标准”TCP/IP 应用程序在通过串行连接连接到联网 Unix 系统的 Unix 系统上使用。与其他常见的串行协议(如 SLIP 和 PPP)不同,term 不需要非用户管理维护,并且不需要修改主机内核。这意味着几乎任何在拨号系统上具有登录 shell 的用户都可以使用曾经仅限于 SLIP/PPP 用户的网络实用程序。
与 SLIP 或 PPP 不同,您的机器没有自己的 IP 地址。所有传入流量都必须寻址到您的远程主机,并且它将由 term 指向您的本地计算机。
Term 的基本工作原理是将远程主机上的数据包直接重定向到您的本地 Unix 系统。这允许任何传入的网络数据包通过代理,经由您的远程拨号计算机到达您的计算机。相同的基本思想也适用于传出数据包:您计算机上的本地套接字被重定向到您的远程主机,并发送到它们的实际网络目的地。
整个 term 包是一个基本的实用程序和库套件,允许您建立这些网络连接。这些实用程序包括
term:这是实际的守护程序,在远程和本地计算机上运行。它建立连接您的计算机到远程主机和网络其余部分所需的桥梁。
tredir:这是 term 附带的最常用的实用程序。它允许用户手动重定向传出或传入端口,以用于非 term 应用程序,例如重定向 SMTP(电子邮件)端口,以便用户可以发送或接收电子邮件。
tmon:此实用程序监视和显示通过串行线路的传入和传出流量。显示两个条形图,显示流量水平,每秒更新一次。这使您可以监视在使用 term 时在任何时间使用的带宽量。
trsh:此实用程序允许您快速访问您的远程登录 shell,就像 rsh 或 rlogin 允许您做的那样。如果需要,这允许您从您的帐户执行例行的网络任务。
tupload:与 sz 非常相似,此实用程序用于将文件传输到您的远程帐户或从您的远程帐户传输文件,具体取决于从 term 链接的哪个“端”执行它。
txconn:当您需要远程显示 X 应用程序,或在本地屏幕上显示一个应用程序时,txconn 建立所需的重定向以使其成为可能。(可以使用 tredir 创建相同的效果,稍后将对此进行解释。)
其他应用程序:最近,一系列活动导致出现了一些更多的 term 客户端,例如 tudpredir,一个 udp 端口重定向器;tdate,它通过网络时间协议设置您计算机的时间;以及 “download”,它与 tupload 的功能相反。
在您实际运行 term 之前,您应该在远程和本地计算机上运行一个名为 linecheck 的实用程序。
Linecheck 用于检查链接的“透明度”,方法是查看哪些 8 位字符通过链接传输。linecheck 的结果用于配置 term 以正确和最佳地运行。
要运行 linecheck
使用通信程序,登录到您在远程系统上的帐户并运行
linecheck linecheck. log
暂停您的 comm 程序(在 kermit 下为 ^Z),否则它将从 linecheck 中窃取字符。
在本地系统上,运行
linecheck linecheck.log > /dev/modem < /dev/modem
在 linecheck 完成其操作后,检查两个 linecheck.log 文件。在这些文件的底部将指示您必须在 .termrc 配置文件中转义哪些字符。linecheck.log 中的消息给出了需要在链接一端忽略而在另一端转义的字符(如果有)。例如,如果我的本地结果表明我应该转义 3 4 和 121,那么我生成的 .termrc 文件将包含类似这样的内容
Local: escape 34 escape 121
以及我的远程 .termrc
ignore 34 ignore 121
因为我必须忽略另一端转义的字符。
Term 非常灵活,在命令行以及 .termrc 文件中都有许多配置选项。运行 term 很像运行 linecheck
使用通信程序,拨打您的远程帐户并登录
从该帐户启动 term。一个示例命令行可能是
term -l $HOME/tlog -s 38400 -c off -w 10 -t 150 -r
此命令行指示
将日志文件设置为您主目录中的 tlog
将线路速度设置为 38400 bps
关闭 term 的压缩(大概是因为您的调制解调器具有更好的压缩效果)
使用窗口设置为 10(在 term 文档中解释)
使用超时为 150(在 term 文档中解释)
将此设置为“远程”端
Shell 返回到您的本地计算机,可以通过暂停您的终端程序,或使用其内置的 shell 功能。对于 Kermit,使用 ctrl-Z,对于 xcomm 使用 ctrl-a-x。(查看您的特定终端程序自己的文档。)
在您的本地计算机上启动 term
term -c off -l $HOME/tlog -s 38400 -w 10 -t 150 < /dev/modem > /dev/modem &
在这种情况下,唯一的区别是重定向到调制解调器设备,并且缺少 -r 选项。
应该注意的是,所有命令行参数都可以放在 .termrc 文件中,因此您只需键入 term 本身即可启动它
.termrc: compress off speed 38400 window 10 timeout 150
请注意,您仍然需要在命令行上放置重定向。
trsh 用于访问您的远程帐户,就像您使用 rlogin 访问它一样。trsh 也可以像 rsh 一样,并在您的远程主机上执行命令
% trsh Remote: term 2.0.4 tty /dev/ttyp4. exec /usr/local/bin/tcsh foober : /home/ j oeuser% % trsh -s uptime 1:15am up 20 days, 17:30, 3 users, load average: 1.00, 1.00, 1.00
term 客户端中最实用的命令,此命令允许您手动重定向 TCP/IP 端口以用于 term。例如,要允许传入的 telnet 会话到您的家用计算机,您需要将远程主机上的端口重定向到您自己的 telnet 端口,即端口 23。tredir 的常用命令格式是
tredir [thiscomputer: ]port [thatcomputer: ]port
默认情况下,第一个端口是您在其上运行命令的计算机上的端口,第二个端口是您要重定向到的另一台计算机上的端口值。
在此示例中,我想将端口 4000 重定向到我自己的端口 23
remotehost% tredir 4000 23 Redirecting 4000 to 23 remotehost% telnet localhost 4000 Trying . . . Connected to localhost. Escape character is '^] ' Linux 1.1.35 (linuxbox) (ttyp3) linuxbox login:
tredir 的另一个用例是配置您的系统以允许通过您的网络的 NNTP 新闻服务器读取新闻。这需要在 term 的本地端使用 tredir,而不是远程端
linuxbox% tredir 119 news. server.com: 119 Redirecting 119 to news.server.com:ll9 linuxhox% export NNTPSERVER=localhost linuxbox96 trn
[正常的 trn 会话如下]
请注意,在此示例中,NNTPSERVER 变量设置为 localhost。这是因为本地 119 端口已重定向到实际的网络 NNTP 服务器。因此,任何到 localhost NNTP 端口的连接都将重定向到远程计算机上的实际端口。与 SLIP/PPP 允许的情况不同,直接连接到实际的 NNTP 服务器(将 NNTPSERVER 设置为 news.server. com)在 term 链接上是不可能的。tredir 使许多使用标准 TCP 套接字的应用程序成为可能,例如 sendmail、IRC、MUD、MUCK 和许多其他类似的多用户游戏。
这是 sz 或其他文件上传/下载协议的 term 等效项。它允许将文件从本地机器传输到远程机器,反之亦然,具体取决于命令从哪一端启动。通常,命令行将如下所示
linuxtox% tupload foot tar. gz
这将发送文件 foo.tar.gz 的副本到远程主机。下面说明了一些有用的标志
linuxbox% tupload -vv -p -16 foo.tar.gz Changing priority to -16 sending foo.tar.gz 30651 of 259727 (11%), current CPS 3083. ETA: 76.8 TT: 84.2
-vv 标志表示给出有关上传状态的详细消息,而 -p 表示更改上传的 term 优先级。这种优先级允许您 nice 一个 term 进程,使其不会占用您可能正在运行的其他 term 应用程序的带宽。这对于大型后台传输很有用。
txconn 旨在简化从一台主机到另一台主机的 X 应用程序的重定向。如果 computer2 上的用户想要在您的屏幕上显示 X 应用程序,您可以使用 txconn。与使用 tredir 类似,任何传入连接都必须使用您的远程主机名或 IP 地址才能连接到您。
由于 X 在外观上与普通的 TCP/IP 客户端不同,因此它需要特殊的处理才能进行重定向。txconn 本身不使用任何命令行参数
remotehost% txconn Xconn bound to screen 9 :9
这意味着可以从网络上以 remotehost:9 访问您的家用 X 显示器,这意味着 remotehost 上的根窗口 9。如果 computer2 上的用户想要将他的 xclock 发送到您的本地显示器,他将键入
computer2% setenv DISPLAY remotehost:9 computer2% xclock &
片刻之后,他执行的 xclock 将出现在您的显示器上。
如果您想将计算机上运行的 X 应用程序显示到 computer2 的显示器上,则必须使用 tredir。这有点令人困惑。
linuxbox% tredir 6004 computer2:6000 Redirecting 6004 to computer2:6000 linuxhox% export DISPLAY=localhost:4 linuxbox% xclock &
这可能看起来有点奇怪,但您正在做的是将您的显示器 :4(您未使用)重定向到 computer2 的默认显示器 :0。端口 6000-6100 代表显示器 :0 到 :100。通过将您自己的显示器 :4 重定向到他的 :0,您本地机器上任何使用显示器 :4 的 X 应用程序都将出现在 computer2 的屏幕上。这有点复杂,但它有效地工作。
由于 term 的性质,使用标准 TCP/IP 的应用程序在不使用 tredir 的情况下将无法工作,即使使用 tredir,它们也可能并不总是有效。例如,不可能将 tredir 用于像 NCSA Mosaic 这样的应用程序,因为它与不同的主机和服务建立了许多不同的连接。其他应用程序,尽管它们使用单个网络连接,但由于它们使用辅助数据端口(例如 ftp 或 IRC 的 DCC 协议)而无法工作。这样的应用程序需要修改实际的源代码以利用 term 套接字。大多数流行的应用程序(如 Mosaic、lynx、ftp、ncftp 和 irc)都已针对 term 协议进行了修改。
如果您自己编译这些应用程序,则必须将它们与 term 库 libtermnet.a 链接。(此库已取代旧的 client.a 库。)此库包含使用 term 套接字所需的指令和符号。
term 的新发展使得用户可以极其容易地修改现有的 TCP/IP 应用程序以与 term 一起使用,而无需曾经需要的大量源代码修改。通过使用通用套接字/网络功能(如 connect()、gethostbyname() 和 send())的直接替换,您只需要修改应用程序的 Makenle 即可使其符合 term 标准。此直接替换是 libtermnet.a 库,以及一个将标准网络调用转换为符合 term 标准的调用的头文件。一个有趣的注意事项是,termnet 链接的二进制文件也适用于正常的 TCP/IP,因此如果您将来切换到 SLIP 或 PPP,您的 term 兼容二进制文件仍然可以工作!
Makefile 中只需要两个元素即可生成 term 兼容的二进制文件。在定义 INCLUDES 的位置,您添加
-include /usr/src/term200/termnet.h
当然,要为您的 term 源代码路径调整路径。
在 LIBS 或 LDFLAGS 部分中,您添加
-L/usr/local/lib -ltermnet
如果您在公共库路径中安装了 libtermnet.a 或 libtermnet.so.2.0.* 共享库,则不需要 -L/directory/path。
希望在添加这些定义后,您最终会得到一个完全符合 term 标准的二进制文件。当然,仍然有一些缺点。许多应用程序使用非标准套接字调用,而 termnet 无法完全控制此类事情。此外,新集成的(在我写作时)term 中的 udp 支持仍然非常粗糙。
Chimera、lynx、xarchie、rsh/rlogin 和 fsp 等应用程序是成功 tennnett~ng 的一些示例,并且肯定会有更多应用程序效仿。
随着 termnet 的实施,大多数应用程序的手动源代码级黑客攻击的日子已经结束,并且曾经太难手动修补 term 支持的更多应用程序将可供 term 用户使用。
Liem Bahneman 是华盛顿大学的学生 Unix 顾问,并且是 Linux Organization WWW 主页的管理员。Liem 使用 Linux 和 term 已经将近两年了,并且在他的空闲时间用 C 和 tcl/tk 开发 X11 应用程序。