速读原著-TCP/IP(X窗口系统)

2020-03-18 18:13:50 浏览数 (1)

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

30.5 X窗口系统

X窗口系统(X Window System),或简称为X,是一种客户-服务器应用程序。它可以使得多个客户(应用)使用由一个服务器管理的位映射显示器。服务器是一个软件,用来管理显示器、键盘和鼠标。客户是一个应用程序,它与服务器在同一台主机上或者在不同的主机上。

在后一种情况下,客户与服务器之间通信的通用形式是 T C P,尽管也可以使用诸如 D E C N E T的其他协议。在有些场合,服务器是与其他主机上客户通信的一个专门的硬件(一个 X终端)。在另一种场合,一个独立的工作站,客户与服务器位于同一台主机,使用那台主机上的进程间通信机制进行通信,而根本不涉及任何网络操作。在这两种极端情况之间,是一台既支持同一台主机上的客户又支持不同主机上的客户的工作站。

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

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

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

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

当X终端或工作站引导时,一般启动 X服务器。服务器创建一个 T C P端点,在端口6000 n上做一个被动打开,其中 n是显示器号(一般是 0)。大多数的 U n i x服务器也使用名字/ t m p / . X 11 - u n i x / Xn创建一个U n i x系统的插口,其中n还是显示器的号。

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

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

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

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

30.5.1 Xscope程序

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

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

我们将在s u n主机上启动x s c o p e,然后在主机s v r 4上运行x c l o c k客户。

代码语言:javascript复制
svr4 % DISPLAY=sun:1 xclock -digital -update 5

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

代码语言:javascript复制
Thu Sep 9 10:32:55 1993

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

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

下一个在时刻0 . 0 3的报文包含了两个客户请求。第 1个请求在服务器上创建一个客户可以在其中画的图形上下文。第2个请求从服务器上得到一个属性(R E S O U R C E _ M A N A G E R属性)。属性可以用于客户之间的通信,经常是在一个应用程序和窗口管理程序之间。服务器在时刻0 . 2 0的应答包含了这个属性。

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

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

30.5.2 LBX:低带宽X

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

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

0 人点赞