?? telnet協(xié)議規(guī)范.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://www.longen.org/s-z/details~z/telnet.htm -->
<HTML><HEAD><TITLE>TELNET協(xié)議規(guī)范</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD width="100%">
<P> </P>
<P> <FONT face=宋體 size=4><B></P>
<P align=justify>TELNET協(xié)議規(guī)范</B></FONT><FONT face=宋體 size=3></P>
<P align=justify>ARPA Internet上的主機被要求采用并實現(xiàn)此標(biāo)準(zhǔn)。</P>
<P align=justify> </P>
<P> <B></P>
<P align=justify>介紹</B></P>
<P align=justify>TELNET
Protocol的目的是提供一個相對通用的,雙向的,面向八位字節(jié)的通信方法。它主要的目標(biāo)是允許接口終端設(shè)備的標(biāo)準(zhǔn)方法和面向終端的相互作用。可以預(yù)見到,此協(xié)議也可被用于終端到終端的通信和處理到處理的通信(分布式計算)。</P>
<P align=justify> </P>
<P> <B></P>
<P align=justify>一般考慮</B></P>
<P align=justify>一個TELNET連接是一個用于傳輸控制協(xié)議的傳送數(shù)據(jù)的。TELNET
協(xié)議是建立在以下三個想法上的:首先是網(wǎng)絡(luò)虛擬終端的概念;其次是對話選項的方法;最后是終端和處理的協(xié)調(diào)。</P>
<P align=justify> </P>
<OL>
<LI>當(dāng)一個TELNET連接被初次建立時,每一端都被假設(shè)使用了網(wǎng)絡(luò)虛擬終端,也就是NVT。NVT是一個想象中的標(biāo)準(zhǔn)設(shè)備通用設(shè)備的代表。這就消除了“服務(wù)器”和“用戶”機要了解對方機器終端的特點,而終端可以直接處理對話。所有的主機,用戶端的和服務(wù)器端的,它們自己本地的設(shè)備特點因此在網(wǎng)絡(luò)上可以作為一種NVT處理,任何一個都可以認為對方使用的是相同特點的設(shè)備。NVT傾向于不過多地限制(提供了一個相應(yīng)比較豐富的映射到本地設(shè)備的字符集),也不是包括一切的(它要求用戶使用適當(dāng)?shù)慕K端)。注意:用戶機通常是與處理終端連接的主機,服務(wù)器機通常是提供某種服務(wù)的機器。從另一點看,在終端到終端或進程到進程的通信上,用戶機是發(fā)起通信的機器。
<LI>規(guī)定選項的原理將以下事實考慮在內(nèi),許多機器希望在現(xiàn)在的NVT上提供另外的服務(wù),多數(shù)用戶有比較復(fù)雜的終端,它們也就希望一種比較完整的而不是最小的服務(wù)。獨立的,但是存在于
TELNET 協(xié)議的不同選項支持這些需求,它們使用"DO, DON'T, WILL, WON'T"
結(jié)構(gòu)允許用戶機和服務(wù)器建立建立一種更加精巧的TELNET會話連接。這種選項包括改變字符集,響應(yīng)模式等等。設(shè)置選項的基本策略是任一方(或者兩者)初始化要求一個選項生效的請求。另一方可以接受也可以拒絕這一請求。如果接受請求,此選項立刻生效;如果被拒絕,連接仍然保持基本的NVT的連接屬性。很明顯,一方可以拒絕另一方關(guān)于啟用某一選項的請求,但是不能拒絕另一方關(guān)于使一選項失效的請求,因為雙方必須準(zhǔn)備支持NVT。對話選項語法的建立使在雙方都發(fā)出請求某一選項生效的請求時,另一方可以直接認為收到對方的確認信息。
<LI>這種對稱式的對話語法潛在地引起了一個不可終止的確認環(huán)--任何一方都將收到的確認信息看作是請求,而不是一個確認信息。為了防止這種循環(huán)的出現(xiàn),有下面的規(guī)則:
</LI></OL>
<OL type=a>
<LI>任何一方僅可以要求對選項狀態(tài)的變化:例如,一方不可以發(fā)出請求,僅僅說明它在什么樣的選項狀態(tài)下。
<LI>如果一方接收到好象是請求的信息,請求進入一個已經(jīng)進入的狀態(tài),此信息將被看作是一個確認消息。這種非響應(yīng)從本質(zhì)上防止了不可終止的對話的循環(huán)。如果要求發(fā)送一個要求改變狀態(tài)的請求,即使?fàn)顟B(tài)并未改變。
<LI>無論何時,一方發(fā)送選項命令到另一方,無論作為一個請求或者是一個確認消息,選項的使用將對發(fā)送的數(shù)據(jù)處理有影響,這樣命令應(yīng)該被插入到希望發(fā)生作用的數(shù)據(jù)流中的數(shù)據(jù)點之前。(應(yīng)該注意,傳送請求和收到確認消息之間有一定的時間間隔,這是被動方式的。因此,一個主機希望在要求一個選項后緩存數(shù)據(jù),直到它知道它的請求是否被接受,這樣就可以使這段不不確定時間對用戶不可見。)選項的請求可以在建立TELNET連接時十分頻繁地來往交換,因為每一方都希望從對方得到更好的服務(wù)。
</LI></OL>
<P
align=justify>除此以外,選項也可以在連接持續(xù)過程中動態(tài)改變來適應(yīng)本地機器條件的變化。例如,NVT(它將以后被詳細解釋)對于許多“一次一行”的應(yīng)用程序,如BASIC是十分適用的,而對于如NLS的“一次一字”的應(yīng)用程序卻不怎么好用。服務(wù)器可能被選擇作為“一次一字”法則來適應(yīng)在其上運行的本地進程,它將發(fā)起對話以達到合適的選項狀態(tài)。然而,相對于永久地負責(zé)這種多余的處理負擔(dān);它可以通過會話,在不需要這樣的選項狀態(tài)下回到NVT狀態(tài)。由一個進程發(fā)起的請求可以導(dǎo)致一個不可終止的請求循環(huán),如果此進程對一個拒絕請求的響應(yīng)是再次要求此選項。為了防止這樣循環(huán)的發(fā)生,被拒絕的請求在其它事情發(fā)生變化之前不能被重復(fù)請求。這可能意味著,進程運行另外一個程序,或者用戶發(fā)送另外的命令,或者用戶對于環(huán)境或選項的改變。</P>
<P
align=justify>比較好的方法是,預(yù)請求應(yīng)該作為由另一端發(fā)送信息的結(jié)果而發(fā)生,或者由于人為介入而發(fā)生。選項的設(shè)計者不應(yīng)該因為對于選項會話的種種限制而感覺到伸不開手腳。一般語法的目的是更容易地擁有選項--因為表示對它們的忽視也是容易的。</P>
<P align=justify>如果特定的選項需要除"DO, DON'T, WILL, WON'T"以外的更豐富的結(jié)構(gòu),正確的方針是使用"DO,
DON'T, WILL,
WON'T"來建立連接解釋這種新結(jié)構(gòu),當(dāng)這一解釋工作完成時,就可以自由地使用這一新結(jié)構(gòu)了。例如,一方可能發(fā)送請求改變(或建立)每行的長度。如果接受了這些,對于對話的不同行長度可以使用不同的語法來表示--“子對話”可以包括一個域表示最大允許的,最小允許的和希望的長度。重要概念是這樣的擴充的會話應(yīng)該直到雙方建立了標(biāo)準(zhǔn)的會話并且能夠解釋這種擴充的語法之后再進行。總的來說,WILL
XXX發(fā)送時說明一方希望執(zhí)行選項XXX,DO XXX 和 DON'T XXX作為確定的不確定的響應(yīng);同樣,DO
XXX被作為一種請求發(fā)送給另一方來啟動選項XXX,WILL XXX 和WON'T將被作為確定和不確定的響應(yīng)。因為NVT是沒有任何選項時的結(jié)果,
DON'T和WON'T響應(yīng)將保證使連接最終保持于這種沒有任何選項的狀態(tài)。因此,所有主機可以不支持不理解的選項,它僅僅需要返回這種選項的請求即可。</P>
<P
align=justify>盡可能的,TELNET協(xié)議被用作服務(wù)器-用戶的對稱,這樣,它就可以更容易而自然地處理用戶-用戶和服務(wù)器-服務(wù)器的情況。用選項來擴展這一功能是被希望實現(xiàn)的,但不是必要的。在任何情況下,對稱是一個運行的準(zhǔn)則而不是固定的準(zhǔn)則多次被明確提出。一個比較文檔,“TELNET選項說明”,可以被用于對建立新選項過程信息的參考。</P>
<P
align=justify>網(wǎng)絡(luò)虛擬終端網(wǎng)絡(luò)虛擬終端(NVT)是一個雙向字符設(shè)備。NVT有一個顯示設(shè)備和一個鍵盤。顯示設(shè)備響應(yīng)到達的數(shù)據(jù),鍵盤負責(zé)通過TELNET連接發(fā)送數(shù)據(jù),如果需要回顯,也應(yīng)該在NVT的顯示設(shè)備上顯示。對于網(wǎng)絡(luò)上的回顯并不要求(雖然確實存在這個“遠程”回顯選項,但是主機必不是必須實現(xiàn)此選項)。字符集是由七位ASCII碼組成的,而保存在八位的域中。任何字符的轉(zhuǎn)換和計時方面的考慮都是本地的問題,這不影響NVT的工作。</P>
<P align=justify>數(shù)據(jù)傳送方面,雖然TELNET連接是全雙工的,NVT卻是在線緩沖狀態(tài)下的半雙工設(shè)備。傳送數(shù)據(jù)
雖然TELNET連接是全雙工的,在線緩沖模式下,NVT卻被當(dāng)作半雙工的設(shè)備。此信號可以由進程或者用戶產(chǎn)生。對于一些主機處理網(wǎng)絡(luò)輸入中斷,或與默認的不進行遠程回顯的NVT說明的主機來說,此規(guī)則的代價是高昂的。因此,在源點緩存一些數(shù)據(jù)是有理由的。一些系統(tǒng)在每個輸入行未采用一些操作(即使是行打印機或打卡機也經(jīng)常采用這種方法),這樣可以在每行未開始發(fā)送。在另一方面,用戶或者進程可以有時發(fā)覺提供在行未不中斷的數(shù)據(jù)是有用的而且是必須的;因此,也應(yīng)該在實現(xiàn)在本地能夠識別這種信號并把這些數(shù)據(jù)立刻發(fā)送的方法和機制。當(dāng)一個進程已經(jīng)完成將數(shù)據(jù)發(fā)送到對方的顯示設(shè)備而且也沒有緩存的輸入數(shù)據(jù)時時,進程必須發(fā)送TELNET
Go Ahead (GA)命令。</P>
<P align=justify>這個規(guī)則并不是要求 TELNET
GA命令必須由雙方終端發(fā)送,因為服務(wù)器主機通常不要求特定的信號來繼續(xù)進程。但是,此命令的設(shè)計可以幫助用戶的本地主機操作一個物理上半雙工的終端,它如果IBM2741一樣擁有可鎖定的鍵盤。對此種類型終端的描述有助于解釋GA命令的正確使用。終端和計算機的連接總是在計算機或用戶的控制之下。任何一方都不能夠隱式地從另一方獲得控制權(quán);控制權(quán)必須顯式地從一方轉(zhuǎn)移到另一方。</P>
<P
align=justify>在終端一方,設(shè)置硬件在每一行結(jié)束時放棄控制權(quán)(例如,當(dāng)用戶按下回車鍵時)。當(dāng)這種情況發(fā)生時,本地計算機處理輸入數(shù)據(jù),決定是否輸出,如果不需要,將控制權(quán)回送給終端。如果需要產(chǎn)生輸出,計算機將保有控制權(quán)直到輸出數(shù)據(jù)發(fā)送完畢。在網(wǎng)絡(luò)上使用這種終端的困難是顯而易見的。“本地”計算機不知道在讀到行未符號時是否應(yīng)該繼續(xù)保持控制權(quán);這個問題的決定權(quán)在遠地處理此數(shù)據(jù)的計算機。因此,TELNET
GA命令提供了一種機制讓遠程計算機能夠通知本地計算機,讓它將控制權(quán)轉(zhuǎn)交給用戶終端。在用戶需要控制權(quán)時,此信號應(yīng)該也只能在此時發(fā)送。注意:過早地發(fā)送GA命令會使輸出數(shù)據(jù)阻塞,因為用戶可以假定傳送系統(tǒng)暫停,因此不能將一行結(jié)束。當(dāng)然,前述內(nèi)容不能夠用于用戶到服務(wù)器方面的通信方面。在這個方面,GA命令可以在任何時候發(fā)送,可以根本不用發(fā)送。同樣,如果TELNET連接被用于進程到進程的通信,也不需要發(fā)送GA命令。</P>
<P
align=justify>最后,對于終端到終端的通信,可以在兩端都需要GA命令,也可以在一端,也可以兩端都需要。如果主機希望支持終端到終端的通信主機應(yīng)該提供一種讓用戶自由發(fā)送GA命令的方法;然而,對于一個TELNET進程而言,這并不是必須的。注意:TELNET模式的對稱性要求在概念上,兩端中的一端至少是一個NVT。控制函數(shù)的標(biāo)準(zhǔn)表示
如要本文的介紹中所說的,TELNET協(xié)議的目的是提供一種網(wǎng)絡(luò)上面向終端進程和終端設(shè)備的標(biāo)準(zhǔn)接口。</P>
<P
align=justify>這種類型互連的先前的經(jīng)驗告訴我們,在許多主機上已經(jīng)實現(xiàn)了類似的功能,但它們的實現(xiàn)方法卻差別很大。對于接觸這些系統(tǒng)的用戶而言,這些差別將是令人頭痛的。因此,TELNET定義了以下功能的五種標(biāo)準(zhǔn)表示。這種標(biāo)準(zhǔn)表示有一定的標(biāo)準(zhǔn)的意義,但這也不是必須的(例外是中斷處理函功能要其它使用TELNET的協(xié)議執(zhí)行);這也就是說,系統(tǒng)不提供給本地用戶的功能也不可以不提供給遠程用戶,它可以將標(biāo)準(zhǔn)表示作為非操作的功能。</P>
<P align=justify>在另一方面,給本地用戶提供此功能的系統(tǒng)必須也向傳送此功能標(biāo)準(zhǔn)表示的遠程用戶提供此功能。</P>
<P
align=justify>中斷處理(IP)一些系統(tǒng)提供可以暫停,中斷,放棄或終止用戶進程操作的功能。當(dāng)用戶確定它的進程處于不可結(jié)束的循環(huán)中,或不經(jīng)意地激活了一個進程時經(jīng)常使用此功能。IP是使用此功能的標(biāo)準(zhǔn)表示。實現(xiàn)者應(yīng)該注意的是:使用TELNET的其它協(xié)議可能也需要IP,因此,如果需要支持其它協(xié)議就應(yīng)該實現(xiàn)IP。放棄輸出
(AO)
許多系統(tǒng)提供此功能,它允許產(chǎn)生輸出的進程到達類似操作結(jié)束的點,而不將輸出發(fā)送到用戶的終端。更深一層的,此功能通常清除已產(chǎn)生的所有輸出,而不顯示到用戶的終端上。AO是使用此功能的標(biāo)準(zhǔn)表示。</P>
<P
align=justify>例如,一些子系統(tǒng)可能通常接受用戶命令,發(fā)送長文本串到用戶終端,最后發(fā)送一個提示用戶允許接收下一命令的提示符到用戶終端。如果在傳送文本串的過程中接收到AO命令,將會不再發(fā)送剩余的字符串,而直接顯示提示符告知用戶可以輸入下一命令。(這與接收到IP之后的操作可能有所不同;IP會放棄發(fā)送剩余的字符串而且退出子系統(tǒng)。)應(yīng)該注意到,使用提供此功能的服務(wù)器系統(tǒng)時外部緩沖區(qū)(在網(wǎng)絡(luò)和用戶本地主機上)也被清除;完成的正確方法是向用戶系統(tǒng)發(fā)送“Synch”信號。</P>
<P align=justify>你在此嗎 (AYT)
許多系統(tǒng)提供用戶這樣的功能,讓用戶知道是否正在運行。此功能在系統(tǒng)由于不可預(yù)知長度運算,或系統(tǒng)負載重的情況下長時間不響應(yīng)時由用戶發(fā)起。AYT是使用此功能的標(biāo)準(zhǔn)表示。</P>
<P align=justify>刪除字符(EC)
許多系統(tǒng)提供此功能用于刪除最近相鄰的不可刪除字符或用戶提供數(shù)據(jù)流的最近相鄰的“顯示位置”。此功能通常用于編輯鍵盤錯誤的輸入。EC是使用此功能的標(biāo)準(zhǔn)表示。注意:“顯示位置”可能包括多于一個的字符,它們是過多鍵入的結(jié)果或者如下格式的字符串:<char1>
BS <char2>...</P>
<P align=justify>刪除行(EL)
許多系統(tǒng)提供此功能用于刪除當(dāng)前輸入行中的所有數(shù)據(jù)。此功能通常被用于是編輯鍵盤輸入。EL是使用此功能的標(biāo)準(zhǔn)表示。</P>
<P align=justify>TELNET的"Synch"信號
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -