一、介紹
TELNETPRotocol的目的是提供一個相對通用的,雙向的,面向八位字節的通信方法。它主要的目標是答應接口終端設備的標準方法和面向終端的相互作用。可以預見到,此協議也可被用于終端到終端的通信和處理到處理的通信(分布式計算)。
一般考慮
一個TELNET連接是一個用于傳輸控制協議的傳送數據的。TELNET協議是建立在以下三個想法上的:首先是網絡虛擬終端的概念;其次是對話選項的方法;最后是終端和處理的協調。
當一個TELNET連接被初次建立時,每一端都被假設使用了網絡虛擬終端,也就是NVT。NVT是一個想象中的標準設備通用設備的代表。這就消除了“服務器”和“用戶”機要了解對方機器終端的特點,而終端可以直接處理對話。所有的主機,用戶端的和服務器端的,它們自己本地的設備特點因此在網絡上可以作為一種NVT處理,任何一個都可以認為對方使用的是相同特點的設備。NVT傾向于不過多地限制(提供了一個相應比較豐富的映射到本地設備的字符集),也不是包括一切的(它要求用戶使用適當的終端)。注重:用戶機通常是與處理終端連接的主機,服務器機通常是提供某種服務的機器。從另一點看,在終端到終端或進程到進程的通信上,用戶機是發起通信的機器。
規定選項的原理將以下事實考慮在內,許多機器希望在現在的NVT上提供另外的服務,多數用戶有比較復雜的終端,它們也就希望一種比較完整的而不是最小的服務。獨立的,但是存在于TELNET協議的不同選項支持這些需求,它們使用"DO,DON'T,WILL,WON'T"結構答應用戶機和服務器建立建立一種更加精巧的TELNET會話連接。這種選項包括改變字符集,響應模式等等。設置選項的基本策略是任一方(或者兩者)初始化要求一個選項生效的請求。另一方可以接受也可以拒絕這一請求。假如接受請求,此選項馬上生效;假如被拒絕,連接仍然保持基本的NVT的連接屬性。很明顯,一方可以拒絕另一方關于啟用某一選項的請求,但是不能拒絕另一方關于使一選項失效的請求,因為雙方必須預備支持NVT。對話選項語法的建立使在雙方都發出請求某一選項生效的請求時,另一方可以直接認為收到對方的確認信息。
這種對稱式的對話語法潛在地引起了一個不可終止的確認環--任何一方都將收到的確認信息看作是請求,而不是一個確認信息。為了防止這種循環的出現,有下面的規則:任何一方僅可以要求對選項狀態的變化:例如,一方不可以發出請求,僅僅說明它在什么樣的選項狀態下。
假如一方接收到好象是請求的信息,請求進入一個已經進入的狀態,此信息將被看作是一個確認消息。這種非響應從本質上防止了不可終止的對話的循環。假如要求發送一個要求改變狀態的請求,即使狀態并未改變。
無論何時,一方發送選項命令到另一方,無論作為一個請求或者是一個確認消息,選項的使用將對發送的數據處理有影響,這樣命令應該被插入到希望發生作用的數據流中的數據點之前。(應該注重,傳送請求和收到確認消息之間有一定的時間間隔,這是被動方式的。因此,一個主機希望在要求一個選項后緩存數據,直到它知道它的請求是否被接受,這樣就可以使這段不不確定時間對用戶不可見。)選項的請求可以在建立TELNET連接時十分頻繁地來往交換,因為每一方都希望從對方得到更好的服務。
除此以外,選項也可以在連接持續過程中動態改變來適應本地機器條件的變化。例如,NVT(它將以后被具體解釋)對于許多“一次一行”的應用程序,如BASIC是十分適用的,而對于如NLS的“一次一字”的應用程序卻不怎么好用。服務器可能被選擇作為“一次一字”法則來適應在其上運行的本地進程,它將發起對話以達到合適的選項狀態。然而,相對于永久地負責這種多余的處理負擔;它可以通過會話,在不需要這樣的選項狀態下回到NVT狀態。由一個進程發起的請求可以導致一個不可終止的請求循環,假如此進程對一個拒絕請求的響應是再次要求此選項。為了防止這樣循環的發生,被拒絕的請求在其它事情發生變化之前不能被重復請求。這可能意味著,進程運行另外一個程序,或者用戶發送另外的命令,或者用戶對于環境或選項的改變。
比較好的方法是,預請求應該作為由另一端發送信息的結果而發生,或者由于人為介入而發生。選項的設計者不應該因為對于選項會話的種種限制而感覺到伸不開手腳。一般語法的目的是更輕易地擁有選項--因為表示對它們的忽視也是輕易的。
假如特定的選項需要除"DO,DON'T,WILL,WON'T"以外的更豐富的結構,正確的方針是使用"DO,DON'T,WILL,WON'T"來建立連接解釋這種新結構,當這一解釋工作完成時,就可以自由地使用這一新結構了。例如,一方可能發送請求改變(或建立)每行的長度。假如接受了這些,對于對話的不同行長度可以使用不同的語法來表示--“子對話”可以包括一個域表示最大答應的,最小答應的和希望的長度。重要概念是這樣的擴充的會話應該直到雙方建立了標準的會話并且能夠解釋這種擴充的語法之后再進行。總的來說,WILLXXX發送時說明一方希望執行選項XXX,DOXXX和DON'TXXX作為確定的不確定的響應;同樣,DOXXX被作為一種請求發送給另一方來啟動選項XXX,WILLXXX和WON'T將被作為確定和不確定的響應。因為NVT是沒有任何選項時的結果,DON'T和WON'T響應將保證使連接最終保持于這種沒有任何選項的狀態。因此,所有主機可以不支持不理解的選項,它僅僅需要返回這種選項的請求即可。
盡可能的,TELNET協議被用作服務器-用戶的對稱,這樣,它就可以更輕易而自然地處理用戶-用戶和服務器-服務器的情況。用選項來擴展這一功能是被希望實現的,但不是必要的。在任何情況下,對稱是一個運行的準則而不是固定的準則多次被明確提出。一個比較文檔,“TELNET選項說明”,可以被用于對建立新選項過程信息的參考。
網絡虛擬終端網絡虛擬終端(NVT)是一個雙向字符設備。NVT有一個顯示設備和一個鍵盤。顯示設備響應到達的數據,鍵盤負責通過TELNET連接發送數據,假如需要回顯,也應該在NVT的顯示設備上顯示。對于網絡上的回顯并不要求(雖然確實存在這個“遠程”回顯選項,但是主機必不是必須實現此選項)。字符集是由七位ASCII碼組成的,而保存在八位的域中。任何字符的轉換和計時方面的考慮都是本地的問題,這不影響NVT的工作。
數據傳送方面,雖然TELNET連接是全雙工的,NVT卻是在線緩沖狀態下的半雙工設備。傳送數據雖然TELNET連接是全雙工的,在線緩沖模式下,NVT卻被當作半雙工的設備。此信號可以由進程或者用戶產生。對于一些主機處理網絡輸入中斷,或與默認的不進行遠程回顯的NVT說明的主機來說,此規則的代價是高昂的。因此,在源點緩存一些數據是有理由的。一些系統在每個輸入行未采用一些操作(即使是行打印機或打卡機也經常采用這種方法),這樣可以在每行未開始發送。在另一方面,用戶或者進程可以有時發覺提供在行未不中斷的數據是有用的而且是必須的;因此,也應該在實現在本地能夠識別這種信號并把這些數據馬上發送的方法和機制。當一個進程已經完成將數據發送到對方的顯示設備而且也沒有緩存的輸入數據時時,進程必須發送TELNETGoAhead(GA)命令。
這個規則并不是要求TELNETGA命令必須由雙方終端發送,因為服務器主機通常不要求特定的信號來繼續進程。但是,此命令的設計可以幫助用戶的本地主機操作一個物理上半雙工的終端,它假如IBM2741一樣擁有可鎖定的鍵盤。對此種類型終端的描述有助于解釋GA命令的正確使用。終端和計算機的連接總是在計算機或用戶的控制之下。任何一方都不能夠隱式地從另一方獲得控制權;控制權必須顯式地從一方轉移到另一方。
在終端一方,設置硬件在每一行結束時放棄控制權(例如,當用戶按下回車鍵時)。當這種情況發生時,本地計算機處理輸入數據,決定是否輸出,假如不需要,將控制權回送給終端。假如需要產生輸出,計算機將保有控制權直到輸出數據發送完畢。在網絡上使用這種終端的困難是顯而易見的。“本地”計算機不知道在讀到行未符號時是否應該繼續保持控制權;這個問題的決定權在遠地處理此數據的計算機。因此,TELNETGA命令提供了一種機制讓遠程計算機能夠通知本地計算機,讓它將控制權轉交給用戶終端。在用戶需要控制權時,此信號應該也只能在此時發送。注重:過早地發送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”或IBM2741中的“ATTN”鍵。當系統通過網絡連接時這種情況不一定就是準確的;網絡流量控制機制可能導致一個信號被緩存于網絡中某處,例如在用戶的主機中。為了克服這個問題,引入了TELNET的“Synch”機制。一個Synch信號包括一個TCP緊急信號和TELNET命令DATAMARK。
緊急信號,它不受限于限制TELNET的流量控制,它可以在接收到進程引發特定的數據處理。
在這種模式中,此數據流立即被看作是“有重大意義的”,而拋棄其它數據。
TELNET命令DATAMARK(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命令的停止字符串。試想此協議的用戶希望服務器來處理停止字符串,但連接因為服務器正在處理別的命令而被阻塞。用戶應該使它的系統做以上工作:
發送TELNETIP字符;
發送TELNETSYNC串,這就是說:發送DM作為在TCP緊急模式發送操作下的唯一字符串。
發送字符串STOP,并且發送其它協議的類型于TELNETDM的命令。
用戶(或者進程)必須象步2一樣重新發送TELNETSYNCH序列來確保TELNETIP到達服務器的TELNET解釋器。“緊急”將喚醒TELNET進程;IP應該喚醒更高級的進程。NVT顯示和鍵盤NVT顯示有一個未指定的行寬和頁面大小,并且可以產生代表ASCII碼的字符。
對于33個控制字符和另外128個沒有使用的字符,將指定給顯示:
NULL(NUL)0無操作;
LineFeed(LF)10將顯示移動到下一行的同一垂直位置。
CarriageReturn(CR)13將顯示移至當前行的左邊界處。
另外,還應該定義如下字符(但這不是必須的),它們對顯示也有作用。TELNET的任何一方都不會假定另一方會在接收或傳送時采取以下行動:
BELL(BEL)7響鈴或者給出一個可視的信號(這并不移動顯示位置)。
BackSpace(BS)8將顯示向左移一個位置。
HorizontalTab(HT)9將顯示移至下一個制表位。現在還未指定任何一方如何決定制表位的位置究竟在什么地方。
HorizontalTab(HT)9將顯示移至下一個垂直制表位。現在還未指定任何一方如何決定制表位的位置究竟在什么地方。
FormFeed(FF)12將顯示移動到下頁起始位置,并保持相同的水平位置。所有現在的代碼都不使NVT顯示作任何操作。
CRLF序列將使顯示定位于下一顯示行的左邊界處。然而,許多系統和終端并不將這兩個字符分開處理而不得不作一些工作模擬它們的作用。(例如,一些終端沒有獨立于LF的CR,但在這些終端上可以通過后退鍵模擬CR的功能。)因此,CRLF序列必將作為新行標記使用它們的復合功能;CRNUL必須在希望僅輸入一個回車時使用;在其它情況下應該避免單獨使用CR。這個法則使必須決定是否進行一個“新行”操作功能或多個回退的系統能夠保證包括由一個字符在CR后面的TELNET流的操作,并作出正確的決定。注重:CRLF或者CRNUL對雙方都是要求的,這就保證了NVT的對稱性。即使在一些情況下可以知道字符未被送到實際的終端,然而,出于一致性的考慮,協議要求在CR后面假如沒有LF就必須插入一個NUL。反過來說,在CR后面接收到一個NUL后,應該把它從數據流中拋棄,而不應該將它用于NVT的字符映射。
在NVT上有鍵盤,組合鍵或鍵序列來產生這全部128個字符。注重:雖然其中的一些對NVT顯示沒有作用,NVT也有能力產生它們。除了這些以外,NVT鍵盤還應該能夠產生如下有意義,但不要求的的字符。對這些字符的實際代碼指派在TELNET命令一節中,因為它們被作為普通的應該被提供的,即使在數據流被解釋為一些其它字符集的情況下。
Synch此鍵答應用戶清除到另一方的數據通道。此鍵的激活導致DM的發送,而且還導致同時發送TCP的緊急信號。DM-緊急信號對有如前面定義的意義。
Break(BRK)它的提供是因為它不是ASCII字符集內的一員。它指示Break鍵和Attention鍵被按下。然而,請注重:它是作為第129個代碼,而不是IP標準定義。
InterruptProcess(IP)暫停,中斷,放棄或終止NVT連接的進程的執行。同樣的,它也是使用TELNET協議的協議要使用的信號。
AbortOutput(AO)答應當前進程運行至終止,但不將結果送給用戶。同樣,發送SYNCH給用戶。
AreYouThere(AYT)回送給NVT一些可見的字符。
EraseCharacter(EC)接收方應該刪除緊后一個未刪除的字符或從數據流中刪除一個“顯示位置”。
EraseLine(EL)接收方應該將數據流中的字符從當前位置開始一直刪除到最近的“CRLF”為止。
這些“額外”鍵的功能和一些顯示格式功能鍵是它們應該代表一個對從NVT到本地機映射的擴充。如同NVT數據字節68應該被映射為大寫D一樣,一個EC字符應該被映射為一個“刪除行”的功能鍵。另外,假如映射124在一些情況下是武斷的一樣,EL字符的映射有時候也是武斷的。對于格式字符也是一樣的:假如終端實際上擁有“垂直制表位”,那么映射到NVT是顯然的,假如終端不提供此功能,那么結果將是不可預料的。TELNET命令結構所有TELNET命令結構至少包括一個兩個字節的序列:由一個IAC后跟一個命令。關于選項會話的命令是由三個字節的序列構成的,第三個字節是關于選項參考的。選擇這種結構,這樣隨著完全使用數據空格數據與命令值之間的沖突就會減少,所有這些沖突導致了不一致和沒有效率和數據的丟失。根據目前的設置,只有與IAC沖突的數據需要被發送兩次,其它255個代碼都可以直接發送。下面是定義了的TELNET命令。注重:只有當代碼和代碼序列前面是IAC時它才是命令。
SE240結束子會話參數。
NOP241無操作。
DataMark242Synch的數據流部分。這應該總和TCP緊急標志一起發送。
Break243NVT字符BRK。
InterruptProcess244IP功能。
Abortoutput245AO功能。
AreYouThere246AYT功能。
Erasecharacter247EC功能。
Erasecharacter247EL功能。
Goahead249TheGA信號。
SB250指出所跟隨的是指示選項的子對話。
WILL(optioncode)251指示希望開始執行,或者確認現在正在操作指示的選項。
WON'T(optioncode)252指出拒絕執行或繼續招待所指示的選項。
DO(optioncode)253指出要求對方執行,或者確認希望對方執行指示的選項。
DON'T(optioncode)254指出要求對方停止執行,或者確診要求對方停止執行指示的選項。
IAC255數據字節255。
二、建立連接
TELNETTCP連接在用戶端口U和服務器端口L之間建立。服務器在這個公認的端口上等待連接。因為TCP連接是一個全雙工的,由雙方端口共同確認,服務器可以同時在L端口同時處理許多來自不同U端口的連接。端口的指定當用于遠程用戶訪問服務主機,此協議指定端口23(也就是八進制的27)。那是L=23。
新聞熱點
疑難解答