想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
《TCP/IP详解 卷1:协议》在线阅读版(52im.net)

第30章 其他的TCP/IP应用程序

微信扫一扫关注! * 即时通讯网(52im.net)独家整理,仅为方便个人学习和研究之用,版权归出版方所有,请支持正版。

* 也欢迎关注我的公众号”即时通讯技术圈“,一起学习、一起进步!

30.1 引言

本章中我们描述了另外一些很多实现都支持的TCP/IP应用程序。有些很简单,易于全面了解(Finger和Whois),而另一个则相当复杂(X窗口系统)。我们只提供了这个复杂应用程序的一个简短的概述,集中介绍其对TCP/IP协议的使用。

另外,我们提供一些Internet上资源发现工具的概述。包括一组在Internet上导航的工具,可以帮助寻找一些我们不知道确切位置和名字的信息。

30.2 Finger协议

Finger协议返回一个指定主机上一个或多个用户的信息。它常被用来检查某个人是否登录了,或者搞清一个人的登录名以便给他发送邮件。RFC 1288 [Zimmerman 1991]指明了这个协议。

由于两个原因,很多站点不支持一个Finger服务器。第一,Finger服务器的一个早期版本中的一个编程错误被1988年声名狼藉的Internet蠕虫病毒利用,作为进入点之一(RFC11 35 [Reynolds 1989]和[Curry 1992]更详细地描述了蠕虫)。第二,Finger协议有可能会泄露一些很多管理员认为是有关用户的私有信息(登录名、电话号码,他们上次的登录时间,等等)。RFC 1288的第3节给出了这个有关服务安全方面的细节。

从一个协议的角度来看,Finger服务器有一个知名的端口79。客户对这个端口做一个主动打开,然后发送一个在线的请求。服务器处理这个请求,把输出发送回去,然后关闭连接。查询和响应都是采用NVT ASCII,类似于我们在FTP和SMTP协议中所看到的。

尽管大多数的Unix用户都是使用finger(1)客户来访问Finger服务器,我们将从使用Telnet客户与Finger服务器直接相连开始,看看客户发出的每一条在线命令。如果客户的查询是一个空行(在NVT ASCII中,空行以一个回车符CR跟着一个换行符LF来传输),它就是一个请求查询所有在线用户信息的命令。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

off ice和office phone的空白输出字段是从用户的口令(password)文件记录的选项字段中取出的(在这个例子中,这两个字段的值没有提供)。

服务器必须在最后做一个主动的关闭操作,因为服务器返回的是一个可变长度的信息。当客户收到文件结束字符时,就知道服务器的输出结束了。

364TCP/IP详解,卷1:协议

当客户的请求由一个用户名组成时,服务器只以该用户的信息作为响应。下面是另一个例子,这个例子中删去了Telnet客户的输出:

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

当一个系统完全禁止了Finger服务时,因为没有进程被动打开端口79,所以客户的主动打开将从服务器接收到一个RST。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

一些站点在端口79提供了一个服务器,但服务器只是向客户输出信息,而不理睬客户的任何请求:

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

对一个组织来说,另一种可能就是实现一个防火墙网关:在组织内部和Internet之间的一个路由器,负责过滤(也就是扔掉)特定的IP数据报([Cheswick and Bellovin 1994]详细讨论了防火墙网关)。防火墙网关可以被配置成扔掉从Internet进来的这样一些数据报,这些数据报是目的端口为79的TCP报文段。

对于Finger的服务器和Unix的Finger客户还有其他的实现。欲知详情,请参考RFC 1288和有关finger(1)的手册。

RFC 1288指出提供了Finger服务器的、具有TCP/IP连接的自动售货机应该对客户的空行请求响应以现有产品的列表。对于由一个名字组成的客户请求,它们应该响应以一个数目或者与这个产品有关的可用项的列表。

30.3 Whois协议

Whois协议是另一种信息服务。尽管任何站点都可以提供一个Whois服务器,在InterNIC站点(rs.internic.net)的服务器是最常使用的。这个服务器维护着所有的DNS域和很多连接在Internet上的系统的系统管理员的信息(另一个可用的服务器在nic.ddn.mil,不过只包含了有关MILNET的信息)。不幸的是信息有可能是过期的或不完整的。RFC 954 [Harrenstein, Stahl, and Feinler 1985]说明了Whois服务。

第30章 其他的TCP/IP应用程序365

从协议的角度来看,Whois服务器有一个知名的TCP端口43。它接受客户的连接请求,客户向服务器发送一个在线的查询。服务器响应以任何可用的信息,然后关闭连接。请求和应答都以NVT ASCII来传输。除了请求和应答所包含的信息不一样,Whois服务器和Finger服务器几乎是一样的。

最常用的Unix客户程序是whois(1)程序,尽管我们可以使用Telnet自己手工键入命令。开始的命令是只包含一个问号的请求,服务器会返回所支持的客户请求的具体信息。

当NIC在1993年改变为InterNIC时,Whois服务器的站点也从nic.ddn.mil移到了rs.internic.net。很多厂商仍然装载了采用nic.ddn.mil版本的whois客户程序。为了和正确的服务器联系上,你可能需要指明命令行参数-h rs.internic.net。

另外,我们可以使用Telnet登录rs.internic.net站点,登录名采用whois。

我们将使用Whois服务器来查询一下本书的作者(已经删去了无关的Telnet客户输出)。第一个请求是查询所有匹配“stevens”的名字。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

名字后面的括号中的三个大写字母跟着一个数字,(WRS28),是个人的NI句柄。下一个查询包含一个感叹号和一个NIC句柄,用于获得有关这个人的进一步信息。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

很多有关Internet变量的其他信息也可以查找。例如,请求net 140.252将返回有关B类地址140.252的信息。

白页

使用SMTP的VRFY命令、Finger协议以及Whois协议在Internet上查找用户类似于使用电话号码簿的白页查找一个人的电话号码。在目前阶段,诸如上述的工具已经广泛可用了,为了提高这种服务的研究正在进行当中。

[Schwartz and Tsirigotis 1991]包含了正在Internet上试验的不同白页服务的其他信息。一个叫作Netfind的特别工具可以通过使用Telent,以netfind登录到bruno.cs.colorado或者ds.internic.net站点来访问。

RFC 1309 [Weider, Reynolds, and Heker 1992]提供了对OSI目录服务X.500的概述,并且比较了它与当前的Internet技术(Finger和Whois)的相同点和不同点。

366TCP/IP详解,卷1:协议

30.4 Archie、WAIS、Gopher、Veronica和WWW

前两节我们讨论的工具—Finger、Whois和一个白页服务—是用来查找人的信息的。还有一些工具是用来定位文件和文档的,本节中对这些工具给出了一个概述。我们只提供了一个概述,因为对每一个工具的细节的研究超出了本书的范围。我们给出了在Internet上找到这些工具的方法,鼓励你去试一试,找找看哪些工具可以帮助你。还有一些其他的工具正在被开发。[Obraczka, Danzig, and Li1993]概述了在Internet上的资源发现服务。

30.4.1 Archie

本书中使用的很多资源都是使用匿名FTP得到的。问题是如何找到有我们想要的程序的FTP站点。有时候我们甚至不知道精确的文件名,但知道几个很可能在文件名中出现的关键字。

Archie提供了Internet上几千个FTP服务器的目录。我们可以通过登录进一个Archie服务器,搜索那些名字中包含了一个指定的常规表达式的文件。输出是一个与文件名匹配的FTP服务器的列表。然后我们可以使用匿名FTP去那个站点取得想要的文件。

全世界有很多Archie服务器。一个比较好的开始点是使用Te lnet以archie名字登录进ds.internic.net,然后执行命令servers。这个命令的输出提供了所有Archie服务器以及它们的地址的一个列表。

30.4.2 WAIS

Archie帮助我们查找名字中包含关键字的文件,但有时候我们需要查找包含一个关键字的文件或数据库。即,想查找一个内容中包含一个关键字的文件,而不是文件名字中包含关键字。

WAIS(Wide Area Information Servers广域信息服务系统)知道几百个包含了有关计算机主题的和其他一般性主题信息的数据库。为了使用WAIS,我们要选择需要查找的数据库,指明关键字。尝试WAIS服务请使用Telnet,以wais名字登录quake.think.com站点。

30.4.3 Gopher

Gopher是其他Internet资源服务如Archie、WAIS和匿名FTP的一个菜单驱动的前端程序。Gopher是最容易使用的工具之一,因为不管它使用了哪个资源服务,它的用户界面都是一样的。

为了尝试Gopher,请使用Telnet,以gopher名字登录is.internic.net站点。

30.4.4 Veronica

就像Archie是一个匿名FTP服务器的索引一样,Veronica(Very Easy Rodent-Oriented Netwide Index to Computerized Archives)是一个Gopher标题的索引。一次Veronica搜索一般要查找几百个Gopher服务器。

我们必须通过一个Gopher客户来访问Veronica服务。选择Gopher的菜单项“Beyond InterNIC: Virtual Treasures of the Internet”,然后在下一个菜单中选择Veronica。

第30章 其他的TCP/IP应用程序367

30.4.5 万维网WWW

万维网使用一个称为超文本的工具,使得我们可以浏览一个大的/全球范围的服务和文档。信息和关键字一起显示,不过关键字被突出显示Θ。我们可以通过选择关键字得到更多的信息。

为了访问WWW,请使用Telnet登录info.cern.ch站点。

30.5 X窗口系统

X窗口系统(XWindow System),或简称为X,是一种客户-服务器应用程序。它可以使得多个客户(应用)使用由一个服务器管理的位映射显示器。服务器是一个软件,用来管理显示器、键盘和鼠标。客户是一个应用程序,它与服务器在同一台主机上或者在不同的主机上。在后一种情况下,客户与服务器之间通信的通用形式是TCP,尽管也可以使用诸如DECNET的其他协议。在有些场合,服务器是与其他主机上客户通信的一个专门的硬件(一个X终端)。在另一种场合,一个独立的工作站,客户与服务器位于同一台主机,使用那台主机上的进程间通信机制进行通信,而根本不涉及任何网络操作。在这两种极端情况之间,是一台既支持同一台主机上的客户又支持不同主机上的客户的工作站。

X需要一个诸如TCP的、可靠的、双向的流协议(X不是为不可靠协议,如UDP,而设计的)。客户与服务器的通信是由在连接上交换的8bit字节组成的。[Nye 1992]给出了客户与服务器在它们的TCP连接上交换的150多个报文的格式。

在一个Unix系统中,当X客户和X服务器在同一台主机上时,一般使用Unix系统的本地协议,而不使用TCP协议,因为这样比使用TCP的情况减少了协议处理时间。Unix系统的本地协议是同一台主机上的客户和服务器之间可以使用的一种进程间通信的形式。回忆一下在图2-4中,当使用TCP作为同一台主机上进程间的通信方式时,在IP层以下发生了这个数据的环回(loopback),隐含着所有的TCP和IP处理都发生了。

图30-1显示了三个客户使用一个显示器的可能的脚本。一个客户与服务器在同一台主机上,使用Unix系统的本地协议。另外两个位于不同的主机上,使用TCP。一般来说,其中一个客户是一个窗口管理程序(window manager),它有权限管理显示器上窗口的布局。例如,窗口管理程序允许我们在屏幕上移动窗口,或者改变窗口的大小。

在这里客户和服务器这两个词猛一看含义相反了。对于Telnet和FTP的应用,我们把客户看作是在键盘和显示器上的交互式用户。但是对于X,键盘和显示器是属于服务器的。服务器被认为是提供服务的一方。X提供的服务是对窗口、键盘和鼠标的访问。对于Telnet,服务是登录远程的主机。对于FTP,服务是服务器上的文件系统。

当X终端或工作站引导时,一般启动X服务器。服务器创建一个TCP端点,在端口6000+n上做一个被动打开,其中n是显示器号(一般是0)。大多数的Unix服务器也使用名字/tmp/.X11-unix/Xn创建一个Unix系统的插口,其中n还是显示器的号。

当一个客户在另一台主机上启动时,它创建一个TCP端点,对服务器上的端口6000+n做一个主动打开。每个客户都得到了一个自己与服务器的连接。服务器负责对所有的客户请求进行复用。从这点开始,客户通过TCP连接向服务器发送请求(例如,创建一个窗口),服务器返回应答,服务器也发送事件给客户(鼠标按钮按下,键盘键按下,窗口暴露,窗口大小改变,等等)。

  1. Θ 例如通过使用不同的颜色—译者注。

368TCP/IP详解,卷1:协议

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

图30-1 使用一个显示器的三个X客户

图30-2将图30-1重新画,但强调了客户与X服务器进程间的通信,X服务器进程轮流管理着每个窗口。图中没有显示的是X服务器管理键盘和鼠标。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

图30-2 使用一个显示器的三个客户

单个服务器处理多个客户请求的这种设计与我们在18.11节描述的正常的TCP并发服务器设计不同。例如,每次一个新的TCP连接请求到达,FTP和Telnet服务器都会产生一个新的进程,因此,每个客户都和一个不同的服务器进程通信。然而,对于X,运行在同一台主机或者在不同主机上的所有客户都和同一个服务器通信。

通过X客户和它的服务器之间的TCP连接可以交换很多数据。传输数据的数目依赖于特定的应用程序设计。例如,如果我们运行Xclock客户,Xclock在服务器的一个窗口中显示客户机当前的时间和日期。如果我们指定每隔1秒修改一次时间,那么每隔1秒,就会有一个X报文通过TCP连接从客户传输到服务器。如果我们运行X终端模拟程序,Xterm,我们敲的每一个键都会变成一个32字节的X报文(加上标准的IP和TCP首部就是72字节),在相反方向上的回送字符将是一个更大的X报文。[Droms and Dyksen 1990]检查了不同的X客户与一个特定的服务器之间的TCP流量。

30.5.1 Xscope程序

Xscope是检查X客户与它的服务器之间交换的信息的一个方便的程序。大多数的X窗口实现都提供这个程序。它处在客户与服务器之间,双向传输所有的数据,同时解析所有的客户请求和服务器应答。图30-3显示了这种设置。

第30章 其他的TCP/IP应用程序369

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

图30-3 使用xscope监视一个X连接

首先,我们在服务器所在的主机上启动xscope进程,但是xscope不是在端口6000而是在端口6001上监听TCP的连接请求。然后我们在另一台主机上启动一个客户,指明显示器号为1,而不是0,使得客户与xscope相连,而不直接与服务器相连。当客户的连接请求到达时,xscope创建与端口6000上的真正的服务器的一个TCP连接,在客户与服务器之间复制所有的数据,同时生成请求与应答的一个可读的描述。

我们将在sun主机上启动xscope,然后在主机svr4上运行xclock客户。

svr4 % DISPLAY=sun:1 xclock -digital -update 5

这条命令在主机sun的一个窗口中以数字形式显示时间和日期。我们指明了一个每5秒的更新时间。

Thu Sep 9 10:32:55 1993

我们对xscope指明一个-q选项以产生最小的输出。为了看到每个报文的所有字段,可以使用不同的冗长级别。下面的输出显示了前三个请求和应答。

第30章 其他的TCP/IP应用程序_TCP/IP详解卷1 协议_即时通讯网(52im.net)

客户的第1个在时刻0.00的报文和服务器在时刻0.02的响应是客户与服务器之间标准的连接建立过程。客户标识它的字节顺序以及它希望的服务器版本。服务器响应以有关自己的不同的信息。

370TCP/IP详解,卷1:协议

下一个在时刻0.03的报文包含了两个客户请求。第1个请求在服务器上创建一个客户可以在其中画的图形上下文。第2个请求从服务器上得到一个属性(RESOURCE_MANAGER属性)。属性可以用于客户之间的通信,经常是在一个应用程序和窗口管理程序之间。服务器在时刻0.20的应答包含了这个属性。

下面两个在时刻0.30和0.38的客户报文形成了返回一个原子的单个请求(每个属性具有一个唯一的整型标识符称为原子)。服务器在时刻0.43的应答包含了这个原子。

如果不提供有关X窗口系统更多的细节是不可能进一步理解这个例子的,但这又不是本节的目的。在这个例子中,在窗口被显示之前,客户总共发送了1668个字节组成的12个报文段,服务器总共发送了11 20个字节组成的10个报文段。耗费的时间为3.17秒。从这以后客户每5秒发送一个平均44个字节的小请求,请求更新窗口。这样一直持续到客户被终止。

30.5.2 LBX:低带宽X

为了将X用于局域网,对X协议使用的编码进行了优化,因为在局域网中花在对数据进行编码和解码的时间比最小化传输的数据更重要。尽管这种推断对以太网是适用的,但对于低速的串行线,如SLIP和PPP链路,就存在问题了(2.4节和2.6节)。

定义一个称为低带宽X(LBX)的标准的工作正在进行当中,它使用了下面的技术来减少网络流量的数目:快速缓存、只发送与前面分组的不同部分以及压缩技术。标准的规范和在第6版的X窗口系统中的一个样本实现应该会在1994年的早些时候完成。

30.6 小结

我们介绍的前两个应用,Finger和Whois,是用来获得用户信息的。Finger客户查询一个服务器,经常是为了找到某个人的登录名(以便给他们发电子邮件),或者去看一下某个人是否登录了。Whois客户一般与InterNIC运行的服务器联系,查找关于一个人、机构、域或网络号的信息。

我们简单描述了其他一些Internet资源发现服务:Archie、WAIS、Gopher、Veronica和WWW,帮助我们在Internet上定位文件和文档。还有一些资源发现工具正在被开发。

本章的最后简单浏览了另一个TCP/IP的重要客户程序,X窗口系统。我们看到X服务器管理一个显示器上的多个窗口,处理客户与其窗口的通信。每个客户都有它自己的与服务器的TCP连接,一个单个的服务器为一个给定的显示器管理着所有的客户。通过Xscope程序,我们看到怎样把一个程序放在一个客户与服务器之间,输出有关两者之间交换的报文的信息。

习题

  1. 试用Whois找到网络号为88的A类网络的拥有者。
  2. 试用Whois找到管理whitehouse.gov域的DNS服务器。这个应答与DNS给出的答案相匹配吗?
  3. 在图30-3中,你认为xscope进程必须和X服务器运行在同一台主机上吗?
打赏
打赏站长 JackJiang ×
使用微信打赏! 使用支付宝打赏!