天天看點

TELNET 協定規範(轉)

TELNET 協定規範

 ARPA Internet上的主機被要求采用并實作此标準。

介紹

TELNET Protocol的目的是提供一個相對通用的,雙向的,面向八位位元組的通信方法。它主要的目标是允許接口終端裝置的标準方法和面向終端的互相作用。可以預見到,此協定也可被用于終端到終端的通信和處理到處理的通信(分布式計算)。

一般考慮

一個TELNET連接配接是一個用于傳輸控制協定的傳送資料的。TELNET 協定是建立在以下三個想法上的:首先是網絡虛拟終端的概念;其次是對話選項的方法;最後是終端和處理的協調。

當一個TELNET連接配接被初次建立時,每一端都被假設使用了網絡虛拟終端,也就是NVT。NVT是一個想象中的标準裝置通用裝置的代表。這就消除了“伺服器”和“使用者”機要了解對方機器終端的特點,而終端可以直接處理對話。所有的主機,使用者端的和伺服器端的,它們自己本地的裝置特點是以在網絡上可以作為一種NVT處理,任何一個都可以認為對方使用的是相同特點的裝置。NVT傾向于不過多地限制(提供了一個相應比較豐富的映射到本地裝置的字元集),也不是包括一切的(它要求使用者使用适當的終端)。注意:使用者機通常是與處理終端連接配接的主機,伺服器機通常是提供某種服務的機器。從另一點看,在終端到終端或程序到程序的通信上,使用者機是發起通信的機器。

規定選項的原理将以下事實考慮在内,許多機器希望在現在的NVT上提供另外的服務,多數使用者有比較複雜的終端,它們也就希望一種比較完整的而不是最小的服務。獨立的,但是存在于 TELNET 協定的不同選項支援這些需求,它們使用"DO, DON'T, WILL,WON'T"結構允許使用者機和伺服器建立建立一種更加精巧的TELNET會話連接配接。這種選項包括改變字元集,響應模式等等。設定選項的基本政策是任一方(或者兩者)初始化要求一個選項生效的請求。另一方可以接受也可以拒絕這一請求。如果接受請求,此選項立刻生效;如果被拒絕,連接配接仍然保持基本的NVT的連接配接屬性。很明顯,一方可以拒絕另一方關于啟用某一選項的請求,但是不能拒絕另一方關于使一選項失效的請求,因為雙方必須準備支援NVT。對話選項文法的建立使在雙方都送出請求某一選項生效的請求時,另一方可以直接認為收到對方的确認資訊。

這種對稱式的對話文法潛在地引起了一個不可終止的确認環--任何一方都将收到的确認資訊看作是請求,而不是一個确認資訊。為了防止這種循環的出現,有下面的規則:

a.任何一方僅可以要求對選項狀态的變化:例如,一方不可以送出請求,僅僅說明它在什麼樣的選項狀态下。

b.如果一方接收到好象是請求的資訊,請求進入一個已經進入的狀态,此資訊将被看作是一個确認消息。這種非響應從本質上防止了不可終止的對話的循環。如果要求發送一個要求改變狀态的請求,即使狀态并未改變。

c.無論何時,一方發送選項指令到另一方,無論作為一個請求或者是一個确認消息,選項的使用将對發送的資料處理有影響,這樣指令應該被插入到希望發生作用的資料流中的資料點之前。(應該注意,傳送請求和收到确認消息之間有一定的時間間隔,這是被動方式的。是以,一個主機希望在要求一個選項後緩存資料,直到它知道它的請求是否被接受,這樣就可以使這段不不确定時間對使用者不可見。)選項的請求可以在建立TELNET連接配接時十分頻繁地來往交換,因為每一方都希望從對方得到更好的服務。

除此以外,選項也可以在連接配接持續過程中動态改變來适應本地機器條件的變化。例如,NVT(它将以後被詳細解釋)對于許多“一次一行”的應用程式,如BASIC是十分适用的,而對于如NLS的“一次一字”的應用程式卻不怎麼好用。伺服器可能被選擇作為“一次一字”法則來适應在其上運作的本地程序,它将發起對話以達到合适的選項狀态。然而,相對于永久地負責這種多餘的處理負擔;它可以通過會話,在不需要這樣的選項狀态下回到NVT狀态。由一個程序發起的請求可以導緻一個不可終止的請求循環,如果此程序對一個拒絕請求的響應是再次要求此選項。為了防止這樣循環的發生,被拒絕的請求在其它事情發生變化之前不能被重複請求。這可能意味着,程序運作另外一個程式,或者使用者發送另外的指令,或者使用者對于環境或選項的改變。

比較好的方法是,預請求應該作為由另一端發送資訊的結果而發生,或者由于人為介入而發生。選項的設計者不應該因為對于選項會話的種種限制而感覺到伸不開手腳。一般文法的目的是更容易地擁有選項--因為表示對它們的忽視也是容易的。

如果特定的選項需要除"DO, DON'T, WILL, WON'T"以外的更豐富的結構,正确的方針是使用"DO, DON'T, WILL, WON'T"來建立連接配接解釋這種新結構,當這一解釋工作完成時,就可以自由地使用這一新結構了。例如,一方可能發送請求改變(或建立)每行的長度。如果接受了這些,對于對話的不同行長度可以使用不同的文法來表示--“子對話”可以包括一個域表示最大允許的,最小允許的和希望的長度。重要概念是這樣的

擴充的會話應該直到雙方建立了标準的會話并且能夠解釋這種擴充的文法之後再進行。總的來說,WILL XXX發送時說明一方希望執行選項XXX,DO XXX 和 DON'T XXX作為确定的不确定的響應;同樣,DO XXX被作為一種請求發送給另一方來啟動選項XXX,WILL XXX 和WON'T将被作為确定和不确定的響應。因為NVT是沒有任何選項時的結果, DON'T和WON'T響應将保證使連接配接最終保持于這種沒有任何選項的狀态。是以,所有主機可以不支援不了解的選項,它僅僅需要傳回這種選項的請求即可。

盡可能的,TELNET協定被用作伺服器-使用者的對稱,這樣,它就可以更容易而自然地處理使用者-使用者和伺服器-伺服器的情況。用選項來擴充這一功能是被希望實作的,但不是必要的。在任何情況下,對稱是一個運作的準則而不是固定的準則多次被明确提出。一個比較文檔,“TELNET選項說明”,可以被用于對建立新選項過程資訊的參考。

網絡虛拟終端網絡虛拟終端(NVT)是一個雙向字元裝置。NVT有一個顯示裝置和一個鍵盤。顯示裝置響應到達的資料,鍵盤負責通過TELNET連接配接發送資料,如果需要回顯,也應該在NVT的顯示裝置上顯示。對于網絡上的回顯并不要求(雖然确實存在這個“遠端”回顯選項,但是主機必不是必須實作此選項)。字元集是由七位ASCII碼組成的,而儲存在八位的域中。任何字元的轉換和計時方面的考慮都是本地的問題,這不影響NVT的工作。

資料傳送方面,雖然TELNET連接配接是全雙工的,NVT卻是線上緩沖狀态下的半雙工裝置。傳送資料 雖然TELNET連接配接是全雙工的,線上緩沖模式下,NVT卻被當作半雙工的裝置。此信号可以由程序或者使用者産生。對于一些主機處理網絡輸入中斷,或與預設的不進行遠端回顯的NVT說明的主機來說,此規則的代價是高昂的。是以,在源點緩存一些資料是有理由的。一些系統在每個輸入行未采用一些操作(即使是行列印機或打卡機也經常采用這種方法),這樣可以在每行未開始發送。在另一方面,使用者或者程序可以有時發覺提供在行未不中斷的資料是有用的而且是必須的;是以,也應該在實作在本地能夠識别這種信号并把這些資料立刻發送的方法和機制。當一個程序已經完成将資料發送到對方的顯示裝置而且也沒有緩存的輸入資料時時,程序必須發送TELNET Go Ahead (GA)指令。

這個規則并不是要求 TELNET GA指令必須由雙方終端發送,因為伺服器主機通常不要求特定的信号來繼續程序。但是,此指令的設計可以幫助使用者的本地主機操作一個實體上半雙工的終端,它如果IBM2741一樣擁有可鎖定的鍵盤。對此種類型終端的描述有助于解釋GA指令的正确使用。終端和計算機的連接配接總是在計算機或使用者的控制之下。任何一方都不能夠隐式地從另一方獲得控制權;控制權必須顯式地從一方轉移到另一方在終端一方,設定硬體在每一行結束時放棄控制權(例如,當使用者按下Enter鍵時)。當這種情況發生時,本地計算機處理輸入資料,決定是否輸出,如果不需要,将控制權回送給終端。如果需要産生輸出,計算機将保有控制權直到輸出資料發送完畢。在網絡上使用這種終端的困難是顯而易見的。“本地”計算機不知道在讀到行未符号時是否應該繼續保持控制權;這個問題的決定權在遠地處理此資料的計算機。是以,TELNET GA指令提供了一種機制讓遠端計算機能夠通知本地計算機,讓它将控制權轉交給使用者終端。在使用者需要控制權時,此信号應該也隻能

在此時發送。注意:過早地發送GA指令會使輸出資料阻塞,因為使用者可以假定傳送系統暫停,是以不能将一行結束。當然,前述内容不能夠用于使用者到伺服器方面的通信方面。在這個方面,GA指令可以在任何時候發送,可以根本不用發送。同樣,如果TELNET連接配接被用于程序到程序的通信,也不需要發送GA指令。

最後,對于終端到終端的通信,可以在兩端都需要GA指令,也可以在一端,也可以兩端都需要。如果主機希望支援終端到終端的通信主機應該提供一種讓使用者自由發送GA指令的方法;然而,對于一個TELNET程序而言,這并不是必須的。注意:TELNET模式的對稱性要求在概念上,兩端中的一端至少是一個NVT。控制函數的标準表示 如要本文的介紹中所說的,TELNET協定的目的是提供一種網絡上面向終端程序和終端裝置的标準接口。

這種類型互連的先前的經驗告訴我們,在許多主機上已經實作了類似的功能,但它們的實作方法卻差别很大。對于接觸這些系統的使用者而言,這些差别将是令人頭痛的。是以,TELNET定義了以下功能的五種标準表示。這種标準表示有一定的标準的意義,但這也不是必須的(例外是中斷處理函功能要其它使用TELNET的協定執行);這也就是說,系統不提供給本地使用者的功能也不可以不提供給遠端使用者,它可以将标準表示作為非操作的功能。

在另一方面,給本地使用者提供此功能的系統必須也向傳送此功能标準表示的遠端使用者提供此功能。

中斷處理(IP)一些系統提供可以暫停,中斷,放棄或終止使用者程序操作的功能。當使用者确定它的程序處于不可結束的循環中,或不經意地激活了一個程序時經常使用此功能。IP是使用此功能的标準表示。實作者應該注意的是:使用TELNET的其它協定可能也需要IP,是以,如果需要支援其它協定就應該實作IP。放棄輸出 (AO) 許多系統提供此功能,它允許産生輸出的程序到達類似操作結束的點,而不将輸出發送到使用者的終端。更深一層的,此功能通常清除已産生的所有輸出,而不顯示到使用者的終端上。AO是使用此功能的标準表示。

例如,一些子系統可能通常接受使用者指令,發送長文本串到使用者終端,最後發送一個提示使用者允許接收下一指令的提示符到使用者終端。如果在傳送文本串的過程中接收到AO指令,将會不再發送剩餘的字元串,而直接顯示提示符告知使用者可以輸入下一指令。(這與接收到IP之後的操作可能有所不同;IP會放棄發送剩餘的字元串而且退出子系統。)應該注意到,使用提供此功能的伺服器系統時外部緩沖區(在網絡和使用者本地主機上)也被清除;完成的正确方法是向使用者系統發送“Synch”信号。

你在此嗎 (AYT) 許多系統提供使用者這樣的功能,讓使用者知道是否正在運作。此功能在系統由于不可預知長度運算,或系統負載重的情況下長時間不響應時由使用者發起。AYT是使用此功能的标準表示。

删除字元(EC) 許多系統提供此功能用于删除最近相鄰的不可删除字元或使用者提供資料流的最近相鄰的“顯示位置”。此功能通常用于編輯鍵盤錯誤的輸入。EC是使用此功能的标準表示。注意:“顯示位置”可能包括多于一個的字元,它們是過多鍵入的結果或者如下格式的字元串:<char1> BS <char2>...

删除行(EL) 許多系統提供此功能用于删除目前輸入行中的所有資料。此功能通常被用于是編輯鍵盤輸入。EL是使用此功能的标準表示。

TELNET的"Synch"信号 大部分時分系統提供一種允許終端使用者重新獲得失控程序的機制;上述的IP和AO功能就是此機制的一個例子。這些系統,當被用于本地時,通路由使用者提供的所有信号,無論此信号是一般字元還是不可顯示的字元如電傳中的“BREAK”或IBM 2741中的“ATTN”鍵。當系統通過網絡連接配接時這種情況不一定就是準确的;網絡流量控制機制可能導緻一個信号被緩存于網絡中某處,例如在使用者的主機中。為了克服這個問題,引入了TELNET的“Synch”機制。一個Synch信号包括一個TCP 緊急信号和TELNET指令 DATA MARK。

緊急信号,它不受限于限制TELNET的流量控制,它可以在接收到程序引發特定的資料處理。

在這種模式中,此資料流立即被看作是“有重大意義的”,而抛棄其它資料。

TELNET指令DATA MARK (DM)是資料流中的同步标志,它訓示任何特定的信号已經發生過了,接收可以傳回到正常處理其它資料的狀态中了。Synch通過TCP發送操作完成,它和緊急标志及在最後的DM标志一起發送。當一些Synch信号被連續快速發送時緊急信号可能被淹沒。不可能對緊急信号記數,因為這一數字有可能小于也可能等于已經發送的數目。當處于通常模式下,DM不是一個操作;當處于緊急模型下,它訓示緊急處理的結束。如果TCP訓示緊急資料結束前發現DM,TELNET應該繼續操作資料流直到遇到DM為止。如果TCP在DM之後訓示又有一些緊急資料,那隻能是因為是一串Synch。TELNET應該繼續操作資料流直到遇到DM。

“有意義的”信号被定義為:IP,AO和AYT(但不是EC或EL)的TELNET标準定義;如果有的話,本地對這些标準定義的模拟;所有其它TELNET指令;其它站點定義的不需要拖後資料流的信号。因為SYNCH指令的另一個作用是抛棄所有在接收者和發送者之間随了TELNET指令之外的字元,如果需要時,此機制被指定為标準方法來清理資料路徑。例如,如果一個在終端的使用者傳送一個AO指令,收到此指令的伺服器(如果此伺服器提供此功能)應該傳回一個SYNCH給使用者。

最後,正如需要TCP緊急信号作為供他們使用的指令一樣,其它使用TELNET協定的協定也需要類似的指令。這通過使用[IP,SYNCH]就可以達到。例如,假設其它一些使用TELNET的協定定義了類型于AO指令的停止字元串。試想此協定的使用者希望伺服器來處理停止字元串,但連接配接因為伺服器正在處理别的指令而被阻塞。使用者應該使它的系統做以上工作:

發送TELNET IP字元;

發送TELNET SYNC串,這就是說:發送DM作為在TCP緊急模式發送操作下的唯一字元串。

發送字元串STOP,并且

發送其它協定的類型于TELNET DM的指令。

使用者(或者程序)必須象步2一樣重新發送TELNET SYNCH序列來確定TELNET IP到達伺服器的TELNET解釋器。“緊急”将喚醒TELNET程序;IP應該喚醒更進階的程序。NVT顯示和鍵盤 NVT顯示有一個未指定的行寬和頁面大小,并且可以産生代表ASCII碼的字元。

對于33個控制字元和另外128個沒有使用的字元,将指定給顯示:

NULL (NUL) 0 無操作;

Line Feed (LF) 10 将顯示移動到下一行的同一垂直位置。

Carriage Return (CR) 13 将顯示移至目前行的左邊界處。

另外,還應該定義如下字元(但這不是必須的),它們對顯示也有作用。TELNET的任何一方都不會假定另一方會在接收或傳送時采取以下行動:

BELL (BEL) 7 響鈴或者給出一個可視的信号(這并不移動顯示位置)。

Back Space (BS) 8将顯示向左移一個位置。

Horizontal Tab (HT) 9 将顯示移至下一個制表位。現在還未指定任何一方如何決定制表位的位置究竟在什麼地方。

Horizontal Tab (HT) 9 将顯示移至下一個垂直制表位。現在還未指定任何一方如何決定制表位的位置究竟在什麼地方。

Form Feed (FF) 12 将顯示移動到下頁起始位置,并保持相同的水準位置。所有現在的代碼都不使NVT顯示作任何操作。

CR LF序列将使顯示定位于下一顯示行的左邊界處。然而,許多系統和終端并不将這兩個字元分開處理而不得不作一些工作模拟它們的作用。(例如,一些終端沒有獨立于LF的CR,但在這些終端上可以通過後退鍵模拟CR的功能。)是以,CR LF序列必将作為新行标記使用它們的複合功能;CR NUL必須在希望僅輸入一個回車時使用;在其它情況下應該避免單獨使用CR。這個法則使必須決定是否進行一個“新行”操作功能或多個回退的系統能夠保證包括由一個字元在CR後面的TELNET流的操作,并作出正确的決定。注意:CR LF或者CR NUL對雙方都是要求的,這就保證了NVT的對稱性。即使在一些情況下可以知道字元未被送到實際的終端,然而,出于一緻性的考慮,協定要求在CR後面如果沒有LF就必須插入一個NUL。反過來說,在CR後面接收到一個NUL後,應該把它從資料流中抛棄,而不應該将它用于NVT的字元映射。

在NVT上有鍵盤,組合鍵或鍵序列來産生這全部128個字元。注意:雖然其中的一些對NVT顯示沒有作用,NVT也有能力産生它們。除了這些以外,NVT鍵盤還應該能夠産生如下有意義,但不要求的的字元。對這些字元的實際代碼指派在TELNET指令一節中,因為它們被作為普通的應該被提供的,即使在資料流被解釋為一些其它字元集的情況下。

Synch 此鍵允許使用者清除到另一方的資料通道。此鍵的激活導緻DM的發送,而且還導緻同時發送TCP的緊急信号。DM-緊急信号對有如前面定義的意義。

Break (BRK) 它的提供是因為它不是ASCII字元集内的一員。它訓示Break鍵和Attention鍵被按下。然而,請注意:它是作為第129個代碼,而不是IP标準定義。

Interrupt Process (IP) 暫停,中斷,放棄或終止NVT連接配接的程序的執行。同樣的,它也是使用TELNET協定的協定要使用的信号。

Abort Output (AO) 允許目前程序運作至終止,但不将結果送給使用者。同樣,發送SYNCH給使用者。

Are You There (AYT) 回送給NVT一些可見的字元。

Erase Character (EC) 接收方應該删除緊後一個未删除的字元或從資料流中删除一個“顯示位置”。

Erase Line (EL) 接收方應該将資料流中的字元從目前位置開始一直删除到最近的“CR LF”為止。

這些“額外”鍵的功能和一些顯示格式功能鍵是它們應該代表一個對從NVT到本地機映射的擴充。如同NVT資料位元組68應該被映射為大寫D一樣,一個EC字元應該被映射為一個“删除行”的功能鍵。另外,如果映射124在一些情況下是武斷的一樣,EL字元的映射有時候也是武斷的。對于格式字元也是一樣的:如果終端實際上擁有“垂直制表位”,那麼映射到NVT是顯然的,如果終端不提供此功能,那麼結果将是不可預料的。TELNET指令結構 所有TELNET指令結構至少包括一個兩個位元組的序列:由一個IAC後跟一個指令。關于選項會話的指令是由三個位元組的序列構成的,第三個位元組是關于選項參考的。選擇這種結構,這樣随着完全使用資料空格資料與指令值之間的沖突就會減少,所有這些沖突導緻了不一緻和沒有效率和資料的丢失。根據目前的設定,隻有與IAC沖突的資料需要被發送兩次,其它255個代碼都可以直接發送。下面是定義了的TELNET指令。注意:隻有當代碼和代碼序列前面是IAC時它才是指令。

SE 240 結束子會話參數。

NOP 241 無操作。

Data Mark 242 Synch的資料流部分。這應該總和TCP緊急标志一起發送。

Break 243 NVT 字元 BRK。

Interrupt Process 244 IP功能。

Abort output 245 AO功能。

Are You There 246 AYT功能。

Erase character 247 EC功能。

Erase character 247 EL功能。

Go ahead 249 The GA 信号。

SB 250 指出所跟随的是訓示選項的子對話。

WILL (option code) 251 訓示希望開始執行,或者确認現在正在操作訓示的選項。

WON'T (option code) 252 指出拒絕執行或繼續招待所訓示的選項。

DO (option code) 253 指出要求對方執行,或者确認希望對方執行訓示的選項。

DON'T (option code) 254 指出要求對方停止執行,或者确診要求對方停止執行訓示的選項。

IAC 255 資料位元組 255。

建立連接配接

TELNET TCP連接配接在使用者端口U和伺服器端口L之間建立。伺服器在這個公認的端口上等待連接配接。因為TCP連接配接是一個全雙工的,由雙方端口共同确認,伺服器可以同時在L端口同時處理許多來自不同U端口的連接配接。端口的指定 當用于遠端使用者通路服務主機,此協定指定端口23(也就是八進制的27)。那是 L = 23。