Telnet協議

Telnet協議是TCP/IP協議族中的一員,是Internet遠程登錄服務的標準協議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。在終端使用者的電腦上使用telnet程序,用它連接到服務器。終端使用者可以在telnet程序中輸入命令,這些命令會在服務器上運行,就像直接在服務器的控制檯上輸入一樣。可以在本地就能控制服務器。要開始一個telnet會話,必須輸入用戶名和密碼來登錄服務器。Telnet是常用的遠程控制Web服務器的方法。

登錄

Telnet服務雖然也屬於客戶機/服務器模型的服務,但它更大的意義在於實現了基於Telnet協議的遠程登錄(遠程交互式計算),那麼就讓我們來認識一下遠程登錄。

定義

先來看看什麼叫登錄:分時系統允許多個用戶同時使用一臺計算機,為了保證系統的安全和記賬方便,系統要求每個用戶有單獨的帳號作為登錄標識,系統還為每個用戶指定了一個口令。用戶在使用該系統之前要輸入標識和口令,這個過程被稱為'登錄'。 遠程登錄是指用戶使用Telnet命令,使自己的計算機暫時成為遠程主機的一個仿真終端的過程。仿真終端等效於一個非智能的機器,它只負責把用戶輸入的每個字符傳遞給主機,再將主機輸出的每個信息回顯在屏幕上。

產生和發展

我們可以先構想一個提供遠程文字編輯的服務,這個服務的實現需要一個接受編輯文件請求和數據的服務器以及一個發送此請求的客戶機。客戶機將建立一個從本地機到服務器的TCP連接,當然這需要服務器的應答,然後向服務器發送鍵入的信息(文件編輯信息),並讀取從服務器返回的輸出。以上便是一個標準而普通的客戶機/服務器模型的服務。

似乎有了客戶機/服務器模型的服務,一切遠程問題都可以解決了。然而實際並非你想象的那樣簡單,如果我們僅需要遠程編輯文件,那麼剛才所構想的服務完全可以勝任,但假如我們的要求並不是這麼簡單,我們還想實現遠程用戶管理,遠程數據錄入,遠程系統維護,想實現一切可以在遠程主機上實現的操作,那麼我們將需要大量專用的服務器程序併為每一個可計算服務都使用一個服務器進程,隨之而來的問題是:遠程機器會很快對服務器進程應接不暇,並淹沒在進程的海洋裡(我們在這裡排除最專業化的遠程機器)。

那麼有沒有辦法解決呢?當然有,我們可以用遠程登錄來解決這一切。我們允許用戶在遠地機器上建立一個登錄會話,然後通過執行命令來實現更一般的服務,就像在本地操作一樣。這樣,我們便可以訪問遠地系統上所有可用的命令,並且系統設計員不需提供多個專用地服務器程序。

問題發展到這裡好像前途一片光明瞭,用遠程登錄總應該解決問題了吧,但要實現遠程登錄並不簡單。不考慮網絡設計的計算機系統期望用戶只從直接相連的鍵盤和顯示器上登錄,在這種機器上增加遠程登錄功能需要修改機器的操作系統,這是極其艱鉅也是我們儘量避免的。因此我們應該集中力量構造遠程登錄服務器軟件,雖然這樣也是比較困難的。為什麼說這樣做也比較困難呢?

舉個例子來說:一般,操作系統會為一些特殊按鍵分配特殊的含義,比如本地系統將'Ctrl+C'解釋為:'終止當前運行的命令進程'。但假設我們已經運行了遠程登錄服務器軟件,'Ctrl+C'也有可能無法被傳送到遠地機器,如果客戶機真的將'Ctrl+C'傳到了遠地機器,那麼'Ctrl+C'這個命令有可能不能終止本地的進程,也就是說在這裡很可能會產生混亂。而且這僅僅是遇到的難題之一。

但儘管有技術上的困難,系統編程人員還是設法構造了能夠應用於大多數操作系統的遠程登錄服務器軟件,並構造了充當客戶機的應用軟件。通常,客戶機軟件取消了除一個鍵以外的所有鍵的本地解釋,並將這些本地解釋相應的轉換成遠地解釋,這就使得客戶機軟件與遠地機器的交互,就如同坐在遠程主機面前一樣,從而避免了上述所提到的混亂。而那個唯一例外的鍵,可以使用戶回到本地環境。

將遠程登錄服務器設計為應用級軟件,還有另一個要求,那就是需要操作系統提供對偽終端(pseudo terminal)的支持。我們用偽終端描述操作系統的入口點,它允許像Telnet服務器一樣的程序向操作系統傳送字符,並且使得字符像是來自本地鍵盤一樣。只有使用這樣的操作系統,才能將遠程登錄服務器設計為應用級軟件(比如Telnet服務器軟件),否則,本地操作系統和遠地系統傳送將不能識別從對方傳送過來的信息(因為它們僅能識別從本地鍵盤所鍵入的信息),遠程登錄將宣告失敗。

將遠程登陸服務器設計為應用級軟件雖然有其顯著的優點:比將代碼嵌入操作系統更易修改和控制服務器。但其也有效率不高的缺點(後面的內容將會給予解釋),好在用戶鍵入信息的速率不高,這種設計還是可以接受的。

工作過程

使用Telnet協議進行遠程登錄時需要滿足以下條件:在本地計算機上必須裝有包含Telnet協議的客戶程序;必須知道遠程主機的Ip地址或域名;必須知道登錄標識與口令。 Telnet遠程登錄服務分為以下4個過程:

1)本地與遠程主機建立連接。該過程實際上是建立一個TCP連接,用戶必須知道遠程主機的Ip地址或域名;

2)將本地終端上輸入的用戶名和口令及以後輸入的任何命令或字符以NVT(Net Virtual Terminal)格式傳送到遠程主機。該過程實際上是從本地主機向遠程主機發送一個IP數據包;

3)將遠程主機輸出的NVT格式的數據轉化為本地所接受的格式送回本地終端,包括輸入命令回顯和命令執行結果;

4)最後,本地終端對遠程主機進行撤消連接。該過程是撤銷一個TCP連接。

上面的內容只是討論了遠程登陸最基本的東西,其中的複雜和編程人員的艱辛是我們難以想象的,不知道你在舒服的使用Telnet的同時,是否想到了這些!

相關推薦

推薦中...