天天看點

速讀原著-TCP/IP(X視窗系統)

第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連接配接向伺服器發送請求(例如,建立一個視窗),伺服器傳回應答,伺服器也發送事件給客戶(滑鼠按鈕按下,鍵盤鍵按下,視窗暴露,視窗大小改變,等等)。

速讀原著-TCP/IP(X視窗系統)

圖3 0 - 2将圖3 0 - 1重新畫,但強調了客戶與 X伺服器程序間的通信, X伺服器程序輪流管理着每個視窗。圖中沒有顯示的是 X伺服器管理鍵盤和滑鼠。

速讀原著-TCP/IP(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顯示了這種設定。

速讀原著-TCP/IP(X視窗系統)

首先,我們在伺服器所在的主機上啟動 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客戶。

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

這條指令在主機s u n的一個視窗中以數字形式顯示時間和日期。我們指明了一個每 5秒的更新時間。

Thu Sep 9 10:32:55 1993
           

我們對x s c o p e指明一個- q選項以産生最小的輸出。為了看到每個封包的所有字段,可以使用不同的冗長級别。下面的輸出顯示了前三個請求和應答。

速讀原著-TCP/IP(X視窗系統)

客戶的第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